xiaomianao666

小程序:MyFieldᴰⁿ

Nov 2nd, 2022
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@MyFieldᴰⁿ@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoiTXlGaWVsZOG0sOKBvyIsImF1dGhvciI6IuaWreW/tSbpgZPplb/prZTmlLkiLCJ1cmwiOiJoaWtlcjovL2VtcHR5IiwidmVyc2lvbiI6NDI2LCJjb2xfdHlwZSI6InRleHRfY2VudGVyXzEiLCJjbGFzc19uYW1lIjoiIiwidHlwZSI6InRvb2wiLCJjbGFzc191cmwiOiIiLCJhcmVhX25hbWUiOiIiLCJhcmVhX3VybCI6IiIsInNvcnRfbmFtZSI6IiIsInllYXJfbmFtZSI6IiIsInNvcnRfdXJsIjoi5bel5YW3IiwieWVhcl91cmwiOiIiLCJmaW5kX3J1bGUiOiJqczpcbi8vbG9nKE1PQklMRV9VQSk7XG4gICAgY29uc3Qge2RlbW9EYXRhLGRlZmF1bHRTZXRzLGZsb29yc30gPSAkLnJlcXVpcmUoXCJoaWtlcjovL3BhZ2UvZGVtb0RhdGE/cnVsZT1NeUZpZWxk4bSw4oG/XCIpO1xuY29uc3Qge2dldE9uZSx1bmlxdWUyLGR1cGxpY2F0ZXN9ID0gJC5yZXF1aXJlKFwiaGlrZXI6Ly9wYWdlL3V0aWxzP3J1bGU9TXlGaWVsZOG0sOKBv1wiKTtcbmxldCBzalRlc3QgPVtdO2ZvcihsZXQgaSBpbiBkZW1vRGF0YSl7c2pUZXN0PXNqVGVzdC5jb25jYXQoZGVtb0RhdGFbaV0pfVxudGhpcy5kID0gW107XG5jb25zdCBqeEl0ZW0gPSAkLnJlcXVpcmUoXCJoaWtlcjovL3BhZ2UvanhJdGVtP3J1bGU9TXlGaWVsZOG0sOKBv1wiKTtcbnZhciBSb3V0ZSA9ICQucmVxdWlyZShcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb9cIik7XG5ldmFsKGdldEl0ZW0oJ215RnVuY3Rpb24nKSk7XG4vLyBtelBvcHVwKCk7XG52YXIganhPbGRWID0gZ2V0VmFyKCdqeE9sZFYnKTtcbnZhciBqeE5ld1YgPSBnZXRWYXIoJ2p4TmV3VicpO1xudmFyIHZlcnNpb25UaXBzID0gcGFyc2VGbG9hdChqeE5ld1YpID4gcGFyc2VGbG9hdChqeE9sZFYpID8gJ+KAmOKAmOacieaWsOeJiOacrDogdicgKyBqeE5ld1YgKyAnXFxu5YWI5pu05paw5bCP56iL5bqP54S25ZCO54K55Ye75LiL5pa55oyJ6ZKu5ouJ5Y+W6Iez5pys5Zyw4oCZ4oCZJyA6ICd2JytqeE9sZFY7XG5kLnB1c2goe1xuICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGJpZz48c3BhbiBzdHlsZT1cImNvbG9yOiMwQzAwMDBcIj7prZTmlq0gMjAyMicsXG4gICAgZGVzYzogdmVyc2lvblRpcHMsXG4gICAgdXJsOiBSb3V0ZS5zelBhcnNlLFxuICAgIC8vdXJsOiAndG9hc3Q6Ly/ov5nmmK/moIfpopgnLFxuICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcbn0pO1xuXG5mdW5jdGlvbiBjekd1aWRlKCkge1xuICAgIHJldHVybiAkKCkucnVsZSgoaykgPT4ge1xuICAgICAgICBzZXRSZXN1bHQoW3tcbiAgICAgICAgICAgIHRpdGxlOiBldmFsKEpTT04ucGFyc2UocmVxdWVzdChcImhpa2VyOi8vcGFnZS9HdWlkZT9ydWxlPU15RmllbGThtLDigb9cIikpKS5ydWxlLFxuICAgICAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnXG4gICAgICAgIH1dKTtcbiAgICB9KVxufVxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKCgpID0+IHtcbiAgICAvL2NsZWFyVmFyKFwicGFyc2VVcmwudXJsXCIpO1xuICAgIGNsZWFySXRlbShcImNsYXNzXCIpO1xufSkpO1xubGV0IGp4c1JvdXRlID0gXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015SmlleGkuanNvblwiO1xubGV0IE15SmlleGkgPSB7amlleGlzOltdfTtcbmxldCBqaWV4aXMgPSB7fTtcbnRyeSB7XG4gICAgTXlKaWV4aSA9IEpTT04ucGFyc2UocmVxdWVzdChqeHNSb3V0ZSkpO1xuICAgIGppZXhpcyA9IE15SmlleGkuamlleGlzLmZpbHRlcihpdD0+aXQubmFtZT09PU15SmlleGkubm93KVswXTtcbn1jYXRjaCAoZSkge31cbmxldCBqeF9leHRyYSA9IHtcbiAgICBqc0xvYWRpbmdJbmplY3Q6IHRydWUsXG4gICAgdGl0bGVWaXNpYmxlOiB0cnVlLFxuICAgIGRlZmF1bHRWYWx1ZTogZ2V0VmFyKCdwYXJzZVVybC51cmwnLCAnJykgfHwgXCJcIixcbiAgICBvbkNoYW5nZTogJ3B1dFZhcihcInBhcnNlVXJsLnVybFwiLGlucHV0KSdcbn07XG5pZighL+WXheaOouS8mOWFiHzpobrluo/kvJjlhYgvLnRlc3QoTXlKaWV4aS5hdXRvTW9kZSkpe1xuICAgIGp4X2V4dHJhLmJsb2NrUnVsZXMgPSBbJ2JhaWR1LioucG5nJywgJy5qcGcnLCcubXAzJywnLm1wNCcsJy5tM3U4JywnLmZsdicsJy5hdmknLCcuM2dwJywnLm1wZWcnLCcud212JywnLm1vdicsJy5ybXZiJywnLmdpZicsJy5qcGcnLCcuanBlZycsJy5wbmcnLCcuaWNvJywnLnN2ZyddO1xufVxuZC5wdXNoKHtcbiAgICB0aXRsZTon5byA5aeL6Kej5p6QJyxcbiAgICBjb2xfdHlwZTogJ2lucHV0JyxcbiAgICBkZXNjOiBcIuivt+i+k+ino+aekOWcsOWdgFwiLFxuICAgIHVybDokLnRvU3RyaW5nKCgpPT57XG4gICAgICAgIGxldCB1cmwgPSBnZXRWYXIoXCJwYXJzZVVybC51cmxcIiwgXCJcIikudHJpbSgpO1xuICAgICAgICBsZXQgc2VsID0gZ2V0SXRlbShcInNlbGVjdGVkXCIsIFwiXCIpO1xuICAgICAgICBsZXQganggPSBnZXRJdGVtKFwic2VsZWN0ZWRcIiwgXCJcIik7XG4gICAgICAgIGlmKGp4JiZqeC5sZW5ndGg+MiYmIWp4LnN0YXJ0c1dpdGgoJ2h0dHAnKSl7XG4gICAgICAgICAgICBqeCA9ICcnOy8v5pat5o+S6auY57qn5pa55rOV55u05o6l5riF56m66Kej5p6Q6ZO+5o6l5ZCO6Z2i6LCD55So5qCH6aKY5ZCN5a2XXG4gICAgICAgIH1cbiAgICAgICAgbGV0IGV4PW5ldyBSZWdFeHAoJ15odHRwfExUfHJ1aWZlbmdsYnxzdW95b3x4Znl8cmVucmVubWl8Um9uZ1hpbmdWUnx4dWVyZW58d3VkdXl1bnxsYW9kaXxOYWlmZWltaXxkYW9kbXxYTU1UfHYwMjBjJyk7XG4gICAgICAgIGlmICghZXgudGVzdCh1cmwpJiYhL2h0dHB8ZnVuY3Rpb24vLnRlc3Qoc2VsKSkge1xuICAgICAgICAgICAgbG9nKGdldEl0ZW0oXCJzZWxlY3RlZFwiLCBcIlwiKSk7XG4gICAgICAgICAgICByZXR1cm4gXCJ0b2FzdDovL+i/mOayoeaciei+k+WFpemTvuaOpeWTplwiO1xuICAgICAgICB9XG4gICAgICAgIGxldCBwbGF5VXJsID0ganggKyB1cmw7XG4gICAgICAgIGxvZyhwbGF5VXJsKTtcbiAgICAgICAgaWYoIWV4LnRlc3QocGxheVVybCkmJiEvaHR0cHxmdW5jdGlvbi8udGVzdChzZWwpKXtcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/nnIvotbfmnaXmkq3mlL7lnLDlnYDkvLzkuY7kuI3lr7nlirI/XFxuJytwbGF5VXJsXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICQoKS5sYXp5UnVsZSgocGxheVVybCx1cmwpPT57XG4gICAgICAgICAgICBsZXQgdGl0bGUgPSBnZXRJdGVtKFwic2VsZWN0ZWQwXCIsIFwiJiZcIikuc3BsaXQoXCImJlwiKVswXS5yZXBsYWNlKC/wn5GJL2csJycpO1xuICAgICAgICAgICAgbG9nKCd0aXRsZTonK3RpdGxlKTtcbiAgICAgICAgICAgIGlmKGdldEl0ZW0oJ2RuLnRlc3RfbW9kZScpPT09J+aWreaPkicmJiEvXuS4jemAiSR8XumtlOaWrSQvLnRlc3QodGl0bGUpKXtcbiAgICAgICAgICAgICAgICBldmFsKFwidmFyIGNvbmZpZyA9XCIgKyByZXF1ZXN0KFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb25cIikpO1xuICAgICAgICAgICAgICAgIGV2YWwocmVxdWVzdChjb25maWcuY2opKTtcbiAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBnZXRJdGVtKFwic2VsZWN0ZWQwXCIsIFwiJiZcIikuc3BsaXQoXCImJlwiKVswXS5yZXBsYWNlKC/wn5GJL2csJycpLnJlcGxhY2UoL+S4jemAiS9nLCcnKTtcbiAgICAgICAgICAgICAgICBsb2coJ+W8gOWni+iwg+eUqOaWreaPkua1i+ivlSxteUZpbGVk6LaF5pe25Li6OicrZ2V0SXRlbSgnZG4udGltZW91dCcsJzUwMDAnKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF5dG1QYXJzZSh1cmwsdGl0bGUscGFyc2VJbnQoZ2V0SXRlbSgnZG4udGltZW91dCcsJzUwMDAnKSkpO1xuICAgICAgICAgICAgfWVsc2UgaWYoZ2V0SXRlbSgnZG4udGVzdF9tb2RlJyk9PT0n5pat5o+SJyYmL17prZTmlq0kLy50ZXN0KHRpdGxlKSl7XG4gICAgICAgICAgICAgICAgZXZhbChcInZhciBjb25maWcgPVwiICsgcmVxdWVzdChcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlQYXJzZVNldC5qc29uXCIpKTtcbiAgICAgICAgICAgICAgICBldmFsKHJlcXVlc3QoY29uZmlnLmNqKSk7XG4gICAgICAgICAgICAgICAgbG9nKCflvIDlp4vosIPnlKjprZTmlq3mi5/nnJ/mtYvor5UsbXlGaWxlZOi2heaXtuS4ujonK2dldEl0ZW0oJ2RuLnRpbWVvdXQnLCc1MDAwJykpO1xuICAgICAgICAgICAgICAgIHJldHVybiBheXRtUGFyc2UodXJsLCcnLHBhcnNlSW50KGdldEl0ZW0oJ2RuLnRpbWVvdXQnLCc1MDAwJykpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICAgICAgY29uc3Qge2xhenlQYXJzZX0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9nbG9iYWxQYXJzZT9ydWxlPemBk+mVv+S7k+W6k1BybycpO1xuICAgICAgICAgICAgICAgIHJldHVybiBsYXp5UGFyc2UocGxheVVybCxwYXJzZUludChnZXRJdGVtKCdkbi50aW1lb3V0JywnNTAwMCcpKSl8fCd0b2FzdDovL+ino+aekOWksei0pSzlhbfkvZPnnIvml6Xlv5cnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0scGxheVVybCx1cmwpXG4gICAgfSksXG4gICAgZXh0cmE6IGp4X2V4dHJhXG59KTtcbnZhciB0ZXN0X21vZGUgPSBnZXRJdGVtKCdkbi50ZXN0X21vZGUnLCdR56WeJyk7XG5sZXQgc2VsX3RpdGxlID0gWydR56WeJywn5pat5o+SJ10ubWFwKChpdCkgPT4ge1xuICAgIHJldHVybiBpdD09PXRlc3RfbW9kZT8n8J+RiScraXQ6aXQ7XG59KTtcblxuZC5wdXNoKHtcbiAgICB0aXRsZTon8J+SqycrdGVzdF9tb2RlLFxuICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcbiAgICB1cmw6JChzZWxfdGl0bGUsMikuc2VsZWN0KCgpPT57XG4gICAgICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZSgv8J+RiS9nLCcnKTtcbiAgICAgICAgc2V0SXRlbSgnZG4udGVzdF9tb2RlJyxpbnB1dCk7XG4gICAgICAgIC8vIHNldEl0ZW0oXCJzZWxlY3RlZFwiLCB1cmwpO1xuICAgICAgICBzZXRJdGVtKFwic2VsZWN0ZWRcIiwgXCJcIik7IC8vIOmHjee9ruino+aekOWktFxuICAgICAgICBzZXRJdGVtKFwic2VsZWN0ZWQwXCIsIFwi5LiN6YCJJiZcIik7IC8v5YiH5o2i5qih5byP5riF56m66YCJ5Lit55qE6Kej5p6QXG4gICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xuICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5YiH5o2i5qih5byP5Li6OicraW5wdXRcbiAgICB9KVxufSk7XG5cbmxldCB0aXRsZUFyciA9IFtdLCB1cmxBcnIgPSBbXTtcbnZhciBqc29uPXt0aXRsZTpbXSxjb2Rlczp7fX07XG5pZih0ZXN0X21vZGU9PT0nUeelnicpe1xuICAgIGxldCBwYXJzZVVybFRleHQgPSByZXF1ZXN0KFwiaGlrZXI6Ly9maWxlcy9qaWV4aS9qaWV4aS50eHRcIik7XG4gICAgbGV0IHBhcnNlVXJsQXJyYXkgPSBwYXJzZVVybFRleHQuc3BsaXQoL1xcbi8pO1xuICAgIHBhcnNlVXJsQXJyYXkuZm9yRWFjaCgoaXQpID0+IHtcbiAgICAgICAgaXQgPSBpdC5zcGxpdChcIiYmXCIpO1xuICAgICAgICB0aXRsZUFyci5wdXNoKGl0WzBdKTtcbiAgICAgICAgdXJsQXJyLnB1c2goaXRbMV0pO1xuICAgIH0pO1xufVxuZWxzZSBpZih0ZXN0X21vZGU9PT0n5pat5o+SJyl7XG4gICAgbGV0IHNldEZpbGUgPSByZXF1ZXN0KCdoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbicpO1xuICAgIHRyeSB7XG4gICAgICAgIGV2YWwoJ2pzb249JytzZXRGaWxlKTtcbiAgICB9Y2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nKCdKc29u6Kej5p6Q5Y+R55Sf5LqG6ZSZ6K+vOicrZS5tZXNzYWdlKTtcbiAgICB9XG4gICAgdGl0bGVBcnIgPSBqc29uLnRpdGxlO1xuICAgIHRpdGxlQXJyLmZvckVhY2goKGl0KSA9PiB7XG4gICAgICAgIHVybEFyci5wdXNoKGpzb24uY29kZXNbaXRdKTtcbiAgICB9KTtcbiAgICAvLyQuc3RyaW5naWZ5KGpzb24pXG59XG5cbmQucHVzaCh7XG4gICAgdGl0bGU6dGl0bGVBcnIubGVuZ3RoKycnLFxuICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcbiAgICB1cmw6JCh0ZXN0X21vZGUrJ+WFseiuoeino+aekOaVsOmHjzonK3RpdGxlQXJyLmxlbmd0aCsn5LiqXFxu5piv5ZCm6ZqP5py65p2l5Liq5Zyw5Z2A6L+b6KGM5rWL6K+VPycpLmNvbmZpcm0oKHNqVGVzdCxnZXRPbmUpPT57XG4gICAgICAgIHB1dFZhcigncGFyc2VVcmwudXJsJywgZ2V0T25lKHNqVGVzdCkpO1xuICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+WcsOWdgOW3sue7meS9oOS6hidcbiAgICB9LHNqVGVzdCxnZXRPbmUpXG59KTtcblxubGV0IHJlYWxUaXRsZXMgPSB0aXRsZUFycjtcbmxldCBiYXJyeSA9IHRlc3RfbW9kZT09PSdR56WeJz9bJ+S4jemAiSddOlsn5LiN6YCJJywn6a2U5patJ107XG50aXRsZUFyciA9IGJhcnJ5LmNvbmNhdCh0aXRsZUFycik7XG5sZXQgc2VsVGl0bGUgPSBnZXRJdGVtKFwic2VsZWN0ZWQwXCIsIFwiJiZcIikuc3BsaXQoXCImJlwiKVswXTtcbnRpdGxlQXJyID0gdGl0bGVBcnIubWFwKChpdCkgPT4ge1xuICAgIHJldHVybiBpdD09PXNlbFRpdGxlPyfwn5GJJytpdDppdDtcbn0pO1xuZC5wdXNoKHtcbiAgICB0aXRsZTogJ+KYou+4jycrc2VsVGl0bGUsXG4gICAgdXJsOiAkKHRpdGxlQXJyLCAzKS5zZWxlY3QoKHJlYWxUaXRsZXMsdXJsQXJyKSA9PiB7XG4gICAgICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZSgv8J+RiS9nLCcnKTtcbiAgICAgICAgaWYoaW5wdXQ9PT0n5LiN6YCJJyl7XG4gICAgICAgICAgICBzZXRJdGVtKFwic2VsZWN0ZWRcIiwgJycpO1xuICAgICAgICAgICAgc2V0SXRlbShcInNlbGVjdGVkMFwiLCBpbnB1dCArIFwiJiZcIiArICcnKTtcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybiBcInRvYXN0Oi8v5bey5Y+W5raI6Kej5p6Q5Y+jLOebtOaOpei/m+ihjOebtOmTvuino+aekFwiO1xuICAgICAgICB9ZWxzZSBpZihpbnB1dD09PSfprZTmlq0nKXtcbiAgICAgICAgICAgIHNldEl0ZW0oXCJzZWxlY3RlZFwiLCAnJyk7XG4gICAgICAgICAgICBzZXRJdGVtKFwic2VsZWN0ZWQwXCIsIGlucHV0ICsgXCImJlwiICsgJycpO1xuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuIFwidG9hc3Q6Ly/lt7Lorr7nva7kuLrprZTmlq3op6PmnpDvvIzlj6/nm7TmjqXop6blj5HlpIfog47mqKHlvI9cIjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaSA9IHJlYWxUaXRsZXMuaW5kZXhPZihpbnB1dCk7XG4gICAgICAgIGxldCB1cmwgPSB1cmxBcnJbaV07XG4gICAgICAgIGxvZyhcIlxcbuabtOaUueaOpeWPoz4gXCIgKyB1cmwpO1xuICAgICAgICBpZih0eXBlb2YodXJsKSE9PSdzdHJpbmcnKXtcbiAgICAgICAgICAgIGxvZygkLnRvU3RyaW5nKHVybCkpO1xuICAgICAgICAgICAgc2V0SXRlbShcInNlbGVjdGVkXCIsICQudG9TdHJpbmcodXJsKSk7XG4gICAgICAgICAgICAvLyByZXR1cm4gJ3RvYXN0Oi8v5pqC5LiN5pSv5oyB5pat5o+SZnVuY3Rpb27ns7vliJfnmoTpq5jnuqfop6PmnpDmtYvor5UnXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgc2V0SXRlbShcInNlbGVjdGVkXCIsIHVybCk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0SXRlbShcInNlbGVjdGVkMFwiLCBpbnB1dCArIFwiJiZcIiArIHVybCk7XG4gICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIFwidG9hc3Q6Ly/liIfmjaLop6PmnpDlj6PkuLo6XCIraW5wdXQ7XG4gICAgfSwgcmVhbFRpdGxlcyx1cmxBcnIpLFxuICAgIGNvbF90eXBlOiBcInNjcm9sbF9idXR0b25cIlxufSk7XG5kLnB1c2goe1xuICAgIHRpdGxlOifwn42A5Li76aKYJyxcbiAgICB1cmw6IFwiaGlrZXI6Ly9wYWdlL1JvdXRlP3J1bGU9TXlGaWVsZOG0sOKBvyZ0eXBlPeS4u+mimCNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNcIixcbiAgICBjb2xfdHlwZTogXCJzY3JvbGxfYnV0dG9uXCJcbn0pO1xuZC5wdXNoKHtcbiAgICB0aXRsZTon8J+NgOino+aekCcsXG4gICAgdXJsOiBcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3op6PmnpAjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXCIsXG4gICAgY29sX3R5cGU6IFwic2Nyb2xsX2J1dHRvblwiXG59KTtcbnZhciB0aW1lb3V0ID0gZ2V0SXRlbSgnZG4udGltZW91dCcsJzUwMDAnKTtcbmQucHVzaCh7XG4gICAgdGl0bGU6J/CflZInK3RpbWVvdXQsXG4gICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxuICAgIHVybDokKHRpbWVvdXQsJ+ivt+i+k+WFpeino+aekOi2heaXtuavq+enkicpLmlucHV0KCgpPT57XG4gICAgICAgIGlmKCFwYXJzZUludChpbnB1dCkpe1xuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+i2heaXtuiuvue9rumUmeivr++8jOaLkue7neS/neWtmCdcbiAgICAgICAgfVxuICAgICAgICBzZXRJdGVtKCdkbi50aW1lb3V0JyxpbnB1dHx8JzUwMDAnKTtcbiAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XG4gICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lorr7nva7op6PmnpDotoXml7bmr6vnp5I6JytnZXRJdGVtKCdkbi50aW1lb3V0JywnNTAwMCcpO1xuICAgIH0pLFxufSk7XG5kLnB1c2goe1xuICAgIHRpdGxlOifwn5Oy5a+85Ye6VFhUJyxcbiAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXG4gICAgdXJsOiQoJ+ehruiupOWvvOWHuuacrOWcsOaYjuaWh+S4lOWkjeWItuS6keWJquWIh+advz9cXG7lj6/lroznvo7lr7zlh7rlkI3np7DlnLDlnYDnmoTpgJrnlKjop4TliJks5a+5ZnVuY3Rpb27nsbvlhbzlrrnmmoLml7bkuI3mmK/lvojlpb0nKS5jb25maXJtKCh0aXRsZUFycix1cmxBcnIpPT57XG4gICAgICAgIC8vdXJsQXJyPXVybEFyci5zbGljZSgyKTtcbiAgICAgICAgdGl0bGVBcnI9dGl0bGVBcnIuZmlsdGVyKGl0PT4hL+S4jemAiXzprZTmlq0vLnRlc3QoaXQpKTtcbiAgICAgICAgbGV0IG1vZGUgPSBnZXRJdGVtKCdkbi50ZXN0X21vZGUnLCdR56WeJyk7XG4gICAgICAgIGlmKG1vZGU9PT0n5pat5o+SJ3x8bW9kZT09PSdR56WeJyl7XG4gICAgICAgICAgICBsZXQganhDb2RlID0gW107XG4gICAgICAgICAgICB0aXRsZUFyci5mb3JFYWNoKChpdCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBpID0gdGl0bGVBcnIuaW5kZXhPZihpdCk7XG4gICAgICAgICAgICAgICAgbGV0IGNvZGUgPSB1cmxBcnJbaV18fCcnO1xuICAgICAgICAgICAgICAgIGxldCBvdXRDb2RlID0gKHR5cGVvZihjb2RlKT09PSdzdHJpbmcnKT9jb2RlLnRyaW0oKTpiYXNlNjRFbmNvZGUoY29kZS50b1N0cmluZygpLnRyaW0oKSk7XG4gICAgICAgICAgICAgICAgbGV0IG91dFRpdGxlID0gaXQucmVwbGFjZSgv8J+RiS9nLCcnKTtcbiAgICAgICAgICAgICAgICBpZihvdXRUaXRsZS5zdGFydHNXaXRoKCdodHRwJykmJih0eXBlb2Yob3V0Q29kZSk9PT0ndW5kZWZpbmVkJ3x8IW91dENvZGUpKXtcbiAgICAgICAgICAgICAgICAgICAganhDb2RlLnB1c2gob3V0VGl0bGUrJywnK291dFRpdGxlKTtcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAganhDb2RlLnB1c2gob3V0VGl0bGUrJywnK291dENvZGV8fCcnKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbGV0IG91dFRleHQgPSBqeENvZGUuam9pbignXFxuJyk7XG4gICAgICAgICAgICBsZXQgb3V0UGF0aCA9ICdoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2VPdXRfJyttb2RlKycudHh0JztcbiAgICAgICAgICAgIHdyaXRlRmlsZShvdXRQYXRoLG91dFRleHQpO1xuICAgICAgICAgICAgbGV0IHBhc3RlcyA9IGdldFBhc3RlcygpO1xuICAgICAgICAgICAgbGV0IGltcG9ydFVybCA9IHNoYXJlUGFzdGUoYmFzZTY0RW5jb2RlKG91dFRleHQpLHBhc3Rlc1sxXSk7XG4gICAgICAgICAgICBsZXQgaW1wb3J0Q29kZSA9ICfprZTmlq3op6PmnpDlr7zlhaXlj6Pku6TCpcKlJytpbXBvcnRVcmw7XG4gICAgICAgICAgICBjb3B5KGltcG9ydENvZGUpO1xuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aWh+S7tuW3suWvvOWHuuWIsDonK291dFBhdGgrJ1xcbuivt+iHquihjOmAmui/h01U566h55CG5Zmo5p+l55yLJ1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/miJHkuI3muIXmpZrkvaDopoHlgZrku4DkuYg/XFxuJyttb2RlO1xuICAgICAgICB9XG4gICAgfSx0aXRsZUFycix1cmxBcnIpLFxufSk7XG5kLnB1c2goe1xuICAgIHRpdGxlOifwn5Ol5a+85YWlVFhUJyxcbiAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXG4gICAgdXJsOiQoKS5ydWxlKCgpPT57XG4gICAgICAgIGxldCBkID0gW107XG4gICAgICAgIGQucHVzaCh7XG4gICAgICAgICAgICB0aXRsZTon5a+85YWl6K+05piOJyxcbiAgICAgICAgICAgIGNvbF90eXBlOid0ZXh0XzEnLFxuICAgICAgICAgICAgZGVzYzon5pSv5oyB5q2k5o+S5Lu25a+85Ye65qC85byP55qE5paH5pys6L+b6KGM5a+85YWl44CCXFxu5qC85byPMTog5ZCN56ewLOWcsOWdgCDkuIDooYzkuIDkuKrop6PmnpBcXG7moLzlvI8yOuS6keWJquWIh+advyDprZTmlq3op6PmnpDlr7zlhaXlj6Pku6TCpcKl5Ymq5YiH5p2/5Zyw5Z2AJyxcbiAgICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eSdcbiAgICAgICAgfSk7XG4gICAgICAgIGQucHVzaCh7XG4gICAgICAgICAgICBkZXNjOiBcInR4dOaWh+acrOino+aekOinhOWImSzkuIDooYzkuIDkuKpcIixcbiAgICAgICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxuICAgICAgICAgICAgdGl0bGU6J+ino+aekOaWh+acrCcsXG4gICAgICAgICAgICBleHRyYToge1xuICAgICAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRWYXIoJ2RuLmltcG9ydF90ZXh0JywgJycpLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dGFyZWFcIixcbiAgICAgICAgICAgICAgICBoZWlnaHQ6LTEsXG4gICAgICAgICAgICAgICAgb25DaGFuZ2U6ICdwdXRWYXIoXCJkbi5pbXBvcnRfdGV4dFwiLGlucHV0KSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGQucHVzaCh7XG4gICAgICAgICAgICB0aXRsZTon8J+TpeWvvOWFpScsXG4gICAgICAgICAgICBjb2xfdHlwZTondGV4dF9jZW50ZXJfMScsXG4gICAgICAgICAgICB1cmw6JCgn56Gu5a6a57yW6L6R5aW95LqG5ZCXP+atpOaTjeS9nOWwhuimhuebluacrOWcsOW3suacieeahOiusOW9le+8jOW7uuiuruWkh+S7veWQjueUqOepuuaWh+S7tuWvvOWFpScpLmNvbmZpcm0oKCk9PntcbiAgICAgICAgICAgICAgICBjb25zdCB7ZGVmYXVsdFNldHN9ID0gJC5yZXF1aXJlKFwiaGlrZXI6Ly9wYWdlL2RlbW9EYXRhP3J1bGU9TXlGaWVsZOG0sOKBv1wiKTtcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2VSb3V0ZSA9ICdoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbic7XG4gICAgICAgICAgICAgICAgbGV0IGpzQ29kZSA9IHJlcXVlc3QocGFyc2VSb3V0ZSl8fEpTT04uc3RyaW5naWZ5KHt0aXRsZTpbXSxjb2Rlczp7fSxzZXR0aW5nczpkZWZhdWx0U2V0c30pO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsganNDb2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+WPkeeUn+mUmeivrzpcXG4nK2UubWVzc2FnZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgdG9JbXBvcnQgPSBnZXRWYXIoXCJkbi5pbXBvcnRfdGV4dFwiKTtcbiAgICAgICAgICAgICAgICBpZigv6a2U5pat6Kej5p6Q5a+85YWl5Y+j5LukwqXCpS8udGVzdCh0b0ltcG9ydCkmJnRvSW1wb3J0LnNwbGl0KCfCpcKlJykubGVuZ3RoPjEpe1xuICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gdG9JbXBvcnQuc3BsaXQoJ8KlwqUnKVsxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYoIS9eaHR0cC8udGVzdCh1cmwpKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/liarliIfmnb/lnLDlnYDmnInor68s5a+85YWl5aSx6LSlJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRvSW1wb3J0ID0gcGFyc2VQYXN0ZSh1cmwpO1xuICAgICAgICAgICAgICAgICAgICB0b0ltcG9ydCA9IGJhc2U2NERlY29kZSh0b0ltcG9ydCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBqaWV4aSA9IHRvSW1wb3J0LnNwbGl0KCdcXG4nKS5maWx0ZXIoaXQ9Pml0LnRyaW0oKSk7XG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlVGl0bGUgPSBbXTtcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2VDb2RlID0ge307XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSBpbiBqaWV4aSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGU9amlleGlbaV0uc3BsaXQoJywnKVswXTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGU9amlleGlbaV0uc3BsaXQoJywnKVsxXTtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZS5wdXNoKHRpdGxlKTtcbiAgICAgICAgICAgICAgICAgICAgLy9sb2codGl0bGUpO1xuICAgICAgICAgICAgICAgICAgICBpZighKGNvZGUucmVwbGFjZSgvW1xcc10vZywnJykuc3RhcnRzV2l0aCgnaHR0cCcpKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2codGl0bGUrJ+S4uuWHveaVsOino+aekCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29kZS5yZXBsYWNlKC9bXFxzXS9nLCcnKS5sZW5ndGg+MjApey8v6KeG5Li6ZnVuY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gZXZhbChiYXNlNjREZWNvZGUoY29kZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2coY29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBlLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlQ29kZVt0aXRsZV09Y29kZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IHNjT2JqZWN0ID0gW1wiQ2l0eUlQXCIsIFwicGNVQVwiLCBcImNhY2hlTTN1OFwiLCBcImRlZmF1bHRQYXJzZVdlYlwiLFwibWFvc3NcIiwgXCJMTFFcIl07XG4gICAgICAgICAgICAgICAgcGFyc2VUaXRsZSA9IHBhcnNlVGl0bGU/cGFyc2VUaXRsZS5maWx0ZXIoaXQ9PiFzY09iamVjdC5pbmNsdWRlcyhpdCkpOltdO1xuICAgICAgICAgICAgICAgIHZhciBuZXdQYXJzZVRpdGxlID0ganNvbi50aXRsZS5jb25jYXQocGFyc2VUaXRsZSk7XG4gICAgICAgICAgICAgICAganNvbi50aXRsZSA9IEFycmF5LmZyb20obmV3IFNldChuZXdQYXJzZVRpdGxlKSk7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihqc29uLmNvZGVzLCBwYXJzZUNvZGUpO1xuICAgICAgICAgICAgICAgIGxldCBuZXdGaWxlID0gJC5zdHJpbmdpZnkoanNvbik7IC8vSlNPTi5wYXJzZeS8muaKpemUmVxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCBuZXdGaWxlKTtcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suaIkOWKn+WvvOWFpScramlleGkubGVuZ3RoKyfmnaHop6PmnpAnO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBleHRyYTp7XG4gICAgICAgICAgICAgICAgbGluZVZpc2libGU6dHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc2V0UmVzdWx0KGQpO1xuICAgIH0pLFxufSk7XG5kLnB1c2goe1xuICAgIHRpdGxlOifimK/vuI/mn6Xph43lpITnkIYnLFxuICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcbiAgICB1cmw6JCgpLmxhenlSdWxlKCh1bmlxdWUyLGR1cGxpY2F0ZXMsZmxvb3JzKT0+e1xuICAgICAgICBsZXQgcGFyc2VSb3V0ZSA9ICdoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbic7XG4gICAgICAgIGxldCBqc0NvZGUgPSByZXF1ZXN0KHBhcnNlUm91dGUpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBqc0NvZGUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pys5Zyw6YKj5LiqTXlQYXJzZS5qc29u5paH5Lu25pyJ6Zeu6aKYLOi/meS4quWKn+iDveS4jee7meS9oOeUqOS6hiEnXG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRpdGxlcyA9IGpzb24udGl0bGU7XG4gICAgICAgIGxldCBjb2RlcyA9IGpzb24uY29kZXM7XG4gICAgICAgIGxldCBrZXlzPSBPYmplY3Qua2V5cyhjb2Rlcyk7XG4gICAgICAgIGxldCBrZXlzX3JlX2N0ID0ga2V5cy5sZW5ndGggLSB1bmlxdWUyKGtleXMpLmxlbmd0aDsgLy8g5ZCN56ew6YeN5aSNXG4gICAgICAgIGxldCBub3JtYWxfbGlzdCA9IFtdO1xuICAgICAgICBmb3IobGV0IG8gaW4gY29kZXMpe1xuICAgICAgICAgICAgaWYodHlwZW9mKGNvZGVzW29dKSE9PSd1bmRlZmluZWQnJiZ0eXBlb2YoY29kZXNbb10pIT09J2Z1bmN0aW9uJyl7XG4gICAgICAgICAgICAgICAgbm9ybWFsX2xpc3QucHVzaChjb2Rlc1tvXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlTm9yTGlzdCA9IHVuaXF1ZTIobm9ybWFsX2xpc3QpO1xuICAgICAgICBsZXQgdmFsdWVfcmVfY3QgPSBub3JtYWxfbGlzdC5sZW5ndGggLSByZU5vckxpc3QubGVuZ3RoOyAvL+S7o+eggemHjeWkjVxuICAgICAgICBsZXQgdmFsdWVzX3JlID0gZHVwbGljYXRlcyhub3JtYWxfbGlzdCk7Ly/ph43lpI3nmoTlgLxcbiAgICAgICAgbGV0IGZ0bGlzdCA9IFtdO1xuICAgICAgICBsZXQgZmxhZ3MgPSB7fTtcbiAgICAgICAgbGV0IG15Rmxvb3JzID0gZmxvb3JzO1xuICAgICAgICBmb3IobGV0IGogaW4gY29kZXMpey8v6YGN5Y6G5omA5pyJXG4gICAgICAgICAgICBsZXQgb25lID0gY29kZXNbal07XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yob25lKSAhPT0gJ2Z1bmN0aW9uJyYmdmFsdWVzX3JlLmluY2x1ZGVzKG9uZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoZmxhZ3Nbb25lXSkgPT09ICd1bmRlZmluZWQnIHx8ICFmbGFnc1tvbmVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL+WPluWHuuesrOS4gOS4quagh+W/l1xuICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3Nbb25lXSA9IG15Rmxvb3JzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgbXlGbG9vcnMuc3BsaWNlKDAsIDEpOy8v5Yig6Zmk5qCH5b+X5YiX6KGo6YeM55qE56ys5LiA5Liq5YWD57SgXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZnRsaXN0LnB1c2goe2tleTogZmxhZ3Nbb25lXSArIGosIHZhbHVlOiBvbmV9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmdGxpc3QucHVzaCh7a2V5OiBqLCB2YWx1ZTogb25lfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfWNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgbG9nKGUubWVzc2FnZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBsb2coSlNPTi5zdHJpbmdpZnkoZmxhZ3MpKTtcbiAgICAgICAgbGV0IG5ld0NvZGVzID0ge307XG4gICAgICAgIGZvcihsZXQgayBpbiBmdGxpc3Qpe1xuICAgICAgICAgICAgbmV3Q29kZXNbZnRsaXN0W2tdLmtleV0gPSBmdGxpc3Rba10udmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRpcHMgPSAn5qOA5rWL5Yiw5ZCN56ew5aSN55So6aG555uu5pWwOicra2V5c19yZV9jdCsnLOS7o+eggemHjeWkjemhueebruaVsOmHjzonK3ZhbHVlX3JlX2N0KydcXG7pnIDopoHkuIDplK7miZPkuKrmoIfor4blkJc/5LiN5pSv5oyB6Ieq5Yqo5Yig6ZmkLOaJk+agh+W/l+iHquihjOino+WGsyc7XG4gICAgICAgIHJldHVybiAkKHRpcHMpLmNvbmZpcm0oKHZhbHVlX3JlX2N0LGpzb24sbmV3Q29kZXMscGFyc2VSb3V0ZSk9PntcbiAgICAgICAgICAgIGlmKHZhbHVlX3JlX2N0PDEpe1xuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ml6LnhLbpg73mmK8w5Liq6YeN5aSN6aG555uu5LqG77yM5bCx5LiN6ZyA6KaB5oiR5YGa5LuA5LmI5LqGISdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXBhcmUoKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGEsIGIpe1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7Zmxvb3JzfSA9ICQucmVxdWlyZShcImhpa2VyOi8vcGFnZS9kZW1vRGF0YT9ydWxlPU15RmllbGThtLDigb9cIik7XG4gICAgICAgICAgICAgICAgICAgIGxldCB4ID0gYS5zdWJzdHJpbmcoMCwxKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHkgPSBiLnN1YnN0cmluZygwLDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmxvb3JzLmluZGV4T2YoeSktZmxvb3JzLmluZGV4T2YoeCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAganNvbi5jb2RlcyA9IG5ld0NvZGVzO1xuICAgICAgICAgICAgbGV0IHRpdGxlcyA9IE9iamVjdC5rZXlzKG5ld0NvZGVzKTtcbiAgICAgICAgICAgIHRpdGxlcyA9IHRpdGxlcy5zb3J0KGNvbXBhcmUoKSk7XG4gICAgICAgICAgICBqc29uLnRpdGxlID0gdGl0bGVzO1xuICAgICAgICAgICAgdmFyIG5ld0ZpbGUgPSAkLnN0cmluZ2lmeShqc29uKTsgLy9KU09OLnBhcnNl5Lya5oql6ZSZXG4gICAgICAgICAgICB3cml0ZUZpbGUocGFyc2VSb3V0ZSwgbmV3RmlsZSk7XG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5LiA6ZSu5omT5LiK5qCH5b+XJztcbiAgICAgICAgfSx2YWx1ZV9yZV9jdCxqc29uLG5ld0NvZGVzLHBhcnNlUm91dGUpXG4gICAgfSx1bmlxdWUyLGR1cGxpY2F0ZXMsZmxvb3JzKSxcbn0pO1xuZC5wdXNoKHtcbiAgICB0aXRsZTpcIvCflITph43nva5C56uZVUFcIixcbiAgICBjb2xfdHlwZTogXCJzY3JvbGxfYnV0dG9uXCIsXG4gICAgdXJsOiBcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9cIixcbiAgICBleHRyYToge1xuICAgICAgICB1YTogUENfVUFcbiAgICB9XG59KTtcbmQucHVzaCh7XG4gICAgdGl0bGU6XCLwn5eR77iP5om56YeP5pON5L2cXCIsXG4gICAgY29sX3R5cGU6IFwic2Nyb2xsX2J1dHRvblwiLFxuICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eSNub1JlY29yZEhpc3RvcnkjJykucnVsZSgoKT0+e1xuICAgICAgICBsZXQgbG9jYWxIdG1sID0gZ2V0UGF0aCgnaGlrZXI6Ly9maWxlcy9jYWNoZS9wbHNjUGFyc2UuaHRtbCcpO1xuICAgICAgICBsZXQgdGVzdGNvZGUgPSByZXF1ZXN0KGxvY2FsSHRtbCk7XG4gICAgICAgIGlmKCF0ZXN0Y29kZXx8L+aJuemHj+WIoOmZpFxcL+WvvOWHuuino+aekC8udGVzdCh0ZXN0Y29kZSkpe1xuICAgICAgICAgICAgLy8gd3JpdGVGaWxlKGxvY2FsSHRtbCxyZXF1ZXN0KCdodHRwOi8vaGlrZXIubm9raWEucHJlc3MvaGlrZXJ1bGUvenl3X2RhdGEvMTAnKSk7XG4gICAgICAgICAgICB3cml0ZUZpbGUobG9jYWxIdG1sLHJlcXVlc3QoJ2h0dHBzOi8vZ2l0Y29kZS5uZXQvcXFfMzIzOTQzNTEvZHIvLS9yYXcvbWFzdGVyL2RwL2JhdGNoX2RlbGV0ZS5odG1sJykpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBkID0gW107XG4gICAgICAgIGQucHVzaCh7dGl0bGU6IFwi5om56YeP5pON5L2c6Kej5p6QXCIsIGRlc2M6IFwiYXV0byYmZmxvYXRcIiwgdXJsOiBsb2NhbEh0bWwsIGNvbF90eXBlOiBcIng1X3dlYnZpZXdfc2luZ2xlXCJ9KTtcbiAgICAgICAgc2V0UmVzdWx0KGQpO1xuICAgIH0pLFxufSk7XG5sZXQgd2ViX3NlbCA9ICfniLHlpYfoibov5LyY6YW3L+iFvuiury/oipLmnpwv5ZOU5ZOp5ZOU5ZOpL+aQnOeLkC/opb/nk5wvUFBUVi/lkqrlkpUv5LmQ6KeGLzE5MDUv6aOO6KGML+m+meiFvi/kurrkurrov7cv5LqU5q+SL+WkmuWkmi/ono3lhbQv6Zuq5Lq6L+aXi+mjjuS6kS/nkZ7kuLDotYTmupAnLnNwbGl0KCcvJyk7XG5kLnB1c2goe1xuICAgIHRpdGxlOifigJjigJjigJnigJk8c3BhbiBzdHlsZT1cImNvbG9yOiMwMGQ5ZmZcIj7mnaXkuKrmtYvor5XlnLDlnYAnLFxuICAgIGNvbF90eXBlOiBcInRleHRfM1wiLFxuICAgIHVybDokKHdlYl9zZWwsNCwn6YCJMeadoeato+eJiHzliIfniYflnLDlnYDmnaXop6PmnpAnKS5zZWxlY3QoKGRlbW9EYXRhLGdldE9uZSk9PntcbiAgICAgICAgbGV0IHVybHMgPSBkZW1vRGF0YVtpbnB1dF07XG4gICAgICAgIGxldCB1cmwgPSBnZXRPbmUodXJscyl8fCcnO1xuICAgICAgICBpZighdXJsKXtcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly8nK2lucHV0Kyfov5nkuKrnvZHnq5nmmoLml7bmsqHmnInmkq3mlL7kvovlrZAnXG4gICAgICAgIH1cbiAgICAgICAgcHV0VmFyKCdwYXJzZVVybC51cmwnLCB1cmwpO1xuICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XG4gICAgICAgIHJldHVybiAndG9hc3Q6Ly/nu5nkvaDmib7kuobkuKonK2lucHV0KyfnmoTmkq3mlL7lnLDlnYA6XFxuJyt1cmw7XG4gICAgfSxkZW1vRGF0YSxnZXRPbmUpXG59KTtcbmQucHVzaCh7XG4gICAgdGl0bGU6J/Cfjq/op6PmnpDmtYvor5UnLFxuICAgIGNvbF90eXBlOid0ZXh0XzMnLFxuICAgIHVybDonaGlrZXI6Ly9wYWdlL2p4VGVzdD9ydWxlPU15RmllbGThtLDigb8nLFxufSk7XG5pZih0ZXN0X21vZGU9PT0nUeelnicpe1xuICAgIGQucHVzaCh7XG4gICAgICAgIC8vJyNmZjcwMDAnXG4gICAgICAgIHRpdGxlOifigJjigJjigJnigJk8c3BhbiBzdHlsZT1cImNvbG9yOiNmZjcwMDBcIj5R56We5o+S5Lu25o6l5Y+j6K6+572uJyxcbiAgICAgICAgLy8gdGl0bGU6ICfigJzigJxR56We5o+S5Lu25o6l5Y+j6K6+572u4oCd4oCdJyxcbiAgICAgICAgdXJsOiBcImhpa2VyOi8vcGFnZS9FZGl0VXJsP3J1bGU9TXlGaWVsZOG0sOKBv1wiLFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMydcbiAgICB9KTtcbn1lbHNlIGlmKHRlc3RfbW9kZT09PSfmlq3mj5InKXtcbiAgICBsZXQgdXJsID0gcmVhbFRpdGxlcy5sZW5ndGg+MD9cImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3nvJbovpEjbm9IaXN0b3J5I1wiOiQoJ+WIq+iuvue9ruS6hu+8jOWFiOaLieS7o+eggScpLmNvbmZpcm0oKVxuICAgIGQucHVzaCh7XG4gICAgICAgIHRpdGxlOifigJjigJjigJnigJk8c3BhbiBzdHlsZT1cImNvbG9yOiNmZjcwMDBcIj7mlq3mj5LmjqXlj6Porr7nva4nLFxuICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzMnXG4gICAgfSk7XG59XG5kLnB1c2goe1xuICAgIHRpdGxlOifigJjigJjigJnigJk8c3BhbiBzdHlsZT1cImNvbG9yOiNmZjcwMDBcIj7lsI/nmb3lhbPmgIDmqKHlvI86IDwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOmdyZXlcIj48c21hbGw+5LiN5oeC5LiN5a2m5ZWl5Lmf5LiN5Lya77yf5ouv5pWR5YK755m955Sc55qE5L2gPC9zbWFsbD48L3NwYW4+JyxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vUmVjb3JkSGlzdG9yeSMnKS5sYXp5UnVsZSgoKT0+e1xuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9zbWFsbFdoaXRlP3J1bGU9TXlGaWVsZOG0sOKBvydcbiAgICB9KSxcbiAgICBjb2xfdHlwZTogJ3RleHRfMScsXG59KTtcblxuanhJdGVtLmxxRmlsZSgpO1xubGV0IGV4dHJhID0gZC5zbGljZSgtNyxkLmxlbmd0aCk7IC8v5pat5o+S5re75Yqg55qE5YWD57SgXG5kID0gZC5zbGljZSgwLC03KTsgLy8g6Ieq5bex55qE5Ye95pWwXG5leHRyYVswXS50aXRsZT0n5ouJ5Y+W5YiX6KGoKOS4jeaOqOiNkCknXG5leHRyYVswXS5jb2xfdHlwZT0ndGV4dF8yJ1xuZXh0cmFbMV0udGl0bGU9J+aLieWPluS7o+eggSjlvLrng4jmjqjojZApJ1xuZXh0cmFbMV0uY29sX3R5cGU9J3RleHRfMidcbmV4dHJhWzRdLmNvbF90eXBlPSd0ZXh0X2NlbnRlcl8xJ1xuZXh0cmFbNF0udXJsPWN6R3VpZGUoKTtcbmV4dHJhLnNwbGljZSgyLDEpO1xuZCA9IGQuY29uY2F0KGV4dHJhKTtcbi8vIGQuc3BsaWNlKGQubGVuZ3RoLTUsMSk7XG5zZXRSZXN1bHQoZCk7Iiwic2VhcmNoX3VybCI6IiIsImdyb3VwIjoi4pGq5bel5YW3566xIiwic2VhcmNoRmluZCI6IiIsImRldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJkZXRhaWxfZmluZF9ydWxlIjoiIiwic2RldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJzZGV0YWlsX2ZpbmRfcnVsZSI6IiIsInVhIjoibW9iaWxlIiwicHJlUnVsZSI6IiIsInBhZ2VzIjoiW3tcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJQYXJzZV9Ebi12dWUuaHRtbFwiLFwicGF0aFwiOlwiUGFyc2VfRG4uaHRtbFwiLFwicnVsZVwiOlwiPCFET0NUWVBFIGh0bWw+XFxuPGh0bWw+XFxuPGhlYWQ+XFxuICAgIDxtZXRhIGNoYXJzZXQ9XFxcInV0Zi04XFxcIj5cXG4gICAgPG1ldGEgbmFtZT1cXFwidmlld3BvcnRcXFwiIGNvbnRlbnQ9XFxcIndpZHRoPWRldmljZS13aWR0aCxpbml0aWFsLXNjYWxlPTEsbWluaW11bS1zY2FsZT0xLG1heGltdW0tc2NhbGU9MSx1c2VyLXNjYWxhYmxlPW5vXFxcIiAvPlxcbiAgICA8dGl0bGU+UGFyc2VfRG5fdnVlPC90aXRsZT5cXG4gICAgPHNjcmlwdD5cXG4gICAgICAgIGNvbnN0IHZ1ZVBhdGggPSAnaGlrZXI6Ly9maWxlcy9ydWxlcy9kekhvdXNlL2pzL3Z1ZS5qcyc7XFxuICAgICAgICBpZih0eXBlb2YoZmJhKT09J3VuZGVmaW5lZCd8fCFmYmEpe1xcbiAgICAgICAgICAgIHZhciBmYmEgPSBmeV9icmlkZ2VfYXBwO1xcbiAgICAgICAgfVxcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBpZih0eXBlb2YocmVxdWVzdCk9PSd1bmRlZmluZWQnfHwhcmVxdWVzdCl7XFxuICAgICAgICAgICAgICAgIGV2YWwoZmJhLmdldEludGVybmFsSnMoKSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHdpbmRvdy5yZXF1ZXN0ID0gd2luZG93LnJlcXVlc3QwMCB8fCB3aW5kb3cucmVxdWVzdDtcXG4gICAgICAgICAgICAvLyBmYmEubG9nKHZ1ZVBhdGgpO1xcbiAgICAgICAgICAgIGlmKCFyZXF1ZXN0KHZ1ZVBhdGgpKXtcXG4gICAgICAgICAgICAgICAgZmJhLndyaXRlRmlsZSh2dWVQYXRoLHJlcXVlc3QoJ2h0dHA6Ly9oaWtlci5ub2tpYS5wcmVzcy9oaWtlcnVsZS9ydWxlbGlzdC5qc29uP2lkPTE4MjMnKSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIGV2YWwoZmJhLmZldGNoKHZ1ZVBhdGgpKTtcXG4gICAgICAgICAgICB9Y2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coZS5tZXNzYWdlKTtcXG4gICAgICAgICAgICAgICAgZmJhLmxvZyhlLm1lc3NhZ2UpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAvLyBmYmEubG9nKCfliqDovb12dWXnu4Tku7blrozmr5UnKTtcXG4gICAgICAgIH1jYXRjaCAoZSkge1xcbiAgICAgICAgICAgIGFsZXJ0KGUubWVzc2FnZSk7XFxuICAgICAgICB9XFxuICAgIDwvc2NyaXB0PlxcbiAgICA8IS0tICAgIDxzY3JpcHQgc3JjPVxcXCJodHRwczovL3VucGtnLmNvbS92dWVAbmV4dFxcXCI+PC9zY3JpcHQ+LS0+XFxuICAgIDwhLS0gICAgPHNjcmlwdCBzcmM9XFxcImZpbGU6Ly8vc3RvcmFnZS9lbXVsYXRlZC8wL0FuZHJvaWQvZGF0YS9jb20uZXhhbXBsZS5oaWtlcnZpZXcvZmlsZXMvRG9jdW1lbnRzL3J1bGVzL2R6SG91c2UvanMvdnVlLmpzXFxcIj48L3NjcmlwdD4tLT5cXG4gICAgPHN0eWxlPlxcbiAgICAgICAgYm9keSB7XFxuICAgICAgICAgICAgbWFyZ2luOiAwIDVweCAwIDVweDtcXG4gICAgICAgICAgICBwYWRkaW5nOiAwIDBweCAwIDBweDtcXG4gICAgICAgICAgICAvKiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNGOUYwREE7Ki9cXG4gICAgICAgICAgICBmb250LXdlaWdodDogMDtcXG4gICAgICAgICAgICBmb250LWZhbWlseTogXFxcIk1pY3Jvc29mdCBZYUhlaVxcXCIsXFxcIuWui+S9k1xcXCIsXFxcIlNlZ29lIFVJXFxcIiwgXFxcIkx1Y2lkYSBHcmFuZGVcXFwiLCBIZWx2ZXRpY2EsIEFyaWFsLHNhbnMtc2VyaWYsIEZyZWVTYW5zLCBBcmltbztcXG4gICAgICAgIH1cXG4gICAgICAgICNhcHB7XFxuICAgICAgICAgICAgbWFyZ2luLXRvcDotMTBweDtcXG4gICAgICAgIH1cXG4gICAgICAgICN0aXBze1xcbiAgICAgICAgICAgIG1hcmdpbi10b3A6LTEwcHg7XFxuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTo1cHg7XFxuICAgICAgICB9XFxuICAgICAgICAuZnVuZ3tcXG4gICAgICAgICAgICB0ZXh0LWFsaWduOmNlbnRlclxcbiAgICAgICAgfVxcbiAgICAgICAgZGl2LmJveCB7XFxuICAgICAgICAgICAgbWFyZ2luLXRvcDotMXB4O1xcbiAgICAgICAgICAgIGhlaWdodDogNDNweDtcXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMjBweDtcXG4gICAgICAgIH1cXG4gICAgICAgIC8q6L6T5YWl5qGG5bC65a+4Ki9cXG4gICAgICAgIGZvcm0ge1xcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGlucHV0LCBsYWJlbCwgc2VsZWN0IHtcXG4gICAgICAgICAgICBib3JkZXI6IG5vbmU7XFxuICAgICAgICAgICAgb3V0bGluZTogbm9uZTtcXG4gICAgICAgIH1cXG4gICAgICAgIC8q5a2X5L2T5L2N572uKi9cXG4gICAgICAgIGlucHV0IHtcXG4gICAgICAgICAgICB3aWR0aDogNzclO1xcbiAgICAgICAgICAgIGhlaWdodDogMzJweDtcXG4gICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDY2cHg7XFxuICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMHB4O1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgbGFiZWwge1xcbiAgICAgICAgICAgIHRleHQtYWxpZ246Y2VudGVyO1xcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiA0M3B4O1xcbiAgICAgICAgICAgIGhlaWdodDogNDBweDtcXG4gICAgICAgICAgICB3aWR0aDogNjBweDtcXG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgLyrlsI/moYYqL1xcbiAgICAgICAgLmJhciBsYWJlbCB7XFxuICAgICAgICAgICAgLypiYWNrZ3JvdW5kOiAjRDA2QjZDOyovXFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNXB4IDU1NXB4IDU1NXB4IDVweDtcXG4gICAgICAgICAgICB3aWR0aDogNjBweDtcXG4gICAgICAgICAgICBmb250LXNpemU6IDEzcHg7XFxuICAgICAgICAgICAgdG9wOiAwO1xcbiAgICAgICAgICAgIGxlZnQ6IDNweDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIC8q6L6T5YWl5qGG5qC35byPKi9cXG4gICAgICAgIC5iYXIgaW5wdXQge1xcbiAgICAgICAgICAgIC8qYm9yZGVyLXJhZGl1czogNXB4IDU1NXB4IDU1NXB4IDVweDtcXG4gICAgICAgICAgICAgKi9cXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XFxuICAgICAgICB9XFxuXFxuICAgICAgICAvKuWIl+ihqCovXFxuICAgICAgICBzZWxlY3Qge1xcbiAgICAgICAgICAgIHRleHQtYWxpZ246Y2VudGVyO1xcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OjQwcHg7XFxuICAgICAgICAgICAgaGVpZ2h0OiA0MHB4O1xcbiAgICAgICAgICAgIHdpZHRoOiAyMHB4O1xcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICAvKuWIl+ihqCovXFxuICAgICAgICAubGllYiBzZWxlY3R7XFxuICAgICAgICAgICAgLypib3JkZXItcmFkaXVzOiA0cHg7Ki9cXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1NTVweCA1cHggNXB4IDU1NXB4O1xcbiAgICAgICAgICAgIHdpZHRoOiA4MHB4O1xcbiAgICAgICAgICAgIHRleHQtYWxpZ246Y2VudGVyO1xcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDtcXG4gICAgICAgICAgICB0b3A6IDA7XFxuICAgICAgICAgICAgcmlnaHQ6IDJweDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIC8q5aS05YOPKi9cXG4gICAgICAgIC5yb3VuZF9pY29ue1xcbiAgICAgICAgICAgIHdpZHRoOiA0MHB4O1xcbiAgICAgICAgICAgIGhlaWdodDogNDBweDtcXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgICAgICB9XFxuICAgIDwvc3R5bGU+XFxuPC9oZWFkPlxcbjxib2R5PlxcbjxkaXYgY2xhc3M9XFxcImZ1bmdcXFwiPlxcbiAgICA8YSBzdHlsZT1cXFwiZmxvYXQ6bGVmdDtcXFwiPlxcbiAgICAgICAgPGJ1dHRvbiAgOnN0eWxlPVxcXCInYm9yZGVyOiBub25lO2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOiAnK3RoZW1lcy5jbG9zZUJ0bi5iYWNrZ3JvdW5kKyc7d2lkdGg6IDgwcHg7IGZvbnQtc2l6ZTogMThweDtjb2xvcjogJyt0aGVtZXMuY2xvc2VCdG4uY29sb3JcXFwiIG9uY2xpY2s9XFxcImNhbmNlbCgpO1xcXCI+5YWzIOmXrTwvYnV0dG9uPlxcbiAgICA8L2E+XFxuICAgIDxhIGNsYXNzPVxcXCJidG4gYnRuLXByaW1hcnlcXFwiPlxcbiAgICAgICAgPCEtLSAgICAgICAgPGJ1dHRvbiAgOnN0eWxlPVxcXCInYm9yZGVyOiBub25lO2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOiAnK3RoZW1lcy50aXBzQnRuLmJhY2tncm91bmQrJzt3aWR0aDogMTIwcHg7IGZvbnQtc2l6ZTogMThweDtjb2xvcjogJyt0aGVtZXMudGlwc0J0bi5jb2xvclxcXCIgQGNsaWNrPVxcXCJzaG93VGlwcz0hc2hvd1RpcHNcXFwiPnt7c2hvd1RpcHM/XFxcIumakOiXj+aPkOekulxcXCI6XFxcIuaYvuekuuaPkOekulxcXCJ9fTwvYnV0dG9uPi0tPlxcbiAgICAgICAgPGJ1dHRvbiAgOnN0eWxlPVxcXCInYm9yZGVyOiBub25lO2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOiAnK3RoZW1lcy50aXBzQnRuLmJhY2tncm91bmQrJzt3aWR0aDogMTIwcHg7IGZvbnQtc2l6ZTogMThweDtjb2xvcjogJyt0aGVtZXMudGlwc0J0bi5jb2xvclxcXCIgQGNsaWNrPVxcXCJzaG93VGlwcz0hc2hvd1RpcHNcXFwiIHYtdGV4dD1cXFwic2hvd1RpcHM/J+makOiXj+aPkOekuic6J+aYvuekuuaPkOekuidcXFwiPjwvYnV0dG9uPlxcbiAgICA8L2E+XFxuICAgIDxhIHN0eWxlPVxcXCJmbG9hdDpyaWdodFxcXCI+XFxuICAgICAgICA8YnV0dG9uIDpzdHlsZT1cXFwiJ2JvcmRlcjogbm9uZTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDogJyt0aGVtZXMuc2F2ZUJ0bi5iYWNrZ3JvdW5kKyc7d2lkdGg6IDgwcHg7IGZvbnQtc2l6ZTogMThweDtjb2xvcjogJyt0aGVtZXMuc2F2ZUJ0bi5jb2xvclxcXCIgb25jbGljaz1cXFwiY2xpY2ttZSgn6YWNIOe9riDlt7Ig5L+dIOWtmCDvvIEnLCAxMDAwLCAn5byAJyk7XFxcIj7kv50g5a2YPC9idXR0b24+XFxuICAgIDwvYT5cXG5cXG48L2Rpdj5cXG48YnI+XFxuPGRpdiBpZD1cXFwiYXBwXFxcIj5cXG4gICAgPGg2IGlkPVxcXCJ0aXBzXFxcIiB2LWh0bWw9XFxcInRpcHNcXFwiIHYtc2hvdz1cXFwic2hvd1RpcHNcXFwiPjwvaDY+XFxuICAgIDxkaXYgY2xhc3M9XFxcImJveCBiYXJcXFwiIHYtZm9yPVxcXCJvcHRpb24gaW4gb3B0aW9uc1xcXCI+XFxuICAgICAgICA8Zm9ybT5cXG4gICAgICAgICAgICA8IS0tICAgICAgICAgICAgPGxhYmVsIHR5cGU9XFxcInN1Ym1pdFxcXCIgOnN0eWxlPVxcXCInYmFja2dyb3VuZDonK3RoZW1lcy5iYXJsYWJlbC5iYWNrZ3JvdW5kKyc7Y29sb3I6Jyt0aGVtZXMuYmFybGFiZWwuY29sb3JcXFwiPnt7IG9wdGlvbi5uYW1lIH19PC9sYWJlbD4tLT5cXG4gICAgICAgICAgICA8bGFiZWwgdHlwZT1cXFwic3VibWl0XFxcIiA6c3R5bGU9XFxcIidiYWNrZ3JvdW5kOicrdGhlbWVzLmJhcmxhYmVsLmJhY2tncm91bmQrJztjb2xvcjonK3RoZW1lcy5iYXJsYWJlbC5jb2xvclxcXCIgdi10ZXh0PVxcXCJvcHRpb24ubmFtZVxcXCI+PC9sYWJlbD5cXG4gICAgICAgICAgICA8aW5wdXQgOnN0eWxlPVxcXCInYmFja2dyb3VuZDonK3RoZW1lcy5iYXJJbnB1dC5iYWNrZ3JvdW5kKyc7Ym9yZGVyOiAzcHggc29saWQgJyt0aGVtZXMuYmFySW5wdXQuY29sb3JcXFwiIHR5cGU9XFxcInRleHRcXFwiIG9uY2xpY2s9XFxcInJlc2V0U2VsZWN0KHRoaXMuaWQpXFxcIiA6cGxhY2Vob2xkZXI9XFxcIm9wdGlvbi5wbGFjZWhvbGRlcnx8cGxhY2Vob2xkZXJcXFwiIHYtbW9kZWw9XFxcIm9wdGlvbi52YWx1ZVxcXCIgdi1iaW5kOmlkPVxcXCJvcHRpb24uaWRcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImxpZWJcXFwiPlxcbiAgICAgICAgICAgICAgICA8c2VsZWN0IDpzdHlsZT1cXFwiJ2JhY2tncm91bmQ6Jyt0aGVtZXMuc2VsZWN0LmJhY2tncm91bmQrJztjb2xvcjonK3RoZW1lcy5zZWxlY3QuY29sb3JcXFwiIDpjbGVhcmFibGU9XFxcInRydWVcXFwiIHNpemU9XFxcIjJcXFwiIDppZD1cXFwib3B0aW9uLmlkKydTZWxlY3QnXFxcIiA6bmFtZT1cXFwib3B0aW9uLmlkXFxcIiBvbmNoYW5nZT1cXFwiZ2V0T3B0aW9uKHRoaXMuaWQsdGhpcy5uYW1lKVxcXCIgIHYtbW9kZWw9XFxcIm9wdGlvbi52YWx1ZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8IS0tICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHYtaWY9XFxcIm9wdGlvbi5pZCE9PSdxanUnJiZvcHRpb24uaWQhPT0nY2onXFxcIiA6dmFsdWU9XFxcInNlbFxcXCIgOmtleT1cXFwiaW5kZXhcXFwiIHYtZm9yPVxcXCIoc2VsLGluZGV4KSBpbiBteVNlbGVjdFxcXCI+e3sgc2VsIH19PC9vcHRpb24+LS0+XFxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHYtaWY9XFxcIm9wdGlvbi5pZCE9PSdxanUnJiZvcHRpb24uaWQhPT0nY2onXFxcIiA6dmFsdWU9XFxcInNlbFxcXCIgOmtleT1cXFwiaW5kZXhcXFwiIHYtZm9yPVxcXCIoc2VsLGluZGV4KSBpbiBteVNlbGVjdFxcXCIgdi10ZXh0PVxcXCJzZWxcXFwiPjwvb3B0aW9uPlxcbiAgICAgICAgICAgICAgICAgICAgPCEtLSAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2LWVsc2UtaWY9XFxcIm9wdGlvbi5pZD09PSdxanUnXFxcIiA6dmFsdWU9XFxcInNlbFxcXCIgOmtleT1cXFwiaW5kZXhcXFwiIHYtZm9yPVxcXCIoc2VsLGluZGV4KSBpbiBbJ+m7mOiupCddLmNvbmNhdChteVNlbGVjdClcXFwiPnt7IHNlbCB9fTwvb3B0aW9uPi0tPlxcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2LWVsc2UtaWY9XFxcIm9wdGlvbi5pZD09PSdxanUnXFxcIiA6dmFsdWU9XFxcInNlbFxcXCIgOmtleT1cXFwiaW5kZXhcXFwiIHYtZm9yPVxcXCIoc2VsLGluZGV4KSBpbiBbJ+m7mOiupCddLmNvbmNhdChteVNlbGVjdClcXFwiIHYtdGV4dD1cXFwic2VsXFxcIj48L29wdGlvbj5cXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gOnZhbHVlPVxcXCJzZWxcXFwiIDprZXk9XFxcImluZGV4XFxcIiB2LWVsc2Ugdi1mb3I9XFxcIihzZWwsaW5kZXgpIGluIGNqU2VsXFxcIj57eyBzZWwgfX08L29wdGlvbj4tLT5cXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gOnZhbHVlPVxcXCJzZWxcXFwiIDprZXk9XFxcImluZGV4XFxcIiB2LWVsc2Ugdi1mb3I9XFxcIihzZWwsaW5kZXgpIGluIGNqU2VsXFxcIiB2LXRleHQ9XFxcInNlbFxcXCI+PC9vcHRpb24+XFxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgPC9mb3JtPlxcbiAgICA8L2Rpdj5cXG48L2Rpdj5cXG48ZGl2PlxcbiAgICA8YSB2LWZvcj1cXFwidmVyIGluIHZlcmluZm9cXFwiIHN0eWxlPVxcXCJmbG9hdDpsZWZ0O21hcmdpbi10b3A6MXB4O21hcmdpbi1yaWdodDogMjBweFxcXCIgdi1iaW5kOmlkPSd2ZXIuaWQnIG9uY2xpY2s9XFxcImRvT3B0aW9uKHRoaXMuaWQpXFxcIj5cXG4gICAgICAgIDxpbWcgOnNyYz1cXFwidmVyLmF2YXRhclxcXCIgY2xhc3M9XFxcInJvdW5kX2ljb25cXFwiICBhbHQ9XFxcIlxcXCI+XFxuICAgICAgICA8IS0tICAgICAgICA8c3BhbiBzdHlsZT1cXFwibWFyZ2luLWxlZnQ6MTBweDtsaW5lLWhlaWdodDoxMHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiBncmV5O1xcXCI+e3sgdmVyLmF1dGhvciB9fTwvc3Bhbj4tLT5cXG4gICAgICAgIDxzcGFuIHN0eWxlPVxcXCJtYXJnaW4tbGVmdDoxMHB4O2xpbmUtaGVpZ2h0OjEwcHg7Zm9udC1zaXplOjEycHg7Y29sb3I6IGdyZXk7XFxcIiB2LXRleHQ9XFxcInZlci5hdXRob3JcXFwiPjwvc3Bhbj5cXG4gICAgPC9hPlxcbiAgICA8YSBzdHlsZT1cXFwiZmxvYXQ6cmlnaHQ7bWFyZ2luLXRvcDoxMHB4O1xcXCI+XFxuICAgICAgICA8YnV0dG9uIDpzdHlsZT1cXFwiJ2JvcmRlcjogbm9uZTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDonK3RoZW1lcy5zYXZlQ2xvc2VCdG4uYmFja2dyb3VuZCsnO3dpZHRoOiAxNjBweDtoZWlnaHQ6NDBweDsgZm9udC1zaXplOiAxOHB4O2NvbG9yOiAnK3RoZW1lcy5zYXZlQ2xvc2VCdG4uY29sb3JcXFwiIG9uY2xpY2s9XFxcImNsaWNrbWUoJ+mFjSDnva4g5beyIOS/nSDlrZgg77yBJywgMTAwMCwgJ+WFsycpO1xcXCI+5L+d5a2Y5bm25YWz6Zet55WM6Z2iPC9idXR0b24+XFxuICAgIDwvYT5cXG48L2Rpdj5cXG48c2NyaXB0PlxcbiAgICBsZXQgdGlwcyA9IGDmj5DnpLrvvJo8YnI+4pGg5rOo5oSP5o+S5Lu26YCJ6aG577yM5rKh5pyJ5omL5Yqo5a+85YWl5o+S5Lu255qE6K+d5LiN55So5Yqo5a6D44CC5aaC6K6+572u5LiN5b2T5Lya5a+86Ie06KeE5YiZ5peg5rOV5L2/55So77yMPGJyPuino+WGs+WKnuazle+8muinhueVjOaJk+W8gOabtOWkmuiuvue9ruKGkuaWh+S7tueuoeeQhuKGkueCuWNhY2hl4oaS6ZW/5oyJTXlQYXJzZVNldC5qc29u5Yig6Zmk5o6J77ybPGJyPuKRoeWFqOWxgOiuvue9ruWmguaenOmAieaLqeS6humdnum7mOiupOmCo+S5iOWFqOmDqOeahOino+aekOS8muS9v+eUqOi/meS4gOiuvue9ru+8jOS4jeaDs+i/meagt+eahOivneivt+Whq+WFpem7mOiupO+8mzxicj7ikaLnu7/oibLkv53lrZjmjInpkq7ku4Xku4Xkv53lrZjphY3nva7kuI3kvJrlhbPpl63orr7nva7pobXpnaLvvIzphY3nva7lkI7mg7Pkv53lrZjlubblhbPpl63orr7nva7pobXpnaLnmoTor53or7fngrnok53oibLmjInpkq7vvJs8YnI+4pGj5aaC5p6c6YGH5Yiw5L+d5a2Y5oyJ6ZKu54K55LiN5Yqo5oiW6ICF5oql6ZSZ55qE5oOF5Ya177yM5Lul5LiL6Lev5b6E5oyo552A5Yig6Zmk5LiA6YGN77yM54S25ZCO6YeN5paw5ouJ5Y+W5o+S5Lu277yM572R6aG15YaN5omT5byA5q2k572R6aG1W+S4jeimgeWFiOaLieS7o+eggV3jgILorrDlvpflpIfku708YnI+XFxu5Li75o+S5Lu25a2Y5pS+6Lev5b6EOiAvY2FjaGUvUGFyc2VfRG4uanM8YnI+XFxu572R6aG16ISa5pys5a2Y5pS+6Lev5b6EOiAvY2FjaGUvUGFyc2VfRG4uaHRtbDxicj5cXG7ml6fmlq3mj5LphY3nva7ot6/lvoQ6L2NhY2hlL015UGFyc2VTZXQuanNvbjxicj5cXG7mlrDmlq3mj5LphY3nva7ot6/lvoQvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uPGJyPlxcbuS4u+mimOaWh+S7tjovY2FjaGUvTXlUaGVtZS5qc29uPGJyPlxcbuS4u+mimOaWh+S7tjovY2FjaGUvTXlUaGVtZS5qc29uPGJyPlxcbuiHquWKqOaho+ino+aekDovY2FjaGUvTXlKaWV4aS5qc29uPGJyPlxcbiAgICDikaTpmIXor7vlrozmj5DnpLrngrnlhbPpl63liqDovb3lrozmlbTorr7nva7pobXpnaLvvIzlpoLlh7rpl67popjml6Dms5Xoh6rooYzop6PlhrPngrnlm77niYfov5vlhaXorrrlnZvlkJHmiJHlj43ppojjgII8YnI+YDtcXG4gICAgbGV0IHBsYWNlaG9sZGVyPSfovpPlhaXop6PmnpDlkI3miJbogIVVUkwuLi4uLi4nO1xcbiAgICAvLyNhYTk2ZGEgI2ZjNTE4NVxcbiAgICBsZXQgdGhlbWVzID0ge1xcbiAgICAgICAgbmFtZTon6buY6K6k5Li76aKYJyxcXG4gICAgICAgIGNsb3NlQnRuOntjb2xvcjonI2Y2ZjZmNicsYmFja2dyb3VuZDonI2FhOTZkYSd9LFxcbiAgICAgICAgc2F2ZUJ0bjp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyMwNjgwMDYnfSxcXG4gICAgICAgIHNhdmVDbG9zZUJ0bjp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyMwNUJGQzUnfSxcXG4gICAgICAgIHRpcHNCdG46e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjMDVCRkM1J30sXFxuICAgICAgICBiYXJsYWJlbDp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyNhYTk2ZGEnfSxcXG4gICAgICAgIGJhcklucHV0Ontjb2xvcjonI2FhOTZkYScsYmFja2dyb3VuZDonI2ZmZmZkMid9LFxcbiAgICAgICAgc2VsZWN0Ontjb2xvcjonI0Y5RjBEQScsYmFja2dyb3VuZDonI2FhOTZkYSd9LFxcbiAgICB9O1xcbiAgICBsZXQgdGhlbWVEZWYgPSB7XFxcIm5hbWVcXFwiOlxcXCLmlq3lv7Xljp/nmq5cXFwiLFxcXCJjbG9zZUJ0blxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNGOUYwREFcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiI2M1NDY0YVxcXCJ9LFxcXCJzYXZlQnRuXFxcIjp7XFxcImNvbG9yXFxcIjpcXFwiI0Y5RjBEQVxcXCIsXFxcImJhY2tncm91bmRcXFwiOlxcXCIjMDY4MDA2XFxcIn0sXFxcInNhdmVDbG9zZUJ0blxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNGOUYwREFcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiIzA1QkZDNVxcXCJ9LFxcXCJ0aXBzQnRuXFxcIjp7XFxcImNvbG9yXFxcIjpcXFwiI0Y5RjBEQVxcXCIsXFxcImJhY2tncm91bmRcXFwiOlxcXCIjMDVCRkM1XFxcIn0sXFxcImJhcmxhYmVsXFxcIjp7XFxcImNvbG9yXFxcIjpcXFwiI0Y5RjBEQVxcXCIsXFxcImJhY2tncm91bmRcXFwiOlxcXCIjRDA2QjZDXFxcIn0sXFxcImJhcklucHV0XFxcIjp7XFxcImNvbG9yXFxcIjpcXFwiI0QwNkI2Q1xcXCIsXFxcImJhY2tncm91bmRcXFwiOlxcXCIjRjlGMERBXFxcIn0sXFxcInNlbGVjdFxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNGOUYwREFcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiI0QwNkI2Q1xcXCJ9fTtcXG4gICAgdmFyIHRoZW1lUm91dGUgPSBcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVRoZW1lLmpzb25cXFwiO1xcbiAgICBpZighZmJhLmZldGNoKHRoZW1lUm91dGUpKXtcXG4gICAgICAgIGZiYS53cml0ZUZpbGUodGhlbWVSb3V0ZSxKU09OLnN0cmluZ2lmeSh7bm93X3RoZW1lOifpu5jorqTkuLvpopgnLHRoZW1lczpbdGhlbWVzLHRoZW1lRGVmXX0pKVxcbiAgICB9XFxuICAgIHRyeSB7XFxuICAgICAgICBsZXQgbXlUaGVtZXMgPSBKU09OLnBhcnNlKGZiYS5mZXRjaCh0aGVtZVJvdXRlKSk7XFxuICAgICAgICBsZXQgbm93VGhlbWUgPSBteVRoZW1lcy50aGVtZXMuZmlsdGVyKGl0PT5pdC5uYW1lID09PSBteVRoZW1lcy5ub3dfdGhlbWUpO1xcbiAgICAgICAgdGhlbWVzID0gbm93VGhlbWU/bm93VGhlbWVbMF06bXlUaGVtZXMudGhlbWVzWzBdO1xcbiAgICB9Y2F0Y2ggKGUpIHt9XFxuXFxuICAgIC8vIOaWreW/teWIneWni+WMlumDqOWIhlxcbiAgICBjb25zdCBhbGxBcGk9WydodHRwczovL3Rlc3Qucm9uZ3hpbmd2ci5jb20vdGVzdC8/dXJsPScsJ2h0dHA6Ly9jYWNoZS5sYW5ndWFuZy5pY3U6ODgvZGlkaS5waHA/dXJsPSddO1xcbiAgICB2YXIgc2V0dGluZ3MgPSB7XFxuICAgICAgICBxeTogJ+S4h+iDveino+aekOKSvycsXFxuICAgICAgICB5azogJ+S4h+iDveino+aekOKSvycsXFxuICAgICAgICB0eDogJ+S4h+iDveino+aekOKSvycsXFxuICAgICAgICBtZzogJ+S4h+iDveino+aekOKSvycsXFxuICAgICAgICBibDogJ+S4h+iDveino+aekOKSvycsXFxuICAgICAgICBzaDogJ+S4h+iDveino+aekOKSvycsXFxuICAgICAgICB4ZzogJ+S4h+iDveino+aekOKSvycsXFxuICAgICAgICAvLyBhbDogJ+S4h+iDveino+aekOKSvycsXFxuICAgICAgICBwcDogJ+S4h+iDveino+aekOKSvycsXFxuICAgICAgICBtaTogJ+S4h+iDveino+aekOKSvycsXFxuICAgICAgICBsZTogJ+S4h+iDveino+aekOKSvycsXFxuICAgICAgICBsdDogJ+S4h+iDveino+aekOKSvycsLy/pvpnohb5cXG4gICAgICAgIHJyOifkuIfog73op6PmnpDikr8nLC8v5Lq65Lq66L+3XFxuICAgICAgICB3ZDon5LiH6IO96Kej5p6Q4pK/JywvL+S6lOavkuS6kVxcbiAgICAgICAgb3RoOiAn6YGT6ZW/5LuT5bqT6YCa5YWNJyxcXG4gICAgICAgIG9uZTogJzEwODAnLFxcbiAgICAgICAgZnVuOiAn6J6N5YW0JyxcXG4gICAgICAgIHFqdTogJ+m7mOiupCcsXFxuICAgICAgICBjajogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnXFxuICAgIH07XFxuICAgIHZhciBvbGRSb3V0ZSA9IFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015UGFyc2VTZXQuanNvblxcXCI7XFxuICAgIHZhciBteVNldCA9IGZiYS5mZXRjaChvbGRSb3V0ZSk7XFxuICAgIHZhciBuZXdSb3V0ZSA9IFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvblxcXCI7XFxuICAgIGlmKCFmYmEuZmV0Y2gobmV3Um91dGUpKXtcXG4gICAgICAgIGZiYS53cml0ZUZpbGUobmV3Um91dGUsSlNPTi5zdHJpbmdpZnkoe3NldHRpbmdzOnNldHRpbmdzLHRpdGxlOltcXFwieXVuMTcxN1xcXCIsXFxcIuS9oOeIueenkeaKgFxcXCIsXFxcIuiejeWFtFxcXCIsXFxcIuS6uuS6uui/ty3kvJjphbdcXFwiXSxjb2Rlczp7XFxcIuS9oOeIueenkeaKgFxcXCI6XFxcImh0dHA6Ly9jYWNoZS5sYW5ndWFuZy5pY3U6ODgvZGlkaS5waHA/dXJsPVxcXCIsXFxcIuiejeWFtFxcXCI6XFxcImh0dHBzOi8vdGVzdC5yb25neGluZ3ZyLmNvbS90ZXN0Lz91cmw9XFxcIixcXFwi5Lq65Lq66L+3LeS8mOmFt1xcXCI6XFxcImh0dHBzOi8vc3ZpcC5yZW5yZW5taS5jYzoyMjIyL2FwaS8/a2V5PW5uNGo4cnVrUFhTVnpSNzhFOSZ1cmw9XFxcIn19KSlcXG4gICAgfVxcbiAgICB2YXIgbmV3Q29uZmlnID0gZmJhLmZldGNoKG5ld1JvdXRlKTtcXG4gICAgdmFyIG15U2VsZWN0ID0gW107XFxuICAgIGZ1bmN0aW9uIGNvbXBhcmUobGlzdCkge1xcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xcbiAgICAgICAgICAgIHJldHVybiAhbGlzdC5pbmNsdWRlcyhpdClcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBpZihuZXdDb25maWcmJm5ld0NvbmZpZy5sZW5ndGg+MjApe1xcbiAgICAgICAgZXZhbChcXFwibmV3Q29uZmlnID1cXFwiICsgbmV3Q29uZmlnICsgXFxcIjtcXFwiKTtcXG4gICAgICAgIGxldCBuZXdLZXlzID0gT2JqZWN0LmtleXMobmV3Q29uZmlnLnNldHRpbmdzKTtcXG4gICAgICAgIGxldCBub3dLZXlzID0gT2JqZWN0LmtleXMoc2V0dGluZ3MpO1xcbiAgICAgICAgZm9yKGxldCBpIGluIG5ld0tleXMpey8v5riF6Zmk5aSa5L2Z55qE6IqC54K5XFxuICAgICAgICAgICAgaWYoIW5vd0tleXMuaW5jbHVkZXMobmV3S2V5c1tpXSkpe1xcbiAgICAgICAgICAgICAgICBkZWxldGUgbmV3Q29uZmlnLnNldHRpbmdzW25ld0tleXNbaV1dXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHNldHRpbmdzLG5ld0NvbmZpZy5zZXR0aW5ncyk7XFxuICAgICAgICB2YXIgeWNUaXRsZSA9IFsnZGVmYXVsdFBhcnNlJywgJ2RlZmF1bHRQYXJzZVdlYicsJ21hb3NzJywgJ0NpdHlJUCcsICdjYWNoZU0zdTgnLCAncGNVQScsICdwYXJzZUxjJywgJ2dwYXJzZScsICducGFyc2UnXTtcXG4gICAgICAgIG15U2VsZWN0ID0gbmV3Q29uZmlnLnRpdGxlLmZpbHRlcihjb21wYXJlKHljVGl0bGUpKTtcXG4gICAgICAgIC8vIG15U2VsZWN0ID0gbXlTZWxlY3QubWFwKChpdCk9PntcXG4gICAgICAgIC8vICAgICBsZXQgZmxhZyA9ICfik4onO1xcbiAgICAgICAgLy8gICAgIGlmKHR5cGVvZihuZXdDb25maWcuY29kZXNbaXRdKT09PSdmdW5jdGlvbicpe1xcbiAgICAgICAgLy8gICAgICAgICBmbGFnID0gJ+KSvyc7XFxuICAgICAgICAvLyAgICAgfWVsc2UgaWYodHlwZW9mKG5ld0NvbmZpZy5jb2Rlc1tpdF0pPT09J3VuZGVmaW5lZCcpe1xcbiAgICAgICAgLy8gICAgICAgICBmbGFnID0gJyc7XFxuICAgICAgICAvLyAgICAgfVxcbiAgICAgICAgLy8gICAgIHJldHVybiBmbGFnK2l0XFxuICAgICAgICAvLyB9KTtcXG4gICAgfVxcbiAgICAvL2ZiYS5sb2coSlNPTi5zdHJpbmdpZnkobXlTZWxlY3QpKTtcXG5cXG4gICAgbGV0IG9wdGlvbnMgPSBbXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon54ix5aWH6Im6JyxcXG4gICAgICAgICAgICBpZDoncXknLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnF5LFxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiforr7nva7niLHlpYfoibonXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+S8mOmFtycsXFxuICAgICAgICAgICAgaWQ6J3lrJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy55a1xcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOifohb7orq8nLFxcbiAgICAgICAgICAgIGlkOid0eCcsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MudHhcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon6IqS5p6cJyxcXG4gICAgICAgICAgICBpZDonbWcnLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLm1nXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+WTlOWTqeWTlOWTqScsXFxuICAgICAgICAgICAgaWQ6J2JsJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5ibFxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOifmkJzni5AnLFxcbiAgICAgICAgICAgIGlkOidzaCcsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3Muc2hcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon6KW/55OcJyxcXG4gICAgICAgICAgICBpZDoneGcnLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnhnXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J1BQVFYnLFxcbiAgICAgICAgICAgIGlkOidwcCcsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MucHBcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon5ZKq5ZKVJyxcXG4gICAgICAgICAgICBpZDonbWknLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLm1pXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+S5kOinhicsXFxuICAgICAgICAgICAgaWQ6J2xlJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5sZVxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOicxOTA1JyxcXG4gICAgICAgICAgICBpZDonb25lJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5vbmVcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon6aOO6KGMJyxcXG4gICAgICAgICAgICBpZDonZnVuJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5mdW5cXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon6b6Z6IW+JyxcXG4gICAgICAgICAgICBpZDonbHQnLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLmx0XFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+S6uuS6uui/tycsXFxuICAgICAgICAgICAgaWQ6J3JyJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5yclxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOifkupTmr5InLFxcbiAgICAgICAgICAgIGlkOid3ZCcsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3Mud2RcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon5YW25LuWJyxcXG4gICAgICAgICAgICBpZDonb3RoJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5vdGhcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon5YWo5bGAJyxcXG4gICAgICAgICAgICBpZDoncWp1JyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5xanVcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon5o+S5Lu2JyxcXG4gICAgICAgICAgICBpZDonY2onLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLmNqXFxuICAgICAgICB9LFxcbiAgICBdO1xcblxcbiAgICBmdW5jdGlvbiBEaWQoaWQpe1xcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcXG4gICAgfVxcbiAgICBmdW5jdGlvbiBnZXRPcHRpb24oaWQsdGl0bGUpIHtcXG4gICAgICAgIHZhciBvYmogPSBEaWQoaWQpO1xcbiAgICAgICAgRGlkKHRpdGxlKS52YWx1ZSA9IG9iai5vcHRpb25zW29iai5zZWxlY3RlZEluZGV4XS50ZXh0O1xcbiAgICAgICAgLy8gRGlkKHRpdGxlKS52YWx1ZSA9IG9iai5vcHRpb25zW29iai5zZWxlY3RlZEluZGV4XS50ZXh0LnJlcGxhY2UoL+KTinzikr8vZywnJyk7XFxuICAgIH1cXG4gICAgZnVuY3Rpb24gcmVzZXRTZWxlY3QoaWQpe1xcbiAgICAgICAgRGlkKGlkK1xcXCJTZWxlY3RcXFwiKS5vcHRpb25zLnNlbGVjdGVkSW5kZXggPSAtMTtcXG4gICAgfVxcblxcbiAgICAvL+WHveaVsOmDqOWIhlxcblxcbiAgICBmdW5jdGlvbiBUb2FzdChtc2csZHVyYXRpb24pe1xcbiAgICAgICAgZHVyYXRpb249aXNOYU4oZHVyYXRpb24pPzIwMDA6ZHVyYXRpb247XFxuICAgICAgICB2YXIgbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xcbiAgICAgICAgbS5pbm5lckhUTUwgPSBtc2c7XFxuICAgICAgICBtLnN0eWxlLmNzc1RleHQ9XFxcIndpZHRoOjQ1JTsgbWluLXdpZHRoOjE1MHB4OyBiYWNrZ3JvdW5kOiMzMTE7IG9wYWNpdHk6MC42OyBoZWlnaHQ6YXV0bzttaW4taGVpZ2h0OiA0NXB4OyBjb2xvcjojZmZmOyBsaW5lLWhlaWdodDo0NXB4OyB0ZXh0LWFsaWduOmNlbnRlcjsgYm9yZGVyLXJhZGl1czoxMHB4OyBwb3NpdGlvbjpmaXhlZDsgdG9wOjYwJTsgbGVmdDoyNiU7IHotaW5kZXg6OTk5OTk5O1xcXCI7XFxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG0pO1xcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcXG4gICAgICAgICAgICB2YXIgZCA9IDAuNTtcXG4gICAgICAgICAgICBtLnN0eWxlLndlYmtpdFRyYW5zaXRpb24gPSAnLXdlYmtpdC10cmFuc2Zvcm0gJyArIGQgKyAncyBlYXNlLWluLCBvcGFjaXR5ICcgKyBkICsgJ3MgZWFzZS1pbic7XFxuICAgICAgICAgICAgbS5zdHlsZS5vcGFjaXR5ID0gJzAnO1xcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobSkgfSwgZCAqIDEwMDApO1xcbiAgICAgICAgfSwgZHVyYXRpb24pO1xcbiAgICB9XFxuXFxuICAgIGZ1bmN0aW9uIG9wZW5EblBhZ2UoKXtcXG4gICAgICAgIGZiYS5vcGVuKEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICBydWxlOiBcXFwiPV5fXj1cXFwiLFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi57yW6L6R6Kej5p6QXFxcIixcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU957yW6L6RI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1xcXCIsXFxuICAgICAgICAgICAgZ3JvdXA6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAvL2ZpbmRSdWxlOiBcXFwianM6dGhpcy5kPVtdOyQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9QYXJzZV9Ebi5qcz9ydWxlPU15RmllbGThtLDigb9cXFxcXFxcIikuZWRpdCgpO3NldFJlc3VsdChkKTtcXFwiLFxcbiAgICAgICAgICAgIHByZVJ1bGU6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7fVxcbiAgICAgICAgfSkpO1xcbiAgICB9XFxuICAgIGZ1bmN0aW9uIG9wZW5UaGVtZSgpe1xcbiAgICAgICAgZmJhLm9wZW4oSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgIHJ1bGU6IFxcXCI9Xl9ePVxcXCIsXFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLkuLvpopjnrqHnkIZcXFwiLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3kuLvpopgjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcIixcXG4gICAgICAgICAgICBncm91cDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIHByZVJ1bGU6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7fVxcbiAgICAgICAgfSkpO1xcbiAgICB9XFxuICAgIGZ1bmN0aW9uIG9wZW5KeE1hbmFnZSgpe1xcbiAgICAgICAgZmJhLm9wZW4oSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgIHJ1bGU6IFxcXCI9Xl9ePVxcXCIsXFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLop6PmnpDphY3nva7nrqHnkIZcXFwiLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3op6PmnpAjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcIixcXG4gICAgICAgICAgICBncm91cDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIHByZVJ1bGU6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7fVxcbiAgICAgICAgfSkpO1xcbiAgICB9XFxuICAgIGZ1bmN0aW9uIGNhbmNlbCgpe1xcbiAgICAgICAgaWYoIW15U2V0KXtcXG4gICAgICAgICAgICBmYmEud3JpdGVGaWxlKG9sZFJvdXRlLCBKU09OLnN0cmluZ2lmeShzZXR0aW5ncywgbnVsbCwgNCkpO1xcbiAgICAgICAgICAgIGZiYS5yZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgIGZiYS5iYWNrKGZhbHNlKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBmdW5jdGlvbiBjbGlja21lKG1zZyxkdXJhdGlvbix0aXRsZSl7XFxuICAgICAgICB0cnl7XFxuICAgICAgICAgICAgZm9yKGxldCBrZXkgaW4gc2V0dGluZ3Mpe1xcbiAgICAgICAgICAgICAgICAvLyBmYmEubG9nKERpZChrZXkpKycnK2tleSk7XFxuICAgICAgICAgICAgICAgIHRyeXtcXG4gICAgICAgICAgICAgICAgICAgIC8vc2V0dGluZ3Nba2V5XSA9IERpZChrZXkpLnZhbHVlLnJlcGxhY2UoL+KTinzikr8vZywnJyk7XFxuICAgICAgICAgICAgICAgICAgICBzZXR0aW5nc1trZXldID0gRGlkKGtleSkudmFsdWU7XFxuICAgICAgICAgICAgICAgIH1jYXRjaChlKXtcXG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KFxcXCLmnKrojrflj5bliLDoioLngrk6XFxcIitrZXkrXFxcIlxcXFxuXFxcIitlLm1lc3NhZ2UpO1xcbiAgICAgICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmKG15U2VsZWN0KXtcXG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihuZXdDb25maWcuc2V0dGluZ3MsIHNldHRpbmdzKTtcXG4gICAgICAgICAgICAgICAgZmJhLndyaXRlRmlsZShuZXdSb3V0ZSwgJCQkLnN0cmluZ2lmeShuZXdDb25maWcpKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgZmJhLndyaXRlRmlsZShvbGRSb3V0ZSwgJCQkLnN0cmluZ2lmeShzZXR0aW5ncykpO1xcbiAgICAgICAgICAgIFRvYXN0KG1zZyxkdXJhdGlvbik7XFxuICAgICAgICAgICAgaWYodGl0bGU9PT1cXFwi5YWzXFxcIil7XFxuICAgICAgICAgICAgICAgIGZiYS5iYWNrKCk7XFxuICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgIGZiYS5yZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9Y2F0Y2goZSl7XFxuICAgICAgICAgICAgYWxlcnQoZS5tZXNzYWdlKVxcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIC8vbGV0IHdpZHRoPXdpbmRvdy5zY3JlZW4uYXZhaWxXaWR0aDtcXG4gICAgLy9sZXQgd2lkdGhQeD13aWR0aC0zOTMrNTI7XFxuICAgIC8vYWxlcnQoXFxcIuW9k+WJjeWIhui+qOeOhzpcXFwiK3dpbmRvdy5zY3JlZW4uYXZhaWxXaWR0aCtcXFwiKlxcXCIrd2luZG93LnNjcmVlbi5oZWlnaHQpO1xcbiAgICB2YXIgdmVyaW5mbyA9IFt7XFxuICAgICAgICBpZDonZG4nLFxcbiAgICAgICAgYXV0aG9yOifmlq3lv7UnLFxcbiAgICAgICAgYXZhdGFyOidodHRwczovL3MzLmF4MXguY29tLzIwMjEvMDIvMjIveTd3YjlPLmpwZycsXFxuICAgICAgICBvcHRpb246b3BlbkRuUGFnZSxcXG4gICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBpZDonZHonLFxcbiAgICAgICAgICAgIGF1dGhvcjon6YGT6ZW/JyxcXG4gICAgICAgICAgICBhdmF0YXI6J2h0dHA6Ly9xMS5xbG9nby5jbi9nP2I9cXEmbms9NDM0ODU3MDA1JnM9NjQwJyxcXG4gICAgICAgICAgICBvcHRpb246b3BlblRoZW1lXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGlkOidsbScsXFxuICAgICAgICAgICAgYXV0aG9yOiAn6JOd6I6TJyxcXG4gICAgICAgICAgICBhdmF0YXI6ICdodHRwOi8vcTEucWxvZ28uY24vZz9iPXFxJm5rPTI1Nzk5NDkzNzgmcz02NDAnLFxcbiAgICAgICAgICAgIG9wdGlvbjpvcGVuSnhNYW5hZ2VcXG4gICAgICAgIH1cXG4gICAgXTtcXG5cXG4gICAgZnVuY3Rpb24gZG9PcHRpb24ob3B0aW9uX2lkKXtcXG4gICAgICAgIGxldCB2ZXIgPSB2ZXJpbmZvLmZpbHRlcihpdD0+aXQuaWQ9PT1vcHRpb25faWQpWzBdO1xcbiAgICAgICAgdmVyLm9wdGlvbigpO1xcbiAgICB9XFxuXFxuICAgIGNvbnN0IFJlbmRlckh0bWxBcHAgPSB7XFxuICAgICAgICBkYXRhKCkge1xcbiAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgIC8vIHJhd0h0bWw6ICc8c3BhbiBzdHlsZT1cXFwiY29sb3I6IHJlZFxcXCI+6L+Z6YeM5Lya5pi+56S657qi6Imy77yBPC9zcGFuPicsXFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6b3B0aW9ucyxcXG4gICAgICAgICAgICAgICAgdmVyaW5mbzp2ZXJpbmZvLFxcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjpwbGFjZWhvbGRlcixcXG4gICAgICAgICAgICAgICAgdGlwczp0aXBzLFxcbiAgICAgICAgICAgICAgICB0aGVtZXM6dGhlbWVzLFxcbiAgICAgICAgICAgICAgICBteVNlbGVjdDpteVNlbGVjdCxcXG4gICAgICAgICAgICAgICAgLy8gY2pTZWw6Wyfor7fpgInmi6nmj5Lku7YgKOWPquS9nOeUqGxhenlSdWxlKScsJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnLCdoaWtlcjovL2ZpbGVzL3J1bGVzL2R6SG91c2UvanMvc3JjYXV0by5qcycsJ2hpa2VyOi8vZmlsZXMvcnVsZXMvanMvUGFyc2UtVjJfRG4uanMnXSxcXG4gICAgICAgICAgICAgICAgY2pTZWw6Wyfor7fpgInmi6nmj5Lku7YgKOWPquS9nOeUqGxhenlSdWxlKScsJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnLCdoaWtlcjovL2ZpbGVzL3J1bGVzL2R6SG91c2UvanMvc3JjYXV0by5qcyddLFxcbiAgICAgICAgICAgICAgICBzZXR0aW5nczpzZXR0aW5ncyxcXG4gICAgICAgICAgICAgICAgc2hvd1RpcHM6ZmFsc2UsXFxuICAgICAgICAgICAgICAgIC8vd2lkdGhQeDp3aWR0aFB4XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSxcXG4gICAgICAgIG1ldGhvZHM6e1xcbiAgICAgICAgICAgIC8vIGNoYW5nZVZhbDpmdW5jdGlvbihldmVudCl7XFxuICAgICAgICAgICAgLy8gICAgIGdldE9wdGlvbih0aGlzLmlkLHRoaXMubmFtZSk7XFxuICAgICAgICAgICAgLy8gICAgIHRoaXMuc2VsT3B0aW9uID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xcbiAgICAgICAgICAgIC8vICAgICBhbGVydChcXFwi5L2g6YCJ5Lit5LqGXFxcIitldmVudC50YXJnZXQudmFsdWUpO1xcbiAgICAgICAgICAgIC8vIH1cXG4gICAgICAgICAgICBkb09wdGlvbjpkb09wdGlvblxcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIHRyeSB7XFxuICAgICAgICBjb25zdCBhcHA9VnVlLmNyZWF0ZUFwcChSZW5kZXJIdG1sQXBwKTtcXG4gICAgICAgIGFwcC5tb3VudCgnYm9keScpO1xcbiAgICB9Y2F0Y2ggKGUpIHtcXG4gICAgICAgIGNvbnNvbGUubG9nKGUubWVzc2FnZSlcXG4gICAgfVxcblxcbjwvc2NyaXB0PlxcblxcbjwvYm9keT5cXG48L2h0bWw+XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJQYXJzZV9Ebi5qc1wiLFwicGF0aFwiOlwiUGFyc2VfRG4uanNcIixcInJ1bGVcIjpcIi8vPT09PT09PT09PT095YWN5ZeF6LCD55SoPT09PT09PT09PT09XFxuLy/vvI3vvI3vvI09Xl9ePVxcblxcbnZhciB2ZXJzaW9uID0gXFxcIjMuNDkyMjEwMTRcXFwiOy8vMTAxMFxcblxcbnZhciB1cGRhdGVEYXRlID0gJzIwMjIvMTAvMTQvIDEwOjEwJztcXG52YXIgX215U2V0ID0ge1xcbiAgICBxanU6ICfpu5jorqQnLFxcbiAgICBvdGg6J+mBk+mVv+S7k+W6k+mAmuWFjScsXFxuICAgIGNqY2FjaGU6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzJyxcXG4gICAgdGhlbWVjYWNoZTogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvTXlUaGVtZS5qc29uJyxcXG4gICAgamlleGljYWNoZTogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvTXlKaWV4aS5qc29uJyxcXG4gICAgeDVjYWNoZTogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uaHRtbCcsXFxuICAgIGRtQ2FjaGU6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL2RpYW9tYW8udHh0JyxcXG4gICAgb2xkQ29uZmlnOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb24nLFxcbiAgICBja0xpbms6ICdodHRwczovL2NvZGUuYWxpeXVuLmNvbS9BSTk1Ny9IaWtlci9yYXcvbWFzdGVyL3YvJyxcXG4gICAgLy8gY2o6ICdodHRwczovL2NvZGUuYWxpeXVuLmNvbS9BSTk1Ny9IaWtlci9yYXcvbWFzdGVyL3YvQ2xvdWRQYXJzZS1WMl9Ebi5qcycsXFxuICAgIGNqOiAnaHR0cHM6Ly9naXRjb2RlLm5ldC9xcV8zMjM5NDM1MS9kci8tL3Jhdy9tYXN0ZXIvZHAvUGFyc2VfRG4uanMnLFxcbiAgICAvLyB4NVVybDogJ2h0dHBzOi8vY29kZS5hbGl5dW4uY29tL0FJOTU3L0hpa2VyL3Jhdy9tYXN0ZXIvdi9QYXJzZV9Ebi5odG1sJyxcXG4gICAgeDVVcmw6ICdodHRwOi8vZHIubm9raWEucHJlc3MvaHRtbC9QYXJzZV9Ebi12dWUuaHRtbCcsXFxuICAgIHBhcnNlUm91dGU6ICdoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbicsXFxuICAgIC8vIHg1Um91dGU6ICdmaWxlOi8vL3N0b3JhZ2UvZW11bGF0ZWQvMC9BbmRyb2lkL2RhdGEvY29tLmV4YW1wbGUuaGlrZXJ2aWV3L2ZpbGVzL0RvY3VtZW50cy9jYWNoZS9QYXJzZV9Ebi5odG1sJ1xcbiAgICB4NVJvdXRlOiBnZXRQYXRoKCdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmh0bWwnKSxcXG4gICAgYmF0Y2hSb3V0ZTpnZXRQYXRoKCdoaWtlcjovL2ZpbGVzL2NhY2hlL3Bsc2NQYXJzZS5odG1sJylcXG59O1xcbnZhciBNeVBhcnNlUyA9IHt9O1xcbnZhciBteVNldCA9IF9teVNldDtcXG5pZiAoZmlsZUV4aXN0KF9teVNldC5wYXJzZVJvdXRlKSkge1xcbiAgICBldmFsKCd2YXIgcGFyc2VGaWxlID0nICsgZmV0Y2goX215U2V0LnBhcnNlUm91dGUpKTtcXG4gICAgTXlQYXJzZVMgPSBwYXJzZUZpbGUuY29kZXM7XFxuICAgIG15U2V0ID0gcGFyc2VGaWxlLnNldHRpbmdzO1xcbn1cXG52YXIgcGFyc2VUaXRsZSA9IFtcXG4gICAgXFxcInl1bjE3MTdcXFwiLFxcbiAgICBcXFwiUGFuR3VcXFwiLFxcbiAgICBcXFwiRnVYaW5nXFxcIixcXG4gICAgXFxcImlzVmlkZW9cXFwiLFxcbiAgICBcXFwiZGVmYXVsdFBhcnNlXFxcIixcXG4gICAgXFxcIumBk+mVv+S7k+W6k+mAmuWFjVxcXCIsXFxuICAgIFxcXCJ0aW1lT3V0XFxcIixcXG4gICAgXFxcIua6kOeggeWMuemFjVxcXCIsXFxuICAgIFxcXCJkZWZhdWx0UGFyc2VXZWJcXFwiLFxcbiAgICBcXFwiT0vop6PmnpBcXFwiLFxcbiAgICBcXFwiTTNVOFRWXFxcIixcXG5dO1xcbi8v77yN77yN77yNPV5fXj1cXG5cXG4vL+aOpeWPo+iuvue9ri5cXG5cXG52YXIgc2V0VXJsID0gXFxcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3orr7nva4jbm9SZWNvcmRIaXN0b3J5I1xcXCI7XFxudmFyIHNldF9zd2l0Y2ggPSBzZXRVcmw7XFxudmFyIGxhenkgPSBgZXZhbCgndmFyIGNvbmZpZ19kcCA9JyArIGZldGNoKGdldFZhcignb2xkQ29uZmlnJykpKTtldmFsKGZldGNoKGNvbmZpZ19kcC5jaikpO2F5dG1QYXJzZShpbnB1dClgO1xcblxcbi8vdmFyIHBhcndpeCA9IGB2YXIgeXVybD0naHR0cHM6Ly9kYWlsaS5tYXlpeGlvbmdkaS5jbi8/dXJsPSc7UmVmZXJlcic6ICdodHRwczovL3d3dy5tYXlpeGlvbmdkaS5jbi95cz9pZD0nOydodHRwczovL2RhaWxpLm1heWl4aW9uZ2RpLmNuL2FwaS5waHAnLCAnUmVmZXJlcic6J2h0dHBzOi8vZGFpbGkubWF5aXhpb25nZGkuY24nO1xcbi8vIOWFqOawkWh0dHBzOi8vcGN2aWRlb2FsaXl1bi50aWFuc2hhbmdyZW5qaWFuLm1ndHYuY29tLjg4d3VtYS5jb20vP3VybD1cXG5cXG4vL++8je+8je+8jeWkhyDnlKjvvI3vvI3vvI1cXG4vKlxcbiAqIOW9seinhuW3peWcuu+8miBodHRwczovL3lzZ2MuY2MvXFxuICog5rGf5rmWOiA1NTXnlLXlvbEgaHR0cHM6Ly93d3cuNTU1ZHkyLmNvbS9waG9uZS5odG1sIO+9nCAxN+eciyBodHRwOi8vMTdrYW55eS5jbi8gaHR0cDovL2poamlleGkuMzB2ci5jbi8/dXJsPSDvvZwgaHR0cDovL2FwaS5tYWl6aW1hbGwuY29tL2luZGV4LnBocD91cmw9XFxuICog5rGf5rmWOiBodHRwOi8vd3d3LnRpYW5zaHV5dW4ubmV0L2luZGV4LnBocC92b2QvcGxheS9pZC80NDgzNzcvc2lkLzEvbmlkLzEuaHRtbFxcbiAqIOaxn+a5ljI6IGh0dHA6Ly85OGh5ay5jbi9pbmRleC5waHAvdm9kL3BsYXkvaWQvNzI4NDEvc2lkLzEvbmlkLzEuaHRtbFxcbiAqIOS6uuS6uui/tzogaHR0cHM6Ly92aXAuc3Vzb3UudHYvcGxheWVyLz91cmw9IO+9nCBodHRwczovL3d3dy5tb21kbS5jYy9cXG4gKlxcbiAqIHd1aWdlbjogaHR0cHM6Ly93d3cuNWlnZW4uY29tL2RtcGxheWVyL3BsYXllci8/dXJsPVxcbiAqIOW5sumlrSjkurrkurrov7cpOiBodHRwczovL2p4Lnp1aS5jbS8/dXJsPVxcbiAqIGh0dHBzOi8vMi42Nm1vdmllLnRvcC9wbGF5ZXIvP3VybD1cXG4gKlxcbiAqL1xcblxcblxcbnZhciB0b29scyA9IHtcXG4gICAgTUQ1OiBmdW5jdGlvbihkYXRhKSB7XFxuICAgICAgICBldmFsKGdldENyeXB0b0pTKCkpO1xcbiAgICAgICAgcmV0dXJuIENyeXB0b0pTLk1ENShkYXRhKS50b1N0cmluZyhDcnlwdG9KUy5lbmMuSGV4KTtcXG4gICAgfSxcXG4gICAgQUVTOiBmdW5jdGlvbih0ZXh0LCBrZXksIGl2LCBpc0VuY3J5cHQpIHtcXG4gICAgICAgIGV2YWwoZ2V0Q3J5cHRvSlMoKSk7XFxuICAgICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2Uoa2V5KTtcXG4gICAgICAgIHZhciBpdiA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKGl2KTtcXG4gICAgICAgIGlmIChpc0VuY3J5cHQpIHtcXG4gICAgICAgICAgICByZXR1cm4gQ3J5cHRvSlMuQUVTLmVuY3J5cHQodGV4dCwga2V5LCB7XFxuICAgICAgICAgICAgICAgIGl2OiBpdixcXG4gICAgICAgICAgICAgICAgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkMsXFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzN1xcbiAgICAgICAgICAgIH0pLnRvU3RyaW5nKCk7XFxuICAgICAgICB9O1xcbiAgICAgICAgcmV0dXJuIENyeXB0b0pTLkFFUy5kZWNyeXB0KHRleHQsIGtleSwge1xcbiAgICAgICAgICAgIGl2OiBpdixcXG4gICAgICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczdcXG4gICAgICAgIH0pLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcXG4gICAgfSxcXG4gICAgLy9hc2NpaVxcbiAgICBuZXh0Q2hhcmFjdGVyOiBmdW5jdGlvbihhc2NpaVZhbHVlLCBrKSB7XFxuICAgICAgICB2YXIgcyA9IGFzY2lpVmFsdWU7XFxuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShzICsgayk7XFxuICAgIH0sXFxuICAgIC8v5Yev5pKSXFxuICAgIGNhZXNhckNpcGhlcjogZnVuY3Rpb24oc3RyaW5nVmFsdWUsIGspIHtcXG4gICAgICAgIHZhciBuZXdTdHJpbmcgPSBcXFwiXFxcIjtcXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nVmFsdWUubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICBuZXdTdHJpbmcgKz0gdGhpcy5uZXh0Q2hhcmFjdGVyKHN0cmluZ1ZhbHVlW2ldLmNoYXJDb2RlQXQoKSwgayk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gbmV3U3RyaW5nO1xcbiAgICB9LFxcbiAgICBub3dEYXRlOiBmdW5jdGlvbigpIHtcXG4gICAgICAgIHZhciBkYXRlMSA9IG5ldyBEYXRlKCk7XFxuICAgICAgICB2YXIgZGF0ZVN0ciA9IFxcXCJcXFwiO1xcbiAgICAgICAgaWYgKGRhdGUxKSB7XFxuICAgICAgICAgICAgZGF0ZVN0ciA9IGRhdGUxLmdldEZ1bGxZZWFyKCk7XFxuICAgICAgICAgICAgdmFyIG1vbnRoID0gZGF0ZTEuZ2V0TW9udGgoKSArIDE7XFxuICAgICAgICAgICAgdmFyIGRheSA9IGRhdGUxLmdldERhdGUoKTtcXG4gICAgICAgICAgICBpZiAobW9udGggPCAxMCkge1xcbiAgICAgICAgICAgICAgICBkYXRlU3RyICs9IFxcXCItMFxcXCIgKyBtb250aDtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBkYXRlU3RyICs9IFxcXCItXFxcIiArIG1vbnRoO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAoZGF5IDwgMTApIHtcXG4gICAgICAgICAgICAgICAgZGF0ZVN0ciArPSBcXFwiLTBcXFwiICsgZGF5O1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGRhdGVTdHIgKz0gXFxcIi1cXFwiICsgZGF5O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBkYXRlU3RyO1xcbiAgICB9LFxcbiAgICBub3dEYXRlU3RyOmZ1bmN0aW9uICgpeyAvLyDliKnnlKgk5bel5YW36I635Y+W5qC85byP5YyW5ZCO55qE5b2T5YmN5pe26Ze0XFxuICAgICAgICByZXR1cm4gICQuZGF0ZUZvcm1hdChuZXcgRGF0ZSgpLFxcXCJ5eXl5LU1NLWRkIEhIOm1tOnNzXFxcIik7XFxuICAgIH0sXFxuICAgIHRvSlNPTjogZnVuY3Rpb24oanNvbikge1xcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGpzb24sIChrZXksIHZhbHVlKSA9PiB7XFxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnZnVuY3Rpb24nKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCA0KTtcXG4gICAgfSxcXG4gICAgdG9WTnVtOiBmdW5jdGlvbihhKSB7XFxuICAgICAgICB2YXIgYSA9IGEudG9TdHJpbmcoKTtcXG4gICAgICAgIHZhciBjID0gYS5zcGxpdCgnLicpO1xcbiAgICAgICAgdmFyIG51bV9wbGFjZSA9IFtcXFwiXFxcIiwgXFxcIjBcXFwiLCBcXFwiMDBcXFwiLCBcXFwiMDAwXFxcIiwgXFxcIjAwMDBcXFwiXSxcXG4gICAgICAgICAgICByID0gbnVtX3BsYWNlLnJldmVyc2UoKTtcXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYy5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgIHZhciBsZW4gPSBjW2ldLmxlbmd0aDtcXG4gICAgICAgICAgICBjW2ldID0gcltsZW5dICsgY1tpXTtcXG4gICAgICAgIH1cXG4gICAgICAgIHZhciByZXMgPSBjLmpvaW4oJycpO1xcbiAgICAgICAgcmV0dXJuIHJlcztcXG4gICAgfSxcXG4gICAgY3ByVmVyc2lvbjogZnVuY3Rpb24oYSwgYikge1xcbiAgICAgICAgdmFyIF9hID0gcGFyc2VJbnQodGhpcy50b1ZOdW0oYSkpLFxcbiAgICAgICAgICAgIF9iID0gcGFyc2VJbnQodGhpcy50b1ZOdW0oYikpO1xcbiAgICAgICAgYiA9IGlzTmFOKF9iKSA/IHZlcnNpb24gOiBiO1xcbiAgICAgICAgaWYgKF9hID4gX2IpIHtcXG4gICAgICAgICAgICBwdXRWYXIoJ2p4TmV3VicsICfmnInmlrDniYjmnKw6ICcgKyBhKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgY2xlYXJWYXIoJ2p4TmV3VicpO1xcbiAgICAgICAgfVxcbiAgICAgICAgcHV0VmFyKCdqeE9sZFYnLCBiKTtcXG4gICAgfSxcXG4gICAgYXRvYjpmdW5jdGlvbiAoc3RyKXtcXG4gICAgICAgIHJlcXVpcmUoJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vanMtYmFzZTY0QDMuNy4yL2Jhc2U2NC5taW4uanMnKTtcXG4gICAgICAgIHJldHVybiBCYXNlNjQuYXRvYihzdHIpO1xcbiAgICB9LFxcbiAgICBidG9hOmZ1bmN0aW9uIChzdHIpe1xcbiAgICAgICAgcmVxdWlyZSgnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9qcy1iYXNlNjRAMy43LjIvYmFzZTY0Lm1pbi5qcycpO1xcbiAgICAgICAgcmV0dXJuIEJhc2U2NC5idG9hKHN0cik7XFxuICAgIH0sXFxuICAgIOaxn+a5ljpmdW5jdGlvbiAoY29uZmlnX3VybCwgdGVtLCB0b2tlbikge1xcbiAgICAgICAgcmVxdWlyZSgnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9qcy1iYXNlNjRAMy43LjIvYmFzZTY0Lm1pbi5qcycpO1xcbiAgICAgICAgdmFyIGF0b2I9QmFzZTY0LmF0b2I7XFxuICAgICAgICB2YXIgYnRvYT1CYXNlNjQuYnRvYTtcXG4gICAgICAgIHZhciBjb25maWdfYSA9IHRlbSB8fCBcXFwiZmZzaXJsbHFcXFwiO1xcbiAgICAgICAgdmFyIHZpZGVvID0gJyc7XFxuICAgICAgICB2YXIgdGVtID0gW107XFxuICAgICAgICB2YXIgY29uZmlnX2FycnkgPSBbXTtcXG4gICAgICAgIHZhciBjb25maWdfYiA9IGNvbmZpZ19hLmxlbmd0aDtcXG4gICAgICAgIGlmICh0b2tlbiA9PSAweDEpIHtcXG4gICAgICAgICAgICB2YXIgY29uZmlnX3VybCA9IGF0b2IoY29uZmlnX3VybCk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHZhciBjb25maWdfdXJsID0gZW5jb2RlVVJJQ29tcG9uZW50KGNvbmZpZ191cmwpO1xcbiAgICAgICAgfVxcbiAgICAgICAgdmFyIGNvbmZpZ19jID0gY29uZmlnX3VybC5sZW5ndGg7XFxuICAgICAgICBmb3IgKGkgPSAweDA7IGkgPCAweDEwMDsgaSsrKSB7XFxuICAgICAgICAgICAgdGVtW2ldID0gY29uZmlnX2FbaSAlIGNvbmZpZ19iXS5jaGFyQ29kZUF0KCk7XFxuICAgICAgICAgICAgY29uZmlnX2FycnlbaV0gPSBpO1xcbiAgICAgICAgfVxcbiAgICAgICAgZm9yIChqID0gaSA9IDB4MDsgaSA8IDB4MTAwOyBpKyspIHtcXG4gICAgICAgICAgICBqID0gKGogKyBjb25maWdfYXJyeVtpXSArIHRlbVtpXSkgJSAweDEwMDtcXG4gICAgICAgICAgICB0bXAgPSBjb25maWdfYXJyeVtpXTtcXG4gICAgICAgICAgICBjb25maWdfYXJyeVtpXSA9IGNvbmZpZ19hcnJ5W2pdO1xcbiAgICAgICAgICAgIGNvbmZpZ19hcnJ5W2pdID0gdG1wO1xcbiAgICAgICAgfVxcbiAgICAgICAgZm9yIChhID0gaiA9IGkgPSAweDA7IGkgPCBjb25maWdfYzsgaSsrKSB7XFxuICAgICAgICAgICAgYSA9IChhICsgMHgxKSAlIDB4MTAwO1xcbiAgICAgICAgICAgIGogPSAoaiArIGNvbmZpZ19hcnJ5W2FdKSAlIDB4MTAwO1xcbiAgICAgICAgICAgIHRtcCA9IGNvbmZpZ19hcnJ5W2FdO1xcbiAgICAgICAgICAgIGNvbmZpZ19hcnJ5W2FdID0gY29uZmlnX2Fycnlbal07XFxuICAgICAgICAgICAgY29uZmlnX2Fycnlbal0gPSB0bXA7XFxuICAgICAgICAgICAgayA9IGNvbmZpZ19hcnJ5Wyhjb25maWdfYXJyeVthXSArIGNvbmZpZ19hcnJ5W2pdKSAlIDB4MTAwXTtcXG4gICAgICAgICAgICB2aWRlbyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvbmZpZ191cmxbaV0uY2hhckNvZGVBdCgpIF4gayk7XFxuICAgICAgICB9XFxuICAgICAgICBsb2coZGVjb2RlVVJJQ29tcG9uZW50KHZpZGVvKSk7XFxuICAgICAgICBpZiAodG9rZW4gPT0gMHgxKSB7XFxuICAgICAgICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh2aWRlbyk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybiBidG9hKHZpZGVvKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbn07XFxuaWYgKGdldFZhcihcXFwianhPbGRWXFxcIiwgXFxcIjBcXFwiKSAhPSB2ZXJzaW9uKSB7XFxuICAgIHB1dFZhcignY2pDYWNoZScsIF9teVNldC5jamNhY2hlKTtcXG4gICAgcHV0VmFyKCd4NUNhY2hlJywgX215U2V0Lng1Q2FjaGUpO1xcbiAgICBwdXRWYXIoJ29sZENvbmZpZycsIF9teVNldC5vbGRDb25maWcpO1xcbiAgICBwdXRWYXIoJ3BhcnNlUm91dGUnLCBfbXlTZXQucGFyc2VSb3V0ZSk7XFxuICAgIC8vIGxldCBqeE5ld1YgPSBmZXRjaCgnaHR0cHM6Ly9naXRlZS5jb20vRHVhbi1OaWFuL0RuL3Jhdy9tYXN0ZXIvaGlrZXJ2aWV3L1BhcnNlVmVyc2lvbi50eHQnKTtcXG4gICAgbGV0IGp4TmV3ViA9IGZldGNoKCdodHRwczovL2dpdGNvZGUubmV0L3FxXzMyMzk0MzUxL2RyLy0vcmF3L21hc3Rlci9kcC9QYXJzZVZlcnNpb24udHh0Jyk7XFxuICAgIGxldCBqeE9sZFYgPSAoZmV0Y2goX215U2V0LmNqY2FjaGUpLnNwbGl0KCd2ZXJzaW9uID0gXFxcIicpWzFdICsgJycpLnNwbGl0KCdcXFwiJylbMF07XFxuICAgIHRvb2xzLmNwclZlcnNpb24oanhOZXdWLCBqeE9sZFYpO1xcbn1cXG5cXG52YXIgUGFyc2VTID0ge307XFxudmFyIG9yaWdpbmFsUGFyc2VTID0ge1xcbiAgICAvLyB1cGRhdGVEYXRlOiB1cGRhdGVEYXRlLFxcbiAgICBwYXJzZUxjOidodHRwczovL2NvZGUuYWxpeXVuLmNvbS9BSTk1Ny9IaWtlci9yYXcvbWFzdGVyL3AvcGFyc2VMYy5qcycsXFxuICAgIENpdHlJUDogJ2h0dHA6Ly9wdi5zb2h1LmNvbS9jaXR5anNvbicsXFxuICAgIHBjVUE6ICdVc2VyLUFnZW50QE1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjBcXFxc77ybXFxcXO+8myBXT1c2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzQ5LjAuMjYyMy44NyBTYWZhcmkvNTM3LjM2JyxcXG4gICAgY2FjaGVNM3U4OiBmdW5jdGlvbih2VXJsLCByZWYpIHtcXG4gICAgICAgIGxldCBwYXJhbWFzID0gcmVmP3toZWFkZXJzOntSZWZlcmVyOnJlZn19Ont9O1xcbiAgICAgICAgcmV0dXJuIGNhY2hlTTN1OCh1cmwsIHBhcmFtYXMpXFxuICAgIH0sXFxuICAgIGlzVmlkZW86ZnVuY3Rpb24ocGxheVVybCl7XFxuICAgICAgICBjb25zdCB7aXNWaWRlb30gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9nbG9iYWxQYXJzZT9ydWxlPemBk+mVv+S7k+W6k1BybycpO1xcbiAgICAgICAgcmV0dXJuIGlzVmlkZW8ocGxheVVybClcXG4gICAgfSxcXG4gICAgdGltZU91dDpmdW5jdGlvbiAoKSB7XFxuICAgICAgICBjb25zdCBsc2c9JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvbG9jYWxTdG9yYWdlP3J1bGU96YGT6ZW/5LuT5bqTUHJvXFxcIik7XFxuICAgICAgICByZXR1cm4gcGFyc2VJbnQobHNnLmdldEl0ZW0oJ3RpbWVvdXQnLCAnNTAwMCcpKTsgIC8v6LaF5pe2XFxuICAgIH0sXFxuICAgIOa6kOeggeWMuemFjTpmdW5jdGlvbiAodmlwVXJsLHJlZ2V4LHBvcyxoZWFkZXJzKXtcXG4gICAgICAgIGlmKCFyZWdleHx8IXZpcFVybCl7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+ino+aekOaSreaUvumTvuaOpeWSjOato+WImeWMuemFjeWtl+espuS4suW/heWhqyEnXFxuICAgICAgICB9XFxuICAgICAgICBpZigoIXBvcyYmcG9zIT09MCl8fChwb3MmJnR5cGVvZihwb3MpIT1cXFwibnVtYmVyXFxcIikpey8vbWF0Y2jljLnphY3kvY3nva5cXG4gICAgICAgICAgICBwb3MgPSAxXFxuICAgICAgICB9XFxuICAgICAgICBoZWFkZXJzID0gaGVhZGVyc3x8e307XFxuICAgICAgICBoZWFkZXJzWydVc2VyLUFnZW50J10gPSBoZWFkZXJzWydVc2VyLUFnZW50J118fE1PQklMRV9VQTtcXG4gICAgICAgIGxldCBodG1sID0gZmV0Y2godmlwVXJsLCB7aGVhZGVyczpoZWFkZXJzLHRpbWVvdXQ6dGhpcy50aW1lT3V0KCl9KTtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgbGV0IHJlYWxVcmwgPSBodG1sLm1hdGNoKG5ldyBSZWdFeHAocmVnZXgpKVtwb3NdO1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzVmlkZW8ocmVhbFVybCk7XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgbG9nKGUubWVzc2FnZSk7XFxuICAgICAgICAgICAgcmV0dXJuIHZpcFVybDtcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgZGVmYXVsdFBhcnNlOiBmdW5jdGlvbih1cmwsdGltZW91dCkge1xcbiAgICAgICAgcmV0dXJuIFBhcnNlUy5kZWZhdWx0UGFyc2VXZWIodXJsLHRpbWVvdXQpO1xcbiAgICB9LFxcbiAgICBkZWZhdWx0UGFyc2VXZWI6IGZ1bmN0aW9uKHBsYXlVcmwsdGltZW91dCxleHRyYSkge1xcbiAgICAgICAgLy8gbG9nKCfkvKDlhaVkZWZhdWx0UGFyc2VXZWLnmoTotoXml7Y6Jyt0aW1lb3V0KTtcXG4gICAgICAgIHRpbWVvdXQgPSBwYXJzZUludCh0aW1lb3V0KXx8cGFyc2VJbnQoZ2V0VmFyKCdkcC5qeFRpbWVvdXQnLCc1MDAwJykpfHw1MDAwO1xcbiAgICAgICAgZXh0cmEgPSBleHRyYXx8e307XFxuICAgICAgICBsZXQgcGxheVVybExpc3QgPSBleHRyYS5wbGF5VXJsTGlzdHx8W107XFxuICAgICAgICBpZih0eXBlb2YocGxheVVybExpc3QpPT09J29iamVjdCcmJnBsYXlVcmxMaXN0Lmxlbmd0aD4wKXtcXG4gICAgICAgICAgICBwbGF5VXJsTGlzdC51bnNoaWZ0KHBsYXlVcmwpO1xcbiAgICAgICAgICAgIGxldCBwbGF5VXJscz1wbGF5VXJsTGlzdC5zbGljZSgwLDQpO1xcbiAgICAgICAgICAgIGxldCBuYW1lcz1leHRyYS5uYW1lTGlzdC5zbGljZSgwLDQpO1xcbiAgICAgICAgICAgIC8vIGxvZygn5byA5aeL5om56YeP6Kej5p6QKOW3suWOu+mHjSzlj6rlj5bliY0z5Liq5aSH6IOO77yM5Yqg6YGT6ZW/576kOjQ4NjcyMjMyOOiOt+WPluacgOaWsOmtlOaWreWKqOaAgSk6JytuYW1lcyk7XFxuICAgICAgICAgICAgcGxheVVybHM9cGxheVVybHMubWFwKChpdCxpZCk9Pml0K1xcXCI7XFxcIituYW1lc1tpZF0pO1xcbiAgICAgICAgICAgIC8vbG9nKHBsYXlVcmxzKTtcXG4gICAgICAgICAgICBjb25zdCB7TGF6eVBhcnNlRmFzdH0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9nbG9iYWxQYXJzZT9ydWxlPemBk+mVv+S7k+W6k1BybycpO1xcbiAgICAgICAgICAgIGxldCByZXQgPSBMYXp5UGFyc2VGYXN0KHBsYXlVcmxzLHRpbWVvdXQsdGltZW91dCk7XFxuICAgICAgICAgICAgaWYodHlwZW9mKHJldCk9PT0nb2JqZWN0JyYmcmV0Lmxlbmd0aD4wKXtcXG4gICAgICAgICAgICAgICAgLy9yZXR1cm4gcmV0WzBdXFxuICAgICAgICAgICAgICAgIC8vbG9nKHJldCk7XFxuICAgICAgICAgICAgICAgIGxldCB2ID0gZ2V0QXBwVmVyc2lvbigpO1xcbiAgICAgICAgICAgICAgICBpZihwYXJzZUludCh2KT49MjE5NCYmcmV0Lmxlbmd0aD4xKXtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB1cmxzID0gQXJyYXkuZnJvbShuZXcgU2V0KHJldCkpO1xcbiAgICAgICAgICAgICAgICAgICAgbmFtZXM9dXJscy5tYXAoKGl0LGlkKT0+aXQuc3BsaXQoXFxcIuKYhVxcXCIpLmxlbmd0aD4xP2l0LnNwbGl0KFxcXCLimIVcXFwiKVsxXTpcXFwi57q/6LevOlxcXCIrcGFyc2VJbnQoaWQrMSkpO1xcbiAgICAgICAgICAgICAgICAgICAgdXJscz11cmxzLm1hcChpdD0+aXQuc3BsaXQoXFxcIuKYhVxcXCIpWzBdKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBoZWFkZXJzID0gdXJscy5tYXAoKGl0KT0+e1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCEvOy8udGVzdChpdCl8fGl0LnNwbGl0KCc7JykubGVuZ3RoPDIpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge31cXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGhlYWQgPSBpdC5zcGxpdCgnOycpWzFdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighL0AvLnRlc3QoaGVhZCl8fCEve3x9Ly50ZXN0KGhlYWQpKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7fVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQ9aGVhZC5zcGxpdChcXFwie1xcXCIpWzFdLnNwbGl0KFxcXCJ9XFxcIilbMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vaGVhZCA9IGhlYWQucmVwbGFjZSgve3x9L2csJycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkID0gaGVhZC5zcGxpdCgnJiYnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9iaiA9IHt9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGkgaW4gaGVhZCl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQga2V5ID0gaGVhZFtpXS5zcGxpdCgnQCcpWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gaGVhZFtpXS5zcGxpdCgnQCcpWzFdLnJlcGxhY2UoLzsvLCfvvJvvvJsnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gdmFsdWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9ialxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgdXJscyA9IHVybHMubWFwKChpdCk9PntcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdHVybD1pdC5zcGxpdCgnOycpWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGl0LmluY2x1ZGVzKFxcXCIjaXNWaWRlbz10cnVlI1xcXCIpJiYhdHVybC5pbmNsdWRlcyhcXFwiI2lzVmlkZW89dHJ1ZSNcXFwiKSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1cmwrPVxcXCIjaXNWaWRlbz10cnVlI1xcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0dXJsXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7dXJsczp1cmxzLGhlYWRlcnM6aGVhZGVycyxuYW1lczpuYW1lc30pO1xcbiAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRbMF0uc3BsaXQoXFxcIuKYhVxcXCIpWzBdXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgIGNvbnN0IHtsYXp5UGFyc2V9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvZ2xvYmFsUGFyc2U/cnVsZT3pgZPplb/ku5PlupNQcm8nKTtcXG4gICAgICAgICAgICBsZXQgeDVQbGF5PWxhenlQYXJzZShwbGF5VXJsLHRpbWVvdXQpO1xcbiAgICAgICAgICAgIGlmKHR5cGVvZih4NVBsYXkpPT1cXFwidW5kZWZpbmVkXFxcInx8IXg1UGxheSl7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/pgZPplb/ku5PlupPop6PmnpDlpLHotKVcXFwiXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGxldCB0aXBzPS94NVJ1bGV8d2ViUnVsZS8udGVzdCh4NVBsYXkpP1xcXCJ4NS93ZWLlhY3ll4XlvIDlp4tcXFwiOlxcXCLmnoHpgJ/lhY3ll4XmjqLlrozmr5XvvIzlnLDlnYA6XFxcIisoL15odHRwLy50ZXN0KHg1UGxheSk/eDVQbGF5OifpnZ7mraPluLjpk77mjqUnKTtcXG4gICAgICAgICAgICBsb2codGlwcyk7XFxuICAgICAgICAgICAgcmV0dXJuIHg1UGxheTtcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgXFxcIm1hb3NzXFxcIjpcXG4gICAgICAgIGZ1bmN0aW9uIChqeHVybCwgcmVmLCBrZXkpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy7njKsoanh1cmwsIHJlZiwga2V5KVxcbiAgICAgICAgfSxcXG4gICAg5YWN5ZeFOmZ1bmN0aW9uKHZpcFVybCxrKXtcXG4gICAgICAgIGs9a3x8XFxcInVybFxcXCI7XFxuICAgICAgICB0cnl7XFxuICAgICAgICAgICAgbGV0IHJlYWxVcmw9SlNPTi5wYXJzZShmZXRjaCh2aXBVcmwpKVtrXTtcXG4gICAgICAgICAgICBpZihyZWFsVXJsLnN0YXJ0c1dpdGgoJy8nKSl7XFxuICAgICAgICAgICAgICAgIHJlYWxVcmwgPSAnaHR0cHM6Ly8nK3JlYWxVcmw7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzVmlkZW8ocmVhbFVybCl8fFxcXCJcXFwiO1xcbiAgICAgICAgfWNhdGNoKGUpe1xcbiAgICAgICAgICAgIC8vbG9nKGUubWVzc2FnZSk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJcXFwiXFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIFg1OmZ1bmN0aW9uKHZpcFVybCxyZWYpey8vIGh0dHBzOi8vYXBpLjUyd3liLmNvbS93ZWJjbG91ZC8/dj1odHRwOi8vdmlwLjE5MDUuY29tL3BsYXkvNjkxOTQwLnNodG1sIGh0dHA6Ly93d3cuY2RjZXIubmV0L1xcbiAgICAgICAgbGV0IF94NSA9ICQudG9TdHJpbmcoKHZpcFVybCkgPT4ge1xcbiAgICAgICAgICAgIGlmKCFsb2NhdGlvbi5ocmVmLmluY2x1ZGVzKHZpcFVybCkpe1xcbiAgICAgICAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gdmlwVXJsO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZih3aW5kb3cuY291bnQgPT0gbnVsbCl7XFxuICAgICAgICAgICAgICAgIHdpbmRvdy5jb3VudD0xO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB3aW5kb3cuY291bnQrKztcXG4gICAgICAgICAgICBpZiggd2luZG93LmNvdW50ID49IDIwKXtcXG4gICAgICAgICAgICAgICAgZmJhLmxvZyhcXFwi5pyq6I635Y+W5Yiw6LWE5rqQ5Zyw5Z2A77yM6Lez5Yiw6Kej5p6Q6aG1XFxcIik7XFxuICAgICAgICAgICAgICAgIHJldHVybiB2aXBVcmxcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdmFyIHVybHMgPSBfZ2V0VXJscygpO1xcbiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gdXJscykge1xcbiAgICAgICAgICAgICAgICBpZiAoIS9wbGF5bTN1OHxtM3U4XFxcXC50di8udGVzdCh1cmxzW2ldKSAmJiB1cmxzW2ldLm1hdGNoKC9cXFxcLm1wM3xcXFxcLm1wNHxcXFxcLm0zdTh8XFxcXC5mbHYvKSkge1xcbiAgICAgICAgICAgICAgICAgICAgZmJhLmxvZyh1cmxzW2ldKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1cmxzW2ldXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LHZpcFVybCk7XFxuICAgICAgICBsZXQgcGxheVVybCA9IHJlZj9yZWY6dmlwVXJsO1xcbiAgICAgICAgbGV0IHg1VXJsID0gJ3dlYlJ1bGU6Ly8nK3BsYXlVcmwrICdAJyArX3g1O1xcbiAgICAgICAgc2hvd0xvYWRpbmcoJ+mtlOaWrS5qc+WXheaOouS4rS4uLicpO1xcbiAgICAgICAgcmV0dXJuIHg1VXJsXFxuICAgIH0sXFxuICAgICfpgZPplb8nOmZ1bmN0aW9uICh2aXBVcmwpe1xcbiAgICAgICAgZXZhbFByaXZhdGVKUygnelNXdmUrZWVBNmlMK2YyZkdUSSsxcFI4am5MZDBTaXlWNnl2Z2NQTVd3Qk1QNWFZcHFoVEZiSVN4bnZoYjBiZDVWZ2l6eVVNSGU0ZG1zbkdoV0xCa3FmYjVIZk5iSVc0TUJNeHpMcFAvOVRqTlQ4U0lRQWZqZFRqNFA4b1gzNWVrS052R1Z4RG9seWZjWXJwb0t3Tm9RPT0nKTtcXG4gICAgICAgIHJldHVybiB0aGlzLuWFjeWXhSh2aXBVcmwrJyZzZWNyZXQ9JytzZWNyZXQpXFxuICAgIH0sXFxuICAgICfnjKsnOmZ1bmN0aW9uIChqeHVybCwgcmVmLCBrZXkpIHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgdmFyIGdldFZpZGVvSW5mbyA9IGZ1bmN0aW9uICh0ZXh0KSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0b29scy5BRVModGV4dCwga2V5LCBpdik7XFxuICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICBsZXQgaGVhZGVycyA9IHtoZWFkZXJzOiB7XFxcIlJlZmVyZXJcXFwiOiByZWZ8fCcnfX07XFxuICAgICAgICAgICAga2V5ID0ga2V5ID09IHVuZGVmaW5lZCA/IFxcXCJkdnlZUlFsblBSQ01kUVNlXFxcIiA6IGtleTtcXG4gICAgICAgICAgICB2YXIgaHRtbCA9IHJlZj9yZXF1ZXN0KGp4dXJsLCBoZWFkZXJzKTpyZXF1ZXN0KGp4dXJsKTtcXG4gICAgICAgICAgICBpZiAoLyZidHdhZj0vLnRlc3QoaHRtbCkpIHtcXG4gICAgICAgICAgICAgICAgaHRtbCA9IHJlcXVlc3Qoanh1cmwgKyBcXFwiJmJ0d2FmXFxcIiArIGh0bWwubWF0Y2goLyZidHdhZiguKj8pXFxcIi8pWzFdLCBoZWFkZXJzKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdmFyIGl2ID0gaHRtbC5zcGxpdChcXFwiX3Rva2VuID0gXFxcXFxcXCJcXFwiKVsxXS5zcGxpdChcXFwiXFxcXFxcXCJcXFwiKVswXTtcXG4gICAgICAgICAgICBldmFsKGh0bWwubWF0Y2goL3ZhciBjb25maWcgPSB7W1xcXFxzXFxcXFNdKj99LylbMF0gKyBcXFwiXFxcIik7XFxuICAgICAgICAgICAgaWYgKCEvXmh0dHAvLnRlc3QoY29uZmlnLnVybCkpIHtcXG4gICAgICAgICAgICAgICAgY29uZmlnLnVybCA9IGRlY29kZVVSSUNvbXBvbmVudCh0b29scy5BRVMoY29uZmlnLnVybCwga2V5LCBpdikpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gY29uZmlnLnVybDtcXG4gICAgICAgIH1cXG4gICAgICAgIGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgLy8gcmV0dXJuIFxcXCJcXFwiO1xcbiAgICAgICAgICAgIHJldHVybiBqeHVybDtcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgTExROiBmdW5jdGlvbihqeHVybCkge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICB2YXIgYXBpID0ganh1cmwuc3BsaXQoJz91cmw9JylbMF0gKyBcXFwiYXBpLnBocFxcXCI7XFxuICAgICAgICAgICAgdmFyIGI2NGlkID0gYmFzZTY0RW5jb2RlKGp4dXJsLnNwbGl0KCd1cmw9JylbMV0pO1xcbiAgICAgICAgICAgIHZhciBwYXJzZWlkID0gdG9vbHMuY2Flc2FyQ2lwaGVyKGI2NGlkLCAtMSk7XFxuICAgICAgICAgICAgdmFyIGpzb24gPSBKU09OLnBhcnNlKHJlcXVlc3QoYXBpLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzoganh1cmxcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXFxuICAgICAgICAgICAgICAgIGJvZHk6ICd1cmw9JyArIHBhcnNlaWRcXG4gICAgICAgICAgICB9KSk7XFxuICAgICAgICAgICAgdXJsID0gKGpzb24uY29kZSA9PSAyMDAgPyBiYXNlNjREZWNvZGUodG9vbHMuY2Flc2FyQ2lwaGVyKGpzb24udXJsLCAtMSkpIDogJycpO1xcbiAgICAgICAgICAgIHJldHVybiB1cmw7XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgcmV0dXJuICcnO1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICBQYW5HdTogZnVuY3Rpb24odmlwVXJsLCBkYXRhKSB7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIC8qdmFyIHJlZiA9ICdodHRwczovL3d3dy5wYW5ndWppZXhpLmNvbS8nO1xcbiAgICAgICAgICAgIHZhciBwYXJzZSA9ICdodHRwczovL3Bhbmd1YXBpLm50cnlqZC5uZXQvamlleGkvP3VybD0nICsgdmlwVXJsO1xcbiAgICAgICAgICAgIHZhciBhcGkgPSAnaHR0cHM6Ly9wYW5ndWFwaS5udHJ5amQubmV0L2ppZXhpL2FwaS5waHAnO1xcbiAgICAgICAgICAgICovXFxuICAgICAgICAgICAgLy92YXIgcmVmID0gJ2h0dHBzOi8veG15c3R2LmNvbS8nO1xcbiAgICAgICAgICAgIC8vdmFyIHBhcnNlID0gJ2h0dHBzOi8vd3d3Ljk5a3B3LmNvbS9wYW5ndS9pbmRleC5waHA/dXJsPScgKyB0YWlsVXJsO1xcbiAgICAgICAgICAgIC8vdmFyIGFwaSA9ICdodHRwczovL3d3dy45OWtwdy5jb20vcGFuZ3UvYXBpLnBocCc7XFxuICAgICAgICAgICAgdmFyIHBhcnNlID0gJ2h0dHBzOi8vd3d3LnBhbmd1amlleGkuY29tL3Bhbmd1Lz91cmw9JyArIHZpcFVybDtcXG4gICAgICAgICAgICB2YXIgYXBpID0gJ2h0dHBzOi8vcGFuZ3VhcGkubnRyeWpkLm5ldC9wYW5ndTIwMjEvYXBpLnBocCc7XFxuICAgICAgICAgICAgaWYgKGRhdGEpIHtcXG4gICAgICAgICAgICAgICAgcmVmID0gZGF0YVswXTtcXG4gICAgICAgICAgICAgICAgcGFyc2UgPSBkYXRhWzFdO1xcbiAgICAgICAgICAgICAgICBhcGkgPSBkYXRhWzJdO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB2YXIgVGltZSA9IChNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCkgKiAxKS50b1N0cmluZygpO1xcbiAgICAgICAgICAgIHZhciB1cmwgPSBKU09OLnBhcnNlKHJlcXVlc3QoYXBpLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogcGFyc2VcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgYm9keTogJ3VybD0nICsgdmlwVXJsICsgJyZyZWZlcmVyPScgKyBiYXNlNjRFbmNvZGUocGFyc2UpICsgJyZyZWY9MSZ0aW1lPScgKyBUaW1lICsgJyZ0eXBlPSZvdGhlcj0nICsgYmFzZTY0RW5jb2RlKHZpcFVybCkgKyAnJmlvcz0wJyxcXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgICAgICAgICB9KSkudXJsO1xcbiAgICAgICAgICAgIHJldHVybiB1cmw7XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgcmV0dXJuICcnO1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICB5dW4xNzE3OiBmdW5jdGlvbiAodmlwVXJsKSB7XFxuICAgICAgICB2YXIgaXN5ayA9IHZpcFVybC5pbmRleE9mKCd5b3VrdScpO1xcbiAgICAgICAgdmFyIHJlZiA9IFxcXCJodHRwczovL3d3dy4xNzE3eXVuLmNvbS9qeC90eS5waHA/dXJsPVxcXCIgKyB2aXBVcmw7XFxuICAgICAgICB2YXIgcGFyc2UgPSBcXFwiaHR0cHM6Ly8xNzE3eXVuLmNvbS56aDE4OC5uZXQvMDgyOC8/dXJsPVxcXCIgKyB2aXBVcmw7XFxuICAgICAgICB2YXIgYXBpID0gXFxcImh0dHBzOi8vMTcxN3l1bi5jb20uemgxODgubmV0LzEwMDQvLi5pbmRleC4ucGhwXFxcIjtcXG4gICAgICAgIHJldHVybiBpc3lrID09IC0xID8gdGhpcy5QYW5HdSh2aXBVcmwsIFtyZWYsIHBhcnNlLCBhcGldKSA6IHRoaXMuUGFuR3UodmlwVXJsLCBbcmVmICsgJyx2aXA6JywgcGFyc2UgKyAnLHZpcDonLCBhcGldKTtcXG4gICAgfSxcXG4gICAgT0vop6PmnpA6J2h0dHBzOi8vb2tqeC5jYy8/dXJsPScsXFxuICAgIE0zVThUVjonaHR0cHM6Ly9qeC5tM3U4LnR2L2ppZXhpLz91cmw9JyxcXG4gICAg6YGT6ZW/5LuT5bqT6YCa5YWNOmZ1bmN0aW9uICh1cmwsdGltZW91dCl7XFxuICAgICAgICByZXR1cm4gUGFyc2VTLmRlZmF1bHRQYXJzZVdlYih1cmwsdGltZW91dCk7XFxuICAgIH0sXFxuICAgIEZ1WGluZzogZnVuY3Rpb24odmlwVXJsKSB7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIC8vaWYodmlwVXJsLmluZGV4T2YoJ3YueW91a3UnKSE9LTEpe1xcbiAgICAgICAgICAgIC8vICAgIHZpcFVybCA9IChKU09OLnBhcnNlKHJlcXVlc3QodmlwVXJsLCB7cmVkaXJlY3Q6ZmFsc2UsIHdpdGhIZWFkZXJzOnRydWV9KSkuaGVhZGVycy5sb2NhdGlvbiArICcnKS5yZXBsYWNlKC9cXFxcPy4qLywnJyk7XFxuICAgICAgICAgICAgLy99XFxuICAgICAgICAgICAgdmFyIHJlZiA9ICdodHRwczovL2p4Lnh1ZXR1aWd1YW5nLmNuL2ppZXhpLz91cmw9JyArIHZpcFVybDtcXG4gICAgICAgICAgICB2YXIgcGFyc2UgPSByZWY7XFxuICAgICAgICAgICAgdmFyIGFwaSA9ICdodHRwczovL2p4Lnh1ZXR1aWd1YW5nLmNuL2ppZXhpL2FwaXVfZngucGhwJztcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5QYW5HdSh2aXBVcmwsIFtyZWYsIHBhcnNlLCBhcGldKTtcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICByZXR1cm4gJyc7XFxuICAgICAgICB9XFxuICAgIH0sXFxufTtcXG5cXG5PYmplY3QuYXNzaWduKFBhcnNlUywgb3JpZ2luYWxQYXJzZVMsIE15UGFyc2VTKTtcXG4vL+imhueblumhuuW6j++8jOesrOS4ieS4quimhuebluesrOS6jOS4queEtuWQjuimhuebluesrOS4gOS4qlxcblxcblxcbmZ1bmN0aW9uIGF5dG1QYXJzZSh2aXBVcmwsc3RyVGl0bGUsdGltZW91dCxwbGF5VXJsKSB7XFxuICAgIC8vIOWPguaVsDE65q2j54mI572R5Z2A5Zyw5Z2AIOWPguaVsDIg5a6a5ZCR6Kej5p6Q5o6l5Y+j5ZCN56ewIOWPguaVsDMgeDXop6PmnpDotoXml7Yg5Y+C5pWwNCDlrozmlbTnmoTmkq3mlL7pk77mjqVcXG4gICAgc3RyVGl0bGUgPSBzdHJUaXRsZXx8Jyc7XFxuICAgIHZpcFVybCA9IGRlY29kZVVSSUNvbXBvbmVudCh2aXBVcmwpO1xcbiAgICBpZighL21pZ3V2aWRlby8udGVzdCh2aXBVcmwpKXtcXG4gICAgICAgIHZpcFVybD12aXBVcmwuc3BsaXQoJyMnKVswXS5zcGxpdCgnPycpWzBdO1xcbiAgICB9XFxuICAgIHBsYXlVcmw9ZGVjb2RlVVJJQ29tcG9uZW50KHBsYXlVcmwpfHx2aXBVcmx8fCcnO1xcbiAgICAvLyBsb2coJ+S8oOWFpWF5dG1QYXJzZeeahOi2heaXtjonK3RpbWVvdXQpO1xcbiAgICB0aW1lb3V0ID0gcGFyc2VJbnQodGltZW91dCl8fHBhcnNlSW50KGdldFZhcignZHAuanhUaW1lb3V0JywnNTAwMCcpKXx8NTAwMDtcXG5cXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuICAgIGxldCBqeHNSb3V0ZSA9IFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015SmlleGkuanNvblxcXCI7XFxuICAgIGxldCBNeUppZXhpID0ge307XFxuICAgIGxldCBqaWV4aXMgPSB7fTtcXG4gICAgdHJ5IHtcXG4gICAgICAgIE15SmlleGkgPSBKU09OLnBhcnNlKGZldGNoKGp4c1JvdXRlKSk7XFxuICAgICAgICBqaWV4aXMgPSBNeUppZXhpLmppZXhpcy5maWx0ZXIoaXQ9Pml0Lm5hbWU9PT1NeUppZXhpLm5vdylbMF07XFxuICAgIH1jYXRjaCAoZSkge31cXG4gICAgZnVuY3Rpb24gZ2V0UGxheUp4KGtleSl7XFxuICAgICAgICBsZXQgcGxheVVybExpc3QgPSBbXTsvL+aJuemHj+aSreaUvuWcsOWdgOWIl+ihqFxcbiAgICAgICAgbGV0IG5hbWVMaXN0ID0gW107XFxuICAgICAgICBsZXQganhzID0gamlleGlzW2tleV07IC8vIOmAgueUqOS6jui/meS4que9keermeeahOino+aekOWIl+ihqFxcbiAgICAgICAgaWYoanhzKXtcXG4gICAgICAgICAgICBmb3IobGV0IGkgaW4ganhzKXtcXG4gICAgICAgICAgICAgICAgaWYodHlwZW9mIFBhcnNlU1tqeHNbaV1dID09ICdzdHJpbmcnJiZQYXJzZVNbanhzW2ldXS5tYXRjaCgvaHR0cC4qPz0vKSl7XFxuICAgICAgICAgICAgICAgICAgICBwbGF5VXJsTGlzdC5wdXNoKFBhcnNlU1tqeHNbaV1dK3ZpcFVybCk7XFxuICAgICAgICAgICAgICAgICAgICBuYW1lTGlzdC5wdXNoKGp4c1tpXSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICAvLyByZXR1cm4gcGxheVVybExpc3RcXG4gICAgICAgIHJldHVybiB7cGxheVVybExpc3Q6cGxheVVybExpc3QsbmFtZUxpc3Q6bmFtZUxpc3R9XFxuICAgIH1cXG4gICAgZnVuY3Rpb24gZ2V0TGF6eUxpc3Qoa2V5KXsvL+WPquiOt+WPluWkh+iDjuWIl+ihqOeahOWFjeWXheaOouino+aekOWIl+ihqFxcbiAgICAgICAgbGV0IHBhcnNlcyA9IFtdO1xcbiAgICAgICAgbGV0IGp4cyA9IGppZXhpc1trZXldfHxbXTsgLy8g6YCC55So5LqO6L+Z5Liq572R56uZ55qE6Kej5p6Q5YiX6KGoXFxuICAgICAgICAvLyBsb2coanhzKTtcXG4gICAgICAgIGlmKGp4cyl7XFxuICAgICAgICAgICAgZm9yKGxldCBpIGluIGp4cyl7XFxuICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBQYXJzZVNbanhzW2ldXSA9PSAnZnVuY3Rpb24nJiYhL+mAmuWFjS8udGVzdChQYXJzZVNbanhzW2ldXS50b1N0cmluZygpKSl7XFxuICAgICAgICAgICAgICAgICAgICBwYXJzZXMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTpqeHNbaV0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcnVsZTpQYXJzZVNbanhzW2ldXVxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBwYXJzZXNcXG4gICAgfVxcbiAgICB2YXIgZXh0cmEgPSB7fTtcXG4gICAgdmFyIHBhcnNlcyA9IFtdOyAvL+WFjeWXheaOouWIl+ihqFxcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4gICAgaWYoIXN0clRpdGxlKXtcXG4gICAgICAgIGlmKC9MVC8udGVzdCh2aXBVcmwpKXtcXG4gICAgICAgICAgICBzdHIgPSBteVNldC5sdDtcXG4gICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnbHQnKTtcXG4gICAgICAgICAgICBwYXJzZXMgPSBnZXRMYXp5TGlzdCgnbHQnLHN0cik7XFxuICAgICAgICB9IGVsc2UgaWYoL3JlbnJlbm1pLy50ZXN0KHZpcFVybCkpe1xcbiAgICAgICAgICAgIHN0ciA9IG15U2V0LnJyO1xcbiAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdycicpO1xcbiAgICAgICAgICAgIHBhcnNlcyA9IGdldExhenlMaXN0KCdycicsc3RyKTtcXG4gICAgICAgIH1lbHNlIGlmKC93dWR1eXVuLy50ZXN0KHZpcFVybCkpe1xcbiAgICAgICAgICAgIHN0ciA9IG15U2V0LndkO1xcbiAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCd3ZCcpO1xcbiAgICAgICAgICAgIHBhcnNlcyA9IGdldExhenlMaXN0KCd3ZCcsc3RyKTtcXG4gICAgICAgIH1lbHNlIGlmKC95YW5haWZlaXx4aW5sdWFufExUfHJ1aWZlbmdsYnxzdW95b3x4Znl8cmVucmVubWl8Um9uZ1hpbmdWUnx4dWVyZW58d3VkdXl1bnxsYW9kaXxOYWlmZWltaXxkYW9kbXxYTU1UfHYwMjBjLy50ZXN0KHZpcFVybCkpe1xcbiAgICAgICAgICAgIHN0ciA9IG15U2V0Lm90aDtcXG4gICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnb3RoJyk7XFxuICAgICAgICAgICAgcGFyc2VzID0gZ2V0TGF6eUxpc3QoJ290aCcsc3RyKTtcXG4gICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgIHZhciBob3N0O1xcbiAgICAgICAgICAgIHRyeXtcXG4gICAgICAgICAgICAgICAgaG9zdCA9IHZpcFVybC5tYXRjaCgvXFxcXC4oLio/KVxcXFwvLylbMV07XFxuICAgICAgICAgICAgfWNhdGNoKGUpe1xcbiAgICAgICAgICAgICAgICBpZighL15odHRwLy50ZXN0KHBsYXlVcmwpKXtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwi5pat5o+S6LCD55So5aSx6LSl77yBXFxcXG7pnZ7mraPluLjnmoR2aXDmraPniYjlnLDlnYDkuJTmnKror4bliKvljp/nq5nop6PmnpDmkq3mlL7lnLDlnYBcXFwiO1xcbiAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZVMu6YGT6ZW/5LuT5bqT6YCa5YWNKHBsYXlVcmwsdGltZW91dClcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAvL2hvc3QgPSBkZWNvZGVVUklDb21wb25lbnQoaG9zdCk7XFxuICAgICAgICAgICAgc3dpdGNoIChteVNldC5xanUpIHtcXG4gICAgICAgICAgICAgICAgY2FzZSBcXFwi6buY6K6kXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoaG9zdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcInFxLmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnR4O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgndHgnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VzID0gZ2V0TGF6eUxpc3QoJ3R4Jyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcImlxaXlpLmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnF5O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgncXknKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VzID0gZ2V0TGF6eUxpc3QoJ3F5Jyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcInlvdWt1LmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnlrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgneWsnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VzID0gZ2V0TGF6eUxpc3QoJ3lrJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcImFsaXp5XFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQuYWw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdhbCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXMgPSBnZXRMYXp5TGlzdCgnYWxpenknKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwibWd0di5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5tZztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ21nJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlcyA9IGdldExhenlMaXN0KCdtZycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJiaWxpYmlsaS5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5ibDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ2JsJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlcyA9IGdldExhenlMaXN0KCdibCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJzb2h1LmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnNoO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnc2gnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VzID0gZ2V0TGF6eUxpc3QoJ3NoJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcInR2LnNvaHUuY29tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQuc2g7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdzaCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXMgPSBnZXRMYXp5TGlzdCgnc2gnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwiaXhpZ3VhLmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnhnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgneGcnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VzID0gZ2V0TGF6eUxpc3QoJ3hnJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcInBwdHYuY29tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQucHA7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdwcCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXMgPSBnZXRMYXp5TGlzdCgncHAnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwibWlndXZpZGVvLmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0Lm1pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnbWknKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VzID0gZ2V0TGF6eUxpc3QoJ21pJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcImxlLmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LmxlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnbGUnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VzID0gZ2V0TGF6eUxpc3QoJ2xlJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcIjE5MDUuY29tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQub25lO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnb25lJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlcyA9IGdldExhenlMaXN0KCdvbmUnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwiZnVuLnR2XFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQuZnVuO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnZnVuJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlcyA9IGdldExhenlMaXN0KCdmdW4nKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQub3RoO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnb3RoJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlcyA9IGdldExhenlMaXN0KCdvdGgnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnFqdTtcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfWVsc2V7XFxuICAgICAgICBsb2coJ+mtlOaWreaJp+ihjOWumuWQkeino+aekOe6v+i3r+WktDonK3N0clRpdGxlKTtcXG4gICAgICAgIHN0ciA9IHN0clRpdGxlO1xcbiAgICB9XFxuICAgIGxldCB3aXRoQmF0Y2ggPSAhIShNeUppZXhpLmlzQXV0byAmJiBNeUppZXhpLmF1dG9Nb2RlID09PSAn6YCf5bqm5LyY5YWIJyk7XFxuICAgIGxldCB3aXRoQmF0Y2hPcmRlciA9ICEhKE15SmlleGkuaXNBdXRvICYmIC/pobrluo/kvJjlhYh85ZeF5o6i5LyY5YWILy50ZXN0KE15SmlleGkuYXV0b01vZGUpKTtcXG4gICAgbGV0IHNpbmdsZUJhY2sgPSBNeUppZXhpLnNpbmdsZUJhY2t8fGZhbHNlOyAvL+WQiuavm+aooeW8j+OAguWNleS4que7k+aenOebtOaOpei/lOWbnu+8jOWBnOatouWQjumdoueahFxcbiAgICBsZXQgaWdub3JlX214ID0gTXlKaWV4aS5pZ25vcmVfbXh8fGZhbHNlOyAvL+W/veeVpeWFjeWXhSzll4XmjqLkvJjlhYjmqKHlvI/kvb/nlKhcXG4gICAgbGV0IHVzZV9teCA9ICEoTXlKaWV4aS5hdXRvTW9kZSA9PT0gJ+WXheaOouS8mOWFiCcgJiYgTXlKaWV4aS5pZ25vcmVfbXgpOyAvLyDlj6ropoHkuI3mmK/lhY3ll4XkvJjlhYjmqKHlvI/kuIvnmoTlv73nlaXlhY3ll4Us6YO95L2/55So5YWN5ZeFXFxuICAgIGxldCBkbVBhdGggPSAnaGlrZXI6Ly9maWxlcy9jYWNoZS9kaWFvbWFvLnR4dCc7Ly/lkIrmr5vmqKHlvI/ov4fmu6Tmlofku7bot6/lvoRcXG4gICAgbGV0IGRtVXJscztcXG4gICAgdHJ5IHtcXG4gICAgICAgIGRtVXJscyA9IGZldGNoKGRtUGF0aCkudHJpbSgpLnNwbGl0KCdcXFxcbicpLmZpbHRlcihpdD0+aXQmJiFpdC5zdGFydHNXaXRoKCcvLycpKTtcXG4gICAgfWNhdGNoIChlKSB7XFxuICAgICAgICBkbVVybHMgPSBbXTtcXG4gICAgfVxcbiAgICBmdW5jdGlvbiBoYXNEbSh2aWRlb1VybCxkbVVybHMpey8v5pKt5pS+5Zyw5Z2A5piv5ZCm5Li65ZCK5q+b6KeG6aKRXFxuICAgICAgICBpZihkbVVybHMubGVuZ3RoPDEpe1xcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxcbiAgICAgICAgfVxcbiAgICAgICAgZm9yKGxldCBkbVVybCBvZiBkbVVybHMpe1xcbiAgICAgICAgICAgIGlmKChuZXcgUmVnRXhwKGRtVXJsKSkudGVzdCh2aWRlb1VybCkpey8v5pKt5pS+5Zyw5Z2A5YyF5ZCr5ZCK5q+b5qCH5b+X55qE5Zyw5Z2AXFxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIGZhbHNlXFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gdW5pcXVlMihhcnJheSl7Ly/ljrvph43lh73mlbBcXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoYXJyYXkpKTtcXG4gICAgfVxcbiAgICBmdW5jdGlvbiBBcnJTZXQoQXJyLCBpZCkgey8v5a+56LGh5pWw57uE5Y676YeNXFxuICAgICAgICB2YXIgb2JqID0ge307XFxuICAgICAgICBjb25zdCBhcnJheXMgPSBBcnIucmVkdWNlKChzZXRBcnIsIGl0ZW0pID0+IHtcXG4gICAgICAgICAgICBvYmpbaXRlbVtpZF1dID8gJycgOiBvYmpbaXRlbVtpZF1dID0gdHJ1ZSAmJiBzZXRBcnIucHVzaChpdGVtKTtcXG4gICAgICAgICAgICByZXR1cm4gc2V0QXJyO1xcbiAgICAgICAgfSwgW10pO1xcbiAgICAgICAgcmV0dXJuIGFycmF5cztcXG4gICAgfVxcbiAgICBmdW5jdGlvbiBzb3J0QnlLZXkoYXJyYXksIGtleSwgb3JkZXIpIHsvL+WvueixoeaVsOe7hOaMieafkOS4qumUruWAvOaOkuW6j1xcbiAgICAgICAgcmV0dXJuIGFycmF5LnNvcnQoZnVuY3Rpb24oYSwgYikge1xcbiAgICAgICAgICAgIHZhciB4ID0gcGFyc2VJbnQoYVtrZXldLm1hdGNoKC8oXFxcXGQrKS8pWzFdKTsvL+S/ruWkjeWkp+S6jjEw5Ye66Zeu6aKYXFxuICAgICAgICAgICAgdmFyIHkgPSBwYXJzZUludChiW2tleV0ubWF0Y2goLyhcXFxcZCspLylbMV0pO1xcbiAgICAgICAgICAgIC8vIGxvZygneDonK3grXFxcIix5OlxcXCIreSk7XFxuICAgICAgICAgICAgaWYgKG9yZGVyKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAoKHggPCB5KSA/IC0xIDogKCh4ID4geSkgPyAxIDogMCkpXFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICgoeCA8IHkpID8gKCh4ID4geSkgPyAxIDogMCkgOiAtMSlcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiAgICB9XFxuICAgIGlmICh0eXBlb2YgUGFyc2VTW3N0cl0gPT0gJ2Z1bmN0aW9uJykgeyAvLyDkuLvphY3nva7mlL7lhY3ll4XmiY3kvJrop6blj5Eo5LiN5aSq5Y+L5aW9LOi6uuW5s+S4jeaDs+S8mOWMlilcXG4gICAgICAgIGlmKC/pgJrlhY0vLnRlc3Qoc3RyKSl7XFxuICAgICAgICAgICAgcmV0dXJuIFBhcnNlU1tzdHJdKHZpcFVybCx0aW1lb3V0KTtcXG4gICAgICAgIH1cXG4gICAgICAgIHZhciB1cmw7XFxuICAgICAgICB2YXIgdGFzayA9IGZ1bmN0aW9uKG9iaikge1xcbiAgICAgICAgICAgIGV2YWwoJ3ZhciBjb25maWdfZHAgPScgKyBmZXRjaChnZXRWYXIoJ29sZENvbmZpZycpKSk7XFxuICAgICAgICAgICAgZXZhbChmZXRjaChjb25maWdfZHAuY2opKTtcXG4gICAgICAgICAgICByZXR1cm4gYXl0bVBhcnNlKG9iai52aXBVcmwsb2JqLm5hbWUsb2JqLnRpbWVvdXQpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIGxldCB0ID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGV4dHJhLnBsYXlVcmxMaXN0KSAmJiBleHRyYS5wbGF5VXJsTGlzdC5sZW5ndGggPiAwKSB7XFxuICAgICAgICAgICAgZXh0cmEubmFtZUxpc3QgPSB1bmlxdWUyKGV4dHJhLm5hbWVMaXN0KTtcXG4gICAgICAgICAgICBleHRyYS5wbGF5VXJsTGlzdCA9IHVuaXF1ZTIoZXh0cmEucGxheVVybExpc3QpO1xcbiAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgZXh0cmEubmFtZUxpc3QgPSBbXTtcXG4gICAgICAgICAgICBleHRyYS5wbGF5VXJsTGlzdCA9IFtdO1xcbiAgICAgICAgfVxcbiAgICAgICAgZnVuY3Rpb24gZ2V0TXlVcmxzKHVybHMpe1xcbiAgICAgICAgICAgIHJldHVybiB1cmxzLm1hcCgoaXQpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHR1cmwgPSBpdC5zcGxpdCgnOycpWzBdO1xcbiAgICAgICAgICAgICAgICBpZiAoaXQuaW5jbHVkZXMoXFxcIiNpc1ZpZGVvPXRydWUjXFxcIikgJiYgIXR1cmwuaW5jbHVkZXMoXFxcIiNpc1ZpZGVvPXRydWUjXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgIHR1cmwgKz0gXFxcIiNpc1ZpZGVvPXRydWUjXFxcIjtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gdHVybFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgZnVuY3Rpb24gZ2V0TXlIZWFkZXJzKHVybHMpe1xcbiAgICAgICAgICAgIHJldHVybiB1cmxzLm1hcCgoaXQpID0+IHtcXG4gICAgICAgICAgICAgICAgaWYgKCEvOy8udGVzdChpdCkgfHwgaXQuc3BsaXQoJzsnKS5sZW5ndGggPCAyKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge31cXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBoZWFkID0gaXQuc3BsaXQoJzsnKVsxXTtcXG4gICAgICAgICAgICAgICAgICAgIGlmICghL0AvLnRlc3QoaGVhZCkgfHwgIS97fH0vLnRlc3QoaGVhZCkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge31cXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGhlYWQgPSBoZWFkLnNwbGl0KFxcXCJ7XFxcIilbMV0uc3BsaXQoXFxcIn1cXFwiKVswXTtcXG4gICAgICAgICAgICAgICAgICAgIC8vaGVhZCA9IGhlYWQucmVwbGFjZSgve3x9L2csJycpO1xcbiAgICAgICAgICAgICAgICAgICAgaGVhZCA9IGhlYWQuc3BsaXQoJyYmJyk7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgb2JqID0ge307XFxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpIGluIGhlYWQpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQga2V5ID0gaGVhZFtpXS5zcGxpdCgnQCcpWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGhlYWRbaV0uc3BsaXQoJ0AnKVsxXS5yZXBsYWNlKC87LywgJ++8m++8mycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gdmFsdWU7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGZ1bmN0aW9uIGdldE15UGxheVVybExpc3QoKXtcXG4gICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KGV4dHJhLnBsYXlVcmxMaXN0KSl7XFxuICAgICAgICAgICAgICAgIC8vIHJldHVybiBleHRyYS5wbGF5VXJsTGlzdC5tYXAoaXQ9Pid2aWRlbzovLycraXQucmVwbGFjZSgnP3VybD0nLCc/aWQ9Jyt0KycmdXJsPScpLnJlcGxhY2UoJz92PScsJz9pZD0nK3QrJyZ2PScpKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4dHJhLnBsYXlVcmxMaXN0Lm1hcChpdD0+J3ZpZGVvOi8vJytpdCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBbXVxcbiAgICAgICAgfVxcblxcblxcbiAgICAgICAgaWYoIXdpdGhCYXRjaE9yZGVyfHxzdHJUaXRsZSkgey8v5LiN5byA5aSa57q/6Lev6aG65bqP5LyY5YWI5oiW6ICF5oyH5a6a5LqG6Kej5p6QXFxuICAgICAgICAgICAgdXJsID0gUGFyc2VTW3N0cl0odmlwVXJsLHRpbWVvdXQpO1xcbiAgICAgICAgfVxcbiAgICAgICAgZWxzZXsvL+W8gOS6huWkmue6v+i3r+mhuuW6j+S8mOWFiOaJp+ihjOWFjeWXheWkmuS7u+WKoVxcbiAgICAgICAgICAgIGlmKHR5cGVvZiBQYXJzZVNbc3RyXSA9PSAnZnVuY3Rpb24nJiYhL+mAmuWFjS8udGVzdChQYXJzZVNbc3RyXS50b1N0cmluZygpKSl7XFxuICAgICAgICAgICAgICAgIHBhcnNlcy51bnNoaWZ0KHtuYW1lOnN0cn0pOyAvL+aKiuS4u+mFjee9rueahOWFjeWXheaOouWKoOWFpeWIsOWkmuS7u+WKoeWIl+ihqFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBwYXJzZXMgPSBBcnJTZXQocGFyc2VzLCduYW1lJyk7IC8v5Y676YeNXFxuICAgICAgICAgICAgaWYodXNlX214KSB7IC8vIOWmguaenOS9v+eUqOWFjeWXhSzlhYjlpJrku7vliqHot5HlhY3ll4VcXG4gICAgICAgICAgICAgICAgdmFyIGNvdW50ID0gcGFyc2VzLmxlbmd0aDsgLy/orr7nva7ku7vliqHmlbDph49cXG4gICAgICAgICAgICAgICAgbG9nKCfprZTmlq3lvIDlkK/lpJrku7vliqHop6PmnpAs5Lu75Yqh5pWw6YePOicgKyBjb3VudCk7XFxuICAgICAgICAgICAgICAgIGxvZygn6Kej5p6Q5YiX6KGoOicgKyBKU09OLnN0cmluZ2lmeShwYXJzZXMpKTtcXG4gICAgICAgICAgICAgICAgdmFyIHBhcnNlUmV0ID0gW107IC8v6Kej5p6Q57uT5p6c5YiX6KGoXFxuICAgICAgICAgICAgICAgIGxldCB0YXNrcyA9IHBhcnNlcy5tYXAoKGl0LCBpZGV4KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmM6IHRhc2ssXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW06IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogaXQubmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcnVsZTppdC5ydWxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXBVcmw6IHZpcFVybCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dDogdGltZW91dFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFxcXCJ0YXNrXFxcIiArIGlkZXhcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIHNob3dMb2FkaW5nKFxcXCLprZTmlq3lubblj5Hop6PmnpDkuK3vvIzliankvZnop6PmnpA6XFxcIiArIGNvdW50KTtcXG5cXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gaXNEbShyZXQpIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICghcmV0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNEbShyZXQuc3BsaXQoJyMnKVswXS5zcGxpdCgnOycpWzBdLCBkbVVybHMpXFxuICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgYmUodGFza3MsIHtcXG4gICAgICAgICAgICAgICAgICAgIGZ1bmM6IGZ1bmN0aW9uIChvYmosIGlkLCBlcnJvciwgcmV0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nKFxcXCLnm5HlkKzliLDku7vliqFcXFwiICsgaWQgKyAn5bey57uT5p2fLGVycm9yOicgKyBlcnJvciArICcscmV0OicgKyByZXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHJldCB8fCAnJztcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVJldC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzazogaWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldDogcmV0LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB0YXNrcy5maWx0ZXIoaXQgPT4gaXQuaWQgPT09IGlkKVswXS5wYXJhbS5uYW1lXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpbmdsZUJhY2spIHsvL+WQiuavm+aooeW8j+W8gOWni+eahOivnSzliKTmlq1yZXTmnInmlYjmgKdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCfku7vliqEnICsgaWQgKyAn57uT5p6c5piv5ZCK5q+bPycgKyBpc0RtKHJldCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRG0ocmV0KSAmJiBQYXJzZVMuaXNWaWRlbyhyZXQuc3BsaXQoJyMnKVswXS5zcGxpdCgnOycpWzBdKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZUxvYWRpbmcoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZygn5ZCK5q+b5qih5byP5Lit5pat6Kej5p6Q5bm26L+U5Zue6KeG6aKRJyArIHJldCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2JyZWFrJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50IC09IDE7IC8v5a6M5oiQ5LqG5Lu75Yqh77yM5Lu75Yqh5pWw6YePLTFcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2xvZyhvYmopO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA+IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0xvYWRpbmcoXFxcIumtlOaWreW5tuWPkeino+aekOS4re+8jOWJqeS9meino+aekDpcXFwiICsgY291bnQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZUxvYWRpbmcoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW06IHsvL+S8oOWIsOebkeWQrOWHveaVsOeahG9iauWPguaVsOmHjFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpOiBcXFwiY2NjXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7Ly/miafooYzlpJrku7vliqFcXG4gICAgICAgICAgICAgICAgLy8gbGV0IHZhbHVhYmxlID0gcGFyc2VSZXQuZmlsdGVyKGl0PT4vbTN1OHxtcDQvLnRlc3QoaXQucmV0KSk7XFxuICAgICAgICAgICAgICAgIGxvZyhcXFwi5aSa5Lu75Yqh5omn6KGM57uT5p6c5pWwOlxcXCIgKyBwYXJzZVJldC5sZW5ndGgpO1xcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWFibGUgPSBbXTtcXG4gICAgICAgICAgICAgICAgcGFyc2VSZXQuZm9yRWFjaCgoaXQpPT57XFxuICAgICAgICAgICAgICAgICAgICBpZihpdC5yZXQpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKC9uYW1lcy8udGVzdChpdC5yZXQpJiYvdXJscy8udGVzdChpdC5yZXQpKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCflsJ3or5XogZrlkIjop6PmnpDop6PljIU6JytpdC5yZXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJldHMgPSBKU09OLnBhcnNlKGl0LnJldC5yZXBsYWNlKC8jaXNWaWRlbz10cnVlIy9nLCcnKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRzLm5hbWVzLmZvckVhY2goKG5hbWUsaWRleCk9PntcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1YWJsZS5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTpuYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQ6cmV0cy51cmxzW2lkZXhdLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrOml0LnRhc2ssXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2coJ+ino+WMheWPkeeUn+mUmeivrzonK2UubWVzc2FnZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihQYXJzZVMuaXNWaWRlbyhpdC5yZXQuc3BsaXQoJyMnKVswXS5zcGxpdCgnOycpWzBdKSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVhYmxlLnB1c2goaXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKGl0LnJldC5zdGFydHNXaXRoKCd2aWRlbzovLycpKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWFibGUucHVzaChpdCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgLy8gbGV0IHZhbHVhYmxlID0gcGFyc2VSZXQuZmlsdGVyKGl0ID0+IGl0LnJldCAmJiBQYXJzZVMuaXNWaWRlbyhpdC5yZXQuc3BsaXQoJyMnKVswXS5zcGxpdCgnOycpWzBdKSk7XFxuICAgICAgICAgICAgICAgIHZhbHVhYmxlID0gdmFsdWFibGUuZmlsdGVyKGl0ID0+ICFpc0RtKGl0LnJldCkpOy8v6L+H5ruk5ZCK5q+b6KeG6aKRXFxuICAgICAgICAgICAgICAgIGxvZygn5aSa5Lu75Yqh6aG65bqP5omn6KGM5pyJ5pWI57uT5p6cOicgKyBKU09OLnN0cmluZ2lmeSh2YWx1YWJsZSkpO1xcbiAgICAgICAgICAgICAgICBpZiAodmFsdWFibGUubGVuZ3RoID4gMSkgey8v5aSa57q/6LevXFxuICAgICAgICAgICAgICAgICAgICB2YWx1YWJsZSA9IHNvcnRCeUtleSh2YWx1YWJsZSwgJ3Rhc2snLCB0cnVlKTsvL+WNh+W6j+aOkuWIl1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVybHMgPSB2YWx1YWJsZS5tYXAoaXQgPT4gaXQucmV0KTsvL+WPluWHuumTvuaOpSznvJPlrZjliY3nmoRcXG4gICAgICAgICAgICAgICAgICAgIGlmIChnZXRWYXIoJ2RwLmNhY2hlVmlkZW8nLCAndHJ1ZScpID09PSAndHJ1ZScgJiYgcGFyc2VJbnQoZ2V0QXBwVmVyc2lvbigpKSA+PSAyMjU1KSB7Ly/lvIDlp4vnvJPlrZhcXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2coXFxcIuWwiuaVrOeahOmtlOaWreeUqOaIt++8jOinhumikee8k+WtmOW3suWQr+eUqO+8jOivt+WwveaDheS6q+WPl+eci+WJp+aXtuWFiVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2aWRlb3NDYWNoZSA9IHVybHMubWFwKChpdCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaGVhZGVycyA9IHt9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXQuc3BsaXQoXFxcIjtcXFwiKS5sZW5ndGggPiAxKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaGVhZCA9IGl0LnNwbGl0KCc7JylbMV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoL0AvLnRlc3QoaGVhZCkgJiYgL3t8fS8udGVzdChoZWFkKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vaGVhZCA9IGhlYWQucmVwbGFjZSgve3x9L2csJycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQgPSBoZWFkLnNwbGl0KFxcXCJ7XFxcIilbMV0uc3BsaXQoXFxcIn1cXFwiKVswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkID0gaGVhZC5zcGxpdCgnJiYnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpIGluIGhlYWQpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGtleSA9IGhlYWRbaV0uc3BsaXQoJ0AnKVswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gaGVhZFtpXS5zcGxpdCgnQCcpWzFdLnJlcGxhY2UoLzsvLCAn77yb77ybJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnNba2V5XSA9IHZhbHVlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBpdC5zcGxpdChcXFwiO1xcXCIpWzBdLnNwbGl0KFxcXCIjXFxcIilbMF0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVyc1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBiYXRjaENhY2hlTTN1OCh2aWRlb3NDYWNoZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEubWFwKChpdCwgaWQpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGV4dHJhID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1cmxzW2lkXS5zcGxpdChcXFwiO1xcXCIpLmxlbmd0aCA+IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gXFxcIjtcXFwiICsgdXJsc1tpZF0uc3BsaXQoXFxcIjtcXFwiKVsxXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1cmxzW2lkXS5zcGxpdChcXFwi4piFXFxcIikubGVuZ3RoID4gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBcXFwi4piFXFxcIiArIHVybHNbaWRdLnNwbGl0KFxcXCLimIVcXFwiKVsxXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXQgKyBcXFwiXFxcIiAhPT0gXFxcIm51bGxcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXQgKyBleHRyYVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybHNbaWRdXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmxzID0gZGF0YVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgLy8gbG9nKCfmjpLluo/lrozmr5XlkI7nu5Pmnpw6JytKU09OLnN0cmluZ2lmeSh2YWx1YWJsZSkpO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5hbWVzID0gdmFsdWFibGUubWFwKGl0ID0+IGl0Lm5hbWUpO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGhlYWRlcnMgPSBnZXRNeUhlYWRlcnModXJscyk7XFxuICAgICAgICAgICAgICAgICAgICB1cmxzID0gZ2V0TXlVcmxzKHVybHMpO1xcbiAgICAgICAgICAgICAgICAgICAgaWYoTXlKaWV4aS5hdXRvTW9kZSA9PT0gJ+WXheaOouS8mOWFiCcpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybHMgPSB1cmxzLmNvbmNhdChnZXRNeVBsYXlVcmxMaXN0KCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzID0gbmFtZXMuY29uY2F0KGV4dHJhLm5hbWVMaXN0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBoZWFkZXJzID0gaGVhZGVycy5jb25jYXQoZXh0cmEubmFtZUxpc3QubWFwKChpdCk9PntyZXR1cm4ge319KSk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe3VybHM6IHVybHMsIGhlYWRlcnM6IGhlYWRlcnMsIG5hbWVzOiBuYW1lc30pO1xcblxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVhYmxlLmxlbmd0aCA9PT0gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJhLm5hbWVMaXN0Lmxlbmd0aCA8IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBoaWRlTG9hZGluZygpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/oiq3mr5RR5LqGLOWkmuS7u+WKoeWFjeWXheino+aekOWFqOWGm+imhuayoeW5tuS4lOayoeacieWPr+eUqOeahGpzb258eDXop6PmnpDkuoYnXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBzaG93TG9hZGluZyhcXFwi6a2U5pat5aSa5Lu75Yqh5YWN5ZeF5aSx6LSlLOWwneivlWpzb258eDVcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIC8v5o6S6Zmk56ys5LiA5LiqXFxuICAgICAgICAgICAgICAgICAgICBsZXQgZXh0cmEyID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVMaXN0OiBleHRyYS5uYW1lTGlzdCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGF5VXJsTGlzdDogZXh0cmEucGxheVVybExpc3Quc2xpY2UoMSksXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBpZihNeUppZXhpLmF1dG9Nb2RlID09PSAn5ZeF5o6i5LyY5YWIJyl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsczogZ2V0TXlQbGF5VXJsTGlzdCgpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lczogZXh0cmEubmFtZUxpc3RcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZVMuZGVmYXVsdFBhcnNlV2ViID8gUGFyc2VTLmRlZmF1bHRQYXJzZVdlYihleHRyYS5wbGF5VXJsTGlzdFswXSwgdGltZW91dCwgZXh0cmEyKSA6IGV4dHJhLnBsYXlVcmxMaXN0WzBdO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgLy8gbG9nKGV4dHJhLnBsYXlVcmxMaXN0WzBdKTtcXG4gICAgICAgICAgICAgICAgICAgIC8vIGxvZyhleHRyYTIpO1xcblxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgLy8g5YWN5ZeF5ZCO5Y+q5pyJ5LiA5Liq57uT5p6cLOWXheaOouS8mOWFiOiHquWKqOaLvHg15ZKManNvbiwg6aG65bqP5LyY5YWI6Ieq5Yqo6L+U5Zue5LiA5Liq5pKt5pS+6ZO+5o6lXFxuICAgICAgICAgICAgICAgICAgICBpZihNeUppZXhpLmF1dG9Nb2RlID09PSAn5ZeF5o6i5LyY5YWIJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1cmxzID0gdmFsdWFibGUubWFwKGl0ID0+IGl0LnJldCk7Ly/lj5blh7rpk77mjqUs57yT5a2Y5YmN55qEXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5hbWVzID0gdmFsdWFibGUubWFwKGl0ID0+IGl0Lm5hbWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBoZWFkZXJzID0gZ2V0TXlIZWFkZXJzKHVybHMpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybHMgPSBnZXRNeVVybHModXJscyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMgPSBuYW1lcy5jb25jYXQoZXh0cmEubmFtZUxpc3QpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybHMgPSB1cmxzLmNvbmNhdChnZXRNeVBsYXlVcmxMaXN0KCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhlYWRlcnMgPSBoZWFkZXJzLmNvbmNhdChleHRyYS5uYW1lTGlzdC5tYXAoKGl0KT0+e3JldHVybiB7fX0pKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxzOiB1cmxzLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lczogbmFtZXMsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6aGVhZGVyc1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVhYmxlWzBdLnJldFxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfWVsc2V7IC8vIOe6r3ZpZGVvOi8v5YiG5pSvXFxuICAgICAgICAgICAgICAgIGlmIChleHRyYS5uYW1lTGlzdC5sZW5ndGggPCAxKSB7XFxuICAgICAgICAgICAgICAgICAgICBoaWRlTG9hZGluZygpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+iKreavlFHkuoYs5aSa5Lu75Yqh5YWN5ZeF6Kej5p6Q5YWo5Yab6KaG5rKh5bm25LiU5rKh5pyJ5Y+v55So55qEanNvbnx4Neino+aekOS6hidcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBsb2coXFxcIumtlOaWreWkmuS7u+WKoeWFjeWXheWksei0pSzlsJ3or5Vqc29ufHg1XFxcIik7XFxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICB1cmxzOiBnZXRNeVBsYXlVcmxMaXN0KCksXFxuICAgICAgICAgICAgICAgICAgICBuYW1lczogZXh0cmEubmFtZUxpc3RcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYoL15oaWtlcjp8XnRvYXN0OnxecnVsZTp8Xng1UnVsZTp8XndlYlJ1bGU6fF5zZWxlY3QvLnRlc3QodXJsKSl7XFxuICAgICAgICAgICAgcmV0dXJuIHVybDtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmKCF1cmwmJiEvXmh0dHAvLnRlc3QodmlwVXJsKSl7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+mtlOaWreino+aekOWksei0pT4nK3ZpcFVybFxcbiAgICAgICAgfVxcbiAgICAgICAgLy8gbG9nKHZpcFVybCsn5YWN5ZeF5o6i57uT5p6cOicrdXJsKTtcXG4gICAgICAgIGlmICgvXlxcXFwvLy50ZXN0KHVybCkpIHtcXG4gICAgICAgICAgICB1cmwgPSAnaHR0cHM6JyArIHVybFxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKC89aHR0cC8udGVzdCh1cmwpKSB7XFxuICAgICAgICAgICAgdXJsID0gLyZ1cmw9Ly50ZXN0KHVybCkgPyB1cmwgOiAnaHR0cCcgKyBkZWNvZGVVUklDb21wb25lbnQodXJsLnNwbGl0KCc9aHR0cCcpWzFdKTtcXG4gICAgICAgIH1cXG4gICAgICAgIC8qaWYodXJsLm1hdGNoKC9tZ3R2LmNvbS9nKT09J21ndHYuY29tJyl7XFxuICAgICAgICAgICAgdXJsID0gdXJsICsgJzt7UmVmZXJlckBodHRwczovL3d3dy5tZ3R2LmNvbX0nO1xcbiAgICAgICAgfSBlbHNlICovXFxuICAgICAgICBpZiAoL1xcXFwuZmx2Ly50ZXN0KHVybCkmJiEvVXNlci1BZ2VudC8udGVzdCh1cmwpKSB7XFxuICAgICAgICAgICAgdXJsID0gdXJsICsgJzt7VXNlci1BZ2VudEBhcHAmJlJlZmVyZXJAJyArIHZpcFVybCArICd9JztcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICh1cmwgPT09ICcnIHx8IHVybCA9PT0gdmlwVXJsKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHZpcFVybDtcXG4gICAgICAgIH0gZWxzZSBpZighLyNpc1ZpZGVvPXRydWUjLy50ZXN0KHVybCkpe1xcbiAgICAgICAgICAgIHJldHVybiB1cmwgKyAnI2lzVmlkZW89dHJ1ZSMnO1xcbiAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgcmV0dXJuIHVybFxcbiAgICAgICAgfVxcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBQYXJzZVNbc3RyXSA9PSAnc3RyaW5nJyYmUGFyc2VTW3N0cl0ubWF0Y2goL2h0dHAuKj89LykpIHtcXG4gICAgICAgIC8vIGxvZyhcXFwi5pat5o+S5byA5aeL6YCa55So5omn6KGM5YWN5ZeFIGRlZmF1bHRQYXJzZVdlYjpcXFwiK3RpbWVvdXQpO1xcbiAgICAgICAgLy9sb2coXFxcIum7mOiupHg1XFxcIitQYXJzZVMuZGVmYXVsdFBhcnNlV2ViKTtcXG4gICAgICAgIGlmKHdpdGhCYXRjaCl7IC8vIOmAn+W6puS8mOWFiFxcbiAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkoZXh0cmEucGxheVVybExpc3QpJiZleHRyYS5wbGF5VXJsTGlzdC5sZW5ndGg+MCl7XFxuICAgICAgICAgICAgICAgIGV4dHJhLnBsYXlVcmxMaXN0ID0gZXh0cmEucGxheVVybExpc3QuZmlsdGVyKGl0PT5pdCE9PShQYXJzZVNbc3RyXXx8c3RyKSArIHZpcFVybCk7XFxuICAgICAgICAgICAgICAgIGxldCBuYW1lTGlzdCA9IGV4dHJhLm5hbWVMaXN0O1xcbiAgICAgICAgICAgICAgICBuYW1lTGlzdC51bnNoaWZ0KHN0cik7XFxuICAgICAgICAgICAgICAgIGV4dHJhLm5hbWVMaXN0PXVuaXF1ZTIobmFtZUxpc3QpO1xcbiAgICAgICAgICAgICAgICBleHRyYS5wbGF5VXJsTGlzdCA9IHVuaXF1ZTIoZXh0cmEucGxheVVybExpc3QpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgIGV4dHJhID0ge31cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBQYXJzZVMuZGVmYXVsdFBhcnNlV2ViP1BhcnNlUy5kZWZhdWx0UGFyc2VXZWIoKFBhcnNlU1tzdHJdfHxzdHIpICsgdmlwVXJsLHRpbWVvdXQsZXh0cmEpOihQYXJzZVNbc3RyXXx8c3RyKSArIHZpcFVybDtcXG4gICAgfSBlbHNlIGlmKHR5cGVvZihzdHIpPT09J3N0cmluZycmJnN0ci5sZW5ndGg+MSYmKHR5cGVvZiBQYXJzZVNbc3RyXT09J3VuZGVmaW5lZCd8fCFQYXJzZVNbc3RyXSkmJiEvXmh0dHAvLnRlc3Qoc3RyKSl7XFxuICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6K+35YWI6L+b6KGM5pat5o+S6YWN572u56Gu5L+d6K+l6Kej5p6Q5a2Y5ZyoIVxcXFxu5qOA5rWL5Yiw5peg5pWI55qE6Kej5p6Q6YWN572uOicrc3RyO1xcbiAgICB9ZWxzZSB7XFxuICAgICAgICByZXR1cm4gUGFyc2VTLmRlZmF1bHRQYXJzZShzdHIgKyB2aXBVcmwsdGltZW91dCk7XFxuICAgIH1cXG59XFxuXFxudmFyIHBsYXlQYXJzZSA9IHtcXG4gICAgcGxheWVyX3h4OiBmdW5jdGlvbihqdXJsLCBMYWJlbCkge1xcbiAgICAgICAgcmV0dXJuICQoanVybCkubGF6eVJ1bGUoKGspID0+IHtcXG4gICAgICAgICAgICB2YXIganNVcmwgPSBKU09OLnBhcnNlKGZldGNoKGdldFZhcignb2xkQ29uZmlnJykpKS5jajtcXG4gICAgICAgICAgICB2YXIgTGFiZWwgPSBrO1xcbiAgICAgICAgICAgIHZhciBmYSA9IFsnbGV0dicsICdwcHR2JywgJ3FxJywgJ3lvdWt1JywgJ3FpeWknLCAnaXFpeWknLCAnbWd0dicsICdiaWxpYmlsaScsICdzb2h1JywgJ21pZ3UnLCAnbTE5MDUnLCAndmlwJ107XFxuICAgICAgICAgICAgdmFyIGh0bWwgPSBwYXJzZURvbShyZXF1ZXN0KGlucHV0KSwgTGFiZWwpO1xcbiAgICAgICAgICAgIGV2YWwoaHRtbC5yZXBsYWNlKC9wbGF5ZXJfLio/PXsvLCAncGRhdGE9eycpKTtcXG4gICAgICAgICAgICBldmFsKGZldGNoKGpzVXJsKSk7XFxuICAgICAgICAgICAgaWYgKHBkYXRhLnVybC5zdWJzdHIoMCwgOCkubWF0Y2goL0pULi5KVC4uLykpIHtcXG4gICAgICAgICAgICAgICAgcGRhdGEudXJsID0gYmFzZTY0RGVjb2RlKHBkYXRhLnVybCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChwZGF0YS51cmwuc3Vic3RyKDAsIDgpLm1hdGNoKC8lLi4lLi4vKSkge1xcbiAgICAgICAgICAgICAgICBwZGF0YS51cmwgPSB1bmVzY2FwZShwZGF0YS51cmwpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAoZmEuaW5jbHVkZXMocGRhdGEuZnJvbSkpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGF5dG1QYXJzZShwZGF0YS51cmwpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBwZGF0YS51cmwgKyAnI2lzVmlkZW89dHJ1ZSMnO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIExhYmVsKVxcbiAgICB9XFxufTtcXG5mdW5jdGlvbiBtelBvcHVwKCkge1xcbiAgICAvKlxcbiAgICBpZiAoZ2V0VmFyKFxcXCJpamstdHhcXFwiLCBcXFwiXFxcIikgPT0gXFxcIjFcXFwiKSB7XFxuICAgICAgICBzZXRJdGVtKFxcXCJ0aXhpbmdcXFwiLCBcXFwiMVxcXCIpXFxuICAgICAgICBjbGVhclZhcihcXFwiaWprLXR4XFxcIilcXG4gICAgfVxcbiAgICBpZiAoZ2V0SXRlbShcXFwidGl4aW5nXFxcIiwgXFxcIlxcXCIpID09IFxcXCJcXFwiKSB7XFxuICAgICAgICBjb25maXJtKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+WFjei0o+WjsOaYjicsXFxuICAgICAgICAgICAgY29udGVudDogJ+acrOeoi+W6j+S4jeaPkOS+m+inhumikeino+aekOacjeWKoVxcXFxu5omA5pyJ5YaF5a655Z2H5LuO55So5oi35YiG5Lqr5Lit5pS26ZuGXFxcXG7ku4XkvpvmtYvor5XlkozlrabkuaDkuqTmtYFcXFxcblxcXFxu56Gu5a6a5Y2z6K6k5Y+v77yM5LiN5YaN5o+Q6YaSJyxcXG4gICAgICAgICAgICBjb25maXJtOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0VmFyKFxcXCJpamstdHhcXFwiLCBcXFwiMVxcXCIpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/ngrnlh7vkuobnoa7orqRcXFwiXFxuXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pXFxuICAgIH1cXG4gICAgICovXFxufVxcbi8qXFxuaWYgKCFnZXRWYXIoXFxcInRpeGluZ1xcXCIpKSB7XFxuICAgIG16UG9wdXAoKTtcXG4gICAgcHV0VmFyKCd0aXhpbmcnLCdvaycpO1xcbn1cXG4qL1xcbmZ1bmN0aW9uIHNhdmVCdXR0b24oY29udGVudCxuYW1lKSB7XFxuICAgIG5hbWUgPSBuYW1lfHwnJztcXG4gICAgdmFyIGRhdGEgPSBjb250ZW50LnNwbGl0KCfimIXimIXimIUnKTtcXG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAyKSB7XFxuICAgICAgICB2YXIgX2R0ID0gcGFyc2VQYXN0ZShkYXRhWzBdKTtcXG4gICAgICAgIGNvbnRlbnQgPSBfZHQuc3Vic3RyKDAsIDYpICE9PSAnZXJyb3I6JyA/IF9kdCA6ICcnO1xcbiAgICB9XFxuICAgIGRhdGEgPSBjb250ZW50LnNwbGl0KCfimIUnKTtcXG4gICAgdmFyIHR5cGUgPSBkYXRhWzBdO1xcbiAgICB2YXIgYXJyTGlzdCA9IFtdO1xcbiAgICB2YXIgb2JqQ29kZSA9IHt9O1xcbiAgICBpZiAoZGF0YS5sZW5ndGggPiAyICYmIGRhdGFbMF0gIT09ICfnm7Tpk74nKSB7XFxuICAgICAgICB2YXIgb2JqS2V5ID0gZGF0YVsxXTtcXG4gICAgICAgIHZhciBvYmpWYWx1ZSA9IGRhdGFbMl07XFxuICAgICAgICBpZiAodHlwZSA9PT0gJ015UGFyc2VTJykge1xcbiAgICAgICAgICAgIG9ialZhbHVlID0gYmFzZTY0RGVjb2RlKG9ialZhbHVlKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChvYmpWYWx1ZS5zcGxpdCgnZnVuY3Rpb24nKS5sZW5ndGggPiAxKSB7XFxuICAgICAgICAgICAgZXZhbCgnb2JqVmFsdWU9JyArIG9ialZhbHVlKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGFyckxpc3Quc3BsaWNlKDAsIDAsIG9iaktleSk7IC8v5re75Yqg6aG555uu6Z2e5Yig6ZmkXFxuICAgICAgICBvYmpDb2RlW29iaktleV0gPSBvYmpWYWx1ZTtcXG5cXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAn55u06ZO+Jykge1xcbiAgICAgICAgYXJyTGlzdCA9IGRhdGE7XFxuICAgICAgICBhcnJMaXN0LnNwbGljZSgwLCAxKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGFyckxpc3QgPSBudWxsO1xcbiAgICB9XFxuICAgIGlmIChhcnJMaXN0ICE9IG51bGwpIHtcXG4gICAgICAgIHZhciBwYXJzZVJvdXRlID0gZ2V0VmFyKCdwYXJzZVJvdXRlJyk7XFxuICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIGZldGNoKHBhcnNlUm91dGUpKTtcXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbih2YWwpIHtcXG4gICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLmluZGV4T2YodmFsKTtcXG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xcbiAgICAgICAgICAgICAgICB0aGlzLnNwbGljZShpbmRleCwgMSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfTtcXG4gICAgICAgIGlmKG5hbWUpey8v5Yig6Zmk5ZCN56ew5YiX6KGo5ZKM5Luj56CBXFxuICAgICAgICAgICAganNvbi50aXRsZS5yZW1vdmUobmFtZSk7XFxuICAgICAgICAgICAgZGVsZXRlIGpzb24uY29kZXNbbmFtZV07XFxuICAgICAgICB9XFxuICAgICAgICBhcnJMaXN0ID0gYXJyTGlzdC5jb25jYXQoanNvbi50aXRsZSk7XFxuICAgICAgICBqc29uLnRpdGxlID0gQXJyYXkuZnJvbShuZXcgU2V0KGFyckxpc3QpKTtcXG4gICAgICAgIE9iamVjdC5hc3NpZ24oanNvbi5jb2Rlcywgb2JqQ29kZSk7XFxuICAgICAgICBpZiAodHlwZSA9PT0gJ+a1i+ivlScpIHtcXG4gICAgICAgICAgICBldmFsKCd2YXIgY29uZmlnID0nICsgZmV0Y2goZ2V0VmFyKCdvbGRDb25maWcnKSkpO1xcbiAgICAgICAgICAgIGV2YWwoZmV0Y2goY29uZmlnLmNqKSk7XFxuICAgICAgICAgICAgaWYgKHR5cGVvZiBQYXJzZVNbZGF0YVsxXV0gPT0gXFxcImZ1bmN0aW9uXFxcIikge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VTW2RhdGFbMV1dKGRhdGFbMl0pO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZVMuZGVmYXVsdFBhcnNlV2ViKFBhcnNlU1tkYXRhWzFdXSArIGRhdGFbMl0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgd3JpdGVGaWxlKHBhcnNlUm91dGUsICQuc3RyaW5naWZ5KGpzb24pKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5bey5L+d5a2Y5YaF5a65XFxcIjtcXG4gICAgICAgIH1cXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/ml6Dms5Xor4bliKvov5nkuKrlhoXlrrnlkaJcXFwiXFxuICAgIH1cXG59XFxuLy8g5Lul5LiL5Luj56CB5Y2D5LiH5LiN6KaB5pS+5Ye65p2l5ZCm5YiZ5oql6ZSZXFxuaWYgKGdldEl0ZW0oJ3VwZGF0ZURhdGUnKSAhPSB1cGRhdGVEYXRlKSB7XFxuLy8gaWYgKHRydWUpIHtcXG4gICAgLy8g5oqKZnVuY3Rpb27lj5jmiJBzdHJpbmdcXG4gICAgbGV0IGZ1bmN0aW9uQ29kZSA9IHNhdmVCdXR0b24gKyAnOycrbXpQb3B1cDtcXG4gICAgLy8gd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL2NhY2hlL3Bsc2NQYXJzZS5odG1sJywgZmV0Y2goX215U2V0LmNrTGluayArICdwbHNjUGFyc2UuaHRtbCcpKTtcXG4gICAgc2V0SXRlbSgnbXlGdW5jdGlvbicsIGZ1bmN0aW9uQ29kZSk7XFxuICAgIHNldEl0ZW0oJ3VwZGF0ZURhdGUnLCB1cGRhdGVEYXRlKTtcXG59XFxudmFyIGJqSXRlbSA9IHtcXG4gICAgaGZQbHVnaW46IGZ1bmN0aW9uKHBhcnNlUm91dGUpIHtcXG4gICAgICAgIHJldHVybiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChrKSA9PiB7XFxuICAgICAgICAgICAgaWYgKGZpbGVFeGlzdChrKSkge1xcbiAgICAgICAgICAgICAgICB2YXIgY2pjYWNoZSA9IGdldFZhcignY2pDYWNoZScpO1xcbiAgICAgICAgICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIGZldGNoKGspKTtcXG4gICAgICAgICAgICAgICAganNvbi5zZXR0aW5ncy5jaiA9IGNqY2FjaGU7XFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShrLCAkLnN0cmluZ2lmeShqc29uKSk7XFxuICAgICAgICAgICAgICAgIHZhciBvbGRSb3V0ZSA9IGdldFZhcignb2xkQ29uZmlnJyk7XFxuICAgICAgICAgICAgICAgIHZhciBvbGRDb25maWcgPSBqc29uLnNldHRpbmdzO1xcbiAgICAgICAgICAgICAgICBvbGRDb25maWcuY2ogPSBjamNhY2hlO1xcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUob2xkUm91dGUsICQuc3RyaW5naWZ5KG9sZENvbmZpZykpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mgaLlpI3miJDlip8nO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/pnIDopoHlhYjmi4nlj5bliJfooagnXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwgcGFyc2VSb3V0ZSlcXG4gICAgfSxcXG4gICAgcHVsbENvZGU6IGZ1bmN0aW9uKGspIHtcXG4gICAgICAgIHJldHVybiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChrKSA9PiB7XFxuICAgICAgICAgICAgdmFyIHB1bGxNb2RlID0ga1swXTtcXG4gICAgICAgICAgICB2YXIgcGFyc2VSb3V0ZSA9IGtbMV07XFxuICAgICAgICAgICAgdmFyIHBhcnNlRmlsZSA9IGZldGNoKHBhcnNlUm91dGUpO1xcbiAgICAgICAgICAgIGlmICghcGFyc2VGaWxlKSB7XFxuICAgICAgICAgICAgICAgIHZhciBzZXR0aW5ncyA9IGZldGNoKGdldFZhcignb2xkQ29uZmlnJykpO1xcbiAgICAgICAgICAgICAgICBzZXR0aW5ncyA9ICFzZXR0aW5ncyA/IHt9IDogSlNPTi5wYXJzZShzZXR0aW5ncyk7XFxuICAgICAgICAgICAgICAgIHZhciBqc29uID0ge307XFxuICAgICAgICAgICAgICAgIGpzb24uc2V0dGluZ3MgPSBzZXR0aW5ncztcXG4gICAgICAgICAgICAgICAganNvbi50aXRsZSA9IFtdO1xcbiAgICAgICAgICAgICAgICBqc29uLmNvZGVzID0ge307XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBwYXJzZUZpbGUpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB2YXIgcGFyc2VUaXRsZSA9IFtdO1xcbiAgICAgICAgICAgIHZhciBwYXJzZUNvZGU9e307XFxuICAgICAgICAgICAgdmFyIGNqTGluayA9IGdldFZhcigncGx1Z2luTGluaycpO1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIGlmKC9AYmFzZTY0OlxcXFwvXFxcXC8vLnRlc3QoY2pMaW5rKSl7XFxuICAgICAgICAgICAgICAgICAgICBldmFsKGJhc2U2NERlY29kZShjakxpbmsuc3BsaXQoJ0BiYXNlNjQ6Ly8nKVsxXSkpO1xcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZigv5o+S5Lu25ZCNLy50ZXN0KGNqTGluaykpe1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlYWxMaW5rID0gY2pMaW5rLnNwbGl0KCfmj5Lku7blkI0nKVswXS5yZXBsYWNlKC9bXFxcXHNdL2csJycpO1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKCfop6PmnpDkupHliarliIfmnb86JytyZWFsTGluayk7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgeVBhc3RlID0gcGFyc2VQYXN0ZShyZWFsTGluayk7XFxuICAgICAgICAgICAgICAgICAgICBpZigvQGJhc2U2NDpcXFxcL1xcXFwvLy50ZXN0KHlQYXN0ZSkpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoYmFzZTY0RGVjb2RlKHlQYXN0ZS5zcGxpdCgnQGJhc2U2NDovLycpWzFdKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBQYXJzZVM9PT0ndW5kZWZpbmVkJyl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5ouJ5Y+W5Liq6bih5q+b5o+S5Lu2LOmHjOmdoui/nlBhcnNlU+WvueixoemDveayoeaciSEnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9Y2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+m4oeavm+aPkuS7tuaJp+ihjOaKpemUmTpcXFxcbicrZS5tZXNzYWdlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mnKrog73or4bliKvkupHliarliIfmnb/kuK3nmoTlhoXlrrk6XFxcXG4nK3lQYXN0ZS5zdWJzdHJpbmcoMCwxMDApO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNqTGluayA9PT0gJ1HnpZ4nKSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgamlleGkgPSBmZXRjaCgnaGlrZXI6Ly9maWxlcy9qaWV4aS9qaWV4aS50eHQnKS5zcGxpdCgnXFxcXG4nKTtcXG4gICAgICAgICAgICAgICAgICAgIGZvciAoaSBpbiBqaWV4aSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZT1qaWV4aVtpXS5zcGxpdCgnJiYnKVswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZT1qaWV4aVtpXS5zcGxpdCgnJiYnKVsxXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlLnB1c2godGl0bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29kZVt0aXRsZV09Y29kZTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAvLyB9ZWxzZSBpZigvXiNbYS16QS1aMC05XXsyLDEwfSQvLnRlc3QoY2pMaW5rKSl7Ly/npo/liKnlj6Pku6Qy5YiwMTDkvY1cXG4gICAgICAgICAgICAgICAgZWxzZSBpZigvXiNbXFxcXFNdezIsMTB9JC8udGVzdChjakxpbmspKXsvL+emj+WIqeWPo+S7pDLliLAxMOS9jeS7u+aEj+mdnuepuuWtl+espuS4slxcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qge3Rhc2tDYWxsLCB0YXNrUnVuLHRhc2tSZXF9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdGFza0NhbGw/cnVsZT3pgZPplb/ku5PlupNQcm9cXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIC8vIGxvZygn5byA5aeL5omn6KGM5Lu75Yqh5LuT5bqT6I635Y+W5pat5b+15o+S5Lu256aP5Yip5Y+j5LukJyk7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gdGFza0NhbGwoMTcsJ0RuRnVsaScsW2NqTGlua10pO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmV0ID0gSlNPTi5wYXJzZShyZXN1bHQucmVzdWx0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2cocmV0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXQub3B0PT09J2Vycm9yJyl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly8nK3JldC5tc2c7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYocmV0Lm9wdD09PSd1cmwnKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGh0bWwgPSBmZXRjaChyZXQucmV0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFyciA9IGh0bWwuaW5jbHVkZXMoJ2h0dHAnKT8gaHRtbDpiYXNlNjREZWNvZGUoaHRtbCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBqaWV4aSA9IGFyci5tYXRjaCgvW1xcXFxTXSo/LC4qP1tcXFxcc10vZyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgaW4gamlleGkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZT1qaWV4aVtpXS5zcGxpdCgnLCcpWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGU9amlleGlbaV0uc3BsaXQoJywnKVsxXS5zcGxpdChcXFwiXFxcXG5cXFwiKVswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCEvXmh0dHB8ZnVuY3Rpb24vLnRlc3QoY29kZSkmJmNvZGUubGVuZ3RoPjIwKXsvL2Jhc2U2NOe8lueggeeahOWHveaVsFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBiYXNlNjREZWNvZGUoY29kZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlLnB1c2godGl0bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb2RlW3RpdGxlXT0vZnVuY3Rpb24vLnRlc3QoY29kZSk/ZXZhbChjb2RlKTpjb2RlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYocmV0Lm9wdD09PSdqeCcpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigvW1xcXFxTXSo/LGh0dHBbXFxcXFNdLy50ZXN0KHJldC5yZXQpKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IHJldC5yZXQuc3BsaXQoJywnKVswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlID0gcmV0LnJldC5zcGxpdCgnLCcpWzFdLnNwbGl0KCdcXFxcbicpWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZS5wdXNoKHRpdGxlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29kZVt0aXRsZV09Y29kZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYoL15odHRwLy50ZXN0KHJldC5yZXQpKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IGNqTGluay5zcGxpdCgnIycpWzFdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSByZXQucmV0LnNwbGl0KCdcXFxcbicpWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZS5wdXNoKHRpdGxlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29kZVt0aXRsZV09Y29kZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pyq55+l55qE56aP5YipOlxcXFxuJytyZXQucmV0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYocmV0Lm9wdD09PSd2aXBKeCcpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBjakxpbmsuc3BsaXQoJyMnKVsxXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSByZXQucmV0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2coY29kZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGUucHVzaCh0aXRsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29kZVt0aXRsZV09L2Z1bmN0aW9uLy50ZXN0KGNvZGUpP2V2YWwoY29kZSk6Y29kZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5LuT5bqT6Z2e5pyA5paw54mI5oiW6ICF56aP5Yip56S+5Yqf6IO95byA5Y+R5LitJ1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZihjakxpbms9PT0n5pat5o+SJyl7XFxuICAgICAgICAgICAgICAgICAgICBldmFsKGZldGNoKFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzXFxcIikpO1xcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZT1PYmplY3Qua2V5cyhQYXJzZVMpO1xcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZigvXmhpa2VyOlxcXFwvXFxcXC98XmZpbGU6XFxcXC9cXFxcL3xeaHR0cHxeXFxcXC9zdG9yYWdlXFxcXC98XlxcXFwvc2RjYXJkXFxcXC8vLnRlc3QoY2pMaW5rKSl7XFxuICAgICAgICAgICAgICAgICAgICBpZigvXlxcXFwvc3RvcmFnZVxcXFwvfF5cXFxcL3NkY2FyZFxcXFwvLy50ZXN0KGNqTGluaykpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNqTGluayA9ICdmaWxlOi8vJytjakxpbms7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBldmFsKGZldGNoKGNqTGluaykpO1xcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZT1PYmplY3Qua2V5cyhQYXJzZVMpO1xcbiAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mi4nlj5blj6Pku6TmnInor68nXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgIGxvZyhlLm1lc3NhZ2UpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB2YXIganhKdWRnZSA9IHR5cGVvZiBQYXJzZVMgPT0gJ29iamVjdCc7XFxuICAgICAgICAgICAgdmFyIGxiSnVkZ2UgPSB0eXBlb2YocGFyc2VUaXRsZSkgPT0gJ29iamVjdCc7XFxuICAgICAgICAgICAgaWYgKGp4SnVkZ2UgfHwgbGJKdWRnZSkge1xcbiAgICAgICAgICAgICAgICAvLyBpZiAocHVsbE1vZGUgPT09ICfliJfooagnKSB7XFxuICAgICAgICAgICAgICAgIC8vICAgICBpZiAoIWxiSnVkZ2UpIHtcXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBwYXJzZVRpdGxlID0gT2JqZWN0LmtleXMoUGFyc2VTKTtcXG4gICAgICAgICAgICAgICAgLy8gICAgIH1cXG4gICAgICAgICAgICAgICAgLy8gICAgIHZhciBuZXdQYXJzZVRpdGxlID0ganNvbi50aXRsZS5jb25jYXQocGFyc2VUaXRsZSk7XFxuICAgICAgICAgICAgICAgIC8vICAgICBqc29uLnRpdGxlID0gQXJyYXkuZnJvbShuZXcgU2V0KG5ld1BhcnNlVGl0bGUpKTtcXG4gICAgICAgICAgICAgICAgLy8gfVxcbiAgICAgICAgICAgICAgICAvLyDkuI3nrqHmi4nlj5bku6PnoIHov5jmmK/liJfooajpg73opoHmiorliJfooajmi4nkuoZcXG4gICAgICAgICAgICAgICAgaWYgKCFsYkp1ZGdlKSB7XFxuICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlID0gT2JqZWN0LmtleXMoUGFyc2VTKTtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhwYXJzZVRpdGxlKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB2YXIgc2NPYmplY3QgPSBbXFxcIkNpdHlJUFxcXCIsIFxcXCJwY1VBXFxcIiwgXFxcImNhY2hlTTN1OFxcXCIsXFxcImlzVmlkZW9cXFwiLFxcXCJ0aW1lT3V0XFxcIixcXFwi5rqQ56CB5Yy56YWNXFxcIiwgXFxcImRlZmF1bHRQYXJzZVxcXCIsXFxcImRlZmF1bHRQYXJzZVdlYlxcXCIsXFxcIm1hb3NzXFxcIiwgXFxcIkxMUVxcXCIsXFxcInBhcnNlTGNcXFwiXTtcXG4gICAgICAgICAgICAgICAgcGFyc2VUaXRsZSA9IHBhcnNlVGl0bGU/cGFyc2VUaXRsZS5maWx0ZXIoaXQ9PiFzY09iamVjdC5pbmNsdWRlcyhpdCkpOltdO1xcbiAgICAgICAgICAgICAgICB2YXIgbmV3UGFyc2VUaXRsZSA9IGpzb24udGl0bGUuY29uY2F0KHBhcnNlVGl0bGUpO1xcbiAgICAgICAgICAgICAgICBqc29uLnRpdGxlID0gQXJyYXkuZnJvbShuZXcgU2V0KG5ld1BhcnNlVGl0bGUpKTtcXG5cXG4gICAgICAgICAgICAgICAgaWYgKHB1bGxNb2RlID09PSAn5Luj56CBJykge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcmlnaW5hbFBhcnNlUyA9PSAnb2JqZWN0Jykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgaW4gc2NPYmplY3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG9yaWdpbmFsUGFyc2VTW3NjT2JqZWN0W2ldXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3JpZ2luYWxQYXJzZVMgPW9yaWdpbmFsUGFyc2VTLmZpbHRlcihpdD0+IXNjT2JqZWN0LmluY2x1ZGVzKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KVswXSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oanNvbi5jb2Rlcywgb3JpZ2luYWxQYXJzZVMpO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YoUGFyc2VTKT09XFxcInVuZGVmaW5lZFxcXCIpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGpzb24uY29kZXMsIHBhcnNlQ29kZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcmV0dXJuIFxcXCJ0b2FzdDovL+ayoeacieS7o+egge+8jOS4jeWPr+aLieWPllxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihqc29uLmNvZGVzLCBQYXJzZVMpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAvL3ZhciBuZXdGaWxlID0gdG9vbHMudG9KU09OKGpzb24pOy8v6Ieq5a6a5LmJc3RyaW5naWZ55Ye95pWw77yM5bim5pyJ6L2s5LmJ5a2X56ymXFxuICAgICAgICAgICAgICAgIHZhciBuZXdGaWxlID0gJC5zdHJpbmdpZnkoanNvbik7IC8vSlNPTi5wYXJzZeS8muaKpemUmVxcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUocGFyc2VSb3V0ZSwgbmV3RmlsZSk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aLieWPlicgKyBwdWxsTW9kZSArICfmiJDlip8nO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mnKrojrflj5bliLDlr7nosaEnO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIFtrLCBfbXlTZXQucGFyc2VSb3V0ZV0pXFxuICAgIH0sXFxuICAgIHB1bGxTY3JpcHQ6IGZ1bmN0aW9uKGNqLCB4NSkge1xcbiAgICAgICAgcmV0dXJuICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGspID0+IHtcXG4gICAgICAgICAgICB2YXIgY2pGcm9tID0gJ2hpa2VyOi8vcGFnZS9QYXJzZV9Ebi5qcz9ydWxlPU15RmllbGThtLDigb8nO1xcbiAgICAgICAgICAgIHZhciB4NUZyb20gPSAnaGlrZXI6Ly9wYWdlL1BhcnNlX0RuLmh0bWw/cnVsZT1NeUZpZWxk4bSw4oG/JztcXG4gICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICB2YXIgY2pGaWxlID0gSlNPTi5wYXJzZShmZXRjaChjakZyb20pKS5ydWxlO1xcbiAgICAgICAgICAgICAgICB2YXIgeDVGaWxlID0gSlNPTi5wYXJzZShmZXRjaCh4NUZyb20pKS5ydWxlO1xcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoa1swXSwgY2pGaWxlKTtcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKGtbMV0sIHg1RmlsZSk7XFxuICAgICAgICAgICAgICAgIGNsZWFyVmFyKCdqeE9sZFYnKTtcXG4gICAgICAgICAgICAgICAgY2xlYXJWYXIoJ2p4TmV3VicpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mi4nlj5bmiJDlip8nO1xcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+acquaIkOWKn+iOt+WPluWGheWuuSc7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwgW2NqLCB4NV0pXFxuICAgIH0sXFxuICAgIHhsU2VsZWN0OiBmdW5jdGlvbihiaWFuamksIGxiTGVuZ3RoKSB7XFxuICAgICAgICByZXR1cm4gXFxcInNlbGVjdDovL1xcXCIgKyBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgb3B0aW9uczogWyfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFwiY29sb3I6cmVkXFxcIiB0aXRsZT1cXFwi5Yig6ZmkfHwnICsgYmlhbmppICsgJ1xcXCI+5YigIOmZpCcsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFwiY29sb3I6I0Y1NzQ3NFxcXCIgdGl0bGU9XFxcIumakOiXj3x8JyArIGJpYW5qaSArICdcXFwiPumakCDol48nLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcImNvbG9yOiNGRjgwMDBcXFwiIHRpdGxlPVxcXCLkv67mlLl8fCcgKyBiaWFuamkgKyAnXFxcIj7kv64g5pS5JywgJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXCJjb2xvcjojMDk4QUMxXFxcIiB0aXRsZT1cXFwi572u6aG2fHwnICsgYmlhbmppICsgJzAnICsgJ1xcXCI+572uIOmhticsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFwiY29sb3I6IzA5OEFDMVxcXCIgdGl0bGU9XFxcIuenu+WKqHx8JyArIGJpYW5qaSArICdcXFwiPuenuyDliqgnLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcImNvbG9yOiMwOThBQzFcXFwiIHRpdGxlPVxcXCLnva7lupV8fCcgKyBiaWFuamkgKyBsYkxlbmd0aCArICdcXFwiPue9riDlupUnLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcImNvbG9yOiMwNEI0MzFcXFwiIHRpdGxlPVxcXCLliIbkuqt8fCcgKyBiaWFuamkgKyAnXFxcIj7lnLDmnb/liIbkuqsnLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcImNvbG9yOiMwNEI0MzFcXFwiIHRpdGxlPVxcXCLkupHliIbkuqt8fCcgKyBiaWFuamkgKyAnXFxcIj7kupHmnb/liIbkuqsnXSxcXG4gICAgICAgICAgICBjb2w6ICcyJyxcXG4gICAgICAgICAgICBqczogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgIHZhciBwYXJzZVJvdXRlID0gZ2V0VmFyKCdwYXJzZVJvdXRlJyk7XFxuICAgICAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcbiAgICAgICAgICAgICAgICB2YXIgbmV3SW5wdXQgPSBwYXJzZURvbUZvckh0bWwoaW5wdXQsICdzcGFuJiZ0aXRsZScpLnNwbGl0KCd8fCcpO1xcbiAgICAgICAgICAgICAgICAvLyDkv67mlLks6L+q6L+qLDAgICDmk43kvZznsbvlnoss5ZCN56ewLOe0ouW8lVxcbiAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IG5ld0lucHV0WzBdO1xcbiAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IG5ld0lucHV0WzFdO1xcbiAgICAgICAgICAgICAgICB2YXIgbnVtID0gbmV3SW5wdXRbMl07XFxuICAgICAgICAgICAgICAgIHZhciBudW0yID0gbmV3SW5wdXRbM107XFxuICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwi5Yig6ZmkXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgayA9IFtuYW1lLCBudW1dO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOaAu+aEn+inieetm+mAieaIluiAheaQnOe0ouWQju+8jOeUseS6jm51beeahOS9jee9ruS4jeWvueWPr+iDveS8muWIoOmZpOmUmSzkuovlrp7lpoLmraQs5bey5L+uP1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCLljbPlsIbliKDpmaQ6IFxcXCIgKyBuYW1lKS5jb25maXJtKChrKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0ga1swXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bSA9IGtbMV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZVJvdXRlID0gZ2V0VmFyKCdwYXJzZVJvdXRlJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5jb2Rlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGpzb24uY29kZXNbbmFtZV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtID0ganNvbi50aXRsZS5pbmRleE9mKG5hbWUpOyAvL+i/meagt+aJjeS8muW+l+WIsOato+ehrueahOe0ouW8lVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLnRpdGxlLnNwbGljZShudW0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUocGFyc2VSb3V0ZSwgJC5zdHJpbmdpZnkoanNvbikpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lt7LlsIbjgJZcXFwiICsgbmFtZSArIFxcXCLjgJfliKDpmaRcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGspO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwi6ZqQ6JePXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiaGlrZXI6Ly9lbXB0eSNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKGspID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBrWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtID0ga1sxXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlUm91dGUgPSBnZXRWYXIoJ3BhcnNlUm91dGUnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBmZXRjaChwYXJzZVJvdXRlKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLmNvZGVzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW0gPSBqc29uLnRpdGxlLmluZGV4T2YobmFtZSk7IC8v6L+Z5qC35omN5Lya5b6X5Yiw5q2j56Gu55qE57Si5byVXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLnRpdGxlLnNwbGljZShudW0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKHBhcnNlUm91dGUsICQuc3RyaW5naWZ5KGpzb24pKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lt7LlsIbjgJZcXFwiICsgbmFtZSArIFxcXCLjgJfpmpDol49cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WPr+iDveaYr+S4que9keWdgCwg5oKo5Y+v6YCJ5oup5Yig6ZmkXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIFtuYW1lLCBudW1dKTtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcIuS/ruaUuVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9pZiAoanNvbi5jb2Rlc1tuYW1lXSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuQ29kZSA9IG5hbWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlcyA9IGpzb24udGl0bGU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5OYW1lID0gXFxcIui/meaYr+WQjeensFxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24uY29kZXNbbmFtZV0pIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbkNvZGUgPSBqc29uLmNvZGVzW25hbWVdLnRvU3RyaW5nKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5OYW1lID0gbmFtZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcImhpa2VyOi8vZW1wdHkjbm9SZWNvcmRIaXN0b3J5I1xcXCIpLnJ1bGUoKGssdGl0bGVzKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkID0gW107XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoZ2V0SXRlbSgnbXlGdW5jdGlvbicpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBrWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZSA9IGtbMV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+S/nSDlrZgnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBzYXZlQnV0dG9uICsgXFxcInNhdmVCdXR0b24oZ2V0VmFyKCdpbnB1dF9lZGl0JyksbmFtZSk7YmFjaygpO1xcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLlu7rorq7mjInpu5jorqTnmoTku6PnoIHmoLzlvI/kv67mlLnlk6ZcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogXFxcInB1dFZhcignaW5wdXRfZWRpdCcsIGlucHV0KVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXFxcInRleHRhcmVhXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IFxcXCItMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiB0cnVlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiAn5L+u5pS54piFJyArIG5hbWUgKyAn4piFJyArIGNvZGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfigJjigJjigJnigJk8c21hbGw+PHNwYW4gc3R5bGU9XFxcImNvbG9yOiM2RUI4OTdcXFwiPuagvOW8j+S4uu+8muaTjeS9nOexu+Wei+KYheagh+mimOKYhWZ1bmN0aW9uKCl76Ieq5a6a5LmJ5YaF5a65fTxicj7or7fli7/loavlhaXlhbbku5bmoLzlvI8nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChzYXZlQnV0dG9uLG5hbWUsdGl0bGVzKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRtcEFyID0gZ2V0VmFyKCdpbnB1dF9lZGl0Jykuc3BsaXQoJ+KYhScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRtcEFyLmxlbmd0aDwyKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S/ruaUueagvOW8j+acieivr++8jOiuv+mXruiiq+aLkue7nSdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld05hbWUgPSB0bXBBclsxXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihuZXdOYW1lIT09bmFtZSYmdGl0bGVzLmluY2x1ZGVzKG5ld05hbWUpKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJ+ajgOa1i+WIsOWQjOWQjeaOpeWPozonK25ld05hbWUrJyzmmK/lkKbopobnm5Y/JykuY29uZmlybSgoc2F2ZUJ1dHRvbixuYW1lKT0+e1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSBzYXZlQnV0dG9uKGdldFZhcignaW5wdXRfZWRpdCcpLG5hbWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFjaygpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suS/neWtmOS/ruaUuVxcXFxu6K+36Ieq6KGM5qOA5rWL6KaG55uW5ZCO55qE5YaF5a65JztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxzYXZlQnV0dG9uLG5hbWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZSA9IHNhdmVCdXR0b24oZ2V0VmFyKCdpbnB1dF9lZGl0JyksbmFtZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2soKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suS/neWtmOS/ruaUuSc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmKHR5cGVvZihjb2RlKT09PSdzdHJpbmcnJiZjb2RlLmxlbmd0aD4yKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgcmV0dXJuIGNvZGVcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgcmV0dXJuICd0b2FzdDovL+W3suS/neWtmOS/ruaUuSc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgc2F2ZUJ1dHRvbixuYW1lLHRpdGxlcyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiAn4oCY4oCY4oCZ4oCZPGJpZz48YmlnPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjojMjk4QTA4XFxcIj7kv50g5a2YJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBbbk5hbWUsIG5Db2RlXSx0aXRsZXMpIC8vW25hbWUsIGpzb24uY29kZXNbbmFtZV0udG9TdHJpbmcoKV0pXFxuICAgICAgICAgICAgICAgICAgICAvKn0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WPquaciee9keWdgOaIluiAheagh+mimCwg5LiN5pSv5oyB5L+u5pS5XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfSovXFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCLnva7pobZcXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwi572u5bqVXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIGZldGNoKHBhcnNlUm91dGUpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBudW0gPSBqc29uLnRpdGxlLmluZGV4T2YobmFtZSk7IC8v6L+Z5qC35omN5Lya5b6X5Yiw5q2j56Gu55qE57Si5byVXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYobnVtPi0xKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBqc29uLnRpdGxlLnNwbGljZShudW0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLnRpdGxlLnNwbGljZShudW0yLCAwLCBpdGVtWzBdKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKHBhcnNlUm91dGUsICQuc3RyaW5naWZ5KGpzb24pKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5rKh5om+5YiwOicrbmFtZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCLnp7vliqhcXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKCdoaWtlcjovL2VtcHR5I25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ2JpYW5qaScsICfnp7vliqgjJyArIGspO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dDtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBudW0pO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwi5YiG5LqrXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcIuS6keWIhuS6q1xcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24uY29kZXNbbmFtZV0pIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlVGV4dCA9IHR5cGVvZiBqc29uLmNvZGVzW25hbWVdID09ICdmdW5jdGlvbicgPyAkLnN0cmluZ2lmeShqc29uLmNvZGVzW25hbWVdKSA6IGpzb24uY29kZXNbbmFtZV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVGV4dCA9ICdNeVBhcnNlU+KYhScgKyBuYW1lICsgJ+KYhScgKyBiYXNlNjRFbmNvZGUocGFyc2VUZXh0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyc2VUZXh0ID0gJ+ebtOmTvuKYhScgKyBqc29uLnRpdGxlW251bV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09ICfkupHliIbkuqsnICYmIHBhcnNlVGV4dC5zdWJzdHIoMCwgOCkgPT0gJ015UGFyc2VTJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRleHQgPSBzaGFyZVBhc3RlKHBhcnNlVGV4dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVRleHQuc3Vic3RyKDAsIDYpICE9ICdlcnJvcjonID8gJ2NvcHk6Ly8nICsgcGFyc2VUZXh0ICsgJ1xcXFxu4piF4piF4piFXFxcXG4nICsgJ015UGFyc2VT77yaJyArIG5hbWUgOiAndG9hc3Q6Ly/liIbkuqvlpLHotKUhIeS6keWJqui0tOadv+WPr+iDveaMguS6hic7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdjb3B5Oi8vJyArIHBhcnNlVGV4dDtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mmoLkuI3mlK/mjIEnO1xcbiAgICAgICAgICAgICAgICB9IC8vc3dpdGNo55qEXFxuICAgICAgICAgICAgfSkgLy9TdHJpbmfnmoRcXG4gICAgICAgIH0pIC8vc3RyaW5naWZ555qEXFxuICAgIH0sXFxuICAgIHhqUGFyc2U6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgcmV0dXJuICQoXFxcImhpa2VyOi8vZW1wdHkjbm9IaXN0b3J5I1xcXCIpLnJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgIHZhciBkID0gW107XFxuICAgICAgICAgICAgZXZhbChnZXRJdGVtKCdteUZ1bmN0aW9uJykpO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn5L+dIOWtmCcsXFxuICAgICAgICAgICAgICAgIHVybDogc2F2ZUJ1dHRvbiArIFxcXCJzYXZlQnV0dG9uKGlucHV0KTtiYWNrKCk7Y2xlYXJWYXIoJ2lucHV0X2FkZCcpXFxcIixcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLovpPlhaXmraPnoa7moLzlvI/lhoXlrrlcXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6ICdwdXRWYXIoXFxcImlucHV0X2FkZFxcXCIsIGlucHV0KScsXFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcXFwidGV4dGFyZWFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcXFwiLTFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiB0cnVlLFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGVWaXNpYmxlOiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0VmFyKCdpbnB1dF9hZGQnKSxcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPHNtYWxsPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjojNkVCODk3XFxcIj7mjInmj4/ov7Dor4nmoLzlvI/ovpPlhaUsIOivt+WLv+Whq+WFpeWFtuS7luagvOW8jzxicj7mnKzlnLDlj6Pku6Q6IOaTjeS9nOexu+Wei+KYheWQjeensOKYheS7o+eggTxicj7kupHlj6Pku6Q6IOmTvuaOpeKYheKYheKYheWQjeensDsg57qv572R5Z2AOiDnm7Tpk77imIV1cmwx4piFdXJsMicsXFxuICAgICAgICAgICAgICAgIGRlc2M6ICfigJjigJjigJnigJk8YmlnPjxiaWc+PHNwYW4gc3R5bGU9XFxcImNvbG9yOiMyOThBMDhcXFwiPuS/nSDlrZgnLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoJ25vTG9hZGluZycpLmxhenlSdWxlKChzYXZlQnV0dG9uKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2F2ZUJ1dHRvbihnZXRWYXIoJ2lucHV0X2FkZCcpKTtcXG4gICAgICAgICAgICAgICAgfSwgc2F2ZUJ1dHRvbiksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgICAgICB9KVxcbiAgICB9LFxcbiAgICB5ZFBhcnNlOiBmdW5jdGlvbihCSm1vZGUsIGkpIHtcXG4gICAgICAgIHJldHVybiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChrKSA9PiB7XFxuICAgICAgICAgICAgdmFyIEEgPSBrWzBdLnNwbGl0KCcjJylbMV07XFxuICAgICAgICAgICAgdmFyIEIgPSBrWzFdO1xcbiAgICAgICAgICAgIHZhciBwYXJzZVJvdXRlID0gZ2V0VmFyKCdwYXJzZVJvdXRlJyk7XFxuICAgICAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBmZXRjaChwYXJzZVJvdXRlKSk7XFxuICAgICAgICAgICAgdmFyIGl0ZW0gPSBqc29uLnRpdGxlLnNwbGljZShBLCAxKTsgLy8gMTog5qCH6K6w5byA5aeL5L2N572u77yMMjog5Yig6Zmk5Yiw5ZOq5Liq5L2N572uXFxuICAgICAgICAgICAganNvbi50aXRsZS5zcGxpY2UoQiwgMCwgaXRlbVswXSk7IC8vIDE6IOWQjOS4iu+8jDI6IDDooajnpLrkuI3liKDpmaTvvIwzOiDmt7vliqDlr7nosaFcXG4gICAgICAgICAgICB3cml0ZUZpbGUocGFyc2VSb3V0ZSwgJC5zdHJpbmdpZnkoanNvbikpO1xcbiAgICAgICAgICAgIGNsZWFyVmFyKCdiaWFuamknKTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgIH0sIFtCSm1vZGUsIGldKVxcbiAgICB9LFxcbiAgICBwbHNjUGFyc2U6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgcmV0dXJuICQoJ2hpa2VyOi8vZW1wdHkjbm9SZWNvcmRIaXN0b3J5IycpLnJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgIHZhciBkID0gW107XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfmibnph4/kv67mlLkv5Yig6Zmk6Kej5p6QJyxcXG4gICAgICAgICAgICAgICAgZGVzYzogJ2F1dG8mJmZsb2F0JyxcXG4gICAgICAgICAgICAgICAgLy8gdXJsOiAnZmlsZTovLy9zdG9yYWdlL2VtdWxhdGVkLzAvQW5kcm9pZC9kYXRhL2NvbS5leGFtcGxlLmhpa2Vydmlldy9maWxlcy9Eb2N1bWVudHMvY2FjaGUvcGxzY1BhcnNlLmh0bWwnLFxcbiAgICAgICAgICAgICAgICB1cmw6IF9teVNldC5iYXRjaFJvdXRlLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3g1X3dlYnZpZXdfc2luZ2xlJ1xcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgc2V0UmVzdWx0KGQpO1xcbiAgICAgICAgfSlcXG4gICAgfVxcbn07XFxuXFxuZnVuY3Rpb24gc2V0UGFyc2UoKSB7XFxuICAgICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL1JvdXRlP3J1bGU9TXlGaWVsZOG0sOKBv1xcXCIpLnNldFBhcnNlKCk7XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6LCD55So6Lev55SxXCIsXCJwYXRoXCI6XCJSb3V0ZVwiLFwicnVsZVwiOlwianM6XFxuY29uc3QgZCA9IFtdO1xcbmNvbnN0IGRhdGEgPSB7fTtcXG5cXG5kYXRhLm9sZENvbmZpZyA9IFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015UGFyc2VTZXQuanNvblxcXCI7XFxuZGF0YS5jalJvdXRlID0gXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanNcXFwiO1xcbmRhdGEueDVSb3V0ZSA9XFxuZ2V0UGF0aCgnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5odG1sJyk7XFxuXFxuZGF0YS5qeExhenkgPSBcXFwiZXZhbCgndmFyIGNvbmZpZyA9JyArIGZldGNoKCdcXFwiICsgZGF0YS5vbGRDb25maWcgKyBcXFwiJykpO2V2YWwoZmV0Y2goY29uZmlnLmNqKSk7YXl0bVBhcnNlKGlucHV0KVxcXCI7XFxuXFxuZGF0YS5zelBhcnNlID0gXFxcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3orr7nva4jbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcIjtcXG5cXG5kYXRhLnNldFBhcnNlID0gZnVuY3Rpb24oKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBkZXNjOiAnNzk1JyxcXG4gICAgICAgIHVybDogdGhpcy54NVJvdXRlLFxcbiAgICAgICAgY29sX3R5cGU6ICd4NV93ZWJ2aWV3X3NpbmdsZSdcXG4gICAgfSk7XFxuICAgIHZhciBvbGRWID0gZ2V0VmFyKCdqeE9sZFYnKTtcXG4gICAgdmFyIG5ld1YgPSBnZXRWYXIoJ2p4TmV3VicpO1xcbiAgICB2YXIgdmVyc2lvblRpcHMgPSBwYXJzZUZsb2F0KG5ld1YpID4gcGFyc2VGbG9hdChvbGRWKSA/ICfigJjigJjmnInmlrDniYjmnKw6IHYnICsgbmV3ViA6ICfigJjigJgnO1xcbiAgICB2YXIgcGljcyA9IFtcXG4gICAgICAgICdodHRwczovL2Nkbi5zZW92eC5jb20vaW1nL3Nlb3Z4LTIwLTEwJTIwKDkyKS5qcGcnLFxcbiAgICAgICAgJ2h0dHBzOi8vY2RuLnNlb3Z4LmNvbS9pbWcvbW9tMjAxOCUyMCgyMDcpLmpwZycsXFxuICAgICAgICAnaHR0cHM6Ly90dmE0LnNpbmFpbWcuY24vbGFyZ2UvOWJkOWIxNjdneTFmd3JoNXhvbHRkajIxaGMwdTB0YXguanBnJyxcXG4gICAgICAgICdodHRwczovL3R2YTEuc2luYWltZy5jbi9sYXJnZS8wMDVCWXFwZ2d5MWZ3cmV5dTRubDZqMzFoYzB1MGFoci5qcGcnLFxcbiAgICAgICAgJ2h0dHBzOi8vczMuYm1wLm92aC9pbWdzLzIwMjEvMTAvZDdlNjBiOTkwNzQyMDkzZC5qcGVnJyxcXG4gICAgICAgICdodHRwczovL3MzLmJtcC5vdmgvaW1ncy8yMDIxLzEwLzkxYWQ2ZDY1MzhiZjg2ODkuanBnJyxcXG4gICAgICAgICdodHRwczovL3R2YTEuc2luYWltZy5jbi9sYXJnZS8wMDVCWXFwZ2d5MWZ3cmVzbDVwbWxqMzFoYzB4Y3drYS5qcGcnLFxcbiAgICAgICAgJ2h0dHBzOi8vdHZhMy5zaW5haW1nLmNuL2xhcmdlLzAwNUJZcXBnZ3kxZndyZ2pkazc0b2ozMWhjMHUwZHFuLmpwZycsXFxuICAgICAgICAnaHR0cHM6Ly9jZG4uc2VvdnguY29tL2ltZy9tb20yMDE4JTIwKDMyMCkuanBnJyxcXG4gICAgICAgICdodHRwczovL2Nkbi5zZW92eC5jb20vaW1nL21vbTIwMTglMjAoODAzKS5qcGcnXFxuICAgIF07XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBpbWc6IHBpY3NbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTApXSxcXG4gICAgICAgIHRpdGxlOiB2ZXJzaW9uVGlwcyArICfigJnigJk8c21hbGw+PHNwYW4gc3R5bGU9XFxcImNvbG9yOiM2RUI4OTdcXFwiPjxicj7jgIDjgIDngrnlh7vkuIrmlrnlpLTlg4/ov5vlhaXnvJbovpE8YnI+54K55q2k6L+b5YWl6K665Z2b5biW5a2Q5YiX6KGoJyxcXG4gICAgICAgIGRlc2M6ICflvZPliY3niYjmnKw6IHYnICsgb2xkVixcXG4gICAgICAgIHVybDogJ2h0dHBzOi8vaGFpa3Vvc2hpamllLmNuL3VzZXIvMTk1OCcsXFxuICAgICAgICBjb2xfdHlwZTogJ21vdmllXzEnXFxuICAgIH0pO1xcbiAgc2V0UmVzdWx0KGQpO1xcbn1cXG5cXG5zd2l0Y2ggKGdldFBhcmFtKFxcXCJ0eXBlXFxcIikpIHtcXG4gICAgY2FzZSBcXFwi6K6+572uXFxcIjpcXG4gICAgICAgIGRhdGEuc2V0UGFyc2UoKTtcXG4gICAgICAgIC8vc2V0UmVzdWx0KGQpO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgXFxcIue8lui+kVxcXCI6XFxuICAgICAgICAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9qeEl0ZW0/cnVsZT1NeUZpZWxk4bSw4oG/XFxcIikuanhMaXN0KCk7XFxuICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgICAgICBicmVhaztcXG5cXHRjYXNlIFxcXCLkuLvpophcXFwiOlxcblxcdCAgICAgJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdGhlbWU/cnVsZT1NeUZpZWxk4bSw4oG/XFxcIikudGhlbWVJbml0KCk7XFxuICAgICAgICBicmVhaztcXG5cXHRjYXNlIFxcXCLop6PmnpBcXFwiOlxcblxcdCAgICAgJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvanhNYW5hZ2U/cnVsZT1NeUZpZWxk4bSw4oG/XFxcIikuanhNYW5hZ2UoKTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBkZWZhdWx0OlxcbiAgICAgICAgJC5leHBvcnRzID0gZGF0YTtcXG4gICAgICAgIGJyZWFrO1xcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuino+aekOmhueS4u+eVjOmdolwiLFwicGF0aFwiOlwianhJdGVtXCIsXCJydWxlXCI6XCJldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9QYXJzZV9Ebi5qcz9ydWxlPU15RmllbGThtLDigb8nKSkucnVsZSk7XFxudmFyIGlzTG9naW4gPSBmdW5jdGlvbiAoKXtyZXR1cm4gdHJ1ZX1cXG5mdW5jdGlvbiBiYnNZWigpIHtcXG4gICAgdmFyIF8weDQ3YTliNCA9IHtcXG4gICAgICAgICdKeFNNbic6IGZ1bmN0aW9uKF8weDI0OTk1MiwgXzB4NGFiYzE1KSB7XFxuICAgICAgICAgICAgcmV0dXJuIF8weDI0OTk1MiArIF8weDRhYmMxNTtcXG4gICAgICAgIH0sXFxuICAgICAgICAnTEd3bUMnOiAn56e75YqoIycsXFxuICAgICAgICAnR3ZEVlknOiBmdW5jdGlvbihfMHg0NjFmMmQsIF8weDU0MDU3MSkge1xcbiAgICAgICAgICAgIHJldHVybiBfMHg0NjFmMmQgKyBfMHg1NDA1NzE7XFxuICAgICAgICB9LFxcbiAgICAgICAgJ1dmZUhEJzogJ+KAmOKAmOKAmeKAmTxzbWFsbD48c3BhbiBzdHlsZT1cXFwiY29sb3I6I0ZFOUEyRVxcXCI+JyxcXG4gICAgICAgICdFcUlscyc6ICfnp7vliqg6ICcsXFxuICAgICAgICAnRWZmYm4nOiAndGV4dF8yJyxcXG4gICAgICAgICdSeGt4QSc6IGZ1bmN0aW9uKF8weDMyYTdkMCwgXzB4MWE5MzJjKSB7XFxuICAgICAgICAgICAgcmV0dXJuIF8weDMyYTdkMChfMHgxYTkzMmMpO1xcbiAgICAgICAgfSxcXG4gICAgICAgICdWQkdKSCc6ICdqZFJvdXRlJyxcXG4gICAgICAgICdCWmdSdCc6IGZ1bmN0aW9uKF8weDI2OTg0ZSwgXzB4NWNjOTI2KSB7XFxuICAgICAgICAgICAgcmV0dXJuIF8weDI2OTg0ZSA9PT0gXzB4NWNjOTI2O1xcbiAgICAgICAgfSxcXG4gICAgICAgICdyZ0dDQyc6ICd3RFZFYicsXFxuICAgICAgICAnTWN6T1cnOiBmdW5jdGlvbihfMHgyODgwYmYsIF8weDJkOTMwNiwgXzB4OTc3ODdhKSB7XFxuICAgICAgICAgICAgcmV0dXJuIF8weDI4ODBiZihfMHgyZDkzMDYsIF8weDk3Nzg3YSk7XFxuICAgICAgICB9LFxcbiAgICAgICAgJ0ZVamRtJzogJ2Jic1laJyxcXG4gICAgICAgICdscUZoYic6IGZ1bmN0aW9uKF8weDQzYmJlNikge1xcbiAgICAgICAgICAgIHJldHVybiBfMHg0M2JiZTYoKTtcXG4gICAgICAgIH0sXFxuICAgICAgICAnRlVScHknOiBmdW5jdGlvbihfMHgyMjY1YzIsIF8weGExZDU2OCwgXzB4MjlkZTAxKSB7XFxuICAgICAgICAgICAgcmV0dXJuIF8weDIyNjVjMihfMHhhMWQ1NjgsIF8weDI5ZGUwMSk7XFxuICAgICAgICB9LFxcbiAgICAgICAgJ1hJT2JCJzogJ3ZhciB4ZFJvdXRlPVxcXFxcXFwiXFxcXFxcXCI7J1xcbiAgICB9O1xcbiAgICBpZiAoIV8weDQ3YTliNFsnUnhreEEnXShnZXRWYXIsIF8weDQ3YTliNFsnVkJHSkgnXSkpIHtcXG4gICAgICAgIGlmIChfMHg0N2E5YjRbJ0JaZ1J0J10oXzB4NDdhOWI0WydyZ0dDQyddLCAnSlZrQVonKSkge1xcbiAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxuICAgICAgICAgICAgICAgICd0aXRsZSc6IF8weDQ3YTliNFsnSnhTTW4nXShfMHg0N2E5YjRbJ0xHd21DJ10sIGkpID09IEJKbW9kZSA/IF8weDQ3YTliNFsnSnhTTW4nXShfMHg0N2E5YjRbJ0d2RFZZJ10oXzB4NDdhOWI0WydXZmVIRCddLCBfMHg0N2E5YjRbJ0VxSWxzJ10pLCB4c0xpc3QpIDogJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXCJjb2xvcjojMjk4QTA4XFxcIj4nICsgeHNMaXN0LFxcbiAgICAgICAgICAgICAgICAndXJsJzogYmpJdGVtWyd5ZFBhcnNlJ10oQkptb2RlLCBpKSxcXG4gICAgICAgICAgICAgICAgJ2NvbF90eXBlJzogXzB4NDdhOWI0WydFZmZibiddXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIF8weDQ3YTliNFsnTWN6T1cnXShwdXRWYXIsIF8weDQ3YTliNFsnRlVqZG0nXSwgXzB4NDdhOWI0WydscUZoYiddKGlzTG9naW58fGZ1bmN0aW9uICgpe3JldHVybiB0cnVlfSkpO1xcbiAgICAgICAgICAgIF8weDQ3YTliNFsnRlVScHknXShwdXRWYXIsICdqZFJvdXRlJywgXzB4NDdhOWI0WydYSU9iQiddKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gZ2V0VmFyKF8weDQ3YTliNFsnRlVqZG0nXSk7XFxufVxcbnZhciBqeEl0ZW0gPSB7XFxuICAgICdqeExpc3QnOiBmdW5jdGlvbigpIHtcXG4gICAgICAgIHZhciBfMHg0YzA0MjcgPSB7XFxuICAgICAgICAgICAgJ1VWV29GJzogZnVuY3Rpb24oXzB4MjZiYjA3LCBfMHgyMjFiNGQpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDI2YmIwNyArIF8weDIyMWI0ZDtcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICdjb2xvcic6ZnVuY3Rpb24odGV4dCwgY29sb3IpIHtcXG4gICAgICAgICAgICAgICAgdGV4dCArPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICAgICAgaWYgKHRleHQuaW5kZXhPZihcXFwi4oCc4oCc4oCd4oCdXFxcIikgPT09IDApIHtcXG4gICAgICAgICAgICAgICAgICAgIHRleHQucmVwbGFjZShcXFwi4oCc4oCc4oCd4oCdXFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9J1xcXCIgKyBjb2xvciArIFxcXCInPlxcXCIgKyB0ZXh0ICsgXFxcIjwvZm9udD5cXFwiO1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgJ2t6V0RLJzogZnVuY3Rpb24oXzB4NDg1NGE5LCBfMHgzZTk4YzUpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDQ4NTRhOSArIF8weDNlOThjNTtcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICdYWHlRcic6ICfnp7vliqgjJyxcXG4gICAgICAgICAgICAnZ3RVbmonOiBmdW5jdGlvbihfMHg1OWFhZjcsIF8weDIyYzY2Yikge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4NTlhYWY3ICsgXzB4MjJjNjZiO1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgJ1V0ZldmJzogJ+KAmOKAmOKAmeKAmTxzbWFsbD48c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiNGRTlBMkVcXFxcXFxcIj4nLFxcbiAgICAgICAgICAgICdRT3ZKVic6ICfnp7vliqg6ICcsXFxuICAgICAgICAgICAgJ0FCRXdCJzogJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzI5OEEwOFxcXFxcXFwiPicsXFxuICAgICAgICAgICAgJ296eldHJzogJ3RleHRfMicsXFxuICAgICAgICAgICAgJ25XZlZSJzogZnVuY3Rpb24oXzB4NDgwZjNhLCBfMHg0Yzg0ZmMpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDQ4MGYzYSArIF8weDRjODRmYztcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICdKQ2NOWSc6ICdwYXJzZVJvdXRlJyxcXG4gICAgICAgICAgICAncmdESXAnOiAnYmlhbmppJyxcXG4gICAgICAgICAgICAnaG9JZEonOiAn4oCY4oCY4oCZ4oCZPGJpZz48c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiM2RUI4OTdcXFxcXFxcIj7mlrAg5bu6IOinoyDmnpAnLFxcbiAgICAgICAgICAgICdGckdPSCc6IGZ1bmN0aW9uKF8weDEyZDZkYiwgXzB4MmEwNjhkKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHgxMmQ2ZGIgPCBfMHgyYTA2OGQ7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAnb0NDU2onOiBmdW5jdGlvbihfMHgxOWIxNzgsIF8weDRlZjhmNikge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4MTliMTc4ID09PSBfMHg0ZWY4ZjY7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAnSFpobGMnOiBmdW5jdGlvbihfMHg1Y2FlMDMsIF8weDI2ZTI0Mikge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4NWNhZTAzID09IF8weDI2ZTI0MjtcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICdjZ0llQSc6IGZ1bmN0aW9uKF8weDI1ZTM2OCwgXzB4OGJjOGU5KSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHgyNWUzNjggKyBfMHg4YmM4ZTk7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAneGRyRnYnOiBmdW5jdGlvbihfMHg0YWI1ZDgsIF8weDIxMjQyZikge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4NGFiNWQ4ICsgXzB4MjEyNDJmO1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgJ3l3anV4JzogZnVuY3Rpb24oXzB4NWUzMDUxLCBfMHg0ZTAyMzApIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDVlMzA1MShfMHg0ZTAyMzApO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH07XFxuICAgICAgICB2YXIgXzB4MWQ4YmIxID0gZ2V0VmFyKF8weDRjMDQyN1snSkNjTlknXSk7XFxuICAgICAgICB2YXIgXzB4M2I4OWFiID0gcGFyc2VGaWxlWyd0aXRsZSddO1xcbiAgICAgICAgdmFyIF8weDQ5ZGE5NiA9IGdldFZhcihfMHg0YzA0MjdbJ3JnRElwJ10pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogXzB4NGMwNDI3Wydob0lkSiddLFxcbiAgICAgICAgICAgIGRlc2M6J+azqOaEjzrkvY3nva7mk43kvZzlip/og73lj6rlnKjliIbnsbvnrZvpgInkuLrlhajpg6jml7bnlJ/mlYhcXFxcbuS4i+aWueaQnOe0ouaMieWQjeensOaIluWcsOWdgCzph43nva7or7fnlZnnqbrmiJbngrnop6PmnpDmlbDph4/mjInpkq4nLFxcbiAgICAgICAgICAgIHVybDogYmpJdGVtWyd4alBhcnNlJ10oKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOmZhbHNlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOifmkJzntKInLFxcbiAgICAgICAgICAgIGRlc2M6J21lbmd4JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTonaW5wdXQnLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBcXFwicHV0VmFyKCdkcC5zZWFyY2hKeCcsaW5wdXQpXFxcIixcXG4gICAgICAgICAgICAgICAgdGl0bGVWaXNpYmxlOiB0cnVlLFxcbiAgICAgICAgICAgICAgICB0ZXh0U2l6ZTogMTEsXFxuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTpnZXRWYXIoJ2RwLnNlYXJjaEp4JywnJyksXFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICB1cmw6JC50b1N0cmluZygoKT0+e1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KTtcXG4gICAgICAgIGxldCBmaWx0ZXJzID0gWyflhajpg6gnLCfpk77mjqUnLCdqc29uJywn5YWN5ZeFJ107XFxuICAgICAgICBmb3IobGV0IG8gaW4gZmlsdGVycyl7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6Z2V0VmFyKCdkbi5qeF9maWx0ZXInLCflhajpg6gnKT09PWZpbHRlcnNbb10/J+KAnOKAnOKAneKAnTxzcGFuIHN0eWxlPVxcXCJjb2xvcjojMjk4QTA4XFxcIj4nK2ZpbHRlcnNbb106ZmlsdGVyc1tvXSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaXQpPT57XFxuICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ2RuLmp4X2ZpbHRlcicsaXQpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgICAgIH0sZmlsdGVyc1tvXSksXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgXzB4MmVjYmU1ID0gXzB4M2I4OWFiWydsZW5ndGgnXTtcXG4gICAgICAgIHZhciBqc29uPXt0aXRsZTpbXSxjb2Rlczp7fX07XFxuICAgICAgICBsZXQgc2V0RmlsZSA9IHJlcXVlc3QoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uJyk7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIGV2YWwoJ2pzb249JytzZXRGaWxlKTtcXG4gICAgICAgIH1jYXRjaCAoZSkge1xcbiAgICAgICAgICAgIGxvZygnSnNvbuino+aekOWPkeeUn+S6humUmeivrzonK2UubWVzc2FnZSk7XFxuICAgICAgICB9XFxuICAgICAgICBpZihnZXRWYXIoJ2RuLmp4X2ZpbHRlcicsJ+WFqOmDqCcpPT09J+mTvuaOpScpe1xcbiAgICAgICAgICAgIF8weDNiODlhYiA9IF8weDNiODlhYi5maWx0ZXIoaXQ9PighL8KpJC8udGVzdChpdCkpJiZ0eXBlb2YoanNvbi5jb2Rlc1tfMHg0YzA0MjdbJ25XZlZSJ10oaXQsICcnKVsncmVwbGFjZSddKC9odHRwLipcXFxcL1xcXFwvL2csICcnKV0pPT09J3N0cmluZycpO1xcbiAgICAgICAgfWVsc2UgaWYoZ2V0VmFyKCdkbi5qeF9maWx0ZXInLCflhajpg6gnKT09PSflhY3ll4UnKXtcXG4gICAgICAgICAgICBfMHgzYjg5YWIgPSBfMHgzYjg5YWIuZmlsdGVyKGl0PT50eXBlb2YoanNvbi5jb2Rlc1tfMHg0YzA0MjdbJ25XZlZSJ10oaXQsICcnKVsncmVwbGFjZSddKC9odHRwLipcXFxcL1xcXFwvL2csICcnKV0pPT09J2Z1bmN0aW9uJyk7XFxuICAgICAgICB9ZWxzZSBpZihnZXRWYXIoJ2RuLmp4X2ZpbHRlcicsJ+WFqOmDqCcpPT09J2pzb24nKXtcXG4gICAgICAgICAgICBfMHgzYjg5YWIgPSBfMHgzYjg5YWIuZmlsdGVyKGl0PT4oL8KpJC8udGVzdChpdCkpJiZ0eXBlb2YoanNvbi5jb2Rlc1tfMHg0YzA0MjdbJ25XZlZSJ10oaXQsICcnKVsncmVwbGFjZSddKC9odHRwLipcXFxcL1xcXFwvL2csICcnKV0pPT09J3N0cmluZycpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYoZ2V0VmFyKCdkcC5zZWFyY2hKeCcsJycpKXtcXG4gICAgICAgICAgICBfMHgzYjg5YWIgPSBfMHgzYjg5YWIuZmlsdGVyKGl0PT4oanNvbi5jb2Rlc1tfMHg0YzA0MjdbJ25XZlZSJ10oaXQsICcnKV0rJycpLmluY2x1ZGVzKGdldFZhcignZHAuc2VhcmNoSngnKSl8fGl0LmluY2x1ZGVzKGdldFZhcignZHAuc2VhcmNoSngnLCcnKSkpO1xcbiAgICAgICAgfVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTpcXFwi6Kej5p6Q5pWwOlxcXCIrXzB4NGMwNDI3LmNvbG9yKF8weDNiODlhYi5sZW5ndGgsJyNmZjcwMDAnKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTpcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCk9PntcXG4gICAgICAgICAgICAgICAgY2xlYXJWYXIoJ2RwLnNlYXJjaEp4Jyk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey6YeN572uJ1xcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KTtcXG4gICAgICAgIC8vIOS4i+mdouaYr+ino+aekOWIl+ihqOaOkuWIl1xcbiAgICAgICAgLy8gZm9yICh2YXIgXzB4ZTJjM2Q4ID0gMHgwOyBfMHg0YzA0MjdbJ0ZyR09IJ10oXzB4ZTJjM2Q4LCBfMHgyZWNiZTUpOyBfMHhlMmMzZDgrKykge1xcbiAgICAgICAgZm9yIChsZXQgXzB4ZTJjM2Q4IGluIF8weDNiODlhYikge1xcbiAgICAgICAgICAgIHZhciBfMHgzMzc4OGMgPSBfMHgzYjg5YWJbXzB4ZTJjM2Q4XTtcXG4gICAgICAgICAgICB2YXIgXzB4Mzc4NzFlID0gXzB4NGMwNDI3WyduV2ZWUiddKF8weDMzNzg4YywgJycpWydyZXBsYWNlJ10oL2h0dHAuKlxcXFwvXFxcXC8vZywgJycpO1xcbiAgICAgICAgICAgIGlmICgv56e75YqoLyBbJ3Rlc3QnXShfMHg0OWRhOTYpKSB7XFxuICAgICAgICAgICAgICAgIGlmIChfMHg0YzA0MjdbJ29DQ1NqJ10oJ3VLTHhGJywgJ3VLTHhGJykpIHtcXG4gICAgICAgICAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogXzB4NGMwNDI3WydIWmhsYyddKF8weDRjMDQyN1snWFh5UXInXSArIF8weGUyYzNkOCwgXzB4NDlkYTk2KSA/IF8weDRjMDQyN1snbldmVlInXShfMHg0YzA0MjdbJ2NnSWVBJ10oXzB4NGMwNDI3WydVdGZXZiddLCBfMHg0YzA0MjdbJ1FPdkpWJ10pLCBfMHgzNzg3MWUpIDogXzB4NGMwNDI3WydjZ0llQSddKF8weDRjMDQyN1snQUJFd0InXSwgXzB4Mzc4NzFlKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogYmpJdGVtWyd5ZFBhcnNlJ10oXzB4NDlkYTk2LCBfMHhlMmMzZDgpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICdjb2xfdHlwZSc6ICd0ZXh0XzInXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBfMHgyYmM2MTggPSBfMHgzYjg5YWJbXzB4ZTJjM2Q4XTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBfMHg1Y2Y0MTcgPSBfMHg0YzA0MjdbJ1VWV29GJ10oXzB4MmJjNjE4LCAnJylbJ3JlcGxhY2UnXSgvaHR0cC4qXFxcXC9cXFxcLy9nLCAnJyk7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoL+enu+WKqC8gWyd0ZXN0J10oXzB4NDlkYTk2KSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6IF8weDRjMDQyN1sna3pXREsnXShfMHg0YzA0MjdbJ1hYeVFyJ10sIF8weGUyYzNkOCkgPT0gXzB4NDlkYTk2ID8gXzB4NGMwNDI3WydndFVuaiddKF8weDRjMDQyN1snZ3RVbmonXShfMHg0YzA0MjdbJ1V0ZldmJ10sIF8weDRjMDQyN1snUU92SlYnXSksIF8weDVjZjQxNykgOiBfMHg0YzA0MjdbJ0FCRXdCJ10gKyBfMHg1Y2Y0MTcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwnOiBiakl0ZW1bJ3lkUGFyc2UnXShfMHg0OWRhOTYsIF8weGUyYzNkOCksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xfdHlwZSc6IF8weDRjMDQyN1snb3p6V0cnXVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgXzB4MTE5MzY1ID0gW18weDJiYzYxOCwgXzB4NGMwNDI3WydndFVuaiddKF8weGUyYzNkOCwgJ3x8JyldWydqb2luJ10oJ3x8Jyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZFsncHVzaCddKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogXzB4NGMwNDI3WyduV2ZWUiddKF8weDRjMDQyN1snQUJFd0InXSwgXzB4NWNmNDE3KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF90eXBlJzogXzB4NGMwNDI3WydvenpXRyddLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogYmpJdGVtWyd4bFNlbGVjdCddKF8weDExOTM2NSwgXzB4MmVjYmU1Wyd0b1N0cmluZyddKCkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB2YXIgXzB4YjcwMTkyID0gW18weDMzNzg4YywgXzB4ZTJjM2Q4ICsgJ3x8J11bJ2pvaW4nXSgnfHwnKTtcXG4gICAgICAgICAgICAgICAgLy8g6L+q6L+q5b2x6ZmifHwwfHwgIOWQjeensHx857Si5byVIOeahOaVsOe7hFxcbiAgICAgICAgICAgICAgICAvLyBBQkV3QiDmmK/nu7/oibIgXzB4Mzc4NzFlIOaYr+agh+mimOWQjeensCAgeGRyRnbmmK/lrZfnrKbkuLLov57mjqXlh73mlbBcXG4gICAgICAgICAgICAgICAgLy8gbGV0IGZsYWcgPSAn4oCY4oCY4pOK4oCZ4oCZJztcXG4gICAgICAgICAgICAgICAgbGV0IGZsYWcgPSBfMHg0YzA0MjcuY29sb3IoJ+KTiicsJyMwMDUxZmYnKTtcXG4gICAgICAgICAgICAgICAgaWYodHlwZW9mKGpzb24uY29kZXNbXzB4Mzc4NzFlXSk9PT0nZnVuY3Rpb24nKXtcXG4gICAgICAgICAgICAgICAgICAgIC8vIGZsYWcgPSAn4oCc4oCc4pK/4oCd4oCdJztcXG4gICAgICAgICAgICAgICAgICAgIGZsYWcgPSBfMHg0YzA0MjcuY29sb3IoJ+KSvycsJyNmZjcwMDAnKTtcXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYodHlwZW9mKGpzb24uY29kZXNbXzB4Mzc4NzFlXSk9PT0ndW5kZWZpbmVkJyl7XFxuICAgICAgICAgICAgICAgICAgICBmbGFnID0gJyc7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgLy8gbGV0IGNscyA9ICc8c3BhbiBzdHlsZT1cXFwiY29sb3I6IzI5OEEwOFxcXCI+JztcXG4gICAgICAgICAgICAgICAgLy8gbGV0IHRpdGxlID0gXzB4NGMwNDI3Wyd4ZHJGdiddKF8weDRjMDQyN1snQUJFd0InXSwgZmxhZytfMHgzNzg3MWUpO1xcbiAgICAgICAgICAgICAgICAvLyBsZXQgdGl0bGUgPSBmbGFnK2NscytfMHgzNzg3MWU7XFxuICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IGZsYWcrXzB4NGMwNDI3LmNvbG9yKF8weDM3ODcxZSwnIzI5OEEwOCcpO1xcbiAgICAgICAgICAgICAgICBkWydwdXNoJ10oe1xcbiAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAvLyAndGl0bGUnOiBfMHgzNzg3MWUsXFxuICAgICAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiBfMHg0YzA0MjdbJ296eldHJ10sXFxuICAgICAgICAgICAgICAgICAgICAndXJsJzogYmpJdGVtWyd4bFNlbGVjdCddKF8weGI3MDE5MiwgXzB4MmVjYmU1Wyd0b1N0cmluZyddKCkpXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIF8weDRjMDQyN1sneXdqdXgnXShjbGVhclZhciwgXzB4NGMwNDI3WydyZ0RJcCddKTtcXG4gICAgfSxcXG4gICAgJ2xxRmlsZSc6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgdmFyIF8weDU0MWQ3NiA9IHtcXG4gICAgICAgICAgICAnYVdpUnMnOiBmdW5jdGlvbihfMHg0OGQ3N2IsIF8weDE5MTYxZiwgXzB4MjFjYjg1KSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHg0OGQ3N2IoXzB4MTkxNjFmLCBfMHgyMWNiODUpO1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgJ3dTZm56JzogZnVuY3Rpb24oXzB4NDg1MGVhKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHg0ODUwZWEoKTtcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICdxUlFkQSc6ICdqZFJvdXRlJyxcXG4gICAgICAgICAgICAnV1FpcWsnOiAndmFyIHhkUm91dGU9XFxcIlxcXCI7JyxcXG4gICAgICAgICAgICAncHNHZHQnOiBmdW5jdGlvbihfMHgxNzA3ODAsIF8weDNiNTEyYSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4MTcwNzgwID09IF8weDNiNTEyYTtcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICdpbXhyaSc6ICd0cnVlJyxcXG4gICAgICAgICAgICAnblNrangnOiBmdW5jdGlvbihfMHg5NWJmMzgsIF8weDMxM2YyNSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4OTViZjM4ICE9PSBfMHgzMTNmMjU7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAnaVZOZU0nOiAnZWVMSm0nLFxcbiAgICAgICAgICAgICdJd01UbCc6ICcwfDF8NXw5fDExfDN8Nnw3fDEwfDR8Mnw4JyxcXG4gICAgICAgICAgICAneGZkSGsnOiAn5ouJ5Y+W5Li75o+S5Lu25ZKM572R6aG16ISa5pysJyxcXG4gICAgICAgICAgICAnckdMdUEnOiAn5Li75o+S5Lu25a2Y5pS+6Lev5b6EOiAvY2FjaGUvUGFyc2VfRG4uanNcXFxceDBh572R6aG16ISa5pys5a2Y5pS+6Lev5b6EOiAvY2FjaGUvUGFyc2VfRG4uaHRtbCcsXFxuICAgICAgICAgICAgJ3pRU0xFJzogJ3RleHRfY2VudGVyXzEnLFxcbiAgICAgICAgICAgICdodmlEbCc6IGZ1bmN0aW9uKF8weDI2ZGI2MiwgXzB4MzEyZjFjKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHgyNmRiNjIoXzB4MzEyZjFjKTtcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICdaeFVndCc6ICfmk43kvZzmjIflvJUnLFxcbiAgICAgICAgICAgICdzV0ZvYyc6IGZ1bmN0aW9uKF8weDJhMDQ0YiwgXzB4MTQ5YTNmKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHgyYTA0NGIgKyBfMHgxNDlhM2Y7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAnT0VoYXQnOiAn5ouJ5Y+W5Luj56CBJyxcXG4gICAgICAgICAgICAnWnZ0U3UnOiAn57yW6L6R6Kej5p6QJyxcXG4gICAgICAgICAgICAnZ1hLTWInOiAndG9hc3Q6Ly/or7flhYjmi4nlj5bliJfooagnLFxcbiAgICAgICAgICAgICdXQ09EQyc6IGZ1bmN0aW9uKF8weDRhZDNkNSwgXzB4MzFmYTFlKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHg0YWQzZDUgPCBfMHgzMWZhMWU7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAnckFrQWgnOiAndGV4dF8zJyxcXG4gICAgICAgICAgICAneVdhT0knOiAn5oGi5aSN5o+S5Lu26Lev5b6E5Li66buY6K6kJyxcXG4gICAgICAgICAgICAneWp5aksnOiAn5b2T5YmN6K6+572u5Li6OiAnLFxcbiAgICAgICAgICAgICd0SFhlRSc6ICfmi4nlj5bop6PmnpDliJfooajmiJbogIXop6PmnpDku6PnoIEnLFxcbiAgICAgICAgICAgICdHTVVZdSc6ICflrZjmlL7ot6/lvoQ6IC9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb24nLFxcbiAgICAgICAgICAgICdtcFpCWic6ICdsaW5lX2JsYW5rJyxcXG4gICAgICAgICAgICAneHZxZ0YnOiAn6L6T5YWl5pyJ5pWI5o+S5Lu25Zyw5Z2AJyxcXG4gICAgICAgICAgICAnaGV1S3gnOiAncHV0VmFyKFxcXCJwbHVnaW5MaW5rXFxcIixpbnB1dCknLFxcbiAgICAgICAgICAgICdJaWZpYSc6ICfigJjigJjigJnigJk8c3Ryb25nPjxiaWc+55m75b2V5o+Q56S6JyxcXG4gICAgICAgICAgICAnUEZSSEEnOiAn5L2/55So55u45YWz5Yqf6IO96ZyA55m75b2V6KeG55WM6K665Z2b6LSm5Y+3XFxcXG7lpoLmnInpl67popjliY3lvoDorrrlnZvkuobop6Por6bmg4UnLFxcbiAgICAgICAgICAgICdVTHdrVCc6ICdodHRwczovL2hhaWt1b3NoaWppZS5jbi91c2VyL3NpZ25pbidcXG4gICAgICAgIH07XFxuICAgICAgICBpZiAoXzB4NTQxZDc2Wydwc0dkdCddKF8weDU0MWQ3Nlsnd1NmbnonXShiYnNZWiksIF8weDU0MWQ3NlsnaW14cmknXSl8fHRydWUpIHtcXG4gICAgICAgICAgICBpZiAoXzB4NTQxZDc2WyduU2tqeCddKF8weDU0MWQ3NlsnaVZOZU0nXSwgXzB4NTQxZDc2WydpVk5lTSddKSkge1xcbiAgICAgICAgICAgICAgICBfMHg1NDFkNzZbJ2FXaVJzJ10ocHV0VmFyLCAnYmJzWVonLCBfMHg1NDFkNzZbJ3dTZm56J10oaXNMb2dpbnx8ZnVuY3Rpb24gKCl7cmV0dXJuIHRydWV9KSk7XFxuICAgICAgICAgICAgICAgIF8weDU0MWQ3NlsnYVdpUnMnXShwdXRWYXIsIF8weDU0MWQ3NlsncVJRZEEnXSwgXzB4NTQxZDc2WydXUWlxayddKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB2YXIgXzB4NGQyNWZmID0gXzB4NTQxZDc2WydJd01UbCddWydzcGxpdCddKCd8JyksXFxuICAgICAgICAgICAgICAgICAgICBfMHg0YTk3YzkgPSAweDA7XFxuICAgICAgICAgICAgICAgIHdoaWxlICghIVtdKSB7XFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF8weDRkMjVmZltfMHg0YTk3YzkrK10pIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcwJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZFsncHVzaCddKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6IF8weDU0MWQ3NlsneGZkSGsnXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwnOiBiakl0ZW1bJ3B1bGxTY3JpcHQnXShfbXlTZXRbJ2NqY2FjaGUnXSwgX215U2V0Wyd4NWNhY2hlJ10pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rlc2MnOiBfMHg1NDFkNzZbJ3JHTHVBJ10sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiBfMHg1NDFkNzZbJ3pRU0xFJ11cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzEnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfMHg1NDFkNzZbJ2h2aURsJ10oZXZhbCwgXzB4NTQxZDc2WydodmlEbCddKGdldFZhciwgXzB4NTQxZDc2WydxUlFkQSddKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzInOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkWydwdXNoJ10oe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF90eXBlJzogJ2xpbmVfYmxhbmsnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICczJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF8weDJhYjM5OSA9ICdoaWtlcjovL2VtcHR5I25vSGlzdG9yeSNAcnVsZT1qczp0aGlzLmQ9W107JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvanhJdGVtP3J1bGU9TXlGaWVsZOG0sOKBv1xcXCIpLmp4TGlzdCgpO3NldFJlc3VsdChkKTsnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc0JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZFsncHVzaCddKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6IF8weDU0MWQ3NlsnWnhVZ3QnXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwnOiB0eXBlb2YgY3pHdWlkZSA9PSAnZnVuY3Rpb24nID8gY3pHdWlkZSgpIDogJycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiBfMHg1NDFkNzZbJ3pRU0xFJ11cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzUnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ZFJvdXRlID0gXzB4NTQxZDc2WydzV0ZvYyddKHhkUm91dGUsIF9teVNldFsncGFyc2VSb3V0ZSddKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnNic6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfMHgzYTlhZmUgPSBbe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogJ+aLieWPluWIl+ihqCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogYmpJdGVtWydwdWxsQ29kZSddKCfliJfooagnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGl0bGUnOiBfMHg1NDFkNzZbJ09FaGF0J10sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogYmpJdGVtWydwdWxsQ29kZSddKCfku6PnoIEnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGl0bGUnOiBfMHg1NDFkNzZbJ1p2dFN1J10sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogXzB4NTQxZDc2WydodmlEbCddKGZpbGVFeGlzdCwgXzB4NTQxZDc2WydodmlEbCddKGdldFZhciwgJ3BhcnNlUm91dGUnKSkgPT0gISFbXSA/IF8weDJhYjM5OSA6IF8weDU0MWQ3NlsnZ1hLTWInXVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnNyc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF8weDFhMmNkYiA9IDB4MDsgXzB4NTQxZDc2WydXQ09EQyddKF8weDFhMmNkYiwgXzB4M2E5YWZlWydsZW5ndGgnXSk7IF8weDFhMmNkYisrKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkWydwdXNoJ10oe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6IF8weDNhOWFmZVtfMHgxYTJjZGJdWyd0aXRsZSddLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwnOiBfMHgzYTlhZmVbXzB4MWEyY2RiXVsndXJsJ10sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF90eXBlJzogXzB4NTQxZDc2WydyQWtBaCddXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc4JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZFsncHVzaCddKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6IF8weDU0MWQ3NlsneVdhT0knXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwnOiBiakl0ZW1bJ2hmUGx1Z2luJ10oX215U2V0WydwYXJzZVJvdXRlJ10pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rlc2MnOiBfMHg1NDFkNzZbJ3NXRm9jJ10oXzB4NTQxZDc2Wyd5anlqSyddICsgbXlTZXRbJ2NqJ10sICdcXFxcbuWtmOaUvui3r+W+hDogL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbicpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF90eXBlJzogXzB4NTQxZDc2Wyd6UVNMRSddXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc5JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZFsncHVzaCddKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6IF8weDU0MWQ3NlsndEhYZUUnXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwnOiAndG9hc3Q6Ly/or7flnKjkuIvmlrnpgInpobnmk43kvZwnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rlc2MnOiBfMHg1NDFkNzZbJ0dNVVl1J10sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiBfMHg1NDFkNzZbJ3pRU0xFJ11cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzEwJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZFsncHVzaCddKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xfdHlwZSc6IF8weDU0MWQ3NlsnbXBaQlonXVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMTEnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkWydwdXNoJ10oe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rlc2MnOiBfMHg1NDFkNzZbJ3h2cWdGJ10sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiAnaW5wdXQnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4dHJhJzoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZVZpc2libGUnOiAhW10sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IF8weDU0MWQ3NlsnaHZpRGwnXShnZXRWYXIsICdwbHVnaW5MaW5rJyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29uQ2hhbmdlJzogXzB4NTQxZDc2WydoZXVLeCddXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBkWydwdXNoJ10oe1xcbiAgICAgICAgICAgICAgICAndGl0bGUnOiBfMHg1NDFkNzZbJ0lpZmlhJ10sXFxuICAgICAgICAgICAgICAgICdkZXNjJzogXzB4NTQxZDc2WydQRlJIQSddLFxcbiAgICAgICAgICAgICAgICAndXJsJzogXzB4NTQxZDc2WydVTHdrVCddLFxcbiAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiBfMHg1NDFkNzZbJ3pRU0xFJ11cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgfVxcbn07XFxuJC5leHBvcnRzID0ganhJdGVtO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6Kej5p6QVXJs57yW6L6RXCIsXCJwYXRoXCI6XCJFZGl0VXJsXCIsXCJydWxlXCI6XCJqczpcXG5zZXRQYWdlVGl0bGUoXFxcIuaPkuS7tuaOpeWPo+iuvue9rlxcXCIpO1xcbmxldCBkID0gW107XFxubGV0IHBhcnNlVXJsVGV4dCA9IHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvamlleGkvamlleGkudHh0XFxcIik7XFxubGV0IHBhcnNlVXJsQXJyYXkgPSBwYXJzZVVybFRleHQuc3BsaXQoL1xcXFxuLyk7XFxubGV0IHNlbGVjdGVkID0gZ2V0SXRlbShcXFwic2VsZWN0ZWRcXFwiLCBcXFwiXFxcIik7XFxubGV0IGNsYXNzVGFiID0gW1xcbiAgICBbXFxcIumAieaLqVxcXCIsIFxcXCIwXFxcIl0sXFxuICAgIFtcXFwi5L+u5pS5XFxcIiwgXFxcIjFcXFwiXSxcXG4gICAgW1xcXCLliKDpmaRcXFwiLCBcXFwiMlxcXCJdXFxuXTtcXG5sZXQgY2xhc3NBID0gZ2V0VmFyKFxcXCJjbGFzc1xcXCIsIFxcXCIwXFxcIik7XFxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgY2xlYXJWYXIoXFxcImNsYXNzXFxcIik7XFxufSkpO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi5re75Yqg5paw55qE6Kej5p6QXFxcIixcXG4gICAgdXJsOiAkKFxcXCJcXFwiLFxcXCLop6PmnpDlkI0mJuino+aekFVSTFxcXCIpLmlucHV0KCgpID0+IHtcXG4gICAgICAgIGxldCBwYXJzZVVybFRleHQgPSByZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL2ppZXhpL2ppZXhpLnR4dFxcXCIpO1xcbiAgICAgICAgbGV0IHBhcnNlVXJsQXJyYXkgPSBwYXJzZVVybFRleHQuc3BsaXQoL1xcXFxuLyk7XFxuICAgICAgICBpZihpbnB1dC5zcGxpdChcXFwiJiZcXFwiKS5sZW5ndGghPT0yKXtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5qC85byP5LiN5q2j56GuXFxcIjtcXG4gICAgICAgIH1cXG4gICAgICAgIHBhcnNlVXJsQXJyYXkucHVzaChpbnB1dCk7XFxuICAgICAgICBwYXJzZVVybFRleHQgPSBwYXJzZVVybEFycmF5LmpvaW4oXFxcIlxcXFxuXFxcIik7XFxuICAgICAgICB3cml0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMvamlleGkvamlleGkudHh0XFxcIiwgcGFyc2VVcmxUZXh0KTtcXG4gICAgICAgIFxcbiAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S/ruaUueaIkOWKn1xcXCI7XFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiXFxufSk7XFxuZm9yIChsZXQgaXRlbSBvZiBjbGFzc1RhYikge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IGl0ZW1bMV0gPT09IGNsYXNzQSA/IFxcXCLigJzigJxcXFwiICsgaXRlbVswXSArIFxcXCLigJ3igJ1cXFwiIDogaXRlbVswXSxcXG4gICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoa2V5KSA9PiB7XFxuICAgICAgICAgICAgcHV0VmFyKFxcXCJjbGFzc1xcXCIsIGtleSk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICB9LCBpdGVtWzFdKSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCJcXG4gICAgfSk7XFxufVxcbmxldCBmdW5jO1xcbnN3aXRjaCAoY2xhc3NBKSB7XFxuICAgIGNhc2UgXFxcIjBcXFwiOlxcbiAgICAgICAgZnVuYyA9IGZ1bmN0aW9uKHVybCwgdGl0bGUpIHtcXG4gICAgICAgICAgICByZXR1cm4gJCh1cmwgKyBcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgodGl0bGUpID0+IHtcXG4gICAgICAgICAgICAgICAgbG9nKFxcXCJcXFxcbuabtOaUueaOpeWPoz4gXFxcIiArIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgc2V0SXRlbShcXFwic2VsZWN0ZWRcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcInNlbGVjdGVkMFxcXCIsIHRpdGxlICsgXFxcIiYmXFxcIiArIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5L+u5pS55oiQ5YqfXFxcIjtcXG4gICAgICAgICAgICB9LCB0aXRsZSk7XFxuICAgICAgICB9O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgXFxcIjFcXFwiOlxcbiAgICAgICAgZnVuYyA9IGZ1bmN0aW9uKHVybCwgdGl0bGUsIGluZGV4KSB7XFxuICAgICAgICAgICAgcmV0dXJuICQodXJsLCBcXFwi6K+36L6T5YWl44CMXFxcIiArIHRpdGxlICsgXFxcIuOAjeeahOaWsOaOpeWPo1xcXCIpLmlucHV0KCh0aXRsZSwgaW5kZXgpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlVXJsVGV4dCA9IHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvamlleGkvamlleGkudHh0XFxcIik7XFxuICAgICAgICAgICAgICAgIGxldCBwYXJzZVVybEFycmF5ID0gcGFyc2VVcmxUZXh0LnNwbGl0KC9cXFxcbi8pO1xcbiAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWQxID0gcGFyc2VVcmxBcnJheVtpbmRleF07XFxuICAgICAgICAgICAgICAgIHBhcnNlVXJsQXJyYXlbaW5kZXhdID0gdGl0bGUgKyBcXFwiJiZcXFwiICsgaW5wdXQ7XFxuICAgICAgICAgICAgICAgIHBhcnNlVXJsVGV4dCA9IHBhcnNlVXJsQXJyYXkuam9pbihcXFwiXFxcXG5cXFwiKTtcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL2ppZXhpL2ppZXhpLnR4dFxcXCIsIHBhcnNlVXJsVGV4dCk7XFxuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZDEgPT0gZ2V0SXRlbShcXFwic2VsZWN0ZWQwXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcInNlbGVjdGVkXFxcIiwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgc2V0SXRlbShcXFwic2VsZWN0ZWQwXFxcIiwgdGl0bGUgKyBcXFwiJiZcXFwiICsgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S/ruaUueaIkOWKn1xcXCI7XFxuICAgICAgICAgICAgfSwgdGl0bGUsIGluZGV4KTtcXG4gICAgICAgIH07XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSBcXFwiMlxcXCI6XFxuICAgICAgICBmdW5jID0gZnVuY3Rpb24odXJsLCB0aXRsZSwgaW5kZXgpIHtcXG4gICAgICAgICAgICByZXR1cm4gJChcXFwi56Gu6K6k5Yig6Zmk44CMXFxcIiArIHRpdGxlICsgXFxcIuOAje+8n1xcXCIpLmNvbmZpcm0oKHRpdGxlLCBpbmRleCkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2VVcmxUZXh0ID0gcmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9qaWV4aS9qaWV4aS50eHRcXFwiKTtcXG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlVXJsQXJyYXkgPSBwYXJzZVVybFRleHQuc3BsaXQoL1xcXFxuLyk7XFxuICAgICAgICAgICAgICAgIGxldCBzZWxlY3RlZDEgPSBwYXJzZVVybEFycmF5W2luZGV4XTtcXG4gICAgICAgICAgICAgICAgcGFyc2VVcmxBcnJheS5zcGxpY2UoaW5kZXgsIDEpO1xcbiAgICAgICAgICAgICAgICBwYXJzZVVybFRleHQgPSBwYXJzZVVybEFycmF5LmpvaW4oXFxcIlxcXFxuXFxcIik7XFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShcXFwiaGlrZXI6Ly9maWxlcy9qaWV4aS9qaWV4aS50eHRcXFwiLCBwYXJzZVVybFRleHQpO1xcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWQxID09IGdldEl0ZW0oXFxcInNlbGVjdGVkMFxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VVcmxBcnJheVswXSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcInNlbGVjdGVkXFxcIiwgcGFyc2VVcmxBcnJheVswXS5zcGxpdChcXFwiJiZcXFwiKVsxXSB8fCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbShcXFwic2VsZWN0ZWQwXFxcIiwgcGFyc2VVcmxBcnJheVswXSk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcInNlbGVjdGVkXFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcInNlbGVjdGVkMFxcXCIsIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/kv67mlLnmiJDlip9cXFwiO1xcbiAgICAgICAgICAgIH0sIHRpdGxlLCBpbmRleCk7XFxuICAgICAgICB9O1xcbiAgICAgICAgYnJlYWs7XFxuXFxufVxcbmZvciAobGV0IGkgaW4gcGFyc2VVcmxBcnJheSkge1xcbiAgICBsZXQgaXRlbSA9IHBhcnNlVXJsQXJyYXlbaV0uc3BsaXQoXFxcIiYmXFxcIik7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogc2VsZWN0ZWQgPT0gaXRlbVsxXSA/IFxcXCLigJjigJhcXFwiICsgaXRlbVswXSArIFxcXCLigJnigJlcXFwiIDogaXRlbVswXSxcXG4gICAgICAgIHVybDogZnVuYyhpdGVtWzFdLCBpdGVtWzBdLCBpKSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8zXFxcIlxcbiAgICB9KTtcXG59XFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5Li76aKY566h55CGXCIsXCJwYXRoXCI6XCJ0aGVtZVwiLFwicnVsZVwiOlwianM6XFxuICAgIGZ1bmN0aW9uIHRoZW1lSW5pdCgpe1xcbiAgICAgICAgY29uc3Qge2NvbG9yLHNtYWxsfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3V0aWxpeT9ydWxlPemBk+mVv+S7k+W6k1Byb1xcXCIpO1xcbiAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgIGxldCBvcHRpb25zID0gWyfpgInmi6knLCfkv67mlLknLCfliKDpmaQnLCflr7zlh7onXTtcXG5cXG4gICAgICAgIGZvcih2YXIgaSBpbiBvcHRpb25zKXtcXG4gICAgICAgICAgICBsZXQgb3B0aW9uID0gb3B0aW9uc1tpXTtcXG4gICAgICAgICAgICBsZXQgZmxhZyA9IGdldFZhcigndGhlbWUuZG5fb3B0aW9uJywn5paw5aKeJyk9PT1vcHRpb24/J/CfkYknOicnO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOmZsYWcrb3B0aW9uLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICAgICAgICAgIHVybDokKG9wdGlvbikubGF6eVJ1bGUoKCk9PntcXG4gICAgICAgICAgICAgICAgICAgIHB1dFZhcigndGhlbWUuZG5fb3B0aW9uJywgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey6K6+572u5pON5L2c57G75Z6L5Li6OicraW5wdXQ7XFxuICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgbGV0IHRoZW1lUm91dGUgPSBcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVRoZW1lLmpzb25cXFwiO1xcbiAgICAgICAgbGV0IG15VGhlbWVzID0ge307XFxuICAgICAgICBsZXQgdGhlbWVzID0ge307XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIG15VGhlbWVzID0gSlNPTi5wYXJzZShmZXRjaCh0aGVtZVJvdXRlKSk7XFxuICAgICAgICAgICAgdGhlbWVzID0gbXlUaGVtZXMudGhlbWVzW215VGhlbWVzLm5vd190aGVtZV07XFxuICAgICAgICB9Y2F0Y2ggKGUpIHt9XFxuXFxuXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiflr7zlhaUnLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICB1cmw6JCgnJywn6K+36L6T5YWl5a+85YWl5Y+j5LukJykuaW5wdXQoKG15VGhlbWVzLHRoZW1lUm91dGUpPT57XFxuICAgICAgICAgICAgICAgIGlmKC9e5pat5o+S5Li76aKYQC4qP0BodHRwLy50ZXN0KGlucHV0KSl7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgbmFtZSA9IGlucHV0LnNwbGl0KCdAJylbMV07XFxuICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gaW5wdXQuc3BsaXQoJ0AnKVsyXTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKCfnoa7lrpropoHlr7zlhaXmlq3mj5LkuLvpopgtJytuYW1lKycg5ZCXPycpLmNvbmZpcm0oKG5hbWUsdXJsLG15VGhlbWVzLHRoZW1lUm91dGUpPT57XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSBwYXJzZVBhc3RlKHVybCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGhhc1RoZW1lID0gbXlUaGVtZXMudGhlbWVzLmZpbHRlcihpdD0+aXQubmFtZT09PW5hbWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGhhc1RoZW1lJiZoYXNUaGVtZS5sZW5ndGg+MCl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpZCA9IG51bGw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaiBpbiBteVRoZW1lcy50aGVtZXMpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobXlUaGVtZXMudGhlbWVzW2pdLm5hbWUgPT09IG5hbWUpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gajtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighaWQpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+e0ouW8lemUmeivr+aXoOazleimhuebluWvvOWFpTpcXFxcbicraWRcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2coJ+imhuebluWvvOWFpeS4u+mimGlkOicraWQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVRoZW1lcy50aGVtZXNbaWRdID0gT2JqZWN0LmFzc2lnbihKU09OLnBhcnNlKGJhc2U2NERlY29kZShjb250ZW50KSkseyduYW1lJzpuYW1lfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15VGhlbWVzLnRoZW1lcy5wdXNoKE9iamVjdC5hc3NpZ24oSlNPTi5wYXJzZShiYXNlNjREZWNvZGUoY29udGVudCkpLHsnbmFtZSc6bmFtZX0pKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9nKG15VGhlbWVzKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUodGhlbWVSb3V0ZSxKU09OLnN0cmluZ2lmeShteVRoZW1lcykpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LmiJDlip/lr7zlhaXkuLvpopg6XFxcXG4nK25hbWVcXG4gICAgICAgICAgICAgICAgICAgIH0sbmFtZSx1cmwsbXlUaGVtZXMsdGhlbWVSb3V0ZSk7XFxuICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aXoOazleivhuWIq+eahOWvvOWFpeWPo+S7pDpcXFxcbicraW5wdXQ7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9LG15VGhlbWVzLHRoZW1lUm91dGUpLFxcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOifmlrDlop4nLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICB1cmw6JCgpLnJ1bGUoKG15VGhlbWVzLHRoZW1lUm91dGUpPT57XFxuICAgICAgICAgICAgICAgIGxldCBkPVtdO1xcbiAgICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignb25DbG9zZScsICQudG9TdHJpbmcoKCk9PntcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICB9KSk7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+S4u+mimOWQjeensCcsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi5pat5o+SLeiTneiOk+S4u+mimFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBcXFwicHV0VmFyKCd0aGVtZS5uZXdfYWRkX25hbWUnLGlucHV0KVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVWaXNpYmxlOiB0cnVlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0VmFyKCd0aGVtZS5uZXdfYWRkX25hbWUnLCAnJylcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICB1cmw6JC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld19hZGRfbmFtZSA9IGdldFZhcigndGhlbWUubmV3X2FkZF9uYW1lJywgJycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/kvaDovpPlhaXnmoTmmK86JytuZXdfYWRkX25hbWU7XFxuICAgICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIuS7o+eggVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVWaXNpYmxlOiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldFZhcigndGhlbWUubmV3X2FkZF9jb2RlJywgJycpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFxcXCJ0ZXh0YXJlYVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0Oi0xLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiAncHV0VmFyKFxcXCJ0aGVtZS5uZXdfYWRkX2NvZGVcXFwiLGlucHV0KSdcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTon5L+d5a2YJyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOid0ZXh0X2NlbnRlcl8xJyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDokKCkubGF6eVJ1bGUoKG15VGhlbWVzLHRoZW1lUm91dGUpPT57XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSBnZXRWYXIoJ3RoZW1lLm5ld19hZGRfY29kZScsICcnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmFtZSA9IGdldFZhcigndGhlbWUubmV3X2FkZF9uYW1lJywgJycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFuYW1lKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S9oOi/mOayoeWhq+WGmeS4u+mimOWQjeensOWRoidcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld1RoZW1lID0ge307XFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VGhlbWUgPSBKU09OLnBhcnNlKGNvZGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1jYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6ZSZ6K+v55qE5Li76aKYanNvbuagvOW8jzpcXFxcbicrZS5tZXNzYWdlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKG5ld1RoZW1lLHsnbmFtZSc6bmFtZX0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG15VGhlbWVzLnRoZW1lcy5wdXNoKG5ld1RoZW1lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUodGhlbWVSb3V0ZSxKU09OLnN0cmluZ2lmeShteVRoZW1lcykpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LmlrDlop7mlq3mj5LkuLvpopg6JytuYW1lXFxuICAgICAgICAgICAgICAgICAgICB9LG15VGhlbWVzLHRoZW1lUm91dGUpXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgICAgICAgICAgfSxteVRoZW1lcyx0aGVtZVJvdXRlKSxcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTpteVRoZW1lcy50aGVtZXM/J+S4u+mimOWIl+ihqDrlhbHorqE6Jytjb2xvcihteVRoZW1lcy50aGVtZXMubGVuZ3RoLCcjZmY3MDAwJykrJ+S4quS4u+mimCc6XFxcIuesrOS4gOasoeWKoOi9ve+8jOeCueatpOi/m+WOu+WIneWni+WMluS4u+mimOWIl+ihqFxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfMScsXFxuICAgICAgICAgICAgdXJsOidoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU96K6+572uI25vSGlzdG9yeSMnXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6XFxcIuaBouWkjeWHuuWOguiuvue9rlxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfY2VudGVyXzEnLFxcbiAgICAgICAgICAgIHVybDokKFxcXCLlpoLmnpzkvaDnmoTkuLvpopjmsqHms5XmraPluLjnlKjkuobvvIzmraTmlrnms5Xlj6/ku6XmlZHnoJbvvIznoa7orqTmgaLlpI0/XFxcIikuY29uZmlybSgoKT0+e1xcbiAgICAgICAgICAgICAgICBsZXQgdGhlbWVzID0ge25hbWU6J+m7mOiupOS4u+mimCcsY2xvc2VCdG46e2NvbG9yOicjZjZmNmY2JyxiYWNrZ3JvdW5kOicjYWE5NmRhJ30sc2F2ZUJ0bjp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyMwNjgwMDYnfSxzYXZlQ2xvc2VCdG46e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjMDVCRkM1J30sdGlwc0J0bjp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyMwNUJGQzUnfSxiYXJsYWJlbDp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyNhYTk2ZGEnfSxiYXJJbnB1dDp7Y29sb3I6JyNhYTk2ZGEnLGJhY2tncm91bmQ6JyNmZmZmZDInfSxzZWxlY3Q6e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjYWE5NmRhJ30sfTtcXG4gICAgICAgICAgICAgICAgbGV0IHRoZW1lRGVmID0ge1xcXCJuYW1lXFxcIjpcXFwi5pat5b+15Y6f55quXFxcIixcXFwiY2xvc2VCdG5cXFwiOntcXFwiY29sb3JcXFwiOlxcXCIjRjlGMERBXFxcIixcXFwiYmFja2dyb3VuZFxcXCI6XFxcIiNjNTQ2NGFcXFwifSxcXFwic2F2ZUJ0blxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNGOUYwREFcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiIzA2ODAwNlxcXCJ9LFxcXCJzYXZlQ2xvc2VCdG5cXFwiOntcXFwiY29sb3JcXFwiOlxcXCIjRjlGMERBXFxcIixcXFwiYmFja2dyb3VuZFxcXCI6XFxcIiMwNUJGQzVcXFwifSxcXFwidGlwc0J0blxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNGOUYwREFcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiIzA1QkZDNVxcXCJ9LFxcXCJiYXJsYWJlbFxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNGOUYwREFcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiI0QwNkI2Q1xcXCJ9LFxcXCJiYXJJbnB1dFxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNEMDZCNkNcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiI0Y5RjBEQVxcXCJ9LFxcXCJzZWxlY3RcXFwiOntcXFwiY29sb3JcXFwiOlxcXCIjRjlGMERBXFxcIixcXFwiYmFja2dyb3VuZFxcXCI6XFxcIiNEMDZCNkNcXFwifX07XFxuICAgICAgICAgICAgICAgIGxldCB0aGVtZVJvdXRlID0gXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlUaGVtZS5qc29uXFxcIjtcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKHRoZW1lUm91dGUsSlNPTi5zdHJpbmdpZnkoe25vd190aGVtZTon6buY6K6k5Li76aKYJyx0aGVtZXM6W3RoZW1lcyx0aGVtZURlZl19KSk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pat5o+S5Li76aKY5bey6YeN572u5Li65Ye65Y6C6K6+572uJ1xcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KTtcXG4gICAgICAgIGZvcih2YXIgaSBpbiBteVRoZW1lcy50aGVtZXMpe1xcbiAgICAgICAgICAgIGxldCBub3dUaGVtID0gbXlUaGVtZXMudGhlbWVzW2ldO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOm15VGhlbWVzLm5vd190aGVtZT09PW5vd1RoZW0ubmFtZT8n8J+RiScrbm93VGhlbS5uYW1lOm5vd1RoZW0ubmFtZSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6J2ZsZXhfYnV0dG9uJyxcXG4gICAgICAgICAgICAgICAgdXJsOiQoKS5sYXp5UnVsZSgobXl0aGVtZSxteVRoZW1lcyxpLHRoZW1lUm91dGUpPT57XFxuICAgICAgICAgICAgICAgICAgICBsZXQgb3B0aW9uID0gZ2V0VmFyKCd0aGVtZS5kbl9vcHRpb24nLCfmlrDlop4nKTtcXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0aW9uKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICflr7zlh7onOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbXl0aGVtZUNvZGUgPSBiYXNlNjRFbmNvZGUoSlNPTi5zdHJpbmdpZnkobXl0aGVtZSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gc2hhcmVQYXN0ZShteXRoZW1lQ29kZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlID0gJ+aWreaPkuS4u+mimEAnK215dGhlbWUubmFtZSsnQCcrdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5KGNvZGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5a+85Ye65Li65LqR5Y+j5Luk5bm25aSN5Yi25Yiw5Ymq5YiH5p2/J1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ+S/ruaUuSc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKEpTT04uc3RyaW5naWZ5KG15dGhlbWUpKS5pbnB1dCgobXl0aGVtZSxteVRoZW1lcyxpLHRoZW1lUm91dGUpPT57XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihteXRoZW1lLm5hbWU9PT1teVRoZW1lcy5ub3dfdGhlbWUpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mraTkuLvpopjlvZPliY3mraPlnKjkvb/nlKjkuK3vvIzkuI3lhYHorrjkv67mlLkhJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlUaGVtZXMudGhlbWVzW2ldPUpTT04ucGFyc2UoaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKHRoZW1lUm91dGUsSlNPTi5zdHJpbmdpZnkobXlUaGVtZXMpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suS/ruaUuSdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxteXRoZW1lLG15VGhlbWVzLGksdGhlbWVSb3V0ZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICfliKDpmaQnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgn56Gu6K6k5Yig6Zmk5Li76aKYOicrbXl0aGVtZS5uYW1lKyc/JykuY29uZmlybSgobXl0aGVtZSxteVRoZW1lcyxpLHRoZW1lUm91dGUpPT57XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihteXRoZW1lLm5hbWU9PT1teVRoZW1lcy5ub3dfdGhlbWUpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mraTkuLvpopjlvZPliY3mraPlnKjkvb/nlKjkuK3vvIzkuI3lhYHorrjliKDpmaQhJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlUaGVtZXMudGhlbWVzLnNwbGljZShpLDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKHRoZW1lUm91dGUsSlNPTi5zdHJpbmdpZnkobXlUaGVtZXMpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suWIoOmZpCdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxteXRoZW1lLG15VGhlbWVzLGksdGhlbWVSb3V0ZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVRoZW1lcy5ub3dfdGhlbWU9bXl0aGVtZS5uYW1lO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUodGhlbWVSb3V0ZSxKU09OLnN0cmluZ2lmeShteVRoZW1lcykpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S9oOmAieaLqeS6hicrbXl0aGVtZS5uYW1lKyfkvZzkuLrpu5jorqTkuLvpopgnO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9LG5vd1RoZW0sbXlUaGVtZXMsaSx0aGVtZVJvdXRlKSxcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgfVxcbiQuZXhwb3J0cy50aGVtZUluaXQ9dGhlbWVJbml0O1wifSx7XCJuYW1lXCI6XCLmk43kvZzmjIflvJVcIixcInBhdGhcIjpcIkd1aWRlXCIsXCJydWxlXCI6XCI8aHRtbD5cXG48aGVhZD5cXG4gICAgPG1ldGEgY2hhcnNldD1cXFwiVVRGLThcXFwiPlxcbjwvaGVhZD5cXG48Ym9keT5cXG48c3Ryb25nPiA8YmlnPuaLieWPluevhzwvYmlnPiA8L3N0cm9uZz5cXG48YnIgLz4g5pON5L2c6aG65bqP77yaXFxuPGJyIC8+IDEu5pu05paw6YGT6ZW/5LuT5bqTUHJv5YiwNzbniYjmnKxcXG48YnIgLz4gMi7mi4nlj5bkuLvmj5Lku7blkoznvZHpobXohJrmnKxcXG48YnIgLz4gMy7mjqjojZDnm7TmjqXmi4nlj5bku6PnoIE8cz7mi4nlj5bliJfooajihpLmi4nlj5bku6PnoIE8L3M+XFxuPGJyIC8+XFxuPGJyIC8+XFxuPHN0cm9uZz48YmlnPuWPo+S7pOevhzwvYmlnPjwvc3Ryb25nPlxcbjxiciAvPummlumhtei+k+WFpeahhuaUr+aMge+8mlxcbjxiciAvPjEu5YiG5Lqr5Ye65p2l55qE5ZCM57O75YiX5o+S5Lu25LqR5Ymq6LS05p2/5Y+j5LukXFxuPGJyIC8+Mi7mnKrliqDlr4bnmoTlkIzns7vliJfmj5Lku7blnLDlnYAs5pSv5oyB5pys5Zyw5paH5Lu25aaC5Lul5LiL5qC85byP5byA5aS055qEOmZpbGU6Ly8saGlrZXI6Ly8sL3N0b3JhZ2VcXG48YnIgLz4zLlHnpZ5cXG48YnIgLz40LuaWreaPklxcbjxiciAvPjUuI+mBk+mVv+eyvumAiVxcbjxiciAvPjYuI2Lnq5lcXG48YnIgLz43LiPlgI3pmYZcXG48YnIgLz5cXG48YnIgLz5cXG48c3Ryb25nPjxiaWc+57yW6L6R56+HPC9iaWc+PC9zdHJvbmc+XFxuPGJyIC8+6ZqQ6JeP5Yqf6IO96ZyA55+l77yaXFxuPGJyIC8+6ZqQ6JeP5Yqf6IO95piv5LuO5YiX6KGo5LiK5Yig6Zmk5qCH6aKY77yM5pWF5peg5aSN546w5Yqf6IO9XFxuPGJyIC8+55yL5YeG5LqG77yM5LiN55So55qE5omN54K56ZqQ6JePXFxuPGJyIC8+6KaB5aSN546w55qE6K+d5Y675L+u5pS55paw55qETXlQYXJzZS5qc29u77yM5ZyodGl0bGXnmoTmlbDnu4TpgqPmjInmoLzlvI/mt7vliqDmoIfpophcXG48YnIgLz5cXG48YnIgLz5cXG48c3Ryb25nPjxiaWc+5a6M57uTPC9iaWc+PGJyIC8+PC9zdHJvbmc+XFxuPHA+djMuNDks5bCP55m95pyA5ZCO55qE5YCU5by6LOWwj+eZveWFs+aAgOaooeW8jzwvcD5cXG48cD7kuIDplK7lrp7njrDphY3nva7lrozmr5XljbPlj6/pgJrov4fmlK/mjIHprZTmlq3nmoTlsI/nqIvluo/nnIvop4bpopHvvIzlm57lvZLnmb3lq5bop4bpopHov5nkuKrpnIDmsYLmnKzouqs8L3A+XFxuPHA+5o6o6I2Q5L2/55So6Z2S6LGGLGFwcOW9seinhi5kcDwvcD5cXG48cD7prZTmlq0o5pat5o+S6YGT6ZW/6a2U5pS554mIKeW3suW8g+Wdkei3kei3r++8jOaEn+iwouWOn+S9nOiAheaWreW/teeahOaPkuS7tuino+aekOWPiuacrOWwj+eoi+W6j+aguOW/g+S7o+eggTwvcD5cXG48L2JvZHk+XFxuPC9odG1sPlwifSx7XCJuYW1lXCI6XCLmtYvor5XmlbDmja5cIixcInBhdGhcIjpcImRlbW9EYXRhXCIsXCJydWxlXCI6XCJqczpcXG4gICAgbGV0IGRlbW9EYXRhID0ge1xcbiAgICAgICAg54ix5aWH6Im6OlsnaHR0cHM6Ly93d3cuaXFpeWkuY29tL3ZfMXpwN3FnaDIza2cuaHRtbCcsJ2h0dHBzOi8vd3d3LmlxaXlpLmNvbS92XzJiYzh0azhyNnVnLmh0bWwnXSxcXG4gICAgICAgIOS8mOmFtzpbJ2h0dHBzOi8vdi55b3VrdS5jb20vdl9zaG93L2lkX1hOVEU0TlRneE1UWTJNQT09Lmh0bWwnLCdodHRwczovL3YueW91a3UuY29tL3Zfc2hvdy9pZF9YTlRFNU9EWXhNakF6Tmc9PS5odG1sJ10sXFxuICAgICAgICDohb7orq86WydodHRwczovL3YucXEuY29tL3gvY292ZXIvbTQ0MWUzcmpxOWt3cHNjL3AwMDQwZ2ltNGZ6Lmh0bWwnLCdodHRwczovL3YucXEuY29tL3gvY292ZXIvbXpjMDAyMDB4aDkzMTN2L3owMDM5dGJobzdxLmh0bWwnXSxcXG4gICAgICAgIOiKkuaenDpbJ2h0dHBzOi8vd3d3Lm1ndHYuY29tL2IvMzcyMDYxLzEyMTkzNTU4Lmh0bWwnLCdodHRwczovL3d3dy5tZ3R2LmNvbS9iLzM2MzI4Ni8xNDI5NTgyMy5odG1sJ10sXFxuICAgICAgICDlk5Tlk6nlk5Tlk6k6WydodHRwczovL3d3dy5iaWxpYmlsaS5jb20vYmFuZ3VtaS9wbGF5L2VwMzgxMjE3JywnaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL2Jhbmd1bWkvcGxheS9lcDQwODEyMycsJ2h0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9iYW5ndW1pL3BsYXkvc3MzMzQzNCcsJ2h0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS92aWRlby9hdjMzNjM0ODY2MyddLFxcbiAgICAgICAg5pCc54uQOlsnaHR0cHM6Ly9maWxtLnNvaHUuY29tL2FsYnVtLzk0NTc1ODQuaHRtbCcsJ2h0dHBzOi8vZmlsbS5zb2h1LmNvbS9hbGJ1bS85MTgyNjQ2Lmh0bWwnXSxcXG4gICAgICAgIOilv+eTnDpbJ2h0dHBzOi8vd3d3Lml4aWd1YS5jb20vNjU1MTMzMjEyNTY1NDY0NzMxMCcsJ2h0dHBzOi8vd3d3Lml4aWd1YS5jb20vNjY5OTM1Njc5MjkwNTc5NDA1NSddLFxcbiAgICAgICAgUFBUVjpbJ2h0dHA6Ly92LnBwdHYuY29tL3Nob3cvVEluZFdzSW9tTlk1dHg4Lmh0bWwnLCdodHRwOi8vdi5wcHR2LmNvbS9zaG93L1NDUTV0aDZFOURLVkUzcy5odG1sJ10sXFxuICAgICAgICDlkqrlkpU6WydodHRwczovL3d3dy5taWd1dmlkZW8uY29tL21ncy93ZWJzaXRlL3ByZC9kZXRhaWwuaHRtbD9jaWQ9NjMzNTExNzQzJywnaHR0cHM6Ly93d3cubWlndXZpZGVvLmNvbS9tZ3Mvd2Vic2l0ZS9wcmQvZGV0YWlsLmh0bWw/Y2lkPTcxNjI3MDMxOSddLFxcbiAgICAgICAg5LmQ6KeGOlsnaHR0cDovL3d3dy5sZS5jb20vcHR2L3ZwbGF5Lzc1ODQzMDU5Lmh0bWwnLCdodHRwOi8vd3d3LmxlLmNvbS9wdHYvdnBsYXkvMjQyMjA5MDEuaHRtbCN2aWQ9MjQyMjA5MDEnXSxcXG4gICAgICAgIDE5MDU6WydodHRwczovL3ZpcC4xOTA1LmNvbS9wbGF5Lzg3NTc0MC5zaHRtbCcsJ2h0dHBzOi8vd3d3LjE5MDUuY29tL3ZvZC9wbGF5Lzg4MDY0MS5zaHRtbCddLFxcbiAgICAgICAg6aOO6KGMOlsnaHR0cDovL3d3dy5mdW4udHYvdnBsYXkvZy0zMDQxNDMnLCdodHRwOi8vd3d3LmZ1bi50di92cGxheS9nLTEwMDg5NjMvJ10sXFxuICAgICAgICDpvpnohb46WydMVC0xZWMzZjY3NTRmNjg1ODZlZDdmOTJjM2U5OTVjZmNhNicsJ0xULWZmZjQ3YWJmN2ZmMjJmZmEzZGVmOTA0YzZjOTFlMTkyJywnTFQtN2NjZGE2ODY4MzMyOTc4MGJkNzI2NGM4ZjllZGQ5MGUnXSxcXG4gICAgICAgIOS6uuS6uui/tzpbJ3JlbnJlbm1pLWFiOTI0ZTExZDJkNjkzOTcnLCdyZW5yZW5taS05MjY0MGU4ZGM0Y2FkODNhJ10sXFxuICAgICAgICDkupTmr5I6Wyd3dWR1eXVuLTE2NDk0MzEzMDcwMjEnXSxcXG4gICAgICAgIOWkmuWkmjpbJ2h0dHBzOi8vbTN1OC5jYWNoZS5zdW95by5jYy9tM3U4LzIwMjIwMy84L2FhYWJkOTJkYTI2Nzc0YzY4ODUwYTAyMzE1M2M4MGYxYWU2ZmE5YmUubTN1OCddLFxcbiAgICAgICAg6J6N5YW0OlsnUm9uZ1hpbmdWUi00MjE1NjQ1NTgxOTMyJywnUm9uZ1hpbmdWUi00MjE1NjQ1NTg3MDAwJ10sXFxuICAgICAgICDpm6rkuro6Wyd4dWVyZW4tMTY0NjgyMzA3MicsJ3h1ZXJlbi0xNjQ5NDAyNzUzJywneHVlcmVuLTE2NDkxNzUyNTInLCd4dWVyZW4tMTY0OTMwNzc4MCcsJ3h1ZXJlbi0xNjQ4NzgxNDc1J10sXFxuICAgICAgICDml4vpo47kupE6Wyd4ZnktNTI5ZTY0NTc5NTNkNTQ1ZicsJ3hmeS1iNjU2MTVkYWM0Mzc3ZWUzJ10sXFxuICAgICAgICDnkZ7kuLDotYTmupA6WydodHRwczovLzEucnVpZmVuZ2xiLmNvbS9wbGF5LzE2NDQ5MTQ1OTUubTN1OCcsJ2h0dHBzOi8vMS5ydWlmZW5nbGIuY29tL3BsYXkvMTY0MjM4OTkwNy5tM3U4J10sXFxuICAgIH1cXG5cXG5sZXQgZGVmYXVsdFNldHMgPSAge1xcbiAgICBxeTogJ+S4h+iDveino+aekOKSvycsXFxuICAgIHlrOiAn5LiH6IO96Kej5p6Q4pK/JyxcXG4gICAgdHg6ICfkuIfog73op6PmnpDikr8nLFxcbiAgICBtZzogJ+S4h+iDveino+aekOKSvycsXFxuICAgIGJsOiAn5LiH6IO96Kej5p6Q4pK/JyxcXG4gICAgc2g6ICfkuIfog73op6PmnpDikr8nLFxcbiAgICB4ZzogJ+S4h+iDveino+aekOKSvycsXFxuICAgIGFsOiAn5LiH6IO96Kej5p6Q4pK/JyxcXG4gICAgcHA6ICfkuIfog73op6PmnpDikr8nLFxcbiAgICBtaTogJ+S4h+iDveino+aekOKSvycsXFxuICAgIGxlOiAn5LiH6IO96Kej5p6Q4pK/JyxcXG4gICAgb3RoOiAn6YGT6ZW/5LuT5bqT6YCa5YWNJyxcXG4gICAgZnVuOiAn5LiH6IO96Kej5p6Q4pK/JyxcXG4gICAgb25lOifkuIfog73op6PmnpDikr8nLFxcbiAgICBsdDon5LiH6IO96Kej5p6Q4pK/JyxcXG4gICAgcnI6J+S4h+iDveino+aekOKSvycsXFxuICAgIHdkOifkuIfog73op6PmnpDikr8nLFxcbiAgICBxanU6ICfpu5jorqQnLFxcbiAgICBjajogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnXFxufTtcXG5cXG5sZXQgZmxvb3JzID0gJ+KRoOKRoeKRouKRo+KRpOKRpeKRpuKRp+KRqOKRqe+8ke+8ku+8k++8lO+8le+8lu+8l++8mO+8me+8kOKSiOKSieKSiuKSi+KSjOKSjeKSjuKSj+KSkCcuc3BsaXQoJycpO1xcbmxldCBlbW9qaXMgPSAnI++4j+KDo3wq77iP4oOjfDDvuI/ig6N8Me+4j+KDo3wy77iP4oOjfDPvuI/ig6N8NO+4j+KDo3w177iP4oOjfDbvuI/ig6N8N++4j+KDo3w477iP4oOjfDnvuI/ig6N88J+FsO+4j3zwn4Wx77iPfPCfjYd88J+NiHzwn42JfPCfjYp88J+Ni3zwn42MfPCfjY188J+Njnzwn42PfPCfjZB88J+NkXzwn42SfPCfjZN88J+NhXzwn42GfPCfjL188J+NhHzwn4ywfPCfjZ588J+Nlnzwn42XfPCfjZR88J+Nn3zwn42VfPCfjbN88J+Nsnzwn42xfPCfjZh88J+NmXzwn42afPCfjZt88J+NnHzwn42dfPCfjaB88J+Nonzwn42jfPCfjaR88J+NpXzwn42hfPCfjaZ88J+Np3zwn42ofPCfjal88J+Nqnzwn46CfPCfjbB88J+Nq3zwn42sfPCfja188J+Nrnzwn42vfPCfjbx84piVfPCfjbV88J+Ntnzwn423fPCfjbh88J+NuXzwn426fPCfjbt88J+NtCcuc3BsaXQoJ3wnKTtcXG5mbG9vcnMgPSBmbG9vcnMuY29uY2F0KGVtb2ppcyk7XFxuJC5leHBvcnRzLmRlbW9EYXRhID0gZGVtb0RhdGE7XFxuJC5leHBvcnRzLmRlZmF1bHRTZXRzID0gZGVmYXVsdFNldHM7XFxuJC5leHBvcnRzLmZsb29ycyA9IGZsb29ycztcIn0se1wibmFtZVwiOlwi5bel5YW357G7XCIsXCJwYXRoXCI6XCJ1dGlsc1wiLFwicnVsZVwiOlwianM6XFxuLy/pmo/mnLrku47liJfooajmir3lj5bkuIDkuKrlhYPntKBcXG5mdW5jdGlvbiBnZXRPbmUoaXRzKSB7cmV0dXJuICBpdHNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKml0cy5sZW5ndGgpXTt9XFxuLy/ljrvph43vvIhFUzYgU2V077yJXFxuZnVuY3Rpb24gdW5pcXVlMihhcnJheSl7XFxuICAgIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoYXJyYXkpKTtcXG59XFxuLy/ojrflj5bliJfooajkuK3ph43lpI3pg73lgLxcXG5mdW5jdGlvbiBkdXBsaWNhdGVzKGFycikge1xcbiAgICBsZXQgcmVzPWFyci5maWx0ZXIoKHgsayk9PntcXG4gICAgICAgIGxldCBhPWsqMSsxO1xcbiAgICAgICAgbGV0IGluZGV4PWFyci5pbmRleE9mKHgsYSk7XFxuICAgICAgICBpZihpbmRleD4tMSl7XFxuICAgICAgICAgICAgcmV0dXJuIHg7XFxuICAgICAgICB9XFxuICAgIH0pXFxuICAgIGxldCByZT1uZXcgU2V0KHJlcyk7XFxuICAgIHJldHVybiBBcnJheS5mcm9tKHJlKTtcXG59XFxuJC5leHBvcnRzLmdldE9uZSA9IGdldE9uZTtcXG4kLmV4cG9ydHMudW5pcXVlMiA9IHVuaXF1ZTI7XFxuJC5leHBvcnRzLmR1cGxpY2F0ZXMgPSBkdXBsaWNhdGVzO1wifSx7XCJuYW1lXCI6XCLop6PmnpDnrqHnkIZcIixcInBhdGhcIjpcImp4TWFuYWdlXCIsXCJydWxlXCI6XCJqczpcXG4gICAgZnVuY3Rpb24ganhNYW5hZ2UoKXtcXG4gICAgICAgIGNvbnN0IHtjb2xvcixzbWFsbH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS91dGlsaXk/cnVsZT3pgZPplb/ku5PlupNQcm9cXFwiKTtcXG4gICAgICAgIGxldCBkID0gW107XFxuICAgICAgICBsZXQgb3B0aW9ucyA9IFsn6YCJ5oupJywn5L+u5pS5Jywn5Yig6ZmkJywn5a+85Ye6J107XFxuXFxuICAgICAgICBmb3IobGV0IGkgaW4gb3B0aW9ucyl7XFxuICAgICAgICAgICAgbGV0IG9wdGlvbiA9IG9wdGlvbnNbaV07XFxuICAgICAgICAgICAgbGV0IGZsYWcgPSBnZXRWYXIoJ2RuLmp4bV9vcHRpb24nLCfpgInmi6knKT09PW9wdGlvbj8n8J+RiSc6Jyc7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ZmxhZytvcHRpb24sXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKG9wdGlvbik9PntcXG4gICAgICAgICAgICAgICAgICAgIHB1dFZhcignZG4uanhtX29wdGlvbicsIG9wdGlvbik7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgICAgIH0sb3B0aW9uKSxcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCBqeHNSb3V0ZSA9IFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015SmlleGkuanNvblxcXCI7XFxuICAgICAgICBsZXQgZG1QYXRoID0gXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvZGlhb21hby50eHRcXFwiO1xcbiAgICAgICAgbGV0IE15SmlleGkgPSB7amlleGlzOltdfTtcXG4gICAgICAgIGxldCBqaWV4aXMgPSB7fTtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgTXlKaWV4aSA9IEpTT04ucGFyc2UoZmV0Y2goanhzUm91dGUpKTtcXG4gICAgICAgICAgICBqaWV4aXMgPSBNeUppZXhpLmppZXhpcy5maWx0ZXIoaXQ9Pml0Lm5hbWU9PT1NeUppZXhpLm5vdylbMF07XFxuICAgICAgICB9Y2F0Y2ggKGUpIHt9XFxuXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiflr7zlhaUnLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICB1cmw6JCgnJywn6K+36L6T5YWl5a+85YWl5Y+j5LukJykuaW5wdXQoKE15SmlleGksanhzUm91dGUpPT57XFxuICAgICAgICAgICAgICAgIGlmKC9e6a2U5pat6Kej5p6Q6YWN572uQC4qP0BodHRwLy50ZXN0KGlucHV0KSl7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgbmFtZSA9IGlucHV0LnNwbGl0KCdAJylbMV07XFxuICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gaW5wdXQuc3BsaXQoJ0AnKVsyXTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKCfnoa7lrpropoHlr7zlhaXmlq3mj5Lop6PmnpDphY3nva4tJytuYW1lKycg5ZCXPycpLmNvbmZpcm0oKG5hbWUsdXJsLE15SmlleGksanhzUm91dGUpPT57XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSBwYXJzZVBhc3RlKHVybCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGhhc0l0ID0gTXlKaWV4aS5qaWV4aXMuZmlsdGVyKGl0PT5pdC5uYW1lPT09bmFtZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoaGFzSXQmJmhhc0l0Lmxlbmd0aD4wKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlkID0gbnVsbDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBqIGluIE15SmlleGkuamlleGlzKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKE15SmlleGkuamlleGlzW2pdLm5hbWUgPT09IG5hbWUpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gajtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighaWQpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+e0ouW8lemUmeivr+aXoOazleimhuebluWvvOWFpTpcXFxcbicraWRcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2coJ+imhuebluWvvOWFpeS4u+mimGlkOicraWQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNeUppZXhpLmppZXhpc1tpZF0gPSBPYmplY3QuYXNzaWduKEpTT04ucGFyc2UoYmFzZTY0RGVjb2RlKGNvbnRlbnQpKSx7J25hbWUnOm5hbWV9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXMucHVzaChPYmplY3QuYXNzaWduKEpTT04ucGFyc2UoYmFzZTY0RGVjb2RlKGNvbnRlbnQpKSx7J25hbWUnOm5hbWV9KSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suaIkOWKn+WvvOWFpeino+aekOmFjee9rjpcXFxcbicrbmFtZVxcbiAgICAgICAgICAgICAgICAgICAgfSxuYW1lLHVybCxNeUppZXhpLGp4c1JvdXRlKTtcXG4gICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5peg5rOV6K+G5Yir55qE5a+85YWl5Y+j5LukOlxcXFxuJytpbnB1dDtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0sTXlKaWV4aSxqeHNSb3V0ZSksXFxuICAgICAgICB9KTtcXG5cXG4gICAgICAgIGxldCBpc0F1dG8gPSBNeUppZXhpLmlzQXV0bztcXG4gICAgICAgIGxldCBhdXRvTW9kZSA9IE15SmlleGkuYXV0b01vZGU7XFxuICAgICAgICBsZXQgc2luZ2xlQmFjayA9IE15SmlleGkuc2luZ2xlQmFja3x8ZmFsc2U7IC8v5ZCK5q+b5qih5byP44CC5Y2V5Liq57uT5p6c55u05o6l6L+U5Zue77yM5YGc5q2i5ZCO6Z2i55qEXFxuICAgICAgICBsZXQgaWdub3JlX214ID0gTXlKaWV4aS5pZ25vcmVfbXh8fGZhbHNlOyAvL+W/veeVpeWFjeWXhSzll4XmjqLkvJjlhYjmqKHlvI/kvb/nlKhcXG4gICAgICAgIGxldCB0aXBzID0gJ+ino+aekOmFjee9ruWIl+ihqDrlhbHorqE6Jytjb2xvcihNeUppZXhpLmppZXhpcy5sZW5ndGgsJyNmZjcwMDAnKSsn5Liq6YWN572uLOiHquWKqOaho+W8gOWFszonK2NvbG9yKGlzQXV0bz8n5byAJzon5YWzJywnI2ZmNzAwMCcpO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTpNeUppZXhpLmppZXhpcyYmTXlKaWV4aS5qaWV4aXMubGVuZ3RoPjA/dGlwczpcXFwi56ys5LiA5qyh5Yqg6L2977yM54K55q2k6L+b5Y675Yid5aeL5YyW6Kej5p6Q5YiX6KGoXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTondGV4dF8xJyxcXG4gICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoTXlKaWV4aSxqeHNSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgaWYoTXlKaWV4aS5qaWV4aXMmJk15SmlleGkuamlleGlzLmxlbmd0aD4wKXtcXG4gICAgICAgICAgICAgICAgICAgIE15SmlleGkuaXNBdXRvID0gIU15SmlleGkuaXNBdXRvO1xcbiAgICAgICAgICAgICAgICAgICAgaWYoIU15SmlleGkuYXV0b01vZGUpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIE15SmlleGkuYXV0b01vZGUgPSAn5ZeF5o6i5LyY5YWIJztcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB0aXBzID0gTXlKaWV4aS5pc0F1dG8/J+W8gCc6J+WFsyc7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey6K6+572u6Ieq5Yqo5qGj5qih5byP5Li6OicrdGlwc1xcbiAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBpbml0U2V0ID0geydub3cnOlxcXCLpgZPplb/mjqjojZBcXFwiLCdqaWV4aXMnOlt7bmFtZTon6YGT6ZW/5o6o6I2QJyxxeTpbJ+S4h+iDveino+aekOKSvyddLHlrOlsn5LiH6IO96Kej5p6Q4pK/J10sdHg6WyfkuIfog73op6PmnpDikr8nXSxtZzpbJ+S4h+iDveino+aekOKSvyddLGJsOlsn5LiH6IO96Kej5p6Q4pK/J10sc2g6WyfkuIfog73op6PmnpDikr8nXSx4ZzpbJ+S4h+iDveino+aekOKSvyddLHBwOlsn5LiH6IO96Kej5p6Q4pK/J10sbWk6WyfkuIfog73op6PmnpDikr8nXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGU6WyfkuIfog73op6PmnpDikr8nXSxmdW46WyfkuIfog73op6PmnpDikr8nXSxvbmU6WyfkuIfog73op6PmnpDikr8nXSxsdDpbJ+S4h+iDveino+aekOKSvyddLHJyOlsn5LiH6IO96Kej5p6Q4pK/J10sd2Q6WyfkuIfog73op6PmnpDikr8nXX1dfTtcXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShpbml0U2V0KSk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mlq3mj5Lop6PmnpDphY3nva7lt7LliJ3lp4vljJYnXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9LE15SmlleGksanhzUm91dGUpXFxuICAgICAgICB9KTtcXG4gICAgICAgIGxldCBjMSA9ICcjMTVhYjIxJztcXG4gICAgICAgIGxldCBjMiA9ICcjOTAwYTBhJztcXG4gICAgICAgIGxldCBhdXRvTW9kZVNlbCA9IFsn6YCf5bqm5LyY5YWIJywn6aG65bqP5LyY5YWIJywn5ZeF5o6i5LyY5YWIJ107XFxuICAgICAgICBsZXQgYXV0b01vZGVTZWxzID0gYXV0b01vZGVTZWwubWFwKChpdCk9PntcXG4gICAgICAgICAgICBpZihpdD09PU15SmlleGkuYXV0b01vZGUpe1xcbiAgICAgICAgICAgICAgICBpdCA9IGNvbG9yKGl0LGMxKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGl0XFxuICAgICAgICB9KTtcXG4gICAgICAgIGxldCBhdXRvTW9kZVRpcHMgPSBhdXRvTW9kZVNlbC5pbmNsdWRlcyhhdXRvTW9kZSk/YXV0b01vZGU6J+acquefpSc7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOnNtYWxsKFxcXCLlpIfog47lrqDlubjmlrnmoYg6XFxcIikrY29sb3IoYXV0b01vZGVUaXBzLCcjZmY3MDAwJyksXFxuICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfMicsXFxuICAgICAgICAgICAgdXJsOiQoYXV0b01vZGVTZWxzLDMsJ+ivt+mAieaLqeiHquWKqOaho+aooeW8jycpLnNlbGVjdCgoTXlKaWV4aSxqeHNSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgaW5wdXQgPSAvZm9udC8udGVzdChpbnB1dCk/aW5wdXQuc3BsaXQoJz4nKVsxXS5zcGxpdCgnPCcpWzBdOmlucHV0O1xcbiAgICAgICAgICAgICAgICBpZihpbnB1dCE9PU15SmlleGkuYXV0b01vZGUpe1xcbiAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5hdXRvTW9kZSA9IGlucHV0O1xcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey6K6+572u5aSH6IOO5a6g5bm45pa55qGI5Li6OicraW5wdXRcXG4gICAgICAgICAgICB9LE15SmlleGksanhzUm91dGUpLFxcbiAgICAgICAgfSk7XFxuXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOmNvbG9yKFxcXCLmgaLlpI3lh7rljoLorr7nva5cXFwiLCcjZmY3MDAwJyksXFxuICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfMicsXFxuICAgICAgICAgICAgdXJsOiQoXFxcIuWmguaenOS9oOeahOino+aekOeuoeeQhuaXoOazleato+W4uOeUqOS6hu+8jOatpOaWueazleWPr+S7peaVkeeglu+8jOehruiupOaBouWkjT9cXFwiKS5jb25maXJtKChqeHNSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgbGV0IGluaXRTZXQgPSB7J25vdyc6XFxcIumBk+mVv+aOqOiNkFxcXCIsJ2ppZXhpcyc6W3tuYW1lOifpgZPplb/mjqjojZAnLHF5Olsn5LiH6IO96Kej5p6Q4pK/J10seWs6WyfkuIfog73op6PmnpDikr8nXSx0eDpbJ+S4h+iDveino+aekOKSvyddLG1nOlsn5LiH6IO96Kej5p6Q4pK/J10sYmw6WyfkuIfog73op6PmnpDikr8nXSxzaDpbJ+S4h+iDveino+aekOKSvyddLHhnOlsn5LiH6IO96Kej5p6Q4pK/J10scHA6WyfkuIfog73op6PmnpDikr8nXSxtaTpbJ+S4h+iDveino+aekOKSvyddLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlOlsn5LiH6IO96Kej5p6Q4pK/J10sZnVuOlsn5LiH6IO96Kej5p6Q4pK/J10sb25lOlsn5LiH6IO96Kej5p6Q4pK/J10sbHQ6WyfkuIfog73op6PmnpDikr8nXSxycjpbJ+S4h+iDveino+aekOKSvyddLHdkOlsn5LiH6IO96Kej5p6Q4pK/J119XX07XFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShpbml0U2V0KSk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pat5o+S6Kej5p6Q6YWN572u5bey6YeN572u5Li65Ye65Y6C6K6+572uJ1xcbiAgICAgICAgICAgIH0sanhzUm91dGUpXFxuICAgICAgICB9KTtcXG5cXG4gICAgICAgIGxldCBjYWNoZVZpZGVvU3dpdGNoID0gZ2V0VmFyKCdkcC5jYWNoZVZpZGVvJywndHJ1ZScpPT09J3RydWUnPyflvIAnOiflhbMnO1xcbiAgICAgICAgbGV0IGp4VGltZW91dCA9IGdldFZhcignZHAuanhUaW1lb3V0JywnNzAwMCcpO1xcbiAgICAgICAgbGV0IGNvbF90eXBlMiA9IGF1dG9Nb2RlPT09J+mhuuW6j+S8mOWFiCc/J3RleHRfMyc6J3RleHRfMic7XFxuICAgICAgICBsZXQgc2luZ2xlQmFja1RpcHMgPSBzaW5nbGVCYWNrPyflvIAnOiflhbMnO1xcbiAgICAgICAgbGV0IGlnbm9yZV9teF90aXBzID0gaWdub3JlX214PyflvIAnOiflhbMnO1xcbiAgICAgICAgaWYoYXV0b01vZGU9PT0n6aG65bqP5LyY5YWIJyl7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6c21hbGwoJ+WQiuavm+aooeW8jzonKStjb2xvcihzaW5nbGVCYWNrVGlwcywnI2ZmNzAwMCcpLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTpjb2xfdHlwZTIsXFxuICAgICAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChNeUppZXhpLGp4c1JvdXRlKT0+e1xcbiAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5zaW5nbGVCYWNrID0gIShNeUppZXhpLnNpbmdsZUJhY2t8fGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lorr7nva7lkIrmr5vmqKHlvI/lvIDlhbPkuLo6JysoTXlKaWV4aS5zaW5nbGVCYWNrPyflvIAnOiflhbMnKVxcbiAgICAgICAgICAgICAgICB9LE15SmlleGksanhzUm91dGUpXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9ZWxzZSBpZihhdXRvTW9kZT09PSfll4XmjqLkvJjlhYgnKXtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGNvbG9yKCflr7zlhaXovoXliqknLCcjZmY3MDAwJyksXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTpjb2xfdHlwZTIsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJ2hpa2VyOi8vZW1wdHkjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoJ2h0dHBzOi8vbmV0Y3V0LmNuL3AvYTVkMWM4ZTFlY2VlMjhkMycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0gaHRtbC5tYXRjaCgvey4qbm90ZV9jb250ZW50Lip1cGRhdGVkX2F0Lip9LylbMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSBKU09OLnBhcnNlKGRhdGEpLm5vdGVfY29udGVudDtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXBEYXRhID0gSlNPTi5wYXJzZShkYXRhKS51cGRhdGVkX2F0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm0oe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+aYr+WQpuWvvOWFpScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICfohJrmnKzmm7TmlrDml6XmnJ9cXFxcbicgKyB1cERhdGEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm06JC50b1N0cmluZygoY29udGVudCk9PntcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZW50XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sY29udGVudCksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbDogKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suWPlua2iOWvvOWFpSc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICApO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOnNtYWxsKCflv73nlaXlhY3ll4U6JykrY29sb3IoaWdub3JlX214X3RpcHMsJyNmZjcwMDAnKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6Y29sX3R5cGUyLFxcbiAgICAgICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoTXlKaWV4aSxqeHNSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgICAgIE15SmlleGkuaWdub3JlX214ID0gIShNeUppZXhpLmlnbm9yZV9teHx8ZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lorr7nva7lv73nlaXlhY3ll4XlvIDlhbPkuLo6JysoTXlKaWV4aS5pZ25vcmVfbXg/J+W8gCc6J+WFsycpXFxuICAgICAgICAgICAgICAgIH0sTXlKaWV4aSxqeHNSb3V0ZSlcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6c21hbGwoJ+Wkmue6v+i3r+e8k+WtmDonKStjb2xvcihjYWNoZVZpZGVvU3dpdGNoLCcjZmY3MDAwJyksXFxuICAgICAgICAgICAgY29sX3R5cGU6Y29sX3R5cGUyLFxcbiAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChjYWNoZVZpZGVvU3dpdGNoKT0+e1xcbiAgICAgICAgICAgICAgICBpZihjYWNoZVZpZGVvU3dpdGNoPT09J+W8gCcpe1xcbiAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCdkcC5jYWNoZVZpZGVvJywnZmFsc2UnKTtcXG4gICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ2RwLmNhY2hlVmlkZW8nLCd0cnVlJyk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICB9LGNhY2hlVmlkZW9Td2l0Y2gpXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6c21hbGwoJ+ino+aekOi2heaXtjonKStjb2xvcihqeFRpbWVvdXQsJyNmZjcwMDAnKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTpjb2xfdHlwZTIsXFxuICAgICAgICAgICAgdXJsOiQoanhUaW1lb3V0LCfor7forr7nva7prZTmlq3op6PmnpDotoXml7Ys5b+F6aG75Li65pW05pWwJykuaW5wdXQoKCk9PntcXG4gICAgICAgICAgICAgICAgaWYoIXBhcnNlSW50KGlucHV0KSl7XFxuICAgICAgICAgICAgICAgICAgICBpbnB1dCA9IDcwMDA7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcHV0VmFyKCdkcC5qeFRpbWVvdXQnLGlucHV0KTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lorr7nva7kuLo6JytwYXJzZUludChpbnB1dClcXG4gICAgICAgICAgICB9LGp4VGltZW91dClcXG4gICAgICAgIH0pO1xcbiAgICAgICAgaWYoYXV0b01vZGUmJnNpbmdsZUJhY2spe1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBjb2xvcign5omT5byA57yW6L6R5ZCK5q+b6L+H5ruk5paH5Lu2JywnIzEzNzlDQicpLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGRtUGF0aCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRlZl9kbXMgPSBbJ2h0dHBzOi8vdmQzLmJkc3RhdGljLmNvbS9tZGEta2k5dWdxNTQzMGJoeHlzOC92MS1jYWUvMTA4MHAvbWRhLWtpOXVncTU0MzBiaHh5czgubXA0J107XFxuICAgICAgICAgICAgICAgICAgICBpZighZmlsZUV4aXN0KGRtUGF0aCkpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShkbVBhdGgsJy8v5LiA6KGM5LiA5Liq6ZO+5o6lLOWPr+azqOmHiuOAglxcXFxuJytkZWZfZG1zLmpvaW4oJ1xcXFxuJykpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdlZGl0RmlsZTovLycrZG1QYXRoO1xcbiAgICAgICAgICAgICAgICB9LGRtUGF0aCksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGNvbG9yKCfmiZPlvIDnvJbovpHop6PmnpDmlofku7YnLCcjMTM3OUNCJyksXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChqeHNSb3V0ZSkgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2VkaXRGaWxlOi8vJytqeHNSb3V0ZTtcXG4gICAgICAgICAgICB9LGp4c1JvdXRlKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxuICAgICAgICB9KTtcXG5cXG4gICAgICAgIGZvcihsZXQgaSBpbiBNeUppZXhpLmppZXhpcyl7XFxuICAgICAgICAgICAgbGV0IG5vd0p4ID0gTXlKaWV4aS5qaWV4aXNbaV07XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6TXlKaWV4aS5ub3c9PT1ub3dKeC5uYW1lPyfwn5GJJytub3dKeC5uYW1lOm5vd0p4Lm5hbWUsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOidmbGV4X2J1dHRvbicsXFxuICAgICAgICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgICAgICAgIG5vd0p4Om5vd0p4LFxcbiAgICAgICAgICAgICAgICAgICAgTXlKaWV4aTpNeUppZXhpLFxcbiAgICAgICAgICAgICAgICAgICAganhzUm91dGU6anhzUm91dGVcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKG5vd0p4LE15SmlleGksaSxqeHNSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgICAgIGxldCBvcHRpb24gPSBnZXRWYXIoJ2RuLmp4bV9vcHRpb24nLCfpgInmi6knKTtcXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0aW9uKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICflr7zlh7onOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbm93SnhDb2RlID0gYmFzZTY0RW5jb2RlKEpTT04uc3RyaW5naWZ5KG5vd0p4KSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSBzaGFyZVBhc3RlKG5vd0p4Q29kZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlID0gJ+mtlOaWreino+aekOmFjee9rkAnK25vd0p4Lm5hbWUrJ0AnK3VybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weShjb2RlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suWvvOWHuuS4uuS6keWPo+S7pOW5tuWkjeWItuWIsOWJquWIh+advydcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICfkv67mlLknOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZihub3dKeC5uYW1lPT09TXlKaWV4aS5ub3cpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgcmV0dXJuICd0b2FzdDovL+atpOino+aekOmFjee9ruW9k+WJjeato+WcqOS9v+eUqOS4re+8jOS4jeWFgeiuuOS/ruaUuSEnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL2p4RWRpdD9ydWxlPU15RmllbGThtLDigb8nXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2UvanhFZGl0P3J1bGU9TXlGaWVsZOG0sOKBvydcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICfliKDpmaQnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgn56Gu6K6k5Yig6Zmk6Kej5p6Q6YWN572uOicrbm93SngubmFtZSsnPycpLmNvbmZpcm0oKG5vd0p4LE15SmlleGksaSxqeHNSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG5vd0p4Lm5hbWU9PT1NeUppZXhpLm5vdyl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+atpOino+aekOmFjee9ruW9k+WJjeato+WcqOS9v+eUqOS4re+8jOS4jeWFgeiuuOWIoOmZpCEnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNeUppZXhpLmppZXhpcy5zcGxpY2UoaSwxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LliKDpmaQnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sbm93SngsTXlKaWV4aSxpLGp4c1JvdXRlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE15SmlleGkubm93PW5vd0p4Lm5hbWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5L2g6YCJ5oup5LqGJytub3dKeC5uYW1lKyfkvZzkuLrlvZPliY3op6PmnpDphY3nva4nO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9LG5vd0p4LE15SmlleGksaSxqeHNSb3V0ZSksXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgIH1cXG4kLmV4cG9ydHMuanhNYW5hZ2U9anhNYW5hZ2U7XCJ9LHtcIm5hbWVcIjpcIuino+aekOe8lui+kVwiLFwicGF0aFwiOlwianhFZGl0XCIsXCJydWxlXCI6XCJqczpcXG5sZXQge25vd0p4LE15SmlleGksanhzUm91dGV9ID0gTVlfUEFSQU1TO1xcbmxldCBub3dKeFQgPSBKU09OLnBhcnNlKGdldFZhcignZG4ubm93SngnKXx8J3t9Jyk7XFxubm93SnggPSBub3dKeFQubmFtZT9ub3dKeFQ6bm93Sng7XFxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKCgpPT57XFxuICAgIGNsZWFyVmFyKFxcXCJkbi5qeF90aXRsZXNcXFwiKTtcXG4gICAgY2xlYXJWYXIoXFxcImRuLm5vd0p4XFxcIik7XFxuICAgIGNsZWFyVmFyKFxcXCJkbi5qeG1fbmFtZVxcXCIpO1xcbn0pKTtcXG5sZXQgaWQgPSBudWxsO1xcbmZvcihsZXQgaiBpbiBNeUppZXhpLmppZXhpcyl7XFxuICAgIGlmKE15SmlleGkuamlleGlzW2pdLm5hbWUgPT09IG5vd0p4Lm5hbWUpe1xcbiAgICAgICAgaWQgPSBqO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIH1cXG59XFxubGV0IGQgPSBbXTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+mFjee9ruWQjeensCcsXFxuICAgIGRlc2M6IFxcXCLop6PmnpDphY3nva7lkI3np7As5aaC6YGT6ZW/5o6o6I2QXFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIG9uQ2hhbmdlOiBcXFwicHV0VmFyKCdkbi5qeG1fbmFtZScsaW5wdXQpXFxcIixcXG4gICAgICAgIHRpdGxlVmlzaWJsZTogdHJ1ZSxcXG4gICAgICAgIGRlZmF1bHRWYWx1ZTpnZXRWYXIoJ2RuLmp4bV9uYW1lJywnJyl8fG5vd0p4Lm5hbWVcXG4gICAgfSxcXG4gICAgY29sX3R5cGU6J2lucHV0J1xcbn0pO1xcbi8vIGxldCBvcHRpb25zID0gWyfpgInmi6knLCfmlrDlop4nLCfliKDpmaQnLCfmibnph4/liKDpmaQnLCfnp7vliqgnXTtcXG5sZXQgb3B0aW9ucyA9IFsn5paw5aKeJywn5Yig6ZmkJywn56e75YqoJ107XFxubGV0IHdyaXRlTW9kZSA9IGdldFZhcignZG4uanhtX3dyaXRlTW9kZScsJ+aWsOWinicpO1xcbmZvcihsZXQgaSBpbiBvcHRpb25zKXtcXG4gICAgbGV0IG9wdGlvbiA9IG9wdGlvbnNbaV07XFxuICAgIGxldCBmbGFnID0gd3JpdGVNb2RlPT09b3B0aW9uPyfwn5GJJzonJztcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOmZsYWcrb3B0aW9uLFxcbiAgICAgICAgLy8gY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgY29sX3R5cGU6J2ZsZXhfYnV0dG9uJyxcXG4gICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChvcHRpb24pPT57XFxuICAgICAgICAgICAgcHV0VmFyKCdkbi5qeG1fd3JpdGVNb2RlJywgb3B0aW9uKTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgfSxvcHRpb24pLFxcbiAgICB9KTtcXG59XFxuZC5wdXNoKHtcXG4gICAgLy8gY29sX3R5cGU6J2xpbmUnLFxcbiAgICBjb2xfdHlwZTonYmxhbmtfYmxvY2snXFxufSk7XFxuLy/ojrflj5bmlq3mj5LliJfooahcXG5pZighZ2V0VmFyKFxcXCJkbi5qeF90aXRsZXNcXFwiKSl7XFxuICAgIGxldCB0aXRsZUFyciA9IFtdLCB1cmxBcnIgPSBbXTtcXG4gICAgdmFyIGpzb249e3RpdGxlOltdLGNvZGVzOnt9fTtcXG4gICAgbGV0IHNldEZpbGUgPSByZXF1ZXN0KCdoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbicpO1xcbiAgICB0cnkge1xcbiAgICAgICAgZXZhbCgnanNvbj0nK3NldEZpbGUpO1xcbiAgICB9Y2F0Y2ggKGUpIHtcXG4gICAgICAgIGxvZygnSnNvbuino+aekOWPkeeUn+S6humUmeivrzonK2UubWVzc2FnZSk7XFxuICAgIH1cXG4gICAgdGl0bGVBcnIgPSBqc29uLnRpdGxlO1xcbiAgICB0aXRsZUFyci5mb3JFYWNoKChpdCkgPT4ge1xcbiAgICAgICAgdXJsQXJyLnB1c2goanNvbi5jb2Rlc1tpdF0pO1xcbiAgICB9KTtcXG4gICAgcHV0VmFyKCdkbi5qeF90aXRsZXMnLEpTT04uc3RyaW5naWZ5KHRpdGxlQXJyKSk7XFxufVxcblxcbmxldCB0aXRsZXMgPSBKU09OLnBhcnNlKGdldFZhcignZG4uanhfdGl0bGVzJyl8fCdbXScpO1xcbmxldCB0aXRsZURpYyA9IHtcXG4gICAgYmw6J+WTlOWTqeWTlOWTqScsZnVuOifpo47ooYwnLGxlOifkuZDop4YnLG1nOifoipLmnpwnLG1pOiflkqrlkpUnLHBwOidQUFRWJyxxeTon54ix5aWH6Im6JyxzaDon5pCc54uQJyxcXG4gICAgdHg6J+iFvuiurycseGc6J+ilv+eTnCcseWs6J+S8mOmFtycsb25lOicxOTA1JyxsdDon6b6Z6IW+Jyxycjon5Lq65Lq66L+3Jyx3ZDon5LqU5q+SJyxvdGg6J+WFtuS7lidcXG59XFxubGV0IHRpdGxlT3JkZXIgPSB7XFxuICAgIHF5OjEseWs6Mix0eDozLG1nOjQsYmw6NSxzaDo2LHhnOjcscHA6OCxtaTo5LGxlOjEwLG9uZToxMSxmdW46MTIsbHQ6MTMscnI6MTQsd2Q6MTUsb3RoOjE2LFxcbn07XFxuXFxuZnVuY3Rpb24gY29tcGFyZU9kKHRpdGxlT3JkZXIpe1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKGEsIGIpe1xcbiAgICAgICAgbGV0IHggPSB0aXRsZU9yZGVyW2FdO1xcbiAgICAgICAgbGV0IHkgPSB0aXRsZU9yZGVyW2JdO1xcbiAgICAgICAgcmV0dXJuIHgteTtcXG4gICAgfVxcbn1cXG4vLy0tLS0tLS0tLS0tLS0tLS0tXFxuLy8gbGV0IGpkcyA9IE9iamVjdC5rZXlzKG5vd0p4KS5maWx0ZXIoaXQ9Pml0IT09J25hbWUnJiZpdCE9PSdvdGgnKTtcXG5sZXQgZmxhZ3MgPSBPYmplY3Qua2V5cyh0aXRsZU9yZGVyKTtcXG5sZXQgamRzID0gT2JqZWN0LmtleXMobm93SngpLmZpbHRlcihpdD0+aXQhPT0nbmFtZScmJmZsYWdzLmluY2x1ZGVzKGl0KSk7XFxuLy9sb2coamRzKTtcXG5mb3IobGV0IGsgb2YgZmxhZ3Mpe1xcbiAgICBpZighamRzLmluY2x1ZGVzKGspKXtcXG4gICAgICAgIGpkcy5wdXNoKGspXFxuICAgIH1cXG59XFxuamRzID0gamRzLnNvcnQoY29tcGFyZU9kKHRpdGxlT3JkZXIpKTtcXG5mb3IobGV0IGogaW4gamRzKXtcXG4gICAgbGV0IGp4cyA9IG5vd0p4W2pkc1tqXV18fFtdO1xcbiAgICBsZXQgdGl0bGUgPSBqZHNbal07XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTp0aXRsZURpY1t0aXRsZV18fHRpdGxlLFxcbiAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHRpdGxlcyx0aXRsZSxqeHMsanhzUm91dGUsTXlKaWV4aSxub3dKeCk9PntcXG4gICAgICAgICAgICB2YXIganNvbj17dGl0bGU6W10sY29kZXM6e319O1xcbiAgICAgICAgICAgIGxldCBzZXRGaWxlID0gcmVxdWVzdCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb24nKTtcXG4gICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICBldmFsKCdqc29uPScrc2V0RmlsZSk7XFxuICAgICAgICAgICAgfWNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgIGxvZygnSnNvbuino+aekOWPkeeUn+S6humUmeivrzonK2UubWVzc2FnZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmKGdldFZhcignZG4uanhtX3dyaXRlTW9kZScsJ+aWsOWinicpPT09J+aWsOWinicpe1xcbiAgICAgICAgICAgICAgICBsZXQgc2VsX3RpdGxlID0gdGl0bGVzLmZpbHRlcihpdD0+IWp4cy5pbmNsdWRlcyhpdCkpO1xcbiAgICAgICAgICAgICAgICBzZWxfdGl0bGUgPSBzZWxfdGl0bGUubWFwKChpdCk9PntcXG4gICAgICAgICAgICAgICAgICAgIGxldCBmbGFnID0gJ+KAmOKAmOKTiuKAmeKAmSc7XFxuICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YoanNvbi5jb2Rlc1tpdF0pPT09J2Z1bmN0aW9uJyl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZmxhZyA9ICfigJzigJzikr/igJ3igJ0nO1xcbiAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYodHlwZW9mKGpzb24uY29kZXNbaXRdKT09PSd1bmRlZmluZWQnKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFnID0gJyc7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmxhZytpdFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQoc2VsX3RpdGxlLDIpLnNlbGVjdCgoTXlKaWV4aSxqeHMsbm93SngsdGl0bGUsanhzUm91dGUpPT57XFxuICAgICAgICAgICAgICAgICAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoL+KAmOKAmOKTiuKAmeKAmXzigJzigJzikr/igJ3igJ0vZywnJyk7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgaWQgPSBudWxsO1xcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBqIGluIE15SmlleGkuamlleGlzKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihNeUppZXhpLmppZXhpc1tqXS5uYW1lID09PSBub3dKeC5uYW1lKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSBqO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBpZighaWQpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ntKLlvJXplJnor6/ml6Dms5Xkv53lrZg6XFxcXG4nK2lkXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBqeHMucHVzaChpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICBsb2coanhzKTtcXG4gICAgICAgICAgICAgICAgICAgIG5vd0p4W3RpdGxlXSA9IGp4cztcXG4gICAgICAgICAgICAgICAgICAgIE15SmlleGkuamlleGlzW2lkXSA9IG5vd0p4O1xcbiAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCdkbi5ub3dKeCcsSlNPTi5zdHJpbmdpZnkobm93SngpKTtcXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICAgICAgfSxNeUppZXhpLGp4cyxub3dKeCx0aXRsZSxqeHNSb3V0ZSk7XFxuICAgICAgICAgICAgfWVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSx0aXRsZXMsdGl0bGUsanhzLGp4c1JvdXRlLE15SmlleGksbm93SngpXFxuICAgIH0pO1xcbiAgICBmb3IobGV0IGsgaW4ganhzKXtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6anhzW2tdLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgodGl0bGVzLHRpdGxlLGp4cyxqeHNSb3V0ZSxNeUppZXhpLG5vd0p4LG5qeCxpZCxrLG1heCk9PntcXG4gICAgICAgICAgICAgICAgc3dpdGNoIChnZXRWYXIoJ2RuLmp4bV93cml0ZU1vZGUnLCfmlrDlop4nKSl7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlICfliKDpmaQnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbih2YWwpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5pbmRleE9mKHZhbCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwbGljZShpbmRleCwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGp4cy5yZW1vdmUobmp4KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBub3dKeFt0aXRsZV0gPSBqeHM7XFxuICAgICAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXNbaWRdID0gbm93Sng7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCdkbi5ub3dKeCcsSlNPTi5zdHJpbmdpZnkobm93SngpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+enu+WKqCc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoaywn56e75Yqo5Yiw57Si5byV5aSa5bCRPycpLmlucHV0KChrLG1heCxqeHMsbm93SngsTXlKaWV4aSxpZCx0aXRsZSxqeHNSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gTW92ZShhcnIsIGZyb21JbmRleCwgdG9JbmRleCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBhcnJbZnJvbUluZGV4XTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoZnJvbUluZGV4LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5zcGxpY2UodG9JbmRleCwgMCwgZWxlbWVudCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocGFyc2VJbnQoaW5wdXQpPT09ayl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5ZWl5Lmf5rKh5YGaJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihwYXJzZUludChpbnB1dCk+bWF4LTF8fHBhcnNlSW50KGlucHV0KTwtMSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5L2g5pyA5aSn56e75Yqo6IyD5Zu0MC0nK3BhcnNlSW50KG1heC0xKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsZXQgbmV3QXIgPSBqeHMuc3BsaWNlKGssIDEpOyAvLyDliKDmjolcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8ganhzLnVuc2hpZnQobmV3QXJbMF0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb3ZlKGp4cyxrLHBhcnNlSW50KGlucHV0KSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vd0p4W3RpdGxlXSA9IGp4cztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXNbaWRdID0gbm93Sng7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dFZhcignZG4ubm93SngnLEpTT04uc3RyaW5naWZ5KG5vd0p4KSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxrLG1heCxqeHMsbm93SngsTXlKaWV4aSxpZCx0aXRsZSxqeHNSb3V0ZSlcXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+atpOWFg+e0oOS4jeaUr+aMgei/m+ihjDonK2dldFZhcignZG4uanhtX3dyaXRlTW9kZScsJ+aWsOWinicpXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9LHRpdGxlcyx0aXRsZSxqeHMsanhzUm91dGUsTXlKaWV4aSxub3dKeCxqeHNba10saWQsayxqeHMubGVuZ3RoKVxcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIC8vIGNvbF90eXBlOidsaW5lJyxcXG4gICAgICAgIGNvbF90eXBlOidibGFua19ibG9jaydcXG4gICAgfSlcXG59XFxuZC5wdXNoKHtcXG4gICAgY29sX3R5cGU6J2xpbmUnLFxcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOifkv53lrZgnLFxcbiAgICBjb2xfdHlwZTondGV4dF9jZW50ZXJfMScsXFxuICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChNeUppZXhpLGlkLGp4c1JvdXRlKT0+e1xcbiAgICAgICAgaWYoZ2V0VmFyKCdkbi5qeG1fbmFtZScsJycpIT09TXlKaWV4aS5qaWV4aXNbaWRdLm5hbWUpe1xcbiAgICAgICAgICAgIGlmSGFzID0gTXlKaWV4aS5qaWV4aXMuZmlsdGVyKGl0PT5pdC5uYW1lPT09Z2V0VmFyKCdkbi5qeG1fbmFtZScsJycpKS5sZW5ndGg+MDtcXG4gICAgICAgICAgICBpZihpZkhhcyl7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lvoXkv67mlLnnmoTlkI3np7Dph43lpI0s5LiN5YWB6K645L+d5a2YJ1xcbiAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICBNeUppZXhpLmppZXhpc1tpZF0ubmFtZSA9ICBnZXRWYXIoJ2RuLmp4bV9uYW1lJywnJyk7XFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgYmFjayh0cnVlKTtcXG4gICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lkv53lrZgnXFxuICAgIH0sTXlKaWV4aSxpZCxqeHNSb3V0ZSlcXG59KTtcXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLlsI/nmb3mqKHlvI9cIixcInBhdGhcIjpcInNtYWxsV2hpdGVcIixcInJ1bGVcIjpcImpzOlxcbiAgICBzZXRQYWdlVGl0bGUoJ+mBk+mVv+e7meWwj+eZveeahOWFs+eIsScpO1xcbmNvbnN0IHtjb2xvciwgc21hbGwsYXBpfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3V0aWxpeT9ydWxlPemBk+mVv+S7k+W6k1Byb1xcXCIpO1xcbmxldCBmaWxlUm9vdCA9IGFwaS5ob3N0KycvaGlrZXJ1bGUvenl3X2RhdGEvJztcXG4vLyBsb2coZmlsZVJvb3QpO1xcbmxldCBkID0gW107XFxudmFyIHRoZW1lUm91dGUgPSBcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVRoZW1lLmpzb25cXFwiO1xcbnZhciB0aGVtZU9ubGluZSA9IGZpbGVSb290KycxMSc7XFxudmFyIG9sZFJvdXRlID0gXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlQYXJzZVNldC5qc29uXFxcIjtcXG52YXIgb2xkT25saW5lID0gZmlsZVJvb3QrJzEyJztcXG52YXIgbmV3Um91dGUgPSBcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb25cXFwiO1xcbnZhciBuZXdPbmxpbmUgPSBmaWxlUm9vdCsnMTMnO1xcbnZhciBqeHNSb3V0ZSA9IFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015SmlleGkuanNvblxcXCI7XFxudmFyIGp4T25saW5lID0gZmlsZVJvb3QrJzE0JztcXG52YXIgZG1PbmxpbmUgPSBmaWxlUm9vdCsnMzAnO1xcbnZhciBjamNhY2hlID0gJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnO1xcbnZhciB4NWNhY2hlID0gJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uaHRtbCc7XFxudmFyIGRtUGF0aCA9IFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL2RpYW9tYW8udHh0XFxcIjtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTpzbWFsbCgn5L2g5aW9LOWwj+eZvSzljbPkvb/llaXkuZ/kuI3kvJos5Lmf5Y+v5Lul55yL5piO55m95LiL6Z2i55qE5a2X5ZCnPycpLFxcbiAgICBkZXNjOiflpoLmnpzov5jmmK/kuI3kvJos6K+35Yig5Lul5rC45rK7LOWRiui+nuS4jeiwoicsXFxuICAgIGNvbF90eXBlOid0ZXh0XzEnLFxcbiAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKT0+e1xcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+aNruivtOS9oOS4jeacjeawlCzkuI3mib/orqToh6rlt7HmmK/lsI/nmb0/XFxcXG7ngrnmiJHlj6rmmK/kuLrkuoblrqPms4TkuIDkuIvkvaDnmoTmhKTmgJI/5ZWl5Lmf5Yir6K+05LqGLOS4i+WOu+aQniEnXFxuICAgIH0pXFxufSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6c21hbGwoJ+aJuemHj+euoeeQhueVjOmdouaWh+S7tuaYr+S7gOS5iD8nKStjb2xvcign5LiN55+l6YGTLOadpeS4gOS7vemBk+mVv+eahCcsJyM1RkI4NzgnKSxcXG4gICAgZGVzYzon6Ieq5Yqo5ouJ5Y+W6YGT6ZW/55qE5om56YeP566h55CG55WM6Z2i5paH5Lu277yM5Y+v5om56YeP5Yig6Zmk5ZKM5a+85Ye66Kej5p6QJyxcXG4gICAgY29sX3R5cGU6J3RleHRfMScsXFxuICAgIHVybDokKCfnoa7orqTlkJfvvJ8nKS5jb25maXJtKCgpPT57XFxuICAgICAgICBsZXQgbG9jYWxIdG1sID0gJ2hpa2VyOi8vZmlsZXMvY2FjaGUvcGxzY1BhcnNlLmh0bWwnO1xcbiAgICAgICAgd3JpdGVGaWxlKGxvY2FsSHRtbCxyZXF1ZXN0KCdodHRwczovL2dpdGNvZGUubmV0L3FxXzMyMzk0MzUxL2RyLy0vcmF3L21hc3Rlci9kcC9iYXRjaF9kZWxldGUuaHRtbCcpKTtcXG4gICAgICAgIHJldHVybiAndG9hc3Q6Ly/mi4nlj5blrozmr5Us5Y+v6L+U5Zue5p+l55yL5om56YeP566h55CG5Yqf6IO95piv5ZCm5q2j5bi4J1xcbiAgICB9KVxcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOnNtYWxsKCfljZXpobnop6PmnpDpgInmi6nnlYzpnaLkuLvpopjmmK/ku4DkuYg/JykrY29sb3IoJ+S4jeefpemBkyzmnaXkuIDku73pgZPplb/nmoQnLCcjNUZCODc4JyksXFxuICAgIGRlc2M6J+iHquWKqOaLieWPlumBk+mVv+eahOS4u+mimOmFjee9ruS7peWPiue9kemhteaPkuS7tuWSjOmdmeaAgemhtemdoicsXFxuICAgIGNvbF90eXBlOid0ZXh0XzEnLFxcbiAgICB1cmw6JCgn56Gu6K6k5ZCXP+WmguaenOS9oOS4jeaYr+Wwj+eZve+8jOaAu+ivpeS8muaPkOWJjeWkh+S7veiHquW3seS4u+mimOeahOWQpyFcXFxcbicrdGhlbWVSb3V0ZSkuY29uZmlybSgoY2pjYWNoZSx4NWNhY2hlLHRoZW1lUm91dGUsdGhlbWVPbmxpbmUpPT57XFxuICAgICAgICBsZXQgdGhlbWVDb2RlID0gZmV0Y2godGhlbWVPbmxpbmUpO1xcbiAgICAgICAgaWYoIS9ub3dfdGhlbWUvLnRlc3QodGhlbWVDb2RlKSl7XFxuICAgICAgICAgICAgbG9nKHRoZW1lQ29kZSk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+Wksei0pSHkuI7pgZPplb/mnI3liqHlmajpgJrorq/plJnor68s5Lyw6K6h5piv572R57uc5Y2h5LqGJ1xcbiAgICAgICAgfVxcbiAgICAgICAgbGV0IGNqRnJvbSA9IFxcXCJoaWtlcjovL3BhZ2UvUGFyc2VfRG4uanM/cnVsZT1NeUZpZWxk4bSw4oG/XFxcIjtcXG4gICAgICAgIGxldCB4NUZyb20gPSBcXFwiaGlrZXI6Ly9wYWdlL1BhcnNlX0RuLmh0bWw/cnVsZT1NeUZpZWxk4bSw4oG/XFxcIjtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgbGV0IGNqRmlsZSA9IEpTT04ucGFyc2UoZmV0Y2goY2pGcm9tKSkucnVsZTtcXG4gICAgICAgICAgICBsZXQgeDVGaWxlID0gSlNPTi5wYXJzZShmZXRjaCh4NUZyb20pKS5ydWxlO1xcbiAgICAgICAgICAgIHdyaXRlRmlsZShjamNhY2hlLCBjakZpbGUpO1xcbiAgICAgICAgICAgIHdyaXRlRmlsZSh4NWNhY2hlLCB4NUZpbGUpO1xcbiAgICAgICAgICAgIHdyaXRlRmlsZSh0aGVtZVJvdXRlLCB0aGVtZUNvZGUpO1xcbiAgICAgICAgICAgIGNsZWFyVmFyKFxcXCJqeE9sZFZcXFwiKTtcXG4gICAgICAgICAgICBjbGVhclZhcihcXFwianhOZXdWXFxcIik7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/kuLvpopjlt7LmiJDlip/lupTnlKgnXFxuICAgICAgICB9XFxuICAgICAgICBjYXRjaChlKXtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5Li76aKY5bqU55So5aSx6LSlXFxcXG7mnKrmnJ/mnJvnmoTplJnor686JytlLm1lc3NhZ2U7XFxuICAgICAgICB9XFxuICAgIH0sY2pjYWNoZSx4NWNhY2hlLHRoZW1lUm91dGUsdGhlbWVPbmxpbmUpXFxufSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6c21hbGwoJ+aWreaPkuino+aekOWPium7mOiupOWIl+ihqOaYr+S7gOS5iD8nKStjb2xvcign5LiN55+l6YGTLOadpeS4gOS7vemBk+mVv+eahCcsJyM1RkI4NzgnKSxcXG4gICAgZGVzYzon6Ieq5Yqo5ouJ5Y+W6YGT6ZW/5Zyo55So55qE5Lik5LiqTXlQYXJzZS5qc29u5paH5Lu2JyxcXG4gICAgY29sX3R5cGU6J3RleHRfMScsXFxuICAgIHVybDokKCfnoa7orqTlkJc/5aaC5p6c5L2g5LiN5piv5bCP55m977yM5oC76K+l5Lya5o+Q5YmN5aSH5Lu96Ieq5bex55qE6YWN572u5paH5Lu25ZCnIVxcXFxuJytvbGRSb3V0ZSsnXFxcXG4nK25ld1JvdXRlKS5jb25maXJtKChvbGRSb3V0ZSxvbGRPbmxpbmUsbmV3Um91dGUsbmV3T25saW5lKT0+e1xcbiAgICAgICAgbGV0IG9sZENvZGUgPSBmZXRjaChvbGRPbmxpbmUpO1xcbiAgICAgICAgbGV0IG5ld0NvZGUgPSBmZXRjaChuZXdPbmxpbmUpO1xcbiAgICAgICAgaWYoIS9QYXJzZV9EblxcXFwuanMvLnRlc3Qob2xkQ29kZSl8fCEvUGFyc2VfRG5cXFxcLmpzLy50ZXN0KG5ld0NvZGUpKXtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5aSx6LSlIeS4jumBk+mVv+acjeWKoeWZqOmAmuiur+mUmeivryzkvLDorqHmmK/nvZHnu5zljaHkuoYnXFxuICAgICAgICB9XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHdyaXRlRmlsZShvbGRSb3V0ZSwgb2xkQ29kZSk7XFxuICAgICAgICAgICAgd3JpdGVGaWxlKG5ld1JvdXRlLCBuZXdDb2RlKTtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pat5o+S6Kej5p6Q6YWN572u5Y+K6buY6K6k5YiX6KGo5bey57uP6YWN572u5oiQ5YqfJ1xcbiAgICAgICAgfVxcbiAgICAgICAgY2F0Y2goZSl7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+mFjee9ruW6lOeUqOWksei0pVxcXFxu5pyq5pyf5pyb55qE6ZSZ6K+vOicrZS5tZXNzYWdlO1xcbiAgICAgICAgfVxcbiAgICB9LG9sZFJvdXRlLG9sZE9ubGluZSxuZXdSb3V0ZSxuZXdPbmxpbmUpXFxufSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6c21hbGwoJ+aWreaPkuino+aekOiHquWKqOaho+aooeW8j+aYr+S7gOS5iD8nKStjb2xvcign5LiN55+l6YGTLOadpeS4gOS7vemBk+mVv+eahCcsJyM1RkI4NzgnKSxcXG4gICAgZGVzYzon6Ieq5Yqo5ouJ5Y+W6YGT6ZW/5Zyo55So55qETXlKaWV4aS5qc29u5paH5Lu2JyxcXG4gICAgY29sX3R5cGU6J3RleHRfMScsXFxuICAgIHVybDokKCfnoa7orqTlkJc/5aaC5p6c5L2g5LiN5piv5bCP55m977yM5oC76K+l5Lya5o+Q5YmN5aSH5Lu96Ieq5bex55qE6Ieq5Yqo5qGj5pa55qGI5ZCnIVxcXFxuJytqeHNSb3V0ZSkuY29uZmlybSgoanhzUm91dGUsanhPbmxpbmUpPT57XFxuICAgICAgICBsZXQganhDb2RlID0gZmV0Y2goanhPbmxpbmUpO1xcbiAgICAgICAgaWYoIS9qaWV4aXMvLnRlc3QoanhDb2RlKSl7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+Wksei0pSHkuI7pgZPplb/mnI3liqHlmajpgJrorq/plJnor68s5Lyw6K6h5piv572R57uc5Y2h5LqGJ1xcbiAgICAgICAgfVxcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsIGp4Q29kZSk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aWreaPkuino+aekOmFjee9ruWPium7mOiupOWIl+ihqOW3sue7j+mFjee9ruaIkOWKnydcXG4gICAgICAgIH1cXG4gICAgICAgIGNhdGNoKGUpe1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/oh6rliqjmoaPlupTnlKjlpLHotKVcXFxcbuacquacn+acm+eahOmUmeivrzonK2UubWVzc2FnZTtcXG4gICAgICAgIH1cXG4gICAgfSxqeHNSb3V0ZSxqeE9ubGluZSlcXG59KTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTpzbWFsbCgn5ZCK5q+b6L+H5ruk5paH5Lu25piv5LuA5LmIPycpK2NvbG9yKCfkuI3nn6XpgZMs5p2l5LiA5Lu96YGT6ZW/55qEJywnIzVGQjg3OCcpLFxcbiAgICBkZXNjOifoh6rliqjmi4nlj5bpgZPplb/lnKjnlKjnmoRkaWFvbWFvLnR4dOaWh+S7ticsXFxuICAgIGNvbF90eXBlOid0ZXh0XzEnLFxcbiAgICB1cmw6JCgn56Gu6K6k5ZCXP+WmguaenOS9oOS4jeaYr+Wwj+eZve+8jOaAu+ivpeS8muaPkOWJjeWkh+S7veiHquW3seeahOWQiuavm+i/h+a7pOaWh+S7tuWQpyFcXFxcbicrZG1QYXRoKS5jb25maXJtKChkbVBhdGgsZG1PbmxpbmUpPT57XFxuICAgICAgICBsZXQgZG1Db2RlID0gZmV0Y2goZG1PbmxpbmUpO1xcbiAgICAgICAgaWYoIWRtQ29kZXx8IS9tcDR8bTN1OC8udGVzdChkbUNvZGUpKXtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5aSx6LSlIeS4jumBk+mVv+acjeWKoeWZqOmAmuiur+mUmeivryzkvLDorqHmmK/nvZHnu5zljaHkuoYnXFxuICAgICAgICB9XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHdyaXRlRmlsZShkbVBhdGgsIGRtQ29kZSk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+WQiuavm+i/h+a7pOaWh+S7tuW3sumFjee9ruaIkOWKnydcXG4gICAgICAgIH1cXG4gICAgICAgIGNhdGNoKGUpe1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lkIrmr5vov4fmu6Tmlofku7blupTnlKjlpLHotKVcXFxcbuacquacn+acm+eahOmUmeivrzonK2UubWVzc2FnZTtcXG4gICAgICAgIH1cXG4gICAgfSxkbVBhdGgsZG1PbmxpbmUpXFxufSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6c21hbGwoJ+ecn+eahOWVpeS5n+S4jeS8muS6hizov5jmh5LlvpfkuIDkuKrkuKrngrk/JykrY29sb3IoJ+S4jeefpemBkyzmnaXkuIDku73pgZPplb/nmoQnLCcjNUZCODc4JyksXFxuICAgIGRlc2M6J+iHquWKqOaLieWPlumBk+mVv+WcqOeUqOeahOS4iui/sOaJgOacieaWh+S7tlxcXFxu5LiA6ZSu5pCe5a6M55u05o6l5Y675pSv5oyB5pat5o+S55qE5bCP56iL5bqP55yL6KeG6aKR5bCx6KGM5ZWmJyxcXG4gICAgY29sX3R5cGU6J3RleHRfMScsXFxuICAgIHVybDokKCfkv67ku5nms5Xlipvml6DovrknLCfnoa7orqTlkJc/5aaC5p6c5L2g5LiN5piv5bCP55m977yM5oC76K+l5Lya5o+Q5YmN5aSH5Lu96Ieq5bex55qE5LiK6L+w5omA5pyJ5paH5Lu25ZCnIVxcXFxu6K+36L6T5YWl6YGT6ZW/5L+u5LuZ5rOV5Yqb5peg6L655p2l56Gu6K6k5omn6KGM5q2k5pON5L2cJykuaW5wdXQoKGNqY2FjaGUseDVjYWNoZSx0aGVtZVJvdXRlLG9sZFJvdXRlLG5ld1JvdXRlLGp4c1JvdXRlLHRoZW1lT25saW5lLG9sZE9ubGluZSxuZXdPbmxpbmUsanhPbmxpbmUsZG1QYXRoLGRtT25saW5lKT0+e1xcbiAgICAgICAgaWYoaW5wdXQhPT0n6YGT6ZW/5L+u5LuZ5rOV5Yqb5peg6L65Jyl7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+acrOasoeWPlua2iOaJp+ihjCdcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCB0aGVtZUNvZGUgPSBmZXRjaCh0aGVtZU9ubGluZSk7XFxuICAgICAgICBpZighL25vd190aGVtZS8udGVzdCh0aGVtZUNvZGUpKXtcXG4gICAgICAgICAgICBsb2coJ3RoZW1lQ29kZTonK3RoZW1lQ29kZSk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aLieS4u+mimOWksei0pSHkuI7pgZPplb/mnI3liqHlmajpgJrorq/plJnor68s5Lyw6K6h5piv572R57uc5Y2h5LqGJ1xcbiAgICAgICAgfVxcbiAgICAgICAgbGV0IGNqRnJvbSA9IFxcXCJoaWtlcjovL3BhZ2UvUGFyc2VfRG4uanM/cnVsZT1NeUZpZWxk4bSw4oG/XFxcIjtcXG4gICAgICAgIGxldCB4NUZyb20gPSBcXFwiaGlrZXI6Ly9wYWdlL1BhcnNlX0RuLmh0bWw/cnVsZT1NeUZpZWxk4bSw4oG/XFxcIjtcXG4gICAgICAgIGxldCBjakZpbGUgPSBKU09OLnBhcnNlKGZldGNoKGNqRnJvbSkpLnJ1bGU7XFxuICAgICAgICBsZXQgeDVGaWxlID0gSlNPTi5wYXJzZShmZXRjaCh4NUZyb20pKS5ydWxlO1xcbiAgICAgICAgbGV0IG9sZENvZGUgPSBmZXRjaChvbGRPbmxpbmUpO1xcbiAgICAgICAgbGV0IG5ld0NvZGUgPSBmZXRjaChuZXdPbmxpbmUpO1xcbiAgICAgICAgbGV0IGRtQ29kZSA9IGZldGNoKGRtT25saW5lKTtcXG4gICAgICAgIGlmKCEvUGFyc2VfRG5cXFxcLmpzLy50ZXN0KG9sZENvZGUpfHwhL1BhcnNlX0RuXFxcXC5qcy8udGVzdChuZXdDb2RlKSl7XFxuICAgICAgICAgICAgLy8gbG9nKCdvbGRDb2RlOicrb2xkQ29kZSk7XFxuICAgICAgICAgICAgLy8gbG9nKCduZXdDb2RlOicrbmV3Q29kZSk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+Wksei0pSHkuI7pgZPplb/mnI3liqHlmajpgJrorq/plJnor68s5Lyw6K6h5piv572R57uc5Y2h5LqGJ1xcbiAgICAgICAgfVxcbiAgICAgICAgbGV0IGp4Q29kZSA9IGZldGNoKGp4T25saW5lKTtcXG4gICAgICAgIGlmKCEvamlleGlzLy50ZXN0KGp4Q29kZSkpe1xcbiAgICAgICAgICAgIC8vIGxvZygnanhDb2RlOicranhDb2RlKTtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5aSx6LSlIeS4jumBk+mVv+acjeWKoeWZqOmAmuiur+mUmeivryzkvLDorqHmmK/nvZHnu5zljaHkuoYnXFxuICAgICAgICB9XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHdyaXRlRmlsZShjamNhY2hlLCBjakZpbGUpOyAvLyDmi4nmj5Lku7ZcXG4gICAgICAgICAgICB3cml0ZUZpbGUoeDVjYWNoZSwgeDVGaWxlKTsgLy/mi4nnvZHpobXmlofku7ZcXG4gICAgICAgICAgICB3cml0ZUZpbGUodGhlbWVSb3V0ZSwgdGhlbWVDb2RlKTsgLy/mi4nkuLvpopjmlofku7ZcXG4gICAgICAgICAgICBjbGVhclZhcihcXFwianhPbGRWXFxcIik7XFxuICAgICAgICAgICAgY2xlYXJWYXIoXFxcImp4TmV3VlxcXCIpO1xcbiAgICAgICAgICAgIHdyaXRlRmlsZShvbGRSb3V0ZSwgb2xkQ29kZSk7IC8v5ouJ5pat5o+S6buY6K6k6YCJ5oup55WM6Z2i55qE6YWN572uXFxuICAgICAgICAgICAgd3JpdGVGaWxlKG5ld1JvdXRlLCBuZXdDb2RlKTsgLy/mi4nmlq3mj5LlhoXnmoTop6PmnpBcXG4gICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsIGp4Q29kZSk7IC8vIOaLieiHquWKqOaho+aWh+S7tlxcbiAgICAgICAgICAgIGlmKGRtQ29kZSYmL21wNHxtM3U4Ly50ZXN0KGRtQ29kZSkpIHsvL+mqjOivgeWQiuavm+aWh+S7tuWQiOazleaAp1xcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoZG1QYXRoLCBkbUNvZGUpOyAvLyDmi4nlkIrmr5vov4fmu6Tmlofku7ZcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgYmFjayh0cnVlKTtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pat5o+S6Kej5p6Q6YWN572u5Y+K6buY6K6k5YiX6KGo5bey57uP6YWN572u5oiQ5YqfJ1xcbiAgICAgICAgfVxcbiAgICAgICAgY2F0Y2goZSl7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S4gOmUruaooeW8j+W6lOeUqOWksei0pVxcXFxu5pyq5pyf5pyb55qE6ZSZ6K+vOicrZS5tZXNzYWdlO1xcbiAgICAgICAgfVxcbiAgICB9LGNqY2FjaGUseDVjYWNoZSx0aGVtZVJvdXRlLG9sZFJvdXRlLG5ld1JvdXRlLGp4c1JvdXRlLHRoZW1lT25saW5lLG9sZE9ubGluZSxuZXdPbmxpbmUsanhPbmxpbmUsZG1QYXRoLGRtT25saW5lKVxcbn0pO1xcbmxldCBkZXNjSW5mbyA9ICfkuLvpopjmlofku7Y6Jyt0aGVtZVJvdXRlKydcXFxcbuS4u+eVjOmdoumFjee9rjonK29sZFJvdXRlKydcXFxcbuWrluWIsOeahOino+aekDonK25ld1JvdXRlKydcXFxcbuiHquWKqOaho+ino+aekDonK2p4c1JvdXRlO1xcbmRlc2NJbmZvKz0nXFxcXG7kuLvmj5Lku7Y6JytjamNhY2hlKydcXFxcbuS4u+mFjee9rumAieaLqeeVjOmdouaWh+S7tjonK3g1Y2FjaGUrJ1xcXFxu5ZCK5q+b6L+H5ruk5paH5Lu2OicrZG1QYXRoO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOifmlofku7bmj4/ov7A6XFxcXG4nK2Rlc2NJbmZvLFxcbiAgICBjb2xfdHlwZTonbG9uZ190ZXh0JyxcXG4gICAgZXh0cmE6e3RleHRTaXplOiAxMyxsaW5lVmlzaWJsZTpmYWxzZX1cXG59KTtcXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLop6PmnpDmtYvor5VcIixcInBhdGhcIjpcImp4VGVzdFwiLFwicnVsZVwiOlwianM6XFxuICAgIHZhciBpdGVtcyA9IFtdO1xcbnZhciBqc29uID0gW3tcXG4gICAgdGl0bGU6ICfniLHlpYfoibonLFxcbiAgICB1cmw6ICdodHRwOi8vd3d3LmlxaXlpLmNvbS92XzJnYTh6dHM4NnlzLmh0bWwnLFxcbiAgICBwaWNfdXJsOiAnaHR0cHM6Ly9hbmRyb2lkLWFydHdvcmtzLjI1cHAuY29tL2ZzMDgvMjAyMS8wOS8wOS84LzExMF85MDFmMmVmMzdhZjJmZWEyNWU1ZDk2NDhmNTUxY2UzMV9jb25fMTMweDEzMC5wbmcnLFxcbn0sIHtcXG4gICAgdGl0bGU6ICfkvJjphbcnLFxcbiAgICBwaWNfdXJsOiAnaHR0cHM6Ly9hbmRyb2lkLWFydHdvcmtzLjI1cHAuY29tL2ZzMDgvMjAyMS8wOS8xNi85LzExMF84ZmYwNmUwYzIzNzc2MGNkNTdkMjUwOGZkOThjODQxNF9jb25fMTMweDEzMC5wbmcnLFxcbiAgICB1cmw6ICdodHRwczovL3YueW91a3UuY29tL3Zfc2hvdy9pZF9YTkRjME1ERTFOVGsxTWc9PS5odG1sJ1xcbn0sIHtcXG4gICAgdGl0bGU6ICfohb7orq/op4bpopEnLFxcbiAgICBwaWNfdXJsOiAnaHR0cHM6Ly9hbmRyb2lkLWFydHdvcmtzLjI1cHAuY29tL2ZzMDgvMjAyMS8wOS8xNS8zLzEwNl8zYTBkMjEyZTE3Y2I5NWUyMzJmZmUxNTU0NjAzODVjYl9jb25fMTMweDEzMC5wbmcnLFxcbiAgICB1cmw6ICdodHRwczovL3YucXEuY29tL3gvY292ZXIvbXpjMDAyMDBybXBhZjQwL24wMDM2bDR0bnRjLmh0bWwnXFxufSwge1xcbiAgICB0aXRsZTogJ1BQVFbop4bpopEnLFxcbiAgICBwaWNfdXJsOiAnaHR0cHM6Ly9hbmRyb2lkLWFydHdvcmtzLjI1cHAuY29tL2ZzMDgvMjAyMS8wOS8yOC81LzExMF9hNDU1YjI5NTEyMjcwNDBlZTYyOTU1ZWRjZmI4OWQ3Ml9jb25fMTMweDEzMC5wbmcnLFxcbiAgICB1cmw6ICdodHRwczovL3YucHB0di5jb20vc2hvdy96Vm4zZEpYdDF4VjQ5bDQuaHRtbCdcXG59LCB7XFxuICAgIHRpdGxlOiAn6IqS5p6cVFYnLFxcbiAgICBwaWNfdXJsOiAnaHR0cHM6Ly9hbmRyb2lkLWFydHdvcmtzLjI1cHAuY29tL2ZzMDgvMjAyMS8wOS8xNS82LzExMF8xODM0ZDI5NmFhNWI1NjY2YTdkOTRiMWUzNDc5YWU2NF9jb25fMTMweDEzMC5wbmcnLFxcbiAgICB1cmw6ICdodHRwOi8vd3d3Lm1ndHYuY29tL2IvMzQ5MjUzLzEwNDI0MzAwLmh0bWwnXFxufSx7XFxuICAgIHRpdGxlOiAn5ZKq5ZKVJyxcXG4gICAgcGljX3VybDogJ2h0dHBzOi8vYW5kcm9pZC1hcnR3b3Jrcy4yNXBwLmNvbS9mczA4LzIwMjEvMDkvMTMvMS8xMTBfMGU2YmRlZTQyYjA4MzA0ZDE1OGQyODBiNDk0NTJiYzNfY29uXzEzMHgxMzAucG5nJyxcXG4gICAgdXJsOiAnaHR0cHM6Ly9tLm1pZ3V2aWRlby5jb20vbWdzL21zaXRlL3ByZC9kZXRhaWwuaHRtbD9jaWQ9NjU1ODM4MDQ0Jm1nZGJpZD0mY2hhbm5lbElkPUNBQUFCMDAwOTAyMDE1NTAwMDAwMDAwJ1xcbn0se1xcbiAgICB0aXRsZTogJ+WTlOWTqeWTlOWTqScsXFxuICAgIHBpY191cmw6ICdodHRwczovL2FuZHJvaWQtYXJ0d29ya3MuMjVwcC5jb20vZnMwOC8yMDIxLzA5LzI3LzQvMTEwXzhlMmUzZDg4YzQ1MDI1YjM4MGU2OTgxN2Q2ZmI1M2IxX2Nvbl8xMzB4MTMwLnBuZycsXFxuICAgIHVybDogJ2h0dHBzOi8vbS5iaWxpYmlsaS5jb20vYmFuZ3VtaS9wbGF5L2VwNDI4OTkzJ1xcbn0se1xcbiAgICB0aXRsZTogJ+aQnOeLkOinhumikScsXFxuICAgIHBpY191cmw6ICdodHRwczovL2FuZHJvaWQtYXJ0d29ya3MuMjVwcC5jb20vZnMwOC8yMDIxLzA5LzE1LzkvMTEwXzUzMmE1MWY4NDMxZWZjMzc3ODA4YzFmZmZmMmRhMzZmX2Nvbl8xMzB4MTMwLnBuZycsXFxuICAgIHVybDogJ2h0dHBzOi8vbS50di5zb2h1LmNvbS92NzMyOTQ0MS5zaHRtbCdcXG59LHtcXG4gICAgdGl0bGU6ICfkuZDop4YnLFxcbiAgICBwaWNfdXJsOiAnaHR0cHM6Ly9hbmRyb2lkLWFydHdvcmtzLjI1cHAuY29tL2ZzMDgvMjAyMS8wOS8xNS84LzJfMzViNWQ0MzczZjRiY2JhMjhmMzk0ODZlNGYxMTY0ZDlfY29uXzEzMHgxMzAucG5nJyxcXG4gICAgdXJsOiAnaHR0cHM6Ly9tLmxlLmNvbS92cGxheV83Njk1NDMzMy5odG1sP2Zyb209YWpheCdcXG59LHtcXG4gICAgdGl0bGU6ICcxOTA155S15b2x572RJyxcXG4gICAgcGljX3VybDogJ2h0dHBzOi8vYW5kcm9pZC1hcnR3b3Jrcy4yNXBwLmNvbS9mczA4LzIwMjEvMDkvMTgvNC8xMTBfNWYyNGIxMDUyZmVkNGY3ZmM3MzU5M2E4ZWYyNzI3NmRfY29uXzEzMHgxMzAucG5nJyxcXG4gICAgdXJsOiAnaHR0cHM6Ly92aXAuMTkwNS5jb20vbS9wbGF5LzE0Mjk3MjUuc2h0bWwnXFxufSx7XFxuICAgIHRpdGxlOiAn6aOO6KGM6KeG6aKRJyxcXG4gICAgcGljX3VybDogJ2h0dHBzOi8vYW5kcm9pZC1hcnR3b3Jrcy4yNXBwLmNvbS9mczA4LzIwMjEvMDkvMTYvNC8xMTBfNmY2YWY5Zjk5YjI2MjllNTFmMGIwYTMzY2RmZjFkOWVfY29uXzEzMHgxMzAucG5nJyxcXG4gICAgdXJsOiAnaHR0cDovL20uZnVuLnR2L21wbGF5Lz9taWQ9OTU3MTknXFxufSx7XFxuICAgIHRpdGxlOiAn6KW/55Oc6KeG6aKRJyxcXG4gICAgcGljX3VybDogJ2h0dHBzOi8vYW5kcm9pZC1hcnR3b3Jrcy4yNXBwLmNvbS9mczA4LzIwMjEvMDkvMjcvNS8xMTBfYTg2MjY1ODgyZWQxOGM2MTkwNTY2ZTllYTI1Zjk2OThfY29uXzEzMHgxMzAucG5nJyxcXG4gICAgdXJsOiAnaHR0cHM6Ly93d3cuaXhpZ3VhLmNvbS82Njk5MzU2NzkyOTA1Nzk0MDU1J1xcbn1dO1xcbnZhciBxcHMgPSBbXFxuICAgIHt0aXRsZTon6b6Z6IW+JywgdXJsOidMVC0xZWMzZjY3NTRmNjg1ODZlZDdmOTJjM2U5OTVjZmNhNicscGljX3VybDogJ2h0dHBzOi8vbGFubWVpZ3VvamlhbmcuY29tL3R1Ymlhby9rZS80LnBuZyd9LFxcbiAgICB7dGl0bGU6ICfkurrkurrov7cnLCB1cmw6J3JlbnJlbm1pLWFiOTI0ZTExZDJkNjkzOTcnLHBpY191cmw6J2h0dHBzOi8vbGFubWVpZ3VvamlhbmcuY29tL3R1Ymlhby9rZS82LnBuZyd9LFxcbiAgICB7dGl0bGU6ICfkupTmr5InLCB1cmw6J3d1ZHV5dW4tMTY0OTQzMTMwNzAyMScscGljX3VybDogJ2h0dHBzOi8vbGFubWVpZ3VvamlhbmcuY29tL3R1Ymlhby9rZS8zMC5wbmcnfSxcXG4gICAge3RpdGxlOiAn5aSa5aSaJywgdXJsOidodHRwczovL20zdTguY2FjaGUuc3VveW8uY2MvbTN1OC8yMDIyMDMvOC9hYWFiZDkyZGEyNjc3NGM2ODg1MGEwMjMxNTNjODBmMWFlNmZhOWJlLm0zdTgnLHBpY191cmw6ICdodHRwczovL2xhbm1laWd1b2ppYW5nLmNvbS90dWJpYW8va2UvNDkucG5nJ30sXFxuICAgIHt0aXRsZTogJ+iejeWFtCcsIHVybDogJ1JvbmdYaW5nVlItNDIxNTY0NTU4MTkzMicscGljX3VybDonaHR0cHM6Ly9sYW5tZWlndW9qaWFuZy5jb20vdHViaWFvL2tlLzgwLnBuZyd9LFxcbiAgICB7dGl0bGU6ICfpm6rkuronLCB1cmw6ICd4dWVyZW4tMTY0NjgyMzA3MicscGljX3VybDonaHR0cHM6Ly9sYW5tZWlndW9qaWFuZy5jb20vdHViaWFvL3EvMTMzLnBuZyd9LFxcbiAgICB7dGl0bGU6ICfml4vpo47kupEnLCB1cmw6J3hmeS01MjllNjQ1Nzk1M2Q1NDVmJyxwaWNfdXJsOiAnaHR0cHM6Ly9sYW5tZWlndW9qaWFuZy5jb20vdHViaWFvL2tlLzU0LnBuZyd9LFxcbiAgICB7dGl0bGU6ICfnkZ7kuLDotYTmupAnLHVybDogJ2h0dHBzOi8vMS5ydWlmZW5nbGIuY29tL3BsYXkvMTY0NDkxNDU5NS5tM3U4JyxwaWNfdXJsOiAnaHR0cHM6Ly9sYW5tZWlndW9qaWFuZy5jb20vdHViaWFvL2tlLzcyLnBuZyd9XFxuXTtcXG5jb25zdCB7Y29sb3IsIHNtYWxsfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3V0aWxpeT9ydWxlPemBk+mVv+S7k+W6k1Byb1xcXCIpO1xcbmNvbnN0IGxzZz0kLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9sb2NhbFN0b3JhZ2U/cnVsZT3pgZPplb/ku5PlupNQcm9cXFwiKTtcXG52YXIgdGltZW91dCA9IHBhcnNlSW50KGxzZy5nZXRJdGVtKCd0aW1lb3V0JywnNTAwMCcpKTsvL+i2heaXtlxcbnZhciBub3dQYXJzZSA9IGdldEl0ZW0oJ1BhcnNlJywnJyk7Ly9nZXRJdGVt55qE5pON5L2c5Y2D5LiH5LiN6KaB5Yqg5YWl5b6q546vLOW9k+WJjemAieaLqeeahOino+aekFxcbnZhciBkeF9tb2RlID0gZ2V0SXRlbSgn54K56YCJJywn5Y2V5rWLJyk7Ly/ngrnpgInmqKHlvI9cXG52YXIgcXBfdGVzdCA9IGdldEl0ZW0oJ+WIh+eJhycsJzAnKTsvL+aYvuekuuWIh+eJh1xcbmlmKHFwX3Rlc3Q9PT0nMScpe1xcbiAgICBqc29uID0gcXBzO1xcbn1lbHNlIGlmKHFwX3Rlc3Q9PT0nMicpe1xcbiAgICBqc29uID0ganNvbi5jb25jYXQocXBzKTtcXG59XFxuaXRlbXMucHVzaCh7XFxuICAgIHRpdGxlOiBjb2xvcign6a2U5pat6Kej5p6Q5rWL6K+VJywnIzBDMDAwMCcpLFxcbiAgICBkZXNjOifljZXmjqXlj6PlpJrnsbvmraPniYh85Y2V5q2j54mI5aSa5o6l5Y+jIOa1i+ivlSAnKyfwn5WSJyt0aW1lb3V0LFxcbiAgICB1cmw6ICQodGltZW91dCwn6K+36L6T5YWl6Kej5p6Q6LaF5pe25q+r56eSJykuaW5wdXQoKCk9PntcXG4gICAgICAgIGlmKCFwYXJzZUludChpbnB1dCkpe1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/otoXml7borr7nva7plJnor6/vvIzmi5Lnu53kv53lrZgnXFxuICAgICAgICB9XFxuICAgICAgICBjb25zdCBsc2c9JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvbG9jYWxTdG9yYWdlP3J1bGU96YGT6ZW/5LuT5bqTUHJvXFxcIik7XFxuICAgICAgICBsc2cuc2V0SXRlbSgndGltZW91dCcsaW5wdXR8fCc1MDAwJyk7XFxuICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey6K6+572u6Kej5p6Q6LaF5pe25q+r56eSOicraW5wdXR8fCc1MDAwJztcXG4gICAgfSksXFxuICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxuICAgIGV4dHJhOntcXG4gICAgICAgIGxpbmVWaXNpYmxlOmZhbHNlXFxuICAgIH1cXG59KTtcXG5pdGVtcy5wdXNoKHtcXG4gICAgdGl0bGU6J+S9v+eUqOivtOaYjicsXFxuICAgIGNvbF90eXBlOid0ZXh0X2NlbnRlcl8xJyxcXG4gICAgdXJsOiQoJ2hpa2VyOi8vZW1wdHkjbm9SZWNvcmRIaXN0b3J5IyNub0hpc3RvcnkjJykucnVsZSgoY29sb3IpPT57XFxuICAgICAgICBsZXQgZD1bXTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6Y29sb3IoJ+ebuOS/oeiHquW3se+8jOS9oOS4jemcgOimgeivtOaYjicsJ2dyZXknKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTondGV4dF8xJyxcXG4gICAgICAgICAgICB1cmw6J2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgICAgbGluZVZpc2libGU6ZmFsc2VcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIGxldCBub3RlPSfmg7PmiJHlhpnmlZnnqIvvvJ/msqHpl6jvvIEnO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTpub3RlLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidyaWNoX3RleHQnXFxuICAgICAgICB9KTtcXG4gICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgfSxjb2xvciksXFxuICAgIGV4dHJhOntcXG4gICAgICAgIGxpbmVWaXNpYmxlOnRydWVcXG4gICAgfVxcbn0pO1xcbml0ZW1zLnB1c2goe1xcbiAgICBjb2xfdHlwZTpcXFwiYmxhbmtfYmxvY2tcXFwiLFxcbn0pO1xcbml0ZW1zLnB1c2goe1xcbiAgICB0aXRsZTpjb2xvcign8J+PoO+4j+S4u+eoi+W6jycsJyNmZjAwMDAnKSxcXG4gICAgdXJsOiBcXFwiaGlrZXI6Ly9ob21lQE15RmllbGThtLDigb9cXFwiLFxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxufSk7XFxuaXRlbXMucHVzaCh7XFxuICAgIHRpdGxlOmNvbG9yKCfwn46o57q/6Lev6YWN572uJywnI2ZhOGMzNScpLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU96K6+572uI25vSGlzdG9yeSNcXFwiLFxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxufSk7XFxuaXRlbXMucHVzaCh7XFxuICAgIHRpdGxlOmNvbG9yKCfwn46v6Kej5p6Q566h55CGJywnIzNlZWRlNycpLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU957yW6L6RI25vSGlzdG9yeSNcXFwiLFxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxufSk7XFxuaXRlbXMucHVzaCh7XFxuICAgIHRpdGxlOmNvbG9yKCfimKLvuI/mibnph4/liKDpmaQnLCcjODAxZGFlJyksXFxuICAgIHVybDogZ2V0UGF0aCgnaGlrZXI6Ly9maWxlcy9jYWNoZS9wbHNjUGFyc2UuaHRtbCcpLFxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxufSk7XFxuaXRlbXMucHVzaCh7XFxuICAgIHRpdGxlOmNvbG9yKCfwn5Sg5aSH6IOO566h55CGJywnIzBlYjgzYScpLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU96Kej5p6QI25vUmVjb3JkSGlzdG9yeSNcXFwiLFxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxufSk7XFxubGV0IHFwX3RpdGxlID0gJ/Cfkr/liIfniYfmtYvor5UnO1xcbmlmKHFwX3Rlc3Q9PT0nMScpe1xcbiAgICBxcF90aXRsZSA9ICBjb2xvcihxcF90aXRsZSwnIzZiYzhkMCcpXFxufWVsc2UgaWYocXBfdGVzdD09PScyJyl7XFxuICAgIHFwX3RpdGxlID0gIGNvbG9yKHFwX3RpdGxlLCcjNmJhNmQwJylcXG59XFxuaXRlbXMucHVzaCh7XFxuICAgIHRpdGxlOnFwX3RpdGxlLFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGNvbG9yKT0+e1xcbiAgICAgICAgbGV0IG1vZGVzID0gWycwJywnMScsJzInXTtcXG4gICAgICAgIGxldCBxcF90ZXN0ID0gZ2V0SXRlbSgn5YiH54mHJywnMCcpO1xcbiAgICAgICAgbGV0IGlkZXggPSBtb2Rlcy5pbmRleE9mKHFwX3Rlc3QpO1xcbiAgICAgICAgbGV0IG5leHRJZGV4ID0gaWRleCA8IG1vZGVzLmxlbmd0aCAtMT9pZGV4KzE6MDtcXG4gICAgICAgIHFwX3Rlc3Q9bW9kZXNbbmV4dElkZXhdO1xcbiAgICAgICAgc2V0SXRlbSgn5YiH54mHJyxxcF90ZXN0KTtcXG4gICAgICAgIC8vIHVwZGF0ZUl0ZW0oJ3FwX3Rlc3QnLHtcXG4gICAgICAgIC8vICAgICB0aXRsZTpxcF90ZXN0PT09JzEnP2NvbG9yKCfwn5K/5YiH54mH5rWL6K+VJywnIzZiYzhkMCcpOifwn5K/5YiH54mH5rWL6K+VJ1xcbiAgICAgICAgLy8gfSk7XFxuICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgIH0sY29sb3IpLFxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICBleHRyYTp7XFxuICAgICAgICBpZDoncXBfdGVzdCdcXG4gICAgfVxcbn0pO1xcbml0ZW1zLnB1c2goe1xcbiAgICB0aXRsZTon4pqZ54K56YCJ5qih5byPOicrZHhfbW9kZSxcXG4gICAgY29sX3R5cGU6J3RleHRfMicsXFxuICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpPT57XFxuICAgICAgICBsZXQgZHhfbW9kZSA9IGdldEl0ZW0oJ+eCuemAiScsJ+WNlea1iycpO1xcbiAgICAgICAgZHhfbW9kZT0oZHhfbW9kZT09PSfljZXmtYsnPyflpJrmtYsnOifljZXmtYsnKTtcXG4gICAgICAgIHNldEl0ZW0oJ+eCuemAiScsZHhfbW9kZSk7XFxuICAgICAgICB1cGRhdGVJdGVtKCdkeF9tb2RlJyx7XFxuICAgICAgICAgICAgdGl0bGU6J+KameeCuemAieaooeW8jzonK2R4X21vZGVcXG4gICAgICAgIH0pO1xcbiAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICB9KSxcXG4gICAgZXh0cmE6e1xcbiAgICAgICAgaWQ6J2R4X21vZGUnXFxuICAgIH1cXG59KTtcXG5sZXQgZHhfdGVzdCA9ICfinaTvuI/op6PmnpDlpJrpgInmtYvor5UnO1xcbml0ZW1zLnB1c2goe1xcbiAgICB0aXRsZTpkeF90ZXN0LFxcbiAgICBjb2xfdHlwZTondGV4dF8yJyxcXG4gICAgdXJsOiQoJ2hpa2VyOi8vZW1wdHkjbm9SZWNvcmRIaXN0b3J5IyNub0hpc3RvcnkjJykucnVsZSgoZHhfdGVzdCxjb2xvcik9PntcXG4gICAgICAgIHNldFBhZ2VUaXRsZShkeF90ZXN0KTtcXG4gICAgICAgIGFkZExpc3RlbmVyKCdvbkNsb3NlJywgJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpOy8v5Yi35paw6a2U5pat5Li76aG16Z2iXFxuICAgICAgICB9KSk7XFxuICAgICAgICBkPVtdO1xcbiAgICAgICAgJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvanhJdGVtP3J1bGU9TXlGaWVsZOG0sOKBv1xcXCIpLmp4TGlzdCgpO1xcbiAgICAgICAganhzPWQuZmlsdGVyKGl0PT5pdC5jb2xfdHlwZT09PSd0ZXh0XzInKS5tYXAoaXQ9PnBkZmgoaXQudGl0bGUsJ2ZvbnQsLTEmJlRleHQnKSk7XFxuICAgICAgICBsZXQgZGF0YSA9IHN0b3JhZ2UwLmdldE15VmFyKCdqeF9zZWxlY3RlZCcpfHxbXTtcXG4gICAgICAgIGxldCBkeF9maWx0ZXIgPSBnZXRJdGVtKCdkeF9maWx0ZXInLCflhajpg6gnKTtcXG4gICAgICAgIGlmKGR4X2ZpbHRlciA9PT0gJ+W3sumAiScpe1xcbiAgICAgICAgICAgIGp4cyA9IGp4cy5maWx0ZXIoaXQ9PmRhdGEuaW5jbHVkZXMoaXQpKTtcXG4gICAgICAgIH1lbHNlIGlmKGR4X2ZpbHRlcj09PSAn5pyq6YCJJyl7XFxuICAgICAgICAgICAganhzID0ganhzLmZpbHRlcihpdD0+IWRhdGEuaW5jbHVkZXMoaXQpKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGQ9anhzLm1hcCgoaXQpPT57XFxuICAgICAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6KEFycmF5LmlzQXJyYXkoZGF0YSkmJmRhdGEuaW5jbHVkZXMoaXQpKT9jb2xvcihpdCwnIzEyYjY2OCcpOml0LFxcbiAgICAgICAgICAgICAgICAvLyB1cmw6J3RvYXN0Oi8v5Yqf6IO95byA5Y+R5LitJyxcXG4gICAgICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGl0LGNvbG9yKT0+e1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBzdG9yYWdlMC5nZXRNeVZhcignanhfc2VsZWN0ZWQnKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkoZGF0YSkpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhdGEuaW5jbHVkZXMoaXQpKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCfljIXlkKs6JytpdCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuc3BsaWNlKGRhdGEuaW5kZXhPZihpdCksMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucHVzaChpdClcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoJ2p4X3NlbGVjdGVkJywgZGF0YSlcXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKCdqeF9zZWxlY3RlZCcsIFtpdF0pXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBpZihzdG9yYWdlMC5nZXRNeVZhcignanhfc2VsZWN0ZWQnKS5pbmNsdWRlcyhpdCkpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oaXQse1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTpjb2xvcihpdCwnIzEyYjY2OCcpXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oaXQse1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTppdFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgICAgIH0saXQsY29sb3IpLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTondGV4dF8zJyxcXG4gICAgICAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgICAgICAgaWQ6aXRcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICAgICAgbGV0IG9wPVtdO1xcbiAgICAgICAgb3AucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6J+WFqOmAiScsXFxuICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGp4cyxjb2xvcik9PntcXG4gICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoJ2p4X3NlbGVjdGVkJywganhzKTtcXG4gICAgICAgICAgICAgICAganhzLmZvckVhY2goaXQ9PntcXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oe3RpdGxlOiBjb2xvcihpdCwnIzEyYjY2OCcpLCBleHRyYToge2lkOiBpdH19KTtcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICB9LGp4cyxjb2xvciksXFxuICAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nXFxuICAgICAgICB9KTtcXG4gICAgICAgIG9wLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiflhajkuI3pgIknLFxcbiAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChqeHMpPT57XFxuICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKCdqeF9zZWxlY3RlZCcsIFtdKTtcXG4gICAgICAgICAgICAgICAganhzLmZvckVhY2goaXQ9PntcXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oe3RpdGxlOiBpdCwgZXh0cmE6IHtpZDogaXR9fSk7XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgfSxqeHMpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICBvcC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTon5Y+N6YCJJyxcXG4gICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoanhzLGNvbG9yKT0+e1xcbiAgICAgICAgICAgICAgICBsZXQgb2xkU2VsID0gc3RvcmFnZTAuZ2V0TXlWYXIoJ2p4X3NlbGVjdGVkJywgW10pO1xcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXREaWZmZXJlbnREYXRhKGFyckEsIGFyckIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnJBLmNvbmNhdChhcnJCKS5maWx0ZXIoZnVuY3Rpb24gKHYsIGksIGFycikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnIuaW5kZXhPZih2KSA9PT0gYXJyLmxhc3RJbmRleE9mKHYpO1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgbGV0IG5ld1NlbCA9IGdldERpZmZlcmVudERhdGEoanhzLG9sZFNlbCk7XFxuICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKCdqeF9zZWxlY3RlZCcsIG5ld1NlbCk7XFxuICAgICAgICAgICAgICAgIG9sZFNlbC5mb3JFYWNoKGl0PT57XFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKHt0aXRsZTogaXQsIGV4dHJhOiB7aWQ6IGl0fX0pO1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgbmV3U2VsLmZvckVhY2goaXQ9PntcXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oe3RpdGxlOiBjb2xvcihpdCwnIzEyYjY2OCcpLCBleHRyYToge2lkOiBpdH19KTtcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICB9LGp4cyxjb2xvciksXFxuICAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nXFxuICAgICAgICB9KTtcXG4gICAgICAgIG9wLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOifliKDpmaQnLFxcbiAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpPT57XFxuICAgICAgICAgICAgICAgIGxldCBzZWwgPSBzdG9yYWdlMC5nZXRNeVZhcignanhfc2VsZWN0ZWQnLCBbXSk7XFxuICAgICAgICAgICAgICAgIGlmKHNlbC5sZW5ndGggPCAxKXtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/llaXpg73msqHpgInvvIzliKDpmaTkuKrpuKHmr5t+J1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiAkKCfnoa7orqTliKDpmaTlt7LpgInmi6nnmoQ6JytzZWxbMF0rJ+etiScrc2VsLmxlbmd0aCsn5p2h6Kej5p6QPycpLmNvbmZpcm0oKHNlbCk9PntcXG4gICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZVJvdXRlID0gZ2V0VmFyKCdwYXJzZVJvdXRlJyk7XFxuICAgICAgICAgICAgICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIGZldGNoKHBhcnNlUm91dGUpKTtcXG4gICAgICAgICAgICAgICAgICAgIGZvcihsZXQgbmFtZSBpbiBzZWwpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLmNvZGVzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBqc29uLmNvZGVzW25hbWVdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGpzb24udGl0bGUgPSBqc29uLnRpdGxlLmZpbHRlcihpdD0+IXNlbC5pbmNsdWRlcyhpdCkpOyAvLyDnrZvpgInmsqHmnInooqvliKDpmaTnmoTmoIfpophcXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCAkLnN0cmluZ2lmeShqc29uKSk7XFxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcignanhfc2VsZWN0ZWQnLCBbXSk7Ly/liKDpmaTlrozkuobmuIXnqbrpgInkuK3pobnnm65cXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lt7LlsIbjgJZcXFwiICsgc2VsWzBdICsgXFxcIuOAl+etiVxcXCIrc2VsLmxlbmd0aCtcXFwi5p2h6Kej5p6Q5Yig6ZmkXFxcIjtcXG4gICAgICAgICAgICAgICAgfSxzZWwpXFxuICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nXFxuICAgICAgICB9KTtcXG4gICAgICAgIG9wLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOifmk43kvZx8562b6YCJICcrY29sb3IoanhzLmxlbmd0aCwnI2ZmNzAwMCcpLFxcbiAgICAgICAgICAgIHVybDondG9hc3Q6Ly/liY3pnaLmjInpkq7mmK/mk43kvZzvvIzlkI7pnaLmjInpkq7mmK/nrZvpgIknLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICBvcC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTpkeF9maWx0ZXI9PT0n5YWo6YOoJz9jb2xvcign5YWo6YOoJywnIzEyYjY2OCcpOiflhajpg6gnLFxcbiAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpPT57XFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oJ2R4X2ZpbHRlcicsJ+WFqOmDqCcpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbidcXG4gICAgICAgIH0pO1xcbiAgICAgICAgb3AucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ZHhfZmlsdGVyPT09J+W3sumAiSc/Y29sb3IoJ+W3sumAiScsJyMxMmI2NjgnKTon5bey6YCJJyxcXG4gICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKT0+e1xcbiAgICAgICAgICAgICAgICBzZXRJdGVtKCdkeF9maWx0ZXInLCflt7LpgIknKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nXFxuICAgICAgICB9KTtcXG4gICAgICAgIG9wLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOmR4X2ZpbHRlcj09PSfmnKrpgIknP2NvbG9yKCfmnKrpgIknLCcjMTJiNjY4Jyk6J+acqumAiScsXFxuICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCk9PntcXG4gICAgICAgICAgICAgICAgc2V0SXRlbSgnZHhfZmlsdGVyJywn5pyq6YCJJyk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICBkPW9wLmNvbmNhdChkKTtcXG4gICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgfSxkeF90ZXN0LGNvbG9yKVxcbn0pO1xcbmZ1bmN0aW9uIHNvcnRCeUtleShhcnJheSwga2V5LCBvcmRlcikgey8v5a+56LGh5pWw57uE5oyJ5p+Q5Liq6ZSu5YC85o6S5bqPXFxuICAgIHJldHVybiBhcnJheS5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcXG4gICAgICAgIHZhciB4ID0gcGFyc2VJbnQoYVtrZXldLm1hdGNoKC8oXFxcXGQrKS8pWzFdKTsvL+S/ruWkjeWkp+S6jjEw5Ye66Zeu6aKYXFxuICAgICAgICB2YXIgeSA9IHBhcnNlSW50KGJba2V5XS5tYXRjaCgvKFxcXFxkKykvKVsxXSk7XFxuICAgICAgICBpZiAob3JkZXIpIHtcXG4gICAgICAgICAgICByZXR1cm4gKCh4IDwgeSkgPyAtMSA6ICgoeCA+IHkpID8gMSA6IDApKVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gKCh4IDwgeSkgPyAoKHggPiB5KSA/IDEgOiAwKSA6IC0xKVxcbiAgICAgICAgfVxcbiAgICB9KVxcbn1cXG5pdGVtcy5wdXNoKHtcXG4gICAgdGl0bGU6ICfwn5ug5LiA6ZSu5rWL6K+V5bey6YCJ5o6l5Y+j77yaJytub3dQYXJzZSxcXG4gICAgLy91cmw6ICd0b2FzdDovL+i/meaYr+aOpeWPoycsXFxuICAgIHVybDokKCkubGF6eVJ1bGUoKGpzb24sbm93UGFyc2UsdGltZW91dCxzb3J0QnlLZXkpPT57XFxuICAgICAgICBpZighZ2V0SXRlbSgnUGFyc2UnLCcnKSl7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+mBv+WFjei1hOa6kOa1qui0ue+8jOivt+WFiOWcqOS4i+aWuemAieS4gOS4quaOpeWPo+WGjei/m+ihjOa1i+ivlSdcXG4gICAgICAgIH1cXG4gICAgICAgIHZhciBjb3VudCA9IGpzb24ubGVuZ3RoOyAvL+iuvue9ruS7u+WKoeaVsOmHj1xcbiAgICAgICAgbG9nKCfprZTmlq3lvIDlkK/lpJrku7vliqHop6PmnpAs5Lu75Yqh5pWw6YePOicrY291bnQpO1xcbiAgICAgICAgdmFyIHRhc2sgPSBmdW5jdGlvbihvYmopIHtcXG4gICAgICAgICAgICBldmFsKCd2YXIgY29uZmlnX2RwID0nICsgZmV0Y2goZ2V0VmFyKCdvbGRDb25maWcnKSkpO1xcbiAgICAgICAgICAgIGV2YWwoZmV0Y2goY29uZmlnX2RwLmNqKSk7XFxuICAgICAgICAgICAgcmV0dXJuIGF5dG1QYXJzZShvYmoudmlwVXJsLG9iai5uYW1lLG9iai50aW1lb3V0KTtcXG4gICAgICAgIH07XFxuICAgICAgICB2YXIgcGFyc2VSZXQgPSBbXTsgLy/op6PmnpDnu5PmnpzliJfooahcXG4gICAgICAgIGxldCB0YXNrcyA9IGpzb24ubWFwKChpdCxpZGV4KT0+e1xcbiAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgIGZ1bmM6IHRhc2ssXFxuICAgICAgICAgICAgICAgIHBhcmFtOiB7XFxuICAgICAgICAgICAgICAgICAgICAvL25hbWU6aXQudGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICBuYW1lOm5vd1BhcnNlLFxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTppdC50aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIC8vIHJ1bGU6aXQucnVsZSxcXG4gICAgICAgICAgICAgICAgICAgIHZpcFVybDogaXQudXJsLFxcbiAgICAgICAgICAgICAgICAgICAgdGltZW91dDogdGltZW91dFxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICBpZDogXFxcInRhc2tcXFwiK2lkZXhcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIHNob3dMb2FkaW5nKFxcXCLprZTmlq3lubblj5Hop6PmnpDkuK3vvIzliankvZnlvoXmtYs6XFxcIitjb3VudCk7XFxuICAgICAgICBiZSh0YXNrcyx7XFxuICAgICAgICAgICAgZnVuYzogZnVuY3Rpb24ob2JqLCBpZCwgZXJyb3IscmV0KSB7XFxuICAgICAgICAgICAgICAgIGxvZyhcXFwi55uR5ZCs5Yiw5Lu75YqhXFxcIiArIGlkKyflt7Lnu5PmnZ8sZXJyb3I6JytlcnJvcisnLHJldDonK3JldCk7XFxuICAgICAgICAgICAgICAgIHJldCA9IHJldHx8Jyc7XFxuICAgICAgICAgICAgICAgIGVycm9yPWVycm9yfHwnJztcXG4gICAgICAgICAgICAgICAgcGFyc2VSZXQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0YXNrOmlkLFxcbiAgICAgICAgICAgICAgICAgICAgcmV0OnJldCxcXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOmVycm9yLFxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTp0YXNrcy5maWx0ZXIoaXQ9Pml0LmlkPT09aWQpWzBdLnBhcmFtLnR5cGVcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGNvdW50IC09IDE7IC8v5a6M5oiQ5LqG5Lu75Yqh77yM5Lu75Yqh5pWw6YePLTFcXG4gICAgICAgICAgICAgICAgLy9sb2cob2JqKTtcXG4gICAgICAgICAgICAgICAgaWYgKGNvdW50ID4gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgc2hvd0xvYWRpbmcoXFxcIumtlOaWreW5tuWPkeino+aekOS4re+8jOWJqeS9meW+hea1izpcXFwiICsgY291bnQpXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBoaWRlTG9hZGluZygpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBwYXJhbTogey8v5Lyg5Yiw55uR5ZCs5Ye95pWw55qEb2Jq5Y+C5pWw6YeMXFxuICAgICAgICAgICAgICAgIGhpOiBcXFwiY2NjXFxcIixcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTsvL+aJp+ihjOWkmuS7u+WKoVxcbiAgICAgICAgLy9sb2coXFxcIuWkmuS7u+WKoeaJp+ihjOe7k+aenOaVsDpcXFwiK3BhcnNlUmV0Lmxlbmd0aCk7XFxuICAgICAgICBwYXJzZVJldD1zb3J0QnlLZXkocGFyc2VSZXQsJ3Rhc2snLHRydWUpOy8v5Y2H5bqP5o6S5YiXXFxuICAgICAgICAvLyBsb2cocGFyc2VSZXQubWFwKGl0PT5pdC50YXNrKSk7XFxuICAgICAgICByZXR1cm4gJCgnaGlrZXI6Ly9lbXB0eSNub1JlY29yZEhpc3RvcnkjI25vSGlzdG9yeSMnKS5ydWxlKChwYXJzZVJldCk9PntcXG4gICAgICAgICAgICBzZXRQYWdlVGl0bGUoZ2V0SXRlbSgnUGFyc2UnKSsn6Kej5p6Q5oql5ZGKJyk7XFxuICAgICAgICAgICAgY29uc3Qge2lzVmlkZW99ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvZ2xvYmFsUGFyc2U/cnVsZT3pgZPplb/ku5PlupNQcm8nKTtcXG4gICAgICAgICAgICBjb25zdCB7Y29sb3IsIHNtYWxsfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3V0aWxpeT9ydWxlPemBk+mVv+S7k+W6k1Byb1xcXCIpO1xcbiAgICAgICAgICAgIGxldCBkPVtdO1xcbiAgICAgICAgICAgIGxldCBzaG93X21vZGUgPSBnZXRJdGVtKCdzaG93X21vZGUnLCfor6bnu4YnKTtcXG4gICAgICAgICAgICBsZXQgY29sX3R5cGUgPSBzaG93X21vZGU9PT0n6K+m57uGJz8ndGV4dF8xJzondGV4dF8zJztcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTon5pi+56S65qih5byPOicrY29sb3Ioc2hvd19tb2RlLCcjZmE4YzM1JyksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGNvbG9yLGNudCk9PntcXG4gICAgICAgICAgICAgICAgICAgIGxldCBzaG93X21vZGUgPSBnZXRJdGVtKCdzaG93X21vZGUnLCfor6bnu4YnKTtcXG4gICAgICAgICAgICAgICAgICAgIHNob3dfbW9kZSA9IHNob3dfbW9kZT09PSfor6bnu4YnPyfnsr7nroAnOifor6bnu4YnO1xcbiAgICAgICAgICAgICAgICAgICAgc2V0SXRlbSgnc2hvd19tb2RlJyxzaG93X21vZGUpO1xcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbSgnc2hvd19tb2RlJyx7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6J+aYvuekuuaooeW8jzonK2NvbG9yKHNob3dfbW9kZSwnI2ZhOGMzNScpXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb2xfdHlwZSA9IHNob3dfbW9kZT09PSfor6bnu4YnPyd0ZXh0XzEnOid0ZXh0XzMnO1xcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpPTA7aTxjbnQ7aSsrKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKCdzaG93X3JldF8nK2kse1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTpjb2xfdHlwZVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICB9LGNvbG9yLHBhcnNlUmV0Lmxlbmd0aCksXFxuICAgICAgICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgICAgICAgIGlkOidzaG93X21vZGUnXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBwYXJzZVJldC5mb3JFYWNoKChpdCxpZHgpPT57XFxuICAgICAgICAgICAgICAgIGxldCB0aXRsZT1pdC5uYW1lO1xcbiAgICAgICAgICAgICAgICBpZihpdC5yZXQmJiFpdC5yZXQuaW5jbHVkZXMoJ3VuZGVmaW5lZCcpJiYoLyNpc1ZpZGVvPXRydWUjLy50ZXN0KGl0LnJldCl8fGlzVmlkZW8oaXQucmV0KSkpe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9Y29sb3IodGl0bGUsJyMxMmI2NjgnKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGxldCBkZXNjPShpdC5yZXR8fGl0LmVycm9yKS5zdWJzdHIoMCw2MCk7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTp0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6c21hbGwoZGVzYyksXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTpjb2xfdHlwZSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDppdC5yZXQsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0Oml0LnJldHx8aXQuZXJyb3IsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6J3Nob3dfcmV0XycraWR4XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgICAgIH0scGFyc2VSZXQpXFxuICAgIH0sanNvbixub3dQYXJzZSx0aW1lb3V0LHNvcnRCeUtleSksXFxuICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxuICAgIGV4dHJhOntcXG4gICAgICAgIGxpbmVWaXNpYmxlOmZhbHNlXFxuICAgIH1cXG59KTtcXG4vKlxcbnZhciBwYXJzZVJvdXRlID0gJ2hpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uJztcXG52YXIgTXlQYXJzZVMgPSB7fTtcXG5ldmFsKCd2YXIgcGFyc2VGaWxlID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcbk15UGFyc2VTID0gT2JqZWN0LmtleXMocGFyc2VGaWxlLmNvZGVzKTtcXG5NeVBhcnNlUy5yZXZlcnNlKCk7XFxuKi9cXG52YXIgZD1bXTtcXG4kLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9qeEl0ZW0/cnVsZT1NeUZpZWxk4bSw4oG/XFxcIikuanhMaXN0KCk7XFxuZD1kLmZpbHRlcihpdD0+aXQuY29sX3R5cGU9PT0ndGV4dF8yJykubWFwKGl0PT5wZGZoKGl0LnRpdGxlLCdmb250LC0xJiZUZXh0JykpO1xcbk15UGFyc2VTPWQ7XFxuXFxuZm9yIChsZXQgaSBpbiBNeVBhcnNlUykge1xcbiAgICBpZiAoIS9kZWZhdWx0UGFyc2UvLnRlc3QoTXlQYXJzZVNbaV0pKSB7XFxuICAgICAgICBsZXQgdGl0bGUgPU15UGFyc2VTW2ldO1xcbiAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IG5vd1BhcnNlID09PSB0aXRsZT9jb2xvcih0aXRsZSwnIzEyYjY2OCcpOnRpdGxlLFxcbiAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChpcHQpPT57XFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oJ1BhcnNlJyxpcHQpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey6YCJ5o6l5Y+jJytpcHQ7XFxuICAgICAgICAgICAgfSx0aXRsZSkgLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgICAgIH0pO1xcbiAgICB9XFxufVxcbmxldCB0YWc9Jyc7XFxuZm9yIChsZXQgaSBpbiBqc29uKSB7XFxuICAgIGxldCB0aXRsZSA9IGpzb25baV0udGl0bGU7XFxuICAgIGxldCB6dXJsPWpzb25baV0udXJsO1xcbiAgICBsZXQgenBpYyA9IGpzb25baV0ucGljX3VybDtcXG4gICAgaWYoZ2V0TXlWYXIoJ3pkeScpID09PSB6dXJsKXtcXG4gICAgICAgIHRhZz10aXRsZTtcXG4gICAgICAgIHRpdGxlPSfim7MnK3RpdGxlO1xcbiAgICB9XFxuICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgdGl0bGU6dGl0bGUsXFxuICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHp1cmwsbm93UGFyc2UsdGltZW91dCx2aXBPYmopID0+IHtcXG4gICAgICAgICAgICBpZihnZXRNeVZhcignemR5JykhPT16dXJsKXtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3pkeScsIHp1cmwpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHZhciBkeF9tb2RlID0gZ2V0SXRlbSgn54K56YCJJywn5Y2V5rWLJyk7Ly/ngrnpgInmqKHlvI9cXG4gICAgICAgICAgICBpZihkeF9tb2RlPT09J+WNlea1iycpe1xcbiAgICAgICAgICAgICAgICBzaG93TG9hZGluZygn6a2U5pat5Yqo5oCB6Kej5p6Q5LitLOivt+eojeetiS4uLicpO1xcbiAgICAgICAgICAgICAgICBldmFsKCd2YXIgY29uZmlnX2RwID0nICsgZmV0Y2goZ2V0VmFyKCdvbGRDb25maWcnKSkpO1xcbiAgICAgICAgICAgICAgICBldmFsKGZldGNoKGNvbmZpZ19kcC5jaikpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gYXl0bVBhcnNlKHp1cmwsbm93UGFyc2UsdGltZW91dCk7XFxuICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgIGxldCBkYXRhID0gc3RvcmFnZTAuZ2V0TXlWYXIoJ2p4X3NlbGVjdGVkJyl8fFtdO1xcbiAgICAgICAgICAgICAgICBpZihkYXRhLmxlbmd0aD4zMil7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgn5L2g5omA6YCJ5oup5b6F5rWL6K+V55qE6Kej5p6Q5pWw5YWx6K6hOicrZGF0YS5sZW5ndGgrJ+S4qu+8jOi2heWHuuS6huaOqOiNkOacgOWkp+aVsDMyLOaAp+iDveWPr+iDveaegeW3rizmmK/lkKbnu6fnu60/JykuY29uZmlybSgoZGF0YSx2aXBPYmosdGltZW91dCk9PntcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7dGVzdF9yZXBvcnR9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvdGVzdF9yZXBvcnQnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGVzdF9yZXBvcnQoZGF0YSx2aXBPYmosdGltZW91dClcXG4gICAgICAgICAgICAgICAgICAgIH0sZGF0YSx2aXBPYmosdGltZW91dClcXG4gICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7dGVzdF9yZXBvcnR9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvdGVzdF9yZXBvcnQnKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0X3JlcG9ydChkYXRhLHZpcE9iaix0aW1lb3V0KVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSx6dXJsLG5vd1BhcnNlLHRpbWVvdXQsanNvbltpXSksXFxuICAgICAgICBwaWNfdXJsOnpwaWMsXFxuICAgICAgICBjb2xfdHlwZTogJ2ljb25fNCdcXG4gICAgfSk7XFxufVxcbmFkZExpc3RlbmVyKCdvbkNsb3NlJywgJC50b1N0cmluZygoKSA9PiB7XFxuICAgIGNsZWFyVmFyKFxcXCJ6ZHlcXFwiKTtcXG59KSk7XFxuaXRlbXMucHVzaCh7XFxuICAgIHRpdGxlOifmtYvor5UnK3RhZyxcXG4gICAgY29sX3R5cGU6ICdpbnB1dCcsXFxuICAgIHVybDokLnRvU3RyaW5nKChub3dQYXJzZSx0aW1lb3V0KT0+e1xcbiAgICAgICAgZXZhbChcXFwidmFyIGNvbmZpZyA9XFxcIiArIGZldGNoKFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015UGFyc2VTZXQuanNvblxcXCIpKTtcXG4gICAgICAgIGV2YWwoZmV0Y2goY29uZmlnLmNqKSk7XFxuICAgICAgICAvLyBldmFsKGZldGNoKCdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzJywge30pKTtcXG4gICAgICAgIHJldHVybiBheXRtUGFyc2UoZ2V0TXlWYXIoJ3pkeScpLCBub3dQYXJzZSx0aW1lb3V0KTtcXG4gICAgfSxub3dQYXJzZSx0aW1lb3V0KSxcXG4gICAgZGVzYzogJ+ivt+i+k+ino+aekOWcsOWdgCcsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICB0aXRsZVZpc2libGU6IHRydWUsXFxuICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKCd6ZHknLCBqc29uWzBdLnVybCkgfHwgXFxcIlxcXCIsXFxuICAgICAgICBvbkNoYW5nZTogJ3B1dE15VmFyKFxcXCJ6ZHlcXFwiLGlucHV0KScsXFxuICAgICAgICB0ZXh0U2l6ZTogMTMsXFxuICAgICAgICB0eXBlOiBcXFwidGV4dGFyZWFcXFwiLFxcbiAgICAgICAgaGVpZ2h0OiAyXFxuICAgIH1cXG59KTtcXG5zZXRSZXN1bHQoaXRlbXMpO1wifSx7XCJuYW1lXCI6XCLop6PmnpDmiqXlkYpcIixcInBhdGhcIjpcInRlc3RfcmVwb3J0XCIsXCJydWxlXCI6XCJmdW5jdGlvbiBzb3J0QnlLZXkoYXJyYXksIGtleSwgb3JkZXIpIHsvL+WvueixoeaVsOe7hOaMieafkOS4qumUruWAvOaOkuW6j1xcbiAgICByZXR1cm4gYXJyYXkuc29ydChmdW5jdGlvbihhLCBiKSB7XFxuICAgICAgICB2YXIgeCA9IHBhcnNlSW50KGFba2V5XS5tYXRjaCgvKFxcXFxkKykvKVsxXSk7Ly/kv67lpI3lpKfkuo4xMOWHuumXrumimFxcbiAgICAgICAgdmFyIHkgPSBwYXJzZUludChiW2tleV0ubWF0Y2goLyhcXFxcZCspLylbMV0pO1xcbiAgICAgICAgaWYgKG9yZGVyKSB7XFxuICAgICAgICAgICAgcmV0dXJuICgoeCA8IHkpID8gLTEgOiAoKHggPiB5KSA/IDEgOiAwKSlcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgcmV0dXJuICgoeCA8IHkpID8gKCh4ID4geSkgPyAxIDogMCkgOiAtMSlcXG4gICAgICAgIH1cXG4gICAgfSlcXG59XFxuZnVuY3Rpb24gdGVzdF9yZXBvcnQoanhzLHZpcE9iaix0aW1lb3V0KXsvL+WNleato+eJiOWkmuino+aekOa1i+ivleaKpeWRilxcbiAgICBqeHMgPSBqeHN8fFtdOy8v6Kej5p6Q5qCH6aKY5YiX6KGoXFxuICAgIGxldCB2aXBVcmwgPSB2aXBPYmoudXJsO1xcbiAgICBsZXQgdmlwTmFtZSA9IHZpcE9iai50aXRsZTtcXG4gICAgaWYoanhzLmxlbmd0aDwxKXtcXG4gICAgcmV0dXJuICd0b2FzdDovL+ino+aekOWIl+ihqOmHjOaXoOino+aekO+8jOa1i+S4qum4oeavmydcXG4gICAgfVxcbiAgICB2YXIgY291bnQgPSBqeHMubGVuZ3RoOyAvL+iuvue9ruS7u+WKoeaVsOmHj1xcbiAgICBsb2coJ+mtlOaWreW8gOWQr+WkmuS7u+WKoeino+aekCzku7vliqHmlbDph486Jytjb3VudCk7XFxuICAgIHZhciB0YXNrID0gZnVuY3Rpb24ob2JqKSB7XFxuICAgICAgICBldmFsKCd2YXIgY29uZmlnX2RwID0nICsgZmV0Y2goZ2V0VmFyKCdvbGRDb25maWcnKSkpO1xcbiAgICAgICAgZXZhbChmZXRjaChjb25maWdfZHAuY2opKTtcXG4gICAgICAgIHJldHVybiBheXRtUGFyc2UodmlwVXJsLG9iai5uYW1lLHRpbWVvdXQpO1xcbiAgICB9O1xcbiAgICB2YXIgcGFyc2VSZXQgPSBbXTsgLy/op6PmnpDnu5PmnpzliJfooahcXG4gICAgbGV0IHRhc2tzID0ganhzLm1hcCgoaXQsaWRleCk9PntcXG4gICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgZnVuYzogdGFzayxcXG4gICAgICAgICAgICBwYXJhbToge1xcbiAgICAgICAgICAgICAgICBuYW1lOml0LFxcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgaWQ6IFxcXCJ0YXNrXFxcIitpZGV4XFxuICAgICAgICB9XFxuICAgIH0pO1xcbiAgICBzaG93TG9hZGluZyhcXFwi6a2U5pat5bm25Y+R6Kej5p6Q5Lit77yM5Ymp5L2Z5b6F5rWLOlxcXCIrY291bnQpO1xcbiAgICBiZSh0YXNrcyx7XFxuICAgICAgICBmdW5jOiBmdW5jdGlvbihvYmosIGlkLCBlcnJvcixyZXQpIHtcXG4gICAgICAgICAgICBsb2coXFxcIuebkeWQrOWIsOS7u+WKoVxcXCIgKyBpZCsn5bey57uT5p2fLGVycm9yOicrZXJyb3IrJyxyZXQ6JytyZXQpO1xcbiAgICAgICAgICAgIHJldCA9IHJldHx8Jyc7XFxuICAgICAgICAgICAgZXJyb3I9ZXJyb3J8fCcnO1xcbiAgICAgICAgICAgIHBhcnNlUmV0LnB1c2goe1xcbiAgICAgICAgICAgICAgICB0YXNrOmlkLFxcbiAgICAgICAgICAgICAgICByZXQ6cmV0LFxcbiAgICAgICAgICAgICAgICBlcnJvcjplcnJvcixcXG4gICAgICAgICAgICAgICAgbmFtZTp0YXNrcy5maWx0ZXIoaXQ9Pml0LmlkPT09aWQpWzBdLnBhcmFtLm5hbWVcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBjb3VudCAtPSAxOyAvL+WujOaIkOS6huS7u+WKoe+8jOS7u+WKoeaVsOmHjy0xXFxuICAgICAgICAgICAgLy9sb2cob2JqKTtcXG4gICAgICAgICAgICBpZiAoY291bnQgPiAwKSB7XFxuICAgICAgICAgICAgICAgIHNob3dMb2FkaW5nKFxcXCLprZTmlq3lubblj5Hop6PmnpDkuK3vvIzliankvZnlvoXmtYs6XFxcIiArIGNvdW50KVxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGhpZGVMb2FkaW5nKCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSxcXG4gICAgICAgIHBhcmFtOiB7Ly/kvKDliLDnm5HlkKzlh73mlbDnmoRvYmrlj4LmlbDph4xcXG4gICAgICAgICAgICBoaTogXFxcImNjY1xcXCIsXFxuICAgICAgICB9XFxuICAgIH0pOy8v5omn6KGM5aSa5Lu75YqhXFxuICAgIC8vbG9nKFxcXCLlpJrku7vliqHmiafooYznu5PmnpzmlbA6XFxcIitwYXJzZVJldC5sZW5ndGgpO1xcbiAgICBwYXJzZVJldD1zb3J0QnlLZXkocGFyc2VSZXQsJ3Rhc2snLHRydWUpOy8v5Y2H5bqP5o6S5YiXXFxuICAgIC8vIGxvZyhwYXJzZVJldC5tYXAoaXQ9Pml0LnRhc2spKTtcXG4gICAgcmV0dXJuICQoJ2hpa2VyOi8vZW1wdHkjbm9SZWNvcmRIaXN0b3J5IyNub0hpc3RvcnkjJykucnVsZSgodmlwTmFtZSxwYXJzZVJldCk9PiB7XFxuICAgICAgICBzZXRQYWdlVGl0bGUodmlwTmFtZSArICfop6PmnpDmiqXlkYonKTtcXG4gICAgICAgIGNvbnN0IHtpc1ZpZGVvfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2dsb2JhbFBhcnNlP3J1bGU96YGT6ZW/5LuT5bqTUHJvJyk7XFxuICAgICAgICBjb25zdCB7Y29sb3IsIHNtYWxsfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3V0aWxpeT9ydWxlPemBk+mVv+S7k+W6k1Byb1xcXCIpO1xcbiAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgIGxldCBzaG93X21vZGUgPSBnZXRJdGVtKCdzaG93X21vZGUnLCAn6K+m57uGJyk7XFxuICAgICAgICBsZXQgY29sX3R5cGUgPSBzaG93X21vZGUgPT09ICfor6bnu4YnID8gJ3RleHRfMScgOiAndGV4dF8zJztcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfmmL7npLrmqKHlvI86JyArIGNvbG9yKHNob3dfbW9kZSwgJyNmYThjMzUnKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoY29sb3IsIGNudCkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgc2hvd19tb2RlID0gZ2V0SXRlbSgnc2hvd19tb2RlJywgJ+ivpue7hicpO1xcbiAgICAgICAgICAgICAgICBzaG93X21vZGUgPSBzaG93X21vZGUgPT09ICfor6bnu4YnID8gJ+eyvueugCcgOiAn6K+m57uGJztcXG4gICAgICAgICAgICAgICAgc2V0SXRlbSgnc2hvd19tb2RlJywgc2hvd19tb2RlKTtcXG4gICAgICAgICAgICAgICAgdXBkYXRlSXRlbSgnc2hvd19tb2RlJywge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfmmL7npLrmqKHlvI86JyArIGNvbG9yKHNob3dfbW9kZSwgJyNmYThjMzUnKVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgbGV0IGNvbF90eXBlID0gc2hvd19tb2RlID09PSAn6K+m57uGJyA/ICd0ZXh0XzEnIDogJ3RleHRfMyc7XFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY250OyBpKyspIHtcXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oJ3Nob3dfcmV0XycgKyBpLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IGNvbF90eXBlXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgfSwgY29sb3IsIHBhcnNlUmV0Lmxlbmd0aCksXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6ICdzaG93X21vZGUnXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgICAgICBwYXJzZVJldC5mb3JFYWNoKChpdCwgaWR4KSA9PiB7XFxuICAgICAgICAgICAgbGV0IHRpdGxlID0gaXQubmFtZTtcXG4gICAgICAgICAgICBpZiAoaXQucmV0ICYmICFpdC5yZXQuaW5jbHVkZXMoJ3VuZGVmaW5lZCcpICYmICgvI2lzVmlkZW89dHJ1ZSMvLnRlc3QoaXQucmV0KSB8fCBpc1ZpZGVvKGl0LnJldCkpKSB7XFxuICAgICAgICAgICAgICAgIHRpdGxlID0gY29sb3IodGl0bGUsICcjMTJiNjY4JylcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgbGV0IGRlc2MgPSAoaXQucmV0IHx8IGl0LmVycm9yKS5zdWJzdHIoMCwgNjApO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgZGVzYzogc21hbGwoZGVzYyksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBjb2xfdHlwZSxcXG4gICAgICAgICAgICAgICAgdXJsOiBpdC5yZXQsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICByZXQ6IGl0LnJldCB8fCBpdC5lcnJvcixcXG4gICAgICAgICAgICAgICAgICAgIGlkOiAnc2hvd19yZXRfJyArIGlkeFxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9KTtcXG4gICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgfSx2aXBOYW1lLHBhcnNlUmV0KVxcbn1cXG5cXG4kLmV4cG9ydHMuc29ydEJ5S2V5PXNvcnRCeUtleTtcXG4kLmV4cG9ydHMudGVzdF9yZXBvcnQ9dGVzdF9yZXBvcnQ7XCJ9XSIsImljb24iOiJodHRwczovL2xhbm1laWd1b2ppYW5nLmNvbS90dWJpYW8vbW92aWUvNC5zdmciLCJwcm94eSI6IiJ9
Add Comment
Please, Sign In to add comment