Advertisement
xiaomianao666

邀您一起看:想要吗?这次是纯欲的杜蕾斯《野餐》

Jan 18th, 2022
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥想要吗?这次是纯欲的杜蕾斯《野餐》@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIvCflKLpppbpobXliJfooahcIixcInBhdGhcIjpcIummlumhteWIl+ihqFwiLFwicnVsZVwiOlwiaWYgKHRpcHNfdGl0bGUgPT0gJ+WIhuexuycgfHwgdGlwc190aXRsZSA9PSAn5L2c5ZOBJykge1xcbiAgICBmb3IgKGxldCBpIGluIFhQQykge1xcbiAgICAgICAgdmFyIHZtID0gWFBDW2ldO1xcbi8v5Y2V5Liq6KeG6aKRd2Vi6ZO+5o6lXFxuXFx0ICB2YXIgd2ViX2xpbmtzID0gdm0ud2ViX3VybDtcXG4gICAgICAgIHZhciBhcHBfbGlua3MgPSB2bS51cmwucmVwbGFjZSgvbmV3c3R1ZGlvcy8sICdodHRwcycpO1xcbiAgICAgICAgdmFyIElEID0gYXBwX2xpbmtzLnNwbGl0KCdpZD0nKVsxXVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogdm0uY2F0ZWdvcnlfbmFtZSxcXG4gICAgICAgICAgICBwaWNfdXJsOiB2bS5jb3ZlciwgICAgICAgdXJsOmV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9wYWdlL3dlYl/lj5HnjrDkuoznuqfliIbnsbtcXFwiKSkucnVsZSksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdjYXJkX3BpY18yJyxcXG4gICAgICAgICAgICBkZXNjOiAnMCcsXFxuICAgICAgICB9KVxcbiAgICB9XFxufVxcblxcbmlmICh0aXBzX3RpdGxlICE9ICfkvZzlk4EnICYmIHRpcHNfdGl0bGUgIT0gJ+WIhuexuycpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiAnbGluZV9ibGFuaycsXFxuICAgIH0pXFxuIGZvciAobGV0IGkgaW4gdm1qc29uKSB7XFxuICAgICAgICB2YXIgdm0gPSB2bWpzb25baV0uZGF0YS5yZXNvdXJjZTtcXG4gICAgICAgIHZhciBQTEFZX0xJTktTID0gdm0udXJsLnJlcGxhY2UoL25ld3N0dWRpb3MvLCAnaHR0cHMnKTtcXG52YXIgVVNFUl9IT01FPSAnaHR0cHM6Ly9hcHAueGlucGlhbmNoYW5nLmNvbS91c2VyLycrdm0udXNlcl9pZDtcXG5pZiAodGlwc190aXRsZSAhPSAn5Zy65bqT5o6o6I2QJyApe1xcbnZhciB1cmwgPWV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9wYWdlL+WIm+S9nOS6uummlumhtVxcXCIpKS5ydWxlKVxcbn1lbHNle3ZhciB1cmwgPVxcXCJoaWtlcjovL2VtcHR5XFxcIn1cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHZtLmF1dGhvci51c2VyaW5mby51c2VybmFtZSxcXG4gICAgICAgICAgICBwaWNfdXJsOiB2bS5hdXRob3IudXNlcmluZm8uYXZhdGFyLFxcbiAgICAgICAgICAgIHVybDp1cmwsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcbiAgICAgICAgfSlcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHZtLnRpdGxlLFxcbiAgICAgICAgICAgIHVybDogZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL3BhZ2Uv6KeG6aKR6K+m5oOF6aG1XFxcIikpLnJ1bGUpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF8xJyxcXG4gICAgICAgIH0pXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiB2bS50aXRsZSxcXG4gICAgICAgICAgICBwaWNfdXJsOiB2bS5jb3ZlcixcXG4gICAgICAgICAgICB1cmw6IGV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9wYWdlL2FwcOaSreaUvumTvuaOpVxcXCIpKS5ydWxlKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3BpY18xX2Z1bGwnLFxcbiAgICAgICAgfSlcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHZtLmNvdW50LmNvdW50X2NvbGxlY3QsXFxuICAgICAgICAgICAgcGljX3VybDogJ2h0dHA6Ly84Mi4xNTYuMjIyLjc3L3dlaXN5ci9pY29uL2Jic+aUtuiXjy5zdmcnLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnaWNvbl9zbWFsbF8zJyxcXG4gICAgICAgIH0pXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiB2bS5jb3VudC5jb3VudF9jb21tZW50LFxcbiAgICAgICAgICAgIHBpY191cmw6ICdodHRwOi8vODIuMTU2LjIyMi43Ny93ZWlzeXIvaWNvbi9iYnPlm57lpI0uc3ZnJyxcXG4gICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoUExBWV9MSU5LUykgPT4ge1xcblxcdFxcdFxcdFxcdFxcdFxcdHB1dE15VmFyKCfor6bnu4bnsbvliKsnLCAn6K+E6K66Jyk7XFxuXFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9wYWdlL+inhumikeivpuaDhemhtVxcXCIpKS5ydWxlKTtcXG5cXHRcXHRcXHRcXHRcXHR9LFBMQVlfTElOS1MpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnaWNvbl9zbWFsbF8zJyxcXG4gICAgICAgIH0pXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiB2bS5jb3VudC5jb3VudF9saWtlLFxcbiAgICAgICAgICAgIHBpY191cmw6ICdodHRwOi8vODIuMTU2LjIyMi43Ny93ZWlzeXIvaWNvbi9iYnPngrnotZ4uc3ZnJyxcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2ljb25fc21hbGxfMycsXFxuICAgICAgICB9KVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmVfYmxhbmsnLFxcbiAgICAgICAgfSlcXG4gICAgXFx0fVxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcImFwcOWIhuexu+S4juaQnOe0ouWIl+ihqFwiLFwicGF0aFwiOlwiYXBw5YiG57G75LiO5pCc57Si5YiX6KGoXCIsXCJydWxlXCI6XCJ2YXIgQVBQX1VSTCA9IFxcXCJodHRwczovL2FwcC54aW5waWFuY2hhbmcuY29tL3YyL3NlYXJjaD90eXBlPVxcXCIgKyB0aXBzX3NlbGVjdCArIFxcXCIma3c9XFxcIiArIHRpcHNfdGl0bGUgKycmcGFnZT0nICsgUEFHRTtcXG52YXIgYXBwX2xpc3RzID0gSlNPTi5wYXJzZShyZXF1ZXN0KEFQUF9VUkwpKS5kYXRhLmxpc3Q7XFxuaWYgKGFwcF9saXN0cy5sZW5ndGggIT0gXFxcIlxcXCIpIHtcXG5cXHRmb3IgKGxldCBpIGluIGFwcF9saXN0cykge1xcblxcdFxcdHZhciBQTEFZX0xJTktTID0gYXBwX2xpc3RzW2ldLnVybC5yZXBsYWNlKC9uZXdzdHVkaW9zLywgJ2h0dHBzJyk7XFxuXFx0XFx0dmFyIGxpa2UgPSBhcHBfbGlzdHNbaV0uY291bnQuY291bnRfbGlrZTtcXG5cXHRcXHR2YXIgdmlldyA9IGFwcF9saXN0c1tpXS5jb3VudC5jb3VudF92aWV3O1xcblxcdFxcdGlmIChsaWtlID4gMTAwMCkgbGlrZSA9IChsaWtlIC8gMTAwMCkudG9GaXhlZCgxKSArICdrJztcXG5cXHRcXHRpZiAodmlldyA+IDEwMDAwKSB2aWV3ID0gKHZpZXcgLyAxMDAwMCkudG9GaXhlZCgxKSArICd3JztcXG5cXHRcXHRkLnB1c2goe1xcblxcdFxcdFxcdHBpY191cmw6IGFwcF9saXN0c1tpXS5jb3ZlcixcXG5cXHRcXHRcXHR0aXRsZTogYXBwX2xpc3RzW2ldLnRpdGxlLFxcblxcdFxcdFxcdGRlc2M6IFxcXCLigJzigJzigJ3igJ0gPHNtYWxsPjxmb250IGNvbG9yPSdncmV5Jz5cXFwiICsgJ+aSreaUvumHjyAnICsgdmlldyArICcgwrcgJyArICfllpzmrKIgJyArIGxpa2UgKyAnXFxcXG4nICsgYXBwX2xpc3RzW2ldXFxuXFx0XFx0XFx0XFx0LmF1dGhvci51c2VyaW5mby51c2VybmFtZSArIFxcXCI8L2ZvbnQ+IDwvc21hbGw+XFxcIixcXG5cXHRcXHRcXHR1cmw6IGV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9wYWdlL+inhumikeivpuaDhemhtVxcXCIpKS5ydWxlKSxcXG5cXHRcXHRcXHRjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcblxcdFxcdH0pXFxuXFx0fVxcbn0gZWxzZSB7XFxuXFx0ZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL3BhZ2UvRU5EXFxcIikpLnJ1bGUpXFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5pCc57Si6aG15LiK6YOoXCIsXCJwYXRoXCI6XCLmkJzntKLpobXkuIrpg6hcIixcInJ1bGVcIjpcImlmIChQQUdFID09IDEpIHtcXG5cXHRkLnB1c2goe1xcblxcdFxcdHVybDogXFxcInB1dE15VmFyKCfmkJzlhbPplK7lrZcnLGlucHV0KTt2YXIgdGlwc190aXRsZSA9IGdldE15VmFyKCfmkJzlhbPplK7lrZcnKTt2YXIgbG9jYWxEYXRhID0gcmVxdWVzdCgnaGlrZXI6Ly9maWxlcy9jYWNoZS/mlrDniYflnLrljoblj7LmkJzntKIuanNvbicpO2lmICghbG9jYWxEYXRhKSBsb2NhbERhdGEgPSdbXSc7dmFyIGxpc2hpPUpTT04ucGFyc2UobG9jYWxEYXRhKTtsZXQgY2NjID0gbGlzaGkuaW5kZXhPZihpbnB1dCk7aWYoY2NjID4tMSl7bGlzaGkuc3BsaWNlKGNjYywxKX07bGlzaGkucHVzaCh0aXBzX3RpdGxlKTtsaXNoaT1saXNoaS5zbGljZSgtMjgpO3dyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9jYWNoZS/mlrDniYflnLrljoblj7LmkJzntKIuanNvbicsIEpTT04uc3RyaW5naWZ5KGxpc2hpKSk7cmVmcmVzaFBhZ2UoZmFsc2UpXFxcIixcXG5cXHRcXHRkZXNjOiAn6K+36L6T5YWl5L2c5ZOB5ZCN44CB5Yib5L2c5Lq6JyxcXG5cXHRcXHRleHRyYToge1xcblxcdFxcdFxcdGRlZmF1bHRWYWx1ZTogdGlwc190aXRsZSxcXG5cXHRcXHR9LFxcblxcdFxcdGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcblxcdH0pO1xcblxcdGQucHVzaCh7XFxuXFx0XFx0Y29sX3R5cGU6ICdsaW5lJyxcXG5cXHR9KVxcblxcblxcdGlmICghdGlwc190aXRsZSkge1xcblxcdFxcdGlmIChyZXF1ZXN0KCdoaWtlcjovL2ZpbGVzL2NhY2hlL+aWsOeJh+WcuuWOhuWPsuaQnOe0oi5qc29uJykpIHtcXG5cXHRcXHRcXHRmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcXG5cXHRcXHRcXHRcXHRkLnB1c2goe1xcblxcdFxcdFxcdFxcdFxcdGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxuXFx0XFx0XFx0XFx0fSlcXG5cXHRcXHRcXHR9XFxuXFx0XFx0XFx0ZC5wdXNoKHtcXG5cXHRcXHRcXHRcXHR0aXRsZTogJ+KAnOKAnOKAneKAnTxiPjxmb250IGNvbG9yPSMwMDA+JyArICfwn5eR77iPIOWOhuWPsuaQnOe0oicgKyAnPC9mb250PjwvYj4nLFxcblxcdFxcdFxcdFxcdHVybDogJCgpLmxhenlSdWxlKCgpID0+IHtcXG5cXHRcXHRcXHRcXHRcXHR3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvY2FjaGUv5paw54mH5Zy65Y6G5Y+y5pCc57SiLmpzb24nLCAnJyk7XFxuXFx0XFx0XFx0XFx0XFx0cmVmcmVzaFBhZ2UoZmFsc2UpO1xcblxcdFxcdFxcdFxcdFxcdHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuXFx0XFx0XFx0XFx0fSksXFxuXFx0XFx0XFx0XFx0Y29sX3R5cGU6IFxcXCJ0ZXh0XzFcXFwiLFxcblxcdFxcdFxcdFxcdGV4dHJhOiB7XFxuXFx0XFx0XFx0XFx0XFx0bGluZVZpc2libGU6IGZhbHNlXFxuXFx0XFx0XFx0XFx0fVxcblxcdFxcdFxcdH0pO1xcblxcdFxcdFxcdHZhciBsb2NhbERhdGEgPSByZXF1ZXN0KCdoaWtlcjovL2ZpbGVzL2NhY2hlL+aWsOeJh+WcuuWOhuWPsuaQnOe0oi5qc29uJyk7XFxuXFx0XFx0XFx0aWYgKCFsb2NhbERhdGEpIGxvY2FsRGF0YSA9IFxcXCJbXVxcXCI7XFxuXFx0XFx0XFx0dmFyIGxpc2hpID0gSlNPTi5wYXJzZShsb2NhbERhdGEpLnNsaWNlKC0yOCk7XFxuXFx0XFx0XFx0dmFyIEhpc3RvcnkgPSBcXFwiXFxcIjtcXG5cXHRcXHRcXHRmb3IgKGxldCBpID0gbGlzaGkubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcXG5cXHRcXHRcXHRcXHR2YXIgY2NsaXNoaSA9IGxpc2hpW2ldO1xcblxcdFxcdFxcdFxcdGQucHVzaCh7XFxuXFx0XFx0XFx0XFx0XFx0dGl0bGU6IGNjbGlzaGksXFxuXFx0XFx0XFx0XFx0XFx0Y29sX3R5cGU6IFxcXCJmbGV4X2J1dHRvblxcXCIsXFxuXFx0XFx0XFx0XFx0XFx0dXJsOiAkKCkubGF6eVJ1bGUoKGNjbGlzaGkpID0+IHtcXG5cXHRcXHRcXHRcXHRcXHRcXHRwdXRNeVZhcign5pCc5YWz6ZSu5a2XJywgY2NsaXNoaSk7XFxuXFx0XFx0XFx0XFx0XFx0XFx0cmVmcmVzaFBhZ2UoKTtcXG5cXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcblxcdFxcdFxcdFxcdFxcdH0sIGNjbGlzaGkpLFxcblxcdFxcdFxcdFxcdH0pO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9XFxuXFx0XFx0Zm9yIChsZXQgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XFxuXFx0XFx0XFx0ZC5wdXNoKHtcXG5cXHRcXHRcXHRcXHRjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIlxcblxcdFxcdFxcdH0pXFxuXFx0XFx0fVxcblxcdFxcdGQucHVzaCh7XFxuXFx0XFx0XFx0dGl0bGU6ICfigJzigJzigJ3igJ08Yj48Zm9udCBjb2xvcj0jMDAwPicgKyAn8J+UpSDng63pl6jmkJzntKInICsgJzwvZm9udD48L2I+JyxcXG5cXHRcXHRcXHR1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG5cXHRcXHRcXHRjb2xfdHlwZTogXFxcInRleHRfMVxcXCIsXFxuXFx0XFx0XFx0ZXh0cmE6IHtcXG5cXHRcXHRcXHRcXHRsaW5lVmlzaWJsZTogZmFsc2VcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fSk7XFxuXFx0XFx0dmFyIHVybCA9ICdodHRwczovL2FwcC54aW5waWFuY2hhbmcuY29tL3NlYXJjaF9yZWNvbW1lbmRfa3dzJztcXG5cXHRcXHR2YXIgSG90anNvbiA9IEpTT04ucGFyc2UoZmV0Y2godXJsKSkuZGF0YS5saXN0O1xcblxcdFxcdGZvciAobGV0IGkgaW4gSG90anNvbikge1xcblxcdFxcdFxcdHZhciB0aXBzID0gSG90anNvbltpXS5uYW1lO1xcblxcdFxcdFxcdGQucHVzaCh7XFxuXFx0XFx0XFx0XFx0dGl0bGU6IHRpcHMsXFxuXFx0XFx0XFx0XFx0Y29sX3R5cGU6IFxcXCJmbGV4X2J1dHRvblxcXCIsXFxuXFx0XFx0XFx0XFx0dXJsOiAkKCkubGF6eVJ1bGUoKHRpcHMpID0+IHtcXG5cXHRcXHRcXHRcXHRcXHRwdXRNeVZhcign5pCc5YWz6ZSu5a2XJywgdGlwcyk7XFxuXFx0XFx0XFx0XFx0XFx0cmVmcmVzaFBhZ2UoKTtcXG5cXHRcXHRcXHRcXHRcXHRyZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcblxcdFxcdFxcdFxcdH0sIHRpcHMpLFxcblxcdFxcdFxcdH0pO1xcblxcdFxcdH1cXG5cXHR9XFxuXFxuXFx0Y29uc3Qgc2VhcmNoX3NodWxpYW5nID0gJ2h0dHBzOi8vd3d3LnhpbnBpYW5jaGFuZy5jb20vc2VhcmNoP2t3PScgKyB0aXBzX3RpdGxlO1xcblxcdHZhciBzZWFyY2hfTlVNQkVSID0gcGRmYShyZXF1ZXN0KHNlYXJjaF9zaHVsaWFuZyx7aGVhZGVyczogeyAnVXNlci1BZ2VudCc6ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wKSd9fSksIFxcXCIuYm9yZGVyLWImJi5pdGVtcy1jZW50ZXImJmFcXFwiKVxcblxcdHZhciBzZWFyY2hfdGlwc18wID0gcGRmaChzZWFyY2hfTlVNQkVSWzBdLCAnLnRyYW5zaXRpb24mJlRleHQnKS5tYXRjaCgvKFxcXFx3Kyl8KFxcXFwrKS9nKS5qb2luKFxcXCJcXFwiKVxcblxcdHZhciBzZWFyY2hfdGlwc18xID0gcGRmaChzZWFyY2hfTlVNQkVSWzFdLCAnLnRyYW5zaXRpb24mJlRleHQnKS5tYXRjaCgvKFxcXFx3Kyl8KFxcXFwrKS9nKS5qb2luKFxcXCJcXFwiKVxcblxcdHZhciBzZWFyY2hfdGlwc18yID0gcGRmaChzZWFyY2hfTlVNQkVSWzJdLCAnLnRyYW5zaXRpb24mJlRleHQnKS5tYXRjaCgvKFxcXFx3Kyl8KFxcXFwrKS9nKS5qb2luKFxcXCJcXFwiKVxcblxcblxcdHB1dE15VmFyKCfmlbDph4/igJTkvZzlk4EnLCBzZWFyY2hfdGlwc18wKVxcblxcdHB1dE15VmFyKCfmlbDph4/igJTliJvkvZzkuronLCBzZWFyY2hfdGlwc18xKVxcblxcdHB1dE15VmFyKCfmlbDph4/igJTmlofnq6AnLCBzZWFyY2hfdGlwc18yKVxcblxcdHZhciBDb2xvciA9IFxcXCIjRkE3Mjk4XFxcIjtcXG5cXHRmdW5jdGlvbiBnZXRIZWFkKHRpdGxlcykge1xcblxcdFxcdHJldHVybiAn4oCY4oCY4oCZ4oCZPHN0cm9uZz48Zm9udCBjb2xvcj1cXFwiJyArIENvbG9yICsgJ1xcXCI+JyArIHRpdGxlcyArICc8L2Zyb250Pjwvc3Ryb25nPic7XFxuXFx0fVxcblxcdGlmICh0aXBzX3RpdGxlKSB7XFxuXFx0XFx0dmFyIHRpcHNfMCA9IGdldE15VmFyKFxcXCLmlbDph4/igJTkvZzlk4FcXFwiKVxcblxcdFxcdHZhciB0aXBzXzEgPSBnZXRNeVZhcihcXFwi5pWw6YeP4oCU5Yib5L2c5Lq6XFxcIilcXG5cXHRcXHR2YXIgdGlwc18yID0gZ2V0TXlWYXIoXFxcIuaVsOmHj+KAlOaWh+eroFxcXCIpXFxuXFx0XFx0Zm9yIChsZXQgaSA9IDA7IGkgPCA1OyBpKyspIHtcXG5cXHRcXHRcXHRkLnB1c2goe1xcblxcdFxcdFxcdFxcdGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxuXFx0XFx0XFx0fSlcXG5cXHRcXHR9XFxuXFx0XFx0dmFyIOS9nOWTgT0n5L2c5ZOBICcrJ+KAmOKAmCcrIHRpcHNfMCsgJ+KAmeKAmSc7XFxuXFx0XFx0ZC5wdXNoKHtcXG5cXHRcXHRcXHQvLyB0aXRsZTogJ+S9nOWTgSAnKyfigJjigJgnKyB0aXBzXzArICfigJnigJknLFxcblxcdFxcdFxcdHRpdGxlOiB0aXBzX3NlbGVjdCA9PSAnYXJ0aWNsZScgPyBnZXRIZWFkKHRpdGxlcyA95L2c5ZOBKSA6IOS9nOWTgSxcXG5cXHRcXHRcXHRjb2xfdHlwZTogJ3RleHRfMycsXFxuXFx0XFx0XFx0dXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpID0+IHtcXG5cXHRcXHRcXHRcXHRwdXRNeVZhcign5L2cL+WImy/mlocnLCAnYXJ0aWNsZScpO1xcblxcdFxcdFxcdFxcdHJlZnJlc2hQYWdlKCk7XFxuXFx0XFx0XFx0XFx0cmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG5cXHRcXHRcXHR9KSxcXG5cXHRcXHR9KVxcblxcdFxcdHZhciDliJvkvZzkuro9XFxcIuWIm+S9nOS6uiBcXFwiKyfigJjigJgnKyB0aXBzXzErICfigJnigJknO1xcblxcdFxcdGQucHVzaCh7XFxuXFx0XFx0XFx0Ly8gdGl0bGU6IFxcXCLliJvkvZzkurogXFxcIisn4oCY4oCYJysgdGlwc18xKyAn4oCZ4oCZJyxcXG5cXHRcXHRcXHR0aXRsZTogdGlwc19zZWxlY3QgPT0gJ2NyZWF0b3InID8gZ2V0SGVhZCh0aXRsZXMgPeWIm+S9nOS6uikgOiDliJvkvZzkurosXFxuXFx0XFx0XFx0Y29sX3R5cGU6ICd0ZXh0XzMnLFxcblxcdFxcdFxcdHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKSA9PiB7XFxuXFx0XFx0XFx0XFx0cHV0TXlWYXIoJ+S9nC/liJsv5paHJywgJ2NyZWF0b3InKTtcXG5cXHRcXHRcXHRcXHRyZWZyZXNoUGFnZSgpO1xcblxcdFxcdFxcdFxcdHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuXFx0XFx0XFx0fSksXFxuXFx0XFx0fSlcXG5cXHRcXHR2YXIg5paH56ugPSBcXFwi5paH56ugIFxcXCIrJ+KAmOKAmCcrIHRpcHNfMisgJ+KAmeKAmSc7XFxuXFx0XFx0ZC5wdXNoKHtcXG5cXHRcXHRcXHQvLyB0aXRsZTogXFxcIuaWh+eroCBcXFwiKyfigJjigJgnKyB0aXBzXzIrICfigJnigJknLFxcblxcdFxcdFxcdHRpdGxlOiB0aXBzX3NlbGVjdCA9PSAn5paH56ugJyA/IGdldEhlYWQodGl0bGVzID3mlofnq6ApIDog5paH56ugLFxcblxcdFxcdFxcdGNvbF90eXBlOiAndGV4dF8zJyxcXG5cXHRcXHRcXHR1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCkgPT4ge1xcblxcdFxcdFxcdFxcdHB1dE15VmFyKCfkvZwv5YibL+aWhycsICfmlofnq6AnKTtcXG5cXHRcXHRcXHRcXHRyZWZyZXNoUGFnZSgpO1xcblxcdFxcdFxcdFxcdHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuXFx0XFx0XFx0fSksXFxuXFx0XFx0fSlcXG5cXHR9XFxuXFx0Y2xlYXJNeVZhcign5pWw6YeP4oCU5L2c5ZOBJyk7XFxuXFx0Y2xlYXJNeVZhcign5pWw6YeP4oCU5Yib5L2c5Lq6Jyk7XFxuXFx0Y2xlYXJNeVZhcign5pWw6YeP4oCU5paH56ugJyk7XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6aaW6aG15Zub5aSn5oyJ6ZKuXCIsXCJwYXRoXCI6XCLpppbpobXlm5vlpKfmjInpkq5cIixcInJ1bGVcIjpcImQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuWPkeeOsFxcXCIsXFxuICAgICAgICBwaWNfdXJsOiAnaHR0cHM6Ly9vc3MteHBjMC54cGNjZG4uY29tL1VwbG9hZC9lZHUvMjAxOS8wMS8xNDVjM2MzODJmMWE4MmQucG5nJyxcXG4gICAgICAgIGNvbF90eXBlOiAnaWNvbl9zbWFsbF80JyxcXG4gICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNodHRwczovL2FwcC54aW5waWFuY2hhbmcuY29tL3BhZ2UvZGlzY292ZXJ5XFxcIikubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgIHB1dE15VmFyKCfkuLvpk77mjqUnLCBpbnB1dCk7XFxuICAgICAgICAgICAgcHV0TXlWYXIoJ+S4u+agh+mimCcsICfliIbnsbsnKTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICB9KSxcXG4gICAgfSlcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi57K+6YCJXFxcIixcXG4gICAgICAgIHBpY191cmw6ICdodHRwczovL29zcy14cGMwLnhwY2Nkbi5jb20vVXBsb2FkL2VkdS8yMDE5LzAxLzE0NWMzYzM4NzFiZDcwOC5wbmcnLFxcbiAgICAgICAgY29sX3R5cGU6ICdpY29uX3NtYWxsXzQnLFxcbiAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI2h0dHBzOi8vYXBwLnhpbnBpYW5jaGFuZy5jb20vaG9tZS9zZWxlY3Rpb25cXFwiKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgcHV0TXlWYXIoJ+S4u+mTvuaOpScsIGlucHV0KTtcXG4gICAgICAgICAgICBwdXRNeVZhcign5Li75qCH6aKYJywgJ+S7iuaXpeeyvumAiScpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgIH0pLFxcbiAgICB9KVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICflnLrlupMnLFxcbiAgICAgICAgcGljX3VybDogJ2h0dHBzOi8vb3NzLXhwYzAueHBjY2RuLmNvbS9VcGxvYWQvZWR1LzIwMTkvMDIvMDE1YzUzYzAzY2I2NjA1LnBuZycsXFxuICAgICAgICBjb2xfdHlwZTogJ2ljb25fc21hbGxfNCcsXFxuICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjaHR0cHM6Ly9hcHAueGlucGlhbmNoYW5nLmNvbS9ob21lL3Ztb3ZpZXJcXFwiKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgcHV0TXlWYXIoJ+S4u+mTvuaOpScsIGlucHV0KTtcXG4gICAgICAgICAgICBwdXRNeVZhcign5Li75qCH6aKYJywgJ+WcuuW6k+aOqOiNkCcpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgIH0pLFxcbiAgICB9KVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfng63pl6gnLFxcbiAgICAgICAgcGljX3VybDogJ2h0dHBzOi8vb3NzLXhwYzAueHBjY2RuLmNvbS9VcGxvYWQvZWR1LzIwMTkvMDgvMDU1ZDQ3ZTI1MTFkMWQ4LnBuZycsXFxuICAgICAgICBjb2xfdHlwZTogJ2ljb25fc21hbGxfNCcsXFxuICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjaHR0cHM6Ly9hcHAueGlucGlhbmNoYW5nLmNvbS9ob21lL2hvdD9wYWdlPVxcXCIpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICBwdXRNeVZhcign5Li76ZO+5o6lJywgaW5wdXQpO1xcbiAgICAgICAgICAgIHB1dE15VmFyKCfkuLvmoIfpopgnLCAn54Ot6ZeoJyk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgfSksXFxuICAgIH0pXFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxiPjxmb250IGNvbG9yPSMwMDA+JyArIHRpcHNfdGl0bGUgKyAnPC9mb250PjwvYj4nLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfMVxcXCIsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgfVxcbiAgICB9KTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIvCflI7ov5vlhaXmkJzntKLpobVcIixcInBhdGhcIjpcIui/m+WFpeaQnOe0oumhtVwiLFwicnVsZVwiOlwiJCgnaGlrZXI6Ly9lbXB0eSNmeXBhZ2UjZnVsbFRoZW1lI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5IycpLnJ1bGUoKCkgPT4ge1xcblxcdHNldFBhZ2VUaXRsZSgn5paw54mH5Zy6wrfmkJzntKInKVxcblxcdHZhciBkID0gW107XFxuXFx0dmFyIFBBR0UgPSBNWV9VUkwuc3BsaXQoJyMnKVsxXTtcXG5cXHRmb3IgKGxldCBpID0gMDsgaSA8IDMwOyBpKyspIHtcXG5cXHRcXHRkLnB1c2goe1xcblxcdFxcdFxcdGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxuXFx0XFx0fSlcXG5cXHR9XFxuXFx0YWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKCgpID0+IHtcXG5cXHRcXHRjbGVhck15VmFyKCfmkJzlhbPplK7lrZcnKTtcXG5cXHRcXHRjbGVhck15VmFyKCfkvZwv5YibL+aWhycpO1xcblxcdH0pKVxcblxcdHZhciB0aXBzX3RpdGxlID0gZ2V0TXlWYXIoXFxcIuaQnOWFs+mUruWtl1xcXCIpXFxuXFx0dmFyIHRpcHNfc2VsZWN0ID0gZ2V0TXlWYXIoXFxcIuS9nC/liJsv5paHXFxcIiwgJ2FydGljbGUnKTtcXG5cXHQvL2xvZyh0aXBzX3NlbGVjdClcXG5cXHRldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcImhpa2VyOi8vcGFnZS/mkJzntKLpobXkuIrpg6hcXFwiKSkucnVsZSlcXG5cXHRpZiAodGlwc190aXRsZSkge1xcblxcdFxcdGlmICh0aXBzX3NlbGVjdCA9PSAnYXJ0aWNsZScpIHtcXG5cXHRcXHQgIC8v5pCc5L2c5ZOBXFxuXFx0XFx0XFx0ZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL3BhZ2UvYXBw5YiG57G75LiO5pCc57Si5YiX6KGoXFxcIikpLnJ1bGUpXFxuXFx0XFx0fSBlbHNlIGlmICh0aXBzX3NlbGVjdCA9PSAnY3JlYXRvcicpIHtcXG5cXHRcXHRcXHQvL+aQnOS6ulxcblxcdFxcdFxcdGV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9wYWdlL2FwcOWIm+S9nOS6uuaQnOe0ouWIl+ihqFxcXCIpKS5ydWxlKVxcblxcdFxcdH0gZWxzZSBpZiAodGlwc19zZWxlY3QgPT0gJ+aWh+eroCcpIHtcXG5cXHRldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcImhpa2VyOi8vcGFnZS93ZWJf5paH56ug5YiX6KGoXFxcIikpLnJ1bGUpXFxuXFx0XFx0fVxcblxcdH1cXG5cXHRzZXRSZXN1bHQoZClcXG59KVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4pmo77iP6aaW6aG1SlNPTlwiLFwicGF0aFwiOlwi6aaW6aG1SlNPTlwiLFwicnVsZVwiOlwidmFyIHRpcHNfdGl0bGUgPSBnZXRNeVZhcihcXFwi5Li75qCH6aKYXFxcIiwgJ+S9nOWTgScpXFxudmFyIHRpcHNfdXJsID0gZ2V0TXlWYXIoXFxcIuS4u+mTvuaOpVxcXCIpO1xcbmlmICh0aXBzX3RpdGxlICE9ICfkvZzlk4EnICYmIHRpcHNfdGl0bGUgIT0gJ+WIhuexuycpIHtcXG5cXHR2YXIgYXBwdXJsID0gdGlwc191cmw7XFxuXFx0aWYgKHRpcHNfdGl0bGUgPT0gJ+WcuuW6k+aOqOiNkCcpIHtcXG5cXHRcXHR2YXIgdCA9IDBcXG5cXHR9IGVsc2UgaWYodGlwc190aXRsZSA9PSAn54Ot6ZeoJykge1xcblxcdFxcdHZhciB0ID0gMlxcblxcdH0gZWxzZSB7XFxuXFx0XFx0dmFyIHQgPSAxXFxuXFx0fVxcblxcdHZhciB2bWpzb24gPSBKU09OLnBhcnNlKHJlcXVlc3QoYXBwdXJsLCB7aGVhZGVyczogeydVc2VyLUFnZW50JzpcXFwiVXNlci1BZ2VudE5ld1N0dWRpb3MvMS45LjEgKGNvbS54aW5waWFuY2hhbmcubmV3c3R1ZGlvczsgYnVpbGQ6Nzg2OyBBbmRyb2lkIDExXFxcIn0sbWV0aG9kOiAnR0VUJ30pKS5kYXRhLmxpc3Quc2xpY2UodCk7XFxuLy9sb2codm1qc29uKTtcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJ3ZWJf5Y+R546w5LqM57qn5YiG57G7XCIsXCJwYXRoXCI6XCJ3ZWJf5Y+R546w5LqM57qn5YiG57G7XCIsXCJydWxlXCI6XCIkKCdoaWtlcjovL2VtcHR5I2Z5cGFnZSNub0hpc3RvcnkjJykucnVsZSgod2ViX2xpbmtzKSA9PiB7XFxuXFx0dmFyIGQgPSBbXTtcXG5cXHR2YXIgUEFHRSA9IE1ZX1VSTC5zcGxpdCgnIycpWzFdO1xcblxcdC8vIOW9k+WJjSB1cmxcXG5cXHRjb25zdCBVUkxfUFJFRklYID0gd2ViX2xpbmtzO1xcblxcdGNvbnN0IENVUlJFTlRfVVJMID0gZ2V0VmFyKCdjdXJyZW50X3VybCcsIFVSTF9QUkVGSVgpXFxuXFx0Ly8g6L+b5YWl5LqM57qn5riF56m66YeN572u5LiA5qyhXFxuXFx0YWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKCgpID0+IHtcXG5cXHRcXHRjbGVhclZhcignY2F0ZV8yJyk7XFxuXFx0XFx0Y2xlYXJWYXIoJ2N1cnJlbnRfdXJsJylcXG5cXHR9KSlcXG5cXHRjb25zdCBDQVRFX0xFVkVMXzIgPSBnZXRWYXIoXFxcImNhdGVfMlxcXCIsIFxcXCIwXFxcIilcXG5cXHQvLyDojrflj5bpobXpnaLlhoXlrrlcXG5cXHRsZXQgaHRtbCA9IHJlcXVlc3QoVVJMX1BSRUZJWCwge2hlYWRlcnM6IHsgJ1VzZXItQWdlbnQnOiAnTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMCknfX0pXFxuXFx0Ly8g56ys5LiA6aG154us5Y2gXFxuXFx0aWYgKFBBR0UgPT0gMSkge1xcblxcdFxcdGQucHVzaCh7XFxuXFx0XFx0XFx0Y29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCJcXG5cXHRcXHR9KVxcblxcdFxcdC8vIOWPluS6jOe6p+agh+etvlxcblxcdFxcdGxldCBjYXRlZ29yaWVfbGV2ZWxfMiA9IHBkZmEoaHRtbCwgJy5zZWNvbmQtdHlwZSYmbGknKVxcblxcdFxcdC8vIOW+queOr+S6jOe6p+agh+etvlxcblxcdFxcdGNhdGVnb3JpZV9sZXZlbF8yLmZvckVhY2goKGNhdGVfMiwgaW5kZXhfMikgPT4ge1xcblxcdFxcdFxcdGxldCB0aXRsZSA9IHBkZmgoY2F0ZV8yLCAnYSYmVGV4dCcpXFxuXFx0XFx0XFx0bGV0IGxpbmsgPSBwZGZoKGNhdGVfMiwgJ2EmJmhyZWYnKVxcblxcdFxcdFxcdGQucHVzaCh7XFxuXFx0XFx0XFx0XFx0dGl0bGU6IHBhcnNlSW50KENBVEVfTEVWRUxfMikgPT09IGluZGV4XzIgPyBcXFwi4oCc4oCcXFxcIiArIHRpdGxlICsgXFxcIuKAneKAnVxcXCIgOiB0aXRsZSxcXG5cXHRcXHRcXHRcXHRjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcblxcdFxcdFxcdFxcdHVybDogJCgpLmxhenlSdWxlKHBhcmFtcyA9PiB7XFxuXFx0XFx0XFx0XFx0XFx0Ly8g5a2Y5Zyo6ZO+5o6l55qE5oOF5Ya15LiL5pu05paw57yT5a2YXFxuXFx0XFx0XFx0XFx0XFx0aWYgKHBhcmFtcy5saW5rKSB7XFxuXFx0XFx0XFx0XFx0XFx0XFx0cHV0VmFyKCdjYXRlXzInLCBwYXJhbXMuaW5kZXgudG9TdHJpbmcoKSlcXG5cXHRcXHRcXHRcXHRcXHRcXHRwdXRWYXIoJ2N1cnJlbnRfdXJsJywgJ2h0dHBzOi8vd3d3LnhpbnBpYW5jaGFuZy5jb20nICsgcGFyYW1zXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0LmxpbmspXFxuXFx0XFx0XFx0XFx0XFx0XFx0cmVmcmVzaFBhZ2UoKVxcblxcdFxcdFxcdFxcdFxcdH1cXG5cXHRcXHRcXHRcXHRcXHRyZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuXFx0XFx0XFx0XFx0fSwge1xcblxcdFxcdFxcdFxcdFxcdGluZGV4OiBpbmRleF8yLFxcblxcdFxcdFxcdFxcdFxcdGxpbms6IGxpbmtcXG5cXHRcXHRcXHRcXHR9KVxcblxcdFxcdFxcdH0pXFxuXFx0XFx0fSlcXG5cXHRcXHRkLnB1c2goe1xcblxcdFxcdFxcdGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxuXFx0XFx0fSlcXG5cXHRcXHQvKiBkLnB1c2goe1xcblxcdFxcdCAgICAgdGl0bGU6ICflvZPliY1VUkzvvJonICsgQ1VSUkVOVF9VUkwsXFxuXFx0XFx0ICAgICBjb2xfdHlwZTogJ2xvbmdfdGV4dCcsXFxuXFx0XFx0IH0pKi9cXG5cXHR9XFxuXFx0bGV0IGZlbmxlaV91cmwgPSAnJztcXG5cXHRpZiAoQ1VSUkVOVF9VUkwuaW5kZXhPZignYXJ0aWNsZUxpc3RQYWdlJykgPiAtMSkge1xcblxcdFxcdGZlbmxlaV91cmwgPSBDVVJSRU5UX1VSTC5yZXBsYWNlKC9cXFxcP2Zyb209YXJ0aWNsZUxpc3RQYWdlLywgJy9wYWdlLScgKyBQQUdFKVxcblxcdH0gZWxzZSB7XFxuXFx0XFx0ZmVubGVpX3VybCA9IENVUlJFTlRfVVJMICsgJy9wYWdlLScgKyBQQUdFXFxuXFx0fVxcblxcdHZhciBsaXN0cyA9IHJlcXVlc3QoZmVubGVpX3VybCwge1xcblxcdFxcdGhlYWRlcnM6IHtcXG5cXHRcXHRcXHRcXFwiVXNlci1BZ2VudFxcXCI6IFBDX1VBXFxuXFx0XFx0fVxcblxcdH0pXFxuXFx0Ly8gbG9nKGZlbmxlaV91cmwpXFxuXFx0dmFyIHdlYl9saXN0cyA9IHBkZmEobGlzdHMsIFxcXCJib2R5JiYuZW50ZXItZmlsbXBsYXlcXFwiKVxcblxcdGV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9wYWdlL3dlYl/liIbnsbvliJfooahcXFwiKSkucnVsZSk7XFxuXFx0c2V0UmVzdWx0KGQpXFxufSwgd2ViX2xpbmtzKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwid2ViX+WIhuexu+WIl+ihqFwiLFwicGF0aFwiOlwid2ViX+WIhuexu+WIl+ihqFwiLFwicnVsZVwiOlwiaWYgKHdlYl9saXN0cy5sZW5ndGggIT0gXFxcIlxcXCIpIHtcXG5cXHRmb3IgKHZhciBpIGluIHdlYl9saXN0cykge1xcblxcdFxcdHZhciBQTEFZX0xJTktTID0gJ2h0dHBzOi8vYXBwLnhpbnBpYW5jaGFuZy5jb20vYXJ0aWNsZS8nICsgcGRmaCh3ZWJfbGlzdHNbaV0sICdsaSYmZGF0YS1hcnRpY2xlaWQnKTtcXG5cXHRcXHRkLnB1c2goe1xcblxcdFxcdFxcdGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxuXFx0XFx0XFx0dGl0bGU6IHBkZmgod2ViX2xpc3RzW2ldLCAnLmZzXzE0JiZUZXh0JyksXFxuXFx0XFx0XFx0ZGVzYzogXFxcIuKAnOKAnOKAneKAnSA8c21hbGw+PGZvbnQgY29sb3I9J2dyZXknPlxcXCIgKyAn5pKt5pS+ICcgKyBwZGZoKHdlYl9saXN0c1tpXSwgJy5pY29uLXBsYXktdm9sdW1lJiZUZXh0JykgK1xcblxcdFxcdFxcdFxcdCcgwrcgJyArICfllpzmrKIgJyArIHBkZmgod2ViX2xpc3RzW2ldLCAnLmljb24tbGlrZSYmVGV4dCcpICsgJ1xcXFxuJyArIHBkZmgod2ViX2xpc3RzW2ldLFxcblxcdFxcdFxcdFxcdFxcdCdwJiYuZnNfMTImJlRleHQnKSArICdcXFxcdFxcXFx0JyArIHBkZmgod2ViX2xpc3RzW2ldLCAnLm5hbWUmJlRleHQnKSArIFxcXCI8L2ZvbnQ+IDwvc21hbGw+XFxcIixcXG5cXHRcXHRcXHRwaWNfdXJsOiBwZCh3ZWJfbGlzdHNbaV0sICdpbWcmJl9zcmMnKSArICdAUmVmZXJlcj0nICsgcGQod2ViX2xpc3RzW2ldLCAnaW1nJiZfc3JjJyksXFxuXFx0XFx0XFx0dXJsOiBldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcImhpa2VyOi8vcGFnZS/op4bpopHor6bmg4XpobVcXFwiKSkucnVsZSksXFxuXFx0XFx0fSk7XFxuXFx0fVxcbn0gZWxzZSB7XFxuXFx0ZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL3BhZ2UvRU5EXFxcIikpLnJ1bGUpXFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiYXBw5pKt5pS+6ZO+5o6lXCIsXCJwYXRoXCI6XCJhcHDmkq3mlL7pk77mjqVcIixcInJ1bGVcIjpcIiQoUExBWV9MSU5LUykubGF6eVJ1bGUoKCkgPT4ge1xcblxcdHRyeXtcXG52YXIgcGxheV91cmxfanNvbiA9IEpTT04ucGFyc2UocmVxdWVzdChpbnB1dCkpLmRhdGE7XFxuXFx0dmFyIHBsYXlfdXJscyA9IHBsYXlfdXJsX2pzb24udmlkZW8uY29udGVudC5wcm9ncmVzc2l2ZTtcXG5cXHQvLyDlvIDlp4vojrflj5blvLnluZVcXG5cXHR2YXIgZGFubWFrdSA9IHBsYXlfdXJsX2pzb24udmlkO1xcblxcdHZhciBkYW5tdSA9ICdodHRwczovL29zcy1kYW5tYWt1MTIueHBjY2RuLmNvbS8nICsgZGFubWFrdSArICcudHh0JztcXG5cXHR2YXIgY29kZSA9IHJlcXVlc3QoZGFubXUpXFxuXFx0dmFyIGFyciA9IGNvZGUuc3BsaXQoXFxcIlxcXFxuXFxcIilcXG5cXHR2YXIgciA9IFtdXFxuXFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXG5cXHRcXHR0cnkge1xcblxcdFxcdFxcdHZhciBsaW5lID0gSlNPTi5wYXJzZShhcnJbaV0pXFxuXFx0XFx0XFx0aWYgKGxpbmUuY29udGVudCkge1xcblxcdFxcdFxcdFxcdHIucHVzaCh7XFxuXFx0XFx0XFx0XFx0XFx0dGV4dDogbGluZS5jb250ZW50LFxcblxcdFxcdFxcdFxcdFxcdHRpbWU6IGxpbmUub2Zmc2V0XFxuXFx0XFx0XFx0XFx0fSlcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fSBjYXRjaCAoZSkge31cXG5cXHR9XFxuXFx0d3JpdGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL2Rhbm11Lmpzb25cXFwiLCBKU09OLnN0cmluZ2lmeShyKSlcXG5cXHQvLyDnu5PmnZ/lvLnluZXojrflj5ZcXG5cXHRsZXQgdXJscyA9IFtdO1xcblxcdGxldCBuYW1lcyA9IFtdO1xcblxcdGZvciAobGV0IGogaW4gcGxheV91cmxzKSB7XFxuXFx0XFx0dXJscy5wdXNoKHBsYXlfdXJsc1tqXS51cmwpXFxuXFx0XFx0bmFtZXMucHVzaChwbGF5X3VybHNbal0ucHJvZmlsZSlcXG5cXHR9XFxuXFx0dmFyIGFsbF91cmwgPSBKU09OLnN0cmluZ2lmeSh7XFxuXFx0XFx0dXJsczogdXJscyxcXG5cXHRcXHRuYW1lczogbmFtZXMsXFxuXFx0XFx0ZGFubXU6IFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL2Rhbm11Lmpzb25cXFwiXFxuXFx0fSlcXG4vL1xcdGxvZyhhbGxfdXJsKVxcblxcdHJldHVybiBhbGxfdXJsXFxufWNhdGNoKGUpe1xcbnZhciB1cmw9aW5wdXQuc3BsaXQoJ3VybD0nKVsxXVxcbnVybD11bmVzY2FwZSh1cmwpXFxucmV0dXJuICd3ZWI6Ly8nK3VybFxcbn1cXG59KVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiYXBw5Yib5L2c5Lq65pCc57Si5YiX6KGoXCIsXCJwYXRoXCI6XCJhcHDliJvkvZzkurrmkJzntKLliJfooahcIixcInJ1bGVcIjpcInZhciBBUFBfVVJMID0gXFxcImh0dHBzOi8vYXBwLnhpbnBpYW5jaGFuZy5jb20vdjIvc2VhcmNoP3R5cGU9XFxcIiArIHRpcHNfc2VsZWN0ICsgXFxcIiZrdz1cXFwiICsgdGlwc190aXRsZSArJyZwYWdlPScgKyBQQUdFO1xcbnZhciBhcHBfbGlzdHMgPSBKU09OLnBhcnNlKHJlcXVlc3QoQVBQX1VSTCkpLmRhdGEubGlzdDtcXG5pZihhcHBfbGlzdHMubGVuZ3RoICE9XFxcIlxcXCIpIHtcXG5mb3IgKGxldCBpIGluIGFwcF9saXN0cykge1xcbiAgIHNldFBhZ2VUaXRsZShhcHBfbGlzdHNbaV0udXNlcm5hbWUpXFxuIHZhciBVU0VSX0hPTUU9YXBwX2xpc3RzW2ldLnVybC5yZXBsYWNlKC9uZXdzdHVkaW9zLywnaHR0cHMnKVxcbmZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIlxcbiAgICAgICAgfSlcXG4gICAgfVxcbnZhciB1cmw9ZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL3BhZ2Uv5Yib5L2c5Lq66aaW6aG1XFxcIikpLnJ1bGUpXFxuICAgIGQucHVzaCh7XFxuICAgICAgICBpbWc6IGFwcF9saXN0c1tpXS5hdmF0YXIgKyAnQFJlZmVyZXI9JyArIGFwcF9saXN0c1tpXS5hdmF0YXIsXFxuICAgICAgICB0aXRsZTogYXBwX2xpc3RzW2ldLnVzZXJuYW1lLFxcbiAgICAgICAgZGVzYzogJycsXFxuICAgICAgICB1cmw6dXJsLFxcbiAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcbiAgICB9KVxcblxcbiAgICB2YXIgb2NjdXBhdGlvbiA9IGFwcF9saXN0c1tpXS5vY2N1cGF0aW9uO1xcbiAgICB2YXIgZm9sbG93ZXIgPSAn57KJ5LidICcgKyBhcHBfbGlzdHNbaV0uY291bnQuY291bnRfZm9sbG93ZXI7XFxuICAgIGlmICghb2NjdXBhdGlvbikge1xcbiAgICAgICAgb2NjdXBhdGlvbiA9ICcnXFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBvY2N1cGF0aW9uID0gb2NjdXBhdGlvbiArICcgwrcgJ1xcbiAgICB9XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuKAnOKAnOKAneKAnSA8c21hbGw+PGZvbnQgY29sb3I9J2dyZXknPlxcXCIgKyAnXFx0XFx0XFx0XFx0XFx0JyArIG9jY3VwYXRpb24gKyBmb2xsb3dlciArIFxcXCI8L2ZvbnQ+IDwvc21hbGw+XFxcIixcXG4gICAgICAgIHVybDogdXJsLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnLFxcbiAgICB9KVxcbn1cXHR9ZWxzZXtcXG4gIGV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9wYWdlL0VORFxcXCIpKS5ydWxlKVxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWIm+S9nOS6uummlumhtVwiLFwicGF0aFwiOlwi5Yib5L2c5Lq66aaW6aG1XCIsXCJydWxlXCI6XCIkKCdoaWtlcjovL2VtcHR5I2Z5cGFnZSNpbW1lcnNpdmVUaGVtZSMjbm9IaXN0b3J5IycpLnJ1bGUoKFVTRVJfSE9NRSkgPT4ge1xcblxcdHRyeSB7XFxuXFx0XFx0dmFyIFBBR0UgPSBNWV9VUkwuc3BsaXQoJyMnKVsxXTtcXG5cXHRcXHR2YXIgZCA9IFtdO1xcblxcdFxcdC8vIOWktOmDqFxcblxcdFxcdHZhciB1cmwgPSBVU0VSX0hPTUU7XFxuXFx0XFx0dmFyIFVTRVJfSlNPTiA9IEpTT04ucGFyc2UocmVxdWVzdCh1cmwpKS5kYXRhO1xcblxcdFxcdHZhciBJRCA9IFVTRVJfSlNPTi5pZDtcXG5cXHRcXHR2YXIgYXBwX2JhY2tncm91bmQgPSBVU0VSX0pTT04uYXBwX2JhY2tncm91bmQ7XFxuXFx0XFx0aWYgKCFhcHBfYmFja2dyb3VuZCkgYXBwX2JhY2tncm91bmQgPSAnaHR0cDovLzgyLjE1Ni4yMjIuNzcvd2Vpc3lyL2ltZy94aW5waWFuY2hhbmcuanBnJztcXG5cXHRcXHR2YXIgdXNlcl9hdmF0YXIgPSBVU0VSX0pTT04uYXZhdGFyO1xcblxcdFxcdHZhciB1c2VyX25hbWUgPSBVU0VSX0pTT04udXNlcm5hbWU7XFxuXFx0XFx0c2V0UGFnZVRpdGxlKHVzZXJfbmFtZSlcXG5cXHRcXHR2YXIgdXNlcl9kZXNjID0gVVNFUl9KU09OLnZlcmlmeV9kZXNjcmlwdGlvbjtcXG5cXHRcXHR2YXIgdXNlcl9hYm91dCA9IFVTRVJfSlNPTi5hYm91dDtcXG5cXHRcXHQvL+S6uuawlFxcblxcdFxcdHZhciBjb3VudF9wb3B1bGFyaXR5ID0gVVNFUl9KU09OLmNvdW50LmNvdW50X3BvcHVsYXJpdHk7XFxuXFx0XFx0aWYgKGNvdW50X3BvcHVsYXJpdHkgPiAxMDAwMCkgY291bnRfcG9wdWxhcml0eSA9IChjb3VudF9wb3B1bGFyaXR5IC8gMTAwMDApLnRvRml4ZWQoMSkgKyAndyc7XFxuXFx0XFx0Ly/nsonkuJ1cXG5cXHRcXHR2YXIgY291bnRfZm9sbG93ZXIgPSBVU0VSX0pTT04uY291bnQuY291bnRfZm9sbG93ZXI7XFxuXFx0XFx0aWYgKGNvdW50X2ZvbGxvd2VyID4gMTAwMCkgY291bnRfZm9sbG93ZXIgPSAoY291bnRfZm9sbG93ZXIgLyAxMDAwKS50b0ZpeGVkKDEpICsgJ2snO1xcblxcdFxcdGFkZExpc3RlbmVyKCdvbkNsb3NlJywgJC50b1N0cmluZygoKSA9PiB7XFxuXFx0XFx0XFx0Y2xlYXJNeVZhcign5Li76aG157G75YirJyk7XFxuXFx0XFx0fSkpXFxuXFx0XFx0dmFyIHRpcHNfc2VsZWN0ID0gZ2V0TXlWYXIoXFxcIuS4u+mhteexu+WIq1xcXCIsICduZXcnKTtcXG5cXHRcXHRpZiAoUEFHRSA9PSAxKSB7XFxuXFx0XFx0XFx0ZC5wdXNoKHtcXG5cXHRcXHRcXHRcXHRjb2xfdHlwZTogJ3BpY18xX2Z1bGwnLFxcblxcdFxcdFxcdFxcdHRpdGxlOiAnMCcsXFxuXFx0XFx0XFx0XFx0aW1nOiBhcHBfYmFja2dyb3VuZCxcXG5cXHRcXHRcXHRcXHR1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG5cXHRcXHRcXHR9KTtcXG5cXHRcXHRcXHRkLnB1c2goe1xcblxcdFxcdFxcdFxcdGNvbF90eXBlOiAnYXZhdGFyJyxcXG5cXHRcXHRcXHRcXHR0aXRsZTogdXNlcl9uYW1lICsgJ1xcXFx0XFxcXHRcXFxcdFxcXFx0JyArIFxcXCI8Zm9udCBjb2xvcj1ncmV5PlxcXCIgKyAn5Lq65rCUICcgKyBjb3VudF9wb3B1bGFyaXR5ICsgJyDCtyAnICsn57KJ5LidICcgK2NvdW50X2ZvbGxvd2VyICsgXFxcIjwvZm9udD5cXFwiLFxcblxcdFxcdFxcdFxcdGltZzogdXNlcl9hdmF0YXIsXFxuXFx0XFx0XFx0XFx0dXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuXFx0XFx0XFx0fSk7XFxuXFx0XFx0XFx0ZC5wdXNoKHtcXG5cXHRcXHRcXHRcXHRjb2xfdHlwZTogJ2xpbmUnLFxcblxcdFxcdFxcdH0pO1xcblxcblxcdFxcdFxcdHZhciBDb2xvciA9IFxcXCIjRkE3Mjk4XFxcIjtcXG5cXHRcXHRcXHRmdW5jdGlvbiBnZXRIZWFkKHRpdGxlcykge1xcblxcdFxcdFxcdFxcdHJldHVybiAn4oCY4oCY4oCZ4oCZPHN0cm9uZz48Zm9udCBjb2xvcj1cXFwiJyArIENvbG9yICsgJ1xcXCI+JyArIHRpdGxlcyArICc8L2Zyb250Pjwvc3Ryb25nPic7XFxuXFx0XFx0XFx0fVxcblxcdFxcdFxcdGQucHVzaCh7XFxuXFx0XFx0XFx0XFx0Y29sX3R5cGU6ICd0ZXh0XzQnLFxcblxcdFxcdFxcdFxcdHRpdGxlOiB0aXBzX3NlbGVjdCA9PSAnbmV3JyA/IGdldEhlYWQodGl0bGVzID0gXFxcIuacgOaWsFxcXCIpIDogJ+acgOaWsCcsXFxuXFx0XFx0XFx0XFx0dXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpID0+IHtcXG5cXHRcXHRcXHRcXHRcXHRwdXRNeVZhcign5Li76aG157G75YirJywgJ25ldycpO1xcblxcdFxcdFxcdFxcdFxcdHJlZnJlc2hQYWdlKCk7XFxuXFx0XFx0XFx0XFx0XFx0cmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG5cXHRcXHRcXHRcXHR9KSxcXG5cXHRcXHRcXHR9KTtcXG5cXHRcXHRcXHRkLnB1c2goe1xcblxcdFxcdFxcdFxcdGNvbF90eXBlOiAndGV4dF80JyxcXG5cXHRcXHRcXHRcXHR0aXRsZTogdGlwc19zZWxlY3QgPT0gJ3ZpZXcnID8gZ2V0SGVhZCh0aXRsZXMgPSBcXFwi54Ot6ZeoXFxcIikgOiAn54Ot6ZeoJyxcXG5cXHRcXHRcXHRcXHR1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCkgPT4ge1xcblxcdFxcdFxcdFxcdFxcdHB1dE15VmFyKCfkuLvpobXnsbvliKsnLCAndmlldycpO1xcblxcdFxcdFxcdFxcdFxcdHJlZnJlc2hQYWdlKCk7XFxuXFx0XFx0XFx0XFx0XFx0cmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG5cXHRcXHRcXHRcXHR9KSxcXG5cXHRcXHRcXHR9KTtcXG5cXHRcXHRcXHRkLnB1c2goe1xcblxcdFxcdFxcdFxcdGNvbF90eXBlOiAndGV4dF80JyxcXG5cXHRcXHRcXHRcXHR0aXRsZTogdGlwc19zZWxlY3QgPT0gJ2NvbGxlY3Rpb25zJyA/IGdldEhlYWQodGl0bGVzID0gXFxcIuS4k+i+kVxcXCIpIDogJ+S4k+i+kScsXFxuXFx0XFx0XFx0XFx0dXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpID0+IHtcXG5cXHRcXHRcXHRcXHRcXHRwdXRNeVZhcign5Li76aG157G75YirJywgJ2NvbGxlY3Rpb25zJyk7XFxuXFx0XFx0XFx0XFx0XFx0cmVmcmVzaFBhZ2UoKTtcXG5cXHRcXHRcXHRcXHRcXHRyZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcblxcdFxcdFxcdFxcdH0pLFxcblxcdFxcdFxcdH0pO1xcblxcdFxcdFxcdGQucHVzaCh7XFxuXFx0XFx0XFx0XFx0Y29sX3R5cGU6ICd0ZXh0XzQnLFxcblxcdFxcdFxcdFxcdHRpdGxlOiB0aXBzX3NlbGVjdCA9PSAn5oC75paH56ugJyA/IGdldEhlYWQodGl0bGVzID0gXFxcIuaWh+eroFxcXCIpIDogJ+aWh+eroCcsXFxuXFx0XFx0XFx0XFx0dXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCkgPT4ge1xcblxcdFxcdFxcdFxcdFxcdHB1dE15VmFyKCfkuLvpobXnsbvliKsnLCAn5oC75paH56ugJyk7XFxuXFx0XFx0XFx0XFx0XFx0cmVmcmVzaFBhZ2UoKTtcXG5cXHRcXHRcXHRcXHRcXHRyZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcblxcdFxcdFxcdFxcdH0pLFxcblxcdFxcdFxcdH0pO1xcblxcdFxcdH1cXG5cXHRcXHQvLyDliJfooajpg6jliIZcXG5cXHRcXHRpZiAodGlwc19zZWxlY3QgPT0gJ25ldycgfHwgdGlwc19zZWxlY3QgPT0gJ3ZpZXcnKSB7XFxuXFx0XFx0XFx0ZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL3BhZ2Uv5Yib5L2c5Lq65L2c5ZOB5YiX6KGoXFxcIikpLnJ1bGUpXFxuXFx0XFx0fVxcblxcdFxcdGlmICh0aXBzX3NlbGVjdCA9PSAnY29sbGVjdGlvbnMnKSB7XFxuXFx0XFx0XFx0ZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL3BhZ2Uv5Yib5L2c5Lq65LiT6L6R5YiX6KGoXFxcIikpLnJ1bGUpXFxuXFx0XFx0fVxcblxcdFxcdGlmICh0aXBzX3NlbGVjdCA9PSAn5oC75paH56ugJykge1xcblxcdFxcdFxcdGV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9wYWdlL3dlYl/mlofnq6DliJfooahcXFwiKSkucnVsZSlcXG5cXHRcXHR9XFxuXFx0XFx0c2V0UmVzdWx0KGQpO1xcblxcdH0gY2F0Y2ggKGUpIHtcXG5cXHRcXHRiYWNrKGZhbHNlKVxcblxcdH1cXG59LCBVU0VSX0hPTUUpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLpppbpobXlm7rlrppKU09OXCIsXCJwYXRoXCI6XCLpppbpobXlm7rlrppKU09OXCIsXCJydWxlXCI6XCJ2YXIgaW5kZXhfdXJsID0gJ2h0dHBzOi8vYXBwLnhpbnBpYW5jaGFuZy5jb20vcGFnZS9kaXNjb3ZlcnknO1xcbnZhciBpbmRleF9KU09OID0gSlNPTi5wYXJzZShyZXF1ZXN0KGluZGV4X3VybCwge2hlYWRlcnM6IHsnVXNlci1BZ2VudCc6XFxcIlVzZXItQWdlbnROZXdTdHVkaW9zLzEuOS4xIChjb20ueGlucGlhbmNoYW5nLm5ld3N0dWRpb3M7IGJ1aWxkOjc4NjsgQW5kcm9pZCAxMVxcXCJ9LG1ldGhvZDogJ0dFVCd9KSkuZGF0YTtcXG5sZXQgWFBDID0gaW5kZXhfSlNPTi5jYXRlZ29yaWVzO1xcbmxldCBiYW5uZXJzID0gaW5kZXhfSlNPTi5iYW5uZXJzO1xcbnZhciB0ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYmFubmVycy5sZW5ndGgpO1xcbmJhbm5lcnMgPSBpbmRleF9KU09OLmJhbm5lcnNbdF07XFxudmFyIFBMQVlfTElOS1MgPSBiYW5uZXJzLnVybC5yZXBsYWNlKC9uZXdzdHVkaW9zLywgJ2h0dHBzJyk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLliJvkvZzkurrkvZzlk4HliJfooahcIixcInBhdGhcIjpcIuWIm+S9nOS6uuS9nOWTgeWIl+ihqFwiLFwicnVsZVwiOlwiLy8g5pe26Ze05oiz6L2s5o2iXFxuZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL3BhZ2Uv5pe26Ze05oiz6L2s5o2iXFxcIikpLnJ1bGUpO1xcbnZhciBsaXN0X3VybCA9IHVybCArICcvYXJ0aWNsZXM/aXNfaGlkZV9pbl9zcGFjZT0wJm9yZGVyPScgKyB0aXBzX3NlbGVjdCArJyZyZXR1cm5fc3RydWN0X3R5cGU9dXNlcl9ob21lJnR5cGU9cHVibGljJnBhZ2U9JyArIFBBR0U7XFxudmFyIEFQUF9KU09OID0gSlNPTi5wYXJzZShyZXF1ZXN0KGxpc3RfdXJsKSkuZGF0YTtcXG4vKnZhciB0b3RhbCA9IEFQUF9KU09OLnRvdGFsO1xcbnB1dE15VmFyKCfkvZzlk4HmlbDph48nLHRvdGFsKTsqL1xcbkFQUF9KU09OPUFQUF9KU09OLmxpc3Q7XFxuaWYgKEFQUF9KU09OLmxlbmd0aCAhPSBcXFwiXFxcIikge1xcblxcdGZvciAobGV0IGkgaW4gQVBQX0pTT04pIHtcXG5cXHRcXHR2YXIgYXBwX2NhY2hlID0gQVBQX0pTT05baV0ucmVzb3VyY2U7XFxuXFx0XFx0dmFyIFBMQVlfTElOS1MgPSBhcHBfY2FjaGUudXJsLnJlcGxhY2UoL25ld3N0dWRpb3MvLCAnaHR0cHMnKTtcXG5cXHRcXHR2YXIgbGlrZSA9IGFwcF9jYWNoZS5jb3VudC5jb3VudF9saWtlO1xcblxcdFxcdHZhciB2aWV3ID0gYXBwX2NhY2hlLmNvdW50LmNvdW50X3ZpZXc7XFxuXFx0XFx0aWYgKGxpa2UgPiAxMDAwKSBsaWtlID0gKGxpa2UgLyAxMDAwKS50b0ZpeGVkKDEpICsgJ2snO1xcblxcdFxcdGlmICh2aWV3ID4gMTAwMDApIHZpZXcgPSAodmlldyAvIDEwMDAwKS50b0ZpeGVkKDEpICsgJ3cnO1xcblxcdFxcdHZhciBpbWcgPSBhcHBfY2FjaGUuY292ZXI7XFxuXFx0XFx0dmFyIHRpdGxlID0gYXBwX2NhY2hlLnRpdGxlO1xcblxcdFxcdHZhciBwdWJsaXNoX3RpbWUgPSBhcHBfY2FjaGUucHVibGlzaF90aW1lO1xcblxcdFxcdC8vIOaXtumXtOaIs+i9rOW5tOaciOaXpVxcblxcdFxcdHB1Ymxpc2hfdGltZSA9IHRpbWVzdGFtcFRvVGltZSh0bSA9IHB1Ymxpc2hfdGltZSwgdHM9MClcXG5cXHRcXHRkLnB1c2goe1xcblxcdFxcdFxcdGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxuXFx0XFx0XFx0dGl0bGU6IHRpdGxlLFxcblxcdFxcdFxcdGRlc2M6IFxcXCLigJzigJzigJ3igJ0gPHNtYWxsPjxmb250IGNvbG9yPSdncmV5Jz5cXFwiICsgcHVibGlzaF90aW1lICsgJ1xcXFxuJyArIGxpa2UgKyAnIOWWnOasoicgKycgwrcgJyArIHZpZXcgKycg6KeC55yLJyArIFxcXCI8L2ZvbnQ+IDwvc21hbGw+XFxcIixcXG5cXHRcXHRcXHRpbWc6IGltZyxcXG5cXHRcXHRcXHR1cmw6IGV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9wYWdlL+inhumikeivpuaDhemhtVxcXCIpKS5ydWxlKSxcXG5cXHRcXHR9KTtcXG5cXHR9XFxufSBlbHNlIHtcXG5cXHRldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcImhpa2VyOi8vcGFnZS9FTkRcXFwiKSkucnVsZSlcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLliJvkvZzkurrkuJPovpHliJfooahcIixcInBhdGhcIjpcIuWIm+S9nOS6uuS4k+i+keWIl+ihqFwiLFwicnVsZVwiOlwidmFyIGxpc3RfdXJsID0gdXJsICsgJy9jb2xsZWN0aW9ucz9wYWdlPScgKyBQQUdFO1xcbnZhciBBUFBfSlNPTiA9IEpTT04ucGFyc2UocmVxdWVzdChsaXN0X3VybCkpLmRhdGEubGlzdDtcXG5pZiAoQVBQX0pTT04ubGVuZ3RoICE9IFxcXCJcXFwiKSB7XFxuXFx0Zm9yIChsZXQgaSBpbiBBUFBfSlNPTikge1xcblxcdFxcdHZhciBhcHBfY2FjaGUgPSBBUFBfSlNPTltpXTtcXG5cXHRcXHR2YXIgQWxidW1fdXJsID0gYXBwX2NhY2hlLnVybC5yZXBsYWNlKC9uZXdzdHVkaW9zLywgJ2h0dHBzJykgKyAnL2FydGljbGVzP2lzX2RldGFpbD10cnVlJnBhZ2U9JztcXG5cXHRcXHR2YXIgYmdfaW1nID0gYXBwX2NhY2hlLmNvdmVyX3VybDtcXG5cXHRcXHR2YXIgZGVzYyA9IGFwcF9jYWNoZS5kZXNjcmlwdGlvbjtcXG5cXHRcXHR2YXIgYXJ0aWNsZSA9IGFwcF9jYWNoZS5jb3VudC5jb3VudF9hcnRpY2xlO1xcblxcdFxcdHZhciBsaWtlID0gYXBwX2NhY2hlLmNvdW50LmNvdW50X2xpa2VkO1xcblxcdFxcdHZhciB2aWV3ID0gYXBwX2NhY2hlLmNvdW50LmNvdW50X3ZpZXdlZDtcXG5cXHRcXHRpZiAobGlrZSA+IDEwMDApIGxpa2UgPSAobGlrZSAvIDEwMDApLnRvRml4ZWQoMSkgKyAnayc7XFxuXFx0XFx0aWYgKHZpZXcgPiAxMDAwMCkgdmlldyA9ICh2aWV3IC8gMTAwMDApLnRvRml4ZWQoMSkgKyAndyc7XFxuXFx0XFx0dmFyIGltZyA9IGFwcF9jYWNoZS5jb3Zlcl91cmw7XFxuXFx0XFx0dmFyIHRpdGxlID0gYXBwX2NhY2hlLnRpdGxlO1xcblxcdFxcdHZhciBwdXRfdGl0bGUgPSBcXFwi4oCc4oCc4oCd4oCdIDxzbWFsbD48Zm9udCBjb2xvcj0nZ3JleSc+XFxcIiArICfkvZzlk4EgJyArIGFydGljbGUgKyAnIMK3ICcgKyAn5rWP6KeIICcgKyB2aWV3ICsgJyDCtyAnICsgJ+i1niAnICtsaWtlICsgXFxcIjwvZm9udD4gPC9zbWFsbD5cXFwiO1xcblxcdFxcdGQucHVzaCh7XFxuXFx0XFx0XFx0Y29sX3R5cGU6ICdwaWNfMV9jYXJkJyxcXG5cXHRcXHRcXHR0aXRsZTogdGl0bGUsXFxuXFx0XFx0XFx0aW1nOiBiZ19pbWcgKyAnQFJlZmVyZXI9JyArYmdfaW1nLFxcblxcdFxcdFxcdGRlc2M6ICfkvZzlk4EgJyArIGFydGljbGUgKyAnICDCtyAgJyArICfmtY/op4ggJyArIHZpZXcgKyAnICDCtyAgJyArICfotZ4gJyArIGxpa2UsXFxuXFx0XFx0XFx0dXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuXFx0XFx0XFx0dXJsOiAkKCdoaWtlcjovL2VtcHR5I2Z5cGFnZSNpbW1lcnNpdmVUaGVtZSNub0hpc3RvcnkjJykucnVsZSgoYmdfaW1nLCBwdXRfdGl0bGUsIGRlc2MsQWxidW1fdXJsKSA9PiB7XFxuXFx0XFx0XFx0XFx0XFx0dmFyIFBBR0UgPSBNWV9VUkwuc3BsaXQoJyMnKVsxXTtcXG5cXHRcXHRcXHRcXHRcXHR2YXIgZCA9IFtdO1xcblxcdFxcdFxcdFxcdFxcdHZhciB1cmwgPSBBbGJ1bV91cmwgKyBQQUdFO1xcblxcdFxcdFxcdFxcdFxcdHZhciBBUFBfSlNPTiA9IEpTT04ucGFyc2UocmVxdWVzdCh1cmwpKS5kYXRhLmxpc3Q7XFxuXFx0XFx0XFx0XFx0XFx0aWYgKFBBR0UgPT0gMSkge1xcblxcdFxcdFxcdFxcdFxcdFxcdGQucHVzaCh7XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0Y29sX3R5cGU6ICdwaWNfMV9mdWxsJyxcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHR1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRpbWc6IGJnX2ltZyxcXG5cXHRcXHRcXHRcXHRcXHRcXHR9KTtcXG5cXHRcXHRcXHRcXHRcXHRcXHRkLnB1c2goe1xcblxcdFxcdFxcdFxcdFxcdFxcdFxcdGNvbF90eXBlOiAndGV4dF8xJyxcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHR0aXRsZTogcHV0X3RpdGxlLFxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdHVybDogJ2hpa2VyOi8vZW1wdHknLFxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdGV4dHJhOiB7XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0bGluZVZpc2libGU6IGZhbHNlXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0fVxcblxcdFxcdFxcdFxcdFxcdFxcdH0pO1xcblxcdFxcdFxcdFxcdFxcdFxcdGQucHVzaCh7XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0Y29sX3R5cGU6ICdyaWNoX3RleHQnLFxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdHRpdGxlOiBcXFwiPHNtYWxsPjxmb250IGNvbG9yPSdncmV5Jz5cXFwiICsgZGVzYyArXFxcIjwvZm9udD4gPC9zbWFsbD5cXFwiLFxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdHVybDogJ2hpa2VyOi8vZW1wdHknLFxcblxcdFxcdFxcdFxcdFxcdFxcdH0pO1xcblxcdFxcdFxcdFxcdFxcdH1cXG5cXHRcXHRcXHRcXHRcXHRpZiAoQVBQX0pTT04ubGVuZ3RoICE9IFxcXCJcXFwiKSB7XFxuXFx0XFx0XFx0XFx0XFx0XFx0Zm9yIChsZXQgaSBpbiBBUFBfSlNPTikge1xcblxcdFxcdFxcdFxcdFxcdFxcdFxcdHZhciBQTEFZX0xJTktTID0gQVBQX0pTT05baV0udXJsLnJlcGxhY2UoL25ld3N0dWRpb3MvLCAnaHR0cHMnKTtcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHR2YXIgdGl0bGUgPSBBUFBfSlNPTltpXS50aXRsZTtcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHR2YXIgaW1nID0gQVBQX0pTT05baV0uY292ZXI7XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0dmFyIGNhdCA9IEFQUF9KU09OW2ldLmNhdGVnb3JpZXM7XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0dmFyIGNhdF9hbGwgPSBbXVxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdGZvciAodmFyIGkgaW4gY2F0KSB7XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0dmFyIGNhdF8xID0gY2F0W2ldLmNhdGVnb3J5X25hbWU7XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0dmFyIGNhdF8yID0gY2F0W2ldLnN1Yi5jYXRlZ29yeV9uYW1lO1xcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGNhdF9hbGwucHVzaChcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRjYXRfMSArICctJyArIGNhdF8yICsgJyBcXHQnXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0KVxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdH1cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRjYXRfYWxsID0gY2F0X2FsbC5qb2luKFxcXCJcXFwiKVxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdHZhciBjYXRfdGl0bGUgPSAn4oCc4oCc4oCd4oCdPHNtYWxsPjxmb250IGNvbG9yPWdyZXk+JyArIGNhdF9hbGwgKyAnPC9mb250Pjwvc21hbGw+JztcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRkLnB1c2goe1xcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0dGl0bGU6IHRpdGxlLFxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGRlc2M6IGNhdF90aXRsZSxcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRpbWc6IGltZyxcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHR1cmw6IGV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9wYWdlL+inhumikeivpuaDhemhtVxcXCIpKS5ydWxlKSxcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHR9KTtcXG5cXHRcXHRcXHRcXHRcXHRcXHR9XFxuXFx0XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG5cXHRcXHRcXHRcXHRcXHRcXHRldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcImhpa2VyOi8vcGFnZS9FTkRcXFwiKSkucnVsZSlcXG5cXHRcXHRcXHRcXHRcXHR9XFxuXFx0XFx0XFx0XFx0XFx0c2V0UmVzdWx0KGQpO1xcblxcdFxcdFxcdFxcdH0sIGJnX2ltZywgcHV0X3RpdGxlLCBkZXNjLCBBbGJ1bV91cmwpLFxcblxcdFxcdH0pO1xcblxcdH1cXG59IGVsc2Uge1xcblxcdGV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9wYWdlL0VORFxcXCIpKS5ydWxlKVxcbn1cIn0se1wiY29sX3R5cGVcIjpcInRleHRfMVwiLFwibmFtZVwiOlwi6KeG6aKR6K+m5oOF6aG1XCIsXCJwYXRoXCI6XCLop4bpopHor6bmg4XpobVcIixcInJ1bGVcIjpcIiQoJ2hpa2VyOi8vZW1wdHkjZnlwYWdlI2ltbWVyc2l2ZVRoZW1lIyNub0hpc3RvcnkjJykucnVsZSgoUExBWV9MSU5LUykgPT4ge1xcblxcdHZhciBQQUdFID0gTVlfVVJMLnNwbGl0KCcjJylbMV07XFxuXFx0dmFyIGQgPSBbXTtcXG5cXHQvLyDlpLTpg6hcXG5cXHQvLyB2YXIgdXJsID0gVVNFUl9IT01FO1xcblxcdC8vIFBMQVlfTElOS1NcXG5cXHRhZGRMaXN0ZW5lcignb25DbG9zZScsICQudG9TdHJpbmcoKCkgPT4ge1xcblxcdFxcdGNsZWFyTXlWYXIoJ+S9nOiAhScpO1xcblxcdFxcdGNsZWFyTXlWYXIoJ+ivpue7huexu+WIqycpO1xcblxcdFxcdGNsZWFyTXlWYXIoXFxcIuebuOS8vOinhumikVxcXCIpO1xcblxcdH0pKVxcblxcdC8vIOaXtumXtOaIs+i9rOaNolxcblxcdGV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9wYWdlL+aXtumXtOaIs+i9rOaNolxcXCIpKS5ydWxlKTtcXG5cXHR2YXIgdGlwc19zZWxlY3QgPSBnZXRNeVZhcihcXFwi6K+m57uG57G75YirXFxcIiwgJ+eugOS7iycpO1xcblxcdGlmICh0aXBzX3NlbGVjdCA9PSAn6K+E6K66JykgY2xlYXJNeVZhcihcXFwi55u45Ly86KeG6aKRXFxcIik7XFxuXFx0dmFyIHRpcHNfYWxpa2UgPSBnZXRNeVZhcihcXFwi55u45Ly86KeG6aKRXFxcIik7XFxuXFx0dmFyIHVybCA9IFBMQVlfTElOS1M7XFxuXFxuXFx0dmFyIERBVEFfSlNPTiA9IEpTT04ucGFyc2UocmVxdWVzdCh1cmwpKS5kYXRhO1xcblxcdHZhciBJRCA9IERBVEFfSlNPTi5pZDtcXG5cXHRsZXQgY29tbWVudF91cmwgPSBcXFwiaHR0cHM6Ly9hcHAueGlucGlhbmNoYW5nLmNvbS9jb21tZW50cz9yZXNvdXJjZV9pZD1cXFwiICsgSUQgKyBcXFwiJnR5cGU9YXJ0aWNsZSZwYWdlPVxcXCIgKyBQQUdFO1xcblxcdHZhciBDT01NRU5UX0pTT04gPSBKU09OLnBhcnNlKHJlcXVlc3QoY29tbWVudF91cmwpKS5kYXRhO1xcblxcdC8vIOivhOiuuuaAu+aVsFxcblxcdHZhciB0b3RhbCA9IENPTU1FTlRfSlNPTi50b3RhbDtcXG5cXHR2YXIgUExBWV9MSU5LUyA9IERBVEFfSlNPTi51cmwucmVwbGFjZSgvbmV3c3R1ZGlvcy8sICdodHRwcycpO1xcblxcdHZhciBiZ19pbWcgPSBEQVRBX0pTT04uY292ZXI7XFxuXFx0dmFyIHRpdGxlID0gREFUQV9KU09OLnRpdGxlO1xcblxcdHNldFBhZ2VUaXRsZShEQVRBX0pTT04udGl0bGUpXFxuXFx0Ly8g5YiG57G7W2ldLmNhdGVnb3J5X25hbWUuc3ViLmNhdGVnb3J5X25hbWVcXG5cXHR2YXIgY2F0ID0gREFUQV9KU09OLmNhdGVnb3JpZXM7XFxuXFx0Ly8g5Y+R5biD5pe26Ze0XFxuXFx0dmFyIHB1Ymxpc2hfdGltZSA9IERBVEFfSlNPTi5wdWJsaXNoX3RpbWU7XFxuXFx0cHVibGlzaF90aW1lID0gdGltZXN0YW1wVG9UaW1lKHRtID0gcHVibGlzaF90aW1lLCB0cyA9IDApXFxuXFx0Ly8g5pKt5pS+6YePXFxuXFx0dmFyIHZpZXcgPSBEQVRBX0pTT04uY291bnQuY291bnRfdmlldztcXG5cXHRpZiAodmlldyA+IDEwMDAwKSB2aWV3ID0gKHZpZXcgLyAxMDAwMCkudG9GaXhlZCgxKSArICd3JztcXG5cXHQvLyDnroDku4tcXG5cXHR2YXIgY29udGVudCA9IERBVEFfSlNPTi5jb250ZW50O1xcblxcdC8vIOWWnOasoueCuei1nlxcblxcdHZhciBsaWtlID0gREFUQV9KU09OLmNvdW50LmNvdW50X2xpa2U7XFxuXFx0aWYgKGxpa2UgPiAxMDAwKSBsaWtlID0gKGxpa2UgLyAxMDAwKS50b0ZpeGVkKDEpICsgJ2snO1xcblxcdC8vIOaUtuiXj1xcblxcdHZhciBjb2xsZWN0ID0gREFUQV9KU09OLmNvdW50LmNvdW50X2NvbGxlY3Q7XFxuXFx0aWYgKGNvbGxlY3QgPiAxMDAwKSBjb2xsZWN0ID0gKGNvbGxlY3QgLyAxMDAwKS50b0ZpeGVkKDEpICsgJ2snO1xcblxcdC8vIOWIhuS6q1xcblxcdHZhciBzaGFyZSA9IERBVEFfSlNPTi5jb3VudC5jb3VudF9zaGFyZTtcXG5cXHRpZiAoc2hhcmUgPiAxMDAwKSBzaGFyZSA9IChzaGFyZSAvIDEwMDApLnRvRml4ZWQoMSkgKyAnayc7XFxuXFx0Ly8g5qCH562+W2ldLm5hbWVcXG5cXHR2YXIgdGFncyA9IERBVEFfSlNPTi50YWdzO1xcblxcdC8vIOWIm+S9nOS6ui51cmwo5Li76aG1KS51c2VybmFtZSjlkI3lrZcpLmF2YXRhcijlkI3lrZcpXFxuXFx0dmFyIHVzZXIgPSBEQVRBX0pTT04uYXV0aG9yLnVzZXJpbmZvO1xcblxcdHB1dE15VmFyKCfkvZzogIUnLCB1c2VyLnVzZXJuYW1lKTtcXG5cXG5cXHRpZiAoUEFHRSA9PSAxKSB7XFxuXFx0XFx0ZC5wdXNoKHtcXG5cXHRcXHRcXHRjb2xfdHlwZTogJ3BpY18xX2Z1bGwnLFxcblxcdFxcdFxcdHRpdGxlOiAnMCcsXFxuXFx0XFx0XFx0aW1nOiBiZ19pbWcsXFxuXFx0XFx0XFx0dXJsOiAkKCkubGF6eVJ1bGUoKERBVEFfSlNPTikgPT4ge1xcblxcdFxcdFxcdFxcdHZhciBwbGF5X3VybHMgPSBEQVRBX0pTT04udmlkZW8uY29udGVudC5wcm9ncmVzc2l2ZTtcXG5cXHRcXHRcXHRcXHQvLyDlvIDlp4vojrflj5blvLnluZVcXG5cXHRcXHRcXHRcXHR2YXIgZGFubWFrdSA9IERBVEFfSlNPTi52aWQ7XFxuXFx0XFx0XFx0XFx0dmFyIGRhbm11ID0gJ2h0dHBzOi8vb3NzLWRhbm1ha3UxMi54cGNjZG4uY29tLycgKyBkYW5tYWt1ICsgJy50eHQnO1xcblxcdFxcdFxcdFxcdHZhciBjb2RlID0gcmVxdWVzdChkYW5tdSlcXG5cXHRcXHRcXHRcXHR2YXIgYXJyID0gY29kZS5zcGxpdChcXFwiXFxcXG5cXFwiKVxcblxcdFxcdFxcdFxcdHZhciByID0gW11cXG5cXHRcXHRcXHRcXHRmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xcblxcdFxcdFxcdFxcdFxcdHRyeSB7XFxuXFx0XFx0XFx0XFx0XFx0XFx0dmFyIGxpbmUgPSBKU09OLnBhcnNlKGFycltpXSlcXG5cXHRcXHRcXHRcXHRcXHRcXHRpZiAobGluZS5jb250ZW50KSB7XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0ci5wdXNoKHtcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHR0ZXh0OiBsaW5lLmNvbnRlbnQsXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0dGltZTogbGluZS5vZmZzZXRcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHR9KVxcblxcdFxcdFxcdFxcdFxcdFxcdH1cXG5cXHRcXHRcXHRcXHRcXHR9IGNhdGNoIChlKSB7fVxcblxcdFxcdFxcdFxcdH1cXG5cXHRcXHRcXHRcXHR3cml0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvZGFubXUuanNvblxcXCIsIEpTT04uc3RyaW5naWZ5KHIpKVxcblxcdFxcdFxcdFxcdC8vIOiOt+WPluW8ueW5lVxcblxcdFxcdFxcdFxcdGxldCB1cmxzID0gW107XFxuXFx0XFx0XFx0XFx0bGV0IG5hbWVzID0gW107XFxuXFx0XFx0XFx0XFx0Zm9yIChsZXQgaiBpbiBwbGF5X3VybHMpIHtcXG5cXHRcXHRcXHRcXHRcXHR1cmxzLnB1c2gocGxheV91cmxzW2pdLnVybClcXG5cXHRcXHRcXHRcXHRcXHRuYW1lcy5wdXNoKHBsYXlfdXJsc1tqXS5wcm9maWxlKVxcblxcdFxcdFxcdFxcdH1cXG5cXHRcXHRcXHRcXHR2YXIgYWxsX3VybCA9IEpTT04uc3RyaW5naWZ5KHtcXG5cXHRcXHRcXHRcXHRcXHR1cmxzOiB1cmxzLFxcblxcdFxcdFxcdFxcdFxcdG5hbWVzOiBuYW1lcyxcXG5cXHRcXHRcXHRcXHRcXHRkYW5tdTogXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvZGFubXUuanNvblxcXCJcXG5cXHRcXHRcXHRcXHR9KVxcblxcdFxcdFxcdFxcdC8vXFx0bG9nKGFsbF91cmwpXFxuXFx0XFx0XFx0XFx0cmV0dXJuIGFsbF91cmxcXG5cXHRcXHRcXHR9LCBEQVRBX0pTT04pLFxcblxcdFxcdH0pO1xcblxcdFxcdHZhciBDb2xvciA9IFxcXCIjRkE3Mjk4XFxcIjtcXG5cXG5cXHRcXHRmdW5jdGlvbiBnZXRIZWFkKHRpdGxlcykge1xcblxcdFxcdFxcdHJldHVybiAn4oCY4oCY4oCZ4oCZPHN0cm9uZz48Zm9udCBjb2xvcj1cXFwiJyArIENvbG9yICsgJ1xcXCI+JyArIHRpdGxlcyArICc8L2Zyb250Pjwvc3Ryb25nPic7XFxuXFx0XFx0fVxcblxcdFxcdGQucHVzaCh7XFxuXFx0XFx0XFx0Y29sX3R5cGU6ICd0ZXh0XzInLFxcblxcdFxcdFxcdHRpdGxlOiB0aXBzX3NlbGVjdCA9PSAn566A5LuLJyA/IGdldEhlYWQodGl0bGVzID0gXFxcIueugOS7i1xcXCIpIDogJ+eugOS7iycsXFxuXFx0XFx0XFx0dXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpID0+IHtcXG5cXHRcXHRcXHRcXHRwdXRNeVZhcign6K+m57uG57G75YirJywgJ+eugOS7iycpO1xcblxcdFxcdFxcdFxcdHJlZnJlc2hQYWdlKCk7XFxuXFx0XFx0XFx0XFx0cmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG5cXHRcXHRcXHR9KSxcXG5cXHRcXHR9KTtcXG5cXHRcXHR2YXIg6K+E6K66ID0gJ+ivhOiuuiAnICsgJ+KAmOKAmCcgKyB0b3RhbCArICfigJnigJknO1xcblxcdFxcdGQucHVzaCh7XFxuXFx0XFx0XFx0Y29sX3R5cGU6ICd0ZXh0XzInLFxcblxcdFxcdFxcdHRpdGxlOiB0aXBzX3NlbGVjdCA9PSAn6K+E6K66JyA/IGdldEhlYWQodGl0bGVzID0g6K+E6K66KSA6IOivhOiuuixcXG5cXHRcXHRcXHR1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCkgPT4ge1xcblxcdFxcdFxcdFxcdHB1dE15VmFyKCfor6bnu4bnsbvliKsnLCAn6K+E6K66Jyk7XFxuXFx0XFx0XFx0XFx0cmVmcmVzaFBhZ2UoKTtcXG5cXHRcXHRcXHRcXHRyZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcblxcdFxcdFxcdH0pLFxcblxcdFxcdH0pO1xcblxcdFxcdGQucHVzaCh7XFxuXFx0XFx0XFx0Y29sX3R5cGU6ICdsaW5lJyxcXG5cXHRcXHR9KTtcXG5cXHRcXHQvLyDku4XnroDku4vpobVcXG5cXHRcXHRpZiAodGlwc19zZWxlY3QgPT0gJ+eugOS7iycpIHtcXG5cXHRcXHRcXHR2YXIgVVNFUl9IT01FID0gdXNlci51cmwucmVwbGFjZSgvbmV3c3R1ZGlvcy8sICdodHRwcycpO1xcblxcdFxcdFxcdHZhciBkb3dubG9hZF91cmwgPSBEQVRBX0pTT04udmlkZW8uY29udGVudC5wcm9ncmVzc2l2ZVswXS51cmw7XFxuXFx0XFx0XFx0ZC5wdXNoKHtcXG5cXHRcXHRcXHRcXHRjb2xfdHlwZTogJ3RleHRfMScsXFxuXFx0XFx0XFx0XFx0dGl0bGU6ICfigJzigJzigJ3igJ08Yj48Zm9udCBjb2xvcj0jMDAwPicgKyB0aXRsZSArICc8L2ZvbnQ+PC9iPicsXFxuXFx0XFx0XFx0XFx0dXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuXFx0XFx0XFx0XFx0ZXh0cmE6IHtcXG5cXHRcXHRcXHRcXHRcXHRsaW5lVmlzaWJsZTogZmFsc2VcXG5cXHRcXHRcXHRcXHR9XFxuXFx0XFx0XFx0fSk7XFxuXFx0XFx0XFx0dmFyIGNhdF9hbGwgPSBbXVxcblxcdFxcdFxcdGZvciAodmFyIGkgaW4gY2F0KSB7XFxuXFx0XFx0XFx0XFx0dmFyIGNhdF8xID0gY2F0W2ldLmNhdGVnb3J5X25hbWU7XFxuXFx0XFx0XFx0XFx0dmFyIGNhdF8yID0gY2F0W2ldLnN1Yi5jYXRlZ29yeV9uYW1lO1xcblxcdFxcdFxcdFxcdGNhdF9hbGwucHVzaChcXG5cXHRcXHRcXHRcXHRcXHRjYXRfMSArICctJyArIGNhdF8yICsgJyBcXHQnXFxuXFx0XFx0XFx0XFx0KVxcblxcdFxcdFxcdH1cXG5cXHRcXHRcXHRjYXRfYWxsID0gY2F0X2FsbC5qb2luKFxcXCJcXFwiKVxcblxcdFxcdFxcdHZhciBjYXRfdGl0bGUgPSAn4oCc4oCc4oCd4oCdPHNtYWxsPjxmb250IGNvbG9yPWdyZXk+JyArIGNhdF9hbGwgKyAnIFxcdCcgKyBwdWJsaXNoX3RpbWUgKyAnIFxcdFxcdCcgKyB2aWV3ICtcXG5cXHRcXHRcXHRcXHQn5qyh5pKt5pS+JyArICc8L2ZvbnQ+PC9zbWFsbD4nO1xcblxcdFxcdFxcdGQucHVzaCh7XFxuXFx0XFx0XFx0XFx0dGl0bGU6IGNhdF90aXRsZSxcXG5cXHRcXHRcXHRcXHR1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG5cXHRcXHRcXHRcXHRjb2xfdHlwZTogJ3RleHRfMScsXFxuXFx0XFx0XFx0XFx0ZXh0cmE6IHtcXG5cXHRcXHRcXHRcXHRcXHRsaW5lVmlzaWJsZTogZmFsc2VcXG5cXHRcXHRcXHRcXHR9XFxuXFx0XFx0XFx0fSk7XFxuXFx0XFx0XFx0ZC5wdXNoKHtcXG5cXHRcXHRcXHRcXHRjb2xfdHlwZTogJ3JpY2hfdGV4dCcsXFxuXFx0XFx0XFx0XFx0dGl0bGU6IFxcXCI8c21hbGw+PGZvbnQgY29sb3I9MDAwPlxcXCIgKyBjb250ZW50ICsgXFxcIjwvZm9udD4gPC9zbWFsbD5cXFwiLFxcblxcdFxcdFxcdFxcdHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcblxcdFxcdFxcdH0pO1xcblxcdFxcdFxcdGQucHVzaCh7XFxuXFx0XFx0XFx0XFx0dGl0bGU6IGxpa2UsXFxuXFx0XFx0XFx0XFx0cGljX3VybDogJ2h0dHA6Ly84Mi4xNTYuMjIyLjc3L3dlaXN5ci9pY29uL2Jic+eCuei1ni5zdmcnLFxcblxcdFxcdFxcdFxcdHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcblxcdFxcdFxcdFxcdGNvbF90eXBlOiAnaWNvbl9zbWFsbF80JyxcXG5cXHRcXHRcXHR9KVxcblxcdFxcdFxcdGQucHVzaCh7XFxuXFx0XFx0XFx0XFx0dGl0bGU6IGNvbGxlY3QsXFxuXFx0XFx0XFx0XFx0cGljX3VybDogJ2h0dHA6Ly84Mi4xNTYuMjIyLjc3L3dlaXN5ci9pY29uL2Jic+aUtuiXjy5zdmcnLFxcblxcdFxcdFxcdFxcdHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcblxcdFxcdFxcdFxcdGNvbF90eXBlOiAnaWNvbl9zbWFsbF80JyxcXG5cXHRcXHRcXHR9KVxcblxcdFxcdFxcdGQucHVzaCh7XFxuXFx0XFx0XFx0XFx0dGl0bGU6IHNoYXJlLFxcblxcdFxcdFxcdFxcdHBpY191cmw6ICdodHRwOi8vODIuMTU2LjIyMi43Ny93ZWlzeXIvaWNvbi9iYnPliIbkuqsuc3ZnJyxcXG5cXHRcXHRcXHRcXHR1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG5cXHRcXHRcXHRcXHRjb2xfdHlwZTogJ2ljb25fc21hbGxfNCcsXFxuXFx0XFx0XFx0fSlcXG5cXHRcXHRcXHRkLnB1c2goe1xcblxcdFxcdFxcdFxcdHRpdGxlOiAn5LiL6L29JyxcXG5cXHRcXHRcXHRcXHRwaWNfdXJsOiAnaHR0cDovLzgyLjE1Ni4yMjIuNzcvd2Vpc3lyL2ljb24vYmJz5LiL6L29LnN2ZycsXFxuXFx0XFx0XFx0XFx0dXJsOiAnZG93bmxvYWQ6Ly8nICsgZG93bmxvYWRfdXJsLFxcblxcdFxcdFxcdFxcdGNvbF90eXBlOiAnaWNvbl9zbWFsbF80JyxcXG5cXHRcXHRcXHR9KVxcblxcdFxcdFxcdGQucHVzaCh7XFxuXFx0XFx0XFx0XFx0Y29sX3R5cGU6ICdsaW5lJyxcXG5cXHRcXHRcXHR9KTtcXG5cXHRcXHRcXHRmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcXG5cXHRcXHRcXHRcXHRkLnB1c2goe1xcblxcdFxcdFxcdFxcdFxcdGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxuXFx0XFx0XFx0XFx0fSlcXG5cXHRcXHRcXHR9XFxuXFx0XFx0XFx0ZC5wdXNoKHtcXG5cXHRcXHRcXHRcXHRjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJyxcXG5cXHRcXHRcXHR9KTtcXG5cXHRcXHRcXHRmb3IgKGxldCBpIGluIHRhZ3MpIHtcXG5cXHRcXHRcXHRcXHR2YXIgdGFnID0gdGFnc1tpXS5uYW1lO1xcblxcdFxcdFxcdFxcdGQucHVzaCh7XFxuXFx0XFx0XFx0XFx0XFx0dGl0bGU6ICfigJzigJzigJ3igJ08c21hbGw+PGZvbnQgY29sb3I9Z3JleT4nICsgdGFnICsgJzwvZm9udD48L3NtYWxsPicsXFxuXFx0XFx0XFx0XFx0XFx0Y29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG5cXHRcXHRcXHRcXHRcXHR1cmw6ICQoKS5sYXp5UnVsZSgodGFnKSA9PiB7XFxuXFx0XFx0XFx0XFx0XFx0XFx0cHV0TXlWYXIoJ+aQnOWFs+mUruWtlycsIHRhZyk7XFxuXFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9wYWdlL+i/m+WFpeaQnOe0oumhtVxcXCIpKS5ydWxlKTtcXG5cXHRcXHRcXHRcXHRcXHR9LCB0YWcpLFxcblxcdFxcdFxcdFxcdH0pXFxuXFx0XFx0XFx0fVxcblxcdFxcdFxcdGQucHVzaCh7XFxuXFx0XFx0XFx0XFx0Y29sX3R5cGU6ICdsaW5lJyxcXG5cXHRcXHRcXHR9KTtcXG5cXHRcXHRcXHRmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcXG5cXHRcXHRcXHRcXHRkLnB1c2goe1xcblxcdFxcdFxcdFxcdFxcdGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxuXFx0XFx0XFx0XFx0fSlcXG5cXHRcXHRcXHR9XFxuXFx0XFx0XFx0ZC5wdXNoKHtcXG5cXHRcXHRcXHRcXHRjb2xfdHlwZTogJ3RleHRfMScsXFxuXFx0XFx0XFx0XFx0dGl0bGU6ICfigJzigJzigJ3igJ08Yj48Zm9udCBjb2xvcj0jMDAwPicgKyAn5Yib5L2c5Lq6JyArICc8L2ZvbnQ+PC9iPicsXFxuXFx0XFx0XFx0XFx0dXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuXFx0XFx0XFx0XFx0ZXh0cmE6IHtcXG5cXHRcXHRcXHRcXHRcXHRsaW5lVmlzaWJsZTogZmFsc2VcXG5cXHRcXHRcXHRcXHR9XFxuXFx0XFx0XFx0fSk7XFxuXFx0XFx0XFx0ZC5wdXNoKHtcXG5cXHRcXHRcXHRcXHR0aXRsZTogdXNlci51c2VybmFtZSxcXG5cXHRcXHRcXHRcXHRpbWc6IHVzZXIuYXZhdGFyICsgJ0BSZWZlcmVyPScgKyB1c2VyLmF2YXRhcixcXG5cXHRcXHRcXHRcXHR1cmw6IGV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9wYWdlL+WIm+S9nOS6uummlumhtVxcXCIpKS5ydWxlKSxcXG5cXHRcXHRcXHRcXHRjb2xfdHlwZTogJ2ljb25fMl9yb3VuZCcsXFxuXFx0XFx0XFx0fSlcXG5cXHRcXHRcXHRmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcXG5cXHRcXHRcXHRcXHRkLnB1c2goe1xcblxcdFxcdFxcdFxcdFxcdGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxuXFx0XFx0XFx0XFx0fSlcXG5cXHRcXHRcXHR9XFxuXFx0XFx0XFx0ZC5wdXNoKHtcXG5cXHRcXHRcXHRcXHRjb2xfdHlwZTogJ2xpbmUnLFxcblxcdFxcdFxcdH0pO1xcblxcdFxcdFxcdGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xcblxcdFxcdFxcdFxcdGQucHVzaCh7XFxuXFx0XFx0XFx0XFx0XFx0Y29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCJcXG5cXHRcXHRcXHRcXHR9KVxcblxcdFxcdFxcdH1cXG5cXHRcXHRcXHRkLnB1c2goe1xcblxcdFxcdFxcdFxcdGNvbF90eXBlOiAndGV4dF8xJyxcXG5cXHRcXHRcXHRcXHR0aXRsZTogJ+KAnOKAnOKAneKAnTxiPjxmb250IGNvbG9yPSMwMDA+JyArICfnm7jkvLzop4bpopEnICsgJzwvZm9udD48L2I+JyxcXG5cXHRcXHRcXHRcXHR1cmw6ICQoKS5sYXp5UnVsZSgoKSA9PiB7XFxuXFx0XFx0XFx0XFx0XFx0cHV0TXlWYXIoJ+ebuOS8vOinhumikScsICfnm7jkvLzop4bpopEnKTtcXG5cXHRcXHRcXHRcXHRcXHRyZWZyZXNoUGFnZSgpO1xcblxcdFxcdFxcdFxcdFxcdHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG5cXHRcXHRcXHRcXHR9KSxcXG5cXHRcXHRcXHRcXHRleHRyYToge1xcblxcdFxcdFxcdFxcdFxcdGxpbmVWaXNpYmxlOiBmYWxzZVxcblxcdFxcdFxcdFxcdH1cXG5cXHRcXHRcXHR9KTtcXG5cXHRcXHRcXHQvLyDnm7jkvLzop4bpopFcXG5cXHRcXHRcXHRpZiAodGlwc19hbGlrZSA9PSAn55u45Ly86KeG6aKRJykge1xcblxcdFxcdFxcdFxcdHZhciBuZXh0X3VybCA9IHVybCArICcvbmV4dCc7XFxuXFx0XFx0XFx0XFx0dmFyIE5FWFRfSlNPTiA9IEpTT04ucGFyc2UocmVxdWVzdChuZXh0X3VybCkpLmRhdGEubGlzdDtcXG5cXHRcXHRcXHRcXHRmb3IgKGxldCBpIGluIE5FWFRfSlNPTikge1xcblxcdFxcdFxcdFxcdFxcdHZhciBQTEFZX0xJTktTID0gTkVYVF9KU09OW2ldLnVybC5yZXBsYWNlKC9uZXdzdHVkaW9zLywgJ2h0dHBzJyk7XFxuXFx0XFx0XFx0XFx0XFx0dmFyIG5leHRfdGl0bGUgPSBORVhUX0pTT05baV0udGl0bGU7XFxuXFx0XFx0XFx0XFx0XFx0dmFyIG5leHRfY292ZXIgPSBORVhUX0pTT05baV0uY292ZXI7XFxuXFx0XFx0XFx0XFx0XFx0dmFyIG5leHRfdGl0bGUgPSBORVhUX0pTT05baV0udGl0bGU7XFxuXFx0XFx0XFx0XFx0XFx0dmFyIG5leHRfdmlldyA9IE5FWFRfSlNPTltpXS5jb3VudC5jb3VudF92aWV3O1xcblxcdFxcdFxcdFxcdFxcdGlmIChuZXh0X3ZpZXcgPiAxMDAwMCkgbmV4dF92aWV3ID0gKG5leHRfdmlldyAvIDEwMDAwKS50b0ZpeGVkKDEpICsgJ3cnO1xcblxcdFxcdFxcdFxcdFxcdHZhciBuZXh0X2xpa2UgPSBORVhUX0pTT05baV0uY291bnQuY291bnRfbGlrZTtcXG5cXHRcXHRcXHRcXHRcXHRpZiAobmV4dF9saWtlID4gMTAwMCkgbmV4dF9saWtlID0gKG5leHRfbGlrZSAvIDEwMDApLnRvRml4ZWQoMSkgKyAnayc7XFxuXFx0XFx0XFx0XFx0XFx0dmFyIG5leHRfdXNlciA9IE5FWFRfSlNPTltpXS5hdXRob3IudXNlcmluZm8udXNlcm5hbWU7XFxuXFx0XFx0XFx0XFx0XFx0ZC5wdXNoKHtcXG5cXHRcXHRcXHRcXHRcXHRcXHRjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcblxcdFxcdFxcdFxcdFxcdFxcdHRpdGxlOiBuZXh0X3RpdGxlLFxcblxcdFxcdFxcdFxcdFxcdFxcdGRlc2M6IFxcXCLigJzigJzigJ3igJ0gPHNtYWxsPjxmb250IGNvbG9yPSdncmV5Jz5cXFwiICsgJ+aSreaUvumHjyAnICsgbmV4dF92aWV3ICsgJyDCtyDllpzmrKIgJyArXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0bmV4dF9saWtlICsgJ1xcXFxuJyArIG5leHRfdXNlciArIFxcXCI8L2ZvbnQ+IDwvc21hbGw+XFxcIixcXG5cXHRcXHRcXHRcXHRcXHRcXHRpbWc6IG5leHRfY292ZXIsXFxuXFx0XFx0XFx0XFx0XFx0XFx0dXJsOiBldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcImhpa2VyOi8vcGFnZS/op4bpopHor6bmg4XpobVcXFwiKSkucnVsZSksXFxuXFx0XFx0XFx0XFx0XFx0fSk7XFxuXFx0XFx0XFx0XFx0fVxcblxcdFxcdFxcdH1cXG5cXG5cXHRcXHR9XFxuXFx0XFx0Ly8g57uT5p2f566A5LuL6aG1XFxuXFx0fVxcblxcdC8vIOe7k+adn+S7heesrOS4gOmhtVxcblxcdGlmICh0aXBzX3NlbGVjdCA9PSAn6K+E6K66Jykge1xcblxcdFxcdHZhciBjYWNoZV9qc29uID0gQ09NTUVOVF9KU09OLmxpc3Q7XFxuXFx0XFx0Ly/ml6Dor4TorrpcXG5cXHRcXHRpZiAodG90YWwgPT0gMCAmJiBQQUdFID09IDEpIHtcXG5cXHRcXHRcXHRmb3IgKGxldCBpID0gMDsgaSA8IDMwOyBpKyspIHtcXG5cXHRcXHRcXHRcXHRkLnB1c2goe1xcblxcdFxcdFxcdFxcdFxcdGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxuXFx0XFx0XFx0XFx0fSlcXG5cXHRcXHRcXHR9XFxuXFx0XFx0XFx0ZC5wdXNoKHtcXG5cXHRcXHRcXHRcXHR0aXRsZTogXFxcIuKAnOKAnOKAneKAnSA8c21hbGw+PGZvbnQgY29sb3I9J2dyZXknPlxcXCIgKyAn4oCU4oCUICAg5pqC5peg6K+E6K66ICAg4oCU4oCUJyArIFxcXCI8L2ZvbnQ+IDwvc21hbGw+XFxcIixcXG5cXHRcXHRcXHRcXHRjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcblxcdFxcdFxcdFxcdGV4dHJhOiB7XFxuXFx0XFx0XFx0XFx0XFx0bGluZVZpc2libGU6IGZhbHNlXFxuXFx0XFx0XFx0XFx0fVxcblxcdFxcdFxcdH0pXFxuXFx0XFx0fVxcblxcdFxcdGlmIChjYWNoZV9qc29uLmxlbmd0aCAhPSBcXFwiXFxcIikge1xcblxcdFxcdFxcdGZvciAobGV0IGkgaW4gY2FjaGVfanNvbikge1xcblxcdFxcdFxcdFxcdHZhciBVU0VSX0hPTUUgPSAnaHR0cHM6Ly9hcHAueGlucGlhbmNoYW5nLmNvbS91c2VyLycgKyBjYWNoZV9qc29uW2ldLnVzZXJpZDtcXG5cXHRcXHRcXHRcXHR2YXIgdXNlcl9hdmF0YXIgPSBjYWNoZV9qc29uW2ldLnVzZXJJbmZvLmF2YXRhcjtcXG5cXHRcXHRcXHRcXHR2YXIgdXNlcl91c2VybmFtZSA9IGNhY2hlX2pzb25baV0udXNlckluZm8udXNlcm5hbWU7XFxuXFx0XFx0XFx0XFx0aWYgKGdldE15VmFyKCfkvZzogIUnKSA9PSB1c2VyX3VzZXJuYW1lKSB1c2VyX3VzZXJuYW1lID0gJzxmb250IGNvbG9yPSNlZDlhNDE+JyArIHVzZXJfdXNlcm5hbWUgK1xcblxcdFxcdFxcdFxcdFxcdCc8L2ZvbnQ+JztcXG5cXHRcXHRcXHRcXHQvLyDor4TorrrlhoXlrrlcXG5cXHRcXHRcXHRcXHR2YXIgY29udGVudCA9IGNhY2hlX2pzb25baV0uY29udGVudDtcXG5cXHRcXHRcXHRcXHQvLyDor4Torrrml7bpl7RcXG5cXHRcXHRcXHRcXHR2YXIgYWRkdGltZSA9IGNhY2hlX2pzb25baV0uYWRkdGltZTtcXG5cXHRcXHRcXHRcXHRhZGR0aW1lID0gdGltZXN0YW1wVG9UaW1lKHRtID0gYWRkdGltZSwgdHMgPSAxKVxcblxcdFxcdFxcdFxcdC8vIOWbnuWkjVxcblxcdFxcdFxcdFxcdGlmIChjYWNoZV9qc29uW2ldLnJlZmVyZXIpIHtcXG5cXHRcXHRcXHRcXHRcXHR2YXIgcmVfbmFtZSA9IGNhY2hlX2pzb25baV0ucmVmZXJlci51c2VySW5mby51c2VybmFtZTtcXG5cXHRcXHRcXHRcXHRcXHR2YXIgcmVfY29udGVudCA9IGNhY2hlX2pzb25baV0ucmVmZXJlci5jb250ZW50O1xcblxcdFxcdFxcdFxcdFxcdHZhciByZWZlcmVyID0gXFxcIjxibG9ja3F1b3RlPjxmb250IGNvbG9yPSdncmV5Jz5cXFwiICsgJzxjb2RlPicgKyByZV9uYW1lICsgJzwvY29kZT4nICsgJzxicj4nICtcXG5cXHRcXHRcXHRcXHRcXHRcXHRyZV9jb250ZW50ICsgXFxcIjwvZm9udD48L2Jsb2NrcXVvdGU+XFxcIjtcXG5cXHRcXHRcXHRcXHR9IGVsc2Uge1xcblxcdFxcdFxcdFxcdFxcdHZhciByZWZlcmVyID0gXFxcIlxcXCJcXG5cXHRcXHRcXHRcXHR9XFxuXFx0XFx0XFx0XFx0Zm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XFxuXFx0XFx0XFx0XFx0XFx0ZC5wdXNoKHtcXG5cXHRcXHRcXHRcXHRcXHRcXHRjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIlxcblxcdFxcdFxcdFxcdFxcdH0pXFxuXFx0XFx0XFx0XFx0fVxcblxcdFxcdFxcdFxcdGQucHVzaCh7XFxuXFx0XFx0XFx0XFx0XFx0dGl0bGU6IHVzZXJfdXNlcm5hbWUgKyBcXFwiPHNtYWxsPjxmb250IGNvbG9yPSdncmV5Jz5cXFwiICsgJ1xcXFx0XFxcXHQnICsgYWRkdGltZSArXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFxcIjwvZm9udD48L3NtYWxsPlxcXCIsXFxuXFx0XFx0XFx0XFx0XFx0aW1nOiB1c2VyX2F2YXRhciArICdAUmVmZXJlcj0nICsgdXNlcl9hdmF0YXIsXFxuXFx0XFx0XFx0XFx0XFx0dXJsOiBldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcImhpa2VyOi8vcGFnZS/liJvkvZzkurrpppbpobVcXFwiKSkucnVsZSksXFxuXFx0XFx0XFx0XFx0XFx0Y29sX3R5cGU6ICdhdmF0YXInLFxcblxcdFxcdFxcdFxcdH0pO1xcblxcdFxcdFxcdFxcdGQucHVzaCh7XFxuXFx0XFx0XFx0XFx0XFx0dGl0bGU6IHJlZmVyZXIgKyBcXFwiPGZvbnQgY29sb3I9JzAwMCc+XFxcIiArICdcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0JyArIGNvbnRlbnQgKyBcXFwiPC9mb250PlxcXCIsXFxuXFx0XFx0XFx0XFx0XFx0dXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuXFx0XFx0XFx0XFx0XFx0Y29sX3R5cGU6ICdyaWNoX3RleHQnLFxcblxcdFxcdFxcdFxcdH0pXFxuXFx0XFx0XFx0XFx0ZC5wdXNoKHtcXG5cXHRcXHRcXHRcXHRcXHRjb2xfdHlwZTogJ2xpbmUnLFxcblxcdFxcdFxcdFxcdH0pO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9IGVsc2UgaWYgKHRvdGFsICE9IDApe1xcblxcdFxcdFxcdGV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9wYWdlL0VORFxcXCIpKS5ydWxlKVxcblxcdFxcdH1cXG5cXHR9XFxuXFx0c2V0UmVzdWx0KGQpO1xcbn0sIFBMQVlfTElOS1MpXFxuXCJ9LHtcIm5hbWVcIjpcIkVORFwiLFwicGF0aFwiOlwiRU5EXCIsXCJydWxlXCI6XCJkLnB1c2goe1xcblxcdHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdIDxzbWFsbD48Zm9udCBjb2xvcj0nZ3JleSc+XFxcIiArICfigJTigJQgICBFTkQgICDigJTigJQnICsgXFxcIjwvZm9udD4gPC9zbWFsbD5cXFwiLFxcblxcdGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuXFx0ZXh0cmE6IHtcXG5cXHRcXHRsaW5lVmlzaWJsZTogZmFsc2VcXG5cXHR9XFxufSlcIn0se1wibmFtZVwiOlwid2ViX+aWh+eroOWIl+ihqFwiLFwicGF0aFwiOlwid2ViX+aWh+eroOWIl+ihqFwiLFwicnVsZVwiOlwiTVlfVVJMID0gJ2h0dHBzOi8vd3d3LnhpbnBpYW5jaGFuZy5jb20nO1xcbmlmICh0aXBzX3NlbGVjdCA9PSAn5paH56ugJykge1xcblxcdHZhciBXRUJfVVJMID0gXFxcImh0dHBzOi8vd3d3LnhpbnBpYW5jaGFuZy5jb20vaW5kZXgucGhwP2FwcD1zZWFyY2gmdHM9ZXhwJmt3PVxcXCIgKyB0aXBzX3RpdGxlICsnJnBhZ2U9JyArIFBBR0U7XFxuXFx0dmFyIGV4cD0nLm5hbWUnO1xcbn1cXG5pZiAodGlwc19zZWxlY3QgPT0gJ+aAu+aWh+eroCcpIHtcXG5cXHR2YXIgZXhwPScuZXhwLWRlc2MnO1xcblxcdHZhciBXRUJfVVJMID0gXFxcImh0dHBzOi8vd3d3LnhpbnBpYW5jaGFuZy5jb20vdXNlci9leHAvaWQtXFxcIitJRCtcXFwiL2NhdGVpZC0wL3BhZ2UtXFxcIisgUEFHRTtcXG59XFxudmFyIHdlYl9saXN0cyA9IHJlcXVlc3QoV0VCX1VSTCx7aGVhZGVyczogeyAnVXNlci1BZ2VudCc6ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wKSd9fSk7XFxud2ViX2xpc3RzID0gcGRmYSh3ZWJfbGlzdHMsIFxcXCIuZXhwLWNvbiYmbGlcXFwiKVxcbmlmICh3ZWJfbGlzdHMubGVuZ3RoICE9IFxcXCJcXFwiKSB7XFxuXFx0Zm9yICh2YXIgaSBpbiB3ZWJfbGlzdHMpIHtcXG5cXHRcXHRzZXRQYWdlVGl0bGUocGRmaCh3ZWJfbGlzdHNbaV0sICcuZXhwLXRpdGxlJiZUZXh0JykpXFxuXFx0XFx0ZC5wdXNoKHtcXG5cXHRcXHRcXHRjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcblxcdFxcdFxcdHRpdGxlOiBwZGZoKHdlYl9saXN0c1tpXSwgJy5leHAtdGl0bGUmJlRleHQnKSxcXG5cXHRcXHRcXHRkZXNjOiBcXFwi4oCc4oCc4oCd4oCdIDxzbWFsbD48Zm9udCBjb2xvcj0nZ3JleSc+XFxcIiArIHBkZmgod2ViX2xpc3RzW2ldLCBleHArJyYmVGV4dCcpICsgXFxcIjwvZm9udD4gPC9zbWFsbD5cXFwiLFxcblxcdFxcdFxcdHBpY191cmw6IHBkKHdlYl9saXN0c1tpXSwgJ2ltZyYmX3NyYycpICsgJ0BSZWZlcmVyPScgKyBwZCh3ZWJfbGlzdHNbaV0sICdpbWcmJl9zcmMnKSxcXG5cXHRcXHRcXHR1cmw6IHBkKHdlYl9saXN0c1tpXSwgJ2xpJiZhJiZocmVmJykgK1xcblxcdFxcdFxcdFxcdGBAcnVsZT1qczogbGV0IGQgPSBbXTtkLnB1c2goe3RpdGxlOnBkZmgoZ2V0UmVzQ29kZSgpLCcuY29udGVudCYmSHRtbCcpLGNvbF90eXBlOlxcXCJyaWNoX3RleHRcXFwifSk7c2V0UmVzdWx0KGQpO2AsXFxuXFx0XFx0fSk7XFxuXFx0fVxcbn0gZWxzZSB7XFxuXFx0ZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL3BhZ2UvRU5EXFxcIikpLnJ1bGUpXFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5pe26Ze05oiz6L2s5o2iXCIsXCJwYXRoXCI6XCLml7bpl7TmiLPovazmjaJcIixcInJ1bGVcIjpcImZ1bmN0aW9uIHRpbWVzdGFtcFRvVGltZSh0bSwgdHMpIHtcXG5cXHRcXHR1bmRlZmluZWRcXG5cXHRcXHR2YXIgZGF0ZSA9IG5ldyBEYXRlKHRtICogMTAwMCk7IC8v5pe26Ze05oiz5Li6MTDkvY3pnIAqMTAwMO+8jOaXtumXtOaIs+S4ujEz5L2N55qE6K+d5LiN6ZyA5LmYMTAwMFxcblxcdFxcdHZhciBZID0gZGF0ZS5nZXRGdWxsWWVhcigpICsgJy0nO1xcblxcdFxcdHZhciBNID0gKGRhdGUuZ2V0TW9udGgoKSArIDEgPCAxMCA/ICcwJyArIChkYXRlLmdldE1vbnRoKCkgKyAxKSA6IGRhdGUuZ2V0TW9udGgoKSArIDEpICsgJy0nO1xcblxcdFxcdHZhciBEID0gZGF0ZS5nZXREYXRlKCk7XFxuXFx0XFx0dmFyIGggPSAnIHwgJyArIGRhdGUuZ2V0SG91cnMoKSArICc6JztcXG5cXHRcXHR2YXIgbSA9IGRhdGUuZ2V0TWludXRlcygpO1xcblxcdFxcdGlmKG08MTApIG0gPSAnMCcrbTtcXG5cXHRcXHRtID0gbSArICc6J1xcblxcdFxcdHZhciBzID0gZGF0ZS5nZXRTZWNvbmRzKCk7XFxuXFx0XFx0aWYoczwxMCkgcyA9ICcwJytzO1xcblxcdFxcdGlmICh0cyA9PSAwKSByZXR1cm4gWSArIE0gKyBEO1xcblxcdFxcdGlmICh0cyA9PSAxKSByZXR1cm4gWSArIE0gKyBEICsgaCArIG0gKyBzO1xcblxcdH1cIn1dLFwic2F2ZWRcIjpmYWxzZSxcInRpdGxlXCI6XCLmlrDniYflnLpcIixcInZlcnNpb25cIjowLFwidXJsXCI6XCJoaWtlcjovL2VtcHR5I2Z5cGFnZSNpbW1lcnNpdmVUaGVtZSMjbm9IaXN0b3J5IztnZXQ7VVRGLTg7e1VzZXItQWdlbnRATW96aWxsYS81LjAgKExpbnV477yb77ybIEFuZHJvaWQgMTHvvJvvvJsgTWkgMTAgUHJvKSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvODguMC40MzI0LjE1MiBNb2JpbGUgU2FmYXJpLzUzNy4zNn1cIixcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJmaW5kX3J1bGVcIjpcImpzOihcXG4oUExBWV9MSU5LUykgPT4ge1xcbiAgICB2YXIgUEFHRSA9IE1ZX1VSTC5zcGxpdChcXFwiI1xcXCIpWzFdO1xcbiAgICB2YXIgZCA9IFtdO1xcbiAgICBhZGRMaXN0ZW5lcihcXFwib25DbG9zZVxcXCIsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgY2xlYXJNeVZhcihcXFwiXFxcXHU0ZjVjXFxcXHU4MDA1XFxcIik7XFxuICAgICAgICBjbGVhck15VmFyKFxcXCJcXFxcdThiZTZcXFxcdTdlYzZcXFxcdTdjN2JcXFxcdTUyMmJcXFwiKTtcXG4gICAgICAgIGNsZWFyTXlWYXIoXFxcIlxcXFx1NzZmOFxcXFx1NGYzY1xcXFx1ODljNlxcXFx1OTg5MVxcXCIpO1xcbiAgICB9XFxuICAgICkpO1xcbiAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcImhpa2VyOi8vcGFnZS9cXFxcdTY1ZjZcXFxcdTk1ZjRcXFxcdTYyMzNcXFxcdThmNmNcXFxcdTYzNjJcXFwiKSkucnVsZSk7XFxuICAgIHZhciB0aXBzX3NlbGVjdCA9IGdldE15VmFyKFxcXCJcXFxcdThiZTZcXFxcdTdlYzZcXFxcdTdjN2JcXFxcdTUyMmJcXFwiLCBcXFwiXFxcXHU3YjgwXFxcXHU0ZWNiXFxcIik7XFxuICAgIGlmICh0aXBzX3NlbGVjdCA9PSBcXFwiXFxcXHU4YmM0XFxcXHU4YmJhXFxcIikge1xcbiAgICAgICAgY2xlYXJNeVZhcihcXFwiXFxcXHU3NmY4XFxcXHU0ZjNjXFxcXHU4OWM2XFxcXHU5ODkxXFxcIik7XFxuICAgIH1cXG4gICAgdmFyIHRpcHNfYWxpa2UgPSBnZXRNeVZhcihcXFwiXFxcXHU3NmY4XFxcXHU0ZjNjXFxcXHU4OWM2XFxcXHU5ODkxXFxcIik7XFxuICAgIHZhciB1cmwgPSBQTEFZX0xJTktTO1xcbiAgICB2YXIgREFUQV9KU09OID0gSlNPTi5wYXJzZShyZXF1ZXN0KHVybCkpLmRhdGE7XFxuICAgIHZhciBJRCA9IERBVEFfSlNPTi5pZDtcXG4gICAgbGV0IGNvbW1lbnRfdXJsID0gXFxcImh0dHBzOi8vYXBwLnhpbnBpYW5jaGFuZy5jb20vY29tbWVudHM/cmVzb3VyY2VfaWQ9XFxcIiArIElEICsgXFxcIiZ0eXBlPWFydGljbGUmcGFnZT1cXFwiICsgUEFHRTtcXG4gICAgdmFyIENPTU1FTlRfSlNPTiA9IEpTT04ucGFyc2UocmVxdWVzdChjb21tZW50X3VybCkpLmRhdGE7XFxuICAgIHZhciB0b3RhbCA9IENPTU1FTlRfSlNPTi50b3RhbDtcXG4gICAgdmFyIFBMQVlfTElOS1MgPSBEQVRBX0pTT04udXJsLnJlcGxhY2UoL25ld3N0dWRpb3MvLCBcXFwiaHR0cHNcXFwiKTtcXG4gICAgdmFyIGJnX2ltZyA9IERBVEFfSlNPTi5jb3ZlcjtcXG4gICAgdmFyIHRpdGxlID0gREFUQV9KU09OLnRpdGxlO1xcbiAgICBzZXRQYWdlVGl0bGUoREFUQV9KU09OLnRpdGxlKTtcXG4gICAgdmFyIGNhdCA9IERBVEFfSlNPTi5jYXRlZ29yaWVzO1xcbiAgICB2YXIgcHVibGlzaF90aW1lID0gREFUQV9KU09OLnB1Ymxpc2hfdGltZTtcXG4gICAgcHVibGlzaF90aW1lID0gdGltZXN0YW1wVG9UaW1lKHRtID0gcHVibGlzaF90aW1lLCB0cyA9IDApO1xcbiAgICB2YXIgdmlldyA9IERBVEFfSlNPTi5jb3VudC5jb3VudF92aWV3O1xcbiAgICBpZiAodmlldyA+IDEwMDAwKSB7XFxuICAgICAgICB2aWV3ID0gKHZpZXcgLyAxMDAwMCkudG9GaXhlZCgxKSArIFxcXCJ3XFxcIjtcXG4gICAgfVxcbiAgICB2YXIgY29udGVudCA9IERBVEFfSlNPTi5jb250ZW50O1xcbiAgICB2YXIgbGlrZSA9IERBVEFfSlNPTi5jb3VudC5jb3VudF9saWtlO1xcbiAgICBpZiAobGlrZSA+IDEwMDApIHtcXG4gICAgICAgIGxpa2UgPSAobGlrZSAvIDEwMDApLnRvRml4ZWQoMSkgKyBcXFwia1xcXCI7XFxuICAgIH1cXG4gICAgdmFyIGNvbGxlY3QgPSBEQVRBX0pTT04uY291bnQuY291bnRfY29sbGVjdDtcXG4gICAgaWYgKGNvbGxlY3QgPiAxMDAwKSB7XFxuICAgICAgICBjb2xsZWN0ID0gKGNvbGxlY3QgLyAxMDAwKS50b0ZpeGVkKDEpICsgXFxcImtcXFwiO1xcbiAgICB9XFxuICAgIHZhciBzaGFyZSA9IERBVEFfSlNPTi5jb3VudC5jb3VudF9zaGFyZTtcXG4gICAgaWYgKHNoYXJlID4gMTAwMCkge1xcbiAgICAgICAgc2hhcmUgPSAoc2hhcmUgLyAxMDAwKS50b0ZpeGVkKDEpICsgXFxcImtcXFwiO1xcbiAgICB9XFxuICAgIHZhciB0YWdzID0gREFUQV9KU09OLnRhZ3M7XFxuICAgIHZhciB1c2VyID0gREFUQV9KU09OLmF1dGhvci51c2VyaW5mbztcXG4gICAgcHV0TXlWYXIoXFxcIlxcXFx1NGY1Y1xcXFx1ODAwNVxcXCIsIHVzZXIudXNlcm5hbWUpO1xcbiAgICBpZiAoUEFHRSA9PSAxKSB7XFxuICAgICAgICBkLnB1c2goe2NvbF90eXBlOiBcXFwicGljXzFfZnVsbFxcXCIsIHRpdGxlOiBcXFwiMFxcXCIsIGltZzogYmdfaW1nLCB1cmw6ICQoKS5sYXp5UnVsZSgoREFUQV9KU09OKSA9PiB7XFxuICAgICAgICAgICAgdmFyIHBsYXlfdXJscyA9IERBVEFfSlNPTi52aWRlby5jb250ZW50LnByb2dyZXNzaXZlO1xcbiAgICAgICAgICAgIHZhciBkYW5tYWt1ID0gREFUQV9KU09OLnZpZDtcXG4gICAgICAgICAgICB2YXIgZGFubXUgPSBcXFwiaHR0cHM6Ly9vc3MtZGFubWFrdTEyLnhwY2Nkbi5jb20vXFxcIiArIGRhbm1ha3UgKyBcXFwiLnR4dFxcXCI7XFxuICAgICAgICAgICAgdmFyIGNvZGUgPSByZXF1ZXN0KGRhbm11KTtcXG4gICAgICAgICAgICB2YXIgYXJyID0gY29kZS5zcGxpdChcXFwiXFxcXG5cXFwiKTtcXG4gICAgICAgICAgICB2YXIgciA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgbGluZSA9IEpTT04ucGFyc2UoYXJyW2ldKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChsaW5lLmNvbnRlbnQpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByLnB1c2goe3RleHQ6IGxpbmUuY29udGVudCwgdGltZTogbGluZS5vZmZzZXR9KTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHdyaXRlRmlsZShcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9kYW5tdS5qc29uXFxcIiwgSlNPTi5zdHJpbmdpZnkocikpO1xcbiAgICAgICAgICAgIGxldCB1cmxzID0gW107XFxuICAgICAgICAgICAgbGV0IG5hbWVzID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaiBpbiBwbGF5X3VybHMpIHtcXG4gICAgICAgICAgICAgICAgdXJscy5wdXNoKHBsYXlfdXJsc1tqXS51cmwpO1xcbiAgICAgICAgICAgICAgICBuYW1lcy5wdXNoKHBsYXlfdXJsc1tqXS5wcm9maWxlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdmFyIGFsbF91cmwgPSBKU09OLnN0cmluZ2lmeSh7dXJsczogdXJscywgbmFtZXM6IG5hbWVzLCBkYW5tdTogXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvZGFubXUuanNvblxcXCJ9KTtcXG4gICAgICAgICAgICByZXR1cm4gYWxsX3VybDtcXG4gICAgICAgIH1cXG4gICAgICAgICwgREFUQV9KU09OKX0pO1xcbiAgICAgICAgdmFyIENvbG9yID0gXFxcIiNGQTcyOThcXFwiO1xcbiAgICAgICAgZnVuY3Rpb24gZ2V0SGVhZCh0aXRsZXMpIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcIlxcXFx1MjAxOFxcXFx1MjAxOFxcXFx1MjAxOVxcXFx1MjAxOTxzdHJvbmc+PGZvbnQgY29sb3I9XFxcXFxcXCJcXFwiICsgQ29sb3IgKyBcXFwiXFxcXFxcXCI+XFxcIiArIHRpdGxlcyArIFxcXCI8L2Zyb250Pjwvc3Ryb25nPlxcXCI7XFxuICAgICAgICB9XFxuICAgICAgICBkLnB1c2goe2NvbF90eXBlOiBcXFwidGV4dF8yXFxcIiwgdGl0bGU6IHRpcHNfc2VsZWN0ID09IFxcXCJcXFxcdTdiODBcXFxcdTRlY2JcXFwiID8gZ2V0SGVhZCh0aXRsZXMgPSBcXFwiXFxcXHU3YjgwXFxcXHU0ZWNiXFxcIikgOiBcXFwiXFxcXHU3YjgwXFxcXHU0ZWNiXFxcIiwgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICBwdXRNeVZhcihcXFwiXFxcXHU4YmU2XFxcXHU3ZWM2XFxcXHU3YzdiXFxcXHU1MjJiXFxcIiwgXFxcIlxcXFx1N2I4MFxcXFx1NGVjYlxcXCIpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgIH1cXG4gICAgICAgICl9KTtcXG4gICAgICAgIHZhciDor4TorrogPSBcXFwiXFxcXHU4YmM0XFxcXHU4YmJhIFxcXCIgKyBcXFwiXFxcXHUyMDE4XFxcXHUyMDE4XFxcIiArIHRvdGFsICsgXFxcIlxcXFx1MjAxOVxcXFx1MjAxOVxcXCI7XFxuICAgICAgICBkLnB1c2goe2NvbF90eXBlOiBcXFwidGV4dF8yXFxcIiwgdGl0bGU6IHRpcHNfc2VsZWN0ID09IFxcXCJcXFxcdThiYzRcXFxcdThiYmFcXFwiID8gZ2V0SGVhZCh0aXRsZXMgPSDor4TorropIDog6K+E6K66LCB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgIHB1dE15VmFyKFxcXCJcXFxcdThiZTZcXFxcdTdlYzZcXFxcdTdjN2JcXFxcdTUyMmJcXFwiLCBcXFwiXFxcXHU4YmM0XFxcXHU4YmJhXFxcIik7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgfVxcbiAgICAgICAgKX0pO1xcbiAgICAgICAgZC5wdXNoKHtjb2xfdHlwZTogXFxcImxpbmVcXFwifSk7XFxuICAgICAgICBpZiAodGlwc19zZWxlY3QgPT0gXFxcIlxcXFx1N2I4MFxcXFx1NGVjYlxcXCIpIHtcXG4gICAgICAgICAgICB2YXIgVVNFUl9IT01FID0gdXNlci51cmwucmVwbGFjZSgvbmV3c3R1ZGlvcy8sIFxcXCJodHRwc1xcXCIpO1xcbiAgICAgICAgICAgIHZhciBkb3dubG9hZF91cmwgPSBEQVRBX0pTT04udmlkZW8uY29udGVudC5wcm9ncmVzc2l2ZVswXS51cmw7XFxuICAgICAgICAgICAgZC5wdXNoKHtjb2xfdHlwZTogXFxcInRleHRfMVxcXCIsIHRpdGxlOiBcXFwiXFxcXHUyMDFjXFxcXHUyMDFjXFxcXHUyMDFkXFxcXHUyMDFkPGI+PGZvbnQgY29sb3I9IzAwMD5cXFwiICsgdGl0bGUgKyBcXFwiPC9mb250PjwvYj5cXFwiLCB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIiwgZXh0cmE6IHtsaW5lVmlzaWJsZTogZmFsc2V9fSk7XFxuICAgICAgICAgICAgdmFyIGNhdF9hbGwgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIGNhdCkge1xcbiAgICAgICAgICAgICAgICB2YXIgY2F0XzEgPSBjYXRbaV0uY2F0ZWdvcnlfbmFtZTtcXG4gICAgICAgICAgICAgICAgdmFyIGNhdF8yID0gY2F0W2ldLnN1Yi5jYXRlZ29yeV9uYW1lO1xcbiAgICAgICAgICAgICAgICBjYXRfYWxsLnB1c2goY2F0XzEgKyBcXFwiLVxcXCIgKyBjYXRfMiArIFxcXCIgXFxcXHRcXFwiKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgY2F0X2FsbCA9IGNhdF9hbGwuam9pbihcXFwiXFxcIik7XFxuICAgICAgICAgICAgdmFyIGNhdF90aXRsZSA9IFxcXCJcXFxcdTIwMWNcXFxcdTIwMWNcXFxcdTIwMWRcXFxcdTIwMWQ8c21hbGw+PGZvbnQgY29sb3I9Z3JleT5cXFwiICsgY2F0X2FsbCArIFxcXCIgXFxcXHRcXFwiICsgcHVibGlzaF90aW1lICsgXFxcIiBcXFxcdFxcXFx0XFxcIiArIHZpZXcgKyBcXFwiXFxcXHU2YjIxXFxcXHU2NGFkXFxcXHU2NTNlXFxcIiArIFxcXCI8L2ZvbnQ+PC9zbWFsbD5cXFwiO1xcbiAgICAgICAgICAgIGQucHVzaCh7dGl0bGU6IGNhdF90aXRsZSwgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsIGNvbF90eXBlOiBcXFwidGV4dF8xXFxcIiwgZXh0cmE6IHtsaW5lVmlzaWJsZTogZmFsc2V9fSk7XFxuICAgICAgICAgICAgZC5wdXNoKHtjb2xfdHlwZTogXFxcInJpY2hfdGV4dFxcXCIsIHRpdGxlOiBcXFwiPHNtYWxsPjxmb250IGNvbG9yPTAwMD5cXFwiICsgY29udGVudCArIFxcXCI8L2ZvbnQ+IDwvc21hbGw+XFxcIiwgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJ9KTtcXG4gICAgICAgICAgICBkLnB1c2goe3RpdGxlOiBsaWtlLCBwaWNfdXJsOiBcXFwiaHR0cDovLzgyLjE1Ni4yMjIuNzcvd2Vpc3lyL2ljb24vYmJzXFxcXHU3MGI5XFxcXHU4ZDVlLnN2Z1xcXCIsIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLCBjb2xfdHlwZTogXFxcImljb25fc21hbGxfNFxcXCJ9KTtcXG4gICAgICAgICAgICBkLnB1c2goe3RpdGxlOiBjb2xsZWN0LCBwaWNfdXJsOiBcXFwiaHR0cDovLzgyLjE1Ni4yMjIuNzcvd2Vpc3lyL2ljb24vYmJzXFxcXHU2NTM2XFxcXHU4NWNmLnN2Z1xcXCIsIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLCBjb2xfdHlwZTogXFxcImljb25fc21hbGxfNFxcXCJ9KTtcXG4gICAgICAgICAgICBkLnB1c2goe3RpdGxlOiBzaGFyZSwgcGljX3VybDogXFxcImh0dHA6Ly84Mi4xNTYuMjIyLjc3L3dlaXN5ci9pY29uL2Jic1xcXFx1NTIwNlxcXFx1NGVhYi5zdmdcXFwiLCB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIiwgY29sX3R5cGU6IFxcXCJpY29uX3NtYWxsXzRcXFwifSk7XFxuICAgICAgICAgICAgZC5wdXNoKHt0aXRsZTogXFxcIlxcXFx1NGUwYlxcXFx1OGY3ZFxcXCIsIHBpY191cmw6IFxcXCJodHRwOi8vODIuMTU2LjIyMi43Ny93ZWlzeXIvaWNvbi9iYnNcXFxcdTRlMGJcXFxcdThmN2Quc3ZnXFxcIiwgdXJsOiBcXFwiZG93bmxvYWQ6Ly9cXFwiICsgZG93bmxvYWRfdXJsLCBjb2xfdHlwZTogXFxcImljb25fc21hbGxfNFxcXCJ9KTtcXG4gICAgICAgICAgICBkLnB1c2goe2NvbF90eXBlOiBcXFwibGluZVxcXCJ9KTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIn0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBkLnB1c2goe2NvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwifSk7XFxuICAgICAgICAgICAgZm9yIChsZXQgaSBpbiB0YWdzKSB7XFxuICAgICAgICAgICAgICAgIHZhciB0YWcgPSB0YWdzW2ldLm5hbWU7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7dGl0bGU6IFxcXCJcXFxcdTIwMWNcXFxcdTIwMWNcXFxcdTIwMWRcXFxcdTIwMWQ8c21hbGw+PGZvbnQgY29sb3I9Z3JleT5cXFwiICsgdGFnICsgXFxcIjwvZm9udD48L3NtYWxsPlxcXCIsIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsIHVybDogJCgpLmxhenlSdWxlKCh0YWcpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJcXFxcdTY0MWNcXFxcdTUxNzNcXFxcdTk1MmVcXFxcdTViNTdcXFwiLCB0YWcpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9wYWdlL1xcXFx1OGZkYlxcXFx1NTE2NVxcXFx1NjQxY1xcXFx1N2QyMlxcXFx1OTg3NVxcXCIpKS5ydWxlKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAsIHRhZyl9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgZC5wdXNoKHtjb2xfdHlwZTogXFxcImxpbmVcXFwifSk7XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7Y29sX3R5cGU6IFxcXCJibGFua19ibG9ja1xcXCJ9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgZC5wdXNoKHtjb2xfdHlwZTogXFxcInRleHRfMVxcXCIsIHRpdGxlOiBcXFwiXFxcXHUyMDFjXFxcXHUyMDFjXFxcXHUyMDFkXFxcXHUyMDFkPGI+PGZvbnQgY29sb3I9IzAwMD5cXFwiICsgXFxcIlxcXFx1NTIxYlxcXFx1NGY1Y1xcXFx1NGViYVxcXCIgKyBcXFwiPC9mb250PjwvYj5cXFwiLCB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIiwgZXh0cmE6IHtsaW5lVmlzaWJsZTogZmFsc2V9fSk7XFxuICAgICAgICAgICAgZC5wdXNoKHt0aXRsZTogdXNlci51c2VybmFtZSwgaW1nOiB1c2VyLmF2YXRhciArIFxcXCJAUmVmZXJlcj1cXFwiICsgdXNlci5hdmF0YXIsIHVybDogZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL3BhZ2UvXFxcXHU1MjFiXFxcXHU0ZjVjXFxcXHU0ZWJhXFxcXHU5OTk2XFxcXHU5ODc1XFxcIikpLnJ1bGUpLCBjb2xfdHlwZTogXFxcImljb25fMl9yb3VuZFxcXCJ9KTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIn0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBkLnB1c2goe2NvbF90eXBlOiBcXFwibGluZVxcXCJ9KTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIn0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBkLnB1c2goe2NvbF90eXBlOiBcXFwidGV4dF8xXFxcIiwgdGl0bGU6IFxcXCJcXFxcdTIwMWNcXFxcdTIwMWNcXFxcdTIwMWRcXFxcdTIwMWQ8Yj48Zm9udCBjb2xvcj0jMDAwPlxcXCIgKyBcXFwiXFxcXHU3NmY4XFxcXHU0ZjNjXFxcXHU4OWM2XFxcXHU5ODkxXFxcIiArIFxcXCI8L2ZvbnQ+PC9iPlxcXCIsIHVybDogJCgpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcIlxcXFx1NzZmOFxcXFx1NGYzY1xcXFx1ODljNlxcXFx1OTg5MVxcXCIsIFxcXCJcXFxcdTc2ZjhcXFxcdTRmM2NcXFxcdTg5YzZcXFxcdTk4OTFcXFwiKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgKSwgZXh0cmE6IHtsaW5lVmlzaWJsZTogZmFsc2V9fSk7XFxuICAgICAgICAgICAgaWYgKHRpcHNfYWxpa2UgPT0gXFxcIlxcXFx1NzZmOFxcXFx1NGYzY1xcXFx1ODljNlxcXFx1OTg5MVxcXCIpIHtcXG4gICAgICAgICAgICAgICAgdmFyIG5leHRfdXJsID0gdXJsICsgXFxcIi9uZXh0XFxcIjtcXG4gICAgICAgICAgICAgICAgdmFyIE5FWFRfSlNPTiA9IEpTT04ucGFyc2UocmVxdWVzdChuZXh0X3VybCkpLmRhdGEubGlzdDtcXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSBpbiBORVhUX0pTT04pIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBQTEFZX0xJTktTID0gTkVYVF9KU09OW2ldLnVybC5yZXBsYWNlKC9uZXdzdHVkaW9zLywgXFxcImh0dHBzXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dF90aXRsZSA9IE5FWFRfSlNPTltpXS50aXRsZTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0X2NvdmVyID0gTkVYVF9KU09OW2ldLmNvdmVyO1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRfdGl0bGUgPSBORVhUX0pTT05baV0udGl0bGU7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dF92aWV3ID0gTkVYVF9KU09OW2ldLmNvdW50LmNvdW50X3ZpZXc7XFxuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dF92aWV3ID4gMTAwMDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3ZpZXcgPSAobmV4dF92aWV3IC8gMTAwMDApLnRvRml4ZWQoMSkgKyBcXFwid1xcXCI7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dF9saWtlID0gTkVYVF9KU09OW2ldLmNvdW50LmNvdW50X2xpa2U7XFxuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dF9saWtlID4gMTAwMCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfbGlrZSA9IChuZXh0X2xpa2UgLyAxMDAwKS50b0ZpeGVkKDEpICsgXFxcImtcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRfdXNlciA9IE5FWFRfSlNPTltpXS5hdXRob3IudXNlcmluZm8udXNlcm5hbWU7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe2NvbF90eXBlOiBcXFwibW92aWVfMV9sZWZ0X3BpY1xcXCIsIHRpdGxlOiBuZXh0X3RpdGxlLCBkZXNjOiBcXFwiXFxcXHUyMDFjXFxcXHUyMDFjXFxcXHUyMDFkXFxcXHUyMDFkIDxzbWFsbD48Zm9udCBjb2xvcj0nZ3JleSc+XFxcIiArIFxcXCJcXFxcdTY0YWRcXFxcdTY1M2VcXFxcdTkxY2YgXFxcIiArIG5leHRfdmlldyArIFxcXCIgXFxcXHhiNyBcXFxcdTU1OWNcXFxcdTZiMjIgXFxcIiArIG5leHRfbGlrZSArIFxcXCJcXFxcblxcXCIgKyBuZXh0X3VzZXIgKyBcXFwiPC9mb250PiA8L3NtYWxsPlxcXCIsIGltZzogbmV4dF9jb3ZlciwgdXJsOiBldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcImhpa2VyOi8vcGFnZS9cXFxcdTg5YzZcXFxcdTk4OTFcXFxcdThiZTZcXFxcdTYwYzVcXFxcdTk4NzVcXFwiKSkucnVsZSl9KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBpZiAodGlwc19zZWxlY3QgPT0gXFxcIlxcXFx1OGJjNFxcXFx1OGJiYVxcXCIpIHtcXG4gICAgICAgIHZhciBjYWNoZV9qc29uID0gQ09NTUVOVF9KU09OLmxpc3Q7XFxuICAgICAgICBpZiAodG90YWwgPT0gMCAmJiBQQUdFID09IDEpIHtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDMwOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIn0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBkLnB1c2goe3RpdGxlOiBcXFwiXFxcXHUyMDFjXFxcXHUyMDFjXFxcXHUyMDFkXFxcXHUyMDFkIDxzbWFsbD48Zm9udCBjb2xvcj0nZ3JleSc+XFxcIiArIFxcXCJcXFxcdTIwMTRcXFxcdTIwMTQgICBcXFxcdTY2ODJcXFxcdTY1ZTBcXFxcdThiYzRcXFxcdThiYmEgICBcXFxcdTIwMTRcXFxcdTIwMTRcXFwiICsgXFxcIjwvZm9udD4gPC9zbWFsbD5cXFwiLCBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLCBleHRyYToge2xpbmVWaXNpYmxlOiBmYWxzZX19KTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChjYWNoZV9qc29uLmxlbmd0aCAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgaW4gY2FjaGVfanNvbikge1xcbiAgICAgICAgICAgICAgICB2YXIgVVNFUl9IT01FID0gXFxcImh0dHBzOi8vYXBwLnhpbnBpYW5jaGFuZy5jb20vdXNlci9cXFwiICsgY2FjaGVfanNvbltpXS51c2VyaWQ7XFxuICAgICAgICAgICAgICAgIHZhciB1c2VyX2F2YXRhciA9IGNhY2hlX2pzb25baV0udXNlckluZm8uYXZhdGFyO1xcbiAgICAgICAgICAgICAgICB2YXIgdXNlcl91c2VybmFtZSA9IGNhY2hlX2pzb25baV0udXNlckluZm8udXNlcm5hbWU7XFxuICAgICAgICAgICAgICAgIGlmIChnZXRNeVZhcihcXFwiXFxcXHU0ZjVjXFxcXHU4MDA1XFxcIikgPT0gdXNlcl91c2VybmFtZSkge1xcbiAgICAgICAgICAgICAgICAgICAgdXNlcl91c2VybmFtZSA9IFxcXCI8Zm9udCBjb2xvcj0jZWQ5YTQxPlxcXCIgKyB1c2VyX3VzZXJuYW1lICsgXFxcIjwvZm9udD5cXFwiO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gY2FjaGVfanNvbltpXS5jb250ZW50O1xcbiAgICAgICAgICAgICAgICB2YXIgYWRkdGltZSA9IGNhY2hlX2pzb25baV0uYWRkdGltZTtcXG4gICAgICAgICAgICAgICAgYWRkdGltZSA9IHRpbWVzdGFtcFRvVGltZSh0bSA9IGFkZHRpbWUsIHRzID0gMSk7XFxuICAgICAgICAgICAgICAgIGlmIChjYWNoZV9qc29uW2ldLnJlZmVyZXIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciByZV9uYW1lID0gY2FjaGVfanNvbltpXS5yZWZlcmVyLnVzZXJJbmZvLnVzZXJuYW1lO1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlX2NvbnRlbnQgPSBjYWNoZV9qc29uW2ldLnJlZmVyZXIuY29udGVudDtcXG4gICAgICAgICAgICAgICAgICAgIHZhciByZWZlcmVyID0gXFxcIjxibG9ja3F1b3RlPjxmb250IGNvbG9yPSdncmV5Jz5cXFwiICsgXFxcIjxjb2RlPlxcXCIgKyByZV9uYW1lICsgXFxcIjwvY29kZT5cXFwiICsgXFxcIjxicj5cXFwiICsgcmVfY29udGVudCArIFxcXCI8L2ZvbnQ+PC9ibG9ja3F1b3RlPlxcXCI7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVmZXJlciA9IFxcXCJcXFwiO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtjb2xfdHlwZTogXFxcImJsYW5rX2Jsb2NrXFxcIn0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7dGl0bGU6IHVzZXJfdXNlcm5hbWUgKyBcXFwiPHNtYWxsPjxmb250IGNvbG9yPSdncmV5Jz5cXFwiICsgXFxcIlxcXFx0XFxcXHRcXFwiICsgYWRkdGltZSArIFxcXCI8L2ZvbnQ+PC9zbWFsbD5cXFwiLCBpbWc6IHVzZXJfYXZhdGFyICsgXFxcIkBSZWZlcmVyPVxcXCIgKyB1c2VyX2F2YXRhciwgdXJsOiBldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcImhpa2VyOi8vcGFnZS9cXFxcdTUyMWJcXFxcdTRmNWNcXFxcdTRlYmFcXFxcdTk5OTZcXFxcdTk4NzVcXFwiKSkucnVsZSksIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIn0pO1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe3RpdGxlOiByZWZlcmVyICsgXFxcIjxmb250IGNvbG9yPScwMDAnPlxcXCIgKyBcXFwiXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXCIgKyBjb250ZW50ICsgXFxcIjwvZm9udD5cXFwiLCB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIiwgY29sX3R5cGU6IFxcXCJyaWNoX3RleHRcXFwifSk7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7Y29sX3R5cGU6IFxcXCJsaW5lXFxcIn0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgaWYgKHRvdGFsICE9IDApIHtcXG4gICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL3BhZ2UvRU5EXFxcIikpLnJ1bGUpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBzZXRSZXN1bHQoZCk7XFxufVxcbikoXFxcImh0dHBzOi8vYXBwLnhpbnBpYW5jaGFuZy5jb20vYXJ0aWNsZS8xMTcxNzcwMVxcXCIpXCIsXCJncm91cFwiOlwi4pGg5o6o6I2QXCIsXCJ1YVwiOlwibW9iaWxlXCIsXCJwcmVSdWxlXCI6XCJcIixcInBhZ2VzXCI6XCJbe1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi8J+UoummlumhteWIl+ihqFxcXCIsXFxcInBhdGhcXFwiOlxcXCLpppbpobXliJfooahcXFwiLFxcXCJydWxlXFxcIjpcXFwiaWYgKHRpcHNfdGl0bGUgPT0gJ+WIhuexuycgfHwgdGlwc190aXRsZSA9PSAn5L2c5ZOBJykge1xcXFxuICAgIGZvciAobGV0IGkgaW4gWFBDKSB7XFxcXG4gICAgICAgIHZhciB2bSA9IFhQQ1tpXTtcXFxcbi8v5Y2V5Liq6KeG6aKRd2Vi6ZO+5o6lXFxcXG5cXFxcdCAgdmFyIHdlYl9saW5rcyA9IHZtLndlYl91cmw7XFxcXG4gICAgICAgIHZhciBhcHBfbGlua3MgPSB2bS51cmwucmVwbGFjZSgvbmV3c3R1ZGlvcy8sICdodHRwcycpO1xcXFxuICAgICAgICB2YXIgSUQgPSBhcHBfbGlua3Muc3BsaXQoJ2lkPScpWzFdXFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogdm0uY2F0ZWdvcnlfbmFtZSxcXFxcbiAgICAgICAgICAgIHBpY191cmw6IHZtLmNvdmVyLCAgICAgICB1cmw6ZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3dlYl/lj5HnjrDkuoznuqfliIbnsbtcXFxcXFxcIikpLnJ1bGUpLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdjYXJkX3BpY18yJyxcXFxcbiAgICAgICAgICAgIGRlc2M6ICcwJyxcXFxcbiAgICAgICAgfSlcXFxcbiAgICB9XFxcXG59XFxcXG5cXFxcbmlmICh0aXBzX3RpdGxlICE9ICfkvZzlk4EnICYmIHRpcHNfdGl0bGUgIT0gJ+WIhuexuycpIHtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICBjb2xfdHlwZTogJ2xpbmVfYmxhbmsnLFxcXFxuICAgIH0pXFxcXG4gZm9yIChsZXQgaSBpbiB2bWpzb24pIHtcXFxcbiAgICAgICAgdmFyIHZtID0gdm1qc29uW2ldLmRhdGEucmVzb3VyY2U7XFxcXG4gICAgICAgIHZhciBQTEFZX0xJTktTID0gdm0udXJsLnJlcGxhY2UoL25ld3N0dWRpb3MvLCAnaHR0cHMnKTtcXFxcbnZhciBVU0VSX0hPTUU9ICdodHRwczovL2FwcC54aW5waWFuY2hhbmcuY29tL3VzZXIvJyt2bS51c2VyX2lkO1xcXFxuaWYgKHRpcHNfdGl0bGUgIT0gJ+WcuuW6k+aOqOiNkCcgKXtcXFxcbnZhciB1cmwgPWV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFxcXFxcImhpa2VyOi8vcGFnZS/liJvkvZzkurrpppbpobVcXFxcXFxcIikpLnJ1bGUpXFxcXG59ZWxzZXt2YXIgdXJsID1cXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIn1cXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiB2bS5hdXRob3IudXNlcmluZm8udXNlcm5hbWUsXFxcXG4gICAgICAgICAgICBwaWNfdXJsOiB2bS5hdXRob3IudXNlcmluZm8uYXZhdGFyLFxcXFxuICAgICAgICAgICAgdXJsOnVybCxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcXFxcbiAgICAgICAgfSlcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiB2bS50aXRsZSxcXFxcbiAgICAgICAgICAgIHVybDogZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL+inhumikeivpuaDhemhtVxcXFxcXFwiKSkucnVsZSksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfMScsXFxcXG4gICAgICAgIH0pXFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogdm0udGl0bGUsXFxcXG4gICAgICAgICAgICBwaWNfdXJsOiB2bS5jb3ZlcixcXFxcbiAgICAgICAgICAgIHVybDogZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwcOaSreaUvumTvuaOpVxcXFxcXFwiKSkucnVsZSksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3BpY18xX2Z1bGwnLFxcXFxuICAgICAgICB9KVxcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IHZtLmNvdW50LmNvdW50X2NvbGxlY3QsXFxcXG4gICAgICAgICAgICBwaWNfdXJsOiAnaHR0cDovLzgyLjE1Ni4yMjIuNzcvd2Vpc3lyL2ljb24vYmJz5pS26JePLnN2ZycsXFxcXG4gICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdpY29uX3NtYWxsXzMnLFxcXFxuICAgICAgICB9KVxcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IHZtLmNvdW50LmNvdW50X2NvbW1lbnQsXFxcXG4gICAgICAgICAgICBwaWNfdXJsOiAnaHR0cDovLzgyLjE1Ni4yMjIuNzcvd2Vpc3lyL2ljb24vYmJz5Zue5aSNLnN2ZycsXFxcXG4gICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoUExBWV9MSU5LUykgPT4ge1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0cHV0TXlWYXIoJ+ivpue7huexu+WIqycsICfor4TorronKTtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdHJldHVybiBldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcXFxcXCJoaWtlcjovL3BhZ2Uv6KeG6aKR6K+m5oOF6aG1XFxcXFxcXCIpKS5ydWxlKTtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHR9LFBMQVlfTElOS1MpLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdpY29uX3NtYWxsXzMnLFxcXFxuICAgICAgICB9KVxcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IHZtLmNvdW50LmNvdW50X2xpa2UsXFxcXG4gICAgICAgICAgICBwaWNfdXJsOiAnaHR0cDovLzgyLjE1Ni4yMjIuNzcvd2Vpc3lyL2ljb24vYmJz54K56LWeLnN2ZycsXFxcXG4gICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdpY29uX3NtYWxsXzMnLFxcXFxuICAgICAgICB9KVxcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJyxcXFxcbiAgICAgICAgfSlcXFxcbiAgICBcXFxcdH1cXFxcbn1cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCJhcHDliIbnsbvkuI7mkJzntKLliJfooahcXFwiLFxcXCJwYXRoXFxcIjpcXFwiYXBw5YiG57G75LiO5pCc57Si5YiX6KGoXFxcIixcXFwicnVsZVxcXCI6XFxcInZhciBBUFBfVVJMID0gXFxcXFxcXCJodHRwczovL2FwcC54aW5waWFuY2hhbmcuY29tL3YyL3NlYXJjaD90eXBlPVxcXFxcXFwiICsgdGlwc19zZWxlY3QgKyBcXFxcXFxcIiZrdz1cXFxcXFxcIiArIHRpcHNfdGl0bGUgKycmcGFnZT0nICsgUEFHRTtcXFxcbnZhciBhcHBfbGlzdHMgPSBKU09OLnBhcnNlKHJlcXVlc3QoQVBQX1VSTCkpLmRhdGEubGlzdDtcXFxcbmlmIChhcHBfbGlzdHMubGVuZ3RoICE9IFxcXFxcXFwiXFxcXFxcXCIpIHtcXFxcblxcXFx0Zm9yIChsZXQgaSBpbiBhcHBfbGlzdHMpIHtcXFxcblxcXFx0XFxcXHR2YXIgUExBWV9MSU5LUyA9IGFwcF9saXN0c1tpXS51cmwucmVwbGFjZSgvbmV3c3R1ZGlvcy8sICdodHRwcycpO1xcXFxuXFxcXHRcXFxcdHZhciBsaWtlID0gYXBwX2xpc3RzW2ldLmNvdW50LmNvdW50X2xpa2U7XFxcXG5cXFxcdFxcXFx0dmFyIHZpZXcgPSBhcHBfbGlzdHNbaV0uY291bnQuY291bnRfdmlldztcXFxcblxcXFx0XFxcXHRpZiAobGlrZSA+IDEwMDApIGxpa2UgPSAobGlrZSAvIDEwMDApLnRvRml4ZWQoMSkgKyAnayc7XFxcXG5cXFxcdFxcXFx0aWYgKHZpZXcgPiAxMDAwMCkgdmlldyA9ICh2aWV3IC8gMTAwMDApLnRvRml4ZWQoMSkgKyAndyc7XFxcXG5cXFxcdFxcXFx0ZC5wdXNoKHtcXFxcblxcXFx0XFxcXHRcXFxcdHBpY191cmw6IGFwcF9saXN0c1tpXS5jb3ZlcixcXFxcblxcXFx0XFxcXHRcXFxcdHRpdGxlOiBhcHBfbGlzdHNbaV0udGl0bGUsXFxcXG5cXFxcdFxcXFx0XFxcXHRkZXNjOiBcXFxcXFxcIuKAnOKAnOKAneKAnSA8c21hbGw+PGZvbnQgY29sb3I9J2dyZXknPlxcXFxcXFwiICsgJ+aSreaUvumHjyAnICsgdmlldyArICcgwrcgJyArICfllpzmrKIgJyArIGxpa2UgKyAnXFxcXFxcXFxuJyArIGFwcF9saXN0c1tpXVxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHQuYXV0aG9yLnVzZXJpbmZvLnVzZXJuYW1lICsgXFxcXFxcXCI8L2ZvbnQ+IDwvc21hbGw+XFxcXFxcXCIsXFxcXG5cXFxcdFxcXFx0XFxcXHR1cmw6IGV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFxcXFxcImhpa2VyOi8vcGFnZS/op4bpopHor6bmg4XpobVcXFxcXFxcIikpLnJ1bGUpLFxcXFxuXFxcXHRcXFxcdFxcXFx0Y29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXFxcblxcXFx0XFxcXHR9KVxcXFxuXFxcXHR9XFxcXG59IGVsc2Uge1xcXFxuXFxcXHRldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcXFxcXCJoaWtlcjovL3BhZ2UvRU5EXFxcXFxcXCIpKS5ydWxlKVxcXFxufVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuaQnOe0oumhteS4iumDqFxcXCIsXFxcInBhdGhcXFwiOlxcXCLmkJzntKLpobXkuIrpg6hcXFwiLFxcXCJydWxlXFxcIjpcXFwiaWYgKFBBR0UgPT0gMSkge1xcXFxuXFxcXHRkLnB1c2goe1xcXFxuXFxcXHRcXFxcdHVybDogXFxcXFxcXCJwdXRNeVZhcign5pCc5YWz6ZSu5a2XJyxpbnB1dCk7dmFyIHRpcHNfdGl0bGUgPSBnZXRNeVZhcign5pCc5YWz6ZSu5a2XJyk7dmFyIGxvY2FsRGF0YSA9IHJlcXVlc3QoJ2hpa2VyOi8vZmlsZXMvY2FjaGUv5paw54mH5Zy65Y6G5Y+y5pCc57SiLmpzb24nKTtpZiAoIWxvY2FsRGF0YSkgbG9jYWxEYXRhID0nW10nO3ZhciBsaXNoaT1KU09OLnBhcnNlKGxvY2FsRGF0YSk7bGV0IGNjYyA9IGxpc2hpLmluZGV4T2YoaW5wdXQpO2lmKGNjYyA+LTEpe2xpc2hpLnNwbGljZShjY2MsMSl9O2xpc2hpLnB1c2godGlwc190aXRsZSk7bGlzaGk9bGlzaGkuc2xpY2UoLTI4KTt3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvY2FjaGUv5paw54mH5Zy65Y6G5Y+y5pCc57SiLmpzb24nLCBKU09OLnN0cmluZ2lmeShsaXNoaSkpO3JlZnJlc2hQYWdlKGZhbHNlKVxcXFxcXFwiLFxcXFxuXFxcXHRcXFxcdGRlc2M6ICfor7fovpPlhaXkvZzlk4HlkI3jgIHliJvkvZzkuronLFxcXFxuXFxcXHRcXFxcdGV4dHJhOiB7XFxcXG5cXFxcdFxcXFx0XFxcXHRkZWZhdWx0VmFsdWU6IHRpcHNfdGl0bGUsXFxcXG5cXFxcdFxcXFx0fSxcXFxcblxcXFx0XFxcXHRjb2xfdHlwZTogXFxcXFxcXCJpbnB1dFxcXFxcXFwiLFxcXFxuXFxcXHR9KTtcXFxcblxcXFx0ZC5wdXNoKHtcXFxcblxcXFx0XFxcXHRjb2xfdHlwZTogJ2xpbmUnLFxcXFxuXFxcXHR9KVxcXFxuXFxcXG5cXFxcdGlmICghdGlwc190aXRsZSkge1xcXFxuXFxcXHRcXFxcdGlmIChyZXF1ZXN0KCdoaWtlcjovL2ZpbGVzL2NhY2hlL+aWsOeJh+WcuuWOhuWPsuaQnOe0oi5qc29uJykpIHtcXFxcblxcXFx0XFxcXHRcXFxcdGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRkLnB1c2goe1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdGNvbF90eXBlOiBcXFxcXFxcImJsYW5rX2Jsb2NrXFxcXFxcXCJcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0fSlcXFxcblxcXFx0XFxcXHRcXFxcdH1cXFxcblxcXFx0XFxcXHRcXFxcdGQucHVzaCh7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdHRpdGxlOiAn4oCc4oCc4oCd4oCdPGI+PGZvbnQgY29sb3I9IzAwMD4nICsgJ/Cfl5HvuI8g5Y6G5Y+y5pCc57SiJyArICc8L2ZvbnQ+PC9iPicsXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdHVybDogJCgpLmxhenlSdWxlKCgpID0+IHtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHR3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvY2FjaGUv5paw54mH5Zy65Y6G5Y+y5pCc57SiLmpzb24nLCAnJyk7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0cmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIjtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0fSksXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdGNvbF90eXBlOiBcXFxcXFxcInRleHRfMVxcXFxcXFwiLFxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRleHRyYToge1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdGxpbmVWaXNpYmxlOiBmYWxzZVxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHR9XFxcXG5cXFxcdFxcXFx0XFxcXHR9KTtcXFxcblxcXFx0XFxcXHRcXFxcdHZhciBsb2NhbERhdGEgPSByZXF1ZXN0KCdoaWtlcjovL2ZpbGVzL2NhY2hlL+aWsOeJh+WcuuWOhuWPsuaQnOe0oi5qc29uJyk7XFxcXG5cXFxcdFxcXFx0XFxcXHRpZiAoIWxvY2FsRGF0YSkgbG9jYWxEYXRhID0gXFxcXFxcXCJbXVxcXFxcXFwiO1xcXFxuXFxcXHRcXFxcdFxcXFx0dmFyIGxpc2hpID0gSlNPTi5wYXJzZShsb2NhbERhdGEpLnNsaWNlKC0yOCk7XFxcXG5cXFxcdFxcXFx0XFxcXHR2YXIgSGlzdG9yeSA9IFxcXFxcXFwiXFxcXFxcXCI7XFxcXG5cXFxcdFxcXFx0XFxcXHRmb3IgKGxldCBpID0gbGlzaGkubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0dmFyIGNjbGlzaGkgPSBsaXNoaVtpXTtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0ZC5wdXNoKHtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHR0aXRsZTogY2NsaXNoaSxcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRjb2xfdHlwZTogXFxcXFxcXCJmbGV4X2J1dHRvblxcXFxcXFwiLFxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdHVybDogJCgpLmxhenlSdWxlKChjY2xpc2hpKSA9PiB7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRwdXRNeVZhcign5pCc5YWz6ZSu5a2XJywgY2NsaXNoaSk7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRyZWZyZXNoUGFnZSgpO1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0cmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiO1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdH0sIGNjbGlzaGkpLFxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHR9KTtcXFxcblxcXFx0XFxcXHRcXFxcdH1cXFxcblxcXFx0XFxcXHR9XFxcXG5cXFxcdFxcXFx0Zm9yIChsZXQgaSA9IDA7IGkgPCAyMDsgaSsrKSB7XFxcXG5cXFxcdFxcXFx0XFxcXHRkLnB1c2goe1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRjb2xfdHlwZTogXFxcXFxcXCJibGFua19ibG9ja1xcXFxcXFwiXFxcXG5cXFxcdFxcXFx0XFxcXHR9KVxcXFxuXFxcXHRcXFxcdH1cXFxcblxcXFx0XFxcXHRkLnB1c2goe1xcXFxuXFxcXHRcXFxcdFxcXFx0dGl0bGU6ICfigJzigJzigJ3igJ08Yj48Zm9udCBjb2xvcj0jMDAwPicgKyAn8J+UpSDng63pl6jmkJzntKInICsgJzwvZm9udD48L2I+JyxcXFxcblxcXFx0XFxcXHRcXFxcdHVybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCIsXFxcXG5cXFxcdFxcXFx0XFxcXHRjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0XzFcXFxcXFxcIixcXFxcblxcXFx0XFxcXHRcXFxcdGV4dHJhOiB7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdGxpbmVWaXNpYmxlOiBmYWxzZVxcXFxuXFxcXHRcXFxcdFxcXFx0fVxcXFxuXFxcXHRcXFxcdH0pO1xcXFxuXFxcXHRcXFxcdHZhciB1cmwgPSAnaHR0cHM6Ly9hcHAueGlucGlhbmNoYW5nLmNvbS9zZWFyY2hfcmVjb21tZW5kX2t3cyc7XFxcXG5cXFxcdFxcXFx0dmFyIEhvdGpzb24gPSBKU09OLnBhcnNlKGZldGNoKHVybCkpLmRhdGEubGlzdDtcXFxcblxcXFx0XFxcXHRmb3IgKGxldCBpIGluIEhvdGpzb24pIHtcXFxcblxcXFx0XFxcXHRcXFxcdHZhciB0aXBzID0gSG90anNvbltpXS5uYW1lO1xcXFxuXFxcXHRcXFxcdFxcXFx0ZC5wdXNoKHtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0dGl0bGU6IHRpcHMsXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdGNvbF90eXBlOiBcXFxcXFxcImZsZXhfYnV0dG9uXFxcXFxcXCIsXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdHVybDogJCgpLmxhenlSdWxlKCh0aXBzKSA9PiB7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0cHV0TXlWYXIoJ+aQnOWFs+mUruWtlycsIHRpcHMpO1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdHJlZnJlc2hQYWdlKCk7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0cmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiO1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHR9LCB0aXBzKSxcXFxcblxcXFx0XFxcXHRcXFxcdH0pO1xcXFxuXFxcXHRcXFxcdH1cXFxcblxcXFx0fVxcXFxuXFxcXG5cXFxcdGNvbnN0IHNlYXJjaF9zaHVsaWFuZyA9ICdodHRwczovL3d3dy54aW5waWFuY2hhbmcuY29tL3NlYXJjaD9rdz0nICsgdGlwc190aXRsZTtcXFxcblxcXFx0dmFyIHNlYXJjaF9OVU1CRVIgPSBwZGZhKHJlcXVlc3Qoc2VhcmNoX3NodWxpYW5nLHtoZWFkZXJzOiB7ICdVc2VyLUFnZW50JzogJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjApJ319KSwgXFxcXFxcXCIuYm9yZGVyLWImJi5pdGVtcy1jZW50ZXImJmFcXFxcXFxcIilcXFxcblxcXFx0dmFyIHNlYXJjaF90aXBzXzAgPSBwZGZoKHNlYXJjaF9OVU1CRVJbMF0sICcudHJhbnNpdGlvbiYmVGV4dCcpLm1hdGNoKC8oXFxcXFxcXFx3Kyl8KFxcXFxcXFxcKykvZykuam9pbihcXFxcXFxcIlxcXFxcXFwiKVxcXFxuXFxcXHR2YXIgc2VhcmNoX3RpcHNfMSA9IHBkZmgoc2VhcmNoX05VTUJFUlsxXSwgJy50cmFuc2l0aW9uJiZUZXh0JykubWF0Y2goLyhcXFxcXFxcXHcrKXwoXFxcXFxcXFwrKS9nKS5qb2luKFxcXFxcXFwiXFxcXFxcXCIpXFxcXG5cXFxcdHZhciBzZWFyY2hfdGlwc18yID0gcGRmaChzZWFyY2hfTlVNQkVSWzJdLCAnLnRyYW5zaXRpb24mJlRleHQnKS5tYXRjaCgvKFxcXFxcXFxcdyspfChcXFxcXFxcXCspL2cpLmpvaW4oXFxcXFxcXCJcXFxcXFxcIilcXFxcblxcXFxuXFxcXHRwdXRNeVZhcign5pWw6YeP4oCU5L2c5ZOBJywgc2VhcmNoX3RpcHNfMClcXFxcblxcXFx0cHV0TXlWYXIoJ+aVsOmHj+KAlOWIm+S9nOS6uicsIHNlYXJjaF90aXBzXzEpXFxcXG5cXFxcdHB1dE15VmFyKCfmlbDph4/igJTmlofnq6AnLCBzZWFyY2hfdGlwc18yKVxcXFxuXFxcXHR2YXIgQ29sb3IgPSBcXFxcXFxcIiNGQTcyOThcXFxcXFxcIjtcXFxcblxcXFx0ZnVuY3Rpb24gZ2V0SGVhZCh0aXRsZXMpIHtcXFxcblxcXFx0XFxcXHRyZXR1cm4gJ+KAmOKAmOKAmeKAmTxzdHJvbmc+PGZvbnQgY29sb3I9XFxcXFxcXCInICsgQ29sb3IgKyAnXFxcXFxcXCI+JyArIHRpdGxlcyArICc8L2Zyb250Pjwvc3Ryb25nPic7XFxcXG5cXFxcdH1cXFxcblxcXFx0aWYgKHRpcHNfdGl0bGUpIHtcXFxcblxcXFx0XFxcXHR2YXIgdGlwc18wID0gZ2V0TXlWYXIoXFxcXFxcXCLmlbDph4/igJTkvZzlk4FcXFxcXFxcIilcXFxcblxcXFx0XFxcXHR2YXIgdGlwc18xID0gZ2V0TXlWYXIoXFxcXFxcXCLmlbDph4/igJTliJvkvZzkurpcXFxcXFxcIilcXFxcblxcXFx0XFxcXHR2YXIgdGlwc18yID0gZ2V0TXlWYXIoXFxcXFxcXCLmlbDph4/igJTmlofnq6BcXFxcXFxcIilcXFxcblxcXFx0XFxcXHRmb3IgKGxldCBpID0gMDsgaSA8IDU7IGkrKykge1xcXFxuXFxcXHRcXFxcdFxcXFx0ZC5wdXNoKHtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0Y29sX3R5cGU6IFxcXFxcXFwiYmxhbmtfYmxvY2tcXFxcXFxcIlxcXFxuXFxcXHRcXFxcdFxcXFx0fSlcXFxcblxcXFx0XFxcXHR9XFxcXG5cXFxcdFxcXFx0dmFyIOS9nOWTgT0n5L2c5ZOBICcrJ+KAmOKAmCcrIHRpcHNfMCsgJ+KAmeKAmSc7XFxcXG5cXFxcdFxcXFx0ZC5wdXNoKHtcXFxcblxcXFx0XFxcXHRcXFxcdC8vIHRpdGxlOiAn5L2c5ZOBICcrJ+KAmOKAmCcrIHRpcHNfMCsgJ+KAmeKAmScsXFxcXG5cXFxcdFxcXFx0XFxcXHR0aXRsZTogdGlwc19zZWxlY3QgPT0gJ2FydGljbGUnID8gZ2V0SGVhZCh0aXRsZXMgPeS9nOWTgSkgOiDkvZzlk4EsXFxcXG5cXFxcdFxcXFx0XFxcXHRjb2xfdHlwZTogJ3RleHRfMycsXFxcXG5cXFxcdFxcXFx0XFxcXHR1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCkgPT4ge1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRwdXRNeVZhcign5L2cL+WImy/mlocnLCAnYXJ0aWNsZScpO1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRyZWZyZXNoUGFnZSgpO1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRyZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCI7XFxcXG5cXFxcdFxcXFx0XFxcXHR9KSxcXFxcblxcXFx0XFxcXHR9KVxcXFxuXFxcXHRcXFxcdHZhciDliJvkvZzkuro9XFxcXFxcXCLliJvkvZzkurogXFxcXFxcXCIrJ+KAmOKAmCcrIHRpcHNfMSsgJ+KAmeKAmSc7XFxcXG5cXFxcdFxcXFx0ZC5wdXNoKHtcXFxcblxcXFx0XFxcXHRcXFxcdC8vIHRpdGxlOiBcXFxcXFxcIuWIm+S9nOS6uiBcXFxcXFxcIisn4oCY4oCYJysgdGlwc18xKyAn4oCZ4oCZJyxcXFxcblxcXFx0XFxcXHRcXFxcdHRpdGxlOiB0aXBzX3NlbGVjdCA9PSAnY3JlYXRvcicgPyBnZXRIZWFkKHRpdGxlcyA95Yib5L2c5Lq6KSA6IOWIm+S9nOS6uixcXFxcblxcXFx0XFxcXHRcXFxcdGNvbF90eXBlOiAndGV4dF8zJyxcXFxcblxcXFx0XFxcXHRcXFxcdHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKSA9PiB7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdHB1dE15VmFyKCfkvZwv5YibL+aWhycsICdjcmVhdG9yJyk7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdHJlZnJlc2hQYWdlKCk7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIjtcXFxcblxcXFx0XFxcXHRcXFxcdH0pLFxcXFxuXFxcXHRcXFxcdH0pXFxcXG5cXFxcdFxcXFx0dmFyIOaWh+eroD0gXFxcXFxcXCLmlofnq6AgXFxcXFxcXCIrJ+KAmOKAmCcrIHRpcHNfMisgJ+KAmeKAmSc7XFxcXG5cXFxcdFxcXFx0ZC5wdXNoKHtcXFxcblxcXFx0XFxcXHRcXFxcdC8vIHRpdGxlOiBcXFxcXFxcIuaWh+eroCBcXFxcXFxcIisn4oCY4oCYJysgdGlwc18yKyAn4oCZ4oCZJyxcXFxcblxcXFx0XFxcXHRcXFxcdHRpdGxlOiB0aXBzX3NlbGVjdCA9PSAn5paH56ugJyA/IGdldEhlYWQodGl0bGVzID3mlofnq6ApIDog5paH56ugLFxcXFxuXFxcXHRcXFxcdFxcXFx0Y29sX3R5cGU6ICd0ZXh0XzMnLFxcXFxuXFxcXHRcXFxcdFxcXFx0dXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpID0+IHtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0cHV0TXlWYXIoJ+S9nC/liJsv5paHJywgJ+aWh+eroCcpO1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRyZWZyZXNoUGFnZSgpO1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRyZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCI7XFxcXG5cXFxcdFxcXFx0XFxcXHR9KSxcXFxcblxcXFx0XFxcXHR9KVxcXFxuXFxcXHR9XFxcXG5cXFxcdGNsZWFyTXlWYXIoJ+aVsOmHj+KAlOS9nOWTgScpO1xcXFxuXFxcXHRjbGVhck15VmFyKCfmlbDph4/igJTliJvkvZzkuronKTtcXFxcblxcXFx0Y2xlYXJNeVZhcign5pWw6YeP4oCU5paH56ugJyk7XFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6aaW6aG15Zub5aSn5oyJ6ZKuXFxcIixcXFwicGF0aFxcXCI6XFxcIummlumhteWbm+Wkp+aMiemSrlxcXCIsXFxcInJ1bGVcXFwiOlxcXCJkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogXFxcXFxcXCLlj5HnjrBcXFxcXFxcIixcXFxcbiAgICAgICAgcGljX3VybDogJ2h0dHBzOi8vb3NzLXhwYzAueHBjY2RuLmNvbS9VcGxvYWQvZWR1LzIwMTkvMDEvMTQ1YzNjMzgyZjFhODJkLnBuZycsXFxcXG4gICAgICAgIGNvbF90eXBlOiAnaWNvbl9zbWFsbF80JyxcXFxcbiAgICAgICAgdXJsOiAkKFxcXFxcXFwiI25vTG9hZGluZyNodHRwczovL2FwcC54aW5waWFuY2hhbmcuY29tL3BhZ2UvZGlzY292ZXJ5XFxcXFxcXCIpLmxhenlSdWxlKCgpID0+IHtcXFxcbiAgICAgICAgICAgIHB1dE15VmFyKCfkuLvpk77mjqUnLCBpbnB1dCk7XFxcXG4gICAgICAgICAgICBwdXRNeVZhcign5Li75qCH6aKYJywgJ+WIhuexuycpO1xcXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIjtcXFxcbiAgICAgICAgfSksXFxcXG4gICAgfSlcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogXFxcXFxcXCLnsr7pgIlcXFxcXFxcIixcXFxcbiAgICAgICAgcGljX3VybDogJ2h0dHBzOi8vb3NzLXhwYzAueHBjY2RuLmNvbS9VcGxvYWQvZWR1LzIwMTkvMDEvMTQ1YzNjMzg3MWJkNzA4LnBuZycsXFxcXG4gICAgICAgIGNvbF90eXBlOiAnaWNvbl9zbWFsbF80JyxcXFxcbiAgICAgICAgdXJsOiAkKFxcXFxcXFwiI25vTG9hZGluZyNodHRwczovL2FwcC54aW5waWFuY2hhbmcuY29tL2hvbWUvc2VsZWN0aW9uXFxcXFxcXCIpLmxhenlSdWxlKCgpID0+IHtcXFxcbiAgICAgICAgICAgIHB1dE15VmFyKCfkuLvpk77mjqUnLCBpbnB1dCk7XFxcXG4gICAgICAgICAgICBwdXRNeVZhcign5Li75qCH6aKYJywgJ+S7iuaXpeeyvumAiScpO1xcXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIjtcXFxcbiAgICAgICAgfSksXFxcXG4gICAgfSlcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogJ+WcuuW6kycsXFxcXG4gICAgICAgIHBpY191cmw6ICdodHRwczovL29zcy14cGMwLnhwY2Nkbi5jb20vVXBsb2FkL2VkdS8yMDE5LzAyLzAxNWM1M2MwM2NiNjYwNS5wbmcnLFxcXFxuICAgICAgICBjb2xfdHlwZTogJ2ljb25fc21hbGxfNCcsXFxcXG4gICAgICAgIHVybDogJChcXFxcXFxcIiNub0xvYWRpbmcjaHR0cHM6Ly9hcHAueGlucGlhbmNoYW5nLmNvbS9ob21lL3Ztb3ZpZXJcXFxcXFxcIikubGF6eVJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICAgICAgcHV0TXlWYXIoJ+S4u+mTvuaOpScsIGlucHV0KTtcXFxcbiAgICAgICAgICAgIHB1dE15VmFyKCfkuLvmoIfpopgnLCAn5Zy65bqT5o6o6I2QJyk7XFxcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiO1xcXFxuICAgICAgICB9KSxcXFxcbiAgICB9KVxcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiAn54Ot6ZeoJyxcXFxcbiAgICAgICAgcGljX3VybDogJ2h0dHBzOi8vb3NzLXhwYzAueHBjY2RuLmNvbS9VcGxvYWQvZWR1LzIwMTkvMDgvMDU1ZDQ3ZTI1MTFkMWQ4LnBuZycsXFxcXG4gICAgICAgIGNvbF90eXBlOiAnaWNvbl9zbWFsbF80JyxcXFxcbiAgICAgICAgdXJsOiAkKFxcXFxcXFwiI25vTG9hZGluZyNodHRwczovL2FwcC54aW5waWFuY2hhbmcuY29tL2hvbWUvaG90P3BhZ2U9XFxcXFxcXCIpLmxhenlSdWxlKCgpID0+IHtcXFxcbiAgICAgICAgICAgIHB1dE15VmFyKCfkuLvpk77mjqUnLCBpbnB1dCk7XFxcXG4gICAgICAgICAgICBwdXRNeVZhcign5Li75qCH6aKYJywgJ+eDremXqCcpO1xcXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIjtcXFxcbiAgICAgICAgfSksXFxcXG4gICAgfSlcXFxcblxcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPGI+PGZvbnQgY29sb3I9IzAwMD4nICsgdGlwc190aXRsZSArICc8L2ZvbnQ+PC9iPicsXFxcXG4gICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCIsXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfMVxcXFxcXFwiLFxcXFxuICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLwn5SO6L+b5YWl5pCc57Si6aG1XFxcIixcXFwicGF0aFxcXCI6XFxcIui/m+WFpeaQnOe0oumhtVxcXCIsXFxcInJ1bGVcXFwiOlxcXCIkKCdoaWtlcjovL2VtcHR5I2Z5cGFnZSNmdWxsVGhlbWUjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjJykucnVsZSgoKSA9PiB7XFxcXG5cXFxcdHNldFBhZ2VUaXRsZSgn5paw54mH5Zy6wrfmkJzntKInKVxcXFxuXFxcXHR2YXIgZCA9IFtdO1xcXFxuXFxcXHR2YXIgUEFHRSA9IE1ZX1VSTC5zcGxpdCgnIycpWzFdO1xcXFxuXFxcXHRmb3IgKGxldCBpID0gMDsgaSA8IDMwOyBpKyspIHtcXFxcblxcXFx0XFxcXHRkLnB1c2goe1xcXFxuXFxcXHRcXFxcdFxcXFx0Y29sX3R5cGU6IFxcXFxcXFwiYmxhbmtfYmxvY2tcXFxcXFxcIlxcXFxuXFxcXHRcXFxcdH0pXFxcXG5cXFxcdH1cXFxcblxcXFx0YWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKCgpID0+IHtcXFxcblxcXFx0XFxcXHRjbGVhck15VmFyKCfmkJzlhbPplK7lrZcnKTtcXFxcblxcXFx0XFxcXHRjbGVhck15VmFyKCfkvZwv5YibL+aWhycpO1xcXFxuXFxcXHR9KSlcXFxcblxcXFx0dmFyIHRpcHNfdGl0bGUgPSBnZXRNeVZhcihcXFxcXFxcIuaQnOWFs+mUruWtl1xcXFxcXFwiKVxcXFxuXFxcXHR2YXIgdGlwc19zZWxlY3QgPSBnZXRNeVZhcihcXFxcXFxcIuS9nC/liJsv5paHXFxcXFxcXCIsICdhcnRpY2xlJyk7XFxcXG5cXFxcdC8vbG9nKHRpcHNfc2VsZWN0KVxcXFxuXFxcXHRldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcXFxcXCJoaWtlcjovL3BhZ2Uv5pCc57Si6aG15LiK6YOoXFxcXFxcXCIpKS5ydWxlKVxcXFxuXFxcXHRpZiAodGlwc190aXRsZSkge1xcXFxuXFxcXHRcXFxcdGlmICh0aXBzX3NlbGVjdCA9PSAnYXJ0aWNsZScpIHtcXFxcblxcXFx0XFxcXHQgIC8v5pCc5L2c5ZOBXFxcXG5cXFxcdFxcXFx0XFxcXHRldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBw5YiG57G75LiO5pCc57Si5YiX6KGoXFxcXFxcXCIpKS5ydWxlKVxcXFxuXFxcXHRcXFxcdH0gZWxzZSBpZiAodGlwc19zZWxlY3QgPT0gJ2NyZWF0b3InKSB7XFxcXG5cXFxcdFxcXFx0XFxcXHQvL+aQnOS6ulxcXFxuXFxcXHRcXFxcdFxcXFx0ZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwcOWIm+S9nOS6uuaQnOe0ouWIl+ihqFxcXFxcXFwiKSkucnVsZSlcXFxcblxcXFx0XFxcXHR9IGVsc2UgaWYgKHRpcHNfc2VsZWN0ID09ICfmlofnq6AnKSB7XFxcXG5cXFxcdGV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFxcXFxcImhpa2VyOi8vcGFnZS93ZWJf5paH56ug5YiX6KGoXFxcXFxcXCIpKS5ydWxlKVxcXFxuXFxcXHRcXFxcdH1cXFxcblxcXFx0fVxcXFxuXFxcXHRzZXRSZXN1bHQoZClcXFxcbn0pXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi4pmo77iP6aaW6aG1SlNPTlxcXCIsXFxcInBhdGhcXFwiOlxcXCLpppbpobVKU09OXFxcIixcXFwicnVsZVxcXCI6XFxcInZhciB0aXBzX3RpdGxlID0gZ2V0TXlWYXIoXFxcXFxcXCLkuLvmoIfpophcXFxcXFxcIiwgJ+S9nOWTgScpXFxcXG52YXIgdGlwc191cmwgPSBnZXRNeVZhcihcXFxcXFxcIuS4u+mTvuaOpVxcXFxcXFwiKTtcXFxcbmlmICh0aXBzX3RpdGxlICE9ICfkvZzlk4EnICYmIHRpcHNfdGl0bGUgIT0gJ+WIhuexuycpIHtcXFxcblxcXFx0dmFyIGFwcHVybCA9IHRpcHNfdXJsO1xcXFxuXFxcXHRpZiAodGlwc190aXRsZSA9PSAn5Zy65bqT5o6o6I2QJykge1xcXFxuXFxcXHRcXFxcdHZhciB0ID0gMFxcXFxuXFxcXHR9IGVsc2UgaWYodGlwc190aXRsZSA9PSAn54Ot6ZeoJykge1xcXFxuXFxcXHRcXFxcdHZhciB0ID0gMlxcXFxuXFxcXHR9IGVsc2Uge1xcXFxuXFxcXHRcXFxcdHZhciB0ID0gMVxcXFxuXFxcXHR9XFxcXG5cXFxcdHZhciB2bWpzb24gPSBKU09OLnBhcnNlKHJlcXVlc3QoYXBwdXJsLCB7aGVhZGVyczogeydVc2VyLUFnZW50JzpcXFxcXFxcIlVzZXItQWdlbnROZXdTdHVkaW9zLzEuOS4xIChjb20ueGlucGlhbmNoYW5nLm5ld3N0dWRpb3M7IGJ1aWxkOjc4NjsgQW5kcm9pZCAxMVxcXFxcXFwifSxtZXRob2Q6ICdHRVQnfSkpLmRhdGEubGlzdC5zbGljZSh0KTtcXFxcbi8vbG9nKHZtanNvbik7XFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwid2ViX+WPkeeOsOS6jOe6p+WIhuexu1xcXCIsXFxcInBhdGhcXFwiOlxcXCJ3ZWJf5Y+R546w5LqM57qn5YiG57G7XFxcIixcXFwicnVsZVxcXCI6XFxcIiQoJ2hpa2VyOi8vZW1wdHkjZnlwYWdlI25vSGlzdG9yeSMnKS5ydWxlKCh3ZWJfbGlua3MpID0+IHtcXFxcblxcXFx0dmFyIGQgPSBbXTtcXFxcblxcXFx0dmFyIFBBR0UgPSBNWV9VUkwuc3BsaXQoJyMnKVsxXTtcXFxcblxcXFx0Ly8g5b2T5YmNIHVybFxcXFxuXFxcXHRjb25zdCBVUkxfUFJFRklYID0gd2ViX2xpbmtzO1xcXFxuXFxcXHRjb25zdCBDVVJSRU5UX1VSTCA9IGdldFZhcignY3VycmVudF91cmwnLCBVUkxfUFJFRklYKVxcXFxuXFxcXHQvLyDov5vlhaXkuoznuqfmuIXnqbrph43nva7kuIDmrKFcXFxcblxcXFx0YWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKCgpID0+IHtcXFxcblxcXFx0XFxcXHRjbGVhclZhcignY2F0ZV8yJyk7XFxcXG5cXFxcdFxcXFx0Y2xlYXJWYXIoJ2N1cnJlbnRfdXJsJylcXFxcblxcXFx0fSkpXFxcXG5cXFxcdGNvbnN0IENBVEVfTEVWRUxfMiA9IGdldFZhcihcXFxcXFxcImNhdGVfMlxcXFxcXFwiLCBcXFxcXFxcIjBcXFxcXFxcIilcXFxcblxcXFx0Ly8g6I635Y+W6aG16Z2i5YaF5a65XFxcXG5cXFxcdGxldCBodG1sID0gcmVxdWVzdChVUkxfUFJFRklYLCB7aGVhZGVyczogeyAnVXNlci1BZ2VudCc6ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wKSd9fSlcXFxcblxcXFx0Ly8g56ys5LiA6aG154us5Y2gXFxcXG5cXFxcdGlmIChQQUdFID09IDEpIHtcXFxcblxcXFx0XFxcXHRkLnB1c2goe1xcXFxuXFxcXHRcXFxcdFxcXFx0Y29sX3R5cGU6IFxcXFxcXFwiYmxhbmtfYmxvY2tcXFxcXFxcIlxcXFxuXFxcXHRcXFxcdH0pXFxcXG5cXFxcdFxcXFx0Ly8g5Y+W5LqM57qn5qCH562+XFxcXG5cXFxcdFxcXFx0bGV0IGNhdGVnb3JpZV9sZXZlbF8yID0gcGRmYShodG1sLCAnLnNlY29uZC10eXBlJiZsaScpXFxcXG5cXFxcdFxcXFx0Ly8g5b6q546v5LqM57qn5qCH562+XFxcXG5cXFxcdFxcXFx0Y2F0ZWdvcmllX2xldmVsXzIuZm9yRWFjaCgoY2F0ZV8yLCBpbmRleF8yKSA9PiB7XFxcXG5cXFxcdFxcXFx0XFxcXHRsZXQgdGl0bGUgPSBwZGZoKGNhdGVfMiwgJ2EmJlRleHQnKVxcXFxuXFxcXHRcXFxcdFxcXFx0bGV0IGxpbmsgPSBwZGZoKGNhdGVfMiwgJ2EmJmhyZWYnKVxcXFxuXFxcXHRcXFxcdFxcXFx0ZC5wdXNoKHtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0dGl0bGU6IHBhcnNlSW50KENBVEVfTEVWRUxfMikgPT09IGluZGV4XzIgPyBcXFxcXFxcIuKAnOKAnFxcXFxcXFwiICsgdGl0bGUgKyBcXFxcXFxcIuKAneKAnVxcXFxcXFwiIDogdGl0bGUsXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdHVybDogJCgpLmxhenlSdWxlKHBhcmFtcyA9PiB7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0Ly8g5a2Y5Zyo6ZO+5o6l55qE5oOF5Ya15LiL5pu05paw57yT5a2YXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0aWYgKHBhcmFtcy5saW5rKSB7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRwdXRWYXIoJ2NhdGVfMicsIHBhcmFtcy5pbmRleC50b1N0cmluZygpKVxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0cHV0VmFyKCdjdXJyZW50X3VybCcsICdodHRwczovL3d3dy54aW5waWFuY2hhbmcuY29tJyArIHBhcmFtc1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHQubGluaylcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdHJlZnJlc2hQYWdlKClcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHR9XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0cmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdH0sIHtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRpbmRleDogaW5kZXhfMixcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRsaW5rOiBsaW5rXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdH0pXFxcXG5cXFxcdFxcXFx0XFxcXHR9KVxcXFxuXFxcXHRcXFxcdH0pXFxcXG5cXFxcdFxcXFx0ZC5wdXNoKHtcXFxcblxcXFx0XFxcXHRcXFxcdGNvbF90eXBlOiBcXFxcXFxcImJsYW5rX2Jsb2NrXFxcXFxcXCJcXFxcblxcXFx0XFxcXHR9KVxcXFxuXFxcXHRcXFxcdC8qIGQucHVzaCh7XFxcXG5cXFxcdFxcXFx0ICAgICB0aXRsZTogJ+W9k+WJjVVSTO+8micgKyBDVVJSRU5UX1VSTCxcXFxcblxcXFx0XFxcXHQgICAgIGNvbF90eXBlOiAnbG9uZ190ZXh0JyxcXFxcblxcXFx0XFxcXHQgfSkqL1xcXFxuXFxcXHR9XFxcXG5cXFxcdGxldCBmZW5sZWlfdXJsID0gJyc7XFxcXG5cXFxcdGlmIChDVVJSRU5UX1VSTC5pbmRleE9mKCdhcnRpY2xlTGlzdFBhZ2UnKSA+IC0xKSB7XFxcXG5cXFxcdFxcXFx0ZmVubGVpX3VybCA9IENVUlJFTlRfVVJMLnJlcGxhY2UoL1xcXFxcXFxcP2Zyb209YXJ0aWNsZUxpc3RQYWdlLywgJy9wYWdlLScgKyBQQUdFKVxcXFxuXFxcXHR9IGVsc2Uge1xcXFxuXFxcXHRcXFxcdGZlbmxlaV91cmwgPSBDVVJSRU5UX1VSTCArICcvcGFnZS0nICsgUEFHRVxcXFxuXFxcXHR9XFxcXG5cXFxcdHZhciBsaXN0cyA9IHJlcXVlc3QoZmVubGVpX3VybCwge1xcXFxuXFxcXHRcXFxcdGhlYWRlcnM6IHtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFxcXFwiVXNlci1BZ2VudFxcXFxcXFwiOiBQQ19VQVxcXFxuXFxcXHRcXFxcdH1cXFxcblxcXFx0fSlcXFxcblxcXFx0Ly8gbG9nKGZlbmxlaV91cmwpXFxcXG5cXFxcdHZhciB3ZWJfbGlzdHMgPSBwZGZhKGxpc3RzLCBcXFxcXFxcImJvZHkmJi5lbnRlci1maWxtcGxheVxcXFxcXFwiKVxcXFxuXFxcXHRldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcXFxcXCJoaWtlcjovL3BhZ2Uvd2ViX+WIhuexu+WIl+ihqFxcXFxcXFwiKSkucnVsZSk7XFxcXG5cXFxcdHNldFJlc3VsdChkKVxcXFxufSwgd2ViX2xpbmtzKVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIndlYl/liIbnsbvliJfooahcXFwiLFxcXCJwYXRoXFxcIjpcXFwid2ViX+WIhuexu+WIl+ihqFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJpZiAod2ViX2xpc3RzLmxlbmd0aCAhPSBcXFxcXFxcIlxcXFxcXFwiKSB7XFxcXG5cXFxcdGZvciAodmFyIGkgaW4gd2ViX2xpc3RzKSB7XFxcXG5cXFxcdFxcXFx0dmFyIFBMQVlfTElOS1MgPSAnaHR0cHM6Ly9hcHAueGlucGlhbmNoYW5nLmNvbS9hcnRpY2xlLycgKyBwZGZoKHdlYl9saXN0c1tpXSwgJ2xpJiZkYXRhLWFydGljbGVpZCcpO1xcXFxuXFxcXHRcXFxcdGQucHVzaCh7XFxcXG5cXFxcdFxcXFx0XFxcXHRjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcXFxuXFxcXHRcXFxcdFxcXFx0dGl0bGU6IHBkZmgod2ViX2xpc3RzW2ldLCAnLmZzXzE0JiZUZXh0JyksXFxcXG5cXFxcdFxcXFx0XFxcXHRkZXNjOiBcXFxcXFxcIuKAnOKAnOKAneKAnSA8c21hbGw+PGZvbnQgY29sb3I9J2dyZXknPlxcXFxcXFwiICsgJ+aSreaUviAnICsgcGRmaCh3ZWJfbGlzdHNbaV0sICcuaWNvbi1wbGF5LXZvbHVtZSYmVGV4dCcpICtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0JyDCtyAnICsgJ+WWnOasoiAnICsgcGRmaCh3ZWJfbGlzdHNbaV0sICcuaWNvbi1saWtlJiZUZXh0JykgKyAnXFxcXFxcXFxuJyArIHBkZmgod2ViX2xpc3RzW2ldLFxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdCdwJiYuZnNfMTImJlRleHQnKSArICdcXFxcXFxcXHRcXFxcXFxcXHQnICsgcGRmaCh3ZWJfbGlzdHNbaV0sICcubmFtZSYmVGV4dCcpICsgXFxcXFxcXCI8L2ZvbnQ+IDwvc21hbGw+XFxcXFxcXCIsXFxcXG5cXFxcdFxcXFx0XFxcXHRwaWNfdXJsOiBwZCh3ZWJfbGlzdHNbaV0sICdpbWcmJl9zcmMnKSArICdAUmVmZXJlcj0nICsgcGQod2ViX2xpc3RzW2ldLCAnaW1nJiZfc3JjJyksXFxcXG5cXFxcdFxcXFx0XFxcXHR1cmw6IGV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFxcXFxcImhpa2VyOi8vcGFnZS/op4bpopHor6bmg4XpobVcXFxcXFxcIikpLnJ1bGUpLFxcXFxuXFxcXHRcXFxcdH0pO1xcXFxuXFxcXHR9XFxcXG59IGVsc2Uge1xcXFxuXFxcXHRldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcXFxcXCJoaWtlcjovL3BhZ2UvRU5EXFxcXFxcXCIpKS5ydWxlKVxcXFxufVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcImFwcOaSreaUvumTvuaOpVxcXCIsXFxcInBhdGhcXFwiOlxcXCJhcHDmkq3mlL7pk77mjqVcXFwiLFxcXCJydWxlXFxcIjpcXFwiJChQTEFZX0xJTktTKS5sYXp5UnVsZSgoKSA9PiB7XFxcXG5cXFxcdHRyeXtcXFxcbnZhciBwbGF5X3VybF9qc29uID0gSlNPTi5wYXJzZShyZXF1ZXN0KGlucHV0KSkuZGF0YTtcXFxcblxcXFx0dmFyIHBsYXlfdXJscyA9IHBsYXlfdXJsX2pzb24udmlkZW8uY29udGVudC5wcm9ncmVzc2l2ZTtcXFxcblxcXFx0Ly8g5byA5aeL6I635Y+W5by55bmVXFxcXG5cXFxcdHZhciBkYW5tYWt1ID0gcGxheV91cmxfanNvbi52aWQ7XFxcXG5cXFxcdHZhciBkYW5tdSA9ICdodHRwczovL29zcy1kYW5tYWt1MTIueHBjY2RuLmNvbS8nICsgZGFubWFrdSArICcudHh0JztcXFxcblxcXFx0dmFyIGNvZGUgPSByZXF1ZXN0KGRhbm11KVxcXFxuXFxcXHR2YXIgYXJyID0gY29kZS5zcGxpdChcXFxcXFxcIlxcXFxcXFxcblxcXFxcXFwiKVxcXFxuXFxcXHR2YXIgciA9IFtdXFxcXG5cXFxcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxcXG5cXFxcdFxcXFx0dHJ5IHtcXFxcblxcXFx0XFxcXHRcXFxcdHZhciBsaW5lID0gSlNPTi5wYXJzZShhcnJbaV0pXFxcXG5cXFxcdFxcXFx0XFxcXHRpZiAobGluZS5jb250ZW50KSB7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdHIucHVzaCh7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0dGV4dDogbGluZS5jb250ZW50LFxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdHRpbWU6IGxpbmUub2Zmc2V0XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdH0pXFxcXG5cXFxcdFxcXFx0XFxcXHR9XFxcXG5cXFxcdFxcXFx0fSBjYXRjaCAoZSkge31cXFxcblxcXFx0fVxcXFxuXFxcXHR3cml0ZUZpbGUoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL2Rhbm11Lmpzb25cXFxcXFxcIiwgSlNPTi5zdHJpbmdpZnkocikpXFxcXG5cXFxcdC8vIOe7k+adn+W8ueW5leiOt+WPllxcXFxuXFxcXHRsZXQgdXJscyA9IFtdO1xcXFxuXFxcXHRsZXQgbmFtZXMgPSBbXTtcXFxcblxcXFx0Zm9yIChsZXQgaiBpbiBwbGF5X3VybHMpIHtcXFxcblxcXFx0XFxcXHR1cmxzLnB1c2gocGxheV91cmxzW2pdLnVybClcXFxcblxcXFx0XFxcXHRuYW1lcy5wdXNoKHBsYXlfdXJsc1tqXS5wcm9maWxlKVxcXFxuXFxcXHR9XFxcXG5cXFxcdHZhciBhbGxfdXJsID0gSlNPTi5zdHJpbmdpZnkoe1xcXFxuXFxcXHRcXFxcdHVybHM6IHVybHMsXFxcXG5cXFxcdFxcXFx0bmFtZXM6IG5hbWVzLFxcXFxuXFxcXHRcXFxcdGRhbm11OiBcXFxcXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvZGFubXUuanNvblxcXFxcXFwiXFxcXG5cXFxcdH0pXFxcXG4vL1xcXFx0bG9nKGFsbF91cmwpXFxcXG5cXFxcdHJldHVybiBhbGxfdXJsXFxcXG59Y2F0Y2goZSl7XFxcXG52YXIgdXJsPWlucHV0LnNwbGl0KCd1cmw9JylbMV1cXFxcbnVybD11bmVzY2FwZSh1cmwpXFxcXG5yZXR1cm4gJ3dlYjovLycrdXJsXFxcXG59XFxcXG59KVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcImFwcOWIm+S9nOS6uuaQnOe0ouWIl+ihqFxcXCIsXFxcInBhdGhcXFwiOlxcXCJhcHDliJvkvZzkurrmkJzntKLliJfooahcXFwiLFxcXCJydWxlXFxcIjpcXFwidmFyIEFQUF9VUkwgPSBcXFxcXFxcImh0dHBzOi8vYXBwLnhpbnBpYW5jaGFuZy5jb20vdjIvc2VhcmNoP3R5cGU9XFxcXFxcXCIgKyB0aXBzX3NlbGVjdCArIFxcXFxcXFwiJmt3PVxcXFxcXFwiICsgdGlwc190aXRsZSArJyZwYWdlPScgKyBQQUdFO1xcXFxudmFyIGFwcF9saXN0cyA9IEpTT04ucGFyc2UocmVxdWVzdChBUFBfVVJMKSkuZGF0YS5saXN0O1xcXFxuaWYoYXBwX2xpc3RzLmxlbmd0aCAhPVxcXFxcXFwiXFxcXFxcXCIpIHtcXFxcbmZvciAobGV0IGkgaW4gYXBwX2xpc3RzKSB7XFxcXG4gICBzZXRQYWdlVGl0bGUoYXBwX2xpc3RzW2ldLnVzZXJuYW1lKVxcXFxuIHZhciBVU0VSX0hPTUU9YXBwX2xpc3RzW2ldLnVybC5yZXBsYWNlKC9uZXdzdHVkaW9zLywnaHR0cHMnKVxcXFxuZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJibGFua19ibG9ja1xcXFxcXFwiXFxcXG4gICAgICAgIH0pXFxcXG4gICAgfVxcXFxudmFyIHVybD1ldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcXFxcXCJoaWtlcjovL3BhZ2Uv5Yib5L2c5Lq66aaW6aG1XFxcXFxcXCIpKS5ydWxlKVxcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIGltZzogYXBwX2xpc3RzW2ldLmF2YXRhciArICdAUmVmZXJlcj0nICsgYXBwX2xpc3RzW2ldLmF2YXRhcixcXFxcbiAgICAgICAgdGl0bGU6IGFwcF9saXN0c1tpXS51c2VybmFtZSxcXFxcbiAgICAgICAgZGVzYzogJycsXFxcXG4gICAgICAgIHVybDp1cmwsXFxcXG4gICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcXFxcbiAgICB9KVxcXFxuXFxcXG4gICAgdmFyIG9jY3VwYXRpb24gPSBhcHBfbGlzdHNbaV0ub2NjdXBhdGlvbjtcXFxcbiAgICB2YXIgZm9sbG93ZXIgPSAn57KJ5LidICcgKyBhcHBfbGlzdHNbaV0uY291bnQuY291bnRfZm9sbG93ZXI7XFxcXG4gICAgaWYgKCFvY2N1cGF0aW9uKSB7XFxcXG4gICAgICAgIG9jY3VwYXRpb24gPSAnJ1xcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIG9jY3VwYXRpb24gPSBvY2N1cGF0aW9uICsgJyDCtyAnXFxcXG4gICAgfVxcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiBcXFxcXFxcIuKAnOKAnOKAneKAnSA8c21hbGw+PGZvbnQgY29sb3I9J2dyZXknPlxcXFxcXFwiICsgJ1xcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHQnICsgb2NjdXBhdGlvbiArIGZvbGxvd2VyICsgXFxcXFxcXCI8L2ZvbnQ+IDwvc21hbGw+XFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogdXJsLFxcXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMScsXFxcXG4gICAgfSlcXFxcbn1cXFxcdH1lbHNle1xcXFxuICBldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcXFxcXCJoaWtlcjovL3BhZ2UvRU5EXFxcXFxcXCIpKS5ydWxlKVxcXFxufVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuWIm+S9nOS6uummlumhtVxcXCIsXFxcInBhdGhcXFwiOlxcXCLliJvkvZzkurrpppbpobVcXFwiLFxcXCJydWxlXFxcIjpcXFwiJCgnaGlrZXI6Ly9lbXB0eSNmeXBhZ2UjaW1tZXJzaXZlVGhlbWUjI25vSGlzdG9yeSMnKS5ydWxlKChVU0VSX0hPTUUpID0+IHtcXFxcblxcXFx0dHJ5IHtcXFxcblxcXFx0XFxcXHR2YXIgUEFHRSA9IE1ZX1VSTC5zcGxpdCgnIycpWzFdO1xcXFxuXFxcXHRcXFxcdHZhciBkID0gW107XFxcXG5cXFxcdFxcXFx0Ly8g5aS06YOoXFxcXG5cXFxcdFxcXFx0dmFyIHVybCA9IFVTRVJfSE9NRTtcXFxcblxcXFx0XFxcXHR2YXIgVVNFUl9KU09OID0gSlNPTi5wYXJzZShyZXF1ZXN0KHVybCkpLmRhdGE7XFxcXG5cXFxcdFxcXFx0dmFyIElEID0gVVNFUl9KU09OLmlkO1xcXFxuXFxcXHRcXFxcdHZhciBhcHBfYmFja2dyb3VuZCA9IFVTRVJfSlNPTi5hcHBfYmFja2dyb3VuZDtcXFxcblxcXFx0XFxcXHRpZiAoIWFwcF9iYWNrZ3JvdW5kKSBhcHBfYmFja2dyb3VuZCA9ICdodHRwOi8vODIuMTU2LjIyMi43Ny93ZWlzeXIvaW1nL3hpbnBpYW5jaGFuZy5qcGcnO1xcXFxuXFxcXHRcXFxcdHZhciB1c2VyX2F2YXRhciA9IFVTRVJfSlNPTi5hdmF0YXI7XFxcXG5cXFxcdFxcXFx0dmFyIHVzZXJfbmFtZSA9IFVTRVJfSlNPTi51c2VybmFtZTtcXFxcblxcXFx0XFxcXHRzZXRQYWdlVGl0bGUodXNlcl9uYW1lKVxcXFxuXFxcXHRcXFxcdHZhciB1c2VyX2Rlc2MgPSBVU0VSX0pTT04udmVyaWZ5X2Rlc2NyaXB0aW9uO1xcXFxuXFxcXHRcXFxcdHZhciB1c2VyX2Fib3V0ID0gVVNFUl9KU09OLmFib3V0O1xcXFxuXFxcXHRcXFxcdC8v5Lq65rCUXFxcXG5cXFxcdFxcXFx0dmFyIGNvdW50X3BvcHVsYXJpdHkgPSBVU0VSX0pTT04uY291bnQuY291bnRfcG9wdWxhcml0eTtcXFxcblxcXFx0XFxcXHRpZiAoY291bnRfcG9wdWxhcml0eSA+IDEwMDAwKSBjb3VudF9wb3B1bGFyaXR5ID0gKGNvdW50X3BvcHVsYXJpdHkgLyAxMDAwMCkudG9GaXhlZCgxKSArICd3JztcXFxcblxcXFx0XFxcXHQvL+eyieS4nVxcXFxuXFxcXHRcXFxcdHZhciBjb3VudF9mb2xsb3dlciA9IFVTRVJfSlNPTi5jb3VudC5jb3VudF9mb2xsb3dlcjtcXFxcblxcXFx0XFxcXHRpZiAoY291bnRfZm9sbG93ZXIgPiAxMDAwKSBjb3VudF9mb2xsb3dlciA9IChjb3VudF9mb2xsb3dlciAvIDEwMDApLnRvRml4ZWQoMSkgKyAnayc7XFxcXG5cXFxcdFxcXFx0YWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKCgpID0+IHtcXFxcblxcXFx0XFxcXHRcXFxcdGNsZWFyTXlWYXIoJ+S4u+mhteexu+WIqycpO1xcXFxuXFxcXHRcXFxcdH0pKVxcXFxuXFxcXHRcXFxcdHZhciB0aXBzX3NlbGVjdCA9IGdldE15VmFyKFxcXFxcXFwi5Li76aG157G75YirXFxcXFxcXCIsICduZXcnKTtcXFxcblxcXFx0XFxcXHRpZiAoUEFHRSA9PSAxKSB7XFxcXG5cXFxcdFxcXFx0XFxcXHRkLnB1c2goe1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRjb2xfdHlwZTogJ3BpY18xX2Z1bGwnLFxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHR0aXRsZTogJzAnLFxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRpbWc6IGFwcF9iYWNrZ3JvdW5kLFxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHR1cmw6ICdoaWtlcjovL2VtcHR5JyxcXFxcblxcXFx0XFxcXHRcXFxcdH0pO1xcXFxuXFxcXHRcXFxcdFxcXFx0ZC5wdXNoKHtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0Y29sX3R5cGU6ICdhdmF0YXInLFxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHR0aXRsZTogdXNlcl9uYW1lICsgJ1xcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdCcgKyBcXFxcXFxcIjxmb250IGNvbG9yPWdyZXk+XFxcXFxcXCIgKyAn5Lq65rCUICcgKyBjb3VudF9wb3B1bGFyaXR5ICsgJyDCtyAnICsn57KJ5LidICcgK2NvdW50X2ZvbGxvd2VyICsgXFxcXFxcXCI8L2ZvbnQ+XFxcXFxcXCIsXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdGltZzogdXNlcl9hdmF0YXIsXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdHVybDogJ2hpa2VyOi8vZW1wdHknLFxcXFxuXFxcXHRcXFxcdFxcXFx0fSk7XFxcXG5cXFxcdFxcXFx0XFxcXHRkLnB1c2goe1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRjb2xfdHlwZTogJ2xpbmUnLFxcXFxuXFxcXHRcXFxcdFxcXFx0fSk7XFxcXG5cXFxcblxcXFx0XFxcXHRcXFxcdHZhciBDb2xvciA9IFxcXFxcXFwiI0ZBNzI5OFxcXFxcXFwiO1xcXFxuXFxcXHRcXFxcdFxcXFx0ZnVuY3Rpb24gZ2V0SGVhZCh0aXRsZXMpIHtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0cmV0dXJuICfigJjigJjigJnigJk8c3Ryb25nPjxmb250IGNvbG9yPVxcXFxcXFwiJyArIENvbG9yICsgJ1xcXFxcXFwiPicgKyB0aXRsZXMgKyAnPC9mcm9udD48L3N0cm9uZz4nO1xcXFxuXFxcXHRcXFxcdFxcXFx0fVxcXFxuXFxcXHRcXFxcdFxcXFx0ZC5wdXNoKHtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0Y29sX3R5cGU6ICd0ZXh0XzQnLFxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHR0aXRsZTogdGlwc19zZWxlY3QgPT0gJ25ldycgPyBnZXRIZWFkKHRpdGxlcyA9IFxcXFxcXFwi5pyA5pawXFxcXFxcXCIpIDogJ+acgOaWsCcsXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKSA9PiB7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0cHV0TXlWYXIoJ+S4u+mhteexu+WIqycsICduZXcnKTtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRyZWZyZXNoUGFnZSgpO1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIjtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0fSksXFxcXG5cXFxcdFxcXFx0XFxcXHR9KTtcXFxcblxcXFx0XFxcXHRcXFxcdGQucHVzaCh7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdGNvbF90eXBlOiAndGV4dF80JyxcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0dGl0bGU6IHRpcHNfc2VsZWN0ID09ICd2aWV3JyA/IGdldEhlYWQodGl0bGVzID0gXFxcXFxcXCLng63pl6hcXFxcXFxcIikgOiAn54Ot6ZeoJyxcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0dXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpID0+IHtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRwdXRNeVZhcign5Li76aG157G75YirJywgJ3ZpZXcnKTtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRyZWZyZXNoUGFnZSgpO1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIjtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0fSksXFxcXG5cXFxcdFxcXFx0XFxcXHR9KTtcXFxcblxcXFx0XFxcXHRcXFxcdGQucHVzaCh7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdGNvbF90eXBlOiAndGV4dF80JyxcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0dGl0bGU6IHRpcHNfc2VsZWN0ID09ICdjb2xsZWN0aW9ucycgPyBnZXRIZWFkKHRpdGxlcyA9IFxcXFxcXFwi5LiT6L6RXFxcXFxcXCIpIDogJ+S4k+i+kScsXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKSA9PiB7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0cHV0TXlWYXIoJ+S4u+mhteexu+WIqycsICdjb2xsZWN0aW9ucycpO1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdHJlZnJlc2hQYWdlKCk7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0cmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiO1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHR9KSxcXFxcblxcXFx0XFxcXHRcXFxcdH0pO1xcXFxuXFxcXHRcXFxcdFxcXFx0ZC5wdXNoKHtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0Y29sX3R5cGU6ICd0ZXh0XzQnLFxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHR0aXRsZTogdGlwc19zZWxlY3QgPT0gJ+aAu+aWh+eroCcgPyBnZXRIZWFkKHRpdGxlcyA9IFxcXFxcXFwi5paH56ugXFxcXFxcXCIpIDogJ+aWh+eroCcsXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpID0+IHtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRwdXRNeVZhcign5Li76aG157G75YirJywgJ+aAu+aWh+eroCcpO1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdHJlZnJlc2hQYWdlKCk7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0cmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiO1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHR9KSxcXFxcblxcXFx0XFxcXHRcXFxcdH0pO1xcXFxuXFxcXHRcXFxcdH1cXFxcblxcXFx0XFxcXHQvLyDliJfooajpg6jliIZcXFxcblxcXFx0XFxcXHRpZiAodGlwc19zZWxlY3QgPT0gJ25ldycgfHwgdGlwc19zZWxlY3QgPT0gJ3ZpZXcnKSB7XFxcXG5cXFxcdFxcXFx0XFxcXHRldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcXFxcXCJoaWtlcjovL3BhZ2Uv5Yib5L2c5Lq65L2c5ZOB5YiX6KGoXFxcXFxcXCIpKS5ydWxlKVxcXFxuXFxcXHRcXFxcdH1cXFxcblxcXFx0XFxcXHRpZiAodGlwc19zZWxlY3QgPT0gJ2NvbGxlY3Rpb25zJykge1xcXFxuXFxcXHRcXFxcdFxcXFx0ZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL+WIm+S9nOS6uuS4k+i+keWIl+ihqFxcXFxcXFwiKSkucnVsZSlcXFxcblxcXFx0XFxcXHR9XFxcXG5cXFxcdFxcXFx0aWYgKHRpcHNfc2VsZWN0ID09ICfmgLvmlofnq6AnKSB7XFxcXG5cXFxcdFxcXFx0XFxcXHRldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcXFxcXCJoaWtlcjovL3BhZ2Uvd2ViX+aWh+eroOWIl+ihqFxcXFxcXFwiKSkucnVsZSlcXFxcblxcXFx0XFxcXHR9XFxcXG5cXFxcdFxcXFx0c2V0UmVzdWx0KGQpO1xcXFxuXFxcXHR9IGNhdGNoIChlKSB7XFxcXG5cXFxcdFxcXFx0YmFjayhmYWxzZSlcXFxcblxcXFx0fVxcXFxufSwgVVNFUl9IT01FKVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIummlumhteWbuuWumkpTT05cXFwiLFxcXCJwYXRoXFxcIjpcXFwi6aaW6aG15Zu65a6aSlNPTlxcXCIsXFxcInJ1bGVcXFwiOlxcXCJ2YXIgaW5kZXhfdXJsID0gJ2h0dHBzOi8vYXBwLnhpbnBpYW5jaGFuZy5jb20vcGFnZS9kaXNjb3ZlcnknO1xcXFxudmFyIGluZGV4X0pTT04gPSBKU09OLnBhcnNlKHJlcXVlc3QoaW5kZXhfdXJsLCB7aGVhZGVyczogeydVc2VyLUFnZW50JzpcXFxcXFxcIlVzZXItQWdlbnROZXdTdHVkaW9zLzEuOS4xIChjb20ueGlucGlhbmNoYW5nLm5ld3N0dWRpb3M7IGJ1aWxkOjc4NjsgQW5kcm9pZCAxMVxcXFxcXFwifSxtZXRob2Q6ICdHRVQnfSkpLmRhdGE7XFxcXG5sZXQgWFBDID0gaW5kZXhfSlNPTi5jYXRlZ29yaWVzO1xcXFxubGV0IGJhbm5lcnMgPSBpbmRleF9KU09OLmJhbm5lcnM7XFxcXG52YXIgdCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGJhbm5lcnMubGVuZ3RoKTtcXFxcbmJhbm5lcnMgPSBpbmRleF9KU09OLmJhbm5lcnNbdF07XFxcXG52YXIgUExBWV9MSU5LUyA9IGJhbm5lcnMudXJsLnJlcGxhY2UoL25ld3N0dWRpb3MvLCAnaHR0cHMnKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLliJvkvZzkurrkvZzlk4HliJfooahcXFwiLFxcXCJwYXRoXFxcIjpcXFwi5Yib5L2c5Lq65L2c5ZOB5YiX6KGoXFxcIixcXFwicnVsZVxcXCI6XFxcIi8vIOaXtumXtOaIs+i9rOaNolxcXFxuZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL+aXtumXtOaIs+i9rOaNolxcXFxcXFwiKSkucnVsZSk7XFxcXG52YXIgbGlzdF91cmwgPSB1cmwgKyAnL2FydGljbGVzP2lzX2hpZGVfaW5fc3BhY2U9MCZvcmRlcj0nICsgdGlwc19zZWxlY3QgKycmcmV0dXJuX3N0cnVjdF90eXBlPXVzZXJfaG9tZSZ0eXBlPXB1YmxpYyZwYWdlPScgKyBQQUdFO1xcXFxudmFyIEFQUF9KU09OID0gSlNPTi5wYXJzZShyZXF1ZXN0KGxpc3RfdXJsKSkuZGF0YTtcXFxcbi8qdmFyIHRvdGFsID0gQVBQX0pTT04udG90YWw7XFxcXG5wdXRNeVZhcign5L2c5ZOB5pWw6YePJyx0b3RhbCk7Ki9cXFxcbkFQUF9KU09OPUFQUF9KU09OLmxpc3Q7XFxcXG5pZiAoQVBQX0pTT04ubGVuZ3RoICE9IFxcXFxcXFwiXFxcXFxcXCIpIHtcXFxcblxcXFx0Zm9yIChsZXQgaSBpbiBBUFBfSlNPTikge1xcXFxuXFxcXHRcXFxcdHZhciBhcHBfY2FjaGUgPSBBUFBfSlNPTltpXS5yZXNvdXJjZTtcXFxcblxcXFx0XFxcXHR2YXIgUExBWV9MSU5LUyA9IGFwcF9jYWNoZS51cmwucmVwbGFjZSgvbmV3c3R1ZGlvcy8sICdodHRwcycpO1xcXFxuXFxcXHRcXFxcdHZhciBsaWtlID0gYXBwX2NhY2hlLmNvdW50LmNvdW50X2xpa2U7XFxcXG5cXFxcdFxcXFx0dmFyIHZpZXcgPSBhcHBfY2FjaGUuY291bnQuY291bnRfdmlldztcXFxcblxcXFx0XFxcXHRpZiAobGlrZSA+IDEwMDApIGxpa2UgPSAobGlrZSAvIDEwMDApLnRvRml4ZWQoMSkgKyAnayc7XFxcXG5cXFxcdFxcXFx0aWYgKHZpZXcgPiAxMDAwMCkgdmlldyA9ICh2aWV3IC8gMTAwMDApLnRvRml4ZWQoMSkgKyAndyc7XFxcXG5cXFxcdFxcXFx0dmFyIGltZyA9IGFwcF9jYWNoZS5jb3ZlcjtcXFxcblxcXFx0XFxcXHR2YXIgdGl0bGUgPSBhcHBfY2FjaGUudGl0bGU7XFxcXG5cXFxcdFxcXFx0dmFyIHB1Ymxpc2hfdGltZSA9IGFwcF9jYWNoZS5wdWJsaXNoX3RpbWU7XFxcXG5cXFxcdFxcXFx0Ly8g5pe26Ze05oiz6L2s5bm05pyI5pelXFxcXG5cXFxcdFxcXFx0cHVibGlzaF90aW1lID0gdGltZXN0YW1wVG9UaW1lKHRtID0gcHVibGlzaF90aW1lLCB0cz0wKVxcXFxuXFxcXHRcXFxcdGQucHVzaCh7XFxcXG5cXFxcdFxcXFx0XFxcXHRjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcXFxuXFxcXHRcXFxcdFxcXFx0dGl0bGU6IHRpdGxlLFxcXFxuXFxcXHRcXFxcdFxcXFx0ZGVzYzogXFxcXFxcXCLigJzigJzigJ3igJ0gPHNtYWxsPjxmb250IGNvbG9yPSdncmV5Jz5cXFxcXFxcIiArIHB1Ymxpc2hfdGltZSArICdcXFxcXFxcXG4nICsgbGlrZSArICcg5Zac5qyiJyArJyDCtyAnICsgdmlldyArJyDop4LnnIsnICsgXFxcXFxcXCI8L2ZvbnQ+IDwvc21hbGw+XFxcXFxcXCIsXFxcXG5cXFxcdFxcXFx0XFxcXHRpbWc6IGltZyxcXFxcblxcXFx0XFxcXHRcXFxcdHVybDogZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL+inhumikeivpuaDhemhtVxcXFxcXFwiKSkucnVsZSksXFxcXG5cXFxcdFxcXFx0fSk7XFxcXG5cXFxcdH1cXFxcbn0gZWxzZSB7XFxcXG5cXFxcdGV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFxcXFxcImhpa2VyOi8vcGFnZS9FTkRcXFxcXFxcIikpLnJ1bGUpXFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5Yib5L2c5Lq65LiT6L6R5YiX6KGoXFxcIixcXFwicGF0aFxcXCI6XFxcIuWIm+S9nOS6uuS4k+i+keWIl+ihqFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJ2YXIgbGlzdF91cmwgPSB1cmwgKyAnL2NvbGxlY3Rpb25zP3BhZ2U9JyArIFBBR0U7XFxcXG52YXIgQVBQX0pTT04gPSBKU09OLnBhcnNlKHJlcXVlc3QobGlzdF91cmwpKS5kYXRhLmxpc3Q7XFxcXG5pZiAoQVBQX0pTT04ubGVuZ3RoICE9IFxcXFxcXFwiXFxcXFxcXCIpIHtcXFxcblxcXFx0Zm9yIChsZXQgaSBpbiBBUFBfSlNPTikge1xcXFxuXFxcXHRcXFxcdHZhciBhcHBfY2FjaGUgPSBBUFBfSlNPTltpXTtcXFxcblxcXFx0XFxcXHR2YXIgQWxidW1fdXJsID0gYXBwX2NhY2hlLnVybC5yZXBsYWNlKC9uZXdzdHVkaW9zLywgJ2h0dHBzJykgKyAnL2FydGljbGVzP2lzX2RldGFpbD10cnVlJnBhZ2U9JztcXFxcblxcXFx0XFxcXHR2YXIgYmdfaW1nID0gYXBwX2NhY2hlLmNvdmVyX3VybDtcXFxcblxcXFx0XFxcXHR2YXIgZGVzYyA9IGFwcF9jYWNoZS5kZXNjcmlwdGlvbjtcXFxcblxcXFx0XFxcXHR2YXIgYXJ0aWNsZSA9IGFwcF9jYWNoZS5jb3VudC5jb3VudF9hcnRpY2xlO1xcXFxuXFxcXHRcXFxcdHZhciBsaWtlID0gYXBwX2NhY2hlLmNvdW50LmNvdW50X2xpa2VkO1xcXFxuXFxcXHRcXFxcdHZhciB2aWV3ID0gYXBwX2NhY2hlLmNvdW50LmNvdW50X3ZpZXdlZDtcXFxcblxcXFx0XFxcXHRpZiAobGlrZSA+IDEwMDApIGxpa2UgPSAobGlrZSAvIDEwMDApLnRvRml4ZWQoMSkgKyAnayc7XFxcXG5cXFxcdFxcXFx0aWYgKHZpZXcgPiAxMDAwMCkgdmlldyA9ICh2aWV3IC8gMTAwMDApLnRvRml4ZWQoMSkgKyAndyc7XFxcXG5cXFxcdFxcXFx0dmFyIGltZyA9IGFwcF9jYWNoZS5jb3Zlcl91cmw7XFxcXG5cXFxcdFxcXFx0dmFyIHRpdGxlID0gYXBwX2NhY2hlLnRpdGxlO1xcXFxuXFxcXHRcXFxcdHZhciBwdXRfdGl0bGUgPSBcXFxcXFxcIuKAnOKAnOKAneKAnSA8c21hbGw+PGZvbnQgY29sb3I9J2dyZXknPlxcXFxcXFwiICsgJ+S9nOWTgSAnICsgYXJ0aWNsZSArICcgwrcgJyArICfmtY/op4ggJyArIHZpZXcgKyAnIMK3ICcgKyAn6LWeICcgK2xpa2UgKyBcXFxcXFxcIjwvZm9udD4gPC9zbWFsbD5cXFxcXFxcIjtcXFxcblxcXFx0XFxcXHRkLnB1c2goe1xcXFxuXFxcXHRcXFxcdFxcXFx0Y29sX3R5cGU6ICdwaWNfMV9jYXJkJyxcXFxcblxcXFx0XFxcXHRcXFxcdHRpdGxlOiB0aXRsZSxcXFxcblxcXFx0XFxcXHRcXFxcdGltZzogYmdfaW1nICsgJ0BSZWZlcmVyPScgK2JnX2ltZyxcXFxcblxcXFx0XFxcXHRcXFxcdGRlc2M6ICfkvZzlk4EgJyArIGFydGljbGUgKyAnICDCtyAgJyArICfmtY/op4ggJyArIHZpZXcgKyAnICDCtyAgJyArICfotZ4gJyArIGxpa2UsXFxcXG5cXFxcdFxcXFx0XFxcXHR1cmw6ICdoaWtlcjovL2VtcHR5JyxcXFxcblxcXFx0XFxcXHRcXFxcdHVybDogJCgnaGlrZXI6Ly9lbXB0eSNmeXBhZ2UjaW1tZXJzaXZlVGhlbWUjbm9IaXN0b3J5IycpLnJ1bGUoKGJnX2ltZywgcHV0X3RpdGxlLCBkZXNjLEFsYnVtX3VybCkgPT4ge1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdHZhciBQQUdFID0gTVlfVVJMLnNwbGl0KCcjJylbMV07XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0dmFyIGQgPSBbXTtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHR2YXIgdXJsID0gQWxidW1fdXJsICsgUEFHRTtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHR2YXIgQVBQX0pTT04gPSBKU09OLnBhcnNlKHJlcXVlc3QodXJsKSkuZGF0YS5saXN0O1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdGlmIChQQUdFID09IDEpIHtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdGQucHVzaCh7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdGNvbF90eXBlOiAncGljXzFfZnVsbCcsXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdHVybDogJ2hpa2VyOi8vZW1wdHknLFxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRpbWc6IGJnX2ltZyxcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdH0pO1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0ZC5wdXNoKHtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0Y29sX3R5cGU6ICd0ZXh0XzEnLFxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHR0aXRsZTogcHV0X3RpdGxlLFxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHR1cmw6ICdoaWtlcjovL2VtcHR5JyxcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0ZXh0cmE6IHtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRsaW5lVmlzaWJsZTogZmFsc2VcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0fVxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0fSk7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRkLnB1c2goe1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRjb2xfdHlwZTogJ3JpY2hfdGV4dCcsXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdHRpdGxlOiBcXFxcXFxcIjxzbWFsbD48Zm9udCBjb2xvcj0nZ3JleSc+XFxcXFxcXCIgKyBkZXNjICtcXFxcXFxcIjwvZm9udD4gPC9zbWFsbD5cXFxcXFxcIixcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0dXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHR9KTtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHR9XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0aWYgKEFQUF9KU09OLmxlbmd0aCAhPSBcXFxcXFxcIlxcXFxcXFwiKSB7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRmb3IgKGxldCBpIGluIEFQUF9KU09OKSB7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdHZhciBQTEFZX0xJTktTID0gQVBQX0pTT05baV0udXJsLnJlcGxhY2UoL25ld3N0dWRpb3MvLCAnaHR0cHMnKTtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0dmFyIHRpdGxlID0gQVBQX0pTT05baV0udGl0bGU7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdHZhciBpbWcgPSBBUFBfSlNPTltpXS5jb3ZlcjtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0dmFyIGNhdCA9IEFQUF9KU09OW2ldLmNhdGVnb3JpZXM7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdHZhciBjYXRfYWxsID0gW11cXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0Zm9yICh2YXIgaSBpbiBjYXQpIHtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHR2YXIgY2F0XzEgPSBjYXRbaV0uY2F0ZWdvcnlfbmFtZTtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHR2YXIgY2F0XzIgPSBjYXRbaV0uc3ViLmNhdGVnb3J5X25hbWU7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0Y2F0X2FsbC5wdXNoKFxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0Y2F0XzEgKyAnLScgKyBjYXRfMiArICcgXFxcXHQnXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0KVxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHR9XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdGNhdF9hbGwgPSBjYXRfYWxsLmpvaW4oXFxcXFxcXCJcXFxcXFxcIilcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0dmFyIGNhdF90aXRsZSA9ICfigJzigJzigJ3igJ08c21hbGw+PGZvbnQgY29sb3I9Z3JleT4nICsgY2F0X2FsbCArICc8L2ZvbnQ+PC9zbWFsbD4nO1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRkLnB1c2goe1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0dGl0bGU6IHRpdGxlLFxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdGRlc2M6IGNhdF90aXRsZSxcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRpbWc6IGltZyxcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHR1cmw6IGV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFxcXFxcImhpa2VyOi8vcGFnZS/op4bpopHor6bmg4XpobVcXFxcXFxcIikpLnJ1bGUpLFxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHR9KTtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdH1cXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHR9IGVsc2Uge1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0ZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL0VORFxcXFxcXFwiKSkucnVsZSlcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHR9XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0c2V0UmVzdWx0KGQpO1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHR9LCBiZ19pbWcsIHB1dF90aXRsZSwgZGVzYywgQWxidW1fdXJsKSxcXFxcblxcXFx0XFxcXHR9KTtcXFxcblxcXFx0fVxcXFxufSBlbHNlIHtcXFxcblxcXFx0ZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL0VORFxcXFxcXFwiKSkucnVsZSlcXFxcbn1cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwidGV4dF8xXFxcIixcXFwibmFtZVxcXCI6XFxcIuinhumikeivpuaDhemhtVxcXCIsXFxcInBhdGhcXFwiOlxcXCLop4bpopHor6bmg4XpobVcXFwiLFxcXCJydWxlXFxcIjpcXFwiJCgnaGlrZXI6Ly9lbXB0eSNmeXBhZ2UjaW1tZXJzaXZlVGhlbWUjI25vSGlzdG9yeSMnKS5ydWxlKChQTEFZX0xJTktTKSA9PiB7XFxcXG5cXFxcdHZhciBQQUdFID0gTVlfVVJMLnNwbGl0KCcjJylbMV07XFxcXG5cXFxcdHZhciBkID0gW107XFxcXG5cXFxcdC8vIOWktOmDqFxcXFxuXFxcXHQvLyB2YXIgdXJsID0gVVNFUl9IT01FO1xcXFxuXFxcXHQvLyBQTEFZX0xJTktTXFxcXG5cXFxcdGFkZExpc3RlbmVyKCdvbkNsb3NlJywgJC50b1N0cmluZygoKSA9PiB7XFxcXG5cXFxcdFxcXFx0Y2xlYXJNeVZhcign5L2c6ICFJyk7XFxcXG5cXFxcdFxcXFx0Y2xlYXJNeVZhcign6K+m57uG57G75YirJyk7XFxcXG5cXFxcdFxcXFx0Y2xlYXJNeVZhcihcXFxcXFxcIuebuOS8vOinhumikVxcXFxcXFwiKTtcXFxcblxcXFx0fSkpXFxcXG5cXFxcdC8vIOaXtumXtOaIs+i9rOaNolxcXFxuXFxcXHRldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcXFxcXCJoaWtlcjovL3BhZ2Uv5pe26Ze05oiz6L2s5o2iXFxcXFxcXCIpKS5ydWxlKTtcXFxcblxcXFx0dmFyIHRpcHNfc2VsZWN0ID0gZ2V0TXlWYXIoXFxcXFxcXCLor6bnu4bnsbvliKtcXFxcXFxcIiwgJ+eugOS7iycpO1xcXFxuXFxcXHRpZiAodGlwc19zZWxlY3QgPT0gJ+ivhOiuuicpIGNsZWFyTXlWYXIoXFxcXFxcXCLnm7jkvLzop4bpopFcXFxcXFxcIik7XFxcXG5cXFxcdHZhciB0aXBzX2FsaWtlID0gZ2V0TXlWYXIoXFxcXFxcXCLnm7jkvLzop4bpopFcXFxcXFxcIik7XFxcXG5cXFxcdHZhciB1cmwgPSBQTEFZX0xJTktTO1xcXFxuXFxcXG5cXFxcdHZhciBEQVRBX0pTT04gPSBKU09OLnBhcnNlKHJlcXVlc3QodXJsKSkuZGF0YTtcXFxcblxcXFx0dmFyIElEID0gREFUQV9KU09OLmlkO1xcXFxuXFxcXHRsZXQgY29tbWVudF91cmwgPSBcXFxcXFxcImh0dHBzOi8vYXBwLnhpbnBpYW5jaGFuZy5jb20vY29tbWVudHM/cmVzb3VyY2VfaWQ9XFxcXFxcXCIgKyBJRCArIFxcXFxcXFwiJnR5cGU9YXJ0aWNsZSZwYWdlPVxcXFxcXFwiICsgUEFHRTtcXFxcblxcXFx0dmFyIENPTU1FTlRfSlNPTiA9IEpTT04ucGFyc2UocmVxdWVzdChjb21tZW50X3VybCkpLmRhdGE7XFxcXG5cXFxcdC8vIOivhOiuuuaAu+aVsFxcXFxuXFxcXHR2YXIgdG90YWwgPSBDT01NRU5UX0pTT04udG90YWw7XFxcXG5cXFxcdHZhciBQTEFZX0xJTktTID0gREFUQV9KU09OLnVybC5yZXBsYWNlKC9uZXdzdHVkaW9zLywgJ2h0dHBzJyk7XFxcXG5cXFxcdHZhciBiZ19pbWcgPSBEQVRBX0pTT04uY292ZXI7XFxcXG5cXFxcdHZhciB0aXRsZSA9IERBVEFfSlNPTi50aXRsZTtcXFxcblxcXFx0c2V0UGFnZVRpdGxlKERBVEFfSlNPTi50aXRsZSlcXFxcblxcXFx0Ly8g5YiG57G7W2ldLmNhdGVnb3J5X25hbWUuc3ViLmNhdGVnb3J5X25hbWVcXFxcblxcXFx0dmFyIGNhdCA9IERBVEFfSlNPTi5jYXRlZ29yaWVzO1xcXFxuXFxcXHQvLyDlj5HluIPml7bpl7RcXFxcblxcXFx0dmFyIHB1Ymxpc2hfdGltZSA9IERBVEFfSlNPTi5wdWJsaXNoX3RpbWU7XFxcXG5cXFxcdHB1Ymxpc2hfdGltZSA9IHRpbWVzdGFtcFRvVGltZSh0bSA9IHB1Ymxpc2hfdGltZSwgdHMgPSAwKVxcXFxuXFxcXHQvLyDmkq3mlL7ph49cXFxcblxcXFx0dmFyIHZpZXcgPSBEQVRBX0pTT04uY291bnQuY291bnRfdmlldztcXFxcblxcXFx0aWYgKHZpZXcgPiAxMDAwMCkgdmlldyA9ICh2aWV3IC8gMTAwMDApLnRvRml4ZWQoMSkgKyAndyc7XFxcXG5cXFxcdC8vIOeugOS7i1xcXFxuXFxcXHR2YXIgY29udGVudCA9IERBVEFfSlNPTi5jb250ZW50O1xcXFxuXFxcXHQvLyDllpzmrKLngrnotZ5cXFxcblxcXFx0dmFyIGxpa2UgPSBEQVRBX0pTT04uY291bnQuY291bnRfbGlrZTtcXFxcblxcXFx0aWYgKGxpa2UgPiAxMDAwKSBsaWtlID0gKGxpa2UgLyAxMDAwKS50b0ZpeGVkKDEpICsgJ2snO1xcXFxuXFxcXHQvLyDmlLbol49cXFxcblxcXFx0dmFyIGNvbGxlY3QgPSBEQVRBX0pTT04uY291bnQuY291bnRfY29sbGVjdDtcXFxcblxcXFx0aWYgKGNvbGxlY3QgPiAxMDAwKSBjb2xsZWN0ID0gKGNvbGxlY3QgLyAxMDAwKS50b0ZpeGVkKDEpICsgJ2snO1xcXFxuXFxcXHQvLyDliIbkuqtcXFxcblxcXFx0dmFyIHNoYXJlID0gREFUQV9KU09OLmNvdW50LmNvdW50X3NoYXJlO1xcXFxuXFxcXHRpZiAoc2hhcmUgPiAxMDAwKSBzaGFyZSA9IChzaGFyZSAvIDEwMDApLnRvRml4ZWQoMSkgKyAnayc7XFxcXG5cXFxcdC8vIOagh+etvltpXS5uYW1lXFxcXG5cXFxcdHZhciB0YWdzID0gREFUQV9KU09OLnRhZ3M7XFxcXG5cXFxcdC8vIOWIm+S9nOS6ui51cmwo5Li76aG1KS51c2VybmFtZSjlkI3lrZcpLmF2YXRhcijlkI3lrZcpXFxcXG5cXFxcdHZhciB1c2VyID0gREFUQV9KU09OLmF1dGhvci51c2VyaW5mbztcXFxcblxcXFx0cHV0TXlWYXIoJ+S9nOiAhScsIHVzZXIudXNlcm5hbWUpO1xcXFxuXFxcXG5cXFxcdGlmIChQQUdFID09IDEpIHtcXFxcblxcXFx0XFxcXHRkLnB1c2goe1xcXFxuXFxcXHRcXFxcdFxcXFx0Y29sX3R5cGU6ICdwaWNfMV9mdWxsJyxcXFxcblxcXFx0XFxcXHRcXFxcdHRpdGxlOiAnMCcsXFxcXG5cXFxcdFxcXFx0XFxcXHRpbWc6IGJnX2ltZyxcXFxcblxcXFx0XFxcXHRcXFxcdHVybDogJCgpLmxhenlSdWxlKChEQVRBX0pTT04pID0+IHtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0dmFyIHBsYXlfdXJscyA9IERBVEFfSlNPTi52aWRlby5jb250ZW50LnByb2dyZXNzaXZlO1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHQvLyDlvIDlp4vojrflj5blvLnluZVcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0dmFyIGRhbm1ha3UgPSBEQVRBX0pTT04udmlkO1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHR2YXIgZGFubXUgPSAnaHR0cHM6Ly9vc3MtZGFubWFrdTEyLnhwY2Nkbi5jb20vJyArIGRhbm1ha3UgKyAnLnR4dCc7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdHZhciBjb2RlID0gcmVxdWVzdChkYW5tdSlcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0dmFyIGFyciA9IGNvZGUuc3BsaXQoXFxcXFxcXCJcXFxcXFxcXG5cXFxcXFxcIilcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0dmFyIHIgPSBbXVxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdHRyeSB7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHR2YXIgbGluZSA9IEpTT04ucGFyc2UoYXJyW2ldKVxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0aWYgKGxpbmUuY29udGVudCkge1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRyLnB1c2goe1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdHRleHQ6IGxpbmUuY29udGVudCxcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHR0aW1lOiBsaW5lLm9mZnNldFxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHR9KVxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0fVxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdH0gY2F0Y2ggKGUpIHt9XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdH1cXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0d3JpdGVGaWxlKFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9kYW5tdS5qc29uXFxcXFxcXCIsIEpTT04uc3RyaW5naWZ5KHIpKVxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHQvLyDojrflj5blvLnluZVcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0bGV0IHVybHMgPSBbXTtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0bGV0IG5hbWVzID0gW107XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdGZvciAobGV0IGogaW4gcGxheV91cmxzKSB7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0dXJscy5wdXNoKHBsYXlfdXJsc1tqXS51cmwpXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0bmFtZXMucHVzaChwbGF5X3VybHNbal0ucHJvZmlsZSlcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0fVxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHR2YXIgYWxsX3VybCA9IEpTT04uc3RyaW5naWZ5KHtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHR1cmxzOiB1cmxzLFxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdG5hbWVzOiBuYW1lcyxcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRkYW5tdTogXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL2Rhbm11Lmpzb25cXFxcXFxcIlxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHR9KVxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHQvL1xcXFx0bG9nKGFsbF91cmwpXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdHJldHVybiBhbGxfdXJsXFxcXG5cXFxcdFxcXFx0XFxcXHR9LCBEQVRBX0pTT04pLFxcXFxuXFxcXHRcXFxcdH0pO1xcXFxuXFxcXHRcXFxcdHZhciBDb2xvciA9IFxcXFxcXFwiI0ZBNzI5OFxcXFxcXFwiO1xcXFxuXFxcXG5cXFxcdFxcXFx0ZnVuY3Rpb24gZ2V0SGVhZCh0aXRsZXMpIHtcXFxcblxcXFx0XFxcXHRcXFxcdHJldHVybiAn4oCY4oCY4oCZ4oCZPHN0cm9uZz48Zm9udCBjb2xvcj1cXFxcXFxcIicgKyBDb2xvciArICdcXFxcXFxcIj4nICsgdGl0bGVzICsgJzwvZnJvbnQ+PC9zdHJvbmc+JztcXFxcblxcXFx0XFxcXHR9XFxcXG5cXFxcdFxcXFx0ZC5wdXNoKHtcXFxcblxcXFx0XFxcXHRcXFxcdGNvbF90eXBlOiAndGV4dF8yJyxcXFxcblxcXFx0XFxcXHRcXFxcdHRpdGxlOiB0aXBzX3NlbGVjdCA9PSAn566A5LuLJyA/IGdldEhlYWQodGl0bGVzID0gXFxcXFxcXCLnroDku4tcXFxcXFxcIikgOiAn566A5LuLJyxcXFxcblxcXFx0XFxcXHRcXFxcdHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKSA9PiB7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdHB1dE15VmFyKCfor6bnu4bnsbvliKsnLCAn566A5LuLJyk7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdHJlZnJlc2hQYWdlKCk7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIjtcXFxcblxcXFx0XFxcXHRcXFxcdH0pLFxcXFxuXFxcXHRcXFxcdH0pO1xcXFxuXFxcXHRcXFxcdHZhciDor4TorrogPSAn6K+E6K66ICcgKyAn4oCY4oCYJyArIHRvdGFsICsgJ+KAmeKAmSc7XFxcXG5cXFxcdFxcXFx0ZC5wdXNoKHtcXFxcblxcXFx0XFxcXHRcXFxcdGNvbF90eXBlOiAndGV4dF8yJyxcXFxcblxcXFx0XFxcXHRcXFxcdHRpdGxlOiB0aXBzX3NlbGVjdCA9PSAn6K+E6K66JyA/IGdldEhlYWQodGl0bGVzID0g6K+E6K66KSA6IOivhOiuuixcXFxcblxcXFx0XFxcXHRcXFxcdHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKSA9PiB7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdHB1dE15VmFyKCfor6bnu4bnsbvliKsnLCAn6K+E6K66Jyk7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdHJlZnJlc2hQYWdlKCk7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIjtcXFxcblxcXFx0XFxcXHRcXFxcdH0pLFxcXFxuXFxcXHRcXFxcdH0pO1xcXFxuXFxcXHRcXFxcdGQucHVzaCh7XFxcXG5cXFxcdFxcXFx0XFxcXHRjb2xfdHlwZTogJ2xpbmUnLFxcXFxuXFxcXHRcXFxcdH0pO1xcXFxuXFxcXHRcXFxcdC8vIOS7heeugOS7i+mhtVxcXFxuXFxcXHRcXFxcdGlmICh0aXBzX3NlbGVjdCA9PSAn566A5LuLJykge1xcXFxuXFxcXHRcXFxcdFxcXFx0dmFyIFVTRVJfSE9NRSA9IHVzZXIudXJsLnJlcGxhY2UoL25ld3N0dWRpb3MvLCAnaHR0cHMnKTtcXFxcblxcXFx0XFxcXHRcXFxcdHZhciBkb3dubG9hZF91cmwgPSBEQVRBX0pTT04udmlkZW8uY29udGVudC5wcm9ncmVzc2l2ZVswXS51cmw7XFxcXG5cXFxcdFxcXFx0XFxcXHRkLnB1c2goe1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRjb2xfdHlwZTogJ3RleHRfMScsXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdHRpdGxlOiAn4oCc4oCc4oCd4oCdPGI+PGZvbnQgY29sb3I9IzAwMD4nICsgdGl0bGUgKyAnPC9mb250PjwvYj4nLFxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHR1cmw6IFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiLFxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRleHRyYToge1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdGxpbmVWaXNpYmxlOiBmYWxzZVxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHR9XFxcXG5cXFxcdFxcXFx0XFxcXHR9KTtcXFxcblxcXFx0XFxcXHRcXFxcdHZhciBjYXRfYWxsID0gW11cXFxcblxcXFx0XFxcXHRcXFxcdGZvciAodmFyIGkgaW4gY2F0KSB7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdHZhciBjYXRfMSA9IGNhdFtpXS5jYXRlZ29yeV9uYW1lO1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHR2YXIgY2F0XzIgPSBjYXRbaV0uc3ViLmNhdGVnb3J5X25hbWU7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdGNhdF9hbGwucHVzaChcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRjYXRfMSArICctJyArIGNhdF8yICsgJyBcXFxcdCdcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0KVxcXFxuXFxcXHRcXFxcdFxcXFx0fVxcXFxuXFxcXHRcXFxcdFxcXFx0Y2F0X2FsbCA9IGNhdF9hbGwuam9pbihcXFxcXFxcIlxcXFxcXFwiKVxcXFxuXFxcXHRcXFxcdFxcXFx0dmFyIGNhdF90aXRsZSA9ICfigJzigJzigJ3igJ08c21hbGw+PGZvbnQgY29sb3I9Z3JleT4nICsgY2F0X2FsbCArICcgXFxcXHQnICsgcHVibGlzaF90aW1lICsgJyBcXFxcdFxcXFx0JyArIHZpZXcgK1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHQn5qyh5pKt5pS+JyArICc8L2ZvbnQ+PC9zbWFsbD4nO1xcXFxuXFxcXHRcXFxcdFxcXFx0ZC5wdXNoKHtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0dGl0bGU6IGNhdF90aXRsZSxcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0dXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdGNvbF90eXBlOiAndGV4dF8xJyxcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0ZXh0cmE6IHtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRsaW5lVmlzaWJsZTogZmFsc2VcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0fVxcXFxuXFxcXHRcXFxcdFxcXFx0fSk7XFxcXG5cXFxcdFxcXFx0XFxcXHRkLnB1c2goe1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRjb2xfdHlwZTogJ3JpY2hfdGV4dCcsXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdHRpdGxlOiBcXFxcXFxcIjxzbWFsbD48Zm9udCBjb2xvcj0wMDA+XFxcXFxcXCIgKyBjb250ZW50ICsgXFxcXFxcXCI8L2ZvbnQ+IDwvc21hbGw+XFxcXFxcXCIsXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdHVybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCIsXFxcXG5cXFxcdFxcXFx0XFxcXHR9KTtcXFxcblxcXFx0XFxcXHRcXFxcdGQucHVzaCh7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdHRpdGxlOiBsaWtlLFxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRwaWNfdXJsOiAnaHR0cDovLzgyLjE1Ni4yMjIuNzcvd2Vpc3lyL2ljb24vYmJz54K56LWeLnN2ZycsXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdHVybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCIsXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdGNvbF90eXBlOiAnaWNvbl9zbWFsbF80JyxcXFxcblxcXFx0XFxcXHRcXFxcdH0pXFxcXG5cXFxcdFxcXFx0XFxcXHRkLnB1c2goe1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHR0aXRsZTogY29sbGVjdCxcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0cGljX3VybDogJ2h0dHA6Ly84Mi4xNTYuMjIyLjc3L3dlaXN5ci9pY29uL2Jic+aUtuiXjy5zdmcnLFxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHR1cmw6IFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiLFxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRjb2xfdHlwZTogJ2ljb25fc21hbGxfNCcsXFxcXG5cXFxcdFxcXFx0XFxcXHR9KVxcXFxuXFxcXHRcXFxcdFxcXFx0ZC5wdXNoKHtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0dGl0bGU6IHNoYXJlLFxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRwaWNfdXJsOiAnaHR0cDovLzgyLjE1Ni4yMjIuNzcvd2Vpc3lyL2ljb24vYmJz5YiG5LqrLnN2ZycsXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdHVybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCIsXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdGNvbF90eXBlOiAnaWNvbl9zbWFsbF80JyxcXFxcblxcXFx0XFxcXHRcXFxcdH0pXFxcXG5cXFxcdFxcXFx0XFxcXHRkLnB1c2goe1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHR0aXRsZTogJ+S4i+i9vScsXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdHBpY191cmw6ICdodHRwOi8vODIuMTU2LjIyMi43Ny93ZWlzeXIvaWNvbi9iYnPkuIvovb0uc3ZnJyxcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0dXJsOiAnZG93bmxvYWQ6Ly8nICsgZG93bmxvYWRfdXJsLFxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRjb2xfdHlwZTogJ2ljb25fc21hbGxfNCcsXFxcXG5cXFxcdFxcXFx0XFxcXHR9KVxcXFxuXFxcXHRcXFxcdFxcXFx0ZC5wdXNoKHtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0Y29sX3R5cGU6ICdsaW5lJyxcXFxcblxcXFx0XFxcXHRcXFxcdH0pO1xcXFxuXFxcXHRcXFxcdFxcXFx0Zm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdGQucHVzaCh7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0Y29sX3R5cGU6IFxcXFxcXFwiYmxhbmtfYmxvY2tcXFxcXFxcIlxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHR9KVxcXFxuXFxcXHRcXFxcdFxcXFx0fVxcXFxuXFxcXHRcXFxcdFxcXFx0ZC5wdXNoKHtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0Y29sX3R5cGU6ICdibGFua19ibG9jaycsXFxcXG5cXFxcdFxcXFx0XFxcXHR9KTtcXFxcblxcXFx0XFxcXHRcXFxcdGZvciAobGV0IGkgaW4gdGFncykge1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHR2YXIgdGFnID0gdGFnc1tpXS5uYW1lO1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRkLnB1c2goe1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdHRpdGxlOiAn4oCc4oCc4oCd4oCdPHNtYWxsPjxmb250IGNvbG9yPWdyZXk+JyArIHRhZyArICc8L2ZvbnQ+PC9zbWFsbD4nLFxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0dXJsOiAkKCkubGF6eVJ1bGUoKHRhZykgPT4ge1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0cHV0TXlWYXIoJ+aQnOWFs+mUruWtlycsIHRhZyk7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRyZXR1cm4gZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL+i/m+WFpeaQnOe0oumhtVxcXFxcXFwiKSkucnVsZSk7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0fSwgdGFnKSxcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0fSlcXFxcblxcXFx0XFxcXHRcXFxcdH1cXFxcblxcXFx0XFxcXHRcXFxcdGQucHVzaCh7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdGNvbF90eXBlOiAnbGluZScsXFxcXG5cXFxcdFxcXFx0XFxcXHR9KTtcXFxcblxcXFx0XFxcXHRcXFxcdGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRkLnB1c2goe1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdGNvbF90eXBlOiBcXFxcXFxcImJsYW5rX2Jsb2NrXFxcXFxcXCJcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0fSlcXFxcblxcXFx0XFxcXHRcXFxcdH1cXFxcblxcXFx0XFxcXHRcXFxcdGQucHVzaCh7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdGNvbF90eXBlOiAndGV4dF8xJyxcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0dGl0bGU6ICfigJzigJzigJ3igJ08Yj48Zm9udCBjb2xvcj0jMDAwPicgKyAn5Yib5L2c5Lq6JyArICc8L2ZvbnQ+PC9iPicsXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdHVybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCIsXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdGV4dHJhOiB7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0bGluZVZpc2libGU6IGZhbHNlXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdH1cXFxcblxcXFx0XFxcXHRcXFxcdH0pO1xcXFxuXFxcXHRcXFxcdFxcXFx0ZC5wdXNoKHtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0dGl0bGU6IHVzZXIudXNlcm5hbWUsXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdGltZzogdXNlci5hdmF0YXIgKyAnQFJlZmVyZXI9JyArIHVzZXIuYXZhdGFyLFxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHR1cmw6IGV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFxcXFxcImhpa2VyOi8vcGFnZS/liJvkvZzkurrpppbpobVcXFxcXFxcIikpLnJ1bGUpLFxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRjb2xfdHlwZTogJ2ljb25fMl9yb3VuZCcsXFxcXG5cXFxcdFxcXFx0XFxcXHR9KVxcXFxuXFxcXHRcXFxcdFxcXFx0Zm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdGQucHVzaCh7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0Y29sX3R5cGU6IFxcXFxcXFwiYmxhbmtfYmxvY2tcXFxcXFxcIlxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHR9KVxcXFxuXFxcXHRcXFxcdFxcXFx0fVxcXFxuXFxcXHRcXFxcdFxcXFx0ZC5wdXNoKHtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0Y29sX3R5cGU6ICdsaW5lJyxcXFxcblxcXFx0XFxcXHRcXFxcdH0pO1xcXFxuXFxcXHRcXFxcdFxcXFx0Zm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdGQucHVzaCh7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0Y29sX3R5cGU6IFxcXFxcXFwiYmxhbmtfYmxvY2tcXFxcXFxcIlxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHR9KVxcXFxuXFxcXHRcXFxcdFxcXFx0fVxcXFxuXFxcXHRcXFxcdFxcXFx0ZC5wdXNoKHtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0Y29sX3R5cGU6ICd0ZXh0XzEnLFxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHR0aXRsZTogJ+KAnOKAnOKAneKAnTxiPjxmb250IGNvbG9yPSMwMDA+JyArICfnm7jkvLzop4bpopEnICsgJzwvZm9udD48L2I+JyxcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0dXJsOiAkKCkubGF6eVJ1bGUoKCkgPT4ge1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdHB1dE15VmFyKCfnm7jkvLzop4bpopEnLCAn55u45Ly86KeG6aKRJyk7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0cmVmcmVzaFBhZ2UoKTtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRyZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCJcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0fSksXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdGV4dHJhOiB7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0bGluZVZpc2libGU6IGZhbHNlXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdH1cXFxcblxcXFx0XFxcXHRcXFxcdH0pO1xcXFxuXFxcXHRcXFxcdFxcXFx0Ly8g55u45Ly86KeG6aKRXFxcXG5cXFxcdFxcXFx0XFxcXHRpZiAodGlwc19hbGlrZSA9PSAn55u45Ly86KeG6aKRJykge1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHR2YXIgbmV4dF91cmwgPSB1cmwgKyAnL25leHQnO1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHR2YXIgTkVYVF9KU09OID0gSlNPTi5wYXJzZShyZXF1ZXN0KG5leHRfdXJsKSkuZGF0YS5saXN0O1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRmb3IgKGxldCBpIGluIE5FWFRfSlNPTikge1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdHZhciBQTEFZX0xJTktTID0gTkVYVF9KU09OW2ldLnVybC5yZXBsYWNlKC9uZXdzdHVkaW9zLywgJ2h0dHBzJyk7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0dmFyIG5leHRfdGl0bGUgPSBORVhUX0pTT05baV0udGl0bGU7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0dmFyIG5leHRfY292ZXIgPSBORVhUX0pTT05baV0uY292ZXI7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0dmFyIG5leHRfdGl0bGUgPSBORVhUX0pTT05baV0udGl0bGU7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0dmFyIG5leHRfdmlldyA9IE5FWFRfSlNPTltpXS5jb3VudC5jb3VudF92aWV3O1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdGlmIChuZXh0X3ZpZXcgPiAxMDAwMCkgbmV4dF92aWV3ID0gKG5leHRfdmlldyAvIDEwMDAwKS50b0ZpeGVkKDEpICsgJ3cnO1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdHZhciBuZXh0X2xpa2UgPSBORVhUX0pTT05baV0uY291bnQuY291bnRfbGlrZTtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRpZiAobmV4dF9saWtlID4gMTAwMCkgbmV4dF9saWtlID0gKG5leHRfbGlrZSAvIDEwMDApLnRvRml4ZWQoMSkgKyAnayc7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0dmFyIG5leHRfdXNlciA9IE5FWFRfSlNPTltpXS5hdXRob3IudXNlcmluZm8udXNlcm5hbWU7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0ZC5wdXNoKHtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHR0aXRsZTogbmV4dF90aXRsZSxcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdGRlc2M6IFxcXFxcXFwi4oCc4oCc4oCd4oCdIDxzbWFsbD48Zm9udCBjb2xvcj0nZ3JleSc+XFxcXFxcXCIgKyAn5pKt5pS+6YePICcgKyBuZXh0X3ZpZXcgKyAnIMK3IOWWnOasoiAnICtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0bmV4dF9saWtlICsgJ1xcXFxcXFxcbicgKyBuZXh0X3VzZXIgKyBcXFxcXFxcIjwvZm9udD4gPC9zbWFsbD5cXFxcXFxcIixcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdGltZzogbmV4dF9jb3ZlcixcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdHVybDogZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL+inhumikeivpuaDhemhtVxcXFxcXFwiKSkucnVsZSksXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0fSk7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdH1cXFxcblxcXFx0XFxcXHRcXFxcdH1cXFxcblxcXFxuXFxcXHRcXFxcdH1cXFxcblxcXFx0XFxcXHQvLyDnu5PmnZ/nroDku4vpobVcXFxcblxcXFx0fVxcXFxuXFxcXHQvLyDnu5PmnZ/ku4XnrKzkuIDpobVcXFxcblxcXFx0aWYgKHRpcHNfc2VsZWN0ID09ICfor4TorronKSB7XFxcXG5cXFxcdFxcXFx0dmFyIGNhY2hlX2pzb24gPSBDT01NRU5UX0pTT04ubGlzdDtcXFxcblxcXFx0XFxcXHQvL+aXoOivhOiuulxcXFxuXFxcXHRcXFxcdGlmICh0b3RhbCA9PSAwICYmIFBBR0UgPT0gMSkge1xcXFxuXFxcXHRcXFxcdFxcXFx0Zm9yIChsZXQgaSA9IDA7IGkgPCAzMDsgaSsrKSB7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdGQucHVzaCh7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0Y29sX3R5cGU6IFxcXFxcXFwiYmxhbmtfYmxvY2tcXFxcXFxcIlxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHR9KVxcXFxuXFxcXHRcXFxcdFxcXFx0fVxcXFxuXFxcXHRcXFxcdFxcXFx0ZC5wdXNoKHtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0dGl0bGU6IFxcXFxcXFwi4oCc4oCc4oCd4oCdIDxzbWFsbD48Zm9udCBjb2xvcj0nZ3JleSc+XFxcXFxcXCIgKyAn4oCU4oCUICAg5pqC5peg6K+E6K66ICAg4oCU4oCUJyArIFxcXFxcXFwiPC9mb250PiA8L3NtYWxsPlxcXFxcXFwiLFxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCIsXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdGV4dHJhOiB7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0bGluZVZpc2libGU6IGZhbHNlXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdH1cXFxcblxcXFx0XFxcXHRcXFxcdH0pXFxcXG5cXFxcdFxcXFx0fVxcXFxuXFxcXHRcXFxcdGlmIChjYWNoZV9qc29uLmxlbmd0aCAhPSBcXFxcXFxcIlxcXFxcXFwiKSB7XFxcXG5cXFxcdFxcXFx0XFxcXHRmb3IgKGxldCBpIGluIGNhY2hlX2pzb24pIHtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0dmFyIFVTRVJfSE9NRSA9ICdodHRwczovL2FwcC54aW5waWFuY2hhbmcuY29tL3VzZXIvJyArIGNhY2hlX2pzb25baV0udXNlcmlkO1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHR2YXIgdXNlcl9hdmF0YXIgPSBjYWNoZV9qc29uW2ldLnVzZXJJbmZvLmF2YXRhcjtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0dmFyIHVzZXJfdXNlcm5hbWUgPSBjYWNoZV9qc29uW2ldLnVzZXJJbmZvLnVzZXJuYW1lO1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRpZiAoZ2V0TXlWYXIoJ+S9nOiAhScpID09IHVzZXJfdXNlcm5hbWUpIHVzZXJfdXNlcm5hbWUgPSAnPGZvbnQgY29sb3I9I2VkOWE0MT4nICsgdXNlcl91c2VybmFtZSArXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0JzwvZm9udD4nO1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHQvLyDor4TorrrlhoXlrrlcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0dmFyIGNvbnRlbnQgPSBjYWNoZV9qc29uW2ldLmNvbnRlbnQ7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdC8vIOivhOiuuuaXtumXtFxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHR2YXIgYWRkdGltZSA9IGNhY2hlX2pzb25baV0uYWRkdGltZTtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0YWRkdGltZSA9IHRpbWVzdGFtcFRvVGltZSh0bSA9IGFkZHRpbWUsIHRzID0gMSlcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0Ly8g5Zue5aSNXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdGlmIChjYWNoZV9qc29uW2ldLnJlZmVyZXIpIHtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHR2YXIgcmVfbmFtZSA9IGNhY2hlX2pzb25baV0ucmVmZXJlci51c2VySW5mby51c2VybmFtZTtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHR2YXIgcmVfY29udGVudCA9IGNhY2hlX2pzb25baV0ucmVmZXJlci5jb250ZW50O1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdHZhciByZWZlcmVyID0gXFxcXFxcXCI8YmxvY2txdW90ZT48Zm9udCBjb2xvcj0nZ3JleSc+XFxcXFxcXCIgKyAnPGNvZGU+JyArIHJlX25hbWUgKyAnPC9jb2RlPicgKyAnPGJyPicgK1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0cmVfY29udGVudCArIFxcXFxcXFwiPC9mb250PjwvYmxvY2txdW90ZT5cXFxcXFxcIjtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0fSBlbHNlIHtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHR2YXIgcmVmZXJlciA9IFxcXFxcXFwiXFxcXFxcXCJcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0fVxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRkLnB1c2goe1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0Y29sX3R5cGU6IFxcXFxcXFwiYmxhbmtfYmxvY2tcXFxcXFxcIlxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdH0pXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdH1cXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0ZC5wdXNoKHtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHR0aXRsZTogdXNlcl91c2VybmFtZSArIFxcXFxcXFwiPHNtYWxsPjxmb250IGNvbG9yPSdncmV5Jz5cXFxcXFxcIiArICdcXFxcXFxcXHRcXFxcXFxcXHQnICsgYWRkdGltZSArXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcXFxcIjwvZm9udD48L3NtYWxsPlxcXFxcXFwiLFxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdGltZzogdXNlcl9hdmF0YXIgKyAnQFJlZmVyZXI9JyArIHVzZXJfYXZhdGFyLFxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdHVybDogZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL+WIm+S9nOS6uummlumhtVxcXFxcXFwiKSkucnVsZSksXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0Y29sX3R5cGU6ICdhdmF0YXInLFxcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHR9KTtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0ZC5wdXNoKHtcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHR0aXRsZTogcmVmZXJlciArIFxcXFxcXFwiPGZvbnQgY29sb3I9JzAwMCc+XFxcXFxcXCIgKyAnXFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0JyArIGNvbnRlbnQgKyBcXFxcXFxcIjwvZm9udD5cXFxcXFxcIixcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHR1cmw6ICdoaWtlcjovL2VtcHR5JyxcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHRjb2xfdHlwZTogJ3JpY2hfdGV4dCcsXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdH0pXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdGQucHVzaCh7XFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0Y29sX3R5cGU6ICdsaW5lJyxcXFxcblxcXFx0XFxcXHRcXFxcdFxcXFx0fSk7XFxcXG5cXFxcdFxcXFx0XFxcXHR9XFxcXG5cXFxcdFxcXFx0fSBlbHNlIGlmICh0b3RhbCAhPSAwKXtcXFxcblxcXFx0XFxcXHRcXFxcdGV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFxcXFxcImhpa2VyOi8vcGFnZS9FTkRcXFxcXFxcIikpLnJ1bGUpXFxcXG5cXFxcdFxcXFx0fVxcXFxuXFxcXHR9XFxcXG5cXFxcdHNldFJlc3VsdChkKTtcXFxcbn0sIFBMQVlfTElOS1MpXFxcXG5cXFwifSx7XFxcIm5hbWVcXFwiOlxcXCJFTkRcXFwiLFxcXCJwYXRoXFxcIjpcXFwiRU5EXFxcIixcXFwicnVsZVxcXCI6XFxcImQucHVzaCh7XFxcXG5cXFxcdHRpdGxlOiBcXFxcXFxcIuKAnOKAnOKAneKAnSA8c21hbGw+PGZvbnQgY29sb3I9J2dyZXknPlxcXFxcXFwiICsgJ+KAlOKAlCAgIEVORCAgIOKAlOKAlCcgKyBcXFxcXFxcIjwvZm9udD4gPC9zbWFsbD5cXFxcXFxcIixcXFxcblxcXFx0Y29sX3R5cGU6IFxcXFxcXFwidGV4dF9jZW50ZXJfMVxcXFxcXFwiLFxcXFxuXFxcXHRleHRyYToge1xcXFxuXFxcXHRcXFxcdGxpbmVWaXNpYmxlOiBmYWxzZVxcXFxuXFxcXHR9XFxcXG59KVxcXCJ9LHtcXFwibmFtZVxcXCI6XFxcIndlYl/mlofnq6DliJfooahcXFwiLFxcXCJwYXRoXFxcIjpcXFwid2ViX+aWh+eroOWIl+ihqFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJNWV9VUkwgPSAnaHR0cHM6Ly93d3cueGlucGlhbmNoYW5nLmNvbSc7XFxcXG5pZiAodGlwc19zZWxlY3QgPT0gJ+aWh+eroCcpIHtcXFxcblxcXFx0dmFyIFdFQl9VUkwgPSBcXFxcXFxcImh0dHBzOi8vd3d3LnhpbnBpYW5jaGFuZy5jb20vaW5kZXgucGhwP2FwcD1zZWFyY2gmdHM9ZXhwJmt3PVxcXFxcXFwiICsgdGlwc190aXRsZSArJyZwYWdlPScgKyBQQUdFO1xcXFxuXFxcXHR2YXIgZXhwPScubmFtZSc7XFxcXG59XFxcXG5pZiAodGlwc19zZWxlY3QgPT0gJ+aAu+aWh+eroCcpIHtcXFxcblxcXFx0dmFyIGV4cD0nLmV4cC1kZXNjJztcXFxcblxcXFx0dmFyIFdFQl9VUkwgPSBcXFxcXFxcImh0dHBzOi8vd3d3LnhpbnBpYW5jaGFuZy5jb20vdXNlci9leHAvaWQtXFxcXFxcXCIrSUQrXFxcXFxcXCIvY2F0ZWlkLTAvcGFnZS1cXFxcXFxcIisgUEFHRTtcXFxcbn1cXFxcbnZhciB3ZWJfbGlzdHMgPSByZXF1ZXN0KFdFQl9VUkwse2hlYWRlcnM6IHsgJ1VzZXItQWdlbnQnOiAnTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMCknfX0pO1xcXFxud2ViX2xpc3RzID0gcGRmYSh3ZWJfbGlzdHMsIFxcXFxcXFwiLmV4cC1jb24mJmxpXFxcXFxcXCIpXFxcXG5pZiAod2ViX2xpc3RzLmxlbmd0aCAhPSBcXFxcXFxcIlxcXFxcXFwiKSB7XFxcXG5cXFxcdGZvciAodmFyIGkgaW4gd2ViX2xpc3RzKSB7XFxcXG5cXFxcdFxcXFx0c2V0UGFnZVRpdGxlKHBkZmgod2ViX2xpc3RzW2ldLCAnLmV4cC10aXRsZSYmVGV4dCcpKVxcXFxuXFxcXHRcXFxcdGQucHVzaCh7XFxcXG5cXFxcdFxcXFx0XFxcXHRjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcXFxuXFxcXHRcXFxcdFxcXFx0dGl0bGU6IHBkZmgod2ViX2xpc3RzW2ldLCAnLmV4cC10aXRsZSYmVGV4dCcpLFxcXFxuXFxcXHRcXFxcdFxcXFx0ZGVzYzogXFxcXFxcXCLigJzigJzigJ3igJ0gPHNtYWxsPjxmb250IGNvbG9yPSdncmV5Jz5cXFxcXFxcIiArIHBkZmgod2ViX2xpc3RzW2ldLCBleHArJyYmVGV4dCcpICsgXFxcXFxcXCI8L2ZvbnQ+IDwvc21hbGw+XFxcXFxcXCIsXFxcXG5cXFxcdFxcXFx0XFxcXHRwaWNfdXJsOiBwZCh3ZWJfbGlzdHNbaV0sICdpbWcmJl9zcmMnKSArICdAUmVmZXJlcj0nICsgcGQod2ViX2xpc3RzW2ldLCAnaW1nJiZfc3JjJyksXFxcXG5cXFxcdFxcXFx0XFxcXHR1cmw6IHBkKHdlYl9saXN0c1tpXSwgJ2xpJiZhJiZocmVmJykgK1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRgQHJ1bGU9anM6IGxldCBkID0gW107ZC5wdXNoKHt0aXRsZTpwZGZoKGdldFJlc0NvZGUoKSwnLmNvbnRlbnQmJkh0bWwnKSxjb2xfdHlwZTpcXFxcXFxcInJpY2hfdGV4dFxcXFxcXFwifSk7c2V0UmVzdWx0KGQpO2AsXFxcXG5cXFxcdFxcXFx0fSk7XFxcXG5cXFxcdH1cXFxcbn0gZWxzZSB7XFxcXG5cXFxcdGV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFxcXFxcImhpa2VyOi8vcGFnZS9FTkRcXFxcXFxcIikpLnJ1bGUpXFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5pe26Ze05oiz6L2s5o2iXFxcIixcXFwicGF0aFxcXCI6XFxcIuaXtumXtOaIs+i9rOaNolxcXCIsXFxcInJ1bGVcXFwiOlxcXCJmdW5jdGlvbiB0aW1lc3RhbXBUb1RpbWUodG0sIHRzKSB7XFxcXG5cXFxcdFxcXFx0dW5kZWZpbmVkXFxcXG5cXFxcdFxcXFx0dmFyIGRhdGUgPSBuZXcgRGF0ZSh0bSAqIDEwMDApOyAvL+aXtumXtOaIs+S4ujEw5L2N6ZyAKjEwMDDvvIzml7bpl7TmiLPkuLoxM+S9jeeahOivneS4jemcgOS5mDEwMDBcXFxcblxcXFx0XFxcXHR2YXIgWSA9IGRhdGUuZ2V0RnVsbFllYXIoKSArICctJztcXFxcblxcXFx0XFxcXHR2YXIgTSA9IChkYXRlLmdldE1vbnRoKCkgKyAxIDwgMTAgPyAnMCcgKyAoZGF0ZS5nZXRNb250aCgpICsgMSkgOiBkYXRlLmdldE1vbnRoKCkgKyAxKSArICctJztcXFxcblxcXFx0XFxcXHR2YXIgRCA9IGRhdGUuZ2V0RGF0ZSgpO1xcXFxuXFxcXHRcXFxcdHZhciBoID0gJyB8ICcgKyBkYXRlLmdldEhvdXJzKCkgKyAnOic7XFxcXG5cXFxcdFxcXFx0dmFyIG0gPSBkYXRlLmdldE1pbnV0ZXMoKTtcXFxcblxcXFx0XFxcXHRpZihtPDEwKSBtID0gJzAnK207XFxcXG5cXFxcdFxcXFx0bSA9IG0gKyAnOidcXFxcblxcXFx0XFxcXHR2YXIgcyA9IGRhdGUuZ2V0U2Vjb25kcygpO1xcXFxuXFxcXHRcXFxcdGlmKHM8MTApIHMgPSAnMCcrcztcXFxcblxcXFx0XFxcXHRpZiAodHMgPT0gMCkgcmV0dXJuIFkgKyBNICsgRDtcXFxcblxcXFx0XFxcXHRpZiAodHMgPT0gMSkgcmV0dXJuIFkgKyBNICsgRCArIGggKyBtICsgcztcXFxcblxcXFx0fVxcXCJ9XVwifSIsInBpY1VybCI6Imh0dHBzOi8vb3NzLXhwYzAueHBjY2RuLmNvbS9uZXd1cGxvYWQvYXNzZXRzL2FydGljbGUvY292ZXIvMjAyMi8xLzYxZTEzOGJjZWQxOGQiLCJ0aXRsZSI6IuaDs+imgeWQl++8n+i/measoeaYr+e6r+assueahOadnOiVvuaWr+OAiumHjumkkOOAiyJ9
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement