Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥⚙️设置@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcInRleHRfMVwiLFwibmFtZVwiOlwi5rqQ55uu5b2VXCIsXCJwYXRoXCI6XCJzb3VyY2VcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxudmFyIG0gPSBNWV9QQVJBTVMucnVsZXNcXG52YXIgYmFzZXVybCA9IG0uYm9va1NvdXJjZVVybFxcbmlmIChtLnJ1bGVFeHBsb3JlLmJvb2tMaXN0KSB7XFxuICAgIHZhciBydWxlID0gbS5ydWxlRXhwbG9yZVxcbn0gZWxzZSB7XFxuICAgIHZhciBydWxlID0gbS5ydWxlU2VhcmNoXFxufVxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi5pCc57SiXFxcIixcXG4gICAgZGVzYzogXFxcIuivt+i+k+WFpeaQnOe0ouWFs+mUruivjVxcXCIsXFxuICAgIHVybDogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICBwdXRNeVZhcihcXFwia3dcXFwiLCBpbnB1dCk7XFxuICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS9zZWFyY2g/cD1meXBhZ2Uma3c9XFxcIiArIGlucHV0XFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIFxcXCJ1XFxcIjogYmFzZXVybCArIG0uc2VhcmNoVXJsLFxcbiAgICAgICAgXFxcInJ1bGVzXFxcIjogbSxcXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoXFxcImt3XFxcIiwgXFxcIlxcXCIpLFxcbiAgICAgICAgYm9va1NvdXJjZU5hbWU6IG0uYm9va1NvdXJjZU5hbWVcXG4gICAgfVxcbn0pXFxuaWYgKG0uZW5hYmxlZEV4cGxvcmUmJm0uZXhwbG9yZVVybCkge1xcbiAgICBKU09OLnBhcnNlKG0uZXhwbG9yZVVybCkuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGl0ZW0udGl0bGUsXFxuICAgICAgICAgICAgY29sX3R5cGU6IGl0ZW0uc3R5bGUubGF5b3V0X2ZsZXhCYXNpc1BlcmNlbnQgPT0gMSA/IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIiA6IFxcXCJ0ZXh0XzNcXFwiLFxcbiAgICAgICAgICAgIHVybDogaXRlbS51cmwgPT0gXFxcIlxcXCIgPyBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIgOiBcXFwiaGlrZXI6Ly9wYWdlL2Jvb2tzP3A9ZnlwYWdlXFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBcXFwiYWxsXFxcIjogbSxcXG4gICAgICAgICAgICAgICAgXFxcInJ1bGVzXFxcIjogcnVsZSxcXG4gICAgICAgICAgICAgICAgXFxcInVcXFwiOiBiYXNldXJsICsgaXRlbS51cmxcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiAgICB9KVxcbn1cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLkuLvpobVcIixcInBhdGhcIjpcImhvbWVcIixcInJ1bGVcIjpcInZhciBkID0gW107XFxuaWYgKGZpbGVFeGlzdChcXFwiaGlrZXI6Ly9maWxlcy95dWVkdS9saXN0Lmpzb25cXFwiKSAmJiBKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL2ZpbGVzL3l1ZWR1L2xpc3QuanNvblxcXCIpKS51cmxzLmxlbmd0aCAhPSAwKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuKame+4j+iuvue9rlxcXCIsXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvY29uZmlnXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCJcXG4gICAgfSk7XFxuICAgIGxldCBkYXRhID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9maWxlcy95dWVkdS9saXN0Lmpzb25cXFwiKSlcXG4gICAgZGF0YS51cmxzLmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBpdGVtLm5hbWUsXFxuICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKGkpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcInRhYlxcXCIsIGkpXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WIh+aNouaIkOWKn1xcXCJcXG4gICAgICAgICAgICB9LCBpdGVtLm5hbWUpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCJcXG4gICAgICAgIH0pXFxuICAgIH0pXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuaQnOe0olxcXCIsXFxuICAgICAgICB1cmw6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgIHB1dE15VmFyKFxcXCJrd1xcXCIsIGlucHV0KTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS9qdT9wPWZ5cGFnZSZrdz1cXFwiICsgaW5wdXRcXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgICAgICBkZXNjOiBcXFwi6IGa5ZCI5pCc57Si77yM6K+36L6T5YWl5YWz6ZSu6K+NXFxcIixcXG4gICAgICAgIHBpY191cmw6IFxcXCJcXFwiLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKFxcXCJrd1xcXCIsIFxcXCJcXFwiKVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgbGV0IGxpc3QgPSBKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL2ZpbGVzL3l1ZWR1L1xcXCIgKyBtZDUoZ2V0TXlWYXIoXFxcInRhYlxcXCIsIGRhdGEudXJsc1swXS5uYW1lKSkgKyBcXFwiLmpzb25cXFwiKSlcXG4gICAgbGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgbGV0IHMgPSBKU09OLnN0cmluZ2lmeShpdGVtKVxcbiAgICAgICAgaWYgKHMuaW5jbHVkZXMoXFxcIjxqcz5cXFwiKSB8fCBzLmluY2x1ZGVzKFxcXCJAanM6XFxcIikgfHwgcy5pbmNsdWRlcyhcXFwiJC5cXFwiKSB8fCBzLmluY2x1ZGVzKFxcXCLwn5SeXFxcIikpIHtcXG4gICAgICAgICAgICB2YXIgdXJsID0gXFxcInRvYXN0Oi8v5b2T5YmN5Lmm5rqQ5pqC5LiN5pSv5oyBXFxcIlxcbiAgICAgICAgICAgIHJldHVyblxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB2YXIgdXJsID0gXFxcImhpa2VyOi8vcGFnZS9zb3VyY2U/cD1meXBhZ2VcXFwiXFxuICAgICAgICB9XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBpdGVtLmJvb2tTb3VyY2VOYW1lICsgYCgke2l0ZW0uYm9va1NvdXJjZUdyb3VwfSlgLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8yXFxcIixcXG4gICAgICAgICAgICB1cmw6IHVybCxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBcXFwicnVsZXNcXFwiOiBpdGVtXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgfSlcXG59IGVsc2Uge1xcbiAgICBzZXRSZXN1bHQoW3tcXG4gICAgICAgIHRpdGxlOiBcXFwi5L2g6L+Y5rKh5pyJ5Lmm5ZOm772e772e54K55oiR6L+b5YWl6K6+572uXFxcIixcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9jb25maWdcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIlxcbiAgICB9XSlcXG59XFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfMV92ZXJ0aWNhbF9waWNcIixcIm5hbWVcIjpcIuWIl+ihqFwiLFwicGF0aFwiOlwiYm9va3NcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxudHJ5IHtcXG4gICAgdmFyIG0gPSBNWV9QQVJBTVMucnVsZXNcXG4gICAgLy8g6ZiF6K+7PT7op4bnlYxcXG4gICAgdmFyIHVybCA9IE1ZX1BBUkFNUy51LnJlcGxhY2UoXFxcInt7cGFnZX19XFxcIiwgTVlfUEFHRSlcXG4gICAgdmFyIGxpc3RydWxlID0gXFxcImJvZHkmJlxcXCIgKyBtLmJvb2tMaXN0LnJlcGxhY2UoL1xcXFwhWzAtOV0vZywgXFxcIlxcXCIpLnJlcGxhY2UoXFxcIiBcXFwiLCBcXFwiJiZcXFwiKS5zcGxpdChcXFwifHxcXFwiKVswXVxcbiAgICBpZiAobS5hdXRob3IpIHtcXG4gICAgICAgIHZhciBhdXRob3IgPSBtLmF1dGhvci5yZXBsYWNlKFxcXCJAXFxcIiwgXFxcIiYmXFxcIikucmVwbGFjZShcXFwidGV4dFxcXCIsIFxcXCJUZXh0XFxcIikucmVwbGFjZSgvXFxcXC5bMC05XS9nLCBmdW5jdGlvbihhKSB7XFxuICAgICAgICAgICAgcmV0dXJuIGEucmVwbGFjZShcXFwiLlxcXCIsIFxcXCIsXFxcIilcXG4gICAgICAgIH0pXFxuICAgIH0gZWxzZSB7XFxuICAgICAgICB2YXIgYXV0aG9yID0gZmFsc2VcXG4gICAgfVxcbiAgICBpZiAobS5jb3ZlclVybCkge1xcbiAgICAgICAgdmFyIGNvdmVyID0gbS5jb3ZlclVybC5yZXBsYWNlKFxcXCJAXFxcIiwgXFxcIiYmXFxcIikucmVwbGFjZSgvXFxcXC5bMC05XS9nLCBmdW5jdGlvbihhKSB7XFxuICAgICAgICAgICAgcmV0dXJuIGEucmVwbGFjZShcXFwiLlxcXCIsIFxcXCIsXFxcIilcXG4gICAgICAgIH0pXFxuICAgIH0gZWxzZSB7XFxuICAgICAgICB2YXIgY292ZXIgPSBmYWxzZVxcbiAgICB9XFxuICAgIHZhciBuYW1lID0gbS5uYW1lLnJlcGxhY2UoXFxcIkBcXFwiLCBcXFwiJiZcXFwiKS5yZXBsYWNlKFxcXCJ0ZXh0XFxcIiwgXFxcIlRleHRcXFwiKS5yZXBsYWNlKC9cXFxcLlswLTldL2csIGZ1bmN0aW9uKGEpIHtcXG4gICAgICAgIHJldHVybiBhLnJlcGxhY2UoXFxcIi5cXFwiLCBcXFwiLFxcXCIpXFxuICAgIH0pXFxuICAgIHZhciBib29rdXJsID0gbS5ib29rVXJsLnJlcGxhY2UoXFxcIkBcXFwiLCBcXFwiJiZcXFwiKS5yZXBsYWNlKC9cXFxcLlswLTldL2csIGZ1bmN0aW9uKGEpIHtcXG4gICAgICAgIHJldHVybiBhLnJlcGxhY2UoXFxcIi5cXFwiLCBcXFwiLFxcXCIpXFxuICAgIH0pXFxuICAgIGlmIChtLmludHJvKSB7XFxuICAgICAgICB2YXIgaW50cm8gPSBtLmludHJvLnJlcGxhY2UoXFxcIkBcXFwiLCBcXFwiJiZcXFwiKS5yZXBsYWNlKFxcXCJ0ZXh0XFxcIiwgXFxcIlRleHRcXFwiKS5yZXBsYWNlKC9cXFxcLlswLTldL2csIGZ1bmN0aW9uKGEpIHtcXG4gICAgICAgICAgICByZXR1cm4gYS5yZXBsYWNlKFxcXCIuXFxcIiwgXFxcIixcXFwiKVxcbiAgICAgICAgfSlcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHZhciBpbnRybyA9IGZhbHNlXFxuICAgIH1cXG4gICAgTVlfVVJMID0gdXJsO1xcbiAgICB2YXIgcmVzID0gcmVxdWVzdCh1cmwpXFxuICAgIGxldCBsaXN0ID0gcGRmYShyZXMsIGxpc3RydWxlKVxcbiAgICBpZiAobGlzdC5sZW5ndGggPiAwKSB7XFxuICAgICAgICBsaXN0LmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IChjb3ZlciA/IFxcXCJtb3ZpZV8xX3ZlcnRpY2FsX3BpY1xcXCIgOiBcXFwidGV4dF8xXFxcIiksXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwYXJzZURvbUZvckh0bWwoaXRlbSwgbmFtZSksXFxuICAgICAgICAgICAgICAgIGltZzogKGNvdmVyID8gcGFyc2VEb20oaXRlbSwgY292ZXIpICsgXFxcIkBSZWZlcmVyPVxcXCIgOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIpLFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvbWVudT91cmw9XFxcIiArIHBhcnNlRG9tKGl0ZW0sIGJvb2t1cmwpICsgXFxcIiNhdXRvQ2FjaGUjI2ltbWVyc2l2ZVRoZW1lI1xcXCIsXFxuICAgICAgICAgICAgICAgIGRlc2M6IChhdXRob3IgPyBwYXJzZURvbUZvckh0bWwoaXRlbSwgYXV0aG9yKSA6IFxcXCJcXFwiKSArIFxcXCJcXFxcblxcXCIgKyAoaW50cm8gPyBwYXJzZURvbUZvckh0bWwoaXRlbSwgaW50cm8pIDogXFxcIlxcXCIpLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcImJvb2tOYW1lXFxcIjogcGFyc2VEb21Gb3JIdG1sKGl0ZW0sIG5hbWUpLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcImNvdmVyXFxcIjogKGNvdmVyID8gcGFyc2VEb20oaXRlbSwgY292ZXIpICsgXFxcIkBSZWZlcmVyPVxcXCIgOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcIlRvY1xcXCI6IE1ZX1BBUkFNUy5hbGwucnVsZVRvYyxcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJjb250ZW50XFxcIjogTVlfUEFSQU1TLmFsbC5ydWxlQ29udGVudFxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pXFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi5YiX6KGo5Yqg6L295aSx6LSl77yaXFxcIiArIGxpc3RydWxlLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgIH0pXFxuICAgIH1cXG59IGNhdGNoIChlKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuWKoOi9veWksei0pe+8mlxcXCIgKyBlLm1lc3NhZ2UsXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgfSlcXG59XFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwidGV4dF9jZW50ZXJfMVwiLFwibmFtZVwiOlwi6K6+572uXCIsXCJwYXRoXCI6XCJjb25maWdcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxudHJ5IHtcXG4gICAgaWYgKCFmaWxlRXhpc3QoXFxcImhpa2VyOi8vZmlsZXMveXVlZHUvbGlzdC5qc29uXFxcIikpIHtcXG4gICAgICAgIHdyaXRlRmlsZShcXFwiaGlrZXI6Ly9maWxlcy95dWVkdS9saXN0Lmpzb25cXFwiLCAne1xcXCJ1cmxzXFxcIjpbXX0nKVxcbiAgICB9XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIua3u+WKoOiuoumYhVxcXCIsXFxuICAgICAgICB1cmw6ICQoXFxcIlxcXCIsIFxcXCLorqLpmIXlkI3np7BcXFwiKS5pbnB1dCgoKSA9PiB7XFxuICAgICAgICAgICAgcmV0dXJuICQoXFxcIlxcXCIsIFxcXCLorqLpmIXpk77mjqVcXFwiKS5pbnB1dCgobmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgbGlzdCA9IEpTT04ucGFyc2UoZmV0Y2goXFxcImhpa2VyOi8vZmlsZXMveXVlZHUvbGlzdC5qc29uXFxcIikpXFxuICAgICAgICAgICAgICAgIGxpc3QudXJscy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGlucHV0XFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShcXFwiaGlrZXI6Ly9maWxlcy95dWVkdS9saXN0Lmpzb25cXFwiLCBKU09OLnN0cmluZ2lmeShsaXN0KSlcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0ID0gZmV0Y2goaW5wdXQpXFxuICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKHQpXFxuICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMveXVlZHUvXFxcIiArIG1kNShuYW1lKSArIFxcXCIuanNvblxcXCIsIHQpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5a+85YWl5oiQ5YqfXFxcIlxcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5a+85YWl5aSx6LSlXFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICB9LCBpbnB1dClcXG4gICAgICAgIH0pXFxuICAgIH0pXFxuICAgIGxldCBsaXN0ID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9maWxlcy95dWVkdS9saXN0Lmpzb25cXFwiKSlcXG4gICAgbGlzdC51cmxzLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGl0ZW0ubmFtZSxcXG4gICAgICAgICAgICBkZXNjOiBpdGVtLnVybCxcXG4gICAgICAgICAgICB1cmw6ICQoW1xcXCLliKDpmaRcXFwiLCBcXFwi57yW6L6R5ZCN56ewXFxcIiwgXFxcIue8lui+keWcsOWdgFxcXCIsIFxcXCLmm7TmlrBcXFwiXSkuc2VsZWN0KChsaXMsIGkpID0+IHtcXG4gICAgICAgICAgICAgICAgdmFyIGxpc3QgPSBsaXNcXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0ID09IFxcXCLliKDpmaRcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwi56Gu6K6k5Yig6Zmk77yfXFxcIikuY29uZmlybSgobGlzdCwgaSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMveXVlZHUvXFxcIiArIG1kNShsaXN0LnVybHNbaV0ubmFtZSkgKyBcXFwiLmpzb25cXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QudXJscy5zcGxpY2UoaSwgMSlcXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMveXVlZHUvbGlzdC5qc29uXFxcIiwgSlNPTi5zdHJpbmdpZnkobGlzdCkpICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICAgICAgfSwgbGlzdCwgaSlcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PSBcXFwi57yW6L6R5ZCN56ewXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIlxcXCIpLmlucHV0KChsaXN0LCBpKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC51cmxzW2ldLm5hbWUgPSBpbnB1dFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShcXFwiaGlrZXI6Ly9maWxlcy95dWVkdS9saXN0Lmpzb25cXFwiLCBKU09OLnN0cmluZ2lmeShsaXN0KSlcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgICAgICB9LCBsaXN0LCBpKVxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09IFxcXCLnvJbovpHlnLDlnYBcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiXFxcIikuaW5wdXQoKGxpc3QsIGkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0LnVybHNbaV0udXJsID0gaW5wdXRcXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMveXVlZHUvbGlzdC5qc29uXFxcIiwgSlNPTi5zdHJpbmdpZnkobGlzdCkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICAgICAgfSwgbGlzdCwgaSlcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSBmZXRjaChsaXN0LnVybHNbaV0udXJsKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UodClcXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMveXVlZHUvXFxcIiArIG1kNShsaXN0LnVybHNbaV0ubmFtZSkgKyBcXFwiLmpzb25cXFwiLCB0KVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICAgICAgICAgICAgICB0b2FzdChcXFwi5pu05paw5oiQ5YqfXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0b2FzdChcXFwi5pu05paw5aSx6LSlXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0sIGxpc3QsIGkpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8xXFxcIlxcbiAgICAgICAgfSlcXG4gICAgfSlcXG59IGNhdGNoIChlKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIumUmeivr++8mlxcXCIgKyBlLm1lc3NhZ2UsXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgfSlcXG59XFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwidGV4dF8xXCIsXCJuYW1lXCI6XCLnm67lvZVcIixcInBhdGhcIjpcIm1lbnVcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxudmFyIHJlcyA9IGdldFJlc0NvZGUoKVxcbmxldCBUb2MgPSBNWV9QQVJBTVMuVG9jXFxubGV0IHtcXG4gICAgZ2V0QXJyYXksXFxuICAgIGdldFRleHQsXFxuICAgIGdldFVybDBcXG59ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvY29udmVydGVyXFxcIik7XFxuZ2V0QXJyYXkocmVzLCBUb2MuY2hhcHRlckxpc3QpLmZvckVhY2goaXRlbSA9PiB7XFxuICAgIC8vbG9nKGl0ZW0pOyAgICBcXG4gICAgdmFyIHRpdGxlID0gZ2V0VGV4dChpdGVtLCBUb2MuY2hhcHRlck5hbWUpXFxuICAgIGlmICh0aXRsZSAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL2NvbnRlbnRcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgY29udGVudDogTVlfUEFSQU1TLmNvbnRlbnQsXFxuICAgICAgICAgICAgICAgIHVybDogZ2V0VXJsMChpdGVtLCBUb2MuY2hhcHRlckxpc3QsIFRvYy5jaGFwdGVyVXJsKSArIFxcXCIjYXV0b1BhZ2UjI3JlYWRUaGVtZSNcXFwiXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgfVxcbn0pXFxudmFyIGNwID0gZC5tYXAoZnVuY3Rpb24oaXRlbSkge1xcbiAgICByZXR1cm4ge1xcbiAgICAgICAgXFxcInRpdGxlXFxcIjogaXRlbS50aXRsZSxcXG4gICAgICAgIFxcXCJ1cmxcXFwiOiBpdGVtLmV4dHJhLnVybC5yZXBsYWNlKFxcXCIjYXV0b1BhZ2UjI3JlYWRUaGVtZSNcXFwiLCBcXFwiXFxcIilcXG4gICAgfVxcbn0pXFxuZC51bnNoaWZ0KHtcXG4gICAgdGl0bGU6IFxcXCLkuIvovb1cXFwiLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvZG93bmxvYWQudmlldyNub1JlY29yZEhpc3RvcnkjI25vUmVmcmVzaCMjbm9IaXN0b3J5Iz9ydWxlPeacrOWcsOi1hOa6kOeuoeeQhlxcXCIsXFxuICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBjaGFwdGVyTGlzdDogY3AsXFxuICAgICAgICBkZWZhdWx0VmlldzogXFxcIjFcXFwiLFxcbiAgICAgICAgaW5mbzoge1xcbiAgICAgICAgICAgIGJvb2tOYW1lOiBNWV9QQVJBTVMuYm9va05hbWUsXFxuICAgICAgICAgICAgYm9va1RvcFBpYzogTVlfUEFSQU1TLmNvdmVyLFxcbiAgICAgICAgICAgIHJ1bGVOYW1lOiBcXFwi5oKm6K+7XFxcIixcXG4gICAgICAgICAgICBwYXJzZUNvZGU6ICQudG9TdHJpbmcoKE1ZX1BBUkFNUykgPT4ge1xcbiAgICAgICAgICAgICAgICB2YXIgcmVzID0gcmVxdWVzdChpbnB1dCk7XFxuICAgICAgICAgICAgICAgIHZhciBydWxlID0gTVlfUEFSQU1TLmNvbnRlbnQ7XFxuICAgICAgICAgICAgICAgIGxldCByID0gcnVsZS5jb250ZW50LnJlcGxhY2UoXFxcIkBcXFwiLCBcXFwiJiZcXFwiKS5yZXBsYWNlKFxcXCJ0ZXh0XFxcIiwgXFxcIlRleHRcXFwiKS5yZXBsYWNlKC9cXFxcLlswLTldL2csIGZ1bmN0aW9uKGEpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLnJlcGxhY2UoXFxcIi5cXFwiLCBcXFwiLFxcXCIpXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBsZXQgcjEgPSByLnNwbGl0KFxcXCImJlxcXCIpO1xcbiAgICAgICAgICAgICAgICBsZXQgcjIgPSByMS5zbGljZSgwLCByMS5sZW5ndGggLSAxKS5qb2luKFxcXCImJlxcXCIpO1xcbiAgICAgICAgICAgICAgICBsZXQgYXJyID0gcGRmYShyZXMsIFxcXCJib2R5JiZcXFwiICsgcjIpO1xcbiAgICAgICAgICAgICAgICAvL2xvZyhhcnIpO1xcbiAgICAgICAgICAgICAgICB2YXIgdHQgPSBcXFwiXFxcIlxcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpdCBvZiBhcnIpIHtcXG4gICAgICAgICAgICAgICAgICAgIGl0ID0gaXQucmVwbGFjZShuZXcgUmVnRXhwKFxcXCJcXFxcblxcXCIsIFxcXCJnXFxcIiksIFxcXCItLWJyLS1cXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nKGl0KTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0ID0gcGRmaChpdCwgXFxcIlRleHRcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIHQgPSB0LnJlcGxhY2UobmV3IFJlZ0V4cChcXFwiLS1ici0tXFxcIiwgXFxcImdcXFwiKSwgXFxcIjxicj5cXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWVcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGxldCB0MiA9IHQuc3BsaXQoXFxcIjxicj5cXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGl0MiBvZiB0Mikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdDIgPT0gXFxcIlxcXCIgfHwgaXQyLmxlbmd0aCA9PSAxKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXQyLnN0YXJ0c1dpdGgoXFxcIuOAgFxcXCIpICYmICFpdDIuc3RhcnRzV2l0aChcXFwiJm5ic3A7Jm5ic3A7XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQyID0gXFxcIiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1xcXCIgKyBpdDIudHJpbSgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocnVsZS5yZXBsYWNlUmVnZXgpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQyID0gaXQyLnJlcGxhY2UobmV3IFJlZ0V4cChydWxlLnJlcGxhY2VSZWdleC5yZXBsYWNlKFxcXCIjI1xcXCIsIFxcXCJcXFwiKSwgXFxcImdcXFwiKSwgXFxcIlxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdDIgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWVcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgdHQgKz0gaXQyICsgXFxcIlxcXFxuXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiB0dFxcbiAgICAgICAgICAgIH0sIE1ZX1BBUkFNUyksXFxuICAgICAgICAgICAgdHlwZTogXFxcIm5vdmVsXFxcIlxcbiAgICAgICAgfVxcbiAgICB9XFxufSlcXG5kLnVuc2hpZnQoe1xcbiAgICB0aXRsZTogTVlfUEFSQU1TLmJvb2tOYW1lLFxcbiAgICBpbWc6IE1ZX1BBUkFNUy5jb3ZlcixcXG4gICAgdXJsOiBNWV9VUkwsXFxuICAgIGNvbF90eXBlOiBcXFwibW92aWVfMV92ZXJ0aWNhbF9waWNfYmx1clxcXCJcXG59KVxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWGheWuuVwiLFwicGF0aFwiOlwiY29udGVudFwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG52YXIgcmVzID0gZ2V0UmVzQ29kZSgpXFxudmFyIHJ1bGUgPSBNWV9QQVJBTVMuY29udGVudFxcbmxldCByID0gcnVsZS5jb250ZW50LnJlcGxhY2UoXFxcIkBcXFwiLCBcXFwiJiZcXFwiKS5yZXBsYWNlKFxcXCJ0ZXh0XFxcIiwgXFxcIlRleHRcXFwiKS5yZXBsYWNlKC9cXFxcLlswLTldL2csIGZ1bmN0aW9uKGEpIHtcXG4gICAgcmV0dXJuIGEucmVwbGFjZShcXFwiLlxcXCIsIFxcXCIsXFxcIilcXG59KTtcXG5sZXQgcjEgPSByLnNwbGl0KFxcXCImJlxcXCIpO1xcbmxldCByMiA9IHIxLnNsaWNlKDAsIHIxLmxlbmd0aCAtIDEpLmpvaW4oXFxcIiYmXFxcIik7XFxubGV0IGFyciA9IHBkZmEocmVzLCBcXFwiYm9keSYmXFxcIiArIHIyKTtcXG4vL2xvZyhhcnIpO1xcbmZvciAobGV0IGl0IG9mIGFycikge1xcbiAgICBpdCA9IGl0LnJlcGxhY2UobmV3IFJlZ0V4cChcXFwiXFxcXG5cXFwiLCBcXFwiZ1xcXCIpLCBcXFwiLS1ici0tXFxcIik7XFxuICAgIC8vbG9nKGl0KTtcXG4gICAgdmFyIHQgPSBwZGZoKGl0LCBcXFwiVGV4dFxcXCIpO1xcbiAgICB0ID0gdC5yZXBsYWNlKG5ldyBSZWdFeHAoXFxcIi0tYnItLVxcXCIsIFxcXCJnXFxcIiksIFxcXCI8YnI+XFxcIik7XFxuICAgIGlmICh0ID09IFxcXCJcXFwiKSB7XFxuICAgICAgICBjb250aW51ZVxcbiAgICB9XFxuICAgIGxldCB0MiA9IHQuc3BsaXQoXFxcIjxicj5cXFwiKTtcXG4gICAgZm9yIChsZXQgaXQyIG9mIHQyKSB7XFxuICAgICAgICBpZiAoaXQyID09IFxcXCJcXFwiIHx8IGl0Mi5sZW5ndGggPT0gMSkge1xcbiAgICAgICAgICAgIGNvbnRpbnVlXFxuICAgICAgICB9XFxuICAgICAgICBpZiAoIWl0Mi5zdGFydHNXaXRoKFxcXCLjgIBcXFwiKSAmJiAhaXQyLnN0YXJ0c1dpdGgoXFxcIiZuYnNwOyZuYnNwO1xcXCIpKSB7XFxuICAgICAgICAgICAgaXQyID0gXFxcIiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1xcXCIgKyBpdDIudHJpbSgpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHJ1bGUucmVwbGFjZVJlZ2V4KSB7XFxuICAgICAgICAgICAgaXQyID0gaXQyLnJlcGxhY2UobmV3IFJlZ0V4cChydWxlLnJlcGxhY2VSZWdleC5yZXBsYWNlKFxcXCIjI1xcXCIsIFxcXCJcXFwiKSwgXFxcImdcXFwiKSwgXFxcIlxcXCIpXFxuICAgICAgICB9XFxuICAgICAgICBpZiAoaXQyID09IFxcXCJcXFwiIHx8IGl0MiA9PSBcXFwiJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7XFxcIikge1xcbiAgICAgICAgICAgIGNvbnRpbnVlXFxuICAgICAgICB9XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBpdDIsXFxuICAgICAgICAgICAgdXJsOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInJpY2hfdGV4dFxcXCIsXFxuICAgICAgICAgICAgZGVzYzogXFxcIlxcXCIsXFxuICAgICAgICAgICAgcGljX3VybDogXFxcIlxcXCJcXG4gICAgICAgIH0pO1xcbiAgICB9XFxufVxcbmQudW5zaGlmdCh7XFxuICAgIHRpdGxlOiBcXFwiPGJpZz5cXFwiICsgTVlfUEFSQU1TLnRpdGxlICsgXFxcIjwvYmlnPlxcXCIsXFxuICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIlxcbn0pXFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfMV92ZXJ0aWNhbF9waWNcIixcIm5hbWVcIjpcIuaQnOe0olwiLFwicGF0aFwiOlwic2VhcmNoXCIsXCJydWxlXCI6XCJqczpcXG5sZXQge1xcbiAgICBzZWFyY2hcXG59ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2Uvc3NcXFwiKTtcXG5sZXQgZCA9IFtdO1xcbmxldCBrdyA9IGdldFBhcmFtKFxcXCJrd1xcXCIpO1xcbmxldCBzID0ga3c7XFxuc2V0UGFnZVRpdGxlKFxcXCLmkJzntKJcXFwiICsga3cgKyBcXFwiIFxcXCIgKyBNWV9QQVJBTVMuYm9va1NvdXJjZU5hbWUpO1xcbmxldCBtYXRjaE11c3QgPSBnZXRJdGVtKFxcXCJtbVxcXCIsIFxcXCIwXFxcIik7XFxubGV0IHRpcCA9IFxcXCLnsr7noa7ljLnphY3vvJpcXFwiICsgKG1hdGNoTXVzdCA9PSBcXFwiMVxcXCIgPyBcXFwi5pivXFxcIiA6IFxcXCLlkKZcXFwiKTtcXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogdGlwLFxcbiAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICBzZXRJdGVtKFxcXCJtbVxcXCIsIGdldEl0ZW0oXFxcIm1tXFxcIiwgXFxcIjBcXFwiKSA9PSBcXFwiMFxcXCIgPyBcXFwiMVxcXCIgOiBcXFwiMFxcXCIpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL09LXFxcIjtcXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzFcXFwiLFxcbiAgICB9KTtcXG59XFxubGV0IGQyID0gc2VhcmNoKE1ZX1BBUkFNUy5ydWxlcywga3csIE1ZX1BBR0UpO1xcbmZvciAobGV0IGl0IG9mIGQyKSB7XFxuICAgIGlmIChtYXRjaE11c3QgPT0gXFxcIjBcXFwiIHx8IChpdC50aXRsZSAmJiBpdC50aXRsZS5pbmRleE9mKGt3KSA+PSAwKSkge1xcbiAgICAgICAgaXQudGl0bGUgPSBpdC50aXRsZS5pbmNsdWRlcyhcXFwi4oCc4oCc4oCd4oCdXFxcIikgPyBpdC50aXRsZSA6IFxcXCLigJzigJzigJ3igJ1cXFwiICsgaXQudGl0bGUucmVwbGFjZShuZXcgUmVnRXhwKFxcXCI8ZW0+fDwvZW0+XFxcIiwgXFxcImdcXFwiKSwgXFxcIlxcXCIpLnJlcGxhY2UobmV3IFJlZ0V4cChzLCBcXFwiZ1xcXCIpLCBcXFwiPHN0cm9uZz48c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiAjMUU5MEZGXFxcXFxcXCI+XFxcIiArIHMgKyBcXFwiPC9zcGFuPjwvc3Ryb25nPlxcXCIpXFxuICAgICAgICBkLnB1c2goaXQpO1xcbiAgICB9XFxufVxcblxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIui9rOaNolwiLFwicGF0aFwiOlwiY29udmVydGVyXCIsXCJydWxlXCI6XCIkLmV4cG9ydHMgPSB7XFxuICAgIGdldEFycmF5OiAoaHRtbCwgcnVsZSkgPT4ge1xcbiAgICAgICAgbGV0IHIxID0gcnVsZS5zcGxpdChcXFwiIVxcXCIpWzBdLnNwbGl0KFxcXCJ8fFxcXCIpO1xcbiAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcImJvZHkmJlxcXCIgKyByMVswXS5yZXBsYWNlKFxcXCIgXFxcIiwgXFxcIiYmXFxcIikucmVwbGFjZShcXFwiQFxcXCIsIFxcXCImJlxcXCIpKTtcXG4gICAgICAgIGlmIChyMS5sZW5ndGggPiAxKSB7XFxuICAgICAgICAgICAgbGV0IHIyID0gcjFbMV0uc3BsaXQoXFxcIjpcXFwiKTtcXG4gICAgICAgICAgICBsZXQgcjMgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpdCBvZiByMikge1xcbiAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSBwYXJzZUludChpdCk7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4oaSkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHIzLnB1c2goaSk7XFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGxldCBhcnIyID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgaWYgKHIzLmluZGV4T2YoaSkgPCAwKSB7XFxuICAgICAgICAgICAgICAgICAgICBhcnIyLnB1c2goYXJyW2ldKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gYXJyMjtcXG4gICAgICAgIH1cXG4gICAgICAgIGxvZyhcXFwi6I635Y+W5aSx6LSl77yM5aSx6LSl5a6a5L2N77yaXFxcIiArIHIxWzBdLnJlcGxhY2UoXFxcIiBcXFwiLCBcXFwiJiZcXFwiKS5yZXBsYWNlKFxcXCJAXFxcIiwgXFxcIiYmXFxcIikpXFxuICAgICAgICByZXR1cm4gYXJyO1xcbiAgICB9LFxcbiAgICBnZXRUZXh0OiAoaHRtbCwgcnVsZSkgPT4ge1xcbiAgICAgICAgdmFyIHJ1ID0gcnVsZS5yZXBsYWNlKFxcXCJAXFxcIiwgXFxcIiYmXFxcIikucmVwbGFjZShcXFwidGV4dFxcXCIsIFxcXCJUZXh0XFxcIikucmVwbGFjZSgvXFxcXC5bMC05XS9nLCBmdW5jdGlvbihhKSB7XFxuICAgICAgICAgICAgcmV0dXJuIGEucmVwbGFjZShcXFwiLlxcXCIsIFxcXCIsXFxcIilcXG4gICAgICAgIH0pLnNwbGl0KFxcXCIjI1xcXCIpXFxuICAgICAgICBpZiAocnUubGVuZ3RoID09IDEpIHtcXG4gICAgICAgICAgICB2YXIgciA9IHBkZmgoaHRtbCwgcnVbMF0pXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHZhciByID0gcGRmaChodG1sLCBydVswXSkucmVwbGFjZShuZXcgUmVnRXhwKHJ1WzFdLCBcXFwiZ1xcXCIpLCBcXFwiXFxcIilcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChyID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgbG9nKFxcXCLov5Tlm57kuLrnqbrvvIzlj6/og73mmK/lrprkvY3lpLHotKXvvJpcXFwiICsgcnVsZS5yZXBsYWNlKFxcXCJAXFxcIiwgXFxcIiYmXFxcIikucmVwbGFjZShcXFwidGV4dFxcXCIsIFxcXCJUZXh0XFxcIikucmVwbGFjZSgvXFxcXC5bMC05XS9nLCBmdW5jdGlvbihhKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBhLnJlcGxhY2UoXFxcIi5cXFwiLCBcXFwiLFxcXCIpXFxuICAgICAgICAgICAgfSkuc3BsaXQoXFxcIiMjXFxcIilbMF0pXFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gclxcbiAgICB9LFxcbiAgICBnZXRVcmwwOiAoaHRtbCwgcGFyZW50UnVsZSwgcnVsZSkgPT4ge1xcbiAgICAgICAgaWYgKHBhcmVudFJ1bGUgIT0gbnVsbCkge1xcbiAgICAgICAgICAgIHBhcmVudFJ1bGUgPSBwYXJlbnRSdWxlLnNwbGl0KFxcXCIhXFxcIilbMF07XFxuICAgICAgICB9XFxuICAgICAgICBsZXQgcCA9IHBhcmVudFJ1bGUgIT0gbnVsbCAmJiBwYXJlbnRSdWxlW3BhcmVudFJ1bGUubGVuZ3RoIC0gMV0gPT0gXFxcImFcXFwiID8gXFxcImEmJlxcXCIgOiBcXFwiXFxcIjtcXG4gICAgICAgIGxldCByID0gcGQoaHRtbCwgcCArIHJ1bGUucmVwbGFjZShcXFwiQFxcXCIsIFxcXCImJlxcXCIpLnJlcGxhY2UoXFxcInRleHRcXFwiLCBcXFwiVGV4dFxcXCIpLnJlcGxhY2UoL1xcXFwuWzAtOV0vZywgZnVuY3Rpb24oYSkge1xcbiAgICAgICAgICAgIHJldHVybiBhLnJlcGxhY2UoXFxcIi5cXFwiLCBcXFwiLFxcXCIpO1xcbiAgICAgICAgfSkuc3BsaXQoXFxcIiMjXFxcIilbMF0uc3BsaXQoXFxcIiMjXFxcIilbMF0pO1xcbiAgICAgICAgaWYgKHIgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICBsb2coXFxcIui/lOWbnuS4uuepuu+8jOWPr+iDveaYr+WumuS9jeWksei0pe+8mlxcXCIgKyBwICsgcnVsZS5yZXBsYWNlKFxcXCJAXFxcIiwgXFxcIiYmXFxcIikucmVwbGFjZShcXFwidGV4dFxcXCIsIFxcXCJUZXh0XFxcIikucmVwbGFjZSgvXFxcXC5bMC05XS9nLCBmdW5jdGlvbihhKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBhLnJlcGxhY2UoXFxcIi5cXFwiLCBcXFwiLFxcXCIpO1xcbiAgICAgICAgICAgIH0pLnNwbGl0KFxcXCIjI1xcXCIpWzBdKVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIHJcXG4gICAgfVxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuiBmuaQnFwiLFwicGF0aFwiOlwianVcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxubGV0IHtcXG4gICAgc2VhcmNoLFxcbiAgICBsaXN0UnVsZXNcXG59ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2Uvc3NcXFwiKTtcXG5sZXQge1xcbiAgICBhbGwsXFxuICAgIHVzZSxcXG4gICAgZGF0YVxcbn0gPSBsaXN0UnVsZXMoTVlfUEFHRSk7XFxuZGF0YSA9IGRhdGEgfHwgW107XFxubGV0IHMgPSBnZXRQYXJhbShcXFwia3dcXFwiKTtcXG5zZXRQYWdlVGl0bGUoXFxcIuaQnOe0olxcXCIgKyBzKTtcXG5sZXQgbWF0Y2hNdXN0ID0gZ2V0SXRlbShcXFwibW1cXFwiLCBcXFwiMFxcXCIpO1xcbmxldCB0aXAgPSBcXFwi5pCc57Si5rqQ77yaXFxcIiArIHVzZSArIFxcXCIvXFxcIiArIGFsbCArIFxcXCIgIOeyvuehruWMuemFje+8mlxcXCIgKyAobWF0Y2hNdXN0ID09IFxcXCIxXFxcIiA/IFxcXCLmmK9cXFwiIDogXFxcIuWQplxcXCIpO1xcbmlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiB0aXAsXFxuICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgIHNldEl0ZW0oXFxcIm1tXFxcIiwgZ2V0SXRlbShcXFwibW1cXFwiLCBcXFwiMFxcXCIpID09IFxcXCIwXFxcIiA/IFxcXCIxXFxcIiA6IFxcXCIwXFxcIik7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8vT0tcXFwiO1xcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfMVxcXCIsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGlkOiBcXFwieXVlZHUtcy1oXFxcIlxcbiAgICAgICAgfVxcbiAgICB9KTtcXG59IGVsc2UgaWYgKGRhdGEubGVuZ3RoID4gMCkge1xcbiAgICB1cGRhdGVJdGVtKFxcXCJ5dWVkdS1zLWhcXFwiLCB7XFxuICAgICAgICB0aXRsZTogdGlwXFxuICAgIH0pO1xcbn1cXG5sZXQgcCA9IE1ZX1BBR0U7XFxubGV0IHBhZ2VpZCA9IFxcXCJ5dWVkdS1wYWdlXFxcIiArIE1ZX1BBR0U7XFxuaWYgKGRhdGEubGVuZ3RoID4gMCkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLliqDovb3nrKxcXFwiICsgTVlfUEFHRSArIFxcXCLpobXkuK3vvIzov5vluqbvvJoxL1xcXCIgKyBkYXRhLmxlbmd0aCxcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgcGljX3VybDogXFxcIlxcXCIsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGlkOiBwYWdlaWRcXG4gICAgICAgIH1cXG4gICAgfSk7XFxufVxcbnNldFJlc3VsdChkKTtcXG5pZiAoZGF0YS5sZW5ndGggPiAwKSB7XFxuICAgIC8v5aSa57q/56iL5Yqg6L29XFxuICAgIGxldCB0YXNrcyA9IGRhdGEubWFwKGl0ID0+IHtcXG4gICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgZnVuYzogZnVuY3Rpb24ocnVsZSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VhcmNoKHJ1bGUsIHMsIDEpO1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgcGFyYW06IGl0LFxcbiAgICAgICAgICAgIGlkOiBcXFwicnVsZUBcXFwiICsgaXQubmFtZVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG5cXG4gICAgYmF0Y2hFeGVjdXRlKHRhc2tzLCB7XFxuICAgICAgICBmdW5jOiBmdW5jdGlvbihwYXJhbSwgaWQsIGVycm9yLCByZXN1bHQpIHtcXG4gICAgICAgICAgICAvL2xvZyhcXFwibGlzdGVuZXI6IFxcXCIgKyAocmVzdWx0IHx8IFtdKS5sZW5ndGgpXFxuICAgICAgICAgICAgcGFyYW0uaSA9IHBhcmFtLmkgKyAxO1xcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGl0IG9mIHJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLmogPSBwYXJhbS5qICsgMTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hNdXN0ID09IFxcXCIxXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWl0LnRpdGxlIHx8ICFpdC50aXRsZS5pbmNsdWRlcyhzKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGV4dHJhID0gaXQuZXh0cmEgfHwge307XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEuaWQgPSBcXFwiX19hcHBcXFwiICsgTVlfUEFHRSArIFxcXCJAXFxcIiArIHBhcmFtLmo7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEuYm9va05hbWUgPSBpdC50aXRsZVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLmNvdmVyID0gaXQucGljX3VybCB8fCBpdC5pbWdcXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRJdGVtQmVmb3JlKHBhZ2VpZCwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXQudGl0bGUuaW5jbHVkZXMoXFxcIuKAnOKAnOKAneKAnVxcXCIpID8gaXQudGl0bGUgOiBcXFwi4oCc4oCc4oCd4oCdXFxcIiArIGl0LnRpdGxlLnJlcGxhY2UobmV3IFJlZ0V4cChcXFwiPGVtPnw8L2VtPlxcXCIsIFxcXCJnXFxcIiksIFxcXCJcXFwiKS5yZXBsYWNlKG5ldyBSZWdFeHAocywgXFxcImdcXFwiKSwgXFxcIjxzdHJvbmc+PHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjogIzFFOTBGRlxcXFxcXFwiPlxcXCIgKyBzICsgXFxcIjwvc3Bhbj48L3N0cm9uZz5cXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogaXQuZGVzYyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBpdC51cmwsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY191cmw6IGl0LnBpY191cmwgfHwgaXQuaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogaXQucGljX3VybCB8fCBpdC5pbWcgPyAnbW92aWVfMV92ZXJ0aWNhbF9waWMnIDogXFxcInRleHRfMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiBleHRyYVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxuXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChwYXJhbS5pID49IHBhcmFtLmFsbCkge1xcbiAgICAgICAgICAgICAgICBkZWxldGVJdGVtKHBhZ2VpZClcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5Yqg6L2956ysXFxcIiArIE1ZX1BBR0UgKyBcXFwi6aG15Lit77yM6L+b5bqm77yaXFxcIiArIChwYXJhbS5pICsgMSkgKyBcXFwiL1xcXCIgKyBwYXJhbS5hbGwsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIHBpY191cmw6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogcGFnZWlkXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSxcXG4gICAgICAgIHBhcmFtOiB7XFxuICAgICAgICAgICAgYWxsOiBkYXRhLmxlbmd0aCxcXG4gICAgICAgICAgICBpOiAwLFxcbiAgICAgICAgICAgIGo6IC0xXFxuICAgICAgICB9XFxuICAgIH0pO1xcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuaQnOe0oui+heWKqVwiLFwicGF0aFwiOlwic3NcIixcInJ1bGVcIjpcIiQuZXhwb3J0cyA9IHtcXG4gICAgc2VhcmNoOiAocnVsZSwga3csIHBhZ2UpID0+IHtcXG4gICAgICAgIGxldCBkID0gW107XFxuICAgICAgICBsZXQgbSA9IHJ1bGUucnVsZVNlYXJjaFxcbiAgICAgICAgLy8g6ZiF6K+7PT7op4bnlYxcXG4gICAgICAgIGxldCB1ID0gcnVsZS5ib29rU291cmNlVXJsICsgcnVsZS5zZWFyY2hVcmw7XFxuICAgICAgICBsZXQgdXJsID0gdS5yZXBsYWNlKFxcXCJ7e3BhZ2V9fVxcXCIsIHBhZ2UpLnJlcGxhY2UoXFxcInt7a2V5fX1cXFwiLCBrdylcXG4gICAgICAgIGxldCBsaXN0cnVsZSA9IFxcXCJib2R5JiZcXFwiICsgbS5ib29rTGlzdC5yZXBsYWNlKC8hWzAtOV0vZywgXFxcIlxcXCIpLnJlcGxhY2UoXFxcIiBcXFwiLCBcXFwiJiZcXFwiKS5zcGxpdChcXFwifHxcXFwiKVswXVxcbiAgICAgICAgbGV0IGF1dGhvciA9IG0uYXV0aG9yLnJlcGxhY2UoXFxcIkBcXFwiLCBcXFwiJiZcXFwiKS5yZXBsYWNlKFxcXCJ0ZXh0XFxcIiwgXFxcIlRleHRcXFwiKS5yZXBsYWNlKC9cXFxcLlswLTldL2csIGZ1bmN0aW9uKGEpIHtcXG4gICAgICAgICAgICByZXR1cm4gYS5yZXBsYWNlKFxcXCIuXFxcIiwgXFxcIixcXFwiKVxcbiAgICAgICAgfSlcXG4gICAgICAgIGxldCBjb3ZlciA9IG0uY292ZXJVcmwucmVwbGFjZShcXFwiQFxcXCIsIFxcXCImJlxcXCIpLnJlcGxhY2UoL1xcXFwuWzAtOV0vZywgZnVuY3Rpb24oYSkge1xcbiAgICAgICAgICAgIHJldHVybiBhLnJlcGxhY2UoXFxcIi5cXFwiLCBcXFwiLFxcXCIpXFxuICAgICAgICB9KVxcbiAgICAgICAgbGV0IG5hbWUgPSBtLm5hbWUucmVwbGFjZShcXFwiQFxcXCIsIFxcXCImJlxcXCIpLnJlcGxhY2UoXFxcInRleHRcXFwiLCBcXFwiVGV4dFxcXCIpLnJlcGxhY2UoL1xcXFwuWzAtOV0vZywgZnVuY3Rpb24oYSkge1xcbiAgICAgICAgICAgIHJldHVybiBhLnJlcGxhY2UoXFxcIi5cXFwiLCBcXFwiLFxcXCIpXFxuICAgICAgICB9KVxcbiAgICAgICAgbGV0IGJvb2t1cmwgPSBtLmJvb2tVcmwucmVwbGFjZShcXFwiQFxcXCIsIFxcXCImJlxcXCIpLnJlcGxhY2UoL1xcXFwuWzAtOV0vZywgZnVuY3Rpb24oYSkge1xcbiAgICAgICAgICAgIHJldHVybiBhLnJlcGxhY2UoXFxcIi5cXFwiLCBcXFwiLFxcXCIpXFxuICAgICAgICB9KVxcbiAgICAgICAgbGV0IGludHJvID0gbS5pbnRyby5yZXBsYWNlKFxcXCJAXFxcIiwgXFxcIiYmXFxcIikucmVwbGFjZShcXFwidGV4dFxcXCIsIFxcXCJUZXh0XFxcIikucmVwbGFjZSgvXFxcXC5bMC05XS9nLCBmdW5jdGlvbihhKSB7XFxuICAgICAgICAgICAgcmV0dXJuIGEucmVwbGFjZShcXFwiLlxcXCIsIFxcXCIsXFxcIilcXG4gICAgICAgIH0pO1xcbiAgICAgICAgLy9zZXRQYWdlVGl0bGUoXFxcIuaQnOe0olxcXCIgKyBnZXRQYXJhbShcXFwia3dcXFwiKSArIFxcXCIgXFxcIiArIE1ZX1BBUkFNUy5ib29rU291cmNlTmFtZSk7XFxuICAgICAgICAvL01ZX1VSTCA9IHVybDtcXG4gICAgICAgIGxldCByZXMgPSByZXF1ZXN0KHVybClcXG4gICAgICAgIGxldCBsaXN0ID0gcGRmYShyZXMsIGxpc3RydWxlKVxcbiAgICAgICAgbGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwYXJzZURvbUZvckh0bWwoaXRlbSwgbmFtZSksXFxuICAgICAgICAgICAgICAgIGltZzogcGFyc2VEb20oaXRlbSwgY292ZXIsIHVybCksXFxuICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9tZW51P3VybD1cXFwiICsgcGFyc2VEb20oaXRlbSwgYm9va3VybCwgdXJsKSArIFxcXCIjYXV0b0NhY2hlIyNpbW1lcnNpdmVUaGVtZSNcXFwiLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBydWxlLmJvb2tTb3VyY2VOYW1lICsgXFxcIlxcXFxuXFxcIiArIHBhcnNlRG9tRm9ySHRtbChpdGVtLCBhdXRob3IpICsgXFxcIlxcXFxuXFxcIiArIHBhcnNlRG9tRm9ySHRtbChpdGVtLCBpbnRybyksXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBcXFwiVG9jXFxcIjogcnVsZS5ydWxlVG9jLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcImNvbnRlbnRcXFwiOiBydWxlLnJ1bGVDb250ZW50LFxcbiAgICAgICAgICAgICAgICAgICAgXFxcImJvb2tOYW1lXFxcIjogcGFyc2VEb21Gb3JIdG1sKGl0ZW0sIG5hbWUpLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcImNvdmVyXFxcIjogcGFyc2VEb20oaXRlbSwgY292ZXIsIHVybClcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KTtcXG4gICAgICAgIHJldHVybiBkO1xcbiAgICB9LFxcbiAgICBsaXN0UnVsZXM6IChwYWdlLCBydWxlKSA9PiB7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIC8v5bm25Y+R5pWw6YePXFxuICAgICAgICAgICAgbGV0IHNpemUgPSAxMDtcXG4gICAgICAgICAgICBsZXQgZGF0YTEgPSBKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL2ZpbGVzL3l1ZWR1L2xpc3QuanNvblxcXCIpKVxcbiAgICAgICAgICAgIGxldCBsaXN0ID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9maWxlcy95dWVkdS9cXFwiICsgbWQ1KGdldE15VmFyKFxcXCJ0YWJcXFwiLCBkYXRhMS51cmxzWzBdLm5hbWUpKSArIFxcXCIuanNvblxcXCIpKVxcbiAgICAgICAgICAgIGxldCBydWxlcyA9IFtdO1xcbiAgICAgICAgICAgIGxpc3QuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHMgPSBKU09OLnN0cmluZ2lmeShpdGVtKVxcbiAgICAgICAgICAgICAgICBpZiAocy5pbmNsdWRlcyhcXFwiPGpzPlxcXCIpIHx8IHMuaW5jbHVkZXMoXFxcIkBqczpcXFwiKSB8fCBzLmluY2x1ZGVzKFxcXCIkLlxcXCIpIHx8IHMuaW5jbHVkZXMoXFxcIvCflJ5cXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBydWxlcy5wdXNoKGl0ZW0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgaWYgKCFwYWdlICYmICFydWxlKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBydWxlcy5tYXAoaXQgPT4gaXQubmFtZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChydWxlICE9IG51bGwpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJ1bGVzLmZpbHRlcihpID0+IGkubmFtZSA9PSBydWxlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgbGV0IHN0YXJ0ID0gKHBhZ2UgLSAxKSAqIHNpemU7XFxuICAgICAgICAgICAgaWYgKHJ1bGVzLmxlbmd0aCA8IHN0YXJ0ICsgMSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGxldCBsZW4gPSBzaXplO1xcbiAgICAgICAgICAgIGlmIChydWxlcy5sZW5ndGggPCBwYWdlICogc2l6ZSkge1xcbiAgICAgICAgICAgICAgICBsZW4gPSBydWxlcy5sZW5ndGggLSBzdGFydFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBsZXQgYWxsID0gcnVsZXMubGVuZ3RoO1xcbiAgICAgICAgICAgIGxldCB1c2UgPSAocGFnZSAtIDEpICogc2l6ZSArIGxlbjtcXG4gICAgICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgICAgICBhbGw6IGFsbCxcXG4gICAgICAgICAgICAgICAgdXNlOiB1c2UsXFxuICAgICAgICAgICAgICAgIGRhdGE6IHJ1bGVzLnNsaWNlKHN0YXJ0LCBzdGFydCArIGxlbilcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgIGFsbDogMCxcXG4gICAgICAgICAgICAgICAgdXNlOiAwLFxcbiAgICAgICAgICAgICAgICBkYXRhOiBbXVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcbn1cIn1dLFwic2F2ZWRcIjpmYWxzZSxcInRpdGxlXCI6XCLmgqbor7tcIixcInZlcnNpb25cIjowLFwidXJsXCI6XCJoaWtlcjovL3BhZ2UvY29uZmlnXCIsXCJjb2xfdHlwZVwiOlwidGV4dF9jZW50ZXJfMVwiLFwiZmluZF9ydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbnRyeSB7XFxuICAgIGlmICghZmlsZUV4aXN0KFxcXCJoaWtlcjovL2ZpbGVzL3l1ZWR1L2xpc3QuanNvblxcXCIpKSB7XFxuICAgICAgICB3cml0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMveXVlZHUvbGlzdC5qc29uXFxcIiwgJ3tcXFwidXJsc1xcXCI6W119JylcXG4gICAgfVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLmt7vliqDorqLpmIVcXFwiLFxcbiAgICAgICAgdXJsOiAkKFxcXCJcXFwiLCBcXFwi6K6i6ZiF5ZCN56ewXFxcIikuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgICAgIHJldHVybiAkKFxcXCJcXFwiLCBcXFwi6K6i6ZiF6ZO+5o6lXFxcIikuaW5wdXQoKG5hbWUpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IGxpc3QgPSBKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL2ZpbGVzL3l1ZWR1L2xpc3QuanNvblxcXCIpKVxcbiAgICAgICAgICAgICAgICBsaXN0LnVybHMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBpbnB1dFxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMveXVlZHUvbGlzdC5qc29uXFxcIiwgSlNPTi5zdHJpbmdpZnkobGlzdCkpXFxuICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IGZldGNoKGlucHV0KVxcbiAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZSh0KVxcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL3l1ZWR1L1xcXCIgKyBtZDUobmFtZSkgKyBcXFwiLmpzb25cXFwiLCB0KVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WvvOWFpeaIkOWKn1xcXCJcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WvvOWFpeWksei0pVxcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgfSwgaW5wdXQpXFxuICAgICAgICB9KVxcbiAgICB9KVxcbiAgICBsZXQgbGlzdCA9IEpTT04ucGFyc2UoZmV0Y2goXFxcImhpa2VyOi8vZmlsZXMveXVlZHUvbGlzdC5qc29uXFxcIikpXFxuICAgIGxpc3QudXJscy5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBpdGVtLm5hbWUsXFxuICAgICAgICAgICAgZGVzYzogaXRlbS51cmwsXFxuICAgICAgICAgICAgdXJsOiAkKFtcXFwi5Yig6ZmkXFxcIiwgXFxcIue8lui+keWQjeensFxcXCIsIFxcXCLnvJbovpHlnLDlnYBcXFwiLCBcXFwi5pu05pawXFxcIl0pLnNlbGVjdCgobGlzLCBpKSA9PiB7XFxuICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gbGlzXFxuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PSBcXFwi5Yig6ZmkXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIuehruiupOWIoOmZpO+8n1xcXCIpLmNvbmZpcm0oKGxpc3QsIGkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL3l1ZWR1L1xcXCIgKyBtZDUobGlzdC51cmxzW2ldLm5hbWUpICsgXFxcIi5qc29uXFxcIilcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0LnVybHMuc3BsaWNlKGksIDEpXFxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL3l1ZWR1L2xpc3QuanNvblxcXCIsIEpTT04uc3RyaW5naWZ5KGxpc3QpKSAgICAgICAgICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICAgICAgICAgIH0sIGxpc3QsIGkpXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT0gXFxcIue8lui+keWQjeensFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCJcXFwiKS5pbnB1dCgobGlzdCwgaSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QudXJsc1tpXS5uYW1lID0gaW5wdXRcXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMveXVlZHUvbGlzdC5qc29uXFxcIiwgSlNPTi5zdHJpbmdpZnkobGlzdCkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICAgICAgfSwgbGlzdCwgaSlcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PSBcXFwi57yW6L6R5Zyw5Z2AXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIlxcXCIpLmlucHV0KChsaXN0LCBpKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC51cmxzW2ldLnVybCA9IGlucHV0XFxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL3l1ZWR1L2xpc3QuanNvblxcXCIsIEpTT04uc3RyaW5naWZ5KGxpc3QpKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICAgICAgICAgIH0sIGxpc3QsIGkpXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ID0gZmV0Y2gobGlzdC51cmxzW2ldLnVybClcXG4gICAgICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKHQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL3l1ZWR1L1xcXCIgKyBtZDUobGlzdC51cmxzW2ldLm5hbWUpICsgXFxcIi5qc29uXFxcIiwgdClcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9hc3QoXFxcIuabtOaWsOaIkOWKn1xcXCIpXFxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9hc3QoXFxcIuabtOaWsOWksei0pVxcXCIpXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9LCBsaXN0LCBpKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfMVxcXCJcXG4gICAgICAgIH0pXFxuICAgIH0pXFxufSBjYXRjaCAoZSkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLplJnor6/vvJpcXFwiICsgZS5tZXNzYWdlLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgIH0pXFxufVxcbnNldFJlc3VsdChkKTtcIixcImdyb3VwXCI6XCJA54+N6JePXCIsXCJ1YVwiOlwibW9iaWxlXCIsXCJwcmVSdWxlXCI6XCJcIixcInBhZ2VzXCI6XCJbe1xcXCJjb2xfdHlwZVxcXCI6XFxcInRleHRfMVxcXCIsXFxcIm5hbWVcXFwiOlxcXCLmupDnm67lvZVcXFwiLFxcXCJwYXRoXFxcIjpcXFwic291cmNlXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxudmFyIGQgPSBbXTtcXFxcbnZhciBtID0gTVlfUEFSQU1TLnJ1bGVzXFxcXG52YXIgYmFzZXVybCA9IG0uYm9va1NvdXJjZVVybFxcXFxuaWYgKG0ucnVsZUV4cGxvcmUuYm9va0xpc3QpIHtcXFxcbiAgICB2YXIgcnVsZSA9IG0ucnVsZUV4cGxvcmVcXFxcbn0gZWxzZSB7XFxcXG4gICAgdmFyIHJ1bGUgPSBtLnJ1bGVTZWFyY2hcXFxcbn1cXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6IFxcXFxcXFwi5pCc57SiXFxcXFxcXCIsXFxcXG4gICAgZGVzYzogXFxcXFxcXCLor7fovpPlhaXmkJzntKLlhbPplK7or41cXFxcXFxcIixcXFxcbiAgICB1cmw6ICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICBwdXRNeVZhcihcXFxcXFxcImt3XFxcXFxcXCIsIGlucHV0KTtcXFxcbiAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3NlYXJjaD9wPWZ5cGFnZSZrdz1cXFxcXFxcIiArIGlucHV0XFxcXG4gICAgfSksXFxcXG4gICAgY29sX3R5cGU6IFxcXFxcXFwiaW5wdXRcXFxcXFxcIixcXFxcbiAgICBleHRyYToge1xcXFxuICAgICAgICBcXFxcXFxcInVcXFxcXFxcIjogYmFzZXVybCArIG0uc2VhcmNoVXJsLFxcXFxuICAgICAgICBcXFxcXFxcInJ1bGVzXFxcXFxcXCI6IG0sXFxcXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoXFxcXFxcXCJrd1xcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKSxcXFxcbiAgICAgICAgYm9va1NvdXJjZU5hbWU6IG0uYm9va1NvdXJjZU5hbWVcXFxcbiAgICB9XFxcXG59KVxcXFxuaWYgKG0uZW5hYmxlZEV4cGxvcmUmJm0uZXhwbG9yZVVybCkge1xcXFxuICAgIEpTT04ucGFyc2UobS5leHBsb3JlVXJsKS5mb3JFYWNoKGl0ZW0gPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGl0ZW0udGl0bGUsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogaXRlbS5zdHlsZS5sYXlvdXRfZmxleEJhc2lzUGVyY2VudCA9PSAxID8gXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCIgOiBcXFxcXFxcInRleHRfM1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgdXJsOiBpdGVtLnVybCA9PSBcXFxcXFxcIlxcXFxcXFwiID8gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCIgOiBcXFxcXFxcImhpa2VyOi8vcGFnZS9ib29rcz9wPWZ5cGFnZVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcImFsbFxcXFxcXFwiOiBtLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwicnVsZXNcXFxcXFxcIjogcnVsZSxcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcInVcXFxcXFxcIjogYmFzZXVybCArIGl0ZW0udXJsXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pXFxcXG4gICAgfSlcXFxcbn1cXFxcbnNldFJlc3VsdChkKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLkuLvpobVcXFwiLFxcXCJwYXRoXFxcIjpcXFwiaG9tZVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJ2YXIgZCA9IFtdO1xcXFxuaWYgKGZpbGVFeGlzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMveXVlZHUvbGlzdC5qc29uXFxcXFxcXCIpICYmIEpTT04ucGFyc2UoZmV0Y2goXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3l1ZWR1L2xpc3QuanNvblxcXFxcXFwiKSkudXJscy5sZW5ndGggIT0gMCkge1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiBcXFxcXFxcIuKame+4j+iuvue9rlxcXFxcXFwiLFxcXFxuICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2NvbmZpZ1xcXFxcXFwiLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJzY3JvbGxfYnV0dG9uXFxcXFxcXCJcXFxcbiAgICB9KTtcXFxcbiAgICBsZXQgZGF0YSA9IEpTT04ucGFyc2UoZmV0Y2goXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3l1ZWR1L2xpc3QuanNvblxcXFxcXFwiKSlcXFxcbiAgICBkYXRhLnVybHMuZm9yRWFjaChpdGVtID0+IHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBpdGVtLm5hbWUsXFxcXG4gICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoaSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXFxcXFwidGFiXFxcXFxcXCIsIGkpXFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5YiH5o2i5oiQ5YqfXFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH0sIGl0ZW0ubmFtZSksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJzY3JvbGxfYnV0dG9uXFxcXFxcXCJcXFxcbiAgICAgICAgfSlcXFxcbiAgICB9KVxcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiBcXFxcXFxcIuaQnOe0olxcXFxcXFwiLFxcXFxuICAgICAgICB1cmw6ICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICAgICAgcHV0TXlWYXIoXFxcXFxcXCJrd1xcXFxcXFwiLCBpbnB1dCk7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL3BhZ2UvanU/cD1meXBhZ2Uma3c9XFxcXFxcXCIgKyBpbnB1dFxcXFxuICAgICAgICB9KSxcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiaW5wdXRcXFxcXFxcIixcXFxcbiAgICAgICAgZGVzYzogXFxcXFxcXCLogZrlkIjmkJzntKLvvIzor7fovpPlhaXlhbPplK7or41cXFxcXFxcIixcXFxcbiAgICAgICAgcGljX3VybDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoXFxcXFxcXCJrd1xcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKVxcXFxuICAgICAgICB9XFxcXG4gICAgfSk7XFxcXG4gICAgbGV0IGxpc3QgPSBKU09OLnBhcnNlKGZldGNoKFxcXFxcXFwiaGlrZXI6Ly9maWxlcy95dWVkdS9cXFxcXFxcIiArIG1kNShnZXRNeVZhcihcXFxcXFxcInRhYlxcXFxcXFwiLCBkYXRhLnVybHNbMF0ubmFtZSkpICsgXFxcXFxcXCIuanNvblxcXFxcXFwiKSlcXFxcbiAgICBsaXN0LmZvckVhY2goaXRlbSA9PiB7XFxcXG4gICAgICAgIGxldCBzID0gSlNPTi5zdHJpbmdpZnkoaXRlbSlcXFxcbiAgICAgICAgaWYgKHMuaW5jbHVkZXMoXFxcXFxcXCI8anM+XFxcXFxcXCIpIHx8IHMuaW5jbHVkZXMoXFxcXFxcXCJAanM6XFxcXFxcXCIpIHx8IHMuaW5jbHVkZXMoXFxcXFxcXCIkLlxcXFxcXFwiKSB8fCBzLmluY2x1ZGVzKFxcXFxcXFwi8J+UnlxcXFxcXFwiKSkge1xcXFxuICAgICAgICAgICAgdmFyIHVybCA9IFxcXFxcXFwidG9hc3Q6Ly/lvZPliY3kuabmupDmmoLkuI3mlK/mjIFcXFxcXFxcIlxcXFxuICAgICAgICAgICAgcmV0dXJuXFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICB2YXIgdXJsID0gXFxcXFxcXCJoaWtlcjovL3BhZ2Uvc291cmNlP3A9ZnlwYWdlXFxcXFxcXCJcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGl0ZW0uYm9va1NvdXJjZU5hbWUgKyBgKCR7aXRlbS5ib29rU291cmNlR3JvdXB9KWAsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0XzJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHVybDogdXJsLFxcXFxuICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcInJ1bGVzXFxcXFxcXCI6IGl0ZW1cXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSlcXFxcbiAgICB9KVxcXFxufSBlbHNlIHtcXFxcbiAgICBzZXRSZXN1bHQoW3tcXFxcbiAgICAgICAgdGl0bGU6IFxcXFxcXFwi5L2g6L+Y5rKh5pyJ5Lmm5ZOm772e772e54K55oiR6L+b5YWl6K6+572uXFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvY29uZmlnXFxcXFxcXCIsXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfY2VudGVyXzFcXFxcXFxcIlxcXFxuICAgIH1dKVxcXFxufVxcXFxuc2V0UmVzdWx0KGQpO1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8xX3ZlcnRpY2FsX3BpY1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLliJfooahcXFwiLFxcXCJwYXRoXFxcIjpcXFwiYm9va3NcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG52YXIgZCA9IFtdO1xcXFxudHJ5IHtcXFxcbiAgICB2YXIgbSA9IE1ZX1BBUkFNUy5ydWxlc1xcXFxuICAgIC8vIOmYheivuz0+6KeG55WMXFxcXG4gICAgdmFyIHVybCA9IE1ZX1BBUkFNUy51LnJlcGxhY2UoXFxcXFxcXCJ7e3BhZ2V9fVxcXFxcXFwiLCBNWV9QQUdFKVxcXFxuICAgIHZhciBsaXN0cnVsZSA9IFxcXFxcXFwiYm9keSYmXFxcXFxcXCIgKyBtLmJvb2tMaXN0LnJlcGxhY2UoL1xcXFxcXFxcIVswLTldL2csIFxcXFxcXFwiXFxcXFxcXCIpLnJlcGxhY2UoXFxcXFxcXCIgXFxcXFxcXCIsIFxcXFxcXFwiJiZcXFxcXFxcIikuc3BsaXQoXFxcXFxcXCJ8fFxcXFxcXFwiKVswXVxcXFxuICAgIGlmIChtLmF1dGhvcikge1xcXFxuICAgICAgICB2YXIgYXV0aG9yID0gbS5hdXRob3IucmVwbGFjZShcXFxcXFxcIkBcXFxcXFxcIiwgXFxcXFxcXCImJlxcXFxcXFwiKS5yZXBsYWNlKFxcXFxcXFwidGV4dFxcXFxcXFwiLCBcXFxcXFxcIlRleHRcXFxcXFxcIikucmVwbGFjZSgvXFxcXFxcXFwuWzAtOV0vZywgZnVuY3Rpb24oYSkge1xcXFxuICAgICAgICAgICAgcmV0dXJuIGEucmVwbGFjZShcXFxcXFxcIi5cXFxcXFxcIiwgXFxcXFxcXCIsXFxcXFxcXCIpXFxcXG4gICAgICAgIH0pXFxcXG4gICAgfSBlbHNlIHtcXFxcbiAgICAgICAgdmFyIGF1dGhvciA9IGZhbHNlXFxcXG4gICAgfVxcXFxuICAgIGlmIChtLmNvdmVyVXJsKSB7XFxcXG4gICAgICAgIHZhciBjb3ZlciA9IG0uY292ZXJVcmwucmVwbGFjZShcXFxcXFxcIkBcXFxcXFxcIiwgXFxcXFxcXCImJlxcXFxcXFwiKS5yZXBsYWNlKC9cXFxcXFxcXC5bMC05XS9nLCBmdW5jdGlvbihhKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gYS5yZXBsYWNlKFxcXFxcXFwiLlxcXFxcXFwiLCBcXFxcXFxcIixcXFxcXFxcIilcXFxcbiAgICAgICAgfSlcXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICB2YXIgY292ZXIgPSBmYWxzZVxcXFxuICAgIH1cXFxcbiAgICB2YXIgbmFtZSA9IG0ubmFtZS5yZXBsYWNlKFxcXFxcXFwiQFxcXFxcXFwiLCBcXFxcXFxcIiYmXFxcXFxcXCIpLnJlcGxhY2UoXFxcXFxcXCJ0ZXh0XFxcXFxcXCIsIFxcXFxcXFwiVGV4dFxcXFxcXFwiKS5yZXBsYWNlKC9cXFxcXFxcXC5bMC05XS9nLCBmdW5jdGlvbihhKSB7XFxcXG4gICAgICAgIHJldHVybiBhLnJlcGxhY2UoXFxcXFxcXCIuXFxcXFxcXCIsIFxcXFxcXFwiLFxcXFxcXFwiKVxcXFxuICAgIH0pXFxcXG4gICAgdmFyIGJvb2t1cmwgPSBtLmJvb2tVcmwucmVwbGFjZShcXFxcXFxcIkBcXFxcXFxcIiwgXFxcXFxcXCImJlxcXFxcXFwiKS5yZXBsYWNlKC9cXFxcXFxcXC5bMC05XS9nLCBmdW5jdGlvbihhKSB7XFxcXG4gICAgICAgIHJldHVybiBhLnJlcGxhY2UoXFxcXFxcXCIuXFxcXFxcXCIsIFxcXFxcXFwiLFxcXFxcXFwiKVxcXFxuICAgIH0pXFxcXG4gICAgaWYgKG0uaW50cm8pIHtcXFxcbiAgICAgICAgdmFyIGludHJvID0gbS5pbnRyby5yZXBsYWNlKFxcXFxcXFwiQFxcXFxcXFwiLCBcXFxcXFxcIiYmXFxcXFxcXCIpLnJlcGxhY2UoXFxcXFxcXCJ0ZXh0XFxcXFxcXCIsIFxcXFxcXFwiVGV4dFxcXFxcXFwiKS5yZXBsYWNlKC9cXFxcXFxcXC5bMC05XS9nLCBmdW5jdGlvbihhKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gYS5yZXBsYWNlKFxcXFxcXFwiLlxcXFxcXFwiLCBcXFxcXFxcIixcXFxcXFxcIilcXFxcbiAgICAgICAgfSlcXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICB2YXIgaW50cm8gPSBmYWxzZVxcXFxuICAgIH1cXFxcbiAgICBNWV9VUkwgPSB1cmw7XFxcXG4gICAgdmFyIHJlcyA9IHJlcXVlc3QodXJsKVxcXFxuICAgIGxldCBsaXN0ID0gcGRmYShyZXMsIGxpc3RydWxlKVxcXFxuICAgIGlmIChsaXN0Lmxlbmd0aCA+IDApIHtcXFxcbiAgICAgICAgbGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogKGNvdmVyID8gXFxcXFxcXCJtb3ZpZV8xX3ZlcnRpY2FsX3BpY1xcXFxcXFwiIDogXFxcXFxcXCJ0ZXh0XzFcXFxcXFxcIiksXFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHBhcnNlRG9tRm9ySHRtbChpdGVtLCBuYW1lKSxcXFxcbiAgICAgICAgICAgICAgICBpbWc6IChjb3ZlciA/IHBhcnNlRG9tKGl0ZW0sIGNvdmVyKSArIFxcXFxcXFwiQFJlZmVyZXI9XFxcXFxcXCIgOiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIiksXFxcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS9tZW51P3VybD1cXFxcXFxcIiArIHBhcnNlRG9tKGl0ZW0sIGJvb2t1cmwpICsgXFxcXFxcXCIjYXV0b0NhY2hlIyNpbW1lcnNpdmVUaGVtZSNcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBkZXNjOiAoYXV0aG9yID8gcGFyc2VEb21Gb3JIdG1sKGl0ZW0sIGF1dGhvcikgOiBcXFxcXFxcIlxcXFxcXFwiKSArIFxcXFxcXFwiXFxcXFxcXFxuXFxcXFxcXCIgKyAoaW50cm8gPyBwYXJzZURvbUZvckh0bWwoaXRlbSwgaW50cm8pIDogXFxcXFxcXCJcXFxcXFxcIiksXFxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJib29rTmFtZVxcXFxcXFwiOiBwYXJzZURvbUZvckh0bWwoaXRlbSwgbmFtZSksXFxcXG4gICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiY292ZXJcXFxcXFxcIjogKGNvdmVyID8gcGFyc2VEb20oaXRlbSwgY292ZXIpICsgXFxcXFxcXCJAUmVmZXJlcj1cXFxcXFxcIiA6IFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJUb2NcXFxcXFxcIjogTVlfUEFSQU1TLmFsbC5ydWxlVG9jLFxcXFxuICAgICAgICAgICAgICAgICAgICBcXFxcXFxcImNvbnRlbnRcXFxcXFxcIjogTVlfUEFSQU1TLmFsbC5ydWxlQ29udGVudFxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH0pXFxcXG4gICAgfSBlbHNlIHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuWIl+ihqOWKoOi9veWksei0pe+8mlxcXFxcXFwiICsgbGlzdHJ1bGUsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiXFxcXG4gICAgICAgIH0pXFxcXG4gICAgfVxcXFxufSBjYXRjaCAoZSkge1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiBcXFxcXFxcIuWKoOi9veWksei0pe+8mlxcXFxcXFwiICsgZS5tZXNzYWdlLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCJcXFxcbiAgICB9KVxcXFxufVxcXFxuc2V0UmVzdWx0KGQpO1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXFwibmFtZVxcXCI6XFxcIuiuvue9rlxcXCIsXFxcInBhdGhcXFwiOlxcXCJjb25maWdcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG52YXIgZCA9IFtdO1xcXFxudHJ5IHtcXFxcbiAgICBpZiAoIWZpbGVFeGlzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMveXVlZHUvbGlzdC5qc29uXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgIHdyaXRlRmlsZShcXFxcXFxcImhpa2VyOi8vZmlsZXMveXVlZHUvbGlzdC5qc29uXFxcXFxcXCIsICd7XFxcXFxcXCJ1cmxzXFxcXFxcXCI6W119JylcXFxcbiAgICB9XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IFxcXFxcXFwi5re75Yqg6K6i6ZiFXFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogJChcXFxcXFxcIlxcXFxcXFwiLCBcXFxcXFxcIuiuoumYheWQjeensFxcXFxcXFwiKS5pbnB1dCgoKSA9PiB7XFxcXG4gICAgICAgICAgICByZXR1cm4gJChcXFxcXFxcIlxcXFxcXFwiLCBcXFxcXFxcIuiuoumYhemTvuaOpVxcXFxcXFwiKS5pbnB1dCgobmFtZSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIGxldCBsaXN0ID0gSlNPTi5wYXJzZShmZXRjaChcXFxcXFxcImhpa2VyOi8vZmlsZXMveXVlZHUvbGlzdC5qc29uXFxcXFxcXCIpKVxcXFxuICAgICAgICAgICAgICAgIGxpc3QudXJscy5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBpbnB1dFxcXFxuICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKFxcXFxcXFwiaGlrZXI6Ly9maWxlcy95dWVkdS9saXN0Lmpzb25cXFxcXFxcIiwgSlNPTi5zdHJpbmdpZnkobGlzdCkpXFxcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSBmZXRjaChpbnB1dClcXFxcbiAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZSh0KVxcXFxuICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3l1ZWR1L1xcXFxcXFwiICsgbWQ1KG5hbWUpICsgXFxcXFxcXCIuanNvblxcXFxcXFwiLCB0KVxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+WvvOWFpeaIkOWKn1xcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+WvvOWFpeWksei0pVxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXFxcbiAgICAgICAgICAgIH0sIGlucHV0KVxcXFxuICAgICAgICB9KVxcXFxuICAgIH0pXFxcXG4gICAgbGV0IGxpc3QgPSBKU09OLnBhcnNlKGZldGNoKFxcXFxcXFwiaGlrZXI6Ly9maWxlcy95dWVkdS9saXN0Lmpzb25cXFxcXFxcIikpXFxcXG4gICAgbGlzdC51cmxzLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBpdGVtLm5hbWUsXFxcXG4gICAgICAgICAgICBkZXNjOiBpdGVtLnVybCxcXFxcbiAgICAgICAgICAgIHVybDogJChbXFxcXFxcXCLliKDpmaRcXFxcXFxcIiwgXFxcXFxcXCLnvJbovpHlkI3np7BcXFxcXFxcIiwgXFxcXFxcXCLnvJbovpHlnLDlnYBcXFxcXFxcIiwgXFxcXFxcXCLmm7TmlrBcXFxcXFxcIl0pLnNlbGVjdCgobGlzLCBpKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIGxpc3QgPSBsaXNcXFxcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT0gXFxcXFxcXCLliKDpmaRcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFxcXFxcIuehruiupOWIoOmZpO+8n1xcXFxcXFwiKS5jb25maXJtKChsaXN0LCBpKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVGaWxlKFxcXFxcXFwiaGlrZXI6Ly9maWxlcy95dWVkdS9cXFxcXFxcIiArIG1kNShsaXN0LnVybHNbaV0ubmFtZSkgKyBcXFxcXFxcIi5qc29uXFxcXFxcXCIpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0LnVybHMuc3BsaWNlKGksIDEpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3l1ZWR1L2xpc3QuanNvblxcXFxcXFwiLCBKU09OLnN0cmluZ2lmeShsaXN0KSkgICAgICAgICAgICAgICAgICAgICAgICBcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXFxcbiAgICAgICAgICAgICAgICAgICAgfSwgbGlzdCwgaSlcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09IFxcXFxcXFwi57yW6L6R5ZCN56ewXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcXFxcXCJcXFxcXFxcIikuaW5wdXQoKGxpc3QsIGkpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QudXJsc1tpXS5uYW1lID0gaW5wdXRcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShcXFxcXFxcImhpa2VyOi8vZmlsZXMveXVlZHUvbGlzdC5qc29uXFxcXFxcXCIsIEpTT04uc3RyaW5naWZ5KGxpc3QpKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcXFxuICAgICAgICAgICAgICAgICAgICB9LCBsaXN0LCBpKVxcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT0gXFxcXFxcXCLnvJbovpHlnLDlnYBcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFxcXFxcIlxcXFxcXFwiKS5pbnB1dCgobGlzdCwgaSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC51cmxzW2ldLnVybCA9IGlucHV0XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3l1ZWR1L2xpc3QuanNvblxcXFxcXFwiLCBKU09OLnN0cmluZ2lmeShsaXN0KSlcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXFxcbiAgICAgICAgICAgICAgICAgICAgfSwgbGlzdCwgaSlcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSBmZXRjaChsaXN0LnVybHNbaV0udXJsKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZSh0KVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKFxcXFxcXFwiaGlrZXI6Ly9maWxlcy95dWVkdS9cXFxcXFxcIiArIG1kNShsaXN0LnVybHNbaV0ubmFtZSkgKyBcXFxcXFxcIi5qc29uXFxcXFxcXCIsIHQpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0b2FzdChcXFxcXFxcIuabtOaWsOaIkOWKn1xcXFxcXFwiKVxcXFxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0b2FzdChcXFxcXFxcIuabtOaWsOWksei0pVxcXFxcXFwiKVxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSwgbGlzdCwgaSksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0XzFcXFxcXFxcIlxcXFxuICAgICAgICB9KVxcXFxuICAgIH0pXFxcXG59IGNhdGNoIChlKSB7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IFxcXFxcXFwi6ZSZ6K+v77yaXFxcXFxcXCIgKyBlLm1lc3NhZ2UsXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfY2VudGVyXzFcXFxcXFxcIixcXFxcbiAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIlxcXFxuICAgIH0pXFxcXG59XFxcXG5zZXRSZXN1bHQoZCk7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcInRleHRfMVxcXCIsXFxcIm5hbWVcXFwiOlxcXCLnm67lvZVcXFwiLFxcXCJwYXRoXFxcIjpcXFwibWVudVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkID0gW107XFxcXG52YXIgcmVzID0gZ2V0UmVzQ29kZSgpXFxcXG5sZXQgVG9jID0gTVlfUEFSQU1TLlRvY1xcXFxubGV0IHtcXFxcbiAgICBnZXRBcnJheSxcXFxcbiAgICBnZXRUZXh0LFxcXFxuICAgIGdldFVybDBcXFxcbn0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvY29udmVydGVyXFxcXFxcXCIpO1xcXFxuZ2V0QXJyYXkocmVzLCBUb2MuY2hhcHRlckxpc3QpLmZvckVhY2goaXRlbSA9PiB7XFxcXG4gICAgLy9sb2coaXRlbSk7ICAgIFxcXFxuICAgIHZhciB0aXRsZSA9IGdldFRleHQoaXRlbSwgVG9jLmNoYXB0ZXJOYW1lKVxcXFxuICAgIGlmICh0aXRsZSAhPSBcXFxcXFxcIlxcXFxcXFwiKSB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxcXG4gICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2NvbnRlbnRcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcXFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IE1ZX1BBUkFNUy5jb250ZW50LFxcXFxuICAgICAgICAgICAgICAgIHVybDogZ2V0VXJsMChpdGVtLCBUb2MuY2hhcHRlckxpc3QsIFRvYy5jaGFwdGVyVXJsKSArIFxcXFxcXFwiI2F1dG9QYWdlIyNyZWFkVGhlbWUjXFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSlcXFxcbiAgICB9XFxcXG59KVxcXFxudmFyIGNwID0gZC5tYXAoZnVuY3Rpb24oaXRlbSkge1xcXFxuICAgIHJldHVybiB7XFxcXG4gICAgICAgIFxcXFxcXFwidGl0bGVcXFxcXFxcIjogaXRlbS50aXRsZSxcXFxcbiAgICAgICAgXFxcXFxcXCJ1cmxcXFxcXFxcIjogaXRlbS5leHRyYS51cmwucmVwbGFjZShcXFxcXFxcIiNhdXRvUGFnZSMjcmVhZFRoZW1lI1xcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKVxcXFxuICAgIH1cXFxcbn0pXFxcXG5kLnVuc2hpZnQoe1xcXFxuICAgIHRpdGxlOiBcXFxcXFxcIuS4i+i9vVxcXFxcXFwiLFxcXFxuICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvZG93bmxvYWQudmlldyNub1JlY29yZEhpc3RvcnkjI25vUmVmcmVzaCMjbm9IaXN0b3J5Iz9ydWxlPeacrOWcsOi1hOa6kOeuoeeQhlxcXFxcXFwiLFxcXFxuICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfY2VudGVyXzFcXFxcXFxcIixcXFxcbiAgICBleHRyYToge1xcXFxuICAgICAgICBjaGFwdGVyTGlzdDogY3AsXFxcXG4gICAgICAgIGRlZmF1bHRWaWV3OiBcXFxcXFxcIjFcXFxcXFxcIixcXFxcbiAgICAgICAgaW5mbzoge1xcXFxuICAgICAgICAgICAgYm9va05hbWU6IE1ZX1BBUkFNUy5ib29rTmFtZSxcXFxcbiAgICAgICAgICAgIGJvb2tUb3BQaWM6IE1ZX1BBUkFNUy5jb3ZlcixcXFxcbiAgICAgICAgICAgIHJ1bGVOYW1lOiBcXFxcXFxcIuaCpuivu1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgcGFyc2VDb2RlOiAkLnRvU3RyaW5nKChNWV9QQVJBTVMpID0+IHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgcmVzID0gcmVxdWVzdChpbnB1dCk7XFxcXG4gICAgICAgICAgICAgICAgdmFyIHJ1bGUgPSBNWV9QQVJBTVMuY29udGVudDtcXFxcbiAgICAgICAgICAgICAgICBsZXQgciA9IHJ1bGUuY29udGVudC5yZXBsYWNlKFxcXFxcXFwiQFxcXFxcXFwiLCBcXFxcXFxcIiYmXFxcXFxcXCIpLnJlcGxhY2UoXFxcXFxcXCJ0ZXh0XFxcXFxcXCIsIFxcXFxcXFwiVGV4dFxcXFxcXFwiKS5yZXBsYWNlKC9cXFxcXFxcXC5bMC05XS9nLCBmdW5jdGlvbihhKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLnJlcGxhY2UoXFxcXFxcXCIuXFxcXFxcXCIsIFxcXFxcXFwiLFxcXFxcXFwiKVxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgIGxldCByMSA9IHIuc3BsaXQoXFxcXFxcXCImJlxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgcjIgPSByMS5zbGljZSgwLCByMS5sZW5ndGggLSAxKS5qb2luKFxcXFxcXFwiJiZcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgbGV0IGFyciA9IHBkZmEocmVzLCBcXFxcXFxcImJvZHkmJlxcXFxcXFwiICsgcjIpO1xcXFxuICAgICAgICAgICAgICAgIC8vbG9nKGFycik7XFxcXG4gICAgICAgICAgICAgICAgdmFyIHR0ID0gXFxcXFxcXCJcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGl0IG9mIGFycikge1xcXFxuICAgICAgICAgICAgICAgICAgICBpdCA9IGl0LnJlcGxhY2UobmV3IFJlZ0V4cChcXFxcXFxcIlxcXFxcXFxcblxcXFxcXFwiLCBcXFxcXFxcImdcXFxcXFxcIiksIFxcXFxcXFwiLS1ici0tXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICAvL2xvZyhpdCk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0ID0gcGRmaChpdCwgXFxcXFxcXCJUZXh0XFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICB0ID0gdC5yZXBsYWNlKG5ldyBSZWdFeHAoXFxcXFxcXCItLWJyLS1cXFxcXFxcIiwgXFxcXFxcXCJnXFxcXFxcXCIpLCBcXFxcXFxcIjxicj5cXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ID09IFxcXFxcXFwiXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHQyID0gdC5zcGxpdChcXFxcXFxcIjxicj5cXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGl0MiBvZiB0Mikge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0MiA9PSBcXFxcXFxcIlxcXFxcXFwiIHx8IGl0Mi5sZW5ndGggPT0gMSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWl0Mi5zdGFydHNXaXRoKFxcXFxcXFwi44CAXFxcXFxcXCIpICYmICFpdDIuc3RhcnRzV2l0aChcXFxcXFxcIiZuYnNwOyZuYnNwO1xcXFxcXFwiKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0MiA9IFxcXFxcXFwiJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7XFxcXFxcXCIgKyBpdDIudHJpbSgpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bGUucmVwbGFjZVJlZ2V4KSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQyID0gaXQyLnJlcGxhY2UobmV3IFJlZ0V4cChydWxlLnJlcGxhY2VSZWdleC5yZXBsYWNlKFxcXFxcXFwiIyNcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIiksIFxcXFxcXFwiZ1xcXFxcXFwiKSwgXFxcXFxcXCJcXFxcXFxcIilcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdDIgPT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0dCArPSBpdDIgKyBcXFxcXFxcIlxcXFxcXFxcblxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHR0XFxcXG4gICAgICAgICAgICB9LCBNWV9QQVJBTVMpLFxcXFxuICAgICAgICAgICAgdHlwZTogXFxcXFxcXCJub3ZlbFxcXFxcXFwiXFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG59KVxcXFxuZC51bnNoaWZ0KHtcXFxcbiAgICB0aXRsZTogTVlfUEFSQU1TLmJvb2tOYW1lLFxcXFxuICAgIGltZzogTVlfUEFSQU1TLmNvdmVyLFxcXFxuICAgIHVybDogTVlfVVJMLFxcXFxuICAgIGNvbF90eXBlOiBcXFxcXFxcIm1vdmllXzFfdmVydGljYWxfcGljX2JsdXJcXFxcXFxcIlxcXFxufSlcXFxcbnNldFJlc3VsdChkKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLlhoXlrrlcXFwiLFxcXCJwYXRoXFxcIjpcXFwiY29udGVudFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkID0gW107XFxcXG52YXIgcmVzID0gZ2V0UmVzQ29kZSgpXFxcXG52YXIgcnVsZSA9IE1ZX1BBUkFNUy5jb250ZW50XFxcXG5sZXQgciA9IHJ1bGUuY29udGVudC5yZXBsYWNlKFxcXFxcXFwiQFxcXFxcXFwiLCBcXFxcXFxcIiYmXFxcXFxcXCIpLnJlcGxhY2UoXFxcXFxcXCJ0ZXh0XFxcXFxcXCIsIFxcXFxcXFwiVGV4dFxcXFxcXFwiKS5yZXBsYWNlKC9cXFxcXFxcXC5bMC05XS9nLCBmdW5jdGlvbihhKSB7XFxcXG4gICAgcmV0dXJuIGEucmVwbGFjZShcXFxcXFxcIi5cXFxcXFxcIiwgXFxcXFxcXCIsXFxcXFxcXCIpXFxcXG59KTtcXFxcbmxldCByMSA9IHIuc3BsaXQoXFxcXFxcXCImJlxcXFxcXFwiKTtcXFxcbmxldCByMiA9IHIxLnNsaWNlKDAsIHIxLmxlbmd0aCAtIDEpLmpvaW4oXFxcXFxcXCImJlxcXFxcXFwiKTtcXFxcbmxldCBhcnIgPSBwZGZhKHJlcywgXFxcXFxcXCJib2R5JiZcXFxcXFxcIiArIHIyKTtcXFxcbi8vbG9nKGFycik7XFxcXG5mb3IgKGxldCBpdCBvZiBhcnIpIHtcXFxcbiAgICBpdCA9IGl0LnJlcGxhY2UobmV3IFJlZ0V4cChcXFxcXFxcIlxcXFxcXFxcblxcXFxcXFwiLCBcXFxcXFxcImdcXFxcXFxcIiksIFxcXFxcXFwiLS1ici0tXFxcXFxcXCIpO1xcXFxuICAgIC8vbG9nKGl0KTtcXFxcbiAgICB2YXIgdCA9IHBkZmgoaXQsIFxcXFxcXFwiVGV4dFxcXFxcXFwiKTtcXFxcbiAgICB0ID0gdC5yZXBsYWNlKG5ldyBSZWdFeHAoXFxcXFxcXCItLWJyLS1cXFxcXFxcIiwgXFxcXFxcXCJnXFxcXFxcXCIpLCBcXFxcXFxcIjxicj5cXFxcXFxcIik7XFxcXG4gICAgaWYgKHQgPT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgICAgICBjb250aW51ZVxcXFxuICAgIH1cXFxcbiAgICBsZXQgdDIgPSB0LnNwbGl0KFxcXFxcXFwiPGJyPlxcXFxcXFwiKTtcXFxcbiAgICBmb3IgKGxldCBpdDIgb2YgdDIpIHtcXFxcbiAgICAgICAgaWYgKGl0MiA9PSBcXFxcXFxcIlxcXFxcXFwiIHx8IGl0Mi5sZW5ndGggPT0gMSkge1xcXFxuICAgICAgICAgICAgY29udGludWVcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpZiAoIWl0Mi5zdGFydHNXaXRoKFxcXFxcXFwi44CAXFxcXFxcXCIpICYmICFpdDIuc3RhcnRzV2l0aChcXFxcXFxcIiZuYnNwOyZuYnNwO1xcXFxcXFwiKSkge1xcXFxuICAgICAgICAgICAgaXQyID0gXFxcXFxcXCImbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtcXFxcXFxcIiArIGl0Mi50cmltKCk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgaWYgKHJ1bGUucmVwbGFjZVJlZ2V4KSB7XFxcXG4gICAgICAgICAgICBpdDIgPSBpdDIucmVwbGFjZShuZXcgUmVnRXhwKHJ1bGUucmVwbGFjZVJlZ2V4LnJlcGxhY2UoXFxcXFxcXCIjI1xcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKSwgXFxcXFxcXCJnXFxcXFxcXCIpLCBcXFxcXFxcIlxcXFxcXFwiKVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGlmIChpdDIgPT0gXFxcXFxcXCJcXFxcXFxcIiB8fCBpdDIgPT0gXFxcXFxcXCImbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgY29udGludWVcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGl0MixcXFxcbiAgICAgICAgICAgIHVybDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInJpY2hfdGV4dFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZGVzYzogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHBpY191cmw6IFxcXFxcXFwiXFxcXFxcXCJcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfVxcXFxufVxcXFxuZC51bnNoaWZ0KHtcXFxcbiAgICB0aXRsZTogXFxcXFxcXCI8YmlnPlxcXFxcXFwiICsgTVlfUEFSQU1TLnRpdGxlICsgXFxcXFxcXCI8L2JpZz5cXFxcXFxcIixcXFxcbiAgICBjb2xfdHlwZTogXFxcXFxcXCJyaWNoX3RleHRcXFxcXFxcIlxcXFxufSlcXFxcbnNldFJlc3VsdChkKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfMV92ZXJ0aWNhbF9waWNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5pCc57SiXFxcIixcXFwicGF0aFxcXCI6XFxcInNlYXJjaFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbmxldCB7XFxcXG4gICAgc2VhcmNoXFxcXG59ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3NzXFxcXFxcXCIpO1xcXFxubGV0IGQgPSBbXTtcXFxcbmxldCBrdyA9IGdldFBhcmFtKFxcXFxcXFwia3dcXFxcXFxcIik7XFxcXG5sZXQgcyA9IGt3O1xcXFxuc2V0UGFnZVRpdGxlKFxcXFxcXFwi5pCc57SiXFxcXFxcXCIgKyBrdyArIFxcXFxcXFwiIFxcXFxcXFwiICsgTVlfUEFSQU1TLmJvb2tTb3VyY2VOYW1lKTtcXFxcbmxldCBtYXRjaE11c3QgPSBnZXRJdGVtKFxcXFxcXFwibW1cXFxcXFxcIiwgXFxcXFxcXCIwXFxcXFxcXCIpO1xcXFxubGV0IHRpcCA9IFxcXFxcXFwi57K+56Gu5Yy56YWN77yaXFxcXFxcXCIgKyAobWF0Y2hNdXN0ID09IFxcXFxcXFwiMVxcXFxcXFwiID8gXFxcXFxcXCLmmK9cXFxcXFxcIiA6IFxcXFxcXFwi5ZCmXFxcXFxcXCIpO1xcXFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiB0aXAsXFxcXG4gICAgICAgIHVybDogJChcXFxcXFxcIiNub0xvYWRpbmcjXFxcXFxcXCIpLmxhenlSdWxlKCgpID0+IHtcXFxcbiAgICAgICAgICAgIHNldEl0ZW0oXFxcXFxcXCJtbVxcXFxcXFwiLCBnZXRJdGVtKFxcXFxcXFwibW1cXFxcXFxcIiwgXFxcXFxcXCIwXFxcXFxcXCIpID09IFxcXFxcXFwiMFxcXFxcXFwiID8gXFxcXFxcXCIxXFxcXFxcXCIgOiBcXFxcXFxcIjBcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly9PS1xcXFxcXFwiO1xcXFxuICAgICAgICB9KSxcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF8xXFxcXFxcXCIsXFxcXG4gICAgfSk7XFxcXG59XFxcXG5sZXQgZDIgPSBzZWFyY2goTVlfUEFSQU1TLnJ1bGVzLCBrdywgTVlfUEFHRSk7XFxcXG5mb3IgKGxldCBpdCBvZiBkMikge1xcXFxuICAgIGlmIChtYXRjaE11c3QgPT0gXFxcXFxcXCIwXFxcXFxcXCIgfHwgKGl0LnRpdGxlICYmIGl0LnRpdGxlLmluZGV4T2Yoa3cpID49IDApKSB7XFxcXG4gICAgICAgIGl0LnRpdGxlID0gaXQudGl0bGUuaW5jbHVkZXMoXFxcXFxcXCLigJzigJzigJ3igJ1cXFxcXFxcIikgPyBpdC50aXRsZSA6IFxcXFxcXFwi4oCc4oCc4oCd4oCdXFxcXFxcXCIgKyBpdC50aXRsZS5yZXBsYWNlKG5ldyBSZWdFeHAoXFxcXFxcXCI8ZW0+fDwvZW0+XFxcXFxcXCIsIFxcXFxcXFwiZ1xcXFxcXFwiKSwgXFxcXFxcXCJcXFxcXFxcIikucmVwbGFjZShuZXcgUmVnRXhwKHMsIFxcXFxcXFwiZ1xcXFxcXFwiKSwgXFxcXFxcXCI8c3Ryb25nPjxzcGFuIHN0eWxlPVxcXFxcXFxcXFxcXFxcXCJjb2xvcjogIzFFOTBGRlxcXFxcXFxcXFxcXFxcXCI+XFxcXFxcXCIgKyBzICsgXFxcXFxcXCI8L3NwYW4+PC9zdHJvbmc+XFxcXFxcXCIpXFxcXG4gICAgICAgIGQucHVzaChpdCk7XFxcXG4gICAgfVxcXFxufVxcXFxuXFxcXG5zZXRSZXN1bHQoZCk7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6L2s5o2iXFxcIixcXFwicGF0aFxcXCI6XFxcImNvbnZlcnRlclxcXCIsXFxcInJ1bGVcXFwiOlxcXCIkLmV4cG9ydHMgPSB7XFxcXG4gICAgZ2V0QXJyYXk6IChodG1sLCBydWxlKSA9PiB7XFxcXG4gICAgICAgIGxldCByMSA9IHJ1bGUuc3BsaXQoXFxcXFxcXCIhXFxcXFxcXCIpWzBdLnNwbGl0KFxcXFxcXFwifHxcXFxcXFxcIik7XFxcXG4gICAgICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFxcXFxcXFwiYm9keSYmXFxcXFxcXCIgKyByMVswXS5yZXBsYWNlKFxcXFxcXFwiIFxcXFxcXFwiLCBcXFxcXFxcIiYmXFxcXFxcXCIpLnJlcGxhY2UoXFxcXFxcXCJAXFxcXFxcXCIsIFxcXFxcXFwiJiZcXFxcXFxcIikpO1xcXFxuICAgICAgICBpZiAocjEubGVuZ3RoID4gMSkge1xcXFxuICAgICAgICAgICAgbGV0IHIyID0gcjFbMV0uc3BsaXQoXFxcXFxcXCI6XFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgbGV0IHIzID0gW107XFxcXG4gICAgICAgICAgICBmb3IgKGxldCBpdCBvZiByMikge1xcXFxuICAgICAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCBpID0gcGFyc2VJbnQoaXQpO1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4oaSkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIHIzLnB1c2goaSk7XFxcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGxldCBhcnIyID0gW107XFxcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xcXFxuICAgICAgICAgICAgICAgIGlmIChyMy5pbmRleE9mKGkpIDwgMCkge1xcXFxuICAgICAgICAgICAgICAgICAgICBhcnIyLnB1c2goYXJyW2ldKTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICByZXR1cm4gYXJyMjtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBsb2coXFxcXFxcXCLojrflj5blpLHotKXvvIzlpLHotKXlrprkvY3vvJpcXFxcXFxcIiArIHIxWzBdLnJlcGxhY2UoXFxcXFxcXCIgXFxcXFxcXCIsIFxcXFxcXFwiJiZcXFxcXFxcIikucmVwbGFjZShcXFxcXFxcIkBcXFxcXFxcIiwgXFxcXFxcXCImJlxcXFxcXFwiKSlcXFxcbiAgICAgICAgcmV0dXJuIGFycjtcXFxcbiAgICB9LFxcXFxuICAgIGdldFRleHQ6IChodG1sLCBydWxlKSA9PiB7XFxcXG4gICAgICAgIHZhciBydSA9IHJ1bGUucmVwbGFjZShcXFxcXFxcIkBcXFxcXFxcIiwgXFxcXFxcXCImJlxcXFxcXFwiKS5yZXBsYWNlKFxcXFxcXFwidGV4dFxcXFxcXFwiLCBcXFxcXFxcIlRleHRcXFxcXFxcIikucmVwbGFjZSgvXFxcXFxcXFwuWzAtOV0vZywgZnVuY3Rpb24oYSkge1xcXFxuICAgICAgICAgICAgcmV0dXJuIGEucmVwbGFjZShcXFxcXFxcIi5cXFxcXFxcIiwgXFxcXFxcXCIsXFxcXFxcXCIpXFxcXG4gICAgICAgIH0pLnNwbGl0KFxcXFxcXFwiIyNcXFxcXFxcIilcXFxcbiAgICAgICAgaWYgKHJ1Lmxlbmd0aCA9PSAxKSB7XFxcXG4gICAgICAgICAgICB2YXIgciA9IHBkZmgoaHRtbCwgcnVbMF0pXFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICB2YXIgciA9IHBkZmgoaHRtbCwgcnVbMF0pLnJlcGxhY2UobmV3IFJlZ0V4cChydVsxXSwgXFxcXFxcXCJnXFxcXFxcXCIpLCBcXFxcXFxcIlxcXFxcXFwiKVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGlmIChyID09IFxcXFxcXFwiXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgIGxvZyhcXFxcXFxcIui/lOWbnuS4uuepuu+8jOWPr+iDveaYr+WumuS9jeWksei0pe+8mlxcXFxcXFwiICsgcnVsZS5yZXBsYWNlKFxcXFxcXFwiQFxcXFxcXFwiLCBcXFxcXFxcIiYmXFxcXFxcXCIpLnJlcGxhY2UoXFxcXFxcXCJ0ZXh0XFxcXFxcXCIsIFxcXFxcXFwiVGV4dFxcXFxcXFwiKS5yZXBsYWNlKC9cXFxcXFxcXC5bMC05XS9nLCBmdW5jdGlvbihhKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGEucmVwbGFjZShcXFxcXFxcIi5cXFxcXFxcIiwgXFxcXFxcXCIsXFxcXFxcXCIpXFxcXG4gICAgICAgICAgICB9KS5zcGxpdChcXFxcXFxcIiMjXFxcXFxcXCIpWzBdKVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHJldHVybiByXFxcXG4gICAgfSxcXFxcbiAgICBnZXRVcmwwOiAoaHRtbCwgcGFyZW50UnVsZSwgcnVsZSkgPT4ge1xcXFxuICAgICAgICBpZiAocGFyZW50UnVsZSAhPSBudWxsKSB7XFxcXG4gICAgICAgICAgICBwYXJlbnRSdWxlID0gcGFyZW50UnVsZS5zcGxpdChcXFxcXFxcIiFcXFxcXFxcIilbMF07XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgbGV0IHAgPSBwYXJlbnRSdWxlICE9IG51bGwgJiYgcGFyZW50UnVsZVtwYXJlbnRSdWxlLmxlbmd0aCAtIDFdID09IFxcXFxcXFwiYVxcXFxcXFwiID8gXFxcXFxcXCJhJiZcXFxcXFxcIiA6IFxcXFxcXFwiXFxcXFxcXCI7XFxcXG4gICAgICAgIGxldCByID0gcGQoaHRtbCwgcCArIHJ1bGUucmVwbGFjZShcXFxcXFxcIkBcXFxcXFxcIiwgXFxcXFxcXCImJlxcXFxcXFwiKS5yZXBsYWNlKFxcXFxcXFwidGV4dFxcXFxcXFwiLCBcXFxcXFxcIlRleHRcXFxcXFxcIikucmVwbGFjZSgvXFxcXFxcXFwuWzAtOV0vZywgZnVuY3Rpb24oYSkge1xcXFxuICAgICAgICAgICAgcmV0dXJuIGEucmVwbGFjZShcXFxcXFxcIi5cXFxcXFxcIiwgXFxcXFxcXCIsXFxcXFxcXCIpO1xcXFxuICAgICAgICB9KS5zcGxpdChcXFxcXFxcIiMjXFxcXFxcXCIpWzBdLnNwbGl0KFxcXFxcXFwiIyNcXFxcXFxcIilbMF0pO1xcXFxuICAgICAgICBpZiAociA9PSBcXFxcXFxcIlxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICBsb2coXFxcXFxcXCLov5Tlm57kuLrnqbrvvIzlj6/og73mmK/lrprkvY3lpLHotKXvvJpcXFxcXFxcIiArIHAgKyBydWxlLnJlcGxhY2UoXFxcXFxcXCJAXFxcXFxcXCIsIFxcXFxcXFwiJiZcXFxcXFxcIikucmVwbGFjZShcXFxcXFxcInRleHRcXFxcXFxcIiwgXFxcXFxcXCJUZXh0XFxcXFxcXCIpLnJlcGxhY2UoL1xcXFxcXFxcLlswLTldL2csIGZ1bmN0aW9uKGEpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5yZXBsYWNlKFxcXFxcXFwiLlxcXFxcXFwiLCBcXFxcXFxcIixcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICB9KS5zcGxpdChcXFxcXFxcIiMjXFxcXFxcXCIpWzBdKVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHJldHVybiByXFxcXG4gICAgfVxcXFxufVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuiBmuaQnFxcXCIsXFxcInBhdGhcXFwiOlxcXCJqdVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkID0gW107XFxcXG5sZXQge1xcXFxuICAgIHNlYXJjaCxcXFxcbiAgICBsaXN0UnVsZXNcXFxcbn0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2Uvc3NcXFxcXFxcIik7XFxcXG5sZXQge1xcXFxuICAgIGFsbCxcXFxcbiAgICB1c2UsXFxcXG4gICAgZGF0YVxcXFxufSA9IGxpc3RSdWxlcyhNWV9QQUdFKTtcXFxcbmRhdGEgPSBkYXRhIHx8IFtdO1xcXFxubGV0IHMgPSBnZXRQYXJhbShcXFxcXFxcImt3XFxcXFxcXCIpO1xcXFxuc2V0UGFnZVRpdGxlKFxcXFxcXFwi5pCc57SiXFxcXFxcXCIgKyBzKTtcXFxcbmxldCBtYXRjaE11c3QgPSBnZXRJdGVtKFxcXFxcXFwibW1cXFxcXFxcIiwgXFxcXFxcXCIwXFxcXFxcXCIpO1xcXFxubGV0IHRpcCA9IFxcXFxcXFwi5pCc57Si5rqQ77yaXFxcXFxcXCIgKyB1c2UgKyBcXFxcXFxcIi9cXFxcXFxcIiArIGFsbCArIFxcXFxcXFwiICDnsr7noa7ljLnphY3vvJpcXFxcXFxcIiArIChtYXRjaE11c3QgPT0gXFxcXFxcXCIxXFxcXFxcXCIgPyBcXFxcXFxcIuaYr1xcXFxcXFwiIDogXFxcXFxcXCLlkKZcXFxcXFxcIik7XFxcXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IHRpcCxcXFxcbiAgICAgICAgdXJsOiAkKFxcXFxcXFwiI25vTG9hZGluZyNcXFxcXFxcIikubGF6eVJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICAgICAgc2V0SXRlbShcXFxcXFxcIm1tXFxcXFxcXCIsIGdldEl0ZW0oXFxcXFxcXCJtbVxcXFxcXFwiLCBcXFxcXFxcIjBcXFxcXFxcIikgPT0gXFxcXFxcXCIwXFxcXFxcXCIgPyBcXFxcXFxcIjFcXFxcXFxcIiA6IFxcXFxcXFwiMFxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL09LXFxcXFxcXCI7XFxcXG4gICAgICAgIH0pLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0XzFcXFxcXFxcIixcXFxcbiAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgIGlkOiBcXFxcXFxcInl1ZWR1LXMtaFxcXFxcXFwiXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KTtcXFxcbn0gZWxzZSBpZiAoZGF0YS5sZW5ndGggPiAwKSB7XFxcXG4gICAgdXBkYXRlSXRlbShcXFxcXFxcInl1ZWR1LXMtaFxcXFxcXFwiLCB7XFxcXG4gICAgICAgIHRpdGxlOiB0aXBcXFxcbiAgICB9KTtcXFxcbn1cXFxcbmxldCBwID0gTVlfUEFHRTtcXFxcbmxldCBwYWdlaWQgPSBcXFxcXFxcInl1ZWR1LXBhZ2VcXFxcXFxcIiArIE1ZX1BBR0U7XFxcXG5pZiAoZGF0YS5sZW5ndGggPiAwKSB7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IFxcXFxcXFwi5Yqg6L2956ysXFxcXFxcXCIgKyBNWV9QQUdFICsgXFxcXFxcXCLpobXkuK3vvIzov5vluqbvvJoxL1xcXFxcXFwiICsgZGF0YS5sZW5ndGgsXFxcXG4gICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCIsXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfY2VudGVyXzFcXFxcXFxcIixcXFxcbiAgICAgICAgZGVzYzogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgcGljX3VybDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgIGlkOiBwYWdlaWRcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pO1xcXFxufVxcXFxuc2V0UmVzdWx0KGQpO1xcXFxuaWYgKGRhdGEubGVuZ3RoID4gMCkge1xcXFxuICAgIC8v5aSa57q/56iL5Yqg6L29XFxcXG4gICAgbGV0IHRhc2tzID0gZGF0YS5tYXAoaXQgPT4ge1xcXFxuICAgICAgICByZXR1cm4ge1xcXFxuICAgICAgICAgICAgZnVuYzogZnVuY3Rpb24ocnVsZSkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBzZWFyY2gocnVsZSwgcywgMSk7XFxcXG4gICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgcGFyYW06IGl0LFxcXFxuICAgICAgICAgICAgaWQ6IFxcXFxcXFwicnVsZUBcXFxcXFxcIiArIGl0Lm5hbWVcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pO1xcXFxuXFxcXG4gICAgYmF0Y2hFeGVjdXRlKHRhc2tzLCB7XFxcXG4gICAgICAgIGZ1bmM6IGZ1bmN0aW9uKHBhcmFtLCBpZCwgZXJyb3IsIHJlc3VsdCkge1xcXFxuICAgICAgICAgICAgLy9sb2coXFxcXFxcXCJsaXN0ZW5lcjogXFxcXFxcXCIgKyAocmVzdWx0IHx8IFtdKS5sZW5ndGgpXFxcXG4gICAgICAgICAgICBwYXJhbS5pID0gcGFyYW0uaSArIDE7XFxcXG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XFxcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaXQgb2YgcmVzdWx0KSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS5qID0gcGFyYW0uaiArIDE7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hNdXN0ID09IFxcXFxcXFwiMVxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpdC50aXRsZSB8fCAhaXQudGl0bGUuaW5jbHVkZXMocykpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGV4dHJhID0gaXQuZXh0cmEgfHwge307XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYS5pZCA9IFxcXFxcXFwiX19hcHBcXFxcXFxcIiArIE1ZX1BBR0UgKyBcXFxcXFxcIkBcXFxcXFxcIiArIHBhcmFtLmo7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYS5ib29rTmFtZSA9IGl0LnRpdGxlXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYS5jb3ZlciA9IGl0LnBpY191cmwgfHwgaXQuaW1nXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRJdGVtQmVmb3JlKHBhZ2VpZCwge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdC50aXRsZS5pbmNsdWRlcyhcXFxcXFxcIuKAnOKAnOKAneKAnVxcXFxcXFwiKSA/IGl0LnRpdGxlIDogXFxcXFxcXCLigJzigJzigJ3igJ1cXFxcXFxcIiArIGl0LnRpdGxlLnJlcGxhY2UobmV3IFJlZ0V4cChcXFxcXFxcIjxlbT58PC9lbT5cXFxcXFxcIiwgXFxcXFxcXCJnXFxcXFxcXCIpLCBcXFxcXFxcIlxcXFxcXFwiKS5yZXBsYWNlKG5ldyBSZWdFeHAocywgXFxcXFxcXCJnXFxcXFxcXCIpLCBcXFxcXFxcIjxzdHJvbmc+PHNwYW4gc3R5bGU9XFxcXFxcXFxcXFxcXFxcImNvbG9yOiAjMUU5MEZGXFxcXFxcXFxcXFxcXFxcIj5cXFxcXFxcIiArIHMgKyBcXFxcXFxcIjwvc3Bhbj48L3N0cm9uZz5cXFxcXFxcIiksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogaXQuZGVzYyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGl0LnVybCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBpdC5waWNfdXJsIHx8IGl0LmltZyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogaXQucGljX3VybCB8fCBpdC5pbWcgPyAnbW92aWVfMV92ZXJ0aWNhbF9waWMnIDogXFxcXFxcXCJ0ZXh0XzFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYTogZXh0cmFcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcXFxuXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBpZiAocGFyYW0uaSA+PSBwYXJhbS5hbGwpIHtcXFxcbiAgICAgICAgICAgICAgICBkZWxldGVJdGVtKHBhZ2VpZClcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgdXBkYXRlSXRlbSh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuWKoOi9veesrFxcXFxcXFwiICsgTVlfUEFHRSArIFxcXFxcXFwi6aG15Lit77yM6L+b5bqm77yaXFxcXFxcXCIgKyAocGFyYW0uaSArIDEpICsgXFxcXFxcXCIvXFxcXFxcXCIgKyBwYXJhbS5hbGwsXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfY2VudGVyXzFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgcGljX3VybDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBwYWdlaWRcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIHBhcmFtOiB7XFxcXG4gICAgICAgICAgICBhbGw6IGRhdGEubGVuZ3RoLFxcXFxuICAgICAgICAgICAgaTogMCxcXFxcbiAgICAgICAgICAgIGo6IC0xXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KTtcXFxcbn1cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLmkJzntKLovoXliqlcXFwiLFxcXCJwYXRoXFxcIjpcXFwic3NcXFwiLFxcXCJydWxlXFxcIjpcXFwiJC5leHBvcnRzID0ge1xcXFxuICAgIHNlYXJjaDogKHJ1bGUsIGt3LCBwYWdlKSA9PiB7XFxcXG4gICAgICAgIGxldCBkID0gW107XFxcXG4gICAgICAgIGxldCBtID0gcnVsZS5ydWxlU2VhcmNoXFxcXG4gICAgICAgIC8vIOmYheivuz0+6KeG55WMXFxcXG4gICAgICAgIGxldCB1ID0gcnVsZS5ib29rU291cmNlVXJsICsgcnVsZS5zZWFyY2hVcmw7XFxcXG4gICAgICAgIGxldCB1cmwgPSB1LnJlcGxhY2UoXFxcXFxcXCJ7e3BhZ2V9fVxcXFxcXFwiLCBwYWdlKS5yZXBsYWNlKFxcXFxcXFwie3trZXl9fVxcXFxcXFwiLCBrdylcXFxcbiAgICAgICAgbGV0IGxpc3RydWxlID0gXFxcXFxcXCJib2R5JiZcXFxcXFxcIiArIG0uYm9va0xpc3QucmVwbGFjZSgvIVswLTldL2csIFxcXFxcXFwiXFxcXFxcXCIpLnJlcGxhY2UoXFxcXFxcXCIgXFxcXFxcXCIsIFxcXFxcXFwiJiZcXFxcXFxcIikuc3BsaXQoXFxcXFxcXCJ8fFxcXFxcXFwiKVswXVxcXFxuICAgICAgICBsZXQgYXV0aG9yID0gbS5hdXRob3IucmVwbGFjZShcXFxcXFxcIkBcXFxcXFxcIiwgXFxcXFxcXCImJlxcXFxcXFwiKS5yZXBsYWNlKFxcXFxcXFwidGV4dFxcXFxcXFwiLCBcXFxcXFxcIlRleHRcXFxcXFxcIikucmVwbGFjZSgvXFxcXFxcXFwuWzAtOV0vZywgZnVuY3Rpb24oYSkge1xcXFxuICAgICAgICAgICAgcmV0dXJuIGEucmVwbGFjZShcXFxcXFxcIi5cXFxcXFxcIiwgXFxcXFxcXCIsXFxcXFxcXCIpXFxcXG4gICAgICAgIH0pXFxcXG4gICAgICAgIGxldCBjb3ZlciA9IG0uY292ZXJVcmwucmVwbGFjZShcXFxcXFxcIkBcXFxcXFxcIiwgXFxcXFxcXCImJlxcXFxcXFwiKS5yZXBsYWNlKC9cXFxcXFxcXC5bMC05XS9nLCBmdW5jdGlvbihhKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gYS5yZXBsYWNlKFxcXFxcXFwiLlxcXFxcXFwiLCBcXFxcXFxcIixcXFxcXFxcIilcXFxcbiAgICAgICAgfSlcXFxcbiAgICAgICAgbGV0IG5hbWUgPSBtLm5hbWUucmVwbGFjZShcXFxcXFxcIkBcXFxcXFxcIiwgXFxcXFxcXCImJlxcXFxcXFwiKS5yZXBsYWNlKFxcXFxcXFwidGV4dFxcXFxcXFwiLCBcXFxcXFxcIlRleHRcXFxcXFxcIikucmVwbGFjZSgvXFxcXFxcXFwuWzAtOV0vZywgZnVuY3Rpb24oYSkge1xcXFxuICAgICAgICAgICAgcmV0dXJuIGEucmVwbGFjZShcXFxcXFxcIi5cXFxcXFxcIiwgXFxcXFxcXCIsXFxcXFxcXCIpXFxcXG4gICAgICAgIH0pXFxcXG4gICAgICAgIGxldCBib29rdXJsID0gbS5ib29rVXJsLnJlcGxhY2UoXFxcXFxcXCJAXFxcXFxcXCIsIFxcXFxcXFwiJiZcXFxcXFxcIikucmVwbGFjZSgvXFxcXFxcXFwuWzAtOV0vZywgZnVuY3Rpb24oYSkge1xcXFxuICAgICAgICAgICAgcmV0dXJuIGEucmVwbGFjZShcXFxcXFxcIi5cXFxcXFxcIiwgXFxcXFxcXCIsXFxcXFxcXCIpXFxcXG4gICAgICAgIH0pXFxcXG4gICAgICAgIGxldCBpbnRybyA9IG0uaW50cm8ucmVwbGFjZShcXFxcXFxcIkBcXFxcXFxcIiwgXFxcXFxcXCImJlxcXFxcXFwiKS5yZXBsYWNlKFxcXFxcXFwidGV4dFxcXFxcXFwiLCBcXFxcXFxcIlRleHRcXFxcXFxcIikucmVwbGFjZSgvXFxcXFxcXFwuWzAtOV0vZywgZnVuY3Rpb24oYSkge1xcXFxuICAgICAgICAgICAgcmV0dXJuIGEucmVwbGFjZShcXFxcXFxcIi5cXFxcXFxcIiwgXFxcXFxcXCIsXFxcXFxcXCIpXFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICAvL3NldFBhZ2VUaXRsZShcXFxcXFxcIuaQnOe0olxcXFxcXFwiICsgZ2V0UGFyYW0oXFxcXFxcXCJrd1xcXFxcXFwiKSArIFxcXFxcXFwiIFxcXFxcXFwiICsgTVlfUEFSQU1TLmJvb2tTb3VyY2VOYW1lKTtcXFxcbiAgICAgICAgLy9NWV9VUkwgPSB1cmw7XFxcXG4gICAgICAgIGxldCByZXMgPSByZXF1ZXN0KHVybClcXFxcbiAgICAgICAgbGV0IGxpc3QgPSBwZGZhKHJlcywgbGlzdHJ1bGUpXFxcXG4gICAgICAgIGxpc3QuZm9yRWFjaChpdGVtID0+IHtcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHBhcnNlRG9tRm9ySHRtbChpdGVtLCBuYW1lKSxcXFxcbiAgICAgICAgICAgICAgICBpbWc6IHBhcnNlRG9tKGl0ZW0sIGNvdmVyLCB1cmwpLFxcXFxuICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvbWVudT91cmw9XFxcXFxcXCIgKyBwYXJzZURvbShpdGVtLCBib29rdXJsLCB1cmwpICsgXFxcXFxcXCIjYXV0b0NhY2hlIyNpbW1lcnNpdmVUaGVtZSNcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBkZXNjOiBydWxlLmJvb2tTb3VyY2VOYW1lICsgXFxcXFxcXCJcXFxcXFxcXG5cXFxcXFxcIiArIHBhcnNlRG9tRm9ySHRtbChpdGVtLCBhdXRob3IpICsgXFxcXFxcXCJcXFxcXFxcXG5cXFxcXFxcIiArIHBhcnNlRG9tRm9ySHRtbChpdGVtLCBpbnRybyksXFxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJUb2NcXFxcXFxcIjogcnVsZS5ydWxlVG9jLFxcXFxuICAgICAgICAgICAgICAgICAgICBcXFxcXFxcImNvbnRlbnRcXFxcXFxcIjogcnVsZS5ydWxlQ29udGVudCxcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJib29rTmFtZVxcXFxcXFwiOiBwYXJzZURvbUZvckh0bWwoaXRlbSwgbmFtZSksXFxcXG4gICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiY292ZXJcXFxcXFxcIjogcGFyc2VEb20oaXRlbSwgY292ZXIsIHVybClcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgcmV0dXJuIGQ7XFxcXG4gICAgfSxcXFxcbiAgICBsaXN0UnVsZXM6IChwYWdlLCBydWxlKSA9PiB7XFxcXG4gICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAvL+W5tuWPkeaVsOmHj1xcXFxuICAgICAgICAgICAgbGV0IHNpemUgPSAxMDtcXFxcbiAgICAgICAgICAgIGxldCBkYXRhMSA9IEpTT04ucGFyc2UoZmV0Y2goXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3l1ZWR1L2xpc3QuanNvblxcXFxcXFwiKSlcXFxcbiAgICAgICAgICAgIGxldCBsaXN0ID0gSlNPTi5wYXJzZShmZXRjaChcXFxcXFxcImhpa2VyOi8vZmlsZXMveXVlZHUvXFxcXFxcXCIgKyBtZDUoZ2V0TXlWYXIoXFxcXFxcXCJ0YWJcXFxcXFxcIiwgZGF0YTEudXJsc1swXS5uYW1lKSkgKyBcXFxcXFxcIi5qc29uXFxcXFxcXCIpKVxcXFxuICAgICAgICAgICAgbGV0IHJ1bGVzID0gW107XFxcXG4gICAgICAgICAgICBsaXN0LmZvckVhY2goaXRlbSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHMgPSBKU09OLnN0cmluZ2lmeShpdGVtKVxcXFxuICAgICAgICAgICAgICAgIGlmIChzLmluY2x1ZGVzKFxcXFxcXFwiPGpzPlxcXFxcXFwiKSB8fCBzLmluY2x1ZGVzKFxcXFxcXFwiQGpzOlxcXFxcXFwiKSB8fCBzLmluY2x1ZGVzKFxcXFxcXFwiJC5cXFxcXFxcIikgfHwgcy5pbmNsdWRlcyhcXFxcXFxcIvCflJ5cXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcnVsZXMucHVzaChpdGVtKTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIGlmICghcGFnZSAmJiAhcnVsZSkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBydWxlcy5tYXAoaXQgPT4gaXQubmFtZSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBpZiAocnVsZSAhPSBudWxsKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJ1bGVzLmZpbHRlcihpID0+IGkubmFtZSA9PSBydWxlKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGxldCBzdGFydCA9IChwYWdlIC0gMSkgKiBzaXplO1xcXFxuICAgICAgICAgICAgaWYgKHJ1bGVzLmxlbmd0aCA8IHN0YXJ0ICsgMSkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGxldCBsZW4gPSBzaXplO1xcXFxuICAgICAgICAgICAgaWYgKHJ1bGVzLmxlbmd0aCA8IHBhZ2UgKiBzaXplKSB7XFxcXG4gICAgICAgICAgICAgICAgbGVuID0gcnVsZXMubGVuZ3RoIC0gc3RhcnRcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGxldCBhbGwgPSBydWxlcy5sZW5ndGg7XFxcXG4gICAgICAgICAgICBsZXQgdXNlID0gKHBhZ2UgLSAxKSAqIHNpemUgKyBsZW47XFxcXG4gICAgICAgICAgICByZXR1cm4ge1xcXFxuICAgICAgICAgICAgICAgIGFsbDogYWxsLFxcXFxuICAgICAgICAgICAgICAgIHVzZTogdXNlLFxcXFxuICAgICAgICAgICAgICAgIGRhdGE6IHJ1bGVzLnNsaWNlKHN0YXJ0LCBzdGFydCArIGxlbilcXFxcbiAgICAgICAgICAgIH07XFxcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiB7XFxcXG4gICAgICAgICAgICAgICAgYWxsOiAwLFxcXFxuICAgICAgICAgICAgICAgIHVzZTogMCxcXFxcbiAgICAgICAgICAgICAgICBkYXRhOiBbXVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxufVxcXCJ9XVwiLFwicHJveHlcIjpcIlwifSIsInRpdGxlIjoi4pqZ77iP6K6+572uIn0=
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement