Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@韩小圈APP@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoi6Z+p5bCP5ZyIQVBQIiwiYXV0aG9yIjoiemhhbyIsInVybCI6Imhpa2VyOi8vZW1wdHkjI2Z5cGFnZSIsInZlcnNpb24iOjEsImNvbF90eXBlIjoibW92aWVfMyIsImNsYXNzX25hbWUiOiIiLCJ0eXBlIjoidmlkZW8iLCJjbGFzc191cmwiOiIiLCJhcmVhX25hbWUiOiIiLCJhcmVhX3VybCI6IiIsInNvcnRfbmFtZSI6IiIsInllYXJfbmFtZSI6IiIsInNvcnRfdXJsIjoiIiwieWVhcl91cmwiOiIiLCJmaW5kX3J1bGUiOiJqczpcbnZhciBwYWdlID0gTVlfUEFHRVxudmFyIGQgPSBbXVxuXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2NsYScpKS5ydWxlKVxuXG5zZXRSZXN1bHQoZCkiLCJzZWFyY2hfdXJsIjoiaGlrZXI6Ly9lbXB0eSMjKiojI2Z5cGFnZSIsImdyb3VwIjoi8J+NjuinhumikSIsInNlYXJjaEZpbmQiOiJqczpcbnZhciBkID0gW11cbnZhciB1cmwgPSBcImh0dHBzOi8vaHhxYXBpLmhpeXVuLnR2L2FwaS9zZWFyY2gvczU/az1cIitNWV9VUkwuc3BsaXQoJyMjJylbMV0rXCImc3JlZmVyPXNlYXJjaF9oaXN0b3J5JnR5cGU9MiZwYWdlPVwiK01ZX1VSTC5zcGxpdCgnIyMnKVsyXVxudmFyIGh0bWwxMSA9ICQucmVxdWlyZShcImhhbnNodVwiKS5yZXExMSh1cmwpXG52YXIgbGlzdDExID0gaHRtbDExLnNlcmllc0xpc3Rcbmxpc3QxMS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgIGQucHVzaCh7XG4gICAgICAgIHRpdGxlOiBpdGVtLm5hbWUsXG4gICAgICAgIGltZzogaXRlbS5pbWFnZS50aHVtYixcbiAgICAgICAgdXJsOiBgaGlrZXI6Ly9wYWdlL2Vyamk/c2lkPSR7aXRlbS5zaWR9I2ltbWVyc2l2ZVRoZW1lI2BcbiAgICB9KVxufSlcbnNldFJlc3VsdChkKSIsImRldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJkZXRhaWxfZmluZF9ydWxlIjoiIiwic2RldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJzZGV0YWlsX2ZpbmRfcnVsZSI6IiIsInVhIjoibW9iaWxlIiwicHJlUnVsZSI6IiIsInBhZ2VzIjoiW3tcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLpn6nlsI/lnIjlh73mlbBcIixcInBhdGhcIjpcImhhbnNodVwiLFwicnVsZVwiOlwidmFyIGRldmljZV91aWQgPSBcXFwiZ2tYMllmMWtHbXVaUmltZmtRaVZcXFwiXFxudmFyIHVkaWQgPSBtZDUoZGV2aWNlX3VpZClcXG52YXIgam5pc2lnbjEgPSBcXFwiMzRGOVE1M3cvSEpXOEU2UVxcXCJcXG52YXIgdDEwID0gU3RyaW5nKE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSlcXG5jb25zdCBDcnlwdG9VdGlsID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL2Fzc2V0cy9jcnlwdG8tamF2YS5qc1xcXCIpO1xcblxcbnZhciBoZWFkZXIxID0ge1xcbiAgICBcXFwidmNcXFwiOiBcXFwiYV83MDAwXFxcIixcXG4gICAgXFxcInZuXFxcIjogXFxcIjYuMFxcXCIsXFxuICAgIFxcXCJ1a1xcXCI6IFxcXCJJVnVDOEZjSjAxaktMbndFRXRybkVDRTdoR090bG1wL01jajBpSC8wUHd3PVxcXCIsXFxuICAgIFxcXCJzaWduXFxcIjogXFxcInE5aEFzeCtOWFZXcklQeTBMdDV4MUMzbHlkZTZUZmdtRFpkTENNUXNVWUNTNmlMclRBNno5RWtHc2xrcmhOT0xDcmoyOHhSbE95aU8yRGNERnZwZzZzWDRtcGF4eEgrVll1NE1pWHVZelpjZU1PaHVtNUNrazJWL0dqVXFVMU5HTFJLdXdIcWRXcGI0Y3dmdzQ3T1gzdUtZVXNLc1hwMDl5aVd3aEF3dmFKYjNtKzZSODdhQkNLM0M1bmRjaXFhSFZleWJWV1NaaUFpNW5mOXBnWXkrcGFDSnBMWTc0eitQVTFrZzdJMGlBTURsZmNCMkFRRHcxWGZBVjBWTEpHTGVRWlQ1WDA1RDB3NEs2ZHhiaDAvVkpBTjl4TXpNOW9HcVZDNU04NVRkZzdibkVFTm5xbElONXdpUkZrL0RTZmU0NzF4SWdhd2hPSC9qRXZqZGV5aFdEWHBlRlV6eCtpb3VpK01JdzA4Z0pVQlR1bDdobmQrTU9yWTFXUjZNUWJqQUNjU1VHYTMxYkY1M3dTYkxTak83eGJYUUVnU1lwSm5Dak84YmxOZmVkRldiWkd3dGxPVWgrRmo0V3BNczNNZDRDQ0l3Zi9YRVBHL2xYT2FQcWs4c2JnPT1cXFwiXFxufVxcblxcbmZ1bmN0aW9uIEFFU19FbmNyeXB0KHdvcmQsIGtleWl2KSB7XFxuICAgIC8vY29uc3QgQ3J5cHRvVXRpbCA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9hc3NldHMvY3J5cHRvLWphdmEuanNcXFwiKTtcXG4gICAgbGV0IGtleSA9IENyeXB0b1V0aWwuRGF0YS5wYXJzZVVURjgoa2V5aXYuc3Vic3RyaW5nKDAsIDE2KSk7XFxuICAgIGxldCBpdiA9IENyeXB0b1V0aWwuRGF0YS5wYXJzZVVURjgoa2V5aXYuc3Vic3RyaW5nKDE2LCAzMikpO1xcbiAgICBsZXQgdXR0OERhdGEgPSBDcnlwdG9VdGlsLkRhdGEucGFyc2VVVEY4KHdvcmQpO1xcbiAgICBsZXQgZW5jcnlwdGVkID0gQ3J5cHRvVXRpbC5BRVMuZW5jcnlwdCh1dHQ4RGF0YSwga2V5LCB7XFxuICAgICAgICBtb2RlOiBcXFwiQUVTL0NCQy9QS0NTN1BhZGRpbmdcXFwiLFxcbiAgICAgICAgaXY6IGl2XFxuICAgIH0pO1xcbiAgICByZXR1cm4gZW5jcnlwdGVkLnRvQmFzZTY0KF9iYXNlNjQuTk9fV1JBUCk7XFxufVxcblxcbmZ1bmN0aW9uIEFFU19EZWNyeXB0KHdvcmQsIGtleWl2KSB7XFxuICAgIC8vY29uc3QgQ3J5cHRvVXRpbCA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9hc3NldHMvY3J5cHRvLWphdmEuanNcXFwiKTtcXG4gICAgbGV0IGtleSA9IENyeXB0b1V0aWwuRGF0YS5wYXJzZVVURjgoa2V5aXYuc3Vic3RyaW5nKDAsIDE2KSk7XFxuICAgIGxldCBpdiA9IENyeXB0b1V0aWwuRGF0YS5wYXJzZVVURjgoa2V5aXYuc3Vic3RyaW5nKDE2LCAzMikpO1xcbiAgICBsZXQgYmFzZTY0RGF0YSA9IENyeXB0b1V0aWwuRGF0YS5wYXJzZUJhc2U2NCh3b3JkKTtcXG4gICAgbGV0IGRlY3J5cHRlZCA9IENyeXB0b1V0aWwuQUVTLmRlY3J5cHQoYmFzZTY0RGF0YSwga2V5LCB7XFxuICAgICAgICBtb2RlOiBcXFwiQUVTL0NCQy9QS0NTN1BhZGRpbmdcXFwiLFxcbiAgICAgICAgaXY6IGl2XFxuICAgIH0pO1xcbiAgICByZXR1cm4gZGVjcnlwdGVkLnRvU3RyaW5nKCk7XFxufVxcblxcbmZ1bmN0aW9uIHJlcTExKHVybDEpIHtcXG4gICAgdmFyIGh0bWwxID0gSlNPTi5wYXJzZShyZXF1ZXN0KHVybDEsIHtcXG4gICAgICAgIGhlYWRlcnM6IGhlYWRlcjEsXFxuICAgICAgICBtZXRob2Q6IFxcXCJHRVRcXFwiXFxuICAgIH0pKTsgLy9sb2coaHRtbDEpXFxuICAgIHZhciBrZXlpdiA9IG1kNShtZDUoZGV2aWNlX3VpZCArIGh0bWwxLnRzKSArIGpuaXNpZ24xKTsgLy9sb2coa2V5aXYpXFxuICAgIHZhciBodG1sMiA9IEpTT04ucGFyc2UoQUVTX0RlY3J5cHQoaHRtbDEuZGF0YSwga2V5aXYpKTsgLy9sb2coaHRtbDIpXFxuICAgIHJldHVybiBodG1sMlxcbn1cXG5cXG4vL+W8ueW5leWHveaVsCBieSBjeVxcbmZ1bmN0aW9uIGZldGNoRGFubXVEYXRhKHBpZCkge1xcbiAgICBsZXQgcHJldklkID0gXFxcIjBcXFwiO1xcbiAgICBsZXQgZnJvbUF4aXMgPSBcXFwiMFxcXCI7XFxuICAgIGxldCBkYW5tdXN0ciA9IGA8P3htbCB2ZXJzaW9uPVxcXCIxLjBcXFwiIGVuY29kaW5nPVxcXCJVVEYtOFxcXCI/PlxcXFxuPGk+XFxcXG5gO1xcbiAgICB3aGlsZSAodHJ1ZSkge1xcbiAgICAgICAgdmFyIHVybCA9IFxcXCJodHRwczovL2h4cWFwaS5oaXl1bi50di9hcGkvZGFubXUvcGxheUl0ZW0vbGlzdD9waWQ9XFxcIisgcGlkICsgXFxcIiZwcmV2SWQ9XFxcIiArIHByZXZJZCArIFxcXCImZnJvbUF4aXM9XFxcIiArIGZyb21BeGlzICsgXFxcIiZ0b0F4aXM9NjAwMDAmb2Zmc2V0PTBcXFwiO1xcbiAgICAgICAgdmFyIGh0bWwgPSBKU09OLnBhcnNlKHJlcXVlc3QodXJsLCB7XFxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVyMSxcXG4gICAgICAgICAgICBtZXRob2Q6IFxcXCJHRVRcXFwiXFxuICAgICAgICB9KSk7IC8vbG9nKGh0bWwpXFxuICAgICAgICBwcmV2SWQgPSBodG1sLmxhc3RJZFxcbiAgICAgICAgZnJvbUF4aXMgPSBodG1sLm5leHRBeGlzXFxuICAgICAgICBsZXQgbGlzdHMgPSBodG1sLmRhbm11c1xcbiAgICAgICAgaWYgKGxpc3RzLmxlbmd0aCA9PSAwKSB7XFxuICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICB9XFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3RzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgbGV0IGRtMCA9IGxpc3RzW2ldLnQgLyAxMDAwO1xcbiAgICAgICAgICAgIGxldCBkbTEgPSAxO1xcbiAgICAgICAgICAgIGlmIChsaXN0c1tpXS50cCA9PT0gMikge1xcbiAgICAgICAgICAgICAgICAvLyDpobbnq6/lvLnluZVcXG4gICAgICAgICAgICAgICAgZG0xID0gNTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgLypcXG4gICAgICAgICAgICAvLyDlvLnluZXpopzoibIo6buY6K6kKVxcbiAgICAgICAgICAgIGNvbG9yID0gMTY3NzcyMTU7XFxuICAgICAgICAgICAgLy8g6aKc6Imy6K6+572u4oCU4oCU5Y+v6Ieq6KGM5L+u5pS55pu/5o2ibGVmdOS4unJpZ2h0KOWOn+adpeaYr+W3puWPs+a4kOWPmOeahOminOiJsu+8jOS9hnhtbOagvOW8j+acrOi6q+W5tuS4jeaUr+aMge+8jOaJgOS7peS6jOmAieS4gOWQp++8jGxlZnTkuIDoiKzpopzoibLmr5TovoPmt7HvvIxyaWdodOS4gOiIrOminOiJsuavlOi+g+a1hSlcXG4gICAgICAgICAgICBpZiAobGlzdHNbaV0udjJfY29sb3IpIHtcXG4gICAgICAgICAgICAgICAgY29sb3IgPSAobGlzdHNbaV0udjJfY29sb3IuY29sb3JfbGVmdC5yIDw8IDE2KSArIChsaXN0c1tpXS52Ml9jb2xvci5jb2xvcl9sZWZ0LmcgPDwgOCkgKyAobGlzdHNbaV0udjJfY29sb3IuY29sb3JfbGVmdC5iKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgKi9cXG4gICAgICAgICAgICBsZXQgZG0zID0gbGlzdHNbaV0uc2M7XFxuICAgICAgICAgICAgbGV0IGRtNSA9IGxpc3RzW2ldLmNvbjtcXG4gICAgICAgICAgICBpZiAoZG01LmluZGV4T2YoJzwnKSAhPSAtMSB8fCBkbTUuaW5kZXhPZignPicpICE9IC0xIHx8IGRtNS5pbmRleE9mKCcmJykgIT0gLTEgfHwgZG01LmluZGV4T2YoJ1xcXFx1MDAwMCcpICE9IC0xIHx8IGRtNS5pbmRleE9mKCdcXFxcYicpICE9IC0xKSB7XFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAvL+aXtumXtO+8jOmhtumDqOW8ueW5le+8jOWtl+S9k+Wkp+Wwj++8jOminOiJsu+8jDDvvIzlvLnluZXlhoXlrrlcXG4gICAgICAgICAgICBsZXQgdGVtcGRhdGEgPSBgPGQgcD1cXFwiJHtkbTB9LCR7ZG0xfSwyNSwke2RtM30sMFxcXCI+JHtkbTV9PC9kPlxcXFxuYDsgLy9sb2codGVtcGRhdGEpXFxuICAgICAgICAgICAgZGFubXVzdHIgKz0gdGVtcGRhdGE7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgZGFubXVzdHIgKz0gYDwvaT5gO1xcbiAgICB3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvZGFubXUueG1sJywgZGFubXVzdHIpO1xcbn1cXG5cXG5mdW5jdGlvbiBmZW5sZWkoZCwgdGl0bGVlLCB1cmxsLCBudW0pIHtcXG4gICAgcHV0TXlWYXIoXFxcInVybGxcXFwiICsgbnVtLCBTdHJpbmcodXJsbFswXSkpXFxuICAgIGQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIlxcbiAgICB9KVxcbiAgICB0aXRsZWUuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcXG4gICAgICAgIHZhciB1cmwgPSB1cmxsW2luZGV4XVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIoJ2luZGV4JyArIG51bSwgJzAnKSA9PSBpbmRleCA/IFxcXCLigJzigJxcXFwiICsgaXRlbSArIFxcXCLigJ3igJ1cXFwiIDogaXRlbSxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHVybCwgbnVtLCBpbmRleCkgPT4ge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcignaW5kZXgnICsgbnVtLCBpbmRleClcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3VybCcgKyBudW0sIHVybClcXG4gICAgICAgICAgICAgICAgaWYobnVtID09IFxcXCIxXFxcIil7XFxuICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKFxcXCJpbmRleDJcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihcXFwidXJsMlxcXCIpXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgfSwgdXJsLCBudW0sIGluZGV4KSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgICAgICB9KVxcbiAgICB9KVxcbn1cXG5cXG5mdW5jdGlvbiBmb3JtYXRUaW1lc3RhbXAodGltZXN0YW1wKSB7XFxuICAgIC8vIOe7n+S4gOWwhuaXtumXtOaIs+ino+aekOS4uuaVsOWtl1xcbiAgICB2YXIgdHMgPSBOdW1iZXIodGltZXN0YW1wKTtcXG4gICAgaWYgKGlzTmFOKHRzKSkge1xcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCJJbnZhbGlkIHRpbWVzdGFtcCBmb3JtYXRcXFwiKTtcXG4gICAgfVxcblxcbiAgICAvLyDliKTmlq3ml7bpl7TmiLPmmK/np5LnuqfvvIgxMOS9je+8iei/mOaYr+avq+enkue6p++8iDEz5L2N77yJXFxuICAgIHZhciBtaWxsaXMgPSB0cyA8IDFlMTIgPyB0cyAqIDEwMDAgOiB0cztcXG5cXG4gICAgLy8g5Yib5bu65pel5pyf5a+56LGhXFxuICAgIHZhciBkYXRlID0gbmV3IERhdGUobWlsbGlzKTtcXG5cXG4gICAgLy8g5qC85byP5YyW5pel5pyf5ZKM5pe26Ze077yM56Gu5L+d6KGl6Zu2XFxuICAgIHZhciBwYWQgPSAobnVtKSA9PiBTdHJpbmcobnVtKS5wYWRTdGFydCgyLCAnMCcpO1xcbiAgICByZXR1cm4gYCR7ZGF0ZS5nZXRGdWxsWWVhcigpfS0ke3BhZChkYXRlLmdldE1vbnRoKCkgKyAxKX0tJHtwYWQoZGF0ZS5nZXREYXRlKCkpfSBgICtcXG4gICAgICAgIGAke3BhZChkYXRlLmdldEhvdXJzKCkpfToke3BhZChkYXRlLmdldE1pbnV0ZXMoKSl9OiR7cGFkKGRhdGUuZ2V0U2Vjb25kcygpKX1gO1xcbn1cXG5cXG5mdW5jdGlvbiBzZXREZXNjKGQsIGRlc2MsIG51bSkge1xcbiAgICAvL2xvZyhkZXNjKVxcbiAgICBpZiAoZGVzYyA9PSB1bmRlZmluZWQpIHtcXG4gICAgICAgIHJldHVybjtcXG4gICAgfVxcbiAgICBkZXNjID0gZGVzYy5jb25zdHJ1Y3RvciA9PSBBcnJheSA/IGRlc2Muam9pbignPGJyPicpIDogZGVzYztcXG4gICAgaWYgKGRlc2MucmVwbGFjZSgvKDxicj58XFxcXHMrfDxcXFxcLz9wPnwmbmJzcDspL2csICcnKS5sZW5ndGggPT0gMCkge1xcbiAgICAgICAgcmV0dXJuO1xcbiAgICB9XFxuICAgIGNvbnN0IG1hcmsgPSAnZGVzYyc7XFxuICAgIG51bSA9IHR5cGVvZihudW0pID09ICd1bmRlZmluZWQnID8gNDUgOiBudW1cXG4gICAgZGVzYyA9IGRlc2Muc3RhcnRzV2l0aCgn44CA44CAJykgPyBkZXNjIDogJ+OAgOOAgCcgKyBkZXNjO1xcbiAgICBkZXNjID0gZGVzYy5yZXBsYWNlKC8nL2csIFxcXCImIzM5O1xcXCIpO1xcbiAgICBkZXNjID0gZGVzYy5yZXBsYWNlKC9cXFxcclxcXFxuL2csIFxcXCI8YnI+XFxcIik7XFxuICAgIGRlc2MgPSBkZXNjLnJlcGxhY2UoL1xcXFxyL2csIFxcXCI8YnI+XFxcIik7XFxuICAgIGRlc2MgPSBkZXNjLnJlcGxhY2UoL1xcXFxuL2csIFxcXCI8YnI+XFxcIik7XFxuXFxuICAgIGZ1bmN0aW9uIHN1YnN0cihzdHIsIG1heExlbmd0aCkge1xcbiAgICAgICAgbGV0IGxlbiA9IDA7XFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgIGlmIChzdHIuY2hhckNvZGVBdChpKSA+IDI1NSkge1xcbiAgICAgICAgICAgICAgICBsZW4gKz0gMjtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBsZW4rKztcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGxlbiA+IG1heExlbmd0aCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyLnNsaWNlKDAsIGkpICsgJy4uLic7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIHN0cjtcXG4gICAgfVxcbiAgICBsZXQgc2Rlc2MgPSBzdWJzdHIoZGVzYywgbnVtKTtcXG4gICAgdmFyIGNvbG9ycyA9IHtcXG4gICAgICAgIHNob3c6IFxcXCJibGFja1xcXCIsXFxuICAgICAgICBoaWRlOiBcXFwiZ3JleVxcXCJcXG4gICAgfVxcbiAgICB2YXIgbGF6eSA9ICQoYCNub0xvYWRpbmcjYCkubGF6eVJ1bGUoKGRjLCBzZGMsIG0sIGNzKSA9PiB7XFxuICAgICAgICB2YXIgc2hvdyA9IHN0b3JhZ2UwLmdldEl0ZW0obSwgJzAnKTtcXG4gICAgICAgIHZhciB0aXRsZSA9IGZpbmRJdGVtKCdkZXNjJykudGl0bGU7XFxuICAgICAgICB2YXIgcmUgPSAvKDxcXFxcL3NtYWxsPjxicj4uKj8+KS4rL2c7XFxuICAgICAgICB2YXIgZXhwID0gJ+WxleW8gDonO1xcbiAgICAgICAgdmFyIHJldCA9ICfmlLbotbc6JztcXG4gICAgICAgIGlmIChzaG93ID09ICcxJykge1xcbiAgICAgICAgICAgIHVwZGF0ZUl0ZW0oJ2Rlc2MnLCB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZVxcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UocmV0LCBleHApXFxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShyZSwgJyQxJyArIHNkYyArICc8L3NtYWxsPicpXFxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvKDxcXFxcL3NtYWxsPjxicj5cXFxcPGZvbnQgY29sb3I9XFxcIikuKj8oXFxcIj4pLywgJyQxJyArIGNzLmhpZGUgKyAnJDInKVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgc3RvcmFnZTAuc2V0SXRlbShtLCAnMCcpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB1cGRhdGVJdGVtKCdkZXNjJywge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGVcXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKGV4cCwgcmV0KVxcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UocmUsICckMScgKyBkYyArICc8L3NtYWxsPicpXFxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvKDxcXFxcL3NtYWxsPjxicj5cXFxcPGZvbnQgY29sb3I9XFxcIikuKj8oXFxcIj4pLywgJyQxJyArIGNzLnNob3cgKyAnJDInKVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgc3RvcmFnZTAuc2V0SXRlbShtLCAnMScpO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIGBoaWtlcjovL2VtcHR5YFxcbiAgICB9LCBkZXNjLCBzZGVzYywgbWFyaywgY29sb3JzKVxcbiAgICB2YXIgc2MgPSBzdG9yYWdlMC5nZXRJdGVtKG1hcmssICcwJykgPT0gJzAnID8gJ+WxleW8gDonIDogJ+aUtui1tzonO1xcbiAgICB2YXIgZGMgPSBzdG9yYWdlMC5nZXRJdGVtKG1hcmssICcwJykgPT0gJzAnID8gc2Rlc2MgOiBkZXNjO1xcbiAgICB2YXIgY3MgPSBzdG9yYWdlMC5nZXRJdGVtKG1hcmssICcwJykgPT0gJzAnID8gY29sb3JzLmhpZGUgOiBjb2xvcnMuc2hvdztcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAnJyArICc8Yj48Zm9udCBjb2xvcj1cXFwiIzA5OEFDMVxcXCI+4oi35Ymn5oOF566A5LuLXFx0PC9mb250PjwvYj4nICsgXFxcIjxzbWFsbD48YSBzdHlsZT0ndGV4dC1kZWNvcmF0aW9uOiBub25lOycgaHJlZj0nXFxcIiArIGxhenkgKyBcXFwiJz5cXFwiICsgc2MgKyAnPC9hPjwvc21hbGw+PGJyPjxmb250IGNvbG9yPVxcXCInICsgY3MgKyAnXFxcIj4nICsgYCR7ZGN9YCArICc8L3NtYWxsPicsXFxuICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCcsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGlkOiAnZGVzYycsXFxuICAgICAgICAgICAgbGluZVNwYWNpbmc6IDYsXFxuICAgICAgICAgICAgdGV4dFNpemU6IDE1LFxcbiAgICAgICAgICAgIGxpbmVWaXNpYmxlOiB0cnVlLFxcbiAgICAgICAgfVxcbiAgICB9KVxcbn1cXG5cXG4kLmV4cG9ydHMgPSB7XFxuICAgIHJlcTExLFxcbiAgICBmZXRjaERhbm11RGF0YSxcXG4gICAgZmVubGVpLFxcbiAgICBmb3JtYXRUaW1lc3RhbXAsXFxuICAgIHNldERlc2NcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLpppbpobVcIixcInBhdGhcIjpcImNsYVwiLFwicnVsZVwiOlwidmFyIHtcXG4gICAgcmVxMTEsXFxuICAgIGZlbmxlaVxcbn0gPSAkLnJlcXVpcmUoXFxcImhhbnNodVxcXCIpXFxudmFyIHVybCA9IFxcXCJodHRwczovL2h4cWFwaS5oaXl1bi50di9hcGkvc2VyaWVzMi9hcnJhbmdlL2NhdGU/c3R5cGU9XFxcIitnZXRNeVZhcihcXFwidXJsMVxcXCIsIFxcXCIxXFxcIikrXFxcIiZzb3J0PVxcXCIrZ2V0TXlWYXIoXFxcInVybDNcXFwiLCBcXFwiaG90XFxcIikrXFxcIiZ5ZWFyPVxcXCIrZ2V0TXlWYXIoXFxcInVybDRcXFwiLCBcXFwiLTFcXFwiKStcXFwiJmNpZD1cXFwiK2dldE15VmFyKFxcXCJ1cmwyXFxcIiwgZ2V0TXlWYXIoXFxcInVybGwyXFxcIikpK1xcXCImcGFnZT1cXFwiK3BhZ2VcXG52YXIgaHRtbDExID0gcmVxMTEodXJsKVxcbmlmKHBhZ2UgPT0gMSl7XFxuc3RvcmFnZTAucHV0TXlWYXIoXFxcImdyb3Vwc1xcXCIsIGh0bWwxMS5ncm91cHMpXFxuZnVuY3Rpb24gbmFtZWZpbmR2YWx1ZShuYW1lKSB7XFxuICAgIHZhciB2YWx1ZSA9IHN0b3JhZ2UwLmdldE15VmFyKCdncm91cHMnKS5maW5kKGl0ZW0gPT4gaXRlbS5zdHlwZSA9PSBuYW1lKTtcXG4gICAgcmV0dXJuIHZhbHVlXFxufVxcbnZhciBuYW1lMSA9IFtdXFxudmFyIHVybDEgPSBbXVxcbmZlbmxlaShkLCBbXFxcIumfqeWJp1xcXCIsXFxcIue7vOiJulxcXCIsXFxcIueUteW9sVxcXCJdLCBbXFxcIjFcXFwiLFxcXCIyXFxcIixcXFwiM1xcXCJdLCBcXFwiMVxcXCIpXFxubmFtZWZpbmR2YWx1ZShnZXRNeVZhcihcXFwidXJsMVxcXCIsIFxcXCIxXFxcIikpLmNhdGVzLmZvckVhY2goaXRlbSA9PiB7XFxuICAgIG5hbWUxLnB1c2goaXRlbS5uYW1lKVxcbiAgICB1cmwxLnB1c2goaXRlbS52YWx1ZSlcXG59KVxcbmZlbmxlaShkLCBuYW1lMSwgdXJsMSwgXFxcIjJcXFwiKVxcbmZlbmxlaShkLCBbXFxcIuWFqOmDqFxcXCIsXFxcIjIwMjRcXFwiLFxcXCIyMDIzXFxcIixcXFwiMjAyMlxcXCIsXFxcIjIwMjFcXFwiLFxcXCIyMDIwXFxcIixcXFwiMjAxNS0yMDE5XFxcIixcXFwi5pu05pepXFxcIl0sIFtcXFwiLTFcXFwiLFxcXCIyMDI0XFxcIixcXFwiMjAyM1xcXCIsXFxcIjIwMjJcXFwiLFxcXCIyMDIxXFxcIixcXFwiMjAyMFxcXCIsXFxcIjIwMTUtMjAxOVxcXCIsXFxcIjEtMjAxNFxcXCJdLCBcXFwiNFxcXCIpXFxuZmVubGVpKGQsIFtcXFwi5pyA54OtXFxcIixcXFwi5pyA5pawXFxcIixcXFwi5aW96K+EXFxcIl0sIFtcXFwiaG90XFxcIixcXFwibmV3XFxcIixcXFwic2NvcmVcXFwiXSwgXFxcIjNcXFwiKVxcbn1cXG52YXIgbGlzdDExID0gaHRtbDExLnNlcmllc0xpc3RcXG5saXN0MTEuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBpdGVtLm5hbWUsXFxuICAgICAgICAvL2Rlc2M6IGl0ZW0sXFxuICAgICAgICBpbWc6IGl0ZW0uaW1hZ2UudGh1bWIsXFxuICAgICAgICB1cmw6IGBoaWtlcjovL3BhZ2UvZXJqaT9zaWQ9JHtpdGVtLnNpZH0jaW1tZXJzaXZlVGhlbWUjYFxcbiAgICB9KVxcbn0pXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuoznuqdcIixcInBhdGhcIjpcImVyamlcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW11cXG50cnl7XFxudmFyIHtcXG4gICAgcmVxMTEsXFxuICAgIHNldERlc2NcXG59ID0gJC5yZXF1aXJlKFxcXCJoYW5zaHVcXFwiKVxcbnZhciBzaWQgPSBnZXRQYXJhbShcXFwic2lkXFxcIikucmVwbGFjZShcXFwiI2ltbWVyc2l2ZVRoZW1lI1xcXCIsXFxcIlxcXCIpXFxudmFyIGh0bWwyMSA9IHJlcTExKFxcXCJodHRwczovL2h4cWFwaS5oaXl1bi50di9hcGkvc2VyaWVzMi9kZXRhaWwvbm9ybWFsP3NpZD1cXFwiICsgc2lkKVxcbnZhciBzZXJpZXMgPSBodG1sMjEuc2VyaWVzXFxudmFyIHBsYXlJdGVtcyA9IGh0bWwyMS5wbGF5SXRlbXNcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogc2VyaWVzLm5hbWUgKyBcXFwiXFxcXG5cXFwiICsgc2VyaWVzLmNyZXcsXFxuICAgIGRlc2M6ICBzZXJpZXMuc2hvcnRoYW5kLFxcbiAgICBpbWc6IHNlcmllcy5pbWFnZS50aHVtYixcXG4gICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgIGNvbF90eXBlOiBcXFwibW92aWVfMV92ZXJ0aWNhbF9waWNfYmx1clxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBncmFkaWVudDogdHJ1ZVxcbiAgICB9XFxufSlcXG5zZXREZXNjKGQsIGh0bWwyMS5kZXNjKVxcblxcbnZhciBzZWwgPSBnZXRWYXIoXFxcInNlbFxcXCIsXFxcIjcyMHBcXFwiKTsgLy9sb2coc2VsKVxcbnZhciBkYXRhID0gW1xcXCI3MjBwXFxcIixcXFwiMTA4MHBcXFwiLFxcXCI0ODBwXFxcIl1cXG5mb3IobGV0IGEgb2YgZGF0YSl7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IGE9PXNlbD8gXFxcIuKAnOKAnFxcXCIrYStcXFwi4oCd4oCdXFxcIjphLFxcbiAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKGEpPT57XFxuICAgICAgICBwdXRWYXIoXFxcInNlbFxcXCIsYSk7XFxuICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgIH0sIGEpLFxcbiAgICBjb2xfdHlwZTogXFxcImZsZXhfYnV0dG9uXFxcIlxcbn0pXFxufVxcblxcbnBsYXlJdGVtcy5mb3JFYWNoKGl0ZW0gPT57XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogaXRlbS5zZXJpYWxObyxcXG4gICAgICAgIHVybDogJChpdGVtLnBpZCkubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAvL3JldHVybiAkLnJlcXVpcmUoXFxcImhhbnNodVxcXCIpLnJlcTMxKGlucHV0KVxcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfNFxcXCJcXG4gICAgfSlcXG59KVxcbn1jYXRjaChlKXtcXG4gICAgbG9nKGUubWVzc2FnZSlcXG59XFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLliIbnsbtcIixcInBhdGhcIjpcImNsYTFcIixcInJ1bGVcIjpcIi8qXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9kdCcpKS5ydWxlKVxcbmZ1bmN0aW9uIGdldFR5cGVCeU5hbWUobmFtZSkge1xcbiAgICB2YXIgY2F0ZWdvcnkgPSBUeXBlcy5maW5kKGl0ZW0gPT4gaXRlbS5uYW1lID09PSBuYW1lKTtcXG4gICAgcmV0dXJuIGNhdGVnb3J5LnR5cGVcXG59XFxudmFyIHR5cGVBcnJheSA9IGdldFR5cGVCeU5hbWUoZ2V0TXlWYXIoXFxcImNoYW5uZWxcXFwiLCBcXFwi5oyJ57G75YirXFxcIikpO1xcbi8vbG9nKGdldE15VmFyKFxcXCJjaGFubmVsXFxcIikpXFxubG9nKGdldE15VmFyKFxcXCJ0eXBlXFxcIikucmVwbGFjZShcXFwiIFxcXCIsdHlwZUFycmF5WzBdKSlcXG52YXIgbWFqb3IgPSBlbmNvZGVVUklDb21wb25lbnQoZ2V0TXlWYXIoXFxcInR5cGVcXFwiKS5yZXBsYWNlKFxcXCIgXFxcIix0eXBlQXJyYXlbMF0pKTsgbG9nKG1ham9yKVxcbnZhciB1cmwxID0gXFxcImh0dHBzOi8vYXBwLndkeHNiLmNvbS9zb3J0Ynkvc2hvdz9nZW5kZXI9MCZ0eXBlPXJlbnFpJm1ham9yPVxcXCIrbWFqb3IrXFxcIiZtaW5vcj0mc3RhcnQ9XFxcIisoMjAqKE1ZX1BBR0UtMSkpK1xcXCImbGltaXQ9MjAmbGFuZ3VhZ2U9emhfY25cXFwiXFxudmFyIHVybDIgPSBcXFwiaHR0cHM6Ly9hcHAud2R4c2IuY29tL3NvcnRieS9zaG93Z2VuZGVyPTAmbGFuZ3VhZ2U9emhfY24mbGltaXQ9MjAmbWFqb3I9XFxcIittYWpvcitcXFwiJm1pbm9yPSZzdGFydD1cXFwiKygyMCooTVlfUEFHRS0xKSkrXFxcIiZ0eXBlPXJlbnFpXFxcIlxcbnZhciBsaXN0MTEgPSBKU09OLnBhcnNlKCQucmVxdWlyZShcXFwiaGFuc2h1XFxcIikucmVxKHVybDEsIHVybDIpKS5ib29rc1xcbmxpc3QxMS5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICB2YXIgYmtBdXRob3IgPSBpdGVtLmJrQXV0aG9yIHx8IFxcXCJcXFwiXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogaXRlbS5ia05hbWUrXFxcIlxcXFxuXFxcIitia0F1dGhvcixcXG4gICAgICAgIGRlc2M6IGl0ZW0ucmVDb250ZW50IHx8IGl0ZW0uYmtJbnRybyxcXG4gICAgICAgIGltZzogaXRlbS5ia0ltZyxcXG4gICAgICAgIHVybDogYGhpa2VyOi8vcGFnZS9lcmppP2lkPSR7aXRlbS5faWR9I2ltbWVyc2l2ZVRoZW1lI2AsXFxuICAgICAgICBjb2xfdHlwZTogXFxcIm1vdmllXzFfdmVydGljYWxfcGljXFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgcGFnZVRpdGxlOiBpdGVtLmJrTmFtZVxcbiAgICAgICAgfVxcbiAgICB9KVxcbn0pXFxuKi9cIn0se1wibmFtZVwiOlwi6L2u5pKtXCIsXCJwYXRoXCI6XCJ4VUlcIixcInJ1bGVcIjpcIi8qMjAyNDAyMTUgdmVyIDEuMFxcbndlYjpodHRwczovL2dpdGVlLmNvbS96ZXRhbHBoYS9oaWtlcnZpZXcvcmF3L21hc3Rlci9nbG9iYWwvanMveDV1aS5qc1xcbiovXFxuXFxuLyoqXFxuICog5Yik5pat5Lik5Liq5a+56LGh5piv5ZCm55u4562JXFxuICogQHBhcmFtIHtvYmplY3R9IHggLSDlr7nosaExXFxuICogQHBhcmFtIHtvYmplY3R9IHkgIC0g5a+56LGhMlxcbiAqIEBwYXJhbSB7YXJyYXl9IGV4Y2x1ZGVLZXlzICAtIOimgeaOkumZpOeahOmUrueahOaVsOe7hFxcbiAqIEByZXR1cm4ge2Jvb2xlYW59IOi/lOWbnuS4pOS4quWvueixoeaYr+WQpuebuOetiVxcbiAqL1xcbmZ1bmN0aW9uIGlzRXF1YWwoeCwgeSwgZXhjbHVkZUtleXMpIHtcXG4gICAgZXhjbHVkZUtleXMgPSBleGNsdWRlS2V5cyAhPSB1bmRlZmluZWQgPyBleGNsdWRlS2V5cyA6IFtdO1xcbiAgICBjb25zdCBvayA9IE9iamVjdC5rZXlzO1xcbiAgICBjb25zdCB0eCA9IHR5cGVvZiB4O1xcbiAgICBjb25zdCB0eSA9IHR5cGVvZiB5O1xcbiAgICBpZiAoeCAmJiB5ICYmIHR4ID09PSBcXFwib2JqZWN0XFxcIiAmJiB0eCA9PT0gdHkpIHtcXG4gICAgICBjb25zdCBrZXlzWCA9IG9rKHgpLmZpbHRlcihrZXkgPT4gIWV4Y2x1ZGVLZXlzLmluY2x1ZGVzKGtleSkpO1xcbiAgICAgIGNvbnN0IGtleXNZID0gb2soeSkuZmlsdGVyKGtleSA9PiAhZXhjbHVkZUtleXMuaW5jbHVkZXMoa2V5KSk7XFxuICAgICAgaWYgKGtleXNYLmxlbmd0aCAhPT0ga2V5c1kubGVuZ3RoKSB7XFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgfVxcbiAgICAgIHJldHVybiBrZXlzWC5ldmVyeSgoa2V5KSA9PiBpc0VxdWFsKHhba2V5XSwgeVtrZXldLCBleGNsdWRlS2V5cykpO1xcbiAgICB9XFxuICAgIHJldHVybiB4ID09PSB5O1xcbiAgfVxcbiAgXFxuICAvL+m7mOiupFxcbiAgdmFyIHNjb25maWcgPSB7XFxuICAgIG5ld1c6IGZhbHNlLCAvL+aWsOeql+WPo+aJk+W8gFxcbiAgICBtYXJrOiBcXFwiI2ltbWVyc2l2ZVRoZW1lI1xcXCIsIC8v6ZO+5o6l5qCH6K+GXFxuICAgIC8vdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3A/cnVsZT1cXFwiICsgTVlfUlVMRS50aXRsZSArIFxcXCImdXJsPXt1cmx9XFxcIiwgLy/kvb/nlKjlrZDpobXpnaIge3VybH3kvJrmm7/mjaLnm67moIfpk77mjqVcXG4gICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eS8jIyZ1cmw9e3VybH1cXFwiLCAvL+S9v+eUqOS6jOe6p1xcbiAgICBsb25nYzogZmFsc2UsIC8v5ZCv55So6ZW/5oyJXFxuICAgIHg1bGM6IHRydWUsIC8v5Zu+54mH6I+c5Y2VXFxuICAgIHg1aDogJzE5MCcsIC8veDXmtY/op4jlmajpq5jluqYgIOS4uuepuum7mOiupCAz5YiX5bCB6Z2i6buY6K6kMTkwXFxuICAgIHpvb206IGZhbHNlLFxcbiAgICBjdXN0b206IHRydWUsIC8v6Ieq5a6a5LmJIOWumuS5ieS4i+aWueWGheWuuVxcbiAgICAvKmltZ2g6IDE2NCwgLy/lm77niYfpq5jluqYgIFxcbiAgICBpbWd3OiAxMjMsIC8v5Zu+54mH5a695bqmKi9cXG4gICAgc3BlZWQ6IDUsIC8v6YCf5bqmXFxuICAgIGZpdDogJ2NvdmVyJywgLy9vYmplY3QtZml0IOagt+W8j1xcbiAgICBhdXRvcGxheTogdHJ1ZSwgLy/oh6rliqjmkq3mlL5cXG4gICAgc2hvdzogMywgLy/mmL7npLrmlbDph49cXG4gICAgc2Nyb2xsOiAxLCAvL+avj+asoea7keWKqOaVsOmHjyBcXG4gIH1cXG4gIC8vdmFyIHg1ZiA9ICdmaWxlOi8vL3N0b3JhZ2UvZW11bGF0ZWQvMC9Eb3dubG9hZC93ZWIvU2xpZGVYLmh0bWwnOyAvL+acrOWcsGh0bWzkvY3nva5cXG4gIHZhciB4NWYgPSAnaGlrZXI6Ly9maWxlcy9ydWxlcy96ZXRhbHBoYS9TbGlkZVguaHRtbCc7XFxuICB2YXIgeDV1aSA9ICdodHRwczovL2dpdGVlLmNvbS96ZXRhbHBoYS9oaWtlcnZpZXcvcmF3L21hc3Rlci9nbG9iYWwvanMveDV1aS5qcyc7IC8v6L+c56iLanPkvY3nva5cXG4gIFxcbiAgdmFyIHg1ZGVidWcgPSBmYWxzZTtcXG4gIHZhciB4NXBsdXNSdWxlPVxcXCJlbXB0eVxcXCI7XFxuICBcXG4gICQuZXh0ZW5kKHtcXG4gICAgR29TOiB7XFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoc24sIGtleSkge1xcbiAgICAgICAgcmV0dXJuIHN0b3JhZ2UwLmdldEl0ZW0oJ3Njb25maWcnLCBzZmlnKVtrZXldO1xcbiAgICAgIH0sXFxuICAgICAgc2F2ZTogZnVuY3Rpb24gKGNvZiwga2V5LCBpbnB1dCkge1xcbiAgICAgICAgdmFyIG8gPSBzdG9yYWdlMC5nZXRJdGVtKCdzY29uZmlnJywgY29mKTtcXG4gICAgICAgIG9ba2V5XSA9IGlucHV0O1xcbiAgICAgICAgc3RvcmFnZTAuc2V0SXRlbSgnc2NvbmZpZycsIG8pO1xcbiAgICAgIH1cXG4gICAgfSxcXG4gICAgZ2V0RGlzcGxheTogZnVuY3Rpb24gKCkge1xcbiAgICAgIGxldCBjb250ZXh0O1xcbiAgICAgIGlmICh0eXBlb2YgZ2V0Q3VycmVudEFjdGl2aXR5ID09ICdmdW5jdGlvbicpIHtcXG4gICAgICAgIGNvbnRleHQgPSBnZXRDdXJyZW50QWN0aXZpdHkoKTtcXG4gICAgICB9IGVsc2Uge1xcbiAgICAgICAgY29udGV4dCA9IGNvbS5leGFtcGxlLmhpa2Vydmlldy51aS5BcHBsaWNhdGlvbigpLmdldENvbnRleHQoKTtcXG4gICAgICB9XFxuICAgICAgdmFyIGRtID0gY29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXREaXNwbGF5TWV0cmljcygpO1xcbiAgICAgIHJldHVybiBkbTtcXG4gICAgfSxcXG4gICAgZ2VPcmllbnRhdGlvbjogZnVuY3Rpb24gKCkge1xcbiAgICAgIGxldCBjb250ZXh0O1xcbiAgICAgIGlmICh0eXBlb2YgZ2V0Q3VycmVudEFjdGl2aXR5ID09ICdmdW5jdGlvbicpIHtcXG4gICAgICAgIGNvbnRleHQgPSBnZXRDdXJyZW50QWN0aXZpdHkoKTtcXG4gICAgICB9IGVsc2Uge1xcbiAgICAgICAgY29udGV4dCA9IGNvbS5leGFtcGxlLmhpa2Vydmlldy51aS5BcHBsaWNhdGlvbigpLmdldENvbnRleHQoKTtcXG4gICAgICB9XFxuICAgICAgdmFyIG9yaWVudGF0aW9uID0gY29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXRDb25maWd1cmF0aW9uKCkub3JpZW50YXRpb247XFxuICAgICAgcmV0dXJuIG9yaWVudGF0aW9uO1xcbiAgICB9LFxcbiAgICBnZXREZW5zaXR5OiBmdW5jdGlvbiAoZG0pIHtcXG4gICAgICBpZiAoZG0gIT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICBkbSA9IHRoaXMuZ2V0RGlzcGxheSgpO1xcbiAgICAgIH1cXG4gICAgICB2YXIgeiA9IGRtLmRlbnNpdHk7XFxuICAgICAgdmFyIGRwaXggPSAxO1xcbiAgICAgIHN3aXRjaCAoeikge1xcbiAgICAgICAgY2FzZSAxLjU6XFxuICAgICAgICAgIGRwaXggPSAyO1xcbiAgICAgICAgICBicmVhaztcXG4gICAgICAgIGNhc2UgMzpcXG4gICAgICAgICAgZHBpeCA9IDE7XFxuICAgICAgICAgIGJyZWFrO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gZHBpeDtcXG4gICAgfSxcXG4gICAgZ2V0Wm9vbTogZnVuY3Rpb24gKCkge1xcbiAgICAgIHZhciBkbSA9IHRoaXMuZ2V0RGlzcGxheSgpO1xcbiAgICAgIHZhciBvID0gdGhpcy5nZU9yaWVudGF0aW9uKCk7XFxuICAgICAgdmFyIHcgPSBkbS53aWR0aFBpeGVscztcXG4gICAgICB2YXIgaCA9IGRtLmhlaWdodFBpeGVscztcXG4gICAgICB2YXIgeiA9IGRtLmRlbnNpdHk7XFxuICAgICAgdmFyIHpvb20gPSAxO1xcbiAgICAgIHZhciBkcGkgPSBkbS5kZW5zaXR5RHBpOyAvL2RwaSAvLzNcXG4gICAgICB3ID0gdyAvIHo7XFxuICAgICAgaWYgKG8gPT0gMSkge1xcbiAgICAgICAgem9vbSA9IHcgLyBkcGk7XFxuICAgICAgfSBlbHNlIHtcXG4gICAgICAgIGxvZygn5qiq5bGPJylcXG4gICAgICAgIHpvb20gPSB3IC8gZHBpO1xcbiAgICAgIH1cXG4gICAgICBpZiAoem9vbSA8IDEpIHtcXG4gICAgICAgIHpvb20gPSAxO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gem9vbS50b0ZpeGVkKDMpO1xcbiAgICB9LFxcbiAgICBzZGF0YToge1xcbiAgICAgIHNlbGY6IHNjb25maWcsXFxuICAgICAgbmFtZTogJ3NsaWNrX3Njb25maWcuanNvbicsXFxuICAgICAgZ2V0RmlsZTogZnVuY3Rpb24gKCkge1xcbiAgICAgICAgcmV0dXJuIGdldFBhdGgoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvJyArIHRoaXMubmFtZSk7XFxuICAgICAgfSxcXG4gICAgICBvbmZpbGU6IGZ1bmN0aW9uICgpIHtcXG4gICAgICAgIGlmICghZmlsZUV4aXN0KHRoaXMubmFtZSkgfHwgcmVhZEZpbGUodGhpcy5uYW1lLCAwKSA9PSAnJykge1xcbiAgICAgICAgICB3cml0ZUZpbGUodGhpcy5uYW1lLCBKU09OLnN0cmluZ2lmeSh7fSkpO1xcbiAgICAgICAgfVxcbiAgICAgIH0sXFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoa2V5LCBwYXRoKSB7XFxuICAgICAgICB0aGlzLm9uZmlsZSgpO1xcbiAgICAgICAgdmFyIGRhdGEgPSB7fTtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKHJlYWRGaWxlKHRoaXMuZ2V0RmlsZSgpLCAwKSk7XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgIGxvZyhlLm1lc3NhZ2UpXFxuICAgICAgICB9XFxuICAgICAgICBpZiAoa2V5ID09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICByZXR1cm4gZGF0YTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgIGlmIChNWV9SVUxFLnRpdGxlID09ICfogZrpmIXiiJonKSB7XFxuICAgICAgICAgICAga2V5ID0gTVlfUlVMRS50aXRsZSArICctJyArIGtleTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHBhdGggIT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgIGlmIChkYXRhW2tleV0gPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgZGF0YVtrZXldID0ge307XFxuICAgICAgICAgIH1cXG4gICAgICAgICAgcmV0dXJuIGRhdGFba2V5XVtwYXRoXSAhPSB1bmRlZmluZWQgPyBkYXRhW2tleV1bcGF0aF0gOiB7fTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgIHJldHVybiBkYXRhW2tleV0gIT0gdW5kZWZpbmVkID8gZGF0YVtrZXldIDoge307XFxuICAgICAgICB9XFxuICAgICAgfSxcXG4gICAgICBzZXQ6IGZ1bmN0aW9uIChrZXksIHZhbHVlLCBwYXRoKSB7XFxuICAgICAgICB2YXIgdHlwZSA9IHR5cGVvZiAodGhpcy5zZWxmW3BhdGhdKTtcXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xcbiAgICAgICAgICBjYXNlIFxcXCJzdHJpbmdcXFwiOlxcbiAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICBjYXNlIFxcXCJudW1iZXJcXFwiOlxcbiAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUpO1xcbiAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICBjYXNlIFxcXCJib29sZWFuXFxcIjpcXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIH1cXG4gIFxcbiAgICAgICAgdGhpcy5vbmZpbGUoKTtcXG4gICAgICAgIGlmIChNWV9SVUxFLnRpdGxlID09ICfogZrpmIXiiJonKSB7XFxuICAgICAgICAgIGtleSA9IE1ZX1JVTEUudGl0bGUgKyAnLScgKyBrZXk7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZ2V0KCk7XFxuICAgICAgICBpZiAoZGF0YVtrZXldID09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICBkYXRhW2tleV0gPSB7fTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChwYXRoICE9IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICBkYXRhW2tleV1bcGF0aF0gPSB2YWx1ZTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgIGRhdGFba2V5XSA9IHZhbHVlO1xcbiAgICAgICAgfVxcbiAgXFxuICAgICAgICB3cml0ZUZpbGUodGhpcy5nZXRGaWxlKCksIEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpKTtcXG4gICAgICB9LFxcbiAgICB9LFxcbiAgICBpbWdzaXplOiBmdW5jdGlvbiAobnVtLCBzbikge1xcbiAgICAgIGxldCB4NSA9IDE5MDtcXG4gICAgICBzd2l0Y2ggKG51bSkge1xcbiAgICAgICAgY2FzZSAnMSc6XFxuICAgICAgICAgIHg1ID0gMjEwO1xcbiAgICAgICAgICBicmVhaztcXG4gICAgICAgIGNhc2UgJzInOlxcbiAgICAgICAgICB4NSA9IDE0MDtcXG4gICAgICAgICAgYnJlYWs7XFxuICAgICAgICBjYXNlICczJzpcXG4gICAgICAgICAgeDUgPSAxOTA7XFxuICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgIC8vIGNvZGVcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIHg1O1xcbiAgICB9LFxcbiAgfSlcXG4gIFxcbiAgJC5leHBvcnRzLnNob3cgPSBmdW5jdGlvbiAoYXJyLGRhdGEsY2ZnLCBleHRyYXMpIHtcXG4gICAgdmFyIHg1Y2xlYXIgPSBmYWxzZTtcXG4gICAgZXh0cmFzID0gIWV4dHJhcyA/IHt9IDogZXh0cmFzO1xcbiAgICBPYmplY3QuZW50cmllcyhleHRyYXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xcbiAgICAgIC8vY29uc29sZS5sb2coa2V5KVxcbiAgICAgIC8vY29uc29sZS5sb2codmFsdWUpXFxuICAgICAgaWYoa2V5PT1cXFwieDVwbHVzUnVsZVxcXCIpe1xcbiAgICAgICAgZXZhbChrZXkgKyBcXFwiID0gXFxcIiskLnN0cmluZ2lmeSh2YWx1ZSkpO1xcbiAgICAgIH1lbHNle1xcbiAgICAgICAgZXZhbChrZXkgKyBcXFwiID0gJ1xcXCIgKyB2YWx1ZSsgXFxcIidcXFwiKTtcXG4gICAgICB9XFxuICAgIH0pO1xcbiAgICAvL+WPguaVsFxcbiAgICBjZmc9Y2ZnP2NmZzp7fTtcXG4gICAgbGV0IHNjZmc9Y2ZnO1xcbiAgXFxuICAgIHZhciBzbiA9IE1ZX1JVTEUudGl0bGU7XFxuICAgIGlmIChzbiA9PSBcXFwi6IGa6ZiF4oiaXFxcIikge1xcbiAgICAgIGNmZ1sndXJsJ10gPSBcXFwi6IGa6ZiFXFxcIjtcXG4gICAgICB2YXIgaW5mbyA9IHN0b3JhZ2UwLmdldE15VmFyKCfkuIDnuqfmupDmjqXlj6Pkv6Hmga8nKTtcXG4gICAgICBzbiA9IGluZm8ubmFtZTtcXG4gICAgICBpZiAodHlwZW9mIGNmZ1snc3R5cGUnXSA9PSAndW5kZWZpbmVkJykge1xcbiAgICAgICAgY2ZnWydzdHlwZSddID0gaW5mby50eXBlO1xcbiAgICAgICAgY2ZnWydzbmFtZSddID0gaW5mby5uYW1lO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgXFxuICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXCJTbGlkZV9jZmdcXFwiLCBjZmcpO1xcbiAgXFxuICAgIGlmIChNWV9SVUxFLnRpdGxlID09IFxcXCLogZrpmIXiiJpcXFwiKSB7XFxuICAgICAgaWYgKHg1Y2xlYXIpIHtcXG4gICAgICAgIHJlZnJlc2hYNVdlYlZpZXcoJ2Fib3V0OmJsYW5rJyk7XFxuICAgICAgfVxcbiAgICAgIGNsZWFySXRlbShcXFwic2NvbmZpZ1xcXCIpO1xcbiAgICB9XFxuICBcXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gMCkge1xcbiAgICAgIGlmICghZmlsZUV4aXN0KHg1ZikpIHtcXG4gICAgICAgIGFyci5wdXNoKHtcXG4gICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08c21hbGw+6L2u5pKt57uE5Lu25bCa5pyq5a+85YWl4p2X77iP54K55oiR5a+85YWlPC9zbWFsbD4nLFxcbiAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcbiAgICAgICAgICB1cmw6ICQoJycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICBldmFsKHJlcXVlc3QoJ2h0dHBzOi8vZ2l0ZWUuY29tL3pldGFscGhhL2hpa2Vydmlldy9yYXcvbWFzdGVyL2dsb2JhbC9WZXIuanMnKSk7XFxuICAgICAgICAgICAgY2hlY2tJbkZpbGVzKFtcXFwiU2xpZGVYLmh0bWxcXFwiXSk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICB9KVxcbiAgICAgICAgfSlcXG4gICAgICB9IGVsc2Uge1xcbiAgICAgICAgdmFyIHMgPSAkLnNkYXRhLmdldChzbik7XFxuICAgICAgICAvL2xvZyhzKVxcbiAgICAgICAgc2NmZz1PYmplY3QuYXNzaWduKHt9LHMsc2NmZyk7XFxuICAgICAgICAvL2xvZyhzY2ZnKVxcbiAgXFxuICAgICAgICBpZiAoT2JqZWN0LmtleXMocykubGVuZ3RoID09PSAwKSB7XFxuICAgICAgICAgIC8vbG9nKCfnqbonKVxcbiAgICAgICAgICBjZmcgPSBPYmplY3QuYXNzaWduKHt9LCBzY29uZmlnLCBjZmcpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgLy9sb2coJ+mdnuepuicpXFxuICAgICAgICAgIGNmZyA9IE9iamVjdC5hc3NpZ24oe30sIGNmZywgcyk7XFxuICAgICAgICB9XFxuICBcXG4gICAgICAgIGlmICh4NWRlYnVnKSB7XFxuICAgICAgICAgIGxvZygnXFxcXG4nICsgSlNPTi5zdHJpbmdpZnkoY2ZnKSlcXG4gICAgICAgIH1cXG4gICAgICAgIC8vbG9nKGNmZylcXG4gICAgICAgIFxcbiAgXFxuICAgICAgICB2YXIgeDVoID0gJzE5MCYmbGlzdCc7XFxuICAgICAgICBpZiAoISFjZmcpIHtcXG4gICAgICAgICAgeDVoID0gY2ZnLng1aCA/IGNmZy54NWggKyAnJiZsaXN0JyA6IHg1aDtcXG4gICAgICAgIH1cXG4gIFxcbiAgICAgICAgYXJyLnB1c2goe1xcbiAgICAgICAgICBjb2xfdHlwZTogJ3g1X3dlYnZpZXdfc2luZ2xlJyxcXG4gICAgICAgICAgdXJsOiBnZXRQYXRoKHg1ZiksXFxuICAgICAgICAgIGRlc2M6IHg1aCxcXG4gICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBjbHM6XFxcImVsZWxpc3RcXFwiLFxcbiAgICAgICAgICAgIGlkOlxcXCJ4NV9kYl9wb3N0ZXJcXFwiLFxcbiAgICAgICAgICAgIGltZ0xvbmdDbGljazogY2ZnLng1bGMsXFxuICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgICAgfVxcbiAgICBcXG4gICAgICBwdXRWYXIoXFxcInNsaWRlX3J1bGVcXFwiLCBNWV9SVUxFKTtcXG4gICAgICBwdXRWYXIoXFxcInNsaWRlX2RhdGFcXFwiLCBkYXRhKTtcXG4gICAgICBpZiAoIWlzRXF1YWwoc2NmZywgY2ZnKSkge1xcbiAgICAgICAgY2ZnID0gc2NmZztcXG4gICAgICAgICQuc2RhdGEuc2V0KHNuLCBjZmcpO1xcbiAgICAgIH1cXG4gICAgICBwdXRWYXIoXFxcInNsaWRlX2NmZ1xcXCIsIGNmZyk7XFxuICAgICAgcHV0VmFyKFxcXCJzbGlkZV91aVxcXCIsIHg1dWkpO1xcbiAgICAgIHB1dE15VmFyKFxcXCJzbGlkZV94NVxcXCIsIHg1Zik7XFxuICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcIng1X3BsdXNcXFwiLCB4NXBsdXNSdWxlKTtcXG4gICAgICBwdXRWYXIoXFxcInNsaWRlX2ZpbGVcXFwiLCAkLnNkYXRhLmdldEZpbGUoKSk7XFxuICAgIH1cXG4gIH1cXG4gIFxcbiAgdmFyIG1vZGUgPSBnZXRQYXJhbSgnbW9kZScpO1xcbiAgdmFyIGQgPSBbXTtcXG4gIFxcbiAgaWYgKG1vZGUgPT0gJ3NldCcpIHtcXG4gICAgc2V0UGFnZVRpdGxlKCfova7mkq3orr7nva4nKTtcXG4gICAgdmFyIHNuID0gTVlfUlVMRS50aXRsZTtcXG4gICAgaWYgKHNuID09IFxcXCLogZrpmIXiiJpcXFwiKSB7XFxuICAgICAgc24gPSBzdG9yYWdlMC5nZXRNeVZhcign5LiA57qn5rqQ5o6l5Y+j5L+h5oGvJykubmFtZVxcbiAgICB9XFxuICBcXG4gICAgYWRkTGlzdGVuZXIoXFxcIm9uQ2xvc2VcXFwiLFxcbiAgICAgICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgY2xlYXJWYXIoJ3NsaWRlX3NldCcpO1xcbiAgICAgICAgLy9jbGVhclZhcignc2xpZGVfY2ZnJyk7XFxuICAgICAgICBjbGVhclZhcignc2xpZGVfaGVpZ2h0Jyk7XFxuICAgICAgfSlcXG4gICAgKTtcXG4gICAgeDVmID0gZ2V0TXlWYXIoXFxcInNsaWRlX3g1XFxcIiwgeDVmKTtcXG4gIFxcbiAgICBwdXRWYXIoXFxcInNsaWRlX3NldFxcXCIsIFxcXCIxXFxcIik7XFxuICAgIC8vdmFyIHNmaWcgPSBzdG9yYWdlMC5nZXRJdGVtKCdzY29uZmlnJywgc2NvbmZpZyk7XFxuICAgIHZhciBzZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgc2NvbmZpZywgJC5zZGF0YS5nZXQoc24pKTtcXG4gICAgdmFyIHB4ID0gJC5nZXREaXNwbGF5KCk7XFxuICAgIC8vbG9nKHB4KVxcbiAgICB2YXIgem9vbSA9IDE7XFxuICAgIGlmIChzZmlnWyd6b29tJ10gIT0gJ25vbmUnKSB7XFxuICAgICAgem9vbSA9IHNmaWdbJ3pvb20nXTtcXG4gICAgfVxcbiAgXFxuICAgIGlmIChnZXRWYXIoJ3NsaWRlX2hlaWdodCcpICYmICFzZmlnWydjdXN0b20nXSkge1xcbiAgICAgIHNmaWdbJ3g1aCddID0gcGFyc2VJbnQoZ2V0VmFyKCdzbGlkZV9oZWlnaHQnLCAnMTUwJykpICsgKHNmaWdbJ25vdGl0bGUnXSA/IDEwIDogNDApO1xcbiAgICAgIGNsZWFyVmFyKCdzbGlkZV9oZWlnaHQnKTtcXG4gICAgfVxcbiAgXFxuICAgIHZhciBjID0gZ2V0VmFyKFxcXCJzbGlkZV9jZmdcXFwiKSB8fCBcXFwie31cXFwiO1xcbiAgICB2YXIgc2MgPSBPYmplY3QuYXNzaWduKHt9LCBKU09OLnBhcnNlKGMpLCBzZmlnKTtcXG4gICAgcHV0VmFyKFxcXCJzbGlkZV9jZmdcXFwiLCBzYyk7XFxuICBcXG4gICAgXFxuICAgIHZhciBsYXp5ID0gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgobywgc24sIGspID0+IHtcXG4gICAgICBvID0gJC5zZGF0YS5nZXQoc24pO1xcbiAgICAgIGxldCB0OyB0ID0gb1trXSA9PT0gZmFsc2UgPyB0cnVlIDogZmFsc2U7XFxuICAgICAgJC5zZGF0YS5zZXQoc24sIHQsIGspO1xcbiAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgfSwgc2ZpZywgc24sICdhY3Rpb24nKVxcbiAgXFxuICAgIGZ1bmN0aW9uIFRvZihrZXkpIHtcXG4gICAgICB2YXIgYiA9ICQuc2RhdGEuZ2V0KHNuKVtrZXldO1xcbiAgICAgIGlmIChiID09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgJC5zZGF0YS5zZXQoc24sIGZhbHNlLCBrZXkpO1xcbiAgICAgICAgYiA9IGZhbHNlO1xcbiAgICAgIH1cXG4gICAgICBpZiAoYiA9PSB0cnVlKSB7XFxuICAgICAgICByZXR1cm4gJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vbWVzc3kvNTUuc3ZnJztcXG4gICAgICB9XFxuICAgICAgaWYgKGIgPT0gZmFsc2UpIHtcXG4gICAgICAgIHJldHVybiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tZXNzeS82My5zdmcnO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgXFxuICAgIGQucHVzaCh7XFxuICAgICAgdGl0bGU6ICfpooTop4jnqpflj6MnLFxcbiAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcXG4gICAgICBkZXNjOihzZmlnWydzb3J0J118fFxcXCLpobrluo9cXFwiKSsnXFxcXHQnLFxcbiAgICAgIGltZzogJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8va2UvMTU2LnBuZycsXFxuICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChzbik9PntcXG4gICAgICAgIGxldCBhbGxfY29scyA9IFsn6aG65bqPJywgJ+mAhuW6jycsICfkubHluo8nXTtcXG4gICAgICAgIHJldHVybiAkKGFsbF9jb2xzLCAxLCAn5pi+56S66aG65bqPJylcXG4gICAgICAgICAgLnNlbGVjdCgoc24pID0+IHtcXG4gICAgICAgICAgICAkLnNkYXRhLnNldChzbiwgaW5wdXQsICdzb3J0Jyk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgIH0sIHNuKVxcbiAgICAgIH0sc24pLFxcbiAgICAgIGV4dHJhOntcXG4gICAgICAgIExvbmdDbGljazogW3tcXG4gICAgICAgICAgdGl0bGU6ICfosIPor5U6Jysoc2ZpZ1tcXFwiZGVidWdcXFwiXXx8ZmFsc2U/XFxcIuW8gOWQr1xcXCI6XFxcIuWFs+mXrVxcXCIpLCBqczogJC50b1N0cmluZygobywgc24sIGspID0+IHtcXG4gICAgICAgICAgICBvID0gJC5zZGF0YS5nZXQoc24pO1xcbiAgICAgICAgICAgIGxldCB0OyB0ID0gb1trXSA9PT0gZmFsc2UgPyB0cnVlIDogZmFsc2U7XFxuICAgICAgICAgICAgJC5zZGF0YS5zZXQoc24sIHQsIGspO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICB9LHNmaWcsIHNuLCAnZGVidWcnKVxcbiAgICAgICAgfV1cXG4gICAgICB9XFxuICAgIH0se1xcbiAgICAgIGNvbF90eXBlOiAneDVfd2Vidmlld19zaW5nbGUnLFxcbiAgICAgIHVybDogZ2V0UGF0aCh4NWYpLFxcbiAgICAgIGRlc2M6IChzZmlnLng1aCkgKyAnJiZsaXN0JyxcXG4gICAgICBleHRyYToge1xcbiAgICAgICAgaW1nTG9uZ0NsaWNrOiBzZmlnLng1bGMsXFxuICAgICAgfVxcbiAgICB9LCAvKntcXG4gICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgICBleHRyYToge1xcbiAgICAgICAgdGl0bGVWaXNpYmxlOiBmYWxzZSxcXG4gICAgICAgIGhlaWdodDogLTEsXFxuICAgICAgICBoaWdobGlnaHQ6IHRydWUsXFxuICAgICAgICB0eXBlOiAndGV4dGFyZWEnLFxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBKU09OLnN0cmluZ2lmeShzZmlnLCBudWxsKSxcXG4gICAgICB9XFxuICAgIH0qLylcXG4gICAgbGV0IHBsdXNSdWxlPXN0b3JhZ2UwLmdldE15VmFyKFxcXCJ4NV9wbHVzXFxcIix4NXBsdXNSdWxlKTtcXG4gICAgLy9sb2cocGx1c1J1bGUpXFxuICAgIGlmKHBsdXNSdWxlIT1cXFwiZW1wdHlcXFwiKXtcXG4gICAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6J+WklumDqOiHquWumuS5ieiuvue9ricsXFxuICAgICAgICBjb2xfdHlwZTondGV4dF9pY29uJyxcXG4gICAgICAgIGltZzonaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9zeXN0ZW0vNzEucG5nJyxcXG4gICAgICAgIHVybDonaGlrZXI6Ly9lbXB5dCcsXFxuICAgICAgfSlcXG4gICAgICBldmFsKHBsdXNSdWxlKVxcbiAgICB9XFxuICAgIFxcbiAgXFxuICAgIC8vc2F2ZUZpbGUoXFxcInNsaWNrX3Njb25maWcuanNvblxcXCIsSlNPTi5zdHJpbmdpZnkoc2NvbmZpZyxudWxsLDIpLDApO1xcbiAgXFxuICAgIFxcbiAgICAvLyBkLnB1c2goe1xcbiAgICAvLyAgIHRpdGxlOiAn6LCD55So5bCP56iL5bqPJyxcXG4gICAgLy8gICBkZXNjOiAn6buY6K6kI2ltbWVyc2l2ZVRoZW1lIycsXFxuICAgIC8vICAgdXJsOiAkLnRvU3RyaW5nKChzbikgPT4ge1xcbiAgICAvLyAgICAgJC5zZGF0YS5zZXQoc24sIGlucHV0LCAndGl0bGUnKTtcXG4gICAgLy8gICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgLy8gICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgIC8vICAgfSwgc24pLFxcbiAgICAvLyAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICAvLyAgIGV4dHJhOiB7XFxuICAgIC8vICAgICBkZWZhdWx0VmFsdWU6IHNmaWdbJ3RpdGxlJ10sXFxuICAgIC8vICAgfVxcbiAgICAvLyB9KVxcbiAgXFxuICAgIGQucHVzaCh7XFxuICAgICAgdGl0bGU6ICfnoa7orqTkv67mlLknLFxcbiAgICAgIGltZzogJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vc3lzdGVtLzg0LnBuZycsXFxuICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgIGJhY2sodHJ1ZSk7XFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgIH0pLFxcbiAgICAgIGNvbF90eXBlOiAnaWNvbl9zbWFsbF8zJyxcXG4gICAgfSlcXG4gIFxcbiAgICBkLnB1c2goe1xcbiAgICAgIHRpdGxlOiAn5oGi5aSN6buY6K6kJyxcXG4gICAgICBpbWc6ICdodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL3N5c3RlbS84My5wbmcnLFxcbiAgICAgIGNvbF90eXBlOiAnaWNvbl9zbWFsbF8zJyxcXG4gICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHNjLCBzbikgPT4ge1xcbiAgICAgICAgdmFyIHNzID0gc3RvcmFnZTAuZ2V0TXlWYXIoXFxcIlNsaWRlX2NmZ1xcXCIsIHNjKTtcXG4gICAgICAgIHZhciB4NWg9c3NbJ3g1aCddO1xcbiAgICAgICAgaWYoeDVoPT1udWxsKXtcXG4gICAgICAgICAgeDVoPXNjWyd4NWgnXTtcXG4gICAgICAgIH1cXG4gICAgICAgIHNzID0gT2JqZWN0LmFzc2lnbih7fSwgc2MsIHNzLCB7ICd4NWgnOng1aCAgfSk7XFxuICAgICAgICBsb2coc3MpXFxuICAgICAgICAkLnNkYXRhLnNldChzbiwgc3MpO1xcbiAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgfSwgc2NvbmZpZywgc24pXFxuICAgIH0sIHtcXG4gICAgICB0aXRsZTogJ+ajgOafpeabtOaWsCcsXFxuICAgICAgaW1nOiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9zeXN0ZW0vODkucG5nJyxcXG4gICAgICBjb2xfdHlwZTogJ2ljb25fc21hbGxfMycsXFxuICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh4NXUpID0+IHtcXG4gICAgICAgIGlmICh4NXUuc3RhcnRzV2l0aChcXFwiaHR0cFxcXCIpKSB7XFxuICAgICAgICAgIGRlbGV0ZUNhY2hlKHg1dSk7XFxuICAgICAgICAgIGV2YWwocmVxdWVzdCgnaHR0cHM6Ly9naXRlZS5jb20vemV0YWxwaGEvaGlrZXJ2aWV3L3Jhdy9tYXN0ZXIvZ2xvYmFsL1Zlci5qcycpKTtcXG4gICAgICAgICAgVXBkYXRhKFtcXFwiU2xpZGVYLmh0bWxcXFwiXSwgdHJ1ZSk7XFxuICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICB0b2FzdCgn5b2T5YmN5piv6LCD6K+V5qih5byPJyk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgIH0sIGdldFZhcihcXFwic2xpZGVfdWlcXFwiKSlcXG4gICAgfSlcXG4gIFxcbiAgICBpZiAoTVlfUlVMRS50aXRsZSAhPSBcXFwi6IGa6ZiF4oiaXFxcIikge1xcbiAgICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+aWsOeql+WPo+aJk+W8gCcsXFxuICAgICAgICB1cmw6IGxhenkucmVwbGFjZSgnYWN0aW9uJywgJ25ld1cnKSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9pY29uXFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgcGljX3VybDogVG9mKCduZXdXJyksXFxuICAgICAgfSk7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgJC5zZGF0YS5zZXQoc24sIGZhbHNlLCAnbmV3VycpO1xcbiAgICB9XFxuICBcXG4gIFxcbiAgICBkLnB1c2goe1xcbiAgICAgIHRpdGxlOiAn5ZCv55So6ZW/5oyJJyxcXG4gICAgICB1cmw6IGxhenkucmVwbGFjZSgnYWN0aW9uJywgJ2xvbmdjJyksXFxuICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2ljb25cXFwiLFxcbiAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgIHBpY191cmw6IFRvZignbG9uZ2MnKSxcXG4gICAgfSwge1xcbiAgICAgIHRpdGxlOiAn5Zu+54mH6I+c5Y2VJyxcXG4gICAgICB1cmw6IGxhenkucmVwbGFjZSgnYWN0aW9uJywgJ3g1bGMnKSxcXG4gICAgICBjb2xfdHlwZTogXFxcInRleHRfaWNvblxcXCIsXFxuICAgICAgZGVzYzogXFxcIlxcXCIsXFxuICAgICAgcGljX3VybDogVG9mKCd4NWxjJyksXFxuICAgIH0sIHtcXG4gICAgICB0aXRsZTogJ+a7keWKqOaMh+ekuicsXFxuICAgICAgdXJsOiBsYXp5LnJlcGxhY2UoJ2FjdGlvbicsICdkb3RzJyksXFxuICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2ljb25cXFwiLFxcbiAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgIHBpY191cmw6IFRvZignZG90cycpLFxcbiAgICB9LCB7XFxuICAgICAgdGl0bGU6ICfml6DmoIfpopgnLFxcbiAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgobywgc24sIGspID0+IHtcXG4gICAgICAgIG8gPSAkLnNkYXRhLmdldChzbik7XFxuICAgICAgICBsZXQgdDtcXG4gICAgICAgIGxldCB4NTtcXG4gICAgICAgIGlmIChvW2tdID09PSBmYWxzZSkge1xcbiAgICAgICAgICB4NSA9IHBhcnNlSW50KG9bJ3g1aCddKSAtIDMwO1xcbiAgICAgICAgICB0ID0gdHJ1ZTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChvW2tdID09PSB0cnVlKSB7XFxuICAgICAgICAgIHg1ID0gcGFyc2VJbnQob1sneDVoJ10pICsgMzA7XFxuICAgICAgICAgIHQgPSBmYWxzZTtcXG4gICAgICAgIH1cXG4gICAgICAgIC8vbG9nKCfmlrA6Jyt4NSk7XFxuICAgICAgICAkLnNkYXRhLnNldChzbiwgeDUsICd4NWgnKTtcXG4gICAgICAgICQuc2RhdGEuc2V0KHNuLCB0LCBrKTtcXG4gICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICB9LCBzZmlnLCBzbiwgJ25vdGl0bGUnKSxcXG4gICAgICBjb2xfdHlwZTogXFxcInRleHRfaWNvblxcXCIsXFxuICAgICAgZGVzYzogXFxcIlxcXCIsXFxuICAgICAgcGljX3VybDogVG9mKCdub3RpdGxlJyksXFxuICAgIH0sIHtcXG4gICAgICB0aXRsZTogJ+iHquWKqOe8qeaUvicsXFxuICAgICAgdXJsOiBsYXp5LnJlcGxhY2UoJ2FjdGlvbicsICd6b29tJyksXFxuICAgICAgcGljX3VybDogVG9mKCd6b29tJyksXFxuICAgICAgY29sX3R5cGU6ICd0ZXh0X2ljb24nLFxcbiAgICB9KTtcXG4gIFxcbiAgICBkLnB1c2goe1xcbiAgICAgIHRpdGxlOiAn6ZO+5o6l5qCH6K+GJyxcXG4gICAgICBkZXNjOiAn6buY6K6kI2ltbWVyc2l2ZVRoZW1lIycsXFxuICAgICAgdXJsOiAkLnRvU3RyaW5nKChzbikgPT4ge1xcbiAgICAgICAgbGV0IGFsbF9jb2xzID0gWycnLCAnI2Z1bGxUaGVtZSMnLCAnI2dhbWVUaGVtZSMnLCAnI2ltbWVyc2l2ZVRoZW1lIyddO1xcbiAgICAgICAgYWxsX2NvbHMudW5zaGlmdChpbnB1dCk7XFxuICAgICAgICByZXR1cm4gJChhbGxfY29scywgMSwgJ+mTvuaOpeagh+ivhicpXFxuICAgICAgICAgIC5zZWxlY3QoKHNuKSA9PiB7XFxuICAgICAgICAgICAgJC5zZGF0YS5zZXQoc24sIGlucHV0LCAnbWFyaycpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICB9LCBzbilcXG4gICAgICB9LCBzbiksXFxuICAgICAgY29sX3R5cGU6ICdpbnB1dCcsXFxuICAgICAgZXh0cmE6IHtcXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogc2ZpZ1snbWFyayddLFxcbiAgICAgIH1cXG4gICAgfSlcXG4gIFxcbiAgICBkLnB1c2goe1xcbiAgICAgIHRpdGxlOiAn6ZO+5o6lJyxcXG4gICAgICB1cmw6ICQudG9TdHJpbmcoKHNuKSA9PiB7XFxuICAgICAgICBsZXQgYWxsX2NvbHMgPSBbXFxcIuiBmumYhVxcXCIsIFxcXCJoaWtlcjovL3BhZ2UvZXI/cnVsZT1cXFwiICsgTVlfUlVMRS50aXRsZSArIFxcXCImdXJsPXt1cmx9XFxcIiwgXFxcImhpa2VyOi8vZW1wdHk/JnVybD17dXJsfVxcXCIsXFxcImhpa2VyOi8vZW1wdHkjI3t1cmx9XFxcIixcXFwie3VybH1cXFwiXTtcXG4gICAgICAgIGFsbF9jb2xzLnVuc2hpZnQoaW5wdXQpXFxuICAgICAgICByZXR1cm4gJChhbGxfY29scywgMSwgJ3t1cmx95Lya5pu/5o2i55uu5qCH6ZO+5o6lJylcXG4gICAgICAgICAgLnNlbGVjdCgoc24pID0+IHtcXG4gICAgICAgICAgICAkLnNkYXRhLnNldChzbiwgaW5wdXQsICd1cmwnKTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICB9LCBzbilcXG4gICAgICB9LCBzbiksXFxuICAgICAgY29sX3R5cGU6ICdpbnB1dCcsXFxuICAgICAgZXh0cmE6IHtcXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogc2ZpZ1sndXJsJ10sXFxuICAgICAgICB0eXBlOiAndGV4dGFyZWEnLFxcbiAgICAgICAgaGVpZ2h0OiAtMVxcbiAgICAgIH1cXG4gICAgfSlcXG4gICAgaWYgKHNmaWcubG9uZ2MpIHtcXG4gICAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfplb/mjInpk77mjqUnLFxcbiAgICAgICAgZGVzYzogJ+m7mOiupOepuu+8jOWvueW6lOS8oOWFpeWvueixoeeahGx1cmwnLFxcbiAgICAgICAgdXJsOiAkLnRvU3RyaW5nKChzbikgPT4ge1xcbiAgICAgICAgICBsZXQgYWxsX2NvbHMgPSBbXFxcImhpa2VyOi8vcGFnZS9lcj9ydWxlPVxcXCIgKyBNWV9SVUxFLnRpdGxlICsgXFxcIiZ1cmw9e3VybH1cXFwiLCBcXFwiaGlrZXI6Ly9lbXB0eT8mdXJsPXt1cmx9XFxcIiwgXFxcImhpa2VyOi8vZW1wdHkjI3t1cmx9XFxcIiwgXFxcInt1cmx9XFxcIl07XFxuICAgICAgICAgIGFsbF9jb2xzLnVuc2hpZnQoaW5wdXQpXFxuICAgICAgICAgIHJldHVybiAkKGFsbF9jb2xzLCAxLCAne3VybH3kvJrmm7/mjaLnm67moIfpk77mjqUnKVxcbiAgICAgICAgICAgIC5zZWxlY3QoKHNuKSA9PiB7XFxuICAgICAgICAgICAgICAkLnNkYXRhLnNldChzbiwgaW5wdXQsICdsdXJsJyk7XFxuICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgfSwgc24pXFxuICAgICAgICB9LCBzbiksXFxuICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgIGRlZmF1bHRWYWx1ZTogc2ZpZ1snbHVybCddLFxcbiAgICAgICAgICB0eXBlOiAndGV4dGFyZWEnLFxcbiAgICAgICAgICBoZWlnaHQ6IC0xXFxuICAgICAgICB9XFxuICAgICAgfSlcXG4gICAgfVxcbiAgXFxuICAgIGlmIChzZmlnLmN1c3RvbSkge1xcbiAgICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ3g16auY5bqmJyxcXG4gICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICAgICAgZGVzYzogJ+m7mOiupDE5MCcsXFxuICAgICAgICB1cmw6ICQudG9TdHJpbmcoKHNuLCB6b29tKSA9PiB7XFxuICAgICAgICAgIGlmICh6b29tID09ICdhdXRvJykge1xcbiAgICAgICAgICAgIHZhciBweCA9ICQuZ2V0RGlzcGxheSgpO1xcbiAgICAgICAgICAgIHpvb20gPSBweC53aWR0aFBpeGVscyAvIHB4LmRlbnNpdHkgLyAzODQ7XFxuICAgICAgICAgIH1cXG4gICAgICAgICAgbGV0IGFsbF9jb2xzID0gWzE0MCwgMTkwLCAyMTBdO1xcbiAgICAgICAgICBhbGxfY29scy51bnNoaWZ0KE51bWJlcihpbnB1dCkpO1xcbiAgICAgICAgICByZXR1cm4gJChhbGxfY29scywgMSwgJ+m7mOiupDE5MCcpXFxuICAgICAgICAgICAgLnNlbGVjdCgoc24pID0+IHtcXG4gICAgICAgICAgICAgICQuc2RhdGEuc2V0KHNuLCBpbnB1dCwgJ3g1aCcpXFxuICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgfSwgc24pXFxuICAgICAgICB9LCBzbiwgem9vbSksXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICBvbkNoYW5nZTogJC50b1N0cmluZygoc24pID0+IHtcXG4gICAgICAgICAgICAkLnNkYXRhLnNldChzbiwgaW5wdXQsICd4NWgnKTtcXG4gICAgICAgICAgfSwgc24pLFxcbiAgICAgICAgICBkZWZhdWx0VmFsdWU6ICQuc2RhdGEuZ2V0KHNuKVsneDVoJ10gPT0gdW5kZWZpbmVkID8gMTkwIDogc2ZpZ1tcXFwieDVoXFxcIl0sXFxuICAgICAgICAgIHR5cGU6ICdudW1iZXInXFxuICAgICAgICB9XFxuICAgICAgfSlcXG4gICAgfVxcbiAgXFxuICAgIGQucHVzaCh7XFxuICAgICAgdGl0bGU6ICfoh6rlrprkuYknLFxcbiAgICAgIHVybDogbGF6eS5yZXBsYWNlKCdhY3Rpb24nLCAnY3VzdG9tJyksXFxuICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2ljb25cXFwiLFxcbiAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgIHBpY191cmw6IFRvZignY3VzdG9tJyksXFxuICAgIH0pO1xcbiAgXFxuICAgIGlmIChzZmlnWydjdXN0b20nXSA9PSB0cnVlKSB7XFxuICAgICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn6Ieq5Yqo5pKt5pS+JyxcXG4gICAgICAgIHVybDogbGF6eS5yZXBsYWNlKCdhY3Rpb24nLCAnYXV0b3BsYXknKSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9pY29uXFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgcGljX3VybDogVG9mKCdhdXRvcGxheScpLFxcbiAgICAgIH0pO1xcbiAgICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ29iamVjdC1maXTmoLflvI8nLFxcbiAgICAgICAgZGVzYzogJ+m7mOiupGNvdmVyJyxcXG4gICAgICAgIHVybDogJC50b1N0cmluZygoc24pID0+IHtcXG4gICAgICAgICAgbGV0IGFsbF9jb2xzID0gW1xcXCJcXFwiLCBcXFwiZmlsbFxcXCIsIFxcXCJjb3RhaW5cXFwiLCBcXFwiY292ZXJcXFwiLCBcXFwibm9uZVxcXCIsIFxcXCJzY2FsZS1kb3duXFxcIiwgXFxcImluaXRpYWxcXFwiLCBcXFwiaW5oZXJpdFxcXCJdO1xcbiAgICAgICAgICBhbGxfY29scy51bnNoaWZ0KGlucHV0KTtcXG4gICAgICAgICAgcmV0dXJuICQoYWxsX2NvbHMsIDEsICfpu5jorqRjb3ZlcicpXFxuICAgICAgICAgICAgLnNlbGVjdCgoc24pID0+IHtcXG4gICAgICAgICAgICAgICQuc2RhdGEuc2V0KHNuLCBpbnB1dCwgJ2ZpdCcpO1xcbiAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgIH0sIHNuKVxcbiAgICAgICAgfSwgc24pLFxcbiAgICAgICAgY29sX3R5cGU6ICdpbnB1dCcsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICBkZWZhdWx0VmFsdWU6IHNmaWdbJ2ZpdCddLFxcbiAgICAgICAgICB0eXBlOiAndGV4dGFyZWEnLFxcbiAgICAgICAgICBoZWlnaHQ6IC0xXFxuICAgICAgICB9XFxuICAgICAgfSwge1xcbiAgICAgICAgdGl0bGU6ICfmkq3mlL7pgJ/luqYnLFxcbiAgICAgICAgZGVzYzogJ+WNleS9jeenkicsXFxuICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgICAgIHVybDogJC50b1N0cmluZygoc24pID0+IHtcXG4gICAgICAgICAgJC5zZGF0YS5zZXQoc24sIGlucHV0LCAnc3BlZWQnKTtcXG4gICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICB9LCBzbiksXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICBvbkNoYW5nZTogJC50b1N0cmluZygoc24pID0+IHtcXG4gICAgICAgICAgICB2YXIgc3AgPSBOdW1iZXIoaW5wdXQpO1xcbiAgICAgICAgICAgIGlmIChzcCA+IDApIHtcXG4gICAgICAgICAgICAgICQuc2RhdGEuc2V0KHNuLCBzcCwgJ3NwZWVkJyk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9LCBzbiksXFxuICAgICAgICAgIGRlZmF1bHRWYWx1ZTogc2ZpZ1snc3BlZWQnXSxcXG4gICAgICAgICAgdHlwZTogJ251bWJlcidcXG4gICAgICAgIH1cXG4gICAgICB9KVxcbiAgXFxuICAgICAgLypkLnB1c2goe1xcbiAgICAgICAgICB0aXRsZTogJ+WbvueJh+mrmOW6picsXFxuICAgICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICAgICAgICBkZXNjOiAn6buY6K6kMTY0JyxcXG4gICAgICAgICAgdXJsOiAkLnRvU3RyaW5nKChjb2YpID0+IHtcXG4gICAgICAgICAgICAgICQuR29TLnNhdmUoY29mLCAnaW1naCcsIE51bWJlcihpbnB1dCkpO1xcbiAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICB9LCBzdG9yYWdlMC5nZXRJdGVtKCdzY29uZmlnJywgc2ZpZykpLFxcbiAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiAkLkdvUy5nZXQoJ2ltZ2gnKSA9PSB1bmRlZmluZWQgPyAxNjQgOiAkLkdvUy5nZXQoJ2ltZ2gnKSxcXG4gICAgICAgICAgICAgIHR5cGU6ICdudW1iZXInXFxuICAgICAgICAgIH1cXG4gICAgICB9KSovXFxuICBcXG4gICAgICAvKmQucHVzaCh7XFxuICAgICAgICAgIHRpdGxlOiAn5Zu+54mH5a695bqmJyxcXG4gICAgICAgICAgY29sX3R5cGU6ICdpbnB1dCcsXFxuICAgICAgICAgIGRlc2M6ICfpu5jorqQxMjMnLFxcbiAgICAgICAgICB1cmw6ICQudG9TdHJpbmcoKGNvZikgPT4ge1xcbiAgICAgICAgICAgICAgJC5Hb1Muc2F2ZShjb2YsICdpbWd3JywgTnVtYmVyKGlucHV0KSk7XFxuICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgIH0sIHN0b3JhZ2UwLmdldEl0ZW0oJ3Njb25maWcnLCBzZmlnKSksXFxuICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6ICQuR29TLmdldCgnaW1ndycpID09IHVuZGVmaW5lZCA/IDEyMyA6ICQuR29TLmdldCgnaW1ndycpLFxcbiAgICAgICAgICAgICAgdHlwZTogJ251bWJlcidcXG4gICAgICAgICAgfVxcbiAgICAgIH0pKi9cXG4gIFxcbiAgICAgIHZhciBzdyA9IHNmaWdbJ3Nob3cnXTtcXG4gICAgICBpZiAoc3cgPT0gJzAnIHx8IHN3ID09IHVuZGVmaW5lZCB8fCBzdyA9PSAwKSB7XFxuICAgICAgICBzdyA9IDE7XFxuICAgICAgfSBlbHNlIHtcXG4gICAgICAgIHN3ID0gc2ZpZ1snc2hvdyddO1xcbiAgICAgIH1cXG4gIFxcbiAgICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+aYvuekuuaVsOmHjycsXFxuICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgICAgIGRlc2M6ICfpu5jorqQzJyxcXG4gICAgICAgIHVybDogJC50b1N0cmluZygoc24pID0+IHtcXG4gICAgICAgICAgbGV0IGFsbF9jb2xzID0gWzEsIDIsIDNdO1xcbiAgICAgICAgICBhbGxfY29scy51bnNoaWZ0KGlucHV0KTtcXG4gICAgICAgICAgcmV0dXJuICQoYWxsX2NvbHMsIDEsICfpu5jorqQzJylcXG4gICAgICAgICAgICAuc2VsZWN0KChzbikgPT4ge1xcbiAgICAgICAgICAgICAgJC5zZGF0YS5zZXQoc24sIGlucHV0LCAnc2hvdycpO1xcbiAgICAgICAgICAgICAgaWYgKE51bWJlcihpbnB1dCkgPD0gMykge1xcbiAgICAgICAgICAgICAgICAkLnNkYXRhLnNldChzbiwgaW5wdXQsICdzY3JvbGwnKTtcXG4gICAgICAgICAgICAgICAgdmFyIHMgPSAkLmltZ3NpemUoaW5wdXQsIHNuKTtcXG4gICAgICAgICAgICAgICAgbG9nKHMpO1xcbiAgICAgICAgICAgICAgICAkLnNkYXRhLnNldChzbiwgcywgJ3g1aCcpO1xcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICB9LCBzbilcXG4gICAgICAgIH0sIHNuKSxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgIG9uQ2hhbmdlOiAkLnRvU3RyaW5nKChzbikgPT4ge1xcbiAgICAgICAgICAgICQuc2RhdGEuc2V0KHNuLCBpbnB1dCwgJ3Nob3cnKTtcXG4gICAgICAgICAgfSwgc24pLFxcbiAgICAgICAgICBkZWZhdWx0VmFsdWU6IHN3LFxcbiAgICAgICAgICB0eXBlOiAnbnVtYmVyJ1xcbiAgICAgICAgfVxcbiAgICAgIH0pXFxuICBcXG4gICAgICB2YXIgc2wgPSBzZmlnWydzY3JvbGwnXTtcXG4gICAgICBpZiAoc2wgPT0gJzAnIHx8IHNsID09IHVuZGVmaW5lZCB8fCBzbCA9PSAwKSB7XFxuICAgICAgICBzbCA9IDE7XFxuICAgICAgfSBlbHNlIHtcXG4gICAgICAgIHNsID0gc2ZpZ1snc2Nyb2xsJ107XFxuICAgICAgfVxcbiAgXFxuICAgICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn5ruR5Yqo5pWw6YePJyxcXG4gICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICAgICAgZGVzYzogJ+m7mOiupDMnLFxcbiAgICAgICAgdXJsOiAkLnRvU3RyaW5nKChzbikgPT4ge1xcbiAgICAgICAgICAkLnNkYXRhLnNldChzbiwgaW5wdXQsICdzY3JvbGwnKTtcXG4gICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICB9LCBzbiksXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICBkZWZhdWx0VmFsdWU6IHNsLFxcbiAgICAgICAgICB0eXBlOiAnbnVtYmVyJ1xcbiAgICAgICAgfVxcbiAgICAgIH0pXFxuICAgIH1cXG4gICAgc2V0UmVzdWx0KGQpO1xcbiAgfVxcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5Yqo5oCB5YiG57G7XCIsXCJwYXRoXCI6XCJkdFwiLFwicnVsZVwiOlwidmFyIGdldFJhbmdlQ29sb3JzID0gZnVuY3Rpb24oKSB7wqDCoMKgwqDCoMKgwqBcXG4gICAgcmV0dXJuICcjJyArICgnMDAwMDAnICsgKE1hdGgucmFuZG9tKCkgKiAweDEwMDAwMDAgPDwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO8KgwqDCoMKgwqBcXG59XFxuY29uc3Qg5YiG57G76aKc6ImyID0gZ2V0UmFuZ2VDb2xvcnMoKVxcbmNvbnN0IGVtcHR5ID0gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbmxldCBQYXRoID0gSlNPTi5zdHJpbmdpZnkoKTtcXG4vKlxcbmxldCBQYXRoID0gXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUv5pif6L6wLmpzb25cXFwiO1xcbmxldCB0eXBlVXJsID0gXFxcImh0dHBzOi8vaC54bWhla3p0LmNvbS9hcGkvdHlwZS9nZXRfbGlzdFxcXCI7XFxuXFxuaWYgKCFmaWxlRXhpc3QoUGF0aCkpIHtcXG4gICAgbGV0IFR5cGVGaWxlID0gSlNPTi5wYXJzZShEZShmZXRjaCh0eXBlVXJsLCB7XFxuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcXG4gICAgICAgIGhlYWRlcnM6IGhlYWRlcnNcXG4gICAgfSkpKS5yZXN1bHQ7XFxuXFxuICAgIGxldCBEYXRhID0gVHlwZUZpbGUubWFwKGl0ZW0gPT4ge1xcbiAgICAgICAgY29uc3QgZ2V0ID0gbmFtZSA9PiAoaXRlbS5tc2cuZmluZChtc2cgPT4gbXNnLm5hbWUgPT09IG5hbWUpIHx8IHt9KS5kYXRhIHx8IFtdO1xcbiAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICBhcmVhOiBnZXQoJ2FyZWEnKSxcXG4gICAgICAgICAgICB0eXBlOiBnZXQoJ3R5cGUnKSxcXG4gICAgICAgICAgICB5ZWFyOiBnZXQoJ3llYXInKSxcXG4gICAgICAgICAgICBzb3J0OiBnZXQoJ3NvcnQnKSxcXG4gICAgICAgICAgICBpZDogaXRlbS5pZCxcXG4gICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWVcXG4gICAgICAgIH07XFxuICAgIH0pO1xcblxcbiAgICB3cml0ZUZpbGUoUGF0aCwgSlNPTi5zdHJpbmdpZnkoRGF0YSkpO1xcbn1cXG5cXG5sZXQgVHlwZXMgPSBKU09OLnBhcnNlKHJlYWRGaWxlKFBhdGgpKTtcXG4qL1xcbmxldCBUeXBlcyA9IEpTT04ucGFyc2UoUGF0aCk7XFxubGV0IGNoYW5uZWxzID0gW107XFxuZm9yIChsZXQgaXQgb2YgVHlwZXMpIHtcXG4gICAgY2hhbm5lbHMucHVzaCh7XFxuICAgICAgICBcXFwiaWRcXFwiOiBpdC5pZCxcXG4gICAgICAgIFxcXCJuYW1lXFxcIjogaXQubmFtZVxcbiAgICB9KVxcbn1cXG4vL2xvZyhjaGFubmVscylcXG5sZXQgY2hhbm5lbCA9IHtcXG4gICAgXFxcImNOYW1lXFxcIjogXFxcIumikemBk1xcXCIsXFxuICAgIFxcXCJsaXN0SXRlbXNcXFwiOiBbe1xcbiAgICAgICAgXFxcImVOYW1lXFxcIjogXFxcImNoYW5uZWxcXFwiLFxcbiAgICAgICAgXFxcIml0ZW1zXFxcIjogY2hhbm5lbHNcXG4gICAgfV1cXG59XFxuXFxuZnVuY3Rpb24gZ2V0Q2F0ZXMoaWQpIHtcXG4gICAgbGV0IGl0ID0gVHlwZXMuZmluZChpdGVtID0+IGl0ZW0uaWQgPT0gaWQpIHx8IFR5cGVzWzBdO1xcbiAgICAgICBcXG4gICAgbGV0IHRjYXRlcyA9IHtcXG4gICAgICAgIFxcXCJjTmFtZVxcXCI6IFxcXCLliIbnsbtcXFwiLFxcbiAgICAgICAgXFxcImxpc3RJdGVtc1xcXCI6IFtcXG4gICAgICAgICAgICB7XFxuICAgICAgICAgICAgICAgIFxcXCJlTmFtZVxcXCI6IFxcXCJ0eXBlXFxcIixcXG4gICAgICAgICAgICAgICAgXFxcIml0ZW1zXFxcIjogW3tcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJpZFxcXCI6IFtcXFwiXFxcIl0uY29uY2F0KGl0LnR5cGUuc2xpY2UoMSkpLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcIm5hbWVcXFwiOiBpdC50eXBlXFxuICAgICAgICAgICAgICAgIH1dXFxuICAgICAgICAgICAgfS8qLFxcbiAgICAgICAgICAgIHtcXG4gICAgICAgICAgICAgICAgXFxcImVOYW1lXFxcIjogXFxcImFyZWFcXFwiLFxcbiAgICAgICAgICAgICAgICBcXFwiaXRlbXNcXFwiOiBbe1xcbiAgICAgICAgICAgICAgICAgICAgXFxcImlkXFxcIjogW1xcXCJcXFwiXS5jb25jYXQoaXQuYXJlYS5zbGljZSgxKSksXFxuICAgICAgICAgICAgICAgICAgICBcXFwibmFtZVxcXCI6IGl0LmFyZWFcXG4gICAgICAgICAgICAgICAgfV1cXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIHtcXG4gICAgICAgICAgICAgICAgXFxcImVOYW1lXFxcIjogXFxcInllYXJcXFwiLFxcbiAgICAgICAgICAgICAgICBcXFwiaXRlbXNcXFwiOiBbe1xcbiAgICAgICAgICAgICAgICAgICAgXFxcImlkXFxcIjogW1xcXCJcXFwiXS5jb25jYXQoaXQueWVhci5zbGljZSgxKSksXFxuICAgICAgICAgICAgICAgICAgICBcXFwibmFtZVxcXCI6IGl0LnllYXJcXG4gICAgICAgICAgICAgICAgfV1cXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIHtcXG4gICAgICAgICAgICAgICAgXFxcImVOYW1lXFxcIjogXFxcInNvcnRcXFwiLFxcbiAgICAgICAgICAgICAgICBcXFwiaXRlbXNcXFwiOiBbe1xcbiAgICAgICAgICAgICAgICAgICAgXFxcImlkXFxcIjogaXQuc29ydCxcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJuYW1lXFxcIjogaXQuc29ydFxcbiAgICAgICAgICAgICAgICB9XVxcbiAgICAgICAgICAgIH0qL1xcbiAgICAgICAgXVxcbiAgICB9O1xcblxcbiAgICByZXR1cm4gdGNhdGVzO1xcbn1cXG5cXG5sZXQgdGNhdGVzID0gZ2V0Q2F0ZXMoZ2V0TXlWYXIoJ2NoYW5uZWwnKSk7XFxudHJ5IHtcXG4gICAgdmFyIGNhdGVnb3JpZXMgPSBjaGFubmVsLmxpc3RJdGVtcy5jb25jYXQodGNhdGVzLmxpc3RJdGVtcylcXG59IGNhdGNoIChlKSB7XFxuICAgIHZhciBjYXRlZ29yaWVzID0gY2hhbm5lbC5saXN0SXRlbXM7XFxufVxcblxcbi8vbG9nKGNhdGVnb3JpZXMpXFxubGV0IGluaXRfY2F0ZSA9IFtdXFxuXFxuZm9yIChsZXQgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XFxuICAgIGluaXRfY2F0ZS5wdXNoKFxcXCIwXFxcIilcXG59XFxuXFxuY29uc3QgZm9sZCA9IGdldE15VmFyKCdoZWFkZXIuZ3JvdXAnLCBcXFwiMVxcXCIpXFxuY29uc3QgY2F0ZV90ZW1wX2pzb24gPSBnZXRNeVZhcignaGVhZGVyLmNhdGVnb3J5JywgSlNPTi5zdHJpbmdpZnkoaW5pdF9jYXRlKSlcXG5jb25zdCBjYXRlX3RlbXAgPSBKU09OLnBhcnNlKGNhdGVfdGVtcF9qc29uKVxcblxcbmlmIChwYXJzZUludChwYWdlKSA9PT0gMSkge1xcbiAgICBcXG4gICAgLypcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi8J+UjVxcXCIsXFxuICAgICAgICB1cmw6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgIHB1dE15VmFyKFxcXCJNeWtleVxcXCIsIGlucHV0KTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKVxcbiAgICAgICAgfSksXFxuICAgICAgICDCoMKgwqBkZXNjOiBcXFwi5pCc5L2g5oOz55yL55qE5b2x6KeG44CB5Ymn6ZuG44CB5Yqo5ryr562JLi4uXFxcIixcXG4gICAgICAgIMKgwqDCoGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKFxcXCJNeWtleVxcXCIpXFxuICAgICAgICB9XFxuICAgIH0pO1xcbiAgICAqL1xcblxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IGZvbGQgPT09ICcxJyA/ICfigJzigJzigJ3igJ08Yj48c3BhbiBzdHlsZT1cXFwiY29sb3I6ICMxOUI4OURcXFwiPjogKDwvc3Bhbj48L2I+JyA6ICfigJzigJzigJ3igJ08Yj48c3BhbiBzdHlsZT1cXFwiY29sb3I6ICM5MTAxMTNcXFwiPjogKTwvc3Bhbj48L2I+JyxcXG4gICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoZm9sZCkgPT4ge1xcbiAgICAgICAgICAgIHB1dE15VmFyKCdoZWFkZXIuZ3JvdXAnLCBmb2xkID09PSAnMScgPyAnMCcgOiAnMScpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICB9LCBmb2xkKSxcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgIH0pXFxuICAgIC8vbG9nKGNhdGVnb3JpZXMubGVuZ3RoKVxcbiAgICBjYXRlZ29yaWVzLmZvckVhY2goKGNhdGVnb3J5LCBpbmRleCkgPT4ge1xcbiAgICAgICAgLy9sb2coY2F0ZWdvcnkpXFxuICAgICAgICBsZXQgY2xhc3Nfa2V5ID0gY2F0ZWdvcnkuZU5hbWU7XFxuICAgICAgICBsZXQgc3ViX2NhdGVnb3JpZXMgPSBjYXRlZ29yeS5pdGVtcztcXG4gICAgICAgIC8vbG9nKHN1Yl9jYXRlZ29yaWVzKSAgICBcXG4gICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xcbiAgICAgICAgICAgIHN1Yl9jYXRlZ29yaWVzLmZvckVhY2goKGl0ZW0sIGtleSkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBpdGVtLm5hbWU7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZToga2V5LnRvU3RyaW5nKCkgPT09IGNhdGVfdGVtcFtpbmRleF0gPyAn4oCc4oCc4oCd4oCdPGI+PHNwYW4gc3R5bGU9XFxcImNvbG9yOiAnICsg5YiG57G76aKc6ImyICsgJ1xcXCI+JyArIHRpdGxlICsgJzwvc3Bhbj48L2I+JyA6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKGl0ZW0uaWQgKyAnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgocGFyYW1zKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld19jYXRlID0gW11cXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuY2F0ZV90ZW1wLmZvckVhY2goKGNhdGUsIGluZGV4KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19jYXRlLnB1c2goaW5kZXggPT09IDAgPyBwYXJhbXMua2V5LnRvU3RyaW5nKCkgOiBcXFwiMFxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignaGVhZGVyLmNhdGVnb3J5JywgSlNPTi5zdHJpbmdpZnkobmV3X2NhdGUpKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKHBhcmFtcy5jbGFzc19rZXksIGlucHV0KVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ3R5cGUnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKCdhcmVhJyk7ICAgICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKCd5ZWFyJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcignc29ydCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9nKGlucHV0KVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVfdGVtcDogY2F0ZV90ZW1wLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleToga2V5LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzX2tleTogY2xhc3Nfa2V5LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U6IHBhZ2UsXFxuICAgICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIlxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSBlbHNlIGlmIChmb2xkID09PSAnMScpIHtcXG4gICAgICAgICAgICBzdWJfY2F0ZWdvcmllcyA9IGNhdGVnb3J5Lml0ZW1zWzBdLm5hbWU7XFxuICAgICAgICAgICAgbGV0IGlkID0gY2F0ZWdvcnkuaXRlbXNbMF0uaWQ7XFxuICAgICAgICAgICAgLy9sb2coc3ViX2NhdGVnb3JpZXMubGVuZ3RoKVxcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIHN1Yl9jYXRlZ29yaWVzLmZvckVhY2goKGl0ZW0sIGtleSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gaXRlbTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB1aWQgPSBpZFtrZXldO1xcbiAgICAgICAgICAgICAgICAgICAgLy9sb2codWlkKVxcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZToga2V5LnRvU3RyaW5nKCkgPT09IGNhdGVfdGVtcFtpbmRleF0gPyAn4oCc4oCc4oCd4oCdPGI+PHNwYW4gc3R5bGU9XFxcImNvbG9yOiAnICsg5YiG57G76aKc6ImyICsgJ1xcXCI+JyArIHRpdGxlICsgJzwvc3Bhbj48L2I+JyA6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCh1aWQgKyAnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgocGFyYW1zKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5jYXRlX3RlbXBbcGFyYW1zLmluZGV4XSA9IHBhcmFtcy5rZXkudG9TdHJpbmcoKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignaGVhZGVyLmNhdGVnb3J5JywgSlNPTi5zdHJpbmdpZnkocGFyYW1zLmNhdGVfdGVtcCkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9nKHBhcmFtcy5jbGFzc19rZXkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIocGFyYW1zLmNsYXNzX2tleSwgaW5wdXQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVfdGVtcDogY2F0ZV90ZW1wLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleToga2V5LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc19rZXk6IGNsYXNzX2tleSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogcGFnZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgIGxvZyhzdWJfY2F0ZWdvcmllcylcXG4gICAgICAgICAgICAgICAgbG9nKGUudG9TdHJpbmcoKSlcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCJcXG4gICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgIH1cXG4gICAgfSlcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLpn6nlsI/lnIhcIixcInBhdGhcIjpcImRhbm11I2h4cVwiLFwicnVsZVwiOlwianM6XFxuXFxuZnVuY3Rpb24gc2VhcmNoKGlucHV0KSB7XFxuICAgIHZhciB1cmwgPSBcXFwiaHR0cHM6Ly9oeHFhcGkuaGl5dW4udHYvYXBpL3NlYXJjaC9zNT9rPVxcXCIgKyBpbnB1dCArIFxcXCImc3JlZmVyPXNlYXJjaF9oaXN0b3J5JnR5cGU9MiZwYWdlPTFcXFwiXFxuICAgIHZhciBodG1sMTEgPSAkLnJlcXVpcmUoXFxcImhhbnNodVxcXCIpLnJlcTExKHVybClcXG4gICAgdmFyIGxpc3QxMSA9IGh0bWwxMS5zZXJpZXNMaXN0XFxuICAgIHZhciBkID0gW11cXG4gICAgZm9yIChsZXQgaXRlbTExIG9mIGxpc3QxMSkge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogaXRlbTExLm5hbWUsXFxuICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKHNpZCwgbmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICB2YXIgZCA9IFtdXFxuICAgICAgICAgICAgICAgIHZhciBodG1sMjEgPSAkLnJlcXVpcmUoXFxcImhhbnNodVxcXCIpLnJlcTExKFxcXCJodHRwczovL2h4cWFwaS5oaXl1bi50di9hcGkvc2VyaWVzMi9kZXRhaWwvbm9ybWFsP3NpZD1cXFwiICsgc2lkKVxcbiAgICAgICAgICAgICAgICB2YXIgcGxheUl0ZW1zID0gaHRtbDIxLnBsYXlJdGVtc1xcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpdGVtMjEgb2YgcGxheUl0ZW1zKSB7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtMjEuc2VyaWFsTm8gKyBcXFwiX1xcXCIgKyBpdGVtMjEudGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKGl0ZW0yMS5waWQpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5yZXF1aXJlKFxcXCJoYW5zaHVcXFwiKS5mZXRjaERhbm11RGF0YShpbnB1dClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL2Rhbm11LnhtbFxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgICAgIH0sIGl0ZW0xMS5zaWQsIGl0ZW0xMS5uYW1lKSxcXG4gICAgICAgIH0pXFxuXFxuICAgIH1cXG4gICAgcmV0dXJuIGQ7XFxufVxcblxcbnNlYXJjaChpbnB1dClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS6uuS6uuinhumikVwiLFwicGF0aFwiOlwiZGFubXUjcnJzcFwiLFwicnVsZVwiOlwianM6XFxuXFxuZnVuY3Rpb24gc2VhcmNoKGlucHV0KSB7XFxuICAgIHZhciB1cmwgPSBcXFwiaHR0cHM6Ly9hcGkucnJtai5wbHVzL20tc3RhdGlvbi9zZWFyY2gvZHJhbWE/a2V5d29yZHM9XFxcIitpbnB1dCtcXFwiJnNpemU9MTAmb3JkZXI9bWF0Y2gmc2VhcmNoX2FmdGVyPSZpc0V4ZWN1dGVWaXBBY3Rpdml0eT10cnVlXFxcIlxcbiAgICB2YXIgciA9IFxcXCIvbS1zdGF0aW9uL3NlYXJjaC9kcmFtYT9cXFwiK1xcXCJpc0V4ZWN1dGVWaXBBY3Rpdml0eT10cnVlJmtleXdvcmRzPVxcXCIraW5wdXQrXFxcIiZvcmRlcj1tYXRjaCZzZWFyY2hfYWZ0ZXI9JnNpemU9MTBcXFwiXFxuICAgIHZhciBsaXN0MTEgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9ycnNwaGFuc2h1XFxcIikucmVxKHVybCwgcikuZGF0YS5zZWFyY2hEcmFtYUxpc3RcXG4gICAgdmFyIGQgPSBbXVxcbiAgICBmb3IgKGxldCBpdGVtMTEgb2YgbGlzdDExKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBpdGVtMTEudGl0bGUsXFxuICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKGlkLCB0aXRsZSkgPT4ge1xcbiAgICAgICAgICAgICAgICB2YXIgZCA9IFtdXFxuICAgICAgICAgICAgICAgIHZhciB1cmwgPSBcXFwiaHR0cHM6Ly9hcGkucnJtai5wbHVzL20tc3RhdGlvbi9kcmFtYS9wYWdlP2hzZHJPcGVuPTAmaXNBZ2VMaW1pdD0wJmRyYW1hSWQ9XFxcIitpZCtcXFwiJnF1YWxpdHk9VUhENEsmaGV2Y09wZW49MFxcXCI7IC8vbG9nKHVybClcXG4gICAgICAgICAgICAgICAgdmFyIHIgPSBcXFwiL20tc3RhdGlvbi9kcmFtYS9wYWdlP1xcXCIrXFxcImRyYW1hSWQ9XFxcIitpZCtcXFwiJmhldmNPcGVuPTAmaHNkck9wZW49MCZpc0FnZUxpbWl0PTAmcXVhbGl0eT1VSEQ0S1xcXCI7IC8vbG9nKHIpXFxuICAgICAgICAgICAgICAgIHZhciBlcGlzb2RlTGlzdCA9ICQucmVxdWlyZShcXFwicnJzcGhhbnNodVxcXCIpLnJlcSh1cmwsIHIpLmRhdGEuZXBpc29kZUxpc3RcXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaXRlbTIxIG9mIGVwaXNvZGVMaXN0KSB7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtMjEuZXBpc29kZU5vLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJChpdGVtMjEuc2lkKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9nKGlucHV0KVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9ycnNwaGFuc2h1XFxcIikuZmV0Y2hEYW5tdURhdGEoaW5wdXQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9kYW5tdS54bWxcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gZDtcXG4gICAgICAgICAgICB9LCBpdGVtMTEuaWQsIGl0ZW0xMS50aXRsZSksXFxuICAgICAgICB9KVxcblxcbiAgICB9XFxuICAgIHJldHVybiBkO1xcbn1cXG5cXG5zZWFyY2goaW5wdXQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkurrkurrop4bpopHlh73mlbBcIixcInBhdGhcIjpcInJyc3BoYW5zaHVcIixcInJ1bGVcIjpcIlxcbi8v5by55bmV5Ye95pWwIGJ5IGN5XFxuZnVuY3Rpb24gZmV0Y2hEYW5tdURhdGEoaW5wdXQpIHtcXG4gICAgbGV0IHVybCA9IFxcXCJodHRwczovL3N0YXRpYy1kbS5ycm1qLnBsdXMvdjEvcHJvZHVjZS9kYW5tdS9FUElTT0RFL1xcXCIraW5wdXQ7XFxuICAgIGxldCBsaXN0cyA9IEpTT04ucGFyc2UocmVxdWVzdCh1cmwpKVxcbiAgICBsZXQgZGFubXVzdHIgPSBgPD94bWwgdmVyc2lvbj1cXFwiMS4wXFxcIiBlbmNvZGluZz1cXFwiVVRGLThcXFwiPz5cXFxcbjxpPlxcXFxuYDtcXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0cy5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgbGV0IHAgPSBsaXN0c1tpXS5wLnNwbGl0KFxcXCIsXFxcIik7IC8vbG9nKHApXFxuICAgICAgICBsZXQgZG0wID0gcFswXTtcXG4gICAgICAgIC8qXFxuICAgICAgICBsZXQgZG0xID0gMTtcXG4gICAgICAgIGlmIChsaXN0c1tpXS5kbTEgPT09IDIpIHtcXG4gICAgICAgICAgICAvLyDpobbnq6/lvLnluZVcXG4gICAgICAgICAgICBkbTEgPSA1O1xcbiAgICAgICAgfVxcbiAgICAgICAgLy8g5by55bmV6aKc6ImyKOm7mOiupClcXG4gICAgICAgIGNvbG9yID0gMTY3NzcyMTU7XFxuICAgICAgICAvLyDpopzoibLorr7nva7igJTigJTlj6/oh6rooYzkv67mlLnmm7/mjaJsZWZ05Li6cmlnaHQo5Y6f5p2l5piv5bem5Y+z5riQ5Y+Y55qE6aKc6Imy77yM5L2GeG1s5qC85byP5pys6Lqr5bm25LiN5pSv5oyB77yM5omA5Lul5LqM6YCJ5LiA5ZCn77yMbGVmdOS4gOiIrOminOiJsuavlOi+g+a3se+8jHJpZ2h05LiA6Iis6aKc6Imy5q+U6L6D5rWFKVxcbiAgICAgICAgaWYgKGxpc3RzW2ldLnYyX2NvbG9yKSB7XFxuICAgICAgICAgICAgY29sb3IgPSAobGlzdHNbaV0udjJfY29sb3IuY29sb3JfbGVmdC5yIDw8IDE2KSArIChsaXN0c1tpXS52Ml9jb2xvci5jb2xvcl9sZWZ0LmcgPDwgOCkgKyAobGlzdHNbaV0udjJfY29sb3IuY29sb3JfbGVmdC5iKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCBkbTMgPSBsaXN0c1tpXS5kbTM7XFxuICAgICAgICAqL1xcbiAgICAgICAgbGV0IGRtNSA9IGxpc3RzW2ldLmQ7XFxuICAgICAgICBpZiAoZG01LmluZGV4T2YoJzwnKSAhPSAtMSB8fCBkbTUuaW5kZXhPZignPicpICE9IC0xIHx8IGRtNS5pbmRleE9mKCcmJykgIT0gLTEgfHwgZG01LmluZGV4T2YoJ1xcXFx1MDAwMCcpICE9IC0xIHx8IGRtNS5pbmRleE9mKCdcXFxcYicpICE9IC0xKSB7XFxuICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICB9XFxuICAgICAgICAvL+aXtumXtO+8jOmhtumDqOW8ueW5le+8jOWtl+S9k+Wkp+Wwj++8jOminOiJsu+8jDDvvIzlvLnluZXlhoXlrrlcXG4gICAgICAgIGxldCB0ZW1wZGF0YSA9IGA8ZCBwPVxcXCIke3BbMF19LDEsMjUsMTY3NzcyMTUsMFxcXCI+JHtkbTV9PC9kPlxcXFxuYDsgLy9sb2codGVtcGRhdGEpXFxuICAgICAgICBkYW5tdXN0ciArPSB0ZW1wZGF0YTtcXG4gICAgfVxcbiAgICBkYW5tdXN0ciArPSBgPC9pPmA7XFxuICAgIHdyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9jYWNoZS9kYW5tdS54bWwnLCBkYW5tdXN0cik7XFxufVxcblxcbmV2YWwoZ2V0Q3J5cHRvSlMoKSlcXG5cXG5mdW5jdGlvbiBhZXNlY2JkZSh3b3JkKSB7XFxuICAgIHZhciBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShcXFwiM2I3NDQzODk4ODJhNDA2N1xcXCIpO1xcbiAgICB2YXIgZW53b3JkID0gQ3J5cHRvSlMuZW5jLkJhc2U2NC5wYXJzZSh3b3JkKTtcXG4gICAgdmFyIGRld29yZCA9IENyeXB0b0pTLkFFUy5kZWNyeXB0KHtjaXBoZXJ0ZXh0OiBlbndvcmR9LCBrZXksIHtcXG4gICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuRUNCLFxcbiAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XFxuICAgIH0pO1xcbiAgICByZXR1cm4gZGV3b3JkLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcXG59XFxuXFxuZnVuY3Rpb24gaG1hY3NoYTI1Nih3b3JkKSB7XFxuICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuSG1hY1NIQTI1Nih3b3JkLCBcXFwiRVM1MTNXMEIxQ3NkVXJSMTNRazVFZ0RBS1BlZUtaWVxcXCIpO1xcbiAgICByZXR1cm4gaGFzaC50b1N0cmluZyhDcnlwdG9KUy5lbmMuQmFzZTY0KTtcXG59XFxuXFxuZnVuY3Rpb24gcmVxKHVybCwgcikge1xcbiAgICB2YXIgYWxpSWQgPSBcXFwiQTBGRTE4RjEtRUQ0Qi00OTgzLTg3OUYtOTc4NTNBOTk5QTE3XFxcIjtcXG4gICAgdmFyIHRpbWVzdGFtcCA9IFN0cmluZyhNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpKSk7IC8vbG9nKHRpbWVzdGFtcClcXG4gICAgdmFyIG8gPSBcXFwiR0VUXFxcIitcXFwiXFxcXG5cXFwiK1xcXCJhbGlJZDpcXFwiK1xcXCJBMEZFMThGMS1FRDRCLTQ5ODMtODc5Ri05Nzg1M0E5OTlBMTdcXFwiK1xcXCJcXFxcblxcXCIrXFxcImN0OndlYl9hcHBsZXRcXFwiK1xcXCJcXFxcblxcXCIrXFxcImN2OjEuMC4wXFxcIitcXFwiXFxcXG5cXFwiK1xcXCJ0OlxcXCIrdGltZXN0YW1wK1xcXCJcXFxcblxcXCIrcjsgLy9sb2cobylcXG4gICAgdmFyIHhjYXNpZ24gPSBobWFjc2hhMjU2KG8pOyAvL2xvZyh4Y2FzaWduKVxcbiAgICB2YXIgaHRtbCA9IHJlcXVlc3QodXJsLCB7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgXFxcImFsaUlkXFxcIjogYWxpSWQsXFxuICAgICAgICAgICAgXFxcInRcXFwiOiB0aW1lc3RhbXAsXFxuICAgICAgICAgICAgXFxcIngtY2Etc2lnblxcXCI6IHhjYXNpZ24sXFxuICAgICAgICAgICAgXFxcImN2XFxcIjogXFxcIjEuMC4wXFxcIixcXG4gICAgICAgICAgICBcXFwiY3RcXFwiOiBcXFwid2ViX2FwcGxldFxcXCJcXG4gICAgICAgIH0sXFxuICAgICAgICBtZXRob2Q6IFxcXCJHRVRcXFwiXFxuICAgIH0pOyAvL2xvZyhodG1sKVxcbiAgICBodG1sID0gSlNPTi5wYXJzZShhZXNlY2JkZShodG1sKSk7IC8vbG9nKGh0bWwpXFxuICAgIHJldHVybiBodG1sXFxufVxcblxcbiQuZXhwb3J0cyA9IHtcXG4gICAgcmVxLFxcbiAgICBmZXRjaERhbm11RGF0YVxcbn1cIn1dIiwiaWNvbiI6ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBSW9BQUFDS0NBWUFBQUIxaDlKa0FBQUFBWE5TUjBJQXJzNGM2UUFBQUFSelFrbFVDQWdJQ0h3SVpJZ0FBQ0FBU1VSQlZIaWM3WjE1a056SGRkOC9yMysvbWRrVGUrRFl4V0pCSEFTSWc2QW9rcEJKa0xSSWlhUkpIZGJoUkxSa3l5VkxkdUtLNDhTVk9GVktYQldWVTQ3S1p4em5jSlZzcHh5S2NSemJraVBKbGlqeGtrbFJCMi9pSUVDUUlFRXNnRjBBaTcydnVYNi9mdm1qZjNQdHp1N096TTR1d0hpK1ZVQlAvN3AvZmYxZXYzN3Y5ZXRlYUtDQkJocG9vSUVHR21pZ2dRWWFhS0NCQmhwb29CSjRWN29CRFN5SmRtQVgwQVJNWGVHMk5QQU93QWJnQUpDNDBnMXA0T3BISE5pTDR6SU5OTEFzZG5NRmlFWFd1c0tsa0V3bXQxdHI5d1BickxXYmpERmlyVVZFT29BZUE1dENWVi9FTmRzQW9TcnYwSGhnWU5qQ0pSR1p0TlppakZGcjdTVmp6RmxqeklubTV1WXppd3pWZnVBY01GM2pVRmVOSzBvbzA5UFRCMFRrZmxXOVhVVHVBSHF1Wkh1dVFsd1NrUitvNmc5VTliSDI5dlpYaTlKMkF4ZFpJMkpaYzBKSkpwTTd3akQ4SlBBek9BR3RnY3B4RFBnTHovUCtxcm01K1cxZ0gzQWFTSzkyeFd0Q0tLcnF6OHpNZkVSRWZnRzRuNFphdmxJRUl2SjNFeE1UWHo1dzRNRHA4Zkh4WTZ0ZDRhcC9zTkhSMFhXcStydkE3d0hYNFpicUJsWUdBK3hyYm01KzhIT2YrMXpzd29VTHAxNTk5ZFdSMWF4d1ZUbks3T3pzQjFUMWZ3QjlxMW5QUDNRRVFUQThPVG41NlczYnRqMitXbldzeXV3ZUh4L3ZuSm1hZWtoVkgwSFZFWWtxLzErSE9WeUJlbjNmMzdTK3UvdlIyZG5aLzY0WEw3YXlDcWc3UjRua2tiOFcrSGk5eTI1Z2VRaDhyYVd0N1VFUkNlcGNidjJncXY3MDlQUmZpOGlxRUlrQXVteXVxN2Y4NWVxcnR2NGw4bit0cmM3RVV0ZWxaMlptNXVIVkloSlkvWSs0bGtSU3JyNXE2MThpLzhkblptYitzTnIyTElXNkVjclUxTlJ2QTUrcVYza05yQmovZkdabTVyZnJWVmhkbHA2Wm1abDdWZlZSR3FydjFRWnJyYjJqbzZQajJaVVd0R0pDbVppWTZQSTg3d1RRdTlLeUdxZy9WUFcwdGZaZ1oyZm4rRXJLV1RFSDhEenZ0MmdReVZVTEVka1pmYU9WbGJPU2wyY25KbTZ4eGp4SHd5Ui9WVU5Fd3REYVF4MGRIUy9VV3NhS09JcjF2Qy9TSUpLckhxcnFHV04rY3lWbDFNeFJwcWFtOW9qSWE2cWFMMk01dTBDMThXcXgzUHYxYmwrOTdTQ3JYTCtLeVBYdDdlMnZWZEhFUEZiQ1VmNVZNWkhBOG5hQmF1UFZZcm4zNjkyK2V0dEJWcmwrVWRWZnJhaGhaZURYK3FLcVBwRHozS29XY25FUy95KytEeTF4c3ArNUM1cmppMmUyRnUvVUpYajdFdmJndGVpR2Q1YkxxRnlhd1AvV0syaHJndkJqNzBHTlFkSUJtczVnVWxrWW5zS01UcU1qMDVpcEpEcVR3cVN6YUNadzdONHFHSU0yK2VqbUxzTHIrMkZYTDlyZUJLYnFlZjVBcmYyb2lWQ21wcWIyQXR0cXJkUjc3QWplMHljQXNQdjZDZS9hdDJoZU16U0IvNXQvZzh5bUNZK2RJL3RySHdaelZYbHdMbzY1TkxILytpam0rRG53RE9hMUlaaEpJdE1wWkM2RHBqSklxRzZETC9jUGlsaURVaUlkaU9CLzQwVzBvNFh3enIwRW56d0VMVlU1NW04Ykh4L2YzdFhWdFppTDVhS29sYVBjVmtrbW1VN0J3R1czZHZvZTBoTEhKbUtZNCtmZFRBRzBxOFVOVURGM0NrSVluMFhpTVhRcWlVek9BV0NHcDlCTUZtbGFnZ090Qk5rUWMrSThrZzRJYjlpNk5LZXJBR1o4RmprekRLR0YwR0plT2wyU1hoRHV4RVdNUVFWRWpJdUxvS3B1YUZRaFZNZ0V5T1VwL0s4OWozbnJFcGxmK3hCMHQxWGNKcy96N2dZZXFyWXZ0UkdLNnQzTDVna3QvcDk5RisvSjR3dTM0b3RnWG5nTG1aeERlN3ZRZGMzUTBZejNsei9DLzcvUHU2cmFpbWJNWEFydjdXSHMrblpZMXdJeEV3MXlIVGlNQ09iMUllSmYrR3ZYM3M5L2xQRDI2Nm91bzZTdkU3TklwbWhmTHZyNGlFQnJrK3RiYXdMdGFFRTNkYURyMnlBUnczYTN3Wlp1TkJFcGxPb21uVGw4QnU4SGJ5RG5Sc0Zhek5FQjR2L2hxMlIrNjFPVkU3WEliYXdab1lqY3R0VEhCeURuYmI2TUtPNS8vVVVRMExnUDdjM29obmJIaWFMeVpUcFZxUGJjR0xFdmZBWFd0YUFkemVqT0h1eWV6UzdzNllEV0ZaeVBVb1dFRHpFUDBnSHkwbWs0dExzNklwdzNKaktkS3NnYThSajI0QTdDUFgzb3RiMW9keXUwTjZITmNZaTd6MkJlUFlmL3gwOWcxcldRL1JmM283MmRoYUlCdTdlUDRQNGI4Ujg1alBlM0x5TEpET2IwTVA2VHJ4SjgrT2JLMm1odFJhdkJmTlRLVVphM3hQb2UyUWNQWVc3WkNiTnBtRTBoRTNONEw1NUd6anF2UGQzUTdqNUVNb01rTXpBeWpZek5rSDN3RUJKYVpIZ0t1VENPR1JpQmROWVJYeW9McVVsa2VCSk9YY1I3N0Npc2E4WnUyMEI0NTE3Q0IyNnNxVXNBZHVNNjdONHRtQ01EZUc5ZUpKeE9PUzVYQzFSaFpBYUpsbGk3WXlPWmYvbEFRYVlJTFNRejREdXVJZE5KWW4vNkpESXdBbkVmR1o5RjE3ZmpQM0VNT1RsRStNQ04ySDFib0t1VjRCTzNJcE96cnU5V01kOCtqTHp2ZXJTU2lTS3l2WmJ1VkUwb016TXp2V0VZZHBSdEE2WE1RM3M2M0V3SFVNVWtzOGpaRWJ5ekk0NlFmdVVCN0lZMnpHUVNoaWZ4em8wU3RzYXhIN2dwMzJtWm1DWCsrOS9FSERzSGNaL2czZ09Za1dua2pZdE9kbEdGeVRuTTBiT1l3VEdDSlFobFdUdkx1bWJDRzY3QkhEc0w1OGZnOGxRSm9WUmxwd210SStiY1dQUjJndS9sMDczdkhzZC81aVRoWGZzSTd0cVA5OGdyeU5sUkZORHJlZ243dS9GZVBJMzM1YWVSWkFhNU1FSDZkMy9HdlJ6M3lYN29KcnpuMzRLeEdjeWxTZVM1VStqN0QxVFN2bzd4OGZIT3JxNnVpU1d5TGtEVmhKTE5abnZOSW1yWmtvdVJDSnJPWXM2T3VuaExITnZYaWZaMkVnS3dsVEFJSFlmeGlzcFB4TkIxTGU2M3RZVDN2NXRzYndlU3lpTERrOGpBQ09iVUJieFRsd2ozYmw2eTdjdmFXVVN3dTN2UnVJK2tzbmcvZkFPN2MxTisrYW5LVG1NVkdTbWNLOWVlZFdoT1cwc0grRThldzV3WVJFNWRRRjRieEh2dWxPTXk2NXJKZnZadXZGZlBFL3V6djNmYVVYT000RU0zbGRaMXpRYkN2WDE0UDN3RE1nSGU0UUhDdS9jdnFUSVh0Vzg3Y0hpWjdwU2dha0l4eGxTMUFTampzNWloY2VUWlUvaEh6eUtYM1N6VDZSVHhMMzZkOEpZZDJMdjJZYmV1ejdQaFlxZ3gwTmJrSW9HRklJRG1PTm9jUjd0YVlVOGY0WDAza00yRzRGZG9WN0NLWEpwRUJPeW1kU1dEcTF1N29hMFpJa0xKZnVyMnN1MnFxSTdKWkNIYTNRNWVWRTdjeCs3WWhEbDVBWmxONHo5K0xDL2ZhRnNUL3VQSE1EOTRIWmx4eDNVa2E0bjl5WlBFL3ZSSmFJNjd5ZktSbTdFM2JYZUVBc2pRT0pJSjBhYmx4NkRhYndnMUVJcUk5T3B5Z2l3Z3lReXhMeitOK2VHcHdoSlJuSzZLREZ6R0RGeUdiNzVNY044Tnp2aldGQ3N0eURObzhiT0pPV1FtNVdhZnRaSEtHRUtUN3dpbkFwaWpBOFIvLzVzUVdqSy8rU0IyVjlHNHRUWmhyOW1BTnpJRll6UEl4RnhOUmo1UlJXYWpjMWxHb0xNRmttbmlEejJObkJoRXBwTmxIYVhOMERnTXpmTUlDRUtYSDJBcWlmZDNMeEhjdlErN2JhUGp2cUZGUnFiUlZIYmgrSlZINS9KWlNsRTFvVmhybXlxeHlKckRBM2hQdlFaemJyQTA3a04zRzlyV0JHMEpORlRNeEN4Y25uSnMvbEVubEdZZXZBMUJrTEVaek9nTURJNWh6bHpPbHh2N24wOGhDTXlra0ZRV1RXY1JWYlNqaGN5Ly95bnM3dDZsTlpWMGx0aGp4NUNwcEpNWmdyQWtXZU1ldW1NRHZId2F5WWJ1QTlSQUtLb0txWXlMSkdKb1V3enZ0U0hNZDQ4am9VVjl6MmxZT2ZYWkNMcTV5OGxtTFhFM1h2RVk2aHZFOXdCblI5Rk1GcjErSzlyZURLcG96RU5DNnpqZ3BVbkN6cFpLMnJiNmhBSjBMcXNhQTdwMVBYWjlHeVlpRkh2blhyS2ZlUzlhM0pGVUZ2KzdyK0kvOUQwa25jVjcvQmptanV1UTRXbGlYM29jYzNscWdXQmd6bys1SHlKZ0JQRWlJMVVRRmo3TVVuYWJTNVBJc2JPdVRUczNRdi82MHZ6R1lQdTdJUkdEZEJZWkdvTTltNUhSYWN6eFFldzE2OUd0NjB2bHFESVF4V2sxNEQ1MjNDZTh0Z2Z6eWRzaHRHaExITytaMXpFbkIvUGpsZjZOVDZETk1hZmRoZXBVNnpDRWJCaFpia0ZFVUJGSXBxRzlDWW41a01vNkxmSGNLRnhYMGFxeUpvVFNWVWttdTJrZDlIZkR1VkVRSVR5NEErMllSKzFOTVlMNzNvWE1adkQvL0Jsa2JCYnovR25NWEJvelhQNkNJWHZOZXZTNlBteDdFN1EzUTBzY1d1S0VHOWFoZTVZV1pna1Y4L3hieUhRU2pYa0VEOXprN0Jqem9GczNvTzFOU0RxTGVXMlE4STQ5K0E4OWpmL3NtMmhuSytISERwSzk1OENTYkY2dFJUSlpBTVFZSjhoNlFuQm90K09XYjF6QW5DMGM3dE5NUVB3UEgzRm1oRlFXMGtGa2piVk9XMUZGRUJSbm43S2RMV1IrN2NQWURlMlk2U1FhaGlYQzgxSVFrYXJQL3RRaW95VG16OWg1T3hJdVh4RENwVWc5VkNYMmYzNkkvOGdyam1WMnR4Rys2eHFDZ3p1Um1FZnduaDM0WDM4QlpsSjRSd2ZJZnZySDNheHJpcU9iT3pCdlhzTC81aXRnTFhyekRqS2Z2aE5pL29MNnk3V2pwRTNUYy9qZlBneFcwZjR1d25kZlUzYmZ5UFowb0swSlpHUWFjK3FpNDE3ZGJXNm1EMC9pUGZ3OU9EOUc4Tk9IU2pua1BHamFHZHRVQkZKWjR2L3BXMDdybTAwamMrbkNzZ09ZQ3hOd1lYR05WZWFGWmpybGJDMWJ1dUR0WVdldmliWTZsb1cxVmErbHRjZ29sSk5SRmpEN1RJQk1GQm91NTBhUmM0Vms4OHhKN085OUd0dmJBVjF0MlBabXpFd0tNM0FaM2JTT3pNL2ZWV2hrcU82RFdnaFRXZFFyb3gwdDFvNGllQ2VHa010dTF0bnIrOUgxaTR6WHV1WTg5NU9CRWRRenBIL21EdkE4dksrL2dLU3krSSs4Z2prNVJPb0xINGV1TW5zdHFraGdvODY2OGZCT0RxRVRjMGpSUk5PWWg5MjlHZDNRQnV0YXNDMXhwQ1dCeGd4R0JYbnNDTjY1c2Z6eWFEZDNZVy9iaGQyNm5uRGZGc3h6cDV6bm1GVWttYTNJMVVHcTMzV3VpYU0wVlpRdm1ZR3dJQ2pxNWs2WVRpR3pLZmMxV3hKb2s2dGVZMzdlakUweW05OHd6TDlySkQrVnZLRUorUFpoTnlNQjNiQ09jUDhXZEZQSHNtNVk1cmxUN2tmY0o3eGw1NUo1ZGVNNjE0L1FPdUxxNlNEenFkdnhkdlVRLzlJVHlPUWM1dTFobXIvd1ZkSy8ra0NwNWtRa294UVRSSGNieVMvK05PYmNLSW5mK2R1OCswRDRrN2VRK2VsRDRIdVl0NGNkQnpzL2lqZVZkT24zM0lDZFRSSDd5blBPYUhsNUNudDVpdkRqNzRHWTUyU1VIREtWbmZkUzFZcStZVEdxSmhSVnJVanJzY2E0WFZBQXo1RDhiNS9OUy9sbVlnN2Jtc2p2elVnbWNDWjZuQjBCenppVmNDYU5lWHNZLzVVQnB3NEQzdEVCdktNRHBaWEZmYklmdm9uZ0g5M3EzaStIdVF6K1MyKzd0bDJ6Z2ZEYVRVdjNzMmhKTWFQVGhEMGRFUE1JYjcrT1RIY2JzUzg5Z1RsekdUazdRdnlQSGlmOTZ4L05FMWMwVUlYZk9ZTmRYemZtTzBjS08rZTlIUVIzNzhkLzloVCtWNTdGREk0dFlJbmUweWNJYjl0TjVsOS9rTmlmZkJlWlR1TC84QTNYNTErNnQxUnJxMERKY00ycGJMSVhvMm9ldEpoVmRrRmpXaE1GUWRFcU1qYmpmc2Q5SitqbTlpVVV6TmtSekxoTDEydDdrUE5qeFA3WE16VDk2a01rL3VQWDhKNDZ2b0RMbENBVEVQdmFpMDZPV1FUKzN4K0g2V2lXdnV1YTViZm0yNHYyZUNaSzEvNXdieCtaWC84WTRiNHRidGQ1Y0JUditQbkZ5NHFFSi9QbVJXS1BIWFhQUEVOdzZ5NjhGOThpL3FVbm5EYW5vRjJ0MkQyYm5ZVTQyaGZ5bmpzRnlReVpYNzdYN1JWWnhYdnVUUmlmeGN4bEN0V3NvcC9PeW1XVW5DL0pQSjhTalhuWW5ac3dGOFlSRlA4Ykx4SThPRS80VThXY3VrajhvYWVkbEorSVFSQ1MrSU52NVdVSkJTUXlLZ0hZM2c3Q243d0YyOTZFS01qclEvaC9md0pKWnZCZVBFMzJrNGNXdGl1d2p0Z0FUWGpZOTF5N2VQdWowRFlYTkJxWlN5OU0zOWhPNXZNZndmL3FzNGhWNTc5U1hGN09wU0Rua0pRSmlIMzdDS1FjNTdSYnV0QWJyc0gvNHllY0dpMUM4TUNOWk8rN0FYbzYwTkNTK1BMM01FKytpaWlZazBOa2Z1VitNc1BUYm85b2Z4OTB0cUFUczFFamNSeDdrZjRzOXAwcVJmVW1mQ0pqVWpIS1hRRVI4d2p1TzBEOCtIbVltQ1gyblNPWWdSSHMzajUwWFRNbUc4TFF1SE1VdWpEaFZPanJldEgxN2NqaEFZajUyUFZ0MklNN1VSRmkzem5zN0FsYnVzaytjR1BlamlIWDkyTk9YY1E3ZFJHNU1GN2FocHlyd3ZnTTVsS2tPbTVjaCszckxKdXZPSlJFZ1ZBMEhaVE5weDNOWkgvaGZlWExNZUw4WlRKaHRPOHpqWGYwYkQ1cmVQc2VOSm5HNURodFM1enN4dzZpUFIwd2w4WWJua1F1VE9URkx1M3BBRlhDOSs4bnZHTTMydEVLTVE4dnQwMGd4azIwUmZwVEhGcHJxUmJWY3hRcWQ5MFAzN1dOekdmZlMrSy9mQWRDaTNmOEhPYTFRV2RYVUZ0d0F4VEI3dW9oKzltNzBjNFc3STVOTHR6Ymg3WWw4Rjg0alQ1NnhLbWFwdFJSS1dmTUFwQnNXTFlkNXB4VFNURkN1S3UzSXRlQjRxa2dOYkIweFRrbmtabDFxcXUxQmZXOUpVRndhRGYrUzZmZC9oVzRiWXAxelRDWEp2SEZyMlBPamlDemtjR3VxNDNnbmdQRXZ2NGk1dGszc1lkMmtZMzhUM1JzT2xMQnFkZ2ZweGFQK3RvNFNzV1poZkRPdmFRMmR4SDcyZ3VZSXdQSVhLWmdSR3ByY3J1Z04yNGplUC8rdkg5S2NQKzduRW1ieUQ1aXRVQ2NYcTRGN29sa1FyZkhBV2lpZkhmTWtRSEVXalRtRWI3LytvcFliMTYxaGNKTXJRSmlCTnZWaWhtZmRRSm5XeE9aejkyRmQzeVE4T0JPWjkzOTBSdjUvTnJSNHN6Mm9jVnUzNGk1TklrR0Z1M3ZKdnZnYlhnbmg0ajl6Zk13bDBhU2FZTDNYZTlHSVJORzlSbG5oRndsMU1SUnFvSm5DSy9iVFBqNWorQ2RHQ1R4RzE5Rk1nRjJTeGVwUC9nNXB4b0RoS0h6VGhkS1Bvd0NpdVpKdzNxR0lySkJKdWZ3SXZhdDNXMWxpVmhTZ1RONmJlb2dPTEMxc25iUEZqenJiR2RMOVVjeFBJUHQ3Y1NjSG5hVzF2RlpnbnR1SUhodndaRmNPMXRSSTQ2ekpqT1FDZEVtbjh3L2VUK1pYNHlXdEV4QTdGdXZFSC80R2VlcTRSbnN3WjNZMWdTU0NmS09VV3FjVWJDU2RsYmJGMWpCY1kxbG9lbzIzckloVHB3SDBwbkM1YndUYzhRZStoNHlsVVRHWnBDNU5ES2JSdU1lNmM5L0ZMdHRRNzRvQ1l0SUkrWm1uYVF0R1BCT1hZQnhKOURaTGQxbG01TDUxQ0g4SFJzSmQ1ZlpCOG1HeU1TczgyRnRLWmp6emVYQzlhMjJyNkpkaTFMNEhuWi9QL3pvRktqaVAvY1c0WjE3MENMSDhQQkFQN0gxYmU3SXhxVkptbjc5THdsdjNvN3Q2VVF5QWViTU1PYmtCY3pRbUhNWDdXZ20rL0VmSS91Qkc1MFgzT0FZWkozOEpMNUhXS3llMXhtMTJGSDhTdXdvM3ZOdkVmL2ZQMERHWjUwN1FCQTZHU0tuNXM2bWlYMTdudStNQ0NUOHdwWjY3ckZxWWZsSitNUys4UkxtK0Rra0VVUGV2T2phSllLOThacnliZTVzZFFKd0djUys5VEx4djNxV2NIY1A0YTI3Q2JkdHdKdEpZdzY3RXcyMnR4UGRWTU1ITUlJOTBPLzJqS2FTbUNNRG1HUG5DUS91eUM5OXRxK2I5TS9mUmVJcno4TDVNVWNZYncrWGpJZjZ4c2tvKzdjUWZPZ203SjdON3YxMEZ2L3BrOUZFQk5zY2MwYk55bEMxZzAwdGx0bktXbkxpUE9iODZOTDJEM0FPU092YnNKczYwQzFkMlAxYkNQZk11MFF5Q0pFY3cyeUs0ejkrRkhPcDRHYUlDUGFXSFFTSGRsZlRGVkRGT3ozc3R1aVBuc003ZHM0NU1hbTZkZ3NFSDdpeFppLy9zSytMOE5aZCtJOGZReklCaVQ5K25MUi9QK0ZOa2R1cUVjTGJyeU81WnpQZXkyZWNBVzhxNmJpRVo5elN0SDBqNFExYm5VdHBwTjdLNEJqeFJ3N2pQMUc0eUZxM2I4emJYVllEdFhBVVJ5ekw2T25abjNnWHREUzV0ZDVJNUZmaDR6MzNKdWJ0WWRRM1pIL2xmb0pyZTZBcERnbmYrV0xrdEpxaThqUXNjQlRiRW9kN0RxQkh6eUpXc2EwSmRIY3YyYnYzNVgwMEtySWpSR0g2b3dlSkc0TTVjZ1l6a2N6YmF6VG1FZDYybTJ6dWNGcVY1YUlLY1ovTVIyN0JESXhnM3JpQWpNd1EvOCtQWU4rOW5YQjNEMnpzd0xiR29TbU8zYkVSM2JiQitkZllTQnYwUEZDTE9UK0dPVEhvZklYZnVvajM5bVVZbmNtM2xYWE5aRC80N3F2TGppSzVRVnNtMUw0dU1nL2VXdnB5RUJLZlMySGVIa2JDNkNQM2w1RXI1cFVuMmNEdG5RRFMwVUxtM2dQSUI5K05Xb1c0NS9hSmlzL1VWQkhxemsya2Yvayt6TWcwNXZRbHpNQ0lFNkQzYmlIWXY4VzVFdFJRYnI3OC9tN1MvL1Q5eEI5K0J1L0VJR1lxaWZuZWEvalBuQVRmT0UzSE44NE80bDZLSm9XQXRXN1puYjlzRnc5VmM1ek1KdzhSdm50NzllMnJBcXNuekphdHpYTytzWEhmN1M0WG5kbFpFdUkwSHdGMytNc3psUjFOcUJReEQ3dTVFOXZiQ2JmdExyV3MxZ0gyMmg1Uy8vWWplTWZPRW4vNEdjeGdaQmpNaG1WdFB3dGNOc3FVcVFMMjVoMmtQL1BqNkpidXlvMWJOYUltUXNuYk4yb0l3MXQza1IwY1J5Ym5DQ0xoYzduM2dodTM0OTIyRzl2V2hOM1h0Nkw2bHd6RmJSZXNTdm5OY1lJZjIwVjQ4MDdNVzVmdzNyaUFESTFqSnVieVo1QVZkY2JJbUlmRVBNZHRFakZzd2tlYVlrNmVhMnZDcm05RHQyM0FkcmM1ajdjYTJsTXRxcWJEc2JHeFB3ZCt0b2E2R3JoNjhPZmQzZDAvVjgwTGpWc2NHNmdJRFVKcG9DSTBDS1dCaWxDOU1HdHRRUnVZZjgzRGZNelgzNnRGdGUvWFdrK3RxTFQvOVNxdlhxaEJtMXNaUjFtdVV5dlEyMnQ2ZnkySnBKTDZxbTNQV3JXL0JuK1V4dEx6RHhFMWVPSFg4SVpaY0RTaUViNnp3clh4Y0l0OFpxOTBaeGNOMVptVmN1NmFoUkJuNGJWYUVIMmlkTW5mbGJaRVNKRUlJZTdFWHU2T05UZDVjbkh5VGxkWHhYaVVDU3Qxa0MvRzJwcndsNEsxU05aQ05uQm03Y0E2eDV3Z09uc2Iyc0x6SUhTT1RvRzZzME9CZFJ0cFFlZ09iSWZXN1l1RU51K0dpRlhudTZycWJrQkEzYWdWN1JTNzBZeWU1OHo0NUg0WHpQcHFwTEI1bVQ4dWF0d3pZMUJQM0ZVWnhqa2E0UnZ3UE5SM3Y5VXpFUFBjUWJaWTdybUh4bkp4RCtLZWMrcGFCYy82TmVFb05TTzArQU9qK0NlSDhDNVBRekxqSEt3ekVXRmtRL2NSZzlCOXFPS1BuSXRITzhtQ0l3S1VhT01NZDlZWG9vOWU1Uzd2YW9SUTRDeGVkTXVqS1lRcUFsNUViRjR1YnB3d1VFeDhualBsYTh5NDJ3MFNQblpqTzluZFBXN252ZEk3WVlxd0poekZHRU1sOTZPVVFKWG1SNDdTOU1TSjZPaER0YlVXc05qOGtweTRKVndkSVlDbFFMd0FoUGx3cFh5aXFUbEIrbzVkekgzaTRMSTNLOHpIMnNnb1lWaXg4MUlPemQ4NFROT2o3bDRRaUZqMGxaN3g3L0JRVWxtYW5uNERtVXN6KzlrN3Evb2V0YWk2MWI5VEpaRjRRNU0wUC9JcVlnRUU1M2NoWUx3ckh4ZkgyakhtNm1oUHRmRlFTVHg3QnYrdHdrVkRsYUI2ZnJJR01vcDNmb0s4VTg1OElydVNjUys2RzY0MTRYNG5zKzdJYVhRRytvcTNyNHE0UHpCR2NPMUdLc1dhbmV2SkhRTFRvakNIK2MvTlpMSXdDL0lwT1dpWk4rcVVMamdIcWJqdmZtZERkMnpWcW51Mm9jMWRRQ3pSZS9HWUk1cTVERXdsM1FtLzFXeGZIZE5sYkM3L0Rjcmxudjk5MW9TamhFVjJoVnhUaXpIL3VSbVpCWW51SU1zZkg1TjU4Zm5oQ3RNOTQwN2R0VWMzSTRnNDdTa1ZPQ0xvYUlibTJNSnlZakZZNTBOekFpYVQ3djY1bkZ5MWx1MnZNdDBiSzV4YW1ELytpMzJmYXJGcVh2ZzVlT09wd3RLelZ1aHNkY1JRM0ZUUGd6YWZ6UDdOaE51N2tHU1cyQnVYOFNaeWc1empSQUlKQXh0ampnT056N3BsNlNxR0dVMHVuMm1GV0hVWlJjYlRqbERXU2lzUTNKVVZJaFF6WUp2d21IdGdEOWx0WGM1YjNTcXBnMXVKdlg2WnBsY0c4Y2JtU3ZJajZrNEg5UGd3bTRXSldYZE8rQ3JSZW9wRE01VjI5cWRhN3NPdEVOVVR5bUkybFBtZEFDUWR1RDllbFB1eklyRDZZZHdIZjE2M0JPWSt1SS9zcnZXRlowWlFQMDdtNWkxa2IraWw2YW5USkU2T3VFdDlpcnZvR2JjY3RUVzVJeEp6bVlJbGR5MzZVMEVvSVppSkZIYjk4bGVIMW9ycXovVlF5dEVMQ1ZvYUFtWXE0MnhNWW9xVzFvaVk1aGRZTWxPS2pzS1hUUzhhSlkzOFkzTDV4TXdyWDdGdENZTGV4Uy9PMFpoSDh0NWRaRzd1Si83aWVlS25ScEhvb3I1OGZRYll0TTdKT2VQSjZKNFRMVFBEaXdlb3VIM2wwb3Y3Vjl6UGN2MHZOMzVSK1NxWThlVFZSU2pWU0NobUtvVllvZFRJbGl0b1hueEJ1bGttUFJmM1N0T041K29yS2w4OWYzbnJwUWpoK21hUzkrMGl1M2NqaVdQRCtBTVRtSFRFWVhMbE44V2hOd2F6R1poTUZlNkFyYlI5cTlGL0szaFRHU3E3d2EwMnJLcU1Jak5ac01MYTJsR2s4RHdLeFVqbDRyNFJnbTJkQlAzcmlKMmZJdkhjSUxIQjZkS1pMT0kwcXJZbW1FakNkS1FkWFNFN2lpRElkTHJDRHRhR21zLzFMQVlwU3BlNUFIZFl4aXlTWTdrU2FrZ1h3MEl0U3hZTzhuTHdETmx0blFTYld2RlBUOUIwOUJMZXBibm94S0lXbXRMVjZ1NVZtMHE3cXl0c1VYb3Q3YThsWFFXWkM4dmFUYW90ZlRGVXY5ZWpHaXlsSWhjM1FsSTVRc25aVVhMTm5HOFBtQit1SUYwTUMyMlB0YXZuMmh3amUvMUdndTJkeEUrT2tqZzZqRGVaS2NoaWdsdU80ajRrNHpDYWpEWUJWNmwvaTloVEpPazJISmNqQWdWRXBQelZWRXRnZFplZWRJaGdjQnM5YTZRR3pCZG13VzNocnhEYUdpTjljdytaL2V0SnZIQ1I1c09YUzMxUFBROWFJL2xvWkxaKy9ha3dsR3k0aEtaUmlyWDFSNmxBdjVlQWlLUDR6T00xcXhjWHM0Q0RpZFRKdmlDQ05zZEl2WGNyR0VQelM4TWw5U0RpbGlFL1U3aHBvTjc5V3l5ZWsyUXJzYnVzaVQ4S0ZQeFJsZ3VEbktvWGRhWUVxeFRQYzVTaUdTZGxzcThRbVJzMzBmenk1ZEo2d0JtOVlsNlpEWlhWN1gvdTlvTzhkZ1NMaG10MUs2UldOT1p1TVdTQklMbkFqbExuT1BPRVdWVldZd3ZCdHJtL3dTT3BZR0Y3akVmK25vN1Y3bTgrWHJuQWJtcVFaMnRaZWlwcmpVVC9HVzk1T1kwNnB1ZDNxZ3ZMZ1dyOVdZb2tBeVF6bjJPcW0wWTVUcm9hL1ZzMDNTd2tva1ZnYXhpTTFkM3I4WFBHcnlpZUMrY2JqNmhqZWs1RzBjSW9Tckdsc3c0UUlQNzZSTVJicFRRbEhZQ042bHVOL2kyU3J0NUNJWDR4cktrL0NwU0tWUFBGSzhCNWwzdGUrWHZjbHV0VXJlazVqaUx6UG1DZE9JcGtMZkVqWXpRZEdWdTRwS1VDbU15VXFiOWNRWFZPOTh5U1V5R1hPNmU0VjR0YS9GRlNPVHRLY1lYbEt0ZEVEQlVwV0VhTHpkYXJGYzl2RnhTbG16cHdsTUFTSDVnajhmSUkva2phWFF1V3V4Z3dWSmpPd0V6Vy9UWm03Zm9iTFRlYWM5QmFCQ1U2a2tpRlYxMFZVSXMvU3NXVmFKTUhYc3h0ejg5ZmZsWXJOQjdnbFR4WERFdU80cEtkVU14SW10YW5odkZIY2ljSWpLTkpWVWlHTUphS3pnb0orYjJkdGVxdmdCcEJXeXEvWFZ0VlY1OVFTbTR6V0M1cmkrZk9yb1RMV1JyckdlYllmdUY1dGM1V0FBUVdmeXhEL05nazhZRTVKQjFFWmFzck9oM0NkQmJtY3M5Wm8vNlZDWTNCTnVma3NpV3dZUGU5Y3RUQ1VkS1ZNbkhiNGpzWlJVSVdkK3VyYzFpaTlURHZkeVdOVnN4RWx2aXBHUkxIcHpEcG5MVTdXazRDbkNQVFREYWFOR3ZVcjZWQ0k5ajJDamhLanBDc3Jkb2xycFo3WnNjcjVpanJZcWpubFdhZmI5ZW9kN3ljSFVWbDJZdVJBY3hjU096NEZFMXZ6Q0F6dVN0TEl3NWxjUVF5RlJGSWJnOXJ0ZnRUU2R6enNLMVZmRXBqSnBmUFZJcGEvRkZTRlhPVVZqOVNrWXVjZDNJQ1lIN0xua0s4SHVuenRSNEJTVnE4eTFtQ2JlVzdLNm1RK0p0enhOK1l3UnQxTnpTV2VPVWxBOGRCMHRGK2lzcnF0YitHZERVRzIxbVZqTEw0bjBOZEJOVmJaa1ZTbFRKeWJUYllKaDh6WTRzKzRyek9sblMrRHVtaGtMY1U1UGFjVkdoNWVveTVEMndrMkJETEQ3S0VpamVZb3ZtRlNVY2dPUTVTZk0zNWVNWVI3LzNTbkFBQUJYNUpSRUZVaWkxaTk2dlovbHJTZlkrd3ZmSlBhWXhaZlVJUmtUUEZaNDl6WXRWaWNkc1JoOUdjbWJ0SUFKTkZ3bnFrcHl5MHhpaklMSXFYaHRaSFJnaDZFZ1Q5Q1V3eXhEK2Z4aHNQSWc2U003dEh5OVJNRUMwemtGZTUxNnI5VmFiYjlqanFsMDdmK2QraEJHdkJVWUNMSlhYT2I4TzhlTmdSSzEzTDF5S2NpSVRubHFoN0ltNGl6aWp4aTFQRVh3WTZZKzVQdVlITG03UGtwZ0tZRGlBVkZtYndXclc3eGpBc3Mrd3NTaVJsdm1FbHFKcFFZckhZbVV3bXMzekdDT0g2NktCVmZrMWRnOUFDNDFtWXRkQVV5Um9aQzhsb0NRUVl5MEo3RE9JUk1ZUUtzNEg3Qnl4dzM3eUt3N0M3dXI5UUZvdkZ6bFQxQWpVUVNsZFgxOFR3cFV1VHF0cFJTWDdiNXJIUXcyMk53Z3pSMGREY2MxTllYcklLNDRGYlVneHVJMDloNGZIWHF6KzA2L3pDQkZnZWw3cTZ1bFpsNldrSHBvc2ZxT3BKNE5ieTJVc1JiSWdWaEMrQXRUUlpWaExhNkYrSjBld2RGSW9oNkttY293aWNyRGh6RWN6eVdTajNaN1VPbDNsV0ZzRW1uK1F0clJTY25xWHd1eEZmY1R5OXE0bnMxamlWUW1za2xFbzR5aVN3QVJqSlB4RTVYREdyODRTWjk3V0JDRTJ2cEp6NzdHSjJna2E4OHJoblNPMkxNMzFmbTdzenJrS0k2ck1WWnk1Q0pZUnlIamlBVzM3U0FOYmE3NGhJeVVvNUg4WFBOU1pNM2R0R2FsOFRMVDlLNGsxWkNKeDl3MTNBaDFOSmMzRW8zR0pseTl6U2lMdVZVVmppZVJRNk8wUWhYeTVlYXFTYnQvWXZscjdZKzZiNDlzamxicGRjK0R4ZnZvbVdQeFBkT21ta1lBQUc4RnpjZGhobWIwbVEzUmwzNmFXdEwva2U4NStIOEZRRjMzd0JLaVhGQkxBVGVDMzM0T0xGaTJlQWJUVlZHbWhlTmhERkRiWVd4Nk4vVnBFUUpLdElOZ29ERnhKRXY2T1FNSXFIQ21HWjBFYmw1Y3o1Vmtycnp2MmJQeUlpcmxFaXFHaGUrTlhjb3UyTCsrMjVaK3JqZkVNOFVFOWR1aStvajV2NXNTZ2VpNTdGaWRLamVpSml5ZnRFNWVLbUVGZXZURHNydzBCdmIrLzJXbDZzVk90SjR6akxidUFVZ0tvK0pTS2ZxYVhTWXVPUVc4QnE2M1VEMVVGRXZsUHp1MVhtYndlMkFpZUdob2IyR1dPT294WDRXdWRZOUdMeHhaN1Zna3JMV2UzNmxpdS8xdnByYjdlRzF1N2JzbVhMNjdXOFhJbldVNHhwNEJ5d3U2K3Y3elZSZmF5aXQrWjNyRnhINi9IUnFpbG50ZXRicnZ4YTY2L3hQVlY5ckZZaWdkcjhiS2R4SnVCOTQ2T2p2MU5yeFEyc0xjU1kzMWpKKzdVUUNqaGlPYjMzd0lITHFWVHEyeXRwUUFOcmdyL3E3ZTJ0U1MzT29WWkNBU2ZndnZyWTQ0Ly9BUVZsdG9HckQ2RlYvZnhLQzZtTHVuSG16SmwvMDVSSS9GNjV0T1gwK2tyc01PWGlsYUxXOTZvdGQ2WHRxL2Y3dWJoVi9XZDlmWDFmcXFIb0V0UnREQzlldlBpb3F2NUV2Y3ByWU9WUTFTZjYrdnJ1cTBkWksxbDZTdUI1M2o4R25xOVhlWG5VU3p0NXA5WmZPMTZJeFdJL1ZhL0M2c3FWejU4L3Y5NHo1am5nMm5xVzIwRFZPQjVhZTFkL2YvOW92UXFzRzBjQjZPL3ZIMVc0RGZoK1BjdHRvSElvZkQvUjFIUkhQWWtFNmt3b0FIMTlmU05qNCtQM0FBL1h1K3dHbHNYRDQrUGo5M1IzZDFkOUhHTTVyT29teThYQndWKzA4RWNpVXJuRFJBTzFJSU8xdjdTNXYvK2gxYXBnMVhmakxsNjhlSnRhKzVmVXVOUGN3TEk0aThnbk5tL2VYSDlGb2docnRtMTc0Y0tGdXdWK1MxVnZLMzYrblAyZ1ZqdER2ZXdTbGRaL0JkNTd5aGp6NzFacWNhMFVhNzYvZis3Y3VTM0dtSjhWa1h1QVE3Z2Q2UWFXeHpUd0l4RjVVa1FlNnUzdEhWN0x5cSs0SThqZzRPRE53QjBDaHhDNUhkVnRKWjVsbFlZNVZQdmUxUnJDQVBCRFZmMitxdjZndjcvL3lKWDVRZzVYbkZEbVkyaG9xQVc0UmtSNkNBSUJzTVowaUVnUDFtNVNrWnl6bFlocUJ5SWJnUFdJTkpmYysyb01WMFZjSkFtTUFxTUs0N2xrRWNrQ3c2cDZ5Vmc3RmYxRkVGWFZZV0NncjY5dnJxSUJhNkNCQmhwb29JRUdHbWlnZ1FZYWFLQ0JCaHBvb0lFR0dtaWdnUVlhYUtDQlpmRC9BRFFVSjdETTErbTdBQUFBQUVsRlRrU3VRbUNDIiwicHJveHkiOiIifQ==
Add Comment
Please, Sign In to add comment