Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥大明风华@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImdtdE1vZGlmaWVkXCI6MCxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuinhOWImeWIl+ihqFwiLFwicGF0aFwiOlwiZGF0YVwiLFwicnVsZVwiOlwidmFyIHdyYXB1ID0gKHUpID0+IHtcXG4gICAgaWYgKGNvbmZpZy5tb2RlID09IFxcXCLmnKzlnLDovaznoIFcXFwiKSB7XFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9wdXNoP3VybD1oaWtlcjovL2VtcHR5IyMnICsgZW5jb2RlVVJJQ29tcG9uZW50KHUpICsgJz8/P2Z5cGFnZSdcXG4gICAgfVxcbiAgICBpZiAoY29uZmlnLm1vZGUgPT0gXFxcIkpvZeeJiOmYv+mHjOS6keebmFxcXCIpIHtcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3NoYXJlP3BhZ2U9ZnlwYWdlJnJ1bGU96Zi/6YeM5LqR55uYJnNoYXJlX3VybD0nICsgdTtcXG4gICAgfVxcbiAgICBpZiAoY29uZmlnLm1vZGUgPT0gXFxcIuS6keebmOaxh+W9sVxcXCIpIHtcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL2RldGFpbD9ydWxlPeS6keebmOaxh+W9sSZ1cmw9JyArIHUgKyAnPz9meXBhZ2UnO1xcbiAgICB9XFxuICAgIGlmICgvYWxpeXVuZHJpdmUvLnRlc3QodSkpIHtcXG4gICAgICAgIGNvbnN0IFtsaW5rLCBfc2hhcmVfcHdkXSA9IHUuc3BsaXQoJz9zaGFyZV9wd2Q9Jyk7XFxuICAgICAgICBjb25zdCBbX2xpbmssIF9mb2xkZXJJRF0gPSBsaW5rLnNwbGl0KCcvZm9sZGVyLycpO1xcbiAgICAgICAgbGV0IHNoYXJlX3B3ZCA9IChfc2hhcmVfcHdkIHx8ICcnKS5zcGxpdCgnI25hbWU9JylbMF0gfHwgJyc7XFxuICAgICAgICBsZXQgc2hhcmVJZCA9IF9saW5rLnNwbGl0KCdjb20vcy8nKVsxXTtcXG4gICAgICAgIHJldHVybiAnc21hcnRkcml2ZTovL3NoYXJlL2Jyb3dzZT9zaGFyZUlkPScgKyBzaGFyZUlkICsgJyZzaGFyZVB3ZD0nICsgc2hhcmVfcHdkO1xcbiAgICB9XFxuICAgIHJldHVybiBcXFwid2ViOi8vXFxcIiArIHU7XFxufTtcXG5cXG52YXIgY2hlY2thbGkgPSAocmVhbHVybCkgPT4ge1xcbiAgICB0cnkge1xcbiAgICAgICAgbGV0IHNoYXJlSWQgPSByZWFsdXJsLnNwbGl0KFxcXCJjb20vcy9cXFwiKVsxXS5zdWJzdHJpbmcoMCwgMTEpO1xcbiAgICAgICAgaWYgKHJlYWx1cmwuaW5jbHVkZXMoXFxcImNvbS9zL1xcXCIpICYmIHJlYWx1cmwgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICBsZXQgc2hhcmUgPSBmZXRjaChcXFwiaHR0cHM6Ly9hcGkuYWxpeXVuZHJpdmUuY29tL2Fkcml2ZS92My9zaGFyZV9saW5rL2dldF9zaGFyZV9ieV9hbm9ueW1vdXNcXFwiLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXFxuICAgICAgICAgICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFBDX1VBLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tL1xcXCJcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgYm9keToge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcInNoYXJlX2lkXFxcIjogc2hhcmVJZFxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGlmIChzaGFyZS5pbmNsdWRlcyhcXFwic2hhcmVfbGluayBpc1xcXCIpIHx8IHNoYXJlLmluY2x1ZGVzKFxcXCJzaGFyZV9saW5rIGNhbm5vdFxcXCIpKSByZXR1cm4gZmFsc2U7XFxuICAgICAgICB9XFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgIHJldHVybiB0cnVlO1xcbn1cXG5cXG5sZXQgcnVsZXMgPSBbe1xcbiAgICAgICAgbmFtZTogXFxcIuS6keebmOi1hOa6kFxcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCB1cmwgPSBcXFwiaHR0cHM6Ly9yZXMueXVucGFuLndpbi8/UGFnZUluZGV4PVxcXCIgKyBwYWdlICsgXFxcIiZQYWdlU2l6ZT0xMiZLZXl3b3JkPVxcXCIgKyBzICsgXFxcIiZUeXBlPSZUYWc9XFxcIjtcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QodXJsLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vcmVzLnl1bnBhbi53aW4vXFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcIm1haW4mJi5jYXJkXFxcIik7XFxuICAgICAgICAgICAgLy9sb2coYXJyKTtcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIGxldCBpdCA9IGFycltpXTtcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBwZGZoKGl0LCBcXFwiLmNhcmQtbGluaywxJiZvbmNsaWNrXFxcIikubWF0Y2goL2h0dHBzOlxcXFwvXFxcXC8od3d3XFxcXC5hbGl5dW5kcml2ZVxcXFwuY29tXFxcXC9zfGFseXdwXFxcXC5uZXQpXFxcXC9cXFxcdyovZykgfHwgW107XFxuICAgICAgICAgICAgICAgIHUgPSB1Lmxlbmd0aCA+IDAgPyB1WzBdIDogdXJsO1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXQsIFxcXCIuY2FyZC10aXRsZSYmVGV4dFxcXCIpLFxcbiAgICAgICAgICAgICAgICAgICAgcGljX3VybDogcGQoaXQsIFxcXCJpbWcmJnNyY1xcXCIsIHVybCksXFxuICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyB1ICsgJz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQodSkgKyAnPz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogd3JhcHUodSksXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+5LqR55uY6LWE5rqQPC9mb250PiZuYnNwO1xcXCIgKyAocGRmaChpdCwgXFxcIi5jYXJkLXRleHQsLTEmJlRleHRcXFwiKSkgKyBcXFwiXFxcXG5cXFwiICsgKHUpLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9XFxuICAgIH0sIHtcXG4gICAgICAgIG5hbWU6IFxcXCJVUOS6keaQnFxcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCB1cmwgPSBcXFwiaHR0cHM6Ly9hcGkudXB5dW5zbzIuY29tL3NlYXJjaD9rZXl3b3JkPVxcXCIgKyBzICsgXFxcIiZwYWdlPVxcXCIgKyBwYWdlICsgXFxcIiZzX3R5cGU9MVxcXCI7XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KHVybCwge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL3d3dy51cHl1bnNvLmNvbVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBcXFwiQ29va2llXFxcIjogXFxcImNvZGU9MTkxOVxcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIC8vbG9nKGJhc2U2NERlY29kZShodG1sKSk7XFxuICAgICAgICAgICAgbGV0IGFyciA9IEpTT04ucGFyc2UoYmFzZTY0RGVjb2RlKGh0bWwpKS5yZXN1bHQuaXRlbXM7XFxuICAgICAgICAgICAgLy9sb2coYXJyKTtcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIGxldCBpdCA9IGFycltpXTtcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBpdC5wYWdlX3VybDtcXG4gICAgICAgICAgICAgICAgLy91ID0gdS5sZW5ndGggPiAwID8gdVswXSA6IHVybDtcXG4gICAgICAgICAgICAgICAgaWYgKCF1LmluY2x1ZGVzKFxcXCJhbGl5dW5kcml2ZVxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0LnRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD0nICsgdSArICc/P2Z5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9wdXNoP3VybD1oaWtlcjovL2VtcHR5IyMnICsgZW5jb2RlVVJJQ29tcG9uZW50KHUpICsgJz8/P2Z5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHdyYXB1KHUpLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPlVQ5LqR5pCcPC9mb250PiZuYnNwO1xcXCIgKyBcXFwiXFxcXG5cXFwiICsgKHUpLFxcbiAgICAgICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9XFxuICAgIH0sIHtcXG4gICAgICAgIG5hbWU6IFxcXCLnjKvni7jnm5jmkJxcXFwiLFxcbiAgICAgICAgcGFnZTogZmFsc2UsXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KFxcXCJodHRwczovL3d3dy5hbGlwYW5zb3UuY29tL3NlYXJjaD9rPVxcXCIgKyBzLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vd3d3LmFsaXBhbnNvdS5jb20vc2VhcmNoP2s9XFxcIiArIHNcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFxcXCIjYXBwJiZhXFxcIik7XFxuICAgICAgICAgICAgLy9sb2coYXJyKTtcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIGxldCBpdCA9IFxcXCI8ZGl2PlxcXCIgKyBhcnJbaV0gKyBcXFwiPC9kaXY+XFxcIjtcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBwZGZoKGl0LCBcXFwiYSYmaHJlZlxcXCIpO1xcbiAgICAgICAgICAgICAgICAvL2xvZyh1KTtcXG4gICAgICAgICAgICAgICAgaWYgKCF1LmluY2x1ZGVzKFxcXCIvcy9cXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdSA9IFxcXCJodHRwczovL3d3dy5hbGlwYW5zb3UuY29tXFxcIiArIHUucmVwbGFjZShcXFwiL3MvXFxcIiwgXFxcIi9jdi9cXFwiKTtcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwZGZoKGl0LCBcXFwidGVtcGxhdGUmJlRleHRcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJCh1KS5sYXp5UnVsZSgod3JhcHUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoaW5wdXQsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IFxcXCJub19zaG93X2RvbmF0ZT0xXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogaW5wdXQucmVwbGFjZShcXFwiL2N2L1xcXCIsIFxcXCIvcy9cXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdDogZmFsc2VcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sID0gcGFyc2VEb21Gb3JIdG1sKGh0bWwsICdhJiZocmVmJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy92YXIgX2xpbmtzID0gaHRtbC5tYXRjaCgvaHR0cHM6XFxcXC9cXFxcLyh3d3dcXFxcLmFsaXl1bmRyaXZlXFxcXC5jb21cXFxcL3N8YWx5d3BcXFxcLm5ldClcXFxcL1xcXFx3Ki9nKSB8fCBbXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2xvZyhfbGlua3MpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChodG1sLmxlbmd0aCA+IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXR1cm4gJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyBfbGlua3NbMF0gKyAnPz9meXBhZ2UnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3JldHVybiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQoaHRtbCkgKyAnPz8/ZnlwYWdlJztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXB1KGh0bWwpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dDtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9LCB3cmFwdSksXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+54yr54u455uY5pCcPC9mb250PiZuYnNwO1xcXCIgKyBwZGZoKGl0LCBcXFwidGVtcGxhdGUsMSYmVGV4dFxcXCIpLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9XFxuICAgIH0sIHtcXG4gICAgICAgIG5hbWU6IFxcXCLmmJPmkJxcXFwiLFxcbiAgICAgICAgcGFnZTogdHJ1ZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBldmFsKGdldENyeXB0b0pTKCkpO1xcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIGtleWVuKHN0cikge1xcbiAgICAgICAgICAgICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoXFxcIjRPVG9TY1VGT2FlVlRySEVcXFwiKSxcXG4gICAgICAgICAgICAgICAgICAgIGl2ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoXFxcIjlDTEdhbzF2SEtxbTE3T3pcXFwiKTtcXG4gICAgICAgICAgICAgICAgdmFyIGVuY3J5cHRlZCA9IENyeXB0b0pTLkFFUy5kZWNyeXB0KHtcXG4gICAgICAgICAgICAgICAgICAgIGNpcGhlcnRleHQ6IENyeXB0b0pTLmVuYy5CYXNlNjQucGFyc2Uoc3RyKVxcbiAgICAgICAgICAgICAgICB9LCBrZXksIHtcXG4gICAgICAgICAgICAgICAgICAgIGl2OiBpdixcXG4gICAgICAgICAgICAgICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLFxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XFxuICAgICAgICAgICAgICAgIH0pLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3J5cHRlZDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KFxcXCJodHRwczovL3lpc28uZnVuL2FwaS9zZWFyY2g/bmFtZT1cXFwiICsgcyArIFxcXCImcGFnZU5vPVxcXCIgKyBwYWdlLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8veWlzby5mdW4vaW5mbz9zZWFyY2hLZXk9XFxcIiArIHMsXFxuICAgICAgICAgICAgICAgICAgICBcXFwiQ29va2llXFxcIjogZ2V0SXRlbSgneWlzb3Vjb29rZScsICcnKVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgLy9sb2coaHRtbCk7XFxuICAgICAgICAgICAgaWYgKGh0bWwuaW5jbHVkZXMoJ+eZu+W9leeUqOaIt+aXoOmZkOWIticpKSB7XFxuICAgICAgICAgICAgICAgIHZhciBpID0gMDtcXG4gICAgICAgICAgICAgICAgZG8ge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHR5aW1nbGluID0gJ2h0dHBzOi8veWlzby5mdW4vYXBpL3VzZXIvbG9naW4vY2FwdGNoYT90PScgKyBwYXJzZUludChuZXcgRGF0ZSgpLmdldFRpbWUoKSkgKyAnJztcXG4gICAgICAgICAgICAgICAgICAgIGxldCBpbWcgPSBjb252ZXJ0QmFzZTY0SW1hZ2UodHlpbWdsaW4pLnNwbGl0KCcsJylbMV07XFxuICAgICAgICAgICAgICAgICAgICBsZXQgY29kID0gcmVxdWVzdCgnaHR0cHM6Ly9hcGkubm4uY2kvb2NyL2I2NC90ZXh0Jywge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICd0ZXh0L3BsYWluJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogaW1nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIHZhciB2ZXIgPSBKU09OLnBhcnNlKHJlcXVlc3QoJ2h0dHBzOi8veWlzby5mdW4vYXBpL3VzZXIvbG9naW4nLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVmZXJlcic6ICdodHRwczovL3lpc28uZnVuL2xvZ2luJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Nvb2tpZSc6IGdldENvb2tpZSh0eWltZ2xpbilcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcInVzZXJOYW1lXFxcIjogXFxcInR2Ym94MjAyM1xcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJwYXNzd29yZFxcXCI6IFxcXCJUdmJveDIwMjNcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiY29kZVxcXCI6IGNvZFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmICh2ZXIuY29kZSA9PSAyMDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2coJ+aYk+aQnOeZu+WFpemqjOivgeaIkOWKnycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oJ3lpc291Y29va2UnLCBnZXRDb29raWUoJ2h0dHBzOi8veWlzby5mdW4nKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCA9IHJlcXVlc3QoXFxcImh0dHBzOi8veWlzby5mdW4vYXBpL3NlYXJjaD9uYW1lPVxcXCIgKyBzICsgXFxcIiZwYWdlTm89XFxcIiArIHBhZ2UsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly95aXNvLmZ1bi9pbmZvP3NlYXJjaEtleT1cXFwiICsgcyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBnZXRJdGVtKCd5aXNvdWNvb2tlJywgJycpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGkrKztcXG4gICAgICAgICAgICAgICAgfSB3aGlsZSAoaSA8IDQpO1xcblxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBsZXQgYXJyID0gSlNPTi5wYXJzZShodG1sKS5kYXRhLmxpc3Q7XFxuICAgICAgICAgICAgLy9sb2coYXJyKTtcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIGxldCBpdCA9IGFycltpXTtcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBrZXllbihpdC51cmwpO1xcbiAgICAgICAgICAgICAgICAvL2xvZyh1KTtcXG4gICAgICAgICAgICAgICAgaWYgKHUgPT0gbnVsbCB8fCAhdS5pbmNsdWRlcyhcXFwiYWxpeXVuXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuKAnOKAnOKAneKAnVxcXCIgKyBpdC5uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD0nICsgdSArICc/P2Z5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9wdXNoP3VybD1oaWtlcjovL2VtcHR5IyMnICsgZW5jb2RlVVJJQ29tcG9uZW50KHUpICsgJz8/P2Z5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHdyYXB1KHUpLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPuaYk+aQnDwvZm9udD4mbmJzcDtcXFwiICsgKGl0LmdtdFNoYXJlIHx8IGl0LmdtdENyZWF0ZSkgKyBcXFwiXFxcXG5cXFwiICsgKHUpLFxcbiAgICAgICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9XFxuICAgIH0sIHtcXG4gICAgICAgIG5hbWU6IFxcXCLmib7otYTmupBcXFwiLFxcbiAgICAgICAgcGFnZTogdHJ1ZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBmdW5jdGlvbiBnZXRodG1sKCkge1xcbiAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoXFxcImh0dHBzOi8vemhhb3ppeXVhbi5sYS9zbz9maWxlbmFtZT1cXFwiICsgcyArIFxcXCImcGFnZT1cXFwiICsgcGFnZSwge1xcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vemhhb3ppeXVhbi5sYS9zdG9wLmh0bWxcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJvcmlnaW5cXFwiOiBcXFwiaHR0cHM6Ly96aGFveml5dWFuLmxhXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFwiQ29va2llXFxcIjogZ2V0SXRlbShcXFwienp5Y29va2VcXFwiLCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcInVwZ3JhZGUtaW5zZWN1cmUtcmVxdWVzdHNcXFwiOiBcXFwiMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcImNvbnRlbnQtdHlwZVxcXCI6IFxcXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gaHRtbDtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIHZhciBodG1sID0gZ2V0aHRtbCgpO1xcbiAgICAgICAgICAgIGlmICghaHRtbC5pbmNsdWRlcyhcXFwic2VhcmNoX2JveFxcXCIpKSB7XFxuICAgICAgICAgICAgICAgIGxldCB1c2VyID0gJ2RYTmxjbTVoYldVOWVYQnFNakF5TXlad1lYTnpkMjl5WkQxNWNHb3lNREl6JztcXG4gICAgICAgICAgICAgICAgbGV0IGNvb2sgPSBKU09OLnBhcnNlKGZldGNoQ29va2llKCdodHRwczovL3poYW96aXl1YW4ubGEvbG9naXUuaHRtbCcsIHtcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6IE1PQklMRV9VQSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ09yaWdpbic6ICdodHRwczovL3poYW96aXl1YW4ubGEnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vemhhb3ppeXVhbi5sYS9sb2dpbi5odG1sJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFwidXBncmFkZS1pbnNlY3VyZS1yZXF1ZXN0c1xcXCI6IFxcXCIxXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IGJhc2U2NERlY29kZSh1c2VyKSxcXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxcbiAgICAgICAgICAgICAgICAgICAgb25seUhlYWRlcnM6IHRydWUsXFxuICAgICAgICAgICAgICAgICAgICB3aXRoSGVhZGVyczogdHJ1ZVxcbiAgICAgICAgICAgICAgICB9KSkuam9pbignOycpO1xcbiAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXCJ6enljb29rZVxcXCIsIGNvb2spO1xcbiAgICAgICAgICAgICAgICBsb2coXFxcIuaJvui1hOa6kOeZu+WFpVxcXCIpO1xcbiAgICAgICAgICAgICAgICBodG1sID0gZ2V0aHRtbCgpO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBsZXQgYXJyID0gcGRmYShodG1sLCBcXFwiYm9keSYmLm5ld3NMaXN0JiZsaTpub3QoOmZpcnN0LWNoaWxkKVxcXCIpO1xcbiAgICAgICAgICAgIC8vbG9nKGFycik7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgICAgICBsZXQgaXQgPSBhcnJbaV07XFxuICAgICAgICAgICAgICAgIGxldCB1ID0gcGRmaChpdCwgXFxcImEmJmhyZWZcXFwiKTtcXG4gICAgICAgICAgICAgICAgaWYgKHUgPT0gbnVsbCkge1xcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdSA9IFxcXCJodHRwczovL3poYW96aXl1YW4ubGEvXFxcIiArIHU7XFxuICAgICAgICAgICAgICAgIC8vbG9nKHUpO1xcbiAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBwZGZoKGl0LCBcXFwiLm5ld3NfdGV4dCYmaDMmJlRleHRcXFwiKTtcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT7mib7otYTmupA8L2ZvbnQ+Jm5ic3A7XFxcIiArIChwZGZoKGl0LCBcXFwiLm5ld3NfdGV4dCYmcCYmVGV4dFxcXCIpKSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJCh1KS5sYXp5UnVsZSgod3JhcHUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoaW5wdXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfbGlua3MgPSBodG1sLm1hdGNoKC9odHRwczpcXFxcL1xcXFwvKHd3d1xcXFwuYWxpeXVuZHJpdmVcXFxcLmNvbVxcXFwvc3xhbHl3cFxcXFwubmV0KVxcXFwvXFxcXHcqL2cpIHx8IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9nKF9saW5rcyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9saW5rcy5sZW5ndGggPiAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcmV0dXJuICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD0nICsgX2xpbmtzWzBdICsgJz8/ZnlwYWdlJztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXR1cm4gJ2hpa2VyOi8vcGFnZS9wdXNoP3VybD1oaWtlcjovL2VtcHR5IyMnICsgZW5jb2RlVVJJQ29tcG9uZW50KF9saW5rc1swXSkgKyAnPz8/ZnlwYWdlJztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXB1KF9saW5rc1swXSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0sIHdyYXB1KVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9XFxuICAgIH0sIHtcXG4gICAgICAgIG5hbWU6IFxcXCLlsI/nurjmnaFcXFwiLFxcbiAgICAgICAgcGFnZTogZmFsc2UsXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICAgICAgZnVuY3Rpb24gZ2V0dG9rZW4oKSB7XFxuICAgICAgICAgICAgICAgIGlmIChnZXRNeVZhcigneHp5dG9rZW4nLCAnJykubGVuZ3RoID09IDApIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB0b2tlbiA9IEpTT04ucGFyc2UocG9zdCgnaHR0cHM6Ly9naXRjYWZlLm5ldC90b29sL2FsaXBhcGVyLycsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vdS5naXRjYWZlLm5ldC8nXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5OiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ2dldF90b2tlbidcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KSkuZGF0YTtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCd4enR0b2tlbicsIHRva2VuKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0TXlWYXIoJ3h6dHRva2VuJywgJycpO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBmdW5jdGlvbiBjYXRfY29kZShhKSB7XFxuICAgICAgICAgICAgICAgIHZhciBkLCBlLCBiID0gW1xcXCLljY7or63nlLXop4ZcXFwiLCBcXFwi5pel6Z+p55S16KeGXFxcIiwgXFxcIuasp+e+jueUteinhlxcXCIsIFxcXCLlhbbku5bnlLXop4ZcXFwiLCBcXFwi5Y2O6K+t55S15b2xXFxcIiwgXFxcIuaXpemfqeeUteW9sVxcXCIsIFxcXCLmrKfnvo7nlLXlvbFcXFwiLCBcXFwi5YW25LuW55S15b2xXFxcIiwgXFxcIuWNjuivreWKqOa8q1xcXCIsIFxcXCLml6Xpn6nliqjmvKtcXFwiLCBcXFwi5qyn576O5Yqo5ryrXFxcIiwgXFxcIue6quW9leeJh1xcXCIsIFxcXCLnu7zoibrniYdcXFwiLCBcXFwi5pWZ6IKy5Z+56K6tXFxcIiwgXFxcIuWFtuS7luinhumikVxcXCIsIFxcXCLljY7or63pn7PkuZBcXFwiLCBcXFwi5pel6Z+p6Z+z5LmQXFxcIiwgXFxcIuasp+e+jumfs+S5kFxcXCIsIFxcXCLlhbbku5bpn7PkuZBcXFwiLCBcXFwi5aix5LmQ6L2v5Lu2XFxcIiwgXFxcIuezu+e7n+i9r+S7tlxcXCIsIFxcXCLnvZHnu5zova/ku7ZcXFwiLCBcXFwi5Yqe5YWs6L2v5Lu2XFxcIiwgXFxcIuWFtuS7lui9r+S7tlxcXCIsIFxcXCLmvKvnlLtcXFwiLCBcXFwi5bCP6K+0XFxcIiwgXFxcIuWHuueJiOS5plxcXCIsIFxcXCLnn6Xor4bln7norq1cXFwiLCBcXFwi5YW25LuW5paH5qGjXFxcIiwgXFxcIuWjgee6uFxcXCIsIFxcXCLkurrnialcXFwiLCBcXFwi6aOO5pmvXFxcIiwgXFxcIuWFtuS7luWbvueJh1xcXCIsIFxcXCLlhbbku5ZcXFwiXSxcXG4gICAgICAgICAgICAgICAgICAgIGMgPSBbXFxcImh5ZHNcXFwiLCBcXFwicmhkc1xcXCIsIFxcXCJvbWRzXFxcIiwgXFxcInF0ZHNcXFwiLCBcXFwiaHlkeVxcXCIsIFxcXCJyaGR5XFxcIiwgXFxcIm9tZHlcXFwiLCBcXFwicXRkeVxcXCIsIFxcXCJoeWRtXFxcIiwgXFxcInJoZG1cXFwiLCBcXFwib21kbVxcXCIsIFxcXCJqbHBcXFwiLCBcXFwienlwXFxcIiwgXFxcImp5cHhcXFwiLCBcXFwicXRzcFxcXCIsIFxcXCJoeXl5XFxcIiwgXFxcInJoeXlcXFwiLCBcXFwib215eVxcXCIsIFxcXCJxdHl5XFxcIiwgXFxcImtmcmpcXFwiLCBcXFwieHRyalxcXCIsIFxcXCJ3bHJqXFxcIiwgXFxcImJncmpcXFwiLCBcXFwicXRyalxcXCIsIFxcXCJtaFxcXCIsIFxcXCJ4c1xcXCIsIFxcXCJjYnNcXFwiLCBcXFwienNweFxcXCIsIFxcXCJxdHdkXFxcIiwgXFxcImJ6XFxcIiwgXFxcInJ3XFxcIiwgXFxcImZqXFxcIiwgXFxcInF0dHBcXFwiLCBcXFwicXRcXFwiXTtcXG4gICAgICAgICAgICAgICAgZm9yIChkID0gMCwgZSA9IGMubGVuZ3RoOyBlID4gZDsgZCsrKVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNbZF0gPT0gYSkgcmV0dXJuIGJbZF07XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSBwb3N0KFxcXCJodHRwczovL2dpdGNhZmUubmV0L3Rvb2wvYWxpcGFwZXIvXFxcIiwge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6ICdodHRwczovL3UuZ2l0Y2FmZS5uZXQvJ1xcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICBib2R5OiB7XFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb246IFxcXCJzZWFyY2hcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgZnJvbTogXFxcIndlYlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB0b2tlbjogZ2V0dG9rZW4oKSxcXG4gICAgICAgICAgICAgICAgICAgIGtleXdvcmQ6IHNcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgbGV0IGxpc3QgPSBKU09OLnBhcnNlKGh0bWwpO1xcbiAgICAgICAgICAgIGlmIChsaXN0LmRhdGEpIHtcXG4gICAgICAgICAgICAgICAgbGlzdCA9IGxpc3QuZGF0YTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIGxldCBpdCA9IGxpc3RbaV1cXG4gICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gaXQudGl0bGU7XFxuICAgICAgICAgICAgICAgIGxldCBtdXJsID0gJ2h0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS9zLycgKyBpdC5rZXlcXG4gICAgICAgICAgICAgICAgaWYgKCFjaGVja2FsaShtdXJsKSkge1xcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKHRpdGxlLmluY2x1ZGVzKHMpKSB7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi4oiaIFxcXCIgKyB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+5bCP57q45p2hPC9mb250PiZuYnNwO1xcXCIgKyBjYXRfY29kZShpdC5jYXQpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlczogaXQuZGVzXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPWh0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS9zLycgKyBtdXJsICsgJz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHdyYXB1KG11cmwpXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvcHVzaD91cmw9aGlrZXI6Ly9lbXB0eSMjJyArIGVuY29kZVVSSUNvbXBvbmVudCgnaHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tL3MvJyArIG11cmwpICsgJz8/P2Z5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZDtcXG4gICAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgICAgbmFtZTogXFxcIueOqeWBtuWTpeWTpVxcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCB1cmwgPSBcXFwiaHR0cDovL3dvZ2cueHl6L2luZGV4LnBocC92b2RzZWFyY2gvXFxcIiArIHMgKyBcXFwiLS0tLS0tLS0tLVxcXCIgKyBwYWdlICsgXFxcIi0tLS5odG1sXFxcIjtcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QodXJsLCB7fSk7XFxuICAgICAgICAgICAgbGV0IGFyciA9IHBhcnNlRG9tRm9yQXJyYXkoaHRtbCwgJy5tb2R1bGUtaXRlbXMmJi5tb2R1bGUtc2VhcmNoLWl0ZW0nKTtcXG4gICAgICAgICAgICAvL2xvZyhhcnIpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgbGV0IGJldCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIGxldCBpdCA9IGFycltpXTtcXG4gICAgICAgICAgICAgICAgbGV0IHV0aXRsZSA9IHBhcnNlRG9tRm9ySHRtbChpdCwgJ2gzJiZhJiZUZXh0Jyk7XFxuICAgICAgICAgICAgICAgIGxldCB1c2VyaWFsID0gcGFyc2VEb21Gb3JIdG1sKGl0LCAnLnZpZGVvLXNlcmlhbCYmVGV4dCcpO1xcbiAgICAgICAgICAgICAgICBsZXQgdWltYWdlID0gcGFyc2VEb20oaXQsICcubGF6eWxvYWQmJmRhdGEtc3JjJywgJ2h0dHA6Ly93b2dnLnh5ei8nKTtcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBwYXJzZURvbShpdCwgJ2gzJiZhJiZocmVmJywgJ2h0dHA6Ly93b2dnLnh5ei8nKTtcXG4gICAgICAgICAgICAgICAgLy9sZXQgZGV0ID0gcmVxdWVzdCh1LCB7fSk7XFxuICAgICAgICAgICAgICAgIGJldC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB1dGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHUsXFxuICAgICAgICAgICAgICAgICAgICBpbWFnZTogdWltYWdlLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogdXNlcmlhbFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGJldC5sZW5ndGggPiAwKSB7XFxuICAgICAgICAgICAgICAgIGxldCBiZXRoID0gYmF0Y2hGZXRjaChiZXQpO1xcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJldGgubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBsaXN0ID0gcGFyc2VEb21Gb3JBcnJheShiZXRoW2ldLCAnLm1vZHVsZS1wbGF5ZXItbGlzdCYmcCcpXFxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxpc3QubGVuZ3RoOyBqKyspIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IHBhcnNlRG9tRm9ySHRtbChsaXN0W2pdLCAncCYmVGV4dCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdS5pbmNsdWRlcyhcXFwiL3MvXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBiZXRbaV0udGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY191cmw6IGJldFtpXS5pbWFnZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD0nICsgdSArICc/P2Z5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQodSkgKyAnPz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB3cmFwdSh1KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPueOqeWBtuWTpeWTpTwvZm9udD4mbmJzcDtcXFwiICsgKGJldFtpXS5kZXNjKSArICdcXFxcbicgKyB1LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAgICBuYW1lOiBcXFwi6Zi/6YeM5LqR55uY572RXFxcIixcXG4gICAgICAgIHBhZ2U6IHRydWUsXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICAgICAgbGV0IHVybCA9IFxcXCJodHRwczovL3d3dy5hbHlwdy5jbi9zZWFyY2gucGhwP3E9XFxcIiArIHMgKyBcXFwiJnBhZ2U9XFxcIiArIHBhZ2U7XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KHVybCwge30pO1xcbiAgICAgICAgICAgIGxldCBhcnIgPSBwYXJzZURvbUZvckFycmF5KGh0bWwsICcubGlzdCYmbGknKTtcXG4gICAgICAgICAgICAvL2xvZyhhcnIpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgbGV0IGJldCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIGxldCBpdCA9IGFycltpXTtcXG4gICAgICAgICAgICAgICAgbGV0IHV0aXRsZSA9IHBhcnNlRG9tRm9ySHRtbChpdCwgJ2EmJnRpdGxlJyk7XFxuICAgICAgICAgICAgICAgIGxldCB1c2VyaWFsID0gcGFyc2VEb21Gb3JIdG1sKGl0LCAnLmZhLWNsb2NrLW8mJlRleHQnKTtcXG4gICAgICAgICAgICAgICAgbGV0IHVpbWFnZSA9IHBhcnNlRG9tKGl0LCAnaW1nJiZzcmMnLCAnaHR0cHM6Ly93d3cuYWx5cHcuY24vJyk7XFxuICAgICAgICAgICAgICAgIGxldCB1ID0gcGFyc2VEb20oaXQsICdhJiZocmVmJywgJ2h0dHBzOi8vd3d3LmFseXB3LmNuLycpO1xcbiAgICAgICAgICAgICAgICAvL2xldCBkZXQgPSByZXF1ZXN0KHUsIHt9KTtcXG4gICAgICAgICAgICAgICAgaWYgKCF1dGl0bGUuaW5jbHVkZXMocykpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGJldC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB1dGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHUsXFxuICAgICAgICAgICAgICAgICAgICBpbWFnZTogdWltYWdlLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogdXNlcmlhbFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgLy9sb2coYmV0KTtcXG4gICAgICAgICAgICBpZiAoYmV0Lmxlbmd0aCA+IDApIHtcXG4gICAgICAgICAgICAgICAgbGV0IGJldGggPSBiYXRjaEZldGNoKGJldCk7XFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmV0aC5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxpc3QgPSBwYXJzZURvbUZvckFycmF5KGJldGhbaV0sICdib2R5JiZhW2hyZWZePWh0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS9zL10nKVxcbiAgICAgICAgICAgICAgICAgICAgLy9sb2cobGlzdCk7XFxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxpc3QubGVuZ3RoOyBqKyspIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdSA9IHBhcnNlRG9tRm9ySHRtbChsaXN0W2pdLCAnYSYmaHJlZicpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBiZXRbaV0udGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY191cmw6IGJldFtpXS5pbWFnZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD0nICsgdSArICc/P2Z5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQodSkgKyAnPz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB3cmFwdSh1KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPumYv+mHjOS6keebmOe9kTwvZm9udD4mbmJzcDtcXFwiICsgKGJldFtpXS5kZXNjKSArICdcXFxcbicgKyB1LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAgICBuYW1lOiBcXFwi5Zyf5ouo6bygXFxcIixcXG4gICAgICAgIHBhZ2U6IGZhbHNlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCBodG1sID0gZmV0Y2goJ2h0dHBzOi8vd3d3LnRic2R5LmNvbS9zZWFyY2guaHRtbD9rZXl3b3JkPScgKyBzICsgJyZjYXRlZ29yeT05ODM5MjAmZGF0YV90eXBlPTk4NzkxMCcsIHtcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnOiBQQ19VQVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgbGV0IGFyciA9IHBhcnNlRG9tRm9yQXJyYXkoaHRtbCwgJy5zZWFyY2hfcmVzdWx0X25ldGRpc2tfbGlzdCYmYScpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgbGV0IGl0ID0gYXJyW2ldO1xcbiAgICAgICAgICAgICAgICAvL2xvZyhpdCk7XFxuICAgICAgICAgICAgICAgIGxldCB1ID0gcGFyc2VEb21Gb3JIdG1sKGl0LCAnYSYmaHJlZicpO1xcbiAgICAgICAgICAgICAgICBsZXQgdGl0ID0gcGFyc2VEb21Gb3JIdG1sKGl0LCAnLm5ldGRpc2tfaXRlbV9kZXRhaWxfbmFtZSYmVGV4dCcpO1xcbiAgICAgICAgICAgICAgICBpZiAoIXRpdC5pbmNsdWRlcyhzKSkge1xcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgLy9sb2codSk7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0LFxcbiAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD0nICsgdSArICc/P2Z5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9wdXNoP3VybD1oaWtlcjovL2VtcHR5IyMnICsgZW5jb2RlVVJJQ29tcG9uZW50KHUpICsgJz8/P2Z5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHdyYXB1KHUpLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPuWcn+aLqOm8oOaQnDwvZm9udD4mbmJzcDtcXFwiICsgXFxcIlxcXFxuXFxcIiArIHUsXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZDtcXG4gICAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgICAgbmFtZTogXFxcIumYv+mHjOaQnFxcXCIsXFxuICAgICAgICBwYWdlOiB0cnVlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KCdodHRwczovL2FsaXNvLmNjL3MvJyArIHMgKyAnLScgKyBwYWdlICsgJy0wLmh0bWwnLCB7fSk7XFxuXFxuICAgICAgICAgICAgbGV0IGxpc3QgPSBwYXJzZURvbUZvckFycmF5KGh0bWwsICcuc2VhcmNoLXJlc3VsdCYmLnJlc291cmNlLWl0ZW0nKTtcXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxpc3QubGVuZ3RoOyBqKyspIHtcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBsaXN0W2pdO1xcbiAgICAgICAgICAgICAgICBsZXQgdGl0ID0gcGFyc2VEb21Gb3JIdG1sKHUsICdoMyYmVGV4dCcpO1xcbiAgICAgICAgICAgICAgICBpZiAoIXRpdC5pbmNsdWRlcyhzKSkge1xcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXQsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQocGFyc2VEb20odSwgJ2gzJiZhJiZocmVmJywgJ2h0dHBzOi8vYWxpc28uY2MvJykpLmxhenlSdWxlKCh3cmFwdSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoZ2V0Q3J5cHRvSlMoKSk7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVjcnkoc3RyKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShcXFwiOUVCMjBEREZENkFGQkQ2OFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5jcnlwdGVkID0gQ3J5cHRvSlMuQUVTLmRlY3J5cHQoc3RyLCBrZXksIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2OiBrZXksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlOiBDcnlwdG9KUy5tb2RlLkNCQyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzN1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbmNyeXB0ZWQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdChpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGJ1dCA9IHBhcnNlRG9tKGh0bWwsICcuYnV0dG9uJiZocmVmJywgJ2h0dHBzOi8vYWxpc28uY2MvJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2coYnV0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZ290ID0gcmVxdWVzdChidXQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9nKGdvdCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChwYXJzZURvbUZvckh0bWwoZ290LCAnaGVhZCYmc2NyaXB0LDEmJkh0bWwnKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXB1KGRlY3J5KGJhc2U2NC5zcGxpdCgnIScpWzBdKSk7XFxuXFxuICAgICAgICAgICAgICAgICAgICB9LCB3cmFwdSksXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+6Zi/6YeM5pCcPC9mb250PiZuYnNwO1xcXCIgKyBwYXJzZURvbUZvckh0bWwodSwgJy50aW1lJiZUZXh0JyksXFxuICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZDtcXG4gICAgICAgIH1cXG4gICAgfSwgLyp7XFxuICAgICAgICBuYW1lOiBcXFwi5Zyf54uX5pCcXFxcIixcXG4gICAgICAgIHBhZ2U6IGZhbHNlLFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdCgnaHR0cHM6Ly93d3cudHVnb3Vzb3UuY29tL3NlYXJjaCcsIHtcXG4gICAgICAgICAgICAgICAgYm9keTogJ2tleXdvcmQ9JyArIHMsXFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgbGV0IGFyciA9IHBhcnNlRG9tRm9yQXJyYXkoaHRtbCwgJy5sYXl1aS1jb250YWluZXIsMSYmLmxheXVpLXJvdzpoYXMoYSknKTtcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIGxldCBpdCA9IGFycltpXTtcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBwYXJzZURvbUZvckh0bWwoaXQsICdhJiZocmVmJyk7XFxuICAgICAgICAgICAgICAgIGlmICghdS5pbmNsdWRlcyhcXFwiL3MvXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIC8vbG9nKHUpO1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBhcnNlRG9tRm9ySHRtbChpdCwgJ2EmJlRleHQnKSxcXG4gICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL2RldGFpbD9ydWxlPeS6keebmOaxh+W9sSZ1cmw9JyArIHUgKyAnPz9meXBhZ2UnLFxcbiAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvcHVzaD91cmw9aGlrZXI6Ly9lbXB0eSMjJyArIGVuY29kZVVSSUNvbXBvbmVudCh1KSArICc/Pz9meXBhZ2UnLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB3cmFwdSh1KSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT7lnJ/ni5fmkJw8L2ZvbnQ+Jm5ic3A7XFxcIiArIHBhcnNlRG9tRm9ySHRtbChpdCwgJ3AsLTEmJlRleHQnKSArIFxcXCJcXFxcblxcXCIgKyB1LFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9XFxuICAgIH0sICove1xcbiAgICAgICAgbmFtZTogXFxcIuS6keebmOWIhuS6q+ekvlxcXCIsXFxuICAgICAgICBwYWdlOiBmYWxzZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBldmFsKGdldENyeXB0b0pTKCkpO1xcblxcbiAgICAgICAgICAgIGZ1bmN0aW9uIGRlY3J5KHN0cikge1xcbiAgICAgICAgICAgICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoXFxcIjVGNkIyQUszM0RBU0QxMjNcXFwiKTtcXG4gICAgICAgICAgICAgICAgdmFyIGVuY3J5cHRlZCA9IENyeXB0b0pTLkFFUy5kZWNyeXB0KHN0ciwga2V5LCB7XFxuICAgICAgICAgICAgICAgICAgICBtb2RlOiBDcnlwdG9KUy5tb2RlLkVDQixcXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzN1xcbiAgICAgICAgICAgICAgICB9KS50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBlbmNyeXB0ZWQ7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdCgnaHR0cHM6Ly93d3cueXVucGFuZmVueGlhbmcuY24vYXBpL2Jicy9hcGkvZ2V0ZGF0YT9rZXk9JyArIHMgKyAnJnR5cGU9dmlkZW8nLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vd3d3Lnl1bnBhbmZlbnhpYW5nLmNuL1xcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIGxldCBqc29uID0gZGVjcnkoSlNPTi5wYXJzZShodG1sKS5kYXRhKTtcXG4gICAgICAgICAgICAvL2xvZyhqc29uKTtcXG4gICAgICAgICAgICBsZXQgYXJyID0gSlNPTi5wYXJzZShqc29uKTsgLy9bMF0ucmVzdWx0Lml0ZW1zO1xcbiAgICAgICAgICAgIC8vbG9nKGFycik7XFxuXFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBsZXQgYmV0ID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgbGV0IGl0ID0gYXJyW2ldO1xcbiAgICAgICAgICAgICAgICBsZXQgdXJsID0gaXQucGlkO1xcbiAgICAgICAgICAgICAgICBiZXQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICdodHRwczovL3d3dy55dW5wYW5mZW54aWFuZy5jbi9hcGkvYmJzL2FwaS9nZXRhcnRpY2xlP2lkPScgKyB1cmwsXFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL3d3dy55dW5wYW5mZW54aWFuZy5jbi9cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgLy9sb2codSk7XFxuICAgICAgICAgICAgbGV0IGJldGggPSBiYXRjaEZldGNoKGJldCk7XFxuXFxuICAgICAgICAgICAgLy9sb2coYXJ0aWNsZSk7XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiZXRoLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgICAgIGxldCBqc29uID0gSlNPTi5wYXJzZShiZXRoW2ldKS5kYXRhO1xcbiAgICAgICAgICAgICAgICAvL2xvZyhqc29uKTtcXG4gICAgICAgICAgICAgICAgbGV0IGxpc3QgPSBqc29uLmRvd25sb2FkLnNwbGl0KCdAJyk7XFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGlzdC5sZW5ndGg7IGorKykge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBsaXN0W2pdO1xcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZToganNvbi50aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyB1ICsgJz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9wdXNoP3VybD1oaWtlcjovL2VtcHR5IyMnICsgZW5jb2RlVVJJQ29tcG9uZW50KHUpICsgJz8/P2Z5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB3cmFwdSgnaHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tL3MvJyArIHUpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT7kupHnm5jliIbkuqvnpL48L2ZvbnQ+Jm5ic3A7XFxcIiArIChqc29uLmNyZWF0ZXRpbWUpICsgXFxcIlxcXFxuXFxcIiArICgnaHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tL3MvJyArIHUpLFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9XFxuICAgIH0sIHtcXG4gICAgICAgIG5hbWU6IFxcXCLnm5jmkJxcXFwiLFxcbiAgICAgICAgcGFnZTogdHJ1ZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBwYWdlID0gKHBhZ2UgLSAxKSAqIDEwO1xcbiAgICAgICAgICAgIGxldCB1cmwgPSBcXFwiaHR0cHM6Ly93d3cucGFuc2VhcmNoLm1lL3NlYXJjaD9rZXl3b3JkPVxcXCIgKyBzICsgXFxcIiZvZmZzZXQ9XFxcIiArIHBhZ2UgKyBcXFwiJnBhbj1hbGl5dW5kcml2ZVxcXCI7XFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KHVybCwge30pO1xcblxcbiAgICAgICAgICAgIGxldCBhcnIgPSBwYXJzZURvbUZvckFycmF5KGh0bWwsICcuZ3JpZCYmLnNoYWRvdzpoYXMoYVtocmVmXj1odHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vcy9dKScpO1xcbiAgICAgICAgICAgIC8vbG9nKGFycik7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgICAgICBsZXQgaXQgPSBhcnJbaV07XFxuICAgICAgICAgICAgICAgIGxldCB1ID0gcGFyc2VEb21Gb3JIdG1sKGl0LCAnYVtocmVmXj1odHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vcy9dJiZocmVmJyk7XFxuICAgICAgICAgICAgICAgIC8vbG9nKHUpO1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBhcnNlRG9tRm9ySHRtbChpdCwgJy5icmVhay1hbGwmJlRleHQnKS5zcGxpdCgnaHR0cCcpWzBdLFxcbiAgICAgICAgICAgICAgICAgICAgcGljX3VybDogcGFyc2VEb21Gb3JIdG1sKGl0LCAnaW1nJiZzcmMnKSxcXG4gICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL2RldGFpbD9ydWxlPeS6keebmOaxh+W9sSZ1cmw9JyArIHUgKyAnPz9meXBhZ2UnLFxcbiAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvcHVzaD91cmw9aGlrZXI6Ly9lbXB0eSMjJyArIGVuY29kZVVSSUNvbXBvbmVudCh1KSArICc/Pz9meXBhZ2UnLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB3cmFwdSh1KSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT7nm5jmkJw8L2ZvbnQ+Jm5ic3A7XFxcIiArIChwYXJzZURvbUZvckh0bWwoaXQsICdwJiZUZXh0JykpICsgXFxcIlxcXFxuXFxcIiArICh1KSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBuYW1lOiBcXFwiRE9WWOaQnFxcXCIsXFxuICAgICAgICBwYWdlOiBmYWxzZSxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXG4gICAgICAgICAgICBsZXQgdXJsID0gXFxcImh0dHBzOi8vYXBpLmRvdngudGsvYWxpL3NlYXJjaD93ZD1cXFwiICsgcztcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QodXJsLCB7fSk7XFxuICAgICAgICAgICAgLy9sb2coYmFzZTY0RGVjb2RlKGh0bWwpKTtcXG4gICAgICAgICAgICBsZXQgYXJyID0gSlNPTi5wYXJzZShodG1sKS5saXN0O1xcbiAgICAgICAgICAgIC8vbG9nKGFycik7XFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgICAgICBsZXQgaXQgPSBhcnJbaV07XFxuICAgICAgICAgICAgICAgIGxldCB1ID0gaXQudm9kX2NvbnRlbnQ7XFxuICAgICAgICAgICAgICAgIC8vdSA9IHUubGVuZ3RoID4gMCA/IHVbMF0gOiB1cmw7XFxuICAgICAgICAgICAgICAgIGlmICghdS5pbmNsdWRlcyhcXFwiYWxpeXVuZHJpdmVcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKCFjaGVja2FsaSh1KSkge1xcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi4oiaIFxcXCIgKyBpdC52b2RfbmFtZSxcXG4gICAgICAgICAgICAgICAgICAgIHBpY191cmw6IGl0LnZvZF9waWMsXFxuICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyB1ICsgJz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQodSkgKyAnPz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogd3JhcHUodSksXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+RE9WWOaQnDwvZm9udD4mbmJzcDtcXFwiICsgXFxcIlxcXFxuXFxcIiArICh1KSxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBkO1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBuYW1lOiBcXFwi5b+F5bqUXFxcIixcXG4gICAgICAgIHBhZ2U6IHRydWUsXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxuICAgICAgICAgICAgbGV0IHVybCA9IFxcXCJodHRwczovL2NuLmJpbmcuY29tL3NlYXJjaD9xPVxcXCIgKyBzICsgXFxcIithbGl5dW5kcml2ZSZxcz1kcyZmb3JtPVFCUkVcXFwiO1xcbiAgICAgICAgICAgIGlmIChwYWdlICE9IDEpIHtcXG4gICAgICAgICAgICAgICAgdXJsID0gZ2V0TXlWYXIoXFxcImJpbmdcXFwiLCB1cmwpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QodXJsLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vY24uYmluZy5jb20vXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIC8vXFxcIlgtUmVxdWVzdGVkLVdpdGhcXFwiOiBcXFwiY29tLmV4YW1wbGUuaGlrZXJ2aWV3XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJBY2NlcHRcXFwiOiBcXFwidGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksaW1hZ2UvYXZpZixpbWFnZS93ZWJwLGltYWdlL2FwbmcsKi8qO3E9MC44LGFwcGxpY2F0aW9uL3NpZ25lZC1leGNoYW5nZTt2PWIzO3E9MC45XFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgbGV0IGFyciA9IHBkZmEoaHRtbCwgXFxcImJvZHkmJmFcXFwiKTtcXG4gICAgICAgICAgICAvL2xvZyhhcnIpO1xcbiAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgbGV0IGl0ID0gYXJyW2ldO1xcbiAgICAgICAgICAgICAgICBsZXQgdSA9IHBkKGl0LCBcXFwiYSYmaHJlZlxcXCIsIHVybCk7XFxuICAgICAgICAgICAgICAgIGxldCB0ID0gcGRmaChpdCwgXFxcImEmJlRleHRcXFwiKTtcXG4gICAgICAgICAgICAgICAgaWYgKGl0LmluY2x1ZGVzKFxcXCJOZXh0IHBhZ2VcXFwiKSB8fCBpdC5pbmNsdWRlcyhcXFwi5LiL5LiA6aG1XFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB1MiA9IHBkKGl0LCBcXFwiYSYmaHJlZlxcXCIsIHVybCk7XFxuICAgICAgICAgICAgICAgICAgICAvL2xvZyhcXFwibmV4dCBwYWdlXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAvL2xvZyh1Mik7XFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihcXFwiYmluZ1xcXCIsIHUyKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAodSA9PSBudWxsIHx8IHQgPT0gbnVsbCB8fCAhaXQuaW5jbHVkZXMocykpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmICghaXQuaW5jbHVkZXMoXFxcIue9keebmFxcXCIpICYmICFpdC5pbmNsdWRlcyhcXFwi5LqR55uYXFxcIikgJiZcXG4gICAgICAgICAgICAgICAgICAgICFpdC5pbmNsdWRlcyhcXFwiYWxpeXVuZHJpdmVcXFwiKSAmJiAhaXQuaW5jbHVkZXMoXFxcInl1bnBhblxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAodS5zdGFydHNXaXRoKFxcXCJodHRwczovL2NuLmJpbmcuY29tL1xcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBsZXQgZG9tID0gZ2V0SG9tZSh1KS5yZXBsYWNlKFxcXCJodHRwOi8vXFxcIiwgXFxcIlxcXCIpLnJlcGxhY2UoXFxcImh0dHBzOi8vXFxcIiwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICBsZXQgX2xpbmtzID0gdC5tYXRjaCgvaHR0cHM6XFxcXC9cXFxcLyh3d3dcXFxcLmFsaXl1bmRyaXZlXFxcXC5jb21cXFxcL3N8YWx5d3BcXFxcLm5ldClcXFxcL1xcXFx3Ki9nKSB8fCBbXTtcXG4gICAgICAgICAgICAgICAgLy9sb2coX2xpbmtzKTtcXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBudWxsO1xcbiAgICAgICAgICAgICAgICAvL2xvZyhfbGlua3MpO1xcbiAgICAgICAgICAgICAgICAvL2lmIChfbGlua3MubGVuZ3RoID4gMCkge1xcbiAgICAgICAgICAgICAgICAvL2MgPSAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQoX2xpbmtzWzBdKSArICc/Pz9meXBhZ2UnO1xcbiAgICAgICAgICAgICAgICAvL2M9d3JhcHUoX2xpbmtzWzBdKVxcbiAgICAgICAgICAgICAgICAvL31cXG4gICAgICAgICAgICAgICAgaWYgKF9saW5rcy5sZW5ndGggPiAxICYmIF9saW5rc1sxXS5yZXBsYWNlKF9saW5rc1swXSwgXFxcIlxcXCIpLnJlcGxhY2UoL1thLXpBLVowLTldKy9nLCBcXFwiXFxcIikgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgIGMgPSB3cmFwdShfbGlua3NbMV0pO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKF9saW5rcy5sZW5ndGggPiAwKSB7XFxuICAgICAgICAgICAgICAgICAgICBjID0gd3JhcHUoX2xpbmtzWzBdKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHQsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+5b+F5bqUPC9mb250PiZuYnNwO1xcXCIgKyBkb20sXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGMgIT0gbnVsbCA/IGMgOiAkKHUpLmxhenlSdWxlKCh3cmFwdSwgbW9kZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdChpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9saW5rcyA9IGh0bWwubWF0Y2goL2h0dHBzOlxcXFwvXFxcXC8od3d3XFxcXC5hbGl5dW5kcml2ZVxcXFwuY29tXFxcXC9zfGFseXdwXFxcXC5uZXQpXFxcXC9cXFxcdyovZykgfHwgW107XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2coX2xpbmtzKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2lmIChfbGlua3MubGVuZ3RoID4gMCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vcmV0dXJuICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD0nICsgX2xpbmtzWzBdICsgJz8/ZnlwYWdlJztcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3JldHVybiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQoX2xpbmtzWzBdKSArICc/Pz9meXBhZ2UnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfbGlua3MubGVuZ3RoID4gMSAmJiBfbGlua3NbMV0ucmVwbGFjZShfbGlua3NbMF0sIFxcXCJcXFwiKS5yZXBsYWNlKC9bYS16QS1aMC05XSsvZywgXFxcIlxcXCIpID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwdShfbGlua3NbMV0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoX2xpbmtzLmxlbmd0aCA+IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXB1KF9saW5rc1swXSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJ1bGUgPSBNWV9SVUxFLnRpdGxlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS95c2Z4P3J1bGU9XFxcIiArIHJ1bGUgKyBcXFwiJnI9XFxcIiArIHJ1bGUgKyBcXFwiJm1vZGU9XFxcIiArIG1vZGUgKyBcXFwiIyNcXFwiICsgaW5wdXQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSwgd3JhcHUsIGNvbmZpZy5tb2RlKVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxuICAgICAgICB9XFxuICAgIH1cXG5dO1xcblxcblxcbi8v5bm25Y+R6KeE5YiZ5pWwXFxubGV0IGNjb2YgPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9jY29mJylcXG5ydWxlcy5wdXNoKGNjb2YpXFxuLy/lubblj5Hop4TliJnmlbBcXG5sZXQgc2l6ZSA9IDEwO1xcblxcbiQuZXhwb3J0cyA9IGZ1bmN0aW9uKHBhZ2UsIHJ1bGUpIHtcXG4gICAgaWYgKCFwYWdlICYmICFydWxlKSB7XFxuICAgICAgICByZXR1cm4gcnVsZXMubWFwKGl0ID0+IGl0Lm5hbWUpO1xcbiAgICB9XFxuICAgIGlmIChydWxlICE9IG51bGwpIHtcXG4gICAgICAgIGlmIChwYWdlICE9IG51bGwgJiYgcGFnZSA+IDEpIHtcXG4gICAgICAgICAgICByZXR1cm4gcnVsZXMuZmlsdGVyKGkgPT4gaS5uYW1lID09IHJ1bGUgJiYgaS5wYWdlKTtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBydWxlcy5maWx0ZXIoaSA9PiBpLm5hbWUgPT0gcnVsZSk7XFxuICAgIH1cXG4gICAgbGV0IHN0YXJ0ID0gKHBhZ2UgLSAxKSAqIHNpemU7XFxuICAgIGlmIChydWxlcy5sZW5ndGggPCBzdGFydCArIDEpIHtcXG4gICAgICAgIHJldHVybiBbXTtcXG4gICAgfVxcbiAgICBsZXQgbGVuID0gc2l6ZTtcXG4gICAgaWYgKHJ1bGVzLmxlbmd0aCA8IHBhZ2UgKiBzaXplKSB7XFxuICAgICAgICBsZW4gPSBydWxlcy5sZW5ndGggLSBzdGFydFxcbiAgICB9XFxuICAgIHJldHVybiBydWxlcy5zbGljZShzdGFydCwgc3RhcnQgKyBsZW4pO1xcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuaQnOe0olwiLFwicGF0aFwiOlwic291XCIsXCJydWxlXCI6XCJsZXQgciA9IGdldEl0ZW0oXFxcInJcXFwiLCBcXFwiXFxcIik7XFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICBsZXQgcjEgPSBmZXRjaChcXFwiaGlrZXI6Ly9ob21lQOS6keebmOaxh+W9sVxcXCIpO1xcbiAgICBpZiAoIXIxIHx8IHIxLmxlbmd0aCA8PSA1KSB7XFxuICAgICAgICBsZXQgcnUgPSAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcIua1t+mYlOinhueVjOinhOWImeWIhuS6q++8jOW9k+WJjeWIhuS6q+eahOaYr++8muWwj+eoi+W6j++/pWhvbWVfcnVsZV92Mu+/pWJhc2U2NDovL0DkupHnm5jmsYflvbFAZXlKc1lYTjBYMk5vWVhCMFpYSmZjblZzWlNJNklpSXNJblJwZEd4bElqb2k1THFSNTV1WTVyR0g1YjJ4SWl3aVlYVjBhRzl5SWpvaVRYSkdiSGtpTENKMWNtd2lPaUpvYVd0bGNqb3ZMMlZ0Y0hSNUpDUWtabmx3WVdkbElpd2lkbVZ5YzJsdmJpSTZOaXdpWTI5c1gzUjVjR1VpT2lKMFpYaDBYekVpTENKamJHRnpjMTl1WVcxbElqb2lJaXdpZEhsd1pTSTZJbUZzYkNJc0ltTnNZWE56WDNWeWJDSTZJaUlzSW1GeVpXRmZibUZ0WlNJNklpSXNJbUZ5WldGZmRYSnNJam9pSWl3aWMyOXlkRjl1WVcxbElqb2lJaXdpZVdWaGNsOXVZVzFsSWpvaUlpd2ljMjl5ZEY5MWNtd2lPaUlpTENKNVpXRnlYM1Z5YkNJNklpSXNJbVpwYm1SZmNuVnNaU0k2SW1wek9seHVaWFpoYkNobVpYUmphQ2duYUdsclpYSTZMeTltYVd4bGN5OXlkV3hsY3k5cFkza3ZZV3hwTG1wekp5a3BPMXh1WVd4cExtaHZiV1ZRWVdkbEtDazdJaXdpYzJWaGNtTm9YM1Z5YkNJNkltaHBhMlZ5T2k4dlpXMXdkSGtrSkNRcUtpUWtKR1o1Y0dGblpTUWtKQ0lzSW1keWIzVndJam9pNHBHZzU3MlI1NXVZSWl3aWMyVmhjbU5vUm1sdVpDSTZJbXB6T2x4dVpYWmhiQ2htWlhSamFDZ25hR2xyWlhJNkx5OW1hV3hsY3k5eWRXeGxjeTlwWTNrdllXeHBMbXB6SnlrcE8xeHVZV3hwTG5ObFlYSmphRkJoWjJVb2RISjFaU2s3WEc0aUxDSmtaWFJoYVd4ZlkyOXNYM1I1Y0dVaU9pSnRiM1pwWlY4eElpd2laR1YwWVdsc1gyWnBibVJmY25Wc1pTSTZJbXB6T2x4dVpYWmhiQ2htWlhSamFDZ25hR2xyWlhJNkx5OW1hV3hsY3k5eWRXeGxjeTlwWTNrdllXeHBMbXB6SnlrcE8xeHVZV3hwTG1SbGRHRnBiRkJoWjJVb0tUc2lMQ0p6WkdWMFlXbHNYMk52YkY5MGVYQmxJam9pYlc5MmFXVmZNU0lzSW5Oa1pYUmhhV3hmWm1sdVpGOXlkV3hsSWpvaUlpd2lkV0VpT2lKdGIySnBiR1VpTENKd2NtVlNkV3hsSWpvaWRtRnlJR0ZzYVdweklEMGdabVYwWTJoRFlXTm9aU2duYUhSMGNITTZMeTluYVhSbFpTNWpiMjB2Wm14NU1UTTVOeTlvYVd0bGNpMXBZM2t2Y21GM0wyMWhjM1JsY2k5aGJHa3Vhbk1uS1R0Y2JpOHZkbUZ5SUdGc2FXcHpJRDBnYm5Wc2JEdGNibWxtSUNnaFlXeHBhbk1nZkh3Z0lXRnNhV3B6TG1sdVkyeDFaR1Z6S0NkaGJHa3VKeWtwSUh0Y2JpQWdJQ0JoYkdscWN5QTlJR1psZEdOb1EyRmphR1VvSjJoMGRIQnpPaTh2WTJSdUxtcHpaR1ZzYVhaeUxtNWxkQzluYUM5bWJIa3hNemszTDJocGEyVnlMV2xqZVM5aGJHa3Vhbk1uS1Z4dWZWeHVhV1lnS0NGaGJHbHFjeUI4ZkNBaFlXeHBhbk11YVc1amJIVmtaWE1vSjJGc2FTNG5LU2tnZTF4dUlDQWdJR0ZzYVdweklEMGdabVYwWTJoRFlXTm9aU2duYUhSMGNEb3ZMMnhtYVdONUxtTnZiVG96TURBd01DOXRjbVpzZVM5b2FXdGxjaTFwWTNrdmNtRjNMMjFoYzNSbGNpOWhiR2t1YW5NbktWeHVmVnh1YVdZZ0tHRnNhV3B6S1NCN1hHNGdJQ0FnZDNKcGRHVkdhV3hsS0Z3aWFHbHJaWEk2THk5bWFXeGxjeTl5ZFd4bGN5OXBZM2t2WVd4cExtcHpYQ0lzSUdGc2FXcHpLVHRjYmlBZ0lDQmxkbUZzS0dGc2FXcHpLVHRjYmlBZ0lDQmhiR2t1Y0hKbFVuVnNaU2dwTzF4dWZTSXNJbkJoWjJWeklqb2lXM3RjSW1OdmJGOTBlWEJsWENJNlhDSnRiM1pwWlY4elhDSXNYQ0p1WVcxbFhDSTZYQ0xudlpIbm01am9yNmJtZzRWY0lpeGNJbkJoZEdoY0lqcGNJbVJsZEdGcGJGd2lMRndpY25Wc1pWd2lPbHdpYW5NNlhGeHVaWFpoYkNobVpYUmphQ2duYUdsclpYSTZMeTltYVd4bGN5OXlkV3hsY3k5cFkza3ZZV3hwTG1wekp5a3BPMXhjYm1Gc2FTNXBibWwwUTI5dVptbG5LQ2s3WEZ4dVlXeHBMbUZzYVZKMWJHVW9LVHRjSW4wc2Uxd2lZMjlzWDNSNWNHVmNJanBjSW0xdmRtbGxYekZmYkdWbWRGOXdhV05jSWl4Y0ltNWhiV1ZjSWpwY0l1aTFoT2E2a09lOWtlbWh0ZWl2cHVhRGhWd2lMRndpY0dGMGFGd2lPbHdpYzJsMFpTMWtaWFJoYVd4Y0lpeGNJbkoxYkdWY0lqcGNJbXB6T2x4Y2JtVjJZV3dvWm1WMFkyZ29KMmhwYTJWeU9pOHZabWxzWlhNdmNuVnNaWE12YVdONUwyRnNhUzVxY3ljcEtUdGNYRzVoYkdrdVpHVjBZV2xzVUdGblpTZ3BPMXdpZlN4N1hDSmpiMnhmZEhsd1pWd2lPbHdpYlc5MmFXVmZNMXdpTEZ3aWJtRnRaVndpT2x3aTVMaXE1THE2NTcyUjU1dVk2SyttNW9PRlhDSXNYQ0p3WVhSb1hDSTZYQ0prY21sMlpWd2lMRndpY25Wc1pWd2lPbHdpYW5NNlhGeHVaWFpoYkNobVpYUmphQ2duYUdsclpYSTZMeTltYVd4bGN5OXlkV3hsY3k5cFkza3ZZV3hwTG1wekp5a3BPMXhjYm1Gc2FTNXBibWwwUTI5dVptbG5LQ2s3WEZ4dVlXeHBMbTE1UVd4cFVuVnNaU2dwTzF3aWZWMGlMQ0pwWTI5dUlqb2lhSFIwY0hNNkx5OW5hWFJsWlM1amIyMHZabXg1TVRNNU55OW9hV3RsY2kxcFkza3ZjbUYzTDIxaGMzUmxjaTloYkdsNWRXNHVjRzVuSWl3aWNISnZlSGtpT2lJaWZRPT1cXFwiXFxuICAgICAgICB9KTtcXG4gICAgICAgIGNvbmZpcm0oe1xcbiAgICAgICAgICAgIHRpdGxlOiBNWV9SVUxFLnRpdGxlICsgJ+aPkOekuicsXFxuICAgICAgICAgICAgY29udGVudDogJ+acrOinhOWImeS+nei1luS6keebmOaxh+W9seinhOWIme+8jOeCueWHu+S4i+mdoueahOehruWumuaMiemSruWvvOWFpe+8jOazqOaEj+WvvOWFpeWQjuS4gOWumuimgeWcqOS6keebmOaxh+W9seeZu+W9lemYv+mHjOS6keebmOi0puWPt++8jOWQpuWImeS4jeiDveeUqCcsXFxuICAgICAgICAgICAgY29uZmlybTogcnUsXFxuICAgICAgICAgICAgY2FuY2VsOiBydVxcbiAgICAgICAgfSlcXG4gICAgfVxcbiAgICBhZGRMaXN0ZW5lcihcXFwib25DbG9zZVxcXCIsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgY2xlYXJNeVZhcihcXFwic1xcXCIpO1xcbiAgICB9KSk7XFxuICAgIGxldCB0aXAgPSBcXFwi5LqR55uY5pCc57Si5ZCbIOajgOe0ouWKn+iDveeUseWvueW6lOe9keermeaPkOS+m++8jOacrOinhOWImeS4jeaPkOS+m+S7u+S9leWGheWuuVxcXCI7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogdGlwLFxcbiAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCh0aXApID0+IHtcXG4gICAgICAgICAgICBjb25maXJtKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLkvb/nlKjor7TmmI5cXFwiLFxcbiAgICAgICAgICAgICAgICBjb250ZW50OiB0aXAgKyBcXFwi77yM5pys6KeE5YiZ5Luj56CB5a6M5YWo5byA5rqQ77yM5LuF5L6b5a2m5Lmg5ZKM56CU56m277yb54K55Ye75LiL5pa556Gu5a6a5oyJ6ZKu6Lez6L2s5LqR55uY5rGH5b2x5bCP56iL5bqPXFxcIixcXG4gICAgICAgICAgICAgICAgY29uZmlybTogXFxcIidoaWtlcjovL2hvbWVA5LqR55uY5rGH5b2xJ1xcXCJcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICB9LCB0aXApLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uXzJfcm91bmRcXFwiLFxcbiAgICAgICAgZGVzYzogXFxcIlxcXCIsXFxuICAgICAgICBwaWNfdXJsOiBcXFwiaGlrZXI6Ly9pbWFnZXMvaWNvbjJcXFwiXFxuICAgIH0pO1xcbiAgICBsZXQgZG1vZGUgPSBnZXRJdGVtKFxcXCJkbW9kZVxcXCIsIFxcXCLkupHnm5jmsYflvbFcXFwiKTtcXG4gICAgaW5pdENvbmZpZyh7XFxuICAgICAgICBtb2RlOiBkbW9kZVxcbiAgICB9KTtcXG5cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5qih5byP77yaXFxcIiArIGRtb2RlLFxcbiAgICAgICAgdXJsOiBcXFwic2VsZWN0Oi8vXFxcIiArIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIumAieaLqeaooeW8j1xcXCIsXFxuICAgICAgICAgICAgb3B0aW9uczogW1xcXCLkupHnm5jmsYflvbFcXFwiLCBcXFwi5pys5Zyw6L2s56CBXFxcIiwgXFxcIkpvZeeJiOmYv+mHjOS6keebmFxcXCIsIFxcXCLlrpjmlrlBUFBcXFwiXSxcXG4gICAgICAgICAgICBjb2w6IDEsXFxuICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXCJkbW9kZVxcXCIsIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0ID09IFxcXCLlrpjmlrlBUFBcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5L+u5pS55oiQ5Yqf77yM6K+356Gu5L+d5omL5py65pyJ5a6J6KOF6Zi/6YeM5LqR55uY5a6Y5pa5QVBQXFxcIjtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PSBcXFwiSm9l54mI6Zi/6YeM5LqR55uYXFxcIikge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHIxID0gZmV0Y2goXFxcImhpa2VyOi8vaG9tZUDpmL/ph4zkupHnm5hcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmICghcjEgfHwgcjEubGVuZ3RoIDw9IDUpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcnUgPSAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCLmtbfpmJTop4bnlYzpppbpobXpopHpgZPop4TliJnjgJDpmL/ph4zkupHnm5jjgJHvv6Vob21lX3J1bGVfdXJs77+laHR0cDovL2hpa2VyLm5va2lhLnByZXNzL2hpa2VydWxlL3J1bGVsaXN0Lmpzb24/aWQ9NTY1NlxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IE1ZX1JVTEUudGl0bGUgKyAn5o+Q56S6JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ+acrOinhOWImeS+nei1lumYv+mHjOS6keebmOinhOWIme+8jOeCueWHu+S4i+mdoueahOehruWumuaMiemSruWvvOWFpe+8jOazqOaEj+WvvOWFpeWQjuS4gOWumuimgeeZu+W9leS6keebmOi0puWPt++8jOWQpuWImeS4jeiDveeUqCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm06IHJ1LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWw6IHJ1XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+ivt+WvvOWFpee8uuWkseeahOinhOWImVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5L+u5pS55oiQ5Yqf77yM6K+356Gu5L+d5pyJ55m75b2V6LSm5Y+3XFxcIjtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/kv67mlLnmiJDlip/vvIzms6jmhI/opoHlnKjkupHnm5jmsYflvbHorr7nva7ph4zpnaLnmbvlvZXotKblj7dcXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcImljb25fMl9yb3VuZFxcXCIsXFxuICAgICAgICBkZXNjOiBcXFwiXFxcIixcXG4gICAgICAgIHBpY191cmw6IFxcXCJoaWtlcjovL2ltYWdlcy9pY29uMVxcXCJcXG4gICAgfSk7XFxuXFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+aQnOe0oicsXFxuICAgICAgICBkZXNjOiAn6K+36L6T5YWl5YWz6ZSu6K+NJyxcXG4gICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICAgICAgdXJsOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICBwdXRNeVZhcigncycsIGlucHV0KTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgIH0pLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKCdzJywgJycpXFxuICAgICAgICB9XFxuICAgIH0pO1xcbiAgICBsZXQgcnVsZXMgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9kYXRhXFxcIikoKTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwiXFxcIiA9PSByID8gXFxcIuKAnOKAnOWFqOmDqOKAneKAnVxcXCIgOiBcXFwi5YWo6YOoXFxcIixcXG4gICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgY2xlYXJJdGVtKFxcXCJyXFxcIik7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICB9KSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCIsXFxuICAgICAgICBkZXNjOiBcXFwiXFxcIixcXG4gICAgICAgIHBpY191cmw6IFxcXCJcXFwiXFxuICAgIH0pO1xcbiAgICBmb3IgKGxldCBpdCBvZiBydWxlcykge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogaXQgPT0gciA/IFxcXCLigJzigJxcXFwiICsgaXQgKyBcXFwi4oCd4oCdXFxcIiA6IGl0LFxcbiAgICAgICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgocikgPT4ge1xcbiAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXCJyXFxcIiwgcik7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgICAgICB9LCBpdCksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIixcXG4gICAgICAgICAgICBkZXNjOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBwaWNfdXJsOiBcXFwiXFxcIlxcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiAnbGluZScsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGlkOiAneXBqLWwnXFxuICAgICAgICB9XFxuICAgIH0pO1xcbn1cXG5sZXQgcyA9IGdldE15VmFyKCdzJywgJycpO1xcbmlmIChzICE9IFxcXCJcXFwiKSB7XFxuICAgIGxldCBwID0gTVlfUEFHRTtcXG4gICAgbGV0IGRhdGEgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9kYXRhXFxcIikocCwgciAhPSBcXFwiXFxcIiA/IHIgOiBudWxsKTtcXG5cXG4gICAgbGV0IHBhZ2VpZCA9IFxcXCJ5cGotcGFnZVxcXCIgKyBwO1xcbiAgICBpZiAoZGF0YS5sZW5ndGggPiAwKSB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi5Yqg6L2956ysXFxcIiArIHAgKyBcXFwi6aG15Lit77yM6L+b5bqm77yaMS9cXFwiICsgZGF0YS5sZW5ndGgsXFxuICAgICAgICAgICAgdXJsOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIHBpY191cmw6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiBwYWdlaWRcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICBzZXRSZXN1bHQoZCk7XFxuICAgIGxvZyhkYXRhLmxlbmd0aCk7XFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDApIHtcXG4gICAgICAgIC8v5aSa57q/56iL5Yqg6L29ICAgICAgICBcXG4gICAgICAgIGxldCByZWFsUGFnZSA9IFxcXCJcXFwiID09IHIgPyAxIDogcDtcXG4gICAgICAgIGxldCB0YXNrcyA9IGRhdGEubWFwKGl0ID0+IHtcXG4gICAgICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgICAgICBmdW5jOiBmdW5jdGlvbihydWxlKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnVsZS5maW5kKHMsIHJlYWxQYWdlKTtcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgcGFyYW06IGl0LFxcbiAgICAgICAgICAgICAgICBpZDogXFxcInJ1bGVAXFxcIiArIGl0Lm5hbWVcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG5cXG4gICAgICAgIGJhdGNoRXhlY3V0ZSh0YXNrcywge1xcbiAgICAgICAgICAgIGZ1bmM6IGZ1bmN0aW9uKHBhcmFtLCBpZCwgZXJyb3IsIHJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICAvL2xvZyhcXFwibGlzdGVuZXI6IFxcXCIgKyAocmVzdWx0IHx8IFtdKS5sZW5ndGgpXFxuICAgICAgICAgICAgICAgIHBhcmFtLmkgPSBwYXJhbS5pICsgMTtcXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpdCBvZiByZXN1bHQpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0uaiA9IHBhcmFtLmogKyAxO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRJdGVtQmVmb3JlKHBhZ2VpZCwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0LnRpdGxlLmluY2x1ZGVzKFxcXCLigJzigJzigJ3igJ1cXFwiKSA/IGl0LnRpdGxlIDogXFxcIuKAnOKAnOKAneKAnVxcXCIgKyBpdC50aXRsZS5yZXBsYWNlKG5ldyBSZWdFeHAoXFxcIjxlbT58PC9lbT5cXFwiLCBcXFwiZ1xcXCIpLCBcXFwiXFxcIikucmVwbGFjZShuZXcgUmVnRXhwKHMsIFxcXCJnXFxcIiksIFxcXCI8c3Ryb25nPjxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6ICMxRTkwRkZcXFxcXFxcIj5cXFwiICsgcyArIFxcXCI8L3NwYW4+PC9zdHJvbmc+XFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBpdC5kZXNjLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBpdC51cmwsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBpdC5waWNfdXJsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IGl0LnBpY191cmwgPyAnbW92aWVfMV92ZXJ0aWNhbF9waWMnIDogXFxcInRleHRfMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcXFwiX19hcHBcXFwiICsgTVlfUEFHRSArIFxcXCJAXFxcIiArIHBhcmFtLmosXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdFRpdGxlOiBmYWxzZVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxuXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtLmkgPj0gcGFyYW0uYWxsKSB7XFxuICAgICAgICAgICAgICAgICAgICBkZWxldGVJdGVtKHBhZ2VpZClcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5Yqg6L2956ysXFxcIiArIE1ZX1BBR0UgKyBcXFwi6aG15Lit77yM6L+b5bqm77yaXFxcIiArIChwYXJhbS5pICsgMSkgKyBcXFwiL1xcXCIgKyBwYXJhbS5hbGwsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBpY191cmw6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBwYWdlaWRcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBwYXJhbToge1xcbiAgICAgICAgICAgICAgICBhbGw6IGRhdGEubGVuZ3RoLFxcbiAgICAgICAgICAgICAgICBpOiAwLFxcbiAgICAgICAgICAgICAgICBqOiAtMVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgIH1cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmkJzntKLpobXpnaJcIixcInBhdGhcIjpcInNvdXBcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxuaWYgKE1ZX1BBUkFNUy5rZXkpIHtcXG4gICAgcHV0TXlWYXIoXFxcInNcXFwiLCBNWV9QQVJBTVMua2V5KTtcXG59XFxuZXZhbChKU09OLnBhcnNlKGZldGNoKFxcXCJoaWtlcjovL3BhZ2Uvc291XFxcIikpLnJ1bGUpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiQ0NPRlwiLFwicGF0aFwiOlwiY2NvZlwiLFwicnVsZVwiOlwidmFyIHdyYXB1ID0gKHUpID0+IHtcXG4gICAgaWYgKGNvbmZpZy5tb2RlID09IFxcXCLmnKzlnLDovaznoIFcXFwiKSB7XFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9wdXNoP3VybD1oaWtlcjovL2VtcHR5IyMnICsgZW5jb2RlVVJJQ29tcG9uZW50KHUpICsgJz8/P2Z5cGFnZSdcXG4gICAgfVxcbiAgICBpZiAoY29uZmlnLm1vZGUgPT0gXFxcIkpvZeeJiOmYv+mHjOS6keebmFxcXCIpIHtcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3NoYXJlP3BhZ2U9ZnlwYWdlJnJ1bGU96Zi/6YeM5LqR55uYJnNoYXJlX3VybD0nICsgdTtcXG4gICAgfVxcbiAgICBpZiAoY29uZmlnLm1vZGUgPT0gXFxcIuS6keebmOaxh+W9sVxcXCIpIHtcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL2RldGFpbD9ydWxlPeS6keebmOaxh+W9sSZ1cmw9JyArIHUgKyAnPz9meXBhZ2UnO1xcbiAgICB9XFxuICAgIGlmICgvYWxpeXVuZHJpdmUvLnRlc3QodSkpIHtcXG4gICAgICAgIGNvbnN0IFtsaW5rLCBfc2hhcmVfcHdkXSA9IHUuc3BsaXQoJz9zaGFyZV9wd2Q9Jyk7XFxuICAgICAgICBjb25zdCBbX2xpbmssIF9mb2xkZXJJRF0gPSBsaW5rLnNwbGl0KCcvZm9sZGVyLycpO1xcbiAgICAgICAgbGV0IHNoYXJlX3B3ZCA9IChfc2hhcmVfcHdkIHx8ICcnKS5zcGxpdCgnI25hbWU9JylbMF0gfHwgJyc7XFxuICAgICAgICBsZXQgc2hhcmVJZCA9IF9saW5rLnNwbGl0KCdjb20vcy8nKVsxXTtcXG4gICAgICAgIHJldHVybiAnc21hcnRkcml2ZTovL3NoYXJlL2Jyb3dzZT9zaGFyZUlkPScgKyBzaGFyZUlkICsgJyZzaGFyZVB3ZD0nICsgc2hhcmVfcHdkO1xcbiAgICB9XFxuICAgIHJldHVybiBcXFwid2ViOi8vXFxcIiArIHU7XFxufTtcXG4kLmV4cG9ydHMgPSB7XFxuICAgIG5hbWU6ICdDQ09GJyxcXG4gICAgcGFnZTogdHJ1ZSxcXG4gICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcbiAgICAgICAgbGV0IGQgPSBbXVxcbiAgICAgICAgY29uc3Qge1xcbiAgICAgICAgICAgIGJ5dGVzVG9TaXplLFxcbiAgICAgICAgICAgIGNvbG9yXFxuICAgICAgICB9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvdG9vbHMnKTtcXG4gICAgICAgIGxldCBodG1sID0gZmV0Y2goJ2h0dHBzOi8vcGFuLmNjb2YuY2MvYXBpL3NlYXJjaCcsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgIFxcXCJjb250ZW50LXR5cGVcXFwiOiAnYXBwbGljYXRpb24vanNvbicsXFxuICAgICAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vcGFuLmNjb2YuY2Mvc2VhcmNoP2tleXdvcmQ9JyArIHNcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIGJvZHk6IHtcXG4gICAgICAgICAgICAgICAgXFxcInBhZ2VTaXplXFxcIjogMjAsXFxuICAgICAgICAgICAgICAgIFxcXCJwYWdlTnVtXFxcIjogcGFnZSxcXG4gICAgICAgICAgICAgICAgXFxcImtleXdvcmRcXFwiOiBzLFxcbiAgICAgICAgICAgICAgICBcXFwiZnJvbU1vYmlsZVxcXCI6IHRydWVcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICB9KVxcbiAgICAgICAgbGV0IGxpc3QgPSBKU09OLnBhcnNlKGh0bWwpXFxuICAgICAgICAgICAgLmRhdGEucm93c1xcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgbGV0IGl0ID0gbGlzdFtpXVxcbiAgICAgICAgICAgIGxldCB0aXRsZSA9IGl0LmZpbGVOYW1lXFxuICAgICAgICAgICAgbGV0IG11cmwgPSBpdC51cmxcXG4gICAgICAgICAgICBsZXQgdHlwZSA9IGl0LnR5cGUucmVwbGFjZSgvZm9sZGVyLywgJ+aWh+S7tuWkuScpLnJlcGxhY2UoL2ZpbGUvLCAn5paH5Lu2JylcXG4gICAgICAgICAgICBpZiAodGl0bGUuaW5jbHVkZXMocykpIHtcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6ICfigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT5DQ09GPC9mb250PiZuYnNwOycgKyAn5paH5Lu257G75Z6L77yaJyArIHR5cGUgKyAn77yM5paH5Lu25aSn5bCP77yaJyArIGJ5dGVzVG9TaXplKGl0LnNpemUpLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB3cmFwdShtdXJsKVxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBkXFxuICAgIH1cXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLlt6XlhbdcIixcInBhdGhcIjpcInRvb2xzXCIsXCJydWxlXCI6XCJmdW5jdGlvbiBieXRlc1RvU2l6ZShzaXplKSB7XFxuICAgIGlmIChzaXplIDwgMC4xICogMTAyNCkge1xcbiAgICAgICAgLy/lsI/kuo4wLjFLQu+8jOWImei9rOWMluaIkEJcXG4gICAgICAgIHNpemUgPSBzaXplLnRvRml4ZWQoMikgKyBcXFwiQlxcXCI7XFxuICAgIH0gZWxzZSBpZiAoc2l6ZSA8IDAuMSAqIDEwMjQgKiAxMDI0KSB7XFxuICAgICAgICAvLyDlsI/kuo4wLjFNQu+8jOWImei9rOWMluaIkEtCXFxuICAgICAgICBzaXplID0gKHNpemUgLyAxMDI0KS50b0ZpeGVkKDIpICsgXFxcIktCXFxcIjtcXG4gICAgfSBlbHNlIGlmIChzaXplIDwgMC4xICogMTAyNCAqIDEwMjQgKiAxMDI0KSB7XFxuICAgICAgICAvLyDlsI/kuo4wLjFHQu+8jOWImei9rOWMluaIkE1CXFxuICAgICAgICBzaXplID0gKHNpemUgLyAoMTAyNCAqIDEwMjQpKS50b0ZpeGVkKDIpICsgXFxcIk1CXFxcIjtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIC8vIOWFtuS7lui9rOWMluaIkEdCXFxuICAgICAgICBzaXplID0gKHNpemUgLyAoMTAyNCAqIDEwMjQgKiAxMDI0KSkudG9GaXhlZCgyKSArIFxcXCJHQlxcXCI7XFxuICAgIH1cXG4gICAgLy8g6L2s5oiQ5a2X56ym5LiyXFxuICAgIGxldCBzaXplU3RyID0gc2l6ZSArIFxcXCJcXFwiLFxcbiAgICAgICAgLy8g6I635Y+W5bCP5pWw54K55aSE55qE57Si5byVXFxuICAgICAgICBpbmRleCA9IHNpemVTdHIuaW5kZXhPZihcXFwiLlxcXCIpLFxcbiAgICAgICAgLy8g6I635Y+W5bCP5pWw54K55ZCO5Lik5L2N55qE5YC8XFxuICAgICAgICBkb3UgPSBzaXplU3RyLnN1YnN0cihpbmRleCArIDEsIDIpO1xcbiAgICAvLyDliKTmlq3lkI7kuKTkvY3mmK/lkKbkuLowMO+8jOWmguaenOaYr+WImeWIoOmZpDAwXFxuICAgIGlmIChkb3UgPT09IFxcXCIwMFxcXCIpIHJldHVybiBzaXplU3RyLnN1YnN0cmluZygwLCBpbmRleCkgKyBzaXplU3RyLnN1YnN0cihpbmRleCArIDMsIDIpO1xcbiAgICByZXR1cm4gc2l6ZTtcXG59XFxuJC5leHBvcnRzLmJ5dGVzVG9TaXplID0gYnl0ZXNUb1NpemU7XFxuJC5leHBvcnRzLmNvbG9yID0gZnVuY3Rpb24odGV4dCwgY29sb3IpIHtcXG4gICAgdGV4dCArPSBcXFwiXFxcIjtcXG4gICAgaWYgKHRleHQuaW5kZXhPZihcXFwi4oCc4oCc4oCd4oCdXFxcIikgPT09IDApIHtcXG4gICAgICAgIHRleHQucmVwbGFjZShcXFwi4oCc4oCc4oCd4oCdXFxcIiwgXFxcIlxcXCIpO1xcbiAgICB9XFxuICAgIHJldHVybiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9J1xcXCIgKyBjb2xvciArIFxcXCInPlxcXCIgKyB0ZXh0ICsgXFxcIjwvZm9udD5cXFwiO1xcbn1cXG5cXG4kLmV4cG9ydHMuc2xlZXAgPSBmdW5jdGlvbih0aW1lb3V0KSB7XFxuICAgIGphdmEubGFuZy5UaHJlYWQuc2xlZXAodGltZW91dCk7XFxufVxcblxcbmZ1bmN0aW9uIGh0bWxUYWcodGFnLCB0ZXh0KSB7XFxuICAgIHRleHQgKz0gXFxcIlxcXCI7XFxuICAgIGlmICh0ZXh0LmluZGV4T2YoXFxcIuKAnOKAnOKAneKAnVxcXCIpID09PSAwKSB7XFxuICAgICAgICB0ZXh0LnJlcGxhY2UoXFxcIuKAnOKAnOKAneKAnVxcXCIsIFxcXCJcXFwiKTtcXG4gICAgfVxcbiAgICByZXR1cm4gXFxcIuKAnOKAnOKAneKAnVxcXCIgKyBcXFwiPFxcXCIgKyB0YWcgKyBcXFwiPlxcXCIgKyB0ZXh0ICsgXFxcIjwvXFxcIiArIHRhZyArIFxcXCI+XFxcIjtcXG5cXG59XFxuJC5leHBvcnRzLmh0bWxUYWcgPSBodG1sVGFnO1xcbiQuZXhwb3J0cy5zbWFsbCA9IGZ1bmN0aW9uKHRleHQpIHtcXG4gICAgcmV0dXJuIGh0bWxUYWcoXFxcInNtYWxsXFxcIiwgdGV4dCk7XFxufVxcblxcbmZ1bmN0aW9uIGdldFRpbWUoZmlsZSxpc1N0YW5kYXJkKSB7XFxuICAgIGlzU3RhbmRhcmQgPSBpc1N0YW5kYXJkfHxmYWxzZTtcXG4gICAgbGV0IHRUaW1lID0gZmlsZS51cGRhdGVkX2F0IHx8IGZpbGUudGltZV9zdHIgfHwgXFxcIlxcXCI7XFxuICAgIHRUaW1lID0gdFRpbWUuc3BsaXQoXFxcIlRcXFwiKTtcXG4gICAgbGV0IGRhdGUgPSB0VGltZVswXTtcXG4gICAgaWYoaXNTdGFuZGFyZCl7XFxuICAgICAgICBkYXRlID0gZGF0ZS5yZXBsYWNlKC8tL2csXFxcIi9cXFwiKTtcXG4gICAgfVxcbiAgICB0VGltZSA9IHRUaW1lWzFdLnNwbGl0KC9afFxcXFwuLyk7XFxuICAgIGRhdGUgKz0gXFxcIiBcXFwiICsgdFRpbWVbMF07XFxuICAgIHJldHVybiBkYXRlO1xcbn1cXG5mdW5jdGlvbiBnZXRUaW1lSW50KHRpbWVTdHIpe1xcbiAgICByZXR1cm4gKG5ldyBEYXRlKHRpbWVTdHIpKS5nZXRUaW1lKClcXG59XFxuJC5leHBvcnRzLmdldFRpbWUgPSBnZXRUaW1lO1xcblxcbmxldCBjaG5OdW1DaGFyID0ge1xcbiAgICDpm7Y6IDAsXFxuICAgIOS4gDogMSxcXG4gICAg5LqMOiAyLFxcbiAgICDkuIk6IDMsXFxuICAgIOWbmzogNCxcXG4gICAg5LqUOiA1LFxcbiAgICDlha06IDYsXFxuICAgIOS4gzogNyxcXG4gICAg5YWrOiA4LFxcbiAgICDkuZ06IDlcXG59O1xcblxcbmxldCBjaG5OYW1lVmFsdWUgPSB7XFxuICAgIOWNgToge1xcbiAgICAgICAgdmFsdWU6IDEwLFxcbiAgICAgICAgc2VjVW5pdDogZmFsc2VcXG4gICAgfSxcXG4gICAg55m+OiB7XFxuICAgICAgICB2YWx1ZTogMTAwLFxcbiAgICAgICAgc2VjVW5pdDogZmFsc2VcXG4gICAgfSxcXG4gICAg5Y2DOiB7XFxuICAgICAgICB2YWx1ZTogMTAwMCxcXG4gICAgICAgIHNlY1VuaXQ6IGZhbHNlXFxuICAgIH0sXFxuICAgIOS4hzoge1xcbiAgICAgICAgdmFsdWU6IDEwMDAwLFxcbiAgICAgICAgc2VjVW5pdDogdHJ1ZVxcbiAgICB9LFxcbiAgICDkur86IHtcXG4gICAgICAgIHZhbHVlOiAxMDAwMDAwMDAsXFxuICAgICAgICBzZWNVbml0OiB0cnVlXFxuICAgIH1cXG59XFxuXFxuZnVuY3Rpb24gQ2hpbmVzZVRvTnVtYmVyKGNoblN0cikge1xcbiAgICBsZXQgcnRuID0gMDtcXG4gICAgbGV0IHNlY3Rpb24gPSAwO1xcbiAgICBsZXQgbnVtYmVyID0gMDtcXG4gICAgbGV0IHNlY1VuaXQgPSBmYWxzZTtcXG4gICAgbGV0IHN0ciA9IGNoblN0ci5zcGxpdCgnJyk7XFxuXFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICBsZXQgbnVtID0gY2huTnVtQ2hhcltzdHJbaV1dO1xcbiAgICAgICAgaWYgKHR5cGVvZiBudW0gIT09ICd1bmRlZmluZWQnKSB7XFxuICAgICAgICAgICAgbnVtYmVyID0gbnVtO1xcbiAgICAgICAgICAgIGlmIChpID09PSBzdHIubGVuZ3RoIC0gMSkge1xcbiAgICAgICAgICAgICAgICBzZWN0aW9uICs9IG51bWJlcjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGxldCB1bml0ID0gY2huTmFtZVZhbHVlW3N0cltpXV0udmFsdWU7XFxuICAgICAgICAgICAgc2VjVW5pdCA9IGNobk5hbWVWYWx1ZVtzdHJbaV1dLnNlY1VuaXQ7XFxuICAgICAgICAgICAgaWYgKHNlY1VuaXQpIHtcXG4gICAgICAgICAgICAgICAgc2VjdGlvbiA9IChzZWN0aW9uICsgbnVtYmVyKSAqIHVuaXQ7XFxuICAgICAgICAgICAgICAgIHJ0biArPSBzZWN0aW9uO1xcbiAgICAgICAgICAgICAgICBzZWN0aW9uID0gMDtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBzZWN0aW9uICs9IChudW1iZXIgKiB1bml0KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgbnVtYmVyID0gMDtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gcnRuICsgc2VjdGlvbjtcXG59XFxuXFxuZnVuY3Rpb24gbmFtZUNvbXBhcmUoYSwgYikge1xcbiAgICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbClcXG4gICAgICAgIHJldHVybiBhID09IG51bGwgPyBiID09IG51bGwgPyAwIDogLTEgOiAxO1xcblxcbiAgICBhID0gYS5yZXBsYWNlKC8oW+mbtuS4gOS6jOS4ieWbm+S6lOWFreS4g+WFq+S5neWNgeeZvuWNg+S4h+S6v10pL2csIGZ1bmN0aW9uKG1hdGNoLCBwMSwgcDIsIHAzLCBvZmZzZXQsIHN0cmluZykge1xcbiAgICAgICAgLy8gcDEgaXMgbm9uZGlnaXRzLCBwMiBkaWdpdHMsIGFuZCBwMyBub24tYWxwaGFudW1lcmljc1xcbiAgICAgICAgcmV0dXJuIENoaW5lc2VUb051bWJlcihwMSk7XFxuICAgIH0pXFxuICAgIGIgPSBiLnJlcGxhY2UoLyhb6Zu25LiA5LqM5LiJ5Zub5LqU5YWt5LiD5YWr5Lmd5Y2B55m+5Y2D5LiH5Lq/XSkvZywgZnVuY3Rpb24obWF0Y2gsIHAxLCBwMiwgcDMsIG9mZnNldCwgc3RyaW5nKSB7XFxuICAgICAgICAvLyBwMSBpcyBub25kaWdpdHMsIHAyIGRpZ2l0cywgYW5kIHAzIG5vbi1hbHBoYW51bWVyaWNzXFxuICAgICAgICByZXR1cm4gQ2hpbmVzZVRvTnVtYmVyKHAxKTtcXG4gICAgfSlcXG5cXG4gICAgbGV0IE5VTUJFUlMgPSBqYXZhLnV0aWwucmVnZXguUGF0dGVybi5jb21waWxlKFxcXCIoPzw9XFxcXFxcXFxEKSg/PVxcXFxcXFxcZCl8KD88PVxcXFxcXFxcZCkoPz1cXFxcXFxcXEQpXFxcIilcXG4gICAgbGV0IHNwbGl0MSA9IE5VTUJFUlMuc3BsaXQobmV3IGphdmEubGFuZy5TdHJpbmcoYSkpO1xcbiAgICBsZXQgc3BsaXQyID0gTlVNQkVSUy5zcGxpdChuZXcgamF2YS5sYW5nLlN0cmluZyhiKSk7XFxuXFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTWF0aC5taW4oc3BsaXQxLmxlbmd0aCwgc3BsaXQyLmxlbmd0aCk7IGkrKykge1xcbiAgICAgICAgbGV0IGMxID0gc3BsaXQxW2ldLmNoYXJDb2RlQXQoMCk7XFxuICAgICAgICBsZXQgYzIgPSBzcGxpdDJbaV0uY2hhckNvZGVBdCgwKTtcXG4gICAgICAgIGxldCBjbXAgPSAwO1xcbiAgICAgICAgbGV0IHplcm9DaGFyQ29kZSA9ICcwJy5jaGFyQ29kZUF0KDApO1xcbiAgICAgICAgbGV0IG5pbmVDaGFyQ29kZSA9ICc5Jy5jaGFyQ29kZUF0KDApO1xcblxcbiAgICAgICAgaWYgKGMxID49IHplcm9DaGFyQ29kZSAmJiBjMSA8PSBuaW5lQ2hhckNvZGUgJiYgYzIgPj0gemVyb0NoYXJDb2RlICYmIGMyIDw9IG5pbmVDaGFyQ29kZSkge1xcbiAgICAgICAgICAgIGNtcCA9IG5ldyBqYXZhLm1hdGguQmlnSW50ZWdlcihzcGxpdDFbaV0pLmNvbXBhcmVUbyhuZXcgamF2YS5tYXRoLkJpZ0ludGVnZXIoc3BsaXQyW2ldKSk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBpZiAoY21wID09PSAwKSB7XFxuICAgICAgICAgICAgbGV0IHJlZ2V4ID0gL1thLXpBLVowLTldL1xcbiAgICAgICAgICAgIGxldCBzMSA9IFN0cmluZyhzcGxpdDFbaV0pXFxuICAgICAgICAgICAgbGV0IHMyID0gU3RyaW5nKHNwbGl0MltpXSlcXG4gICAgICAgICAgICBpZiAocmVnZXgudGVzdChzMSkgfHwgcmVnZXgudGVzdChzMikpIHtcXG4gICAgICAgICAgICAgICAgY21wID0gbmV3IGphdmEubGFuZy5TdHJpbmcoc3BsaXQxW2ldKS5jb21wYXJlVG8obmV3IGphdmEubGFuZy5TdHJpbmcoc3BsaXQyW2ldKSk7XFxuICAgICAgICAgICAgICAgIC8vIGNtcCA9IHMxLmxvY2FsZUNvbXBhcmUoczIsICdlbicpXFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgY21wID0gczEubG9jYWxlQ29tcGFyZShzMiwgJ3poJylcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuXFxuICAgICAgICBpZiAoY21wICE9PSAwKSB7XFxuICAgICAgICAgICAgcmV0dXJuIGNtcDtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBsZXQgbGVuZ3RoQ21wID0gc3BsaXQxLmxlbmd0aCAtIHNwbGl0Mi5sZW5ndGg7XFxuICAgIC8vIGlmIChsZW5ndGhDbXAgIT09IDApIGxlbmd0aENtcCA9IGxlbmd0aENtcCA+IDAgPyAtMSA6IDE7XFxuICAgIHJldHVybiBsZW5ndGhDbXA7XFxufVxcblxcbiQuZXhwb3J0cy5zb3J0cyA9IGZ1bmN0aW9uKGxpc3QsIHNvcnQpIHtcXG4gICAgaWYgKHNvcnQgPT09IFxcXCLnsbvlnotcXFwiKSB7XFxuICAgICAgICAvLyBsb2coXFxcIuexu+Wei+aOkuW6j1xcXCIpO1xcbiAgICAgICAgbGlzdC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcXG4gICAgICAgICAgICByZXR1cm4gYS50eXBlIC0gYi50eXBlXFxuICAgICAgICB9KTtcXG4gICAgfSBlbHNlIGlmIChzb3J0ID09PSBcXFwi5ZCN56ewXFxcIikge1xcbiAgICAgICAgLy8gbG9nKFxcXCLlkI3np7DmjpLluo9cXFwiKTtcXG4gICAgICAgIC8vIGxpc3Quc29ydChmdW5jdGlvbihhLCBiKSB7XFxuICAgICAgICAvLyAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSwgXFxcInpoXFxcIilcXG4gICAgICAgIC8vIH0pO1xcbiAgICAgICAgbGlzdC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcXG4gICAgICAgICAgICByZXR1cm4gbmFtZUNvbXBhcmUoYS5uYW1lfHxhLnRpdGxlLCBiLm5hbWV8fGIudGl0bGUpO1xcbiAgICAgICAgfSk7XFxuICAgIH0gZWxzZSBpZiAoc29ydCA9PT0gXFxcIuWkp+Wwj1xcXCIpIHtcXG4gICAgICAgIC8vIGxvZyhcXFwi5aSn5bCP5o6S5bqPXFxcIik7XFxuICAgICAgICBsaXN0LnNvcnQoZnVuY3Rpb24oYSwgYikge1xcbiAgICAgICAgICAgIHJldHVybiAoYS5zaXplIHx8IE51bWJlcihhLnNpemVfc3RyKSB8fCAwKSAtIChiLnNpemUgfHwgTnVtYmVyKGIuc2l6ZV9zdHIpIHx8IDApO1xcbiAgICAgICAgfSk7XFxuICAgIH1lbHNlIGlmIChzb3J0ID09PSBcXFwi5pe26Ze0XFxcIikge1xcbiAgICAgICAgLy8gbG9nKFxcXCLml7bpl7TmjpLluo9cXFwiKTtcXG4gICAgICAgIGxpc3Quc29ydChmdW5jdGlvbihhLCBiKSB7XFxuICAgICAgICAgICAgcmV0dXJuIGdldFRpbWVJbnQoZ2V0VGltZShhLHRydWUpKSAtIGdldFRpbWVJbnQoZ2V0VGltZShiLHRydWUpKVxcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIGxpc3RcXG59XFxuXFxuZnVuY3Rpb24gc2ltaWxhcihzLCB0LCBmKSB7Ly/liKTmlq3kuKTkuKrlrZfnrKbkuLLkuYvpl7TnmoTnm7jkvLzluqZcXG4gICAgaWYgKCFzIHx8ICF0KSB7XFxuICAgICAgICByZXR1cm4gMFxcbiAgICB9XFxuICAgIGlmKHMgPT09IHQpe1xcbiAgICAgICAgcmV0dXJuIDEwMDtcXG4gICAgfVxcbiAgICB2YXIgbCA9IHMubGVuZ3RoID4gdC5sZW5ndGggPyBzLmxlbmd0aCA6IHQubGVuZ3RoXFxuICAgIHZhciBuID0gcy5sZW5ndGhcXG4gICAgdmFyIG0gPSB0Lmxlbmd0aFxcbiAgICB2YXIgZCA9IFtdXFxuICAgIGYgPSBmIHx8IDJcXG4gICAgdmFyIG1pbiA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7XFxuICAgICAgICByZXR1cm4gYSA8IGIgPyAoYSA8IGMgPyBhIDogYykgOiAoYiA8IGMgPyBiIDogYylcXG4gICAgfVxcbiAgICB2YXIgaSwgaiwgc2ksIHRqLCBjb3N0XFxuICAgIGlmIChuID09PSAwKSByZXR1cm4gbVxcbiAgICBpZiAobSA9PT0gMCkgcmV0dXJuIG5cXG4gICAgZm9yIChpID0gMDsgaSA8PSBuOyBpKyspIHtcXG4gICAgICAgIGRbaV0gPSBbXVxcbiAgICAgICAgZFtpXVswXSA9IGlcXG4gICAgfVxcbiAgICBmb3IgKGogPSAwOyBqIDw9IG07IGorKykge1xcbiAgICAgICAgZFswXVtqXSA9IGpcXG4gICAgfVxcbiAgICBmb3IgKGkgPSAxOyBpIDw9IG47IGkrKykge1xcbiAgICAgICAgc2kgPSBzLmNoYXJBdChpIC0gMSlcXG4gICAgICAgIGZvciAoaiA9IDE7IGogPD0gbTsgaisrKSB7XFxuICAgICAgICAgICAgdGogPSB0LmNoYXJBdChqIC0gMSlcXG4gICAgICAgICAgICBpZiAoc2kgPT09IHRqKSB7XFxuICAgICAgICAgICAgICAgIGNvc3QgPSAwXFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgY29zdCA9IDFcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgZFtpXVtqXSA9IG1pbihkW2kgLSAxXVtqXSArIDEsIGRbaV1baiAtIDFdICsgMSwgZFtpIC0gMV1baiAtIDFdICsgY29zdClcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBsZXQgcmVzID0gKDEgLSBkW25dW21dIC8gbCkgKjEwMFxcbiAgICByZXR1cm4gcmVzLnRvRml4ZWQoZilcXG59XFxuXFxuJC5leHBvcnRzLnNpbWlsYXIgPSBzaW1pbGFyO1xcbiQuZXhwb3J0cy5yZW1vdmVFeHQgPSBmdW5jdGlvbiAoZmlsZSl7XFxuICAgIHJldHVybiBmaWxlLnNwbGl0KCcuJykuc2xpY2UoMCwtMSkuam9pbignLicpXFxufTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcInVcIixcInBhdGhcIjpcInVcIixcInJ1bGVcIjpcIiQuZXhwb3J0cyA9IGZ1bmN0aW9uKHJ1bGUsIG9yaWdpbiwgbW9kZSkge1xcbiAgICByZXR1cm4gJC50b1N0cmluZygocnVsZSwgb3JpZ2luLCBtb2RlKSA9PiB7XFxuICAgICAgICBsZXQgaG9zdCA9IG9yaWdpbi5yZXBsYWNlKG5ldyBSZWdFeHAoXFxcImh0dHA6Ly98aHR0cHM6Ly9cXFwiKSwgXFxcIlxcXCIpLnNwbGl0KFxcXCIvXFxcIilbMF07XFxuICAgICAgICBsZXQgaG9zdHMgPSBob3N0LnNwbGl0KFxcXCIuXFxcIik7XFxuICAgICAgICBpZiAoaG9zdHMubGVuZ3RoID4gMikge1xcbiAgICAgICAgICAgIGhvc3QgPSBob3N0c1tob3N0cy5sZW5ndGggLSAyXSArIFxcXCIuXFxcIiArIGhvc3RzW2hvc3RzLmxlbmd0aCAtIDFdO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKGlucHV0LnN0YXJ0c1dpdGgoXFxcIm1hZ25ldFxcXCIpKSB7XFxuICAgICAgICAgICAgY29uZmlybSh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5rip6aao5o+Q56S6XFxcIixcXG4gICAgICAgICAgICAgICAgY29udGVudDogXFxcIuajgOa1i+WIsOaWsOeahOejgemTvuWcsOWdgO+8jOeCueWHu+ehruWumuaMiemSruWNs+WPr+aSreaUvu+8jOeCueWHu+WPlua2iOaMiemSruWPr+S7peWkjeWItumTvuaOpVxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbmZpcm06ICQudG9TdHJpbmcoKG1hZykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hZztcXG4gICAgICAgICAgICAgICAgfSwgaW5wdXQpLFxcbiAgICAgICAgICAgICAgICBjYW5jZWw6ICQudG9TdHJpbmcoKG1hZykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJjb3B5Oi8vXFxcIiArIG1hZ1xcbiAgICAgICAgICAgICAgICB9LCBpbnB1dClcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dC5pbmNsdWRlcyhcXFwiYWxpeXVuZHJpdmUuY29tXFxcIikgJiYgbW9kZSAhPSBcXFwi5a6Y5pa5QVBQXFxcIikge1xcbiAgICAgICAgICAgIGxvZyhpbnB1dCk7XFxuICAgICAgICAgICAgaWYgKGlucHV0LmluY2x1ZGVzKCdjaGVja3VybD91cmw9JykgJiYgaW5wdXQuaW5jbHVkZXMoJyZ1cmxyZWZlcicpKSB7XFxuICAgICAgICAgICAgICAgIGlucHV0ID0gZGVjb2RlVVJJQ29tcG9uZW50KGlucHV0LnNwbGl0KCcmdXJscmVmZXInKVswXS5zcGxpdCgnY2hlY2t1cmw/dXJsPScpWzFdKTtcXG4gICAgICAgICAgICAgICAgLy9sb2coJ+i0tOWQpycraW5wdXQpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gJC50b1N0cmluZygodXJsLCBydWxlKSA9PiB7XFxuICAgICAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAub3BlbihKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIumYv+mHjOS6keebmFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD1cXFwiICsgdXJsICsgJz8/ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgfSkpXFxuICAgICAgICAgICAgfSwgaW5wdXQsIHJ1bGUpXFxuICAgICAgICB9IGVsc2UgaWYgKC9cXFxcLihtcDN8ZmxhY3xtNGEpJC8udGVzdChpbnB1dCkpIHtcXG4gICAgICAgICAgICBsb2coaW5wdXQpO1xcbiAgICAgICAgICAgIHJldHVybiAkLnRvU3RyaW5nKCh1cmwsIHJ1bGUpID0+IHtcXG4gICAgICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5wbGF5VmlkZW8odXJsKTtcXG4gICAgICAgICAgICB9LCBpbnB1dCwgcnVsZSlcXG4gICAgICAgIH0gZWxzZSBpZiAoIWlucHV0LmluY2x1ZGVzKGhvc3QpICYmIGlucHV0LnN0YXJ0c1dpdGgoXFxcImh0dHBcXFwiKSkge1xcbiAgICAgICAgICAgIGxvZyhpbnB1dCk7XFxuICAgICAgICAgICAgcmV0dXJuICQudG9TdHJpbmcoKHVybCwgcnVsZSwgbW9kZSkgPT4ge1xcbiAgICAgICAgICAgICAgICBmeV9icmlkZ2VfYXBwLm9wZW4oSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLor6bmg4VcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3lzZng/cnVsZT1cXFwiICsgcnVsZSArIFxcXCImcj1cXFwiICsgcnVsZSArIFxcXCImbW9kZT1cXFwiICsgbW9kZSArIFxcXCIjI1xcXCIgKyB1cmwsXFxuICAgICAgICAgICAgICAgIH0pKVxcbiAgICAgICAgICAgIH0sIGlucHV0LCBydWxlLCBtb2RlKTtcXG4gICAgICAgIH0gZWxzZSBpZiAoIWlucHV0LnN0YXJ0c1dpdGgoXFxcImh0dHBcXFwiKSkge1xcbiAgICAgICAgICAgIGxvZyhpbnB1dCk7XFxuICAgICAgICAgICAgLy/og73llKTotbdBUFDnmoTnmb3lkI3ljZVcXG4gICAgICAgICAgICBsZXQgd2hpdGUgPSBbXFxuICAgICAgICAgICAgICAgIFxcXCJxa2xpbmtcXFwiLFxcbiAgICAgICAgICAgICAgICBcXFwiYmRuZXRkaXNrXFxcIixcXG4gICAgICAgICAgICAgICAgXFxcInh1bmxlaWFwcFxcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJzbWFydGRyaXZlXFxcIlxcbiAgICAgICAgICAgIF07XFxuICAgICAgICAgICAgbGV0IGluV2hpdGUgPSB3aGl0ZS5maWx0ZXIoaXQgPT4gaW5wdXQuc3RhcnRzV2l0aChpdCkpLmxlbmd0aCA+IDA7XFxuICAgICAgICAgICAgaWYgKCFpbldoaXRlKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuICQudG9TdHJpbmcoKHVybCwgcnVsZSkgPT4ge1xcbiAgICAgICAgICAgICAgICBmeV9icmlkZ2VfYXBwLm9wZW5UaGlyZEFwcCAmJiBmeV9icmlkZ2VfYXBwLm9wZW5UaGlyZEFwcCh1cmwpO1xcbiAgICAgICAgICAgIH0sIGlucHV0LCBydWxlKVxcbiAgICAgICAgfSBlbHNlIHtcXG5cXG4gICAgICAgIH1cXG4gICAgfSwgcnVsZSwgb3JpZ2luLCBtb2RlKTtcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJ5c2Z4XCIsXCJwYXRoXCI6XCJ5c2Z4XCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbmxldCBydWxlID0gZ2V0UGFyYW0oXFxcInJcXFwiKS5zcGxpdChcXFwiIyNcXFwiKVswXTtcXG5sZXQgbW9kZSA9IChnZXRQYXJhbShcXFwibW9kZVxcXCIpIHx8IFxcXCJcXFwiKS5zcGxpdChcXFwiIyNcXFwiKVswXTtcXG5sZXQgdXJsID0gTVlfVVJMLnNwbGl0KFxcXCIjI1xcXCIpWzFdO1xcbmxldCBpdGUgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS91XFxcIikocnVsZSwgZ2V0SG9tZSh1cmwpLCBtb2RlKTtcXG5sZXQganMgPSAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgdHJ5IHtcXG4gICAgICAgIGlmIChkb2N1bWVudC50aXRsZSAmJiBkb2N1bWVudC50aXRsZS5sZW5ndGgpIHtcXG4gICAgICAgICAgICBsZXQgciA9ICQkJCgpLmxhenlSdWxlKCh0KSA9PiB7XFxuICAgICAgICAgICAgICAgIHNldFBhZ2VUaXRsZSh0KTtcXG4gICAgICAgICAgICB9LCBkb2N1bWVudC50aXRsZSk7XFxuICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5wYXJzZUxhenlSdWxlKHIpO1xcbiAgICAgICAgfVxcbiAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICBmeV9icmlkZ2VfYXBwLmxvZyhlLnRvU3RyaW5nKCkpO1xcbiAgICB9XFxufSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCJcXFwiLFxcbiAgICB1cmw6IHVybCxcXG4gICAgY29sX3R5cGU6IFxcXCJ4NV93ZWJ2aWV3X3NpbmdsZVxcXCIsXFxuICAgIGRlc2M6IFxcXCIxMDAlJiZmbG9hdFxcXCIsXFxuICAgIHBpY191cmw6IFxcXCJcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgdXJsSW50ZXJjZXB0b3I6IGl0ZSxcXG4gICAgICAgIGpzOiBqcyxcXG4gICAgICAgIGNhbkJhY2s6IHRydWUsXFxuICAgICAgICBqc0xvYWRpbmdJbmplY3Q6IHRydWUsXFxuICAgICAgICBmbG9hdFZpZGVvOiB0cnVlXFxuICAgIH1cXG59KTtcXG5kLnB1c2goe1xcbiAgICBjb2xfdHlwZTogXFxcImxpbmVcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgaWQ6IHVybFxcbiAgICB9XFxufSk7XFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6Zi/6YeMbGF6eVwiLFwicGF0aFwiOlwiYWxpbGF6eVwiLFwicnVsZVwiOlwiZXZhbFByaXZhdGVKUyhcXFwick8rMzd1RytiMkpibDkxSlhlMUFMYWNBY1JLMXhpa0tOU2Z4M09KTnY5TlJIRjVlRldSZzV0ZC8yVndtUWNGVm1FRWM0UkpGU3RsSnFFbkZWbkFnV2ZuaE1tNENIZDk1a0FHdHp4YlRlQTh4bFdYZWhjUm0rbC9ONytoWUd2TzZaNUJkRHNZVmpINnVwbW9RQmNWYjB5WFdxMVBHNnBLNUJHWGtjSGZmdTF1V214ZEdqa3VpcFV0eEJMU1ArdFpMcnh6NGl0OWhEZmJyV3lTQ2lOZjhOeWo4ODB6LzQ3UjJBaW9wa2MxeG05YUtXRDRRdWx0aWx1dk1mVEh6L1l6SzJSVlcyZElJZ3JjNTEySjRwU281cktaSXFJdUVKcGw2eVBvTGliMVg5d0R6TG1Dd2RjdHZqTUNjVFk4bjVBQnVSR2xrVkpBQ2dNSnFZbFNWalhWZ1pwbXdQSVlRbkk0dlRJUUZMU1B5anpsb1M1M0lzazJBdXdjOXEyQklSN01GcjRENlJGU3lHMnBYbEVwWjkxVm1HbkNLeE9OSmczTDBuV0dzQnZTRXNnVGN4aDQ5dVFDZjk0RE5NakhUSysvTmxGMnlqMHN6U3dESWo5OS9wSmQwWlJVRjU1eVl0dnZ5UWVlTmd4YUlXdFkxcHF1RGhNdGdUUEd0ZW0xVUtsTTVuSzRJK0ZxaHZiQWN6WGxZaGhxM0QrQTlSQnNKaDV5RWtQUnV4UldYQTJOV1gyaGloZWVNV0NvZS85WjZVbTlzTFNNcU5lMGg3WVJIbUtnSkUwWnNBYTdIRmZYV3NDY2tJOEYxNVdZVHY3ZG50dzRSQmZMcU1CZm0ydnlIem10NzdtU0RqbkxPclZKenhEKy9VenYzQmF4YjlCVlZGTy9rVnFUTVNMa0ZncUtLTXdIaW1TcXBHaURZRFlMNXJFQm0zbWRJVjV6UVZOV1VSZUY5MERQS3JhSGhYWHVXUFRRb1MyZEFBYlhzRWxua2xpcUllbDNPb0x2ems3STg1b2xZYWRzVGl3TXpVd0JhRC8rN00raHVMK1A0Q3k4RTBGK0tvTmtpZ081bVFncUxNT2MrcE10WkRLRzl0L0RPWFJDOXVFL0hTTUdSTVZQUmJ0SDZXTkErbEhNM2hORFNQSENBbFYrOXRjSythQ2pQQjRDcmRub29jQnpuWml2NjZzZ2FSbFk0MGRrRFpNZWVsZWhVbG5qUVpBTXlZd1N0UldpWDY1bEEreUxLUkVkY04xaTlHV3UxajJrYS81ZXZSVHUrSlpjVW95eDlmRFRVbG1NT0FDSjZRdkgzT3BiWTNVQlBzY005cS9ZM2pqWFJGZm1yZy9ZcFA3VkFWYnpqTnZjT3pwUXkrdzc4ODdEa0p5dnYyd25PSjd6TnZEZ0h1dmRjRXl4ekFLZ0lDZ2d1Ly91L3VMY094TEMzTFVGRUFOQUhlUEI1ZjZyMmdGamthcTRzeFlpOHQrVC8zVnBzKzdQN3czQ1VyRXh5c2swSVFRZXJLZDlJMWNWcVVUdnIrMDBRZjRFbUhWYXZlYlY3c3FFMWZPQ09aTWVnRGQzUkFSRDhTSkwxa3ZMMURRUWVnSlpDODVCNEpWcU9XY3VlaXBOYTBoTng3UWhLbm5zWjlDMFQxVEl4NFIvL2xLNFVncjN1NWV1bnVwam1RK2RYRGNEOXBwYWZNK0lzdXZDRFo0VWRMWWtJRktMSms1Z2Q5RmVqVmlOTGRkYWdnTm03S3d6SkJoa1dHYWJzeTFydU1tcm5MNFlFa2ZlQ3N1RzlwR1Q1ZkxaNnpYaHNET1kwZHdrKzZqOUI3QjViYkpZV3NQeGI4MjVnbkVwV1U5YTg4VmhXak1qdlR0dEJFWDlWMEZVNys2aWRiU2JYcjErMVdTaXBkd1I0SXpoVTlJMzVoWnpvOGppRk1idFQyeHBEWk5BenczdngxeXZMNnk0UFBMZTN4TmxXcUEzbUdJQlpJV3puY1ZTTVFkL2todXNleU1zWmFRZ013Ryt0MkR3S2tRQVNMbnlsS3Z0R2E3dG9yV2RBc0ZPdGcxQTJZL21kZk9CM2RKcElqTHdqZmVIcjlyTG5FckQ4K09oTVByMG9rOXl1SkZNUzJRcXBCYy9qRDgxM2dqNDNmQlRLdTRSVkh0eGkvL3ZwZGV2QXlHRDlYbERFWVZRNy9CKzFTRWNsM3hqeE5PZXRLaVdSRE4vNy9SWlkyVUlKaWc1TXZkS1E3YzN2dG9oMmtXMDlDQXlBK2hvZGNXTm5qNFd4dmliV3JuVjNjcGdFMGI2UEthd0NYc1ZLWWFVYmpsUmEzbHhVcWl0NE8yYkRYQXltVWU0NiswQlVQdEF2RlorS2p5VEY3MmZGRWc4YUJ2THluWXhpY0dyN0VWMVhwSlYrckdHZHNpNTNuS01WZDRXRHNnUnFNNmN3K0Q5a0JJaE9CempzeXdLenh3ckloajRYYjBwL0lvQ2tZWEFMNlNNRCtPb0FzWXgzaGFxNmpvRWF6SmxoRE8rbWRHOC9GZUNaMTBJckhUbmdzeHhGei91blRlRTkyNlZVeXl2TFNOWldjL3NJbi92V1NBSFU5cC9VRjBXa1hVL2Q3ajRlenp1TXhGRzUycHIwNGRCMmVMMTBFVTBrSFBLeU51Vk9YTmxxVXRjVnZmMkVCdW1oMXB1Q0RhbVlESWNsbUt3STNXUEJmaUZZMWVOU3ZGU2NEbm1xV2dqeUIwNUJVbWJuUStTWW4wc01UVUhUd0xtVUdmU053NUNnUHRBMkt3NW01bkgwSy9TVVZzcGpNRDdOWWMrRFdqVUwyYjJzcThRNTJVb3p3TnNPQUl0N2lNY2ZZVXNpOXpXRGs5K2tyU0ZXWHRyS2lUMVFYS0U3V0wzSUo3VGlHOHBScy9MNGVrNUtoU0lUWTJmdkFhK2txblZvS3FtM1JwaFhid045SE5ZSU5NYmdoeVVkbG9LQnpqbWpEb3lXeW1CcVM4S2ViMWxTSHA4SmNjT09zNVp0bWlUa2VDVDVPbDBxMmRUYm9QNGhjWWhtVld4RkZ6emQ2T202c1RxWU9CNFZHRjFFdEFHN0dEUmNSdVhXRVlQU2szcUl1ZHp1RnZzRytnZk56MndnVWtDYWNsUU1pZnJvcVllanpHckJhTHpIc1JqdHpwUXkrdzc4ODdEa0p5dnYyd25PSnhhY2E1M1hiNERwcDdwMHcrazZCc1hrU1ZkampLeVRqZFNXdm5DZDlCd1dFVWRqb3JBSTdBWkVNZHc3TXJRY0l0L3dNeW1YSFNaU2hGN09la3g5bW5JYWE2RFFvWVZQYnlPSDNXSzdaQ00zL2VJd21hVjR3c1pQcjVGbXZMUkJTcTh5VlJpVFNXeWVMUEZQZG5iRjhOcmNEYWRZNnZka2YxTnc5ejljY25zN2Z0WVdlNGdBSWhVVkI2anBzUElMOGUzcDg5a0JkZWRWZ3RqbnBPYUlyK2tNTkhDcWxoazdHQUhPMjcya0Q4dVFIT0o2WWgxN0FyNEdDMlJkWGpCTTl4dUxzUEtYbXQ2WEJMLzl1MjkyY0l3NVZ3cFpTU0UwU09hUWZ2M1BNN1BrWnVuR2RIakdSNXdvaDVIeXpKUmFRT21zTjBpNG52SEUzd01lN2dTUmxKT1didGhhT1RFTSt2YUxUZ3A3WkZMVjN6Sm5pYmdWUEdFb2p4WjU3V1Y2ZDVldVV4ODNjZTF1ek5kLzNqa2pUZWdlNlZ2cVNJYXJZZzhHS3pobmMvMDBhTXdKMHdPRWlzTFhPUlh3UkExUy9IRVAwU3I2dkdUTG1NUFo1TzlSc0t5NE92S1AwQ2dCR2xxdGdlQnU0NDlsMlNVY0ZkajAyY2JmMVgwdFAxQlBMZTZ4ZjJIZmJ6MnF0RmhxdzZXVFhMRkpIL2lraXJWOGdVaFpyY0tWSGFiUUlMeTRSNmpZR3RFdkloNldCN0ZzWGxteko1Y2RxeGU3VDk1K0RxQjVkQjBZUlZYZkxFM2U3SjV1eTN4RWZaZDhIemcxN0gwTnVuV2tPREdxYjgrR2dpeWhjNHVyeWIyYlllVU1RekRNeDl6eUVuU3c4b0Z4RUVUeE94a0Y1MHBvWWVHazlPdTJBVXI2cmlaNldBYmlXMnlHSy8rOTl1OXo4NyszWU92Y3dRZ0RQcXJqeCt4K04zQVJhVWVtV2hBbWlyMUZkZ21mRHc2K01qVUlPaGZ0ZkdsUkZ5TjZpNlZPb1ZvTmNkUVJndGU3WkduMjVIT2UwYmF1M2Mva3Q2V1FFOXNsOEZhYkMweDJnOGMraFh0Nk5HR2pKakV2RUEvRXlKeDhuQ3R3SDNQRE1UbFpPeUUxN2FLcFY2cWpVWXZTcWJ4UzhtY3FIRFdvMjBuellCMzBDTm1NdHEybHBCa1pGNTJYRWJkeTl4U0FpaXlXRHVoRWE4R0hORDhxN29QRGpQYS8xelYrRWlOekFqZ3hrQ3dGajRpMWxKY0htcmVZTFlERk02R1JYUkI0Umh5ZHBtL1FUMlZiRXNXYjloK2w3NkwyMmd0WTdkMkNsSUwzQ2hsNXdzc3J5MGpXVm5QN0NKLzcxa2dCMVBZUDdtT01kd1Zsd1AvQTJ6b1pZS3l3RzJtSFk2U0xlcHIxUDVWK0QwTUZ1RkxWbWROYndKNndiN3RaaGtMRVk3L0xLOHRJMWxaeit3aWYrOVpJQWRUMlo1OEZEUnhWN3VaWlZXNjlUVjhBQUl2N0pJNklZZmNRTW5KNmkvcGprWWlHZG9XYy9hV2dBUGV1Y2tRa1UraFVrOFFPTFh4TWc4M2Q1TmpBMnRWaHU5SnFiOGErM2wxY3lnNnVXMDRtWm9FQmJJcGJjTnd5TUhqajMwbUZ0N0p3V05YalVyeFVuQTU1cWxvSThnZE9RY3NyeTBqV1ZuUDdDSi83MWtnQjFQWnZscXhKZVRWWko1QnZCUHc4S1JRcHdGaXRIU2grRUtKR0NNb1V1RkkyMUJwQlpacnVNbmNFbUtuV21XK09OQjMxVjdoWWlVYVc1Sm5VcVk5aHo4Q1FvejN4VG9WWEd4MnlDMzBxYWVGWEtvZFcxNEtIUlJGOUlwdStnR0NvTEFrcHBQY0VZWUJLQUNzQVA3QTNZZ2tVUnF0VWdGaGswMlRRc2xkTzJUb25JTU5mOVBLVDdER29vL0pUcnJsanhvZW1KeEtMSFJkSzZKaWxmUDhvU1FXa29MSnY3dHJBWmZ5WmV2Z2QrODVFL211R3o4YmMwS3gxOU1odTZQUG45U3FrRHYxdGd0SWwwWmthbTRkYjMxSHNQNyt6VVUxUVcwLzB5dlNLT0xEL3dvdTUzeFpZeVpaOUlYdis4ZTdxY2ZWdklMeG5QWDdYWVp2eWFaV2QxcElXOTd5M21XdXRBSENRODhyOGlZSU8xOFgzYWxPY1VQN2Q2aENwU1pCUkh1cE91N04veGxOakV5eEJNR2FmQkszYlRlQm9rdWNDbThrTWtrRXd0YlJtOG8zNXdud1F4N1J6RnpDazJXQldCNW1EemQzNjZyZ01Xa21KVlRxYVpwcm9jZmc3Tk9haXdMU1ZTOXIzaHJDcFBORlhXdjhld2FuUEl6ZTM3QVM5MzRpOG50SnRET1o0ZjB1bXdUTXVRRXhKOWhyRVZzMWtjdWJSd042MDU1bWdMd0pBSVY0QThmdXNuR0ZiS0pjSzdtdmVlZzBmZGpGbXoxMW1FT1hoeEhZK08raEtnWmRPWEFrYzhkU3VoVUs5eU02VU12c08vUE93NUNjcjc5c0p6aWNlNlZ2cVNJYXJZZzhHS3pobmMvMDBhTXdKMHdPRWlzTFhPUlh3UkExUy9DMHAxYTRuUkk0N3lXeiswMVhVTEY4dmt6LzNqQkNBMVpONVVYUzE1eHE1eEpQMDVJMXpFMnZPM3o2UHVXSmpiZ1IydGZMcCtZMjJnTVlKeWVuOVo3NHRFaGFPYUFxbEtCOHlYRFlKR1VjSTA5UnB5OWV2Z29vSGl4c3FzTFNac1lsVXA5bCtqaXZkRVh4S281QXY2eUZTcXAyczNVU05aMW1HWjRseVh1akx5eXZMU05aV2Mvc0luL3ZXU0FIVTlzb0xRUVpYbXFaRHpPQjhQYllYZEVUTEs4dEkxbFp6K3dpZis5WklBZFQyQ00yNHNBblZCeU9Ia2ZKNFo3SEpsb0J2TmtBNHlSeXN5Ry92VU5ZdE11L0xLOHRJMWxaeit3aWYrOVpJQWRUMk03dlpFd1Ric3NERWFQZS8rdjJLcVc5WW9NbnVwYTQzRi94bHZGMlFTRVE2WGFhTkpwQ1JiNVB5anZKRjdvMnNlTHg5N2V2SEt4WmdpcE5SUkd4SzY5N1FTOGxWNnRnSDFhVjg0L3hRSDJLZjhNdnNKaVBZMEE0MWl5V0syTWlKeXl2TFNOWldjL3NJbi92V1NBSFU5amJ3c0poTkJMakpGZS9UTlVZbFRWWExLOHRJMWxaeit3aWYrOVpJQWRUMnM5RS9FaVJRQTQ0VjArTm9EZEg2a2xuSFhpUlR6amNkUVpmYjIyakNQYW5zVWh3N2lYY3dJVEpTSlBaNm5FYm5hOStHMVhHN1Z0T0xyY3hiTUxpS0pzNlVNdnNPL1BPdzVDY3I3OXNKemlkYXVzQXoyckVHeVJRUG5xSXJXdkl5RXhLZURIQ2VpZUxITUNSQkI4UDFvZkMvV3NCdXczWStnYlc2OTdQSkMzTjI4YUVxc3NpUEpyWFhJR25Zc3kzTW9DUUppdG5ocmtqMTdpVDd5eHlkV0Q5clMyc1owSVpod05XL2VqcmNYelFWSHFUa1EvVlFObmdwb1hyemVwLzBiZXhKY0JVQTh3RzFJTU9ndDZJcFBjMlRDUTNMUnVGcWx2cEJld2M4cU5yTHUzQWg2NFZ5QmRwdkJYRkxTZi82SUhJaDFqcmEzQXBZejk3TWcvREhYUG1EM044UDJOd1hZOHFvekJ6TklwaGowQ05TQVIwUEZCZDBsNExTdVhIVEkyZi9rUjFZNllXNVdEOXBsV21EMW9SUHNrTUhhL1QrKzZDUW5uOWxVNkRrVmNKSU0xZXFON2tJK083T1FnK01GVGlGS0NJSS9LZXVkODJuUTIyVmd4ZVp1RVc3UStHNElaY3puTnJNZW15enhSWjZ4OGFjZXN5d21TcEZzZzE1aklIZENVaVZrS1p0SWtxUEJFZ25pT0dOZ3Zyc3VnS3A0bXIzY00vcjIyYXZIRjdzbE43ZS9qQWsxRkZVbzdOYkUwcW8xTjVOSmNUZFcwb2ovUnB3bkN4NWd6a0VEL3hLZkw0RUNkU3E1MHpYa1dpU1V2TE4wSitJSk51MWVSQ0dBdXdCYnRJZjJzVEFvcm5aLzVIemJhaWV0QmtKcnJFWlloQ1IvaGxtYS8weVI4ZTgxckJzQndRMDRTNVMvNjRBZVRGZEVpR0FlN0d2RytvTjd3dEFISnhNSkdqTUp0VGJUM0RqWW9QOXFrT3VLVkVYNUV0NmZvbHNmYmovVVU1cFV6RlpycUNuSktzb1ZuU0JKU2RUcWxNOUJ1WkQyWVp2OHFkV2Jtc2h2R3RRUmVjZS84L1p2OEhzalVGejRaRUdUWll6Z3NLQURUTXZPWGNRV3A5OUI1ZURiMUl2TVhyVWVHaVhQdXRQMXZGdCtvZEZMemMzdXM4VWRNYXd0cUt4dXVxQmxYcEVpenByY3FXeVIrQnEwbHlpRWxYckRNUytMdzBQYWZkTXVKZ0hGU1M5clBmNkR5a2lLNHRYaFlRK1Mzb2JjVlpCdW90U1ZQcFFadjRya2NzcnkwaldWblA3Q0ovNzFrZ0IxUGFackc2QWxZYzhzN25TbGhocjg5and5eXZMU05aV2Mvc0luL3ZXU0FIVTlvM2dSUHRHS25xaXhsclJmRXNQUDdOdldWSWVud2x4dzQ2emxtMmFKT1I0TW5ieUExVUVYSkFsNy80aytIdGFFY3NyeTBqV1ZuUDdDSi83MWtnQjFQWkZUV0tvSlRnOWRNQm1nNEc5djVvZHhxOWY2Rkk3QzRIMUZMYmIyRWdWaVFzOExPdTAwcENmRkI4c0JwTFVreVFlSVJnSUJMVVkwenBMWkY1eGVRV1VjUEk3VytLSDc4M1hvV3I0bXdqQTJYSFhiL00zK1RYNlpBU3M5MXhuUFYvTEs4dEkxbFp6K3dpZis5WklBZFQyYWVURlpJTjdkUjNMVFpQVG1tcGVmc1hPWllGa0JtMlNlMVlMUVRiUUp6N09sREw3RHZ6enNPUW5LKy9iQ2M0blZhWjhBQWdKeTZkWE9oTkxsWHJNNUV2OVpkYkViT1I4UW1MWlFWU0ljR05Sb1ZxSy9iSHBXYkh6RkNsekl6YWJHa04yejlEQUxxYm5RN3VGZ3YzczlqeFhOQjcxMUxHSnZyaklsaHV2MytsVmVxZyt4dkxLUHNyVWpUdktyNldCQ3p3czY3VFNrSjhVSHl3R2t0U1RKQWsvR1RYM3hKRlRBN0VxTDAxbHI3LzhIYTlBZ2d3VWtKRFBuMFV1djhTY2VMeDk3ZXZIS3haZ2lwTlJSR3hLNnpFYU9FUGNJQ0w1OFdMM1hGTkFNTCtsMTRiVjdVWjFqVjgva3JGRWpmeWg1SDBubEpoUTNaamhTcm9vYXQvdnJVU0lsMFQxS0dIR0FXeStrK3FBUHdDL1BTMXhsa3hBY0pLRWJicDg2MFZvNnF6TTExRWs1YWFjdUVwcjdISE1mcmlPTklQOW55Vzh2R1BmRnZ1UHVuNm5Ka1Uvekd6UCt1VG1uUzBIKy9UeFdNMnVnbi9udmljVUpvR1ZFcThVZ1lVM0lqUVRMby84ajZZWHpFdkdIZlZTWnVkRDVKaWZTd3hOUWRQQXVaUVo4bnNkcERxSE5xWE1IUVFzUzYzdHZTRFZRRFJteGpBOVdFSmFYS1A2OXdOMjhhRXFzc2lQSnJYWElHbllzeTNNK3c2ZVFhUG82SmZoUUdLbytKczFLNkZVSUFlbE5BQTR1cTd5d1lJQXVISTMwTjg4dGp5SXR2OUlvL1RJNXFHay9QYWdVWm90NWlsM2VBMUF6QXNxc2NzcnkwaldWblA3Q0ovNzFrZ0IxUGJ5bHBGdmxkWWVCN1NpeGgxVTM5bnY5UG0zeGNmSWUyQVlOTkFETE9uSWlrWnRPa2NGbndiTEFCQXN6ZlROc0haRC8vSEdZdzBBVk15d3VIS095bWR0WGg5bkdUQ0t4a0I4dWZwUUxXOFZqZmV3SXI1K0lQM3F6cWZ5bHRYY1cycWhSTDNiYzlrQjF2ZGtMdkFiUXVDbHRWZ0tETFNhVmEzc2kyR1FJbDFWU3BUbUVYdEJQUkZrMi96cVJUc2diUU1ML2xxRFhySjV4ZkV5cWdzYlJaTndFbEFBMWV5aXVjd0RLdUgyMXRLM3ZpeDVnemtFRC94S2ZMNEVDZFNxNTB6TEs4dEkxbFp6K3dpZis5WklBZFQya3JxNzZXWDR3NnNpUXRza0pSbHRrcy90NTc1bGlmSFBOQmh2WTI4eXVKS2x3cDlUb3JpV3FCYnF1RmQvODNZVHBmK3VMU3BLVlJYd0VVQUZMQmRIRm9LSm1DYWRBN09STW1pU3lLemRPa1VuTGp3S2VCak1pUExwUGxLQnRNVXBhZVhOTmxkUlFvbGk4bnRtcFgzeTVvWXdxcGpwUFdhMURPSFBsd1l5VDR3aktiNklFSlRuMjRXZmxyY2E2dVRzWXJsZCtrc3kvL3VhbHlQNkJsYXNXOC9YZCtzeFlKYVZCbU1TdkE4aXprN0xSOGh4eXhxQm5yNlRmeEx5N0w3NkxVU0R4RjVJY0dUNk9HREZFWEE0U09VQzVTbCtQcTZhZ2hyZUxlNXVGazk5VXlaUmQ4eE96MExSeHIzdmQyZnAxamJuRlRzam9kalYwZkhlWU9kdDUzYm1RanFjcExWRFZZV1IyVzdJbHp5bTdPRldZOUlXb1NRQ2R4bGRYVlJkRDdGT1ljMjRudkQvZjVNU0d2ODFOaHloajJvVnVtU21vQnoyd2pRZGoxOFJuWjhiSUozR3ozMHVHKzV3Z21UeW5qTUJrVHpBcG4zdWZ4VkxUNDZKN202U0tEZys0c2ltdlkxcHpsSmJ5UnhSMnpYbTR1aHZKOG5WK3F6K1FTOFd4VlJFNHFYeUl2R3llem5TaGhxV05KcGJ0azdFTmtRTHhIemVWSlhJRXA3YmZSM0k4K1laU0swL3p0bUkzVFl1Q09JM0dLSHNwQlNNMjRrOEV2U21FdFlWclZnOUFPWnZwWlh5b0MwblpMVTVsRXpST0lFY0QxejdNbFI3RkFzbEtUNWNidWRIb3l0bTZZNlliQk04TVk5bDdnWGprTEo1RUVEWHdLTE9YQkdVMS9NZHFFM1hzdkl5VmVoR3FHYmkydnJTeW9BNndCVFhUaytXaVN4RkVod3h5cGJFMkFteUZBTVBwWHMrWHFoQVlBWk8zYng2b21SbjN2aStrSVBIbGdNaVo5dlBnbHlrNWdFdHpaazFveDVjREwwQWd6eXpuaFNPVkVZeVYyd1ViRVc3alU0Rld5NWpBc094NFE5TkpXdy9WTWpCdVorb0xmei83dFlKOFpBT1VCZ29UMThTdC9kM2JVVDBRN09Wd3psR0VNdjQvb0ZNQzFnaXJTSWZoQW1NQStGS0RVR0dsU0dYVk4vcVVaaUpzVmdIR2ZRMzFoMWdMeEw0a084OXphbjhadEZJMjA5ZUM3bjNUNXF6TnJjRDBjNnpmbHhrcitSbDBBWW01dExGY0FJaW52TE9pS2hIbDJuaGFKcFRQUWJtUTltR2IvS25WbTVySWJ4cjU0WCt3aHBONks4VlpOZSt3TWVrdEdUNVBjSlR1NEVVdGpVZitlKzV5TVJxb1cvMHNtUkhMSUZobnJQN3dRaUtRV0dJQ0J3c05Nd05EcTF0ZjFjS0RPUTFjS1JhL2VhSER0bDkrbnU5QVJhbjE1S1ppb3U3Ui9iVHZXK2pQZGt0YzdScFljYzI2SFpHVnlyeEZhenYrekdSbmlhU2ZqN2JBT2VUdHlCVnp5NXJaOFViNFVlNEN1WHNNK1pqSmVJZHN3QjU5Y05NZG4zTWhGMy90MEwwTVNPQWJJRUxDeTBOd25pOHE3UThHWkxMSzh0STFsWnord2lmKzlaSUFkVDJWdi91aXM4bGJaVXR5TXdoVzVEajNjcEVna3hGWUJ4c2F5VFdQMi9XWjVMVWF0KzhxNDVnVXZGeFpURG4wTVl0Tm80aGlMZjhFdUZLRzlhME4wdHN6eTJrUTNzc3gxM0VydngwQ2pVdVpXcWU1VnptZ0FhbGxaMFNSNzV0eVFLUjFRU3JPTkdRaytZMVdRWlVKVkFFcnRHQTBZNXB4QVhGcDZ2bUswZW94TkF2K2tuOE1iVWh0WkNXNEZ6cWZYaUl5eXZMU05aV2Mvc0luL3ZXU0FIVTlycVZPa3FNbDhkTmlpTXJUN2hjc0ZiRXhZcE5jWlpDdUdIUmpOVkl2THZJTW9DWDVVS0JsdEZPbjZTZFozN3B3dnlBeEJSUGl6NEpWNld2MW9qUXBMOVVKQWZnTHBzSnNYWlJQK0U3SUtNbjNLanlzQjV1L2NqN3pMbTJYRzR3bmNXbHlwQW9RMTREWVZzWVpvUVdjYWxnbHFEbE5XZ3NZaGxGakZkN3BQSG9Cb3RxdWE1cUthMHBGUWZYS2lMeERLazdHZkwyeEszSUhqS3gzeWRVbDZ0dWJRcmV0ci9NbEVIcHNyVERzZklQeXl2TFNOWldjL3NJbi92V1NBSFU5c3pCM2RaS3dxTVFpWDhzdktkQWNDdmhnMUszTDNBM3ppcWIyKzYyOTM0VXl5dkxTTlpXYy9zSW4vdldTQUhVOWxXU3pJeXFFQTZXWXFTcVdRK2J5QjVIQmp5MjdCR3FjWU1jcm1mWnhocGx5eXZMU05aV2Mvc0luL3ZXU0FIVTlscTMxZ0hsYmkzcktLUnJjdFlTTWJtUk9ndmVaNGN6L21sOGNnaEpHZEc4eXl2TFNOWldjL3NJbi92V1NBSFU5c2ZJZG1NQWRqMHJqSm4vY3k2VjAwUFp4Rk1JeGgycGZoSmRCQlRoN2NsODg0WERuYkx2Kzg3K3oxa2pUdFdrQ2RQT3U4alJDNU9OdTZvUEQ2R3JybnJkNlNxY2h0Y3htRnloVnZDZG5ISVJ3SGVsRDFsb0Vlc0N5RDUwMUg3Ulk4c3J5MGpXVm5QN0NKLzcxa2dCMVBhUEl6ODIzNjR4VVhFTDNkVWJ4dTNWWlNXSWJNaFVWZFdXeXpSVklpYTRCMyt5T1NiMjFpVDhmcnltaXMxWml1a2h2ZDBUbW13Yk1BT2VhKzVhU2svZ3NTdmdxemxjZWo0UFN1UVA0bXd6VFdTVmlLNXFrYm9BcnlVQmtYT2ZveDM0UjhwQUpuUFpsS01jNmI1UUQ0NWx5eXZMU05aV2Mvc0luL3ZXU0FIVTltUlRVQXpOckFYWitISDJJSkdjVW1OQjZvL0dCbEwzOW4rM2dIZFpjOGdIeXl2TFNOWldjL3NJbi92V1NBSFU5cmdMdnhpWkxlbWp0REpkcUtKSEhLUExLOHRJMWxaeit3aWYrOVpJQWRUMktUMEg2TzhldnVOclJLQzlDY0pBejBkMnlWbEpEMWJLeTFZcmQxcnpzaWFjUGJhYjlrNmZudGRkdGg1b1BHOWVXR095dTdNOFlZaU1pTHB1TXBBNzFTRFZRRFJteGpBOVdFSmFYS1A2OXdQMTQ0OTNncytjSEc0R0ZuWjY3VWhjUHlqM0Zmdkc3R1VQaXJHWVhITVhBY21MWkJueit2VGU4eHNvVjRoVDlKazN3cUVydFBWTlRlRiswTENSbGZ5THRtNEgvR2RXcnhJb2F6QW9UbmJuOGhyWGN1OVQ4VTdscVFvYXRoeGVsSi9MSzh0STFsWnord2lmKzlaSUFkVDJRbDBvSGJSYlFBMjZXV2k1ZXk0NEczQjEvOHZRbzdIYnF2WXp5bU5LSDBUM2luanBTeitENks1WWNEYXgwZTRRUDcrelVVMVFXMC8weXZTS09MRC93b0d1K3dtL2lyWmFUUWozMytRc2pIUTJnaGZPWm5LSWlsdVNFYlZTdi9VbE5Cbmpxazd5QVRYelM4Rm5Bb3F1MTJ6THY3TUFEejFIcnV6VVNWOFgrSmorTVp2aEFPK0R5UlVQK3FUVjBQQ3pxRCsvTjJzTlIzcWFoeWNnN1c2YTFudGhEUElVMHJSWnB2RHFqeG9iSnFTTUlWWmtwdXc4bFJjbmx1VkNFOW9hWlZxUUZPVjdDNDJsbnA4V0tjWHdtTkVwaDVXMUdDNE80aFZOSUtDdTVoRUs3dUZEU1gwanlKUGFrOUowRVViekhLYVc3VDZkZ1NQUTlaS0pYRTIraUdISUkrZkt6V3RsR2pNYkRtTVRrdHJ2Y2w3L0pOSXJzRG0zYkdqbS9yNHBFVGZ6TDJxU3FRWEZJekdzYWkvaXZOcVJvclZYSXQvaGE5NEtjMndmVGN1WmQvV25RUUxVOE5ZeC9XRkNUaEVua2J6bG45WUd0NjBmUnhzSCs4dU1ESEJHWWVZWm42LzhIK2pVUDY0SllZWkxVbG1tVVdhb2hpVU55K3dPMXNkV1MwZHNyQmt4REd4VWgvUUl2cmhIdnFLZXBSODhXVStab0hMTjhoRXVEazlZZmtOYnVTM054d25qcktiU3g2SUoxd0VrUEh4MlVYOENQdmdUTTZyOTdtZzhKejJQUVdwTnlkRHVCdzFSSGNWeWhSOE5aZStvQklNWW52Z0RIUVFiMHlPN2VDNlBDVkRDdFB0eHFRMVl3eTRLaGU1K1RjMGt1cWtTaFdvU0d5NEpseG4xVDJkOVlBa0grS1VaR2ZKQU8rUlEzbkMxellhWFpXSjRDYk42bjZ2WkhqaWxsbkJud1A1RHhqMFZYZjlmL0pRUnhxZ2JYVUc2OHFEWnZCUE50UkNGT25QUjRHMlU4L1JLc0ZVWkh1M3p3dS9UeTBZNkpjZHpqa0xULzBUb1ZRSm1NbWxQcnlLRkJoVDFQaEJIRmN1bEdlRWdodmk0VjkyejlWNURJL29ZQWhOSm5Rb0dITElueVRQK3k4SUU0b0hGZ3YrK0tZd24yWUNDOVg5ZVMyTEZTVjB2RE5kS0tIdklEOHpLRWp4SE11dGc3WGdkcVhmQlVVVi9yazdmOExmdTZBT2JlcWxadk9OamY5cTJ2TWVwbTZEOFordVNDaCtwQ0o4NEUzQ2UrMnpCNmlMZitEWFlOY3FIQlNnS0ZyUnBlTzk3RzBNTGFWd2s0dFFxY1RjMEpOZkltRHpqaE9wTGpsUVhJREdwcUFwZDhuK2c4Nkg2dS9vL3pZdk1qM1J2cU9lYXdVVDVXZzRuU2VzZ2w1Y3JCMEJpWnR4Vmw1Y1NVYlYydGlzZE9lQ3pIRVhQKzZkTjRUM2JwVlRyZk5Wa0R0TUNxZENyeG9ReDRPNCt2WDVrZm1oWG1pZjlna0M0anJZZTFUbFhDbGxKSVRSSTVwQisvYzh6cytTMlErZ1NqZUJRcGpKcHprbzJCSlI3SjQ3b1hxQ2JXU2lSK2pzVVpoVCt2Q21pY3dNeDNGclJXdHJGMklVNEppQ2Y4TXZzSmlQWTBBNDFpeVdLMk1pSnVMSjk2S1hSMzZ4eXlwbUdpcEZ6Rk9TUDVJR0NFMmxLcXNJejZXQXZ0dVIzVFMzS0hKdXBEaTVvbC9RbXhXWnNMVURDcVhHSE51Y2VEdEtjNzhwdHJjUVNqbUhNZ1JMdlhkckx1cmFhSStrcjVOVVBnaHEwQTdNNk1aNmhxWFNZSHVsYjZraUdxMklQQmlzNFozUDlOR2pNQ2RNRGhJckMxemtWOEVRTlV2emt2clZTSlB5VGd0d0k4S0IvcWNhdGMzUTJLTFZjcjlad25rY3FVWHYvL1lhTkJuMThNY0lxRU8wOEl3aGVMSlhSRTREUDlqOFdmK2xrSHN2UEFEUllJWmVUMDhRMVFvemJCZjNTUnhxUUJXbHRtSWpIaFFEcUJPbGhCY1BES3F2RUxGU2M1djZXQUh6WDFZVnhrVENla3FBOXFINUIvU2ZtVXB5M3d5UlBOQ3NkT2VDekhFWFArNmRONFQzYnBWVExLOHRJMWxaeit3aWYrOVpJQWRUMkNNMjRzQW5WQnlPSGtmSjRaN0hKbG9Cdk5rQTR5UnlzeUcvdlVOWXRNdS9MSzh0STFsWnord2lmKzlaSUFkVDJ5Z2lvOGhVZUplRjd6SThlWUw4clpIMERCekV5S3FMZkFkWFF1VmRvTGRhYW01cWQrS2Vna2tFU09HOGtRUWVwaG5hRm5QMmxvQUQzcm5KRUpGUG9WRlE5MmZrTnJ4bjF6Z2FIdzFUNWw2Mkdkb1djL2FXZ0FQZXVja1FrVStoVU52Q3dtRTBFdU1rVjc5TTFSaVZOVlJuT0dSWkF4bTV1cVU5b2wxMUNiRnJYU3RuUmJjLzROR1RIOFViODhwYkFISUM3M1Yzd080S0RGbXRpQm9hWUJKSG4zVWNiUXdjL2tpbk9hM1NUbElUU3BFZEI1eG5HQ0JUbi80THlydGFtUlgvOUcxYjBCbE9ZWGdtR1locDNiTklmZ1hNWlh4QjMwSElRTmhOb3Rnbi9sQTlCaFNGU2huTC9OTjN5UDhSN0V5QWdmZlFJeVZKSHhDV3JKenBCbmFBa0NZclo0YTVJOWU0ays4c2NuVmcvYTB0ckdkQ0dZY0RWdjNvNjNGODBGUjZrNUVQMVVEWjRLYUY2ODNxZjlHM3NTWEFWQVBNQnRTRERvTGVpS1QyRTZxcnJOVmpPb3YxSUVtMHhsenVSaTQrNTJTUmVkc0I0aWk5TlBOSXZQTm1NdHEybHBCa1pGNTJYRWJkeTl4VFRSOHhBb3FrMkgrYTBVQ3E2UHlxREltQlBBdnloY2FmYmJ6bnBGMzNYaUVQRkJpNzVMS0w2V2l4cmU2cHBUdmpVdXhIOWFHY0xGeDIyN0RNazdocmhnM3pGSHQvaFE1RHdFNTZNcTBpL2hqbkV1WjF4eWd5cWMvdGhXYnd6bUhyL0JlM3VwZDZwNnNnR3RPTHdXd3A3eWIvS3lSUkdISHJQQUFhVlNBQ0JPcFZibmtwTHVBRlpOdVFkd1pNRXlqYXhhU1VBbHpwSDhJRTBJOVdzZXJMT1pNZnRPM3JuYUJxU2E0b09JK1p0OGtIdDk4WVVvaUJwTTRqUDhkdlk4NzE3RDRueC9PYXBuUHkvb2ZPTUhheHRZblZIMnNTV2R2VGFLd3lCZ1hURmovaWFLR1FHNG96VStuRG1jUTJVUUM2SU1ydktjdndmdm9pWjZ3ZmxhWDVCWnh5b0FZWUFCM0Z0b2JyamJKNTRpWUdsTEtQNnNBOUFZOUxLeFVpS09mWnFadzFZR2NqWEJHc1laeGtDNVRBa1dncTRjaWpWQkpYTFoyMUk0UGRCRStnZ09IZHh4WGpvU1hoWVlhcW42cjBpeVFYSllLeS81V3NraVNkaTUzOUd1K1Z3ZlB5UkxHMkQ3Q1VvMUw2U0lGKzBmWWYwb1RPV04xM1VQSVRvNSt2aFpTNDllczY0aGdvOHNuVSttdDNYeC8wUDNFZDlkbWR1SG90cnpCa0V0a1RTOEorM1VJdmxQbVlOVkdmdnYvcVhnS1Mrc0I3bWxjenNzTUlQTG55TDRoWS93aHNOQlBNeXpvWmp5TkNsd0ZHZ1Fja1pTOWVuN2laZ3JhWlZmMVVMMXBNZUNyZ1ZIZm1GN0k5L2Nmdk1kVkNYSHFCUzNXRlJYOURDSnZkV0E2eDBaRHRSeU8yaWtNV09oVFlMNzdjVlFJaGppM05RYkhJbFUrMzdidCtZNVIvdjVDOTFQTkVCYnp1cUFJMlZpblJVT1FIU2JLU1l0czc2VlhpUUNXNGp2VVhIVVdCOVNOcFR1V2JvbmdNZWZzZG5OcGZ0QU9Wc1FiY0k1emZNcWt6MU8ya3BZVUlydTE3ZWFMS0tpclBzUGFnRW1IWlNlNmxSUTFtQVBpcUUxZUZlak9QNGVDQWZVRUptVmhPL2hwL3lGQW01SmIzaTVXdzdwbjNaZjZZMU1FRllkaDJzRzFpdDdNVlNCZkRMSFBxM1owa2Z0ZDlqUnRzanl6MnlTNExncm1KN0pPaHE4RThWWFN0b3U2TVYxVjhGZ1lXdUxLUWtBUTE1djNILzlCQTRLZzdSa2VtWUd6Vjd4TGsrNzkyc1IvaUg4TnZ5SFk2dXpLTmdqTWFxeHprWWxUa2hDUVV0SDFlOStjamcwVmRhL3g3QnFjOGpON2ZzQkwzZmlPRDNLeGovRHlyQ1RKeHNSZWxIdW9ZM1M1N2hyUGMxeGtISjRGYnJuWkZFbXowd0NINE5iRkRwRFdnYnNKS3pTb1NvZW40MnRRakthVFFTMlZBbCt5UEZ5UHNtQXlDNFloemcrRUhveFZrejJkcm9YRlgveGcrNzB3YnpSTmNUdjBDcTg0UTRiM3BNY3BrVzJkY0Uwb2VLL0xPYTRWcytFN04yVitjdlYyWkk0emJHMXNoUHVWeWxIaElneGhQT29MUnA4aG5jV1RneC92bTdVTXNDZUdxU3g0UndqVE1tVVZGOXlPdis3czRXbXlSVjdNVUExZmo0cjRNQ2N2dk40Y3NyeTBqV1ZuUDdDSi83MWtnQjFQYTVCT2E1NEZuVlRoRE1hVzNGalJsem5WSTNhdXV0U0p4bElGZFpFQkFHNTdsYS9LVkM2RlFEL0VBNGk3c3BwYlFsMTFkRTB4Y0s1WGpzaUlmcVNNMEF6R1pHVXFvWk84aHF0K1hybGtIYzBqN2VZc3d3MDZIdWtRVHpVRjFQdHVSaGtoc2VCdisrelBxSk13eURQaGp3ZEdWUzZXUFlTa25iVE9qbXZHamNtNWNxMU5Zb0VSdUZYYlRWRm1UL0ZXZXhiREErZGxkUkR6R3hSdERUc2R1QXl5dkxTTlpXYy9zSW4vdldTQUhVOW5kVnVTWXgrd1dCd3hsWUFCNTQ3NzdPbERMN0R2enpzT1FuSysvYkNjNG5yREhhWmx6eWlDYk1QQkR4QzZhc3ljNlVNdnNPL1BPdzVDY3I3OXNKemljSmZUQkFTbjMrcXVDZkh4UVFMdWJUeXl2TFNOWldjL3NJbi92V1NBSFU5Z3F5UEMyVE9LQ2g5U2hwQ01IbFlISEdtSnlyMU5sU0RXeGRhc044TkliU1cxVjI2b2lsRll5WEZaK3Y3RUhFOEEwcStMb3VFTEl5RUJMaW5sbHNEUFBIbk1TbWdneFRSOGNUaDJJR3ZoMEsvOHcwVk5VUU1uRWVPM2xXUmFKZ1NNc3J5MGpXVm5QN0NKLzcxa2dCMVBZRkVLS0NiMkt3bXpnR3d2VGFqU2JYWFUwT3MrWU1tdmVGR0lnQkpDM1VjbmJ4b1NxeXlJOG10ZGNnYWRpekxjekxLOHRJMWxaeit3aWYrOVpJQWRUMit5dGFBaXJtZHdEZmxNSjRtM1k0YXY1ZWg3c3N2N1psb09qai9MS2VSVkhEWFZaUVFhMW5OZlZtZk5YWFMrSkR5eXZMU05aV2Mvc0luL3ZXU0FIVTlzc3J5MGpXVm5QN0NKLzcxa2dCMVBaNkRPbDNUQ1ZhWjlQZk43WW5KUVlneXl2TFNOWldjL3NJbi92V1NBSFU5c3NyeTBqV1ZuUDdDSi83MWtnQjFQYlJKa0RqMlNVSjRpM05sdnhGbkVaL0dLVlFYM29xcnBabTFlTlZ5UHRvSUlQMEc0SHJqV3U4YTF6NXdtUnlRY1BMSzh0STFsWnord2lmKzlaSUFkVDJ5eXZMU05aV2Mvc0luL3ZXU0FIVTl2Yk81SHhJZVJoL3BsZUJOKys5YWVyTEs4dEkxbFp6K3dpZis5WklBZFQyKys4a3lCcU91dHZLaFFCbUdtWmhPcEY4OEw1N3cxZmRGbW4yL2h0R3lLSExLOHRJMWxaeit3aWYrOVpJQWRUMko5ZlVFY1NIV3ZrOGZweW53K0JrWUlWM2pEcDgxZjRvV3JGa1pmOXQrcTNMSzh0STFsWnord2lmKzlaSUFkVDJ5eXZMU05aV2Mvc0luL3ZXU0FIVTloZnRNaHk1ZTY0c1NsT08xb01FazFzdDl4WXYvYnJldmE4azRUa3NMVkl2eXl2TFNOWldjL3NJbi92V1NBSFU5bXF1RUg3Z2VaZXdKYjFFRXVLNCtwL2w1MklaYmVjQzFvWWJ4ZWRkYndXVXl5dkxTTlpXYy9zSW4vdldTQUhVOWxTdG5Vbm02UGt2NDkxaTVvZjQ0eXpMSzh0STFsWnord2lmKzlaSUFkVDIyRVlSRzk4OFV2QTFFTlZsck5EZGpqdUM4UzNCRHRoL2hPa0RRTUpOWFJFMEdlT3FUdklCTmZOTHdXY0NpcTdYeXl2TFNOWldjL3NJbi92V1NBSFU5a3VuTVM4QStJcFFONG1lTVBsMndrN0pzTWdVZC83SC9LNXFGWXRVSmFQcDlQbTN4Y2ZJZTJBWU5OQURMT25JaWh0MnZlTjFLdjVRdmliVFVVWXR5bUJWd1EzQXVXOHlLT2F3ZWFRQnpEa1pvSmJzNUxZcnB6ZUJVYWo0ZGZVSFBvZkZ2ZlhtMDF3Smx3ekU1ZVNLNmVUR2Yvc21vNDZodzNVcmN5NjVTeDRQUmhDaTVURHNNbXFZaFhMMkNtdEQ3NTRUcG45bFRwTWRlMXpmMDUxL0VLVWNkWC9MeURnNjR5K1luZW84UjY1b2lvZXhpNG4xb2xvTUJJVjBhZWdpbVc1MTFvNFhoQjI0MVB0WndjdllwSkVURklXdkwwQkVlU0ZsZ0FNRTNscnJPTmNJV3p5T2dCMC91ZzZCRlpaV1RuWlVpdnl0cEFoTVc3UTZKUTk0d0szT2xETDdEdnp6c09RbksrL2JDYzRuakZvY2d2UjRWTVhZMFNrNlNXZVh3ZDFjRkh4Z2xKU0k3UGx5bmgyRUVhL0xLOHRJMWxaeit3aWYrOVpJQWRUMnBtOUttbTAvTncrcXAvMnR4cFI4aGlwUWx6MnVNc1MyR1Zvd0djYlZTenFPdm1xdFkrQlo0UzhZb3h6VFZpKzV5eXZMU05aV2Mvc0luL3ZXU0FIVTlxTlY0RzZFSkxwSjZyS2crSGxHYlJNdFBTZld2UHplUmdxZmRGM1B0MDFMWjVrYnhWajcwYTRBR0tvWmVFMDA0SnFibXAzNHA2Q1NRUkk0YnlSQkI2bXhSS2s4UlJTNkVqVW14bkdWUk9RSHl5dkxTTlpXYy9zSW4vdldTQUhVOWcxWTUyMGN4UDFQZUV6TElaRUhtZkh0NWxBY0VVRVlnUTZwNlZJbmpMU0x5eXZMU05aV2Mvc0luL3ZXU0FIVTlobml0bXhIdDlHbTBtWU5FdlUrK2h3MkFBYlJNMENUQ1cxTGE4YUMxV2M1enBReSt3Nzg4N0RrSnl2djJ3bk9Kd2Fod2p1K2hVUzZtcktHM050bXNmanU1M3UyeCtmSUU4aFRDZXhucjV4dlVjdTRnTzh6b0FsaURZRjZxamo1alhaUjdTcnFyeSt6WG5WcHRUS0lUVmJMSzh0STFsWnord2lmKzlaSUFkVDI5NHA0NlVzL2craXVXSEEyc2RIdUVDZlgxQkhFaDFyNVBINmNwOFBnWkdEa0NINDFoZnZkYk5kUGIrNXhiT3BGSU5WQU5HYkdNRDFZUWxwY28vcjNBOTJxOC9STnpGZXlQT0IyRFU4WjU1RExLOHRJMWxaeit3aWYrOVpJQWRUMmxXdWlRckgrdVp1N1dxVmIzUGVLcDZVbEtzNm1JV3JhOGtJSVdkYUJoNm5jZE9QMHpmcHBvcTJHNVJNQ3M0Z1R5amJvVkRzeUMwMmpGYUovRDd4ZktsS0ZFV2lWOW43YVNOc0laRGd5NFJOcGVzVHYzbHNDVXFNOHNGcldYRXVWTTlKMmxhL3VuZGtyMHhUSEFrNC9CM2J4b1NxeXlJOG10ZGNnYWRpekxjeTRYMDNxczNCL3cycGpqbUluNmJ2eXpwUXkrdzc4ODdEa0p5dnYyd25PSnh2YWU0RURQa0hzZW9YTk03NXhObkxjTGk0MEZyUHQ3L3hRZVJTYUt0T0lTZTd1WDhKaStFSjZoaG9NUVdQV2JyMzFsaXIxUlFURlB3dWJJU0Yvckx3UXpNbElicFE3YU9mVzFQS0Y3cjdyZ0Zzb0xDUnJxamErc3BhbkNQMStVazNwOTNVYWo2bUs5RjMrR2JKY09WYjVuMmJ4U2hycFFYSlI1ZmswSmdkTTBwQ1hlMzRERE5LaDFSM2Y1ckg3SldSMlEzZ1lVL05USnBGNzRtdS95dUJDelZSMHRpQXBieU1Ba25QYjJVTFp3ekRVMTFhMnRRVGlJY3QrYkJCbEdEUmtNbFBRVzhpZ1V5eFNXa1pneU0zTEs4dEkxbFp6K3dpZis5WklBZFQyK0VKaUJwZjdNbmxnK0lXNytDZlhURTR2bUJPVmwzN1FKSG5ad0VFd29qQlNmd1o5WCtNaWF2eTFpNUJxV2lISlJaL1RFeWhHQ09qVDFHRXE0QklJREVpN21MVFhhdE02K3pqSXdLSlltb2JPbERMN0R2enpzT1FuSysvYkNjNG5wTDdicXkxUEU0ZHFySWVUYkdiNnp0NWVTT0lNdTZNWUtvaVRQOHgxb1RnTkt2aTZMaEN5TWhBUzRwNVpiQXp6Z3JCRXJrdWZvemZ4SERjYmQrcHowVVFhMlByeHVCSE44U1dFVnJBTVFZTVJubVRiWmEwSkxiNW5PdmVBWU83MXl5dkxTTlpXYy9zSW4vdldTQUhVOXBFWnlpUVJ0NUNzR0d5Um1pQzBIeWxTU0tkUnhLbjkrZ0RITzI4dSt0STlON0x2ZmNleVJ2U2wxV2NOMkc1cDlUTU83WVdaN2FDSVFyRXBjaXM5RXZQTEs4dEkxbFp6K3dpZis5WklBZFQyVTF3WW94Vmo0VmlHUkRFYkFLV3VnamlnZnlVb1RUT2VDNlB4R2Vxa3YzL2ViamVJKzY1SUFBMUQra3NSRCtPV05BYTVPa2xBdXkwcmdLWGhrR3NhbDYwYzBweGg0bnhaSmJ1V0ZVN1M3cjM1cndGakR0RGhQK3l5cWNjY080bVlwczE0b05yOXphVHJkSUdmaytaOURFV1NjZ2VqR0Z0YWFYMldzVk1NaEZjcXpWa1hEL1ZTOTAzZkIybER1bjBweXl2TFNOWldjL3NJbi92V1NBSFU5bnR2Rm5DaXpkakFHZEpESXQvWFJMYkxLOHRJMWxaeit3aWYrOVpJQWRUMjF5UlcxZTlnVUpZOEZDdmVobGQya01zcnkwaldWblA3Q0ovNzFrZ0IxUFk2cFp0VDJlRkNOMHhXdnRyK0x3Ny9taDVRcWRybW5ZZ0RCeTNLSGdoR2Rjc3J5MGpXVm5QN0NKLzcxa2dCMVBhU3hscVBvcktJYURHMkg3ZjI4VkVqRnBBSUx0bFhZaDZPdG40VmF2clFNS1ZNV2htUUpJdmpYVTdqb3QwaElRVnpSdXVSekhickV2ZkJnNTVlZXdHcXl5dkxTTlpXYy9zSW4vdldTQUhVOXN2QVU1ejhSVW9RY1VNUzB2M0hlOVNlaUNOOFp2M25zWU9aaElDUENBVGhiZXhrTDNRYnV0UkJ2RmMzSDczb3dMVWtSQlk0V09CempwMGZLUVI0cFRjTkt2aTZMaEN5TWhBUzRwNVpiQXp6di96T0ljaEs5dmJTcytjY2g5dmhkU3JOV1JjUDlWTDNUZDhIYVVPNmZTblhrV2lTVXZMTjBKK0lKTnUxZVJDR3JmU21IbnN5VkFKK1RmRXNNZEZobUJHU2F3Yk9RZkdRd1pJMm4wT0xFYVh5TXRzK2NrVGlGMkdHVmpKUktBTmpuaGVxZ283RjIrZGtnamlsTEhIQzBUL3o2MU5Sd0R5TmlXUkdxZ1ZYWkhqd3JESUVvL0FPVlFrOHIzdStZbjF4d2lWTU5HVUtFbWN5Y3dsTnVFYStnTXNyeTBqV1ZuUDdDSi83MWtnQjFQYVFYaHpWRmF1ZWFQTG82ancwZWtpK3RXaW9KYjZzNVlaTGNFemlUVlpwZlB4ZUxPYWdXN0RLdnh6RkxBQ2d0S1hLdnB0UlJKamMwZVBrbDFzMjZvVDBzRHViSlJYNklEWlB6ajh0d1E2U2Nnbng0R2RFYjRPUlhYR3pwS3pNWGpwT09uejJFMVE3SHRERm51M3g0LytWVVZmVXZxdEIrcFg0NXdVNTJWYlVQY1IvZWV1OUszblZMY3d6WUhMMEN4T3dpSkJUUFhTNHpJL3hFaWVwelRTcnl5dkxTTlpXYy9zSW4vdldTQUhVOW1UNVBjSlR1NEVVdGpVZitlKzV5TVM1MVFpK29tSHptRHFyekRKeVdnQ0x0K0kvZUM2cXJaQ1FtbENHdXhZNklyb3lVRS95T2x2ZlVNQ1NPY0xrek16TEs4dEkxbFp6K3dpZis5WklBZFQydFJtSXREZXg3dFB0UFRnTkNZMzdVTVpNZGJkZzcveVpFL2ptUEw4MFJRczQrcUI2WVp3cnVnNDVHdDgyYkhZb3I5cXFoMEd4UHlvKy9zNHFTemw2WDhzcnkwaldWblA3Q0ovNzFrZ0IxUFpJRDZhSnVST2w3S21CSWYwQldDbGJYUERZZC9Bc3RHYjlXcmhUQmFZcVRJc2dTcHU5UHBRaUVWK0ZUcHJWOVBIMWVqb1lPQklWYU9yMUUzZGt6ZmxoRGtnWkNyMkdlTnNibGNBSVNFZlYxQWphOVBXZlpmNGwzc0NLdkdXMHZ2VlQ2SlE0RlNGS051dGI5QnYrUXlKYWJ0NkgyN29LeEVoeVlrMEs3YllWZzJUN1ZQQXc4RGxFQU5XdkwySnZ5bVRMSzh0STFsWnord2lmKzlaSUFkVDJ1ZUVmUWpxcTljdlAwVUwxZ1pkYmZvWjdBVjhueGVRUVROR0wrejJwdXFmTEs4dEkxbFp6K3dpZis5WklBZFQyVksyZFNlYm8rUy9qM1dMbWgvampMTXNyeTBqV1ZuUDdDSi83MWtnQjFQYlQvZHJDZ1BVaXZ2elI3S245ZHdqcnl5dkxTTlpXYy9zSW4vdldTQUhVOWxVdmxmZ1J4NFFsZ2JWbHVjZThDMTBZMjMydlpwYjVEem1vY1VtMkwwQjlQTzl5NWNnU3VDdlVQOCs2QVdhRTVRaHF5YTJhTnJjQzBabnFjWHZyVFdJT0hLc2VhS2Q1QkVuVHk3Vk9ZMDZweXl2TFNOWldjL3NJbi92V1NBSFU5dUE5MWRETFhzaGdURGFkb0k0ZU44bjhEUUxJRXNnRjRWV3pZZHdmR0w4Rnl5dkxTTlpXYy9zSW4vdldTQUhVOWorL3MxRk5VRnRQOU1yMGlqaXcvOExUbWdsRDhBKzNzVFpvMlcvVFBOYnJxbU5jUjE1Q3k1ZjZiZWhid1N2Y0o4NlVNdnNPL1BPdzVDY3I3OXNKemllbDdCSmVRZWlmY2JkbjBhWndPQ2ZqNGVVdEJiVVhUSFhkNExZME5UeVl1OHNyeTBqV1ZuUDdDSi83MWtnQjFQWVQ5VXBKaU9XMkFaZTBScHlmbHUwbXl5dkxTTlpXYy9zSW4vdldTQUhVOWdOdzdKVmRuc3gwSHc5Z2IrbjhPY3BQTWhOQmczZ0xzWTU1L24ySkVyYzN5eXZMU05aV2Mvc0luL3ZXU0FIVTlpMU01VmJpcFh0QTJmdVZkUFhXTEd6QnpNVDh1ZXB3TVd5T3BpU1Z1TUpaYUQvc3hwem1qaFlxeml1VXBhVjZCTXNyeTBqV1ZuUDdDSi83MWtnQjFQYjArYmZGeDhoN1lCZzAwQU1zNmNpS0lOVkFOR2JHTUQxWVFscGNvL3IzQTNieG9TcXl5SThtdGRjZ2FkaXpMY3pRVGFNVlMwTjBPa1V2TGpQMVVpdGpzRHViSlJYNklEWlB6ajh0d1E2U2Nza3V0MDBBV2R5UGlFaTJkTDhiV1dTNUEyU1h5T3N6aHNQdGlZb1dYZlFSTVo0QXlhcnVYNjJuVGhpOHZWb1Q5anFMWlJudzlDcVNpM3dwY1pmcjZDQUpXU3VaTmN5c3JLb3diL0JiQXRwUzF4OEpxSUd0T0Y2RTF5N1I3ZElxRWV3d1ZOYUN2cDJaaW9sVzhZa1ppVU5oMktKc0hGcmcyd0g3QVV0Vk1VOGRCcUhDTzc2RlJMcWFzb2JjMjJheCtEOU1ramYrWUJzTWhrWFlwNGxsZ1UzMCtiZkZ4OGg3WUJnMDBBTXM2Y2lLOHFJVStRNHNtTlhoekZpcFpvaXBIRDBoam01N3lnWFh6d01TRWUzakNPWkpoZVFzOGZGdmp4Y3kvb3UyMFhZdFhST0pCWnpmUHlsWmJncEJjWVdHck1Pa2R1L1Bybm1vUDNFbHJFS1hvVVg2aTdDSWkzVWR6VXFlUS9yd0pra0pjSmtodlErT1JTbVVLWGtBcVZ3OWFRazNMYmYvZFArcnJ5dWFaN0QwQWg1dGxIWnUrWE5HWi9zZ2EvLytBSDRHUk43TnhoVFc4dzBmVHBUS0t2cTVWc3J1OUlPRFNCRFlGYUNuVysxTVVBOENHaEtRbFRCWG9GUG5CUEIrSzAxQTIxaHhwVTlGQVg5Yy8wdkEyT2xVTmYyNWFSTi9pV2I3dWZYUldoYjNsTlNiZmRhczZ4eFZMa2psSGhndENPam5MdEV1YnMxWnNjM3JzUmlxNGYzV2RucXZraU5PcTJrb2UxcVU1T1RyYmZWV3FnOThERXc2QWFQMCs0aVNXYjJLaC9RVU5XTmw3RFBlc3U5MXFtM2FnczZVTXZzTy9QT3c1Q2NyNzlzSnppZlRsZ3o2enA0aEdlVUpTUGtXYTNqV2QvL1ZCRkx2MEZwejJ5UlRDZEJ3aTl0c0Y0NUtTWm45TkN1bThIQWxpZmkzVlk1bjBiMHRNM0VQTXc2a0dOQmZ4MkRxVnUySEJ4YjAxSlRUMU16N3BGdFZkdXFJcFJXTWx4V2ZyK3hCeFBBOWtxZ3QwUlhQTE5FanhXQU9HbDhrOW8rQW1VMGlrclJHM2l1S1QzcG50RnRWZHVxSXBSV01seFdmcit4QnhQRExheEY0NkcxOC9IOWhtVkZBSzZ2ZUUxRFJDQ2kwTDdnd0pSRVF6ejFGN25LRkh3MWw3NmdFZ3hpZStBTWRCQnZoRnpNQTZ1SThhNzFqQ0UyZXVwbEYxNlJldFBwM21KTXNrZ0ZRaTN0eU84c3J5MGpXVm5QN0NKLzcxa2dCMVBZcE1Xdi8wNkxhdldBVm5ZVmt2aitRTXZwRURDbUFqcU1JQTF1TkM0SWE5enVDOFMzQkR0aC9oT2tEUU1KTlhSRTBHZU9xVHZJQk5mTkx3V2NDaXE3WDBPcm1qQ0tWWFEvYmR6bURrL295amJiUnZ0eHF3SEtDSnZERjRHVm9rQnBCZUhCVUxhbmc2cnkrL2RSVjVOM0VJMmYva1IxWTZZVzVXRDlwbFdtRDFyMytmSGpjTWlsN3k3SGtjM2xRWm56cDd2ZnRyckszenl0VzNJTllvOHZZSW5DcHI2d0I5WnFha1lnTERCczdBdnR3UmEvWGl2UThla3VhN08zZjlKekNwbWpmeEU1MVNRM1FYQy8vcEsyMlNTcTJRaHAxVDZVaEs4WkxyZS8wNFNySUVCSC9IcVhNS0IvQUtSVnpseFZmNlZJVDFmc0t5MXBuRDdvQXo1WXRVY3U0Z084em9BbGlEWUY2cWpqNWpSUCtxV3Fxdy9wZVB2ZllWM215K3hBeGlSK3FFVi9TNnZvMzJrQ1h0cElmRWQxcnVRMVUxdXpXdjRKUUhoc1Q3czZVTXZzTy9QT3c1Q2NyNzlzSnppZDNCRHZZV2tvVXA1U3oxOENzL1Fiek5YQWlKZTNlV21INXN2dXNKLzdibG1qY1RCOUZMcDZGcTNpckk0QjluOXcxY0NJbDdkNWFZZm15KzZ3bi90dVdDRnZxNEdSOHJaYXhBaGhJSEphT2huaE96amYrbkRrNWtFcFBmam9QcEdra1BUdE5JeVkwbzQ2T1Y2UEpsdng2M0d6ODlya2NrNDdhMlY2eks4K0xaUlJ6aHFRbHR4ZGJoV3hmazhRS3ZJakxLOHRJMWxaeit3aWYrOVpJQWRUMnBtOUttbTAvTncrcXAvMnR4cFI4aGlwUWx6MnVNc1MyR1Zvd0djYlZTenFPdm1xdFkrQlo0UzhZb3h6VFZpKzVJTlZBTkdiR01EMVlRbHBjby9yM0EzYnhvU3F5eUk4bXRkY2dhZGl6TGN3czEzS2RjQVJiWjJ0NW4zSGVUajRUbzJYRkNvdkVOQkw2cnhWRkhDeVFPc3NyeTBqV1ZuUDdDSi83MWtnQjFQWTdmYms5RkhpcDljNXpLVkplc0hMa3l5dkxTTlpXYy9zSW4vdldTQUhVOXJ2Vm1FZFJPNUYzaVhmYnNyZmhlY1RPbERMN0R2enpzT1FuSysvYkNjNG5sMHl3T2RFcmVOM2I2ckdHdUtrSk4ya1ZrZEVaTndQWVBrQng4VTNYYUgrMXVhLytDU0U2TFNNYTVUVDBnKy9Kbk51WllhYkZmcUNLbDBDTHJ0bjhNWDZXdmliSS9HVUhXVDMyRUpYeHNnMFpRZ3RVRFlGQzZ0dXlSR2RrT3l0TGd3Y2tlQ0V0bDF2SW1uUmo3NlFTcXVIWTREVTVqdHBGVlZvOW94UjJYdXNnOWFsRnRLUkVubDJGaGcyeWN6aVVhSVRGUWwzcklTQk9ZNnY1SVc1ejgyeSs4d21qSHNFaytxUUtKN1FiR0ppMGp4US9CZWpieXJDTU1xYUROTUlKZGRKTGFrWDhXT1IyR0ZDbUcvbVAxNlBLaFM4Ti9LbHFaaFBMYkxhQ09aZUFUbTlJRDNKcjFvQkFyRTM1Q3lGR01HK0p3ZG1JMVpSbGFBdmc5VVBWd3BsKy9XblBNMjFJcVJ3enBuWVJRRGJZY0p5ckMybEc0ZTM4WitIRkhUaU92RlFvdjRpQ1RpUDJZNDBKS1BCSW1CVnlPNjduZ29ZVFpiUklEK2hCbUNQVG1nbEQ4QSszc1RabzJXL1RQTmJyZXR1V2FiRXk3dlc4eXpvWTA4ZmU5K3hWblVJZStSNVNXbUY2aUNrZXJrZmlLRC81a3dDMUFaS3VvUFE3WDNPNDRDeWtabzVXZFNGSVorenJja1dGMTcyaE1tTHRRY1VYakRQM0srNnlRcUFZMkdOcDJCTjJhek5QRGpSenBmK2hseldjdC9GZUltNVRUK1MxeHAvNjZqL1FNekpRL1QwaVlTWjJIYUVDVmk0ZmtqdDV5NDBIQW16elNBUk5aV3NPR3JQNFdOcXVYQmR2R2dua29BT2wwVFI5RFVjRmdDOUJjK1lUVFBFVS9sSG1TQU9tOFVsWlVBaCt3UTluSGREUnh6RzhGQ3d0ODRMK2hxYzlYbS9lbzJRZ1Flb3B5c1BVdjRTaGRSaHB2OEJvTm1qYmd5d0sxMytxbEZHMVZoeXF3a3RTUzJmTWdDWGlFNC90cnBUY252S0xBMHFlQ3c1MGlWWGxaZmh1dWRoUytxaTZMMDlNbU9tdHdWZ2duMUNHaGRHVWY4SEpJbUhRSlQzWDVFeTBpQT09XFxcIik7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLpmL/ph4zkuIDnuqdcIixcInBhdGhcIjpcInNoYXJpZFwiLFwicnVsZVwiOlwianM6XFxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKCgpPT57XFxuICAgIGNsZWFyTXlWYXIoJ21vdW50emltdScpO1xcbn0pKVxcblxcbi8vdmFyIGl0ZW1zID0gW107XFxuZnVuY3Rpb24gZm9ybWF0RGF0ZShfZGF0ZSwgX2ZtdCkge1xcbiAgICBsZXQgZm10ID0gX2ZtdCB8fCBcXFwieXl5eS1NTS1kZCBISDptbTpzc1xcXCI7XFxuICAgIGNvbnN0IGRhdGUgPSAhaXNOYU4oX2RhdGUpID8gbmV3IERhdGUoX2RhdGUgKiAxMDAwKSA6IG5ldyBEYXRlKF9kYXRlKTtcXG4gICAgY29uc3QgbyA9IHtcXG4gICAgICAgIFxcXCJNK1xcXCI6IGRhdGUuZ2V0TW9udGgoKSArIDEsIC8v5pyI5Lu9IFxcbiAgICAgICAgXFxcImQrXFxcIjogZGF0ZS5nZXREYXRlKCksIC8v5pelIFxcbiAgICAgICAgXFxcImgrXFxcIjogZGF0ZS5nZXRIb3VycygpICUgMTIgPT0gMCA/IDEyIDogZGF0ZS5nZXRIb3VycygpICUgMTIsXFxuICAgICAgICBcXFwiSCtcXFwiOiBkYXRlLmdldEhvdXJzKCksIC8v5bCP5pe2IFxcbiAgICAgICAgXFxcIm0rXFxcIjogZGF0ZS5nZXRNaW51dGVzKCksIC8v5YiGIFxcbiAgICAgICAgXFxcInMrXFxcIjogZGF0ZS5nZXRTZWNvbmRzKCksIC8v56eSIFxcbiAgICAgICAgXFxcInErXFxcIjogTWF0aC5mbG9vcigoZGF0ZS5nZXRNb250aCgpICsgMykgLyAzKSwgLy/lraPluqYgXFxuICAgICAgICBcXFwiU1xcXCI6IGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgLy/mr6vnp5IgXFxuICAgIH07XFxuICAgIGlmICgvKHkrKS8udGVzdChmbXQpKSB7XFxuICAgICAgICBmbXQgPSBmbXQucmVwbGFjZShSZWdFeHAuJDEsIChkYXRlLmdldEZ1bGxZZWFyKCkgKyBcXFwiXFxcIikuc3Vic3RyKDQgLSBSZWdFeHAuJDEubGVuZ3RoKSk7XFxuICAgIH1cXG4gICAgZm9yIChsZXQgayBpbiBvKSB7XFxuICAgICAgICBpZiAobmV3IFJlZ0V4cChcXFwiKFxcXCIgKyBrICsgXFxcIilcXFwiKS50ZXN0KGZtdCkpIHtcXG4gICAgICAgICAgICBmbXQgPSBmbXQucmVwbGFjZShSZWdFeHAuJDEsIChSZWdFeHAuJDEubGVuZ3RoID09IDEpID8gKG9ba10pIDogKChcXFwiMDBcXFwiICsgb1trXSkuc3Vic3RyKChcXFwiXFxcIiArIG9ba10pLmxlbmd0aCkpKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gZm10O1xcbn07XFxuXFxuZnVuY3Rpb24gZm9ybWF0U2l6ZShzaXplKSB7XFxuICAgIGlmICghc2l6ZSkge1xcbiAgICAgICAgcmV0dXJuICcnO1xcbiAgICB9XFxuICAgIGNvbnN0IHVuaXRzID0gWydCJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJywgJ1BCJywgJ0VCJywgJ1pCJywgJ1lCJ107XFxuICAgIGxldCBpID0gMDtcXG4gICAgd2hpbGUgKHNpemUgPj0gMTAyNCkge1xcbiAgICAgICAgc2l6ZSAvPSAxMDI0O1xcbiAgICAgICAgaSsrO1xcbiAgICB9XFxuICAgIHNpemUgPSBpID8gTnVtYmVyKHNpemUudG9GaXhlZCgyKSkgOiBzaXplO1xcbiAgICByZXR1cm4gYCR7c2l6ZX0gJHt1bml0c1tpXX1gO1xcbn1cXG4vL2xvZyhyZWFsdXJsKTtcXG5cXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgIGNsZWFyTXlWYXIoJ25leHRwYWdlJyk7XFxufVxcbmlmIChNWV9QQUdFID4gMSAmJiBnZXRNeVZhcignbmV4dHBhZ2UnLCAnJykgPT0gJycpIHtcXG4gICAgbG9nKCfmsqHmnInkuIvkuIDpobUnKTtcXG59IGVsc2Uge1xcbiAgICB0cnkge1xcbiAgICAgICAgLy92YXIgcmVmdG9rZW4gPSBKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL2ZpbGVzL3J1bGVzL3h5cS9hbGl0b2tlbi5qc29uJywge30pKS5yZWZyZXNoX3Rva2VuO1xcbiAgICAgICAgdmFyIHJlZnRva2VuID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9pY3kvaWN5LWFsaS10b2tlbi5qc29uJywge30pKVswXS5yZWZyZXNoX3Rva2VuO1xcbiAgICAgICAgdmFyIHNoYXJlSWQgPSBkZWNvZGVVUklDb21wb25lbnQocmVhbHVybCkuc3BsaXQoJ2NvbS9zLycpWzFdLnN1YnN0cmluZygwLCAxMSk7XFxuICAgICAgICBsZXQgZ2V0c2hhciA9IGZldGNoKCdodHRwczovL2FwaS5hbGl5dW5kcml2ZS5jb20vYWRyaXZlL3YzL3NoYXJlX2xpbmsvZ2V0X3NoYXJlX2J5X2Fub255bW91cycsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIGJvZHk6ICd7XFxcInNoYXJlX2lkXFxcIjpcXFwiJyArIHNoYXJlSWQgKyAnXFxcIn0nLFxcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICB9KTtcXG4gICAgICAgIGxldCBwdXNobmFtZSA9IEpTT04ucGFyc2UoZ2V0c2hhcikuZmlsZV9pbmZvc1swXS5maWxlX25hbWU7XFxuICAgICAgICAvL3ZhciBsaXN0eXAgPSBKU09OLnBhcnNlKGdldHNoYXIpLmZpbGVfaW5mb3NbMF0udHlwZTtcXG4gICAgICAgIC8vdmFyIHBmaWxlaWQgPSBKU09OLnBhcnNlKGdldHNoYXIpLmZpbGVfaW5mb3NbMF0uZmlsZV9pZDtcXG5cXG4gICAgICAgIHZhciBzaGFyZXRva2VuID0gSlNPTi5wYXJzZShmZXRjaCgnaHR0cHM6Ly9hcGkuYWxpeXVuZHJpdmUuY29tL3YyL3NoYXJlX2xpbmsvZ2V0X3NoYXJlX3Rva2VuJywge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgYm9keTogJ3tcXFwic2hhcmVfcHdkXFxcIjpcXFwiXFxcIixcXFwic2hhcmVfaWRcXFwiOlxcXCInICsgc2hhcmVJZCArICdcXFwifScsXFxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgICAgIH0pKS5zaGFyZV90b2tlbjtcXG4gICAgICAgIC8vbG9nKHNoYXJldG9rZW4pO1xcblxcbiAgICAgICAgbGV0IG5leHQgPSBnZXRNeVZhcignbmV4dHBhZ2UnLCAnJykgIT0gJycgPyAnLFxcXCJtYXJrZXJcXFwiOlxcXCInICsgZ2V0TXlWYXIoJ25leHRwYWdlJykgKyAnXFxcIicgOiAnJztcXG4gICAgICAgIGlmICghZGVjb2RlVVJJQ29tcG9uZW50KHJlYWx1cmwpLmluY2x1ZGVzKCcvZm9sZGVyLycpKSB7XFxuICAgICAgICAgICAgLy9pZighbGlzdHlwID09ICdmb2xkZXInKXtcXG4gICAgICAgICAgICB2YXIgcmVzY29kID0gZmV0Y2goJ2h0dHBzOi8vYXBpLmFsaXl1bmRyaXZlLmNvbS9hZHJpdmUvdjMvZmlsZS9saXN0Jywge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxcbiAgICAgICAgICAgICAgICAgICAgJ1gtU2hhcmUtVG9rZW4nOiBzaGFyZXRva2VuXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIGJvZHk6ICd7XFxcInNoYXJlX2lkXFxcIjpcXFwiJyArIHNoYXJlSWQgKyAnXFxcIixcXFwicGFyZW50X2ZpbGVfaWRcXFwiOlxcXCJyb290XFxcIixcXFwibGltaXRcXFwiOjEwMCxcXFwiaW1hZ2VfdGh1bWJuYWlsX3Byb2Nlc3NcXFwiOlxcXCJpbWFnZS9yZXNpemUsd18xNjAvZm9ybWF0LGpwZWdcXFwiLFxcXCJpbWFnZV91cmxfcHJvY2Vzc1xcXCI6XFxcImltYWdlL3Jlc2l6ZSx3XzE5MjAvZm9ybWF0LGpwZWdcXFwiLFxcXCJ2aWRlb190aHVtYm5haWxfcHJvY2Vzc1xcXCI6XFxcInZpZGVvL3NuYXBzaG90LHRfMTAwMCxmX2pwZyxhcl9hdXRvLHdfMzAwXFxcIixcXFwib3JkZXJfYnlcXFwiOlxcXCJuYW1lXFxcIixcXFwib3JkZXJfZGlyZWN0aW9uXFxcIjpcXFwiQVNDXFxcIicgKyBuZXh0ICsgJ30nLFxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIC8vbG9nKHJlc2NvZCk7XFxuICAgICAgICAgICAgdmFyIGxpc3R5cCA9IEpTT04ucGFyc2UocmVzY29kKS5pdGVtc1swXS50eXBlO1xcbiAgICAgICAgICAgIHZhciBwZmlsZWlkID0gSlNPTi5wYXJzZShyZXNjb2QpLml0ZW1zWzBdLmZpbGVfaWQ7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHZhciBsaXN0eXAgPSAnZm9sZGVyJztcXG4gICAgICAgICAgICB2YXIgcGZpbGVpZCA9IGRlY29kZVVSSUNvbXBvbmVudChyZWFsdXJsKS5zcGxpdCgnZm9sZGVyLycpWzFdXFxuXFxuICAgICAgICB9XFxuICAgICAgICAvL2xvZyhodG1sKTtcXG4gICAgICAgIGlmIChsaXN0eXAgPT0gJ2ZvbGRlcicpIHtcXG4gICAgICAgICAgICB2YXIgcmVzY29kID0gZmV0Y2goJ2h0dHBzOi8vYXBpLmFsaXl1bmRyaXZlLmNvbS9hZHJpdmUvdjMvZmlsZS9saXN0Jywge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxcbiAgICAgICAgICAgICAgICAgICAgJ1gtU2hhcmUtVG9rZW4nOiBzaGFyZXRva2VuXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIGJvZHk6ICd7XFxcInNoYXJlX2lkXFxcIjpcXFwiJyArIHNoYXJlSWQgKyAnXFxcIixcXFwicGFyZW50X2ZpbGVfaWRcXFwiOlxcXCInICsgcGZpbGVpZCArICdcXFwiLFxcXCJsaW1pdFxcXCI6MTAwLFxcXCJpbWFnZV90aHVtYm5haWxfcHJvY2Vzc1xcXCI6XFxcImltYWdlL3Jlc2l6ZSx3XzE2MC9mb3JtYXQsanBlZ1xcXCIsXFxcImltYWdlX3VybF9wcm9jZXNzXFxcIjpcXFwiaW1hZ2VcXFxcL3Jlc2l6ZSx3XzE5MjAvZm9ybWF0LGpwZWdcXFwiLFxcXCJ2aWRlb190aHVtYm5haWxfcHJvY2Vzc1xcXCI6XFxcInZpZGVvL3NuYXBzaG90LHRfMTAwMCxmX2pwZyxhcl9hdXRvLHdfMzAwXFxcIixcXFwib3JkZXJfYnlcXFwiOlxcXCJuYW1lXFxcIixcXFwib3JkZXJfZGlyZWN0aW9uXFxcIjpcXFwiQVNDXFxcIicgKyBuZXh0ICsgJ30nLFxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgfSAvL+WPluaWh+S7tuWkuVxcbiAgICAgICAgLy9sb2cocmVzY29kKTtcXG5cXG4gICAgICAgIGlmIChKU09OLnBhcnNlKHJlc2NvZCkubmV4dF9tYXJrZXIpIHtcXG4gICAgICAgICAgICBsZXQgbWFya2VyID0gSlNPTi5wYXJzZShyZXNjb2QpLm5leHRfbWFya2VyO1xcbiAgICAgICAgICAgIGlmIChtYXJrZXIubGVuZ3RoID4gMTApIHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ25leHRwYWdlJywgbWFya2VyKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBjbGVhck15VmFyKCduZXh0cGFnZScpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHZhciBjb250cyA9IEpTT04ucGFyc2UocmVzY29kKS5pdGVtcztcXG4gICAgICAgIHZhciB6aW11bGlzdCA9IFtdO1xcbiAgICAgICAgY29udHMuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICBpZiAoY29uZmlnLnN1YnMuaW5jbHVkZXMoaXRlbS5maWxlX2V4dGVuc2lvbikpIHtcXG4gICAgICAgICAgICAgICAgemltdWxpc3QucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICBleHQ6IGl0ZW0uZmlsZV9leHRlbnNpb24sXFxuICAgICAgICAgICAgICAgICAgICBmaWxlX2lkOiBpdGVtLmZpbGVfaWQsXFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWUucmVwbGFjZSgnLicgKyBpdGVtLmZpbGVfZXh0ZW5zaW9uLCAnJylcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KVxcblxcbiAgICAgICAgdmFyIHR1aXNvbmcgPSBbXTtcXG4gICAgICAgIGZvciAodmFyIGkgaW4gY29udHMpIHtcXG4gICAgICAgICAgICB2YXIgbGlzdHlwID0gY29udHNbaV0udHlwZTtcXG4gICAgICAgICAgICBpZiAobGlzdHlwICE9ICdmb2xkZXInKSB7XFxuICAgICAgICAgICAgICAgIHZhciB6aW11ID0ge307XFxuICAgICAgICAgICAgICAgIHZhciBjYXRlID0gY29udHNbaV0uY2F0ZWdvcnk7XFxuICAgICAgICAgICAgICAgIHZhciBmbmFtZSA9IGNvbnRzW2ldLm5hbWU7XFxuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gZm5hbWUucmVwbGFjZShjb250c1tpXS5maWxlX2V4dGVuc2lvbiwgJycpO1xcblxcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gemltdWxpc3QuZmluZEluZGV4KHggPT4gbmFtZS5pbmNsdWRlcyh4Lm5hbWUpKTtcXG4gICAgICAgICAgICAgICAgaWYgKGlkeCAhPT0gLTEgJiYgIWNvbmZpZy5zdWJzLmluY2x1ZGVzKGNvbnRzW2ldLmZpbGVfZXh0ZW5zaW9uKSkge1xcbiAgICAgICAgICAgICAgICAgICAgemltdWxpc3Quc3BsaWNlKGlkeCwgMSk7XFxuICAgICAgICAgICAgICAgICAgICB6aW11ID0gemltdWxpc3RbaWR4XTtcXG4gICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICB2YXIgbG9uZ2MgPSBbXTtcXG4gICAgICAgICAgICAgICAgbGV0IHN1Ym5hbWUgPSBzdG9yYWdlMC5nZXRNeVZhcignbW91bnR6aW11JywgJycpO1xcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLnN1YnMuaW5jbHVkZXMoY29udHNbaV0uZmlsZV9leHRlbnNpb24pKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IGNvbnRzW2ldO1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIHptID0ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dDogaXRlbS5maWxlX2V4dGVuc2lvbixcXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlX2lkOiBpdGVtLmZpbGVfaWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLnJlcGxhY2UoJy4nICsgaXRlbS5maWxlX2V4dGVuc2lvbiwgJycpXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBsb25nYyA9IFt7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLmjILovb3lrZfluZU6IFxcXCIgKyAoc3VibmFtZSA9PSAnJyA/ICfml6AnIDogc3VibmFtZS5uYW1lKycuJytzdWJuYW1lLmV4dCksXFxuICAgICAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHptKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKCdtb3VudHppbXUnLCB6bSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mjILovb3lrozmiJDvvIzlvZPliY3lrZfluZXmlofku7Y6ICcgKyB6bS5uYW1lKycuJyt6bS5leHQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgem0pLFxcbiAgICAgICAgICAgICAgICAgICAgfV1cXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIGxvbmdjID0gW3tcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuW9k+WJjeaMgui9veWtl+W5lTogXFxcIiArIChzdWJuYW1lID09ICcnID8gJ+aXoCcgOiBzdWJuYW1lLm5hbWUrJy4nK3N1Ym5hbWUuZXh0KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgICAgICB9XTtcXG4gICAgICAgICAgICAgICAgfVxcblxcblxcbiAgICAgICAgICAgICAgICBpZiAoY2F0ZSA9PSAndmlkZW8nKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSAn8J+TuicgKyBjb250c1tpXS5uYW1lO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNhdGUgPT0gJ2RvYycpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICfwn5OWJyArIGNvbnRzW2ldLm5hbWU7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2F0ZSA9PSAnaW1hZ2UnKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSAn8J+WvCcgKyBjb250c1tpXS5uYW1lO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNhdGUgPT0gJ3ppcCcpIHtcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICfwn5OmJyArIGNvbnRzW2ldLm5hbWU7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSBjb250c1tpXS5uYW1lXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQoY29udHNbaV0uZmlsZV9pZCkubGF6eVJ1bGUoKHNoYXJlSWQsIHNoYXJldG9rZW4sIGNhdGUsIGZuYW1lLCByZWZ0b2tlbiwgemltdSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hbGlsYXp5XFxcIikoc2hhcmVJZCwgaW5wdXQsIGNhdGUsIHppbXUpO1xcbiAgICAgICAgICAgICAgICAgICAgfSwgc2hhcmVJZCwgc2hhcmV0b2tlbiwgY2F0ZSwgZm5hbWUsIHJlZnRva2VuLCB6aW11KSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IGZvcm1hdERhdGUoY29udHNbaV0udXBkYXRlZF9hdCkgKyAnICAnICsgZm9ybWF0U2l6ZShjb250c1tpXS5zaXplKSxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGNvbnRzW2ldLmZpbGVfaWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9uZ0NsaWNrOmxvbmdjXFxuICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnXFxuXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfwn5OCJyArIGNvbnRzW2ldLm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJ2hpa2VyOi8vZW1wdHknICsgY29udHNbaV0uZmlsZV9pZCArICc/Pz9meXBhZ2UnKS5ydWxlKChzaGFyZUlkLCBzaGFyZXRva2VuLCBwdXNobmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL3J1bGVsb29wJywge30pKS5ydWxlKTtcXG4gICAgICAgICAgICAgICAgICAgIH0sIHNoYXJlSWQsIHNoYXJldG9rZW4sIGNvbnRzW2ldLm5hbWUpLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbidcXG4gICAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgfSAvL2VuZCBpZlxcbiAgICAgICAgfSAvL2VuZCBmb3IgaVxcbiAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+asp+asp++8jOaKpemUmeS6huOAgicsXFxuICAgICAgICAgICAgdXJsOiBkZWNvZGVVUklDb21wb25lbnQoZ2V0UmVzQ29kZSgpLnNwbGl0KCcjIycpWzFdKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxuICAgICAgICB9KTtcXG4gICAgfVxcbn1cXG4vKlxcbnNldEhvbWVSZXN1bHQoe1xcbiAgICBkYXRhOiBpdGVtc1xcbn0pO1xcbiovXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLpmL/ph4zltYzlpZdcIixcInBhdGhcIjpcInJ1bGVsb29wXCIsXCJydWxlXCI6XCJ2YXIgaXRlbXMgPSBbXTtcXG5cXG5mdW5jdGlvbiBmb3JtYXREYXRlKF9kYXRlLCBfZm10KSB7XFxuICAgIGxldCBmbXQgPSBfZm10IHx8IFxcXCJ5eXl5LU1NLWRkIEhIOm1tOnNzXFxcIjtcXG4gICAgY29uc3QgZGF0ZSA9ICFpc05hTihfZGF0ZSkgPyBuZXcgRGF0ZShfZGF0ZSAqIDEwMDApIDogbmV3IERhdGUoX2RhdGUpO1xcbiAgICBjb25zdCBvID0ge1xcbiAgICAgICAgXFxcIk0rXFxcIjogZGF0ZS5nZXRNb250aCgpICsgMSwgLy/mnIjku70gXFxuICAgICAgICBcXFwiZCtcXFwiOiBkYXRlLmdldERhdGUoKSwgLy/ml6UgXFxuICAgICAgICBcXFwiaCtcXFwiOiBkYXRlLmdldEhvdXJzKCkgJSAxMiA9PSAwID8gMTIgOiBkYXRlLmdldEhvdXJzKCkgJSAxMixcXG4gICAgICAgIFxcXCJIK1xcXCI6IGRhdGUuZ2V0SG91cnMoKSwgLy/lsI/ml7YgXFxuICAgICAgICBcXFwibStcXFwiOiBkYXRlLmdldE1pbnV0ZXMoKSwgLy/liIYgXFxuICAgICAgICBcXFwicytcXFwiOiBkYXRlLmdldFNlY29uZHMoKSwgLy/np5IgXFxuICAgICAgICBcXFwicStcXFwiOiBNYXRoLmZsb29yKChkYXRlLmdldE1vbnRoKCkgKyAzKSAvIDMpLCAvL+Wto+W6piBcXG4gICAgICAgIFxcXCJTXFxcIjogZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSAvL+avq+enkiBcXG4gICAgfTtcXG4gICAgaWYgKC8oeSspLy50ZXN0KGZtdCkpIHtcXG4gICAgICAgIGZtdCA9IGZtdC5yZXBsYWNlKFJlZ0V4cC4kMSwgKGRhdGUuZ2V0RnVsbFllYXIoKSArIFxcXCJcXFwiKS5zdWJzdHIoNCAtIFJlZ0V4cC4kMS5sZW5ndGgpKTtcXG4gICAgfVxcbiAgICBmb3IgKGxldCBrIGluIG8pIHtcXG4gICAgICAgIGlmIChuZXcgUmVnRXhwKFxcXCIoXFxcIiArIGsgKyBcXFwiKVxcXCIpLnRlc3QoZm10KSkge1xcbiAgICAgICAgICAgIGZtdCA9IGZtdC5yZXBsYWNlKFJlZ0V4cC4kMSwgKFJlZ0V4cC4kMS5sZW5ndGggPT0gMSkgPyAob1trXSkgOiAoKFxcXCIwMFxcXCIgKyBvW2tdKS5zdWJzdHIoKFxcXCJcXFwiICsgb1trXSkubGVuZ3RoKSkpO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiBmbXQ7XFxufTtcXG5cXG5mdW5jdGlvbiBmb3JtYXRTaXplKHNpemUpIHtcXG4gICAgaWYgKCFzaXplKSB7XFxuICAgICAgICByZXR1cm4gJyc7XFxuICAgIH1cXG4gICAgY29uc3QgdW5pdHMgPSBbJ0InLCAnS0InLCAnTUInLCAnR0InLCAnVEInLCAnUEInLCAnRUInLCAnWkInLCAnWUInXTtcXG4gICAgbGV0IGkgPSAwO1xcbiAgICB3aGlsZSAoc2l6ZSA+PSAxMDI0KSB7XFxuICAgICAgICBzaXplIC89IDEwMjQ7XFxuICAgICAgICBpKys7XFxuICAgIH1cXG4gICAgc2l6ZSA9IGkgPyBOdW1iZXIoc2l6ZS50b0ZpeGVkKDIpKSA6IHNpemU7XFxuICAgIHJldHVybiBgJHtzaXplfSAke3VuaXRzW2ldfWA7XFxufVxcbi8vbGV0IHR2aXAgPSBnZXRJdGVtKCdoaWtlcnR2Ym94c2V0JywgJycpO1xcblxcbi8vbG9nKGdldFJlc0NvZGUoKSk7XFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICBjbGVhck15VmFyKCduZXh0cGFnZScpO1xcbn1cXG5pZiAoTVlfUEFHRSA+IDEgJiYgZ2V0TXlWYXIoJ25leHRwYWdlJywgJycpID09ICcnKSB7XFxuICAgIGxvZygn5rKh5pyJ5LiL5LiA6aG1Jyk7XFxufSBlbHNlIHtcXG4gICAgbGV0IHJlZnRva2VuID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9pY3kvaWN5LWFsaS10b2tlbi5qc29uJywge30pKVswXS5yZWZyZXNoX3Rva2VuO1xcblxcbiAgICBsZXQgbmV4dCA9IGdldE15VmFyKCduZXh0cGFnZScsICcnKSAhPSAnJyA/ICcsXFxcIm1hcmtlclxcXCI6XFxcIicgKyBnZXRNeVZhcignbmV4dHBhZ2UnKSArICdcXFwiJyA6ICcnO1xcblxcbiAgICB2YXIgcmVzY29kID0gZmV0Y2goJ2h0dHBzOi8vYXBpLmFsaXl1bmRyaXZlLmNvbS9hZHJpdmUvdjMvZmlsZS9saXN0Jywge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXFxuICAgICAgICAgICAgJ1gtU2hhcmUtVG9rZW4nOiBzaGFyZXRva2VuXFxuICAgICAgICB9LFxcbiAgICAgICAgYm9keTogJ3tcXFwic2hhcmVfaWRcXFwiOlxcXCInICsgc2hhcmVJZCArICdcXFwiLFxcXCJwYXJlbnRfZmlsZV9pZFxcXCI6XFxcIicgKyBnZXRSZXNDb2RlKCkuc3BsaXQoJz8/PycpWzBdICsgJ1xcXCIsXFxcImxpbWl0XFxcIjoxMDAsXFxcImltYWdlX3RodW1ibmFpbF9wcm9jZXNzXFxcIjpcXFwiaW1hZ2UvcmVzaXplLHdfMTYwL2Zvcm1hdCxqcGVnXFxcIixcXFwiaW1hZ2VfdXJsX3Byb2Nlc3NcXFwiOlxcXCJpbWFnZVxcXFwvcmVzaXplLHdfMTkyMC9mb3JtYXQsanBlZ1xcXCIsXFxcInZpZGVvX3RodW1ibmFpbF9wcm9jZXNzXFxcIjpcXFwidmlkZW8vc25hcHNob3QsdF8xMDAwLGZfanBnLGFyX2F1dG8sd18zMDBcXFwiLFxcXCJvcmRlcl9ieVxcXCI6XFxcIm5hbWVcXFwiLFxcXCJvcmRlcl9kaXJlY3Rpb25cXFwiOlxcXCJBU0NcXFwiJyArIG5leHQgKyAnfScsXFxuICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICB9KTtcXG4gICAgLy9sb2cocmVzY29kKTtcXG4gICAgaWYgKEpTT04ucGFyc2UocmVzY29kKS5uZXh0X21hcmtlcikge1xcbiAgICAgICAgbGV0IG1hcmtlciA9IEpTT04ucGFyc2UocmVzY29kKS5uZXh0X21hcmtlcjtcXG4gICAgICAgIGlmIChtYXJrZXIubGVuZ3RoID4gMTApIHtcXG4gICAgICAgICAgICBwdXRNeVZhcignbmV4dHBhZ2UnLCBtYXJrZXIpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBjbGVhck15VmFyKCduZXh0cGFnZScpO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIHZhciBjb250cyA9IEpTT04ucGFyc2UocmVzY29kKS5pdGVtcztcXG4gICAgdmFyIHppbXVsaXN0ID0gW107XFxuICAgIGNvbnRzLmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICBpZiAoY29uZmlnLnN1YnMuaW5jbHVkZXMoaXRlbS5maWxlX2V4dGVuc2lvbikpIHtcXG4gICAgICAgICAgICB6aW11bGlzdC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgZXh0OiBpdGVtLmZpbGVfZXh0ZW5zaW9uLFxcbiAgICAgICAgICAgICAgICBmaWxlX2lkOiBpdGVtLmZpbGVfaWQsXFxuICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0ubmFtZS5yZXBsYWNlKCcuJyArIGl0ZW0uZmlsZV9leHRlbnNpb24sICcnKVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9XFxuICAgIH0pXFxuICAgIHZhciB0dWlzb25nID0gW107XFxuICAgIGZvciAodmFyIGkgaW4gY29udHMpIHtcXG4gICAgICAgIHZhciBsaXN0eXAgPSBjb250c1tpXS50eXBlO1xcbiAgICAgICAgaWYgKGxpc3R5cCAhPSAnZm9sZGVyJykge1xcbiAgICAgICAgICAgIHZhciB6aW11ID0ge307XFxuICAgICAgICAgICAgdmFyIGNhdGUgPSBjb250c1tpXS5jYXRlZ29yeTtcXG4gICAgICAgICAgICB2YXIgZm5hbWUgPSBjb250c1tpXS5uYW1lO1xcbiAgICAgICAgICAgIHZhciBuYW1lID0gZm5hbWUucmVwbGFjZShjb250c1tpXS5maWxlX2V4dGVuc2lvbiwgJycpO1xcblxcbiAgICAgICAgICAgIHZhciBpZHggPSB6aW11bGlzdC5maW5kSW5kZXgoeCA9PiBuYW1lLmluY2x1ZGVzKHgubmFtZSkpO1xcbiAgICAgICAgICAgIGlmIChpZHggIT09IC0xICYmICFjb25maWcuc3Vicy5pbmNsdWRlcyhjb250c1tpXS5maWxlX2V4dGVuc2lvbikpIHtcXG4gICAgICAgICAgICAgICAgemltdWxpc3Quc3BsaWNlKGlkeCwgMSk7XFxuICAgICAgICAgICAgICAgIHppbXUgPSB6aW11bGlzdFtpZHhdO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICB2YXIgY2F0ZSA9IGNvbnRzW2ldLmNhdGVnb3J5O1xcbiAgICAgICAgICAgIHZhciBmbmFtZSA9IGNvbnRzW2ldLm5hbWU7XFxuICAgICAgICAgICAgaWYgKGNhdGUgPT0gJ3ZpZGVvJykge1xcbiAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSAn8J+TuicgKyBjb250c1tpXS5uYW1lO1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2F0ZSA9PSAnZG9jJykge1xcbiAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSAn8J+TlicgKyBjb250c1tpXS5uYW1lO1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2F0ZSA9PSAnaW1hZ2UnKSB7XFxuICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICfwn5a8JyArIGNvbnRzW2ldLm5hbWU7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChjYXRlID09ICd6aXAnKSB7XFxuICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICfwn5OmJyArIGNvbnRzW2ldLm5hbWU7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gY29udHNbaV0ubmFtZVxcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICB2YXIgbG9uZ2MgPSBbXTtcXG4gICAgICAgICAgICBsZXQgc3VibmFtZSA9IHN0b3JhZ2UwLmdldE15VmFyKCdtb3VudHppbXUnLCAnJyk7XFxuICAgICAgICAgICAgaWYgKGNvbmZpZy5zdWJzLmluY2x1ZGVzKGNvbnRzW2ldLmZpbGVfZXh0ZW5zaW9uKSkge1xcbiAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IGNvbnRzW2ldO1xcbiAgICAgICAgICAgICAgICB2YXIgem0gPSB7XFxuICAgICAgICAgICAgICAgICAgICBleHQ6IGl0ZW0uZmlsZV9leHRlbnNpb24sXFxuICAgICAgICAgICAgICAgICAgICBmaWxlX2lkOiBpdGVtLmZpbGVfaWQsXFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWUucmVwbGFjZSgnLicgKyBpdGVtLmZpbGVfZXh0ZW5zaW9uLCAnJylcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBsb25nYyA9IFt7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuaMgui9veWtl+W5lTogXFxcIiArIChzdWJuYW1lID09ICcnID8gJ+aXoCcgOiBzdWJuYW1lLm5hbWUrJy4nK3N1Ym5hbWUuZXh0KSxcXG4gICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCh6bSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnB1dE15VmFyKCdtb3VudHppbXUnLCB6bSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aMgui9veWujOaIkO+8jOW9k+WJjeWtl+W5leaWh+S7tjogJyArIHptLm5hbWUrJy4nK3ptLmV4dDtcXG4gICAgICAgICAgICAgICAgICAgIH0sIHptKSxcXG4gICAgICAgICAgICAgICAgfV1cXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBsb25nYyA9IFt7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuW9k+WJjeaMgui9veWtl+W5lTogXFxcIiArIChzdWJuYW1lID09ICcnID8gJ+aXoCcgOiBzdWJuYW1lLm5hbWUrJy4nK3N1Ym5hbWUuZXh0KSxcXG4gICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgIH1dO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBpdGVtcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoY29udHNbaV0uZmlsZV9pZCkubGF6eVJ1bGUoKHNoYXJlSWQsIHNoYXJldG9rZW4sIGNhdGUsIGZuYW1lLCByZWZ0b2tlbix6aW11KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYWxpbGF6eVxcXCIpKHNoYXJlSWQsIGlucHV0LCBjYXRlLHppbXUpO1xcbiAgICAgICAgICAgICAgICB9LCBzaGFyZUlkLCBzaGFyZXRva2VuLCBjYXRlLCBmbmFtZSwgcmVmdG9rZW4semltdSksXFxuICAgICAgICAgICAgICAgIGRlc2M6IGZvcm1hdERhdGUoY29udHNbaV0udXBkYXRlZF9hdCkgKyAnICAnICsgZm9ybWF0U2l6ZShjb250c1tpXS5zaXplKSxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGlkOiBjb250c1tpXS5maWxlX2lkLFxcbiAgICAgICAgICAgICAgICAgICAgbG9uZ0NsaWNrOiBsb25nY1xcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfMSdcXG5cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn8J+TgicgKyBjb250c1tpXS5uYW1lLFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoJ2hpa2VyOi8vZW1wdHknICsgY29udHNbaV0uZmlsZV9pZCArICc/Pz9meXBhZ2UnKS5ydWxlKChzaGFyZUlkLCBzaGFyZXRva2VuLCBwdXNobmFtZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvcnVsZWxvb3AnLCB7fSkpLnJ1bGUpO1xcbiAgICAgICAgICAgICAgICB9LCBzaGFyZUlkLCBzaGFyZXRva2VuLCBjb250c1tpXS5uYW1lKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbidcXG4gICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgIH0gLy9lbmQgaWZcXG5cXG4gICAgfVxcbn1cXG5zZXRSZXN1bHQoaXRlbXMpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6Zi/6YeM5o6o6YCBXCIsXCJwYXRoXCI6XCJwdXNoXCIsXCJydWxlXCI6XCJqczpcXG4vL2xvZyhNWV9VUkwpO1xcbnZhciBpdGVtcyA9IFtdO1xcbnZhciByZWFsdXJsID0gTVlfVVJMLnNwbGl0KCcjIycpWzFdLnNwbGl0KCc/Pz8nKVswXTtcXG5pZiAoZGVjb2RlVVJJQ29tcG9uZW50KHJlYWx1cmwpLmluY2x1ZGVzKCd3d3cuYWxpeXVuZHJpdmUnKSAmJiAhcmVhbHVybC5pbmNsdWRlcygnJTNCJTdCJykpIHtcXG4gICAgZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2Uvc2hhcmlkJywge30pKS5ydWxlKVxcbn1cXG5zZXRSZXN1bHQoaXRlbXMpO1wifV0sXCJwYXJhbXNcIjpcIntcXFwiaWRcXFwiOlxcXCJfX2FwcDFAMVxcXCIsXFxcImluaGVyaXRUaXRsZVxcXCI6ZmFsc2V9XCIsXCJzYXZlZFwiOmZhbHNlLFwidGl0bGVcIjpcIuS6keebmOWQm1wiLFwidmVyc2lvblwiOjAsXCJ1cmxcIjpcImhpa2VyOi8vZW1wdHkjI2h0dHBzJTNBJTJGJTJGd3d3LmFsaXl1bmRyaXZlLmNvbSUyRnMlMkZWZzhTTmdtNjN6ZiUyRmZvbGRlciUyRjYyNDZkMDViYTM5MmVjZTYzMzAwNGE4MmIyYmY4NzNhMTQ3N2UwNjQ/Pz9meXBhZ2VcIixcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJmaW5kX3J1bGVcIjpcImpzOlxcbi8vbG9nKE1ZX1VSTCk7XFxudmFyIGl0ZW1zID0gW107XFxudmFyIHJlYWx1cmwgPSBNWV9VUkwuc3BsaXQoJyMjJylbMV0uc3BsaXQoJz8/PycpWzBdO1xcbmlmIChkZWNvZGVVUklDb21wb25lbnQocmVhbHVybCkuaW5jbHVkZXMoJ3d3dy5hbGl5dW5kcml2ZScpICYmICFyZWFsdXJsLmluY2x1ZGVzKCclM0IlN0InKSkge1xcbiAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9zaGFyaWQnLCB7fSkpLnJ1bGUpXFxufVxcbnNldFJlc3VsdChpdGVtcyk7XCIsXCJncm91cFwiOlwi4pGg572R55uYXCIsXCJ1YVwiOlwibW9iaWxlXCIsXCJwcmVSdWxlXCI6XCJpbml0Q29uZmlnKHtcXG4gICAgc3ViczogWydhc3MnLCAnc3J0JywgJ3Z0dCcsXFxcIlNSVFxcXCIsXFxcIkFTU1xcXCIsXFxcIlZUVFxcXCJdXFxufSk7XCIsXCJwYWdlc1wiOlwiW3tcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuinhOWImeWIl+ihqFxcXCIsXFxcInBhdGhcXFwiOlxcXCJkYXRhXFxcIixcXFwicnVsZVxcXCI6XFxcInZhciB3cmFwdSA9ICh1KSA9PiB7XFxcXG4gICAgaWYgKGNvbmZpZy5tb2RlID09IFxcXFxcXFwi5pys5Zyw6L2s56CBXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2UvcHVzaD91cmw9aGlrZXI6Ly9lbXB0eSMjJyArIGVuY29kZVVSSUNvbXBvbmVudCh1KSArICc/Pz9meXBhZ2UnXFxcXG4gICAgfVxcXFxuICAgIGlmIChjb25maWcubW9kZSA9PSBcXFxcXFxcIkpvZeeJiOmYv+mHjOS6keebmFxcXFxcXFwiKSB7XFxcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3NoYXJlP3BhZ2U9ZnlwYWdlJnJ1bGU96Zi/6YeM5LqR55uYJnNoYXJlX3VybD0nICsgdTtcXFxcbiAgICB9XFxcXG4gICAgaWYgKGNvbmZpZy5tb2RlID09IFxcXFxcXFwi5LqR55uY5rGH5b2xXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD0nICsgdSArICc/P2Z5cGFnZSc7XFxcXG4gICAgfVxcXFxuICAgIGlmICgvYWxpeXVuZHJpdmUvLnRlc3QodSkpIHtcXFxcbiAgICAgICAgY29uc3QgW2xpbmssIF9zaGFyZV9wd2RdID0gdS5zcGxpdCgnP3NoYXJlX3B3ZD0nKTtcXFxcbiAgICAgICAgY29uc3QgW19saW5rLCBfZm9sZGVySURdID0gbGluay5zcGxpdCgnL2ZvbGRlci8nKTtcXFxcbiAgICAgICAgbGV0IHNoYXJlX3B3ZCA9IChfc2hhcmVfcHdkIHx8ICcnKS5zcGxpdCgnI25hbWU9JylbMF0gfHwgJyc7XFxcXG4gICAgICAgIGxldCBzaGFyZUlkID0gX2xpbmsuc3BsaXQoJ2NvbS9zLycpWzFdO1xcXFxuICAgICAgICByZXR1cm4gJ3NtYXJ0ZHJpdmU6Ly9zaGFyZS9icm93c2U/c2hhcmVJZD0nICsgc2hhcmVJZCArICcmc2hhcmVQd2Q9JyArIHNoYXJlX3B3ZDtcXFxcbiAgICB9XFxcXG4gICAgcmV0dXJuIFxcXFxcXFwid2ViOi8vXFxcXFxcXCIgKyB1O1xcXFxufTtcXFxcblxcXFxudmFyIGNoZWNrYWxpID0gKHJlYWx1cmwpID0+IHtcXFxcbiAgICB0cnkge1xcXFxuICAgICAgICBsZXQgc2hhcmVJZCA9IHJlYWx1cmwuc3BsaXQoXFxcXFxcXCJjb20vcy9cXFxcXFxcIilbMV0uc3Vic3RyaW5nKDAsIDExKTtcXFxcbiAgICAgICAgaWYgKHJlYWx1cmwuaW5jbHVkZXMoXFxcXFxcXCJjb20vcy9cXFxcXFxcIikgJiYgcmVhbHVybCAhPSBcXFxcXFxcIlxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICBsZXQgc2hhcmUgPSBmZXRjaChcXFxcXFxcImh0dHBzOi8vYXBpLmFsaXl1bmRyaXZlLmNvbS9hZHJpdmUvdjMvc2hhcmVfbGluay9nZXRfc2hhcmVfYnlfYW5vbnltb3VzXFxcXFxcXCIsIHtcXFxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXFxcXG4gICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiVXNlci1BZ2VudFxcXFxcXFwiOiBQQ19VQSxcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJSZWZlcmVyXFxcXFxcXCI6IFxcXFxcXFwiaHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tL1xcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICAgICBib2R5OiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIFxcXFxcXFwic2hhcmVfaWRcXFxcXFxcIjogc2hhcmVJZFxcXFxuICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgaWYgKHNoYXJlLmluY2x1ZGVzKFxcXFxcXFwic2hhcmVfbGluayBpc1xcXFxcXFwiKSB8fCBzaGFyZS5pbmNsdWRlcyhcXFxcXFxcInNoYXJlX2xpbmsgY2Fubm90XFxcXFxcXCIpKSByZXR1cm4gZmFsc2U7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9IGNhdGNoIChlKSB7fVxcXFxuICAgIHJldHVybiB0cnVlO1xcXFxufVxcXFxuXFxcXG5sZXQgcnVsZXMgPSBbe1xcXFxuICAgICAgICBuYW1lOiBcXFxcXFxcIuS6keebmOi1hOa6kFxcXFxcXFwiLFxcXFxuICAgICAgICBwYWdlOiB0cnVlLFxcXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxcXG4gICAgICAgICAgICBsZXQgdXJsID0gXFxcXFxcXCJodHRwczovL3Jlcy55dW5wYW4ud2luLz9QYWdlSW5kZXg9XFxcXFxcXCIgKyBwYWdlICsgXFxcXFxcXCImUGFnZVNpemU9MTImS2V5d29yZD1cXFxcXFxcIiArIHMgKyBcXFxcXFxcIiZUeXBlPSZUYWc9XFxcXFxcXCI7XFxcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QodXJsLCB7XFxcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogXFxcXFxcXCJodHRwczovL3Jlcy55dW5wYW4ud2luL1xcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSk7XFxcXG5cXFxcbiAgICAgICAgICAgIGxldCBhcnIgPSBwZGZhKGh0bWwsIFxcXFxcXFwibWFpbiYmLmNhcmRcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAvL2xvZyhhcnIpO1xcXFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXFxcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IGl0ID0gYXJyW2ldO1xcXFxuICAgICAgICAgICAgICAgIGxldCB1ID0gcGRmaChpdCwgXFxcXFxcXCIuY2FyZC1saW5rLDEmJm9uY2xpY2tcXFxcXFxcIikubWF0Y2goL2h0dHBzOlxcXFxcXFxcL1xcXFxcXFxcLyh3d3dcXFxcXFxcXC5hbGl5dW5kcml2ZVxcXFxcXFxcLmNvbVxcXFxcXFxcL3N8YWx5d3BcXFxcXFxcXC5uZXQpXFxcXFxcXFwvXFxcXFxcXFx3Ki9nKSB8fCBbXTtcXFxcbiAgICAgICAgICAgICAgICB1ID0gdS5sZW5ndGggPiAwID8gdVswXSA6IHVybDtcXFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogcGRmaChpdCwgXFxcXFxcXCIuY2FyZC10aXRsZSYmVGV4dFxcXFxcXFwiKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgcGljX3VybDogcGQoaXQsIFxcXFxcXFwiaW1nJiZzcmNcXFxcXFxcIiwgdXJsKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD0nICsgdSArICc/P2Z5cGFnZScsXFxcXG4gICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQodSkgKyAnPz8/ZnlwYWdlJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB3cmFwdSh1KSxcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcXFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT7kupHnm5jotYTmupA8L2ZvbnQ+Jm5ic3A7XFxcXFxcXCIgKyAocGRmaChpdCwgXFxcXFxcXCIuY2FyZC10ZXh0LC0xJiZUZXh0XFxcXFxcXCIpKSArIFxcXFxcXFwiXFxcXFxcXFxuXFxcXFxcXCIgKyAodSksXFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICByZXR1cm4gZDtcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sIHtcXFxcbiAgICAgICAgbmFtZTogXFxcXFxcXCJVUOS6keaQnFxcXFxcXFwiLFxcXFxuICAgICAgICBwYWdlOiB0cnVlLFxcXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxcXG4gICAgICAgICAgICBsZXQgdXJsID0gXFxcXFxcXCJodHRwczovL2FwaS51cHl1bnNvMi5jb20vc2VhcmNoP2tleXdvcmQ9XFxcXFxcXCIgKyBzICsgXFxcXFxcXCImcGFnZT1cXFxcXFxcIiArIHBhZ2UgKyBcXFxcXFxcIiZzX3R5cGU9MVxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KHVybCwge1xcXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJSZWZlcmVyXFxcXFxcXCI6IFxcXFxcXFwiaHR0cHM6Ly93d3cudXB5dW5zby5jb21cXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogXFxcXFxcXCJjb2RlPTE5MTlcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgLy9sb2coYmFzZTY0RGVjb2RlKGh0bWwpKTtcXFxcbiAgICAgICAgICAgIGxldCBhcnIgPSBKU09OLnBhcnNlKGJhc2U2NERlY29kZShodG1sKSkucmVzdWx0Lml0ZW1zO1xcXFxuICAgICAgICAgICAgLy9sb2coYXJyKTtcXFxcbiAgICAgICAgICAgIGxldCBkID0gW107XFxcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xcXFxuICAgICAgICAgICAgICAgIGxldCBpdCA9IGFycltpXTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgdSA9IGl0LnBhZ2VfdXJsO1xcXFxuICAgICAgICAgICAgICAgIC8vdSA9IHUubGVuZ3RoID4gMCA/IHVbMF0gOiB1cmw7XFxcXG4gICAgICAgICAgICAgICAgaWYgKCF1LmluY2x1ZGVzKFxcXFxcXFwiYWxpeXVuZHJpdmVcXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdC50aXRsZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD0nICsgdSArICc/P2Z5cGFnZScsXFxcXG4gICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQodSkgKyAnPz8/ZnlwYWdlJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB3cmFwdSh1KSxcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcXFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT5VUOS6keaQnDwvZm9udD4mbmJzcDtcXFxcXFxcIiArIFxcXFxcXFwiXFxcXFxcXFxuXFxcXFxcXCIgKyAodSksXFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG5cXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHJldHVybiBkO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSwge1xcXFxuICAgICAgICBuYW1lOiBcXFxcXFxcIueMq+eLuOebmOaQnFxcXFxcXFwiLFxcXFxuICAgICAgICBwYWdlOiBmYWxzZSxcXFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcXFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KFxcXFxcXFwiaHR0cHM6Ly93d3cuYWxpcGFuc291LmNvbS9zZWFyY2g/az1cXFxcXFxcIiArIHMsIHtcXFxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiUmVmZXJlclxcXFxcXFwiOiBcXFxcXFxcImh0dHBzOi8vd3d3LmFsaXBhbnNvdS5jb20vc2VhcmNoP2s9XFxcXFxcXCIgKyBzXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICBsZXQgYXJyID0gcGRmYShodG1sLCBcXFxcXFxcIiNhcHAmJmFcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAvL2xvZyhhcnIpO1xcXFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXFxcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IGl0ID0gXFxcXFxcXCI8ZGl2PlxcXFxcXFwiICsgYXJyW2ldICsgXFxcXFxcXCI8L2Rpdj5cXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICBsZXQgdSA9IHBkZmgoaXQsIFxcXFxcXFwiYSYmaHJlZlxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICAvL2xvZyh1KTtcXFxcbiAgICAgICAgICAgICAgICBpZiAoIXUuaW5jbHVkZXMoXFxcXFxcXCIvcy9cXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIHUgPSBcXFxcXFxcImh0dHBzOi8vd3d3LmFsaXBhbnNvdS5jb21cXFxcXFxcIiArIHUucmVwbGFjZShcXFxcXFxcIi9zL1xcXFxcXFwiLCBcXFxcXFxcIi9jdi9cXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBkZmgoaXQsIFxcXFxcXFwidGVtcGxhdGUmJlRleHRcXFxcXFxcIiksXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJCh1KS5sYXp5UnVsZSgod3JhcHUpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdChpbnB1dCwge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogXFxcXFxcXCJub19zaG93X2RvbmF0ZT0xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiUmVmZXJlclxcXFxcXFwiOiBpbnB1dC5yZXBsYWNlKFxcXFxcXFwiL2N2L1xcXFxcXFwiLCBcXFxcXFxcIi9zL1xcXFxcXFwiKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3Q6IGZhbHNlXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgPSBwYXJzZURvbUZvckh0bWwoaHRtbCwgJ2EmJmhyZWYnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vdmFyIF9saW5rcyA9IGh0bWwubWF0Y2goL2h0dHBzOlxcXFxcXFxcL1xcXFxcXFxcLyh3d3dcXFxcXFxcXC5hbGl5dW5kcml2ZVxcXFxcXFxcLmNvbVxcXFxcXFxcL3N8YWx5d3BcXFxcXFxcXC5uZXQpXFxcXFxcXFwvXFxcXFxcXFx3Ki9nKSB8fCBbXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9nKF9saW5rcyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaHRtbC5sZW5ndGggPiAwKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXR1cm4gJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyBfbGlua3NbMF0gKyAnPz9meXBhZ2UnO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcmV0dXJuICdoaWtlcjovL3BhZ2UvcHVzaD91cmw9aGlrZXI6Ly9lbXB0eSMjJyArIGVuY29kZVVSSUNvbXBvbmVudChodG1sKSArICc/Pz9meXBhZ2UnO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwdShodG1sKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9LCB3cmFwdSksXFxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXFxcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+54yr54u455uY5pCcPC9mb250PiZuYnNwO1xcXFxcXFwiICsgcGRmaChpdCwgXFxcXFxcXCJ0ZW1wbGF0ZSwxJiZUZXh0XFxcXFxcXCIpLFxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9LCB7XFxcXG4gICAgICAgIG5hbWU6IFxcXFxcXFwi5piT5pCcXFxcXFxcXCIsXFxcXG4gICAgICAgIHBhZ2U6IHRydWUsXFxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXFxcbiAgICAgICAgICAgIGV2YWwoZ2V0Q3J5cHRvSlMoKSk7XFxcXG5cXFxcbiAgICAgICAgICAgIGZ1bmN0aW9uIGtleWVuKHN0cikge1xcXFxuICAgICAgICAgICAgICAgIHZhciBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShcXFxcXFxcIjRPVG9TY1VGT2FlVlRySEVcXFxcXFxcIiksXFxcXG4gICAgICAgICAgICAgICAgICAgIGl2ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoXFxcXFxcXCI5Q0xHYW8xdkhLcW0xN096XFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgIHZhciBlbmNyeXB0ZWQgPSBDcnlwdG9KUy5BRVMuZGVjcnlwdCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNpcGhlcnRleHQ6IENyeXB0b0pTLmVuYy5CYXNlNjQucGFyc2Uoc3RyKVxcXFxuICAgICAgICAgICAgICAgIH0sIGtleSwge1xcXFxuICAgICAgICAgICAgICAgICAgICBpdjogaXYsXFxcXG4gICAgICAgICAgICAgICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLFxcXFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczdcXFxcbiAgICAgICAgICAgICAgICB9KS50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3J5cHRlZDtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdChcXFxcXFxcImh0dHBzOi8veWlzby5mdW4vYXBpL3NlYXJjaD9uYW1lPVxcXFxcXFwiICsgcyArIFxcXFxcXFwiJnBhZ2VObz1cXFxcXFxcIiArIHBhZ2UsIHtcXFxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiUmVmZXJlclxcXFxcXFwiOiBcXFxcXFxcImh0dHBzOi8veWlzby5mdW4vaW5mbz9zZWFyY2hLZXk9XFxcXFxcXCIgKyBzLFxcXFxuICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBnZXRJdGVtKCd5aXNvdWNvb2tlJywgJycpXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAvL2xvZyhodG1sKTtcXFxcbiAgICAgICAgICAgIGlmIChodG1sLmluY2x1ZGVzKCfnmbvlvZXnlKjmiLfml6DpmZDliLYnKSkge1xcXFxuICAgICAgICAgICAgICAgIHZhciBpID0gMDtcXFxcbiAgICAgICAgICAgICAgICBkbyB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0eWltZ2xpbiA9ICdodHRwczovL3lpc28uZnVuL2FwaS91c2VyL2xvZ2luL2NhcHRjaGE/dD0nICsgcGFyc2VJbnQobmV3IERhdGUoKS5nZXRUaW1lKCkpICsgJyc7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCBpbWcgPSBjb252ZXJ0QmFzZTY0SW1hZ2UodHlpbWdsaW4pLnNwbGl0KCcsJylbMV07XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb2QgPSByZXF1ZXN0KCdodHRwczovL2FwaS5ubi5jaS9vY3IvYjY0L3RleHQnLCB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICd0ZXh0L3BsYWluJ1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IGltZyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICB2YXIgdmVyID0gSlNPTi5wYXJzZShyZXF1ZXN0KCdodHRwczovL3lpc28uZnVuL2FwaS91c2VyL2xvZ2luJywge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlZmVyZXInOiAnaHR0cHM6Ly95aXNvLmZ1bi9sb2dpbicsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Nvb2tpZSc6IGdldENvb2tpZSh0eWltZ2xpbilcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5OiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJ1c2VyTmFtZVxcXFxcXFwiOiBcXFxcXFxcInR2Ym94MjAyM1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwicGFzc3dvcmRcXFxcXFxcIjogXFxcXFxcXCJUdmJveDIwMjNcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcImNvZGVcXFxcXFxcIjogY29kXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXFxcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAodmVyLmNvZGUgPT0gMjAwKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2coJ+aYk+aQnOeZu+WFpemqjOivgeaIkOWKnycpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbSgneWlzb3Vjb29rZScsIGdldENvb2tpZSgnaHR0cHM6Ly95aXNvLmZ1bicpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgPSByZXF1ZXN0KFxcXFxcXFwiaHR0cHM6Ly95aXNvLmZ1bi9hcGkvc2VhcmNoP25hbWU9XFxcXFxcXCIgKyBzICsgXFxcXFxcXCImcGFnZU5vPVxcXFxcXFwiICsgcGFnZSwge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJSZWZlcmVyXFxcXFxcXCI6IFxcXFxcXFwiaHR0cHM6Ly95aXNvLmZ1bi9pbmZvP3NlYXJjaEtleT1cXFxcXFxcIiArIHMsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IGdldEl0ZW0oJ3lpc291Y29va2UnLCAnJylcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIGkrKztcXFxcbiAgICAgICAgICAgICAgICB9IHdoaWxlIChpIDwgNCk7XFxcXG5cXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGxldCBhcnIgPSBKU09OLnBhcnNlKGh0bWwpLmRhdGEubGlzdDtcXFxcbiAgICAgICAgICAgIC8vbG9nKGFycik7XFxcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcXFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgaXQgPSBhcnJbaV07XFxcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBrZXllbihpdC51cmwpO1xcXFxuICAgICAgICAgICAgICAgIC8vbG9nKHUpO1xcXFxuICAgICAgICAgICAgICAgIGlmICh1ID09IG51bGwgfHwgIXUuaW5jbHVkZXMoXFxcXFxcXCJhbGl5dW5cXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuKAnOKAnOKAneKAnVxcXFxcXFwiICsgaXQubmFtZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD0nICsgdSArICc/P2Z5cGFnZScsXFxcXG4gICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQodSkgKyAnPz8/ZnlwYWdlJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB3cmFwdSh1KSxcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcXFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT7mmJPmkJw8L2ZvbnQ+Jm5ic3A7XFxcXFxcXCIgKyAoaXQuZ210U2hhcmUgfHwgaXQuZ210Q3JlYXRlKSArIFxcXFxcXFwiXFxcXFxcXFxuXFxcXFxcXCIgKyAodSksXFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG5cXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHJldHVybiBkO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSwge1xcXFxuICAgICAgICBuYW1lOiBcXFxcXFxcIuaJvui1hOa6kFxcXFxcXFwiLFxcXFxuICAgICAgICBwYWdlOiB0cnVlLFxcXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxcXG4gICAgICAgICAgICBmdW5jdGlvbiBnZXRodG1sKCkge1xcXFxuICAgICAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdChcXFxcXFxcImh0dHBzOi8vemhhb3ppeXVhbi5sYS9zbz9maWxlbmFtZT1cXFxcXFxcIiArIHMgKyBcXFxcXFxcIiZwYWdlPVxcXFxcXFwiICsgcGFnZSwge1xcXFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogXFxcXFxcXCJodHRwczovL3poYW96aXl1YW4ubGEvc3RvcC5odG1sXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIm9yaWdpblxcXFxcXFwiOiBcXFxcXFxcImh0dHBzOi8vemhhb3ppeXVhbi5sYVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogZ2V0SXRlbShcXFxcXFxcInp6eWNvb2tlXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJ1cGdyYWRlLWluc2VjdXJlLXJlcXVlc3RzXFxcXFxcXCI6IFxcXFxcXFwiMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJjb250ZW50LXR5cGVcXFxcXFxcIjogXFxcXFxcXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGh0bWw7XFxcXG4gICAgICAgICAgICB9O1xcXFxuICAgICAgICAgICAgdmFyIGh0bWwgPSBnZXRodG1sKCk7XFxcXG4gICAgICAgICAgICBpZiAoIWh0bWwuaW5jbHVkZXMoXFxcXFxcXCJzZWFyY2hfYm94XFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHVzZXIgPSAnZFhObGNtNWhiV1U5ZVhCcU1qQXlNeVp3WVhOemQyOXlaRDE1Y0dveU1ESXonO1xcXFxuICAgICAgICAgICAgICAgIGxldCBjb29rID0gSlNPTi5wYXJzZShmZXRjaENvb2tpZSgnaHR0cHM6Ly96aGFveml5dWFuLmxhL2xvZ2l1Lmh0bWwnLCB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzogTU9CSUxFX1VBLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ09yaWdpbic6ICdodHRwczovL3poYW96aXl1YW4ubGEnLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1JlZmVyZXInOiAnaHR0cHM6Ly96aGFveml5dWFuLmxhL2xvZ2luLmh0bWwnLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJ1cGdyYWRlLWluc2VjdXJlLXJlcXVlc3RzXFxcXFxcXCI6IFxcXFxcXFwiMVxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IGJhc2U2NERlY29kZSh1c2VyKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXFxcXG4gICAgICAgICAgICAgICAgICAgIG9ubHlIZWFkZXJzOiB0cnVlLFxcXFxuICAgICAgICAgICAgICAgICAgICB3aXRoSGVhZGVyczogdHJ1ZVxcXFxuICAgICAgICAgICAgICAgIH0pKS5qb2luKCc7Jyk7XFxcXG4gICAgICAgICAgICAgICAgc2V0SXRlbShcXFxcXFxcInp6eWNvb2tlXFxcXFxcXCIsIGNvb2spO1xcXFxuICAgICAgICAgICAgICAgIGxvZyhcXFxcXFxcIuaJvui1hOa6kOeZu+WFpVxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICBodG1sID0gZ2V0aHRtbCgpO1xcXFxuICAgICAgICAgICAgfVxcXFxuXFxcXG4gICAgICAgICAgICBsZXQgYXJyID0gcGRmYShodG1sLCBcXFxcXFxcImJvZHkmJi5uZXdzTGlzdCYmbGk6bm90KDpmaXJzdC1jaGlsZClcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAvL2xvZyhhcnIpO1xcXFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXFxcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IGl0ID0gYXJyW2ldO1xcXFxuICAgICAgICAgICAgICAgIGxldCB1ID0gcGRmaChpdCwgXFxcXFxcXCJhJiZocmVmXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgIGlmICh1ID09IG51bGwpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIHUgPSBcXFxcXFxcImh0dHBzOi8vemhhb3ppeXVhbi5sYS9cXFxcXFxcIiArIHU7XFxcXG4gICAgICAgICAgICAgICAgLy9sb2codSk7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gcGRmaChpdCwgXFxcXFxcXCIubmV3c190ZXh0JiZoMyYmVGV4dFxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXFxcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+5om+6LWE5rqQPC9mb250PiZuYnNwO1xcXFxcXFwiICsgKHBkZmgoaXQsIFxcXFxcXFwiLm5ld3NfdGV4dCYmcCYmVGV4dFxcXFxcXFwiKSksXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJCh1KS5sYXp5UnVsZSgod3JhcHUpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdChpbnB1dCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2xpbmtzID0gaHRtbC5tYXRjaCgvaHR0cHM6XFxcXFxcXFwvXFxcXFxcXFwvKHd3d1xcXFxcXFxcLmFsaXl1bmRyaXZlXFxcXFxcXFwuY29tXFxcXFxcXFwvc3xhbHl3cFxcXFxcXFxcLm5ldClcXFxcXFxcXC9cXFxcXFxcXHcqL2cpIHx8IFtdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2coX2xpbmtzKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfbGlua3MubGVuZ3RoID4gMCkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcmV0dXJuICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD0nICsgX2xpbmtzWzBdICsgJz8/ZnlwYWdlJztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3JldHVybiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQoX2xpbmtzWzBdKSArICc/Pz9meXBhZ2UnO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwdShfbGlua3NbMF0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXQ7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH0sIHdyYXB1KVxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9LCB7XFxcXG4gICAgICAgIG5hbWU6IFxcXFxcXFwi5bCP57q45p2hXFxcXFxcXCIsXFxcXG4gICAgICAgIHBhZ2U6IGZhbHNlLFxcXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxcXG4gICAgICAgICAgICBmdW5jdGlvbiBnZXR0b2tlbigpIHtcXFxcbiAgICAgICAgICAgICAgICBpZiAoZ2V0TXlWYXIoJ3h6eXRva2VuJywgJycpLmxlbmd0aCA9PSAwKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCB0b2tlbiA9IEpTT04ucGFyc2UocG9zdCgnaHR0cHM6Ly9naXRjYWZlLm5ldC90b29sL2FsaXBhcGVyLycsIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6ICdodHRwczovL3UuZ2l0Y2FmZS5uZXQvJ1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246ICdnZXRfdG9rZW4nXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH0pKS5kYXRhO1xcXFxuICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcigneHp0dG9rZW4nLCB0b2tlbik7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIHJldHVybiBnZXRNeVZhcigneHp0dG9rZW4nLCAnJyk7XFxcXG4gICAgICAgICAgICB9XFxcXG5cXFxcbiAgICAgICAgICAgIGZ1bmN0aW9uIGNhdF9jb2RlKGEpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgZCwgZSwgYiA9IFtcXFxcXFxcIuWNjuivreeUteinhlxcXFxcXFwiLCBcXFxcXFxcIuaXpemfqeeUteinhlxcXFxcXFwiLCBcXFxcXFxcIuasp+e+jueUteinhlxcXFxcXFwiLCBcXFxcXFxcIuWFtuS7lueUteinhlxcXFxcXFwiLCBcXFxcXFxcIuWNjuivreeUteW9sVxcXFxcXFwiLCBcXFxcXFxcIuaXpemfqeeUteW9sVxcXFxcXFwiLCBcXFxcXFxcIuasp+e+jueUteW9sVxcXFxcXFwiLCBcXFxcXFxcIuWFtuS7lueUteW9sVxcXFxcXFwiLCBcXFxcXFxcIuWNjuivreWKqOa8q1xcXFxcXFwiLCBcXFxcXFxcIuaXpemfqeWKqOa8q1xcXFxcXFwiLCBcXFxcXFxcIuasp+e+juWKqOa8q1xcXFxcXFwiLCBcXFxcXFxcIue6quW9leeJh1xcXFxcXFwiLCBcXFxcXFxcIue7vOiJuueJh1xcXFxcXFwiLCBcXFxcXFxcIuaVmeiCsuWfueiurVxcXFxcXFwiLCBcXFxcXFxcIuWFtuS7luinhumikVxcXFxcXFwiLCBcXFxcXFxcIuWNjuivremfs+S5kFxcXFxcXFwiLCBcXFxcXFxcIuaXpemfqemfs+S5kFxcXFxcXFwiLCBcXFxcXFxcIuasp+e+jumfs+S5kFxcXFxcXFwiLCBcXFxcXFxcIuWFtuS7lumfs+S5kFxcXFxcXFwiLCBcXFxcXFxcIuWoseS5kOi9r+S7tlxcXFxcXFwiLCBcXFxcXFxcIuezu+e7n+i9r+S7tlxcXFxcXFwiLCBcXFxcXFxcIue9kee7nOi9r+S7tlxcXFxcXFwiLCBcXFxcXFxcIuWKnuWFrOi9r+S7tlxcXFxcXFwiLCBcXFxcXFxcIuWFtuS7lui9r+S7tlxcXFxcXFwiLCBcXFxcXFxcIua8q+eUu1xcXFxcXFwiLCBcXFxcXFxcIuWwj+ivtFxcXFxcXFwiLCBcXFxcXFxcIuWHuueJiOS5plxcXFxcXFwiLCBcXFxcXFxcIuefpeivhuWfueiurVxcXFxcXFwiLCBcXFxcXFxcIuWFtuS7luaWh+aho1xcXFxcXFwiLCBcXFxcXFxcIuWjgee6uFxcXFxcXFwiLCBcXFxcXFxcIuS6uueJqVxcXFxcXFwiLCBcXFxcXFxcIumjjuaZr1xcXFxcXFwiLCBcXFxcXFxcIuWFtuS7luWbvueJh1xcXFxcXFwiLCBcXFxcXFxcIuWFtuS7llxcXFxcXFwiXSxcXFxcbiAgICAgICAgICAgICAgICAgICAgYyA9IFtcXFxcXFxcImh5ZHNcXFxcXFxcIiwgXFxcXFxcXCJyaGRzXFxcXFxcXCIsIFxcXFxcXFwib21kc1xcXFxcXFwiLCBcXFxcXFxcInF0ZHNcXFxcXFxcIiwgXFxcXFxcXCJoeWR5XFxcXFxcXCIsIFxcXFxcXFwicmhkeVxcXFxcXFwiLCBcXFxcXFxcIm9tZHlcXFxcXFxcIiwgXFxcXFxcXCJxdGR5XFxcXFxcXCIsIFxcXFxcXFwiaHlkbVxcXFxcXFwiLCBcXFxcXFxcInJoZG1cXFxcXFxcIiwgXFxcXFxcXCJvbWRtXFxcXFxcXCIsIFxcXFxcXFwiamxwXFxcXFxcXCIsIFxcXFxcXFwienlwXFxcXFxcXCIsIFxcXFxcXFwianlweFxcXFxcXFwiLCBcXFxcXFxcInF0c3BcXFxcXFxcIiwgXFxcXFxcXCJoeXl5XFxcXFxcXCIsIFxcXFxcXFwicmh5eVxcXFxcXFwiLCBcXFxcXFxcIm9teXlcXFxcXFxcIiwgXFxcXFxcXCJxdHl5XFxcXFxcXCIsIFxcXFxcXFwia2ZyalxcXFxcXFwiLCBcXFxcXFxcInh0cmpcXFxcXFxcIiwgXFxcXFxcXCJ3bHJqXFxcXFxcXCIsIFxcXFxcXFwiYmdyalxcXFxcXFwiLCBcXFxcXFxcInF0cmpcXFxcXFxcIiwgXFxcXFxcXCJtaFxcXFxcXFwiLCBcXFxcXFxcInhzXFxcXFxcXCIsIFxcXFxcXFwiY2JzXFxcXFxcXCIsIFxcXFxcXFwienNweFxcXFxcXFwiLCBcXFxcXFxcInF0d2RcXFxcXFxcIiwgXFxcXFxcXCJielxcXFxcXFwiLCBcXFxcXFxcInJ3XFxcXFxcXCIsIFxcXFxcXFwiZmpcXFxcXFxcIiwgXFxcXFxcXCJxdHRwXFxcXFxcXCIsIFxcXFxcXFwicXRcXFxcXFxcIl07XFxcXG4gICAgICAgICAgICAgICAgZm9yIChkID0gMCwgZSA9IGMubGVuZ3RoOyBlID4gZDsgZCsrKVxcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoY1tkXSA9PSBhKSByZXR1cm4gYltkXTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGxldCBkID0gW107XFxcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHBvc3QoXFxcXFxcXCJodHRwczovL2dpdGNhZmUubmV0L3Rvb2wvYWxpcGFwZXIvXFxcXFxcXCIsIHtcXFxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vdS5naXRjYWZlLm5ldC8nXFxcXG4gICAgICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICAgICBib2R5OiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbjogXFxcXFxcXCJzZWFyY2hcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgZnJvbTogXFxcXFxcXCJ3ZWJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgdG9rZW46IGdldHRva2VuKCksXFxcXG4gICAgICAgICAgICAgICAgICAgIGtleXdvcmQ6IHNcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgbGV0IGxpc3QgPSBKU09OLnBhcnNlKGh0bWwpO1xcXFxuICAgICAgICAgICAgaWYgKGxpc3QuZGF0YSkge1xcXFxuICAgICAgICAgICAgICAgIGxpc3QgPSBsaXN0LmRhdGE7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgaXQgPSBsaXN0W2ldXFxcXG4gICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gaXQudGl0bGU7XFxcXG4gICAgICAgICAgICAgICAgbGV0IG11cmwgPSAnaHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tL3MvJyArIGl0LmtleVxcXFxuICAgICAgICAgICAgICAgIGlmICghY2hlY2thbGkobXVybCkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIGlmICh0aXRsZS5pbmNsdWRlcyhzKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi4oiaIFxcXFxcXFwiICsgdGl0bGUsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFxcXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPuWwj+e6uOadoTwvZm9udD4mbmJzcDtcXFxcXFxcIiArIGNhdF9jb2RlKGl0LmNhdCksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlczogaXQuZGVzXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD1odHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vcy8nICsgbXVybCArICc/P2Z5cGFnZScsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHdyYXB1KG11cmwpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9wdXNoP3VybD1oaWtlcjovL2VtcHR5IyMnICsgZW5jb2RlVVJJQ29tcG9uZW50KCdodHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vcy8nICsgbXVybCkgKyAnPz8/ZnlwYWdlJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG5cXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICByZXR1cm4gZDtcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sIHtcXFxcbiAgICAgICAgbmFtZTogXFxcXFxcXCLnjqnlgbblk6Xlk6VcXFxcXFxcIixcXFxcbiAgICAgICAgcGFnZTogdHJ1ZSxcXFxcbiAgICAgICAgZmluZDogZnVuY3Rpb24ocywgcGFnZSkge1xcXFxuICAgICAgICAgICAgbGV0IHVybCA9IFxcXFxcXFwiaHR0cDovL3dvZ2cueHl6L2luZGV4LnBocC92b2RzZWFyY2gvXFxcXFxcXCIgKyBzICsgXFxcXFxcXCItLS0tLS0tLS0tXFxcXFxcXCIgKyBwYWdlICsgXFxcXFxcXCItLS0uaHRtbFxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KHVybCwge30pO1xcXFxuICAgICAgICAgICAgbGV0IGFyciA9IHBhcnNlRG9tRm9yQXJyYXkoaHRtbCwgJy5tb2R1bGUtaXRlbXMmJi5tb2R1bGUtc2VhcmNoLWl0ZW0nKTtcXFxcbiAgICAgICAgICAgIC8vbG9nKGFycik7XFxcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcXFxuICAgICAgICAgICAgbGV0IGJldCA9IFtdO1xcXFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgaXQgPSBhcnJbaV07XFxcXG4gICAgICAgICAgICAgICAgbGV0IHV0aXRsZSA9IHBhcnNlRG9tRm9ySHRtbChpdCwgJ2gzJiZhJiZUZXh0Jyk7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHVzZXJpYWwgPSBwYXJzZURvbUZvckh0bWwoaXQsICcudmlkZW8tc2VyaWFsJiZUZXh0Jyk7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHVpbWFnZSA9IHBhcnNlRG9tKGl0LCAnLmxhenlsb2FkJiZkYXRhLXNyYycsICdodHRwOi8vd29nZy54eXovJyk7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBwYXJzZURvbShpdCwgJ2gzJiZhJiZocmVmJywgJ2h0dHA6Ly93b2dnLnh5ei8nKTtcXFxcbiAgICAgICAgICAgICAgICAvL2xldCBkZXQgPSByZXF1ZXN0KHUsIHt9KTtcXFxcbiAgICAgICAgICAgICAgICBiZXQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB1dGl0bGUsXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogdSxcXFxcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IHVpbWFnZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogdXNlcmlhbFxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgaWYgKGJldC5sZW5ndGggPiAwKSB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IGJldGggPSBiYXRjaEZldGNoKGJldCk7XFxcXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiZXRoLmxlbmd0aDsgaSsrKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCBsaXN0ID0gcGFyc2VEb21Gb3JBcnJheShiZXRoW2ldLCAnLm1vZHVsZS1wbGF5ZXItbGlzdCYmcCcpXFxcXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGlzdC5sZW5ndGg7IGorKykge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBwYXJzZURvbUZvckh0bWwobGlzdFtqXSwgJ3AmJlRleHQnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdS5pbmNsdWRlcyhcXFxcXFxcIi9zL1xcXFxcXFwiKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYmV0W2ldLnRpdGxlLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY191cmw6IGJldFtpXS5pbWFnZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyB1ICsgJz8/ZnlwYWdlJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9wdXNoP3VybD1oaWtlcjovL2VtcHR5IyMnICsgZW5jb2RlVVJJQ29tcG9uZW50KHUpICsgJz8/P2Z5cGFnZScsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB3cmFwdSh1KSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFxcXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPueOqeWBtuWTpeWTpTwvZm9udD4mbmJzcDtcXFxcXFxcIiArIChiZXRbaV0uZGVzYykgKyAnXFxcXFxcXFxuJyArIHUsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcblxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9LCB7XFxcXG4gICAgICAgIG5hbWU6IFxcXFxcXFwi6Zi/6YeM5LqR55uY572RXFxcXFxcXCIsXFxcXG4gICAgICAgIHBhZ2U6IHRydWUsXFxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXFxcbiAgICAgICAgICAgIGxldCB1cmwgPSBcXFxcXFxcImh0dHBzOi8vd3d3LmFseXB3LmNuL3NlYXJjaC5waHA/cT1cXFxcXFxcIiArIHMgKyBcXFxcXFxcIiZwYWdlPVxcXFxcXFwiICsgcGFnZTtcXFxcbiAgICAgICAgICAgIGxldCBodG1sID0gcmVxdWVzdCh1cmwsIHt9KTtcXFxcbiAgICAgICAgICAgIGxldCBhcnIgPSBwYXJzZURvbUZvckFycmF5KGh0bWwsICcubGlzdCYmbGknKTtcXFxcbiAgICAgICAgICAgIC8vbG9nKGFycik7XFxcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcXFxuICAgICAgICAgICAgbGV0IGJldCA9IFtdO1xcXFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgaXQgPSBhcnJbaV07XFxcXG4gICAgICAgICAgICAgICAgbGV0IHV0aXRsZSA9IHBhcnNlRG9tRm9ySHRtbChpdCwgJ2EmJnRpdGxlJyk7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHVzZXJpYWwgPSBwYXJzZURvbUZvckh0bWwoaXQsICcuZmEtY2xvY2stbyYmVGV4dCcpO1xcXFxuICAgICAgICAgICAgICAgIGxldCB1aW1hZ2UgPSBwYXJzZURvbShpdCwgJ2ltZyYmc3JjJywgJ2h0dHBzOi8vd3d3LmFseXB3LmNuLycpO1xcXFxuICAgICAgICAgICAgICAgIGxldCB1ID0gcGFyc2VEb20oaXQsICdhJiZocmVmJywgJ2h0dHBzOi8vd3d3LmFseXB3LmNuLycpO1xcXFxuICAgICAgICAgICAgICAgIC8vbGV0IGRldCA9IHJlcXVlc3QodSwge30pO1xcXFxuICAgICAgICAgICAgICAgIGlmICghdXRpdGxlLmluY2x1ZGVzKHMpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICBiZXQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB1dGl0bGUsXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogdSxcXFxcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IHVpbWFnZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogdXNlcmlhbFxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgLy9sb2coYmV0KTtcXFxcbiAgICAgICAgICAgIGlmIChiZXQubGVuZ3RoID4gMCkge1xcXFxuICAgICAgICAgICAgICAgIGxldCBiZXRoID0gYmF0Y2hGZXRjaChiZXQpO1xcXFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmV0aC5sZW5ndGg7IGkrKykge1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgbGlzdCA9IHBhcnNlRG9tRm9yQXJyYXkoYmV0aFtpXSwgJ2JvZHkmJmFbaHJlZl49aHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tL3MvXScpXFxcXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nKGxpc3QpO1xcXFxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxpc3QubGVuZ3RoOyBqKyspIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1ID0gcGFyc2VEb21Gb3JIdG1sKGxpc3Rbal0sICdhJiZocmVmJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBiZXRbaV0udGl0bGUsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGljX3VybDogYmV0W2ldLmltYWdlLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL2RldGFpbD9ydWxlPeS6keebmOaxh+W9sSZ1cmw9JyArIHUgKyAnPz9meXBhZ2UnLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQodSkgKyAnPz8/ZnlwYWdlJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHdyYXB1KHUpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXFxcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+6Zi/6YeM5LqR55uY572RPC9mb250PiZuYnNwO1xcXFxcXFwiICsgKGJldFtpXS5kZXNjKSArICdcXFxcXFxcXG4nICsgdSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICByZXR1cm4gZDtcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sIHtcXFxcbiAgICAgICAgbmFtZTogXFxcXFxcXCLlnJ/mi6jpvKBcXFxcXFxcIixcXFxcbiAgICAgICAgcGFnZTogZmFsc2UsXFxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXFxcbiAgICAgICAgICAgIGxldCBodG1sID0gZmV0Y2goJ2h0dHBzOi8vd3d3LnRic2R5LmNvbS9zZWFyY2guaHRtbD9rZXl3b3JkPScgKyBzICsgJyZjYXRlZ29yeT05ODM5MjAmZGF0YV90eXBlPTk4NzkxMCcsIHtcXFxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JzogUENfVUFcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9KTtcXFxcblxcXFxuICAgICAgICAgICAgbGV0IGFyciA9IHBhcnNlRG9tRm9yQXJyYXkoaHRtbCwgJy5zZWFyY2hfcmVzdWx0X25ldGRpc2tfbGlzdCYmYScpO1xcXFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXFxcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IGl0ID0gYXJyW2ldO1xcXFxuICAgICAgICAgICAgICAgIC8vbG9nKGl0KTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgdSA9IHBhcnNlRG9tRm9ySHRtbChpdCwgJ2EmJmhyZWYnKTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgdGl0ID0gcGFyc2VEb21Gb3JIdG1sKGl0LCAnLm5ldGRpc2tfaXRlbV9kZXRhaWxfbmFtZSYmVGV4dCcpO1xcXFxuICAgICAgICAgICAgICAgIGlmICghdGl0LmluY2x1ZGVzKHMpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAvL2xvZyh1KTtcXFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0LFxcXFxuICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyB1ICsgJz8/ZnlwYWdlJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvcHVzaD91cmw9aGlrZXI6Ly9lbXB0eSMjJyArIGVuY29kZVVSSUNvbXBvbmVudCh1KSArICc/Pz9meXBhZ2UnLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHdyYXB1KHUpLFxcXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFxcXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPuWcn+aLqOm8oOaQnDwvZm9udD4mbmJzcDtcXFxcXFxcIiArIFxcXFxcXFwiXFxcXFxcXFxuXFxcXFxcXCIgKyB1LFxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9LCB7XFxcXG4gICAgICAgIG5hbWU6IFxcXFxcXFwi6Zi/6YeM5pCcXFxcXFxcXCIsXFxcXG4gICAgICAgIHBhZ2U6IHRydWUsXFxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXFxcbiAgICAgICAgICAgIGxldCBkID0gW107XFxcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoJ2h0dHBzOi8vYWxpc28uY2Mvcy8nICsgcyArICctJyArIHBhZ2UgKyAnLTAuaHRtbCcsIHt9KTtcXFxcblxcXFxuICAgICAgICAgICAgbGV0IGxpc3QgPSBwYXJzZURvbUZvckFycmF5KGh0bWwsICcuc2VhcmNoLXJlc3VsdCYmLnJlc291cmNlLWl0ZW0nKTtcXFxcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGlzdC5sZW5ndGg7IGorKykge1xcXFxuICAgICAgICAgICAgICAgIGxldCB1ID0gbGlzdFtqXTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgdGl0ID0gcGFyc2VEb21Gb3JIdG1sKHUsICdoMyYmVGV4dCcpO1xcXFxuICAgICAgICAgICAgICAgIGlmICghdGl0LmluY2x1ZGVzKHMpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0LFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQocGFyc2VEb20odSwgJ2gzJiZhJiZocmVmJywgJ2h0dHBzOi8vYWxpc28uY2MvJykpLmxhenlSdWxlKCh3cmFwdSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChnZXRDcnlwdG9KUygpKTtcXFxcblxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVjcnkoc3RyKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKFxcXFxcXFwiOUVCMjBEREZENkFGQkQ2OFxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5jcnlwdGVkID0gQ3J5cHRvSlMuQUVTLmRlY3J5cHQoc3RyLCBrZXksIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXY6IGtleSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkMsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzN1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW5jcnlwdGVkO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoaW5wdXQpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGJ1dCA9IHBhcnNlRG9tKGh0bWwsICcuYnV0dG9uJiZocmVmJywgJ2h0dHBzOi8vYWxpc28uY2MvJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2xvZyhidXQpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGdvdCA9IHJlcXVlc3QoYnV0KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9nKGdvdCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBldmFsKHBhcnNlRG9tRm9ySHRtbChnb3QsICdoZWFkJiZzY3JpcHQsMSYmSHRtbCcpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwdShkZWNyeShiYXNlNjQuc3BsaXQoJyEnKVswXSkpO1xcXFxuXFxcXG4gICAgICAgICAgICAgICAgICAgIH0sIHdyYXB1KSxcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcXFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT7pmL/ph4zmkJw8L2ZvbnQ+Jm5ic3A7XFxcXFxcXCIgKyBwYXJzZURvbUZvckh0bWwodSwgJy50aW1lJiZUZXh0JyksXFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG5cXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHJldHVybiBkO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSwgLyp7XFxcXG4gICAgICAgIG5hbWU6IFxcXFxcXFwi5Zyf54uX5pCcXFxcXFxcXCIsXFxcXG4gICAgICAgIHBhZ2U6IGZhbHNlLFxcXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoJ2h0dHBzOi8vd3d3LnR1Z291c291LmNvbS9zZWFyY2gnLCB7XFxcXG4gICAgICAgICAgICAgICAgYm9keTogJ2tleXdvcmQ9JyArIHMsXFxcXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXFxcbiAgICAgICAgICAgIH0pO1xcXFxuXFxcXG4gICAgICAgICAgICBsZXQgYXJyID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCAnLmxheXVpLWNvbnRhaW5lciwxJiYubGF5dWktcm93OmhhcyhhKScpO1xcXFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXFxcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IGl0ID0gYXJyW2ldO1xcXFxuICAgICAgICAgICAgICAgIGxldCB1ID0gcGFyc2VEb21Gb3JIdG1sKGl0LCAnYSYmaHJlZicpO1xcXFxuICAgICAgICAgICAgICAgIGlmICghdS5pbmNsdWRlcyhcXFxcXFxcIi9zL1xcXFxcXFwiKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgLy9sb2codSk7XFxcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBhcnNlRG9tRm9ySHRtbChpdCwgJ2EmJlRleHQnKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD0nICsgdSArICc/P2Z5cGFnZScsXFxcXG4gICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQodSkgKyAnPz8/ZnlwYWdlJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB3cmFwdSh1KSxcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcXFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT7lnJ/ni5fmkJw8L2ZvbnQ+Jm5ic3A7XFxcXFxcXCIgKyBwYXJzZURvbUZvckh0bWwoaXQsICdwLC0xJiZUZXh0JykgKyBcXFxcXFxcIlxcXFxcXFxcblxcXFxcXFwiICsgdSxcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHJldHVybiBkO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSwgKi97XFxcXG4gICAgICAgIG5hbWU6IFxcXFxcXFwi5LqR55uY5YiG5Lqr56S+XFxcXFxcXCIsXFxcXG4gICAgICAgIHBhZ2U6IGZhbHNlLFxcXFxuICAgICAgICBmaW5kOiBmdW5jdGlvbihzLCBwYWdlKSB7XFxcXG4gICAgICAgICAgICBldmFsKGdldENyeXB0b0pTKCkpO1xcXFxuXFxcXG4gICAgICAgICAgICBmdW5jdGlvbiBkZWNyeShzdHIpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoXFxcXFxcXCI1RjZCMkFLMzNEQVNEMTIzXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgIHZhciBlbmNyeXB0ZWQgPSBDcnlwdG9KUy5BRVMuZGVjcnlwdChzdHIsIGtleSwge1xcXFxuICAgICAgICAgICAgICAgICAgICBtb2RlOiBDcnlwdG9KUy5tb2RlLkVDQixcXFxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XFxcXG4gICAgICAgICAgICAgICAgfSkudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLlV0ZjgpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBlbmNyeXB0ZWQ7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QoJ2h0dHBzOi8vd3d3Lnl1bnBhbmZlbnhpYW5nLmNuL2FwaS9iYnMvYXBpL2dldGRhdGE/a2V5PScgKyBzICsgJyZ0eXBlPXZpZGVvJywge1xcXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJSZWZlcmVyXFxcXFxcXCI6IFxcXFxcXFwiaHR0cHM6Ly93d3cueXVucGFuZmVueGlhbmcuY24vXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIGxldCBqc29uID0gZGVjcnkoSlNPTi5wYXJzZShodG1sKS5kYXRhKTtcXFxcbiAgICAgICAgICAgIC8vbG9nKGpzb24pO1xcXFxuICAgICAgICAgICAgbGV0IGFyciA9IEpTT04ucGFyc2UoanNvbik7IC8vWzBdLnJlc3VsdC5pdGVtcztcXFxcbiAgICAgICAgICAgIC8vbG9nKGFycik7XFxcXG5cXFxcbiAgICAgICAgICAgIGxldCBkID0gW107XFxcXG4gICAgICAgICAgICBsZXQgYmV0ID0gW107XFxcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xcXFxuICAgICAgICAgICAgICAgIGxldCBpdCA9IGFycltpXTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgdXJsID0gaXQucGlkO1xcXFxuICAgICAgICAgICAgICAgIGJldC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnaHR0cHM6Ly93d3cueXVucGFuZmVueGlhbmcuY24vYXBpL2Jicy9hcGkvZ2V0YXJ0aWNsZT9pZD0nICsgdXJsLFxcXFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJSZWZlcmVyXFxcXFxcXCI6IFxcXFxcXFwiaHR0cHM6Ly93d3cueXVucGFuZmVueGlhbmcuY24vXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgLy9sb2codSk7XFxcXG4gICAgICAgICAgICBsZXQgYmV0aCA9IGJhdGNoRmV0Y2goYmV0KTtcXFxcblxcXFxuICAgICAgICAgICAgLy9sb2coYXJ0aWNsZSk7XFxcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJldGgubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgICAgICAgICBsZXQganNvbiA9IEpTT04ucGFyc2UoYmV0aFtpXSkuZGF0YTtcXFxcbiAgICAgICAgICAgICAgICAvL2xvZyhqc29uKTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgbGlzdCA9IGpzb24uZG93bmxvYWQuc3BsaXQoJ0AnKTtcXFxcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxpc3QubGVuZ3RoOyBqKyspIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSBsaXN0W2pdO1xcXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGpzb24udGl0bGUsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyB1ICsgJz8/ZnlwYWdlJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQodSkgKyAnPz8/ZnlwYWdlJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogd3JhcHUoJ2h0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS9zLycgKyB1KSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXFxcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+5LqR55uY5YiG5Lqr56S+PC9mb250PiZuYnNwO1xcXFxcXFwiICsgKGpzb24uY3JlYXRldGltZSkgKyBcXFxcXFxcIlxcXFxcXFxcblxcXFxcXFwiICsgKCdodHRwczovL3d3dy5hbGl5dW5kcml2ZS5jb20vcy8nICsgdSksXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH1cXFxcblxcXFxuICAgICAgICAgICAgcmV0dXJuIGQ7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9LCB7XFxcXG4gICAgICAgIG5hbWU6IFxcXFxcXFwi55uY5pCcXFxcXFxcXCIsXFxcXG4gICAgICAgIHBhZ2U6IHRydWUsXFxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXFxcbiAgICAgICAgICAgIHBhZ2UgPSAocGFnZSAtIDEpICogMTA7XFxcXG4gICAgICAgICAgICBsZXQgdXJsID0gXFxcXFxcXCJodHRwczovL3d3dy5wYW5zZWFyY2gubWUvc2VhcmNoP2tleXdvcmQ9XFxcXFxcXCIgKyBzICsgXFxcXFxcXCImb2Zmc2V0PVxcXFxcXFwiICsgcGFnZSArIFxcXFxcXFwiJnBhbj1hbGl5dW5kcml2ZVxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KHVybCwge30pO1xcXFxuXFxcXG4gICAgICAgICAgICBsZXQgYXJyID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCAnLmdyaWQmJi5zaGFkb3c6aGFzKGFbaHJlZl49aHR0cHM6Ly93d3cuYWxpeXVuZHJpdmUuY29tL3MvXSknKTtcXFxcbiAgICAgICAgICAgIC8vbG9nKGFycik7XFxcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcXFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgaXQgPSBhcnJbaV07XFxcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBwYXJzZURvbUZvckh0bWwoaXQsICdhW2hyZWZePWh0dHBzOi8vd3d3LmFsaXl1bmRyaXZlLmNvbS9zL10mJmhyZWYnKTtcXFxcbiAgICAgICAgICAgICAgICAvL2xvZyh1KTtcXFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogcGFyc2VEb21Gb3JIdG1sKGl0LCAnLmJyZWFrLWFsbCYmVGV4dCcpLnNwbGl0KCdodHRwJylbMF0sXFxcXG4gICAgICAgICAgICAgICAgICAgIHBpY191cmw6IHBhcnNlRG9tRm9ySHRtbChpdCwgJ2ltZyYmc3JjJyksXFxcXG4gICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL2RldGFpbD9ydWxlPeS6keebmOaxh+W9sSZ1cmw9JyArIHUgKyAnPz9meXBhZ2UnLFxcXFxuICAgICAgICAgICAgICAgICAgICAvL3VybDogJ2hpa2VyOi8vcGFnZS9wdXNoP3VybD1oaWtlcjovL2VtcHR5IyMnICsgZW5jb2RlVVJJQ29tcG9uZW50KHUpICsgJz8/P2Z5cGFnZScsXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogd3JhcHUodSksXFxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXFxcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+55uY5pCcPC9mb250PiZuYnNwO1xcXFxcXFwiICsgKHBhcnNlRG9tRm9ySHRtbChpdCwgJ3AmJlRleHQnKSkgKyBcXFxcXFxcIlxcXFxcXFxcblxcXFxcXFwiICsgKHUpLFxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICByZXR1cm4gZDtcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sXFxcXG4gICAge1xcXFxuICAgICAgICBuYW1lOiBcXFxcXFxcIkRPVljmkJxcXFxcXFxcIixcXFxcbiAgICAgICAgcGFnZTogZmFsc2UsXFxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXFxcbiAgICAgICAgICAgIGxldCB1cmwgPSBcXFxcXFxcImh0dHBzOi8vYXBpLmRvdngudGsvYWxpL3NlYXJjaD93ZD1cXFxcXFxcIiArIHM7XFxcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QodXJsLCB7fSk7XFxcXG4gICAgICAgICAgICAvL2xvZyhiYXNlNjREZWNvZGUoaHRtbCkpO1xcXFxuICAgICAgICAgICAgbGV0IGFyciA9IEpTT04ucGFyc2UoaHRtbCkubGlzdDtcXFxcbiAgICAgICAgICAgIC8vbG9nKGFycik7XFxcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcXFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgaXQgPSBhcnJbaV07XFxcXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBpdC52b2RfY29udGVudDtcXFxcbiAgICAgICAgICAgICAgICAvL3UgPSB1Lmxlbmd0aCA+IDAgPyB1WzBdIDogdXJsO1xcXFxuICAgICAgICAgICAgICAgIGlmICghdS5pbmNsdWRlcyhcXFxcXFxcImFsaXl1bmRyaXZlXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICBpZiAoIWNoZWNrYWxpKHUpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLiiJogXFxcXFxcXCIgKyBpdC52b2RfbmFtZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgcGljX3VybDogaXQudm9kX3BpYyxcXFxcbiAgICAgICAgICAgICAgICAgICAgLy91cmw6ICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD0nICsgdSArICc/P2Z5cGFnZScsXFxcXG4gICAgICAgICAgICAgICAgICAgIC8vdXJsOiAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQodSkgKyAnPz8/ZnlwYWdlJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB3cmFwdSh1KSxcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcXFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT5ET1ZY5pCcPC9mb250PiZuYnNwO1xcXFxcXFwiICsgXFxcXFxcXCJcXFxcXFxcXG5cXFxcXFxcIiArICh1KSxcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHJldHVybiBkO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSxcXFxcbiAgICB7XFxcXG4gICAgICAgIG5hbWU6IFxcXFxcXFwi5b+F5bqUXFxcXFxcXCIsXFxcXG4gICAgICAgIHBhZ2U6IHRydWUsXFxcXG4gICAgICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXFxcbiAgICAgICAgICAgIGxldCB1cmwgPSBcXFxcXFxcImh0dHBzOi8vY24uYmluZy5jb20vc2VhcmNoP3E9XFxcXFxcXCIgKyBzICsgXFxcXFxcXCIrYWxpeXVuZHJpdmUmcXM9ZHMmZm9ybT1RQlJFXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICBpZiAocGFnZSAhPSAxKSB7XFxcXG4gICAgICAgICAgICAgICAgdXJsID0gZ2V0TXlWYXIoXFxcXFxcXCJiaW5nXFxcXFxcXCIsIHVybCk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QodXJsLCB7XFxcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogXFxcXFxcXCJodHRwczovL2NuLmJpbmcuY29tL1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAvL1xcXFxcXFwiWC1SZXF1ZXN0ZWQtV2l0aFxcXFxcXFwiOiBcXFxcXFxcImNvbS5leGFtcGxlLmhpa2Vydmlld1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIkFjY2VwdFxcXFxcXFwiOiBcXFxcXFxcInRleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LGltYWdlL2F2aWYsaW1hZ2Uvd2VicCxpbWFnZS9hcG5nLCovKjtxPTAuOCxhcHBsaWNhdGlvbi9zaWduZWQtZXhjaGFuZ2U7dj1iMztxPTAuOVxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICBsZXQgYXJyID0gcGRmYShodG1sLCBcXFxcXFxcImJvZHkmJmFcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAvL2xvZyhhcnIpO1xcXFxuICAgICAgICAgICAgbGV0IGQgPSBbXTtcXFxcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IGl0ID0gYXJyW2ldO1xcXFxuICAgICAgICAgICAgICAgIGxldCB1ID0gcGQoaXQsIFxcXFxcXFwiYSYmaHJlZlxcXFxcXFwiLCB1cmwpO1xcXFxuICAgICAgICAgICAgICAgIGxldCB0ID0gcGRmaChpdCwgXFxcXFxcXCJhJiZUZXh0XFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgIGlmIChpdC5pbmNsdWRlcyhcXFxcXFxcIk5leHQgcGFnZVxcXFxcXFwiKSB8fCBpdC5pbmNsdWRlcyhcXFxcXFxcIuS4i+S4gOmhtVxcXFxcXFwiKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgdTIgPSBwZChpdCwgXFxcXFxcXCJhJiZocmVmXFxcXFxcXCIsIHVybCk7XFxcXG4gICAgICAgICAgICAgICAgICAgIC8vbG9nKFxcXFxcXFwibmV4dCBwYWdlXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICAvL2xvZyh1Mik7XFxcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXFxcXFwiYmluZ1xcXFxcXFwiLCB1Mik7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIGlmICh1ID09IG51bGwgfHwgdCA9PSBudWxsIHx8ICFpdC5pbmNsdWRlcyhzKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgaWYgKCFpdC5pbmNsdWRlcyhcXFxcXFxcIue9keebmFxcXFxcXFwiKSAmJiAhaXQuaW5jbHVkZXMoXFxcXFxcXCLkupHnm5hcXFxcXFxcIikgJiZcXFxcbiAgICAgICAgICAgICAgICAgICAgIWl0LmluY2x1ZGVzKFxcXFxcXFwiYWxpeXVuZHJpdmVcXFxcXFxcIikgJiYgIWl0LmluY2x1ZGVzKFxcXFxcXFwieXVucGFuXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICBpZiAodS5zdGFydHNXaXRoKFxcXFxcXFwiaHR0cHM6Ly9jbi5iaW5nLmNvbS9cXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIGxldCBkb20gPSBnZXRIb21lKHUpLnJlcGxhY2UoXFxcXFxcXCJodHRwOi8vXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpLnJlcGxhY2UoXFxcXFxcXCJodHRwczovL1xcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgX2xpbmtzID0gdC5tYXRjaCgvaHR0cHM6XFxcXFxcXFwvXFxcXFxcXFwvKHd3d1xcXFxcXFxcLmFsaXl1bmRyaXZlXFxcXFxcXFwuY29tXFxcXFxcXFwvc3xhbHl3cFxcXFxcXFxcLm5ldClcXFxcXFxcXC9cXFxcXFxcXHcqL2cpIHx8IFtdO1xcXFxuICAgICAgICAgICAgICAgIC8vbG9nKF9saW5rcyk7XFxcXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBudWxsO1xcXFxuICAgICAgICAgICAgICAgIC8vbG9nKF9saW5rcyk7XFxcXG4gICAgICAgICAgICAgICAgLy9pZiAoX2xpbmtzLmxlbmd0aCA+IDApIHtcXFxcbiAgICAgICAgICAgICAgICAvL2MgPSAnaGlrZXI6Ly9wYWdlL3B1c2g/dXJsPWhpa2VyOi8vZW1wdHkjIycgKyBlbmNvZGVVUklDb21wb25lbnQoX2xpbmtzWzBdKSArICc/Pz9meXBhZ2UnO1xcXFxuICAgICAgICAgICAgICAgIC8vYz13cmFwdShfbGlua3NbMF0pXFxcXG4gICAgICAgICAgICAgICAgLy99XFxcXG4gICAgICAgICAgICAgICAgaWYgKF9saW5rcy5sZW5ndGggPiAxICYmIF9saW5rc1sxXS5yZXBsYWNlKF9saW5rc1swXSwgXFxcXFxcXCJcXFxcXFxcIikucmVwbGFjZSgvW2EtekEtWjAtOV0rL2csIFxcXFxcXFwiXFxcXFxcXCIpID09IFxcXFxcXFwiXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgYyA9IHdyYXB1KF9saW5rc1sxXSk7XFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChfbGlua3MubGVuZ3RoID4gMCkge1xcXFxuICAgICAgICAgICAgICAgICAgICBjID0gd3JhcHUoX2xpbmtzWzBdKTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHQsXFxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXFxcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+5b+F5bqUPC9mb250PiZuYnNwO1xcXFxcXFwiICsgZG9tLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGMgIT0gbnVsbCA/IGMgOiAkKHUpLmxhenlSdWxlKCh3cmFwdSwgbW9kZSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KGlucHV0KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfbGlua3MgPSBodG1sLm1hdGNoKC9odHRwczpcXFxcXFxcXC9cXFxcXFxcXC8od3d3XFxcXFxcXFwuYWxpeXVuZHJpdmVcXFxcXFxcXC5jb21cXFxcXFxcXC9zfGFseXdwXFxcXFxcXFwubmV0KVxcXFxcXFxcL1xcXFxcXFxcdyovZykgfHwgW107XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2xvZyhfbGlua3MpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9pZiAoX2xpbmtzLmxlbmd0aCA+IDApIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vcmV0dXJuICdoaWtlcjovL3BhZ2UvZGV0YWlsP3J1bGU95LqR55uY5rGH5b2xJnVybD0nICsgX2xpbmtzWzBdICsgJz8/ZnlwYWdlJztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vcmV0dXJuICdoaWtlcjovL3BhZ2UvcHVzaD91cmw9aGlrZXI6Ly9lbXB0eSMjJyArIGVuY29kZVVSSUNvbXBvbmVudChfbGlua3NbMF0pICsgJz8/P2Z5cGFnZSc7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2xpbmtzLmxlbmd0aCA+IDEgJiYgX2xpbmtzWzFdLnJlcGxhY2UoX2xpbmtzWzBdLCBcXFxcXFxcIlxcXFxcXFwiKS5yZXBsYWNlKC9bYS16QS1aMC05XSsvZywgXFxcXFxcXCJcXFxcXFxcIikgPT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwdShfbGlua3NbMV0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChfbGlua3MubGVuZ3RoID4gMCkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwdShfbGlua3NbMF0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcnVsZSA9IE1ZX1JVTEUudGl0bGU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3lzZng/cnVsZT1cXFxcXFxcIiArIHJ1bGUgKyBcXFxcXFxcIiZyPVxcXFxcXFwiICsgcnVsZSArIFxcXFxcXFwiJm1vZGU9XFxcXFxcXCIgKyBtb2RlICsgXFxcXFxcXCIjI1xcXFxcXFwiICsgaW5wdXQ7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH0sIHdyYXB1LCBjb25maWcubW9kZSlcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHJldHVybiBkO1xcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuXTtcXFxcblxcXFxuXFxcXG4vL+W5tuWPkeinhOWImeaVsFxcXFxubGV0IGNjb2YgPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9jY29mJylcXFxcbnJ1bGVzLnB1c2goY2NvZilcXFxcbi8v5bm25Y+R6KeE5YiZ5pWwXFxcXG5sZXQgc2l6ZSA9IDEwO1xcXFxuXFxcXG4kLmV4cG9ydHMgPSBmdW5jdGlvbihwYWdlLCBydWxlKSB7XFxcXG4gICAgaWYgKCFwYWdlICYmICFydWxlKSB7XFxcXG4gICAgICAgIHJldHVybiBydWxlcy5tYXAoaXQgPT4gaXQubmFtZSk7XFxcXG4gICAgfVxcXFxuICAgIGlmIChydWxlICE9IG51bGwpIHtcXFxcbiAgICAgICAgaWYgKHBhZ2UgIT0gbnVsbCAmJiBwYWdlID4gMSkge1xcXFxuICAgICAgICAgICAgcmV0dXJuIHJ1bGVzLmZpbHRlcihpID0+IGkubmFtZSA9PSBydWxlICYmIGkucGFnZSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcmV0dXJuIHJ1bGVzLmZpbHRlcihpID0+IGkubmFtZSA9PSBydWxlKTtcXFxcbiAgICB9XFxcXG4gICAgbGV0IHN0YXJ0ID0gKHBhZ2UgLSAxKSAqIHNpemU7XFxcXG4gICAgaWYgKHJ1bGVzLmxlbmd0aCA8IHN0YXJ0ICsgMSkge1xcXFxuICAgICAgICByZXR1cm4gW107XFxcXG4gICAgfVxcXFxuICAgIGxldCBsZW4gPSBzaXplO1xcXFxuICAgIGlmIChydWxlcy5sZW5ndGggPCBwYWdlICogc2l6ZSkge1xcXFxuICAgICAgICBsZW4gPSBydWxlcy5sZW5ndGggLSBzdGFydFxcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gcnVsZXMuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgbGVuKTtcXFxcbn1cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLmkJzntKJcXFwiLFxcXCJwYXRoXFxcIjpcXFwic291XFxcIixcXFwicnVsZVxcXCI6XFxcImxldCByID0gZ2V0SXRlbShcXFxcXFxcInJcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIik7XFxcXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxcXG4gICAgbGV0IHIxID0gZmV0Y2goXFxcXFxcXCJoaWtlcjovL2hvbWVA5LqR55uY5rGH5b2xXFxcXFxcXCIpO1xcXFxuICAgIGlmICghcjEgfHwgcjEubGVuZ3RoIDw9IDUpIHtcXFxcbiAgICAgICAgbGV0IHJ1ID0gJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCLmtbfpmJTop4bnlYzop4TliJnliIbkuqvvvIzlvZPliY3liIbkuqvnmoTmmK/vvJrlsI/nqIvluo/vv6Vob21lX3J1bGVfdjLvv6ViYXNlNjQ6Ly9A5LqR55uY5rGH5b2xQGV5SnNZWE4wWDJOb1lYQjBaWEpmY25Wc1pTSTZJaUlzSW5ScGRHeGxJam9pNUxxUjU1dVk1ckdINWIyeElpd2lZWFYwYUc5eUlqb2lUWEpHYkhraUxDSjFjbXdpT2lKb2FXdGxjam92TDJWdGNIUjVKQ1FrWm5sd1lXZGxJaXdpZG1WeWMybHZiaUk2Tml3aVkyOXNYM1I1Y0dVaU9pSjBaWGgwWHpFaUxDSmpiR0Z6YzE5dVlXMWxJam9pSWl3aWRIbHdaU0k2SW1Gc2JDSXNJbU5zWVhOelgzVnliQ0k2SWlJc0ltRnlaV0ZmYm1GdFpTSTZJaUlzSW1GeVpXRmZkWEpzSWpvaUlpd2ljMjl5ZEY5dVlXMWxJam9pSWl3aWVXVmhjbDl1WVcxbElqb2lJaXdpYzI5eWRGOTFjbXdpT2lJaUxDSjVaV0Z5WDNWeWJDSTZJaUlzSW1acGJtUmZjblZzWlNJNkltcHpPbHh1WlhaaGJDaG1aWFJqYUNnbmFHbHJaWEk2THk5bWFXeGxjeTl5ZFd4bGN5OXBZM2t2WVd4cExtcHpKeWtwTzF4dVlXeHBMbWh2YldWUVlXZGxLQ2s3SWl3aWMyVmhjbU5vWDNWeWJDSTZJbWhwYTJWeU9pOHZaVzF3ZEhra0pDUXFLaVFrSkdaNWNHRm5aU1FrSkNJc0ltZHliM1Z3SWpvaTRwR2c1NzJSNTV1WUlpd2ljMlZoY21Ob1JtbHVaQ0k2SW1wek9seHVaWFpoYkNobVpYUmphQ2duYUdsclpYSTZMeTltYVd4bGN5OXlkV3hsY3k5cFkza3ZZV3hwTG1wekp5a3BPMXh1WVd4cExuTmxZWEpqYUZCaFoyVW9kSEoxWlNrN1hHNGlMQ0prWlhSaGFXeGZZMjlzWDNSNWNHVWlPaUp0YjNacFpWOHhJaXdpWkdWMFlXbHNYMlpwYm1SZmNuVnNaU0k2SW1wek9seHVaWFpoYkNobVpYUmphQ2duYUdsclpYSTZMeTltYVd4bGN5OXlkV3hsY3k5cFkza3ZZV3hwTG1wekp5a3BPMXh1WVd4cExtUmxkR0ZwYkZCaFoyVW9LVHNpTENKelpHVjBZV2xzWDJOdmJGOTBlWEJsSWpvaWJXOTJhV1ZmTVNJc0luTmtaWFJoYVd4ZlptbHVaRjl5ZFd4bElqb2lJaXdpZFdFaU9pSnRiMkpwYkdVaUxDSndjbVZTZFd4bElqb2lkbUZ5SUdGc2FXcHpJRDBnWm1WMFkyaERZV05vWlNnbmFIUjBjSE02THk5bmFYUmxaUzVqYjIwdlpteDVNVE01Tnk5b2FXdGxjaTFwWTNrdmNtRjNMMjFoYzNSbGNpOWhiR2t1YW5NbktUdGNiaTh2ZG1GeUlHRnNhV3B6SUQwZ2JuVnNiRHRjYm1sbUlDZ2hZV3hwYW5NZ2ZId2dJV0ZzYVdwekxtbHVZMngxWkdWektDZGhiR2t1SnlrcElIdGNiaUFnSUNCaGJHbHFjeUE5SUdabGRHTm9RMkZqYUdVb0oyaDBkSEJ6T2k4dlkyUnVMbXB6WkdWc2FYWnlMbTVsZEM5bmFDOW1iSGt4TXprM0wyaHBhMlZ5TFdsamVTOWhiR2t1YW5NbktWeHVmVnh1YVdZZ0tDRmhiR2xxY3lCOGZDQWhZV3hwYW5NdWFXNWpiSFZrWlhNb0oyRnNhUzRuS1NrZ2UxeHVJQ0FnSUdGc2FXcHpJRDBnWm1WMFkyaERZV05vWlNnbmFIUjBjRG92TDJ4bWFXTjVMbU52YlRvek1EQXdNQzl0Y21ac2VTOW9hV3RsY2kxcFkza3ZjbUYzTDIxaGMzUmxjaTloYkdrdWFuTW5LVnh1ZlZ4dWFXWWdLR0ZzYVdwektTQjdYRzRnSUNBZ2QzSnBkR1ZHYVd4bEtGd2lhR2xyWlhJNkx5OW1hV3hsY3k5eWRXeGxjeTlwWTNrdllXeHBMbXB6WENJc0lHRnNhV3B6S1R0Y2JpQWdJQ0JsZG1Gc0tHRnNhV3B6S1R0Y2JpQWdJQ0JoYkdrdWNISmxVblZzWlNncE8xeHVmU0lzSW5CaFoyVnpJam9pVzN0Y0ltTnZiRjkwZVhCbFhDSTZYQ0p0YjNacFpWOHpYQ0lzWENKdVlXMWxYQ0k2WENMbnZaSG5tNWpvcjZibWc0VmNJaXhjSW5CaGRHaGNJanBjSW1SbGRHRnBiRndpTEZ3aWNuVnNaVndpT2x3aWFuTTZYRnh1WlhaaGJDaG1aWFJqYUNnbmFHbHJaWEk2THk5bWFXeGxjeTl5ZFd4bGN5OXBZM2t2WVd4cExtcHpKeWtwTzF4Y2JtRnNhUzVwYm1sMFEyOXVabWxuS0NrN1hGeHVZV3hwTG1Gc2FWSjFiR1VvS1R0Y0luMHNlMXdpWTI5c1gzUjVjR1ZjSWpwY0ltMXZkbWxsWHpGZmJHVm1kRjl3YVdOY0lpeGNJbTVoYldWY0lqcGNJdWkxaE9hNmtPZTlrZW1odGVpdnB1YURoVndpTEZ3aWNHRjBhRndpT2x3aWMybDBaUzFrWlhSaGFXeGNJaXhjSW5KMWJHVmNJanBjSW1wek9seGNibVYyWVd3b1ptVjBZMmdvSjJocGEyVnlPaTh2Wm1sc1pYTXZjblZzWlhNdmFXTjVMMkZzYVM1cWN5Y3BLVHRjWEc1aGJHa3VaR1YwWVdsc1VHRm5aU2dwTzF3aWZTeDdYQ0pqYjJ4ZmRIbHdaVndpT2x3aWJXOTJhV1ZmTTF3aUxGd2libUZ0WlZ3aU9sd2k1TGlxNUxxNjU3MlI1NXVZNksrbTVvT0ZYQ0lzWENKd1lYUm9YQ0k2WENKa2NtbDJaVndpTEZ3aWNuVnNaVndpT2x3aWFuTTZYRnh1WlhaaGJDaG1aWFJqYUNnbmFHbHJaWEk2THk5bWFXeGxjeTl5ZFd4bGN5OXBZM2t2WVd4cExtcHpKeWtwTzF4Y2JtRnNhUzVwYm1sMFEyOXVabWxuS0NrN1hGeHVZV3hwTG0xNVFXeHBVblZzWlNncE8xd2lmVjBpTENKcFkyOXVJam9pYUhSMGNITTZMeTluYVhSbFpTNWpiMjB2Wm14NU1UTTVOeTlvYVd0bGNpMXBZM2t2Y21GM0wyMWhjM1JsY2k5aGJHbDVkVzR1Y0c1bklpd2ljSEp2ZUhraU9pSWlmUT09XFxcXFxcXCJcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIGNvbmZpcm0oe1xcXFxuICAgICAgICAgICAgdGl0bGU6IE1ZX1JVTEUudGl0bGUgKyAn5o+Q56S6JyxcXFxcbiAgICAgICAgICAgIGNvbnRlbnQ6ICfmnKzop4TliJnkvp3otZbkupHnm5jmsYflvbHop4TliJnvvIzngrnlh7vkuIvpnaLnmoTnoa7lrprmjInpkq7lr7zlhaXvvIzms6jmhI/lr7zlhaXlkI7kuIDlrpropoHlnKjkupHnm5jmsYflvbHnmbvlvZXpmL/ph4zkupHnm5jotKblj7fvvIzlkKbliJnkuI3og73nlKgnLFxcXFxuICAgICAgICAgICAgY29uZmlybTogcnUsXFxcXG4gICAgICAgICAgICBjYW5jZWw6IHJ1XFxcXG4gICAgICAgIH0pXFxcXG4gICAgfVxcXFxuICAgIGFkZExpc3RlbmVyKFxcXFxcXFwib25DbG9zZVxcXFxcXFwiLCAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICAgICAgY2xlYXJNeVZhcihcXFxcXFxcInNcXFxcXFxcIik7XFxcXG4gICAgfSkpO1xcXFxuICAgIGxldCB0aXAgPSBcXFxcXFxcIuS6keebmOaQnOe0ouWQmyDmo4DntKLlip/og73nlLHlr7nlupTnvZHnq5nmj5DkvpvvvIzmnKzop4TliJnkuI3mj5Dkvpvku7vkvZXlhoXlrrlcXFxcXFxcIjtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogdGlwLFxcXFxuICAgICAgICB1cmw6ICQoXFxcXFxcXCIjbm9Mb2FkaW5nI1xcXFxcXFwiKS5sYXp5UnVsZSgodGlwKSA9PiB7XFxcXG4gICAgICAgICAgICBjb25maXJtKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLkvb/nlKjor7TmmI5cXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBjb250ZW50OiB0aXAgKyBcXFxcXFxcIu+8jOacrOinhOWImeS7o+eggeWujOWFqOW8gOa6kO+8jOS7heS+m+WtpuS5oOWSjOeglOeptu+8m+eCueWHu+S4i+aWueehruWumuaMiemSrui3s+i9rOS6keebmOaxh+W9seWwj+eoi+W6j1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIGNvbmZpcm06IFxcXFxcXFwiJ2hpa2VyOi8vaG9tZUDkupHnm5jmsYflvbEnXFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiXFxcXG4gICAgICAgIH0sIHRpcCksXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImljb25fMl9yb3VuZFxcXFxcXFwiLFxcXFxuICAgICAgICBkZXNjOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICBwaWNfdXJsOiBcXFxcXFxcImhpa2VyOi8vaW1hZ2VzL2ljb24yXFxcXFxcXCJcXFxcbiAgICB9KTtcXFxcbiAgICBsZXQgZG1vZGUgPSBnZXRJdGVtKFxcXFxcXFwiZG1vZGVcXFxcXFxcIiwgXFxcXFxcXCLkupHnm5jmsYflvbFcXFxcXFxcIik7XFxcXG4gICAgaW5pdENvbmZpZyh7XFxcXG4gICAgICAgIG1vZGU6IGRtb2RlXFxcXG4gICAgfSk7XFxcXG5cXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogXFxcXFxcXCLmqKHlvI/vvJpcXFxcXFxcIiArIGRtb2RlLFxcXFxuICAgICAgICB1cmw6IFxcXFxcXFwic2VsZWN0Oi8vXFxcXFxcXCIgKyBKU09OLnN0cmluZ2lmeSh7XFxcXG4gICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLpgInmi6nmqKHlvI9cXFxcXFxcIixcXFxcbiAgICAgICAgICAgIG9wdGlvbnM6IFtcXFxcXFxcIuS6keebmOaxh+W9sVxcXFxcXFwiLCBcXFxcXFxcIuacrOWcsOi9rOeggVxcXFxcXFwiLCBcXFxcXFxcIkpvZeeJiOmYv+mHjOS6keebmFxcXFxcXFwiLCBcXFxcXFxcIuWumOaWuUFQUFxcXFxcXFwiXSxcXFxcbiAgICAgICAgICAgIGNvbDogMSxcXFxcbiAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXFxcXFwiZG1vZGVcXFxcXFxcIiwgaW5wdXQpO1xcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxcXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0ID09IFxcXFxcXFwi5a6Y5pa5QVBQXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/kv67mlLnmiJDlip/vvIzor7fnoa7kv53miYvmnLrmnInlronoo4XpmL/ph4zkupHnm5jlrpjmlrlBUFBcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09IFxcXFxcXFwiSm9l54mI6Zi/6YeM5LqR55uYXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHIxID0gZmV0Y2goXFxcXFxcXCJoaWtlcjovL2hvbWVA6Zi/6YeM5LqR55uYXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoIXIxIHx8IHIxLmxlbmd0aCA8PSA1KSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcnUgPSAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCLmtbfpmJTop4bnlYzpppbpobXpopHpgZPop4TliJnjgJDpmL/ph4zkupHnm5jjgJHvv6Vob21lX3J1bGVfdXJs77+laHR0cDovL2hpa2VyLm5va2lhLnByZXNzL2hpa2VydWxlL3J1bGVsaXN0Lmpzb24/aWQ9NTY1NlxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm0oe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBNWV9SVUxFLnRpdGxlICsgJ+aPkOekuicsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ+acrOinhOWImeS+nei1lumYv+mHjOS6keebmOinhOWIme+8jOeCueWHu+S4i+mdoueahOehruWumuaMiemSruWvvOWFpe+8jOazqOaEj+WvvOWFpeWQjuS4gOWumuimgeeZu+W9leS6keebmOi0puWPt++8jOWQpuWImeS4jeiDveeUqCcsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybTogcnUsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsOiBydVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+ivt+WvvOWFpee8uuWkseeahOinhOWImVxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5L+u5pS55oiQ5Yqf77yM6K+356Gu5L+d5pyJ55m75b2V6LSm5Y+3XFxcXFxcXCI7XFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/kv67mlLnmiJDlip/vvIzms6jmhI/opoHlnKjkupHnm5jmsYflvbHorr7nva7ph4zpnaLnmbvlvZXotKblj7dcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH0pLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJpY29uXzJfcm91bmRcXFxcXFxcIixcXFxcbiAgICAgICAgZGVzYzogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgcGljX3VybDogXFxcXFxcXCJoaWtlcjovL2ltYWdlcy9pY29uMVxcXFxcXFwiXFxcXG4gICAgfSk7XFxcXG5cXFxcblxcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiAn5pCc57SiJyxcXFxcbiAgICAgICAgZGVzYzogJ+ivt+i+k+WFpeWFs+mUruivjScsXFxcXG4gICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcXFxuICAgICAgICB1cmw6ICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICAgICAgcHV0TXlWYXIoJ3MnLCBpbnB1dCk7XFxcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcXFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxuICAgICAgICB9KSxcXFxcbiAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoJ3MnLCAnJylcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pO1xcXFxuICAgIGxldCBydWxlcyA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9kYXRhXFxcXFxcXCIpKCk7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IFxcXFxcXFwiXFxcXFxcXCIgPT0gciA/IFxcXFxcXFwi4oCc4oCc5YWo6YOo4oCd4oCdXFxcXFxcXCIgOiBcXFxcXFxcIuWFqOmDqFxcXFxcXFwiLFxcXFxuICAgICAgICB1cmw6ICQoXFxcXFxcXCIjbm9Mb2FkaW5nI1xcXFxcXFwiKS5sYXp5UnVsZSgoKSA9PiB7XFxcXG4gICAgICAgICAgICBjbGVhckl0ZW0oXFxcXFxcXCJyXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIlxcXFxuICAgICAgICB9KSxcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwic2Nyb2xsX2J1dHRvblxcXFxcXFwiLFxcXFxuICAgICAgICBkZXNjOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICBwaWNfdXJsOiBcXFxcXFxcIlxcXFxcXFwiXFxcXG4gICAgfSk7XFxcXG4gICAgZm9yIChsZXQgaXQgb2YgcnVsZXMpIHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBpdCA9PSByID8gXFxcXFxcXCLigJzigJxcXFxcXFxcIiArIGl0ICsgXFxcXFxcXCLigJ3igJ1cXFxcXFxcIiA6IGl0LFxcXFxuICAgICAgICAgICAgdXJsOiAkKFxcXFxcXFwiI25vTG9hZGluZyNcXFxcXFxcIikubGF6eVJ1bGUoKHIpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXFxcXFwiclxcXFxcXFwiLCByKTtcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIlxcXFxuICAgICAgICAgICAgfSwgaXQpLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwic2Nyb2xsX2J1dHRvblxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZGVzYzogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHBpY191cmw6IFxcXFxcXFwiXFxcXFxcXCJcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfVxcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIGNvbF90eXBlOiAnbGluZScsXFxcXG4gICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICBpZDogJ3lwai1sJ1xcXFxuICAgICAgICB9XFxcXG4gICAgfSk7XFxcXG59XFxcXG5sZXQgcyA9IGdldE15VmFyKCdzJywgJycpO1xcXFxuaWYgKHMgIT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgIGxldCBwID0gTVlfUEFHRTtcXFxcbiAgICBsZXQgZGF0YSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9kYXRhXFxcXFxcXCIpKHAsIHIgIT0gXFxcXFxcXCJcXFxcXFxcIiA/IHIgOiBudWxsKTtcXFxcblxcXFxuICAgIGxldCBwYWdlaWQgPSBcXFxcXFxcInlwai1wYWdlXFxcXFxcXCIgKyBwO1xcXFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDApIHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuWKoOi9veesrFxcXFxcXFwiICsgcCArIFxcXFxcXFwi6aG15Lit77yM6L+b5bqm77yaMS9cXFxcXFxcIiArIGRhdGEubGVuZ3RoLFxcXFxuICAgICAgICAgICAgdXJsOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF9jZW50ZXJfMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZGVzYzogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHBpY191cmw6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgIGlkOiBwYWdlaWRcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfVxcXFxuICAgIHNldFJlc3VsdChkKTtcXFxcbiAgICBsb2coZGF0YS5sZW5ndGgpO1xcXFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDApIHtcXFxcbiAgICAgICAgLy/lpJrnur/nqIvliqDovb0gICAgICAgIFxcXFxuICAgICAgICBsZXQgcmVhbFBhZ2UgPSBcXFxcXFxcIlxcXFxcXFwiID09IHIgPyAxIDogcDtcXFxcbiAgICAgICAgbGV0IHRhc2tzID0gZGF0YS5tYXAoaXQgPT4ge1xcXFxuICAgICAgICAgICAgcmV0dXJuIHtcXFxcbiAgICAgICAgICAgICAgICBmdW5jOiBmdW5jdGlvbihydWxlKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBydWxlLmZpbmQocywgcmVhbFBhZ2UpO1xcXFxuICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAgcGFyYW06IGl0LFxcXFxuICAgICAgICAgICAgICAgIGlkOiBcXFxcXFxcInJ1bGVAXFxcXFxcXCIgKyBpdC5uYW1lXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pO1xcXFxuXFxcXG4gICAgICAgIGJhdGNoRXhlY3V0ZSh0YXNrcywge1xcXFxuICAgICAgICAgICAgZnVuYzogZnVuY3Rpb24ocGFyYW0sIGlkLCBlcnJvciwgcmVzdWx0KSB7XFxcXG4gICAgICAgICAgICAgICAgLy9sb2coXFxcXFxcXCJsaXN0ZW5lcjogXFxcXFxcXCIgKyAocmVzdWx0IHx8IFtdKS5sZW5ndGgpXFxcXG4gICAgICAgICAgICAgICAgcGFyYW0uaSA9IHBhcmFtLmkgKyAxO1xcXFxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGl0IG9mIHJlc3VsdCkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLmogPSBwYXJhbS5qICsgMTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRJdGVtQmVmb3JlKHBhZ2VpZCwge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXQudGl0bGUuaW5jbHVkZXMoXFxcXFxcXCLigJzigJzigJ3igJ1cXFxcXFxcIikgPyBpdC50aXRsZSA6IFxcXFxcXFwi4oCc4oCc4oCd4oCdXFxcXFxcXCIgKyBpdC50aXRsZS5yZXBsYWNlKG5ldyBSZWdFeHAoXFxcXFxcXCI8ZW0+fDwvZW0+XFxcXFxcXCIsIFxcXFxcXFwiZ1xcXFxcXFwiKSwgXFxcXFxcXCJcXFxcXFxcIikucmVwbGFjZShuZXcgUmVnRXhwKHMsIFxcXFxcXFwiZ1xcXFxcXFwiKSwgXFxcXFxcXCI8c3Ryb25nPjxzcGFuIHN0eWxlPVxcXFxcXFxcXFxcXFxcXCJjb2xvcjogIzFFOTBGRlxcXFxcXFxcXFxcXFxcXCI+XFxcXFxcXCIgKyBzICsgXFxcXFxcXCI8L3NwYW4+PC9zdHJvbmc+XFxcXFxcXCIpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBpdC5kZXNjLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGl0LnVybCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGljX3VybDogaXQucGljX3VybCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IGl0LnBpY191cmwgPyAnbW92aWVfMV92ZXJ0aWNhbF9waWMnIDogXFxcXFxcXCJ0ZXh0XzFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcXFxcXFxcIl9fYXBwXFxcXFxcXCIgKyBNWV9QQUdFICsgXFxcXFxcXCJAXFxcXFxcXCIgKyBwYXJhbS5qLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdFRpdGxlOiBmYWxzZVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cXFxcblxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICBpZiAocGFyYW0uaSA+PSBwYXJhbS5hbGwpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlSXRlbShwYWdlaWQpXFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlSXRlbSh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLliqDovb3nrKxcXFxcXFxcIiArIE1ZX1BBR0UgKyBcXFxcXFxcIumhteS4re+8jOi/m+W6pu+8mlxcXFxcXFwiICsgKHBhcmFtLmkgKyAxKSArIFxcXFxcXFwiL1xcXFxcXFwiICsgcGFyYW0uYWxsLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF9jZW50ZXJfMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBpY191cmw6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBwYWdlaWRcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgcGFyYW06IHtcXFxcbiAgICAgICAgICAgICAgICBhbGw6IGRhdGEubGVuZ3RoLFxcXFxuICAgICAgICAgICAgICAgIGk6IDAsXFxcXG4gICAgICAgICAgICAgICAgajogLTFcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSlcXFxcbiAgICB9XFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5pCc57Si6aG16Z2iXFxcIixcXFwicGF0aFxcXCI6XFxcInNvdXBcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG52YXIgZCA9IFtdO1xcXFxuaWYgKE1ZX1BBUkFNUy5rZXkpIHtcXFxcbiAgICBwdXRNeVZhcihcXFxcXFxcInNcXFxcXFxcIiwgTVlfUEFSQU1TLmtleSk7XFxcXG59XFxcXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goXFxcXFxcXCJoaWtlcjovL3BhZ2Uvc291XFxcXFxcXCIpKS5ydWxlKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCJDQ09GXFxcIixcXFwicGF0aFxcXCI6XFxcImNjb2ZcXFwiLFxcXCJydWxlXFxcIjpcXFwidmFyIHdyYXB1ID0gKHUpID0+IHtcXFxcbiAgICBpZiAoY29uZmlnLm1vZGUgPT0gXFxcXFxcXCLmnKzlnLDovaznoIFcXFxcXFxcIikge1xcXFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9wdXNoP3VybD1oaWtlcjovL2VtcHR5IyMnICsgZW5jb2RlVVJJQ29tcG9uZW50KHUpICsgJz8/P2Z5cGFnZSdcXFxcbiAgICB9XFxcXG4gICAgaWYgKGNvbmZpZy5tb2RlID09IFxcXFxcXFwiSm9l54mI6Zi/6YeM5LqR55uYXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2Uvc2hhcmU/cGFnZT1meXBhZ2UmcnVsZT3pmL/ph4zkupHnm5gmc2hhcmVfdXJsPScgKyB1O1xcXFxuICAgIH1cXFxcbiAgICBpZiAoY29uZmlnLm1vZGUgPT0gXFxcXFxcXCLkupHnm5jmsYflvbFcXFxcXFxcIikge1xcXFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPScgKyB1ICsgJz8/ZnlwYWdlJztcXFxcbiAgICB9XFxcXG4gICAgaWYgKC9hbGl5dW5kcml2ZS8udGVzdCh1KSkge1xcXFxuICAgICAgICBjb25zdCBbbGluaywgX3NoYXJlX3B3ZF0gPSB1LnNwbGl0KCc/c2hhcmVfcHdkPScpO1xcXFxuICAgICAgICBjb25zdCBbX2xpbmssIF9mb2xkZXJJRF0gPSBsaW5rLnNwbGl0KCcvZm9sZGVyLycpO1xcXFxuICAgICAgICBsZXQgc2hhcmVfcHdkID0gKF9zaGFyZV9wd2QgfHwgJycpLnNwbGl0KCcjbmFtZT0nKVswXSB8fCAnJztcXFxcbiAgICAgICAgbGV0IHNoYXJlSWQgPSBfbGluay5zcGxpdCgnY29tL3MvJylbMV07XFxcXG4gICAgICAgIHJldHVybiAnc21hcnRkcml2ZTovL3NoYXJlL2Jyb3dzZT9zaGFyZUlkPScgKyBzaGFyZUlkICsgJyZzaGFyZVB3ZD0nICsgc2hhcmVfcHdkO1xcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gXFxcXFxcXCJ3ZWI6Ly9cXFxcXFxcIiArIHU7XFxcXG59O1xcXFxuJC5leHBvcnRzID0ge1xcXFxuICAgIG5hbWU6ICdDQ09GJyxcXFxcbiAgICBwYWdlOiB0cnVlLFxcXFxuICAgIGZpbmQ6IGZ1bmN0aW9uKHMsIHBhZ2UpIHtcXFxcbiAgICAgICAgbGV0IGQgPSBbXVxcXFxuICAgICAgICBjb25zdCB7XFxcXG4gICAgICAgICAgICBieXRlc1RvU2l6ZSxcXFxcbiAgICAgICAgICAgIGNvbG9yXFxcXG4gICAgICAgIH0gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS90b29scycpO1xcXFxuICAgICAgICBsZXQgaHRtbCA9IGZldGNoKCdodHRwczovL3Bhbi5jY29mLmNjL2FwaS9zZWFyY2gnLCB7XFxcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJjb250ZW50LXR5cGVcXFxcXFxcIjogJ2FwcGxpY2F0aW9uL2pzb24nLFxcXFxuICAgICAgICAgICAgICAgICdSZWZlcmVyJzogJ2h0dHBzOi8vcGFuLmNjb2YuY2Mvc2VhcmNoP2tleXdvcmQ9JyArIHNcXFxcbiAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICBib2R5OiB7XFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJwYWdlU2l6ZVxcXFxcXFwiOiAyMCxcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcInBhZ2VOdW1cXFxcXFxcIjogcGFnZSxcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcImtleXdvcmRcXFxcXFxcIjogcyxcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcImZyb21Nb2JpbGVcXFxcXFxcIjogdHJ1ZVxcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxcXG4gICAgICAgIH0pXFxcXG4gICAgICAgIGxldCBsaXN0ID0gSlNPTi5wYXJzZShodG1sKVxcXFxuICAgICAgICAgICAgLmRhdGEucm93c1xcXFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgICAgIGxldCBpdCA9IGxpc3RbaV1cXFxcbiAgICAgICAgICAgIGxldCB0aXRsZSA9IGl0LmZpbGVOYW1lXFxcXG4gICAgICAgICAgICBsZXQgbXVybCA9IGl0LnVybFxcXFxuICAgICAgICAgICAgbGV0IHR5cGUgPSBpdC50eXBlLnJlcGxhY2UoL2ZvbGRlci8sICfmlofku7blpLknKS5yZXBsYWNlKC9maWxlLywgJ+aWh+S7ticpXFxcXG4gICAgICAgICAgICBpZiAodGl0bGUuaW5jbHVkZXMocykpIHtcXFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXFxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6ICfigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT5DQ09GPC9mb250PiZuYnNwOycgKyAn5paH5Lu257G75Z6L77yaJyArIHR5cGUgKyAn77yM5paH5Lu25aSn5bCP77yaJyArIGJ5dGVzVG9TaXplKGl0LnNpemUpLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHdyYXB1KG11cmwpXFxcXG4gICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuICAgICAgICByZXR1cm4gZFxcXFxuICAgIH1cXFxcbn1cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLlt6XlhbdcXFwiLFxcXCJwYXRoXFxcIjpcXFwidG9vbHNcXFwiLFxcXCJydWxlXFxcIjpcXFwiZnVuY3Rpb24gYnl0ZXNUb1NpemUoc2l6ZSkge1xcXFxuICAgIGlmIChzaXplIDwgMC4xICogMTAyNCkge1xcXFxuICAgICAgICAvL+Wwj+S6jjAuMUtC77yM5YiZ6L2s5YyW5oiQQlxcXFxuICAgICAgICBzaXplID0gc2l6ZS50b0ZpeGVkKDIpICsgXFxcXFxcXCJCXFxcXFxcXCI7XFxcXG4gICAgfSBlbHNlIGlmIChzaXplIDwgMC4xICogMTAyNCAqIDEwMjQpIHtcXFxcbiAgICAgICAgLy8g5bCP5LqOMC4xTULvvIzliJnovazljJbmiJBLQlxcXFxuICAgICAgICBzaXplID0gKHNpemUgLyAxMDI0KS50b0ZpeGVkKDIpICsgXFxcXFxcXCJLQlxcXFxcXFwiO1xcXFxuICAgIH0gZWxzZSBpZiAoc2l6ZSA8IDAuMSAqIDEwMjQgKiAxMDI0ICogMTAyNCkge1xcXFxuICAgICAgICAvLyDlsI/kuo4wLjFHQu+8jOWImei9rOWMluaIkE1CXFxcXG4gICAgICAgIHNpemUgPSAoc2l6ZSAvICgxMDI0ICogMTAyNCkpLnRvRml4ZWQoMikgKyBcXFxcXFxcIk1CXFxcXFxcXCI7XFxcXG4gICAgfSBlbHNlIHtcXFxcbiAgICAgICAgLy8g5YW25LuW6L2s5YyW5oiQR0JcXFxcbiAgICAgICAgc2l6ZSA9IChzaXplIC8gKDEwMjQgKiAxMDI0ICogMTAyNCkpLnRvRml4ZWQoMikgKyBcXFxcXFxcIkdCXFxcXFxcXCI7XFxcXG4gICAgfVxcXFxuICAgIC8vIOi9rOaIkOWtl+espuS4slxcXFxuICAgIGxldCBzaXplU3RyID0gc2l6ZSArIFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgIC8vIOiOt+WPluWwj+aVsOeCueWkhOeahOe0ouW8lVxcXFxuICAgICAgICBpbmRleCA9IHNpemVTdHIuaW5kZXhPZihcXFxcXFxcIi5cXFxcXFxcIiksXFxcXG4gICAgICAgIC8vIOiOt+WPluWwj+aVsOeCueWQjuS4pOS9jeeahOWAvFxcXFxuICAgICAgICBkb3UgPSBzaXplU3RyLnN1YnN0cihpbmRleCArIDEsIDIpO1xcXFxuICAgIC8vIOWIpOaWreWQjuS4pOS9jeaYr+WQpuS4ujAw77yM5aaC5p6c5piv5YiZ5Yig6ZmkMDBcXFxcbiAgICBpZiAoZG91ID09PSBcXFxcXFxcIjAwXFxcXFxcXCIpIHJldHVybiBzaXplU3RyLnN1YnN0cmluZygwLCBpbmRleCkgKyBzaXplU3RyLnN1YnN0cihpbmRleCArIDMsIDIpO1xcXFxuICAgIHJldHVybiBzaXplO1xcXFxufVxcXFxuJC5leHBvcnRzLmJ5dGVzVG9TaXplID0gYnl0ZXNUb1NpemU7XFxcXG4kLmV4cG9ydHMuY29sb3IgPSBmdW5jdGlvbih0ZXh0LCBjb2xvcikge1xcXFxuICAgIHRleHQgKz0gXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICBpZiAodGV4dC5pbmRleE9mKFxcXFxcXFwi4oCc4oCc4oCd4oCdXFxcXFxcXCIpID09PSAwKSB7XFxcXG4gICAgICAgIHRleHQucmVwbGFjZShcXFxcXFxcIuKAnOKAnOKAneKAnVxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKTtcXFxcbiAgICB9XFxcXG4gICAgcmV0dXJuIFxcXFxcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9J1xcXFxcXFwiICsgY29sb3IgKyBcXFxcXFxcIic+XFxcXFxcXCIgKyB0ZXh0ICsgXFxcXFxcXCI8L2ZvbnQ+XFxcXFxcXCI7XFxcXG59XFxcXG5cXFxcbiQuZXhwb3J0cy5zbGVlcCA9IGZ1bmN0aW9uKHRpbWVvdXQpIHtcXFxcbiAgICBqYXZhLmxhbmcuVGhyZWFkLnNsZWVwKHRpbWVvdXQpO1xcXFxufVxcXFxuXFxcXG5mdW5jdGlvbiBodG1sVGFnKHRhZywgdGV4dCkge1xcXFxuICAgIHRleHQgKz0gXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICBpZiAodGV4dC5pbmRleE9mKFxcXFxcXFwi4oCc4oCc4oCd4oCdXFxcXFxcXCIpID09PSAwKSB7XFxcXG4gICAgICAgIHRleHQucmVwbGFjZShcXFxcXFxcIuKAnOKAnOKAneKAnVxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKTtcXFxcbiAgICB9XFxcXG4gICAgcmV0dXJuIFxcXFxcXFwi4oCc4oCc4oCd4oCdXFxcXFxcXCIgKyBcXFxcXFxcIjxcXFxcXFxcIiArIHRhZyArIFxcXFxcXFwiPlxcXFxcXFwiICsgdGV4dCArIFxcXFxcXFwiPC9cXFxcXFxcIiArIHRhZyArIFxcXFxcXFwiPlxcXFxcXFwiO1xcXFxuXFxcXG59XFxcXG4kLmV4cG9ydHMuaHRtbFRhZyA9IGh0bWxUYWc7XFxcXG4kLmV4cG9ydHMuc21hbGwgPSBmdW5jdGlvbih0ZXh0KSB7XFxcXG4gICAgcmV0dXJuIGh0bWxUYWcoXFxcXFxcXCJzbWFsbFxcXFxcXFwiLCB0ZXh0KTtcXFxcbn1cXFxcblxcXFxuZnVuY3Rpb24gZ2V0VGltZShmaWxlLGlzU3RhbmRhcmQpIHtcXFxcbiAgICBpc1N0YW5kYXJkID0gaXNTdGFuZGFyZHx8ZmFsc2U7XFxcXG4gICAgbGV0IHRUaW1lID0gZmlsZS51cGRhdGVkX2F0IHx8IGZpbGUudGltZV9zdHIgfHwgXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICB0VGltZSA9IHRUaW1lLnNwbGl0KFxcXFxcXFwiVFxcXFxcXFwiKTtcXFxcbiAgICBsZXQgZGF0ZSA9IHRUaW1lWzBdO1xcXFxuICAgIGlmKGlzU3RhbmRhcmQpe1xcXFxuICAgICAgICBkYXRlID0gZGF0ZS5yZXBsYWNlKC8tL2csXFxcXFxcXCIvXFxcXFxcXCIpO1xcXFxuICAgIH1cXFxcbiAgICB0VGltZSA9IHRUaW1lWzFdLnNwbGl0KC9afFxcXFxcXFxcLi8pO1xcXFxuICAgIGRhdGUgKz0gXFxcXFxcXCIgXFxcXFxcXCIgKyB0VGltZVswXTtcXFxcbiAgICByZXR1cm4gZGF0ZTtcXFxcbn1cXFxcbmZ1bmN0aW9uIGdldFRpbWVJbnQodGltZVN0cil7XFxcXG4gICAgcmV0dXJuIChuZXcgRGF0ZSh0aW1lU3RyKSkuZ2V0VGltZSgpXFxcXG59XFxcXG4kLmV4cG9ydHMuZ2V0VGltZSA9IGdldFRpbWU7XFxcXG5cXFxcbmxldCBjaG5OdW1DaGFyID0ge1xcXFxuICAgIOmbtjogMCxcXFxcbiAgICDkuIA6IDEsXFxcXG4gICAg5LqMOiAyLFxcXFxuICAgIOS4iTogMyxcXFxcbiAgICDlm5s6IDQsXFxcXG4gICAg5LqUOiA1LFxcXFxuICAgIOWFrTogNixcXFxcbiAgICDkuIM6IDcsXFxcXG4gICAg5YWrOiA4LFxcXFxuICAgIOS5nTogOVxcXFxufTtcXFxcblxcXFxubGV0IGNobk5hbWVWYWx1ZSA9IHtcXFxcbiAgICDljYE6IHtcXFxcbiAgICAgICAgdmFsdWU6IDEwLFxcXFxuICAgICAgICBzZWNVbml0OiBmYWxzZVxcXFxuICAgIH0sXFxcXG4gICAg55m+OiB7XFxcXG4gICAgICAgIHZhbHVlOiAxMDAsXFxcXG4gICAgICAgIHNlY1VuaXQ6IGZhbHNlXFxcXG4gICAgfSxcXFxcbiAgICDljYM6IHtcXFxcbiAgICAgICAgdmFsdWU6IDEwMDAsXFxcXG4gICAgICAgIHNlY1VuaXQ6IGZhbHNlXFxcXG4gICAgfSxcXFxcbiAgICDkuIc6IHtcXFxcbiAgICAgICAgdmFsdWU6IDEwMDAwLFxcXFxuICAgICAgICBzZWNVbml0OiB0cnVlXFxcXG4gICAgfSxcXFxcbiAgICDkur86IHtcXFxcbiAgICAgICAgdmFsdWU6IDEwMDAwMDAwMCxcXFxcbiAgICAgICAgc2VjVW5pdDogdHJ1ZVxcXFxuICAgIH1cXFxcbn1cXFxcblxcXFxuZnVuY3Rpb24gQ2hpbmVzZVRvTnVtYmVyKGNoblN0cikge1xcXFxuICAgIGxldCBydG4gPSAwO1xcXFxuICAgIGxldCBzZWN0aW9uID0gMDtcXFxcbiAgICBsZXQgbnVtYmVyID0gMDtcXFxcbiAgICBsZXQgc2VjVW5pdCA9IGZhbHNlO1xcXFxuICAgIGxldCBzdHIgPSBjaG5TdHIuc3BsaXQoJycpO1xcXFxuXFxcXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgbGV0IG51bSA9IGNobk51bUNoYXJbc3RyW2ldXTtcXFxcbiAgICAgICAgaWYgKHR5cGVvZiBudW0gIT09ICd1bmRlZmluZWQnKSB7XFxcXG4gICAgICAgICAgICBudW1iZXIgPSBudW07XFxcXG4gICAgICAgICAgICBpZiAoaSA9PT0gc3RyLmxlbmd0aCAtIDEpIHtcXFxcbiAgICAgICAgICAgICAgICBzZWN0aW9uICs9IG51bWJlcjtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIGxldCB1bml0ID0gY2huTmFtZVZhbHVlW3N0cltpXV0udmFsdWU7XFxcXG4gICAgICAgICAgICBzZWNVbml0ID0gY2huTmFtZVZhbHVlW3N0cltpXV0uc2VjVW5pdDtcXFxcbiAgICAgICAgICAgIGlmIChzZWNVbml0KSB7XFxcXG4gICAgICAgICAgICAgICAgc2VjdGlvbiA9IChzZWN0aW9uICsgbnVtYmVyKSAqIHVuaXQ7XFxcXG4gICAgICAgICAgICAgICAgcnRuICs9IHNlY3Rpb247XFxcXG4gICAgICAgICAgICAgICAgc2VjdGlvbiA9IDA7XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIHNlY3Rpb24gKz0gKG51bWJlciAqIHVuaXQpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgbnVtYmVyID0gMDtcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gcnRuICsgc2VjdGlvbjtcXFxcbn1cXFxcblxcXFxuZnVuY3Rpb24gbmFtZUNvbXBhcmUoYSwgYikge1xcXFxuICAgIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKVxcXFxuICAgICAgICByZXR1cm4gYSA9PSBudWxsID8gYiA9PSBudWxsID8gMCA6IC0xIDogMTtcXFxcblxcXFxuICAgIGEgPSBhLnJlcGxhY2UoLyhb6Zu25LiA5LqM5LiJ5Zub5LqU5YWt5LiD5YWr5Lmd5Y2B55m+5Y2D5LiH5Lq/XSkvZywgZnVuY3Rpb24obWF0Y2gsIHAxLCBwMiwgcDMsIG9mZnNldCwgc3RyaW5nKSB7XFxcXG4gICAgICAgIC8vIHAxIGlzIG5vbmRpZ2l0cywgcDIgZGlnaXRzLCBhbmQgcDMgbm9uLWFscGhhbnVtZXJpY3NcXFxcbiAgICAgICAgcmV0dXJuIENoaW5lc2VUb051bWJlcihwMSk7XFxcXG4gICAgfSlcXFxcbiAgICBiID0gYi5yZXBsYWNlKC8oW+mbtuS4gOS6jOS4ieWbm+S6lOWFreS4g+WFq+S5neWNgeeZvuWNg+S4h+S6v10pL2csIGZ1bmN0aW9uKG1hdGNoLCBwMSwgcDIsIHAzLCBvZmZzZXQsIHN0cmluZykge1xcXFxuICAgICAgICAvLyBwMSBpcyBub25kaWdpdHMsIHAyIGRpZ2l0cywgYW5kIHAzIG5vbi1hbHBoYW51bWVyaWNzXFxcXG4gICAgICAgIHJldHVybiBDaGluZXNlVG9OdW1iZXIocDEpO1xcXFxuICAgIH0pXFxcXG5cXFxcbiAgICBsZXQgTlVNQkVSUyA9IGphdmEudXRpbC5yZWdleC5QYXR0ZXJuLmNvbXBpbGUoXFxcXFxcXCIoPzw9XFxcXFxcXFxcXFxcXFxcXEQpKD89XFxcXFxcXFxcXFxcXFxcXGQpfCg/PD1cXFxcXFxcXFxcXFxcXFxcZCkoPz1cXFxcXFxcXFxcXFxcXFxcRClcXFxcXFxcIilcXFxcbiAgICBsZXQgc3BsaXQxID0gTlVNQkVSUy5zcGxpdChuZXcgamF2YS5sYW5nLlN0cmluZyhhKSk7XFxcXG4gICAgbGV0IHNwbGl0MiA9IE5VTUJFUlMuc3BsaXQobmV3IGphdmEubGFuZy5TdHJpbmcoYikpO1xcXFxuXFxcXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1pbihzcGxpdDEubGVuZ3RoLCBzcGxpdDIubGVuZ3RoKTsgaSsrKSB7XFxcXG4gICAgICAgIGxldCBjMSA9IHNwbGl0MVtpXS5jaGFyQ29kZUF0KDApO1xcXFxuICAgICAgICBsZXQgYzIgPSBzcGxpdDJbaV0uY2hhckNvZGVBdCgwKTtcXFxcbiAgICAgICAgbGV0IGNtcCA9IDA7XFxcXG4gICAgICAgIGxldCB6ZXJvQ2hhckNvZGUgPSAnMCcuY2hhckNvZGVBdCgwKTtcXFxcbiAgICAgICAgbGV0IG5pbmVDaGFyQ29kZSA9ICc5Jy5jaGFyQ29kZUF0KDApO1xcXFxuXFxcXG4gICAgICAgIGlmIChjMSA+PSB6ZXJvQ2hhckNvZGUgJiYgYzEgPD0gbmluZUNoYXJDb2RlICYmIGMyID49IHplcm9DaGFyQ29kZSAmJiBjMiA8PSBuaW5lQ2hhckNvZGUpIHtcXFxcbiAgICAgICAgICAgIGNtcCA9IG5ldyBqYXZhLm1hdGguQmlnSW50ZWdlcihzcGxpdDFbaV0pLmNvbXBhcmVUbyhuZXcgamF2YS5tYXRoLkJpZ0ludGVnZXIoc3BsaXQyW2ldKSk7XFxcXG4gICAgICAgIH1cXFxcblxcXFxuICAgICAgICBpZiAoY21wID09PSAwKSB7XFxcXG4gICAgICAgICAgICBsZXQgcmVnZXggPSAvW2EtekEtWjAtOV0vXFxcXG4gICAgICAgICAgICBsZXQgczEgPSBTdHJpbmcoc3BsaXQxW2ldKVxcXFxuICAgICAgICAgICAgbGV0IHMyID0gU3RyaW5nKHNwbGl0MltpXSlcXFxcbiAgICAgICAgICAgIGlmIChyZWdleC50ZXN0KHMxKSB8fCByZWdleC50ZXN0KHMyKSkge1xcXFxuICAgICAgICAgICAgICAgIGNtcCA9IG5ldyBqYXZhLmxhbmcuU3RyaW5nKHNwbGl0MVtpXSkuY29tcGFyZVRvKG5ldyBqYXZhLmxhbmcuU3RyaW5nKHNwbGl0MltpXSkpO1xcXFxuICAgICAgICAgICAgICAgIC8vIGNtcCA9IHMxLmxvY2FsZUNvbXBhcmUoczIsICdlbicpXFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIGNtcCA9IHMxLmxvY2FsZUNvbXBhcmUoczIsICd6aCcpXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcblxcXFxuICAgICAgICBpZiAoY21wICE9PSAwKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gY21wO1xcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuICAgIGxldCBsZW5ndGhDbXAgPSBzcGxpdDEubGVuZ3RoIC0gc3BsaXQyLmxlbmd0aDtcXFxcbiAgICAvLyBpZiAobGVuZ3RoQ21wICE9PSAwKSBsZW5ndGhDbXAgPSBsZW5ndGhDbXAgPiAwID8gLTEgOiAxO1xcXFxuICAgIHJldHVybiBsZW5ndGhDbXA7XFxcXG59XFxcXG5cXFxcbiQuZXhwb3J0cy5zb3J0cyA9IGZ1bmN0aW9uKGxpc3QsIHNvcnQpIHtcXFxcbiAgICBpZiAoc29ydCA9PT0gXFxcXFxcXCLnsbvlnotcXFxcXFxcIikge1xcXFxuICAgICAgICAvLyBsb2coXFxcXFxcXCLnsbvlnovmjpLluo9cXFxcXFxcIik7XFxcXG4gICAgICAgIGxpc3Quc29ydChmdW5jdGlvbihhLCBiKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gYS50eXBlIC0gYi50eXBlXFxcXG4gICAgICAgIH0pO1xcXFxuICAgIH0gZWxzZSBpZiAoc29ydCA9PT0gXFxcXFxcXCLlkI3np7BcXFxcXFxcIikge1xcXFxuICAgICAgICAvLyBsb2coXFxcXFxcXCLlkI3np7DmjpLluo9cXFxcXFxcIik7XFxcXG4gICAgICAgIC8vIGxpc3Quc29ydChmdW5jdGlvbihhLCBiKSB7XFxcXG4gICAgICAgIC8vICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lLCBcXFxcXFxcInpoXFxcXFxcXCIpXFxcXG4gICAgICAgIC8vIH0pO1xcXFxuICAgICAgICBsaXN0LnNvcnQoZnVuY3Rpb24oYSwgYikge1xcXFxuICAgICAgICAgICAgcmV0dXJuIG5hbWVDb21wYXJlKGEubmFtZXx8YS50aXRsZSwgYi5uYW1lfHxiLnRpdGxlKTtcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfSBlbHNlIGlmIChzb3J0ID09PSBcXFxcXFxcIuWkp+Wwj1xcXFxcXFwiKSB7XFxcXG4gICAgICAgIC8vIGxvZyhcXFxcXFxcIuWkp+Wwj+aOkuW6j1xcXFxcXFwiKTtcXFxcbiAgICAgICAgbGlzdC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiAoYS5zaXplIHx8IE51bWJlcihhLnNpemVfc3RyKSB8fCAwKSAtIChiLnNpemUgfHwgTnVtYmVyKGIuc2l6ZV9zdHIpIHx8IDApO1xcXFxuICAgICAgICB9KTtcXFxcbiAgICB9ZWxzZSBpZiAoc29ydCA9PT0gXFxcXFxcXCLml7bpl7RcXFxcXFxcIikge1xcXFxuICAgICAgICAvLyBsb2coXFxcXFxcXCLml7bpl7TmjpLluo9cXFxcXFxcIik7XFxcXG4gICAgICAgIGxpc3Quc29ydChmdW5jdGlvbihhLCBiKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gZ2V0VGltZUludChnZXRUaW1lKGEsdHJ1ZSkpIC0gZ2V0VGltZUludChnZXRUaW1lKGIsdHJ1ZSkpXFxcXG4gICAgICAgIH0pO1xcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gbGlzdFxcXFxufVxcXFxuXFxcXG5mdW5jdGlvbiBzaW1pbGFyKHMsIHQsIGYpIHsvL+WIpOaWreS4pOS4quWtl+espuS4suS5i+mXtOeahOebuOS8vOW6plxcXFxuICAgIGlmICghcyB8fCAhdCkge1xcXFxuICAgICAgICByZXR1cm4gMFxcXFxuICAgIH1cXFxcbiAgICBpZihzID09PSB0KXtcXFxcbiAgICAgICAgcmV0dXJuIDEwMDtcXFxcbiAgICB9XFxcXG4gICAgdmFyIGwgPSBzLmxlbmd0aCA+IHQubGVuZ3RoID8gcy5sZW5ndGggOiB0Lmxlbmd0aFxcXFxuICAgIHZhciBuID0gcy5sZW5ndGhcXFxcbiAgICB2YXIgbSA9IHQubGVuZ3RoXFxcXG4gICAgdmFyIGQgPSBbXVxcXFxuICAgIGYgPSBmIHx8IDJcXFxcbiAgICB2YXIgbWluID0gZnVuY3Rpb24gKGEsIGIsIGMpIHtcXFxcbiAgICAgICAgcmV0dXJuIGEgPCBiID8gKGEgPCBjID8gYSA6IGMpIDogKGIgPCBjID8gYiA6IGMpXFxcXG4gICAgfVxcXFxuICAgIHZhciBpLCBqLCBzaSwgdGosIGNvc3RcXFxcbiAgICBpZiAobiA9PT0gMCkgcmV0dXJuIG1cXFxcbiAgICBpZiAobSA9PT0gMCkgcmV0dXJuIG5cXFxcbiAgICBmb3IgKGkgPSAwOyBpIDw9IG47IGkrKykge1xcXFxuICAgICAgICBkW2ldID0gW11cXFxcbiAgICAgICAgZFtpXVswXSA9IGlcXFxcbiAgICB9XFxcXG4gICAgZm9yIChqID0gMDsgaiA8PSBtOyBqKyspIHtcXFxcbiAgICAgICAgZFswXVtqXSA9IGpcXFxcbiAgICB9XFxcXG4gICAgZm9yIChpID0gMTsgaSA8PSBuOyBpKyspIHtcXFxcbiAgICAgICAgc2kgPSBzLmNoYXJBdChpIC0gMSlcXFxcbiAgICAgICAgZm9yIChqID0gMTsgaiA8PSBtOyBqKyspIHtcXFxcbiAgICAgICAgICAgIHRqID0gdC5jaGFyQXQoaiAtIDEpXFxcXG4gICAgICAgICAgICBpZiAoc2kgPT09IHRqKSB7XFxcXG4gICAgICAgICAgICAgICAgY29zdCA9IDBcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgY29zdCA9IDFcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGRbaV1bal0gPSBtaW4oZFtpIC0gMV1bal0gKyAxLCBkW2ldW2ogLSAxXSArIDEsIGRbaSAtIDFdW2ogLSAxXSArIGNvc3QpXFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG4gICAgbGV0IHJlcyA9ICgxIC0gZFtuXVttXSAvIGwpICoxMDBcXFxcbiAgICByZXR1cm4gcmVzLnRvRml4ZWQoZilcXFxcbn1cXFxcblxcXFxuJC5leHBvcnRzLnNpbWlsYXIgPSBzaW1pbGFyO1xcXFxuJC5leHBvcnRzLnJlbW92ZUV4dCA9IGZ1bmN0aW9uIChmaWxlKXtcXFxcbiAgICByZXR1cm4gZmlsZS5zcGxpdCgnLicpLnNsaWNlKDAsLTEpLmpvaW4oJy4nKVxcXFxufTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCJ1XFxcIixcXFwicGF0aFxcXCI6XFxcInVcXFwiLFxcXCJydWxlXFxcIjpcXFwiJC5leHBvcnRzID0gZnVuY3Rpb24ocnVsZSwgb3JpZ2luLCBtb2RlKSB7XFxcXG4gICAgcmV0dXJuICQudG9TdHJpbmcoKHJ1bGUsIG9yaWdpbiwgbW9kZSkgPT4ge1xcXFxuICAgICAgICBsZXQgaG9zdCA9IG9yaWdpbi5yZXBsYWNlKG5ldyBSZWdFeHAoXFxcXFxcXCJodHRwOi8vfGh0dHBzOi8vXFxcXFxcXCIpLCBcXFxcXFxcIlxcXFxcXFwiKS5zcGxpdChcXFxcXFxcIi9cXFxcXFxcIilbMF07XFxcXG4gICAgICAgIGxldCBob3N0cyA9IGhvc3Quc3BsaXQoXFxcXFxcXCIuXFxcXFxcXCIpO1xcXFxuICAgICAgICBpZiAoaG9zdHMubGVuZ3RoID4gMikge1xcXFxuICAgICAgICAgICAgaG9zdCA9IGhvc3RzW2hvc3RzLmxlbmd0aCAtIDJdICsgXFxcXFxcXCIuXFxcXFxcXCIgKyBob3N0c1tob3N0cy5sZW5ndGggLSAxXTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aChcXFxcXFxcIm1hZ25ldFxcXFxcXFwiKSkge1xcXFxuICAgICAgICAgICAgY29uZmlybSh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5rip6aao5o+Q56S6XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgY29udGVudDogXFxcXFxcXCLmo4DmtYvliLDmlrDnmoTno4Hpk77lnLDlnYDvvIzngrnlh7vnoa7lrprmjInpkq7ljbPlj6/mkq3mlL7vvIzngrnlh7vlj5bmtojmjInpkq7lj6/ku6XlpI3liLbpk77mjqVcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBjb25maXJtOiAkLnRvU3RyaW5nKChtYWcpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hZztcXFxcbiAgICAgICAgICAgICAgICB9LCBpbnB1dCksXFxcXG4gICAgICAgICAgICAgICAgY2FuY2VsOiAkLnRvU3RyaW5nKChtYWcpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiY29weTovL1xcXFxcXFwiICsgbWFnXFxcXG4gICAgICAgICAgICAgICAgfSwgaW5wdXQpXFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XFxcXG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQuaW5jbHVkZXMoXFxcXFxcXCJhbGl5dW5kcml2ZS5jb21cXFxcXFxcIikgJiYgbW9kZSAhPSBcXFxcXFxcIuWumOaWuUFQUFxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICBsb2coaW5wdXQpO1xcXFxuICAgICAgICAgICAgaWYgKGlucHV0LmluY2x1ZGVzKCdjaGVja3VybD91cmw9JykgJiYgaW5wdXQuaW5jbHVkZXMoJyZ1cmxyZWZlcicpKSB7XFxcXG4gICAgICAgICAgICAgICAgaW5wdXQgPSBkZWNvZGVVUklDb21wb25lbnQoaW5wdXQuc3BsaXQoJyZ1cmxyZWZlcicpWzBdLnNwbGl0KCdjaGVja3VybD91cmw9JylbMV0pO1xcXFxuICAgICAgICAgICAgICAgIC8vbG9nKCfotLTlkKcnK2lucHV0KTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHJldHVybiAkLnRvU3RyaW5nKCh1cmwsIHJ1bGUpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBmeV9icmlkZ2VfYXBwLm9wZW4oSlNPTi5zdHJpbmdpZnkoe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLpmL/ph4zkupHnm5hcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS9kZXRhaWw/cnVsZT3kupHnm5jmsYflvbEmdXJsPVxcXFxcXFwiICsgdXJsICsgJz8/ZnlwYWdlJyxcXFxcbiAgICAgICAgICAgICAgICB9KSlcXFxcbiAgICAgICAgICAgIH0sIGlucHV0LCBydWxlKVxcXFxuICAgICAgICB9IGVsc2UgaWYgKC9cXFxcXFxcXC4obXAzfGZsYWN8bTRhKSQvLnRlc3QoaW5wdXQpKSB7XFxcXG4gICAgICAgICAgICBsb2coaW5wdXQpO1xcXFxuICAgICAgICAgICAgcmV0dXJuICQudG9TdHJpbmcoKHVybCwgcnVsZSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAucGxheVZpZGVvKHVybCk7XFxcXG4gICAgICAgICAgICB9LCBpbnB1dCwgcnVsZSlcXFxcbiAgICAgICAgfSBlbHNlIGlmICghaW5wdXQuaW5jbHVkZXMoaG9zdCkgJiYgaW5wdXQuc3RhcnRzV2l0aChcXFxcXFxcImh0dHBcXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgIGxvZyhpbnB1dCk7XFxcXG4gICAgICAgICAgICByZXR1cm4gJC50b1N0cmluZygodXJsLCBydWxlLCBtb2RlKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5vcGVuKEpTT04uc3RyaW5naWZ5KHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi6K+m5oOFXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UveXNmeD9ydWxlPVxcXFxcXFwiICsgcnVsZSArIFxcXFxcXFwiJnI9XFxcXFxcXCIgKyBydWxlICsgXFxcXFxcXCImbW9kZT1cXFxcXFxcIiArIG1vZGUgKyBcXFxcXFxcIiMjXFxcXFxcXCIgKyB1cmwsXFxcXG4gICAgICAgICAgICAgICAgfSkpXFxcXG4gICAgICAgICAgICB9LCBpbnB1dCwgcnVsZSwgbW9kZSk7XFxcXG4gICAgICAgIH0gZWxzZSBpZiAoIWlucHV0LnN0YXJ0c1dpdGgoXFxcXFxcXCJodHRwXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICBsb2coaW5wdXQpO1xcXFxuICAgICAgICAgICAgLy/og73llKTotbdBUFDnmoTnmb3lkI3ljZVcXFxcbiAgICAgICAgICAgIGxldCB3aGl0ZSA9IFtcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcInFrbGlua1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwiYmRuZXRkaXNrXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJ4dW5sZWlhcHBcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcInNtYXJ0ZHJpdmVcXFxcXFxcIlxcXFxuICAgICAgICAgICAgXTtcXFxcbiAgICAgICAgICAgIGxldCBpbldoaXRlID0gd2hpdGUuZmlsdGVyKGl0ID0+IGlucHV0LnN0YXJ0c1dpdGgoaXQpKS5sZW5ndGggPiAwO1xcXFxuICAgICAgICAgICAgaWYgKCFpbldoaXRlKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgcmV0dXJuICQudG9TdHJpbmcoKHVybCwgcnVsZSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAub3BlblRoaXJkQXBwICYmIGZ5X2JyaWRnZV9hcHAub3BlblRoaXJkQXBwKHVybCk7XFxcXG4gICAgICAgICAgICB9LCBpbnB1dCwgcnVsZSlcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcblxcXFxuICAgICAgICB9XFxcXG4gICAgfSwgcnVsZSwgb3JpZ2luLCBtb2RlKTtcXFxcbn1cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCJ5c2Z4XFxcIixcXFwicGF0aFxcXCI6XFxcInlzZnhcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG52YXIgZCA9IFtdO1xcXFxubGV0IHJ1bGUgPSBnZXRQYXJhbShcXFxcXFxcInJcXFxcXFxcIikuc3BsaXQoXFxcXFxcXCIjI1xcXFxcXFwiKVswXTtcXFxcbmxldCBtb2RlID0gKGdldFBhcmFtKFxcXFxcXFwibW9kZVxcXFxcXFwiKSB8fCBcXFxcXFxcIlxcXFxcXFwiKS5zcGxpdChcXFxcXFxcIiMjXFxcXFxcXCIpWzBdO1xcXFxubGV0IHVybCA9IE1ZX1VSTC5zcGxpdChcXFxcXFxcIiMjXFxcXFxcXCIpWzFdO1xcXFxubGV0IGl0ZSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS91XFxcXFxcXCIpKHJ1bGUsIGdldEhvbWUodXJsKSwgbW9kZSk7XFxcXG5sZXQganMgPSAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICB0cnkge1xcXFxuICAgICAgICBpZiAoZG9jdW1lbnQudGl0bGUgJiYgZG9jdW1lbnQudGl0bGUubGVuZ3RoKSB7XFxcXG4gICAgICAgICAgICBsZXQgciA9ICQkJCgpLmxhenlSdWxlKCh0KSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgc2V0UGFnZVRpdGxlKHQpO1xcXFxuICAgICAgICAgICAgfSwgZG9jdW1lbnQudGl0bGUpO1xcXFxuICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5wYXJzZUxhenlSdWxlKHIpO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICBmeV9icmlkZ2VfYXBwLmxvZyhlLnRvU3RyaW5nKCkpO1xcXFxuICAgIH1cXFxcbn0pO1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICB1cmw6IHVybCxcXFxcbiAgICBjb2xfdHlwZTogXFxcXFxcXCJ4NV93ZWJ2aWV3X3NpbmdsZVxcXFxcXFwiLFxcXFxuICAgIGRlc2M6IFxcXFxcXFwiMTAwJSYmZmxvYXRcXFxcXFxcIixcXFxcbiAgICBwaWNfdXJsOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgIGV4dHJhOiB7XFxcXG4gICAgICAgIHVybEludGVyY2VwdG9yOiBpdGUsXFxcXG4gICAgICAgIGpzOiBqcyxcXFxcbiAgICAgICAgY2FuQmFjazogdHJ1ZSxcXFxcbiAgICAgICAganNMb2FkaW5nSW5qZWN0OiB0cnVlLFxcXFxuICAgICAgICBmbG9hdFZpZGVvOiB0cnVlXFxcXG4gICAgfVxcXFxufSk7XFxcXG5kLnB1c2goe1xcXFxuICAgIGNvbF90eXBlOiBcXFxcXFxcImxpbmVcXFxcXFxcIixcXFxcbiAgICBleHRyYToge1xcXFxuICAgICAgICBpZDogdXJsXFxcXG4gICAgfVxcXFxufSk7XFxcXG5zZXRSZXN1bHQoZCk7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6Zi/6YeMbGF6eVxcXCIsXFxcInBhdGhcXFwiOlxcXCJhbGlsYXp5XFxcIixcXFwicnVsZVxcXCI6XFxcImV2YWxQcml2YXRlSlMoXFxcXFxcXCJyTyszN3VHK2IySmJsOTFKWGUxQUxhY0FjUksxeGlrS05TZngzT0pOdjlOUkhGNWVGV1JnNXRkLzJWd21RY0ZWbUVFYzRSSkZTdGxKcUVuRlZuQWdXZm5oTW00Q0hkOTVrQUd0enhiVGVBOHhsV1hlaGNSbStsL043K2hZR3ZPNlo1QmREc1lWakg2dXBtb1FCY1ZiMHlYV3ExUEc2cEs1QkdYa2NIZmZ1MXVXbXhkR2prdWlwVXR4QkxTUCt0WkxyeHo0aXQ5aERmYnJXeVNDaU5mOE55ajg4MHovNDdSMkFpb3BrYzF4bTlhS1dENFF1bHRpbHV2TWZUSHovWXpLMlJWVzJkSUlncmM1MTJKNHBTbzVyS1pJcUl1RUpwbDZ5UG9MaWIxWDl3RHpMbUN3ZGN0dmpNQ2NUWThuNUFCdVJHbGtWSkFDZ01KcVlsU1ZqWFZnWnBtd1BJWVFuSTR2VElRRkxTUHlqemxvUzUzSXNrMkF1d2M5cTJCSVI3TUZyNEQ2UkZTeUcycFhsRXBaOTFWbUduQ0t4T05KZzNMMG5XR3NCdlNFc2dUY3hoNDl1UUNmOTRETk1qSFRLKy9ObEYyeWowc3pTd0RJajk5L3BKZDBaUlVGNTV5WXR2dnlRZWVOZ3hhSVd0WTFwcXVEaE10Z1RQR3RlbTFVS2xNNW5LNEkrRnFodmJBY3pYbFloaHEzRCtBOVJCc0poNXlFa1BSdXhSV1hBMk5XWDJoaWhlZU1XQ29lLzlaNlVtOXNMU01xTmUwaDdZUkhtS2dKRTBac0FhN0hGZlhXc0Nja0k4RjE1V1lUdjdkbnR3NFJCZkxxTUJmbTJ2eUh6bXQ3N21TRGpuTE9yVkp6eEQrL1V6djNCYXhiOUJWVkZPL2tWcVRNU0xrRmdxS0tNd0hpbVNxcEdpRFlEWUw1ckVCbTNtZElWNXpRVk5XVVJlRjkwRFBLcmFIaFhYdVdQVFFvUzJkQUFiWHNFbG5rbGlxSWVsM09vTHZ6azdJODVvbFlhZHNUaXdNelV3QmFELys3TStodUwrUDRDeThFMEYrS29Oa2lnTzVtUWdxTE1PYytwTXRaREtHOXQvRE9YUkM5dUUvSFNNR1JNVlBSYnRINldOQStsSE0zaE5EU1BIQ0FsVis5dGNLK2FDalBCNENyZG5vb2NCem5aaXY2NnNnYVJsWTQwZGtEWk1lZWxlaFVsbmpRWkFNeVl3U3RSV2lYNjVsQSt5TEtSRWRjTjFpOUdXdTFqMmthLzVldlJUdStKWmNVb3l4OWZEVFVsbU1PQUNKNlF2SDNPcGJZM1VCUHNjTTlxL1kzampYUkZmbXJnL1lwUDdWQVZiempOdmNPenBReSt3Nzg4N0RrSnl2djJ3bk9KN3pOdkRnSHV2ZGNFeXh6QUtnSUNnZ3UvL3UvdUxjT3hMQzNMVUZFQU5BSGVQQjVmNnIyZ0Zqa2FxNHN4WWk4dCtULzNWcHMrN1A3dzNDVXJFeHlzazBJUVFlcktkOUkxY1ZxVVR2ciswMFFmNEVtSFZhdmViVjdzcUUxZk9DT1pNZWdEZDNSQVJEOFNKTDFrdkwxRFFRZWdKWkM4NUI0SlZxT1djdWVpcE5hMGhOeDdRaEtubnNaOUMwVDFUSXg0Ui8vbEs0VWdyM3U1ZXVudXBqbVErZFhEY0Q5cHBhZk0rSXN1dkNEWjRVZExZa0lGS0xKazVnZDlGZWpWaU5MZGRhZ2dObTdLd3pKQmhrV0dhYnN5MXJ1TW1ybkw0WUVrZmVDc3VHOXBHVDVmTFo2elhoc0RPWTBkd2srNmo5QjdCNWJiSllXc1B4YjgyNWduRXBXVTlhODhWaFdqTWp2VHR0QkVYOVYwRlU3KzZpZGJTYlhyMSsxV1NpcGR3UjRJemhVOUkzNWhaem84amlGTWJ0VDJ4cERaTkF6dzN2eDF5dkw2eTRQUExlM3hObFdxQTNtR0lCWklXem5jVlNNUWQva2h1c2V5TXNaYVFnTXdHK3QyRHdLa1FBU0xueWxLdnRHYTd0b3JXZEFzRk90ZzFBMlkvbWRmT0IzZEpwSWpMd2pmZUhyOXJMbkVyRDgrT2hNUHIwb2s5eXVKRk1TMlFxcEJjL2pEODEzZ2o0M2ZCVEt1NFJWSHR4aS8vdnBkZXZBeUdEOVhsREVZVlE3L0IrMVNFY2wzeGp4Tk9ldEtpV1JETi83L1JaWTJVSUppZzVNdmRLUTdjM3Z0b2gya1cwOUNBeUEraG9kY1dObmo0V3h2aWJXcm5WM2NwZ0UwYjZQS2F3Q1hzVktZYVViamxSYTNseFVxaXQ0TzJiRFhBeW1VZTQ2KzBCVVB0QXZGWitLanlURjcyZkZFZzhhQnZMeW5ZeGljR3I3RVYxWHBKVityR0dkc2k1M25LTVZkNFdEc2dScU02Y3crRDlrQkloT0J6anN5d0t6eHdySWhqNFhiMHAvSW9Da1lYQUw2U01EK09vQXNZeDNoYXE2am9FYXpKbGhETyttZEc4L0ZlQ1oxMElySFRuZ3N4eEZ6L3VuVGVFOTI2VlV5eXZMU05aV2Mvc0luL3ZXU0FIVTlwL1VGMFdrWFUvZDdqNGV6enVNeEZHNTJwcjA0ZEIyZUwxMEVVMGtIUEt5TnVWT1hObHFVdGNWdmYyRUJ1bWgxcHVDRGFtWURJY2xtS3dJM1dQQmZpRlkxZU5TdkZTY0RubXFXZ2p5QjA1QlVtYm5RK1NZbjBzTVRVSFR3TG1VR2ZTTnc1Q2dQdEEyS3c1bTVuSDBLL1NVVnNwak1EN05ZYytEV2pVTDJiMnNxOFE1MlVvendOc09BSXQ3aU1jZllVc2k5eldEazkra3JTRldYdHJLaVQxUVhLRTdXTDNJSjdUaUc4cFJzL0w0ZWs1S2hTSVRZMmZ2QWEra3FuVm9LcW0zUnBoWGJ3TjlITllJTk1iZ2h5VWRsb0tCemptakRveVd5bUJxUzhLZWIxbFNIcDhKY2NPT3M1WnRtaVRrZUNUNU9sMHEyZFRib1A0aGNZaG1WV3hGRnp6ZDZPbTZzVHFZT0I0VkdGMUV0QUc3R0RSY1J1WFdFWVBTazNxSXVkenVGdnNHK2dmTnoyd2dVa0NhY2xRTWlmcm9xWWVqekdyQmFMekhzUmp0enBReSt3Nzg4N0RrSnl2djJ3bk9KeGFjYTUzWGI0RHBwN3AwdytrNkJzWGtTVmRqakt5VGpkU1d2bkNkOUJ3V0VVZGpvckFJN0FaRU1kdzdNclFjSXQvd015bVhIU1pTaEY3T2VreDltbklhYTZEUW9ZVlBieU9IM1dLN1pDTTMvZUl3bWFWNHdzWlByNUZtdkxSQlNxOHlWUmlUU1d5ZUxQRlBkbmJGOE5yY0RhZFk2dmRrZjFOdzl6OWNjbnM3ZnRZV2U0Z0FJaFVWQjZqcHNQSUw4ZTNwODlrQmRlZFZndGpucE9hSXIra01OSENxbGhrN0dBSE8yNzJrRDh1UUhPSjZZaDE3QXI0R0MyUmRYakJNOXh1THNQS1htdDZYQkwvOXUyOTJjSXc1VndwWlNTRTBTT2FRZnYzUE03UGtadW5HZEhqR1I1d29oNUh5ekpSYVFPbXNOMGk0bnZIRTN3TWU3Z1NSbEpPV2J0aGFPVEVNK3ZhTFRncDdaRkxWM3pKbmliZ1ZQR0VvanhaNTdXVjZkNWV1VXg4M2NlMXV6TmQvM2pralRlZ2U2VnZxU0lhcllnOEdLemhuYy8wMGFNd0owd09FaXNMWE9SWHdSQTFTL0hFUDBTcjZ2R1RMbU1QWjVPOVJzS3k0T3ZLUDBDZ0JHbHF0Z2VCdTQ0OWwyU1VjRmRqMDJjYmYxWDB0UDFCUExlNnhmMkhmYnoycXRGaHF3NldUWExGSkgvaWtpclY4Z1VoWnJjS1ZIYWJRSUx5NFI2allHdEV2SWg2V0I3RnNYbG16SjVjZHF4ZTdUOTUrRHFCNWRCMFlSVlhmTEUzZTdKNXV5M3hFZlpkOEh6ZzE3SDBOdW5Xa09ER3FiOCtHZ2l5aGM0dXJ5YjJiWWVVTVF6RE14OXp5RW5TdzhvRnhFRVR4T3hrRjUwcG9ZZUdrOU91MkFVcjZyaVo2V0FiaVcyeUdLLys5OXU5ejg3KzNZT3Zjd1FnRFBxcmp4K3grTjNBUmFVZW1XaEFtaXIxRmRnbWZEdzYrTWpVSU9oZnRmR2xSRnlONmk2Vk9vVm9OY2RRUmd0ZTdaR24yNUhPZTBiYXUzYy9rdDZXUUU5c2w4RmFiQzB4Mmc4YytoWHQ2TkdHakpqRXZFQS9FeUp4OG5DdHdIM1BETVRsWk95RTE3YUtwVjZxalVZdlNxYnhTOG1jcUhEV28yMG56WUIzMENObU10cTJscEJrWkY1MlhFYmR5OXhTQWlpeVdEdWhFYThHSE5EOHE3b1BEalBhLzF6VitFaU56QWpneGtDd0ZqNGkxbEpjSG1yZVlMWURGTTZHUlhSQjRSaHlkcG0vUVQyVmJFc1diOWgrbDc2TDIyZ3RZN2QyQ2xJTDNDaGw1d3NzcnkwaldWblA3Q0ovNzFrZ0IxUFlQN21PTWR3Vmx3UC9BMnpvWllLeXdHMm1IWTZTTGVwcjFQNVYrRDBNRnVGTFZtZE5id0o2d2I3dFpoa0xFWTcvTEs4dEkxbFp6K3dpZis5WklBZFQyWjU4RkRSeFY3dVpaVlc2OVRWOEFBSXY3Skk2SVlmY1FNbko2aS9wamtZaUdkb1djL2FXZ0FQZXVja1FrVStoVWs4UU9MWHhNZzgzZDVOakEydFZodTlKcWI4YSszbDFjeWc2dVcwNG1ab0VCYklwYmNOd3lNSGpqMzBtRnQ3SndXTlhqVXJ4VW5BNTVxbG9JOGdkT1Fjc3J5MGpXVm5QN0NKLzcxa2dCMVBadmxxeEplVFZaSjVCdkJQdzhLUlFwd0ZpdEhTaCtFS0pHQ01vVXVGSTIxQnBCWlpydU1uY0VtS25XbVcrT05CMzFWN2hZaVVhVzVKblVxWTloejhDUW96M3hUb1ZYR3gyeUMzMHFhZUZYS29kVzE0S0hSUkY5SXB1K2dHQ29MQWtwcFBjRVlZQktBQ3NBUDdBM1lna1VScXRVZ0ZoazAyVFFzbGRPMlRvbklNTmY5UEtUN0RHb28vSlRycmxqeG9lbUp4S0xIUmRLNkppbGZQOG9TUVdrb0xKdjd0ckFaZnlaZXZnZCs4NUUvbXVHejhiYzBLeDE5TWh1NlBQbjlTcWtEdjF0Z3RJbDBaa2FtNGRiMzFIc1A3K3pVVTFRVzAvMHl2U0tPTEQvd291NTN4Wll5Wlo5SVh2KzhlN3FjZlZ2SUx4blBYN1hZWnZ5YVpXZDFwSVc5N3kzbVd1dEFIQ1E4OHI4aVlJTzE4WDNhbE9jVVA3ZDZoQ3BTWkJSSHVwT3U3Ti94bE5qRXl4Qk1HYWZCSzNiVGVCb2t1Y0NtOGtNa2tFd3RiUm04bzM1d253UXg3UnpGekNrMldCV0I1bUR6ZDM2NnJnTVdrbUpWVHFhWnByb2NmZzdOT2Fpd0xTVlM5cjNockNwUE5GWFd2OGV3YW5QSXplMzdBUzkzNGk4bnRKdERPWjRmMHVtd1RNdVFFeEo5aHJFVnMxa2N1YlJ3TjYwNTVtZ0x3SkFJVjRBOGZ1c25HRmJLSmNLN212ZWVnMGZkakZtejExbUVPWGh4SFkrTytoS2daZE9YQWtjOGRTdWhVSzl5TTZVTXZzTy9QT3c1Q2NyNzlzSnppY2U2VnZxU0lhcllnOEdLemhuYy8wMGFNd0owd09FaXNMWE9SWHdSQTFTL0MwcDFhNG5SSTQ3eVd6KzAxWFVMRjh2a3ovM2pCQ0ExWk41VVhTMTV4cTV4SlAwNUkxekUydk8zejZQdVdKamJnUjJ0ZkxwK1kyMmdNWUp5ZW45Wjc0dEVoYU9hQXFsS0I4eVhEWUpHVWNJMDlScHk5ZXZnb29IaXhzcXNMU1pzWWxVcDlsK2ppdmRFWHhLbzVBdjZ5RlNxcDJzM1VTTloxbUdaNGx5WHVqTHl5dkxTTlpXYy9zSW4vdldTQUhVOXNvTFFRWlhtcVpEek9COFBiWVhkRVRMSzh0STFsWnord2lmKzlaSUFkVDJDTTI0c0FuVkJ5T0hrZko0WjdISmxvQnZOa0E0eVJ5c3lHL3ZVTll0TXUvTEs4dEkxbFp6K3dpZis5WklBZFQyTTd2WkV3VGJzc0RFYVBlLyt2MktxVzlZb01udXBhNDNGL3hsdkYyUVNFUTZYYWFOSnBDUmI1UHlqdkpGN28yc2VMeDk3ZXZIS3haZ2lwTlJSR3hLNjk3UVM4bFY2dGdIMWFWODQveFFIMktmOE12c0ppUFkwQTQxaXlXSzJNaUp5eXZMU05aV2Mvc0luL3ZXU0FIVTlqYndzSmhOQkxqSkZlL1ROVVlsVFZYTEs4dEkxbFp6K3dpZis5WklBZFQyczlFL0VpUlFBNDRWMCtOb0RkSDZrbG5IWGlSVHpqY2RRWmZiMjJqQ1BhbnNVaHc3aVhjd0lUSlNKUFo2bkVibmE5K0cxWEc3VnRPTHJjeGJNTGlLSnM2VU12c08vUE93NUNjcjc5c0p6aWRhdXNBejJyRUd5UlFQbnFJcld2SXlFeEtlREhDZWllTEhNQ1JCQjhQMW9mQy9Xc0J1dzNZK2diVzY5N1BKQzNOMjhhRXFzc2lQSnJYWElHbllzeTNNb0NRSml0bmhya2oxN2lUN3l4eWRXRDlyUzJzWjBJWmh3TlcvZWpyY1h6UVZIcVRrUS9WUU5uZ3BvWHJ6ZXAvMGJleEpjQlVBOHdHMUlNT2d0NklwUGMyVENRM0xSdUZxbHZwQmV3YzhxTnJMdTNBaDY0VnlCZHB2QlhGTFNmLzZJSEloMWpyYTNBcFl6OTdNZy9ESFhQbUQzTjhQMk53WFk4cW96QnpOSXBoajBDTlNBUjBQRkJkMGw0TFN1WEhUSTJmL2tSMVk2WVc1V0Q5cGxXbUQxb1JQc2tNSGEvVCsrNkNRbm45bFU2RGtWY0pJTTFlcU43a0krTzdPUWcrTUZUaUZLQ0lJL0tldWQ4Mm5RMjJWZ3hlWnVFVzdRK0c0SVpjem5Ock1lbXl6eFJaNng4YWNlc3l3bVNwRnNnMTVqSUhkQ1VpVmtLWnRJa3FQQkVnbmlPR05ndnJzdWdLcDRtcjNjTS9yMjJhdkhGN3NsTjdlL2pBazFGRlVvN05iRTBxbzFONU5KY1RkVzBvai9ScHduQ3g1Z3prRUQveEtmTDRFQ2RTcTUwelhrV2lTVXZMTjBKK0lKTnUxZVJDR0F1d0JidElmMnNUQW9yblovNUh6YmFpZXRCa0pyckVaWWhDUi9obG1hLzB5UjhlODFyQnNCd1EwNFM1Uy82NEFlVEZkRWlHQWU3R3ZHK29ON3d0QUhKeE1KR2pNSnRUYlQzRGpZb1A5cWtPdUtWRVg1RXQ2Zm9sc2Ziai9VVTVwVXpGWnJxQ25KS3NvVm5TQkpTZFRxbE05QnVaRDJZWnY4cWRXYm1zaHZHdFFSZWNlLzgvWnY4SHNqVUZ6NFpFR1RaWXpnc0tBRFRNdk9YY1FXcDk5QjVlRGIxSXZNWHJVZUdpWFB1dFAxdkZ0K29kRkx6YzN1czhVZE1hd3RxS3h1dXFCbFhwRWl6cHJjcVd5UitCcTBseWlFbFhyRE1TK0x3MFBhZmRNdUpnSEZTUzlyUGY2RHlraUs0dFhoWVErUzNvYmNWWkJ1b3RTVlBwUVp2NHJrY3NyeTBqV1ZuUDdDSi83MWtnQjFQYVpyRzZBbFljOHM3blNsaGhyODlqd3l5dkxTTlpXYy9zSW4vdldTQUhVOW8zZ1JQdEdLbnFpeGxyUmZFc1BQN052V1ZJZW53bHh3NDZ6bG0yYUpPUjRNbmJ5QTFVRVhKQWw3LzRrK0h0YUVjc3J5MGpXVm5QN0NKLzcxa2dCMVBaRlRXS29KVGc5ZE1CbWc0Rzl2NW9keHE5ZjZGSTdDNEgxRkxiYjJFZ1ZpUXM4TE91MDBwQ2ZGQjhzQnBMVWt5UWVJUmdJQkxVWTB6cExaRjV4ZVFXVWNQSTdXK0tINzgzWG9XcjRtd2pBMlhIWGIvTTMrVFg2WkFTczkxeG5QVi9MSzh0STFsWnord2lmKzlaSUFkVDJhZVRGWklON2RSM0xUWlBUbW1wZWZzWE9aWUZrQm0yU2UxWUxRVGJRSno3T2xETDdEdnp6c09RbksrL2JDYzRuVmFaOEFBZ0p5NmRYT2hOTGxYck01RXY5WmRiRWJPUjhRbUxaUVZTSWNHTlJvVnFLL2JIcFdiSHpGQ2x6SXphYkdrTjJ6OURBTHFiblE3dUZndjNzOWp4WE5CNzExTEdKdnJqSWxodXYzK2xWZXFnK3h2TEtQc3JValR2S3I2V0JDendzNjdUU2tKOFVIeXdHa3RTVEpBay9HVFgzeEpGVEE3RXFMMDFscjcvOEhhOUFnZ3dVa0pEUG4wVXV2OFNjZUx4OTdldkhLeFpnaXBOUlJHeEs2ekVhT0VQY0lDTDU4V0wzWEZOQU1MK2wxNGJWN1VaMWpWOC9rckZFamZ5aDVIMG5sSmhRM1pqaFNyb29hdC92clVTSWwwVDFLR0hHQVd5K2srcUFQd0MvUFMxeGxreEFjSktFYmJwODYwVm82cXpNMTFFazVhYWN1RXByN0hITWZyaU9OSVA5bnlXOHZHUGZGdnVQdW42bkprVS96R3pQK3VUbW5TMEgrL1R4V00ydWduL252aWNVSm9HVkVxOFVnWVUzSWpRVExvLzhqNllYekV2R0hmVlNadWRENUppZlN3eE5RZFBBdVpRWjhuc2RwRHFITnFYTUhRUXNTNjN0dlNEVlFEUm14akE5V0VKYVhLUDY5d04yOGFFcXNzaVBKclhYSUduWXN5M00rdzZlUWFQbzZKZmhRR0tvK0pzMUs2RlVJQWVsTkFBNHVxN3l3WUlBdUhJMzBOODh0anlJdHY5SW8vVEk1cUdrL1BhZ1Vab3Q1aWwzZUExQXpBc3FzY3NyeTBqV1ZuUDdDSi83MWtnQjFQYnlscEZ2bGRZZUI3U2l4aDFVMzludjlQbTN4Y2ZJZTJBWU5OQURMT25JaWtadE9rY0Zud2JMQUJBc3pmVE5zSFpELy9IR1l3MEFWTXl3dUhLT3ltZHRYaDluR1RDS3hrQjh1ZnBRTFc4VmpmZXdJcjUrSVAzcXpxZnlsdFhjVzJxaFJMM2JjOWtCMXZka0x2QWJRdUNsdFZnS0RMU2FWYTNzaTJHUUlsMVZTcFRtRVh0QlBSRmsyL3pxUlRzZ2JRTUwvbHFEWHJKNXhmRXlxZ3NiUlpOd0VsQUExZXlpdWN3REt1SDIxdEszdml4NWd6a0VEL3hLZkw0RUNkU3E1MHpMSzh0STFsWnord2lmKzlaSUFkVDJrcnE3NldYNHc2c2lRdHNrSlJsdGtzL3Q1NzVsaWZIUE5CaHZZMjh5dUpLbHdwOVRvcmlXcUJicXVGZC84M1lUcGYrdUxTcEtWUlh3RVVBRkxCZEhGb0tKbUNhZEE3T1JNbWlTeUt6ZE9rVW5MandLZUJqTWlQTHBQbEtCdE1VcGFlWE5ObGRSUW9saThudG1wWDN5NW9Zd3FwanBQV2ExRE9IUGx3WXlUNHdqS2I2SUVKVG4yNFdmbHJjYTZ1VHNZcmxkK2tzeS8vdWFseVA2Qmxhc1c4L1hkK3N4WUphVkJtTVN2QThpems3TFI4aHh5eHFCbnI2VGZ4THk3TDc2TFVTRHhGNUljR1Q2T0dERkVYQTRTT1VDNVNsK1BxNmFnaHJlTGU1dUZrOTlVeVpSZDh4T3owTFJ4cjN2ZDJmcDFqYm5GVHNqb2RqVjBmSGVZT2R0NTNibVFqcWNwTFZEVllXUjJXN0lsenltN09GV1k5SVdvU1FDZHhsZFhWUmREN0ZPWWMyNG52RC9mNU1TR3Y4MU5oeWhqMm9WdW1TbW9CejJ3alFkajE4Um5aOGJJSjNHejMwdUcrNXdnbVR5bmpNQmtUekFwbjN1ZnhWTFQ0Nko3bTZTS0RnKzRzaW12WTFwemxKYnlSeFIyelhtNHVodko4blYrcXorUVM4V3hWUkU0cVh5SXZHeWV6blNoaHFXTkpwYnRrN0VOa1FMeEh6ZVZKWElFcDdiZlIzSTgrWVpTSzAvenRtSTNUWXVDT0kzR0tIc3BCU00yNGs4RXZTbUV0WVZyVmc5QU9adnBaWHlvQzBuWkxVNWxFelJPSUVjRDF6N01sUjdGQXNsS1Q1Y2J1ZEhveXRtNlk2WWJCTThNWTlsN2dYamtMSjVFRURYd0tMT1hCR1UxL01kcUUzWHN2SXlWZWhHcUdiaTJ2clN5b0E2d0JUWFRrK1dpU3hGRWh3eHlwYkUyQW15RkFNUHBYcytYcWhBWUFaTzNieDZvbVJuM3ZpK2tJUEhsZ01pWjl2UGdseWs1Z0V0elprMW94NWNETDBBZ3p5em5oU09WRVl5VjJ3VWJFVzdqVTRGV3k1akFzT3g0UTlOSld3L1ZNakJ1WitvTGZ6Lzd0WUo4WkFPVUJnb1QxOFN0L2QzYlVUMFE3T1Z3emxHRU12NC9vRk1DMWdpclNJZmhBbU1BK0ZLRFVHR2xTR1hWTi9xVVppSnNWZ0hHZlEzMWgxZ0x4TDRrTzg5emFuOFp0RkkyMDllQzduM1Q1cXpOcmNEMGM2emZseGtyK1JsMEFZbTV0TEZjQUlpbnZMT2lLaEhsMm5oYUpwVFBRYm1ROW1HYi9LblZtNXJJYnhyNTRYK3docE42SzhWWk5lK3dNZWt0R1Q1UGNKVHU0RVV0alVmK2UrNXlNUnFvVy8wc21SSExJRmhuclA3d1FpS1FXR0lDQndzTk13TkRxMXRmMWNLRE9RMWNLUmEvZWFIRHRsOStudTlBUmFuMTVLWmlvdTdSL2JUdlcralBka3RjN1JwWWNjMjZIWkdWeXJ4RmF6dit6R1JuaWFTZmo3YkFPZVR0eUJWenk1clo4VWI0VWU0Q3VYc00rWmpKZUlkc3dCNTljTk1kbjNNaEYzL3QwTDBNU09BYklFTEN5ME53bmk4cTdROEdaTExLOHRJMWxaeit3aWYrOVpJQWRUMlZ2L3VpczhsYlpVdHlNd2hXNURqM2NwRWdreEZZQnhzYXlUV1AyL1daNUxVYXQrOHE0NWdVdkZ4WlREbjBNWXRObzRoaUxmOEV1RktHOWEwTjB0c3p5MmtRM3NzeDEzRXJ2eDBDalV1WldxZTVWem1nQWFsbFowU1I3NXR5UUtSMVFTck9OR1FrK1kxV1FaVUpWQUVydEdBMFk1cHhBWEZwNnZtSzBlb3hOQXYra244TWJVaHRaQ1c0RnpxZlhpSXl5dkxTTlpXYy9zSW4vdldTQUhVOXJxVk9rcU1sOGROaWlNclQ3aGNzRmJFeFlwTmNaWkN1R0hSak5WSXZMdklNb0NYNVVLQmx0Rk9uNlNkWjM3cHd2eUF4QlJQaXo0SlY2V3Yxb2pRcEw5VUpBZmdMcHNKc1haUlArRTdJS01uM0tqeXNCNXUvY2o3ekxtMlhHNHduY1dseXBBb1ExNERZVnNZWm9RV2NhbGdscURsTldnc1lobEZqRmQ3cFBIb0JvdHF1YTVxS2EwcEZRZlhLaUx4REtrN0dmTDJ4SzNJSGpLeDN5ZFVsNnR1YlFyZXRyL01sRUhwc3JURHNmSVB5eXZMU05aV2Mvc0luL3ZXU0FIVTlzekIzZFpLd3FNUWlYOHN2S2RBY0N2aGcxSzNMM0EzemlxYjIrNjI5MzRVeXl2TFNOWldjL3NJbi92V1NBSFU5bFdTekl5cUVBNldZcVNxV1ErYnlCNUhCankyN0JHcWNZTWNybWZaeGhwbHl5dkxTTlpXYy9zSW4vdldTQUhVOWxxMzFnSGxiaTNyS0tScmN0WVNNYm1ST2d2ZVo0Y3ovbWw4Y2doSkdkRzh5eXZMU05aV2Mvc0luL3ZXU0FIVTlzZklkbU1BZGowcmpKbi9jeTZWMDBQWnhGTUl4aDJwZmhKZEJCVGg3Y2w4ODRYRG5iTHYrODcrejFralR0V2tDZFBPdThqUkM1T051Nm9QRDZHcnJucmQ2U3FjaHRjeG1GeWhWdkNkbkhJUndIZWxEMWxvRWVzQ3lENTAxSDdSWThzcnkwaldWblA3Q0ovNzFrZ0IxUGFQSXo4MjM2NHhVWEVMM2RVYnh1M1ZaU1dJYk1oVVZkV1d5elJWSWlhNEIzK3lPU2IyMWlUOGZyeW1pczFaaXVraHZkMFRtbXdiTUFPZWErNWFTay9nc1N2Z3F6bGNlajRQU3VRUDRtd3pUV1NWaUs1cWtib0FyeVVCa1hPZm94MzRSOHBBSm5QWmxLTWM2YjVRRDQ1bHl5dkxTTlpXYy9zSW4vdldTQUhVOW1SVFVBek5yQVhaK0hIMklKR2NVbU5CNm8vR0JsTDM5biszZ0hkWmM4Z0h5eXZMU05aV2Mvc0luL3ZXU0FIVTlyZ0x2eGlaTGVtanRESmRxS0pISEtQTEs4dEkxbFp6K3dpZis5WklBZFQyS1QwSDZPOGV2dU5yUktDOUNjSkF6MGQyeVZsSkQxYkt5MVlyZDFyenNpYWNQYmFiOWs2Zm50ZGR0aDVvUEc5ZVdHT3l1N004WVlpTWlMcHVNcEE3MVNEVlFEUm14akE5V0VKYVhLUDY5d1AxNDQ5M2dzK2NIRzRHRm5aNjdVaGNQeWozRmZ2RzdHVVBpckdZWEhNWEFjbUxaQm56K3ZUZTh4c29WNGhUOUprM3dxRXJ0UFZOVGVGKzBMQ1JsZnlMdG00SC9HZFdyeElvYXpBb1RuYm44aHJYY3U5VDhVN2xxUW9hdGh4ZWxKL0xLOHRJMWxaeit3aWYrOVpJQWRUMlFsMG9IYlJiUUEyNldXaTVleTQ0RzNCMS84dlFvN0hicXZZenltTktIMFQzaW5qcFN6K0Q2SzVZY0RheDBlNFFQNyt6VVUxUVcwLzB5dlNLT0xEL3dvR3Urd20vaXJaYVRRajMzK1FzakhRMmdoZk9abktJaWx1U0ViVlN2L1VsTkJuanFrN3lBVFh6UzhGbkFvcXUxMnpMdjdNQUR6MUhydXpVU1Y4WCtKaitNWnZoQU8rRHlSVVArcVRWMFBDenFEKy9OMnNOUjNxYWh5Y2c3VzZhMW50aERQSVUwclJacHZEcWp4b2JKcVNNSVZaa3B1dzhsUmNubHVWQ0U5b2FaVnFRRk9WN0M0MmxucDhXS2NYd21ORXBoNVcxR0M0TzRoVk5JS0N1NWhFSzd1RkRTWDBqeUpQYWs5SjBFVWJ6SEthVzdUNmRnU1BROVpLSlhFMitpR0hJSStmS3pXdGxHak1iRG1NVGt0cnZjbDcvSk5JcnNEbTNiR2ptL3I0cEVUZnpMMnFTcVFYRkl6R3NhaS9pdk5xUm9yVlhJdC9oYTk0S2Myd2ZUY3VaZC9XblFRTFU4Tll4L1dGQ1RoRW5rYnpsbjlZR3Q2MGZSeHNIKzh1TURIQkdZZVlabjYvOEgralVQNjRKWVlaTFVsbW1VV2FvaGlVTnkrd08xc2RXUzBkc3JCa3hER3hVaC9RSXZyaEh2cUtlcFI4OFdVK1pvSExOOGhFdURrOVlma05idVMzTnh3bmpyS2JTeDZJSjF3RWtQSHgyVVg4Q1B2Z1RNNnI5N21nOEp6MlBRV3BOeWREdUJ3MVJIY1Z5aFI4TlplK29CSU1ZbnZnREhRUWIweU83ZUM2UENWREN0UHR4cVExWXd5NEtoZTUrVGMwa3Vxa1NoV29TR3k0Smx4bjFUMmQ5WUFrSCtLVVpHZkpBTytSUTNuQzF6WWFYWldKNENiTjZuNnZaSGppbGxuQm53UDVEeGowVlhmOWYvSlFSeHFnYlhVRzY4cURadkJQTnRSQ0ZPblBSNEcyVTgvUktzRlVaSHUzend1L1R5MFk2SmNkemprTFQvMFRvVlFKbU1tbFByeUtGQmhUMVBoQkhGY3VsR2VFZ2h2aTRWOTJ6OVY1REkvb1lBaE5KblFvR0hMSW55VFAreThJRTRvSEZndisrS1l3bjJZQ0M5WDllUzJMRlNWMHZETmRLS0h2SUQ4ektFanhITXV0ZzdYZ2RxWGZCVVVWL3JrN2Y4TGZ1NkFPYmVxbFp2T05qZjlxMnZNZXBtNkQ4Wit1U0NoK3BDSjg0RTNDZSsyekI2aUxmK0RYWU5jcUhCU2dLRnJScGVPOTdHME1MYVZ3azR0UXFjVGMwSk5mSW1EempoT3BMamxRWElER3BxQXBkOG4rZzg2SDZ1L28vell2TWozUnZxT2Vhd1VUNVdnNG5TZXNnbDVjckIwQmladHhWbDVjU1ViVjJ0aXNkT2VDekhFWFArNmRONFQzYnBWVHJmTlZrRHRNQ3FkQ3J4b1F4NE80K3ZYNWtmbWhYbWlmOWdrQzRqclllMVRsWENsbEpJVFJJNXBCKy9jOHpzK1MyUStnU2plQlFwakpwemtvMkJKUjdKNDdvWHFDYldTaVIranNVWmhUK3ZDbWljd014M0ZyUld0ckYySVU0SmlDZjhNdnNKaVBZMEE0MWl5V0syTWlKdUxKOTZLWFIzNnh5eXBtR2lwRnpGT1NQNUlHQ0UybEtxc0l6NldBdnR1UjNUUzNLSEp1cERpNW9sL1FteFdac0xVRENxWEdITnVjZUR0S2M3OHB0cmNRU2ptSE1nUkx2WGRyTHVyYWFJK2tyNU5VUGdocTBBN002TVo2aHFYU1lIdWxiNmtpR3EySVBCaXM0WjNQOU5Hak1DZE1EaElyQzF6a1Y4RVFOVXZ6a3ZyVlNKUHlUZ3R3SThLQi9xY2F0YzNRMktMVmNyOVp3bmtjcVVYdi8vWWFOQm4xOE1jSXFFTzA4SXdoZUxKWFJFNERQOWo4V2YrbGtIc3ZQQURSWUlaZVQwOFExUW96YkJmM1NSeHFRQldsdG1JakhoUURxQk9saEJjUERLcXZFTEZTYzV2NldBSHpYMVlWeGtUQ2VrcUE5cUg1Qi9TZm1VcHkzd3lSUE5Dc2RPZUN6SEVYUCs2ZE40VDNicFZUTEs4dEkxbFp6K3dpZis5WklBZFQyQ00yNHNBblZCeU9Ia2ZKNFo3SEpsb0J2TmtBNHlSeXN5Ry92VU5ZdE11L0xLOHRJMWxaeit3aWYrOVpJQWRUMnlnaW84aFVlSmVGN3pJOGVZTDhyWkgwREJ6RXlLcUxmQWRYUXVWZG9MZGFhbTVxZCtLZWdra0VTT0c4a1FRZXBobmFGblAybG9BRDNybkpFSkZQb1ZGUTkyZmtOcnhuMXpnYUh3MVQ1bDYyR2RvV2MvYVdnQVBldWNrUWtVK2hVTnZDd21FMEV1TWtWNzlNMVJpVk5WUm5PR1JaQXhtNXVxVTlvbDExQ2JGclhTdG5SYmMvNE5HVEg4VWI4OHBiQUhJQzczVjN3TzRLREZtdGlCb2FZQkpIbjNVY2JRd2Mva2luT2EzU1RsSVRTcEVkQjV4bkdDQlRuLzRMeXJ0YW1SWC85RzFiMEJsT1lYZ21HWWhwM2JOSWZnWE1aWHhCMzBISVFOaE5vdGduL2xBOUJoU0ZTaG5ML05OM3lQOFI3RXlBZ2ZmUUl5VkpIeENXckp6cEJuYUFrQ1lyWjRhNUk5ZTRrKzhzY25WZy9hMHRyR2RDR1ljRFZ2M282M0Y4MEZSNms1RVAxVURaNEthRjY4M3FmOUczc1NYQVZBUE1CdFNERG9MZWlLVDJFNnFyck5Wak9vdjFJRW0weGx6dVJpNCs1MlNSZWRzQjRpaTlOUE5JdlBObU10cTJscEJrWkY1MlhFYmR5OXhUVFI4eEFvcWsySCthMFVDcTZQeXFESW1CUEF2eWhjYWZiYnpucEYzM1hpRVBGQmk3NUxLTDZXaXhyZTZwcFR2alV1eEg5YUdjTEZ4MjI3RE1rN2hyaGczekZIdC9oUTVEd0U1Nk1xMGkvaGpuRXVaMXh5Z3lxYy90aFdid3ptSHIvQmUzdXBkNnA2c2dHdE9Md1d3cDd5Yi9LeVJSR0hIclBBQWFWU0FDQk9wVmJua3BMdUFGWk51UWR3Wk1FeWpheGFTVUFsenBIOElFMEk5V3NlckxPWk1mdE8zcm5hQnFTYTRvT0krWnQ4a0h0OThZVW9pQnBNNGpQOGR2WTg3MTdENG54L09hcG5QeS9vZk9NSGF4dFluVkgyc1NXZHZUYUt3eUJnWFRGai9pYUtHUUc0b3pVK25EbWNRMlVRQzZJTXJ2S2N2d2Z2b2laNndmbGFYNUJaeHlvQVlZQUIzRnRvYnJqYko1NGlZR2xMS1A2c0E5QVk5TEt4VWlLT2ZacVp3MVlHY2pYQkdzWVp4a0M1VEFrV2dxNGNpalZCSlhMWjIxSTRQZEJFK2dnT0hkeHhYam9TWGhZWWFxbjZyMGl5UVhKWUt5LzVXc2tpU2RpNTM5R3UrVndmUHlSTEcyRDdDVW8xTDZTSUYrMGZZZjBvVE9XTjEzVVBJVG81K3ZoWlM0OWVzNjRoZ284c25VK210M1h4LzBQM0VkOWRtZHVIb3RyekJrRXRrVFM4SiszVUl2bFBtWU5WR2Z2di9xWGdLUytzQjdtbGN6c3NNSVBMbnlMNGhZL3doc05CUE15em9aanlOQ2x3RkdnUWNrWlM5ZW43aVpncmFaVmYxVUwxcE1lQ3JnVkhmbUY3STkvY2Z2TWRWQ1hIcUJTM1dGUlg5RENKdmRXQTZ4MFpEdFJ5TzJpa01XT2hUWUw3N2NWUUloamkzTlFiSElsVSszN2J0K1k1Ui92NUM5MVBORUJienVxQUkyVmluUlVPUUhTYktTWXRzNzZWWGlRQ1c0anZVWEhVV0I5U05wVHVXYm9uZ01lZnNkbk5wZnRBT1ZzUWJjSTV6Zk1xa3oxTzJrcFlVSXJ1MTdlYUxLS2lyUHNQYWdFbUhaU2U2bFJRMW1BUGlxRTFlRmVqT1A0ZUNBZlVFSm1WaE8vaHAveUZBbTVKYjNpNVd3N3BuM1pmNlkxTUVGWWRoMnNHMWl0N01WU0JmRExIUHEzWjBrZnRkOWpSdHNqeXoyeVM0TGdybUo3Sk9ocThFOFZYU3RvdTZNVjFWOEZnWVd1TEtRa0FRMTV2M0gvOUJBNEtnN1JrZW1ZR3pWN3hMays3OTJzUi9pSDhOdnlIWTZ1ektOZ2pNYXF4emtZbFRraENRVXRIMWU5K2NqZzBWZGEveDdCcWM4ak43ZnNCTDNmaU9EM0t4ai9EeXJDVEp4c1JlbEh1b1kzUzU3aHJQYzF4a0hKNEZicm5aRkVtejB3Q0g0TmJGRHBEV2dic0pLelNvU29lbjQydFFqS2FUUVMyVkFsK3lQRnlQc21BeUM0WWh6ZytFSG94Vmt6MmRyb1hGWC94Zys3MHdielJOY1R2MENxODRRNGIzcE1jcGtXMmRjRTBvZUsvTE9hNFZzK0U3TjJWK2N2VjJaSTR6Ykcxc2hQdVZ5bEhoSWd4aFBPb0xScDhobmNXVGd4L3ZtN1VNc0NlR3FTeDRSd2pUTW1VVkY5eU92KzdzNFdteVJWN01VQTFmajRyNE1DY3Z2TjRjc3J5MGpXVm5QN0NKLzcxa2dCMVBhNUJPYTU0Rm5WVGhETWFXM0ZqUmx6blZJM2F1dXRTSnhsSUZkWkVCQUc1N2xhL0tWQzZGUUQvRUE0aTdzcHBiUWwxMWRFMHhjSzVYanNpSWZxU00wQXpHWkdVcW9aTzhocXQrWHJsa0hjMGo3ZVlzd3cwNkh1a1FUelVGMVB0dVJoa2hzZUJ2Kyt6UHFKTXd5RFBoandkR1ZTNldQWVNrbmJUT2ptdkdqY201Y3ExTllvRVJ1RlhiVFZGbVQvRldleGJEQStkbGRSRHpHeFJ0RFRzZHVBeXl2TFNOWldjL3NJbi92V1NBSFU5bmRWdVNZeCt3V0J3eGxZQUI1NDc3N09sREw3RHZ6enNPUW5LKy9iQ2M0bnJESGFabHp5aUNiTVBCRHhDNmFzeWM2VU12c08vUE93NUNjcjc5c0p6aWNKZlRCQVNuMytxdUNmSHhRUUx1YlR5eXZMU05aV2Mvc0luL3ZXU0FIVTlncXlQQzJUT0tDaDlTaHBDTUhsWUhIR21KeXIxTmxTRFd4ZGFzTjhOSWJTVzFWMjZvaWxGWXlYRlordjdFSEU4QTBxK0xvdUVMSXlFQkxpbmxsc0RQUEhuTVNtZ2d4VFI4Y1RoMklHdmgwSy84dzBWTlVRTW5FZU8zbFdSYUpnU01zcnkwaldWblA3Q0ovNzFrZ0IxUFlGRUtLQ2IyS3dtemdHd3ZUYWpTYlhYVTBPcytZTW12ZUZHSWdCSkMzVWNuYnhvU3F5eUk4bXRkY2dhZGl6TGN6TEs4dEkxbFp6K3dpZis5WklBZFQyK3l0YUFpcm1kd0RmbE1KNG0zWTRhdjVlaDdzc3Y3WmxvT2pqL0xLZVJWSERYVlpRUWExbk5mVm1mTlhYUytKRHl5dkxTTlpXYy9zSW4vdldTQUhVOXNzcnkwaldWblA3Q0ovNzFrZ0IxUFo2RE9sM1RDVmFaOVBmTjdZbkpRWWd5eXZMU05aV2Mvc0luL3ZXU0FIVTlzc3J5MGpXVm5QN0NKLzcxa2dCMVBiUkprRGoyU1VKNGkzTmx2eEZuRVovR0tWUVgzb3FycFptMWVOVnlQdG9JSVAwRzRIcmpXdThhMXo1d21SeVFjUExLOHRJMWxaeit3aWYrOVpJQWRUMnl5dkxTTlpXYy9zSW4vdldTQUhVOXZiTzVIeEllUmgvcGxlQk4rKzlhZXJMSzh0STFsWnord2lmKzlaSUFkVDIrKzhreUJxT3V0dktoUUJtR21aaE9wRjg4TDU3dzFmZEZtbjIvaHRHeUtITEs4dEkxbFp6K3dpZis5WklBZFQySjlmVUVjU0hXdms4ZnB5bncrQmtZSVYzakRwODFmNG9XckZrWmY5dCtxM0xLOHRJMWxaeit3aWYrOVpJQWRUMnl5dkxTTlpXYy9zSW4vdldTQUhVOWhmdE1oeTVlNjRzU2xPTzFvTUVrMXN0OXhZdi9icmV2YThrNFRrc0xWSXZ5eXZMU05aV2Mvc0luL3ZXU0FIVTltcXVFSDdnZVpld0piMUVFdUs0K3AvbDUySVpiZWNDMW9ZYnhlZGRid1dVeXl2TFNOWldjL3NJbi92V1NBSFU5bFN0blVubTZQa3Y0OTFpNW9mNDR5ekxLOHRJMWxaeit3aWYrOVpJQWRUMjJFWVJHOTg4VXZBMUVOVmxyTkRkamp1QzhTM0JEdGgvaE9rRFFNSk5YUkUwR2VPcVR2SUJOZk5Md1djQ2lxN1h5eXZMU05aV2Mvc0luL3ZXU0FIVTlrdW5NUzhBK0lwUU40bWVNUGwyd2s3SnNNZ1VkLzdIL0s1cUZZdFVKYVBwOVBtM3hjZkllMkFZTk5BRExPbklpaHQydmVOMUt2NVF2aWJUVVVZdHltQlZ3UTNBdVc4eUtPYXdlYVFCekRrWm9KYnM1TFlycHplQlVhajRkZlVIUG9mRnZmWG0wMXdKbHd6RTVlU0s2ZVRHZi9zbW80Nmh3M1VyY3k2NVN4NFBSaENpNVREc01tcVloWEwyQ210RDc1NFRwbjlsVHBNZGUxemYwNTEvRUtVY2RYL0x5RGc2NHkrWW5lbzhSNjVvaW9leGk0bjFvbG9NQklWMGFlZ2ltVzUxMW80WGhCMjQxUHRad2N2WXBKRVRGSVd2TDBCRWVTRmxnQU1FM2xyck9OY0lXenlPZ0IwL3VnNkJGWlpXVG5aVWl2eXRwQWhNVzdRNkpROTR3SzNPbERMN0R2enpzT1FuSysvYkNjNG5qRm9jZ3ZSNFZNWFkwU2s2U1dlWHdkMWNGSHhnbEpTSTdQbHluaDJFRWEvTEs4dEkxbFp6K3dpZis5WklBZFQycG05S21tMC9OdytxcC8ydHhwUjhoaXBRbHoydU1zUzJHVm93R2NiVlN6cU92bXF0WStCWjRTOFlveHpUVmkrNXl5dkxTTlpXYy9zSW4vdldTQUhVOXFOVjRHNkVKTHBKNnJLZytIbEdiUk10UFNmV3ZQemVSZ3FmZEYzUHQwMUxaNWtieFZqNzBhNEFHS29aZUUwMDRKcWJtcDM0cDZDU1FSSTRieVJCQjZteFJLazhSUlM2RWpVbXhuR1ZST1FIeXl2TFNOWldjL3NJbi92V1NBSFU5ZzFZNTIwY3hQMVBlRXpMSVpFSG1mSHQ1bEFjRVVFWWdRNnA2VkluakxTTHl5dkxTTlpXYy9zSW4vdldTQUhVOWhuaXRteEh0OUdtMG1ZTkV2VSsraHcyQUFiUk0wQ1RDVzFMYThhQzFXYzV6cFF5K3c3ODg3RGtKeXZ2MnduT0p3YWh3anUraFVTNm1yS0czTnRtc2ZqdTUzdTJ4K2ZJRThoVENleG5yNXh2VWN1NGdPOHpvQWxpRFlGNnFqajVqWFpSN1NycXJ5K3pYblZwdFRLSVRWYkxLOHRJMWxaeit3aWYrOVpJQWRUMjk0cDQ2VXMvZytpdVdIQTJzZEh1RUNmWDFCSEVoMXI1UEg2Y3A4UGdaR0RrQ0g0MWhmdmRiTmRQYis1eGJPcEZJTlZBTkdiR01EMVlRbHBjby9yM0E5MnE4L1JOekZleVBPQjJEVThaNTVETEs4dEkxbFp6K3dpZis5WklBZFQybFd1aVFySCt1WnU3V3FWYjNQZUtwNlVsS3M2bUlXcmE4a0lJV2RhQmg2bmNkT1AwemZwcG9xMkc1Uk1DczRnVHlqYm9WRHN5QzAyakZhSi9EN3hmS2xLRkVXaVY5bjdhU05zSVpEZ3k0Uk5wZXNUdjNsc0NVcU04c0ZyV1hFdVZNOUoybGEvdW5ka3IweFRIQWs0L0IzYnhvU3F5eUk4bXRkY2dhZGl6TGN5NFgwM3FzM0IvdzJwamptSW42YnZ5enBReSt3Nzg4N0RrSnl2djJ3bk9KeHZhZTRFRFBrSHNlb1hOTTc1eE5uTGNMaTQwRnJQdDcveFFlUlNhS3RPSVNlN3VYOEppK0VKNmhob01RV1BXYnIzMWxpcjFSUVRGUHd1YklTRi9yTHdRek1sSWJwUTdhT2ZXMVBLRjdyN3JnRnNvTENScnFqYStzcGFuQ1AxK1VrM3A5M1VhajZtSzlGMytHYkpjT1ZiNW4yYnhTaHJwUVhKUjVmazBKZ2RNMHBDWGUzNERETktoMVIzZjVySDdKV1IyUTNnWVUvTlRKcEY3NG11L3l1QkN6VlIwdGlBcGJ5TUFrblBiMlVMWnd6RFUxMWEydFFUaUljdCtiQkJsR0RSa01sUFFXOGlnVXl4U1drWmd5TTNMSzh0STFsWnord2lmKzlaSUFkVDIrRUppQnBmN01ubGcrSVc3K0NmWFRFNHZtQk9WbDM3UUpIblp3RUV3b2pCU2Z3WjlYK01pYXZ5MWk1QnFXaUhKUlovVEV5aEdDT2pUMUdFcTRCSUlERWk3bUxUWGF0TTYrempJd0tKWW1vYk9sREw3RHZ6enNPUW5LKy9iQ2M0bnBMN2JxeTFQRTRkcXJJZVRiR2I2enQ1ZVNPSU11Nk1ZS29pVFA4eDFvVGdOS3ZpNkxoQ3lNaEFTNHA1WmJBenpnckJFcmt1Zm96ZnhIRGNiZCtwejBVUWEyUHJ4dUJITjhTV0VWckFNUVlNUm5tVGJaYTBKTGI1bk92ZUFZTzcxeXl2TFNOWldjL3NJbi92V1NBSFU5cEVaeWlRUnQ1Q3NHR3lSbWlDMEh5bFNTS2RSeEtuOStnREhPMjh1K3RJOU43THZmY2V5UnZTbDFXY04yRzVwOVRNTzdZV1o3YUNJUXJFcGNpczlFdlBMSzh0STFsWnord2lmKzlaSUFkVDJVMXdZb3hWajRWaUdSREViQUtXdWdqaWdmeVVvVFRPZUM2UHhHZXFrdjMvZWJqZUkrNjVJQUExRCtrc1JEK09XTkFhNU9rbEF1eTByZ0tYaGtHc2FsNjBjMHB4aDRueFpKYnVXRlU3UzdyMzVyd0ZqRHREaFAreXlxY2NjTzRtWXBzMTRvTnI5emFUcmRJR2ZrK1o5REVXU2NnZWpHRnRhYVgyV3NWTU1oRmNxelZrWEQvVlM5MDNmQjJsRHVuMHB5eXZMU05aV2Mvc0luL3ZXU0FIVTludHZGbkNpemRqQUdkSkRJdC9YUkxiTEs4dEkxbFp6K3dpZis5WklBZFQyMXlSVzFlOWdVSlk4RkN2ZWhsZDJrTXNyeTBqV1ZuUDdDSi83MWtnQjFQWTZwWnRUMmVGQ04weFd2dHIrTHc3L21oNVFxZHJtbllnREJ5M0tIZ2hHZGNzcnkwaldWblA3Q0ovNzFrZ0IxUGFTeGxxUG9yS0lhREcySDdmMjhWRWpGcEFJTHRsWFloNk90bjRWYXZyUU1LVk1XaG1RSkl2alhVN2pvdDBoSVFWelJ1dVJ6SGJyRXZmQmc1NWVld0dxeXl2TFNOWldjL3NJbi92V1NBSFU5c3ZBVTV6OFJVb1FjVU1TMHYzSGU5U2VpQ044WnYzbnNZT1poSUNQQ0FUaGJleGtMM1FidXRSQnZGYzNINzNvd0xVa1JCWTRXT0J6anAwZktRUjRwVGNOS3ZpNkxoQ3lNaEFTNHA1WmJBenp2L3pPSWNoSzl2YlNzK2NjaDl2aGRTck5XUmNQOVZMM1RkOEhhVU82ZlNuWGtXaVNVdkxOMEorSUpOdTFlUkNHcmZTbUhuc3lWQUorVGZFc01kRmhtQkdTYXdiT1FmR1F3WkkybjBPTEVhWHlNdHMrY2tUaUYyR0dWakpSS0FOam5oZXFnbzdGMitka2dqaWxMSEhDMFQvejYxTlJ3RHlOaVdSR3FnVlhaSGp3ckRJRW8vQU9WUWs4cjN1K1luMXh3aVZNTkdVS0VtY3ljd2xOdUVhK2dNc3J5MGpXVm5QN0NKLzcxa2dCMVBhUVhoelZGYXVlYVBMbzZqdzBla2krdFdpb0piNnM1WVpMY0V6aVRWWnBmUHhlTE9hZ1c3REt2eHpGTEFDZ3RLWEt2cHRSUkpqYzBlUGtsMXMyNm9UMHNEdWJKUlg2SURaUHpqOHR3UTZTY2dueDRHZEViNE9SWFhHenBLek1YanBPT256MkUxUTdIdERGbnUzeDQvK1ZVVmZVdnF0QitwWDQ1d1U1MlZiVVBjUi9lZXU5SzNuVkxjd3pZSEwwQ3hPd2lKQlRQWFM0ekkveEVpZXB6VFNyeXl2TFNOWldjL3NJbi92V1NBSFU5bVQ1UGNKVHU0RVV0alVmK2UrNXlNUzUxUWkrb21Iem1EcXJ6REp5V2dDTHQrSS9lQzZxclpDUW1sQ0d1eFk2SXJveVVFL3lPbHZmVU1DU09jTGt6TXpMSzh0STFsWnord2lmKzlaSUFkVDJ0Um1JdERleDd0UHRQVGdOQ1kzN1VNWk1kYmRnNy95WkUvam1QTDgwUlFzNCtxQjZZWndydWc0NUd0ODJiSFlvcjlxcWgwR3hQeW8rL3M0cVN6bDZYOHNyeTBqV1ZuUDdDSi83MWtnQjFQWklENmFKdVJPbDdLbUJJZjBCV0NsYlhQRFlkL0FzdEdiOVdyaFRCYVlxVElzZ1NwdTlQcFFpRVYrRlRwclY5UEgxZWpvWU9CSVZhT3IxRTNka3pmbGhEa2daQ3IyR2VOc2JsY0FJU0VmVjFBamE5UFdmWmY0bDNzQ0t2R1cwdnZWVDZKUTRGU0ZLTnV0YjlCditReUphYnQ2SDI3b0t4RWh5WWswSzdiWVZnMlQ3VlBBdzhEbEVBTld2TDJKdnltVExLOHRJMWxaeit3aWYrOVpJQWRUMnVlRWZRanFxOWN2UDBVTDFnWmRiZm9aN0FWOG54ZVFRVE5HTCt6MnB1cWZMSzh0STFsWnord2lmKzlaSUFkVDJWSzJkU2VibytTL2ozV0xtaC9qakxNc3J5MGpXVm5QN0NKLzcxa2dCMVBiVC9kckNnUFVpdnZ6UjdLbjlkd2pyeXl2TFNOWldjL3NJbi92V1NBSFU5bFV2bGZnUng0UWxnYlZsdWNlOEMxMFkyMzJ2WnBiNUR6bW9jVW0yTDBCOVBPOXk1Y2dTdUN2VVA4KzZBV2FFNVFocXlhMmFOcmNDMFpucWNYdnJUV0lPSEtzZWFLZDVCRW5UeTdWT1kwNnB5eXZMU05aV2Mvc0luL3ZXU0FIVTl1QTkxZERMWHNoZ1REYWRvSTRlTjhuOERRTElFc2dGNFZXellkd2ZHTDhGeXl2TFNOWldjL3NJbi92V1NBSFU5aisvczFGTlVGdFA5TXIwaWppdy84TFRtZ2xEOEErM3NUWm8yVy9UUE5icnFtTmNSMTVDeTVmNmJlaGJ3U3ZjSjg2VU12c08vUE93NUNjcjc5c0p6aWVsN0JKZVFlaWZjYmRuMGFad09DZmo0ZVV0QmJVWFRIWGQ0TFkwTlR5WXU4c3J5MGpXVm5QN0NKLzcxa2dCMVBZVDlVcEppT1cyQVplMFJweWZsdTBteXl2TFNOWldjL3NJbi92V1NBSFU5Z053N0pWZG5zeDBIdzlnYituOE9jcFBNaE5CZzNnTHNZNTUvbjJKRXJjM3l5dkxTTlpXYy9zSW4vdldTQUhVOWkxTTVWYmlwWHRBMmZ1VmRQWFdMR3pCek1UOHVlcHdNV3lPcGlTVnVNSlphRC9zeHB6bWpoWXF6aXVVcGFWNkJNc3J5MGpXVm5QN0NKLzcxa2dCMVBiMCtiZkZ4OGg3WUJnMDBBTXM2Y2lLSU5WQU5HYkdNRDFZUWxwY28vcjNBM2J4b1NxeXlJOG10ZGNnYWRpekxjelFUYU1WUzBOME9rVXZMalAxVWl0anNEdWJKUlg2SURaUHpqOHR3UTZTY3NrdXQwMEFXZHlQaUVpMmRMOGJXV1M1QTJTWHlPc3poc1B0aVlvV1hmUVJNWjRBeWFydVg2Mm5UaGk4dlZvVDlqcUxaUm53OUNxU2kzd3BjWmZyNkNBSldTdVpOY3lzcktvd2IvQmJBdHBTMXg4SnFJR3RPRjZFMXk3UjdkSXFFZXd3Vk5hQ3ZwMlppb2xXOFlrWmlVTmgyS0pzSEZyZzJ3SDdBVXRWTVU4ZEJxSENPNzZGUkxxYXNvYmMyMmF4K0Q5TWtqZitZQnNNaGtYWXA0bGxnVTMwK2JmRng4aDdZQmcwMEFNczZjaUs4cUlVK1E0c21OWGh6RmlwWm9pcEhEMGhqbTU3eWdYWHp3TVNFZTNqQ09aSmhlUXM4ZkZ2anhjeS9vdTIwWFl0WFJPSkJaemZQeWxaYmdwQmNZV0dyTU9rZHUvUHJubW9QM0VsckVLWG9VWDZpN0NJaTNVZHpVcWVRL3J3SmtrSmNKa2h2UStPUlNtVUtYa0FxVnc5YVFrM0xiZi9kUCtycnl1YVo3RDBBaDV0bEhadStYTkdaL3NnYS8vK0FINEdSTjdOeGhUVzh3MGZUcFRLS3ZxNVZzcnU5SU9EU0JEWUZhQ25XKzFNVUE4Q0doS1FsVEJYb0ZQbkJQQitLMDFBMjFoeHBVOUZBWDljLzB2QTJPbFVOZjI1YVJOL2lXYjd1ZlhSV2hiM2xOU2JmZGFzNnh4VkxramxIaGd0Q09qbkx0RXViczFac2MzcnNSaXE0ZjNXZG5xdmtpTk9xMmtvZTFxVTVPVHJiZlZXcWc5OERFdzZBYVAwKzRpU1diMktoL1FVTldObDdEUGVzdTkxcW0zYWdzNlVNdnNPL1BPdzVDY3I3OXNKemlmVGxnejZ6cDRoR2VVSlNQa1dhM2pXZC8vVkJGTHYwRnB6MnlSVENkQndpOXRzRjQ1S1NabjlOQ3VtOEhBbGlmaTNWWTVuMGIwdE0zRVBNdzZrR05CZngyRHFWdTJIQnhiMDFKVFQxTXo3cEZ0VmR1cUlwUldNbHhXZnIreEJ4UEE5a3FndDBSWFBMTkVqeFdBT0dsOGs5bytBbVUwaWtyUkczaXVLVDNwbnRGdFZkdXFJcFJXTWx4V2ZyK3hCeFBETGF4RjQ2RzE4L0g5aG1WRkFLNnZlRTFEUkNDaTBMN2d3SlJFUXp6MUY3bktGSHcxbDc2Z0VneGllK0FNZEJCdmhGek1BNnVJOGE3MWpDRTJldXBsRjE2UmV0UHAzbUpNc2tnRlFpM3R5TzhzcnkwaldWblA3Q0ovNzFrZ0IxUFlwTVd2LzA2TGF2V0FWbllWa3ZqK1FNdnBFRENtQWpxTUlBMXVOQzRJYTl6dUM4UzNCRHRoL2hPa0RRTUpOWFJFMEdlT3FUdklCTmZOTHdXY0NpcTdYME9ybWpDS1ZYUS9iZHptRGsvb3lqYmJSdnR4cXdIS0NKdkRGNEdWb2tCcEJlSEJVTGFuZzZyeSsvZFJWNU4zRUkyZi9rUjFZNllXNVdEOXBsV21EMXIzK2ZIamNNaWw3eTdIa2MzbFFabnpwN3ZmdHJySzN6eXRXM0lOWW84dllJbkNwcjZ3QjlacWFrWWdMREJzN0F2dHdSYS9YaXZROGVrdWE3TzNmOUp6Q3BtamZ4RTUxU1EzUVhDLy9wSzIyU1NxMlFocDFUNlVoSzhaTHJlLzA0U3JJRUJIL0hxWE1LQi9BS1JWemx4VmY2VklUMWZzS3kxcG5EN29BejVZdFVjdTRnTzh6b0FsaURZRjZxamo1alJQK3FXcXF3L3BlUHZmWVYzbXkreEF4aVIrcUVWL1M2dm8zMmtDWHRwSWZFZDFydVExVTF1eld2NEpRSGhzVDdzNlVNdnNPL1BPdzVDY3I3OXNKemlkM0JEdllXa29VcDVTejE4Q3MvUWJ6TlhBaUplM2VXbUg1c3Z1c0ovN2JsbWpjVEI5RkxwNkZxM2lySTRCOW45dzFjQ0lsN2Q1YVlmbXkrNnduL3R1V0NGdnE0R1I4clpheEFoaElISmFPaG5oT3pqZituRGs1a0VwUGZqb1BwR2trUFR0Tkl5WTBvNDZPVjZQSmx2eDYzR3o4OXJrY2s0N2EyVjZ6SzgrTFpSUnpocVFsdHhkYmhXeGZrOFFLdklqTEs4dEkxbFp6K3dpZis5WklBZFQycG05S21tMC9OdytxcC8ydHhwUjhoaXBRbHoydU1zUzJHVm93R2NiVlN6cU92bXF0WStCWjRTOFlveHpUVmkrNUlOVkFOR2JHTUQxWVFscGNvL3IzQTNieG9TcXl5SThtdGRjZ2FkaXpMY3dzMTNLZGNBUmJaMnQ1bjNIZVRqNFRvMlhGQ292RU5CTDZyeFZGSEN5UU9zc3J5MGpXVm5QN0NKLzcxa2dCMVBZN2ZiazlGSGlwOWM1ektWSmVzSExreXl2TFNOWldjL3NJbi92V1NBSFU5cnZWbUVkUk81RjNpWGZic3JmaGVjVE9sREw3RHZ6enNPUW5LKy9iQ2M0bmwweXdPZEVyZU4zYjZyR0d1S2tKTjJrVmtkRVpOd1BZUGtCeDhVM1hhSCsxdWEvK0NTRTZMU01hNVRUMGcrL0puTnVaWWFiRmZxQ0tsMENMcnRuOE1YNld2aWJJL0dVSFdUMzJFSlh4c2cwWlFndFVEWUZDNnR1eVJHZGtPeXRMZ3dja2VDRXRsMXZJbW5Sajc2UVNxdUhZNERVNWp0cEZWVm85b3hSMlh1c2c5YWxGdEtSRW5sMkZoZzJ5Y3ppVWFJVEZRbDNySVNCT1k2djVJVzV6ODJ5Kzh3bWpIc0VrK3FRS0o3UWJHSmkwanhRL0JlamJ5ckNNTXFhRE5NSUpkZEpMYWtYOFdPUjJHRkNtRy9tUDE2UEtoUzhOL0tscVpoUExiTGFDT1plQVRtOUlEM0pyMW9CQXJFMzVDeUZHTUcrSndkbUkxWlJsYUF2ZzlVUFZ3cGwrL1duUE0yMUlxUnd6cG5ZUlFEYlljSnlyQzJsRzRlMzhaK0hGSFRpT3ZGUW92NGlDVGlQMlk0MEpLUEJJbUJWeU82N25nb1lUWmJSSUQraEJtQ1BUbWdsRDhBKzNzVFpvMlcvVFBOYnJldHVXYWJFeTd2Vzh5em9ZMDhmZTkreFZuVUllK1I1U1dtRjZpQ2tlcmtmaUtELzVrd0MxQVpLdW9QUTdYM080NEN5a1pvNVdkU0ZJWit6cmNrV0YxNzJoTW1MdFFjVVhqRFAzSys2eVFxQVkyR05wMkJOMmF6TlBEalJ6cGYraGx6V2N0L0ZlSW01VFQrUzF4cC82NmovUU16SlEvVDBpWVNaMkhhRUNWaTRma2p0NXk0MEhBbXp6U0FSTlpXc09HclA0V05xdVhCZHZHZ25rb0FPbDBUUjlEVWNGZ0M5QmMrWVRUUEVVL2xIbVNBT204VWxaVUFoK3dROW5IZERSeHpHOEZDd3Q4NEwraHFjOVhtL2VvMlFnUWVvcHlzUFV2NFNoZFJocHY4Qm9ObWpiZ3l3SzEzK3FsRkcxVmh5cXdrdFNTMmZNZ0NYaUU0L3RycFRjbnZLTEEwcWVDdzUwaVZYbFpmaHV1ZGhTK3FpNkwwOU1tT210d1ZnZ24xQ0doZEdVZjhISkltSFFKVDNYNUV5MGlBPT1cXFxcXFxcIik7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6Zi/6YeM5LiA57qnXFxcIixcXFwicGF0aFxcXCI6XFxcInNoYXJpZFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbmFkZExpc3RlbmVyKCdvbkNsb3NlJywgJC50b1N0cmluZygoKT0+e1xcXFxuICAgIGNsZWFyTXlWYXIoJ21vdW50emltdScpO1xcXFxufSkpXFxcXG5cXFxcbi8vdmFyIGl0ZW1zID0gW107XFxcXG5mdW5jdGlvbiBmb3JtYXREYXRlKF9kYXRlLCBfZm10KSB7XFxcXG4gICAgbGV0IGZtdCA9IF9mbXQgfHwgXFxcXFxcXCJ5eXl5LU1NLWRkIEhIOm1tOnNzXFxcXFxcXCI7XFxcXG4gICAgY29uc3QgZGF0ZSA9ICFpc05hTihfZGF0ZSkgPyBuZXcgRGF0ZShfZGF0ZSAqIDEwMDApIDogbmV3IERhdGUoX2RhdGUpO1xcXFxuICAgIGNvbnN0IG8gPSB7XFxcXG4gICAgICAgIFxcXFxcXFwiTStcXFxcXFxcIjogZGF0ZS5nZXRNb250aCgpICsgMSwgLy/mnIjku70gXFxcXG4gICAgICAgIFxcXFxcXFwiZCtcXFxcXFxcIjogZGF0ZS5nZXREYXRlKCksIC8v5pelIFxcXFxuICAgICAgICBcXFxcXFxcImgrXFxcXFxcXCI6IGRhdGUuZ2V0SG91cnMoKSAlIDEyID09IDAgPyAxMiA6IGRhdGUuZ2V0SG91cnMoKSAlIDEyLFxcXFxuICAgICAgICBcXFxcXFxcIkgrXFxcXFxcXCI6IGRhdGUuZ2V0SG91cnMoKSwgLy/lsI/ml7YgXFxcXG4gICAgICAgIFxcXFxcXFwibStcXFxcXFxcIjogZGF0ZS5nZXRNaW51dGVzKCksIC8v5YiGIFxcXFxuICAgICAgICBcXFxcXFxcInMrXFxcXFxcXCI6IGRhdGUuZ2V0U2Vjb25kcygpLCAvL+enkiBcXFxcbiAgICAgICAgXFxcXFxcXCJxK1xcXFxcXFwiOiBNYXRoLmZsb29yKChkYXRlLmdldE1vbnRoKCkgKyAzKSAvIDMpLCAvL+Wto+W6piBcXFxcbiAgICAgICAgXFxcXFxcXCJTXFxcXFxcXCI6IGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgLy/mr6vnp5IgXFxcXG4gICAgfTtcXFxcbiAgICBpZiAoLyh5KykvLnRlc3QoZm10KSkge1xcXFxuICAgICAgICBmbXQgPSBmbXQucmVwbGFjZShSZWdFeHAuJDEsIChkYXRlLmdldEZ1bGxZZWFyKCkgKyBcXFxcXFxcIlxcXFxcXFwiKS5zdWJzdHIoNCAtIFJlZ0V4cC4kMS5sZW5ndGgpKTtcXFxcbiAgICB9XFxcXG4gICAgZm9yIChsZXQgayBpbiBvKSB7XFxcXG4gICAgICAgIGlmIChuZXcgUmVnRXhwKFxcXFxcXFwiKFxcXFxcXFwiICsgayArIFxcXFxcXFwiKVxcXFxcXFwiKS50ZXN0KGZtdCkpIHtcXFxcbiAgICAgICAgICAgIGZtdCA9IGZtdC5yZXBsYWNlKFJlZ0V4cC4kMSwgKFJlZ0V4cC4kMS5sZW5ndGggPT0gMSkgPyAob1trXSkgOiAoKFxcXFxcXFwiMDBcXFxcXFxcIiArIG9ba10pLnN1YnN0cigoXFxcXFxcXCJcXFxcXFxcIiArIG9ba10pLmxlbmd0aCkpKTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gZm10O1xcXFxufTtcXFxcblxcXFxuZnVuY3Rpb24gZm9ybWF0U2l6ZShzaXplKSB7XFxcXG4gICAgaWYgKCFzaXplKSB7XFxcXG4gICAgICAgIHJldHVybiAnJztcXFxcbiAgICB9XFxcXG4gICAgY29uc3QgdW5pdHMgPSBbJ0InLCAnS0InLCAnTUInLCAnR0InLCAnVEInLCAnUEInLCAnRUInLCAnWkInLCAnWUInXTtcXFxcbiAgICBsZXQgaSA9IDA7XFxcXG4gICAgd2hpbGUgKHNpemUgPj0gMTAyNCkge1xcXFxuICAgICAgICBzaXplIC89IDEwMjQ7XFxcXG4gICAgICAgIGkrKztcXFxcbiAgICB9XFxcXG4gICAgc2l6ZSA9IGkgPyBOdW1iZXIoc2l6ZS50b0ZpeGVkKDIpKSA6IHNpemU7XFxcXG4gICAgcmV0dXJuIGAke3NpemV9ICR7dW5pdHNbaV19YDtcXFxcbn1cXFxcbi8vbG9nKHJlYWx1cmwpO1xcXFxuXFxcXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxcXG4gICAgY2xlYXJNeVZhcignbmV4dHBhZ2UnKTtcXFxcbn1cXFxcbmlmIChNWV9QQUdFID4gMSAmJiBnZXRNeVZhcignbmV4dHBhZ2UnLCAnJykgPT0gJycpIHtcXFxcbiAgICBsb2coJ+ayoeacieS4i+S4gOmhtScpO1xcXFxufSBlbHNlIHtcXFxcbiAgICB0cnkge1xcXFxuICAgICAgICAvL3ZhciByZWZ0b2tlbiA9IEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vZmlsZXMvcnVsZXMveHlxL2FsaXRva2VuLmpzb24nLCB7fSkpLnJlZnJlc2hfdG9rZW47XFxcXG4gICAgICAgIHZhciByZWZ0b2tlbiA9IEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vZmlsZXMvcnVsZXMvaWN5L2ljeS1hbGktdG9rZW4uanNvbicsIHt9KSlbMF0ucmVmcmVzaF90b2tlbjtcXFxcbiAgICAgICAgdmFyIHNoYXJlSWQgPSBkZWNvZGVVUklDb21wb25lbnQocmVhbHVybCkuc3BsaXQoJ2NvbS9zLycpWzFdLnN1YnN0cmluZygwLCAxMSk7XFxcXG4gICAgICAgIGxldCBnZXRzaGFyID0gZmV0Y2goJ2h0dHBzOi8vYXBpLmFsaXl1bmRyaXZlLmNvbS9hZHJpdmUvdjMvc2hhcmVfbGluay9nZXRfc2hhcmVfYnlfYW5vbnltb3VzJywge1xcXFxuICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcXFxcbiAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICBib2R5OiAne1xcXFxcXFwic2hhcmVfaWRcXFxcXFxcIjpcXFxcXFxcIicgKyBzaGFyZUlkICsgJ1xcXFxcXFwifScsXFxcXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgbGV0IHB1c2huYW1lID0gSlNPTi5wYXJzZShnZXRzaGFyKS5maWxlX2luZm9zWzBdLmZpbGVfbmFtZTtcXFxcbiAgICAgICAgLy92YXIgbGlzdHlwID0gSlNPTi5wYXJzZShnZXRzaGFyKS5maWxlX2luZm9zWzBdLnR5cGU7XFxcXG4gICAgICAgIC8vdmFyIHBmaWxlaWQgPSBKU09OLnBhcnNlKGdldHNoYXIpLmZpbGVfaW5mb3NbMF0uZmlsZV9pZDtcXFxcblxcXFxuICAgICAgICB2YXIgc2hhcmV0b2tlbiA9IEpTT04ucGFyc2UoZmV0Y2goJ2h0dHBzOi8vYXBpLmFsaXl1bmRyaXZlLmNvbS92Mi9zaGFyZV9saW5rL2dldF9zaGFyZV90b2tlbicsIHtcXFxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXFxcXG4gICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgYm9keTogJ3tcXFxcXFxcInNoYXJlX3B3ZFxcXFxcXFwiOlxcXFxcXFwiXFxcXFxcXCIsXFxcXFxcXCJzaGFyZV9pZFxcXFxcXFwiOlxcXFxcXFwiJyArIHNoYXJlSWQgKyAnXFxcXFxcXCJ9JyxcXFxcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxcXG4gICAgICAgIH0pKS5zaGFyZV90b2tlbjtcXFxcbiAgICAgICAgLy9sb2coc2hhcmV0b2tlbik7XFxcXG5cXFxcbiAgICAgICAgbGV0IG5leHQgPSBnZXRNeVZhcignbmV4dHBhZ2UnLCAnJykgIT0gJycgPyAnLFxcXFxcXFwibWFya2VyXFxcXFxcXCI6XFxcXFxcXCInICsgZ2V0TXlWYXIoJ25leHRwYWdlJykgKyAnXFxcXFxcXCInIDogJyc7XFxcXG4gICAgICAgIGlmICghZGVjb2RlVVJJQ29tcG9uZW50KHJlYWx1cmwpLmluY2x1ZGVzKCcvZm9sZGVyLycpKSB7XFxcXG4gICAgICAgICAgICAvL2lmKCFsaXN0eXAgPT0gJ2ZvbGRlcicpe1xcXFxuICAgICAgICAgICAgdmFyIHJlc2NvZCA9IGZldGNoKCdodHRwczovL2FwaS5hbGl5dW5kcml2ZS5jb20vYWRyaXZlL3YzL2ZpbGUvbGlzdCcsIHtcXFxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXFxcXG4gICAgICAgICAgICAgICAgICAgICdYLVNoYXJlLVRva2VuJzogc2hhcmV0b2tlblxcXFxuICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAgYm9keTogJ3tcXFxcXFxcInNoYXJlX2lkXFxcXFxcXCI6XFxcXFxcXCInICsgc2hhcmVJZCArICdcXFxcXFxcIixcXFxcXFxcInBhcmVudF9maWxlX2lkXFxcXFxcXCI6XFxcXFxcXCJyb290XFxcXFxcXCIsXFxcXFxcXCJsaW1pdFxcXFxcXFwiOjEwMCxcXFxcXFxcImltYWdlX3RodW1ibmFpbF9wcm9jZXNzXFxcXFxcXCI6XFxcXFxcXCJpbWFnZS9yZXNpemUsd18xNjAvZm9ybWF0LGpwZWdcXFxcXFxcIixcXFxcXFxcImltYWdlX3VybF9wcm9jZXNzXFxcXFxcXCI6XFxcXFxcXCJpbWFnZS9yZXNpemUsd18xOTIwL2Zvcm1hdCxqcGVnXFxcXFxcXCIsXFxcXFxcXCJ2aWRlb190aHVtYm5haWxfcHJvY2Vzc1xcXFxcXFwiOlxcXFxcXFwidmlkZW8vc25hcHNob3QsdF8xMDAwLGZfanBnLGFyX2F1dG8sd18zMDBcXFxcXFxcIixcXFxcXFxcIm9yZGVyX2J5XFxcXFxcXCI6XFxcXFxcXCJuYW1lXFxcXFxcXCIsXFxcXFxcXCJvcmRlcl9kaXJlY3Rpb25cXFxcXFxcIjpcXFxcXFxcIkFTQ1xcXFxcXFwiJyArIG5leHQgKyAnfScsXFxcXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgLy9sb2cocmVzY29kKTtcXFxcbiAgICAgICAgICAgIHZhciBsaXN0eXAgPSBKU09OLnBhcnNlKHJlc2NvZCkuaXRlbXNbMF0udHlwZTtcXFxcbiAgICAgICAgICAgIHZhciBwZmlsZWlkID0gSlNPTi5wYXJzZShyZXNjb2QpLml0ZW1zWzBdLmZpbGVfaWQ7XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICB2YXIgbGlzdHlwID0gJ2ZvbGRlcic7XFxcXG4gICAgICAgICAgICB2YXIgcGZpbGVpZCA9IGRlY29kZVVSSUNvbXBvbmVudChyZWFsdXJsKS5zcGxpdCgnZm9sZGVyLycpWzFdXFxcXG5cXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAvL2xvZyhodG1sKTtcXFxcbiAgICAgICAgaWYgKGxpc3R5cCA9PSAnZm9sZGVyJykge1xcXFxuICAgICAgICAgICAgdmFyIHJlc2NvZCA9IGZldGNoKCdodHRwczovL2FwaS5hbGl5dW5kcml2ZS5jb20vYWRyaXZlL3YzL2ZpbGUvbGlzdCcsIHtcXFxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXFxcXG4gICAgICAgICAgICAgICAgICAgICdYLVNoYXJlLVRva2VuJzogc2hhcmV0b2tlblxcXFxuICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAgYm9keTogJ3tcXFxcXFxcInNoYXJlX2lkXFxcXFxcXCI6XFxcXFxcXCInICsgc2hhcmVJZCArICdcXFxcXFxcIixcXFxcXFxcInBhcmVudF9maWxlX2lkXFxcXFxcXCI6XFxcXFxcXCInICsgcGZpbGVpZCArICdcXFxcXFxcIixcXFxcXFxcImxpbWl0XFxcXFxcXCI6MTAwLFxcXFxcXFwiaW1hZ2VfdGh1bWJuYWlsX3Byb2Nlc3NcXFxcXFxcIjpcXFxcXFxcImltYWdlL3Jlc2l6ZSx3XzE2MC9mb3JtYXQsanBlZ1xcXFxcXFwiLFxcXFxcXFwiaW1hZ2VfdXJsX3Byb2Nlc3NcXFxcXFxcIjpcXFxcXFxcImltYWdlXFxcXFxcXFwvcmVzaXplLHdfMTkyMC9mb3JtYXQsanBlZ1xcXFxcXFwiLFxcXFxcXFwidmlkZW9fdGh1bWJuYWlsX3Byb2Nlc3NcXFxcXFxcIjpcXFxcXFxcInZpZGVvL3NuYXBzaG90LHRfMTAwMCxmX2pwZyxhcl9hdXRvLHdfMzAwXFxcXFxcXCIsXFxcXFxcXCJvcmRlcl9ieVxcXFxcXFwiOlxcXFxcXFwibmFtZVxcXFxcXFwiLFxcXFxcXFwib3JkZXJfZGlyZWN0aW9uXFxcXFxcXCI6XFxcXFxcXCJBU0NcXFxcXFxcIicgKyBuZXh0ICsgJ30nLFxcXFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxcXG4gICAgICAgICAgICB9KTtcXFxcblxcXFxuICAgICAgICB9IC8v5Y+W5paH5Lu25aS5XFxcXG4gICAgICAgIC8vbG9nKHJlc2NvZCk7XFxcXG5cXFxcbiAgICAgICAgaWYgKEpTT04ucGFyc2UocmVzY29kKS5uZXh0X21hcmtlcikge1xcXFxuICAgICAgICAgICAgbGV0IG1hcmtlciA9IEpTT04ucGFyc2UocmVzY29kKS5uZXh0X21hcmtlcjtcXFxcbiAgICAgICAgICAgIGlmIChtYXJrZXIubGVuZ3RoID4gMTApIHtcXFxcbiAgICAgICAgICAgICAgICBwdXRNeVZhcignbmV4dHBhZ2UnLCBtYXJrZXIpO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICBjbGVhck15VmFyKCduZXh0cGFnZScpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHZhciBjb250cyA9IEpTT04ucGFyc2UocmVzY29kKS5pdGVtcztcXFxcbiAgICAgICAgdmFyIHppbXVsaXN0ID0gW107XFxcXG4gICAgICAgIGNvbnRzLmZvckVhY2goaXRlbSA9PiB7XFxcXG4gICAgICAgICAgICBpZiAoY29uZmlnLnN1YnMuaW5jbHVkZXMoaXRlbS5maWxlX2V4dGVuc2lvbikpIHtcXFxcbiAgICAgICAgICAgICAgICB6aW11bGlzdC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgZXh0OiBpdGVtLmZpbGVfZXh0ZW5zaW9uLFxcXFxuICAgICAgICAgICAgICAgICAgICBmaWxlX2lkOiBpdGVtLmZpbGVfaWQsXFxcXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0ubmFtZS5yZXBsYWNlKCcuJyArIGl0ZW0uZmlsZV9leHRlbnNpb24sICcnKVxcXFxuICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pXFxcXG5cXFxcbiAgICAgICAgdmFyIHR1aXNvbmcgPSBbXTtcXFxcbiAgICAgICAgZm9yICh2YXIgaSBpbiBjb250cykge1xcXFxuICAgICAgICAgICAgdmFyIGxpc3R5cCA9IGNvbnRzW2ldLnR5cGU7XFxcXG4gICAgICAgICAgICBpZiAobGlzdHlwICE9ICdmb2xkZXInKSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIHppbXUgPSB7fTtcXFxcbiAgICAgICAgICAgICAgICB2YXIgY2F0ZSA9IGNvbnRzW2ldLmNhdGVnb3J5O1xcXFxuICAgICAgICAgICAgICAgIHZhciBmbmFtZSA9IGNvbnRzW2ldLm5hbWU7XFxcXG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBmbmFtZS5yZXBsYWNlKGNvbnRzW2ldLmZpbGVfZXh0ZW5zaW9uLCAnJyk7XFxcXG5cXFxcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gemltdWxpc3QuZmluZEluZGV4KHggPT4gbmFtZS5pbmNsdWRlcyh4Lm5hbWUpKTtcXFxcbiAgICAgICAgICAgICAgICBpZiAoaWR4ICE9PSAtMSAmJiAhY29uZmlnLnN1YnMuaW5jbHVkZXMoY29udHNbaV0uZmlsZV9leHRlbnNpb24pKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHppbXVsaXN0LnNwbGljZShpZHgsIDEpO1xcXFxuICAgICAgICAgICAgICAgICAgICB6aW11ID0gemltdWxpc3RbaWR4XTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG5cXFxcbiAgICAgICAgICAgICAgICB2YXIgbG9uZ2MgPSBbXTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgc3VibmFtZSA9IHN0b3JhZ2UwLmdldE15VmFyKCdtb3VudHppbXUnLCAnJyk7XFxcXG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5zdWJzLmluY2x1ZGVzKGNvbnRzW2ldLmZpbGVfZXh0ZW5zaW9uKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IGNvbnRzW2ldO1xcXFxuICAgICAgICAgICAgICAgICAgICB2YXIgem0gPSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHQ6IGl0ZW0uZmlsZV9leHRlbnNpb24sXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlX2lkOiBpdGVtLmZpbGVfaWQsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWUucmVwbGFjZSgnLicgKyBpdGVtLmZpbGVfZXh0ZW5zaW9uLCAnJylcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICBsb25nYyA9IFt7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLmjILovb3lrZfluZU6IFxcXFxcXFwiICsgKHN1Ym5hbWUgPT0gJycgPyAn5pegJyA6IHN1Ym5hbWUubmFtZSsnLicrc3VibmFtZS5leHQpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHptKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAucHV0TXlWYXIoJ21vdW50emltdScsIHptKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5oyC6L295a6M5oiQ77yM5b2T5YmN5a2X5bmV5paH5Lu2OiAnICsgem0ubmFtZSsnLicrem0uZXh0O1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgem0pLFxcXFxuICAgICAgICAgICAgICAgICAgICB9XVxcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxvbmdjID0gW3tcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuW9k+WJjeaMgui9veWtl+W5lTogXFxcXFxcXCIgKyAoc3VibmFtZSA9PSAnJyA/ICfml6AnIDogc3VibmFtZS5uYW1lKycuJytzdWJuYW1lLmV4dCksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBqczogJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxcXFxuICAgICAgICAgICAgICAgICAgICB9XTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG5cXFxcblxcXFxuICAgICAgICAgICAgICAgIGlmIChjYXRlID09ICd2aWRlbycpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gJ/Cfk7onICsgY29udHNbaV0ubmFtZTtcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNhdGUgPT0gJ2RvYycpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gJ/Cfk5YnICsgY29udHNbaV0ubmFtZTtcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNhdGUgPT0gJ2ltYWdlJykge1xcXFxuICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSAn8J+WvCcgKyBjb250c1tpXS5uYW1lO1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2F0ZSA9PSAnemlwJykge1xcXFxuICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSAn8J+TpicgKyBjb250c1tpXS5uYW1lO1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9IGNvbnRzW2ldLm5hbWVcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBcXFxcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQoY29udHNbaV0uZmlsZV9pZCkubGF6eVJ1bGUoKHNoYXJlSWQsIHNoYXJldG9rZW4sIGNhdGUsIGZuYW1lLCByZWZ0b2tlbiwgemltdSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hbGlsYXp5XFxcXFxcXCIpKHNoYXJlSWQsIGlucHV0LCBjYXRlLCB6aW11KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfSwgc2hhcmVJZCwgc2hhcmV0b2tlbiwgY2F0ZSwgZm5hbWUsIHJlZnRva2VuLCB6aW11KSxcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogZm9ybWF0RGF0ZShjb250c1tpXS51cGRhdGVkX2F0KSArICcgICcgKyBmb3JtYXRTaXplKGNvbnRzW2ldLnNpemUpLFxcXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGNvbnRzW2ldLmZpbGVfaWQsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsb25nQ2xpY2s6bG9uZ2NcXFxcbiAgICAgICAgICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnXFxcXG5cXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn8J+TgicgKyBjb250c1tpXS5uYW1lLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJ2hpa2VyOi8vZW1wdHknICsgY29udHNbaV0uZmlsZV9pZCArICc/Pz9meXBhZ2UnKS5ydWxlKChzaGFyZUlkLCBzaGFyZXRva2VuLCBwdXNobmFtZSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvcnVsZWxvb3AnLCB7fSkpLnJ1bGUpO1xcXFxuICAgICAgICAgICAgICAgICAgICB9LCBzaGFyZUlkLCBzaGFyZXRva2VuLCBjb250c1tpXS5uYW1lKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbidcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcblxcXFxuICAgICAgICAgICAgfSAvL2VuZCBpZlxcXFxuICAgICAgICB9IC8vZW5kIGZvciBpXFxcXG4gICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICBpdGVtcy5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiAn5qyn5qyn77yM5oql6ZSZ5LqG44CCJyxcXFxcbiAgICAgICAgICAgIHVybDogZGVjb2RlVVJJQ29tcG9uZW50KGdldFJlc0NvZGUoKS5zcGxpdCgnIyMnKVsxXSksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxcXG4gICAgICAgIH0pO1xcXFxuICAgIH1cXFxcbn1cXFxcbi8qXFxcXG5zZXRIb21lUmVzdWx0KHtcXFxcbiAgICBkYXRhOiBpdGVtc1xcXFxufSk7XFxcXG4qL1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIumYv+mHjOW1jOWll1xcXCIsXFxcInBhdGhcXFwiOlxcXCJydWxlbG9vcFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJ2YXIgaXRlbXMgPSBbXTtcXFxcblxcXFxuZnVuY3Rpb24gZm9ybWF0RGF0ZShfZGF0ZSwgX2ZtdCkge1xcXFxuICAgIGxldCBmbXQgPSBfZm10IHx8IFxcXFxcXFwieXl5eS1NTS1kZCBISDptbTpzc1xcXFxcXFwiO1xcXFxuICAgIGNvbnN0IGRhdGUgPSAhaXNOYU4oX2RhdGUpID8gbmV3IERhdGUoX2RhdGUgKiAxMDAwKSA6IG5ldyBEYXRlKF9kYXRlKTtcXFxcbiAgICBjb25zdCBvID0ge1xcXFxuICAgICAgICBcXFxcXFxcIk0rXFxcXFxcXCI6IGRhdGUuZ2V0TW9udGgoKSArIDEsIC8v5pyI5Lu9IFxcXFxuICAgICAgICBcXFxcXFxcImQrXFxcXFxcXCI6IGRhdGUuZ2V0RGF0ZSgpLCAvL+aXpSBcXFxcbiAgICAgICAgXFxcXFxcXCJoK1xcXFxcXFwiOiBkYXRlLmdldEhvdXJzKCkgJSAxMiA9PSAwID8gMTIgOiBkYXRlLmdldEhvdXJzKCkgJSAxMixcXFxcbiAgICAgICAgXFxcXFxcXCJIK1xcXFxcXFwiOiBkYXRlLmdldEhvdXJzKCksIC8v5bCP5pe2IFxcXFxuICAgICAgICBcXFxcXFxcIm0rXFxcXFxcXCI6IGRhdGUuZ2V0TWludXRlcygpLCAvL+WIhiBcXFxcbiAgICAgICAgXFxcXFxcXCJzK1xcXFxcXFwiOiBkYXRlLmdldFNlY29uZHMoKSwgLy/np5IgXFxcXG4gICAgICAgIFxcXFxcXFwicStcXFxcXFxcIjogTWF0aC5mbG9vcigoZGF0ZS5nZXRNb250aCgpICsgMykgLyAzKSwgLy/lraPluqYgXFxcXG4gICAgICAgIFxcXFxcXFwiU1xcXFxcXFwiOiBkYXRlLmdldE1pbGxpc2Vjb25kcygpIC8v5q+r56eSIFxcXFxuICAgIH07XFxcXG4gICAgaWYgKC8oeSspLy50ZXN0KGZtdCkpIHtcXFxcbiAgICAgICAgZm10ID0gZm10LnJlcGxhY2UoUmVnRXhwLiQxLCAoZGF0ZS5nZXRGdWxsWWVhcigpICsgXFxcXFxcXCJcXFxcXFxcIikuc3Vic3RyKDQgLSBSZWdFeHAuJDEubGVuZ3RoKSk7XFxcXG4gICAgfVxcXFxuICAgIGZvciAobGV0IGsgaW4gbykge1xcXFxuICAgICAgICBpZiAobmV3IFJlZ0V4cChcXFxcXFxcIihcXFxcXFxcIiArIGsgKyBcXFxcXFxcIilcXFxcXFxcIikudGVzdChmbXQpKSB7XFxcXG4gICAgICAgICAgICBmbXQgPSBmbXQucmVwbGFjZShSZWdFeHAuJDEsIChSZWdFeHAuJDEubGVuZ3RoID09IDEpID8gKG9ba10pIDogKChcXFxcXFxcIjAwXFxcXFxcXCIgKyBvW2tdKS5zdWJzdHIoKFxcXFxcXFwiXFxcXFxcXCIgKyBvW2tdKS5sZW5ndGgpKSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG4gICAgcmV0dXJuIGZtdDtcXFxcbn07XFxcXG5cXFxcbmZ1bmN0aW9uIGZvcm1hdFNpemUoc2l6ZSkge1xcXFxuICAgIGlmICghc2l6ZSkge1xcXFxuICAgICAgICByZXR1cm4gJyc7XFxcXG4gICAgfVxcXFxuICAgIGNvbnN0IHVuaXRzID0gWydCJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJywgJ1BCJywgJ0VCJywgJ1pCJywgJ1lCJ107XFxcXG4gICAgbGV0IGkgPSAwO1xcXFxuICAgIHdoaWxlIChzaXplID49IDEwMjQpIHtcXFxcbiAgICAgICAgc2l6ZSAvPSAxMDI0O1xcXFxuICAgICAgICBpKys7XFxcXG4gICAgfVxcXFxuICAgIHNpemUgPSBpID8gTnVtYmVyKHNpemUudG9GaXhlZCgyKSkgOiBzaXplO1xcXFxuICAgIHJldHVybiBgJHtzaXplfSAke3VuaXRzW2ldfWA7XFxcXG59XFxcXG4vL2xldCB0dmlwID0gZ2V0SXRlbSgnaGlrZXJ0dmJveHNldCcsICcnKTtcXFxcblxcXFxuLy9sb2coZ2V0UmVzQ29kZSgpKTtcXFxcbmlmIChNWV9QQUdFID09IDEpIHtcXFxcbiAgICBjbGVhck15VmFyKCduZXh0cGFnZScpO1xcXFxufVxcXFxuaWYgKE1ZX1BBR0UgPiAxICYmIGdldE15VmFyKCduZXh0cGFnZScsICcnKSA9PSAnJykge1xcXFxuICAgIGxvZygn5rKh5pyJ5LiL5LiA6aG1Jyk7XFxcXG59IGVsc2Uge1xcXFxuICAgIGxldCByZWZ0b2tlbiA9IEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vZmlsZXMvcnVsZXMvaWN5L2ljeS1hbGktdG9rZW4uanNvbicsIHt9KSlbMF0ucmVmcmVzaF90b2tlbjtcXFxcblxcXFxuICAgIGxldCBuZXh0ID0gZ2V0TXlWYXIoJ25leHRwYWdlJywgJycpICE9ICcnID8gJyxcXFxcXFxcIm1hcmtlclxcXFxcXFwiOlxcXFxcXFwiJyArIGdldE15VmFyKCduZXh0cGFnZScpICsgJ1xcXFxcXFwiJyA6ICcnO1xcXFxuXFxcXG4gICAgdmFyIHJlc2NvZCA9IGZldGNoKCdodHRwczovL2FwaS5hbGl5dW5kcml2ZS5jb20vYWRyaXZlL3YzL2ZpbGUvbGlzdCcsIHtcXFxcbiAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcXFxcbiAgICAgICAgICAgICdYLVNoYXJlLVRva2VuJzogc2hhcmV0b2tlblxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICBib2R5OiAne1xcXFxcXFwic2hhcmVfaWRcXFxcXFxcIjpcXFxcXFxcIicgKyBzaGFyZUlkICsgJ1xcXFxcXFwiLFxcXFxcXFwicGFyZW50X2ZpbGVfaWRcXFxcXFxcIjpcXFxcXFxcIicgKyBnZXRSZXNDb2RlKCkuc3BsaXQoJz8/PycpWzBdICsgJ1xcXFxcXFwiLFxcXFxcXFwibGltaXRcXFxcXFxcIjoxMDAsXFxcXFxcXCJpbWFnZV90aHVtYm5haWxfcHJvY2Vzc1xcXFxcXFwiOlxcXFxcXFwiaW1hZ2UvcmVzaXplLHdfMTYwL2Zvcm1hdCxqcGVnXFxcXFxcXCIsXFxcXFxcXCJpbWFnZV91cmxfcHJvY2Vzc1xcXFxcXFwiOlxcXFxcXFwiaW1hZ2VcXFxcXFxcXC9yZXNpemUsd18xOTIwL2Zvcm1hdCxqcGVnXFxcXFxcXCIsXFxcXFxcXCJ2aWRlb190aHVtYm5haWxfcHJvY2Vzc1xcXFxcXFwiOlxcXFxcXFwidmlkZW8vc25hcHNob3QsdF8xMDAwLGZfanBnLGFyX2F1dG8sd18zMDBcXFxcXFxcIixcXFxcXFxcIm9yZGVyX2J5XFxcXFxcXCI6XFxcXFxcXCJuYW1lXFxcXFxcXCIsXFxcXFxcXCJvcmRlcl9kaXJlY3Rpb25cXFxcXFxcIjpcXFxcXFxcIkFTQ1xcXFxcXFwiJyArIG5leHQgKyAnfScsXFxcXG4gICAgICAgIG1ldGhvZDogJ1BPU1QnXFxcXG4gICAgfSk7XFxcXG4gICAgLy9sb2cocmVzY29kKTtcXFxcbiAgICBpZiAoSlNPTi5wYXJzZShyZXNjb2QpLm5leHRfbWFya2VyKSB7XFxcXG4gICAgICAgIGxldCBtYXJrZXIgPSBKU09OLnBhcnNlKHJlc2NvZCkubmV4dF9tYXJrZXI7XFxcXG4gICAgICAgIGlmIChtYXJrZXIubGVuZ3RoID4gMTApIHtcXFxcbiAgICAgICAgICAgIHB1dE15VmFyKCduZXh0cGFnZScsIG1hcmtlcik7XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICBjbGVhck15VmFyKCduZXh0cGFnZScpO1xcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuICAgIHZhciBjb250cyA9IEpTT04ucGFyc2UocmVzY29kKS5pdGVtcztcXFxcbiAgICB2YXIgemltdWxpc3QgPSBbXTtcXFxcbiAgICBjb250cy5mb3JFYWNoKGl0ZW0gPT4ge1xcXFxuICAgICAgICBpZiAoY29uZmlnLnN1YnMuaW5jbHVkZXMoaXRlbS5maWxlX2V4dGVuc2lvbikpIHtcXFxcbiAgICAgICAgICAgIHppbXVsaXN0LnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIGV4dDogaXRlbS5maWxlX2V4dGVuc2lvbixcXFxcbiAgICAgICAgICAgICAgICBmaWxlX2lkOiBpdGVtLmZpbGVfaWQsXFxcXG4gICAgICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLnJlcGxhY2UoJy4nICsgaXRlbS5maWxlX2V4dGVuc2lvbiwgJycpXFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9XFxcXG4gICAgfSlcXFxcbiAgICB2YXIgdHVpc29uZyA9IFtdO1xcXFxuICAgIGZvciAodmFyIGkgaW4gY29udHMpIHtcXFxcbiAgICAgICAgdmFyIGxpc3R5cCA9IGNvbnRzW2ldLnR5cGU7XFxcXG4gICAgICAgIGlmIChsaXN0eXAgIT0gJ2ZvbGRlcicpIHtcXFxcbiAgICAgICAgICAgIHZhciB6aW11ID0ge307XFxcXG4gICAgICAgICAgICB2YXIgY2F0ZSA9IGNvbnRzW2ldLmNhdGVnb3J5O1xcXFxuICAgICAgICAgICAgdmFyIGZuYW1lID0gY29udHNbaV0ubmFtZTtcXFxcbiAgICAgICAgICAgIHZhciBuYW1lID0gZm5hbWUucmVwbGFjZShjb250c1tpXS5maWxlX2V4dGVuc2lvbiwgJycpO1xcXFxuXFxcXG4gICAgICAgICAgICB2YXIgaWR4ID0gemltdWxpc3QuZmluZEluZGV4KHggPT4gbmFtZS5pbmNsdWRlcyh4Lm5hbWUpKTtcXFxcbiAgICAgICAgICAgIGlmIChpZHggIT09IC0xICYmICFjb25maWcuc3Vicy5pbmNsdWRlcyhjb250c1tpXS5maWxlX2V4dGVuc2lvbikpIHtcXFxcbiAgICAgICAgICAgICAgICB6aW11bGlzdC5zcGxpY2UoaWR4LCAxKTtcXFxcbiAgICAgICAgICAgICAgICB6aW11ID0gemltdWxpc3RbaWR4XTtcXFxcbiAgICAgICAgICAgIH1cXFxcblxcXFxuICAgICAgICAgICAgdmFyIGNhdGUgPSBjb250c1tpXS5jYXRlZ29yeTtcXFxcbiAgICAgICAgICAgIHZhciBmbmFtZSA9IGNvbnRzW2ldLm5hbWU7XFxcXG4gICAgICAgICAgICBpZiAoY2F0ZSA9PSAndmlkZW8nKSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gJ/Cfk7onICsgY29udHNbaV0ubmFtZTtcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2F0ZSA9PSAnZG9jJykge1xcXFxuICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICfwn5OWJyArIGNvbnRzW2ldLm5hbWU7XFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNhdGUgPT0gJ2ltYWdlJykge1xcXFxuICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICfwn5a8JyArIGNvbnRzW2ldLm5hbWU7XFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNhdGUgPT0gJ3ppcCcpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSAn8J+TpicgKyBjb250c1tpXS5uYW1lO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSBjb250c1tpXS5uYW1lXFxcXG4gICAgICAgICAgICB9XFxcXG5cXFxcbiAgICAgICAgICAgIHZhciBsb25nYyA9IFtdO1xcXFxuICAgICAgICAgICAgbGV0IHN1Ym5hbWUgPSBzdG9yYWdlMC5nZXRNeVZhcignbW91bnR6aW11JywgJycpO1xcXFxuICAgICAgICAgICAgaWYgKGNvbmZpZy5zdWJzLmluY2x1ZGVzKGNvbnRzW2ldLmZpbGVfZXh0ZW5zaW9uKSkge1xcXFxuICAgICAgICAgICAgICAgIHZhciBpdGVtID0gY29udHNbaV07XFxcXG4gICAgICAgICAgICAgICAgdmFyIHptID0ge1xcXFxuICAgICAgICAgICAgICAgICAgICBleHQ6IGl0ZW0uZmlsZV9leHRlbnNpb24sXFxcXG4gICAgICAgICAgICAgICAgICAgIGZpbGVfaWQ6IGl0ZW0uZmlsZV9pZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLnJlcGxhY2UoJy4nICsgaXRlbS5maWxlX2V4dGVuc2lvbiwgJycpXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIGxvbmdjID0gW3tcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5oyC6L295a2X5bmVOiBcXFxcXFxcIiArIChzdWJuYW1lID09ICcnID8gJ+aXoCcgOiBzdWJuYW1lLm5hbWUrJy4nK3N1Ym5hbWUuZXh0KSxcXFxcbiAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHptKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5wdXRNeVZhcignbW91bnR6aW11Jywgem0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aMgui9veWujOaIkO+8jOW9k+WJjeWtl+W5leaWh+S7tjogJyArIHptLm5hbWUrJy4nK3ptLmV4dDtcXFxcbiAgICAgICAgICAgICAgICAgICAgfSwgem0pLFxcXFxuICAgICAgICAgICAgICAgIH1dXFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIGxvbmdjID0gW3tcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5b2T5YmN5oyC6L295a2X5bmVOiBcXFxcXFxcIiArIChzdWJuYW1lID09ICcnID8gJ+aXoCcgOiBzdWJuYW1lLm5hbWUrJy4nK3N1Ym5hbWUuZXh0KSxcXFxcbiAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXFxcbiAgICAgICAgICAgICAgICAgICAgfSksXFxcXG4gICAgICAgICAgICAgICAgfV07XFxcXG4gICAgICAgICAgICB9XFxcXG5cXFxcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcXFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoY29udHNbaV0uZmlsZV9pZCkubGF6eVJ1bGUoKHNoYXJlSWQsIHNoYXJldG9rZW4sIGNhdGUsIGZuYW1lLCByZWZ0b2tlbix6aW11KSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYWxpbGF6eVxcXFxcXFwiKShzaGFyZUlkLCBpbnB1dCwgY2F0ZSx6aW11KTtcXFxcbiAgICAgICAgICAgICAgICB9LCBzaGFyZUlkLCBzaGFyZXRva2VuLCBjYXRlLCBmbmFtZSwgcmVmdG9rZW4semltdSksXFxcXG4gICAgICAgICAgICAgICAgZGVzYzogZm9ybWF0RGF0ZShjb250c1tpXS51cGRhdGVkX2F0KSArICcgICcgKyBmb3JtYXRTaXplKGNvbnRzW2ldLnNpemUpLFxcXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlkOiBjb250c1tpXS5maWxlX2lkLFxcXFxuICAgICAgICAgICAgICAgICAgICBsb25nQ2xpY2s6IGxvbmdjXFxcXG4gICAgICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfMSdcXFxcblxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICBpdGVtcy5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogJ/Cfk4InICsgY29udHNbaV0ubmFtZSxcXFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoJ2hpa2VyOi8vZW1wdHknICsgY29udHNbaV0uZmlsZV9pZCArICc/Pz9meXBhZ2UnKS5ydWxlKChzaGFyZUlkLCBzaGFyZXRva2VuLCBwdXNobmFtZSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9ydWxlbG9vcCcsIHt9KSkucnVsZSk7XFxcXG4gICAgICAgICAgICAgICAgfSwgc2hhcmVJZCwgc2hhcmV0b2tlbiwgY29udHNbaV0ubmFtZSksXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdmbGV4X2J1dHRvbidcXFxcbiAgICAgICAgICAgIH0pO1xcXFxuXFxcXG4gICAgICAgIH0gLy9lbmQgaWZcXFxcblxcXFxuICAgIH1cXFxcbn1cXFxcbnNldFJlc3VsdChpdGVtcyk7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6Zi/6YeM5o6o6YCBXFxcIixcXFwicGF0aFxcXCI6XFxcInB1c2hcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG4vL2xvZyhNWV9VUkwpO1xcXFxudmFyIGl0ZW1zID0gW107XFxcXG52YXIgcmVhbHVybCA9IE1ZX1VSTC5zcGxpdCgnIyMnKVsxXS5zcGxpdCgnPz8/JylbMF07XFxcXG5pZiAoZGVjb2RlVVJJQ29tcG9uZW50KHJlYWx1cmwpLmluY2x1ZGVzKCd3d3cuYWxpeXVuZHJpdmUnKSAmJiAhcmVhbHVybC5pbmNsdWRlcygnJTNCJTdCJykpIHtcXFxcbiAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9zaGFyaWQnLCB7fSkpLnJ1bGUpXFxcXG59XFxcXG5zZXRSZXN1bHQoaXRlbXMpO1xcXCJ9XVwiLFwicHJveHlcIjpcIlwifSIsInRpdGxlIjoi5aSn5piO6aOO5Y2OIn0=
Add Comment
Please, Sign In to add comment