xiaomianao666

邀您一起看:规则编辑

Feb 27th, 2024
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥规则编辑@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImdtdE1vZGlmaWVkXCI6MCxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuKTgeWIl+ihqEFQSVwiLFwicGF0aFwiOlwiUXVhcmtTaGFyZUFwaVwiLFwicnVsZVwiOlwianM6XFxuLy9AYXV0aG9yIExveURnSWtcXG5sZXQgaHR0cFJlcXVlc3QgPSAkLnJlcXVpcmUoXFxcImh0dHBSZXF1ZXN0XFxcIik7XFxuY29uc3QgYmFzZVVybCA9IFxcXCJodHRwczovL3Bhbi5xdWFyay5jblxcXCI7XFxuXFxuZnVuY3Rpb24gUXVhcmtTaGFyZUFwaShzaGFyZUlkLCBzaGFyZVB3ZCkge1xcbiAgICB0aGlzLnNoYXJlSWQgPSBzaGFyZUlkO1xcbiAgICB0aGlzLnNoYXJlUHdkID0gc2hhcmVQd2Q7XFxuICAgIHRoaXMucmVmcmVzaENhbGxCYWNrID0gKCgpID0+IHZvaWQgMCk7XFxuICAgIC8vdGhpcy5zaGFyZVRva2VuID0gc2hhcmVUb2tlbiB8fCB0aGlzLmdldFNoYXJlVG9rZW4oKTtcXG59XFxuT2JqZWN0LmFzc2lnbihRdWFya1NoYXJlQXBpLnByb3RvdHlwZSwge1xcbiAgICBzZXRSZWZyZXNoKHJlZnJlc2hDYWxsQmFjaykge1xcbiAgICAgICAgdGhpcy5yZWZyZXNoQ2FsbEJhY2sgPSByZWZyZXNoQ2FsbEJhY2s7XFxuICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgfSxcXG4gICAgc2V0VG9rZW4oc2hhcmVUb2tlbikge1xcbiAgICAgICAgdGhpcy5zaGFyZVRva2VuID0gc2hhcmVUb2tlbjtcXG4gICAgICAgIHJldHVybiB0aGlzO1xcbiAgICB9LFxcbiAgICByZXF1ZXN0SHR0cChhcGkpIHtcXG4gICAgICAgIHJldHVybiBuZXcgaHR0cFJlcXVlc3QoYmFzZVVybCthcGkpLnN1Y2Nlc3MoKGJvZHkpID0+IHtcXG4gICAgICAgICAgICBpZiAoYm9keS5zdGF0dXMgIT09IDIwMCkge1xcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYm9keS5tZXNzYWdlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGJvZHk7XFxuICAgICAgICB9KTtcXG4gICAgfSxcXG4gICAgZ2V0VG9rZW4oKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5zaGFyZVRva2VuIHx8IHRoaXMuZ2V0U2hhcmVUb2tlbigpO1xcbiAgICB9LFxcblxcbiAgICBnZXRTaGFyZVRva2VuKCkge1xcbiAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMucmVxdWVzdEh0dHAoXFxcIi8xL2Nsb3VkZHJpdmUvc2hhcmUvc2hhcmVwYWdlL3Rva2VuXFxcIikuYm9keSh7XFxuICAgICAgICAgICAgXFxcInB3ZF9pZFxcXCI6IHRoaXMuc2hhcmVJZCxcXG4gICAgICAgICAgICBcXFwicGFzc2NvZGVcXFwiOiB0aGlzLnNoYXJlUHdkLFxcbiAgICAgICAgfSkuYm9keVRvU3RyaW5nKHRydWUpLnNldFN0YXJ0UmVxdWVzdEZ1bmMocG9zdCkuc3RhcnQodHJ1ZSk7XFxuICAgICAgICB0aGlzLnNoYXJlVG9rZW4gPSByZXN1bHQuZGF0YS5zdG9rZW47XFxuICAgICAgICB0aGlzLnJlZnJlc2hDYWxsQmFjayhyZXN1bHQuZGF0YS5zdG9rZW4sIHRoaXMpO1xcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hhcmVUb2tlbjtcXG4gICAgfSxcXG4gICAgZ2V0TGlzdEZpbGUoZmlsZUlkLCBwYWdlLCBvcmRlckJ5KSB7XFxuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5yZXF1ZXN0SHR0cChcXFwiLzEvY2xvdWRkcml2ZS9zaGFyZS9zaGFyZXBhZ2UvZGV0YWlsP3ByPXVjcHJvJmZyPXBjXFxcIikuYnVpbGRVcmwoe1xcbiAgICAgICAgICAgIHB3ZF9pZDogdGhpcy5zaGFyZUlkIHx8IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIHN0b2tlbjogZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuZ2V0VG9rZW4oKSB8fCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgcGRpcl9maWQ6IGZpbGVJZCB8fCBcXFwiXFxcIixcXG4gICAgICAgICAgICBmb3JjZTogMCxcXG4gICAgICAgICAgICBfcGFnZTogcGFnZSxcXG4gICAgICAgICAgICBfc2l6ZTogNTAsXFxuICAgICAgICAgICAgX2ZldGNoX2Jhbm5lcjogMSxcXG4gICAgICAgICAgICBfZmV0Y2hfc2hhcmU6IDEsXFxuICAgICAgICAgICAgX2ZldGNoX3RvdGFsOiAxLFxcbiAgICAgICAgICAgIF9zb3J0OiBcXFwiZmlsZV90eXBlOmFzYyxcXFwiICsgb3JkZXJCeVxcbiAgICAgICAgfSkuZXJyb3JXaXRoUmV0cnkoKGVyciwgcmVzLCBodHRwKSA9PiB7XFxuICAgICAgICAgICAgaWYgKEpTT04ucGFyc2UocmVzLmJvZHkpLm1lc3NhZ2UuaW5jbHVkZXMoJ3N0b2tlbicpKSB7XFxuICAgICAgICAgICAgICAgIGh0dHAubWVyZ2VIZWFkQW5kQm9keSh7XFxuICAgICAgICAgICAgICAgICAgICBidWlsZFVybDoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b2tlbjogZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuZ2V0U2hhcmVUb2tlbigpfHxcXFwiXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pLnN0YXJ0KHRydWUpO1xcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcXG4gICAgfVxcbn0pO1xcbiQuZXhwb3J0cyA9IFF1YXJrU2hhcmVBcGk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLik4Hor7fmsYLlh73mlbBcIixcInBhdGhcIjpcImh0dHBSZXF1ZXN0XCIsXCJydWxlXCI6XCJmdW5jdGlvbiBodHRwUmVxdWVzdCh1cmwsIG9wdGlvbnMpIHtcXG4gICAgdGhpcy5yZXRyeUNvdW50ID0gMDtcXG4gICAgdGhpcy51cmwgPSB1cmw7XFxuICAgIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcXG4gICAgICAgIHdpdGhIZWFkZXJzOiB0cnVlXFxuICAgIH0pO1xcbiAgICB0aGlzLmVycm9yQ2FsbGJhY2sgPSAoZXJyLCByZXMpID0+IHt0aHJvdyBlcnJ9O1xcbiAgICB0aGlzLmVycm9yQ2FsbGJhY2tXaXRoUmV0cnkgPSAoZXJyLCByZXMsIHRyeVJlc3RhcnQpID0+IGZhbHNlO1xcbiAgICB0aGlzLnN1Y2Nlc3NDYWxsYmFjayA9IChib2R5LCBzdGF0dXNDb2RlLCBoZWFkZXJzKSA9PiBib2R5O1xcbiAgICB0aGlzLmVycm9yVHlwZUNhbGxiYWNrID0gKGVyciwgcmVzKSA9PiBlcnI7XFxuICAgIHRoaXMuc3RhcnRSZXF1ZXN0ID0gZmV0Y2g7XFxuICAgIHRoaXMuX2JvZHlUb1N0cmluZyA9IGZhbHNlO1xcbiAgICB0aGlzLmJ1aWxkUGFyYW0gPSB2b2lkKDApO1xcbn1cXG5cXG5PYmplY3QuYXNzaWduKGh0dHBSZXF1ZXN0LnByb3RvdHlwZSwge1xcbiAgICBib2R5VG9TdHJpbmcoZmxhZykge1xcbiAgICAgICAgdGhpcy5fYm9keVRvU3RyaW5nID0gISFmbGFnO1xcbiAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgIH0sXFxuICAgIGJvZHkoYm9keSkge1xcbiAgICAgICAgdGhpcy5vcHRpb25zLmJvZHkgPSBib2R5IHx8IHZvaWQgMDtcXG4gICAgICAgIHJldHVybiB0aGlzO1xcbiAgICB9LFxcbiAgICBidWlsZFVybChidWlsZFBhcmFtKSB7XFxuICAgICAgICB0aGlzLmJ1aWxkUGFyYW0gPSBidWlsZFBhcmFtIHx8IHt9O1xcbiAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgIH0sXFxuICAgIHNldFN0YXJ0UmVxdWVzdEZ1bmMoZnVuYykge1xcbiAgICAgICAgdGhpcy5zdGFydFJlcXVlc3QgPSBmdW5jO1xcbiAgICAgICAgcmV0dXJuIHRoaXM7XFxuICAgIH0sXFxuICAgIGhlYWRlcnMoaGVhZGVycykge1xcbiAgICAgICAgdGhpcy5vcHRpb25zLmhlYWRlcnMgPSBoZWFkZXJzIHx8IHZvaWQgMDtcXG4gICAgICAgIHJldHVybiB0aGlzO1xcbiAgICB9LFxcbiAgICBzdWNjZXNzKHN1Y2Nlc3NDYWxsYmFjaykge1xcbiAgICAgICAgaWYgKHR5cGVvZiBzdWNjZXNzQ2FsbGJhY2sgIT09IFxcXCJmdW5jdGlvblxcXCIpIHJldHVybiB0aGlzO1xcbiAgICAgICAgdGhpcy5zdWNjZXNzQ2FsbGJhY2sgPSBzdWNjZXNzQ2FsbGJhY2s7XFxuICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgfSxcXG4gICAgZXJyb3IoZXJyb3JDYWxsYmFjaykge1xcbiAgICAgICAgaWYgKHR5cGVvZiBlcnJvckNhbGxiYWNrICE9PSBcXFwiZnVuY3Rpb25cXFwiKSByZXR1cm4gdGhpcztcXG4gICAgICAgIHRoaXMuZXJyb3JDYWxsYmFjayA9IGVycm9yQ2FsbGJhY2s7XFxuICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgfSxcXG4gICAgZXJyb3JUeXBlKGVycm9yVHlwZUNhbGxiYWNrKSB7XFxuICAgICAgICBpZiAodHlwZW9mIGVycm9yVHlwZUNhbGxiYWNrICE9PSBcXFwiZnVuY3Rpb25cXFwiKSByZXR1cm4gdGhpcztcXG4gICAgICAgIHRoaXMuZXJyb3JUeXBlQ2FsbGJhY2sgPSBlcnJvclR5cGVDYWxsYmFjaztcXG4gICAgICAgIHJldHVybiB0aGlzO1xcbiAgICB9LFxcbiAgICBlcnJvcldpdGhSZXRyeShyZXRyeUNvdW50LCBlcnJvckNhbGxiYWNrV2l0aFJldHJ5KSB7XFxuICAgICAgICBpZiAodHlwZW9mIHJldHJ5Q291bnQgPT09IFxcXCJmdW5jdGlvblxcXCIgJiYgdHlwZW9mIGVycm9yQ2FsbGJhY2tXaXRoUmV0cnkgPT09IFxcXCJ1bmRlZmluZWRcXFwiKSB7XFxuICAgICAgICAgICAgZXJyb3JDYWxsYmFja1dpdGhSZXRyeSA9IHJldHJ5Q291bnQ7XFxuICAgICAgICAgICAgcmV0cnlDb3VudCA9IDE7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAodHlwZW9mIGVycm9yQ2FsbGJhY2tXaXRoUmV0cnkgIT09IFxcXCJmdW5jdGlvblxcXCIpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgICAgIH1cXG4gICAgICAgIHRoaXMucmV0cnlDb3VudCA9IE51bWJlcihyZXRyeUNvdW50KTtcXG4gICAgICAgIHRoaXMuZXJyb3JDYWxsYmFja1dpdGhSZXRyeSA9IGVycm9yQ2FsbGJhY2tXaXRoUmV0cnk7XFxuICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgfSxcXG4gICAgc3RhcnQodG9Kc29uKSB7XFxuICAgICAgICBsZXQgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMub3B0aW9ucyk7XFxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYm9keSA9PT0gXFxcIm9iamVjdFxcXCIgJiYgdGhpcy5fYm9keVRvU3RyaW5nKSB7XFxuICAgICAgICAgICAgb3B0aW9ucy5ib2R5ID0gSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5ib2R5KTtcXG4gICAgICAgIH1cXG4gICAgICAgIHZhciByZXMgPSBKU09OLnBhcnNlKHRoaXMuc3RhcnRSZXF1ZXN0KHRoaXMuYnVpbGRQYXJhbT9idWlsZFVybCh0aGlzLnVybCwgdGhpcy5idWlsZFBhcmFtKTp0aGlzLnVybCwgb3B0aW9ucykpO1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBpZiAocmVzLnN0YXR1c0NvZGUgPj0gMjAwICYmIHJlcy5zdGF0dXNDb2RlIDw9IDMwMCkge1xcbiAgICAgICAgICAgICAgICBsZXQgYm9keSA9IHJlcy5ib2R5O1xcbiAgICAgICAgICAgICAgICBpZiAodG9Kc29uKSB7XFxuICAgICAgICAgICAgICAgICAgICBib2R5ID0gSlNPTi5wYXJzZShib2R5KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdWNjZXNzQ2FsbGJhY2soYm9keSwgcmVzKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoU3RyaW5nKHJlcy5zdGF0dXNDb2RlKSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgZXJyID0gdGhpcy5lcnJvclR5cGVDYWxsYmFjayhlcnIsIHJlcyk7XFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcblxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAodGhpcy5yZXRyeUNvdW50KSB7XFxuICAgICAgICAgICAgICAgIGxldCB0cnlSZXN1bHQgPSB0aGlzLmVycm9yQ2FsbGJhY2tXaXRoUmV0cnkoZXJyLCByZXMsIHRoaXMpO1xcbiAgICAgICAgICAgICAgICBpZiAodHJ5UmVzdWx0KSB7XFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJldHJ5Q291bnQtLTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0YXJ0KHRvSnNvbik7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJldHJ5Q291bnQgPSAwO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JDYWxsYmFjayhlcnIsIHJlcyk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvckNhbGxiYWNrKGVyciwgcmVzKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIHNldE9wdGlvbnMob3B0aW9ucykge1xcbiAgICAgICAgdGhpcy5vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywge1xcbiAgICAgICAgICAgIHdpdGhIZWFkZXJzOiB0cnVlXFxuICAgICAgICB9KTtcXG4gICAgICAgIHJldHVybiB0aGlzO1xcbiAgICB9LFxcbiAgICBtZXJnZUhlYWRBbmRCb2R5KG9wdGlvbnMpIHtcXG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdGlvbnMuaGVhZGVyc3x8e30sIG9wdGlvbnMuaGVhZGVycyk7XFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5ib2R5ID09PSBcXFwib2JqZWN0XFxcIiAmJiB0eXBlb2Ygb3B0aW9ucy5ib2R5ID09PSBcXFwib2JqZWN0XFxcIikge1xcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRpb25zLmJvZHl8fHt9LCBvcHRpb25zLmJvZHkpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmJ1aWxkVXJsID09PSBcXFwib2JqZWN0XFxcIikge1xcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5idWlsZFBhcmFtfHx7fSwgb3B0aW9ucy5idWlsZFVybCk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gdGhpcztcXG4gICAgfVxcbn0pO1xcblxcbk9iamVjdC5hc3NpZ24oaHR0cFJlcXVlc3QsIHtcXG4gICAgZmV0Y2godXJsLCBvcHRpb25zKSB7XFxuICAgICAgICByZXR1cm4gbmV3IGh0dHBSZXF1ZXN0KHVybCwgb3B0aW9ucyk7XFxuICAgIH0sXFxuICAgIHBvc3QodXJsLCBvcHRpb25zKSB7XFxuICAgICAgICByZXR1cm4gbmV3IGh0dHBSZXF1ZXN0KHVybCwgb3B0aW9ucykuc2V0U3RhcnRSZXF1ZXN0RnVuYyhwb3N0KTtcXG4gICAgfSxcXG4gICAgcmVxdWVzdCh1cmwsIG9wdGlvbnMpIHtcXG4gICAgICAgIHJldHVybiBuZXcgaHR0cFJlcXVlc3QodXJsLCBvcHRpb25zKS5zZXRTdGFydFJlcXVlc3RGdW5jKHJlcXVlc3QpO1xcbiAgICB9LFxcbiAgICBwb3N0UmVxdWVzdCh1cmwsIG9wdGlvbnMpIHtcXG4gICAgICAgIHJldHVybiBuZXcgaHR0cFJlcXVlc3QodXJsLCBvcHRpb25zKS5zZXRTdGFydFJlcXVlc3RGdW5jKHBvc3RSZXF1ZXN0KTtcXG4gICAgfSxcXG4gICAgZmV0Y2hDb29raWUodXJsLCBvcHRpb25zKSB7XFxuICAgICAgICByZXR1cm4gbmV3IGh0dHBSZXF1ZXN0KHVybCwgb3B0aW9ucykuc2V0U3RhcnRSZXF1ZXN0RnVuYyhmZXRjaENvb2tpZSk7XFxuICAgIH1cXG59KTtcXG4kLmV4cG9ydHMgPSBodHRwUmVxdWVzdDtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuKTgeWIl+ihqOmhtemdolwiLFwicGF0aFwiOlwicXVhcmtMaXN0XCIsXCJydWxlXCI6XCJqczpcXG5sZXQgZCA9IFtdO1xcblxcbmFkZExpc3RlbmVyKFxcXCJvbkNsb3NlXFxcIiwgKCkgPT4gY2xlYXJNeVZhcihcXFwicGxheVVybENhY2hlXFxcIikpO1xcbmFkZExpc3RlbmVyKFxcXCJvblJlZnJlc2hcXFwiLCAoKSA9PiBjbGVhck15VmFyKFxcXCJwbGF5VXJsQ2FjaGVcXFwiKSk7XFxuXFxubGV0IHJlYWx1cmwgPSBkZWNvZGVVUklDb21wb25lbnQoZ2V0UGFyYW0oXFxcInJlYWx1cmxcXFwiLCBcXFwiXFxcIikpOyAvLyAuc3BsaXQoXFxcIj9cXFwiKVswXTtcXG4vLyBsZXQgdXJsRGF0YSA9IHJlYWx1cmwuc3BsaXQoXFxcIi9cXFwiKTtcXG5cXG5cXG5cXG5sZXQgc2hhcmVJZCA9IE1ZX1BBUkFNUy5zaGFyZUlkIHx8IHJlYWx1cmwubWF0Y2goL3BhblxcXFwucXVhcmtcXFxcLmNuKCUyRnxcXFxcLylzXFxcXDEoW2EtekEtWjAtOV0rKS8pWzJdO1xcbmxldCBzaGFyZVB3ZCA9IGdldFBhcmFtKFxcXCJzaGFyZVB3ZFxcXCIsIE1ZX1BBUkFNUy5zaGFyZVB3ZCB8fCBcXFwiXFxcIik7XFxubGV0IHNoYXJlVG9rZW4gPSBnZXRQYXJhbShcXFwic2hhcmVUb2tlblxcXCIsIE1ZX1BBUkFNUy5zaGFyZVRva2VuIHx8IFxcXCJcXFwiKTtcXG5cXG5sZXQgZmlsZUlkID0gTVlfUEFSQU1TLmZpbGVJZDtcXG5cXG5sZXQgc29ydCA9IHtcXG4gICAgXFxcIuWQjeensOato+W6j1xcXCI6IFxcXCJmaWxlX25hbWU6YXNjXFxcIixcXG4gICAgXFxcIuWQjeensOWAkuW6j1xcXCI6IFxcXCJmaWxlX25hbWU6ZGVzY1xcXCIsXFxuICAgIFxcXCLml7bpl7TmraPluo9cXFwiOiBcXFwidXBkYXRlZF9hdDphc2NcXFwiLFxcbiAgICBcXFwi5pe26Ze05YCS5bqPXFxcIjogXFxcInVwZGF0ZWRfYXQ6ZGVzY1xcXCJcXG59O1xcbmxldCBzdHlsZXMgPSBbXFxcInRleHRfMVxcXCIsIFxcXCJhdmF0YXJcXFwiXTtcXG5cXG5sZXQgc29ydFZhbHVlID0gc29ydFtnZXRJdGVtKFxcXCJzb3J0S2V5XFxcIiwgXFxcIuWQjeensOato+W6j1xcXCIpXTtcXG5sZXQgc3R5bGUgPSBnZXRJdGVtKFxcXCJzdHlsZVxcXCIsIHN0eWxlc1swXSk7XFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHN0eWxlLFxcbiAgICAgICAgdXJsOiAkKHN0eWxlcywgMSwgJ+ivt+mAieaLqScpLnNlbGVjdCgoKSA9PiB7XFxuICAgICAgICAgICAgc2V0SXRlbSgnc3R5bGUnLCBpbnB1dCk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgIH0pLFxcbiAgICAgICAgcGljX3VybDogXFxcImh0dHBzOi8vaGlrZXJmYW5zLmNvbS9pbWcvYWxpX2ljb24uc3ZnXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl9zbWFsbF80XFxcIlxcbiAgICB9KTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBnZXRJdGVtKFxcXCJzb3J0S2V5XFxcIiwgXFxcIuWQjeensOato+W6j1xcXCIpLFxcbiAgICAgICAgdXJsOiAkKE9iamVjdC5rZXlzKHNvcnQpLCAxLCAn6K+36YCJ5oupJykuc2VsZWN0KCgpID0+IHtcXG4gICAgICAgICAgICBzZXRJdGVtKFxcXCJzb3J0S2V5XFxcIiwgaW5wdXQpXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgIH0pLFxcbiAgICAgICAgcGljX3VybDogXFxcImh0dHBzOi8vaGlrZXJmYW5zLmNvbS9pbWcvYWxpX3NvcnQuc3ZnXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl9zbWFsbF80XFxcIlxcbiAgICB9KTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBnZXRJdGVtKFxcXCJxdWFya19wbGF5TW9kZVxcXCIsIFxcXCLovaznoIFcXFwiKSxcXG4gICAgICAgIHVybDogJChbXFxcIui9rOeggVxcXCIsIFxcXCLljp/nlLtcXFwiXSwgMiwgXFxcIuaSreaUvuaooeW8j1xcXCIpLnNlbGVjdCgoKSA9PiB7XFxuICAgICAgICAgICAgc2V0SXRlbShcXFwicXVhcmtfcGxheU1vZGVcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5YiH5o2i5oiQ5YqfXFxcIjtcXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uX3NtYWxsXzRcXFwiLFxcbiAgICAgICAgcGljX3VybDogXFxcImh0dHBzOi8vaGlrZXJmYW5zLmNvbS9pbWcvYWxpX3BsYXkuc3ZnXFxcIixcXG4gICAgfSk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuWKn+iDvVxcXCIsXFxuICAgICAgICB1cmw6ICQoW1xcXCLot7PovazlpLjlhYtBUFBcXFwiLCBcXFwi55m75b2VXFxcIiwgXFxcIuWOn+eUu+S4i+i9vee6v+eoi1xcXCJdKS5zZWxlY3QoKHNoYXJlSWQpID0+IHtcXG4gICAgICAgICAgICBpZiAoaW5wdXQgPT09IFxcXCLot7PovazlpLjlhYtBUFBcXFwiKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwicWtsaW5rOi8vd3d3LnVjLmNuL2IyMGI4NGZkNzM1YThkZDNmNzU0MTEyOWJhY2M0ZTlhP2FjdGlvbj1vcGVuX3VybCZ1cmw9aHR0cHM6Ly9wYW4ucXVhcmsuY24vcy9cXFwiICsgc2hhcmVJZDtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09PSBcXFwi55m75b2VXFxcIikge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJChbXFxcIui+k+WFpUNvb2tpZVxcXCIsIFxcXCLnvZHpobXnmbvlvZVcXFwiXSkuc2VsZWN0KCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gXFxcIue9kemhteeZu+W9lVxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS9sb2dpblxcXCI7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCJcXFwiLCBcXFwi6K+36L6T5YWlQ29va2llXFxcIikuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJC5yZXF1aXJlKFxcXCJ0b29sXFxcIikuaXNMb2dpbkNvb2tpZShpbnB1dCkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcInF1YXJrQ29va2llXFxcIiwgaW5wdXQucmVwbGFjZSgvXFxcXHMvZywgXFxcIlxcXCIpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/orr7nva7miJDlip9cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL0Nvb2tpZeagvOW8j+mUmeivr1xcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09PSBcXFwi5Y6f55S75LiL6L2957q/56iLXFxcIikge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJChnZXRJdGVtKFxcXCJzcGVlZFRocmVhZFxcXCIsIFxcXCIxMFxcXCIpLCBcXFwi6K+36L6T5YWlMy0zMuS5i+mXtOeahOaVtOaVsFxcXCIpLmlucHV0KCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBzcGVlZFRocmVhZCA9IHBhcnNlSW50KGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChzcGVlZFRocmVhZCA8IDMgfHwgc3BlZWRUaHJlYWQgPiAzMikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/orr7nva7kuI3lkIjms5VcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgc2V0SXRlbShcXFwic3BlZWRUaHJlYWRcXFwiLCBTdHJpbmcoc3BlZWRUaHJlYWQpKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/orr7nva7miJDlip9cXFwiO1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCBzaGFyZUlkKSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl9zbWFsbF80XFxcIixcXG4gICAgICAgIHBpY191cmw6IFxcXCJodHRwczovL2hpa2VyZmFucy5jb20vaW1nL2FsaV9maWxlaW50by5zdmdcXFwiLFxcbiAgICB9KTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiAnbGluZV9ibGFuaydcXG4gICAgfSk7XFxufVxcblxcblxcbmxldCBRdWFya1NoYXJlQXBpID0gJC5yZXF1aXJlKFxcXCJRdWFya1NoYXJlQXBpXFxcIik7XFxubGV0IHF1YXJrU2hhcmVBcGkgPSBuZXcgUXVhcmtTaGFyZUFwaShzaGFyZUlkLCBzaGFyZVB3ZCkuc2V0VG9rZW4oc2hhcmVUb2tlbikuc2V0UmVmcmVzaCgoc2hhcmVUb2tlbikgPT4ge1xcbiAgICBNWV9QQVJBTVMuc2hhcmVUb2tlbiA9IHNoYXJlVG9rZW47XFxuICAgIHNldFBhZ2VQYXJhbXMoTVlfUEFSQU1TKTtcXG59KTtcXG5cXG5mdW5jdGlvbiBmb3JtYXRTaXplKHNpemUpIHtcXG4gICAgaWYgKCFzaXplKSB7XFxuICAgICAgICByZXR1cm4gJyc7XFxuICAgIH1cXG4gICAgY29uc3QgdW5pdHMgPSBbJ0InLCAnS0InLCAnTUInLCAnR0InLCAnVEInLCAnUEInLCAnRUInLCAnWkInLCAnWUInXTtcXG4gICAgbGV0IGkgPSAwO1xcbiAgICB3aGlsZSAoc2l6ZSA+PSAxMDI0KSB7XFxuICAgICAgICBzaXplIC89IDEwMjQ7XFxuICAgICAgICBpKys7XFxuICAgIH1cXG4gICAgc2l6ZSA9IGkgPyBOdW1iZXIoc2l6ZS50b0ZpeGVkKDIpKSA6IHNpemU7XFxuICAgIHJldHVybiBgJHtzaXplfSAke3VuaXRzW2ldfWA7XFxufVxcblxcbmxldCBzdWJFeHRzID0gW1xcXCJ2dHRcXFwiLCBcXFwic3J0XFxcIiwgXFxcImFzc1xcXCJdO1xcbmxldCB0aXRsZUhlYWQgPSB7XFxuICAgIHZpZGVvOiBcXFwi8J+OrFxcXCIsXFxuICAgIGF1ZGlvOiBcXFwi8J+OtVxcXCIsXFxuICAgIGRvYzogXFxcIvCfk5FcXFwiLFxcbiAgICBpbWFnZTogXFxcIvCflrxcXFwiLFxcbiAgICBhcmNoaXZlOiBcXFwi8J+TplxcXCIsXFxuICAgIFxcXCJkZWZhdWx0XFxcIjogXFxcIuKdk1xcXCJcXG59O1xcblxcbmZ1bmN0aW9uIGdldEhlYWQodHlwZSwgZXh0KSB7XFxuICAgIGxldCBoZWFkID0gdGl0bGVIZWFkW3R5cGVdO1xcbiAgICAvKmlmIChzdWJFeHRzLmluY2x1ZGVzKGV4dCkpIHtcXG4gICAgICAgIGhlYWQgPSBcXFwi8J+VuFxcXCI7XFxuICAgIH0qL1xcbiAgICByZXR1cm4gaGVhZCB8fCBcXFwi4p2TXFxcIjtcXG59XFxudHJ5IHtcXG4gICAgdmFyIHJlcyA9IHF1YXJrU2hhcmVBcGkuZ2V0TGlzdEZpbGUoZmlsZUlkLCBNWV9QQUdFLCBzb3J0VmFsdWUpO1xcbiAgICAvL+iuvue9ruagh+mimFxcbiAgICBzZXRQYWdlVGl0bGUocmVzLmRhdGEuc2hhcmUudGl0bGUpO1xcbiAgICB2YXIgbGlzdCA9IHJlcy5kYXRhLmxpc3R8fFtdO1xcbiAgICBpZihsaXN0Lmxlbmd0aD09PTAmJiFmaWxlSWQpe1xcbiAgICAgICAgcmVzID0gcXVhcmtTaGFyZUFwaS5nZXRMaXN0RmlsZShyZXMuZGF0YS5zaGFyZS5maXJzdF9maWQsIE1ZX1BBR0UsIHNvcnRWYWx1ZSk7XFxuICAgICAgICBzZXRQYWdlVGl0bGUocmVzLmRhdGEuc2hhcmUudGl0bGUpO1xcbiAgICAgICAgdmFyIGxpc3QgPSByZXMuZGF0YS5saXN0fHxbXTtcXG4gICAgfVxcbiAgICBsaXN0LmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICAvL+WIpOaWreaYr+WQpuaWh+S7tuWkuVxcbiAgICAgICAgaWYgKGl0ZW0uZGlyKSB7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLwn5OCXFxcIiArIGl0ZW0uZmlsZV9uYW1lLFxcbiAgICAgICAgICAgICAgICBkZXNjOiAkLmRhdGVGb3JtYXQoaXRlbS51cGRhdGVkX2F0LCAneXl5eS1NTS1kZCcpICsgJyAgJyArIGl0ZW0uaW5jbHVkZV9pdGVtcyArICfpobkgICcsXFxuICAgICAgICAgICAgICAgIHBpY191cmw6IFxcXCJodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL21lc3N5LzI3LnN2Z1xcXCIsXFxuICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9xdWFya0xpc3Q/cGFnZT1meXBhZ2VcXFwiLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogc3R5bGUsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBzaGFyZUlkLFxcbiAgICAgICAgICAgICAgICAgICAgc2hhcmVQd2QsXFxuICAgICAgICAgICAgICAgICAgICBzaGFyZVRva2VuOiBxdWFya1NoYXJlQXBpLmdldFRva2VuKCksXFxuICAgICAgICAgICAgICAgICAgICBmaWxlSWQ6IGl0ZW0uZmlkLFxcbiAgICAgICAgICAgICAgICAgICAgaW5oZXJpdFRpdGxlOiBmYWxzZVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBnZXRIZWFkKGl0ZW0ub2JqX2NhdGVnb3J5KSArIGl0ZW0uZmlsZV9uYW1lLFxcbiAgICAgICAgICAgICAgICBkZXNjOiAkLmRhdGVGb3JtYXQoaXRlbS51cGRhdGVkX2F0LCAneXl5eS1NTS1kZCcpICsgJyAgJyArIGZvcm1hdFNpemUoaXRlbS5zaXplKSxcXG4gICAgICAgICAgICAgICAgcGljX3VybDogaXRlbS50aHVtYm5haWwsXFxuICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChmaWQsIGZpZF90b2tlbiwgcHdkX2lkLCBzdG9rZW4sIGNhdGVnb3J5KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgcGxheVVybENhY2hlID0gc3RvcmFnZTAuZ2V0TXlWYXIoXFxcInBsYXlVcmxDYWNoZVxcXCIsIHt9KTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChwbGF5VXJsQ2FjaGVbZmlkXSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwbGF5VXJsQ2FjaGVbZmlkXTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9ICQucmVxdWlyZShcXFwicGxheVxcXCIpLmdldFBsYXlVcmwoZmlkLCBmaWRfdG9rZW4sIHB3ZF9pZCwgc3Rva2VuLCBjYXRlZ29yeSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcGxheVVybENhY2hlW2ZpZF0gPSB1cmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoXFxcInBsYXlVcmxDYWNoZVxcXCIsIHBsYXlVcmxDYWNoZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybDtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSwgaXRlbS5maWQsIGl0ZW0uc2hhcmVfZmlkX3Rva2VuLCBzaGFyZUlkLCBxdWFya1NoYXJlQXBpLmdldFRva2VuKCksIGl0ZW0ub2JqX2NhdGVnb3J5KSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IHN0eWxlLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGl0ZW0uZmlkLFxcbiAgICAgICAgICAgICAgICAgICAgaW5oZXJpdFRpdGxlOiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgICAgIGNsczogJ3BsYXlsaXN0ICcgKyBpdGVtLm9ial9jYXRlZ29yeVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH1cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcbiAgICAgICAgfSk7XFxuICAgIH0pO1xcbn0gY2F0Y2ggKGUpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBlLm1lc3NhZ2UsXFxuICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgaWYgKGUubWVzc2FnZS5pbmNsdWRlcyhcXFwi5o+Q5Y+W56CBXFxcIikpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLovpPlhaXmj5Dlj5bnoIFcXFwiLFxcbiAgICAgICAgICAgIHVybDogJCgpLmlucHV0KChNWV9QQVJBTVMpID0+IHtcXG4gICAgICAgICAgICAgICAgc2V0UGFnZVBhcmFtcyhPYmplY3QuYXNzaWduKHt9LCBNWV9QQVJBTVMsIHtcXG4gICAgICAgICAgICAgICAgICAgIHNoYXJlUHdkOiBpbnB1dFxcbiAgICAgICAgICAgICAgICB9KSk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgfSwgTVlfUEFSQU1TKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiXFxuICAgICAgICB9KTtcXG4gICAgfVxcbn1cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLik4Hojrflj5bpk77mjqVcIixcInBhdGhcIjpcInBsYXlcIixcInJ1bGVcIjpcImpzOlxcbmNvbnN0IGNvb2tpZSA9IGdldEl0ZW0oXFxcInF1YXJrQ29va2llXFxcIiwgXFxcIlxcXCIpO1xcbmxldCBodHRwUmVxdWVzdCA9ICQucmVxdWlyZShcXFwiaHR0cFJlcXVlc3RcXFwiKTtcXG5cXG5mdW5jdGlvbiBDb29raWVNYW5hZ2UoY29va2llKSB7XFxuICAgIHRoaXMuY29va2llID0ge307XFxuICAgIHRoaXMuYWRkKGNvb2tpZSk7XFxufVxcbk9iamVjdC5hc3NpZ24oQ29va2llTWFuYWdlLnByb3RvdHlwZSwge1xcbiAgICBhZGQoY29va2llKSB7XFxuICAgICAgICBsZXQgY29va2llcyA9IFtdO1xcbiAgICAgICAgaWYgKHR5cGVvZiBjb29raWUgPT09IFxcXCJzdHJpbmdcXFwiKSB7XFxuICAgICAgICAgICAgY29va2llcyA9IGNvb2tpZS5zcGxpdChcXFwiO1xcXCIpO1xcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNvb2tpZSkpIHtcXG4gICAgICAgICAgICBjb29raWVzID0gY29va2llO1xcbiAgICAgICAgfVxcbiAgICAgICAgY29va2llcy5mb3JFYWNoKHYgPT4ge1xcbiAgICAgICAgICAgIHYgPSB2LnNwbGl0KFxcXCI9XFxcIik7XFxuICAgICAgICAgICAgaWYgKHYubGVuZ3RoIDwgMikgcmV0dXJuO1xcbiAgICAgICAgICAgIHRoaXMuY29va2llW3ZbMF0udHJpbSgpXSA9IHZbMV0udHJpbSgpO1xcbiAgICAgICAgfSk7XFxuICAgIH0sXFxuICAgIGdldCgpIHtcXG4gICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLmNvb2tpZSkubWFwKHYgPT4gdlswXSArIFxcXCI9XFxcIiArIHZbMV0pLmpvaW4oXFxcIjtcXFwiKTtcXG4gICAgfVxcbn0pO1xcbmNvbnN0IGNvb2tpZU1hbmFnZSA9IG5ldyBDb29raWVNYW5hZ2UoY29va2llKTtcXG5cXG5mdW5jdGlvbiB3YWl0U2xlZXAodGltZSkge1xcbiAgICBqYXZhLmxhbmcuVGhyZWFkLnNsZWVwKHRpbWUgfHwgNjAwKTtcXG59XFxuXFxuZnVuY3Rpb24gcmVxdWVzdEh0dHAodXJsKSB7XFxuICAgIHJldHVybiBuZXcgaHR0cFJlcXVlc3QodXJsKVxcbiAgICAgICAgLnN1Y2Nlc3MoKGJvZHksIHJlcykgPT4ge1xcbiAgICAgICAgICAgIGlmIChib2R5LnN0YXR1cyAhPT0gMjAwKSB7XFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihib2R5Lm1lc3NhZ2UpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBjb29raWVNYW5hZ2UuYWRkKHJlcy5oZWFkZXJzW1xcXCJzZXQtY29va2llXFxcIl0pO1xcbiAgICAgICAgICAgIHJldHVybiBib2R5O1xcbiAgICAgICAgfSlcXG4gICAgICAgIC5lcnJvclR5cGUoKGVyciwgcmVzKSA9PiB7XFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihKU09OLnBhcnNlKHJlcy5ib2R5KS5tZXNzYWdlKTtcXG4gICAgICAgIH0pXFxuICAgICAgICAuYm9keVRvU3RyaW5nKHRydWUpXFxuICAgICAgICAuaGVhZGVycyh7XFxuICAgICAgICAgICAgY29va2llOiBjb29raWVNYW5hZ2UuZ2V0KCksXFxuICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBcXFwiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgcXVhcmstY2xvdWQtZHJpdmUvMi41LjIwIENocm9tZS8xMDAuMC40ODk2LjE2MCBFbGVjdHJvbi8xOC4zLjUuNC1iNDc4NDkxMTAwIFNhZmFyaS81MzcuMzYgQ2hhbm5lbC9wY2trX290aGVyX2NoXFxcIixcXG4gICAgICAgICAgICBcXFwicmVmZXJlclxcXCI6IFxcXCJodHRwczovL2RyaXZlLnF1YXJrLmNuL1xcXCJcXG4gICAgICAgIH0pO1xcbn1cXG5cXG5mdW5jdGlvbiBnZXREcml2ZUluZm8oKSB7XFxuICAgIHJldHVybiByZXF1ZXN0SHR0cChcXFwiaHR0cHM6Ly9kcml2ZS5xdWFyay5jbi8xL2Nsb3VkZHJpdmUvc2hhcmUvc2hhcmVwYWdlL2Rpcj9wcj11Y3BybyZmcj1wYyZhdmVyPTFcXFwiKS5zdGFydCh0cnVlKTtcXG59XFxuXFxuZnVuY3Rpb24gY3JlYXRlU2F2ZVRhc2soZmlkLCBmaWRfdG9rZW4sIHB3ZF9pZCwgc3Rva2VuKSB7XFxuICAgIGxldCBkcml2ZUluZm8gPSBnZXREcml2ZUluZm8oKTtcXG4gICAgcmV0dXJuIHJlcXVlc3RIdHRwKFxcXCJodHRwczovL2RyaXZlLnF1YXJrLmNuLzEvY2xvdWRkcml2ZS9zaGFyZS9zaGFyZXBhZ2Uvc2F2ZT9wcj11Y3BybyZmcj1wY1xcXCIpLnNldFN0YXJ0UmVxdWVzdEZ1bmMocG9zdCkuYm9keSh7XFxuICAgICAgICBcXFwiZmlkX2xpc3RcXFwiOiBbXFxuICAgICAgICAgICAgZmlkXFxuICAgICAgICBdLFxcbiAgICAgICAgXFxcImZpZF90b2tlbl9saXN0XFxcIjogW1xcbiAgICAgICAgICAgIGZpZF90b2tlblxcbiAgICAgICAgXSxcXG4gICAgICAgIFxcXCJ0b19wZGlyX2ZpZFxcXCI6IGRyaXZlSW5mby5kYXRhLmRpci5maWQsXFxuICAgICAgICBcXFwicHdkX2lkXFxcIjogcHdkX2lkLFxcbiAgICAgICAgXFxcInN0b2tlblxcXCI6IHN0b2tlbixcXG4gICAgICAgIFxcXCJwZGlyX2ZpZFxcXCI6IGRyaXZlSW5mby5kYXRhLmRpci5wZGlyX2ZpZFxcbiAgICB9KS5zdGFydCh0cnVlKTtcXG59XFxuXFxuZnVuY3Rpb24gY3JlYXRlRGVsZXRlVGFzayhmaWQpIHtcXG4gICAgbGV0IGRyaXZlSW5mbyA9IGdldERyaXZlSW5mbygpO1xcbiAgICByZXR1cm4gcmVxdWVzdEh0dHAoXFxcImh0dHBzOi8vZHJpdmUucXVhcmsuY24vMS9jbG91ZGRyaXZlL2ZpbGUvZGVsZXRlP3ByPXVjcHJvJmZyPXBjXFxcIikuc2V0U3RhcnRSZXF1ZXN0RnVuYyhwb3N0KS5ib2R5KHtcXG4gICAgICAgIFxcXCJhY3Rpb25fdHlwZVxcXCI6IDIsXFxuICAgICAgICBcXFwiZmlsZWxpc3RcXFwiOiBbXFxuICAgICAgICAgICAgZmlkXFxuICAgICAgICBdLFxcbiAgICAgICAgXFxcImV4Y2x1ZGVfZmlkc1xcXCI6IFtdXFxuICAgIH0pLnN0YXJ0KHRydWUpO1xcbn1cXG5cXG5mdW5jdGlvbiB0YXNrKHRhc2tfaWQsIHJldHJ5X2luZGV4KSB7XFxuICAgIHJldHVybiByZXF1ZXN0SHR0cChcXFwiaHR0cHM6Ly9kcml2ZS5xdWFyay5jbi8xL2Nsb3VkZHJpdmUvdGFza1xcXCIpLmJ1aWxkVXJsKHtcXG4gICAgICAgIHByOiBcXFwidWNwcm9cXFwiLFxcbiAgICAgICAgZnI6IFxcXCJwY1xcXCIsXFxuICAgICAgICB0YXNrX2lkOiB0YXNrX2lkLFxcbiAgICAgICAgcmV0cnlfaW5kZXg6IHJldHJ5X2luZGV4XFxuICAgIH0pLnN0YXJ0KHRydWUpO1xcbn1cXG5cXG5mdW5jdGlvbiBxdWVyeVRhc2sodGFza19pZCkge1xcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDY7IGkrKykge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBsZXQgcmVzID0gdGFzayh0YXNrX2lkLCBpICsgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgIGlmIChyZXMuZGF0YS5zdGF0dXMgPT09IDIpIHtcXG4gICAgICAgICAgICAgICAgd2FpdFNsZWVwKDEwMDApO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzLmRhdGEuc2F2ZV9hcy5zYXZlX2FzX3RvcF9maWRzWzBdO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB3YWl0U2xlZXAoMzAwKTtcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgIH1cXG4gICAgcmV0dXJuIHZvaWQoMCk7XFxufVxcblxcbmZ1bmN0aW9uIHF1ZXJ5VGFza1N0YXR1cyh0YXNrX2lkKSB7XFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSsrKSB7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIGxldCByZXMgPSB0YXNrKHRhc2tfaWQsIGkgKyBcXFwiXFxcIik7XFxuICAgICAgICAgICAgaWYgKHJlcy5kYXRhLnN0YXR1cyA9PT0gMikge1xcbiAgICAgICAgICAgICAgICB3YWl0U2xlZXAoMTAwMCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB3YWl0U2xlZXAoMzAwKTtcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgIH1cXG4gICAgcmV0dXJuIGZhbHNlO1xcbn1cXG5cXG5mdW5jdGlvbiBnZXRQcmV2aWV3VmlkZW8oZmlkKSB7XFxuICAgIHJldHVybiByZXF1ZXN0SHR0cChcXFwiaHR0cHM6Ly9kcml2ZS5xdWFyay5jbi8xL2Nsb3VkZHJpdmUvZmlsZS92Mi9wbGF5P3ByPXVjcHJvJmZyPXBjXFxcIikuYm9keSh7XFxuICAgICAgICBcXFwiZmlkXFxcIjogZmlkLFxcbiAgICAgICAgXFxcInJlc29sdXRpb25zXFxcIjogXFxcIm5vcm1hbCxsb3csaGlnaCxzdXBlciwyayw0a1xcXCIsXFxuICAgICAgICBcXFwic3VwcG9ydHNcXFwiOiBcXFwiZm1wNCxtM3U4XFxcIlxcbiAgICB9KS5zZXRTdGFydFJlcXVlc3RGdW5jKHBvc3QpLnN0YXJ0KHRydWUpO1xcbn1cXG5cXG5mdW5jdGlvbiBnZXREb3dubG9hZFVybChmaWQpIHtcXG4gICAgcmV0dXJuIHJlcXVlc3RIdHRwKFxcXCJodHRwczovL2RyaXZlLnF1YXJrLmNuLzEvY2xvdWRkcml2ZS9maWxlL2Rvd25sb2FkP3ByPXVjcHJvJmZyPXBjXFxcIikuYm9keSh7XFxuICAgICAgICBcXFwiZmlkc1xcXCI6IFtmaWRdXFxuICAgIH0pLnNldFN0YXJ0UmVxdWVzdEZ1bmMocG9zdCkuc3RhcnQodHJ1ZSk7XFxufVxcblxcbmZ1bmN0aW9uIGdldFBsYXlVcmwoZmlkLCBmaWRfdG9rZW4sIHB3ZF9pZCwgc3Rva2VuLCBjYXRlZ29yeSkge1xcbiAgICB0cnkge1xcbiAgICAgICAgaWYgKCFjb29raWUpIHJldHVybiBcXFwidG9hc3Q6Ly/or7fnmbvlvZXotKblj7dcXFwiO1xcbiAgICAgICAgbGV0IHRhc2tJZCA9IGNyZWF0ZVNhdmVUYXNrKGZpZCwgZmlkX3Rva2VuLCBwd2RfaWQsIHN0b2tlbikuZGF0YS50YXNrX2lkO1xcbiAgICAgICAgbGV0IGFzZmlkID0gcXVlcnlUYXNrKHRhc2tJZCk7XFxuICAgICAgICBpZiAoIWFzZmlkKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+iOt+WPluWksei0pVxcXCI7XFxuICAgICAgICB9XFxuICAgICAgICBsZXQgcGxheUNvb2tpZSA9IGNvb2tpZU1hbmFnZS5nZXQoKTtcXG4gICAgICAgIGxldCBwbGF5SGVhZGVyID0ge1xcbiAgICAgICAgICAgIFJlZmVyZXI6IFxcXCJodHRwOi8vcGFuLnF1YXJrLmNuL1xcXCIsXFxuICAgICAgICAgICAgY29va2llOiBwbGF5Q29va2llLFxcbiAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogXFxcImNvbS5zdHViLlN0dWJBcHAvMS4zLjAgKExpbnV4O0FuZHJvaWQgMTQpIEFuZHJvaWRYTWVkaWEzLzEuMS4xXFxcIlxcbiAgICAgICAgfTtcXG4gICAgICAgIGlmIChjYXRlZ29yeSA9PSBcXFwidmlkZW9cXFwiKSB7XFxuICAgICAgICAgICAgbGV0IHBsYXlNb2RlID0gZ2V0SXRlbShcXFwicXVhcmtfcGxheU1vZGVcXFwiLCBcXFwi6L2s56CBXFxcIik7XFxuICAgICAgICAgICAgaWYgKHBsYXlNb2RlID09PSBcXFwi6L2s56CBXFxcIikge1xcbiAgICAgICAgICAgICAgICBsZXQgdmlkZW9SZXMgPSBnZXRQcmV2aWV3VmlkZW8oYXNmaWQpO1xcbiAgICAgICAgICAgICAgICBsZXQgdmlkZW9MaXN0ID0gdmlkZW9SZXMuZGF0YS52aWRlb19saXN0O1xcbiAgICAgICAgICAgICAgICBsZXQgcGxheUxpc3QgPSB7XFxuICAgICAgICAgICAgICAgICAgICBuYW1lczogW10sXFxuICAgICAgICAgICAgICAgICAgICB1cmxzOiBbXSxcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IFtdXFxuICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgIHZpZGVvTGlzdC5maWx0ZXIodiA9PiB2LmFjY2Vzc2FibGUpLmZvckVhY2godiA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBwbGF5TGlzdC5uYW1lcy5wdXNoKHYucmVzb2x1dGlvbik7XFxuICAgICAgICAgICAgICAgICAgICBwbGF5TGlzdC51cmxzLnB1c2godi52aWRlb19pbmZvLnVybCArIFxcXCIjaXNWaWRlbz10cnVlI1xcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgcGxheUxpc3QuaGVhZGVycy5wdXNoKHBsYXlIZWFkZXIpO1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgY3JlYXRlRGVsZXRlVGFzayhhc2ZpZCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShwbGF5TGlzdCk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgbGV0IHBsYXlVcmwgPSBnZXREb3dubG9hZFVybChhc2ZpZCkuZGF0YVswXS5kb3dubG9hZF91cmw7XFxuICAgICAgICAgICAgICAgIGxldCBwbGF5TGlzdCA9IHtcXG4gICAgICAgICAgICAgICAgICAgIG5hbWVzOiBbXFxcIuWOn+eUu1xcXCJdLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsczogW3BsYXlVcmwgKyBcXFwiI2lzVmlkZW89dHJ1ZSMjZmFzdFBsYXlNb2RlIyN0aHJlYWRzPVxcXCIgKyBnZXRJdGVtKFxcXCJzcGVlZFRocmVhZFxcXCIsIFxcXCIxMFxcXCIpICsgXFxcIiNcXFwiXSxcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IFtwbGF5SGVhZGVyXVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGNyZWF0ZURlbGV0ZVRhc2soYXNmaWQpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocGxheUxpc3QpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gZWxzZSB7IC8vIOS4jeaYr+inhumikei1hOa6kFxcbiAgICAgICAgICAgIGxldCBwbGF5SW5mbyA9IGdldERvd25sb2FkVXJsKGFzZmlkKS5kYXRhWzBdO1xcbiAgICAgICAgICAgIGxldCBwbGF5VXJsID0gcGxheUluZm8uZG93bmxvYWRfdXJsO1xcblxcbiAgICAgICAgICAgIC8vIOmfs+mikei1hOa6kFxcbiAgICAgICAgICAgIGlmIChwbGF5SW5mby5mb3JtYXRfdHlwZS5pbmNsdWRlcygnYXVkaW8nKSB8fCBwbGF5SW5mby5maWxlX25hbWUubWF0Y2goL1xcXFwuKGFhY3xhYzN8YWlmZnxhbXJ8bTRhfG1wMnxtcDN8b2dnfHJhfGF1fHdhdnx3bWF8bWthfGZsYWN8d2F2KS8pKSB7XFxuICAgICAgICAgICAgICAgIGxldCBwbGF5TGlzdCA9IHtcXG4gICAgICAgICAgICAgICAgICAgIG5hbWVzOiBbXFxcIumfs+mikVxcXCJdLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsczogW3BsYXlVcmwgKyBcXFwiI2lzVmlkZW89dHJ1ZSNcXFwiXSxcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IFtwbGF5SGVhZGVyXSxcXG4gICAgICAgICAgICAgICAgICAgIGx5cmljOiBcXFwiXFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGNyZWF0ZURlbGV0ZVRhc2soYXNmaWQpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocGxheUxpc3QpO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAvLyDmvI/nvZHkuYvpsbxcXG4gICAgICAgICAgICBpZiAocGxheUluZm8uZm9ybWF0X3R5cGUuaW5jbHVkZXMoJ3ZpZGVvJykgfHwgcGxheUluZm8uZmlsZV9uYW1lLm1hdGNoKC9cXFxcLihhdml8d212fG1wZWd8bXA0fG00dnxtb3Z8YXNmfGZsdnxmNHZ8cm12YnxybXwzZ3B8dm9ifG1rdikvKSkge1xcbiAgICAgICAgICAgICAgICBsZXQgcGxheUxpc3QgPSB7XFxuICAgICAgICAgICAgICAgICAgICBuYW1lczogW1xcXCLljp/nlLtcXFwiXSxcXG4gICAgICAgICAgICAgICAgICAgIHVybHM6IFtwbGF5VXJsICsgXFxcIiNpc1ZpZGVvPXRydWUjI2Zhc3RQbGF5TW9kZSMjdGhyZWFkcz1cXFwiICsgZ2V0SXRlbShcXFwic3BlZWRUaHJlYWRcXFwiLCBcXFwiMTBcXFwiKSArIFxcXCIjXFxcIl0sXFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBbcGxheUhlYWRlcl1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBjcmVhdGVEZWxldGVUYXNrKGFzZmlkKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHBsYXlMaXN0KTtcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgLy8g5pi+56S65Zu+54mHXFxuICAgICAgICAgICAgaWYgKHBsYXlJbmZvLmZvcm1hdF90eXBlLmluY2x1ZGVzKCdpbWFnZScpIHx8IHBsYXlJbmZvLmZpbGVfbmFtZS5tYXRjaCgvXFxcXC4oanBnfGdpZnxqcGVnfHBuZ3xibXB8c3ZnfGljb3x0aWZmKS8pKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBwbGF5VXJsICsgXFxcIkBoZWFkZXJzPVxcXCIgKyBKU09OLnN0cmluZ2lmeShwbGF5SGVhZGVyKTtcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgLy8g5LiL6L296LWE5rqQXFxuICAgICAgICAgICAgcGxheUhlYWRlciA9IE9iamVjdC5rZXlzKHBsYXlIZWFkZXIpLm1hcChLZXkgPT4gS2V5ICsgXFxcIkBcXFwiICsgU3RyaW5nKHBsYXlIZWFkZXJbS2V5XSkucmVwbGFjZSgvOy9nLCBcXFwi77yb77ybXFxcIikpO1xcbiAgICAgICAgICAgIHJldHVybiAnZG93bmxvYWQ6Ly8nICsgcGxheVVybCArICc7eycgKyBwbGF5SGVhZGVyLmpvaW4oXFxcIiYmXFxcIikgKyAnfSc7XFxuICAgICAgICB9XFxuICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgIGlmIChlLm1lc3NhZ2UuaW5jbHVkZXMoXFxcInJlcXVpcmUgbG9naW5cXFwiKSkge1xcbiAgICAgICAgICAgIHRvYXN0KFxcXCLmnKrnmbvlvZXmiJbnmbvlvZXov4fmnJ/vvIzor7fph43mlrDnmbvlvZVcXFwiKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS9sb2dpblxcXCI7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8vXFxcIiArIGUudG9TdHJpbmcoKTtcXG4gICAgfVxcbn1cXG5cXG4kLmV4cG9ydHMgPSB7XFxuICAgIGdldFBsYXlVcmxcXG59O1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4pOB55m75b2V6LSm5Y+3XCIsXCJwYXRoXCI6XCJsb2dpblwiLFwicnVsZVwiOlwianM6XFxubGV0IGQgPSBbXTtcXG5hZGRMaXN0ZW5lcihcXFwib25DbG9zZVxcXCIsICgpID0+IHtcXG4gICAgbGV0IGNvb2tpZSA9IGdldFZhcihcXFwicXVhcmtDb29raWVcXFwiLCBcXFwiXFxcIik7XFxuICAgIGlmIChjb29raWUpIHtcXG4gICAgICAgIHNldEl0ZW0oXFxcInF1YXJrQ29va2llXFxcIiwgY29va2llKTtcXG4gICAgICAgIHRvYXN0KFxcXCJDb29raWXojrflj5bmiJDlip9cXFwiKTtcXG4gICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgIH1cXG4gICAgY2xlYXJWYXIoXFxcInF1YXJrQ29va2llXFxcIik7XFxufSk7XFxuZC5wdXNoKHtcXG4gICAgY29sX3R5cGU6IFxcXCJ4NV93ZWJ2aWV3X3NpbmdsZVxcXCIsXFxuICAgIHVybDogXFxcImh0dHBzOi8vcGFuLnF1YXJrLmNuL1xcXCIsXFxuICAgIGRlc2M6IFxcXCJmbG9hdCYmMTAwJVxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBqczogJC50b1N0cmluZygoQXBpUm9vdFVybCkgPT4ge1xcbiAgICAgICAgICAgIGxldCB0aW1lSW50ZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCBDb29raWUgPSBmYmEuZ2V0Q29va2llKEFwaVJvb3RVcmwpO1xcbiAgICAgICAgICAgICAgICBpZiAoQ29va2llLmluY2x1ZGVzKFxcXCJfVVBfRjdFXzhEXz1cXFwiKSAmJiBDb29raWUuaW5jbHVkZXMoXFxcIl9fdWlkPVxcXCIpJiZDb29raWUuaW5jbHVkZXMoXFxcIl9fcHV1cz1cXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgZmJhLnB1dFZhcihcXFwicXVhcmtDb29raWVcXFwiLCBDb29raWUpXFxuICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKHRpbWVJbnRlcik7XFxuICAgICAgICAgICAgICAgICAgICBmYmEubG9nKENvb2tpZSk7XFxuICAgICAgICAgICAgICAgICAgICBmYmEuYmFjayhmYWxzZSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9LCA2MDApO1xcbiAgICAgICAgfSwgXFxcImh0dHBzOi8vcGFuLnF1YXJrLmNuXFxcIiksXFxuICAgICAgICB1YTogUENfVUEsXFxuICAgICAgICBqc0xvYWRpbmdJbmplY3Q6IGZhbHNlXFxuICAgIH1cXG59KTtcXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuKTgeeZu+W9leajgOa1i1wiLFwicGF0aFwiOlwidG9vbFwiLFwicnVsZVwiOlwianM6XFxuJC5leHBvcnRzID0ge1xcbiAgICBpc0xvZ2luQ29va2llKGNvb2tpZSkge1xcbiAgICAgICAgcmV0dXJuICEhKGNvb2tpZSAmJiBjb29raWUuaW5jbHVkZXMoXFxcIl9VUF9GN0VfOERfPVxcXCIpICYmIGNvb2tpZS5pbmNsdWRlcyhcXFwiX191aWQ9XFxcIikgJiYgY29va2llLmluY2x1ZGVzKFxcXCJfX3B1dXM9XFxcIikpO1xcbiAgICB9LFxcblxcblxcblxcbiAgICBzZXRSdWxlKGlucHV0KSB7XFxuICAgICAgICBzaG93TG9hZGluZygndWNra+S6kSDop6PmnpDkuK0uLi4nKTtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgLy8g5qC85byP5YyWXFxuICAgICAgICAgICAgW2xvZ1QsIHR5cGUsIHRleHRdID0gU3RyaW5nKGlucHV0KS5zcGxpdChcXFwi77+lXFxcIik7XFxuICAgICAgICAgICAgc3dpdGNoIChTdHJpbmcodHlwZSkpIHtcXG4gICAgICAgICAgICAgICAgY2FzZSAnUGFzdGUnOlxcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHBhcnNlUGFzdGUodGV4dCk7XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgY2FzZSAnTGFuem91JzpcXG4gICAgICAgICAgICAgICAgICAgIFt1cmwsIHB3ZF0gPSB0ZXh0LnNwbGl0KFxcXCIjI1xcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgZHVybCA9ICQucmVxdWlyZSgnbGFuem91P3J1bGU9dWNra+S6kScpLm9uZV91cmwodXJsLCBwd2QsIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IFN0cmluZyhmZXRjaChkdXJsKSk7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoKHNwID0gdGV4dC5zcGxpdChcXFwi77+lXFxcIikpLmxlbmd0aCA9PSAzKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHNwWzJdLnNwbGl0KFxcXCJAXFxcIilbMF0udHJpbSgpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGFycjEgPSBKU09OLnBhcnNlKGJhc2U2NERlY29kZSh0ZXh0KSk7XFxuXFxuXFxuICAgICAgICAgICAgLy8g5ZCI5bm277yM5Y676YeNXFxuICAgICAgICAgICAgYXJyMiA9ICQucmVxdWlyZShcXFwiY29uZmlncz9ydWxlPXVja2vkupFcXFwiKS5nZXRKc29uKCk7XFxuICAgICAgICAgICAgYXJyMyA9IGFycjIuY29uY2F0KGFycjEpLmZpbHRlcigob2JqLCBpbmRleCwgYXJyKSA9PiB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBhcnIuZmluZEluZGV4KG8gPT4gb2JqLmdyb3VwID09PSBvLmdyb3VwICYmIG9iai50aXRsZSA9PT0gby50aXRsZSAmJiAob2JqLnRpbWUgPiBvLnRpbWUgfHwgb2JqLnRpbWUgPT0gby50aW1lKSkgPT09IGluZGV4O1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICQucmVxdWlyZShcXFwiY29uZmlncz9ydWxlPXVja2vkupFcXFwiKS5zYXZlSnNvbihhcnIzKTtcXG5cXG5cXG4gICAgICAgICAgICAvLyDorqHnrpfkvZnph49cXG4gICAgICAgICAgICB4ID0gYXJyMy5sZW5ndGggLSBhcnIyLmxlbmd0aDtcXG4gICAgICAgICAgICBmID0gYXJyMS5sZW5ndGggLSB4XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICB0b2FzdChcXFwi5a+85YWl5oiQ5Yqf77yM5paw5aKe77yaXFxcIiArIHggKyBcXFwiIOimhueblu+8mlxcXCIgKyBmKTtcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICBsb2coZS50b1N0cmluZygpKTtcXG4gICAgICAgICAgICB0b2FzdChcXFwi5a+85YWl5aSx6LSlXFxcIik7XFxuICAgICAgICB9XFxuICAgICAgICBoaWRlTG9hZGluZygpO1xcbiAgICB9LFxcblxcblxcblxcbiAgICBzZXRFZGl0KCkge1xcbiAgICAgICAgXyA9IHtcXG4gICAgICAgICAgICBncm91cDogZ2V0TXlWYXIoXFxcImdyb3VwXFxcIiwgXFxcIuWkuOWFi1xcXCIpLnRyaW0oKSwgLy8g6KeE5YiZIOexu+WIq1xcbiAgICAgICAgICAgIHNlYXJjaF9lbmFibGVkOiBnZXRNeVZhcihcXFwic2VhcmNoX2VuYWJsZWRcXFwiLCBcXFwiMVxcXCIpLnRyaW0oKSwgLy8g5ZCv55So5pCc57SiICNcXG4gICAgICAgICAgICBleHBsb3JlX2VuYWJsZWQ6IGdldE15VmFyKFxcXCJleHBsb3JlX2VuYWJsZWRcXFwiLCBcXFwiMFxcXCIpLnRyaW0oKSwgLy8g5ZCv55So5Y+R546wICNcXG5cXG4gICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIoXFxcInRpdGxlXFxcIiwgXFxcIlxcXCIpLnRyaW0oKSwgLy8g5rqQ5ZCN56ewXFxuICAgICAgICAgICAgYXV0aG9yOiBnZXRNeVZhcihcXFwiYXV0aG9yXFxcIiwgXFxcIuS9muWQjVxcXCIpLnRyaW0oKSwgLy8g5rqQ5L2c6ICFXFxuICAgICAgICAgICAgaWNvbjogZ2V0TXlWYXIoXFxcImljb25cXFwiLCBcXFwiXFxcIikudHJpbSgpLCAvLyDmupDlm77moIdcXG4gICAgICAgICAgICBwcmVSdWxlOiBnZXRNeVZhcihcXFwicHJlUnVsZVxcXCIsIFxcXCJcXFwiKS50cmltKCksIC8vIGpz6aKE5aSE55CGXFxuXFxuICAgICAgICAgICAgc2VhcmNoX3VybDogZ2V0TXlWYXIoXFxcInNlYXJjaF91cmxcXFwiLCBcXFwiXFxcIikudHJpbSgpLCAvLyDmkJzntKLpk77mjqVcXG4gICAgICAgICAgICBzZWFyY2hfZ3JvdXA6IGdldE15VmFyKFxcXCJzZWFyY2hfZ3JvdXBcXFwiLCBcXFwi5bi455SoXFxcIikudHJpbSgpLCAvLyDmupDliIbnu4QgI1xcbiAgICAgICAgICAgIHNlYXJjaEZpbmQ6IGdldE15VmFyKFxcXCJzZWFyY2hGaW5kXFxcIiwgXFxcIlxcXCIpLnRyaW0oKSwgLy8g5pCc57Si6KeE5YiZXFxuXFxuICAgICAgICAgICAgZXhwbG9yZV9YNTogZ2V0TXlWYXIoXFxcImV4cGxvcmVfWDVcXFwiLCBcXFwiMFxcXCIpLnRyaW0oKSwgLy8g5L2/55SoeDUgI1xcbiAgICAgICAgICAgIHVybDogZ2V0TXlWYXIoXFxcInVybFxcXCIsIFxcXCJcXFwiKS50cmltKCksIC8vIOWPkeeOsOmTvuaOpVxcbiAgICAgICAgICAgIGZpbmRfcnVsZTogZ2V0TXlWYXIoXFxcImZpbmRfcnVsZVxcXCIsIFxcXCJcXFwiKS50cmltKCksIC8vIOWPkeeOsOinhOWImVxcblxcbiAgICAgICAgICAgIC8vIOWPkeeOsOmTvuaOpeabv+aNolxcbiAgICAgICAgICAgIGNsYXNzX25hbWU6IGdldE15VmFyKFxcXCJjbGFzc19uYW1lXFxcIiwgXFxcIlxcXCIpLnRyaW0oKSxcXG4gICAgICAgICAgICBjbGFzc191cmw6IGdldE15VmFyKFxcXCJjbGFzc191cmxcXFwiLCBcXFwiXFxcIikudHJpbSgpLFxcbiAgICAgICAgICAgIGFyZWFfbmFtZTogZ2V0TXlWYXIoXFxcImFyZWFfbmFtZVxcXCIsIFxcXCJcXFwiKS50cmltKCksXFxuICAgICAgICAgICAgYXJlYV91cmw6IGdldE15VmFyKFxcXCJhcmVhX3VybFxcXCIsIFxcXCJcXFwiKS50cmltKCksXFxuICAgICAgICAgICAgeWVhcl9uYW1lOiBnZXRNeVZhcihcXFwieWVhcl9uYW1lXFxcIiwgXFxcIlxcXCIpLnRyaW0oKSxcXG4gICAgICAgICAgICB5ZWFyX3VybDogZ2V0TXlWYXIoXFxcInllYXJfdXJsXFxcIiwgXFxcIlxcXCIpLnRyaW0oKSxcXG4gICAgICAgICAgICBzb3J0X25hbWU6IGdldE15VmFyKFxcXCJzb3J0X25hbWVcXFwiLCBcXFwiXFxcIikudHJpbSgpLFxcbiAgICAgICAgICAgIHNvcnRfdXJsOiBnZXRNeVZhcihcXFwic29ydF91cmxcXFwiLCBcXFwiXFxcIikudHJpbSgpLFxcblxcbiAgICAgICAgICAgIC8vIHg16K6+572uXFxuICAgICAgICAgICAgeDVfanNMb2FkaW5nSW5qZWN0OiBnZXRNeVZhcihcXFwieDVfanNMb2FkaW5nSW5qZWN0XFxcIiwgXFxcIjBcXFwiKS50cmltKCksXFxuICAgICAgICAgICAgeDVfanM6IGdldE15VmFyKFxcXCJ4NV9qc1xcXCIsIFxcXCJcXFwiKS50cmltKCksXFxuICAgICAgICAgICAgeDVfYmxvY2tSdWxlczogZ2V0TXlWYXIoXFxcIng1X2Jsb2NrUnVsZXNcXFwiLCBcXFwiXFxcIikudHJpbSgpLFxcbiAgICAgICAgICAgIHg1X3VybEludGVyY2VwdG9yOiBnZXRNeVZhcihcXFwieDVfdXJsSW50ZXJjZXB0b3JcXFwiLCBcXFwiXFxcIikudHJpbSgpLFxcbiAgICAgICAgICAgIHg1X3BhZ2VIb21lOiBnZXRNeVZhcihcXFwieDVfcGFnZUhvbWVcXFwiLCBcXFwiXFxcIikudHJpbSgpLFxcbiAgICAgICAgICAgIHg1X3JlZmVyZXI6IGdldE15VmFyKFxcXCJ4NV9yZWZlcmVyXFxcIiwgXFxcIlxcXCIpLnRyaW0oKSxcXG4gICAgICAgICAgICB4NV9pbWdMb25nQ2xpY2s6IGdldE15VmFyKFxcXCJ4NV9pbWdMb25nQ2xpY2tcXFwiLCBcXFwiMFxcXCIpLnRyaW0oKSxcXG4gICAgICAgICAgICB4NV9zaG93UHJvZ3Jlc3M6IGdldE15VmFyKFxcXCJ4NV9zaG93UHJvZ3Jlc3NcXFwiLCBcXFwiMFxcXCIpLnRyaW0oKSxcXG4gICAgICAgICAgICB4NV9mbG9hdFZpZGVvOiBnZXRNeVZhcihcXFwieDVfZmxvYXRWaWRlb1xcXCIsIFxcXCIwXFxcIikudHJpbSgpLFxcbiAgICAgICAgICAgIHg1X2F1dG9QbGF5OiBnZXRNeVZhcihcXFwieDVfYXV0b1BsYXlcXFwiLCBcXFwiMFxcXCIpLnRyaW0oKSxcXG4gICAgICAgICAgICB4NV91YTogZ2V0TXlWYXIoXFxcIng1X3VhXFxcIiwgXFxcIlxcXCIpLnRyaW0oKSxcXG4gICAgICAgICAgICB4NV91cmw6IGdldE15VmFyKFxcXCJ4NV91cmxcXFwiLCBcXFwiXFxcIikudHJpbSgpLFxcbiAgICAgICAgICAgIHg1X2Rlc2M6IGdldE15VmFyKFxcXCJ4NV9kZXNjXFxcIiwgXFxcIlxcXCIpLnRyaW0oKSxcXG4gICAgICAgICAgICB4NV9ob21lOiBnZXRNeVZhcihcXFwieDVfaG9tZVxcXCIsIFxcXCJcXFwiKS50cmltKCksXFxuICAgICAgICAgICAgdGltZTogbmV3IERhdGUoKS5nZXRUaW1lKCksIC8vIOS/neWtmOaXtumXtCAjXFxuICAgICAgICB9O1xcbiAgICAgICAgaWYgKF8udGl0bGUgIT0gXFxcIlxcXCIgJiYgXy50aXRsZSAhPSBcXFwi6IGa5pCcXFxcIiAmJiBfLnRpdGxlICE9IFxcXCLmnIDlkI7pnaJcXFwiKSB7XFxuICAgICAgICAgICAgaWYgKChfLnNlYXJjaF91cmwgIT0gXFxcIlxcXCIgJiYgXy5zZWFyY2hGaW5kICE9IFxcXCJcXFwiKSB8fCAoXy51cmwgIT0gXFxcIlxcXCIgJiYgKF8uZXhwbG9yZV9YNSA9PSBcXFwiMVxcXCIgfHwgXy5maW5kX3J1bGUgIT0gXFxcIlxcXCIpKSkge1xcbiAgICAgICAgICAgICAgICBmb3IgKHQgaW4gXykge1xcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcih0KTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChfW3RdID09IFxcXCJcXFwiIHx8IF9bdF0gPT0gXFxcIjBcXFwiIHx8IF9bdF0gPT0gXFxcIk1PQklMRV9VQVxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgX1t0XTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBqeGxpc3QgPSAkLnJlcXVpcmUoXFxcImNvbmZpZ3M/cnVsZT11Y2tr5LqRXFxcIikuZ2V0SnNvbigpO1xcbiAgICAgICAgICAgICAgICB1aWRzID0ganhsaXN0Lm1hcChfXyA9PiBtZDUoX18uZ3JvdXAgKyBfXy50aXRsZSkpO1xcbiAgICAgICAgICAgICAgICBpID0gdWlkcy5pbmRleE9mKGdldE15VmFyKCdydWxlX3VpZCcsICctMScpKTtcXG4gICAgICAgICAgICAgICAgaWYgKGkgPT0gLTEpIHtcXG4gICAgICAgICAgICAgICAgICAgIGp4bGlzdC5wdXNoKF8pO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAganhsaXN0LnNwbGljZShpLCAxLCBfKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBjbGVhck15VmFyKCdydWxlX3RpZCcpO1xcbiAgICAgICAgICAgICAgICBjbGVhck15VmFyKCdydWxlX3VpZCcpO1xcbiAgICAgICAgICAgICAgICBqeGxpc3QgPSBqeGxpc3QuZmlsdGVyKChvYmosIGluZGV4LCBhcnIpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnIuZmluZEluZGV4KG8gPT4gbWQ1KG9iai5ncm91cCArIG9iai50aXRsZSkgPT09IG1kNShvLmdyb3VwICsgby50aXRsZSkgJiYgKG9iai50aW1lID4gby50aW1lIHx8IG9iai50aW1lID09PSBvLnRpbWUpKSA9PT0gaW5kZXg7XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAkLnJlcXVpcmUoXFxcImNvbmZpZ3M/cnVsZT11Y2tr5LqRXFxcIikuc2F2ZUpzb24oanhsaXN0KTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGJhY2sodHJ1ZSksICd0b2FzdDovL+S/neWtmOaIkOWKnyc7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aQnOe0ouinhOWImS/lj5HnjrDop4TliJnmgLvlvpflhpnkuIDkuKrlkKcnO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gZWxzZSBpZiAoXy50aXRsZSA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/or7floavlhpnmupDlkI3np7AnO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6KeE5YiZ5ZCN5LiN6IO95pivJyArIF8udGl0bGU7XFxuICAgICAgICB9XFxuICAgIH0sXFxuXFxuXFxuXFxuICAgIGdldFZhcmlhYmxlcygpIHtcXG4gICAgICAgIHJldHVybiBbXFxcImdyb3VwXFxcIiwgXFxcInNlYXJjaF9lbmFibGVkXFxcIiwgXFxcImV4cGxvcmVfZW5hYmxlZFxcXCIsIFxcXCJ0aXRsZVxcXCIsIFxcXCJhdXRob3JcXFwiLCBcXFwiaWNvblxcXCIsIFxcXCJwcmVSdWxlXFxcIiwgXFxcInNlYXJjaF91cmxcXFwiLCBcXFwic2VhcmNoX2dyb3VwXFxcIiwgXFxcInNlYXJjaEZpbmRcXFwiLCBcXFwiZXhwbG9yZV9YNVxcXCIsIFxcXCJ1cmxcXFwiLCBcXFwiZmluZF9ydWxlXFxcIiwgXFxcImNsYXNzX25hbWVcXFwiLCBcXFwiY2xhc3NfdXJsXFxcIiwgXFxcImFyZWFfbmFtZVxcXCIsIFxcXCJhcmVhX3VybFxcXCIsIFxcXCJ5ZWFyX25hbWVcXFwiLCBcXFwieWVhcl91cmxcXFwiLCBcXFwic29ydF9uYW1lXFxcIiwgXFxcInNvcnRfdXJsXFxcIiwgXFxcIng1X2pzTG9hZGluZ0luamVjdFxcXCIsIFxcXCJ4NV9qc1xcXCIsIFxcXCJ4NV9ibG9ja1J1bGVzXFxcIiwgXFxcIng1X3VybEludGVyY2VwdG9yXFxcIiwgXFxcIng1X3BhZ2VIb21lXFxcIiwgXFxcIng1X3JlZmVyZXJcXFwiLCBcXFwieDVfaW1nTG9uZ0NsaWNrXFxcIiwgXFxcIng1X3Nob3dQcm9ncmVzc1xcXCIsIFxcXCJ4NV9mbG9hdFZpZGVvXFxcIiwgXFxcIng1X2F1dG9QbGF5XFxcIiwgXFxcIng1X3VhXFxcIiwgXFxcIng1X3VybFxcXCIsIFxcXCJ4NV9kZXNjXFxcIiwgXFxcIng1X2hvbWVcXFwiLCBcXFwidGltZVxcXCIsIFxcXCJydWxlX3RpZFxcXCIsIFxcXCJydWxlX3VpZFxcXCJdO1xcbiAgICB9LFxcblxcblxcblxcbiAgICBnZXRSdWxlUGFzdGUocnVsZXMsIGlzSngpIHtcXG4gICAgICAgIGlmIChydWxlcy5sZW5ndGggPT0gMCkgcmV0dXJuIFxcXCJ0b2FzdDovL+ayoeacieinhOWImVxcXCI7XFxuICAgICAgICB0ZXh0ID0gYmFzZTY0RW5jb2RlKEpTT04uc3RyaW5naWZ5KHJ1bGVzKSk7XFxuICAgICAgICByZXR1cm4gJChnZXRQYXN0ZXMoKS5jb25jYXQoXFxcIue6r+aWh+acrFxcXCIpLCAyLCAn6YCJ5oup5YiG5Lqr5qC85byPJykuc2VsZWN0KCh0eHQsIGxlbiwgXywgaXNKeCkgPT4ge1xcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PSBcXFwi57qv5paH5pysXFxcIikge1xcbiAgICAgICAgICAgICAgICB1ID0gdHh0O1xcbiAgICAgICAgICAgICAgICBnID0gXFxcIlRleHRcXFwiO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHUgPSBzaGFyZVBhc3RlKHR4dCwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICBnID0gXFxcIlBhc3RlXFxcIjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGxlbiA9PT0gMSkge1xcbiAgICAgICAgICAgICAgICB0ID0gXy5ncm91cCArIFxcXCLop4TliJnjgIxcXFwiICsgXy50aXRsZSArIFxcXCLjgI1cXFwiO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHQgPSBcXFwi5YWx44CMXFxcIiArIGxlbiArIFxcXCLjgI3mnaHop4TliJlcXFwiO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAoaXNKeCkgY2xlYXJNeVZhcignanhsaXN0MicpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImNvcHk6Ly91Y2tr6KeE5YiZ5Y+j5Luk77yM5omT5byA5rW36ZiU5Y2z5Y+v5a+85YWlXFxcXG5cXFwiICsgdCArIFxcXCLvv6VcXFwiICsgZyArIFxcXCLvv6VcXFwiICsgdSArICdAaW1wb3J0PWpzOiQucmVxdWlyZShcXFwidG9vbD9ydWxlPXVja2vkupFcXFwiKS5zZXRSdWxlKGlucHV0KTsnO1xcbiAgICAgICAgfSwgdGV4dCwgcnVsZXMubGVuZ3RoLCBydWxlc1swXSwgaXNKeCk7XFxuICAgIH0sXFxufTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuKdtumAmueUqOWHveaVsFwiLFwicGF0aFwiOlwibGliXCIsXCJydWxlXCI6XCJjb25zdCBDb2xvciA9ICh0ZXN0LCBjb2xvcikgPT4ge1xcbiAgICByZXR1cm4gJzxmb250IGNvbG9yPVxcXCInICsgKGNvbG9yIHx8ICcjRkE3Mjk4JykgKyAnXFxcIj4nICsgdGVzdCArICc8L2Zyb250Pic7XFxufVxcbmNvbnN0IFN0cm9uZyA9ICh0ZXN0KSA9PiB7XFxuICAgIHJldHVybiAnPHN0cm9uZz4nICsgdGVzdCArICc8L3N0cm9uZz4nO1xcbn1cXG5jb25zdCBSaWNoID0gKHRlc3QpID0+IHtcXG4gICAgcmV0dXJuIFxcXCLigJjigJjigJnigJlcXFwiICsgU3RyaW5nKHRlc3QpXFxuICAgICAgICAucmVwbGFjZSgvXFxcXFxcXFxufCg8fFxcXFxzKyliclxcXFxzKlxcXFwvP1xcXFxzKj4vZ2ksICdcXFxcbicpXFxuICAgICAgICAucmVwbGFjZSgvXFxcXFxcXFxyL2csICdcXFxccicpXFxuICAgICAgICAucmVwbGFjZSgvXFxcXFxcXFxmL2csICdcXFxcZicpXFxuICAgICAgICAucmVwbGFjZSgvXFxcXFxcXFx0L2csICdcXFxcdCcpXFxuICAgICAgICAucmVwbGFjZSgvJihsdHxndHxuYnNwfGFtcHxxdW90KTsvZ2ksICgkMCwgJDEpID0+ICh7XFxuICAgICAgICAgICAgJ2x0JzogJzwnLFxcbiAgICAgICAgICAgICdndCc6ICc+JyxcXG4gICAgICAgICAgICAnbmJzcCc6ICcgJyxcXG4gICAgICAgICAgICAnYW1wJzogJyYnLFxcbiAgICAgICAgICAgICdxdW90JzogJ1xcXCInXFxuICAgICAgICB9WyQxLnRvTG93ZXJDYXNlKCldKSlcXG4gICAgICAgIC5yZXBsYWNlKC88XFxcXC8/KGVtfHNwYW4pW14+XSo+L2dpLCAnJyk7XFxufVxcbmNvbnN0IFNpemUgPSBzaXplID0+IHtcXG4gICAgaWYgKCFzaXplKSByZXR1cm4gJ+aXoOazleiuoeeulyc7XFxuICAgIHVuaXRzID0gWydCJywgJ0tCJywgJ01CJywgJ0dCJ107XFxuICAgIGkgPSAwO1xcbiAgICB3aGlsZSAoc2l6ZSA+IDEwMjMpIHtcXG4gICAgICAgIHNpemUgLz0gMTAyNDtcXG4gICAgICAgIGkrKztcXG4gICAgfVxcbiAgICBzaXplID0gaSA/IHNpemUudG9GaXhlZCgyKSA6IHNpemU7XFxuICAgIHJldHVybiBgJHtzaXplfSAke3VuaXRzW2ldfWA7XFxufVxcbnRyeSB7XFxuICAgIE1ZX1BBR0U7XFxufSBjYXRjaCAoZXJyKSB7XFxuICAgIE1ZX1BBR0UgPSAxO1xcbn1cXG5sZXQgaWQgPSBcXFwidWNra+S6kVxcXCI7XFxubGV0IHBhZ2UgPSBNWV9QQUdFO1xcbmxldCBfUEFHRSA9IHBhZ2UgPT0gMTtcXG5sZXQgaWNvbnMgPSB7XFxuICAgIOmYv+mHjDogXFxcImh0dHBzOi8vZ3cuYWxpY2RuLmNvbS9pbWdleHRyYS9pMS9PMUNOMDFyQXIzNFYyOG9SMHJ1cGtBaV8hITYwMDAwMDAwMDc5NzktMi10cHMtMjQwLTI0MC5wbmdcXFwiLFxcbiAgICDlpLjlhYs6IFxcXCJoaWtlcjovL2ltYWdlcy9pY29uX2t1YWtlXFxcIixcXG4gICAg6Z+z6aKROiBcXFwiaGlrZXI6Ly9pbWFnZXMvaWNvbl9tdXNpYzNcXFwiLFxcbiAgICDno4Hlips6IFxcXCJodHRwczovL2FuZHJvaWQtYXJ0d29ya3MuMjVwcC5jb20vZnMwOC8yMDIzLzA4LzIzLzEwLzExMF9lMTUzM2EwMjRjN2VmZWMxNzViYzUxMTBlOTY3MzZhY19jb25fMTMweDEzMC5wbmdcXFwiLFxcbiAgICDlvbHop4Y6IFxcXCJoaWtlcjovL2ltYWdlcy9pY29uX3ZpZGVvMlxcXCIsXFxuICAgIOWKqOa8qzogXFxcImhpa2VyOi8vaW1hZ2VzL2ljb25fcGljM1xcXCIsXFxuICAgIOWbvuaWhzogXFxcImhpa2VyOi8vaW1hZ2VzL2ljb25fdHh0MlxcXCIsXFxuICAgIOWFtuS7ljogXFxcImhpa2VyOi8vaW1hZ2VzL2ljb25fdW5rbm93blxcXCJcXG59XFxubGV0IGdyb3VwcyA9IE9iamVjdC5rZXlzKGljb25zKTtcXG5sZXQgcGFnZWlkID0gaWQgKyBcXFwieXBqLXBhZ2VcXFwiICsgcGFnZTtcXG5sZXQga2V5d29yZCA9IFN0cmluZyhnZXRNeVZhcihcXFwia2V5d29yZFxcXCIsIFxcXCJcXFwiKSkudHJpbSgpO1xcbmxldCBfU09VID0ga2V5d29yZCAhPSBcXFwiXFxcIiAmJiAha2V5d29yZC5tYXRjaCgvcXVhcmsuKlxcXFwvc1xcXFwvLisvKSAmJiBrZXl3b3JkID09IFN0cmluZyhnZXRNeVZhcihcXFwia2V5d29yZDJcXFwiLCBcXFwiXFxcIikpLnRyaW0oKTtcXG5sZXQgaGlzdG9yeSA9IHN0b3JhZ2UwLmdldEl0ZW0oXFxcInNlYXJjaEhpc3RvcnlcXFwiLCBbXSk7XFxuXFxuXFxuXFxuXFxuXFxuY29uc3Qgc2V0SGlzdG9yeUtleXdvcmQgPSAoKSA9PiB7XFxuICAgIGlpID0gaGlzdG9yeS5pbmRleE9mKGtleXdvcmQpO1xcbiAgICBpZiAoaWkgPiAtMSkge1xcbiAgICAgICAgaGlzdG9yeS5zcGxpY2UoaWksIDEpO1xcbiAgICB9XFxuICAgIGlmIChoaXN0b3J5Lmxlbmd0aCA+IDIwKSB7XFxuICAgICAgICBoaXN0b3J5LnNwbGljZShoaXN0b3J5Lmxlbmd0aCAtIDEsIDEpO1xcbiAgICB9XFxuICAgIGhpc3RvcnkudW5zaGlmdChrZXl3b3JkKTtcXG4gICAgc3RvcmFnZTAuc2V0SXRlbShcXFwic2VhcmNoSGlzdG9yeVxcXCIsIGhpc3RvcnkpO1xcbn1cXG5jb25zdCBnZXRSdWxlQmFzZVVybCA9IChiYXNlVSwgS2V5d29yZCkgPT4ge1xcbiAgICBpZiAoIUtleXdvcmQpIHtcXG4gICAgICAgIGlzRnlBbGwgPSBTdHJpbmcoYmFzZVUpLmluY2x1ZGVzKFxcXCJmeUFsbFxcXCIpO1xcbiAgICAgICAgRnlBbGxfaSA9IE51bWJlcihnZXRNeVZhcihcXFwiRnlBbGxfaVxcXCIpKSB8fCAwO1xcbiAgICAgICAgZm9yICh0IG9mIFsnY2xhc3MnLCAnYXJlYScsICd5ZWFyJywgJ3NvcnQnXSkge1xcbiAgICAgICAgICAgIGV2YWwoYCR7dH1faSA9IE51bWJlcihnZXRNeVZhcihcXFwiJHt0fV9pXFxcIikpIHx8IDA7XFxucnVsZS4ke3R9X3VybCA9IFN0cmluZyhydWxlLiR7dH1fdXJsIHx8IFxcXCJcXFwiKS50cmltKCkuc3BsaXQoXFxcIiZcXFwiKTtcXG5ydWxlLiR7dH1fbmFtZSA9IFN0cmluZyhydWxlLiR7dH1fbmFtZSB8fCBcXFwiXFxcIikudHJpbSgpLnNwbGl0KFxcXCImXFxcIik7XFxucnVsZS4ke3R9X3VybCA9IHJ1bGUuJHt0fV91cmwuZmlsdGVyKCh1LCBpKSA9PiBydWxlLiR7dH1fbmFtZVtpXSAhPSBcXFwiXFxcIik7XFxucnVsZS4ke3R9X25hbWUgPSBydWxlLiR7dH1fbmFtZS5maWx0ZXIoKE5hbWUpID0+IE5hbWUgIT0gXFxcIlxcXCIpO1xcbnJ1bGUuJHt0fV9pID0gcnVsZS4ke3R9X25hbWUubGVuZ3RoO2ApO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIGJhc2VVID0gU3RyaW5nKGJhc2VVKVxcbiAgICAgICAgLnJlcGxhY2UoXFxuICAgICAgICAgICAgL2Z5cGFnZUAoW15cXFxcP1xcXFwmXFxcXDtcXFxcI1xcXFxcXFwiXFxcXCdcXFxce10rKUA/L2csXFxuICAgICAgICAgICAgKCQwLCAkMSkgPT4ge1xcbiAgICAgICAgICAgICAgICBwYWdlMiA9IHBhZ2U7XFxuICAgICAgICAgICAgICAgICQxLnNwbGl0KFxcXCJAXFxcIikubWFwKF8gPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgZXZhbChTdHJpbmcoJ3BhZ2UyPXBhZ2UyJyArIF8pKTtcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBwYWdlMjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICApXFxuICAgICAgICAucmVwbGFjZSgvZnlwYWdlL2csIHBhZ2UpXFxuICAgICAgICAucmVwbGFjZSgvXFxcXCpcXFxcKi9nLCBLZXl3b3JkIHx8IFxcXCJcXFwiKTtcXG4gICAgaWYgKCFrZXl3b3JkKSBiYXNlVSA9IFN0cmluZyhiYXNlVSlcXG4gICAgICAgIC5yZXBsYWNlKFxcbiAgICAgICAgICAgIC9meShjbGFzc3xhcmVhfHllYXJ8c29ydCkvZyxcXG4gICAgICAgICAgICAoJDAsICQxKSA9PiBydWxlWyQxICsgJ191cmwnXVtldmFsKCQxICsgJ19pJyldIHx8IFxcXCJcXFwiXFxuICAgICAgICApXFxuICAgICAgICAucmVwbGFjZShcXG4gICAgICAgICAgICAvZnlBbGwvZyxcXG4gICAgICAgICAgICAoJDAsICQxKSA9PiB7XFxuICAgICAgICAgICAgICAgIEZ5QWxsX2lpID0gRnlBbGxfaTtcXG4gICAgICAgICAgICAgICAgaWYgKEZ5QWxsX2lpID4gKHJ1bGUuY2xhc3NfaSAtIDEpKSB7XFxuICAgICAgICAgICAgICAgICAgICBGeUFsbF9paSAtPSBydWxlLmNsYXNzX2k7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoRnlBbGxfaWkgPiAocnVsZS5hcmVhX2kgLSAxKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIEZ5QWxsX2lpIC09IHJ1bGUuYXJlYV9pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChGeUFsbF9paSA+IChydWxlLnllYXJfaSAtIDEpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBydWxlLnNvcnRfdXJsW0Z5QWxsX2lpIC0gcnVsZS55ZWFyX2ldO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBydWxlLnllYXJfdXJsW0Z5QWxsX2lpXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBydWxlLmFyZWFfdXJsW0Z5QWxsX2lpXTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBydWxlLmNsYXNzX3VybFtGeUFsbF9paV07XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICApO1xcbiAgICByZXR1cm4gYmFzZVU7XFxufVxcbmNvbnN0IGdldFJ1bGVHcm91cCA9IChjb2xfdHlwZSwgU291KSA9PiB7XFxuICAgIGZvciAoaXQgb2YgWydjbGFzcycsICdhcmVhJywgJ3llYXInLCAnc29ydCddKSB7XFxuICAgICAgICBldmFsKGBpbmRleCA9IHtcXG4gICAgY2xhc3M6IDAsXFxuICAgIGFyZWE6IHJ1bGUuY2xhc3NfaSxcXG4gICAgeWVhcjogcnVsZS5jbGFzc19pICsgcnVsZS5hcmVhX2ksXFxuICAgIHNvcnQ6IHJ1bGUuY2xhc3NfaSArIHJ1bGUuYXJlYV9pICsgcnVsZS55ZWFyX2ksXFxufVtpdF1cXG5ydWxlLiR7aXR9X25hbWUubWFwKChuYW1lLCBpKSA9PiB7XFxuICAgIGlmIChpc0Z5QWxsKSB7XFxuICAgICAgICBpID0gaW5kZXggKyBpO1xcbiAgICAgICAgdCA9IEZ5QWxsX2kgPT0gaTtcXG4gICAgICAgIGsgPSAnRnlBbGxfaSc7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICB0ID0gJHtpdH1faSA9PSBpO1xcbiAgICAgICAgayA9ICcke2l0fV9pJ1xcbiAgICB9XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogdCA/IFJpY2goU3Ryb25nKENvbG9yKG5hbWUpKSkgOiBuYW1lLFxcbiAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChrLCBpKSA9PiB7XFxuICAgICAgICAgICAgcHV0TXlWYXIoaywgaSk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICB9LCBrLCBpKSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiJHtjb2xfdHlwZXx8XFxcIlxcXCJ9XFxcIiB8fCAnc2Nyb2xsX2J1dHRvbidcXG4gICAgfSk7XFxufSk7XFxuZC5wdXNoKHtcXG4gICAgY29sX3R5cGU6ICdibGFua19ibG9jaydcXG59KTtgKTtcXG4gICAgfVxcbiAgICBpZiAoU291KSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn5pCc57SiJyxcXG4gICAgICAgICAgICBkZXNjOiAn5pCc57Si5YWz6ZSu6K+NIC8g5aS45YWL6ZO+5o6lJyxcXG4gICAgICAgICAgICB1cmw6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICBpbnB1dCA9IGlucHV0LnRyaW0oKTtcXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0Lm1hdGNoKC9xdWFyay5jbi4qXFxcXC9zXFxcXC8uKy8pKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS9xdWFya0xpc3Qjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjP3JlYWx1cmw9XFxcIiArIGVuY29kZVVSSUNvbXBvbmVudChpbnB1dCkgKyBcXFwiJnJ1bGU9dWNra+S6kSZzaGFyZVB3ZD1cXFwiO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0ICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcigna2V5d29yZDInLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogaWQgKyBcXFwiOnNlYXJjaFxcXCIsXFxuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZToga2V5d29yZCxcXG4gICAgICAgICAgICAgICAgb25DaGFuZ2U6IFxcXCJwdXRNeVZhcigna2V5d29yZCcsaW5wdXQpXFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB1cmw6IFxcXCJ0b2FzdDovL+WKoOi9veS4rS4uLlxcXCIsXFxuICAgICAgICBpbWc6IFxcXCJodHRwczovL2hpa2VyZmFucy5jb20vd2Vpc3lyL2ltZy9Mb2FkaW5nMS5naWZcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJwaWNfMV9jZW50ZXJcXFwiLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBjbHM6IFxcXCJsb2FkaW5nX2dpZlxcXCJcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuICAgIHNldFByZVJlc3VsdChkKTtcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLinbrmuKnppqjmj5DnpLpcIixcInBhdGhcIjpcIm5vdGljZVwiLFwicnVsZVwiOlwiJC5leHBvcnRzID0gZnVuY3Rpb24oKSB7XFxuICAgIGYgPSBcXFwiR3JheVxcXCI7XFxuICAgIHQgPSBmYWxzZTtcXG4gICAgdXAgPSBnZXRNeVZhcignUnVsZV9ub3VwZGF0ZScsICcnKTtcXG4gICAgaWYgKHVwICE9ICcxJykge1xcbiAgICAgICAgdmVyc2lvbiA9IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9ob21lQHVja2vkupFcXFwiKSkudmVyc2lvbjtcXG4gICAgICAgIGlmICh1cCA9PSAnJykge1xcbiAgICAgICAgICAgIFt1cmwsIHYsIHJ1bl0gPSAkLnJlcXVpcmUoXFxcImxhbnpvdT9ydWxlPXVja2vkupFcXFwiKS5saXN0X29uZShcXFwiaHR0cHM6Ly93d3IubGFuem91aS5jb20vYjAzcWYyOHFiXFxcIiwgXFxcInJlYWRcXFwiKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgdXJsID0gZmFsc2U7XFxuICAgICAgICAgICAgdiA9IHZlcnNpb24gKyAxO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHZlcnNpb24gPCB2KSB7XFxuICAgICAgICAgICAgZiA9IFxcXCJyZWRcXFwiO1xcbiAgICAgICAgICAgIHQgPSBcXFwi5qOA5rWL5Yiw5paw54mI5pu05paw77yM54K55Ye75LqG6Kej6K+m5oOF44CCXFxcIjtcXG4gICAgICAgICAgICBUID0gXFxcIuabtOaWsOWGheWuuVxcXCI7XFxuICAgICAgICAgICAgaWYgKHVwID09ICcnKSB7XFxuICAgICAgICAgICAgICAgIGNvbmZpcm0oe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfmm7TmlrDmj5DnpLonLFxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ+ajgOa1i+WIsOS9oOeahOinhOWImeeJiOacrOWwj+S6juacjeWKoeWZqOeJiOacrO+8jOaYr+WQpueri+WNs+abtOaWsO+8nycsXFxuICAgICAgICAgICAgICAgICAgICBjb25maXJtOiAkLnRvU3RyaW5nKChkYSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGYgPSAkLnJlcXVpcmUoXFxcImxhbnpvdT9ydWxlPXVja2vkupFcXFwiKS5vbmVfdXJsKGRhKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignUnVsZV9ub3VwZGF0ZScsICcxJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJcXFxcdTZkNzdcXFxcdTk2MTRcXFxcdTg5YzZcXFxcdTc1NGNcXFxcdWZmZTVob21lX3J1bGVfdXJsXFxcXHVmZmU1XFxcIiArIGdldFBhdGgoZik7XFxuICAgICAgICAgICAgICAgICAgICB9LCB1cmwpXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcignUnVsZV9ub3VwZGF0ZScsIHVybCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHVybCA9ICQoXFxcImhpa2VyOi8vZW1wdHkjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcIikucnVsZSgodXAsIHZlcnNpb24pID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwibGFuem91P3J1bGU9dWNra+S6kVxcXCIpLm9uZV9pbmZvKHVwLCBcXFwidWNra1xcXCIsIHZlcnNpb24pO1xcbiAgICAgICAgICAgIH0sIHVybCB8fCB1cCwgdmVyc2lvbik7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHB1dE15VmFyKCdSdWxlX25vdXBkYXRlJywgJzEnKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcblxcbiAgICBpZiAoISQucmVxdWlyZShcXFwidG9vbFxcXCIpLmlzTG9naW5Db29raWUoZ2V0SXRlbShcXFwicXVhcmtDb29raWVcXFwiLCBcXFwiXFxcIikpKSB7XFxuICAgICAgICBjbGVhckl0ZW0oXFxcInF1YXJrQ29va2llXFxcIik7XFxuICAgICAgICBmID0gXFxcInJlZFxcXCI7XFxuICAgICAgICBUID0gXFxcIueZu+W9lei0puWPt1xcXCI7XFxuICAgICAgICB0ID0gXFxcIuacquajgOa1i+WIsOeZu+W9leS/oeaBr1xcXCI7XFxuICAgICAgICB1cmwgPSAkKFtcXFwi6L6T5YWlQ29va2llXFxcIiwgXFxcIue9kemhteeZu+W9lVxcXCJdKS5zZWxlY3QoKCkgPT4ge1xcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gXFxcIue9kemhteeZu+W9lVxcXCIpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3BhZ2UvbG9naW5cXFwiO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCJcXFwiLCBcXFwi6K+36L6T5YWlQ29va2llXFxcIikuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKCQucmVxdWlyZShcXFwidG9vbFxcXCIpLmlzTG9naW5Db29raWUoaW5wdXQpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbShcXFwicXVhcmtDb29raWVcXFwiLCBpbnB1dC5yZXBsYWNlKC9cXFxccy9nLCBcXFwiXFxcIikpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+iuvue9ruaIkOWKn1xcXCI7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9Db29raWXmoLzlvI/plJnor69cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiAgICB9IGVsc2UgaWYgKCF0KSB7XFxuICAgICAgICBUID0gXFxcIueoi+W6j+iuvue9rlxcXCI7XFxuICAgICAgICB1cmwgPSBcXFwiaGlrZXI6Ly9wYWdlL2luc3RhbGwjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcIjtcXG4gICAgICAgIFQgPSBcXFwi5o2Q6LWgL+aUr+aMgVxcXCI7XFxuICAgICAgICB1cmwgPSBcXFwiaGlrZXI6Ly9wYWdlL2RvbmF0ZSNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNcXFwiO1xcbiAgICAgICAgaG91ciA9IG5ldyBEYXRlKCkuZ2V0SG91cnMoKTtcXG4gICAgICAgIGlmIChob3VyIDwgNSkge1xcbiAgICAgICAgICAgIHQgPSBcXFwi5rex5aSc77yM546w5Zyo55qE5aSc77yM54as5b6X5Y+q5piv6L+Y5pyq5pS55Y+Y55qE5Lmg5oOvXFxcIjtcXG4gICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDExKSB7XFxuICAgICAgICAgICAgdCA9IFxcXCLml6nlronvvIzmuIXmmajnhrnlvq7nmoTpmLPlhYnvvIwg5piv5L2g5Zyo5b6u56yR5ZCXXFxcIjtcXG4gICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE0KSB7XFxuICAgICAgICAgICAgdCA9IFxcXCLljYjlpb3vvIzkvLTpmo/nnYDnhp/mgonnmoTkuZDmm7LvvIzogYblkKznnYDliqjkurrnmoTml4vlvotcXFwiO1xcbiAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTkpIHtcXG4gICAgICAgICAgICB0ID0gXFxcIuWkleaaru+8jOS8vOa4hemjjumGieaZmumcnu+8jOS4jee7j+aEj+mXtOebiOeskeWbnuecuFxcXCI7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHQgPSBcXFwi5aSc5pma77yM5LiA5Liq5a6J6Z2Z55qE6KeS6JC977yM6Z2Z6Z2Z5Zyw6IGG5ZCs5aSc5puyXFxcIjtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLigJzigJzigJ3igJ1cXFwiICsgdC5mb250Y29sb3IoZikuc21hbGwoKSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICB1cmw6IHVybCxcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgcGFnZVRpdGxlOiBULFxcbiAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLinb3ok53lpY/mm7TmlrBcIixcInBhdGhcIjpcImxhbnpvdVwiLFwicnVsZVwiOlwianM6XFxuaGVhZCA9IHtcXG4gICAgaGVhZGVyczoge1xcbiAgICAgICAgXFxcInVwZ3JhZGUtaW5zZWN1cmUtcmVxdWVzdHNcXFwiOiBcXFwiMVxcXCIsXFxuICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFxcXCJNb3ppbGxhLzUuMCAoTGludXg7IEFuZHJvaWQgOC4wLjA7IE1JIDVzIFBsdXMgQnVpbGQvT1BSMS4xNzA2MjMuMDMyOyB3dikgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgQ2hyb21lLzcxLjAuMzU3OC45OSBNb2JpbGUgU2FmYXJpLzUzNy4zNlxcXCIsXFxuICAgICAgICBcXFwiQ29va2llXFxcIjogXFxcImRvd25faXA9MVxcXCIsXFxuICAgICAgICBcXFwiYWNjZXB0XFxcIjogXFxcInRleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LGltYWdlL3dlYnAsaW1hZ2UvYXBuZywqLyo7cT0wLjhcXFwiLFxcbiAgICB9LFxcbiAgICBtZXRob2Q6ICdHRVQnXFxufTtcXG5vbmVfdXJsID0gZnVuY3Rpb24odXJsLCBwd2QsIHJ1biwgbm9UcCwgSHRtbCkge1xcbiAgICB0cnkge1xcbiAgICAgICAgaGVhZC5oZWFkZXJzLnJlZmVyZXIgPSB1cmwuc3BsaXQoXFxcIj9cXFwiKVswXTtcXG4gICAgICAgIGlzVHAgPSAhdXJsLm1hdGNoKFxcXCIvdHAvXFxcIik7XFxuICAgICAgICBpZiAoaXNUcCAmJiAhbm9UcCkge1xcbiAgICAgICAgICAgIGRhID0gdXJsLnJlcGxhY2UoL14oLio/XFxcXC5jb20pLywgJyQxL3RwJyk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGRhID0gdXJsO1xcbiAgICAgICAgfVxcbiAgICAgICAgaHRtbCA9IFN0cmluZyhIdG1sIHx8IGZldGNoKGRhLCBoZWFkKSk7XFxuICAgICAgICBpZiAoaHRtbCA9PSBcXFwiXFxcIiAmJiBpc1RwICYmICFub1RwKSB7XFxuICAgICAgICAgICAgcmV0dXJuIG9uZV91cmwodXJsLCBwd2QsIHJ1biwgdHJ1ZSk7XFxuICAgICAgICB9XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHBhdGggPSBodG1sLm1hdGNoKC9saW5rID0gWydcXFwiXShbXlxcXCInXSspL2kpWzFdO1xcbiAgICAgICAgICAgIGhvc3QgPSB1cmwubWF0Y2goL14oLio/XFxcXC5jb21cXFxcLykvKVsxXTtcXG4gICAgICAgICAgICByZXR1cm4gb25lX3VybChob3N0ICsgcGF0aCwgcHdkLCBydW4pO1xcbiAgICAgICAgfSBjYXRjaCAoZXJyMCkge1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIHBhdGggPSBodG1sLm1hdGNoKC8nKFxcXFw/Lis/KScvKVsxXTtcXG4gICAgICAgICAgICAgICAgaG9zdCA9IFxcXCJodHRwczovL2RldmVsb3Blci5sYW56b3VnLmNvbVxcXCI7XFxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyMSkge1xcbiAgICAgICAgICAgICAgICBldmFsKGh0bWwubWF0Y2goL3ZhbHVlXFxcXDsoW1xcXFxzXFxcXFNdKz8pXFxcXCRcXFxcKC9pKVsxXSk7XFxuICAgICAgICAgICAgICAgIGV2YWwoJ2JvZHk9JyArIGh0bWwubWF0Y2goL1tcXFxcc1xcXFxTXSpkYXRhIDooW1xcXFxzXFxcXFNdKj9cXFxcfSksXFxcXHMrLylbMV0pO1xcbiAgICAgICAgICAgICAgICB1ID0gU3RyaW5nKHVybCkucmVwbGFjZSgvXFxcXC5jb20uKi8sIFxcXCIuY29tL2FqYXhtLnBocFxcXCIpO1xcbiAgICAgICAgICAgICAgICBfID0gSlNPTi5wYXJzZShwb3N0KHUsIHtcXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IGJvZHksXFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkLmhlYWRlcnNcXG4gICAgICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgICAgICAgICBwYXRoID0gXy51cmw7XFxuICAgICAgICAgICAgICAgIGhvc3QgPSBfLmRvbTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICB1ID0gaG9zdCArIFxcXCIvZmlsZS9cXFwiICsgcGF0aDtcXG4gICAgICAgIGsgPSBKU09OLnBhcnNlKGZldGNoKHUsIHtcXG4gICAgICAgICAgICByZWRpcmVjdDogZmFsc2UsXFxuICAgICAgICAgICAgb25seUhlYWRlcnM6IHRydWVcXG4gICAgICAgIH0pKS5oZWFkZXJzLmxvY2F0aW9uO1xcbiAgICAgICAgayA9IEFycmF5LmlzQXJyYXkoaykgPyBrWzBdIDogaztcXG4gICAgICAgIGlmIChydW4pIHJldHVybiBrO1xcbiAgICAgICAgbGV0IGYgPSBcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9fZmlsZVNlbGVjdF9ydWxlLmpzb25cXFwiO1xcbiAgICAgICAgZG93bmxvYWRGaWxlKGssIGYpO1xcbiAgICAgICAgcmV0dXJuIGY7XFxuICAgIH0gY2F0Y2ggKGVycjIpIHtcXG4gICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcbn07XFxuJC5leHBvcnRzID0ge1xcbiAgICBsaXN0X29uZTogZnVuY3Rpb24odXJsLCBwd2QsIHJ1bikge1xcbiAgICAgICAgc3JjID0gZmV0Y2godXJsLCBoZWFkKTtcXG4gICAgICAgIGV2YWwoc3JjLm1hdGNoKC92YXIgcGdzOyhbXFxcXHNcXFxcU10qP3Bncy4rOykvKVsxXSk7XFxuICAgICAgICBldmFsKCdib2R5PScgKyBzcmMubWF0Y2goL2RhdGEgOihbXFxcXHNcXFxcU10qP1xcXFx9KS8pWzFdKTtcXG4gICAgICAgIHVybCA9IHVybC5yZXBsYWNlKC9cXFxcLmNvbS4qLywgXFxcIi5jb20vZmlsZW1vcmVhamF4LnBocFxcXCIpO1xcbiAgICAgICAgbGlzdCA9IEpTT04ucGFyc2UocG9zdCh1cmwsIHtcXG4gICAgICAgICAgICBib2R5OiBib2R5LFxcbiAgICAgICAgICAgIGhlYWRlcnM6IGhlYWQuaGVhZGVyc1xcbiAgICAgICAgfSkpLnRleHQ7XFxuICAgICAgICBpZiAocnVuKSByZXR1cm4gbGlzdDtcXG4gICAgICAgIF9fID0gbGlzdFswXTtcXG4gICAgICAgIHVybCA9IHVybC5yZXBsYWNlKC9maWxlbW8uKi8sICd0cC8nICsgX18uaWQpO1xcbiAgICAgICAgdiA9IF9fLm5hbWVfYWxsLm1hdGNoKC9cXFxcWyguKykvKVsxXTtcXG4gICAgICAgIFt2LCBydW5dID0gdi5zcGxpdChcXFwiXVxcXCIpO1xcbiAgICAgICAgcmV0dXJuIFt1cmwsIHYsIHJ1bl07XFxuICAgIH0sXFxuICAgIG9uZV91cmw6IG9uZV91cmwsXFxuICAgIG9uZV9pbmZvOiBmdW5jdGlvbih1cmwsIHB3ZCwgdmVyc2lvbikge1xcbiAgICAgICAgdmVyc2lvbiA9IHZlcnNpb24gfHwgXFxcIuacquefpeeJiOacrFxcXCI7XFxuICAgICAgICB2ZXJzaW9uID0gU3RyaW5nKHZlcnNpb24pLnJlcGxhY2UoLyhcXFxcZFxcXFxkKShcXFxcZFxcXFxkKSQvLCBcXFwiLSQxLSQyXFxcIik7XFxuICAgICAgICBpdGVtID0gZmV0Y2godXJsLCBoZWFkKTtcXG4gICAgICAgIHQgPSBwZGZoKGl0ZW0sIFxcXCIubWQmJlRleHRcXFwiKSB8fCBwZGZoKGl0ZW0sIFxcXCJ0aXRsZSYmVGV4dFxcXCIpO1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICB0ID0gU3RyaW5nKHQpLnNwbGl0KFxcXCJbXFxcIilbMV0uc3BsaXQoXFxcIl1cXFwiKVswXTtcXG4gICAgICAgIH0gY2F0Y2ggKGVycikge31cXG4gICAgICAgIHQgPSBTdHJpbmcodCkucmVwbGFjZSgvKFxcXFxkXFxcXGQpKFxcXFxkXFxcXGQpJC8sIFxcXCItJDEtJDJcXFwiKTtcXG4gICAgICAgIGQgPSBbXTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgZGVzYzogXFxcIjxiPuKAnOKAnFxcXCIgKyB2ZXJzaW9uICsgXFxcIiA9PiBcXFwiICsgdCArIFxcXCLigJ3igJ08L2I+XFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImJpZ19iaWdfYmxhbmtfYmxvY2tcXFwiXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXRlbSwgXFxcIi5tZG8mJkh0bWxcXFwiKS5yZXBsYWNlKC8oPFxcXFwvc3Bhbj4pP1xcXFxzKjxzcGFuPi9naSwgXFxcIjxicj5cXFwiKSxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCdcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImJpZ19ibGFua19ibG9ja1xcXCJcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIjxiPuKAnOKAnOehruWumuabtOaWsOKAneKAnTwvYj5cXFwiLmJpZygpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgdXJsOiAkKFxcXCJoaWtlcjovL2VtcHR5I25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1xcXCIpLmxhenlSdWxlKCh1cmwsIHB3ZCwgaXRlbSkgPT4ge1xcbiAgICAgICAgICAgICAgICBpZiAoZ2V0TXlWYXIoJ1J1bGVfbm91cGRhdGUnKSA9PSAnMScpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBiYWNrKHRydWUpLCBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgbGV0IHtcXG4gICAgICAgICAgICAgICAgICAgIG9uZV91cmxcXG4gICAgICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2xhbnpvdT9ydWxlPeatjOivjemAgumFjVxcXCIpO1xcbiAgICAgICAgICAgICAgICBsZXQgSyA9IG9uZV91cmwodXJsLCBwd2QsIDEsIDAsIGl0ZW0pO1xcbiAgICAgICAgICAgICAgICBpZiAoIUspIHtcXG4gICAgICAgICAgICAgICAgICAgIEsgPSBvbmVfdXJsKHVybCwgcHdkLCAxKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoIUspIHtcXG4gICAgICAgICAgICAgICAgICAgIEsgPSBvbmVfdXJsKHVybC5zcGxpdChcXFwiP1xcXCIpWzBdLCBwd2QsIDEpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmIChLKSB7XFxuICAgICAgICAgICAgICAgICAgICBmID0gXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvX2ZpbGVTZWxlY3RfcnVsZS5qc29uXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgIGRvd25sb2FkRmlsZShLLCBmKTtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdSdWxlX25vdXBkYXRlJywgJzEnKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiXFxcXHU2ZDc3XFxcXHU5NjE0XFxcXHU4OWM2XFxcXHU3NTRjXFxcXHVmZmU1aG9tZV9ydWxlX3VybFxcXFx1ZmZlNVxcXCIgKyBnZXRQYXRoKGYpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+iOt+WPluS4i+i9vemTvuaOpeWksei0pVxcXCI7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9LCB1cmwsIHB3ZCwgaXRlbSksXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgIH1cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLinbvmlK/mjIHkvZzogIVcIixcInBhdGhcIjpcImRvbmF0ZVwiLFwicnVsZVwiOlwianM6XFxubGV0IGQgPSBbXTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIuaNkOi1oC/mlK/mjIFcXFwiLFxcbiAgICBkZXNjOiBcXFwi6L+Z5Liq5o2Q6LWg5LiN6IO95Li65L2g5bim5p2l54m55p2D77yM5L2G5oKo55qE5pSv5oyB5piv5oiR5pu05paw5Yib5L2c55qE5Yqo5Yqb44CCXFxcIixcXG4gICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgdXJsOiBcXFwidG9hc3Q6Ly/mhJ/osKLmgqjnmoTmlK/mjIFcXFwiXFxufSk7XFxuZC5wdXNoKHtcXG4gICAgY29sX3R5cGU6IFxcXCJwaWNfMV9mdWxsXFxcIixcXG4gICAgdXJsOiBcXFwiaHR0cHM6Ly9naXRlZS5jb20vVGhvbWFzWW91L2hhaWt1by9yYXcvbWFzdGVyL0lNR18yMDI0MDExMl8wODEzNTUucG5nXFxcIixcXG4gICAgcGljX3VybDogXFxcImh0dHBzOi8vZ2l0ZWUuY29tL1Rob21hc1lvdS9oYWlrdW8vcmF3L21hc3Rlci9JTUdfMjAyNDAxMTJfMDgxMzU1LnBuZ1xcXCJcXG59KTtcXG5kLnB1c2goe1xcbiAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICB0aXRsZTogXFxcIuKAnOKAnOKAneKAnVxcXCIgKyBcXFwi5Zu+54mH5Yqg6L2957yT5oWi6K+356iN562JXFxcIi5zbWFsbCgpLmZvbnRjb2xvcihcXFwiR3JheVxcXCIpLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICB9XFxufSk7XFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4p246KeE5YiZ5YiX6KGoXCIsXCJwYXRoXCI6XCJydWxlTGlzdFwiLFwicnVsZVwiOlwianM6XFxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgYXJyID0gJC5yZXF1aXJlKCd0b29sP3J1bGU9dWNra+S6kScpLmdldFZhcmlhYmxlcygpO1xcbiAgICBmb3IgKHQgb2YgYXJyKSB7XFxuICAgICAgICBjbGVhck15VmFyKHQpO1xcbiAgICB9XFxufSkpO1xcbmV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2xpYj9ydWxlPXVja2vkupEnLCB7fSkpLnJ1bGUpO1xcbmQgPSBbXTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+aWsOWinuinhOWImScsXFxuICAgIGNvbF90eXBlOiAndGV4dF8yJyxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgIGFyciA9ICQucmVxdWlyZSgndG9vbD9ydWxlPXVja2vkupEnKS5nZXRWYXJpYWJsZXMoKTtcXG4gICAgICAgIGZvciAodCBvZiBhcnIpIHtcXG4gICAgICAgICAgICBjbGVhck15VmFyKHQpO1xcbiAgICAgICAgfVxcbiAgICAgICAgY2xlYXJNeVZhcihcXFwicnVsZV91aWRcXFwiKTtcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3J1bGVFZGl0I25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5Iz9wYWdlVGl0bGU96KeE5YiZ57yW6L6RJnJ1bGU9dWNra+S6kSdcXG4gICAgfSlcXG59KTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+WIhuS6q+mAieS4rScsXFxuICAgIGNvbF90eXBlOiAndGV4dF8yJyxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgIHp5ID0gc3RvcmFnZTAuZ2V0TXlWYXIoXFxcImp4bGlzdDJcXFwiLCB7fSk7XFxuICAgICAgICB6dSA9IE9iamVjdC5rZXlzKHp5KTtcXG4gICAgICAgIGlmICh6dS5sZW5ndGggPT0gMCkge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/msqHmnInpgInkuK3op4TliJlcXFwiO1xcbiAgICAgICAgfVxcbiAgICAgICAgcnVsZXMgPSB6dS5sZW5ndGggPT0gMSA/IFt6eVt6dVswXV1dIDogenUubWFwKGtleSA9PiB6eVtrZXldKTtcXG4gICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcInRvb2w/cnVsZT11Y2tr5LqRXFxcIikuZ2V0UnVsZVBhc3RlKHJ1bGVzLCAxKTtcXG4gICAgfSlcXG59KTtcXG5cXG5cXG5cXG5cXG5cXG5wbGF0Zm9ybSA9IGdldE15VmFyKCdwbGF0Zm9ybScsICfnu7zlkIgnKTtcXG5bXFxcIue7vOWQiFxcXCJdLmNvbmNhdChncm91cHMpLm1hcChncm91cCA9PiB7XFxuICAgIGlmIChncm91cCA9PSBwbGF0Zm9ybSlcXG4gICAgICAgIHBsYXRmb3JtMiA9IFJpY2goU3Ryb25nKENvbG9yKGdyb3VwKSkpO1xcbiAgICBlbHNlXFxuICAgICAgICBwbGF0Zm9ybTIgPSBncm91cDtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBwbGF0Zm9ybTIsXFxuICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGdyb3VwKSA9PiB7XFxuICAgICAgICAgICAgcHV0TXlWYXIoJ3BsYXRmb3JtJywgZ3JvdXApO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgIH0sIGdyb3VwKSxcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGxvbmdDbGljazogW3tcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5Yig6ZmkJyArIGdyb3VwLnJlcGxhY2UoJ+e7vOWQiCcsICflhajpg6gnKSArICfop4TliJknLFxcbiAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKGdyb3VwKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJCQgPSAkLnJlcXVpcmUoJ2NvbmZpZ3M/cnVsZT11Y2tr5LqRJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdyb3VwID09IFxcXCLnu7zlkIhcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZUZpbGUoJCQucnVsZVBhdGgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGVzID0gJCQuZ2V0SnNvbl8xKFxcXCJncm91cFxcXCIsIGdyb3VwKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQuc2F2ZUpzb24ocnVsZXMpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICB9LCBncm91cClcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfliIbkuqsnICsgZ3JvdXAucmVwbGFjZSgn57u85ZCIJywgJ+WFqOmDqCcpICsgJ+inhOWImScsXFxuICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygoZ3JvdXApID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAkJCA9ICQucmVxdWlyZSgnY29uZmlncz9ydWxlPXVja2vkupEnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdXAgPT0gXFxcIue7vOWQiFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsZXMgPSAkJC5nZXRKc29uKCkuc2xpY2UoMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsZXMgPSAkJC5nZXRKc29uXzEoXFxcImdyb3VwXFxcIiwgZ3JvdXAsIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJ0b29sP3J1bGU9dWNra+S6kVxcXCIpLmdldFJ1bGVQYXN0ZShydWxlcyk7XFxuICAgICAgICAgICAgICAgICAgICB9LCBncm91cClcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIF1cXG4gICAgICAgIH1cXG4gICAgfSk7XFxufSk7XFxuZC5wdXNoKHtcXG4gICAgY29sX3R5cGU6ICdibGFua19ibG9jaydcXG59KTtcXG5ydWxlcyA9ICQucmVxdWlyZSgnY29uZmlncz9ydWxlPXVja2vkupEnKS5nZXRHcm91cEpzb24oZmFsc2UsIFxcXCJncm91cFxcXCIsIHBsYXRmb3JtLCBcXFwi57u85ZCIXFxcIik7XFxuXFxuXFxuXFxuXFxuXFxucGlkID0gTnVtYmVyKGdldE15VmFyKCdwaWQnKSkgfHwgMDtcXG5uYW1lcyA9ICQucmVxdWlyZSgnY29uZmlncz9ydWxlPXVja2vkupEnKS5nZXRHcm91cE5hbWVzKHJ1bGVzLCBcXFwic2VhcmNoX2dyb3VwXFxcIik7XFxuaWYgKHBpZCA+IG5hbWVzLmxlbmd0aCAtIDEpIHtcXG4gICAgcGlkID0gMDtcXG59XFxubmFtZXMubWFwKChncm91cCwgaSkgPT4ge1xcbiAgICBpZiAoaSA9PSBwaWQpXFxuICAgICAgICBwbGF0Zm9ybTIgPSBSaWNoKFN0cm9uZyhDb2xvcihncm91cCkpKTtcXG4gICAgZWxzZVxcbiAgICAgICAgcGxhdGZvcm0yID0gZ3JvdXA7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogcGxhdGZvcm0yLFxcbiAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChpKSA9PiB7XFxuICAgICAgICAgICAgcHV0TXlWYXIoJ3BpZCcsIGkpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgfSwgaSksXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn5YiG5LqrJyArIGdyb3VwLnJlcGxhY2UoJ+WFqOWFqCcsICflhajpg6gnKSArICfop4TliJknLFxcbiAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygocGxhdGZvcm0sIGdyb3VwKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAkJCA9ICQucmVxdWlyZSgnY29uZmlncz9ydWxlPXVja2vkupEnKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChwbGF0Zm9ybSA9PSBcXFwi57u85ZCIXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGVzID0gJCQuZ2V0SnNvbigpLnNsaWNlKDEpO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBydWxlcyA9ICQkLmdldEpzb25fMShcXFwiZ3JvdXBcXFwiLCBwbGF0Zm9ybSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdXAgIT0gXFxcIuWFqOWFqFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBydWxlcyA9IHJ1bGVzLmZpbHRlcihmID0+IGYuc2VhcmNoX2dyb3VwID09IGdyb3VwKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcInRvb2w/cnVsZT11Y2tr5LqRXFxcIikuZ2V0UnVsZVBhc3RlKHJ1bGVzKTtcXG4gICAgICAgICAgICAgICAgfSwgcGxhdGZvcm0sIGdyb3VwKVxcbiAgICAgICAgICAgIH1dXFxuICAgICAgICB9XFxuICAgIH0pO1xcbn0pO1xcbmQucHVzaCh7XFxuICAgIGNvbF90eXBlOiAnbGluZSdcXG59KTtcXG5wbGF0Zm9ybTIgPSBuYW1lc1twaWRdO1xcbnJ1bGVzID0gJC5yZXF1aXJlKCdjb25maWdzP3J1bGU9dWNra+S6kScpLmdldEdyb3VwSnNvbihydWxlcywgXFxcInNlYXJjaF9ncm91cFxcXCIsIHBsYXRmb3JtMiwgXFxcIuWFqOWFqFxcXCIpLnNsaWNlKDEpO1xcblxcblxcblxcblxcblxcblxcbmlmIChydWxlcy5sZW5ndGggPT0gMCkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFJpY2goU3Ryb25nKENvbG9yKFxcXCLmsqHmnInop4TliJlcXFwiKSkpLFxcbiAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXG4gICAgICAgIH1cXG4gICAgfSk7XFxufSBlbHNlIHtcXG4gICAganhsaXN0MiA9IHN0b3JhZ2UwLmdldE15VmFyKFxcXCJqeGxpc3QyXFxcIiwge30pO1xcbiAgICBydWxlcy5tYXAoKF8sIGlpKSA9PiB7XFxuICAgICAgICBtID0gbWQ1KF8uZ3JvdXAgKyBfLnRpdGxlKTtcXG4gICAgICAgIGkgPSAhanhsaXN0MlttXTtcXG4gICAgICAgIGQxID0gXy5leHBsb3JlX2VuYWJsZWQgPT0gXFxcIjFcXFwiO1xcbiAgICAgICAgZDIgPSAnYnkgJyArIF8uYXV0aG9yO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogU3Ryb25nKGkgPyBfLnRpdGxlIDogQ29sb3IoXy50aXRsZSkpLFxcbiAgICAgICAgICAgIGRlc2M6IGQxID8gQ29sb3IoZDIsIFxcXCIjMkU1RDhFXFxcIikgOiBkMixcXG4gICAgICAgICAgICB1cmw6ICQoW1xcXCLliIbkuqtcXFwiLCBcXFwi57yW6L6RXFxcIiwgXFxcIuWIoOmZpFxcXCIsIFxcXCLnp7vliqhcXFwiXS5jb25jYXQoW2kgPyBcXFwi6YCJ5Lit6KeE5YiZXFxcIiA6IFxcXCLlj5bmtojpgInkuK1cXFwiLCBkMSA/IFxcXCLnpoHnlKjlj5HnjrBcXFwiIDogXFxcIuWQr+eUqOWPkeeOsFxcXCJdKSwgMiwgJ+mAieaLqeaJqeWxleaTjeS9nCcpLnNlbGVjdCgobSwgXykgPT4ge1xcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGlucHV0KSB7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlICfliIbkuqsnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcInRvb2w/cnVsZT11Y2tr5LqRXFxcIikuZ2V0UnVsZVBhc3RlKFtfXSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlICfnvJbovpEnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyciA9ICQucmVxdWlyZSgndG9vbD9ydWxlPXVja2vkupEnKS5nZXRWYXJpYWJsZXMoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHQgb2YgYXJyKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIodCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyciA9IE9iamVjdC5rZXlzKF8pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodCBvZiBhcnIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIodCwgX1t0XSB8fCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdydWxlX3VpZCcsIG0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdzZWFyY2hfZW5hYmxlZCcsIF8uc2VhcmNoX2VuYWJsZWQgfHwgXFxcIjBcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignZXhwbG9yZV9lbmFibGVkJywgXy5leHBsb3JlX2VuYWJsZWQgfHwgXFxcIjBcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9ydWxlRWRpdCNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSM/cGFnZVRpdGxlPeinhOWImee8lui+kSZydWxlPXVja2vkupEnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAn5Yig6ZmkJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwi56Gu5a6a5Yig6ZmkXFxcIiArIF8uZ3JvdXAgKyBcXFwi6KeE5YiZ4oCcXFxcIiArIF8udGl0bGUgKyAn4oCd5ZCX77yfXFxcXG7mraTmk43kvZzkuI3lj6/pgIbvvIzor7fosKjmhY7pgInmi6njgIInKS5jb25maXJtKChtKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkID0gJC5yZXF1aXJlKCdjb25maWdzP3J1bGU9dWNra+S6kScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlcyA9ICQkLmdldEpzb25fMihtKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQuc2F2ZUpzb24ocnVsZXMpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgbSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlICfnp7vliqgnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHp5ID0gJC5yZXF1aXJlKCdjb25maWdzP3J1bGU9dWNra+S6kScpLmdldEpzb25fMihtKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB6dSA9IHp5LnNsaWNlKDEpLm1hcChfID0+IF8udGl0bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKHp1LmNvbmNhdChcXFwi5pyA5ZCO6Z2iXFxcIiksIDIsICfor7fpgInmi6nnp7vliqjkvY3nva4nKS5zZWxlY3QoKHp5LCB6dSwgXykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0genUuaW5kZXhPZihpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09IC0xKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenkucHVzaChfKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenkuc3BsaWNlKGkgKyAxLCAwLCBfKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5yZXF1aXJlKCdjb25maWdzP3J1bGU9dWNra+S6kScpLnNhdmVKc29uKHp5KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHp5LCB6dSwgXyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlICfpgInkuK3op4TliJknOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGp4bGlzdDIgPSBzdG9yYWdlMC5nZXRNeVZhcihcXFwianhsaXN0MlxcXCIsIHt9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBqeGxpc3QyW21dID0gXztcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihcXFwianhsaXN0MlxcXCIsIGp4bGlzdDIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+WPlua2iOmAieS4rSc6XFxuICAgICAgICAgICAgICAgICAgICAgICAganhsaXN0MiA9IHN0b3JhZ2UwLmdldE15VmFyKFxcXCJqeGxpc3QyXFxcIiwge30pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBqeGxpc3QyW21dO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXCJqeGxpc3QyXFxcIiwganhsaXN0Mik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAn5ZCv55So5Y+R546wJzpcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+emgeeUqOWPkeeOsCc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgJC5yZXF1aXJlKCdjb25maWdzP3J1bGU9dWNra+S6kScpLmdldEpzb25fMihtLCBcXFwiZXhwbG9yZV9lbmFibGVkXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSwgbSwgXyksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcbiAgICAgICAgICAgIGltZzogXy5pY29uXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IF8uZ3JvdXAgKyAn5LioJyArIF8uc2VhcmNoX2dyb3VwICsgJ+S4qCcgKyAoXy54NV91cmwgfHwgKF8udXJsID8gXy51cmwgOiBfLnNlYXJjaF91cmwpLnNwbGl0KFxcXCIvXFxcIikuc2xpY2UoMCwgMykuam9pbihcXFwiL1xcXCIpKSxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKG0pID0+IHtcXG4gICAgICAgICAgICAgICAgJC5yZXF1aXJlKCdjb25maWdzP3J1bGU9dWNra+S6kScpLmdldEpzb25fMihtLCBcXFwic2VhcmNoX2VuYWJsZWRcXFwiKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIH0sIG0pLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9pY29uJyxcXG4gICAgICAgICAgICBpbWc6ICdodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL21lc3N5LycgKyAoXy5zZWFyY2hfZW5hYmxlZCA9PSAnMScgPyA1NSA6IDYzKSArICcuc3ZnJyxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcbiAgICAgICAgfSk7XFxuICAgIH0pO1xcbn1cXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLinbznqIvluo/pppbpobVcIixcInBhdGhcIjpcImhvbWVcIixcInJ1bGVcIjpcImpzOlxcbmV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2xpYj9ydWxlPXVja2vkupEnLCB7fSkpLnJ1bGUpO1xcbmFkZExpc3RlbmVyKCdvblJlZnJlc2gnLCAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgcHV0TXlWYXIoJ2tleXdvcmQyJywgZ2V0TXlWYXIoJ2tleXdvcmQnKSk7XFxufSkpO1xcbmQgPSBbXTtcXG5sZXQgcnVsZXMgPSAkLnJlcXVpcmUoXFxcImNvbmZpZ3M/cnVsZT11Y2tr5LqRXFxcIikuZ2V0SnNvbigpO1xcblxcblxcblxcbnNlYXJjaF9ydWxlID0gcnVsZXMuZmlsdGVyKF8gPT4gXy5zZWFyY2hfZW5hYmxlZCA9PSBcXFwiMVxcXCIgJiYgXy5zZWFyY2hfdXJsICE9IFxcXCJcXFwiICYmIF8uc2VhcmNoRmluZCAhPSBcXFwiXFxcIik7XFxuc2VhcmNoX3R5cGUgPSAkLnJlcXVpcmUoXFxcImNvbmZpZ3M/cnVsZT11Y2tr5LqRXFxcIikuZ2V0R3JvdXBOYW1lcyhzZWFyY2hfcnVsZSwgXFxcImdyb3VwXFxcIik7XFxucnVsZVR5cGUgPSBnZXRNeVZhcihcXFwicnVsZVR5cGVcXFwiLCBcXFwi57u85ZCIXFxcIik7XFxuc2VhcmNoX3J1bGUgPSAkLnJlcXVpcmUoXFxcImNvbmZpZ3M/cnVsZT11Y2tr5LqRXFxcIikuZ2V0R3JvdXBKc29uKHNlYXJjaF9ydWxlLCBcXFwiZ3JvdXBcXFwiLCBydWxlVHlwZSwgXFxcIue7vOWQiFxcXCIpO1xcbnNlYXJjaF9ncm91cCA9ICQucmVxdWlyZShcXFwiY29uZmlncz9ydWxlPXVja2vkupFcXFwiKS5nZXRHcm91cE5hbWVzKHNlYXJjaF9ydWxlLCBcXFwic2VhcmNoX2dyb3VwXFxcIik7XFxucnVsZUdyb3VwID0gTnVtYmVyKGdldE15VmFyKFxcXCJydWxlR3JvdXBcXFwiKSkgfHwgMDtcXG5pZiAocnVsZUdyb3VwID4gc2VhcmNoX2dyb3VwLmxlbmd0aCAtIDEpIHtcXG4gICAgcnVsZUdyb3VwID0gMDtcXG59XFxuc2VhcmNoX3J1bGUgPSAkLnJlcXVpcmUoXFxcImNvbmZpZ3M/cnVsZT11Y2tr5LqRXFxcIikuZ2V0R3JvdXBKc29uKHNlYXJjaF9ydWxlLCBcXFwic2VhcmNoX2dyb3VwXFxcIiwgc2VhcmNoX2dyb3VwW3J1bGVHcm91cF0sIFxcXCLlhajlhahcXFwiKTtcXG5sZXQgc2lkID0gTnVtYmVyKGdldE15VmFyKFxcXCJzaWRcXFwiKSkgfHwgMDtcXG5pZiAoc2lkID4gc2VhcmNoX3J1bGUubGVuZ3RoIC0gMSkge1xcbiAgICBzaWQgPSAwO1xcbn1cXG5pZiAoc2lkKSB7XFxuICAgIGRhdGEgPSBbc2VhcmNoX3J1bGVbc2lkXV07XFxufSBlbHNlIHtcXG4gICAgZGF0YSA9IHNlYXJjaF9ydWxlLnNsaWNlKDEpO1xcbn1cXG5cXG5cXG5cXG5cXG5sZXQgZXhwbG9yZV9ydWxlID0gcnVsZXMuZmlsdGVyKF8gPT4gXy5leHBsb3JlX2VuYWJsZWQgPT0gXFxcIjFcXFwiICYmIF8udXJsICE9IFxcXCJcXFwiICYmIChfLmV4cGxvcmVfWDUgPT0gXFxcIjFcXFwiIHx8IF8uZmluZF9ydWxlICE9IFxcXCJcXFwiKSk7XFxubGV0IHRpZCA9IE51bWJlcihnZXRNeVZhcihcXFwidGlkXFxcIikpIHx8IDA7XFxuaWYgKHRpZCA+IGV4cGxvcmVfcnVsZS5sZW5ndGggLSAxKSB7XFxuICAgIHRpZCA9IDA7XFxufVxcbmxldCBydWxlID0gXyA9IGV4cGxvcmVfcnVsZVt0aWRdO1xcbmxldCBydWxlX3g1ID0gXy5leHBsb3JlX1g1ID09IFxcXCIxXFxcIjtcXG5pZiAocnVsZV94NSkge1xcbiAgICBpZiAoIV8ueDVfdXJsICYmIChfLnVybCA/IF8udXJsIDogXy5zZWFyY2hfdXJsKS5tYXRjaCgvZnkoQWxsfGNsYXNzfGFyZWF8c29ydHx5ZWFyfHBhZ2UpLykpIHtcXG4gICAgICAgIF8ueDVfdXJsID0gKF8udXJsID8gXy51cmwgOiBfLnNlYXJjaF91cmwpLnNwbGl0KFxcXCIvXFxcIikuc2xpY2UoMCwgMykuam9pbihcXFwiL1xcXCIpO1xcbiAgICB9XFxufSBlbHNlIHtcXG4gICAgaWYgKF9QQUdFKSAkLnJlcXVpcmUoJ25vdGljZT9ydWxlPXVja2vkupEnKSgpO1xcbiAgICBfLng1X2Rlc2MgPSAnMSc7XFxufVxcbmxldCBiYXNlVXJsLCBob21lX2Jhc2VVcmwgPSBnZXRSdWxlQmFzZVVybChfLnVybCk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuLy8gdG9wXFxuaWYgKF9QQUdFKSB7XFxuICAgIGV4cGxvcmVfcnVsZS5tYXAoKF8sIGkpID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFN0cm9uZyhcXFwi4oCc4oCcXFxcIiArICh0aWQgPT0gaSA/IF8udGl0bGUgKyBcXFwi4oCd4oCdXFxcIiA6IFxcXCLigJ3igJ1cXFwiICsgXy50aXRsZSkpLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaSkgPT4ge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcigna2V5d29yZDInLCBnZXRNeVZhcigna2V5d29yZCcpKTtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3RpZCcsIGkpO1xcbiAgICAgICAgICAgICAgICBmb3IgKHQgb2YgW1xcXCJjbGFzc1xcXCIsIFxcXCJhcmVhXFxcIiwgXFxcInllYXJcXFwiLCBcXFwic29ydFxcXCIsIFxcXCJGeUFsbFxcXCJdKSB7XFxuICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKHQgKyBcXFwiX2lcXFwiKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIH0sIGkpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgICAgIH0pO1xcbiAgICB9KTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiBcXFwieDVfd2Vidmlld19zaW5nbGVcXFwiLFxcbiAgICAgICAgdXJsOiBfLng1X2Rlc2MgPT0gJzEnIHx8IF8ueDVfdXJsIHx8IF8udXJsLFxcbiAgICAgICAgZGVzYzogXy54NV9kZXNjID09ICcxJyA/ICcwJyA6ICdzY3JlZW4tMTMzJiZmbG9hdCcsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGNhbkJhY2s6IHRydWUsXFxuICAgICAgICAgICAgdWE6IF8ueDVfdWEgPyAoXy54NV91YSA9PSBcXFwiUENfVUFcXFwiID8gUENfVUEgOiBfLng1X3VhKSA6IE1PQklMRV9VQSxcXG4gICAgICAgICAgICByZWZlcmVyOiBfLng1X3JlZmVyZXIsXFxuICAgICAgICAgICAganM6IF8ueDVfanMsXFxuICAgICAgICAgICAganNMb2FkaW5nSW5qZWN0OiAhIV8ueDVfanNMb2FkaW5nSW5qZWN0LFxcbiAgICAgICAgICAgIGF1dG9QbGF5OiAhIV8ueDVfYXV0b1BsYXksXFxuICAgICAgICAgICAgZmxvYXRWaWRlbzogISFfLng1X2Zsb2F0VmlkZW8sXFxuICAgICAgICAgICAgaW1nTG9uZ0NsaWNrOiAhXy54NV9pbWdMb25nQ2xpY2ssXFxuICAgICAgICAgICAgc2hvd1Byb2dyZXNzOiAhXy54NV9zaG93UHJvZ3Jlc3MsXFxuICAgICAgICAgICAgYmxvY2tSdWxlczogZXZhbChfLng1X2Jsb2NrUnVsZXMpIHx8IFtdLFxcbiAgICAgICAgICAgIHVybEludGVyY2VwdG9yOiAkLnRvU3RyaW5nKCh1cmxJbnRlcmNlcHRvcl9qcywgeDVVcmwpID0+IHtcXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0LmluY2x1ZGVzKFxcXCJhbGl5dW5kcml2ZS5jb20vXFxcIikgfHwgaW5wdXQuaW5jbHVkZXMoXFxcImFsaXl1bmRyaXZlLm5ldC9cXFwiKSB8fCBpbnB1dC5pbmNsdWRlcyhcXFwiYWxpcGFuLmNvbS9cXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQudG9TdHJpbmcoKHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZiYS5vcGVuKEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsZTogJ+S6keebmOWQmy7nroAnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvYWxpeXVuI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5Iz9ydWxlPeS6keebmOWQmy7nroAmcGFnZT1meXBhZ2UmcmVhbHVybD1cXFwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHVybClcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XFxuICAgICAgICAgICAgICAgICAgICB9LCBpbnB1dClcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dC5pbmNsdWRlcyhcXFwicXVhcmsuY25cXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQudG9TdHJpbmcoKHVybCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZiYS5vcGVuKEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLlpLjlhYvnvZHnm5hcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvcXVhcmtMaXN0I25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5Iz9ydWxlPXVja2vkupEmcmVhbHVybD1cXFwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHVybCksXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpXFxuICAgICAgICAgICAgICAgICAgICB9LCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgbGV0IHg1X3VybEludGVyY2VwdG9yID0gbmV3IEZ1bmN0aW9uKFxcXCJpbnB1dFxcXCIsIFxcXCJ4NVVybFxcXCIsIHVybEludGVyY2VwdG9yX2pzKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHg1X3VybEludGVyY2VwdG9yKGlucHV0LCB4NVVybCk7XFxuICAgICAgICAgICAgfSwgXy54NV91cmxJbnRlcmNlcHRvciwgXFxcImhpa2VyOi8vcGFnZS9ydWxlSG9tZSNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSM/cnVsZT11Y2tr5LqRJnBhZ2U9ZnlwYWdlJnJ1bGVOYW1lPVxcXCIgKyBfLnRpdGxlICsgXFxcIiZydWxlR3JvdXA9XFxcIiArIF8uZ3JvdXAgKyBcXFwiJmJhc2VVcmw9XFxcIilcXG4gICAgICAgIH1cXG4gICAgfSk7XFxufVxcblxcblxcblxcbmlmIChydWxlX3g1KSB7IC8vIHg1XFxuICAgIGlmIChfLng1X2Rlc2MgPT0gJzEnKSB7IC8vIOiHquWumuS5iemmlumhtVxcbiAgICAgICAgZXZhbChfLnByZVJ1bGUpO1xcbiAgICAgICAgZXZhbChfLng1X2hvbWUpO1xcbiAgICAgICAgaWYgKHJ1bGUuU2VhcmNoICYmIHJ1bGUuc2VhcmNoX3VybCAhPSBcXFwiXFxcIiAmJiBydWxlLnNlYXJjaEZpbmQgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICBkYXRhID0gW3J1bGVdO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5q2j5Zyo5pCc57Si4oCc4oCcXFxcIiArIGtleXdvcmQgKyBcXFwi4oCd4oCd77yM5Yqg6L2956ysXFxcIiArIHBhZ2UgKyBcXFwi6aG15LitLi4uXFxcIixcXG4gICAgICAgICAgICAgICAgcGljX3VybDogXFxcImh0dHBzOi8vaGlrZXJmYW5zLmNvbS93ZWlzeXIvaW1nL0xvYWRpbmcxLmdpZlxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBfUEFHRSA/IFxcXCJwaWNfMV9jZW50ZXJcXFwiIDogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGlkOiBwYWdlaWRcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICB9XFxufSBlbHNlIHsgLy8g5pCc57SiL+WPkeeOsFxcbiAgICBpZiAoX1BBR0UpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZV9ibGFuaydcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogU3Ryb25nKFxcXCLmiJHnmoTmlLbol49cXFwiKSxcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2NvbGxlY3Rpb24/cnVsZT1cXFwiICsgaWQsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uX3NtYWxsXzNcXFwiLFxcbiAgICAgICAgICAgIGltZzogXFxcImhpa2VyOi8vaW1hZ2VzL2ljb25fZG93bmxvYWRcXFwiXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6IFN0cm9uZyhcXFwi5Y6G5Y+y6K6w5b2VXFxcIiksXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9oaXN0b3J5P3J1bGU9XFxcIiArIGlkLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl9zbWFsbF8zXFxcIixcXG4gICAgICAgICAgICBpbWc6IFxcXCJoaWtlcjovL2ltYWdlcy9pY29uX2hpc1xcXCJcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogU3Ryb25nKFxcXCLop4TliJnnrqHnkIZcXFwiKSxcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvcnVsZUxpc3Qjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjP3BhZ2VUaXRsZT3op4TliJnnrqHnkIYmcnVsZT1cXFwiICsgaWQsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uX3NtYWxsXzNcXFwiLFxcbiAgICAgICAgICAgIGltZzogXFxcImhpa2VyOi8vaW1hZ2VzL2ljb25feGl1dGFuXFxcIlxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIHRpdGxlOiAn5pCc57SiJyxcXG4gICAgICAgICAgICBkZXNjOiAn5pCc57Si5YWz6ZSu6K+NIC8g5aS45YWL6ZO+5o6lJyxcXG4gICAgICAgICAgICB1cmw6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICBpbnB1dCA9IGlucHV0LnRyaW0oKTtcXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0Lm1hdGNoKC9xdWFyay5jbi4qXFxcXC9zXFxcXC8uKy8pKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS9xdWFya0xpc3Qjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjP3JlYWx1cmw9XFxcIiArIGVuY29kZVVSSUNvbXBvbmVudChpbnB1dCkgKyBcXFwiJnJ1bGU9dWNra+S6kSZzaGFyZVB3ZD1cXFwiO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0ICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcigna2V5d29yZDInLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogaWQgKyBcXFwiOnNlYXJjaFxcXCIsXFxuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZToga2V5d29yZCxcXG4gICAgICAgICAgICAgICAgb25DaGFuZ2U6IFxcXCJwdXRNeVZhcigna2V5d29yZCcsaW5wdXQpXFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogUmljaChTdHJvbmcoQ29sb3IocnVsZVR5cGUsIFxcXCIjMzM5OWNjXFxcIikpKSxcXG4gICAgICAgICAgICB1cmw6ICQoW1xcXCLnu7zlkIhcXFwiXS5jb25jYXQoZ3JvdXBzKS5tYXAobmFtZSA9PiB7XFxuICAgICAgICAgICAgICAgIGlmIChuYW1lID09IHJ1bGVUeXBlKSB7XFxuICAgICAgICAgICAgICAgICAgICBuYW1lID0gUmljaChTdHJvbmcoQ29sb3IobmFtZSkpKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWFyY2hfdHlwZS5pbmRleE9mKG5hbWUpID09IC0xKSB7XFxuICAgICAgICAgICAgICAgICAgICBuYW1lID0gUmljaChcXFwiPFM+XFxcIiArIG5hbWUgKyBcXFwiPC9TPlxcXCIpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xcbiAgICAgICAgICAgIH0pLCAzLCBcXFwi6YCJ5oup5pCc57Si57G75YirXFxcIikuc2VsZWN0KCgpID0+IHtcXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0LmluZGV4T2YoXFxcIjxTPlxcXCIpICE9IC0xKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5rKh5pyJ5a+55bqU6KeE5YiZXFxcIjtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dC5pbmRleE9mKFxcXCI8XFxcIikgPT0gLTEpIHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdrZXl3b3JkMicsIGdldE15VmFyKCdrZXl3b3JkJykpO1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3J1bGVUeXBlJywgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihcXFwicnVsZUdyb3VwXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKFxcXCJzaWRcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgICAgIH0pO1xcbiAgICAgICAgc2VhcmNoX2dyb3VwLm1hcCgobmFtZSwgaSkgPT4ge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBydWxlR3JvdXAgPT0gaSA/IFJpY2goU3Ryb25nKENvbG9yKG5hbWUpKSkgOiBuYW1lLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdrZXl3b3JkMicsIGdldE15VmFyKCdrZXl3b3JkJykpO1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3J1bGVHcm91cCcsIGkpO1xcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihcXFwic2lkXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICAgICAgfSwgaSksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICBzZWFyY2hfcnVsZS5tYXAoKF8sIGkpID0+IHtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogc2lkID09IGkgPyBSaWNoKFN0cm9uZyhDb2xvcihfLnRpdGxlKSkpIDogXy50aXRsZSxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChpKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcigna2V5d29yZDInLCBnZXRNeVZhcigna2V5d29yZCcpKTtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdzaWQnLCBpKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgICAgICB9LCBpKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZV9ibGFuaydcXG4gICAgICAgIH0pO1xcbiAgICB9XFxuXFxuXFxuXFxuXFxuXFxuICAgIGlmIChfU09VKSB7XFxuICAgICAgICBpZiAoZGF0YS5sZW5ndGggPiAwKSB7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLliqDovb3nrKxcXFwiICsgcGFnZSArIFxcXCLpobXkuK3vvIzov5vluqbvvJoxL1xcXCIgKyBkYXRhLmxlbmd0aCxcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICBwaWNfdXJsOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGlkOiBwYWdlaWRcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSBlbHNlIGlmIChfUEFHRSkge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5rKh5pyJ5Y+v55So55qE5pCc57Si6KeE5YiZXFxcIixcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICBwaWNfdXJsOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGlkOiBwYWdlaWRcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICB9IGVsc2UgaWYgKF9QQUdFIHx8IHJ1bGUudXJsLm1hdGNoKFxcXCJmeXBhZ2VcXFwiKSkge1xcbiAgICAgICAgaWYgKF9QQUdFKSB7XFxuICAgICAgICAgICAgaWYgKHJ1bGUudGl0bGUgIT0gXFxcIuiBmuaQnFxcXCIpIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+JyArIENvbG9yKHJ1bGUudGl0bGUsICcjZmY2NjAxJykgKyAnPC9iPicsXFxuICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgodXJsKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBmb3IgKHQgb2YgW1xcXCJjbGFzc1xcXCIsIFxcXCJhcmVhXFxcIiwgXFxcInllYXJcXFwiLCBcXFwic29ydFxcXCIsIFxcXCJGeUFsbFxcXCJdKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcih0ICsgXFxcIl9pXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXJsO1xcbiAgICAgICAgICAgICAgICB9LCBcXFwiaGlrZXI6Ly9wYWdlL3J1bGVIb21lP3J1bGU9dWNra+S6kSZwYWdlPWZ5cGFnZSZydWxlTmFtZT1cXFwiICsgcnVsZS50aXRsZSArIFxcXCImcnVsZUdyb3VwPVxcXCIgKyBydWxlLmdyb3VwKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXG4gICAgICAgICAgICAgICAgaW1nOiBydWxlLmljb24sXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICBob21lOiAxXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBnZXRSdWxlR3JvdXAoKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGJhc2VVcmwgPSBob21lX2Jhc2VVcmw7XFxuICAgICAgICBldmFsKHJ1bGUucHJlUnVsZSk7XFxuICAgICAgICBldmFsKHJ1bGUuZmluZF9ydWxlKTtcXG4gICAgfVxcbn1cXG5fUEFHRSA/IHNldFByZVJlc3VsdChkKSA6IHNldFJlc3VsdChkKTtcXG5kZWxldGVJdGVtQnlDbHMoJ2xvYWRpbmdfZ2lmJyk7XFxuXFxuXFxuXFxuLy8g5pCc57SiXFxuaWYgKCghcnVsZV94NSB8fCAocnVsZS5TZWFyY2ggJiYgcnVsZS5zZWFyY2hfdXJsICE9IFxcXCJcXFwiICYmIHJ1bGUuc2VhcmNoRmluZCAhPSBcXFwiXFxcIikpICYmIF9TT1UgJiYgZGF0YS5sZW5ndGggPiAwKSB7XFxuICAgIHNldEhpc3RvcnlLZXl3b3JkKCk7XFxuICAgIGxldCB0YXNrcyA9IGRhdGEubWFwKGl0ID0+IHtcXG4gICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgZnVuYzogZnVuY3Rpb24ocnVsZSkge1xcbiAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgcGFnZSA9IE1ZX1BBR0U7XFxuICAgICAgICAgICAgICAgICAgICBiYXNlVXJsID0gZ2V0UnVsZUJhc2VVcmwocnVsZS5zZWFyY2hfdXJsLCBrZXl3b3JkKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYWdlID09IDEgfHwgcnVsZS5zZWFyY2hfdXJsLm1hdGNoKFxcXCJmeXBhZ2VcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwocnVsZS5wcmVSdWxlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2VhcmNoZmluZCA9IG5ldyBGdW5jdGlvbihcXFwicnVsZVxcXCIsIFxcXCJiYXNlVXJsXFxcIiwgXFxcImtleXdvcmRcXFwiLCBcXFwicGFnZVxcXCIsIHJ1bGUuc2VhcmNoRmluZCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxpc3QgPSBzZWFyY2hmaW5kKHJ1bGUsIGJhc2VVcmwsIGtleXdvcmQsIHBhZ2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbGlzdCkgcmV0dXJuIFtdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkZXNjVGlwcyA9IFxcXCLigJzigJzigJ3igJ1cXFwiICsgcnVsZS50aXRsZS5mb250Y29sb3IoXFxcIiNmMTNiNjZhXFxcIikgKyBcXFwiJm5ic3A7Jm5ic3A7XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzTGlzdCA9IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGl0IG9mIGxpc3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzTGlzdC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdC50aXRsZS5pbmNsdWRlcyhcXFwi4oCc4oCc4oCd4oCdXFxcIikgPyBpdC50aXRsZSA6IFxcXCLigJzigJzigJ3igJ1cXFwiICsgaXQudGl0bGUucmVwbGFjZSgvPFxcXFwvZW0+L2csIFxcXCJcXFwiKS5yZXBsYWNlKG5ldyBSZWdFeHAoa2V5d29yZCwgXFxcImdcXFwiKSwgXFxcIjxzdHJvbmc+PHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjogIzFFOTBGRlxcXFxcXFwiPlxcXCIgKyBrZXl3b3JkICsgXFxcIjwvc3Bhbj48L3N0cm9uZz5cXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IGRlc2NUaXBzICsgKGl0LmRlc2MgfHwgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBpdC51cmwsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGl0LmltZyB8fCBpdC5waWNfdXJsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IGl0LmNvbF90eXBlIHx8IFxcXCJ0ZXh0XzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IE9iamVjdC5hc3NpZ24oe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaGVyaXRUaXRsZTogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9QaWM6IHRydWVcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGl0LmV4dHJhIHx8IHt9KVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc0xpc3Q7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKF8udGl0bGUgKyBcXFwiOlxcXCIgKyBlLnRvU3RyaW5nKCkpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBwYXJhbTogaXQsXFxuICAgICAgICAgICAgaWQ6IFxcXCJ1Y2trX3J1bGVAXFxcIiArIGl0LnRpdGxlXFxuICAgICAgICB9XFxuICAgIH0pO1xcbiAgICBiYXRjaEV4ZWN1dGUodGFza3MsIHtcXG4gICAgICAgIGZ1bmM6IGZ1bmN0aW9uKHBhcmFtLCBpZCwgZXJyb3IsIHJlc3VsdCkge1xcbiAgICAgICAgICAgIHBhcmFtLmkgKz0gMTtcXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSB7XFxuICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW0oXFxcIl9ub3RoYXZlXFxcIik7XFxuICAgICAgICAgICAgICAgIGFkZEl0ZW1CZWZvcmUocGFnZWlkLCByZXN1bHQpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAocGFyYW0uaSA9PT0gcGFyYW0uYWxsKSB7XFxuICAgICAgICAgICAgICAgIGlmICghcmVzdWx0IHx8ICFyZXN1bHQubGVuZ3RoKSB7XFxuICAgICAgICAgICAgICAgICAgICBkZWxldGVJdGVtKFxcXCJfbm90aGF2ZVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgYWRkSXRlbUJlZm9yZShwYWdlaWQsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdXFxcIiArIFxcXCJ+fn7ku4DkuYjotYTmupDpg73msqHmnInlk6Z+fn5cXFwiLmZvbnRjb2xvcihcXFwiR3JheVxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFxcXCJfbm90aGF2ZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBkZWxldGVJdGVtKHBhZ2VpZCk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdXBkYXRlSXRlbShwYWdlaWQsIHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5Yqg6L2956ysXFxcIiArIE1ZX1BBR0UgKyBcXFwi6aG15Lit77yM6L+b5bqm77yaXFxcIiArIChwYXJhbS5pICsgMSkgKyBcXFwiL1xcXCIgKyBwYXJhbS5hbGwsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSxcXG4gICAgICAgIHBhcmFtOiB7XFxuICAgICAgICAgICAgYWxsOiBkYXRhLmxlbmd0aCxcXG4gICAgICAgICAgICBpOiAwLFxcbiAgICAgICAgfVxcbiAgICB9KTtcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLinbnop4TliJnnvJbovpFcIixcInBhdGhcIjpcInJ1bGVFZGl0XCIsXCJydWxlXCI6XCJqczpcXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9saWI/cnVsZT11Y2tr5LqRJywge30pKS5ydWxlKTtcXG5cXG5ncm91cCA9IGdldE15VmFyKCdncm91cCcsICflpLjlhYsnKTtcXG5zZWFyY2hfZW5hYmxlZCA9IGdldE15VmFyKCdzZWFyY2hfZW5hYmxlZCcsICcxJykgPT0gJzEnO1xcbmV4cGxvcmVfZW5hYmxlZCA9IGdldE15VmFyKCdleHBsb3JlX2VuYWJsZWQnLCAnMCcpID09ICcxJztcXG5cXG5ydWxlX3RpZCA9IGdldE15VmFyKCdydWxlX3RpZCcsICfln7rmnKwnKTtcXG5leHBsb3JlX1g1ID0gZ2V0TXlWYXIoJ2V4cGxvcmVfWDUnLCAnMCcpID09ICcxJztcXG50aW1lID0gTnVtYmVyKGdldE15VmFyKFxcXCJ0aW1lXFxcIikpIHx8IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xcblxcblxcblxcblxcblxcblxcblxcbmQgPSBbXTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogU3Ryb25nKENvbG9yKCc8Yj4nICsgZ3JvdXAgKyAn6LWE5rqQPC9iPicsICcjZmY2NjAxJykpLFxcbiAgICB1cmw6ICQoZ3JvdXBzLm1hcCh0aXRsZSA9PiB0aXRsZSA9PSBncm91cCA/IFJpY2goU3Ryb25nKENvbG9yKHRpdGxlKSkpIDogdGl0bGUpLCAyLCAn6YCJ5oup6KeE5YiZ5YiG57uEJykuc2VsZWN0KCgpID0+IHtcXG4gICAgICAgIGlmICghaW5wdXQubWF0Y2goL17igJjigJjigJnigJkvKSkge1xcbiAgICAgICAgICAgIHB1dE15VmFyKCdncm91cCcsIGlucHV0KTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICB9KSxcXG4gICAgaW1nOiBpY29uc1tncm91cF0sXFxuICAgIGNvbF90eXBlOiAnaWNvbl9zbWFsbF8zJ1xcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBDb2xvcignPGI+5ZCv55So5pCc57SiPC9iPicsICcjZmY2NjAxJyksXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoc2VhcmNoX2VuYWJsZWQpID0+IHtcXG4gICAgICAgIHB1dE15VmFyKCdzZWFyY2hfZW5hYmxlZCcsIHNlYXJjaF9lbmFibGVkKTtcXG4gICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgIH0sIHNlYXJjaF9lbmFibGVkID8gJzAnIDogJzEnKSxcXG4gICAgaW1nOiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tZXNzeS8nICsgKHNlYXJjaF9lbmFibGVkID8gNTUgOiA2MykgKyAnLnN2ZycsXFxuICAgIGNvbF90eXBlOiAnaWNvbl9zbWFsbF8zJ1xcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBDb2xvcignPGI+5ZCv55So5Y+R546wPC9iPicsICcjZmY2NjAxJyksXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoZXhwbG9yZV9lbmFibGVkKSA9PiB7XFxuICAgICAgICBwdXRNeVZhcignZXhwbG9yZV9lbmFibGVkJywgZXhwbG9yZV9lbmFibGVkKTtcXG4gICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgIH0sIGV4cGxvcmVfZW5hYmxlZCA/ICcwJyA6ICcxJyksXFxuICAgIGltZzogJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vbWVzc3kvJyArIChleHBsb3JlX2VuYWJsZWQgPyA1NSA6IDYzKSArICcuc3ZnJyxcXG4gICAgY29sX3R5cGU6ICdpY29uX3NtYWxsXzMnXFxufSk7XFxuXFxuW1xcXCLln7rmnKxcXFwiLCBcXFwi5pCc57SiXFxcIiwgXFxcIuWPkeeOsFxcXCIsIFxcXCLmm7/mjaJcXFwiLCBcXFwi5omp5bGVXFxcIl0ubWFwKG5hbWUgPT4ge1xcbiAgICBpID0gcnVsZV90aWQgPT0gbmFtZVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFJpY2goU3Ryb25nKGkgPyBDb2xvcihuYW1lKSA6IG5hbWUpKSxcXG4gICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgodGlkLCB0aWkpID0+IHtcXG4gICAgICAgICAgICBpZiAodGlpKSB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKCdydWxlX3RpZCcsIHRpZCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgIH0sIG5hbWUsICFpKSxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF81J1xcbiAgICB9KTtcXG59KTtcXG5pbnB1dF9wdXNoID0gKGRlc2MsIGlkLCB2YWx1ZSwganNvbiwgaGVpZ2h0KSA9PiB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBkZXNjOiBkZXNjLFxcbiAgICAgICAgdGl0bGU6IFxcXCI8Lz5cXFwiLFxcbiAgICAgICAgdXJsOiAkLnRvU3RyaW5nKChpZCkgPT4ge1xcbiAgICAgICAgICAgIGxldCBncm91cCA9ICQucmVxdWlyZShcXFwiY29uZmlncz9ydWxlPXVja2vkupFcXFwiKS5nZXRHcm91cE5hbWVzKDAsIFxcXCJzZWFyY2hfZ3JvdXBcXFwiKTtcXG4gICAgICAgICAgICBpZiAoIWdyb3VwLmxlbmd0aCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcIlxcXCI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiAkKGdyb3VwLCAzLCBcXFwi6YCJ5oup6KeE5YiZ5YiG57uEXFxcIikuc2VsZWN0KChpZCkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgZXh0cmEgPSBmaW5kSXRlbShpZCkuZXh0cmE7XFxuICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oaWQsIHtcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiBPYmplY3QuYXNzaWduKGV4dHJhLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBpbnB1dFxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSwgaWQpO1xcbiAgICAgICAgfSwgaWQpLFxcbiAgICAgICAgY29sX3R5cGU6ICdpbnB1dCcsXFxuICAgICAgICBleHRyYTogT2JqZWN0LmFzc2lnbih7XFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRNeVZhcihpZCwgdmFsdWUpLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiBgcHV0TXlWYXIoXFxcIiR7aWR9XFxcIiwgaW5wdXQpYCxcXG4gICAgICAgICAgICB0eXBlOiAndGV4dGFyZWEnLFxcbiAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogdHJ1ZSxcXG4gICAgICAgICAgICBoaWdobGlnaHQ6IHRydWUsXFxuICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQgfHwgNSxcXG4gICAgICAgICAgICBpZDogaWQsXFxuICAgICAgICB9LCBqc29uIHx8IHt9KVxcbiAgICB9KTtcXG59XFxuc3dpdGNoIChydWxlX3RpZCkge1xcbiAgICBjYXNlICfln7rmnKwnOlxcbiAgICAgICAgW1xcbiAgICAgICAgICAgIFsn5b+F5aGr77yM5rqQ5ZCN56ewJywgJ3RpdGxlJywgJyddLFxcbiAgICAgICAgICAgIFsn6YCJ5aGr77yM5rqQ5Zu+5qCHJywgJ2ljb24nLCAnJ10sXFxuICAgICAgICAgICAgWyfpgInloavvvIzmupDkvZzogIUnLCAnYXV0aG9yJywgJ+S9muWQjSddLFxcbiAgICAgICAgICAgIFsn6YCJ5aGr77yMSnNMaWInLCAncHJlUnVsZScsICcnLCB7XFxuICAgICAgICAgICAgICAgIGhlaWdodDogM1xcbiAgICAgICAgICAgIH1dLFxcbiAgICAgICAgXS5tYXAoW2EsIGIsIGMsIGVdID0+IHtcXG4gICAgICAgICAgICBpbnB1dF9wdXNoKGEsIGIsIGMsIGUsIDEpO1xcbiAgICAgICAgfSk7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5pCc57SiJzpcXG4gICAgICAgIFtcXG4gICAgICAgICAgICBbJ+W/heWhq++8jOaQnOe0oumTvuaOpScsICdzZWFyY2hfdXJsJywgJyddLFxcbiAgICAgICAgICAgIFsn5b+F5aGr77yM5pCc57Si5YiG57uEJywgJ3NlYXJjaF9ncm91cCcsICflhajlhagnLCB7XFxuICAgICAgICAgICAgICAgIGhpZ2hsaWdodDogZmFsc2UsXFxuICAgICAgICAgICAgfV0sXFxuICAgICAgICAgICAgWyflv4XloavvvIzliJfooajop4TliJlcXFxcbuaPkOS+m+WPmOmHjzogYmFzZVVybCwga2V5d29yZCwgcGFnZVxcXFxuXFxcXG7pnIDopoHov5Tlm57mlbDnu4TvvJpyZXR1cm4gW107JywgJ3NlYXJjaEZpbmQnLCAnJywge1xcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDVcXG4gICAgICAgICAgICB9XSxcXG4gICAgICAgIF0ubWFwKFthLCBiLCBjLCBlXSA9PiB7XFxuICAgICAgICAgICAgaW5wdXRfcHVzaChhLCBiLCBjLCBlLCAxKTtcXG4gICAgICAgIH0pO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WPkeeOsCc6XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBTdHJvbmcoJ+S9v+eUqCB4NV93ZWJ2aWV3X3NpbmdsZScpLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoZXhwbG9yZV9YNSkgPT4ge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcignZXhwbG9yZV9YNScsIGV4cGxvcmVfWDUpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgfSwgZXhwbG9yZV9YNSA/ICcwJyA6ICcxJyksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2ljb24nLFxcbiAgICAgICAgICAgIGltZzogJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vbWVzc3kvJyArIChleHBsb3JlX1g1ID8gNTUgOiA2MykgKyAnLnN2ZydcXG4gICAgICAgIH0pO1xcbiAgICAgICAgW1xcbiAgICAgICAgICAgIFsn5b+F5aGr77yM5rqQ6ZO+5o6lJywgJ3VybCcsICcnLCB7XFxuICAgICAgICAgICAgICAgIGhlaWdodDogMVxcbiAgICAgICAgICAgIH1dLFxcbiAgICAgICAgICAgIFsn5b+F5aGr77yM5YiX6KGo6KeE5YiZXFxcXG7lkK/nlKh4NeWwseS4jeeUqOWGmeS6hlxcXFxuXFxcXG7nu6fmib/mlbDnu4Rk77yaIGQucHVzaChqc29uKTsnLCAnZmluZF9ydWxlJywgJyddLFxcbiAgICAgICAgXS5tYXAoW2EsIGIsIGMsIGVdID0+IHtcXG4gICAgICAgICAgICBpbnB1dF9wdXNoKGEsIGIsIGMsIGUpO1xcbiAgICAgICAgfSk7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5pu/5o2iJzpcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFN0cm9uZygn5Y+R546w6ZO+5o6l5pu/5o2iJyksXFxuICAgICAgICAgICAgZGVzYzogJ+mAieWhqycsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcbiAgICAgICAgICAgIGltZzogJ2hpa2VyOi8vaW1hZ2VzL2hvbWVfaWNvbl9lZGl0J1xcbiAgICAgICAgfSk7XFxuICAgICAgICBbXFxuICAgICAgICAgICAgWyfliIbnsbvlkI3np7AnLCAnY2xhc3NfbmFtZScsICcnXSxcXG4gICAgICAgICAgICBbJ+WIhuexu+abv+aNoicsICdjbGFzc191cmwnLCAnJ10sXFxuICAgICAgICAgICAgWyflnLDljLrlkI3np7AnLCAnYXJlYV9uYW1lJywgJyddLFxcbiAgICAgICAgICAgIFsn5Zyw5Yy65pu/5o2iJywgJ2FyZWFfdXJsJywgJyddLFxcbiAgICAgICAgICAgIFsn5bm05Luj5ZCN56ewJywgJ3llYXJfbmFtZScsICcnXSxcXG4gICAgICAgICAgICBbJ+W5tOS7o+abv+aNoicsICd5ZWFyX3VybCcsICcnXSxcXG4gICAgICAgICAgICBbJ+aOkuW6j+WQjeensCcsICdzb3J0X25hbWUnLCAnJ10sXFxuICAgICAgICAgICAgWyfmjpLluo/mm7/mjaInLCAnc29ydF91cmwnLCAnJ10sXFxuICAgICAgICBdLm1hcChbYSwgYiwgYywgZV0gPT4ge1xcbiAgICAgICAgICAgIGlucHV0X3B1c2goYSwgYiwgYywgZSwgMSk7XFxuICAgICAgICB9KTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfmianlsZUnOlxcbiAgICAgICAgeDVfanNMb2FkaW5nSW5qZWN0ID0gZ2V0TXlWYXIoJ3g1X2pzTG9hZGluZ0luamVjdCcsICcwJykgPT0gJzEnO1xcbiAgICAgICAgeDVfZmxvYXRWaWRlbyA9IGdldE15VmFyKCd4NV9mbG9hdFZpZGVvJywgJzAnKSA9PSAnMSc7XFxuICAgICAgICB4NV9hdXRvUGxheSA9IGdldE15VmFyKCd4NV9hdXRvUGxheScsICcwJykgPT0gJzEnO1xcbiAgICAgICAgeDVfc2hvd1Byb2dyZXNzID0gZ2V0TXlWYXIoJ3g1X3Nob3dQcm9ncmVzcycsICcwJykgPT0gJzEnO1xcbiAgICAgICAgeDVfaW1nTG9uZ0NsaWNrID0gZ2V0TXlWYXIoJ3g1X2ltZ0xvbmdDbGljaycsICcwJykgPT0gJzEnO1xcbiAgICAgICAgeDVfZGVzYyA9IGdldE15VmFyKCd4NV9kZXNjJywgJzAnKSA9PSAnMSc7XFxuXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBTdHJvbmcoJ+azqOWFpWpzJyksXFxuICAgICAgICAgICAgZGVzYzogJ+mAieWhqycsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcbiAgICAgICAgICAgIGltZzogJ2hpa2VyOi8vaW1hZ2VzL2hvbWVfaWNvbl9lZGl0J1xcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAnPGI+572R56uZ5Yqg6L295Lit5Lmf5omn6KGMPC9iPicsXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh4KSA9PiB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKCd4NV9qc0xvYWRpbmdJbmplY3QnLCB4KTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIH0sIHg1X2pzTG9hZGluZ0luamVjdCA/ICcwJyA6ICcxJyksXFxuICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tZXNzeS8nICsgKHg1X2pzTG9hZGluZ0luamVjdCA/IDU1IDogNjMpICsgJy5zdmcnLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9pY29uJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICBpbnB1dF9wdXNoKFxcXCLlpoLmnpzlkK/nlKjkuoblnKjliqDovb3kuK3kuZ/miafooYzvvIxqc+S8muaJp+ihjOS4pOasoe+8jOmcgOimgeiHquihjOWkhOeQhumHjeWkjeWKoOi9veeahOmXrumimFxcXCIsIFxcXCJ4NV9qc1xcXCIsIFxcXCJcXFwiLCB7fSwgMyk7XFxuXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZV9ibGFuaydcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogU3Ryb25nKCfmi6bmiKrotYTmupAnKSxcXG4gICAgICAgICAgICBkZXNjOiAn6YCJ5aGrJyxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxuICAgICAgICAgICAgaW1nOiAnaGlrZXI6Ly9pbWFnZXMvaG9tZV9pY29uX2VkaXQnXFxuICAgICAgICB9KTtcXG4gICAgICAgIGlucHV0X3B1c2goXFxcIui/lOWbnuS4uuaVsOe7hO+8jOaUr+aMgWpz77yM5LiN6ZyA6KaBcmV0dXJuXFxcXG7kuI3miafooYzljLnphY3nmoTpk77mjqXvvIzorqnnvZHpobXliqDovb3mm7Tlv6vvvIzop4TliJnkuLrljIXlkKvljLnphY3vvIwq5Luj6KGo5Lu75oSP5a2X56ym77yI5LiN5piv5q2j5YiZ77yJ77yM5aaC5p6c5oOz5oum5oiq5LiN5YyF5ZCr55qE5Y+v5L2/55SoISHvvIzlpoIgWychIXRlc3QxISEkZG9tJ10g6KGo56S66ZO+5o6l5LiN5YyF5ZCrdGVzdDHlubbkuJTkuI3ljIXlkKvnvZHnq5nln5/lkI3pgqPlsLHmi6bmiKrjgIEhISR0b3Bkb23kuI3ljIXlkKvkuLvln5/lkI3lsLHmi6bmiKpcXFwiLCBcXFwieDVfYmxvY2tSdWxlc1xcXCIsIFxcXCJcXFwiKTtcXG4gICAgICAgIGlucHV0X3B1c2goYOaPkOS+m+WPmOmHjyBpbnB1dO+8jHg1VXJsXFxcXG7or6Xku6PnoIHkuI3mmK/lnKjnvZHpobXkuK3miafooYznmoTvvIzmsqHmnIlmeV9icmlkZ2VfYXBw44CCXFxcXG7mnInov5Tlm57lsLHmi6bmiKrpk77mjqXvvIzkuI3liqDovb3nvZHlnYDvvIzkvovvvJppZihpbnB1dC5pbmNsdWRlcygnL2FkLycpKSByZXR1cm4gdHJ1ZVxcXFxu5Y+v5Lul6Lez6L2s5Yiw6KeE5YiZ5LqM57qn6aG16Z2i77yM5L6L77yaXFxcXG5yZXR1cm4gJC50b1N0cmluZygodXJsLCB4NVVybCkgPT4ge1xcbiAgICBmYmEub3BlbihKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICB1cmw6IHg1VXJsICsgZW5jb2RlVVJJQ29tcG9uZW50KHVybClcXG4gICAgfSkpO1xcbn0sIGlucHV0LCB4NVVybClgLCBcXFwieDVfdXJsSW50ZXJjZXB0b3JcXFwiLCBcXFwiXFxcIiwge30sIDcpO1xcbiAgICAgICAgaW5wdXRfcHVzaChcXFwi5a2Q6aG16Z2i6KeE5YiZ77yM5LiK6Z2i55qE6KeE5YiZ5Y+v5Lul6YCa6L+HeDVVcmzot7PovazliLDov5nph4zjgIJiYXNlVXJs5piv6Lez6L2s55qE6ZO+5o6lXFxcIiwgXFxcIng1X3BhZ2VIb21lXFxcIiwgXFxcIlxcXCIsIHt9LCAzKTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBTdHJvbmcoJ3g16K6+572uJyksXFxuICAgICAgICAgICAgZGVzYzogJ+S4gOiIrOS4jeeUqOeuoScsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcbiAgICAgICAgICAgIGltZzogJ2hpa2VyOi8vaW1hZ2VzL2hvbWVfaWNvbl9lZGl0J1xcbiAgICAgICAgfSk7XFxuICAgICAgICBpbnB1dF9wdXNoKFxcXCJSZWZlcmVyXFxcIiwgXFxcIng1X3JlZmVyZXJcXFwiLCBcXFwiXFxcIiwge30sIDEpO1xcbiAgICAgICAgaW5wdXRfcHVzaChcXFwiVUHvvIxNT0JJTEVfVUEvUENfVUEv6Ieq5a6a5LmJXFxcIiwgXFxcIng1X3VhXFxcIiwgXFxcIlxcXCIsIHt9LCAxKTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICc8Yj7plb/mjInlm77niYfkuI3mmL7npLroj5zljZU8L2I+JyxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHgpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3g1X2ltZ0xvbmdDbGljaycsIHgpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgfSwgeDVfaW1nTG9uZ0NsaWNrID8gJzAnIDogJzEnKSxcXG4gICAgICAgICAgICBpbWc6ICdodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL21lc3N5LycgKyAoeDVfaW1nTG9uZ0NsaWNrID8gNTUgOiA2MykgKyAnLnN2ZycsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2ljb24nXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICc8Yj7kuI3mmL7npLrov5vluqbmnaE8L2I+JyxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHgpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3g1X3Nob3dQcm9ncmVzcycsIHgpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgfSwgeDVfc2hvd1Byb2dyZXNzID8gJzAnIDogJzEnKSxcXG4gICAgICAgICAgICBpbWc6ICdodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL21lc3N5LycgKyAoeDVfc2hvd1Byb2dyZXNzID8gNTUgOiA2MykgKyAnLnN2ZycsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2ljb24nXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICc8Yj7mgqzmta7ll4XmjqLmkq3mlL48L2I+JyxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHgpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3g1X2Zsb2F0VmlkZW8nLCB4KTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIH0sIHg1X2Zsb2F0VmlkZW8gPyAnMCcgOiAnMScpLFxcbiAgICAgICAgICAgIGltZzogJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vbWVzc3kvJyArICh4NV9mbG9hdFZpZGVvID8gNTUgOiA2MykgKyAnLnN2ZycsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2ljb24nXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICc8Yj7pn7Pop4bpopHoh6rliqjmkq3mlL48L2I+JyxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHgpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3g1X2F1dG9QbGF5JywgeCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICB9LCB4NV9hdXRvUGxheSA/ICcwJyA6ICcxJyksXFxuICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tZXNzeS8nICsgKHg1X2F1dG9QbGF5ID8gNTUgOiA2MykgKyAnLnN2ZycsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2ljb24nXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBTdHJvbmcoJ3g15omp5bGVJyksXFxuICAgICAgICAgICAgZGVzYzogJ+mAieWhqycsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcbiAgICAgICAgICAgIGltZzogJ2hpa2VyOi8vaW1hZ2VzL2hvbWVfaWNvbl9lZGl0J1xcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAnPGI+6aaW6aG15LiN5pi+56S65pCc57Si5qGGPC9iPicsXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh4KSA9PiB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKCd4NV9kZXNjJywgeCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICB9LCB4NV9kZXNjID8gJzAnIDogJzEnKSxcXG4gICAgICAgICAgICBpbWc6ICdodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL21lc3N5LycgKyAoeDVfZGVzYyA/IDU1IDogNjMpICsgJy5zdmcnLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9pY29uJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICBpbnB1dF9wdXNoKFxcXCJ1cmzvvIzlj5HnjrDpk77mjqXlkox4NemTvuaOpeWGsueqgeaXtuWhq+WGmVxcXCIsIFxcXCJ4NV91cmxcXFwiLCBcXFwiXFxcIiwge30sIDEpO1xcbiAgICAgICAgaW5wdXRfcHVzaChcXFwiaG9tZV9qc++8jOS4jeaYvuekuuaQnOe0ouahhuaXtuaJp+ihjOOAglxcXFxu57un5om/5pWw57uEZO+8jOWGheWuueWPquacieinhOWImeWIhuexu+OAglxcXFxu5Zyo5q2k5Z+656GA5LiK6Ieq5a6a5LmJ6aaW6aG15ZCn44CCXFxcIiwgXFxcIng1X2hvbWVcXFwiLCBcXFwiXFxcIik7XFxuICAgICAgICBicmVhaztcXG59XFxuZC5wdXNoKHtcXG4gICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBSaWNoKFN0cm9uZyhDb2xvcign5L+d5a2Y5bm26YCA5Ye6JykpKSxcXG4gICAgZGVzYzogJ+S4iuasoee8lui+ke+8micgKyAkLmRhdGVGb3JtYXQodGltZSwgJ3l5eXktTU0tZGQgaGg6bW06c3MnKSxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcInRvb2w/cnVsZT11Y2tr5LqRXFxcIikuc2V0RWRpdCgpO1xcbiAgICB9KSxcXG4gICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICB9XFxufSk7XFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi4p236KeE5YiZ5paH5Lu2XCIsXCJwYXRoXCI6XCJjb25maWdzXCIsXCJydWxlXCI6XCJjb25zdCBydWxlUGF0aCA9IFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL1Rob21hcy91Y2trUnVsZXMuanNvblxcXCI7XFxubGV0IHJ1bGVzO1xcblxcbmZ1bmN0aW9uIGdldEpzb24oKSB7XFxuICAgIGlmIChBcnJheS5pc0FycmF5KHJ1bGVzKSkge1xcbiAgICAgICAgcmV0dXJuIHJ1bGVzO1xcbiAgICB9XFxuICAgIHRyeSB7XFxuICAgICAgICBydWxlcyA9IEpTT04ucGFyc2UocmVhZEZpbGUocnVsZVBhdGgpIHx8IFxcXCJbXVxcXCIpO1xcbiAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICBydWxlcyA9IFtdO1xcbiAgICB9XFxuICAgIGlmIChydWxlcy5sZW5ndGggPT0gMCkgZGVsZXRlRmlsZShydWxlUGF0aCk7XFxuICAgIHJldHVybiBydWxlcztcXG59XFxuXFxuZnVuY3Rpb24gc2F2ZUpzb24oanNvbikge1xcbiAgICBzYXZlRmlsZShydWxlUGF0aCwgSlNPTi5zdHJpbmdpZnkoanNvbikpO1xcbn1cXG5cXG5mdW5jdGlvbiBnZXRKc29uXzEoS2V5LCBWYWx1ZSwgVHlwZSkge1xcbiAgICByZXR1cm4gZ2V0SnNvbigpLmZpbHRlcihmID0+IGZbS2V5XSA9PSBWYWx1ZSAmJiBUeXBlKTtcXG59XFxuXFxuZnVuY3Rpb24gZ2V0SnNvbl8yKE0sIEtleSkge1xcbiAgICBpZiAoS2V5KVxcbiAgICAgICAgcmV0dXJuIHNhdmVKc29uKGdldEpzb24oKS5tYXAoZiA9PiB7XFxuICAgICAgICAgICAgaWYgKG1kNShmLmdyb3VwICsgZi50aXRsZSkgPT0gTSkge1xcbiAgICAgICAgICAgICAgICBmW0tleV0gPSBmW0tleV0gPT0gXFxcIjFcXFwiID8gXFxcIjBcXFwiIDogXFxcIjFcXFwiO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZjtcXG4gICAgICAgIH0pKTtcXG4gICAgZWxzZVxcbiAgICAgICAgcmV0dXJuIGdldEpzb24oKS5maWx0ZXIodiA9PiBtZDUodi5ncm91cCArIHYudGl0bGUpICE9IE0pO1xcbn1cXG5cXG5mdW5jdGlvbiBnZXRHcm91cEpzb24oUnVsZXMsIEtleSwgVmFsdWUxLCBWYWx1ZTIpIHtcXG4gICAgcmV0dXJuIChSdWxlcyB8fCBnZXRKc29uKCkpLmZpbHRlcihmID0+IGZbS2V5XSA9PSBWYWx1ZTEgfHwgZltLZXldID09IFZhbHVlMiB8fCBWYWx1ZTEgPT0gVmFsdWUyKTtcXG59XFxuXFxuZnVuY3Rpb24gZ2V0R3JvdXBOYW1lcyhSdWxlcywgS2V5KSB7XFxuICAgIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoKFJ1bGVzIHx8IGdldEpzb24oKSkubWFwKGYgPT4gZltLZXldKSkpLmZpbHRlcih2ID0+IHYpO1xcbn1cXG5cXG5pZiAoIWZpbGVFeGlzdChydWxlUGF0aCkpIHtcXG4gICAgcnVsZXMgPSBbe1xcbiAgICAgICAgZ3JvdXA6IFxcXCLnu7zlkIhcXFwiLFxcbiAgICAgICAgc2VhcmNoX2VuYWJsZWQ6IFxcXCIxXFxcIixcXG4gICAgICAgIGV4cGxvcmVfZW5hYmxlZDogXFxcIjFcXFwiLFxcblxcbiAgICAgICAgdGl0bGU6IFxcXCLogZrmkJxcXFwiLFxcbiAgICAgICAgYXV0aG9yOiBcXFwiVGhvbWFz5ZayXFxcIixcXG4gICAgICAgIGljb246IFxcXCJoaWtlcjovL2ltYWdlcy9zZWFyY2hcXFwiLFxcbiAgICAgICAgcHJlUnVsZTogXFxcIlxcXCIsXFxuXFxuICAgICAgICBzZWFyY2hfdXJsOiBcXFwiZnlwYWdlXFxcIixcXG4gICAgICAgIHNlYXJjaF9ncm91cDogXFxcIuWFqOWFqFxcXCIsXFxuICAgICAgICBzZWFyY2hGaW5kOiBcXFwiMVxcXCIsXFxuXFxuICAgICAgICBleHBsb3JlX1g1OiBcXFwiMFxcXCIsXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgIGZpbmRfcnVsZTogYGQucHVzaCh7XFxuICAgIHRpdGxlOiAnPGI+5Y6G5Y+y5pCc57SiPC9iPicuZm9udGNvbG9yKFxcXCIjZmY2NjAxXFxcIiksXFxuICAgIHBpY191cmw6IFxcXCJoaWtlcjovL2ltYWdlcy9pY29uX2ZpbmRcXFwiLFxcbiAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICAgIHVybDogJChcXFwi56Gu5a6a5riF6Zmk5YWo6YOo5pCc57Si6K6w5b2V77yfXFxcIikuY29uZmlybSgoaWQpID0+IHtcXG4gICAgICAgIGNsZWFySXRlbShcXFwic2VhcmNoSGlzdG9yeVxcXCIpO1xcbiAgICAgICAgZGVsZXRlSXRlbUJ5Q2xzKGlkICsgXFxcIjprZXlcXFwiKTtcXG4gICAgICAgIGFkZEl0ZW1BZnRlcihpZCArIFxcXCI6c2VhcmNoSGlzdG9yeVxcXCIsIHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdXFxcIiArIFxcXCJ+fn7ku4DkuYjpg73msqHmnInlk6Z+fn5cXFwiLmZvbnRjb2xvcihcXFwiR3JheVxcXCIpLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGNsczogaWQgKyBcXFwiOmtleVxcXCIsXFxuICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICB9LCBpZCksXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBpZDogaWQgKyBcXFwiOnNlYXJjaEhpc3RvcnlcXFwiLFxcbiAgICB9XFxufSk7XFxuaWYgKGhpc3RvcnkubGVuZ3RoID09PSAwKSBkLnB1c2goe1xcbiAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgdGl0bGU6IFxcXCLigJzigJzigJ3igJ1cXFwiICsgXFxcIn5+fuS7gOS5iOmDveayoeacieWTpn5+flxcXCIuZm9udGNvbG9yKFxcXCJHcmF5XFxcIiksXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBjbHM6IGlkICsgXFxcIjprZXlcXFwiLFxcbiAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxuICAgIH1cXG59KTtcXG5lbHNlIGhpc3RvcnkubWFwKChrZXksIGkpID0+IHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBrZXksXFxuICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKGlkLCBrZXkpID0+IHtcXG4gICAgICAgICAgICBsZXQgZXh0cmEgPSBmaW5kSXRlbShpZCArIFxcXCI6c2VhcmNoXFxcIikuZXh0cmE7XFxuICAgICAgICAgICAgZXh0cmEuZGVmYXVsdFZhbHVlID0ga2V5O1xcbiAgICAgICAgICAgIHVwZGF0ZUl0ZW0oe1xcbiAgICAgICAgICAgICAgICBleHRyYTogZXh0cmFcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgfSwgaWQsIGtleSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcImZsZXhfYnV0dG9uXFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgaWQ6IGlkICsgXFxcIjprZXk6XFxcIiArIGtleSxcXG4gICAgICAgICAgICBjbHM6IGlkICsgXFxcIjprZXlcXFwiLFxcbiAgICAgICAgICAgIGxvbmdDbGljazogW3tcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLliKDpmaTlhbPplK7or406XFxcIiArIGtleSxcXG4gICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKGlkLCBrZXkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBoaXN0b3J5ID0gc3RvcmFnZTAuZ2V0SXRlbShcXFwic2VhcmNoSGlzdG9yeVxcXCIsIFtdKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBpaSA9IGhpc3RvcnkuaW5kZXhPZihrZXkpO1xcbiAgICAgICAgICAgICAgICAgICAgaGlzdG9yeS5zcGxpY2UoaWksIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAuc2V0SXRlbShcXFwic2VhcmNoSGlzdG9yeVxcXCIsIGhpc3RvcnkpO1xcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlSXRlbShpZCArIFxcXCI6a2V5OlxcXCIgKyBrZXkpO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhpc3RvcnkubGVuZ3RoID09PSAwKSBhZGRJdGVtQWZ0ZXIoaWQgKyBcXFwiOnNlYXJjaEhpc3RvcnlcXFwiLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuKAnOKAnOKAneKAnVxcXCIgKyBcXFwifn5+5LuA5LmI6YO95rKh5pyJ5ZOmfn5+XFxcIi5mb250Y29sb3IoXFxcIkdyYXlcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHM6IGlkICsgXFxcIjprZXlcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfSwgaWQsIGtleSlcXG4gICAgICAgICAgICB9XVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG59KTtgLFxcblxcbiAgICAgICAgY2xhc3NfbmFtZTogXFxcIlxcXCIsXFxuICAgICAgICBjbGFzc191cmw6IFxcXCJcXFwiLFxcbiAgICAgICAgYXJlYV9uYW1lOiBcXFwiXFxcIixcXG4gICAgICAgIGFyZWFfdXJsOiBcXFwiXFxcIixcXG4gICAgICAgIHllYXJfbmFtZTogXFxcIlxcXCIsXFxuICAgICAgICB5ZWFyX3VybDogXFxcIlxcXCIsXFxuICAgICAgICBzb3J0X25hbWU6IFxcXCJcXFwiLFxcbiAgICAgICAgc29ydF91cmw6IFxcXCJcXFwiLFxcbiAgICAgICAgdGltZTogMFxcbiAgICB9XTtcXG4gICAgc2F2ZUpzb24ocnVsZXMpO1xcbn1cXG4kLmV4cG9ydHMgPSB7XFxuICAgIGdldEpzb24sXFxuICAgIHNhdmVKc29uLFxcbiAgICBnZXRKc29uXzEsXFxuICAgIGdldEpzb25fMixcXG4gICAgcnVsZVBhdGgsXFxuICAgIGdldEdyb3VwTmFtZXMsXFxuICAgIGdldEdyb3VwSnNvblxcbn07XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLinb7ot7PovazkuoznuqdcIixcInBhdGhcIjpcInJ1bGVIb21lXCIsXCJydWxlXCI6XCJqczpcXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9saWI/cnVsZT11Y2tr5LqRJywge30pKS5ydWxlKTtcXG5sZXQgcnVsZUdyb3VwID0gZ2V0UGFyYW0oJ3J1bGVHcm91cCcsICfnu7zlkIgnKTtcXG5sZXQgcnVsZU5hbWUgPSBnZXRQYXJhbSgncnVsZU5hbWUnLCAnJyk7XFxubGV0IGJhc2VVcmwgPSBkZWNvZGVVUklDb21wb25lbnQoZ2V0UGFyYW0oJ2Jhc2VVcmwnKSk7XFxubGV0IHJ1bGVzID0gJC5yZXF1aXJlKFxcXCJjb25maWdzP3J1bGU9dWNra+S6kVxcXCIpLmdldEdyb3VwSnNvbihmYWxzZSwgXFxcImdyb3VwXFxcIiwgcnVsZUdyb3VwLCBcXFwi57u85ZCIXFxcIik7XFxubGV0IHJ1bGUgPSBfID0gcnVsZXMuZmluZChmID0+IGYudGl0bGUgPT0gcnVsZU5hbWUpO1xcbmlmIChydWxlICE9IC0xKSB7XFxuICAgIGlmIChNWV9QQVJBTVMuaG9tZSkgeyAvLyDku47pppbpobXot7PovaznmoRcXG4gICAgICAgIGQgPSBbXTtcXG4gICAgICAgIGJhc2VVcmwgPSBnZXRSdWxlQmFzZVVybChydWxlLnVybCk7XFxuICAgICAgICBpZiAoX1BBR0UpIHtcXG4gICAgICAgICAgICBnZXRSdWxlR3JvdXAoMCwgcnVsZS5zZWFyY2ggIT0gXFxcIlxcXCIgJiYgcnVsZS5zZWFyY2hGaW5kICE9IFxcXCJcXFwiKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGV2YWwocnVsZS5wcmVSdWxlKTtcXG4gICAgICAgIGlmIChfU09VICYmIChfUEFHRSB8fCBydWxlLnNlYXJjaF91cmwuaW5jbHVkZXMoXFxcImZ5cGFnZVxcXCIpKSkge1xcbiAgICAgICAgICAgIHNldEhpc3RvcnlLZXl3b3JkKCk7XFxuICAgICAgICAgICAgYmFzZVVybCA9IGdldFJ1bGVCYXNlVXJsKHJ1bGUuc2VhcmNoX3VybCwga2V5d29yZCk7XFxuICAgICAgICAgICAgbGV0IGRkID0gZDtcXG4gICAgICAgICAgICBzZWFyY2hmaW5kID0gbmV3IEZ1bmN0aW9uKFxcXCJydWxlXFxcIiwgXFxcImJhc2VVcmxcXFwiLCBcXFwia2V5d29yZFxcXCIsIFxcXCJwYWdlXFxcIiwgcnVsZS5zZWFyY2hGaW5kKTtcXG4gICAgICAgICAgICBsaXN0ID0gc2VhcmNoZmluZChydWxlLCBiYXNlVXJsLCBrZXl3b3JkLCBwYWdlKTtcXG4gICAgICAgICAgICBkID0gZGQuY29uY2F0KGxpc3QpO1xcbiAgICAgICAgfSBlbHNlIGlmICghX1NPVSAmJiAoX1BBR0UgfHwgcnVsZS51cmwuaW5jbHVkZXMoXFxcImZ5cGFnZVxcXCIpKSkge1xcbiAgICAgICAgICAgIGV2YWwocnVsZS5maW5kX3J1bGUpO1xcbiAgICAgICAgfVxcbiAgICAgICAgX1BBR0UgPyBzZXRQcmVSZXN1bHQoZCkgOiBzZXRSZXN1bHQoZCk7XFxuICAgICAgICBkZWxldGVJdGVtQnlDbHMoJ2xvYWRpbmdfZ2lmJyk7XFxuICAgIH0gZWxzZSB7IC8vIOS7jng16Lez6L2s55qEXFxuICAgICAgICBldmFsKHJ1bGUucHJlUnVsZSk7XFxuICAgICAgICBldmFsKHJ1bGUueDVfcGFnZUhvbWUpO1xcbiAgICB9XFxufSBlbHNlIHtcXG4gICAgc2V0UmVzdWx0KFt7XFxuICAgICAgICB0aXRsZTogQ29sb3IoJzxoMSBzdHlsZT1cXFwidGV4dC1hbGlnbjpjZW50ZXI7XFxcIj7lm77kuabppoZQcm88L2gxPicsICcjRkVCRDZGJykuYmlnKCksXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIlxcbiAgICB9XSk7XFxufVwifV0sXCJzYXZlZFwiOmZhbHNlLFwidGl0bGVcIjpcInVja2vkupFcIixcInZlcnNpb25cIjowLFwidXJsXCI6XCJoaWtlcjovL3BhZ2UvcnVsZUVkaXQjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjP3BhZ2VUaXRsZT3op4TliJnnvJbovpEmcnVsZT11Y2tr5LqRXCIsXCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwiZmluZF9ydWxlXCI6XCJqczpcXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9saWI/cnVsZT11Y2tr5LqRJywge30pKS5ydWxlKTtcXG5cXG5ncm91cCA9IGdldE15VmFyKCdncm91cCcsICflpLjlhYsnKTtcXG5zZWFyY2hfZW5hYmxlZCA9IGdldE15VmFyKCdzZWFyY2hfZW5hYmxlZCcsICcxJykgPT0gJzEnO1xcbmV4cGxvcmVfZW5hYmxlZCA9IGdldE15VmFyKCdleHBsb3JlX2VuYWJsZWQnLCAnMCcpID09ICcxJztcXG5cXG5ydWxlX3RpZCA9IGdldE15VmFyKCdydWxlX3RpZCcsICfln7rmnKwnKTtcXG5leHBsb3JlX1g1ID0gZ2V0TXlWYXIoJ2V4cGxvcmVfWDUnLCAnMCcpID09ICcxJztcXG50aW1lID0gTnVtYmVyKGdldE15VmFyKFxcXCJ0aW1lXFxcIikpIHx8IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xcblxcblxcblxcblxcblxcblxcblxcbmQgPSBbXTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogU3Ryb25nKENvbG9yKCc8Yj4nICsgZ3JvdXAgKyAn6LWE5rqQPC9iPicsICcjZmY2NjAxJykpLFxcbiAgICB1cmw6ICQoZ3JvdXBzLm1hcCh0aXRsZSA9PiB0aXRsZSA9PSBncm91cCA/IFJpY2goU3Ryb25nKENvbG9yKHRpdGxlKSkpIDogdGl0bGUpLCAyLCAn6YCJ5oup6KeE5YiZ5YiG57uEJykuc2VsZWN0KCgpID0+IHtcXG4gICAgICAgIGlmICghaW5wdXQubWF0Y2goL17igJjigJjigJnigJkvKSkge1xcbiAgICAgICAgICAgIHB1dE15VmFyKCdncm91cCcsIGlucHV0KTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICB9KSxcXG4gICAgaW1nOiBpY29uc1tncm91cF0sXFxuICAgIGNvbF90eXBlOiAnaWNvbl9zbWFsbF8zJ1xcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBDb2xvcignPGI+5ZCv55So5pCc57SiPC9iPicsICcjZmY2NjAxJyksXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoc2VhcmNoX2VuYWJsZWQpID0+IHtcXG4gICAgICAgIHB1dE15VmFyKCdzZWFyY2hfZW5hYmxlZCcsIHNlYXJjaF9lbmFibGVkKTtcXG4gICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgIH0sIHNlYXJjaF9lbmFibGVkID8gJzAnIDogJzEnKSxcXG4gICAgaW1nOiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tZXNzeS8nICsgKHNlYXJjaF9lbmFibGVkID8gNTUgOiA2MykgKyAnLnN2ZycsXFxuICAgIGNvbF90eXBlOiAnaWNvbl9zbWFsbF8zJ1xcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBDb2xvcignPGI+5ZCv55So5Y+R546wPC9iPicsICcjZmY2NjAxJyksXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoZXhwbG9yZV9lbmFibGVkKSA9PiB7XFxuICAgICAgICBwdXRNeVZhcignZXhwbG9yZV9lbmFibGVkJywgZXhwbG9yZV9lbmFibGVkKTtcXG4gICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgIH0sIGV4cGxvcmVfZW5hYmxlZCA/ICcwJyA6ICcxJyksXFxuICAgIGltZzogJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vbWVzc3kvJyArIChleHBsb3JlX2VuYWJsZWQgPyA1NSA6IDYzKSArICcuc3ZnJyxcXG4gICAgY29sX3R5cGU6ICdpY29uX3NtYWxsXzMnXFxufSk7XFxuXFxuW1xcXCLln7rmnKxcXFwiLCBcXFwi5pCc57SiXFxcIiwgXFxcIuWPkeeOsFxcXCIsIFxcXCLmm7/mjaJcXFwiLCBcXFwi5omp5bGVXFxcIl0ubWFwKG5hbWUgPT4ge1xcbiAgICBpID0gcnVsZV90aWQgPT0gbmFtZVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFJpY2goU3Ryb25nKGkgPyBDb2xvcihuYW1lKSA6IG5hbWUpKSxcXG4gICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgodGlkLCB0aWkpID0+IHtcXG4gICAgICAgICAgICBpZiAodGlpKSB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKCdydWxlX3RpZCcsIHRpZCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgIH0sIG5hbWUsICFpKSxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF81J1xcbiAgICB9KTtcXG59KTtcXG5pbnB1dF9wdXNoID0gKGRlc2MsIGlkLCB2YWx1ZSwganNvbiwgaGVpZ2h0KSA9PiB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBkZXNjOiBkZXNjLFxcbiAgICAgICAgdGl0bGU6IFxcXCI8Lz5cXFwiLFxcbiAgICAgICAgdXJsOiAkLnRvU3RyaW5nKChpZCkgPT4ge1xcbiAgICAgICAgICAgIGxldCBncm91cCA9ICQucmVxdWlyZShcXFwiY29uZmlncz9ydWxlPXVja2vkupFcXFwiKS5nZXRHcm91cE5hbWVzKDAsIFxcXCJzZWFyY2hfZ3JvdXBcXFwiKTtcXG4gICAgICAgICAgICBpZiAoIWdyb3VwLmxlbmd0aCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcIlxcXCI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiAkKGdyb3VwLCAzLCBcXFwi6YCJ5oup6KeE5YiZ5YiG57uEXFxcIikuc2VsZWN0KChpZCkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgZXh0cmEgPSBmaW5kSXRlbShpZCkuZXh0cmE7XFxuICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oaWQsIHtcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiBPYmplY3QuYXNzaWduKGV4dHJhLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBpbnB1dFxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSwgaWQpO1xcbiAgICAgICAgfSwgaWQpLFxcbiAgICAgICAgY29sX3R5cGU6ICdpbnB1dCcsXFxuICAgICAgICBleHRyYTogT2JqZWN0LmFzc2lnbih7XFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRNeVZhcihpZCwgdmFsdWUpLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiBgcHV0TXlWYXIoXFxcIiR7aWR9XFxcIiwgaW5wdXQpYCxcXG4gICAgICAgICAgICB0eXBlOiAndGV4dGFyZWEnLFxcbiAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogdHJ1ZSxcXG4gICAgICAgICAgICBoaWdobGlnaHQ6IHRydWUsXFxuICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQgfHwgNSxcXG4gICAgICAgICAgICBpZDogaWQsXFxuICAgICAgICB9LCBqc29uIHx8IHt9KVxcbiAgICB9KTtcXG59XFxuc3dpdGNoIChydWxlX3RpZCkge1xcbiAgICBjYXNlICfln7rmnKwnOlxcbiAgICAgICAgW1xcbiAgICAgICAgICAgIFsn5b+F5aGr77yM5rqQ5ZCN56ewJywgJ3RpdGxlJywgJyddLFxcbiAgICAgICAgICAgIFsn6YCJ5aGr77yM5rqQ5Zu+5qCHJywgJ2ljb24nLCAnJ10sXFxuICAgICAgICAgICAgWyfpgInloavvvIzmupDkvZzogIUnLCAnYXV0aG9yJywgJ+S9muWQjSddLFxcbiAgICAgICAgICAgIFsn6YCJ5aGr77yMSnNMaWInLCAncHJlUnVsZScsICcnLCB7XFxuICAgICAgICAgICAgICAgIGhlaWdodDogM1xcbiAgICAgICAgICAgIH1dLFxcbiAgICAgICAgXS5tYXAoW2EsIGIsIGMsIGVdID0+IHtcXG4gICAgICAgICAgICBpbnB1dF9wdXNoKGEsIGIsIGMsIGUsIDEpO1xcbiAgICAgICAgfSk7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5pCc57SiJzpcXG4gICAgICAgIFtcXG4gICAgICAgICAgICBbJ+W/heWhq++8jOaQnOe0oumTvuaOpScsICdzZWFyY2hfdXJsJywgJyddLFxcbiAgICAgICAgICAgIFsn5b+F5aGr77yM5pCc57Si5YiG57uEJywgJ3NlYXJjaF9ncm91cCcsICflhajlhagnLCB7XFxuICAgICAgICAgICAgICAgIGhpZ2hsaWdodDogZmFsc2UsXFxuICAgICAgICAgICAgfV0sXFxuICAgICAgICAgICAgWyflv4XloavvvIzliJfooajop4TliJlcXFxcbuaPkOS+m+WPmOmHjzogYmFzZVVybCwga2V5d29yZCwgcGFnZVxcXFxuXFxcXG7pnIDopoHov5Tlm57mlbDnu4TvvJpyZXR1cm4gW107JywgJ3NlYXJjaEZpbmQnLCAnJywge1xcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDVcXG4gICAgICAgICAgICB9XSxcXG4gICAgICAgIF0ubWFwKFthLCBiLCBjLCBlXSA9PiB7XFxuICAgICAgICAgICAgaW5wdXRfcHVzaChhLCBiLCBjLCBlLCAxKTtcXG4gICAgICAgIH0pO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WPkeeOsCc6XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBTdHJvbmcoJ+S9v+eUqCB4NV93ZWJ2aWV3X3NpbmdsZScpLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoZXhwbG9yZV9YNSkgPT4ge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcignZXhwbG9yZV9YNScsIGV4cGxvcmVfWDUpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgfSwgZXhwbG9yZV9YNSA/ICcwJyA6ICcxJyksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2ljb24nLFxcbiAgICAgICAgICAgIGltZzogJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vbWVzc3kvJyArIChleHBsb3JlX1g1ID8gNTUgOiA2MykgKyAnLnN2ZydcXG4gICAgICAgIH0pO1xcbiAgICAgICAgW1xcbiAgICAgICAgICAgIFsn5b+F5aGr77yM5rqQ6ZO+5o6lJywgJ3VybCcsICcnLCB7XFxuICAgICAgICAgICAgICAgIGhlaWdodDogMVxcbiAgICAgICAgICAgIH1dLFxcbiAgICAgICAgICAgIFsn5b+F5aGr77yM5YiX6KGo6KeE5YiZXFxcXG7lkK/nlKh4NeWwseS4jeeUqOWGmeS6hlxcXFxuXFxcXG7nu6fmib/mlbDnu4Rk77yaIGQucHVzaChqc29uKTsnLCAnZmluZF9ydWxlJywgJyddLFxcbiAgICAgICAgXS5tYXAoW2EsIGIsIGMsIGVdID0+IHtcXG4gICAgICAgICAgICBpbnB1dF9wdXNoKGEsIGIsIGMsIGUpO1xcbiAgICAgICAgfSk7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5pu/5o2iJzpcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFN0cm9uZygn5Y+R546w6ZO+5o6l5pu/5o2iJyksXFxuICAgICAgICAgICAgZGVzYzogJ+mAieWhqycsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcbiAgICAgICAgICAgIGltZzogJ2hpa2VyOi8vaW1hZ2VzL2hvbWVfaWNvbl9lZGl0J1xcbiAgICAgICAgfSk7XFxuICAgICAgICBbXFxuICAgICAgICAgICAgWyfliIbnsbvlkI3np7AnLCAnY2xhc3NfbmFtZScsICcnXSxcXG4gICAgICAgICAgICBbJ+WIhuexu+abv+aNoicsICdjbGFzc191cmwnLCAnJ10sXFxuICAgICAgICAgICAgWyflnLDljLrlkI3np7AnLCAnYXJlYV9uYW1lJywgJyddLFxcbiAgICAgICAgICAgIFsn5Zyw5Yy65pu/5o2iJywgJ2FyZWFfdXJsJywgJyddLFxcbiAgICAgICAgICAgIFsn5bm05Luj5ZCN56ewJywgJ3llYXJfbmFtZScsICcnXSxcXG4gICAgICAgICAgICBbJ+W5tOS7o+abv+aNoicsICd5ZWFyX3VybCcsICcnXSxcXG4gICAgICAgICAgICBbJ+aOkuW6j+WQjeensCcsICdzb3J0X25hbWUnLCAnJ10sXFxuICAgICAgICAgICAgWyfmjpLluo/mm7/mjaInLCAnc29ydF91cmwnLCAnJ10sXFxuICAgICAgICBdLm1hcChbYSwgYiwgYywgZV0gPT4ge1xcbiAgICAgICAgICAgIGlucHV0X3B1c2goYSwgYiwgYywgZSwgMSk7XFxuICAgICAgICB9KTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfmianlsZUnOlxcbiAgICAgICAgeDVfanNMb2FkaW5nSW5qZWN0ID0gZ2V0TXlWYXIoJ3g1X2pzTG9hZGluZ0luamVjdCcsICcwJykgPT0gJzEnO1xcbiAgICAgICAgeDVfZmxvYXRWaWRlbyA9IGdldE15VmFyKCd4NV9mbG9hdFZpZGVvJywgJzAnKSA9PSAnMSc7XFxuICAgICAgICB4NV9hdXRvUGxheSA9IGdldE15VmFyKCd4NV9hdXRvUGxheScsICcwJykgPT0gJzEnO1xcbiAgICAgICAgeDVfc2hvd1Byb2dyZXNzID0gZ2V0TXlWYXIoJ3g1X3Nob3dQcm9ncmVzcycsICcwJykgPT0gJzEnO1xcbiAgICAgICAgeDVfaW1nTG9uZ0NsaWNrID0gZ2V0TXlWYXIoJ3g1X2ltZ0xvbmdDbGljaycsICcwJykgPT0gJzEnO1xcbiAgICAgICAgeDVfZGVzYyA9IGdldE15VmFyKCd4NV9kZXNjJywgJzAnKSA9PSAnMSc7XFxuXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBTdHJvbmcoJ+azqOWFpWpzJyksXFxuICAgICAgICAgICAgZGVzYzogJ+mAieWhqycsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcbiAgICAgICAgICAgIGltZzogJ2hpa2VyOi8vaW1hZ2VzL2hvbWVfaWNvbl9lZGl0J1xcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAnPGI+572R56uZ5Yqg6L295Lit5Lmf5omn6KGMPC9iPicsXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh4KSA9PiB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKCd4NV9qc0xvYWRpbmdJbmplY3QnLCB4KTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIH0sIHg1X2pzTG9hZGluZ0luamVjdCA/ICcwJyA6ICcxJyksXFxuICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tZXNzeS8nICsgKHg1X2pzTG9hZGluZ0luamVjdCA/IDU1IDogNjMpICsgJy5zdmcnLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9pY29uJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICBpbnB1dF9wdXNoKFxcXCLlpoLmnpzlkK/nlKjkuoblnKjliqDovb3kuK3kuZ/miafooYzvvIxqc+S8muaJp+ihjOS4pOasoe+8jOmcgOimgeiHquihjOWkhOeQhumHjeWkjeWKoOi9veeahOmXrumimFxcXCIsIFxcXCJ4NV9qc1xcXCIsIFxcXCJcXFwiLCB7fSwgMyk7XFxuXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZV9ibGFuaydcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogU3Ryb25nKCfmi6bmiKrotYTmupAnKSxcXG4gICAgICAgICAgICBkZXNjOiAn6YCJ5aGrJyxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxuICAgICAgICAgICAgaW1nOiAnaGlrZXI6Ly9pbWFnZXMvaG9tZV9pY29uX2VkaXQnXFxuICAgICAgICB9KTtcXG4gICAgICAgIGlucHV0X3B1c2goXFxcIui/lOWbnuS4uuaVsOe7hO+8jOaUr+aMgWpz77yM5LiN6ZyA6KaBcmV0dXJuXFxcXG7kuI3miafooYzljLnphY3nmoTpk77mjqXvvIzorqnnvZHpobXliqDovb3mm7Tlv6vvvIzop4TliJnkuLrljIXlkKvljLnphY3vvIwq5Luj6KGo5Lu75oSP5a2X56ym77yI5LiN5piv5q2j5YiZ77yJ77yM5aaC5p6c5oOz5oum5oiq5LiN5YyF5ZCr55qE5Y+v5L2/55SoISHvvIzlpoIgWychIXRlc3QxISEkZG9tJ10g6KGo56S66ZO+5o6l5LiN5YyF5ZCrdGVzdDHlubbkuJTkuI3ljIXlkKvnvZHnq5nln5/lkI3pgqPlsLHmi6bmiKrjgIEhISR0b3Bkb23kuI3ljIXlkKvkuLvln5/lkI3lsLHmi6bmiKpcXFwiLCBcXFwieDVfYmxvY2tSdWxlc1xcXCIsIFxcXCJcXFwiKTtcXG4gICAgICAgIGlucHV0X3B1c2goYOaPkOS+m+WPmOmHjyBpbnB1dO+8jHg1VXJsXFxcXG7or6Xku6PnoIHkuI3mmK/lnKjnvZHpobXkuK3miafooYznmoTvvIzmsqHmnIlmeV9icmlkZ2VfYXBw44CCXFxcXG7mnInov5Tlm57lsLHmi6bmiKrpk77mjqXvvIzkuI3liqDovb3nvZHlnYDvvIzkvovvvJppZihpbnB1dC5pbmNsdWRlcygnL2FkLycpKSByZXR1cm4gdHJ1ZVxcXFxu5Y+v5Lul6Lez6L2s5Yiw6KeE5YiZ5LqM57qn6aG16Z2i77yM5L6L77yaXFxcXG5yZXR1cm4gJC50b1N0cmluZygodXJsLCB4NVVybCkgPT4ge1xcbiAgICBmYmEub3BlbihKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICB1cmw6IHg1VXJsICsgZW5jb2RlVVJJQ29tcG9uZW50KHVybClcXG4gICAgfSkpO1xcbn0sIGlucHV0LCB4NVVybClgLCBcXFwieDVfdXJsSW50ZXJjZXB0b3JcXFwiLCBcXFwiXFxcIiwge30sIDcpO1xcbiAgICAgICAgaW5wdXRfcHVzaChcXFwi5a2Q6aG16Z2i6KeE5YiZ77yM5LiK6Z2i55qE6KeE5YiZ5Y+v5Lul6YCa6L+HeDVVcmzot7PovazliLDov5nph4zjgIJiYXNlVXJs5piv6Lez6L2s55qE6ZO+5o6lXFxcIiwgXFxcIng1X3BhZ2VIb21lXFxcIiwgXFxcIlxcXCIsIHt9LCAzKTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBTdHJvbmcoJ3g16K6+572uJyksXFxuICAgICAgICAgICAgZGVzYzogJ+S4gOiIrOS4jeeUqOeuoScsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcbiAgICAgICAgICAgIGltZzogJ2hpa2VyOi8vaW1hZ2VzL2hvbWVfaWNvbl9lZGl0J1xcbiAgICAgICAgfSk7XFxuICAgICAgICBpbnB1dF9wdXNoKFxcXCJSZWZlcmVyXFxcIiwgXFxcIng1X3JlZmVyZXJcXFwiLCBcXFwiXFxcIiwge30sIDEpO1xcbiAgICAgICAgaW5wdXRfcHVzaChcXFwiVUHvvIxNT0JJTEVfVUEvUENfVUEv6Ieq5a6a5LmJXFxcIiwgXFxcIng1X3VhXFxcIiwgXFxcIlxcXCIsIHt9LCAxKTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICc8Yj7plb/mjInlm77niYfkuI3mmL7npLroj5zljZU8L2I+JyxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHgpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3g1X2ltZ0xvbmdDbGljaycsIHgpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgfSwgeDVfaW1nTG9uZ0NsaWNrID8gJzAnIDogJzEnKSxcXG4gICAgICAgICAgICBpbWc6ICdodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL21lc3N5LycgKyAoeDVfaW1nTG9uZ0NsaWNrID8gNTUgOiA2MykgKyAnLnN2ZycsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2ljb24nXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICc8Yj7kuI3mmL7npLrov5vluqbmnaE8L2I+JyxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHgpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3g1X3Nob3dQcm9ncmVzcycsIHgpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgfSwgeDVfc2hvd1Byb2dyZXNzID8gJzAnIDogJzEnKSxcXG4gICAgICAgICAgICBpbWc6ICdodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL21lc3N5LycgKyAoeDVfc2hvd1Byb2dyZXNzID8gNTUgOiA2MykgKyAnLnN2ZycsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2ljb24nXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICc8Yj7mgqzmta7ll4XmjqLmkq3mlL48L2I+JyxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHgpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3g1X2Zsb2F0VmlkZW8nLCB4KTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIH0sIHg1X2Zsb2F0VmlkZW8gPyAnMCcgOiAnMScpLFxcbiAgICAgICAgICAgIGltZzogJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vbWVzc3kvJyArICh4NV9mbG9hdFZpZGVvID8gNTUgOiA2MykgKyAnLnN2ZycsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2ljb24nXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICc8Yj7pn7Pop4bpopHoh6rliqjmkq3mlL48L2I+JyxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHgpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3g1X2F1dG9QbGF5JywgeCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICB9LCB4NV9hdXRvUGxheSA/ICcwJyA6ICcxJyksXFxuICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tZXNzeS8nICsgKHg1X2F1dG9QbGF5ID8gNTUgOiA2MykgKyAnLnN2ZycsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2ljb24nXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBTdHJvbmcoJ3g15omp5bGVJyksXFxuICAgICAgICAgICAgZGVzYzogJ+mAieWhqycsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcbiAgICAgICAgICAgIGltZzogJ2hpa2VyOi8vaW1hZ2VzL2hvbWVfaWNvbl9lZGl0J1xcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAnPGI+6aaW6aG15LiN5pi+56S65pCc57Si5qGGPC9iPicsXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh4KSA9PiB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKCd4NV9kZXNjJywgeCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXG4gICAgICAgICAgICB9LCB4NV9kZXNjID8gJzAnIDogJzEnKSxcXG4gICAgICAgICAgICBpbWc6ICdodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL21lc3N5LycgKyAoeDVfZGVzYyA/IDU1IDogNjMpICsgJy5zdmcnLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9pY29uJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICBpbnB1dF9wdXNoKFxcXCJ1cmzvvIzlj5HnjrDpk77mjqXlkox4NemTvuaOpeWGsueqgeaXtuWhq+WGmVxcXCIsIFxcXCJ4NV91cmxcXFwiLCBcXFwiXFxcIiwge30sIDEpO1xcbiAgICAgICAgaW5wdXRfcHVzaChcXFwiaG9tZV9qc++8jOS4jeaYvuekuuaQnOe0ouahhuaXtuaJp+ihjOOAglxcXFxu57un5om/5pWw57uEZO+8jOWGheWuueWPquacieinhOWImeWIhuexu+OAglxcXFxu5Zyo5q2k5Z+656GA5LiK6Ieq5a6a5LmJ6aaW6aG15ZCn44CCXFxcIiwgXFxcIng1X2hvbWVcXFwiLCBcXFwiXFxcIik7XFxuICAgICAgICBicmVhaztcXG59XFxuZC5wdXNoKHtcXG4gICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBSaWNoKFN0cm9uZyhDb2xvcign5L+d5a2Y5bm26YCA5Ye6JykpKSxcXG4gICAgZGVzYzogJ+S4iuasoee8lui+ke+8micgKyAkLmRhdGVGb3JtYXQodGltZSwgJ3l5eXktTU0tZGQgaGg6bW06c3MnKSxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcInRvb2w/cnVsZT11Y2tr5LqRXFxcIikuc2V0RWRpdCgpO1xcbiAgICB9KSxcXG4gICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcbiAgICB9XFxufSk7XFxuc2V0UmVzdWx0KGQpO1wiLFwiZ3JvdXBcIjpcIuKRoOe9keebmFwiLFwidWFcIjpcIm1vYmlsZVwiLFwicHJlUnVsZVwiOlwiXCIsXCJwYWdlc1wiOlwiW3tcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuKTgeWIl+ihqEFQSVxcXCIsXFxcInBhdGhcXFwiOlxcXCJRdWFya1NoYXJlQXBpXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxuLy9AYXV0aG9yIExveURnSWtcXFxcbmxldCBodHRwUmVxdWVzdCA9ICQucmVxdWlyZShcXFxcXFxcImh0dHBSZXF1ZXN0XFxcXFxcXCIpO1xcXFxuY29uc3QgYmFzZVVybCA9IFxcXFxcXFwiaHR0cHM6Ly9wYW4ucXVhcmsuY25cXFxcXFxcIjtcXFxcblxcXFxuZnVuY3Rpb24gUXVhcmtTaGFyZUFwaShzaGFyZUlkLCBzaGFyZVB3ZCkge1xcXFxuICAgIHRoaXMuc2hhcmVJZCA9IHNoYXJlSWQ7XFxcXG4gICAgdGhpcy5zaGFyZVB3ZCA9IHNoYXJlUHdkO1xcXFxuICAgIHRoaXMucmVmcmVzaENhbGxCYWNrID0gKCgpID0+IHZvaWQgMCk7XFxcXG4gICAgLy90aGlzLnNoYXJlVG9rZW4gPSBzaGFyZVRva2VuIHx8IHRoaXMuZ2V0U2hhcmVUb2tlbigpO1xcXFxufVxcXFxuT2JqZWN0LmFzc2lnbihRdWFya1NoYXJlQXBpLnByb3RvdHlwZSwge1xcXFxuICAgIHNldFJlZnJlc2gocmVmcmVzaENhbGxCYWNrKSB7XFxcXG4gICAgICAgIHRoaXMucmVmcmVzaENhbGxCYWNrID0gcmVmcmVzaENhbGxCYWNrO1xcXFxuICAgICAgICByZXR1cm4gdGhpcztcXFxcbiAgICB9LFxcXFxuICAgIHNldFRva2VuKHNoYXJlVG9rZW4pIHtcXFxcbiAgICAgICAgdGhpcy5zaGFyZVRva2VuID0gc2hhcmVUb2tlbjtcXFxcbiAgICAgICAgcmV0dXJuIHRoaXM7XFxcXG4gICAgfSxcXFxcbiAgICByZXF1ZXN0SHR0cChhcGkpIHtcXFxcbiAgICAgICAgcmV0dXJuIG5ldyBodHRwUmVxdWVzdChiYXNlVXJsK2FwaSkuc3VjY2VzcygoYm9keSkgPT4ge1xcXFxuICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzICE9PSAyMDApIHtcXFxcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYm9keS5tZXNzYWdlKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHJldHVybiBib2R5O1xcXFxuICAgICAgICB9KTtcXFxcbiAgICB9LFxcXFxuICAgIGdldFRva2VuKCkge1xcXFxuICAgICAgICByZXR1cm4gdGhpcy5zaGFyZVRva2VuIHx8IHRoaXMuZ2V0U2hhcmVUb2tlbigpO1xcXFxuICAgIH0sXFxcXG5cXFxcbiAgICBnZXRTaGFyZVRva2VuKCkge1xcXFxuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5yZXF1ZXN0SHR0cChcXFxcXFxcIi8xL2Nsb3VkZHJpdmUvc2hhcmUvc2hhcmVwYWdlL3Rva2VuXFxcXFxcXCIpLmJvZHkoe1xcXFxuICAgICAgICAgICAgXFxcXFxcXCJwd2RfaWRcXFxcXFxcIjogdGhpcy5zaGFyZUlkLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJwYXNzY29kZVxcXFxcXFwiOiB0aGlzLnNoYXJlUHdkLFxcXFxuICAgICAgICB9KS5ib2R5VG9TdHJpbmcodHJ1ZSkuc2V0U3RhcnRSZXF1ZXN0RnVuYyhwb3N0KS5zdGFydCh0cnVlKTtcXFxcbiAgICAgICAgdGhpcy5zaGFyZVRva2VuID0gcmVzdWx0LmRhdGEuc3Rva2VuO1xcXFxuICAgICAgICB0aGlzLnJlZnJlc2hDYWxsQmFjayhyZXN1bHQuZGF0YS5zdG9rZW4sIHRoaXMpO1xcXFxuICAgICAgICByZXR1cm4gdGhpcy5zaGFyZVRva2VuO1xcXFxuICAgIH0sXFxcXG4gICAgZ2V0TGlzdEZpbGUoZmlsZUlkLCBwYWdlLCBvcmRlckJ5KSB7XFxcXG4gICAgICAgIGxldCByZXN1bHQgPSB0aGlzLnJlcXVlc3RIdHRwKFxcXFxcXFwiLzEvY2xvdWRkcml2ZS9zaGFyZS9zaGFyZXBhZ2UvZGV0YWlsP3ByPXVjcHJvJmZyPXBjXFxcXFxcXCIpLmJ1aWxkVXJsKHtcXFxcbiAgICAgICAgICAgIHB3ZF9pZDogdGhpcy5zaGFyZUlkIHx8IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBzdG9rZW46IGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLmdldFRva2VuKCkgfHwgXFxcXFxcXCJcXFxcXFxcIiksXFxcXG4gICAgICAgICAgICBwZGlyX2ZpZDogZmlsZUlkIHx8IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBmb3JjZTogMCxcXFxcbiAgICAgICAgICAgIF9wYWdlOiBwYWdlLFxcXFxuICAgICAgICAgICAgX3NpemU6IDUwLFxcXFxuICAgICAgICAgICAgX2ZldGNoX2Jhbm5lcjogMSxcXFxcbiAgICAgICAgICAgIF9mZXRjaF9zaGFyZTogMSxcXFxcbiAgICAgICAgICAgIF9mZXRjaF90b3RhbDogMSxcXFxcbiAgICAgICAgICAgIF9zb3J0OiBcXFxcXFxcImZpbGVfdHlwZTphc2MsXFxcXFxcXCIgKyBvcmRlckJ5XFxcXG4gICAgICAgIH0pLmVycm9yV2l0aFJldHJ5KChlcnIsIHJlcywgaHR0cCkgPT4ge1xcXFxuICAgICAgICAgICAgaWYgKEpTT04ucGFyc2UocmVzLmJvZHkpLm1lc3NhZ2UuaW5jbHVkZXMoJ3N0b2tlbicpKSB7XFxcXG4gICAgICAgICAgICAgICAgaHR0cC5tZXJnZUhlYWRBbmRCb2R5KHtcXFxcbiAgICAgICAgICAgICAgICAgICAgYnVpbGRVcmw6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b2tlbjogZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuZ2V0U2hhcmVUb2tlbigpfHxcXFxcXFxcIlxcXFxcXFwiKVxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pLnN0YXJ0KHRydWUpO1xcXFxuICAgICAgICByZXR1cm4gcmVzdWx0O1xcXFxuICAgIH1cXFxcbn0pO1xcXFxuJC5leHBvcnRzID0gUXVhcmtTaGFyZUFwaTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLik4Hor7fmsYLlh73mlbBcXFwiLFxcXCJwYXRoXFxcIjpcXFwiaHR0cFJlcXVlc3RcXFwiLFxcXCJydWxlXFxcIjpcXFwiZnVuY3Rpb24gaHR0cFJlcXVlc3QodXJsLCBvcHRpb25zKSB7XFxcXG4gICAgdGhpcy5yZXRyeUNvdW50ID0gMDtcXFxcbiAgICB0aGlzLnVybCA9IHVybDtcXFxcbiAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XFxcXG4gICAgICAgIHdpdGhIZWFkZXJzOiB0cnVlXFxcXG4gICAgfSk7XFxcXG4gICAgdGhpcy5lcnJvckNhbGxiYWNrID0gKGVyciwgcmVzKSA9PiB7dGhyb3cgZXJyfTtcXFxcbiAgICB0aGlzLmVycm9yQ2FsbGJhY2tXaXRoUmV0cnkgPSAoZXJyLCByZXMsIHRyeVJlc3RhcnQpID0+IGZhbHNlO1xcXFxuICAgIHRoaXMuc3VjY2Vzc0NhbGxiYWNrID0gKGJvZHksIHN0YXR1c0NvZGUsIGhlYWRlcnMpID0+IGJvZHk7XFxcXG4gICAgdGhpcy5lcnJvclR5cGVDYWxsYmFjayA9IChlcnIsIHJlcykgPT4gZXJyO1xcXFxuICAgIHRoaXMuc3RhcnRSZXF1ZXN0ID0gZmV0Y2g7XFxcXG4gICAgdGhpcy5fYm9keVRvU3RyaW5nID0gZmFsc2U7XFxcXG4gICAgdGhpcy5idWlsZFBhcmFtID0gdm9pZCgwKTtcXFxcbn1cXFxcblxcXFxuT2JqZWN0LmFzc2lnbihodHRwUmVxdWVzdC5wcm90b3R5cGUsIHtcXFxcbiAgICBib2R5VG9TdHJpbmcoZmxhZykge1xcXFxuICAgICAgICB0aGlzLl9ib2R5VG9TdHJpbmcgPSAhIWZsYWc7XFxcXG4gICAgICAgIHJldHVybiB0aGlzO1xcXFxuICAgIH0sXFxcXG4gICAgYm9keShib2R5KSB7XFxcXG4gICAgICAgIHRoaXMub3B0aW9ucy5ib2R5ID0gYm9keSB8fCB2b2lkIDA7XFxcXG4gICAgICAgIHJldHVybiB0aGlzO1xcXFxuICAgIH0sXFxcXG4gICAgYnVpbGRVcmwoYnVpbGRQYXJhbSkge1xcXFxuICAgICAgICB0aGlzLmJ1aWxkUGFyYW0gPSBidWlsZFBhcmFtIHx8IHt9O1xcXFxuICAgICAgICByZXR1cm4gdGhpcztcXFxcbiAgICB9LFxcXFxuICAgIHNldFN0YXJ0UmVxdWVzdEZ1bmMoZnVuYykge1xcXFxuICAgICAgICB0aGlzLnN0YXJ0UmVxdWVzdCA9IGZ1bmM7XFxcXG4gICAgICAgIHJldHVybiB0aGlzO1xcXFxuICAgIH0sXFxcXG4gICAgaGVhZGVycyhoZWFkZXJzKSB7XFxcXG4gICAgICAgIHRoaXMub3B0aW9ucy5oZWFkZXJzID0gaGVhZGVycyB8fCB2b2lkIDA7XFxcXG4gICAgICAgIHJldHVybiB0aGlzO1xcXFxuICAgIH0sXFxcXG4gICAgc3VjY2VzcyhzdWNjZXNzQ2FsbGJhY2spIHtcXFxcbiAgICAgICAgaWYgKHR5cGVvZiBzdWNjZXNzQ2FsbGJhY2sgIT09IFxcXFxcXFwiZnVuY3Rpb25cXFxcXFxcIikgcmV0dXJuIHRoaXM7XFxcXG4gICAgICAgIHRoaXMuc3VjY2Vzc0NhbGxiYWNrID0gc3VjY2Vzc0NhbGxiYWNrO1xcXFxuICAgICAgICByZXR1cm4gdGhpcztcXFxcbiAgICB9LFxcXFxuICAgIGVycm9yKGVycm9yQ2FsbGJhY2spIHtcXFxcbiAgICAgICAgaWYgKHR5cGVvZiBlcnJvckNhbGxiYWNrICE9PSBcXFxcXFxcImZ1bmN0aW9uXFxcXFxcXCIpIHJldHVybiB0aGlzO1xcXFxuICAgICAgICB0aGlzLmVycm9yQ2FsbGJhY2sgPSBlcnJvckNhbGxiYWNrO1xcXFxuICAgICAgICByZXR1cm4gdGhpcztcXFxcbiAgICB9LFxcXFxuICAgIGVycm9yVHlwZShlcnJvclR5cGVDYWxsYmFjaykge1xcXFxuICAgICAgICBpZiAodHlwZW9mIGVycm9yVHlwZUNhbGxiYWNrICE9PSBcXFxcXFxcImZ1bmN0aW9uXFxcXFxcXCIpIHJldHVybiB0aGlzO1xcXFxuICAgICAgICB0aGlzLmVycm9yVHlwZUNhbGxiYWNrID0gZXJyb3JUeXBlQ2FsbGJhY2s7XFxcXG4gICAgICAgIHJldHVybiB0aGlzO1xcXFxuICAgIH0sXFxcXG4gICAgZXJyb3JXaXRoUmV0cnkocmV0cnlDb3VudCwgZXJyb3JDYWxsYmFja1dpdGhSZXRyeSkge1xcXFxuICAgICAgICBpZiAodHlwZW9mIHJldHJ5Q291bnQgPT09IFxcXFxcXFwiZnVuY3Rpb25cXFxcXFxcIiAmJiB0eXBlb2YgZXJyb3JDYWxsYmFja1dpdGhSZXRyeSA9PT0gXFxcXFxcXCJ1bmRlZmluZWRcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgZXJyb3JDYWxsYmFja1dpdGhSZXRyeSA9IHJldHJ5Q291bnQ7XFxcXG4gICAgICAgICAgICByZXRyeUNvdW50ID0gMTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpZiAodHlwZW9mIGVycm9yQ2FsbGJhY2tXaXRoUmV0cnkgIT09IFxcXFxcXFwiZnVuY3Rpb25cXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgdGhpcy5yZXRyeUNvdW50ID0gTnVtYmVyKHJldHJ5Q291bnQpO1xcXFxuICAgICAgICB0aGlzLmVycm9yQ2FsbGJhY2tXaXRoUmV0cnkgPSBlcnJvckNhbGxiYWNrV2l0aFJldHJ5O1xcXFxuICAgICAgICByZXR1cm4gdGhpcztcXFxcbiAgICB9LFxcXFxuICAgIHN0YXJ0KHRvSnNvbikge1xcXFxuICAgICAgICBsZXQgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMub3B0aW9ucyk7XFxcXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5ib2R5ID09PSBcXFxcXFxcIm9iamVjdFxcXFxcXFwiICYmIHRoaXMuX2JvZHlUb1N0cmluZykge1xcXFxuICAgICAgICAgICAgb3B0aW9ucy5ib2R5ID0gSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5ib2R5KTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICB2YXIgcmVzID0gSlNPTi5wYXJzZSh0aGlzLnN0YXJ0UmVxdWVzdCh0aGlzLmJ1aWxkUGFyYW0/YnVpbGRVcmwodGhpcy51cmwsIHRoaXMuYnVpbGRQYXJhbSk6dGhpcy51cmwsIG9wdGlvbnMpKTtcXFxcbiAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSA+PSAyMDAgJiYgcmVzLnN0YXR1c0NvZGUgPD0gMzAwKSB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IGJvZHkgPSByZXMuYm9keTtcXFxcbiAgICAgICAgICAgICAgICBpZiAodG9Kc29uKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGJvZHkgPSBKU09OLnBhcnNlKGJvZHkpO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdWNjZXNzQ2FsbGJhY2soYm9keSwgcmVzKTtcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFN0cmluZyhyZXMuc3RhdHVzQ29kZSkpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcXFxcbiAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgZXJyID0gdGhpcy5lcnJvclR5cGVDYWxsYmFjayhlcnIsIHJlcyk7XFxcXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxcXG5cXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGlmICh0aGlzLnJldHJ5Q291bnQpIHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgdHJ5UmVzdWx0ID0gdGhpcy5lcnJvckNhbGxiYWNrV2l0aFJldHJ5KGVyciwgcmVzLCB0aGlzKTtcXFxcbiAgICAgICAgICAgICAgICBpZiAodHJ5UmVzdWx0KSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmV0cnlDb3VudC0tO1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdGFydCh0b0pzb24pO1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmV0cnlDb3VudCA9IDA7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9yQ2FsbGJhY2soZXJyLCByZXMpO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JDYWxsYmFjayhlcnIsIHJlcyk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICB9LFxcXFxuICAgIHNldE9wdGlvbnMob3B0aW9ucykge1xcXFxuICAgICAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XFxcXG4gICAgICAgICAgICB3aXRoSGVhZGVyczogdHJ1ZVxcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgcmV0dXJuIHRoaXM7XFxcXG4gICAgfSxcXFxcbiAgICBtZXJnZUhlYWRBbmRCb2R5KG9wdGlvbnMpIHtcXFxcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XFxcXG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRpb25zLmhlYWRlcnN8fHt9LCBvcHRpb25zLmhlYWRlcnMpO1xcXFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5ib2R5ID09PSBcXFxcXFxcIm9iamVjdFxcXFxcXFwiICYmIHR5cGVvZiBvcHRpb25zLmJvZHkgPT09IFxcXFxcXFwib2JqZWN0XFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRpb25zLmJvZHl8fHt9LCBvcHRpb25zLmJvZHkpO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5idWlsZFVybCA9PT0gXFxcXFxcXCJvYmplY3RcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmJ1aWxkUGFyYW18fHt9LCBvcHRpb25zLmJ1aWxkVXJsKTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICByZXR1cm4gdGhpcztcXFxcbiAgICB9XFxcXG59KTtcXFxcblxcXFxuT2JqZWN0LmFzc2lnbihodHRwUmVxdWVzdCwge1xcXFxuICAgIGZldGNoKHVybCwgb3B0aW9ucykge1xcXFxuICAgICAgICByZXR1cm4gbmV3IGh0dHBSZXF1ZXN0KHVybCwgb3B0aW9ucyk7XFxcXG4gICAgfSxcXFxcbiAgICBwb3N0KHVybCwgb3B0aW9ucykge1xcXFxuICAgICAgICByZXR1cm4gbmV3IGh0dHBSZXF1ZXN0KHVybCwgb3B0aW9ucykuc2V0U3RhcnRSZXF1ZXN0RnVuYyhwb3N0KTtcXFxcbiAgICB9LFxcXFxuICAgIHJlcXVlc3QodXJsLCBvcHRpb25zKSB7XFxcXG4gICAgICAgIHJldHVybiBuZXcgaHR0cFJlcXVlc3QodXJsLCBvcHRpb25zKS5zZXRTdGFydFJlcXVlc3RGdW5jKHJlcXVlc3QpO1xcXFxuICAgIH0sXFxcXG4gICAgcG9zdFJlcXVlc3QodXJsLCBvcHRpb25zKSB7XFxcXG4gICAgICAgIHJldHVybiBuZXcgaHR0cFJlcXVlc3QodXJsLCBvcHRpb25zKS5zZXRTdGFydFJlcXVlc3RGdW5jKHBvc3RSZXF1ZXN0KTtcXFxcbiAgICB9LFxcXFxuICAgIGZldGNoQ29va2llKHVybCwgb3B0aW9ucykge1xcXFxuICAgICAgICByZXR1cm4gbmV3IGh0dHBSZXF1ZXN0KHVybCwgb3B0aW9ucykuc2V0U3RhcnRSZXF1ZXN0RnVuYyhmZXRjaENvb2tpZSk7XFxcXG4gICAgfVxcXFxufSk7XFxcXG4kLmV4cG9ydHMgPSBodHRwUmVxdWVzdDtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLik4HliJfooajpobXpnaJcXFwiLFxcXCJwYXRoXFxcIjpcXFwicXVhcmtMaXN0XFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxubGV0IGQgPSBbXTtcXFxcblxcXFxuYWRkTGlzdGVuZXIoXFxcXFxcXCJvbkNsb3NlXFxcXFxcXCIsICgpID0+IGNsZWFyTXlWYXIoXFxcXFxcXCJwbGF5VXJsQ2FjaGVcXFxcXFxcIikpO1xcXFxuYWRkTGlzdGVuZXIoXFxcXFxcXCJvblJlZnJlc2hcXFxcXFxcIiwgKCkgPT4gY2xlYXJNeVZhcihcXFxcXFxcInBsYXlVcmxDYWNoZVxcXFxcXFwiKSk7XFxcXG5cXFxcbmxldCByZWFsdXJsID0gZGVjb2RlVVJJQ29tcG9uZW50KGdldFBhcmFtKFxcXFxcXFwicmVhbHVybFxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKSk7IC8vIC5zcGxpdChcXFxcXFxcIj9cXFxcXFxcIilbMF07XFxcXG4vLyBsZXQgdXJsRGF0YSA9IHJlYWx1cmwuc3BsaXQoXFxcXFxcXCIvXFxcXFxcXCIpO1xcXFxuXFxcXG5cXFxcblxcXFxubGV0IHNoYXJlSWQgPSBNWV9QQVJBTVMuc2hhcmVJZCB8fCByZWFsdXJsLm1hdGNoKC9wYW5cXFxcXFxcXC5xdWFya1xcXFxcXFxcLmNuKCUyRnxcXFxcXFxcXC8pc1xcXFxcXFxcMShbYS16QS1aMC05XSspLylbMl07XFxcXG5sZXQgc2hhcmVQd2QgPSBnZXRQYXJhbShcXFxcXFxcInNoYXJlUHdkXFxcXFxcXCIsIE1ZX1BBUkFNUy5zaGFyZVB3ZCB8fCBcXFxcXFxcIlxcXFxcXFwiKTtcXFxcbmxldCBzaGFyZVRva2VuID0gZ2V0UGFyYW0oXFxcXFxcXCJzaGFyZVRva2VuXFxcXFxcXCIsIE1ZX1BBUkFNUy5zaGFyZVRva2VuIHx8IFxcXFxcXFwiXFxcXFxcXCIpO1xcXFxuXFxcXG5sZXQgZmlsZUlkID0gTVlfUEFSQU1TLmZpbGVJZDtcXFxcblxcXFxubGV0IHNvcnQgPSB7XFxcXG4gICAgXFxcXFxcXCLlkI3np7DmraPluo9cXFxcXFxcIjogXFxcXFxcXCJmaWxlX25hbWU6YXNjXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCLlkI3np7DlgJLluo9cXFxcXFxcIjogXFxcXFxcXCJmaWxlX25hbWU6ZGVzY1xcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwi5pe26Ze05q2j5bqPXFxcXFxcXCI6IFxcXFxcXFwidXBkYXRlZF9hdDphc2NcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcIuaXtumXtOWAkuW6j1xcXFxcXFwiOiBcXFxcXFxcInVwZGF0ZWRfYXQ6ZGVzY1xcXFxcXFwiXFxcXG59O1xcXFxubGV0IHN0eWxlcyA9IFtcXFxcXFxcInRleHRfMVxcXFxcXFwiLCBcXFxcXFxcImF2YXRhclxcXFxcXFwiXTtcXFxcblxcXFxubGV0IHNvcnRWYWx1ZSA9IHNvcnRbZ2V0SXRlbShcXFxcXFxcInNvcnRLZXlcXFxcXFxcIiwgXFxcXFxcXCLlkI3np7DmraPluo9cXFxcXFxcIildO1xcXFxubGV0IHN0eWxlID0gZ2V0SXRlbShcXFxcXFxcInN0eWxlXFxcXFxcXCIsIHN0eWxlc1swXSk7XFxcXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IHN0eWxlLFxcXFxuICAgICAgICB1cmw6ICQoc3R5bGVzLCAxLCAn6K+36YCJ5oupJykuc2VsZWN0KCgpID0+IHtcXFxcbiAgICAgICAgICAgIHNldEl0ZW0oJ3N0eWxlJywgaW5wdXQpO1xcXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICAgICAgfSksXFxcXG4gICAgICAgIHBpY191cmw6IFxcXFxcXFwiaHR0cHM6Ly9oaWtlcmZhbnMuY29tL2ltZy9hbGlfaWNvbi5zdmdcXFxcXFxcIixcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiaWNvbl9zbWFsbF80XFxcXFxcXCJcXFxcbiAgICB9KTtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogZ2V0SXRlbShcXFxcXFxcInNvcnRLZXlcXFxcXFxcIiwgXFxcXFxcXCLlkI3np7DmraPluo9cXFxcXFxcIiksXFxcXG4gICAgICAgIHVybDogJChPYmplY3Qua2V5cyhzb3J0KSwgMSwgJ+ivt+mAieaLqScpLnNlbGVjdCgoKSA9PiB7XFxcXG4gICAgICAgICAgICBzZXRJdGVtKFxcXFxcXFwic29ydEtleVxcXFxcXFwiLCBpbnB1dClcXFxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxcXG4gICAgICAgIH0pLFxcXFxuICAgICAgICBwaWNfdXJsOiBcXFxcXFxcImh0dHBzOi8vaGlrZXJmYW5zLmNvbS9pbWcvYWxpX3NvcnQuc3ZnXFxcXFxcXCIsXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImljb25fc21hbGxfNFxcXFxcXFwiXFxcXG4gICAgfSk7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IGdldEl0ZW0oXFxcXFxcXCJxdWFya19wbGF5TW9kZVxcXFxcXFwiLCBcXFxcXFxcIui9rOeggVxcXFxcXFwiKSxcXFxcbiAgICAgICAgdXJsOiAkKFtcXFxcXFxcIui9rOeggVxcXFxcXFwiLCBcXFxcXFxcIuWOn+eUu1xcXFxcXFwiXSwgMiwgXFxcXFxcXCLmkq3mlL7mqKHlvI9cXFxcXFxcIikuc2VsZWN0KCgpID0+IHtcXFxcbiAgICAgICAgICAgIHNldEl0ZW0oXFxcXFxcXCJxdWFya19wbGF5TW9kZVxcXFxcXFwiLCBpbnB1dCk7XFxcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/liIfmjaLmiJDlip9cXFxcXFxcIjtcXFxcbiAgICAgICAgfSksXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImljb25fc21hbGxfNFxcXFxcXFwiLFxcXFxuICAgICAgICBwaWNfdXJsOiBcXFxcXFxcImh0dHBzOi8vaGlrZXJmYW5zLmNvbS9pbWcvYWxpX3BsYXkuc3ZnXFxcXFxcXCIsXFxcXG4gICAgfSk7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IFxcXFxcXFwi5Yqf6IO9XFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogJChbXFxcXFxcXCLot7PovazlpLjlhYtBUFBcXFxcXFxcIiwgXFxcXFxcXCLnmbvlvZVcXFxcXFxcIiwgXFxcXFxcXCLljp/nlLvkuIvovb3nur/nqItcXFxcXFxcIl0pLnNlbGVjdCgoc2hhcmVJZCkgPT4ge1xcXFxuICAgICAgICAgICAgaWYgKGlucHV0ID09PSBcXFxcXFxcIui3s+i9rOWkuOWFi0FQUFxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwicWtsaW5rOi8vd3d3LnVjLmNuL2IyMGI4NGZkNzM1YThkZDNmNzU0MTEyOWJhY2M0ZTlhP2FjdGlvbj1vcGVuX3VybCZ1cmw9aHR0cHM6Ly9wYW4ucXVhcmsuY24vcy9cXFxcXFxcIiArIHNoYXJlSWQ7XFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09PSBcXFxcXFxcIueZu+W9lVxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQoW1xcXFxcXFwi6L6T5YWlQ29va2llXFxcXFxcXCIsIFxcXFxcXFwi572R6aG155m75b2VXFxcXFxcXCJdKS5zZWxlY3QoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT09IFxcXFxcXFwi572R6aG155m75b2VXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vcGFnZS9sb2dpblxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcXFxcXCJcXFxcXFxcIiwgXFxcXFxcXCLor7fovpPlhaVDb29raWVcXFxcXFxcIikuaW5wdXQoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkLnJlcXVpcmUoXFxcXFxcXCJ0b29sXFxcXFxcXCIpLmlzTG9naW5Db29raWUoaW5wdXQpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcXFxcXCJxdWFya0Nvb2tpZVxcXFxcXFwiLCBpbnB1dC5yZXBsYWNlKC9cXFxcXFxcXHMvZywgXFxcXFxcXCJcXFxcXFxcIikpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+iuvue9ruaIkOWKn1xcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8vQ29va2ll5qC85byP6ZSZ6K+vXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PT0gXFxcXFxcXCLljp/nlLvkuIvovb3nur/nqItcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAkKGdldEl0ZW0oXFxcXFxcXCJzcGVlZFRocmVhZFxcXFxcXFwiLCBcXFxcXFxcIjEwXFxcXFxcXCIpLCBcXFxcXFxcIuivt+i+k+WFpTMtMzLkuYvpl7TnmoTmlbTmlbBcXFxcXFxcIikuaW5wdXQoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgc3BlZWRUaHJlYWQgPSBwYXJzZUludChpbnB1dCk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmIChzcGVlZFRocmVhZCA8IDMgfHwgc3BlZWRUaHJlYWQgPiAzMikge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/orr7nva7kuI3lkIjms5VcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXFxcXFwic3BlZWRUaHJlYWRcXFxcXFxcIiwgU3RyaW5nKHNwZWVkVGhyZWFkKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v6K6+572u5oiQ5YqfXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0sIHNoYXJlSWQpLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJpY29uX3NtYWxsXzRcXFxcXFxcIixcXFxcbiAgICAgICAgcGljX3VybDogXFxcXFxcXCJodHRwczovL2hpa2VyZmFucy5jb20vaW1nL2FsaV9maWxlaW50by5zdmdcXFxcXFxcIixcXFxcbiAgICB9KTtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICBjb2xfdHlwZTogJ2xpbmVfYmxhbmsnXFxcXG4gICAgfSk7XFxcXG59XFxcXG5cXFxcblxcXFxubGV0IFF1YXJrU2hhcmVBcGkgPSAkLnJlcXVpcmUoXFxcXFxcXCJRdWFya1NoYXJlQXBpXFxcXFxcXCIpO1xcXFxubGV0IHF1YXJrU2hhcmVBcGkgPSBuZXcgUXVhcmtTaGFyZUFwaShzaGFyZUlkLCBzaGFyZVB3ZCkuc2V0VG9rZW4oc2hhcmVUb2tlbikuc2V0UmVmcmVzaCgoc2hhcmVUb2tlbikgPT4ge1xcXFxuICAgIE1ZX1BBUkFNUy5zaGFyZVRva2VuID0gc2hhcmVUb2tlbjtcXFxcbiAgICBzZXRQYWdlUGFyYW1zKE1ZX1BBUkFNUyk7XFxcXG59KTtcXFxcblxcXFxuZnVuY3Rpb24gZm9ybWF0U2l6ZShzaXplKSB7XFxcXG4gICAgaWYgKCFzaXplKSB7XFxcXG4gICAgICAgIHJldHVybiAnJztcXFxcbiAgICB9XFxcXG4gICAgY29uc3QgdW5pdHMgPSBbJ0InLCAnS0InLCAnTUInLCAnR0InLCAnVEInLCAnUEInLCAnRUInLCAnWkInLCAnWUInXTtcXFxcbiAgICBsZXQgaSA9IDA7XFxcXG4gICAgd2hpbGUgKHNpemUgPj0gMTAyNCkge1xcXFxuICAgICAgICBzaXplIC89IDEwMjQ7XFxcXG4gICAgICAgIGkrKztcXFxcbiAgICB9XFxcXG4gICAgc2l6ZSA9IGkgPyBOdW1iZXIoc2l6ZS50b0ZpeGVkKDIpKSA6IHNpemU7XFxcXG4gICAgcmV0dXJuIGAke3NpemV9ICR7dW5pdHNbaV19YDtcXFxcbn1cXFxcblxcXFxubGV0IHN1YkV4dHMgPSBbXFxcXFxcXCJ2dHRcXFxcXFxcIiwgXFxcXFxcXCJzcnRcXFxcXFxcIiwgXFxcXFxcXCJhc3NcXFxcXFxcIl07XFxcXG5sZXQgdGl0bGVIZWFkID0ge1xcXFxuICAgIHZpZGVvOiBcXFxcXFxcIvCfjqxcXFxcXFxcIixcXFxcbiAgICBhdWRpbzogXFxcXFxcXCLwn461XFxcXFxcXCIsXFxcXG4gICAgZG9jOiBcXFxcXFxcIvCfk5FcXFxcXFxcIixcXFxcbiAgICBpbWFnZTogXFxcXFxcXCLwn5a8XFxcXFxcXCIsXFxcXG4gICAgYXJjaGl2ZTogXFxcXFxcXCLwn5OmXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJkZWZhdWx0XFxcXFxcXCI6IFxcXFxcXFwi4p2TXFxcXFxcXCJcXFxcbn07XFxcXG5cXFxcbmZ1bmN0aW9uIGdldEhlYWQodHlwZSwgZXh0KSB7XFxcXG4gICAgbGV0IGhlYWQgPSB0aXRsZUhlYWRbdHlwZV07XFxcXG4gICAgLyppZiAoc3ViRXh0cy5pbmNsdWRlcyhleHQpKSB7XFxcXG4gICAgICAgIGhlYWQgPSBcXFxcXFxcIvCflbhcXFxcXFxcIjtcXFxcbiAgICB9Ki9cXFxcbiAgICByZXR1cm4gaGVhZCB8fCBcXFxcXFxcIuKdk1xcXFxcXFwiO1xcXFxufVxcXFxudHJ5IHtcXFxcbiAgICB2YXIgcmVzID0gcXVhcmtTaGFyZUFwaS5nZXRMaXN0RmlsZShmaWxlSWQsIE1ZX1BBR0UsIHNvcnRWYWx1ZSk7XFxcXG4gICAgLy/orr7nva7moIfpophcXFxcbiAgICBzZXRQYWdlVGl0bGUocmVzLmRhdGEuc2hhcmUudGl0bGUpO1xcXFxuICAgIHZhciBsaXN0ID0gcmVzLmRhdGEubGlzdHx8W107XFxcXG4gICAgaWYobGlzdC5sZW5ndGg9PT0wJiYhZmlsZUlkKXtcXFxcbiAgICAgICAgcmVzID0gcXVhcmtTaGFyZUFwaS5nZXRMaXN0RmlsZShyZXMuZGF0YS5zaGFyZS5maXJzdF9maWQsIE1ZX1BBR0UsIHNvcnRWYWx1ZSk7XFxcXG4gICAgICAgIHNldFBhZ2VUaXRsZShyZXMuZGF0YS5zaGFyZS50aXRsZSk7XFxcXG4gICAgICAgIHZhciBsaXN0ID0gcmVzLmRhdGEubGlzdHx8W107XFxcXG4gICAgfVxcXFxuICAgIGxpc3QuZm9yRWFjaChpdGVtID0+IHtcXFxcbiAgICAgICAgLy/liKTmlq3mmK/lkKbmlofku7blpLlcXFxcbiAgICAgICAgaWYgKGl0ZW0uZGlyKSB7XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIvCfk4JcXFxcXFxcIiArIGl0ZW0uZmlsZV9uYW1lLFxcXFxuICAgICAgICAgICAgICAgIGRlc2M6ICQuZGF0ZUZvcm1hdChpdGVtLnVwZGF0ZWRfYXQsICd5eXl5LU1NLWRkJykgKyAnICAnICsgaXRlbS5pbmNsdWRlX2l0ZW1zICsgJ+mhuSAgJyxcXFxcbiAgICAgICAgICAgICAgICBwaWNfdXJsOiBcXFxcXFxcImh0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vbWVzc3kvMjcuc3ZnXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS9xdWFya0xpc3Q/cGFnZT1meXBhZ2VcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogc3R5bGUsXFxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgc2hhcmVJZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgc2hhcmVQd2QsXFxcXG4gICAgICAgICAgICAgICAgICAgIHNoYXJlVG9rZW46IHF1YXJrU2hhcmVBcGkuZ2V0VG9rZW4oKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgZmlsZUlkOiBpdGVtLmZpZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgaW5oZXJpdFRpdGxlOiBmYWxzZVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogZ2V0SGVhZChpdGVtLm9ial9jYXRlZ29yeSkgKyBpdGVtLmZpbGVfbmFtZSxcXFxcbiAgICAgICAgICAgICAgICBkZXNjOiAkLmRhdGVGb3JtYXQoaXRlbS51cGRhdGVkX2F0LCAneXl5eS1NTS1kZCcpICsgJyAgJyArIGZvcm1hdFNpemUoaXRlbS5zaXplKSxcXFxcbiAgICAgICAgICAgICAgICBwaWNfdXJsOiBpdGVtLnRodW1ibmFpbCxcXFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoZmlkLCBmaWRfdG9rZW4sIHB3ZF9pZCwgc3Rva2VuLCBjYXRlZ29yeSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgcGxheVVybENhY2hlID0gc3RvcmFnZTAuZ2V0TXlWYXIoXFxcXFxcXCJwbGF5VXJsQ2FjaGVcXFxcXFxcIiwge30pO1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAocGxheVVybENhY2hlW2ZpZF0pIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwbGF5VXJsQ2FjaGVbZmlkXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSAkLnJlcXVpcmUoXFxcXFxcXCJwbGF5XFxcXFxcXCIpLmdldFBsYXlVcmwoZmlkLCBmaWRfdG9rZW4sIHB3ZF9pZCwgc3Rva2VuLCBjYXRlZ29yeSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGF5VXJsQ2FjaGVbZmlkXSA9IHVybDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKFxcXFxcXFwicGxheVVybENhY2hlXFxcXFxcXCIsIHBsYXlVcmxDYWNoZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXJsO1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSwgaXRlbS5maWQsIGl0ZW0uc2hhcmVfZmlkX3Rva2VuLCBzaGFyZUlkLCBxdWFya1NoYXJlQXBpLmdldFRva2VuKCksIGl0ZW0ub2JqX2NhdGVnb3J5KSxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogc3R5bGUsXFxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGl0ZW0uZmlkLFxcXFxuICAgICAgICAgICAgICAgICAgICBpbmhlcml0VGl0bGU6IGZhbHNlLFxcXFxuICAgICAgICAgICAgICAgICAgICBjbHM6ICdwbGF5bGlzdCAnICsgaXRlbS5vYmpfY2F0ZWdvcnlcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxcXG4gICAgICAgIH0pO1xcXFxuICAgIH0pO1xcXFxufSBjYXRjaCAoZSkge1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiBlLm1lc3NhZ2UsXFxcXG4gICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcXFxuICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KTtcXFxcbiAgICBpZiAoZS5tZXNzYWdlLmluY2x1ZGVzKFxcXFxcXFwi5o+Q5Y+W56CBXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLovpPlhaXmj5Dlj5bnoIFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHVybDogJCgpLmlucHV0KChNWV9QQVJBTVMpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBzZXRQYWdlUGFyYW1zKE9iamVjdC5hc3NpZ24oe30sIE1ZX1BBUkFNUywge1xcXFxuICAgICAgICAgICAgICAgICAgICBzaGFyZVB3ZDogaW5wdXRcXFxcbiAgICAgICAgICAgICAgICB9KSk7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICAgICAgICAgIH0sIE1ZX1BBUkFNUyksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCJcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfVxcXFxufVxcXFxuc2V0UmVzdWx0KGQpO1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuKTgeiOt+WPlumTvuaOpVxcXCIsXFxcInBhdGhcXFwiOlxcXCJwbGF5XFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxuY29uc3QgY29va2llID0gZ2V0SXRlbShcXFxcXFxcInF1YXJrQ29va2llXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpO1xcXFxubGV0IGh0dHBSZXF1ZXN0ID0gJC5yZXF1aXJlKFxcXFxcXFwiaHR0cFJlcXVlc3RcXFxcXFxcIik7XFxcXG5cXFxcbmZ1bmN0aW9uIENvb2tpZU1hbmFnZShjb29raWUpIHtcXFxcbiAgICB0aGlzLmNvb2tpZSA9IHt9O1xcXFxuICAgIHRoaXMuYWRkKGNvb2tpZSk7XFxcXG59XFxcXG5PYmplY3QuYXNzaWduKENvb2tpZU1hbmFnZS5wcm90b3R5cGUsIHtcXFxcbiAgICBhZGQoY29va2llKSB7XFxcXG4gICAgICAgIGxldCBjb29raWVzID0gW107XFxcXG4gICAgICAgIGlmICh0eXBlb2YgY29va2llID09PSBcXFxcXFxcInN0cmluZ1xcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICBjb29raWVzID0gY29va2llLnNwbGl0KFxcXFxcXFwiO1xcXFxcXFwiKTtcXFxcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNvb2tpZSkpIHtcXFxcbiAgICAgICAgICAgIGNvb2tpZXMgPSBjb29raWU7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgY29va2llcy5mb3JFYWNoKHYgPT4ge1xcXFxuICAgICAgICAgICAgdiA9IHYuc3BsaXQoXFxcXFxcXCI9XFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgaWYgKHYubGVuZ3RoIDwgMikgcmV0dXJuO1xcXFxuICAgICAgICAgICAgdGhpcy5jb29raWVbdlswXS50cmltKCldID0gdlsxXS50cmltKCk7XFxcXG4gICAgICAgIH0pO1xcXFxuICAgIH0sXFxcXG4gICAgZ2V0KCkge1xcXFxuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5jb29raWUpLm1hcCh2ID0+IHZbMF0gKyBcXFxcXFxcIj1cXFxcXFxcIiArIHZbMV0pLmpvaW4oXFxcXFxcXCI7XFxcXFxcXCIpO1xcXFxuICAgIH1cXFxcbn0pO1xcXFxuY29uc3QgY29va2llTWFuYWdlID0gbmV3IENvb2tpZU1hbmFnZShjb29raWUpO1xcXFxuXFxcXG5mdW5jdGlvbiB3YWl0U2xlZXAodGltZSkge1xcXFxuICAgIGphdmEubGFuZy5UaHJlYWQuc2xlZXAodGltZSB8fCA2MDApO1xcXFxufVxcXFxuXFxcXG5mdW5jdGlvbiByZXF1ZXN0SHR0cCh1cmwpIHtcXFxcbiAgICByZXR1cm4gbmV3IGh0dHBSZXF1ZXN0KHVybClcXFxcbiAgICAgICAgLnN1Y2Nlc3MoKGJvZHksIHJlcykgPT4ge1xcXFxuICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzICE9PSAyMDApIHtcXFxcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYm9keS5tZXNzYWdlKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGNvb2tpZU1hbmFnZS5hZGQocmVzLmhlYWRlcnNbXFxcXFxcXCJzZXQtY29va2llXFxcXFxcXCJdKTtcXFxcbiAgICAgICAgICAgIHJldHVybiBib2R5O1xcXFxuICAgICAgICB9KVxcXFxuICAgICAgICAuZXJyb3JUeXBlKChlcnIsIHJlcykgPT4ge1xcXFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihKU09OLnBhcnNlKHJlcy5ib2R5KS5tZXNzYWdlKTtcXFxcbiAgICAgICAgfSlcXFxcbiAgICAgICAgLmJvZHlUb1N0cmluZyh0cnVlKVxcXFxuICAgICAgICAuaGVhZGVycyh7XFxcXG4gICAgICAgICAgICBjb29raWU6IGNvb2tpZU1hbmFnZS5nZXQoKSxcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiVXNlci1BZ2VudFxcXFxcXFwiOiBcXFxcXFxcIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIHF1YXJrLWNsb3VkLWRyaXZlLzIuNS4yMCBDaHJvbWUvMTAwLjAuNDg5Ni4xNjAgRWxlY3Ryb24vMTguMy41LjQtYjQ3ODQ5MTEwMCBTYWZhcmkvNTM3LjM2IENoYW5uZWwvcGNra19vdGhlcl9jaFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJyZWZlcmVyXFxcXFxcXCI6IFxcXFxcXFwiaHR0cHM6Ly9kcml2ZS5xdWFyay5jbi9cXFxcXFxcIlxcXFxuICAgICAgICB9KTtcXFxcbn1cXFxcblxcXFxuZnVuY3Rpb24gZ2V0RHJpdmVJbmZvKCkge1xcXFxuICAgIHJldHVybiByZXF1ZXN0SHR0cChcXFxcXFxcImh0dHBzOi8vZHJpdmUucXVhcmsuY24vMS9jbG91ZGRyaXZlL3NoYXJlL3NoYXJlcGFnZS9kaXI/cHI9dWNwcm8mZnI9cGMmYXZlcj0xXFxcXFxcXCIpLnN0YXJ0KHRydWUpO1xcXFxufVxcXFxuXFxcXG5mdW5jdGlvbiBjcmVhdGVTYXZlVGFzayhmaWQsIGZpZF90b2tlbiwgcHdkX2lkLCBzdG9rZW4pIHtcXFxcbiAgICBsZXQgZHJpdmVJbmZvID0gZ2V0RHJpdmVJbmZvKCk7XFxcXG4gICAgcmV0dXJuIHJlcXVlc3RIdHRwKFxcXFxcXFwiaHR0cHM6Ly9kcml2ZS5xdWFyay5jbi8xL2Nsb3VkZHJpdmUvc2hhcmUvc2hhcmVwYWdlL3NhdmU/cHI9dWNwcm8mZnI9cGNcXFxcXFxcIikuc2V0U3RhcnRSZXF1ZXN0RnVuYyhwb3N0KS5ib2R5KHtcXFxcbiAgICAgICAgXFxcXFxcXCJmaWRfbGlzdFxcXFxcXFwiOiBbXFxcXG4gICAgICAgICAgICBmaWRcXFxcbiAgICAgICAgXSxcXFxcbiAgICAgICAgXFxcXFxcXCJmaWRfdG9rZW5fbGlzdFxcXFxcXFwiOiBbXFxcXG4gICAgICAgICAgICBmaWRfdG9rZW5cXFxcbiAgICAgICAgXSxcXFxcbiAgICAgICAgXFxcXFxcXCJ0b19wZGlyX2ZpZFxcXFxcXFwiOiBkcml2ZUluZm8uZGF0YS5kaXIuZmlkLFxcXFxuICAgICAgICBcXFxcXFxcInB3ZF9pZFxcXFxcXFwiOiBwd2RfaWQsXFxcXG4gICAgICAgIFxcXFxcXFwic3Rva2VuXFxcXFxcXCI6IHN0b2tlbixcXFxcbiAgICAgICAgXFxcXFxcXCJwZGlyX2ZpZFxcXFxcXFwiOiBkcml2ZUluZm8uZGF0YS5kaXIucGRpcl9maWRcXFxcbiAgICB9KS5zdGFydCh0cnVlKTtcXFxcbn1cXFxcblxcXFxuZnVuY3Rpb24gY3JlYXRlRGVsZXRlVGFzayhmaWQpIHtcXFxcbiAgICBsZXQgZHJpdmVJbmZvID0gZ2V0RHJpdmVJbmZvKCk7XFxcXG4gICAgcmV0dXJuIHJlcXVlc3RIdHRwKFxcXFxcXFwiaHR0cHM6Ly9kcml2ZS5xdWFyay5jbi8xL2Nsb3VkZHJpdmUvZmlsZS9kZWxldGU/cHI9dWNwcm8mZnI9cGNcXFxcXFxcIikuc2V0U3RhcnRSZXF1ZXN0RnVuYyhwb3N0KS5ib2R5KHtcXFxcbiAgICAgICAgXFxcXFxcXCJhY3Rpb25fdHlwZVxcXFxcXFwiOiAyLFxcXFxuICAgICAgICBcXFxcXFxcImZpbGVsaXN0XFxcXFxcXCI6IFtcXFxcbiAgICAgICAgICAgIGZpZFxcXFxuICAgICAgICBdLFxcXFxuICAgICAgICBcXFxcXFxcImV4Y2x1ZGVfZmlkc1xcXFxcXFwiOiBbXVxcXFxuICAgIH0pLnN0YXJ0KHRydWUpO1xcXFxufVxcXFxuXFxcXG5mdW5jdGlvbiB0YXNrKHRhc2tfaWQsIHJldHJ5X2luZGV4KSB7XFxcXG4gICAgcmV0dXJuIHJlcXVlc3RIdHRwKFxcXFxcXFwiaHR0cHM6Ly9kcml2ZS5xdWFyay5jbi8xL2Nsb3VkZHJpdmUvdGFza1xcXFxcXFwiKS5idWlsZFVybCh7XFxcXG4gICAgICAgIHByOiBcXFxcXFxcInVjcHJvXFxcXFxcXCIsXFxcXG4gICAgICAgIGZyOiBcXFxcXFxcInBjXFxcXFxcXCIsXFxcXG4gICAgICAgIHRhc2tfaWQ6IHRhc2tfaWQsXFxcXG4gICAgICAgIHJldHJ5X2luZGV4OiByZXRyeV9pbmRleFxcXFxuICAgIH0pLnN0YXJ0KHRydWUpO1xcXFxufVxcXFxuXFxcXG5mdW5jdGlvbiBxdWVyeVRhc2sodGFza19pZCkge1xcXFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSsrKSB7XFxcXG4gICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICBsZXQgcmVzID0gdGFzayh0YXNrX2lkLCBpICsgXFxcXFxcXCJcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICBpZiAocmVzLmRhdGEuc3RhdHVzID09PSAyKSB7XFxcXG4gICAgICAgICAgICAgICAgd2FpdFNsZWVwKDEwMDApO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiByZXMuZGF0YS5zYXZlX2FzLnNhdmVfYXNfdG9wX2ZpZHNbMF07XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB3YWl0U2xlZXAoMzAwKTtcXFxcbiAgICAgICAgfSBjYXRjaCAoZSkge31cXFxcbiAgICB9XFxcXG4gICAgcmV0dXJuIHZvaWQoMCk7XFxcXG59XFxcXG5cXFxcbmZ1bmN0aW9uIHF1ZXJ5VGFza1N0YXR1cyh0YXNrX2lkKSB7XFxcXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA2OyBpKyspIHtcXFxcbiAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgIGxldCByZXMgPSB0YXNrKHRhc2tfaWQsIGkgKyBcXFxcXFxcIlxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgIGlmIChyZXMuZGF0YS5zdGF0dXMgPT09IDIpIHtcXFxcbiAgICAgICAgICAgICAgICB3YWl0U2xlZXAoMTAwMCk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB3YWl0U2xlZXAoMzAwKTtcXFxcbiAgICAgICAgfSBjYXRjaCAoZSkge31cXFxcbiAgICB9XFxcXG4gICAgcmV0dXJuIGZhbHNlO1xcXFxufVxcXFxuXFxcXG5mdW5jdGlvbiBnZXRQcmV2aWV3VmlkZW8oZmlkKSB7XFxcXG4gICAgcmV0dXJuIHJlcXVlc3RIdHRwKFxcXFxcXFwiaHR0cHM6Ly9kcml2ZS5xdWFyay5jbi8xL2Nsb3VkZHJpdmUvZmlsZS92Mi9wbGF5P3ByPXVjcHJvJmZyPXBjXFxcXFxcXCIpLmJvZHkoe1xcXFxuICAgICAgICBcXFxcXFxcImZpZFxcXFxcXFwiOiBmaWQsXFxcXG4gICAgICAgIFxcXFxcXFwicmVzb2x1dGlvbnNcXFxcXFxcIjogXFxcXFxcXCJub3JtYWwsbG93LGhpZ2gsc3VwZXIsMmssNGtcXFxcXFxcIixcXFxcbiAgICAgICAgXFxcXFxcXCJzdXBwb3J0c1xcXFxcXFwiOiBcXFxcXFxcImZtcDQsbTN1OFxcXFxcXFwiXFxcXG4gICAgfSkuc2V0U3RhcnRSZXF1ZXN0RnVuYyhwb3N0KS5zdGFydCh0cnVlKTtcXFxcbn1cXFxcblxcXFxuZnVuY3Rpb24gZ2V0RG93bmxvYWRVcmwoZmlkKSB7XFxcXG4gICAgcmV0dXJuIHJlcXVlc3RIdHRwKFxcXFxcXFwiaHR0cHM6Ly9kcml2ZS5xdWFyay5jbi8xL2Nsb3VkZHJpdmUvZmlsZS9kb3dubG9hZD9wcj11Y3BybyZmcj1wY1xcXFxcXFwiKS5ib2R5KHtcXFxcbiAgICAgICAgXFxcXFxcXCJmaWRzXFxcXFxcXCI6IFtmaWRdXFxcXG4gICAgfSkuc2V0U3RhcnRSZXF1ZXN0RnVuYyhwb3N0KS5zdGFydCh0cnVlKTtcXFxcbn1cXFxcblxcXFxuZnVuY3Rpb24gZ2V0UGxheVVybChmaWQsIGZpZF90b2tlbiwgcHdkX2lkLCBzdG9rZW4sIGNhdGVnb3J5KSB7XFxcXG4gICAgdHJ5IHtcXFxcbiAgICAgICAgaWYgKCFjb29raWUpIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v6K+355m75b2V6LSm5Y+3XFxcXFxcXCI7XFxcXG4gICAgICAgIGxldCB0YXNrSWQgPSBjcmVhdGVTYXZlVGFzayhmaWQsIGZpZF90b2tlbiwgcHdkX2lkLCBzdG9rZW4pLmRhdGEudGFza19pZDtcXFxcbiAgICAgICAgbGV0IGFzZmlkID0gcXVlcnlUYXNrKHRhc2tJZCk7XFxcXG4gICAgICAgIGlmICghYXNmaWQpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v6I635Y+W5aSx6LSlXFxcXFxcXCI7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgbGV0IHBsYXlDb29raWUgPSBjb29raWVNYW5hZ2UuZ2V0KCk7XFxcXG4gICAgICAgIGxldCBwbGF5SGVhZGVyID0ge1xcXFxuICAgICAgICAgICAgUmVmZXJlcjogXFxcXFxcXCJodHRwOi8vcGFuLnF1YXJrLmNuL1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgY29va2llOiBwbGF5Q29va2llLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJVc2VyLUFnZW50XFxcXFxcXCI6IFxcXFxcXFwiY29tLnN0dWIuU3R1YkFwcC8xLjMuMCAoTGludXg7QW5kcm9pZCAxNCkgQW5kcm9pZFhNZWRpYTMvMS4xLjFcXFxcXFxcIlxcXFxuICAgICAgICB9O1xcXFxuICAgICAgICBpZiAoY2F0ZWdvcnkgPT0gXFxcXFxcXCJ2aWRlb1xcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICBsZXQgcGxheU1vZGUgPSBnZXRJdGVtKFxcXFxcXFwicXVhcmtfcGxheU1vZGVcXFxcXFxcIiwgXFxcXFxcXCLovaznoIFcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICBpZiAocGxheU1vZGUgPT09IFxcXFxcXFwi6L2s56CBXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgdmlkZW9SZXMgPSBnZXRQcmV2aWV3VmlkZW8oYXNmaWQpO1xcXFxuICAgICAgICAgICAgICAgIGxldCB2aWRlb0xpc3QgPSB2aWRlb1Jlcy5kYXRhLnZpZGVvX2xpc3Q7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHBsYXlMaXN0ID0ge1xcXFxuICAgICAgICAgICAgICAgICAgICBuYW1lczogW10sXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybHM6IFtdLFxcXFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBbXVxcXFxuICAgICAgICAgICAgICAgIH07XFxcXG4gICAgICAgICAgICAgICAgdmlkZW9MaXN0LmZpbHRlcih2ID0+IHYuYWNjZXNzYWJsZSkuZm9yRWFjaCh2ID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcGxheUxpc3QubmFtZXMucHVzaCh2LnJlc29sdXRpb24pO1xcXFxuICAgICAgICAgICAgICAgICAgICBwbGF5TGlzdC51cmxzLnB1c2godi52aWRlb19pbmZvLnVybCArIFxcXFxcXFwiI2lzVmlkZW89dHJ1ZSNcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgICAgIHBsYXlMaXN0LmhlYWRlcnMucHVzaChwbGF5SGVhZGVyKTtcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICBjcmVhdGVEZWxldGVUYXNrKGFzZmlkKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocGxheUxpc3QpO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgcGxheVVybCA9IGdldERvd25sb2FkVXJsKGFzZmlkKS5kYXRhWzBdLmRvd25sb2FkX3VybDtcXFxcbiAgICAgICAgICAgICAgICBsZXQgcGxheUxpc3QgPSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIG5hbWVzOiBbXFxcXFxcXCLljp/nlLtcXFxcXFxcIl0sXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybHM6IFtwbGF5VXJsICsgXFxcXFxcXCIjaXNWaWRlbz10cnVlIyNmYXN0UGxheU1vZGUjI3RocmVhZHM9XFxcXFxcXCIgKyBnZXRJdGVtKFxcXFxcXFwic3BlZWRUaHJlYWRcXFxcXFxcIiwgXFxcXFxcXCIxMFxcXFxcXFwiKSArIFxcXFxcXFwiI1xcXFxcXFwiXSxcXFxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogW3BsYXlIZWFkZXJdXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIGNyZWF0ZURlbGV0ZVRhc2soYXNmaWQpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShwbGF5TGlzdCk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0gZWxzZSB7IC8vIOS4jeaYr+inhumikei1hOa6kFxcXFxuICAgICAgICAgICAgbGV0IHBsYXlJbmZvID0gZ2V0RG93bmxvYWRVcmwoYXNmaWQpLmRhdGFbMF07XFxcXG4gICAgICAgICAgICBsZXQgcGxheVVybCA9IHBsYXlJbmZvLmRvd25sb2FkX3VybDtcXFxcblxcXFxuICAgICAgICAgICAgLy8g6Z+z6aKR6LWE5rqQXFxcXG4gICAgICAgICAgICBpZiAocGxheUluZm8uZm9ybWF0X3R5cGUuaW5jbHVkZXMoJ2F1ZGlvJykgfHwgcGxheUluZm8uZmlsZV9uYW1lLm1hdGNoKC9cXFxcXFxcXC4oYWFjfGFjM3xhaWZmfGFtcnxtNGF8bXAyfG1wM3xvZ2d8cmF8YXV8d2F2fHdtYXxta2F8ZmxhY3x3YXYpLykpIHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgcGxheUxpc3QgPSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIG5hbWVzOiBbXFxcXFxcXCLpn7PpopFcXFxcXFxcIl0sXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybHM6IFtwbGF5VXJsICsgXFxcXFxcXCIjaXNWaWRlbz10cnVlI1xcXFxcXFwiXSxcXFxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogW3BsYXlIZWFkZXJdLFxcXFxuICAgICAgICAgICAgICAgICAgICBseXJpYzogXFxcXFxcXCJcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICBjcmVhdGVEZWxldGVUYXNrKGFzZmlkKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocGxheUxpc3QpO1xcXFxuICAgICAgICAgICAgfVxcXFxuXFxcXG4gICAgICAgICAgICAvLyDmvI/nvZHkuYvpsbxcXFxcbiAgICAgICAgICAgIGlmIChwbGF5SW5mby5mb3JtYXRfdHlwZS5pbmNsdWRlcygndmlkZW8nKSB8fCBwbGF5SW5mby5maWxlX25hbWUubWF0Y2goL1xcXFxcXFxcLihhdml8d212fG1wZWd8bXA0fG00dnxtb3Z8YXNmfGZsdnxmNHZ8cm12YnxybXwzZ3B8dm9ifG1rdikvKSkge1xcXFxuICAgICAgICAgICAgICAgIGxldCBwbGF5TGlzdCA9IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgbmFtZXM6IFtcXFxcXFxcIuWOn+eUu1xcXFxcXFwiXSxcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsczogW3BsYXlVcmwgKyBcXFxcXFxcIiNpc1ZpZGVvPXRydWUjI2Zhc3RQbGF5TW9kZSMjdGhyZWFkcz1cXFxcXFxcIiArIGdldEl0ZW0oXFxcXFxcXCJzcGVlZFRocmVhZFxcXFxcXFwiLCBcXFxcXFxcIjEwXFxcXFxcXCIpICsgXFxcXFxcXCIjXFxcXFxcXCJdLFxcXFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBbcGxheUhlYWRlcl1cXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgY3JlYXRlRGVsZXRlVGFzayhhc2ZpZCk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHBsYXlMaXN0KTtcXFxcbiAgICAgICAgICAgIH1cXFxcblxcXFxuICAgICAgICAgICAgLy8g5pi+56S65Zu+54mHXFxcXG4gICAgICAgICAgICBpZiAocGxheUluZm8uZm9ybWF0X3R5cGUuaW5jbHVkZXMoJ2ltYWdlJykgfHwgcGxheUluZm8uZmlsZV9uYW1lLm1hdGNoKC9cXFxcXFxcXC4oanBnfGdpZnxqcGVnfHBuZ3xibXB8c3ZnfGljb3x0aWZmKS8pKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBsYXlVcmwgKyBcXFxcXFxcIkBoZWFkZXJzPVxcXFxcXFwiICsgSlNPTi5zdHJpbmdpZnkocGxheUhlYWRlcik7XFxcXG4gICAgICAgICAgICB9XFxcXG5cXFxcbiAgICAgICAgICAgIC8vIOS4i+i9vei1hOa6kFxcXFxuICAgICAgICAgICAgcGxheUhlYWRlciA9IE9iamVjdC5rZXlzKHBsYXlIZWFkZXIpLm1hcChLZXkgPT4gS2V5ICsgXFxcXFxcXCJAXFxcXFxcXCIgKyBTdHJpbmcocGxheUhlYWRlcltLZXldKS5yZXBsYWNlKC87L2csIFxcXFxcXFwi77yb77ybXFxcXFxcXCIpKTtcXFxcbiAgICAgICAgICAgIHJldHVybiAnZG93bmxvYWQ6Ly8nICsgcGxheVVybCArICc7eycgKyBwbGF5SGVhZGVyLmpvaW4oXFxcXFxcXCImJlxcXFxcXFwiKSArICd9JztcXFxcbiAgICAgICAgfVxcXFxuICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgaWYgKGUubWVzc2FnZS5pbmNsdWRlcyhcXFxcXFxcInJlcXVpcmUgbG9naW5cXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgIHRvYXN0KFxcXFxcXFwi5pyq55m75b2V5oiW55m75b2V6L+H5pyf77yM6K+36YeN5paw55m75b2VXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2xvZ2luXFxcXFxcXCI7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly9cXFxcXFxcIiArIGUudG9TdHJpbmcoKTtcXFxcbiAgICB9XFxcXG59XFxcXG5cXFxcbiQuZXhwb3J0cyA9IHtcXFxcbiAgICBnZXRQbGF5VXJsXFxcXG59O1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuKTgeeZu+W9lei0puWPt1xcXCIsXFxcInBhdGhcXFwiOlxcXCJsb2dpblxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbmxldCBkID0gW107XFxcXG5hZGRMaXN0ZW5lcihcXFxcXFxcIm9uQ2xvc2VcXFxcXFxcIiwgKCkgPT4ge1xcXFxuICAgIGxldCBjb29raWUgPSBnZXRWYXIoXFxcXFxcXCJxdWFya0Nvb2tpZVxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKTtcXFxcbiAgICBpZiAoY29va2llKSB7XFxcXG4gICAgICAgIHNldEl0ZW0oXFxcXFxcXCJxdWFya0Nvb2tpZVxcXFxcXFwiLCBjb29raWUpO1xcXFxuICAgICAgICB0b2FzdChcXFxcXFxcIkNvb2tpZeiOt+WPluaIkOWKn1xcXFxcXFwiKTtcXFxcbiAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICB9XFxcXG4gICAgY2xlYXJWYXIoXFxcXFxcXCJxdWFya0Nvb2tpZVxcXFxcXFwiKTtcXFxcbn0pO1xcXFxuZC5wdXNoKHtcXFxcbiAgICBjb2xfdHlwZTogXFxcXFxcXCJ4NV93ZWJ2aWV3X3NpbmdsZVxcXFxcXFwiLFxcXFxuICAgIHVybDogXFxcXFxcXCJodHRwczovL3Bhbi5xdWFyay5jbi9cXFxcXFxcIixcXFxcbiAgICBkZXNjOiBcXFxcXFxcImZsb2F0JiYxMDAlXFxcXFxcXCIsXFxcXG4gICAgZXh0cmE6IHtcXFxcbiAgICAgICAganM6ICQudG9TdHJpbmcoKEFwaVJvb3RVcmwpID0+IHtcXFxcbiAgICAgICAgICAgIGxldCB0aW1lSW50ZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IENvb2tpZSA9IGZiYS5nZXRDb29raWUoQXBpUm9vdFVybCk7XFxcXG4gICAgICAgICAgICAgICAgaWYgKENvb2tpZS5pbmNsdWRlcyhcXFxcXFxcIl9VUF9GN0VfOERfPVxcXFxcXFwiKSAmJiBDb29raWUuaW5jbHVkZXMoXFxcXFxcXCJfX3VpZD1cXFxcXFxcIikmJkNvb2tpZS5pbmNsdWRlcyhcXFxcXFxcIl9fcHV1cz1cXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgZmJhLnB1dFZhcihcXFxcXFxcInF1YXJrQ29va2llXFxcXFxcXCIsIENvb2tpZSlcXFxcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lSW50ZXIpO1xcXFxuICAgICAgICAgICAgICAgICAgICBmYmEubG9nKENvb2tpZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGZiYS5iYWNrKGZhbHNlKTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9LCA2MDApO1xcXFxuICAgICAgICB9LCBcXFxcXFxcImh0dHBzOi8vcGFuLnF1YXJrLmNuXFxcXFxcXCIpLFxcXFxuICAgICAgICB1YTogUENfVUEsXFxcXG4gICAgICAgIGpzTG9hZGluZ0luamVjdDogZmFsc2VcXFxcbiAgICB9XFxcXG59KTtcXFxcbnNldFJlc3VsdChkKVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuKTgeeZu+W9leajgOa1i1xcXCIsXFxcInBhdGhcXFwiOlxcXCJ0b29sXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxuJC5leHBvcnRzID0ge1xcXFxuICAgIGlzTG9naW5Db29raWUoY29va2llKSB7XFxcXG4gICAgICAgIHJldHVybiAhIShjb29raWUgJiYgY29va2llLmluY2x1ZGVzKFxcXFxcXFwiX1VQX0Y3RV84RF89XFxcXFxcXCIpICYmIGNvb2tpZS5pbmNsdWRlcyhcXFxcXFxcIl9fdWlkPVxcXFxcXFwiKSAmJiBjb29raWUuaW5jbHVkZXMoXFxcXFxcXCJfX3B1dXM9XFxcXFxcXCIpKTtcXFxcbiAgICB9LFxcXFxuXFxcXG5cXFxcblxcXFxuICAgIHNldFJ1bGUoaW5wdXQpIHtcXFxcbiAgICAgICAgc2hvd0xvYWRpbmcoJ3Vja2vkupEg6Kej5p6Q5LitLi4uJyk7XFxcXG4gICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAvLyDmoLzlvI/ljJZcXFxcbiAgICAgICAgICAgIFtsb2dULCB0eXBlLCB0ZXh0XSA9IFN0cmluZyhpbnB1dCkuc3BsaXQoXFxcXFxcXCLvv6VcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICBzd2l0Y2ggKFN0cmluZyh0eXBlKSkge1xcXFxuICAgICAgICAgICAgICAgIGNhc2UgJ1Bhc3RlJzpcXFxcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHBhcnNlUGFzdGUodGV4dCk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgIGNhc2UgJ0xhbnpvdSc6XFxcXG4gICAgICAgICAgICAgICAgICAgIFt1cmwsIHB3ZF0gPSB0ZXh0LnNwbGl0KFxcXFxcXFwiIyNcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgICAgIGR1cmwgPSAkLnJlcXVpcmUoJ2xhbnpvdT9ydWxlPXVja2vkupEnKS5vbmVfdXJsKHVybCwgcHdkLCAxKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IFN0cmluZyhmZXRjaChkdXJsKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmICgoc3AgPSB0ZXh0LnNwbGl0KFxcXFxcXFwi77+lXFxcXFxcXCIpKS5sZW5ndGggPT0gMykge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHNwWzJdLnNwbGl0KFxcXFxcXFwiQFxcXFxcXFwiKVswXS50cmltKCk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBhcnIxID0gSlNPTi5wYXJzZShiYXNlNjREZWNvZGUodGV4dCkpO1xcXFxuXFxcXG5cXFxcbiAgICAgICAgICAgIC8vIOWQiOW5tu+8jOWOu+mHjVxcXFxuICAgICAgICAgICAgYXJyMiA9ICQucmVxdWlyZShcXFxcXFxcImNvbmZpZ3M/cnVsZT11Y2tr5LqRXFxcXFxcXCIpLmdldEpzb24oKTtcXFxcbiAgICAgICAgICAgIGFycjMgPSBhcnIyLmNvbmNhdChhcnIxKS5maWx0ZXIoKG9iaiwgaW5kZXgsIGFycikgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBhcnIuZmluZEluZGV4KG8gPT4gb2JqLmdyb3VwID09PSBvLmdyb3VwICYmIG9iai50aXRsZSA9PT0gby50aXRsZSAmJiAob2JqLnRpbWUgPiBvLnRpbWUgfHwgb2JqLnRpbWUgPT0gby50aW1lKSkgPT09IGluZGV4O1xcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAkLnJlcXVpcmUoXFxcXFxcXCJjb25maWdzP3J1bGU9dWNra+S6kVxcXFxcXFwiKS5zYXZlSnNvbihhcnIzKTtcXFxcblxcXFxuXFxcXG4gICAgICAgICAgICAvLyDorqHnrpfkvZnph49cXFxcbiAgICAgICAgICAgIHggPSBhcnIzLmxlbmd0aCAtIGFycjIubGVuZ3RoO1xcXFxuICAgICAgICAgICAgZiA9IGFycjEubGVuZ3RoIC0geFxcXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICAgICAgICAgIHRvYXN0KFxcXFxcXFwi5a+85YWl5oiQ5Yqf77yM5paw5aKe77yaXFxcXFxcXCIgKyB4ICsgXFxcXFxcXCIg6KaG55uW77yaXFxcXFxcXCIgKyBmKTtcXFxcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgbG9nKGUudG9TdHJpbmcoKSk7XFxcXG4gICAgICAgICAgICB0b2FzdChcXFxcXFxcIuWvvOWFpeWksei0pVxcXFxcXFwiKTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBoaWRlTG9hZGluZygpO1xcXFxuICAgIH0sXFxcXG5cXFxcblxcXFxuXFxcXG4gICAgc2V0RWRpdCgpIHtcXFxcbiAgICAgICAgXyA9IHtcXFxcbiAgICAgICAgICAgIGdyb3VwOiBnZXRNeVZhcihcXFxcXFxcImdyb3VwXFxcXFxcXCIsIFxcXFxcXFwi5aS45YWLXFxcXFxcXCIpLnRyaW0oKSwgLy8g6KeE5YiZIOexu+WIq1xcXFxuICAgICAgICAgICAgc2VhcmNoX2VuYWJsZWQ6IGdldE15VmFyKFxcXFxcXFwic2VhcmNoX2VuYWJsZWRcXFxcXFxcIiwgXFxcXFxcXCIxXFxcXFxcXCIpLnRyaW0oKSwgLy8g5ZCv55So5pCc57SiICNcXFxcbiAgICAgICAgICAgIGV4cGxvcmVfZW5hYmxlZDogZ2V0TXlWYXIoXFxcXFxcXCJleHBsb3JlX2VuYWJsZWRcXFxcXFxcIiwgXFxcXFxcXCIwXFxcXFxcXCIpLnRyaW0oKSwgLy8g5ZCv55So5Y+R546wICNcXFxcblxcXFxuICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKFxcXFxcXFwidGl0bGVcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIikudHJpbSgpLCAvLyDmupDlkI3np7BcXFxcbiAgICAgICAgICAgIGF1dGhvcjogZ2V0TXlWYXIoXFxcXFxcXCJhdXRob3JcXFxcXFxcIiwgXFxcXFxcXCLkvZrlkI1cXFxcXFxcIikudHJpbSgpLCAvLyDmupDkvZzogIVcXFxcbiAgICAgICAgICAgIGljb246IGdldE15VmFyKFxcXFxcXFwiaWNvblxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKS50cmltKCksIC8vIOa6kOWbvuagh1xcXFxuICAgICAgICAgICAgcHJlUnVsZTogZ2V0TXlWYXIoXFxcXFxcXCJwcmVSdWxlXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpLnRyaW0oKSwgLy8ganPpooTlpITnkIZcXFxcblxcXFxuICAgICAgICAgICAgc2VhcmNoX3VybDogZ2V0TXlWYXIoXFxcXFxcXCJzZWFyY2hfdXJsXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpLnRyaW0oKSwgLy8g5pCc57Si6ZO+5o6lXFxcXG4gICAgICAgICAgICBzZWFyY2hfZ3JvdXA6IGdldE15VmFyKFxcXFxcXFwic2VhcmNoX2dyb3VwXFxcXFxcXCIsIFxcXFxcXFwi5bi455SoXFxcXFxcXCIpLnRyaW0oKSwgLy8g5rqQ5YiG57uEICNcXFxcbiAgICAgICAgICAgIHNlYXJjaEZpbmQ6IGdldE15VmFyKFxcXFxcXFwic2VhcmNoRmluZFxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKS50cmltKCksIC8vIOaQnOe0ouinhOWImVxcXFxuXFxcXG4gICAgICAgICAgICBleHBsb3JlX1g1OiBnZXRNeVZhcihcXFxcXFxcImV4cGxvcmVfWDVcXFxcXFxcIiwgXFxcXFxcXCIwXFxcXFxcXCIpLnRyaW0oKSwgLy8g5L2/55SoeDUgI1xcXFxuICAgICAgICAgICAgdXJsOiBnZXRNeVZhcihcXFxcXFxcInVybFxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKS50cmltKCksIC8vIOWPkeeOsOmTvuaOpVxcXFxuICAgICAgICAgICAgZmluZF9ydWxlOiBnZXRNeVZhcihcXFxcXFxcImZpbmRfcnVsZVxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKS50cmltKCksIC8vIOWPkeeOsOinhOWImVxcXFxuXFxcXG4gICAgICAgICAgICAvLyDlj5HnjrDpk77mjqXmm7/mjaJcXFxcbiAgICAgICAgICAgIGNsYXNzX25hbWU6IGdldE15VmFyKFxcXFxcXFwiY2xhc3NfbmFtZVxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKS50cmltKCksXFxcXG4gICAgICAgICAgICBjbGFzc191cmw6IGdldE15VmFyKFxcXFxcXFwiY2xhc3NfdXJsXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpLnRyaW0oKSxcXFxcbiAgICAgICAgICAgIGFyZWFfbmFtZTogZ2V0TXlWYXIoXFxcXFxcXCJhcmVhX25hbWVcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIikudHJpbSgpLFxcXFxuICAgICAgICAgICAgYXJlYV91cmw6IGdldE15VmFyKFxcXFxcXFwiYXJlYV91cmxcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIikudHJpbSgpLFxcXFxuICAgICAgICAgICAgeWVhcl9uYW1lOiBnZXRNeVZhcihcXFxcXFxcInllYXJfbmFtZVxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKS50cmltKCksXFxcXG4gICAgICAgICAgICB5ZWFyX3VybDogZ2V0TXlWYXIoXFxcXFxcXCJ5ZWFyX3VybFxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKS50cmltKCksXFxcXG4gICAgICAgICAgICBzb3J0X25hbWU6IGdldE15VmFyKFxcXFxcXFwic29ydF9uYW1lXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpLnRyaW0oKSxcXFxcbiAgICAgICAgICAgIHNvcnRfdXJsOiBnZXRNeVZhcihcXFxcXFxcInNvcnRfdXJsXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpLnRyaW0oKSxcXFxcblxcXFxuICAgICAgICAgICAgLy8geDXorr7nva5cXFxcbiAgICAgICAgICAgIHg1X2pzTG9hZGluZ0luamVjdDogZ2V0TXlWYXIoXFxcXFxcXCJ4NV9qc0xvYWRpbmdJbmplY3RcXFxcXFxcIiwgXFxcXFxcXCIwXFxcXFxcXCIpLnRyaW0oKSxcXFxcbiAgICAgICAgICAgIHg1X2pzOiBnZXRNeVZhcihcXFxcXFxcIng1X2pzXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpLnRyaW0oKSxcXFxcbiAgICAgICAgICAgIHg1X2Jsb2NrUnVsZXM6IGdldE15VmFyKFxcXFxcXFwieDVfYmxvY2tSdWxlc1xcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKS50cmltKCksXFxcXG4gICAgICAgICAgICB4NV91cmxJbnRlcmNlcHRvcjogZ2V0TXlWYXIoXFxcXFxcXCJ4NV91cmxJbnRlcmNlcHRvclxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKS50cmltKCksXFxcXG4gICAgICAgICAgICB4NV9wYWdlSG9tZTogZ2V0TXlWYXIoXFxcXFxcXCJ4NV9wYWdlSG9tZVxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKS50cmltKCksXFxcXG4gICAgICAgICAgICB4NV9yZWZlcmVyOiBnZXRNeVZhcihcXFxcXFxcIng1X3JlZmVyZXJcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIikudHJpbSgpLFxcXFxuICAgICAgICAgICAgeDVfaW1nTG9uZ0NsaWNrOiBnZXRNeVZhcihcXFxcXFxcIng1X2ltZ0xvbmdDbGlja1xcXFxcXFwiLCBcXFxcXFxcIjBcXFxcXFxcIikudHJpbSgpLFxcXFxuICAgICAgICAgICAgeDVfc2hvd1Byb2dyZXNzOiBnZXRNeVZhcihcXFxcXFxcIng1X3Nob3dQcm9ncmVzc1xcXFxcXFwiLCBcXFxcXFxcIjBcXFxcXFxcIikudHJpbSgpLFxcXFxuICAgICAgICAgICAgeDVfZmxvYXRWaWRlbzogZ2V0TXlWYXIoXFxcXFxcXCJ4NV9mbG9hdFZpZGVvXFxcXFxcXCIsIFxcXFxcXFwiMFxcXFxcXFwiKS50cmltKCksXFxcXG4gICAgICAgICAgICB4NV9hdXRvUGxheTogZ2V0TXlWYXIoXFxcXFxcXCJ4NV9hdXRvUGxheVxcXFxcXFwiLCBcXFxcXFxcIjBcXFxcXFxcIikudHJpbSgpLFxcXFxuICAgICAgICAgICAgeDVfdWE6IGdldE15VmFyKFxcXFxcXFwieDVfdWFcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIikudHJpbSgpLFxcXFxuICAgICAgICAgICAgeDVfdXJsOiBnZXRNeVZhcihcXFxcXFxcIng1X3VybFxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKS50cmltKCksXFxcXG4gICAgICAgICAgICB4NV9kZXNjOiBnZXRNeVZhcihcXFxcXFxcIng1X2Rlc2NcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIikudHJpbSgpLFxcXFxuICAgICAgICAgICAgeDVfaG9tZTogZ2V0TXlWYXIoXFxcXFxcXCJ4NV9ob21lXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpLnRyaW0oKSxcXFxcbiAgICAgICAgICAgIHRpbWU6IG5ldyBEYXRlKCkuZ2V0VGltZSgpLCAvLyDkv53lrZjml7bpl7QgI1xcXFxuICAgICAgICB9O1xcXFxuICAgICAgICBpZiAoXy50aXRsZSAhPSBcXFxcXFxcIlxcXFxcXFwiICYmIF8udGl0bGUgIT0gXFxcXFxcXCLogZrmkJxcXFxcXFxcIiAmJiBfLnRpdGxlICE9IFxcXFxcXFwi5pyA5ZCO6Z2iXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgIGlmICgoXy5zZWFyY2hfdXJsICE9IFxcXFxcXFwiXFxcXFxcXCIgJiYgXy5zZWFyY2hGaW5kICE9IFxcXFxcXFwiXFxcXFxcXCIpIHx8IChfLnVybCAhPSBcXFxcXFxcIlxcXFxcXFwiICYmIChfLmV4cGxvcmVfWDUgPT0gXFxcXFxcXCIxXFxcXFxcXCIgfHwgXy5maW5kX3J1bGUgIT0gXFxcXFxcXCJcXFxcXFxcIikpKSB7XFxcXG4gICAgICAgICAgICAgICAgZm9yICh0IGluIF8pIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcih0KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9bdF0gPT0gXFxcXFxcXCJcXFxcXFxcIiB8fCBfW3RdID09IFxcXFxcXFwiMFxcXFxcXFwiIHx8IF9bdF0gPT0gXFxcXFxcXCJNT0JJTEVfVUFcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIF9bdF07XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAganhsaXN0ID0gJC5yZXF1aXJlKFxcXFxcXFwiY29uZmlncz9ydWxlPXVja2vkupFcXFxcXFxcIikuZ2V0SnNvbigpO1xcXFxuICAgICAgICAgICAgICAgIHVpZHMgPSBqeGxpc3QubWFwKF9fID0+IG1kNShfXy5ncm91cCArIF9fLnRpdGxlKSk7XFxcXG4gICAgICAgICAgICAgICAgaSA9IHVpZHMuaW5kZXhPZihnZXRNeVZhcigncnVsZV91aWQnLCAnLTEnKSk7XFxcXG4gICAgICAgICAgICAgICAgaWYgKGkgPT0gLTEpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAganhsaXN0LnB1c2goXyk7XFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAganhsaXN0LnNwbGljZShpLCAxLCBfKTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgY2xlYXJNeVZhcigncnVsZV90aWQnKTtcXFxcbiAgICAgICAgICAgICAgICBjbGVhck15VmFyKCdydWxlX3VpZCcpO1xcXFxuICAgICAgICAgICAgICAgIGp4bGlzdCA9IGp4bGlzdC5maWx0ZXIoKG9iaiwgaW5kZXgsIGFycikgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyLmZpbmRJbmRleChvID0+IG1kNShvYmouZ3JvdXAgKyBvYmoudGl0bGUpID09PSBtZDUoby5ncm91cCArIG8udGl0bGUpICYmIChvYmoudGltZSA+IG8udGltZSB8fCBvYmoudGltZSA9PT0gby50aW1lKSkgPT09IGluZGV4O1xcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICQucmVxdWlyZShcXFxcXFxcImNvbmZpZ3M/cnVsZT11Y2tr5LqRXFxcXFxcXCIpLnNhdmVKc29uKGp4bGlzdCk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGJhY2sodHJ1ZSksICd0b2FzdDovL+S/neWtmOaIkOWKnyc7XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mkJzntKLop4TliJkv5Y+R546w6KeE5YiZ5oC75b6X5YaZ5LiA5Liq5ZCnJztcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSBlbHNlIGlmIChfLnRpdGxlID09IFxcXFxcXFwiXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/or7floavlhpnmupDlkI3np7AnO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+inhOWImeWQjeS4jeiDveaYrycgKyBfLnRpdGxlO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSxcXFxcblxcXFxuXFxcXG5cXFxcbiAgICBnZXRWYXJpYWJsZXMoKSB7XFxcXG4gICAgICAgIHJldHVybiBbXFxcXFxcXCJncm91cFxcXFxcXFwiLCBcXFxcXFxcInNlYXJjaF9lbmFibGVkXFxcXFxcXCIsIFxcXFxcXFwiZXhwbG9yZV9lbmFibGVkXFxcXFxcXCIsIFxcXFxcXFwidGl0bGVcXFxcXFxcIiwgXFxcXFxcXCJhdXRob3JcXFxcXFxcIiwgXFxcXFxcXCJpY29uXFxcXFxcXCIsIFxcXFxcXFwicHJlUnVsZVxcXFxcXFwiLCBcXFxcXFxcInNlYXJjaF91cmxcXFxcXFxcIiwgXFxcXFxcXCJzZWFyY2hfZ3JvdXBcXFxcXFxcIiwgXFxcXFxcXCJzZWFyY2hGaW5kXFxcXFxcXCIsIFxcXFxcXFwiZXhwbG9yZV9YNVxcXFxcXFwiLCBcXFxcXFxcInVybFxcXFxcXFwiLCBcXFxcXFxcImZpbmRfcnVsZVxcXFxcXFwiLCBcXFxcXFxcImNsYXNzX25hbWVcXFxcXFxcIiwgXFxcXFxcXCJjbGFzc191cmxcXFxcXFxcIiwgXFxcXFxcXCJhcmVhX25hbWVcXFxcXFxcIiwgXFxcXFxcXCJhcmVhX3VybFxcXFxcXFwiLCBcXFxcXFxcInllYXJfbmFtZVxcXFxcXFwiLCBcXFxcXFxcInllYXJfdXJsXFxcXFxcXCIsIFxcXFxcXFwic29ydF9uYW1lXFxcXFxcXCIsIFxcXFxcXFwic29ydF91cmxcXFxcXFxcIiwgXFxcXFxcXCJ4NV9qc0xvYWRpbmdJbmplY3RcXFxcXFxcIiwgXFxcXFxcXCJ4NV9qc1xcXFxcXFwiLCBcXFxcXFxcIng1X2Jsb2NrUnVsZXNcXFxcXFxcIiwgXFxcXFxcXCJ4NV91cmxJbnRlcmNlcHRvclxcXFxcXFwiLCBcXFxcXFxcIng1X3BhZ2VIb21lXFxcXFxcXCIsIFxcXFxcXFwieDVfcmVmZXJlclxcXFxcXFwiLCBcXFxcXFxcIng1X2ltZ0xvbmdDbGlja1xcXFxcXFwiLCBcXFxcXFxcIng1X3Nob3dQcm9ncmVzc1xcXFxcXFwiLCBcXFxcXFxcIng1X2Zsb2F0VmlkZW9cXFxcXFxcIiwgXFxcXFxcXCJ4NV9hdXRvUGxheVxcXFxcXFwiLCBcXFxcXFxcIng1X3VhXFxcXFxcXCIsIFxcXFxcXFwieDVfdXJsXFxcXFxcXCIsIFxcXFxcXFwieDVfZGVzY1xcXFxcXFwiLCBcXFxcXFxcIng1X2hvbWVcXFxcXFxcIiwgXFxcXFxcXCJ0aW1lXFxcXFxcXCIsIFxcXFxcXFwicnVsZV90aWRcXFxcXFxcIiwgXFxcXFxcXCJydWxlX3VpZFxcXFxcXFwiXTtcXFxcbiAgICB9LFxcXFxuXFxcXG5cXFxcblxcXFxuICAgIGdldFJ1bGVQYXN0ZShydWxlcywgaXNKeCkge1xcXFxuICAgICAgICBpZiAocnVsZXMubGVuZ3RoID09IDApIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5rKh5pyJ6KeE5YiZXFxcXFxcXCI7XFxcXG4gICAgICAgIHRleHQgPSBiYXNlNjRFbmNvZGUoSlNPTi5zdHJpbmdpZnkocnVsZXMpKTtcXFxcbiAgICAgICAgcmV0dXJuICQoZ2V0UGFzdGVzKCkuY29uY2F0KFxcXFxcXFwi57qv5paH5pysXFxcXFxcXCIpLCAyLCAn6YCJ5oup5YiG5Lqr5qC85byPJykuc2VsZWN0KCh0eHQsIGxlbiwgXywgaXNKeCkgPT4ge1xcXFxuICAgICAgICAgICAgaWYgKGlucHV0ID09IFxcXFxcXFwi57qv5paH5pysXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgICAgICB1ID0gdHh0O1xcXFxuICAgICAgICAgICAgICAgIGcgPSBcXFxcXFxcIlRleHRcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgdSA9IHNoYXJlUGFzdGUodHh0LCBpbnB1dCk7XFxcXG4gICAgICAgICAgICAgICAgZyA9IFxcXFxcXFwiUGFzdGVcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGlmIChsZW4gPT09IDEpIHtcXFxcbiAgICAgICAgICAgICAgICB0ID0gXy5ncm91cCArIFxcXFxcXFwi6KeE5YiZ44CMXFxcXFxcXCIgKyBfLnRpdGxlICsgXFxcXFxcXCLjgI1cXFxcXFxcIjtcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgdCA9IFxcXFxcXFwi5YWx44CMXFxcXFxcXCIgKyBsZW4gKyBcXFxcXFxcIuOAjeadoeinhOWImVxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgaWYgKGlzSngpIGNsZWFyTXlWYXIoJ2p4bGlzdDInKTtcXFxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImNvcHk6Ly91Y2tr6KeE5YiZ5Y+j5Luk77yM5omT5byA5rW36ZiU5Y2z5Y+v5a+85YWlXFxcXFxcXFxuXFxcXFxcXCIgKyB0ICsgXFxcXFxcXCLvv6VcXFxcXFxcIiArIGcgKyBcXFxcXFxcIu+/pVxcXFxcXFwiICsgdSArICdAaW1wb3J0PWpzOiQucmVxdWlyZShcXFxcXFxcInRvb2w/cnVsZT11Y2tr5LqRXFxcXFxcXCIpLnNldFJ1bGUoaW5wdXQpOyc7XFxcXG4gICAgICAgIH0sIHRleHQsIHJ1bGVzLmxlbmd0aCwgcnVsZXNbMF0sIGlzSngpO1xcXFxuICAgIH0sXFxcXG59O1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuKdtumAmueUqOWHveaVsFxcXCIsXFxcInBhdGhcXFwiOlxcXCJsaWJcXFwiLFxcXCJydWxlXFxcIjpcXFwiY29uc3QgQ29sb3IgPSAodGVzdCwgY29sb3IpID0+IHtcXFxcbiAgICByZXR1cm4gJzxmb250IGNvbG9yPVxcXFxcXFwiJyArIChjb2xvciB8fCAnI0ZBNzI5OCcpICsgJ1xcXFxcXFwiPicgKyB0ZXN0ICsgJzwvZnJvbnQ+JztcXFxcbn1cXFxcbmNvbnN0IFN0cm9uZyA9ICh0ZXN0KSA9PiB7XFxcXG4gICAgcmV0dXJuICc8c3Ryb25nPicgKyB0ZXN0ICsgJzwvc3Ryb25nPic7XFxcXG59XFxcXG5jb25zdCBSaWNoID0gKHRlc3QpID0+IHtcXFxcbiAgICByZXR1cm4gXFxcXFxcXCLigJjigJjigJnigJlcXFxcXFxcIiArIFN0cmluZyh0ZXN0KVxcXFxuICAgICAgICAucmVwbGFjZSgvXFxcXFxcXFxcXFxcXFxcXG58KDx8XFxcXFxcXFxzKyliclxcXFxcXFxccypcXFxcXFxcXC8/XFxcXFxcXFxzKj4vZ2ksICdcXFxcXFxcXG4nKVxcXFxuICAgICAgICAucmVwbGFjZSgvXFxcXFxcXFxcXFxcXFxcXHIvZywgJ1xcXFxcXFxccicpXFxcXG4gICAgICAgIC5yZXBsYWNlKC9cXFxcXFxcXFxcXFxcXFxcZi9nLCAnXFxcXFxcXFxmJylcXFxcbiAgICAgICAgLnJlcGxhY2UoL1xcXFxcXFxcXFxcXFxcXFx0L2csICdcXFxcXFxcXHQnKVxcXFxuICAgICAgICAucmVwbGFjZSgvJihsdHxndHxuYnNwfGFtcHxxdW90KTsvZ2ksICgkMCwgJDEpID0+ICh7XFxcXG4gICAgICAgICAgICAnbHQnOiAnPCcsXFxcXG4gICAgICAgICAgICAnZ3QnOiAnPicsXFxcXG4gICAgICAgICAgICAnbmJzcCc6ICcgJyxcXFxcbiAgICAgICAgICAgICdhbXAnOiAnJicsXFxcXG4gICAgICAgICAgICAncXVvdCc6ICdcXFxcXFxcIidcXFxcbiAgICAgICAgfVskMS50b0xvd2VyQ2FzZSgpXSkpXFxcXG4gICAgICAgIC5yZXBsYWNlKC88XFxcXFxcXFwvPyhlbXxzcGFuKVtePl0qPi9naSwgJycpO1xcXFxufVxcXFxuY29uc3QgU2l6ZSA9IHNpemUgPT4ge1xcXFxuICAgIGlmICghc2l6ZSkgcmV0dXJuICfml6Dms5XorqHnrpcnO1xcXFxuICAgIHVuaXRzID0gWydCJywgJ0tCJywgJ01CJywgJ0dCJ107XFxcXG4gICAgaSA9IDA7XFxcXG4gICAgd2hpbGUgKHNpemUgPiAxMDIzKSB7XFxcXG4gICAgICAgIHNpemUgLz0gMTAyNDtcXFxcbiAgICAgICAgaSsrO1xcXFxuICAgIH1cXFxcbiAgICBzaXplID0gaSA/IHNpemUudG9GaXhlZCgyKSA6IHNpemU7XFxcXG4gICAgcmV0dXJuIGAke3NpemV9ICR7dW5pdHNbaV19YDtcXFxcbn1cXFxcbnRyeSB7XFxcXG4gICAgTVlfUEFHRTtcXFxcbn0gY2F0Y2ggKGVycikge1xcXFxuICAgIE1ZX1BBR0UgPSAxO1xcXFxufVxcXFxubGV0IGlkID0gXFxcXFxcXCJ1Y2tr5LqRXFxcXFxcXCI7XFxcXG5sZXQgcGFnZSA9IE1ZX1BBR0U7XFxcXG5sZXQgX1BBR0UgPSBwYWdlID09IDE7XFxcXG5sZXQgaWNvbnMgPSB7XFxcXG4gICAg6Zi/6YeMOiBcXFxcXFxcImh0dHBzOi8vZ3cuYWxpY2RuLmNvbS9pbWdleHRyYS9pMS9PMUNOMDFyQXIzNFYyOG9SMHJ1cGtBaV8hITYwMDAwMDAwMDc5NzktMi10cHMtMjQwLTI0MC5wbmdcXFxcXFxcIixcXFxcbiAgICDlpLjlhYs6IFxcXFxcXFwiaGlrZXI6Ly9pbWFnZXMvaWNvbl9rdWFrZVxcXFxcXFwiLFxcXFxuICAgIOmfs+mikTogXFxcXFxcXCJoaWtlcjovL2ltYWdlcy9pY29uX211c2ljM1xcXFxcXFwiLFxcXFxuICAgIOejgeWKmzogXFxcXFxcXCJodHRwczovL2FuZHJvaWQtYXJ0d29ya3MuMjVwcC5jb20vZnMwOC8yMDIzLzA4LzIzLzEwLzExMF9lMTUzM2EwMjRjN2VmZWMxNzViYzUxMTBlOTY3MzZhY19jb25fMTMweDEzMC5wbmdcXFxcXFxcIixcXFxcbiAgICDlvbHop4Y6IFxcXFxcXFwiaGlrZXI6Ly9pbWFnZXMvaWNvbl92aWRlbzJcXFxcXFxcIixcXFxcbiAgICDliqjmvKs6IFxcXFxcXFwiaGlrZXI6Ly9pbWFnZXMvaWNvbl9waWMzXFxcXFxcXCIsXFxcXG4gICAg5Zu+5paHOiBcXFxcXFxcImhpa2VyOi8vaW1hZ2VzL2ljb25fdHh0MlxcXFxcXFwiLFxcXFxuICAgIOWFtuS7ljogXFxcXFxcXCJoaWtlcjovL2ltYWdlcy9pY29uX3Vua25vd25cXFxcXFxcIlxcXFxufVxcXFxubGV0IGdyb3VwcyA9IE9iamVjdC5rZXlzKGljb25zKTtcXFxcbmxldCBwYWdlaWQgPSBpZCArIFxcXFxcXFwieXBqLXBhZ2VcXFxcXFxcIiArIHBhZ2U7XFxcXG5sZXQga2V5d29yZCA9IFN0cmluZyhnZXRNeVZhcihcXFxcXFxcImtleXdvcmRcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIikpLnRyaW0oKTtcXFxcbmxldCBfU09VID0ga2V5d29yZCAhPSBcXFxcXFxcIlxcXFxcXFwiICYmICFrZXl3b3JkLm1hdGNoKC9xdWFyay4qXFxcXFxcXFwvc1xcXFxcXFxcLy4rLykgJiYga2V5d29yZCA9PSBTdHJpbmcoZ2V0TXlWYXIoXFxcXFxcXCJrZXl3b3JkMlxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKSkudHJpbSgpO1xcXFxubGV0IGhpc3RvcnkgPSBzdG9yYWdlMC5nZXRJdGVtKFxcXFxcXFwic2VhcmNoSGlzdG9yeVxcXFxcXFwiLCBbXSk7XFxcXG5cXFxcblxcXFxuXFxcXG5cXFxcblxcXFxuY29uc3Qgc2V0SGlzdG9yeUtleXdvcmQgPSAoKSA9PiB7XFxcXG4gICAgaWkgPSBoaXN0b3J5LmluZGV4T2Yoa2V5d29yZCk7XFxcXG4gICAgaWYgKGlpID4gLTEpIHtcXFxcbiAgICAgICAgaGlzdG9yeS5zcGxpY2UoaWksIDEpO1xcXFxuICAgIH1cXFxcbiAgICBpZiAoaGlzdG9yeS5sZW5ndGggPiAyMCkge1xcXFxuICAgICAgICBoaXN0b3J5LnNwbGljZShoaXN0b3J5Lmxlbmd0aCAtIDEsIDEpO1xcXFxuICAgIH1cXFxcbiAgICBoaXN0b3J5LnVuc2hpZnQoa2V5d29yZCk7XFxcXG4gICAgc3RvcmFnZTAuc2V0SXRlbShcXFxcXFxcInNlYXJjaEhpc3RvcnlcXFxcXFxcIiwgaGlzdG9yeSk7XFxcXG59XFxcXG5jb25zdCBnZXRSdWxlQmFzZVVybCA9IChiYXNlVSwgS2V5d29yZCkgPT4ge1xcXFxuICAgIGlmICghS2V5d29yZCkge1xcXFxuICAgICAgICBpc0Z5QWxsID0gU3RyaW5nKGJhc2VVKS5pbmNsdWRlcyhcXFxcXFxcImZ5QWxsXFxcXFxcXCIpO1xcXFxuICAgICAgICBGeUFsbF9pID0gTnVtYmVyKGdldE15VmFyKFxcXFxcXFwiRnlBbGxfaVxcXFxcXFwiKSkgfHwgMDtcXFxcbiAgICAgICAgZm9yICh0IG9mIFsnY2xhc3MnLCAnYXJlYScsICd5ZWFyJywgJ3NvcnQnXSkge1xcXFxuICAgICAgICAgICAgZXZhbChgJHt0fV9pID0gTnVtYmVyKGdldE15VmFyKFxcXFxcXFwiJHt0fV9pXFxcXFxcXCIpKSB8fCAwO1xcXFxucnVsZS4ke3R9X3VybCA9IFN0cmluZyhydWxlLiR7dH1fdXJsIHx8IFxcXFxcXFwiXFxcXFxcXCIpLnRyaW0oKS5zcGxpdChcXFxcXFxcIiZcXFxcXFxcIik7XFxcXG5ydWxlLiR7dH1fbmFtZSA9IFN0cmluZyhydWxlLiR7dH1fbmFtZSB8fCBcXFxcXFxcIlxcXFxcXFwiKS50cmltKCkuc3BsaXQoXFxcXFxcXCImXFxcXFxcXCIpO1xcXFxucnVsZS4ke3R9X3VybCA9IHJ1bGUuJHt0fV91cmwuZmlsdGVyKCh1LCBpKSA9PiBydWxlLiR7dH1fbmFtZVtpXSAhPSBcXFxcXFxcIlxcXFxcXFwiKTtcXFxcbnJ1bGUuJHt0fV9uYW1lID0gcnVsZS4ke3R9X25hbWUuZmlsdGVyKChOYW1lKSA9PiBOYW1lICE9IFxcXFxcXFwiXFxcXFxcXCIpO1xcXFxucnVsZS4ke3R9X2kgPSBydWxlLiR7dH1fbmFtZS5sZW5ndGg7YCk7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG4gICAgYmFzZVUgPSBTdHJpbmcoYmFzZVUpXFxcXG4gICAgICAgIC5yZXBsYWNlKFxcXFxuICAgICAgICAgICAgL2Z5cGFnZUAoW15cXFxcXFxcXD9cXFxcXFxcXCZcXFxcXFxcXDtcXFxcXFxcXCNcXFxcXFxcXFxcXFxcXFwiXFxcXFxcXFwnXFxcXFxcXFx7XSspQD8vZyxcXFxcbiAgICAgICAgICAgICgkMCwgJDEpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBwYWdlMiA9IHBhZ2U7XFxcXG4gICAgICAgICAgICAgICAgJDEuc3BsaXQoXFxcXFxcXCJAXFxcXFxcXCIpLm1hcChfID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgZXZhbChTdHJpbmcoJ3BhZ2UyPXBhZ2UyJyArIF8pKTtcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFnZTI7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIClcXFxcbiAgICAgICAgLnJlcGxhY2UoL2Z5cGFnZS9nLCBwYWdlKVxcXFxuICAgICAgICAucmVwbGFjZSgvXFxcXFxcXFwqXFxcXFxcXFwqL2csIEtleXdvcmQgfHwgXFxcXFxcXCJcXFxcXFxcIik7XFxcXG4gICAgaWYgKCFrZXl3b3JkKSBiYXNlVSA9IFN0cmluZyhiYXNlVSlcXFxcbiAgICAgICAgLnJlcGxhY2UoXFxcXG4gICAgICAgICAgICAvZnkoY2xhc3N8YXJlYXx5ZWFyfHNvcnQpL2csXFxcXG4gICAgICAgICAgICAoJDAsICQxKSA9PiBydWxlWyQxICsgJ191cmwnXVtldmFsKCQxICsgJ19pJyldIHx8IFxcXFxcXFwiXFxcXFxcXCJcXFxcbiAgICAgICAgKVxcXFxuICAgICAgICAucmVwbGFjZShcXFxcbiAgICAgICAgICAgIC9meUFsbC9nLFxcXFxuICAgICAgICAgICAgKCQwLCAkMSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIEZ5QWxsX2lpID0gRnlBbGxfaTtcXFxcbiAgICAgICAgICAgICAgICBpZiAoRnlBbGxfaWkgPiAocnVsZS5jbGFzc19pIC0gMSkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgRnlBbGxfaWkgLT0gcnVsZS5jbGFzc19pO1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoRnlBbGxfaWkgPiAocnVsZS5hcmVhX2kgLSAxKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgRnlBbGxfaWkgLT0gcnVsZS5hcmVhX2k7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoRnlBbGxfaWkgPiAocnVsZS55ZWFyX2kgLSAxKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBydWxlLnNvcnRfdXJsW0Z5QWxsX2lpIC0gcnVsZS55ZWFyX2ldO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnVsZS55ZWFyX3VybFtGeUFsbF9paV07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnVsZS5hcmVhX3VybFtGeUFsbF9paV07XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnVsZS5jbGFzc191cmxbRnlBbGxfaWldO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgKTtcXFxcbiAgICByZXR1cm4gYmFzZVU7XFxcXG59XFxcXG5jb25zdCBnZXRSdWxlR3JvdXAgPSAoY29sX3R5cGUsIFNvdSkgPT4ge1xcXFxuICAgIGZvciAoaXQgb2YgWydjbGFzcycsICdhcmVhJywgJ3llYXInLCAnc29ydCddKSB7XFxcXG4gICAgICAgIGV2YWwoYGluZGV4ID0ge1xcXFxuICAgIGNsYXNzOiAwLFxcXFxuICAgIGFyZWE6IHJ1bGUuY2xhc3NfaSxcXFxcbiAgICB5ZWFyOiBydWxlLmNsYXNzX2kgKyBydWxlLmFyZWFfaSxcXFxcbiAgICBzb3J0OiBydWxlLmNsYXNzX2kgKyBydWxlLmFyZWFfaSArIHJ1bGUueWVhcl9pLFxcXFxufVtpdF1cXFxcbnJ1bGUuJHtpdH1fbmFtZS5tYXAoKG5hbWUsIGkpID0+IHtcXFxcbiAgICBpZiAoaXNGeUFsbCkge1xcXFxuICAgICAgICBpID0gaW5kZXggKyBpO1xcXFxuICAgICAgICB0ID0gRnlBbGxfaSA9PSBpO1xcXFxuICAgICAgICBrID0gJ0Z5QWxsX2knO1xcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIHQgPSAke2l0fV9pID09IGk7XFxcXG4gICAgICAgIGsgPSAnJHtpdH1faSdcXFxcbiAgICB9XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IHQgPyBSaWNoKFN0cm9uZyhDb2xvcihuYW1lKSkpIDogbmFtZSxcXFxcbiAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChrLCBpKSA9PiB7XFxcXG4gICAgICAgICAgICBwdXRNeVZhcihrLCBpKTtcXFxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxcXG4gICAgICAgIH0sIGssIGkpLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCIke2NvbF90eXBlfHxcXFxcXFxcIlxcXFxcXFwifVxcXFxcXFwiIHx8ICdzY3JvbGxfYnV0dG9uJ1xcXFxuICAgIH0pO1xcXFxufSk7XFxcXG5kLnB1c2goe1xcXFxuICAgIGNvbF90eXBlOiAnYmxhbmtfYmxvY2snXFxcXG59KTtgKTtcXFxcbiAgICB9XFxcXG4gICAgaWYgKFNvdSkge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6ICfmkJzntKInLFxcXFxuICAgICAgICAgICAgZGVzYzogJ+aQnOe0ouWFs+mUruivjSAvIOWkuOWFi+mTvuaOpScsXFxcXG4gICAgICAgICAgICB1cmw6ICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIGlucHV0ID0gaW5wdXQudHJpbSgpO1xcXFxuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5tYXRjaCgvcXVhcmsuY24uKlxcXFxcXFxcL3NcXFxcXFxcXC8uKy8pKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vcGFnZS9xdWFya0xpc3Qjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjP3JlYWx1cmw9XFxcXFxcXCIgKyBlbmNvZGVVUklDb21wb25lbnQoaW5wdXQpICsgXFxcXFxcXCImcnVsZT11Y2tr5LqRJnNoYXJlUHdkPVxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgIT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcigna2V5d29yZDInLCBpbnB1dCk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXFxcbiAgICAgICAgICAgIH0pLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiaW5wdXRcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgaWQ6IGlkICsgXFxcXFxcXCI6c2VhcmNoXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBrZXl3b3JkLFxcXFxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBcXFxcXFxcInB1dE15VmFyKCdrZXl3b3JkJyxpbnB1dClcXFxcXFxcIlxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KTtcXFxcbiAgICB9XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdXJsOiBcXFxcXFxcInRvYXN0Oi8v5Yqg6L295LitLi4uXFxcXFxcXCIsXFxcXG4gICAgICAgIGltZzogXFxcXFxcXCJodHRwczovL2hpa2VyZmFucy5jb20vd2Vpc3lyL2ltZy9Mb2FkaW5nMS5naWZcXFxcXFxcIixcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwicGljXzFfY2VudGVyXFxcXFxcXCIsXFxcXG4gICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICBjbHM6IFxcXFxcXFwibG9hZGluZ19naWZcXFxcXFxcIlxcXFxuICAgICAgICB9XFxcXG4gICAgfSk7XFxcXG4gICAgc2V0UHJlUmVzdWx0KGQpO1xcXFxufVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuKduua4qemmqOaPkOekulxcXCIsXFxcInBhdGhcXFwiOlxcXCJub3RpY2VcXFwiLFxcXCJydWxlXFxcIjpcXFwiJC5leHBvcnRzID0gZnVuY3Rpb24oKSB7XFxcXG4gICAgZiA9IFxcXFxcXFwiR3JheVxcXFxcXFwiO1xcXFxuICAgIHQgPSBmYWxzZTtcXFxcbiAgICB1cCA9IGdldE15VmFyKCdSdWxlX25vdXBkYXRlJywgJycpO1xcXFxuICAgIGlmICh1cCAhPSAnMScpIHtcXFxcbiAgICAgICAgdmVyc2lvbiA9IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vaG9tZUB1Y2tr5LqRXFxcXFxcXCIpKS52ZXJzaW9uO1xcXFxuICAgICAgICBpZiAodXAgPT0gJycpIHtcXFxcbiAgICAgICAgICAgIFt1cmwsIHYsIHJ1bl0gPSAkLnJlcXVpcmUoXFxcXFxcXCJsYW56b3U/cnVsZT11Y2tr5LqRXFxcXFxcXCIpLmxpc3Rfb25lKFxcXFxcXFwiaHR0cHM6Ly93d3IubGFuem91aS5jb20vYjAzcWYyOHFiXFxcXFxcXCIsIFxcXFxcXFwicmVhZFxcXFxcXFwiKTtcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIHVybCA9IGZhbHNlO1xcXFxuICAgICAgICAgICAgdiA9IHZlcnNpb24gKyAxO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGlmICh2ZXJzaW9uIDwgdikge1xcXFxuICAgICAgICAgICAgZiA9IFxcXFxcXFwicmVkXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICB0ID0gXFxcXFxcXCLmo4DmtYvliLDmlrDniYjmm7TmlrDvvIzngrnlh7vkuobop6Por6bmg4XjgIJcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgIFQgPSBcXFxcXFxcIuabtOaWsOWGheWuuVxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgaWYgKHVwID09ICcnKSB7XFxcXG4gICAgICAgICAgICAgICAgY29uZmlybSh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5pu05paw5o+Q56S6JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ+ajgOa1i+WIsOS9oOeahOinhOWImeeJiOacrOWwj+S6juacjeWKoeWZqOeJiOacrO+8jOaYr+WQpueri+WNs+abtOaWsO+8nycsXFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpcm06ICQudG9TdHJpbmcoKGRhKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBmID0gJC5yZXF1aXJlKFxcXFxcXFwibGFuem91P3J1bGU9dWNra+S6kVxcXFxcXFwiKS5vbmVfdXJsKGRhKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdSdWxlX25vdXBkYXRlJywgJzEnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcIlxcXFxcXFxcdTZkNzdcXFxcXFxcXHU5NjE0XFxcXFxcXFx1ODljNlxcXFxcXFxcdTc1NGNcXFxcXFxcXHVmZmU1aG9tZV9ydWxlX3VybFxcXFxcXFxcdWZmZTVcXFxcXFxcIiArIGdldFBhdGgoZik7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0sIHVybClcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICBwdXRNeVZhcignUnVsZV9ub3VwZGF0ZScsIHVybCk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB1cmwgPSAkKFxcXFxcXFwiaGlrZXI6Ly9lbXB0eSNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNcXFxcXFxcIikucnVsZSgodXAsIHZlcnNpb24pID0+IHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXFxcXFwibGFuem91P3J1bGU9dWNra+S6kVxcXFxcXFwiKS5vbmVfaW5mbyh1cCwgXFxcXFxcXCJ1Y2trXFxcXFxcXCIsIHZlcnNpb24pO1xcXFxuICAgICAgICAgICAgfSwgdXJsIHx8IHVwLCB2ZXJzaW9uKTtcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIHB1dE15VmFyKCdSdWxlX25vdXBkYXRlJywgJzEnKTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcblxcXFxuXFxcXG4gICAgaWYgKCEkLnJlcXVpcmUoXFxcXFxcXCJ0b29sXFxcXFxcXCIpLmlzTG9naW5Db29raWUoZ2V0SXRlbShcXFxcXFxcInF1YXJrQ29va2llXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpKSkge1xcXFxuICAgICAgICBjbGVhckl0ZW0oXFxcXFxcXCJxdWFya0Nvb2tpZVxcXFxcXFwiKTtcXFxcbiAgICAgICAgZiA9IFxcXFxcXFwicmVkXFxcXFxcXCI7XFxcXG4gICAgICAgIFQgPSBcXFxcXFxcIueZu+W9lei0puWPt1xcXFxcXFwiO1xcXFxuICAgICAgICB0ID0gXFxcXFxcXCLmnKrmo4DmtYvliLDnmbvlvZXkv6Hmga9cXFxcXFxcIjtcXFxcbiAgICAgICAgdXJsID0gJChbXFxcXFxcXCLovpPlhaVDb29raWVcXFxcXFxcIiwgXFxcXFxcXCLnvZHpobXnmbvlvZVcXFxcXFxcIl0pLnNlbGVjdCgoKSA9PiB7XFxcXG4gICAgICAgICAgICBpZiAoaW5wdXQgPT09IFxcXFxcXFwi572R6aG155m75b2VXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL3BhZ2UvbG9naW5cXFxcXFxcIjtcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcXFxcXCJcXFxcXFxcIiwgXFxcXFxcXCLor7fovpPlhaVDb29raWVcXFxcXFxcIikuaW5wdXQoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoJC5yZXF1aXJlKFxcXFxcXFwidG9vbFxcXFxcXFwiKS5pc0xvZ2luQ29va2llKGlucHV0KSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbShcXFxcXFxcInF1YXJrQ29va2llXFxcXFxcXCIsIGlucHV0LnJlcGxhY2UoL1xcXFxcXFxccy9nLCBcXFxcXFxcIlxcXFxcXFwiKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/orr7nva7miJDlip9cXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8vQ29va2ll5qC85byP6ZSZ6K+vXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSlcXFxcbiAgICB9IGVsc2UgaWYgKCF0KSB7XFxcXG4gICAgICAgIFQgPSBcXFxcXFxcIueoi+W6j+iuvue9rlxcXFxcXFwiO1xcXFxuICAgICAgICB1cmwgPSBcXFxcXFxcImhpa2VyOi8vcGFnZS9pbnN0YWxsI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1xcXFxcXFwiO1xcXFxuICAgICAgICBUID0gXFxcXFxcXCLmjZDotaAv5pSv5oyBXFxcXFxcXCI7XFxcXG4gICAgICAgIHVybCA9IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2RvbmF0ZSNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNcXFxcXFxcIjtcXFxcbiAgICAgICAgaG91ciA9IG5ldyBEYXRlKCkuZ2V0SG91cnMoKTtcXFxcbiAgICAgICAgaWYgKGhvdXIgPCA1KSB7XFxcXG4gICAgICAgICAgICB0ID0gXFxcXFxcXCLmt7HlpJzvvIznjrDlnKjnmoTlpJzvvIznhqzlvpflj6rmmK/ov5jmnKrmlLnlj5jnmoTkuaDmg69cXFxcXFxcIjtcXFxcbiAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTEpIHtcXFxcbiAgICAgICAgICAgIHQgPSBcXFxcXFxcIuaXqeWuie+8jOa4heaZqOeGueW+rueahOmYs+WFie+8jCDmmK/kvaDlnKjlvq7nrJHlkJdcXFxcXFxcIjtcXFxcbiAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTQpIHtcXFxcbiAgICAgICAgICAgIHQgPSBcXFxcXFxcIuWNiOWlve+8jOS8tOmaj+edgOeGn+aCieeahOS5kOabsu+8jOiBhuWQrOedgOWKqOS6uueahOaXi+W+i1xcXFxcXFwiO1xcXFxuICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxOSkge1xcXFxuICAgICAgICAgICAgdCA9IFxcXFxcXFwi5aSV5pqu77yM5Ly85riF6aOO6YaJ5pma6Zye77yM5LiN57uP5oSP6Ze055uI56yR5Zue55y4XFxcXFxcXCI7XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICB0ID0gXFxcXFxcXCLlpJzmmZrvvIzkuIDkuKrlronpnZnnmoTop5LokL3vvIzpnZnpnZnlnLDogYblkKzlpJzmm7JcXFxcXFxcIjtcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogXFxcXFxcXCLigJzigJzigJ3igJ1cXFxcXFxcIiArIHQuZm9udGNvbG9yKGYpLnNtYWxsKCksXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfY2VudGVyXzFcXFxcXFxcIixcXFxcbiAgICAgICAgdXJsOiB1cmwsXFxcXG4gICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICBwYWdlVGl0bGU6IFQsXFxcXG4gICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pO1xcXFxufVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuKdveiTneWlj+abtOaWsFxcXCIsXFxcInBhdGhcXFwiOlxcXCJsYW56b3VcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG5oZWFkID0ge1xcXFxuICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgXFxcXFxcXCJ1cGdyYWRlLWluc2VjdXJlLXJlcXVlc3RzXFxcXFxcXCI6IFxcXFxcXFwiMVxcXFxcXFwiLFxcXFxuICAgICAgICBcXFxcXFxcIlVzZXItQWdlbnRcXFxcXFxcIjogXFxcXFxcXCJNb3ppbGxhLzUuMCAoTGludXg7IEFuZHJvaWQgOC4wLjA7IE1JIDVzIFBsdXMgQnVpbGQvT1BSMS4xNzA2MjMuMDMyOyB3dikgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgQ2hyb21lLzcxLjAuMzU3OC45OSBNb2JpbGUgU2FmYXJpLzUzNy4zNlxcXFxcXFwiLFxcXFxuICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBcXFxcXFxcImRvd25faXA9MVxcXFxcXFwiLFxcXFxuICAgICAgICBcXFxcXFxcImFjY2VwdFxcXFxcXFwiOiBcXFxcXFxcInRleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LGltYWdlL3dlYnAsaW1hZ2UvYXBuZywqLyo7cT0wLjhcXFxcXFxcIixcXFxcbiAgICB9LFxcXFxuICAgIG1ldGhvZDogJ0dFVCdcXFxcbn07XFxcXG5vbmVfdXJsID0gZnVuY3Rpb24odXJsLCBwd2QsIHJ1biwgbm9UcCwgSHRtbCkge1xcXFxuICAgIHRyeSB7XFxcXG4gICAgICAgIGhlYWQuaGVhZGVycy5yZWZlcmVyID0gdXJsLnNwbGl0KFxcXFxcXFwiP1xcXFxcXFwiKVswXTtcXFxcbiAgICAgICAgaXNUcCA9ICF1cmwubWF0Y2goXFxcXFxcXCIvdHAvXFxcXFxcXCIpO1xcXFxuICAgICAgICBpZiAoaXNUcCAmJiAhbm9UcCkge1xcXFxuICAgICAgICAgICAgZGEgPSB1cmwucmVwbGFjZSgvXiguKj9cXFxcXFxcXC5jb20pLywgJyQxL3RwJyk7XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICBkYSA9IHVybDtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBodG1sID0gU3RyaW5nKEh0bWwgfHwgZmV0Y2goZGEsIGhlYWQpKTtcXFxcbiAgICAgICAgaWYgKGh0bWwgPT0gXFxcXFxcXCJcXFxcXFxcIiAmJiBpc1RwICYmICFub1RwKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gb25lX3VybCh1cmwsIHB3ZCwgcnVuLCB0cnVlKTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgcGF0aCA9IGh0bWwubWF0Y2goL2xpbmsgPSBbJ1xcXFxcXFwiXShbXlxcXFxcXFwiJ10rKS9pKVsxXTtcXFxcbiAgICAgICAgICAgIGhvc3QgPSB1cmwubWF0Y2goL14oLio/XFxcXFxcXFwuY29tXFxcXFxcXFwvKS8pWzFdO1xcXFxuICAgICAgICAgICAgcmV0dXJuIG9uZV91cmwoaG9zdCArIHBhdGgsIHB3ZCwgcnVuKTtcXFxcbiAgICAgICAgfSBjYXRjaCAoZXJyMCkge1xcXFxuICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICBwYXRoID0gaHRtbC5tYXRjaCgvJyhcXFxcXFxcXD8uKz8pJy8pWzFdO1xcXFxuICAgICAgICAgICAgICAgIGhvc3QgPSBcXFxcXFxcImh0dHBzOi8vZGV2ZWxvcGVyLmxhbnpvdWcuY29tXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICB9IGNhdGNoIChlcnIxKSB7XFxcXG4gICAgICAgICAgICAgICAgZXZhbChodG1sLm1hdGNoKC92YWx1ZVxcXFxcXFxcOyhbXFxcXFxcXFxzXFxcXFxcXFxTXSs/KVxcXFxcXFxcJFxcXFxcXFxcKC9pKVsxXSk7XFxcXG4gICAgICAgICAgICAgICAgZXZhbCgnYm9keT0nICsgaHRtbC5tYXRjaCgvW1xcXFxcXFxcc1xcXFxcXFxcU10qZGF0YSA6KFtcXFxcXFxcXHNcXFxcXFxcXFNdKj9cXFxcXFxcXH0pLFxcXFxcXFxccysvKVsxXSk7XFxcXG4gICAgICAgICAgICAgICAgdSA9IFN0cmluZyh1cmwpLnJlcGxhY2UoL1xcXFxcXFxcLmNvbS4qLywgXFxcXFxcXCIuY29tL2FqYXhtLnBocFxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICBfID0gSlNPTi5wYXJzZShwb3N0KHUsIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgYm9keTogYm9keSxcXFxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZC5oZWFkZXJzXFxcXG4gICAgICAgICAgICAgICAgfSkpO1xcXFxuICAgICAgICAgICAgICAgIHBhdGggPSBfLnVybDtcXFxcbiAgICAgICAgICAgICAgICBob3N0ID0gXy5kb207XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgdSA9IGhvc3QgKyBcXFxcXFxcIi9maWxlL1xcXFxcXFwiICsgcGF0aDtcXFxcbiAgICAgICAgayA9IEpTT04ucGFyc2UoZmV0Y2godSwge1xcXFxuICAgICAgICAgICAgcmVkaXJlY3Q6IGZhbHNlLFxcXFxuICAgICAgICAgICAgb25seUhlYWRlcnM6IHRydWVcXFxcbiAgICAgICAgfSkpLmhlYWRlcnMubG9jYXRpb247XFxcXG4gICAgICAgIGsgPSBBcnJheS5pc0FycmF5KGspID8ga1swXSA6IGs7XFxcXG4gICAgICAgIGlmIChydW4pIHJldHVybiBrO1xcXFxuICAgICAgICBsZXQgZiA9IFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9fZmlsZVNlbGVjdF9ydWxlLmpzb25cXFxcXFxcIjtcXFxcbiAgICAgICAgZG93bmxvYWRGaWxlKGssIGYpO1xcXFxuICAgICAgICByZXR1cm4gZjtcXFxcbiAgICB9IGNhdGNoIChlcnIyKSB7XFxcXG4gICAgICAgIHJldHVybiBmYWxzZTtcXFxcbiAgICB9XFxcXG59O1xcXFxuJC5leHBvcnRzID0ge1xcXFxuICAgIGxpc3Rfb25lOiBmdW5jdGlvbih1cmwsIHB3ZCwgcnVuKSB7XFxcXG4gICAgICAgIHNyYyA9IGZldGNoKHVybCwgaGVhZCk7XFxcXG4gICAgICAgIGV2YWwoc3JjLm1hdGNoKC92YXIgcGdzOyhbXFxcXFxcXFxzXFxcXFxcXFxTXSo/cGdzLis7KS8pWzFdKTtcXFxcbiAgICAgICAgZXZhbCgnYm9keT0nICsgc3JjLm1hdGNoKC9kYXRhIDooW1xcXFxcXFxcc1xcXFxcXFxcU10qP1xcXFxcXFxcfSkvKVsxXSk7XFxcXG4gICAgICAgIHVybCA9IHVybC5yZXBsYWNlKC9cXFxcXFxcXC5jb20uKi8sIFxcXFxcXFwiLmNvbS9maWxlbW9yZWFqYXgucGhwXFxcXFxcXCIpO1xcXFxuICAgICAgICBsaXN0ID0gSlNPTi5wYXJzZShwb3N0KHVybCwge1xcXFxuICAgICAgICAgICAgYm9keTogYm9keSxcXFxcbiAgICAgICAgICAgIGhlYWRlcnM6IGhlYWQuaGVhZGVyc1xcXFxuICAgICAgICB9KSkudGV4dDtcXFxcbiAgICAgICAgaWYgKHJ1bikgcmV0dXJuIGxpc3Q7XFxcXG4gICAgICAgIF9fID0gbGlzdFswXTtcXFxcbiAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UoL2ZpbGVtby4qLywgJ3RwLycgKyBfXy5pZCk7XFxcXG4gICAgICAgIHYgPSBfXy5uYW1lX2FsbC5tYXRjaCgvXFxcXFxcXFxbKC4rKS8pWzFdO1xcXFxuICAgICAgICBbdiwgcnVuXSA9IHYuc3BsaXQoXFxcXFxcXCJdXFxcXFxcXCIpO1xcXFxuICAgICAgICByZXR1cm4gW3VybCwgdiwgcnVuXTtcXFxcbiAgICB9LFxcXFxuICAgIG9uZV91cmw6IG9uZV91cmwsXFxcXG4gICAgb25lX2luZm86IGZ1bmN0aW9uKHVybCwgcHdkLCB2ZXJzaW9uKSB7XFxcXG4gICAgICAgIHZlcnNpb24gPSB2ZXJzaW9uIHx8IFxcXFxcXFwi5pyq55+l54mI5pysXFxcXFxcXCI7XFxcXG4gICAgICAgIHZlcnNpb24gPSBTdHJpbmcodmVyc2lvbikucmVwbGFjZSgvKFxcXFxcXFxcZFxcXFxcXFxcZCkoXFxcXFxcXFxkXFxcXFxcXFxkKSQvLCBcXFxcXFxcIi0kMS0kMlxcXFxcXFwiKTtcXFxcbiAgICAgICAgaXRlbSA9IGZldGNoKHVybCwgaGVhZCk7XFxcXG4gICAgICAgIHQgPSBwZGZoKGl0ZW0sIFxcXFxcXFwiLm1kJiZUZXh0XFxcXFxcXCIpIHx8IHBkZmgoaXRlbSwgXFxcXFxcXCJ0aXRsZSYmVGV4dFxcXFxcXFwiKTtcXFxcbiAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgIHQgPSBTdHJpbmcodCkuc3BsaXQoXFxcXFxcXCJbXFxcXFxcXCIpWzFdLnNwbGl0KFxcXFxcXFwiXVxcXFxcXFwiKVswXTtcXFxcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7fVxcXFxuICAgICAgICB0ID0gU3RyaW5nKHQpLnJlcGxhY2UoLyhcXFxcXFxcXGRcXFxcXFxcXGQpKFxcXFxcXFxcZFxcXFxcXFxcZCkkLywgXFxcXFxcXCItJDEtJDJcXFxcXFxcIik7XFxcXG4gICAgICAgIGQgPSBbXTtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIGRlc2M6IFxcXFxcXFwiPGI+4oCc4oCcXFxcXFxcXCIgKyB2ZXJzaW9uICsgXFxcXFxcXCIgPT4gXFxcXFxcXCIgKyB0ICsgXFxcXFxcXCLigJ3igJ08L2I+XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJiaWdfYmlnX2JsYW5rX2Jsb2NrXFxcXFxcXCJcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogcGRmaChpdGVtLCBcXFxcXFxcIi5tZG8mJkh0bWxcXFxcXFxcIikucmVwbGFjZSgvKDxcXFxcXFxcXC9zcGFuPik/XFxcXFxcXFxzKjxzcGFuPi9naSwgXFxcXFxcXCI8YnI+XFxcXFxcXCIpLFxcXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCdcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJiaWdfYmxhbmtfYmxvY2tcXFxcXFxcIlxcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIjxiPuKAnOKAnOehruWumuabtOaWsOKAneKAnTwvYj5cXFxcXFxcIi5iaWcoKSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfY2VudGVyXzFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHVybDogJChcXFxcXFxcImhpa2VyOi8vZW1wdHkjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcXFxcXCIpLmxhenlSdWxlKCh1cmwsIHB3ZCwgaXRlbSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIGlmIChnZXRNeVZhcignUnVsZV9ub3VwZGF0ZScpID09ICcxJykge1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFjayh0cnVlKSwgXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCI7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIGxldCB7XFxcXG4gICAgICAgICAgICAgICAgICAgIG9uZV91cmxcXFxcbiAgICAgICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2xhbnpvdT9ydWxlPeatjOivjemAgumFjVxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgSyA9IG9uZV91cmwodXJsLCBwd2QsIDEsIDAsIGl0ZW0pO1xcXFxuICAgICAgICAgICAgICAgIGlmICghSykge1xcXFxuICAgICAgICAgICAgICAgICAgICBLID0gb25lX3VybCh1cmwsIHB3ZCwgMSk7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIGlmICghSykge1xcXFxuICAgICAgICAgICAgICAgICAgICBLID0gb25lX3VybCh1cmwuc3BsaXQoXFxcXFxcXCI/XFxcXFxcXCIpWzBdLCBwd2QsIDEpO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICBpZiAoSykge1xcXFxuICAgICAgICAgICAgICAgICAgICBmID0gXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL19maWxlU2VsZWN0X3J1bGUuanNvblxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgICAgICBkb3dubG9hZEZpbGUoSywgZik7XFxcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdSdWxlX25vdXBkYXRlJywgJzEnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiXFxcXFxcXFx1NmQ3N1xcXFxcXFxcdTk2MTRcXFxcXFxcXHU4OWM2XFxcXFxcXFx1NzU0Y1xcXFxcXFxcdWZmZTVob21lX3J1bGVfdXJsXFxcXFxcXFx1ZmZlNVxcXFxcXFwiICsgZ2V0UGF0aChmKTtcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+iOt+WPluS4i+i9vemTvuaOpeWksei0pVxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0sIHVybCwgcHdkLCBpdGVtKSxcXFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICBzZXRSZXN1bHQoZCk7XFxcXG4gICAgfVxcXFxufVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuKdu+aUr+aMgeS9nOiAhVxcXCIsXFxcInBhdGhcXFwiOlxcXCJkb25hdGVcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG5sZXQgZCA9IFtdO1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogXFxcXFxcXCLmjZDotaAv5pSv5oyBXFxcXFxcXCIsXFxcXG4gICAgZGVzYzogXFxcXFxcXCLov5nkuKrmjZDotaDkuI3og73kuLrkvaDluKbmnaXnibnmnYPvvIzkvYbmgqjnmoTmlK/mjIHmmK/miJHmm7TmlrDliJvkvZznmoTliqjlipvjgIJcXFxcXFxcIixcXFxcbiAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCIsXFxcXG4gICAgdXJsOiBcXFxcXFxcInRvYXN0Oi8v5oSf6LCi5oKo55qE5pSv5oyBXFxcXFxcXCJcXFxcbn0pO1xcXFxuZC5wdXNoKHtcXFxcbiAgICBjb2xfdHlwZTogXFxcXFxcXCJwaWNfMV9mdWxsXFxcXFxcXCIsXFxcXG4gICAgdXJsOiBcXFxcXFxcImh0dHBzOi8vZ2l0ZWUuY29tL1Rob21hc1lvdS9oYWlrdW8vcmF3L21hc3Rlci9JTUdfMjAyNDAxMTJfMDgxMzU1LnBuZ1xcXFxcXFwiLFxcXFxuICAgIHBpY191cmw6IFxcXFxcXFwiaHR0cHM6Ly9naXRlZS5jb20vVGhvbWFzWW91L2hhaWt1by9yYXcvbWFzdGVyL0lNR18yMDI0MDExMl8wODEzNTUucG5nXFxcXFxcXCJcXFxcbn0pO1xcXFxuZC5wdXNoKHtcXFxcbiAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCIsXFxcXG4gICAgdGl0bGU6IFxcXFxcXFwi4oCc4oCc4oCd4oCdXFxcXFxcXCIgKyBcXFxcXFxcIuWbvueJh+WKoOi9vee8k+aFouivt+eojeetiVxcXFxcXFwiLnNtYWxsKCkuZm9udGNvbG9yKFxcXFxcXFwiR3JheVxcXFxcXFwiKSxcXFxcbiAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiLFxcXFxuICAgIGV4dHJhOiB7XFxcXG4gICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcXFxuICAgIH1cXFxcbn0pO1xcXFxuc2V0UmVzdWx0KGQpO1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuKduOinhOWImeWIl+ihqFxcXCIsXFxcInBhdGhcXFwiOlxcXCJydWxlTGlzdFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbmFkZExpc3RlbmVyKCdvbkNsb3NlJywgJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgYXJyID0gJC5yZXF1aXJlKCd0b29sP3J1bGU9dWNra+S6kScpLmdldFZhcmlhYmxlcygpO1xcXFxuICAgIGZvciAodCBvZiBhcnIpIHtcXFxcbiAgICAgICAgY2xlYXJNeVZhcih0KTtcXFxcbiAgICB9XFxcXG59KSk7XFxcXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9saWI/cnVsZT11Y2tr5LqRJywge30pKS5ydWxlKTtcXFxcbmQgPSBbXTtcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6ICfmlrDlop7op4TliJknLFxcXFxuICAgIGNvbF90eXBlOiAndGV4dF8yJyxcXFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICBhcnIgPSAkLnJlcXVpcmUoJ3Rvb2w/cnVsZT11Y2tr5LqRJykuZ2V0VmFyaWFibGVzKCk7XFxcXG4gICAgICAgIGZvciAodCBvZiBhcnIpIHtcXFxcbiAgICAgICAgICAgIGNsZWFyTXlWYXIodCk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgY2xlYXJNeVZhcihcXFxcXFxcInJ1bGVfdWlkXFxcXFxcXCIpO1xcXFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9ydWxlRWRpdCNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSM/cGFnZVRpdGxlPeinhOWImee8lui+kSZydWxlPXVja2vkupEnXFxcXG4gICAgfSlcXFxcbn0pO1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogJ+WIhuS6q+mAieS4rScsXFxcXG4gICAgY29sX3R5cGU6ICd0ZXh0XzInLFxcXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKSA9PiB7XFxcXG4gICAgICAgIHp5ID0gc3RvcmFnZTAuZ2V0TXlWYXIoXFxcXFxcXCJqeGxpc3QyXFxcXFxcXCIsIHt9KTtcXFxcbiAgICAgICAgenUgPSBPYmplY3Qua2V5cyh6eSk7XFxcXG4gICAgICAgIGlmICh6dS5sZW5ndGggPT0gMCkge1xcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/msqHmnInpgInkuK3op4TliJlcXFxcXFxcIjtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBydWxlcyA9IHp1Lmxlbmd0aCA9PSAxID8gW3p5W3p1WzBdXV0gOiB6dS5tYXAoa2V5ID0+IHp5W2tleV0pO1xcXFxuICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXFxcXFwidG9vbD9ydWxlPXVja2vkupFcXFxcXFxcIikuZ2V0UnVsZVBhc3RlKHJ1bGVzLCAxKTtcXFxcbiAgICB9KVxcXFxufSk7XFxcXG5cXFxcblxcXFxuXFxcXG5cXFxcblxcXFxucGxhdGZvcm0gPSBnZXRNeVZhcigncGxhdGZvcm0nLCAn57u85ZCIJyk7XFxcXG5bXFxcXFxcXCLnu7zlkIhcXFxcXFxcIl0uY29uY2F0KGdyb3VwcykubWFwKGdyb3VwID0+IHtcXFxcbiAgICBpZiAoZ3JvdXAgPT0gcGxhdGZvcm0pXFxcXG4gICAgICAgIHBsYXRmb3JtMiA9IFJpY2goU3Ryb25nKENvbG9yKGdyb3VwKSkpO1xcXFxuICAgIGVsc2VcXFxcbiAgICAgICAgcGxhdGZvcm0yID0gZ3JvdXA7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IHBsYXRmb3JtMixcXFxcbiAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChncm91cCkgPT4ge1xcXFxuICAgICAgICAgICAgcHV0TXlWYXIoJ3BsYXRmb3JtJywgZ3JvdXApO1xcXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxcXG4gICAgICAgIH0sIGdyb3VwKSxcXFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXFxcbiAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgIGxvbmdDbGljazogW3tcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfliKDpmaQnICsgZ3JvdXAucmVwbGFjZSgn57u85ZCIJywgJ+WFqOmDqCcpICsgJ+inhOWImScsXFxcXG4gICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChncm91cCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgJCQgPSAkLnJlcXVpcmUoJ2NvbmZpZ3M/cnVsZT11Y2tr5LqRJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdXAgPT0gXFxcXFxcXCLnu7zlkIhcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZUZpbGUoJCQucnVsZVBhdGgpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlcyA9ICQkLmdldEpzb25fMShcXFxcXFxcImdyb3VwXFxcXFxcXCIsIGdyb3VwKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5zYXZlSnNvbihydWxlcyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgICAgICB9LCBncm91cClcXFxcbiAgICAgICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgICAgIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfliIbkuqsnICsgZ3JvdXAucmVwbGFjZSgn57u85ZCIJywgJ+WFqOmDqCcpICsgJ+inhOWImScsXFxcXG4gICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChncm91cCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgJCQgPSAkLnJlcXVpcmUoJ2NvbmZpZ3M/cnVsZT11Y2tr5LqRJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdXAgPT0gXFxcXFxcXCLnu7zlkIhcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGVzID0gJCQuZ2V0SnNvbigpLnNsaWNlKDEpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlcyA9ICQkLmdldEpzb25fMShcXFxcXFxcImdyb3VwXFxcXFxcXCIsIGdyb3VwLCAxKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcXFxcXCJ0b29sP3J1bGU9dWNra+S6kVxcXFxcXFwiKS5nZXRSdWxlUGFzdGUocnVsZXMpO1xcXFxuICAgICAgICAgICAgICAgICAgICB9LCBncm91cClcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBdXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KTtcXFxcbn0pO1xcXFxuZC5wdXNoKHtcXFxcbiAgICBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJ1xcXFxufSk7XFxcXG5ydWxlcyA9ICQucmVxdWlyZSgnY29uZmlncz9ydWxlPXVja2vkupEnKS5nZXRHcm91cEpzb24oZmFsc2UsIFxcXFxcXFwiZ3JvdXBcXFxcXFxcIiwgcGxhdGZvcm0sIFxcXFxcXFwi57u85ZCIXFxcXFxcXCIpO1xcXFxuXFxcXG5cXFxcblxcXFxuXFxcXG5cXFxcbnBpZCA9IE51bWJlcihnZXRNeVZhcigncGlkJykpIHx8IDA7XFxcXG5uYW1lcyA9ICQucmVxdWlyZSgnY29uZmlncz9ydWxlPXVja2vkupEnKS5nZXRHcm91cE5hbWVzKHJ1bGVzLCBcXFxcXFxcInNlYXJjaF9ncm91cFxcXFxcXFwiKTtcXFxcbmlmIChwaWQgPiBuYW1lcy5sZW5ndGggLSAxKSB7XFxcXG4gICAgcGlkID0gMDtcXFxcbn1cXFxcbm5hbWVzLm1hcCgoZ3JvdXAsIGkpID0+IHtcXFxcbiAgICBpZiAoaSA9PSBwaWQpXFxcXG4gICAgICAgIHBsYXRmb3JtMiA9IFJpY2goU3Ryb25nKENvbG9yKGdyb3VwKSkpO1xcXFxuICAgIGVsc2VcXFxcbiAgICAgICAgcGxhdGZvcm0yID0gZ3JvdXA7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IHBsYXRmb3JtMixcXFxcbiAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChpKSA9PiB7XFxcXG4gICAgICAgICAgICBwdXRNeVZhcigncGlkJywgaSk7XFxcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcXFxuICAgICAgICB9LCBpKSxcXFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXFxcbiAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgIGxvbmdDbGljazogW3tcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+WIhuS6qycgKyBncm91cC5yZXBsYWNlKCflhajlhagnLCAn5YWo6YOoJykgKyAn6KeE5YiZJyxcXFxcbiAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygocGxhdGZvcm0sIGdyb3VwKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICQkID0gJC5yZXF1aXJlKCdjb25maWdzP3J1bGU9dWNra+S6kScpO1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAocGxhdGZvcm0gPT0gXFxcXFxcXCLnu7zlkIhcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcnVsZXMgPSAkJC5nZXRKc29uKCkuc2xpY2UoMSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBydWxlcyA9ICQkLmdldEpzb25fMShcXFxcXFxcImdyb3VwXFxcXFxcXCIsIHBsYXRmb3JtLCAxKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdXAgIT0gXFxcXFxcXCLlhajlhahcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcnVsZXMgPSBydWxlcy5maWx0ZXIoZiA9PiBmLnNlYXJjaF9ncm91cCA9PSBncm91cCk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFxcXFxcInRvb2w/cnVsZT11Y2tr5LqRXFxcXFxcXCIpLmdldFJ1bGVQYXN0ZShydWxlcyk7XFxcXG4gICAgICAgICAgICAgICAgfSwgcGxhdGZvcm0sIGdyb3VwKVxcXFxuICAgICAgICAgICAgfV1cXFxcbiAgICAgICAgfVxcXFxuICAgIH0pO1xcXFxufSk7XFxcXG5kLnB1c2goe1xcXFxuICAgIGNvbF90eXBlOiAnbGluZSdcXFxcbn0pO1xcXFxucGxhdGZvcm0yID0gbmFtZXNbcGlkXTtcXFxcbnJ1bGVzID0gJC5yZXF1aXJlKCdjb25maWdzP3J1bGU9dWNra+S6kScpLmdldEdyb3VwSnNvbihydWxlcywgXFxcXFxcXCJzZWFyY2hfZ3JvdXBcXFxcXFxcIiwgcGxhdGZvcm0yLCBcXFxcXFxcIuWFqOWFqFxcXFxcXFwiKS5zbGljZSgxKTtcXFxcblxcXFxuXFxcXG5cXFxcblxcXFxuXFxcXG5cXFxcbmlmIChydWxlcy5sZW5ndGggPT0gMCkge1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiBSaWNoKFN0cm9uZyhDb2xvcihcXFxcXFxcIuayoeacieinhOWImVxcXFxcXFwiKSkpLFxcXFxuICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXFxcbiAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcXFxuICAgICAgICB9XFxcXG4gICAgfSk7XFxcXG59IGVsc2Uge1xcXFxuICAgIGp4bGlzdDIgPSBzdG9yYWdlMC5nZXRNeVZhcihcXFxcXFxcImp4bGlzdDJcXFxcXFxcIiwge30pO1xcXFxuICAgIHJ1bGVzLm1hcCgoXywgaWkpID0+IHtcXFxcbiAgICAgICAgbSA9IG1kNShfLmdyb3VwICsgXy50aXRsZSk7XFxcXG4gICAgICAgIGkgPSAhanhsaXN0MlttXTtcXFxcbiAgICAgICAgZDEgPSBfLmV4cGxvcmVfZW5hYmxlZCA9PSBcXFxcXFxcIjFcXFxcXFxcIjtcXFxcbiAgICAgICAgZDIgPSAnYnkgJyArIF8uYXV0aG9yO1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IFN0cm9uZyhpID8gXy50aXRsZSA6IENvbG9yKF8udGl0bGUpKSxcXFxcbiAgICAgICAgICAgIGRlc2M6IGQxID8gQ29sb3IoZDIsIFxcXFxcXFwiIzJFNUQ4RVxcXFxcXFwiKSA6IGQyLFxcXFxuICAgICAgICAgICAgdXJsOiAkKFtcXFxcXFxcIuWIhuS6q1xcXFxcXFwiLCBcXFxcXFxcIue8lui+kVxcXFxcXFwiLCBcXFxcXFxcIuWIoOmZpFxcXFxcXFwiLCBcXFxcXFxcIuenu+WKqFxcXFxcXFwiXS5jb25jYXQoW2kgPyBcXFxcXFxcIumAieS4reinhOWImVxcXFxcXFwiIDogXFxcXFxcXCLlj5bmtojpgInkuK1cXFxcXFxcIiwgZDEgPyBcXFxcXFxcIuemgeeUqOWPkeeOsFxcXFxcXFwiIDogXFxcXFxcXCLlkK/nlKjlj5HnjrBcXFxcXFxcIl0pLCAyLCAn6YCJ5oup5omp5bGV5pON5L2cJykuc2VsZWN0KChtLCBfKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgc3dpdGNoIChpbnB1dCkge1xcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICfliIbkuqsnOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFxcXFxcInRvb2w/cnVsZT11Y2tr5LqRXFxcXFxcXCIpLmdldFJ1bGVQYXN0ZShbX10pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+e8lui+kSc6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnIgPSAkLnJlcXVpcmUoJ3Rvb2w/cnVsZT11Y2tr5LqRJykuZ2V0VmFyaWFibGVzKCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHQgb2YgYXJyKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcih0KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyciA9IE9iamVjdC5rZXlzKF8pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh0IG9mIGFycikge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKHQsIF9bdF0gfHwgXFxcXFxcXCJcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcigncnVsZV91aWQnLCBtKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdzZWFyY2hfZW5hYmxlZCcsIF8uc2VhcmNoX2VuYWJsZWQgfHwgXFxcXFxcXCIwXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2V4cGxvcmVfZW5hYmxlZCcsIF8uZXhwbG9yZV9lbmFibGVkIHx8IFxcXFxcXFwiMFxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3J1bGVFZGl0I25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5Iz9wYWdlVGl0bGU96KeE5YiZ57yW6L6RJnJ1bGU9dWNra+S6kSc7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAn5Yig6ZmkJzpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXFxcXFwi56Gu5a6a5Yig6ZmkXFxcXFxcXCIgKyBfLmdyb3VwICsgXFxcXFxcXCLop4TliJnigJxcXFxcXFxcIiArIF8udGl0bGUgKyAn4oCd5ZCX77yfXFxcXFxcXFxu5q2k5pON5L2c5LiN5Y+v6YCG77yM6K+36LCo5oWO6YCJ5oup44CCJykuY29uZmlybSgobSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkID0gJC5yZXF1aXJlKCdjb25maWdzP3J1bGU9dWNra+S6kScpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGVzID0gJCQuZ2V0SnNvbl8yKG0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLnNhdmVKc29uKHJ1bGVzKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBtKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICfnp7vliqgnOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgenkgPSAkLnJlcXVpcmUoJ2NvbmZpZ3M/cnVsZT11Y2tr5LqRJykuZ2V0SnNvbl8yKG0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgenUgPSB6eS5zbGljZSgxKS5tYXAoXyA9PiBfLnRpdGxlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKHp1LmNvbmNhdChcXFxcXFxcIuacgOWQjumdolxcXFxcXFwiKSwgMiwgJ+ivt+mAieaLqeenu+WKqOS9jee9ricpLnNlbGVjdCgoenksIHp1LCBfKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHp1LmluZGV4T2YoaW5wdXQpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09IC0xKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6eS5wdXNoKF8pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenkuc3BsaWNlKGkgKyAxLCAwLCBfKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLnJlcXVpcmUoJ2NvbmZpZ3M/cnVsZT11Y2tr5LqRJykuc2F2ZUpzb24oenkpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHp5LCB6dSwgXyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAn6YCJ5Lit6KeE5YiZJzpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGp4bGlzdDIgPSBzdG9yYWdlMC5nZXRNeVZhcihcXFxcXFxcImp4bGlzdDJcXFxcXFxcIiwge30pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAganhsaXN0MlttXSA9IF87XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihcXFxcXFxcImp4bGlzdDJcXFxcXFxcIiwganhsaXN0Mik7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAn5Y+W5raI6YCJ5LitJzpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGp4bGlzdDIgPSBzdG9yYWdlMC5nZXRNeVZhcihcXFxcXFxcImp4bGlzdDJcXFxcXFxcIiwge30pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGp4bGlzdDJbbV07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcihcXFxcXFxcImp4bGlzdDJcXFxcXFxcIiwganhsaXN0Mik7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAn5ZCv55So5Y+R546wJzpcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAn56aB55So5Y+R546wJzpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICQucmVxdWlyZSgnY29uZmlncz9ydWxlPXVja2vkupEnKS5nZXRKc29uXzIobSwgXFxcXFxcXCJleHBsb3JlX2VuYWJsZWRcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9LCBtLCBfKSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcXFxcbiAgICAgICAgICAgIGltZzogXy5pY29uXFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IF8uZ3JvdXAgKyAn5LioJyArIF8uc2VhcmNoX2dyb3VwICsgJ+S4qCcgKyAoXy54NV91cmwgfHwgKF8udXJsID8gXy51cmwgOiBfLnNlYXJjaF91cmwpLnNwbGl0KFxcXFxcXFwiL1xcXFxcXFwiKS5zbGljZSgwLCAzKS5qb2luKFxcXFxcXFwiL1xcXFxcXFwiKSksXFxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKG0pID0+IHtcXFxcbiAgICAgICAgICAgICAgICAkLnJlcXVpcmUoJ2NvbmZpZ3M/cnVsZT11Y2tr5LqRJykuZ2V0SnNvbl8yKG0sIFxcXFxcXFwic2VhcmNoX2VuYWJsZWRcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxcXG4gICAgICAgICAgICB9LCBtKSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9pY29uJyxcXFxcbiAgICAgICAgICAgIGltZzogJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vbWVzc3kvJyArIChfLnNlYXJjaF9lbmFibGVkID09ICcxJyA/IDU1IDogNjMpICsgJy5zdmcnLFxcXFxuICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxcXG4gICAgICAgIH0pO1xcXFxuICAgIH0pO1xcXFxufVxcXFxuc2V0UmVzdWx0KGQpO1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuKdvOeoi+W6j+mmlumhtVxcXCIsXFxcInBhdGhcXFwiOlxcXCJob21lXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxuZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvbGliP3J1bGU9dWNra+S6kScsIHt9KSkucnVsZSk7XFxcXG5hZGRMaXN0ZW5lcignb25SZWZyZXNoJywgJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgcHV0TXlWYXIoJ2tleXdvcmQyJywgZ2V0TXlWYXIoJ2tleXdvcmQnKSk7XFxcXG59KSk7XFxcXG5kID0gW107XFxcXG5sZXQgcnVsZXMgPSAkLnJlcXVpcmUoXFxcXFxcXCJjb25maWdzP3J1bGU9dWNra+S6kVxcXFxcXFwiKS5nZXRKc29uKCk7XFxcXG5cXFxcblxcXFxuXFxcXG5zZWFyY2hfcnVsZSA9IHJ1bGVzLmZpbHRlcihfID0+IF8uc2VhcmNoX2VuYWJsZWQgPT0gXFxcXFxcXCIxXFxcXFxcXCIgJiYgXy5zZWFyY2hfdXJsICE9IFxcXFxcXFwiXFxcXFxcXCIgJiYgXy5zZWFyY2hGaW5kICE9IFxcXFxcXFwiXFxcXFxcXCIpO1xcXFxuc2VhcmNoX3R5cGUgPSAkLnJlcXVpcmUoXFxcXFxcXCJjb25maWdzP3J1bGU9dWNra+S6kVxcXFxcXFwiKS5nZXRHcm91cE5hbWVzKHNlYXJjaF9ydWxlLCBcXFxcXFxcImdyb3VwXFxcXFxcXCIpO1xcXFxucnVsZVR5cGUgPSBnZXRNeVZhcihcXFxcXFxcInJ1bGVUeXBlXFxcXFxcXCIsIFxcXFxcXFwi57u85ZCIXFxcXFxcXCIpO1xcXFxuc2VhcmNoX3J1bGUgPSAkLnJlcXVpcmUoXFxcXFxcXCJjb25maWdzP3J1bGU9dWNra+S6kVxcXFxcXFwiKS5nZXRHcm91cEpzb24oc2VhcmNoX3J1bGUsIFxcXFxcXFwiZ3JvdXBcXFxcXFxcIiwgcnVsZVR5cGUsIFxcXFxcXFwi57u85ZCIXFxcXFxcXCIpO1xcXFxuc2VhcmNoX2dyb3VwID0gJC5yZXF1aXJlKFxcXFxcXFwiY29uZmlncz9ydWxlPXVja2vkupFcXFxcXFxcIikuZ2V0R3JvdXBOYW1lcyhzZWFyY2hfcnVsZSwgXFxcXFxcXCJzZWFyY2hfZ3JvdXBcXFxcXFxcIik7XFxcXG5ydWxlR3JvdXAgPSBOdW1iZXIoZ2V0TXlWYXIoXFxcXFxcXCJydWxlR3JvdXBcXFxcXFxcIikpIHx8IDA7XFxcXG5pZiAocnVsZUdyb3VwID4gc2VhcmNoX2dyb3VwLmxlbmd0aCAtIDEpIHtcXFxcbiAgICBydWxlR3JvdXAgPSAwO1xcXFxufVxcXFxuc2VhcmNoX3J1bGUgPSAkLnJlcXVpcmUoXFxcXFxcXCJjb25maWdzP3J1bGU9dWNra+S6kVxcXFxcXFwiKS5nZXRHcm91cEpzb24oc2VhcmNoX3J1bGUsIFxcXFxcXFwic2VhcmNoX2dyb3VwXFxcXFxcXCIsIHNlYXJjaF9ncm91cFtydWxlR3JvdXBdLCBcXFxcXFxcIuWFqOWFqFxcXFxcXFwiKTtcXFxcbmxldCBzaWQgPSBOdW1iZXIoZ2V0TXlWYXIoXFxcXFxcXCJzaWRcXFxcXFxcIikpIHx8IDA7XFxcXG5pZiAoc2lkID4gc2VhcmNoX3J1bGUubGVuZ3RoIC0gMSkge1xcXFxuICAgIHNpZCA9IDA7XFxcXG59XFxcXG5pZiAoc2lkKSB7XFxcXG4gICAgZGF0YSA9IFtzZWFyY2hfcnVsZVtzaWRdXTtcXFxcbn0gZWxzZSB7XFxcXG4gICAgZGF0YSA9IHNlYXJjaF9ydWxlLnNsaWNlKDEpO1xcXFxufVxcXFxuXFxcXG5cXFxcblxcXFxuXFxcXG5sZXQgZXhwbG9yZV9ydWxlID0gcnVsZXMuZmlsdGVyKF8gPT4gXy5leHBsb3JlX2VuYWJsZWQgPT0gXFxcXFxcXCIxXFxcXFxcXCIgJiYgXy51cmwgIT0gXFxcXFxcXCJcXFxcXFxcIiAmJiAoXy5leHBsb3JlX1g1ID09IFxcXFxcXFwiMVxcXFxcXFwiIHx8IF8uZmluZF9ydWxlICE9IFxcXFxcXFwiXFxcXFxcXCIpKTtcXFxcbmxldCB0aWQgPSBOdW1iZXIoZ2V0TXlWYXIoXFxcXFxcXCJ0aWRcXFxcXFxcIikpIHx8IDA7XFxcXG5pZiAodGlkID4gZXhwbG9yZV9ydWxlLmxlbmd0aCAtIDEpIHtcXFxcbiAgICB0aWQgPSAwO1xcXFxufVxcXFxubGV0IHJ1bGUgPSBfID0gZXhwbG9yZV9ydWxlW3RpZF07XFxcXG5sZXQgcnVsZV94NSA9IF8uZXhwbG9yZV9YNSA9PSBcXFxcXFxcIjFcXFxcXFxcIjtcXFxcbmlmIChydWxlX3g1KSB7XFxcXG4gICAgaWYgKCFfLng1X3VybCAmJiAoXy51cmwgPyBfLnVybCA6IF8uc2VhcmNoX3VybCkubWF0Y2goL2Z5KEFsbHxjbGFzc3xhcmVhfHNvcnR8eWVhcnxwYWdlKS8pKSB7XFxcXG4gICAgICAgIF8ueDVfdXJsID0gKF8udXJsID8gXy51cmwgOiBfLnNlYXJjaF91cmwpLnNwbGl0KFxcXFxcXFwiL1xcXFxcXFwiKS5zbGljZSgwLCAzKS5qb2luKFxcXFxcXFwiL1xcXFxcXFwiKTtcXFxcbiAgICB9XFxcXG59IGVsc2Uge1xcXFxuICAgIGlmIChfUEFHRSkgJC5yZXF1aXJlKCdub3RpY2U/cnVsZT11Y2tr5LqRJykoKTtcXFxcbiAgICBfLng1X2Rlc2MgPSAnMSc7XFxcXG59XFxcXG5sZXQgYmFzZVVybCwgaG9tZV9iYXNlVXJsID0gZ2V0UnVsZUJhc2VVcmwoXy51cmwpO1xcXFxuXFxcXG5cXFxcblxcXFxuXFxcXG5cXFxcblxcXFxuLy8gdG9wXFxcXG5pZiAoX1BBR0UpIHtcXFxcbiAgICBleHBsb3JlX3J1bGUubWFwKChfLCBpKSA9PiB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogU3Ryb25nKFxcXFxcXFwi4oCc4oCcXFxcXFxcXCIgKyAodGlkID09IGkgPyBfLnRpdGxlICsgXFxcXFxcXCLigJ3igJ1cXFxcXFxcIiA6IFxcXFxcXFwi4oCd4oCdXFxcXFxcXCIgKyBfLnRpdGxlKSksXFxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGkpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBwdXRNeVZhcigna2V5d29yZDInLCBnZXRNeVZhcigna2V5d29yZCcpKTtcXFxcbiAgICAgICAgICAgICAgICBwdXRNeVZhcigndGlkJywgaSk7XFxcXG4gICAgICAgICAgICAgICAgZm9yICh0IG9mIFtcXFxcXFxcImNsYXNzXFxcXFxcXCIsIFxcXFxcXFwiYXJlYVxcXFxcXFwiLCBcXFxcXFxcInllYXJcXFxcXFxcIiwgXFxcXFxcXCJzb3J0XFxcXFxcXCIsIFxcXFxcXFwiRnlBbGxcXFxcXFxcIl0pIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcih0ICsgXFxcXFxcXCJfaVxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcXFxuICAgICAgICAgICAgfSwgaSksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxcXG4gICAgICAgIH0pO1xcXFxuICAgIH0pO1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcIng1X3dlYnZpZXdfc2luZ2xlXFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogXy54NV9kZXNjID09ICcxJyB8fCBfLng1X3VybCB8fCBfLnVybCxcXFxcbiAgICAgICAgZGVzYzogXy54NV9kZXNjID09ICcxJyA/ICcwJyA6ICdzY3JlZW4tMTMzJiZmbG9hdCcsXFxcXG4gICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICBjYW5CYWNrOiB0cnVlLFxcXFxuICAgICAgICAgICAgdWE6IF8ueDVfdWEgPyAoXy54NV91YSA9PSBcXFxcXFxcIlBDX1VBXFxcXFxcXCIgPyBQQ19VQSA6IF8ueDVfdWEpIDogTU9CSUxFX1VBLFxcXFxuICAgICAgICAgICAgcmVmZXJlcjogXy54NV9yZWZlcmVyLFxcXFxuICAgICAgICAgICAganM6IF8ueDVfanMsXFxcXG4gICAgICAgICAgICBqc0xvYWRpbmdJbmplY3Q6ICEhXy54NV9qc0xvYWRpbmdJbmplY3QsXFxcXG4gICAgICAgICAgICBhdXRvUGxheTogISFfLng1X2F1dG9QbGF5LFxcXFxuICAgICAgICAgICAgZmxvYXRWaWRlbzogISFfLng1X2Zsb2F0VmlkZW8sXFxcXG4gICAgICAgICAgICBpbWdMb25nQ2xpY2s6ICFfLng1X2ltZ0xvbmdDbGljayxcXFxcbiAgICAgICAgICAgIHNob3dQcm9ncmVzczogIV8ueDVfc2hvd1Byb2dyZXNzLFxcXFxuICAgICAgICAgICAgYmxvY2tSdWxlczogZXZhbChfLng1X2Jsb2NrUnVsZXMpIHx8IFtdLFxcXFxuICAgICAgICAgICAgdXJsSW50ZXJjZXB0b3I6ICQudG9TdHJpbmcoKHVybEludGVyY2VwdG9yX2pzLCB4NVVybCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5pbmNsdWRlcyhcXFxcXFxcImFsaXl1bmRyaXZlLmNvbS9cXFxcXFxcIikgfHwgaW5wdXQuaW5jbHVkZXMoXFxcXFxcXCJhbGl5dW5kcml2ZS5uZXQvXFxcXFxcXCIpIHx8IGlucHV0LmluY2x1ZGVzKFxcXFxcXFwiYWxpcGFuLmNvbS9cXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQudG9TdHJpbmcoKHVybCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZmJhLm9wZW4oSlNPTi5zdHJpbmdpZnkoe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGU6ICfkupHnm5jlkJsu566AJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FsaXl1biNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSM/cnVsZT3kupHnm5jlkJsu566AJnBhZ2U9ZnlwYWdlJnJlYWx1cmw9XFxcXFxcXCIgKyBlbmNvZGVVUklDb21wb25lbnQodXJsKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xcXFxuICAgICAgICAgICAgICAgICAgICB9LCBpbnB1dClcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0LmluY2x1ZGVzKFxcXFxcXFwicXVhcmsuY25cXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQudG9TdHJpbmcoKHVybCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZmJhLm9wZW4oSlNPTi5zdHJpbmdpZnkoe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuWkuOWFi+e9keebmFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvcXVhcmtMaXN0I25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5Iz9ydWxlPXVja2vkupEmcmVhbHVybD1cXFxcXFxcIiArIGVuY29kZVVSSUNvbXBvbmVudCh1cmwpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpXFxcXG4gICAgICAgICAgICAgICAgICAgIH0sIGlucHV0KTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgbGV0IHg1X3VybEludGVyY2VwdG9yID0gbmV3IEZ1bmN0aW9uKFxcXFxcXFwiaW5wdXRcXFxcXFxcIiwgXFxcXFxcXCJ4NVVybFxcXFxcXFwiLCB1cmxJbnRlcmNlcHRvcl9qcyk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHg1X3VybEludGVyY2VwdG9yKGlucHV0LCB4NVVybCk7XFxcXG4gICAgICAgICAgICB9LCBfLng1X3VybEludGVyY2VwdG9yLCBcXFxcXFxcImhpa2VyOi8vcGFnZS9ydWxlSG9tZSNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSM/cnVsZT11Y2tr5LqRJnBhZ2U9ZnlwYWdlJnJ1bGVOYW1lPVxcXFxcXFwiICsgXy50aXRsZSArIFxcXFxcXFwiJnJ1bGVHcm91cD1cXFxcXFxcIiArIF8uZ3JvdXAgKyBcXFxcXFxcIiZiYXNlVXJsPVxcXFxcXFwiKVxcXFxuICAgICAgICB9XFxcXG4gICAgfSk7XFxcXG59XFxcXG5cXFxcblxcXFxuXFxcXG5pZiAocnVsZV94NSkgeyAvLyB4NVxcXFxuICAgIGlmIChfLng1X2Rlc2MgPT0gJzEnKSB7IC8vIOiHquWumuS5iemmlumhtVxcXFxuICAgICAgICBldmFsKF8ucHJlUnVsZSk7XFxcXG4gICAgICAgIGV2YWwoXy54NV9ob21lKTtcXFxcbiAgICAgICAgaWYgKHJ1bGUuU2VhcmNoICYmIHJ1bGUuc2VhcmNoX3VybCAhPSBcXFxcXFxcIlxcXFxcXFwiICYmIHJ1bGUuc2VhcmNoRmluZCAhPSBcXFxcXFxcIlxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICBkYXRhID0gW3J1bGVdO1xcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLmraPlnKjmkJzntKLigJzigJxcXFxcXFxcIiArIGtleXdvcmQgKyBcXFxcXFxcIuKAneKAne+8jOWKoOi9veesrFxcXFxcXFwiICsgcGFnZSArIFxcXFxcXFwi6aG15LitLi4uXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgcGljX3VybDogXFxcXFxcXCJodHRwczovL2hpa2VyZmFucy5jb20vd2Vpc3lyL2ltZy9Mb2FkaW5nMS5naWZcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogX1BBR0UgPyBcXFxcXFxcInBpY18xX2NlbnRlclxcXFxcXFwiIDogXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICBpZDogcGFnZWlkXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG59IGVsc2UgeyAvLyDmkJzntKIv5Y+R546wXFxcXG4gICAgaWYgKF9QQUdFKSB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmVfYmxhbmsnXFxcXG4gICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZV9ibGFuaydcXFxcbiAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgdGl0bGU6IFN0cm9uZyhcXFxcXFxcIuaIkeeahOaUtuiXj1xcXFxcXFwiKSxcXFxcbiAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL2NvbGxlY3Rpb24/cnVsZT1cXFxcXFxcIiArIGlkLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiaWNvbl9zbWFsbF8zXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBpbWc6IFxcXFxcXFwiaGlrZXI6Ly9pbWFnZXMvaWNvbl9kb3dubG9hZFxcXFxcXFwiXFxcXG4gICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBTdHJvbmcoXFxcXFxcXCLljoblj7LorrDlvZVcXFxcXFxcIiksXFxcXG4gICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9oaXN0b3J5P3J1bGU9XFxcXFxcXCIgKyBpZCxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImljb25fc21hbGxfM1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgaW1nOiBcXFxcXFxcImhpa2VyOi8vaW1hZ2VzL2ljb25faGlzXFxcXFxcXCJcXFxcbiAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgdGl0bGU6IFN0cm9uZyhcXFxcXFxcIuinhOWImeeuoeeQhlxcXFxcXFwiKSxcXFxcbiAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvcnVsZUxpc3Qjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjP3BhZ2VUaXRsZT3op4TliJnnrqHnkIYmcnVsZT1cXFxcXFxcIiArIGlkLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiaWNvbl9zbWFsbF8zXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBpbWc6IFxcXFxcXFwiaGlrZXI6Ly9pbWFnZXMvaWNvbl94aXV0YW5cXFxcXFxcIlxcXFxuICAgICAgICB9LCB7XFxcXG4gICAgICAgICAgICB0aXRsZTogJ+aQnOe0oicsXFxcXG4gICAgICAgICAgICBkZXNjOiAn5pCc57Si5YWz6ZSu6K+NIC8g5aS45YWL6ZO+5o6lJyxcXFxcbiAgICAgICAgICAgIHVybDogJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgaW5wdXQgPSBpbnB1dC50cmltKCk7XFxcXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0Lm1hdGNoKC9xdWFyay5jbi4qXFxcXFxcXFwvc1xcXFxcXFxcLy4rLykpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3F1YXJrTGlzdCNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSM/cmVhbHVybD1cXFxcXFxcIiArIGVuY29kZVVSSUNvbXBvbmVudChpbnB1dCkgKyBcXFxcXFxcIiZydWxlPXVja2vkupEmc2hhcmVQd2Q9XFxcXFxcXCI7XFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dCAhPSBcXFxcXFxcIlxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdrZXl3b3JkMicsIGlucHV0KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcXFxuICAgICAgICAgICAgfSksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJpbnB1dFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICBpZDogaWQgKyBcXFxcXFxcIjpzZWFyY2hcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGtleXdvcmQsXFxcXG4gICAgICAgICAgICAgICAgb25DaGFuZ2U6IFxcXFxcXFwicHV0TXlWYXIoJ2tleXdvcmQnLGlucHV0KVxcXFxcXFwiXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBSaWNoKFN0cm9uZyhDb2xvcihydWxlVHlwZSwgXFxcXFxcXCIjMzM5OWNjXFxcXFxcXCIpKSksXFxcXG4gICAgICAgICAgICB1cmw6ICQoW1xcXFxcXFwi57u85ZCIXFxcXFxcXCJdLmNvbmNhdChncm91cHMpLm1hcChuYW1lID0+IHtcXFxcbiAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSBydWxlVHlwZSkge1xcXFxuICAgICAgICAgICAgICAgICAgICBuYW1lID0gUmljaChTdHJvbmcoQ29sb3IobmFtZSkpKTtcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlYXJjaF90eXBlLmluZGV4T2YobmFtZSkgPT0gLTEpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IFJpY2goXFxcXFxcXCI8Uz5cXFxcXFxcIiArIG5hbWUgKyBcXFxcXFxcIjwvUz5cXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xcXFxuICAgICAgICAgICAgfSksIDMsIFxcXFxcXFwi6YCJ5oup5pCc57Si57G75YirXFxcXFxcXCIpLnNlbGVjdCgoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0LmluZGV4T2YoXFxcXFxcXCI8Uz5cXFxcXFxcIikgIT0gLTEpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/msqHmnInlr7nlupTop4TliJlcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0LmluZGV4T2YoXFxcXFxcXCI8XFxcXFxcXCIpID09IC0xKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdrZXl3b3JkMicsIGdldE15VmFyKCdrZXl3b3JkJykpO1xcXFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcigncnVsZVR5cGUnLCBpbnB1dCk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoXFxcXFxcXCJydWxlR3JvdXBcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIoXFxcXFxcXCJzaWRcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXFxcbiAgICAgICAgICAgIH0pLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgc2VhcmNoX2dyb3VwLm1hcCgobmFtZSwgaSkgPT4ge1xcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogcnVsZUdyb3VwID09IGkgPyBSaWNoKFN0cm9uZyhDb2xvcihuYW1lKSkpIDogbmFtZSxcXFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGkpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2tleXdvcmQyJywgZ2V0TXlWYXIoJ2tleXdvcmQnKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdydWxlR3JvdXAnLCBpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJNeVZhcihcXFxcXFxcInNpZFxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXFxcbiAgICAgICAgICAgICAgICB9LCBpKSxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJ1xcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgc2VhcmNoX3J1bGUubWFwKChfLCBpKSA9PiB7XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBzaWQgPT0gaSA/IFJpY2goU3Ryb25nKENvbG9yKF8udGl0bGUpKSkgOiBfLnRpdGxlLFxcXFxuICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcigna2V5d29yZDInLCBnZXRNeVZhcigna2V5d29yZCcpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3NpZCcsIGkpO1xcXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcXFxuICAgICAgICAgICAgICAgIH0sIGkpLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZV9ibGFuaydcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfVxcXFxuXFxcXG5cXFxcblxcXFxuXFxcXG5cXFxcbiAgICBpZiAoX1NPVSkge1xcXFxuICAgICAgICBpZiAoZGF0YS5sZW5ndGggPiAwKSB7XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuWKoOi9veesrFxcXFxcXFwiICsgcGFnZSArIFxcXFxcXFwi6aG15Lit77yM6L+b5bqm77yaMS9cXFxcXFxcIiArIGRhdGEubGVuZ3RoLFxcXFxuICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF9jZW50ZXJfMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIGRlc2M6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgcGljX3VybDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICBpZDogcGFnZWlkXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgIH0gZWxzZSBpZiAoX1BBR0UpIHtcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5rKh5pyJ5Y+v55So55qE5pCc57Si6KeE5YiZXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgZGVzYzogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBwaWNfdXJsOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlkOiBwYWdlaWRcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH0gZWxzZSBpZiAoX1BBR0UgfHwgcnVsZS51cmwubWF0Y2goXFxcXFxcXCJmeXBhZ2VcXFxcXFxcIikpIHtcXFxcbiAgICAgICAgaWYgKF9QQUdFKSB7XFxcXG4gICAgICAgICAgICBpZiAocnVsZS50aXRsZSAhPSBcXFxcXFxcIuiBmuaQnFxcXFxcXFwiKSBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGI+JyArIENvbG9yKHJ1bGUudGl0bGUsICcjZmY2NjAxJykgKyAnPC9iPicsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh1cmwpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgZm9yICh0IG9mIFtcXFxcXFxcImNsYXNzXFxcXFxcXCIsIFxcXFxcXFwiYXJlYVxcXFxcXFwiLCBcXFxcXFxcInllYXJcXFxcXFxcIiwgXFxcXFxcXCJzb3J0XFxcXFxcXCIsIFxcXFxcXFwiRnlBbGxcXFxcXFxcIl0pIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyTXlWYXIodCArIFxcXFxcXFwiX2lcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybDtcXFxcbiAgICAgICAgICAgICAgICB9LCBcXFxcXFxcImhpa2VyOi8vcGFnZS9ydWxlSG9tZT9ydWxlPXVja2vkupEmcGFnZT1meXBhZ2UmcnVsZU5hbWU9XFxcXFxcXCIgKyBydWxlLnRpdGxlICsgXFxcXFxcXCImcnVsZUdyb3VwPVxcXFxcXFwiICsgcnVsZS5ncm91cCksXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXFxcbiAgICAgICAgICAgICAgICBpbWc6IHJ1bGUuaWNvbixcXFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2UsXFxcXG4gICAgICAgICAgICAgICAgICAgIGhvbWU6IDFcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIGdldFJ1bGVHcm91cCgpO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGJhc2VVcmwgPSBob21lX2Jhc2VVcmw7XFxcXG4gICAgICAgIGV2YWwocnVsZS5wcmVSdWxlKTtcXFxcbiAgICAgICAgZXZhbChydWxlLmZpbmRfcnVsZSk7XFxcXG4gICAgfVxcXFxufVxcXFxuX1BBR0UgPyBzZXRQcmVSZXN1bHQoZCkgOiBzZXRSZXN1bHQoZCk7XFxcXG5kZWxldGVJdGVtQnlDbHMoJ2xvYWRpbmdfZ2lmJyk7XFxcXG5cXFxcblxcXFxuXFxcXG4vLyDmkJzntKJcXFxcbmlmICgoIXJ1bGVfeDUgfHwgKHJ1bGUuU2VhcmNoICYmIHJ1bGUuc2VhcmNoX3VybCAhPSBcXFxcXFxcIlxcXFxcXFwiICYmIHJ1bGUuc2VhcmNoRmluZCAhPSBcXFxcXFxcIlxcXFxcXFwiKSkgJiYgX1NPVSAmJiBkYXRhLmxlbmd0aCA+IDApIHtcXFxcbiAgICBzZXRIaXN0b3J5S2V5d29yZCgpO1xcXFxuICAgIGxldCB0YXNrcyA9IGRhdGEubWFwKGl0ID0+IHtcXFxcbiAgICAgICAgcmV0dXJuIHtcXFxcbiAgICAgICAgICAgIGZ1bmM6IGZ1bmN0aW9uKHJ1bGUpIHtcXFxcbiAgICAgICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgICAgICAgICBwYWdlID0gTVlfUEFHRTtcXFxcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCA9IGdldFJ1bGVCYXNlVXJsKHJ1bGUuc2VhcmNoX3VybCwga2V5d29yZCk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYWdlID09IDEgfHwgcnVsZS5zZWFyY2hfdXJsLm1hdGNoKFxcXFxcXFwiZnlwYWdlXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBldmFsKHJ1bGUucHJlUnVsZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2VhcmNoZmluZCA9IG5ldyBGdW5jdGlvbihcXFxcXFxcInJ1bGVcXFxcXFxcIiwgXFxcXFxcXCJiYXNlVXJsXFxcXFxcXCIsIFxcXFxcXFwia2V5d29yZFxcXFxcXFwiLCBcXFxcXFxcInBhZ2VcXFxcXFxcIiwgcnVsZS5zZWFyY2hGaW5kKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsaXN0ID0gc2VhcmNoZmluZChydWxlLCBiYXNlVXJsLCBrZXl3b3JkLCBwYWdlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbGlzdCkgcmV0dXJuIFtdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRlc2NUaXBzID0gXFxcXFxcXCLigJzigJzigJ3igJ1cXFxcXFxcIiArIHJ1bGUudGl0bGUuZm9udGNvbG9yKFxcXFxcXFwiI2YxM2I2NmFcXFxcXFxcIikgKyBcXFxcXFxcIiZuYnNwOyZuYnNwO1xcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc0xpc3QgPSBbXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGl0IG9mIGxpc3QpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNMaXN0LnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXQudGl0bGUuaW5jbHVkZXMoXFxcXFxcXCLigJzigJzigJ3igJ1cXFxcXFxcIikgPyBpdC50aXRsZSA6IFxcXFxcXFwi4oCc4oCc4oCd4oCdXFxcXFxcXCIgKyBpdC50aXRsZS5yZXBsYWNlKC88XFxcXFxcXFwvZW0+L2csIFxcXFxcXFwiXFxcXFxcXCIpLnJlcGxhY2UobmV3IFJlZ0V4cChrZXl3b3JkLCBcXFxcXFxcImdcXFxcXFxcIiksIFxcXFxcXFwiPHN0cm9uZz48c3BhbiBzdHlsZT1cXFxcXFxcXFxcXFxcXFwiY29sb3I6ICMxRTkwRkZcXFxcXFxcXFxcXFxcXFwiPlxcXFxcXFwiICsga2V5d29yZCArIFxcXFxcXFwiPC9zcGFuPjwvc3Ryb25nPlxcXFxcXFwiKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogZGVzY1RpcHMgKyAoaXQuZGVzYyB8fCBcXFxcXFxcIlxcXFxcXFwiKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBpdC51cmwsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogaXQuaW1nIHx8IGl0LnBpY191cmwsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBpdC5jb2xfdHlwZSB8fCBcXFxcXFxcInRleHRfMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYTogT2JqZWN0LmFzc2lnbih7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmhlcml0VGl0bGU6IGZhbHNlLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9QaWM6IHRydWVcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgaXQuZXh0cmEgfHwge30pXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzTGlzdDtcXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgbG9nKF8udGl0bGUgKyBcXFxcXFxcIjpcXFxcXFxcIiArIGUudG9TdHJpbmcoKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgcGFyYW06IGl0LFxcXFxuICAgICAgICAgICAgaWQ6IFxcXFxcXFwidWNra19ydWxlQFxcXFxcXFwiICsgaXQudGl0bGVcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pO1xcXFxuICAgIGJhdGNoRXhlY3V0ZSh0YXNrcywge1xcXFxuICAgICAgICBmdW5jOiBmdW5jdGlvbihwYXJhbSwgaWQsIGVycm9yLCByZXN1bHQpIHtcXFxcbiAgICAgICAgICAgIHBhcmFtLmkgKz0gMTtcXFxcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcXFxcbiAgICAgICAgICAgICAgICBkZWxldGVJdGVtKFxcXFxcXFwiX25vdGhhdmVcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgYWRkSXRlbUJlZm9yZShwYWdlaWQsIHJlc3VsdCk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBpZiAocGFyYW0uaSA9PT0gcGFyYW0uYWxsKSB7XFxcXG4gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQgfHwgIXJlc3VsdC5sZW5ndGgpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlSXRlbShcXFxcXFxcIl9ub3RoYXZlXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICBhZGRJdGVtQmVmb3JlKHBhZ2VpZCwge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF9jZW50ZXJfMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuKAnOKAnOKAneKAnVxcXFxcXFwiICsgXFxcXFxcXCJ+fn7ku4DkuYjotYTmupDpg73msqHmnInlk6Z+fn5cXFxcXFxcIi5mb250Y29sb3IoXFxcXFxcXCJHcmF5XFxcXFxcXCIpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2UsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFxcXFxcXFwiX25vdGhhdmVcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgZGVsZXRlSXRlbShwYWdlaWQpO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKHBhZ2VpZCwge1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLliqDovb3nrKxcXFxcXFxcIiArIE1ZX1BBR0UgKyBcXFxcXFxcIumhteS4re+8jOi/m+W6pu+8mlxcXFxcXFwiICsgKHBhcmFtLmkgKyAxKSArIFxcXFxcXFwiL1xcXFxcXFwiICsgcGFyYW0uYWxsLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAgcGFyYW06IHtcXFxcbiAgICAgICAgICAgIGFsbDogZGF0YS5sZW5ndGgsXFxcXG4gICAgICAgICAgICBpOiAwLFxcXFxuICAgICAgICB9XFxcXG4gICAgfSk7XFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi4p256KeE5YiZ57yW6L6RXFxcIixcXFwicGF0aFxcXCI6XFxcInJ1bGVFZGl0XFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxuZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvbGliP3J1bGU9dWNra+S6kScsIHt9KSkucnVsZSk7XFxcXG5cXFxcbmdyb3VwID0gZ2V0TXlWYXIoJ2dyb3VwJywgJ+WkuOWFiycpO1xcXFxuc2VhcmNoX2VuYWJsZWQgPSBnZXRNeVZhcignc2VhcmNoX2VuYWJsZWQnLCAnMScpID09ICcxJztcXFxcbmV4cGxvcmVfZW5hYmxlZCA9IGdldE15VmFyKCdleHBsb3JlX2VuYWJsZWQnLCAnMCcpID09ICcxJztcXFxcblxcXFxucnVsZV90aWQgPSBnZXRNeVZhcigncnVsZV90aWQnLCAn5Z+65pysJyk7XFxcXG5leHBsb3JlX1g1ID0gZ2V0TXlWYXIoJ2V4cGxvcmVfWDUnLCAnMCcpID09ICcxJztcXFxcbnRpbWUgPSBOdW1iZXIoZ2V0TXlWYXIoXFxcXFxcXCJ0aW1lXFxcXFxcXCIpKSB8fCBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcXFxcblxcXFxuXFxcXG5cXFxcblxcXFxuXFxcXG5cXFxcblxcXFxuZCA9IFtdO1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogU3Ryb25nKENvbG9yKCc8Yj4nICsgZ3JvdXAgKyAn6LWE5rqQPC9iPicsICcjZmY2NjAxJykpLFxcXFxuICAgIHVybDogJChncm91cHMubWFwKHRpdGxlID0+IHRpdGxlID09IGdyb3VwID8gUmljaChTdHJvbmcoQ29sb3IodGl0bGUpKSkgOiB0aXRsZSksIDIsICfpgInmi6nop4TliJnliIbnu4QnKS5zZWxlY3QoKCkgPT4ge1xcXFxuICAgICAgICBpZiAoIWlucHV0Lm1hdGNoKC9e4oCY4oCY4oCZ4oCZLykpIHtcXFxcbiAgICAgICAgICAgIHB1dE15VmFyKCdncm91cCcsIGlucHV0KTtcXFxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcXFxuICAgIH0pLFxcXFxuICAgIGltZzogaWNvbnNbZ3JvdXBdLFxcXFxuICAgIGNvbF90eXBlOiAnaWNvbl9zbWFsbF8zJ1xcXFxufSk7XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiBDb2xvcignPGI+5ZCv55So5pCc57SiPC9iPicsICcjZmY2NjAxJyksXFxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChzZWFyY2hfZW5hYmxlZCkgPT4ge1xcXFxuICAgICAgICBwdXRNeVZhcignc2VhcmNoX2VuYWJsZWQnLCBzZWFyY2hfZW5hYmxlZCk7XFxcXG4gICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXFxcbiAgICB9LCBzZWFyY2hfZW5hYmxlZCA/ICcwJyA6ICcxJyksXFxcXG4gICAgaW1nOiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tZXNzeS8nICsgKHNlYXJjaF9lbmFibGVkID8gNTUgOiA2MykgKyAnLnN2ZycsXFxcXG4gICAgY29sX3R5cGU6ICdpY29uX3NtYWxsXzMnXFxcXG59KTtcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6IENvbG9yKCc8Yj7lkK/nlKjlj5HnjrA8L2I+JywgJyNmZjY2MDEnKSxcXFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGV4cGxvcmVfZW5hYmxlZCkgPT4ge1xcXFxuICAgICAgICBwdXRNeVZhcignZXhwbG9yZV9lbmFibGVkJywgZXhwbG9yZV9lbmFibGVkKTtcXFxcbiAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcXFxuICAgIH0sIGV4cGxvcmVfZW5hYmxlZCA/ICcwJyA6ICcxJyksXFxcXG4gICAgaW1nOiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tZXNzeS8nICsgKGV4cGxvcmVfZW5hYmxlZCA/IDU1IDogNjMpICsgJy5zdmcnLFxcXFxuICAgIGNvbF90eXBlOiAnaWNvbl9zbWFsbF8zJ1xcXFxufSk7XFxcXG5cXFxcbltcXFxcXFxcIuWfuuacrFxcXFxcXFwiLCBcXFxcXFxcIuaQnOe0olxcXFxcXFwiLCBcXFxcXFxcIuWPkeeOsFxcXFxcXFwiLCBcXFxcXFxcIuabv+aNolxcXFxcXFwiLCBcXFxcXFxcIuaJqeWxlVxcXFxcXFwiXS5tYXAobmFtZSA9PiB7XFxcXG4gICAgaSA9IHJ1bGVfdGlkID09IG5hbWVcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogUmljaChTdHJvbmcoaSA/IENvbG9yKG5hbWUpIDogbmFtZSkpLFxcXFxuICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHRpZCwgdGlpKSA9PiB7XFxcXG4gICAgICAgICAgICBpZiAodGlpKSB7XFxcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3J1bGVfdGlkJywgdGlkKTtcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcXFxuICAgICAgICB9LCBuYW1lLCAhaSksXFxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF81J1xcXFxuICAgIH0pO1xcXFxufSk7XFxcXG5pbnB1dF9wdXNoID0gKGRlc2MsIGlkLCB2YWx1ZSwganNvbiwgaGVpZ2h0KSA9PiB7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgZGVzYzogZGVzYyxcXFxcbiAgICAgICAgdGl0bGU6IFxcXFxcXFwiPC8+XFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogJC50b1N0cmluZygoaWQpID0+IHtcXFxcbiAgICAgICAgICAgIGxldCBncm91cCA9ICQucmVxdWlyZShcXFxcXFxcImNvbmZpZ3M/cnVsZT11Y2tr5LqRXFxcXFxcXCIpLmdldEdyb3VwTmFtZXMoMCwgXFxcXFxcXCJzZWFyY2hfZ3JvdXBcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICBpZiAoIWdyb3VwLmxlbmd0aCkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgcmV0dXJuICQoZ3JvdXAsIDMsIFxcXFxcXFwi6YCJ5oup6KeE5YiZ5YiG57uEXFxcXFxcXCIpLnNlbGVjdCgoaWQpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgZXh0cmEgPSBmaW5kSXRlbShpZCkuZXh0cmE7XFxcXG4gICAgICAgICAgICAgICAgdXBkYXRlSXRlbShpZCwge1xcXFxuICAgICAgICAgICAgICAgICAgICBleHRyYTogT2JqZWN0LmFzc2lnbihleHRyYSwge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBpbnB1dFxcXFxuICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfSwgaWQpO1xcXFxuICAgICAgICB9LCBpZCksXFxcXG4gICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcXFxuICAgICAgICBleHRyYTogT2JqZWN0LmFzc2lnbih7XFxcXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKGlkLCB2YWx1ZSksXFxcXG4gICAgICAgICAgICBvbkNoYW5nZTogYHB1dE15VmFyKFxcXFxcXFwiJHtpZH1cXFxcXFxcIiwgaW5wdXQpYCxcXFxcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0YXJlYScsXFxcXG4gICAgICAgICAgICB0aXRsZVZpc2libGU6IHRydWUsXFxcXG4gICAgICAgICAgICBoaWdobGlnaHQ6IHRydWUsXFxcXG4gICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCB8fCA1LFxcXFxuICAgICAgICAgICAgaWQ6IGlkLFxcXFxuICAgICAgICB9LCBqc29uIHx8IHt9KVxcXFxuICAgIH0pO1xcXFxufVxcXFxuc3dpdGNoIChydWxlX3RpZCkge1xcXFxuICAgIGNhc2UgJ+WfuuacrCc6XFxcXG4gICAgICAgIFtcXFxcbiAgICAgICAgICAgIFsn5b+F5aGr77yM5rqQ5ZCN56ewJywgJ3RpdGxlJywgJyddLFxcXFxuICAgICAgICAgICAgWyfpgInloavvvIzmupDlm77moIcnLCAnaWNvbicsICcnXSxcXFxcbiAgICAgICAgICAgIFsn6YCJ5aGr77yM5rqQ5L2c6ICFJywgJ2F1dGhvcicsICfkvZrlkI0nXSxcXFxcbiAgICAgICAgICAgIFsn6YCJ5aGr77yMSnNMaWInLCAncHJlUnVsZScsICcnLCB7XFxcXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAzXFxcXG4gICAgICAgICAgICB9XSxcXFxcbiAgICAgICAgXS5tYXAoW2EsIGIsIGMsIGVdID0+IHtcXFxcbiAgICAgICAgICAgIGlucHV0X3B1c2goYSwgYiwgYywgZSwgMSk7XFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfmkJzntKInOlxcXFxuICAgICAgICBbXFxcXG4gICAgICAgICAgICBbJ+W/heWhq++8jOaQnOe0oumTvuaOpScsICdzZWFyY2hfdXJsJywgJyddLFxcXFxuICAgICAgICAgICAgWyflv4XloavvvIzmkJzntKLliIbnu4QnLCAnc2VhcmNoX2dyb3VwJywgJ+WFqOWFqCcsIHtcXFxcbiAgICAgICAgICAgICAgICBoaWdobGlnaHQ6IGZhbHNlLFxcXFxuICAgICAgICAgICAgfV0sXFxcXG4gICAgICAgICAgICBbJ+W/heWhq++8jOWIl+ihqOinhOWImVxcXFxcXFxcbuaPkOS+m+WPmOmHjzogYmFzZVVybCwga2V5d29yZCwgcGFnZVxcXFxcXFxcblxcXFxcXFxcbumcgOimgei/lOWbnuaVsOe7hO+8mnJldHVybiBbXTsnLCAnc2VhcmNoRmluZCcsICcnLCB7XFxcXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA1XFxcXG4gICAgICAgICAgICB9XSxcXFxcbiAgICAgICAgXS5tYXAoW2EsIGIsIGMsIGVdID0+IHtcXFxcbiAgICAgICAgICAgIGlucHV0X3B1c2goYSwgYiwgYywgZSwgMSk7XFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICflj5HnjrAnOlxcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IFN0cm9uZygn5L2/55SoIHg1X3dlYnZpZXdfc2luZ2xlJyksXFxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGV4cGxvcmVfWDUpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBwdXRNeVZhcignZXhwbG9yZV9YNScsIGV4cGxvcmVfWDUpO1xcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcXFxuICAgICAgICAgICAgfSwgZXhwbG9yZV9YNSA/ICcwJyA6ICcxJyksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfaWNvbicsXFxcXG4gICAgICAgICAgICBpbWc6ICdodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL21lc3N5LycgKyAoZXhwbG9yZV9YNSA/IDU1IDogNjMpICsgJy5zdmcnXFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICBbXFxcXG4gICAgICAgICAgICBbJ+W/heWhq++8jOa6kOmTvuaOpScsICd1cmwnLCAnJywge1xcXFxuICAgICAgICAgICAgICAgIGhlaWdodDogMVxcXFxuICAgICAgICAgICAgfV0sXFxcXG4gICAgICAgICAgICBbJ+W/heWhq++8jOWIl+ihqOinhOWImVxcXFxcXFxcbuWQr+eUqHg15bCx5LiN55So5YaZ5LqGXFxcXFxcXFxuXFxcXFxcXFxu57un5om/5pWw57uEZO+8miBkLnB1c2goanNvbik7JywgJ2ZpbmRfcnVsZScsICcnXSxcXFxcbiAgICAgICAgXS5tYXAoW2EsIGIsIGMsIGVdID0+IHtcXFxcbiAgICAgICAgICAgIGlucHV0X3B1c2goYSwgYiwgYywgZSk7XFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfmm7/mjaInOlxcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IFN0cm9uZygn5Y+R546w6ZO+5o6l5pu/5o2iJyksXFxcXG4gICAgICAgICAgICBkZXNjOiAn6YCJ5aGrJyxcXFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcXFxuICAgICAgICAgICAgaW1nOiAnaGlrZXI6Ly9pbWFnZXMvaG9tZV9pY29uX2VkaXQnXFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICBbXFxcXG4gICAgICAgICAgICBbJ+WIhuexu+WQjeensCcsICdjbGFzc19uYW1lJywgJyddLFxcXFxuICAgICAgICAgICAgWyfliIbnsbvmm7/mjaInLCAnY2xhc3NfdXJsJywgJyddLFxcXFxuICAgICAgICAgICAgWyflnLDljLrlkI3np7AnLCAnYXJlYV9uYW1lJywgJyddLFxcXFxuICAgICAgICAgICAgWyflnLDljLrmm7/mjaInLCAnYXJlYV91cmwnLCAnJ10sXFxcXG4gICAgICAgICAgICBbJ+W5tOS7o+WQjeensCcsICd5ZWFyX25hbWUnLCAnJ10sXFxcXG4gICAgICAgICAgICBbJ+W5tOS7o+abv+aNoicsICd5ZWFyX3VybCcsICcnXSxcXFxcbiAgICAgICAgICAgIFsn5o6S5bqP5ZCN56ewJywgJ3NvcnRfbmFtZScsICcnXSxcXFxcbiAgICAgICAgICAgIFsn5o6S5bqP5pu/5o2iJywgJ3NvcnRfdXJsJywgJyddLFxcXFxuICAgICAgICBdLm1hcChbYSwgYiwgYywgZV0gPT4ge1xcXFxuICAgICAgICAgICAgaW5wdXRfcHVzaChhLCBiLCBjLCBlLCAxKTtcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+aJqeWxlSc6XFxcXG4gICAgICAgIHg1X2pzTG9hZGluZ0luamVjdCA9IGdldE15VmFyKCd4NV9qc0xvYWRpbmdJbmplY3QnLCAnMCcpID09ICcxJztcXFxcbiAgICAgICAgeDVfZmxvYXRWaWRlbyA9IGdldE15VmFyKCd4NV9mbG9hdFZpZGVvJywgJzAnKSA9PSAnMSc7XFxcXG4gICAgICAgIHg1X2F1dG9QbGF5ID0gZ2V0TXlWYXIoJ3g1X2F1dG9QbGF5JywgJzAnKSA9PSAnMSc7XFxcXG4gICAgICAgIHg1X3Nob3dQcm9ncmVzcyA9IGdldE15VmFyKCd4NV9zaG93UHJvZ3Jlc3MnLCAnMCcpID09ICcxJztcXFxcbiAgICAgICAgeDVfaW1nTG9uZ0NsaWNrID0gZ2V0TXlWYXIoJ3g1X2ltZ0xvbmdDbGljaycsICcwJykgPT0gJzEnO1xcXFxuICAgICAgICB4NV9kZXNjID0gZ2V0TXlWYXIoJ3g1X2Rlc2MnLCAnMCcpID09ICcxJztcXFxcblxcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IFN0cm9uZygn5rOo5YWlanMnKSxcXFxcbiAgICAgICAgICAgIGRlc2M6ICfpgInloasnLFxcXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxcXG4gICAgICAgICAgICBpbWc6ICdoaWtlcjovL2ltYWdlcy9ob21lX2ljb25fZWRpdCdcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogJzxiPue9keermeWKoOi9veS4reS5n+aJp+ihjDwvYj4nLFxcXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh4KSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3g1X2pzTG9hZGluZ0luamVjdCcsIHgpO1xcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcXFxuICAgICAgICAgICAgfSwgeDVfanNMb2FkaW5nSW5qZWN0ID8gJzAnIDogJzEnKSxcXFxcbiAgICAgICAgICAgIGltZzogJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vbWVzc3kvJyArICh4NV9qc0xvYWRpbmdJbmplY3QgPyA1NSA6IDYzKSArICcuc3ZnJyxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9pY29uJ1xcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgaW5wdXRfcHVzaChcXFxcXFxcIuWmguaenOWQr+eUqOS6huWcqOWKoOi9veS4reS5n+aJp+ihjO+8jGpz5Lya5omn6KGM5Lik5qyh77yM6ZyA6KaB6Ieq6KGM5aSE55CG6YeN5aSN5Yqg6L2955qE6Zeu6aKYXFxcXFxcXCIsIFxcXFxcXFwieDVfanNcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIiwge30sIDMpO1xcXFxuXFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmVfYmxhbmsnXFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IFN0cm9uZygn5oum5oiq6LWE5rqQJyksXFxcXG4gICAgICAgICAgICBkZXNjOiAn6YCJ5aGrJyxcXFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcXFxuICAgICAgICAgICAgaW1nOiAnaGlrZXI6Ly9pbWFnZXMvaG9tZV9pY29uX2VkaXQnXFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICBpbnB1dF9wdXNoKFxcXFxcXFwi6L+U5Zue5Li65pWw57uE77yM5pSv5oyBanPvvIzkuI3pnIDopoFyZXR1cm5cXFxcXFxcXG7kuI3miafooYzljLnphY3nmoTpk77mjqXvvIzorqnnvZHpobXliqDovb3mm7Tlv6vvvIzop4TliJnkuLrljIXlkKvljLnphY3vvIwq5Luj6KGo5Lu75oSP5a2X56ym77yI5LiN5piv5q2j5YiZ77yJ77yM5aaC5p6c5oOz5oum5oiq5LiN5YyF5ZCr55qE5Y+v5L2/55SoISHvvIzlpoIgWychIXRlc3QxISEkZG9tJ10g6KGo56S66ZO+5o6l5LiN5YyF5ZCrdGVzdDHlubbkuJTkuI3ljIXlkKvnvZHnq5nln5/lkI3pgqPlsLHmi6bmiKrjgIEhISR0b3Bkb23kuI3ljIXlkKvkuLvln5/lkI3lsLHmi6bmiKpcXFxcXFxcIiwgXFxcXFxcXCJ4NV9ibG9ja1J1bGVzXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpO1xcXFxuICAgICAgICBpbnB1dF9wdXNoKGDmj5Dkvpvlj5jph48gaW5wdXTvvIx4NVVybFxcXFxcXFxcbuivpeS7o+eggeS4jeaYr+WcqOe9kemhteS4reaJp+ihjOeahO+8jOayoeaciWZ5X2JyaWRnZV9hcHDjgIJcXFxcXFxcXG7mnInov5Tlm57lsLHmi6bmiKrpk77mjqXvvIzkuI3liqDovb3nvZHlnYDvvIzkvovvvJppZihpbnB1dC5pbmNsdWRlcygnL2FkLycpKSByZXR1cm4gdHJ1ZVxcXFxcXFxcbuWPr+S7pei3s+i9rOWIsOinhOWImeS6jOe6p+mhtemdou+8jOS+i++8mlxcXFxcXFxcbnJldHVybiAkLnRvU3RyaW5nKCh1cmwsIHg1VXJsKSA9PiB7XFxcXG4gICAgZmJhLm9wZW4oSlNPTi5zdHJpbmdpZnkoe1xcXFxuICAgICAgICB1cmw6IHg1VXJsICsgZW5jb2RlVVJJQ29tcG9uZW50KHVybClcXFxcbiAgICB9KSk7XFxcXG59LCBpbnB1dCwgeDVVcmwpYCwgXFxcXFxcXCJ4NV91cmxJbnRlcmNlcHRvclxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiLCB7fSwgNyk7XFxcXG4gICAgICAgIGlucHV0X3B1c2goXFxcXFxcXCLlrZDpobXpnaLop4TliJnvvIzkuIrpnaLnmoTop4TliJnlj6/ku6XpgJrov4d4NVVybOi3s+i9rOWIsOi/memHjOOAgmJhc2VVcmzmmK/ot7PovaznmoTpk77mjqVcXFxcXFxcIiwgXFxcXFxcXCJ4NV9wYWdlSG9tZVxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiLCB7fSwgMyk7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmVfYmxhbmsnXFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IFN0cm9uZygneDXorr7nva4nKSxcXFxcbiAgICAgICAgICAgIGRlc2M6ICfkuIDoiKzkuI3nlKjnrqEnLFxcXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxcXG4gICAgICAgICAgICBpbWc6ICdoaWtlcjovL2ltYWdlcy9ob21lX2ljb25fZWRpdCdcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIGlucHV0X3B1c2goXFxcXFxcXCJSZWZlcmVyXFxcXFxcXCIsIFxcXFxcXFwieDVfcmVmZXJlclxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiLCB7fSwgMSk7XFxcXG4gICAgICAgIGlucHV0X3B1c2goXFxcXFxcXCJVQe+8jE1PQklMRV9VQS9QQ19VQS/oh6rlrprkuYlcXFxcXFxcIiwgXFxcXFxcXCJ4NV91YVxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiLCB7fSwgMSk7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogJzxiPumVv+aMieWbvueJh+S4jeaYvuekuuiPnOWNlTwvYj4nLFxcXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh4KSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3g1X2ltZ0xvbmdDbGljaycsIHgpO1xcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcXFxuICAgICAgICAgICAgfSwgeDVfaW1nTG9uZ0NsaWNrID8gJzAnIDogJzEnKSxcXFxcbiAgICAgICAgICAgIGltZzogJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vbWVzc3kvJyArICh4NV9pbWdMb25nQ2xpY2sgPyA1NSA6IDYzKSArICcuc3ZnJyxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9pY29uJ1xcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiAnPGI+5LiN5pi+56S66L+b5bqm5p2hPC9iPicsXFxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBwdXRNeVZhcigneDVfc2hvd1Byb2dyZXNzJywgeCk7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxcXG4gICAgICAgICAgICB9LCB4NV9zaG93UHJvZ3Jlc3MgPyAnMCcgOiAnMScpLFxcXFxuICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly9oaWtlcmZhbnMuY29tL3R1Ymlhby9tZXNzeS8nICsgKHg1X3Nob3dQcm9ncmVzcyA/IDU1IDogNjMpICsgJy5zdmcnLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2ljb24nXFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6ICc8Yj7mgqzmta7ll4XmjqLmkq3mlL48L2I+JyxcXFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoeCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKCd4NV9mbG9hdFZpZGVvJywgeCk7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxcXG4gICAgICAgICAgICB9LCB4NV9mbG9hdFZpZGVvID8gJzAnIDogJzEnKSxcXFxcbiAgICAgICAgICAgIGltZzogJ2h0dHBzOi8vaGlrZXJmYW5zLmNvbS90dWJpYW8vbWVzc3kvJyArICh4NV9mbG9hdFZpZGVvID8gNTUgOiA2MykgKyAnLnN2ZycsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfaWNvbidcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogJzxiPumfs+inhumikeiHquWKqOaSreaUvjwvYj4nLFxcXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh4KSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3g1X2F1dG9QbGF5JywgeCk7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxcXG4gICAgICAgICAgICB9LCB4NV9hdXRvUGxheSA/ICcwJyA6ICcxJyksXFxcXG4gICAgICAgICAgICBpbWc6ICdodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL21lc3N5LycgKyAoeDVfYXV0b1BsYXkgPyA1NSA6IDYzKSArICcuc3ZnJyxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9pY29uJ1xcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZV9ibGFuaydcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogU3Ryb25nKCd4NeaJqeWxlScpLFxcXFxuICAgICAgICAgICAgZGVzYzogJ+mAieWhqycsXFxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcXFxcbiAgICAgICAgICAgIGltZzogJ2hpa2VyOi8vaW1hZ2VzL2hvbWVfaWNvbl9lZGl0J1xcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiAnPGI+6aaW6aG15LiN5pi+56S65pCc57Si5qGGPC9iPicsXFxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBwdXRNeVZhcigneDVfZGVzYycsIHgpO1xcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcXFxuICAgICAgICAgICAgfSwgeDVfZGVzYyA/ICcwJyA6ICcxJyksXFxcXG4gICAgICAgICAgICBpbWc6ICdodHRwczovL2hpa2VyZmFucy5jb20vdHViaWFvL21lc3N5LycgKyAoeDVfZGVzYyA/IDU1IDogNjMpICsgJy5zdmcnLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2ljb24nXFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICBpbnB1dF9wdXNoKFxcXFxcXFwidXJs77yM5Y+R546w6ZO+5o6l5ZKMeDXpk77mjqXlhrLnqoHml7bloavlhplcXFxcXFxcIiwgXFxcXFxcXCJ4NV91cmxcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIiwge30sIDEpO1xcXFxuICAgICAgICBpbnB1dF9wdXNoKFxcXFxcXFwiaG9tZV9qc++8jOS4jeaYvuekuuaQnOe0ouahhuaXtuaJp+ihjOOAglxcXFxcXFxcbue7p+aJv+aVsOe7hGTvvIzlhoXlrrnlj6rmnInop4TliJnliIbnsbvjgIJcXFxcXFxcXG7lnKjmraTln7rnoYDkuIroh6rlrprkuYnpppbpobXlkKfjgIJcXFxcXFxcIiwgXFxcXFxcXCJ4NV9ob21lXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpO1xcXFxuICAgICAgICBicmVhaztcXFxcbn1cXFxcbmQucHVzaCh7XFxcXG4gICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcXFxufSk7XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiBSaWNoKFN0cm9uZyhDb2xvcign5L+d5a2Y5bm26YCA5Ye6JykpKSxcXFxcbiAgICBkZXNjOiAn5LiK5qyh57yW6L6R77yaJyArICQuZGF0ZUZvcm1hdCh0aW1lLCAneXl5eS1NTS1kZCBoaDptbTpzcycpLFxcXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKSA9PiB7XFxcXG4gICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcXFxcXCJ0b29sP3J1bGU9dWNra+S6kVxcXFxcXFwiKS5zZXRFZGl0KCk7XFxcXG4gICAgfSksXFxcXG4gICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXFxcbiAgICBleHRyYToge1xcXFxuICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXFxcbiAgICB9XFxcXG59KTtcXFxcbnNldFJlc3VsdChkKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLinbfop4TliJnmlofku7ZcXFwiLFxcXCJwYXRoXFxcIjpcXFwiY29uZmlnc1xcXCIsXFxcInJ1bGVcXFwiOlxcXCJjb25zdCBydWxlUGF0aCA9IFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9UaG9tYXMvdWNra1J1bGVzLmpzb25cXFxcXFxcIjtcXFxcbmxldCBydWxlcztcXFxcblxcXFxuZnVuY3Rpb24gZ2V0SnNvbigpIHtcXFxcbiAgICBpZiAoQXJyYXkuaXNBcnJheShydWxlcykpIHtcXFxcbiAgICAgICAgcmV0dXJuIHJ1bGVzO1xcXFxuICAgIH1cXFxcbiAgICB0cnkge1xcXFxuICAgICAgICBydWxlcyA9IEpTT04ucGFyc2UocmVhZEZpbGUocnVsZVBhdGgpIHx8IFxcXFxcXFwiW11cXFxcXFxcIik7XFxcXG4gICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICBydWxlcyA9IFtdO1xcXFxuICAgIH1cXFxcbiAgICBpZiAocnVsZXMubGVuZ3RoID09IDApIGRlbGV0ZUZpbGUocnVsZVBhdGgpO1xcXFxuICAgIHJldHVybiBydWxlcztcXFxcbn1cXFxcblxcXFxuZnVuY3Rpb24gc2F2ZUpzb24oanNvbikge1xcXFxuICAgIHNhdmVGaWxlKHJ1bGVQYXRoLCBKU09OLnN0cmluZ2lmeShqc29uKSk7XFxcXG59XFxcXG5cXFxcbmZ1bmN0aW9uIGdldEpzb25fMShLZXksIFZhbHVlLCBUeXBlKSB7XFxcXG4gICAgcmV0dXJuIGdldEpzb24oKS5maWx0ZXIoZiA9PiBmW0tleV0gPT0gVmFsdWUgJiYgVHlwZSk7XFxcXG59XFxcXG5cXFxcbmZ1bmN0aW9uIGdldEpzb25fMihNLCBLZXkpIHtcXFxcbiAgICBpZiAoS2V5KVxcXFxuICAgICAgICByZXR1cm4gc2F2ZUpzb24oZ2V0SnNvbigpLm1hcChmID0+IHtcXFxcbiAgICAgICAgICAgIGlmIChtZDUoZi5ncm91cCArIGYudGl0bGUpID09IE0pIHtcXFxcbiAgICAgICAgICAgICAgICBmW0tleV0gPSBmW0tleV0gPT0gXFxcXFxcXCIxXFxcXFxcXCIgPyBcXFxcXFxcIjBcXFxcXFxcIiA6IFxcXFxcXFwiMVxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgcmV0dXJuIGY7XFxcXG4gICAgICAgIH0pKTtcXFxcbiAgICBlbHNlXFxcXG4gICAgICAgIHJldHVybiBnZXRKc29uKCkuZmlsdGVyKHYgPT4gbWQ1KHYuZ3JvdXAgKyB2LnRpdGxlKSAhPSBNKTtcXFxcbn1cXFxcblxcXFxuZnVuY3Rpb24gZ2V0R3JvdXBKc29uKFJ1bGVzLCBLZXksIFZhbHVlMSwgVmFsdWUyKSB7XFxcXG4gICAgcmV0dXJuIChSdWxlcyB8fCBnZXRKc29uKCkpLmZpbHRlcihmID0+IGZbS2V5XSA9PSBWYWx1ZTEgfHwgZltLZXldID09IFZhbHVlMiB8fCBWYWx1ZTEgPT0gVmFsdWUyKTtcXFxcbn1cXFxcblxcXFxuZnVuY3Rpb24gZ2V0R3JvdXBOYW1lcyhSdWxlcywgS2V5KSB7XFxcXG4gICAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldCgoUnVsZXMgfHwgZ2V0SnNvbigpKS5tYXAoZiA9PiBmW0tleV0pKSkuZmlsdGVyKHYgPT4gdik7XFxcXG59XFxcXG5cXFxcbmlmICghZmlsZUV4aXN0KHJ1bGVQYXRoKSkge1xcXFxuICAgIHJ1bGVzID0gW3tcXFxcbiAgICAgICAgZ3JvdXA6IFxcXFxcXFwi57u85ZCIXFxcXFxcXCIsXFxcXG4gICAgICAgIHNlYXJjaF9lbmFibGVkOiBcXFxcXFxcIjFcXFxcXFxcIixcXFxcbiAgICAgICAgZXhwbG9yZV9lbmFibGVkOiBcXFxcXFxcIjFcXFxcXFxcIixcXFxcblxcXFxuICAgICAgICB0aXRsZTogXFxcXFxcXCLogZrmkJxcXFxcXFxcIixcXFxcbiAgICAgICAgYXV0aG9yOiBcXFxcXFxcIlRob21hc+WWslxcXFxcXFwiLFxcXFxuICAgICAgICBpY29uOiBcXFxcXFxcImhpa2VyOi8vaW1hZ2VzL3NlYXJjaFxcXFxcXFwiLFxcXFxuICAgICAgICBwcmVSdWxlOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuXFxcXG4gICAgICAgIHNlYXJjaF91cmw6IFxcXFxcXFwiZnlwYWdlXFxcXFxcXCIsXFxcXG4gICAgICAgIHNlYXJjaF9ncm91cDogXFxcXFxcXCLlhajlhahcXFxcXFxcIixcXFxcbiAgICAgICAgc2VhcmNoRmluZDogXFxcXFxcXCIxXFxcXFxcXCIsXFxcXG5cXFxcbiAgICAgICAgZXhwbG9yZV9YNTogXFxcXFxcXCIwXFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCIsXFxcXG4gICAgICAgIGZpbmRfcnVsZTogYGQucHVzaCh7XFxcXG4gICAgdGl0bGU6ICc8Yj7ljoblj7LmkJzntKI8L2I+Jy5mb250Y29sb3IoXFxcXFxcXCIjZmY2NjAxXFxcXFxcXCIpLFxcXFxuICAgIHBpY191cmw6IFxcXFxcXFwiaGlrZXI6Ly9pbWFnZXMvaWNvbl9maW5kXFxcXFxcXCIsXFxcXG4gICAgY29sX3R5cGU6IFxcXFxcXFwiYXZhdGFyXFxcXFxcXCIsXFxcXG4gICAgdXJsOiAkKFxcXFxcXFwi56Gu5a6a5riF6Zmk5YWo6YOo5pCc57Si6K6w5b2V77yfXFxcXFxcXCIpLmNvbmZpcm0oKGlkKSA9PiB7XFxcXG4gICAgICAgIGNsZWFySXRlbShcXFxcXFxcInNlYXJjaEhpc3RvcnlcXFxcXFxcIik7XFxcXG4gICAgICAgIGRlbGV0ZUl0ZW1CeUNscyhpZCArIFxcXFxcXFwiOmtleVxcXFxcXFwiKTtcXFxcbiAgICAgICAgYWRkSXRlbUFmdGVyKGlkICsgXFxcXFxcXCI6c2VhcmNoSGlzdG9yeVxcXFxcXFwiLCB7XFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi4oCc4oCc4oCd4oCdXFxcXFxcXCIgKyBcXFxcXFxcIn5+fuS7gOS5iOmDveayoeacieWTpn5+flxcXFxcXFwiLmZvbnRjb2xvcihcXFxcXFxcIkdyYXlcXFxcXFxcIiksXFxcXG4gICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgIGNsczogaWQgKyBcXFxcXFxcIjprZXlcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfSwgaWQpLFxcXFxuICAgIGV4dHJhOiB7XFxcXG4gICAgICAgIGlkOiBpZCArIFxcXFxcXFwiOnNlYXJjaEhpc3RvcnlcXFxcXFxcIixcXFxcbiAgICB9XFxcXG59KTtcXFxcbmlmIChoaXN0b3J5Lmxlbmd0aCA9PT0gMCkgZC5wdXNoKHtcXFxcbiAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCIsXFxcXG4gICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIixcXFxcbiAgICB0aXRsZTogXFxcXFxcXCLigJzigJzigJ3igJ1cXFxcXFxcIiArIFxcXFxcXFwifn5+5LuA5LmI6YO95rKh5pyJ5ZOmfn5+XFxcXFxcXCIuZm9udGNvbG9yKFxcXFxcXFwiR3JheVxcXFxcXFwiKSxcXFxcbiAgICBleHRyYToge1xcXFxuICAgICAgICBjbHM6IGlkICsgXFxcXFxcXCI6a2V5XFxcXFxcXCIsXFxcXG4gICAgICAgIGxpbmVWaXNpYmxlOiBmYWxzZVxcXFxuICAgIH1cXFxcbn0pO1xcXFxuZWxzZSBoaXN0b3J5Lm1hcCgoa2V5LCBpKSA9PiB7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IGtleSxcXFxcbiAgICAgICAgdXJsOiAkKFxcXFxcXFwiI25vTG9hZGluZyNcXFxcXFxcIikubGF6eVJ1bGUoKGlkLCBrZXkpID0+IHtcXFxcbiAgICAgICAgICAgIGxldCBleHRyYSA9IGZpbmRJdGVtKGlkICsgXFxcXFxcXCI6c2VhcmNoXFxcXFxcXCIpLmV4dHJhO1xcXFxuICAgICAgICAgICAgZXh0cmEuZGVmYXVsdFZhbHVlID0ga2V5O1xcXFxuICAgICAgICAgICAgdXBkYXRlSXRlbSh7XFxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IGV4dHJhXFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIjtcXFxcbiAgICAgICAgfSwgaWQsIGtleSksXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImZsZXhfYnV0dG9uXFxcXFxcXCIsXFxcXG4gICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICBpZDogaWQgKyBcXFxcXFxcIjprZXk6XFxcXFxcXCIgKyBrZXksXFxcXG4gICAgICAgICAgICBjbHM6IGlkICsgXFxcXFxcXCI6a2V5XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBsb25nQ2xpY2s6IFt7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5Yig6Zmk5YWz6ZSu6K+NOlxcXFxcXFwiICsga2V5LFxcXFxuICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChpZCwga2V5KSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCBoaXN0b3J5ID0gc3RvcmFnZTAuZ2V0SXRlbShcXFxcXFxcInNlYXJjaEhpc3RvcnlcXFxcXFxcIiwgW10pO1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgaWkgPSBoaXN0b3J5LmluZGV4T2Yoa2V5KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgaGlzdG9yeS5zcGxpY2UoaWksIDEpO1xcXFxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXFxcXFwic2VhcmNoSGlzdG9yeVxcXFxcXFwiLCBoaXN0b3J5KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlSXRlbShpZCArIFxcXFxcXFwiOmtleTpcXFxcXFxcIiArIGtleSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmIChoaXN0b3J5Lmxlbmd0aCA9PT0gMCkgYWRkSXRlbUFmdGVyKGlkICsgXFxcXFxcXCI6c2VhcmNoSGlzdG9yeVxcXFxcXFwiLCB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi4oCc4oCc4oCd4oCdXFxcXFxcXCIgKyBcXFxcXFxcIn5+fuS7gOS5iOmDveayoeacieWTpn5+flxcXFxcXFwiLmZvbnRjb2xvcihcXFxcXFxcIkdyYXlcXFxcXFxcIiksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsczogaWQgKyBcXFxcXFxcIjprZXlcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgfSwgaWQsIGtleSlcXFxcbiAgICAgICAgICAgIH1dXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KTtcXFxcbn0pO2AsXFxcXG5cXFxcbiAgICAgICAgY2xhc3NfbmFtZTogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgY2xhc3NfdXJsOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICBhcmVhX25hbWU6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgIGFyZWFfdXJsOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICB5ZWFyX25hbWU6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgIHllYXJfdXJsOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICBzb3J0X25hbWU6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgIHNvcnRfdXJsOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICB0aW1lOiAwXFxcXG4gICAgfV07XFxcXG4gICAgc2F2ZUpzb24ocnVsZXMpO1xcXFxufVxcXFxuJC5leHBvcnRzID0ge1xcXFxuICAgIGdldEpzb24sXFxcXG4gICAgc2F2ZUpzb24sXFxcXG4gICAgZ2V0SnNvbl8xLFxcXFxuICAgIGdldEpzb25fMixcXFxcbiAgICBydWxlUGF0aCxcXFxcbiAgICBnZXRHcm91cE5hbWVzLFxcXFxuICAgIGdldEdyb3VwSnNvblxcXFxufTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLinb7ot7PovazkuoznuqdcXFwiLFxcXCJwYXRoXFxcIjpcXFwicnVsZUhvbWVcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9saWI/cnVsZT11Y2tr5LqRJywge30pKS5ydWxlKTtcXFxcbmxldCBydWxlR3JvdXAgPSBnZXRQYXJhbSgncnVsZUdyb3VwJywgJ+e7vOWQiCcpO1xcXFxubGV0IHJ1bGVOYW1lID0gZ2V0UGFyYW0oJ3J1bGVOYW1lJywgJycpO1xcXFxubGV0IGJhc2VVcmwgPSBkZWNvZGVVUklDb21wb25lbnQoZ2V0UGFyYW0oJ2Jhc2VVcmwnKSk7XFxcXG5sZXQgcnVsZXMgPSAkLnJlcXVpcmUoXFxcXFxcXCJjb25maWdzP3J1bGU9dWNra+S6kVxcXFxcXFwiKS5nZXRHcm91cEpzb24oZmFsc2UsIFxcXFxcXFwiZ3JvdXBcXFxcXFxcIiwgcnVsZUdyb3VwLCBcXFxcXFxcIue7vOWQiFxcXFxcXFwiKTtcXFxcbmxldCBydWxlID0gXyA9IHJ1bGVzLmZpbmQoZiA9PiBmLnRpdGxlID09IHJ1bGVOYW1lKTtcXFxcbmlmIChydWxlICE9IC0xKSB7XFxcXG4gICAgaWYgKE1ZX1BBUkFNUy5ob21lKSB7IC8vIOS7jummlumhtei3s+i9rOeahFxcXFxuICAgICAgICBkID0gW107XFxcXG4gICAgICAgIGJhc2VVcmwgPSBnZXRSdWxlQmFzZVVybChydWxlLnVybCk7XFxcXG4gICAgICAgIGlmIChfUEFHRSkge1xcXFxuICAgICAgICAgICAgZ2V0UnVsZUdyb3VwKDAsIHJ1bGUuc2VhcmNoICE9IFxcXFxcXFwiXFxcXFxcXCIgJiYgcnVsZS5zZWFyY2hGaW5kICE9IFxcXFxcXFwiXFxcXFxcXCIpO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGV2YWwocnVsZS5wcmVSdWxlKTtcXFxcbiAgICAgICAgaWYgKF9TT1UgJiYgKF9QQUdFIHx8IHJ1bGUuc2VhcmNoX3VybC5pbmNsdWRlcyhcXFxcXFxcImZ5cGFnZVxcXFxcXFwiKSkpIHtcXFxcbiAgICAgICAgICAgIHNldEhpc3RvcnlLZXl3b3JkKCk7XFxcXG4gICAgICAgICAgICBiYXNlVXJsID0gZ2V0UnVsZUJhc2VVcmwocnVsZS5zZWFyY2hfdXJsLCBrZXl3b3JkKTtcXFxcbiAgICAgICAgICAgIGxldCBkZCA9IGQ7XFxcXG4gICAgICAgICAgICBzZWFyY2hmaW5kID0gbmV3IEZ1bmN0aW9uKFxcXFxcXFwicnVsZVxcXFxcXFwiLCBcXFxcXFxcImJhc2VVcmxcXFxcXFxcIiwgXFxcXFxcXCJrZXl3b3JkXFxcXFxcXCIsIFxcXFxcXFwicGFnZVxcXFxcXFwiLCBydWxlLnNlYXJjaEZpbmQpO1xcXFxuICAgICAgICAgICAgbGlzdCA9IHNlYXJjaGZpbmQocnVsZSwgYmFzZVVybCwga2V5d29yZCwgcGFnZSk7XFxcXG4gICAgICAgICAgICBkID0gZGQuY29uY2F0KGxpc3QpO1xcXFxuICAgICAgICB9IGVsc2UgaWYgKCFfU09VICYmIChfUEFHRSB8fCBydWxlLnVybC5pbmNsdWRlcyhcXFxcXFxcImZ5cGFnZVxcXFxcXFwiKSkpIHtcXFxcbiAgICAgICAgICAgIGV2YWwocnVsZS5maW5kX3J1bGUpO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIF9QQUdFID8gc2V0UHJlUmVzdWx0KGQpIDogc2V0UmVzdWx0KGQpO1xcXFxuICAgICAgICBkZWxldGVJdGVtQnlDbHMoJ2xvYWRpbmdfZ2lmJyk7XFxcXG4gICAgfSBlbHNlIHsgLy8g5LuOeDXot7PovaznmoRcXFxcbiAgICAgICAgZXZhbChydWxlLnByZVJ1bGUpO1xcXFxuICAgICAgICBldmFsKHJ1bGUueDVfcGFnZUhvbWUpO1xcXFxuICAgIH1cXFxcbn0gZWxzZSB7XFxcXG4gICAgc2V0UmVzdWx0KFt7XFxcXG4gICAgICAgIHRpdGxlOiBDb2xvcignPGgxIHN0eWxlPVxcXFxcXFwidGV4dC1hbGlnbjpjZW50ZXI7XFxcXFxcXCI+5Zu+5Lmm6aaGUHJvPC9oMT4nLCAnI0ZFQkQ2RicpLmJpZygpLFxcXFxuICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJyaWNoX3RleHRcXFxcXFxcIlxcXFxuICAgIH1dKTtcXFxcbn1cXFwifV1cIixcInByb3h5XCI6XCJcIn0iLCJ0aXRsZSI6IuinhOWImee8lui+kSJ9
Add Comment
Please, Sign In to add comment