Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@禁漫天堂@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoi56aB5ryr5aSp5aCCIiwiYXV0aG9yIjoiTElVJuWtkOS4keWvheWNryZLaWxsZXImTG95RGdJayblraPpo44iLCJ1cmwiOiJoaWtlcjovL2VtcHR5IyMvYWxidW1zP289bXImcGFnZT1meXBhZ2UiLCJ2ZXJzaW9uIjowLCJjb2xfdHlwZSI6Im1vdmllXzMiLCJjbGFzc19uYW1lIjoiIiwidHlwZSI6ImNhcnRvb24iLCJjbGFzc191cmwiOiIiLCJhcmVhX25hbWUiOiIiLCJhcmVhX3VybCI6IiIsInNvcnRfbmFtZSI6IiIsInllYXJfbmFtZSI6IiIsInNvcnRfdXJsIjoiIiwieWVhcl91cmwiOiIiLCJmaW5kX3J1bGUiOiJqczpcbnZhciBkID0gW107XG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goXCJoaWtlcjovL3BhZ2UvamlhblwiKSkucnVsZSk7XG4vL2V2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UveWk/cnVsZT3OsScpKS5ydWxlKTtcbmV2YWwoSlNPTi5wYXJzZShmZXRjaChcImhpa2VyOi8vcGFnZS95alwiLCB7fSkpLnJ1bGUpO1xucHV0VmFyKCdsaW5rJyxjb25maWcuaG9zdClcbnZhciBsaW5rID0gZ2V0VmFyKCdsaW5rJylcbmNvbnN0IHBhZ2UgPSBNWV9QQUdFO1xuY29uc3QgZGMgPSBkeW5hbWljQ2xhc3Moe1xuICAgIOWIhuexu+minOiJsjogZ2V0UmFuZ2VDb2xvcnMoKVxufSk7XG52YXIgZ2V0UmFuZ2VDb2xvcnMgPSBmdW5jdGlvbigpIHvCoMKgwqDCoMKgwqDCoFxuICAgIHJldHVybiAoJzAwMDAwJyArIChNYXRoLnJhbmRvbSgpICogMHgxMDAwMDAwIDw8IDApLnRvU3RyaW5nKDE2KSkuc3Vic3RyKC02KTvCoMKgwqDCoMKgXG59XG52YXIgaGVhZGVycyA9IHtcbiAgICAgICAgXCJDb29raWVcIjogZmV0Y2hQQygnaGlrZXI6Ly9maWxlcy9jYWNoZS9KTV9jb29raWUudHh0JykgfHwgJycsIFxuICAgICAgICBcIlVzZXItQWdlbnRcIjpcIk1vemlsbGEvNS4wIChMaW51eDsgQW5kcm9pZCAxMjsgU00tRzk3NTAgQnVpbGQvU1AxQS4yMTA4MTIuMDE2OyB3dikgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgQ2hyb21lLzg5LjAuNDM4OS43MiBNUVFCcm93c2VyLzYuMiBUQlMvMDQ2Mjc5IE1vYmlsZSBTYWZhcmkvNTM3LjM2XCJcbiAgICB9O1xudmFyIGxvZ2luID0gbGluayArIFwiL3VzZXJcIjtcbnZhciBsb2dpbmluZyA9IHJlcXVlc3QobG9naW4se1xuICAgIGhlYWRlcnM6IGhlYWRlcnNcbn0pXG50cnl7XG4gICAgdmFyIGZhdiA9IHBkKGxvZ2luaW5nLFwiLmhlYWRlci1tZW51JiZhOm1hdGNoZXMo5pS26JePKSYmaHJlZlwiLGxpbmspXG4gICAgdmFyIGljb24gPSBwZChsb2dpbmluZyxcIi5wYW5lbC1ib2R5JiZpbWcmJnNyY1wiLGxpbmspXG52YXIgdXNlcl9uYW1lID0gcGRmaChsb2dpbmluZyxcIi5wYW5lbC1ib2R5JiYuaGVhZGVyLXJpZ2h0LXVzZXJuYW1lJiZUZXh0XCIpXG52YXIgZXhwID0gcGRmaChsb2dpbmluZyxcIi5oZWFkZXItcHJvZmlsZS1leHAmJlRleHRcIilcbnZhciBMViA9IChcIkx2LlwiK3BkZmgobG9naW5pbmcsXCIucGFuZWwtYm9keSYmLmhlYWRlci1wcm9maWxlLXJvdy12YWx1ZTpoYXMoLmhlYWRlci1wcm9maWxlLWV4cCkmJlRleHRcIikucmVwbGFjZShleHAsJycpKS5mb250Y29sb3IoJyM1NWJiOGEnKVxufWNhdGNoKGUpe31cbmlmIChNWV9QQUdFID09IDEpXG4ge1xuICAgICBpZihsb2dpbmluZy5pbmNsdWRlcyhcIueZu+WHulwiKSl7XG4gICAgICAgIGQucHVzaCh7XG4gICAgICAgICAgICB0aXRsZTogdXNlcl9uYW1lLFxuICAgICAgICAgICAgdXJsOiBcImhpa2VyOi8vcGFnZS9mYXZvcml0ZT91cmw9XCIrZmF2K1wiJnBhZ2U9ZnlwYWdlI25vUmVjb3JkSGlzdG9yeSMjbm9IaXN0b3J5I1wiLFxuICAgICAgICAgICAgZGVzYzogTFYrXCIgXCIrZXhwLFxuICAgICAgICAgICAgcGljX3VybDogaWNvbixcbiAgICAgICAgICAgIGNvbF90eXBlOiBcImF2YXRhclwiXG4gICAgICAgIH0pO1xuICAgIH1lbHNle1xuXG4gICAgZC5wdXNoKHtcbiAgICAgICAgdGl0bGU6ICfnmbvlvZXotKblj7cnLFxuICAgICAgICBkZXNjOiAn55m75b2V5pe26K6w5b6X6YO95Yu+5LiKJy5zbWFsbCgpLFxuICAgICAgICBwaWNfdXJsOiBsaW5rK1wiL3RlbXBsYXRlcy9mcm9udGVuZC9haXJhdi9pbWcvYXBwX2xpbmszLnBuZz92PTNcIixcbiAgICAgICAgdXJsOiBsb2dpbiArICQoJycpLnJ1bGUoKCkgPT4ge1xuICAgICAgICAgICAgdmFyIGQgPSBbXTtcbiAgICAgICAgICAgIGxvZyhmZXRjaENvb2tpZShNWV9VUkwpKVxuICAgICAgICAgICAgZC5wdXNoKHtcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3g1X3dlYnZpZXdfc2luZ2xlJyxcbiAgICAgICAgICAgICAgICB1cmw6IE1ZX1VSTCxcbiAgICAgICAgICAgICAgICBkZXNjOiAnbGlzdCYmc2NyZWVuJyxcbiAgICAgICAgICAgICAgICBleHRyYToge1xuICAgICAgICAgICAgICAgICAgICBcIlVzZXItQWdlbnRcIjogXCJNb3ppbGxhLzUuMCAoTGludXg7IEFuZHJvaWQgMTI7IFNNLUc5NzUwIEJ1aWxkL1NQMUEuMjEwODEyLjAxNjsgd3YpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vNC4wIENocm9tZS84OS4wLjQzODkuNzIgTVFRQnJvd3Nlci82LjIgVEJTLzA0NjI3OSBNb2JpbGUgU2FmYXJpLzUzNy4zNlwiLC8vUENfVUEsICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBzaG93UHJvZ3Jlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygodSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY2hlY2soKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvID0gZmJhLmdldENvb2tpZSh1KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY28uaW5jbHVkZXMoJ3JlbWVtYmVyPScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZiYS5wYXJzZUxhenlSdWxlKCQkJCgpLmxhenlSdWxlKChjbykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL2NhY2hlL0pNX2Nvb2tpZS50eHQnLCBjbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdCgn6LSm5Y+35bey55m75b2VJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBjbykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoY2hlY2ssIDUwMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgTVlfVVJMKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHNldFJlc3VsdChkKTtcbiAgICAgICAgfSksXG4gICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJ1xuICAgIH0pO1xuXG59XG5sZXQgbmF2ID0gW1wi6aaW6aG1XCIsXCJB5ryrXCIsXCLliIbnsbtcIl07XG5sZXQgY29sb3JzPSBbJzlGNUY5RicsJ2Y3ZThhYScsJzIwYTE2MiddO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmF2Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBteXRpdGxlID0gbmF2W2ldO1xuICAgICAgICBkLnB1c2goe1xuICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKCduYXZ0aXRsZScsIFwi6aaW6aG1XCIpID09IG15dGl0bGUgPyBjb2xvcihteXRpdGxlLGdldFJhbmdlQ29sb3JzKCkpOiBteXRpdGxlLFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKG15dGl0bGUpID0+IHtcbiAgICAgICAgICAgICAgICBwdXRNeVZhcihcIm5hdnRpdGxlXCIsIG15dGl0bGUpO1xuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xuICAgICAgICAgICAgfSwgbXl0aXRsZSksXG4gICAgICAgICAgICBjb2xfdHlwZTogXCJ0ZXh0XzNcIlxuICAgICAgICB9KTtcbiAgICB9XG59XG5pZiAoZ2V0TXlWYXIoJ25hdnRpdGxlJywgXCLpppbpobVcIikgPT0gXCLpppbpobVcIikgeyQucmVxdWlyZShcImhpa2VyOi8vcGFnZS/pppbpobVcIil9XG5lbHNlIGlmIChnZXRNeVZhcihcIm5hdnRpdGxlXCIpID09IFwiQea8q1wiKSB7dmFyIOWumuS9jeS/oeaBryA9IFt7XG4gICAg5aSn57G75a6a5L2NOiAnYm9keSYmLmRyb3Bkb3duLW1lbnU6aGFzKGxpOmhhcyhhOm1hdGNoZXMo5ZCM5Lq6KSkpJyxcbiAgICDlsI/nsbs6ICdib2R5JiZhJyxcbn0sIHtcbiAgICDkuIDnuqflrprkvY06ICdib2R5JiYuZHJvcGRvd24tbWVudTpoYXMobGk6aGFzKGE6bWF0Y2hlcyjku4rlpKkpKSksMDoxfHwuZHJvcGRvd24tbWVudTpoYXMobGk6aGFzKGE6bWF0Y2hlcyjmnIDmlrApKSksMDoxfHwuZHJvcGRvd24tbWVudTpoYXMobGk6aGFzKGE6bWF0Y2hlcyjml6UpKSksMToyJyxcbiAgICDlsI/nsbs6ICdib2R5JiZhJyxcbn1dO1xubGV0IHRydWVfdXJsID0gZ2V0TXlWYXIoTVlfUlVMRS51cmwsbGluaytcIi9hbGJ1bXM/bz1tciZwYWdlPVwiK3BhZ2UpXG5pZiAodHJ1ZV91cmwuaW5jbHVkZXMoJ3BhZ2UnKSkge1xuICAgIHRydWVfdXJsID0gdHJ1ZV91cmwucmVwbGFjZSgvcGFnZT1cXGQrLywgXCJwYWdlPVwiICsgcGFnZSk7XG59IGVsc2Uge1xuICAgIHRydWVfdXJsID0gdHJ1ZV91cmwgKyBcIiZwYWdlPVwiICsgcGFnZTtcbn1cblxuTVlfVVJMID0gdHJ1ZV91cmw7XG52YXIgaHRtbCA9IGZldGNoKE1ZX1VSTCk7XG5kYy7lvIDlkK/mipjlj6AoZmFsc2UpXG5kYy7lvIDlkK/mkJzntKIoZmFsc2UpLuWIm+W7uuWKqOaAgeWIhuexuyjlrprkvY3kv6Hmga8pXG52YXIgbGlzdCA9IHBkZmEoaHRtbCwgJy5jb250YWluZXI6aGFzKC5jb2wteHMtNikmJi5wLWItMTUnKTtcbmZvciAodmFyIGogaW4gbGlzdCkge1xuICAgIGQucHVzaCh7XG4gICAgICAgIHRpdGxlOiBzcChwZGZoKGxpc3Rbal0sICdzcGFuLDEmJlRleHQnKSksXG4gICAgICAgIGRlc2M6IHNwKHBkZmgobGlzdFtqXSwgJ3NwYW4mJlRleHQnKSsnXFx0XFx0JytwZGZoKGxpc3Rbal0sICcubGFiZWwtY2F0ZWdvcnkmJlRleHQnKSksXG4gICAgICAgIGltZzogcGRmaChsaXN0W2pdLCAnaW1nJiZkYXRhLW9yaWdpbmFsfHxzcmN8fGRhdGEtc3JjJyksXG4gICAgICAgIHVybDogbGluaytwZGZoKGxpc3Rbal0sICdhJiZocmVmJykrJyNpbW1lcnNpdmVUaGVtZSMjYXV0b0NhY2hlI0BydWxlPWpzOiQucmVxdWlyZShcImhpa2VyOi8vcGFnZS9lalwiKSdcbiAgICB9KTtcbn19XG5lbHNlIGlmIChnZXRNeVZhcihcIm5hdnRpdGxlXCIpID09IFwi5YiG57G7XCIpIHtcbmlmIChNWV9QQUdFID09IDEpe1xuZC5wdXNoKHtcbnRpdGxlIDpcIuemgea8q+WkqeWgglwiLFxuY29sX3R5cGU6IFwicmljaF90ZXh0XCIsXG59KVxudmFyIGNhdGVnb3J5cyA9IFt7XG4gICAgICAgIHRpdGxlOiBcIuavj+WRqOW/heeci1wiLFxuICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvYmsjbm9SZWNvcmRIaXN0b3J5IyNub0hpc3RvcnkjJyxcbn0se1xuICAgICAgICB0aXRsZTogXCLmjpLooYzmppxcIixcbiAgICAgICAgdXJsOiBcImhpa2VyOi8vcGFnZS9yYW5rP3BhZ2U9ZnlwYWdlI25vUmVjb3JkSGlzdG9yeSMjbm9IaXN0b3J5I1wiLFxuICAgICAgICB9LHtcbiAgICAgICAgdGl0bGU6IFwiSOWKqOeUu1wiLFxuICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvSD9wYWdlPWZ5cGFnZSNub1JlY29yZEhpc3RvcnkjI25vSGlzdG9yeSMnLFxuICAgICAgICB9LHtcbiAgICB0aXRsZTogXCJKTeaWh+W6k1wiLFxuICAgIHVybDogJ2hpa2VyOi8vcGFnZS9MaWJyYXJ5P3BhZ2U9ZnlwYWdlI25vUmVjb3JkSGlzdG9yeSMjbm9IaXN0b3J5IycsXG4gICAgfV1cbiAgICBmb3IoaSBvZiBjYXRlZ29yeXMpe1xuICAgICAgICBkLnB1c2goe1xuICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ0nK2kudGl0bGUuc21hbGwoKSxcbiAgICAgICAgICAgIHVybDogaS51cmwsXG4gICAgICAgICAgICBjb2xfdHlwZTogXCJmbGV4X2J1dHRvblwiXG4gICAgfSlcbn1cbnZhciBodG1sID0gZmV0Y2gobGluaysnL3RoZW1lLycpO1xuLypcbnZhciBIb3QgPSBwZGZhKGh0bWwsJ2JvZHkmJi5jb2wtbWQtMywwOjEnKTtcbiAgICAgSG90LmZvckVhY2goKGRhdGEpID0+IHtcbmQucHVzaCh7XHJcbiAgICAgICAgICAgICAgICB0aXRsZTogc3AocGRmaChkYXRhLCAnc3BhbiYmVGV4dCcpKSxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXCJyaWNoX3RleHRcIixcclxuICAgICAgICAgICAgfSk7IFxudmFyIGl0ZW0gPSBwZGZhKGRhdGEsICdib2R5JiZhJyk7XHJcbiAgICAgICAgICAgIGl0ZW0uZm9yRWFjaCgoZGF0YXMpID0+IHtcbnZhciB0aXRsZT0gc3AocGRmaChkYXRhcywgJ2EmJlRleHQnKSk7XG52YXIgdXJsID0gbGluaytcIi9zZWFyY2gvcGhvdG9zP3NlYXJjaF9xdWVyeT1cIit0aXRsZStcIiZtYWluX3RhZz0wJm89bXYmdD1hJnBhZ2U9XCI7XHJcbiAgICAgICAgICAgICAgICBkLnB1c2goeyBcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIHVybDogdXJsKydmeXBhZ2UjZnVsbFRoZW1lIyNub0hpc3RvcnkjQHJ1bGU9anM6JC5yZXF1aXJlKFwiaGlrZXI6Ly9wYWdlL3NlYXJjaFwiKScsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFwiZmxleF9idXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6e1xuICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICAgICAgdXJsOiB1cmxcbiAgICAgICAgIH1cbn0pO1xufSlcbn0pXG4qL1xudmFyIExhYiA9IHBkZmEoaHRtbCwnYm9keSYmLnJvdzpoYXMoLmJ0bi10b29sYmFyKTpub3QoOm1hdGNoZXMo57G75YirfOaOkuihjCkpJyk7XHJcbiAgICAgICAgTGFiLmZvckVhY2goKGRhdGEpID0+IHtcbiAgICAgICAgICAgZC5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHRpdGxlOiBzcChwZGZoKGRhdGEsICdoNCYmVGV4dCcpKSxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXCJyaWNoX3RleHRcIixcclxuICAgICAgICAgICAgfSk7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciBpdGVtID0gcGRmYShkYXRhLCAnLnJvdyYmbGknKTtcclxuICAgICAgICAgICAgaXRlbS5mb3JFYWNoKChkYXRhcykgPT4ge1xudmFyIHRpdGxlPSBzcChwZGZoKGRhdGFzLCAnYSYmVGV4dCcpKTtcbiAgICAgICAgICAgICAgICBkLnB1c2goeyBcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnScrdGl0bGUuc21hbGwoKSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAgICAgICAgICAgICAgICAgICAnaGlrZXI6Ly9wYWdlL3NlYXJjaD90aXRsZT0nK3RpdGxlKycmcGFnZT1meXBhZ2UjZnVsbFRoZW1lIyNub0hpc3RvcnkjJyxcclxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXCJmbGV4X2J1dHRvblwiLFxufSk7XG59KVxufSlcbn1cbn1cbnNldFJlc3VsdChkKTsiLCJzZWFyY2hfdXJsIjoiaGlrZXI6Ly9lbXB0eSMjL3NlYXJjaC9waG90b3M/c2VhcmNoX3F1ZXJ5PSoqJm1haW5fdGFnPTAmbz1tdiZ0PWEmcGFnZT1meXBhZ2UiLCJncm91cCI6IkjmvKvnlLsiLCJzZWFyY2hGaW5kIjoianM6XG52YXIgZCA9IFtdO1xudmFyIFVSTCA9IGNvbmZpZy5ob3N0K01ZX1VSTC5yZXBsYWNlKCdoaWtlcjovL2VtcHR5IyMnLClcbnZhciBodG1sID0gZmV0Y2goVVJMKTtcbmV2YWwoSlNPTi5wYXJzZShmZXRjaChcImhpa2VyOi8vcGFnZS9qaWFuXCIpKS5ydWxlKTtcbnZhciBsaXN0ID0gcGRmYShodG1sLCAnLmNvbnRhaW5lcjpoYXMoLmNvbC14cy02KSYmLnAtYi0xNScpO1xuZm9yICh2YXIgaiBpbiBsaXN0KSB7XG4gICAgZC5wdXNoKHtcbiAgICAgICAgdGl0bGU6IHNwKHBkZmgobGlzdFtqXSwgJ3NwYW4sMSYmVGV4dCcpKSxcbiAgICAgICAgZGVzYzogc3AocGRmaChsaXN0W2pdLCAnc3BhbiYmVGV4dCcpKydcXHRcXHQnK3BkZmgobGlzdFtqXSwgJy5sYWJlbC1jYXRlZ29yeSYmVGV4dCcpKSxcbiAgICAgICAgaW1nOiBwZGZoKGxpc3Rbal0sICdpbWcmJmRhdGEtb3JpZ2luYWwnKSxcbiAgICAgICAgdXJsOiBnZXRWYXIoJ2xpbmsnKStwZGZoKGxpc3Rbal0sICdhJiZocmVmJykrJyNpbW1lcnNpdmVUaGVtZSMjYXV0b0NhY2hlI0BydWxlPWpzOiQucmVxdWlyZShcImhpa2VyOi8vcGFnZS9lalwiKSdcbiAgICB9KTtcbn1cbnNldFJlc3VsdChkKTsiLCJkZXRhaWxfY29sX3R5cGUiOiJtb3ZpZV8xIiwiZGV0YWlsX2ZpbmRfcnVsZSI6IiIsInNkZXRhaWxfY29sX3R5cGUiOiJtb3ZpZV8xIiwic2RldGFpbF9maW5kX3J1bGUiOiIiLCJ1YSI6Im1vYmlsZSIsInByZVJ1bGUiOiJsZXQgdGltZSA9IG5ldyBEYXRlKCkuZ2V0RGF0ZSgpLnRvU3RyaW5nKCk7XG5sZXQgZmIgPSAnaHR0cHM6Ly9qbWNtb21pYy5naXRodWIuaW8vJztcbmxldCBmYnJlcSA9IEpTT04ucGFyc2UocmVxdWVzdChnZXRJdGVtKCdsaW5rJywgJ2h0dHBzOi8vMThjb21pYy1wYWx3b3JsZC5jbHViJyksIHtcbiAgICAgICAgICAgIHdpdGhIZWFkZXJzOiB0cnVlLFxuICAgICAgICAgICAgb25seUhlYWRlcnM6IHRydWVcbiAgICAgICAgfSkpO1xuICAgICAgICAvL2xvZyhmYnJlcS5zdGF0dXNDb2RlKVxuaWYgKGdldEl0ZW0oJ3RpbWUnLCBuZXcgRGF0ZSgpLmdldERhdGUoKS50b1N0cmluZygpKSAhPSB0aW1lIHx8IGZicmVxLnN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgIGxldCBmYWJ1ID0gcmVxdWVzdChmYik7XG4gICAgbGV0IGxpbmtzID0gcGRmYShmYWJ1LCAnYm9keSYmYVteaHJlZl06bm90KC5fX2NmX2VtYWlsX18pLDQ6NycpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlua3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IGhyZWYgPSBwZChsaW5rc1tpXSwgJ2EmJmhyZWYnLGZiKTtcbiAgICAgICAgbGV0IGxpbmsgPSByZXF1ZXN0KGhyZWYpLm1hdGNoKC9odHRwczpcXC9cXC9bXlxcXCJdKy8pWzBdO1xuICAgICAgICBsZXQgcmVxID0gSlNPTi5wYXJzZShyZXF1ZXN0KGxpbmssIHtcbiAgICAgICAgICAgIHdpdGhIZWFkZXJzOiB0cnVlLFxuICAgICAgICAgICAgb25seUhlYWRlcnM6IHRydWVcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIGlmIChyZXEuc3RhdHVzQ29kZSA9PSAyMDApIHtcbiAgICBzZXRJdGVtKCd0aW1lJywgdGltZSk7XG4gICAgc2V0SXRlbSgnbGluaycsIGxpbmspO1xuICAgIHRvYXN0KCfmm7TmlrDln5/lkI0nKTtcbiAgICBsb2coJ+abtOaWsOWfn+WQjScpO1xuICAgIGxvZyhsaW5rKTtcbiAgICBicmVha1xuICAgIH1cbiAgICB9XG4gICAgfVxuaW5pdENvbmZpZyh7XG4gICAgaG9zdDogZ2V0SXRlbSgnbGluaycsICdodHRwczovLzE4Y29taWMtcGFsd29ybGQuY2x1YicpXG59KTsiLCJwYWdlcyI6Ilt7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiZFwiLFwicGF0aFwiOlwiZFwiLFwicnVsZVwiOlwianM6XFxuY29uc3QgQnl0ZUFycmF5T3V0cHV0U3RyZWFtID0gamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07XFxuY29uc3QgQnl0ZUFycmF5SW5wdXRTdHJlYW0gPSBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtO1xcbmNvbnN0IEJpdG1hcCA9IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwO1xcbmNvbnN0IEJpdG1hcEZhY3RvcnkgPSBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcEZhY3Rvcnk7XFxuY29uc3QgQ2FudmFzID0gYW5kcm9pZC5ncmFwaGljcy5DYW52YXM7XFxuJC5leHBvcnRzID0gZnVuY3Rpb24ocGljVXJsLCBpbWdJbnB1dFN0cmVhbSkge1xcbiAgICAvL2xldCBwaWNVcmwgPSBwaWNVcmw7XFxuICAgIHBpY1VybC5tYXRjaCgvcGhvdG9zXFxcXC8oXFxcXGQrKT9cXFxcLyhcXFxcZCspPy8pO1xcbiAgICBsZXQgYm9va0lkID0gUmVnRXhwLiQxO1xcbiAgICBsZXQgaW1nSWQgPSBSZWdFeHAuJDI7XFxuICAgIGlmKCFib29rSWR8fCFpbWdJZHx8TnVtYmVyKGJvb2tJZCk8PTIyMDk4MCkgcmV0dXJuIGltZ0lucHV0U3RyZWFtO1xcbiAgICBpZiAoTnVtYmVyKGJvb2tJZCkgPj0gXFxcIjI2ODg1MFxcXCIgJiYgTnVtYmVyKGJvb2tJZCkgPD0gXFxcIjQyMTkyNVxcXCIpIHtcXHJcXG4gICAgdmFyICRudW0gPSBwYXJzZUludChtZDUoYm9va0lkICsgaW1nSWQpLnNsaWNlKC0xKS5jaGFyQ29kZUF0KCkgJSAxMCkgKiAyICsgMjtcXHJcXG59IGVsc2UgaWYgKE51bWJlcihib29rSWQpID4gXFxcIjQyMTkyNVxcXCIpIHtcXHJcXG4gICAgdmFyICRudW0gPSBwYXJzZUludChtZDUoYm9va0lkICsgaW1nSWQpLnNsaWNlKC0xKS5jaGFyQ29kZUF0KCkgJSA4KSAqIDIgKyAyO1xcclxcbn0gZWxzZSB7XFxyXFxuICAgIHZhciAkbnVtID0gXFxcIjEwXFxcIjtcXHJcXG59XFxuICAgLyogaWYgKE51bWJlcihib29rSWQpID49IDI2ODg1MCkge1xcbiAgICAgICAgbGV0ICRtZDUgPSBtZDUoYm9va0lkICsgaW1nSWQpO1xcbiAgICAgICAgbGV0ICRhc2NpaSA9ICRtZDUuc3Vic3RyKC0xKS5jaGFyQ29kZUF0KDApICsgXFxcIlxcXCI7XFxuICAgICAgICBsZXQgJGxhc3QgPSBOdW1iZXIoJGFzY2lpLnN1YnN0cigtMSkpO1xcbiAgICAgICAgdmFyICRudW0gPSAoJGxhc3QgKyAxKSAqIDI7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICB2YXIgJG51bSA9IDEwO1xcbiAgICB9Ki9cXG4gICAgLypsZXQgaW1nSW5wdXRTdHJlYW0gPSBmZXRjaChwaWNVcmwsIHtcXG4gICAgICAgIGlucHV0U3RyZWFtOiB0cnVlLFxcbiAgICB9KTtcXG4gICAgKi9cXG4gICAgLy9sZXQgaW1nSW5wdXRTdHJlYW0gPSBpbnB1dDtcXG4gICAgbGV0IGltZ0JpdG1hcCA9IEJpdG1hcEZhY3RvcnkuZGVjb2RlU3RyZWFtKGltZ0lucHV0U3RyZWFtKTtcXG4gICAgY2xvc2VNZShpbWdJbnB1dFN0cmVhbSk7XFxuXFxuICAgIGxldCB3aWR0aCA9IGltZ0JpdG1hcC5nZXRXaWR0aCgpO1xcbiAgICBsZXQgaGVpZ2h0ID0gaW1nQml0bWFwLmdldEhlaWdodCgpO1xcbiAgICBsZXQgeSA9IE1hdGguZmxvb3IoaGVpZ2h0IC8gJG51bSk7XFxuICAgIGxldCByZW1haW5kZXIgPSBoZWlnaHQgJSAkbnVtO1xcblxcbiAgICBsZXQgbmV3SW1nQml0bWFwID0gQml0bWFwLmNyZWF0ZUJpdG1hcCh3aWR0aCwgaGVpZ2h0LCBCaXRtYXAuQ29uZmlnLkFSR0JfODg4OCk7XFxuICAgIGxldCBjYW52YXMgPSBuZXcgQ2FudmFzKG5ld0ltZ0JpdG1hcCk7XFxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9ICRudW07IGkrKykge1xcbiAgICAgICAgbGV0IGggPSBpID09PSAkbnVtID8gcmVtYWluZGVyIDogMDtcXG4gICAgICAgIGNhbnZhcy5kcmF3Qml0bWFwKEJpdG1hcC5jcmVhdGVCaXRtYXAoaW1nQml0bWFwLCAwLCB5ICogKGkgLSAxKSwgd2lkdGgsIHkgKyBoKSwgMCwgaGVpZ2h0IC0geSAqIGkgLSBoLCBudWxsKTtcXG4gICAgfVxcbiAgICBsZXQgYmFvcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTtcXG4gICAgbmV3SW1nQml0bWFwLmNvbXByZXNzKEJpdG1hcC5Db21wcmVzc0Zvcm1hdC5QTkcsIDEwMCwgYmFvcyk7XFxuICAgIHJldHVybiBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oYmFvcy50b0J5dGVBcnJheSgpKTtcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuIDnuqdcIixcInBhdGhcIjpcInlqXCIsXCJydWxlXCI6XCJqczpcXG4vKlxcbmJ5IM6xKHpldGFscGhhKVxcbuS4gOe6p+WwgeijhVxcbuWKqOaAgeWIhuexuyDliJfooajliJvlu7og6Ieq5Yqo5LiL5LiA6aG1XFxudmVyIDIwMjMxMDE3IDEuMFxcbiovXFxuXFxuLy/pmo/mnLrpopzoibJcXG52YXIgZ2V0UmFuZ2VDb2xvcnMgPSBmdW5jdGlvbigpIHtcXG4gICAgcmV0dXJuICcjJyArICgnMDAwMDAnICsgKE1hdGgucmFuZG9tKCkgKiAweDEwMDAwMDAgPDwgMCkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTYpO1xcbn1cXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcImhpa2VyOi8vcGFnZS9qaWFuXFxcIikpLnJ1bGUpO1xcbi8v5Yqo5oCB5YiG57G7XFxuZnVuY3Rpb24gZHluYW1pY0NsYXNzKG9wdGlvbnMpIHtcXG4gICAgY29uc3Qgb2JqID0ge1xcbiAgICAgICAgLy/pu5jorqTlgLxcXG4gICAgICAgIGxheW91dDogXFxcInVuZGVmaW5lZFxcXCIsXFxuICAgICAgICBodG1sOiBcXFwiZW1wdHlcXFwiLFxcbiAgICAgICAgcGFnZTogMCxcXG4gICAgICAgIOWIhuexu+minOiJsjogXFxcIiNGQTcyOThcXFwiLFxcbiAgICAgICAg5oqY5Y+gOiBcXFwi4oCc4oCc4oCd4oCdPGI+XFxcIiArIFxcXCLiiKdcXFwiLmZvbnRjb2xvcihcXFwiIzFhYWQxOVxcXCIpICsgXFxcIjwvYj5cXFwiLFxcbiAgICAgICAg5bGV5byAOiBcXFwi4oCc4oCc4oCd4oCdPGI+XFxcIiArIFxcXCLiiKhcXFwiLmZvbnRjb2xvcihcXFwiI0ZGMDAwMFxcXCIpICsgXFxcIjwvYj5cXFwiLFxcbiAgICAgICAgb3BlbjogdHJ1ZSxcXG4gICAgICAgIHN0YXRlOiBNWV9SVUxFLnVybCxcXG4gICAgICAgIHNlYXJjaDogZmFsc2UsXFxuICAgICAgICBjbGVhcnM6IFtdLFxcbiAgICAgICAgY2xlYXJhbGw6IFtcXFwieWlfZmlyc3RwYWdlXFxcIl0sXFxuICAgICAgICBkZWJ1ZzogZmFsc2UsXFxuXFxuICAgICAgICDpooTorr4ocGFyYW0pIHtcXG4gICAgICAgICAgICBpZiAocGFyYW0gPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgICAgIHBhcmFtID0gW107XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHBhcmFtKS5mb3JFYWNoKChwcm9wZXJ0eSkgPT4ge1xcbiAgICAgICAgICAgICAgICAvLyDlr7nmr4/kuKrlsZ7mgKflkI3miafooYzmk43kvZxcXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJhbVtwcm9wZXJ0eV07IC8vIOiOt+WPluWxnuaAp+WAvFxcbiAgICAgICAgICAgICAgICAvLyDlnKjov5nph4zmiafooYzmgqjnmoTmk43kvZxcXG4gICAgICAgICAgICAgICAgdGhpc1twcm9wZXJ0eV0gPSB2YWx1ZTtcXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHByb3BlcnR5ICsgXFxcIjpcXFwiICsgdmFsdWUpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9LFxcbiAgICAgICAgZXZhbEpTUnVsZShpdGVtLFxcbiAgICAgICAgICAgIGpzUnVsZSkge1xcbiAgICAgICAgICAgIGxldCBydWxlID0ganNSdWxlLnJlcGxhY2UoXFxcIkBqczpcXFwiLFxcbiAgICAgICAgICAgICAgICBcXFwiXFxcIik7XFxuICAgICAgICAgICAgcnVsZSA9IHJ1bGUudHJpbSgpO1xcbiAgICAgICAgICAgIC8vbG9nKCQuc3RyaW5naWZ5KHJ1bGUpKVxcbiAgICAgICAgICAgIGxldCBpbnB1dCA9IGl0ZW07XFxuICAgICAgICAgICAgaWYgKHJ1bGUuc3RhcnRzV2l0aChcXFwiKFxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIGV2YWwoXFxcInJlc3VsdCA9IFxcXCIgKyBydWxlKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAvKipcXG4gICAgICAgICAgICAgICAgICog6L+Y5Y6f5oiQICQudG9TdHJpbmcoLi4uKSDnmoTmnIDnu4jnu5PmnpzvvIzovr7liLDmnIDnu4jlpITnkIbmlrnlvI/ot5/kuIrpnaLnmoQgaWYg5LiA6Ie055qE55uu55qEXFxuICAgICAgICAgICAgICAgICAqL1xcbiAgICAgICAgICAgICAgICBldmFsKFxcXCJyZXN1bHQgPSBcXFwiICsgXFxcIigoKSA9PiB7XFxcIiArIHJ1bGUgKyBcXFwifSkoKVxcXCIpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0IHx8IFxcXCJcXFwiO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGdldFRpdGxlKHNyYywgY2F0ZWdvcnkpIHtcXG4gICAgICAgICAgICBsZXQgdGl0bGUgPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICBsZXQgdGl0bGVSdWxlID0gY2F0ZWdvcnkgfHwgXFxcImEmJlRleHRcXFwiO1xcbiAgICAgICAgICAgIGlmICh0aXRsZVJ1bGUuc3RhcnRzV2l0aChcXFwiQGpzOlxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIHRpdGxlID0gc3AodGhpcy5ldmFsSlNSdWxlKHNyYywgdGl0bGVSdWxlKSk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdGl0bGUgPSBzcChwYXJzZURvbUZvckh0bWwoc3JjLCB0aXRsZVJ1bGUpKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIHRpdGxlIHx8IFxcXCJcXFwiO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGdldFVybChzcmMsIGNhdGVnb3J5KSB7XFxuICAgICAgICAgICAgbGV0IHVybCA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgIGxldCB1cmxSdWxlID0gY2F0ZWdvcnku6ZO+5o6lIHx8IFxcXCJhJiZocmVmXFxcIjtcXG4gICAgICAgICAgICBpZiAodXJsUnVsZS5zdGFydHNXaXRoKFxcXCJAanM6XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgdXJsID0gdGhpcy5ldmFsSlNSdWxlKHNyYywgdXJsUnVsZSk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdXJsID0gcGQoc3JjLCB1cmxSdWxlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYXRlZ29yeS7pk77mjqXlpITnkIYgPT0gXFxcImZ1bmN0aW9uXFxcIikge1xcbiAgICAgICAgICAgICAgICB1cmwgPSBjYXRlZ29yeS7pk77mjqXlpITnkIYodXJsKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIHVybCB8fCBcXFwiXFxcIjtcXG4gICAgICAgIH0sXFxuICAgICAgICBpc051bGwocGFyYW0pIHtcXG4gICAgICAgICAgICBpZiAocGFyYW0gPT0gbnVsbCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgICAgfSxcXG4gICAgICAgIGlzQm9vbGVhbih2YXJpYWJsZSkge1xcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFyaWFibGUgIT09IFxcXCJib29sZWFuXFxcIikge1xcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIuW8gOWQr+aKmOWPoOivt+S8oOWFpeW4g+WwlOWAvFxcXCIpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sXFxuICAgICAgICDmuIXpmaQobGlzdCkge1xcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTnVsbChsaXN0KSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGxpc3QuY29uc3RydWN0b3IgPT0gU3RyaW5nKSB7XFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwi5riF6Zmk5oql6ZSZOuivt+S8oOWIl+ihqFxcXCIpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB0aGlzLmNsZWFycyA9IGxpc3Q7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAg5YWo5riFKGxpc3QpIHtcXG4gICAgICAgICAgICBpZiAodGhpcy5pc051bGwobGlzdCkpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHZhciBjID0gdGhpcy5jbGVhcmFsbDtcXG4gICAgICAgICAgICBsaXN0ID0gYy5jb25jYXQobGlzdCk7XFxuICAgICAgICAgICAgdGhpcy5jbGVhcmFsbCA9IGxpc3Q7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAg5rqQ56CBKGlucHV0KSB7XFxuICAgICAgICAgICAgdGhpcy5odG1sID0gaW5wdXQ7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAg55WM6Z2iKGlucHV0KSB7XFxuICAgICAgICAgICAgdGhpcy5sYXlvdXQgPSBpbnB1dDtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgIH0sXFxuICAgICAgICDpobXnoIEoaW5wdXQpIHtcXG4gICAgICAgICAgICB0aGlzLnBhZ2UgPSBpbnB1dDtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgIH0sXFxuICAgICAgICDnirbmgIEoaW5wdXQpIHtcXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gaW5wdXQ7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAg5byA5ZCv5pCc57SiKGlucHV0KSB7XFxuICAgICAgICAgICAgaWYgKGlucHV0ID09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgICAgICBpbnB1dCA9IHRydWU7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoID0gaW5wdXQ7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgICAgICB9LFxcbiAgICAgICAg5byA5ZCv5oqY5Y+gKGlucHV0KSB7XFxuICAgICAgICAgICAgaWYgKGlucHV0ID09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgICAgICBpbnB1dCA9IHRydWU7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHRoaXMuaXNCb29sZWFuKGlucHV0KTtcXG4gICAgICAgICAgICB0aGlzLm9wZW4gPSBpbnB1dDtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgIH0sXFxuICAgICAgICBzZXRUaXRsZShrLCBpLCB0KSB7XFxuICAgICAgICAgICAgcmV0dXJuIGsgPT0gaSA/IFxcXCLigJzigJzigJ3igJ1cXFwiICsgdC5mb250Y29sb3IodGhpcy7liIbnsbvpopzoibIpIDogdDtcXG4gICAgICAgIH0sXFxuICAgICAgICBhY3Rpb24ob2JqKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFt7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5riF6Zmk54q25oCBXFxcIixcXG4gICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKG9iaikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKG9iaik7XFxuICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKG9iai5zdGF0ZSk7XFxuICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKFxcXCJoZWFkLmNhdGVcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ2NhdGVfYnV0dG9uJyk7XFxuICAgICAgICAgICAgICAgICAgICBvYmouYWxsLmZvckVhY2goKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKGl0ZW0pO1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICBvYmouY2wuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoaXRlbSk7XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIH0sIG9iaiksXFxuICAgICAgICAgICAgfSwgXTtcXG4gICAgICAgIH0sXFxuICAgICAgICBjaGVja1BhcmFtKCkge1xcbiAgICAgICAgICAgIHZhciBvYmogPSB7fTtcXG4gICAgICAgICAgICBpZiAodGhpcy5wYWdlID09IDAgJiYgdHlwZW9mIHBhZ2UgPT0gXFxcInVuZGVmaW5lZFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLor7fkvKDlhaXpobXnoIFcXFwiKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBhZ2UgPT0gXFxcInVuZGVmaW5lZFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgIG9ialtcXFwi6aG156CBXFxcIl0gPSB0aGlzLnBhZ2U7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBvYmpbXFxcIumhteeggVxcXCJdID0gcGFnZTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAodGhpcy5odG1sID09IFxcXCJlbXB0eVxcXCIgJiYgdHlwZW9mIGh0bWwgPT0gXFxcInVuZGVmaW5lZFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLor7fkvKDlhaXmupDnoIFcXFwiKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGh0bWwgPT0gXFxcInVuZGVmaW5lZFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgIG9ialtcXFwi5rqQ56CBXFxcIl0gPSB0aGlzLmh0bWw7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBvYmpbXFxcIua6kOeggVxcXCJdID0gaHRtbDtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAodGhpcy5sYXlvdXQgPT0gXFxcInVuZGVmaW5lZFxcXCIgJiYgdHlwZW9mIGQgPT0gXFxcInVuZGVmaW5lZFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXCLor7fkvKDlhaXnlYzpnaJcXFwiKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGQgPT0gXFxcInVuZGVmaW5lZFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgIG9ialtcXFwi55WM6Z2iXFxcIl0gPSB0aGlzLmxheW91dDtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIG9ialtcXFwi55WM6Z2iXFxcIl0gPSBkO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBvYmo7XFxuICAgICAgICB9LFxcbiAgICAgICAg5Yib5bu65Yqo5oCB5YiG57G7KHJ1bGVPYmopIHtcXG4gICAgICAgICAgICBsZXQgaXRlbXMgPSBbXTtcXG4gICAgICAgICAgICBsZXQgY2F0ZXMgPSBbXTtcXG4gICAgICAgICAgICBpZiAocnVsZU9iaiA9PSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICAgICAgcnVsZU9iaiA9IFtdO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAvL+WIneWni+WMluWPmOmHj+W8gOWni1xcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtID0gdGhpcy5jaGVja1BhcmFtKCk7XFxuICAgICAgICAgICAgY29uc3QgcGFnZSA9IHBhcmFtLumhteeggTtcXG4gICAgICAgICAgICBjb25zdCBodG1sID0gcGFyYW0u5rqQ56CBO1xcbiAgICAgICAgICAgIGNvbnN0IGQgPSBwYXJhbS7nlYzpnaI7XFxuICAgICAgICAgICAgY29uc3Qg54q25oCBID0gdGhpcy5zdGF0ZTtcXG4gICAgICAgICAgICBjb25zdCBzZWFyY2ggPSB0aGlzLnNlYXJjaDtcXG4gICAgICAgICAgICBjb25zdCBlbXB0eSA9IFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICBjb25zdCDmipjlj6DnirbmgIEgPSB0aGlzLm9wZW47XFxuICAgICAgICAgICAgdmFyIOWxleW8gCA9IHRoaXMu5bGV5byAO1xcbiAgICAgICAgICAgIHZhciDmipjlj6AgPSB0aGlzLuaKmOWPoDtcXG4gICAgICAgICAgICB2YXIg5YWo5riFID0gdGhpcy5jbGVhcmFsbDtcXG4gICAgICAgICAgICB2YXIg5riF6ZmkID0gdGhpcy5jbGVhcnM7XFxuICAgICAgICAgICAgLy/liJ3lp4vljJblj5jph4/nu5PmnZ9cXG4gICAgICAgICAgICBsZXQgaW5pdF9jYXRlID0gbmV3IEFycmF5KDIwKS5maWxsKFxcXCIwXFxcIik7XFxuICAgICAgICAgICAgY29uc3QgZm9sZCA9IGdldE15VmFyKE1ZX1JVTEUuZ3JvdXAsIFxcXCIwXFxcIik7XFxuICAgICAgICAgICAgY29uc3QgY2F0ZV90ZW1wID0gSlNPTi5wYXJzZShcXG4gICAgICAgICAgICAgICAgZ2V0TXlWYXIoXFxcImhlYWQuY2F0ZVxcXCIsIEpTT04uc3RyaW5naWZ5KGluaXRfY2F0ZSkpXFxuICAgICAgICAgICAgKTtcXG4gICAgICAgICAgICBpZiAoc2VhcmNoICYmIHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIHVybDogXFxcIidoaWtlcjovL3NlYXJjaD9ydWxlPVxcXCIgKyBNWV9SVUxFLnRpdGxlICsgXFxcIiZzPScraW5wdXRcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIuaQnOe0ouWFs+mUruivjVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRNeVZhcihcXFwia2V5d29yZFxcXCIsIFxcXCJcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJrZXl3b3JkXFxcIiwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBbXTtcXG4gICAgICAgICAgICBydWxlT2JqLmZvckVhY2goKHgpID0+IHtcXG4gICAgICAgICAgICAgICAgdmFyIGxpc3QgPSBbXTtcXG4gICAgICAgICAgICAgICAgLy9sb2coeClcXG4gICAgICAgICAgICAgICAgaWYgKHguanNvbiAhPSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgICAgICAgICAgIHguanNvbi5tYXAoayA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcmllcy5wdXNoKEpTT04uc3RyaW5naWZ5KGspLnJlcGxhY2UoL15cXFxcW3xcXFxcXSQvZywgJycpKVxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIC8vY2F0ZWdvcmllcy5wdXNoKHguanNvbilcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoeC7kuIDnuqflrprkvY0pIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh4LuS4gOe6p+WumuS9jS5zdGFydHNXaXRoKFxcXCJAanM6XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gdGhpcy5ldmFsSlNSdWxlKGh0bWwsIHgu5LiA57qn5a6a5L2NKTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IHBkZmEoaHRtbCwgeC7kuIDnuqflrprkvY0pO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmICh4LuWkp+exu+WumuS9jSkge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHgu5aSn57G75a6a5L2NLnN0YXJ0c1dpdGgoXFxcIkBqczpcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgPSB0aGlzLmV2YWxKU1J1bGUoaHRtbCwgeC7lpKfnsbvlrprkvY0pO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gW3BkZmEoaHRtbCwgeC7lpKfnsbvlrprkvY0pLmpvaW4oJ1xcXFxuJyldO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIC8vLS3pop3lpJblpITnkIYtLVxcbiAgICAgICAgICAgICAgICBpZiAoKCflop7liqAnIGluIHgpKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoeC7lop7liqAuY29uc3RydWN0b3IgPT0gU3RyaW5nKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgeC7lop7liqAgPSBldmFsKHgu5aKe5YqgKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHNsaXN0ID0geC7lop7liqAuY29uY2F0KHNsaXN0KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoKCfooaXlhYUnIGluIHgpKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoeC7ooaXlhYUuY29uc3RydWN0b3IgPT0gU3RyaW5nKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgeC7ooaXlhYUgPSBldmFsKHgu6KGl5YWFKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHNsaXN0ID0gc2xpc3QuY29uY2F0KHgu6KGl5YWFKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAvLy0t6aKd5aSW5aSE55CGLS1cXG4gICAgICAgICAgICAgICAgdmFyIOS4gOe6pyA9IGxpc3QubWFwKChzKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgc2xpc3QgPSBbXTtcXG4gICAgICAgICAgICAgICAgICAgIGlmICghKFxcXCLlsI/nsbtcXFwiIGluIHgpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgeC7lsI/nsbsgPSBcXFwiYm9keSYmYTpub3QoOm1hdGNoZXMo6aaW6aG1KSk6bm90KGE6bm90KFtocmVmXSkpXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGlmICh4LuWwj+exuy5zdGFydHNXaXRoKFxcXCJAanM6XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzbGlzdCA9IHRoaXMuZXZhbEpTUnVsZShzLCB4LuWwj+exuyk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNsaXN0ID0gcGRmYShzLCB4LuWwj+exuyk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB2YXIg5a6a5L2NID0gc2xpc3QubWFwKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gc3AodGhpcy5nZXRUaXRsZShpdGVtLCB4Luagh+mimCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSB0aGlzLmdldFVybChpdGVtLCB4KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogdXJsXFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqKTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIOWumuS9jTtcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIC8vbG9nKOS4gOe6pylcXG4gICAgICAgICAgICAgICAgLy9sb2co5LiA57qnLmxlbmd0aClcXG4gICAgICAgICAgICAgICAgaWYgKOS4gOe6py5sZW5ndGggPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcmllcy5wdXNoKOS4gOe6py5qb2luKFxcXCJcXFxcblxcXCIpKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIOS4gOe6py5mb3JFYWNoKChpdGVtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcmllcy5wdXNoKGl0ZW0uam9pbihcXFwiLFxcXCIpKTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIC8vbG9nKGNhdGVnb3JpZXMpXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgaWYgKOaKmOWPoOeKtuaAgSkge1xcbiAgICAgICAgICAgICAgICBpZiAocGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZm9sZCA9PT0gXFxcIjFcXFwiID8g5oqY5Y+gIDog5bGV5byALFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZShcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRpdGxlLCBmb2xkLCB1LCBhbGwsIGV4cHMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb2xkID0gZ2V0TXlWYXIoTVlfUlVMRS5ncm91cCwgZm9sZCk7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgW+WxleW8gCwg5oqY5Y+gXSA9IGV4cHM7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9sZCA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN4ID0gZmluZEl0ZW1zQnlDbHModGl0bGUgKyAnY2F0ZV9idXR0b24nKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcignY2F0ZV9idXR0b24nLCBjeCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlSXRlbUJ5Q2xzKHRpdGxlICsgJ2NhdGVfYnV0dG9uJyk7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjeCA9IHN0b3JhZ2UwLmdldE15VmFyKCdjYXRlX2J1dHRvbicsIFtdKS5tYXAoeCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhbJ2NvbF90eXBlJ10gPSB4Wydjb2xfdHlwZSddID8geFsnY29sX3R5cGUnXSA6IHhbJ3R5cGUnXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHg7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSXRlbUFmdGVyKHRpdGxlICsgJ2NhdGVfbGluZScsIGN4KVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyphbGwuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKGl0ZW0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ki9cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0odGl0bGUgKyAnY2F0ZV9leHAnLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGZvbGQgPT0gMSA/IOWxleW8gCA6IOaKmOWPoCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihNWV9SVUxFLmdyb3VwLCBmb2xkID09PSBcXFwiMVxcXCIgPyBcXFwiMFxcXCIgOiBcXFwiMVxcXCIpO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9yZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNWV9SVUxFLnRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICDnirbmgIEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIOWFqOa4hSwgW+WxleW8gCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOaKmOWPoFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogTVlfUlVMRS50aXRsZSArICdjYXRlX2V4cCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdDbGljazogdGhpcy5hY3Rpb24oe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IOeKtuaAgSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbDog5YWo5riFLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2w6IOa4hemZpCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChwYWdlID09IDEpIHtcXG4gICAgICAgICAgICAgICAgY2F0ZWdvcmllcy5mb3JFYWNoKChjYXRlZ29yeSwgaW5kZXgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nKGNhdGVnb3J5KVxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHN1Yl9jYXRlZ29yaWVzID0gW107XFxuICAgICAgICAgICAgICAgICAgICAvKmlmICjlsI/nsbvlrprkvY0uaW5jbHVkZXMoXFxcIjtcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICBzdWJfY2F0ZWdvcmllcyA9IHBkZmEoY2F0ZWdvcnksIOWwj+exu+WumuS9jS5zcGxpdChcXFwiO1xcXCIpWzBdKTtcXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Yl9jYXRlZ29yaWVzLmxlbmd0aCA9PSAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMgPSBwZGZhKGNhdGVnb3J5LCDlsI/nsbvlrprkvY0uc3BsaXQoXFxcIjtcXFwiKVsxXSk7XFxuICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ki9cXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nKGluZGV4KVxcbiAgICAgICAgICAgICAgICAgICAgc3ViX2NhdGVnb3JpZXMgPSBKU09OLnBhcnNlKGBbJHtjYXRlZ29yeX1dYCk7XFxuICAgICAgICAgICAgICAgICAgICAvL2xvZyhzdWJfY2F0ZWdvcmllcylcXG4gICAgICAgICAgICAgICAgICAgIC8vIHN1Yl9jYXRlZ29yaWVzID0gcGRmYShjYXRlZ29yeSwg5bCP57G75a6a5L2NKTtcXG4gICAgICAgICAgICAgICAgICAgIC8vfVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy/lpKfnsbtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJfY2F0ZWdvcmllcy5mb3JFYWNoKChpdGVtLCBrZXkpID0+IHtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sZXQgdGl0bGUgPSBwZGZoKGl0ZW0sIF/lpKfnsbvmoIfpopgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBzcChpdGVtLnRpdGxlKTtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiDmjpLpmaQgIT0gXFxcInVuZGVmaW5lZFxcXCIgJiYg5o6S6ZmkICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHRpdGxlLnJlcGxhY2UobmV3UmVnRXhwKOaOkumZpCwgXFxcImdcXFwiKSwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBqc29uID0gJydcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbiA9IGl0ZW0udXJsO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFyYW1zID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZV90ZW1wOiBjYXRlX3RlbXAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U6IHBhZ2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhcnM6IOa4hemZpCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb246IGpzb24sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTog54q25oCBLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsY2xlYXJzOiDlhajmuIUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbGV0IHVybCA9IHBkKGl0ZW0sIF/lpKfnsbvpk77mjqUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gaXRlbS51cmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qaWYgKOWkp+exu+WkhOeQhikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IOS4gOe6p+WIhuexu+WkhOeQhih1cmwpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ki9cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2codXJsKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdJytzcCh0aGlzLnNldFRpdGxlKGtleS50b1N0cmluZygpLCBjYXRlX3RlbXBbaW5kZXhdLCB0aXRsZSkpLnNtYWxsKCksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKFxcXCJoaWtlcjovL2VtcHR5I25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgocGFyYW1zKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdfY2F0ZSA9IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuY2xlYXJzLmZvckVhY2goKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoaXRlbSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuYWxsY2xlYXJzLmZvckVhY2goKGl0ZW0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoaXRlbSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKCdjYXRlX2J1dHRvbicpO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuY2F0ZV90ZW1wLmZvckVhY2goKGNhdGUsIGluZGV4KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfY2F0ZS5wdXNoKGluZGV4ID09PSAwID8gcGFyYW1zLmtleS50b1N0cmluZygpIDogXFxcIjBcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJoZWFkLmNhdGVcXFwiLCBKU09OLnN0cmluZ2lmeShuZXdfY2F0ZSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmpzb24uY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImR0X1xcXCIgKyBwYXJhbXMuanNvbi50eXBlLCBwYXJhbXMuanNvbi52YWx1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihwYXJhbXMuc3RhdGUsIHBhcmFtcy5qc29uKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBNWV9SVUxFLnRpdGxlICsgJ2NhdGVfbGluZScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy/lsI/nsbtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJfY2F0ZWdvcmllcy5mb3JFYWNoKChpdGVtLCBrZXkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGV4dHJhcG9zID0gZmFsc2U7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qaWYgKGl0ZW0uaW5jbHVkZXMoJ3R5cGU9XFxcIkBleHRyYVxcXCInKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhcG9zID0gdHJ1ZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xvZygn6ZmE5Yqg5a6a5L2NJylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSovXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHRyYXBvcykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gc3AocGRmaChpdGVtLCBcXFwiYSYmVGV4dFxcXCIpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yg5o6S6ZmkICE9IFxcXCJ1bmRlZmluZWRcXFwiICYmIOaOkumZpCAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gdGl0bGUucmVwbGFjZShuZXcgUmVnRXhwKOaOkumZpCwgXFxcImdcXFwiKSwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGpzb24gPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogcGRmaChpdGVtLCBcXFwiYSYmc3RhdGVcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcGRmaChpdGVtLCBcXFwiYSYmdmFsdWVcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3ZhciB0aXRsZSA9IHBkZmgoaXRlbSwg5YiG57G75qCH6aKYKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IGl0ZW0udGl0bGU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIOaOkumZpCAhPSBcXFwidW5kZWZpbmVkXFxcIiAmJiDmjpLpmaQgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHRpdGxlLnJlcGxhY2UobmV3IFJlZ0V4cCjmjpLpmaQsIFxcXCJnXFxcIiksIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqc29uID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnN3aXRjaCAodHJ1ZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIOWIhuexu+mTvuaOpS5pbmNsdWRlcyhcXFwiQEBAXFxcIik6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbiA9IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHBkZmgoaXRlbSwg5YiG57G76ZO+5o6lLnNwbGl0KFxcXCJAQEBcXFwiKVswXSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcGRmaChpdGVtLCDliIbnsbvpk77mjqUuc3BsaXQoXFxcIkBAQFxcXCIpWzFdKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIOWIhuexu+mTvuaOpS5pbmNsdWRlcyhcXFwiQEBcXFwiKTpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTog5YiG57G76ZO+5o6lLnNwbGl0KFxcXCJAQFxcXCIpWzBdLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHBkZmgoaXRlbSwg5YiG57G76ZO+5o6lLnNwbGl0KFxcXCJAQFxcXCIpWzFdKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24gPSBpdGVtLnVybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBqc29uID0gcGQoaXRlbSwg5YiG57G76ZO+5o6lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0qL1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbiA9IGl0ZW0udXJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp2YXIganNvbj3liIbnsbvpk77mjqUuaW5jbHVkZXMoJ0BAQCcpP3tcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6cGRmaChpdGVtLOWIhuexu+mTvuaOpS5zcGxpdCgnQEBAJylbMF0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6cGRmaChpdGVtLOWIhuexu+mTvuaOpS5zcGxpdCgnQEBAJylbMV0pLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OnBkKGl0ZW0s5YiG57G76ZO+5o6lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbj3liIbnsbvpk77mjqUuaW5jbHVkZXMoJ0BAJyk/e1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTrliIbnsbvpk77mjqUuc3BsaXQoJ0BAJylbMF0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTpwZGZoKGl0ZW0s5YiG57G76ZO+5o6lLnNwbGl0KCdAQCcpWzFdKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTpwZChpdGVtLOWIhuexu+mTvuaOpSk7Ki9cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFyYW1zID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZV90ZW1wOiBjYXRlX3RlbXAsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U6IHBhZ2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uOiBqc29uLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IOeKtuaAgSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbGNsZWFyczog5YWo5riFLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdJyt0aGlzLnNldFRpdGxlKGtleS50b1N0cmluZygpLCBjYXRlX3RlbXBbaW5kZXhdLCB0aXRsZSkuc21hbGwoKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJChcXFwiaGlrZXI6Ly9lbXB0eVxcXCIgKyBcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgocGFyYW1zKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5hbGxjbGVhcnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihpdGVtKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoJ2NhdGVfYnV0dG9uJyk7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5jYXRlX3RlbXBbcGFyYW1zLmluZGV4XSA9IHBhcmFtcy5rZXkudG9TdHJpbmcoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImhlYWQuY2F0ZVxcXCIsIEpTT04uc3RyaW5naWZ5KHBhcmFtcy5jYXRlX3RlbXApKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5qc29uLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJkdF9cXFwiICsgcGFyYW1zLmpzb24udHlwZSwgcGFyYW1zLmpzb24udmFsdWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIocGFyYW1zLnN0YXRlLCBwYXJhbXMuanNvbik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHM6IE1ZX1JVTEUudGl0bGUgKyAnY2F0ZV9idXR0b24nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRlcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHM6IE1ZX1JVTEUudGl0bGUgKyAnY2F0ZV9idXR0b24nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAoZm9sZCA9PT0gXFxcIjFcXFwiIHx8IOaKmOWPoOeKtuaAgSA9PSBmYWxzZSkge1xcbiAgICAgICAgICAgICAgICBpdGVtcyA9IGl0ZW1zLmNvbmNhdChjYXRlcyk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChmb2xkID09PSBcXFwiMFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoJ2NhdGVfYnV0dG9uJywgY2F0ZXMpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2V0UHJlUmVzdWx0ICE9ICd1bmRlZmluZWQnKSB7XFxuICAgICAgICAgICAgICAgIGl0ZW1zID0gZC5jb25jYXQoaXRlbXMpO1xcbiAgICAgICAgICAgICAgICAvL+a4heepuue7p+aJv+aVsOe7hFxcbiAgICAgICAgICAgICAgICBkLmxlbmd0aCA9IDA7XFxuICAgICAgICAgICAgICAgIHNldFByZVJlc3VsdChpdGVtcyk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaChpdGVtKTtcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LFxcbiAgICB9O1xcbiAgICBvYmou6aKE6K6+KG9wdGlvbnMpO1xcbiAgICByZXR1cm4gb2JqO1xcbn1cXG5cXG52YXIg54q25oCBID1cXG4gICAgdHlwZW9mIOeKtuaAgeagh+iusCAhPSBcXFwidW5kZWZpbmVkXFxcIiAmJiDnirbmgIHmoIforrAgIT0gXFxcIlxcXCIgPyDnirbmgIHmoIforrAgOiBNWV9SVUxFLnVybDtcXG5cXG5sZXQgZHRfZGVidWcgPSBmYWxzZTtcXG5cXG5hZGRMaXN0ZW5lcihcXG4gICAgXFxcIm9uQ2xvc2VcXFwiLFxcbiAgICAkLnRvU3RyaW5nKCgpID0+IHt9KVxcbik7XFxuXFxudmFyIENyZWF0ZSA9IHtcXG4gICAgbmV4dFBhZ2U6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgdmFyIHJlc3VsdCA9IGZhbHNlO1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICB2YXIgbmV4dCA9IGV2YWwo5LiL5LiA6aG1KTtcXG4gICAgICAgICAgICAvL2xvZygnbjonK25leHQpXFxuICAgICAgICAgICAgaWYgKG5leHQgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfkuIvkuIDpobXpk77mjqXkuLrnqbonKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXN1bHQgPSB0cnVlO1xcbiAgICAgICAgICAgIGlmICh0cnVlX3VybCA9PSBuZXh0KSB7XFxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAvL2xvZyhcXFwi5Y+v6IO95LiN5a2Y5Zyo5LiL5LiA6aG15oiW6ICF5LiL5LiA6aG15a6a5L2N5pyJ6Zeu6aKYXFxcIik7XFxuICAgICAgICAgICAgbG9nKFxcXCLplJnor6/kv6Hmga86XFxcIiArIGUubWVzc2FnZSk7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoKG5leHQgPT0gXFxcIlxcXCIgfHwgbmV4dCA9PSB1bmRlZmluZWQpICYmIHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgIG5leHQgPSB0cnVlX3VybDtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgLy9yZXN1bHQ9ZmFsc2U7XFxuICAgICAgICAgICAgbmV4dCA9IGdldE15VmFyKOeKtuaAgSk7XFxuICAgICAgICB9XFxuICAgICAgICAvL2xvZygnbCcrdHJ1ZV91cmwpXFxuICAgICAgICAvL2xvZygnbicrbmV4dClcXG4gICAgICAgIGlmIChwYWdlICE9IDEpIHtcXG4gICAgICAgICAgICBpZiAodHJ1ZV91cmwgPT0gbmV4dCAmJiAhcmVzdWx0KSB7XFxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcXG4gICAgICAgIC8vcHV0TXlWYXIo54q25oCBLCBuZXh0KTtcXG4gICAgfSxcXG4gICAgZ2V0QmFja0ltYWdlOiBmdW5jdGlvbihpbWd1cmwpIHtcXG4gICAgICAgIHZhciByZXN1bHQgPSBpbWd1cmw7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHJlc3VsdCA9IC91cmwoPzpcXFxccyspP1xcXFwoKC4qPylcXFxcKS9nXFxuICAgICAgICAgICAgICAgIC5leGVjKGltZ3VybClbMV1cXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoLygnfFxcXCJ8JnF1b3Q7KS9nbSwgXFxcIlxcXCIpO1xcbiAgICAgICAgfSBjYXRjaCB7fVxcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcXG4gICAgfSxcXG4gICAgaHR0cEhhbmRsZTogZnVuY3Rpb24oaW5wdXQpIHtcXG4gICAgICAgIGlmIChpbnB1dC5zdGFydHNXaXRoKFxcXCJodHRwXFxcIikpIHtcXG4gICAgICAgICAgICByZXR1cm4gaW5wdXQ7XFxuICAgICAgICB9IGVsc2UgaWYgKGlucHV0LnN0YXJ0c1dpdGgoXFxcIi8vXFxcIikpIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImh0dHBzOlxcXCIgKyBpbnB1dDtcXG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQuc3RhcnRzV2l0aChcXFwiL1xcXCIpKSB7XFxuICAgICAgICAgICAgcmV0dXJuIE1ZX0hPTUUgKyBpbnB1dDtcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgaW1nSGFuZGxlOiBmdW5jdGlvbihpdGVtLCBydWxlKSB7XFxuICAgICAgICB2YXIgaW1nID0gXFxcIlxcXCI7XFxuICAgICAgICBpZiAocnVsZS5pbWcuc3RhcnRzV2l0aChcXFwicGRcXFwiKSkge1xcbiAgICAgICAgICAgIGltZyA9IGV2YWwocnVsZS5pbWcpO1xcbiAgICAgICAgfSBlbHNlIGlmIChydWxlLmJhY2tpbWcpIHtcXG4gICAgICAgICAgICBpbWcgPSBwZGZoKGl0ZW0sIHJ1bGUuaW1nKTtcXG4gICAgICAgICAgICBpbWcgPSB0aGlzLmdldEJhY2tJbWFnZShpbWcpO1xcbiAgICAgICAgICAgIGltZyA9IHRoaXMuaHR0cEhhbmRsZShpbWcpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBpbWcgPSBwZGZoKGl0ZW0sIHJ1bGUuaW1nKTtcXG4gICAgICAgICAgICBpZiAoIWltZy5zdGFydHNXaXRoKFxcXCJodHRwXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgaW1nID0gcGQoaXRlbSwgcnVsZS5pbWcpO1xcbiAgICAgICAgICAgICAgICBpbWcgPSB0aGlzLmh0dHBIYW5kbGUoaW1nKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gaW1nICsgcnVsZS5yZWY7XFxuICAgIH0sXFxuICAgIHVybEhhbmRsZTogZnVuY3Rpb24oaXRlbSwgcnVsZSkge1xcbiAgICAgICAgdmFyIGhyZWYgPSBcXFwiXFxcIjtcXG4gICAgICAgIGlmIChydWxlLnVybC5zdGFydHNXaXRoKFxcXCJwZFxcXCIpKSB7XFxuICAgICAgICAgICAgaHJlZiA9IGV2YWwocnVsZS51cmwpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBocmVmID0gcGQoaXRlbSwgcnVsZS51cmwpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaHJlZiA9IHJ1bGUuaW10ID8gaHJlZiArIFxcXCIjaW1tZXJzaXZlVGhlbWUjI2F1dG9DYWNoZSNcXFwiIDogaHJlZjtcXG4gICAgICAgIHJldHVybiBocmVmO1xcbiAgICB9LFxcbiAgICBzZXRDb250ZW50OiBmdW5jdGlvbihpdGVtLCBpbnB1dCkge1xcbiAgICAgICAgbGV0IG91dHB1dCA9IFxcXCJcXFwiO1xcbiAgICAgICAgaWYgKGlucHV0ID09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aChcXFwicGRcXFwiKSkge1xcbiAgICAgICAgICAgIG91dHB1dCA9IGV2YWwoaW5wdXQpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBvdXRwdXQgPSBwZGZoKGl0ZW0sIGlucHV0KTtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XFxuICAgIH0sXFxuICAgIHJlZnJlc2g6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgYWRkTGlzdGVuZXIoXFxuICAgICAgICAgICAgXFxcIm9uUmVmcmVzaFxcXCIsXFxuICAgICAgICAgICAgJC50b1N0cmluZygodSkgPT4ge1xcbiAgICAgICAgICAgICAgICBjbGVhck15VmFyKFxcXCJ5aWxpc3RcXFwiKTtcXG4gICAgICAgICAgICAgICAgLy92YXIgcCA9IHN0b3JhZ2UwLmdldE15VmFyKCdzcGFnZScsICcnKTtcXG4gICAgICAgICAgICAgICAgLy9wdXRNeVZhcih1LCBwKTtcXG4gICAgICAgICAgICB9LCDnirbmgIEpXFxuICAgICAgICApO1xcbiAgICB9LFxcbiAgICBnZXRCb29sZWFuVmFsdWU6IGZ1bmN0aW9uKHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcXG4gICAgICAgIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gQm9vbGVhbih2YWx1ZSkgOiAoZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgPyBkZWZhdWx0VmFsdWUgOiB0cnVlKTtcXG4gICAgfSxcXG4gICAgZGVidWdsb2c6IGZ1bmN0aW9uKGksIGl0ZW0sIHJ1bGUsIG9iaikge1xcbiAgICAgICAgbG9nKCctLS0tLS0tLS0tJyArIChpICsgMSkgKyAnOuiwg+ivleW8gOWniy0tLS0tLS0tLS0nKTtcXG4gICAgICAgIGlmIChpdGVtLmNvbnN0cnVjdG9yID09IE9iamVjdCkge1xcbiAgICAgICAgICAgIGl0ZW0gPSBKU09OLnN0cmluZ2lmeShpdGVtKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGxvZygnaXRlbeWGheWuuTpcXFxcclxcXFxuJyArIGl0ZW0gKyAnXFxcXHJcXFxcbicgK1xcbiAgICAgICAgICAgIGBcXFxcblxcXFx0dGl0bGXlrprkvY06ICAke3J1bGUudGl0bGV9ICAtLS0+IOe7k+aenDogICR7b2JqLnRpdGxlfWAgK1xcbiAgICAgICAgICAgIGBcXFxcblxcXFx0ZGVzY+WumuS9jTogICR7cnVsZS5kZXNjfSAgLS0tPiDnu5Pmnpw6ICAke29iai5kZXNjfWAgK1xcbiAgICAgICAgICAgIGBcXFxcblxcXFx0aW1n5a6a5L2NOiAgJHtydWxlLmltZ30gIC0tLT4g57uT5p6cOiAgJHtvYmouaW1nfWAgK1xcbiAgICAgICAgICAgIChydWxlLmNvbnRlbnQgIT0gdW5kZWZpbmVkID8gYFxcXFxuXFxcXHRjb250ZW505a6a5L2NOiAgJHtydWxlLmNvbnRlbnR9ICAtLS0+IOe7k+aenDogICR7b2JqLmNvbnRlbnR9YCA6ICcnKSArXFxuICAgICAgICAgICAgYFxcXFxuXFxcXHR1cmzlrprkvY06ICAke3J1bGUudXJsfSAgLS0tPiDnu5Pmnpw6ICAke29iai51cmx9YFxcbiAgICAgICAgKTtcXG4gICAgICAgIGxvZygnLS0tLS0tLS0tLScgKyAoaSArIDEpICsgJzrosIPor5Xnu5PmnZ8tLS0tLS0tLS0tJyk7XFxuICAgIH0sXFxuICAgIGpzb25MaXN0OiBmdW5jdGlvbihhcnIsIGpzb24sIHJ1bGUpIHtcXG4gICAgICAgIGlmIChqc29uLmNvbnN0cnVjdG9yICE9IE9iamVjdCkge1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIGpzb24gPSBKU09OLnBhcnNlKGpzb24pO1xcbiAgICAgICAgICAgIH0gY2F0Y2gge31cXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChqc29uW3J1bGUubGlzdF0gPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgYXJyLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxmb250IGNvbG9yPVxcXCJncmV5XFxcIj48c21hbGw+5peg5YaF5a65PC9zbWFsbD48L2ZvbnQ+JyxcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7fSxcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICByZXR1cm47XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgZGVidWcgPSB0aGlzLmdldEJvb2xlYW5WYWx1ZShydWxlLmRlYnVnLCBmYWxzZSk7XFxuICAgICAgICB2YXIgZW1wdHkgPSB0aGlzLmdldEJvb2xlYW5WYWx1ZShydWxlLmVtcHR5KTtcXG4gICAgICAgIGlmIChkZWJ1Zykge1xcbiAgICAgICAgICAgIGxvZygn5a6a5L2N5YiX6KGoOicgKyBydWxlLmxpc3QpO1xcbiAgICAgICAgfVxcbiAgICAgICAganNvbltydWxlLmxpc3RdLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcXG4gICAgICAgICAgICB2YXIgdGl0bGUgPSBzcChldmFsKHJ1bGUudGl0bGUpKTtcXG4gICAgICAgICAgICB2YXIgZGVzYyA9IHNwKGV2YWwocnVsZS5kZXNjKSk7XFxuICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBzcChldmFsKHJ1bGUuY29udGVudCkpO1xcbiAgICAgICAgICAgIHZhciBpbWcgPSBldmFsKHJ1bGUuaW1nKSArIHJ1bGUucmVmO1xcbiAgICAgICAgICAgIHZhciBocmVmID0gZXZhbChydWxlLnVybCk7XFxuICAgICAgICAgICAgdmFyIHVybCA9IHJ1bGUuaW10ID8gaHJlZiArIFxcXCIjaW1tZXJzaXZlVGhlbWUjI2F1dG9DYWNoZSNcXFwiIDogaHJlZjtcXG4gICAgICAgICAgICB2YXIgbGF6eSA9IHJ1bGUubGF6eSA/IHJ1bGUubGF6eSA6IFxcXCJcXFwiO1xcblxcbiAgICAgICAgICAgIHZhciBkZCA9IHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBkZXNjLFxcbiAgICAgICAgICAgICAgICBjb250ZW50OiBjb250ZW50LFxcbiAgICAgICAgICAgICAgICBwaWNfdXJsOiBpbWcsXFxuICAgICAgICAgICAgICAgIHVybDogKGVtcHR5ID8gXFxcImhpa2VyOi8vZW1wdHkjI1xcXCIgOiAnJykgKyB1cmwsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBydWxlLmNvbF90eXBlLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgfTtcXG5cXG4gICAgICAgICAgICBpZiAoZGVidWcpIHtcXG4gICAgICAgICAgICAgICAgdmFyIHJ4ID0ge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjLFxcbiAgICAgICAgICAgICAgICAgICAgaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudCxcXG4gICAgICAgICAgICAgICAgICAgIHVybFxcbiAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICB0aGlzLmRlYnVnbG9nKGksIGl0ZW0sIHJ1bGUsIHJ4KTtcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgaWYgKGxhenkgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgZGRbXFxcInVybFxcXCJdID0gaHJlZiArIGxhenk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGFyci5wdXNoKGRkKTtcXG4gICAgICAgIH0pO1xcbiAgICB9LFxcbiAgICBydWxlTGlzdDogZnVuY3Rpb24oYXJyLCBodG1sLCBydWxlKSB7XFxuICAgICAgICB2YXIgbGlzdCA9IHBkZmEoaHRtbCxcXG4gICAgICAgICAgICBydWxlLmxpc3QpO1xcbiAgICAgICAgdmFyIGRlYnVnID0gdGhpcy5nZXRCb29sZWFuVmFsdWUocnVsZS5kZWJ1ZyxcXG4gICAgICAgICAgICBmYWxzZSk7XFxuICAgICAgICB2YXIgZW1wdHkgPSB0aGlzLmdldEJvb2xlYW5WYWx1ZShydWxlLmVtcHR5KTtcXG4gICAgICAgIGlmIChkZWJ1Zykge1xcbiAgICAgICAgICAgIGxvZygn5a6a5L2N5YiX6KGoOicgKyBydWxlLmxpc3QpO1xcbiAgICAgICAgfVxcbiAgICAgICAgbGlzdC5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XFxuICAgICAgICAgICAgdmFyIHRpdGxlID0gc3AodGhpcy5zZXRDb250ZW50KGl0ZW0sIHJ1bGUudGl0bGUpKTtcXG4gICAgICAgICAgICB2YXIgZGVzYyA9IHNwKHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLmRlc2MpKTtcXG4gICAgICAgICAgICB2YXIgaW1nID0gdGhpcy5pbWdIYW5kbGUoaXRlbSwgcnVsZSk7XFxuICAgICAgICAgICAgdmFyIHVybCA9IHRoaXMudXJsSGFuZGxlKGl0ZW0sIHJ1bGUpO1xcbiAgICAgICAgICAgIHZhciBjb250ZW50ID0gc3AodGhpcy5zZXRDb250ZW50KGl0ZW0sIHJ1bGUuY29udGVudCkpO1xcblxcbiAgICAgICAgICAgIGlmIChkZWJ1Zykge1xcbiAgICAgICAgICAgICAgICB2YXIgcnggPSB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2MsXFxuICAgICAgICAgICAgICAgICAgICBpbWcsXFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxcbiAgICAgICAgICAgICAgICAgICAgdXJsXFxuICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgIHRoaXMuZGVidWdsb2coaSwgaXRlbSwgcnVsZSwgcngpO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICB2YXIgbGF6eSA9IHJ1bGUubGF6eSA/IHJ1bGUubGF6eSA6IFxcXCJcXFwiO1xcbiAgICAgICAgICAgIHZhciBkZCA9IHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBkZXNjLFxcbiAgICAgICAgICAgICAgICBwaWNfdXJsOiBpbWcsXFxuICAgICAgICAgICAgICAgIHVybDogKGVtcHR5ID8gXFxcImhpa2VyOi8vZW1wdHkjI1xcXCIgOiAnJykgKyB1cmwsXFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBydWxlLmNvbF90eXBlLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBpbWcsXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICBpZiAobGF6eSAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgICAgICBkZFtcXFwidXJsXFxcIl0gPSB1cmwgKyBsYXp5O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBhcnIucHVzaChkZCk7XFxuICAgICAgICB9KTtcXG4gICAgfSxcXG4gICAgTGlzdDogZnVuY3Rpb24oYXJyLCBodG1sLCBydWxlLCBwYXJhbSkge1xcbiAgICAgICAgcGFyYW0gPSBwYXJhbSA/IHBhcmFtIDoge307XFxuICAgICAgICB2YXIgYXV0byA9IHBhcmFtLmF1dG8gPyBwYXJhbS5hdXRvIDogZmFsc2U7XFxuICAgICAgICB2YXIgc2hvdyA9IHBhcmFtLnNob3cgPyBwYXJhbS5zaG93IDogZmFsc2U7XFxuICAgICAgICBpZiAocGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgLy90aGlzLnNwYWdlLnNldCh0cnVlX3VybCk7XFxuICAgICAgICB9XFxuICAgICAgICB0aGlzLnJlZnJlc2goKTtcXG4gICAgICAgIHZhciBkZWJ1ZyA9IHRoaXMuZ2V0Qm9vbGVhblZhbHVlKHJ1bGUuZGVidWcsIGZhbHNlKTtcXG4gICAgICAgIHZhciBlbXB0eSA9IHRoaXMuZ2V0Qm9vbGVhblZhbHVlKHJ1bGUuZW1wdHkpO1xcbiAgICAgICAgdmFyIGxpc3QgPSBwZGZhKGh0bWwsIHJ1bGUubGlzdCk7XFxuICAgICAgICBpZiAoZGVidWcpIHtcXG4gICAgICAgICAgICBsb2coJ+WumuS9jeWIl+ihqDonICsgcnVsZS5saXN0KTtcXG4gICAgICAgIH1cXG4gICAgICAgIC8vbG9nKHRoaXMubmV4dFBhZ2UoKSlcXG4gICAgICAgIGlmICgoc3RvcmFnZTAuZ2V0TXlWYXIoJ3lpX2lzbmV4dCcsICd0JykgPT0gJ3QnICYmIGxpc3QubGVuZ3RoID4gMCkgfHwgcGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgbGlzdC5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XFxuICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW0oXFxcInBhZ2VudW1cXFwiKTtcXG4gICAgICAgICAgICAgICAgZGVsZXRlSXRlbShcXFwicGFnZWxpbmVcXFwiKTtcXG4gICAgICAgICAgICAgICAgdmFyIGlkID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgICAgIHZhciBjbHMgPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gc3AodGhpcy5zZXRDb250ZW50KGl0ZW0sIHJ1bGUudGl0bGUpKTtcXG4gICAgICAgICAgICAgICAgdmFyIGRlc2MgPSBzcCh0aGlzLnNldENvbnRlbnQoaXRlbSwgcnVsZS5kZXNjKSk7XFxuICAgICAgICAgICAgICAgIHZhciBpbWcgPSB0aGlzLmltZ0hhbmRsZShpdGVtLCBydWxlKTtcXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9IHRoaXMudXJsSGFuZGxlKGl0ZW0sIHJ1bGUpO1xcbiAgICAgICAgICAgICAgICB2YXIgY29udGVudCA9IHNwKHRoaXMuc2V0Q29udGVudChpdGVtLCBydWxlLmNvbnRlbnQpKTtcXG5cXG4gICAgICAgICAgICAgICAgaWYgKGRlYnVnKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgcnggPSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzYyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmxcXG4gICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlYnVnbG9nKGksIGl0ZW0sIHJ1bGUsIHJ4KTtcXG4gICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICBpZiAoaSA9PSBsaXN0Lmxlbmd0aCAtIDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIGlkID0gXFxcImxhc3RpZF9cXFwiICsgcGFnZTtcXG4gICAgICAgICAgICAgICAgICAgIGNscyA9IFxcXCJsYXN0bWFya1xcXCI7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IGRlc2MsXFxuICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBpbWcsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IChlbXB0eSA/IFxcXCJoaWtlcjovL2VtcHR5IyNcXFwiIDogJycpICsgdXJsLFxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogY29udGVudCxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBydWxlLmNvbF90eXBlLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGltZyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogaWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiBjbHMsXFxuICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgaWYgKGkgPT0gbGlzdC5sZW5ndGggLSAxICYmIHNob3cpIHtcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJsaW5lXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogXFxcInBhZ2VsaW5lXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdPHNtYWxsPuWKoOi9veS4rS4uLjwvc21hbGw+XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcXFwicGFnZW51bVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHVwZGF0ZUl0ZW0oXFxcInBhZ2VudW1cXFwiLCB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPjxzbWFsbD7liLDlupXkuoY8L3NtYWxsPjwvZm9udD4nLFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGlkOiBcXFwibGFzdFxcXCIsXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAobGlzdC5sZW5ndGggPT0gMCAmJiBwYWdlID09IDEpIHtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImxpbmVcXFwiLFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPjxzbWFsbD7ml6DlhoXlrrk8L3NtYWxsPjwvZm9udD4nLFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHt9LFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHRoaXMubmV4dFBhZ2UoKSkge1xcbiAgICAgICAgICAgIC8vbG9nKCd0Jyk7XFxuICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoJ3lpX2lzbmV4dCcsICd0Jyk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIC8vbG9nKCdmJyk7XFxuICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoJ3lpX2lzbmV4dCcsICdmJyk7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoYXV0bykge1xcbiAgICAgICAgICAgIC8vY3JlYXRlTmV4dFBhZ2UoKTtcXG4gICAgICAgICAgICBhdXRvUGFnZSgpO1xcbiAgICAgICAgfVxcbiAgICB9LFxcbn07XFxuXFxudmFyIGV4dE1ldGhvZCA9IHtcXG4gICAgVG9QYXJhbXM6IGZ1bmN0aW9uKCkge1xcbiAgICAgICAgdmFyIGpzb24gPSBhcmd1bWVudHNbMF07XFxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoanNvbilcXG4gICAgICAgICAgICAubWFwKChrZXkpID0+IGtleSArIFxcXCI9XFxcIiArIGpzb25ba2V5XSlcXG4gICAgICAgICAgICAuam9pbihcXFwiJlxcXCIpO1xcbiAgICB9LFxcbiAgICB1cmxQYXJzZTogZnVuY3Rpb24odSkge1xcbiAgICAgICAgdmFyIGRpY3QgPSB7fTtcXG4gICAgICAgIGRpY3QuU291cmNlID0gdTtcXG4gICAgICAgIGxldCBwYXJhbXMgPSAodXJsKSA9PiB7XFxuICAgICAgICAgICAgbGV0IHF1ZXJ5UGFyYW1zID0ge307XFxuICAgICAgICAgICAgbGV0IHJlZyA9IC8oW14/PSZdKyk9KFtePz0mXSspL2c7XFxuICAgICAgICAgICAgdXJsLnJlcGxhY2UocmVnLCBmdW5jdGlvbigpIHtcXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbXNbYXJndW1lbnRzWzFdXSA9IGFyZ3VtZW50c1syXTtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICByZXR1cm4gcXVlcnlQYXJhbXM7XFxuICAgICAgICB9O1xcbiAgICAgICAgdmFyIGphdmFVcmwgPSBKYXZhSW1wb3J0ZXIoamF2YS5uZXQuVVJMKTtcXG4gICAgICAgIHdpdGgoamF2YVVybCkge1xcbiAgICAgICAgICAgIHZhciB1cmwgPSBuZXcgVVJMKHUpO1xcbiAgICAgICAgICAgIGRpY3QuUHJvdG9jb2wgPSB1cmwuZ2V0UHJvdG9jb2woKTtcXG4gICAgICAgICAgICBkaWN0Lkhvc3QgPSB1cmwuZ2V0SG9zdCgpO1xcbiAgICAgICAgICAgIGRpY3QuUG9ydCA9IHVybC5nZXRQb3J0KCk7XFxuICAgICAgICAgICAgZGljdC5GaWxlID0gdXJsLmdldEZpbGUoKTtcXG4gICAgICAgICAgICBkaWN0LlBhdGggPSB1cmwuZ2V0UGF0aCgpO1xcbiAgICAgICAgICAgIGRpY3QuUmVmID0gdXJsLmdldFJlZigpO1xcbiAgICAgICAgICAgIGRpY3QuSG9zdHMgPSBgJHtkaWN0LlByb3RvY29sfTovLyR7dXJsLmdldEhvc3QoKX1gO1xcbiAgICAgICAgfVxcbiAgICAgICAgZGljdC5QYXJhbXMgPSBwYXJhbXModSk7XFxuICAgICAgICByZXR1cm4gZGljdDtcXG4gICAgfSxcXG4gICAgaXNFcXVhbDogZnVuY3Rpb24oeCwgeSkge1xcbiAgICAgICAgY29uc3Qgb2sgPSBPYmplY3Qua2V5cyxcXG4gICAgICAgICAgICB0eCA9IHR5cGVvZiB4LFxcbiAgICAgICAgICAgIHR5ID0gdHlwZW9mIHk7XFxuICAgICAgICByZXR1cm4geCAmJiB5ICYmIHR4ID09PSBcXFwib2JqZWN0XFxcIiAmJiB0eCA9PT0gdHkgP1xcbiAgICAgICAgICAgIG9rKHgpLmxlbmd0aCA9PT0gb2soeSkubGVuZ3RoICYmXFxuICAgICAgICAgICAgb2soeCkuZXZlcnkoKGtleSkgPT4gdGhpcy5pc0VxdWFsKHhba2V5XSwgeVtrZXldKSkgOiB4ID09PSB5O1xcbiAgICB9LFxcbiAgICBmaW5kRGlmZmVyZW50SW5kZXg6IGZ1bmN0aW9uKHN0cjEsIHN0cjIpIHtcXG4gICAgICAgIGNvbnN0IGRpZmZDaGFycyA9IFtdO1xcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgaWYgKHN0cjFbaV0gIT09IHN0cjJbaV0pIHtcXG4gICAgICAgICAgICAgICAgZGlmZkNoYXJzLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXFxuICAgICAgICAgICAgICAgICAgICBzMTogc3RyMVtpXSxcXG4gICAgICAgICAgICAgICAgICAgIHMyOiBzdHIyW2ldLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gZGlmZkNoYXJzO1xcbiAgICB9LFxcbiAgICByZXBsYWNlQ2hhckF0OiBmdW5jdGlvbihzdHIsIGluZGV4LCByZXBsYWNlbWVudCkge1xcbiAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBzdHIubGVuZ3RoKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHN0cjtcXG4gICAgICAgIH1cXG4gICAgICAgIC8vbG9nKGluZGV4KVxcbiAgICAgICAgY29uc3QgYXJyID0gc3RyLnNwbGl0KFxcXCJcXFwiKTtcXG4gICAgICAgIGFycltpbmRleF0gPSByZXBsYWNlbWVudDtcXG4gICAgICAgIHJldHVybiBhcnIuam9pbihcXFwiXFxcIik7XFxuICAgIH0sXFxuICAgIGdldE9iamVjdEtleXNEaWZmOiBmdW5jdGlvbihvYmoxLCBvYmoyKSB7XFxuICAgICAgICBjb25zdCBkaWZmZXJlbnRLZXlzID0gW107XFxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gb2JqMSkge1xcbiAgICAgICAgICAgIGlmICghb2JqMi5oYXNPd25Qcm9wZXJ0eShrZXkpIHx8IG9iajFba2V5XSAhPT0gb2JqMltrZXldKSB7XFxuICAgICAgICAgICAgICAgIGRpZmZlcmVudEtleXMucHVzaChrZXkpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIGZvciAobGV0IGtleSBpbiBvYmoyKSB7XFxuICAgICAgICAgICAgaWYgKCFvYmoxLmhhc093blByb3BlcnR5KGtleSkpIHtcXG4gICAgICAgICAgICAgICAgZGlmZmVyZW50S2V5cy5wdXNoKGtleSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIGRpZmZlcmVudEtleXM7XFxuICAgIH0sXFxuICAgIGdldE5leHRVcmw6IGZ1bmN0aW9uKHNvdXJjZSwgdGFyZ2V0LCBwYXJhbXMpIHtcXG4gICAgICAgIHZhciB1MSA9IHRoaXMudXJsUGFyc2Uoc291cmNlKTtcXG4gICAgICAgIHZhciB1MiA9IHRoaXMudXJsUGFyc2UodGFyZ2V0KTtcXG4gICAgICAgIHZhciBwYSA9IHVuZGVmaW5lZDtcXG4gICAgICAgIGlmICh0eXBlb2YgcGFyYW1zID09IFxcXCJvYmplY3RcXFwiKSB7XFxuICAgICAgICAgICAgcGEgPSBwYXJhbXMuaGFzT3duUHJvcGVydHkoXFxcIueJueW+gVxcXCIpID8gcGFyYW1zLueJueW+gSA6IHVuZGVmaW5lZDtcXG4gICAgICAgIH1cXG4gICAgICAgIHZhciBuZXh0dXJsID0gc291cmNlO1xcbiAgICAgICAgdmFyIGNhID0gT2JqZWN0LmtleXModTIuUGFyYW1zKS5sZW5ndGggPT0gMCA/IFxcXCJcXFwiIDogXFxcIj9cXFwiO1xcbiAgICAgICAgaWYgKHBhICE9IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICAgIHZhciBycyA9IFN0cmluZyh1Mi5QYXRoKS5yZXBsYWNlKG5ldyBSZWdFeHAocGEpLCBcXFwiJDFmeXBhZ2VcXFwiKTtcXG4gICAgICAgICAgICBuZXh0dXJsID0gdTIuSG9zdHMgKyBycyArIGNhICsgdGhpcy5Ub1BhcmFtcyh1Mi5QYXJhbXMpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBpZiAodGhpcy5pc0VxdWFsKHUxLlBhcmFtcywgdTIuUGFyYW1zKSkge1xcbiAgICAgICAgICAgICAgICBpZiAoZHRfZGVidWcpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyh1MS5QYXRoKTtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyh1Mi5QYXRoKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB2YXIgZGYgPSB0aGlzLmZpbmREaWZmZXJlbnRJbmRleChTdHJpbmcodTEuUGF0aCksIFN0cmluZyh1Mi5QYXRoKSk7XFxuICAgICAgICAgICAgICAgIGlmIChkdF9kZWJ1Zykge1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKGRmKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoZGYubGVuZ3RoID09IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciByZSA9IGRmWzBdLmluZGV4O1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGYgPSBkZi5maWx0ZXIoKHgpID0+IC9cXFxcZCsvLnRlc3QoeC5zMikpO1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlID0gZlswXS5pbmRleDtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB2YXIgZXEgPSB0aGlzLnJlcGxhY2VDaGFyQXQoU3RyaW5nKHUyLlBhdGgpLCByZSwgXFxcImZ5cGFnZVxcXCIpO1xcbiAgICAgICAgICAgICAgICBuZXh0dXJsID0gdTIuSG9zdHMgKyBlcSArIGNhICsgdGhpcy5Ub1BhcmFtcyh1Mi5QYXJhbXMpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHZhciBlcCA9IHRoaXMuZ2V0T2JqZWN0S2V5c0RpZmYodTEuUGFyYW1zLCB1Mi5QYXJhbXMpXFxuICAgICAgICAgICAgICAgIGlmIChlcC5sZW5ndGggPT0gMSkge1xcbiAgICAgICAgICAgICAgICAgICAgdTEuUGFyYW1zW2VwWzBdXSA9ICdmeXBhZ2UnXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBsb2coZXApO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHZhciBlcSA9IFN0cmluZyh1MS5QYXRoKS5yZXBsYWNlKC9cXFxcZCsvLCBcXFwiZnlwYWdlXFxcIik7XFxuICAgICAgICAgICAgICAgIG5leHR1cmwgPSB1MS5Ib3N0cyArIGVxICsgY2EgKyB0aGlzLlRvUGFyYW1zKHUxLlBhcmFtcyk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgLy9sb2coJ25leHQ6JytuZXh0dXJsKVxcbiAgICAgICAgcmV0dXJuIG5leHR1cmw7XFxuICAgIH0sXFxufTtcXG5cXG5mdW5jdGlvbiBnZXRUcnVlbGluayhtYXJrLCB1cmwsIHBhZ2UpIHtcXG4gICAgdmFyIHAgPSBnZXRNeVZhcihtYXJrLCB1cmwpLnJlcGxhY2UoXFxcImZ5cGFnZVxcXCIsIHBhZ2UpO1xcbiAgICBpZiAocGFnZSA9PSAxKSB7XFxuICAgICAgICByZXR1cm4gZ2V0TXlWYXIoXFxcInlpX2ZpcnN0cGFnZVxcXCIsIHApO1xcbiAgICB9IGVsc2UgaWYgKHAgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgIHJldHVybiBwO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgcmV0dXJuIHVybDtcXG4gICAgfVxcbn1cXG4vL+aehOW7ulxcbmZ1bmN0aW9uIGNyZWF0ZU5leHRQYWdlKCkge1xcbiAgICBsZXQgc3RhcnRudW0gPSAxO1xcbiAgICB2YXIgb2JqID0gYXJndW1lbnRzWzBdO1xcbiAgICBpZiAodHJ1ZV91cmwgIT0gZ2V0TXlWYXIoXFxcInlpX3BhZ2V1cmxcXFwiLCBcXFwiXFxcIikpIHtcXG4gICAgICAgIGNsZWFyTXlWYXIoXFxcInlpX3BhZ2V1cmxcXFwiKTtcXG4gICAgfVxcbiAgICBpZiAocGFnZSA9PSBzdGFydG51bSAmJiBnZXRNeVZhcihcXFwieWlfcGFnZXVybFxcXCIpID09IFxcXCJcXFwiKSB7XFxuICAgICAgICBwdXRNeVZhcihcXFwieWlfZmlyc3RwYWdlXFxcIiwgdHJ1ZV91cmwpO1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICB2YXIgbmV4dCA9IGV2YWwo5LiL5LiA6aG1KTtcXG4gICAgICAgICAgICAvL2xvZyhcXFwibmV4dFxcXCIpO1xcbiAgICAgICAgICAgIC8vbG9nKG5leHQpO1xcbiAgICAgICAgfSBjYXRjaCB7XFxuICAgICAgICAgICAgbG9nKFxcXCLlj6/og73kuI3lrZjlnKjkuIvkuIDpobXmiJbogIXkuIvkuIDpobXlrprkvY3mnInpl67pophcXFwiKTtcXG4gICAgICAgICAgICBuZXh0ID0gXFxcIlxcXCI7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAobmV4dCAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgIHZhciBueHVybCA9IGV4dE1ldGhvZC5nZXROZXh0VXJsKHRydWVfdXJsLCBuZXh0LCBvYmopO1xcbiAgICAgICAgICAgIC8vbG9nKFxcXCJueHVybDpcXFwiICsgbnh1cmwpO1xcbiAgICAgICAgICAgIHB1dE15VmFyKOeKtuaAgSwgbnh1cmwpO1xcbiAgICAgICAgICAgIHB1dE15VmFyKFxcXCJ5aV9wYWdldXJsXFxcIiwgbnh1cmwpO1xcbiAgICAgICAgfVxcbiAgICB9XFxufVxcblxcbmZ1bmN0aW9uIGF1dG9QYWdlKCkge1xcbiAgICBpZiAocGFnZSA9PSAxKSB7XFxuICAgICAgICBwdXRNeVZhcihcXFwieWlfZmlyc3RwYWdlXFxcIiwgdHJ1ZV91cmwpO1xcbiAgICB9XFxuICAgIHRyeSB7XFxuICAgICAgICB2YXIgbmV4dCA9IGV2YWwo5LiL5LiA6aG1KTtcXG4gICAgICAgIC8vbG9nKFxcXCJuZXh0XFxcIik7XFxuICAgICAgICAvL2xvZygnbmV4dDonK25leHQpO1xcbiAgICB9IGNhdGNoIHtcXG4gICAgICAgIGxvZyhcXFwi5Y+v6IO95LiN5a2Y5Zyo5LiL5LiA6aG15oiW6ICF5LiL5LiA6aG15a6a5L2N5pyJ6Zeu6aKYXFxcIik7XFxuICAgICAgICBuZXh0ID0gXFxcIlxcXCI7XFxuICAgIH1cXG4gICAgaWYgKG5leHQgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgIHB1dE15VmFyKOeKtuaAgSwgbmV4dCk7XFxuICAgIH1cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLku4vnu41cIixcInBhdGhcIjpcImludHJvZHVjZVwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXVxcbmQucHVzaCh7XFxuaW1nOiBNWV9QQVJBTVMuaW1nLFxcbnVybDogTVlfUEFSQU1TLmltZyxcXG5jb2xfdHlwZTpcXFwicGljXzFfZnVsbFxcXCIsXFxufSlcXG5kLnB1c2goe1xcbnRpdGxlOiBNWV9QQVJBTVMuaW50cm9kdWNlLFxcbmNvbF90eXBlOlxcXCJyaWNoX3RleHRcXFwiLFxcbn0pXFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5pCc57SiXCIsXCJwYXRoXCI6XCJzZWFyY2hcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxuZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL3BhZ2UvamlhblxcXCIpKS5ydWxlKTtcXG5jb25zdCBwYWdlID0gTVlfUEFHRTtcXG52YXIgVGl0bGUgPSBNWV9QQVJBTVMudGl0bGU/TVlfUEFSQU1TLnRpdGxlOmdldFBhcmFtKCd0aXRsZScpP2dldFBhcmFtKCd0aXRsZScpOmdldFZhcignVGl0bGUnKVxcbnZhciBzdXJsID0gZ2V0VmFyKCdsaW5rJykrXFxcIi9zZWFyY2gvcGhvdG9zP3NlYXJjaF9xdWVyeT1cXFwiK1RpdGxlK1xcXCImbWFpbl90YWc9MCZvPW12JnQ9YSZwYWdlPVxcXCJcXG52YXIgVVJMPSBzdXJsK3BhZ2U7XFxuLy92YXIgaHRtbCA9IGdldFJlc0NvZGUoKTtcXG5cXG5sZXQgbm93ID0gZ2V0SXRlbSgnbm93JywgJ+acgOWkmueCueWHuycpO1xcbmlmKE1ZX1BBR0U9PTEpe1xcbmQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuagh+etvuaQnOe0ou+8mlxcXCIrJ+KAmOKAmOKAmeKAmTxzdHJvbmc+PGZvbnQgY29sb3I9XFxcIiNmZjE0OTNcXFwiPicrVGl0bGUrJzwvZm9udD48L3N0cm9uZz4nLFxcbiAgICAgICAgdXJsOiBcXFwidG9hc3Q6Ly9cXFwiK01ZX1BBUkFNUy50aXRsZStcXFwi8J+klFxcXCIsXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcbmV4dHJhOntcXFwibGluZVZpc2libGVcXFwiOmZhbHNlfVxcbiAgICB9KVxcbmxldCBhcnIgPSBbXFxcIuacgOWkmueCueWHu1xcXCIsXFxcIuacgOaWsFxcXCIsXFxcIuacgOWkmueIseW/g1xcXCIsXFxcIuacgOWkmuWbvueJh1xcXCJdO1xcbmZvciAobGV0IGl0IG9mIGFycikge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogbm93ID09IGl0ID8gJ+KAnOKAnOKAneKAnScgKyBpdC5mb250Y29sb3IoJ3JlZCcpIDogaXQsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGl0KSA9PiB7XFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcIm5vd1xcXCIsIGl0KTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICB9LCBpdClcXG4gICAgICAgIH0pXFxuICAgIH1cXG59XFxuaWYgKG5vdyA9PSAn5pyA5aSa54K55Ye7Jykge1xcbnZhciBodG1sID0gZmV0Y2goVVJMKTtcXG59ZWxzZSBpZiAobm93ID09ICfmnIDmlrAnKSB7XFxudmFyIGh0bWwgPSBmZXRjaChVUkwucmVwbGFjZSgnbXYnLCdtcicpKTtcXG59ZWxzZSBpZiAobm93ID09ICfmnIDlpJrniLHlv4MnKSB7XFxudmFyIGh0bWwgPSBmZXRjaChVUkwucmVwbGFjZSgnbXYnLCd0ZicpKTtcXG59ZWxzZSBpZiAobm93ID09ICfmnIDlpJrlm77niYcnKSB7XFxudmFyIGh0bWwgPSBmZXRjaChVUkwucmVwbGFjZSgnbXYnLCdtcCcpKTtcXG59XFxudmFyIGxpc3QgPSBwZGZhKGh0bWwsICcubS0wJiYuY29sLXhzLTYnKTtcXG5mb3IgKHZhciBqIGluIGxpc3QpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBzcChwZGZoKGxpc3Rbal0sICdzcGFuLDEmJlRleHQnKSksXFxuICAgICAgICBkZXNjOiBzcChwZGZoKGxpc3Rbal0sICdzcGFuJiZUZXh0JykrJ1xcXFx0XFxcXHQnK3BkZmgobGlzdFtqXSwgJy5sYWJlbC1jYXRlZ29yeSYmVGV4dCcpK1xcXCIgXFxcIitwZGZoKGxpc3Rbal0sICcubGFiZWwtc3ViJiZUZXh0JykpLFxcbiAgICAgICAgaW1nOiBwZGZoKGxpc3Rbal0sICdpbWcmJmRhdGEtb3JpZ2luYWwnKSxcXG4gICAgICAgIHVybDogZ2V0VmFyKCdsaW5rJykrcGRmaChsaXN0W2pdLCAnYSYmaHJlZicpKycjaW1tZXJzaXZlVGhlbWUjI2F1dG9DYWNoZSNAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9lalxcXCIpJyxcXG5jb2xfdHlwZTogJ21vdmllXzMnLFxcbmV4dHJhOntcXG4gICAgcGFnZVRpdGxlOiBzcChwZGZoKGxpc3Rbal0sICdzcGFuLDEmJlRleHQnKSksXFxufVxcbiAgICB9KTtcXG59XFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5LqM57qnXCIsXCJwYXRoXCI6XCJlalwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcImhpa2VyOi8vcGFnZS9qaWFuXFxcIikpLnJ1bGUpO1xcbi8vZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9lcj9ydWxlPc6xJykpLnJ1bGUpO1xcbnZhciBoZWFkZXJzID0ge1xcbiAgICAgICAgXFxcIkNvb2tpZVxcXCI6IGZldGNoUEMoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvSk1fY29va2llLnR4dCcpIHx8ICcnLCBcXG4gICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjpcXFwiTW96aWxsYS81LjAgKExpbnV4OyBBbmRyb2lkIDEyOyBTTS1HOTc1MCBCdWlsZC9TUDFBLjIxMDgxMi4wMTY7IHd2KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzQuMCBDaHJvbWUvODkuMC40Mzg5LjcyIE1RUUJyb3dzZXIvNi4yIFRCUy8wNDYyNzkgTW9iaWxlIFNhZmFyaS81MzcuMzZcXFwiLFxcbiAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBNWV9VUkxcXG4gICAgfTtcXG4gICAgLy9sb2coTVlfVVJMKVxcbnZhciBodG1sID0gZmV0Y2goTVlfVVJMLHtoZWFkZXJzOmhlYWRlcnN9KVxcbnNldFBhZ2VUaXRsZShzcChwZGZoKGh0bWwsJ2gxJiZUZXh0JykpKVxcbnZhciBsaW5rID0gZ2V0VmFyKCdsaW5rJylcXG52YXIgY29udGVudHMgPSBwZGZhKGh0bWwsICcjaW50cm8tYmxvY2smJi50YWctYmxvY2snKVxcbnZhciBjb250ZW50ID0gY29udGVudHMubWFwKHggPT4gcGRmaCh4LCAnZGl2JiZUZXh0JykpO1xcbnZhciBpbnRyb2R1Y2UgPSBzcChwZGZoKGh0bWwsIFxcXCIjaW50cm8tYmxvY2smJi5wLWItNSYmVGV4dFxcXCIpKTtcXG52YXIgcGFnZWNvdW50PXNwKHBkZmgoaHRtbCwgXFxcIi5wYWdlY291bnQmJlRleHRcXFwiKSk7XFxudmFyIElEID0gXFxcIuemgea8q0lEOlxcXCIrcGRmaChodG1sLCBcXFwiLm51bWJlciYmVGV4dFxcXCIpLnNwbGl0KCdKTScpWzFdXFxudmFyIHZpZXdzID0gc3AoXFxcIvCfkY1cXFwiK3BkZmgoaHRtbCwgXFxcIi5saXN0LXN0eWxlLW5vbmUmJlRleHRcXFwiKStcXFwiICAgXFxcIitcXFwi8J+RgFxcXCIrcGRmaChodG1sLCBcXFwiLmxpc3Qtc3R5bGUtbm9uZSwxJiZUZXh0XFxcIikpO1xcbnZhciBpZCA9IHBkZmgoaHRtbCwgXFxcIiNhbGJ1bV9pZCYmdmFsdWVcXFwiKTtcXG52YXIgY29tbWVudCA9IHBkZmgoaHRtbCwgXFxcIiNjb21tZW50c19hJiZUZXh0XFxcIik7XFxudmFyIGF1dGhvciA9cGRmYShodG1sLCAnI2ludHJvLWJsb2NrJiYudGFnLWJsb2NrLDMmJmEnKTtcXG52YXIgdGFnID0gcGRmYShodG1sLCAnI2ludHJvLWJsb2NrJiYudGFnLWJsb2NrLDImJmEnKTtcXG50cnkge1xcbiAgICB2YXIgZGVzX3BpYyA9IHBkKGh0bWwsICdib2R5JiYudGh1bWItb3ZlcmxheSwxJiZpbWcmJnNyY3x8ZGF0YS1jZnNyYycpO1xcbiAgICB2YXIgZGVzX2F1dGhvciA9IHNtYWxsKHNwKHBkZmgoaHRtbCwgJ2JvZHkmJi5wYW5lbC1oZWFkaW5nJiZkaXYsMSYmVGV4dCcpLnN1YnN0cmluZygwLCAyMCkrJ1xcXFxuJytwYXJzZURvbUZvckh0bWwoaHRtbCwgJ2JvZHkmJi5wLXQtNSwwJiZUZXh0JykrJ1xcXFxuJysgcGFyc2VEb21Gb3JIdG1sKGh0bWwsICdib2R5JiYucC10LTUsMSYmVGV4dCcpKSwnRjBGRkZGJyk7XFxuICAgIHZhciBkZXNfZGVzYyA9IHNtYWxsKHNwKHBhZ2Vjb3VudCtcXFwiICBcXFwiK0lEKydcXFxcbicrdmlld3MrJ1xcXFxuJytpbnRyb2R1Y2UpLCcwMDY2OTknKTtcXG4gICAgdmFyIGRlc190aXRsZSA9IHNwKHBhcnNlRG9tRm9ySHRtbChodG1sLCAnaDEmJlRleHQnKSk7XFxuICAgIHZhciBjb250cyA9IHBkZmEoaHRtbCwgJ2JvZHkmJi5idG4tdG9vbGJhciYmYScpO1xcbiAgICBpZiAoY29udHMubGVuZ3RoID09PSAwKSB7XFxuICAgIGNvbnRzID0gcGRmYShodG1sLCAnYm9keSYmLnJlYWQtYmxvY2smJmEnKTtcXG4gICAgfVxcbiAgICB2YXIgZmF2X2lkID0gcGRmaChodG1sLFxcXCJib2R5JiYuYnRuLXByaW1hcnk6bWF0Y2hlcyjmlLbol48pJiZpZFxcXCIpLnNwbGl0KCdfJylbMl1cXG4gICAgaWYoZmF2X2lkKXtcXG4gICAgICAgIHZhciBmYXZfaW5mbyA9IHRydWU7XFxuICAgICAgICB2YXIgZmF2X3VybCA9IGxpbmsrJy9hamF4L3JlbW92ZV9hbGJ1bV9wbGF5bGlzdCc7XFxuICAgICAgICB2YXIgZmF2X2RhdGEgPSB7XFxuICAgICAgICAgICAgXFxcInZpZGVvX2lkXFxcIjogZmF2X2lkLFxcbiAgICAgICAgICAgIFxcXCJsaXN0XFxcIjogJ2Zhdm9yaXRlcydcXG4gICAgICAgIH1cXG4gICAgICAgICBcXG4gICAgfWVsc2V7XFxuICAgICAgICB2YXIgZmF2X2luZm8gPSBmYWxzZTtcXG4gICAgICAgIHZhciBmYXZfaWQgPSBwZGZoKGh0bWwsXFxcImJvZHkmJi5mbG9hdC1yaWdodDptYXRjaGVzKOaUtuiXjykmJmlkXFxcIikuc3BsaXQoJ18nKVsyXVxcbiAgICAgICAgdmFyIGZhdl91cmwgPSBsaW5rKycvYWpheC9mYXZvcml0ZV9hbGJ1bSc7XFxuICAgICAgICB2YXIgZmF2X2RhdGEgPSB7XFxuICAgICAgICAgICAgXFxcImFsYnVtX2lkXFxcIjogZmF2X2lkLFxcbiAgICAgICAgICAgIFxcXCJmaWRcXFwiOiAnMCdcXG4gICAgICAgIH1cXG4gICAgICAgIFxcbiAgICAgICAgfVxcbiAgIC8vbG9nKGZhdl9pZCkgXFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogZGVzX2F1dGhvcixcXG4gICAgICAgIGRlc2M6IGRlc19kZXNjLFxcbiAgICAgICAgcGljX3VybDogZGVzX3BpYyxcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9pbnRyb2R1Y2Ujbm9SZWNvcmRIaXN0b3J5IyNub0hpc3RvcnkjXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV92ZXJ0aWNhbF9waWNfYmx1cicsXFxuZXh0cmE6IHtcXG4gICAgICAgICAgICBpbWc6IGRlc19waWMsXFxuICAgICAgICAgICAgaW50cm9kdWNlOiBpbnRyb2R1Y2UsXFxuICAgICAgICAgICAgZ3JhZGllbnQ6IHRydWUgICAgICAgICAgICBcXG4gICAgICAgIH1cXG4gICAgfSx7XFxuICAgICAgICB0aXRsZTogZmF2X2luZm8/J+KAmOKAmOKAmeKAmTxzdHJvbmc+PGZvbnQgY29sb3I9XFxcInJlZFxcXCI+5LiN5pS26JePPC9mb250Pjwvc3Ryb25nPic6J+KAmOKAmOKAmeKAmTxzdHJvbmc+PGZvbnQgY29sb3I9XFxcIiMwMGJmZmZcXFwiPuaUtuiXjzwvZm9udD48L3N0cm9uZz4nLFxcbiAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKGZhdl9pZCwgaGVhZGVycywgZmF2X2luZm8sIGZhdl91cmwsIGZhdl9kYXRhKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBwb3N0UmVxdWVzdChmYXZfdXJsLCB7aGVhZGVyczogaGVhZGVycywgYm9keTogZmF2X2RhdGF9KVxcbiAgICAgICAgICAgICAgICAgICAgdG9hc3QoZmF2X2luZm8/J+WPlua2iOaUtuiXjyc6J+aUtuiXj+aIkOWKnycpXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgICAgIH0sIGZhdl9pZCwgaGVhZGVycywgZmF2X2luZm8sIGZhdl91cmwsIGZhdl9kYXRhKSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF80XFxcIlxcbiAgICAgICAgXFxuICAgIH0se1xcbnRpdGxlOiBcXFwi5L2c6ICF8J+Zh+KAjeKZgu+4j1xcXCIsXFxudXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChhdXRob3IpID0+IHtcXG4gICAgICBjb25zdCBoaWtlclBvcCA9IHJlcXVpcmUoXFxcImh0dHBzOi8vaGlrZXJmYW5zLmNvbS93ZWlzeXIvanMvaGlrZXJQb3AuanNcXFwiKTtcXG4gICAgICBsZXQg5qCH562+ID0gYXV0aG9yLm1hcCh4ID0+IHtcXG4gICAgICAgICAgbGV0IHRpdGxlID0gcGRmaCh4LCdhJiZUZXh0Jyk7XFxuICAgICAgICAgICAgICByZXR1cm4geyAgICAgICAgXFxuICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsICAgICAgICBcXG4gICAgICAgICAgICAgIGljb246IGdldFZhcignbGluaycpK1xcXCIvdGVtcGxhdGVzL2Zyb250ZW5kL2FpcmF2L2ltZy9hcHBfbGluazMucG5nP3Y9M1xcXCIsICAgICAgICBcXG4gICAgICAgICAgICAgIHVybDogdGl0bGUsICAgIH19KTsgICAgICAgICAgIGhpa2VyUG9wLnNlbGVjdENlbnRlckljb24oe1xcbiAgICAgICAgICAgICAgaWNvbkxpc3Q6IOagh+etviwgICAgICAgICAgICBcXG4gICAgICAgICAgICAgIHRpdGxlOiBcXFwi5bCP8J+mjOaAoeaDhVxcXCIsICAgICAgICAgICAgXFxuICAgICAgICAgICAgICBjb2x1bW5zOiAyLCAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgY2xpY2soYSkgeyAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL3NlYXJjaD90aXRsZT1cXFwiK2ErXFxcIiZwYWdlPWZ5cGFnZSNmdWxsVGhlbWUjI25vSGlzdG9yeSNcXFwiOyAgICAgICAgICAgIH0gICAgICAgIH0pOyAgICAgICAgXFxuICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiOyAgICB9LGF1dGhvciksXFxuY29sX3R5cGU6IFxcXCJ0ZXh0XzRcXFwiLFxcbn0se1xcbnRpdGxlOiBcXFwi5qCH562+8J+Pt++4j1xcXCIsXFxudXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCh0YWcpID0+IHtcXG4gICAgICBjb25zdCBoaWtlclBvcCA9IHJlcXVpcmUoXFxcImh0dHBzOi8vaGlrZXJmYW5zLmNvbS93ZWlzeXIvanMvaGlrZXJQb3AuanNcXFwiKTtcXG4gICAgICBsZXQg5qCH562+ID0gdGFnLm1hcCh4ID0+IHtcXG4gICAgICAgICAgbGV0IHRpdGxlID0gcGRmaCh4LCdhJiZUZXh0Jyk7XFxuICAgICAgICAgIGxldCB1cmwgPSBwZCh4LCdhJiZocmVmJykrXFxcIiZtYWluX3RhZz0wJm89bXYmdD1hJnBhZ2U9XFxcIjtcXG4gICAgICAgICAgICAgIHJldHVybiB7ICAgICAgICBcXG4gICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSwgICAgICAgIFxcbiAgICAgICAgICAgICAgaWNvbjogZ2V0VmFyKCdsaW5rJykrXFxcIi90ZW1wbGF0ZXMvZnJvbnRlbmQvYWlyYXYvaW1nL3BoaWNvbi9saWJyYXJ5LnBuZ1xcXCIsICAgICAgICBcXG4gICAgICAgICAgICAgIHVybDogdGl0bGUsICAgIH19KTsgICAgICAgICAgIGhpa2VyUG9wLnNlbGVjdENlbnRlckljb24oe1xcbiAgICAgICAgICAgICAgaWNvbkxpc3Q6IOagh+etviwgICAgICAgICAgICBcXG4gICAgICAgICAgICAgIHRpdGxlOiBcXFwi5aSn8J+mjOS8pOi6q1xcXCIsICAgICAgICAgICAgXFxuICAgICAgICAgICAgICBjb2x1bW5zOiAyLCAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgY2xpY2soYSkgeyAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL3NlYXJjaD90aXRsZT1cXFwiK2ErXFxcIiZwYWdlPWZ5cGFnZSNmdWxsVGhlbWUjI25vSGlzdG9yeSNcXFwiOyAgICAgICAgICAgIH0gICAgICAgIH0pOyAgICAgICAgXFxuICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiOyAgICB9LHRhZyksXFxuY29sX3R5cGU6IFxcXCJ0ZXh0XzRcXFwiLFxcbn0se1xcbnRpdGxlOiBjb21tZW50LFxcbnVybDogXFxcImhpa2VyOi8vcGFnZS9jb21tZW50P2lkPVxcXCIraWQrXFxcIiZwYWdlPWZ5cGFnZSZ0YWc9YWxidW0jbm9SZWNvcmRIaXN0b3J5IyNub0hpc3RvcnkjXFxcIixcXG5jb2xfdHlwZTogXFxcInRleHRfNFxcXCIsXFxuXFxufSx7XFxuY29sX3R5cGU6IFxcXCJsaW5lXFxcIlxcbn0pXFxuZnVuY3Rpb24gam0oKSB7XFxuICAgIHZhciBodG1sID0gcmVxdWVzdChpbnB1dCk7XFxuICAgIHZhciBsaXN0ID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCBcXFwiLnBhbmVsLWJvZHkmJmltZzpub3QoW2RhdGEtY2ZzcmNdKTpub3QoW2FsdF0pXFxcIik7XFxuICAgIHZhciBwaWNzID0gW107XFxuICAgIGZvciAodmFyIGl0ZW0gb2YgbGlzdCkge1xcbiAgICAgICAgdmFyIHBpY1VybCA9IHBkKGl0ZW0sICdpbWcmJmRhdGEtb3JpZ2luYWwnKTtcXG4gICAgICAgIGxldCBkZWNvZGUgPSAkKCkuaW1hZ2UoKHBpY1VybCkgPT4ge1xcbiAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImQ/cnVsZT1cXFwiICsgTVlfVElUTEUpKHBpY1VybCwgaW5wdXQpO1xcbiAgICAgICAgfSwgcGljVXJsKTtcXG4gICAgICAgIHBpY3MucHVzaChwaWNVcmwgKyBkZWNvZGUpO1xcbiAgICB9XFxuICAgIHJldHVybiBcXFwicGljczovL1xcXCIgKyBwaWNzLmpvaW4oXFxcIiYmXFxcIik7XFxufVxcblxcbmZ1bmN0aW9uIGJqbSgpIHtcXG4gICAgXFxuICAgIHZhciBodG1sID0gcmVxdWVzdChpbnB1dCk7XFxuICAgIHZhciBsaXN0ID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCBcXFwiLnBhbmVsLWJvZHkmJmltZ1xcXCIpO1xcbiAgICB2YXIgcGljcyA9IFtdO1xcbiAgICBmb3IgKHZhciBpdGVtIG9mIGxpc3QpIHtcXG4gICAgICAgIHZhciBwaWNVcmwgPSBwZChpdGVtLCAnaW1nJiZkYXRhLW9yaWdpbmFsJyk7XFxuICAgICAgICBwaWNzLnB1c2gocGljVXJsKTtcXG4gICAgfVxcbiAgICByZXR1cm4gXFxcInBpY3M6Ly9cXFwiICsgcGljcy5qb2luKFxcXCImJlxcXCIpO1xcbn1cXG4gICAgdmFyIGxhenlKbSA9ICQoXFxcIlxcXCIpLmxhenlSdWxlKGptKTtcXG4gICAgdmFyIGxhenlCam0gPSAkKFxcXCJcXFwiKS5sYXp5UnVsZShiam0pO1xcbiAgICB2YXIgY2hhcHRlckxpc3QgPSBbXTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAoZ2V0TXlWYXIoJ3Noc29ydCcpID09PSAnMScpID8gJzxiPjxmb250IGNvbG9yPVxcXCIjMTlCODlEXFxcIj7pgInpm4bpgIbluo88L2ZvbnQ+PGZvbnQgY29sb3I9XFxcIiNmZjdmNTBcXFwiPuKWvjwvZm9udD48L2I+JzogJzxiPjxmb250IGNvbG9yPVxcXCIjMTlCODlEXFxcIj7pgInpm4bmraPluo88L2ZvbnQ+PGZvbnQgY29sb3I9XFxcIiMzM2NjY2NcXFwiPuKWtDwvZm9udD48L2I+JyxcXG4gICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgbGV0IGNvbmYgPSBnZXRNeVZhcignc2hzb3J0Jyk7XFxuICAgICAgICAgICAgaWYgKGNvbmYgPT0gJzEnKSB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJzaHNvcnRcXFwiLCBcXFwiMFxcXCIpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJzaHNvcnRcXFwiLCBcXFwiMVxcXCIpXFxuICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/liIfmjaLmjpLluo/miJDlip8nXFxuICAgICAgICB9KSxcXG4gICAgICAgcGljX3VybDogJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vbWVzc3kvOS5zdmcnLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2ljb24nXFxuICAgIH0pO1xcblxcblxcbiAgaWYgKGNvbnRzLmxlbmd0aCA9PT0gMCkge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICB0aXRsZTogXFxcIueCueWHu+ebtOaOpemYheivu1xcXCIsXFxuICAgICAgICAgICAgdXJsOiB1cmwgKyBsYXp5QmptLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8xXFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfkuI3op6Plr4YnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCh1cmwsIGxhenlCam0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybCArIGxhenlCam1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB1cmwsIGxhenlCam0pXFxuICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn6Kej5a+GJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygodXJsLCBsYXp5Sm0pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybCArIGxhenlKbVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHVybCwgbGF6eUptKVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBdXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgICAgICBjaGFwdGVyTGlzdC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZGVzX3RpdGxlLFxcbiAgICAgICAgICAgIHVybDogXFxcImh0dHBzOi8vam1jb21pYy5tZS9waG90by9cXFwiICsgTVlfVVJMLnNwbGl0KFxcXCJcXFxcL1xcXCIpWzRdXFxuICAgICAgICB9KTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGxldCBsaXN0ID0gY29udHMubWFwKHYgPT4ge1xcbiAgICAgICAgICAgIGxldCB0aXRsZSA9IHNwKHBkZmgodiwgJ2EmJlRleHQnKSksXFxuICAgICAgICAgICAgICAgIHVybCA9IHBkKHYsICdhJiZocmVmJyk7XFxuICAgICAgICAgICAgY2hhcHRlckxpc3QucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgdXJsOiB1cmxcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgIHVybDogdXJsICsgbGF6eUptLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfMlxcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5LiN6Kej5a+GJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHVybCwgbGF6eUJqbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybCArIGxhenlCam1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdXJsLCBsYXp5QmptKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+ino+WvhicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCh1cmwsIGxhenlKbSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybCArIGxhenlKbVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB1cmwsIGxhenlKbSlcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBdXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIGlmIChnZXRNeVZhcignc2hzb3J0JykgPT09ICcxJykge1xcbiAgICAgICAgICAgIGxpc3QucmV2ZXJzZSgpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgZCA9IGQuY29uY2F0KGxpc3QpO1xcbiAgICB9XFxuICAgIHZhciByZWNvbW1lbmQgPSBwZGZhKGh0bWwsXFxcIiNyZWxhdGVkX2NvbWljcyYmLnJvdzpoYXMoaDQpXFxcIilcXG4gICAgcmVjb21tZW5kLmZvckVhY2goKGRhdGEpID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHBkZmgoZGF0YSxcXFwiaDQmJlRleHRcXFwiKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInJpY2hfdGV4dFxcXCJcXG4gICAgICAgICAgICBcXG4gICAgICAgIH0pXFxuICAgICAgICB2YXIgaXRlbSA9IHBkZmEoZGF0YSwgJ2JvZHkmJi5wLWItMTUsMDo2Jyk7XFxyXFxuICAgICAgICAgICAgaXRlbS5mb3JFYWNoKChkYXRhcykgPT4ge1xcbiAgICAgICAgICAgICAgICB2YXIgaW1nID0gcGRmaChkYXRhcyxcXFwiaW1nJiZkYXRhLXNyY1xcXCIpXFxuICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IHBkZmgoZGF0YXMsXFxcImltZyYmYWx0XFxcIilcXG4gICAgICAgICAgICAgICAgdmFyIHVybCA9IHBkKGRhdGFzLFxcXCJhJiZocmVmXFxcIikgKycjaW1tZXJzaXZlVGhlbWUjI2F1dG9DYWNoZSNAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9lalxcXCIpJ1xcbiAgICAgICAgICAgICAgICB2YXIgZGVzYyA9IHBkZmgoZGF0YXMsXFxcIi50ZXh0LXdoaXRlJiZUZXh0XFxcIikrXFxcIiBcXFwiK3BkZmgoZGF0YXMsXFxcIi52aWRlby12aWV3cyYmVGV4dFxcXCIpXFxuICAgICAgICAgICAgICAgIHZhciBhcnRpY2xlID0gcGRmaChkYXRhcyxcXFwiLmdhbWVsaWJfYmxvY2tfaGVhZGVyJiZUZXh0XFxcIik7XFxuICAgICAgICAgICAgICAgIGlmKGFydGljbGUpe1xcbiAgICAgICAgICAgICAgICAgICAgZGVzYyA9IGFydGljbGVcXG4gICAgICAgICAgICAgICAgICAgIHVybCA9IFxcXCJoaWtlcjovL3BhZ2UvYXJ0aWNsZT91cmw9XFxcIitwZChkYXRhcyxcXFwiYSwxJiZocmVmXFxcIikrXFxcIiNub1JlY29yZEhpc3RvcnkjI25vSGlzdG9yeSMjaW1tZXJzaXZlVGhlbWUjXFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogZGVzYyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogdXJsLFxcbiAgICAgICAgICAgICAgICAgICAgcGljX3VybDogaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJtb3ZpZV8zXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlVGl0bGU6IHRpdGxlXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIH0pXFxyXFxuXFxufSBjYXRjaCAoZSkge1xcbiAgICBsb2coZS50b1N0cmluZygpKTtcXG59XFxuXFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5q+P5ZGo5b+F55yLXCIsXCJwYXRoXCI6XCJia1wiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcImhpa2VyOi8vcGFnZS9qaWFuXFxcIikpLnJ1bGUpO1xcbmV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9wYWdlL3lqXFxcIiwge30pKS5ydWxlKTtcXG5jb25zdCBwYWdlID0gTVlfUEFHRTtcXG5jb25zdCBob3N0ID0gZ2V0VmFyKCdsaW5rJykrXFxcIi93ZWVrP3NrZGFkPTFcXFwiO1xcbnZhciDlrprkvY3kv6Hmga8gPSBbe1xcbiAgICDlpKfnsbvlrprkvY06ICdib2R5JiYud2Vlay10aW1lLWl0ZW0nLFxcbiAgICDlsI/nsbs6ICdib2R5JiZhJyxcXG59LCB7XFxuICAgIOS4gOe6p+WumuS9jTogJ2JvZHkmJi5uYXYtcGlsbHMnLFxcbiAgICDlsI/nsbs6ICdib2R5JiZhJyxcXG59XTtcXG5NWV9VUkwgPSBob3N0O1xcbmxldCB0cnVlX3VybCA9IGdldE15VmFyKE1ZX1JVTEUudXJsLCBNWV9VUkwpXFxudmFyIGh0bWwgPSBmZXRjaCh0cnVlX3VybCk7XFxuY29uc3QgZGMgPSBkeW5hbWljQ2xhc3Moe1xcbiAgICDliIbnsbvpopzoibI6IGdldFJhbmdlQ29sb3JzKClcXG59KTtcXG5kYy7lvIDlkK/mipjlj6AoZmFsc2UpXFxuZGMu5byA5ZCv5pCc57SiKGZhbHNlKS7liJvlu7rliqjmgIHliIbnsbso5a6a5L2N5L+h5oGvKVxcbnZhciBpdGVtID0gcGRmYShodG1sLCAnYm9keSYmLndlZWtseS12aWRlby1pdGVtJyk7XFxyXFxuICAgICAgICAgICAgaXRlbS5mb3JFYWNoKChkYXRhcykgPT4ge1xcclxcbiAgICAgICAgICAgICAgICBkLnB1c2goeyBcXHJcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBzcChzbWFsbChwZGZoKGRhdGFzLCAnLnZpZGVvLXRpdGxlJiZUZXh0JykrJ1xcXFxuJytwZGZoKGRhdGFzLCAnLnRpdGxlLXRydW5jYXRlJiZUZXh0JykpKSxcXHJcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IHNwKCfwn5GAJytcXFwiIFxcXCIrcGRmaChkYXRhcywgJ3NwYW4mJlRleHQnKSsnXFxcXG4nK3BkZmgoZGF0YXMsICcudGl0bGUtdHJ1bmNhdGUsMSYmVGV4dCcpKSxcXHJcXG4gICAgICAgICAgICAgICAgICAgIHBpY191cmw6IHBkKGRhdGFzLCAnaW1nJiZkYXRhLW9yaWdpbmFsJyksXFxyXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcIm1vdmllXzFfdmVydGljYWxfcGljXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgdXJsOiBnZXRWYXIoJ2xpbmsnKStwZGZoKGRhdGFzLCAnYSYmaHJlZicpKycjaW1tZXJzaXZlVGhlbWUjI2F1dG9DYWNoZSNAcnVsZT1qczokLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9lalxcXCIpJyxcXG4gICAgICAgICAgICAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZVRpdGxlOnNwKHBkZmgoZGF0YXMsICcudmlkZW8tdGl0bGUmJlRleHQnKSlcXG4gICAgICAgICAgICAgICAgICAgICAgfVxcbn0pO1xcbn0pXFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmjpLooYzmppxcIixcInBhdGhcIjpcInJhbmtcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxuZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL3BhZ2UvamlhblxcXCIpKS5ydWxlKTtcXG5jb25zdCBwYWdlID0gTVlfUEFHRTtcXHJcXG52YXIgaG9zdCA9IGdldFZhcignbGluaycpKycvYWxidW1zP289bXYmdD0nOyBcXG5sZXQgcmFuayA9IGdldEl0ZW0oJ3JhbmsnLCAn5YWo6YOoJyk7XFxuIGlmIChNWV9QQUdFID09IDEpIHtcXHJcXG4gICAgICAgICAgICBsZXQgYXJyID0gW1xcXCLlhajpg6hcXFwiLFxcXCLmnKzml6VcXFwiLFxcXCLmnKzlkahcXFwiLFxcXCLmnKzmnIhcXFwiXTtcXG5mb3IgKGxldCBpdCBvZiBhcnIpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHJhbmsgPT0gaXQgPyAn4oCc4oCc4oCd4oCdJyArIGl0LmZvbnRjb2xvcigncmVkJykgOiBpdCxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfNCcsXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChpdCkgPT4ge1xcbiAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXCJyYW5rXFxcIiwgaXQpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIH0sIGl0KVxcbiAgICAgICAgfSlcXG4gICAgfVxcbn1cXG5pZiAocmFuayA9PSAn5YWo6YOoJykge1xcbk1ZX1VSTD1ob3N0K1xcXCImcGFnZT1cXFwiK3BhZ2U7XFxuIGxvZyhNWV9VUkwpXFxudmFyIGh0bWwgPSBmZXRjaChNWV9VUkwpO1xcbn1lbHNlIGlmIChyYW5rID09ICfmnKzml6UnKSB7XFxuTVlfVVJMPWhvc3QrXFxcInRcXFwiK1xcXCImcGFnZT1cXFwiK3BhZ2U7XFxuIGxvZyhNWV9VUkwpXFxudmFyIGh0bWwgPSBmZXRjaChNWV9VUkwpO1xcbn1lbHNlIGlmIChyYW5rID09ICfmnKzlkagnKSB7XFxuTVlfVVJMPWhvc3QrXFxcIndcXFwiK1xcXCImcGFnZT1cXFwiK3BhZ2U7XFxuIGxvZyhNWV9VUkwpXFxudmFyIGh0bWwgPSBmZXRjaChNWV9VUkwpO1xcbn1lbHNlIGlmIChyYW5rID09ICfmnKzmnIgnKSB7XFxuTVlfVVJMPWhvc3QrXFxcIm1cXFwiK1xcXCImcGFnZT1cXFwiK3BhZ2U7XFxuIGxvZyhNWV9VUkwpXFxudmFyIGh0bWwgPSBmZXRjaChNWV9VUkwpO1xcbn1cXHJcXG4gdmFyIGxpc3QgPSBwZGZhKGh0bWwsICcuY29udGFpbmVyOmhhcyguY29sLXhzLTYpJiYucC1iLTE1Jyk7XFxyXFxuICAgICAgICAgICAgbGlzdC5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0sIGluZGV4KSB7XFxyXFxuICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IHNwKHBkZmgoaXRlbSwgJ3NwYW4sMSYmVGV4dCcpKTtcXG4gICAgICAgICAgICAgICAgdmFyIHRhZyA9IHNtYWxsKHNwKHBkZmgoaXRlbSwgJy50aXRsZS10cnVuY2F0ZSwyJiZUZXh0JykpKTtcXHJcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXHJcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSsnXFxcXG4nK3RhZyxcXHJcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IHNtYWxsKCfwn5ORJywgNzc3Nzc3KSArIGNvbG9yKHNwKHBkZmgoaXRlbSwgJy50aXRsZS10cnVuY2F0ZSwxJiZhJiZUZXh0JykpLCAnOTk5OTk5JykgKyAnXFxcXG4nICsgc21hbGwoJ/CfkqAnLCA3Nzc3NzcpICsgY29sb3Ioc3AocGRmaChpdGVtLCAnLmxhYmVsLWNhdGVnb3J5JiZUZXh0JykpLCAnOTk5OTk5JykrICdcXFxcbicgKyBzbWFsbCgn8J+UpScsIDY2NjY2NikgKyBjb2xvcihzcChwZGZoKGl0ZW0sICdzcGFuJiZUZXh0JykpLCAnOTk5OTk5JyksXFxyXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IHBkKGl0ZW0sICdpbWcmJmRhdGEtY2ZzcmN8fHNyY3x8ZGF0YS1zcmMnKSxcXHJcXG4gICAgICAgICAgICAgICAgICAgIHVybDogZ2V0VmFyKCdsaW5rJykrcGRmaChpdGVtLCAnYSYmaHJlZicpKycjaW1tZXJzaXZlVGhlbWUjI2F1dG9DYWNoZSMnKydAcnVsZT1qczokLnJlcXVpcmUoXFxcImVqXFxcIiknLFxcclxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpYycsXFxyXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcclxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogcGQoaXRlbSwgJ2ltZyYmZGF0YS1jZnNyY3x8c3JjfHxkYXRhLXNyYycpLFxcclxcbiAgICAgICAgICAgICAgICAgICAgfVxcclxcbiAgICAgICAgICAgICAgICB9KTtcXHJcXG4gICAgICAgICAgICB9KTtcXHJcXG4gICAgICAgIFxcclxcbiAgICAgIHNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuaOqOiNkFwiLFwicGF0aFwiOlwicmVjb21tZW5kXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbmV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9wYWdlL2ppYW5cXFwiKSkucnVsZSk7XFxudmFyIGh0bWwgPSBnZXRSZXNDb2RlKCk7XFxuY29uc3QgcGFnZSA9IE1ZX1BBR0U7XFxudmFyIGxpc3QgPSBwZGZhKGh0bWwsICdib2R5JiYuY29sLXhsLTInKTtcXG5mb3IgKHZhciBqIGluIGxpc3QpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBzcChwZGZoKGxpc3Rbal0sICcudmlkZW8tdGl0bGUmJlRleHQnKSksXFxuICAgICAgICBkZXNjOiBzcChwZGZoKGxpc3Rbal0sICdzcGFuJiZUZXh0JykrJ1xcXFx0XFxcXHQnK3BkZmgobGlzdFtqXSwgJy5sYWJlbC1jYXRlZ29yeSYmVGV4dCcpK1xcXCIgXFxcIitwZGZoKGxpc3Rbal0sICcubGFiZWwtc3ViJiZUZXh0JykpLFxcbiAgICAgICAgaW1nOiBwZGZoKGxpc3Rbal0sICdpbWcmJmRhdGEtb3JpZ2luYWx8fGRhdGEtc3JjfHxzcmMnKSxcXG4gICAgICAgIHVybDogcGQobGlzdFtqXSwgJ2EmJmhyZWYnKSsnI2ltbWVyc2l2ZVRoZW1lIyNhdXRvQ2FjaGUjQHJ1bGU9anM6JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvZWpcXFwiKScsXFxuICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgcGFnZVRpdGxlOiBzcChwZGZoKGxpc3Rbal0sICcudmlkZW8tdGl0bGUmJlRleHQnKSksXFxuICAgICAgICB9XFxuICAgIH0pO1xcbn1cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWKqOeUu1wiLFwicGF0aFwiOlwiSFwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcImhpa2VyOi8vcGFnZS9qaWFuXFxcIikpLnJ1bGUpO1xcbmNvbnN0IHBhZ2UgPSBNWV9QQUdFO1xcclxcbnZhciBob3N0ID0gZ2V0VmFyKCdsaW5rJyk7XFxuZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvbGF6eScsIHt9KSkucnVsZSk7IFxcbnZhciBjb250ZW50cyA9IHBkZmEoZmV0Y2goaG9zdCsnL3ZpZGVvcy8nKSwgJ2JvZHkmJi5tb3ZpZW1lbnUtc3ViOm5vdCg6bWF0Y2hlcyhDT1MpKScpXFxudmFyIGFyciA9IGNvbnRlbnRzLm1hcCh4ID0+IHBkZmgoeCwgJ3NwYW4mJlRleHQnKSk7XFxudmFyIGljb249IGNvbnRlbnRzLm1hcCh4ID0+IHBkKHgsICdpbWcmJnNyYycsaG9zdCkpO1xcbmxldCBjYXJ0b29uID0gZ2V0SXRlbSgnY2FydG9vbicsICdhcnJbMF0nKTtcXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxuLy9sZXQgYXJyID0gW1xcXCJI5Yqo5ryrXFxcIixcXFwi6ams6LWb5YWL56C05Z2PXFxcIixcXFwi5oiQ5Lq65bCP55S15b2xXFxcIixcXFwi5rex5aSc6aOf5aCCXFxcIl07XFxuLy9mb3IgKGxldCBpdCBvZiBhcnIpIHtcXG5hcnIuZm9yRWFjaCgoaXQsaWQpID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGNhcnRvb24gPT0gaXQgPyAn4oCc4oCc4oCd4oCdJyArIGl0LmZvbnRjb2xvcigncmVkJykgOiBpdCxcXG4gICAgICAgICAgICBwaWNfdXJsOiBpY29uW2lkXSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2ljb25fNF9jYXJkJyxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGl0KSA9PiB7XFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcImNhcnRvb25cXFwiLCBpdCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgfSwgaXQpXFxuICAgICAgICB9KVxcbiAgICB9KVxcbn1cXG5cXG5pZiAoY2FydG9vbiA9PSBhcnJbMF0pIHtcXG5NWV9VUkw9aG9zdCtcXFwiL3ZpZGVvcy9jYXJ0b29uP3BhZ2U9XFxcIitwYWdlO1xcbnZhciBodG1sID0gZmV0Y2goTVlfVVJMKTtcXG59ZWxzZSBpZiAoY2FydG9vbiA9PSBhcnJbMV0pIHtcXG5NWV9VUkw9aG9zdCtcXFwiL3NlYXJjaC9tb3ZpZXMvP21haW5fdGFnPTAmc2VhcmNoX3F1ZXJ5PSVFOSVBOSVBQyVFOCVCNSU5QiVFNSU4NSU4QiVFNyVBMCVCNCVFNSU5RCU4RiVFNyU4OSU4OCZwYWdlPVxcXCIrcGFnZTtcXG52YXIgaHRtbCA9IGZldGNoKE1ZX1VSTCk7XFxufWVsc2UgaWYgKGNhcnRvb24gPT0gYXJyWzJdKSB7XFxuTVlfVVJMPWhvc3QrXFxcIi9tb3ZpZXM/cGFnZT1cXFwiK3BhZ2U7XFxudmFyIGh0bWwgPSBmZXRjaChNWV9VUkwpO1xcbn1lbHNlIGlmIChjYXJ0b29uID09IGFyclszXSkge1xcbk1ZX1VSTD1ob3N0K1xcXCIvYmxvZ1ZpZGVvP3BhZ2U9XFxcIitwYWdlO1xcbnZhciBodG1sID0gZmV0Y2goTVlfVVJMKTtcXG59XFxyXFxuIHZhciBsaXN0ID0gcGRmYShodG1sLCAnYm9keSYmLmNvbC1zbS02Jyk7XFxuZm9yICh2YXIgaiBpbiBsaXN0KSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogc3AocGRmaChsaXN0W2pdLCAnLnZpZGVvLXRpdGxlJiZUZXh0JykpLFxcbiAgICAgICAgZGVzYzogc3AocGRmaChsaXN0W2pdLCAnLnZpZGVvLWtleXdvcmRzJiZUZXh0JykrJ1xcXFxuJytwZGZoKGxpc3Rbal0sICcudmlkZW8tYWRkZWR8fC52aWRlby1rZXl3b3JkcywxJiZUZXh0JykrJ1xcXFxuJytwZGZoKGxpc3Rbal0sICcuZHVyYXRpb258fC52aWRlby1rZXl3b3JkcywyJiZUZXh0JykpLFxcbiAgICAgICAgaW1nOiBwZGZoKGxpc3Rbal0sICdpbWcmJmRhdGEtb3JpZ2luYWx8fHNyYycpLFxcbiAgICAgICAgdXJsOiBwZChsaXN0W2pdLCAnYSYmaHJlZicpK2xhenksXFxuY29sX3R5cGU6ICdwaWNfMV9jYXJkJyxcXG4gICAgfSk7XFxufVxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuino+aekFwiLFwicGF0aFwiOlwibGF6eVwiLFwicnVsZVwiOlwidmFyIGxhenkgPSAkKCcnKS5sYXp5UnVsZSgoKSA9PiB7XFxudHJ5e1xcbiAgICB2YXIgdXJsID0gcGQoZmV0Y2goaW5wdXQpLCdzb3VyY2UmJnNyYycpO1xcbmxvZyAodXJsKVxcbiAgICBpZiAoL20zdTh8bXA0Ly50ZXN0KHVybCkpIHtcXG4gICAgICAgIHJldHVybiB1cmxcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGV2YWwocmVxdWVzdCh1cmwpLm1hdGNoKC92YXIgY29uZmlnID0ge1tcXFxcc1xcXFxTXSo/fS8pWzBdKVxcbiAgICAgICAgdmFyIHZpZGVvID0gY29uZmlnLnVybDsgICAgICBcXG4gIHJldHVybiB2aWRlb1xcbiAgICB9XFxuICAgIH1jYXRjaChlKVxcbntcXG4gIHJldHVybiBcXFwidmlkZW86Ly9cXFwiK2lucHV0XFxufVxcbn0pXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLnpoHmvKvor4TorrpcIixcInBhdGhcIjpcImNvbW1lbnRcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW11cXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcImhpa2VyOi8vcGFnZS9qaWFuXFxcIikpLnJ1bGUpO1xcbmNvbnN0IGlkID0gZ2V0UGFyYW0oJ2lkJywgJzI4NzIzNCcpO1xcbmNvbnN0IHBhZ2UgPSBNWV9QQUdFO1xcbnZhciBsaW5rID0gZ2V0VmFyKCdsaW5rJyk7XFxudmFyIHRhZyA9IGdldFBhcmFtKCd0YWcnLCdhbGJ1bScpXFxubGV0IHVybCA9dGFnPT0nYWxidW0nP2xpbmsgKycvYWpheC9hbGJ1bV9wYWdpbmF0aW9uJzpsaW5rKycvYWpheC9ibG9nX3BhZ2luYXRpb24nO1xcbmxldCBib2R5ID0gdGFnPT0nYWxidW0nP3tcXG4gICAgICAgIHZpZGVvX2lkOiBpZCxcXG4gICAgICAgIHBhZ2U6IHBhZ2UsXFxuICAgICAgICB9OntcXG4gICAgICAgIGJsb2dfaWQ6IGlkLFxcbiAgICAgICAgcGFnZTogcGFnZSxcXG4gICAgICAgIH1cXG5odG1sID0gcG9zdCh1cmwsIHtcXG4gICAgaGVhZGVyczoge1xcbiAgICAgICAgXFxcIlgtUmVxdWVzdGVkLVdpdGhcXFwiOiBcXFwiWE1MSHR0cFJlcXVlc3RcXFwiLFxcbiAgICB9LFxcbiAgICBib2R5OiBib2R5XFxuICAgICAgICB9KVxcbi8vbG9nKGh0bWwpXFxudmFyIGxpc3QgPSBwZGZhKGh0bWwsJ2JvZHkmJi5wYW5lbCcpXFxubGlzdC5mb3JFYWNoKChsaXN0KSA9PntcXG4gICAgbGV0IHRpdGxlID0gcGRmaChsaXN0LCcudGltZWxpbmUtdXNlcm5hbWUmJlRleHQnKVxcbiAgICBsZXQgaW1nID0gZ2V0VmFyKCdsaW5rJykrcGRmaChsaXN0LCdpbWcmJnNyYycpXFxuICAgIGxldCBsZXZlbCA9IHBkZmgobGlzdCwnLnRpbWVsaW5lLXVzZXItbGV2ZWwmJlRleHQnKVxcbiAgICBsZXQgdGltZSA9IHBkZmgobGlzdCwnLnRpbWVsaW5lLWRhdGUmJlRleHQnKVxcbiAgICBsZXQgY29udGVudCA9IHNwKHBkZmgobGlzdCwnLnRpbWVsaW5lLWNvbnRlbnQmJlRleHQnKSlcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiB0aXRsZStcXFwiICBcXFwiK2xldmVsLFxcbiAgICAgICAgZGVzYzogdGltZSxcXG4gICAgICAgIGltZzogaW1nLFxcbiAgICAgICAgdXJsOiBpbWcsXFxuICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCJcXG4gICAgfSlcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBjb250ZW50LFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJyaWNoX3RleHRcXFwiXFxuICAgIH0pXFxuICAgIH0pXFxuc2V0UmVzdWx0KGQpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLpppbpobVcIixcInBhdGhcIjpcIummlumhtVwiLFwicnVsZVwiOlwidmFyIGh0bWw9ZmV0Y2gobGluayk7XFxudmFyIEljb24gPSBsaW5rK1xcXCIvdGVtcGxhdGVzL2Zyb250ZW5kL2FpcmF2L2ltZy9cXFwiO1xcbnZhciBMYWJfaWNvbiA9IFsncGhpY29uL3dlZWsucG5nJywnYXBwX2xpbmszLnBuZz92PTMnLCdwaGljb24va29yZWEucG5nJywncGhpY29uL0RvdWppbi5wbmcnLCdwaGljb24vb25seW9uZS5wbmcnLCAncGhpY29uL25ldy5wbmcnXTtcXG5pZiAoTVlfUEFHRSA9PSAxKXtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHVybDpcXFwiaWYocGFyc2VJbnQoaW5wdXQpID09IGlucHV0ICYmIGlucHV0Lmxlbmd0aCA9PT0gNil7J2hpa2VyOi8vcGFnZS9laj91cmw9JytnZXRWYXIoJ2xpbmsnKSsnL2FsYnVtLycraW5wdXQrJyNpbW1lcnNpdmVUaGVtZSMjYXV0b0NhY2hlIyd9ZWxzZSAnaGlrZXI6Ly9wYWdlL3NlYXJjaD9wYWdlPWZ5cGFnZSNmdWxsVGhlbWUjI25vSGlzdG9yeSMnO1xcXCIsXFxuICAgICAgICBkZXNjOiAn6K+36L6T5YWl56aB5ryraWR85YWz6ZSu6K+NJyxcXG4gICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBvbkNoYW5nZTogXFxcInB1dFZhcignVGl0bGUnLGlucHV0KTtwdXRWYXIoJ1VybCcsZ2V0VmFyKCdsaW5rJykrJy9zZWFyY2gvcGhvdG9zP3NlYXJjaF9xdWVyeT0nK2lucHV0KycmbWFpbl90YWc9MCZvPW12JnQ9YSZwYWdlPScpO1xcXCIgICAgICAgICAgICBcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KSAgICBcXG52YXIgTGFiMSA9IHBkZmEoaHRtbCwnYm9keSYmLnJvdyw4OjE2Jyk7XFxudmFyIExhYjIgPSBwZGZhKGh0bWwsJ2JvZHkmJi5yb3csMjM6MjUnKTtcXG52YXIgTGFiMyA9IHBkZmEoaHRtbCwnYm9keSYmLnJvdywyNjoyOCcpO1xcbnZhciBMYWJzID0gTGFiMS5jb25jYXQoTGFiMikuY29uY2F0KExhYjMpXFxyXFxuICAgICAgICBMYWJzLmZvckVhY2goKGRhdGEpID0+IHtcXG4gICAgICAgICB2YXIgbGlzdCA9IHBkZmEoZGF0YSwgJ2JvZHkmJi5yb3c6aGFzKC5wdWxsLWxlZnQpJyk7XFxuICAgICAgICAgbGlzdC5mb3JFYWNoKChkYXRhKSA9PiB7XFxudmFyIHRpdGxlPXNwKHBkZmgoZGF0YSwgJ2g0JiZUZXh0JykpO1xcbmlmKC/ov57ovb0vLnRlc3QodGl0bGUpKXtcXG5pZD0wXFxufWVsc2UgaWYoL+emgea8qy8udGVzdCh0aXRsZSkpe1xcbmlkID0xXFxufWVsc2UgaWYoL+mfqea8qy8udGVzdCh0aXRsZSkpe1xcbmlkID0yXFxufWVsc2UgaWYoL+acrOacrC8udGVzdCh0aXRsZSkpe1xcbmlkID0zXFxufWVsc2UgaWYoL+WNlS8udGVzdCh0aXRsZSkpe1xcbmlkID00XFxufWVsc2UgaWYoL+acgOaWsC8udGVzdCh0aXRsZSkpe1xcbmlkID01XFxufVxcbiAgICAgICAgICAgZC5wdXNoKHtcXHJcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBcXFwi5pu05aSa4oG6XFxcIixcXG4gICAgICAgICAgICAgICAgcGljX3VybDogSWNvbitMYWJfaWNvbltpZF0sXFxuICAgICAgICAgICAgICAgIHVybDogbGluaytwZGZoKGRhdGEsJ2EmJmhyZWYnKSsgJyZwYWdlPWZ5cGFnZUBydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3JlY29tbWVuZFxcXCIpJyxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiLFxcclxcbiAgICAgICAgICAgIH0pO1xcbn0pICAgICAgICAgICAgXFxyXFxuICAgICAgICAgICAgdmFyIGl0ZW0gPSBwZGZhKGRhdGEsICcucm93JiYucC1iLTE1LDA6OScpO1xcclxcbiAgICAgICAgICAgIGl0ZW0uZm9yRWFjaCgoZGF0YXMpID0+IHtcXHJcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBzcChwZGZoKGRhdGFzLCAnaW1nJiZhbHQnKSksXFxuICAgICAgICBkZXNjOiBzcChwZGZoKGRhdGFzLCAnc3BhbiYmVGV4dCcpKydcXFxcdFxcXFx0JytwZGZoKGRhdGFzLCAnLmxhYmVsLWNhdGVnb3J5JiZUZXh0JykpLFxcbiAgICAgICAgaW1nOiBwZGZoKGRhdGFzLCAnaW1nJiZkYXRhLXNyY3x8ZGF0YS1vcmlnaW5hbCcpLFxcbiAgICAgICAgdXJsOiBsaW5rK3BkZmgoZGF0YXMsICdhJiZocmVmJykrJyNpbW1lcnNpdmVUaGVtZSMjYXV0b0NhY2hlI0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2VqXFxcIiknLFxcbiAgICAgICBjb2xfdHlwZTogXFxcIm1vdmllXzNcXFwiLFxcbiAgICB9KTtcXG59KVxcbn0pXFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5Li76aG15pS26JePXCIsXCJwYXRoXCI6XCJmYXZvcml0ZVwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG52YXIgbGluayA9IGdldFZhcignbGluaycpO1xcbnZhciBoZWFkZXJzID0ge1xcbiAgICAgICAgXFxcIkNvb2tpZVxcXCI6IGZldGNoUEMoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvSk1fY29va2llLnR4dCcpIHx8ICcnLCBcXG4gICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjpcXFwiTW96aWxsYS81LjAgKExpbnV4OyBBbmRyb2lkIDEyOyBTTS1HOTc1MCBCdWlsZC9TUDFBLjIxMDgxMi4wMTY7IHd2KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzQuMCBDaHJvbWUvODkuMC40Mzg5LjcyIE1RUUJyb3dzZXIvNi4yIFRCUy8wNDYyNzkgTW9iaWxlIFNhZmFyaS81MzcuMzZcXFwiXFxuICAgIH07XFxudmFyIGljb24gPSBwZChyZXF1ZXN0KE1ZX1VSTCx7aGVhZGVyczpoZWFkZXJzfSksXFxcIi5wYW5lbC1ib2R5JiZpbWcmJnNyY1xcXCIsbGluaylcXG52YXIgZmF2cyA9IHBkZmEocmVxdWVzdChNWV9VUkwse2hlYWRlcnM6aGVhZGVyc30pLFxcXCJib2R5JiYucGFuZWwtaGVhZGluZzpoYXMoLnB1bGwtbGVmdCkmJi5wdWxsLWxlZnRcXFwiKS5tYXAoeCA9PiBwZGZoKHgsICdUZXh0JykpO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBmYXZzWzBdLFxcbiAgICBkZXNjOiBmYXZzWzFdLFxcbiAgICBwaWNfdXJsOiBpY29uLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiXFxufSlcXG5sZXQgbmF2ID0gW1xcXCLmlLbol4/ml7bpl7RcXFwiLFxcXCLmm7TmlrDml7bpl7RcXFwiXTtcXG5sZXQgbGlua3MgPSBbJz9vPW1yJywnP289bXAnXTtcXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYXYubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIGxldCBteXRpdGxlID0gbmF2W2ldO1xcbiAgICAgICAgbGV0IHNqID0gbGlua3NbaV1cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKCdzY3RpdGxlJywgXFxcIuaUtuiXj+aXtumXtFxcXCIpID09IG15dGl0bGUgPyAn4oCc4oCc4oCd4oCdJytteXRpdGxlLmZvbnRjb2xvcigncmVkJykuc21hbGwoKTogJ+KAnOKAnOKAneKAnScrbXl0aXRsZS5zbWFsbCgpLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKChteXRpdGxlLHNqKSA9PiB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJzY3RpdGxlXFxcIiwgbXl0aXRsZSk7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJmYXZcXFwiLE1ZX1VSTCtzaik7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICB9LCBteXRpdGxlLHNqKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImZsZXhfYnV0dG9uXFxcIlxcbiAgICAgICAgfSk7XFxuICAgIH1cXG5sZXQgZmF2ID0gZ2V0TXlWYXIoXFxcImZhdlxcXCIsTVlfVVJMKyc/bz1tcicpXFxuLy9sb2coZmF2KVxcbnZhciBodG1sID0gcmVxdWVzdChmYXYse1xcbiAgICBoZWFkZXJzOmhlYWRlcnNcXG59KSBcXG52YXIgZmF2b3JpdGUgPSBwZGZhKGh0bWwsXFxcImJvZHkmJi5wYW5lbC1ib2R5OmhhcyhhW2hyZWZ+PWFsYnVtXSkmJi50aHVtYi1vdmVybGF5OmhhcyhhW2hyZWZ+PWFsYnVtXSlcXFwiKVxcbmZhdm9yaXRlLmZvckVhY2goeCA9PiB7XFxuICAgIHZhciB0aXRsZSA9IHBkZmgoeCxcXFwiLnZpZGVvLXRpdGxlJiZUZXh0XFxcIilcXG4gICAgdmFyIGltZyA9IHBkKHgsXFxcImltZyYmc3JjXFxcIixsaW5rKVxcbiAgICB2YXIgdXJsID0gcGQoeCxcXFwiYSYmaHJlZlxcXCIsbGluaykrJyNpbW1lcnNpdmVUaGVtZSMjYXV0b0NhY2hlI0BydWxlPWpzOiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2VqXFxcIiknO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgcGljX3VybDogaW1nLFxcbiAgICAgICAgdXJsOiB1cmwsXFxuICAgICAgICBjb2xfdHlwZTogXFxcIm1vdmllXzNcXFwiLFxcbiAgICAgICAgZXh0cmE6e1xcbiAgICBwYWdlVGl0bGU6IHRpdGxlXFxuICAgIH1cXG4gICAgfSlcXG4gICAgXFxufSlcXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuaWh+eroFwiLFwicGF0aFwiOlwiYXJ0aWNsZVwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcImhpa2VyOi8vcGFnZS9qaWFuXFxcIikpLnJ1bGUpO1xcbnZhciBsaW5rID0gZ2V0VmFyKCdsaW5rJylcXG52YXIgaGVhZGVycyA9IHtcXG4gICAgICAgIFxcXCJDb29raWVcXFwiOiBmZXRjaFBDKCdoaWtlcjovL2ZpbGVzL2NhY2hlL0pNX2Nvb2tpZS50eHQnKSB8fCAnJywgXFxuICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6XFxcIk1vemlsbGEvNS4wIChMaW51eDsgQW5kcm9pZCAxMjsgU00tRzk3NTAgQnVpbGQvU1AxQS4yMTA4MTIuMDE2OyB3dikgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgQ2hyb21lLzg5LjAuNDM4OS43MiBNUVFCcm93c2VyLzYuMiBUQlMvMDQ2Mjc5IE1vYmlsZSBTYWZhcmkvNTM3LjM2XFxcIixcXG4gICAgICAgIFxcXCJSZWZlcmVyXFxcIjogTVlfVVJMXFxuICAgIH07XFxuICAgIC8vbG9nKE1ZX1VSTClcXG52YXIgaHRtbCA9IGZldGNoKE1ZX1VSTCx7aGVhZGVyczpoZWFkZXJzfSlcXG50cnl7XFxudmFyIGJsb2dfaWQgPSBwZGZoKGh0bWwsXFxcIiNibG9nX2lkJiZ2YWx1ZVxcXCIpXFxudmFyIGNvbW1lbnQgPSBwZGZoKGh0bWwsXFxcIiNjb21tZW50c19hJiZUZXh0XFxcIilcXG52YXIgdGl0bGUgPSBwZGZoKGh0bWwsJy5wYW5lbC1oZWFkaW5nJiZhJiZUZXh0JykuZm9udGNvbG9yKCcjMTc4MWI1Jykuc21hbGwoKStcXFwiIFxcXCIrJzxzdHJvbmc+JytwZGZoKGh0bWwsJy5wYW5lbC1oZWFkaW5nJiZoNCYmVGV4dCcpKyc8c3Ryb25nPidcXG52YXIgYXV0aG9yX3VybCA9IHBkKGh0bWwsJy5wYW5lbC1oZWFkaW5nJiYuYmxvZ19pZF9tYWluJiZhJiZocmVmJylcXG52YXIgdGFncyA9IHBkZmEoaHRtbCwnLnBhbmVsLWhlYWRpbmcmJi5tLXQtNSYmYScpXFxudmFyIGF1dGhvcmljb24gPSBwZChodG1sLCcucGFuZWwtaGVhZGluZyYmaW1nJiZzcmMnKVxcbnZhciBhdXRob3IgPSAgcGRmaChodG1sLCcucGFuZWwtaGVhZGluZyYmLmJsb2dfbmFtZV9pZCYmVGV4dCcpXFxudmFyIGRhdGUgPSAgcGRmaChodG1sLCcucGFuZWwtaGVhZGluZyYmLmRhdGUmJlRleHQnKVxcbmNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChgKGh0dHBzPzpcXFxcXFxcXC9cXFxcXFxcXC8oLio/JHsnMThjb21pYyd9Lio/KSkoXFxcXFxcXFwvW15cXFxcXFxcXHNcXFwiXSopYCwgJ2cnKTtcXG5jb25zdCBycCA9IGxpbmsuc3BsaXQoJy8vJylbMV1cXG52YXIgbWFpbiA9IHBkZmgoaHRtbCwgJy5wYW5lbC1ib2R5JiYucC10LTEwJiZIdG1sJykucmVwbGFjZShyZWdleCwgKG1hdGNoLCBwMSwgcDIsIHAzKSA9PiBgaGlrZXI6Ly9wYWdlL2VqP3VybD0ke3AxLnJlcGxhY2UocDIscnApfSR7cDN9I2ltbWVyc2l2ZVRoZW1lIyNhdXRvQ2FjaGUjYCkucmVwbGFjZSgvc3JjPVxcXCIoW15cXFwiXSopXFxcIi9nLCBgc3JjPVxcXCJgICsgbGluayArIGAkMVxcXCJgKS5yZXBsYWNlKC88YnJcXFxccypcXFxcLz8+L2dpLCAnJykucmVwbGFjZSgvcGhvdG8vZywnYWxidW0nKTtcXG4gZC5wdXNoKHtcXG4gICAgICBwaWNfdXJsOiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL2ltZy90b3AucG5nJyxcXG4gICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICBjb2xfdHlwZTogJ3BpY18xX2Z1bGwnLFxcbiAgICB9LHtcXG4gICAgdGl0bGUgOiB0aXRsZSxcXG4gICAgY29sX3R5cGU6IFxcXCJyaWNoX3RleHRcXFwiLFxcbmV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIHRleHRTaXplOiAyMCxcXG4gICAgICAgICAgICB9XFxufSlcXG50YWdzLm1hcCh4ID0+IHtcXG5sZXQgdGFnPXBkZmgoeCwnYSYmVGV4dCcpO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdJyt0YWcuc21hbGwoKSxcXG4gICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3NlYXJjaD90aXRsZT1cXFwiK3RhZytcXFwiJnBhZ2U9ZnlwYWdlI2Z1bGxUaGVtZSMjbm9IaXN0b3J5I1xcXCIsXFxuICAgY29sX3R5cGU6XFxcImZsZXhfYnV0dG9uXFxcIixcXG4gICB9KVxcbn0pXFxuZC5wdXNoKHtcXG50aXRsZTogJ+KAnOKAnOKAneKAnScrY29tbWVudC5zbWFsbCgpLFxcbnVybDogXFxcImhpa2VyOi8vcGFnZS9jb21tZW50P2lkPVxcXCIrYmxvZ19pZCtcXFwiJnBhZ2U9ZnlwYWdlJnRhZz1ibG9nI25vUmVjb3JkSGlzdG9yeSMjbm9IaXN0b3J5I1xcXCIsXFxuY29sX3R5cGU6IFxcXCJmbGV4X2J1dHRvblxcXCIsXFxuXFxufSx7XFxuICAgIHRpdGxlOiBhdXRob3IsXFxuICAgIGRlc2M6IGRhdGUsXFxuICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9ibG9nP3VybD1cXFwiK2F1dGhvcl91cmwrXFxcIj9wYWdlPWZ5cGFnZSNub1JlY29yZEhpc3RvcnkjI25vSGlzdG9yeSNcXFwiLFxcbiAgICBwaWNfdXJsOiBhdXRob3JpY29uLFxcbiAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCJcXG59LHtcXG4gICAgdGl0bGU6IHNwKG1haW4pLFxcbiAgICBjb2xfdHlwZTogXFxcInJpY2hfdGV4dFxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIHRleHRTaXplOiAxNCxcXG4gICAgICAgICAgICB9XFxufSlcXG59Y2F0Y2goZSl7fVxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5Lmm5bqTXCIsXCJwYXRoXCI6XCJMaWJyYXJ5XCIsXCJydWxlXCI6XCJqczpcXG52YXIgZD1bXVxcbnZhciBsaW5rID0gZ2V0VmFyKCdsaW5rJylcXG52YXIgaGVhZGVycyA9IHtcXG4gICAgICAgIFxcXCJDb29raWVcXFwiOiBmZXRjaFBDKCdoaWtlcjovL2ZpbGVzL2NhY2hlL0pNX2Nvb2tpZS50eHQnKSB8fCAnJywgXFxuICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6XFxcIk1vemlsbGEvNS4wIChMaW51eDsgQW5kcm9pZCAxMjsgU00tRzk3NTAgQnVpbGQvU1AxQS4yMTA4MTIuMDE2OyB3dikgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgQ2hyb21lLzg5LjAuNDM4OS43MiBNUVFCcm93c2VyLzYuMiBUQlMvMDQ2Mjc5IE1vYmlsZSBTYWZhcmkvNTM3LjM2XFxcIlxcbiAgICB9O1xcbnZhciBNWV9VUkwgPSBsaW5rICsnL2Jsb2dzJztcXG5jb25zdCBwYWdlID0gTVlfUEFHRTtcXG5jb25zdCDkuIvkuIDpobUgPSBcXFwicGQoaHRtbCwgJ2E6bWF0Y2hlcyjCuykmJmhyZWYnKVxcXCI7XFxuZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL3BhZ2UveWpcXFwiLCB7fSkpLnJ1bGUpO1xcbnZhciDlrprkvY3kv6Hmga8gPSBbe1xcbiAgICDlpKfnsbvlrprkvY06ICdib2R5JiYubmF2LXBpbGxzJyxcXG4gICAg5bCP57G7OiAnYm9keSYmYScsXFxufV07XFxubGV0IHRydWVfdXJsID0gZ2V0VHJ1ZWxpbmsoTVlfUlVMRS51cmwsIE1ZX1VSTCwgcGFnZSk7XFxuLy9sb2codHJ1ZV91cmwpXFxuTVlfVVJMID0gdHJ1ZV91cmw7XFxudmFyIGh0bWwgPSBmZXRjaChNWV9VUkwse2hlYWRlcnM6aGVhZGVyc30pO1xcbmNvbnN0IGRjID0gZHluYW1pY0NsYXNzKHtcXG4gICAg5YiG57G76aKc6ImyOiBnZXRSYW5nZUNvbG9ycygpXFxufSk7XFxuZGMu5byA5ZCv5oqY5Y+gKGZhbHNlKVxcbmRjLuW8gOWQr+aQnOe0oihmYWxzZSku5Yib5bu65Yqo5oCB5YiG57G7KOWumuS9jeS/oeaBrylcXG5cXG52YXIgbGlzdCA9IHBkZmEoaHRtbCxcXFwiI3dyYXBwZXImJi5jb250YWluZXImJi5vd2wtY2Fyb3VzZWwmJi5nYW1lLW1haW5cXFwiKVxcbmxpc3QuZm9yRWFjaCh4ID0+IHtcXG4gICAgdmFyIHRpdGxlID0gcGRmaCh4LFxcXCJpbWcmJmFsdFxcXCIpXFxuICAgIHZhciBpbWcgPSBwZGZoKHgsXFxcImltZyYmZGF0YS1zcmNcXFwiKVxcbiAgICB2YXIgdXJsID0gXFxcImhpa2VyOi8vcGFnZS9hcnRpY2xlP3VybD1cXFwiK3BkKHgsXFxcImEsMSYmaHJlZlxcXCIpK1xcXCIjbm9SZWNvcmRIaXN0b3J5IyNub0hpc3RvcnkjI2ltbWVyc2l2ZVRoZW1lI1xcXCJcXG4gICAgdmFyIGRlc2MgPSBwZGZoKHgsXFxcImEmJlRleHRcXFwiKVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6dGl0bGUsXFxuICAgICAgICBkZXNjOmRlc2MsXFxuICAgICAgICBwaWNfdXJsOmltZyxcXG4gICAgICAgIHVybDp1cmwsXFxuICAgICAgICBjb2xfdHlwZTogXFxcIm1vdmllXzNcXFwiXFxuICAgICAgICBcXG4gICAgfSlcXG4gICAgXFxufSlcXG5hdXRvUGFnZSgpO1xcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi566A57mB6L2s5o2iXCIsXCJwYXRoXCI6XCJqaWFuXCIsXCJydWxlXCI6XCJmdW5jdGlvbiBjaGFyUFlTdHIoKXtcXG5cXHRyZXR1cm4gJ+mUleeakeiUvOeijeeIseWXs+WrkueRt+aap+mcreiwmemTtem5jOiCruiihOWlpeWqqumqnOmzjOWdnee9oumSr+aRhui0peWRl+migeWKnue7iumSo+W4rue7kemVkeiwpOWJpemlseWuneaKpemyjem4qOm+hei+iOi0nemSoeeLiOWkh+aDq+m5jui0sumUm+e7t+eslOavleavmeW4gemXreiNnOWTlOa7l+mTi+etmui3uOi+uee8lui0rOWPmOi+qei+q+iLhOe8j+esvuagh+mqoOmjkemjmemVlumVs+mzlOmzluWIq+eYqua/kua7qOWuvuaRiOWCp+e8pOann+auoeiGkemVlOmrjOmsk+mlvOemgOaLqOmStemTgumps+mlvemSuem5geihpemSuOi0ouWPguialeaui+aDreaDqOeBv+mqlum7quiLjeiIseS7k+ayp+WOleS+p+WGjOa1i+aBu+Wxguivp+mUuOS+qumSl+aQgOaOuuidiemmi+iwl+e8oOmTsuS6p+mYkOmipOWGgeiwhOiwtuiSh+W/j+Wptemqo+inh+emhemVoeWcuuWwnemVv+WBv+iCoOWOgueVheS8peiLjOaAhemYiumys+mSnui9puW9u+egl+WwmOmZiOihrOS8p+iwjOamh+einOm+gOaSkeensOaDqeivmumqi+aeqOafvemTlumTm+eXtOi/n+mpsOiAu+m9v+eCvemlrOm4seWGsuWGsuiZq+WuoOmTs+eVtOi4jOetuee7uOS/puW4semboOapseWOqOmUhOmbj+ehgOWCqOinpuWkhOWIjee7jOi5sOS8oOmSj+eWrumXr+WIm+aAhumUpOe8jee6r+m5kee7sOi+jem+iui+nuivjei1kOm5muiBquiRseWbseS7juS4m+iLgemqouaenuWHkei+j+i5v+eqnOaSuumUmemUiem5vui+vuWTkumekeW4pui0t+mqgOe7kOaLheWNlemDuOaOuOiDhuaDruivnuW8ueaumui1leeYheeuquW9k+aMoeWFmuiNoeaho+iwoOeggOijhuaNo+Wym+elt+WvvOebl+eEmOeBr+mCk+mVq+aVjOa2pOmAkue8lOextOivi+iwm+e7qOinjOmVnemioOeCueWeq+eUteW3hemSv+eZq+mSk+iwg+mTq+myt+iwjeWPoOmyvemSiemhtumUreiuoumTpOS4oumTpeS4nOWKqOagi+WGu+Wyvem4q+eqpueKiueLrOivu+i1jOmVgOa4juakn+eJjeesg+m7qemUu+aWree8juewluWFkemYn+WvueaAvOmVpuWQqOmhv+mSneeClui2uOWkuuWglemTjum5hemineiuueaBtumlv+iwlOWeqemYj+i9remUh+mUt+m5l+mimumim+mzhOivtuWEv+WwlOmltei0sOi/qemTkum4uOmyleWPkee9mumYgOePkOefvumSkueDpui0qemlreiuv+e6uumSq+mygumjnuivveW6n+i0uee7r+mVhOmysee6t+Wdn+Wli+aEpOeyquWBvuS4sOaeq+mUi+mjjueWr+WGr+e8neiuveWHpOayo+iCpOi+kOaKmui+hei1i+Wkjei0n+iuo+Wmh+e8muWHq+mpuOe7gue7i+i1mem6uOmyi+mzhumShuivpemSmeeblui1headhui1tuenhui1o+WwtOaTgOe7gOWGiOWImumSoue6suWyl+aIhumVkOedvuivsOe8n+mUhuaQgem4vemYgemTrOS4que6pemViemijee7meS6mOi1k+e7oOmyoOm+muWuq+W3qei0oemSqeayn+iLn+aehOi0reWkn+ivn+e8keinj+ibiumhvuivguavgumStOmUoum4qum5hOm5mOWJkOaMgum4ueaOtOWFs+ingummhuaDr+i0r+ivluaOvOm5s+mzj+W5v+eKt+inhOW9kum+n+mXuui9qOivoei0teWIveWMpuWIv+Wmq+ahp+mykemznOi+iua7muihrue7sumyp+mUheWbvei/h+WfmuWRmeW4vOakgeidiOmTqumqh+mfqeaxiemYmue7l+miieWPt+eBj+mioumYgum5pOi0uuivg+mYluibjuaoqui9sOm4v+e6oum7ieiup+iNremXs+myjuWjtuaKpOayquaIt+a1kum5leWTl+WNjueUu+WIkuivnemqheahpumTp+aAgOWdj+asoueOr+i/mOe8k+aNouWUpOeXqueElea2o+Wlgue8s+mUvumyqem7hOiwjumzh+aMpei+ieavgei0v+enveS8mueDqeaxh+ius+ivsue7mOivmeiNn+WTlea1jee8i+ePsuaZluiNpOa1keivqOmmhOmYjeiOt+i0p+eluOmSrOmVrOWHu+acuuenr+mlpei/ueiupem4oee7qee8ieaegei+kee6p+aMpOWHoOiTn+WJgua1juiuoeiusOmZhee7p+e6quiupuivmOiNoOWPveWTnOmqpeeOkeinium9keeftue+geiZv+i3u+mcgemymumyq+WkueiNmumiiui0vumSvuS7t+mpvumDj+a1g+mTl+mVk+ibsuatvOebkeWdmuesuumXtOiJsOe8hOiMp+ajgOeiseeht+aLo+aNoeeugOS/reWHj+iNkOanm+mJtOi3tei0seingemUruiIsOWJkemlr+a4kOa6hea2p+iwj+e8o+aIi+aIrOedkem5o+eslemyo+mer+Wwhua1huiSi+ahqOWlluiusumFsee7m+e8sOiDtua1h+mqhOWoh+aQhemTsOefq+S+peiEmumluue8tOe7nui9v+i+g+aMouWzpOm5qumym+mYtuiKgua0gee7k+ivq+WxiueWlumijOmykue0p+mUpuS7heiwqOi/m+aZi+eDrOWwveWKsuiNhuiMjuWNuuiNqemmkee8mei1huinkOmyuOaDiue7j+miiOmdmemVnOW+hOeXieernuWHgOWIreazvui/s+W8quiDq+mdk+e6oOWOqeaXp+mYhOm4oOm5q+mpueS4vuaNrumUr+aDp+WJp+iuteWxpuamiemjk+mSnOmUlOeqrem+g+m5g+e7oumUqemVjOmaveinieWGs+e7neiwsuePj+mSp+WGm+mqj+easuW8gOWHr+WJgOWesuW/vuaBuumToOmUtOm+m+mXtumSqumTkOmil+Wjs+ivvumqkue8gui9sumStumUnumilOWepuaBs+m+iOmTv+aKoOW6k+ijpOWWvuWdl+S+qemDkOWTmeiEjeWuveeLr+mri+efv+aXt+WGteivk+ivs+mCneWcuee6qei0tuS6j+Wyv+eqpemmiOa6g+WMruiSieaEpuiBqeevkemYg+mUn+mysuaJqemYlOibtOicoeiFiuiOseadpei1luW0g+W+lea2nua/kei1ieedkOmTvOeZnuexgeiTneagj+aLpuevrumYkeWFsOa+nOiwsOaPveiniOaHkue8hueDgua7peWymuamhOaWk+mVp+iktOeQhemYhumUkuaNnuWKs+a2neWUoOW0gumTkemTueeXqOS5kOmzk+mVreWekuexu+azquivlOe8p+evseeLuOemu+mypOekvOS4veWOieWKseegvuWOhuaypematuS/qumDpuWdnOiLiOiOheiToOWRlumApumqiue8oeaepeagjui9ueeguumUgum5gueWoOeynei3numbs+myoemzouS/qeiBlOiOsui/numVsOaAnOa2n+W4mOaVm+iEuOmTvuaBi+eCvOe7g+iUueWlgea9i+eQj+auk+ijouijo+myoueyruWHieS4pOi+huiwhemtieeWl+i+vemVo+e8remSjOm5qeeMjuS4tOmCu+mznuWHm+i1geiUuuW7quaqqei+mui6j+m+hOmTg+eBteWyremihue7q+ajguibj+myrummj+WImOa1j+mqnee7uumVj+m5qOm+meiBi+WSmeesvOWehOaLoumZh+iMj+azt+ePkeagiuiDp+egu+alvOWohOaQguevk+WBu+iSjOWWveW1nemVgueYmOiAp+idvOmrheiKpuWNoumiheW6kOeCieaOs+WNpOiZj+mygei1guemhOW9lemZhuWehuaSuOWZnOmXvuazuOa4jOagjOapuei9s+i+gui+mOawh+iDqum4rOm5reiIu+myiOWzpuaMm+Wtqua7puS5seiElOWoiOagvum4vumKruaKoei9ruS8puS7keaypue6tuiuuuWbteiQnee9l+mAu+mUo+euqemqoemqhue7nOiNpueMoeazuuakpOiEtumVmemptOWQlemTneS+o+Wxoee8leiZkea7pOe7v+amiOikm+mUiuWRkuWmiOeOm+eggeiagumprOmqguWQl+WUm+Wst+adqeS5sOm6puWNlui/iOiEieWKoueekummkuibrua7oeiwqee8pumVmOmioemzl+eMq+mUmumThui0uOm6veayoemVgemXqOmXt+S7rOaJqueEluaHkemSlOmUsOaipuecr+iwnOW8peinheW5guiKiOiwp+eMleeloue7tee8hea4keiFvOm7vuW6mee8iOe8queBreaCr+mXvemXtee8l+m4o+mTreiwrOiwn+iTpummjeaugemVhuiwi+S6qemSvOWRkOmSoOe6s+mavuaMoOiEkeaBvOmXuemTmeiut+mmgeWGheaLn+iFu+mTjOmyteaStei+h+mytumFv+m4n+iMkeiiheiBguWVrumViumVjemZp+iYluWXq+min+i5keafoOeLnuWugeaLp+aznuiLjuWSm+iBjemSrue6veiEk+a1k+WGnOS+rOWTnempvemSleivuuWCqeeWn+asp+m4peautOWRleaypOiutOaAhOeTr+ebmOi5kuW6nuaKm+eWsei1lOi+lOWWt+m5j+e6sOe9tOmTjemql+iwnemqiOmjmOe8pemikei0q+WrlOiLueWHreivhOazvOmih+mSi+aJkemTuuactOiwsemVpOmVqOagluiEkOm9kOmqkeWyguWQr+awlOW8g+iuq+iVsumqkOe7ruahpOeim+migOmig+mzjeeJtemSjumThei/geetvuiwpumSsemSs+a9nOa1heiwtOWgkeS9peiNqOaCremqnue8seakoOmSpOaequWRm+WimeiUt+W8uuaKouWrseaor+aIl+eCnemUlumUtemVque+n+i3hOmUueahpeS5lOS+qOe/mOeqjeivruiwr+iNnue8suehl+i3t+eqg+aDrOmUsueup+mSpuS6suWvnemUk+i9u+awouWAvumht+ivt+W6huaPv+myreeQvOept+iMleibseW3r+i1h+iZrumzhei2i+WMuui6r+mpsem+i+ivjuWylumYkuinkem4sumip+adg+WKneivoOe7u+i+gemTqOWNtOm5iuehrumYlemYmeaCq+iuqemltuaJsOe7leiNm+WohuahoeeDremfp+iupOe6q+mlqui9q+iNo+e7kuW1mOidvue8m+mTt+mipui9r+mUkOiarOmXsOa2pua0kuiQqOmjkumzg+i1m+S8nuavteezgeS4p+mqmuaJq+e8q+a2qeWVrOmTr+epkeadgOWIuee6semTqemyqOetm+aZkumFvuWIoOmXqumZlei1oee8ruiuquWnl+mqn+mSkOmzneWikuS8pOi1j+Wep+auh+innueDp+e7jei1iuaRhOaFkeiuvuWOjea7oOeVsue7heWuoeWptuiCvua4l+ivnOiwgua4luWjsOe7s+iDnOW4iOeLrua5v+ivl+aXtuiagOWunuivhumptuWKv+mAgumHiumlsOinhuivleiwpeWfmOiOs+W8kei9vOi0s+mTiOmypeWvv+WFvee7tuaeoui+k+S5pui1juWxnuacr+agkeerluaVsOaRhee6vuW4hemXqeWPjOiwgeeojumhuuivtOehleeDgemThOS4nemlsuWOrumpt+e8jOmUtum4tuiAuOaAgumiguiuvOivteaTnuiWrummiumjlemUvOiLj+ivieiCg+iwoeeoo+iZvemaj+e7peWygeiwh+WtmeaNn+esi+iNqueLsue8qeeQkOmUgeWUouedg+eNreaMnumXvOmTiumzjuWPsOaAgemSm+mykOaRiui0queYq+a7qeWdm+iwreiwiOWPueaYmemSvemUrOmhuOaxpOeDq+WCpemlp+mTtOmVl+a2m+e7puiuqOmfrOmTveiFvuiqiumUkemimOS9k+Wxiee8h+m5iOmYl+adoeeynOm+humypui0tOmTgeWOheWQrOeDg+mTnOe7n+aBuOWktOmSreeng+WbvumSjeWbouaKn+mik+iclemlqOiEsem4temprumpvOakreeuqOm8jeiinOWosuiFveW8r+a5vumhveS4h+e6qOe7vue9kei+i+mfpui/neWbtOS4uua9jee7tOiLh+S8n+S8que6rOiwk+WNq+ivv+W4j+mXseayqea2oOeOrumfqueCnOmylOa4qemXu+e6ueeos+mXrumYjOeTruaMneicl+a2oeeqneWNp+iOtOm+jOWRnOmSqOS5jOivrOaXoOiKnOWQtOWdnumbvuWKoeivr+mCrOW6keaAg+Wmqemqm+m5iem5nOmUoeeJuuiireS5oOmTo+aIj+e7humlqemYi+eOuuini+iZvui+luWzoeS+oOeLreWOpuWQk+ehlumynOe6pOi0pOihlOmXsuaYvumZqeeOsOeMruWOv+mmhee+oeWuque6v+iLi+iOtuiXk+WymOeMg+WotOm5h+eXq+ianeexvOi3ueWOoumVtuS5oeivpuWTjemhueiKl+mlt+mqp+e8g+mjqOiQp+Wao+mUgOaZk+WVuOWTk+a9h+mqgee7oeaereeuq+WNj+aMn+aQuuiDgeiwkOWGmeazu+iwouS6teaSt+e7gee8rOmUjOihheWFtOmZieiNpeWHtuaxuemUiOe7o+mmkOm4uuiZmuWYmOmhu+iuuOWPmee7que7reivqemhvOi9qeaCrOmAieeZo+e7muiwlumTiemVn+WtpuiwkeaztumzleWLi+ivouWvu+mpr+iureiur+mAiuWfmea1lOmyn+WOi+m4pum4reWTkeS6muiutuWereWoheahoOawqemYieeDn+ebkOS4peWyqeminOmYjuiJs+WOjOegmuW9puiwmumqjOWOo+i1neS/qOWFluiws+aBuemXq+mFvemth+mkjem8uem4r+adqOaJrOeWoemYs+eXkuWFu+agt+eCgOeRtuaRh+Wwp+mBpeeqkeiwo+iNr+i9uum5numzkOeIt+mhteS4muWPtumdpeiwkumCuuaZlOeDqOWMu+mTsemikOmBl+S7quiageiJuuS6v+W/huS5ieivo+iuruiwiuivkeW8gue7juivkuWRk+WzhOmltOaAv+mpv+e8oui9tui0u+mSh+mVkumVseeYl+iIo+iNq+mYtOmTtumlrumakOmTn+eYvuaoseWptOm5sOW6lOe8qOiOueiQpOiQpeiNp+idh+i1oumiluiMlOiOuuiQpuiTpeaShOWYpOa7oua9hueSjum5pueYv+mij+e9guWTn+aLpeS9o+eXiOi4iuWSj+mVm+S8mOW/p+mCrumTgOeKueivseiOuOmTlemxv+iIhumxvOa4lOWoseS4juWxv+ivreeLseiqiemihOmpreS8m+S/o+iwgOiwleiTo+W1m+mlq+mYiOWmque6oeinjuaspOmSsOm5hum5rOm+iem4s+a4iui+leWbreWRmOWchue8mOi/nOapvOm4oum8i+e6pui3g+mSpeeypOaCpumYhemSuumDp+WMgOmZqOi/kOiVtOmFneaZlemftemDk+iKuOaBveaEoOe6remfq+aukuawsuadgueBvui9veaUkuaagui1nueTkui2semMvui1g+iEj+mpteWHv+aeo+i0o+aLqeWImeazvei1nOWVp+W4u+eupui0vOiwrui1oOe7vOe8r+i9p+mToemXuOagheiviOaWi+WAuuavoeebj+aWqei+l+W0reagiOaImOe7veiwteW8oOa2qOW4kOi0puiDgOi1teivj+mSiuibsOi+memUl+i/meiwqui+hOm5p+i0numSiOS+puiviumVh+mYtea1iOe8nOahoui9uOi1iOelr+m4qeaMo+edgeeLsOS6ieW4p+eXh+mDkeivgeivpOWzpemSsumTruetnee7h+iBjOaJp+e6uOaMmuaOt+W4nOi0qOa7numqmOagieaggOi9tei9vui0vem4t+ibs+e1t+i4rOi4r+inr+mSn+e7iOenjeiCv+S8l+mUuuivjOi9tOeaseaYvOmqpOe6o+e7ieeMquivuOivm+eDm+eeqeWYsei0rumTuOmpu+S8q+anoOmTouS4k+eglui9rOi1muWVremmlOminuahqeW6hOijheWmhuWjrueKtumUpei1mOWdoOe8gOmqk+e8kuiwhuWHhuedgOa1iuivvOmVr+WFuei1hOa4jeiwmOe8gei+jui1gOecpumUsem+h+myu+i4quaAu+e6teWBrOmCueivuempuumysOivhee7hOmVnumSu+e8tei6nOmzn+e/seW5tuWNnOayieS4kea3gOi/reaWl+iMg+W5sueai+ehheafnOWQjuS8meenuOadsOivgOWkuOmHjOWHjOS5iOmcieaNu+WHhOaJpuWco+WwuOaKrOa2gua0vOWWguaxoemUqOWSuOidjuW9nea2jOa4uOWQgeW+oeaEv+Wys+S6keeBtuaJjuacreetkeS6juW/l+azqOWHi+iuoOiwq+mDhOWLkOWHvOWdguWeheWetOWfr+WfneiLmOiNrOiNruiOnOiOvOiPsOiXgeaPuOWQkuWQo+WSlOWSneWStOWZmOWZvOWar+W5nuWymeW1tOW9t+W+vOeKuOeLjemmgOmmh+mmk+mmleaEo+aGt+aHlOS4rOa6hua7n+a6t+a8pOa9tOa+ueeUr+e6n+e7lOe7seePieaep+ahiuahieanlOappei9sei9t+i1jeiCt+iDqOmjmueFs+eFheeGmOaEjea3vOegnOejmeecjemSmumSt+mTmOmTnumUg+mUjemUjumUj+mUmOmUnemUqumUq+mUv+mVhemVjumVoumVpemVqemVsueohum5i+m5m+m5seeWrOeWtOeXlueZr+ijpeilgeiAoumipeieqOm6tOmyhemyhumyh+mynumytOmyuumyvOmziumzi+mzmOmzmemekumetOm9hCc7XFxufVxcbmZ1bmN0aW9uIGZ0UFlTdHIoKXtcXG5cXHRyZXR1cm4gJ+mMkueamuiXueekmeaEm+WZr+WsoeeSpuablumdhOirs+mKqOm1qumqr+illuWlp+WqvOmpgemwsuWjqee9t+mIgOaTuuaVl+WUhOmgkui+pue1humIkeW5q+e2gemOiuisl+WJnemjveWvtuWgsemukem0h+m9mei8qeiynemLh+eLveWCmeaGium1r+izgemMm+e5g+ethueVouaWg+W5o+mWieiTveWXtua9t+mJjeevs+i5lemCiue3qOiytuiuiui+r+i+ruiKkOe3tuexqeaomempg+mirumjhumPoumRo+mwvumxieWIpeeZn+eAlea/seizk+aTr+WEkOe5veaqs+aur+iHj+mRjOmrlemsoumkheeon+aSpee8vemJkemngemkkemIuOm1k+ijnOmIveiyoeWPg+igtuaumOaFmuaFmOeHpumpgum7suiSvOiJmeWAiea7hOW7geWBtOWGiua4rOaDu+WxpOipq+mNpOWElemHteaUmeaRu+ifrOmlnuiukue6j+mPn+eUoumXoemhq+WbheirguiuluiVhuaHuuWsi+mpj+immOemqumQlOWgtOWYl+mVt+WEn+iFuOW7oOaaouWAgOiQh+aCtemWtumvp+mIlOi7iuW+ueehqOWhtemZs+ilr+WCluirtuarrOejo+m9lOaSkOeoseaHsuiqoOmogeajluaqiemLrumQuueZoemBsumms+aBpem9kueGvumjrem0n+ayluihneifsuWvtemKg+eWh+i6iuexjOe2ouWElOW5rOiujuarpeW7mumLpOmbm+ekjuWEsuinuOiZleiKu+e1gOi6leWCs+mHp+eYoemXluWJteaEtOmMmOe2nue0lOm2iee2vei8n+m9qui+reipnuiznOm2v+iBsOiUpeWbquW+nuWPouiTr+mphOaohea5iui8s+i6peerhOaUm+mMr+mKvOm5uumBlOWZoOmfg+W4tuiyuOmnmOe0v+aTlOWWrumEsuaSo+iGveaGmuiqleW9iOauq+izp+eZieewnueVtuaTi+m7qOiVqeaqlOiunOeireiloOaQl+WztuemseWwjuebnOeHvueHiOmEp+mQmeaVtea7jOmBnue3oOeztOiphuirpue2iOimv+mPkemhm+m7nuWiiumbu+W3lOmIv+eZsumHo+iqv+mKmumvm+irnOeWiumwiOmHmOmggumMoOiogumLjOS4n+mKqeadseWLleajn+WHjeW0oOm2h+erh+eKoueNqOiugOizremNjeeAhuarneeJmOevpOm7t+mNm+aWt+e3nuexquWFjOmaiuWwjeaHn+mQk+WZuOmgk+mIjeeHiei6ieWlquWirumQuOm1nemhjeiom+aDoemkk+irpOWgiumWvOi7m+mLqOmNlOm2mumhjumhk+mxt+iqkuWFkueIvumkjOiys+mCh+mJuum0r+munueZvOe9sOmWpeeQuuekrOmHqeeFqeiyqemjr+ioque0oemIgemttOmjm+iqueW7ouiyu+e3i+mQqOmvoee0m+Wis+WlruaGpOeznuWDqOixkOalk+mLkumiqOeYi+mmrue4q+irt+mzs+eBg+iGmui8u+aSq+i8lOizpuW+qeiyoOiog+Wppue4m+mzp+mnmee0see0vOizu+m6qemukumwkumHk+ipsumIo+iTi+izheahv+i2leeoiOi0m+Wwt+aQn+e0uuWyoeWJm+mLvOe2seW0l+aIh+mOrOedquiqpee4numLr+aTsem0v+mWo+mJu+WAi+e0h+mOmOa9gee1puS6meizoee2humvgem+lOWurumej+iyoumJpOa6neiMjeani+izvOWkoOiprOe3seimr+igsemhp+ipgei9gumIt+mMrum0o+m1oOm2u+WJruaOm+m0sOaRkemXnOingOmkqOaFo+iyq+ipv+aRnOm4m+mwpeW7o+eNt+imj+atuOm+nOmWqOi7jOipreiytOWKiuWMreWKjOWqr+aqnOmuremxlui8pea7vuiinue3hOmvgOmNi+Wci+mBjuWgneWSvOW5l+anqOifiOmJv+mnremfk+a8oumXnue1jumgoeiZn+eBnemhpemWoem2tOizgOiotumXlOigo+apq+i9n+m0u+e0hem7jOiojOiRkumWjumxn+Wjuuitt+a7rOaItua7uOm2mOWYqeiPr+eVq+WKg+ipsempiuaouumPteaHt+WjnuatoeeSsOmChOe3qeaPm+WWmueYk+eFpea4meWlkOe5r+mNsOmvh+m7g+isiumwieaPrui8neavgOizhOepouacg+eHtOWMr+irseiqqOe5quipvOiWiOWZpua+rue5oueQv+aaieiRt+a4vuiroumkm+mWveeNsuiyqOemjemIpemRiuaTiuapn+epjemlkei3oeitj+mbnue4vue3nealtei8r+e0muaToOW5vuiWiuWKkea/n+ioiOiomOmam+e5vOe0gOiokOipsOiWuuWYsOWajOmppeeSo+imrOm9j+ejr+e+iOighui6i+mcvemxremvveWkvuiOoumgsOiziOmJgOWDuemnlemDn+a1uemLj+mOteifr+ausuebo+Wgheeui+mWk+iJsee3mOe5reaqouWgv+m5vOaPgOaSv+ewoeWEiea4m+iWpuaqu+mRkui4kOizpOimi+mNteiJpuWKjemknua8uOa/uua+l+irq+e4keaIlOaIqeeevOm2vOetp+mwuemfieWwh+a8v+iUo+ans+eNjuism+mGrOe1s+mfgeiGoOa+humpleWsjOaUqumJuOefr+WDpeiFs+mkg+e5s+e1nui9jui8g+aSn+W2oOm3pumuq+majuevgOa9lOe1kOiqoeWxhueZpOmgnOmumue3iumMpuWDheisuemAsuaZieeHvOeboeWLgeiNiuiOluW3ueiXjumliee4iei0kOimsumvqOmpmue2k+mguOmdnOmPoeW+keeXmeertuWHiOWJhOa2h+mAleW8s+iEm+mdmuezvuW7hOiIiumsrumzqem3sumnkuiIieaTmumLuOaHvOWKh+ipjuWxqOaruOmitumJhemLpueqtum9n+m1kee1uemMiOmQq+mbi+imuuaxuue1leitjueOqOmInui7jemnv+eauOmWi+WHseWJtOWhj+aEvuaEt+mOp+mNh+m+lemWjOmIp+mKrOmhhuauvOiqsumojee3mei7u+mIs+mMgemgt+WivuaHh+m9pumPl+aRs+W6q+iksuWas+WhiuWEiOmEtuWZsuiGvuWvrOeNqumrluekpuaboOazgeiqhuiqkemEuuWjmee6iuiyuuiZp+W3i+equumli+a9sOWMseiVouaGkuiBteewo+mWq+mMlemvpOaTtOmXiuigkOign+iHmOiQiuS+huiztOW0jeW+oOa3tueAqOizmuednumMuOeZqeexn+iXjeashOaUlOexg+mXjOiYreeAvuiuleaUrOimveaHtue6nOeIm+a/q+W1kOasluaWlemRreilpOeRr+mWrOmLg+aSiOWLnua+h+WYruW2l+mKoOmQkueZhuaogumws+mQs+WjmOmhnua3muiqhOe4suexrOiyjemboumvieemrum6l+WOsuWLteekq+att+eAnemauOWEt+mFiOWjouiXtuiSnuiYuuWapumCkOmpque4rearquarn+i9ouekqumLsOm4neeZmOezsui6kumdgumxuumxp+WAhuiBr+iTrumAo+mQruaGkOa8o+ewvuaWguiHiemPiOaIgOeFiee3tOiYnuWlqeeAsueSieauruiks+ilnemwseezp+a2vOWFqei8m+irkumtjueZgumBvOmQkOe5mumHlem3r+eNteiHqOmEsOmxl+WHnOizg+iXuuW7qeaqgei9lOi6qum9oemItOmdiOW2uumgmOe2vuasnuiftumvqumkvuWKieeAj+morue2uemOpum3mum+jeiBvuWaqOexoOWjn+aUj+matOiYoueAp+eTj+ars+acp+ekseaok+WpgeaRn+ewjeWDguiUnuWYjeW2gemPpOeYuuiArOieu+mrj+iYhuebp+mhseW7rOeIkOaThOm5teiZnOmtr+izguelv+mMhOmZuOWjmuaTvOWalemWreeAmOa3pearqOark+i9pOi8hei9huawjOiHmum4lem3uuiJq+mxuOW3kuaUo+Wtv+eBpOS6guiHoOWtjOaskum4numRvuaOhOi8quWAq+S+lua3que2uOirluWch+iYv+e+hemCj+mRvOexrumovumnsee1oeeKlueOgOa/vOasj+iFoemPjempouWRgumLgeS+tuWxoue4t+aFrua/vue2oOarmuikuOmLneWYuOWqveeRqueivOienummrOe9teWXjuWYnOWspOamquiyt+m6peizo+mCgeiEiOWLseeenumlheigu+a7v+isvue4temPnemhmemwu+iyk+mMqOmJmuiyv+m6vOaykumOgumWgOaCtuWAkeaNq+eHnOaHo+mNhumMs+Wkoueeh+isjuW9jOimk+WGque+i+iskOeNvOemsOe2v+e3rOa+oOmdpum7veW7n+e3sue5hua7heaGq+mWqemWlOe3oemztOmKmOisrOisqOmpgOmlg+atv+mPjOisgOeVnemJrOWQtumIiee0jembo+aSk+iFpuaDsemsp+mQg+iopemkkuWFp+aTrOiGqemIrumvouaUhui8pumvsOmHgOmzpeiUpuijiuiBtuWamemRt+mOs+maieiYl+Wbgemhoui6oeaquOeNsOWvp+aTsOa/mOiLp+WagOiBuemIlee0kOiGv+a/g+i+suWEguWZpemnkemHueirvuWEuueYp+atkOm3l+avhuWYlOa8muiss+aFqueUjOebpOi5o+m+kOaLi+easOizoOi9oeWZtOm1rOe0lee+humIuemomeirnumnoumjhOe4uemgu+iyp+WsquiYi+aGkeiplea9kemgl+mHmeaSsumLquaouOitnOmPt+mQoOajsuiHjem9iumojuixiOWVn+awo+ajhOioluiYhOmoj+e2uuamv+ejp+mgjumgj+mwreeJvemHrOmJm+mBt+ewveismemMoumJl+a9m+a3uuittOWhueWDieiVgeaFs+moq+e5vuanp+mIkOanjeWXhuWiu+iWlOW8t+aQtuWsmeaqo+aIp+eGl+mMhumPmOmPuee+pei5jOmNrOapi+WWrOWDkee/ueerheiqmuitmeiVjue5sOejvei5uueriuaEnOmNpeevi+asveimquWvoumLn+i8leawq+WCvumgg+iri+aFtuaSs+mvlueTiueqrueFouibuuW3sOizleifo+mwjei2qOWNgOi7gOmphem9suipmOW2h+mXg+imt+m0nemhtOasiuWLuOiprue2o+i8h+mKk+WNu+m1sueiuumXi+mXleaEqOiuk+mlkuaTvue5nuiVmOWsiOapiOeGsemfjOiqjee0iemjqui7lOamrue1qOW2uOigkee4n+mKo+mhsOi7n+mKs+ichumWj+a9pOeBkeiWqemir+mwk+izveWCmOavv+ezneWWqumot+aOg+e5hea+gOWXh+mKq+epoeauuuWJjue0l+mOqemviuevqeabrOmHg+WIqumWg+mZnOi0jee5leioleWnjemouOmHpOmxlOWikeWCt+iznuWdsOaupOintOeHkue0ueizkuaUneaHvuioreWOmeeBhOeVrOe0s+WvqeWsuOiFjua7suipteirl+eAi+iBsue5qeWLneW4q+eNhea/leipqeaZguidleWvpuitmOmnm+WLoumBqemHi+mjvuimluippuismuWhkuiSlOW8kui7vuiysOmIsOmwo+WjveeNuOe2rOaonui8uOabuOi0luWxrOihk+aoueixjuaVuOaUhOe0k+W4pemWgumbmeiqsOeohemghuiqqueiqeeIjemRoOe1sumjvOW7nemnn+e3pumNtum3peiBs+aFq+mgjOion+iqpuaTu+iXqumkv+mivOmOquiYh+iotOiCheisluepjOmblumaqOe2j+atsuiqtuWtq+aQjeetjeiTgOeMu+e4rueRo+mOluWXqeiEp+eNuuaSu+mXpemJiOmwqOiHuuaFi+mIpumukOaUpOiyqueZseeBmOWjh+itmuirh+WYhuabh+mJremMn+mgh+a5r+eHmeWEu+mks+mQi+mPnOa/pOe1s+iojumfnOmLsemosOishOmKu+mhjOmrlOWxnOe3uem1nOmXkOaineeztum9oOmwt+iyvOmQteW7s+iBveeDtOmKhee1seaFn+mgremIhOemv+WclumHt+WcmOaRtumgueibu+mjqeiEq+m0lemmsemnneapouexnOm8ieilquWqp+iGg+W9jueBo+mgkeiQrOe0iOe2sOe2sui8numfi+mBleWcjeeCuua/sOe2reiRpuWBieWBvee3r+isguihm+irieW5g+mXiOa6iOa9v+eRi+mfmeeFkumuqua6q+iBnue0i+epqeWVj+mWv+eUleaSvuiduOa4pueqqeiHpeiQtem9t+WXmumOoueDj+iqo+eEoeiVquWQs+Whoumcp+WLmeiqpOmElOW7oeaGruWrtemolum1oem2qemMq+eKp+ilsue/kumKkeaIsue0sOmkvOmsqeeSveimoeidpui9hOWzveS/oOeLueW7iOWah+ehpOmurue6luizoumKnOmWkemhr+maquePvueNu+e4o+mkoee+qOaGsue3muiOp+iWn+iYmuWztOeNq+Wru+m3tOeZh+iglOeniOi6muW7gumRsumEieips+mfv+mgheiWjOmkiemppOe3l+mll+iVreWbgumKt+abieWYr+WYteeAn+mpjee2g+ain+ewq+WNlOaMvuaUnOiEheirp+Wvq+eAieisneiku+aTt+e0sue6iOmLhemHgeiIiOmZmOa7juWFh+a0tumKuee5oemliOm1guiZm+WZk+mgiOioseaVmOe3kue6jOipoemgiui7kuaHuOmBuOeZrOe1ouirvOmJiemPh+WtuOislOa+qemxiOWLm+ipouWwi+mmtOiok+ioiumBnOWhpOa9r+mxmOWjk+m0iem0qOWVnuS6nuioneWfoeWpreakj+awrOmWueeFmem5veWatOW3lumhj+mWu+iJt+WOreehr+W9peiruumpl+WOtOi0l+WEvOWFl+iunuaHqOmWhumHhemtmOmlnOm8tOm0pualiuaPmueYjemZveeZoumkiuaoo+eFrOeRpOaQluWgr+mBmeeqr+isoOiXpei7uum3gumwqeeIuumggealreiRiemdqOisgemEtOabhOeHgemGq+mKpemgpOmBuuWEgOifu+iXneWEhOaGtue+qeipo+itsOiqvOitr+eVsOe5ueipkuWbiOW2p+mjtOaHjOmpm+e4iui7vOiyvemHlOmOsOmQv+eYnuiJpOiUremZsOmKgOmjsumasemKpueZruaru+WssOm3ueaHiee6k+eRqeieoueHn+eGkuighei0j+epjuWhi+m2r+e4iOmOo+aUluWatueAheeAoOeTlOm4mueZremgpue9jOWWsuaTgeWCreeZsOi4tOipoOmPnuWEquaGgumDtemIvueMtuiqmOiVlemKqumtt+i8v+mtmua8geWom+iIh+W2vOiqnueNhOitvemgkOmmreWCtOS/geirm+irreiVt+W0s+mjq+mWvuWrl+e0huimpuatn+mIuum1kum3uOm9rOm0m+a3tei9heWckuWToeWck+e3o+mBoOarnumztum7v+e0hOi6jemRsOeyteaChemWsemJnumEluWLu+malemBi+iYiumGnuaaiOmfu+mEhuiVk+aDsuaFjee0nOmfnuaunuaws+mbnOeBvei8ieaUouaaq+i0iueTmui2sumPqOi0k+iHn+mnlOmRv+ajl+iyrOaTh+WJh+a+pOizvuWYluW5mOewgOiziuitlui0iOe2nOe5kui7i+mNmOmWmOafteipkOm9i+WCteawiOebnuaWrOi8vuW2hOajp+aIsOe2u+itq+W8tea8suW4s+izrOiEuei2meiplOmHl+ifhOi9jemNuumAmeisq+i8kum3k+iynumHneWBteiouumOrumZo+a5nue4nealqOi7q+izkeemjum0huaOmeednOeMmeeIreW5gOeZpemEreitieirjeW0oumJpumMmueuj+e5lOiBt+Wft+e0meaRr+aTsuW5n+izqua7r+morearm+ailOi7uei8iui0hOm3meiehOe4tui6k+i6keintumQmOe1gueoruiFq+ecvumNvuishei7uOeauuaZnempn+e0gue4kOixrOiruOiqheeHreefmuWbkeiyr+mRhOmnkOS9h+arp+mKluWwiOejmui9ieizuuWbgOmljOmhs+aogeiOiuijneWmneWjr+eLgOmMkOi0heWinOe2tOmohee4i+irhOa6luiRl+a/geirkemQsuiMsuizh+a8rOirrue3h+i8nOiysuecpemMmem9nOmvlOi5pOe4vee4seWCr+mEkuirj+motumvq+ipm+e1hOmPg+mJhue6mOi6pumxkue/uuS4puiUlOayiOmGnOa+seWPoOmspeevhOW5ueiHr+efvearg+W+jOWkpeeoreWCkeioo+iqh+ijj+a3qem6vem7tOaSmua3kuaJoeiBluWxjeaToeWhl+eqqumkteaxmemNgem5ueigjeW9nOa5p+mBiuexsuempumhmOW2vembsueriOe0ruWKhOevieaWvOiqjOiou+mbleiogeitvumDpOeMm+awuemYquWjn+WgluWeteWiiuaqvuiVkuiRpOiTp+iSk+iPh+angeaRo+WSpOWUmuWTouWZneWZheaSheWKiOislOilhuW2tOiEiuS7v+WDpeeNgem6hemkmOmkt+mliumloualnuaAteaHjeeIv+a8teeBqea3t+a/q+eApua3oeWvp+ezuOe1nee3lOeRieaimOajrOahiOapsOarq+i7sui7pOizq+iGgeiFlumjiOeziueFhua6nOa5o+a4uueiuOa7vueemOmIiOmJlemLo+mKsemLpemLtumQpumQp+mNqemNgOmNg+mMh+mOhOmOh+mOv+mQnemRpemRuemRlOeprem2k+m2pem4jOeZp+WxmeeYguiHkuilh+e5iOiArumhrOifjum6r+mugemug+mujumvl+mvnemvtOmxnemvv+mwoOmwtemxhemevemfnem9hyc7XFxufVxcblxcblxcbmZ1bmN0aW9uIFRyYWRpdGlvbmFsaXplZChjYyl7XFxuXFx0XFx0dmFyIHN0cj0nJztcXG5cXHRcXHRmb3IodmFyIGk9MDtpPGNjLmxlbmd0aDtpKyspe1xcblxcdFxcdFxcdGlmKGNoYXJQWVN0cigpLmluZGV4T2YoY2MuY2hhckF0KGkpKSE9LTEpXFxuXFx0XFx0XFx0XFx0c3RyKz1mdFBZU3RyKCkuY2hhckF0KGNoYXJQWVN0cigpLmluZGV4T2YoY2MuY2hhckF0KGkpKSk7XFxuXFx0XFx0XFx0ZWxzZVxcblxcdFxcdFxcdFxcdHN0cis9Y2MuY2hhckF0KGkpO1xcblxcdFxcdH1cXG5cXHRcXHRyZXR1cm4gc3RyO1xcblxcdH1cXG4gXFxuZnVuY3Rpb24gc3AoY2Mpe1xcblxcdFxcdHZhciBzdHI9Jyc7XFxuXFx0XFx0Zm9yKHZhciBpPTA7aTxjYy5sZW5ndGg7aSsrKXtcXG5cXHRcXHRcXHRpZihmdFBZU3RyKCkuaW5kZXhPZihjYy5jaGFyQXQoaSkpIT0tMSlcXG5cXHRcXHRcXHRcXHRzdHIrPWNoYXJQWVN0cigpLmNoYXJBdChmdFBZU3RyKCkuaW5kZXhPZihjYy5jaGFyQXQoaSkpKTtcXG5cXHRcXHRcXHRlbHNlXFxuXFx0XFx0XFx0XFx0c3RyKz1jYy5jaGFyQXQoaSk7XFxuXFx0XFx0fVxcblxcdFxcdHJldHVybiBzdHI7XFxufVxcbmZ1bmN0aW9uIGNvbG9yQ29kZShkKSB7XFxuICAgIHZhciBzdHIgPSBBcnJheS5mcm9tKGQudG9TdHJpbmcoKS5yZXBsYWNlKCcjJywgJycpKTtcXG4gICAgaWYgKHN0ci5sZW5ndGggIT0gNikge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgZm9yICh2YXIgayBpbiBzdHIpIHtcXG4gICAgICAgICAgICBpZiAoISgoc3RyW2tdID49ICcwJyAmJiBzdHJba10gPD0gJzknKSB8fCAoc3RyW2tdID49ICdhJyAmJiBzdHJba10gPD0gJ2YnKSB8fCAoc3RyW2tdID49ICdBJyAmJiBzdHJba10gPD0gJ0YnKSkpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiB0cnVlO1xcbiAgICB9XFxufVxcbmZ1bmN0aW9uIGNvbG9yKGQsIGMpIHtpZiAoY29sb3JDb2RlKGQpICYmICFjb2xvckNvZGUoYykpIHtcXG4gICAgICAgIHZhciB0bXAgPSBkO1xcbiAgICAgICAgZCA9IGM7XFxuICAgICAgICBjID0gdG1wO1xcbiAgICB9XFxuICAgIHJldHVybiAn4oCY4oCY4oCZ4oCZPGZvbnQgY29sb3I9IycgKyAoYyB8fCAnMDAwMDAwJykgKyAnPicgKyBkICsgJzwvZm9udD4nO1xcbn1cXG5mdW5jdGlvbiBzbWFsbChkLCBjKSB7aWYgKGNvbG9yQ29kZShkKSAmJiAhY29sb3JDb2RlKGMpKSB7XFxuICAgICAgICB2YXIgdG1wID0gZDtcXG4gICAgICAgIGQgPSBjO1xcbiAgICAgICAgYyA9IHRtcDtcXG4gICAgfVxcbiAgICByZXR1cm4gJ+KAmOKAmOKAmeKAmTxzbWFsbD48Zm9udCBjb2xvcj0jJyArIChjIHx8ICcwMDAwMDAnKSArICc+JyArIGQgKyAnPC9mb250Pjwvc21hbGw+JztcXG59XFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmlofnq6DkvZzogIVcIixcInBhdGhcIjpcImJsb2dcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxudmFyIGxpbmsgPSBnZXRWYXIoJ2xpbmsnKTtcXG52YXIgaGVhZGVycyA9IHtcXG4gICAgICAgIFxcXCJDb29raWVcXFwiOiBmZXRjaFBDKCdoaWtlcjovL2ZpbGVzL2NhY2hlL0pNX2Nvb2tpZS50eHQnKSB8fCAnJywgXFxuICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6XFxcIk1vemlsbGEvNS4wIChMaW51eDsgQW5kcm9pZCAxMjsgU00tRzk3NTAgQnVpbGQvU1AxQS4yMTA4MTIuMDE2OyB3dikgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgQ2hyb21lLzg5LjAuNDM4OS43MiBNUVFCcm93c2VyLzYuMiBUQlMvMDQ2Mjc5IE1vYmlsZSBTYWZhcmkvNTM3LjM2XFxcIlxcbiAgICB9O1xcbmNvbnN0IHBhZ2UgPSBNWV9QQUdFO1xcbnZhciBodG1sID0gZ2V0UmVzQ29kZSgpXFxudmFyIGljb24gPSBwZChodG1sLFxcXCIucGFuZWwtYm9keSYmaW1nJiZzcmNcXFwiLGxpbmspXFxudmFyIGxlZnQgPSBwZGZoKGh0bWwsXFxcIi51c2VyLWJsb2ctbGlzdCYmLnB1bGwtbGVmdCYmVGV4dFxcXCIpXFxudmFyIHJpZ2h0ID0gcGRmaChodG1sLFxcXCIudXNlci1ibG9nLWxpc3QmJi5wdWxsLXJpZ2h0JiZUZXh0XFxcIikuc3BsaXQoJ29mJylbMV1cXG5pZihwYWdlPT0xKXtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogbGVmdCxcXG4gICAgZGVzYzogcmlnaHQuc21hbGwoKSxcXG4gICAgcGljX3VybDogaWNvbixcXG4gICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIlxcbn0pXFxufVxcbnZhciBibGlzdCA9IHBkZmEoaHRtbCxcXFwiYm9keSYmLnVzZXItYmxvZy1saXN0JiYuZ2FtZS1tYWluXFxcIilcXG5ibGlzdC5mb3JFYWNoKHggPT4ge1xcbiAgICB2YXIgdGl0bGUgPSBwZGZoKHgsXFxcImltZyYmYWx0XFxcIilcXG4gICAgdmFyIGltZyA9IHBkKHgsXFxcImltZyYmc3JjXFxcIixsaW5rKVxcbiAgICB2YXIgdXJsID0gXFxcImhpa2VyOi8vcGFnZS9hcnRpY2xlP3VybD1cXFwiK3BkKHgsXFxcImEsMSYmaHJlZlxcXCIpK1xcXCIjbm9SZWNvcmRIaXN0b3J5IyNub0hpc3RvcnkjI2ltbWVyc2l2ZVRoZW1lI1xcXCI7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICBwaWNfdXJsOiBpbWcsXFxuICAgICAgICB1cmw6IHVybCxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwibW92aWVfM1xcXCIsXFxuICAgICAgICBleHRyYTp7XFxuICAgIHBhZ2VUaXRsZTogdGl0bGVcXG4gICAgfVxcbiAgICB9KVxcbiAgICBcXG59KVxcbnNldFJlc3VsdChkKVwifV0iLCJpY29uIjoiaHR0cHM6Ly8xOGNvbWljLWMueHl6L3RlbXBsYXRlcy9mcm9udGVuZC9haXJhdi9pbWcvYXBwX2xpbmszLnBuZz92PTMiLCJwcm94eSI6IiJ9
Add Comment
Please, Sign In to add comment