xiaomianao666

小程序:禁漫天堂

Oct 23rd, 2024
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@禁漫天堂@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoi56aB5ryr5aSp5aCCIiwiYXV0aG9yIjoiTElVJuWtkOS4keWvheWNryZLaWxsZXImTG95RGdJayblraPpo44iLCJ1cmwiOiJoaWtlcjovL2VtcHR5IyMvYWxidW1zP289bXImcGFnZT1meXBhZ2UiLCJ2ZXJzaW9uIjowLCJjb2xfdHlwZSI6Im1vdmllXzMiLCJjbGFzc19uYW1lIjoiIiwidHlwZSI6ImNhcnRvb24iLCJjbGFzc191cmwiOiIiLCJhcmVhX25hbWUiOiIiLCJhcmVhX3VybCI6IiIsInNvcnRfbmFtZSI6IiIsInllYXJfbmFtZSI6IiIsInNvcnRfdXJsIjoiIiwieWVhcl91cmwiOiIiLCJmaW5kX3J1bGUiOiJqczpcbnZhciBkID0gW107XG5yYyhmZXRjaFBDKCdodHRwczovL2dpdGVlLmNvbS9taXN0eXdhdGVyL2hpa2VyX2luZm8vcmF3L21hc3Rlci9naXRodWJwcm94eS5qc29uJykgKyAnaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL21pc3R5d2F0ZXIvaGlrZXIvbWFpbi9mJywgMjQpO1xuLy9ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL3lpP3J1bGU9zrEnKSkucnVsZSk7XG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goXCJoaWtlcjovL3BhZ2UveWpcIiwge30pKS5ydWxlKTtcbnB1dFZhcignbGluaycsY29uZmlnLmhvc3QpXG52YXIgbGluayA9IGdldFZhcignbGluaycpXG5jb25zdCBwYWdlID0gTVlfUEFHRTtcbmNvbnN0IGRjID0gZHluYW1pY0NsYXNzKHtcbiAgICDliIbnsbvpopzoibI6IGdldFJhbmdlQ29sb3JzKClcbn0pO1xudmFyIGdldFJhbmdlQ29sb3JzID0gZnVuY3Rpb24oKSB7wqDCoMKgwqDCoMKgwqBcbiAgICByZXR1cm4gKCcwMDAwMCcgKyAoTWF0aC5yYW5kb20oKSAqIDB4MTAwMDAwMCA8PCAwKS50b1N0cmluZygxNikpLnN1YnN0cigtNik7wqDCoMKgwqDCoFxufVxudmFyIGhlYWRlcnMgPSB7XG4gICAgICAgIFwiQ29va2llXCI6IGZldGNoUEMoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvSk1fY29va2llLnR4dCcpIHx8ICcnLCBcbiAgICAgICAgXCJVc2VyLUFnZW50XCI6XCJNb3ppbGxhLzUuMCAoTGludXg7IEFuZHJvaWQgMTI7IFNNLUc5NzUwIEJ1aWxkL1NQMUEuMjEwODEyLjAxNjsgd3YpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vNC4wIENocm9tZS84OS4wLjQzODkuNzIgTVFRQnJvd3Nlci82LjIgVEJTLzA0NjI3OSBNb2JpbGUgU2FmYXJpLzUzNy4zNlwiXG4gICAgfTtcbnZhciBsb2dpbiA9IGxpbmsgKyBcIi91c2VyXCI7XG52YXIgbG9naW5pbmcgPSByZXF1ZXN0KGxvZ2luLHtcbiAgICBoZWFkZXJzOiBoZWFkZXJzXG59KVxudHJ5e1xuICAgIHZhciBmYXYgPSBwZChsb2dpbmluZyxcIi5oZWFkZXItbWVudSYmYTptYXRjaGVzKOaUtuiXjykmJmhyZWZcIixsaW5rKVxuICAgIHZhciBpY29uID0gcGQobG9naW5pbmcsXCIucGFuZWwtYm9keSYmaW1nJiZzcmNcIixsaW5rKVxudmFyIHVzZXJfbmFtZSA9IHBkZmgobG9naW5pbmcsXCIucGFuZWwtYm9keSYmLmhlYWRlci1yaWdodC11c2VybmFtZSYmVGV4dFwiKVxudmFyIGV4cCA9IHBkZmgobG9naW5pbmcsXCIuaGVhZGVyLXByb2ZpbGUtZXhwJiZUZXh0XCIpXG52YXIgTFYgPSAoXCJMdi5cIitwZGZoKGxvZ2luaW5nLFwiLnBhbmVsLWJvZHkmJi5oZWFkZXItcHJvZmlsZS1yb3ctdmFsdWU6aGFzKC5oZWFkZXItcHJvZmlsZS1leHApJiZUZXh0XCIpLnJlcGxhY2UoZXhwLCcnKSkuZm9udGNvbG9yKCcjNTViYjhhJylcbn1jYXRjaChlKXt9XG5pZiAoTVlfUEFHRSA9PSAxKVxuIHtcbiAgICAgaWYobG9naW5pbmcuaW5jbHVkZXMoXCLnmbvlh7pcIikpe1xuICAgICAgICBkLnB1c2goe1xuICAgICAgICAgICAgdGl0bGU6IHVzZXJfbmFtZSxcbiAgICAgICAgICAgIHVybDogXCJoaWtlcjovL3BhZ2UvZmF2b3JpdGU/dXJsPVwiK2ZhditcIiZwYWdlPWZ5cGFnZSNub1JlY29yZEhpc3RvcnkjI25vSGlzdG9yeSNcIixcbiAgICAgICAgICAgIGRlc2M6IExWK1wiIFwiK2V4cCxcbiAgICAgICAgICAgIHBpY191cmw6IGljb24sXG4gICAgICAgICAgICBjb2xfdHlwZTogXCJhdmF0YXJcIlxuICAgICAgICB9KTtcbiAgICB9ZWxzZXtcblxuICAgIGQucHVzaCh7XG4gICAgICAgIHRpdGxlOiAn55m75b2V6LSm5Y+3JyxcbiAgICAgICAgZGVzYzogJ+eZu+W9leaXtuiusOW+l+mDveWLvuS4iicuc21hbGwoKSxcbiAgICAgICAgcGljX3VybDogbGluaytcIi90ZW1wbGF0ZXMvZnJvbnRlbmQvYWlyYXYvaW1nL2FwcF9saW5rMy5wbmc/dj0zXCIsXG4gICAgICAgIHVybDogbG9naW4gKyAkKCcnKS5ydWxlKCgpID0+IHtcbiAgICAgICAgICAgIHZhciBkID0gW107XG4gICAgICAgICAgICBsb2coZmV0Y2hDb29raWUoTVlfVVJMKSlcbiAgICAgICAgICAgIGQucHVzaCh7XG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICd4NV93ZWJ2aWV3X3NpbmdsZScsXG4gICAgICAgICAgICAgICAgdXJsOiBNWV9VUkwsXG4gICAgICAgICAgICAgICAgZGVzYzogJ2xpc3QmJnNjcmVlbicsXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJVc2VyLUFnZW50XCI6IFwiTW96aWxsYS81LjAgKExpbnV4OyBBbmRyb2lkIDEyOyBTTS1HOTc1MCBCdWlsZC9TUDFBLjIxMDgxMi4wMTY7IHd2KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzQuMCBDaHJvbWUvODkuMC40Mzg5LjcyIE1RUUJyb3dzZXIvNi4yIFRCUy8wNDYyNzkgTW9iaWxlIFNhZmFyaS81MzcuMzZcIiwvL1BDX1VBLCAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgc2hvd1Byb2dyZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbyA9IGZiYS5nZXRDb29raWUodSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvLmluY2x1ZGVzKCdyZW1lbWJlcj0nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYmEucGFyc2VMYXp5UnVsZSgkJCQoKS5sYXp5UnVsZSgoY28pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9jYWNoZS9KTV9jb29raWUudHh0JywgY28pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9hc3QoJ+i0puWPt+W3sueZu+W9lScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFjayh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgY28pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGNoZWNrLCA1MDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIE1ZX1VSTClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBzZXRSZXN1bHQoZCk7XG4gICAgICAgIH0pLFxuICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcidcbiAgICB9KTtcblxufVxubGV0IG5hdiA9IFtcIummlumhtVwiLFwiQea8q1wiLFwi5YiG57G7XCJdO1xubGV0IGNvbG9ycz0gWyc5RjVGOUYnLCdmN2U4YWEnLCcyMGExNjInXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hdi5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgbXl0aXRsZSA9IG5hdltpXTtcbiAgICAgICAgZC5wdXNoKHtcbiAgICAgICAgICAgIHRpdGxlOiBnZXRNeVZhcignbmF2dGl0bGUnLCBcIummlumhtVwiKSA9PSBteXRpdGxlID8gY29sb3IobXl0aXRsZSxnZXRSYW5nZUNvbG9ycygpKTogbXl0aXRsZSxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKChteXRpdGxlKSA9PiB7XG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXCJuYXZ0aXRsZVwiLCBteXRpdGxlKTtcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcbiAgICAgICAgICAgIH0sIG15dGl0bGUpLFxuICAgICAgICAgICAgY29sX3R5cGU6IFwidGV4dF8zXCJcbiAgICAgICAgfSk7XG4gICAgfVxufVxuaWYgKGdldE15VmFyKCduYXZ0aXRsZScsIFwi6aaW6aG1XCIpID09IFwi6aaW6aG1XCIpIHskLnJlcXVpcmUoXCJoaWtlcjovL3BhZ2Uv6aaW6aG1XCIpfVxuZWxzZSBpZiAoZ2V0TXlWYXIoXCJuYXZ0aXRsZVwiKSA9PSBcIkHmvKtcIikge3ZhciDlrprkvY3kv6Hmga8gPSBbe1xuICAgIOWkp+exu+WumuS9jTogJ2JvZHkmJi5kcm9wZG93bi1tZW51OmhhcyhsaTpoYXMoYTptYXRjaGVzKOWQjOS6uikpKScsXG4gICAg5bCP57G7OiAnYm9keSYmYScsXG59LCB7XG4gICAg5LiA57qn5a6a5L2NOiAnYm9keSYmLmRyb3Bkb3duLW1lbnU6aGFzKGxpOmhhcyhhOm1hdGNoZXMo5LuK5aSpKSkpLDA6MXx8LmRyb3Bkb3duLW1lbnU6aGFzKGxpOmhhcyhhOm1hdGNoZXMo5pyA5pawKSkpLDA6MXx8LmRyb3Bkb3duLW1lbnU6aGFzKGxpOmhhcyhhOm1hdGNoZXMo5pelKSkpLDE6MicsXG4gICAg5bCP57G7OiAnYm9keSYmYScsXG59XTtcbmxldCB0cnVlX3VybCA9IGdldE15VmFyKE1ZX1JVTEUudXJsLGxpbmsrXCIvYWxidW1zP289bXImcGFnZT1cIitwYWdlKVxuaWYgKHRydWVfdXJsLmluY2x1ZGVzKCdwYWdlJykpIHtcbiAgICB0cnVlX3VybCA9IHRydWVfdXJsLnJlcGxhY2UoL3BhZ2U9XFxkKy8sIFwicGFnZT1cIiArIHBhZ2UpO1xufSBlbHNlIHtcbiAgICB0cnVlX3VybCA9IHRydWVfdXJsICsgXCImcGFnZT1cIiArIHBhZ2U7XG59XG5cbk1ZX1VSTCA9IHRydWVfdXJsO1xudmFyIGh0bWwgPSBmZXRjaChNWV9VUkwpO1xuZGMu5byA5ZCv5oqY5Y+gKGZhbHNlKVxuZGMu5byA5ZCv5pCc57SiKGZhbHNlKS7liJvlu7rliqjmgIHliIbnsbso5a6a5L2N5L+h5oGvKVxudmFyIGxpc3QgPSBwZGZhKGh0bWwsICcuY29udGFpbmVyOmhhcyguY29sLXhzLTYpJiYucC1iLTE1Jyk7XG5mb3IgKHZhciBqIGluIGxpc3QpIHtcbiAgICBkLnB1c2goe1xuICAgICAgICB0aXRsZTogc3AocGRmaChsaXN0W2pdLCAnc3BhbiwxJiZUZXh0JykpLFxuICAgICAgICBkZXNjOiBzcChwZGZoKGxpc3Rbal0sICdzcGFuJiZUZXh0JykrJ1xcdFxcdCcrcGRmaChsaXN0W2pdLCAnLmxhYmVsLWNhdGVnb3J5JiZUZXh0JykpLFxuICAgICAgICBpbWc6IHBkZmgobGlzdFtqXSwgJ2ltZyYmZGF0YS1vcmlnaW5hbHx8c3JjfHxkYXRhLXNyYycpLFxuICAgICAgICB1cmw6IGxpbmsrcGRmaChsaXN0W2pdLCAnYSYmaHJlZicpKycjaW1tZXJzaXZlVGhlbWUjI2F1dG9DYWNoZSNAcnVsZT1qczokLnJlcXVpcmUoXCJoaWtlcjovL3BhZ2UvZWpcIiknXG4gICAgfSk7XG59fVxuZWxzZSBpZiAoZ2V0TXlWYXIoXCJuYXZ0aXRsZVwiKSA9PSBcIuWIhuexu1wiKSB7XG5pZiAoTVlfUEFHRSA9PSAxKXtcbmQucHVzaCh7XG50aXRsZSA6XCLnpoHmvKvlpKnloIJcIixcbmNvbF90eXBlOiBcInJpY2hfdGV4dFwiLFxufSlcbmQucHVzaCh7XG4gICAgICAgIHRpdGxlOiBcIuavj+WRqOW/heeci1wiLFxuICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvYms/cGFnZT1meXBhZ2Ujbm9SZWNvcmRIaXN0b3J5IyNub0hpc3RvcnkjJyxcbiAgICAgICAgY29sX3R5cGU6IFwiZmxleF9idXR0b25cIixcbn0se1xuICAgICAgICB0aXRsZTogXCLmjpLooYzmppxcIixcbiAgICAgICAgdXJsOiBcImhpa2VyOi8vcGFnZS9yYW5rP3BhZ2U9ZnlwYWdlI25vUmVjb3JkSGlzdG9yeSMjbm9IaXN0b3J5I1wiLFxuICAgICAgICBjb2xfdHlwZTogXCJmbGV4X2J1dHRvblwiLFxufSx7XG4gICAgICAgIHRpdGxlOiBcIkjliqjnlLtcIixcbiAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL0g/cGFnZT1meXBhZ2Ujbm9SZWNvcmRIaXN0b3J5IyNub0hpc3RvcnkjJyxcbiAgICAgICAgY29sX3R5cGU6IFwiZmxleF9idXR0b25cIixcbn0se1xuICAgIHRpdGxlOiBcIkpN5paH5bqTXCIsXG4gICAgdXJsOiAnaGlrZXI6Ly9wYWdlL0xpYnJhcnk/cGFnZT1meXBhZ2Ujbm9SZWNvcmRIaXN0b3J5IyNub0hpc3RvcnkjJyxcbiAgICBjb2xfdHlwZTogXCJmbGV4X2J1dHRvblwiXG59KVxudmFyIGh0bWwgPSBmZXRjaChsaW5rKycvdGhlbWUvJyk7XG4vKlxudmFyIEhvdCA9IHBkZmEoaHRtbCwnYm9keSYmLmNvbC1tZC0zLDA6MScpO1xuICAgICBIb3QuZm9yRWFjaCgoZGF0YSkgPT4ge1xuZC5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHRpdGxlOiBzcChwZGZoKGRhdGEsICdzcGFuJiZUZXh0JykpLFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcInJpY2hfdGV4dFwiLFxyXG4gICAgICAgICAgICB9KTsgXG52YXIgaXRlbSA9IHBkZmEoZGF0YSwgJ2JvZHkmJmEnKTtcclxuICAgICAgICAgICAgaXRlbS5mb3JFYWNoKChkYXRhcykgPT4ge1xudmFyIHRpdGxlPSBzcChwZGZoKGRhdGFzLCAnYSYmVGV4dCcpKTtcbnZhciB1cmwgPSBsaW5rK1wiL3NlYXJjaC9waG90b3M/c2VhcmNoX3F1ZXJ5PVwiK3RpdGxlK1wiJm1haW5fdGFnPTAmbz1tdiZ0PWEmcGFnZT1cIjtcclxuICAgICAgICAgICAgICAgIGQucHVzaCh7IFxyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB1cmwrJ2Z5cGFnZSNmdWxsVGhlbWUjI25vSGlzdG9yeSNAcnVsZT1qczokLnJlcXVpcmUoXCJoaWtlcjovL3BhZ2Uvc2VhcmNoXCIpJyxcclxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXCJmbGV4X2J1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICBleHRyYTp7XG4gICAgICAgICAgICB0aXRsZTogdGl0bGUsXG4gICAgICAgICAgICB1cmw6IHVybFxuICAgICAgICAgfVxufSk7XG59KVxufSlcbiovXG52YXIgTGFiID0gcGRmYShodG1sLCdib2R5JiYucm93OmhhcyguYnRuLXRvb2xiYXIpOm5vdCg6bWF0Y2hlcyjnsbvliKt85o6S6KGMKSknKTtcclxuICAgICAgICBMYWIuZm9yRWFjaCgoZGF0YSkgPT4ge1xuICAgICAgICAgICBkLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgdGl0bGU6IHNwKHBkZmgoZGF0YSwgJ2g0JiZUZXh0JykpLFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcInJpY2hfdGV4dFwiLFxyXG4gICAgICAgICAgICB9KTsgICAgICAgICAgICBcclxuICAgICAgICAgICAgdmFyIGl0ZW0gPSBwZGZhKGRhdGEsICcucm93JiZsaScpO1xyXG4gICAgICAgICAgICBpdGVtLmZvckVhY2goKGRhdGFzKSA9PiB7XG52YXIgdGl0bGU9IHNwKHBkZmgoZGF0YXMsICdhJiZUZXh0JykpO1xuICAgICAgICAgICAgICAgIGQucHVzaCh7IFxyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAgICAgICAgICAgICAgICAgICAnaGlrZXI6Ly9wYWdlL3NlYXJjaD90aXRsZT0nK3RpdGxlKycmcGFnZT1meXBhZ2UjZnVsbFRoZW1lIyNub0hpc3RvcnkjJyxcclxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXCJmbGV4X2J1dHRvblwiLFxufSk7XG59KVxufSlcbn1cbn1cbnNldFJlc3VsdChkKTsiLCJzZWFyY2hfdXJsIjoiaGlrZXI6Ly9lbXB0eSMjL3NlYXJjaC9waG90b3M/c2VhcmNoX3F1ZXJ5PSoqJm1haW5fdGFnPTAmbz1tdiZ0PWEmcGFnZT1meXBhZ2UiLCJncm91cCI6IiPvuI/ig6PikaLmvKvnlLsiLCJzZWFyY2hGaW5kIjoianM6XG52YXIgZCA9IFtdO1xudmFyIFVSTCA9IGNvbmZpZy5ob3N0K01ZX1VSTC5yZXBsYWNlKCdoaWtlcjovL2VtcHR5IyMnLClcbnZhciBodG1sID0gZmV0Y2goVVJMKTtcbnJjKGZldGNoUEMoJ2h0dHBzOi8vZ2l0ZWUuY29tL21pc3R5d2F0ZXIvaGlrZXJfaW5mby9yYXcvbWFzdGVyL2dpdGh1YnByb3h5Lmpzb24nKSArICdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbWlzdHl3YXRlci9oaWtlci9tYWluL2YnLCAyNCk7XG52YXIgbGlzdCA9IHBkZmEoaHRtbCwgJy5jb250YWluZXI6aGFzKC5jb2wteHMtNikmJi5wLWItMTUnKTtcbmZvciAodmFyIGogaW4gbGlzdCkge1xuICAgIGQucHVzaCh7XG4gICAgICAgIHRpdGxlOiBzcChwZGZoKGxpc3Rbal0sICdzcGFuLDEmJlRleHQnKSksXG4gICAgICAgIGRlc2M6IHNwKHBkZmgobGlzdFtqXSwgJ3NwYW4mJlRleHQnKSsnXFx0XFx0JytwZGZoKGxpc3Rbal0sICcubGFiZWwtY2F0ZWdvcnkmJlRleHQnKSksXG4gICAgICAgIGltZzogcGRmaChsaXN0W2pdLCAnaW1nJiZkYXRhLW9yaWdpbmFsJyksXG4gICAgICAgIHVybDogZ2V0VmFyKCdsaW5rJykrcGRmaChsaXN0W2pdLCAnYSYmaHJlZicpKycjaW1tZXJzaXZlVGhlbWUjI2F1dG9DYWNoZSNAcnVsZT1qczokLnJlcXVpcmUoXCJoaWtlcjovL3BhZ2UvZWpcIiknXG4gICAgfSk7XG59XG5zZXRSZXN1bHQoZCk7IiwiZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMSIsImRldGFpbF9maW5kX3J1bGUiOiIiLCJzZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMSIsInNkZXRhaWxfZmluZF9ydWxlIjoiIiwidWEiOiJtb2JpbGUiLCJwcmVSdWxlIjoibGV0IHRpbWUgPSBuZXcgRGF0ZSgpLmdldERhdGUoKS50b1N0cmluZygpO1xubGV0IGZiID0gJ2h0dHBzOi8vam1jbW9taWMuZ2l0aHViLmlvLyc7XG5sZXQgZmJyZXEgPSBKU09OLnBhcnNlKHJlcXVlc3QoZ2V0SXRlbSgnbGluaycsICdodHRwczovLzE4Y29taWMtcGFsd29ybGQuY2x1YicpLCB7XG4gICAgICAgICAgICB3aXRoSGVhZGVyczogdHJ1ZSxcbiAgICAgICAgICAgIG9ubHlIZWFkZXJzOiB0cnVlXG4gICAgICAgIH0pKTtcbiAgICAgICAgLy9sb2coZmJyZXEuc3RhdHVzQ29kZSlcbmlmIChnZXRJdGVtKCd0aW1lJywgbmV3IERhdGUoKS5nZXREYXRlKCkudG9TdHJpbmcoKSkgIT0gdGltZSB8fCBmYnJlcS5zdGF0dXNDb2RlICE9PSAyMDApIHtcbiAgICBsZXQgZmFidSA9IHJlcXVlc3QoZmIpO1xuICAgIGxldCBsaW5rcyA9IHBkZmEoZmFidSwgJ2JvZHkmJmFbXmhyZWZdOm5vdCguX19jZl9lbWFpbF9fKSw0OjcnKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmtzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBocmVmID0gcGQobGlua3NbaV0sICdhJiZocmVmJyxmYik7XG4gICAgICAgIGxldCBsaW5rID0gcmVxdWVzdChocmVmKS5tYXRjaCgvaHR0cHM6XFwvXFwvW15cXFwiXSsvKVswXTtcbiAgICAgICAgbGV0IHJlcSA9IEpTT04ucGFyc2UocmVxdWVzdChsaW5rLCB7XG4gICAgICAgICAgICB3aXRoSGVhZGVyczogdHJ1ZSxcbiAgICAgICAgICAgIG9ubHlIZWFkZXJzOiB0cnVlXG4gICAgICAgIH0pKTtcblxuICAgICAgICBpZiAocmVxLnN0YXR1c0NvZGUgPT0gMjAwKSB7XG4gICAgc2V0SXRlbSgndGltZScsIHRpbWUpO1xuICAgIHNldEl0ZW0oJ2xpbmsnLCBsaW5rKTtcbiAgICB0b2FzdCgn5pu05paw5Z+f5ZCNJyk7XG4gICAgbG9nKCfmm7TmlrDln5/lkI0nKTtcbiAgICBsb2cobGluayk7XG4gICAgYnJlYWtcbiAgICB9XG4gICAgfVxuICAgIH1cbmluaXRDb25maWcoe1xuICAgIGhvc3Q6IGdldEl0ZW0oJ2xpbmsnLCAnaHR0cHM6Ly8xOGNvbWljLXBhbHdvcmxkLmNsdWInKVxufSk7IiwicGFnZXMiOiJbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcImRcIixcInBhdGhcIjpcImRcIixcInJ1bGVcIjpcImpzOlxcbmNvbnN0IEJ5dGVBcnJheU91dHB1dFN0cmVhbSA9IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtO1xcbmNvbnN0IEJ5dGVBcnJheUlucHV0U3RyZWFtID0gamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTtcXG5jb25zdCBCaXRtYXAgPSBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDtcXG5jb25zdCBCaXRtYXBGYWN0b3J5ID0gYW5kcm9pZC5ncmFwaGljcy5CaXRtYXBGYWN0b3J5O1xcbmNvbnN0IENhbnZhcyA9IGFuZHJvaWQuZ3JhcGhpY3MuQ2FudmFzO1xcbiQuZXhwb3J0cyA9IGZ1bmN0aW9uKHBpY1VybCwgaW1nSW5wdXRTdHJlYW0pIHtcXG4gICAgLy9sZXQgcGljVXJsID0gcGljVXJsO1xcbiAgICBwaWNVcmwubWF0Y2goL3Bob3Rvc1xcXFwvKFxcXFxkKyk/XFxcXC8oXFxcXGQrKT8vKTtcXG4gICAgbGV0IGJvb2tJZCA9IFJlZ0V4cC4kMTtcXG4gICAgbGV0IGltZ0lkID0gUmVnRXhwLiQyO1xcbiAgICBpZighYm9va0lkfHwhaW1nSWR8fE51bWJlcihib29rSWQpPD0yMjA5ODApIHJldHVybiBpbWdJbnB1dFN0cmVhbTtcXG4gICAgaWYgKE51bWJlcihib29rSWQpID49IFxcXCIyNjg4NTBcXFwiICYmIE51bWJlcihib29rSWQpIDw9IFxcXCI0MjE5MjVcXFwiKSB7XFxyXFxuICAgIHZhciAkbnVtID0gcGFyc2VJbnQobWQ1KGJvb2tJZCArIGltZ0lkKS5zbGljZSgtMSkuY2hhckNvZGVBdCgpICUgMTApICogMiArIDI7XFxyXFxufSBlbHNlIGlmIChOdW1iZXIoYm9va0lkKSA+IFxcXCI0MjE5MjVcXFwiKSB7XFxyXFxuICAgIHZhciAkbnVtID0gcGFyc2VJbnQobWQ1KGJvb2tJZCArIGltZ0lkKS5zbGljZSgtMSkuY2hhckNvZGVBdCgpICUgOCkgKiAyICsgMjtcXHJcXG59IGVsc2Uge1xcclxcbiAgICB2YXIgJG51bSA9IFxcXCIxMFxcXCI7XFxyXFxufVxcbiAgIC8qIGlmIChOdW1iZXIoYm9va0lkKSA+PSAyNjg4NTApIHtcXG4gICAgICAgIGxldCAkbWQ1ID0gbWQ1KGJvb2tJZCArIGltZ0lkKTtcXG4gICAgICAgIGxldCAkYXNjaWkgPSAkbWQ1LnN1YnN0cigtMSkuY2hhckNvZGVBdCgwKSArIFxcXCJcXFwiO1xcbiAgICAgICAgbGV0ICRsYXN0ID0gTnVtYmVyKCRhc2NpaS5zdWJzdHIoLTEpKTtcXG4gICAgICAgIHZhciAkbnVtID0gKCRsYXN0ICsgMSkgKiAyO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgdmFyICRudW0gPSAxMDtcXG4gICAgfSovXFxuICAgIC8qbGV0IGltZ0lucHV0U3RyZWFtID0gZmV0Y2gocGljVXJsLCB7XFxuICAgICAgICBpbnB1dFN0cmVhbTogdHJ1ZSxcXG4gICAgfSk7XFxuICAgICovXFxuICAgIC8vbGV0IGltZ0lucHV0U3RyZWFtID0gaW5wdXQ7XFxuICAgIGxldCBpbWdCaXRtYXAgPSBCaXRtYXBGYWN0b3J5LmRlY29kZVN0cmVhbShpbWdJbnB1dFN0cmVhbSk7XFxuICAgIGNsb3NlTWUoaW1nSW5wdXRTdHJlYW0pO1xcblxcbiAgICBsZXQgd2lkdGggPSBpbWdCaXRtYXAuZ2V0V2lkdGgoKTtcXG4gICAgbGV0IGhlaWdodCA9IGltZ0JpdG1hcC5nZXRIZWlnaHQoKTtcXG4gICAgbGV0IHkgPSBNYXRoLmZsb29yKGhlaWdodCAvICRudW0pO1xcbiAgICBsZXQgcmVtYWluZGVyID0gaGVpZ2h0ICUgJG51bTtcXG5cXG4gICAgbGV0IG5ld0ltZ0JpdG1hcCA9IEJpdG1hcC5jcmVhdGVCaXRtYXAod2lkdGgsIGhlaWdodCwgQml0bWFwLkNvbmZpZy5BUkdCXzg4ODgpO1xcbiAgICBsZXQgY2FudmFzID0gbmV3IENhbnZhcyhuZXdJbWdCaXRtYXApO1xcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSAkbnVtOyBpKyspIHtcXG4gICAgICAgIGxldCBoID0gaSA9PT0gJG51bSA/IHJlbWFpbmRlciA6IDA7XFxuICAgICAgICBjYW52YXMuZHJhd0JpdG1hcChCaXRtYXAuY3JlYXRlQml0bWFwKGltZ0JpdG1hcCwgMCwgeSAqIChpIC0gMSksIHdpZHRoLCB5ICsgaCksIDAsIGhlaWdodCAtIHkgKiBpIC0gaCwgbnVsbCk7XFxuICAgIH1cXG4gICAgbGV0IGJhb3MgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7XFxuICAgIG5ld0ltZ0JpdG1hcC5jb21wcmVzcyhCaXRtYXAuQ29tcHJlc3NGb3JtYXQuUE5HLCAxMDAsIGJhb3MpO1xcbiAgICByZXR1cm4gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGJhb3MudG9CeXRlQXJyYXkoKSk7XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5LiA57qnXCIsXCJwYXRoXCI6XCJ5alwiLFwicnVsZVwiOlwianM6XFxuLypcXG5ieSDOsSh6ZXRhbHBoYSlcXG7kuIDnuqflsIHoo4VcXG7liqjmgIHliIbnsbsg5YiX6KGo5Yib5bu6IOiHquWKqOS4i+S4gOmhtVxcbnZlciAyMDIzMTAxNyAxLjBcXG4qL1xcblxcbi8v6ZqP5py66aKc6ImyXFxudmFyIGdldFJhbmdlQ29sb3JzID0gZnVuY3Rpb24oKSB7XFxuICAgIHJldHVybiAnIycgKyAoJzAwMDAwJyArIChNYXRoLnJhbmRvbSgpICogMHgxMDAwMDAwIDw8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTtcXG59XFxuLy9yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvamlhblxcXCIpO1xcbnJjKGZldGNoUEMoJ2h0dHBzOi8vZ2l0ZWUuY29tL21pc3R5d2F0ZXIvaGlrZXJfaW5mby9yYXcvbWFzdGVyL2dpdGh1YnByb3h5Lmpzb24nKSArICdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbWlzdHl3YXRlci9oaWtlci9tYWluL2YnLCAyNCk7XFxuLy/liqjmgIHliIbnsbtcXG5mdW5jdGlvbiBkeW5hbWljQ2xhc3Mob3B0aW9ucykge1xcbiAgICBjb25zdCBvYmogPSB7XFxuICAgICAgICAvL+m7mOiupOWAvFxcbiAgICAgICAgbGF5b3V0OiBcXFwidW5kZWZpbmVkXFxcIixcXG4gICAgICAgIGh0bWw6IFxcXCJlbXB0eVxcXCIsXFxuICAgICAgICBwYWdlOiAwLFxcbiAgICAgICAg5YiG57G76aKc6ImyOiBcXFwiI0ZBNzI5OFxcXCIsXFxuICAgICAgICDmipjlj6A6IFxcXCLigJzigJzigJ3igJ08Yj5cXFwiICsgXFxcIuKIp1xcXCIuZm9udGNvbG9yKFxcXCIjMWFhZDE5XFxcIikgKyBcXFwiPC9iPlxcXCIsXFxuICAgICAgICDlsZXlvIA6IFxcXCLigJzigJzigJ3igJ08Yj5cXFwiICsgXFxcIuKIqFxcXCIuZm9udGNvbG9yKFxcXCIjRkYwMDAwXFxcIikgKyBcXFwiPC9iPlxcXCIsXFxuICAgICAgICBvcGVuOiB0cnVlLFxcbiAgICAgICAgc3RhdGU6IE1ZX1JVTEUudXJsLFxcbiAgICAgICAgc2VhcmNoOiBmYWxzZSxcXG4gICAgICAgIGNsZWFyczogW10sXFxuICAgICAgICBjbGVhcmFsbDogW1xcXCJ5aV9maXJzdHBhZ2VcXFwiXSxcXG4gICAgICAgIGRlYnVnOiBmYWxzZSxcXG5cXG4gICAgICAgIOmihOiuvihwYXJhbSkge1xcbiAgICAgICAgICAgIGlmIChwYXJhbSA9PSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICAgICAgcGFyYW0gPSBbXTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgT2JqZWN0LmtleXMocGFyYW0pLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XFxuICAgICAgICAgICAgICAgIC8vIOWvueavj+S4quWxnuaAp+WQjeaJp+ihjOaTjeS9nFxcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBhcmFtW3Byb3BlcnR5XTsgLy8g6I635Y+W5bGe5oCn5YC8XFxuICAgICAgICAgICAgICAgIC8vIOWcqOi/memHjOaJp+ihjOaCqOeahOaTjeS9nFxcbiAgICAgICAgICAgICAgICB0aGlzW3Byb3BlcnR5XSA9IHZhbHVlO1xcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cocHJvcGVydHkgKyBcXFwiOlxcXCIgKyB2YWx1ZSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0sXFxuICAgICAgICBldmFsSlNSdWxlKGl0ZW0sXFxuICAgICAgICAgICAganNSdWxlKSB7XFxuICAgICAgICAgICAgbGV0IHJ1bGUgPSBqc1J1bGUucmVwbGFjZShcXFwiQGpzOlxcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICBydWxlID0gcnVsZS50cmltKCk7XFxuICAgICAgICAgICAgLy9sb2coJC5zdHJpbmdpZnkocnVsZSkpXFxuICAgICAgICAgICAgbGV0IGlucHV0ID0gaXRlbTtcXG4gICAgICAgICAgICBpZiAocnVsZS5zdGFydHNXaXRoKFxcXCIoXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgZXZhbChcXFwicmVzdWx0ID0gXFxcIiArIHJ1bGUpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIC8qKlxcbiAgICAgICAgICAgICAgICAgKiDov5jljp/miJAgJC50b1N0cmluZyguLi4pIOeahOacgOe7iOe7k+aenO+8jOi+vuWIsOacgOe7iOWkhOeQhuaWueW8j+i3n+S4iumdoueahCBpZiDkuIDoh7TnmoTnm67nmoRcXG4gICAgICAgICAgICAgICAgICovXFxuICAgICAgICAgICAgICAgIGV2YWwoXFxcInJlc3VsdCA9IFxcXCIgKyBcXFwiKCgpID0+IHtcXFwiICsgcnVsZSArIFxcXCJ9KSgpXFxcIik7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgfHwgXFxcIlxcXCI7XFxuICAgICAgICB9LFxcbiAgICAgICAgZ2V0VGl0bGUoc3JjLCBjYXRlZ29yeSkge1xcbiAgICAgICAgICAgIGxldCB0aXRsZSA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgIGxldCB0aXRsZVJ1bGUgPSBjYXRlZ29yeSB8fCBcXFwiYSYmVGV4dFxcXCI7XFxuICAgICAgICAgICAgaWYgKHRpdGxlUnVsZS5zdGFydHNXaXRoKFxcXCJAanM6XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgdGl0bGUgPSBzcCh0aGlzLmV2YWxKU1J1bGUoc3JjLCB0aXRsZVJ1bGUpKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB0aXRsZSA9IHNwKHBhcnNlRG9tRm9ySHRtbChzcmMsIHRpdGxlUnVsZSkpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gdGl0bGUgfHwgXFxcIlxcXCI7XFxuICAgICAgICB9LFxcbiAgICAgICAgZ2V0VXJsKHNyYywgY2F0ZWdvcnkpIHtcXG4gICAgICAgICAgICBsZXQgdXJsID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgbGV0IHVybFJ1bGUgPSBjYXRlZ29yeS7pk77mjqUgfHwgXFxcImEmJmhyZWZcXFwiO1xcbiAgICAgICAgICAgIGlmICh1cmxSdWxlLnN0YXJ0c1dpdGgoXFxcIkBqczpcXFwiKSkge1xcbiAgICAgICAgICAgICAgICB1cmwgPSB0aGlzLmV2YWxKU1J1bGUoc3JjLCB1cmxSdWxlKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB1cmwgPSBwZChzcmMsIHVybFJ1bGUpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhdGVnb3J5LumTvuaOpeWkhOeQhiA9PSBcXFwiZnVuY3Rpb25cXFwiKSB7XFxuICAgICAgICAgICAgICAgIHVybCA9IGNhdGVnb3J5LumTvuaOpeWkhOeQhih1cmwpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gdXJsIHx8IFxcXCJcXFwiO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGlzTnVsbChwYXJhbSkge1xcbiAgICAgICAgICAgIGlmIChwYXJhbSA9PSBudWxsKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgICB9LFxcbiAgICAgICAgaXNCb29sZWFuKHZhcmlhYmxlKSB7XFxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YXJpYWJsZSAhPT0gXFxcImJvb2xlYW5cXFwiKSB7XFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi5byA5ZCv5oqY5Y+g6K+35Lyg5YWl5biD5bCU5YC8XFxcIik7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSxcXG4gICAgICAgIOa4hemZpChsaXN0KSB7XFxuICAgICAgICAgICAgaWYgKHRoaXMuaXNOdWxsKGxpc3QpKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAobGlzdC5jb25zdHJ1Y3RvciA9PSBTdHJpbmcpIHtcXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLmuIXpmaTmiqXplJk66K+35Lyg5YiX6KGoXFxcIik7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHRoaXMuY2xlYXJzID0gbGlzdDtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgIH0sXFxuICAgICAgICDlhajmuIUobGlzdCkge1xcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTnVsbChsaXN0KSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdmFyIGMgPSB0aGlzLmNsZWFyYWxsO1xcbiAgICAgICAgICAgIGxpc3QgPSBjLmNvbmNhdChsaXN0KTtcXG4gICAgICAgICAgICB0aGlzLmNsZWFyYWxsID0gbGlzdDtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgIH0sXFxuICAgICAgICDmupDnoIEoaW5wdXQpIHtcXG4gICAgICAgICAgICB0aGlzLmh0bWwgPSBpbnB1dDtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgIH0sXFxuICAgICAgICDnlYzpnaIoaW5wdXQpIHtcXG4gICAgICAgICAgICB0aGlzLmxheW91dCA9IGlucHV0O1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgfSxcXG4gICAgICAgIOmhteeggShpbnB1dCkge1xcbiAgICAgICAgICAgIHRoaXMucGFnZSA9IGlucHV0O1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgfSxcXG4gICAgICAgIOeKtuaAgShpbnB1dCkge1xcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBpbnB1dDtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgIH0sXFxuICAgICAgICDlvIDlkK/mkJzntKIoaW5wdXQpIHtcXG4gICAgICAgICAgICBpZiAoaW5wdXQgPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgICAgIGlucHV0ID0gdHJ1ZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdGhpcy5zZWFyY2ggPSBpbnB1dDtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgIH0sXFxuICAgICAgICDlvIDlkK/mipjlj6AoaW5wdXQpIHtcXG4gICAgICAgICAgICBpZiAoaW5wdXQgPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgICAgIGlucHV0ID0gdHJ1ZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdGhpcy5pc0Jvb2xlYW4oaW5wdXQpO1xcbiAgICAgICAgICAgIHRoaXMub3BlbiA9IGlucHV0O1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xcbiAgICAgICAgfSxcXG4gICAgICAgIHNldFRpdGxlKGssIGksIHQpIHtcXG4gICAgICAgICAgICByZXR1cm4gayA9PSBpID8gXFxcIuKAnOKAnOKAneKAnVxcXCIgKyB0LmZvbnRjb2xvcih0aGlzLuWIhuexu+minOiJsikgOiB0O1xcbiAgICAgICAgfSxcXG4gICAgICAgIGFjdGlvbihvYmopIHtcXG4gICAgICAgICAgICByZXR1cm4gW3tcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLmuIXpmaTnirbmgIFcXFwiLFxcbiAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygob2JqKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBsb2cob2JqKTtcXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIob2JqLnN0YXRlKTtcXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoXFxcImhlYWQuY2F0ZVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcignY2F0ZV9idXR0b24nKTtcXG4gICAgICAgICAgICAgICAgICAgIG9iai5hbGwuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoaXRlbSk7XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIG9iai5jbC5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgfSwgb2JqKSxcXG4gICAgICAgICAgICB9LCBdO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGNoZWNrUGFyYW0oKSB7XFxuICAgICAgICAgICAgdmFyIG9iaiA9IHt9O1xcbiAgICAgICAgICAgIGlmICh0aGlzLnBhZ2UgPT0gMCAmJiB0eXBlb2YgcGFnZSA9PSBcXFwidW5kZWZpbmVkXFxcIikge1xcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuivt+S8oOWFpemhteeggVxcXCIpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFnZSA9PSBcXFwidW5kZWZpbmVkXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgb2JqW1xcXCLpobXnoIFcXFwiXSA9IHRoaXMucGFnZTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIG9ialtcXFwi6aG156CBXFxcIl0gPSBwYWdlO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmICh0aGlzLmh0bWwgPT0gXFxcImVtcHR5XFxcIiAmJiB0eXBlb2YgaHRtbCA9PSBcXFwidW5kZWZpbmVkXFxcIikge1xcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuivt+S8oOWFpea6kOeggVxcXCIpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaHRtbCA9PSBcXFwidW5kZWZpbmVkXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgb2JqW1xcXCLmupDnoIFcXFwiXSA9IHRoaXMuaHRtbDtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIG9ialtcXFwi5rqQ56CBXFxcIl0gPSBodG1sO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmICh0aGlzLmxheW91dCA9PSBcXFwidW5kZWZpbmVkXFxcIiAmJiB0eXBlb2YgZCA9PSBcXFwidW5kZWZpbmVkXFxcIikge1xcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuivt+S8oOWFpeeVjOmdolxcXCIpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZCA9PSBcXFwidW5kZWZpbmVkXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgb2JqW1xcXCLnlYzpnaJcXFwiXSA9IHRoaXMubGF5b3V0O1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgb2JqW1xcXCLnlYzpnaJcXFwiXSA9IGQ7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIG9iajtcXG4gICAgICAgIH0sXFxuICAgICAgICDliJvlu7rliqjmgIHliIbnsbsocnVsZU9iaikge1xcbiAgICAgICAgICAgIGxldCBpdGVtcyA9IFtdO1xcbiAgICAgICAgICAgIGxldCBjYXRlcyA9IFtdO1xcbiAgICAgICAgICAgIGlmIChydWxlT2JqID09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgICAgICBydWxlT2JqID0gW107XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIC8v5Yid5aeL5YyW5Y+Y6YeP5byA5aeLXFxuICAgICAgICAgICAgY29uc3QgcGFyYW0gPSB0aGlzLmNoZWNrUGFyYW0oKTtcXG4gICAgICAgICAgICBjb25zdCBwYWdlID0gcGFyYW0u6aG156CBO1xcbiAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBwYXJhbS7mupDnoIE7XFxuICAgICAgICAgICAgY29uc3QgZCA9IHBhcmFtLueVjOmdojtcXG4gICAgICAgICAgICBjb25zdCDnirbmgIEgPSB0aGlzLnN0YXRlO1xcbiAgICAgICAgICAgIGNvbnN0IHNlYXJjaCA9IHRoaXMuc2VhcmNoO1xcbiAgICAgICAgICAgIGNvbnN0IGVtcHR5ID0gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgIGNvbnN0IOaKmOWPoOeKtuaAgSA9IHRoaXMub3BlbjtcXG4gICAgICAgICAgICB2YXIg5bGV5byAID0gdGhpcy7lsZXlvIA7XFxuICAgICAgICAgICAgdmFyIOaKmOWPoCA9IHRoaXMu5oqY5Y+gO1xcbiAgICAgICAgICAgIHZhciDlhajmuIUgPSB0aGlzLmNsZWFyYWxsO1xcbiAgICAgICAgICAgIHZhciDmuIXpmaQgPSB0aGlzLmNsZWFycztcXG4gICAgICAgICAgICAvL+WIneWni+WMluWPmOmHj+e7k+adn1xcbiAgICAgICAgICAgIGxldCBpbml0X2NhdGUgPSBuZXcgQXJyYXkoMjApLmZpbGwoXFxcIjBcXFwiKTtcXG4gICAgICAgICAgICBjb25zdCBmb2xkID0gZ2V0TXlWYXIoTVlfUlVMRS5ncm91cCwgXFxcIjBcXFwiKTtcXG4gICAgICAgICAgICBjb25zdCBjYXRlX3RlbXAgPSBKU09OLnBhcnNlKFxcbiAgICAgICAgICAgICAgICBnZXRNeVZhcihcXFwiaGVhZC5jYXRlXFxcIiwgSlNPTi5zdHJpbmdpZnkoaW5pdF9jYXRlKSlcXG4gICAgICAgICAgICApO1xcbiAgICAgICAgICAgIGlmIChzZWFyY2ggJiYgcGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiJ2hpa2VyOi8vc2VhcmNoP3J1bGU9XFxcIiArIE1ZX1JVTEUudGl0bGUgKyBcXFwiJnM9JytpbnB1dFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi5pCc57Si5YWz6ZSu6K+NXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKFxcXCJrZXl3b3JkXFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImtleXdvcmRcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IFtdO1xcbiAgICAgICAgICAgIHJ1bGVPYmouZm9yRWFjaCgoeCkgPT4ge1xcbiAgICAgICAgICAgICAgICB2YXIgbGlzdCA9IFtdO1xcbiAgICAgICAgICAgICAgICAvL2xvZyh4KVxcbiAgICAgICAgICAgICAgICBpZiAoeC5qc29uICE9IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgICAgICAgICAgeC5qc29uLm1hcChrID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yaWVzLnB1c2goSlNPTi5zdHJpbmdpZnkoaykucmVwbGFjZSgvXlxcXFxbfFxcXFxdJC9nLCAnJykpXFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgLy9jYXRlZ29yaWVzLnB1c2goeC5qc29uKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmICh4LuS4gOe6p+WumuS9jSkge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHgu5LiA57qn5a6a5L2NLnN0YXJ0c1dpdGgoXFxcIkBqczpcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSB0aGlzLmV2YWxKU1J1bGUoaHRtbCwgeC7kuIDnuqflrprkvY0pO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gcGRmYShodG1sLCB4LuS4gOe6p+WumuS9jSk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKHgu5aSn57G75a6a5L2NKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoeC7lpKfnsbvlrprkvY0uc3RhcnRzV2l0aChcXFwiQGpzOlxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IHRoaXMuZXZhbEpTUnVsZShodG1sLCB4LuWkp+exu+WumuS9jSk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSBbcGRmYShodG1sLCB4LuWkp+exu+WumuS9jSkuam9pbignXFxcXG4nKV07XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgLy8tLemineWkluWkhOeQhi0tXFxuICAgICAgICAgICAgICAgIGlmICgoJ+WinuWKoCcgaW4geCkpIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh4LuWinuWKoC5jb25zdHJ1Y3RvciA9PSBTdHJpbmcpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB4LuWinuWKoCA9IGV2YWwoeC7lop7liqApO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgc2xpc3QgPSB4LuWinuWKoC5jb25jYXQoc2xpc3QpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmICgoJ+ihpeWFhScgaW4geCkpIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh4LuihpeWFhS5jb25zdHJ1Y3RvciA9PSBTdHJpbmcpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB4LuihpeWFhSA9IGV2YWwoeC7ooaXlhYUpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgc2xpc3QgPSBzbGlzdC5jb25jYXQoeC7ooaXlhYUpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIC8vLS3pop3lpJblpITnkIYtLVxcbiAgICAgICAgICAgICAgICB2YXIg5LiA57qnID0gbGlzdC5tYXAoKHMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBzbGlzdCA9IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoXFxcIuWwj+exu1xcXCIgaW4geCkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB4LuWwj+exuyA9IFxcXCJib2R5JiZhOm5vdCg6bWF0Y2hlcyjpppbpobUpKTpub3QoYTpub3QoW2hyZWZdKSlcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKHgu5bCP57G7LnN0YXJ0c1dpdGgoXFxcIkBqczpcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNsaXN0ID0gdGhpcy5ldmFsSlNSdWxlKHMsIHgu5bCP57G7KTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2xpc3QgPSBwZGZhKHMsIHgu5bCP57G7KTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHZhciDlrprkvY0gPSBzbGlzdC5tYXAoKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSBzcCh0aGlzLmdldFRpdGxlKGl0ZW0sIHgu5qCH6aKYKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVybCA9IHRoaXMuZ2V0VXJsKGl0ZW0sIHgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB1cmxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmopO1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4g5a6a5L2NO1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgLy9sb2co5LiA57qnKVxcbiAgICAgICAgICAgICAgICAvL2xvZyjkuIDnuqcubGVuZ3RoKVxcbiAgICAgICAgICAgICAgICBpZiAo5LiA57qnLmxlbmd0aCA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICBjYXRlZ29yaWVzLnB1c2go5LiA57qnLmpvaW4oXFxcIlxcXFxuXFxcIikpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAg5LiA57qnLmZvckVhY2goKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yaWVzLnB1c2goaXRlbS5qb2luKFxcXCIsXFxcIikpO1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgLy9sb2coY2F0ZWdvcmllcylcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBpZiAo5oqY5Y+g54q25oCBKSB7XFxuICAgICAgICAgICAgICAgIGlmIChwYWdlID09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBmb2xkID09PSBcXFwiMVxcXCIgPyDmipjlj6AgOiDlsZXlvIAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGl0bGUsIGZvbGQsIHUsIGFsbCwgZXhwcykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbGQgPSBnZXRNeVZhcihNWV9SVUxFLmdyb3VwLCBmb2xkKTtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBb5bGV5byALCDmipjlj6BdID0gZXhwcztcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb2xkID09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3ggPSBmaW5kSXRlbXNCeUNscyh0aXRsZSArICdjYXRlX2J1dHRvbicpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKCdjYXRlX2J1dHRvbicsIGN4KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVJdGVtQnlDbHModGl0bGUgKyAnY2F0ZV9idXR0b24nKTtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN4ID0gc3RvcmFnZTAuZ2V0TXlWYXIoJ2NhdGVfYnV0dG9uJywgW10pLm1hcCh4ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeFsnY29sX3R5cGUnXSA9IHhbJ2NvbF90eXBlJ10gPyB4Wydjb2xfdHlwZSddIDogeFsndHlwZSddO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRJdGVtQWZ0ZXIodGl0bGUgKyAnY2F0ZV9saW5lJywgY3gpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKmFsbC5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoaXRlbSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsqL1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbSh0aXRsZSArICdjYXRlX2V4cCcsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZm9sZCA9PSAxID8g5bGV5byAIDog5oqY5Y+gLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKE1ZX1JVTEUuZ3JvdXAsIGZvbGQgPT09IFxcXCIxXFxcIiA/IFxcXCIwXFxcIiA6IFxcXCIxXFxcIik7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3JlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ZX1JVTEUudGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIOeKtuaAgSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg5YWo5riFLCBb5bGV5byALFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg5oqY5Y+gXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBNWV9SVUxFLnRpdGxlICsgJ2NhdGVfZXhwJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZ0NsaWNrOiB0aGlzLmFjdGlvbih7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTog54q25oCBLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsOiDlhajmuIUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbDog5riF6ZmkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgICAgICBjYXRlZ29yaWVzLmZvckVhY2goKGNhdGVnb3J5LCBpbmRleCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgLy9sb2coY2F0ZWdvcnkpXFxuICAgICAgICAgICAgICAgICAgICBsZXQgc3ViX2NhdGVnb3JpZXMgPSBbXTtcXG4gICAgICAgICAgICAgICAgICAgIC8qaWYgKOWwj+exu+WumuS9jS5pbmNsdWRlcyhcXFwiO1xcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgIHN1Yl9jYXRlZ29yaWVzID0gcGRmYShjYXRlZ29yeSwg5bCP57G75a6a5L2NLnNwbGl0KFxcXCI7XFxcIilbMF0pO1xcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViX2NhdGVnb3JpZXMubGVuZ3RoID09IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJfY2F0ZWdvcmllcyA9IHBkZmEoY2F0ZWdvcnksIOWwj+exu+WumuS9jS5zcGxpdChcXFwiO1xcXCIpWzFdKTtcXG4gICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsqL1xcbiAgICAgICAgICAgICAgICAgICAgLy9sb2coaW5kZXgpXFxuICAgICAgICAgICAgICAgICAgICBzdWJfY2F0ZWdvcmllcyA9IEpTT04ucGFyc2UoYFske2NhdGVnb3J5fV1gKTtcXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nKHN1Yl9jYXRlZ29yaWVzKVxcbiAgICAgICAgICAgICAgICAgICAgLy8gc3ViX2NhdGVnb3JpZXMgPSBwZGZhKGNhdGVnb3J5LCDlsI/nsbvlrprkvY0pO1xcbiAgICAgICAgICAgICAgICAgICAgLy99XFxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL+Wkp+exu1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Yl9jYXRlZ29yaWVzLmZvckVhY2goKGl0ZW0sIGtleSkgPT4ge1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xldCB0aXRsZSA9IHBkZmgoaXRlbSwgX+Wkp+exu+agh+mimCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IHNwKGl0ZW0udGl0bGUpO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIOaOkumZpCAhPSBcXFwidW5kZWZpbmVkXFxcIiAmJiDmjpLpmaQgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gdGl0bGUucmVwbGFjZShuZXdSZWdFeHAo5o6S6ZmkLCBcXFwiZ1xcXCIpLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGpzb24gPSAnJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uID0gaXRlbS51cmw7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbXMgPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlX3RlbXA6IGNhdGVfdGVtcCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleToga2V5LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogcGFnZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyczog5riF6ZmkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbjoganNvbixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlOiDnirbmgIEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxjbGVhcnM6IOWFqOa4hSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sZXQgdXJsID0gcGQoaXRlbSwgX+Wkp+exu+mTvuaOpSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSBpdGVtLnVybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyppZiAo5aSn57G75aSE55CGKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0g5LiA57qn5YiG57G75aSE55CGKHVybCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0qL1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xvZyh1cmwpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHNwKHRoaXMuc2V0VGl0bGUoa2V5LnRvU3RyaW5nKCksIGNhdGVfdGVtcFtpbmRleF0sIHRpdGxlKSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKFxcXCJoaWtlcjovL2VtcHR5I25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgocGFyYW1zKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdfY2F0ZSA9IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuY2xlYXJzLmZvckVhY2goKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoaXRlbSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuYWxsY2xlYXJzLmZvckVhY2goKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoaXRlbSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKCdjYXRlX2J1dHRvbicpO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuY2F0ZV90ZW1wLmZvckVhY2goKGNhdGUsIGluZGV4KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfY2F0ZS5wdXNoKGluZGV4ID09PSAwID8gcGFyYW1zLmtleS50b1N0cmluZygpIDogXFxcIjBcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJoZWFkLmNhdGVcXFwiLCBKU09OLnN0cmluZ2lmeShuZXdfY2F0ZSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmpzb24uY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImR0X1xcXCIgKyBwYXJhbXMuanNvbi50eXBlLCBwYXJhbXMuanNvbi52YWx1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihwYXJhbXMuc3RhdGUsIHBhcmFtcy5qc29uKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBNWV9SVUxFLnRpdGxlICsgJ2NhdGVfbGluZScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy/lsI/nsbtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJfY2F0ZWdvcmllcy5mb3JFYWNoKChpdGVtLCBrZXkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGV4dHJhcG9zID0gZmFsc2U7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qaWYgKGl0ZW0uaW5jbHVkZXMoJ3R5cGU9XFxcIkBleHRyYVxcXCInKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhcG9zID0gdHJ1ZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xvZygn6ZmE5Yqg5a6a5L2NJylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSovXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHRyYXBvcykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gc3AocGRmaChpdGVtLCBcXFwiYSYmVGV4dFxcXCIpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yg5o6S6ZmkICE9IFxcXCJ1bmRlZmluZWRcXFwiICYmIOaOkumZpCAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gdGl0bGUucmVwbGFjZShuZXcgUmVnRXhwKOaOkumZpCwgXFxcImdcXFwiKSwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGpzb24gPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogcGRmaChpdGVtLCBcXFwiYSYmc3RhdGVcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcGRmaChpdGVtLCBcXFwiYSYmdmFsdWVcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3ZhciB0aXRsZSA9IHBkZmgoaXRlbSwg5YiG57G75qCH6aKYKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IGl0ZW0udGl0bGU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIOaOkumZpCAhPSBcXFwidW5kZWZpbmVkXFxcIiAmJiDmjpLpmaQgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHRpdGxlLnJlcGxhY2UobmV3IFJlZ0V4cCjmjpLpmaQsIFxcXCJnXFxcIiksIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqc29uID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnN3aXRjaCAodHJ1ZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIOWIhuexu+mTvuaOpS5pbmNsdWRlcyhcXFwiQEBAXFxcIik6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbiA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHBkZmgoaXRlbSwg5YiG57G76ZO+5o6lLnNwbGl0KFxcXCJAQEBcXFwiKVswXSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcGRmaChpdGVtLCDliIbnsbvpk77mjqUuc3BsaXQoXFxcIkBAQFxcXCIpWzFdKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIOWIhuexu+mTvuaOpS5pbmNsdWRlcyhcXFwiQEBcXFwiKTpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTog5YiG57G76ZO+5o6lLnNwbGl0KFxcXCJAQFxcXCIpWzBdLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHBkZmgoaXRlbSwg5YiG57G76ZO+5o6lLnNwbGl0KFxcXCJAQFxcXCIpWzFdKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24gPSBpdGVtLnVybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBqc29uID0gcGQoaXRlbSwg5YiG57G76ZO+5o6lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0qL1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbiA9IGl0ZW0udXJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp2YXIganNvbj3liIbnsbvpk77mjqUuaW5jbHVkZXMoJ0BAQCcpP3tcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6cGRmaChpdGVtLOWIhuexu+mTvuaOpS5zcGxpdCgnQEBAJylbMF0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6cGRmaChpdGVtLOWIhuexu+mTvuaOpS5zcGxpdCgnQEBAJylbMV0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OnBkKGl0ZW0s5YiG57G76ZO+5o6lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbj3liIbnsbvpk77mjqUuaW5jbHVkZXMoJ0BAJyk/e1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTrliIbnsbvpk77mjqUuc3BsaXQoJ0BAJylbMF0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTpwZGZoKGl0ZW0s5YiG57G76ZO+5o6lLnNwbGl0KCdAQCcpWzFdKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTpwZChpdGVtLOWIhuexu+mTvuaOpSk7Ki9cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFyYW1zID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZV90ZW1wOiBjYXRlX3RlbXAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U6IHBhZ2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uOiBqc29uLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IOeKtuaAgSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbGNsZWFyczog5YWo5riFLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlzLnNldFRpdGxlKGtleS50b1N0cmluZygpLCBjYXRlX3RlbXBbaW5kZXhdLCB0aXRsZSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoXFxcImhpa2VyOi8vZW1wdHlcXFwiICsgXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKHBhcmFtcykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuYWxsY2xlYXJzLmZvckVhY2goKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoaXRlbSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKCdjYXRlX2J1dHRvbicpO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuY2F0ZV90ZW1wW3BhcmFtcy5pbmRleF0gPSBwYXJhbXMua2V5LnRvU3RyaW5nKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJoZWFkLmNhdGVcXFwiLCBKU09OLnN0cmluZ2lmeShwYXJhbXMuY2F0ZV90ZW1wKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMuanNvbi5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiZHRfXFxcIiArIHBhcmFtcy5qc29uLnR5cGUsIHBhcmFtcy5qc29uLnZhbHVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKHBhcmFtcy5zdGF0ZSwgcGFyYW1zLmpzb24pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiBNWV9SVUxFLnRpdGxlICsgJ2NhdGVfYnV0dG9uJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZXMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiBNWV9SVUxFLnRpdGxlICsgJ2NhdGVfYnV0dG9uJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGZvbGQgPT09IFxcXCIxXFxcIiB8fCDmipjlj6DnirbmgIEgPT0gZmFsc2UpIHtcXG4gICAgICAgICAgICAgICAgaXRlbXMgPSBpdGVtcy5jb25jYXQoY2F0ZXMpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAoZm9sZCA9PT0gXFxcIjBcXFwiKSB7XFxuICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKCdjYXRlX2J1dHRvbicsIGNhdGVzKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAodHlwZW9mIHNldFByZVJlc3VsdCAhPSAndW5kZWZpbmVkJykge1xcbiAgICAgICAgICAgICAgICBpdGVtcyA9IGQuY29uY2F0KGl0ZW1zKTtcXG4gICAgICAgICAgICAgICAgLy/muIXnqbrnu6fmib/mlbDnu4RcXG4gICAgICAgICAgICAgICAgZC5sZW5ndGggPSAwO1xcbiAgICAgICAgICAgICAgICBzZXRQcmVSZXN1bHQoaXRlbXMpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goaXRlbSk7XFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSxcXG4gICAgfTtcXG4gICAgb2JqLumihOiuvihvcHRpb25zKTtcXG4gICAgcmV0dXJuIG9iajtcXG59XFxuXFxudmFyIOeKtuaAgSA9XFxuICAgIHR5cGVvZiDnirbmgIHmoIforrAgIT0gXFxcInVuZGVmaW5lZFxcXCIgJiYg54q25oCB5qCH6K6wICE9IFxcXCJcXFwiID8g54q25oCB5qCH6K6wIDogTVlfUlVMRS51cmw7XFxuXFxubGV0IGR0X2RlYnVnID0gZmFsc2U7XFxuXFxuYWRkTGlzdGVuZXIoXFxuICAgIFxcXCJvbkNsb3NlXFxcIixcXG4gICAgJC50b1N0cmluZygoKSA9PiB7fSlcXG4pO1xcblxcbnZhciBDcmVhdGUgPSB7XFxuICAgIG5leHRQYWdlOiBmdW5jdGlvbigpIHtcXG4gICAgICAgIHZhciByZXN1bHQgPSBmYWxzZTtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgdmFyIG5leHQgPSBldmFsKOS4i+S4gOmhtSk7XFxuICAgICAgICAgICAgLy9sb2coJ246JytuZXh0KVxcbiAgICAgICAgICAgIGlmIChuZXh0ID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5LiL5LiA6aG16ZO+5o6l5Li656m6JylcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcXG4gICAgICAgICAgICBpZiAodHJ1ZV91cmwgPT0gbmV4dCkge1xcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgLy9sb2coXFxcIuWPr+iDveS4jeWtmOWcqOS4i+S4gOmhteaIluiAheS4i+S4gOmhteWumuS9jeaciemXrumimFxcXCIpO1xcbiAgICAgICAgICAgIGxvZyhcXFwi6ZSZ6K+v5L+h5oGvOlxcXCIgKyBlLm1lc3NhZ2UpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKChuZXh0ID09IFxcXCJcXFwiIHx8IG5leHQgPT0gdW5kZWZpbmVkKSAmJiBwYWdlID09IDEpIHtcXG4gICAgICAgICAgICBuZXh0ID0gdHJ1ZV91cmw7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIC8vcmVzdWx0PWZhbHNlO1xcbiAgICAgICAgICAgIG5leHQgPSBnZXRNeVZhcijnirbmgIEpO1xcbiAgICAgICAgfVxcbiAgICAgICAgLy9sb2coJ2wnK3RydWVfdXJsKVxcbiAgICAgICAgLy9sb2coJ24nK25leHQpXFxuICAgICAgICBpZiAocGFnZSAhPSAxKSB7XFxuICAgICAgICAgICAgaWYgKHRydWVfdXJsID09IG5leHQgJiYgIXJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiByZXN1bHQ7XFxuICAgICAgICAvL3B1dE15VmFyKOeKtuaAgSwgbmV4dCk7XFxuICAgIH0sXFxuICAgIGdldEJhY2tJbWFnZTogZnVuY3Rpb24oaW1ndXJsKSB7XFxuICAgICAgICB2YXIgcmVzdWx0ID0gaW1ndXJsO1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICByZXN1bHQgPSAvdXJsKD86XFxcXHMrKT9cXFxcKCguKj8pXFxcXCkvZ1xcbiAgICAgICAgICAgICAgICAuZXhlYyhpbWd1cmwpWzFdXFxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8oJ3xcXFwifCZxdW90OykvZ20sIFxcXCJcXFwiKTtcXG4gICAgICAgIH0gY2F0Y2gge31cXG4gICAgICAgIHJldHVybiByZXN1bHQ7XFxuICAgIH0sXFxuICAgIGh0dHBIYW5kbGU6IGZ1bmN0aW9uKGlucHV0KSB7XFxuICAgICAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aChcXFwiaHR0cFxcXCIpKSB7XFxuICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xcbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dC5zdGFydHNXaXRoKFxcXCIvL1xcXCIpKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJodHRwczpcXFwiICsgaW5wdXQ7XFxuICAgICAgICB9IGVsc2UgaWYgKGlucHV0LnN0YXJ0c1dpdGgoXFxcIi9cXFwiKSkge1xcbiAgICAgICAgICAgIHJldHVybiBNWV9IT01FICsgaW5wdXQ7XFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIGltZ0hhbmRsZTogZnVuY3Rpb24oaXRlbSwgcnVsZSkge1xcbiAgICAgICAgdmFyIGltZyA9IFxcXCJcXFwiO1xcbiAgICAgICAgaWYgKHJ1bGUuaW1nLnN0YXJ0c1dpdGgoXFxcInBkXFxcIikpIHtcXG4gICAgICAgICAgICBpbWcgPSBldmFsKHJ1bGUuaW1nKTtcXG4gICAgICAgIH0gZWxzZSBpZiAocnVsZS5iYWNraW1nKSB7XFxuICAgICAgICAgICAgaW1nID0gcGRmaChpdGVtLCBydWxlLmltZyk7XFxuICAgICAgICAgICAgaW1nID0gdGhpcy5nZXRCYWNrSW1hZ2UoaW1nKTtcXG4gICAgICAgICAgICBpbWcgPSB0aGlzLmh0dHBIYW5kbGUoaW1nKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgaW1nID0gcGRmaChpdGVtLCBydWxlLmltZyk7XFxuICAgICAgICAgICAgaWYgKCFpbWcuc3RhcnRzV2l0aChcXFwiaHR0cFxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIGltZyA9IHBkKGl0ZW0sIHJ1bGUuaW1nKTtcXG4gICAgICAgICAgICAgICAgaW1nID0gdGhpcy5odHRwSGFuZGxlKGltZyk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIGltZyArIHJ1bGUucmVmO1xcbiAgICB9LFxcbiAgICB1cmxIYW5kbGU6IGZ1bmN0aW9uKGl0ZW0sIHJ1bGUpIHtcXG4gICAgICAgIHZhciBocmVmID0gXFxcIlxcXCI7XFxuICAgICAgICBpZiAocnVsZS51cmwuc3RhcnRzV2l0aChcXFwicGRcXFwiKSkge1xcbiAgICAgICAgICAgIGhyZWYgPSBldmFsKHJ1bGUudXJsKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgaHJlZiA9IHBkKGl0ZW0sIHJ1bGUudXJsKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGhyZWYgPSBydWxlLmltdCA/IGhyZWYgKyBcXFwiI2ltbWVyc2l2ZVRoZW1lIyNhdXRvQ2FjaGUjXFxcIiA6IGhyZWY7XFxuICAgICAgICByZXR1cm4gaHJlZjtcXG4gICAgfSxcXG4gICAgc2V0Q29udGVudDogZnVuY3Rpb24oaXRlbSwgaW5wdXQpIHtcXG4gICAgICAgIGxldCBvdXRwdXQgPSBcXFwiXFxcIjtcXG4gICAgICAgIGlmIChpbnB1dCA9PSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKGlucHV0LnN0YXJ0c1dpdGgoXFxcInBkXFxcIikpIHtcXG4gICAgICAgICAgICBvdXRwdXQgPSBldmFsKGlucHV0KTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgb3V0cHV0ID0gcGRmaChpdGVtLCBpbnB1dCk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gb3V0cHV0O1xcbiAgICB9LFxcbiAgICByZWZyZXNoOiBmdW5jdGlvbigpIHtcXG4gICAgICAgIGFkZExpc3RlbmVyKFxcbiAgICAgICAgICAgIFxcXCJvblJlZnJlc2hcXFwiLFxcbiAgICAgICAgICAgICQudG9TdHJpbmcoKHUpID0+IHtcXG4gICAgICAgICAgICAgICAgY2xlYXJNeVZhcihcXFwieWlsaXN0XFxcIik7XFxuICAgICAgICAgICAgICAgIC8vdmFyIHAgPSBzdG9yYWdlMC5nZXRNeVZhcignc3BhZ2UnLCAnJyk7XFxuICAgICAgICAgICAgICAgIC8vcHV0TXlWYXIodSwgcCk7XFxuICAgICAgICAgICAgfSwg54q25oCBKVxcbiAgICAgICAgKTtcXG4gICAgfSxcXG4gICAgZ2V0Qm9vbGVhblZhbHVlOiBmdW5jdGlvbih2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XFxuICAgICAgICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/IEJvb2xlYW4odmFsdWUpIDogKGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gZGVmYXVsdFZhbHVlIDogdHJ1ZSk7XFxuICAgIH0sXFxuICAgIGRlYnVnbG9nOiBmdW5jdGlvbihpLCBpdGVtLCBydWxlLCBvYmopIHtcXG4gICAgICAgIGxvZygnLS0tLS0tLS0tLScgKyAoaSArIDEpICsgJzrosIPor5XlvIDlp4stLS0tLS0tLS0tJyk7XFxuICAgICAgICBpZiAoaXRlbS5jb25zdHJ1Y3RvciA9PSBPYmplY3QpIHtcXG4gICAgICAgICAgICBpdGVtID0gSlNPTi5zdHJpbmdpZnkoaXRlbSk7XFxuICAgICAgICB9XFxuICAgICAgICBsb2coJ2l0ZW3lhoXlrrk6XFxcXHJcXFxcbicgKyBpdGVtICsgJ1xcXFxyXFxcXG4nICtcXG4gICAgICAgICAgICBgXFxcXG5cXFxcdHRpdGxl5a6a5L2NOiAgJHtydWxlLnRpdGxlfSAgLS0tPiDnu5Pmnpw6ICAke29iai50aXRsZX1gICtcXG4gICAgICAgICAgICBgXFxcXG5cXFxcdGRlc2PlrprkvY06ICAke3J1bGUuZGVzY30gIC0tLT4g57uT5p6cOiAgJHtvYmouZGVzY31gICtcXG4gICAgICAgICAgICBgXFxcXG5cXFxcdGltZ+WumuS9jTogICR7cnVsZS5pbWd9ICAtLS0+IOe7k+aenDogICR7b2JqLmltZ31gICtcXG4gICAgICAgICAgICAocnVsZS5jb250ZW50ICE9IHVuZGVmaW5lZCA/IGBcXFxcblxcXFx0Y29udGVudOWumuS9jTogICR7cnVsZS5jb250ZW50fSAgLS0tPiDnu5Pmnpw6ICAke29iai5jb250ZW50fWAgOiAnJykgK1xcbiAgICAgICAgICAgIGBcXFxcblxcXFx0dXJs5a6a5L2NOiAgJHtydWxlLnVybH0gIC0tLT4g57uT5p6cOiAgJHtvYmoudXJsfWBcXG4gICAgICAgICk7XFxuICAgICAgICBsb2coJy0tLS0tLS0tLS0nICsgKGkgKyAxKSArICc66LCD6K+V57uT5p2fLS0tLS0tLS0tLScpO1xcbiAgICB9LFxcbiAgICBqc29uTGlzdDogZnVuY3Rpb24oYXJyLCBqc29uLCBydWxlKSB7XFxuICAgICAgICBpZiAoanNvbi5jb25zdHJ1Y3RvciAhPSBPYmplY3QpIHtcXG4gICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICBqc29uID0gSlNPTi5wYXJzZShqc29uKTtcXG4gICAgICAgICAgICB9IGNhdGNoIHt9XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoanNvbltydWxlLmxpc3RdID09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgIGFyci5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+PHNtYWxsPuaXoOWGheWuuTwvc21hbGw+PC9mb250PicsXFxuICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge30sXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgcmV0dXJuO1xcbiAgICAgICAgfVxcbiAgICAgICAgdmFyIGRlYnVnID0gdGhpcy5nZXRCb29sZWFuVmFsdWUocnVsZS5kZWJ1ZywgZmFsc2UpO1xcbiAgICAgICAgdmFyIGVtcHR5ID0gdGhpcy5nZXRCb29sZWFuVmFsdWUocnVsZS5lbXB0eSk7XFxuICAgICAgICBpZiAoZGVidWcpIHtcXG4gICAgICAgICAgICBsb2coJ+WumuS9jeWIl+ihqDonICsgcnVsZS5saXN0KTtcXG4gICAgICAgIH1cXG4gICAgICAgIGpzb25bcnVsZS5saXN0XS5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XFxuICAgICAgICAgICAgdmFyIHRpdGxlID0gc3AoZXZhbChydWxlLnRpdGxlKSk7XFxuICAgICAgICAgICAgdmFyIGRlc2MgPSBzcChldmFsKHJ1bGUuZGVzYykpO1xcbiAgICAgICAgICAgIHZhciBjb250ZW50ID0gc3AoZXZhbChydWxlLmNvbnRlbnQpKTtcXG4gICAgICAgICAgICB2YXIgaW1nID0gZXZhbChydWxlLmltZykgKyBydWxlLnJlZjtcXG4gICAgICAgICAgICB2YXIgaHJlZiA9IGV2YWwocnVsZS51cmwpO1xcbiAgICAgICAgICAgIHZhciB1cmwgPSBydWxlLmltdCA/IGhyZWYgKyBcXFwiI2ltbWVyc2l2ZVRoZW1lIyNhdXRvQ2FjaGUjXFxcIiA6IGhyZWY7XFxuICAgICAgICAgICAgdmFyIGxhenkgPSBydWxlLmxhenkgPyBydWxlLmxhenkgOiBcXFwiXFxcIjtcXG5cXG4gICAgICAgICAgICB2YXIgZGQgPSB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgZGVzYzogZGVzYyxcXG4gICAgICAgICAgICAgICAgY29udGVudDogY29udGVudCxcXG4gICAgICAgICAgICAgICAgcGljX3VybDogaW1nLFxcbiAgICAgICAgICAgICAgICB1cmw6IChlbXB0eSA/IFxcXCJoaWtlcjovL2VtcHR5IyNcXFwiIDogJycpICsgdXJsLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogcnVsZS5jb2xfdHlwZSxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIH07XFxuXFxuICAgICAgICAgICAgaWYgKGRlYnVnKSB7XFxuICAgICAgICAgICAgICAgIHZhciByeCA9IHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYyxcXG4gICAgICAgICAgICAgICAgICAgIGltZyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQsXFxuICAgICAgICAgICAgICAgICAgICB1cmxcXG4gICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgdGhpcy5kZWJ1Z2xvZyhpLCBpdGVtLCBydWxlLCByeCk7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGlmIChsYXp5ICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgIGRkW1xcXCJ1cmxcXFwiXSA9IGhyZWYgKyBsYXp5O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBhcnIucHVzaChkZCk7XFxuICAgICAgICB9KTtcXG4gICAgfSxcXG4gICAgcnVsZUxpc3Q6IGZ1bmN0aW9uKGFyciwgaHRtbCwgcnVsZSkge1xcbiAgICAgICAgdmFyIGxpc3QgPSBwZGZhKGh0bWwsXFxuICAgICAgICAgICAgcnVsZS5saXN0KTtcXG4gICAgICAgIHZhciBkZWJ1ZyA9IHRoaXMuZ2V0Qm9vbGVhblZhbHVlKHJ1bGUuZGVidWcsXFxuICAgICAgICAgICAgZmFsc2UpO1xcbiAgICAgICAgdmFyIGVtcHR5ID0gdGhpcy5nZXRCb29sZWFuVmFsdWUocnVsZS5lbXB0eSk7XFxuICAgICAgICBpZiAoZGVidWcpIHtcXG4gICAgICAgICAgICBsb2coJ+WumuS9jeWIl+ihqDonICsgcnVsZS5saXN0KTtcXG4gICAgICAgIH1cXG4gICAgICAgIGxpc3QuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xcbiAgICAgICAgICAgIHZhciB0aXRsZSA9IHNwKHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLnRpdGxlKSk7XFxuICAgICAgICAgICAgdmFyIGRlc2MgPSBzcCh0aGlzLnNldENvbnRlbnQoaXRlbSwgcnVsZS5kZXNjKSk7XFxuICAgICAgICAgICAgdmFyIGltZyA9IHRoaXMuaW1nSGFuZGxlKGl0ZW0sIHJ1bGUpO1xcbiAgICAgICAgICAgIHZhciB1cmwgPSB0aGlzLnVybEhhbmRsZShpdGVtLCBydWxlKTtcXG4gICAgICAgICAgICB2YXIgY29udGVudCA9IHNwKHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLmNvbnRlbnQpKTtcXG5cXG4gICAgICAgICAgICBpZiAoZGVidWcpIHtcXG4gICAgICAgICAgICAgICAgdmFyIHJ4ID0ge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjLFxcbiAgICAgICAgICAgICAgICAgICAgaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudCxcXG4gICAgICAgICAgICAgICAgICAgIHVybFxcbiAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICB0aGlzLmRlYnVnbG9nKGksIGl0ZW0sIHJ1bGUsIHJ4KTtcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgdmFyIGxhenkgPSBydWxlLmxhenkgPyBydWxlLmxhenkgOiBcXFwiXFxcIjtcXG4gICAgICAgICAgICB2YXIgZGQgPSB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgZGVzYzogZGVzYyxcXG4gICAgICAgICAgICAgICAgcGljX3VybDogaW1nLFxcbiAgICAgICAgICAgICAgICB1cmw6IChlbXB0eSA/IFxcXCJoaWtlcjovL2VtcHR5IyNcXFwiIDogJycpICsgdXJsLFxcbiAgICAgICAgICAgICAgICBjb250ZW50OiBjb250ZW50LFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogcnVsZS5jb2xfdHlwZSxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgaWYgKGxhenkgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgZGRbXFxcInVybFxcXCJdID0gdXJsICsgbGF6eTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgYXJyLnB1c2goZGQpO1xcbiAgICAgICAgfSk7XFxuICAgIH0sXFxuICAgIExpc3Q6IGZ1bmN0aW9uKGFyciwgaHRtbCwgcnVsZSwgcGFyYW0pIHtcXG4gICAgICAgIHBhcmFtID0gcGFyYW0gPyBwYXJhbSA6IHt9O1xcbiAgICAgICAgdmFyIGF1dG8gPSBwYXJhbS5hdXRvID8gcGFyYW0uYXV0byA6IGZhbHNlO1xcbiAgICAgICAgdmFyIHNob3cgPSBwYXJhbS5zaG93ID8gcGFyYW0uc2hvdyA6IGZhbHNlO1xcbiAgICAgICAgaWYgKHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgIC8vdGhpcy5zcGFnZS5zZXQodHJ1ZV91cmwpO1xcbiAgICAgICAgfVxcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XFxuICAgICAgICB2YXIgZGVidWcgPSB0aGlzLmdldEJvb2xlYW5WYWx1ZShydWxlLmRlYnVnLCBmYWxzZSk7XFxuICAgICAgICB2YXIgZW1wdHkgPSB0aGlzLmdldEJvb2xlYW5WYWx1ZShydWxlLmVtcHR5KTtcXG4gICAgICAgIHZhciBsaXN0ID0gcGRmYShodG1sLCBydWxlLmxpc3QpO1xcbiAgICAgICAgaWYgKGRlYnVnKSB7XFxuICAgICAgICAgICAgbG9nKCflrprkvY3liJfooag6JyArIHJ1bGUubGlzdCk7XFxuICAgICAgICB9XFxuICAgICAgICAvL2xvZyh0aGlzLm5leHRQYWdlKCkpXFxuICAgICAgICBpZiAoKHN0b3JhZ2UwLmdldE15VmFyKCd5aV9pc25leHQnLCAndCcpID09ICd0JyAmJiBsaXN0Lmxlbmd0aCA+IDApIHx8IHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgIGxpc3QuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xcbiAgICAgICAgICAgICAgICBkZWxldGVJdGVtKFxcXCJwYWdlbnVtXFxcIik7XFxuICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW0oXFxcInBhZ2VsaW5lXFxcIik7XFxuICAgICAgICAgICAgICAgIHZhciBpZCA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgICAgICB2YXIgY2xzID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IHNwKHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLnRpdGxlKSk7XFxuICAgICAgICAgICAgICAgIHZhciBkZXNjID0gc3AodGhpcy5zZXRDb250ZW50KGl0ZW0sIHJ1bGUuZGVzYykpO1xcbiAgICAgICAgICAgICAgICB2YXIgaW1nID0gdGhpcy5pbWdIYW5kbGUoaXRlbSwgcnVsZSk7XFxuICAgICAgICAgICAgICAgIHZhciB1cmwgPSB0aGlzLnVybEhhbmRsZShpdGVtLCBydWxlKTtcXG4gICAgICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBzcCh0aGlzLnNldENvbnRlbnQoaXRlbSwgcnVsZS5jb250ZW50KSk7XFxuXFxuICAgICAgICAgICAgICAgIGlmIChkZWJ1Zykge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJ4ID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsXFxuICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWJ1Z2xvZyhpLCBpdGVtLCBydWxlLCByeCk7XFxuICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgaWYgKGkgPT0gbGlzdC5sZW5ndGggLSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZCA9IFxcXCJsYXN0aWRfXFxcIiArIHBhZ2U7XFxuICAgICAgICAgICAgICAgICAgICBjbHMgPSBcXFwibGFzdG1hcmtcXFwiO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBkZXNjLFxcbiAgICAgICAgICAgICAgICAgICAgcGljX3VybDogaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAoZW1wdHkgPyBcXFwiaGlrZXI6Ly9lbXB0eSMjXFxcIiA6ICcnKSArIHVybCxcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogcnVsZS5jb2xfdHlwZSxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsczogY2xzLFxcbiAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGlmIChpID09IGxpc3QubGVuZ3RoIC0gMSAmJiBzaG93KSB7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwibGluZVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFxcXCJwYWdlbGluZVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuKAnOKAnOKAneKAnTxzbWFsbD7liqDovb3kuK0uLi48L3NtYWxsPlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogXFxcInBhZ2VudW1cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB1cGRhdGVJdGVtKFxcXCJwYWdlbnVtXFxcIiwge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxmb250IGNvbG9yPVxcXCJncmV5XFxcIj48c21hbGw+5Yiw5bqV5LqGPC9zbWFsbD48L2ZvbnQ+JyxcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBpZDogXFxcImxhc3RcXFwiLFxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKGxpc3QubGVuZ3RoID09IDAgJiYgcGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJsaW5lXFxcIixcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxmb250IGNvbG9yPVxcXCJncmV5XFxcIj48c21hbGw+5peg5YaF5a65PC9zbWFsbD48L2ZvbnQ+JyxcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7fSxcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICh0aGlzLm5leHRQYWdlKCkpIHtcXG4gICAgICAgICAgICAvL2xvZygndCcpO1xcbiAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKCd5aV9pc25leHQnLCAndCcpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAvL2xvZygnZicpO1xcbiAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKCd5aV9pc25leHQnLCAnZicpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKGF1dG8pIHtcXG4gICAgICAgICAgICAvL2NyZWF0ZU5leHRQYWdlKCk7XFxuICAgICAgICAgICAgYXV0b1BhZ2UoKTtcXG4gICAgICAgIH1cXG4gICAgfSxcXG59O1xcblxcbnZhciBleHRNZXRob2QgPSB7XFxuICAgIFRvUGFyYW1zOiBmdW5jdGlvbigpIHtcXG4gICAgICAgIHZhciBqc29uID0gYXJndW1lbnRzWzBdO1xcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGpzb24pXFxuICAgICAgICAgICAgLm1hcCgoa2V5KSA9PiBrZXkgKyBcXFwiPVxcXCIgKyBqc29uW2tleV0pXFxuICAgICAgICAgICAgLmpvaW4oXFxcIiZcXFwiKTtcXG4gICAgfSxcXG4gICAgdXJsUGFyc2U6IGZ1bmN0aW9uKHUpIHtcXG4gICAgICAgIHZhciBkaWN0ID0ge307XFxuICAgICAgICBkaWN0LlNvdXJjZSA9IHU7XFxuICAgICAgICBsZXQgcGFyYW1zID0gKHVybCkgPT4ge1xcbiAgICAgICAgICAgIGxldCBxdWVyeVBhcmFtcyA9IHt9O1xcbiAgICAgICAgICAgIGxldCByZWcgPSAvKFtePz0mXSspPShbXj89Jl0rKS9nO1xcbiAgICAgICAgICAgIHVybC5yZXBsYWNlKHJlZywgZnVuY3Rpb24oKSB7XFxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zW2FyZ3VtZW50c1sxXV0gPSBhcmd1bWVudHNbMl07XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5UGFyYW1zO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHZhciBqYXZhVXJsID0gSmF2YUltcG9ydGVyKGphdmEubmV0LlVSTCk7XFxuICAgICAgICB3aXRoKGphdmFVcmwpIHtcXG4gICAgICAgICAgICB2YXIgdXJsID0gbmV3IFVSTCh1KTtcXG4gICAgICAgICAgICBkaWN0LlByb3RvY29sID0gdXJsLmdldFByb3RvY29sKCk7XFxuICAgICAgICAgICAgZGljdC5Ib3N0ID0gdXJsLmdldEhvc3QoKTtcXG4gICAgICAgICAgICBkaWN0LlBvcnQgPSB1cmwuZ2V0UG9ydCgpO1xcbiAgICAgICAgICAgIGRpY3QuRmlsZSA9IHVybC5nZXRGaWxlKCk7XFxuICAgICAgICAgICAgZGljdC5QYXRoID0gdXJsLmdldFBhdGgoKTtcXG4gICAgICAgICAgICBkaWN0LlJlZiA9IHVybC5nZXRSZWYoKTtcXG4gICAgICAgICAgICBkaWN0Lkhvc3RzID0gYCR7ZGljdC5Qcm90b2NvbH06Ly8ke3VybC5nZXRIb3N0KCl9YDtcXG4gICAgICAgIH1cXG4gICAgICAgIGRpY3QuUGFyYW1zID0gcGFyYW1zKHUpO1xcbiAgICAgICAgcmV0dXJuIGRpY3Q7XFxuICAgIH0sXFxuICAgIGlzRXF1YWw6IGZ1bmN0aW9uKHgsIHkpIHtcXG4gICAgICAgIGNvbnN0IG9rID0gT2JqZWN0LmtleXMsXFxuICAgICAgICAgICAgdHggPSB0eXBlb2YgeCxcXG4gICAgICAgICAgICB0eSA9IHR5cGVvZiB5O1xcbiAgICAgICAgcmV0dXJuIHggJiYgeSAmJiB0eCA9PT0gXFxcIm9iamVjdFxcXCIgJiYgdHggPT09IHR5ID9cXG4gICAgICAgICAgICBvayh4KS5sZW5ndGggPT09IG9rKHkpLmxlbmd0aCAmJlxcbiAgICAgICAgICAgIG9rKHgpLmV2ZXJ5KChrZXkpID0+IHRoaXMuaXNFcXVhbCh4W2tleV0sIHlba2V5XSkpIDogeCA9PT0geTtcXG4gICAgfSxcXG4gICAgZmluZERpZmZlcmVudEluZGV4OiBmdW5jdGlvbihzdHIxLCBzdHIyKSB7XFxuICAgICAgICBjb25zdCBkaWZmQ2hhcnMgPSBbXTtcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyMi5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgIGlmIChzdHIxW2ldICE9PSBzdHIyW2ldKSB7XFxuICAgICAgICAgICAgICAgIGRpZmZDaGFycy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxcbiAgICAgICAgICAgICAgICAgICAgczE6IHN0cjFbaV0sXFxuICAgICAgICAgICAgICAgICAgICBzMjogc3RyMltpXSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIGRpZmZDaGFycztcXG4gICAgfSxcXG4gICAgcmVwbGFjZUNoYXJBdDogZnVuY3Rpb24oc3RyLCBpbmRleCwgcmVwbGFjZW1lbnQpIHtcXG4gICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gc3RyLmxlbmd0aCkge1xcbiAgICAgICAgICAgIHJldHVybiBzdHI7XFxuICAgICAgICB9XFxuICAgICAgICAvL2xvZyhpbmRleClcXG4gICAgICAgIGNvbnN0IGFyciA9IHN0ci5zcGxpdChcXFwiXFxcIik7XFxuICAgICAgICBhcnJbaW5kZXhdID0gcmVwbGFjZW1lbnQ7XFxuICAgICAgICByZXR1cm4gYXJyLmpvaW4oXFxcIlxcXCIpO1xcbiAgICB9LFxcbiAgICBnZXRPYmplY3RLZXlzRGlmZjogZnVuY3Rpb24ob2JqMSwgb2JqMikge1xcbiAgICAgICAgY29uc3QgZGlmZmVyZW50S2V5cyA9IFtdO1xcbiAgICAgICAgZm9yIChsZXQga2V5IGluIG9iajEpIHtcXG4gICAgICAgICAgICBpZiAoIW9iajIuaGFzT3duUHJvcGVydHkoa2V5KSB8fCBvYmoxW2tleV0gIT09IG9iajJba2V5XSkge1xcbiAgICAgICAgICAgICAgICBkaWZmZXJlbnRLZXlzLnB1c2goa2V5KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gb2JqMikge1xcbiAgICAgICAgICAgIGlmICghb2JqMS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XFxuICAgICAgICAgICAgICAgIGRpZmZlcmVudEtleXMucHVzaChrZXkpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBkaWZmZXJlbnRLZXlzO1xcbiAgICB9LFxcbiAgICBnZXROZXh0VXJsOiBmdW5jdGlvbihzb3VyY2UsIHRhcmdldCwgcGFyYW1zKSB7XFxuICAgICAgICB2YXIgdTEgPSB0aGlzLnVybFBhcnNlKHNvdXJjZSk7XFxuICAgICAgICB2YXIgdTIgPSB0aGlzLnVybFBhcnNlKHRhcmdldCk7XFxuICAgICAgICB2YXIgcGEgPSB1bmRlZmluZWQ7XFxuICAgICAgICBpZiAodHlwZW9mIHBhcmFtcyA9PSBcXFwib2JqZWN0XFxcIikge1xcbiAgICAgICAgICAgIHBhID0gcGFyYW1zLmhhc093blByb3BlcnR5KFxcXCLnibnlvoFcXFwiKSA/IHBhcmFtcy7nibnlvoEgOiB1bmRlZmluZWQ7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgbmV4dHVybCA9IHNvdXJjZTtcXG4gICAgICAgIHZhciBjYSA9IE9iamVjdC5rZXlzKHUyLlBhcmFtcykubGVuZ3RoID09IDAgPyBcXFwiXFxcIiA6IFxcXCI/XFxcIjtcXG4gICAgICAgIGlmIChwYSAhPSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICB2YXIgcnMgPSBTdHJpbmcodTIuUGF0aCkucmVwbGFjZShuZXcgUmVnRXhwKHBhKSwgXFxcIiQxZnlwYWdlXFxcIik7XFxuICAgICAgICAgICAgbmV4dHVybCA9IHUyLkhvc3RzICsgcnMgKyBjYSArIHRoaXMuVG9QYXJhbXModTIuUGFyYW1zKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgaWYgKHRoaXMuaXNFcXVhbCh1MS5QYXJhbXMsIHUyLlBhcmFtcykpIHtcXG4gICAgICAgICAgICAgICAgaWYgKGR0X2RlYnVnKSB7XFxuICAgICAgICAgICAgICAgICAgICBsb2codTEuUGF0aCk7XFxuICAgICAgICAgICAgICAgICAgICBsb2codTIuUGF0aCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdmFyIGRmID0gdGhpcy5maW5kRGlmZmVyZW50SW5kZXgoU3RyaW5nKHUxLlBhdGgpLCBTdHJpbmcodTIuUGF0aCkpO1xcbiAgICAgICAgICAgICAgICBpZiAoZHRfZGVidWcpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhkZik7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKGRmLmxlbmd0aCA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgcmUgPSBkZlswXS5pbmRleDtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBmID0gZGYuZmlsdGVyKCh4KSA9PiAvXFxcXGQrLy50ZXN0KHguczIpKTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciByZSA9IGZbMF0uaW5kZXg7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdmFyIGVxID0gdGhpcy5yZXBsYWNlQ2hhckF0KFN0cmluZyh1Mi5QYXRoKSwgcmUsIFxcXCJmeXBhZ2VcXFwiKTtcXG4gICAgICAgICAgICAgICAgbmV4dHVybCA9IHUyLkhvc3RzICsgZXEgKyBjYSArIHRoaXMuVG9QYXJhbXModTIuUGFyYW1zKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB2YXIgZXAgPSB0aGlzLmdldE9iamVjdEtleXNEaWZmKHUxLlBhcmFtcywgdTIuUGFyYW1zKVxcbiAgICAgICAgICAgICAgICBpZiAoZXAubGVuZ3RoID09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIHUxLlBhcmFtc1tlcFswXV0gPSAnZnlwYWdlJ1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKGVwKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB2YXIgZXEgPSBTdHJpbmcodTEuUGF0aCkucmVwbGFjZSgvXFxcXGQrLywgXFxcImZ5cGFnZVxcXCIpO1xcbiAgICAgICAgICAgICAgICBuZXh0dXJsID0gdTEuSG9zdHMgKyBlcSArIGNhICsgdGhpcy5Ub1BhcmFtcyh1MS5QYXJhbXMpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIC8vbG9nKCduZXh0OicrbmV4dHVybClcXG4gICAgICAgIHJldHVybiBuZXh0dXJsO1xcbiAgICB9LFxcbn07XFxuXFxuZnVuY3Rpb24gZ2V0VHJ1ZWxpbmsobWFyaywgdXJsLCBwYWdlKSB7XFxuICAgIHZhciBwID0gZ2V0TXlWYXIobWFyaywgdXJsKS5yZXBsYWNlKFxcXCJmeXBhZ2VcXFwiLCBwYWdlKTtcXG4gICAgaWYgKHBhZ2UgPT0gMSkge1xcbiAgICAgICAgcmV0dXJuIGdldE15VmFyKFxcXCJ5aV9maXJzdHBhZ2VcXFwiLCBwKTtcXG4gICAgfSBlbHNlIGlmIChwICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICByZXR1cm4gcDtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHJldHVybiB1cmw7XFxuICAgIH1cXG59XFxuLy/mnoTlu7pcXG5mdW5jdGlvbiBjcmVhdGVOZXh0UGFnZSgpIHtcXG4gICAgbGV0IHN0YXJ0bnVtID0gMTtcXG4gICAgdmFyIG9iaiA9IGFyZ3VtZW50c1swXTtcXG4gICAgaWYgKHRydWVfdXJsICE9IGdldE15VmFyKFxcXCJ5aV9wYWdldXJsXFxcIiwgXFxcIlxcXCIpKSB7XFxuICAgICAgICBjbGVhck15VmFyKFxcXCJ5aV9wYWdldXJsXFxcIik7XFxuICAgIH1cXG4gICAgaWYgKHBhZ2UgPT0gc3RhcnRudW0gJiYgZ2V0TXlWYXIoXFxcInlpX3BhZ2V1cmxcXFwiKSA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgcHV0TXlWYXIoXFxcInlpX2ZpcnN0cGFnZVxcXCIsIHRydWVfdXJsKTtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgdmFyIG5leHQgPSBldmFsKOS4i+S4gOmhtSk7XFxuICAgICAgICAgICAgLy9sb2coXFxcIm5leHRcXFwiKTtcXG4gICAgICAgICAgICAvL2xvZyhuZXh0KTtcXG4gICAgICAgIH0gY2F0Y2gge1xcbiAgICAgICAgICAgIGxvZyhcXFwi5Y+v6IO95LiN5a2Y5Zyo5LiL5LiA6aG15oiW6ICF5LiL5LiA6aG15a6a5L2N5pyJ6Zeu6aKYXFxcIik7XFxuICAgICAgICAgICAgbmV4dCA9IFxcXCJcXFwiO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKG5leHQgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICB2YXIgbnh1cmwgPSBleHRNZXRob2QuZ2V0TmV4dFVybCh0cnVlX3VybCwgbmV4dCwgb2JqKTtcXG4gICAgICAgICAgICAvL2xvZyhcXFwibnh1cmw6XFxcIiArIG54dXJsKTtcXG4gICAgICAgICAgICBwdXRNeVZhcijnirbmgIEsIG54dXJsKTtcXG4gICAgICAgICAgICBwdXRNeVZhcihcXFwieWlfcGFnZXVybFxcXCIsIG54dXJsKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbn1cXG5cXG5mdW5jdGlvbiBhdXRvUGFnZSgpIHtcXG4gICAgaWYgKHBhZ2UgPT0gMSkge1xcbiAgICAgICAgcHV0TXlWYXIoXFxcInlpX2ZpcnN0cGFnZVxcXCIsIHRydWVfdXJsKTtcXG4gICAgfVxcbiAgICB0cnkge1xcbiAgICAgICAgdmFyIG5leHQgPSBldmFsKOS4i+S4gOmhtSk7XFxuICAgICAgICAvL2xvZyhcXFwibmV4dFxcXCIpO1xcbiAgICAgICAgLy9sb2coJ25leHQ6JytuZXh0KTtcXG4gICAgfSBjYXRjaCB7XFxuICAgICAgICBsb2coXFxcIuWPr+iDveS4jeWtmOWcqOS4i+S4gOmhteaIluiAheS4i+S4gOmhteWumuS9jeaciemXrumimFxcXCIpO1xcbiAgICAgICAgbmV4dCA9IFxcXCJcXFwiO1xcbiAgICB9XFxuICAgIGlmIChuZXh0ICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICBwdXRNeVZhcijnirbmgIEsIG5leHQpO1xcbiAgICB9XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5LuL57uNXCIsXCJwYXRoXCI6XCJpbnRyb2R1Y2VcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW11cXG5kLnB1c2goe1xcbmltZzogTVlfUEFSQU1TLmltZyxcXG51cmw6IE1ZX1BBUkFNUy5pbWcsXFxuY29sX3R5cGU6XFxcInBpY18xX2Z1bGxcXFwiLFxcbn0pXFxuZC5wdXNoKHtcXG50aXRsZTogTVlfUEFSQU1TLmludHJvZHVjZSxcXG5jb2xfdHlwZTpcXFwicmljaF90ZXh0XFxcIixcXG59KVxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuaQnOe0olwiLFwicGF0aFwiOlwic2VhcmNoXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbnJjKGZldGNoUEMoJ2h0dHBzOi8vZ2l0ZWUuY29tL21pc3R5d2F0ZXIvaGlrZXJfaW5mby9yYXcvbWFzdGVyL2dpdGh1YnByb3h5Lmpzb24nKSArICdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbWlzdHl3YXRlci9oaWtlci9tYWluL2YnLCAyNCk7XFxuY29uc3QgcGFnZSA9IE1ZX1BBR0U7XFxudmFyIFRpdGxlID0gTVlfUEFSQU1TLnRpdGxlP01ZX1BBUkFNUy50aXRsZTpnZXRQYXJhbSgndGl0bGUnKT9nZXRQYXJhbSgndGl0bGUnKTpnZXRWYXIoJ1RpdGxlJylcXG52YXIgc3VybCA9IGdldFZhcignbGluaycpK1xcXCIvc2VhcmNoL3Bob3Rvcz9zZWFyY2hfcXVlcnk9XFxcIitUaXRsZStcXFwiJm1haW5fdGFnPTAmbz1tdiZ0PWEmcGFnZT1cXFwiXFxudmFyIFVSTD0gc3VybCtwYWdlO1xcbi8vdmFyIGh0bWwgPSBnZXRSZXNDb2RlKCk7XFxuXFxubGV0IG5vdyA9IGdldEl0ZW0oJ25vdycsICfmnIDlpJrngrnlh7snKTtcXG5pZihNWV9QQUdFPT0xKXtcXG5kLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLmoIfnrb7mkJzntKLvvJpcXFwiKyfigJjigJjigJnigJk8c3Ryb25nPjxmb250IGNvbG9yPVxcXCIjZmYxNDkzXFxcIj4nK1RpdGxlKyc8L2ZvbnQ+PC9zdHJvbmc+JyxcXG4gICAgICAgIHVybDogXFxcInRvYXN0Oi8vXFxcIitNWV9QQVJBTVMudGl0bGUrXFxcIvCfpJRcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXG5leHRyYTp7XFxcImxpbmVWaXNpYmxlXFxcIjpmYWxzZX1cXG4gICAgfSlcXG5sZXQgYXJyID0gW1xcXCLmnIDlpJrngrnlh7tcXFwiLFxcXCLmnIDmlrBcXFwiLFxcXCLmnIDlpJrniLHlv4NcXFwiLFxcXCLmnIDlpJrlm77niYdcXFwiXTtcXG5mb3IgKGxldCBpdCBvZiBhcnIpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IG5vdyA9PSBpdCA/ICfigJzigJzigJ3igJ0nICsgaXQuZm9udGNvbG9yKCdyZWQnKSA6IGl0LFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChpdCkgPT4ge1xcbiAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXCJub3dcXFwiLCBpdCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgfSwgaXQpXFxuICAgICAgICB9KVxcbiAgICB9XFxufVxcbmlmIChub3cgPT0gJ+acgOWkmueCueWHuycpIHtcXG52YXIgaHRtbCA9IGZldGNoKFVSTCk7XFxufWVsc2UgaWYgKG5vdyA9PSAn5pyA5pawJykge1xcbnZhciBodG1sID0gZmV0Y2goVVJMLnJlcGxhY2UoJ212JywnbXInKSk7XFxufWVsc2UgaWYgKG5vdyA9PSAn5pyA5aSa54ix5b+DJykge1xcbnZhciBodG1sID0gZmV0Y2goVVJMLnJlcGxhY2UoJ212JywndGYnKSk7XFxufWVsc2UgaWYgKG5vdyA9PSAn5pyA5aSa5Zu+54mHJykge1xcbnZhciBodG1sID0gZmV0Y2goVVJMLnJlcGxhY2UoJ212JywnbXAnKSk7XFxufVxcbnZhciBsaXN0ID0gcGRmYShodG1sLCAnLm0tMCYmLmNvbC14cy02Jyk7XFxuZm9yICh2YXIgaiBpbiBsaXN0KSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogc3AocGRmaChsaXN0W2pdLCAnc3BhbiwxJiZUZXh0JykpLFxcbiAgICAgICAgZGVzYzogc3AocGRmaChsaXN0W2pdLCAnc3BhbiYmVGV4dCcpKydcXFxcdFxcXFx0JytwZGZoKGxpc3Rbal0sICcubGFiZWwtY2F0ZWdvcnkmJlRleHQnKStcXFwiIFxcXCIrcGRmaChsaXN0W2pdLCAnLmxhYmVsLXN1YiYmVGV4dCcpKSxcXG4gICAgICAgIGltZzogcGRmaChsaXN0W2pdLCAnaW1nJiZkYXRhLW9yaWdpbmFsJyksXFxuICAgICAgICB1cmw6IGdldFZhcignbGluaycpK3BkZmgobGlzdFtqXSwgJ2EmJmhyZWYnKSsnI2ltbWVyc2l2ZVRoZW1lIyNhdXRvQ2FjaGUjQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvZWpcXFwiKScsXFxuY29sX3R5cGU6ICdtb3ZpZV8zJyxcXG5leHRyYTp7XFxuICAgIHBhZ2VUaXRsZTogc3AocGRmaChsaXN0W2pdLCAnc3BhbiwxJiZUZXh0JykpLFxcbn1cXG4gICAgfSk7XFxufVxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS6jOe6p1wiLFwicGF0aFwiOlwiZWpcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxucmMoZmV0Y2hQQygnaHR0cHM6Ly9naXRlZS5jb20vbWlzdHl3YXRlci9oaWtlcl9pbmZvL3Jhdy9tYXN0ZXIvZ2l0aHVicHJveHkuanNvbicpICsgJ2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9taXN0eXdhdGVyL2hpa2VyL21haW4vZicsIDI0KTtcXG4vL2V2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvZXI/cnVsZT3OsScpKS5ydWxlKTtcXG52YXIgaGVhZGVycyA9IHtcXG4gICAgICAgIFxcXCJDb29raWVcXFwiOiBmZXRjaFBDKCdoaWtlcjovL2ZpbGVzL2NhY2hlL0pNX2Nvb2tpZS50eHQnKSB8fCAnJywgXFxuICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6XFxcIk1vemlsbGEvNS4wIChMaW51eDsgQW5kcm9pZCAxMjsgU00tRzk3NTAgQnVpbGQvU1AxQS4yMTA4MTIuMDE2OyB3dikgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgQ2hyb21lLzg5LjAuNDM4OS43MiBNUVFCcm93c2VyLzYuMiBUQlMvMDQ2Mjc5IE1vYmlsZSBTYWZhcmkvNTM3LjM2XFxcIixcXG4gICAgICAgIFxcXCJSZWZlcmVyXFxcIjogTVlfVVJMXFxuICAgIH07XFxuICAgIC8vbG9nKE1ZX1VSTClcXG52YXIgaHRtbCA9IGZldGNoKE1ZX1VSTCx7aGVhZGVyczpoZWFkZXJzfSlcXG52YXIgbGluayA9IGdldFZhcignbGluaycpXFxudmFyIGNvbnRlbnRzID0gcGRmYShodG1sLCAnI2ludHJvLWJsb2NrJiYudGFnLWJsb2NrJylcXG52YXIgY29udGVudCA9IGNvbnRlbnRzLm1hcCh4ID0+IHBkZmgoeCwgJ2RpdiYmVGV4dCcpKTtcXG52YXIgaW50cm9kdWNlID0gc3AocGRmaChodG1sLCBcXFwiI2ludHJvLWJsb2NrJiYucC1iLTUmJlRleHRcXFwiKSk7XFxudmFyIHBhZ2Vjb3VudD1zcChwZGZoKGh0bWwsIFxcXCIucGFnZWNvdW50JiZUZXh0XFxcIikpO1xcbnZhciBJRCA9IFxcXCLnpoHmvKtJRDpcXFwiK3BkZmgoaHRtbCwgXFxcIi5udW1iZXImJlRleHRcXFwiKS5zcGxpdCgnSk0nKVsxXVxcbnZhciB2aWV3cyA9IHNwKFxcXCLwn5GNXFxcIitwZGZoKGh0bWwsIFxcXCIubGlzdC1zdHlsZS1ub25lJiZUZXh0XFxcIikrXFxcIiAgIFxcXCIrXFxcIvCfkYBcXFwiK3BkZmgoaHRtbCwgXFxcIi5saXN0LXN0eWxlLW5vbmUsMSYmVGV4dFxcXCIpKTtcXG52YXIgaWQgPSBNWV9VUkwuc3BsaXQoJ2FsYnVtLycpWzFdLnNwbGl0KCcvJylbMF07XFxudmFyIGNvbW1lbnQgPSBwZGZoKGh0bWwsIFxcXCIjY29tbWVudHNfYSYmVGV4dFxcXCIpO1xcbnZhciBhdXRob3IgPXBkZmEoaHRtbCwgJyNpbnRyby1ibG9jayYmLnRhZy1ibG9jaywzJiZhJyk7XFxudmFyIHRhZyA9IHBkZmEoaHRtbCwgJyNpbnRyby1ibG9jayYmLnRhZy1ibG9jaywyJiZhJyk7XFxudHJ5IHtcXG4gICAgdmFyIGRlc19waWMgPSBwZChodG1sLCAnYm9keSYmLnRodW1iLW92ZXJsYXksMSYmaW1nJiZzcmN8fGRhdGEtY2ZzcmMnKTtcXG4gICAgdmFyIGRlc19hdXRob3IgPSBzbWFsbChzcChwZGZoKGh0bWwsICdib2R5JiYucGFuZWwtaGVhZGluZyYmZGl2LDEmJlRleHQnKS5zdWJzdHJpbmcoMCwgMjApKydcXFxcbicrcGFyc2VEb21Gb3JIdG1sKGh0bWwsICdib2R5JiYucC10LTUsMCYmVGV4dCcpKydcXFxcbicrIHBhcnNlRG9tRm9ySHRtbChodG1sLCAnYm9keSYmLnAtdC01LDEmJlRleHQnKSksJ0YwRkZGRicpO1xcbiAgICB2YXIgZGVzX2Rlc2MgPSBzbWFsbChzcChwYWdlY291bnQrXFxcIiAgXFxcIitJRCsnXFxcXG4nK3ZpZXdzKydcXFxcbicraW50cm9kdWNlKSwnMDA2Njk5Jyk7XFxuICAgIHZhciBkZXNfdGl0bGUgPSBzcChwYXJzZURvbUZvckh0bWwoaHRtbCwgJ2gxJiZUZXh0JykpO1xcbiAgICB2YXIgY29udHMgPSBwZGZhKGh0bWwsICdib2R5JiYuYnRuLXRvb2xiYXImJmEnKTtcXG4gICAgaWYgKGNvbnRzLmxlbmd0aCA9PT0gMCkge1xcbiAgICBjb250cyA9IHBkZmEoaHRtbCwgJ2JvZHkmJi5yZWFkLWJsb2NrJiZhJyk7XFxuICAgIH1cXG4gICAgdmFyIGZhdl9pZCA9IHBkZmgoaHRtbCxcXFwiYm9keSYmLmJ0bi1wcmltYXJ5Om1hdGNoZXMo5pS26JePKSYmaWRcXFwiKS5zcGxpdCgnXycpWzJdXFxuICAgIGlmKGZhdl9pZCl7XFxuICAgICAgICB2YXIgZmF2X2luZm8gPSB0cnVlO1xcbiAgICAgICAgdmFyIGZhdl91cmwgPSBsaW5rKycvYWpheC9yZW1vdmVfYWxidW1fcGxheWxpc3QnO1xcbiAgICAgICAgdmFyIGZhdl9kYXRhID0ge1xcbiAgICAgICAgICAgIFxcXCJ2aWRlb19pZFxcXCI6IGZhdl9pZCxcXG4gICAgICAgICAgICBcXFwibGlzdFxcXCI6ICdmYXZvcml0ZXMnXFxuICAgICAgICB9XFxuICAgICAgICAgXFxuICAgIH1lbHNle1xcbiAgICAgICAgdmFyIGZhdl9pbmZvID0gZmFsc2U7XFxuICAgICAgICB2YXIgZmF2X2lkID0gcGRmaChodG1sLFxcXCJib2R5JiYuZmxvYXQtcmlnaHQ6bWF0Y2hlcyjmlLbol48pJiZpZFxcXCIpLnNwbGl0KCdfJylbMl1cXG4gICAgICAgIHZhciBmYXZfdXJsID0gbGluaysnL2FqYXgvZmF2b3JpdGVfYWxidW0nO1xcbiAgICAgICAgdmFyIGZhdl9kYXRhID0ge1xcbiAgICAgICAgICAgIFxcXCJhbGJ1bV9pZFxcXCI6IGZhdl9pZCxcXG4gICAgICAgICAgICBcXFwiZmlkXFxcIjogJzAnXFxuICAgICAgICB9XFxuICAgICAgICBcXG4gICAgICAgIH1cXG4gICAvL2xvZyhmYXZfaWQpIFxcblxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IGRlc19hdXRob3IsXFxuICAgICAgICBkZXNjOiBkZXNfZGVzYyxcXG4gICAgICAgIHBpY191cmw6IGRlc19waWMsXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvaW50cm9kdWNlI25vUmVjb3JkSGlzdG9yeSMjbm9IaXN0b3J5I1xcXCIsXFxuICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfdmVydGljYWxfcGljX2JsdXInLFxcbmV4dHJhOiB7XFxuICAgICAgICAgICAgaW1nOiBkZXNfcGljLFxcbiAgICAgICAgICAgIGludHJvZHVjZTogaW50cm9kdWNlLFxcbiAgICAgICAgICAgIGdyYWRpZW50OiB0cnVlICAgICAgICAgICAgXFxuICAgICAgICB9XFxuICAgIH0se1xcbiAgICAgICAgdGl0bGU6IGZhdl9pbmZvPyfigJjigJjigJnigJk8c3Ryb25nPjxmb250IGNvbG9yPVxcXCJyZWRcXFwiPuS4jeaUtuiXjzwvZm9udD48L3N0cm9uZz4nOifigJjigJjigJnigJk8c3Ryb25nPjxmb250IGNvbG9yPVxcXCIjMDBiZmZmXFxcIj7mlLbol488L2ZvbnQ+PC9zdHJvbmc+JyxcXG4gICAgICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKChmYXZfaWQsIGhlYWRlcnMsIGZhdl9pbmZvLCBmYXZfdXJsLCBmYXZfZGF0YSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcG9zdFJlcXVlc3QoZmF2X3VybCwge2hlYWRlcnM6IGhlYWRlcnMsIGJvZHk6IGZhdl9kYXRhfSlcXG4gICAgICAgICAgICAgICAgICAgIHRvYXN0KGZhdl9pbmZvPyflj5bmtojmlLbol48nOifmlLbol4/miJDlip8nKVxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICB9LCBmYXZfaWQsIGhlYWRlcnMsIGZhdl9pbmZvLCBmYXZfdXJsLCBmYXZfZGF0YSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfNFxcXCJcXG4gICAgICAgIFxcbiAgICB9LHtcXG50aXRsZTogXFxcIuS9nOiAhfCfmYfigI3imYLvuI9cXFwiLFxcbnVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoYXV0aG9yKSA9PiB7XFxuICAgICAgY29uc3QgaGlrZXJQb3AgPSByZXF1aXJlKFxcXCJodHRwczovL2hpa2VyZmFucy5jb20vd2Vpc3lyL2pzL2hpa2VyUG9wLmpzXFxcIik7XFxuICAgICAgbGV0IOagh+etviA9IGF1dGhvci5tYXAoeCA9PiB7XFxuICAgICAgICAgIGxldCB0aXRsZSA9IHBkZmgoeCwnYSYmVGV4dCcpO1xcbiAgICAgICAgICAgICAgcmV0dXJuIHsgICAgICAgIFxcbiAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLCAgICAgICAgXFxuICAgICAgICAgICAgICBpY29uOiBnZXRWYXIoJ2xpbmsnKStcXFwiL3RlbXBsYXRlcy9mcm9udGVuZC9haXJhdi9pbWcvYXBwX2xpbmszLnBuZz92PTNcXFwiLCAgICAgICAgXFxuICAgICAgICAgICAgICB1cmw6IHRpdGxlLCAgICB9fSk7ICAgICAgICAgICBoaWtlclBvcC5zZWxlY3RDZW50ZXJJY29uKHtcXG4gICAgICAgICAgICAgIGljb25MaXN0OiDmoIfnrb4sICAgICAgICAgICAgXFxuICAgICAgICAgICAgICB0aXRsZTogXFxcIuWwj/CfpozmgKHmg4VcXFwiLCAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgY29sdW1uczogMiwgICAgICAgICAgICBcXG4gICAgICAgICAgICAgIGNsaWNrKGEpIHsgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS9zZWFyY2g/dGl0bGU9XFxcIithK1xcXCImcGFnZT1meXBhZ2UjZnVsbFRoZW1lIyNub0hpc3RvcnkjXFxcIjsgICAgICAgICAgICB9ICAgICAgICB9KTsgICAgICAgIFxcbiAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjsgICAgfSxhdXRob3IpLFxcbmNvbF90eXBlOiBcXFwidGV4dF80XFxcIixcXG59LHtcXG50aXRsZTogXFxcIuagh+etvvCfj7fvuI9cXFwiLFxcbnVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgodGFnKSA9PiB7XFxuICAgICAgY29uc3QgaGlrZXJQb3AgPSByZXF1aXJlKFxcXCJodHRwczovL2hpa2VyZmFucy5jb20vd2Vpc3lyL2pzL2hpa2VyUG9wLmpzXFxcIik7XFxuICAgICAgbGV0IOagh+etviA9IHRhZy5tYXAoeCA9PiB7XFxuICAgICAgICAgIGxldCB0aXRsZSA9IHBkZmgoeCwnYSYmVGV4dCcpO1xcbiAgICAgICAgICBsZXQgdXJsID0gcGQoeCwnYSYmaHJlZicpK1xcXCImbWFpbl90YWc9MCZvPW12JnQ9YSZwYWdlPVxcXCI7XFxuICAgICAgICAgICAgICByZXR1cm4geyAgICAgICAgXFxuICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsICAgICAgICBcXG4gICAgICAgICAgICAgIGljb246IGdldFZhcignbGluaycpK1xcXCIvdGVtcGxhdGVzL2Zyb250ZW5kL2FpcmF2L2ltZy9waGljb24vbGlicmFyeS5wbmdcXFwiLCAgICAgICAgXFxuICAgICAgICAgICAgICB1cmw6IHRpdGxlLCAgICB9fSk7ICAgICAgICAgICBoaWtlclBvcC5zZWxlY3RDZW50ZXJJY29uKHtcXG4gICAgICAgICAgICAgIGljb25MaXN0OiDmoIfnrb4sICAgICAgICAgICAgXFxuICAgICAgICAgICAgICB0aXRsZTogXFxcIuWkp/CfpozkvKTouqtcXFwiLCAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgY29sdW1uczogMiwgICAgICAgICAgICBcXG4gICAgICAgICAgICAgIGNsaWNrKGEpIHsgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS9zZWFyY2g/dGl0bGU9XFxcIithK1xcXCImcGFnZT1meXBhZ2UjZnVsbFRoZW1lIyNub0hpc3RvcnkjXFxcIjsgICAgICAgICAgICB9ICAgICAgICB9KTsgICAgICAgIFxcbiAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjsgICAgfSx0YWcpLFxcbmNvbF90eXBlOiBcXFwidGV4dF80XFxcIixcXG59LHtcXG50aXRsZTogY29tbWVudCxcXG51cmw6IFxcXCJoaWtlcjovL3BhZ2UvY29tbWVudD9pZD1cXFwiK2lkK1xcXCImcGFnZT1meXBhZ2Ujbm9SZWNvcmRIaXN0b3J5IyNub0hpc3RvcnkjXFxcIixcXG5jb2xfdHlwZTogXFxcInRleHRfNFxcXCIsXFxuXFxufSx7XFxuY29sX3R5cGU6IFxcXCJsaW5lXFxcIlxcbn0pXFxuZnVuY3Rpb24gam0oKSB7XFxuICAgIHZhciBodG1sID0gcmVxdWVzdChpbnB1dCk7XFxuICAgIHZhciBsaXN0ID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCBcXFwiLnBhbmVsLWJvZHkmJmltZzpub3QoW2RhdGEtY2ZzcmNdKTpub3QoW2FsdF0pXFxcIik7XFxuICAgIHZhciBwaWNzID0gW107XFxuICAgIGZvciAodmFyIGl0ZW0gb2YgbGlzdCkge1xcbiAgICAgICAgdmFyIHBpY1VybCA9IHBkKGl0ZW0sICdpbWcmJmRhdGEtb3JpZ2luYWwnKTtcXG4gICAgICAgIGxldCBkZWNvZGUgPSAkKCkuaW1hZ2UoKHBpY1VybCkgPT4ge1xcbiAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImQ/cnVsZT1cXFwiICsgTVlfVElUTEUpKHBpY1VybCwgaW5wdXQpO1xcbiAgICAgICAgfSwgcGljVXJsKTtcXG4gICAgICAgIHBpY3MucHVzaChwaWNVcmwgKyBkZWNvZGUpO1xcbiAgICB9XFxuICAgIHJldHVybiBcXFwicGljczovL1xcXCIgKyBwaWNzLmpvaW4oXFxcIiYmXFxcIik7XFxufVxcblxcbmZ1bmN0aW9uIGJqbSgpIHtcXG4gICAgXFxuICAgIHZhciBodG1sID0gcmVxdWVzdChpbnB1dCk7XFxuICAgIHZhciBsaXN0ID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCBcXFwiLnBhbmVsLWJvZHkmJmltZ1xcXCIpO1xcbiAgICB2YXIgcGljcyA9IFtdO1xcbiAgICBmb3IgKHZhciBpdGVtIG9mIGxpc3QpIHtcXG4gICAgICAgIHZhciBwaWNVcmwgPSBwZChpdGVtLCAnaW1nJiZkYXRhLW9yaWdpbmFsJyk7XFxuICAgICAgICBwaWNzLnB1c2gocGljVXJsKTtcXG4gICAgfVxcbiAgICByZXR1cm4gXFxcInBpY3M6Ly9cXFwiICsgcGljcy5qb2luKFxcXCImJlxcXCIpO1xcbn1cXG4gICAgdmFyIGxhenlKbSA9ICQoXFxcIlxcXCIpLmxhenlSdWxlKGptKTtcXG4gICAgdmFyIGxhenlCam0gPSAkKFxcXCJcXFwiKS5sYXp5UnVsZShiam0pO1xcbiAgICB2YXIgY2hhcHRlckxpc3QgPSBbXTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAoZ2V0TXlWYXIoJ3Noc29ydCcpID09PSAnMScpID8gJzxiPjxmb250IGNvbG9yPVxcXCIjMTlCODlEXFxcIj7pgInpm4bpgIbluo88L2ZvbnQ+PGZvbnQgY29sb3I9XFxcIiNmZjdmNTBcXFwiPuKWvjwvZm9udD48L2I+JzogJzxiPjxmb250IGNvbG9yPVxcXCIjMTlCODlEXFxcIj7pgInpm4bmraPluo88L2ZvbnQ+PGZvbnQgY29sb3I9XFxcIiMzM2NjY2NcXFwiPuKWtDwvZm9udD48L2I+JyxcXG4gICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgbGV0IGNvbmYgPSBnZXRNeVZhcignc2hzb3J0Jyk7XFxuICAgICAgICAgICAgaWYgKGNvbmYgPT0gJzEnKSB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJzaHNvcnRcXFwiLCBcXFwiMFxcXCIpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJzaHNvcnRcXFwiLCBcXFwiMVxcXCIpXFxuICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/liIfmjaLmjpLluo/miJDlip8nXFxuICAgICAgICB9KSxcXG4gICAgICAgcGljX3VybDogJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vbWVzc3kvOS5zdmcnLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2ljb24nXFxuICAgIH0pO1xcblxcblxcbiAgaWYgKGNvbnRzLmxlbmd0aCA9PT0gMCkge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICB0aXRsZTogXFxcIueCueWHu+ebtOaOpemYheivu1xcXCIsXFxuICAgICAgICAgICAgdXJsOiB1cmwgKyBsYXp5QmptLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8xXFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfkuI3op6Plr4YnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCh1cmwsIGxhenlCam0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybCArIGxhenlCam1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB1cmwsIGxhenlCam0pXFxuICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn6Kej5a+GJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygodXJsLCBsYXp5Sm0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybCArIGxhenlKbVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHVybCwgbGF6eUptKVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBdXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgICAgICBjaGFwdGVyTGlzdC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGVzX3RpdGxlLFxcbiAgICAgICAgICAgIHVybDogXFxcImh0dHBzOi8vam1jb21pYy5tZS9waG90by9cXFwiICsgTVlfVVJMLnNwbGl0KFxcXCJcXFxcL1xcXCIpWzRdXFxuICAgICAgICB9KTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGxldCBsaXN0ID0gY29udHMubWFwKHYgPT4ge1xcbiAgICAgICAgICAgIGxldCB0aXRsZSA9IHNwKHBkZmgodiwgJ2EmJlRleHQnKSksXFxuICAgICAgICAgICAgICAgIHVybCA9IHBkKHYsICdhJiZocmVmJyk7XFxuICAgICAgICAgICAgY2hhcHRlckxpc3QucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgdXJsOiB1cmxcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgIHVybDogdXJsICsgbGF6eUptLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfMlxcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5LiN6Kej5a+GJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHVybCwgbGF6eUJqbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybCArIGxhenlCam1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdXJsLCBsYXp5QmptKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+ino+WvhicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCh1cmwsIGxhenlKbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybCArIGxhenlKbVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB1cmwsIGxhenlKbSlcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBdXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIGlmIChnZXRNeVZhcignc2hzb3J0JykgPT09ICcxJykge1xcbiAgICAgICAgICAgIGxpc3QucmV2ZXJzZSgpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgZCA9IGQuY29uY2F0KGxpc3QpO1xcbiAgICB9XFxuICAgIHZhciByZWNvbW1lbmQgPSBwZGZhKGh0bWwsXFxcIiNyZWxhdGVkX2NvbWljcyYmLnJvdzpoYXMoaDQpXFxcIilcXG4gICAgcmVjb21tZW5kLmZvckVhY2goKGRhdGEpID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHBkZmgoZGF0YSxcXFwiaDQmJlRleHRcXFwiKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInJpY2hfdGV4dFxcXCJcXG4gICAgICAgICAgICBcXG4gICAgICAgIH0pXFxuICAgICAgICB2YXIgaXRlbSA9IHBkZmEoZGF0YSwgJ2JvZHkmJi5wLWItMTUnKTtcXHJcXG4gICAgICAgICAgICBpdGVtLmZvckVhY2goKGRhdGFzKSA9PiB7XFxuICAgICAgICAgICAgICAgIHZhciBpbWcgPSBwZGZoKGRhdGFzLFxcXCJpbWcmJmRhdGEtc3JjXFxcIilcXG4gICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gcGRmaChkYXRhcyxcXFwiaW1nJiZhbHRcXFwiKVxcbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gcGQoZGF0YXMsXFxcImEmJmhyZWZcXFwiKSArJyNpbW1lcnNpdmVUaGVtZSMjYXV0b0NhY2hlI0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2VqXFxcIiknXFxuICAgICAgICAgICAgICAgIHZhciBkZXNjID0gcGRmaChkYXRhcyxcXFwiLnRleHQtd2hpdGUmJlRleHRcXFwiKStcXFwiIFxcXCIrcGRmaChkYXRhcyxcXFwiLnZpZGVvLXZpZXdzJiZUZXh0XFxcIilcXG4gICAgICAgICAgICAgICAgdmFyIGFydGljbGUgPSBwZGZoKGRhdGFzLFxcXCIuZ2FtZWxpYl9ibG9ja19oZWFkZXImJlRleHRcXFwiKTtcXG4gICAgICAgICAgICAgICAgaWYoYXJ0aWNsZSl7XFxuICAgICAgICAgICAgICAgICAgICBkZXNjID0gYXJ0aWNsZVxcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gXFxcImhpa2VyOi8vcGFnZS9hcnRpY2xlP3VybD1cXFwiK3BkKGRhdGFzLFxcXCJhLDEmJmhyZWZcXFwiKStcXFwiI25vUmVjb3JkSGlzdG9yeSMjbm9IaXN0b3J5IyNpbW1lcnNpdmVUaGVtZSNcXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBkZXNjLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB1cmwsXFxuICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBpbWcsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcIm1vdmllXzNcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VUaXRsZTogdGl0bGVcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfSlcXHJcXG5cXG59IGNhdGNoIChlKSB7XFxuICAgIGxvZyhlLnRvU3RyaW5nKCkpO1xcbn1cXG5cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmr4/lkajlv4XnnItcIixcInBhdGhcIjpcImJrXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbnJjKGZldGNoUEMoJ2h0dHBzOi8vZ2l0ZWUuY29tL21pc3R5d2F0ZXIvaGlrZXJfaW5mby9yYXcvbWFzdGVyL2dpdGh1YnByb3h5Lmpzb24nKSArICdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbWlzdHl3YXRlci9oaWtlci9tYWluL2YnLCAyNCk7XFxuZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL3BhZ2UveWpcXFwiLCB7fSkpLnJ1bGUpO1xcbmNvbnN0IHBhZ2UgPSBNWV9QQUdFO1xcbmNvbnN0IGhvc3QgPSBnZXRWYXIoJ2xpbmsnKStcXFwiL3dlZWs/c2tkYWQ9MVxcXCI7XFxudmFyIOWumuS9jeS/oeaBryA9IFt7XFxuICAgIOWkp+exu+WumuS9jTogJ2JvZHkmJi53ZWVrLXRpbWUtaXRlbScsXFxuICAgIOWwj+exuzogJ2JvZHkmJmEnLFxcbn0sIHtcXG4gICAg5LiA57qn5a6a5L2NOiAnLmJ0bi1ncm91cCwxJiYubmF2JyxcXG4gICAg5bCP57G7OiAnYm9keSYmYScsXFxufV07XFxuTVlfVVJMID0gaG9zdDtcXG5sZXQgdHJ1ZV91cmwgPSBnZXRNeVZhcihNWV9SVUxFLnVybCwgTVlfVVJMKVxcbnZhciBodG1sID0gZmV0Y2godHJ1ZV91cmwpO1xcbmNvbnN0IGRjID0gZHluYW1pY0NsYXNzKHtcXG4gICAg5YiG57G76aKc6ImyOiBnZXRSYW5nZUNvbG9ycygpXFxufSk7XFxuZGMu5byA5ZCv5oqY5Y+gKGZhbHNlKVxcbmRjLuW8gOWQr+aQnOe0oihmYWxzZSku5Yib5bu65Yqo5oCB5YiG57G7KOWumuS9jeS/oeaBrylcXG52YXIgaXRlbSA9IHBkZmEoaHRtbCwgJ2JvZHkmJi53ZWVrbHktdmlkZW8taXRlbScpO1xcclxcbiAgICAgICAgICAgIGl0ZW0uZm9yRWFjaCgoZGF0YXMpID0+IHtcXHJcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHsgXFxyXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogc3Aoc21hbGwocGRmaChkYXRhcywgJy52aWRlby10aXRsZSYmVGV4dCcpKydcXFxcbicrcGRmaChkYXRhcywgJy50aXRsZS10cnVuY2F0ZSYmVGV4dCcpKSksXFxyXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBzcCgn8J+RgCcrXFxcIiBcXFwiK3BkZmgoZGF0YXMsICdzcGFuJiZUZXh0JykrJ1xcXFxuJytwZGZoKGRhdGFzLCAnLnRpdGxlLXRydW5jYXRlLDEmJlRleHQnKSksXFxyXFxuICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBwZChkYXRhcywgJ2ltZyYmZGF0YS1vcmlnaW5hbCcpLFxcclxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJtb3ZpZV8xX3ZlcnRpY2FsX3BpY1xcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgIHVybDogZ2V0VmFyKCdsaW5rJykrcGRmaChkYXRhcywgJ2EmJmhyZWYnKSsnI2ltbWVyc2l2ZVRoZW1lIyNhdXRvQ2FjaGUjQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvZWpcXFwiKScsXFxuICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VUaXRsZTpzcChwZGZoKGRhdGFzLCAnLnZpZGVvLXRpdGxlJiZUZXh0JykpXFxuICAgICAgICAgICAgICAgICAgICAgIH1cXG59KTtcXG59KVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5o6S6KGM5qacXCIsXCJwYXRoXCI6XCJyYW5rXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbnJjKGZldGNoUEMoJ2h0dHBzOi8vZ2l0ZWUuY29tL21pc3R5d2F0ZXIvaGlrZXJfaW5mby9yYXcvbWFzdGVyL2dpdGh1YnByb3h5Lmpzb24nKSArICdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbWlzdHl3YXRlci9oaWtlci9tYWluL2YnLCAyNCk7XFxuY29uc3QgcGFnZSA9IE1ZX1BBR0U7XFxyXFxudmFyIGhvc3QgPSBnZXRWYXIoJ2xpbmsnKSsnL2FsYnVtcz9vPW12JnQ9JzsgXFxubGV0IHJhbmsgPSBnZXRJdGVtKCdyYW5rJywgJ+WFqOmDqCcpO1xcbiBpZiAoTVlfUEFHRSA9PSAxKSB7XFxyXFxuICAgICAgICAgICAgbGV0IGFyciA9IFtcXFwi5YWo6YOoXFxcIixcXFwi5pys5pelXFxcIixcXFwi5pys5ZGoXFxcIixcXFwi5pys5pyIXFxcIl07XFxuZm9yIChsZXQgaXQgb2YgYXJyKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiByYW5rID09IGl0ID8gJ+KAnOKAnOKAneKAnScgKyBpdC5mb250Y29sb3IoJ3JlZCcpIDogaXQsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzQnLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaXQpID0+IHtcXG4gICAgICAgICAgICAgICAgc2V0SXRlbShcXFwicmFua1xcXCIsIGl0KTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICB9LCBpdClcXG4gICAgICAgIH0pXFxuICAgIH1cXG59XFxuaWYgKHJhbmsgPT0gJ+WFqOmDqCcpIHtcXG5NWV9VUkw9aG9zdCtcXFwiJnBhZ2U9XFxcIitwYWdlO1xcbiBsb2coTVlfVVJMKVxcbnZhciBodG1sID0gZmV0Y2goTVlfVVJMKTtcXG59ZWxzZSBpZiAocmFuayA9PSAn5pys5pelJykge1xcbk1ZX1VSTD1ob3N0K1xcXCJ0XFxcIitcXFwiJnBhZ2U9XFxcIitwYWdlO1xcbiBsb2coTVlfVVJMKVxcbnZhciBodG1sID0gZmV0Y2goTVlfVVJMKTtcXG59ZWxzZSBpZiAocmFuayA9PSAn5pys5ZGoJykge1xcbk1ZX1VSTD1ob3N0K1xcXCJ3XFxcIitcXFwiJnBhZ2U9XFxcIitwYWdlO1xcbiBsb2coTVlfVVJMKVxcbnZhciBodG1sID0gZmV0Y2goTVlfVVJMKTtcXG59ZWxzZSBpZiAocmFuayA9PSAn5pys5pyIJykge1xcbk1ZX1VSTD1ob3N0K1xcXCJtXFxcIitcXFwiJnBhZ2U9XFxcIitwYWdlO1xcbiBsb2coTVlfVVJMKVxcbnZhciBodG1sID0gZmV0Y2goTVlfVVJMKTtcXG59XFxyXFxuIHZhciBsaXN0ID0gcGRmYShodG1sLCAnLmNvbnRhaW5lcjpoYXMoLmNvbC14cy02KSYmLnAtYi0xNScpO1xcclxcbiAgICAgICAgICAgIGxpc3QuZm9yRWFjaChmdW5jdGlvbihpdGVtLCBpbmRleCkge1xcclxcbiAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSBzcChwZGZoKGl0ZW0sICdzcGFuLDEmJlRleHQnKSk7XFxuICAgICAgICAgICAgICAgIHZhciB0YWcgPSBzbWFsbChzcChwZGZoKGl0ZW0sICcudGl0bGUtdHJ1bmNhdGUsMiYmVGV4dCcpKSk7XFxyXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxyXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUrJ1xcXFxuJyt0YWcsXFxyXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBzbWFsbCgn8J+TkScsIDc3Nzc3NykgKyBjb2xvcihzcChwZGZoKGl0ZW0sICcudGl0bGUtdHJ1bmNhdGUsMSYmYSYmVGV4dCcpKSwgJzk5OTk5OScpICsgJ1xcXFxuJyArIHNtYWxsKCfwn5KgJywgNzc3Nzc3KSArIGNvbG9yKHNwKHBkZmgoaXRlbSwgJy5sYWJlbC1jYXRlZ29yeSYmVGV4dCcpKSwgJzk5OTk5OScpKyAnXFxcXG4nICsgc21hbGwoJ/CflKUnLCA2NjY2NjYpICsgY29sb3Ioc3AocGRmaChpdGVtLCAnc3BhbiYmVGV4dCcpKSwgJzk5OTk5OScpLFxcclxcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBwZChpdGVtLCAnaW1nJiZkYXRhLWNmc3JjfHxzcmN8fGRhdGEtc3JjJyksXFxyXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGdldFZhcignbGluaycpK3BkZmgoaXRlbSwgJ2EmJmhyZWYnKSsnI2ltbWVyc2l2ZVRoZW1lIyNhdXRvQ2FjaGUjJysnQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJlalxcXCIpJyxcXHJcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV92ZXJ0aWNhbF9waWMnLFxcclxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXHJcXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IHBkKGl0ZW0sICdpbWcmJmRhdGEtY2ZzcmN8fHNyY3x8ZGF0YS1zcmMnKSxcXHJcXG4gICAgICAgICAgICAgICAgICAgIH1cXHJcXG4gICAgICAgICAgICAgICAgfSk7XFxyXFxuICAgICAgICAgICAgfSk7XFxyXFxuICAgICAgICBcXHJcXG4gICAgICBzZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmjqjojZBcIixcInBhdGhcIjpcInJlY29tbWVuZFwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5yYyhmZXRjaFBDKCdodHRwczovL2dpdGVlLmNvbS9taXN0eXdhdGVyL2hpa2VyX2luZm8vcmF3L21hc3Rlci9naXRodWJwcm94eS5qc29uJykgKyAnaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL21pc3R5d2F0ZXIvaGlrZXIvbWFpbi9mJywgMjQpO1xcbnZhciBodG1sID0gZ2V0UmVzQ29kZSgpO1xcbmNvbnN0IHBhZ2UgPSBNWV9QQUdFO1xcbnZhciBsaXN0ID0gcGRmYShodG1sLCAnYm9keSYmLmNvbC14bC0yJyk7XFxuZm9yICh2YXIgaiBpbiBsaXN0KSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogc3AocGRmaChsaXN0W2pdLCAnLnZpZGVvLXRpdGxlJiZUZXh0JykpLFxcbiAgICAgICAgZGVzYzogc3AocGRmaChsaXN0W2pdLCAnc3BhbiYmVGV4dCcpKydcXFxcdFxcXFx0JytwZGZoKGxpc3Rbal0sICcubGFiZWwtY2F0ZWdvcnkmJlRleHQnKStcXFwiIFxcXCIrcGRmaChsaXN0W2pdLCAnLmxhYmVsLXN1YiYmVGV4dCcpKSxcXG4gICAgICAgIGltZzogcGRmaChsaXN0W2pdLCAnaW1nJiZkYXRhLW9yaWdpbmFsfHxkYXRhLXNyY3x8c3JjJyksXFxuICAgICAgICB1cmw6IHBkKGxpc3Rbal0sICdhJiZocmVmJykrJyNpbW1lcnNpdmVUaGVtZSMjYXV0b0NhY2hlI0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2VqXFxcIiknLFxcbiAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogc3AocGRmaChsaXN0W2pdLCAnLnZpZGVvLXRpdGxlJiZUZXh0JykpLFxcbiAgICAgICAgfVxcbiAgICB9KTtcXG59XFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLliqjnlLtcIixcInBhdGhcIjpcIkhcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxucmMoZmV0Y2hQQygnaHR0cHM6Ly9naXRlZS5jb20vbWlzdHl3YXRlci9oaWtlcl9pbmZvL3Jhdy9tYXN0ZXIvZ2l0aHVicHJveHkuanNvbicpICsgJ2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9taXN0eXdhdGVyL2hpa2VyL21haW4vZicsIDI0KTtcXG5jb25zdCBwYWdlID0gTVlfUEFHRTtcXHJcXG52YXIgaG9zdCA9IGdldFZhcignbGluaycpO1xcbmV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2xhenknLCB7fSkpLnJ1bGUpOyBcXG52YXIgY29udGVudHMgPSBwZGZhKGZldGNoKGhvc3QrJy92aWRlb3MvJyksICdib2R5JiYubW92aWVtZW51LXN1Yjpub3QoOm1hdGNoZXMoQ09TKSknKVxcbnZhciBhcnIgPSBjb250ZW50cy5tYXAoeCA9PiBwZGZoKHgsICdzcGFuJiZUZXh0JykpO1xcbnZhciBpY29uPSBjb250ZW50cy5tYXAoeCA9PiBwZCh4LCAnaW1nJiZzcmMnLGhvc3QpKTtcXG5sZXQgY2FydG9vbiA9IGdldEl0ZW0oJ2NhcnRvb24nLCAnYXJyWzBdJyk7XFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcbi8vbGV0IGFyciA9IFtcXFwiSOWKqOa8q1xcXCIsXFxcIumprOi1m+WFi+egtOWdj1xcXCIsXFxcIuaIkOS6uuWwj+eUteW9sVxcXCIsXFxcIua3seWknOmjn+WgglxcXCJdO1xcbi8vZm9yIChsZXQgaXQgb2YgYXJyKSB7XFxuYXJyLmZvckVhY2goKGl0LGlkKSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBjYXJ0b29uID09IGl0ID8gJ+KAnOKAnOKAneKAnScgKyBpdC5mb250Y29sb3IoJ3JlZCcpIDogaXQsXFxuICAgICAgICAgICAgcGljX3VybDogaWNvbltpZF0sXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdpY29uXzRfY2FyZCcsXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChpdCkgPT4ge1xcbiAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXCJjYXJ0b29uXFxcIiwgaXQpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIH0sIGl0KVxcbiAgICAgICAgfSlcXG4gICAgfSlcXG59XFxuXFxuaWYgKGNhcnRvb24gPT0gYXJyWzBdKSB7XFxuTVlfVVJMPWhvc3QrXFxcIi92aWRlb3MvY2FydG9vbj9wYWdlPVxcXCIrcGFnZTtcXG52YXIgaHRtbCA9IGZldGNoKE1ZX1VSTCk7XFxufWVsc2UgaWYgKGNhcnRvb24gPT0gYXJyWzFdKSB7XFxuTVlfVVJMPWhvc3QrXFxcIi9zZWFyY2gvbW92aWVzLz9tYWluX3RhZz0wJnNlYXJjaF9xdWVyeT0lRTklQTklQUMlRTglQjUlOUIlRTUlODUlOEIlRTclQTAlQjQlRTUlOUQlOEYlRTclODklODgmcGFnZT1cXFwiK3BhZ2U7XFxudmFyIGh0bWwgPSBmZXRjaChNWV9VUkwpO1xcbn1lbHNlIGlmIChjYXJ0b29uID09IGFyclsyXSkge1xcbk1ZX1VSTD1ob3N0K1xcXCIvbW92aWVzP3BhZ2U9XFxcIitwYWdlO1xcbnZhciBodG1sID0gZmV0Y2goTVlfVVJMKTtcXG59ZWxzZSBpZiAoY2FydG9vbiA9PSBhcnJbM10pIHtcXG5NWV9VUkw9aG9zdCtcXFwiL2Jsb2dWaWRlbz9wYWdlPVxcXCIrcGFnZTtcXG52YXIgaHRtbCA9IGZldGNoKE1ZX1VSTCk7XFxufVxcclxcbiB2YXIgbGlzdCA9IHBkZmEoaHRtbCwgJ2JvZHkmJi5jb2wtc20tNicpO1xcbmZvciAodmFyIGogaW4gbGlzdCkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHNwKHBkZmgobGlzdFtqXSwgJy52aWRlby10aXRsZSYmVGV4dCcpKSxcXG4gICAgICAgIGRlc2M6IHNwKHBkZmgobGlzdFtqXSwgJy52aWRlby1rZXl3b3JkcyYmVGV4dCcpKydcXFxcbicrcGRmaChsaXN0W2pdLCAnLnZpZGVvLWFkZGVkfHwudmlkZW8ta2V5d29yZHMsMSYmVGV4dCcpKydcXFxcbicrcGRmaChsaXN0W2pdLCAnLmR1cmF0aW9ufHwudmlkZW8ta2V5d29yZHMsMiYmVGV4dCcpKSxcXG4gICAgICAgIGltZzogcGRmaChsaXN0W2pdLCAnaW1nJiZkYXRhLW9yaWdpbmFsfHxzcmMnKSxcXG4gICAgICAgIHVybDogcGQobGlzdFtqXSwgJ2EmJmhyZWYnKStsYXp5LFxcbmNvbF90eXBlOiAncGljXzFfY2FyZCcsXFxuICAgIH0pO1xcbn1cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLop6PmnpBcIixcInBhdGhcIjpcImxhenlcIixcInJ1bGVcIjpcInZhciBsYXp5ID0gJCgnJykubGF6eVJ1bGUoKCkgPT4ge1xcbnRyeXtcXG4gICAgdmFyIHVybCA9IHBkKGZldGNoKGlucHV0KSwnc291cmNlJiZzcmMnKTtcXG5sb2cgKHVybClcXG4gICAgaWYgKC9tM3U4fG1wNC8udGVzdCh1cmwpKSB7XFxuICAgICAgICByZXR1cm4gdXJsXFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBldmFsKHJlcXVlc3QodXJsKS5tYXRjaCgvdmFyIGNvbmZpZyA9IHtbXFxcXHNcXFxcU10qP30vKVswXSlcXG4gICAgICAgIHZhciB2aWRlbyA9IGNvbmZpZy51cmw7ICAgICAgXFxuICByZXR1cm4gdmlkZW9cXG4gICAgfVxcbiAgICB9Y2F0Y2goZSlcXG57XFxuICByZXR1cm4gXFxcInZpZGVvOi8vXFxcIitpbnB1dFxcbn1cXG59KVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi56aB5ryr6K+E6K66XCIsXCJwYXRoXCI6XCJjb21tZW50XCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdXFxucmMoZmV0Y2hQQygnaHR0cHM6Ly9naXRlZS5jb20vbWlzdHl3YXRlci9oaWtlcl9pbmZvL3Jhdy9tYXN0ZXIvZ2l0aHVicHJveHkuanNvbicpICsgJ2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9taXN0eXdhdGVyL2hpa2VyL21haW4vZicsIDI0KTtcXG5jb25zdCBpZCA9IGdldFBhcmFtKCdpZCcsICcyODcyMzQnKTtcXG5jb25zdCBwYWdlID0gTVlfUEFHRTtcXG5sZXQgdXJsID1nZXRWYXIoJ2xpbmsnKSsnL2FqYXgvYWxidW1fcGFnaW5hdGlvbic7XFxuaHRtbCA9IHBvc3QodXJsLCB7XFxuICAgIGhlYWRlcnM6IHtcXG4gICAgICAgIFxcXCJYLVJlcXVlc3RlZC1XaXRoXFxcIjogXFxcIlhNTEh0dHBSZXF1ZXN0XFxcIixcXG4gICAgfSxcXG4gICAgYm9keToge1xcbiAgICAgICAgdmlkZW9faWQ6IGlkLFxcbiAgICAgICAgcGFnZTogcGFnZSxcXG4gICAgICAgIH1cXG4gICAgICAgIH0pXFxuLy9sb2coaHRtbClcXG52YXIgbGlzdCA9IHBkZmEoaHRtbCwnYm9keSYmLnBhbmVsJylcXG5saXN0LmZvckVhY2goKGxpc3QpID0+e1xcbiAgICBsZXQgdGl0bGUgPSBwZGZoKGxpc3QsJy50aW1lbGluZS11c2VybmFtZSYmVGV4dCcpXFxuICAgIGxldCBpbWcgPSBnZXRWYXIoJ2xpbmsnKStwZGZoKGxpc3QsJ2ltZyYmc3JjJylcXG4gICAgbGV0IGxldmVsID0gcGRmaChsaXN0LCcudGltZWxpbmUtdXNlci1sZXZlbCYmVGV4dCcpXFxuICAgIGxldCB0aW1lID0gcGRmaChsaXN0LCcudGltZWxpbmUtZGF0ZSYmVGV4dCcpXFxuICAgIGxldCBjb250ZW50ID0gc3AocGRmaChsaXN0LCcudGltZWxpbmUtY29udGVudCYmVGV4dCcpKVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHRpdGxlK1xcXCIgIFxcXCIrbGV2ZWwsXFxuICAgICAgICBkZXNjOiB0aW1lLFxcbiAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICB1cmw6IGltZyxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIlxcbiAgICB9KVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IGNvbnRlbnQsXFxuICAgICAgICBjb2xfdHlwZTogXFxcInJpY2hfdGV4dFxcXCJcXG4gICAgfSlcXG4gICAgfSlcXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIummlumhtVwiLFwicGF0aFwiOlwi6aaW6aG1XCIsXCJydWxlXCI6XCJ2YXIgaHRtbD1mZXRjaChsaW5rKTtcXG52YXIgSWNvbiA9IGxpbmsrXFxcIi90ZW1wbGF0ZXMvZnJvbnRlbmQvYWlyYXYvaW1nL1xcXCI7XFxudmFyIExhYl9pY29uID0gWydwaGljb24vd2Vlay5wbmcnLCdhcHBfbGluazMucG5nP3Y9MycsJ3BoaWNvbi9rb3JlYS5wbmcnLCdwaGljb24vRG91amluLnBuZycsJ3BoaWNvbi9vbmx5b25lLnBuZycsICdwaGljb24vbmV3LnBuZyddO1xcbmlmIChNWV9QQUdFID09IDEpe1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdXJsOlxcXCJpZihwYXJzZUludChpbnB1dCkgPT0gaW5wdXQgJiYgaW5wdXQubGVuZ3RoID09PSA2KXsnaGlrZXI6Ly9wYWdlL2VqP3VybD0nK2dldFZhcignbGluaycpKycvYWxidW0vJytpbnB1dCsnI2ltbWVyc2l2ZVRoZW1lIyNhdXRvQ2FjaGUjJ31lbHNlICdoaWtlcjovL3BhZ2Uvc2VhcmNoP3BhZ2U9ZnlwYWdlI2Z1bGxUaGVtZSMjbm9IaXN0b3J5Iyc7XFxcIixcXG4gICAgICAgIGRlc2M6ICfor7fovpPlhaXnpoHmvKtpZHzlhbPplK7or40nLFxcbiAgICAgICAgY29sX3R5cGU6ICdpbnB1dCcsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIG9uQ2hhbmdlOiBcXFwicHV0VmFyKCdUaXRsZScsaW5wdXQpO3B1dFZhcignVXJsJyxnZXRWYXIoJ2xpbmsnKSsnL3NlYXJjaC9waG90b3M/c2VhcmNoX3F1ZXJ5PScraW5wdXQrJyZtYWluX3RhZz0wJm89bXYmdD1hJnBhZ2U9Jyk7XFxcIiAgICAgICAgICAgIFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pICAgIFxcbnZhciBMYWIxID0gcGRmYShodG1sLCdib2R5JiYucm93LDg6MTYnKTtcXG52YXIgTGFiMiA9IHBkZmEoaHRtbCwnYm9keSYmLnJvdywyMzoyNScpO1xcbnZhciBMYWIzID0gcGRmYShodG1sLCdib2R5JiYucm93LDI2OjI4Jyk7XFxudmFyIExhYnMgPSBMYWIxLmNvbmNhdChMYWIyKS5jb25jYXQoTGFiMylcXHJcXG4gICAgICAgIExhYnMuZm9yRWFjaCgoZGF0YSkgPT4ge1xcbiAgICAgICAgIHZhciBsaXN0ID0gcGRmYShkYXRhLCAnYm9keSYmLnJvdzpoYXMoLnB1bGwtbGVmdCknKTtcXG4gICAgICAgICBsaXN0LmZvckVhY2goKGRhdGEpID0+IHtcXG52YXIgdGl0bGU9c3AocGRmaChkYXRhLCAnaDQmJlRleHQnKSk7XFxuaWYoL+i/nui9vS8udGVzdCh0aXRsZSkpe1xcbmlkPTBcXG59ZWxzZSBpZigv56aB5ryrLy50ZXN0KHRpdGxlKSl7XFxuaWQgPTFcXG59ZWxzZSBpZigv6Z+p5ryrLy50ZXN0KHRpdGxlKSl7XFxuaWQgPTJcXG59ZWxzZSBpZigv5pys5pysLy50ZXN0KHRpdGxlKSl7XFxuaWQgPTNcXG59ZWxzZSBpZigv5Y2VLy50ZXN0KHRpdGxlKSl7XFxuaWQgPTRcXG59ZWxzZSBpZigv5pyA5pawLy50ZXN0KHRpdGxlKSl7XFxuaWQgPTVcXG59XFxuICAgICAgICAgICBkLnB1c2goe1xcclxcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLmm7TlpJrigbpcXFwiLFxcbiAgICAgICAgICAgICAgICBwaWNfdXJsOiBJY29uK0xhYl9pY29uW2lkXSxcXG4gICAgICAgICAgICAgICAgdXJsOiBsaW5rK3BkZmgoZGF0YSwnYSYmaHJlZicpKyAnJnBhZ2U9ZnlwYWdlQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvcmVjb21tZW5kXFxcIiknLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxyXFxuICAgICAgICAgICAgfSk7XFxufSkgICAgICAgICAgICBcXHJcXG4gICAgICAgICAgICB2YXIgaXRlbSA9IHBkZmEoZGF0YSwgJy5yb3cmJi5wLWItMTUsMDo5Jyk7XFxyXFxuICAgICAgICAgICAgaXRlbS5mb3JFYWNoKChkYXRhcykgPT4ge1xcclxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHNwKHBkZmgoZGF0YXMsICdpbWcmJmFsdCcpKSxcXG4gICAgICAgIGRlc2M6IHNwKHBkZmgoZGF0YXMsICdzcGFuJiZUZXh0JykrJ1xcXFx0XFxcXHQnK3BkZmgoZGF0YXMsICcubGFiZWwtY2F0ZWdvcnkmJlRleHQnKSksXFxuICAgICAgICBpbWc6IHBkZmgoZGF0YXMsICdpbWcmJmRhdGEtc3JjfHxkYXRhLW9yaWdpbmFsJyksXFxuICAgICAgICB1cmw6IGxpbmsrcGRmaChkYXRhcywgJ2EmJmhyZWYnKSsnI2ltbWVyc2l2ZVRoZW1lIyNhdXRvQ2FjaGUjQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvZWpcXFwiKScsXFxuICAgICAgIGNvbF90eXBlOiBcXFwibW92aWVfM1xcXCIsXFxuICAgIH0pO1xcbn0pXFxufSlcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLnvZHpobXnmbvlvZVcIixcInBhdGhcIjpcIlg1XCIsXCJydWxlXCI6XCJ2YXIgaHRtbCA9IHJlcXVlc3Qoc3VybCx7XFxuICAgIGhlYWRlcnM6IGhlYWRlcnNcXG59KVxcbmlmKGh0bWwuaW5jbHVkZXMoXFxcIueZu+WHulxcXCIpKXtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08YmlnPjxmb250IGNvbG9yPSNGRjAwRkY+6LSm5Y+35bey55m75b2VPC9mb250PjwvYmlnPicsXFxuICAgICAgICAgICAgZGVzYzogJ+KAnOKAnOKAneKAnScgKyAn5Yi35paw6aG16Z2i5YaF5a65Jy5mb250Y29sb3IoJyNGRjAwRkYnKS5iaWcoKSxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcbiAgICAgICAgfSk7XFxuICAgIH1lbHNle1xcblxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ0nICsgJ+eCueWHu+eZu+W9lei0puWPtycuZm9udGNvbG9yKCcjRkYwMEZGJykuYmlnKCksXFxuICAgICAgICB1cmw6IHN1cmwgKyAkKCcnKS5ydWxlKCgpID0+IHtcXG4gICAgICAgICAgICB2YXIgZCA9IFtdO1xcbiAgICAgICAgICAgIGxvZyhmZXRjaENvb2tpZShNWV9VUkwpKVxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAneDVfd2Vidmlld19zaW5nbGUnLFxcbiAgICAgICAgICAgICAgICB1cmw6IE1ZX1VSTCxcXG4gICAgICAgICAgICAgICAgZGVzYzogJ2xpc3QmJnNjcmVlbicsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFxcXCJNb3ppbGxhLzUuMCAoTGludXg7IEFuZHJvaWQgMTI7IFNNLUc5NzUwIEJ1aWxkL1NQMUEuMjEwODEyLjAxNjsgd3YpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vNC4wIENocm9tZS84OS4wLjQzODkuNzIgTVFRQnJvd3Nlci82LjIgVEJTLzA0NjI3OSBNb2JpbGUgU2FmYXJpLzUzNy4zNlxcXCIsLy9QQ19VQSwgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICBzaG93UHJvZ3Jlc3M6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjaGVjaygpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvID0gZmJhLmdldENvb2tpZSh1KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvLmluY2x1ZGVzKCdyZW1lbWJlcj0nKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmJhLnBhcnNlTGF6eVJ1bGUoJCQkKCkubGF6eVJ1bGUoKGNvKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL2NhY2hlL0pNX2Nvb2tpZS50eHQnLCBjbyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9hc3QoJ+i0puWPt+W3sueZu+W9lScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2sodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBjbykpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChjaGVjaywgNTAwKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVjaygpO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgTVlfVVJMKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgcmV0dXJuIHNldFJlc3VsdChkKTtcXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbiAgICB9KTtcXG5cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuLvpobXmlLbol49cIixcInBhdGhcIjpcImZhdm9yaXRlXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbnZhciBsaW5rID0gZ2V0VmFyKCdsaW5rJyk7XFxudmFyIGhlYWRlcnMgPSB7XFxuICAgICAgICBcXFwiQ29va2llXFxcIjogZmV0Y2hQQygnaGlrZXI6Ly9maWxlcy9jYWNoZS9KTV9jb29raWUudHh0JykgfHwgJycsIFxcbiAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOlxcXCJNb3ppbGxhLzUuMCAoTGludXg7IEFuZHJvaWQgMTI7IFNNLUc5NzUwIEJ1aWxkL1NQMUEuMjEwODEyLjAxNjsgd3YpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vNC4wIENocm9tZS84OS4wLjQzODkuNzIgTVFRQnJvd3Nlci82LjIgVEJTLzA0NjI3OSBNb2JpbGUgU2FmYXJpLzUzNy4zNlxcXCJcXG4gICAgfTtcXG52YXIgaWNvbiA9IHBkKHJlcXVlc3QoTVlfVVJMLHtoZWFkZXJzOmhlYWRlcnN9KSxcXFwiLnBhbmVsLWJvZHkmJmltZyYmc3JjXFxcIixsaW5rKVxcbnZhciBmYXZzID0gcGRmYShyZXF1ZXN0KE1ZX1VSTCx7aGVhZGVyczpoZWFkZXJzfSksXFxcImJvZHkmJi5wYW5lbC1oZWFkaW5nOmhhcygucHVsbC1sZWZ0KSYmLnB1bGwtbGVmdFxcXCIpLm1hcCh4ID0+IHBkZmgoeCwgJ1RleHQnKSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IGZhdnNbMF0sXFxuICAgIGRlc2M6IGZhdnNbMV0sXFxuICAgIHBpY191cmw6IGljb24sXFxuICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCJcXG59KVxcbmxldCBuYXYgPSBbXFxcIuaUtuiXj+aXtumXtFxcXCIsXFxcIuabtOaWsOaXtumXtFxcXCJdO1xcbmxldCBsaW5rcyA9IFsnP289bXInLCc/bz1tcCddO1xcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hdi5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgbGV0IG15dGl0bGUgPSBuYXZbaV07XFxuICAgICAgICBsZXQgc2ogPSBsaW5rc1tpXVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIoJ3NjdGl0bGUnLCBcXFwi5pS26JeP5pe26Ze0XFxcIikgPT0gbXl0aXRsZSA/ICfigJzigJzigJ3igJ0nK215dGl0bGUuZm9udGNvbG9yKCdyZWQnKS5zbWFsbCgpOiAn4oCc4oCc4oCd4oCdJytteXRpdGxlLnNtYWxsKCksXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKG15dGl0bGUsc2opID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInNjdGl0bGVcXFwiLCBteXRpdGxlKTtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImZhdlxcXCIsTVlfVVJMK3NqKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgIH0sIG15dGl0bGUsc2opLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiZmxleF9idXR0b25cXFwiXFxuICAgICAgICB9KTtcXG4gICAgfVxcbmxldCBmYXYgPSBnZXRNeVZhcihcXFwiZmF2XFxcIixNWV9VUkwrJz9vPW1yJylcXG4vL2xvZyhmYXYpXFxudmFyIGh0bWwgPSByZXF1ZXN0KGZhdix7XFxuICAgIGhlYWRlcnM6aGVhZGVyc1xcbn0pIFxcbnZhciBmYXZvcml0ZSA9IHBkZmEoaHRtbCxcXFwiYm9keSYmLnBhbmVsLWJvZHk6aGFzKGFbaHJlZn49YWxidW1dKSYmLnRodW1iLW92ZXJsYXk6aGFzKGFbaHJlZn49YWxidW1dKVxcXCIpXFxuZmF2b3JpdGUuZm9yRWFjaCh4ID0+IHtcXG4gICAgdmFyIHRpdGxlID0gcGRmaCh4LFxcXCIudmlkZW8tdGl0bGUmJlRleHRcXFwiKVxcbiAgICB2YXIgaW1nID0gcGQoeCxcXFwiaW1nJiZzcmNcXFwiLGxpbmspXFxuICAgIHZhciB1cmwgPSBwZCh4LFxcXCJhJiZocmVmXFxcIixsaW5rKSsnI2ltbWVyc2l2ZVRoZW1lIyNhdXRvQ2FjaGUjQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvZWpcXFwiKSc7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICBwaWNfdXJsOiBpbWcsXFxuICAgICAgICB1cmw6IHVybCxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwibW92aWVfM1xcXCIsXFxuICAgICAgICBleHRyYTp7XFxuICAgIHBhZ2VUaXRsZTogdGl0bGVcXG4gICAgfVxcbiAgICB9KVxcbiAgICBcXG59KVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5paH56ugXCIsXCJwYXRoXCI6XCJhcnRpY2xlXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbnJjKGZldGNoUEMoJ2h0dHBzOi8vZ2l0ZWUuY29tL21pc3R5d2F0ZXIvaGlrZXJfaW5mby9yYXcvbWFzdGVyL2dpdGh1YnByb3h5Lmpzb24nKSArICdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbWlzdHl3YXRlci9oaWtlci9tYWluL2YnLCAyNCk7XFxudmFyIGxpbmsgPSBnZXRWYXIoJ2xpbmsnKVxcbnZhciBoZWFkZXJzID0ge1xcbiAgICAgICAgXFxcIkNvb2tpZVxcXCI6IGZldGNoUEMoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvSk1fY29va2llLnR4dCcpIHx8ICcnLCBcXG4gICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjpcXFwiTW96aWxsYS81LjAgKExpbnV4OyBBbmRyb2lkIDEyOyBTTS1HOTc1MCBCdWlsZC9TUDFBLjIxMDgxMi4wMTY7IHd2KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzQuMCBDaHJvbWUvODkuMC40Mzg5LjcyIE1RUUJyb3dzZXIvNi4yIFRCUy8wNDYyNzkgTW9iaWxlIFNhZmFyaS81MzcuMzZcXFwiLFxcbiAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBNWV9VUkxcXG4gICAgfTtcXG4gICAgLy9sb2coTVlfVVJMKVxcbnZhciBodG1sID0gZmV0Y2goTVlfVVJMLHtoZWFkZXJzOmhlYWRlcnN9KVxcbnZhciB0aXRsZSA9IHBkZmgoaHRtbCwnLnBhbmVsLWhlYWRpbmcmJmEmJlRleHQnKS5mb250Y29sb3IoJyMxNzgxYjUnKS5zbWFsbCgpK1xcXCIgXFxcIisnPHN0cm9uZz4nK3BkZmgoaHRtbCwnLnBhbmVsLWhlYWRpbmcmJmg0JiZUZXh0JykrJzxzdHJvbmc+J1xcbnZhciB0YWdzID0gcGRmaChodG1sLCcucGFuZWwtaGVhZGluZyYmLm0tdC01JiZUZXh0Jykuc21hbGwoKVxcbnZhciBhdXRob3JpY29uID0gcGQoaHRtbCwnLnBhbmVsLWhlYWRpbmcmJmltZyYmc3JjJylcXG52YXIgYXV0aG9yID0gIHBkZmgoaHRtbCwnLnBhbmVsLWhlYWRpbmcmJi5ibG9nX25hbWVfaWQmJlRleHQnKVxcbnZhciBkYXRlID0gIHBkZmgoaHRtbCwnLnBhbmVsLWhlYWRpbmcmJi5kYXRlJiZUZXh0JylcXG52YXIgbWFpbiA9IHBkZmgoaHRtbCwgJy5wYW5lbC1ib2R5JiYucC10LTEwJiZIdG1sJykucmVwbGFjZSgvc3JjPVxcXCIoW15cXFwiXSopXFxcIi9nLCBgc3JjPVxcXCJgICsgbGluayArIGAkMVxcXCJgKS5yZXBsYWNlKC88YnJcXFxccypcXFxcLz8+L2dpLCAnJyk7XFxuIGQucHVzaCh7XFxuICAgICAgcGljX3VybDogJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS9pbWcvdG9wLnBuZycsXFxuICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgY29sX3R5cGU6ICdwaWNfMV9mdWxsJyxcXG4gICAgfSx7XFxuICAgIHRpdGxlIDogdGl0bGUsXFxuICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIixcXG5leHRyYToge1xcbiAgICAgICAgICAgICAgICB0ZXh0U2l6ZTogMjAsXFxuICAgICAgICAgICAgfVxcbn0se1xcbiAgICB0aXRsZSA6IHRhZ3MsXFxuICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIixcXG59LHtcXG4gICAgdGl0bGU6IGF1dGhvcixcXG4gICAgZGVzYzogZGF0ZSxcXG4gICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgIHBpY191cmw6IGF1dGhvcmljb24sXFxuICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIlxcbn0se1xcbiAgICB0aXRsZTogc3AobWFpbiksXFxuICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgdGV4dFNpemU6IDE0LFxcbiAgICAgICAgICAgIH1cXG59KVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5Lmm5bqTXCIsXCJwYXRoXCI6XCJMaWJyYXJ5XCIsXCJydWxlXCI6XCJqczpcXG52YXIgZD1bXVxcbnZhciBsaW5rID0gZ2V0VmFyKCdsaW5rJylcXG52YXIgaGVhZGVycyA9IHtcXG4gICAgICAgIFxcXCJDb29raWVcXFwiOiBmZXRjaFBDKCdoaWtlcjovL2ZpbGVzL2NhY2hlL0pNX2Nvb2tpZS50eHQnKSB8fCAnJywgXFxuICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6XFxcIk1vemlsbGEvNS4wIChMaW51eDsgQW5kcm9pZCAxMjsgU00tRzk3NTAgQnVpbGQvU1AxQS4yMTA4MTIuMDE2OyB3dikgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgQ2hyb21lLzg5LjAuNDM4OS43MiBNUVFCcm93c2VyLzYuMiBUQlMvMDQ2Mjc5IE1vYmlsZSBTYWZhcmkvNTM3LjM2XFxcIlxcbiAgICB9O1xcbnZhciBNWV9VUkwgPSBsaW5rICsnL2Jsb2dzJztcXG5jb25zdCBwYWdlID0gTVlfUEFHRTtcXG5jb25zdCDkuIvkuIDpobUgPSBcXFwicGQoaHRtbCwgJ2E6bWF0Y2hlcyjCuykmJmhyZWYnKVxcXCI7XFxuZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL3BhZ2UveWpcXFwiLCB7fSkpLnJ1bGUpO1xcbnZhciDlrprkvY3kv6Hmga8gPSBbe1xcbiAgICDlpKfnsbvlrprkvY06ICdib2R5JiYubmF2LXBpbGxzJyxcXG4gICAg5bCP57G7OiAnYm9keSYmYScsXFxufV07XFxubGV0IHRydWVfdXJsID0gZ2V0VHJ1ZWxpbmsoTVlfUlVMRS51cmwsIE1ZX1VSTCwgcGFnZSk7XFxuLy9sb2codHJ1ZV91cmwpXFxuTVlfVVJMID0gdHJ1ZV91cmw7XFxudmFyIGh0bWwgPSBmZXRjaChNWV9VUkwse2hlYWRlcnM6aGVhZGVyc30pO1xcbmNvbnN0IGRjID0gZHluYW1pY0NsYXNzKHtcXG4gICAg5YiG57G76aKc6ImyOiBnZXRSYW5nZUNvbG9ycygpXFxufSk7XFxuZGMu5byA5ZCv5oqY5Y+gKGZhbHNlKVxcbmRjLuW8gOWQr+aQnOe0oihmYWxzZSku5Yib5bu65Yqo5oCB5YiG57G7KOWumuS9jeS/oeaBrylcXG5cXG52YXIgbGlzdCA9IHBkZmEoaHRtbCxcXFwiI3dyYXBwZXImJi5jb250YWluZXImJi5vd2wtY2Fyb3VzZWwmJi5nYW1lLW1haW5cXFwiKVxcbmxpc3QuZm9yRWFjaCh4ID0+IHtcXG4gICAgdmFyIHRpdGxlID0gcGRmaCh4LFxcXCJpbWcmJmFsdFxcXCIpXFxuICAgIHZhciBpbWcgPSBwZGZoKHgsXFxcImltZyYmZGF0YS1zcmNcXFwiKVxcbiAgICB2YXIgdXJsID0gXFxcImhpa2VyOi8vcGFnZS9hcnRpY2xlP3VybD1cXFwiK3BkKHgsXFxcImEsMSYmaHJlZlxcXCIpK1xcXCIjbm9SZWNvcmRIaXN0b3J5IyNub0hpc3RvcnkjI2ltbWVyc2l2ZVRoZW1lI1xcXCJcXG4gICAgdmFyIGRlc2MgPSBwZGZoKHgsXFxcImEmJlRleHRcXFwiKVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6dGl0bGUsXFxuICAgICAgICBkZXNjOmRlc2MsXFxuICAgICAgICBwaWNfdXJsOmltZyxcXG4gICAgICAgIHVybDp1cmwsXFxuICAgICAgICBjb2xfdHlwZTogXFxcIm1vdmllXzNcXFwiXFxuICAgICAgICBcXG4gICAgfSlcXG4gICAgXFxufSlcXG5hdXRvUGFnZSgpO1xcbnNldFJlc3VsdChkKVwifV0iLCJpY29uIjoiaHR0cHM6Ly8xOC1jb21pY2ZyaWVyZW4ubWUvdGVtcGxhdGVzL2Zyb250ZW5kL2FpcmF2L2ltZy9hcHBfbGluazMucG5nP3Y9MyIsInByb3h5IjoiIn0=
Add Comment
Please, Sign In to add comment