Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@模板·Q@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoi5qih5p2/wrdRIiwiYXV0aG9yIjoi5Y+R57Kq5raC5aKZIiwidXJsIjoiaGlrZXI6Ly9lbXB0eSMjZnlwYWdlIiwidmVyc2lvbiI6MjMxMTE5MDAsImNvbF90eXBlIjoidGV4dF9jZW50ZXJfMSIsImNsYXNzX25hbWUiOiIiLCJ0eXBlIjoidG9vbCIsImNsYXNzX3VybCI6IiIsImFyZWFfbmFtZSI6IiIsImFyZWFfdXJsIjoiIiwic29ydF9uYW1lIjoiIiwieWVhcl9uYW1lIjoiIiwic29ydF91cmwiOiIiLCJ5ZWFyX3VybCI6IiIsImZpbmRfcnVsZSI6ImpzOlxuaWYgKGdldEl0ZW0oXCJzdGFydFwiLCBcIlwiKSA9PSBcIlwiKSB7XG4gICAgc2V0SXRlbShcInN0YXJ0XCIsIFwiMVwiKVxuICAgIGNvbmZpcm0oe1xuICAgICAgICB0aXRsZTogJ+a4qemmqOaPkOekuicsXG4gICAgICAgIGNvbnRlbnQ6ICfor7fli7/liKDpmaTmiJbmlLnlkI3mraTmqKHmnb/vvIzku6XlhY3kvp3otZbmraTmqKHmnb/nmoTlsI/nqIvluo/ml6Dms5Xkvb/nlKjvvIHvvIFcXG7lubbnibnliKvmhJ/osKIgUmVib3JuIExveURnSWvlpKfkvaznmoTmioDmnK/mlK/mjIEhISEnLFxuICAgICAgICBjb25maXJtOiAnJyxcbiAgICAgICAgY2FuY2VsOiAncmVmcmVzaFBhZ2UoKSdcbiAgICB9KVxufVxuYWRkTGlzdGVuZXIoXCJvbkNsb3NlXCIsICQudG9TdHJpbmcoKCkgPT4ge1xuICAgIGNsZWFyVmFyKFwidGVtcGxhdGUtdXJsXCIpXG4gICAgY2xlYXJWYXIoXCJ0ZW1wbGF0ZS1zZWFyY2gtdXJsXCIpXG4gICAgY2xlYXJWYXIoXCJ0ZW1wbGF0ZS1wYWdlcy11bmZvbGRcIilcbn0pKVxuXG5sZXQgZDIgPSBbe1xuICAgIGRlc2M6IFwi6L6T5YWl5YiG57G75oiW6K+m5oOF6aG16ZO+5o6l5rWL6K+V5Yy56YWNXCIsXG4gICAgY29sX3R5cGU6IFwiaW5wdXRcIixcbiAgICB1cmw6IFwiaW5wdXRcIixcbiAgICB0aXRsZTogXCLmtYvor5VcIixcbiAgICBleHRyYToge1xuICAgICAgICBvbkNoYW5nZTogXCJwdXRWYXIoJ3RlbXBsYXRlLXVybCcsaW5wdXQpXCJcbiAgICB9XG59LHtcbiAgICBkZXNjOiBcIui+k+WFpeaQnOe0oumTvuaOpe+8jCoq5Li65YWz6ZSu5a2X5Y2g5L2N56ymXCIsXG4gICAgY29sX3R5cGU6IFwiaW5wdXRcIixcbiAgICB1cmw6IFwiaW5wdXRcIixcbiAgICB0aXRsZTogXCLmtYvor5XmkJzntKJcIixcbiAgICBleHRyYToge1xuICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IGdldFZhcihcInRlbXBsYXRlLXNlYXJjaC11cmxcIiksXG4gICAgICAgIG9uQ2hhbmdlOiBcInB1dFZhcigndGVtcGxhdGUtc2VhcmNoLXVybCcsaW5wdXQpXCJcbiAgICB9XG59LCB7XG4gICAgZGVzYzogXCLovpPlhaXmkJzntKLlhbPplK7or43mtYvor5XljLnphY1cIixcbiAgICBjb2xfdHlwZTogXCJpbnB1dFwiLFxuICAgIHVybDogJC50b1N0cmluZygocnVsZVRpdGxlKT0+e1xuICAgICAgICAgICAgcmV0dXJuIFwiaGlrZXI6Ly9zZWFyY2g/cz1cIiArIGlucHV0ICsgIFwiJnJ1bGU9XCIrIHJ1bGVUaXRsZTtcbiAgICB9LCBNWV9SVUxFLnRpdGxlKSxcbiAgICB0aXRsZTogXCLmtYvor5XmkJzntKJcIixcbn0sIHtcbiAgICB0aXRsZTogXCLnlJ/miJDop4TliJlcIixcbiAgICBjb2xfdHlwZTogXCJ0ZXh0X2NlbnRlcl8xXCIsXG4gICAgdXJsOiBcImlucHV0Oi8vLy8vL+ivt+i+k+WFpeinhOWImeWQjS5qczpcIiArICQudG9TdHJpbmcoKCkgPT4ge1xuICAgICAgICB2YXIgdXJsID0gZ2V0VmFyKCd0ZW1wbGF0ZS11cmwnLCBcIlwiKTtcbiAgICAgICAgaWYgKHVybC5sZW5ndGggPD0gMCB8fCBpbnB1dC5sZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFwidG9hc3Q6Ly/or7flhYjovpPlhaXpk77mjqXlkozop4TliJnlkI1cIlxuICAgICAgICB9XG4gICAgICAgIHZhciBydWxlID0ge1xuICAgICAgICAgICAgXCJsYXN0X2NoYXB0ZXJfcnVsZVwiOiBcIlwiLFxuICAgICAgICAgICAgXCJ0aXRsZVwiOiBpbnB1dCxcbiAgICAgICAgICAgIFwiYXV0aG9yXCI6IFwiXCIsXG4gICAgICAgICAgICBcInVybFwiOiB1cmwsXG4gICAgICAgICAgICBcInZlcnNpb25cIjogMCxcbiAgICAgICAgICAgIFwiY29sX3R5cGVcIjogXCJtb3ZpZV8zXCIsXG4gICAgICAgICAgICBcImNsYXNzX25hbWVcIjogXCJcIixcbiAgICAgICAgICAgIFwiY2xhc3NfdXJsXCI6IFwiXCIsXG4gICAgICAgICAgICBcImFyZWFfbmFtZVwiOiBcIlwiLFxuICAgICAgICAgICAgXCJhcmVhX3VybFwiOiBcIlwiLFxuICAgICAgICAgICAgXCJzb3J0X25hbWVcIjogXCJcIixcbiAgICAgICAgICAgIFwieWVhcl9uYW1lXCI6IFwiXCIsXG4gICAgICAgICAgICBcInNvcnRfdXJsXCI6IFwiXCIsXG4gICAgICAgICAgICBcInllYXJfdXJsXCI6IFwiXCIsXG4gICAgICAgICAgICBcImZpbmRfcnVsZVwiOiBcImpzOlxcbmNvbnN0IHtcXG4gICAgYXV0b1BhZ2VcXG59ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXV0bz9ydWxlPeaooeadv8K3UVxcXCIpO1xcbmF1dG9QYWdlKGdldFJlc0NvZGUoKSlcIixcbiAgICAgICAgICAgIFwic2VhcmNoX3VybFwiOiBnZXRWYXIoXCJ0ZW1wbGF0ZS1zZWFyY2gtdXJsXCIpLFxuICAgICAgICAgICAgXCJ0aXRsZUNvbG9yXCI6IFwiXCIsXG4gICAgICAgICAgICBcImdyb3VwXCI6IFwi5rWL6K+VXCIsXG4gICAgICAgICAgICBcInNlYXJjaEZpbmRcIjogXCJqczpcXG5jb25zdCB7XFxuICAgIGF1dG9QYWdlXFxufSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2F1dG8/cnVsZT3mqKHmnb/Ct1FcXFwiKTtcXG5hdXRvUGFnZShnZXRSZXNDb2RlKCkpXCIsXG4gICAgICAgICAgICBcImRldGFpbF9jb2xfdHlwZVwiOiBcIm1vdmllXzFcIixcbiAgICAgICAgICAgIFwiZGV0YWlsX2ZpbmRfcnVsZVwiOiBcImpzOlxcbnZhciBsYXp5ID0gJCgnJykubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICB0cnkge1xcbiAgICAgICAgdmFyIGh0bWwgPSBKU09OLnBhcnNlKHJlcXVlc3QoaW5wdXQpLm1hdGNoKC9yIHBsYXllcl8uKj89KC4qPyk8LylbMV0pXFxuICAgICAgICAgICAgdmFyIHVybCA9IGh0bWwudXJsXFxuICAgICAgICAgICAgaWYgKGh0bWwuZW5jcnlwdCA9PSAnMScpIHtcXG4gICAgICAgICAgICAgICAgdXJsID0gdW5lc2NhcGUodXJsKTtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGh0bWwuZW5jcnlwdCA9PSAnMicpIHtcXG4gICAgICAgICAgICAgICAgdXJsID0gdW5lc2NhcGUoYmFzZTY0RGVjb2RlKHVybCkpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAoL20zdTh8bXA0Ly50ZXN0KHVybCkpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVybFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndmlkZW86Ly8nICsgaW5wdXRcXG4gICAgICAgICAgICB9XFxuICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgIHJldHVybiAndmlkZW86Ly8nICsgaW5wdXRcXG4gICAgfVxcbn0pXFxuXFxuY29uc3Qge1xcbiAgICBhdXRvUGFnZVxcbn0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hdXRvP3J1bGU95qih5p2/wrdRXFxcIik7XFxuYXV0b1BhZ2UoZ2V0UmVzQ29kZSgpKVwiLFxuICAgICAgICAgICAgXCJzZGV0YWlsX2NvbF90eXBlXCI6IFwibW92aWVfMVwiLFxuICAgICAgICAgICAgXCJzZGV0YWlsX2ZpbmRfcnVsZVwiOiBcIipcIixcbiAgICAgICAgICAgIFwidWFcIjogXCJtb2JpbGVcIixcbiAgICAgICAgICAgIFwicHJlUnVsZVwiOiBcImlmIChyZXF1ZXN0KCdoaWtlcjovL2hvbWVA5qih5p2/wrdRJykgPT0gJ251bGwnKSB7XFxuICAgIGNvbmZpcm0oe1xcbiAgICAgICAgdGl0bGU6ICfkvp3otZbmo4DmtYsnLFxcbiAgICAgICAgY29udGVudDogJ+ajgOa1i+WIsOe8uuWwkeaooeadv+S+nei1lizor7flr7zlhaUhJyxcXG4gICAgICAgIGNvbmZpcm06ICgpID0+IHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcIua1t+mYlOinhueVjOmmlumhtemikemBk+inhOWImeOAkOaooeadv8K3UeOAke+/pWhvbWVfcnVsZV91cmzvv6VodHRwOi8vaGlrZXIubm9raWEucHJlc3MvaGlrZXJ1bGUvcnVsZWxpc3QuanNvbj9pZD0zMDU1XFxcIlxcbiAgICAgICAgfVxcbiAgICB9KVxcbn1cIixcbiAgICAgICAgICAgIFwicGFnZXNcIjogXCJbXVwiXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBcIua1t+mYlOinhueVjOinhOWImeWIhuS6q++8jOW9k+WJjeWIhuS6q+eahOaYr++8muWwj+eoi+W6j++/pWhvbWVfcnVsZe+/pVwiICsgSlNPTi5zdHJpbmdpZnkocnVsZSlcbiAgICB9KVxufSx7XG50aXRsZTogJ+aWh+Wtl+aVmeeoiycsXG5jb2xfdHlwZTogJ3RleHRfMicsXG51cmw6ICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU96KeG55WM6K665Z2bUicsXG5leHRyYToge1xuICAgIHVybDogJ2h0dHBzOi8vaGFpa3Vvc2hpamllLmNuL3RvcGljLzg0NDAjZnlwYWdlI25vSGlzdG9yeSMnLFxufVxufSx7XG50aXRsZTogJ+inhumikeaVmeeoiycsXG5jb2xfdHlwZTogJ3RleHRfMicsXG51cmw6IFwidmlkZW86Ly9odHRwczovL3d3dy5iaWxpYmlsaS5jb20vdmlkZW8vQlYxZE00eTFnN3JlP3NoYXJlX3NvdXJjZT1jb3B5X3dlYlwiXG59LHtcbnRpdGxlOiBnZXRWYXIoJ3RlbXBsYXRlLXBhZ2VzLXVuZm9sZCcsICdmYWxzZScpID09PSAndHJ1ZSc/ICfngrnmiJHmlLbnvKnmqKHmnb/liJfooagnOiAn54K55oiR5bGV5byA5qih5p2/5YiX6KGoJyxcbmNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXG51cmw6ICQoXCIjbm9Mb2FkaW5nI1wiKS5sYXp5UnVsZSgocGFnZVVuZm9sZCkgPT4ge1xuICAgICBwdXRWYXIoJ3RlbXBsYXRlLXBhZ2VzLXVuZm9sZCcsIHBhZ2VVbmZvbGQgPT09ICd0cnVlJyA/ICdmYWxzZScgOiAndHJ1ZScpXG5yZWZyZXNoUGFnZShmYWxzZSlcbnJldHVybiAndG9hc3Q6Ly8nICsgKGdldFZhcigndGVtcGxhdGUtcGFnZXMtdW5mb2xkJywgJ2ZhbHNlJykgPT09ICd0cnVlJz8gJ+WxleW8gOaIkOWKnyc6ICfmlLbnvKnmiJDlip8nKVxufSwgZ2V0VmFyKCd0ZW1wbGF0ZS1wYWdlcy11bmZvbGQnLCAnZmFsc2UnKSlcbn0se1xudGl0bGU6ICfmtYvor5XpppbpobXpk77mjqXpnIDopoHmiorpobXnoIHmlLnmiJBmeXBhZ2Us5aaC5p6c5LiK6Z2i55qE5rWL6K+V6YCa6L+H6IO95pi+56S65Zu+54mH77yM6YKj5LmI5bCx6K+05piO5piv5Y+v5Lul55Sf5oiQ6KeE5YiZ55qE77yM5L6d5qyh5aGr5YWl5YiG57G76ZO+5o6l5LiO5pCc57Si6ZO+5o6l77yM56ys5LiJ5Liq5qGG55WZ56m654K55Ye755Sf5oiQ6KeE5YiZ77yM5aGr5aW95ZCN5a2X5Y2z5Y+v77yM6K+m57uG5re75Yqg5YiG57G76K+N5LmL57G755qE6K+354K55Ye75LiK6Z2i55qE5Lik5Liq5pWZ56iL6ZO+5o6l5Y+C6ICD77yB77yBJyxcbmNvbF90eXBlOiAncmljaF90ZXh0J1xufV1cbmlmKGdldFZhcigndGVtcGxhdGUtcGFnZXMtdW5mb2xkJywgJ2ZhbHNlJykgPT09ICd0cnVlJykge1xubGV0IGQgPSBbXVxuZC5wdXNoKHtcbiAgICB0aXRsZTogJ+eCueWHu+aooeadv+WPr+afpeeci+S7o+egge+8micsXG4gICAgY29sX3R5cGU6ICdyaWNoX3RleHQnXG59KVxubGV0IHBhZ2VMaXN0ID0gTVlfUlVMRS5wYWdlTGlzdC5maWx0ZXIocGFnZSA9PiBwYWdlLm5hbWUgIT0gJ+Wtl+espuS4suWkhOeQhuW3peWFtydcbiYmIHBhZ2UubmFtZSAhPSAnI01hcHBpbmcnXG4mJiBwYWdlLm5hbWUgIT0gJyNhdXRvJylcbmZvciAobGV0IHBhZ2Ugb2YgcGFnZUxpc3QpIHtcbiAgICBkLnB1c2goe1xuICAgICAgICB0aXRsZTogcGFnZS5uYW1lLFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMicsXG4gICAgICAgIHVybDogJCgpLnJ1bGUoKHBhZ2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICBodG1sRXNjYXBlXG4gICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFwiaGlrZXI6Ly9wYWdlL3N0cmluZ3Rvb2xcIik7XG4gICAgICAgICAgICBsZXQgZCA9IFtdXG4gICAgICAgICAgICBkLnB1c2goe1xuICAgICAgICAgICAgICAgIHRpdGxlOiBodG1sRXNjYXBlKHBhZ2UucnVsZSksXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgc2V0UmVzdWx0KGQpXG4gICAgICAgIH0sIHBhZ2UpXG4gICAgfSlcbn1cbmQyLnB1c2guYXBwbHkoZDIsIGQpXG59XG5zZXRSZXN1bHQoZDIpIiwic2VhcmNoX3VybCI6Imhpa2VyOi8vZW1wdHkjKiojZnlwYWdlLmpzOiBsZXQgc3VybCA9ICBnZXRWYXIoXCJ0ZW1wbGF0ZS1zZWFyY2gtdXJsXCIp77yb77ybbGV0IGluc3BsaXRzPWlucHV0LnNwbGl0KFwiI1wiKe+8m++8m2xldCB1cmwgPSBzdXJsLnJlcGxhY2UoYmFzZTY0RGVjb2RlKFwiS2lvPVwiKSwgaW5zcGxpdHNbMV0pLnJlcGxhY2UoYmFzZTY0RGVjb2RlKFwiWm5sd1lXZGxcIiksIGluc3BsaXRzWzJdKe+8m++8m3VybO+8m++8myIsImdyb3VwIjoi5qih5p2/Iiwic2VhcmNoRmluZCI6ImpzOlxudmFyIGQgPSBbXVxudmFyIGh0bWwgPSBnZXRSZXNDb2RlKClcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UveXptP3J1bGU95qih5p2/wrdRJykpLnJ1bGUpXG5jb25zdCB7XG4gICAgYXV0b1BhZ2Vcbn0gPSAkLnJlcXVpcmUoXCJoaWtlcjovL3BhZ2UvYXV0bz9ydWxlPeaooeadv8K3UVwiKTtcbmF1dG9QYWdlKGh0bWwpIiwiZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMyIsImRldGFpbF9maW5kX3J1bGUiOiJqczpcbnZhciBsYXp5ID0gJyc7XG5jb25zdCB7XG4gICAgYXV0b1BhZ2Vcbn0gPSAkLnJlcXVpcmUoXCJoaWtlcjovL3BhZ2UvYXV0bz9ydWxlPeaooeadv8K3UVwiKTtcbmF1dG9QYWdlKGdldFJlc0NvZGUoKSkiLCJzZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMSIsInNkZXRhaWxfZmluZF9ydWxlIjoiKiIsInVhIjoiYXV0byIsInByZVJ1bGUiOiIiLCJwYWdlcyI6Ilt7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5LiA57qnc3R1aS12b2RsaXN0XCIsXCJwYXRoXCI6XCJzdHVpLXZvZGxpc3RcIixcInJ1bGVcIjpcInZhciBkID0gW107XFxuTVlfUlVMRS51cmwubWF0Y2goL2Z5cGFnZS8pWzBdXFxudmFyIGxpc3QgPSBwZGZhKGdldFJlc0NvZGUoKSwgJy5zdHVpLXZvZGxpc3QmJmxpJyk7XFxuZm9yICh2YXIgaiBpbiBsaXN0KSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogcGRmaChsaXN0W2pdLCAnYSYmdGl0bGUnKSxcXG4gICAgICAgIGRlc2M6IHBkZmgobGlzdFtqXSwgJy5waWMtdGV4dCYmVGV4dCcpLFxcbiAgICAgICAgaW1nOiBwZChsaXN0W2pdLCAnLmxhenlsb2FkfHxhJiZkYXRhLW9yaWdpbmFsJykrJ0BSZWZlcmVyPScsXFxuICAgICAgICB1cmw6IHBkKGxpc3Rbal0sICdhJiZocmVmJykgKyAnI2ltbWVyc2l2ZVRoZW1lIydcXG4gICAgfSk7XFxufVxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS6jOe6py5iXCIsXCJwYXRoXCI6XCIuYlwiLFwicnVsZVwiOlwidmFyIGQgPSBbXTtcXG52YXIgaHRtbCA9IGdldFJlc0NvZGUoKTtcXG5pZiAoaHRtbC5pbmRleE9mKCfmo4DmtYvkuK0nKSAhPSAtMSkge1xcbiAgICBodG1sID0gcmVxdWVzdChNWV9VUkwgKyAnP2J0d2FmJyArIGh0bWwubWF0Y2goL2J0d2FmKC4qPylcXFxcXFxcIi8pWzFdLCB7fSk7XFxufVxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBwZGZoKGh0bWwsICcuc3R1aS1jb250ZW50X19kZXRhaWwtLWgxJiZUZXh0JylcXG4gICAgICAgIC5yZXBsYWNlKCflnLDljLonLCAnXFxcXG7lnLDljLonKVxcbiAgICAgICAgLnJlcGxhY2UoJ+S4u+a8lCcsICdcXFxcbuS4u+a8lCcpLFxcbiAgICBkZXNjOiBwZGZoKGh0bWwsICcuZGVzY3x8LmRldGFpbC1jb250ZW50JiZUZXh0JyksXFxuICAgIHBpY191cmw6IHBkKGh0bWwsICcubGF6eWxvYWQmJmRhdGEtb3JpZ2luYWwnKSxcXG4gICAgdXJsOiBNWV9VUkwsXFxuICAgIGNvbF90eXBlOiAnbW92aWVfMV92ZXJ0aWNhbF9waWNfYmx1cidcXG59KTtcXG52YXIg57q/6LevID0gJ2JvZHkmJi5iJ1xcbnZhciDpgInpm4YgPSDnur/ot69cXG52YXIg57q/6Lev5ZCNID0gJ2gzJiZUZXh0J1xcbnZhciDpgInpm4bliJfooaggPSAndWwmJmxpJ1xcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvZXJqaT9ydWxlPeaooeadv8K3UScpKS5ydWxlKVxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuaQnOe0onN0dWktdm9kbGlzdF9fbWVkaWFcIixcInBhdGhcIjpcInN0dWktdm9kbGlzdF9fbWVkaWFcIixcInJ1bGVcIjpcInZhciBkID0gW107XFxudmFyIGxpc3QgPSBwZGZhKGdldFJlc0NvZGUoKSwgJy5zdHVpLXZvZGxpc3RfX21lZGlhJiZsaScpO1xcbmxvZygn5pCc57Si57uT5p6cJylcXG5sb2cobGlzdClcXG5pZiAobGlzdC5sZW5ndGggPT0gMCkgdGhyb3cgXFxcIuaQnOe0ouS4uuepuu+8jOWPr+iDveWMuemFjemUmeivr1xcXCJcXG5mb3IgKHZhciBqIGluIGxpc3QpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBwZGZoKGxpc3Rbal0sICdhJiZ0aXRsZScpLFxcbiAgICAgICAgZGVzYzogcGRmaChsaXN0W2pdLCAnLnBpYy10ZXh0JiZUZXh0JyksXFxuICAgICAgICBpbWc6IHBkKGxpc3Rbal0sICdhJiZkYXRhLW9yaWdpbmFsJyksXFxuICAgICAgICBjb250ZW50OiBwZGZoKGxpc3Rbal0sICcuZGV0YWlsLS1oMyYmVGV4dCcpLFxcbiAgICAgICAgdXJsOiBwZChsaXN0W2pdLCAnYSYmaHJlZicpKycjaW1tZXJzaXZlVGhlbWUjJ1xcbiAgICB9KTtcXG59XFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5LiA57qnbXl1aS12b2RsaXN0XCIsXCJwYXRoXCI6XCJteXVpLXZvZGxpc3RcIixcInJ1bGVcIjpcInZhciBkID0gW11cXG5NWV9SVUxFLnVybC5tYXRjaCgvZnlwYWdlLylbMF1cXG52YXIgbGlzdCA9IHBkZmEoZ2V0UmVzQ29kZSgpLCAnLm15dWktdm9kbGlzdCYmbGknKVxcbmZvciAodmFyIGogaW4gbGlzdCkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHBkZmgobGlzdFtqXSwgJ2g0JiZUZXh0JyksXFxuICAgICAgICBkZXNjOiBwZGZoKGxpc3Rbal0sICcucGljLXRhZ3x8LnBpYy10ZXh0JiZUZXh0JyksXFxuICAgICAgICBpbWc6IHBkKGxpc3Rbal0sICcubGF6eWxvYWQmJmRhdGEtb3JpZ2luYWwnKSxcXG4gICAgICAgIHVybDogcGQobGlzdFtqXSwgJ2EmJmhyZWYnKS5yZXBsYWNlKCd2b2RwbGF5Jywndm9kZGV0YWlsJykgKyAnI2ltbWVyc2l2ZVRoZW1lIydcXG4gICAgfSlcXG59XFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuoznuqduYXYtdGFic1wiLFwicGF0aFwiOlwibmF2LXRhYnNcIixcInJ1bGVcIjpcInZhciBkID0gW107XFxudmFyIGh0bWwgPSBnZXRSZXNDb2RlKCk7XFxuXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IHBkZmgoaHRtbCwgJy5kYXRhJiZUZXh0JylcXG4gICAgICAgIC5yZXBsYWNlKCflnLDljLrvvJonLCAnICAnKVxcbiAgICAgICAgLnJlcGxhY2UoJ+W5tOS7ve+8micsICcgICcpICsgJ1xcXFxuJyArXFxuICAgICAgICBwZGZoKGh0bWwsICcuZGF0YSwxJiZUZXh0JylcXG4gICAgICAgIC5zdWJzdHJpbmcoMCwgMTUpICsgJ1xcXFxuJyArXFxuICAgICAgICBwZGZoKGh0bWwsICcuZGF0YSwyJiZUZXh0JyksXFxuICAgIGRlc2M6IHBkZmgoaHRtbCwgJy5kYXRhLDMmJlRleHQnKSxcXG4gICAgaW1nOiBwZChodG1sLCAnLmxhenlsb2FkJiZkYXRhLW9yaWdpbmFsJyksXFxuICAgIHVybDogTVlfVVJMLFxcbiAgICBjb2xfdHlwZTogJ21vdmllXzFfdmVydGljYWxfcGljX2JsdXInXFxufSk7XFxudmFyIOe6v+i3ryA9ICcubmF2LXRhYnMmJmEnXFxudmFyIOmAiembhiA9ICcudGFiLWNvbnRlbnQmJi5teXVpLWNvbnRlbnRfX2xpc3R8fC5zdHVpLWNvbnRlbnRfX3BsYXlsaXN0J1xcbnZhciDnur/ot6/lkI0gPSAnVGV4dCdcXG52YXIg6YCJ6ZuG5YiX6KGoID0gJ3VsJiZsaSdcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2Vyamk/cnVsZT3mqKHmnb/Ct1EnKSkucnVsZSlcXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmkJzntKJteXVpLXZvZGxpc3RfX21lZGlhXCIsXCJwYXRoXCI6XCJteXVpLXZvZGxpc3RfX21lZGlhXCIsXCJydWxlXCI6XCJ2YXIgZCA9IFtdO1xcbnZhciBsaXN0ID0gcGRmYShnZXRSZXNDb2RlKCksICcjc2VhcmNoTGlzdCYmbGknKTtcXG5pZiAobGlzdC5sZW5ndGggPT0gMCkgdGhyb3cgXFxcIuaQnOe0ouS4uuepuu+8jOWPr+iDveWMuemFjemUmeivr1xcXCJcXG5mb3IgKHZhciBqIGluIGxpc3QpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBwZGZoKGxpc3Rbal0sICdhJiZ0aXRsZScpLFxcbiAgICAgICAgZGVzYzogcGRmaChsaXN0W2pdLCAnLnBpYy10ZXh0JiZUZXh0JyksXFxuICAgICAgICBwaWNfdXJsOiBwZChsaXN0W2pdLCAnYSYmZGF0YS1vcmlnaW5hbCcpLFxcbiAgICAgICAgY29udGVudDogcGRmaChsaXN0W2pdLCAnLmRldGFpbC0taDQmJlRleHQnKSxcXG4gICAgICAgIHVybDogcGQobGlzdFtqXSwgJ2EmJmhyZWYnKSsnI2ltbWVyc2l2ZVRoZW1lIydcXG4gICAgfSlcXG59XFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuIDnuqd2b2RsaXN0XCIsXCJwYXRoXCI6XCJ2b2RsaXN0XCIsXCJydWxlXCI6XCJ2YXIgZCA9IFtdO1xcbk1ZX1JVTEUudXJsLm1hdGNoKC9meXBhZ2UvKVswXVxcbnZhciBsaXN0ID0gcGRmYShnZXRSZXNDb2RlKCksICcudm9kbGlzdCYmbGknKTtcXG5mb3IgKHZhciBqIGluIGxpc3QpIHtcXG4gIGQucHVzaCh7XFxuICAgICAgIHRpdGxlOiBwZGZoKGxpc3Rbal0sICdhJiZ0aXRsZScpLFxcbiAgICAgICBkZXNjOiBwZGZoKGxpc3Rbal0sICdhJiZUZXh0JyksXFxuICAgICAgIHBpY191cmw6IHBkKGxpc3Rbal0sICcubGF6eWxvYWQmJmRhdGEtb3JpZ2luYWwnKSsnQFJlZmVyZXI9JyxcXG4gICAgICAgdXJsOiBwZChsaXN0W2pdLCdhJiZocmVmJykgKyAnI2ltbWVyc2l2ZVRoZW1lIydcXG4gIH0pO1xcbn1cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuoznuqdtby1wbGF5LWxvYWRcIixcInBhdGhcIjpcIm1vLXBsYXktbG9hZFwiLFwicnVsZVwiOlwidmFyIGQgPSBbXTtcXG52YXIgaHRtbCA9IGdldFJlc0NvZGUoKTtcXG5cXG5kLnB1c2goe1xcbiAgICB0aXRsZTogcGRmaChodG1sLCAnLnZpZGVvLWluZm8taXRlbXMsMiYmVGV4dCcpXFxuICAucmVwbGFjZSgn5YiG57G7fCcsICcnKVxcbiAgLnJlcGxhY2UoJ+WcsOWMuu+8micsICcnKVxcbiAgLnJlcGxhY2UoJ+W5tOS7ve+8micsICcgJykuc3Vic3RyaW5nKDAsIDE4KSArICdcXFxcbicgKyAnXFxcXG4nICsgXFxuICBwZGZoKGh0bWwsICcudmlkZW8taW5mby1pdGVtcywxJiZUZXh0Jykuc3Vic3RyaW5nKDAsIDE4KSxcXG4gICAgcGljX3VybDogcGQoaHRtbCwgJy5sYXp5bG9hZCYmZGF0YS1zcmMnKSxcXG4gICAgdXJsOiBNWV9VUkwsXFxuICAgIGNvbF90eXBlOiAnbW92aWVfMV92ZXJ0aWNhbF9waWNfYmx1cidcXG59KTtcXG5cXG52YXIg57q/6LevID0gJ2JvZHkmJi5tb2R1bGUtdGFiLWNvbnRlbnQmJi5tb2R1bGUtdGFiLWl0ZW0nXFxudmFyIOmAiembhiA9ICdib2R5JiYuc29ydC1pdGVtJ1xcbnZhciDnur/ot6/lkI0gPSAnc3BhbiYmVGV4dCdcXG52YXIg6YCJ6ZuG5YiX6KGoID0gJ2JvZHkmJmEnXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9lcmppP3J1bGU95qih5p2/wrdRJykpLnJ1bGUpXFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5LqM57qnbmF2LXRhYnMxXCIsXCJwYXRoXCI6XCJuYXYtdGFiczFcIixcInJ1bGVcIjpcInZhciBkID0gW107XFxudmFyIGh0bWwgPSBnZXRSZXNDb2RlKCk7XFxuXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IHBkZmgoaHRtbCwgJ3AsMSYmVGV4dCcpXFxuICAgICAgICAucmVwbGFjZSgn57G75Z6L77yaJywgJycpXFxuICAgICAgICAucmVwbGFjZSgn5Zyw5Yy677yaJywgJyAnKVxcbiAgICAgICAgLnJlcGxhY2UoJ+W5tOS7ve+8micsICcnKVxcbiAgICAgICAgLnJlcGxhY2UoJ+ivreiogO+8micsICcnKSArXFxuICAgICAgICAnXFxcXG5cXFxcbicgKyBwZGZoKGh0bWwsICdwLDQmJlRleHQnKVxcbiAgICAgICAgLnN1YnN0cmluZygwLCAzMCksXFxuICAgIGRlc2M6IHBkZmgoaHRtbCwgJ3AsMiYmVGV4dCcpLFxcbiAgICBwaWNfdXJsOiBwZChodG1sLCAnLmxhenlsb2FkJiZkYXRhLW9yaWdpbmFsJyksXFxuICAgIHVybDogTVlfVVJMLFxcbiAgICBjb2xfdHlwZTogJ21vdmllXzFfdmVydGljYWxfcGljX2JsdXInXFxufSk7XFxuXFxudmFyIOe6v+i3ryA9ICcubmF2LXRhYnMmJmEnXFxudmFyIOmAiembhiA9ICdib2R5JiYuc3R1aS1jb250ZW50X19wbGF5bGlzdCdcXG52YXIg57q/6Lev5ZCNID0gJ2EmJlRleHQnXFxudmFyIOmAiembhuWIl+ihqCA9ICd1bCYmbGknXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9lcmppP3J1bGU95qih5p2/wrdRJykpLnJ1bGUpXFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwiZmxleF9idXR0b25cIixcIm5hbWVcIjpcIuWumuS9jeS6jOe6p1wiLFwicGF0aFwiOlwiZXJqaVwiLFwicnVsZVwiOlwidmFyIHRhYnMgPSBwZGZhKGh0bWwsIOe6v+i3rykubWFwKGRhdGEgPT4ge1xcbiAgICBkYXRhID0gcGRmaChkYXRhLCDnur/ot6/lkI0pXFxuICAgIGlmICh0eXBlb2Yo5o6S6ZmkKSAhPSAndW5kZWZpbmVkJyAmJiDmjpLpmaQgIT0gJycpIHtcXG4gICAgICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UobmV3IFJlZ0V4cCjmjpLpmaQsIFxcXCJnXFxcIiksIFxcXCJcXFwiKTtcXG4gICAgfVxcbiAgICByZXR1cm4gZGF0YTtcXG59KTtcXG5cXG52YXIgbGlzdHMgPSBwZGZhKGh0bWwsIOmAiembhikubWFwKGRhdGEgPT4gcGRmYShkYXRhLCDpgInpm4bliJfooagpKVxcblxcbmFkZExpc3RlbmVyKFxcXCJvbkNsb3NlXFxcIiwgJC50b1N0cmluZygoKSA9PiB7XFxuICAgIGNsZWFyTXlWYXIoXFxcImxpc3RzXFxcIik7XFxufSkpO1xcbnN0b3JhZ2UwLnB1dE15VmFyKFxcXCJsaXN0c1xcXCIsIGxpc3RzKTtcXG52YXIgbGlzdCA9IGxpc3RzW2dldE15VmFyKE1ZX1VSTCwgJzAnKV07XFxudmFyIOaOkuW6jyA9IGdldE15VmFyKE1ZX1VSTCArIFxcXCLnq6DoioLmjpLluo9cXFwiLCAnIzFhYWQxOVxcXCI+5q2j5bqPJyk7XFxudmFyIOaPkOekuiA9IOaOkuW6jyA9PSAnI0ZGMDAwMFxcXCI+5YCS5bqPJyA/ICcjMWFhZDE5XFxcIj7mraPluo8nIDogJyNGRjAwMDBcXFwiPuWAkuW6jyc7XFxudmFyIOaOkuW6j+WQjSA9ICfigJzigJzigJ3igJ08Yj48c3BhbiBzdHlsZT1cXFwiY29sb3I65o6S5bqPPC9zcGFuPjwvYj4nO1xcblxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPGI+PHNwYW4gc3R5bGU9XFxcImNvbG9yOiAnICsg5o6S5bqPICsgJzwvc3Bhbj48L2I+JyxcXG4gICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCh0YWJzLCDmjpLluo/lkI0sIGxhenksIGQsVFbmjqjpgIEpID0+IHtcXG4gICAgICAgIHZhciBsaXN0cyA9IHN0b3JhZ2UwLmdldE15VmFyKFxcXCJsaXN0c1xcXCIpO1xcbiAgICAgICAgdmFyIOeroOiKgiA9IGxpc3RzW2dldE15VmFyKE1ZX1VSTCwgJzAnKV07XFxuICAgICAgICB2YXIg5o6S5bqPID0gZ2V0TXlWYXIoTVlfVVJMICsgXFxcIueroOiKguaOkuW6j1xcXCIsICcjMWFhZDE5XFxcIj7mraPluo8nKTtcXG4gICAgICAgIHZhciDmj5DnpLogPSDmjpLluo8gPT0gJyNGRjAwMDBcXFwiPuWAkuW6jycgPyAnIzFhYWQxOVxcXCI+5q2j5bqPJyA6ICcjRkYwMDAwXFxcIj7lgJLluo8nO1xcbiAgICAgICAgdXBkYXRlSXRlbSh7XFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6IE1ZX1VSTCArIFxcXCJf5o6S5bqPXFxcIixcXG4gICAgICAgICAgICAgICAgbG9uZ0NsaWNrOiBbe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCJUVmJveOaOqOmAgVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBqczogVFbmjqjpgIEodGFicywgbGlzdHMsIGQpXFxuICAgICAgICAgICAgICAgIH1dXFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICB0aXRsZTog5o6S5bqP5ZCNLnJlcGxhY2UoJ+aOkuW6jycsIOaPkOekuilcXG4gICAgICAgIH0pO1xcbiAgICAgICAgaWYgKOaOkuW6jyA9PSAnIzFhYWQxOVxcXCI+5q2j5bqPJykge1xcbiAgICAgICAgICAgIOeroOiKgi5yZXZlcnNlKCk7XFxuICAgICAgICB9XFxuICAgICAgICBsZXQgY3AgPSDnq6DoioIubWFwKChkYXRhLCBzc2lkKSA9PiAoe1xcbiAgICAgICAgICAgIHRpdGxlOiBwZGZoKGRhdGEsICdhJiZUZXh0JyksXFxuICAgICAgICAgICAgdXJsOiBwZChkYXRhLCAnYSYmaHJlZicpICsgbGF6eSxcXG4gICAgICAgICAgICBjb2xfdHlwZTog56ug6IqCLmxlbmd0aCA+IDMgPyAndGV4dF80JyA6ICd0ZXh0XzInLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGNsczogTVlfVVJMICsgXFxcIl/pgInpm4ZcXFwiLFxcbiAgICAgICAgICAgICAgICBpZDogcGQoZGF0YSwgJ2EmJmhyZWYnKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pKTtcXG4gICAgICAgIGRlbGV0ZUl0ZW1CeUNscyhNWV9VUkwgKyBcXFwiX+mAiembhlxcXCIpO1xcbiAgICAgICAgYWRkSXRlbUJlZm9yZShNWV9VUkwgKyBcXFwiZm9vdGVyXFxcIiwgY3ApO1xcbiAgICAgICAgcHV0TXlWYXIoTVlfVVJMICsgXFxcIueroOiKguaOkuW6j1xcXCIsIOaPkOekuik7XFxuICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICB9LCB0YWJzLCDmjpLluo/lkI0sIGxhenksIGRbMF0sVFbmjqjpgIEpLFxcbiAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJyxcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGlkOiBNWV9VUkwgKyBcXFwiX+aOkuW6j1xcXCIsXFxuICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCJUVmJveOaOqOmAgVxcXCIsXFxuICAgICAgICAgICAganM6IFRW5o6o6YCBKHRhYnMsIGxpc3RzLCBkWzBdKVxcbiAgICAgICAgfV1cXG4gICAgfVxcbn0pO1xcblxcbmZ1bmN0aW9uIFRW5o6o6YCBKHRhYnMsIGxpc3RzLCBkKSB7XFxuICAgIHJldHVybiAkLnRvU3RyaW5nKCh0YWJzLCBsaXN0cywgZCkgPT4ge1xcbiAgICAgICAgdmFyIOaOqOmAgSA9IHtcXG4gICAgICAgICAgICBcXFwibmFtZVxcXCI6IGdldFBhZ2VUaXRsZSgpLFxcbiAgICAgICAgICAgIFxcXCJjb250ZW50XFxcIjogZC5kZXNjLFxcbiAgICAgICAgICAgIFxcXCJwaWNcXFwiOiBkLmltZyB8fCBkLnBpY191cmwsXFxuICAgICAgICAgICAgXFxcImZyb21cXFwiOiB0YWJzLmpvaW4oJyQkJCcpLFxcbiAgICAgICAgICAgIFxcXCJ1cmxcXFwiOiBzdG9yYWdlMC5nZXRNeVZhcihcXFwibGlzdHNcXFwiKS5tYXAobGkgPT4gbGkubWFwKGxpMSA9PiBwZGZoKGxpMSwgJ1RleHQnKSArICckJyArIHBkKGxpMSwgJ2EmJmhyZWYnKSkuam9pbignIycpKS5qb2luKCckJCQnKVxcbiAgICAgICAgfTtcXG4gICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL3B1c2g/cnVsZT1YWVHmjqjpgIEmcHVzaHVybD1cXFwiICsgZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KOaOqOmAgSkpO1xcbiAgICB9LCB0YWJzLCBsaXN0cywgZCk7XFxufVxcblxcbnRhYnMuZm9yRWFjaCgoZGF0YSwgaWQpID0+IHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBnZXRNeVZhcihNWV9VUkwsICcwJykgPT0gaWQgPyBg4oCc4oCcJHtkYXRhfeKAneKAnWAgOiBkYXRhLFxcbiAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCjnur/ot68sIGxhenksIGlkKSA9PiB7XFxuICAgICAgICAgICAgdmFyIGxpc3RzID0gc3RvcmFnZTAuZ2V0TXlWYXIoXFxcImxpc3RzXFxcIik7XFxuICAgICAgICAgICAgdmFyIOaOkuW6jyA9IGdldE15VmFyKE1ZX1VSTCArIFxcXCLnq6DoioLmjpLluo9cXFwiLCAnIzFhYWQxOVxcXCI+5q2j5bqPJyk7XFxuICAgICAgICAgICAgdmFyIOaPkOekuiA9IOaOkuW6jyA9PSAnI0ZGMDAwMFxcXCI+5YCS5bqPJyA/ICcjMWFhZDE5XFxcIj7mraPluo8nIDogJyNGRjAwMDBcXFwiPuWAkuW6jyc7XFxuICAgICAgICAgICAg57q/6LevLmZvckVhY2goKGRhdGEsIHhsaWQpID0+IHtcXG4gICAgICAgICAgICAgICAgdXBkYXRlSXRlbSh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogaWQgPT0geGxpZCA/IGDigJzigJwke2RhdGF94oCd4oCdYCA6IGRhdGEsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBNWV9VUkwgKyBcXFwiX+e6v+i3r1xcXCIgKyB4bGlkXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgcHV0TXlWYXIoTVlfVVJMLCBpZClcXG4gICAgICAgICAgICB2YXIg56ug6IqCID0gbGlzdHNbZ2V0TXlWYXIoTVlfVVJMLCAnMCcpXTtcXG4gICAgICAgICAgICBpZiAo5o6S5bqPID09ICcjRkYwMDAwXFxcIj7lgJLluo8nKSB7XFxuICAgICAgICAgICAgICAgIOeroOiKgi5yZXZlcnNlKClcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgbGV0IGNwID0g56ug6IqCLm1hcCgoZGF0YSwgc3NpZCkgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoZGF0YSwgJ2EmJlRleHQnKSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogcGQoZGF0YSwgJ2EmJmhyZWYnKSArIGxhenksXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTog56ug6IqCLmxlbmd0aCA+IDMgPyAndGV4dF80JyA6ICd0ZXh0XzInLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjbHM6IE1ZX1VSTCArIFxcXCJf6YCJ6ZuGXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogcGQoZGF0YSwgJ2EmJmhyZWYnKVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGRlbGV0ZUl0ZW1CeUNscyhNWV9VUkwgKyBcXFwiX+mAiembhlxcXCIpO1xcbiAgICAgICAgICAgIGFkZEl0ZW1CZWZvcmUoTVlfVVJMICsgXFxcImZvb3RlclxcXCIsIGNwKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICB9LCB0YWJzLCBsYXp5LCBpZCksXFxuICAgICAgICBjb2xfdHlwZTogJ2ZsZXhfYnV0dG9uJyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgaWQ6IE1ZX1VSTCArIFxcXCJf57q/6LevXFxcIiArIGlkXFxuICAgICAgICB9XFxuICAgIH0pO1xcbn0pXFxuXFxuaWYgKOaOkuW6jyA9PSAnI0ZGMDAwMFxcXCI+5YCS5bqPJykge1xcbiAgICBsaXN0LnJldmVyc2UoKVxcbn1cXG5saXN0LmZvckVhY2goKGRhdGEsIGlkKSA9PiB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogcGRmaChkYXRhLCAnYSYmVGV4dCcpLFxcbiAgICAgICAgdXJsOiBwZChkYXRhLCAnYSYmaHJlZicpICsgbGF6eSxcXG4gICAgICAgIGNvbF90eXBlOiBsaXN0Lmxlbmd0aCA+IDMgPyAndGV4dF80JyA6ICd0ZXh0XzInLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBjbHM6IE1ZX1VSTCArIFxcXCJf6YCJ6ZuGXFxcIixcXG4gICAgICAgICAgICBpZDogcGQoZGF0YSwgJ2EmJmhyZWYnKVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG59KVxcblxcbiAgICBzZXRMYXN0Q2hhcHRlclJ1bGUoJ2pzOicgKyAkLnRvU3RyaW5nKCjpgInpm4YsIOmAiembhuWIl+ihqCkgPT4ge1xcbiAgICAgICAgc2V0UmVzdWx0KCfmm7TmlrDoh7M6IOesrCcgKyBwZGZhKGdldFJlc0NvZGUoKSwg6YCJ6ZuGKS5tYXAoZGF0YSA9PiBwZGZhKGRhdGEsIOmAiembhuWIl+ihqCkubGVuZ3RoKS5zb3J0KChhLCBiKSA9PiBiIC0gYSlbMF0gKyBcXFwi6ZuGXFxcIik7XFxuICAgIH0sIOmAiembhiwg6YCJ6ZuG5YiX6KGoKSk7XFxuZC5wdXNoKHtcXG4gICAgY29sX3R5cGU6IFxcXCJiaWdfYmxhbmtfYmxvY2tcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgaWQ6IE1ZX1VSTCArIFxcXCJmb290ZXJcXFwiXFxuICAgIH1cXG59KTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS6jOe6p3BsYXlfc291cmNlX3RhYlwiLFwicGF0aFwiOlwicGxheV9zb3VyY2VfdGFiXCIsXCJydWxlXCI6XCJ2YXIgZCA9IFtdO1xcbnZhciBodG1sID0gZ2V0UmVzQ29kZSgpO1xcblxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBwZGZoKGh0bWwsICcucmVtYXJrcyYmVGV4dCcpICtcXG4gICAgICAgICdcXFxcbicgKyBwZGZoKGh0bWwsICcucy10b3AtaW5mby1kZXRhaWwmJmEmJlRleHQnKSArXFxuICAgICAgICBwZGZoKGh0bWwsICcucy10b3AtaW5mby1kZXRhaWwmJmEsMSYmVGV4dCcpICtcXG4gICAgICAgIHBkZmgoaHRtbCwgJy5zLXRvcC1pbmZvLWRldGFpbCYmYSwyJiZUZXh0JykgK1xcbiAgICAgICAgJ1xcXFxu4oCc4oCc566A5LuL77ya5LiN6IO955So5bCx5Yig5o6J5ZCn4oCd4oCdJyxcXG4gICAgZGVzYzogcGRmaChodG1sLCAnLmRlc2NfdHh0JiZUZXh0Jykuc3Vic3RyaW5nKDAsIDIwKSxcXG4gICAgaW1nOiBwZChodG1sLCAnLmltZy1jb3Zlcnx8LnZvZC1kZXRhaWwtYmomJnNyYycpLFxcbiAgICB1cmw6IE1ZX1VSTCxcXG4gICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpY19ibHVyJ1xcbn0pO1xcbnZhciDnur/ot68gPSAnLnBsYXlfc291cmNlX3RhYiYmYSdcXG52YXIg6YCJ6ZuGID0gJ2JvZHkmJi5wbGF5ZXJfbGlzdHx8I3BsYXlsaXN0Ym94fHwjcGxheXN4J1xcbnZhciDnur/ot6/lkI0gPSAnYSYmVGV4dCdcXG52YXIg6YCJ6ZuG5YiX6KGoID0gJ3VsJiZsaSdcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2Vyamk/cnVsZT3mqKHmnb/Ct1EnKSkucnVsZSlcXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuoznuqdmZWQtcGxheS1pdGVtXCIsXCJwYXRoXCI6XCJmZWQtcGxheS1pdGVtXCIsXCJydWxlXCI6XCJ2YXIgZCA9IFtdO1xcbnZhciBodG1sID0gZ2V0UmVzQ29kZSgpO1xcblxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBwZGZoKGh0bWwsICdkZCYmbGksMyYmVGV4dCcpICtcXG4gICAgICAgICdcXFxcbicgKyBwZGZoKGh0bWwsICdkZCYmbGksNCYmVGV4dCcpXFxuICAgICAgICAuc3Vic3RyaW5nKDAsIDE1KSArICdcXFxcbicgK1xcbiAgICAgICAgcGRmaChodG1sLCAnZGQmJmxpLDUmJlRleHQnKVxcbiAgICAgICAgLnN1YnN0cmluZygwLCAxNSksXFxuICAgIGRlc2M6IHBkZmgoaHRtbCwgJ2RkJiZsaSw2JiZUZXh0Jykuc3Vic3RyaW5nKDAsIDI1KSxcXG4gICAgcGljX3VybDogcGQoaHRtbCwgJy5mZWQtbGF6eSYmZGF0YS1vcmlnaW5hbCcpLFxcbiAgICB1cmw6IE1ZX1VSTCxcXG4gICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpYydcXG59KTtcXG52YXIg57q/6LevID0gJ2JvZHkmJi5mZWQtZHJvcC1idG5zJ1xcbnZhciDpgInpm4YgPSAnYm9keSYmLmZlZC1wbGF5LWl0ZW0nXFxudmFyIOe6v+i3r+WQjSA9ICdhJiZUZXh0J1xcbnZhciDpgInpm4bliJfooaggPSAnYm9keSYmLmZlZC1idG5zLWluZm8nXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9lcmppP3J1bGU95qih5p2/wrdRJykpLnJ1bGUpXFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5pCc57SiZGxcIixcInBhdGhcIjpcImRsXCIsXCJydWxlXCI6XCJ2YXIgZCA9IFtdO1xcbnZhciBsaXN0ID0gcGRmYShnZXRSZXNDb2RlKCksICdib2R5JiZkbCcpO1xcbmxvZygn5pCc57Si57uT5p6cJylcXG5sb2cobGlzdClcXG5pZiAobGlzdC5sZW5ndGggPT0gMCkgdGhyb3cgXFxcIuaQnOe0ouS4uuepuu+8jOWPr+iDveWMuemFjemUmeivr1xcXCJcXG5mb3IgKHZhciBqIGluIGxpc3QpIHtcXG4gIGQucHVzaCh7XFxuICAgICAgIHRpdGxlOiBwZGZoKGxpc3Rbal0sICdoMSYmVGV4dCcpLFxcbiAgICAgICBkZXNjOiBwZGZoKGxpc3Rbal0sICcuZmVkLWxpc3QtcmVtYXJrcyYmVGV4dCcpLFxcblxcdCAgICBjb250ZW50OiBwZGZoKGxpc3Rbal0sICcuZmVkLXBhcnQtZXNhbi0tc3BhbiYmVGV4dCcpLFxcbiAgICAgICBpbWc6IHBkKGxpc3Rbal0sICdhJiZkYXRhLW9yaWdpbmFsJyksXFxuICAgICAgIHVybDogcGQobGlzdFtqXSwgJ2EmJmhyZWYnKVxcbiAgfSk7XFxufVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiI01hcHBpbmdcIixcInBhdGhcIjpcIk1hcHBpbmdcIixcInJ1bGVcIjpcImpzOlxcbiQuZXhwb3J0cyA9IHtcXG4gICAgXFxcImhvbWVcXFwiOiBbe1xcbiAgICAgICAgICAgIGtleXM6IFtcXFwiIGIgXFxcIl0sXFxuICAgICAgICAgICAgdXJsOiBcXFwiLmJcXFwiLFxcbiAgICAgICAgICAgIC8vICAgICBhbGxLZXk6IHRydWUsXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGtleXM6IFtcXFwibmF2LXRhYnNcXFwiXSxcXG4gICAgICAgICAgICB1cmw6IFxcXCJuYXYtdGFic1xcXCIsXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGtleXM6IFtcXFwibXl1aS1jb250ZW50X19saXN0XFxcIl0sXFxuICAgICAgICAgICAgdXJsOiBcXFwibXl1aS1jb250ZW50X19saXN0XFxcIixcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAga2V5czogW1xcXCJuYXYtdGFic1xcXCIsIFxcXCJzdHVpLWNvbnRlbnRfX3BsYXlsaXN0XFxcIl0sXFxuICAgICAgICAgICAgdXJsOiBcXFwibmF2LXRhYnMxXFxcIixcXG4gICAgICAgICAgICBhbGxLZXk6IHRydWUsXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGtleXM6IFtcXFwiaDNcXFwiLCBcXFwic3R1aS1jb250ZW50X19wbGF5bGlzdFxcXCJdLFxcbiAgICAgICAgICAgIHVybDogXFxcImgzXFxcIixcXG4gICAgICAgICAgICBhbGxLZXk6IHRydWUsXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGtleXM6IFtcXFwibXl1aS12b2RsaXN0IFxcXCJdLFxcbiAgICAgICAgICAgIHVybDogXFxcIm15dWktdm9kbGlzdFxcXCIsXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGtleXM6IFtcXFwibW8tbW92cy1pdGVtXFxcIl0sXFxuICAgICAgICAgICAgdXJsOiBcXFwibW8tbW92cy1pdGVtXFxcIixcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAga2V5czogW1xcXCJtb2R1bGUtdGFiLWl0ZW1cXFwiXSxcXG4gICAgICAgICAgICB1cmw6IFxcXCJtb2R1bGUtdGFiLWl0ZW1cXFwiLFxcbiAgICAgICAgICAgIC8vICAgICBhbGxLZXk6IHRydWUsXFxuICAgICAgICB9LHtcXG4gICAgICAgICAgICBrZXlzOiBbXFxcInktcGxheUxpc3RcXFwiXSxcXG4gICAgICAgICAgICB1cmw6IFxcXCJ5LXBsYXlMaXN0XFxcIixcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAga2V5czogW1xcXCJzdHVpLXZvZGxpc3QgXFxcIl0sXFxuICAgICAgICAgICAgdXJsOiBcXFwic3R1aS12b2RsaXN0XFxcIixcXG4gICAgICAgICAgICAvLyAgICAgYWxsS2V5OiB0cnVlLFxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBrZXlzOiBbXFxcInBsYXlfc291cmNlX3RhYlxcXCJdLFxcbiAgICAgICAgICAgIHVybDogXFxcInBsYXlfc291cmNlX3RhYlxcXCIsXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGtleXM6IFtcXFwiZmVkLXBsYXktaXRlbVxcXCJdLFxcbiAgICAgICAgICAgIHVybDogXFxcImZlZC1wbGF5LWl0ZW1cXFwiLFxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBrZXlzOiBbXFxcIm1vZHVsZS1pdGVtXFxcIl0sXFxuICAgICAgICAgICAgdXJsOiBcXFwibW9kdWxlLWl0ZW1zXFxcIixcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAga2V5czogW1xcXCJ2b2RsaXN0IFxcXCIsIFxcXCJsYXp5bG9hZFxcXCJdLFxcbiAgICAgICAgICAgIHVybDogXFxcInZvZGxpc3RcXFwiLFxcbiAgICAgICAgICAgIGFsbEtleTogdHJ1ZSxcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAga2V5czogW1xcXCJtby1wbGF5LWxvYWRcXFwiXSxcXG4gICAgICAgICAgICB1cmw6IFxcXCJtby1wbGF5LWxvYWRcXFwiLFxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBrZXlzOiBbXFxcImZlZC1saXN0LXRpdGxlXFxcIl0sXFxuICAgICAgICAgICAgdXJsOiBcXFwiZmVkLWxpc3QtdGl0bGVcXFwiLFxcbiAgICAgICAgICAgIC8vYWxsS2V5OiB0cnVlLFxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBrZXlzOiBbXFxcInBhY2steWtwYWNrXFxcXFxcXCJcXFwiXSxcXG4gICAgICAgICAgICB1cmw6IFxcXCJwYWNrLXlrcGFja1xcXCIsXFxuICAgICAgICB9LFxcbiAgICAgICAgLypcXG4gICAgICAgICAgICAgICAge1xcbiAgICAgICAgICAgICAgICAgICAga2V5czogW1xcXCJpdGVtXFxcIl0sXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJpdGVtXFxcIixcXG4gICAgICAgICAgICAgICAgfSwqL1xcbiAgICAgICAge1xcbiAgICAgICAgICAgIGtleXM6IFtcXFwiZGF0YV9saXN0XFxcIl0sXFxuICAgICAgICAgICAgdXJsOiBcXFwiZGF0YV9saXN0XFxcIixcXG4gICAgICAgIH0sXFxuICAgIF0sXFxuICAgIFxcXCJzZWFyY2hcXFwiOiBbe1xcbiAgICAgICAgICAgIGtleXM6IFtcXFwic3R1aS12b2RsaXN0X19tZWRpYVxcXCJdLFxcbiAgICAgICAgICAgIHVybDogXFxcInN0dWktdm9kbGlzdF9fbWVkaWFcXFwiLFxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBrZXlzOiBbXFxcIm15dWktdm9kbGlzdF9fbWVkaWFcXFwiXSxcXG4gICAgICAgICAgICB1cmw6IFxcXCJteXVpLXZvZGxpc3RfX21lZGlhXFxcIixcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAga2V5czogW1xcXCJtb2R1bGUtc2VhcmNoLWl0ZW1cXFwiXSxcXG4gICAgICAgICAgICB1cmw6IFxcXCJtb2R1bGUtc2VhcmNoLWl0ZW1cXFwiLFxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBrZXlzOiBbXFxcInN0dWktdm9kbGlzdCBcXFwiXSxcXG4gICAgICAgICAgICB1cmw6IFxcXCJzdHVpLXZvZGxpc3RcXFwiLFxcbiAgICAgICAgICAgIC8vICAgICBhbGxLZXk6IHRydWUsXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGtleXM6IFtcXFwiZGwgXFxcIl0sXFxuICAgICAgICAgICAgdXJsOiBcXFwiZGxcXFwiLFxcbiAgICAgICAgICAgIGFsbEtleTogdHJ1ZSxcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAga2V5czogW1xcXCJtb2R1bGUtaXRlbXNcXFwiXSxcXG4gICAgICAgICAgICB1cmw6IFxcXCJtb2R1bGUtaXRlbXNcXFwiLFxcbiAgICAgICAgfSxcXG4gICAgXVxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIiNhdXRvXCIsXCJwYXRoXCI6XCJhdXRvXCIsXCJydWxlXCI6XCJqczpcXG5mdW5jdGlvbiBnZXRQYWdlU291cmNlKGtleSkge1xcbiAgICBsZXQgc3JjID0gcmVxdWVzdChcXFwiaGlrZXI6Ly9wYWdlL1xcXCIgKyBrZXkgKyBcXFwiP3J1bGU95qih5p2/wrdRXFxcIik7XFxuICAgIHNyYyA9IEpTT04ucGFyc2Uoc3JjKS5ydWxlO1xcbiAgICByZXR1cm4gc3JjO1xcbn1cXG5jb25zdCBzb3VyY2VNYXAgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9NYXBwaW5nP3J1bGU95qih5p2/wrdRXFxcIik7XFxuXFxuZnVuY3Rpb24gYXV0b1BhZ2UoaHRtbHNyYywgdHlwZSkge1xcbiAgICBsZXQgcGFnZVJ1bGVzID0gW10sXFxuICAgICAgICBodG1sU291cmNlID0gaHRtbHNyYyxcXG4gICAgICAgIHBhZ2VUeXBlLFxcbiAgICAgICAgbU1hcHBpbmc7XFxuICAgIGlmICh0eXBlICE9PSB1bmRlZmluZWQpIHtcXG4gICAgICAgIHBhZ2VUeXBlID0gdHlwZTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHBhZ2VUeXBlID0gTVlfVFlQRTtcXG4gICAgfVxcbiAgICBtTWFwcGluZyA9IHNvdXJjZU1hcFtwYWdlVHlwZV07XFxuICAgIGlmIChtTWFwcGluZyA9PT0gdW5kZWZpbmVkIHx8ICFBcnJheS5pc0FycmF5KG1NYXBwaW5nKSkge1xcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLkuI3lrZjlnKhcXFwiICsgcGFnZVR5cGUgKyBcXFwi57G75Z6L55qE5qih5p2/XFxcIik7XFxuICAgIH1cXG4gICAgZm9yIChsZXQgaXRlbSBvZiBtTWFwcGluZykge1xcbiAgICAgICAgaWYgKGl0ZW0uYWxsS2V5KSB7XFxuICAgICAgICAgICAgaWYgKGl0ZW0ua2V5cy5ldmVyeShrZXkgPT4gaHRtbFNvdXJjZS5pbmNsdWRlcyhrZXkpKSkge1xcbiAgICAgICAgICAgICAgICBwYWdlUnVsZXMucHVzaChpdGVtKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGlmIChpdGVtLmtleXMuc29tZShrZXkgPT4gaHRtbFNvdXJjZS5pbmNsdWRlcyhrZXkpKSkge1xcbiAgICAgICAgICAgICAgICBwYWdlUnVsZXMucHVzaChpdGVtKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgaWYocGFnZVJ1bGVzLmxlbmd0aCA9PSAwKSB7XFxuICAgICAgICBsb2coXFxcIuaaguaXoOWQiOmAgueahOaooeadv1xcXCIpO1xcbiAgICB9XFxuICAgIGZvciAobGV0IHBhZ2VSdWxlIG9mIHBhZ2VSdWxlcykge1xcbiAgICAgICAgbG9nKFxcXCLmraPlnKjljLnphY3vvJpcXFwiICsgcGFnZVJ1bGUudXJsKTtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgZXZhbC5jYWxsKG51bGwsIFxcXCI7KGZ1bmN0aW9uKCl7XFxcIiArIGdldFBhZ2VTb3VyY2UocGFnZVJ1bGUudXJsKSArIFxcXCJ9KSgpXFxcIik7XFxuICAgICAgICAgICAgbG9nKFxcXCLljLnphY3mqKHmnb/miJDlip/vvIzmraPlnKjnu5PmnZ/ljLnphY3ov5vnqItcXFwiKTtcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICBsb2coXFxcIuWMuemFjeaooeadv+mUmeivr1xcXCIpO1xcbiAgICAgICAgICAgIGxvZyhlLnRvU3RyaW5nKCkpXFxuICAgICAgICAgICAgbG9nKFxcXCLmraPlnKjljLnphY3kuIvkuIDkuKrmqKHmnb8uLi4uLi5cXFwiKVxcbiAgICAgICAgICAgIGlmIChwYWdlUnVsZS51cmwgPT0gcGFnZVJ1bGVzW3BhZ2VSdWxlcy5sZW5ndGggLSAxXS51cmwpIHtcXG4gICAgICAgICAgICAgICAgbG9nKFxcXCLlt7LljLnphY3liLDmnIDlkI7kuIDkuKrmqKHmnb/vvIzmmoLml6DlkIjpgILnmoTmqKHmnb9cXFwiKTtcXG4gICAgICAgICAgICAgICAgc2V0UmVzdWx0KFtdKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG59XFxuJC5leHBvcnRzLmF1dG9QYWdlID0gYXV0b1BhZ2U7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuIDnuqdwYWNrLXlrcGFja1wiLFwicGF0aFwiOlwicGFjay15a3BhY2tcIixcInJ1bGVcIjpcInZhciBkID1bXTtcXG5NWV9SVUxFLnVybC5tYXRjaCgvZnlwYWdlLylbMF1cXG52YXIgbGlzdCA9IHBkZmEoZ2V0UmVzQ29kZSgpLCAnYm9keSYmLnBhY2steWtwYWNrJyk7XFxuZm9yICh2YXIgaiBpbiBsaXN0KSB7XFxuICBkLnB1c2goe1xcbiAgICAgICB0aXRsZTogcGRmaChsaXN0W2pdLCAnYSYmdGl0bGUnKSxcXG4gICAgICAgZGVzYzogcGRmaChsaXN0W2pdLCAnc3BhbiwtMSYmVGV4dCcpLFxcbiAgICAgICBpbWc6IHBkKGxpc3Rbal0sICcuZWNsYXp5JiZkYXRhLW9yaWdpbmFsJykrJ0BSZWZlcmVyPScsXFxuICAgICAgIHVybDogcGQobGlzdFtqXSwnYSYmaHJlZicpKyAnI2ltbWVyc2l2ZVRoZW1lIydcXG4gIH0pO1xcbn1cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuIDnuqdtb2R1bGUtaXRlbXNcIixcInBhdGhcIjpcIm1vZHVsZS1pdGVtc1wiLFwicnVsZVwiOlwiTVlfUlVMRS51cmwubWF0Y2goL2Z5cGFnZS8pWzBdXFxudmFyIGQgPSBbXVxcbnZhciBsaXN0ID0gcGRmYShnZXRSZXNDb2RlKCksICdib2R5JiYubW9kdWxlLWl0ZW0nKTtcXG5mb3IgKHZhciBqIGluIGxpc3QpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBwZGZoKGxpc3Rbal0sICdzdHJvbmd8fGEmJlRleHR8fHRpdGxlJyksXFxuICAgICAgICBkZXNjOiBwZGZoKGxpc3Rbal0sICcubW9kdWxlLWl0ZW0tdGV4dHx8Lm1vZHVsZS1pdGVtLW5vdGUmJlRleHQnKSxcXG4gICAgICAgIHBpY191cmw6IHBkKGxpc3Rbal0sICdpbWd8fC5sYXp5JiZkYXRhLXNyY3x8ZGF0YS1vcmlnaW5hbHx8c3JjJykgKyAnQFJlZmVyZXI9JyxcXG4gICAgICAgIHVybDogcGQobGlzdFtqXSwgJ2EmJmhyZWYnKSArIFxcXCIjaW1tZXJzaXZlVGhlbWUjXFxcIlxcbiAgICB9KTtcXG59XFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5LqM57qnbW9kdWxlLXRhYi1pdGVtXCIsXCJwYXRoXCI6XCJtb2R1bGUtdGFiLWl0ZW1cIixcInJ1bGVcIjpcInZhciBkID0gW107XFxudmFyIGh0bWwgPSBnZXRSZXNDb2RlKCk7XFxuXFxudHJ5IHtcXG4gICAgdmFyIHRpdGxlID0gcGRmYShodG1sLCAnYm9keS0tYSYmLnRhZy1saW5rJyk7XFxufSBjYXRjaCAoZSkge1xcbiAgICB2YXIgdGl0bGUgPSAnJztcXG59XFxudmFyIFQgPSBbXTtcXG5mb3IgKHZhciBpIGluIHRpdGxlKSB7XFxuICAgIFQucHVzaChwZGZoKHRpdGxlW2ldLCAnYSYmVGV4dCcpKVxcbn1cXG5cXG5kLnB1c2goe1xcbiAgICB0aXRsZTogVC5qb2luKCcgICcpICsgJ1xcXFxuJyArXFxuICAgICAgICBwZGZoKGh0bWwsICcudmlkZW8taW5mby1pdGVtcywxJiZUZXh0JylcXG4gICAgICAgIC5zcGxpdCgnLycpLmpvaW4oJyAgJylcXG4gICAgICAgIC5zdWJzdHJpbmcoMCwgMjApICsgJ1xcXFxuJyArXFxuICAgICAgICBwZGZoKGh0bWwsICcudmlkZW8taW5mby1pdGVtcyYmVGV4dCcpXFxuICAgICAgICAuc3BsaXQoJy8nKS5qb2luKCcgICcpXFxuICAgICAgICAuc3Vic3RyaW5nKDAsIDIwKSxcXG4gICAgZGVzYzogcGRmaChodG1sLCAnLnZpZGVvLWluZm8taXRlbXMsMiYmVGV4dCcpLFxcbiAgICBpbWc6IHBkKGh0bWwsICcubGF6eWxvYWQmJmRhdGEtb3JpZ2luYWx8fGRhdGEtc3JjfHxzcmMnKSxcXG4gICAgdXJsOiBNWV9VUkwsXFxuICAgIGNvbF90eXBlOiAnbW92aWVfMV92ZXJ0aWNhbF9waWNfYmx1cidcXG59KTtcXG52YXIg57q/6LevID0gJ2JvZHkmJi5tb2R1bGUtdGFiLWl0ZW0nXFxudmFyIOmAiembhiA9ICdib2R5JiYuc2Nyb2xsLWJveC15fHwubW9kdWxlLWxpc3QnXFxudmFyIOe6v+i3r+WQjSA9ICdzcGFuJiZUZXh0J1xcbnZhciDpgInpm4bliJfooaggPSAnYm9keSYmYSdcXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2Vyamk/cnVsZT3mqKHmnb/Ct1EnKSkucnVsZSlcXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmkJzntKJtb2R1bGUtc2VhcmNoLWl0ZW1cIixcInBhdGhcIjpcIm1vZHVsZS1zZWFyY2gtaXRlbVwiLFwicnVsZVwiOlwidmFyIGQgPSBbXTtcXG52YXIgbGlzdCA9IHBkZmEoZ2V0UmVzQ29kZSgpLCAnYm9keSYmLm1vZHVsZS1zZWFyY2gtaXRlbScpO1xcbmxvZygn5pCc57Si57uT5p6cJylcXG5sb2cobGlzdClcXG5pZiAobGlzdC5sZW5ndGggPT0gMCkgdGhyb3cgXFxcIuaQnOe0ouS4uuepuu+8jOWPr+iDveWMuemFjemUmeivr1xcXCJcXG5mb3IgKHZhciBqIGluIGxpc3QpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBwZGZoKGxpc3Rbal0sICdoMyYmVGV4dCcpLFxcbiAgICAgICAgZGVzYzogcGRmaChsaXN0W2pdLCAnLnZpZGVvLXNlcmlhbCYmVGV4dCcpLFxcbiAgICAgICAgY29udGVudDogcGRmaChsaXN0W2pdLCAnLnZpZGVvLWluZm8tYXV4JiZUZXh0JyksXFxuICAgICAgICBpbWc6IHBkKGxpc3Rbal0sICdpbWcmJmRhdGEtb3JpZ2luYWx8fGRhdGEtc3JjJyksXFxuICAgICAgICB1cmw6IHBkKGxpc3Rbal0sICcudmlkZW8tc2VyaWFsJiZocmVmJykgKyAnI2ltbWVyc2l2ZVRoZW1lIydcXG4gICAgfSk7XFxufVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5LiA57qnaXRlbVwiLFwicGF0aFwiOlwiaXRlbVwiLFwicnVsZVwiOlwidmFyIGQgPSBbXTtcXG5NWV9SVUxFLnVybC5tYXRjaCgvZnlwYWdlLylbMF1cXG52YXIgbGlzdCA9IHBkZmEoZ2V0UmVzQ29kZSgpLCAnYm9keSYmLml0ZW0nKTtcXG5mb3IgKGxldCBpIGluIGxpc3QpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBwZGZoKGxpc3RbaV0sICdpbWcmJmFsdCcpLFxcbiAgICAgICAgZGVzYzogcGRmaChsaXN0W2ldLCAncCYmVGV4dCcpLFxcbiAgICAgICAgcGljX3VybDogcGQobGlzdFtpXSwgJ2ltZyYmc3JjJyksXFxuICAgICAgICB1cmw6IHBkKGxpc3RbaV0sICdhJiZocmVmJyksXFxuICAgICAgICBjb2xfdHlwZTogJ21vdmllXzMnXFxuICAgIH0pXFxufVxcbnNldFJlc3VsdChkKVwifSx7XCJuYW1lXCI6XCLkuIDnuqdkYXRhX2xpc3RcIixcInBhdGhcIjpcImRhdGFfbGlzdFwiLFwicnVsZVwiOlwidmFyIGQgPSBbXTtcXG5NWV9SVUxFLnVybC5tYXRjaCgvZnlwYWdlLylbMF1cXG52YXIgbGlzdCA9IHBkZmEoZ2V0UmVzQ29kZSgpLCAnI2RhdGFfbGlzdCYmbGknKTtcXG5mb3IgKGxldCBpIGluIGxpc3QpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBwZGZoKGxpc3RbaV0sICdhJiZ0aXRsZScpLFxcbiAgICAgICAgZGVzYzogcGRmaChsaXN0W2ldLCAnZW0mJlRleHQnKSxcXG4gICAgICAgIHBpY191cmw6IHBkKGxpc3RbaV0sICdpbWcmJmRhdGEtc3JjJyksXFxuICAgICAgICB1cmw6IHBkKGxpc3RbaV0sICdhJiZocmVmJyksXFxuICAgICAgICBjb2xfdHlwZTogJ21vdmllXzMnXFxuICAgIH0pXFxufVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5LqM57qnaDNcIixcInBhdGhcIjpcImgzXCIsXCJydWxlXCI6XCJ2YXIgZCA9IFtdO1xcbnZhciBodG1sID0gZ2V0UmVzQ29kZSgpO1xcbmlmIChodG1sLmluZGV4T2YoJ+ajgOa1i+S4rScpICE9IC0xKSB7XFxuICAgIGh0bWwgPSByZXF1ZXN0KE1ZX1VSTCArICc/YnR3YWYnICsgaHRtbC5tYXRjaCgvYnR3YWYoLio/KVxcXFxcXFwiLylbMV0pO1xcbn1cXG5kLnB1c2goe1xcbiAgICB0aXRsZTogcGRmaChodG1sLCAnLmRhdGEsMiYmVGV4dCcpXFxuICAgICAgICAucmVwbGFjZSgn57G75Z6L77yaJywgJycpXFxuICAgICAgICAucmVwbGFjZSgn5Zyw5Yy677yaJywgJycpXFxuICAgICAgICAucmVwbGFjZSgn5bm05Lu977yaJywgJyAnKVxcbiAgICAgICAgLnN1YnN0cmluZygwLCAxOCkgKyAnXFxcXG4nICtcXG4gICAgICAgIHBkZmgoaHRtbCwgJy5kYXRhLDEmJlRleHQnKVxcbiAgICAgICAgLnN1YnN0cmluZygwLCAxNSkgKyAnXFxcXG4nICtcXG4gICAgICAgIHBkZmgoaHRtbCwgJy5kYXRhJiZUZXh0JylcXG4gICAgICAgIC5zdWJzdHJpbmcoMCwgMTUpLFxcbiAgICBkZXNjOiBwZGZoKGh0bWwsICcuZGV0YWlsLXNrZXRjaHx8LmRhdGEsM3x8I2Rlc2MmJlRleHQnKSxcXG4gICAgaW1nOiBwZChodG1sLCAnLmxhenlsb2FkJiZkYXRhLW9yaWdpbmFsJyksXFxuICAgIHVybDogTVlfVVJMLFxcbiAgICBjb2xfdHlwZTogJ21vdmllXzFfdmVydGljYWxfcGljX2JsdXInXFxufSk7XFxuXFxudmFyIOe6v+i3ryA9ICdib2R5JiYuc3R1aS1wYW5uZWw6aGFzKC5zdHVpLWNvbnRlbnRfX3BsYXlsaXN0KSdcXG52YXIg6YCJ6ZuGID0gJ2JvZHkmJi5zdHVpLWNvbnRlbnRfX3BsYXlsaXN0J1xcbnZhciDnur/ot6/lkI0gPSAnaDMmJlRleHQnXFxudmFyIOmAiembhuWIl+ihqCA9ICd1bCYmbGknXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9lcmppP3J1bGU95qih5p2/wrdRJykpLnJ1bGUpXFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5LiA57qnZmVkLWxpc3QtdGl0bGVcIixcInBhdGhcIjpcImZlZC1saXN0LXRpdGxlXCIsXCJydWxlXCI6XCJ2YXIgZCA9IFtdO1xcbk1ZX1JVTEUudXJsLm1hdGNoKC9meXBhZ2UvKVswXVxcbnZhciBsaXN0ID0gcGRmYShnZXRSZXNDb2RlKCksICcuZmVkLWxpc3QtaW5mbyYmbGknKTtcXG5mb3IgKHZhciBqIGluIGxpc3QpIHtcXG4gIGQucHVzaCh7XFxuICAgICAgIHRpdGxlOiBwZGZoKGxpc3Rbal0sICcuZmVkLWxpc3QtdGl0bGUmJlRleHQnKSxcXG4gICAgICAgZGVzYzogcGRmaChsaXN0W2pdLCAnLmZlZC10ZXh0LWNlbnRlciYmVGV4dCcpLFxcbiAgICAgICBpbWc6IHBkKGxpc3Rbal0sICdhJiZkYXRhLW9yaWdpbmFsJykrJ0BSZWZlcmVyPScsXFxuICAgICAgIHVybDogcGQobGlzdFtqXSwgJ2EmJmhyZWYnKVxcbiAgfSk7XFxufVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5LqM57qnbXl1aS1jb250ZW50X19saXN0XCIsXCJwYXRoXCI6XCJteXVpLWNvbnRlbnRfX2xpc3RcIixcInJ1bGVcIjpcInZhciBkID0gW107XFxudmFyIGh0bWwgPSBnZXRSZXNDb2RlKCk7XFxuXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IHBkZmgoaHRtbCwgJy5kYXRhLDAmJlRleHQnKVxcbiAgICAgICAgLnJlcGxhY2UoJ+WcsOWMuu+8micsICcgICcpXFxuICAgICAgICAucmVwbGFjZSgn5bm05Lu977yaJywgJyAgJykgKyAnXFxcXG4nICtcXG4gICAgICAgIHBkZmgoaHRtbCwgJy5kYXRhLDEmJlRleHQnKVxcbiAgICAgICAgLnN1YnN0cmluZygwLCAxNSkgKyAnXFxcXG4nICtcXG4gICAgICAgIHBkZmgoaHRtbCwgJy5kYXRhLDImJlRleHQnKSxcXG4gICAgZGVzYzogcGRmaChodG1sLCAnLmRhdGEsMyYmVGV4dCcpLFxcbiAgICBwaWNfdXJsOiBwZChodG1sLCAnLmxhenlsb2FkJiZkYXRhLW9yaWdpbmFsJyksXFxuICAgIHVybDogTVlfVVJMLFxcbiAgICBjb2xfdHlwZTogJ21vdmllXzFfdmVydGljYWxfcGljX2JsdXInXFxufSk7XFxudmFyIOe6v+i3ryA9ICdib2R5JiYubXl1aS1wYW5lbC1ib3g6aGFzKC5teXVpLWNvbnRlbnRfX2xpc3QpJ1xcbnZhciDpgInpm4YgPSAnYm9keSYmLm15dWktY29udGVudF9fbGlzdCdcXG52YXIg57q/6Lev5ZCNID0gJ2gzJiZUZXh0J1xcbnZhciDpgInpm4bliJfooaggPSAndWwmJmxpJ1xcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvZXJqaT9ydWxlPeaooeadv8K3UScpKS5ydWxlKVxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWtl+espuS4suWkhOeQhuW3peWFt1wiLFwicGF0aFwiOlwic3RyaW5ndG9vbFwiLFwicnVsZVwiOlwianM6XFxuY29uc3QgbWF0Y2hMaXN0ICA9IHtcXG4gIC8vIFxcXCI8XFxcIjpcXFwiJmx0O1xcXCIsXFxuICAvLyBcXFwiPlxcXCI6IFxcXCImZ3Q7XFxcIixcXG4gIC8vIFxcXCImXFxcIjogXFxcIiZhbXA7XFxcIixcXG4gIC8vICdcXFwiJzogXFxcIiZxdW90O1xcXCIsXFxuICAvLyBcXFwiJ1xcXCI6IFxcXCJhY3V0ZTtcXFwiLFxcbiAgXFxcIiBcXFwiOiBcXFwiJm5ic3A7XFxcIixcXG4gIFxcXCJcXFxcblxcXCI6XFxcIjxicj5cXFwiXFxufVxcbi8vIOWtl+espui/h+a7pOWZqFxcbmZ1bmN0aW9uIGh0bWxFc2NhcGUodGV4dCl7XFxuICBsZXQgcmVnU3RyID0gJygnICsgT2JqZWN0LmtleXMobWF0Y2hMaXN0KS50b1N0cmluZygpICsgJyknXFxuICByZWdTdHIgPSByZWdTdHIucmVwbGFjZSgvLC9nLCAnKXwoJykgIFxcbiAgY29uc3QgcmVnRXhwID0gbmV3IFJlZ0V4cChyZWdTdHIsICdnJylcXG4gIHJldHVybiB0ZXh0LnJlcGxhY2UocmVnRXhwLCBtYXRjaCA9PiBtYXRjaExpc3RbbWF0Y2hdKVxcbn1cXG4kLmV4cG9ydHMuaHRtbEVzY2FwZSA9IGh0bWxFc2NhcGVcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWKqOaAgeWIhuexuzFcIixcInBhdGhcIjpcImR0ZmxcIixcInJ1bGVcIjpcImNvbnN0IGVtcHR5ID0gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuXFxuaWYgKHR5cGVvZijmi7zmjqXliIbnsbspICE9ICd1bmRlZmluZWQnICYmIOaLvOaOpeWIhuexuyAhPSAnJykge1xcbiAgICB2YXIgY2F0ZWdvcmllcyA9IHBkZmEoaHRtbCwg5aSn57G75a6a5L2NKS5jb25jYXQocGRmYShodG1sLCDmi7zmjqXliIbnsbspKVxcbn0gZWxzZSB7XFxuICAgIHZhciBjYXRlZ29yaWVzID0gcGRmYShodG1sLCDlpKfnsbvlrprkvY0pXFxufVxcbmxldCBzID0gW11cXG5sZXQgaW5pdF9jYXRlID0gW11cXG5cXG5mb3IgKGxldCBpID0gMDsgaSA8IDIwOyBpKyspIHtcXG4gICAgaW5pdF9jYXRlLnB1c2goXFxcIjBcXFwiKVxcbn1cXG5cXG5jb25zdCBmb2xkID0gZ2V0VmFyKE1ZX1JVTEUuZ3JvdXAsIFxcXCIwXFxcIilcXG5jb25zdCBjYXRlX3RlbXBfanNvbiA9IGdldFZhcihNWV9SVUxFLnRpdGxlLCBKU09OLnN0cmluZ2lmeShpbml0X2NhdGUpKVxcbmNvbnN0IGNhdGVfdGVtcCA9IEpTT04ucGFyc2UoY2F0ZV90ZW1wX2pzb24pXFxuXFxuaWYgKHBhcnNlSW50KHBhZ2UpID09PSAxKSB7XFxuICAgIHMucHVzaCh7XFxuICAgICAgICB0aXRsZTogZm9sZCA9PT0gJzEnID8gJ+KAnOKAnOKAneKAnTxiPicgKyAn4oioJy5mb250Y29sb3IoXFxcIiNGRjAwMDBcXFwiKSArICc8L2I+JyA6ICfigJzigJzigJ3igJ08Yj4nICsgJ+KIpycuZm9udGNvbG9yKFxcXCIjMWFhZDE5XFxcIikgKyAnPC9iPicsXFxuICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoZm9sZCkgPT4ge1xcbiAgICAgICAgICAgIHB1dFZhcihNWV9SVUxFLmdyb3VwLCBmb2xkID09PSAnMScgPyAnMCcgOiAnMScpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICB9LCBmb2xkKSxcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgIH0pXFxuICAgIGNhdGVnb3JpZXMuZm9yRWFjaCgoY2F0ZWdvcnksIGluZGV4KSA9PiB7XFxuICAgICAgICBsZXQgc3ViX2NhdGVnb3JpZXMgPSBwZGZhKGNhdGVnb3J5LCDlsI/nsbvlrprkvY0pO1xcbiAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XFxuICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMuZm9yRWFjaCgoaXRlbSwga2V5KSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IHBkZmgoaXRlbSwg5YiG57G75qCH6aKYKVxcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mKOaOkumZpCkgIT0gJ3VuZGVmaW5lZCcgJiYg5o6S6ZmkICE9ICcnKSB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHRpdGxlLnJlcGxhY2UobmV3IFJlZ0V4cCjmjpLpmaQsIFxcXCJnXFxcIiksIFxcXCJcXFwiKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZToga2V5LnRvU3RyaW5nKCkgPT09IGNhdGVfdGVtcFtpbmRleF0gPyBcXFwi4oCc4oCc4oCd4oCdXFxcIiArIHRpdGxlLmZvbnRjb2xvcijliIbnsbvpopzoibIpIDogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQocGQoaXRlbSwg5YiG57G76ZO+5o6lKSArICcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChwYXJhbXMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV3X2NhdGUgPSBbXVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5jYXRlX3RlbXAuZm9yRWFjaCgoY2F0ZSwgaW5kZXgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2NhdGUucHVzaChpbmRleCA9PT0gMCA/IHBhcmFtcy5rZXkudG9TdHJpbmcoKSA6IFxcXCIwXFxcIilcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dFZhcihNWV9SVUxFLnRpdGxlLCBKU09OLnN0cmluZ2lmeShuZXdfY2F0ZSkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0VmFyKE1ZX1JVTEUudXJsLCBpbnB1dClcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRlX3RlbXA6IGNhdGVfdGVtcCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiBwYWdlLFxcbiAgICAgICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCJcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0gZWxzZSBpZiAoZm9sZCA9PT0gJzEnKSB7XFxuICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMuZm9yRWFjaCgoaXRlbSwga2V5KSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IHBkZmgoaXRlbSwg5YiG57G75qCH6aKYKVxcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mKOaOkumZpCkgIT0gJ3VuZGVmaW5lZCcgJiYg5o6S6ZmkICE9ICcnKSB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHRpdGxlLnJlcGxhY2UobmV3IFJlZ0V4cCjmjpLpmaQsIFxcXCJnXFxcIiksIFxcXCJcXFwiKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZToga2V5LnRvU3RyaW5nKCkgPT09IGNhdGVfdGVtcFtpbmRleF0gPyBcXFwi4oCc4oCc4oCd4oCdXFxcIiArIHRpdGxlLmZvbnRjb2xvcijliIbnsbvpopzoibIpIDogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQocGQoaXRlbSwg5YiG57G76ZO+5o6lKSArICcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChwYXJhbXMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuY2F0ZV90ZW1wW3BhcmFtcy5pbmRleF0gPSBwYXJhbXMua2V5LnRvU3RyaW5nKClcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoTVlfUlVMRS50aXRsZSwgSlNPTi5zdHJpbmdpZnkocGFyYW1zLmNhdGVfdGVtcCkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0VmFyKE1ZX1JVTEUudXJsLCBpbnB1dClcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRlX3RlbXA6IGNhdGVfdGVtcCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgsXFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogcGFnZSxcXG4gICAgICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIHMucHVzaCh7XFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgIH0pXFxufVxcbnNldFByZVJlc3VsdChzKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5LiA57qn5YWs5YWx5qih5p2/XCIsXCJwYXRoXCI6XCJ5aWppXCIsXCJydWxlXCI6XCJmdW5jdGlvbiDkuIDnuqcoKSB7fTtcXG5PYmplY3QuYXNzaWduKOS4gOe6py5wcm90b3R5cGUsIHtcXG4gICAgY29uc3RydWN0b3I6IOS4gOe6pyxcXG4gICAgdGVzdCgpIHt9LFxcbiAgICDojrflj5bmupDnoIEodXJsLCBoZWFkZXIpIHtcXG4gICAgICAgIHJldHVybiBmZXRjaCh0cnVlX3VybCwge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlciB8fCB7XFxuICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzogJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjApJ1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pIC8vIOm7mOiupOe7n+S4gOS9v+eUqFBDIFVBXFxuICAgIH0sXFxuICAgIOiOt+WPluato+ehrumTvuaOpShwYWdlLCByZWdleCkge1xcbiAgICAgICAgbGV0IHRydWVfdXJsID0gZ2V0TXlWYXIoJ2hlYWRlci51cmwnLCBNWV9VUkwpO1xcbiAgICAgICAgbGV0IOmTvuaOpeWkhOeQhuW3peWFtyA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL3VybC1wcm9jZXNzb3I/cnVsZT3mqKHmnb/Ct1EnKVxcbiAgICAgICAgdHJ1ZV91cmwgPSDpk77mjqXlpITnkIblt6XlhbdcXG4gICAgICAgICAgICAu6ZO+5o6lKHRydWVfdXJsKVxcbiAgICAgICAgICAgIC7pobXnoIEocGFnZSlcXG4gICAgICAgICAgICAu5o+S5YWl5paw5aSE55CG6KeE5YiZKHJlZ2V4IHx8IFtdKVxcbiAgICAgICAgICAgIC7ojrflj5blpITnkIbnu5PmnpwoKTtcXG4gICAgICAgIHJldHVybiB0cnVlX3VybDtcXG4gICAgfSxcXG4gICAg5omT6YCg5YiG57G7KHJ1bGVMaXN0KSB7XFxuICAgICAgICAvLyAnMCcg5Li66buY6K6k5LiN5oqY5Y+g77yMJzEnIOS4uum7mOiupOaKmOWPoFxcbiAgICAgICAgY29uc3Qg5b2T5YmN5oqY5Y+g54q25oCBID0gZ2V0TXlWYXIoJ2hlYWRlci5mb2xkJywgJzEnKVxcblxcbiAgICAgICAgLy8g5byV5YWl5Yqo5oCB5YiG57G75L6d6LWWXFxuICAgICAgICBsZXQgaHRtbENhdGVnb3JpZXMgPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9jYXRlZ29yaWVzLWhlYWRlcj9ydWxlPeaooeadv8K3UScpXFxudmFyIGdldFJhbmdlQ29sb3JzID0gZnVuY3Rpb24oKXtcXG7CoMKgwqDCoMKgwqDCoCByZXR1cm4gJyMnKygnMDAwMDAnKyhNYXRoLnJhbmRvbSgpKjB4MTAwMDAwMDw8MCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xcbsKgwqDCoMKgwqAgfVxcbiAgICAgICAgaHRtbENhdGVnb3JpZXMu55WM6Z2iKGQpXFxuICAgICAgICAgICAgLy8gLuWIhuexu+mTvuaOpSh0cnVlX3VybClcXG4gICAgICAgICAgICAu5rqQ56CBKGh0bWwpXFxuICAgICAgICAgICAgLumhteeggShwYWdlKVxcbiAgICAgICAgICAgIC7mt7vliqDliIbnsbvlrprkvY0ocnVsZUxpc3QpXFxuICAgICAgICAgICAgLuW8gOWQr+WGhee9ruaKmOWPoOWKn+iDvSgpIC8vIOW/hemhu1xcbiAgICAgICAgICAgIC7mipjlj6Ao5b2T5YmN5oqY5Y+g54q25oCBKSAvLyDlv4XpobtcXG4gICAgICAgICAgICAu6YCJ5Lit55qE5YiG57G76aKc6ImyKGdldFJhbmdlQ29sb3JzKCkpXFxuICAgICAgICAgLy8gICAu6YCJ5Lit55qE5YiG57G76aKc6ImyKCcjMDk4QUMxJylcXG4gICAgICAgICAgICAu5byA5aeL5omT6YCg5YiG57G7KCk7XFxuICAgIH0sXFxuICAgIOeUn+aIkOeJh+WNlShkLCBodG1sKSB7XFxuICAgICAgICBsZXQgbGlzdCA9IHBkZmEoaHRtbCwg5YiX6KGoKTtcXG4gICAgICAgIGZvciAobGV0IGogaW4gbGlzdCkge1xcbiAgICAgICAgICAgIGxldCBpbWcgPSBwZChsaXN0W2pdLCDlm77niYcpO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGxpc3Rbal0sIOagh+mimCksXFxuICAgICAgICAgICAgICAgIGRlc2M6IHBkZmgobGlzdFtqXSwg5o+P6L+wKSxcXG4gICAgICAgICAgICAgICAgaW1nOiBpbWcgKyAnQFJlZmVyZXI9JyArIGltZyxcXG4gICAgICAgICAgICAgICAgdXJsOiBwZChsaXN0W2pdLCDpk77mjqUpLnJlcGxhY2UoJ3ZvZHBsYXknLCd2b2RkZXRhaWwnKSArIFxcXCIjaW1tZXJzaXZlVGhlbWUjXFxcIlxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICB9XFxufSlcXG5cXG4kLmV4cG9ydHMgPSBuZXcg5LiA57qnKCk7XFxuJC5leHBvcnRzXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLliqjmgIHliIbnsbsyXCIsXCJwYXRoXCI6XCJjYXRlZ29yaWVzLWhlYWRlclwiLFwicnVsZVwiOlwiY29uc3Qgc3ltYm9sTWFwID0ge1xcbiAgICAvLyBjaGVja1BhcmFtczogU3ltYm9sKCdjaGVja1BhcmFtcycpLFxcbiAgICBtTGF5b3V0OiBTeW1ib2woJ21MYXlvdXQnKSxcXG4gICAgdHJ1ZV91cmw6IFN5bWJvbCgndHJ1ZV91cmwnKSxcXG4gICAgbVBhZ2U6IFN5bWJvbCgnbVBhZ2UnKSxcXG4gICAgc3JjOiBTeW1ib2woJ3NyYycpLFxcbiAgICBydWxlT2JqTGlzdDogU3ltYm9sKCdydWxlT2JqTGlzdCcpLFxcbiAgICBtRm9sZDogU3ltYm9sKCdtRm9sZCcpLFxcbiAgICBtRm9sZElubmVyRW5hYmxlOiBTeW1ib2woJ21Gb2xkSW5uZXJFbmFibGUnKSxcXG4gICAgbUZvbGRJbmRleDogU3ltYm9sKCdtRm9sZEluZGV4JyksXFxuICAgIG1Gb2xkTGF5b3V0OiBTeW1ib2woJ21Gb2xkTGF5b3V0JyksXFxuICAgIG1Db2xvcjogU3ltYm9sKCdtQ29sb3InKSxcXG4gICAgbVRhZzogU3ltYm9sKCdtVGFnJyksXFxufVxcblxcbmZ1bmN0aW9uIENhdGVnb3JpZXNIZWFkZXIoY29sb3IpIHtcXG4gICAgLy8gJ3VzZSBzdHJpY3QnO1xcbiAgICAvLyAuLi5cXG4gICAgLy8gdGhpc1tzeW1ib2xNYXAubGlzdFJ1bGVdID0gW11cXG4gICAgLy8gdGhpc1tzeW1ib2xNYXAuc3ViTGlzdFJ1bGVdID0gW11cXG4gICAgdGhpc1tzeW1ib2xNYXAubUNvbG9yXSA9IGNvbG9yIHx8IFxcXCIjRkE3Mjk4XFxcIjtcXG4gICAgdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdID0gW11cXG4gICAgdGhpcy5WQVJNQVAgPSB7XFxuICAgICAgICBDQVRFR09SWTogXFxcImhlYWRlci5jYXRlZ29yeVxcXCIsXFxuICAgICAgICBVUkw6IFxcXCJoZWFkZXIudXJsXFxcIixcXG4gICAgICAgIEZPTEQ6IFxcXCJoZWFkZXIuZm9sZFxcXCIsXFxuICAgIH1cXG4gICAgdGhpc1tzeW1ib2xNYXAubUZvbGRMYXlvdXRdID0ge1xcbiAgICAgICAgaW5qZWN0SW5kZXg6IDFcXG4gICAgfVxcbiAgICB0aGlzW3N5bWJvbE1hcC5tRm9sZEluZGV4XSA9IDFcXG59XFxuXFxuT2JqZWN0LmFzc2lnbihDYXRlZ29yaWVzSGVhZGVyLnByb3RvdHlwZSwge1xcbiAgICAvLyBPdmVycmlkZSDmnoTpgKDmlrnms5XvvIznm7jlvZPkuo4gZnVuY3Rpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gKC4uLikgPT4gey4uLn3vvIxuZXcgZnVuY3Rpb24oKSDnmoTml7blgJnkvJroh6rliqjmiafooYxcXG4gICAgY29uc3RydWN0b3I6IENhdGVnb3JpZXNIZWFkZXIsXFxuICAgIC8vIOWumuS5ieengeacieaWueazlVxcbiAgICBWRVJTSU9OOiAyMDIxMTIwMTE5MDAsXFxuICAgIGNoZWNrUGFyYW1zKCkge1xcbiAgICAgICAgaWYgKCF0aGlzW3N5bWJvbE1hcC5tTGF5b3V0XSkge1xcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi6K+36LCD55SoIGxheW91dChkKSDkvKDlhaXlvZPliY3nlYzpnaJcXFwiKVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKCEodGhpc1tzeW1ib2xNYXAuc3JjXSB8fCB0aGlzW3N5bWJvbE1hcC50cnVlX3VybF0pKSB7XFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLor7fosIPnlKggdHJ1ZVVybCh1cmwpIOS8oOWFpeW9k+WJjeWIhuexu+eahOmTvuaOpeaIluiwg+eUqCBodG1sKG1IdG1sKSDkvKDlhaXlvZPliY3liIbnsbvpobXpnaLnmoTmupDnoIFcXFwiKVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKCF0aGlzW3N5bWJvbE1hcC5tUGFnZV0pIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuivt+iwg+eUqCBwYWdlKG1QYWdlKSDkvKDlhaXlvZPliY3pobXmlbBcXFwiKVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XS5sZW5ndGggPCAxKSB7XFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLor7fosIPnlKjnm7jlhbPmlrnms5XkvKDlhaXlrprkvY3op4TliJlcXFwiKVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKCF0aGlzW3N5bWJvbE1hcC5tRm9sZF0pIHtcXG4gICAgICAgICAgICB0aGlzW3N5bWJvbE1hcC5tRm9sZF0gPSAnMCdcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgbGF5b3V0KG1MYXlvdXQpIHtcXG4gICAgICAgIHRoaXNbc3ltYm9sTWFwLm1MYXlvdXRdID0gbUxheW91dFxcbiAgICAgICAgcmV0dXJuIHRoaXNcXG4gICAgfSxcXG4gICAgdHJ1ZVVybCh1cmwpIHtcXG4gICAgICAgIHRoaXNbc3ltYm9sTWFwLnRydWVfdXJsXSA9IHVybFxcbiAgICAgICAgcmV0dXJuIHRoaXNcXG4gICAgfSxcXG4gICAgcGFnZShtUGFnZSkge1xcbiAgICAgICAgaWYgKHR5cGVvZiAobVBhZ2UpID09PSAnc3RyaW5nJykge1xcbiAgICAgICAgICAgIG1QYWdlID0gcGFyc2VJbnQobVBhZ2UpXFxuICAgICAgICB9XFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5tUGFnZV0gPSBtUGFnZVxcbiAgICAgICAgcmV0dXJuIHRoaXNcXG4gICAgfSxcXG4gICAgaHRtbChtU3JjKSB7XFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5zcmNdID0gbVNyY1xcbiAgICAgICAgcmV0dXJuIHRoaXNcXG4gICAgfSxcXG4gICAgbGlzdChydWxlKSB7XFxuICAgICAgICBpZiAodGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdLmxlbmd0aCA+IDApIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcImxpc3QocnVsZSkgYWRkKHJ1bGVPYmopIOWPquiDveS6jOmAieS4gO+8gVxcXCIpXFxuICAgICAgICB9XFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF0gPSBbe31dXFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF0ubGlzdFJ1bGUgPSBydWxlXFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF1bJ+S4gOe6p+WIhuexuyddID0gcnVsZVxcbiAgICAgICAgcmV0dXJuIHRoaXNcXG4gICAgfSxcXG4gICAgc3ViTGlzdChydWxlKSB7XFxuICAgICAgICBpZiAodGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdLmxlbmd0aCA+IDEpIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcInN1Ykxpc3QocnVsZSkgYWRkKHJ1bGVPYmopIOWPquiDveS6jOmAieS4gO+8gVxcXCIpXFxuICAgICAgICB9XFxuICAgICAgICBpZiAoIXRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XVswXSB8fCAoIXRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XVswXS5saXN0UnVsZSAmJiAhdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdWyfkuIDnuqfliIbnsbsnXSkpIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuivt+WFiOiwg+eUqCBsaXN0KHJ1bGUpIOaIliDkuIDnuqfliIbnsbsocnVsZSkg5a6a5L2N5LiA57qn5YiG57G7XFxcIilcXG4gICAgICAgIH1cXG4gICAgICAgIHRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XVswXS5zdWJMaXN0UnVsZSA9IHJ1bGVcXG4gICAgICAgIHRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XVswXVsn5a2Q5YiG57G7J10gPSBydWxlXFxuICAgICAgICByZXR1cm4gdGhpc1xcbiAgICB9LFxcbiAgICB0aXRsZShydWxlKSB7XFxuICAgICAgICBpZiAodGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdLmxlbmd0aCA+IDEpIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcInRpdGxlKHJ1bGUpIGFkZChydWxlT2JqKSDlj6rog73kuozpgInkuIDvvIFcXFwiKVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKCF0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF0gfHwgKCF0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF0ubGlzdFJ1bGUgJiYgIXRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XVswXVsn5LiA57qn5YiG57G7J10pKSB7XFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLor7flhYjosIPnlKggbGlzdChydWxlKSDmiJYg5LiA57qn5YiG57G7KHJ1bGUpIOWumuS9jeS4gOe6p+WIhuexu1xcXCIpXFxuICAgICAgICB9XFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF0udGl0bGVSdWxlID0gcnVsZVxcbiAgICAgICAgdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdWyfliIbnsbvmoIfpopgnXSA9IHRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XVswXS50aXRsZVJ1bGVcXG4gICAgICAgIHJldHVybiB0aGlzXFxuICAgIH0sXFxuICAgIHVybChydWxlKSB7XFxuICAgICAgICBpZiAodGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdLmxlbmd0aCA+IDEpIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcInVybChydWxlKSBhZGQocnVsZU9iaikg5Y+q6IO95LqM6YCJ5LiA77yBXFxcIilcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICghdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdIHx8ICghdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdLmxpc3RSdWxlICYmICF0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF1bJ+S4gOe6p+WIhuexuyddKSkge1xcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi6K+35YWI6LCD55SoIGxpc3QocnVsZSkg5oiWIOS4gOe6p+WIhuexuyhydWxlKSDlrprkvY3kuIDnuqfliIbnsbtcXFwiKVxcbiAgICAgICAgfVxcbiAgICAgICAgdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdLnVybFJ1bGUgPSBydWxlXFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF1bMF1bJ+WIhuexu+mTvuaOpSddID0gdGhpc1tzeW1ib2xNYXAucnVsZU9iakxpc3RdWzBdLnVybFJ1bGVcXG4gICAgICAgIHJldHVybiB0aGlzXFxuICAgIH0sXFxuICAgIC8qKlxcbiAgICAgKiDmmK/lkKblvIDlkK/mipjlj6Dlip/og71cXG4gICAgICpcXG4gICAgICogQHBhcmFtIGVuYWJsZWQgdHJ1ZSDooajnpLrlvIDlkK/vvIxmYWxzZSDooajnpLrnpoHnlKhcXG4gICAgICogQHJldHVybnMge0NhdGVnb3JpZXNIZWFkZXJ9XFxuICAgICAqL1xcbiAgICBmb2xkSW5uZXIoZW5hYmxlZCkge1xcbiAgICAgICAgaWYgKCEodHlwZW9mIChlbmFibGVkKSA9PT0gJ2Jvb2xlYW4nKSkge1xcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi6K+35Lyg5YWlIHRydWUg5oiWIGZhbHNlIOihqOekuuW8gOWQr+aIluWFs+mXreaKmOWPoOWKn+iDve+8gVxcXCIpXFxuICAgICAgICB9XFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5tRm9sZElubmVyRW5hYmxlXSA9IGVuYWJsZWRcXG4gICAgICAgIHJldHVybiB0aGlzXFxuICAgIH0sXFxuICAgIC8qKlxcbiAgICAgKiDku47nrKwgaW5kZXgg6KGM5byA5aeL5oqY5Y+gXFxuICAgICAqXFxuICAgICAqIEBwYXJhbSBpbmRleCDlvIDlp4vmipjlj6DnmoTooYzmlbBcXG4gICAgICogQHJldHVybnMge0NhdGVnb3JpZXNIZWFkZXJ9XFxuICAgICAqL1xcbiAgICBmb2xkSW5kZXgoaW5kZXgpIHtcXG4gICAgICAgIGlmICghKHR5cGVvZiAoaW5kZXgpID09PSAnbnVtYmVyJykpIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuW8gOWni+aKmOWPoOihjOivt+S8oOWFpeaVsOWtl++8gVxcXCIpXFxuICAgICAgICB9XFxuICAgICAgICBpZiAoaW5kZXggPCAxKSB7XFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLlvIDlp4vmipjlj6DooYzor7fkvKDlhaXlpKfkuo4gMCDnmoTmlbTmlbDvvIFcXFwiKVxcbiAgICAgICAgfVxcbiAgICAgICAgdGhpc1tzeW1ib2xNYXAubUZvbGRJbmRleF0gPSBpbmRleCB8fCAxO1xcbiAgICAgICAgcmV0dXJuIHRoaXNcXG4gICAgfSxcXG4gICAgLyoqXFxuICAgICAqIOaKmOWPoOaMiemSrueahOeVjOmdolxcbiAgICAgKlxcbiAgICAgKiBAcGFyYW0gbGF5b3V0IOS4jiBkLnB1c2gg57uT5p6E5LiA6Ie077yMXFxuICAgICAqICAgICAgICDkvovvvJp7IHRpdGxlOlxcXCLmoIfpopgxXFxcIiwgdXJsOlxcXCJ4eHhcXFwiLCBjb2xfdHlwZTpcXFwic2Nyb2xsX2J1dHRvblxcXCIgfTtcXG4gICAgICogICAgICAgIOWPguaVsOmHh+eUqOWPr+mAieimhuebluaooeW8j++8jOS4jeWGmeeahOWPguaVsOWImeS9v+eUqOm7mOiupDtcXG4gICAgICogICAgICAgIOavlOWmguS8oOWFpSB7IGNvbF90eXBlOlxcXCJ0ZXh0XzFcXFwiIH3vvIzpgqPmnIDnu4jnu5PmnpzlsLHmmK8geyB0aXRsZTpcXFwi5qCH6aKYMVxcXCIsIHVybDpcXFwieHh4XFxcIiwgY29sX3R5cGU6XFxcInRleHRfMVxcXCIgfVxcbiAgICAgKiBAcmV0dXJucyB7Q2F0ZWdvcmllc0hlYWRlcn1cXG4gICAgICovXFxuICAgIGZvbGRMYXlvdXQobGF5b3V0KSB7XFxuICAgICAgICBpZiAodHlwZW9mIGxheW91dCA9PT0gJ29iamVjdCcpIHtcXG4gICAgICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKGxheW91dClcXG4gICAgICAgICAgICBsZXQgaW5qZWN0SW5kZXggPSBsYXlvdXQuaW5qZWN0SW5kZXggfHwgbGF5b3V0Wyfmipjlj6DmjInpkq7mj5LlhaXooYwnXVxcbiAgICAgICAgICAgIGlmIChsYXlvdXQudGl0bGUgfHwgbGF5b3V0LnVybCB8fCBsYXlvdXQuY29sX3R5cGUgfHwgaW5qZWN0SW5kZXgpIHtcXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldXFxuICAgICAgICAgICAgICAgICAgICB0aGlzW3N5bWJvbE1hcC5tRm9sZExheW91dF1ba2V5XSA9IGxheW91dFtrZXldO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLor7fkvKDlhaXmraPnoa7nmoTmipjlj6DnlYzpnaLlhYPntKDvvIFcXFwiKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAvLyBpbmplY3RJbmRleCDmipjlj6DmjInpkq7mj5LlhaXnrKwgaW5qZWN0SW5kZXgg6KGMXFxuICAgICAgICAgICAgaWYgKGluamVjdEluZGV4KSB7XFxuICAgICAgICAgICAgICAgIGlmICghKHR5cGVvZiAoaW5qZWN0SW5kZXgpID09PSAnbnVtYmVyJykpIHtcXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi5oqY5Y+g5oyJ6ZKu5o+S5YWl6KGM6K+35Lyg5YWl5pWw5a2X77yBXFxcIilcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoaW5qZWN0SW5kZXggPCAxKSB7XFxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuaKmOWPoOaMiemSruaPkuWFpeihjOivt+S8oOWFpeWkp+S6jiAwIOeahOaVtOaVsO+8gVxcXCIpXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKGluamVjdEluZGV4ID4gdGhpc1tzeW1ib2xNYXAubUZvbGRJbmRleF0pIHtcXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi5oqY5Y+g5oyJ6ZKu5o+S5YWl6KGM5LiN5b6X5aSn5LqO5pi+56S65oqY5Y+g6KGM5pWw77yB6K+36LCD55SoIC5mb2xkSW5kZXgoaW5kZXgpIOaIliAu56ys5Yeg6KGM5byA5aeL5oqY5Y+gKGluZGV4KSDkvKDlhaXmraPnoa7nmoTmmL7npLrmipjlj6DooYzmlbBcXFwiKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHRoaXNbc3ltYm9sTWFwLm1Gb2xkTGF5b3V0XS5pbmplY3RJbmRleCA9IGluamVjdEluZGV4IHx8IDE7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuivt+S8oOWFpeato+ehrueahOaKmOWPoOeVjOmdouWFg+e0oO+8gVxcXCIpXFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgfSxcXG4gICAgLy8g5b2T5YmN5piv5ZCm5oqY5Y+gXFxuICAgIGZvbGQoaXNGb2xkKSB7XFxuICAgICAgICBpZiAodHlwZW9mIChpc0ZvbGQpID09PSAnc3RyaW5nJykge1xcbiAgICAgICAgICAgIGlzRm9sZCA9IGlzRm9sZCA9PT0gJzEnXFxuICAgICAgICB9XFxuICAgICAgICBpZiAoaXNGb2xkKSB7XFxuICAgICAgICAgICAgdGhpc1tzeW1ib2xNYXAubUZvbGRdID0gJzEnO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB0aGlzW3N5bWJvbE1hcC5tRm9sZF0gPSAnMCc7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gdGhpc1xcbiAgICB9LFxcbiAgICBjb2xvcihtQ29sb3IpIHtcXG4gICAgICAgIHRoaXNbc3ltYm9sTWFwLm1Db2xvcl0gPSBtQ29sb3JcXG4gICAgICAgIHJldHVybiB0aGlzXFxuICAgIH0sXFxuICAgIHRhZyhtVGFnKSB7XFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5tVGFnXSA9IG1UYWdcXG4gICAgICAgIHJldHVybiB0aGlzXFxuICAgIH0sXFxuICAgIGFkZChydWxlT2JqKSB7XFxuICAgICAgICAvLyBsb2coJC5zdHJpbmdpZnkocnVsZU9iaikpXFxuICAgICAgICBpZiAocnVsZU9iai5jb25zdHJ1Y3RvciA9PT0gQXJyYXkpIHtcXG4gICAgICAgICAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF0gPSB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF0uY29uY2F0KHJ1bGVPYmopXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHRoaXNbc3ltYm9sTWFwLnJ1bGVPYmpMaXN0XS5wdXNoKHJ1bGVPYmopXFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgfSxcXG4gICAgZXZhbEpTUnVsZShpdGVtLCBqc1J1bGUpIHtcXG4gICAgICAgIGxldCBydWxlID0ganNSdWxlLnJlcGxhY2UoXFxcIkBqczpcXFwiLCBcXFwiXFxcIilcXG4gICAgICAgIHJ1bGUgPSBydWxlLnRyaW0oKVxcbiAgICAgICAgLy8gbG9nKCQuc3RyaW5naWZ5KHJ1bGUpKVxcbiAgICAgICAgbGV0IGlucHV0ID0gaXRlbVxcbiAgICAgICAgaWYgKHJ1bGUuc3RhcnRzV2l0aChcXFwiKFxcXCIpKSB7XFxuICAgICAgICAgICAgZXZhbCgncmVzdWx0ID0gJyArIHJ1bGUpXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIC8qKlxcbiAgICAgICAgICAgICAqIOi/mOWOn+aIkCAkLnRvU3RyaW5nKC4uLikg55qE5pyA57uI57uT5p6c77yM6L6+5Yiw5pyA57uI5aSE55CG5pa55byP6Lef5LiK6Z2i55qEIGlmIOS4gOiHtOeahOebrueahFxcbiAgICAgICAgICAgICAqL1xcbiAgICAgICAgICAgIGV2YWwoJ3Jlc3VsdCA9ICcgKyAnKCgpID0+IHsnICsgcnVsZSArICd9KSgpJylcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiAocmVzdWx0IHx8ICcnKVxcbiAgICB9LFxcbiAgICBnZXRUaXRsZShzcmMsIGNhdGVnb3J5KSB7XFxuICAgICAgICBsZXQgdGl0bGUgPSAnJ1xcbiAgICAgICAgbGV0IHRpdGxlUnVsZSA9IGNhdGVnb3J5LnRpdGxlUnVsZSB8fCAnYSYmVGV4dCdcXG4gICAgICAgIGlmICh0aXRsZVJ1bGUuc3RhcnRzV2l0aChcXFwiQGpzOlxcXCIpKSB7XFxuICAgICAgICAgICAgdGl0bGUgPSB0aGlzLmV2YWxKU1J1bGUoc3JjLCB0aXRsZVJ1bGUpXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHRpdGxlID0gcGFyc2VEb21Gb3JIdG1sKHNyYywgdGl0bGVSdWxlKVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIHRpdGxlIHx8IFxcXCJcXFwiO1xcbiAgICB9LFxcbiAgICBnZXRVcmwoc3JjLCBjYXRlZ29yeSkge1xcbiAgICAgICAgbGV0IHVybCA9ICcnXFxuICAgICAgICBsZXQgdXJsUnVsZSA9IGNhdGVnb3J5LnVybFJ1bGUgfHwgJ2EmJmhyZWYnXFxuICAgICAgICBpZiAodHlwZW9mIHVybFJ1bGUgPT09ICdvYmplY3QnKSB7XFxuICAgICAgICAgICAgbGV0IG1VcmxSdWxlID0gdXJsUnVsZS5ydWxlIHx8IHVybFJ1bGVbJ+ino+aekOinhOWImSddIHx8ICdhJiZocmVmJztcXG4gICAgICAgICAgICBpZiAobVVybFJ1bGUuc3RhcnRzV2l0aChcXFwiQGpzOlxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIHVybCA9IHRoaXMuZXZhbEpTUnVsZShzcmMsIG1VcmxSdWxlKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2UgPSBwYXJzZURvbTtcXG4gICAgICAgICAgICAgICAgaWYgKHVybFJ1bGUucGFyc2VPcHRpb24pIHtcXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodXJsUnVsZS5wYXJzZU9wdGlvbikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcInBhcnNlRG9tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJwZFxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlID0gcGFyc2VEb207XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcInBhcnNlRG9tRm9ySHRtbFxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwicGRmaFxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlID0gcGFyc2VEb21Gb3JIdG1sO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZSA9IHBhcnNlRG9tO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHVybFJ1bGVbXFxcIuino+aekOaWueazlVxcXCJdKSB7XFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHVybFJ1bGVbXFxcIuino+aekOaWueazlVxcXCJdKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwicGFyc2VEb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcInBkXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2UgPSBwYXJzZURvbTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwicGFyc2VEb21Gb3JIdG1sXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJwZGZoXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2UgPSBwYXJzZURvbUZvckh0bWw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlID0gcGFyc2VEb207XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdXJsID0gcGFyc2Uoc3JjLCBtVXJsUnVsZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmICh1cmxSdWxlLmRlYWxVcmwpIHtcXG4gICAgICAgICAgICAgICAgdXJsID0gdXJsUnVsZS5kZWFsVXJsKHVybClcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHVybFJ1bGVbJ+S6jOasoeWkhOeQhiddKSB7XFxuICAgICAgICAgICAgICAgIHVybCA9IHVybFJ1bGVbJ+S6jOasoeWkhOeQhiddKHVybClcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGlmICh1cmxSdWxlLnN0YXJ0c1dpdGgoXFxcIkBqczpcXFwiKSkge1xcbiAgICAgICAgICAgICAgICB1cmwgPSB0aGlzLmV2YWxKU1J1bGUoc3JjLCB1cmxSdWxlKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB1cmwgPSBwYXJzZURvbShzcmMsIHVybFJ1bGUpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiB1cmwgfHwgXFxcIlxcXCI7XFxuICAgIH0sXFxuICAgIGJ1aWxkKCkge1xcbiAgICAgICAgLy8g5qOA5rWL5piv5ZCm5Lyg5YWl6ZyA6KaB55qE5Y+C5pWwXFxuICAgICAgICB0aGlzLmNoZWNrUGFyYW1zKClcXG4gICAgICAgIC8vIOavj+S4gOS4quWIhuexu+eahOWUr+S4gOagh+ivhlxcbiAgICAgICAgbGV0IG1UYWcgPSB0aGlzW3N5bWJvbE1hcC5tVGFnXSB8fCBcXFwiXFxcIlxcbiAgICAgICAgLy/nv7vpobUg6ZyA6KaB5qC55o2u5a6e6ZmF5pu/5o2iXFxuICAgICAgICBjb25zdCBodG1sID0gdGhpc1tzeW1ib2xNYXAuc3JjXSB8fCByZXF1ZXN0KHRoaXNbc3ltYm9sTWFwLnRydWVfdXJsXSlcXG4gICAgICAgIGNvbnN0IGVtcHR5ID0gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAvL+iOt+WPluWIl+ihqFxcbiAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IFtdXFxuICAgICAgICB0aGlzW3N5bWJvbE1hcC5ydWxlT2JqTGlzdF0ubWFwKHJ1bGVPYmogPT4ge1xcbiAgICAgICAgICAgIGxldCBsaXN0ID0gW11cXG4gICAgICAgICAgICBsZXQgbGlzdFJ1bGUgPSBydWxlT2JqLmxpc3RSdWxlIHx8IHJ1bGVPYmpbXFxcIuS4gOe6p+WIhuexu1xcXCJdXFxuICAgICAgICAgICAgaWYgKGxpc3RSdWxlLnN0YXJ0c1dpdGgoXFxcIkBqczpcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAvLyBsb2coJC5zdHJpbmdpZnkobGlzdFJ1bGUpKVxcbiAgICAgICAgICAgICAgICBsaXN0ID0gdGhpcy5ldmFsSlNSdWxlKGh0bWwsIGxpc3RSdWxlKVxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGxpc3QgPSBwYXJzZURvbUZvckFycmF5KGh0bWwsIGxpc3RSdWxlKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAvLyBsb2cobGlzdClcXG4gICAgICAgICAgICBsaXN0Lm1hcChjYXRlZ29yeSA9PiB7XFxuICAgICAgICAgICAgICAgIGNhdGVnb3JpZXMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICBsaXN0OiBjYXRlZ29yeSxcXG4gICAgICAgICAgICAgICAgICAgIHN1Ykxpc3RSdWxlOiBydWxlT2JqLnN1Ykxpc3RSdWxlIHx8IHJ1bGVPYmpbXFxcIuWtkOWIhuexu1xcXCJdLFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGVSdWxlOiBydWxlT2JqLnRpdGxlUnVsZSB8fCBydWxlT2JqW1xcXCLliIbnsbvmoIfpophcXFwiXSxcXG4gICAgICAgICAgICAgICAgICAgIHVybFJ1bGU6IHJ1bGVPYmoudXJsUnVsZSB8fCBydWxlT2JqW1xcXCLliIbnsbvpk77mjqVcXFwiXSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pXFxuXFxuICAgICAgICAvLyBsb2coJC5zdHJpbmdpZnkoY2F0ZWdvcmllcykpXFxuXFxuICAgICAgICBsZXQgaW5pdF9jYXRlID0gW11cXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjA7IGkrKykge1xcbiAgICAgICAgICAgIGluaXRfY2F0ZS5wdXNoKFxcXCIwXFxcIilcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGNvbnN0IGNhdGVfdGVtcF9qc29uID0gZ2V0TXlWYXIobVRhZyArIHRoaXMuVkFSTUFQLkNBVEVHT1JZLCBKU09OLnN0cmluZ2lmeShpbml0X2NhdGUpKVxcbiAgICAgICAgY29uc3QgY2F0ZV90ZW1wID0gSlNPTi5wYXJzZShjYXRlX3RlbXBfanNvbilcXG5cXG4gICAgICAgIGlmICh0aGlzW3N5bWJvbE1hcC5tUGFnZV0gPT09IDEpIHtcXG5cXG4gICAgICAgICAgICBjYXRlZ29yaWVzLmZvckVhY2goKGNhdGVnb3J5LCBpbmRleCkgPT4ge1xcblxcbiAgICAgICAgICAgICAgICAvLyDmipjlj6AgVUlcXG4gICAgICAgICAgICAgICAgaWYgKHRoaXNbc3ltYm9sTWFwLm1Gb2xkSW5uZXJFbmFibGVdICYmIHRoaXNbc3ltYm9sTWFwLm1Gb2xkTGF5b3V0XS5pbmplY3RJbmRleCA9PT0gKGluZGV4KzEpKSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgZm9sZExheW91dCA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGhpc1tzeW1ib2xNYXAubUZvbGRMYXlvdXRdLnRpdGxlIHx8ICh0aGlzW3N5bWJvbE1hcC5tRm9sZF0gPT09ICcxJyA/ICfigJzigJzigJ3igJ08Yj48c3BhbiBzdHlsZT1cXFwiY29sb3I6ICNGRjAwMDBcXFwiPuKIqDwvc3Bhbj48L2I+JyA6ICfigJzigJzigJ3igJ08Yj48c3BhbiBzdHlsZT1cXFwiY29sb3I6ICMxYWFkMTlcXFwiPuKIpzwvc3Bhbj48L2I+JyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB0aGlzW3N5bWJvbE1hcC5tRm9sZExheW91dF0udXJsIHx8ICQoXFxcImhpa2VyOi8vZW1wdHkjbm9IaXN0b3J5I1xcXCIpLmxhenlSdWxlKChwYXJhbXMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIocGFyYW1zLm1UYWcgKyBwYXJhbXMuVkFSTUFQLkZPTEQsIGdldE15VmFyKHBhcmFtcy5tVGFnICsgcGFyYW1zLlZBUk1BUC5GT0xELCBwYXJhbXMuaXNGb2xkKSA9PT0gJzEnID8gJzAnIDogJzEnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UYWc6IG1UYWcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRm9sZDogdGhpc1tzeW1ib2xNYXAubUZvbGRdLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQVJNQVA6IHRoaXMuVkFSTUFQXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IHRoaXNbc3ltYm9sTWFwLm1Gb2xkTGF5b3V0XS5jb2xfdHlwZSB8fCBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB0aGlzW3N5bWJvbE1hcC5tTGF5b3V0XS5wdXNoKGZvbGRMYXlvdXQpXFxuICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgLy/lhbfkvZPliJfooajkuIvnmoTliIbnsbtcXG4gICAgICAgICAgICAgICAgbGV0IHN1Yl9jYXRlZ29yaWVzID0gW107XFxuICAgICAgICAgICAgICAgIGlmIChjYXRlZ29yeS5zdWJMaXN0UnVsZS5zdGFydHNXaXRoKFxcXCJAanM6XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgIHN1Yl9jYXRlZ29yaWVzID0gdGhpcy5ldmFsSlNSdWxlKGNhdGVnb3J5Lmxpc3QsIGNhdGVnb3J5LnN1Ykxpc3RSdWxlKVxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMgPSBwYXJzZURvbUZvckFycmF5KGNhdGVnb3J5Lmxpc3QsIGNhdGVnb3J5LnN1Ykxpc3RSdWxlKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCAodGhpc1tzeW1ib2xNYXAubUZvbGRJbmRleF0gfHwgMSkpIHtcXG4gICAgICAgICAgICAgICAgICAgIHN1Yl9jYXRlZ29yaWVzLmZvckVhY2goKGl0ZW0sIGtleSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IHRoaXMuZ2V0VGl0bGUoaXRlbSwgY2F0ZWdvcnkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IHRoaXMuZ2V0VXJsKGl0ZW0sIGNhdGVnb3J5KVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbc3ltYm9sTWFwLm1MYXlvdXRdLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZToga2V5LnRvU3RyaW5nKCkgPT09IGNhdGVfdGVtcFtpbmRleF0gPyAn4oCc4oCc4oCd4oCdPGI+PGZvbnQgY29sb3I9JyArIHRoaXNbc3ltYm9sTWFwLm1Db2xvcl0gKyAnPicgKyB0aXRsZSArICcgPC9mb250PjwvYj4nIDogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCh1cmwpLmxhenlSdWxlKChwYXJhbXMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdfY2F0ZSA9IFtdXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmluZGV4ID09PSAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmNhdGVfdGVtcC5mb3JFYWNoKChjYXRlLCBpbmRleCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfY2F0ZS5wdXNoKGluZGV4ID09PSAwID8gcGFyYW1zLmtleS50b1N0cmluZygpIDogXFxcIjBcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuY2F0ZV90ZW1wW3BhcmFtcy5pbmRleF0gPSBwYXJhbXMua2V5LnRvU3RyaW5nKClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKHBhcmFtcy50YWcgKyBwYXJhbXMuVkFSTUFQLkNBVEVHT1JZLCBKU09OLnN0cmluZ2lmeShwYXJhbXMuaW5kZXggPT09IDAgPyBuZXdfY2F0ZSA6IHBhcmFtcy5jYXRlX3RlbXApKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIocGFyYW1zLnRhZyArIHBhcmFtcy5WQVJNQVAuVVJMLCBpbnB1dClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVfdGVtcDogY2F0ZV90ZW1wLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFSTUFQOiB0aGlzLlZBUk1BUCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZzogbVRhZyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleToga2V5LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogdGhpc1tzeW1ib2xNYXAubVBhZ2VdLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIHRoaXNbc3ltYm9sTWFwLm1MYXlvdXRdLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzW3N5bWJvbE1hcC5tRm9sZF0gPT09ICcwJykge1xcbiAgICAgICAgICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMuZm9yRWFjaCgoaXRlbSwga2V5KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gdGhpcy5nZXRUaXRsZShpdGVtLCBjYXRlZ29yeSlcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gdGhpcy5nZXRVcmwoaXRlbSwgY2F0ZWdvcnkpXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1tzeW1ib2xNYXAubUxheW91dF0ucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBrZXkudG9TdHJpbmcoKSA9PT0gY2F0ZV90ZW1wW2luZGV4XSA/ICfigJzigJzigJ3igJ08Yj48Zm9udCBjb2xvcj0nICsgdGhpc1tzeW1ib2xNYXAubUNvbG9yXSArICc+JyArIHRpdGxlICsgJyA8L2ZvbnQ+PC9iPicgOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKHVybCkubGF6eVJ1bGUoKHBhcmFtcykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmNhdGVfdGVtcFtwYXJhbXMuaW5kZXhdID0gcGFyYW1zLmtleS50b1N0cmluZygpXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihwYXJhbXMudGFnICsgcGFyYW1zLlZBUk1BUC5DQVRFR09SWSwgSlNPTi5zdHJpbmdpZnkocGFyYW1zLmNhdGVfdGVtcCkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihwYXJhbXMudGFnICsgcGFyYW1zLlZBUk1BUC5VUkwsIGlucHV0KVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZV90ZW1wOiBjYXRlX3RlbXAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQVJNQVA6IHRoaXMuVkFSTUFQLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnOiBtVGFnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiB0aGlzW3N5bWJvbE1hcC5tUGFnZV0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgdGhpc1tzeW1ib2xNYXAubUxheW91dF0ucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgIH0sXFxuXFxuICAgIOeVjOmdoihsYXlvdXQpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLmxheW91dChsYXlvdXQpXFxuICAgIH0sXFxuICAgIOWIhuexu+mTvuaOpSh0cnVlVXJsKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy50cnVlVXJsKHRydWVVcmwpO1xcbiAgICB9LFxcbiAgICDpobXnoIEocGFnZSkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucGFnZShwYWdlKTtcXG4gICAgfSxcXG4gICAg5rqQ56CBKGh0bWwpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLmh0bWwoaHRtbCk7XFxuICAgIH0sXFxuICAgIOWumuS9jeS4gOe6p+WIhuexuyhsaXN0KSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5saXN0KGxpc3QpO1xcbiAgICB9LFxcbiAgICDlrprkvY3lrZDliIbnsbsoc3ViTGlzdCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMuc3ViTGlzdChzdWJMaXN0KTtcXG4gICAgfSxcXG4gICAg5a6a5L2N5YiG57G75qCH6aKYKHRpdGxlKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy50aXRsZSh0aXRsZSk7XFxuICAgIH0sXFxuICAgIOWumuS9jeWIhuexu+mTvuaOpSh1cmwpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnVybCh1cmwpO1xcbiAgICB9LFxcbiAgICDlvIDlkK/lhoXnva7mipjlj6Dlip/og70oKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5mb2xkSW5uZXIodHJ1ZSk7XFxuICAgIH0sXFxuICAgIOWFs+mXreWGhee9ruaKmOWPoOWKn+iDvSgpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLmZvbGRJbm5lcihmYWxzZSk7XFxuICAgIH0sXFxuICAgIOesrOWHoOihjOW8gOWni+aKmOWPoChpbmRleCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9sZEluZGV4KGluZGV4KTtcXG4gICAgfSxcXG4gICAg5oqY5Y+g5oyJ6ZKu5qC35byPKGxheW91dCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9sZExheW91dChsYXlvdXQpXFxuICAgIH0sXFxuICAgIOaKmOWPoChmb2xkKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5mb2xkKGZvbGQpO1xcbiAgICB9LFxcbiAgICDpgInkuK3nmoTliIbnsbvpopzoibIoY29sb3IpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLmNvbG9yKGNvbG9yKTtcXG4gICAgfSxcXG4gICAg5ZSv5LiA5qCH6K+GKG1UYWcpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnRhZyhtVGFnKVxcbiAgICB9LFxcbiAgICDmt7vliqDliIbnsbvlrprkvY0ocnVsZU9iaikge1xcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkKHJ1bGVPYmopO1xcbiAgICB9LFxcbiAgICDlvIDlp4vmiZPpgKDliIbnsbsoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5idWlsZCgpO1xcbiAgICB9LFxcblxcbn0pXFxuJC5leHBvcnRzID0gbmV3IENhdGVnb3JpZXNIZWFkZXIoKTtcXG4kLmV4cG9ydHNcXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIumTvuaOpeWkhOeQhuW3peWFt1wiLFwicGF0aFwiOlwidXJsLXByb2Nlc3NvclwiLFwicnVsZVwiOlwiLyoqXFxuICog5pys5Zyw572R6aG15o+S5Lu26ZO+5o6lIGhpa2VyOi8vZmlsZXMvcnVsZXMvanMvVXJsUHJvY2Vzc29yLmpzXFxuICog5a2Q6aG16Z2i6ZO+5o6lIGhpa2VyOi8vcGFnZS91cmwtcHJvY2Vzc29yXFxuICog6YGT6ZW/5LuT5bqT6ZO+5o6lIGh0dHA6Ly9oaWtlci5ub2tpYS5wcmVzcy9oaWtlcnVsZS9ydWxlbGlzdC5qc29uP2lkPTI4NDlcXG4gKiDnoIHkupEgR2l0ZWUg6ZO+5o6lIGh0dHBzOi8vZ2l0ZWUuY29tL3JlYm9ybjAvSGlrZXJSdWxlcy9yYXcvbWFzdGVyL3BsdWdpbnMvVXJsUHJvY2Vzc29yLmpzXFxuICovXFxuZnVuY3Rpb24gVXJsUHJvY2Vzc29yKCkge1xcbiAgICB0aGlzLnBhcmFtcyA9IHt9XFxuICAgIHRoaXMucmVnZXhNYXAgPSBbXFxuICAgICAgICB7XFxuICAgICAgICAgICAgcmVnOiAnKHZvZHR5cGV8dmlkZW90KVxcXFxcXFxcL1xcXFxcXFxcdysnLFxcbiAgICAgICAgICAgIGV4ZWM6ICgpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyYW1zLnVybFxcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLy1cXFxcZCsuaHRtbC8sICctJyArIHRoaXMucGFyYW1zLnBhZ2UgKyAnLmh0bWwnKVxcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLygodm9kdHlwZXx2aWRlb3QpXFxcXC9cXFxcdyspLmh0bWwvLCAnJDEtJyArIHRoaXMucGFyYW1zLnBhZ2UgKyAnLmh0bWwnKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgcmVnOiAnXFxcXFxcXFwvP1tcXFxcXFxcXHdcXFxcXFxcXGRdKy0uKj8tLio/LS4qPy0uKj8tLio/LS4qPy0uKj8tXFxcXFxcXFxkKi0tLVxcXFxcXFxcZCouaHRtbCcsXFxuICAgICAgICAgICAgZXhlYzogKCkgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJhbXMudXJsXFxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXGQqKC0tLS5odG1sKS8sIHRoaXMucGFyYW1zLnBhZ2UgKyAnJDEnKVxcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLygtLS1cXFxcZCsuaHRtbCkvLCB0aGlzLnBhcmFtcy5wYWdlICsgJyQxJyk7IC8vIOaLvOaOpemhteeggVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgcmVnOiAnKChcXFxcXFxcXC92b2RcXFxcXFxcXC9zaG93KT8oXFxcXFxcXFwvYXJlYVxcXFxcXFxcL1tcXFxcXFxcXHdcXFxcXFxcXGQlXSspPyhcXFxcXFxcXC9ieVxcXFxcXFxcL1tcXFxcXFxcXHdcXFxcXFxcXGQlXSspPyhcXFxcXFxcXC9pZFxcXFxcXFxcL1xcXFxcXFxcZCspPyhcXFxcXFxcXC9sZXR0ZXJcXFxcXFxcXC9bXFxcXFxcXFx3XFxcXFxcXFxkJV0rKT8pKFxcXFxcXFxcL3BhZ2VcXFxcXFxcXC9cXFxcXFxcXGQrKT8oXFxcXFxcXFwveWVhclxcXFxcXFxcL1xcXFxcXFxcZCspP1xcXFxcXFxcLmh0bWwnLFxcbiAgICAgICAgICAgIGV4ZWM6ICgpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHJlZ0V4cCA9IC8oKFxcXFwvdm9kXFxcXC9zaG93KT8oXFxcXC9hcmVhXFxcXC9bXFxcXHdcXFxcZCVdKyk/KFxcXFwvYnlcXFxcL1tcXFxcd1xcXFxkJV0rKT8oXFxcXC9pZFxcXFwvXFxcXGQrKT8oXFxcXC9sZXR0ZXJcXFxcL1tcXFxcd1xcXFxkJV0rKT8pKFxcXFwvcGFnZVxcXFwvXFxcXGQrKT8oXFxcXC95ZWFyXFxcXC9cXFxcZCspP1xcXFwuaHRtbC9cXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyYW1zLnVybFxcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UocmVnRXhwLCAnJDEnICsgKFxcXCIvcGFnZS9cXFwiICsgdGhpcy5wYXJhbXMucGFnZSkgKyAnJDgnICsgXFxcIi5odG1sXFxcIilcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIF1cXG59XFxuXFxuT2JqZWN0LmFzc2lnbihVcmxQcm9jZXNzb3IucHJvdG90eXBlLCB7XFxuICAgIGNvbnN0cnVjdG9yOiBVcmxQcm9jZXNzb3IsXFxuICAgIGNoZWNrUGFyYW1zKCkge1xcbiAgICAgICAgaWYgKCF0aGlzLnBhcmFtcy51cmwpIHtcXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuivt+WFiOiwg+eUqCAuYmFzZVVybCh1cmwpIOS8oOWFpemTvuaOpei/m+ihjOWIneWni+WMliFcXFwiKVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKCF0aGlzLnBhcmFtcy5wYWdlKSB7XFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLor7flhYjosIPnlKggLnBhZ2UocGFnZSkg5Lyg5YWl6aG156CB6L+b6KGM5Yid5aeL5YyWIVxcXCIpXFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIGJhc2VVcmwodXJsKXtcXG4gICAgICAgIHRoaXMucGFyYW1zLnVybCA9IHVybFxcbiAgICAgICAgcmV0dXJuIHRoaXNcXG4gICAgfSxcXG4gICAgcGFnZShwYWdlKXtcXG4gICAgICAgIHRoaXMucGFyYW1zLnBhZ2UgPSBwYWdlXFxuICAgICAgICByZXR1cm4gdGhpc1xcbiAgICB9LFxcbiAgICBhZGRFeHRyYShyZWdFeHApIHtcXG4gICAgICAgIGlmIChyZWdFeHAuY29uc3RydWN0b3IgPT09IEFycmF5KSB7XFxuICAgICAgICAgICAgdGhpcy5yZWdleE1hcCA9IHRoaXMucmVnZXhNYXAuY29uY2F0KHJlZ0V4cClcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgdGhpcy5yZWdleE1hcC5wdXNoKHJlZ0V4cClcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiB0aGlzO1xcbiAgICB9LFxcbiAgICBkZWJ1ZygpIHtcXG4gICAgICAgIHRoaXMucGFyYW1zLmRlYnVnID0gdHJ1ZVxcbiAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgIH0sXFxuICAgIGV4ZWMoKSB7XFxuICAgICAgICB0aGlzLmNoZWNrUGFyYW1zKClcXG4gICAgICAgIGxldCB0cnVlX3VybCA9ICcnXFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucmVnZXhNYXAubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICBsZXQgcmVnT2JqID0gdGhpcy5yZWdleE1hcFtpXTtcXG4gICAgICAgICAgICBsZXQgdXJsRXhwID0gcmVnT2JqLnJlZztcXG4gICAgICAgICAgICBpZiAodHlwZW9mIHVybEV4cCA9PT0gJ3N0cmluZycpIHtcXG4gICAgICAgICAgICAgICAgdXJsRXhwID0gbmV3IFJlZ0V4cCh1cmxFeHApXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmICh1cmxFeHAudGVzdCh0aGlzLnBhcmFtcy51cmwpKSB7XFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhcmFtcy5kZWJ1Zykge1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKHVybEV4cC50b1N0cmluZygpKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHRydWVfdXJsID0gcmVnT2JqLmV4ZWMoKTtcXG4gICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHRydWVfdXJsKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHRydWVfdXJsO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJhbXMudXJsXFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIOiOt+WPluWkhOeQhue7k+aenCgpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLmV4ZWMoKVxcbiAgICB9LFxcbiAgICDpk77mjqUodXJsKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsKHVybClcXG4gICAgfSxcXG4gICAg6aG156CBKHBhZ2UpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2UocGFnZSlcXG4gICAgfSxcXG4gICAg5o+S5YWl5paw5aSE55CG6KeE5YiZKHJlZ0V4cCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkRXh0cmEocmVnRXhwKVxcbiAgICB9LFxcbiAgICDosIPor5XmqKHlvI8oKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5kZWJ1ZygpO1xcbiAgICB9XFxufSlcXG4kLmV4cG9ydHM9bmV3IFVybFByb2Nlc3NvcigpXFxuJC5leHBvcnRzXFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLlh73mlbBcIixcInBhdGhcIjpcImp4aHNcIixcInJ1bGVcIjpcInZhciBmZnR0ID0gJ013OGdpeUgxQ3FuVHozQjdWSGo3TVR6dmN1WElFcmdyMUQvUHVnRm1oT1d2RjZXVG5LVjU0TTF1VWNrTWx4bkxJVU1iWjdGaXFnTHVSV2Nid0dYaGIrNjdmU01CZHo1VnNmNnpQMWR2OWY0aFF4dG5zV0txQXU1Rlp4dkFaZUZ2OGtpK0FaUHZOc2QvMEpWUkJqVUhDNVFtdENrVmhsTS9rcG4vQkZXdFJyMEgvWkhRUXE0bDRKRE56WG5NWEEwbXl5dkxTTlpXYy9zSW4vdldTQUhVOWtBYmpVNHFTWnNTQXU5YnkwYk13ZENQRHNVNHBwc2tVMzlyQlNQRk5EQnpZeXZYc0pocnp0YWFibmV4V3o2NWNwY3gvSDM0bEVDanVwUDBvTENrbU9ETzRXWlhpMUMyR25BQStoMUk3WURkeXl2TFNOWldjL3NJbi92V1NBSFU5a0JVdjdnZDFRajVvUmFDVVU3cjJJMG1tRmFvRDNROVJwRGhtU2VueFVFSVA3K3pVVTFRVzAvMHl2U0tPTEQvd3JaRVZVY2E3bEQwbWZubUh1Q09QTGcxN1FDQzZ5SjlxSWN4bzNSaC9ZRk1QS2lCMXhvZUROY0NEOTdDczhRQndoZGJ1eDZ4ei9IdE9TbE1HdHU5L0FXbnI1dEkzYVg1K3g4VmNDVndKL3krU1h1OStsOTdXN0tjQVR5RS9BNGZ5OTYzWGdKWTJ6UzQ4RExTL2tpQlUzUTg3M0xseUJLNEs5US96N29CWm9UbGVwWXpkNmJuaHpLZ0RCajUvZlgxc0RLSEFCSXlNczRQcURCeTFFcG16dTNjWFJ2UEdGajF4bWc0c1lUdy9FcGF5eXZMU05aV2Mvc0luL3ZXU0FIVTlxcFJZd1BTVmFlazBTUStMb1ByR1AxMjhhRXFzc2lQSnJYWElHbllzeTNNbXdlUGU0MUhUSTZNaEpsQVZkK0YxVWtZN3dMVG5MNFFTN0dQSnNCdnZmWXAxeFdjZ1ZxRFdrUjdHb05PT01Od295Unk4Yk1QVFpKMnhlcVZDRWhYeUw0Q3N1cWJpbk5YZGRxb2xvWWVBT2txelZrWEQvVlM5MDNmQjJsRHVuMHBqVnpuSE5KUUZoZ2lhNlFMcTJxWmc5VStTVk9pWE95VmcybE5vdklOV3VXZmhjNytUeTdqWHpSNENYQXJjVXIySXRkdHpRdmo0QTAyMjladEJBWGoxQjJrOG9jbUNiVzErZko0K3hKVE9FZW5uQWVNMHpCTDdaZStXOU1GWnI5RW9PZW9Ub3E3VkVxbVVFQmRwS3dRenBzR3RHajlPTHlzMjY0aENJRjhGYzRkSWVPTndoUmp1VWkxTGZwbTJpMHN3SGVsRDFsb0Vlc0N5RDUwMUg3Ull6Q0ZtUHZuOHpuZXdwaGZiTkdBNUpQL2Z4b1JyU053K0pub09DU2dMdUpVZy8vWFN2RFVXTkNrNElHcjVZWFRPU3VPS0xldUxuY1o1MEg4SlJVN2ZDWT0nO1xcbnZhciBzc3l6ID0gJ1Rsb0dubmlrVGhyZnMvNWZETmxrNUNTc2JhR3RBSDdXL3VNWmp1WW9JdXBCNmJDb285Q290TFFIZlBJZEdnYmtieW5LcUwyYVVFMlh5NTU4WDJReEhZdFRVMDl2RCs0b2FDREl1U1pPN254RGJMZlJHZldqN3pxbCt5TWJ2RithSm9EL202UHNmdy9QeVlPQXAvWlZHZHJQemFDQnlmZDBITDVERlZTdytZRjJPQzQwVjhTUDlSeGRGS0tkckJ1UHhDV2R4VUNGckorMWxSeS9UVTNMQzg0QzR4eEVCaGd1ZDdSdEJwMHpaQXJxQkUwNitaM0p0RFAwZUZDei9ENVgwNDA5cVBISzNlMXkvTHVVZ2NjdXhwSG5qWUxFMUdqbFA4d1lBMmhRV2U3eVBuZ2dnUUJIdzMzL2d2YjN0dUNjeEVLVFdnbWFoL1IzMkFIOVpGOGpGN1dlbVQyNmxVaXpWWGUvc3BDZGhEZ0hSL3pVaE9ERDRQTzZnbEk4SlBoZHUrVndmUHlSTEcyRDdDVW8xTDZTSUYrMGZZZjBvVE9XTjEzVVBJVG81K3VaZC9XblFRTFU4Tll4L1dGQ1RoRW5rYnpsbjlZR3Q2MGZSeHNIKzh1TURGZ2FCaUMrejJTcGN4QjlnWjZHWHlwTFNYV2FqK3FFVWJHSktFeCtqSy92NWZucmtJaENkd05ia3A5ZFJrczZkbWxZbEJpZnpvV0Y4Umt1QzNycVB0b1NjQmtNT01adTdHaVZ0b0hFZEhVb3ptblVJZHJVMUxHSXFxOVduRzdYMmEzeUg4czY1bWpMdUxuZDNxMFU4ditMTVBuSEwyL0dqUXVUUUtWaCtSS0VQcUsvSmRyQ2hHTE5yamNIdkxIRGJIRXNockdadVFPZEVwaGJ4L1BraGt2YVl5NEsxTU84NFIxN2d1UnNLcy9WNm5pVVBhTCtYYlE3YzNmcUpTNFZISndsdWRKVERlMDJldWZmR0NtMFBKSVBsQU9nTEhuWDBpekpoQTZxNzM4UjJVd1FjV0JRakp0NzlhRitreXFTZHl0MVFQVlFWamFDM0lwUmY3UGdzRGhFSjdiaTluU2NseUl6Z0o5RENKNFQrOGRHMXhIaEt5WmFzVDdML3g5TGZyMU1nczhuQlpFUjJXOWF4N2lUa05LK1g1QUNVLy9wL1lvUC91QWFuRHRiM0QwaUtVVXVYRkgrSmJiMHgxUDMyMlMydzZCSjQ2bnVOSEJNSFRwVnVXd2haZVp6cmlHaDdxb095d0xXaUV4Qk1LeXhUR0xubUtoN3IwMy95WEtZV0lKbnBCTjJNTXljVkhSWko3UnVtSFY0Q0lzVnJxN2lSUDQ4ODIzUkpWdDlPdHlQN3V1YzN3QkJWM2tjWlV6YmJhWWRXQngxK0F1K09kMnU3bFI2am9PTDgxMG1jSm0vZjdKNVR2R1FQNkhHcGgxWUhIWDRDNzQ1M2E3dVZIcU9neWpqaDVFQmQ3MjBNRUJZMjNjK1RLcS96OVVwV0RET2c0OFpGbndTSWhGcWl0V2RpWmlxc2FZdU4wL1NYd2lLOEVHOWVRMjl1MlhESm9EVzRtbHd0Y1JPN3ZhWDVYY0ZzZ2Y0L21MVTA3bWknXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuoznuqdtby1tb3ZzLWl0ZW1cIixcInBhdGhcIjpcIm1vLW1vdnMtaXRlbVwiLFwicnVsZVwiOlwidmFyIGQgPSBbXTtcXG52YXIgaHRtbCA9IGdldFJlc0NvZGUoKTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+WIhuexu++8micgKyBwZGZoKGh0bWwsICcubW8tY29scy1sYXlzJiZsaSwyLS1zcGFuJiZUZXh0JykgK1xcbiAgICAgICAgJyB8ICcgKyBwZGZoKGh0bWwsICcubW8tY29scy1sYXlzJiZsaSwzLS1zcGFuJiZUZXh0JykgK1xcbiAgICAgICAgJyB8ICcgKyBwZGZoKGh0bWwsICcubW8tY29scy1sYXlzJiZsaSw0LS1zcGFuJiZUZXh0JykgK1xcbiAgICAgICAgJ1xcXFxuJyArIHBkZmgoaHRtbCwgJy5tby1jb2xzLWxheXMmJmxpJiZUZXh0JylcXG4gICAgICAgIC5zdWJzdHJpbmcoMCwgMTUpICtcXG4gICAgICAgICdcXFxcbicgKyBwZGZoKGh0bWwsICcubW8tY29scy1sYXlzJiZsaSwxJiZUZXh0JylcXG4gICAgICAgIC5zdWJzdHJpbmcoMCwgMTUpLFxcbiAgICBkZXNjOiAn5pu05paw5pe26Ze077yaJyArIHBkZmgoaHRtbCwgJy5tby1jb2xzLWxheXMmJmxpLDUmJlRleHQnKS5zdWJzdHJpbmcoMCwgMTUpLFxcbiAgICBpbWc6IHBkKGh0bWwsICcubW8tc2l0dS1waWNzJiZkYXRhLW9yaWdpbmFsJyksXFxuICAgIHVybDogTVlfVVJMLFxcbiAgICBjb2xfdHlwZTogJ21vdmllXzFfdmVydGljYWxfcGljX2JsdXInXFxufSk7XFxuXFxudmFyIOe6v+i3ryA9ICdib2R5JiYubW8tbW92cy1idG5zJ1xcbnZhciDpgInpm4YgPSAnYm9keSYmLm1vLW1vdnMtaXRlbSdcXG52YXIg57q/6Lev5ZCNID0gJ1RleHQnXFxudmFyIOmAiembhuWIl+ihqCA9ICd1bCYmbGknXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9lcmppP3J1bGU95qih5p2/wrdRJykpLnJ1bGUpXFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5pWw5a2X6aqM6K+B56CBXCIsXCJwYXRoXCI6XCJ5em1cIixcInJ1bGVcIjpcIndoaWxlICgv6L6T5YWl6aqM6K+B56CBfOezu+e7n+WuieWFqOmqjOivgS8udGVzdChodG1sKSkge1xcbiAgICBsZXQgaGVhZGVycyA9IHtcXG4gICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogTU9CSUxFX1VBLFxcbiAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBNWV9VUkxcXG4gICAgfVxcbiAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2p4aHM/cnVsZT3mqKHmnb/Ct1EnKSkucnVsZSk7XFxuICAgIGV2YWxQcml2YXRlSlMoc3N5eik7XFxuXFxuICAgIGxldCB2Y29kZSA9IGdldFZDb2RlMihNWV9IT01FICsgJy9pbmRleC5waHAvdmVyaWZ5L2luZGV4Lmh0bWw/JywgSlNPTi5zdHJpbmdpZnkoaGVhZGVycyksICdudW0nKTtcXG4gICAgZmV0Y2goTVlfSE9NRSArIGh0bWwubWF0Y2goL1xcXFwvaW5kZXgucGhwLio/dmVyaWZ5PS8pWzBdICsgSlNPTi5wYXJzZSh2Y29kZSkucmV0LCB7XFxuICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxcbiAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgfSlcXG4gICAgdmFyIHl6ID0gTVlfVFlQRSA9PSAnaG9tZScgPyB0cnVlX3VybCA6IE1ZX1VSTFxcbiAgICBsb2coTVlfVFlQRSlcXG4gICAgaHRtbCA9IHJlcXVlc3QoeXosIHtcXG4gICAgICAgIC8vICAgaGVhZGVyczogaGVhZGVyc1xcbiAgICB9KVxcbn1cXG5pZiAoL+mikee5geaTjeS9nC8udGVzdChodG1sKSkge1xcbiAgICBkLnB1c2goe1xcbiAgICB0aXRsZTogJ+e9keermeaQnOe0ouaXtumXtOmXtOmalCcsXFxuICAgIGRlc2M6IFxcXCLkuIvmi4nph43or5VcXFwiXFxufSlcXG5cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuoznuqd5LXBsYXlMaXN0XCIsXCJwYXRoXCI6XCJ5LXBsYXlMaXN0XCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbnZhciBodG1sID0gZ2V0UmVzQ29kZSgpXFxuXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IHBkZmgoaHRtbCwgJy5tb2R1bGUtaW5mby1pdGVtLDMmJlRleHQnKVxcbiAgICAgICAgLnN1YnN0cmluZygwLCAxOCkgK1xcbiAgICAgICAgJ1xcXFxuJyArXFxuICAgICAgICBwZGZoKGh0bWwsICcubW9kdWxlLWluZm8taXRlbSwxJiZUZXh0JylcXG4gICAgICAgIC5zdWJzdHJpbmcoMCwgMTgpICtcXG4gICAgICAgICdcXFxcbicgK1xcbiAgICAgICAgcGRmaChodG1sLCAnLm1vZHVsZS1pbmZvLWl0ZW0sNCYmVGV4dCcpLFxcbiAgICBpbWc6IHBkKGh0bWwsICcubGF6eWxvYWQmJmRhdGEtb3JpZ2luYWx8fHNyYycpICtcXG4gICAgICAgICdAUmVmZXJlcj0nLFxcbiAgICB1cmw6IE1ZX1VSTCxcXG4gICAgZGVzYzogcGRmaChodG1sLCAnLm1vZHVsZS1pbmZvLWl0ZW0sNXx8Lm1vZHVsZS1pbmZvLWl0ZW0mJlRleHQnKSxcXG4gICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpY19ibHVyJ1xcbn0pO1xcblxcbnZhciDnur/ot68gPSAnI3ktcGxheUxpc3QmJnNwYW4nXFxudmFyIOmAiembhiA9ICdib2R5JiYubW9kdWxlLXBsYXktbGlzdCdcXG52YXIg57q/6Lev5ZCNID0gJ1RleHQnXFxudmFyIOmAiembhuWIl+ihqCA9ICdib2R5JiZhJ1xcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvZXJqaT9ydWxlPeaooeadv8K3UScpKS5ydWxlKVxcbnNldFJlc3VsdChkKTtcIn1dIiwiaWNvbiI6Imh0dHA6Ly9xMS5xbG9nby5jbi9nP2I9cXEmbms9NTY5NjE3MDc5JnM9NjQwIiwicHJveHkiOiIifQ==
Add Comment
Please, Sign In to add comment