LyoKICogIE5vdGVwYWQgKERhbmlzaCByZXNvdXJjZXMpCiAqCiAqICBDb3B5cmlnaHQgMTk5OCBIZW5yaWsgT2xzZW4gPGhlbnJpa0BpYWVzdGUuZGs+CiAqICBDb3B5cmlnaHQgMjAwMiBTeWx2YWluIFBldHJlb2xsZSA8c3BldHJlb2xsZUB5YWhvby5mcj4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19EQU5JU0gsIFNVQkxBTkdfREVGQVVMVAoKTUFJTl9NRU5VIE1FTlUKewogUE9QVVAgIiZGaWxlciIgewogIE1FTlVJVEVNICImTnlcdEN0cmwrTiIsICAgICAgICAgICAgQ01EX05FVwogIE1FTlVJVEVNICLFJmJuLi4uXHRDdHJsK08iLCAgICAgICBDTURfT1BFTgogIE1FTlVJVEVNICImR2VtXHRDdHJsK1MiLCAgICAgICAgICAgICAgQ01EX1NBVkUKICBNRU5VSVRFTSAiR2VtIHNvJm0uLi4iLCAgICAgICBDTURfU0FWRV9BUwogIE1FTlVJVEVNICImVWRza3Jpdi4uLlx0Q3RybCtQIiwgICAgICAgICAgQ01EX1BSSU5UCiAgTUVOVUlURU0gIlNpZGUmb3Bz5nRuaW5nLi4uIiwgQ01EX1BBR0VfU0VUVVAKICBNRU5VSVRFTSAiJkluZHN0aWwgcHJpbnRlci4uLiIsICAgICAgIENNRF9QUklOVEVSX1NFVFVQCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZBZnNsdXQiLCAgICAgICAgICAgQ01EX0VYSVQKIH0KUE9QVVAgIiZSZWRpZ2VyIiB7CiAgTUVOVUlURU0gIiZGb3J0cnlkXHRDdHJsK1oiLCAgQ01EX1VORE8KICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJktsaXBcdEN0cmwrWCIsICAgICBDTURfQ1VUCiAgTUVOVUlURU0gIksmb3BpZXJcdEN0cmwrQyIsICAgQ01EX0NPUFkKICBNRU5VSVRFTSAiU+Z0ICZpbmRcdEN0cmwrViIsICBDTURfUEFTVEUKICBNRU5VSVRFTSAiJlNsZXRcdERlbCIsICAgICAgICBDTURfREVMRVRFCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIk1hcmtlciAmYWx0IiwgICAgICAgQ01EX1NFTEVDVF9BTEwKICBNRU5VSVRFTSAiJkRhdG8vdGlkXHRGNSIsICAgICBDTURfVElNRV9EQVRFCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIkF1dG9tYXRpc2sgJmxpbmplc2tpZnQiLCAgICBDTURfV1JBUAogfQpQT1BVUCAiJlP4ZyIgewogIE1FTlVJVEVNICImU/hnLi4uIiwgICAgICAgICAgIENNRF9TRUFSQ0gKICBNRU5VSVRFTSAiJkZpbmQgbuZzdGVcdEYzIiwgICBDTURfU0VBUkNIX05FWFQKIH0KUE9QVVAgIiZIauZscCIgewogIE1FTlVJVEVNICImSW5kaG9sZCIsICAgICAgICAgIENNRF9IRUxQX0NPTlRFTlRTCiAgTUVOVUlURU0gIiZT+GcgZWZ0ZXIgaGrmbHAgb20uLi4iLCAgICBDTURfSEVMUF9TRUFSQ0gKICBNRU5VSVRFTSAiJkJydWcgYWYgSGrmbHAiLCAgICBDTURfSEVMUF9PTl9IRUxQCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgUE9QVVAgIiZPbSBOb3Rlc2Jsb2siIHsKICAgTUVOVUlURU0gIiZMaWNlbnMuLi4iLCAgICAgICAgICBDTURfTElDRU5TRQogICBNRU5VSVRFTSAiJkluZ2VuIEdhcmVudGkuLi4iLCAgICAgQ01EX05PX1dBUlJBTlRZCiAgIE1FTlVJVEVNICImT20gV0lORS4uLiIsICAgICAgICAgQ01EX0FCT1VUX1dJTkUKICB9CiB9Cn0KCi8qIERpYWxvZyBgUGFnZSBzZXR1cCcgKi8KCkRJQUxPR19QQUdFU0VUVVAgRElBTE9HIDAsIDAsIDIyNSwgOTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQ0FQVElPTiAiU2lkZW9wc+Z0bmluZyIKewpMVEVYVCAgICAiJlNpZGVob3ZlZDoiLCAgMHgxNDAsICAgMTAsIDA3LCA0MCwgMTUKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9IRUFERVJWQUxVRSwgICA2MCwgMDUsMTEwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiU2lkZSZmb2Q6IiwgIDB4MTQyLCAgIDEwLCAyNCwgNDAsIDE1CkVESVRURVhUIElEQ19QQUdFU0VUVVBfRk9PVEVSVkFMVUUsICAgNjAsIDIyLDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkdST1VQQk9YICJNYXJnZW5lcjoiLCAgICAgIDB4MTQ0LCAgICAgMTAsIDQzLDE2MCwgNDUKTFRFWFQgICAgIiZWZW5zdHJlOiIsICAgICAgICAweDE0NSwgICAyMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9MRUZUVkFMVUUsICAgICA1MCwgNTUsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImVG9wOiIsICAgICAgICAgMHgxNDgsICAgIDIwLCA3MywgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX1RPUFZBTFVFLCAgICAgIDUwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZI+GpyZToiLCAgICAgICAweDE0QiwgMTAwLCA1NSwgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX1JJR0hUVkFMVUUsICAgMTMwLCA1NSwgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZCdW5kOiIsICAgICAgMHgxNEUsMTAwLCA3MywgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX0JPVFRPTVZBTFVFLCAgMTMwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkRFRlBVU0hCVVRUT04gIk9LIiwgICAgICAgICBJRE9LLCAgICAgICAgICAgICAgICAgICAxODAsICAzLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiQW5udWxsZXIiLCAgICAgSURDQU5DRUwsICAgICAgICAgICAgICAgMTgwLCAyMSwgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIiZIauZscCIsICAgICAgIElESEVMUCwgICAgICAgICAgICAgICAgMTgwLCAzOSwgNDAsIDE1LCBXU19UQUJTVE9QCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKU1RSSU5HX1BBR0VTRVRVUF9IRUFERVJWQUxVRSwgICAiJmYiClNUUklOR19QQUdFU0VUVVBfRk9PVEVSVkFMVUUsICAgIlBhZ2UgJnAiCgpTVFJJTkdfTk9URVBBRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm90ZXNibG9rIgpTVFJJTkdfRVJST1IsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRkVKTCIKU1RSSU5HX1dBUk5JTkcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFEVkFSU0VMIgpTVFJJTkdfSU5GTywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5mb3JtYXRpb24iCgpTVFJJTkdfVU5USVRMRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKGlra2UtbmF2bmdpdmV0KSIKClNUUklOR19BTExfRklMRVMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIGZpbGVyICgqLiopIgpTVFJJTkdfVEVYVF9GSUxFU19UWFQsICAgICAgICAgICAgICAgICAgIlRla3N0IGZpbGVyICgqLnR4dCkiCgpTVFJJTkdfVE9PTEFSR0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmlsZW4gJyVzJyBlciBmb3Igc3RvciB0aWwgTm90ZXNibG9rLiBcClxuQnJ1ZyBlbiBhbmRlbiBlZGl0b3IgdGlsIGF0IHJlZGlnZXJlIGZpbGVuLiIKU1RSSU5HX05PVEVYVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkR1IGhhciBpa2tlIHNrcmV2ZXQgbm9nZXQgdGVrc3QuIFwKXG5Ta3JpdiBub2dldCB0ZWtzdCwgb2cgcHL4diBz5SBpZ2VuIgpTVFJJTkdfRE9FU05PVEVYSVNULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmlsZW4gJyVzJ1xuZmluZGVzIGlra2VcblxuIFwK2G5za2VyIGR1IGF0IG9wcmV0dGUgZW4gbnkgZmlsID8iClNUUklOR19OT1RTQVZFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGaWxlbiAnJXMnXG5lciBibGV2ZXQg5m5kcmV0XG5cbiBcClZpbCBkdSBnZW1tZSDmbmRyaW5nZXJuZSA/IgpTVFJJTkdfTk9URk9VTkQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLYW4gaWtrZSBmaW5kZSAnJXMnLiIKU1RSSU5HX09VVF9PRl9NRU1PUlksICAgICAgICAgICAgICAgICAgICJEZXIgZXIgaWtrZSBub2sgaHVrb21tZWxzZSB0aWwgYXQgdWRm+HJlIFwKZGVubmUgb3BlcmF0aW9uLiBcbkFmc2x1dCBldCBlbGxlciBmbGVyZSBha3RpdmUgcHJvZ3JhbW1lciBmb3IgYXQgZnJpZ/hyZSBcCmh1a29tbWVsc2UsIG9nIHBy+HYgaWdlbi4iCgp9Cg==