Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥神秘海域@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJqczooXFxuZnVuY3Rpb24gKGFwcHR5cGUsIGFwcFVybCkge1xcbiAgICBsZXQgY2hwID0gW107XFxuICAgIHRyeSB7XFxuICAgICAgICBsZXQgY29udHMgPSBbXSwgaHRtbCA9IEpTT04ucGFyc2UoZmV0Y2goTVlfVVJMLnNwbGl0KFxcXCIjI1xcXCIpWzFdLCB7aGVhZGVyczoge1xcXCJVc2VyLUFnZW50XFxcIjogXFxcIkRhcnQvMi4xMyAoZGFydDppbylcXFwifX0pKTtcXG4gICAgICAgIGlmIChhcHB0eXBlLmluY2x1ZGVzKFxcXCJUVlxcXCIpKSB7XFxuICAgICAgICAgICAgY29udHMgPSBPYmplY3Qua2V5cyhodG1sLnZpZGVvbGlzdCk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGlmIChhcHBVcmwuaW5jbHVkZXMoXFxcImFwaS5waHAvYXBwL1xcXCIpKSB7XFxuICAgICAgICAgICAgICAgIGNvbnRzID0gaHRtbC5kYXRhLnZvZF91cmxfd2l0aF9wbGF5ZXI7XFxuICAgICAgICAgICAgICAgIGlmIChjb250cy5sZW5ndGggPCAxKSB7XFxuICAgICAgICAgICAgICAgICAgICBjb250cyA9IGh0bWwuZGF0YS52b2RfcGxheV91cmwuc3BsaXQoXFxcIiQkJFxcXCIpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgaWYgKGFwcFVybC5pbmNsdWRlcyhcXFwieGdhcHAucGhwL3YxL1xcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICBjb250cyA9IGh0bWwuZGF0YS52b2RfaW5mby52b2RfdXJsX3dpdGhfcGxheWVyO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRzLmxlbmd0aCA8IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cyA9IGh0bWwuZGF0YS52b2RfaW5mby52b2RfcGxheV91cmwuc3BsaXQoXFxcIiQkJFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgY29udHMgPSBodG1sLmRhdGEudm9kX3BsYXlfbGlzdDtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250cy5sZW5ndGggPCAxKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHMgPSBodG1sLmRhdGEudm9kX3BsYXlfdXJsLnNwbGl0KFxcXCIkJCRcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIGxldCBsaXN0ID0gW107XFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgaWYgKGFwcHR5cGUuaW5jbHVkZXMoXFxcIlRWXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgbGlzdCA9IGh0bWwudmlkZW9saXN0W2NvbnRzW2ldXTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBpZiAoY29udHNbaV0udXJscykge1xcbiAgICAgICAgICAgICAgICAgICAgbGlzdCA9IGNvbnRzW2ldLnVybHM7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udHNbaV0udXJsKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCA9IGNvbnRzW2ldLnVybC5zcGxpdChcXFwiI1xcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ID0gY29udHNbaV0uc3BsaXQoXFxcIiNcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBjaHAucHVzaChsaXN0Lmxlbmd0aCk7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgY2F0Y2ggKGUpIHtcXG4gICAgfVxcbiAgICBzZXRSZXN1bHQoXFxcIlxcXFx1NjZmNFxcXFx1NjViMFxcXFx1ODFmMzpcXFwiICsgKE1hdGgubWF4LmFwcGx5KE1hdGgsIGNocCkpKTtcXG59XFxuKShcXFwi5LyY6LSoXFxcIixcXFwiaHR0cHM6Ly93d3cuemhhbmxhbmdidS5jb20vcnVpZmVuZ2xiX2FwaS5waHAvdjEudm9kXFxcIilcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wibmFtZVwiOlwiQVBQ5YiG57G75YiX6KGoXCIsXCJwYXRoXCI6XCJhcHBsaXN0ZGF0YVwiLFwicnVsZVwiOlwiKFxcbmZ1bmN0aW9uICgpIHtcXG4gICAgbGV0IGxpc3QgPSBbXTtcXG4gICAgaWYgKGFwcFVybC5pbmNsdWRlcyhcXFwiYXBpLnBocC9hcHAvXFxcIikpIHtcXG4gICAgICAgIGxpc3QgPSBodG1sLmxpc3Q7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBpZiAoYXBwVXJsLmluY2x1ZGVzKFxcXCJ4Z2FwcC5waHAvdjEvXFxcIikpIHtcXG4gICAgICAgICAgICBsaXN0ID0gaHRtbC5kYXRhO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBsaXN0ID0gaHRtbC5kYXRhLmxpc3Q7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICBsZXQge3ZvZF9uYW1lLCB2b2RfcGljLCB2b2RfaWQsIHZvZF9yZW1hcmtzfSA9IGxpc3RbaV07XFxuICAgICAgICBsZXQgbGluayA9IFxcXCJcXFwiO1xcbiAgICAgICAgaWYgKGFwcFVybC5pbmNsdWRlcyhcXFwiYXBpLnBocC9hcHAvXFxcIikgfHwgYXBwVXJsLmluY2x1ZGVzKFxcXCJ4Z2FwcC5waHAvdjEvXFxcIikpIHtcXG4gICAgICAgICAgICBsaW5rID0gYXBwVXJsICsgXFxcInZpZGVvX2RldGFpbD9pZD1cXFwiICsgdm9kX2lkICsgXFxcIiZ0b2tlbj07Z2V0O3V0Zi04O3tVc2VyLUFnZW50QERhcnQvMi4xMyAoZGFydDppbyl9XFxcIjtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgbGluayA9IGFwcFVybCArIFxcXCIvZGV0YWlsP3ZvZF9pZD1cXFwiICsgdm9kX2lkICsgXFxcIiZyZWxfbGltaXQ9MTA7Z2V0O3V0Zi04O3tVc2VyLUFnZW50QERhcnQvMi4xMyAoZGFydDppbyl9XFxcIjtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICgvaW9wZW55dW4vLnRlc3QoYXBwVXJsKSkge1xcbiAgICAgICAgICAgIGxpbmsgPSBhcHBVcmwgKyBcXFwiL2RldGFpbElEP3ZvZF9pZD1cXFwiICsgdm9kX2lkICsgXFxcIiZyZWxfbGltaXQ9MTA7Z2V0O3V0Zi04O3tVc2VyLUFnZW50QERhcnQvMi4xMyAoZGFydDppbyl9XFxcIjtcXG4gICAgICAgIH1cXG4gICAgICAgIGl0ZW1zLnB1c2goe3RpdGxlOiB2b2RfbmFtZSwgcGljX3VybDogdm9kX3BpYyArIFxcXCJAUmVmZXJlcj1cXFwiLCBkZXNjOiB2b2RfcmVtYXJrcywgY29sX3R5cGU6IFxcXCJtb3ZpZV8zX21hcnF1ZWVcXFwiLCB1cmw6ICQoXFxcIiNpbW1lcnNpdmVUaGVtZSNoaWtlcjovL2VtcHR5IyNcXFwiICsgbGluaykucnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL3BhZ2UvYXBwbW92bGlzdFxcXCIsIHt9KSkucnVsZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgIGxvZyhcXFwiXFxcXHU1ZjcxXFxcXHU3MjQ3XFxcXHU4YmU2XFxcXHU2MGM1XFxcXHU1MWZhXFxcXHU5NTE5OlxcXCIgKyBlLm1lc3NhZ2UpO1xcbiAgICAgICAgICAgICAgICBzZXRSZXN1bHQoW10pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgICl9KTtcXG4gICAgfVxcbn1cXG4pKClcIn0se1wibmFtZVwiOlwiQVBQ6aaW6aG15YiX6KGoXCIsXCJwYXRoXCI6XCJhcHBpbmRleGRhdGFcIixcInJ1bGVcIjpcIihcXG5mdW5jdGlvbiAoKSB7XFxuICAgIGxldCBsaXN0ID0gW107XFxuICAgIGlmIChhcHBVcmwuaW5jbHVkZXMoXFxcImFwaS5waHAvYXBwL1xcXCIpKSB7XFxuICAgICAgICBsaXN0ID0gaHRtbC5saXN0O1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgaWYgKGFwcFVybC5pbmNsdWRlcyhcXFwieGdhcHAucGhwL3YxL1xcXCIpKSB7XFxuICAgICAgICAgICAgbGlzdCA9IGh0bWwuZGF0YTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgbGlzdCA9IGh0bWwuZGF0YS5saXN0O1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgbGV0IGxpc3RzID0gW10sIHR5cGVuYW1lID0gXFxcIlxcXCI7XFxuICAgICAgICBpZiAoYXBwVXJsLmluY2x1ZGVzKFxcXCJhcGkucGhwL2FwcC9cXFwiKSB8fCBhcHBVcmwuaW5jbHVkZXMoXFxcInhnYXBwLnBocC92MS9cXFwiKSkge1xcbiAgICAgICAgICAgIGxpc3RzID0gbGlzdFtpXS52bGlzdDtcXG4gICAgICAgICAgICB0eXBlbmFtZSA9IGxpc3RbaV0udHlwZV9uYW1lO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBsaXN0cyA9IGxpc3RbaV0udm9kX2xpc3Q7XFxuICAgICAgICAgICAgdHlwZW5hbWUgPSBsaXN0W2ldLnZvZF90eXBlX25hbWU7XFxuICAgICAgICB9XFxuICAgICAgICBpdGVtcy5wdXNoKHt0aXRsZTogdHlwZW5hbWUsIGNvbF90eXBlOiBcXFwidGV4dF8xXFxcIiwgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJ9KTtcXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGlzdHMubGVuZ3RoOyBqKyspIHtcXG4gICAgICAgICAgICBsZXQge3ZvZF9uYW1lLCB2b2RfcGljLCB2b2RfaWQsIHZvZF9yZW1hcmtzfSA9IGxpc3RzW2pdO1xcbiAgICAgICAgICAgIGxldCBsaW5rID0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgaWYgKGFwcFVybC5pbmNsdWRlcyhcXFwiYXBpLnBocC9hcHAvXFxcIikgfHwgYXBwVXJsLmluY2x1ZGVzKFxcXCJ4Z2FwcC5waHAvdjEvXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgbGluayA9IGFwcFVybCArIFxcXCJ2aWRlb19kZXRhaWw/aWQ9XFxcIiArIHZvZF9pZCArIFxcXCImdG9rZW49O2dldDt1dGYtODt7VXNlci1BZ2VudEBEYXJ0LzIuMTMgKGRhcnQ6aW8pfVxcXCI7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgbGluayA9IGFwcFVybCArIFxcXCIvZGV0YWlsP3ZvZF9pZD1cXFwiICsgdm9kX2lkICsgXFxcIiZyZWxfbGltaXQ9MTA7Z2V0O3V0Zi04O3tVc2VyLUFnZW50QERhcnQvMi4xMyAoZGFydDppbyl9XFxcIjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKC9pb3Blbnl1bi8udGVzdChhcHBVcmwpKSB7XFxuICAgICAgICAgICAgICAgIGxpbmsgPSBhcHBVcmwgKyBcXFwiL2RldGFpbElEP3ZvZF9pZD1cXFwiICsgdm9kX2lkICsgXFxcIiZyZWxfbGltaXQ9MTA7Z2V0O3V0Zi04O3tVc2VyLUFnZW50QERhcnQvMi4xMyAoZGFydDppbyl9XFxcIjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaXRlbXMucHVzaCh7dGl0bGU6IHZvZF9uYW1lLCBwaWNfdXJsOiB2b2RfcGljICsgXFxcIkBSZWZlcmVyPVxcXCIsIGRlc2M6IHZvZF9yZW1hcmtzLCBjb2xfdHlwZTogXFxcIm1vdmllXzNfbWFycXVlZVxcXCIsIHVybDogJChcXFwiI2ltbWVyc2l2ZVRoZW1lI2hpa2VyOi8vZW1wdHkjI1xcXCIgKyBsaW5rKS5ydWxlKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9wYWdlL2FwcG1vdmxpc3RcXFwiLCB7fSkpLnJ1bGUpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgICAgICBsb2coXFxcIlxcXFx1NWY3MVxcXFx1NzI0N1xcXFx1OGJlNlxcXFx1NjBjNVxcXFx1NTFmYVxcXFx1OTUxOTpcXFwiICsgZS5tZXNzYWdlKTtcXG4gICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdChbXSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgKX0pO1xcbiAgICAgICAgfVxcbiAgICB9XFxufVxcbikoKVwifSx7XCJuYW1lXCI6XCJBUFDpgInpm4ZcIixcInBhdGhcIjpcImFwcG1vdmxpc3RcIixcInJ1bGVcIjpcIihcXG5mdW5jdGlvbiAoY2hhbmdlVXJsLCBhcHBVcmwpIHtcXG4gICAgYWRkTGlzdGVuZXIoXFxcIm9uQ2xvc2VcXFwiLCAkLnRvU3RyaW5nKCh1cmwpID0+IHtcXG4gICAgICAgIGNsZWFyVmFyKFxcXCJhcHBub3dcXFwiKTtcXG4gICAgICAgIGNsZWFyVmFyKHVybCk7XFxuICAgIH1cXG4gICAgLCBNWV9VUkwpKTtcXG4gICAgbGV0IGl0ZW1zID0gW10sIGh0bWwgPSBnZXRWYXIoTVlfVVJMLCBcXFwiXFxcIiksIGRhdGEgPSB7fTtcXG4gICAgaWYgKGh0bWwgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgIGxldCB1cmwgPSBNWV9VUkwuc3BsaXQoXFxcIiMjXFxcIilbMV07XFxuICAgICAgICB1cmwgPSBjaGFuZ2VVcmwodXJsKTtcXG4gICAgICAgIGh0bWwgPSBmZXRjaCh1cmwsIHtoZWFkZXJzOiB7XFxcIlVzZXItQWdlbnRcXFwiOiBcXFwiRGFydC8yLjEzIChkYXJ0OmlvKVxcXCJ9fSk7XFxuICAgICAgICBwdXRWYXIoTVlfVVJMLCBodG1sKTtcXG4gICAgfVxcbiAgICBpZiAoYXBwVXJsLmluY2x1ZGVzKFxcXCJ4Z2FwcC5waHAvdjEvXFxcIikpIHtcXG4gICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGh0bWwpLmRhdGEudm9kX2luZm87XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShodG1sKS5kYXRhO1xcbiAgICB9XFxuICAgIGxldCB7dm9kX25hbWUsIHZvZF9waWMsIHZvZF9jb250ZW50LCB2b2RfY2xhc3MsIHZvZF9yZW1hcmtzLCB2b2RfZGlyZWN0b3IsIHZvZF9hY3Rvciwgdm9kX2FyZWEsIHZvZF9sYW5nLCB2b2RfeWVhcn0gPSBkYXRhO1xcbiAgICBpdGVtcy5wdXNoKHt0aXRsZTogdm9kX25hbWUgKyBcXFwiXFxcXG5cXFwiICsgdm9kX2NsYXNzICsgXFxcIixcXFwiICsgdm9kX3JlbWFya3MgKyBcXFwiXFxcXG5cXFwiICsgdm9kX2FyZWEgKyBcXFwiL1xcXCIgKyB2b2RfbGFuZyArIFxcXCIvXFxcIiArIHZvZF95ZWFyLCBkZXNjOiBcXFwiXFxcXHU1YmZjXFxcXHU2ZjE0OlxcXCIgKyB2b2RfZGlyZWN0b3IgKyBcXFwiXFxcXG5cXFxcdTRlM2JcXFxcdTZmMTQ6XFxcIiArIHZvZF9hY3RvciwgcGljX3VybDogdm9kX3BpYywgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsIGNvbF90eXBlOiBcXFwibW92aWVfMV92ZXJ0aWNhbF9waWNfYmx1clxcXCJ9LCB7dGl0bGU6IFxcXCJcXFxcdTUyNjdcXFxcdTYwYzVcXFxcdTdiODBcXFxcdTRlY2I6XFxcIiwgZGVzYzogdm9kX2NvbnRlbnQsIHVybDogJChcXFwiaGlrZXI6Ly9lbXB0eSNub1JlY29yZEhpc3RvcnkjXFxcIikucnVsZSgoZGVzYykgPT4ge1xcbiAgICAgICAgc2V0UmVzdWx0KFt7dGl0bGU6IGRlc2MsIGNvbF90eXBlOiBcXFwibG9uZ190ZXh0XFxcIn1dKTtcXG4gICAgfVxcbiAgICAsIHZvZF9jb250ZW50KSwgY29sX3R5cGU6IFxcXCJ0ZXh0XzFcXFwifSk7XFxuICAgIGxldCBkbmVuID0gZ2V0TXlWYXIoXFxcImRuZW5cXFwiLCBcXFwiMFxcXCIpO1xcbiAgICBpdGVtcy5wdXNoKHt0aXRsZTogXFxcIlxcXFx1NjVhZFxcXFx1NjNkMjpcXFwiICsgKGRuZW4gPT0gXFxcIjFcXFwiID8gXFxcIlxcXFx1MjAxY1xcXFx1MjAxY1xcXFx1MjcwNVxcXFx1MjAxZFxcXFx1MjAxZFxcXCIgOiBcXFwiXFxcXHUyNzRlXFxcIiksIHVybDogJChcXFwiXFxcIikubGF6eVJ1bGUoKGRuZW4pID0+IHtcXG4gICAgICAgIGlmIChkbmVuID09IFxcXCIxXFxcIikge1xcbiAgICAgICAgICAgIHB1dE15VmFyKFxcXCJkbmVuXFxcIiwgXFxcIjBcXFwiKTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL1xcXFx1NWRmMlxcXFx1Nzk4MVxcXFx1NzUyOFxcXFx1NjVhZFxcXFx1NjNkMlxcXFx1OGMwM1xcXFx1NzUyOCFcXFwiO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBwdXRNeVZhcihcXFwiZG5lblxcXCIsIFxcXCIxXFxcIik7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9cXFxcdTVkZjJcXFxcdTVmMDBcXFxcdTU0MmZcXFxcdTY1YWRcXFxcdTYzZDJcXFxcdThjMDNcXFxcdTc1MjghXFxcIjtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICAsIGRuZW4pLCBjb2xfdHlwZTogXFxcInRleHRfMlxcXCJ9KTtcXG4gICAgaXRlbXMucHVzaCh7dGl0bGU6IFxcXCJcXFxcdTdlYmZcXFxcdThkZWZcXFxcdTkxNGRcXFxcdTdmNmVcXFwiLCB1cmw6IFxcXCJoaWtlcjovL2VtcHR5I25vUmVjb3JkSGlzdG9yeSNAcnVsZT1qczp0aGlzLmQ9W107cmVxdWlyZSgnaHR0cHM6Ly9naXRlYS5jb20vQUk5NTcvSGlrZXIvcmF3L20vdi9Sb3V0ZS5qcycpO1JvdXRlLnNldFBhcnNlKCk7c2V0UmVzdWx0KGQpO1xcXCIsIGNvbF90eXBlOiBcXFwidGV4dF8yXFxcIn0pO1xcbiAgICBpdGVtcy5wdXNoKHt0aXRsZTogXFxcIlxcXFx1MjAxY1xcXFx1MjAxY1xcXFx1MjE5M1xcXFx1MjE5MVxcXFx1MjAxZFxcXFx1MjAxZFxcXCIsIHVybDogXFxcImhpa2VyOi8vZW1wdHlAbGF6eVJ1bGU9LmpzOnB1dFZhcignYXBwbWFwcHNvcnQnLCBnZXRWYXIoJ2FwcG1hcHBzb3J0JywnMScpPT0nMSc/JzAnOicxJyk7cmVmcmVzaFBhZ2UoZmFsc2UpOyd0b2FzdDovL1xcXFx1NTIwN1xcXFx1NjM2MlxcXFx1NjIxMFxcXFx1NTI5ZiEnXFxcIiwgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIn0pO1xcbiAgICBsZXQgY29udHMgPSBbXSwgdGFicyA9IFtdO1xcbiAgICBpZiAoYXBwVXJsLmluY2x1ZGVzKFxcXCJhcGkucGhwL2FwcC9cXFwiKSB8fCBhcHBVcmwuaW5jbHVkZXMoXFxcInhnYXBwLnBocC92MS9cXFwiKSkge1xcbiAgICAgICAgY29udHMgPSBkYXRhLnZvZF91cmxfd2l0aF9wbGF5ZXI7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBjb250cyA9IGRhdGEudm9kX3BsYXlfbGlzdDtcXG4gICAgfVxcbiAgICBpZiAoY29udHMubGVuZ3RoIDwgMSkge1xcbiAgICAgICAgY29udHMgPSBkYXRhLnZvZF9wbGF5X3VybC5zcGxpdChcXFwiJCQkXFxcIik7XFxuICAgICAgICB0YWJzID0gZGF0YS52b2RfcGxheV9mcm9tLnNwbGl0KFxcXCIkJCRcXFwiKTtcXG4gICAgfVxcbiAgICBsZXQgcHRhYiA9IFxcXCJcXFwiO1xcbiAgICBpZiAoZ2V0VmFyKFxcXCJhcHBub3dcXFwiLCBcXFwiXFxcIikgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgIHB1dFZhcihcXFwiYXBwbm93XFxcIiwgXFxcIjBcXFwiKTtcXG4gICAgfVxcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICBsZXQgc3B0YWIgPSBcXFwiXFxcIiwgdGFibmFtZSA9IFxcXCJcXFwiO1xcbiAgICAgICAgaWYgKGFwcFVybC5pbmNsdWRlcyhcXFwiYXBpLnBocC9hcHAvXFxcIikgfHwgYXBwVXJsLmluY2x1ZGVzKFxcXCJ4Z2FwcC5waHAvdjEvXFxcIikpIHtcXG4gICAgICAgICAgICBzcHRhYiA9IGNvbnRzW2ldLmNvZGUgPyBjb250c1tpXS5jb2RlIDogdGFic1tpXTtcXG4gICAgICAgICAgICB0YWJuYW1lID0gY29udHNbaV0ubmFtZSB8fCBzcHRhYjtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgc3B0YWIgPSBjb250c1tpXS5mcm9tID8gY29udHNbaV0uZnJvbSA6IHRhYnNbaV07XFxuICAgICAgICAgICAgdGFibmFtZSA9IGNvbnRzW2ldLnBsYXllcl9pbmZvID8gY29udHNbaV0ucGxheWVyX2luZm8uc2hvdyA6IHNwdGFiO1xcbiAgICAgICAgfVxcbiAgICAgICAgaXRlbXMucHVzaCh7dGl0bGU6IGdldFZhcihcXFwiYXBwbm93XFxcIikgPT0gaSA/IFxcXCJcXFxcdTIwMWNcXFxcdTIwMWNcXFxcdTIwMWRcXFxcdTIwMWRcXFwiICsgdGFibmFtZS5ib2xkKCkuZm9udGNvbG9yKFxcXCIjRkE3Mjk4XFxcIikgOiB0YWJuYW1lLCB1cmw6IFxcXCJoaWtlcjovL2VtcHR5QGxhenlSdWxlPS5qczpwdXRWYXIoJ2FwcG5vdycsJ1xcXCIgKyBpICsgXFxcIicpO3JlZnJlc2hQYWdlKGZhbHNlKTsndG9hc3Q6Ly9cXFxcdTUyMDdcXFxcdTYzNjJcXFxcdTYyMTBcXFxcdTUyOWYhJ1xcXCIsIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCJ9KTtcXG4gICAgICAgIGlmIChnZXRWYXIoXFxcImFwcG5vd1xcXCIpID09IGkpIHtcXG4gICAgICAgICAgICBwdGFiID0gc3B0YWI7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgbGV0IGxpc3QgPSBbXSwgaW5kZXggPSBnZXRWYXIoXFxcImFwcG5vd1xcXCIpO1xcbiAgICBpZiAoYXBwVXJsLmluY2x1ZGVzKFxcXCJhcGkucGhwL2FwcC9cXFwiKSB8fCBhcHBVcmwuaW5jbHVkZXMoXFxcInhnYXBwLnBocC92MS9cXFwiKSkge1xcbiAgICAgICAgbGlzdCA9IGNvbnRzW2luZGV4XS51cmwuc3BsaXQoXFxcIiNcXFwiKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGxpc3QgPSBjb250c1tpbmRleF0udXJscyA/IGNvbnRzW2luZGV4XS51cmxzIDogY29udHNbaW5kZXhdLnVybC5zcGxpdChcXFwiI1xcXCIpO1xcbiAgICB9XFxuICAgIGlmIChnZXRWYXIoXFxcImFwcG1hcHBzb3J0XFxcIiwgXFxcIjFcXFwiKSA9PSBcXFwiMFxcXCIpIHtcXG4gICAgICAgIGxpc3QucmV2ZXJzZSgpO1xcbiAgICB9XFxuICAgIGxldCBqaWVrID0gW107XFxuICAgIHRyeSB7XFxuICAgICAgICBpZiAoYXBwVXJsLmluY2x1ZGVzKFxcXCJhcGkucGhwL2FwcC9cXFwiKSB8fCBhcHBVcmwuaW5jbHVkZXMoXFxcInhnYXBwLnBocC92MS9cXFwiKSkge1xcbiAgICAgICAgICAgIGppZWsucHVzaChjb250c1tpbmRleF0ucGFyc2VfYXBpIHx8IFxcXCJcXFwiKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgamllayA9IChjb250c1tpbmRleF0ucGxheWVyX2luZm8ucGFyc2UyIHx8IFxcXCJcXFwiKS5zcGxpdChcXFwiLFxcXCIpLmNvbmNhdCgoY29udHNbaW5kZXhdLnBsYXllcl9pbmZvLnBhcnNlIHx8IFxcXCJcXFwiKS5zcGxpdChcXFwiLFxcXCIpKTtcXG4gICAgICAgICAgICBqaWVrID0gamllay5tYXAoY3VyID0+IGN1ci5yZXBsYWNlKFxcXCIuLlxcXCIsIFxcXCIuXFxcIikucmVwbGFjZShcXFwianNvbmJzXFxcIiwgXFxcIlxcXCIpKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBjYXRjaCAoZSkge1xcbiAgICB9XFxuICAgIGppZWsgPSBqaWVrLmZpbHRlcihjdXIgPT4gISFjdXIpO1xcbiAgICBsZXQganhVcmwgPSBqaWVrWzBdIHx8IFxcXCJcXFwiO1xcbiAgICBsb2coXFxcIlxcXFxuXFxcXHU1ZjUzXFxcXHU1MjRkXFxcXHU3ZWJmXFxcXHU4ZGVmOlxcXCIgKyBwdGFiICsgXFxcIlxcXFxuXFxcXHU2M2E1XFxcXHU1M2UzXFxcXHU1MjE3XFxcXHU4ODY4OlxcXCIgKyAkLnN0cmluZ2lmeShqaWVrKSk7XFxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGlzdC5sZW5ndGg7IGorKykge1xcbiAgICAgICAgbGV0IHZsaW5rID0gXFxcIlxcXCIsIHRpdGxlID0gXFxcIlxcXCI7XFxuICAgICAgICBpZiAobGlzdFtqXS51cmwpIHtcXG4gICAgICAgICAgICB2bGluayA9IGxpc3Rbal0udXJsLnJlcGxhY2UoLyM0NTYjL2csIFxcXCJodHRwXFxcIikucmVwbGFjZSgvIzEyMyMvZywgXFxcIi5cXFwiKS5yZXBsYWNlKC8jNzg5Iy9nLCBcXFwiOlxcXCIpO1xcbiAgICAgICAgICAgIHRpdGxlID0gbGlzdFtqXS5uYW1lO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB2bGluayA9IGxpc3Rbal0uc3BsaXQoXFxcIiRcXFwiKVsxXTtcXG4gICAgICAgICAgICB0aXRsZSA9IGxpc3Rbal0uc3BsaXQoXFxcIiRcXFwiKVswXTtcXG4gICAgICAgIH1cXG4gICAgICAgIGl0ZW1zLnB1c2goe3RpdGxlOiB0aXRsZSwgY29sX3R5cGU6IFxcXCJ0ZXh0XzRcXFwiLCB1cmw6IGV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9wYWdlL2xhenlQYXJzZVxcXCIpKS5ydWxlKX0pO1xcbiAgICB9XFxuICAgIHNldFJlc3VsdChpdGVtcyk7XFxufVxcbikoXFxuZnVuY3Rpb24gY2hhbmdlVXJsKHVybCkge1xcbiAgICBsZXQgbmV3VXJsID0gdXJsO1xcbiAgICBpZiAodXJsLmluZGV4T2YoXFxcIm9tb2Z1blxcXCIpICE9IC0xKSB7XFxuICAgICAgICBuZXdVcmwgPSB1cmwgKyBcXFwiJmNzcmY9YSUyQklLR0x1bkpDWnVhZCUyQnhFVExyWnVCb3FobHVGQ0QwZEg4NkU4SUVOdkJ6TWZCTGE2ZEI4UnpveHhJdnZCRU1lSnpKblVTdDUxRmhsUEJkNEtyNXloR1hseU52RGtKeU5NRGdEWjFiJTJGc2pYQWVNdGoxN1h0ZU04cHVUWTJQUW5Rd1lPeWolMkZIVUNBVlJaa3JmbHNrODdZRzFWZVN3bkVUOFRwckREOHQ2dWclM0RAc2lnbmF0dXJlPUZFRDRBMDkyRDVCQkJFMTgxMTdBM0I1NThFQjY0NjFBOTJBNTJDRjdcXFwiO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgaWYgKHVybC5pbmRleE9mKFxcXCJ4aW5sdWFuXFxcIikgIT0gLTEpIHtcXG4gICAgICAgICAgICBuZXdVcmwgPSB1cmwgKyBcXFwiJmNzcmY9U1JFUUFQWDh0RkVLcFYyZExEakxaaEtrOEl4SmZEV2hOJTJCbWtzV0olMkZrZFJWd2dVaCUyRlFrVERaRW9RQVNhQXA3SHpVaXg4N1QlMkJQTGtBSXc2eUglMkI2TXJ2YXFKTTlySjVsMmI4NUlRUmJCYlclMkJEYlNZUk84Ym1Uc0tkTFlEVFZ0UkhoejVueWxSV2xHVWlkeEhmVnlMTzl0WlVpQmsxWTJBd28lMkZ6c2EydEgydTglM0RAc2lnbmF0dXJlPUZCQzcwODhDNjc3RDI5N0U2QkJCQzg1ODRBOTMzNzJEREUxMEZEOTZcXFwiO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBpZiAodXJsLmluZGV4T2YoXFxcInN4YnJkXFxcIikgIT0gLTEpIHtcXG4gICAgICAgICAgICAgICAgbmV3VXJsID0gdXJsICsgXFxcIiZjc3JmPXIyTkRMdHBTOEV1cWglMkYlMkY4WTk2eWNPVU9LUzlJQ3pOWXp5YXc1QzJVZkVnb0RGREhYJTJGcnFqJTJCWWNMV1F6SDUlMkJSNm1vVU9sd09Bb0pSRXRVYTM3NnVkNzQ2MjdVRHpOUTFzUkdkVEQ4a2IzNnMxZVRNZW1jbjhkMGk3V0o2azlpaDVJUDRBZDdmcGE2JTJGM0RzdDFqb0duY3lyNzE2ZFJIRE1mY3ZyczNTMjlqSSUzREBjbGllbnRfbmFtZT01NVdGNTV5TDViMng2S2VHXFxcIjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIG5ld1VybDtcXG59XFxuLFxcXCJodHRwczovL3d3dy56aGFubGFuZ2J1LmNvbS9ydWlmZW5nbGJfYXBpLnBocC92MS52b2RcXFwiKVwifSx7XCJuYW1lXCI6XCLop4bpopHop6PmnpBcIixcInBhdGhcIjpcImxhenlQYXJzZVwiLFwicnVsZVwiOlwiKFxcbmZ1bmN0aW9uICgpIHtcXG4gICAgcmV0dXJuICQoXFxcIlxcXCIpLmxhenlSdWxlKChwdGFiLCB2bGluaywganhVcmwsIGFwcFVybCkgPT4ge1xcbiAgICAgICAgbG9nKFxcXCJcXFxcdTg5YzZcXFxcdTk4OTFcXFxcdTk0ZmVcXFxcdTYzYTU6XFxcIiArIHZsaW5rKTtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgZnVuY3Rpb24gY2hhbmdlVmlkZW9VcmwodXJsKSB7XFxuICAgICAgICAgICAgICAgIGlmICh1cmwuaW5jbHVkZXMoXFxcIndrZmlsZVxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmwgKyBcXFwiO3tSZWZlcmVyQGh0dHBzOi8vZmFudHVhbi53a2ZpbGUuY29tL31cXFwiO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHB0YWIgPT0gXFxcImJpbGliaWxpXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IHVybCArIFxcXCI7e1JlZmVyZXJAaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tLyYmVXNlci1BZ2VudEBNb3ppbGxhLzUuMH1cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHRhYiA9PSBcXFwibWd0dlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gdXJsICsgXFxcIjt7UmVmZXJlckB3d3cubWd0di5jb20mJlVzZXItQWdlbnRATW96aWxsYS81LjB9XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXJsLmluY2x1ZGVzKFxcXCJvamJrXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IHVybCArIFxcXCI7e1JlZmVyZXJAaHR0cHM6Ly9iYWsub2pia2p4LmNvbS99XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoIXVybC5pbmNsdWRlcyhcXFwiaHR0cFxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFxcIlxcXFx1OTRmZVxcXFx1NjNhNVxcXFx1NGUwZFxcXFx1NjYyZlxcXFx1NGVlNWh0dHBcXFxcdTVmMDBcXFxcdTU5MzRcXFwiKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICgvXFxcXC5tM3U4Ly50ZXN0KHVybCkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGVNM3U4KHVybCk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1cmwgKyBcXFwiI2lzVmlkZW89dHJ1ZSNcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmICgvXFxcXC5tM3U4fFxcXFwubXA0fG9ialxcXFwvdG9zfG5ldGVhc2VcXFxcLmNvbS8udGVzdCh2bGluaykgJiYgL2h0dHAvLnRlc3QodmxpbmspICYmICEvXFxcXC5odG1sLy50ZXN0KHZsaW5rKSkge1xcbiAgICAgICAgICAgICAgICBsZXQgcHVybCA9IHZsaW5rO1xcbiAgICAgICAgICAgICAgICBpZiAocHRhYi5pbmNsdWRlcyhcXFwiZHVvZHVvenlcXFwiKSB8fCB2bGluay5pbmNsdWRlcyhcXFwibTN1OC5jYWNoZS5zdW95by5jY1xcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICBldmFsKGdldENyeXB0b0pTKCkpO1xcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gRGUod29yZCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UobWQ1KFxcXCJyWGpXdlhsNlxcXCIpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKFxcXCJOWGJIb1dKYnBzRU9pbjhiXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENyeXB0b0pTLkFFUy5kZWNyeXB0KHdvcmQsIGEsIHtpdjogdCwgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkMsIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzN30pLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHB1cmwgPSBEZShKU09OLnBhcnNlKGZldGNoKFxcXCJodHRwczovL2pocGMubWFuZHVodS5jb20vZHVvZHVvL2FwaS5waHA/dXJsPVxcXCIgKyB2bGluaykpLnVybCk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAocHRhYi5pbmNsdWRlcyhcXFwiQ0w0S1xcXCIpIHx8IHZsaW5rLmluY2x1ZGVzKFxcXCJydWlmZW5nbGJcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBodG1sID0gZmV0Y2goXFxcImh0dHBzOi8vdHYueWpoYW4uY29tOjQ0MzMvQ0w0Sy8/dXJsPVxcXCIgKyB2bGluayksIHRva2VuID0gaHRtbC5tYXRjaCgvbGVfdG9rZW4uKj0uKlxcXCIoLiopXFxcIi8pWzFdLCB1cmwgPSBodG1sLm1hdGNoKC9cXFwidXJsXFxcIi4qOi4qXFxcIiguKilcXFwiLylbMV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChnZXRDcnlwdG9KUygpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBEZSh3b3JkKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShcXFwiQTQyRUFDMEMyQjQwODQ3MlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXYgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSh0b2tlbik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDcnlwdG9KUy5BRVMuZGVjcnlwdCh3b3JkLCBrZXksIHtpdjogaXYsIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLCBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczd9KS50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1cmwgPSBEZSh1cmwpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiBjaGFuZ2VWaWRlb1VybChwdXJsKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHB0YWIuaW5jbHVkZXMoXFxcIm5ldGZsaXhtb21cXFwiKSB8fCAvXm5ldGZsaXhtb20vLnRlc3QodmxpbmspKSB7XFxuICAgICAgICAgICAgICAgIGp4VXJsID0gXFxcImh0dHBzOi8vZHAua29uZ2J1eWEuY29tL2pzb24ucGhwP3VybD1cXFwiO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBsb2coXFxcIlxcXFx1NGY3ZlxcXFx1NzUyOFxcXFx1NjNhNVxcXFx1NTNlMzpcXFwiICsganhVcmwpO1xcbiAgICAgICAgICAgIGxldCBsaW5rID0ganhVcmwgKyB2bGluaywgc2NvZGUgPSBKU09OLnBhcnNlKGZldGNoKGxpbmssIHtoZWFkZXJzOiB7XFxcIlVzZXItQWdlbnRcXFwiOiBcXFwiRGFydC8yLjEzIChkYXJ0OmlvKVxcXCJ9LCByZWRpcmVjdDogZmFsc2UsIHdpdGhTdGF0dXNDb2RlOiB0cnVlfSkpO1xcbiAgICAgICAgICAgIGlmIChzY29kZS5zdGF0dXNDb2RlID09IFxcXCIzMDJcXFwiIHx8IHNjb2RlLnN0YXR1c0NvZGUgPT0gXFxcIjMwMVxcXCIpIHtcXG4gICAgICAgICAgICAgICAgbGV0IHJlZHVybCA9IHNjb2RlLmhlYWRlcnMubG9jYXRpb25bMF0ucmVwbGFjZSgvXFxcXFxcXFwvZywgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICBsb2coXFxcIlxcXFx1OTFjZFxcXFx1NWI5YVxcXFx1NTQxMTpcXFwiICsgcmVkdXJsKTtcXG4gICAgICAgICAgICAgICAgbGV0IHB1cmwgPSByZWR1cmw7XFxuICAgICAgICAgICAgICAgIGlmICgvXFxcXD1odHRwLy50ZXN0KHJlZHVybCkgJiYgL2h0bWx8YmlsaWJpbGkvLnRlc3QocmVkdXJsKSkge1xcbiAgICAgICAgICAgICAgICAgICAgcHVybCA9IEpTT04ucGFyc2UoZmV0Y2gocmVkdXJsLCB7fSkpLnVybDtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICgvXFxcXD1odHRwLy50ZXN0KHJlZHVybCkgJiYgL1xcXFwubTN1OHxcXFxcLm1wNHxcXFxcLmZsdi8udGVzdChyZWR1cmwpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcHVybCA9IHJlZHVybC5zdWJzdHJpbmcocmVkdXJsLmluZGV4T2YoXFxcIj1odHRwXFxcIikgKyAxKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hhbmdlVmlkZW9VcmwocHVybCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGxldCBodG1sID0gc2NvZGUuYm9keTtcXG4gICAgICAgICAgICBpZiAoLzQwNCBOb3QgRm91bmR85aSH5qGI5ZCO5Y+v57un57ut6K6/6ZeuLy50ZXN0KGh0bWwpKSB7XFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcXFwiNDA0XFxcXHU0ZTg2XFxcIik7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgaWYgKC9cXFxcPGJvZHkvLnRlc3QoaHRtbCkpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhcXFwiXFxcXHU1YzFkXFxcXHU4YmQ1XFxcXHU0ZWNlXFxcXHU3ZjUxXFxcXHU5ODc1XFxcXHU1NWM1XFxcXHU2M2EyXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICByZXF1aXJlQ2FjaGUoXFxcImh0dHBzOi8vY29kZS5hbGl5dW4uY29tL2x6azIzNTU5L1B1YmxpY1J1bGUvcmF3L21hc3Rlci94NXJ1bGUuanNcXFwiLCAyNCk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geDVydWxlKGxpbmssIGxpbmspO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKFxcXCJcXFxcdTVjMWRcXFxcdThiZDVcXFxcdTRlY2VcXFxcdTk3NWVcXFxcdTdmNTFcXFxcdTk4NzVcXFxcdTU1YzVcXFxcdTYzYTJcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHB1cmwgPSBKU09OLnBhcnNlKGh0bWwpLnVybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hhbmdlVmlkZW9VcmwocHVybCk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwdXJsID0gaHRtbC5tYXRjaCgvW1xcXFwnXFxcXFxcXCJddXJsW1xcXFwnXFxcXFxcXCJdOi4qP1tcXFxcJ1xcXFxcXFwiXSguKj8pW1xcXFwnXFxcXFxcXCJdLylbMV0ucmVwbGFjZSgvXFxcXFxcXFwvZywgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGFuZ2VWaWRlb1VybChwdXJsKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgbG9nKFxcXCJcXFxcdTY3MmFcXFxcdTgwZmRcXFxcdTYyMTBcXFxcdTUyOWZcXFxcdTgzYjdcXFxcdTUzZDZcXFxcdTg5YzZcXFxcdTk4OTFcXFxcdTU3MzBcXFxcdTU3NDA6XFxcIiArIGUubWVzc2FnZSk7XFxuICAgICAgICAgICAgbGV0IGVuRG4gPSBnZXRNeVZhcihcXFwiZG5lblxcXCIsIFxcXCIwXFxcIiksIHRlc3QxID0gdmxpbmsuc2VhcmNoKC95b3VrdXxtZ3R2fGl4aWd1YXxxcS5jb218cWl5aXxtaWd1fGJpbGliaWxpfHNvaHV8cHB0dnxsZXwxOTA1LmNvbS8pICE9IC0xICYmIHZsaW5rLnNlYXJjaCgvaHRtbHxiaWxpYmlsaS8pICE9IC0xLCB0ZXN0MiA9IHZsaW5rLnNlYXJjaCgvTFRcXFxcLXxSb25nWGluZ1ZSXFxcXC18cmVucmVubWlcXFxcLXx4ZnlcXFxcLS8pICE9IC0xO1xcbiAgICAgICAgICAgIGlmICgodGVzdDEgfHwgdGVzdDIpICYmIGVuRG4gPT0gXFxcIjFcXFwiKSB7XFxuICAgICAgICAgICAgICAgIGxvZyhcXFwiXFxcXHU4YzAzXFxcXHU3NTI4XFxcXHU2NWFkXFxcXHU2M2QyXFxcXHU4OWUzXFxcXHU2NzkwXFxcIik7XFxuICAgICAgICAgICAgICAgIGV2YWwoXFxcImxldCBjb25maWcgPVxcXCIgKyBmZXRjaChcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb25cXFwiKSk7XFxuICAgICAgICAgICAgICAgIGV2YWwoZmV0Y2goY29uZmlnLmNqKSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBheXRtUGFyc2UodmxpbmspO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB2bGluaztcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgLCBwdGFiLCB2bGluaywganhVcmwsIGFwcFVybCk7XFxufVxcbikoKVwifV0sXCJzYXZlZFwiOmZhbHNlLFwidGl0bGVcIjpcIui9u+WQiOmbhi5hcHBcIixcInZlcnNpb25cIjowLFwidXJsXCI6XCIjaW1tZXJzaXZlVGhlbWUjaGlrZXI6Ly9lbXB0eSMjaHR0cHM6Ly93d3cuemhhbmxhbmdidS5jb20vcnVpZmVuZ2xiX2FwaS5waHAvdjEudm9kL2RldGFpbD92b2RfaWQ9MTQyNjcxJnRva2VuPVwiLFwiZmluZF9ydWxlXCI6XCJqczooXFxuKGFwcHR5cGUpID0+IHtcXG4gICAgaWYgKC9UVi8udGVzdChhcHB0eXBlKSkge1xcbiAgICAgICAgZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL3BhZ2UvdHZtb3ZsaXN0XFxcIiwge30pKS5ydWxlKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9wYWdlL2FwcG1vdmxpc3RcXFwiLCB7fSkpLnJ1bGUpO1xcbiAgICB9XFxufVxcbikoXFxcIuS8mOi0qFxcXCIpXCIsXCJncm91cFwiOlwi6L275ZCI6ZuGLmFwcFwiLFwicGFnZXNcIjpcIlt7XFxcIm5hbWVcXFwiOlxcXCJBUFDliIbnsbvliJfooahcXFwiLFxcXCJwYXRoXFxcIjpcXFwiYXBwbGlzdGRhdGFcXFwiLFxcXCJydWxlXFxcIjpcXFwiKFxcXFxuZnVuY3Rpb24gKCkge1xcXFxuICAgIGxldCBsaXN0ID0gW107XFxcXG4gICAgaWYgKGFwcFVybC5pbmNsdWRlcyhcXFxcXFxcImFwaS5waHAvYXBwL1xcXFxcXFwiKSkge1xcXFxuICAgICAgICBsaXN0ID0gaHRtbC5saXN0O1xcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIGlmIChhcHBVcmwuaW5jbHVkZXMoXFxcXFxcXCJ4Z2FwcC5waHAvdjEvXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICBsaXN0ID0gaHRtbC5kYXRhO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgbGlzdCA9IGh0bWwuZGF0YS5saXN0O1xcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xcXFxuICAgICAgICBsZXQge3ZvZF9uYW1lLCB2b2RfcGljLCB2b2RfaWQsIHZvZF9yZW1hcmtzfSA9IGxpc3RbaV07XFxcXG4gICAgICAgIGxldCBsaW5rID0gXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICAgICAgaWYgKGFwcFVybC5pbmNsdWRlcyhcXFxcXFxcImFwaS5waHAvYXBwL1xcXFxcXFwiKSB8fCBhcHBVcmwuaW5jbHVkZXMoXFxcXFxcXCJ4Z2FwcC5waHAvdjEvXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICBsaW5rID0gYXBwVXJsICsgXFxcXFxcXCJ2aWRlb19kZXRhaWw/aWQ9XFxcXFxcXCIgKyB2b2RfaWQgKyBcXFxcXFxcIiZ0b2tlbj07Z2V0O3V0Zi04O3tVc2VyLUFnZW50QERhcnQvMi4xMyAoZGFydDppbyl9XFxcXFxcXCI7XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICBsaW5rID0gYXBwVXJsICsgXFxcXFxcXCIvZGV0YWlsP3ZvZF9pZD1cXFxcXFxcIiArIHZvZF9pZCArIFxcXFxcXFwiJnJlbF9saW1pdD0xMDtnZXQ7dXRmLTg7e1VzZXItQWdlbnRARGFydC8yLjEzIChkYXJ0OmlvKX1cXFxcXFxcIjtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpZiAoL2lvcGVueXVuLy50ZXN0KGFwcFVybCkpIHtcXFxcbiAgICAgICAgICAgIGxpbmsgPSBhcHBVcmwgKyBcXFxcXFxcIi9kZXRhaWxJRD92b2RfaWQ9XFxcXFxcXCIgKyB2b2RfaWQgKyBcXFxcXFxcIiZyZWxfbGltaXQ9MTA7Z2V0O3V0Zi04O3tVc2VyLUFnZW50QERhcnQvMi4xMyAoZGFydDppbyl9XFxcXFxcXCI7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgaXRlbXMucHVzaCh7dGl0bGU6IHZvZF9uYW1lLCBwaWNfdXJsOiB2b2RfcGljICsgXFxcXFxcXCJAUmVmZXJlcj1cXFxcXFxcIiwgZGVzYzogdm9kX3JlbWFya3MsIGNvbF90eXBlOiBcXFxcXFxcIm1vdmllXzNfbWFycXVlZVxcXFxcXFwiLCB1cmw6ICQoXFxcXFxcXCIjaW1tZXJzaXZlVGhlbWUjaGlrZXI6Ly9lbXB0eSMjXFxcXFxcXCIgKyBsaW5rKS5ydWxlKCgpID0+IHtcXFxcbiAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwcG1vdmxpc3RcXFxcXFxcIiwge30pKS5ydWxlKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICAgICAgbG9nKFxcXFxcXFwiXFxcXFxcXFx1NWY3MVxcXFxcXFxcdTcyNDdcXFxcXFxcXHU4YmU2XFxcXFxcXFx1NjBjNVxcXFxcXFxcdTUxZmFcXFxcXFxcXHU5NTE5OlxcXFxcXFwiICsgZS5tZXNzYWdlKTtcXFxcbiAgICAgICAgICAgICAgICBzZXRSZXN1bHQoW10pO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgICl9KTtcXFxcbiAgICB9XFxcXG59XFxcXG4pKClcXFwifSx7XFxcIm5hbWVcXFwiOlxcXCJBUFDpppbpobXliJfooahcXFwiLFxcXCJwYXRoXFxcIjpcXFwiYXBwaW5kZXhkYXRhXFxcIixcXFwicnVsZVxcXCI6XFxcIihcXFxcbmZ1bmN0aW9uICgpIHtcXFxcbiAgICBsZXQgbGlzdCA9IFtdO1xcXFxuICAgIGlmIChhcHBVcmwuaW5jbHVkZXMoXFxcXFxcXCJhcGkucGhwL2FwcC9cXFxcXFxcIikpIHtcXFxcbiAgICAgICAgbGlzdCA9IGh0bWwubGlzdDtcXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICBpZiAoYXBwVXJsLmluY2x1ZGVzKFxcXFxcXFwieGdhcHAucGhwL3YxL1xcXFxcXFwiKSkge1xcXFxuICAgICAgICAgICAgbGlzdCA9IGh0bWwuZGF0YTtcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIGxpc3QgPSBodG1sLmRhdGEubGlzdDtcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgbGV0IGxpc3RzID0gW10sIHR5cGVuYW1lID0gXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICAgICAgaWYgKGFwcFVybC5pbmNsdWRlcyhcXFxcXFxcImFwaS5waHAvYXBwL1xcXFxcXFwiKSB8fCBhcHBVcmwuaW5jbHVkZXMoXFxcXFxcXCJ4Z2FwcC5waHAvdjEvXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICBsaXN0cyA9IGxpc3RbaV0udmxpc3Q7XFxcXG4gICAgICAgICAgICB0eXBlbmFtZSA9IGxpc3RbaV0udHlwZV9uYW1lO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgbGlzdHMgPSBsaXN0W2ldLnZvZF9saXN0O1xcXFxuICAgICAgICAgICAgdHlwZW5hbWUgPSBsaXN0W2ldLnZvZF90eXBlX25hbWU7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgaXRlbXMucHVzaCh7dGl0bGU6IHR5cGVuYW1lLCBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0XzFcXFxcXFxcIiwgdXJsOiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIn0pO1xcXFxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxpc3RzLmxlbmd0aDsgaisrKSB7XFxcXG4gICAgICAgICAgICBsZXQge3ZvZF9uYW1lLCB2b2RfcGljLCB2b2RfaWQsIHZvZF9yZW1hcmtzfSA9IGxpc3RzW2pdO1xcXFxuICAgICAgICAgICAgbGV0IGxpbmsgPSBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgaWYgKGFwcFVybC5pbmNsdWRlcyhcXFxcXFxcImFwaS5waHAvYXBwL1xcXFxcXFwiKSB8fCBhcHBVcmwuaW5jbHVkZXMoXFxcXFxcXCJ4Z2FwcC5waHAvdjEvXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICAgICAgbGluayA9IGFwcFVybCArIFxcXFxcXFwidmlkZW9fZGV0YWlsP2lkPVxcXFxcXFwiICsgdm9kX2lkICsgXFxcXFxcXCImdG9rZW49O2dldDt1dGYtODt7VXNlci1BZ2VudEBEYXJ0LzIuMTMgKGRhcnQ6aW8pfVxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICBsaW5rID0gYXBwVXJsICsgXFxcXFxcXCIvZGV0YWlsP3ZvZF9pZD1cXFxcXFxcIiArIHZvZF9pZCArIFxcXFxcXFwiJnJlbF9saW1pdD0xMDtnZXQ7dXRmLTg7e1VzZXItQWdlbnRARGFydC8yLjEzIChkYXJ0OmlvKX1cXFxcXFxcIjtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGlmICgvaW9wZW55dW4vLnRlc3QoYXBwVXJsKSkge1xcXFxuICAgICAgICAgICAgICAgIGxpbmsgPSBhcHBVcmwgKyBcXFxcXFxcIi9kZXRhaWxJRD92b2RfaWQ9XFxcXFxcXCIgKyB2b2RfaWQgKyBcXFxcXFxcIiZyZWxfbGltaXQ9MTA7Z2V0O3V0Zi04O3tVc2VyLUFnZW50QERhcnQvMi4xMyAoZGFydDppbyl9XFxcXFxcXCI7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBpdGVtcy5wdXNoKHt0aXRsZTogdm9kX25hbWUsIHBpY191cmw6IHZvZF9waWMgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLCBkZXNjOiB2b2RfcmVtYXJrcywgY29sX3R5cGU6IFxcXFxcXFwibW92aWVfM19tYXJxdWVlXFxcXFxcXCIsIHVybDogJChcXFxcXFxcIiNpbW1lcnNpdmVUaGVtZSNoaWtlcjovL2VtcHR5IyNcXFxcXFxcIiArIGxpbmspLnJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFxcXFxcImhpa2VyOi8vcGFnZS9hcHBtb3ZsaXN0XFxcXFxcXCIsIHt9KSkucnVsZSk7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhcXFxcXFxcIlxcXFxcXFxcdTVmNzFcXFxcXFxcXHU3MjQ3XFxcXFxcXFx1OGJlNlxcXFxcXFxcdTYwYzVcXFxcXFxcXHU1MWZhXFxcXFxcXFx1OTUxOTpcXFxcXFxcIiArIGUubWVzc2FnZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdChbXSk7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgKX0pO1xcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxufVxcXFxuKSgpXFxcIn0se1xcXCJuYW1lXFxcIjpcXFwiQVBQ6YCJ6ZuGXFxcIixcXFwicGF0aFxcXCI6XFxcImFwcG1vdmxpc3RcXFwiLFxcXCJydWxlXFxcIjpcXFwiKFxcXFxuZnVuY3Rpb24gKGNoYW5nZVVybCwgYXBwVXJsKSB7XFxcXG4gICAgYWRkTGlzdGVuZXIoXFxcXFxcXCJvbkNsb3NlXFxcXFxcXCIsICQudG9TdHJpbmcoKHVybCkgPT4ge1xcXFxuICAgICAgICBjbGVhclZhcihcXFxcXFxcImFwcG5vd1xcXFxcXFwiKTtcXFxcbiAgICAgICAgY2xlYXJWYXIodXJsKTtcXFxcbiAgICB9XFxcXG4gICAgLCBNWV9VUkwpKTtcXFxcbiAgICBsZXQgaXRlbXMgPSBbXSwgaHRtbCA9IGdldFZhcihNWV9VUkwsIFxcXFxcXFwiXFxcXFxcXCIpLCBkYXRhID0ge307XFxcXG4gICAgaWYgKGh0bWwgPT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgICAgICBsZXQgdXJsID0gTVlfVVJMLnNwbGl0KFxcXFxcXFwiIyNcXFxcXFxcIilbMV07XFxcXG4gICAgICAgIHVybCA9IGNoYW5nZVVybCh1cmwpO1xcXFxuICAgICAgICBodG1sID0gZmV0Y2godXJsLCB7aGVhZGVyczoge1xcXFxcXFwiVXNlci1BZ2VudFxcXFxcXFwiOiBcXFxcXFxcIkRhcnQvMi4xMyAoZGFydDppbylcXFxcXFxcIn19KTtcXFxcbiAgICAgICAgcHV0VmFyKE1ZX1VSTCwgaHRtbCk7XFxcXG4gICAgfVxcXFxuICAgIGlmIChhcHBVcmwuaW5jbHVkZXMoXFxcXFxcXCJ4Z2FwcC5waHAvdjEvXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGh0bWwpLmRhdGEudm9kX2luZm87XFxcXG4gICAgfSBlbHNlIHtcXFxcbiAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UoaHRtbCkuZGF0YTtcXFxcbiAgICB9XFxcXG4gICAgbGV0IHt2b2RfbmFtZSwgdm9kX3BpYywgdm9kX2NvbnRlbnQsIHZvZF9jbGFzcywgdm9kX3JlbWFya3MsIHZvZF9kaXJlY3Rvciwgdm9kX2FjdG9yLCB2b2RfYXJlYSwgdm9kX2xhbmcsIHZvZF95ZWFyfSA9IGRhdGE7XFxcXG4gICAgaXRlbXMucHVzaCh7dGl0bGU6IHZvZF9uYW1lICsgXFxcXFxcXCJcXFxcXFxcXG5cXFxcXFxcIiArIHZvZF9jbGFzcyArIFxcXFxcXFwiLFxcXFxcXFwiICsgdm9kX3JlbWFya3MgKyBcXFxcXFxcIlxcXFxcXFxcblxcXFxcXFwiICsgdm9kX2FyZWEgKyBcXFxcXFxcIi9cXFxcXFxcIiArIHZvZF9sYW5nICsgXFxcXFxcXCIvXFxcXFxcXCIgKyB2b2RfeWVhciwgZGVzYzogXFxcXFxcXCJcXFxcXFxcXHU1YmZjXFxcXFxcXFx1NmYxNDpcXFxcXFxcIiArIHZvZF9kaXJlY3RvciArIFxcXFxcXFwiXFxcXFxcXFxuXFxcXFxcXFx1NGUzYlxcXFxcXFxcdTZmMTQ6XFxcXFxcXCIgKyB2b2RfYWN0b3IsIHBpY191cmw6IHZvZF9waWMsIHVybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCIsIGNvbF90eXBlOiBcXFxcXFxcIm1vdmllXzFfdmVydGljYWxfcGljX2JsdXJcXFxcXFxcIn0sIHt0aXRsZTogXFxcXFxcXCJcXFxcXFxcXHU1MjY3XFxcXFxcXFx1NjBjNVxcXFxcXFxcdTdiODBcXFxcXFxcXHU0ZWNiOlxcXFxcXFwiLCBkZXNjOiB2b2RfY29udGVudCwgdXJsOiAkKFxcXFxcXFwiaGlrZXI6Ly9lbXB0eSNub1JlY29yZEhpc3RvcnkjXFxcXFxcXCIpLnJ1bGUoKGRlc2MpID0+IHtcXFxcbiAgICAgICAgc2V0UmVzdWx0KFt7dGl0bGU6IGRlc2MsIGNvbF90eXBlOiBcXFxcXFxcImxvbmdfdGV4dFxcXFxcXFwifV0pO1xcXFxuICAgIH1cXFxcbiAgICAsIHZvZF9jb250ZW50KSwgY29sX3R5cGU6IFxcXFxcXFwidGV4dF8xXFxcXFxcXCJ9KTtcXFxcbiAgICBsZXQgZG5lbiA9IGdldE15VmFyKFxcXFxcXFwiZG5lblxcXFxcXFwiLCBcXFxcXFxcIjBcXFxcXFxcIik7XFxcXG4gICAgaXRlbXMucHVzaCh7dGl0bGU6IFxcXFxcXFwiXFxcXFxcXFx1NjVhZFxcXFxcXFxcdTYzZDI6XFxcXFxcXCIgKyAoZG5lbiA9PSBcXFxcXFxcIjFcXFxcXFxcIiA/IFxcXFxcXFwiXFxcXFxcXFx1MjAxY1xcXFxcXFxcdTIwMWNcXFxcXFxcXHUyNzA1XFxcXFxcXFx1MjAxZFxcXFxcXFxcdTIwMWRcXFxcXFxcIiA6IFxcXFxcXFwiXFxcXFxcXFx1Mjc0ZVxcXFxcXFwiKSwgdXJsOiAkKFxcXFxcXFwiXFxcXFxcXCIpLmxhenlSdWxlKChkbmVuKSA9PiB7XFxcXG4gICAgICAgIGlmIChkbmVuID09IFxcXFxcXFwiMVxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICBwdXRNeVZhcihcXFxcXFxcImRuZW5cXFxcXFxcIiwgXFxcXFxcXCIwXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly9cXFxcXFxcXHU1ZGYyXFxcXFxcXFx1Nzk4MVxcXFxcXFxcdTc1MjhcXFxcXFxcXHU2NWFkXFxcXFxcXFx1NjNkMlxcXFxcXFxcdThjMDNcXFxcXFxcXHU3NTI4IVxcXFxcXFwiO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgcHV0TXlWYXIoXFxcXFxcXCJkbmVuXFxcXFxcXCIsIFxcXFxcXFwiMVxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8vXFxcXFxcXFx1NWRmMlxcXFxcXFxcdTVmMDBcXFxcXFxcXHU1NDJmXFxcXFxcXFx1NjVhZFxcXFxcXFxcdTYzZDJcXFxcXFxcXHU4YzAzXFxcXFxcXFx1NzUyOCFcXFxcXFxcIjtcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbiAgICAsIGRuZW4pLCBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0XzJcXFxcXFxcIn0pO1xcXFxuICAgIGl0ZW1zLnB1c2goe3RpdGxlOiBcXFxcXFxcIlxcXFxcXFxcdTdlYmZcXFxcXFxcXHU4ZGVmXFxcXFxcXFx1OTE0ZFxcXFxcXFxcdTdmNmVcXFxcXFxcIiwgdXJsOiBcXFxcXFxcImhpa2VyOi8vZW1wdHkjbm9SZWNvcmRIaXN0b3J5I0BydWxlPWpzOnRoaXMuZD1bXTtyZXF1aXJlKCdodHRwczovL2dpdGVhLmNvbS9BSTk1Ny9IaWtlci9yYXcvbS92L1JvdXRlLmpzJyk7Um91dGUuc2V0UGFyc2UoKTtzZXRSZXN1bHQoZCk7XFxcXFxcXCIsIGNvbF90eXBlOiBcXFxcXFxcInRleHRfMlxcXFxcXFwifSk7XFxcXG4gICAgaXRlbXMucHVzaCh7dGl0bGU6IFxcXFxcXFwiXFxcXFxcXFx1MjAxY1xcXFxcXFxcdTIwMWNcXFxcXFxcXHUyMTkzXFxcXFxcXFx1MjE5MVxcXFxcXFxcdTIwMWRcXFxcXFxcXHUyMDFkXFxcXFxcXCIsIHVybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5QGxhenlSdWxlPS5qczpwdXRWYXIoJ2FwcG1hcHBzb3J0JywgZ2V0VmFyKCdhcHBtYXBwc29ydCcsJzEnKT09JzEnPycwJzonMScpO3JlZnJlc2hQYWdlKGZhbHNlKTsndG9hc3Q6Ly9cXFxcXFxcXHU1MjA3XFxcXFxcXFx1NjM2MlxcXFxcXFxcdTYyMTBcXFxcXFxcXHU1MjlmISdcXFxcXFxcIiwgY29sX3R5cGU6IFxcXFxcXFwic2Nyb2xsX2J1dHRvblxcXFxcXFwifSk7XFxcXG4gICAgbGV0IGNvbnRzID0gW10sIHRhYnMgPSBbXTtcXFxcbiAgICBpZiAoYXBwVXJsLmluY2x1ZGVzKFxcXFxcXFwiYXBpLnBocC9hcHAvXFxcXFxcXCIpIHx8IGFwcFVybC5pbmNsdWRlcyhcXFxcXFxcInhnYXBwLnBocC92MS9cXFxcXFxcIikpIHtcXFxcbiAgICAgICAgY29udHMgPSBkYXRhLnZvZF91cmxfd2l0aF9wbGF5ZXI7XFxcXG4gICAgfSBlbHNlIHtcXFxcbiAgICAgICAgY29udHMgPSBkYXRhLnZvZF9wbGF5X2xpc3Q7XFxcXG4gICAgfVxcXFxuICAgIGlmIChjb250cy5sZW5ndGggPCAxKSB7XFxcXG4gICAgICAgIGNvbnRzID0gZGF0YS52b2RfcGxheV91cmwuc3BsaXQoXFxcXFxcXCIkJCRcXFxcXFxcIik7XFxcXG4gICAgICAgIHRhYnMgPSBkYXRhLnZvZF9wbGF5X2Zyb20uc3BsaXQoXFxcXFxcXCIkJCRcXFxcXFxcIik7XFxcXG4gICAgfVxcXFxuICAgIGxldCBwdGFiID0gXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICBpZiAoZ2V0VmFyKFxcXFxcXFwiYXBwbm93XFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpID09IFxcXFxcXFwiXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgcHV0VmFyKFxcXFxcXFwiYXBwbm93XFxcXFxcXCIsIFxcXFxcXFwiMFxcXFxcXFwiKTtcXFxcbiAgICB9XFxcXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb250cy5sZW5ndGg7IGkrKykge1xcXFxuICAgICAgICBsZXQgc3B0YWIgPSBcXFxcXFxcIlxcXFxcXFwiLCB0YWJuYW1lID0gXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICAgICAgaWYgKGFwcFVybC5pbmNsdWRlcyhcXFxcXFxcImFwaS5waHAvYXBwL1xcXFxcXFwiKSB8fCBhcHBVcmwuaW5jbHVkZXMoXFxcXFxcXCJ4Z2FwcC5waHAvdjEvXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICBzcHRhYiA9IGNvbnRzW2ldLmNvZGUgPyBjb250c1tpXS5jb2RlIDogdGFic1tpXTtcXFxcbiAgICAgICAgICAgIHRhYm5hbWUgPSBjb250c1tpXS5uYW1lIHx8IHNwdGFiO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgc3B0YWIgPSBjb250c1tpXS5mcm9tID8gY29udHNbaV0uZnJvbSA6IHRhYnNbaV07XFxcXG4gICAgICAgICAgICB0YWJuYW1lID0gY29udHNbaV0ucGxheWVyX2luZm8gPyBjb250c1tpXS5wbGF5ZXJfaW5mby5zaG93IDogc3B0YWI7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgaXRlbXMucHVzaCh7dGl0bGU6IGdldFZhcihcXFxcXFxcImFwcG5vd1xcXFxcXFwiKSA9PSBpID8gXFxcXFxcXCJcXFxcXFxcXHUyMDFjXFxcXFxcXFx1MjAxY1xcXFxcXFxcdTIwMWRcXFxcXFxcXHUyMDFkXFxcXFxcXCIgKyB0YWJuYW1lLmJvbGQoKS5mb250Y29sb3IoXFxcXFxcXCIjRkE3Mjk4XFxcXFxcXCIpIDogdGFibmFtZSwgdXJsOiBcXFxcXFxcImhpa2VyOi8vZW1wdHlAbGF6eVJ1bGU9LmpzOnB1dFZhcignYXBwbm93JywnXFxcXFxcXCIgKyBpICsgXFxcXFxcXCInKTtyZWZyZXNoUGFnZShmYWxzZSk7J3RvYXN0Oi8vXFxcXFxcXFx1NTIwN1xcXFxcXFxcdTYzNjJcXFxcXFxcXHU2MjEwXFxcXFxcXFx1NTI5ZiEnXFxcXFxcXCIsIGNvbF90eXBlOiBcXFxcXFxcInNjcm9sbF9idXR0b25cXFxcXFxcIn0pO1xcXFxuICAgICAgICBpZiAoZ2V0VmFyKFxcXFxcXFwiYXBwbm93XFxcXFxcXCIpID09IGkpIHtcXFxcbiAgICAgICAgICAgIHB0YWIgPSBzcHRhYjtcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbiAgICBsZXQgbGlzdCA9IFtdLCBpbmRleCA9IGdldFZhcihcXFxcXFxcImFwcG5vd1xcXFxcXFwiKTtcXFxcbiAgICBpZiAoYXBwVXJsLmluY2x1ZGVzKFxcXFxcXFwiYXBpLnBocC9hcHAvXFxcXFxcXCIpIHx8IGFwcFVybC5pbmNsdWRlcyhcXFxcXFxcInhnYXBwLnBocC92MS9cXFxcXFxcIikpIHtcXFxcbiAgICAgICAgbGlzdCA9IGNvbnRzW2luZGV4XS51cmwuc3BsaXQoXFxcXFxcXCIjXFxcXFxcXCIpO1xcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIGxpc3QgPSBjb250c1tpbmRleF0udXJscyA/IGNvbnRzW2luZGV4XS51cmxzIDogY29udHNbaW5kZXhdLnVybC5zcGxpdChcXFxcXFxcIiNcXFxcXFxcIik7XFxcXG4gICAgfVxcXFxuICAgIGlmIChnZXRWYXIoXFxcXFxcXCJhcHBtYXBwc29ydFxcXFxcXFwiLCBcXFxcXFxcIjFcXFxcXFxcIikgPT0gXFxcXFxcXCIwXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgbGlzdC5yZXZlcnNlKCk7XFxcXG4gICAgfVxcXFxuICAgIGxldCBqaWVrID0gW107XFxcXG4gICAgdHJ5IHtcXFxcbiAgICAgICAgaWYgKGFwcFVybC5pbmNsdWRlcyhcXFxcXFxcImFwaS5waHAvYXBwL1xcXFxcXFwiKSB8fCBhcHBVcmwuaW5jbHVkZXMoXFxcXFxcXCJ4Z2FwcC5waHAvdjEvXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICBqaWVrLnB1c2goY29udHNbaW5kZXhdLnBhcnNlX2FwaSB8fCBcXFxcXFxcIlxcXFxcXFwiKTtcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIGppZWsgPSAoY29udHNbaW5kZXhdLnBsYXllcl9pbmZvLnBhcnNlMiB8fCBcXFxcXFxcIlxcXFxcXFwiKS5zcGxpdChcXFxcXFxcIixcXFxcXFxcIikuY29uY2F0KChjb250c1tpbmRleF0ucGxheWVyX2luZm8ucGFyc2UgfHwgXFxcXFxcXCJcXFxcXFxcIikuc3BsaXQoXFxcXFxcXCIsXFxcXFxcXCIpKTtcXFxcbiAgICAgICAgICAgIGppZWsgPSBqaWVrLm1hcChjdXIgPT4gY3VyLnJlcGxhY2UoXFxcXFxcXCIuLlxcXFxcXFwiLCBcXFxcXFxcIi5cXFxcXFxcIikucmVwbGFjZShcXFxcXFxcImpzb25ic1xcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG4gICAgY2F0Y2ggKGUpIHtcXFxcbiAgICB9XFxcXG4gICAgamllayA9IGppZWsuZmlsdGVyKGN1ciA9PiAhIWN1cik7XFxcXG4gICAgbGV0IGp4VXJsID0gamlla1swXSB8fCBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgIGxvZyhcXFxcXFxcIlxcXFxcXFxcblxcXFxcXFxcdTVmNTNcXFxcXFxcXHU1MjRkXFxcXFxcXFx1N2ViZlxcXFxcXFxcdThkZWY6XFxcXFxcXCIgKyBwdGFiICsgXFxcXFxcXCJcXFxcXFxcXG5cXFxcXFxcXHU2M2E1XFxcXFxcXFx1NTNlM1xcXFxcXFxcdTUyMTdcXFxcXFxcXHU4ODY4OlxcXFxcXFwiICsgJC5zdHJpbmdpZnkoamllaykpO1xcXFxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGlzdC5sZW5ndGg7IGorKykge1xcXFxuICAgICAgICBsZXQgdmxpbmsgPSBcXFxcXFxcIlxcXFxcXFwiLCB0aXRsZSA9IFxcXFxcXFwiXFxcXFxcXCI7XFxcXG4gICAgICAgIGlmIChsaXN0W2pdLnVybCkge1xcXFxuICAgICAgICAgICAgdmxpbmsgPSBsaXN0W2pdLnVybC5yZXBsYWNlKC8jNDU2Iy9nLCBcXFxcXFxcImh0dHBcXFxcXFxcIikucmVwbGFjZSgvIzEyMyMvZywgXFxcXFxcXCIuXFxcXFxcXCIpLnJlcGxhY2UoLyM3ODkjL2csIFxcXFxcXFwiOlxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgIHRpdGxlID0gbGlzdFtqXS5uYW1lO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgdmxpbmsgPSBsaXN0W2pdLnNwbGl0KFxcXFxcXFwiJFxcXFxcXFwiKVsxXTtcXFxcbiAgICAgICAgICAgIHRpdGxlID0gbGlzdFtqXS5zcGxpdChcXFxcXFxcIiRcXFxcXFxcIilbMF07XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgaXRlbXMucHVzaCh7dGl0bGU6IHRpdGxlLCBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0XzRcXFxcXFxcIiwgdXJsOiBldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcXFxcXCJoaWtlcjovL3BhZ2UvbGF6eVBhcnNlXFxcXFxcXCIpKS5ydWxlKX0pO1xcXFxuICAgIH1cXFxcbiAgICBzZXRSZXN1bHQoaXRlbXMpO1xcXFxufVxcXFxuKShcXFxcbmZ1bmN0aW9uIGNoYW5nZVVybCh1cmwpIHtcXFxcbiAgICBsZXQgbmV3VXJsID0gdXJsO1xcXFxuICAgIGlmICh1cmwuaW5kZXhPZihcXFxcXFxcIm9tb2Z1blxcXFxcXFwiKSAhPSAtMSkge1xcXFxuICAgICAgICBuZXdVcmwgPSB1cmwgKyBcXFxcXFxcIiZjc3JmPWElMkJJS0dMdW5KQ1p1YWQlMkJ4RVRMclp1Qm9xaGx1RkNEMGRIODZFOElFTnZCek1mQkxhNmRCOFJ6b3h4SXZ2QkVNZUp6Sm5VU3Q1MUZobFBCZDRLcjV5aEdYbHlOdkRrSnlOTURnRFoxYiUyRnNqWEFlTXRqMTdYdGVNOHB1VFkyUFFuUXdZT3lqJTJGSFVDQVZSWmtyZmxzazg3WUcxVmVTd25FVDhUcHJERDh0NnVnJTNEQHNpZ25hdHVyZT1GRUQ0QTA5MkQ1QkJCRTE4MTE3QTNCNTU4RUI2NDYxQTkyQTUyQ0Y3XFxcXFxcXCI7XFxcXG4gICAgfSBlbHNlIHtcXFxcbiAgICAgICAgaWYgKHVybC5pbmRleE9mKFxcXFxcXFwieGlubHVhblxcXFxcXFwiKSAhPSAtMSkge1xcXFxuICAgICAgICAgICAgbmV3VXJsID0gdXJsICsgXFxcXFxcXCImY3NyZj1TUkVRQVBYOHRGRUtwVjJkTERqTFpoS2s4SXhKZkRXaE4lMkJta3NXSiUyRmtkUlZ3Z1VoJTJGUWtURFpFb1FBU2FBcDdIelVpeDg3VCUyQlBMa0FJdzZ5SCUyQjZNcnZhcUpNOXJKNWwyYjg1SVFSYkJiVyUyQkRiU1lSTzhibVRzS2RMWURUVnRSSGh6NW55bFJXbEdVaWR4SGZWeUxPOXRaVWlCazFZMkF3byUyRnpzYTJ0SDJ1OCUzREBzaWduYXR1cmU9RkJDNzA4OEM2NzdEMjk3RTZCQkJDODU4NEE5MzM3MkRERTEwRkQ5NlxcXFxcXFwiO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgaWYgKHVybC5pbmRleE9mKFxcXFxcXFwic3hicmRcXFxcXFxcIikgIT0gLTEpIHtcXFxcbiAgICAgICAgICAgICAgICBuZXdVcmwgPSB1cmwgKyBcXFxcXFxcIiZjc3JmPXIyTkRMdHBTOEV1cWglMkYlMkY4WTk2eWNPVU9LUzlJQ3pOWXp5YXc1QzJVZkVnb0RGREhYJTJGcnFqJTJCWWNMV1F6SDUlMkJSNm1vVU9sd09Bb0pSRXRVYTM3NnVkNzQ2MjdVRHpOUTFzUkdkVEQ4a2IzNnMxZVRNZW1jbjhkMGk3V0o2azlpaDVJUDRBZDdmcGE2JTJGM0RzdDFqb0duY3lyNzE2ZFJIRE1mY3ZyczNTMjlqSSUzREBjbGllbnRfbmFtZT01NVdGNTV5TDViMng2S2VHXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG4gICAgcmV0dXJuIG5ld1VybDtcXFxcbn1cXFxcbixcXFxcXFxcImh0dHBzOi8vd3d3LnpoYW5sYW5nYnUuY29tL3J1aWZlbmdsYl9hcGkucGhwL3YxLnZvZFxcXFxcXFwiKVxcXCJ9LHtcXFwibmFtZVxcXCI6XFxcIuinhumikeino+aekFxcXCIsXFxcInBhdGhcXFwiOlxcXCJsYXp5UGFyc2VcXFwiLFxcXCJydWxlXFxcIjpcXFwiKFxcXFxuZnVuY3Rpb24gKCkge1xcXFxuICAgIHJldHVybiAkKFxcXFxcXFwiXFxcXFxcXCIpLmxhenlSdWxlKChwdGFiLCB2bGluaywganhVcmwsIGFwcFVybCkgPT4ge1xcXFxuICAgICAgICBsb2coXFxcXFxcXCJcXFxcXFxcXHU4OWM2XFxcXFxcXFx1OTg5MVxcXFxcXFxcdTk0ZmVcXFxcXFxcXHU2M2E1OlxcXFxcXFwiICsgdmxpbmspO1xcXFxuICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgZnVuY3Rpb24gY2hhbmdlVmlkZW9VcmwodXJsKSB7XFxcXG4gICAgICAgICAgICAgICAgaWYgKHVybC5pbmNsdWRlcyhcXFxcXFxcIndrZmlsZVxcXFxcXFwiKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmwgKyBcXFxcXFxcIjt7UmVmZXJlckBodHRwczovL2ZhbnR1YW4ud2tmaWxlLmNvbS99XFxcXFxcXCI7XFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKHB0YWIgPT0gXFxcXFxcXCJiaWxpYmlsaVxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmwgKyBcXFxcXFxcIjt7UmVmZXJlckBodHRwczovL3d3dy5iaWxpYmlsaS5jb20vJiZVc2VyLUFnZW50QE1vemlsbGEvNS4wfVxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHB0YWIgPT0gXFxcXFxcXCJtZ3R2XFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmwgKyBcXFxcXFxcIjt7UmVmZXJlckB3d3cubWd0di5jb20mJlVzZXItQWdlbnRATW96aWxsYS81LjB9XFxcXFxcXCI7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1cmwuaW5jbHVkZXMoXFxcXFxcXCJvamJrXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IHVybCArIFxcXFxcXFwiO3tSZWZlcmVyQGh0dHBzOi8vYmFrLm9qYmtqeC5jb20vfVxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICBpZiAoIXVybC5pbmNsdWRlcyhcXFxcXFxcImh0dHBcXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXFxcXFwiXFxcXFxcXFx1OTRmZVxcXFxcXFxcdTYzYTVcXFxcXFxcXHU0ZTBkXFxcXFxcXFx1NjYyZlxcXFxcXFxcdTRlZTVodHRwXFxcXFxcXFx1NWYwMFxcXFxcXFxcdTU5MzRcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9cXFxcXFxcXC5tM3U4Ly50ZXN0KHVybCkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWNoZU0zdTgodXJsKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1cmwgKyBcXFxcXFxcIiNpc1ZpZGVvPXRydWUjXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBpZiAoL1xcXFxcXFxcLm0zdTh8XFxcXFxcXFwubXA0fG9ialxcXFxcXFxcL3Rvc3xuZXRlYXNlXFxcXFxcXFwuY29tLy50ZXN0KHZsaW5rKSAmJiAvaHR0cC8udGVzdCh2bGluaykgJiYgIS9cXFxcXFxcXC5odG1sLy50ZXN0KHZsaW5rKSkge1xcXFxuICAgICAgICAgICAgICAgIGxldCBwdXJsID0gdmxpbms7XFxcXG4gICAgICAgICAgICAgICAgaWYgKHB0YWIuaW5jbHVkZXMoXFxcXFxcXCJkdW9kdW96eVxcXFxcXFwiKSB8fCB2bGluay5pbmNsdWRlcyhcXFxcXFxcIm0zdTguY2FjaGUuc3VveW8uY2NcXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgZXZhbChnZXRDcnlwdG9KUygpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gRGUod29yZCkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShtZDUoXFxcXFxcXCJyWGpXdlhsNlxcXFxcXFwiKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKFxcXFxcXFwiTlhiSG9XSmJwc0VPaW44YlxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDcnlwdG9KUy5BRVMuZGVjcnlwdCh3b3JkLCBhLCB7aXY6IHQsIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLCBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczd9KS50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgcHVybCA9IERlKEpTT04ucGFyc2UoZmV0Y2goXFxcXFxcXCJodHRwczovL2pocGMubWFuZHVodS5jb20vZHVvZHVvL2FwaS5waHA/dXJsPVxcXFxcXFwiICsgdmxpbmspKS51cmwpO1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmIChwdGFiLmluY2x1ZGVzKFxcXFxcXFwiQ0w0S1xcXFxcXFwiKSB8fCB2bGluay5pbmNsdWRlcyhcXFxcXFxcInJ1aWZlbmdsYlxcXFxcXFwiKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGh0bWwgPSBmZXRjaChcXFxcXFxcImh0dHBzOi8vdHYueWpoYW4uY29tOjQ0MzMvQ0w0Sy8/dXJsPVxcXFxcXFwiICsgdmxpbmspLCB0b2tlbiA9IGh0bWwubWF0Y2goL2xlX3Rva2VuLio9LipcXFxcXFxcIiguKilcXFxcXFxcIi8pWzFdLCB1cmwgPSBodG1sLm1hdGNoKC9cXFxcXFxcInVybFxcXFxcXFwiLio6LipcXFxcXFxcIiguKilcXFxcXFxcIi8pWzFdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChnZXRDcnlwdG9KUygpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIERlKHdvcmQpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoXFxcXFxcXCJBNDJFQUMwQzJCNDA4NDcyXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdiA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKHRva2VuKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ3J5cHRvSlMuQUVTLmRlY3J5cHQod29yZCwga2V5LCB7aXY6IGl2LCBtb2RlOiBDcnlwdG9KUy5tb2RlLkNCQywgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3fSkudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLlV0ZjgpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcHVybCA9IERlKHVybCk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoYW5nZVZpZGVvVXJsKHB1cmwpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgaWYgKHB0YWIuaW5jbHVkZXMoXFxcXFxcXCJuZXRmbGl4bW9tXFxcXFxcXCIpIHx8IC9ebmV0ZmxpeG1vbS8udGVzdCh2bGluaykpIHtcXFxcbiAgICAgICAgICAgICAgICBqeFVybCA9IFxcXFxcXFwiaHR0cHM6Ly9kcC5rb25nYnV5YS5jb20vanNvbi5waHA/dXJsPVxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgbG9nKFxcXFxcXFwiXFxcXFxcXFx1NGY3ZlxcXFxcXFxcdTc1MjhcXFxcXFxcXHU2M2E1XFxcXFxcXFx1NTNlMzpcXFxcXFxcIiArIGp4VXJsKTtcXFxcbiAgICAgICAgICAgIGxldCBsaW5rID0ganhVcmwgKyB2bGluaywgc2NvZGUgPSBKU09OLnBhcnNlKGZldGNoKGxpbmssIHtoZWFkZXJzOiB7XFxcXFxcXCJVc2VyLUFnZW50XFxcXFxcXCI6IFxcXFxcXFwiRGFydC8yLjEzIChkYXJ0OmlvKVxcXFxcXFwifSwgcmVkaXJlY3Q6IGZhbHNlLCB3aXRoU3RhdHVzQ29kZTogdHJ1ZX0pKTtcXFxcbiAgICAgICAgICAgIGlmIChzY29kZS5zdGF0dXNDb2RlID09IFxcXFxcXFwiMzAyXFxcXFxcXCIgfHwgc2NvZGUuc3RhdHVzQ29kZSA9PSBcXFxcXFxcIjMwMVxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHJlZHVybCA9IHNjb2RlLmhlYWRlcnMubG9jYXRpb25bMF0ucmVwbGFjZSgvXFxcXFxcXFxcXFxcXFxcXC9nLCBcXFxcXFxcIlxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICBsb2coXFxcXFxcXCJcXFxcXFxcXHU5MWNkXFxcXFxcXFx1NWI5YVxcXFxcXFxcdTU0MTE6XFxcXFxcXCIgKyByZWR1cmwpO1xcXFxuICAgICAgICAgICAgICAgIGxldCBwdXJsID0gcmVkdXJsO1xcXFxuICAgICAgICAgICAgICAgIGlmICgvXFxcXFxcXFw9aHR0cC8udGVzdChyZWR1cmwpICYmIC9odG1sfGJpbGliaWxpLy50ZXN0KHJlZHVybCkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcHVybCA9IEpTT04ucGFyc2UoZmV0Y2gocmVkdXJsLCB7fSkpLnVybDtcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoL1xcXFxcXFxcPWh0dHAvLnRlc3QocmVkdXJsKSAmJiAvXFxcXFxcXFwubTN1OHxcXFxcXFxcXC5tcDR8XFxcXFxcXFwuZmx2Ly50ZXN0KHJlZHVybCkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1cmwgPSByZWR1cmwuc3Vic3RyaW5nKHJlZHVybC5pbmRleE9mKFxcXFxcXFwiPWh0dHBcXFxcXFxcIikgKyAxKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hhbmdlVmlkZW9VcmwocHVybCk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHNjb2RlLmJvZHk7XFxcXG4gICAgICAgICAgICBpZiAoLzQwNCBOb3QgRm91bmR85aSH5qGI5ZCO5Y+v57un57ut6K6/6ZeuLy50ZXN0KGh0bWwpKSB7XFxcXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxcXFxcXFwiNDA0XFxcXFxcXFx1NGU4NlxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgaWYgKC9cXFxcXFxcXDxib2R5Ly50ZXN0KGh0bWwpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhcXFxcXFxcIlxcXFxcXFxcdTVjMWRcXFxcXFxcXHU4YmQ1XFxcXFxcXFx1NGVjZVxcXFxcXFxcdTdmNTFcXFxcXFxcXHU5ODc1XFxcXFxcXFx1NTVjNVxcXFxcXFxcdTYzYTJcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVDYWNoZShcXFxcXFxcImh0dHBzOi8vY29kZS5hbGl5dW4uY29tL2x6azIzNTU5L1B1YmxpY1J1bGUvcmF3L21hc3Rlci94NXJ1bGUuanNcXFxcXFxcIiwgMjQpO1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geDVydWxlKGxpbmssIGxpbmspO1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhcXFxcXFxcIlxcXFxcXFxcdTVjMWRcXFxcXFxcXHU4YmQ1XFxcXFxcXFx1NGVjZVxcXFxcXFxcdTk3NWVcXFxcXFxcXHU3ZjUxXFxcXFxcXFx1OTg3NVxcXFxcXFxcdTU1YzVcXFxcXFxcXHU2M2EyXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHB1cmwgPSBKU09OLnBhcnNlKGh0bWwpLnVybDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGFuZ2VWaWRlb1VybChwdXJsKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHB1cmwgPSBodG1sLm1hdGNoKC9bXFxcXFxcXFwnXFxcXFxcXFxcXFxcXFxcIl11cmxbXFxcXFxcXFwnXFxcXFxcXFxcXFxcXFxcIl06Lio/W1xcXFxcXFxcJ1xcXFxcXFxcXFxcXFxcXCJdKC4qPylbXFxcXFxcXFwnXFxcXFxcXFxcXFxcXFxcIl0vKVsxXS5yZXBsYWNlKC9cXFxcXFxcXFxcXFxcXFxcL2csIFxcXFxcXFwiXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoYW5nZVZpZGVvVXJsKHB1cmwpO1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICBsb2coXFxcXFxcXCJcXFxcXFxcXHU2NzJhXFxcXFxcXFx1ODBmZFxcXFxcXFxcdTYyMTBcXFxcXFxcXHU1MjlmXFxcXFxcXFx1ODNiN1xcXFxcXFxcdTUzZDZcXFxcXFxcXHU4OWM2XFxcXFxcXFx1OTg5MVxcXFxcXFxcdTU3MzBcXFxcXFxcXHU1NzQwOlxcXFxcXFwiICsgZS5tZXNzYWdlKTtcXFxcbiAgICAgICAgICAgIGxldCBlbkRuID0gZ2V0TXlWYXIoXFxcXFxcXCJkbmVuXFxcXFxcXCIsIFxcXFxcXFwiMFxcXFxcXFwiKSwgdGVzdDEgPSB2bGluay5zZWFyY2goL3lvdWt1fG1ndHZ8aXhpZ3VhfHFxLmNvbXxxaXlpfG1pZ3V8YmlsaWJpbGl8c29odXxwcHR2fGxlfDE5MDUuY29tLykgIT0gLTEgJiYgdmxpbmsuc2VhcmNoKC9odG1sfGJpbGliaWxpLykgIT0gLTEsIHRlc3QyID0gdmxpbmsuc2VhcmNoKC9MVFxcXFxcXFxcLXxSb25nWGluZ1ZSXFxcXFxcXFwtfHJlbnJlbm1pXFxcXFxcXFwtfHhmeVxcXFxcXFxcLS8pICE9IC0xO1xcXFxuICAgICAgICAgICAgaWYgKCh0ZXN0MSB8fCB0ZXN0MikgJiYgZW5EbiA9PSBcXFxcXFxcIjFcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgICAgIGxvZyhcXFxcXFxcIlxcXFxcXFxcdThjMDNcXFxcXFxcXHU3NTI4XFxcXFxcXFx1NjVhZFxcXFxcXFxcdTYzZDJcXFxcXFxcXHU4OWUzXFxcXFxcXFx1Njc5MFxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICBldmFsKFxcXFxcXFwibGV0IGNvbmZpZyA9XFxcXFxcXCIgKyBmZXRjaChcXFxcXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlQYXJzZVNldC5qc29uXFxcXFxcXCIpKTtcXFxcbiAgICAgICAgICAgICAgICBldmFsKGZldGNoKGNvbmZpZy5jaikpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBheXRtUGFyc2UodmxpbmspO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gdmxpbms7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG4gICAgLCBwdGFiLCB2bGluaywganhVcmwsIGFwcFVybCk7XFxcXG59XFxcXG4pKClcXFwifV1cIn0iLCJwaWNVcmwiOiJodHRwczovL3d3dy56aGFubGFuZ2J1LmNvbS91cGxvYWQvdm9kLzIwMjIwMzE0LTEvMTI1MDYyMGI4YmY4ZjRmMDU4OGIzMDQzYTcxYTk0ZjQuanBnQFJlZmVyZXI9IiwidGl0bGUiOiLnpZ7np5jmtbfln58ifQ==
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement