Advertisement
xiaomianao666

邀您一起看:HG影视-三体

Jan 19th, 2023
831
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥HG影视-三体@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImdtdE1vZGlmaWVkXCI6MCxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJqczpcXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9jaGFwdGVyJywge30pKS5ydWxlKTtcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuaOpeWPo+aVsOaNrjIwMjIvMTAvMTJcIixcInBhdGhcIjpcIlJlc0NvZGVcIixcInJ1bGVcIjpcIuS8mOi0qEDmmpblhYnlvbHop4Y9aHR0cHM6Ly9hcHAuYmwyMTAuY29tL2FwaS5waHAvdjEudm9kI+aaluWFieW9seinhlxcbuS8mOi0qEDlpYjpnZ7ov7c9aHR0cHM6Ly9hcHAubmV0ZmxpeG1pLmNvbS9hcGkucGhwL3YxLnZvZCPlpYjpnZ7ov7flvbHop4ZcXG7kvJjotKhA576O5Ymn6IyDPWh0dHA6Ly90dHptei5uZXQvYXBpLnBocC92MS52b2Qj576O5Ymn6IyDXFxu5LyY6LSoQOmbtuWIu+W9semZoj1odHRwczovL3lzLmxpbmcwMC5jbi9hcGkucGhwL3YxLnZvZCPpm7bliLvlvbHpmaJcXG7kvJjotKhA5q615Y+L5b2x6KeGPWh0dHBzOi8vc2hhbmdqaWh1b2tlLmNvbS9hcGkucGhwL3R2LnZvZCPmrrXlj4vlvbHop4ZcXG7kvJjotKhA54us5pKt56S+PWh0dHA6Ly8zNXlzLmNjL2FwaS5waHAvdjEudm9kI+eLrOaSreekvlxcbuS8mOi0qEDliJvmhI/lvbHop4Y9aHR0cHM6Ly93d3cuMzBkaWFuLmNuL2FwaS5waHAvdjEudm9kI+WIm+aEj+W9seinhlxcbuS8mOi0qEDll7flkZzop4bpopE9aHR0cDovL3d3dy5jeDk5OTk5LmNuL2x2ZG91X2FwaS5waHAvdjEudm9kI+WXt+WRnOinhumikVxcbuS8mOi0qEDniLHpurvoirHlvbHop4Y9aHR0cDovL3YuamlleGkud29yay9xaW5nZG91amlla291LnBocC92MS52b2Qj54ix6bq76Iqx5b2x6KeGXFxu5LyY6LSoQOeIsemFt+W9seinhj1odHRwczovL3d3dy56aGFubGFuZ2J1LmNvbS9ydWlmZW5nbGJfYXBpLnBocC92MS52b2Qj54ix6YW35b2x6KeGXFxu5LyY6LSoQEhH5b2x6KeGPWh0dHA6Ly9iYnEuMTAwNi50ay9hcGkucGhwL3YxLnZvZCNIR+W9seinhlxcbuS8mOi0qEBGN+mrmOa4hT1odHRwOi8vYmMuaGFva2FuanUxLmNjL2x2ZG91X2FwaS5waHAvdjEudm9kI0Y36auY5riFXFxu5pmu6YCaQOi/veWJp+W9semZoj1odHRwOi8vODIuMTU3Ljk4LjEyOS9sdmRvdV9hcGkucGhwL3YxLnZvZCPov73liaflvbHpmaJcXG7mma7pgJpA6L+95Ymn5ZCnPWh0dHA6Ly8xMTcuNTAuMTYzLjQ1Ojg4L2x2ZG91X2FwaS5waHAvdjEudm9kI+i/veWJp+WQp1xcbuaZrumAmkDov73liadUVj1odHRwOi8vMTExLjIyOS4xMjAuMTgwOjg4L2x2ZG91X2FwaS5waHAvdjIudm9kI+i/veWJp1RWXFxu5pmu6YCaQOa4lOa4lOW9seinhj1odHRwOi8vbHVvYm8ueXVnZW55ZS5zaXRlL2FwaS5waHAvdjEudm9kI+a4lOa4lOW9seinhlxcbuaZrumAmkDkvZnnlJ/lvbHop4Y9aHR0cDovL3l1LmN1aWNhbnlzLmNuL2x2ZG91X2FwaS5waHAvdjEudm9kI+S9meeUn+W9seinhlxcbuaZrumAmkDlvbHop4bnjKs9aHR0cHM6Ly92aXAud3NjeXVuLmNvbS9hcGkucGhwL3YxLnZvZCPlvbHop4bnjKtcXG7mma7pgJpA5b2x6KeG5aSn5YWoPWh0dHBzOi8veGMueGl4aTJ5eS54eXovbW9nYWlfYXBpLnBocC92MS52b2Qj5b2x6KeG5aSn5YWoSERcXG7mma7pgJpA5ZGA5ZOp5Yqo5ryrPWh0dHBzOi8vYXBwLnlhbGl5YWxpLmNjL2FwaS5waHAvdjEudm9kI+WRgOWTqeWKqOa8q1xcbuaZrumAmkDlvbHlupM9aHR0cHM6Ly95aW5na3VkeS5jb20vbHZkb3VfYXBpLnBocC92MS52b2Qj5b2x5bqTXFxu5pmu6YCaQOaciOWEv+W9seinhj1odHRwczovL3l1ZTUyLnh5ei9hcGkucGhwL3YxLnZvZCNcXG7mma7pgJpA5pif5a6/5ryrPWh0dHA6Ly8zLnhpbmd4aXVtYW4uY29tL21vZ2FpX2FwaS5waHAvdjEudm9kI+aYn+Wuv+a8q1xcbuaZrumAmkDlsI/puJ/liqjmvKs9aHR0cDovL3h5ZG0uYmFpY2FpLmJ1enovbW9nYWlfYXBpLnBocC92MS52b2Qj5bCP6bif5Yqo5ryrXFxu5pmu6YCaQOeGiueMq+inhumikT1odHRwOi8vYW5lZ2guY29tL2x2ZG91X2FwaS5waHAvdjEudm9kI+eGiueMq+inhumikVxcbuaZrumAmkDnhornjKvliqjmvKs9aHR0cDovL2RvbmdtYW4uazhhYS5jb20vbW9nYWlfYXBpLnBocC92MS52b2Qj54aK54yr5Yqo5ryrXFxu5pmu6YCaQOS4h+iDveW9semZoj1odHRwOi8vYXBwLndudm9kLm5ldC9sdmRvdV9hcGkucGhwL3YxLnZvZCPkuIfog73lvbHpmaJcXG7mma7pgJpA6JyX54mb5Yqo5ryrPWh0dHA6Ly93b25pdWRtLndvbml1LmN5b3U6MjAwMDAvbW9nYWlfYXBpLnBocC92MS52b2Qj6JyX54mb5Yqo5ryrXFxu5pmu6YCaQOaIkeeIsei3n+WJpz1odHRwczovL3d3dy5nZW5tb3YuY29tL21vZ2FpX2FwaS5waHAvdjEudm9kI+aIkeeIsei3n+WJp1xcbuaZrumAmkDmt5jliafnpL49aHR0cHM6Ly9hcHAuc2h1aGFpOTkuY29tL2FwaS5waHAvdjEudm9kI+a3mOWJp+ekvlxcbuaZrumAmkDnvqTpkavlvbHop4Y9aHR0cDovL3d3dy5xdW54aW55cy5jb20vYXBpLnBocC92MS52b2Qj576k6ZGr5b2x6KeGXFxu5pmu6YCaQOm+meeMq+i/veWJpz1odHRwczovL2xiLnlibnhjeC5jb20vYXBpLnBocC92MS52b2QjXFxu5pmu6YCaQOeci+WJp+WQpz1odHRwOi8vYXBwLmlzaGVuNTIwLmNvbS9hcGkucGhwL3YxLnZvZCPnnIvliaflkKdcXG7mma7pgJpA5a+S5p6r6KeG6aKRPWh0dHBzOi8vdmlwLnNoZW55dW53bC5jbi9tb2dhaV9hcGkucGhwL3YxLnZvZCPlr5Lmnqvop4bpopFcXG7mma7pgJpA6Im+5oCd5b2x6KeGPWh0dHBzOi8vd3d3LmFpdGVlLmNjL2FwaS5waHAvdjEudm9kI1xcbuaZrumAmkDpmL/ph4zlvbHop4Y9aHR0cDovL2FsaXlzLmNuOjkwL2FwaS5waHAvdjEudm9kI+mYv+mHjOW9seinhlxcbuaZrumAmkDniLHnlLXlvbE9aHR0cHM6Ly93d3cuaWRpYW55aW5nLmNvbS5jbi9tb2dhaV9hcGkucGhwL3YxLnZvZCPniLHnlLXlvbFcXG7mma7pgJpAT0vlvbHop4Y9aHR0cDovLzEyMy5vazAwLnh5ei9hcGkucGhwL3YxLnZvZCNPS+W9seinhlxcbuaZrumAmkBNWOW9seinhj1odHRwOi8vbWtrLmdvdGthLnRvcC9hcGkucGhwL3YxLnZvZCNcXG7mma7pgJpANjnnvo7liac9aHR0cHM6Ly93d3cuNjltai5jb20vYXBpLnBocC92MS52b2QjXFxu56We6amsQOW9seinhumYgT1odHRwOi8vMjE2Ljk4LjEwLjg1L2FwaS5waHAvaXB0di92b2QvI+W9seinhumYgVxcbuelnumprEDlpKnnqbpUVj1odHRwOi8vdHYudGt5cy50di9hcGkucGhwL2lwdHYvdm9kLyPlpKnnqbpUVlxcbuelnumprEDoipLov4VUVj1odHRwOi8vd3d3LmhkeWFuZ3R2LmNvbS9hcGkucGhwL2lwdHYvdm9kLyPoipLov4VUVlxcbuelnumprEDnjKvlkqpUVj1odHRwOi8vMTA2LjEyLjExMy45MDo2NTY1L2FwaS5waHAvaXB0di92b2QvI+eMq+WSqlRWXFxu56We6amsQOm7kem+meW9seinhj1odHRwOi8vdmlwLmppLWRpbmctaGUuc2l0ZS9hcGkucGhwL2lwdHYvdm9kLyPpu5HpvpnlvbHop4ZcXG7npZ7pqaxA6LS15a6+5b2x6ZmiPWh0dHBzOi8vdmlwZHl0di5jb20vYXBpLnBocC9pcHR2L3ZvZC8jXFxu56We6amsQOeIseilv+ilv1RWPWh0dHA6Ly90djIuYWl4aXhpLnZpcC9hcGkucGhwL2lwdHYvdm9kLyPniLHopb/opb9UVlxcbuelnumprEBDVuW9seinhj1odHRwOi8vd3d3LmNjY3Z2di50b3AvYXBpLnBocC9pcHR2L3ZvZC8jQ1blvbHop4ZcXG7npZ7pqaxAMuWPt+W4gT1odHRwOi8vcGhvZWJlLmNmL2FwaS5waHAvaXB0di92b2QvIzLlj7fluIHlvbHpmaJcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuaQnOe0olwiLFwicGF0aFwiOlwic2VhclwiLFwicnVsZVwiOlwidmFyIHJlcyA9IHt9O1xcbnZhciBpdGVtcyA9IFtdO1xcbi8v6K6+572u5pCc57Si57q/56iLXFxudmFyIHNzbW9kZSA9IEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vZmlsZXMvcnVsZXMveHlxL2FwcG1zZXQuanNvbicsIHt9KSkuc3Ntb2RlO1xcbnZhciBrZXkgPSBNWV9VUkwuc3BsaXQoJyQkJCcpWzFdO1xcbi8vc2V0RXJyb3IobGUpO1xcbmlmIChzc21vZGUgPT0gJzAnKSB7XFxuICAgIHNldFBhZ2VUaXRsZShrZXkgKyAnIOeahOaQnOe0oue7k+aenCcpXFxufTtcXG50cnkge1xcbiAgICBpZiAoZ2V0SXRlbSgnY2xtb2RlJywgJzEnKSA9PSAxKSB7XFxuICAgICAgICB2YXIgb25lID0gZmV0Y2goJ2hpa2VyOi8vZmlsZXMvcnVsZXMveHlxL0FQUE1vdmllLnR4dCcpO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgdmFyIG9uZSA9IGZldGNoQ2FjaGUoJycsIDI0KTtcXG4gICAgfVxcbiAgICAvL2xvZyh0d28gKydcXFxcbicrIG9uZSk7XFxuICAgIGlmICgvXFxcXD1odHRwLy50ZXN0KG9uZSkpIHtcXG4gICAgICAgIHZhciByZW1maWxlID0gb25lO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgbG9nKCflvZPliY3liqDovb3nmoTmmK/lhoXnva7mlbDmja4nKTtcXG4gICAgICAgIHZhciByZW1maWxlID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL1Jlc0NvZGUnLCB7fSkpLnJ1bGU7XFxuICAgIH1cXG59IGNhdGNoIChlKSB7XFxuICAgIGxvZygn5b2T5YmN5Yqg6L2955qE5piv5YaF572u5pWw5o2uJyk7XFxuICAgIHZhciByZW1maWxlID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL1Jlc0NvZGUnLCB7fSkpLnJ1bGU7XFxufTtcXG5pZiAoL1xcXFw9aHR0cC8udGVzdChyZW1maWxlKSkge1xcbiAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9jb252ZXInLCB7fSkpLnJ1bGUpO1xcbiAgICByZW1maWxlID0gSlNPTi5zdHJpbmdpZnkobmV3ZmlsZSk7XFxufVxcbnZhciBodG1sID0gSlNPTi5wYXJzZShyZW1maWxlKTtcXG5cXG52YXIgZGxpc3QgPSBodG1sLmRhdGE7XFxuXFxuaWYgKHNzbW9kZSA9PSAnMScgfHwgTVlfVFlQRSA9PSAnaG9tZScpIHtcXG4gICAgZm9yICh2YXIgbCA9IDA7IGwgPCBkbGlzdC5sZW5ndGg7IGwrKykge1xcbiAgICAgICAgdmFyIGxpc3QgPSBkbGlzdFtsXS5saXN0O1xcbiAgICAgICAgdmFyIHR5dGl0ID0gZGxpc3RbbF0udGl0bGU7XFxuXFxuICAgICAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogTVlfVFlQRSA9PSBcXFwiaG9tZVxcXCIgPyBcXFwi54K55Ye75p+l55yLIFxcXCIgKyB0eXRpdCArIFxcXCIg5YiG57G7IOKAnOKAnFxcXCIgKyBrZXkgKyBcXFwi4oCd4oCdIOeahOiBmuaQnOe7k+aenFxcXCIgOiBcXFwi54K55Ye75p+l55yLIFxcXCIgKyB0eXRpdCArIFxcXCIg5YiG57G7IFxcXCIgKyBrZXkgKyBcXFwiIOeahOiBmuaQnOe7k+aenFxcXCIsXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3NzMlxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGxpc3Q6IGxpc3QsXFxuICAgICAgICAgICAgICAgIHR5dGl0OiB0eXRpdCxcXG4gICAgICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eSQkJCcgKyBrZXkgKyAnJCQkZnlwYWdlJCQkJ1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcblxcbiAgICB9IC8vZm9yIGlcXG59OyAvL2VuZCBtb2RlIDFcXG5cXG5pZiAoc3Ntb2RlID09ICcwJyB8fCBNWV9UWVBFID09ICdob21lJykge1xcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRsaXN0Lmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICB2YXIgbGlzdCA9IGRsaXN0W2ldLmxpc3Q7XFxuICAgICAgICB2YXIgdHl0aXQgPSBkbGlzdFtpXS50aXRsZTtcXG5cXG4gICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBNWV9UWVBFID09IFxcXCJob21lXFxcIiA/IFxcXCIg6YCJ5oup5LiA5LiqIFxcXCIgKyBkbGlzdFtpXS50aXRsZSArIFxcXCIg6aG555uu5p+l55yLIOKAnOKAnFxcXCIgKyBrZXkgKyBcXFwi4oCd4oCdIOeahOaQnOe0oue7k+aenFxcXCIgOiBcXFwiIOmAieaLqeS4gOS4qiBcXFwiICsgZGxpc3RbaV0udGl0bGUgKyBcXFwiIOmhueebruafpeeciyBcXFwiICsga2V5ICsgXFxcIiDnmoTmkJzntKLnu5PmnpxcXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF8xJ1xcbiAgICAgICAgfSk7XFxuXFxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxpc3QubGVuZ3RoOyBqKyspIHtcXG4gICAgICAgICAgICB2YXIgbGluayA9IGxpc3Rbal0udXJsO1xcbiAgICAgICAgICAgIHZhciBsaXRpdCA9IGxpc3Rbal0ubXVybDtcXG4gICAgICAgICAgICBpZiAoL1xcXFwvdm9kXFxcXC8vLnRlc3QobGluaykpIHtcXG4gICAgICAgICAgICAgICAgaWYgKC8zN1xcXFwuMTYxfDIxNlxcXFwuOTh8cGhvZWJlfGhmeXM4fGZlaWZhbjEyfHR2enl8aGR5YW5ndHZ8dGt5c3x0ZWdvdXlzLy50ZXN0KGxpbmspKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgaG11cmwgPSBsaW5rICsgJz9hYz1saXN0JnptPScgKyBrZXkgKyAnJnBhZ2U9ZnlwYWdlJztcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBobXVybCA9IGxpbmsgKyAnP2FjPWxpc3Qmd2Q9JyArIGtleSArICcmcGFnZT1meXBhZ2UnO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgaWYgKC9kaWppYXhpYS8udGVzdChsaW5rKSkge1xcbiAgICAgICAgICAgICAgICAgICAgbGluayA9ICdodHRwOi8vd3d3LmRpamlheGlhLmNvbS9hcGkucGhwL2FwcC8nXFxuICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgIGlmIChsaW5rLmluZGV4T2YoJ2FwaS5waHAvYXBwLycpICE9IC0xKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgaG11cmwgPSBsaW5rICsgJ3NlYXJjaD9wZz1meXBhZ2UmdGV4dD0nICsga2V5ICsgJyZ0b2tlbj0nO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxpbmsuaW5kZXhPZigneGdhcHAucGhwL3YxLycpICE9IC0xKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgaG11cmwgPSBsaW5rICsgJ3NlYXJjaD9wZz1meXBhZ2UmdGV4dD0nICsga2V5O1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9pb3Blbnl1bi8udGVzdChsaW5rKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBobXVybCA9IGxpbmsgKyAnL2xpc3Q/cGFnZT1meXBhZ2UmbGltaXQ9MTAmd2Q9JyArIGtleTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhtdXJsID0gbGluayArICc/cGFnZT1meXBhZ2UmbGltaXQ9MTAmd2Q9JyArIGtleTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGxpc3Rbal0udGl0bGUsXFxuICAgICAgICAgICAgICAgIGltZzogbGlzdFtqXS5pbWcsXFxuICAgICAgICAgICAgICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eSN4IycgKyBobXVybCArICcjeCMnICsgbGluayArICcjeCMnICsgbGl0aXQgKyAnI3gjJyArIGtleSArICcjeCMnKS5ydWxlKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL3NlYXJlcmonKTtcXG4gICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnaWNvbl9yb3VuZF9zbWFsbF80J1xcbiAgICAgICAgICAgICAgICAvL2NvbF90eXBlOiAndGV4dF8zJ1xcbiAgICAgICAgICAgICAgICAvL2xpbms6bGluayxcXG4gICAgICAgICAgICAgICAgLy90eXBlOiBpXFxuICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICB9IC8vZm9yIGpcXG5cXG5cXG4gICAgfSAvL2ZvciBpXFxuXFxufSAvL2VuZCBtb2RlIDBcXG5cXG5cXG5yZXMuZGF0YSA9IGl0ZW1zO1xcbnNldEhvbWVSZXN1bHQocmVzKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIkFQUOWIhuexu+WIl+ihqFwiLFwicGF0aFwiOlwiYXBwbGlzdGRhdGFcIixcInJ1bGVcIjpcImlmIChodG1sLmxpc3QpIHtcXG4gICAgdmFyIGxpc3QgPSBodG1sLmxpc3Q7XFxufSBlbHNlIGlmIChodG1sLmRhdGEgJiYgaHRtbC5kYXRhLmxpc3QpIHtcXG4gICAgdmFyIGxpc3QgPSBodG1sLmRhdGEubGlzdDtcXG59IGVsc2Uge1xcbiAgICB2YXIgbGlzdCA9IGh0bWwuZGF0YTtcXG59XFxuLy9sb2cobGlzdCk7XFxuZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XFxuICAgIHZhciB0aXRsZSA9IGxpc3RbaV0udm9kX25hbWU7XFxuICAgIHZhciBpbWcgPSBsaXN0W2ldLnZvZF9waWM7XFxuICAgIHZhciB1cmwgPSBsaXN0W2ldLnZvZF9pZDtcXG4gICAgdmFyIGRlc2MgPSBsaXN0W2ldLnZvZF9yZW1hcmtzO1xcbiAgICB2YXIgbm93RGF0ZSA9IG5ldyBEYXRlKCk7XFxuICAgIHZhciBtb250aCA9IG5vd0RhdGUuZ2V0TW9udGgoKSArIDEgPCAxMCA/IFxcXCIwXFxcIiArIChub3dEYXRlLmdldE1vbnRoKCkgKyAxKSA6IG5vd0RhdGUuZ2V0TW9udGgoKSArIDE7XFxuICAgIHZhciBkYXkgPSBub3dEYXRlLmdldERhdGUoKSA8IDEwID8gXFxcIjBcXFwiICsgbm93RGF0ZS5nZXREYXRlKCkgOiBub3dEYXRlLmdldERhdGUoKTtcXG4gICAgdmFyIGRhdGVTdHIgPSBtb250aCArICcnICsgZGF5O1xcbiAgICBpZiAoaHRtbC5saXN0KSB7XFxuICAgICAgICB2YXIgbGluayA9IG11cmwgKyAndmlkZW9fZGV0YWlsP2lkPScgKyB1cmwgKyAnJnRva2VuPTtnZXQ7dXRmLTg7e1VzZXItQWdlbnRARGFydC8yLjE0IChkYXJ0OmlvKX0nO1xcbiAgICB9IGVsc2UgaWYgKGh0bWwuZGF0YSAmJiBodG1sLmRhdGEubGlzdCkge1xcbiAgICAgICAgaWYgKG11cmwuc2VhcmNoKC9tb2dhaV9hcGkvKSAhPSAtMSkge1xcbiAgICAgICAgICAgIHZhciBsaW5rID0gbXVybCArICcvZGV0YWlsP2tleT0nICsgZGF0ZVN0ciArICcmdm9kX2lkPScgKyB1cmwgKyAnJnJlbF9saW1pdD0xMDtnZXQ7dXRmLTg7e1VzZXItQWdlbnRARGFydC8yLjE0IChkYXJ0OmlvKX0nO1xcbiAgICAgICAgfSBlbHNlIGlmIChtdXJsLmluY2x1ZGVzKCdncmVsaWdodGluZycpKSB7XFxuICAgICAgICAgICAgdmFyIGxpbmsgPSBtdXJsICsgJy8/aWRzPScgKyB1cmwgKyAnJnJlbF9saW1pdD0xMDtnZXQ7dXRmLTg7e1VzZXItQWdlbnRARGFydC8yLjE0IChkYXJ0OmlvKX0nO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB2YXIgbGluayA9IG11cmwgKyAnL2RldGFpbD9rZXk9JyArIGRhdGVTdHIgKyAnJnZvZF9pZD0nICsgdXJsICsgJyZyZWxfbGltaXQ9MTA7Z2V0O3V0Zi04O3tVc2VyLUFnZW50QG9raHR0cC80LjEuMH0nO1xcbiAgICAgICAgfVxcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgdmFyIGxpbmsgPSBtdXJsICsgJ3ZpZGVvX2RldGFpbD9pZD0nICsgdXJsICsgJyZ0b2tlbj07Z2V0O3V0Zi04O3tVc2VyLUFnZW50QERhcnQvMi4xNCAoZGFydDppbyl9JztcXG4gICAgfTtcXG4gICAgaWYgKC9mYW50dWFuLy50ZXN0KG11cmwpKSB7XFxuICAgICAgICB2YXIgbGluayA9ICdodHRwczovL2ZhbnR1YW4ud2tmaWxlLmNvbS9hcGkucGhwL2FwcC92aWRlb19kZXRhaWw/aWQ9JyArIHVybCArICcmdG9rZW49O2dldDt1dGYtODt7VXNlci1BZ2VudEBEYXJ0LzIuMTQgKGRhcnQ6aW8pfSc7XFxuICAgIH0gZWxzZSBpZiAoL2lvcGVueXVuLy50ZXN0KG11cmwpKSB7XFxuICAgICAgICB2YXIgbGluayA9IG11cmwgKyAnL2RldGFpbElEP3ZvZF9pZD0nICsgdXJsICsgJyZyZWxfbGltaXQ9MTA7Z2V0O3V0Zi04O3tVc2VyLUFnZW50QERhcnQvMi4xNCAoZGFydDppbyl9JztcXG4gICAgfSBlbHNlIGlmICgvZGlqaWF4aWEvLnRlc3QobXVybCkpIHtcXG4gICAgICAgIHZhciBsaW5rID0gJ2h0dHA6Ly93d3cuZGlqaWF4aWEuY29tL2FwaS5waHAvYXBwL3ZpZGVvX2RldGFpbD9pZD0nICsgdXJsO1xcbiAgICB9XFxuICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgcGljX3VybDogaW1nICsgJ0BSZWZlcmVyPScsXFxuICAgICAgICB1cmw6ICQobGluaykucnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgdmFyIHJlcyA9IHt9O1xcbiAgICAgICAgICAgIHZhciBpdGVtcyA9IFtdO1xcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJycsXFxuICAgICAgICAgICAgICAgIGRlc2M6ICcyNTUmJmZsb2F0JyxcXG4gICAgICAgICAgICAgICAgdXJsOiAnJyxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICd4NV93ZWJ2aWV3X3NpbmdsZSdcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICByZWZyZXNoWDVXZWJWaWV3KCcnKTtcXG4gICAgICAgICAgICB2YXIgaHRtbCA9IEpTT04ucGFyc2UoZ2V0UmVzQ29kZSgpKTtcXG4gICAgICAgICAgICB2YXIgbXl1cmwgPSBNWV9VUkwubWF0Y2goLyhbXFxcXFNdKj86XFxcXC9cXFxcL1tcXFxcU10qPylcXFxcLy8pWzFdO1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2FwcG1vdmxpc3QnLCB7fSkpLnJ1bGUpO1xcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgICAgICAgICAgcmVzLmRhdGEgPSBpdGVtcztcXG4gICAgICAgICAgICBzZXRIb21lUmVzdWx0KHJlcyk7XFxuICAgICAgICB9KSxcXG4gICAgICAgIGRlc2M6IGRlc2MsXFxuICAgICAgICBjb2xfdHlwZTogJ21vdmllXzNfbWFycXVlZSdcXG4gICAgfSk7XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiVFbliJfooajop6PmnpBcIixcInBhdGhcIjpcInR2bGlzdGRhdGFcIixcInJ1bGVcIjpcInZhciBsaXN0ID0gaHRtbC5kYXRhO1xcbmZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xcbiAgICB2YXIgdGl0bGUgPSBsaXN0W2ldLnRpdGxlO1xcbiAgICB2YXIgaW1nID0gbGlzdFtpXS5waWM7XFxuICAgIHZhciB1cmwgPSBsaXN0W2ldLm5leHRsaW5rO1xcbiAgICB2YXIgZGVzYyA9IGxpc3RbaV0uc3RhdGU7XFxuICAgIHVybCA9IHVybC5zdGFydHNXaXRoKCdodHRwJykgPyB1cmwgOiBtdXJsICsgJz9hYz1kZXRhaWwmaWRzPScgKyB1cmw7XFxuICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgcGljX3VybDogaW1nICsgJ0BSZWZlcmVyPScsXFxuICAgICAgICB1cmw6ICQodXJsKS5ydWxlKCgpID0+IHtcXG4gICAgICAgICAgICB2YXIgcmVzID0ge307XFxuICAgICAgICAgICAgdmFyIGl0ZW1zID0gW107XFxuICAgICAgICAgICAgdmFyIGh0bWwgPSBKU09OLnBhcnNlKGdldFJlc0NvZGUoKSk7XFxuICAgICAgICAgICAgdmFyIG15dXJsID0gTVlfVVJMLm1hdGNoKC8oW1xcXFxTXSo/OlxcXFwvXFxcXC9bXFxcXFNdKj8pXFxcXC8vKVsxXTtcXG4gICAgICAgICAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICcnLFxcbiAgICAgICAgICAgICAgICBkZXNjOiAnMjU1JiZmbG9hdCcsXFxuICAgICAgICAgICAgICAgIHVybDogJycsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAneDVfd2Vidmlld19zaW5nbGUnXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgcmVmcmVzaFg1V2ViVmlldygnJyk7XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS90dm1vdmxpc3QnLCB7fSkpLnJ1bGUpO1xcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgICAgICAgICAgcmVzLmRhdGEgPSBpdGVtcztcXG4gICAgICAgICAgICBzZXRIb21lUmVzdWx0KHJlcyk7XFxuICAgICAgICB9KSxcXG4gICAgICAgIGRlc2M6IGRlc2MsXFxuICAgICAgICBjb2xfdHlwZTogJ21vdmllXzNfbWFycXVlZSdcXG4gICAgfSk7XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiQVBQ566A5LuL5LiO6YCJ6ZuGXCIsXCJwYXRoXCI6XCJhcHBtb3ZsaXN0XCIsXCJydWxlXCI6XCJpZiAoaHRtbC5kYXRhLnZvZF91cmxfd2l0aF9wbGF5ZXIpIHtcXG4gICAgdmFyIGNvbnRzID0gaHRtbC5kYXRhLnZvZF91cmxfd2l0aF9wbGF5ZXI7XFxuICAgIGlmIChjb250cy5sZW5ndGggPCAxKSB7XFxuICAgICAgICBjb250cyA9IGh0bWwuZGF0YS52b2RfcGxheV91cmwuc3BsaXQoJyQkJCcpO1xcbiAgICAgICAgdmFyIHRhYnMgPSBodG1sLmRhdGEudm9kX3BsYXlfZnJvbS5zcGxpdCgnJCQkJyk7XFxuICAgIH1cXG59IGVsc2UgaWYgKGh0bWwuZGF0YS52b2RfaW5mbyAmJiBodG1sLmRhdGEudm9kX2luZm8udm9kX3VybF93aXRoX3BsYXllcikge1xcbiAgICB2YXIgY29udHMgPSBodG1sLmRhdGEudm9kX2luZm8udm9kX3VybF93aXRoX3BsYXllcjtcXG4gICAgaWYgKGNvbnRzLmxlbmd0aCA8IDEpIHtcXG4gICAgICAgIGNvbnRzID0gaHRtbC5kYXRhLnZvZF9pbmZvLnZvZF9wbGF5X3VybC5zcGxpdCgnJCQkJyk7XFxuICAgICAgICB2YXIgdGFicyA9IGh0bWwuZGF0YS52b2RfaW5mby52b2RfcGxheV9mcm9tLnNwbGl0KCckJCQnKTtcXG4gICAgfVxcbn0gZWxzZSBpZiAoaHRtbC5kYXRhLmxpc3QpIHtcXG4gICAgdmFyIGNvbnRzID0gaHRtbC5kYXRhLmxpc3RbMF0udm9kX3BsYXlfdXJsLnNwbGl0KCckJCQnKTtcXG4gICAgdmFyIHRhYnMgPSBodG1sLmRhdGEubGlzdFswXS52b2RfcGxheV9mcm9tLnNwbGl0KCckJCQnKTtcXG59IGVsc2UgaWYgKGh0bWwuZGF0YS5sZW5ndGggPT0gMSkge1xcbiAgICB2YXIgY29udHMgPSBodG1sLmRhdGFbMF0udm9kX3BsYXlfbGlzdDtcXG4gICAgLy9sb2coY29udHMpO1xcbiAgICBpZiAoY29udHMubGVuZ3RoIDwgMSkge1xcbiAgICAgICAgY29udHMgPSBodG1sLmRhdGFbMF0udm9kX3BsYXlfdXJsLnNwbGl0KCckJCQnKTtcXG4gICAgICAgIHZhciB0YWJzID0gaHRtbC5kYXRhWzBdLnZvZF9wbGF5X2Zyb20uc3BsaXQoJyQkJCcpO1xcbiAgICB9XFxufSBlbHNlIHtcXG4gICAgdmFyIGNvbnRzID0gaHRtbC5kYXRhLnZvZF9wbGF5X2xpc3Q7XFxuICAgIGlmIChjb250cy5sZW5ndGggPCAxKSB7XFxuICAgICAgICBjb250cyA9IGh0bWwuZGF0YS52b2RfcGxheV91cmwuc3BsaXQoJyQkJCcpO1xcbiAgICAgICAgdmFyIHRhYnMgPSBodG1sLmRhdGEudm9kX3BsYXlfZnJvbS5zcGxpdCgnJCQkJyk7XFxuICAgIH1cXG59O1xcblxcbi8vbG9nKGh0bWwpO1xcblxcbmlmIChodG1sLmRhdGEubGVuZ3RoID09IDEpIHtcXG4gICAgdmFyIHRodW1iID0gaHRtbC5kYXRhWzBdLnZvZF9waWM7XFxuICAgIHZhciBkZXMgPSBodG1sLmRhdGFbMF0udm9kX2NvbnRlbnQ7XFxufSBlbHNlIGlmIChodG1sLmRhdGEubGlzdCkge1xcbiAgICB2YXIgdGh1bWIgPSBodG1sLmRhdGEubGlzdFswXS52b2RfcGljO1xcbiAgICB2YXIgZGVzID0gaHRtbC5kYXRhLmxpc3RbMF0udm9kX2NvbnRlbnQ7XFxufSBlbHNlIHtcXG4gICAgdmFyIHRodW1iID0gaHRtbC5kYXRhLnZvZF9pbmZvID8gaHRtbC5kYXRhLnZvZF9pbmZvLnZvZF9waWMgOiBodG1sLmRhdGEudm9kX3BpYztcXG4gICAgdmFyIGRlcyA9IGh0bWwuZGF0YS52b2RfaW5mbyA/IGh0bWwuZGF0YS52b2RfaW5mby52b2RfY29udGVudCA6IGh0bWwuZGF0YS52b2RfY29udGVudDtcXG59O1xcbml0ZW1zLnB1c2goe1xcbiAgICB0aXRsZTogJ+WJp+aDheeugOS7i++8micsXFxuICAgIGRlc2M6IGRlcyxcXG4gICAgcGljX3VybDogdGh1bWIsXFxuICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eSNub1JlY29yZEhpc3RvcnkjJykucnVsZSgoZGVzKSA9PiB7XFxuICAgICAgICBzZXRSZXN1bHQoW3tcXG4gICAgICAgICAgICB0aXRsZTogZGVzLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbG9uZ190ZXh0J1xcbiAgICAgICAgfV0pO1xcbiAgICB9LCBkZXMpLFxcbiAgICBjb2xfdHlwZTogJ21vdmllXzFfdmVydGljYWxfcGljJ1xcbn0pO1xcbmV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2RucGx1Z2luJywge30pKS5ydWxlKTtcXG5cXG5pdGVtcy5wdXNoKHtcXG4gICAgdGl0bGU6ICfigJzigJzmjpLluo/igJ3igJ0nLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5QGxhenlSdWxlPS5qczpwdXRNeVZhcignYXBwbWFwcHNvcnQnLCBnZXRNeVZhcignYXBwbWFwcHNvcnQnLCcxJyk9PScxJz8nMCc6JzEnKTtyZWZyZXNoUGFnZShmYWxzZSk7J3RvYXN0Oi8v5YiH5o2i5oiQ5Yqf77yBJ1xcXCIsXFxuICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG59KTtcXG52YXIgdGl0bGUgPSBNWV9VUkw7XFxuZm9yICh2YXIgayA9IDA7IGsgPCBjb250cy5sZW5ndGg7IGsrKykge1xcbiAgICAvL3NldEVycm9yKGxpc3QubGVuZ3RoKTtcXG4gICAgaWYgKGh0bWwuZGF0YS52b2RfdXJsX3dpdGhfcGxheWVyKSB7XFxuICAgICAgICB2YXIgcHRhYiA9IGNvbnRzW2tdLmNvZGUgPyBjb250c1trXS5jb2RlIDogdGFic1trXTtcXG4gICAgfSBlbHNlIGlmIChodG1sLmRhdGEudm9kX2luZm8gJiYgaHRtbC5kYXRhLnZvZF9pbmZvLnZvZF91cmxfd2l0aF9wbGF5ZXIpIHtcXG4gICAgICAgIHZhciBwdGFiID0gY29udHNba10uY29kZSA/IGNvbnRzW2tdLmNvZGUgOiB0YWJzW2tdO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgdmFyIHB0YWIgPSBjb250c1trXS5mcm9tID8gY29udHNba10uZnJvbSA6IHRhYnNba107XFxuICAgIH1cXG4gICAgaXRlbXMucHVzaCh7XFxuICAgICAgICB0aXRsZTogKGdldE15VmFyKHRpdGxlLCAnMCcpID09IGsgPyAn8J+RifCfj7snIDogJycpICsgcHRhYixcXG4gICAgICAgIHVybDogYGhpa2VyOi8vZW1wdHlAbGF6eVJ1bGU9LmpzOnB1dE15VmFyKCdgICsgdGl0bGUgKyBcXFwiJywgJ1xcXCIgKyBrICsgYCcpO3JlZnJlc2hQYWdlKCk7J3RvYXN0Oi8v5YiH5o2i5oiQ5Yqf77yBJ2AsXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgIH0pO1xcblxcbn1cXG5cXG5cXG5cXG52YXIgamllayA9ICcnO1xcbi8vZm9yICh2YXIgaSA9IDA7IGkgPCBjb250cy5sZW5ndGg7IGkrKykge1xcbmlmIChnZXRNeVZhcignYXBwbWFwcHNvcnQnLCAnMScpID09ICcxJykge1xcbiAgICBpZiAoY29udHNbZ2V0TXlWYXIodGl0bGUsICcwJyldLnVybHMpIHtcXG4gICAgICAgIHZhciBsaXN0ID0gY29udHNbZ2V0TXlWYXIodGl0bGUsICcwJyldLnVybHM7XFxuICAgIH0gZWxzZSBpZiAoY29udHNbZ2V0TXlWYXIodGl0bGUsICcwJyldLnVybCkge1xcbiAgICAgICAgdmFyIGxpc3QgPSBjb250c1tnZXRNeVZhcih0aXRsZSwgJzAnKV0udXJsLnNwbGl0KFxcXCIjXFxcIik7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICB2YXIgbGlzdCA9IGNvbnRzW2dldE15VmFyKHRpdGxlLCAnMCcpXS5zcGxpdChcXFwiI1xcXCIpO1xcbiAgICB9O1xcbn0gZWxzZSB7XFxuICAgIGlmIChjb250c1tnZXRNeVZhcih0aXRsZSwgJzAnKV0udXJscykge1xcbiAgICAgICAgdmFyIGxpc3QgPSBjb250c1tnZXRNeVZhcih0aXRsZSwgJzAnKV0udXJscy5yZXZlcnNlKCk7XFxuICAgIH0gZWxzZSBpZiAoY29udHNbZ2V0TXlWYXIodGl0bGUsICcwJyldLnVybCkge1xcbiAgICAgICAgdmFyIGxpc3QgPSBjb250c1tnZXRNeVZhcih0aXRsZSwgJzAnKV0udXJsLnNwbGl0KFxcXCIjXFxcIikucmV2ZXJzZSgpO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgdmFyIGxpc3QgPSBjb250c1tnZXRNeVZhcih0aXRsZSwgJzAnKV0uc3BsaXQoXFxcIiNcXFwiKS5yZXZlcnNlKCk7XFxuICAgIH1cXG59O1xcbi8vc2V0RXJyb3IobGlzdC5sZW5ndGgpO1xcbmlmIChodG1sLmRhdGEudm9kX3VybF93aXRoX3BsYXllcikge1xcbiAgICB2YXIgcHRhYiA9IGNvbnRzW2dldE15VmFyKHRpdGxlLCAnMCcpXS5jb2RlID8gY29udHNbZ2V0TXlWYXIodGl0bGUsICcwJyldLmNvZGUgOiB0YWJzW2dldE15VmFyKHRpdGxlLCAnMCcpXTtcXG59IGVsc2UgaWYgKGh0bWwuZGF0YS52b2RfaW5mbyAmJiBodG1sLmRhdGEudm9kX2luZm8udm9kX3VybF93aXRoX3BsYXllcikge1xcbiAgICB2YXIgcHRhYiA9IGNvbnRzW2dldE15VmFyKHRpdGxlLCAnMCcpXS5jb2RlID8gY29udHNbZ2V0TXlWYXIodGl0bGUsICcwJyldLmNvZGUgOiB0YWJzW2dldE15VmFyKHRpdGxlLCAnMCcpXTtcXG59IGVsc2Uge1xcbiAgICB2YXIgcHRhYiA9IGNvbnRzW2dldE15VmFyKHRpdGxlLCAnMCcpXS5mcm9tID8gY29udHNbZ2V0TXlWYXIodGl0bGUsICcwJyldLmZyb20gOiB0YWJzW2dldE15VmFyKHRpdGxlLCAnMCcpXTtcXG59XFxuLypcXG4gICAgaXRlbXMucHVzaCh7XFxuICAgICAgICB0aXRsZTogcHRhYiArICcg8J+UlycgKyBbaSArIDFdICsgJy8nICsgW2NvbnRzLmxlbmd0aF0gKyBcXFwi4oCc4oCc4oaT4oaR4oCd4oCdXFxcIixcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlAbGF6eVJ1bGU9LmpzOnB1dFZhcignYXBwbWFwcHNvcnQnLCBnZXRWYXIoJ2FwcG1hcHBzb3J0JywnMScpPT0nMSc/JzAnOicxJyk7cmVmcmVzaFBhZ2UoZmFsc2UpOyd0b2FzdDovL+WIh+aNouaIkOWKn++8gSdcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICB9KTsqL1xcbnZhciB2bGluayA9IHt9O1xcbmZvciAodmFyIGogPSAwOyBqIDwgbGlzdC5sZW5ndGg7IGorKykge1xcbiAgICBpZiAoY29udHNbZ2V0TXlWYXIodGl0bGUsICcwJyldLnVybHMpIHtcXG4gICAgICAgIHZhciB2bGluayA9IGxpc3Rbal0udXJsLnJlcGxhY2UoLyM0NTYjL2csICdodHRwJykucmVwbGFjZSgvIzEyMyMvZywgJy4nKS5yZXBsYWNlKC8jNzg5Iy9nLCAnOicpO1xcbiAgICAgICAgdmFyIHZ0aXRsZSA9IGxpc3Rbal0ubmFtZTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIC8vdmFyIHZsaW5rID0gbGlzdFtqXS5zcGxpdChcXFwiJFxcXCIpWzFdO1xcbiAgICAgICAgaWYgKGxpc3Rbal0uc3BsaXQoJyQnKVsxXSAhPSBudWxsKSB7XFxuICAgICAgICAgICAgdmxpbmsgPSBsaXN0W2pdLnNwbGl0KCckJylbMV07XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHZsaW5rID0gbGlzdFtqXS5zcGxpdCgnJCcpWzBdO1xcbiAgICAgICAgfVxcbiAgICAgICAgLy92YXIgdGl0bGUgPSBsaXN0W2pdLnNwbGl0KFxcXCIkXFxcIilbMF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcbiAgICAgICAgdmFyIHZ0aXRsZSA9IChsaXN0W2pdLnNwbGl0KCckJylbMF0uaW5jbHVkZXMoJ2h0dHAnKSA/IFtqICsgMV0gOiBsaXN0W2pdLnNwbGl0KCckJylbMF0pO1xcbiAgICB9XFxuICAgIHRyeSB7XFxuICAgICAgICBpZiAoaHRtbC5kYXRhLnZvZF91cmxfd2l0aF9wbGF5ZXIpIHtcXG4gICAgICAgICAgICB2YXIgamllayA9IGNvbnRzW2dldE15VmFyKHRpdGxlLCAnMCcpXS5wYXJzZV9hcGk7XFxuICAgICAgICB9IGVsc2UgaWYgKGh0bWwuZGF0YS52b2RfaW5mbyAmJiBodG1sLmRhdGEudm9kX2luZm8udm9kX3VybF93aXRoX3BsYXllcikge1xcbiAgICAgICAgICAgIHZhciBqaWVrID0gY29udHNbZ2V0TXlWYXIodGl0bGUsICcwJyldLnBhcnNlX2FwaTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgaWYgKGNvbnRzW2dldE15VmFyKHRpdGxlLCAnMCcpXS5wbGF5ZXJfaW5mby5wYXJzZTIgJiYgKGNvbnRzW2dldE15VmFyKHRpdGxlLCAnMCcpXS5wbGF5ZXJfaW5mby5wYXJzZTIpLmluZGV4T2YoXFxcIj1cXFwiKSAhPSAtMSkge1xcbiAgICAgICAgICAgICAgICB2YXIgamllayA9IChjb250c1tnZXRNeVZhcih0aXRsZSwgJzAnKV0ucGxheWVyX2luZm8ucGFyc2UyKS5yZXBsYWNlKC9cXFxcLlxcXFwuL2csIFxcXCIuXFxcIikuc3BsaXQoJywnKVswXS5yZXBsYWNlKCdqc29uYnMnLCAnJyk7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb250c1tnZXRNeVZhcih0aXRsZSwgJzAnKV0ucGxheWVyX2luZm8ucGFyc2UgJiYgKGNvbnRzW2dldE15VmFyKHRpdGxlLCAnMCcpXS5wbGF5ZXJfaW5mby5wYXJzZSkuaW5kZXhPZihcXFwiPVxcXCIpICE9IC0xKSB7XFxuICAgICAgICAgICAgICAgIHZhciBqaWVrID0gKGNvbnRzW2dldE15VmFyKHRpdGxlLCAnMCcpXS5wbGF5ZXJfaW5mby5wYXJzZSkucmVwbGFjZSgvXFxcXC5cXFxcLi9nLCBcXFwiLlxcXCIpLnNwbGl0KCcsJylbMF07XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdmFyIGppZWsgPSBcXFwiXFxcIjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgLy9zZXRFcnJvcihqaWVrKTsgICAgICAgICAgICAgICAgXFxuICAgICAgICB9XFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgIC8vamlla+aLvOaOpVxcbiAgICBpZiAoamllayAhPSAnJyAmJiBqaWVrICE9IG51bGwpIHtcXG4gICAgICAgIGlmIChqaWVrLnN1YnN0cmluZygwLCA0KSA9PSAnaHR0cCcpIHtcXG4gICAgICAgICAgICBqaWVrID0gamllaztcXG4gICAgICAgIH0gZWxzZSBpZiAoamllay5zdWJzdHJpbmcoMCwgMikgPT0gJ1xcXFwvXFxcXC8nKSB7XFxuICAgICAgICAgICAgamllayA9ICdodHRwczonICsgamllaztcXG4gICAgICAgIH1cXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGppZWsgPSBcXFwiXFxcIjtcXG4gICAgfVxcbiAgICAvL+WvueWkseaViOaOpeWPo+i/m+ihjOabv+aNolxcbiAgICBpZiAoL2Nva2Vtdi8udGVzdChteXVybCkgJiYgL2Nva2VxaWV8eGlufDkwbW0vLnRlc3QocHRhYikpIHtcXG4gICAgICAgIGppZWsgPSAnaHR0cHM6Ly9wbGF5ZXIuOTBtbS5tZS9wbGF5LnBocD91cmw9JztcXG4gICAgfSBlbHNlIGlmICgvXFxcXC5tM3U4XFxcXC50dnx3d3dcXFxcLngtblxcXFwuY2MvLnRlc3QoamllaykpIHtcXG4gICAgICAgIGppZWsgPSAnaHR0cHM6Ly9qeC5tM3U4LnR2L2ppZXhpLz91cmw9JztcXG4gICAgfSBlbHNlIGlmICgvY2p0NTIxLy50ZXN0KG15dXJsKSkge1xcbiAgICAgICAgamllayA9IGNvbnRzW2dldE15VmFyKHRpdGxlLCAnMCcpXS5wbGF5ZXJfaW5mby5wYXJzZTtcXG4gICAgfSBlbHNlIGlmIChqaWVrLmluZGV4T2YoJ2pwZy5ob3UubHUvam0vemEvaW5kZXgucGhwJykgIT0gLTEpIHtcXG4gICAgICAgIGppZWsgPSAnaHR0cDovL3ZpcC5tZW5neC52aXAvaG9tZS9hcGk/dHlwZT15cyZ1aWQ9MzI0OTY5NiZrZXk9YWVmcXJ0dXd4eUVGSEtOT1FZJnVybD0nO1xcbiAgICB9IGVsc2UgaWYgKHB0YWIgPT0gJ3JlbnJlbm1pJyAmJiBqaWVrLnNlYXJjaCgvamhkeXcvKSAhPSAtMSkge1xcbiAgICAgICAgamllayA9ICdodHRwOi8vd3d3LjEwODBrYW4uY2MvamlleGkvcnJtaS5waHA/dXJsPSc7XFxuICAgIH0gZWxzZSBpZiAocHRhYiA9PSAnZnFmaWxtJyAmJiBqaWVrLnNlYXJjaCgvamhkeXcvKSAhPSAtMSkge1xcbiAgICAgICAgamllayA9ICdodHRwOi8vd3d3LjEwODBrYW4uY2MvamlleGkvZnEucGhwP3VybD0nO1xcbiAgICB9IGVsc2UgaWYgKHB0YWIgPT0gJ3Jyc3AnICYmIGppZWsuc2VhcmNoKC9qaGR5dy8pICE9IC0xKSB7XFxuICAgICAgICBqaWVrID0gJ2h0dHA6Ly93d3cuMTA4MGthbi5jYy9qaWV4aS9yci5waHA/dXJsPSc7XFxuICAgIH0gZWxzZSBpZiAoL21pYW9wYXJ0eS8udGVzdChwdGFiKSAmJiBteXVybC5zZWFyY2goL2Z1bjRrLykgIT0gLTEpIHtcXG4gICAgICAgIGppZWsgPSAnaHR0cHM6Ly93d3cuZnVuNGsuY29tL2FwbGF5ZXIvP3VybD0nO1xcbiAgICB9IGVsc2UgaWYgKC9qaHl1blxcXFwucGhwLy50ZXN0KGppZWspKSB7XFxuICAgICAgICBqaWVrID0gamllay5yZXBsYWNlKCdodHRwOi8vc3ZpcC5qaHl1bi5qeC5jbjoxMjM0L2poeXVuLnBocD91cmw9JywgJ2h0dHBzOi8vYXBpLmpoZHl3LnZpcC8/dXJsPScpO1xcbiAgICB9IGVsc2UgaWYgKC93d3dcXFxcLmFpbGVtb1xcXFwubWUvLnRlc3QoamllaykpIHtcXG4gICAgICAgIGppZWsgPSBqaWVrLnJlcGxhY2UoJ2FpbGVtbycsICdhaWxlbW9vJyk7XFxuICAgIH07XFxuICAgIC8v5omT5Y2w5o6l5Y+jXFxuICAgIHRyeSB7XFxuICAgICAgICBpZiAoaiA9PSAnMCcpIHtcXG4gICAgICAgICAgICBpZiAoaHRtbC5kYXRhLnZvZF91cmxfd2l0aF9wbGF5ZXIpIHtcXG4gICAgICAgICAgICAgICAgbG9nKCdcXFxcbue6v+i3r++8micgKyBwdGFiICsgJ1xcXFxu6KeG6aKR77yaJyArIHZsaW5rICsgJ1xcXFxuJyArICfop6PmnpDmjqXlj6PvvJpcXFxcbicgKyBqaWVrKTtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGh0bWwuZGF0YS52b2RfaW5mbyAmJiBodG1sLmRhdGEudm9kX2luZm8udm9kX3VybF93aXRoX3BsYXllcikge1xcbiAgICAgICAgICAgICAgICBsb2coJ1xcXFxu57q/6Lev77yaJyArIHB0YWIgKyAnXFxcXG7op4bpopHvvJonICsgdmxpbmsgKyAnXFxcXG4nICsgJ+ino+aekOaOpeWPo++8mlxcXFxuJyArIGppZWspO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGlmIChjb250c1tnZXRNeVZhcih0aXRsZSwgJzAnKV0ucGxheWVyX2luZm8ucGFyc2UyICYmIChjb250c1tnZXRNeVZhcih0aXRsZSwgJzAnKV0ucGxheWVyX2luZm8ucGFyc2UyKS5pbmRleE9mKFxcXCI9XFxcIikgIT0gLTEpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxvZygnXFxcXG7nur/ot6/vvJonICsgcHRhYiArICdcXFxcbuinhumike+8micgKyB2bGluayArICdcXFxcbicgKyAn6Kej5p6Q5o6l5Y+j77yaXFxcXG4nICsgY29udHNbZ2V0TXlWYXIodGl0bGUsICcwJyldLnBsYXllcl9pbmZvLnBhcnNlMi5yZXBsYWNlKC9cXFxcLlxcXFwuL2csIFxcXCIuXFxcIikucmVwbGFjZSgvXFxcXCwvZywgXFxcIlxcXFxuXFxcXG5cXFwiKSk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udHNbZ2V0TXlWYXIodGl0bGUsICcwJyldLnBsYXllcl9pbmZvLnBhcnNlICYmIChjb250c1tnZXRNeVZhcih0aXRsZSwgJzAnKV0ucGxheWVyX2luZm8ucGFyc2UpLmluZGV4T2YoXFxcIj1cXFwiKSAhPSAtMSkge1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKCdcXFxcbue6v+i3r++8micgKyBwdGFiICsgJ1xcXFxu6KeG6aKR77yaJyArIHZsaW5rICsgJ1xcXFxuJyArICfop6PmnpDmjqXlj6PvvJpcXFxcbicgKyBjb250c1tnZXRNeVZhcih0aXRsZSwgJzAnKV0ucGxheWVyX2luZm8ucGFyc2UucmVwbGFjZSgvXFxcXC5cXFxcLi9nLCBcXFwiLlxcXCIpLnJlcGxhY2UoL1xcXFwsL2csIFxcXCJcXFxcblxcXFxuXFxcIikpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKCdcXFxcbue6v+i3r++8micgKyBwdGFiICsgJ1xcXFxu6KeG6aKR77yaJyArIHZsaW5rICsgJ1xcXFxuJyArICfop6PmnpDmjqXlj6PvvJpcXFxcbicgKyBqaWVrKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAvL3NldEVycm9yKGppZWspOyAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgIC8v5aOw5piO6ZO+5o6lXFxuICAgIHZhciBsaW5rID0gamllayArIHZsaW5rO1xcbiAgICAvKlxcbiAgICBpZiAoL1xcXFwubTN1OHxcXFxcLm1wNHxvYmpcXFxcL3Rvcy8udGVzdCh2bGluaykgJiYgL2h0dHAvLnRlc3QodmxpbmspKSB7XFxuICAgICAgICBsaW5rID0gdmxpbms7XFxuICAgIH1cXG4gICAgKi9cXG4gICAgLy9sb2cobGluayk7XFxuXFxuICAgIHRyeSB7XFxuICAgICAgICB2dGl0bGUgPSB2dGl0bGUubWF0Y2goLyjnrKx8XFxcXGR8LSkqKOmbhnzor5185pyfKS9nKSA/IHZ0aXRsZS5yZXBsYWNlKC/nrKx86ZuGfOivnXzmnJ8vZywgJycpIDogdnRpdGxlLnJlcGxhY2UoL15cXFxccyovLCBcXFwiXFxcIik7XFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxuXFxuICAgIGlmIChsaXN0Lmxlbmd0aCA8PSA0KSB7XFxuICAgICAgICB2YXIgY2x0ID0gJ3RleHRfMic7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICB2YXIgY2x0ID0gaXNOYU4odnRpdGxlKSA/ICdmbGV4X2J1dHRvbicgOiAndGV4dF81J1xcbiAgICB9O1xcbiAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiB2dGl0bGUsXFxuICAgICAgICB1cmw6ICQoJ2hpa2VyOi8vZW1wdHknKS5sYXp5UnVsZSgocHRhYiwgbGluaywgbXl1cmwsIHZsaW5rKSA9PiB7XFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG9wZW51cmwocmVzdXJsKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdXJsLm1hdGNoKC95b3VrdXxtZ3R2fGl4aWd1YXxxcS5jb218cWl5aXxtaWd1fGJpbGliaWxpfHNvaHV8cHB0dnxsZXwxOTA1LmNvbS8pICYmIHJlc3VybC5zZWFyY2goL2h0bWx8YmlsaWJpbGl8aXhpZ3VhLykgIT0gLTEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2h0bWznvZHpobXosIPnlKjmlq3mj5Lop6PmnpBcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5EbiA9IEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vZmlsZXMvcnVsZXMveHlxL2FwcG1zZXQuanNvbicsIHt9KSkuZW5EbjtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5EbiA9PSAnMScpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCfosIPnlKjmlq3mj5Lop6PmnpBodG1sJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoXFxcInZhciBjb25maWcgPVxcXCIgKyBmZXRjaChcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb25cXFwiKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoZmV0Y2goY29uZmlnLmNqKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBheXRtUGFyc2UocmVzdXJsKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdXJsXFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoL1xcXFwubTN1OHxcXFxcLm1wNHxvYmpcXFxcL3Rvc3xuZXRlYXNlXFxcXC5jb20vLnRlc3QocmVzdXJsKSAmJiAvaHR0cC8udGVzdChyZXN1cmwpICYmICEvXFxcXC5odG1sfFxcXFwubTN1OFxcXFwudHYvLnRlc3QocmVzdXJsKSAmJiAhL1xcXFw9aHR0cC8udGVzdChyZXN1cmwpICYmIHB0YWIgIT0gJ2R1b2R1b3p5Jykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvd2tmaWxlLy50ZXN0KHJlc3VybCkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VybCArICc7e1JlZmVyZXJAaHR0cHM6Ly9mYW50dWFuLndrZmlsZS5jb20vfSdcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gL1xcXFw9aHQvLnRlc3QocmVzdXJsKSA/IHJlc3VybC5zdWJzdHJpbmcocmVzdXJsLmluZGV4T2YoJz1odCcpICsgMSkgOiByZXN1cmwgKyAnI2lzVmlkZW89dHJ1ZSMnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy/osIPnlKjmlq3mj5LpgJrnlKjlh73mlbDop6PmnpBcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5EbiA9IEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vZmlsZXMvcnVsZXMveHlxL2FwcG1zZXQuanNvbicsIHt9KSkuZW5EbjtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5EbiA9PSAnMScpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCfosIPnlKjmlq3mj5LpgJrnlKjlh73mlbDop6PmnpBcXFxcbicgKyBwdGFiICsgJyjpgJrnlKjlh73mlbApJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoXFxcInZhciBjb25maWcgPVxcXCIgKyBmZXRjaChcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb25cXFwiKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoZmV0Y2goY29uZmlnLmNqKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gcHRhYiArICco6YCa55So5Ye95pWwKSc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZVNbbmFtZV0ocmVzdXJsLCBteXVybCk7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwdGFiID09ICdkZHp5Jykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXRyYW5kb20odXJsc3RyKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kU3RyID0gdXJsc3RyLnN1YnN0cmluZygwLCA4KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyA9IHVybHN0ci5zdWJzdHJpbmcoOCwgdXJsc3RyLmxlbmd0aCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzdHIgPSBiYXNlNjREZWNvZGUoc3RyaW5nKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdWJzdHIuc3Vic3RyaW5nKDgsIHN1YnN0ci5sZW5ndGggLSA4KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGp4aHRtbCA9IHJlcXVlc3QoXFxcImh0dHBzOi8vcGxheS5zdW95b3UuY2MveHBsYXkvP3VybD1cXFwiICsgdmxpbmssIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL3d3dy5qdWJhaWJhaS5jYy9cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKGp4aHRtbC5tYXRjaCgvdmFyIGNvbmZpZ1tcXFxcc1xcXFxTXSo/fS8pWzBdKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRkd3kgPSBwb3N0KFxcXCJodHRwczovL3BsYXkuc3VveW91LmNjL3hwbGF5L2hkMEwzVGpING04elNLMU4uanBnXFxcIiwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogTU9CSUxFX1VBXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJ1cmxcXFwiOiBjb25maWcudXJsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJ2a2V5XFxcIjogY29uZmlnLnZrZXksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcInRva2VuXFxcIjogY29uZmlnLnRva2VuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0cmFuZG9tKEpTT04ucGFyc2UoZGR3eSkudXJsKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9taWFvcGFydHkvLnRlc3QocHRhYikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZUNhY2hlKCdodHRwczovL2FnaXQuYWkvbHprMjM1NTkvUHVibGljUnVsZS9yYXcvYnJhbmNoL21hc3Rlci94NXJ1bGUuanMnLCAyNCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4NXJ1bGUoJ2h0dHBzOi8vd3d3LmZ1bjRrLmNvbS9hcGxheWVyLz91cmw9JyArIHJlc3VybCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VybFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH07XFxuXFxuICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICAvKlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5EbiA9IEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vZmlsZXMvcnVsZXMveHlxL2FwcG1zZXQuanNvbicsIHt9KSkuZW5EbjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVuRG4gPT0gJzEnICYmIHZsaW5rLm1hdGNoKC95b3VrdXxtZ3R2fGl4aWd1YXxxcS5jb218cWl5aXxtaWd1fGJpbGliaWxpfHNvaHV8cHB0dnxsZXwxOTA1LmNvbS8pICYmIHZsaW5rLnNlYXJjaCgvaHRtbHxiaWxpYmlsaXxpeGlndWEvKSAhPSAtMSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCflt7LlvIDlkK/mlq3mj5LvvIzlsIbosIPnlKjmlq3mj5Lop6PmnpBodG1sJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKFxcXCJ2YXIgY29uZmlnID1cXFwiICsgZmV0Y2goXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlQYXJzZVNldC5qc29uXFxcIikpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChmZXRjaChjb25maWcuY2opKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBheXRtUGFyc2UodmxpbmspO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OyovXFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxuXFxuICAgICAgICAgICAgICAgIHZhciBzcmN1cmwgPSBsaW5rO1xcbiAgICAgICAgICAgICAgICAvL2xvZyhzcmN1cmwpO1xcbiAgICAgICAgICAgICAgICAvL+WKqOaAgeino+aekOS7o+eggeW8gOWni1xcbiAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgLy/lpITnkIbmjIflrprop4bpopHkuI7nur/ot69cXG4gICAgICAgICAgICAgICAgICAgIGlmICgvXFxcXC5tM3U4fFxcXFwubXA0fG9ialxcXFwvdG9zfG5ldGVhc2VcXFxcLmNvbS8udGVzdChzcmN1cmwpICYmIC9odHRwLy50ZXN0KHNyY3VybCkgJiYgIS9cXFxcLmh0bWx8XFxcXC5tM3U4XFxcXC4vLnRlc3Qoc3JjdXJsKSAmJiAhL1xcXFw9aHR0cC8udGVzdChzcmN1cmwpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC93a2ZpbGUvLnRlc3Qoc3JjdXJsKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3JjdXJsICsgJzt7UmVmZXJlckBodHRwczovL2ZhbnR1YW4ud2tmaWxlLmNvbS99J1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAvXFxcXD1odC8udGVzdChzcmN1cmwpID8gc3JjdXJsLnN1YnN0cmluZyhzcmN1cmwuaW5kZXhPZignPWh0JykgKyAxKSA6IHNyY3VybCArICcjaXNWaWRlbz10cnVlIyc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgvaGQ4XFxcXC5wdy8udGVzdCh2bGluaykgJiYgL1xcXFwubTN1OHxcXFxcLm1wNC8udGVzdCh2bGluaykpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmxpbms7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNyY3VybC5pbmRleE9mKFxcXCIvc2hhcmUvXFxcIikgIT0gLTEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGluayA9IHNyY3VybC5zcGxpdChcXFwiL3NoYXJlXFxcIilbMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmYyA9IGZldGNoKHNyY3VybCwge30pLnJlcGxhY2UoXFxcInZhciBwdXJsXFxcIiwgXFxcInZhciBtYWluXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmYy5pbmRleE9mKFxcXCJtYWluXFxcIikgIT0gLTEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXQgPSBmYy5tYXRjaCgvdmFyIG1haW4uKj87LylbMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKG1hdCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGxheSA9IChtYWluLmluZGV4T2YoXFxcImh0dHBcXFwiKSAhPSAtMSA/IG1haW4gOiBsaW5rICsgbWFpbik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFpbiA9IGZjLm1hdGNoKC91cmw6Lio/W1xcXFwnXFxcXFxcXCJdKC4qPylbXFxcXCdcXFxcXFxcIl0vKVsxXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwbGF5ID0gKG1haW4uaW5kZXhPZihcXFwiaHR0cFxcXCIpICE9IC0xID8gbWFpbiA6IGxpbmsgKyBtYWluKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGxheTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAneDVXZWJWaWV3Oi8vJyArIChzcmN1cmwpXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgvOTgzdmlwLy50ZXN0KHNyY3VybCkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShmZXRjaChzcmN1cmwsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBNT0JJTEVfVUFcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3Q6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoSGVhZGVyczogdHJ1ZVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKS5oZWFkZXJzLmxvY2F0aW9uWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgveFxcXFwtblxcXFwuY2N8bmhkejY2Ni8udGVzdChzcmN1cmwpICYmIC9cXFxcLmh0bWx8YmlsaWJpbGkvLnRlc3Qoc3JjdXJsKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcGVudXJsKHZsaW5rKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIC8v5aSE55CG5oyH5a6a6KeG6aKR5ZKM57q/6Lev57uT5p2fXFxuICAgICAgICAgICAgICAgICAgICAvLy0tLS3liIblibLnur8tLS0tLy9cXG4gICAgICAgICAgICAgICAgICAgIHZhciBzY29kZSA9IEpTT04ucGFyc2UoZmV0Y2goc3JjdXJsLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFxcXCJva2h0dHAvNC4xLjBcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdDogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgd2l0aFN0YXR1c0NvZGU6IHRydWVcXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nKHNjb2RlKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChzY29kZS5zdGF0dXNDb2RlID09ICczMDInIHx8IHNjb2RlLnN0YXR1c0NvZGUgPT0gJzMwMScpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL+aJk+W8gOino+aekOaciTMwMumHjeWumuWQkeeahOmTvuaOpVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWR1cmwgPSBzY29kZS5oZWFkZXJzLmxvY2F0aW9uWzBdLnJlcGxhY2UoL1xcXFxcXFxcL2csICcnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoL1xcXFw9aHR0cC8udGVzdChyZWR1cmwpICYmIC9odG1sfGJpbGliaWxpfGtleVxcXFw9Ly50ZXN0KHJlZHVybCkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZmV0Y2gocmVkdXJsLCB7fSkpLnVybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9cXFxcPWh0dHAvLnRlc3QocmVkdXJsKSAmJiAvXFxcXC5tM3U4fFxcXFwubXA0fFxcXFwuZmx2Ly50ZXN0KHJlZHVybCkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlZHVybC5zdWJzdHJpbmcocmVkdXJsLmluZGV4T2YoJz1odHRwJykgKyAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9odHRwLy50ZXN0KHJlZHVybCkgJiYgL2tleVxcXFw9fHVpZFxcXFw9fHZpZFxcXFw9Ly50ZXN0KHJlZHVybCkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZmV0Y2gocmVkdXJsLCB7fSkpLnVybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9odHRwLy50ZXN0KHJlZHVybCkgJiYgL2h0bWx8YmlsaWJpbGkvLnRlc3QocmVkdXJsKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3BlbnVybCh2bGluayk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlZHVybFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy92YXIgaHRtbCA9IHJlcXVlc3Qoc3JjdXJsKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IHNjb2RlLmJvZHk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2coaHRtbCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC80MDQgTm90IEZvdW5kfOWkh+ahiOWQjuWPr+e7p+e7reiuv+mXri8udGVzdChodG1sKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3BlbnVybCh2bGluayk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgvXFxcXDxib2R5Ly50ZXN0KGh0bWwpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZygn5bCd6K+V6Z2eSlNPTuaOpeWPo+e9kemhteino+aekCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlQ2FjaGUoJ2h0dHBzOi8vYWdpdC5haS9semsyMzU1OS9QdWJsaWNSdWxlL3Jhdy9icmFuY2gvbWFzdGVyL3g1cnVsZS5qcycsIDI0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHg1cnVsZShzcmN1cmwsIHNyY3VybCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcmV0dXJuIG9wZW51cmwoc3JjdXJsKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2pzb27op6PmnpDnmoTlj5bpk77mjqVcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHB1cmwgPSBodG1sLm1hdGNoKC9bXFxcXCdcXFxcXFxcIl11cmxbXFxcXCdcXFxcXFxcIl06Lio/W1xcXFwnXFxcXFxcXCJdKC4qPylbXFxcXCdcXFxcXFxcIl0vKVsxXS5yZXBsYWNlKC9cXFxcXFxcXC9nLCAnJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9nKHB1cmwpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoL2h0dHAvLnRlc3QocHVybCkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwdGFiID09ICdiaWxpYmlsaScpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHVybCArICc7e1JlZmVyZXJAaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tLyYmVXNlci1BZ2VudEBNb3ppbGxhLzUuMH0nO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwdGFiID09ICdtZ3R2Jykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwdXJsICsgJyNpc1ZpZGVvPXRydWUjJyArICc7e1JlZmVyZXJAd3d3Lm1ndHYuY29tJiZVc2VyLUFnZW50QE1vemlsbGEvNS4wfSc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9vamJrLy50ZXN0KHB1cmwpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB1cmwgKyAnO3tSZWZlcmVyQGh0dHBzOi8vYmFrLm9qYmtqeC5jb20vfSc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC92aWRlb19tcDR8dHlwZVxcXFw9bTN1OHxwdFxcXFw9bTN1OHxcXFxcL3ZpZGVvXFxcXC90b3NcXFxcLy8udGVzdChwdXJsKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwdXJsICsgJyNpc1ZpZGVvPXRydWUjJztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB1cmxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL+mdnmh0dHDlvIDlpLTnmoTmiZPlvIDljp/pk77mjqUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3BlbnVybCh2bGluaylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICAgICAgLy/miqXplJnliKTmlq3lpITnkIZcXG4gICAgICAgICAgICAgICAgICAgIGxvZygn5omn6KGM5oql6ZSZ6Lez6L2s5aSE55CGJyk7XFxuICAgICAgICAgICAgICAgICAgICAvKmlmIChzcmN1cmwuc3Vic3RyaW5nKDAsIDIpID09ICdcXFxcL1xcXFwvJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcGVudXJsKCdodHRwczonICsgc3JjdXJsKTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoL1xcXFw9aHR0cC8udGVzdChzcmN1cmwpICYmIC9cXFxcLmh0bWx8YmlsaWJpbGkvLnRlc3Qoc3JjdXJsKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vcmV0dXJuIHNyY3VybC5zcGxpdCgnPScpWzFdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcGVudXJsKHNyY3VybC5zdWJzdHJpbmcoc3JjdXJsLmluZGV4T2YoJz1odHRwJykgKyAxKSk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeyovXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3BlbnVybCh2bGluaylcXG4gICAgICAgICAgICAgICAgICAgIC8vcmV0dXJuICd4NVdlYlZpZXc6Ly8nK3NyY3VybFxcbiAgICAgICAgICAgICAgICAgICAgLy99XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgLy/liqjmgIHop6PmnpDku6PnoIHnu5PmnZ9cXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIHB0YWIsXFxuICAgICAgICAgICAgbGluayxcXG4gICAgICAgICAgICBteXVybCxcXG4gICAgICAgICAgICB2bGluayksXFxuICAgICAgICBjb2xfdHlwZTogY2x0XFxuICAgIH0pO1xcbn1cXG4vL31cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIlRW566A5LuL5LiO6YCJ6ZuGXCIsXCJwYXRoXCI6XCJ0dm1vdmxpc3RcIixcInJ1bGVcIjpcInZhciB0YWJzID0gT2JqZWN0LmtleXMoaHRtbC52aWRlb2xpc3QpO1xcbnZhciB0aHVtYiA9IGh0bWwuaW1nX3VybDtcXG5pdGVtcy5wdXNoKHtcXG4gICAgdGl0bGU6ICfliafmg4XnroDku4vvvJonLFxcbiAgICBkZXNjOiBodG1sLmludHJvLFxcbiAgICBwaWNfdXJsOiB0aHVtYixcXG4gICAgdXJsOiAkKCdoaWtlcjovL2VtcHR5I25vUmVjb3JkSGlzdG9yeSMnKS5ydWxlKChkZXMpID0+IHtcXG4gICAgICAgIHNldFJlc3VsdChbe1xcbiAgICAgICAgICAgIHRpdGxlOiBkZXMsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsb25nX3RleHQnXFxuICAgICAgICB9XSk7XFxuICAgIH0sIGh0bWwuaW50cm8pLFxcbiAgICBjb2xfdHlwZTogJ21vdmllXzFfdmVydGljYWxfcGljJ1xcbn0pO1xcbmV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2RucGx1Z2luJywge30pKS5ydWxlKTtcXG5cXG5pdGVtcy5wdXNoKHtcXG4gICAgdGl0bGU6ICfigJzigJzmjpLluo/igJ3igJ0nLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5QGxhenlSdWxlPS5qczpwdXRNeVZhcignYXBwbXR2c29ydCcsIGdldE15VmFyKCdhcHBtdHZzb3J0JywnMScpPT0nMSc/JzAnOicxJyk7cmVmcmVzaFBhZ2UoZmFsc2UpOyd0b2FzdDovL+WIh+aNouaIkOWKn++8gSdcXFwiLFxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxufSk7XFxudmFyIGd2YSA9IE1ZX1VSTDtcXG5mb3IgKHZhciBrID0gMDsgayA8IHRhYnMubGVuZ3RoOyBrKyspIHtcXG4gICAgdmFyIHB0YWIgPSB0YWJzW2tdO1xcbiAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAoZ2V0TXlWYXIoZ3ZhLCAnMCcpID09IGsgPyAn8J+RifCfj7snIDogJycpICsgcHRhYixcXG4gICAgICAgIHVybDogYGhpa2VyOi8vZW1wdHlAbGF6eVJ1bGU9LmpzOnB1dE15VmFyKCdgICsgZ3ZhICsgXFxcIicsICdcXFwiICsgayArIGAnKTtyZWZyZXNoUGFnZSgpOyd0b2FzdDovL+WIh+aNouaIkOWKn++8gSdgLFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICB9KTtcXG5cXG59XFxuXFxuLy9mb3IgKHZhciBpID0gMDsgaSA8IHRhYnMubGVuZ3RoOyBpKyspIHtcXG5pZiAoZ2V0TXlWYXIoJ2FwcG10dnNvcnQnLCAnMScpID09ICcxJykge1xcbiAgICB2YXIgbGlzdCA9IGh0bWwudmlkZW9saXN0W3RhYnNbZ2V0TXlWYXIoZ3ZhLCAnMCcpXV07XFxufSBlbHNlIHtcXG4gICAgdmFyIGxpc3QgPSBodG1sLnZpZGVvbGlzdFt0YWJzW2dldE15VmFyKGd2YSwgJzAnKV1dLnJldmVyc2UoKTtcXG59O1xcblxcbmZvciAodmFyIGogPSAwOyBqIDwgbGlzdC5sZW5ndGg7IGorKykge1xcbiAgICB2YXIgc3JjdXJsID0gbGlzdFtqXS51cmw7XFxuICAgIGlmICgvMjkzangxLy50ZXN0KHNyY3VybCkpIHtcXG4gICAgICAgIHNyY3VybCA9IHNyY3VybC5yZXBsYWNlKCcyOTNqeDEnLCAnangnKTtcXG4gICAgfSBlbHNlIGlmICgvOGQ4cXxkaWxpa3R2fGhhb2thbmp1MXxjenR2fGZpdFxcXFw6OHxwcHpodS8udGVzdChteXVybCkpIHtcXG4gICAgICAgIHNyY3VybCA9IHNyY3VybCArICcmYXBwPTEwMDAwJmFjY291bnQ9MjcyNzc1MDI4JnBhc3N3b3JkPXFxMjcyNzc1MDI4JztcXG4gICAgfVxcbiAgICB2YXIgdGl0bGUgPSBsaXN0W2pdLnRpdGxlO1xcbiAgICB0aXRsZSA9IHRpdGxlLm1hdGNoKC8o56ysfFxcXFxkfC0pKijpm4Z86K+dfOacnykvZykgPyB0aXRsZS5yZXBsYWNlKC/nrKx86ZuGfOivnXzmnJ8vZywgJycpIDogdGl0bGU7XFxuICAgIGlmIChsaXN0Lmxlbmd0aCA8PSA0KSB7XFxuICAgICAgICB2YXIgY2x0ID0gJ3RleHRfMic7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICB2YXIgY2x0ID0gaXNOYU4odGl0bGUpID8gJ2ZsZXhfYnV0dG9uJyA6ICd0ZXh0XzUnXFxuICAgIH07XFxuICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgdXJsOiAkKCdoaWtlcjovL2VtcHR5JykubGF6eVJ1bGUoKHB0YWIsIHNyY3VybCwgbXl1cmwpID0+IHtcXG4gICAgICAgICAgICBmdW5jdGlvbiBvcGVudXJsKHJlc3VybCkge1xcbiAgICAgICAgICAgICAgICBpZiAocmVzdXJsLm1hdGNoKC95b3VrdXxtZ3R2fGl4aWd1YXxxcS5jb218cWl5aXxtaWd1fGJpbGliaWxpfHNvaHV8cHB0dnxsZXwxOTA1LmNvbS8pICYmIHJlc3VybC5zZWFyY2goL2h0bWx8YmlsaWJpbGkvKSAhPSAtMSkge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVuRG4gPSBKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL2ZpbGVzL3J1bGVzL3h5cS9hcHBtc2V0Lmpzb24nLCB7fSkpLmVuRG47XFxuICAgICAgICAgICAgICAgICAgICBpZiAoZW5EbiA9PSAnMScpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2coJ+iwg+eUqOaWreaPkuino+aekCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoXFxcInZhciBjb25maWcgPVxcXCIgKyBmZXRjaChcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb25cXFwiKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChmZXRjaChjb25maWcuY2opKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXl0bVBhcnNlKHJlc3VybCk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1cmxcXG4gICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoL1xcXFw9TFRcXFxcLS8udGVzdChyZXN1cmwpKSB7XFxuICAgICAgICAgICAgICAgICAgICBsb2coJ+iwg+eUqOaWreaPkmx0bmLpgJrnlKjop6PmnpAnKTtcXG4gICAgICAgICAgICAgICAgICAgIGV2YWwoXFxcInZhciBjb25maWcgPVxcXCIgKyBmZXRjaChcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb25cXFwiKSk7XFxuICAgICAgICAgICAgICAgICAgICBldmFsKGZldGNoKGNvbmZpZy5jaikpO1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSAnbHRuYijpgJrnlKjlh73mlbApJztcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZVNbbmFtZV0ocmVzdXJsLnN1YnN0cmluZyhyZXN1cmwuaW5kZXhPZignPUxULScpICsgMSkpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VybFxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfTtcXG5cXG4gICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICB2YXIgZW5EbiA9IEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vZmlsZXMvcnVsZXMveHlxL2FwcG1zZXQuanNvbicsIHt9KSkuZW5EbjtcXG4gICAgICAgICAgICAgICAgaWYgKGVuRG4gPT0gJzEnICYmIHNyY3VybC5tYXRjaCgveW91a3V8bWd0dnxpeGlndWF8cXEuY29tfHFpeWl8bWlndXxiaWxpYmlsaXxzb2h1fHBwdHZ8bGV8MTkwNS5jb20vKSAmJiBzcmN1cmwuc2VhcmNoKC9odG1sfGJpbGliaWxpfGl4aWd1YS8pICE9IC0xKSB7XFxuICAgICAgICAgICAgICAgICAgICBsb2coJ+W3suW8gOWQr+aWreaPku+8jOWwhuiwg+eUqOaWreaPkuino+aekGh0bWwnKTtcXG4gICAgICAgICAgICAgICAgICAgIGV2YWwoXFxcInZhciBjb25maWcgPVxcXCIgKyBmZXRjaChcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb25cXFwiKSk7XFxuICAgICAgICAgICAgICAgICAgICBldmFsKGZldGNoKGNvbmZpZy5jaikpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF5dG1QYXJzZShzcmN1cmwuc3Vic3RyaW5nKHNyY3VybC5pbmRleE9mKCc9aHR0cCcpICsgMSkpO1xcbiAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxuXFxuICAgICAgICAgICAgLy9sb2coc3JjdXJsKTtcXG4gICAgICAgICAgICAvL+WKqOaAgeino+aekOS7o+eggeW8gOWni1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIGlmICgvXFxcXC5tM3U4fFxcXFwubXA0fG9ialxcXFwvdG9zLy50ZXN0KHNyY3VybCkgJiYgL2h0dHAvLnRlc3Qoc3JjdXJsKSkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC9cXFxcPWh0Ly50ZXN0KHNyY3VybCkgPyBzcmN1cmwuc3Vic3RyaW5nKHNyY3VybC5pbmRleE9mKCc9aHQnKSArIDEpIDogc3JjdXJsICsgJyNpc1ZpZGVvPXRydWUjJztcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzcmN1cmwuaW5kZXhPZihcXFwiL3NoYXJlL1xcXCIpICE9IC0xKSB7XFxuICAgICAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaW5rID0gc3JjdXJsLnNwbGl0KFxcXCIvc2hhcmVcXFwiKVswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmMgPSBmZXRjaChzcmN1cmwsIHt9KS5yZXBsYWNlKFxcXCJ2YXIgcHVybFxcXCIsIFxcXCJ2YXIgbWFpblxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmYy5pbmRleE9mKFxcXCJtYWluXFxcIikgIT0gLTEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdCA9IGZjLm1hdGNoKC92YXIgbWFpbi4qPzsvKVswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChtYXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGxheSA9IChtYWluLmluZGV4T2YoXFxcImh0dHBcXFwiKSAhPSAtMSA/IG1haW4gOiBsaW5rICsgbWFpbik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1haW4gPSBmYy5tYXRjaCgvdXJsOi4qP1tcXFxcJ1xcXFxcXFwiXSguKj8pW1xcXFwnXFxcXFxcXCJdLylbMV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwbGF5ID0gKG1haW4uaW5kZXhPZihcXFwiaHR0cFxcXCIpICE9IC0xID8gbWFpbiA6IGxpbmsgKyBtYWluKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBsYXk7XFxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd4NVdlYlZpZXc6Ly8nICsgKHNyY3VybClcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwdGFiID09ICdhbGl6eScpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBwdXJsID0gZmV0Y2goJ2h0dHBzOi8vZm91YmluLmNvbS9qaWV4aS5waHA/dXJsPScgKyBzcmN1cmwsIHt9KS5tYXRjaCgvXFxcXFxcXCJ1cmxcXFxcXFxcIjpcXFxcXFxcIiguKj8pXFxcXFxcXCIvKVsxXTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwdXJsO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC8xOWp4XFxcXC52aXB8bmZ5aW5nc2hpLy50ZXN0KHNyY3VybCkpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBwdXJsID0gSlNPTi5wYXJzZShmZXRjaChzcmN1cmwucmVwbGFjZSgnaHR0cDovLycsICdodHRwczovLycpLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IE1PQklMRV9VQVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3Q6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhIZWFkZXJzOiB0cnVlXFxuICAgICAgICAgICAgICAgICAgICB9KSkuaGVhZGVycy5sb2NhdGlvblswXTtcXG4gICAgICAgICAgICAgICAgICAgIGlmICgvdGl0YW4ubWd0di8udGVzdChwdXJsKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwdXJsICsgJyNpc1ZpZGVvPXRydWUjJyArICc7e1JlZmVyZXJAd3d3Lm1ndHYuY29tJiZVc2VyLUFnZW50QE1vemlsbGEvNS4wfSc7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9vYmpcXFxcL3Rvcy8udGVzdChwdXJsKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwdXJsICsgJyNpc1ZpZGVvPXRydWUjJztcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB1cmxcXG4gICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgLyplbHNlIGlmICgvemhhaWthbnlzLy50ZXN0KHNyY3VybCkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHVybCA9IEpTT04ucGFyc2UoZmV0Y2goc3JjdXJsICsgJyZhcHA9MTAwMDMmYWNjb3VudD0yNzI3NzUwMjgmcGFzc3dvcmQ9cXEyNzI3NzUwMjgnLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogTU9CSUxFX1VBXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0OiBmYWxzZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aEhlYWRlcnM6IHRydWVcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSkuaGVhZGVycy5sb2NhdGlvblswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoL3RpdGFuLm1ndHYvLnRlc3QocHVybCkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB1cmwgKyAnI2lzVmlkZW89dHJ1ZSMnICsgJzt7UmVmZXJlckB3d3cubWd0di5jb20mJlVzZXItQWdlbnRATW96aWxsYS81LjB9JztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9vYmpcXFxcL3Rvcy8udGVzdChwdXJsKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHVybCArICcjaXNWaWRlbz10cnVlIyc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB1cmxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSovXFxuXFxuICAgICAgICAgICAgICAgIC8vLS0tLeWIhuWJsue6vy0tLS0vL1xcbiAgICAgICAgICAgICAgICB2YXIgc2NvZGUgPSBKU09OLnBhcnNlKGZldGNoKHNyY3VybCwge1xcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogTU9CSUxFX1VBXFxuICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3Q6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgd2l0aFN0YXR1c0NvZGU6IHRydWVcXG4gICAgICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgICAgICAgICAvL2xvZyhzY29kZSk7XFxuICAgICAgICAgICAgICAgIGlmIChzY29kZS5zdGF0dXNDb2RlID09ICczMDInIHx8IHNjb2RlLnN0YXR1c0NvZGUgPT0gJzMwMScpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBwdXJsID0gc2NvZGUuaGVhZGVycy5sb2NhdGlvblswXS5yZXBsYWNlKC9cXFxcXFxcXC9nLCAnJyk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAvL3ZhciBodG1sID0gcmVxdWVzdChzcmN1cmwpO1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGh0bWwgPSBzY29kZS5ib2R5O1xcbiAgICAgICAgICAgICAgICAgICAgLy9sb2coaHRtbCk7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoLzQwNCBOb3QgRm91bmR85aSH5qGI5ZCO5Y+v57un57ut6K6/6ZeufOS4jeWtmOWcqC8udGVzdChodG1sKSB8fCBodG1sID09ICcnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wZW51cmwoc3JjdXJsLnN1YnN0cmluZyhzcmN1cmwuaW5kZXhPZignPWh0dHAnKSArIDEpKTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoL1xcXFxcXFwidXJsXFxcXFxcXCJcXFxcOlxcXFxcXFwiaHR0cC8udGVzdChodG1sKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwdXJsID0gaHRtbC5tYXRjaCgvXFxcXFxcXCJ1cmxcXFxcXFxcIjpcXFxcXFxcIiguKj8pXFxcXFxcXCIvKVsxXS5yZXBsYWNlKC9cXFxcXFxcXC9nLCAnJyk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGh0bWwuc3RhcnRzV2l0aCgneycpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHB1cmwgPSBzcmN1cmwuc3Vic3RyaW5nKHNyY3VybC5pbmRleE9mKCc9aHR0cCcpICsgMSk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vdmFyIHB1cmwgPSBzcmN1cmxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlQ2FjaGUoJ2h0dHBzOi8vYWdpdC5haS9semsyMzU1OS9QdWJsaWNSdWxlL3Jhdy9icmFuY2gvbWFzdGVyL3g1cnVsZS5qcycsIDI0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geDVydWxlKHNyY3VybCwgc3JjdXJsKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3JldHVybiAneDVXZWJWaWV3Oi8vJysoc3JjdXJsKSBcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgLy9sb2cocHVybCk7XFxuICAgICAgICAgICAgICAgIGlmICgvdGl0YW4ubWd0di8udGVzdChwdXJsKSkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB1cmwgKyAnI2lzVmlkZW89dHJ1ZSMnICsgJzt7UmVmZXJlckB3d3cubWd0di5jb20mJlVzZXItQWdlbnRATW96aWxsYS81LjB9JztcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgvb2JqXFxcXC90b3MvLnRlc3QocHVybCkpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwdXJsICsgJyNpc1ZpZGVvPXRydWUjJztcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwdXJsXFxuICAgICAgICAgICAgICAgIH07XFxuXFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICBpZiAoc3JjdXJsLnN1YnN0cmluZygwLCAyKSA9PSAnXFxcXC9cXFxcLycpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcGVudXJsKCdodHRwczonICsgc3JjdXJsKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgvXFxcXD1odHRwLy50ZXN0KHNyY3VybCkgJiYgL1xcXFwuaHRtbHxiaWxpYmlsaS8udGVzdChzcmN1cmwpKSB7XFxuICAgICAgICAgICAgICAgICAgICAvL3JldHVybiBzcmN1cmwuc3BsaXQoJz0nKVsxXTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcGVudXJsKHNyY3VybC5zdWJzdHJpbmcoc3JjdXJsLmluZGV4T2YoJz1odHRwJykgKyAxKSk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3BlbnVybChzcmN1cmwpXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgLy/liqjmgIHop6PmnpDku6PnoIHnu5PmnZ9cXG4gICAgICAgIH0sIHB0YWIsIHNyY3VybCwgbXl1cmwpLFxcbiAgICAgICAgY29sX3R5cGU6IGNsdFxcbiAgICB9KTtcXG59XFxuLy99XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLliJfooajmqKHlvI/mkJzntKLkuoznuqdcIixcInBhdGhcIjpcInNlYXJlcmpcIixcInJ1bGVcIjpcInZhciByZXMgPSB7fTtcXG52YXIgaXRlbXMgPSBbXTtcXG52YXIgbm93RGF0ZSA9IG5ldyBEYXRlKCk7XFxudmFyIG1vbnRoID0gbm93RGF0ZS5nZXRNb250aCgpICsgMSA8IDEwID8gXFxcIjBcXFwiICsgKG5vd0RhdGUuZ2V0TW9udGgoKSArIDEpIDogbm93RGF0ZS5nZXRNb250aCgpICsgMTtcXG52YXIgZGF5ID0gbm93RGF0ZS5nZXREYXRlKCkgPCAxMCA/IFxcXCIwXFxcIiArIG5vd0RhdGUuZ2V0RGF0ZSgpIDogbm93RGF0ZS5nZXREYXRlKCk7XFxudmFyIGRhdGVTdHIgPSBtb250aCArICcnICsgZGF5O1xcbnZhciBzcGwgPSBnZXRSZXNDb2RlKCkuc3BsaXQoJyN4IycpO1xcbnZhciB0eXBldCA9IHNwbFszXTtcXG52YXIgdGRvbWluID0gc3BsWzJdO1xcbnZhciBrZXkgPSBzcGxbNF07XFxuXFxuaWYgKC92aXBtdi8udGVzdCh0ZG9taW4pKSB7XFxuICAgIHZhciBiaHRtbCA9IHJlcXVlc3Qoc3BsWzFdKTtcXG59IGVsc2Uge1xcbiAgICB2YXIgYmh0bWwgPSBmZXRjaChzcGxbMV0sIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IHRkb21pbi5pbmRleE9mKFxcXCJtb2dhaV9hcGlcXFwiKSAhPSAtMSA/IFxcXCJEYXJ0LzIuMTQgKGRhcnQ6aW8pXFxcIiA6IFxcXCJva2h0dHAvNC4xLjBcXFwiXFxuICAgICAgICB9XFxuICAgIH0pO1xcbn1cXG50cnkge1xcbiAgICBiaHRtbCA9IGJodG1sLnN0YXJ0c1dpdGgoJ1xcXFxyXFxcXG4nKSA/IGJodG1sLnJlcGxhY2UoJ1xcXFxyXFxcXG4nLCAnJykgOiBiaHRtbDtcXG59IGNhdGNoIChlKSB7fVxcbmlmICgvYnR3YWYvLnRlc3QoYmh0bWwpKSB7XFxuICAgIC8qXFxuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6J+acieWuneWhlOmqjOivge+8jOeCueWHu+iuv+mXruWOn+e9kemhtScsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHNwbFsxXSArIGBAbGF6eVJ1bGU9LmpzOmlucHV0LnNwbGl0KCc7JylbMF1gLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAqL1xcblxcbiAgICBiaHRtbCA9IGZldGNoKHNwbFsxXSArICcmYnR3YWYnICsgYmh0bWwubWF0Y2goL2J0d2FmKC4qPylcXFxcXFxcIi8pWzFdLCB7fSk7XFxuXFxufVxcbi8vbG9nKGJodG1sKTtcXG5pZiAoYmh0bWwgPT0gXFxcIlxcXCIgfHwgYmh0bWwgPT0gbnVsbCB8fCBiaHRtbC5zdWJzdHJpbmcoMCwgNSkgPT0gJ2Vycm9yJyB8fCAhYmh0bWwuZW5kc1dpdGgoJ30nKSkge1xcbiAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn5pyq5pCc57Si5Yiw55u45YWz6LWE5rqQ77yM54K55Ye76K6/6Zeu5Y6f572R6aG1JyxcXG4gICAgICAgIHVybDogc3BsWzFdICsgYEBsYXp5UnVsZT0uanM6aW5wdXQuc3BsaXQoJzsnKVswXWAsXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMSdcXG4gICAgfSk7XFxufSBlbHNlIGlmIChiaHRtbC5sZW5ndGggPCA4MCkge1xcbiAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn6L+U5Zue5pWw5o2u5LiN5a6M5pW077yM54K55Ye76K6/6Zeu5Y6f572R6aG1JyxcXG4gICAgICAgIHVybDogc3BsWzFdICsgYEBsYXp5UnVsZT0uanM6aW5wdXQuc3BsaXQoJzsnKVswXWAsXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMSdcXG4gICAgfSk7XFxufSBlbHNlIHtcXG4gICAgdmFyIGh0bWwgPSBKU09OLnBhcnNlKGJodG1sKTtcXG4gICAgLy9sb2coc3BsWzFdKTtcXG4gICAgaWYgKGh0bWwubGlzdCkge1xcbiAgICAgICAgdmFyIGxpc3QgPSBodG1sLmxpc3Q7XFxuICAgIH0gZWxzZSBpZiAoaHRtbC5kYXRhLmxpc3QpIHtcXG4gICAgICAgIHZhciBsaXN0ID0gaHRtbC5kYXRhLmxpc3Q7XFxuICAgIH0gZWxzZSBpZiAoaHRtbC5kYXRhKSB7XFxuICAgICAgICB2YXIgbGlzdCA9IGh0bWwuZGF0YTtcXG4gICAgfVxcblxcbiAgICBpZiAobGlzdC5sZW5ndGggPCAxKSB7XFxuICAgICAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+acquaQnOe0ouWIsO+8jOeCueWHu+iuv+mXruWOn+e9kemhtScsXFxuICAgICAgICAgICAgdXJsOiBzcGxbMV0gKyBgQGxhenlSdWxlPS5qczppbnB1dC5zcGxpdCgnOycpWzBdYCxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfMSdcXG4gICAgICAgIH0pO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XFxuXFxuICAgICAgICAgICAgaWYgKC9cXFxcL3ZvZFxcXFwvLy50ZXN0KHRkb21pbikpIHtcXG4gICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gbGlzdFtpXS50aXRsZTtcXG4gICAgICAgICAgICAgICAgdmFyIHBpYyA9IGxpc3RbaV0ucGljO1xcbiAgICAgICAgICAgICAgICAvL3ZhciB2aWQ9dGRvbWluKycvZGV0YWlsP3ZvZF9pZD0nK2xpc3RbaV0ubmV4dGxpbmsrJyZyZWxfbGltaXQ9MTAnO1xcbiAgICAgICAgICAgICAgICB2YXIgdmlkID0gbGlzdFtpXS5uZXh0bGluaztcXG4gICAgICAgICAgICAgICAgdmFyIHJlbSA9IGxpc3RbaV0uc3RhdGU7XFxuICAgICAgICAgICAgICAgIC8vdmFyIGNvbj1saXN0W2ldLnN0YXRlO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGlmICh0ZG9taW4uaW5kZXhPZignYXBpLnBocC9hcHAvJykgIT0gLTEpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IGxpc3RbaV0udm9kX25hbWU7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgcGljID0gbGlzdFtpXS52b2RfcGljO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9mYW50dWFuLy50ZXN0KHRkb21pbikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmlkID0gJ2h0dHBzOi8vZmFudHVhbi53a2ZpbGUuY29tL2FwaS5waHAvYXBwL3ZpZGVvX2RldGFpbD9pZD0nICsgbGlzdFtpXS52b2RfaWQgKyAnJnRva2VuPSc7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWQgPSB0ZG9taW4gKyAndmlkZW9fZGV0YWlsP2lkPScgKyBsaXN0W2ldLnZvZF9pZCArICcmdG9rZW49JztcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHZhciByZW0gPSBsaXN0W2ldLnZvZF9yZW1hcmtzO1xcbiAgICAgICAgICAgICAgICAgICAgLy92YXIgY29uPWxpc3RbaV0udHlwZS50eXBlX2RlcztcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZG9taW4uaW5kZXhPZigneGdhcHAucGhwL3YxLycpICE9IC0xKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSBsaXN0W2ldLnZvZF9uYW1lO1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBpYyA9IGxpc3RbaV0udm9kX3BpYztcXG4gICAgICAgICAgICAgICAgICAgIHZhciB2aWQgPSB0ZG9taW4gKyAndmlkZW9fZGV0YWlsP2lkPScgKyBsaXN0W2ldLnZvZF9pZDtcXG4gICAgICAgICAgICAgICAgICAgIHZhciByZW0gPSBsaXN0W2ldLnZvZF9yZW1hcmtzO1xcbiAgICAgICAgICAgICAgICAgICAgLy92YXIgY29uPWxpc3RbaV0udHlwZS50eXBlX2RlcztcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IGxpc3RbaV0udm9kX25hbWU7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgcGljID0gbGlzdFtpXS52b2RfcGljO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9pb3Blbnl1bi8udGVzdCh0ZG9taW4pKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZpZCA9IHRkb21pbiArICcvZGV0YWlsSUQ/dm9kX2lkPScgKyBsaXN0W2ldLnZvZF9pZCArICcmdG9rZW49JztcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZigvZ3JlbGlnaHRpbmcvLnRlc3QodGRvbWluKSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZpZCA9IHRkb21pbiArICcvP2lkcz0nICsgbGlzdFtpXS52b2RfaWQgKyAnJnRva2VuPSc7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWQgPSB0ZG9taW4gKyAnL2RldGFpbD9rZXk9JyArIGRhdGVTdHIgKyAnJnZvZF9pZD0nICsgbGlzdFtpXS52b2RfaWQgKyAnJnRva2VuPSc7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVtID0gbGlzdFtpXS52b2RfcmVtYXJrcztcXG4gICAgICAgICAgICAgICAgICAgIC8vdmFyIGNvbj1saXN0W2ldLnR5cGUudHlwZV9kZXM7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZS5yZXBsYWNlKGtleSwgJ+KAnOKAnCcgKyBrZXkgKyAn4oCd4oCdJyksXFxuICAgICAgICAgICAgICAgIHBpY191cmw6IHBpYyArICdAUmVmZXJlcj0nLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQodGRvbWluLmluZGV4T2YoXFxcIm1vZ2FpX2FwaVxcXCIpICE9IC0xID8gdmlkICsgJztnZXQ7dXRmLTg7e1VzZXItQWdlbnRARGFydC8yLjE0IChkYXJ0OmlvKX0nIDogdmlkICsgJztnZXQ7dXRmLTg7e1VzZXItQWdlbnRAb2todHRwLzQuMS4wfScpLnJ1bGUoKHRkb21pbikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlcyA9IHt9O1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW1zID0gW107XFxuICAgICAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IEpTT04ucGFyc2UoZ2V0UmVzQ29kZSgpKTtcXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiAnMjU1JiZmbG9hdCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3g1X3dlYnZpZXdfc2luZ2xlJ1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoWDVXZWJWaWV3KCcnKTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBteXVybCA9IE1ZX1VSTC5tYXRjaCgvKFtcXFxcU10qPzpcXFxcL1xcXFwvW1xcXFxTXSo/KVxcXFwvLylbMV07XFxuICAgICAgICAgICAgICAgICAgICBpZiAoL1xcXFwvdm9kXFxcXC8vLnRlc3QodGRvbWluKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL3R2bW92bGlzdCcsIHt9KSkucnVsZSk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2FwcG1vdmxpc3QnLCB7fSkpLnJ1bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGEgPSBpdGVtcztcXG4gICAgICAgICAgICAgICAgICAgIHNldEhvbWVSZXN1bHQocmVzKTtcXG4gICAgICAgICAgICAgICAgfSwgdGRvbWluKSxcXG4gICAgICAgICAgICAgICAgLy9jb250ZW50OnJlbSxcXG4gICAgICAgICAgICAgICAgZGVzYzogcmVtLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfdmVydGljYWxfcGljJ1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSAvL2ZvciBpXFxuICAgIH0gLy9lbHNlIGxpc3QubGVuZ3RoXFxufVxcblxcbnJlcy5kYXRhID0gaXRlbXM7XFxuc2V0SG9tZVJlc3VsdChyZXMpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiQVBQ6aaW6aG15YiX6KGoXCIsXCJwYXRoXCI6XCJhcHBpbmRleGRhdGFcIixcInJ1bGVcIjpcImlmIChodG1sLmxpc3QpIHtcXG4gICAgdmFyIGxpc3QgPSBodG1sLmxpc3Q7XFxufSBlbHNlIGlmIChodG1sLmRhdGEgJiYgaHRtbC5kYXRhLmxpc3QpIHtcXG4gICAgdmFyIGxpc3QgPSBodG1sLmRhdGEubGlzdDtcXG59IGVsc2Uge1xcbiAgICB2YXIgbGlzdCA9IGh0bWwuZGF0YTtcXG59XFxuXFxuZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XFxuICAgIGlmIChsaXN0W2ldLnZvZF9saXN0KSB7XFxuICAgICAgICB2YXIgbGlzdHMgPSBsaXN0W2ldLnZvZF9saXN0O1xcbiAgICAgICAgdmFyIHR5cGVuYW1lID0gbGlzdFtpXS52b2RfdHlwZV9uYW1lO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgdmFyIGxpc3RzID0gbGlzdFtpXS52bGlzdDtcXG4gICAgICAgIHZhciB0eXBlbmFtZSA9IGxpc3RbaV0udHlwZV9uYW1lXFxuICAgIH1cXG4gICAgaXRlbXMucHVzaCh7XFxuICAgICAgICB0aXRsZTogdHlwZW5hbWUsXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMSdcXG5cXG4gICAgfSk7XFxuXFxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGlzdHMubGVuZ3RoOyBqKyspIHtcXG4gICAgICAgIHZhciB0aXRsZSA9IGxpc3RzW2pdLnZvZF9uYW1lO1xcbiAgICAgICAgdmFyIGltZyA9IGxpc3RzW2pdLnZvZF9waWM7XFxuICAgICAgICB2YXIgdXJsID0gbGlzdHNbal0udm9kX2lkO1xcbiAgICAgICAgdmFyIGRlc2MgPSBsaXN0c1tqXS52b2RfcmVtYXJrcztcXG4gICAgICAgIHZhciBub3dEYXRlID0gbmV3IERhdGUoKTtcXG4gICAgICAgIHZhciBtb250aCA9IG5vd0RhdGUuZ2V0TW9udGgoKSArIDEgPCAxMCA/IFxcXCIwXFxcIiArIChub3dEYXRlLmdldE1vbnRoKCkgKyAxKSA6IG5vd0RhdGUuZ2V0TW9udGgoKSArIDE7XFxuICAgICAgICB2YXIgZGF5ID0gbm93RGF0ZS5nZXREYXRlKCkgPCAxMCA/IFxcXCIwXFxcIiArIG5vd0RhdGUuZ2V0RGF0ZSgpIDogbm93RGF0ZS5nZXREYXRlKCk7XFxuICAgICAgICB2YXIgZGF0ZVN0ciA9IG1vbnRoICsgJycgKyBkYXk7XFxuICAgICAgICBpZiAoaHRtbC5saXN0KSB7XFxuICAgICAgICAgICAgdmFyIGxpbmsgPSBtdXJsICsgJ3ZpZGVvX2RldGFpbD9pZD0nICsgdXJsICsgJyZ0b2tlbj07Z2V0O3V0Zi04O3tVc2VyLUFnZW50QERhcnQvMi4xNCAoZGFydDppbyl9JztcXG4gICAgICAgIH0gZWxzZSBpZiAoaHRtbC5kYXRhICYmIGh0bWwuZGF0YS5saXN0KSB7XFxuICAgICAgICAgICAgaWYgKG11cmwuc2VhcmNoKC9tb2dhaV9hcGkvKSAhPSAtMSkge1xcbiAgICAgICAgICAgICAgICB2YXIgbGluayA9IG11cmwgKyAnL2RldGFpbD9rZXk9JyArIGRhdGVTdHIgKyAnJnZvZF9pZD0nICsgdXJsICsgJyZyZWxfbGltaXQ9MTA7Z2V0O3V0Zi04O3tVc2VyLUFnZW50QERhcnQvMi4xNCAoZGFydDppbyl9JztcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG11cmwuaW5jbHVkZXMoJ2dyZWxpZ2h0aW5nJykpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGxpbmsgPSBtdXJsICsgJy8/aWRzPScgKyB1cmwgKyAnJnJlbF9saW1pdD0xMDtnZXQ7dXRmLTg7e1VzZXItQWdlbnRARGFydC8yLjE0IChkYXJ0OmlvKX0nO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHZhciBsaW5rID0gbXVybCArICcvZGV0YWlsP2tleT0nICsgZGF0ZVN0ciArICcmdm9kX2lkPScgKyB1cmwgKyAnJnJlbF9saW1pdD0xMDtnZXQ7dXRmLTg7e1VzZXItQWdlbnRAb2todHRwLzQuMS4wfSc7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB2YXIgbGluayA9IG11cmwgKyAndmlkZW9fZGV0YWlsP2lkPScgKyB1cmwgKyAnJnRva2VuPTtnZXQ7dXRmLTg7e1VzZXItQWdlbnRARGFydC8yLjE0IChkYXJ0OmlvKX0nO1xcbiAgICAgICAgfTtcXG4gICAgICAgIGlmICgvZmFudHVhbi8udGVzdChtdXJsKSkge1xcbiAgICAgICAgICAgIHZhciBsaW5rID0gJ2h0dHBzOi8vZmFudHVhbi53a2ZpbGUuY29tL2FwaS5waHAvYXBwL3ZpZGVvX2RldGFpbD9pZD0nICsgdXJsICsgJyZ0b2tlbj07Z2V0O3V0Zi04O3tVc2VyLUFnZW50QERhcnQvMi4xNCAoZGFydDppbyl9JztcXG4gICAgICAgIH0gZWxzZSBpZiAoL2lvcGVueXVuLy50ZXN0KG11cmwpKSB7XFxuICAgICAgICAgICAgdmFyIGxpbmsgPSBtdXJsICsgJy9kZXRhaWxJRD92b2RfaWQ9JyArIHVybCArICcmcmVsX2xpbWl0PTEwO2dldDt1dGYtODt7VXNlci1BZ2VudEBEYXJ0LzIuMTQgKGRhcnQ6aW8pfSc7XFxuICAgICAgICB9IGVsc2UgaWYgKC9kaWppYXhpYS8udGVzdChtdXJsKSkge1xcbiAgICAgICAgICAgIHZhciBsaW5rID0gJ2h0dHA6Ly93d3cuZGlqaWF4aWEuY29tL2FwaS5waHAvYXBwL3ZpZGVvX2RldGFpbD9pZD0nICsgdXJsO1xcbiAgICAgICAgfVxcbiAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgIHBpY191cmw6IGltZyArICdAUmVmZXJlcj0nLFxcbiAgICAgICAgICAgIHVybDogJChsaW5rKS5ydWxlKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgdmFyIHJlcyA9IHt9O1xcbiAgICAgICAgICAgICAgICB2YXIgaXRlbXMgPSBbXTtcXG4gICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJycsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiAnMjU1JiZmbG9hdCcsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICcnLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICd4NV93ZWJ2aWV3X3NpbmdsZSdcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hYNVdlYlZpZXcoJycpO1xcbiAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IEpTT04ucGFyc2UoZ2V0UmVzQ29kZSgpKTtcXG4gICAgICAgICAgICAgICAgdmFyIG15dXJsID0gTVlfVVJMLm1hdGNoKC8oW1xcXFxTXSo/OlxcXFwvXFxcXC9bXFxcXFNdKj8pXFxcXC8vKVsxXTtcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2FwcG1vdmxpc3QnLCB7fSkpLnJ1bGUpO1xcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcbiAgICAgICAgICAgICAgICByZXMuZGF0YSA9IGl0ZW1zO1xcbiAgICAgICAgICAgICAgICBzZXRIb21lUmVzdWx0KHJlcyk7XFxuICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgZGVzYzogZGVzYyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzNfbWFycXVlZSdcXG4gICAgICAgIH0pO1xcbiAgICB9XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5pat5b+15o+S5Lu26LCD55SoXCIsXCJwYXRoXCI6XCJkbnBsdWdpblwiLFwicnVsZVwiOlwidmFyIGRuZW4gPSBKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL2ZpbGVzL3J1bGVzL3h5cS9hcHBtc2V0Lmpzb24nLCB7fSkpLmVuRG47XFxuaXRlbXMucHVzaCh7XFxuICAgIHRpdGxlOiAn5pat5o+S77yaJyArIChkbmVuID09ICcxJyA/ICfigJzigJzinIXigJ3igJ0nIDogJ+KdjicpLFxcbiAgICB1cmw6ICQoJycpLmxhenlSdWxlKChkbmVuKSA9PiB7XFxuICAgICAgICBpZiAoZG5lbiA9PSAnMScpIHtcXG4gICAgICAgICAgICB2YXIgZmlsZVVybCA9IGZldGNoKFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL3h5cS9hcHBtc2V0Lmpzb25cXFwiLCB7fSkucmVwbGFjZSgnXFxcXFxcXCJlbkRuXFxcXFxcXCI6XFxcXFxcXCIxXFxcXFxcXCInLCAnXFxcXFxcXCJlbkRuXFxcXFxcXCI6XFxcXFxcXCIwXFxcXFxcXCInKTtcXG4gICAgICAgICAgICB3cml0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMveHlxL2FwcG1zZXQuanNvblxcXCIsIGZpbGVVcmwpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey56aB55So5pat5o+S6LCD55So77yBJztcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgdmFyIGZpbGVVcmwgPSBmZXRjaChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy94eXEvYXBwbXNldC5qc29uXFxcIiwge30pLnJlcGxhY2UoJ1xcXFxcXFwiZW5EblxcXFxcXFwiOlxcXFxcXFwiMFxcXFxcXFwiJywgJ1xcXFxcXFwiZW5EblxcXFxcXFwiOlxcXFxcXFwiMVxcXFxcXFwiJyk7XFxuICAgICAgICAgICAgLy9sb2coZmlsZVVybCk7XFxuICAgICAgICAgICAgd3JpdGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL3h5cS9hcHBtc2V0Lmpzb25cXFwiLCBmaWxlVXJsKTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suW8gOWQr+aWreaPkuiwg+eUqO+8gSdcXG4gICAgICAgIH1cXG4gICAgfSwgZG5lbiksXFxuICAgIGNvbF90eXBlOiAndGV4dF8zJ1xcbn0pO1xcbmlmIChkbmVuID09ICcxJykge1xcbiAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn57q/6Lev6YWN572uJyxcXG4gICAgICAgIC8vdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eSNub1JlY29yZEhpc3RvcnkjQHJ1bGU9anM6dGhpcy5kPVtdO3JlcXVpcmUoJ2h0dHBzOi8vZ2l0ZWEuY29tL0FJOTU3L0hpa2VyL3Jhdy9tL3YvUm91dGUuanMnKTtSb3V0ZS5zZXRQYXJzZSgpO3NldFJlc3VsdChkKTtcXFwiLFxcbiAgICAgICAgdXJsOiBcXFwic2VsZWN0Oi8vXFxcIiArIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgIHRpdGxlOlxcXCLnur/ot6/phY3nva5cXFwiLFxcbiAgICAgICAgb3B0aW9uczogW1xcXCLljp/mlq1cXFwiLCBcXFwi6a2U5patXFxcIl0sXFxuICAgICAgICBjb2w6IDIsXFxuICAgICAgICBqczogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgaWYoaW5wdXQ9PVxcXCLljp/mlq1cXFwiKXtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHkjbm9SZWNvcmRIaXN0b3J5I0BydWxlPWpzOnRoaXMuZD1bXTtyZXF1aXJlKCdodHRwczovL2dpdGVhLmNvbS9BSTk1Ny9IaWtlci9yYXcvbS92L1JvdXRlLmpzJyk7Um91dGUuc2V0UGFyc2UoKTtzZXRSZXN1bHQoZCk7XFxcIjsgICAgXFxuICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU96K6+572uI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1xcXCIgICAgXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMydcXG4gICAgfSk7XFxuICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfop6PmnpDnrqHnkIYnLFxcbiAgICAgICAgLy91cmw6IFxcXCJoaWtlcjovL2VtcHR5I25vUmVjb3JkSGlzdG9yeSNAcnVsZT1qczp0aGlzLmQ9W107cmVxdWlyZSgnaHR0cHM6Ly9naXRlYS5jb20vQUk5NTcvSGlrZXIvcmF3L20vdi9qeEl0ZW0uanMnKTtqeEl0ZW0uanhMaXN0KCk7c2V0UmVzdWx0KGQpXFxcIixcXG4gICAgICAgIHVybDogXFxcInNlbGVjdDovL1xcXCIgKyBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICB0aXRsZTpcXFwi6Kej5p6Q566h55CGXFxcIixcXG4gICAgICAgIG9wdGlvbnM6IFtcXFwi5Y6f5patXFxcIiwgXFxcIumtlOaWrVxcXCJdLFxcbiAgICAgICAgY29sOiAyLFxcbiAgICAgICAganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgIGlmKGlucHV0PT1cXFwi5Y6f5patXFxcIil7XFxuICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eSNub1JlY29yZEhpc3RvcnkjQHJ1bGU9anM6dGhpcy5kPVtdO3JlcXVpcmUoJ2h0dHBzOi8vZ2l0ZWEuY29tL0FJOTU3L0hpa2VyL3Jhdy9tL3YvanhJdGVtLmpzJyk7anhJdGVtLmp4TGlzdCgpO3NldFJlc3VsdChkKVxcXCI7ICAgXFxuICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL1JvdXRlP3J1bGU9TXlGaWVsZOG0sOKBvyZ0eXBlPee8lui+kSNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNcXFwiICAgXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMydcXG4gICAgfSk7XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6K6+572u6aG15Luj56CBXCIsXCJwYXRoXCI6XCJzZXR0aW5nXCIsXCJydWxlXCI6XCJ2YXIgZCA9IFtdO1xcbnZhciBzZXRqc29uID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy94eXEvYXBwbXNldC5qc29uJywge30pKTtcXG52YXIgc3NtZCA9IHNldGpzb24uc3Ntb2RlO1xcbnZhciBzc3hjID0gc2V0anNvbi5zc2NvdW50O1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn5pCc57Si6K6+572uJyxcXG4gICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn5b2T5YmN77yaJyArICcoJyArIChzc21kID09IDEgPyAn6IGa5ZCI57uT5p6cJyA6ICflvJXmk47liJfooagnKSArICcpJyxcXG4gICAgdXJsOiAkKCdoaWtlcjovL2VtcHR5JykubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgdmFyIG1kID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy94eXEvYXBwbXNldC5qc29uJywge30pKS5zc21vZGU7XFxuXFxuICAgICAgICBpZiAobWQgPT0gMSkge1xcbiAgICAgICAgICAgIHZhciBmaWxlVXJsID0gZmV0Y2goXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMveHlxL2FwcG1zZXQuanNvblxcXCIsIHt9KS5yZXBsYWNlKCdcXFxcXFxcInNzbW9kZVxcXFxcXFwiOlxcXFxcXFwiMVxcXFxcXFwiJywgJ1xcXFxcXFwic3Ntb2RlXFxcXFxcXCI6XFxcXFxcXCIwXFxcXFxcXCInKTtcXG4gICAgICAgICAgICB3cml0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMveHlxL2FwcG1zZXQuanNvblxcXCIsIGZpbGVVcmwpO1xcbiAgICAgICAgICAgIGJhY2sodHJ1ZSk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+WIh+aNouS4uuaQnOe0ouW8leaTjuWIl+ihqOWNlemAieaooeW8j+aIkOWKn++8gSc7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHZhciBmaWxlVXJsID0gZmV0Y2goXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMveHlxL2FwcG1zZXQuanNvblxcXCIsIHt9KS5yZXBsYWNlKCdcXFxcXFxcInNzbW9kZVxcXFxcXFwiOlxcXFxcXFwiMFxcXFxcXFwiJywgJ1xcXFxcXFwic3Ntb2RlXFxcXFxcXCI6XFxcXFxcXCIxXFxcXFxcXCInKTtcXG4gICAgICAgICAgICAvL2xvZyhmaWxlVXJsKTtcXG4gICAgICAgICAgICB3cml0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMveHlxL2FwcG1zZXQuanNvblxcXCIsIGZpbGVVcmwpO1xcbiAgICAgICAgICAgIGJhY2sodHJ1ZSk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+WIh+aNouS4uuiBmuWQiOaQnOe0ouaooeW8j+aIkOWKn++8gSdcXG4gICAgICAgIH1cXG4gICAgfSksXFxuICAgIGNvbF90eXBlOiAndGV4dF8yJ1xcbn0pXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICfmkJzntKLotoXml7YoJyArICcnICsgZ2V0SXRlbSgnYXBwdGltb3V0JywgJycpICsgJyknLFxcbiAgICB1cmw6IFxcXCJpbnB1dDovL1xcXCIgKyAnMzAwMCcgKyBcXFwiLy8vL+ivt+iuvue9rui2heaXtuaXtumXtO+8jDEwMDDkuLrkuIDnp5LjgIIuanM6dmFyIG51bSA9IHBhcnNlSW50KGlucHV0KS50b1N0cmluZygpO2lmIChudW0gPT0gJ05hTid8fG51bTwxMDAwKSB7J3RvYXN0Oi8v6L6T5YWl55qE5YC85aW95YOP5LiN5q2j56Gu44CCJzt9IGVsc2Uge3NldEl0ZW0oJ2FwcHRpbW91dCcsIG51bSk7cmVmcmVzaFBhZ2UoKTsndG9hc3Q6Ly/orr7nva7miJDlip/jgIInfVxcXCIsXFxuICAgIGNvbF90eXBlOiAndGV4dF8yJ1xcbn0pO1xcblxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn5pCc57Si57q/56iLJyArICcoJyArIHNzeGMgKyAnKScsXFxuICAgIHVybDogXFxcImlucHV0Oi8vXFxcIiArIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgIHZhbHVlOiBcXFwiNVxcXCIsXFxuICAgICAgICBoaW50OiBcXFwi6K+36L6T5YWl5LiA5Liq5pW05pWw5pWw5a2X77yM5o6o6I2Q5pyA5aSn5LiN6KaB6LaF6L+HMTXjgIJcXFwiLFxcbiAgICAgICAganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgIHZhciBudW0gPSBwYXJzZUludChpbnB1dCkudG9TdHJpbmcoKTtcXG4gICAgICAgICAgICBpZiAobnVtID09ICdOYU4nIHx8IG51bSA8IDEpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+i+k+WFpeeahOWAvOWlveWDj+S4jeato+ehruOAgic7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdmFyIGZpbGVVcmwgPSBmZXRjaChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy94eXEvYXBwbXNldC5qc29uXFxcIiwge30pLnJlcGxhY2UoL1xcXFxcXFwic3Njb3VudFxcXFxcXFwiOlxcXFxcXFwiW1xcXFxkXSpcXFxcXFxcIi8sICdcXFxcXFxcInNzY291bnRcXFxcXFxcIjpcXFxcXFxcIicgKyBudW0gKyAnXFxcXFxcXCInKTtcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL3h5cS9hcHBtc2V0Lmpzb25cXFwiLCBmaWxlVXJsKTtcXG4gICAgICAgICAgICAgICAgYmFjayh0cnVlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S/neWtmOiuvue9ruaQnOe0oue6v+eoi+WujOaIkO+8gSdcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KSxcXG4gICAgfSksXFxuICAgIGNvbF90eXBlOiAndGV4dF8yJ1xcbn0pO1xcblxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn5pu05paw55u45YWzJyxcXG4gICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn5qOA5rWL5pu05pawJyxcXG4gICAgdXJsOiAkKCcnKS5sYXp5UnVsZSgobG9jdmVyKSA9PiB7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHZhciByZW1mID0gZmV0Y2hDYWNoZSgnaHR0cHM6Ly9jb2RlYmVyZy5vcmcvbHprMjM1NTkvY2xvdWRydWxlL3Jhdy9icmFuY2gvbWFzdGVyL2FwcG1vdmllLnR4dCcsIDI0KTtcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICByZW1mID0gJyc7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoL++/pWJhc2U2NC8udGVzdChyZW1mKSkge1xcbiAgICAgICAgICAgIHZhciByZW12ID0gSlNPTi5wYXJzZShiYXNlNjREZWNvZGUocmVtZi5zcGxpdCgnQCcpWzJdKSkudmVyc2lvbjtcXG4gICAgICAgIH0gZWxzZSBpZiAoL++/pWhvbWVfcnVsZe+/pS8udGVzdChyZW1mKSkge1xcbiAgICAgICAgICAgIHZhciByZW12ID0gSlNPTi5wYXJzZShyZW1mLnNwbGl0KCfvv6Vob21lX3J1bGXvv6UnKVsxXSkudmVyc2lvbjtcXG4gICAgICAgIH07XFxuICAgICAgICBpZiAoL++/pWhvbWVfcnVsZS8udGVzdChyZW1mKSkge1xcbiAgICAgICAgICAgIGxvZygn6L+c56iL54mI5pys77yaJyArIHJlbXYpO1xcbiAgICAgICAgICAgIGxvZygn5pys5Zyw54mI5pys77yaJyArIGxvY3Zlcik7XFxuICAgICAgICAgICAgaWYgKGxvY3ZlciAhPSByZW12KSB7XFxuICAgICAgICAgICAgICAgIHB1dFZhcignYXBwbnZlcicsIHJlbWYpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pyJ5paw54mI5pys77yM54K55a+85YWl5pu05paw5Y+v5pu05paw6KeE5YiZ44CCJztcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pqC5peg5paw54mI5pys77yMMjTlsI/ml7blhoXmo4DmtYvml6DmlYjjgIInXFxuICAgICAgICAgICAgfTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+ajgOa1i+abtOaWsOWksei0pe+8jOWPr+iDveS6keerr+aKvemjjuS6huOAgidcXG4gICAgICAgIH1cXG4gICAgfSwgbG9jdmVyKSxcXG4gICAgY29sX3R5cGU6ICd0ZXh0XzInXFxufSk7XFxuaWYgKGdldFZhcignYXBwbnZlcicpKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+WvvOWFpeabtOaWsCcsXFxuICAgICAgICB1cmw6ICQoJycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICByZXR1cm4gZ2V0VmFyKCdhcHBudmVyJyk7XFxuICAgICAgICB9KSxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF8yJ1xcbiAgICB9KTtcXG59XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICfmjqXlj6Pnm7jlhbMnLFxcbiAgICAvL3VybDonaGlrZXI6Ly9lbXB0eScsXFxuICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eScpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgIHZhciByZW1maWxlID0gJyc7XFxuICAgICAgICAvL2xvZyhyZW1maWxlKTtcXG4gICAgICAgIGlmICgvXFxcXD1odHRwLy50ZXN0KHJlbWZpbGUpKSB7XFxuICAgICAgICAgICAgd3JpdGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL3h5cS9BUFBNb3ZpZS50eHRcXFwiLCByZW1maWxlKTtcXG4gICAgICAgICAgICBiYWNrKHRydWUpO1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ojrflj5bkupHnq6/mlofku7blhpnmnKzlnLDmiJDlip/jgIInO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6I635Y+W5LqR56uv5paH5Lu25aSx6LSl44CCJ1xcbiAgICAgICAgfVxcbiAgICB9KSxcXG4gICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbn0pO1xcbnZhciBjbG1kID0gZ2V0SXRlbSgnY2xtb2RlJywgJzEnKTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+S6keerry/mnKzlnLAnICsgJygnICsgKGNsbWQgPT0gMSA/ICfmnKzlnLAnIDogJ+S6keerrycpICsgJyknLFxcbiAgICB1cmw6ICQoJycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgIHZhciBjbG1kID0gZ2V0SXRlbSgnY2xtb2RlJywgJzEnKTtcXG4gICAgICAgIGlmIChjbG1kID09IDEpIHtcXG4gICAgICAgICAgICBzZXRJdGVtKCdjbG1vZGUnLCAnMCcpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+WIh+aNouS4uuS6keerr+aOpeWPo+aIkOWKn++8jOivt+i/lOWbnuWIt+aWsOOAgic7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHNldEl0ZW0oJ2NsbW9kZScsICcxJyk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5YiH5o2i5Li65pys5Zyw5o6l5Y+j5oiQ5Yqf77yM6K+36L+U5Zue5Yi35paw44CCJ1xcbiAgICAgICAgfVxcbiAgICB9KSxcXG4gICAgY29sX3R5cGU6ICd0ZXh0XzInXFxufSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICfnvJbovpHmnKzlnLDmjqXlj6MnLFxcbiAgICB1cmw6ICQoJycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgIHJldHVybiAnZWRpdEZpbGU6Ly9oaWtlcjovL2ZpbGVzL3J1bGVzL3h5cS9BUFBNb3ZpZS50eHQnXFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogJ3RleHRfMidcXG59KTtcXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuacgOaWsOeroOiKglwiLFwicGF0aFwiOlwiY2hhcHRlclwiLFwicnVsZVwiOlwidmFyIGNocCA9IFtdO1xcbnRyeSB7XFxuICAgIHZhciBodG1sID0gSlNPTi5wYXJzZShnZXRSZXNDb2RlKCkpO1xcbiAgICBpZiAoaHRtbC52aWRlb2xpc3QpIHtcXG4gICAgICAgIHZhciBjb250cyA9IE9iamVjdC5rZXlzKGh0bWwudmlkZW9saXN0KTtcXG4gICAgfSBlbHNlIGlmIChodG1sLmRhdGEudm9kX3VybF93aXRoX3BsYXllcikge1xcbiAgICAgICAgdmFyIGNvbnRzID0gaHRtbC5kYXRhLnZvZF91cmxfd2l0aF9wbGF5ZXI7XFxuICAgICAgICBpZiAoY29udHMubGVuZ3RoIDwgMSkge1xcbiAgICAgICAgICAgIGNvbnRzID0gaHRtbC5kYXRhLnZvZF9wbGF5X3VybC5zcGxpdCgnJCQkJyk7XFxuICAgICAgICB9XFxuICAgIH0gZWxzZSBpZiAoaHRtbC5kYXRhLnZvZF9pbmZvICYmIGh0bWwuZGF0YS52b2RfaW5mby52b2RfdXJsX3dpdGhfcGxheWVyKSB7XFxuICAgICAgICB2YXIgY29udHMgPSBodG1sLmRhdGEudm9kX2luZm8udm9kX3VybF93aXRoX3BsYXllcjtcXG4gICAgICAgIGlmIChjb250cy5sZW5ndGggPCAxKSB7XFxuICAgICAgICAgICAgY29udHMgPSBodG1sLmRhdGEudm9kX2luZm8udm9kX3BsYXlfdXJsLnNwbGl0KCckJCQnKTtcXG4gICAgICAgIH1cXG4gICAgfSBlbHNlIGlmIChodG1sLmRhdGEubGVuZ3RoID09IDEpIHtcXG4gICAgICAgIHZhciBjb250cyA9IGh0bWwuZGF0YVswXS52b2RfcGxheV9saXN0O1xcbiAgICAgICAgLy9sb2coY29udHMpO1xcbiAgICAgICAgaWYgKGNvbnRzLmxlbmd0aCA8IDEpIHtcXG4gICAgICAgICAgICBjb250cyA9IGh0bWwuZGF0YVswXS52b2RfcGxheV91cmwuc3BsaXQoJyQkJCcpO1xcbiAgICAgICAgfVxcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgdmFyIGNvbnRzID0gaHRtbC5kYXRhLnZvZF9wbGF5X2xpc3Q7XFxuICAgICAgICBpZiAoY29udHMubGVuZ3RoIDwgMSkge1xcbiAgICAgICAgICAgIGNvbnRzID0gaHRtbC5kYXRhLnZvZF9wbGF5X3VybC5zcGxpdCgnJCQkJyk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb250cy5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgaWYgKGh0bWwudmlkZW9saXN0KSB7XFxuICAgICAgICAgICAgdmFyIGxpc3QgPSBodG1sLnZpZGVvbGlzdFtjb250c1tpXV07XFxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRzW2ldLnVybHMpIHtcXG4gICAgICAgICAgICB2YXIgbGlzdCA9IGNvbnRzW2ldLnVybHM7XFxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRzW2ldLnVybCkge1xcbiAgICAgICAgICAgIHZhciBsaXN0ID0gY29udHNbaV0udXJsLnNwbGl0KFxcXCIjXFxcIik7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHZhciBsaXN0ID0gY29udHNbaV0uc3BsaXQoXFxcIiNcXFwiKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGNocC5wdXNoKGxpc3QubGVuZ3RoKTtcXG4gICAgfVxcbn0gY2F0Y2ggKGUpIHt9XFxuLy9sb2coTWF0aC5tYXguYXBwbHkoTWF0aCxjaHApKTtcXG5zZXRSZXN1bHQoJ+abtOaWsOiHszonICsgKE1hdGgubWF4LmFwcGx5KE1hdGgsIGNocCkpKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWIhuexu+aQnOe0olwiLFwicGF0aFwiOlwic3MyXCIsXCJydWxlXCI6XCJqczpcXG52YXIgaXRlbXMgPSBbXTtcXG52YXIgRGF0YSA9IFtdO1xcbnZhciBub3dEYXRlID0gbmV3IERhdGUoKTtcXG52YXIgbW9udGggPSBub3dEYXRlLmdldE1vbnRoKCkgKyAxIDwgMTAgPyBcXFwiMFxcXCIgKyAobm93RGF0ZS5nZXRNb250aCgpICsgMSkgOiBub3dEYXRlLmdldE1vbnRoKCkgKyAxO1xcbnZhciBkYXkgPSBub3dEYXRlLmdldERhdGUoKSA8IDEwID8gXFxcIjBcXFwiICsgbm93RGF0ZS5nZXREYXRlKCkgOiBub3dEYXRlLmdldERhdGUoKTtcXG52YXIgZGF0ZVN0ciA9IG1vbnRoICsgJycgKyBkYXk7XFxuLy/lj5bmkJzntKLnur/nqIvorr7nva5cXG52YXIgc3N4YyA9IEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vZmlsZXMvcnVsZXMveHlxL2FwcG1zZXQuanNvbicsIHt9KSkuc3Njb3VudDtcXG4vL+iuvue9rui2heaXtuaXtumXtO+8jOi2iuWwj+i2iuW/q++8jOWNleS9jeavq+enklxcbnZhciB0aW1lb3UgPSBnZXRJdGVtKCdhcHB0aW1vdXQnLCAnMzAwMCcpO1xcbnZhciBrZXkgPSBNWV9VUkwuc3BsaXQoJyQkJCcpWzFdO1xcbnZhciBudW0gPSBNWV9VUkwuc3BsaXQoJyQkJCcpWzJdO1xcbnZhciBsZSA9IHBhcnNlSW50KG51bSAqIHNzeGMpO1xcbnZhciBUaXQgPSBbXTtcXG5sZXQgbGlzdCA9IE1ZX1BBUkFNUy5saXN0O1xcbmxldCB0eXRpdCA9IE1ZX1BBUkFNUy50eXRpdDtcXG5sZXQgcGFnZWlkID0gXFxcIl9fYXBwXFxcIiArIG51bTtcXG50cnkge1xcbiAgICBmb3IgKHZhciBqID0gbGUgLSBzc3hjOyBqIDwgbGU7IGorKykge1xcbiAgICAgICAgaWYgKGogPCBsaXN0Lmxlbmd0aCkge1xcbiAgICAgICAgICAgIHZhciBsaW5rID0gbGlzdFtqXS51cmw7XFxuICAgICAgICAgICAgdmFyIGxpdGl0ID0gbGlzdFtqXS5tdXJsO1xcbiAgICAgICAgICAgIGlmICgvXFxcXC92b2RcXFxcLy9pLnRlc3QobGluaykpIHtcXG4gICAgICAgICAgICAgICAgaWYgKC8zN1xcXFwuMTYxfDIxNlxcXFwuOTh8cGhvZWJlfGhmeXM4fGZlaWZhbjEyfHR2enl8aGR5YW5ndHZ8dGt5c3x0ZWdvdXlzLy50ZXN0KGxpbmspKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgaG11cmwgPSBsaW5rICsgJz9hYz1saXN0JnptPScgKyBrZXkgKyAnJnBhZ2U9MSc7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgaG11cmwgPSBsaW5rICsgJz9hYz1saXN0JndkPScgKyBrZXkgKyAnJnBhZ2U9MSc7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBpZiAoL2RpamlheGlhLy50ZXN0KGxpbmspKSB7XFxuICAgICAgICAgICAgICAgICAgICBsaW5rID0gJ2h0dHA6Ly93d3cuZGlqaWF4aWEuY29tL2FwaS5waHAvYXBwLydcXG4gICAgICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICAgICAgaWYgKGxpbmsuaW5kZXhPZignYXBpLnBocC9hcHAvJykgIT0gLTEpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciBobXVybCA9IGxpbmsgKyAnc2VhcmNoP3BnPTEmdGV4dD0nICsga2V5ICsgJyZ0b2tlbj0nO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxpbmsuaW5kZXhPZigneGdhcHAucGhwL3YxLycpICE9IC0xKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgaG11cmwgPSBsaW5rICsgJ3NlYXJjaD9wZz0xJnRleHQ9JyArIGtleTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICgvaW9wZW55dW4vLnRlc3QobGluaykpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaG11cmwgPSBsaW5rICsgJy9saXN0P3BhZ2U9ZnlwYWdlJmxpbWl0PTEwJndkPScgKyBrZXk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBobXVybCA9IGxpbmsgKyAnP3BhZ2U9MSZsaW1pdD0xMCZ3ZD0nICsga2V5O1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIC8vRGF0YS5wdXNoKHt1cmw6IGhtdXJsLG9wdGlvbnM6IHtoZWFkZXJzOiB7XFxcIlVzZXItQWdlbnRcXFwiOiBcXFwiRGFydC8yLjE0IChkYXJ0OmlvKVxcXCJ9LHRpbWVvdXQ6IHRpbWVvdX19KTtcXG4gICAgICAgICAgICBEYXRhLnB1c2goe1xcbiAgICAgICAgICAgICAgICB1cmw6IGhtdXJsLFxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiB7XFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBsaW5rLmluZGV4T2YoXFxcIm1vZ2FpX2FwaVxcXCIpICE9IC0xID8gXFxcIkRhcnQvMi4xNCAoZGFydDppbylcXFwiIDogXFxcIm9raHR0cC80LjEuMFxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICB0aW1lb3V0OiB0aW1lb3VcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIFRpdC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0OiBsaXN0W2pdLnRpdGxlLFxcbiAgICAgICAgICAgICAgICBsaW5rOiBsaW5rLFxcbiAgICAgICAgICAgICAgICB0eXBubTogbGl0aXRcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0gLy9pZlxcbiAgICB9IC8vZm9yIGpcXG59IGNhdGNoIChlKSB7fVxcbmlmIChEYXRhLmxlbmd0aCA8PSAwKSB7XFxuICAgIHNldFJlc3VsdChbXSk7XFxufSBlbHNlIHtcXG4gICAgaXRlbXMucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuato+WcqOWKoOi9veS4reesrFxcXCIgKyBNWV9QQUdFICsgXFxcIumhte+8jOi/m+W6pu+8mjEvXFxcIiArIERhdGEubGVuZ3RoLFxcbiAgICAgICAgdXJsOiBcXFwiXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICBkZXNjOiBcXFwiXFxcIixcXG4gICAgICAgIHBpY191cmw6IFxcXCJcXFwiLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBpZDogcGFnZWlkXFxuICAgICAgICB9XFxuICAgIH0pO1xcbiAgICBzZXRSZXN1bHQoaXRlbXMpO1xcbiAgICBsZXQgdGFza3MgPSBbXTtcXG5cXG4gICAgZm9yIChsZXQgayBpbiBEYXRhKSB7XFxuICAgICAgICBsZXQgaXQgPSBEYXRhW2tdO1xcbiAgICAgICAgdGFza3MucHVzaCh7XFxuICAgICAgICAgICAgZnVuYzogZnVuY3Rpb24ocGFyYW0pIHtcXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICAgICAgbGV0IGh0bWwgPSBmZXRjaChwYXJhbS5pdC51cmwsIHBhcmFtLml0Lm9wdGlvbnMpO1xcbiAgICAgICAgICAgICAgICAvL2xvZyhodG1sKTtcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIGh0bWwgPSBodG1sLnN1YnN0cmluZygwLCAyKSA9PSAnXFxcXHJcXFxcbicgPyBodG1sLnJlcGxhY2UoJ1xcXFxyXFxcXG4nLCAnJykgOiBodG1sO1xcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcbiAgICAgICAgICAgICAgICBpZiAoL2J0d2FmLy50ZXN0KGh0bWwpKSB7XFxuICAgICAgICAgICAgICAgICAgICBodG1sID0gZmV0Y2gocGFyYW0uaXQudXJsICsgJyZidHdhZicgKyBodG1sLm1hdGNoKC9idHdhZiguKj8pXFxcXFxcXCIvKVsxXSwge30pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmIChodG1sID09IFxcXCJcXFwiIHx8IGh0bWwgPT0gbnVsbCB8fCBodG1sLnN1YnN0cmluZygwLCA1KSA9PSAnZXJyb3InIHx8ICFodG1sLmVuZHNXaXRoKCd9JykpIHtcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBhcmFtLnRpdC50aXQgKyAnICcgKyAn5pyq5pCc57Si5Yiw77yM54K55Ye76K6/6Zeu5Y6f572R6aG1JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHBhcmFtLml0LnVybCArIGBAbGF6eVJ1bGU9LmpzOmlucHV0LnNwbGl0KCc7JylbMF1gLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBpY191cmw6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGh0bWwubGVuZ3RoIDwgODApIHtcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBhcmFtLnRpdC50aXQgKyAnICcgKyAn6L+U5Zue5pWw5o2u5LiN5a6M5pW077yM54K55Ye76K6/6Zeu5Y6f572R6aG1JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHBhcmFtLml0LnVybCArIGBAbGF6eVJ1bGU9LmpzOmlucHV0LnNwbGl0KCc7JylbMF1gLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBpY191cmw6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgaHRtbCA9IEpTT04ucGFyc2UoaHRtbCk7XFxuICAgICAgICAgICAgICAgICAgICAvL2xvZyhodG1sKTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0eXBldCA9IHBhcmFtLnRpdC50eXBubTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0ZG9taW4gPSBwYXJhbS50aXQubGluaztcXG4gICAgICAgICAgICAgICAgICAgIGlmIChodG1sLmxpc3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdCA9IGh0bWwubGlzdDtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaHRtbC5kYXRhLmxpc3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdCA9IGh0bWwuZGF0YS5saXN0O1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChodG1sLmRhdGEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdCA9IGh0bWwuZGF0YTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpc3QgPSBbXTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGlmIChsaXN0Lmxlbmd0aCA8IDEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogcGFyYW0udGl0LnRpdCArICcgJyArICfliJfooajlsI/kuo4x77yM5peg5rOV5bGV56S677yM54K55Ye76K6/6Zeu5Y6f572R6aG1JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBwYXJhbS5pdC51cmwgKyBgQGxhenlSdWxlPS5qczppbnB1dC5zcGxpdCgnOycpWzBdYCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY191cmw6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoL1xcXFwvdm9kXFxcXC8vLnRlc3QodGRvbWluKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gbGlzdFtpXS50aXRsZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwaWMgPSBsaXN0W2ldLnBpYztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWQgPSBsaXN0W2ldLm5leHRsaW5rO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbSA9IGxpc3RbaV0uc3RhdGU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGRvbWluLmluZGV4T2YoJ2FwaS5waHAvYXBwLycpICE9IC0xKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gbGlzdFtpXS52b2RfbmFtZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGljID0gbGlzdFtpXS52b2RfcGljO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvZmFudHVhbi8udGVzdCh0ZG9taW4pKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWQgPSAnaHR0cHM6Ly9mYW50dWFuLndrZmlsZS5jb20vYXBpLnBocC9hcHAvdmlkZW9fZGV0YWlsP2lkPScgKyBsaXN0W2ldLnZvZF9pZCArICcmdG9rZW49JztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmlkID0gdGRvbWluICsgJ3ZpZGVvX2RldGFpbD9pZD0nICsgbGlzdFtpXS52b2RfaWQgKyAnJnRva2VuPSc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZW0gPSBsaXN0W2ldLnZvZF9yZW1hcmtzO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdmFyIGNvbj1saXN0W2ldLnR5cGUudHlwZV9kZXM7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRkb21pbi5pbmRleE9mKCd4Z2FwcC5waHAvdjEvJykgIT0gLTEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSBsaXN0W2ldLnZvZF9uYW1lO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwaWMgPSBsaXN0W2ldLnZvZF9waWM7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZpZCA9IHRkb21pbiArICd2aWRlb19kZXRhaWw/aWQ9JyArIGxpc3RbaV0udm9kX2lkO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZW0gPSBsaXN0W2ldLnZvZF9yZW1hcmtzO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdmFyIGNvbj1saXN0W2ldLnR5cGUudHlwZV9kZXM7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IGxpc3RbaV0udm9kX25hbWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBpYyA9IGxpc3RbaV0udm9kX3BpYztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoL2lvcGVueXVuLy50ZXN0KHRkb21pbikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZpZCA9IHRkb21pbiArICcvZGV0YWlsSUQ/dm9kX2lkPScgKyBsaXN0W2ldLnZvZF9pZCArICcmdG9rZW49JztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9ncmVsaWdodGluZy8udGVzdCh0ZG9taW4pKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWQgPSB0ZG9taW4gKyAnLz9pZHM9JyArIGxpc3RbaV0udm9kX2lkICsgJyZ0b2tlbj0nO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWQgPSB0ZG9taW4gKyAnL2RldGFpbD9rZXk9JyArIGRhdGVTdHIgKyAnJnZvZF9pZD0nICsgbGlzdFtpXS52b2RfaWQgKyAnJnRva2VuPSc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZW0gPSBsaXN0W2ldLnZvZF9yZW1hcmtzO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdmFyIGNvbj1saXN0W2ldLnR5cGUudHlwZV9kZXM7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy92YXIgY29uPWxpc3RbaV0uc3RhdGU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9nKHZpZCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogTVlfVFlQRSA9PSBcXFwiaG9tZVxcXCIgPyB0aXRsZS5yZXBsYWNlKGtleSwgJ+KAnOKAnCcgKyBrZXkgKyAn4oCd4oCdJykgKyAnXFxcXG4nICsgcmVtIDogdGl0bGUgKyByZW0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBwaWMgKyAnQFJlZmVyZXI9JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCh0ZG9taW4uaW5kZXhPZihcXFwibW9nYWlfYXBpXFxcIikgIT0gLTEgPyB2aWQgKyAnO2dldDt1dGYtODt7VXNlci1BZ2VudEBEYXJ0LzIuMTQgKGRhcnQ6aW8pfScgOiB2aWQgKyAnO2dldDt1dGYtODt7VXNlci1BZ2VudEBva2h0dHAvNC4xLjB9JykucnVsZSgodGRvbWluLCB0a3QsIHBhdHQpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzID0ge307XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW1zID0gW107XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRrdCAhPSAnJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQYWdlVGl0bGUodGt0ICsgJy0nICsgcGF0dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBodG1sID0gSlNPTi5wYXJzZShnZXRSZXNDb2RlKCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICcyNTUmJmZsb2F0JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICd4NV93ZWJ2aWV3X3NpbmdsZSdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbXl1cmwgPSBNWV9VUkwubWF0Y2goLyhbXFxcXFNdKj86XFxcXC9cXFxcL1tcXFxcU10qPylcXFxcLy8pWzFdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvXFxcXC92b2RcXFxcLy8udGVzdCh0ZG9taW4pKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL3R2bW92bGlzdCcsIHt9KSkucnVsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvYXBwbW92bGlzdCcsIHt9KSkucnVsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gaXRlbXM7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SG9tZVJlc3VsdChyZXMpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGRvbWluLCBwYXJhbS50aXQudGl0LCB0aXRsZSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnRlbnQ6IHJlbSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IHR5dGl0ICsgJyA9PiAnICsgcGFyYW0udGl0LnRpdCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV92ZXJ0aWNhbF9waWMnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gLy9mb3IgaVxcbiAgICAgICAgICAgICAgICAgICAgfSAvL2lmIGxpc3QubGVuZ3RoXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBwYXJhbToge1xcbiAgICAgICAgICAgICAgICBpdDogaXQsXFxuICAgICAgICAgICAgICAgIHRpdDogVGl0W2tdXFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBpZDogXFxcInRhc2tcXFwiXFxuICAgICAgICB9KVxcbiAgICB9XFxuXFxuICAgIGJhdGNoRXhlY3V0ZSh0YXNrcywge1xcbiAgICAgICAgZnVuYzogZnVuY3Rpb24ocGFyYW0sIGlkLCBlcnJvciwgcmVzdWx0KSB7XFxuICAgICAgICAgICAgLy9sb2coXFxcImxpc3RlbmVyOiBcXFwiICsgKHJlc3VsdCB8fCBbXSkubGVuZ3RoKVxcbiAgICAgICAgICAgIHBhcmFtLmkgPSBwYXJhbS5pICsgMTtcXG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGl0IG9mIHJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICAgICAgcGFyYW0uaiA9IHBhcmFtLmogKyAxO1xcbiAgICAgICAgICAgICAgICAgICAgYWRkSXRlbUJlZm9yZShwYWdlaWQsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXQudGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogaXQuZGVzYyxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGl0LnVybCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBpdC5waWNfdXJsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBpdC5jb2xfdHlwZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogXFxcIl9fYXBwXFxcIiArIE1ZX1BBR0UgKyBcXFwiQFxcXCIgKyBwYXJhbS5qXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAocGFyYW0uaSA+PSBwYXJhbS5hbGwpIHtcXG4gICAgICAgICAgICAgICAgZGVsZXRlSXRlbShwYWdlaWQpXFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdXBkYXRlSXRlbSh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuato+WcqOWKoOi9veesrFxcXCIgKyBNWV9QQUdFICsgXFxcIumhte+8jOi/m+W6pu+8mlxcXCIgKyAocGFyYW0uaSArIDEpICsgXFxcIi9cXFwiICsgcGFyYW0uYWxsLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIHBpY191cmw6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogcGFnZWlkXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSxcXG4gICAgICAgIHBhcmFtOiB7XFxuICAgICAgICAgICAgYWxsOiBEYXRhLmxlbmd0aCxcXG4gICAgICAgICAgICBpOiAwLFxcbiAgICAgICAgICAgIGo6IC0xXFxuICAgICAgICB9XFxuICAgIH0pXFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5pWw5o2u6L2s5o2iXCIsXCJwYXRoXCI6XCJjb252ZXJcIixcInJ1bGVcIjpcIi8vanM6XFxuLy9yZW0ocmVzKTtcXG52YXIg6K6w5b2VID0gW107XFxudmFyIOi+k+WFpeadoeebriA9IHJlbWZpbGUubWF0Y2goLy4rPWh0dHAuKy9nKTtcXG5mb3IgKHZhciBqIGluIOi+k+WFpeadoeebrikge1xcbiAgICB2YXIgdGl0bGUgPSDovpPlhaXmnaHnm65bal0uc3BsaXQoJ0AnKVsxXS5zcGxpdCgnPScpWzBdO1xcbiAgICB2YXIgdXJsID0g6L6T5YWl5p2h55uuW2pdLnNwbGl0KCc9JylbMV0uc3BsaXQoJyMnKVswXTtcXG4gICAgdmFyIGltZyA9IOi+k+WFpeadoeebrltqXS5zcGxpdCgnIycpWzFdO1xcbiAgICBpZiAoaW1nLmluZGV4T2YoXFxcImh0dHBcXFwiKSAhPSAtMSkge1xcbiAgICAgICAgdmFyIGltZyA9IGltZztcXG4gICAgfSBlbHNlIGlmIChpbWcgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgIHZhciBpbWcgPSBcXFwiaHR0cHM6Ly9naXRjb2RlLm5ldC9tMF83MjM5NTIwNS9pcHR2Ly0vcmF3L21hc3Rlci9BcHBGaWxlL0FwcEljb24v6YCa55So5Zu+5qCHLnBuZ1xcXCJcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHZhciBpbWcgPSBcXFwiaHR0cHM6Ly9naXRjb2RlLm5ldC9tMF83MjM5NTIwNS9pcHR2Ly0vcmF3L21hc3Rlci9BcHBGaWxlL0FwcEljb24vXFxcIiArIGltZyArIFxcXCIucG5nXFxcIjtcXG4gICAgfVxcbiAgICBpZiAodXJsLnNlYXJjaCgvYXBpXFxcXC5waHBcXFxcLy4qP1xcXFwvdm9kLykgIT0gLTEpIHtcXG4gICAgICAgIHZhciBtdXJsID0gXFxcInE6VFblvbHop4ZcXFwiO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgdmFyIG11cmwgPSBcXFwicTpBUFDlvbHop4ZcXFwiO1xcbiAgICB9XFxuICAgIGlmICjovpPlhaXmnaHnm65bal0uc3BsaXQoJ0AnKVswXSAhPSBcXFwiXFxcIikge1xcbiAgICAgICAgdmFyIHR5cGUgPSDovpPlhaXmnaHnm65bal0uc3BsaXQoJ0AnKVswXTtcXG4gICAgfSBlbHNlIGlmICh1cmwuaW5kZXhPZihcXFwiYXBpLnBocC9hcHBcXFwiKSAhPSAtMSB8fCB1cmwuaW5kZXhPZihcXFwieGdhcHBcXFwiKSAhPSAtMSkge1xcbiAgICAgICAgdmFyIHR5cGUgPSBcXFwi5bCP6b6fXFxcIjtcXG4gICAgfSBlbHNlIGlmICh1cmwuaW5kZXhPZihcXFwiLnZvZFxcXCIpICE9IC0xKSB7XFxuICAgICAgICB2YXIgdHlwZSA9IFxcXCLmma7pgJpcXFwiO1xcbiAgICB9IGVsc2UgaWYgKHVybC5zZWFyY2goL2FwaVxcXFwucGhwXFxcXC8uKz9cXFxcL3ZvZFxcXFwvLykgIT0gLTEpIHtcXG4gICAgICAgIHZhciB0eXBlID0gXFxcIuelnumprFxcXCI7XFxuICAgIH1cXG4gICAg6K6w5b2VLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgdXJsOiB1cmwsXFxuICAgICAgICBpbWc6IGltZyxcXG4gICAgICAgIG11cmw6IG11cmwsXFxuICAgICAgICB0eXBlOiB0eXBlXFxuICAgIH0pO1xcbn1cXG52YXIg5paw6K6w5b2VID0gW107XFxuXFxuZm9yICh2YXIgaSBpbiDorrDlvZUpIHtcXG4gICAgdmFyIOW9k+WJjeadoeebriA9IFtdO1xcbiAgICDlvZPliY3mnaHnm64ucHVzaCjorrDlvZVbaV0pO1xcbiAgICBpZiAo5paw6K6w5b2VLmxlbmd0aCA9PSAwKSB7XFxuICAgICAgICDmlrDorrDlvZUucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IOiusOW9lVtpXS50eXBlLFxcbiAgICAgICAgICAgIGxpc3Q6IOW9k+WJjeadoeebrlxcbiAgICAgICAgfSk7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICBsZXQgcmVzID0g5paw6K6w5b2VLnNvbWUoaXRlbSA9PiB7XFxuICAgICAgICAgICAgLy/liKTmlq3nsbvlnovvvIzmnInlsLHmt7vliqDliLDlvZPliY3poblcXG4gICAgICAgICAgICBpZiAoaXRlbS50aXRsZSA9PSDorrDlvZVbaV0udHlwZSkge1xcbiAgICAgICAgICAgICAgICBpdGVtLmxpc3QgPSDlvZPliY3mnaHnm64uY29uY2F0KGl0ZW0ubGlzdC5maWx0ZXIoZCA9PiBkLnVybCAhPSDorrDlvZVbaV0udXJsKSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgICAgICBpZiAoIXJlcykge1xcbiAgICAgICAgICAgIC8v5aaC5p6c5rKh5om+55u45ZCM57G75Z6L5re75Yqg5LiA5Liq57G75Z6LXFxuICAgICAgICAgICAg5paw6K6w5b2VLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTog6K6w5b2VW2ldLnR5cGUsXFxuICAgICAgICAgICAgICAgIGxpc3Q6IOW9k+WJjeadoeebrlxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICB9XFxufVxcbnZhciBuZXdmaWxlID0ge307XFxubmV3ZmlsZS5kYXRhID0g5paw6K6w5b2VO1xcbi8vbG9nKHJlbWZpbGUpO1wifV0sXCJwYXJhbXNcIjpcIntcXFwiaWRcXFwiOlxcXCJfX2FwcDFAMTFcXFwifVwiLFwic2F2ZWRcIjpmYWxzZSxcInRpdGxlXCI6XCJBUFDlvbHop4YoUClcIixcInZlcnNpb25cIjowLFwidXJsXCI6XCJodHRwOi8vYmJxLjEwMDYudGsvYXBpLnBocC92MS52b2QvZGV0YWlsP2tleT0wMTE5JnZvZF9pZD0xNDY5NDEzJnRva2VuPTtnZXQ7dXRmLTg7e1VzZXItQWdlbnRAb2todHRwLzQuMS4wfVwiLFwiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcImZpbmRfcnVsZVwiOlwianM6KFxcbih0ZG9taW4sIHRrdCwgcGF0dCkgPT4ge1xcbiAgICB2YXIgcmVzID0ge307XFxuICAgIHZhciBpdGVtcyA9IFtdO1xcbiAgICBpZiAodGt0ICE9IFxcXCJcXFwiKSB7XFxuICAgICAgICBzZXRQYWdlVGl0bGUodGt0ICsgXFxcIi1cXFwiICsgcGF0dCk7XFxuICAgIH1cXG4gICAgdmFyIGh0bWwgPSBKU09OLnBhcnNlKGdldFJlc0NvZGUoKSk7XFxuICAgIGl0ZW1zLnB1c2goe3RpdGxlOiBcXFwiXFxcIiwgZGVzYzogXFxcIjI1NSYmZmxvYXRcXFwiLCB1cmw6IFxcXCJcXFwiLCBjb2xfdHlwZTogXFxcIng1X3dlYnZpZXdfc2luZ2xlXFxcIn0pO1xcbiAgICB2YXIgbXl1cmwgPSBNWV9VUkwubWF0Y2goLyhbXFxcXFNdKj86XFxcXC9cXFxcL1tcXFxcU10qPylcXFxcLy8pWzFdO1xcbiAgICBpZiAoL1xcXFwvdm9kXFxcXC8vLnRlc3QodGRvbWluKSkge1xcbiAgICAgICAgZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL3BhZ2UvdHZtb3ZsaXN0XFxcIiwge30pKS5ydWxlKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9wYWdlL2FwcG1vdmxpc3RcXFwiLCB7fSkpLnJ1bGUpO1xcbiAgICB9XFxuICAgIHJlcy5kYXRhID0gaXRlbXM7XFxuICAgIHNldEhvbWVSZXN1bHQocmVzKTtcXG59XFxuKShcXFwiaHR0cDovL2JicS4xMDA2LnRrL2FwaS5waHAvdjEudm9kXFxcIixcXFwiSEflvbHop4ZcXFwiLFxcXCLkuInkvZNcXFwiKVwiLFwiZ3JvdXBcIjpcIuinhumikVwiLFwidWFcIjpcIm1vYmlsZVwiLFwicHJlUnVsZVwiOlwiaWYgKCFmaWxlRXhpc3QoJ2hpa2VyOi8vZmlsZXMvcnVsZXMveHlxL2FwcG1zZXQuanNvbicpKSB7XFxuICAgIGxldCBzZXQgPSBge1xcXCJzc21vZGVcXFwiOlxcXCIwXFxcIixcXFwic3Njb3VudFxcXCI6XFxcIjVcXFwiLFxcXCJlbkRuXFxcIjpcXFwiMFxcXCJ9YDtcXG4gICAgd3JpdGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL3h5cS9hcHBtc2V0Lmpzb25cXFwiLCBzZXQpO1xcbn07XFxuaWYgKCFmaWxlRXhpc3QoJ2hpa2VyOi8vZmlsZXMvcnVsZXMveHlxL0FQUE1vdmllLnR4dCcpKSB7XFxuICAgIHNldEl0ZW0oJ2NsbW9kZScsICcxJyk7XFxuICAgIGxldCBzaGlsaSA9IFxcXCLnpLrkvovliIbnsbvlkI1A56S65L6L5ZCN56ewPeekuuS+i+aOpeWPo+mTvuaOpSPnpLrkvovlm77niYfpk77mjqVcXFxcbuS8mOi0qEDpkp/nibnlvbHop4Y9aHR0cHM6Ly9hcHAuenRleXMuY29tL2FwaS5waHAvdjEudm9kI+mSn+eJueW9seinhlxcXCI7XFxuICAgIHdyaXRlRmlsZShcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy94eXEvQVBQTW92aWUudHh0XFxcIiwgc2hpbGkpO1xcbn07XFxudmFyIHJ1bGVzZXQgPSBmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy94eXEvYXBwbXNldC5qc29uJywge30pO1xcbmlmICghSlNPTi5wYXJzZShydWxlc2V0KS5lbkRuKSB7XFxuICAgIGxldCBzZXQgPSBydWxlc2V0LnJlcGxhY2UoJ1xcXFxcXFwiXFxcXH0nLCAnXFxcXFxcXCJcXFxcLFxcXFxcXFwiZW5EblxcXFxcXFwiXFxcXDpcXFxcXFxcIjBcXFxcXFxcIlxcXFx9Jyk7XFxuICAgIHdyaXRlRmlsZShcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy94eXEvYXBwbXNldC5qc29uXFxcIiwgc2V0KTtcXG59O1wiLFwicGFnZXNcIjpcIlt7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLmjqXlj6PmlbDmja4yMDIyLzEwLzEyXFxcIixcXFwicGF0aFxcXCI6XFxcIlJlc0NvZGVcXFwiLFxcXCJydWxlXFxcIjpcXFwi5LyY6LSoQOaaluWFieW9seinhj1odHRwczovL2FwcC5ibDIxMC5jb20vYXBpLnBocC92MS52b2Qj5pqW5YWJ5b2x6KeGXFxcXG7kvJjotKhA5aWI6Z2e6L+3PWh0dHBzOi8vYXBwLm5ldGZsaXhtaS5jb20vYXBpLnBocC92MS52b2Qj5aWI6Z2e6L+35b2x6KeGXFxcXG7kvJjotKhA576O5Ymn6IyDPWh0dHA6Ly90dHptei5uZXQvYXBpLnBocC92MS52b2Qj576O5Ymn6IyDXFxcXG7kvJjotKhA6Zu25Yi75b2x6ZmiPWh0dHBzOi8veXMubGluZzAwLmNuL2FwaS5waHAvdjEudm9kI+mbtuWIu+W9semZolxcXFxu5LyY6LSoQOauteWPi+W9seinhj1odHRwczovL3NoYW5namlodW9rZS5jb20vYXBpLnBocC90di52b2Qj5q615Y+L5b2x6KeGXFxcXG7kvJjotKhA54us5pKt56S+PWh0dHA6Ly8zNXlzLmNjL2FwaS5waHAvdjEudm9kI+eLrOaSreekvlxcXFxu5LyY6LSoQOWIm+aEj+W9seinhj1odHRwczovL3d3dy4zMGRpYW4uY24vYXBpLnBocC92MS52b2Qj5Yib5oSP5b2x6KeGXFxcXG7kvJjotKhA5Ze35ZGc6KeG6aKRPWh0dHA6Ly93d3cuY3g5OTk5OS5jbi9sdmRvdV9hcGkucGhwL3YxLnZvZCPll7flkZzop4bpopFcXFxcbuS8mOi0qEDniLHpurvoirHlvbHop4Y9aHR0cDovL3YuamlleGkud29yay9xaW5nZG91amlla291LnBocC92MS52b2Qj54ix6bq76Iqx5b2x6KeGXFxcXG7kvJjotKhA54ix6YW35b2x6KeGPWh0dHBzOi8vd3d3LnpoYW5sYW5nYnUuY29tL3J1aWZlbmdsYl9hcGkucGhwL3YxLnZvZCPniLHphbflvbHop4ZcXFxcbuS8mOi0qEBIR+W9seinhj1odHRwOi8vYmJxLjEwMDYudGsvYXBpLnBocC92MS52b2QjSEflvbHop4ZcXFxcbuS8mOi0qEBGN+mrmOa4hT1odHRwOi8vYmMuaGFva2FuanUxLmNjL2x2ZG91X2FwaS5waHAvdjEudm9kI0Y36auY5riFXFxcXG7mma7pgJpA6L+95Ymn5b2x6ZmiPWh0dHA6Ly84Mi4xNTcuOTguMTI5L2x2ZG91X2FwaS5waHAvdjEudm9kI+i/veWJp+W9semZolxcXFxu5pmu6YCaQOi/veWJp+WQpz1odHRwOi8vMTE3LjUwLjE2My40NTo4OC9sdmRvdV9hcGkucGhwL3YxLnZvZCPov73liaflkKdcXFxcbuaZrumAmkDov73liadUVj1odHRwOi8vMTExLjIyOS4xMjAuMTgwOjg4L2x2ZG91X2FwaS5waHAvdjIudm9kI+i/veWJp1RWXFxcXG7mma7pgJpA5riU5riU5b2x6KeGPWh0dHA6Ly9sdW9iby55dWdlbnllLnNpdGUvYXBpLnBocC92MS52b2Qj5riU5riU5b2x6KeGXFxcXG7mma7pgJpA5L2Z55Sf5b2x6KeGPWh0dHA6Ly95dS5jdWljYW55cy5jbi9sdmRvdV9hcGkucGhwL3YxLnZvZCPkvZnnlJ/lvbHop4ZcXFxcbuaZrumAmkDlvbHop4bnjKs9aHR0cHM6Ly92aXAud3NjeXVuLmNvbS9hcGkucGhwL3YxLnZvZCPlvbHop4bnjKtcXFxcbuaZrumAmkDlvbHop4blpKflhag9aHR0cHM6Ly94Yy54aXhpMnl5Lnh5ei9tb2dhaV9hcGkucGhwL3YxLnZvZCPlvbHop4blpKflhahIRFxcXFxu5pmu6YCaQOWRgOWTqeWKqOa8qz1odHRwczovL2FwcC55YWxpeWFsaS5jYy9hcGkucGhwL3YxLnZvZCPlkYDlk6nliqjmvKtcXFxcbuaZrumAmkDlvbHlupM9aHR0cHM6Ly95aW5na3VkeS5jb20vbHZkb3VfYXBpLnBocC92MS52b2Qj5b2x5bqTXFxcXG7mma7pgJpA5pyI5YS/5b2x6KeGPWh0dHBzOi8veXVlNTIueHl6L2FwaS5waHAvdjEudm9kI1xcXFxu5pmu6YCaQOaYn+Wuv+a8qz1odHRwOi8vMy54aW5neGl1bWFuLmNvbS9tb2dhaV9hcGkucGhwL3YxLnZvZCPmmJ/lrr/mvKtcXFxcbuaZrumAmkDlsI/puJ/liqjmvKs9aHR0cDovL3h5ZG0uYmFpY2FpLmJ1enovbW9nYWlfYXBpLnBocC92MS52b2Qj5bCP6bif5Yqo5ryrXFxcXG7mma7pgJpA54aK54yr6KeG6aKRPWh0dHA6Ly9hbmVnaC5jb20vbHZkb3VfYXBpLnBocC92MS52b2Qj54aK54yr6KeG6aKRXFxcXG7mma7pgJpA54aK54yr5Yqo5ryrPWh0dHA6Ly9kb25nbWFuLms4YWEuY29tL21vZ2FpX2FwaS5waHAvdjEudm9kI+eGiueMq+WKqOa8q1xcXFxu5pmu6YCaQOS4h+iDveW9semZoj1odHRwOi8vYXBwLndudm9kLm5ldC9sdmRvdV9hcGkucGhwL3YxLnZvZCPkuIfog73lvbHpmaJcXFxcbuaZrumAmkDonJfniZvliqjmvKs9aHR0cDovL3dvbml1ZG0ud29uaXUuY3lvdToyMDAwMC9tb2dhaV9hcGkucGhwL3YxLnZvZCPonJfniZvliqjmvKtcXFxcbuaZrumAmkDmiJHniLHot5/liac9aHR0cHM6Ly93d3cuZ2VubW92LmNvbS9tb2dhaV9hcGkucGhwL3YxLnZvZCPmiJHniLHot5/liadcXFxcbuaZrumAmkDmt5jliafnpL49aHR0cHM6Ly9hcHAuc2h1aGFpOTkuY29tL2FwaS5waHAvdjEudm9kI+a3mOWJp+ekvlxcXFxu5pmu6YCaQOe+pOmRq+W9seinhj1odHRwOi8vd3d3LnF1bnhpbnlzLmNvbS9hcGkucGhwL3YxLnZvZCPnvqTpkavlvbHop4ZcXFxcbuaZrumAmkDpvpnnjKvov73liac9aHR0cHM6Ly9sYi55Ym54Y3guY29tL2FwaS5waHAvdjEudm9kI1xcXFxu5pmu6YCaQOeci+WJp+WQpz1odHRwOi8vYXBwLmlzaGVuNTIwLmNvbS9hcGkucGhwL3YxLnZvZCPnnIvliaflkKdcXFxcbuaZrumAmkDlr5Lmnqvop4bpopE9aHR0cHM6Ly92aXAuc2hlbnl1bndsLmNuL21vZ2FpX2FwaS5waHAvdjEudm9kI+Wvkuaeq+inhumikVxcXFxu5pmu6YCaQOiJvuaAneW9seinhj1odHRwczovL3d3dy5haXRlZS5jYy9hcGkucGhwL3YxLnZvZCNcXFxcbuaZrumAmkDpmL/ph4zlvbHop4Y9aHR0cDovL2FsaXlzLmNuOjkwL2FwaS5waHAvdjEudm9kI+mYv+mHjOW9seinhlxcXFxu5pmu6YCaQOeIseeUteW9sT1odHRwczovL3d3dy5pZGlhbnlpbmcuY29tLmNuL21vZ2FpX2FwaS5waHAvdjEudm9kI+eIseeUteW9sVxcXFxu5pmu6YCaQE9L5b2x6KeGPWh0dHA6Ly8xMjMub2swMC54eXovYXBpLnBocC92MS52b2QjT0vlvbHop4ZcXFxcbuaZrumAmkBNWOW9seinhj1odHRwOi8vbWtrLmdvdGthLnRvcC9hcGkucGhwL3YxLnZvZCNcXFxcbuaZrumAmkA2Oee+juWJpz1odHRwczovL3d3dy42OW1qLmNvbS9hcGkucGhwL3YxLnZvZCNcXFxcbuelnumprEDlvbHop4bpmIE9aHR0cDovLzIxNi45OC4xMC44NS9hcGkucGhwL2lwdHYvdm9kLyPlvbHop4bpmIFcXFxcbuelnumprEDlpKnnqbpUVj1odHRwOi8vdHYudGt5cy50di9hcGkucGhwL2lwdHYvdm9kLyPlpKnnqbpUVlxcXFxu56We6amsQOiKkui/hVRWPWh0dHA6Ly93d3cuaGR5YW5ndHYuY29tL2FwaS5waHAvaXB0di92b2QvI+iKkui/hVRWXFxcXG7npZ7pqaxA54yr5ZKqVFY9aHR0cDovLzEwNi4xMi4xMTMuOTA6NjU2NS9hcGkucGhwL2lwdHYvdm9kLyPnjKvlkqpUVlxcXFxu56We6amsQOm7kem+meW9seinhj1odHRwOi8vdmlwLmppLWRpbmctaGUuc2l0ZS9hcGkucGhwL2lwdHYvdm9kLyPpu5HpvpnlvbHop4ZcXFxcbuelnumprEDotLXlrr7lvbHpmaI9aHR0cHM6Ly92aXBkeXR2LmNvbS9hcGkucGhwL2lwdHYvdm9kLyNcXFxcbuelnumprEDniLHopb/opb9UVj1odHRwOi8vdHYyLmFpeGl4aS52aXAvYXBpLnBocC9pcHR2L3ZvZC8j54ix6KW/6KW/VFZcXFxcbuelnumprEBDVuW9seinhj1odHRwOi8vd3d3LmNjY3Z2di50b3AvYXBpLnBocC9pcHR2L3ZvZC8jQ1blvbHop4ZcXFxcbuelnumprEAy5Y+35biBPWh0dHA6Ly9waG9lYmUuY2YvYXBpLnBocC9pcHR2L3ZvZC8jMuWPt+W4geW9semZolxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuaQnOe0olxcXCIsXFxcInBhdGhcXFwiOlxcXCJzZWFyXFxcIixcXFwicnVsZVxcXCI6XFxcInZhciByZXMgPSB7fTtcXFxcbnZhciBpdGVtcyA9IFtdO1xcXFxuLy/orr7nva7mkJzntKLnur/nqItcXFxcbnZhciBzc21vZGUgPSBKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL2ZpbGVzL3J1bGVzL3h5cS9hcHBtc2V0Lmpzb24nLCB7fSkpLnNzbW9kZTtcXFxcbnZhciBrZXkgPSBNWV9VUkwuc3BsaXQoJyQkJCcpWzFdO1xcXFxuLy9zZXRFcnJvcihsZSk7XFxcXG5pZiAoc3Ntb2RlID09ICcwJykge1xcXFxuICAgIHNldFBhZ2VUaXRsZShrZXkgKyAnIOeahOaQnOe0oue7k+aenCcpXFxcXG59O1xcXFxudHJ5IHtcXFxcbiAgICBpZiAoZ2V0SXRlbSgnY2xtb2RlJywgJzEnKSA9PSAxKSB7XFxcXG4gICAgICAgIHZhciBvbmUgPSBmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy94eXEvQVBQTW92aWUudHh0Jyk7XFxcXG4gICAgfSBlbHNlIHtcXFxcbiAgICAgICAgdmFyIG9uZSA9IGZldGNoQ2FjaGUoJycsIDI0KTtcXFxcbiAgICB9XFxcXG4gICAgLy9sb2codHdvICsnXFxcXFxcXFxuJysgb25lKTtcXFxcbiAgICBpZiAoL1xcXFxcXFxcPWh0dHAvLnRlc3Qob25lKSkge1xcXFxuICAgICAgICB2YXIgcmVtZmlsZSA9IG9uZTtcXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICBsb2coJ+W9k+WJjeWKoOi9veeahOaYr+WGhee9ruaVsOaNricpO1xcXFxuICAgICAgICB2YXIgcmVtZmlsZSA9IEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9SZXNDb2RlJywge30pKS5ydWxlO1xcXFxuICAgIH1cXFxcbn0gY2F0Y2ggKGUpIHtcXFxcbiAgICBsb2coJ+W9k+WJjeWKoOi9veeahOaYr+WGhee9ruaVsOaNricpO1xcXFxuICAgIHZhciByZW1maWxlID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL1Jlc0NvZGUnLCB7fSkpLnJ1bGU7XFxcXG59O1xcXFxuaWYgKC9cXFxcXFxcXD1odHRwLy50ZXN0KHJlbWZpbGUpKSB7XFxcXG4gICAgZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvY29udmVyJywge30pKS5ydWxlKTtcXFxcbiAgICByZW1maWxlID0gSlNPTi5zdHJpbmdpZnkobmV3ZmlsZSk7XFxcXG59XFxcXG52YXIgaHRtbCA9IEpTT04ucGFyc2UocmVtZmlsZSk7XFxcXG5cXFxcbnZhciBkbGlzdCA9IGh0bWwuZGF0YTtcXFxcblxcXFxuaWYgKHNzbW9kZSA9PSAnMScgfHwgTVlfVFlQRSA9PSAnaG9tZScpIHtcXFxcbiAgICBmb3IgKHZhciBsID0gMDsgbCA8IGRsaXN0Lmxlbmd0aDsgbCsrKSB7XFxcXG4gICAgICAgIHZhciBsaXN0ID0gZGxpc3RbbF0ubGlzdDtcXFxcbiAgICAgICAgdmFyIHR5dGl0ID0gZGxpc3RbbF0udGl0bGU7XFxcXG5cXFxcbiAgICAgICAgaXRlbXMucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogTVlfVFlQRSA9PSBcXFxcXFxcImhvbWVcXFxcXFxcIiA/IFxcXFxcXFwi54K55Ye75p+l55yLIFxcXFxcXFwiICsgdHl0aXQgKyBcXFxcXFxcIiDliIbnsbsg4oCc4oCcXFxcXFxcXCIgKyBrZXkgKyBcXFxcXFxcIuKAneKAnSDnmoTogZrmkJznu5PmnpxcXFxcXFxcIiA6IFxcXFxcXFwi54K55Ye75p+l55yLIFxcXFxcXFwiICsgdHl0aXQgKyBcXFxcXFxcIiDliIbnsbsgXFxcXFxcXCIgKyBrZXkgKyBcXFxcXFxcIiDnmoTogZrmkJznu5PmnpxcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2Uvc3MyXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfMScsXFxcXG4gICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgIGxpc3Q6IGxpc3QsXFxcXG4gICAgICAgICAgICAgICAgdHl0aXQ6IHR5dGl0LFxcXFxuICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHkkJCQnICsga2V5ICsgJyQkJGZ5cGFnZSQkJCdcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSk7XFxcXG5cXFxcbiAgICB9IC8vZm9yIGlcXFxcbn07IC8vZW5kIG1vZGUgMVxcXFxuXFxcXG5pZiAoc3Ntb2RlID09ICcwJyB8fCBNWV9UWVBFID09ICdob21lJykge1xcXFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGxpc3QubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgdmFyIGxpc3QgPSBkbGlzdFtpXS5saXN0O1xcXFxuICAgICAgICB2YXIgdHl0aXQgPSBkbGlzdFtpXS50aXRsZTtcXFxcblxcXFxuICAgICAgICBpdGVtcy5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBNWV9UWVBFID09IFxcXFxcXFwiaG9tZVxcXFxcXFwiID8gXFxcXFxcXCIg6YCJ5oup5LiA5LiqIFxcXFxcXFwiICsgZGxpc3RbaV0udGl0bGUgKyBcXFxcXFxcIiDpobnnm67mn6XnnIsg4oCc4oCcXFxcXFxcXCIgKyBrZXkgKyBcXFxcXFxcIuKAneKAnSDnmoTmkJzntKLnu5PmnpxcXFxcXFxcIiA6IFxcXFxcXFwiIOmAieaLqeS4gOS4qiBcXFxcXFxcIiArIGRsaXN0W2ldLnRpdGxlICsgXFxcXFxcXCIg6aG555uu5p+l55yLIFxcXFxcXFwiICsga2V5ICsgXFxcXFxcXCIg55qE5pCc57Si57uT5p6cXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfMSdcXFxcbiAgICAgICAgfSk7XFxcXG5cXFxcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBsaXN0Lmxlbmd0aDsgaisrKSB7XFxcXG4gICAgICAgICAgICB2YXIgbGluayA9IGxpc3Rbal0udXJsO1xcXFxuICAgICAgICAgICAgdmFyIGxpdGl0ID0gbGlzdFtqXS5tdXJsO1xcXFxuICAgICAgICAgICAgaWYgKC9cXFxcXFxcXC92b2RcXFxcXFxcXC8vLnRlc3QobGluaykpIHtcXFxcbiAgICAgICAgICAgICAgICBpZiAoLzM3XFxcXFxcXFwuMTYxfDIxNlxcXFxcXFxcLjk4fHBob2ViZXxoZnlzOHxmZWlmYW4xMnx0dnp5fGhkeWFuZ3R2fHRreXN8dGVnb3V5cy8udGVzdChsaW5rKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICB2YXIgaG11cmwgPSBsaW5rICsgJz9hYz1saXN0JnptPScgKyBrZXkgKyAnJnBhZ2U9ZnlwYWdlJztcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICB2YXIgaG11cmwgPSBsaW5rICsgJz9hYz1saXN0JndkPScgKyBrZXkgKyAnJnBhZ2U9ZnlwYWdlJztcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIGlmICgvZGlqaWF4aWEvLnRlc3QobGluaykpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGluayA9ICdodHRwOi8vd3d3LmRpamlheGlhLmNvbS9hcGkucGhwL2FwcC8nXFxcXG4gICAgICAgICAgICAgICAgfTtcXFxcbiAgICAgICAgICAgICAgICBpZiAobGluay5pbmRleE9mKCdhcGkucGhwL2FwcC8nKSAhPSAtMSkge1xcXFxuICAgICAgICAgICAgICAgICAgICB2YXIgaG11cmwgPSBsaW5rICsgJ3NlYXJjaD9wZz1meXBhZ2UmdGV4dD0nICsga2V5ICsgJyZ0b2tlbj0nO1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGluay5pbmRleE9mKCd4Z2FwcC5waHAvdjEvJykgIT0gLTEpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIGhtdXJsID0gbGluayArICdzZWFyY2g/cGc9ZnlwYWdlJnRleHQ9JyArIGtleTtcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoL2lvcGVueXVuLy50ZXN0KGxpbmspKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaG11cmwgPSBsaW5rICsgJy9saXN0P3BhZ2U9ZnlwYWdlJmxpbWl0PTEwJndkPScgKyBrZXk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaG11cmwgPSBsaW5rICsgJz9wYWdlPWZ5cGFnZSZsaW1pdD0xMCZ3ZD0nICsga2V5O1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGxpc3Rbal0udGl0bGUsXFxcXG4gICAgICAgICAgICAgICAgaW1nOiBsaXN0W2pdLmltZyxcXFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoJ2hpa2VyOi8vZW1wdHkjeCMnICsgaG11cmwgKyAnI3gjJyArIGxpbmsgKyAnI3gjJyArIGxpdGl0ICsgJyN4IycgKyBrZXkgKyAnI3gjJykucnVsZSgoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL3NlYXJlcmonKTtcXFxcbiAgICAgICAgICAgICAgICB9KSxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2ljb25fcm91bmRfc21hbGxfNCdcXFxcbiAgICAgICAgICAgICAgICAvL2NvbF90eXBlOiAndGV4dF8zJ1xcXFxuICAgICAgICAgICAgICAgIC8vbGluazpsaW5rLFxcXFxuICAgICAgICAgICAgICAgIC8vdHlwZTogaVxcXFxuICAgICAgICAgICAgfSk7XFxcXG5cXFxcbiAgICAgICAgfSAvL2ZvciBqXFxcXG5cXFxcblxcXFxuICAgIH0gLy9mb3IgaVxcXFxuXFxcXG59IC8vZW5kIG1vZGUgMFxcXFxuXFxcXG5cXFxcbnJlcy5kYXRhID0gaXRlbXM7XFxcXG5zZXRIb21lUmVzdWx0KHJlcyk7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwiQVBQ5YiG57G75YiX6KGoXFxcIixcXFwicGF0aFxcXCI6XFxcImFwcGxpc3RkYXRhXFxcIixcXFwicnVsZVxcXCI6XFxcImlmIChodG1sLmxpc3QpIHtcXFxcbiAgICB2YXIgbGlzdCA9IGh0bWwubGlzdDtcXFxcbn0gZWxzZSBpZiAoaHRtbC5kYXRhICYmIGh0bWwuZGF0YS5saXN0KSB7XFxcXG4gICAgdmFyIGxpc3QgPSBodG1sLmRhdGEubGlzdDtcXFxcbn0gZWxzZSB7XFxcXG4gICAgdmFyIGxpc3QgPSBodG1sLmRhdGE7XFxcXG59XFxcXG4vL2xvZyhsaXN0KTtcXFxcbmZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xcXFxuICAgIHZhciB0aXRsZSA9IGxpc3RbaV0udm9kX25hbWU7XFxcXG4gICAgdmFyIGltZyA9IGxpc3RbaV0udm9kX3BpYztcXFxcbiAgICB2YXIgdXJsID0gbGlzdFtpXS52b2RfaWQ7XFxcXG4gICAgdmFyIGRlc2MgPSBsaXN0W2ldLnZvZF9yZW1hcmtzO1xcXFxuICAgIHZhciBub3dEYXRlID0gbmV3IERhdGUoKTtcXFxcbiAgICB2YXIgbW9udGggPSBub3dEYXRlLmdldE1vbnRoKCkgKyAxIDwgMTAgPyBcXFxcXFxcIjBcXFxcXFxcIiArIChub3dEYXRlLmdldE1vbnRoKCkgKyAxKSA6IG5vd0RhdGUuZ2V0TW9udGgoKSArIDE7XFxcXG4gICAgdmFyIGRheSA9IG5vd0RhdGUuZ2V0RGF0ZSgpIDwgMTAgPyBcXFxcXFxcIjBcXFxcXFxcIiArIG5vd0RhdGUuZ2V0RGF0ZSgpIDogbm93RGF0ZS5nZXREYXRlKCk7XFxcXG4gICAgdmFyIGRhdGVTdHIgPSBtb250aCArICcnICsgZGF5O1xcXFxuICAgIGlmIChodG1sLmxpc3QpIHtcXFxcbiAgICAgICAgdmFyIGxpbmsgPSBtdXJsICsgJ3ZpZGVvX2RldGFpbD9pZD0nICsgdXJsICsgJyZ0b2tlbj07Z2V0O3V0Zi04O3tVc2VyLUFnZW50QERhcnQvMi4xNCAoZGFydDppbyl9JztcXFxcbiAgICB9IGVsc2UgaWYgKGh0bWwuZGF0YSAmJiBodG1sLmRhdGEubGlzdCkge1xcXFxuICAgICAgICBpZiAobXVybC5zZWFyY2goL21vZ2FpX2FwaS8pICE9IC0xKSB7XFxcXG4gICAgICAgICAgICB2YXIgbGluayA9IG11cmwgKyAnL2RldGFpbD9rZXk9JyArIGRhdGVTdHIgKyAnJnZvZF9pZD0nICsgdXJsICsgJyZyZWxfbGltaXQ9MTA7Z2V0O3V0Zi04O3tVc2VyLUFnZW50QERhcnQvMi4xNCAoZGFydDppbyl9JztcXFxcbiAgICAgICAgfSBlbHNlIGlmIChtdXJsLmluY2x1ZGVzKCdncmVsaWdodGluZycpKSB7XFxcXG4gICAgICAgICAgICB2YXIgbGluayA9IG11cmwgKyAnLz9pZHM9JyArIHVybCArICcmcmVsX2xpbWl0PTEwO2dldDt1dGYtODt7VXNlci1BZ2VudEBEYXJ0LzIuMTQgKGRhcnQ6aW8pfSc7XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICB2YXIgbGluayA9IG11cmwgKyAnL2RldGFpbD9rZXk9JyArIGRhdGVTdHIgKyAnJnZvZF9pZD0nICsgdXJsICsgJyZyZWxfbGltaXQ9MTA7Z2V0O3V0Zi04O3tVc2VyLUFnZW50QG9raHR0cC80LjEuMH0nO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSBlbHNlIHtcXFxcbiAgICAgICAgdmFyIGxpbmsgPSBtdXJsICsgJ3ZpZGVvX2RldGFpbD9pZD0nICsgdXJsICsgJyZ0b2tlbj07Z2V0O3V0Zi04O3tVc2VyLUFnZW50QERhcnQvMi4xNCAoZGFydDppbyl9JztcXFxcbiAgICB9O1xcXFxuICAgIGlmICgvZmFudHVhbi8udGVzdChtdXJsKSkge1xcXFxuICAgICAgICB2YXIgbGluayA9ICdodHRwczovL2ZhbnR1YW4ud2tmaWxlLmNvbS9hcGkucGhwL2FwcC92aWRlb19kZXRhaWw/aWQ9JyArIHVybCArICcmdG9rZW49O2dldDt1dGYtODt7VXNlci1BZ2VudEBEYXJ0LzIuMTQgKGRhcnQ6aW8pfSc7XFxcXG4gICAgfSBlbHNlIGlmICgvaW9wZW55dW4vLnRlc3QobXVybCkpIHtcXFxcbiAgICAgICAgdmFyIGxpbmsgPSBtdXJsICsgJy9kZXRhaWxJRD92b2RfaWQ9JyArIHVybCArICcmcmVsX2xpbWl0PTEwO2dldDt1dGYtODt7VXNlci1BZ2VudEBEYXJ0LzIuMTQgKGRhcnQ6aW8pfSc7XFxcXG4gICAgfSBlbHNlIGlmICgvZGlqaWF4aWEvLnRlc3QobXVybCkpIHtcXFxcbiAgICAgICAgdmFyIGxpbmsgPSAnaHR0cDovL3d3dy5kaWppYXhpYS5jb20vYXBpLnBocC9hcHAvdmlkZW9fZGV0YWlsP2lkPScgKyB1cmw7XFxcXG4gICAgfVxcXFxuICAgIGl0ZW1zLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogdGl0bGUsXFxcXG4gICAgICAgIHBpY191cmw6IGltZyArICdAUmVmZXJlcj0nLFxcXFxuICAgICAgICB1cmw6ICQobGluaykucnVsZSgoKSA9PiB7XFxcXG4gICAgICAgICAgICB2YXIgcmVzID0ge307XFxcXG4gICAgICAgICAgICB2YXIgaXRlbXMgPSBbXTtcXFxcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiAnJyxcXFxcbiAgICAgICAgICAgICAgICBkZXNjOiAnMjU1JiZmbG9hdCcsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiAnJyxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3g1X3dlYnZpZXdfc2luZ2xlJ1xcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICByZWZyZXNoWDVXZWJWaWV3KCcnKTtcXFxcbiAgICAgICAgICAgIHZhciBodG1sID0gSlNPTi5wYXJzZShnZXRSZXNDb2RlKCkpO1xcXFxuICAgICAgICAgICAgdmFyIG15dXJsID0gTVlfVVJMLm1hdGNoKC8oW1xcXFxcXFxcU10qPzpcXFxcXFxcXC9cXFxcXFxcXC9bXFxcXFxcXFxTXSo/KVxcXFxcXFxcLy8pWzFdO1xcXFxuICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9hcHBtb3ZsaXN0Jywge30pKS5ydWxlKTtcXFxcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxcXG4gICAgICAgICAgICByZXMuZGF0YSA9IGl0ZW1zO1xcXFxuICAgICAgICAgICAgc2V0SG9tZVJlc3VsdChyZXMpO1xcXFxuICAgICAgICB9KSxcXFxcbiAgICAgICAgZGVzYzogZGVzYyxcXFxcbiAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8zX21hcnF1ZWUnXFxcXG4gICAgfSk7XFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwiVFbliJfooajop6PmnpBcXFwiLFxcXCJwYXRoXFxcIjpcXFwidHZsaXN0ZGF0YVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJ2YXIgbGlzdCA9IGh0bWwuZGF0YTtcXFxcbmZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xcXFxuICAgIHZhciB0aXRsZSA9IGxpc3RbaV0udGl0bGU7XFxcXG4gICAgdmFyIGltZyA9IGxpc3RbaV0ucGljO1xcXFxuICAgIHZhciB1cmwgPSBsaXN0W2ldLm5leHRsaW5rO1xcXFxuICAgIHZhciBkZXNjID0gbGlzdFtpXS5zdGF0ZTtcXFxcbiAgICB1cmwgPSB1cmwuc3RhcnRzV2l0aCgnaHR0cCcpID8gdXJsIDogbXVybCArICc/YWM9ZGV0YWlsJmlkcz0nICsgdXJsO1xcXFxuICAgIGl0ZW1zLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogdGl0bGUsXFxcXG4gICAgICAgIHBpY191cmw6IGltZyArICdAUmVmZXJlcj0nLFxcXFxuICAgICAgICB1cmw6ICQodXJsKS5ydWxlKCgpID0+IHtcXFxcbiAgICAgICAgICAgIHZhciByZXMgPSB7fTtcXFxcbiAgICAgICAgICAgIHZhciBpdGVtcyA9IFtdO1xcXFxuICAgICAgICAgICAgdmFyIGh0bWwgPSBKU09OLnBhcnNlKGdldFJlc0NvZGUoKSk7XFxcXG4gICAgICAgICAgICB2YXIgbXl1cmwgPSBNWV9VUkwubWF0Y2goLyhbXFxcXFxcXFxTXSo/OlxcXFxcXFxcL1xcXFxcXFxcL1tcXFxcXFxcXFNdKj8pXFxcXFxcXFwvLylbMV07XFxcXG4gICAgICAgICAgICBpdGVtcy5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogJycsXFxcXG4gICAgICAgICAgICAgICAgZGVzYzogJzI1NSYmZmxvYXQnLFxcXFxuICAgICAgICAgICAgICAgIHVybDogJycsXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICd4NV93ZWJ2aWV3X3NpbmdsZSdcXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgcmVmcmVzaFg1V2ViVmlldygnJyk7XFxcXG4gICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvdHZtb3ZsaXN0Jywge30pKS5ydWxlKTtcXFxcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxcXG4gICAgICAgICAgICByZXMuZGF0YSA9IGl0ZW1zO1xcXFxuICAgICAgICAgICAgc2V0SG9tZVJlc3VsdChyZXMpO1xcXFxuICAgICAgICB9KSxcXFxcbiAgICAgICAgZGVzYzogZGVzYyxcXFxcbiAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8zX21hcnF1ZWUnXFxcXG4gICAgfSk7XFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwiQVBQ566A5LuL5LiO6YCJ6ZuGXFxcIixcXFwicGF0aFxcXCI6XFxcImFwcG1vdmxpc3RcXFwiLFxcXCJydWxlXFxcIjpcXFwiaWYgKGh0bWwuZGF0YS52b2RfdXJsX3dpdGhfcGxheWVyKSB7XFxcXG4gICAgdmFyIGNvbnRzID0gaHRtbC5kYXRhLnZvZF91cmxfd2l0aF9wbGF5ZXI7XFxcXG4gICAgaWYgKGNvbnRzLmxlbmd0aCA8IDEpIHtcXFxcbiAgICAgICAgY29udHMgPSBodG1sLmRhdGEudm9kX3BsYXlfdXJsLnNwbGl0KCckJCQnKTtcXFxcbiAgICAgICAgdmFyIHRhYnMgPSBodG1sLmRhdGEudm9kX3BsYXlfZnJvbS5zcGxpdCgnJCQkJyk7XFxcXG4gICAgfVxcXFxufSBlbHNlIGlmIChodG1sLmRhdGEudm9kX2luZm8gJiYgaHRtbC5kYXRhLnZvZF9pbmZvLnZvZF91cmxfd2l0aF9wbGF5ZXIpIHtcXFxcbiAgICB2YXIgY29udHMgPSBodG1sLmRhdGEudm9kX2luZm8udm9kX3VybF93aXRoX3BsYXllcjtcXFxcbiAgICBpZiAoY29udHMubGVuZ3RoIDwgMSkge1xcXFxuICAgICAgICBjb250cyA9IGh0bWwuZGF0YS52b2RfaW5mby52b2RfcGxheV91cmwuc3BsaXQoJyQkJCcpO1xcXFxuICAgICAgICB2YXIgdGFicyA9IGh0bWwuZGF0YS52b2RfaW5mby52b2RfcGxheV9mcm9tLnNwbGl0KCckJCQnKTtcXFxcbiAgICB9XFxcXG59IGVsc2UgaWYgKGh0bWwuZGF0YS5saXN0KSB7XFxcXG4gICAgdmFyIGNvbnRzID0gaHRtbC5kYXRhLmxpc3RbMF0udm9kX3BsYXlfdXJsLnNwbGl0KCckJCQnKTtcXFxcbiAgICB2YXIgdGFicyA9IGh0bWwuZGF0YS5saXN0WzBdLnZvZF9wbGF5X2Zyb20uc3BsaXQoJyQkJCcpO1xcXFxufSBlbHNlIGlmIChodG1sLmRhdGEubGVuZ3RoID09IDEpIHtcXFxcbiAgICB2YXIgY29udHMgPSBodG1sLmRhdGFbMF0udm9kX3BsYXlfbGlzdDtcXFxcbiAgICAvL2xvZyhjb250cyk7XFxcXG4gICAgaWYgKGNvbnRzLmxlbmd0aCA8IDEpIHtcXFxcbiAgICAgICAgY29udHMgPSBodG1sLmRhdGFbMF0udm9kX3BsYXlfdXJsLnNwbGl0KCckJCQnKTtcXFxcbiAgICAgICAgdmFyIHRhYnMgPSBodG1sLmRhdGFbMF0udm9kX3BsYXlfZnJvbS5zcGxpdCgnJCQkJyk7XFxcXG4gICAgfVxcXFxufSBlbHNlIHtcXFxcbiAgICB2YXIgY29udHMgPSBodG1sLmRhdGEudm9kX3BsYXlfbGlzdDtcXFxcbiAgICBpZiAoY29udHMubGVuZ3RoIDwgMSkge1xcXFxuICAgICAgICBjb250cyA9IGh0bWwuZGF0YS52b2RfcGxheV91cmwuc3BsaXQoJyQkJCcpO1xcXFxuICAgICAgICB2YXIgdGFicyA9IGh0bWwuZGF0YS52b2RfcGxheV9mcm9tLnNwbGl0KCckJCQnKTtcXFxcbiAgICB9XFxcXG59O1xcXFxuXFxcXG4vL2xvZyhodG1sKTtcXFxcblxcXFxuaWYgKGh0bWwuZGF0YS5sZW5ndGggPT0gMSkge1xcXFxuICAgIHZhciB0aHVtYiA9IGh0bWwuZGF0YVswXS52b2RfcGljO1xcXFxuICAgIHZhciBkZXMgPSBodG1sLmRhdGFbMF0udm9kX2NvbnRlbnQ7XFxcXG59IGVsc2UgaWYgKGh0bWwuZGF0YS5saXN0KSB7XFxcXG4gICAgdmFyIHRodW1iID0gaHRtbC5kYXRhLmxpc3RbMF0udm9kX3BpYztcXFxcbiAgICB2YXIgZGVzID0gaHRtbC5kYXRhLmxpc3RbMF0udm9kX2NvbnRlbnQ7XFxcXG59IGVsc2Uge1xcXFxuICAgIHZhciB0aHVtYiA9IGh0bWwuZGF0YS52b2RfaW5mbyA/IGh0bWwuZGF0YS52b2RfaW5mby52b2RfcGljIDogaHRtbC5kYXRhLnZvZF9waWM7XFxcXG4gICAgdmFyIGRlcyA9IGh0bWwuZGF0YS52b2RfaW5mbyA/IGh0bWwuZGF0YS52b2RfaW5mby52b2RfY29udGVudCA6IGh0bWwuZGF0YS52b2RfY29udGVudDtcXFxcbn07XFxcXG5pdGVtcy5wdXNoKHtcXFxcbiAgICB0aXRsZTogJ+WJp+aDheeugOS7i++8micsXFxcXG4gICAgZGVzYzogZGVzLFxcXFxuICAgIHBpY191cmw6IHRodW1iLFxcXFxuICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eSNub1JlY29yZEhpc3RvcnkjJykucnVsZSgoZGVzKSA9PiB7XFxcXG4gICAgICAgIHNldFJlc3VsdChbe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGRlcyxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbG9uZ190ZXh0J1xcXFxuICAgICAgICB9XSk7XFxcXG4gICAgfSwgZGVzKSxcXFxcbiAgICBjb2xfdHlwZTogJ21vdmllXzFfdmVydGljYWxfcGljJ1xcXFxufSk7XFxcXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9kbnBsdWdpbicsIHt9KSkucnVsZSk7XFxcXG5cXFxcbml0ZW1zLnB1c2goe1xcXFxuICAgIHRpdGxlOiAn4oCc4oCc5o6S5bqP4oCd4oCdJyxcXFxcbiAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9lbXB0eUBsYXp5UnVsZT0uanM6cHV0TXlWYXIoJ2FwcG1hcHBzb3J0JywgZ2V0TXlWYXIoJ2FwcG1hcHBzb3J0JywnMScpPT0nMSc/JzAnOicxJyk7cmVmcmVzaFBhZ2UoZmFsc2UpOyd0b2FzdDovL+WIh+aNouaIkOWKn++8gSdcXFxcXFxcIixcXFxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxcXG59KTtcXFxcbnZhciB0aXRsZSA9IE1ZX1VSTDtcXFxcbmZvciAodmFyIGsgPSAwOyBrIDwgY29udHMubGVuZ3RoOyBrKyspIHtcXFxcbiAgICAvL3NldEVycm9yKGxpc3QubGVuZ3RoKTtcXFxcbiAgICBpZiAoaHRtbC5kYXRhLnZvZF91cmxfd2l0aF9wbGF5ZXIpIHtcXFxcbiAgICAgICAgdmFyIHB0YWIgPSBjb250c1trXS5jb2RlID8gY29udHNba10uY29kZSA6IHRhYnNba107XFxcXG4gICAgfSBlbHNlIGlmIChodG1sLmRhdGEudm9kX2luZm8gJiYgaHRtbC5kYXRhLnZvZF9pbmZvLnZvZF91cmxfd2l0aF9wbGF5ZXIpIHtcXFxcbiAgICAgICAgdmFyIHB0YWIgPSBjb250c1trXS5jb2RlID8gY29udHNba10uY29kZSA6IHRhYnNba107XFxcXG4gICAgfSBlbHNlIHtcXFxcbiAgICAgICAgdmFyIHB0YWIgPSBjb250c1trXS5mcm9tID8gY29udHNba10uZnJvbSA6IHRhYnNba107XFxcXG4gICAgfVxcXFxuICAgIGl0ZW1zLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogKGdldE15VmFyKHRpdGxlLCAnMCcpID09IGsgPyAn8J+RifCfj7snIDogJycpICsgcHRhYixcXFxcbiAgICAgICAgdXJsOiBgaGlrZXI6Ly9lbXB0eUBsYXp5UnVsZT0uanM6cHV0TXlWYXIoJ2AgKyB0aXRsZSArIFxcXFxcXFwiJywgJ1xcXFxcXFwiICsgayArIGAnKTtyZWZyZXNoUGFnZSgpOyd0b2FzdDovL+WIh+aNouaIkOWKn++8gSdgLFxcXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxcXG4gICAgfSk7XFxcXG5cXFxcbn1cXFxcblxcXFxuXFxcXG5cXFxcbnZhciBqaWVrID0gJyc7XFxcXG4vL2ZvciAodmFyIGkgPSAwOyBpIDwgY29udHMubGVuZ3RoOyBpKyspIHtcXFxcbmlmIChnZXRNeVZhcignYXBwbWFwcHNvcnQnLCAnMScpID09ICcxJykge1xcXFxuICAgIGlmIChjb250c1tnZXRNeVZhcih0aXRsZSwgJzAnKV0udXJscykge1xcXFxuICAgICAgICB2YXIgbGlzdCA9IGNvbnRzW2dldE15VmFyKHRpdGxlLCAnMCcpXS51cmxzO1xcXFxuICAgIH0gZWxzZSBpZiAoY29udHNbZ2V0TXlWYXIodGl0bGUsICcwJyldLnVybCkge1xcXFxuICAgICAgICB2YXIgbGlzdCA9IGNvbnRzW2dldE15VmFyKHRpdGxlLCAnMCcpXS51cmwuc3BsaXQoXFxcXFxcXCIjXFxcXFxcXCIpO1xcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIHZhciBsaXN0ID0gY29udHNbZ2V0TXlWYXIodGl0bGUsICcwJyldLnNwbGl0KFxcXFxcXFwiI1xcXFxcXFwiKTtcXFxcbiAgICB9O1xcXFxufSBlbHNlIHtcXFxcbiAgICBpZiAoY29udHNbZ2V0TXlWYXIodGl0bGUsICcwJyldLnVybHMpIHtcXFxcbiAgICAgICAgdmFyIGxpc3QgPSBjb250c1tnZXRNeVZhcih0aXRsZSwgJzAnKV0udXJscy5yZXZlcnNlKCk7XFxcXG4gICAgfSBlbHNlIGlmIChjb250c1tnZXRNeVZhcih0aXRsZSwgJzAnKV0udXJsKSB7XFxcXG4gICAgICAgIHZhciBsaXN0ID0gY29udHNbZ2V0TXlWYXIodGl0bGUsICcwJyldLnVybC5zcGxpdChcXFxcXFxcIiNcXFxcXFxcIikucmV2ZXJzZSgpO1xcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIHZhciBsaXN0ID0gY29udHNbZ2V0TXlWYXIodGl0bGUsICcwJyldLnNwbGl0KFxcXFxcXFwiI1xcXFxcXFwiKS5yZXZlcnNlKCk7XFxcXG4gICAgfVxcXFxufTtcXFxcbi8vc2V0RXJyb3IobGlzdC5sZW5ndGgpO1xcXFxuaWYgKGh0bWwuZGF0YS52b2RfdXJsX3dpdGhfcGxheWVyKSB7XFxcXG4gICAgdmFyIHB0YWIgPSBjb250c1tnZXRNeVZhcih0aXRsZSwgJzAnKV0uY29kZSA/IGNvbnRzW2dldE15VmFyKHRpdGxlLCAnMCcpXS5jb2RlIDogdGFic1tnZXRNeVZhcih0aXRsZSwgJzAnKV07XFxcXG59IGVsc2UgaWYgKGh0bWwuZGF0YS52b2RfaW5mbyAmJiBodG1sLmRhdGEudm9kX2luZm8udm9kX3VybF93aXRoX3BsYXllcikge1xcXFxuICAgIHZhciBwdGFiID0gY29udHNbZ2V0TXlWYXIodGl0bGUsICcwJyldLmNvZGUgPyBjb250c1tnZXRNeVZhcih0aXRsZSwgJzAnKV0uY29kZSA6IHRhYnNbZ2V0TXlWYXIodGl0bGUsICcwJyldO1xcXFxufSBlbHNlIHtcXFxcbiAgICB2YXIgcHRhYiA9IGNvbnRzW2dldE15VmFyKHRpdGxlLCAnMCcpXS5mcm9tID8gY29udHNbZ2V0TXlWYXIodGl0bGUsICcwJyldLmZyb20gOiB0YWJzW2dldE15VmFyKHRpdGxlLCAnMCcpXTtcXFxcbn1cXFxcbi8qXFxcXG4gICAgaXRlbXMucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiBwdGFiICsgJyDwn5SXJyArIFtpICsgMV0gKyAnLycgKyBbY29udHMubGVuZ3RoXSArIFxcXFxcXFwi4oCc4oCc4oaT4oaR4oCd4oCdXFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5QGxhenlSdWxlPS5qczpwdXRWYXIoJ2FwcG1hcHBzb3J0JywgZ2V0VmFyKCdhcHBtYXBwc29ydCcsJzEnKT09JzEnPycwJzonMScpO3JlZnJlc2hQYWdlKGZhbHNlKTsndG9hc3Q6Ly/liIfmjaLmiJDlip/vvIEnXFxcXFxcXCIsXFxcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXFxcbiAgICB9KTsqL1xcXFxudmFyIHZsaW5rID0ge307XFxcXG5mb3IgKHZhciBqID0gMDsgaiA8IGxpc3QubGVuZ3RoOyBqKyspIHtcXFxcbiAgICBpZiAoY29udHNbZ2V0TXlWYXIodGl0bGUsICcwJyldLnVybHMpIHtcXFxcbiAgICAgICAgdmFyIHZsaW5rID0gbGlzdFtqXS51cmwucmVwbGFjZSgvIzQ1NiMvZywgJ2h0dHAnKS5yZXBsYWNlKC8jMTIzIy9nLCAnLicpLnJlcGxhY2UoLyM3ODkjL2csICc6Jyk7XFxcXG4gICAgICAgIHZhciB2dGl0bGUgPSBsaXN0W2pdLm5hbWU7XFxcXG4gICAgfSBlbHNlIHtcXFxcbiAgICAgICAgLy92YXIgdmxpbmsgPSBsaXN0W2pdLnNwbGl0KFxcXFxcXFwiJFxcXFxcXFwiKVsxXTtcXFxcbiAgICAgICAgaWYgKGxpc3Rbal0uc3BsaXQoJyQnKVsxXSAhPSBudWxsKSB7XFxcXG4gICAgICAgICAgICB2bGluayA9IGxpc3Rbal0uc3BsaXQoJyQnKVsxXTtcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIHZsaW5rID0gbGlzdFtqXS5zcGxpdCgnJCcpWzBdO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIC8vdmFyIHRpdGxlID0gbGlzdFtqXS5zcGxpdChcXFxcXFxcIiRcXFxcXFxcIilbMF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxuICAgICAgICB2YXIgdnRpdGxlID0gKGxpc3Rbal0uc3BsaXQoJyQnKVswXS5pbmNsdWRlcygnaHR0cCcpID8gW2ogKyAxXSA6IGxpc3Rbal0uc3BsaXQoJyQnKVswXSk7XFxcXG4gICAgfVxcXFxuICAgIHRyeSB7XFxcXG4gICAgICAgIGlmIChodG1sLmRhdGEudm9kX3VybF93aXRoX3BsYXllcikge1xcXFxuICAgICAgICAgICAgdmFyIGppZWsgPSBjb250c1tnZXRNeVZhcih0aXRsZSwgJzAnKV0ucGFyc2VfYXBpO1xcXFxuICAgICAgICB9IGVsc2UgaWYgKGh0bWwuZGF0YS52b2RfaW5mbyAmJiBodG1sLmRhdGEudm9kX2luZm8udm9kX3VybF93aXRoX3BsYXllcikge1xcXFxuICAgICAgICAgICAgdmFyIGppZWsgPSBjb250c1tnZXRNeVZhcih0aXRsZSwgJzAnKV0ucGFyc2VfYXBpO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgaWYgKGNvbnRzW2dldE15VmFyKHRpdGxlLCAnMCcpXS5wbGF5ZXJfaW5mby5wYXJzZTIgJiYgKGNvbnRzW2dldE15VmFyKHRpdGxlLCAnMCcpXS5wbGF5ZXJfaW5mby5wYXJzZTIpLmluZGV4T2YoXFxcXFxcXCI9XFxcXFxcXCIpICE9IC0xKSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIGppZWsgPSAoY29udHNbZ2V0TXlWYXIodGl0bGUsICcwJyldLnBsYXllcl9pbmZvLnBhcnNlMikucmVwbGFjZSgvXFxcXFxcXFwuXFxcXFxcXFwuL2csIFxcXFxcXFwiLlxcXFxcXFwiKS5zcGxpdCgnLCcpWzBdLnJlcGxhY2UoJ2pzb25icycsICcnKTtcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udHNbZ2V0TXlWYXIodGl0bGUsICcwJyldLnBsYXllcl9pbmZvLnBhcnNlICYmIChjb250c1tnZXRNeVZhcih0aXRsZSwgJzAnKV0ucGxheWVyX2luZm8ucGFyc2UpLmluZGV4T2YoXFxcXFxcXCI9XFxcXFxcXCIpICE9IC0xKSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIGppZWsgPSAoY29udHNbZ2V0TXlWYXIodGl0bGUsICcwJyldLnBsYXllcl9pbmZvLnBhcnNlKS5yZXBsYWNlKC9cXFxcXFxcXC5cXFxcXFxcXC4vZywgXFxcXFxcXCIuXFxcXFxcXCIpLnNwbGl0KCcsJylbMF07XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIHZhciBqaWVrID0gXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIC8vc2V0RXJyb3Ioamllayk7ICAgICAgICAgICAgICAgIFxcXFxuICAgICAgICB9XFxcXG4gICAgfSBjYXRjaCAoZSkge31cXFxcbiAgICAvL2ppZWvmi7zmjqVcXFxcbiAgICBpZiAoamllayAhPSAnJyAmJiBqaWVrICE9IG51bGwpIHtcXFxcbiAgICAgICAgaWYgKGppZWsuc3Vic3RyaW5nKDAsIDQpID09ICdodHRwJykge1xcXFxuICAgICAgICAgICAgamllayA9IGppZWs7XFxcXG4gICAgICAgIH0gZWxzZSBpZiAoamllay5zdWJzdHJpbmcoMCwgMikgPT0gJ1xcXFxcXFxcL1xcXFxcXFxcLycpIHtcXFxcbiAgICAgICAgICAgIGppZWsgPSAnaHR0cHM6JyArIGppZWs7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICBqaWVrID0gXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICB9XFxcXG4gICAgLy/lr7nlpLHmlYjmjqXlj6Pov5vooYzmm7/mjaJcXFxcbiAgICBpZiAoL2Nva2Vtdi8udGVzdChteXVybCkgJiYgL2Nva2VxaWV8eGlufDkwbW0vLnRlc3QocHRhYikpIHtcXFxcbiAgICAgICAgamllayA9ICdodHRwczovL3BsYXllci45MG1tLm1lL3BsYXkucGhwP3VybD0nO1xcXFxuICAgIH0gZWxzZSBpZiAoL1xcXFxcXFxcLm0zdThcXFxcXFxcXC50dnx3d3dcXFxcXFxcXC54LW5cXFxcXFxcXC5jYy8udGVzdChqaWVrKSkge1xcXFxuICAgICAgICBqaWVrID0gJ2h0dHBzOi8vangubTN1OC50di9qaWV4aS8/dXJsPSc7XFxcXG4gICAgfSBlbHNlIGlmICgvY2p0NTIxLy50ZXN0KG15dXJsKSkge1xcXFxuICAgICAgICBqaWVrID0gY29udHNbZ2V0TXlWYXIodGl0bGUsICcwJyldLnBsYXllcl9pbmZvLnBhcnNlO1xcXFxuICAgIH0gZWxzZSBpZiAoamllay5pbmRleE9mKCdqcGcuaG91Lmx1L2ptL3phL2luZGV4LnBocCcpICE9IC0xKSB7XFxcXG4gICAgICAgIGppZWsgPSAnaHR0cDovL3ZpcC5tZW5neC52aXAvaG9tZS9hcGk/dHlwZT15cyZ1aWQ9MzI0OTY5NiZrZXk9YWVmcXJ0dXd4eUVGSEtOT1FZJnVybD0nO1xcXFxuICAgIH0gZWxzZSBpZiAocHRhYiA9PSAncmVucmVubWknICYmIGppZWsuc2VhcmNoKC9qaGR5dy8pICE9IC0xKSB7XFxcXG4gICAgICAgIGppZWsgPSAnaHR0cDovL3d3dy4xMDgwa2FuLmNjL2ppZXhpL3JybWkucGhwP3VybD0nO1xcXFxuICAgIH0gZWxzZSBpZiAocHRhYiA9PSAnZnFmaWxtJyAmJiBqaWVrLnNlYXJjaCgvamhkeXcvKSAhPSAtMSkge1xcXFxuICAgICAgICBqaWVrID0gJ2h0dHA6Ly93d3cuMTA4MGthbi5jYy9qaWV4aS9mcS5waHA/dXJsPSc7XFxcXG4gICAgfSBlbHNlIGlmIChwdGFiID09ICdycnNwJyAmJiBqaWVrLnNlYXJjaCgvamhkeXcvKSAhPSAtMSkge1xcXFxuICAgICAgICBqaWVrID0gJ2h0dHA6Ly93d3cuMTA4MGthbi5jYy9qaWV4aS9yci5waHA/dXJsPSc7XFxcXG4gICAgfSBlbHNlIGlmICgvbWlhb3BhcnR5Ly50ZXN0KHB0YWIpICYmIG15dXJsLnNlYXJjaCgvZnVuNGsvKSAhPSAtMSkge1xcXFxuICAgICAgICBqaWVrID0gJ2h0dHBzOi8vd3d3LmZ1bjRrLmNvbS9hcGxheWVyLz91cmw9JztcXFxcbiAgICB9IGVsc2UgaWYgKC9qaHl1blxcXFxcXFxcLnBocC8udGVzdChqaWVrKSkge1xcXFxuICAgICAgICBqaWVrID0gamllay5yZXBsYWNlKCdodHRwOi8vc3ZpcC5qaHl1bi5qeC5jbjoxMjM0L2poeXVuLnBocD91cmw9JywgJ2h0dHBzOi8vYXBpLmpoZHl3LnZpcC8/dXJsPScpO1xcXFxuICAgIH0gZWxzZSBpZiAoL3d3d1xcXFxcXFxcLmFpbGVtb1xcXFxcXFxcLm1lLy50ZXN0KGppZWspKSB7XFxcXG4gICAgICAgIGppZWsgPSBqaWVrLnJlcGxhY2UoJ2FpbGVtbycsICdhaWxlbW9vJyk7XFxcXG4gICAgfTtcXFxcbiAgICAvL+aJk+WNsOaOpeWPo1xcXFxuICAgIHRyeSB7XFxcXG4gICAgICAgIGlmIChqID09ICcwJykge1xcXFxuICAgICAgICAgICAgaWYgKGh0bWwuZGF0YS52b2RfdXJsX3dpdGhfcGxheWVyKSB7XFxcXG4gICAgICAgICAgICAgICAgbG9nKCdcXFxcXFxcXG7nur/ot6/vvJonICsgcHRhYiArICdcXFxcXFxcXG7op4bpopHvvJonICsgdmxpbmsgKyAnXFxcXFxcXFxuJyArICfop6PmnpDmjqXlj6PvvJpcXFxcXFxcXG4nICsgamllayk7XFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGh0bWwuZGF0YS52b2RfaW5mbyAmJiBodG1sLmRhdGEudm9kX2luZm8udm9kX3VybF93aXRoX3BsYXllcikge1xcXFxuICAgICAgICAgICAgICAgIGxvZygnXFxcXFxcXFxu57q/6Lev77yaJyArIHB0YWIgKyAnXFxcXFxcXFxu6KeG6aKR77yaJyArIHZsaW5rICsgJ1xcXFxcXFxcbicgKyAn6Kej5p6Q5o6l5Y+j77yaXFxcXFxcXFxuJyArIGppZWspO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICBpZiAoY29udHNbZ2V0TXlWYXIodGl0bGUsICcwJyldLnBsYXllcl9pbmZvLnBhcnNlMiAmJiAoY29udHNbZ2V0TXlWYXIodGl0bGUsICcwJyldLnBsYXllcl9pbmZvLnBhcnNlMikuaW5kZXhPZihcXFxcXFxcIj1cXFxcXFxcIikgIT0gLTEpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgbG9nKCdcXFxcXFxcXG7nur/ot6/vvJonICsgcHRhYiArICdcXFxcXFxcXG7op4bpopHvvJonICsgdmxpbmsgKyAnXFxcXFxcXFxuJyArICfop6PmnpDmjqXlj6PvvJpcXFxcXFxcXG4nICsgY29udHNbZ2V0TXlWYXIodGl0bGUsICcwJyldLnBsYXllcl9pbmZvLnBhcnNlMi5yZXBsYWNlKC9cXFxcXFxcXC5cXFxcXFxcXC4vZywgXFxcXFxcXCIuXFxcXFxcXCIpLnJlcGxhY2UoL1xcXFxcXFxcLC9nLCBcXFxcXFxcIlxcXFxcXFxcblxcXFxcXFxcblxcXFxcXFwiKSk7XFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb250c1tnZXRNeVZhcih0aXRsZSwgJzAnKV0ucGxheWVyX2luZm8ucGFyc2UgJiYgKGNvbnRzW2dldE15VmFyKHRpdGxlLCAnMCcpXS5wbGF5ZXJfaW5mby5wYXJzZSkuaW5kZXhPZihcXFxcXFxcIj1cXFxcXFxcIikgIT0gLTEpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgbG9nKCdcXFxcXFxcXG7nur/ot6/vvJonICsgcHRhYiArICdcXFxcXFxcXG7op4bpopHvvJonICsgdmxpbmsgKyAnXFxcXFxcXFxuJyArICfop6PmnpDmjqXlj6PvvJpcXFxcXFxcXG4nICsgY29udHNbZ2V0TXlWYXIodGl0bGUsICcwJyldLnBsYXllcl9pbmZvLnBhcnNlLnJlcGxhY2UoL1xcXFxcXFxcLlxcXFxcXFxcLi9nLCBcXFxcXFxcIi5cXFxcXFxcIikucmVwbGFjZSgvXFxcXFxcXFwsL2csIFxcXFxcXFwiXFxcXFxcXFxuXFxcXFxcXFxuXFxcXFxcXCIpKTtcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICBsb2coJ1xcXFxcXFxcbue6v+i3r++8micgKyBwdGFiICsgJ1xcXFxcXFxcbuinhumike+8micgKyB2bGluayArICdcXFxcXFxcXG4nICsgJ+ino+aekOaOpeWPo++8mlxcXFxcXFxcbicgKyBqaWVrKTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgLy9zZXRFcnJvcihqaWVrKTsgICAgICAgICAgICAgICAgXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICB9IGNhdGNoIChlKSB7fVxcXFxuICAgIC8v5aOw5piO6ZO+5o6lXFxcXG4gICAgdmFyIGxpbmsgPSBqaWVrICsgdmxpbms7XFxcXG4gICAgLypcXFxcbiAgICBpZiAoL1xcXFxcXFxcLm0zdTh8XFxcXFxcXFwubXA0fG9ialxcXFxcXFxcL3Rvcy8udGVzdCh2bGluaykgJiYgL2h0dHAvLnRlc3QodmxpbmspKSB7XFxcXG4gICAgICAgIGxpbmsgPSB2bGluaztcXFxcbiAgICB9XFxcXG4gICAgKi9cXFxcbiAgICAvL2xvZyhsaW5rKTtcXFxcblxcXFxuICAgIHRyeSB7XFxcXG4gICAgICAgIHZ0aXRsZSA9IHZ0aXRsZS5tYXRjaCgvKOesrHxcXFxcXFxcXGR8LSkqKOmbhnzor5185pyfKS9nKSA/IHZ0aXRsZS5yZXBsYWNlKC/nrKx86ZuGfOivnXzmnJ8vZywgJycpIDogdnRpdGxlLnJlcGxhY2UoL15cXFxcXFxcXHMqLywgXFxcXFxcXCJcXFxcXFxcIik7XFxcXG4gICAgfSBjYXRjaCAoZSkge31cXFxcblxcXFxuICAgIGlmIChsaXN0Lmxlbmd0aCA8PSA0KSB7XFxcXG4gICAgICAgIHZhciBjbHQgPSAndGV4dF8yJztcXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICB2YXIgY2x0ID0gaXNOYU4odnRpdGxlKSA/ICdmbGV4X2J1dHRvbicgOiAndGV4dF81J1xcXFxuICAgIH07XFxcXG4gICAgaXRlbXMucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiB2dGl0bGUsXFxcXG4gICAgICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eScpLmxhenlSdWxlKChwdGFiLCBsaW5rLCBteXVybCwgdmxpbmspID0+IHtcXFxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBvcGVudXJsKHJlc3VybCkge1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdXJsLm1hdGNoKC95b3VrdXxtZ3R2fGl4aWd1YXxxcS5jb218cWl5aXxtaWd1fGJpbGliaWxpfHNvaHV8cHB0dnxsZXwxOTA1LmNvbS8pICYmIHJlc3VybC5zZWFyY2goL2h0bWx8YmlsaWJpbGl8aXhpZ3VhLykgIT0gLTEpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vaHRtbOe9kemhteiwg+eUqOaWreaPkuino+aekFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuRG4gPSBKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL2ZpbGVzL3J1bGVzL3h5cS9hcHBtc2V0Lmpzb24nLCB7fSkpLmVuRG47XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5EbiA9PSAnMScpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2coJ+iwg+eUqOaWreaPkuino+aekGh0bWwnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKFxcXFxcXFwidmFyIGNvbmZpZyA9XFxcXFxcXCIgKyBmZXRjaChcXFxcXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlQYXJzZVNldC5qc29uXFxcXFxcXCIpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKGZldGNoKGNvbmZpZy5jaikpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBheXRtUGFyc2UocmVzdXJsKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VybFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgvXFxcXFxcXFwubTN1OHxcXFxcXFxcXC5tcDR8b2JqXFxcXFxcXFwvdG9zfG5ldGVhc2VcXFxcXFxcXC5jb20vLnRlc3QocmVzdXJsKSAmJiAvaHR0cC8udGVzdChyZXN1cmwpICYmICEvXFxcXFxcXFwuaHRtbHxcXFxcXFxcXC5tM3U4XFxcXFxcXFwudHYvLnRlc3QocmVzdXJsKSAmJiAhL1xcXFxcXFxcPWh0dHAvLnRlc3QocmVzdXJsKSAmJiBwdGFiICE9ICdkdW9kdW96eScpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvd2tmaWxlLy50ZXN0KHJlc3VybCkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdXJsICsgJzt7UmVmZXJlckBodHRwczovL2ZhbnR1YW4ud2tmaWxlLmNvbS99J1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gL1xcXFxcXFxcPWh0Ly50ZXN0KHJlc3VybCkgPyByZXN1cmwuc3Vic3RyaW5nKHJlc3VybC5pbmRleE9mKCc9aHQnKSArIDEpIDogcmVzdXJsICsgJyNpc1ZpZGVvPXRydWUjJztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8v6LCD55So5pat5o+S6YCa55So5Ye95pWw6Kej5p6QXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5EbiA9IEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vZmlsZXMvcnVsZXMveHlxL2FwcG1zZXQuanNvbicsIHt9KSkuZW5EbjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbkRuID09ICcxJykge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZygn6LCD55So5pat5o+S6YCa55So5Ye95pWw6Kej5p6QXFxcXFxcXFxuJyArIHB0YWIgKyAnKOmAmueUqOWHveaVsCknKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKFxcXFxcXFwidmFyIGNvbmZpZyA9XFxcXFxcXCIgKyBmZXRjaChcXFxcXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlQYXJzZVNldC5qc29uXFxcXFxcXCIpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKGZldGNoKGNvbmZpZy5jaikpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gcHRhYiArICco6YCa55So5Ye95pWwKSc7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBhcnNlU1tuYW1lXShyZXN1cmwsIG15dXJsKTtcXFxcblxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwdGFiID09ICdkZHp5Jykge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldHJhbmRvbSh1cmxzdHIpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZFN0ciA9IHVybHN0ci5zdWJzdHJpbmcoMCwgOCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyA9IHVybHN0ci5zdWJzdHJpbmcoOCwgdXJsc3RyLmxlbmd0aCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnN0ciA9IGJhc2U2NERlY29kZShzdHJpbmcpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3Vic3RyLnN1YnN0cmluZyg4LCBzdWJzdHIubGVuZ3RoIC0gOCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIganhodG1sID0gcmVxdWVzdChcXFxcXFxcImh0dHBzOi8vcGxheS5zdW95b3UuY2MveHBsYXkvP3VybD1cXFxcXFxcIiArIHZsaW5rLCB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiUmVmZXJlclxcXFxcXFwiOiBcXFxcXFxcImh0dHBzOi8vd3d3Lmp1YmFpYmFpLmNjL1xcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKGp4aHRtbC5tYXRjaCgvdmFyIGNvbmZpZ1tcXFxcXFxcXHNcXFxcXFxcXFNdKj99LylbMF0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZHd5ID0gcG9zdChcXFxcXFxcImh0dHBzOi8vcGxheS5zdW95b3UuY2MveHBsYXkvaGQwTDNUakg0bTh6U0sxTi5qcGdcXFxcXFxcIiwge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIlVzZXItQWdlbnRcXFxcXFxcIjogTU9CSUxFX1VBXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwidXJsXFxcXFxcXCI6IGNvbmZpZy51cmwsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcInZrZXlcXFxcXFxcIjogY29uZmlnLnZrZXksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcInRva2VuXFxcXFxcXCI6IGNvbmZpZy50b2tlblxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldHJhbmRvbShKU09OLnBhcnNlKGRkd3kpLnVybCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9taWFvcGFydHkvLnRlc3QocHRhYikpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlQ2FjaGUoJ2h0dHBzOi8vYWdpdC5haS9semsyMzU1OS9QdWJsaWNSdWxlL3Jhdy9icmFuY2gvbWFzdGVyL3g1cnVsZS5qcycsIDI0KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geDVydWxlKCdodHRwczovL3d3dy5mdW40ay5jb20vYXBsYXllci8/dXJsPScgKyByZXN1cmwpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdXJsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfTtcXFxcblxcXFxuICAgICAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIC8qXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuRG4gPSBKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL2ZpbGVzL3J1bGVzL3h5cS9hcHBtc2V0Lmpzb24nLCB7fSkpLmVuRG47XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVuRG4gPT0gJzEnICYmIHZsaW5rLm1hdGNoKC95b3VrdXxtZ3R2fGl4aWd1YXxxcS5jb218cWl5aXxtaWd1fGJpbGliaWxpfHNvaHV8cHB0dnxsZXwxOTA1LmNvbS8pICYmIHZsaW5rLnNlYXJjaCgvaHRtbHxiaWxpYmlsaXxpeGlndWEvKSAhPSAtMSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2coJ+W3suW8gOWQr+aWreaPku+8jOWwhuiwg+eUqOaWreaPkuino+aekGh0bWwnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChcXFxcXFxcInZhciBjb25maWcgPVxcXFxcXFwiICsgZmV0Y2goXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015UGFyc2VTZXQuanNvblxcXFxcXFwiKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoZmV0Y2goY29uZmlnLmNqKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBheXRtUGFyc2UodmxpbmspO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07Ki9cXFxcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcXFxuXFxcXG4gICAgICAgICAgICAgICAgdmFyIHNyY3VybCA9IGxpbms7XFxcXG4gICAgICAgICAgICAgICAgLy9sb2coc3JjdXJsKTtcXFxcbiAgICAgICAgICAgICAgICAvL+WKqOaAgeino+aekOS7o+eggeW8gOWni1xcXFxuICAgICAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIC8v5aSE55CG5oyH5a6a6KeG6aKR5LiO57q/6LevXFxcXG4gICAgICAgICAgICAgICAgICAgIGlmICgvXFxcXFxcXFwubTN1OHxcXFxcXFxcXC5tcDR8b2JqXFxcXFxcXFwvdG9zfG5ldGVhc2VcXFxcXFxcXC5jb20vLnRlc3Qoc3JjdXJsKSAmJiAvaHR0cC8udGVzdChzcmN1cmwpICYmICEvXFxcXFxcXFwuaHRtbHxcXFxcXFxcXC5tM3U4XFxcXFxcXFwuLy50ZXN0KHNyY3VybCkgJiYgIS9cXFxcXFxcXD1odHRwLy50ZXN0KHNyY3VybCkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvd2tmaWxlLy50ZXN0KHNyY3VybCkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3JjdXJsICsgJzt7UmVmZXJlckBodHRwczovL2ZhbnR1YW4ud2tmaWxlLmNvbS99J1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gL1xcXFxcXFxcPWh0Ly50ZXN0KHNyY3VybCkgPyBzcmN1cmwuc3Vic3RyaW5nKHNyY3VybC5pbmRleE9mKCc9aHQnKSArIDEpIDogc3JjdXJsICsgJyNpc1ZpZGVvPXRydWUjJztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgvaGQ4XFxcXFxcXFwucHcvLnRlc3QodmxpbmspICYmIC9cXFxcXFxcXC5tM3U4fFxcXFxcXFxcLm1wNC8udGVzdCh2bGluaykpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2bGluaztcXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzcmN1cmwuaW5kZXhPZihcXFxcXFxcIi9zaGFyZS9cXFxcXFxcIikgIT0gLTEpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmsgPSBzcmN1cmwuc3BsaXQoXFxcXFxcXCIvc2hhcmVcXFxcXFxcIilbMF07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZjID0gZmV0Y2goc3JjdXJsLCB7fSkucmVwbGFjZShcXFxcXFxcInZhciBwdXJsXFxcXFxcXCIsIFxcXFxcXFwidmFyIG1haW5cXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZjLmluZGV4T2YoXFxcXFxcXCJtYWluXFxcXFxcXCIpICE9IC0xKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXQgPSBmYy5tYXRjaCgvdmFyIG1haW4uKj87LylbMF07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwobWF0KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBsYXkgPSAobWFpbi5pbmRleE9mKFxcXFxcXFwiaHR0cFxcXFxcXFwiKSAhPSAtMSA/IG1haW4gOiBsaW5rICsgbWFpbik7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1haW4gPSBmYy5tYXRjaCgvdXJsOi4qP1tcXFxcXFxcXCdcXFxcXFxcXFxcXFxcXFwiXSguKj8pW1xcXFxcXFxcJ1xcXFxcXFxcXFxcXFxcXCJdLylbMV07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwbGF5ID0gKG1haW4uaW5kZXhPZihcXFxcXFxcImh0dHBcXFxcXFxcIikgIT0gLTEgPyBtYWluIDogbGluayArIG1haW4pXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGxheTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3g1V2ViVmlldzovLycgKyAoc3JjdXJsKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuXFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoLzk4M3ZpcC8udGVzdChzcmN1cmwpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShmZXRjaChzcmN1cmwsIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiVXNlci1BZ2VudFxcXFxcXFwiOiBNT0JJTEVfVUFcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0OiBmYWxzZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoSGVhZGVyczogdHJ1ZVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpLmhlYWRlcnMubG9jYXRpb25bMF07XFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoL3hcXFxcXFxcXC1uXFxcXFxcXFwuY2N8bmhkejY2Ni8udGVzdChzcmN1cmwpICYmIC9cXFxcXFxcXC5odG1sfGJpbGliaWxpLy50ZXN0KHNyY3VybCkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcGVudXJsKHZsaW5rKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAvL+WkhOeQhuaMh+WumuinhumikeWSjOe6v+i3r+e7k+adn1xcXFxuICAgICAgICAgICAgICAgICAgICAvLy0tLS3liIblibLnur8tLS0tLy9cXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNjb2RlID0gSlNPTi5wYXJzZShmZXRjaChzcmN1cmwsIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIlVzZXItQWdlbnRcXFxcXFxcIjogXFxcXFxcXCJva2h0dHAvNC4xLjBcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0OiBmYWxzZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhTdGF0dXNDb2RlOiB0cnVlXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgLy9sb2coc2NvZGUpO1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoc2NvZGUuc3RhdHVzQ29kZSA9PSAnMzAyJyB8fCBzY29kZS5zdGF0dXNDb2RlID09ICczMDEnKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL+aJk+W8gOino+aekOaciTMwMumHjeWumuWQkeeahOmTvuaOpVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlZHVybCA9IHNjb2RlLmhlYWRlcnMubG9jYXRpb25bMF0ucmVwbGFjZSgvXFxcXFxcXFxcXFxcXFxcXC9nLCAnJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoL1xcXFxcXFxcPWh0dHAvLnRlc3QocmVkdXJsKSAmJiAvaHRtbHxiaWxpYmlsaXxrZXlcXFxcXFxcXD0vLnRlc3QocmVkdXJsKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGZldGNoKHJlZHVybCwge30pKS51cmw7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9cXFxcXFxcXD1odHRwLy50ZXN0KHJlZHVybCkgJiYgL1xcXFxcXFxcLm0zdTh8XFxcXFxcXFwubXA0fFxcXFxcXFxcLmZsdi8udGVzdChyZWR1cmwpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlZHVybC5zdWJzdHJpbmcocmVkdXJsLmluZGV4T2YoJz1odHRwJykgKyAxKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoL2h0dHAvLnRlc3QocmVkdXJsKSAmJiAva2V5XFxcXFxcXFw9fHVpZFxcXFxcXFxcPXx2aWRcXFxcXFxcXD0vLnRlc3QocmVkdXJsKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGZldGNoKHJlZHVybCwge30pKS51cmw7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9odHRwLy50ZXN0KHJlZHVybCkgJiYgL2h0bWx8YmlsaWJpbGkvLnRlc3QocmVkdXJsKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcGVudXJsKHZsaW5rKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlZHVybFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy92YXIgaHRtbCA9IHJlcXVlc3Qoc3JjdXJsKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBodG1sID0gc2NvZGUuYm9keTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9nKGh0bWwpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC80MDQgTm90IEZvdW5kfOWkh+ahiOWQjuWPr+e7p+e7reiuv+mXri8udGVzdChodG1sKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcGVudXJsKHZsaW5rKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoL1xcXFxcXFxcPGJvZHkvLnRlc3QoaHRtbCkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2coJ+WwneivlemdnkpTT07mjqXlj6PnvZHpobXop6PmnpAnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlQ2FjaGUoJ2h0dHBzOi8vYWdpdC5haS9semsyMzU1OS9QdWJsaWNSdWxlL3Jhdy9icmFuY2gvbWFzdGVyL3g1cnVsZS5qcycsIDI0KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geDVydWxlKHNyY3VybCwgc3JjdXJsKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3JldHVybiBvcGVudXJsKHNyY3VybCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vanNvbuino+aekOeahOWPlumTvuaOpVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwdXJsID0gaHRtbC5tYXRjaCgvW1xcXFxcXFxcJ1xcXFxcXFxcXFxcXFxcXCJddXJsW1xcXFxcXFxcJ1xcXFxcXFxcXFxcXFxcXCJdOi4qP1tcXFxcXFxcXCdcXFxcXFxcXFxcXFxcXFwiXSguKj8pW1xcXFxcXFxcJ1xcXFxcXFxcXFxcXFxcXCJdLylbMV0ucmVwbGFjZSgvXFxcXFxcXFxcXFxcXFxcXC9nLCAnJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2cocHVybCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC9odHRwLy50ZXN0KHB1cmwpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwdGFiID09ICdiaWxpYmlsaScpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwdXJsICsgJzt7UmVmZXJlckBodHRwczovL3d3dy5iaWxpYmlsaS5jb20vJiZVc2VyLUFnZW50QE1vemlsbGEvNS4wfSc7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocHRhYiA9PSAnbWd0dicpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwdXJsICsgJyNpc1ZpZGVvPXRydWUjJyArICc7e1JlZmVyZXJAd3d3Lm1ndHYuY29tJiZVc2VyLUFnZW50QE1vemlsbGEvNS4wfSc7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoL29qYmsvLnRlc3QocHVybCkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwdXJsICsgJzt7UmVmZXJlckBodHRwczovL2Jhay5vamJranguY29tL30nO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC92aWRlb19tcDR8dHlwZVxcXFxcXFxcPW0zdTh8cHRcXFxcXFxcXD1tM3U4fFxcXFxcXFxcL3ZpZGVvXFxcXFxcXFwvdG9zXFxcXFxcXFwvLy50ZXN0KHB1cmwpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHVybCArICcjaXNWaWRlbz10cnVlIyc7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHVybFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v6Z2eaHR0cOW8gOWktOeahOaJk+W8gOWOn+mTvuaOpSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wZW51cmwodmxpbmspXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAvL+aKpemUmeWIpOaWreWkhOeQhlxcXFxuICAgICAgICAgICAgICAgICAgICBsb2coJ+aJp+ihjOaKpemUmei3s+i9rOWkhOeQhicpO1xcXFxuICAgICAgICAgICAgICAgICAgICAvKmlmIChzcmN1cmwuc3Vic3RyaW5nKDAsIDIpID09ICdcXFxcXFxcXC9cXFxcXFxcXC8nKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3BlbnVybCgnaHR0cHM6JyArIHNyY3VybCk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoL1xcXFxcXFxcPWh0dHAvLnRlc3Qoc3JjdXJsKSAmJiAvXFxcXFxcXFwuaHRtbHxiaWxpYmlsaS8udGVzdChzcmN1cmwpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3JldHVybiBzcmN1cmwuc3BsaXQoJz0nKVsxXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcGVudXJsKHNyY3VybC5zdWJzdHJpbmcoc3JjdXJsLmluZGV4T2YoJz1odHRwJykgKyAxKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ki9cXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wZW51cmwodmxpbmspXFxcXG4gICAgICAgICAgICAgICAgICAgIC8vcmV0dXJuICd4NVdlYlZpZXc6Ly8nK3NyY3VybFxcXFxuICAgICAgICAgICAgICAgICAgICAvL31cXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgLy/liqjmgIHop6PmnpDku6PnoIHnu5PmnZ9cXFxcbiAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICBwdGFiLFxcXFxuICAgICAgICAgICAgbGluayxcXFxcbiAgICAgICAgICAgIG15dXJsLFxcXFxuICAgICAgICAgICAgdmxpbmspLFxcXFxuICAgICAgICBjb2xfdHlwZTogY2x0XFxcXG4gICAgfSk7XFxcXG59XFxcXG4vL31cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCJUVueugOS7i+S4jumAiembhlxcXCIsXFxcInBhdGhcXFwiOlxcXCJ0dm1vdmxpc3RcXFwiLFxcXCJydWxlXFxcIjpcXFwidmFyIHRhYnMgPSBPYmplY3Qua2V5cyhodG1sLnZpZGVvbGlzdCk7XFxcXG52YXIgdGh1bWIgPSBodG1sLmltZ191cmw7XFxcXG5pdGVtcy5wdXNoKHtcXFxcbiAgICB0aXRsZTogJ+WJp+aDheeugOS7i++8micsXFxcXG4gICAgZGVzYzogaHRtbC5pbnRybyxcXFxcbiAgICBwaWNfdXJsOiB0aHVtYixcXFxcbiAgICB1cmw6ICQoJ2hpa2VyOi8vZW1wdHkjbm9SZWNvcmRIaXN0b3J5IycpLnJ1bGUoKGRlcykgPT4ge1xcXFxuICAgICAgICBzZXRSZXN1bHQoW3tcXFxcbiAgICAgICAgICAgIHRpdGxlOiBkZXMsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2xvbmdfdGV4dCdcXFxcbiAgICAgICAgfV0pO1xcXFxuICAgIH0sIGh0bWwuaW50cm8pLFxcXFxuICAgIGNvbF90eXBlOiAnbW92aWVfMV92ZXJ0aWNhbF9waWMnXFxcXG59KTtcXFxcbmV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL2RucGx1Z2luJywge30pKS5ydWxlKTtcXFxcblxcXFxuaXRlbXMucHVzaCh7XFxcXG4gICAgdGl0bGU6ICfigJzigJzmjpLluo/igJ3igJ0nLFxcXFxuICAgIHVybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5QGxhenlSdWxlPS5qczpwdXRNeVZhcignYXBwbXR2c29ydCcsIGdldE15VmFyKCdhcHBtdHZzb3J0JywnMScpPT0nMSc/JzAnOicxJyk7cmVmcmVzaFBhZ2UoZmFsc2UpOyd0b2FzdDovL+WIh+aNouaIkOWKn++8gSdcXFxcXFxcIixcXFxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxcXG59KTtcXFxcbnZhciBndmEgPSBNWV9VUkw7XFxcXG5mb3IgKHZhciBrID0gMDsgayA8IHRhYnMubGVuZ3RoOyBrKyspIHtcXFxcbiAgICB2YXIgcHRhYiA9IHRhYnNba107XFxcXG4gICAgaXRlbXMucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiAoZ2V0TXlWYXIoZ3ZhLCAnMCcpID09IGsgPyAn8J+RifCfj7snIDogJycpICsgcHRhYixcXFxcbiAgICAgICAgdXJsOiBgaGlrZXI6Ly9lbXB0eUBsYXp5UnVsZT0uanM6cHV0TXlWYXIoJ2AgKyBndmEgKyBcXFxcXFxcIicsICdcXFxcXFxcIiArIGsgKyBgJyk7cmVmcmVzaFBhZ2UoKTsndG9hc3Q6Ly/liIfmjaLmiJDlip/vvIEnYCxcXFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcXFxuICAgIH0pO1xcXFxuXFxcXG59XFxcXG5cXFxcbi8vZm9yICh2YXIgaSA9IDA7IGkgPCB0YWJzLmxlbmd0aDsgaSsrKSB7XFxcXG5pZiAoZ2V0TXlWYXIoJ2FwcG10dnNvcnQnLCAnMScpID09ICcxJykge1xcXFxuICAgIHZhciBsaXN0ID0gaHRtbC52aWRlb2xpc3RbdGFic1tnZXRNeVZhcihndmEsICcwJyldXTtcXFxcbn0gZWxzZSB7XFxcXG4gICAgdmFyIGxpc3QgPSBodG1sLnZpZGVvbGlzdFt0YWJzW2dldE15VmFyKGd2YSwgJzAnKV1dLnJldmVyc2UoKTtcXFxcbn07XFxcXG5cXFxcbmZvciAodmFyIGogPSAwOyBqIDwgbGlzdC5sZW5ndGg7IGorKykge1xcXFxuICAgIHZhciBzcmN1cmwgPSBsaXN0W2pdLnVybDtcXFxcbiAgICBpZiAoLzI5M2p4MS8udGVzdChzcmN1cmwpKSB7XFxcXG4gICAgICAgIHNyY3VybCA9IHNyY3VybC5yZXBsYWNlKCcyOTNqeDEnLCAnangnKTtcXFxcbiAgICB9IGVsc2UgaWYgKC84ZDhxfGRpbGlrdHZ8aGFva2FuanUxfGN6dHZ8Zml0XFxcXFxcXFw6OHxwcHpodS8udGVzdChteXVybCkpIHtcXFxcbiAgICAgICAgc3JjdXJsID0gc3JjdXJsICsgJyZhcHA9MTAwMDAmYWNjb3VudD0yNzI3NzUwMjgmcGFzc3dvcmQ9cXEyNzI3NzUwMjgnO1xcXFxuICAgIH1cXFxcbiAgICB2YXIgdGl0bGUgPSBsaXN0W2pdLnRpdGxlO1xcXFxuICAgIHRpdGxlID0gdGl0bGUubWF0Y2goLyjnrKx8XFxcXFxcXFxkfC0pKijpm4Z86K+dfOacnykvZykgPyB0aXRsZS5yZXBsYWNlKC/nrKx86ZuGfOivnXzmnJ8vZywgJycpIDogdGl0bGU7XFxcXG4gICAgaWYgKGxpc3QubGVuZ3RoIDw9IDQpIHtcXFxcbiAgICAgICAgdmFyIGNsdCA9ICd0ZXh0XzInO1xcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIHZhciBjbHQgPSBpc05hTih0aXRsZSkgPyAnZmxleF9idXR0b24nIDogJ3RleHRfNSdcXFxcbiAgICB9O1xcXFxuICAgIGl0ZW1zLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogdGl0bGUsXFxcXG4gICAgICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eScpLmxhenlSdWxlKChwdGFiLCBzcmN1cmwsIG15dXJsKSA9PiB7XFxcXG4gICAgICAgICAgICBmdW5jdGlvbiBvcGVudXJsKHJlc3VybCkge1xcXFxuICAgICAgICAgICAgICAgIGlmIChyZXN1cmwubWF0Y2goL3lvdWt1fG1ndHZ8aXhpZ3VhfHFxLmNvbXxxaXlpfG1pZ3V8YmlsaWJpbGl8c29odXxwcHR2fGxlfDE5MDUuY29tLykgJiYgcmVzdXJsLnNlYXJjaCgvaHRtbHxiaWxpYmlsaS8pICE9IC0xKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHZhciBlbkRuID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy94eXEvYXBwbXNldC5qc29uJywge30pKS5lbkRuO1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoZW5EbiA9PSAnMScpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZygn6LCD55So5pat5o+S6Kej5p6QJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBldmFsKFxcXFxcXFwidmFyIGNvbmZpZyA9XFxcXFxcXCIgKyBmZXRjaChcXFxcXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlQYXJzZVNldC5qc29uXFxcXFxcXCIpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoZmV0Y2goY29uZmlnLmNqKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXl0bVBhcnNlKHJlc3VybCk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdXJsXFxcXG4gICAgICAgICAgICAgICAgICAgIH07XFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgvXFxcXFxcXFw9TFRcXFxcXFxcXC0vLnRlc3QocmVzdXJsKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICBsb2coJ+iwg+eUqOaWreaPkmx0bmLpgJrnlKjop6PmnpAnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgZXZhbChcXFxcXFxcInZhciBjb25maWcgPVxcXFxcXFwiICsgZmV0Y2goXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015UGFyc2VTZXQuanNvblxcXFxcXFwiKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGV2YWwoZmV0Y2goY29uZmlnLmNqKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gJ2x0bmIo6YCa55So5Ye95pWwKSc7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZVNbbmFtZV0ocmVzdXJsLnN1YnN0cmluZyhyZXN1cmwuaW5kZXhPZignPUxULScpICsgMSkpO1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1cmxcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9O1xcXFxuXFxcXG4gICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgICAgIHZhciBlbkRuID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy94eXEvYXBwbXNldC5qc29uJywge30pKS5lbkRuO1xcXFxuICAgICAgICAgICAgICAgIGlmIChlbkRuID09ICcxJyAmJiBzcmN1cmwubWF0Y2goL3lvdWt1fG1ndHZ8aXhpZ3VhfHFxLmNvbXxxaXlpfG1pZ3V8YmlsaWJpbGl8c29odXxwcHR2fGxlfDE5MDUuY29tLykgJiYgc3JjdXJsLnNlYXJjaCgvaHRtbHxiaWxpYmlsaXxpeGlndWEvKSAhPSAtMSkge1xcXFxuICAgICAgICAgICAgICAgICAgICBsb2coJ+W3suW8gOWQr+aWreaPku+8jOWwhuiwg+eUqOaWreaPkuino+aekGh0bWwnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgZXZhbChcXFxcXFxcInZhciBjb25maWcgPVxcXFxcXFwiICsgZmV0Y2goXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015UGFyc2VTZXQuanNvblxcXFxcXFwiKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGV2YWwoZmV0Y2goY29uZmlnLmNqKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBheXRtUGFyc2Uoc3JjdXJsLnN1YnN0cmluZyhzcmN1cmwuaW5kZXhPZignPWh0dHAnKSArIDEpKTtcXFxcbiAgICAgICAgICAgICAgICB9O1xcXFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cXFxcblxcXFxuICAgICAgICAgICAgLy9sb2coc3JjdXJsKTtcXFxcbiAgICAgICAgICAgIC8v5Yqo5oCB6Kej5p6Q5Luj56CB5byA5aeLXFxcXG4gICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgICAgIGlmICgvXFxcXFxcXFwubTN1OHxcXFxcXFxcXC5tcDR8b2JqXFxcXFxcXFwvdG9zLy50ZXN0KHNyY3VybCkgJiYgL2h0dHAvLnRlc3Qoc3JjdXJsKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gL1xcXFxcXFxcPWh0Ly50ZXN0KHNyY3VybCkgPyBzcmN1cmwuc3Vic3RyaW5nKHNyY3VybC5pbmRleE9mKCc9aHQnKSArIDEpIDogc3JjdXJsICsgJyNpc1ZpZGVvPXRydWUjJztcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNyY3VybC5pbmRleE9mKFxcXFxcXFwiL3NoYXJlL1xcXFxcXFwiKSAhPSAtMSkge1xcXFxuICAgICAgICAgICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmsgPSBzcmN1cmwuc3BsaXQoXFxcXFxcXCIvc2hhcmVcXFxcXFxcIilbMF07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmMgPSBmZXRjaChzcmN1cmwsIHt9KS5yZXBsYWNlKFxcXFxcXFwidmFyIHB1cmxcXFxcXFxcIiwgXFxcXFxcXCJ2YXIgbWFpblxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmYy5pbmRleE9mKFxcXFxcXFwibWFpblxcXFxcXFwiKSAhPSAtMSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXQgPSBmYy5tYXRjaCgvdmFyIG1haW4uKj87LylbMF07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChtYXQpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwbGF5ID0gKG1haW4uaW5kZXhPZihcXFxcXFxcImh0dHBcXFxcXFxcIikgIT0gLTEgPyBtYWluIDogbGluayArIG1haW4pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFpbiA9IGZjLm1hdGNoKC91cmw6Lio/W1xcXFxcXFxcJ1xcXFxcXFxcXFxcXFxcXCJdKC4qPylbXFxcXFxcXFwnXFxcXFxcXFxcXFxcXFxcIl0vKVsxXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGxheSA9IChtYWluLmluZGV4T2YoXFxcXFxcXCJodHRwXFxcXFxcXCIpICE9IC0xID8gbWFpbiA6IGxpbmsgKyBtYWluKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwbGF5O1xcXFxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3g1V2ViVmlldzovLycgKyAoc3JjdXJsKVxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwdGFiID09ICdhbGl6eScpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHB1cmwgPSBmZXRjaCgnaHR0cHM6Ly9mb3ViaW4uY29tL2ppZXhpLnBocD91cmw9JyArIHNyY3VybCwge30pLm1hdGNoKC9cXFxcXFxcXFxcXFxcXFwidXJsXFxcXFxcXFxcXFxcXFxcIjpcXFxcXFxcXFxcXFxcXFwiKC4qPylcXFxcXFxcXFxcXFxcXFwiLylbMV07XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwdXJsO1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoLzE5anhcXFxcXFxcXC52aXB8bmZ5aW5nc2hpLy50ZXN0KHNyY3VybCkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHB1cmwgPSBKU09OLnBhcnNlKGZldGNoKHNyY3VybC5yZXBsYWNlKCdodHRwOi8vJywgJ2h0dHBzOi8vJyksIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIlVzZXItQWdlbnRcXFxcXFxcIjogTU9CSUxFX1VBXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3Q6IGZhbHNlLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgd2l0aEhlYWRlcnM6IHRydWVcXFxcbiAgICAgICAgICAgICAgICAgICAgfSkpLmhlYWRlcnMubG9jYXRpb25bMF07XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmICgvdGl0YW4ubWd0di8udGVzdChwdXJsKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB1cmwgKyAnI2lzVmlkZW89dHJ1ZSMnICsgJzt7UmVmZXJlckB3d3cubWd0di5jb20mJlVzZXItQWdlbnRATW96aWxsYS81LjB9JztcXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgvb2JqXFxcXFxcXFwvdG9zLy50ZXN0KHB1cmwpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHVybCArICcjaXNWaWRlbz10cnVlIyc7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHVybFxcXFxuICAgICAgICAgICAgICAgICAgICB9O1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAvKmVsc2UgaWYgKC96aGFpa2FueXMvLnRlc3Qoc3JjdXJsKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHB1cmwgPSBKU09OLnBhcnNlKGZldGNoKHNyY3VybCArICcmYXBwPTEwMDAzJmFjY291bnQ9MjcyNzc1MDI4JnBhc3N3b3JkPXFxMjcyNzc1MDI4Jywge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJVc2VyLUFnZW50XFxcXFxcXCI6IE1PQklMRV9VQVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3Q6IGZhbHNlLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhIZWFkZXJzOiB0cnVlXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSkuaGVhZGVycy5sb2NhdGlvblswXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvdGl0YW4ubWd0di8udGVzdChwdXJsKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwdXJsICsgJyNpc1ZpZGVvPXRydWUjJyArICc7e1JlZmVyZXJAd3d3Lm1ndHYuY29tJiZVc2VyLUFnZW50QE1vemlsbGEvNS4wfSc7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9vYmpcXFxcXFxcXC90b3MvLnRlc3QocHVybCkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHVybCArICcjaXNWaWRlbz10cnVlIyc7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwdXJsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ki9cXFxcblxcXFxuICAgICAgICAgICAgICAgIC8vLS0tLeWIhuWJsue6vy0tLS0vL1xcXFxuICAgICAgICAgICAgICAgIHZhciBzY29kZSA9IEpTT04ucGFyc2UoZmV0Y2goc3JjdXJsLCB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiVXNlci1BZ2VudFxcXFxcXFwiOiBNT0JJTEVfVUFcXFxcbiAgICAgICAgICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3Q6IGZhbHNlLFxcXFxuICAgICAgICAgICAgICAgICAgICB3aXRoU3RhdHVzQ29kZTogdHJ1ZVxcXFxuICAgICAgICAgICAgICAgIH0pKTtcXFxcbiAgICAgICAgICAgICAgICAvL2xvZyhzY29kZSk7XFxcXG4gICAgICAgICAgICAgICAgaWYgKHNjb2RlLnN0YXR1c0NvZGUgPT0gJzMwMicgfHwgc2NvZGUuc3RhdHVzQ29kZSA9PSAnMzAxJykge1xcXFxuICAgICAgICAgICAgICAgICAgICB2YXIgcHVybCA9IHNjb2RlLmhlYWRlcnMubG9jYXRpb25bMF0ucmVwbGFjZSgvXFxcXFxcXFxcXFxcXFxcXC9nLCAnJyk7XFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgLy92YXIgaHRtbCA9IHJlcXVlc3Qoc3JjdXJsKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIGh0bWwgPSBzY29kZS5ib2R5O1xcXFxuICAgICAgICAgICAgICAgICAgICAvL2xvZyhodG1sKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKC80MDQgTm90IEZvdW5kfOWkh+ahiOWQjuWPr+e7p+e7reiuv+mXrnzkuI3lrZjlnKgvLnRlc3QoaHRtbCkgfHwgaHRtbCA9PSAnJykge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wZW51cmwoc3JjdXJsLnN1YnN0cmluZyhzcmN1cmwuaW5kZXhPZignPWh0dHAnKSArIDEpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgvXFxcXFxcXFxcXFxcXFxcInVybFxcXFxcXFxcXFxcXFxcXCJcXFxcXFxcXDpcXFxcXFxcXFxcXFxcXFwiaHR0cC8udGVzdChodG1sKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHB1cmwgPSBodG1sLm1hdGNoKC9cXFxcXFxcXFxcXFxcXFwidXJsXFxcXFxcXFxcXFxcXFxcIjpcXFxcXFxcXFxcXFxcXFwiKC4qPylcXFxcXFxcXFxcXFxcXFwiLylbMV0ucmVwbGFjZSgvXFxcXFxcXFxcXFxcXFxcXC9nLCAnJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaHRtbC5zdGFydHNXaXRoKCd7JykpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwdXJsID0gc3JjdXJsLnN1YnN0cmluZyhzcmN1cmwuaW5kZXhPZignPWh0dHAnKSArIDEpO1xcXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy92YXIgcHVybCA9IHNyY3VybFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZUNhY2hlKCdodHRwczovL2FnaXQuYWkvbHprMjM1NTkvUHVibGljUnVsZS9yYXcvYnJhbmNoL21hc3Rlci94NXJ1bGUuanMnLCAyNCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geDVydWxlKHNyY3VybCwgc3JjdXJsKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vcmV0dXJuICd4NVdlYlZpZXc6Ly8nKyhzcmN1cmwpIFxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfTtcXFxcbiAgICAgICAgICAgICAgICAvL2xvZyhwdXJsKTtcXFxcbiAgICAgICAgICAgICAgICBpZiAoL3RpdGFuLm1ndHYvLnRlc3QocHVybCkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB1cmwgKyAnI2lzVmlkZW89dHJ1ZSMnICsgJzt7UmVmZXJlckB3d3cubWd0di5jb20mJlVzZXItQWdlbnRATW96aWxsYS81LjB9JztcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9vYmpcXFxcXFxcXC90b3MvLnRlc3QocHVybCkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB1cmwgKyAnI2lzVmlkZW89dHJ1ZSMnO1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwdXJsXFxcXG4gICAgICAgICAgICAgICAgfTtcXFxcblxcXFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgICAgIGlmIChzcmN1cmwuc3Vic3RyaW5nKDAsIDIpID09ICdcXFxcXFxcXC9cXFxcXFxcXC8nKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcGVudXJsKCdodHRwczonICsgc3JjdXJsKTtcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9cXFxcXFxcXD1odHRwLy50ZXN0KHNyY3VybCkgJiYgL1xcXFxcXFxcLmh0bWx8YmlsaWJpbGkvLnRlc3Qoc3JjdXJsKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAvL3JldHVybiBzcmN1cmwuc3BsaXQoJz0nKVsxXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wZW51cmwoc3JjdXJsLnN1YnN0cmluZyhzcmN1cmwuaW5kZXhPZignPWh0dHAnKSArIDEpKTtcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3BlbnVybChzcmN1cmwpXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgLy/liqjmgIHop6PmnpDku6PnoIHnu5PmnZ9cXFxcbiAgICAgICAgfSwgcHRhYiwgc3JjdXJsLCBteXVybCksXFxcXG4gICAgICAgIGNvbF90eXBlOiBjbHRcXFxcbiAgICB9KTtcXFxcbn1cXFxcbi8vfVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuWIl+ihqOaooeW8j+aQnOe0ouS6jOe6p1xcXCIsXFxcInBhdGhcXFwiOlxcXCJzZWFyZXJqXFxcIixcXFwicnVsZVxcXCI6XFxcInZhciByZXMgPSB7fTtcXFxcbnZhciBpdGVtcyA9IFtdO1xcXFxudmFyIG5vd0RhdGUgPSBuZXcgRGF0ZSgpO1xcXFxudmFyIG1vbnRoID0gbm93RGF0ZS5nZXRNb250aCgpICsgMSA8IDEwID8gXFxcXFxcXCIwXFxcXFxcXCIgKyAobm93RGF0ZS5nZXRNb250aCgpICsgMSkgOiBub3dEYXRlLmdldE1vbnRoKCkgKyAxO1xcXFxudmFyIGRheSA9IG5vd0RhdGUuZ2V0RGF0ZSgpIDwgMTAgPyBcXFxcXFxcIjBcXFxcXFxcIiArIG5vd0RhdGUuZ2V0RGF0ZSgpIDogbm93RGF0ZS5nZXREYXRlKCk7XFxcXG52YXIgZGF0ZVN0ciA9IG1vbnRoICsgJycgKyBkYXk7XFxcXG52YXIgc3BsID0gZ2V0UmVzQ29kZSgpLnNwbGl0KCcjeCMnKTtcXFxcbnZhciB0eXBldCA9IHNwbFszXTtcXFxcbnZhciB0ZG9taW4gPSBzcGxbMl07XFxcXG52YXIga2V5ID0gc3BsWzRdO1xcXFxuXFxcXG5pZiAoL3ZpcG12Ly50ZXN0KHRkb21pbikpIHtcXFxcbiAgICB2YXIgYmh0bWwgPSByZXF1ZXN0KHNwbFsxXSk7XFxcXG59IGVsc2Uge1xcXFxuICAgIHZhciBiaHRtbCA9IGZldGNoKHNwbFsxXSwge1xcXFxuICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICBcXFxcXFxcIlVzZXItQWdlbnRcXFxcXFxcIjogdGRvbWluLmluZGV4T2YoXFxcXFxcXCJtb2dhaV9hcGlcXFxcXFxcIikgIT0gLTEgPyBcXFxcXFxcIkRhcnQvMi4xNCAoZGFydDppbylcXFxcXFxcIiA6IFxcXFxcXFwib2todHRwLzQuMS4wXFxcXFxcXCJcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pO1xcXFxufVxcXFxudHJ5IHtcXFxcbiAgICBiaHRtbCA9IGJodG1sLnN0YXJ0c1dpdGgoJ1xcXFxcXFxcclxcXFxcXFxcbicpID8gYmh0bWwucmVwbGFjZSgnXFxcXFxcXFxyXFxcXFxcXFxuJywgJycpIDogYmh0bWw7XFxcXG59IGNhdGNoIChlKSB7fVxcXFxuaWYgKC9idHdhZi8udGVzdChiaHRtbCkpIHtcXFxcbiAgICAvKlxcXFxuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTon5pyJ5a6d5aGU6aqM6K+B77yM54K55Ye76K6/6Zeu5Y6f572R6aG1JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBzcGxbMV0gKyBgQGxhenlSdWxlPS5qczppbnB1dC5zcGxpdCgnOycpWzBdYCxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnXFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgKi9cXFxcblxcXFxuICAgIGJodG1sID0gZmV0Y2goc3BsWzFdICsgJyZidHdhZicgKyBiaHRtbC5tYXRjaCgvYnR3YWYoLio/KVxcXFxcXFxcXFxcXFxcXCIvKVsxXSwge30pO1xcXFxuXFxcXG59XFxcXG4vL2xvZyhiaHRtbCk7XFxcXG5pZiAoYmh0bWwgPT0gXFxcXFxcXCJcXFxcXFxcIiB8fCBiaHRtbCA9PSBudWxsIHx8IGJodG1sLnN1YnN0cmluZygwLCA1KSA9PSAnZXJyb3InIHx8ICFiaHRtbC5lbmRzV2l0aCgnfScpKSB7XFxcXG4gICAgaXRlbXMucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiAn5pyq5pCc57Si5Yiw55u45YWz6LWE5rqQ77yM54K55Ye76K6/6Zeu5Y6f572R6aG1JyxcXFxcbiAgICAgICAgdXJsOiBzcGxbMV0gKyBgQGxhenlSdWxlPS5qczppbnB1dC5zcGxpdCgnOycpWzBdYCxcXFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnXFxcXG4gICAgfSk7XFxcXG59IGVsc2UgaWYgKGJodG1sLmxlbmd0aCA8IDgwKSB7XFxcXG4gICAgaXRlbXMucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiAn6L+U5Zue5pWw5o2u5LiN5a6M5pW077yM54K55Ye76K6/6Zeu5Y6f572R6aG1JyxcXFxcbiAgICAgICAgdXJsOiBzcGxbMV0gKyBgQGxhenlSdWxlPS5qczppbnB1dC5zcGxpdCgnOycpWzBdYCxcXFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnXFxcXG4gICAgfSk7XFxcXG59IGVsc2Uge1xcXFxuICAgIHZhciBodG1sID0gSlNPTi5wYXJzZShiaHRtbCk7XFxcXG4gICAgLy9sb2coc3BsWzFdKTtcXFxcbiAgICBpZiAoaHRtbC5saXN0KSB7XFxcXG4gICAgICAgIHZhciBsaXN0ID0gaHRtbC5saXN0O1xcXFxuICAgIH0gZWxzZSBpZiAoaHRtbC5kYXRhLmxpc3QpIHtcXFxcbiAgICAgICAgdmFyIGxpc3QgPSBodG1sLmRhdGEubGlzdDtcXFxcbiAgICB9IGVsc2UgaWYgKGh0bWwuZGF0YSkge1xcXFxuICAgICAgICB2YXIgbGlzdCA9IGh0bWwuZGF0YTtcXFxcbiAgICB9XFxcXG5cXFxcbiAgICBpZiAobGlzdC5sZW5ndGggPCAxKSB7XFxcXG4gICAgICAgIGl0ZW1zLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6ICfmnKrmkJzntKLliLDvvIzngrnlh7vorr/pl67ljp/nvZHpobUnLFxcXFxuICAgICAgICAgICAgdXJsOiBzcGxbMV0gKyBgQGxhenlSdWxlPS5qczppbnB1dC5zcGxpdCgnOycpWzBdYCxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF8xJ1xcXFxuICAgICAgICB9KTtcXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcXFxcblxcXFxuICAgICAgICAgICAgaWYgKC9cXFxcXFxcXC92b2RcXFxcXFxcXC8vLnRlc3QodGRvbWluKSkge1xcXFxuICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IGxpc3RbaV0udGl0bGU7XFxcXG4gICAgICAgICAgICAgICAgdmFyIHBpYyA9IGxpc3RbaV0ucGljO1xcXFxuICAgICAgICAgICAgICAgIC8vdmFyIHZpZD10ZG9taW4rJy9kZXRhaWw/dm9kX2lkPScrbGlzdFtpXS5uZXh0bGluaysnJnJlbF9saW1pdD0xMCc7XFxcXG4gICAgICAgICAgICAgICAgdmFyIHZpZCA9IGxpc3RbaV0ubmV4dGxpbms7XFxcXG4gICAgICAgICAgICAgICAgdmFyIHJlbSA9IGxpc3RbaV0uc3RhdGU7XFxcXG4gICAgICAgICAgICAgICAgLy92YXIgY29uPWxpc3RbaV0uc3RhdGU7XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIGlmICh0ZG9taW4uaW5kZXhPZignYXBpLnBocC9hcHAvJykgIT0gLTEpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gbGlzdFtpXS52b2RfbmFtZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBpYyA9IGxpc3RbaV0udm9kX3BpYztcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9mYW50dWFuLy50ZXN0KHRkb21pbikpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWQgPSAnaHR0cHM6Ly9mYW50dWFuLndrZmlsZS5jb20vYXBpLnBocC9hcHAvdmlkZW9fZGV0YWlsP2lkPScgKyBsaXN0W2ldLnZvZF9pZCArICcmdG9rZW49JztcXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWQgPSB0ZG9taW4gKyAndmlkZW9fZGV0YWlsP2lkPScgKyBsaXN0W2ldLnZvZF9pZCArICcmdG9rZW49JztcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVtID0gbGlzdFtpXS52b2RfcmVtYXJrcztcXFxcbiAgICAgICAgICAgICAgICAgICAgLy92YXIgY29uPWxpc3RbaV0udHlwZS50eXBlX2RlcztcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRkb21pbi5pbmRleE9mKCd4Z2FwcC5waHAvdjEvJykgIT0gLTEpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gbGlzdFtpXS52b2RfbmFtZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBpYyA9IGxpc3RbaV0udm9kX3BpYztcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZpZCA9IHRkb21pbiArICd2aWRlb19kZXRhaWw/aWQ9JyArIGxpc3RbaV0udm9kX2lkO1xcXFxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVtID0gbGlzdFtpXS52b2RfcmVtYXJrcztcXFxcbiAgICAgICAgICAgICAgICAgICAgLy92YXIgY29uPWxpc3RbaV0udHlwZS50eXBlX2RlcztcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSBsaXN0W2ldLnZvZF9uYW1lO1xcXFxuICAgICAgICAgICAgICAgICAgICB2YXIgcGljID0gbGlzdFtpXS52b2RfcGljO1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoL2lvcGVueXVuLy50ZXN0KHRkb21pbikpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWQgPSB0ZG9taW4gKyAnL2RldGFpbElEP3ZvZF9pZD0nICsgbGlzdFtpXS52b2RfaWQgKyAnJnRva2VuPSc7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZigvZ3JlbGlnaHRpbmcvLnRlc3QodGRvbWluKSl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmlkID0gdGRvbWluICsgJy8/aWRzPScgKyBsaXN0W2ldLnZvZF9pZCArICcmdG9rZW49JztcXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWQgPSB0ZG9taW4gKyAnL2RldGFpbD9rZXk9JyArIGRhdGVTdHIgKyAnJnZvZF9pZD0nICsgbGlzdFtpXS52b2RfaWQgKyAnJnRva2VuPSc7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlbSA9IGxpc3RbaV0udm9kX3JlbWFya3M7XFxcXG4gICAgICAgICAgICAgICAgICAgIC8vdmFyIGNvbj1saXN0W2ldLnR5cGUudHlwZV9kZXM7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfVxcXFxuXFxcXG4gICAgICAgICAgICBpdGVtcy5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUucmVwbGFjZShrZXksICfigJzigJwnICsga2V5ICsgJ+KAneKAnScpLFxcXFxuICAgICAgICAgICAgICAgIHBpY191cmw6IHBpYyArICdAUmVmZXJlcj0nLFxcXFxuICAgICAgICAgICAgICAgIHVybDogJCh0ZG9taW4uaW5kZXhPZihcXFxcXFxcIm1vZ2FpX2FwaVxcXFxcXFwiKSAhPSAtMSA/IHZpZCArICc7Z2V0O3V0Zi04O3tVc2VyLUFnZW50QERhcnQvMi4xNCAoZGFydDppbyl9JyA6IHZpZCArICc7Z2V0O3V0Zi04O3tVc2VyLUFnZW50QG9raHR0cC80LjEuMH0nKS5ydWxlKCh0ZG9taW4pID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlcyA9IHt9O1xcXFxuICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbXMgPSBbXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIGh0bWwgPSBKU09OLnBhcnNlKGdldFJlc0NvZGUoKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICcnLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogJzI1NSYmZmxvYXQnLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAneDVfd2Vidmlld19zaW5nbGUnXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoWDVXZWJWaWV3KCcnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIG15dXJsID0gTVlfVVJMLm1hdGNoKC8oW1xcXFxcXFxcU10qPzpcXFxcXFxcXC9cXFxcXFxcXC9bXFxcXFxcXFxTXSo/KVxcXFxcXFxcLy8pWzFdO1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoL1xcXFxcXFxcL3ZvZFxcXFxcXFxcLy8udGVzdCh0ZG9taW4pKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS90dm1vdmxpc3QnLCB7fSkpLnJ1bGUpO1xcXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvYXBwbW92bGlzdCcsIHt9KSkucnVsZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGEgPSBpdGVtcztcXFxcbiAgICAgICAgICAgICAgICAgICAgc2V0SG9tZVJlc3VsdChyZXMpO1xcXFxuICAgICAgICAgICAgICAgIH0sIHRkb21pbiksXFxcXG4gICAgICAgICAgICAgICAgLy9jb250ZW50OnJlbSxcXFxcbiAgICAgICAgICAgICAgICBkZXNjOiByZW0sXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpYydcXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICB9IC8vZm9yIGlcXFxcbiAgICB9IC8vZWxzZSBsaXN0Lmxlbmd0aFxcXFxufVxcXFxuXFxcXG5yZXMuZGF0YSA9IGl0ZW1zO1xcXFxuc2V0SG9tZVJlc3VsdChyZXMpO1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIkFQUOmmlumhteWIl+ihqFxcXCIsXFxcInBhdGhcXFwiOlxcXCJhcHBpbmRleGRhdGFcXFwiLFxcXCJydWxlXFxcIjpcXFwiaWYgKGh0bWwubGlzdCkge1xcXFxuICAgIHZhciBsaXN0ID0gaHRtbC5saXN0O1xcXFxufSBlbHNlIGlmIChodG1sLmRhdGEgJiYgaHRtbC5kYXRhLmxpc3QpIHtcXFxcbiAgICB2YXIgbGlzdCA9IGh0bWwuZGF0YS5saXN0O1xcXFxufSBlbHNlIHtcXFxcbiAgICB2YXIgbGlzdCA9IGh0bWwuZGF0YTtcXFxcbn1cXFxcblxcXFxuZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XFxcXG4gICAgaWYgKGxpc3RbaV0udm9kX2xpc3QpIHtcXFxcbiAgICAgICAgdmFyIGxpc3RzID0gbGlzdFtpXS52b2RfbGlzdDtcXFxcbiAgICAgICAgdmFyIHR5cGVuYW1lID0gbGlzdFtpXS52b2RfdHlwZV9uYW1lO1xcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIHZhciBsaXN0cyA9IGxpc3RbaV0udmxpc3Q7XFxcXG4gICAgICAgIHZhciB0eXBlbmFtZSA9IGxpc3RbaV0udHlwZV9uYW1lXFxcXG4gICAgfVxcXFxuICAgIGl0ZW1zLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogdHlwZW5hbWUsXFxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF8xJ1xcXFxuXFxcXG4gICAgfSk7XFxcXG5cXFxcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxpc3RzLmxlbmd0aDsgaisrKSB7XFxcXG4gICAgICAgIHZhciB0aXRsZSA9IGxpc3RzW2pdLnZvZF9uYW1lO1xcXFxuICAgICAgICB2YXIgaW1nID0gbGlzdHNbal0udm9kX3BpYztcXFxcbiAgICAgICAgdmFyIHVybCA9IGxpc3RzW2pdLnZvZF9pZDtcXFxcbiAgICAgICAgdmFyIGRlc2MgPSBsaXN0c1tqXS52b2RfcmVtYXJrcztcXFxcbiAgICAgICAgdmFyIG5vd0RhdGUgPSBuZXcgRGF0ZSgpO1xcXFxuICAgICAgICB2YXIgbW9udGggPSBub3dEYXRlLmdldE1vbnRoKCkgKyAxIDwgMTAgPyBcXFxcXFxcIjBcXFxcXFxcIiArIChub3dEYXRlLmdldE1vbnRoKCkgKyAxKSA6IG5vd0RhdGUuZ2V0TW9udGgoKSArIDE7XFxcXG4gICAgICAgIHZhciBkYXkgPSBub3dEYXRlLmdldERhdGUoKSA8IDEwID8gXFxcXFxcXCIwXFxcXFxcXCIgKyBub3dEYXRlLmdldERhdGUoKSA6IG5vd0RhdGUuZ2V0RGF0ZSgpO1xcXFxuICAgICAgICB2YXIgZGF0ZVN0ciA9IG1vbnRoICsgJycgKyBkYXk7XFxcXG4gICAgICAgIGlmIChodG1sLmxpc3QpIHtcXFxcbiAgICAgICAgICAgIHZhciBsaW5rID0gbXVybCArICd2aWRlb19kZXRhaWw/aWQ9JyArIHVybCArICcmdG9rZW49O2dldDt1dGYtODt7VXNlci1BZ2VudEBEYXJ0LzIuMTQgKGRhcnQ6aW8pfSc7XFxcXG4gICAgICAgIH0gZWxzZSBpZiAoaHRtbC5kYXRhICYmIGh0bWwuZGF0YS5saXN0KSB7XFxcXG4gICAgICAgICAgICBpZiAobXVybC5zZWFyY2goL21vZ2FpX2FwaS8pICE9IC0xKSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIGxpbmsgPSBtdXJsICsgJy9kZXRhaWw/a2V5PScgKyBkYXRlU3RyICsgJyZ2b2RfaWQ9JyArIHVybCArICcmcmVsX2xpbWl0PTEwO2dldDt1dGYtODt7VXNlci1BZ2VudEBEYXJ0LzIuMTQgKGRhcnQ6aW8pfSc7XFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG11cmwuaW5jbHVkZXMoJ2dyZWxpZ2h0aW5nJykpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgbGluayA9IG11cmwgKyAnLz9pZHM9JyArIHVybCArICcmcmVsX2xpbWl0PTEwO2dldDt1dGYtODt7VXNlci1BZ2VudEBEYXJ0LzIuMTQgKGRhcnQ6aW8pfSc7XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIHZhciBsaW5rID0gbXVybCArICcvZGV0YWlsP2tleT0nICsgZGF0ZVN0ciArICcmdm9kX2lkPScgKyB1cmwgKyAnJnJlbF9saW1pdD0xMDtnZXQ7dXRmLTg7e1VzZXItQWdlbnRAb2todHRwLzQuMS4wfSc7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICB2YXIgbGluayA9IG11cmwgKyAndmlkZW9fZGV0YWlsP2lkPScgKyB1cmwgKyAnJnRva2VuPTtnZXQ7dXRmLTg7e1VzZXItQWdlbnRARGFydC8yLjE0IChkYXJ0OmlvKX0nO1xcXFxuICAgICAgICB9O1xcXFxuICAgICAgICBpZiAoL2ZhbnR1YW4vLnRlc3QobXVybCkpIHtcXFxcbiAgICAgICAgICAgIHZhciBsaW5rID0gJ2h0dHBzOi8vZmFudHVhbi53a2ZpbGUuY29tL2FwaS5waHAvYXBwL3ZpZGVvX2RldGFpbD9pZD0nICsgdXJsICsgJyZ0b2tlbj07Z2V0O3V0Zi04O3tVc2VyLUFnZW50QERhcnQvMi4xNCAoZGFydDppbyl9JztcXFxcbiAgICAgICAgfSBlbHNlIGlmICgvaW9wZW55dW4vLnRlc3QobXVybCkpIHtcXFxcbiAgICAgICAgICAgIHZhciBsaW5rID0gbXVybCArICcvZGV0YWlsSUQ/dm9kX2lkPScgKyB1cmwgKyAnJnJlbF9saW1pdD0xMDtnZXQ7dXRmLTg7e1VzZXItQWdlbnRARGFydC8yLjE0IChkYXJ0OmlvKX0nO1xcXFxuICAgICAgICB9IGVsc2UgaWYgKC9kaWppYXhpYS8udGVzdChtdXJsKSkge1xcXFxuICAgICAgICAgICAgdmFyIGxpbmsgPSAnaHR0cDovL3d3dy5kaWppYXhpYS5jb20vYXBpLnBocC9hcHAvdmlkZW9fZGV0YWlsP2lkPScgKyB1cmw7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgaXRlbXMucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxcXG4gICAgICAgICAgICBwaWNfdXJsOiBpbWcgKyAnQFJlZmVyZXI9JyxcXFxcbiAgICAgICAgICAgIHVybDogJChsaW5rKS5ydWxlKCgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgcmVzID0ge307XFxcXG4gICAgICAgICAgICAgICAgdmFyIGl0ZW1zID0gW107XFxcXG4gICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogJzI1NSYmZmxvYXQnLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICcnLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3g1X3dlYnZpZXdfc2luZ2xlJ1xcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hYNVdlYlZpZXcoJycpO1xcXFxuICAgICAgICAgICAgICAgIHZhciBodG1sID0gSlNPTi5wYXJzZShnZXRSZXNDb2RlKCkpO1xcXFxuICAgICAgICAgICAgICAgIHZhciBteXVybCA9IE1ZX1VSTC5tYXRjaCgvKFtcXFxcXFxcXFNdKj86XFxcXFxcXFwvXFxcXFxcXFwvW1xcXFxcXFxcU10qPylcXFxcXFxcXC8vKVsxXTtcXFxcbiAgICAgICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9hcHBtb3ZsaXN0Jywge30pKS5ydWxlKTtcXFxcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcXFxuICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gaXRlbXM7XFxcXG4gICAgICAgICAgICAgICAgc2V0SG9tZVJlc3VsdChyZXMpO1xcXFxuICAgICAgICAgICAgfSksXFxcXG4gICAgICAgICAgICBkZXNjOiBkZXNjLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8zX21hcnF1ZWUnXFxcXG4gICAgICAgIH0pO1xcXFxuICAgIH1cXFxcbn1cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLmlq3lv7Xmj5Lku7bosIPnlKhcXFwiLFxcXCJwYXRoXFxcIjpcXFwiZG5wbHVnaW5cXFwiLFxcXCJydWxlXFxcIjpcXFwidmFyIGRuZW4gPSBKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL2ZpbGVzL3J1bGVzL3h5cS9hcHBtc2V0Lmpzb24nLCB7fSkpLmVuRG47XFxcXG5pdGVtcy5wdXNoKHtcXFxcbiAgICB0aXRsZTogJ+aWreaPku+8micgKyAoZG5lbiA9PSAnMScgPyAn4oCc4oCc4pyF4oCd4oCdJyA6ICfinY4nKSxcXFxcbiAgICB1cmw6ICQoJycpLmxhenlSdWxlKChkbmVuKSA9PiB7XFxcXG4gICAgICAgIGlmIChkbmVuID09ICcxJykge1xcXFxuICAgICAgICAgICAgdmFyIGZpbGVVcmwgPSBmZXRjaChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMveHlxL2FwcG1zZXQuanNvblxcXFxcXFwiLCB7fSkucmVwbGFjZSgnXFxcXFxcXFxcXFxcXFxcImVuRG5cXFxcXFxcXFxcXFxcXFwiOlxcXFxcXFxcXFxcXFxcXCIxXFxcXFxcXFxcXFxcXFxcIicsICdcXFxcXFxcXFxcXFxcXFwiZW5EblxcXFxcXFxcXFxcXFxcXCI6XFxcXFxcXFxcXFxcXFxcIjBcXFxcXFxcXFxcXFxcXFwiJyk7XFxcXG4gICAgICAgICAgICB3cml0ZUZpbGUoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL3h5cS9hcHBtc2V0Lmpzb25cXFxcXFxcIiwgZmlsZVVybCk7XFxcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey56aB55So5pat5o+S6LCD55So77yBJztcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIHZhciBmaWxlVXJsID0gZmV0Y2goXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL3h5cS9hcHBtc2V0Lmpzb25cXFxcXFxcIiwge30pLnJlcGxhY2UoJ1xcXFxcXFxcXFxcXFxcXCJlbkRuXFxcXFxcXFxcXFxcXFxcIjpcXFxcXFxcXFxcXFxcXFwiMFxcXFxcXFxcXFxcXFxcXCInLCAnXFxcXFxcXFxcXFxcXFxcImVuRG5cXFxcXFxcXFxcXFxcXFwiOlxcXFxcXFxcXFxcXFxcXCIxXFxcXFxcXFxcXFxcXFxcIicpO1xcXFxuICAgICAgICAgICAgLy9sb2coZmlsZVVybCk7XFxcXG4gICAgICAgICAgICB3cml0ZUZpbGUoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL3h5cS9hcHBtc2V0Lmpzb25cXFxcXFxcIiwgZmlsZVVybCk7XFxcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5byA5ZCv5pat5o+S6LCD55So77yBJ1xcXFxuICAgICAgICB9XFxcXG4gICAgfSwgZG5lbiksXFxcXG4gICAgY29sX3R5cGU6ICd0ZXh0XzMnXFxcXG59KTtcXFxcbmlmIChkbmVuID09ICcxJykge1xcXFxuICAgIGl0ZW1zLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogJ+e6v+i3r+mFjee9ricsXFxcXG4gICAgICAgIC8vdXJsOiBcXFxcXFxcImhpa2VyOi8vZW1wdHkjbm9SZWNvcmRIaXN0b3J5I0BydWxlPWpzOnRoaXMuZD1bXTtyZXF1aXJlKCdodHRwczovL2dpdGVhLmNvbS9BSTk1Ny9IaWtlci9yYXcvbS92L1JvdXRlLmpzJyk7Um91dGUuc2V0UGFyc2UoKTtzZXRSZXN1bHQoZCk7XFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogXFxcXFxcXCJzZWxlY3Q6Ly9cXFxcXFxcIiArIEpTT04uc3RyaW5naWZ5KHtcXFxcbiAgICAgICAgdGl0bGU6XFxcXFxcXCLnur/ot6/phY3nva5cXFxcXFxcIixcXFxcbiAgICAgICAgb3B0aW9uczogW1xcXFxcXFwi5Y6f5patXFxcXFxcXCIsIFxcXFxcXFwi6a2U5patXFxcXFxcXCJdLFxcXFxuICAgICAgICBjb2w6IDIsXFxcXG4gICAgICAgIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICAgICAgICAgIGlmKGlucHV0PT1cXFxcXFxcIuWOn+aWrVxcXFxcXFwiKXtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHkjbm9SZWNvcmRIaXN0b3J5I0BydWxlPWpzOnRoaXMuZD1bXTtyZXF1aXJlKCdodHRwczovL2dpdGVhLmNvbS9BSTk1Ny9IaWtlci9yYXcvbS92L1JvdXRlLmpzJyk7Um91dGUuc2V0UGFyc2UoKTtzZXRSZXN1bHQoZCk7XFxcXFxcXCI7ICAgIFxcXFxuICAgICAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU96K6+572uI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1xcXFxcXFwiICAgIFxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KVxcXFxuICAgIH0pLFxcXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMydcXFxcbiAgICB9KTtcXFxcbiAgICBpdGVtcy5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6ICfop6PmnpDnrqHnkIYnLFxcXFxuICAgICAgICAvL3VybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5I25vUmVjb3JkSGlzdG9yeSNAcnVsZT1qczp0aGlzLmQ9W107cmVxdWlyZSgnaHR0cHM6Ly9naXRlYS5jb20vQUk5NTcvSGlrZXIvcmF3L20vdi9qeEl0ZW0uanMnKTtqeEl0ZW0uanhMaXN0KCk7c2V0UmVzdWx0KGQpXFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogXFxcXFxcXCJzZWxlY3Q6Ly9cXFxcXFxcIiArIEpTT04uc3RyaW5naWZ5KHtcXFxcbiAgICAgICAgdGl0bGU6XFxcXFxcXCLop6PmnpDnrqHnkIZcXFxcXFxcIixcXFxcbiAgICAgICAgb3B0aW9uczogW1xcXFxcXFwi5Y6f5patXFxcXFxcXCIsIFxcXFxcXFwi6a2U5patXFxcXFxcXCJdLFxcXFxuICAgICAgICBjb2w6IDIsXFxcXG4gICAgICAgIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICAgICAgICAgIGlmKGlucHV0PT1cXFxcXFxcIuWOn+aWrVxcXFxcXFwiKXtcXFxcbiAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5I25vUmVjb3JkSGlzdG9yeSNAcnVsZT1qczp0aGlzLmQ9W107cmVxdWlyZSgnaHR0cHM6Ly9naXRlYS5jb20vQUk5NTcvSGlrZXIvcmF3L20vdi9qeEl0ZW0uanMnKTtqeEl0ZW0uanhMaXN0KCk7c2V0UmVzdWx0KGQpXFxcXFxcXCI7ICAgXFxcXG4gICAgICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU957yW6L6RI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1xcXFxcXFwiICAgXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pXFxcXG4gICAgfSksXFxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF8zJ1xcXFxuICAgIH0pO1xcXFxufVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuiuvue9rumhteS7o+eggVxcXCIsXFxcInBhdGhcXFwiOlxcXCJzZXR0aW5nXFxcIixcXFwicnVsZVxcXCI6XFxcInZhciBkID0gW107XFxcXG52YXIgc2V0anNvbiA9IEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vZmlsZXMvcnVsZXMveHlxL2FwcG1zZXQuanNvbicsIHt9KSk7XFxcXG52YXIgc3NtZCA9IHNldGpzb24uc3Ntb2RlO1xcXFxudmFyIHNzeGMgPSBzZXRqc29uLnNzY291bnQ7XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiAn5pCc57Si6K6+572uJyxcXFxcbiAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxcXG59KTtcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6ICflvZPliY3vvJonICsgJygnICsgKHNzbWQgPT0gMSA/ICfogZrlkIjnu5PmnpwnIDogJ+W8leaTjuWIl+ihqCcpICsgJyknLFxcXFxuICAgIHVybDogJCgnaGlrZXI6Ly9lbXB0eScpLmxhenlSdWxlKCgpID0+IHtcXFxcbiAgICAgICAgdmFyIG1kID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy94eXEvYXBwbXNldC5qc29uJywge30pKS5zc21vZGU7XFxcXG5cXFxcbiAgICAgICAgaWYgKG1kID09IDEpIHtcXFxcbiAgICAgICAgICAgIHZhciBmaWxlVXJsID0gZmV0Y2goXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL3h5cS9hcHBtc2V0Lmpzb25cXFxcXFxcIiwge30pLnJlcGxhY2UoJ1xcXFxcXFxcXFxcXFxcXCJzc21vZGVcXFxcXFxcXFxcXFxcXFwiOlxcXFxcXFxcXFxcXFxcXCIxXFxcXFxcXFxcXFxcXFxcIicsICdcXFxcXFxcXFxcXFxcXFwic3Ntb2RlXFxcXFxcXFxcXFxcXFxcIjpcXFxcXFxcXFxcXFxcXFwiMFxcXFxcXFxcXFxcXFxcXCInKTtcXFxcbiAgICAgICAgICAgIHdyaXRlRmlsZShcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMveHlxL2FwcG1zZXQuanNvblxcXFxcXFwiLCBmaWxlVXJsKTtcXFxcbiAgICAgICAgICAgIGJhY2sodHJ1ZSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5YiH5o2i5Li65pCc57Si5byV5pOO5YiX6KGo5Y2V6YCJ5qih5byP5oiQ5Yqf77yBJztcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIHZhciBmaWxlVXJsID0gZmV0Y2goXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL3h5cS9hcHBtc2V0Lmpzb25cXFxcXFxcIiwge30pLnJlcGxhY2UoJ1xcXFxcXFxcXFxcXFxcXCJzc21vZGVcXFxcXFxcXFxcXFxcXFwiOlxcXFxcXFxcXFxcXFxcXCIwXFxcXFxcXFxcXFxcXFxcIicsICdcXFxcXFxcXFxcXFxcXFwic3Ntb2RlXFxcXFxcXFxcXFxcXFxcIjpcXFxcXFxcXFxcXFxcXFwiMVxcXFxcXFxcXFxcXFxcXCInKTtcXFxcbiAgICAgICAgICAgIC8vbG9nKGZpbGVVcmwpO1xcXFxuICAgICAgICAgICAgd3JpdGVGaWxlKFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy94eXEvYXBwbXNldC5qc29uXFxcXFxcXCIsIGZpbGVVcmwpO1xcXFxuICAgICAgICAgICAgYmFjayh0cnVlKTtcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/liIfmjaLkuLrogZrlkIjmkJzntKLmqKHlvI/miJDlip/vvIEnXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KSxcXFxcbiAgICBjb2xfdHlwZTogJ3RleHRfMidcXFxcbn0pXFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiAn5pCc57Si6LaF5pe2KCcgKyAnJyArIGdldEl0ZW0oJ2FwcHRpbW91dCcsICcnKSArICcpJyxcXFxcbiAgICB1cmw6IFxcXFxcXFwiaW5wdXQ6Ly9cXFxcXFxcIiArICczMDAwJyArIFxcXFxcXFwiLy8vL+ivt+iuvue9rui2heaXtuaXtumXtO+8jDEwMDDkuLrkuIDnp5LjgIIuanM6dmFyIG51bSA9IHBhcnNlSW50KGlucHV0KS50b1N0cmluZygpO2lmIChudW0gPT0gJ05hTid8fG51bTwxMDAwKSB7J3RvYXN0Oi8v6L6T5YWl55qE5YC85aW95YOP5LiN5q2j56Gu44CCJzt9IGVsc2Uge3NldEl0ZW0oJ2FwcHRpbW91dCcsIG51bSk7cmVmcmVzaFBhZ2UoKTsndG9hc3Q6Ly/orr7nva7miJDlip/jgIInfVxcXFxcXFwiLFxcXFxuICAgIGNvbF90eXBlOiAndGV4dF8yJ1xcXFxufSk7XFxcXG5cXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6ICfmkJzntKLnur/nqIsnICsgJygnICsgc3N4YyArICcpJyxcXFxcbiAgICB1cmw6IFxcXFxcXFwiaW5wdXQ6Ly9cXFxcXFxcIiArIEpTT04uc3RyaW5naWZ5KHtcXFxcbiAgICAgICAgdmFsdWU6IFxcXFxcXFwiNVxcXFxcXFwiLFxcXFxuICAgICAgICBoaW50OiBcXFxcXFxcIuivt+i+k+WFpeS4gOS4quaVtOaVsOaVsOWtl++8jOaOqOiNkOacgOWkp+S4jeimgei2hei/hzE144CCXFxcXFxcXCIsXFxcXG4gICAgICAgIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICAgICAgICAgIHZhciBudW0gPSBwYXJzZUludChpbnB1dCkudG9TdHJpbmcoKTtcXFxcbiAgICAgICAgICAgIGlmIChudW0gPT0gJ05hTicgfHwgbnVtIDwgMSkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ovpPlhaXnmoTlgLzlpb3lg4/kuI3mraPnoa7jgIInO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgZmlsZVVybCA9IGZldGNoKFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy94eXEvYXBwbXNldC5qc29uXFxcXFxcXCIsIHt9KS5yZXBsYWNlKC9cXFxcXFxcXFxcXFxcXFwic3Njb3VudFxcXFxcXFxcXFxcXFxcXCI6XFxcXFxcXFxcXFxcXFxcIltcXFxcXFxcXGRdKlxcXFxcXFxcXFxcXFxcXCIvLCAnXFxcXFxcXFxcXFxcXFxcInNzY291bnRcXFxcXFxcXFxcXFxcXFwiOlxcXFxcXFxcXFxcXFxcXCInICsgbnVtICsgJ1xcXFxcXFxcXFxcXFxcXCInKTtcXFxcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL3h5cS9hcHBtc2V0Lmpzb25cXFxcXFxcIiwgZmlsZVVybCk7XFxcXG4gICAgICAgICAgICAgICAgYmFjayh0cnVlKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5L+d5a2Y6K6+572u5pCc57Si57q/56iL5a6M5oiQ77yBJ1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KSxcXFxcbiAgICB9KSxcXFxcbiAgICBjb2xfdHlwZTogJ3RleHRfMidcXFxcbn0pO1xcXFxuXFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiAn5pu05paw55u45YWzJyxcXFxcbiAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxcXG59KTtcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6ICfmo4DmtYvmm7TmlrAnLFxcXFxuICAgIHVybDogJCgnJykubGF6eVJ1bGUoKGxvY3ZlcikgPT4ge1xcXFxuICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgdmFyIHJlbWYgPSBmZXRjaENhY2hlKCdodHRwczovL2NvZGViZXJnLm9yZy9semsyMzU1OS9jbG91ZHJ1bGUvcmF3L2JyYW5jaC9tYXN0ZXIvYXBwbW92aWUudHh0JywgMjQpO1xcXFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICByZW1mID0gJyc7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgaWYgKC/vv6ViYXNlNjQvLnRlc3QocmVtZikpIHtcXFxcbiAgICAgICAgICAgIHZhciByZW12ID0gSlNPTi5wYXJzZShiYXNlNjREZWNvZGUocmVtZi5zcGxpdCgnQCcpWzJdKSkudmVyc2lvbjtcXFxcbiAgICAgICAgfSBlbHNlIGlmICgv77+laG9tZV9ydWxl77+lLy50ZXN0KHJlbWYpKSB7XFxcXG4gICAgICAgICAgICB2YXIgcmVtdiA9IEpTT04ucGFyc2UocmVtZi5zcGxpdCgn77+laG9tZV9ydWxl77+lJylbMV0pLnZlcnNpb247XFxcXG4gICAgICAgIH07XFxcXG4gICAgICAgIGlmICgv77+laG9tZV9ydWxlLy50ZXN0KHJlbWYpKSB7XFxcXG4gICAgICAgICAgICBsb2coJ+i/nOeoi+eJiOacrO+8micgKyByZW12KTtcXFxcbiAgICAgICAgICAgIGxvZygn5pys5Zyw54mI5pys77yaJyArIGxvY3Zlcik7XFxcXG4gICAgICAgICAgICBpZiAobG9jdmVyICE9IHJlbXYpIHtcXFxcbiAgICAgICAgICAgICAgICBwdXRWYXIoJ2FwcG52ZXInLCByZW1mKTtcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mnInmlrDniYjmnKzvvIzngrnlr7zlhaXmm7TmlrDlj6/mm7TmlrDop4TliJnjgIInO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pqC5peg5paw54mI5pys77yMMjTlsI/ml7blhoXmo4DmtYvml6DmlYjjgIInXFxcXG4gICAgICAgICAgICB9O1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+ajgOa1i+abtOaWsOWksei0pe+8jOWPr+iDveS6keerr+aKvemjjuS6huOAgidcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sIGxvY3ZlciksXFxcXG4gICAgY29sX3R5cGU6ICd0ZXh0XzInXFxcXG59KTtcXFxcbmlmIChnZXRWYXIoJ2FwcG52ZXInKSkge1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiAn5a+85YWl5pu05pawJyxcXFxcbiAgICAgICAgdXJsOiAkKCcnKS5sYXp5UnVsZSgoKSA9PiB7XFxcXG4gICAgICAgICAgICByZXR1cm4gZ2V0VmFyKCdhcHBudmVyJyk7XFxcXG4gICAgICAgIH0pLFxcXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMidcXFxcbiAgICB9KTtcXFxcbn1cXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6ICfmjqXlj6Pnm7jlhbMnLFxcXFxuICAgIC8vdXJsOidoaWtlcjovL2VtcHR5JyxcXFxcbiAgICB1cmw6ICQoJ2hpa2VyOi8vZW1wdHknKS5sYXp5UnVsZSgoKSA9PiB7XFxcXG4gICAgICAgIHZhciByZW1maWxlID0gJyc7XFxcXG4gICAgICAgIC8vbG9nKHJlbWZpbGUpO1xcXFxuICAgICAgICBpZiAoL1xcXFxcXFxcPWh0dHAvLnRlc3QocmVtZmlsZSkpIHtcXFxcbiAgICAgICAgICAgIHdyaXRlRmlsZShcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMveHlxL0FQUE1vdmllLnR4dFxcXFxcXFwiLCByZW1maWxlKTtcXFxcbiAgICAgICAgICAgIGJhY2sodHJ1ZSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6I635Y+W5LqR56uv5paH5Lu25YaZ5pys5Zyw5oiQ5Yqf44CCJztcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ojrflj5bkupHnq6/mlofku7blpLHotKXjgIInXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KSxcXFxcbiAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxcXG59KTtcXFxcbnZhciBjbG1kID0gZ2V0SXRlbSgnY2xtb2RlJywgJzEnKTtcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6ICfkupHnq68v5pys5ZywJyArICcoJyArIChjbG1kID09IDEgPyAn5pys5ZywJyA6ICfkupHnq68nKSArICcpJyxcXFxcbiAgICB1cmw6ICQoJycpLmxhenlSdWxlKCgpID0+IHtcXFxcbiAgICAgICAgdmFyIGNsbWQgPSBnZXRJdGVtKCdjbG1vZGUnLCAnMScpO1xcXFxuICAgICAgICBpZiAoY2xtZCA9PSAxKSB7XFxcXG4gICAgICAgICAgICBzZXRJdGVtKCdjbG1vZGUnLCAnMCcpO1xcXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/liIfmjaLkuLrkupHnq6/mjqXlj6PmiJDlip/vvIzor7fov5Tlm57liLfmlrDjgIInO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgc2V0SXRlbSgnY2xtb2RlJywgJzEnKTtcXFxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5YiH5o2i5Li65pys5Zyw5o6l5Y+j5oiQ5Yqf77yM6K+36L+U5Zue5Yi35paw44CCJ1xcXFxuICAgICAgICB9XFxcXG4gICAgfSksXFxcXG4gICAgY29sX3R5cGU6ICd0ZXh0XzInXFxcXG59KTtcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6ICfnvJbovpHmnKzlnLDmjqXlj6MnLFxcXFxuICAgIHVybDogJCgnJykubGF6eVJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICByZXR1cm4gJ2VkaXRGaWxlOi8vaGlrZXI6Ly9maWxlcy9ydWxlcy94eXEvQVBQTW92aWUudHh0J1xcXFxuICAgIH0pLFxcXFxuICAgIGNvbF90eXBlOiAndGV4dF8yJ1xcXFxufSk7XFxcXG5zZXRSZXN1bHQoZClcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLmnIDmlrDnq6DoioJcXFwiLFxcXCJwYXRoXFxcIjpcXFwiY2hhcHRlclxcXCIsXFxcInJ1bGVcXFwiOlxcXCJ2YXIgY2hwID0gW107XFxcXG50cnkge1xcXFxuICAgIHZhciBodG1sID0gSlNPTi5wYXJzZShnZXRSZXNDb2RlKCkpO1xcXFxuICAgIGlmIChodG1sLnZpZGVvbGlzdCkge1xcXFxuICAgICAgICB2YXIgY29udHMgPSBPYmplY3Qua2V5cyhodG1sLnZpZGVvbGlzdCk7XFxcXG4gICAgfSBlbHNlIGlmIChodG1sLmRhdGEudm9kX3VybF93aXRoX3BsYXllcikge1xcXFxuICAgICAgICB2YXIgY29udHMgPSBodG1sLmRhdGEudm9kX3VybF93aXRoX3BsYXllcjtcXFxcbiAgICAgICAgaWYgKGNvbnRzLmxlbmd0aCA8IDEpIHtcXFxcbiAgICAgICAgICAgIGNvbnRzID0gaHRtbC5kYXRhLnZvZF9wbGF5X3VybC5zcGxpdCgnJCQkJyk7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9IGVsc2UgaWYgKGh0bWwuZGF0YS52b2RfaW5mbyAmJiBodG1sLmRhdGEudm9kX2luZm8udm9kX3VybF93aXRoX3BsYXllcikge1xcXFxuICAgICAgICB2YXIgY29udHMgPSBodG1sLmRhdGEudm9kX2luZm8udm9kX3VybF93aXRoX3BsYXllcjtcXFxcbiAgICAgICAgaWYgKGNvbnRzLmxlbmd0aCA8IDEpIHtcXFxcbiAgICAgICAgICAgIGNvbnRzID0gaHRtbC5kYXRhLnZvZF9pbmZvLnZvZF9wbGF5X3VybC5zcGxpdCgnJCQkJyk7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9IGVsc2UgaWYgKGh0bWwuZGF0YS5sZW5ndGggPT0gMSkge1xcXFxuICAgICAgICB2YXIgY29udHMgPSBodG1sLmRhdGFbMF0udm9kX3BsYXlfbGlzdDtcXFxcbiAgICAgICAgLy9sb2coY29udHMpO1xcXFxuICAgICAgICBpZiAoY29udHMubGVuZ3RoIDwgMSkge1xcXFxuICAgICAgICAgICAgY29udHMgPSBodG1sLmRhdGFbMF0udm9kX3BsYXlfdXJsLnNwbGl0KCckJCQnKTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIHZhciBjb250cyA9IGh0bWwuZGF0YS52b2RfcGxheV9saXN0O1xcXFxuICAgICAgICBpZiAoY29udHMubGVuZ3RoIDwgMSkge1xcXFxuICAgICAgICAgICAgY29udHMgPSBodG1sLmRhdGEudm9kX3BsYXlfdXJsLnNwbGl0KCckJCQnKTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcblxcXFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29udHMubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgaWYgKGh0bWwudmlkZW9saXN0KSB7XFxcXG4gICAgICAgICAgICB2YXIgbGlzdCA9IGh0bWwudmlkZW9saXN0W2NvbnRzW2ldXTtcXFxcbiAgICAgICAgfSBlbHNlIGlmIChjb250c1tpXS51cmxzKSB7XFxcXG4gICAgICAgICAgICB2YXIgbGlzdCA9IGNvbnRzW2ldLnVybHM7XFxcXG4gICAgICAgIH0gZWxzZSBpZiAoY29udHNbaV0udXJsKSB7XFxcXG4gICAgICAgICAgICB2YXIgbGlzdCA9IGNvbnRzW2ldLnVybC5zcGxpdChcXFxcXFxcIiNcXFxcXFxcIik7XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICB2YXIgbGlzdCA9IGNvbnRzW2ldLnNwbGl0KFxcXFxcXFwiI1xcXFxcXFwiKTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBjaHAucHVzaChsaXN0Lmxlbmd0aCk7XFxcXG4gICAgfVxcXFxufSBjYXRjaCAoZSkge31cXFxcbi8vbG9nKE1hdGgubWF4LmFwcGx5KE1hdGgsY2hwKSk7XFxcXG5zZXRSZXN1bHQoJ+abtOaWsOiHszonICsgKE1hdGgubWF4LmFwcGx5KE1hdGgsIGNocCkpKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLliIbnsbvmkJzntKJcXFwiLFxcXCJwYXRoXFxcIjpcXFwic3MyXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxudmFyIGl0ZW1zID0gW107XFxcXG52YXIgRGF0YSA9IFtdO1xcXFxudmFyIG5vd0RhdGUgPSBuZXcgRGF0ZSgpO1xcXFxudmFyIG1vbnRoID0gbm93RGF0ZS5nZXRNb250aCgpICsgMSA8IDEwID8gXFxcXFxcXCIwXFxcXFxcXCIgKyAobm93RGF0ZS5nZXRNb250aCgpICsgMSkgOiBub3dEYXRlLmdldE1vbnRoKCkgKyAxO1xcXFxudmFyIGRheSA9IG5vd0RhdGUuZ2V0RGF0ZSgpIDwgMTAgPyBcXFxcXFxcIjBcXFxcXFxcIiArIG5vd0RhdGUuZ2V0RGF0ZSgpIDogbm93RGF0ZS5nZXREYXRlKCk7XFxcXG52YXIgZGF0ZVN0ciA9IG1vbnRoICsgJycgKyBkYXk7XFxcXG4vL+WPluaQnOe0oue6v+eoi+iuvue9rlxcXFxudmFyIHNzeGMgPSBKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL2ZpbGVzL3J1bGVzL3h5cS9hcHBtc2V0Lmpzb24nLCB7fSkpLnNzY291bnQ7XFxcXG4vL+iuvue9rui2heaXtuaXtumXtO+8jOi2iuWwj+i2iuW/q++8jOWNleS9jeavq+enklxcXFxudmFyIHRpbWVvdSA9IGdldEl0ZW0oJ2FwcHRpbW91dCcsICczMDAwJyk7XFxcXG52YXIga2V5ID0gTVlfVVJMLnNwbGl0KCckJCQnKVsxXTtcXFxcbnZhciBudW0gPSBNWV9VUkwuc3BsaXQoJyQkJCcpWzJdO1xcXFxudmFyIGxlID0gcGFyc2VJbnQobnVtICogc3N4Yyk7XFxcXG52YXIgVGl0ID0gW107XFxcXG5sZXQgbGlzdCA9IE1ZX1BBUkFNUy5saXN0O1xcXFxubGV0IHR5dGl0ID0gTVlfUEFSQU1TLnR5dGl0O1xcXFxubGV0IHBhZ2VpZCA9IFxcXFxcXFwiX19hcHBcXFxcXFxcIiArIG51bTtcXFxcbnRyeSB7XFxcXG4gICAgZm9yICh2YXIgaiA9IGxlIC0gc3N4YzsgaiA8IGxlOyBqKyspIHtcXFxcbiAgICAgICAgaWYgKGogPCBsaXN0Lmxlbmd0aCkge1xcXFxuICAgICAgICAgICAgdmFyIGxpbmsgPSBsaXN0W2pdLnVybDtcXFxcbiAgICAgICAgICAgIHZhciBsaXRpdCA9IGxpc3Rbal0ubXVybDtcXFxcbiAgICAgICAgICAgIGlmICgvXFxcXFxcXFwvdm9kXFxcXFxcXFwvL2kudGVzdChsaW5rKSkge1xcXFxuICAgICAgICAgICAgICAgIGlmICgvMzdcXFxcXFxcXC4xNjF8MjE2XFxcXFxcXFwuOTh8cGhvZWJlfGhmeXM4fGZlaWZhbjEyfHR2enl8aGR5YW5ndHZ8dGt5c3x0ZWdvdXlzLy50ZXN0KGxpbmspKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHZhciBobXVybCA9IGxpbmsgKyAnP2FjPWxpc3Qmem09JyArIGtleSArICcmcGFnZT0xJztcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICB2YXIgaG11cmwgPSBsaW5rICsgJz9hYz1saXN0JndkPScgKyBrZXkgKyAnJnBhZ2U9MSc7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICBpZiAoL2RpamlheGlhLy50ZXN0KGxpbmspKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxpbmsgPSAnaHR0cDovL3d3dy5kaWppYXhpYS5jb20vYXBpLnBocC9hcHAvJ1xcXFxuICAgICAgICAgICAgICAgIH07XFxcXG4gICAgICAgICAgICAgICAgaWYgKGxpbmsuaW5kZXhPZignYXBpLnBocC9hcHAvJykgIT0gLTEpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIGhtdXJsID0gbGluayArICdzZWFyY2g/cGc9MSZ0ZXh0PScgKyBrZXkgKyAnJnRva2VuPSc7XFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsaW5rLmluZGV4T2YoJ3hnYXBwLnBocC92MS8nKSAhPSAtMSkge1xcXFxuICAgICAgICAgICAgICAgICAgICB2YXIgaG11cmwgPSBsaW5rICsgJ3NlYXJjaD9wZz0xJnRleHQ9JyArIGtleTtcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoL2lvcGVueXVuLy50ZXN0KGxpbmspKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaG11cmwgPSBsaW5rICsgJy9saXN0P3BhZ2U9ZnlwYWdlJmxpbWl0PTEwJndkPScgKyBrZXk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaG11cmwgPSBsaW5rICsgJz9wYWdlPTEmbGltaXQ9MTAmd2Q9JyArIGtleTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIC8vRGF0YS5wdXNoKHt1cmw6IGhtdXJsLG9wdGlvbnM6IHtoZWFkZXJzOiB7XFxcXFxcXCJVc2VyLUFnZW50XFxcXFxcXCI6IFxcXFxcXFwiRGFydC8yLjE0IChkYXJ0OmlvKVxcXFxcXFwifSx0aW1lb3V0OiB0aW1lb3V9fSk7XFxcXG4gICAgICAgICAgICBEYXRhLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHVybDogaG11cmwsXFxcXG4gICAgICAgICAgICAgICAgb3B0aW9uczoge1xcXFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIlVzZXItQWdlbnRcXFxcXFxcIjogbGluay5pbmRleE9mKFxcXFxcXFwibW9nYWlfYXBpXFxcXFxcXCIpICE9IC0xID8gXFxcXFxcXCJEYXJ0LzIuMTQgKGRhcnQ6aW8pXFxcXFxcXCIgOiBcXFxcXFxcIm9raHR0cC80LjEuMFxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ6IHRpbWVvdVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgVGl0LnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdDogbGlzdFtqXS50aXRsZSxcXFxcbiAgICAgICAgICAgICAgICBsaW5rOiBsaW5rLFxcXFxuICAgICAgICAgICAgICAgIHR5cG5tOiBsaXRpdFxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgIH0gLy9pZlxcXFxuICAgIH0gLy9mb3IgalxcXFxufSBjYXRjaCAoZSkge31cXFxcbmlmIChEYXRhLmxlbmd0aCA8PSAwKSB7XFxcXG4gICAgc2V0UmVzdWx0KFtdKTtcXFxcbn0gZWxzZSB7XFxcXG4gICAgaXRlbXMucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiBcXFxcXFxcIuato+WcqOWKoOi9veS4reesrFxcXFxcXFwiICsgTVlfUEFHRSArIFxcXFxcXFwi6aG177yM6L+b5bqm77yaMS9cXFxcXFxcIiArIERhdGEubGVuZ3RoLFxcXFxuICAgICAgICB1cmw6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfY2VudGVyXzFcXFxcXFxcIixcXFxcbiAgICAgICAgZGVzYzogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgcGljX3VybDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgIGlkOiBwYWdlaWRcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pO1xcXFxuICAgIHNldFJlc3VsdChpdGVtcyk7XFxcXG4gICAgbGV0IHRhc2tzID0gW107XFxcXG5cXFxcbiAgICBmb3IgKGxldCBrIGluIERhdGEpIHtcXFxcbiAgICAgICAgbGV0IGl0ID0gRGF0YVtrXTtcXFxcbiAgICAgICAgdGFza3MucHVzaCh7XFxcXG4gICAgICAgICAgICBmdW5jOiBmdW5jdGlvbihwYXJhbSkge1xcXFxuICAgICAgICAgICAgICAgIGxldCBkID0gW107XFxcXG4gICAgICAgICAgICAgICAgbGV0IGh0bWwgPSBmZXRjaChwYXJhbS5pdC51cmwsIHBhcmFtLml0Lm9wdGlvbnMpO1xcXFxuICAgICAgICAgICAgICAgIC8vbG9nKGh0bWwpO1xcXFxuICAgICAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGh0bWwgPSBodG1sLnN1YnN0cmluZygwLCAyKSA9PSAnXFxcXFxcXFxyXFxcXFxcXFxuJyA/IGh0bWwucmVwbGFjZSgnXFxcXFxcXFxyXFxcXFxcXFxuJywgJycpIDogaHRtbDtcXFxcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcXFxuICAgICAgICAgICAgICAgIGlmICgvYnR3YWYvLnRlc3QoaHRtbCkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgaHRtbCA9IGZldGNoKHBhcmFtLml0LnVybCArICcmYnR3YWYnICsgaHRtbC5tYXRjaCgvYnR3YWYoLio/KVxcXFxcXFxcXFxcXFxcXCIvKVsxXSwge30pO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICBpZiAoaHRtbCA9PSBcXFxcXFxcIlxcXFxcXFwiIHx8IGh0bWwgPT0gbnVsbCB8fCBodG1sLnN1YnN0cmluZygwLCA1KSA9PSAnZXJyb3InIHx8ICFodG1sLmVuZHNXaXRoKCd9JykpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwYXJhbS50aXQudGl0ICsgJyAnICsgJ+acquaQnOe0ouWIsO+8jOeCueWHu+iuv+mXruWOn+e9kemhtScsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHBhcmFtLml0LnVybCArIGBAbGF6eVJ1bGU9LmpzOmlucHV0LnNwbGl0KCc7JylbMF1gLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBpY191cmw6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaHRtbC5sZW5ndGggPCA4MCkge1xcXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBhcmFtLnRpdC50aXQgKyAnICcgKyAn6L+U5Zue5pWw5o2u5LiN5a6M5pW077yM54K55Ye76K6/6Zeu5Y6f572R6aG1JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogcGFyYW0uaXQudXJsICsgYEBsYXp5UnVsZT0uanM6aW5wdXQuc3BsaXQoJzsnKVswXWAsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGljX3VybDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgaHRtbCA9IEpTT04ucGFyc2UoaHRtbCk7XFxcXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nKGh0bWwpO1xcXFxuICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZXQgPSBwYXJhbS50aXQudHlwbm07XFxcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0ZG9taW4gPSBwYXJhbS50aXQubGluaztcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGh0bWwubGlzdCkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpc3QgPSBodG1sLmxpc3Q7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaHRtbC5kYXRhLmxpc3QpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gaHRtbC5kYXRhLmxpc3Q7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaHRtbC5kYXRhKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdCA9IGh0bWwuZGF0YTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gW107XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3QubGVuZ3RoIDwgMSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogcGFyYW0udGl0LnRpdCArICcgJyArICfliJfooajlsI/kuo4x77yM5peg5rOV5bGV56S677yM54K55Ye76K6/6Zeu5Y6f572R6aG1JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHBhcmFtLml0LnVybCArIGBAbGF6eVJ1bGU9LmpzOmlucHV0LnNwbGl0KCc7JylbMF1gLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGljX3VybDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvXFxcXFxcXFwvdm9kXFxcXFxcXFwvLy50ZXN0KHRkb21pbikpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gbGlzdFtpXS50aXRsZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBpYyA9IGxpc3RbaV0ucGljO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmlkID0gbGlzdFtpXS5uZXh0bGluaztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbSA9IGxpc3RbaV0uc3RhdGU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRkb21pbi5pbmRleE9mKCdhcGkucGhwL2FwcC8nKSAhPSAtMSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gbGlzdFtpXS52b2RfbmFtZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwaWMgPSBsaXN0W2ldLnZvZF9waWM7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoL2ZhbnR1YW4vLnRlc3QodGRvbWluKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWQgPSAnaHR0cHM6Ly9mYW50dWFuLndrZmlsZS5jb20vYXBpLnBocC9hcHAvdmlkZW9fZGV0YWlsP2lkPScgKyBsaXN0W2ldLnZvZF9pZCArICcmdG9rZW49JztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZpZCA9IHRkb21pbiArICd2aWRlb19kZXRhaWw/aWQ9JyArIGxpc3RbaV0udm9kX2lkICsgJyZ0b2tlbj0nO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbSA9IGxpc3RbaV0udm9kX3JlbWFya3M7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3ZhciBjb249bGlzdFtpXS50eXBlLnR5cGVfZGVzO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRkb21pbi5pbmRleE9mKCd4Z2FwcC5waHAvdjEvJykgIT0gLTEpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IGxpc3RbaV0udm9kX25hbWU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGljID0gbGlzdFtpXS52b2RfcGljO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZpZCA9IHRkb21pbiArICd2aWRlb19kZXRhaWw/aWQ9JyArIGxpc3RbaV0udm9kX2lkO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbSA9IGxpc3RbaV0udm9kX3JlbWFya3M7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3ZhciBjb249bGlzdFtpXS50eXBlLnR5cGVfZGVzO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gbGlzdFtpXS52b2RfbmFtZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwaWMgPSBsaXN0W2ldLnZvZF9waWM7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoL2lvcGVueXVuLy50ZXN0KHRkb21pbikpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmlkID0gdGRvbWluICsgJy9kZXRhaWxJRD92b2RfaWQ9JyArIGxpc3RbaV0udm9kX2lkICsgJyZ0b2tlbj0nO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgvZ3JlbGlnaHRpbmcvLnRlc3QodGRvbWluKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWQgPSB0ZG9taW4gKyAnLz9pZHM9JyArIGxpc3RbaV0udm9kX2lkICsgJyZ0b2tlbj0nO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmlkID0gdGRvbWluICsgJy9kZXRhaWw/a2V5PScgKyBkYXRlU3RyICsgJyZ2b2RfaWQ9JyArIGxpc3RbaV0udm9kX2lkICsgJyZ0b2tlbj0nO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbSA9IGxpc3RbaV0udm9kX3JlbWFya3M7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3ZhciBjb249bGlzdFtpXS50eXBlLnR5cGVfZGVzO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG5cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy92YXIgY29uPWxpc3RbaV0uc3RhdGU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2codmlkKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogTVlfVFlQRSA9PSBcXFxcXFxcImhvbWVcXFxcXFxcIiA/IHRpdGxlLnJlcGxhY2Uoa2V5LCAn4oCc4oCcJyArIGtleSArICfigJ3igJ0nKSArICdcXFxcXFxcXG4nICsgcmVtIDogdGl0bGUgKyByZW0sXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY191cmw6IHBpYyArICdAUmVmZXJlcj0nLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQodGRvbWluLmluZGV4T2YoXFxcXFxcXCJtb2dhaV9hcGlcXFxcXFxcIikgIT0gLTEgPyB2aWQgKyAnO2dldDt1dGYtODt7VXNlci1BZ2VudEBEYXJ0LzIuMTQgKGRhcnQ6aW8pfScgOiB2aWQgKyAnO2dldDt1dGYtODt7VXNlci1BZ2VudEBva2h0dHAvNC4xLjB9JykucnVsZSgodGRvbWluLCB0a3QsIHBhdHQpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXMgPSB7fTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtcyA9IFtdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRrdCAhPSAnJykge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFBhZ2VUaXRsZSh0a3QgKyAnLScgKyBwYXR0KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBodG1sID0gSlNPTi5wYXJzZShnZXRSZXNDb2RlKCkpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICcnLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICcyNTUmJmZsb2F0JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICcnLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAneDVfd2Vidmlld19zaW5nbGUnXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBteXVybCA9IE1ZX1VSTC5tYXRjaCgvKFtcXFxcXFxcXFNdKj86XFxcXFxcXFwvXFxcXFxcXFwvW1xcXFxcXFxcU10qPylcXFxcXFxcXC8vKVsxXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvXFxcXFxcXFwvdm9kXFxcXFxcXFwvLy50ZXN0KHRkb21pbikpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS90dm1vdmxpc3QnLCB7fSkpLnJ1bGUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9hcHBtb3ZsaXN0Jywge30pKS5ydWxlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcblxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGEgPSBpdGVtcztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEhvbWVSZXN1bHQocmVzKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGRvbWluLCBwYXJhbS50aXQudGl0LCB0aXRsZSksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vY29udGVudDogcmVtLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiB0eXRpdCArICcgPT4gJyArIHBhcmFtLnRpdC50aXQsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV92ZXJ0aWNhbF9waWMnXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IC8vZm9yIGlcXFxcbiAgICAgICAgICAgICAgICAgICAgfSAvL2lmIGxpc3QubGVuZ3RoXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIHJldHVybiBkO1xcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgIHBhcmFtOiB7XFxcXG4gICAgICAgICAgICAgICAgaXQ6IGl0LFxcXFxuICAgICAgICAgICAgICAgIHRpdDogVGl0W2tdXFxcXG4gICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgaWQ6IFxcXFxcXFwidGFza1xcXFxcXFwiXFxcXG4gICAgICAgIH0pXFxcXG4gICAgfVxcXFxuXFxcXG4gICAgYmF0Y2hFeGVjdXRlKHRhc2tzLCB7XFxcXG4gICAgICAgIGZ1bmM6IGZ1bmN0aW9uKHBhcmFtLCBpZCwgZXJyb3IsIHJlc3VsdCkge1xcXFxuICAgICAgICAgICAgLy9sb2coXFxcXFxcXCJsaXN0ZW5lcjogXFxcXFxcXCIgKyAocmVzdWx0IHx8IFtdKS5sZW5ndGgpXFxcXG4gICAgICAgICAgICBwYXJhbS5pID0gcGFyYW0uaSArIDE7XFxcXG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XFxcXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaXQgb2YgcmVzdWx0KSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtLmogPSBwYXJhbS5qICsgMTtcXFxcbiAgICAgICAgICAgICAgICAgICAgYWRkSXRlbUJlZm9yZShwYWdlaWQsIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdC50aXRsZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IGl0LmRlc2MsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGl0LnVybCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBpY191cmw6IGl0LnBpY191cmwsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogaXQuY29sX3R5cGUsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcXFxcXFxcIl9fYXBwXFxcXFxcXCIgKyBNWV9QQUdFICsgXFxcXFxcXCJAXFxcXFxcXCIgKyBwYXJhbS5qXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBpZiAocGFyYW0uaSA+PSBwYXJhbS5hbGwpIHtcXFxcbiAgICAgICAgICAgICAgICBkZWxldGVJdGVtKHBhZ2VpZClcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgdXBkYXRlSXRlbSh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuato+WcqOWKoOi9veesrFxcXFxcXFwiICsgTVlfUEFHRSArIFxcXFxcXFwi6aG177yM6L+b5bqm77yaXFxcXFxcXCIgKyAocGFyYW0uaSArIDEpICsgXFxcXFxcXCIvXFxcXFxcXCIgKyBwYXJhbS5hbGwsXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF9jZW50ZXJfMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHBhZ2VpZFxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAgcGFyYW06IHtcXFxcbiAgICAgICAgICAgIGFsbDogRGF0YS5sZW5ndGgsXFxcXG4gICAgICAgICAgICBpOiAwLFxcXFxuICAgICAgICAgICAgajogLTFcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pXFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5pWw5o2u6L2s5o2iXFxcIixcXFwicGF0aFxcXCI6XFxcImNvbnZlclxcXCIsXFxcInJ1bGVcXFwiOlxcXCIvL2pzOlxcXFxuLy9yZW0ocmVzKTtcXFxcbnZhciDorrDlvZUgPSBbXTtcXFxcbnZhciDovpPlhaXmnaHnm64gPSByZW1maWxlLm1hdGNoKC8uKz1odHRwLisvZyk7XFxcXG5mb3IgKHZhciBqIGluIOi+k+WFpeadoeebrikge1xcXFxuICAgIHZhciB0aXRsZSA9IOi+k+WFpeadoeebrltqXS5zcGxpdCgnQCcpWzFdLnNwbGl0KCc9JylbMF07XFxcXG4gICAgdmFyIHVybCA9IOi+k+WFpeadoeebrltqXS5zcGxpdCgnPScpWzFdLnNwbGl0KCcjJylbMF07XFxcXG4gICAgdmFyIGltZyA9IOi+k+WFpeadoeebrltqXS5zcGxpdCgnIycpWzFdO1xcXFxuICAgIGlmIChpbWcuaW5kZXhPZihcXFxcXFxcImh0dHBcXFxcXFxcIikgIT0gLTEpIHtcXFxcbiAgICAgICAgdmFyIGltZyA9IGltZztcXFxcbiAgICB9IGVsc2UgaWYgKGltZyA9PSBcXFxcXFxcIlxcXFxcXFwiKSB7XFxcXG4gICAgICAgIHZhciBpbWcgPSBcXFxcXFxcImh0dHBzOi8vZ2l0Y29kZS5uZXQvbTBfNzIzOTUyMDUvaXB0di8tL3Jhdy9tYXN0ZXIvQXBwRmlsZS9BcHBJY29uL+mAmueUqOWbvuaghy5wbmdcXFxcXFxcIlxcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIHZhciBpbWcgPSBcXFxcXFxcImh0dHBzOi8vZ2l0Y29kZS5uZXQvbTBfNzIzOTUyMDUvaXB0di8tL3Jhdy9tYXN0ZXIvQXBwRmlsZS9BcHBJY29uL1xcXFxcXFwiICsgaW1nICsgXFxcXFxcXCIucG5nXFxcXFxcXCI7XFxcXG4gICAgfVxcXFxuICAgIGlmICh1cmwuc2VhcmNoKC9hcGlcXFxcXFxcXC5waHBcXFxcXFxcXC8uKj9cXFxcXFxcXC92b2QvKSAhPSAtMSkge1xcXFxuICAgICAgICB2YXIgbXVybCA9IFxcXFxcXFwicTpUVuW9seinhlxcXFxcXFwiO1xcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIHZhciBtdXJsID0gXFxcXFxcXCJxOkFQUOW9seinhlxcXFxcXFwiO1xcXFxuICAgIH1cXFxcbiAgICBpZiAo6L6T5YWl5p2h55uuW2pdLnNwbGl0KCdAJylbMF0gIT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgICAgICB2YXIgdHlwZSA9IOi+k+WFpeadoeebrltqXS5zcGxpdCgnQCcpWzBdO1xcXFxuICAgIH0gZWxzZSBpZiAodXJsLmluZGV4T2YoXFxcXFxcXCJhcGkucGhwL2FwcFxcXFxcXFwiKSAhPSAtMSB8fCB1cmwuaW5kZXhPZihcXFxcXFxcInhnYXBwXFxcXFxcXCIpICE9IC0xKSB7XFxcXG4gICAgICAgIHZhciB0eXBlID0gXFxcXFxcXCLlsI/pvp9cXFxcXFxcIjtcXFxcbiAgICB9IGVsc2UgaWYgKHVybC5pbmRleE9mKFxcXFxcXFwiLnZvZFxcXFxcXFwiKSAhPSAtMSkge1xcXFxuICAgICAgICB2YXIgdHlwZSA9IFxcXFxcXFwi5pmu6YCaXFxcXFxcXCI7XFxcXG4gICAgfSBlbHNlIGlmICh1cmwuc2VhcmNoKC9hcGlcXFxcXFxcXC5waHBcXFxcXFxcXC8uKz9cXFxcXFxcXC92b2RcXFxcXFxcXC8vKSAhPSAtMSkge1xcXFxuICAgICAgICB2YXIgdHlwZSA9IFxcXFxcXFwi56We6amsXFxcXFxcXCI7XFxcXG4gICAgfVxcXFxuICAgIOiusOW9lS5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxcXFxuICAgICAgICB1cmw6IHVybCxcXFxcbiAgICAgICAgaW1nOiBpbWcsXFxcXG4gICAgICAgIG11cmw6IG11cmwsXFxcXG4gICAgICAgIHR5cGU6IHR5cGVcXFxcbiAgICB9KTtcXFxcbn1cXFxcbnZhciDmlrDorrDlvZUgPSBbXTtcXFxcblxcXFxuZm9yICh2YXIgaSBpbiDorrDlvZUpIHtcXFxcbiAgICB2YXIg5b2T5YmN5p2h55uuID0gW107XFxcXG4gICAg5b2T5YmN5p2h55uuLnB1c2go6K6w5b2VW2ldKTtcXFxcbiAgICBpZiAo5paw6K6w5b2VLmxlbmd0aCA9PSAwKSB7XFxcXG4gICAgICAgIOaWsOiusOW9lS5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiDorrDlvZVbaV0udHlwZSxcXFxcbiAgICAgICAgICAgIGxpc3Q6IOW9k+WJjeadoeebrlxcXFxuICAgICAgICB9KTtcXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICBsZXQgcmVzID0g5paw6K6w5b2VLnNvbWUoaXRlbSA9PiB7XFxcXG4gICAgICAgICAgICAvL+WIpOaWreexu+Wei++8jOacieWwsea3u+WKoOWIsOW9k+WJjemhuVxcXFxuICAgICAgICAgICAgaWYgKGl0ZW0udGl0bGUgPT0g6K6w5b2VW2ldLnR5cGUpIHtcXFxcbiAgICAgICAgICAgICAgICBpdGVtLmxpc3QgPSDlvZPliY3mnaHnm64uY29uY2F0KGl0ZW0ubGlzdC5maWx0ZXIoZCA9PiBkLnVybCAhPSDorrDlvZVbaV0udXJsKSk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIGlmICghcmVzKSB7XFxcXG4gICAgICAgICAgICAvL+WmguaenOayoeaJvuebuOWQjOexu+Wei+a3u+WKoOS4gOS4quexu+Wei1xcXFxuICAgICAgICAgICAg5paw6K6w5b2VLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiDorrDlvZVbaV0udHlwZSxcXFxcbiAgICAgICAgICAgICAgICBsaXN0OiDlvZPliY3mnaHnm65cXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxufVxcXFxudmFyIG5ld2ZpbGUgPSB7fTtcXFxcbm5ld2ZpbGUuZGF0YSA9IOaWsOiusOW9lTtcXFxcbi8vbG9nKHJlbWZpbGUpO1xcXCJ9XVwifSIsInBpY1VybCI6Imh0dHBzOi8vaW1nLmxpYW5nemlwaWMuY29tL3VwbG9hZC92b2QvMjAyMjEyMTAtMS8yMGI1YzE5NjRmZTU5NGUzYjhhZjliNGI5NjZhMzJmOC5qcGdAUmVmZXJlcj0iLCJ0aXRsZSI6IkhH5b2x6KeGLeS4ieS9kyJ9
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement