eval "$(echo IyEvYmluL2Jhc2gKCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgV2Fsa3N5cyBIb3N0aW5nIE1hbmFnZXIgLSBGSVhFRCAmIEFMSUdORUQgVkVSU0lPTgojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKIyBDb2xvcnMgZm9yIG91dHB1dCAtIEJMVUUvQ1lCRVIgVEhFTUUKUkVEPSdcZVswOzM0bScKR1JFRU49J1wwMzNbMDszMm0nCllFTExPVz0nXDAzM1sxOzMzbScKQkxVRT0nXDAzM1swOzM0bScKQ1lBTj0nXDAzM1swOzM2bScKTUFHRU5UQT0nXDAzM1swOzM1bScKV0hJVEU9J1wwMzNbMTszN20nCkJPTEQ9J1wwMzNbMW0nCk5DPSdcMDMzWzBtJyAjIE5vIENvbG9yCgojIEZ1bmN0aW9uIHRvIHByaW50IHNlY3Rpb24gaGVhZGVycwpwcmludF9oZWFkZXJfcnVsZSgpIHsKICAgIGVjaG8gLWUgIiR7UkVEfeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgSR7TkN9Igp9CgojIEJpZyBBU0NJSSBoZWFkZXIKYmlnX2hlYWRlcigpIHsKICAgIGxvY2FsIHRpdGxlPSIkMSIKICAgIGVjaG8gLWUgIiR7UkVEfSIKICAgIGNhc2UgIiR0aXRsZSIgaW4KICAgICAgICAiTUFJTiBNRU5VIikKY2F0IDw8J0VPRicKICBfXyAgX18gICAgICAgICAgICAgICAgICAgIF9fX19fICAgICAgICAgICAgIAogfCAgXC8gIHwgICAgICAgICAgICAgICAgICB8ICBfXyBcICAgICAgICAgICAgCiB8IFwgIC8gfCBfX18gXyBfXyAgXyAgIF8gIHwgfCAgfCB8IF9fX19fICAgX18KIHwgfFwvfCB8LyBfIFwgJ18gXHwgfCB8IHwgfCB8ICB8IHwvIF8gXCBcIC8gLwogfCB8ICB8IHwgIF9fLyB8IHwgfCB8X3wgfCB8IHxfX3wgfCAgX18vXCBWIC8gCiB8X3wgIHxffFxfX198X3wgfF98XF9fLF98IHxfX19fXy8gXF9fX3wgXF8vIApFT0YKICAgICAgICAgICAgOzsKICAgICAgICAiU1lTVEVNIElORk9STUFUSU9OIikKY2F0IDw8J0VPRicKICBfXyAgICAgICAgICBfXyAgIF8gXyAgICAgICAgICAgICAgICAgIAogIFwgXCAgICAgICAgLyAvICB8IHwgfCAgICAgICAgICAgICAgICAgCiAgIFwgXCAgL1wgIC8gL18gX3wgfCB8IF9fX19fIF8gICBfIF9fXyAKICAgIFwgXC8gIFwvIC8gX2AgfCB8IHwvIC8gX198IHwgfCAvIF9ffAogICAgIFwgIC9cICAvIChffCB8IHwgICA8XF9fIFwgfF98IFxfXyBcCiAgICAgIFwvICBcLyBcX18sX3xffF98XF9cX19fL1xfXywgfF9fXy8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fLyB8ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8X19fLyAgICAgCkVPRgogICAgICAgICAgICA7OwogICAgICAgICJXRUxDT01FIikKY2F0IDw8J0VPRicKICBfXyAgICAgICAgICBfXyAgIF8gXyAgICAgICAgICAgICAgICAgIAogIFwgXCAgICAgICAgLyAvICB8IHwgfCAgICAgICAgICAgICAgICAgCiAgIFwgXCAgL1wgIC8gL18gX3wgfCB8IF9fX19fIF8gICBfIF9fXyAKICAgIFwgXC8gIFwvIC8gX2AgfCB8IHwvIC8gX198IHwgfCAvIF9ffAogICAgIFwgIC9cICAvIChffCB8IHwgICA8XF9fIFwgfF98IFxfXyBcCiAgICAgIFwvICBcLyBcX18sX3xffF98XF9cX19fL1xfXywgfF9fXy8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fLyB8ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8X19fLyAgICAgCkVPRgogICAgICAgICAgICA7OwogICAgICAgICJEQVRBQkFTRSBTRVRVUCIpCmNhdCA8PCdFT0YnCiAgX19fXyAgICAgICAgXyAgICAgICAgXyAgICAgICAgICAgXyAgICAgICAgICAgICAgICAgCiB8ICBfIFwgIF9fIF98IHxfIF9fIF98IHxfXyAgIF9fIF98IHxfIF9fXyAgX19fICBfX18gCiB8IHwgfCB8LyBfYCB8IF9fLyBfYCB8ICdfIFwgLyBfYCB8IF9fLyBfIFwvIF9ffC8gXyBcCiB8IHxffCB8IChffCB8IHx8IChffCB8IHxfKSB8IChffCB8IHx8ICBfXy9cX18gXCAgX18vCiB8X19fXy8gXF9fLF98XF9fXF9fLF98Xy5fXy8gXF9fLF98XF9fXF9fX3x8X19fL1xfX198CkVPRgogICAgICAgICAgICA7OwogICAgICAgICJCTFVFUFJJTlQrVEhFTUUrRVhURU5TSU9OUyIpCmNhdCA8PCdFT0YnCiAgX18gICAgICAgICAgX18gICBfIF8gICAgICAgICAgICAgICAgICAKICBcIFwgICAgICAgIC8gLyAgfCB8IHwgICAgICAgICAgICAgICAgIAogICBcIFwgIC9cICAvIC9fIF98IHwgfCBfX19fXyBfICAgXyBfX18gCiAgICBcIFwvICBcLyAvIF9gIHwgfCB8LyAvIF9ffCB8IHwgLyBfX3wKICAgICBcICAvXCAgLyAoX3wgfCB8ICAgPFxfXyBcIHxffCBcX18gXAogICAgICBcLyAgXC8gXF9fLF98X3xffFxfXF9fXy9cX18sIHxfX18vCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfXy8gfCAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfF9fXy8gICAgIApFT0YKICAgICAgICAgICAgOzsKICAgICAgICAqKQogICAgICAgICAgICBlY2hvIC1lICIke0JPTER9JHt0aXRsZX0ke05DfSIKICAgICAgICAgICAgOzsKICAgIGVzYWMKICAgIGVjaG8gLWUgIiR7TkN9Igp9CgojIEZ1bmN0aW9uIHRvIHByaW50IHN0YXR1cyBtZXNzYWdlcwpwcmludF9zdGF0dXMoKSB7IGVjaG8gLWUgIiR7WUVMTE9XfeKPsyAkMS4uLiR7TkN9IjsgfQpwcmludF9zdWNjZXNzKCkgeyBlY2hvIC1lICIke0dSRUVOfeKchSAkMSR7TkN9IjsgfQpwcmludF9lcnJvcigpIHsgZWNobyAtZSAiJHtSRUR94p2MICQxJHtOQ30iOyB9CnByaW50X3dhcm5pbmcoKSB7IGVjaG8gLWUgIiR7TUFHRU5UQX3imqDvuI8gICQxJHtOQ30iOyB9CgojIENoZWNrIGlmIGN1cmwgaXMgaW5zdGFsbGVkCmNoZWNrX2N1cmwoKSB7CiAgICBpZiAhIGNvbW1hbmQgLXYgY3VybCAmPi9kZXYvbnVsbDsgdGhlbgogICAgICAgIHByaW50X2Vycm9yICJjdXJsIGlzIG5vdCBpbnN0YWxsZWQiCiAgICAgICAgcHJpbnRfc3RhdHVzICJJbnN0YWxsaW5nIGN1cmwuLi4iCiAgICAgICAgaWYgY29tbWFuZCAtdiBhcHQtZ2V0ICY+L2Rldi9udWxsOyB0aGVuCiAgICAgICAgICAgIHN1ZG8gYXB0LWdldCB1cGRhdGUgJiYgc3VkbyBhcHQtZ2V0IGluc3RhbGwgLXkgY3VybAogICAgICAgIGVsaWYgY29tbWFuZCAtdiB5dW0gJj4vZGV2L251bGw7IHRoZW4KICAgICAgICAgICAgc3VkbyB5dW0gaW5zdGFsbCAteSBjdXJsCiAgICAgICAgZWxpZiBjb21tYW5kIC12IGRuZiAmPi9kZXYvbnVsbDsgdGhlbgogICAgICAgICAgICBzdWRvIGRuZiBpbnN0YWxsIC15IGN1cmwKICAgICAgICBlbHNlCiAgICAgICAgICAgIHByaW50X2Vycm9yICJDb3VsZCBub3QgaW5zdGFsbCBjdXJsIGF1dG9tYXRpY2FsbHkuIFBsZWFzZSBpbnN0YWxsIGl0IG1hbnVhbGx5IgogICAgICAgICAgICBleGl0IDEKICAgICAgICBmaQogICAgICAgIHByaW50X3N1Y2Nlc3MgImN1cmwgaW5zdGFsbGVkIHN1Y2Nlc3NmdWxseSIKICAgIGZpCn0KCiMgRnVuY3Rpb24gdG8gcnVuIHJlbW90ZSBzY3JpcHRzCnJ1bl9yZW1vdGVfc2NyaXB0KCkgewogICAgbG9jYWwgdXJsPSQxCiAgICBsb2NhbCBzY3JpcHRfbmFtZQogICAgc2NyaXB0X25hbWU9JChiYXNlbmFtZSAiJHVybCIgLnNoKQogICAgc2NyaXB0X25hbWU9JChlY2hvICIkc2NyaXB0X25hbWUiIHwgc2VkICdzLy4qL1x1Ji8nKQoKICAgIHByaW50X2hlYWRlcl9ydWxlCiAgICBiaWdfaGVhZGVyICJXRUxDT01FIgogICAgcHJpbnRfaGVhZGVyX3J1bGUKICAgIGVjaG8gLWUgIiR7UkVEfVJ1bm5pbmc6ICR7Qk9MRH0ke3NjcmlwdF9uYW1lfSR7TkN9IgogICAgcHJpbnRfaGVhZGVyX3J1bGUKCiAgICBjaGVja19jdXJsCiAgICBsb2NhbCB0ZW1wX3NjcmlwdAogICAgdGVtcF9zY3JpcHQ9JChta3RlbXApCiAgICBwcmludF9zdGF0dXMgIkRvd25sb2FkaW5nIHNjcmlwdCIKCiAgICBpZiBjdXJsIC1mc1NMICIkdXJsIiAtbyAiJHRlbXBfc2NyaXB0IjsgdGhlbgogICAgICAgIHByaW50X3N1Y2Nlc3MgIkRvd25sb2FkIHN1Y2Nlc3NmdWwiCiAgICAgICAgY2htb2QgK3ggIiR0ZW1wX3NjcmlwdCIKICAgICAgICBiYXNoICIkdGVtcF9zY3JpcHQiCiAgICAgICAgbG9jYWwgZXhpdF9jb2RlPSQ/CiAgICAgICAgcm0gLWYgIiR0ZW1wX3NjcmlwdCIKICAgICAgICBpZiBbICRleGl0X2NvZGUgLWVxIDAgXTsgdGhlbgogICAgICAgICAgICBwcmludF9zdWNjZXNzICJTY3JpcHQgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5IgogICAgICAgIGVsc2UKICAgICAgICAgICAgcHJpbnRfZXJyb3IgIlNjcmlwdCBleGVjdXRpb24gZmFpbGVkIHdpdGggZXhpdCBjb2RlOiAkZXhpdF9jb2RlIgogICAgICAgIGZpCiAgICBlbHNlCiAgICAgICAgcHJpbnRfZXJyb3IgIkZhaWxlZCB0byBkb3dubG9hZCBzY3JpcHQiCiAgICBmaQoKICAgIGVjaG8gLWUgIiIKICAgIHJlYWQgLXAgIiQoZWNobyAtZSAiJHtZRUxMT1d9UHJlc3MgRW50ZXIgdG8gY29udGludWUuLi4ke05DfSIpIiAtbiAxCn0KCiMgRnVuY3Rpb24gZm9yIGNvbWJpbmVkIEJsdWVwcmludCtUaGVtZStFeHRlbnNpb25zIG1lbnUKYmx1ZXByaW50X3RoZW1lX21lbnUoKSB7CiAgICB3aGlsZSB0cnVlOyBkbwogICAgICAgIGNsZWFyCiAgICAgICAgcHJpbnRfaGVhZGVyX3J1bGUKICAgICAgICBlY2hvIC1lICIke1JFRH0gICAgICAgICAgIPCflKcgQkxVRVBSSU5UICsgVEhFTUUgKyBFWFRFTlNJT05TICAgICAgICAgICAgJHtOQ30iCiAgICAgICAgcHJpbnRfaGVhZGVyX3J1bGUKICAgICAgICBiaWdfaGVhZGVyICJCTFVFUFJJTlQrVEhFTUUrRVhURU5TSU9OUyIKICAgICAgICBwcmludF9oZWFkZXJfcnVsZQoKICAgICAgICAjIEZpeGVkIHNwYWNpbmcgZm9yIHN1Ym1lbnUKICAgICAgICBlY2hvIC1lICIke1dISVRFfSR7Qk9MRH0gWzFdJHtOQ30gJHtSRUR9JHtCT0xEfUJsdWVwcmludCBTZXR1cCR7TkN9IgogICAgICAgIGVjaG8gLWUgIiR7V0hJVEV9JHtCT0xEfSBbMl0ke05DfSAke1JFRH0ke0JPTER9VGhlbWVzICsgRXh0ZW5zaW9ucyR7TkN9IgogICAgICAgIGVjaG8gLWUgIiR7V0hJVEV9JHtCT0xEfSBbM10ke05DfSAke1JFRH0ke0JPTER9UmVzZXQgUGFuZWwgVGhlbWUke05DfSIKICAgICAgICBlY2hvIC1lICIke1dISVRFfSR7Qk9MRH0gWzBdJHtOQ30gJHtSRUR9JHtCT0xEfUJhY2sgdG8gTWFpbiBNZW51JHtOQ30iCgogICAgICAgIHByaW50X2hlYWRlcl9ydWxlCiAgICAgICAgZWNobyAtZSAiJHtZRUxMT1d9JHtCT0xEffCfk50gU2VsZWN0IE9wdGlvbiDinpwgJHtOQ30iCiAgICAgICAgcmVhZCAtciBzdWJjaG9pY2UKCiAgICAgICAgY2FzZSAkc3ViY2hvaWNlIGluCiAgICAgICAgICAgIDEpCiAgICAgICAgICAgICAgICBydW5fcmVtb3RlX3NjcmlwdCAiaHR0cHM6Ly9kZXYud2Fsa3N5cy5xenouaW8vUHRlcm8tU2NyaXB0L0JsdWVwcmludDIuc2giCiAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAyKQogICAgICAgICAgICAgICAgcHJpbnRfaGVhZGVyX3J1bGUKICAgICAgICAgICAgICAgIGJpZ19oZWFkZXIgIldFTENPTUUiCiAgICAgICAgICAgICAgICBwcmludF9oZWFkZXJfcnVsZQogICAgICAgICAgICAgICAgZWNobyAtZSAiJHtSRUR9UnVubmluZzogJHtCT0xEfVRoZW1lcyArIEV4dGVuc2lvbnMke05DfSIKICAgICAgICAgICAgICAgIHByaW50X2hlYWRlcl9ydWxlCiAgICAgICAgICAgICAgICBwcmludF9zdGF0dXMgIkluc3RhbGxpbmcgVGhlbWVzICsgRXh0ZW5zaW9ucyIKICAgICAgICAgICAgICAgIGJhc2ggPChjdXJsIC1zIGh0dHBzOi8vZGV2LndhbGtzeXMucXp6LmlvL3RoZW1lL2NoYW5nLnNoKQogICAgICAgICAgICAgICAgcHJpbnRfc3VjY2VzcyAiVGhlbWVzICsgRXh0ZW5zaW9ucyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IgogICAgICAgICAgICAgICAgZWNobyAtZSAiIgogICAgICAgICAgICAgICAgcmVhZCAtcCAiJChlY2hvIC1lICIke1lFTExPV31QcmVzcyBFbnRlciB0byBjb250aW51ZS4uLiR7TkN9IikiIC1uIDEKICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgIDMpCiAgICAgICAgICAgICAgICBiYXNoIDwoY3VybCAtcyBodHRwczovL2Rldi53YWxrc3lzLnF6ei5pby9wYW5lbC10aGVtZS1yZXBhaXIuc2gpCiAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAwKQogICAgICAgICAgICAgICAgcmV0dXJuIDAKICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICopCiAgICAgICAgICAgICAgICBwcmludF9lcnJvciAiSW52YWxpZCBvcHRpb24hIFBsZWFzZSBjaG9vc2UgYmV0d2VlbiAwLTMiCiAgICAgICAgICAgICAgICBzbGVlcCAxLjIKICAgICAgICAgICAgICAgIDs7CiAgICAgICAgZXNhYwogICAgZG9uZQp9CgojIEZ1bmN0aW9uIHRvIHNob3cgc3lzdGVtIGluZm8Kc3lzdGVtX2luZm8oKSB7CiAgICBwcmludF9oZWFkZXJfcnVsZQogICAgYmlnX2hlYWRlciAiU1lTVEVNIElORk9STUFUSU9OIgogICAgcHJpbnRfaGVhZGVyX3J1bGUKCiAgICBsb2NhbCBjdXJyZW50X2hvc3QKICAgIGlmIGNvbW1hbmQgLXYgaG9zdG5hbWVjdGwgJj4gL2Rldi9udWxsOyB0aGVuCiAgICAgICAgY3VycmVudF9ob3N0PSQoaG9zdG5hbWVjdGwgLS1zdGF0aWMpCiAgICBlbGlmIFsgLW4gIiRIT1NUTkFNRSIgXTsgdGhlbgogICAgICAgIGN1cnJlbnRfaG9zdD0iJEhPU1ROQU1FIgogICAgZWxzZQogICAgICAgIGN1cnJlbnRfaG9zdD0iVW5rbm93biIKICAgIGZpCgogICAgbG9jYWwgY3VycmVudF91cHRpbWUKICAgIGlmIGNvbW1hbmQgLXYgdXB0aW1lICY+IC9kZXYvbnVsbDsgdGhlbgogICAgICAgIGN1cnJlbnRfdXB0aW1lPSQodXB0aW1lIC1wIHwgc2VkICdzL3VwIC8vJykKICAgIGVsc2UKICAgICAgICBjdXJyZW50X3VwdGltZT0iTi9BIgogICAgZmkKICAgIAogICAgbG9jYWwgbWVtX2luZm8KICAgIG1lbV9pbmZvPSQoZnJlZSAtaCB8IGF3ayAnL01lbTovIHtwcmludCAkMyIvIiQyfScpCgogICAgbG9jYWwgZGlza19pbmZvCiAgICBkaXNrX2luZm89JChkZiAtaCAvIHwgYXdrICdOUj09MiB7cHJpbnQgJDMiLyIkMiAiICgiJDUiKSJ9JykKCiAgICBlY2hvIC1lICIke1dISVRFfeKVlOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVlyR7TkN9IgogICAgZWNobyAtZSAiJHtXSElURX3ilZEgICAgICAgICAgICAgICDwn5OKIFNZU1RFTSBTVEFUVVMgICAgICAgICAgICAgICAg4pWRJHtOQ30iCiAgICBlY2hvIC1lICIke1dISVRFfeKVoOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVoyR7TkN9IgogICAgZWNobyAtZSAiJHtXSElURX3ilZEgICAke1JFRH3igKIke05DfSAke0dSRUVOfUhvc3RuYW1lOiR7TkN9ICR7V0hJVEV9JHtjdXJyZW50X2hvc3R9JHtOQ30gICAgICAgICAgICAgICAgICAke1dISVRFfeKVkSR7TkN9IgogICAgZWNobyAtZSAiJHtXSElURX3ilZEgICAke1JFRH3igKIke05DfSAke0dSRUVOfVVzZXI6JHtOQ30gJHtXSElURX0kKHdob2FtaSkke05DfSAgICAgICAgICAgICAgICAgICAgICAgICAgJHtXSElURX3ilZEke05DfSIKICAgIGVjaG8gLWUgIiR7V0hJVEV94pWRICAgJHtSRUR94oCiJHtOQ30gJHtHUkVFTn1EaXJlY3Rvcnk6JHtOQ30gJHtXSElURX0kKHB3ZCkke05DfSAgICAgICAgICAgJHtXSElURX3ilZEke05DfSIKICAgIGVjaG8gLWUgIiR7V0hJVEV94pWRICAgJHtSRUR94oCiJHtOQ30gJHtHUkVFTn1TeXN0ZW06JHtOQ30gJHtXSElURX0kKHVuYW1lIC1zcm0pJHtOQ30gICAgICAgICAgICAgICR7V0hJVEV94pWRJHtOQ30iCiAgICBlY2hvIC1lICIke1dISVRFfeKVkSAgICR7UkVEfeKAoiR7TkN9ICR7R1JFRU59VXB0aW1lOiR7TkN9ICR7V0hJVEV9JHtjdXJyZW50X3VwdGltZX0ke05DfSAgICAgICAgICAgICAgICR7V0hJVEV94pWRJHtOQ30iCiAgICBlY2hvIC1lICIke1dISVRFfeKVkSAgICR7UkVEfeKAoiR7TkN9ICR7R1JFRU59TWVtb3J5OiR7TkN9ICR7V0hJVEV9JHttZW1faW5mb30ke05DfSAgICAgICAgICAgICAgICR7V0hJVEV94pWRJHtOQ30iCiAgICBlY2hvIC1lICIke1dISVRFfeKVkSAgICR7UkVEfeKAoiR7TkN9ICR7R1JFRU59RGlzazoke05DfSAke1dISVRFfSR7ZGlza19pbmZvfSR7TkN9ICAgICAgICAke1dISVRFfeKVkSR7TkN9IgogICAgZWNobyAtZSAiJHtXSElURX3ilZrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZ0ke05DfSIKCiAgICBlY2hvIC1lICIiCiAgICByZWFkIC1wICIkKGVjaG8gLWUgIiR7WUVMTE9XfVByZXNzIEVudGVyIHRvIGNvbnRpbnVlLi4uJHtOQ30iKSIgLW4gMQp9CgojIEZ1bmN0aW9uIHRvIGRpc3BsYXkgdGhlIG1haW4gbWVudSAoRklYRUQgQUxJR05NRU5UKQpzaG93X21lbnUoKSB7CiAgICBjbGVhcgogICAgcHJpbnRfaGVhZGVyX3J1bGUKICAgIGVjaG8gLWUgIiR7UkVEfSAgICAgICAgICDwn5qAIFdhbGtzeXMgSG9zdGluZyBNYW5hZ2VyICAgICAgICAgICAgJHtOQ30iCiAgICBlY2hvIC1lICIke1JFRH0gICAgICAgICAgICAgICBQb3dlcmVkIEJ5IFdhbGtzeXMgICAgICAgICAgJHtOQ30iCiAgICBwcmludF9oZWFkZXJfcnVsZQoKICAgIGJpZ19oZWFkZXIgIk1BSU4gTUVOVSIKICAgIHByaW50X2hlYWRlcl9ydWxlCgogICAgIyBBbGlnbm1lbnQgZml4ZWQ6IFtOdW1iZXJdIDxTcGFjZT4gVGV4dAogICAgIyBVc2luZyBzaW1wbGUgZWNobyB3aXRoIG1hbnVhbCBzcGFjZXMgZm9yIHBlcmZlY3QgYWxpZ25tZW50CiAgICBlY2hvIC1lICIke1dISVRFfSR7Qk9MRH0gWzFdJHtOQ30gJHtSRUR9JHtCT0xEfURlcGxveSBWUFMke05DfSIKICAgIGVjaG8gLWUgIiR7V0hJVEV9JHtCT0xEfSBbMl0ke05DfSAke1JFRH0ke0JPTER9UGFuZWwgSW5zdGFsbGF0aW9uJHtOQ30iCiAgICBlY2hvIC1lICIke1dISVRFfSR7Qk9MRH0gWzNdJHtOQ30gJHtSRUR9JHtCT0xEfVdpbmdzIEluc3RhbGxhdGlvbiR7TkN9IgogICAgZWNobyAtZSAiJHtXSElURX0ke0JPTER9IFs0XSR7TkN9ICR7UkVEfSR7Qk9MRH1Vbmluc3RhbGwgVG9vbHMke05DfSIKICAgIGVjaG8gLWUgIiR7V0hJVEV9JHtCT0xEfSBbNV0ke05DfSAke1JFRH0ke0JPTER9Qmx1ZXByaW50K1RoZW1lK0V4dGVuc2lvbnMke05DfSIKICAgIGVjaG8gLWUgIiR7V0hJVEV9JHtCT0xEfSBbNl0ke05DfSAke1JFRH0ke0JPTER9Q2xvdWRmbGFyZSBTZXR1cCR7TkN9IgogICAgZWNobyAtZSAiJHtXSElURX0ke0JPTER9IFs3XSR7TkN9ICR7UkVEfSR7Qk9MRH1TeXN0ZW0gSW5mb3JtYXRpb24ke05DfSIKICAgIGVjaG8gLWUgIiR7V0hJVEV9JHtCT0xEfSBbOF0ke05DfSAke1JFRH0ke0JPTER9VGFpbHNjYWxlIChpbnN0YWxsICsgdXApJHtOQ30iCiAgICBlY2hvIC1lICIke1dISVRFfSR7Qk9MRH0gWzldJHtOQ30gJHtSRUR9JHtCT0xEfURhdGFiYXNlIFNldHVwJHtOQ30iCiAgICBlY2hvIC1lICIke1dISVRFfSR7Qk9MRH1bMTBdJHtOQ30gJHtSRUR9JHtCT0xEfUtlZXBBbGl2ZSBUaW1lJHtOQ30iCiAgICBlY2hvIC1lICIke1dISVRFfSR7Qk9MRH1bMTFdJHtOQ30gJHtSRUR9JHtCT0xEfUtlZXBBbGl2ZSBUbXV4IFRpbWUke05DfSIKICAgIGVjaG8gLWUgIiR7V0hJVEV9JHtCT0xEfVsxMl0ke05DfSAke1JFRH0ke0JPTER9MjRoIE9ubGluZSBUaW1lJHtOQ30iCiAgICBlY2hvIC1lICIke1dISVRFfSR7Qk9MRH1bMTNdJHtOQ30gJHtSRUR9JHtCT0xEfVBsYXlpdCBBZ2VudCR7TkN9IgogICAgZWNobyAtZSAiJHtXSElURX0ke0JPTER9WzE0XSR7TkN9ICR7UkVEfSR7Qk9MRH1OZ3JvayBUdW5uZWwgTWFuYWdlciR7TkN9IgogICAgZWNobyAtZSAiJHtXSElURX0ke0JPTER9WzE1XSR7TkN9ICR7UkVEfSR7Qk9MRH1TU0hYIE1hbmFnZXIke05DfSIKICAgIGVjaG8gLWUgIiR7V0hJVEV9JHtCT0xEfVsxNl0ke05DfSAke1JFRH0ke0JPTER9VG1hdGUgTWFuYWdlciR7TkN9IgogICAgZWNobyAtZSAiJHtXSElURX0ke0JPTER9WzE3XSR7TkN9ICR7UkVEfSR7Qk9MRH1MaW51eCBSRFAgU2V0dXAke05DfSIKICAgIGVjaG8gLWUgIiR7V0hJVEV9JHtCT0xEfVsxOF0ke05DfSAke1JFRH0ke0JPTER9VlBTIFBhc3N3b3JkIENoYW5nZXIke05DfSIKICAgIGVjaG8gLWUgIiR7V0hJVEV9JHtCT0xEfVsxOV0ke05DfSAke1JFRH0ke0JPTER9VGl0YW4gQ2xlYW5lciR7TkN9IgogICAgZWNobyAtZSAiJHtXSElURX0ke0JPTER9WzIwXSR7TkN9ICR7UkVEfSR7Qk9MRH1EZXZlbG9wZXIgRW52aXJvbm1lbnQke05DfSIKICAgIGVjaG8gLWUgIiR7V0hJVEV9JHtCT0xEfVsyMV0ke05DfSAke1JFRH0ke0JPTER9SXAgQ29udHJvbCBQYW5lbCR7TkN9IgogICAgZWNobyAtZSAiJHtXSElURX0ke0JPTER9WzIyXSR7TkN9ICR7UkVEfSR7Qk9MRH1GYXN0ZmV0Y2gke05DfSIKICAgIGVjaG8gLWUgIiR7V0hJVEV9JHtCT0xEfVsyM10ke05DfSAke1JFRH0ke0JPTER9TGludXggMjQvNyR7TkN9IgogICAgZWNobyAtZSAiJHtXSElURX0ke0JPTER9WzI0XSR7TkN9ICR7UkVEfSR7Qk9MRH1MWEMgTWFuYWdlciR7TkN9IgogICAgZWNobyAtZSAiJHtXSElURX0ke0JPTER9IFswXSR7TkN9ICR7UkVEfSR7Qk9MRH1FeGl0JHtOQ30iCgogICAgcHJpbnRfaGVhZGVyX3J1bGUKICAgIGVjaG8gLWUgIiR7V0hJVEV9JHtCT0xEffCfk50gWzAtMjRdIFNlbGVjdCBPcHRpb24g4p6cICAke05DfSIKfQoKIyBXZWxjb21lIGFuaW1hdGlvbiAoTmFtZSBDaGFuZ2VkIHRvIFdhbGtzeXMpCndlbGNvbWVfYW5pbWF0aW9uKCkgewogICAgY2xlYXIKICAgIHByaW50X2hlYWRlcl9ydWxlCiAgICBlY2hvIC1lICIke1JFRH0iCmNhdCA8PCdFT0YnCiAgX18gICAgICAgICAgX18gICBfIF8gICAgICAgICAgICAgICAgICAKICBcIFwgICAgICAgIC8gLyAgfCB8IHwgICAgICAgICAgICAgICAgIAogICBcIFwgIC9cICAvIC9fIF98IHwgfCBfX19fXyBfICAgXyBfX18gCiAgICBcIFwvICBcLyAvIF9gIHwgfCB8LyAvIF9ffCB8IHwgLyBfX3wKICAgICBcICAvXCAgLyAoX3wgfCB8ICAgPFxfXyBcIHxffCBcX18gXAogICAgICBcLyAgXC8gXF9fLF98X3xffFxfXF9fXy9cX18sIHxfX18vCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfXy8gfCAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfF9fXy8gICAgIApFT0YKICAgIGVjaG8gLWUgIiR7TkN9IgogICAgZWNobyAtZSAiJHtSRUR9ICAgICAgICAgICAgICBXYWxrc3lzIEhvc3RpbmcgTWFuYWdlciR7TkN9IgogICAgcHJpbnRfaGVhZGVyX3J1bGUKICAgIHNsZWVwIDEuMgp9CgojIE1haW4gbG9vcAp3ZWxjb21lX2FuaW1hdGlvbgoKd2hpbGUgdHJ1ZTsgZG8KICAgIHNob3dfbWVudQogICAgcmVhZCAtciBjaG9pY2UKCiAgICBjYXNlICRjaG9pY2UgaW4KICAgICAgICAxKSBydW5fcmVtb3RlX3NjcmlwdCAiaHR0cHM6Ly9kZXYud2Fsa3N5cy5xenouaW8vVlBTIiA7OwogICAgICAgIDIpIHJ1bl9yZW1vdGVfc2NyaXB0ICJodHRwczovL2Rldi53YWxrc3lzLnF6ei5pby9QYW5lbC1pbnN0YWxsYXRpb24uc2giIDs7CiAgICAgICAgMykgcnVuX3JlbW90ZV9zY3JpcHQgImh0dHBzOi8vZGV2LndhbGtzeXMucXp6LmlvLy9XaW5ncy1pbnN0YWxsYXRpb24uc2giIDs7CiAgICAgICAgNCkgcnVuX3JlbW90ZV9zY3JpcHQgImh0dHBzOi8vZGV2LndhbGtzeXMucXp6LmlvL1B0ZXJvLVNjcmlwdC91bmluc3RhbGwuc2giIDs7CiAgICAgICAgNSkgYmx1ZXByaW50X3RoZW1lX21lbnUgOzsKICAgICAgICA2KSBydW5fcmVtb3RlX3NjcmlwdCAiaHR0cHM6Ly9kZXYud2Fsa3N5cy5xenouaW8vUHRlcm8tU2NyaXB0L2Nsb3VkZmxhcmUuc2giIDs7CiAgICAgICAgNykgc3lzdGVtX2luZm8gOzsKICAgICAgICA4KSBydW5fcmVtb3RlX3NjcmlwdCAiaHR0cHM6Ly9kZXYud2Fsa3N5cy5xenouaW8vUHRlcm8tU2NyaXB0L1RhaWxzY2FsZS5zaCIgOzsKICAgICAgICA5KQogICAgICAgICAgICBwcmludF9oZWFkZXJfcnVsZQogICAgICAgICAgICBiaWdfaGVhZGVyICJEQVRBQkFTRSBTRVRVUCIKICAgICAgICAgICAgcHJpbnRfaGVhZGVyX3J1bGUKICAgICAgICAgICAgZWNobyAtZSAiJHtSRUR9UnVubmluZzogJHtCT0xEfU15U1FMIC8gTWFyaWFEQiBEYXRhYmFzZSBTZXR1cCR7TkN9IgogICAgICAgICAgICBwcmludF9oZWFkZXJfcnVsZQoKICAgICAgICAgICAgcmVhZCAtcCAiRW50ZXIgbmV3IGRhdGFiYXNlIHVzZXJuYW1lOiAiIERCX1VTRVIKICAgICAgICAgICAgcmVhZCAtc3AgIkVudGVyIHBhc3N3b3JkIGZvciAkREJfVVNFUjogIiBEQl9QQVNTCiAgICAgICAgICAgIGVjaG8gIiIKICAgICAgICAgICAgZWNobyAtZSAiJHtZRUxMT1d9Q3JlYXRpbmcgZGF0YWJhc2UgdXNlciAnJERCX1VTRVInLi4uJHtOQ30iCgogICAgICAgICAgICBteXNxbCAtdSByb290IC1wIDw8TVlTUUxfU0NSSVBUCkNSRUFURSBVU0VSICcke0RCX1VTRVJ9J0AnJScgSURFTlRJRklFRCBCWSAnJHtEQl9QQVNTfSc7CkdSQU5UIEFMTCBQUklWSUxFR0VTIE9OICouKiBUTyAnJHtEQl9VU0VSfSdAJyUnIFdJVEggR1JBTlQgT1BUSU9OOwpGTFVTSCBQUklWSUxFR0VTOwpNWVNRTF9TQ1JJUFQKCiAgICAgICAgICAgIENPTkZfRklMRT0iL2V0Yy9teXNxbC9tYXJpYWRiLmNvbmYuZC81MC1zZXJ2ZXIuY25mIgogICAgICAgICAgICBpZiBbIC1mICIkQ09ORl9GSUxFIiBdOyB0aGVuCiAgICAgICAgICAgICAgICBlY2hvIC1lICIke1lFTExPV31VcGRhdGluZyBiaW5kLWFkZHJlc3MgaW4gJENPTkZfRklMRS4uLiR7TkN9IgogICAgICAgICAgICAgICAgc2VkIC1pICdzL15iaW5kLWFkZHJlc3MuKi9iaW5kLWFkZHJlc3MgPSAwLjAuMC4wLycgIiRDT05GX0ZJTEUiCiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGVjaG8gLWUgIiR7TUFHRU5UQX3imqDvuI8gIENvbmZpZyBmaWxlIG5vdCBmb3VuZDogJENPTkZfRklMRSR7TkN9IgogICAgICAgICAgICBmaQoKICAgICAgICAgICAgZWNobyAtZSAiJHtZRUxMT1d9UmVzdGFydGluZyBNeVNRTCBhbmQgTWFyaWFEQiBzZXJ2aWNlcy4uLiR7TkN9IgogICAgICAgICAgICBzeXN0ZW1jdGwgcmVzdGFydCBteXNxbCAyPi9kZXYvbnVsbAogICAgICAgICAgICBzeXN0ZW1jdGwgcmVzdGFydCBtYXJpYWRiIDI+L2Rldi9udWxsCgogICAgICAgICAgICBpZiBjb21tYW5kIC12IHVmdyAmPi9kZXYvbnVsbDsgdGhlbgogICAgICAgICAgICAgICAgdWZ3IGFsbG93IDMzMDYvdGNwID4vZGV2L251bGwgMj4mMSAmJiBlY2hvIC1lICIke0dSRUVOfU9wZW5lZCBwb3J0IDMzMDYgZm9yIHJlbW90ZSBjb25uZWN0aW9ucyR7TkN9IgogICAgICAgICAgICBmaQoKICAgICAgICAgICAgZWNobyAtZSAiJHtHUkVFTn3inIUgRGF0YWJhc2UgdXNlciAnJERCX1VTRVInIGNyZWF0ZWQgYW5kIHJlbW90ZSBhY2Nlc3MgZW5hYmxlZCEke05DfSIKCiAgICAgICAgICAgIGVjaG8gLWUgIiIKICAgICAgICAgICAgcmVhZCAtcCAiJChlY2hvIC1lICIke1lFTExPV31QcmVzcyBFbnRlciB0byBjb250aW51ZS4uLiR7TkN9IikiIC1uIDEKICAgICAgICAgICAgOzsKICAgICAgICAxMCkgcnVuX3JlbW90ZV9zY3JpcHQgImh0dHBzOi8vZGV2LndhbGtzeXMucXp6LmlvL0tlZXBBbGl2ZS5zaCIgOzsKICAgICAgICAxMSkgcnVuX3JlbW90ZV9zY3JpcHQgImh0dHBzOi8vZGV2LndhbGtzeXMucXp6LmlvL2tlZXBhbGl2ZS10bXV4LnNoIiA7OwogICAgICAgIDEyKSBydW5fcmVtb3RlX3NjcmlwdCAiaHR0cHM6Ly9kZXYud2Fsa3N5cy5xenouaW8vb25saW5lIiA7OwogICAgICAgIDEzKSBydW5fcmVtb3RlX3NjcmlwdCAiaHR0cHM6Ly9kZXYud2Fsa3N5cy5xenouaW8vUGxheWl0LU1hbmFnZXIuc2giIDs7CiAgICAgICAgMTQpIHJ1bl9yZW1vdGVfc2NyaXB0ICJodHRwczovL2Rldi53YWxrc3lzLnF6ei5pby9OZ3Jvay1NYW5hZ2VyLnNoIiA7OwogICAgICAgIDE1KSBydW5fcmVtb3RlX3NjcmlwdCAiaHR0cHM6Ly9kZXYud2Fsa3N5cy5xenouaW8vc3NoeC1TZXR1cC5zaCIgOzsKICAgICAgICAxNikgcnVuX3JlbW90ZV9zY3JpcHQgImh0dHBzOi8vZGV2LndhbGtzeXMucXp6LmlvL1RtYXRlLU1hbmFnZXIuc2giIDs7CiAgICAgICAgMTcpIHJ1bl9yZW1vdGVfc2NyaXB0ICJodHRwczovL2Rldi53YWxrc3lzLnF6ei5pby9MaW51eC1SRFAtU2V0dXAuc2giIDs7CiAgICAgICAgMTgpIHJ1bl9yZW1vdGVfc2NyaXB0ICJodHRwczovL2Rldi53YWxrc3lzLnF6ei5pby9yb290LnNoIiA7OwogICAgICAgIDE5KSBydW5fcmVtb3RlX3NjcmlwdCAiaHR0cHM6Ly9kZXYud2Fsa3N5cy5xenouaW8vVGl0YW5DbGVhbmVyLnNoIiA7OwogICAgICAgIDIwKSBydW5fcmVtb3RlX3NjcmlwdCAiaHR0cHM6Ly9kZXYud2Fsa3N5cy5xenouaW8vRGV2ZWxvcGVyLUVudmlyb25tZW50LUluc3RhbGxlci5zaCIgOzsKICAgICAgICAyMSkgcnVuX3JlbW90ZV9zY3JpcHQgImh0dHBzOi8vZGV2LndhbGtzeXMucXp6LmlvL0lwLWNvbnRyb2wtcGFuZWwuc2giIDs7CiAgICAgICAgMjIpIHJ1bl9yZW1vdGVfc2NyaXB0ICJodHRwczovL2Rldi53YWxrc3lzLnF6ei5pby9GYXN0ZmV0Y2guc2giIDs7CiAgICAgICAgMjMpIHJ1bl9yZW1vdGVfc2NyaXB0ICJodHRwczovL2Rldi53YWxrc3lzLnF6ei5pby9MaW51eC1Db2RlU2FueEJveC5zaCIgOzsKICAgICAgICAyNCkgcnVuX3JlbW90ZV9zY3JpcHQgImh0dHBzOi8vZGV2LndhbGtzeXMucXp6LmlvL2x4Yy1pbnN0YWxsZXIuc2giIDs7CiAgICAgICAgMCkKICAgICAgICAgICAgZWNobyAtZSAiJHtHUkVFTn1FeGl0aW5nIFdhbGtzeXMgSG9zdGluZyBNYW5hZ2VyLi4uJHtOQ30iCiAgICAgICAgICAgIHByaW50X2hlYWRlcl9ydWxlCiAgICAgICAgICAgIGVjaG8gLWUgIiR7UkVEfSAgICAgICAgICAgVGhhbmsgeW91IGZvciB1c2luZyBvdXIgdG9vbHMhICAgICAgICR7TkN9IgogICAgICAgICAgICBwcmludF9oZWFkZXJfcnVsZQogICAgICAgICAgICBzbGVlcCAxCiAgICAgICAgICAgIGV4aXQgMAogICAgICAgICAgICA7OwogICAgICAgICopCiAgICAgICAgICAgIHByaW50X2Vycm9yICJJbnZhbGlkIG9wdGlvbiEgUGxlYXNlIGNob29zZSBiZXR3ZWVuIDAtMjQiCiAgICAgICAgICAgIHNsZWVwIDEuMgogICAgICAgICAgICA7OwogICAgZXNhYwpkb25lCg== | base64 -d)"
