LyoKICogIE5vdGVwYWQgKEdlcm1hbiByZXNvdXJjZXMpCiAqCiAqICBDb3B5cmlnaHQgMTk5Nyw5OCBNYXJjZWwgQmF1ciA8bWJhdXJAZzI2LmV0aHouY2g+CiAqICBDb3B5cmlnaHQgMjAwMiBTeWx2YWluIFBldHJlb2xsZSA8c3BldHJlb2xsZUB5YWhvby5mcj4KICoKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19HRVJNQU4sIFNVQkxBTkdfTkVVVFJBTAoKTUFJTl9NRU5VIE1FTlUKewogUE9QVVAgIiZEYXRlaSIgewogIE1FTlVJVEVNICImTmV1XHRTdHJnK04iLCAgICAgICAgICAgQ01EX05FVwogIE1FTlVJVEVNICLWJmZmbmVuLi4uXHRTdHJnK08iLCAgICAgICAgQ01EX09QRU4KICBNRU5VSVRFTSAiJlNwZWljaGVyblx0U3RyZytTIiwgICAgICAgIENNRF9TQVZFCiAgTUVOVUlURU0gIlNwZWljaGVybiAmdW50ZXIuLi4iLCAgICAgICBDTURfU0FWRV9BUwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImRHJ1Y2tlbi4uLlx0U3RyZytQIiwgICAgICAgICAgQ01EX1BSSU5UCiAgTUVOVUlURU0gIlNlaXRlIGVpbiZyaWNodGVuLi4uIiwgICAgICBDTURfUEFHRV9TRVRVUAogIE1FTlVJVEVNICJEcnVja2VyJmVpbnJpY2h0dW5nLi4uIiwgICAgQ01EX1BSSU5URVJfU0VUVVAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJkJlZW5kZW4iLCAgICAgICAgICBDTURfRVhJVAogfQpQT1BVUCAiJkJlYXJiZWl0ZW4iIHsKICBNRU5VSVRFTSAiJlL8Y2tn5G5naWdcdFN0cmcrWiIsICAgICAgIENNRF9VTkRPCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZBdXNzY2huZWlkZW5cdFN0cmcrWCIsICAgICBDTURfQ1VUCiAgTUVOVUlURU0gIiZLb3BpZXJlblx0U3RyZytDIiwgICAgICAgICBDTURfQ09QWQogIE1FTlVJVEVNICImRWluZvxnZW5cdFN0cmcrViIsICAgICAgICAgQ01EX1BBU1RFCiAgTUVOVUlURU0gIiZM9nNjaGVuXHRFbnRmIiwgICAgQ01EX0RFTEVURQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICJBbGxlcyAmbWFya2llcmVuXHRTdHJnK0EiLCAgQ01EX1NFTEVDVF9BTEwKICBNRU5VSVRFTSAiJlVocnplaXQvRGF0dW1cdEY1IiwgICAgICAgIENNRF9USU1FX0RBVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJlplaWxlbnVtYnJ1Y2giLCAgICBDTURfV1JBUAogIE1FTlVJVEVNICImU2NocmlmdGFydGVuLi4uIiwJQ01EX0ZPTlQKIH0KUE9QVVAgIiZTdWNoZW4iIHsKICBNRU5VSVRFTSAiU3VjaGVuLi4uXHRTdHJnK0YiLCBDTURfU0VBUkNICiAgTUVOVUlURU0gIiZXZWl0ZXJzdWNoZW5cdEYzIiwgQ01EX1NFQVJDSF9ORVhUCiAgTUVOVUlURU0gIiZFcnNldHplbi4uLlx0U3RyZytIIiwgQ01EX1JFUExBQ0UKIH0KUE9QVVAgIiZIaWxmZSIgewogIE1FTlVJVEVNICImSW5oYWx0IiwgICAgICAgICAgIENNRF9IRUxQX0NPTlRFTlRTCiAgTUVOVUlURU0gIiZTdWNoZW4uLi4iLCAgICAgICAgQ01EX0hFTFBfU0VBUkNICiAgTUVOVUlURU0gIiZIaWxmZSBiZW51dHplbiIsICAgQ01EX0hFTFBfT05fSEVMUAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICLcJmJlciBOb3RlcGFkIiwgQ01EX0hFTFBfQUJPVVRfTk9URVBBRAogfQp9CgovKiBEaWFsb2cgYFBhZ2Ugc2V0dXAnICovCgpESUFMT0dfUEFHRVNFVFVQIERJQUxPRyAwLCAwLCAyMjUsIDk1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpGT05UIDgsICJNUyBTaGVsbCBEbGciCkNBUFRJT04gIlNlaXRlIGVpbnJpY2h0ZW4iCnsKTFRFWFQgICAgIiZLb3BmemVpbGU6IiwgIDB4MTQwLCAgIDEwLCAwNywgNDAsIDE1CkVESVRURVhUIElEQ19QQUdFU0VUVVBfSEVBREVSVkFMVUUsICAgNjAsIDA1LDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZGdd96ZWlsZToiLCAgMHgxNDIsICAgMTAsIDI0LCA0MCwgMTUKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9GT09URVJWQUxVRSwgICA2MCwgMjIsMTEwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAoKR1JPVVBCT1ggIlLkbmRlciAoTWlsbGltZXRlcikiLCAgMHgxNDQsICAxMCwgNDMsMTYwLCA0NQpMVEVYVCAgICAiJkxpbmtzOiIsICAgICAgICAweDE0NSwgICAyMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9MRUZUVkFMVUUsICAgICA1MCwgNTUsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImT2JlbjoiLCAgICAgICAgIDB4MTQ4LCAgICAyMCwgNzMsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9UT1BWQUxVRSwgICAgICA1MCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImUmVjaHRzOiIsICAgICAgIDB4MTRCLCAxMDAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfUklHSFRWQUxVRSwgICAxMzAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJlVudGVuOiIsICAgICAgMHgxNEUsMTAwLCA3MywgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX0JPVFRPTVZBTFVFLCAgMTMwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkRFRlBVU0hCVVRUT04gIk9LIiwgICAgICAgICBJRE9LLCAgICAgICAgICAgICAgICAgICAxODAsICAzLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiQWJicmVjaGVuIiwgICAgIElEQ0FOQ0VMLCAgICAgICAgICAgICAgIDE4MCwgMjEsIDQwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICImSGlsZmUiLCAgICAgICBJREhFTFAsICAgICAgICAgICAgICAgIDE4MCwgMzksIDQwLCAxNSwgV1NfVEFCU1RPUAp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7ClNUUklOR19QQUdFU0VUVVBfSEVBREVSVkFMVUUsICAgIiZmIgpTVFJJTkdfUEFHRVNFVFVQX0ZPT1RFUlZBTFVFLCAgICJTZWl0ZSAmcCIKClNUUklOR19OT1RFUEFELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFZGl0b3IiClNUUklOR19FUlJPUiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGZWhsZXIiClNUUklOR19XQVJOSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBY2h0dW5nIgpTVFJJTkdfSU5GTywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5mb3JtYXRpb24iCgpTVFJJTkdfVU5USVRMRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKHVuYmVuYW5udCkiCgpTVFJJTkdfQUxMX0ZJTEVTLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSBEYXRlaWVuICgqLiopIgpTVFJJTkdfVEVYVF9GSUxFU19UWFQsICAgICAgICAgICAgICAgICAgIlRleHRkYXRlaWVuICgqLnR4dCkiCgpTVFJJTkdfVE9PTEFSR0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGllIERhdGVpICclcycgaXN0IHp1IGdyb98gZvxyIGRlbiBFZGl0b3JcbiBcCkJlbnV0emVuIFNpZSBiaXR0ZSBlaW5lbiBhbmRlcmVuIEVkaXRvciwgdW0gZGllc2UgRGF0ZWkgenUgYmVhcmJlaXRlbi4iClNUUklOR19OT1RFWFQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTaWUgaGFiZW4ga2VpbmVuIFRleHQgZWluZ2VnZWJlbiwgZGVyIFwKZ2VzcGVpY2hlcnRcbiB3ZXJkZW4ga/ZubnRlLiBHZWJlbiBTaWUgVGV4dCBlaW4sIHVuZCB2ZXJzdWNoZW4gU2llIGVzIFwKXG5lcm5ldXQuIgpTVFJJTkdfRE9FU05PVEVYSVNULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGllIERhdGVpICclcydcbmV4aXN0aWVydCBuaWNodC5cblxuIFwKTfZjaHRlbiBTaWUgZWluZSBuZXVlIERhdGVpIGVyc3RlbGxlbiA/IgpTVFJJTkdfTk9UU0FWRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGF0ZWkgJXNcbiB3dXJkZSBnZeRuZGVydC5cblxuIFwKTfZjaHRlbiBTaWUgZGllIMRuZGVydW5nZW4gc3BlaWNoZXJuID8iClNUUklOR19OT1RGT1VORCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiclcycga2FubiBuaWNodCBnZWZ1bmRlbiB3ZXJkZW4uIgpTVFJJTkdfT1VUX09GX01FTU9SWSwgICAgICAgICAgICAgICAgICAgIk5pY2h0IGdlbvxnZW5kIEFyYmVpdHNzcGVpY2hlciwgXAp1bSBkaWVzZSBGdW5rdGlvblxuYWJ6dXNjaGxpZd9lbi4gQmVlbmRlbiBTaWUgZWluZSBvZGVyIG1laHJlcmUgXApcbkFud2VuZHVuZ2VuLCB1bSBkZW4gdmVyZvxnYmFyZW4gQXJiZWl0c3NwZWljaGVyIHp1XG5lcmj2aGVuLiIKCgp9Cg==