LyoKICogIE5vdGVwYWQgKERhbmlzaCByZXNvdXJjZXMpCiAqCiAqICBDb3B5cmlnaHQgMTk5OCBIZW5yaWsgT2xzZW4gPGhlbnJpa0BpYWVzdGUuZGs+CiAqICBDb3B5cmlnaHQgMjAwMiBTeWx2YWluIFBldHJlb2xsZSA8c3BldHJlb2xsZUB5YWhvby5mcj4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKTUFJTl9NRU5VIE1FTlUgTEFOR1VBR0UgTEFOR19EQU5JU0gsIFNVQkxBTkdfTkVVVFJBTAp7CiBQT1BVUCAiJkZpbGVmIiB7CiAgTUVOVUlURU0gIiZOeS4uLiIsIDB4MTAwCiAgTUVOVUlURU0gIsUmYm5cdEVudGVyIiwgMHgxMDEKICBNRU5VSVRFTSAiJkdlbSIsIDB4MTAyCiAgTUVOVUlURU0gIkdlbSBzbyZtLi4uIiwgMHgxMDMKICBNRU5VSVRFTSAiJlVkc2tyaXYiLCAweDEwNAogIE1FTlVJVEVNICJTaWRlJm9wc+Z0bmluZy4uLiIsIDB4MTA1CiAgTUVOVUlURU0gIiZJbmRzdGlsIHByaW50ZXIuLi4iLCAweDEwNgogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImQWZzbHV0IiwgMHgxMDgKIH0KUE9QVVAgIiZSZWRpZ2VyIiB7CiAgTUVOVUlURU0gIiZGb3J0cnlkXHRDdHJsK1oiLCAweDExMAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImS2xpcFx0Q3RybCtYIiwgMHgxMTEKICBNRU5VSVRFTSAiSyZvcGllclx0Q3RybCtDIiwgMHgxMTIKICBNRU5VSVRFTSAiU+Z0ICZpbmRcdEN0cmwrViIsIDB4MTEzCiAgTUVOVUlURU0gIiZTbGV0XHREZWwiLCAweDExNAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICJNYXJrZXIgJmFsdCIsIDB4MTE2CiAgTUVOVUlURU0gIiZEYXRvL3RpZFx0RjUiLCAweDExNwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICJBdXRvbWF0aXNrICZsaW5qZXNraWZ0IiwgMHgxMTkKIH0KUE9QVVAgIiZT+GciIHsKICBNRU5VSVRFTSAiJlP4Zy4uLiIsIDB4MTIwCiAgTUVOVUlURU0gIiZGaW5kIG7mc3RlXHRGMyIsIDB4MTIxCiB9ClBPUFVQICImSGrmbHAiIHsKICBNRU5VSVRFTSAiJkluZGhvbGQiLCAweDEzMAogIE1FTlVJVEVNICImU/hnIGVmdGVyIGhq5mxwIG9tLi4uIiwgMHgxMzEKICBNRU5VSVRFTSAiJkJydWcgYWYgSGrmbHAiLCAweDEzMgogIE1FTlVJVEVNIFNFUEFSQVRPUgogIFBPUFVQICImT20gTm90ZXNibG9rLi4uIiB7CiAgIE1FTlVJVEVNICImTGljZW5zIiwgMHgxMzUKICAgTUVOVUlURU0gIiZOTyBXQVJSQU5UWSIsIDB4MTM2CiAgIE1FTlVJVEVNICImT20gV0lORSIsIDB4MTM3CiAgfQogfQp9CgovKiBEaWFsb2cgYFBhZ2Ugc2V0dXAnICovCgpESUFMT0dfUEFHRVNFVFVQXyBESUFMT0cgMCwgMCwgMjI1LCA5NQpMQU5HVUFHRSBMQU5HX0RBTklTSCwgU1VCTEFOR19ORVVUUkFMClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpGT05UIDgsICJIZWx2IgpDQVBUSU9OICJTaWRlb3Bz5nRuaW5nIgp7CkxURVhUICAgICImU2lkZWhvdmVkOiIsICAweDE0MCwgICAxMCwgMDcsIDQwLCAxNQpFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MSwgICAgICAgNjAsIDA1LDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIlNpZGUmZm9kOiIsICAweDE0MiwgICAxMCwgMjQsIDQwLCAxNQpFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MywgICAgICAgNjAsIDIyLDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkdST1VQQk9YICJNYXJnZW5lcjoiLCAgICAgIDB4MTQ0LCAgICAgMTAsIDQzLDE2MCwgNDUKTFRFWFQgICAgIiZWZW5zdHJlOiIsICAgICAgICAweDE0NSwgICAyMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgLypTVFJJTkdfUEFHRVNFVFVQX0xFRlRWQUxVRSwqLyAgIDB4MTQ3LCAgICAgICA1MCwgNTUsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImVG9wOiIsICAgICAgICAgMHgxNDgsICAgIDIwLCA3MywgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCAvKlNUUklOR19QQUdFU0VUVVBfVE9QVkFMVUUsKi8gICAgMHgxNEEsICAgICAgICA1MCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImSPhqcmU6IiwgICAgICAgMHgxNEIsIDEwMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgLypTVFJJTkdfUEFHRVNFVFVQX1JJR0hUVkFMVUUsKi8gIDB4MTRELCAgICAgMTMwLCA1NSwgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZCdW5kOiIsICAgICAgMHgxNEUsMTAwLCA3MywgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCAvKlNUUklOR19QQUdFU0VUVVBfQk9UVE9NVkFMVUUsKi8gMHgxNTAsICAgIDEzMCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpERUZQVVNIQlVUVE9OICJPSyIsICAgICAgICAgMHgxNTEsICAgICAgICAgICAgICAgICAgIDE4MCwgIDMsIDQwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJBbm51bGxlciIsICAgICAweDE1MiwgICAgICAgICAgICAgICAxODAsIDIxLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiJkhq5mxwIiwgICAgICAgMHgxNTMsICAgICAgICAgICAgICAgIDE4MCwgMzksIDQwLCAxNSwgV1NfVEFCU1RPUAp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRSBMQU5HVUFHRSBMQU5HX0RBTklTSCwgU1VCTEFOR19ORVVUUkFMCnsKU1RSSU5HX1BBR0VTRVRVUF9IRUFERVJWQUxVRSwJIiZuIiAgICAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9GT09URVJWQUxVRSwJIlBhZ2UgJnMiICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9MRUZUVkFMVUUsCQkiMjAgbW0iICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX1JJR0hUVkFMVUUsCSIyMCBtbSIgICAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfVE9QVkFMVUUsCQkiMjUgbW0iICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX0JPVFRPTVZBTFVFLAkiMjUgbW0iICAgICAvKiBGSVhNRSAqLwoKU1RSSU5HX05PVEVQQUQsCQkJCQkiTm90ZXNibG9rIgpTVFJJTkdfRVJST1IsCQkJCQkiRkVKTCIKU1RSSU5HX1dBUk5JTkcsCQkJCQkiQURWQVJTRUwiClNUUklOR19JTkZPLAkJCQkJIkluZm9ybWF0aW9uIgoKU1RSSU5HX1VOVElUTEVELAkJCQkiKGlra2UtbmF2bmdpdmV0KSIKClNUUklOR19BTExfRklMRVMsCQkJCSJBbGxlIGZpbGVyICgqLiopIgpTVFJJTkdfVEVYVF9GSUxFU19UWFQsCQkJIlRla3N0IGZpbGVyICgqLnR4dCkiCgpTVFJJTkdfVE9PTEFSR0UsCQkJCSJGaWxlbiAnJXMnIGVyIGZvciBzdG9yIHRpbCBOb3Rlc2Jsb2suIFwKXG5CcnVnIGVuIGFuZGVuIGVkaXRvciB0aWwgYXQgcmVkaWdlcmUgZmlsZW4uIgpTVFJJTkdfTk9URVhULAkJCQkJIkR1IGhhciBpa2tlIHNrcmV2ZXQgbm9nZXQgdGVrc3QuIFwKXG5Ta3JpdiBub2dldCB0ZWtzdCwgb2cgcHL4diBz5SBpZ2VuIgpTVFJJTkdfRE9FU05PVEVYSVNULAkJCQkiRmlsZSAnJXMnXG5kb2VzIG5vdCBleGlzdFxuXG4gXApEbyB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgZmlsZSA/IgpTVFJJTkdfTk9UU0FWRUQsCQkJCSJGaWxlICclcydcbmhhcyBiZWVuIG1vZGlmaWVkXG5cbiBcCldvdWxkIHlvdSBsaWtlIHRvIHNhdmUgdGhlIGNoYW5nZXMgPyIKU1RSSU5HX05PVEZPVU5ELAkJCQkJIkthbiBpa2tlIGZpbmRlICclcycuIgpTVFJJTkdfT1VUX09GX01FTU9SWSwJCQkiRGVyIGVyIGlra2Ugbm9rIGh1a29tbWVsc2UgdGlsIGF0IHVkZvhyZSBcCmRlbm5lIG9wZXJhdGlvbi4gXG5BZnNsdXQgZXQgZWxsZXIgZmxlcmUgYWt0aXZlIHByb2dyYW1tZXIgZm9yIGF0IGZyaWf4cmUgXApodWtvbW1lbHNlLCBvZyBwcvh2IHPlIGlnZW4uIgoKfQo=