J1wiIHQKLlwiIENvcHlyaWdodCAyMDA2IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi5cIiBETyBOT1QgQUxURVIgT1IgUkVNT1ZFIENPUFlSSUdIVCBOT1RJQ0VTIE9SIFRISVMgRklMRSBIRUFERVIuCi5cIgouXCIgVGhpcyBjb2RlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLlwiIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIG9ubHksIGFzCi5cIiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLlwiCi5cIiBUaGlzIGNvZGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLlwiIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgouXCIgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi5cIiB2ZXJzaW9uIDIgZm9yIG1vcmUgZGV0YWlscyAoYSBjb3B5IGlzIGluY2x1ZGVkIGluIHRoZSBMSUNFTlNFIGZpbGUgdGhhdAouXCIgYWNjb21wYW5pZWQgdGhpcyBjb2RlKS4KLlwiCi5cIiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCi5cIiAyIGFsb25nIHdpdGggdGhpcyB3b3JrOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi5cIiBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCi5cIgouXCIgUGxlYXNlIGNvbnRhY3QgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiwgNDE1MCBOZXR3b3JrIENpcmNsZSwgU2FudGEgQ2xhcmEsCi5cIiBDQSA5NTA1NCBVU0Egb3IgdmlzaXQgd3d3LnN1bi5jb20gaWYgeW91IG5lZWQgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvcgouXCIgaGF2ZSBhbnkgcXVlc3Rpb25zLgouXCIgCi5USCB0bmFtZXNlcnYgMSAiMjAwNiDHryA5ILfuIDQgxvwiICJKYXZhIFNFIDYiICKl5qG8pbahvKWzpd6l86XJIgouU0ggIsy+wbAiCkphdmEgSURMOiCw7Lv+pc2hvKXgpbWhvKXTpbkgXC0gXGYydG5hbWVzZXJ2XGZQCi5MUAoKLkxQCi5MUAqks6TOpcmlraXlpeGl86XIpMekz6GiSmF2YSBJREwgsOy7/qXNobyl4KW1obyl06W5IFxmMnRuYW1lc2VydlxmUCCkzrvIzdHK/cuhpMukxKSkpMbA4szApLek3qS5oaNKYXZhIElETCCky6TPIE9SQkQgKE9iamVjdCBSZXF1ZXN0IEJyb2tlciBEYWVtb24pIKTitN6k3qTspMakpKTepLmho09SQkQgpM+hoqXWobylyKW5pcil6aXDpdeltaG8pdOluaGisOy7/qXNobyl4KW1obyl06W5oaJcZjO7/cKzXGZQpc2hvKXgpbWhvKXTpbmhoqSqpOik06W1obyl0KG8pd6lzaG8pbil46TytN6k4KXHobyl4qXzpdel7aW7pbmkx6S5oaNKYXZhIElETCCkzqS5pNmkxqTOpcGl5aG8pcil6qWipeukx6TPIE9SQkQgpKy7yM3RpLWk7KTGpKSk3qS5pKyhorDsu/6lzaG8peCltaG8pdOluaTyu8jN0aS5pOvO46TOIFxmMm9yYmRcZlAgpM+kyaTspOKholxmMnRuYW1lc2VydlxmUCCkx8PWpK20uaSopOuks6TIpKykx6StpN6kuaGjXGYyb3JiZFxmUCClxKG8peukzqXJpa2l5aXhpfOlyKTLpMSkpKTGpM+hoqS9pM6l3qXLpeWloqXrpdqhvKW4pKuhogoubmEKXGYySmF2YSBJREwgTmFtaW5nIFNlcnZpY2UgSW5jbHVkZWQgd2l0aCBPUkJEXGZQCi5maQooaHR0cDovL2phdmEuc3VuLmNvbS9qYXZhc2UvNi9kb2NzL3RlY2hub3Rlcy9ndWlkZXMvaWRsL2ppZGxOYW1pbmcuaHRtbCkgpM6lyKXUpcOlr6Tyu7K+yKS3pMakr6TApLWkpKGjCi5MUAouTFAKpLOks6THpM+horyhpM654MzcpMukxKSkpMbA4szApLek3qS5oaMKLkxQCi5SUyAzCi5UUCAyCm8KSmF2YVwgSURMILDsu/6lzaG8peCltaG8pdOluQouVFAgMgpvCkphdmFcIElETCCw7Lv+pc2hvKXgpbWhvKXTpbmkzrWvxrAKLlRQIDIKbwpKYXZhXCBJREwgsOy7/qXNobyl4KW1obyl06W5pM7E5LvfCi5UUCAyCm8KpbWl86XXpeulr6XppaSloqXzpcg6IMy+wbC29bTWpNikzqWqpdaluKWnpa+lyKTOxMmywwouVFAgMgpvCqW1pfOl16Xrpa+l6aWkpaKl86XIOiDMvsGwtvW01qTOpdal6aWmpboKLlJFCgouTFAKLlNIICJKYXZhXCBJREwgsOy7/qXNobyl4KW1obyl06W5IgouSVggIkphdmEgSURMIG5hbWUgc2VydmVyIHN0YXJ0ZXIgc2NyaXB0IiAiIiAiSmF2YSBJREwgbmFtZSBzZXJ2ZXIgc3RhcnRlciBzY3JpcHQgXChlbSBcZkx0bmFtZXNlcnZcZlAiCi5JWCAidG5hbWVzZXJ2IiAiIiAiXGZMdG5hbWVzZXJ2XGZQIFwoZW0gSmF2YSBJREwgbmFtZSBzZXJ2ZXIgc3RhcnRlciBzY3JpcHQiCi5TTSBDT1JCQQqkzgouU00gQ09TCihDb21tb24gT2JqZWN0IFNlcnZpY2VzKSClzaG8peCltaG8pdOluaTPoaKl1aWhpaSl66W3pbmlxqXgpKyl1aWhpaSl66TLwtCkt6TGpcelo6Xspa+lyKXqCrm9wqSk8sTztqGkt6TGpKSk66TOpMjGsaS4pOikpqTLoaKlqqXWpbilp6Wvpci7sr7IpMvC0KS3pMalxKXqoby5vcKkpM6lx6Wjpeylr6XIpeqk8sTztqGktwqk3qS5oaMKSmF2YQouU00gSURMCqTOsOy7/qXNobyl4KW1obyl06W5oaJcZjJ0bmFtZXNlcnZcZlAgpM+hogouU00gQ09TCqXNobyl4KW1obyl06W5pM67xc3NpPLDsb3jpMq3waTHvMLB9aS3pL+k4qTOpMekuaGjIAouTFAKpaql1qW4paelr6XIu7K+yKTPzL7BsLb1tNaky8y+wbCkx7PKx7yktaTsoaKlqqXWpbilp6Wvpci7sr7IpMjMvsGwpM7ByKTPoaIKpL2k7KS+pOyh1qXNobyl4KXQpaSl86XHpaOl86WwodekyLjGpNCk7KTepLmho6XNobyl4KXQpaSl86XHpaOl86WwpM+h1qXNobyl3wql86WwpbOl86XGpa2luaXIodeky8HIpN+5/qTgpLOkyKSspMekraTepLmho6XNobyl36XzpbCls6XzpcalraW5pcikz6S9pOy8q8LOCqSspc2hvKXgpdClpKXzpcelo6XzpbCkx6SipOqhoqXVpaGlpKXrpbeluaXGpeCkzqW1pdalx6Wjpeylr6XIpeqkyMaxpLjK1MCutaEKx72k8rv9pMGk3qS5oaOkuaTZpMakzqXQpaSl86XHpaOl86WwpM+h1r3ptPylzaG8pd+l86WwpbOl86XGpa2luaXIodeky7PKx7yktQqk7KTepLmho8y+wbC29bTWpMukqqSkpMahor3ptPylzaG8pd+l86WwpbOl86XGpa2luaXIpM/No7DspM67/cKzxaql0KWkpfMKpcelo6XzpbCkx6S5oaOkvaTssMqzsKTOpc2hvKXfpfOlsKWzpfOlxqWtpbmlyKTPoaJKYXZhCi5TTSBJREwKpM6lzaG8peCltaG8pdChvKXXpe2lu6W5pKzE5LvfpLehorrGta/GsKS1pOyk66TIvLqk76TspN6kuaGjIAouTFAKpaKl16XspcOlyKTepL+kz6Wipdel6qWxobylt6XnpfOkq6TpCi5TTSBDT1MKpc2hvKXgpbWhvKXTpbmk8rvIzdGkuaTrpL+k4aTLpM+hoqS9pM4KLlNNIE9SQgqkz6XNobyl4KW1obyl06W5pKzGsLrupLekxqSkpOul26W5pcikzqXdobylyKTyw86kw6TGpKSk66SroaKkvaTOpc2hvKXgpbWhvKXTpbmkzgrKuLv6zvOyvaS1pOykv73ptPylzaG8pd+l86WwpbOl86XGpa2luaXIpMuloqWvpbuluaTHpK2kyqSxpOyk0KTKpOqk3qS7pPOhowqlzaG8peCltaG8pdOluaTPoaJKYXZhCi5TTSBJREwKpM6lzaG8peCltaG8pdOluaTHpOKkvaTOwr6kzgouU00gQ09TCr3gtfKkzqXNobyl4KW1obyl06W5pMek4qSrpN6kpKTepLuk86GjIAouTFAKLlNIICJKYXZhXCBJREwgsOy7/qXNobyl4KW1obyl06W5pM61r8awIgouTFAKLkxQCi5JWCAidG5hbWVzZXJ2IiAiU3RhcnRpbmcgdGhlIEphdmEgSURMIE5hbWUgU2VydmVyIiAiXGZMdG5hbWVzZXJ2XGZQIFwoZW0gSmF2YSBJREwgbmFtZSBzZXJ2ZXIgc3RhcnRlciBzY3JpcHQiCkphdmEKLlNNIElETAqlzaG8peCltaG8pdOluaTPoaKlzaG8peCltaG8pdOluaTyu8jN0aS5pOuloqXXpeqlsaG8pbel56XzpN6kv6TPpaKl16XspcOlyKTopOrBsKTLCrWvxrCkt6TGpKqkq6TKpLGk7KTQpMqk6qTepLuk86GjCkphdmFcIElETCDAvcnKpPKlpKXzpbmlyKG8peukuaTrpMihokphdmFcIElETCClzaG8peCltaG8pdOluaTyta/GsKS5pOukv6ThpM6luaWvpeql16XIIChTb2xhcmlzOiBcZjJ0bmFtZXNlcnZcZlApIKTepL+kz7zCudSyxMe9pdWloaWkpesgKFdpbmRvd3MgTlQ6IFxmMnRuYW1lc2Vydi5leGVcZlApIKSsuu7ArqS1pOyk3qS5oaMKpdClw6WvpbCl6aWmpfOlyaTHCsawuu6kuaTrpOikpqTLoaKlzaG8peCltaG8pdOluaTyta/GsKS3pMakr6TApLWkpKGjCi5MUArGw6TLu9jE6qS3pMqkpL7sueehokphdmEKLlNNIElETAqlzaG8peCltaG8pdOluaTPoaIKLlNNIE9SQgqkzgouSSByZXNvbHZlX2luaXRpYWxfcmVmZXJlbmNlcyhcfCkKpeGlvaXDpcmkyAouSSBsaXN0X2luaXRpYWxfcmVmZXJlbmNlcyhcfCkKpeGlvaXDpcmkzrzCwfWky7vIzdGkuaTrpdahvKXIpbmlyKXppcOl16XXpe2lyKWzpeuky8LQpLekxqXdobylyCA5MDAgpMfC1LWhpLek3qS5oaMKvKGkzqTopKaky6S3pN6kuaGjIAouTFAKLm5mClxmMwouZmwKICAgICAgICB0bmFtZXNlcnYgXC1PUkJJbml0aWFsUG9ydCBcZlBcZjRuYW1lc2VydmVycG9ydFxmUFxmMyYKLmZsClxmUAouZmkKCi5MUAouTFAKpc2hvKXgpbWhvKXQobykzqXdobylyKTyu9jE6qS3pMqkq6TDpL++7LnnoaKlx6XVpaml66XIpMel3aG8pcggOTAwIKSsu8jN0aS1pOyk3qS5oaNTb2xhcmlzIKW9pdWlyKWmpaeloqTyvMK51KS5pOu+7LnnoaIxMDI0IKTopOqk4r6upLWkpKXdobylyKTHpdel7aW7pbmk8rWvxrCkuaTrpMukzyByb290IKTLpMqk68mszdekrKSipOqk3qS5oaOks6TOpL+k4aGiMTAyNCCkq6S9pOyk6KTqpOLC56StpKSl3aG8pcjI1rnmpPK7yM3RpLmk66SzpMik8qSqtKuk4aS3pN6kuaGjMTA1MCCkyqTJpM6w26TKpOul3aG8pcik8rvYxOqkt6GipKukxKXNobyl4KW1obyl06W5pPKl0KXDpa+lsKXppaal86XJpMe8wrnUpLmk66TLpM+holVOSVggpbOl3qXzpcmlt6Wnpeukq6TpvKGkzqTopKaky8b+zs+kt6TepLmhowouTFAKLm5mClxmMwouZmwKICAgICAgICB0bmFtZXNlcnYgXC1PUkJJbml0aWFsUG9ydCAxMDUwJgouZmwKXGZQCi5maQoKLkxQCi5MUApXaW5kb3dzIKTOvuy556TPoaJNU1wtRE9TIKW3pbmlxqXgpdel7aXzpdelyKSrpOm8oaTOpOikpqTLxv7Oz6S3pN6kuaGjCi5MUAoubmYKXGYzCi5mbAogICAgICAgIHN0YXJ0IHRuYW1lc2VydiBcLU9SQkluaXRpYWxQb3J0IDEwNTAKLmZsClxmUAouZmkKCi5MUAouTFAKpc2hvKXgpbWhvKXQobykzqWvpemlpKWipfOlyKTLpM+hor+3pLekpKXdobylyMjWueak8sPOpOmku6TryazN16SspKKk6qTepLmho6SzpM6kv6ThoaJPUkIgpaql1qW4paelr6XIpM667sCuu/6kyyBcZjJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0XGZQIKXXpe2l0aXGpaOky7+3pLekpKXdobylyMjWueak8sDfxOqkt6TepLmhoyAKLkxQCi5TUyAKsNukyqTrpduluaXIvuWkx6TOpbWhvKXQobykyKWvpemlpKWipfOlyKTOvMK51AouTFAKLkxQCkphdmEgSURMIKSqpOik0yBSTUlcLUlJT1AgpMu02KS5pOulwaXlobylyKXqpaKl66TOwufJ9MqspMekz6Gipc2hvKXgpbWhvKXTpbmhoqW1obyl0KG8oaKlr6XppaSloqXzpcikzqS5pNmkxqSss6vIr6Xepbel877lpMe8wrnUpLWk7KTGpKSk3qS5oaO8wrrdpM7H28j3pMekz8TMvu+hoqXNobyl4KW1obyl06W5pMikz7DbpMqk66XbpbmlyKXepbel877lpMelr6XppaSloqXzpcikyKW1obyl0KG8pKy8wrnUpLWk7KTepLmhowouTFAKLkxQCqWvpemlpKWipfOlyKTIpbWhvKXQobykx6XNobyl4KW1obyl06W5pPK4obr3pLmk66TLpM+hoqXNobyl4KW1obyl06W5pKy8wrnUpLWk7KTGpKSk66XdobylyMjWueakyKXbpbmlyKTypL2k7KTppKzDzqTDpMakpKTryazN16SspKKk6qTepLmho6S9pLOkx6Gipa+l6aWkpaKl86XIpMiltaG8pdChvKTOpdWloaWkpevG4qTOIFxmMm9yZy5vbWcuQ09SQkEuT1JCSW5pdGlhbFBvcnRcZlAgpMggXGYyb3JnLm9tZy5DT1JCQS5PUkJJbml0aWFsSG9zdFxmUCCl16XtpdGlxqWjpPKhoqXNobyl4KW1obyl06W5pKy8wrnUpLWk7KTGpKSk66Xepbel88y+pMil3aG8pcjI1rnmpMvA38TqpLek3qS5oaOks6TOzuOky6TEpKSkxqTPoaIKLm5hCqHWXGYyVGhlIEhlbGxvIFdvcmxkIEV4YW1wbGUgVXNpbmcgUk1JXC1JSU9QXGZQodcKLmZpCihodHRwOi8vamF2YS5zdW4uY29tL2phdmFzZS82L2RvY3MvdGVjaG5vdGVzL2d1aWRlcy9ybWlcLWlpb3Avcm1paWlvcGV4YW1wbGUuaHRtbCkgpPK7sr7IpLekxqSvpMCktaSkoaOk3qS/oaKls6XepfOlybnUpaql16W3peel8yBcZjJcLU9SQkluaXRpYWxQb3J0XGZQIFxmMm5hbWVzZXJ2ZXJwb3J0I1xmUCCkyCBcZjJcLU9SQkluaXRpYWxIb3N0XGZQIFxmMm5hbWVzZXJ2ZXJob3N0bmFtZVxmUCCk8rvIpMOkxqXNobyl4KW1obyl06W5pM64obr3vuy96qTypa+l6aWkpaKl86XIpMiltaG8pdChvKTLw86k6aS7pOuks6TIpOKyxMe9pMekuaGjCi5uYQqh1lxmMkphdmEgSURMOiBSdW5uaW5nIHRoZSBIZWxsbyBXb3JsZCBFeGFtcGxlIG9uIFRXTyBNYWNoaW5lc1xmUKHXCi5maQooaHR0cDovL2phdmEuc3VuLmNvbS9qYXZhc2UvNi9kb2NzL3RlY2hub3Rlcy9ndWlkZXMvaWRsL3R1dG9yaWFsL2ppZGwybWFjaGluZXMuaHRtbCkgpMekz6GipLOkzqWzpd6l86XJudSlqqXXpbel56XzpPK7yKSmyv3LoaTOIDEgpMSkrLyopLWk7KTGpKSk3qS5oaMKLkxQCi5MUAqkv6TIpKik0KGisOy7/qXNobyl4KW1obyl06W5IFxmMnRuYW1lc2VydlxmUCCkrKXbpbmlyCBcZjJuYW1lc2VydmVyaG9zdFxmUCCkzqXdobylyCAxMDUwIL7lpMehoqWvpemlpKWipfOlyKSspduluaXIIFxmMmNsaWVudGhvc3RcZlAgvuWkx6GipbWhvKXQobykrKXbpbmlyCBcZjJzZXJ2ZXJob3N0XGZQIL7lpMehoqS9pOykvqTsvMK51KS1pOykxqSkpOukyKS3pN6kuaGjCi5MUAouUlMgMwouVFAgMgpvCqXbpbmlyCBcZjJuYW1lc2VydmVyaG9zdFxmUCC+5aTOIFxmMnRuYW1lc2VydlxmUCCk8ryhpM6k6KSmpMukt6TGta/GsKS3pN6kuaGjCi5uZgpcZjMKLmZsCiAgICAgdG5hbWVzZXJ2IFwtT1JCSW5pdGlhbFBvcnQgMTA1MAouZmwKCi5mbApcZlAKLmZpCi5UUCAyCm8KXGYyc2VydmVyaG9zdFxmUCC+5aTOpbWhvKXQobyk8ryhpM6k6KSmpMukt6TGta/GsKS3pN6kuaGjCi5uZgpcZjMKLmZsCiAgICAgamF2YSBTZXJ2ZXIgXC1PUkJJbml0aWFsUG9ydCAxMDUwIFwtT1JCSW5pdGlhbEhvc3QgbmFtZXNlcnZlcmhvc3QKLmZsClxmUAouZmkKLlRQIDIKbwpcZjJjbGllbnRob3N0XGZQIL7lpM6lr6XppaSloqXzpcik8ryhpM6k6KSmpMukt6TGta/GsKS3pN6kuaGjCi5uZgpcZjMKLmZsCiAgICAgamF2YSBDbGllbnQgXC1PUkJJbml0aWFsUG9ydCAxMDUwIFwtT1JCSW5pdGlhbEhvc3QgbmFtZXNlcnZlcmhvc3QKLmZsClxmUAouZmkKLlJFCgouTFAKLlNTIApcLUogpaql16W3peel8wouTFAKXGYydG5hbWVzZXJ2XGZQIKTHu8jN0bLEx72kyqWzpd6l86XJudSlqqXXpbel56XzpM+horyhpM6kyKSqpOqkx6S5oaMKLlJTIDMKCi5MUAouVFAgMwpcLUpvcHRpb24gClxmMm9wdGlvblxmUCCk8iBKYXZhILK+wdul3qW3pfOky8XPpLek3qS5oaOks6SzpMeholxmMm9wdGlvblxmUCCkz6GiCi5uYQpcZjJKYXZhIKWipdel6qWxobylt6XnpfO1r8awpcShvKXrXGZQCi5maQooaHR0cDovL2phdmEuc3VuLmNvbS9qYXZhc2UvNi9kb2NzL3RlY2hub3Rlcy90b29scy9zb2xhcmlzL2phdmEuaHRtbCkgpM6l6qXVpaGl7KXzpbml2qG8pbikx8DizMCktaTspMakpKTrpaql16W3peel86TOIDEgpMSkx6S5oaOkv6TIpKik0KGiXGYzXC1KXC1YbXM0OG1cZlAgpMikuaTrpMihorWvxrC7/qTOpeGl4qXqpKwgNDhNIKXQpaSlyKTLwN/E6qS1pOyk3qS5oaNcZjNcLUpcZlAgpPK7yKTDpMa8wrnUuLWkzrK+wdul3qW3pfOky6Wqpdelt6XnpfOk8sXPpLmks6TIpM+hoqTopK+51KTvpOykxqSkpN6kuaGjCi5MUAouU0ggIkphdmEgSURMILDsu/6lzaG8peCltaG8pdOluaTOxOS73yIKLkxQCi5MUApKYXZhXCBJREwgpc2hvKXgpbWhvKXTpbmk8sTku9+kuaTrpMukz6GiwtCx/qS5pOulqqXapeyhvKXGpaOl86WwpbeluaXGpeCls6XepfOlyaTyu8jN0aS3pN6kuaGjpL+kyKSopNCholVuaXggpdel7aW7pbmkzr7sueekzyBcZjJraWxsXGZQIKTyoaJXaW5kb3dzIKXXpe2lu6W5pM6+7LnnpM8gXGYyQ3RybFwtQ1xmUCCk8qGipL2k7KS+pOy7yM3RpLek3qS5oaOlzaG8peCltaG8pdOluaTPzMC8qMWqpMult6XjpcOlyKXApaal86S1pOyk66TepMehorjGpNO90KS3pPLC1KTBwrOksaTepLmho6TKpKqhoqXNobyl4KW1obyl06W5pPK9qs67pLWku6TrpMihokphdmFcIElETCClzaG8peCltaG8pdOluaTLxdDPv6S1pOykxqSkpOvMvsGwpM+8uqTvpOyk3qS5oaMKLkxQCi5TSCAipbWl86XXpeulr6XppaSloqXzpcg6IMy+wbC29bTWpNikzqWqpdaluKWnpa+lyKTOxMmywyIKLkxQCi5MUAqwyrK8pMu8qKS5pbWl86XXpeul16XtpbCl6aXgpM+hosy+wbCk8sy+wbC29bTWpMvEybLDpLmk68r9y6Gk8ryopLmk4qTOpMekuaGjpLOkzqW1pfOl16Xrpdel7aWwpeml4KTPoaKks6TOpN6k3qTOvvXC1qTHtLDBtKTLxrC67qS5pOuw7Lv+pc2hvKXgpbWhvKXTpbmlr6XppaSloqXzpcikx6GivKGkzqTopKakysOxveOkyqXEpeqhvKTyuu7ArqS5pOuk4qTOpMekuaGjIAouTFAKLm5mClxmMwouZmwKXGZQXGYzCi5mbAogICAgICAgICAgICAgICAgICAgIFxmUFxmNL3ptPxcZlBcZjMKLmZsCiAgICAgICAgICAgXGZQXGY0pc2hvKXfpfOlsKWzpfOlxqWtpbmlyFxmUFxmMwouZmwKICAgICAgICAgICAgICAgICAgLyAgICAgIFxcCi5mbAogICAgICAgICAgICAgICAgIC8gICAgICAgIFxcCi5mbAogICAgICAgICAgICAgIHBsYW5zICAgICBcZlBcZjRQZXJzb25hbFxmUFxmMwouZmwKICAgICAgICAgICAgICAgICAgICAgICAgIC8gICBcXAouZmwKICAgICAgICAgICAgICAgICAgICAgICAgLyAgICAgXFwKLmZsCiAgICAgICAgICAgICAgICAgICBjYWxlbmRhciAgc2NoZWR1bGVcZlAKLmZsCi5maQoKLkxQCi5MUAqks6TOzuOkx6GiXGYzcGxhbnNcZlAgpM+lqqXWpbilp6Wvpci7sr7IoaJcZjNQZXJzb25hbFxmUCCkzyBcZjNjYWxlbmRhclxmUCCkyCBcZjNzY2hlZHVsZVxmUCCkziAyIKTEpM6lqqXWpbilp6Wvpci7sr7IpKy03qTepOyk66XNobyl36XzpbCls6XzpcalraW5pcikx6S5oaMgCi5MUAoubmYKXGYzCi5mbAppbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7Ci5mbAppbXBvcnQgb3JnLm9tZy5DT1JCQS4qOwouZmwKaW1wb3J0IG9yZy5vbWcuQ29zTmFtaW5nLio7Ci5mbAoKLmZsCnB1YmxpYyBjbGFzcyBOYW1lQ2xpZW50Ci5mbAp7Ci5mbAogICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKQouZmwKICAgewouZmwKICAgICAgdHJ5IHsKLmZsClxmUAouZmkKCi5MUArBsL3SpM6h1kphdmEgSURMILDsu/6lzaG8peCltaG8pdOluaTOta/GsKHXpMekz6Gipc2hvKXgpbWhvKXQobykz6XdobylyCAxMDUwIKTyu8jN0aS3pMa1r8awpLek3qS3pL+ho7yhpM6ls6G8pcmkx6GipLOkzqXdobylyMjWueak8qWvpemlpKWipfOlyKXXpe2lsKXppeCky8POpOmku6TepLmhoyAKLm5mClxmMwouZmwKICAgICAgICBQcm9wZXJ0aWVzIHByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKLmZsCiAgICAgICAgcHJvcHMucHV0KCJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiwgIjEwNTAiKTsKLmZsCiAgICAgICAgT1JCIG9yYiA9IE9SQi5pbml0KGFyZ3MsIHByb3BzKTsKLmZsCgouZmwKXGZQCi5maQoKLkxQCqSzpM6ls6G8pcmkx6TPoaK96bT8pc2hvKXfpfOlsKWzpfOlxqWtpbmlyKTyvOjGwKS3oaKkvaTspPIgXGYzY3R4XGZQIKTLwuXG/qS3pN6kuaGjMiC51MzcpMekz6GiXGYzY3R4XGZQIKTypcCl36G8pM6lqqXWpbilp6Wvpci7sr7IIFxmM29ianJlZlxmUCCky6WzpdShvKS3pN6kuaGjpLOkziBcZjNvYmpyZWZcZlAgpMukz6GipKKkyKTHpLWk3qS2pN6kysy+wbCk8rPkpOrF9qTGpMbMvsGwtvW01qTLxMmyw6S3pN6kuaGjCi5uZgpcZjMKLmZsCiAgICAgICAgTmFtaW5nQ29udGV4dCBjdHggPQouZmwKTmFtaW5nQ29udGV4dEhlbHBlci5uYXJyb3cob3JiLnJlc29sdmVfaW5pdGlhbF9yZWZlcmVuY2VzKCJOYW1lU2VydmljZSIpKTsKLmZsCiAgICAgICAgTmFtaW5nQ29udGV4dCBvYmpyZWYgPSBjdHg7Ci5mbAoKLmZsClxmUAouZmkKCi5MUAqks6TOpbOhvKXJpMekz6GidGV4dCC3v6TOzL7BsKHWcGxhbnOh16Tyuu7ArqS3oaKkvaTspPKlwKXfobykzqWqpdaluKWnpa+lyLuyvsiky6XQpaSl86XJpLek3qS5oaOkvaTOuOWholxmMnJlYmluZFxmUCCk8rvIzdGkt6TGvem0/KXNobyl36XzpbCls6XzpcalraW5pcikzrK8pMuh1nBsYW5zodek8sTJssOkt6TGpKSk3qS5oaNcZjJyZWJpbmRcZlAgpeGlvaXDpcmk8rvIzdGkuaTspNCholxmMmJpbmRcZlAgpPK7yM3RpLekv77sueeky8ivwLikuaTrzuOzsKTyyK/AuKS1pLukuqTLoaKks6TOpdel7aWwpeml4KTysr/F2aTit6uk6srWpLe8wrnUpMekraTepLmhowoubmYKXGYzCi5mbAogICAgICAgIE5hbWVDb21wb25lbnQgbmMxID0gbmV3IE5hbWVDb21wb25lbnQoInBsYW5zIiwgInRleHQiKTsKLmZsCiAgICAgICAgTmFtZUNvbXBvbmVudFtdIG5hbWUxID0ge25jMX07Ci5mbAogICAgICAgIGN0eC5yZWJpbmQobmFtZTEsIG9ianJlZik7Ci5mbAogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicGxhbnMgcmViaW5kIHN1Y2Vzc2Z1bCEiKTsKLmZsCgouZmwKXGZQCi5maQoKLkxQCqSzpM6ls6G8pcmkx6TPoaJkaXJlY3Rvcnkgt7+kzqHWUGVyc29uYWyh16TIpKSkpqXNobyl36XzpbCls6XzpcalraW5pcik8rruwK6kt6TepLmho6S9pM6367LMxsCk6aTspOulqqXWpbilp6Wvpci7sr7IIFxmM2N0eDJcZlAgpPKks6TOzL7BsKTLpdClpKXzpcmkt6Givem0/KXNobyl36XzpbCls6XzpcalraW5pciky8TJssOkt6TepLmhoyAKLm5mClxmMwouZmwKICAgICAgICBOYW1lQ29tcG9uZW50IG5jMiA9IG5ldyBOYW1lQ29tcG9uZW50KCJQZXJzb25hbCIsICJkaXJlY3RvcnkiKTsKLmZsCiAgICAgICAgTmFtZUNvbXBvbmVudFtdIG5hbWUyID0ge25jMn07Ci5mbAogICAgICAgIE5hbWluZ0NvbnRleHQgY3R4MiA9IGN0eC5iaW5kX25ld19jb250ZXh0KG5hbWUyKTsKLmZsCiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJuZXcgbmFtaW5nIGNvbnRleHQgYWRkZWQuLiIpOwouZmwKCi5mbApcZlAKLmZpCgouTFAKu8Sk6qTOpbOhvKXJpMekz6GipcCl36G8pM6lqqXWpbilp6Wvpci7sr7IpPKh1nNjaGVkdWxlodekyKHWY2FsZW5kYXKh16TIpKSkpsy+wbCkx6XNobyl36XzpbCls6XzpcalraW5pcih1lBlcnNvbmFsodcoXGYzY3R4MlxmUCkgpMul0KWkpfOlyaS3pN6kuaGjIAoubmYKXGYzCi5mbAogICAgICAgIE5hbWVDb21wb25lbnQgbmMzID0gbmV3IE5hbWVDb21wb25lbnQoInNjaGVkdWxlIiwgInRleHQiKTsKLmZsCiAgICAgICAgTmFtZUNvbXBvbmVudFtdIG5hbWUzID0ge25jM307Ci5mbAogICAgICAgIGN0eDIucmViaW5kKG5hbWUzLCBvYmpyZWYpOwouZmwKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInNjaGVkdWxlIHJlYmluZCBzdWNlc3NmdWwhIik7Ci5mbAoKLmZsCiAgICAgICAgTmFtZUNvbXBvbmVudCBuYzQgPSBuZXcgTmFtZUNvbXBvbmVudCgiY2FsZW5kZXIiLCAidGV4dCIpOwouZmwKICAgICAgICBOYW1lQ29tcG9uZW50W10gbmFtZTQgPSB7bmM0fTsKLmZsCiAgICAgICAgY3R4Mi5yZWJpbmQobmFtZTQsIG9ianJlZik7Ci5mbAogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY2FsZW5kZXIgcmViaW5kIHN1Y2Vzc2Z1bCEiKTsKLmZsCgouZmwKCi5mbAogICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLmZsCiAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7Ci5mbAogICAgfQouZmwKICB9Ci5mbAp9Ci5mbApcZlAKLmZpCgouTFAKLlNIICKltaXzpdel66WvpemlpKWipfOlyDogzL7BsLb1tNakzqXWpemlpqW6IgouTFAKLkxQCryhpM6ltaXzpdel66XXpe2lsKXppeCkx6TPoaLMvsGwtvW01qTypdal6aWmpbqkuaTryv3LoaTyvKikt6TepLmhoyAKLkxQCi5uZgpcZjMKLmZsCmltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKLmZsCmltcG9ydCBvcmcub21nLkNPUkJBLio7Ci5mbAppbXBvcnQgb3JnLm9tZy5Db3NOYW1pbmcuKjsKLmZsCgouZmwKcHVibGljIGNsYXNzIE5hbWVDbGllbnRMaXN0Ci5mbAp7Ci5mbAogICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKQouZmwKICAgewouZmwKICAgICAgdHJ5IHsKLmZsClxmUAouZmkKCi5MUArBsL3SpM6h1kphdmEgSURMILDsu/6lzaG8peCltaG8pdOluaTOta/GsKHXpMehoqXNobyl4KW1obyl0KG8pM+l3aG8pcggMTA1MCCk8rvIzdGkt6TGta/GsKS3pN6kt6S/oaO8oaTOpbOhvKXJpMehoqSzpM6l3aG8pcjI1rnmpPKlr6XppaSloqXzpcil16XtpbCl6aXgpMvDzqTppLuk3qS5oaMgCi5uZgpcZjMKLmZsCgouZmwKICAgICAgICBQcm9wZXJ0aWVzIHByb3BzID0gbmV3IFByb3BlcnRpZXMoKTsKLmZsCiAgICAgICAgcHJvcHMucHV0KCJvcmcub21nLkNPUkJBLk9SQkluaXRpYWxQb3J0IiwgIjEwNTAiKTsKLmZsCiAgICAgICAgT1JCIG9yYiA9IE9SQi5pbml0KGFyZ3MsIHByb3BzKTsKLmZsCgouZmwKCi5mbApcZlAKLmZpCgouTFAKvKGkzqWzobylyaTHpM+hor3ptPylzaG8pd+l86WwpbOl86XGpa2luaXIpPK86MbApLekxqSkpN6kuaGjCi5uZgpcZjMKLmZsCiAgICAgICAgTmFtaW5nQ29udGV4dCBuYyA9Ci5mbApOYW1pbmdDb250ZXh0SGVscGVyLm5hcnJvdyhvcmIucmVzb2x2ZV9pbml0aWFsX3JlZmVyZW5jZXMoIk5hbWVTZXJ2aWNlIikpOwouZmwKCi5mbApcZlAKLmZpCgouTFAKXGYybGlzdFxmUCCl4aW9pcOlyaTPoaKlzaG8pd+l86WwpbOl86XGpa2luaXIpMvEybLDpLWk7KTGpKSk66XQpaSl86XHpaOl86WwpPKl6qW5pcikt6TepLmho6SzpM6+7LnnoaK6x8LnIDEwMDAguMSk3qTHpM6l0KWkpfOlx6WjpfOlsKSsvem0/KXNobyl36XzpbCls6XzpcalraW5pcikq6TpIEJpbmRpbmdMaXN0SG9sZGVyIKTLytaktaTspN6kuaGju8Sk6qTOpdClpKXzpcelo6XzpbCkz6GiQmluZGluZ0l0ZXJhdG9ySG9sZGVyIKTLytaktaTspN6kuaGjIAoubmYKXGYzCi5mbAogICAgICAgIEJpbmRpbmdMaXN0SG9sZGVyIGJsID0gbmV3IEJpbmRpbmdMaXN0SG9sZGVyKCk7Ci5mbAogICAgICAgIEJpbmRpbmdJdGVyYXRvckhvbGRlciBibEl0PSBuZXcgQmluZGluZ0l0ZXJhdG9ySG9sZGVyKCk7Ci5mbAogICAgICAgIG5jLmxpc3QoMTAwMCwgYmwsIGJsSXQpOwouZmwKCi5mbApcZlAKLmZpCgouTFAKpLOkzqWzobylyaTHpM+hosrWpLWk7KS/IEJpbmRpbmdMaXN0SG9sZGVyIKSrpOml0KWkpfOlx6WjpfOlsKTOx9vO86TyvOjGwKS3pN6kuaGjpdClpKXzpcelo6XzpbCkrKTKpKS+7LnnpM+hoqXXpe2lsKXppeCkz72qzrukt6TepLmhoyAKLm5mClxmMwouZmwKICAgICAgICBCaW5kaW5nIGJpbmRpbmdzW10gPSBibC52YWx1ZTsKLmZsCiAgICAgICAgaWYgKGJpbmRpbmdzLmxlbmd0aCA9PSAwKSByZXR1cm47Ci5mbAoKLmZsClxmUAouZmkKCi5MUAq7xKTqpM6ls6G8pcmkx6TPoaKl0KWkpfOlx6WjpfOlsKTLwtCkt6TGpeuhvKXXvejN/aTyudSkpKGizL7BsKTyvdDOz6S3pN6kuaGjCi5uZgpcZjMKLmZsCiAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgYmluZGluZ3MubGVuZ3RoOyBpKyspIHsKLmZsCgouZmwKICAgICAgICAgICAgLy8gZ2V0IHRoZSBvYmplY3QgcmVmZXJlbmNlIGZvciBlYWNoIGJpbmRpbmcKLmZsCiAgICAgICAgICAgIG9yZy5vbWcuQ09SQkEuT2JqZWN0IG9iaiA9IG5jLnJlc29sdmUoYmluZGluZ3NbaV0uYmluZGluZ19uYW1lKTsKLmZsCiAgICAgICAgICAgIFN0cmluZyBvYmpTdHIgPSBvcmIub2JqZWN0X3RvX3N0cmluZyhvYmopOwouZmwKICAgICAgICAgICAgaW50IGxhc3RJeCA9IGJpbmRpbmdzW2ldLmJpbmRpbmdfbmFtZS5sZW5ndGhcLTE7Ci5mbAoKLmZsCiAgICAgICAgICAgIC8vIGNoZWNrIHRvIHNlZSBpZiB0aGlzIGlzIGEgbmFtaW5nIGNvbnRleHQKLmZsCiAgICAgICAgICAgIGlmIChiaW5kaW5nc1tpXS5iaW5kaW5nX3R5cGUgPT0gQmluZGluZ1R5cGUubmNvbnRleHQpIHsKLmZsCiAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiQ29udGV4dDogIiArCi5mbApiaW5kaW5nc1tpXS5iaW5kaW5nX25hbWVbbGFzdEl4XS5pZCk7Ci5mbAogICAgICAgICAgICB9IGVsc2UgewouZmwKICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiT2JqZWN0OiAiICsKLmZsCmJpbmRpbmdzW2ldLmJpbmRpbmdfbmFtZVtsYXN0SXhdLmlkKTsKLmZsCiAgICAgICAgICAgIH0KLmZsCiAgICAgICAgfQouZmwKCi5mbAogICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLmZsCiAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7Ci5mbAogICAgICAgfQouZmwKICAgfQouZmwKfQouZmwKXGZQCi5maQoKLkxQCgouTFAKCg==