Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@道长仓库Pro@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoi6YGT6ZW/5LuT5bqTUHJvIiwiYXV0aG9yIjoiQExveURnSWsiLCJ1cmwiOiJoaWtlcjovL2VtcHR5IiwidmVyc2lvbiI6MTA1LCJjb2xfdHlwZSI6Imljb25fMl9yb3VuZCIsImNsYXNzX25hbWUiOiIiLCJjbGFzc191cmwiOiIiLCJhcmVhX25hbWUiOiIiLCJhcmVhX3VybCI6IiIsInNvcnRfbmFtZSI6IiIsInllYXJfbmFtZSI6IiIsInNvcnRfdXJsIjoiIiwieWVhcl91cmwiOiIiLCJmaW5kX3J1bGUiOiJqczpcbiAgICBjb25zdCB7XG4gICAgICAgIGdldEFwaSxcbiAgICAgICAgY29sb3IsXG4gICAgICAgIHNtYWxsLFxuICAgICAgICBnZXRGaWxlLFxuICAgICAgICBodG1sVGFnLFxuICAgICAgICBhcGlcbiAgICB9ID0gJC5yZXF1aXJlKFwiaGlrZXI6Ly9wYWdlL3V0aWxpeVwiKTtcblxuY29uc3QgbHNnPSQucmVxdWlyZShcImhpa2VyOi8vcGFnZS9sb2NhbFN0b3JhZ2U/cnVsZT3pgZPplb/ku5PlupNQcm9cIik7XG5sZXQgY2xhc3NBID0gZ2V0VmFyKFwiV2FyZWhvdXNlLmNsYXNzXCIsIFwiMFwiKTtcbmxldCBsaXN0VXJsID0gZ2V0QXBpKFwidXNlcnNVcmxcIikgKyBjbGFzc0EsXG4gICAgbXlVcmwgPSBnZXRBcGkoXCJydWxlc0FsbFVybFwiKTtcbnB1dFZhcihcIldhcmVob3VzZS5maWx0ZXJcIiwgXCJcIik7XG5sZXQgdXNlckxpc3QgPSBKU09OLnBhcnNlKHJlcXVlc3QobGlzdFVybCkpLnJlc3VsdCxcbiAgICBub3dDb24gPSAwLFxuICAgIHJ1bGVDb3VudCA9IEpTT04ucGFyc2UocmVxdWVzdChnZXRBcGkoXCJydWxlQ291bnRVcmxcIikpKS5yZXN1bHQ7XG5sZXQgZGF0YSA9IFtdO1xubGV0IGNsYXNzVGFiID0gW1xuICAgIFtcIuS4iuasoea0u+i3g1wiLCBcIjBcIl0sXG4gICAgW1wi6KeE5YiZ5pWwXCIsIFwiMVwiXSxcbiAgICBbXCLms6jlhozml7bpl7RcIiwgXCItMVwiXVxuXVxuZm9yIChsZXQgaXRlbSBvZiBjbGFzc1RhYikge1xuICAgIGRhdGEucHVzaCh7XG4gICAgICAgIHRpdGxlOiBpdGVtWzFdID09PSBjbGFzc0EgPyBcIuKAnOKAnFwiICsgaXRlbVswXSArIFwi4oCd4oCdXCIgOiBpdGVtWzBdLFxuICAgICAgICB1cmw6ICQoXCIjbm9Mb2FkaW5nI1wiKS5sYXp5UnVsZSgoa2V5KSA9PiB7XG4gICAgICAgICAgICBwdXRWYXIoXCJXYXJlaG91c2UuY2xhc3NcIiwga2V5KTtcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybiBcImhpa2VyOi8vZW1wdHlcIjtcbiAgICAgICAgfSwgaXRlbVsxXSksXG4gICAgICAgIGNvbF90eXBlOiBcInNjcm9sbF9idXR0b25cIlxuICAgIH0pO1xufVxuZGF0YS5wdXNoKHtcbiAgICB0aXRsZTogXCLlhajpg6jop4TliJlcIixcbiAgICB1cmw6IFwiaGlrZXI6Ly9wYWdlL0FsbFB1YmxpY1J1bGU/dXJsPWhpa2VyOi8vZW1wdHkjZnlwYWdlI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1wiLFxuICAgIGNvbF90eXBlOiBcInNjcm9sbF9idXR0b25cIlxufSk7XG5kYXRhLnB1c2goe1xuICAgIHRpdGxlOiBcIuWIt+aWsOS+nei1llwiLFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoanNvblVybCk9PntcbiAgICAgICAganNvblVybCA9IGpzb25VcmwrJzI1MDUnO1xuICAgICAgICAvLyBsb2coanNvblVybCk7XG4gICAgICAgIGxldCB0ZXh0ID0gcmVxdWVzdChqc29uVXJsKTtcbiAgICAgICAgaWYoIS92ZXJzaW9uLy50ZXN0KHRleHQpKXtcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mnI3liqHlmajmraPlv5ks6K+356iN5YCZ5YaN6K+VLi4uJ1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZUNhY2hlKGpzb25VcmwpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVxdWlyZShqc29uVXJsKTtcbiAgICAgICAgICAgIGNvbmZpcm0oe3RpdGxlOifliLfmlrDmiJDlip/mj5DnpLonLGNvbnRlbnQ6XCJ0b2FzdDovL+W3suWIt+aWsCzlvZPliY3niYjmnKzkv6Hmga86XFxuXCIrSlNPTi5zdHJpbmdpZnkodmVyc2lvbil9KVxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xuICAgICAgICB9Y2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ns5/ns5XvvIzmnKzlnLDnvJPlrZjmj5Lku7booqvmuIXpmaTkuobvvIzkvYbmmK/mnI3liqHlmajpgJrorq/lpLHotKUhJ1xuICAgICAgICB9XG4gICAgfSxnZXRBcGkoXCJpbXBvcnRVcmxcIikpLFxuICAgIGNvbF90eXBlOiBcInNjcm9sbF9idXR0b25cIlxufSk7XG5kYXRhLnB1c2goe1xuICAgIHRpdGxlOlwi6YCa5YWNOlwiK2NvbG9yKGxzZy5nZXRJdGVtKFwi6YCa5YWNXCIsXCJYNVwiKSxcIiNmZjcwMDBcIiksXG4gICAgY29sX3R5cGU6XCJzY3JvbGxfYnV0dG9uXCIsXG4gICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCk9PntcbiAgICAgICAgY29uc3QgbHNnPSQucmVxdWlyZShcImhpa2VyOi8vcGFnZS9sb2NhbFN0b3JhZ2U/cnVsZT3pgZPplb/ku5PlupNQcm9cIik7XG4gICAgICAgIGlmKGxzZy5nZXRJdGVtKFwi6YCa5YWNXCIsXCJYNVwiKT09XCJYNVwiKXtcbiAgICAgICAgICAgIGxzZy5zZXRJdGVtKFwi6YCa5YWNXCIsXCJXRUJcIik7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgbHNnLnNldEl0ZW0oXCLpgJrlhY1cIixcIlg1XCIpO1xuICAgICAgICB9XG4gICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIFwi5bey6K6+572u5LuT5bqT6YCa5YWN5qih5byP5Li6OlwiK2xzZy5nZXRJdGVtKFwi6YCa5YWNXCIpO1xuICAgIH0pXG59KTtcbmFkZExpc3RlbmVyKCdvbkNsb3NlJywgJC50b1N0cmluZygoKSA9PiB7XG4gICAgY2xlYXJWYXIoXCJXYXJlaG91c2UuY2xhc3NcIik7XG59KSk7XG5sZXQge1xuICAgIHVzZXJuYW1lLFxuICAgIHBhc3N3b3JkLFxuICAgIHVzZXJcbn0gPSBnZXRGaWxlKCk7XG5cbmxldCBpc19sb2dpbiA9IGZhbHNlO1xuaWYgKHVzZXJuYW1lICE9PSB2b2lkIDAgJiYgcGFzc3dvcmQgIT09IHZvaWQgMCkge1xuICAgIG15VXJsICs9ICc/cXE9JyArIHVzZXJuYW1lICsgJyZwYXNzd29yZD0nICsgcGFzc3dvcmQ7XG4gICAgbGV0IGNvZGVfc3RyID0gcmVxdWVzdChteVVybCk7XG4gICAgbGV0IGNvZGUgPSBKU09OLnBhcnNlKGNvZGVfc3RyKTtcbiAgICBpZiAoY29kZS5zdGF0dXMgPT0gMCkge1xuICAgICAgICBpc19sb2dpbiA9IHRydWU7XG4gICAgfVxufVxuaWYgKGlzX2xvZ2luKSB7XG4gICAgbm93Q29uID0gSlNPTi5wYXJzZShyZXF1ZXN0KGdldEFwaShcIm5vd0NvblVybFwiKSkpLnJlc3VsdDtcbiAgICBsZXQgZGV2RGF0YSA9IHVzZXJMaXN0LmZpbmQoaXRlbSA9PiBpdGVtLnFxID09PSB1c2VybmFtZSk7XG4gICAgZGF0YS5wdXNoKHtcbiAgICAgICAgdGl0bGU6ICc8c3Ryb25nPjxzcGFuIHN0eWxlPVwiY29sb3I6ICNmZjcwMDBcIj4nICsgZGV2RGF0YS5uYW1lICsgJzwvc3Bhbj48L3N0cm9uZz4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8c21hbGw+PHU+6KeE5YiZ566h55CGID48L3U+PC9zbWFsbD4nLFxuICAgICAgICBwaWNfdXJsOiBkZXZEYXRhLmF2YXRhcixcbiAgICAgICAgY29sX3R5cGU6IFwiYXZhdGFyXCIsXG4gICAgICAgIHVybDogXCJoaWtlcjovL3BhZ2UvZGV2TWFuYWdlI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1wiLFxuICAgICAgICBleHRyYToge1xuICAgICAgICAgICAgdXNlcm5hbWU6IHVzZXJuYW1lLFxuICAgICAgICAgICAgcGFzc3dvcmQ6IHBhc3N3b3JkLFxuICAgICAgICAgICAgZGV2OiBkZXZEYXRhXG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBkYXRhLnB1c2goe1xuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMScsXG4gICAgICAgIHRpdGxlOiBzbWFsbChcIueOsOaciSBcIiArIGNvbG9yKHVzZXJMaXN0Lmxlbmd0aCwgXCIjZmY3MDAwXCIpICsgXCIg5ZCN5byA5Y+R6ICF77yMXCIgKyBjb2xvcihydWxlQ291bnRbMF0sIFwiI2ZmNzAwMFwiKSArIFwiIOadoeWFrOW8gOinhOWIme+8jFwiICsgY29sb3IocnVsZUNvdW50WzFdLCBcIiNmZjcwMDBcIikgKyBcIiDmnaHpm4boirPpmIHop4TliJnjgILlnKjnur86XCIrY29sb3Iobm93Q29uLCBcIiNmZjcwMDBcIikpLFxuICAgICAgICB1cmw6IFwidG9hc3Q6Ly/llrXllrXllrU/XCIsXG4gICAgfSk7XG5cbn0gZWxzZSB7XG4gICAgZGF0YS5wdXNoKHtcbiAgICAgICAgdGl0bGU6IHNtYWxsKGNvbG9yKFwi5byA5Y+R6ICF55m75b2VXCIsIFwiIzAwQkZGRlwiKSksXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXG4gICAgICAgIGRlc2M6IHNtYWxsKFwi546w5pyJXCIgKyBjb2xvcih1c2VyTGlzdC5sZW5ndGgsIFwiI2ZmNzAwMFwiKSArIFwi5ZCN5byA5Y+R6ICF77yMXCIgKyBjb2xvcihydWxlQ291bnRbMF0sIFwiI2ZmNzAwMFwiKSArIFwi5p2h5YWs5byA6KeE5YiZ77yMXCIgKyBjb2xvcigwLCBcIiNmZjcwMDBcIikgKyBcIuadoembhuiKs+mYgeinhOWImeOAglwiKSxcbiAgICAgICAgdXJsOiBcImhpa2VyOi8vcGFnZS9kZXZMb2dpblwiXG4gICAgfSk7XG59XG5pZiAoQXJyYXkuaXNBcnJheSh1c2VyKSAmJiB1c2VyLmxlbmd0aCA9PT0gMikge1xuICAgIGxldCB1c2VybG9naW4gPSByZXF1ZXN0KGFwaS5kaXNfbG9naW4sIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBcInBhcmFtc1wiOiB7XG4gICAgICAgICAgICAgICAgXCJxcVwiOiB1c2VyWzBdLFxuICAgICAgICAgICAgICAgIFwiYXV0aF9jb2RlXCI6IHVzZXJbMV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIG1ldGhvZDogJ1BPU1QnXG4gICAgfSk7XG4gICAgdXNlcmxvZ2luID0gSlNPTi5wYXJzZSh1c2VybG9naW4pLnJlc3VsdDtcbiAgICBpZiAodXNlcmxvZ2luLnN0YXR1cyA9PT0gMCkge1xuICAgICAgICB1c2VybG9naW4gPSB1c2VybG9naW4ucmVzdWx0XG4gICAgICAgIGRhdGEucHVzaCh7XG4gICAgICAgICAgICB0aXRsZTogdXNlcmxvZ2luLm5hbWUgKyBcIiZuYnNwOyZuYnNwO1wiICsgdXNlcmxvZ2luLnFxICsgXCImbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8c21hbGw+PHU+5pu05o2i6LSm5Y+3ID48L3U+PC9zbWFsbD5cIixcbiAgICAgICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcbiAgICAgICAgICAgIHBpY191cmw6IHVzZXJsb2dpbi5hdmF0YXJfdXJsLFxuICAgICAgICAgICAgdXJsOiBcImhpa2VyOi8vcGFnZS9Vc2VycmVnaXN0cmF0aW9uXCJcbiAgICAgICAgfSk7XG4gICAgICAgIGRhdGEuc3BsaWNlKDMsMCx7XG4gICAgICAgICAgICB0aXRsZTogdXNlcmxvZ2luLmhhc19yZXBseT9cIvCfhpXlm57lpI1cIjpcIvCflJTlm57lpI1cIixcbiAgICAgICAgICAgIHVybDogXCJoaWtlcjovL3BhZ2UvTXlSZXBseT91cmw9aGlrZXI6Ly9lbXB0eSNmeXBhZ2Ujbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXCIsXG4gICAgICAgICAgICBjb2xfdHlwZTogXCJzY3JvbGxfYnV0dG9uXCIsXG4gICAgICAgICAgICBleHRyYTp7XG4gICAgICAgICAgICAgICAgYXV0aF9jb2RlOnVzZXJbMV0sXG4gICAgICAgICAgICAgICAgcXE6dXNlclswXVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhLnB1c2goe1xuICAgICAgICAgICAgdGl0bGU6IHVzZXJsb2dpbi5kZXRhaWwsXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxuICAgICAgICAgICAgZGVzYzogXCLigJzigJzigJ3igJ08c21hbGw+PHU+6YeN5paw6I635Y+W6aqM6K+B56CBID48L3U+PC9zbWFsbD5cIixcbiAgICAgICAgICAgIHVybDogXCJoaWtlcjovL3BhZ2UvVXNlcnJlZ2lzdHJhdGlvblwiXG4gICAgICAgIH0pO1xuICAgIH1cbn0gZWxzZSB7XG4gICAgZGF0YS5wdXNoKHtcbiAgICAgICAgdGl0bGU6IFwi6K+E6K6655m75b2VL+azqOWGjFwiLFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxuICAgICAgICBkZXNjOiBcIlwiLFxuICAgICAgICB1cmw6IFwiaGlrZXI6Ly9wYWdlL1VzZXJyZWdpc3RyYXRpb25cIlxuICAgIH0pO1xufVxuZm9yICh2YXIgaXRlbSBvZiB1c2VyTGlzdCkge1xuICAgIGRhdGEucHVzaCh7XG4gICAgICAgIHRpdGxlOiBpdGVtLm5hbWUgKyBcIihcIiArIGl0ZW0ucnVsZV9udW0gKyBcIilcIixcbiAgICAgICAgZGVzYzogaXRlbS5pZCArICc6JyArIGl0ZW0ubmlja19uYW1lLFxuICAgICAgICBwaWNfdXJsOiBpdGVtLmF2YXRhcixcbiAgICAgICAgdXJsOiBcImhpa2VyOi8vcGFnZS9ydWxlcyNub0hpc3RvcnkjXCIsXG4gICAgICAgIGV4dHJhOiB7XG4gICAgICAgICAgICBhdmF0YXJVcmw6IGl0ZW0uYXZhdGFyLFxuICAgICAgICAgICAgcXE6IGl0ZW0ucXFcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5kYXRhLnB1c2goe1xuICAgIGNvbF90eXBlOiAnbG9uZ190ZXh0J1xufSk7XG5zZXRSZXN1bHQoZGF0YSk7XG5sZXQgaW1nID0gW1xuICAgIFtcbiAgICAgICAgXCJoaWtlcjovL2ZpbGVzL2ljb24v6LWeLnN2Z1wiLCBcImh0dHBzOi8vYmFmeWJlaWFlZXR3YmMzdGhveTIyeTV6ZDdhbDZybmRlcWJyYndoc3pxYjZvaXRuZjdhNXp2c3o1cGUuaXBmcy5jZi1pcGZzLmNvbS9cIlxuICAgIF0sXG4gICAgW1xuICAgICAgICBcImhpa2VyOi8vZmlsZXMvaWNvbi/ouKkuc3ZnXCIsIFwiaHR0cHM6Ly9iYWZ5YmVpZWh4eW5waGFhZmU0bXVrYWNzN3dlNGQ2bHJiMzVrcHBkaWZmanY0dnduc3EyMm5mcW5sNC5pcGZzLmNmLWlwZnMuY29tL1wiXG4gICAgXSxcbiAgICBbXG4gICAgICAgIFwiaGlrZXI6Ly9maWxlcy9pY29uL+ivhOiuui5zdmdcIiwgXCJodHRwczovL2JhZnliZWlmaHhpNXJkbnhxNXhseTdyNHFkYndpY28yMzQzc21lbHhkcW95dGFsZ3VjdGdjMm9qc2R5LmlwZnMuY2YtaXBmcy5jb20vXCJcbiAgICBdXG5dXG5mb3IgKGxldCBpdGVtIG9mIGltZykge1xuICAgIGlmICghZmlsZUV4aXN0KGl0ZW1bMF0pKSB7XG4gICAgICAgIHdyaXRlRmlsZShpdGVtWzBdLCByZXF1ZXN0KGl0ZW1bMV0pKTtcbiAgICB9XG59Iiwic2VhcmNoX3VybCI6Imhpa2VyOi8vZW1wdHkjKioiLCJncm91cCI6IuKRoOW4uOeUqCIsInNlYXJjaEZpbmQiOiJqczpcbnZhciBkID0gW107XG5jb25zdCB7XG4gICAgYXBpLFxuICAgIGdldEFwaSxcbiAgICBsb2NhbFJ1bGVWZXIgICAgXG59ID0gJC5yZXF1aXJlKFwiaGlrZXI6Ly9wYWdlL3V0aWxpeVwiKTtcbnZhciBodG1sID0gcmVxdWVzdChnZXRBcGkoXCJzZWFyY2hcIikgKyBcIj9rZXk9XCIgKyBNWV9VUkwucmVwbGFjZShcImhpa2VyOi8vZW1wdHkjXCIsIFwiXCIpKTsgLy8g6I635Y+W5rqQ56CBXG52YXIgcnVsZV9saXN0ID0gSlNPTi5wYXJzZShodG1sKS5yZXN1bHQ7XG5sZXQgZmlsdGVyID0gZ2V0VmFyKFwiV2FyZWhvdXNlLmZpbHRlclwiLCBcIlwiKTtcbmlmIChmaWx0ZXIgIT09IFwiXCIpIHtcbiAgICBydWxlX2xpc3QgPSBydWxlX2xpc3QuZmlsdGVyKGl0ZW0gPT4gaXRlbS5hdXRob3IgPT09IGZpbHRlcik7XG59XG5pZiAocnVsZV9saXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgIGQucHVzaCh7XG4gICAgICAgIHRpdGxlOiAn5YWx5pCc57Si5YiwJyArIHJ1bGVfbGlzdC5sZW5ndGggKyBcIuadoeiusOW9lVwiLFxuICAgICAgICBkZXNjOiAn6K+m5oOF6K+35om+6YGT6ZW/LHFxIDQzNDg1NzAwNScsXG4gICAgICAgIHVybDogXCJoaWtlcjovL2VtcHR5XCIsXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcbiAgICB9KTtcbn1cbmxldCBob21lTGlzdCA9IEpTT04ucGFyc2UocmVxdWVzdChhcGkuaG9tZSkpO1xuXG5mb3IgKGxldCBpdGVtIG9mIHJ1bGVfbGlzdCkge1xuICAgIC8vbGV0IGx2ZXI9bG9jYWxSdWxlVmVyKGhvbWVMaXN0LCBpdGVtKTtcbiAgICBsZXQgbGFiZWwgPSBcIlwiLFxuICAgICAgICBsdmVyID0gLTI7XG4gICAgaWYgKGl0ZW0uZGF0YV90eXBlID09PSBcImhvbWVfcnVsZV91cmxcIikge1xuICAgICAgICBsdmVyID0gbG9jYWxSdWxlVmVyKGhvbWVMaXN0LCBpdGVtKTtcbiAgICAgICAgaWYgKGx2ZXIgPT09IC0xKSB7XG4gICAgICAgICAgICBsYWJlbCA9IFwi8J+GlVwiO1xuICAgICAgICB9IGVsc2UgaWYgKGx2ZXIgPCBpdGVtLnZlcikge1xuICAgICAgICAgICAgbGFiZWwgPSBcIvCfhplcIjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkLnB1c2goe1xuICAgICAgICB0aXRsZTogbGFiZWwraXRlbS5uYW1lLFxuICAgICAgICBkZXNjOiBpdGVtLnR5cGUsXG4gICAgICAgIGNvbnRlbnQ6IGl0ZW0uYXV0aG9yLyorXCJcXG7mnKzlnLDniYjmnKw6XCIrbHZlcitcIlxcdFxcdOS6keerr+eJiOacrDpcIitpdGVtLnZlciovKyAnXFxu5pu05paw5LqOOicgKyBpdGVtLmxhc3RfdXBkYXRlLFxuICAgICAgICB1cmw6IFwiaGlrZXI6Ly9wYWdlL3J1bGVEZXRhaWwjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXCIsXG4gICAgICAgIGV4dHJhOiB7XG4gICAgICAgICAgICBsdmVyOiBsdmVyLFxuICAgICAgICAgICAgaWQ6IGl0ZW0uaWRcbiAgICAgICAgfSxcbiAgICAgICAgcGljX3VybDogaXRlbS5waWNfdXJsXG4gICAgfSk7XG5cbn1cblxuc2V0UmVzdWx0KGQpOyIsImRldGFpbF9jb2xfdHlwZSI6InRleHRfMSIsImRldGFpbF9maW5kX3J1bGUiOiIiLCJzZGV0YWlsX2NvbF90eXBlIjoidGV4dF8xIiwic2RldGFpbF9maW5kX3J1bGUiOiIiLCJ1YSI6Im1vYmlsZSIsInByZVJ1bGUiOiIiLCJwYWdlcyI6Ilt7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5bel5YW3XCIsXCJwYXRoXCI6XCJ1dGlsaXlcIixcInJ1bGVcIjpcImpzOlxcbmxldCBob3N0ID0gXFxcImh0dHA6Ly9oaWtlci5ub2tpYS5wcmVzc1xcXCI7XFxuLy9sZXQgaG9zdCA9IFxcXCJodHRwOi8vMTkyLjE2OC4zLjk0OjgwNzlcXFwiO1xcbmxldCBob21lID0gYmFzZTY0RGVjb2RlKFxcXCJhR2xyWlhJNkx5OW9iMjFsXFxcIik7XFxudmFyIGFwaSA9IHtcXG4gICAgaG9zdDogaG9zdCtcXFwiL2hpa2VydWxlXFxcIixcXG4gICAgdXNlcnNVcmw6IFxcXCIvZGV2L3VzZXJzP29yZGVyPVxcXCIsIC8v55So5oi35YiX6KGoXFxuICAgIHJ1bGVDb3VudFVybDogXFxcIi9kZXYvcnVsZWNvdW50XFxcIiwgLy/ojrflj5bop4TliJnmlbDph49cXG4gICAgcnVsZXNVcmw6IFxcXCIvZGV2L2dldFxcXCIsIC8v55So5oi35a+55bqU55qE6KeE5YiZ5YiX6KGo5LuF5LuF6I635Y+W5YWs5byAXFxuICAgIHJ1bGVzQWxsVXJsOiBcXFwiL2Rldi9nZXRhbGxcXFwiLCAvL+W8gOWPkeiAheWvueW6lOeahOinhOWImeWIl+ihqOWPr+iOt+WPluengeaciVxcbiAgICBpbXBvcnRVcmw6IFxcXCIvcnVsZWxpc3QuanNvbj9pZD1cXFwiLCAvL+inhOWImeivpuaDheWPr+WvvOWFpVxcbiAgICBpbmZvU2V0VXJsOiBcXFwiL2Rldi9zZXRfaW5mb1xcXCIsXFxuICAgIG5vd0NvblVybDogXFxcIi9zcWxfaW5mby9nZXRfbm93X2NvblxcXCIsXFxuICAgIGluZm9HZXRVcmw6IFxcXCIvZGV2L2dldF9pbmZvP25hbWU9XFxcIixcXG4gICAgc2V0dGluZ3NHZXRVcmw6IFxcXCIvZGV2L2dldF9zZXR0aW5ncz9uYW1lPVxcXCIsXFxuICAgIGd1cGxvYWQ6IFxcXCIvZGV2L2d1cGxvYWRcXFwiLFxcbiAgICBndGltZW92ZXI6IFxcXCIvZGV2L2d0aW1lb3ZlclxcXCIsXFxuICAgIGdldGJ5aWQ6IFxcXCIvZGV2L2dldGJ5aWRcXFwiLFxcbiAgICBydWxlTGlzdEpzb246IFxcXCIvcnVsZWxpc3QuanNvblxcXCIsXFxuICAgIGF1dGg6IFxcXCIvZGV2L2dldF9hdXRoXFxcIixcXG4gICAgdGltZW92ZXI6IFxcXCIvZGV2L3RpbWVvdmVyXFxcIixcXG4gICAgc2hhcmU6IFxcXCIvZGV2L3NoYXJlXFxcIixcXG4gICAgZ2VuQXV0aDogXFxcIi9kZXYvZ2VuX2F1dGhcXFwiLFxcbiAgICBkZWxldGVVcmw6IFxcXCIvZGV2L2RlbGV0ZVxcXCIsXFxuICAgIGpzb25MaXN0OiBcXFwiL2Rldi9qc29uX2xpc3RcXFwiLFxcbiAgICBzZWFyY2g6IFxcXCIvZGV2L3NlYXJjaFxcXCIsXFxuICAgIG5ld19kZXY6IFxcXCIvZGV2X3JlZ2lzdC9uZXdcXFwiLFxcbiAgICBuZXdfZ2V0SWQ6IFxcXCIvZGV2X3JlZ2lzdC9nZXRfaWRcXFwiLFxcbiAgICBuZXdfY29uZmlybTogXFxcIi9kZXZfcmVnaXN0L2NvbmZpcm1cXFwiLFxcbiAgICBtb2RpZnlfcHdkOiBcXFwiL21vZGlmeS9wYXNzd29yZFxcXCIsXFxuICAgIG1vZGlmeV9uYW1lOiBcXFwiL21vZGlmeS9uYW1lXFxcIixcXG4gICAgbW9kaWZ5X2F2YTogXFxcIi9tb2RpZnkvYXZhdGFyXFxcIixcXG4gICAgdXNlcjogXFxcIi9kZXYvdXNlci9cXFwiLFxcbiAgICBnZXRfcnVsZV9ub3RlOiBcXFwiL21vZGlmeS9nZXRfcnVsZV9ub3RlL1xcXCIsXFxuICAgIHNldF9ydWxlX3BpYzogXFxcIi9tb2RpZnkvcnVsZV9waWMvXFxcIixcXG4gICAgc2V0X3J1bGVfbm90ZTogXFxcIi9tb2RpZnkvcnVsZV9ub3RlL1xcXCJcXG59XFxuJC5leHBvcnRzLnJhbmdlID0gZnVuY3Rpb24obSwgbikge1xcbiAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG0gLSBuICsgMSkgKyBuKTtcXG59XFxuJC5leHBvcnRzLm1hcENvbFR5cGUgPSBmdW5jdGlvbih0YXJnZXQsIHR5cGUsIG4pIHtcXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcXG4gICAgICAgIHRhcmdldC5wdXNoKHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogdHlwZVxcbiAgICAgICAgfSk7XFxuICAgIH1cXG59XFxuJC5leHBvcnRzLmdldEFwaSA9IGZ1bmN0aW9uKGspIHtcXG4gICAgcmV0dXJuIGFwaS5ob3N0ICsgYXBpW2tdO1xcbn1cXG4kLmV4cG9ydHMubG9jYWxSdWxlVmVyID0gZnVuY3Rpb24obG9jYWxSdWxlTGlzdCwgcnVsZSkge1xcbiAgICBsZXQgbG9jYWxSdWxlO1xcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxvY2FsUnVsZUxpc3QubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIGxldCBpdGVtID0gbG9jYWxSdWxlTGlzdFtpXTtcXG4gICAgICAgIGxldCBhdSA9IGl0ZW0uYXV0aG9yIHx8IFxcXCJcXFwiO1xcbiAgICAgICAgbGV0IHNhbWVBdT1hdS5sZW5ndGggPiAwICYmIHJ1bGUuYXV0aG9yLmluY2x1ZGVzKGF1KTtcXG4gICAgICAgIHNhbWVBdT10cnVlOy8v5LiN5Yik5pat5L2c6ICF6buY6K6k5Li6dHJ1ZVxcbiAgICAgICAgaWYgKGl0ZW0udGl0bGUgPT09IHJ1bGUubmFtZSAmJiBzYW1lQXUpIHtcXG4gICAgICAgICAgICBsb2NhbFJ1bGUgPSBpdGVtO1xcbiAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIGlmIChsb2NhbFJ1bGUgPT09IHZvaWQgMCkge1xcbiAgICAgICAgcmV0dXJuIC0xO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgcmV0dXJuIGxvY2FsUnVsZS52ZXJzaW9uO1xcbiAgICB9XFxufVxcbiQuZXhwb3J0cy5jb2xvciA9IGZ1bmN0aW9uKHRleHQsIGNvbG9yKSB7XFxuICAgIHRleHQgKz0gXFxcIlxcXCI7XFxuICAgIGlmICh0ZXh0LmluZGV4T2YoXFxcIuKAnOKAnOKAneKAnVxcXCIpID09PSAwKSB7XFxuICAgICAgICB0ZXh0LnJlcGxhY2UoXFxcIuKAnOKAnOKAneKAnVxcXCIsIFxcXCJcXFwiKTtcXG4gICAgfVxcbiAgICByZXR1cm4gXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSdcXFwiICsgY29sb3IgKyBcXFwiJz5cXFwiICsgdGV4dCArIFxcXCI8L2ZvbnQ+XFxcIjtcXG59XFxuXFxuZnVuY3Rpb24gaHRtbFRhZyh0YWcsIHRleHQpIHtcXG4gICAgdGV4dCArPSBcXFwiXFxcIjtcXG4gICAgaWYgKHRleHQuaW5kZXhPZihcXFwi4oCc4oCc4oCd4oCdXFxcIikgPT09IDApIHtcXG4gICAgICAgIHRleHQucmVwbGFjZShcXFwi4oCc4oCc4oCd4oCdXFxcIiwgXFxcIlxcXCIpO1xcbiAgICB9XFxuICAgIHJldHVybiBcXFwi4oCc4oCc4oCd4oCdXFxcIiArIFxcXCI8XFxcIiArIHRhZyArIFxcXCI+XFxcIiArIHRleHQgKyBcXFwiPC9cXFwiICsgdGFnICsgXFxcIj5cXFwiO1xcblxcbn1cXG5cXG5mdW5jdGlvbiBnZXROb3dGb3JtYXREYXRlKCkge1xcbiAgICAgICAgICAgIGxldCBkYXRlID0gbmV3IERhdGUoKTtcXG4gICAgICAgICAgICBsZXQgc2VwZXJhdG9yMSA9IFxcXCItXFxcIjtcXG4gICAgICAgICAgICBsZXQgc2VwZXJhdG9yMiA9IFxcXCI6XFxcIjtcXG4gICAgICAgICAgICBsZXQgbW9udGggPSBkYXRlLmdldE1vbnRoKCkgKyAxO1xcbiAgICAgICAgICAgIGxldCBzdHJEYXRlID0gZGF0ZS5nZXREYXRlKCk7XFxuICAgICAgICAgICAgbGV0IHN0ckhvdXJzID0gZGF0ZS5nZXRIb3VycygpO1xcbiAgICAgICAgICAgIGxldCBzdHJNaW51dGVzID0gZGF0ZS5nZXRNaW51dGVzKCk7XFxuICAgICAgICAgICAgbGV0IHN0clNlY29uZHMgPSBkYXRlLmdldFNlY29uZHMoKSsxO1xcbiAgICAgICAgICAgIGlmIChtb250aCA+PSAxICYmIG1vbnRoIDw9IDkpIHtcXG4gICAgICAgICAgICAgICAgbW9udGggPSBcXFwiMFxcXCIgKyBtb250aFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAoc3RyRGF0ZSA+PSAwICYmIHN0ckRhdGUgPD0gOSkge1xcbiAgICAgICAgICAgICAgICBzdHJEYXRlID0gXFxcIjBcXFwiICsgc3RyRGF0ZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAoc3RySG91cnMgPj0gMCAmJiBzdHJIb3VycyA8PSA5KSB7XFxuICAgICAgICAgICAgICAgIHN0ckhvdXJzID0gXFxcIjBcXFwiICsgc3RySG91cnNcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHN0ck1pbnV0ZXMgPj0gMCAmJiBzdHJNaW51dGVzIDw9IDkpIHtcXG4gICAgICAgICAgICAgICAgc3RyTWludXRlcyA9IFxcXCIwXFxcIiArIHN0ck1pbnV0ZXNcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHN0clNlY29uZHMgPj0gMCAmJiBzdHJTZWNvbmRzIDw9IDkpIHtcXG4gICAgICAgICAgICAgICAgc3RyU2Vjb25kcyA9IFxcXCIwXFxcIiArIHN0clNlY29uZHNcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgLy9sZXQgY3VycmVudGRhdGUgPSBkYXRlLmdldEZ1bGxZZWFyKCkgKyBzZXBlcmF0b3IxICsgbW9udGggKyBzZXBlcmF0b3IxICsgc3RyRGF0ZSArIFxcXCIgXFxcIiArIHN0ckhvdXJzICsgc2VwZXJhdG9yMiArIHN0ck1pbnV0ZXMgKyBzZXBlcmF0b3IyICsgc3RyU2Vjb25kcztcXG4gICAgICAgICAgICBsZXQgY3VycmVudGRhdGUgPSAoZGF0ZS5nZXRGdWxsWWVhcigpLTIwMjApKycnKyBtb250aCArJycrIHN0ckRhdGUgKycnKyBzdHJIb3VycysnJyArIHN0ck1pbnV0ZXMgKycnKyBNYXRoLmNlaWwoc3RyU2Vjb25kcy83KTtcXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQoY3VycmVudGRhdGUpXFxuICAgICAgICB9XFxuJC5leHBvcnRzLmdldE5vd0Zvcm1hdERhdGUgPSBnZXROb3dGb3JtYXREYXRlO1xcbiQuZXhwb3J0cy5odG1sVGFnID0gaHRtbFRhZztcXG4kLmV4cG9ydHMuc21hbGwgPSBmdW5jdGlvbih0ZXh0KSB7XFxuICAgIHJldHVybiBodG1sVGFnKFxcXCJzbWFsbFxcXCIsIHRleHQpO1xcbn1cXG4kLmV4cG9ydHMuZ2V0RmlsZSA9IGZ1bmN0aW9uKCkge1xcbiAgICB2YXIgRmlsZSA9IHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvV2FyZWhvdXNlVVNFUi5qc29uXFxcIikgfHwgXFxcInt9XFxcIjtcXG4gICAgdHJ5IHtcXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKEZpbGUpO1xcbiAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICB3cml0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMvV2FyZWhvdXNlVVNFUi5qc29uXFxcIiwgXFxcInt9XFxcIik7XFxuICAgICAgICByZXR1cm4ge307XFxuICAgIH1cXG59XFxuJC5leHBvcnRzLmdldFVzZXJEYXRlID1mdW5jdGlvbigpe1xcbiAgICB2YXIgRmlsZSA9IHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvV2FyZWhvdXNlVVNFUkEuanNvblxcXCIpIHx8IFxcXCJbXVxcXCI7XFxuICAgIHRyeSB7XFxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShGaWxlKTtcXG4gICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgd3JpdGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL1dhcmVob3VzZVVTRVJBLmpzb25cXFwiLCBcXFwiW11cXFwiKTtcXG4gICAgICAgIHJldHVybiBbXTtcXG4gICAgfVxcbn1cXG4kLmV4cG9ydHMuZXhpc3RGaWxlID0gZnVuY3Rpb24oc3BhdGgsIGlwYXRoLCBoZWFkZXJzKSB7XFxuICAgIGxldCBzY29kZSA9IHJlcXVlc3Qoc3BhdGgpO1xcbiAgICBpZiAoIXNjb2RlKSB7XFxuICAgICAgICB3cml0ZUZpbGUoc3BhdGgsIHJlcXVlc3QoaXBhdGgsIGhlYWRlcnMpKTtcXG4gICAgfVxcbn1cXG5cXG5sZXQgbmV3QXBpID0ge1xcbiAgICBcXFwiZGlzX25ld1xcXCI6IFxcXCIvaGlrZXJ1bGUvbmV3X3J1bGVfZGlzY3Vzcy9cXFwiLFxcbiAgICBcXFwiZGlzX3ZlcmlmeVxcXCI6IFxcXCIvaGlrZXJ1bGUvcnVsZV9kaXNjdXNzL2dldF95em1cXFwiLFxcbiAgICBcXFwiZGlzX2dldFxcXCI6IFxcXCIvaGlrZXJ1bGUvcnVsZV9kaXNjdXNzL1xcXCIsXFxuICAgIFxcXCJkaXNfc2V0XFxcIjogXFxcIi9oaWtlcnVsZS9tb2RpZnkvY2FuX2Rpc2N1c3MvXFxcIixcXG4gICAgXFxcImRpc19uZXdfdXNlclxcXCI6IFxcXCIvaGlrZXJ1bGUvcnVsZV9kaXNjdXNzL25ld191c2VyXFxcIixcXG4gICAgXFxcImRpc19sb2dpblxcXCI6XFxcIi9oaWtlcnVsZS9ydWxlX2Rpc2N1c3MvdXNlcl9sb2dpblxcXCIsXFxuICAgIFxcXCJkaXNfZGV2X2Rpc2N1c3NcXFwiOlxcXCIvaGlrZXJ1bGUvbW9kaWZ5L2Rldl9jYW5fZGlzY3Vzc1xcXCIsXFxuICAgIFxcXCJkaXNfZGV2X2NvbnRyb2xcXFwiOlxcXCIvaGlrZXJ1bGUvcnVsZV9kaXNjdXNzL3JlbW92ZS9cXFwiLFxcbiAgICBcXFwiYWxsX3J1bGVcXFwiOlxcXCIvaGlrZXJ1bGUvZ2V0X3J1bGVzXFxcIixcXG4gICAgXFxcImRpc19nZXRfcmVwbHlcXFwiOlxcXCIvaGlrZXJ1bGUvZ2V0X3JlcGx5X3J1bGVfZGlzY3Vzc1xcXCIsXFxuICAgIFxcXCJkaXNfcmVwbHlcXFwiOlxcXCIvaGlrZXJ1bGUvZGV2X25ld19ydWxlX2Rpc2N1c3MvXFxcIixcXG59XFxuXFxuZnVuY3Rpb24gc2V0QXBpKG9iamVjdCkge1xcbiAgICBsZXQgdGFyZ2V0ID0ge307XFxuICAgIGZvciAobGV0IGtleSBpbiBvYmplY3QpIHtcXG4gICAgICAgIHRhcmdldFtrZXldPWhvc3Qrb2JqZWN0W2tleV1cXG4gICAgfVxcbiAgICByZXR1cm4gdGFyZ2V0O1xcbn1cXG5cXG4kLmV4cG9ydHMuYXBpID0gc2V0QXBpKG5ld0FwaSk7XFxuJC5leHBvcnRzLmFwaS5ob3N0PWhvc3Q7XFxuJC5leHBvcnRzLmFwaS5ob21lPWhvbWU7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLlvIDlj5HogIXnmbvlvZVcIixcInBhdGhcIjpcImRldkxvZ2luXCIsXCJydWxlXCI6XCJqczpcXG5zZXRQYWdlVGl0bGUoXFxcIuW8gOWPkeiAheeZu+W9lVxcXCIpO1xcbmNvbnN0IHtcXG4gICAgZ2V0QXBpLFxcbiAgICBodG1sVGFnLFxcbiAgICBtYXBDb2xUeXBlLFxcbiAgICBzbWFsbCxcXG5nZXRGaWxlXFxufSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3V0aWxpeVxcXCIpO1xcbnZhciBkYXRhID0gW107XFxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKCgpPT57XFxuICAgIGNsZWFyVmFyKFxcXCJXYXJlaG91c2VVc2VybmFtZVxcXCIpO1xcbiAgICBjbGVhclZhcihcXFwiV2FyZWhvdXNlUGFzc3dvcmRcXFwiKTtcXG59KSlcXG5kYXRhLnB1c2goe1xcbiAgICB0aXRsZTogJ+i0puWPtycsXFxuICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRWYXIoJ1dhcmVob3VzZVVzZXJuYW1lJywnJyksXFxuICAgICAgICB0eXBlOlxcXCJudW1iZXJcXFwiLFxcbiAgICAgICAgb25DaGFuZ2U6ICdwdXRWYXIoXFxcIldhcmVob3VzZVVzZXJuYW1lXFxcIixpbnB1dCknXFxuICAgIH1cXG59LCB7XFxuICAgIHRpdGxlOiAn5a+G56CBJyxcXG4gICAgY29sX3R5cGU6ICdpbnB1dCcsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBkZWZhdWx0VmFsdWU6IGdldFZhcignV2FyZWhvdXNlUGFzc3dvcmQnLCAnJyksXFxuICAgICAgICB0eXBlOiBcXFwicGFzc3dvcmRcXFwiLFxcbiAgICAgICAgb25DaGFuZ2U6ICdwdXRWYXIoXFxcIldhcmVob3VzZVBhc3N3b3JkXFxcIixpbnB1dCknXFxuICAgIH1cXG59KTtcXG5cXG5kYXRhLnB1c2goe1xcbiAgICB0aXRsZTpcXFwiJm5ic3A7Jm5ic3A7PGEgaHJlZj0naGlrZXI6Ly9wYWdlL1JlZ2lzdGVyJz7ms6jlhow8L2E+XFxcIixcXG4gICAgY29sX3R5cGU6XFxcInJpY2hfdGV4dFxcXCJcXG59KTtcXG5tYXBDb2xUeXBlKGRhdGEsIFxcXCJsaW5lX2JsYW5rXFxcIiwgMSk7XFxubGV0IHVzZXIgPSBnZXRGaWxlKCk7XFxuZGF0YS5wdXNoKHtcXG4gICAgdGl0bGU6IGh0bWxUYWcoXFxcImJcXFwiLCBcXFwi55m75b2VXFxcIiksXFxuICAgIHVybDogJCgpLmxhenlSdWxlKCh1cmwsIGYpPT4ge1xcbiAgICAgICAgbGV0IHVzZXJuYW1lID0gZ2V0VmFyKCdXYXJlaG91c2VVc2VybmFtZScsICcnKSxcXG4gICAgICAgICAgICBwYXNzd29yZCA9IGdldFZhcignV2FyZWhvdXNlUGFzc3dvcmQnLCAnJyk7XFxuICAgICAgICBpZih1c2VybmFtZSA9PT0gXFxcIlxcXCIgJiYgcGFzc3dvcmQgPT09XFxcIlxcXCIpe1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/otKblj7flkozlr4bnoIHkuI3og73kuLrnqbpcXFwiXFxuICAgICAgICB9XFxuICAgICAgICBsZXQgbXlVcmwgPSB1cmwgKyAnP3FxPScgKyB1c2VybmFtZSArICcmcGFzc3dvcmQ9JyArIHBhc3N3b3JkO1xcbiAgICAgICAgbGV0IGNvZGVfc3RyID0gcmVxdWVzdChteVVybCk7XFxuICAgICAgICBsZXQgY29kZSA9IEpTT04ucGFyc2UoY29kZV9zdHIpO1xcbiAgICAgICAgaWYgKGNvZGUuc3RhdHVzID09IDApIHtcXG4gICAgICAgICAgICBmLnVzZXJuYW1lPXVzZXJuYW1lO1xcbiAgICAgICAgICAgIGYucGFzc3dvcmQ9cGFzc3dvcmRcXG4gICAgICAgICAgICB3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvV2FyZWhvdXNlVVNFUi5qc29uJywgSlNPTi5zdHJpbmdpZnkoZikpO1xcbiAgICAgICAgICAgIGJhY2soKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v55m75b2V5oiQ5YqfXFxcIjtcXG4gICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/otKblj7fmiJblr4bnoIHplJnor69cXFwiO1xcbiAgICAgICAgfVxcbiAgICB9LCBnZXRBcGkoXFxcInJ1bGVzQWxsVXJsXFxcIiksdXNlciksXFxuICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG59KTtcXG5zZXRSZXN1bHQoZGF0YSk7XCJ9LHtcImNvbF90eXBlXCI6XCJpY29uXzJfcm91bmRcIixcIm5hbWVcIjpcIuW8gOWPkeiAheeuoeeQhlwiLFwicGF0aFwiOlwiZGV2TWFuYWdlXCIsXCJydWxlXCI6XCJqczpcXG5zZXRQYWdlVGl0bGUoXFxcIuinhOWImeeuoeeQhlxcXCIpO1xcbmFkZExpc3RlbmVyKCdvbkNsb3NlJywgJ2NsZWFyVmFyKFxcXCJXYXJlaG91c2UuYmFja1xcXCIsXFxcIlxcXCIpOycpO1xcbmlmIChnZXRWYXIoXFxcIldhcmVob3VzZS5iYWNrXFxcIikgPT09IFxcXCIxXFxcIikge1xcbiAgICBiYWNrKCk7XFxufVxcbmNvbnN0IHtcXG4gICAgZ2V0QXBpLFxcbiAgICBjb2xvcixcXG4gICAgc21hbGwsXFxuICAgIGdldEZpbGUsXFxuICAgIGV4aXN0RmlsZSxcXG4gICAgbWFwQ29sVHlwZSxcXG4gICAgYXBpXFxufSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3V0aWxpeVxcXCIpO1xcbmxldCB7XFxuICAgIGRldixcXG4gICAgdXNlcm5hbWUsXFxuICAgIHBhc3N3b3JkXFxufSA9IE1ZX1BBUkFNUztcXG4vL2V4aXN0RmlsZShcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9kekhvdXNlL2h0bWwv5byA5Y+R6ICF5YiG5LqrLmh0bWxcXFwiLCBcXFwiaHR0cHM6Ly9lcnAuc2N3aW5iYW8uY29tL2hpa2VydWxlL3J1bGVsaXN0Lmpzb24/aWQ9NTM5XFxcIik7XFxubGV0IHJ1bGVMaXN0ID0gSlNPTi5wYXJzZShyZXF1ZXN0KGdldEFwaShcXFwicnVsZXNBbGxVcmxcXFwiKSArICc/cXE9JyArIHVzZXJuYW1lICsgJyZwYXNzd29yZD0nICsgcGFzc3dvcmQpKS5yZXN1bHQ7XFxubGV0IE1PQklMRV9VQSA9ICdNb3ppbGxhLzUuMCAoTGludXg7IEFuZHJvaWQgNS4wOyBTTS1HOTAwUCBCdWlsZC9MUlgyMVQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS84OC4wLjQzMjQuMTQ2IE1vYmlsZSBTYWZhcmkvNTM3LjM2JztcXG5sZXQgaW5mb1NldFVybCA9IGdldEFwaShcXFwiaW5mb1NldFVybFxcXCIpO1xcbmxldCBpbmZvR2V0VXJsID0gZ2V0QXBpKFxcXCJpbmZvR2V0VXJsXFxcIikgKyB1c2VybmFtZTtcXG5sZXQgc2V0dGluZ3NHZXRVcmwgPSBnZXRBcGkoXFxcInNldHRpbmdzR2V0VXJsXFxcIikgKyB1c2VybmFtZTtcXG5wdXRNeVZhcihcXFwiZGV2X3NldF9pbmZvXFxcIiwgW3VzZXJuYW1lLCBwYXNzd29yZCwgaW5mb1NldFVybCwgTU9CSUxFX1VBLCBpbmZvR2V0VXJsXS5qb2luKFxcXCIkJFxcXCIpKTtcXG5sZXQgZGF0YSA9IFtdO1xcbmRhdGEucHVzaCh7XFxuICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPGJpZz7ku5PlupPorr7nva48L2JpZz4mbmJzcDsmbmJzcDsmbmJzcDs8c21hbGw+PHU+77yIIOS4quS6uui1hOaWmSA+77yJPC91Pjwvc21hbGw+JyxcXG4gICAgZGVzYzogJ+KAnOKAnOKAneKAneaCqOWFseaciSA8c3BhbiBzdHlsZT1cXFwiY29sb3I6ICNmZjcwMDBcXFwiPicgKyBydWxlTGlzdC5sZW5ndGggKyAnPC9zcGFuPicgKyBcXFwiIOadoeinhOWImeOAglxcXFxu54K55Ye76KeE5YiZ5Y+v6L+b6KGM5YiG5Lqr44CB5Yig6Zmk44CB5a+85YWl5pON5L2c5Y+K5p+l55yL6K+m5oOFXFxcIixcXG4gICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL1BlcnNvbmFsRGF0YSNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNcXFwiLFxcbiAgICBleHRyYTp7aWQ6ZGV2LmlkfSxcXG4gICAgY29sX3R5cGU6ICd0ZXh0XzEnXFxufSk7XFxubWFwQ29sVHlwZShkYXRhLCBcXFwibGluZVxcXCIsIDIpO1xcbmRhdGEucHVzaCh7XFxuICAgIHRpdGxlOiBzbWFsbChjb2xvcihcXFwi5pu05pS55YWs5ZGK4pyNXFxcIiwgXFxcIiMzNGIxZmZcXFwiKSksXFxuICAgIC8vIHVybDogXFxcIng1Oi8vZmlsZTovLy9zdG9yYWdlL2VtdWxhdGVkLzAvQW5kcm9pZC9kYXRhL2NvbS5leGFtcGxlLmhpa2Vydmlldy9maWxlcy9Eb2N1bWVudHMvcnVsZXMvZHpIb3VzZS9odG1sL2Rldl9pbmZvX2VkaXQuaHRtbFxcXCIsXFxuICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9kZXZJbmZvRWRpdFxcXCIsXFxuICAgIGNvbF90eXBlOiAndGV4dF8zJ1xcbn0pO1xcbmRhdGEucHVzaCh7XFxuICAgIHRpdGxlOiBzbWFsbChjb2xvcihcXFwi5pu05aSa5YiG5Lqr8J+TslxcXCIsIFxcXCIjMzRiMWZmXFxcIikpLFxcbiAgICAvL3VybDogXFxcIng1Oi8vZmlsZTovLy9zdG9yYWdlL2VtdWxhdGVkLzAvQW5kcm9pZC9kYXRhL2NvbS5leGFtcGxlLmhpa2Vydmlldy9maWxlcy9Eb2N1bWVudHMvcnVsZXMvZHpIb3VzZS9odG1sL+W8gOWPkeiAheWIhuS6qy5odG1sXFxcIixcXG4gICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL21vcmVTaGFyZVxcXCIsXFxuICAgIGNvbF90eXBlOiAndGV4dF8zJ1xcbn0pO1xcbmRhdGEucHVzaCh7XFxuICAgIHRpdGxlOiBzbWFsbChjb2xvcihcXFwi5Y2H57qn5L6d6LWW8J+TpVxcXCIsIFxcXCIjMzRiMWZmXFxcIikpLFxcbiAgICB1cmw6ICQoXFxcIuWNh+e6p+S8mumHjeaWsOS7juS7k+W6k+aLieWPluebuOWFs+eahOmdmeaAgemhtemdouWIsOacrOWcsFxcXFxu56Gu6K6k5Y2H57qn5ZCXP1xcXCIpLmNvbmZpcm0oKGhvc3QpID0+IHtcXG4gICAgICAgIHdyaXRlRmlsZShcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9kekhvdXNlL2h0bWwv5byA5Y+R6ICF5YiG5LqrLmh0bWxcXFwiLCByZXF1ZXN0KGhvc3QrJy9oaWtlcnVsZS9ydWxlbGlzdC5qc29uP2lkPTUzOScpKTtcXG4gICAgICAgIHdyaXRlRmlsZShcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9kekhvdXNlL2h0bWwvZGV2X2luZm9fZWRpdC5odG1sXFxcIiwgcmVxdWVzdChob3N0KycvaGlrZXJ1bGUvcnVsZWxpc3QuanNvbj9pZD00MDInKSk7XFxuICAgICAgICB3cml0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvZHpIb3VzZS9odG1sL2Rldl9pbmZvX2dldC5odG1sXFxcIiwgcmVxdWVzdChob3N0KycvaGlrZXJ1bGUvcnVsZWxpc3QuanNvbj9pZD00MDQnKSk7XFxuICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5bey6YeN572u5byA5Y+R6ICF5YiG5LqrLOeugOS7i+afpeeciyznroDku4vnvJbovpHnrYnpnZnmgIHmlofku7ZcXFwiO1xcbiAgICB9LGFwaS5ob3N0KSxcXG4gICAgY29sX3R5cGU6ICd0ZXh0XzMnXFxufSk7XFxubGV0IGRldlNldEJhY2s7XFxudHJ5IHtcXG4gICAgZGV2U2V0QmFjayA9IEpTT04ucGFyc2UocmVxdWVzdChzZXR0aW5nc0dldFVybCkpO1xcbn0gY2F0Y2ggKGUpIHtcXG4gICAgZGV2U2V0QmFjayA9IHt9O1xcbn1cXG5cXG5mdW5jdGlvbiBzZXRTZXR0aW5nSXRlbShiYXNpYykge1xcbiAgICBsZXQgdGVtcCA9IHtcXG4gICAgICAgIHRpdGxlOiBiYXNpYy50aXRsZSxcXG4gICAgICAgIGNvbF90eXBlOiBiYXNpYy5jb2xfdHlwZSxcXG4gICAgICAgIHVybDogJChiYXNpYy5jb25maXJtKS5jb25maXJtKCh1cmwsIG1zZykgPT4ge1xcbiAgICAgICAgICAgIGxldCBiYWNrID0gcmVxdWVzdCh1cmwpO1xcbiAgICAgICAgICAgIGxldCByZXQgPSBKU09OLnBhcnNlKGJhY2spO1xcbiAgICAgICAgICAgIGlmIChyZXQuc3RhdHVzID09IDApIHtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9cXFwiICsgbXNnWzBdO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL1xcXCIgKyBtc2dbMV0gKyBcXFwiXFxcXG5cXFwiICsgcmV0LmRldGFpbDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCBiYXNpYy51cmwsIGJhc2ljLm1zZylcXG4gICAgfTtcXG4gICAgcmV0dXJuIHRlbXA7XFxufVxcbmlmIChkZXZTZXRCYWNrLnN0YXR1cyA9PSAwKSB7XFxuICAgIGxldCBkZXZTZXR0aW5ncyA9IGRldlNldEJhY2sucmVzdWx0O1xcbiAgICBsZXQgc2hhcmUgPSB7XFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfM1xcXCJcXG4gICAgfTtcXG4gICAgaWYgKGRldlNldHRpbmdzLnNoYXJlX3B1YmxpYykge1xcbiAgICAgICAgc2hhcmUudGl0bGUgPSBzbWFsbChjb2xvcihcXFwi5YWs5byA5LiK5LygXFxcIiwgXFxcImdyZWVuXFxcIikgKyBjb2xvcihcXFwiKOengeiXjylcXFwiLCBcXFwiIzAwYmZmZlxcXCIpKTtcXG4gICAgICAgIHNoYXJlLnVybCA9IGdldEFwaShcXFwiZ3VwbG9hZFxcXCIpICsgXFxcIj9xcT1cXFwiICsgdXNlcm5hbWUgKyBcXFwiJnBhc3N3b3JkPVxcXCIgKyBwYXNzd29yZCArIFxcXCImZmxhZz0xXFxcIjtcXG4gICAgICAgIHNoYXJlLmNvbmZpcm0gPSBcXFwi5piv5ZCm56Gu6K6k56eB6JeP5Lul5ZCO5o+Q5Lqk55qE6KeE5YiZP1xcXCI7XFxuICAgICAgICBzaGFyZS5tc2cgPSBbXFxcIuW3suengeiXj1xcXCIsIFxcXCLnp4Hol4/lpLHotKVcXFwiXTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHNoYXJlLnRpdGxlID0gc21hbGwoY29sb3IoXFxcIuengeWvhuS4iuS8oFxcXCIsIFxcXCJyZWRcXFwiKSArIGNvbG9yKFxcXCIo5YWs5byAKVxcXCIsIFxcXCIjYWRmZjJmXFxcIikpO1xcbiAgICAgICAgc2hhcmUudXJsID0gZ2V0QXBpKFxcXCJndXBsb2FkXFxcIikgKyBcXFwiP3FxPVxcXCIgKyB1c2VybmFtZSArIFxcXCImcGFzc3dvcmQ9XFxcIiArIHBhc3N3b3JkO1xcbiAgICAgICAgc2hhcmUuY29uZmlybSA9IFxcXCLmmK/lkKbnoa7orqTlhazlvIDku6XlkI7mj5DkuqTnmoTop4TliJk/XFxcIjtcXG4gICAgICAgIHNoYXJlLm1zZyA9IFtcXFwi5bey5YWs5byAXFxcIiwgXFxcIuWFrOW8gOWksei0pVxcXCJdO1xcbiAgICB9XFxuICAgIGRhdGEucHVzaChzZXRTZXR0aW5nSXRlbShzaGFyZSkpO1xcbiAgICBsZXQgdGltZU92ZXIgPSB7XFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfM1xcXCJcXG4gICAgfTtcXG4gICAgaWYgKGRldlNldHRpbmdzLnRpbWVfb3Zlcikge1xcbiAgICAgICAgdGltZU92ZXIudGl0bGUgPSBzbWFsbChjb2xvcihcXFwi55+t5pe256eY6ZKlXFxcIiwgXFxcImdyZWVuXFxcIikgKyBjb2xvcihcXFwiKOawuOS5hSlcXFwiLCBcXFwiIzAwYmZmZlxcXCIpKTtcXG4gICAgICAgIHRpbWVPdmVyLnVybCA9IGdldEFwaShcXFwiZ3RpbWVvdmVyXFxcIikgKyBcXFwiP3FxPVxcXCIgKyB1c2VybmFtZSArIFxcXCImcGFzc3dvcmQ9XFxcIiArIHBhc3N3b3JkICsgXFxcIiZmbGFnPTFcXFwiO1xcbiAgICAgICAgdGltZU92ZXIuY29uZmlybSA9IFxcXCLmmK/lkKbnoa7orqTku6XlkI7nmoTnp4Hol4/op4TliJnliIbkuqvkuI3ov4fmnJ8/XFxcIjtcXG4gICAgICAgIHRpbWVPdmVyLm1zZyA9IFtcXFwi5bey6K6+5Li65rC45LmFXFxcIiwgXFxcIuiuvuS4uuawuOS5heWksei0pVxcXCJdO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgdGltZU92ZXIudGl0bGUgPSBzbWFsbChjb2xvcihcXFwi5rC45LmF56eY6ZKlXFxcIiwgXFxcInJlZFxcXCIpICsgY29sb3IoXFxcIijov4fmnJ8pXFxcIiwgXFxcIiNhZGZmMmZcXFwiKSk7XFxuICAgICAgICB0aW1lT3Zlci51cmwgPSBnZXRBcGkoXFxcImd0aW1lb3ZlclxcXCIpICsgXFxcIj9xcT1cXFwiICsgdXNlcm5hbWUgKyBcXFwiJnBhc3N3b3JkPVxcXCIgKyBwYXNzd29yZDtcXG4gICAgICAgIHRpbWVPdmVyLmNvbmZpcm0gPSBcXFwi56Gu6K6k6KaB5Lul5ZCO5YiG5Lqr55qE56eB6JeP6KeE5YiZ6Ieq5Yqo5Yiw5pyfP1xcXCI7XFxuICAgICAgICB0aW1lT3Zlci5tc2cgPSBbXFxcIuW3suiuvuS4uui/h+acn1xcXCIsIFxcXCLorr7kuLrov4fmnJ/lpLHotKVcXFwiXTtcXG4gICAgfVxcbiAgICBkYXRhLnB1c2goc2V0U2V0dGluZ0l0ZW0odGltZU92ZXIpKTtcXG4gICAgbGV0IGRpc2N1c3MgPSB7XFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfM1xcXCJcXG4gICAgfTtcXG4gICAgaWYgKGRldlNldHRpbmdzLmNhbl9kaXNjdXNzKSB7XFxuICAgICAgICBkaXNjdXNzLnRpdGxlID0gc21hbGwoY29sb3IoXFxcIuWFgeiuuOivhOiuulxcXCIsIFxcXCJyZWRcXFwiKSArIGNvbG9yKFxcXCIo5LiN6K64KVxcXCIsIFxcXCIjYWRmZjJmXFxcIikpO1xcbiAgICAgICAgZGlzY3Vzcy51cmwgPSBhcGkuZGlzX2Rldl9kaXNjdXNzICsgXFxcIj9xcT1cXFwiICsgdXNlcm5hbWUgKyBcXFwiJnBhc3N3b3JkPVxcXCIgKyBwYXNzd29yZCsgXFxcIiZmbGFnPTFcXFwiO1xcbiAgICAgICAgZGlzY3Vzcy5jb25maXJtID0gXFxcIuaYr+WQpuehruiupOS7peWQjuS4iuS8oOeahOinhOWImeWFgeiuuOivhOiuuj9cXFwiO1xcbiAgICAgICAgZGlzY3Vzcy5tc2cgPSBbXFxcIuW3suiuvuS4uuS4jeiuuFxcXCIsIFxcXCLorr7nva7lpLHotKVcXFwiXTtcXG5cXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGRpc2N1c3MudGl0bGUgPSBzbWFsbChjb2xvcihcXFwi5LiN6K646K+E6K66XFxcIiwgXFxcImdyZWVuXFxcIikgKyBjb2xvcihcXFwiKOWFgeiuuClcXFwiLCBcXFwiIzAwYmZmZlxcXCIpKTtcXG4gICAgICAgIGRpc2N1c3MudXJsID0gYXBpLmRpc19kZXZfZGlzY3VzcyArIFxcXCI/cXE9XFxcIiArIHVzZXJuYW1lICsgXFxcIiZwYXNzd29yZD1cXFwiICsgcGFzc3dvcmQ7XFxuICAgICAgICBkaXNjdXNzLmNvbmZpcm0gPSBcXFwi5piv5ZCm56Gu6K6k5Lul5ZCO5LiK5Lyg55qE6KeE5YiZ5YWB6K646K+E6K66P1xcXCI7XFxuICAgICAgICBkaXNjdXNzLm1zZyA9IFtcXFwi5bey6K6+5Li65YWB6K64XFxcIiwgXFxcIuiuvue9ruWksei0pVxcXCJdO1xcbiAgICB9XFxuICAgIGRhdGEucHVzaChzZXRTZXR0aW5nSXRlbShkaXNjdXNzKSk7XFxufVxcbm1hcENvbFR5cGUoZGF0YSwgXFxcImxpbmVcXFwiLCAyKTtcXG5mb3IgKGxldCBpdGVtIG9mIHJ1bGVMaXN0KSB7XFxuICAgIGxldCBteV90X2V4Y29kZTEgPSAnJztcXG4gICAgbGV0IG15X3RfZXhjb2RlMiA9ICcnO1xcbiAgICBpZiAoaXRlbS5zdGF0ZSAhPSAncHVibGljJykge1xcbiAgICAgICAgbXlfdF9leGNvZGUxICs9ICfjipnvuI8nO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgbXlfdF9leGNvZGUxICs9ICcnO1xcbiAgICB9XFxuICAgIGRhdGEucHVzaCh7XFxuICAgICAgICB0aXRsZTogbXlfdF9leGNvZGUxICsgaXRlbS5uYW1lICsgbXlfdF9leGNvZGUyLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL21hbmFnZVJ1bGUjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXFxuICAgICAgICAgICAgdXNlcm5hbWU6IHVzZXJuYW1lLFxcbiAgICAgICAgICAgIHBhc3N3b3JkOiBwYXNzd29yZFxcbiAgICAgICAgfSxcXG4gICAgICAgIHBpY191cmw6IGl0ZW0ucGljLFxcbiAgICB9KVxcbn1cXG5pZiAocnVsZUxpc3QubGVuZ3RoID09PSAwKSB7XFxuICAgIGRhdGEucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIjxoNSBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPuW/q+adpeS4iuS8oOS9oOeahOesrOS4gOadoeinhOWImeWQp++8gTwvaDU+XFxcIixcXG4gICAgICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIlxcbiAgICB9KTtcXG59XFxuc2V0UmVzdWx0KGRhdGEpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6KeE5YiZ6K+m57uGLWRldlwiLFwicGF0aFwiOlwibWFuYWdlUnVsZVwiLFwicnVsZVwiOlwianM6XFxuY29uc3Qge1xcbiAgICBnZXRBcGksXFxuICAgIGNvbG9yLFxcbiAgICBzbWFsbCxcXG4gICAgZ2V0RmlsZSxcXG4gICAgZXhpc3RGaWxlLFxcbiAgICBtYXBDb2xUeXBlLFxcbiAgICBodG1sVGFnLFxcbiAgICBhcGlcXG59ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdXRpbGl5XFxcIik7XFxubGV0IHtcXG4gICAgaWQsXFxuICAgIHVzZXJuYW1lLFxcbiAgICBwYXNzd29yZFxcbn0gPSBNWV9QQVJBTVM7XFxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbn0pKTtcXG5sZXQgZGF0YUl0ZW0gPSBKU09OLnBhcnNlKHJlcXVlc3QoZ2V0QXBpKFxcXCJnZXRieWlkXFxcIikgKyBcXFwiP2lkPVxcXCIgKyBpZCkpLnJlc3VsdDtcXG5zZXRQYWdlVGl0bGUoXFxcIue8lui+keOAjFxcXCIgKyBkYXRhSXRlbS5uYW1lICsgXFxcIuOAjVxcXCIpO1xcbmxldCByZXFCeUdldCA9IFxcXCI/aWQ9XFxcIiArIGRhdGFJdGVtLmlkICsgXFxcIiZxcT1cXFwiICsgdXNlcm5hbWUgKyBcXFwiJnBhc3N3b3JkPVxcXCIgKyBwYXNzd29yZDtcXG5sZXQgcnVsZUxpc3RKc29uID0gZ2V0QXBpKFxcXCJydWxlTGlzdEpzb25cXFwiKSArIFxcXCI/aWQ9XFxcIjtcXG5sZXQgZGF0YSA9IFtdO1xcbmRhdGEucHVzaCh7XFxuICAgIHRpdGxlOiBodG1sVGFnKFxcXCJiaWdcXFwiLCBcXFwi54mI5pysXFxcIiksXFxuICAgIGRlc2M6IFxcXCLigJzigJzigJ3igJ3kupHnq6/niYjmnKw6XFxcIiArIGNvbG9yKGRhdGFJdGVtLnZlciwgXFxcIiM1Y2ZmMmNcXFwiKSArIFxcXCJcXFxcbuS4iuasoeaPkOS6pOS6jjogW1xcXCIgKyBjb2xvcihkYXRhSXRlbS5sYXN0X3VwZGF0ZSwgXFxcIiNmZjcwMDBcXFwiKSArIFxcXCJdXFxcIixcXG4gICAgdXJsOiAkKFxcXCI85byA5Y+R6ICFPlxcXFxuXFxcIiArIGRhdGFJdGVtLmF1dGhvciArIFxcXCJcXFxcbjzlkI3np7A+XFxcXG5cXFwiICsgZGF0YUl0ZW0ubmFtZSArIFxcXCJcXFxcbjzkupHnq6/niYjmnKw+XFxcXG5cXFwiICsgZGF0YUl0ZW0udmVyICsgXFxcIlxcXFxuPOabtOaWsOaXtumXtD5cXFxcbltcXFwiICsgZGF0YUl0ZW0ubGFzdF91cGRhdGUgKyBcXFwiXVxcXCIpLmNvbmZpcm0oKCkgPT4ge30pLFxcbiAgICBjb2xfdHlwZTogJ3RleHRfMSdcXG59KTtcXG5sZXQgZGF0YVR5cGUgPSB7XFxuICAgIGhvbWVfcnVsZV91cmw6ICfpppbpobXkupHop4TliJknLFxcbiAgICBwdWJsaXNoOiAn5o+Q5Lqk5LqR5LuT5bqT6KeE5YiZJyxcXG4gICAganNfdXJsOiAn572R6aG15o+S5Lu26KeE5YiZJyxcXG4gICAgaHRtbDogJ+mdmeaAgemhtemdoicsXFxuICAgIGNvbmZpZzogJ+S4u+mhtemFjee9ridcXG59O1xcblxcbmxldCBiYXNpYyA9IHtcXG4gICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzFcXFwiLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbn07XFxubGV0IGRhdGFUeXBlVGlwcyA9IGRhdGFUeXBlW2RhdGFJdGVtLmRhdGFfdHlwZV0gfHwgJ+acquefpeinhOWImTonICsgZGF0YUl0ZW0uZGF0YV90eXBlO1xcblxcbmJhc2ljLnRpdGxlID0gaHRtbFRhZyhcXFwiYmlnXFxcIiwgXFxcIuexu+Wei1xcXCIpICsgXFxcIlxcXFx0XFxcXHRcXFxcdFxcXCIgKyBzbWFsbChcXFwiKGlkOlxcXCIgKyBkYXRhSXRlbS5pZCArIFxcXCIpXFxcIik7XFxuYmFzaWMuZGVzYyA9IFxcXCLmlbDmja7nsbvlnovvvJpcXFwiICsgY29sb3IoZGF0YVR5cGVUaXBzLCBcXFwiI2NiNTRmZlxcXCIpICsgXFxcIlxcXFxu5YiG5Lqr54q25oCB5Li677yaXFxcIiArIGRhdGFJdGVtLnN0YXRlO1xcbmlmIChbXFxcImh0bWxcXFwiLCBcXFwiY29uZmlnXFxcIiwgXFxcImpzX3VybFxcXCJdLmluY2x1ZGVzKGRhdGFJdGVtLmRhdGFfdHlwZSkpIHtcXG4gICAgYmFzaWMuZGVzYyArPSBcXFwiXFxcXG7igJzigJzigJ3igJ0gPT5cXFwiICsgc21hbGwoXFxcIueCueatpOmihOiniFxcXCIpO1xcbiAgICBiYXNpYy51cmwgPSBydWxlTGlzdEpzb24gKyBkYXRhSXRlbS5pZDtcXG59XFxubGV0IGF1dGggPSBcXFwiXFxcIjtcXG5pZiAoZGF0YUl0ZW0uc3RhdGUgPT0gXFxcInByaXZhdGVcXFwiKSB7XFxuICAgIGxldCBhdXRoX2JhY2sgPSBKU09OLnBhcnNlKHJlcXVlc3QoZ2V0QXBpKFxcXCJhdXRoXFxcIikgKyByZXFCeUdldCkpO1xcbiAgICBiYXNpYy50aXRsZSA9IGJhc2ljLnRpdGxlICsgXFxcIlxcXFxuXFxcIiArIHNtYWxsKGNvbG9yKGF1dGhfYmFjay5yZXN1bHQsIFxcXCJncmV5XFxcIikpO1xcbiAgICBhdXRoID0gJyZhdXRoPScgKyBhdXRoX2JhY2sucmVzdWx0O1xcbiAgICBiYXNpYy51cmwgPSBiYXNpYy51cmwgPT09IFxcXCJoaWtlcjovL2VtcHR5XFxcIiA/IGJhc2ljLnVybCA6IGJhc2ljLnVybCArIGF1dGg7XFxufVxcbmRhdGEucHVzaChiYXNpYyk7XFxuZGF0YS5wdXNoKHtcXG4gICAgdGl0bGU6IGh0bWxUYWcoXFxcImJpZ1xcXCIsIFxcXCLmk43kvZxcXFwiKSxcXG4gICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzFcXFwiLFxcbiAgICB1cmw6IFxcXCJ0b2FzdDovL+S9oOaJjeaYr+acgOW4heeahOmCo+S4quS6uu+8gVxcXCJcXG59KTtcXG5sZXQgaW1wb3J0VXJsLCBydWxlQ29kZSwgc2hhcmVVcmwsIGJhY2tDb2RlID0gXFxcIlxcXCI7XFxuaWYgKCFkYXRhSXRlbS5pc19qc29uKSB7XFxuICAgIGJhY2tDb2RlID0gcmVxdWVzdChydWxlTGlzdEpzb24gKyBkYXRhSXRlbS5pZCArIGF1dGgpO1xcbn1cXG5zd2l0Y2ggKGRhdGFJdGVtLmRhdGFfdHlwZSkge1xcbiAgICBjYXNlIFxcXCJob21lX3J1bGVfdXJsXFxcIjpcXG4gICAgICAgIHJ1bGVDb2RlID0gXFxcIua1t+mYlOinhueVjOmmlumhtemikemBk+inhOWImeOAkFxcXCIgKyBkYXRhSXRlbS5uYW1lICsgXFxcIuOAke+/pWhvbWVfcnVsZV91cmzvv6VcXFwiICsgcnVsZUxpc3RKc29uICsgZGF0YUl0ZW0uaWQgKyBhdXRoO1xcbiAgICAgICAgaW1wb3J0VXJsID0gXFxcInJ1bGU6Ly9cXFwiICsgYmFzZTY0RW5jb2RlKHJ1bGVDb2RlKVxcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ3B1Ymxpc2gnOlxcbiAgICAgICAgcnVsZUNvZGUgPSAn5rW36ZiU6KeG55WM6KeE5YiZ5YiG5Lqr77yM5b2T5YmN5YiG5Lqr55qE5piv77yaJyArIGRhdGFJdGVtLm5hbWUgKyAn77+lcHVibGlzaO+/pScgKyBiYXNlNjRFbmNvZGUoYmFja0NvZGUpO1xcbiAgICAgICAgaW1wb3J0VXJsID0gJ3J1bGU6Ly8nICsgYmFzZTY0RW5jb2RlKHJ1bGVDb2RlKTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICdqc191cmwnOlxcbiAgICAgICAgcnVsZUNvZGUgPSAn5rW36ZiU6KeG55WM6KeE5YiZ5YiG5Lqr77yM5b2T5YmN5YiG5Lqr55qE5piv77ya572R6aG15o+S5Lu277+lanNfdXJs77+lJyArIGRhdGFJdGVtLm5hbWUgKyAnQGJhc2U2NDovLycgKyBiYXNlNjRFbmNvZGUoYmFja0NvZGUpO1xcbiAgICAgICAgaW1wb3J0VXJsID0gJ3J1bGU6Ly8nICsgYmFzZTY0RW5jb2RlKHJ1bGVDb2RlKTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICdodG1sJzpcXG4gICAgICAgIGxldCBmaWxlX3RtcCA9IGRhdGFJdGVtLm5hbWUuc3BsaXQoJy4nKTtcXG4gICAgICAgIGxldCBmaWxlX3BhdGggPSBmaWxlX3RtcC5sZW5ndGggPiAxID8gZmlsZV90bXBbZmlsZV90bXAubGVuZ3RoIC0gMV0gKyBcXFwiL1xcXCIgKyBkYXRhSXRlbS5uYW1lIDogZGF0YUl0ZW0ubmFtZTtcXG4gICAgICAgIHJ1bGVDb2RlID0gXFxcIua1t+mYlOinhueVjOacrOWcsOaWh+S7tuWIhuS6q++/pWZpbGVfdXJs77+laGlrZXI6Ly9maWxlcy9ydWxlcy9kekhvdXNlL1xcXCIgKyBmaWxlX3BhdGggKyBcXFwiQFxcXCIgKyBydWxlTGlzdEpzb24gKyBkYXRhSXRlbS5pZCArIGF1dGg7XFxuICAgICAgICBpbXBvcnRVcmwgPSAncnVsZTovLycgKyBiYXNlNjRFbmNvZGUocnVsZUNvZGUpO1xcbiAgICAgICAgYnJlYWtcXG4gICAgY2FzZSBcXFwiY29uZmlnXFxcIjpcXG4gICAgICAgIGltcG9ydFVybCA9ICQoKS5ydWxlKHBhc3N3b3JkID0+IHtcXG4gICAgICAgICAgICBldmFsKGZldGNoKFxcXCJoaWtlcjovL2Fzc2V0cy9ob21lLmpzXFxcIikpO1xcbiAgICAgICAgICAgIEhpa2VySG9tZS5sb2FkKFxcXCJpbXBvcnRcXFwiLCBwYXNzd29yZCk7XFxuICAgICAgICB9LCBiYWNrQ29kZSk7XFxuICAgICAgICBicmVhaztcXG59XFxubGV0IG15X2NvbF90eXBlID0gXFxcInRleHRfMlxcXCI7XFxuaWYgKGltcG9ydFVybCkge1xcbiAgICBkYXRhLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLlr7zlhaXop4TliJlcXFwiLFxcbiAgICAgICAgdXJsOiBpbXBvcnRVcmwsXFxuICAgICAgICBjb2xfdHlwZTogbXlfY29sX3R5cGVcXG4gICAgfSk7XFxufVxcbmlmIChydWxlQ29kZSkge1xcbiAgICBkYXRhLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLliIbkuqvop4TliJlcXFwiLFxcbiAgICAgICAgdXJsOiBcXFwiY29weTovL1xcXCIgKyBydWxlQ29kZSxcXG4gICAgICAgIGNvbF90eXBlOiBteV9jb2xfdHlwZVxcbiAgICB9KTtcXG59XFxuXFxuZnVuY3Rpb24gc2V0U2V0dGluZ0l0ZW0oYmFzaWMsIHBhdHRlcm4pIHtcXG4gICAgbGV0IHRlbXAgPSB7XFxuICAgICAgICB0aXRsZTogYmFzaWMudGl0bGUsXFxuICAgICAgICBjb2xfdHlwZTogYmFzaWMuY29sX3R5cGUsXFxuICAgICAgICB1cmw6ICQoYmFzaWMuY29uZmlybSkuY29uZmlybSgodXJsLCBtc2csIHBhdHRlcm4pID0+IHtcXG4gICAgICAgICAgICBsZXQgYmFja0EgPSByZXF1ZXN0KHVybCk7XFxuICAgICAgICAgICAgbGV0IHJldCA9IEpTT04ucGFyc2UoYmFja0EpO1xcbiAgICAgICAgICAgIGlmIChyZXQuc3RhdHVzID09IDApIHtcXG4gICAgICAgICAgICAgICAgcGF0dGVybiA/IGJhY2soKSA6IHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL1xcXCIgKyBtc2dbMF07XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcGF0dGVybiA/IGJhY2soKSA6IHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL1xcXCIgKyBtc2dbMV0gKyBcXFwiXFxcXG5cXFwiICsgcmV0LmRldGFpbDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCBiYXNpYy51cmwsIGJhc2ljLm1zZywgcGF0dGVybilcXG4gICAgfTtcXG4gICAgcmV0dXJuIHRlbXA7XFxufVxcbmlmIChkYXRhSXRlbS5zdGF0ZSA9PSAncHJpdmF0ZScpIHtcXG4gICAgZGF0YS5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi6K6+5Li65YWs5byAXFxcIixcXG4gICAgICAgIHVybDogJChnZXRBcGkoXFxcInNoYXJlXFxcIikgKyByZXFCeUdldCArIFxcXCImZmxhZ1xcXCIgKyBcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgcmVxdWVzdChpbnB1dCk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lt7Lorr7kuLrlhazlvIBcXFwiO1xcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogbXlfY29sX3R5cGVcXG4gICAgfSwge1xcbiAgICAgICAgdGl0bGU6IFxcXCLpmo/mnLrlr4bpkqVcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IG15X2NvbF90eXBlLFxcbiAgICAgICAgdXJsOiAkKGdldEFwaShcXFwiZ2VuQXV0aFxcXCIpICsgcmVxQnlHZXQgKyBcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgbGV0IGJhY2sgPSByZXF1ZXN0KGlucHV0KTtcXG4gICAgICAgICAgICBsZXQgcmV0ID0gSlNPTi5wYXJzZShiYWNrKTtcXG4gICAgICAgICAgICBpZiAocmV0LnN0YXR1cyA9PSAwKSB7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+W3sueUn+aIkOmaj+acuuWvhueggVxcXFxuXFxcIiArIHJldC5yZXN1bHRcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+maj+acuuWvhueggeeUn+aIkOWksei0pVxcXCJcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiAgICB9KTtcXG4gICAgbGV0IHRpbWVPdmVyID0ge1xcbiAgICAgICAgY29sX3R5cGU6IG15X2NvbF90eXBlXFxuICAgIH07XFxuICAgIGlmIChkYXRhSXRlbS50aW1lX292ZXIpIHtcXG4gICAgICAgIHRpbWVPdmVyLnRpdGxlID0gc21hbGwoY29sb3IoXFxcIuefreaXtuWvhumSpVxcXCIsIFxcXCJncmVlblxcXCIpICsgY29sb3IoXFxcIijihpLmsLjkuYUpXFxcIiwgXFxcInJlZFxcXCIpKTtcXG4gICAgICAgIHRpbWVPdmVyLnVybCA9IGdldEFwaShcXFwidGltZW92ZXJcXFwiKSArIHJlcUJ5R2V0ICsgXFxcIiZmbGFnPTFcXFwiO1xcbiAgICAgICAgdGltZU92ZXIuY29uZmlybSA9IFxcXCLmmK/lkKbnoa7orqTku6XlkI7nmoTnp4Hol4/op4TliJnliIbkuqvkuI3ov4fmnJ8/XFxcIjtcXG4gICAgICAgIHRpbWVPdmVyLm1zZyA9IFtcXFwi5bey6K6+5Li65rC45LmFXFxcIiwgXFxcIuiuvuS4uuawuOS5heWksei0pVxcXCJdO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgdGltZU92ZXIudGl0bGUgPSBzbWFsbChjb2xvcihcXFwi5rC45LmF5a+G6ZKlXFxcIiwgXFxcInJlZFxcXCIpICsgY29sb3IoXFxcIijihpLnn63ml7YpXFxcIiwgXFxcImdyZWVuXFxcIikpO1xcbiAgICAgICAgdGltZU92ZXIudXJsID0gZ2V0QXBpKFxcXCJ0aW1lb3ZlclxcXCIpICsgcmVxQnlHZXQ7XFxuICAgICAgICB0aW1lT3Zlci5jb25maXJtID0gXFxcIuehruiupOimgeS7peWQjuWIhuS6q+eahOengeiXj+inhOWImeiHquWKqOWIsOacnz9cXFwiO1xcbiAgICAgICAgdGltZU92ZXIubXNnID0gW1xcXCLlt7Lorr7kuLrov4fmnJ9cXFwiLCBcXFwi6K6+5Li66L+H5pyf5aSx6LSlXFxcIl07XFxuICAgIH1cXG4gICAgZGF0YS5wdXNoKHNldFNldHRpbmdJdGVtKHRpbWVPdmVyKSk7XFxufSBlbHNlIGlmIChkYXRhSXRlbS5zdGF0ZSA9PSAncHVibGljJykge1xcbiAgICBkYXRhLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLorr7kuLrnp4HmnIlcXFwiLFxcbiAgICAgICAgdXJsOiAkKGdldEFwaShcXFwic2hhcmVcXFwiKSArIHJlcUJ5R2V0ICsgXFxcIiZmbGFnPTEjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICByZXF1ZXN0KGlucHV0KTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+W3suiuvuS4uuengeaciVxcXCI7XFxuICAgICAgICB9KSxcXG4gICAgICAgIGNvbF90eXBlOiBteV9jb2xfdHlwZVxcbiAgICB9KTtcXG59XFxuZGF0YS5wdXNoKHNldFNldHRpbmdJdGVtKHtcXG4gICAgdGl0bGU6IFxcXCLliKDpmaTmlbDmja5cXFwiLFxcbiAgICBjb25maXJtOiBcXFwi5piv5ZCm56Gu6K6k5Yig6ZmkXFxcIixcXG4gICAgbXNnOiBbXFxcIuW3suWIoOmZpFxcXCIsIFxcXCLliKDpmaTlpLHotKVcXFwiXSxcXG4gICAgdXJsOiBnZXRBcGkoXFxcImRlbGV0ZVVybFxcXCIpICsgcmVxQnlHZXQsXFxuICAgIGNvbF90eXBlOiBteV9jb2xfdHlwZVxcbn0sIHRydWUpKTtcXG5kYXRhLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIuiuvue9ruWbvuagh1xcXCIsXFxuICAgIHVybDogJChkYXRhSXRlbS5waWNfdXJsLCBcXFwi6L6T5YWl5Zu+5qCH5Zyw5Z2AXFxcIikuaW5wdXQoYXBpID0+IHtcXG4gICAgICAgIGlmIChpbnB1dCA9PT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5L2g5Zyo6YCX5oiR6ZO+5o6l5ZOqP1xcXCJcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCByZXN1bHQgPSByZXF1ZXN0KGFwaSArIFxcXCImcnVsZV9waWM9XFxcIiArIGlucHV0KTtcXG4gICAgICAgIHJlc3VsdCA9IEpTT04ucGFyc2UocmVzdWx0KTtcXG4gICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAwKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL1xcXCIgKyByZXN1bHQuZGV0YWlsO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S/ruaUueaIkOWKn1xcXCI7XFxuICAgIH0sIGdldEFwaShcXFwic2V0X3J1bGVfcGljXFxcIikgKyBkYXRhSXRlbS5pZCArIHJlcUJ5R2V0KSxcXG4gICAgY29sX3R5cGU6IG15X2NvbF90eXBlXFxufSk7XFxuXFxuZGF0YS5wdXNoKHtcXG4gICAgdGl0bGU6IGRhdGFJdGVtLmNhbl9kaXNjdXNzID8gXFxcIuemgeatouivhOiuulxcXCIgOiBcXFwi5byA5ZCv6K+E6K66XFxcIixcXG4gICAgdXJsOiAkKGFwaS5kaXNfc2V0ICsgZGF0YUl0ZW0uaWQgKyByZXFCeUdldCArIFxcXCImc3RhdGU9XFxcIiArIChkYXRhSXRlbS5jYW5fZGlzY3VzcyA/IFxcXCJcXFwiIDogMSkpLmxhenlSdWxlKChjYW5fZGlzY3VzcykgPT4ge1xcbiAgICAgICAgcmVxdWVzdChpbnB1dCk7XFxuICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICByZXR1cm4gY2FuX2Rpc2N1c3MgPyBcXFwidG9hc3Q6Ly/lt7LnpoHmraLor4TorrpcXFwiIDogXFxcInRvYXN0Oi8v5bey5byA5ZCv6K+E6K66XFxcIjtcXG4gICAgfSwgZGF0YUl0ZW0uY2FuX2Rpc2N1c3MpLFxcbiAgICBjb2xfdHlwZTogbXlfY29sX3R5cGVcXG59KTtcXG5NWV9QQVJBTVMubmFtZSA9IGRhdGFJdGVtLm5hbWU7XFxuZGF0YS5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCLorr7nva7lpIfms6hcXFwiLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2Uvc2V0X3J1bGVfbm90ZXNcXFwiLFxcbiAgICBleHRyYTogTVlfUEFSQU1TLFxcbiAgICBjb2xfdHlwZTogbXlfY29sX3R5cGVcXG59KTtcXG5pZiAoZGF0YUl0ZW0uaXNfanNvbiAmJiBkYXRhSXRlbS5kYXRhX3R5cGUgPT09IFxcXCJob21lX3J1bGVfdXJsXFxcIiAmJiAhZGF0YUl0ZW0uaXNfanNvbl9saXN0KSB7XFxuICAgIGRhdGEucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+i/m+WFpemikemBkycsXFxuICAgICAgICB1cmw6ICQoIC8qXFxcIiNub0xvYWRpbmcjXFxcIiovICkubGF6eVJ1bGUoKG5hbWUsaG9tZSkgPT4ge1xcbiAgICAgICAgICAgIGxldCBydWxlTGlzdCA9IEpTT04ucGFyc2UocmVxdWVzdChob21lKSk7XFxuICAgICAgICAgICAgbGV0IGhhc1J1bGUgPSBydWxlTGlzdC5zb21lKGl0ZW0gPT4gaXRlbS50aXRsZSA9PT0gbmFtZSk7XFxuICAgICAgICAgICAgaWYgKGhhc1J1bGUpIHtcXG4gICAgICAgICAgICAgICAgcHV0VmFyKFxcXCJXYXJlaG91c2UuYmFja1xcXCIsIFxcXCIxXFxcIik7XFxuICAgICAgICAgICAgICAgIGJhY2soKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvbWUrXFxcInNAXFxcIiArIG5hbWU7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+acquWuieijhVxcXCI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwgZGF0YUl0ZW0ubmFtZSxhcGkuaG9tZSksXFxuICAgICAgICBjb2xfdHlwZTogbXlfY29sX3R5cGVcXG4gICAgfSk7XFxufVxcbmRhdGEucHVzaCh7XFxuICAgIGNvbF90eXBlOiBcXFwibGluZV9ibGFua1xcXCJcXG59KTtcXG5kYXRhLnB1c2goe1xcbiAgICB0aXRsZTogZGF0YUl0ZW0uZ29vZF9udW0sXFxuICAgIHBpY191cmw6IFxcXCJoaWtlcjovL2ZpbGVzL2ljb24v6LWeLnN2Z1xcXCIsXFxuICAgIGNvbF90eXBlOiBcXFwiaWNvbl9zbWFsbF8zXFxcIixcXG4gICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG59KTtcXG5kYXRhLnB1c2goe1xcbiAgICB0aXRsZTogZGF0YUl0ZW0uYmFkX251bSxcXG4gICAgcGljX3VybDogXFxcImhpa2VyOi8vZmlsZXMvaWNvbi/ouKkuc3ZnXFxcIixcXG4gICAgY29sX3R5cGU6IFxcXCJpY29uX3NtYWxsXzNcXFwiLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbn0pO1xcbmRhdGEucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi6K+E6K66XFxcIixcXG4gICAgcGljX3VybDogXFxcImhpa2VyOi8vZmlsZXMvaWNvbi/or4Torrouc3ZnXFxcIixcXG4gICAgY29sX3R5cGU6IFxcXCJpY29uX3NtYWxsXzNcXFwiLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvUmVwbHkjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIHJ1bGVJZDogZGF0YUl0ZW0uaWQsXFxuICAgICAgICBuYW1lOiBkYXRhSXRlbS5hdXRob3IsXFxuICAgICAgICBwYXNzd29yZDogcGFzc3dvcmQsXFxuICAgICAgICB1c2VybmFtZTogdXNlcm5hbWVcXG4gICAgfVxcbn0pO1xcbmxldCB0b3RhbFN1bSA9IGRhdGFJdGVtLmdvb2RfbnVtICsgZGF0YUl0ZW0uYmFkX251bTtcXG5cXG5kYXRhLnB1c2goe1xcbiAgICB0aXRsZTogaHRtbFRhZyhcXFwiYmlnXFxcIiwgXFxcIuivhOiuuihcXFwiICsgdG90YWxTdW0gKyBcXFwiKVxcXCIpICsgXFxcIlxcXFx0XFxcXHRcXFxcdFxcXCIgKyBzbWFsbChodG1sVGFnKFxcXCJ1XFxcIiwgXFxcIuafpeeci+WFqOmDqOivhOiuuijmjqfor4QpID5cXFwiKSksXFxuICAgIGNvbF90eXBlOiBcXFwidGV4dF8xXFxcIixcXG4gICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL0NvbW1lbnRcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eSNmeXBhZ2Ujbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcIixcXG4gICAgICAgIGlkOiBkYXRhSXRlbS5pZCxcXG4gICAgICAgIHRvdGFsU3VtOiB0b3RhbFN1bSxcXG4gICAgICAgIG5vX2FjdGl2ZTogdHJ1ZSxcXG4gICAgICAgIHVzZXJuYW1lOiB1c2VybmFtZSxcXG4gICAgICAgIHBhc3N3b3JkOiBwYXNzd29yZFxcbiAgICB9XFxufSk7XFxuLy9jb25zdCBsb25nZXN0U3VtPTEyMDtcXG5sZXQgaWNvbiA9IHtcXG4gICAgXFxcImdvb2RcXFwiOiBcXFwi8J+RjVxcXCIsXFxuICAgIFxcXCJiYWRcXFwiOiBcXFwi8J+RjlxcXCIsXFxuICAgIFxcXCJyZXBseVxcXCI6IFxcXCLlvIDlj5HogIXwn5ejXFxcIlxcbn1cXG5pZiAodG90YWxTdW0gPT09IDApIHtcXG4gICAgZGF0YS5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwiPGg1IHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+5LiA5p2h6K+E6K665Lmf5rKh5pyJ77yM5b+r5p2l5oqi5rKZ5Y+R5ZCn77yBPC9oNT5cXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJyaWNoX3RleHRcXFwiXFxuICAgIH0pO1xcbn0gZWxzZSB7XFxuICAgIGxldCBjb21tZW50TGlzdCA9IEpTT04ucGFyc2UocmVxdWVzdChhcGkuZGlzX2dldCArIGRhdGFJdGVtLmlkICsgXFxcIj9saW1pdD01XFxcIikpLnJlc3VsdDtcXG4gICAgZm9yIChsZXQgaXRlbSBvZiBjb21tZW50TGlzdCkge1xcbiAgICAgICAgbGV0IFJlcGx5ID0gaXRlbS5kaXNjdXNzX3R5cGU9PT1cXFwicmVwbHlcXFwiJiZpdGVtLnJlcGx5X3RvX25hbWUhPT1mYWxzZSYmaXRlbS5yZXBseV90b19pZCE9PWZhbHNlP1xcXCLigJjigJjlm57lpI1AXFxcIitpdGVtLnJlcGx5X3RvX25hbWUrXFxcIiAjXFxcIitpdGVtLmRpc2N1c3NfaWQrXFxcIuKAmeKAmVxcXFxuXFxcIjpcXFwiXFxcIjtcXG4gICAgICAgIGRhdGEucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGl0ZW0ubmFtZSArIFxcXCImbmJzcDsmbmJzcDs8Zm9udCBjb2xvcj0nZ3JheSc+PHNtYWxsPiNcXFwiICsgaXRlbS5pZCArIFxcXCI8L3NtYWxsPjxmb250PlxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9SZXBseVxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgICBydWxlSWQ6IGRhdGFJdGVtLmlkLFxcbiAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWUsXFxuICAgICAgICAgICAgICAgIHBhc3N3b3JkOiBwYXNzd29yZCxcXG4gICAgICAgICAgICAgICAgdXNlcm5hbWU6IHVzZXJuYW1lLFxcbiAgICAgICAgICAgICAgICByZXBseUlkOml0ZW0uaWRcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIHBpY191cmw6IGl0ZW0uYXZhdGFyX3VybFxcbiAgICAgICAgfSk7XFxuICAgICAgICBkYXRhLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBpdGVtLmRpc2N1c3NfdGV4dCxcXG4gICAgICAgICAgICBkZXNjOiBSZXBseStpdGVtLmNyZWF0ZV9kYXRlICsgXFxcIsK3XFxcIiArIGljb25baXRlbS5kaXNjdXNzX3R5cGVdLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8xXFxcIixcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvaW5mb1xcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxcbiAgICAgICAgICAgICAgICB0eXBlOiBcXFwibG9uZ190ZXh0XFxcIixcXG4gICAgICAgICAgICAgICAgdGV4dDogaXRlbS5kaXNjdXNzX3RleHRcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIHBpY191cmw6IGl0ZW0uYXZhdGFyX3VybFxcbiAgICAgICAgfSk7XFxuICAgIH1cXG59XFxuZGF0YS5wdXNoKHtcXG4gICAgY29sX3R5cGU6IFxcXCJsaW5lX2JsYW5rXFxcIlxcbn0pO1xcbnNldFJlc3VsdChkYXRhKTtcIn0se1wiY29sX3R5cGVcIjpcImljb25fMl9yb3VuZFwiLFwibmFtZVwiOlwi6KeE5YiZ5YiX6KGoXCIsXCJwYXRoXCI6XCJydWxlc1wiLFwicnVsZVwiOlwianM6XFxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAnY2xlYXJWYXIoXFxcIldhcmVob3VzZS5iYWNrXFxcIixcXFwiXFxcIik7Y2xlYXJWYXIoXFxcIldhcmVob3VzZS5maWx0ZXJcXFwiLFxcXCJcXFwiKTtjbGVhclZhcihcXFwiV2FyZWhvdXNlLnR5cGVcXFwiLFxcXCJcXFwiKTsnKTtcXG5cXG5pZiAoZ2V0VmFyKFxcXCJXYXJlaG91c2UuYmFja1xcXCIpID09PSBcXFwiMVxcXCIpIHtcXG4gICAgYmFjayhmYWxzZSk7XFxufVxcblxcbmNvbnN0IHtcXG4gICAgZ2V0QXBpLFxcbiAgICBhcGksXFxuICAgIGNvbG9yLFxcbiAgICBzbWFsbCxcXG4gICAgbG9jYWxSdWxlVmVyLFxcbiAgICBodG1sVGFnXFxufSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3V0aWxpeVxcXCIpO1xcbmNvbnN0IHsgbWVyZ2VTb3J0IH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9zb3J0XFxcIik7XFxubGV0IHtcXG4gICAgYXZhdGFyVXJsLFxcbiAgICBxcVxcbn0gPSBNWV9QQVJBTVM7XFxubGV0IGRhdGFUeXBlID0gZ2V0VmFyKFxcXCJXYXJlaG91c2UudHlwZVxcXCIsXFxcIlxcXCIpO1xcbmxldCBiYWNrQ29kZSA9IEpTT04ucGFyc2UocmVxdWVzdChnZXRBcGkoXFxcInJ1bGVzVXJsXFxcIikgKyBcXFwiP25hbWU9XFxcIiArIHFxK1xcXCImZGF0YV90eXBlPVxcXCIrZGF0YVR5cGUpKTtcXG5sZXQgZGV2TmFtZSA9IGJhY2tDb2RlLmRldl9uYW1lO1xcbnB1dFZhcihcXFwiV2FyZWhvdXNlLmZpbHRlclxcXCIsIGRldk5hbWUpO1xcbmxldCBydWxlTGlzdCA9IGJhY2tDb2RlLnJlc3VsdDtcXG5sZXQgc3ViVXJsID0gZ2V0QXBpKFxcXCJqc29uTGlzdFxcXCIpICsgXFxcIj9uYW1lPVxcXCIgKyBxcTtcXG5sZXQgaGFzU3ViID0gaGFzSG9tZVN1YihzdWJVcmwpO1xcbmxldCBkZXZJbmZvID0gXFxcIui/meS4quS6uuW+iOaHkizku4DkuYjpg73msqHlhpnlk6Z+XFxcIjtcXG5sZXQgdG1wSnNvbiA9IEpTT04ucGFyc2UocmVxdWVzdChnZXRBcGkoXFxcImluZm9HZXRVcmxcXFwiKSArIHFxKSk7XFxuaWYgKHRtcEpzb24uc3RhdHVzID09IDApIHtcXG4gICAgZGV2SW5mbyA9IHRtcEpzb24ucmVzdWx0IHx8IGRldkluZm87XFxufVxcbmxldCBzdWJGbGFnID0gaGFzU3ViID8gJ/CfhpcnIDogJ/Cfk6EnO1xcbmxldCBkYXRhID0gW107XFxucmVxdWlyZShcXFwiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9tYXJrZWQvbWFya2VkLm1pbi5qc1xcXCIpO1xcbmRldkluZm89bWFya2VkLnBhcnNlKGRldkluZm8pO1xcbmRhdGEucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdXFxcIiArIGRldk5hbWUgKyBcXFwiXFxcXG5cXFxcblxcXCIgKyBzbWFsbChodG1sVGFnKFxcXCJ1XFxcIiwgXFxcIueCueWHu+afpeeci+WujOaVtOWFrOWRilxcXCIpKSxcXG4gICAgZGVzYzogc21hbGwoZGV2SW5mbyksXFxuICAgIHVybDogJ2hpa2VyOi8vcGFnZS9pbmZvJyxcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIHRleHQ6IGRldkluZm8sXFxuICAgICAgICBuYW1lOiBkZXZOYW1lLFxcbiAgICAgICAgdHlwZTpcXFwicmljaF90ZXh0XFxcIlxcbiAgICB9LFxcbiAgICBwaWNfdXJsOiBhdmF0YXJVcmwsXFxuICAgIGNvbF90eXBlOiAnbW92aWVfMV92ZXJ0aWNhbF9waWMnXFxufSk7XFxuZGF0YS5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCI8YmlnPuiuoumYheeuoeeQhjwvYmlnPiZuYnNwOyZuYnNwOzxzbWFsbD4o5b2T5YmNXFxcIiArIChoYXNTdWIgPyBcXFwi5bey6K6i6ZiFXFxcIiA6IFxcXCLmnKrorqLpmIVcXFwiKSArIFxcXCIpPC9zbWFsbD5cXFwiLFxcbiAgICBjb2xfdHlwZTogXFxcInJpY2hfdGV4dFxcXCJcXG59KTtcXG5cXG5sZXQgc3ViX2NvZGUgPSAn5rW36ZiU6KeG55WM5ZCI6ZuG6KeE5YiZ6K6i6ZiF77+laG9tZV9zdWLvv6UnICsgZGV2TmFtZSArIFxcXCLlkIjpm4ZAQFxcXCIgKyBzdWJVcmw7XFxubGV0IHJ1bGVzQ29kZSA9ICfmtbfpmJTop4bnlYzlkIjpm4bop4TliJnvv6Vob21lX3J1bGVfdXJs77+lJyArIHN1YlVybDtcXG5kYXRhLnB1c2goe1xcbiAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxzcGFuIHN0eWxlPVxcXCJjb2xvcjogI2ZmNzAwMFxcXCI+5LiA6ZSu6K6i6ZiFPC9zcGFuPicsXFxuICAgIGRlc2M6ICforqLpmIXigJzigJzigJ3igJ08c3BhbiBzdHlsZT1cXFwiY29sb3I6ICM1Y2ZmMmNcXFwiPicgKyBkZXZOYW1lICsgJzwvc3Bhbj7nmoTmiYDmnInljZXop4TliJnvvIzlkIjpm4bpnIDljZXni6zorqLpmIUnLFxcbiAgICB1cmw6IHN1Yl9jb2RlLFxcbiAgICBjb2xfdHlwZTogJ3RleHRfMydcXG59KTtcXG5kYXRhLnB1c2goe1xcbiAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxzcGFuIHN0eWxlPVxcXCJjb2xvcjogI2ZmNzAwMFxcXCI+5a+85YWl5YWo6YOoPC9zcGFuPicsXFxuICAgIHVybDogcnVsZXNDb2RlLFxcbiAgICBjb2xfdHlwZTogJ3RleHRfMydcXG59KTtcXG5kYXRhLnB1c2goe1xcbiAgICB0aXRsZTogJ+KAnOKAnOKAneKAnTxzcGFuIHN0eWxlPVxcXCJjb2xvcjogI2ZmNzAwMFxcXCI+5a+85YWl6L275ZCI6ZuGPC9zcGFuPicsXFxuICAgIHVybDogJCgpLmxhenlSdWxlKChkZXZOYW1lLHN1YlVybCxhdmF0YXJVcmwpPT57XFxuICAgICAgICBjb25zdCB7Z2VuUnVsZX09JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvZ2VuQXBpXFxcIik7XFxuICAgIGxvZyhcXFwi6L275ZCI6ZuG5Zu+5qCH6ZO+5o6lOlxcXCIrYXZhdGFyVXJsKTtcXG4gICAgbGV0IGltcG9ydF9ydWxlPWdlblJ1bGUoXFxcIui9u+WQiOmbhi5cXFwiK2Rldk5hbWUsc3ViVXJsLGF2YXRhclVybCk7XFxuICAgIC8vY29weShpbXBvcnRfcnVsZSk7XFxuICAgIGxldCBydWxlQ29kZT1wYXJzZVBhc3RlKGltcG9ydF9ydWxlLnNwbGl0KFxcXCJcXFxcblxcXCIpWzBdKTtcXG4gICAgLy9yZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgIGltcG9ydFVybCA9ICdydWxlOi8vJyArIGJhc2U2NEVuY29kZShydWxlQ29kZSk7XFxuICAgIHJldHVybiBpbXBvcnRVcmxcXG4gICAgfSxkZXZOYW1lLHN1YlVybCxhdmF0YXJVcmwpLFxcbiAgICBjb2xfdHlwZTogJ3RleHRfMydcXG59KTtcXG5kYXRhLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIjxzbWFsbD7mj5DnpLrvvJrlvIDlj5HogIXljZXni6zliIbkuqvnmoTlkIjpm4bmlofku7blj6rog73ljZXni6zlr7zlhaXjgII8L3NtYWxsPlxcXCIsXFxuICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIlxcbn0pO1xcbmRhdGEucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwiPGJpZz7op4TliJnliJfooag8L2JpZz4mbmJzcDsmbmJzcDs8c21hbGw+KOWFsVxcXCIgKyBydWxlTGlzdC5sZW5ndGggKyBcXFwi5p2hKTwvc21hbGw+XFxcIixcXG4gICAgY29sX3R5cGU6IFxcXCJyaWNoX3RleHRcXFwiXFxufSk7XFxubGV0IGRhdGFUeXBlTGlzdCA9IHtcXG4gICAgXFxcIlxcXCI6XFxcIuWFqOmDqFxcXCIsXFxuICAgIFxcXCJob21lX3J1bGVfdXJsXFxcIjogJ+Wwj+eoi+W6jycsXFxuICAgIC8vXFxcInB1Ymxpc2hcXFwiOiAn5o+Q5Lqk5LqR5LuT5bqT6KeE5YiZJyxcXG4gICAgXFxcImpzX3VybFxcXCI6ICfnvZHpobXmj5Lku7YnLFxcbiAgICBcXFwiaHRtbFxcXCI6ICfpnZnmgIHpobXpnaInLFxcbiAgICBcXFwiY29uZmlnXFxcIjogJ+S4u+mimCdcXG59O1xcbmZvcihsZXQga2V5IGluIGRhdGFUeXBlTGlzdCl7XFxuICAgIGRhdGEucHVzaCh7XFxuICAgICAgICB0aXRsZTpkYXRhVHlwZT09PWtleT9cXFwi4oCc4oCcXFxcIitkYXRhVHlwZUxpc3Rba2V5XStcXFwi4oCd4oCdXFxcIjpkYXRhVHlwZUxpc3Rba2V5XSxcXG4gICAgICAgIHVybDokKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChrZXkpPT57XFxuICAgICAgICAgICAgcHV0VmFyKFxcXCJXYXJlaG91c2UudHlwZVxcXCIsa2V5KTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgIH0sa2V5KSxcXG4gICAgICAgIGNvbF90eXBlOlxcXCJzY3JvbGxfYnV0dG9uXFxcIlxcbiAgICB9KTtcXG59XFxuaWYgKHJ1bGVMaXN0Lmxlbmd0aCA+IDIwKSB7XFxuICAgIGRhdGEucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuaQnOe0olxcXCIsXFxuICAgICAgICB1cmw6ICQudG9TdHJpbmcobmFtZSA9PiBcXFwiaGlrZXI6Ly9zZWFyY2g/cz1cXFwiICsgaW5wdXQgKyBcXFwiJnJ1bGU9XFxcIiArIG5hbWUsIE1ZX1JVTEUudGl0bGUpLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgICAgICBkZXNjOiBcXFwi5pCc57Si5b2T5YmN5byA5Y+R6ICF55qE6KeE5YiZXFxcIlxcbiAgICB9KTtcXG59XFxubGV0IGhvbWVMaXN0ID0gSlNPTi5wYXJzZShyZXF1ZXN0KGFwaS5ob21lKSk7XFxubGV0IG1SdWxlTGlzdCA9IFtdO1xcbmZvciAodmFyIGl0ZW0gb2YgcnVsZUxpc3QpIHtcXG4gICAgdmFyIG5hbWUgPSBpdGVtLm5hbWU7XFxuICAgIGlmIChpdGVtLmlzX3RhcCkge1xcbiAgICAgICAgbGV0IGxvY2F0aW9uID0gSlNPTi5wYXJzZShyZXF1ZXN0KGdldEFwaShcXFwicnVsZUxpc3RKc29uXFxcIikgKyBcXFwiP2lkPVxcXCIgKyBpdGVtLmlkKSk7XFxuICAgICAgICBpdGVtLmlkID0gbG9jYXRpb24uaWQ7XFxuICAgICAgICBpdGVtLm5hbWUgPSBsb2NhdGlvbi5uYW1lO1xcbiAgICAgICAgaXRlbS5hdXRob3IgPSBsb2NhdGlvbi5hdXRob3I7XFxuICAgICAgICBpdGVtLmRhdGFfdHlwZSA9IGxvY2F0aW9uLmRhdGFfdHlwZTtcXG4gICAgICAgIGl0ZW0udmVyID0gbG9jYXRpb24udmVyXFxuICAgIH1cXG4gICAgaXRlbS52ZXJzaW9uID0gaXRlbS52ZXI7XFxuICAgIGxldCBsYWJlbCA9IFxcXCJcXFwiLFxcbiAgICAgICAgbHZlciA9IC0yO1xcbiAgICBpZiAoaXRlbS5pc19qc29uICYmIGl0ZW0uZGF0YV90eXBlID09PSBcXFwiaG9tZV9ydWxlX3VybFxcXCIpIHtcXG4gICAgICAgIGx2ZXIgPSBsb2NhbFJ1bGVWZXIoaG9tZUxpc3QsIGl0ZW0pO1xcbiAgICAgICAgaWYgKGx2ZXIgPT09IC0xKSB7XFxuICAgICAgICAgICAgbGFiZWwgPSBcXFwi8J+GlVxcXCI7XFxuICAgICAgICB9IGVsc2UgaWYgKGx2ZXIgPCBpdGVtLnZlcikge1xcbiAgICAgICAgICAgIGxhYmVsID0gXFxcIvCfhplcXFwiO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIG1SdWxlTGlzdC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBsYWJlbCArIG5hbWUsXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvcnVsZURldGFpbCNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNcXFwiLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBsdmVyOiBsdmVyLFxcbiAgICAgICAgICAgIGlkOiBpdGVtLmlkXFxuICAgICAgICB9LFxcbiAgICAgICAgcGljX3VybDogaXRlbS5waWMsXFxuICAgIH0pO1xcbn1cXG4vKiDlvZLlubbmjpLluo8gU3RhcnQgKi9cXG5tUnVsZUxpc3QgPSBtZXJnZVNvcnQobVJ1bGVMaXN0KTtcXG4vKiDlvZLlubbmjpLluo8gRW5kICovXFxuZGF0YS5wdXNoLmFwcGx5KGRhdGEsIG1SdWxlTGlzdCkgXFxuc2V0UmVzdWx0KGRhdGEpO1xcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6KeE5YiZ6K+m57uGLXVzZXJcIixcInBhdGhcIjpcInJ1bGVEZXRhaWxcIixcInJ1bGVcIjpcImpzOlxcbiAgICBjb25zdCB7XFxuICAgICAgICBnZXRBcGksXFxuICAgICAgICBjb2xvcixcXG4gICAgICAgIHNtYWxsLFxcbiAgICAgICAgaHRtbFRhZyxcXG4gICAgICAgIGFwaVxcbiAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdXRpbGl5XFxcIik7XFxubGV0IHtcXG4gICAgaWQsXFxuICAgIGx2ZXIsXFxuICAgIGlzQWxsXFxufSA9IE1ZX1BBUkFNUztcXG5hZGRMaXN0ZW5lcignb25DbG9zZScsICQudG9TdHJpbmcoKGlzQWxsKSA9PiB7XFxuICAgIGlmKCFpc0FsbCl7XFxuICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgIH1cXG59LGlzQWxsKSk7XFxubGV0IGRhdGFJdGVtID0gSlNPTi5wYXJzZShyZXF1ZXN0KGdldEFwaShcXFwiZ2V0YnlpZFxcXCIpICsgXFxcIj9pZD1cXFwiICsgaWQpKS5yZXN1bHQ7XFxuc2V0UGFnZVRpdGxlKFxcXCLjgIxcXFwiICsgZGF0YUl0ZW0ubmFtZSArIFxcXCLjgI1cXFwiKVxcbmxldCBydWxlTGlzdEpzb24gPSBnZXRBcGkoXFxcInJ1bGVMaXN0SnNvblxcXCIpICsgXFxcIj9pZD1cXFwiO1xcbmxldCBkYXRhID0gW107XFxudmFyIGhhc1N1YiA9IGZhbHNlO1xcblxcbmlmIChkYXRhSXRlbS5pc19qc29uX2xpc3QpIHtcXG4gICAgaGFzU3ViID0gaGFzSG9tZVN1YihydWxlTGlzdEpzb24gKyBkYXRhSXRlbS5pZCk7XFxufSBlbHNlIGlmICghZGF0YUl0ZW0uaXNfanNvbl9saXN0ICYmIGRhdGFJdGVtLmRhdGFfdHlwZSA9PSAnaG9tZV9ydWxlX3VybCcpIHtcXG4gICAgaGFzU3ViID0gaGFzSG9tZVN1YihydWxlTGlzdEpzb24gKyBkYXRhSXRlbS5pZCArICcmZGVidWc9dHJ1ZScpO1xcbn1cXG5cXG5kYXRhLnB1c2goe1xcbiAgICB0aXRsZTogaHRtbFRhZyhcXFwiYmlnXFxcIiwgXFxcIueJiOacrFxcXCIpLFxcbiAgICBkZXNjOiBcXFwi4oCc4oCc4oCd4oCd5byA5Y+R6ICF77yaXFxcIiArIGNvbG9yKGRhdGFJdGVtLmF1dGhvciwgXFxcIiMyMjhCRTZcXFwiKSArIFxcXCJcXFxcbuS6keerr+eJiOacrO+8mlxcXCIgKyBjb2xvcihkYXRhSXRlbS52ZXIsIFxcXCIjNWNmZjJjXFxcIikgKyBcXFwiXFxcXHRcXFxcdOacrOWcsOeJiOacrO+8mlxcXCIgKyBjb2xvcihsdmVyLCBcXFwiIzVjZmYyY1xcXCIpICsgXFxcIlxcXFxu5pu05paw5LqOOiBbXFxcIiArIGNvbG9yKGRhdGFJdGVtLmxhc3RfdXBkYXRlLCBcXFwiI2ZmNzAwMFxcXCIpICsgXFxcIl1cXFwiLFxcbiAgICB1cmw6ICQoXFxcIjzlvIDlj5HogIU+XFxcXG5cXFwiICsgZGF0YUl0ZW0uYXV0aG9yICsgXFxcIlxcXFxuPOWQjeensD5cXFxcblxcXCIgKyBkYXRhSXRlbS5uYW1lICsgXFxcIlxcXFxuPOS6keerr+eJiOacrD5cXFxcblxcXCIgKyBkYXRhSXRlbS52ZXIgKyBcXFwiXFxcXG485pys5Zyw54mI5pysPlxcXFxuXFxcIiArIGx2ZXIgKyBcXFwiXFxcXG485pu05paw5pe26Ze0PlxcXFxuW1xcXCIgKyBkYXRhSXRlbS5sYXN0X3VwZGF0ZSArIFxcXCJdXFxcIikuY29uZmlybSgoKSA9PiB7fSksXFxuICAgIGNvbF90eXBlOiAndGV4dF8xJ1xcbn0pO1xcbmxldCBkYXRhVHlwZSA9IHtcXG4gICAgaG9tZV9ydWxlX3VybDogJ+mmlumhteS6keinhOWImScsXFxuICAgIHB1Ymxpc2g6ICfmj5DkuqTkupHku5PlupPop4TliJknLFxcbiAgICBqc191cmw6ICfnvZHpobXmj5Lku7bop4TliJknLFxcbiAgICBodG1sOiAn6Z2Z5oCB6aG16Z2iJyxcXG4gICAgY29uZmlnOiAn5Li76aG16YWN572uJ1xcbn07XFxuXFxubGV0IGJhc2ljID0ge1xcbiAgICBjb2xfdHlwZTogXFxcInRleHRfMVxcXCIsXFxuICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxufTtcXG5sZXQgZGF0YVR5cGVUaXBzID0gZGF0YVR5cGVbZGF0YUl0ZW0uZGF0YV90eXBlXSB8fCAn5pyq55+l6KeE5YiZ77yaJyArIGRhdGFJdGVtLmRhdGFfdHlwZTtcXG5cXG5sZXQgc2FmZV90aXA9ZGF0YUl0ZW0uaXNfc2FmZT9cXFwi5a6J5YWoXFxcIjpcXFwi5Y2x6ZmpXFxcIjtcXG5sZXQgbm90X3NhZmVfbm90ZT1kYXRhSXRlbS5ub3Rfc2FmZV9ub3RlO1xcbmJhc2ljLnRpdGxlID0gaHRtbFRhZyhcXFwiYmlnXFxcIiwgXFxcIuexu+Wei1xcXCIpICsgXFxcIlxcXFx0XFxcXHRcXFxcdFxcXCIgKyBzbWFsbChcXFwiKGlkOlxcXCIgKyBkYXRhSXRlbS5pZCArIFxcXCIpXFxcIikrXFxcIlxcXFx0XFxcXHRcXFxcdFxcXCIgKyBzbWFsbChcXFwiKOmjjumZqeajgOa1izpcXFwiICtzYWZlX3RpcCtcXFwiKVxcXCIpO1xcbmJhc2ljLmRlc2MgPSBcXFwi5pWw5o2u57G75Z6L77yaXFxcIiArIGNvbG9yKGRhdGFUeXBlVGlwcywgXFxcIiNjYjU0ZmZcXFwiKSArIFxcXCJcXFxcbuWIhuS6q+eKtuaAgeS4uu+8mlxcXCIgKyBkYXRhSXRlbS5zdGF0ZTtcXG5pZiAoW1xcXCJodG1sXFxcIiwgXFxcImNvbmZpZ1xcXCIsIFxcXCJqc191cmxcXFwiXS5pbmNsdWRlcyhkYXRhSXRlbS5kYXRhX3R5cGUpKSB7XFxuICAgIGJhc2ljLmRlc2MgKz0gXFxcIlxcXFxu4oCc4oCc4oCd4oCdID0+XFxcIiArIHNtYWxsKFxcXCLngrnmraTpooTop4hcXFwiKTtcXG4gICAgYmFzaWMudXJsID0gcnVsZUxpc3RKc29uICsgZGF0YUl0ZW0uaWQ7XFxufVxcblxcbmRhdGEucHVzaChiYXNpYyk7XFxubGV0IGhhc1N1YnMgPSBcXFwiXFxcIjtcXG5pZiAoaGFzU3ViKSB7XFxuICAgIGhhc1N1YnMgPSBcXFwiXFxcXHRcXFxcdFxcXFx0XFxcIiArIHNtYWxsKFxcXCLlt7LorqLpmIVcXFwiKVxcbn1cXG5cXG5sZXQgbm90ZXMgPSByZXF1ZXN0KGdldEFwaShcXFwiZ2V0X3J1bGVfbm90ZVxcXCIpICsgaWQpO1xcbm5vdGVzID0gSlNPTi5wYXJzZShub3RlcykucmVzdWx0O1xcbnJlcXVpcmUoXFxcImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vbWFya2VkL21hcmtlZC5taW4uanNcXFwiKTtcXG5sZXQgbm90ZXNIdG1sPVxcXCJcXFwiXFxudHJ5e1xcbiAgICBub3Rlc0h0bWw9bWFya2VkLnBhcnNlKG5vdGVzKTtcXG59Y2F0Y2goZSl7fVxcblxcbmlmIChub3RlcyAhPT0gZmFsc2UpIHtcXG4gICAgZGF0YS5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBodG1sVGFnKFxcXCJiaWdcXFwiLCBcXFwi5aSH5rOoXFxcIikgKyBcXFwiXFxcXHRcXFxcdFxcXFx0XFxcIiArIHNtYWxsKGh0bWxUYWcoXFxcInVcXFwiLCBcXFwi5p+l55yL5a6M5pW05YWs5ZGKID5cXFwiKSksXFxuICAgICAgICBkZXNjOiBub3RlcyxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8xXFxcIixcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9pbmZvXFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgdGV4dDogbm90ZXNIdG1sLFxcbiAgICAgICAgICAgIG5hbWU6IGRhdGFJdGVtLm5hbWUsXFxuICAgICAgICAgICAgLy8gdHlwZTogXFxcImxvbmdfdGV4dFxcXCJcXG4gICAgICAgICAgICB0eXBlOiBcXFwicmljaF90ZXh0XFxcIlxcbiAgICAgICAgfVxcbiAgICB9KTtcXG59XFxuZGF0YS5wdXNoKHtcXG4gICAgdGl0bGU6IGh0bWxUYWcoXFxcImJpZ1xcXCIsIFxcXCLmk43kvZxcXFwiKSArIGhhc1N1YnMsXFxuICAgIGNvbF90eXBlOiBcXFwidGV4dF8xXFxcIixcXG4gICAgdXJsOiBcXFwidG9hc3Q6Ly/kvaDmiY3mmK/mnIDluIXnmoTpgqPkuKrkurrvvIFcXFwiXFxufSk7XFxubGV0IGltcG9ydFVybCwgcnVsZUNvZGUsIHNoYXJlVXJsLCBiYWNrQ29kZSA9IFxcXCJcXFwiO1xcbmlmICghZGF0YUl0ZW0uaXNfanNvbikge1xcbiAgICBiYWNrQ29kZSA9IHJlcXVlc3QocnVsZUxpc3RKc29uICsgZGF0YUl0ZW0uaWQpO1xcbn1cXG5zd2l0Y2ggKGRhdGFJdGVtLmRhdGFfdHlwZSkge1xcbiAgICBjYXNlIFxcXCJob21lX3J1bGVfdXJsXFxcIjpcXG4gICAgICAgIHJ1bGVDb2RlID0gXFxcIua1t+mYlOinhueVjOmmlumhtemikemBk+inhOWImeOAkFxcXCIgKyBkYXRhSXRlbS5uYW1lICsgXFxcIuOAke+/pWhvbWVfcnVsZV91cmzvv6VcXFwiICsgcnVsZUxpc3RKc29uICsgZGF0YUl0ZW0uaWQ7XFxuICAgICAgICBpbXBvcnRVcmwgPSBcXFwicnVsZTovL1xcXCIgKyBiYXNlNjRFbmNvZGUocnVsZUNvZGUpXFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAncHVibGlzaCc6XFxuICAgICAgICBydWxlQ29kZSA9ICfmtbfpmJTop4bnlYzop4TliJnliIbkuqvvvIzlvZPliY3liIbkuqvnmoTmmK/vvJonICsgZGF0YUl0ZW0ubmFtZSArICfvv6VwdWJsaXNo77+lJyArIGJhc2U2NEVuY29kZShiYWNrQ29kZSk7XFxuICAgICAgICBpbXBvcnRVcmwgPSAncnVsZTovLycgKyBiYXNlNjRFbmNvZGUocnVsZUNvZGUpO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ2pzX3VybCc6XFxuICAgICAgICBydWxlQ29kZSA9ICfmtbfpmJTop4bnlYzop4TliJnliIbkuqvvvIzlvZPliY3liIbkuqvnmoTmmK/vvJrnvZHpobXmj5Lku7bvv6Vqc191cmzvv6UnICsgZGF0YUl0ZW0ubmFtZSArICdAYmFzZTY0Oi8vJyArIGJhc2U2NEVuY29kZShiYWNrQ29kZSk7XFxuICAgICAgICBpbXBvcnRVcmwgPSAncnVsZTovLycgKyBiYXNlNjRFbmNvZGUocnVsZUNvZGUpO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ2h0bWwnOlxcbiAgICAgICAgbGV0IGZpbGVfdG1wID0gZGF0YUl0ZW0ubmFtZS5zcGxpdCgnLicpO1xcbiAgICAgICAgbGV0IGZpbGVfcGF0aCA9IGZpbGVfdG1wLmxlbmd0aCA+IDEgPyBmaWxlX3RtcFtmaWxlX3RtcC5sZW5ndGggLSAxXSArIFxcXCIvXFxcIiArIGRhdGFJdGVtLm5hbWUgOiBkYXRhSXRlbS5uYW1lO1xcbiAgICAgICAgcnVsZUNvZGUgPSBcXFwi5rW36ZiU6KeG55WM5pys5Zyw5paH5Lu25YiG5Lqr77+lZmlsZV91cmzvv6VoaWtlcjovL2ZpbGVzL3J1bGVzL2R6SG91c2UvXFxcIiArIGZpbGVfcGF0aCArIFxcXCJAXFxcIiArIHJ1bGVMaXN0SnNvbiArIGRhdGFJdGVtLmlkO1xcbiAgICAgICAgaW1wb3J0VXJsID0gJ3J1bGU6Ly8nICsgYmFzZTY0RW5jb2RlKHJ1bGVDb2RlKTtcXG4gICAgICAgIGJyZWFrXFxuICAgIGNhc2UgXFxcImNvbmZpZ1xcXCI6XFxuICAgICAgICBpbXBvcnRVcmwgPSAkKCkucnVsZShwYXNzd29yZCA9PiB7XFxuICAgICAgICAgICAgZXZhbChmZXRjaChcXFwiaGlrZXI6Ly9hc3NldHMvaG9tZS5qc1xcXCIpKTtcXG4gICAgICAgICAgICBIaWtlckhvbWUubG9hZChcXFwiaW1wb3J0XFxcIiwgcGFzc3dvcmQpO1xcbiAgICAgICAgfSwgYmFja0NvZGUpO1xcbiAgICAgICAgYnJlYWs7XFxufVxcbmxldCBteV9jb2xfdHlwZSA9IFxcXCJ0ZXh0XzJcXFwiO1xcbmlmIChpbXBvcnRVcmwpIHtcXG4gICAgZGF0YS5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5a+85YWl6KeE5YiZXFxcIixcXG4gICAgICAgIHVybDogaW1wb3J0VXJsLFxcbiAgICAgICAgY29sX3R5cGU6IG15X2NvbF90eXBlXFxuICAgIH0pO1xcbn1cXG5pZiAocnVsZUNvZGUpIHtcXG4gICAgZGF0YS5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5YiG5Lqr5Y+j5LukXFxcIixcXG4gICAgICAgIHVybDogXFxcImNvcHk6Ly9cXFwiICsgcnVsZUNvZGUsXFxuICAgICAgICBjb2xfdHlwZTogbXlfY29sX3R5cGVcXG4gICAgfSk7XFxufVxcblxcbmlmIChpbXBvcnRVcmwpIHtcXG4gICAgaWYgKGRhdGFJdGVtLmlzX2pzb25fbGlzdCAmJiAhaGFzU3ViKSB7XFxuICAgICAgICBsZXQgc3ViX3J1bGVfY29kZSA9ICfmtbfpmJTop4bnlYzlkIjpm4bop4TliJnorqLpmIXvv6Vob21lX3N1Yu+/pScgKyBkYXRhSXRlbS5uYW1lICsgXFxcIkBAXFxcIiArIHJ1bGVMaXN0SnNvbiArIGRhdGFJdGVtLmlkO1xcbiAgICAgICAgbGV0IHN1Yl91cmwgPSAncnVsZTovLycgKyBiYXNlNjRFbmNvZGUoc3ViX3J1bGVfY29kZSk7XFxuICAgICAgICBkYXRhLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAn6K6i6ZiF5ZCI6ZuGJyxcXG4gICAgICAgICAgICB1cmw6IHN1Yl91cmwsXFxuICAgICAgICAgICAgY29sX3R5cGU6IG15X2NvbF90eXBlXFxuICAgICAgICB9KTtcXG4gICAgICAgIGRhdGEucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08c3BhbiBzdHlsZT1cXFwiY29sb3I6ICNmZjcwMDBcXFwiPuWvvOWFpei9u+WQiOmbhjwvc3Bhbj4nLFxcbiAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChkYXRhSXRlbSxzdWJVcmwpPT57XFxuICAgICAgICAgICAgICAgIGNvbnN0IHtnZW5SdWxlfT0kLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9nZW5BcGlcXFwiKTtcXG4gICAgICAgICAgICAgICAgbGV0IGltcG9ydF9ydWxlPWdlblJ1bGUoZGF0YUl0ZW0ubmFtZStcXFwiLlxcXCIrZGF0YUl0ZW0uYXV0aG9yLHN1YlVybCk7XFxuICAgICAgICAgICAgICAgIC8vY29weShpbXBvcnRfcnVsZSk7XFxuICAgICAgICAgICAgICAgIGxldCBydWxlQ29kZT1wYXJzZVBhc3RlKGltcG9ydF9ydWxlLnNwbGl0KFxcXCJcXFxcblxcXCIpWzBdKTtcXG4gICAgICAgICAgICAgICAgLy9yZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuICAgICAgICAgICAgICAgIGltcG9ydFVybCA9ICdydWxlOi8vJyArIGJhc2U2NEVuY29kZShydWxlQ29kZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBpbXBvcnRVcmxcXG4gICAgICAgICAgICB9LGRhdGFJdGVtLHJ1bGVMaXN0SnNvbiArIGRhdGFJdGVtLmlkKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogbXlfY29sX3R5cGVcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZGF0YS5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIjxzbWFsbD7mj5DnpLrvvJrlvIDlj5HogIXljZXni6zliIbkuqvnmoTlkIjpm4bmlofku7blj6rog73ljZXni6zlr7zlhaXjgII8L3NtYWxsPlxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJyaWNoX3RleHRcXFwiXFxuICAgICAgICB9KTtcXG4gICAgfSBlbHNlIGlmICghZGF0YUl0ZW0uaXNfanNvbl9saXN0ICYmICFoYXNTdWIgJiYgZGF0YUl0ZW0uZGF0YV90eXBlID09ICdob21lX3J1bGVfdXJsJykge1xcbiAgICAgICAgbGV0IHN1Yl9ydWxlX2NvZGUgPSAn5rW36ZiU6KeG55WM5Y2V6KeE5YiZ6K6i6ZiF77+laG9tZV9zdWLvv6UnICsgZGF0YUl0ZW0ubmFtZSArIFxcXCJAQFxcXCIgKyBydWxlTGlzdEpzb24gKyBkYXRhSXRlbS5pZCArICcmZGVidWc9dHJ1ZSc7XFxuICAgICAgICBsZXQgc3ViX3VybCA9ICdydWxlOi8vJyArIGJhc2U2NEVuY29kZShzdWJfcnVsZV9jb2RlKTtcXG4gICAgICAgIGRhdGEucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICforqLpmIXop4TliJknLFxcbiAgICAgICAgICAgIHVybDogc3ViX3VybCxcXG4gICAgICAgICAgICBjb2xfdHlwZTogbXlfY29sX3R5cGVcXG4gICAgICAgIH0pXFxuICAgIH1cXG59XFxuaWYgKGRhdGFJdGVtLmlzX2pzb24gJiYgZGF0YUl0ZW0uZGF0YV90eXBlID09PSBcXFwiaG9tZV9ydWxlX3VybFxcXCIgJiYgIWRhdGFJdGVtLmlzX2pzb25fbGlzdCkge1xcbiAgICBkYXRhLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfov5vlhaXpopHpgZMnLFxcbiAgICAgICAgdXJsOiAkKCAvKlxcXCIjbm9Mb2FkaW5nI1xcXCIqLyApLmxhenlSdWxlKChuYW1lLGhvbWUpID0+IHtcXG4gICAgICAgICAgICBsZXQgcnVsZUxpc3QgPSBKU09OLnBhcnNlKHJlcXVlc3QoaG9tZSkpO1xcbiAgICAgICAgICAgIGxldCBoYXNSdWxlID0gcnVsZUxpc3Quc29tZShpdGVtID0+IGl0ZW0udGl0bGUgPT09IG5hbWUpO1xcbiAgICAgICAgICAgIGlmIChoYXNSdWxlKSB7XFxuICAgICAgICAgICAgICAgIHB1dFZhcihcXFwiV2FyZWhvdXNlLmJhY2tcXFwiLCBcXFwiMVxcXCIpO1xcbiAgICAgICAgICAgICAgICBiYWNrKCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBob21lK1xcXCJzQFxcXCIgKyBuYW1lO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/mnKrlronoo4VcXFwiO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIGRhdGFJdGVtLm5hbWUsYXBpLmhvbWUpLFxcbiAgICAgICAgY29sX3R5cGU6IG15X2NvbF90eXBlXFxuICAgIH0pXFxufVxcbmRhdGEucHVzaCh7XFxuICAgIGNvbF90eXBlOiBcXFwibGluZV9ibGFua1xcXCJcXG59KTtcXG5kYXRhLnB1c2goe1xcbiAgICB0aXRsZTogZGF0YUl0ZW0uZ29vZF9udW0sXFxuICAgIHBpY191cmw6IFxcXCJoaWtlcjovL2ZpbGVzL2ljb24v6LWeLnN2Z1xcXCIsXFxuICAgIGNvbF90eXBlOiBcXFwiaWNvbl9zbWFsbF8zXFxcIixcXG4gICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL01ha2VBY29tbWVudCNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgaWQ6IGRhdGFJdGVtLmlkLFxcbiAgICAgICAgbmFtZTogZGF0YUl0ZW0ubmFtZVxcbiAgICB9XFxufSk7XFxuZGF0YS5wdXNoKHtcXG4gICAgdGl0bGU6IGRhdGFJdGVtLmJhZF9udW0sXFxuICAgIHBpY191cmw6IFxcXCJoaWtlcjovL2ZpbGVzL2ljb24v6LipLnN2Z1xcXCIsXFxuICAgIGNvbF90eXBlOiBcXFwiaWNvbl9zbWFsbF8zXFxcIixcXG4gICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL01ha2VBY29tbWVudCNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgaWQ6IGRhdGFJdGVtLmlkLFxcbiAgICAgICAgbmFtZTogZGF0YUl0ZW0ubmFtZSxcXG4gICAgICAgIGRlZmF1bHRUeXBlOlxcXCJiYWRcXFwiXFxuICAgIH1cXG59KTtcXG5kYXRhLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIuivhOiuulxcXCIsXFxuICAgIHBpY191cmw6IFxcXCJoaWtlcjovL2ZpbGVzL2ljb24v6K+E6K66LnN2Z1xcXCIsXFxuICAgIGNvbF90eXBlOiBcXFwiaWNvbl9zbWFsbF8zXFxcIixcXG4gICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL01ha2VBY29tbWVudCNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgaWQ6IGRhdGFJdGVtLmlkLFxcbiAgICAgICAgbmFtZTogZGF0YUl0ZW0ubmFtZVxcbiAgICB9XFxufSk7XFxubGV0IHRvdGFsU3VtID0gZGF0YUl0ZW0uZ29vZF9udW0gKyBkYXRhSXRlbS5iYWRfbnVtO1xcblxcbmRhdGEucHVzaCh7XFxuICAgIHRpdGxlOiBodG1sVGFnKFxcXCJiaWdcXFwiLCBcXFwi6K+E6K66KFxcXCIgKyB0b3RhbFN1bSArIFxcXCIpXFxcIikgKyBcXFwiXFxcXHRcXFxcdFxcXFx0XFxcIiArIHNtYWxsKGh0bWxUYWcoXFxcInVcXFwiLCBcXFwi5p+l55yL5YWo6YOo6K+E6K66ID5cXFwiKSksXFxuICAgIGNvbF90eXBlOiBcXFwidGV4dF8xXFxcIixcXG4gICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL0NvbW1lbnRcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eSNmeXBhZ2Ujbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcIixcXG4gICAgICAgIGlkOiBkYXRhSXRlbS5pZCxcXG4gICAgICAgIHRvdGFsU3VtOiB0b3RhbFN1bSxcXG4gICAgICAgIG5vX2FjdGl2ZTogZmFsc2VcXG4gICAgfVxcbn0pO1xcbi8vY29uc3QgbG9uZ2VzdFN1bT0xMjA7XFxubGV0IGljb24gPSB7XFxuICAgIFxcXCJnb29kXFxcIjogXFxcIvCfkY1cXFwiLFxcbiAgICBcXFwiYmFkXFxcIjogXFxcIvCfkY5cXFwiLFxcbiAgICBcXFwicmVwbHlcXFwiOlxcXCLlvIDlj5HogIXwn5ejXFxcIlxcbn1cXG5pZiAodG90YWxTdW0gPT09IDApIHtcXG4gICAgZGF0YS5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwiPGg1IHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+5LiA5p2h6K+E6K665Lmf5rKh5pyJ77yM5b+r5p2l5oqi5rKZ5Y+R5ZCn77yBPC9oNT5cXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJyaWNoX3RleHRcXFwiXFxuICAgIH0pO1xcbn0gZWxzZSB7XFxuICAgIGxldCBjb21tZW50TGlzdCA9IEpTT04ucGFyc2UocmVxdWVzdChhcGkuZGlzX2dldCArIGRhdGFJdGVtLmlkICsgXFxcIj9saW1pdD01XFxcIikpLnJlc3VsdDtcXG4gICAgZm9yIChsZXQgaXRlbSBvZiBjb21tZW50TGlzdCkge1xcbiAgICAgICAgbGV0IFJlcGx5ID0gaXRlbS5kaXNjdXNzX3R5cGU9PT1cXFwicmVwbHlcXFwiJiZpdGVtLnJlcGx5X3RvX25hbWUhPT1mYWxzZSYmaXRlbS5yZXBseV90b19pZCE9PWZhbHNlP1xcXCLigJjigJjlm57lpI1AXFxcIitpdGVtLnJlcGx5X3RvX25hbWUrXFxcIiAjXFxcIitpdGVtLmRpc2N1c3NfaWQrXFxcIuKAmeKAmVxcXFxuXFxcIjpcXFwiXFxcIjtcXG4gICAgICAgIGRhdGEucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGl0ZW0ubmFtZSArIFxcXCImbmJzcDsmbmJzcDs8Zm9udCBjb2xvcj0nZ3JheSc+PHNtYWxsPiNcXFwiICsgaXRlbS5pZCArIFxcXCI8L3NtYWxsPjxmb250PlxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiLFxcbiAgICAgICAgICAgIHVybDogXFxcInRvYXN0Oi8vXFxcIiArIGl0ZW0ucXEsXFxuICAgICAgICAgICAgcGljX3VybDogaXRlbS5hdmF0YXJfdXJsXFxuICAgICAgICB9KTtcXG4gICAgICAgIGRhdGEucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGl0ZW0uZGlzY3Vzc190ZXh0LFxcbiAgICAgICAgICAgIGRlc2M6IFJlcGx5K2l0ZW0uY3JlYXRlX2RhdGUgKyBcXFwiwrdcXFwiICsgaWNvbltpdGVtLmRpc2N1c3NfdHlwZV0sXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzFcXFwiLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9pbmZvXFxcIixcXG4gICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICAgIG5hbWU6aXRlbS5uYW1lLFxcbiAgICAgICAgICAgICAgICB0eXBlOlxcXCJsb25nX3RleHRcXFwiLFxcbiAgICAgICAgICAgICAgICB0ZXh0Oml0ZW0uZGlzY3Vzc190ZXh0XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBwaWNfdXJsOiBpdGVtLmF2YXRhcl91cmxcXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIGRhdGEucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogXFxcImxpbmVfYmxhbmtcXFwiXFxuICAgIH0pO1xcbn1cXG5cXG5zZXRSZXN1bHQoZGF0YSk7XCJ9LHtcImNvbF90eXBlXCI6XCJyaWNoX3RleHRcIixcIm5hbWVcIjpcIuafpeeci1wiLFwicGF0aFwiOlwiaW5mb1wiLFwicnVsZVwiOlwianM6XFxuc2V0UGFnZVRpdGxlKFxcXCLmn6XnnIvjgIxcXFwiK01ZX1BBUkFNUy5uYW1lK1xcXCLjgI1cXFwiKVxcbnNldFJlc3VsdChbe1xcbiAgICB0aXRsZTogTVlfUEFSQU1TLnRleHQsXFxuICAgIGNvbF90eXBlOk1ZX1BBUkFNUy50eXBlXFxufV0pO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5byA5Y+R6ICF5rOo5YaMXCIsXCJwYXRoXCI6XCJSZWdpc3RlclwiLFwicnVsZVwiOlwianM6XFxuc2V0UGFnZVRpdGxlKFxcXCLlvIDlj5HogIXms6jlhoxcXFwiKTtcXG5jb25zdCB7XFxuICAgIGdldEFwaSxcXG4gICAgaHRtbFRhZyxcXG4gICAgbWFwQ29sVHlwZSxcXG4gICAgc21hbGxcXG59ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdXRpbGl5XFxcIik7XFxudmFyIGRhdGEgPSBbXTtcXG5hZGRMaXN0ZW5lcignb25DbG9zZScsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICBjbGVhclZhcihcXFwiV2FyZWhvdXNlLlBhc3N3b3JkXFxcIik7XFxuICAgIGNsZWFyVmFyKFxcXCJXYXJlaG91c2UuVXNlcm5hbWVcXFwiKTtcXG4gICAgY2xlYXJWYXIoXFxcIldhcmVob3VzZS5EZXNjcmlwdGlvblxcXCIpO1xcbiAgICBjbGVhclZhcihcXFwiV2FyZWhvdXNlLlVzZXJBZGRyZXNzXFxcIik7XFxufSkpO1xcbmFkZExpc3RlbmVyKCdvblJlZnJlc2gnLCAkLnRvU3RyaW5nKCgpPT57XFxuICAgIHB1dFZhcihcXFwiV2FyZWhvdXNlLldhaXRcXFwiLCBcXFwiXFxcIik7XFxufSkpO1xcbmRhdGEucHVzaCh7XFxuICAgIHRpdGxlOiAn6LSm5Y+3JyxcXG4gICAgZGVzYzogXFxcIuivt+i+k+WFpei0puWPtyjlv4XloaspXFxcIixcXG4gICAgY29sX3R5cGU6ICdpbnB1dCcsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBkZWZhdWx0VmFsdWU6IGdldFZhcignV2FyZWhvdXNlLlVzZXJuYW1lJywgJycpLFxcbiAgICAgICAgdHlwZTogXFxcIm51bWJlclxcXCIsXFxuICAgICAgICBvbkNoYW5nZTogJ3B1dFZhcihcXFwiV2FyZWhvdXNlLlVzZXJuYW1lXFxcIixpbnB1dCknXFxuICAgIH1cXG59LCB7XFxuICAgIHRpdGxlOiAn5a+G56CBJyxcXG4gICAgZGVzYzogXFxcIuivt+i+k+WFpeWvhueggSjlv4XloaspXFxcIixcXG4gICAgY29sX3R5cGU6ICdpbnB1dCcsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBkZWZhdWx0VmFsdWU6IGdldFZhcignV2FyZWhvdXNlLlBhc3N3b3JkJywgJycpLFxcbiAgICAgICAgdHlwZTogXFxcInBhc3N3b3JkXFxcIixcXG4gICAgICAgIG9uQ2hhbmdlOiAncHV0VmFyKFxcXCJXYXJlaG91c2UuUGFzc3dvcmRcXFwiLGlucHV0KSdcXG4gICAgfVxcbn0pO1xcbm1hcENvbFR5cGUoZGF0YSwgXFxcImxpbmVfYmxhbmtcXFwiLCAxKTtcXG5kYXRhLnB1c2goe1xcbiAgICB0aXRsZTogJ+aYteensCcsXFxuICAgIGRlc2M6IFxcXCLor7fovpPlhaXmmLXnp7Ao5b+F5aGrKVxcXCIsXFxuICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRWYXIoJ1dhcmVob3VzZS5Vc2VyQWRkcmVzcycsICcnKSxcXG4gICAgICAgIG9uQ2hhbmdlOiAncHV0VmFyKFxcXCJXYXJlaG91c2UuVXNlckFkZHJlc3NcXFwiLGlucHV0KSdcXG4gICAgfVxcbn0sIHtcXG4gICAgdGl0bGU6ICfmj4/ov7AnLFxcbiAgICBkZXNjOiBcXFwi6K+06K+05Li65LuA5LmI6KaB5rOo5YaM5ZCnXFxcXG4o5Y+v5Lul5aKe5Yqg6YCa6L+H5qaC546HLOmAieWhqylcXFwiLFxcbiAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0VmFyKCdXYXJlaG91c2UuRGVzY3JpcHRpb24nLCAnJyksXFxuICAgICAgICB0eXBlOiBcXFwidGV4dGFyZWFcXFwiLFxcbiAgICAgICAgb25DaGFuZ2U6ICdwdXRWYXIoXFxcIldhcmVob3VzZS5EZXNjcmlwdGlvblxcXCIsaW5wdXQpJ1xcbiAgICB9XFxufSlcXG5cXG5tYXBDb2xUeXBlKGRhdGEsIFxcXCJsaW5lX2JsYW5rXFxcIiwgMSk7XFxuXFxuZGF0YS5wdXNoKHtcXG4gICAgdGl0bGU6IGh0bWxUYWcoXFxcImJcXFwiLCBcXFwi5rOo5YaMXFxcIiksXFxuICAgIHVybDogJChnZXRBcGkoXFxcIm5ld19kZXZcXFwiKStcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoZ2V0SWQsIGNvbmZpcm0pID0+IHtcXG4gICAgICAgIGxldCB1c2VybmFtZSA9IGdldFZhcignV2FyZWhvdXNlLlVzZXJuYW1lJywgXFxcIlxcXCIpLFxcbiAgICAgICAgICAgIHBhc3N3b3JkID0gZ2V0VmFyKCdXYXJlaG91c2UuUGFzc3dvcmQnLCBcXFwiXFxcIiksXFxuICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBnZXRWYXIoJ1dhcmVob3VzZS5EZXNjcmlwdGlvbicsIFxcXCJcXFwiKSxcXG4gICAgICAgICAgICBuYW1lID0gZ2V0VmFyKFxcXCJXYXJlaG91c2UuVXNlckFkZHJlc3NcXFwiLCBcXFwiXFxcIik7XFxuICAgICAgICBpZiAoW3VzZXJuYW1lLCBwYXNzd29yZCwgbmFtZV0uaW5jbHVkZXMoXFxcIlxcXCIpKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+i0puWPtyzlr4bnoIHlkozmmLXnp7DkuI3og73kuLrnqbpcXFwiO1xcbiAgICAgICAgfVxcbiAgICAgICAgc2hvd0xvYWRpbmcoXFxcIuato+WcqOaPkOS6pOeUs+ivt+ihqFxcXCIpO1xcbiAgICAgICAgbGV0IHJlc3VsdCA9IHJlcXVlc3QoaW5wdXQsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgXFxcInBhcmFtc1xcXCI6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJyZWFzb25cXFwiOiBkZXNjcmlwdGlvbixcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJuYW1lXFxcIjogbmFtZSxcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJwYXNzd29yZFxcXCI6IHBhc3N3b3JkLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcInFxXFxcIjogdXNlcm5hbWVcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgIG1ldGhvZDogJ3Bvc3QnXFxuICAgICAgICB9KTtcXG4gICAgICAgIHJlc3VsdCA9IEpTT04ucGFyc2UocmVzdWx0KS5yZXN1bHQ7XFxuICAgICAgICBoaWRlTG9hZGluZygpO1xcbiAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDApIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8vXFxcIiArIHJlc3VsdC5kZXRhaWw7XFxuICAgICAgICB9XFxuICAgICAgICBsZXQgaWRyZXN1bHQgPSBKU09OLnBhcnNlKHJlcXVlc3QoZ2V0SWQgKyBcXFwiP3FxPVxcXCIgKyB1c2VybmFtZSkpO1xcbiAgICAgICAgaWYgKGlkcmVzdWx0LnN0YXR1cyAhPT0gMCkge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9cXFwiICsgaWRyZXN1bHQuZGV0YWlsO1xcbiAgICAgICAgfVxcbiAgICAgICAgXFxuICAgICAgICByZXR1cm4gJChcXFwiXFxcIiwgXFxcIui+k+WFpemCrueusemqjOivgeeggVxcXFxuXFxcIiArIHJlc3VsdC5kZXRhaWwpLmlucHV0KChjb25maXJtLCBpZCwgYWNjb3VudCkgPT4ge1xcbiAgICAgICAgICAgIHNob3dMb2FkaW5nKFxcXCLor7fogJDlv4PnrYnlvoVcXFwiKTtcXG4gICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gcmVxdWVzdChjb25maXJtLCB7XFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xcbiAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFwicGFyYW1zXFxcIjoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwicmVnaXN0X2lkXFxcIjogaWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJ5em1cXFwiOiBpbnB1dFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IEpTT04ucGFyc2UocmVzdWx0KS5yZXN1bHQ7XFxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAwKSB7XFxuICAgICAgICAgICAgICAgICAgICBoaWRlTG9hZGluZygpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL1xcXCIgKyByZXN1bHQuZGV0YWlsO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0VmFyKFxcXCJXYXJlaG91c2VVc2VybmFtZVxcXCIsIGFjY291bnRbMF0pO1xcbiAgICAgICAgICAgICAgICAgICAgcHV0VmFyKFxcXCJXYXJlaG91c2VQYXNzd29yZFxcXCIsIGFjY291bnRbMV0pO1xcbiAgICAgICAgICAgICAgICAgICAgaGlkZUxvYWRpbmcoKTtcXG4gICAgICAgICAgICAgICAgICAgIGJhY2soKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/miJDlip/mj5DkuqTms6jlhozms6jlhoxcXFxcblxcXCIrcmVzdWx0LmRldGFpbDtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgaGlkZUxvYWRpbmcoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WHuumUmeS6huWRkFxcXCI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwgY29uZmlybSwgaWRyZXN1bHQucmVzdWx0LCBbdXNlcm5hbWUsIHBhc3N3b3JkXSk7XFxuICAgIH0sIGdldEFwaShcXFwibmV3X2dldElkXFxcIiksIGdldEFwaShcXFwibmV3X2NvbmZpcm1cXFwiKSksXFxuICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG59KTtcXG5zZXRSZXN1bHQoZGF0YSk7XCJ9LHtcImNvbF90eXBlXCI6XCJ0ZXh0XzFcIixcIm5hbWVcIjpcIuS4quS6uui1hOaWmVwiLFwicGF0aFwiOlwiUGVyc29uYWxEYXRhXCIsXCJydWxlXCI6XCJqczpcXG5zZXRQYWdlVGl0bGUoXFxcIuS4quS6uui1hOaWmVxcXCIpO1xcbnZhciBkYXRhPVtdO1xcbmNvbnN0IHtcXG4gICAgZ2V0QXBpLFxcbiAgICBnZXRGaWxlLFxcbiAgICBhcGlcXG59ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdXRpbGl5XFxcIik7XFxuXFxuZGF0YS5wdXNoKHtcXG4gICAgY29sX3R5cGU6XFxcImxpbmVfYmxhbmtcXFwiXFxufSk7XFxuXFxubGV0IHt1c2VybmFtZSxwYXNzd29yZH0gPSBnZXRGaWxlKCk7XFxubGV0IGRldiA9IEpTT04ucGFyc2UocmVxdWVzdChnZXRBcGkoXFxcInVzZXJcXFwiKStNWV9QQVJBTVMuaWQpKS5yZXN1bHQ7XFxuZGF0YS5wdXNoKHtcXG4gICAgdGl0bGU6XFxcIuWktOWDj1xcXCIsXFxuICAgIGRlc2M6ZGV2LmF2YXRhcixcXG4gICAgdXJsOlxcXCJoaWtlcjovL3BhZ2UvbW9kaWZ5X1BlcnNvbmFsRGF0YSNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNcXFwiLFxcbiAgICBleHRyYTp7XFxuICAgICAgICBkZXY6ZGV2LFxcbiAgICAgICAgdXNlcm5hbWU6dXNlcm5hbWUsXFxuICAgICAgICBwYXNzd29yZDpwYXNzd29yZCxcXG4gICAgICAgIFBhdHRlcm46MFxcbiAgICB9LFxcbiAgICBjb2xfdHlwZTpcXFwidGV4dF8xXFxcIlxcbn0pO1xcblxcblxcbmRhdGEucHVzaCh7XFxuICAgIHRpdGxlOlxcXCLmmLXnp7BcXFwiLFxcbiAgICBkZXNjOmRldi5uYW1lLFxcbiAgICB1cmw6XFxcImhpa2VyOi8vcGFnZS9tb2RpZnlfUGVyc29uYWxEYXRhI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1xcXCIsXFxuICAgIGV4dHJhOntcXG4gICAgICAgIGRldjpkZXYsXFxuICAgICAgICB1c2VybmFtZTp1c2VybmFtZSxcXG4gICAgICAgIHBhc3N3b3JkOnBhc3N3b3JkLFxcbiAgICAgICAgUGF0dGVybjoxXFxuICAgIH0sXFxuICAgIGNvbF90eXBlOlxcXCJ0ZXh0XzFcXFwiXFxufSk7XFxuXFxuZGF0YS5wdXNoKHtcXG4gICAgdGl0bGU6XFxcIuWvhueggVxcXCIsXFxuICAgIHVybDpcXFwiaGlrZXI6Ly9wYWdlL21vZGlmeV9QZXJzb25hbERhdGEjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcIixcXG4gICAgZXh0cmE6e1xcbiAgICAgICAgZGV2OmRldixcXG4gICAgICAgIHVzZXJuYW1lOnVzZXJuYW1lLFxcbiAgICAgICAgcGFzc3dvcmQ6cGFzc3dvcmQsXFxuICAgICAgICBQYXR0ZXJuOjJcXG4gICAgfSxcXG4gICAgY29sX3R5cGU6XFxcInRleHRfMVxcXCJcXG59KTtcXG5kYXRhLnB1c2goe1xcbiAgICBjb2xfdHlwZTpcXFwibGluZV9ibGFua1xcXCJcXG59KTtcXG5kYXRhLnB1c2goe1xcbiAgICB0aXRsZTpcXFwi6LSm5Y+377yaXFxcIit1c2VybmFtZSxcXG4gICAgdXJsOlxcXCJjb3B5Oi8vXFxcIit1c2VybmFtZSxcXG4gICAgY29sX3R5cGU6XFxcInRleHRfMVxcXCJcXG59KTtcXG5kYXRhLnB1c2goe1xcbiAgICB0aXRsZTpcXFwiVUlE77yaXFxcIitkZXYuaWQsXFxuICAgIHVybDpcXFwiY29weTovL1xcXCIrZGV2LmlkLFxcbiAgICBjb2xfdHlwZTpcXFwidGV4dF8xXFxcIlxcbn0pO1xcbmRhdGEucHVzaCh7XFxuICAgIGNvbF90eXBlOlxcXCJsaW5lX2JsYW5rXFxcIlxcbn0pO1xcbmRhdGEucHVzaCh7XFxuICAgIHRpdGxlOlxcXCLmj5DkuqTkupHku5PlupPop4TliJlcXFwiLFxcbiAgICB1cmw6JChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoaG9zdCk9PntcXG4gICAgICAgIGxldCBjb2RlPXJlcXVlc3QoaG9zdCtcXFwiL2hpa2VydWxlL3J1bGVsaXN0Lmpzb24/aWQ9MTQ1XFxcIik7XFxuICAgICAgICBsZXQgd29yZD1cXFwi77+lcHVibGlzaO+/pVxcXCIrYmFzZTY0RW5jb2RlKGNvZGUpO1xcbiAgICAgICAgcmV0dXJuIFxcXCJydWxlOi8vXFxcIitiYXNlNjRFbmNvZGUod29yZCk7XFxuICAgIH0sYXBpLmhvc3QpLFxcbiAgICBjb2xfdHlwZTpcXFwidGV4dF8xXFxcIlxcbn0pO1xcbmRhdGEucHVzaCh7XFxuICAgIHRpdGxlOlxcXCLlkIzmraXmj5DkuqTkupHku5PlupPotKblj7flr4bnoIFcXFwiLFxcbiAgICB1cmw6XFxcInJ1bGU6Ly9cXFwiK2Jhc2U2NEVuY29kZShcXFwi77+lcHVibGlzaF9hY2NvdW5077+lXFxcIit1c2VybmFtZStcXFwiQFxcXCIrcGFzc3dvcmQpLFxcbiAgICBjb2xfdHlwZTpcXFwidGV4dF8xXFxcIlxcbn0pO1xcbmRhdGEucHVzaCh7XFxuICAgIGNvbF90eXBlOlxcXCJsaW5lX2JsYW5rXFxcIlxcbn0pO1xcbmRhdGEucHVzaCh7XFxuICAgIHRpdGxlOlxcXCLkvaDkuIDlhbHlj5HluIPkuobjgIxcXFwiK2Rldi5ydWxlX251bStcXFwi44CN5p2h6KeE5YiZXFxcIixcXG4gICAgdXJsOlxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgY29sX3R5cGU6XFxcInRleHRfMVxcXCJcXG59KTtcXG5kYXRhLnB1c2goe1xcbiAgICBjb2xfdHlwZTpcXFwibGluZV9ibGFua1xcXCJcXG59KTtcXG5sZXQgdXNlciA9IGdldEZpbGUoKTtcXG5kYXRhLnB1c2goe1xcbiAgICB0aXRsZTpcXFwi5rOo6ZSA55m75b2VXFxcIixcXG4gICAgdXJsOiQoXFxcIuehruiupOazqOmUgOeZu+W9lT9cXFwiKS5jb25maXJtKGYgPT4ge1xcbiAgICAgICAgZi51c2VybmFtZT1cXFwiXFxcIjtcXG4gICAgICAgIGYucGFzc3dvcmQ9XFxcIlxcXCI7XFxuICAgICAgICB3cml0ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvV2FyZWhvdXNlVVNFUi5qc29uJywgSlNPTi5zdHJpbmdpZnkoZikpO1xcbiAgICAgICAgcHV0VmFyKFxcXCJXYXJlaG91c2UuYmFja1xcXCIsXFxcIjFcXFwiKTtcXG4gICAgICAgIGJhY2soKTtcXG4gICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lt7Lms6jplIBcXFwiO1xcbiAgICB9LHVzZXIpLFxcbiAgICBjb2xfdHlwZTpcXFwidGV4dF9jZW50ZXJfMVxcXCJcXG59KTtcXG5zZXRSZXN1bHQoZGF0YSk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmm7TmlLnkuKrkurrotYTmlplcIixcInBhdGhcIjpcIm1vZGlmeV9QZXJzb25hbERhdGFcIixcInJ1bGVcIjpcImpzOlxcbmNvbnN0IHtcXG4gICAgZ2V0QXBpLFxcbiAgICBjb2xvcixcXG4gICAgc21hbGwsXFxuICAgIGdldEZpbGUsXFxuICAgIGh0bWxUYWdcXG59ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdXRpbGl5XFxcIik7XFxubGV0IHtcXG4gICAgZGV2LFxcbiAgICB1c2VybmFtZSxcXG4gICAgcGFzc3dvcmQsXFxuICAgIFBhdHRlcm5cXG59ID0gTVlfUEFSQU1TO1xcbnZhciBkYXRhID0gW107XFxubGV0IHBhdGggPSBcXFwiP3FxPVxcXCIgKyB1c2VybmFtZSArIFxcXCImcGFzc3dvcmQ9XFxcIiArIHBhc3N3b3JkO1xcbmFkZExpc3RlbmVyKCdvbkNsb3NlJywgJC50b1N0cmluZygoKSA9PiB7XFxuICAgIGNsZWFyVmFyKFxcXCJXYXJlaG91c2UubS5wZXROYW1lXFxcIik7XFxuICAgIGNsZWFyVmFyKFxcXCJXYXJlaG91c2UubS5hdmF0YXJcXFwiKTtcXG4gICAgY2xlYXJWYXIoXFxcIldhcmVob3VzZS5tLlBhc3N3b3JkLmNcXFwiKTtcXG4gICAgY2xlYXJWYXIoXFxcIldhcmVob3VzZS5tLlBhc3N3b3JkLnhcXFwiKTtcXG4gICAgY2xlYXJWYXIoXFxcIldhcmVob3VzZS5tLlBhc3N3b3JkLnlcXFwiKTtcXG59KSk7XFxuZnVuY3Rpb24gbV9wZXROYW1lKCkge1xcbiAgICBkYXRhLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6IFxcXCJsaW5lX2JsYW5rXFxcIlxcbiAgICB9KTtcXG4gICAgZGF0YS5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICAgICAgZGVzYzogXFxcIuivt+i+k+WFpeaWsOaYteensFxcXCIsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRWYXIoJ1dhcmVob3VzZS5tLnBldE5hbWUnLCAnJyl8fGRldi5uYW1lLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiAncHV0VmFyKFxcXCJXYXJlaG91c2UubS5wZXROYW1lXFxcIixpbnB1dCknXFxuICAgICAgICB9XFxuICAgIH0pO1xcbiAgICBkYXRhLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6IFxcXCJsaW5lX2JsYW5rXFxcIlxcbiAgICB9KTtcXG4gICAgZGF0YS5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5L+d5a2YXFxcIixcXG4gICAgICAgIHVybDogJChnZXRBcGkoXFxcIm1vZGlmeV9uYW1lXFxcIikgKyBwYXRoKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgbGV0IG5ld1BldE5hbWUgPSBnZXRWYXIoJ1dhcmVob3VzZS5tLnBldE5hbWUnLCAnJyk7XFxuICAgICAgICAgICAgaWYgKG5ld1BldE5hbWUgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S9oOi/mOS7gOS5iOmDveayoeWhq+WViiFcXFwiO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gcmVxdWVzdChpbnB1dCArIFxcXCImbmFtZT1cXFwiICsgZW5jb2RlVVJJQ29tcG9uZW50KG5ld1BldE5hbWUpKTtcXG4gICAgICAgICAgICByZXN1bHQgPSBKU09OLnBhcnNlKHJlc3VsdCk7XFxuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IDApIHtcXG4gICAgICAgICAgICAgICAgYmFjaygpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5L+u5pS55oiQ5YqfXFxcIjtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8vXFxcIiArIHJlc3VsdC5kZXRhaWw7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxuICAgIH0pO1xcbn1cXG5cXG5mdW5jdGlvbiBtX2F2YXRhcigpIHtcXG4gICAgZGF0YS5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiBcXFwibGluZV9ibGFua1xcXCJcXG4gICAgfSk7XFxuICAgIGRhdGEucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgICAgIGRlc2M6IFxcXCLor7fovpPlhaXmlrDnmoTlpLTlg4/pk77mjqVcXFwiLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0VmFyKCdXYXJlaG91c2UubS5hdmF0YXInLCAnJykgfHwgZGV2LmF2YXRhcixcXG4gICAgICAgICAgICBvbkNoYW5nZTogJ3B1dFZhcihcXFwiV2FyZWhvdXNlLm0uYXZhdGFyXFxcIixpbnB1dCknXFxuICAgICAgICB9XFxuICAgIH0pO1xcbiAgICBkYXRhLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6IFxcXCJsaW5lX2JsYW5rXFxcIlxcbiAgICB9KTtcXG4gICAgZGF0YS5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5L+d5a2YXFxcIixcXG4gICAgICAgIHVybDogJChnZXRBcGkoXFxcIm1vZGlmeV9hdmFcXFwiKSArIHBhdGgpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICBsZXQgbmV3QXZhdGFyID0gZ2V0VmFyKCdXYXJlaG91c2UubS5hdmF0YXInLCAnJyk7XFxuICAgICAgICAgICAgXFxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHJlcXVlc3QoaW5wdXQgKyBcXFwiJmF2YXRhcl91cmw9XFxcIiArIGVuY29kZVVSSUNvbXBvbmVudChuZXdBdmF0YXIpKTtcXG4gICAgICAgICAgICByZXN1bHQgPSBKU09OLnBhcnNlKHJlc3VsdCk7XFxuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IDApIHtcXG4gICAgICAgICAgICAgICAgYmFjaygpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5L+u5pS55oiQ5YqfXFxcIjtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8vXFxcIiArIHJlc3VsdC5kZXRhaWw7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxuICAgIH0pO1xcbn1cXG5cXG5mdW5jdGlvbiBtX3B3ZCgpIHtcXG4gICAgZGF0YS5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiBcXFwibGluZV9ibGFua1xcXCJcXG4gICAgfSk7XFxuICAgIGRhdGEucHVzaCh7XFxuICAgICAgICB0aXRsZTpcXFwi5Y6f5a+G56CBXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICAgICAgZGVzYzogXFxcIuivt+i+k+WFpeWOn+WvhueggVxcXCIsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIHR5cGU6XFxcInBhc3N3b3JkXFxcIixcXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldFZhcignV2FyZWhvdXNlLm0uUGFzc3dvcmQueScsICcnKSxcXG4gICAgICAgICAgICBvbkNoYW5nZTogJ3B1dFZhcihcXFwiV2FyZWhvdXNlLm0uUGFzc3dvcmQueVxcXCIsaW5wdXQpJ1xcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgZGF0YS5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiBcXFwibGluZV9ibGFua1xcXCJcXG4gICAgfSk7XFxuICAgIGRhdGEucHVzaCh7XFxuICAgICAgICB0aXRsZTpcXFwi5paw5a+G56CBXFxcIixcXG4gICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICAgICAgZGVzYzogXFxcIuivt+i+k+WFpeaWsOWvhueggVxcXCIsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIHR5cGU6XFxcInBhc3N3b3JkXFxcIixcXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldFZhcignV2FyZWhvdXNlLm0uUGFzc3dvcmQueCcsICcnKSxcXG4gICAgICAgICAgICBvbkNoYW5nZTogJ3B1dFZhcihcXFwiV2FyZWhvdXNlLm0uUGFzc3dvcmQueFxcXCIsaW5wdXQpJ1xcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgZGF0YS5wdXNoKHtcXG4gICAgICAgIHRpdGxlOlxcXCLph43lpI3mlrDlr4bnoIFcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6ICdpbnB1dCcsXFxuICAgICAgICBkZXNjOiBcXFwi6K+36YeN5aSN5paw5a+G56CBXFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgdHlwZTpcXFwicGFzc3dvcmRcXFwiLFxcbiAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRWYXIoJ1dhcmVob3VzZS5tLlBhc3N3b3JkLmMnLCAnJyksXFxuICAgICAgICAgICAgb25DaGFuZ2U6ICdwdXRWYXIoXFxcIldhcmVob3VzZS5tLlBhc3N3b3JkLmNcXFwiLGlucHV0KSdcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuICAgIGRhdGEucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogXFxcImxpbmVfYmxhbmtcXFwiXFxuICAgIH0pO1xcbiAgICBkYXRhLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLkv53lrZhcXFwiLFxcbiAgICAgICAgdXJsOiAkKGdldEFwaShcXFwibW9kaWZ5X3B3ZFxcXCIpK3BhdGgpLmxhenlSdWxlKChwYXNzd29yZCx1c2VybmFtZSkgPT4ge1xcbiAgICAgICAgICAgIGxldCBvbGRfcGFzc3dvcmQgPSBnZXRWYXIoJ1dhcmVob3VzZS5tLlBhc3N3b3JkLnknLCAnJyk7XFxuICAgICAgICAgICAgbGV0IG5ld19wYXNzd29yZCA9IGdldFZhcignV2FyZWhvdXNlLm0uUGFzc3dvcmQueCcsICcnKTtcXG4gICAgICAgICAgICBsZXQgbmV3X3Bhc3N3b3JkX2FnYWluID0gZ2V0VmFyKCdXYXJlaG91c2UubS5QYXNzd29yZC5jJywgJycpO1xcbiAgICAgICAgICAgIGlmIChvbGRfcGFzc3dvcmQhPT1wYXNzd29yZCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5Y6f5a+G56CB6ZSZ6K+vXFxcIjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYobmV3X3Bhc3N3b3JkPT09XFxcIlxcXCIpe1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6K+36L6T5YWl5paw5a+G56CBXFxcIjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYobmV3X3Bhc3N3b3JkIT09bmV3X3Bhc3N3b3JkX2FnYWluKXtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S4pOasoeWvhueggeS4jeWQjFxcXCJcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHJlcXVlc3QoaW5wdXQgKyBcXFwiJm5ld19wYXNzd29yZD1cXFwiICsgbmV3X3Bhc3N3b3JkK1xcXCImbmV3X3Bhc3N3b3JkX3JlPVxcXCIrbmV3X3Bhc3N3b3JkX2FnYWluKTtcXG4gICAgICAgICAgICByZXN1bHQgPSBKU09OLnBhcnNlKHJlc3VsdCk7XFxuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IDApIHtcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL1dhcmVob3VzZVVTRVIuanNvblxcXCIsSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICAgICAgdXNlcm5hbWU6dXNlcm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICBwYXNzd29yZDpuZXdfcGFzc3dvcmRcXG4gICAgICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgICAgICAgICBiYWNrKCk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/kv67mlLnmiJDlip9cXFwiO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9cXFwiICsgcmVzdWx0LmRldGFpbDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LHBhc3N3b3JkLHVzZXJuYW1lKSxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG4gICAgfSk7XFxufVxcblxcbnN3aXRjaCAoUGF0dGVybikge1xcbiAgICBjYXNlIDA6XFxuICAgICAgICBzZXRQYWdlVGl0bGUoXFxcIuS/ruaUueWktOWDj1xcXCIpO1xcbiAgICAgICAgbV9hdmF0YXIoKTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlIDE6XFxuICAgICAgICBzZXRQYWdlVGl0bGUoXFxcIuS/ruaUueaYteensFxcXCIpO1xcbiAgICAgICAgbV9wZXROYW1lKCk7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAyOlxcbiAgICAgICAgc2V0UGFnZVRpdGxlKFxcXCLkv67mlLnlr4bnoIFcXFwiKTtcXG4gICAgICAgIG1fcHdkKCk7XFxuICAgICAgICBicmVhaztcXG59XFxuc2V0UmVzdWx0KGRhdGEpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi57yW6L6R6KeE5YiZ5aSH5rOoXCIsXCJwYXRoXCI6XCJzZXRfcnVsZV9ub3Rlc1wiLFwicnVsZVwiOlwianM6XFxubGV0IGRhdGEgPSBbXTtcXG5jb25zdCB7XFxuICAgIGdldEFwaVxcbn0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS91dGlsaXlcXFwiKTtcXG5sZXQge1xcbiAgICBpZCxcXG4gICAgdXNlcm5hbWUsXFxuICAgIHBhc3N3b3JkLFxcbiAgICBuYW1lXFxufSA9IE1ZX1BBUkFNUztcXG5zZXRQYWdlVGl0bGUoXFxcIuWkh+azqOOAjFxcXCIrbmFtZStcXFwi44CNXFxcIik7XFxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLFxcXCJjbGVhclZhcignV2FyZWhvdXNlLnJ1bGUubm90ZXMnLCAnJylcXFwiKTtcXG5sZXQgbm90ZXM9cmVxdWVzdChnZXRBcGkoXFxcImdldF9ydWxlX25vdGVcXFwiKStpZCk7XFxubm90ZXM9SlNPTi5wYXJzZShub3RlcykucmVzdWx0O1xcbmRhdGEucHVzaCh7XFxuICAgIGRlc2M6IFxcXCLop4TliJnlpIfms6guLi4uLi5cXFwiLFxcbiAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICBkZWZhdWx0VmFsdWU6IGdldFZhcignV2FyZWhvdXNlLnJ1bGUubm90ZXMnLCAnJyl8fG5vdGVzfHxcXFwiXFxcIixcXG4gICAgICAgIHR5cGU6IFxcXCJ0ZXh0YXJlYVxcXCIsXFxuICAgICAgICBoZWlnaHQ6LTEsXFxuICAgICAgICBvbkNoYW5nZTogJ3B1dFZhcihcXFwiV2FyZWhvdXNlLnJ1bGUubm90ZXNcXFwiLGlucHV0KSdcXG4gICAgfVxcbn0pO1xcblxcbmRhdGEucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi5L+d5a2YXFxcIixcXG4gICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgdXJsOiAkKGdldEFwaShcXFwic2V0X3J1bGVfbm90ZVxcXCIpICsgaWQpLmxhenlSdWxlKCh1c2VybmFtZSwgcGFzc3dvcmQpID0+IHtcXG4gICAgICAgIGxldCBub3RlcyA9IGdldFZhcignV2FyZWhvdXNlLnJ1bGUubm90ZXMnLCAnJyk7XFxuICAgICAgICBsZXQgcmVzdWx0ID0gcmVxdWVzdChpbnB1dCwge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICBcXFwicGFyYW1zXFxcIjoge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcInFxXFxcIjogdXNlcm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICBcXFwicGFzc3dvcmRcXFwiOiBwYXNzd29yZCxcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJub3RlXFxcIjpub3Rlc1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgICAgIH0pO1xcbiAgICAgICAgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXN1bHQpLnJlc3VsdDtcXG4gICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAwKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL1xcXCIgKyByZXN1bHQuZGV0YWlsO1xcbiAgICAgICAgfVxcbiAgICAgICAgYmFjayhmYWxzZSk7XFxuICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5L+u5pS55oiQ5YqfXFxcIjtcXG4gICAgfSwgdXNlcm5hbWUsIHBhc3N3b3JkKVxcbn0pO1xcbnNldFJlc3VsdChkYXRhKTtcIn0se1wiY29sX3R5cGVcIjpcImxpbmVcIixcIm5hbWVcIjpcIuivhOiuuuWIl+ihqFwiLFwicGF0aFwiOlwiQ29tbWVudFwiLFwicnVsZVwiOlwianM6XFxuc2V0UGFnZVRpdGxlKFxcXCLor4TorrrliJfooahcXFwiKTtcXG5jb25zdCB7XFxuICAgIGFwaVxcbn0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS91dGlsaXlcXFwiKTtcXG5sZXQgZGF0YSA9IFtdO1xcbmxldCB7XFxuICAgIHRvdGFsU3VtLFxcbiAgICBpZCxcXG4gICAgbm9fYWN0aXZlLFxcbiAgICB1c2VybmFtZSxcXG4gICAgcGFzc3dvcmRcXG59ID0gTVlfUEFSQU1TO1xcbmxldCBwYWdlID0gcGFyc2VJbnQoTVlfVVJMLnNwbGl0KFxcXCIjXFxcIilbMV0pO1xcbmxldCBkaXNjdXNzX3R5cGUgPSBnZXRWYXIoXFxcIldhcmVob3VzZS5jb21tZW50LmRpc2N1c3NfdHlwZVxcXCIsIFxcXCJcXFwiKTtcXG5pZiAocGFnZSA9PT0gMSkge1xcbiAgICBkYXRhLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6IFxcXCJsaW5lX2JsYW5rXFxcIlxcbiAgICB9KTtcXG4gICAgYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgIHB1dFZhcihcXFwiV2FyZWhvdXNlLmNvbW1lbnQuZGlzY3Vzc190eXBlXFxcIiwgXFxcIlxcXCIpO1xcbiAgICB9KSk7XFxuICAgIGRhdGEucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuWFqOmDqFxcXCIgKyAoZGlzY3Vzc190eXBlID09PSBcXFwiXFxcIiA/IFxcXCLil4lcXFwiIDogXFxcIuKXi1xcXCIpLFxcbiAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICBwdXRWYXIoXFxcIldhcmVob3VzZS5jb21tZW50LmRpc2N1c3NfdHlwZVxcXCIsIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICB9KSxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF80J1xcblxcbiAgICB9KTtcXG4gICAgZGF0YS5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi8J+Rjei1nlxcXCIgKyAoZGlzY3Vzc190eXBlID09PSBcXFwiZ29vZFxcXCIgPyBcXFwi4peJXFxcIiA6IFxcXCLil4tcXFwiKSxcXG4gICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgcHV0VmFyKFxcXCJXYXJlaG91c2UuY29tbWVudC5kaXNjdXNzX3R5cGVcXFwiLCBcXFwiZ29vZFxcXCIpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzQnXFxuXFxuICAgIH0pO1xcbiAgICBkYXRhLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLwn5GO6LipXFxcIiArIChkaXNjdXNzX3R5cGUgPT09IFxcXCJiYWRcXFwiID8gXFxcIuKXiVxcXCIgOiBcXFwi4peLXFxcIiksXFxuICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgIHB1dFZhcihcXFwiV2FyZWhvdXNlLmNvbW1lbnQuZGlzY3Vzc190eXBlXFxcIiwgXFxcImJhZFxcXCIpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzQnXFxuICAgIH0pO1xcbiAgICBkYXRhLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCLlm57lpI1cXFwiICsgKGRpc2N1c3NfdHlwZSA9PT0gXFxcInJlcGx5XFxcIiA/IFxcXCLil4lcXFwiIDogXFxcIuKXi1xcXCIpLFxcbiAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICBwdXRWYXIoXFxcIldhcmVob3VzZS5jb21tZW50LmRpc2N1c3NfdHlwZVxcXCIsIFxcXCJyZXBseVxcXCIpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgIH0pLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzQnXFxuICAgIH0pO1xcbn1cXG5cXG5cXG5sZXQgaWNvbiA9IHtcXG4gICAgXFxcImdvb2RcXFwiOiBcXFwi8J+RjVxcXCIsXFxuICAgIFxcXCJiYWRcXFwiOiBcXFwi8J+RjlxcXCIsXFxuICAgIFxcXCJyZXBseVxcXCI6XFxcIuW8gOWPkeiAhfCfl6NcXFwiXFxufVxcbmxldCBjb250cm9sPShwaWQsYWN0aXZlKT0+dm9pZCAwO1xcbmlmKG5vX2FjdGl2ZSl7XFxuICAgIGNvbnRyb2w9ZnVuY3Rpb24ocGlkLGFjdGl2ZSl7XFxuICAgICAgICBkYXRhLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOmFjdGl2ZT9cXFwi6ZqQ6JeP6K+E6K66XFxcIjpcXFwi5bGV56S66K+E6K66XFxcIixcXG4gICAgICAgICAgICB1cmw6JChhcGkuZGlzX2Rldl9jb250cm9sK3BpZCtcXFwiP3FxPVxcXCIgKyB1c2VybmFtZSArIFxcXCImcGFzc3dvcmQ9XFxcIiArIHBhc3N3b3JkK1xcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCgpPT57XFxuICAgICAgICAgICAgICAgIGxldCByZXN1bHQ9SlNPTi5wYXJzZShyZXF1ZXN0KGlucHV0KSk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8vXFxcIityZXN1bHQuZGV0YWlsO1xcbiAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgIGNvbF90eXBlOlxcXCJ0ZXh0XzJcXFwiXFxuICAgICAgICB9KTtcXG4gICAgICAgIGRhdGEucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6XFxcIuWIoOmZpOivhOiuulxcXCIsXFxuICAgICAgICAgICAgdXJsOiQoXFxcIuehruiupOWIoOmZpOivpeivhOiuuj9cXFwiKS5jb25maXJtKChpbnB1dCk9PntcXG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdD1KU09OLnBhcnNlKHJlcXVlc3QoaW5wdXQpKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9cXFwiK3Jlc3VsdC5kZXRhaWw7XFxuICAgICAgICAgICAgfSxhcGkuZGlzX2Rldl9jb250cm9sK3BpZCtcXFwiP3FxPVxcXCIgKyB1c2VybmFtZSArIFxcXCImcGFzc3dvcmQ9XFxcIiArIHBhc3N3b3JkK1xcXCImZGVsZXRlPTFcXFwiKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTpcXFwidGV4dF8yXFxcIlxcbiAgICAgICAgfSk7XFxuICAgICAgICBkYXRhLnB1c2goe1xcbiAgICAgICAgICAgIGNvbF90eXBlOlxcXCJsaW5lXFxcIlxcbiAgICAgICAgfSk7XFxuICAgICAgICBkYXRhLnB1c2goe1xcbiAgICAgICAgICAgIGNvbF90eXBlOlxcXCJsaW5lXFxcIlxcbiAgICAgICAgfSk7XFxuICAgIH1cXG59XFxuaWYgKHRvdGFsU3VtID09PSAwKSB7XFxuICAgIGRhdGEucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIjxoNSBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPuS4gOadoeivhOiuuuS5n+ayoeacie+8jOW/q+adpeaKouaymeWPkeWQp++8gTwvaDU+XFxcIixcXG4gICAgICAgIGNvbF90eXBlOiBcXFwicmljaF90ZXh0XFxcIlxcbiAgICB9KTtcXG59IGVsc2Uge1xcbiAgICBsZXQgY29tbWVudExpc3QgPSBKU09OLnBhcnNlKHJlcXVlc3QoYXBpLmRpc19nZXQgKyBpZCArIFxcXCI/bGltaXQ9NSZwYWdlPVxcXCIgKyBwYWdlICsgXFxcIiZub19hY3RpdmU9XFxcIiArIG5vX2FjdGl2ZSArIFxcXCImZGlzY3Vzc190eXBlPVxcXCIgKyBkaXNjdXNzX3R5cGUpKS5yZXN1bHQ7XFxuICAgIGZvciAobGV0IGl0ZW0gb2YgY29tbWVudExpc3QpIHtcXG4gICAgICAgIGxldCBSZXBseSA9IGl0ZW0uZGlzY3Vzc190eXBlPT09XFxcInJlcGx5XFxcIiYmaXRlbS5yZXBseV90b19uYW1lIT09ZmFsc2UmJml0ZW0ucmVwbHlfdG9faWQhPT1mYWxzZT9cXFwi4oCY4oCY5Zue5aSNQFxcXCIraXRlbS5yZXBseV90b19uYW1lK1xcXCIgI1xcXCIraXRlbS5kaXNjdXNzX2lkK1xcXCLigJnigJlcXFxcblxcXCI6XFxcIlxcXCI7XFxuICAgICAgICBkYXRhLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBpdGVtLm5hbWUgKyBcXFwiJm5ic3A7Jm5ic3A7PGZvbnQgY29sb3I9J2dyYXknPjxzbWFsbD4jXFxcIiArIGl0ZW0uaWQgKyBcXFwiPC9zbWFsbD48Zm9udD5cXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgICAgICB1cmw6IG5vX2FjdGl2ZT9cXFwiaGlrZXI6Ly9wYWdlL1JlcGx5XFxcIjpcXFwidG9hc3Q6Ly9cXFwiICsgaXRlbS5xcSxcXG4gICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICAgIHJ1bGVJZDogaWQsXFxuICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQ6IHBhc3N3b3JkLFxcbiAgICAgICAgICAgICAgICB1c2VybmFtZTogdXNlcm5hbWUsXFxuICAgICAgICAgICAgICAgIHJlcGx5SWQ6aXRlbS5pZFxcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgcGljX3VybDogaXRlbS5hdmF0YXJfdXJsXFxuICAgICAgICB9KTtcXG4gICAgICAgIGRhdGEucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGl0ZW0uZGlzY3Vzc190ZXh0LFxcbiAgICAgICAgICAgIGRlc2M6IFJlcGx5K2l0ZW0uY3JlYXRlX2RhdGUgKyBcXFwiwrdcXFwiICsgaWNvbltpdGVtLmRpc2N1c3NfdHlwZV0sXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzFcXFwiLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9pbmZvXFxcIixcXG4gICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICAgIG5hbWU6aXRlbS5uYW1lLFxcbiAgICAgICAgICAgICAgICB0eXBlOlxcXCJsb25nX3RleHRcXFwiLFxcbiAgICAgICAgICAgICAgICB0ZXh0Oml0ZW0uZGlzY3Vzc190ZXh0XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBwaWNfdXJsOiBpdGVtLmF2YXRhcl91cmxcXG4gICAgICAgIH0pO1xcbiAgICAgICAgY29udHJvbChpdGVtLmlkLGl0ZW0uYWN0aXZlKTtcXG4gICAgfVxcbiAgICBpZiAoY29tbWVudExpc3QubGVuZ3RoID09PSAwKSB7XFxuICAgICAgICBkYXRhLnB1c2goe1xcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwibGluZV9ibGFua1xcXCJcXG4gICAgICAgIH0pO1xcbiAgICB9XFxufVxcblxcbnNldFJlc3VsdChkYXRhKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5Y+R6KGo6K+E6K66XCIsXCJwYXRoXCI6XCJNYWtlQWNvbW1lbnRcIixcInJ1bGVcIjpcImpzOlxcbmxldCBkYXRhID0gW107XFxuY29uc3Qge1xcbiAgICBhcGksXFxuICAgIGdldEZpbGVcXG59ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdXRpbGl5XFxcIik7XFxubGV0IHtcXG4gICAgaWQsXFxuICAgIG5hbWUsXFxuICAgIGRlZmF1bHRUeXBlXFxufSA9IE1ZX1BBUkFNUztcXG5sZXQgdXNlcj1nZXRGaWxlKCkudXNlcnx8W1xcXCJcXFwiLFxcXCJcXFwiXTtcXG5cXG5zZXRQYWdlVGl0bGUoXFxcIuivhOiuuihcXFwiICsgbmFtZSArIFxcXCIpXFxcIik7XFxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgY2xlYXJWYXIoXFxcIldhcmVob3VzZS5jb21tZW50LnR5cGVcXFwiKTtcXG4gICAgY2xlYXJWYXIoXFxcIldhcmVob3VzZS5jb21tZW50LnRleHRcXFwiKTtcXG4gICAgY2xlYXJWYXIoXFxcIldhcmVob3VzZS5jb21tZW50LnFxXFxcIik7XFxuICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG59KSk7XFxubGV0IHR5cGUgPSBnZXRWYXIoXFxcIldhcmVob3VzZS5jb21tZW50LnR5cGVcXFwiKSB8fCBkZWZhdWx0VHlwZXx8XFxcImdvb2RcXFwiO1xcbmRhdGEucHVzaCh7XFxuICAgIGRlc2M6IFxcXCLor4TorrouLi4uLi5cXFwiLFxcbiAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICBkZWZhdWx0VmFsdWU6IGdldFZhcignV2FyZWhvdXNlLmNvbW1lbnQudGV4dCcsICcnKSxcXG4gICAgICAgIHR5cGU6IFxcXCJ0ZXh0YXJlYVxcXCIsXFxuICAgICAgICBoZWlnaHQ6NyxcXG4gICAgICAgIG9uQ2hhbmdlOiAncHV0VmFyKFxcXCJXYXJlaG91c2UuY29tbWVudC50ZXh0XFxcIixpbnB1dCknXFxuICAgIH1cXG59KTtcXG5kYXRhLnB1c2goe1xcbiAgICB0aXRsZTpcXFwi6LSm5Y+377yaXFxcIisodXNlclswXXx8XFxcIlxcXCIpLFxcbiAgICBkZXNjOlxcXCLpqozor4HnoIHvvJpcXFwiKyh1c2VyWzFdfHxcXFwiXFxcIiksXFxuICAgIHVybDpcXFwiaGlrZXI6Ly9wYWdlL1VzZXJyZWdpc3RyYXRpb25cXFwiLFxcbiAgICBjb2xfdHlwZTogJ3RleHRfMScsXFxuICAgIFxcbn0pO1xcblxcbmRhdGEucHVzaCh7XFxuICAgIHRpdGxlOiAgKHR5cGUgPT09IFxcXCJnb29kXFxcIiA/IFxcXCLil4lcXFwiIDogXFxcIuKXi1xcXCIpK1xcXCIg8J+RjVxcXCIsXFxuICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICBwdXRWYXIoXFxcIldhcmVob3VzZS5jb21tZW50LnR5cGVcXFwiLCBcXFwiZ29vZFxcXCIpO1xcbiAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogJ3RleHRfMidcXG5cXG59KTtcXG5kYXRhLnB1c2goe1xcbiAgICB0aXRsZTogICh0eXBlID09PSBcXFwiYmFkXFxcIiA/IFxcXCLil4lcXFwiIDogXFxcIuKXi1xcXCIpK1xcXCIg8J+RjlxcXCIsXFxuICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICBwdXRWYXIoXFxcIldhcmVob3VzZS5jb21tZW50LnR5cGVcXFwiLCBcXFwiYmFkXFxcIik7XFxuICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgfSksXFxuICAgIGNvbF90eXBlOiAndGV4dF8yJ1xcbn0pO1xcblxcbmRhdGEucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi5o+Q5LqkXFxcIixcXG4gICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgdXJsOiAkKGFwaS5kaXNfbmV3ICsgaWQpLmxhenlSdWxlKChBY2NvdW50KSA9PiB7XFxuICAgICAgICBsZXQgdGV4dCA9IGdldFZhcignV2FyZWhvdXNlLmNvbW1lbnQudGV4dCcsICcnKTtcXG4gICAgICAgIGxldCBbcXEsYXV0aF9jb2RlXSA9IEFjY291bnQ7XFxuICAgICAgICBsZXQgdHlwZSA9IGdldFZhcignV2FyZWhvdXNlLmNvbW1lbnQudHlwZScpIHx8ICdnb29kJztcXG4gICAgICAgIHFxPXFxfHxcXFwiXFxcIjtcXG4gICAgICAgIGF1dGhfY29kZT1hdXRoX2NvZGV8fFxcXCJcXFwiO1xcbiAgICAgICAgaWYocXE9PVxcXCJcXFwifHxhdXRoX2NvZGU9PVxcXCJcXFwiKXtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5pyq55m75b2V6LSm5Y+3XFxcIjtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmKHRleHQ9PVxcXCJcXFwiKXtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5L2g6L+Y5LuA5LmI6YO95rKh5YaZ5ZWKXFxcIjtcXG4gICAgICAgIH1cXG4gICAgICAgIGZ1bmN0aW9uIHIocCkge1xcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSByZXF1ZXN0KGlucHV0LCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocCksXFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UocmVzdWx0KS5yZXN1bHQ7XFxuICAgICAgICB9XFxuICAgICAgICBsZXQgcCA9IHtcXG4gICAgICAgICAgICBcXFwicGFyYW1zXFxcIjoge1xcbiAgICAgICAgICAgICAgICBcXFwiZGlzY3Vzc190ZXh0XFxcIjogdGV4dCxcXG4gICAgICAgICAgICAgICAgXFxcInFxXFxcIjogcXEsXFxuICAgICAgICAgICAgICAgIFxcXCJkaXNjdXNzX3R5cGVcXFwiOiB0eXBlLFxcbiAgICAgICAgICAgICAgICBcXFwiYXV0aF9jb2RlXFxcIjogYXV0aF9jb2RlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgbGV0IHJlc3VsdCA9IHIocCk7XFxuICAgICAgICBpZihyZXN1bHQuc3RhdHVzPT09MCl7XFxuICAgICAgICAgICAgYmFjayhmYWxzZSk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8vXFxcIityZXN1bHQuZGV0YWlsO1xcblxcbiAgICB9LHVzZXIpXFxufSk7XFxuXFxuc2V0UmVzdWx0KGRhdGEpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5Lyq55So5oi35rOo5YaMXCIsXCJwYXRoXCI6XCJVc2VycmVnaXN0cmF0aW9uXCIsXCJydWxlXCI6XCJqczpcXG5jb25zdCB7XFxuICAgIGFwaSxcXG4gICAgZ2V0RmlsZSxcXG4gICAgZ2V0VXNlckRhdGVcXG59ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdXRpbGl5XFxcIik7XFxubGV0IGRhdGEgPSBbXTtcXG5kYXRhLnB1c2goe1xcbiAgICBjb2xfdHlwZTogXFxcImxpbmVfYmxhbmtcXFwiXFxufSk7XFxuc2V0UGFnZVRpdGxlKFxcXCLnlKjmiLfliJfooajnrqHnkIZcXFwiKTtcXG5hZGRMaXN0ZW5lcignb25DbG9zZScsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICBjbGVhclZhcihcXFwiV2FyZWhvdXNlLm0ucXFcXFwiKTtcXG4gICAgY2xlYXJWYXIoXFxcIldhcmVob3VzZS5tLnl6bVxcXCIpO1xcbn0pKTtcXG5sZXQgdXNlciA9IGdldEZpbGUoKTtcXG5sZXQgdXNlck5hbWUgPSB1c2VyLnVzZXIgfHwgW1xcXCJcXFwiXTtcXG51c2VyTmFtZSA9IHVzZXJOYW1lWzBdO1xcbmRhdGEucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdPGJpZz4o5re75YqgL+mqjOivgSnotKblj7c8L2JpZz5cXFwiLFxcbiAgICBjb2xfdHlwZTogXFxcInRleHRfMVxcXCIsXFxuICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxufSk7XFxuXFxuZGF0YS5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCLojrflj5ZcXFwiLFxcbiAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgZGVzYzogXFxcIuivt+i+k+WFpXFxXFxcIixcXG4gICAgdXJsOiAkLnRvU3RyaW5nKChhLCBiKSA9PiB7XFxuICAgICAgICBsZXQgcXEgPSBpbnB1dDtcXG4gICAgICAgIGlmIChxcSA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/kvaDov5jku4DkuYjpg73msqHloavllYohXFxcIjtcXG4gICAgICAgIH1cXG4gICAgICAgIHNob3dMb2FkaW5nKFxcXCLojrflj5bkuK0uLi5cXFwiKVxcbiAgICAgICAgcmV0dXJuICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKHFxLCBhLCBiKSA9PiB7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSByZXF1ZXN0KGEsIHtcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICBcXFwicGFyYW1zXFxcIjoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJxcVxcXCI6IHFxXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHJlc3VsdCA9IEpTT04ucGFyc2UocmVzdWx0KS5yZXN1bHQ7XFxuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IDApIHtcXG4gICAgICAgICAgICAgICAgaGlkZUxvYWRpbmcoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL1xcXCIgKyByZXN1bHQuZGV0YWlsO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGxldCByZXN1bHQyID0gSlNPTi5wYXJzZShyZXF1ZXN0KGIgKyBcXFwiP3FxPVxcXCIgKyBxcSkpO1xcbiAgICAgICAgICAgICAgICBoaWRlTG9hZGluZygpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8vXFxcIiArIHJlc3VsdDIuZGV0YWlsO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICBoaWRlTG9hZGluZygpO1xcbiAgICAgICAgICAgIHRocm93IGU7XFxuICAgICAgICB9XFxuICAgICAgICB9LCBxcSwgYSwgYik7XFxuXFxuICAgIH0sIGFwaS5kaXNfbmV3X3VzZXIsIGFwaS5kaXNfdmVyaWZ5KSxcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIHR5cGU6IFxcXCJudW1iZXJcXFwiLFxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRWYXIoJ1dhcmVob3VzZS5tLnFxJywgJycpIHx8IHVzZXJOYW1lLFxcbiAgICAgICAgb25DaGFuZ2U6ICdwdXRWYXIoXFxcIldhcmVob3VzZS5tLnFxXFxcIixpbnB1dCknXFxuICAgIH1cXG59KTtcXG5cXG5kYXRhLnB1c2goe1xcbiAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgZGVzYzogXFxcIuivt+i+k+WFpemqjOivgeeggVxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRWYXIoJ1dhcmVob3VzZS5tLnl6bScsICcnKSxcXG4gICAgICAgIG9uQ2hhbmdlOiAncHV0VmFyKFxcXCJXYXJlaG91c2UubS55em1cXFwiLGlucHV0KSdcXG4gICAgfVxcbn0pO1xcbmRhdGEucHVzaCh7XFxuICAgIGNvbF90eXBlOiAncmljaF90ZXh0JyxcXG4gICAgdGl0bGU6IFxcXCI8c21hbGw+5o+Q56S677yaMS7mr4/lpKnlj6rog73ojrflj5Y15qyh6aqM6K+B56CBLjxicj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsyLjxzPumqjOivgeeggeacieaViOacn+aMgee7reS4gOWRqOW3puWPszwvcz4o5pqC5pe25LiN5Lya77yM5b+Y6K6w6aqM6K+B56CB5Y+v6YCa6L+HUVHlj7fojrflj5YpPC9zbWFsbD5cXFwiXFxufSk7XFxuXFxubGV0IHVzZXJMaXN0ID0gZ2V0VXNlckRhdGUoKTtcXG5kYXRhLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIumqjOivgS/nmbvlvZVcXFwiLFxcbiAgICB1cmw6ICQoXFxcIuehruWumuS/neWtmO+8jOmqjOivgeeggeWhq+mUme+8jOaXoOazleivhOiuuuWTplxcXCIpLmNvbmZpcm0oKGYsIGwsIGxvZ2luKSA9PiB7XFxuICAgICAgICBsZXQgcXEgPSBnZXRWYXIoJ1dhcmVob3VzZS5tLnFxJywgJycpO1xcbiAgICAgICAgbGV0IHl6bSA9IGdldFZhcignV2FyZWhvdXNlLm0ueXptJywgJycpO1xcbiAgICAgICAgaWYgKHFxID09IFxcXCJcXFwiIHx8IHl6bSA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9xceaIlumqjOivgeeggeS4uuepulxcXCI7XFxuICAgICAgICB9XFxuICAgICAgICBsZXQgcmVzdWx0ID0gcmVxdWVzdChsb2dpbiwge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICBcXFwicGFyYW1zXFxcIjoge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcInFxXFxcIjogcXEsXFxuICAgICAgICAgICAgICAgICAgICBcXFwiYXV0aF9jb2RlXFxcIjogeXptXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICByZXN1bHQgPSBKU09OLnBhcnNlKHJlc3VsdCkucmVzdWx0O1xcbiAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IDApIHtcXG4gICAgICAgICAgICBmLnVzZXIgPSBbcXEsIHl6bV07XFxuICAgICAgICAgICAgd3JpdGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL1dhcmVob3VzZVVTRVIuanNvblxcXCIsIEpTT04uc3RyaW5naWZ5KGYpKTtcXG4gICAgICAgICAgICBsZXQgaW5kZXggPSBsLmZpbmRJbmRleChpdGVtID0+IGl0ZW1bMF0gPT09IHFxKTtcXG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xcbiAgICAgICAgICAgICAgICBsLnNwbGljZShpbmRleCwgMSwgW3FxLCB5em1dKTtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGwubGVuZ3RoIDwgNikge1xcbiAgICAgICAgICAgICAgICBsLnB1c2goW3FxLCB5em1dKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBsLnNwbGljZSgwLCAxKTtcXG4gICAgICAgICAgICAgICAgbC5wdXNoKFtxcSwgeXptXSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHdyaXRlRmlsZShcXFwiaGlrZXI6Ly9maWxlcy9XYXJlaG91c2VVU0VSQS5qc29uXFxcIiwgSlNPTi5zdHJpbmdpZnkobCkpO1xcbiAgICAgICAgICAgIGJhY2soKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6aqM6K+B5oiQ5YqfXFxcIjtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9cXFwiICsgcmVzdWx0LmRldGFpbDtcXG4gICAgfSwgdXNlciwgdXNlckxpc3QsIGFwaS5kaXNfbG9naW4pLFxcbiAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxufSk7XFxuZGF0YS5wdXNoKHtcXG4gICAgY29sX3R5cGU6IFxcXCJsaW5lX2JsYW5rXFxcIlxcbn0pO1xcbmRhdGEucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi4oCc4oCc4oCd4oCdPGJpZz7otKblj7fliJfooag8L2JpZz5cXFxcdFxcXFx0XFxcXHQ8c21hbGw+KOS/neeVmTXmnaHorrDlvZUpPC9zbWFsbD5cXFwiLFxcbiAgICBjb2xfdHlwZTogXFxcInRleHRfMVxcXCIsXFxuICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxufSk7XFxudXNlckxpc3QucmV2ZXJzZSgpO1xcblxcbmZvciAobGV0IGl0ZW0gb2YgdXNlckxpc3QpIHtcXG4gICAgZGF0YS5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi6LSm5Y+377yaXFxcIiArIGl0ZW1bMF0gKyAodXNlck5hbWUgPT09IGl0ZW1bMF0gPyBcXFwiXFxcXHRcXFxcdFxcXFx04oCc4oCcW+W9k+WJjei0puWPt13igJ3igJ1cXFwiIDogXFxcIlxcXCIpLFxcbiAgICAgICAgZGVzYzogXFxcIumqjOivgeegge+8mlxcXCIgKyBpdGVtWzFdLFxcbiAgICAgICAgdXJsOiAkKFxcXCLmmK/lkKbliIfmjaLkuLror6VbXFxcIiArIGl0ZW1bMF0gKyBcXFwiXei0puWPt1xcXCIpLmNvbmZpcm0oKGYsIGl0ZW0pID0+IHtcXG4gICAgICAgICAgICBmLnVzZXIgPSBpdGVtO1xcbiAgICAgICAgICAgIHdyaXRlRmlsZShcXFwiaGlrZXI6Ly9maWxlcy9XYXJlaG91c2VVU0VSLmpzb25cXFwiLCBKU09OLnN0cmluZ2lmeShmKSk7XFxuICAgICAgICAgICAgYmFjaygpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/liIfmjaLmiJDlip9cXFwiO1xcbiAgICAgICAgfSwgdXNlciwgaXRlbSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfMVxcXCJcXG4gICAgfSk7XFxufVxcbmRhdGEucHVzaCh7XFxuICAgIGNvbF90eXBlOiBcXFwibGluZV9ibGFua1xcXCJcXG59KTtcXG5kYXRhLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIumAgOWHuui0puWPt1xcXCIsXFxuICAgIHVybDogJChcXFwi56Gu6K6k6YCA5Ye655m75b2V54q25oCBXFxcIikuY29uZmlybSgoZikgPT4ge1xcbiAgICAgICAgZi51c2VyID0gW107XFxuICAgICAgICB3cml0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMvV2FyZWhvdXNlVVNFUi5qc29uXFxcIiwgSlNPTi5zdHJpbmdpZnkoZikpO1xcbiAgICAgICAgYmFjaygpO1xcbiAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+mAgOWHuuaIkOWKn1xcXCI7XFxuICAgIH0sIHVzZXIpLFxcbiAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxufSk7XFxuc2V0UmVzdWx0KGRhdGEpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5YiX6KGo5o6S5bqP566X5rOVXCIsXCJwYXRoXCI6XCJzb3J0XCIsXCJydWxlXCI6XCJqczpcXG4vKiDop4TliJnliJfooajmjpLluo8gWyBVUOOAgU5FV+OAgeaXoOabtOaWsCBdIOmhuuW6jyAqL1xcbi8qIOW9kuW5tuaOkuW6jyBTdGFydCAqL1xcbmZ1bmN0aW9uIG1lcmdlU29ydChhcnIpIHtcXG4gICAgdmFyIGxlbiA9IGFyci5sZW5ndGg7XFxuICAgIGlmIChsZW4gPCAyKSB7XFxuICAgICAgICByZXR1cm4gYXJyO1xcbiAgICB9XFxuICAgIHZhciBtaWRkbGUgPSBNYXRoLmZsb29yKGxlbiAvIDIpLFxcbiAgICAgICAgbGVmdCA9IGFyci5zbGljZSgwLCBtaWRkbGUpLFxcbiAgICAgICAgcmlnaHQgPSBhcnIuc2xpY2UobWlkZGxlKTtcXG4gICAgcmV0dXJuIG1lcmdlKG1lcmdlU29ydChsZWZ0KSwgbWVyZ2VTb3J0KHJpZ2h0KSk7XFxufVxcbmZ1bmN0aW9uIG1lcmdlKGxlZnQsIHJpZ2h0KSB7XFxuICAgIHZhciByZXN1bHQgPSBbXTtcXG4gICAgdmFyIGlzVGhpc1ZlcnNpb25MaXN0ID0gW107XFxuXFxuICAgIHdoaWxlIChsZWZ0Lmxlbmd0aCA+IDAgJiYgcmlnaHQubGVuZ3RoID4gMCkge1xcbiAgICAgICAgaWYgKGxlZnRbMF0udGl0bGUuaW5jbHVkZXMoXFxcIvCfhplcXFwiKSkge1xcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGxlZnQuc2hpZnQoKSk7XFxuICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0WzBdLnRpdGxlLmluY2x1ZGVzKFxcXCLwn4aZXFxcIikpIHtcXG4gICAgICAgICAgICByZXN1bHQucHVzaChyaWdodC5zaGlmdCgpKTtcXG4gICAgICAgIH0gZWxzZSBpZiAobGVmdFswXS50aXRsZS5pbmNsdWRlcyhcXFwi8J+GlVxcXCIpKSB7XFxuICAgICAgICAgICAgcmVzdWx0LnB1c2gobGVmdC5zaGlmdCgpKTtcXG4gICAgICAgIH0gZWxzZSBpZiAocmlnaHRbMF0udGl0bGUuaW5jbHVkZXMoXFxcIvCfhpVcXFwiKSkge1xcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHJpZ2h0LnNoaWZ0KCkpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBpc1RoaXNWZXJzaW9uTGlzdC5wdXNoKGxlZnQuc2hpZnQoKSk7XFxuICAgICAgICAgICAgaXNUaGlzVmVyc2lvbkxpc3QucHVzaChyaWdodC5zaGlmdCgpKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICB3aGlsZSAoaXNUaGlzVmVyc2lvbkxpc3QubGVuZ3RoKSByZXN1bHQucHVzaChpc1RoaXNWZXJzaW9uTGlzdC5zaGlmdCgpKTtcXG5cXG4gICAgd2hpbGUgKGxlZnQubGVuZ3RoKVxcbiAgICAgICAgcmVzdWx0LnB1c2gobGVmdC5zaGlmdCgpKTtcXG5cXG4gICAgd2hpbGUgKHJpZ2h0Lmxlbmd0aClcXG4gICAgICAgIHJlc3VsdC5wdXNoKHJpZ2h0LnNoaWZ0KCkpO1xcblxcbiAgICByZXR1cm4gcmVzdWx0O1xcbn1cXG4kLmV4cG9ydHMubWVyZ2VTb3J0ID0gbWVyZ2VTb3J0O1xcbi8qIOW9kuW5tuaOkuW6jyBFbmQgKi9cIn0se1wiY29sX3R5cGVcIjpcImljb25fMl9yb3VuZFwiLFwibmFtZVwiOlwi5YWo6YOo5YWs5byA6KeE5YiZXCIsXCJwYXRoXCI6XCJBbGxQdWJsaWNSdWxlXCIsXCJydWxlXCI6XCJqczpcXG5jb25zdCB7XFxuICAgIGFwaSxcXG4gICAgbG9jYWxSdWxlVmVyLFxcbiAgICBnZXRBcGlcXG59ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdXRpbGl5XFxcIik7XFxuY29uc3Qge1xcbiAgICBtZXJnZVNvcnRcXG59ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2Uvc29ydFxcXCIpO1xcbmxldCBkYXRhVHlwZSA9IGdldFZhcihcXFwiV2FyZWhvdXNlLnR5cGVcXFwiLCBcXFwiXFxcIik7XFxubGV0IG9yZGVyID0gZ2V0VmFyKFxcXCJXYXJlaG91c2Uub3JkZXJcXFwiLCBcXFwiMFxcXCIpO1xcbmxldCBzb3J0ID0gZ2V0VmFyKFxcXCJXYXJlaG91c2Uuc29ydFxcXCIsIFxcXCIwXFxcIik7XFxubGV0IHBhZ2UgPSBNWV9VUkwuc3BsaXQoXFxcIiNcXFwiKVsxXSB8fCAxO1xcbmxldCBydWxlTGlzdCA9IEpTT04ucGFyc2UocmVxdWVzdChhcGkuYWxsX3J1bGUgKyBcXFwiP2RhdGFfdHlwZT1cXFwiICsgZGF0YVR5cGUgKyBcXFwiJnBhZ2U9XFxcIiArIHBhZ2UgKyBcXFwiJmxpbWl0PTIwJm9yZGVyPVxcXCIgKyBvcmRlciArIFxcXCImc29ydD1cXFwiICsgc29ydCkpLnJlc3VsdDtcXG5hZGRMaXN0ZW5lcignb25DbG9zZScsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICBjbGVhclZhcihcXFwiV2FyZWhvdXNlLnR5cGVcXFwiKTtcXG4gICAgY2xlYXJWYXIoXFxcIldhcmVob3VzZS5vcmRlclxcXCIpO1xcbiAgICBjbGVhclZhcihcXFwiV2FyZWhvdXNlLnNvcnRcXFwiKTtcXG4gICAgY2xlYXJWYXIoXFxcIldhcmVob3VzZS5iYWNrXFxcIik7XFxufSkpO1xcbmxldCBkYXRhID0gW107XFxuaWYgKGdldFZhcihcXFwiV2FyZWhvdXNlLmJhY2tcXFwiKSA9PT0gXFxcIjFcXFwiKSB7XFxuICAgIGJhY2soKTtcXG59XFxuZnVuY3Rpb24gdGFiKGFyciwgdHlwZSwgY29udHJhc3QpIHtcXG4gICAgZm9yIChsZXQgaXRlbSBvZiBhcnIpIHtcXG4gICAgICAgIGRhdGEucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGl0ZW1bMV0gPT09IGNvbnRyYXN0ID8gXFxcIuKAnOKAnFxcXCIgKyBpdGVtWzBdICsgXFxcIuKAneKAnVxcXCIgOiBpdGVtWzBdLFxcbiAgICAgICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoa2V5LCB0eXBlKSA9PiB7XFxuICAgICAgICAgICAgICAgIHB1dFZhcih0eXBlLCBrZXkpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgfSwgaXRlbVsxXSwgdHlwZSksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIlxcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgZGF0YS5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiXFxuICAgIH0pO1xcbn1cXG5pZiAocGFnZSA9PT0gXFxcIjFcXFwiKSB7XFxuICAgIHRhYihbXFxuICAgICAgICBbXFxcIuWFqOmDqFxcXCIsIFxcXCJcXFwiXSxcXG4gICAgICAgIFtcXFwi5bCP56iL5bqPXFxcIiwgXFxcImhvbWVfcnVsZV91cmxcXFwiXSxcXG4gICAgICAgIFtcXFwi5o+Q5Lqk5LqR5LuT5bqT6KeE5YiZXFxcIiwgXFxcInB1Ymxpc2hcXFwiXSxcXG4gICAgICAgIFtcXFwi572R6aG15o+S5Lu2XFxcIiwgXFxcImpzX3VybFxcXCJdLFxcbiAgICAgICAgW1xcXCLpnZnmgIHpobXpnaJcXFwiLCBcXFwiaHRtbFxcXCJdLFxcbiAgICAgICAgW1xcXCLkuLvpophcXFwiLCBcXFwiY29uZmlnXFxcIl1cXG4gICAgXSwgXFxcIldhcmVob3VzZS50eXBlXFxcIiwgZGF0YVR5cGUpO1xcbiAgICB0YWIoW1xcbiAgICAgICAgW1xcXCLml7bpl7RcXFwiLCBcXFwiMFxcXCJdLFxcbiAgICAgICAgW1xcXCJJRFxcXCIsIFxcXCIxXFxcIl0sXFxuICAgICAgICBbXFxcIuWlveivhOW6plxcXCIsIFxcXCIyXFxcIl0sXFxuICAgICAgICBbXFxcIuW3ruivhOW6plxcXCIsIFxcXCIzXFxcIl0sXFxuICAgICAgICBbXFxcIuWbnuWkjeaVsFxcXCIsIFxcXCI0XFxcIl1cXG4gICAgXSwgXFxcIldhcmVob3VzZS5vcmRlclxcXCIsIG9yZGVyKTtcXG4gICAgdGFiKFtcXG4gICAgICAgIFtcXFwi5YCS5bqPXFxcIiwgXFxcIjBcXFwiXSxcXG4gICAgICAgIFtcXFwi5q2j5bqPXFxcIiwgXFxcIjFcXFwiXVxcbiAgICBdLCBcXFwiV2FyZWhvdXNlLnNvcnRcXFwiLCBzb3J0KTtcXG4gICAgZGF0YS5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5pCc57SiXFxcIixcXG4gICAgICAgIHVybDogJC50b1N0cmluZyhuYW1lID0+IFxcXCJoaWtlcjovL3NlYXJjaD9zPVxcXCIgKyBpbnB1dCArIFxcXCImcnVsZT1cXFwiICsgbmFtZSwgTVlfUlVMRS50aXRsZSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCLmkJzntKLlhajpg6jop4TliJlcXFwiXFxuICAgIH0pO1xcbn1cXG5cXG5sZXQgaG9tZUxpc3QgPSBKU09OLnBhcnNlKHJlcXVlc3QoYXBpLmhvbWUpKTtcXG5sZXQgbVJ1bGVMaXN0ID0gW107XFxuZm9yICh2YXIgaXRlbSBvZiBydWxlTGlzdCkge1xcbiAgICB2YXIgbmFtZSA9IGl0ZW0ubmFtZTtcXG4gICAgaWYgKGl0ZW0uaXNfdGFwKSB7XFxuICAgICAgICBsZXQgbG9jYXRpb24gPSBKU09OLnBhcnNlKHJlcXVlc3QoZ2V0QXBpKFxcXCJydWxlTGlzdEpzb25cXFwiKSArIFxcXCI/aWQ9XFxcIiArIGl0ZW0uaWQpKTtcXG4gICAgICAgIGl0ZW0uaWQgPSBsb2NhdGlvbi5pZDtcXG4gICAgICAgIGl0ZW0ubmFtZSA9IGxvY2F0aW9uLm5hbWU7XFxuICAgICAgICBpdGVtLmF1dGhvciA9IGxvY2F0aW9uLmF1dGhvcjtcXG4gICAgICAgIGl0ZW0uZGF0YV90eXBlID0gbG9jYXRpb24uZGF0YV90eXBlO1xcbiAgICAgICAgaXRlbS52ZXIgPSBsb2NhdGlvbi52ZXJcXG4gICAgfVxcbiAgICBpdGVtLnZlcnNpb24gPSBpdGVtLnZlcjtcXG4gICAgbGV0IGxhYmVsID0gXFxcIlxcXCIsXFxuICAgICAgICBsdmVyID0gLTI7XFxuICAgIGlmIChpdGVtLmlzX2pzb24gJiYgaXRlbS5kYXRhX3R5cGUgPT09IFxcXCJob21lX3J1bGVfdXJsXFxcIikge1xcbiAgICAgICAgbHZlciA9IGxvY2FsUnVsZVZlcihob21lTGlzdCwgaXRlbSk7XFxuICAgICAgICBpZiAobHZlciA9PT0gLTEpIHtcXG4gICAgICAgICAgICBsYWJlbCA9IFxcXCLwn4aVXFxcIjtcXG4gICAgICAgIH0gZWxzZSBpZiAobHZlciA8IGl0ZW0udmVyKSB7XFxuICAgICAgICAgICAgbGFiZWwgPSBcXFwi8J+GmVxcXCI7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgbVJ1bGVMaXN0LnB1c2goe1xcbiAgICAgICAgdGl0bGU6IGxhYmVsICsgbmFtZSxcXG4gICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9ydWxlRGV0YWlsI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1xcXCIsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGx2ZXI6IGx2ZXIsXFxuICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXFxuICAgICAgICAgICAgaXNBbGw6dHJ1ZVxcbiAgICAgICAgfSxcXG4gICAgICAgIHBpY191cmw6IGl0ZW0ucGljLFxcbiAgICB9KVxcbn1cXG4vKiDlvZLlubbmjpLluo8gU3RhcnQgKi9cXG4vL21SdWxlTGlzdCA9IG1lcmdlU29ydChtUnVsZUxpc3QpO1xcbi8qIOW9kuW5tuaOkuW6jyBFbmQgKi9cXG5kYXRhLnB1c2guYXBwbHkoZGF0YSwgbVJ1bGVMaXN0KVxcbnNldFJlc3VsdChkYXRhKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWbnuWkjVwiLFwicGF0aFwiOlwiUmVwbHlcIixcInJ1bGVcIjpcImpzOlxcbmxldCBkYXRhID0gW107XFxuY29uc3Qge1xcbiAgICBhcGlcXG59ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdXRpbGl5XFxcIik7XFxubGV0IHtcXG4gICAgcmVwbHlJZCxcXG4gICAgcnVsZUlkLFxcbiAgICBuYW1lLFxcbiAgICBwYXNzd29yZCxcXG4gICAgdXNlcm5hbWVcXG59ID0gTVlfUEFSQU1TO1xcblxcblxcbnNldFBhZ2VUaXRsZShcXFwi5Zue5aSNKFxcXCIgKyBuYW1lICsgXFxcIilcXFwiKTtcXG5hZGRMaXN0ZW5lcignb25DbG9zZScsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICBjbGVhclZhcihcXFwiV2FyZWhvdXNlLmNvbW1lbnQudGV4dFxcXCIpO1xcbiAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxufSkpO1xcblxcbmRhdGEucHVzaCh7XFxuICAgIGRlc2M6IFxcXCLlm57lpI0uLi4uLi5cXFwiLFxcbiAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICBkZWZhdWx0VmFsdWU6IGdldFZhcignV2FyZWhvdXNlLmNvbW1lbnQudGV4dCcsICcnKSxcXG4gICAgICAgIHR5cGU6IFxcXCJ0ZXh0YXJlYVxcXCIsXFxuICAgICAgICBoZWlnaHQ6NyxcXG4gICAgICAgIG9uQ2hhbmdlOiAncHV0VmFyKFxcXCJXYXJlaG91c2UuY29tbWVudC50ZXh0XFxcIixpbnB1dCknXFxuICAgIH1cXG59KTtcXG5cXG5cXG5kYXRhLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIuaPkOS6pFxcXCIsXFxuICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgIHVybDogJChhcGkuZGlzX3JlcGx5ICsgcnVsZUlkKS5sYXp5UnVsZSgocGFzc3dvcmQsIHVzZXJuYW1lLCBydWxlSWQpID0+IHtcXG4gICAgICAgIGxldCB0ZXh0ID0gZ2V0VmFyKCdXYXJlaG91c2UuY29tbWVudC50ZXh0JywgJycpO1xcbiAgICAgICAgaWYgKHBhc3N3b3JkID09IFxcXCJcXFwiIHx8IHVzZXJuYW1lID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+acqueZu+W9lei0puWPt1xcXCI7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAodGV4dCA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/kvaDov5jku4DkuYjpg73msqHlhpnllYpcXFwiO1xcbiAgICAgICAgfVxcbiAgICAgICAgbGV0IHJlc3VsdCA9IHJlcXVlc3QoaW5wdXQsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgXFxcInBhcmFtc1xcXCI6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJkaXNjdXNzX3RleHRcXFwiOiB0ZXh0LFxcbiAgICAgICAgICAgICAgICAgICAgXFxcInFxXFxcIjogdXNlcm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICBcXFwicGFzc3dvcmRcXFwiOiBwYXNzd29yZCxcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJkaXNjdXNzX2lkXFxcIjogcnVsZUlkXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICByZXN1bHQgPSBKU09OLnBhcnNlKHJlc3VsdCkucmVzdWx0O1xcbiAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IDApIHtcXG4gICAgICAgICAgICBiYWNrKGZhbHNlKTtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9cXFwiICsgcmVzdWx0LmRldGFpbDtcXG5cXG4gICAgfSwgcGFzc3dvcmQsIHVzZXJuYW1lLCByZXBseUlkKVxcbn0pO1xcblxcbnNldFJlc3VsdChkYXRhKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuaIkeeahOWbnuWkjVwiLFwicGF0aFwiOlwiTXlSZXBseVwiLFwicnVsZVwiOlwianM6XFxuY29uc3Qge1xcbiAgICBhcGlcXG59ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdXRpbGl5XFxcIik7XFxubGV0IHtcXG4gICAgYXV0aF9jb2RlLFxcbiAgICBxcVxcbn0gPSBNWV9QQVJBTVM7XFxubGV0IHBhZ2UgPSBwYXJzZUludChNWV9VUkwuc3BsaXQoXFxcIiNcXFwiKVsxXSk7XFxubGV0IGRhdGE9W107XFxubGV0IGNvbW1lbnRMaXN0ID0gSlNPTi5wYXJzZShyZXF1ZXN0KGFwaS5kaXNfZ2V0X3JlcGx5ICsgXFxcIj9saW1pdD01JnBhZ2U9XFxcIiArIHBhZ2UgKyBcXFwiJnFxPVxcXCIgKyBxcSArIFxcXCImYXV0aF9jb2RlPVxcXCIgKyBhdXRoX2NvZGUpKS5yZXN1bHQ7XFxuaWYgKGNvbW1lbnRMaXN0Lmxlbmd0aCA9PT0gMCkge1xcbiAgICBkYXRhLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCI8aDUgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz7liKvmi4nkuobkuIDmnaHkuZ/kuI3liankuoY8L2g1PlxcXCIsXFxuICAgICAgICBjb2xfdHlwZTogXFxcInJpY2hfdGV4dFxcXCJcXG4gICAgfSk7XFxufSBlbHNlIHtcXG4gICAgZm9yIChsZXQgaXRlbSBvZiBjb21tZW50TGlzdCkge1xcbiAgICAgICAgZGF0YS5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogaXRlbS5uYW1lICsgXFxcIiZuYnNwOyZuYnNwOzxmb250IGNvbG9yPSdncmF5Jz48c21hbGw+I1xcXCIgKyBpdGVtLmlkICsgXFxcIjwvc21hbGw+PGZvbnQ+XFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3J1bGVEZXRhaWwjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBsdmVyOiBcXFwi5Zue5aSN6L+b5YWl5LiN5pSv5oyB5p+l55yLXFxcIixcXG4gICAgICAgICAgICAgICAgaWQ6IGl0ZW0ucnVsZV9pZFswXVxcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgcGljX3VybDogaXRlbS5hdmF0YXJfdXJsXFxuICAgICAgICB9KTtcXG4gICAgICAgIGRhdGEucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGl0ZW0uZGlzY3Vzc190ZXh0LFxcbiAgICAgICAgICAgIGRlc2M6IGl0ZW0uY3JlYXRlX2RhdGUgKyBcXFwiwrdcXFwiK2l0ZW0ucnVsZV9pZFsxXStcXFwiwrdcXFwiK1xcXCLlvIDlj5HogIXwn5ejXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfMVxcXCIsXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL2luZm9cXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgICAgbmFtZTppdGVtLm5hbWUsXFxuICAgICAgICAgICAgICAgIHR5cGU6XFxcImxvbmdfdGV4dFxcXCIsXFxuICAgICAgICAgICAgICAgIHRleHQ6aXRlbS5kaXNjdXNzX3RleHRcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgIHBpY191cmw6IGl0ZW0uYXZhdGFyX3VybFxcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgXFxufVxcbnNldFJlc3VsdChkYXRhKTtcXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuabtOWkmuWIhuS6q1wiLFwicGF0aFwiOlwibW9yZVNoYXJlXCIsXCJydWxlXCI6XCJqczpcXG4gICAgYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKCgpPT57XFxuICAgICAgICBjbGVhclZhcihcXFwiaG91c2UudXBsb2FkX2NvZGVcXFwiKTtcXG4gICAgfSkpO1xcbmNvbnN0IHtjb2xvcixzbWFsbCxhcGksIGdldEZpbGV9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdXRpbGl5XFxcIik7XFxubGV0IGhvdXNlRmlsZSA9IGdldEZpbGV8fGZhbHNlO1xcbmxldCBwdXRfdXJsID0gYXBpLmhvc3QrJy9oaWtlcnVsZS9kZXYvcHV0JztcXG5pZighaG91c2VGaWxlKXtcXG4gICAgc2V0SXRlbSgnaXNfaG91c2VfdmlwJywgJ2ZhbHNlJyk7XFxufVxcbmxldCBob3VzZV9kYXRhID0gaG91c2VGaWxlKCk7XFxuLy8gbG9nKGhvdXNlX2RhdGEudXNlcm5hbWUrJy0nK2hvdXNlX2RhdGEucGFzc3dvcmQpO1xcbnZhciBjYW51cCA9IGhvdXNlX2RhdGEudXNlcm5hbWUubGVuZ3RoID49IDYgJiYgaG91c2VfZGF0YS5wYXNzd29yZC5sZW5ndGggPiAyO1xcbmxvZygn5Y+v5Lul5LiK5LygPycrY2FudXApO1xcbmxldCBkID0gW107XFxubGV0IGZpbGVfdHlwZSA9IFt7bmFtZTon6Z2Z5oCB5paH5Lu2Jyx2YWx1ZTonaHRtbCd9LHtuYW1lOifnvZHpobXmj5Lku7YnLHZhbHVlOidqc191cmwnfSx7bmFtZTon5Li76aG16YWN572uJyx2YWx1ZTonY29uZmlnJ31dOyAvL+S4iuS8oOexu+Wei1xcbmxldCBmaWxlX3JlZGlyZWN0ID0gW3tuYW1lOifmnKzlnLAnLHZhbHVlOidmYWxzZSd9LHtuYW1lOifnm7Tpk74zMDInLHZhbHVlOid0cnVlJ31dOyAvL+aYr+WQpumHjeWumuWQkVxcbmxldCBmaWxlX3VhID0gW3tuYW1lOifnlLXohJEnLHZhbHVlOidwYyd9LHtuYW1lOifmiYvmnLonLHZhbHVlOidtb2JpbGUnfV07XFxubGV0IGZpbGVfdHlwZV90aXRsZSA9IGZpbGVfdHlwZS5tYXAoKGl0ZW0pID0+IHtcXG4gICAgbGV0IG5hbWUgPSBnZXRJdGVtKCdob3VzZS5maWxlX3R5cGUnLCfpnZnmgIHmlofku7YnKTtcXG4gICAgaWYoaXRlbS5uYW1lPT09bmFtZSl7XFxuICAgICAgICByZXR1cm4gJ/CfkYknK2l0ZW0ubmFtZTtcXG4gICAgfWVsc2V7XFxuICAgICAgICByZXR1cm4gaXRlbS5uYW1lO1xcbiAgICB9XFxufSk7XFxubGV0IGZpbGVfcmVkaXJlY3RfdGl0bGUgPSBmaWxlX3JlZGlyZWN0Lm1hcCgoaXRlbSkgPT4ge1xcbiAgICBsZXQgbmFtZSA9IGdldEl0ZW0oJ2hvdXNlLmZpbGVfcmVkaXJlY3QnLCfmnKzlnLAnKTtcXG4gICAgaWYoaXRlbS5uYW1lPT09bmFtZSl7XFxuICAgICAgICByZXR1cm4gJ/CfkYknK2l0ZW0ubmFtZTtcXG4gICAgfWVsc2V7XFxuICAgICAgICByZXR1cm4gaXRlbS5uYW1lO1xcbiAgICB9XFxufSk7XFxubGV0IGZpbGVfdWFfdGl0bGUgPSBmaWxlX3VhLm1hcCgoaXRlbSkgPT4ge1xcbiAgICBsZXQgbmFtZSA9IGdldEl0ZW0oJ2hvdXNlLmZpbGVfdWEnLCfnlLXohJEnKTtcXG4gICAgaWYoaXRlbS5uYW1lPT09bmFtZSl7XFxuICAgICAgICByZXR1cm4gJ/CfkYknK2l0ZW0ubmFtZTtcXG4gICAgfWVsc2V7XFxuICAgICAgICByZXR1cm4gaXRlbS5uYW1lO1xcbiAgICB9XFxufSk7XFxuZC5wdXNoKHtjb2xfdHlwZTogJ3g1X3dlYnZpZXdfc2luZ2xlJywgZXh0cmE6IHtqczogJ2NvbnNvbGUubG9nKFxcXCLmiJHliqDovb3kuoZcXFwiKSd9fSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICfojrflj5YnLFxcbiAgICBkZXNjOiBcXFwi5paH5Lu26Lev5b6ELOaUr+aMgWhpa2VyLGZpbGUsaHR0cCzkuLvpophcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgb25DaGFuZ2U6IFxcXCJwdXRWYXIoJ2hvdXNlLndlYl91cmwnLGlucHV0KVxcXCIsXFxuICAgICAgICB0aXRsZVZpc2libGU6IHRydWUsXFxuICAgICAgICBkZWZhdWx0VmFsdWU6Z2V0VmFyKCdob3VzZS53ZWJfdXJsJylcXG4gICAgfSxcXG4gICAgdXJsOiQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgbGV0IGlucHV0ID0gZ2V0VmFyKCdob3VzZS53ZWJfdXJsJywnJyk7XFxuICAgICAgICBpZihpbnB1dC5sZW5ndGg8Mil7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+mTvuaOpeS4jeWPr+S7peS4uuepuidcXG4gICAgICAgIH0gZWxzZSBpZigvXmhpa2VyOnxeZmlsZTp8Xmh0dHA6fF5odHRwczovLnRlc3QoaW5wdXQpKXtcXG4gICAgICAgICAgICBsb2coJ+ato+W4uOmTvuaOpScpO1xcbiAgICAgICAgICAgIGxldCB1YSA9IGdldEl0ZW0oJ2hvdXNlLmZpbGVfdWEnKT09PSfnlLXohJEnPydNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvODguMC40MzI0LjE0NiBTYWZhcmkvNTM3LjM2JzonTW96aWxsYS81LjAgKExpbnV4OyBBbmRyb2lkIDk7IE1JIDYpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS84OS4wLjQzODkuOTAgTW9iaWxlIFNhZmFyaS81MzcuMzYnO1xcbiAgICAgICAgICAgIGxldCB3ZWJfdXJsX2FyciA9IGlucHV0LnNwbGl0KCc7Jyk7XFxuICAgICAgICAgICAgbGV0IHdlYl91cmwgPSB3ZWJfdXJsX2FyclswXTtcXG4gICAgICAgICAgICBsZXQgaGVhZGVycyA9IHtcXG4gICAgICAgICAgICAgICAgJ1JlZmVyZXInOidodHRwczovL2Jsb2cuY3Nkbi5uZXQnLFxcbiAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6dWEsXFxuICAgICAgICAgICAgICAgICdBY2NlcHQnOidhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHQsICovKjsgcT0wLjAxJyxcXG4gICAgICAgICAgICAgICAgJ0FjY2VwdC1MYW5ndWFnZSc6J3poLUNOJyxcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIGlmKHdlYl91cmxfYXJyLmxlbmd0aD49MyYmd2ViX3VybF9hcnJbMl0ubGVuZ3RoPjIpeyAvL+iuvue9rue8lueggVxcbiAgICAgICAgICAgICAgICBoZWFkZXJzWydjb250ZW50LXR5cGUnXSA9ICdjaGFyc2V0PScrd2ViX3VybF9hcnJbMl0udG9VcHBlckNhc2UoKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgbGV0IHBhcmFtcyA9IHtoZWFkZXJzOmhlYWRlcnMsd2l0aEhlYWRlcnM6ZmFsc2UscmVkaXJlY3Q6ZmFsc2V9O1xcbiAgICAgICAgICAgIGlmKHdlYl91cmxfYXJyLmxlbmd0aD49MiYmd2ViX3VybF9hcnJbMV0ubGVuZ3RoPjIpeyAvLyDorr7nva7or7fmsYLmlrnms5VcXG4gICAgICAgICAgICAgICAgcGFyYW1zWydtZXRob2QnXSA9IHdlYl91cmxfYXJyWzFdLnRvVXBwZXJDYXNlKCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGxvZygn5byA5aeL6I635Y+W5rqQ56CBJyk7XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgLypcXG4gICAgICAgICAgICAgICAgcmVxdWVzdEFzeW5jKHdlYl91cmwscGFyYW1zLGZ1bmN0aW9uIChrZXksY29kZSkge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGJhY2tfY29kZSA9IGNvZGU7XFxuICAgICAgICAgICAgICAgICAgICBpZihiYWNrX2NvZGUubGVuZ3RoPjIwKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ2hvdXNlLnVwbG9hZF9jb2RlJyxiYWNrX2NvZGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mupDnoIHlt7Lojrflj5Ys5bm26YOo5YiG5o+S5YWl5Yiw5paH5pys5Yy65Z+fJ1xcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+mUmeivr++8jOacrOasoeiOt+WPluWIsOepuuaWh+acrO+8jOeWkeS8vOS9oOayoeacieatpOaWh+S7tiEnO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgKi9cXG4gICAgICAgICAgICAgICAgbGV0IGJhY2tfY29kZSA9IGdldEl0ZW0oJ2hvdXNlLmZpbGVfdWEnKT09PSfnlLXohJEnP2ZldGNoKHdlYl91cmwscGFyYW1zKTpyZXF1ZXN0KHdlYl91cmwscGFyYW1zKTtcXG4gICAgICAgICAgICAgICAgaWYoYmFja19jb2RlLmxlbmd0aD4yMCl7XFxuICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ2hvdXNlLnVwbG9hZF9jb2RlJyxiYWNrX2NvZGUpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5rqQ56CB5bey6I635Y+WLOW5tumDqOWIhuaPkuWFpeWIsOaWh+acrOWMuuWfnydcXG4gICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6ZSZ6K+v77yM5pys5qyh6I635Y+W5Yiw56m65paH5pys77yM55aR5Ly85L2g5rKh5pyJ5q2k5paH5Lu2ISc7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9Y2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgbG9nKGUubWVzc2FnZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lj5HnlJ/kuobplJnor686XFxcXG4nK2UubWVzc2FnZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9ZWxzZSBpZigv5Li76aKY77+lfOWFg+e0oO+/pS8udGVzdChpbnB1dCkpe1xcbiAgICAgICAgICAgIGxvZygn5Li76aKY6ZO+5o6lJyk7XFxuICAgICAgICAgICAgbGV0IHdlYl91cmxfYXJyID0gaW5wdXQuc3BsaXQoJ++/pScpO1xcbiAgICAgICAgICAgIGxldCB3ZWJfdXJsID0gd2ViX3VybF9hcnJbd2ViX3VybF9hcnIubGVuZ3RoLTFdO1xcbiAgICAgICAgICAgIGxldCBiYWNrX2NvZGUgPSBwYXJzZVBhc3RlKHdlYl91cmwpO1xcbiAgICAgICAgICAgIGlmKGJhY2tfY29kZS5sZW5ndGg+MjApIHtcXG4gICAgICAgICAgICAgICAgcHV0VmFyKCdob3VzZS51cGxvYWRfY29kZScsYmFja19jb2RlKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mupDnoIHlt7Lojrflj5Ys5bm26YOo5YiG5o+S5YWl5Yiw5paH5pys5Yy65Z+fJ1xcbiAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6ZSZ6K+v77yM5pys5qyh6I635Y+W6L+U5Zue5Li6OlxcXFxuJytiYWNrX2NvZGU7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+mdnuazlemTvuaOpTpcXFxcbicrZ2V0VmFyKCdob3VzZS53ZWJfdXJsJyk7XFxuICAgICAgICB9XFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIlxcbn0pO1xcblxcbmQucHVzaCh7XFxuICAgIHRpdGxlOifkuIrkvKDnsbvlnosnLFxcbiAgICBkZXNjOifkuIrkvKDmlofku7bnmoTnsbvlnoss5b2T5YmN5Li6OicrY29sb3IoZ2V0SXRlbSgnaG91c2UuZmlsZV90eXBlJywn6Z2Z5oCB5paH5Lu2JyksJyNmZjcwMDAnKSxcXG4gICAgY29sX3R5cGU6J3RleHRfMScsXFxuICAgIHVybDokKGZpbGVfdHlwZV90aXRsZSwyKS5zZWxlY3QoKCkgPT4ge1xcbiAgICAgICAgc2V0SXRlbSgnaG91c2UuZmlsZV90eXBlJyxpbnB1dC5yZXBsYWNlKCfwn5GJJywnJykpO1xcbiAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5L2g6YCJ5oup5LqGOicraW5wdXQ7XFxuICAgIH0pXFxufSk7XFxuXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6J+aWh+S7tuWumuS9jScsXFxuICAgIGRlc2M6J+aWh+S7tuaYr+WQpuWxnuS6jumHjeWumuWQkSzlvZPliY3kuLo6Jytjb2xvcihnZXRJdGVtKCdob3VzZS5maWxlX3JlZGlyZWN0Jywn5pys5ZywJyksJyNmZjcwMDAnKSxcXG4gICAgY29sX3R5cGU6J3RleHRfMScsXFxuICAgIHVybDokKGZpbGVfcmVkaXJlY3RfdGl0bGUsMikuc2VsZWN0KCgpID0+IHtcXG4gICAgICAgIHNldEl0ZW0oJ2hvdXNlLmZpbGVfcmVkaXJlY3QnLGlucHV0LnJlcGxhY2UoJ/CfkYknLCcnKSk7XFxuICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgIHJldHVybiAndG9hc3Q6Ly/kvaDpgInmi6nkuoY6JytpbnB1dDtcXG4gICAgfSlcXG59KTtcXG5cXG5kLnB1c2goe1xcbiAgICB0aXRsZTon6K6+5aSHVUEnLFxcbiAgICBkZXNjOiflj5HotbfnvZHpobXor7fmsYLlpLTmoIfor4Ys5b2T5YmN5Li6OicrY29sb3IoZ2V0SXRlbSgnaG91c2UuZmlsZV91YScsJ+eUteiEkScpLCcjZmY3MDAwJyksXFxuICAgIGNvbF90eXBlOid0ZXh0XzEnLFxcbiAgICB1cmw6JChmaWxlX3VhX3RpdGxlLDIpLnNlbGVjdCgoKSA9PiB7XFxuICAgICAgICBzZXRJdGVtKCdob3VzZS5maWxlX3VhJyxpbnB1dC5yZXBsYWNlKCfwn5GJJywnJykpO1xcbiAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5L2g6YCJ5oup5LqGOicraW5wdXQ7XFxuICAgIH0pXFxufSk7XFxuZnVuY3Rpb24gY29tcGFyZShuYW1lKSB7XFxuICAgIHJldHVybiBmdW5jdGlvbihpdGVtKSB7XFxuICAgICAgICByZXR1cm4gaXRlbS5uYW1lID09PSBuYW1lO1xcbiAgICB9XFxufVxcbmQucHVzaCh7XFxuICAgIHRpdGxlOifwn5eE77iP546v5aKDJyxcXG4gICAgY29sX3R5cGU6J2ZsZXhfYnV0dG9uJyxcXG4gICAgdXJsOiQoKS5sYXp5UnVsZSgoZmlsZV90eXBlLGNvbXBhcmUpPT57XFxuICAgICAgICBsb2coJ+afpeeci+eOr+Wig+WPmOmHjycpO1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBsZXQgdXBfY29kZSA9IGdldFZhcignaG91c2UudXBsb2FkX2NvZGUnLCcnKTtcXG4gICAgICAgICAgICBsZXQgZnR5cGUgPSAgZmlsZV90eXBlLmZpbHRlcihjb21wYXJlKGdldEl0ZW0oJ2hvdXNlLmZpbGVfdHlwZScsJ+mdmeaAgeaWh+S7ticpKSlbMF0udmFsdWU7XFxuICAgICAgICAgICAgbGV0IHJlZGlyZWN0ID0gZ2V0SXRlbSgnaG91c2UuZmlsZV9yZWRpcmVjdCcsJ+acrOWcsCcpIT09J+acrOWcsCc7XFxuICAgICAgICAgICAgbGV0IGNvZGUgPSAhcmVkaXJlY3Q/dXBfY29kZTppbnB1dDtcXG4gICAgICAgICAgICBsZXQgZW52ID0ge1xcbiAgICAgICAgICAgICAgICB3ZWJfdXJsOmdldFZhcignaG91c2Uud2ViX3VybCcsJycpLFxcbiAgICAgICAgICAgICAgICBkZXZpY2U6Z2V0SXRlbSgnaG91c2UuZmlsZV91YScsJ+eUteiEkScpLFxcbiAgICAgICAgICAgICAgICBmdHlwZTpmdHlwZXx8XFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgIHJlZGlyZWN0OnJlZGlyZWN0LFxcbiAgICAgICAgICAgICAgICBjb2RlOmNvZGUuc3Vic3RyaW5nKDAsNDApfHxcXFwiXFxcIixcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgbG9nKGVudik7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovLycrSlNPTi5zdHJpbmdpZnkoZW52KTtcXG4gICAgICAgICAgICAvLyBhbGVydChKU09OLnN0cmluZ2lmeShlbnYpKTtcXG4gICAgICAgIH1jYXRjaCAoZSkge1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly8nK2UubWVzc2FnZTtcXG4gICAgICAgICAgICAvLyBhbGVydChlLm1lc3NhZ2UpO1xcbiAgICAgICAgfVxcbiAgICB9LGZpbGVfdHlwZSxjb21wYXJlKVxcbn0pO1xcblxcbmQucHVzaCh7XFxuICAgIHRpdGxlOifwn5OD5pWZ56iLJyxcXG4gICAgY29sX3R5cGU6J2ZsZXhfYnV0dG9uJyxcXG4gICAgdXJsOiQoKS54NVJ1bGUoKCk9PntcXG4gICAgICAgIGxldCBtc2cgPSAn5qyi6L+O5L2/55So5byA5Y+R6ICF5pu05aSa5YiG5Lqr5bel5YW3XFxcXG4xLui+k+WFpee9keWdgOS4uuacrOWcsOaWh+S7tui3r+W+hCxoaWtlcjovL+aIluiAhWZpbGU6Ly/lvIDlpLRcXFxcbjIu54K55Ye7572R5Z2A6L6T5YWl5qCP5ZCO6Z2i55qE5oyJ6ZKuXFxcXG4zLueci+aWh+acrOmihOiniOWMuuaYr+WQpuato+ehrlxcXFxuNC7ngrnlh7vkuIrkvKDmjInpkq7mj5DkuqTliLDku5PlupMnO1xcbiAgICAgICAgYWxlcnQobXNnKTtcXG4gICAgfSlcXG59KTtcXG5cXG5kLnB1c2goe1xcbiAgICB0aXRsZTon8J+Xke+4j+a4heepuicsXFxuICAgIGNvbF90eXBlOidmbGV4X2J1dHRvbicsXFxuICAgIHVybDokKCkubGF6eVJ1bGUoKCk9PntcXG4gICAgICAgIGNsZWFyVmFyKCdob3VzZS51cGxvYWRfY29kZScpO1xcbiAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5riF6Zmk6aKE6KeI5Yy65Z+f5YaF5a65J1xcbiAgICB9KVxcbn0pO1xcblxcbmQucHVzaCh7XFxuICAgIHRpdGxlOifwn5Oy56S65L6LJyxcXG4gICAgY29sX3R5cGU6J2ZsZXhfYnV0dG9uJyxcXG4gICAgdXJsOiQoKS5sYXp5UnVsZSgoKT0+e1xcbiAgICAgICAgbGV0IGRlbW9fY29kZSA9IGdldEl0ZW0oJ2hvdXNlLmRlbW8nLCcwJyk7XFxuICAgICAgICBpZihkZW1vX2NvZGU9PScwJyl7XFxuICAgICAgICAgICAgcHV0VmFyKCdob3VzZS53ZWJfdXJsJywnaGlrZXI6Ly9maWxlcy9ydWxlcy9kekhvdXNlL2h0bWwv6LWE5rqQ572R5Lmm562+Lmh0bWwnKTtcXG4gICAgICAgICAgICBkZW1vX2NvZGUgPSBwYXJzZUludChkZW1vX2NvZGUpKzE7XFxuICAgICAgICAgICAgc2V0SXRlbSgnaG91c2UuZGVtbycsZGVtb19jb2RlKycnKTtcXG4gICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgIHB1dFZhcignaG91c2Uud2ViX3VybCcsJ2ZpbGU6Ly8vc3RvcmFnZS9lbXVsYXRlZC8wL0FuZHJvaWQvZGF0YS9jb20uZXhhbXBsZS5oaWtlcnZpZXcvZmlsZXMvRG9jdW1lbnRzL3J1bGVzL2R6SG91c2UvaHRtbC/otYTmupDnvZHkuabnrb4uaHRtbCcpO1xcbiAgICAgICAgICAgIHNldEl0ZW0oJ2hvdXNlLmRlbW8nLCcwJyk7XFxuICAgICAgICB9XFxuICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lorr7nva7npLrkvovlnLDlnYAnXFxuICAgIH0pXFxufSk7XFxuXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6J/Cfk6TkuIrkvKAnLFxcbiAgICBjb2xfdHlwZTonZmxleF9idXR0b24nLFxcbiAgICB1cmw6JCgpLmxhenlSdWxlKChjYW51cCxob3VzZV9kYXRhLHB1dF91cmwsZmlsZV90eXBlKSA9PntcXG4gICAgICAgIGZ1bmN0aW9uIGNvbXBhcmUobmFtZSkge1xcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihpdGVtKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLm5hbWUgPT09IG5hbWU7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgY29uc3Qge2dldE5vd0Zvcm1hdERhdGV9PSQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3V0aWxpeVxcXCIpO1xcbiAgICAgICAgbGV0IHVwX2NvZGUgPSBnZXRWYXIoJ2hvdXNlLnVwbG9hZF9jb2RlJywnJyk7XFxuICAgICAgICBpZih1cF9jb2RlLmxlbmd0aCA8IDIpe1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mupDnoIHljLrml6DlhoXlrrnvvIzor7flhYjorr/pl67kuIDkuKrpnZnmgIHpobXpnaInXFxuICAgICAgICB9XFxuICAgICAgICBpZighY2FudXApe1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/kvaDkuI3mmK/lvIDlj5HogIXvvIzmsqHmnInmj5DkuqTliLDku5PlupPnmoTmnYPliKkhJ1xcbiAgICAgICAgfVxcbiAgICAgICAgbGV0IGlucHV0ID0gZ2V0VmFyKCdob3VzZS53ZWJfdXJsJywnJyk7XFxuICAgICAgICBsZXQgd2ViX3VybCA9IGlucHV0LnNwbGl0KCc7JylbMF07XFxuICAgICAgICBsZXQgZmlsZU5hbWUgPSAnJztcXG4gICAgICAgIGlmKC9eaGlrZXI6fF5maWxlOnxeaHR0cDp8Xmh0dHBzOi8udGVzdCh3ZWJfdXJsKSl7XFxuICAgICAgICAgICAgZmlsZU5hbWUgPSB3ZWJfdXJsLnNwbGl0KCcvJylbd2ViX3VybC5zcGxpdCgnLycpLmxlbmd0aC0xXTtcXG4gICAgICAgIH1lbHNlIGlmKC/kuLvpopjvv6V85YWD57Sg77+lLy50ZXN0KGlucHV0KSl7XFxuICAgICAgICAgICAgbGV0IGJrYXJyID0gdXBfY29kZS5zcGxpdCgn77+lJyk7XFxuICAgICAgICAgICAgaWYoYmthcnIubGVuZ3RoPDMpe1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5LqR5Ymq6LS05p2/5YaF5a655pyJ6K+vJ1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBzd2l0Y2ggKGJrYXJyWzFdKSB7XFxuICAgICAgICAgICAgICAgIGNhc2UgJ215X2hvbWVfdGhlbWUnOlxcbiAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWUgPSB1cF9jb2RlLnNwbGl0KCfjgIwnKVsxXS5zcGxpdCgn44CNJylbMF07XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgY2FzZSAnbXlfaG9tZV9zaW5nbGUnOlxcbiAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWUgPSB1cF9jb2RlLnNwbGl0KCfjgIwnKVsxXS5zcGxpdCgn44CNJylbMF07XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgY2FzZSAnanNfdXJsJzpcXG4gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lID0gdXBfY29kZS5zcGxpdCgn77+lJylbMl0uc3BsaXQoJ0AnKVswXTtcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/plJnor6/vvIznvZHpobXpk77mjqXml6DlhoXlrrkhJztcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCB1YSA9IGdldEl0ZW0oJ2hvdXNlLmZpbGVfdWEnKT09PSfnlLXohJEnPydNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvODguMC40MzI0LjE0NiBTYWZhcmkvNTM3LjM2JzonTW96aWxsYS81LjAgKExpbnV4OyBBbmRyb2lkIDk7IE1JIDYpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS84OS4wLjQzODkuOTAgTW9iaWxlIFNhZmFyaS81MzcuMzYnO1xcbiAgICAgICAgbGV0IGhlYWRlcnMgPSB7XFxuICAgICAgICAgICAgJ1JlZmVyZXInOidodHRwczovL2Jsb2cuY3Nkbi5uZXQnLFxcbiAgICAgICAgICAgIFxcXCJjb250ZW50LXR5cGVcXFwiOiBcXFwiYXBwbGljYXRpb24vanNvblxcXCIsXFxuICAgICAgICAgICAgJ1VzZXItQWdlbnQnOnVhLFxcbiAgICAgICAgICAgICdBY2NlcHQnOidhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHQsICovKjsgcT0wLjAxJyxcXG4gICAgICAgICAgICAnQWNjZXB0LUxhbmd1YWdlJzonemgtQ04nLFxcbiAgICAgICAgfTtcXG4gICAgICAgIGxldCB0b0NvbXBhcmUgPSAnJztcXG4gICAgICAgIGlmKGZpbGVOYW1lLmVuZHNXaXRoKCcuaHRtbCcpKXtcXG4gICAgICAgICAgICB0b0NvbXBhcmUgPSAn6Z2Z5oCB5paH5Lu2JztcXG4gICAgICAgIH1lbHNlIGlmKC/kuLvpopgvLnRlc3QoZmlsZU5hbWUpKXtcXG4gICAgICAgICAgICB0b0NvbXBhcmUgPSAn5Li76aG16YWN572uJ1xcbiAgICAgICAgfVxcbiAgICAgICAgbGV0IGZ0eXBlID0gIGZpbGVfdHlwZS5maWx0ZXIoY29tcGFyZSh0b0NvbXBhcmV8fGdldEl0ZW0oJ2hvdXNlLmZpbGVfdHlwZScsJ+mdmeaAgeaWh+S7ticpKSlbMF0udmFsdWU7XFxuICAgICAgICBsZXQgcmVkaXJlY3QgPSBnZXRJdGVtKCdob3VzZS5maWxlX3JlZGlyZWN0Jywn5pys5ZywJykhPT0n5pys5ZywJztcXG4gICAgICAgIGlmKHJlZGlyZWN0JiYhd2ViX3VybC5zdGFydHNXaXRoKCdodHRwJykpe1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/nm7Tpk74zMDLph43lrprlkJHnvZHlnYDpk77mjqXlv4XpobtodHRw5byA5aS0JztcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCBjb2RlID0gIXJlZGlyZWN0P3VwX2NvZGU6d2ViX3VybDtcXG4gICAgICAgIGxldCBkYXRhID0ge1xcXCJwYXJhbXNcXFwiOlxcbiAgICAgICAgICAgICAgICB7XFxcImRhdGFcXFwiOiB7cnVsZV9uYW1lOiBmaWxlTmFtZSwgXFxcInJ1bGVfdHlwZVxcXCI6ICfmm7TlpJrliIbkuqsnLCBcXFwidmVyc2lvblxcXCI6Z2V0Tm93Rm9ybWF0RGF0ZSgpLFxcXCJydWxlX3ZhbHVlXFxcIjogY29kZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3R5cGU6ZnR5cGUsIGlzX3JlZGlyZWN0OnJlZGlyZWN0LGRldmljZVVhOmdldEl0ZW0oJ2hvdXNlLmZpbGVfdWEnKSxcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICBcXFwibmFtZVxcXCI6IGhvdXNlX2RhdGEudXNlcm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICBcXFwicGFzc3dvcmRcXFwiOiBob3VzZV9kYXRhLnBhc3N3b3JkfVxcbiAgICAgICAgfTtcXG4gICAgICAgIGxldCB1cHBhcmFtcyA9IHtoZWFkZXJzOmhlYWRlcnMsYm9keTpKU09OLnN0cmluZ2lmeShkYXRhKSx3aXRoSGVhZGVyczpmYWxzZSxyZWRpcmVjdDpmYWxzZSxtZXRob2Q6J1BPU1QnfTtcXG4gICAgICAgIGxldCBiYWNrbXNnID0gZ2V0SXRlbSgnaG91c2UuZmlsZV91YScpPT09J+eUteiEkSc/ZmV0Y2gocHV0X3VybCx1cHBhcmFtcyk6cmVxdWVzdChwdXRfdXJsLHVwcGFyYW1zKTtcXG4gICAgICAgIHRyeXtcXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gSlNPTi5wYXJzZShiYWNrbXNnKS5yZXN1bHQ7XFxuICAgICAgICAgICAgbGV0IGRldGFpbCA9IHJlc3VsdC5kZXRhaWw7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovLycrZGV0YWlsO1xcbiAgICAgICAgfWNhdGNoIChlKSB7XFxuICAgICAgICAgICAgbG9nKGUubWVzc2FnZSk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+WPkeeUn+S6humUmeivr1xcXFxuJytlLm1lc3NhZ2U7XFxuICAgICAgICB9XFxuICAgIH0sY2FudXAsaG91c2VfZGF0YSxwdXRfdXJsLGZpbGVfdHlwZSlcXG59KTtcXG5cXG5kLnB1c2goe1xcbiAgICB0aXRsZTon6ZW/5paH5pys6aKE6KeI5Yy65Z+fJyxcXG4gICAgY29sX3R5cGU6J3RleHRfMScsXFxuICAgIHVybDonaGlrZXI6Ly9lbXB0eScsXFxuICAgIGV4dHJhOiB7dGV4dFNpemU6IDExLGxpbmVWaXNpYmxlOmZhbHNlfVxcbn0pO1xcblxcbmQucHVzaCh7XFxuICAgIHRpdGxlOmdldFZhcignaG91c2UudXBsb2FkX2NvZGUnLCcnKS5zdWJzdHJpbmcoMCwxMDI0MCksXFxuICAgIGNvbF90eXBlOidsb25nX3RleHQnLFxcbiAgICBleHRyYToge3RleHRTaXplOiAxMX1cXG59KTtcXG5zZXRQYWdlVGl0bGUoXFxcIuabtOWkmuWIhuS6q1xcXCIpO1xcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIui9u+WQiOmbhueUn+aIkOaOpeWPo1wiLFwicGF0aFwiOlwiZ2VuQXBpXCIsXCJydWxlXCI6XCJqczpcXG5mdW5jdGlvbiBnZW5SdWxlKG5hbWUsdXJsLGljb24pe1xcbiAgICBpY29uPWljb258fCdodHRwczovL3ozLmF4MXguY29tLzIwMjEvMTEvMTYvSVdKaHhmLnBuZyc7XFxuICAgIGNvbnN0IHtnZXROb3dGb3JtYXREYXRlLGFwaSxnZXRBcGl9PSQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3V0aWxpeT9ydWxlPemBk+mVv+S7k+W6k1Byb1xcXCIpO1xcbiAgICBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VBbGwgPSBmdW5jdGlvbihvbGQsbmV3X3N0cil7XFxuICAgICAgICByZXR1cm4gdGhpcy5zcGxpdChvbGQpLmpvaW4obmV3X3N0cik7XFxuICAgIH07XFxuICAgIGxldCBtdWJhbiA9IGdldEFwaSgnaW1wb3J0VXJsJykrXFxcIjE2OTBcXFwiO1xcbiAgICBsZXQgbXViYW5fd29yZD17bmFtZTpcXFwiQOi9u+WQiOmbhlxcXCIsdXJsOlxcXCJA5Zyw5Z2AXFxcIix2ZXI6XFxcIkDniYjmnKxcXFwiLGljb246XFxcIkDlm77moIdcXFwifTtcXG4gICAgbGV0IG11YmFuX2NvZGUgPSBmZXRjaChtdWJhbik7XFxuICAgIG11YmFuX2NvZGU9bXViYW5fY29kZS5yZXBsYWNlQWxsKG11YmFuX3dvcmQubmFtZSxuYW1lKS5yZXBsYWNlQWxsKG11YmFuX3dvcmQudmVyLGdldE5vd0Zvcm1hdERhdGUoKSkucmVwbGFjZUFsbChtdWJhbl93b3JkLnVybCx1cmwpLnJlcGxhY2VBbGwobXViYW5fd29yZC5pY29uLGljb24pO1xcbiAgICBsZXQgaW1wb3J0X2NvZGU9XFxcIua1t+mYlOinhueVjOinhOWImeWIhuS6q++8jOW9k+WJjeWIhuS6q+eahOaYr++8muWwj+eoi+W6j++8jOaXoOagueagke+8jOiKseato+a4he+8jOS4jeaWreiNpOiFpeS4jeaIkua3q++/pWhvbWVfcnVsZV92Mu+/pWJhc2U2NDovL0BcXFwiK25hbWUrXFxcIkBcXFwiK2Jhc2U2NEVuY29kZShtdWJhbl9jb2RlKTtcXG4gICAgdmFyIHBhc3RlcyA9IGdldFBhc3RlcygpO1xcbiAgICB2YXIgdXJsID0gc2hhcmVQYXN0ZShpbXBvcnRfY29kZSxwYXN0ZXMuc2xpY2UoLTEpWzBdKTtcXG4gICAgbGV0IGltcG9ydF9ydWxlPSB1cmwrXFxcIlxcXFxuXFxcXG7lsI/nqIvluo/vvJpcXFwiK25hbWU7XFxuICAgIHJldHVybiBpbXBvcnRfcnVsZTtcXG59XFxuJC5leHBvcnRzLmdlblJ1bGU9Z2VuUnVsZTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWFqOWxgOino+aekOWFjeWXhVwiLFwicGF0aFwiOlwiZ2xvYmFsUGFyc2VcIixcInJ1bGVcIjpcImpzOlxcbiAgICBmdW5jdGlvbiBnZXRIZWFkZXJzKHBsYXlVcmwpe1xcbiAgICAgICAgbGV0IGhlYWRlcnMgPSB7fTtcXG4gICAgICAgIGxldCByZWZlcj1wbGF5VXJsLnNwbGl0KFxcXCIvL1xcXCIpWzBdK1xcXCIvL1xcXCIrcGxheVVybC5zcGxpdChcXFwiLy9cXFwiKVsxXS5zcGxpdChcXFwiL1xcXCIpWzBdO1xcbiAgICAgICAgaWYoL2xlY2xvdWRcXFxcLmNvbXxiaWxpdmlkZW9cXFxcLmNvbS8udGVzdChwbGF5VXJsKSl7XFxuICAgICAgICAgICAgaGVhZGVycyA9IHtcXFwiUmVmZXJlclxcXCI6ICdodHRwczovL3d3dy5iaWxpYmlsaS5jb20vJyxcXFwiVXNlci1BZ2VudFxcXCI6XFxcIk1vemlsbGEvNS4wXFxcIn1cXG4gICAgICAgIH1lbHNlIGlmKC9tZ3R2XFxcXC5jb20vLnRlc3QocGxheVVybCkpe1xcbiAgICAgICAgICAgIGhlYWRlcnMgPSB7XFxcIlJlZmVyZXJcXFwiOiByZWZlcixcXFwiVXNlci1BZ2VudFxcXCI6XFxcIk1vemlsbGEvNS4wXFxcIn1cXG4gICAgICAgIH1lbHNlIGlmKC9peGlndWFcXFxcLmNvbS8udGVzdChwbGF5VXJsKSl7XFxuICAgICAgICAgICAgaGVhZGVycyA9IHtcXFwiUmVmZXJlclxcXCI6ICdodHRwczovL3d3dy5peGlndWEuY29tLycsXFxcIlVzZXItQWdlbnRcXFwiOlxcXCJNb3ppbGxhLzUuMFxcXCJ9XFxuICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICBoZWFkZXJzID0ge1xcXCJSZWZlcmVyXFxcIjogcmVmZXIsJ1VzZXItQWdlbnQnOidEYXJ0LzIuMTMgKGRhcnQ6aW8pJ31cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBoZWFkZXJzXFxuICAgIH1cXG5mdW5jdGlvbiBpc1BpYyhzdHIpe1xcbiAgICByZXR1cm4gL1xcXFwuKGdpZnxqcGd8anBlZ3xwbmd8R0lGfEpQR3xQTkcpJC8udGVzdChzdHIpO1xcbn1cXG5mdW5jdGlvbiBpc1ZpZGVvKHBsYXlVcmwscmVjaGFuZ2Upe1xcbiAgICAvL+azqOaEjy5waHDkuI3lj6/ku6XooqvmjpLpmaTlkKbliJnono3lhbTop6PmnpDkuI3kuoYgfC5waHAkXFxuICAgIC8v5aaC5p6c5piv5pKt5pS+5Zyw5Z2A5bCx55u05o6l6L+U5Zue5Zyw5Z2A5Yqg5LiKVUHvvIzkuI3mmK/nmoTor53lsLHov5Tlm55mYWxzZVxcbiAgICByZWNoYW5nZT10eXBlb2YocmVjaGFuZ2UpPT09XFxcImZ1bmN0aW9uXFxcIj9yZWNoYW5nZTpmdW5jdGlvbihwbGF5VXJsKXtyZXR1cm4gcGxheVVybH07XFxuICAgIGxldCBleGNlcHRXb3JkcyA9ICcuanMkfC5jc3MkfC50cyR8Lmh0bWwkfC5odG0kfC5naWYkfC5qcGckfC5qcGVnJHwucG5nJHwuaWNvJHwuc3ZnJHwudHh0JCcuc3BsaXQoJ3wnKS5tYXAoaXQ9PidcXFxcXFxcXCcraXQpLmpvaW4oJ3wnKTtcXG4gICAgdmFyIGV4Y2VwdEtleXMgPSBuZXcgUmVnRXhwKGV4Y2VwdFdvcmRzKTtcXG4gICAgbGV0IGV4Y2VwdFdvcmRzMSA9ICdyZWZlcmVyPXx1cmw9Jy5zcGxpdCgnfCcpLm1hcChpdD0+aXQpLmpvaW4oJ3wnKTtcXG4gICAgdmFyIGV4Y2VwdEtleXMxID0gbmV3IFJlZ0V4cChleGNlcHRXb3JkczEpO1xcbiAgICBsZXQgcmVwbGFjZVdvcmRzID0gJ3BsYXltM3U4fG0zdThcXFxcLnR2Jy5zcGxpdCgnfCcpLm1hcChpdD0+aXQpLmpvaW4oJ3wnKTtcXG4gICAgbGV0IHJlcGxhY2VLZXlzID0gbmV3IFJlZ0V4cChyZXBsYWNlV29yZHMsJ2cnKTtcXG4gICAgbGV0IHZpZGVvV29yZHMgPSBcXFwiLm1wNCR8Lm0zdTgkfC5mbHYkfC5hdmkkfC4zZ3AkfC5tcGVnJHwud212JHwubW92JHxybXZifC5kYXQkfC5tcDMkfHFxQkZkb3dubG9hZHxtaW1lPXZpZGVvJTJGfG1pbWVfdHlwZT12aWRlb198dHlwZT1tM3U4fHB0PW0zdThcXFwiLnNwbGl0KCd8JykubWFwKChpdCk9PntcXG4gICAgICAgIC8vdHlwZT1tcDRcXG4gICAgICAgIGlmKGl0LnN0YXJ0c1dpdGgoXFxcIi5cXFwiKSl7XFxuICAgICAgICAgICAgcmV0dXJuICdcXFxcXFxcXCcraXRcXG4gICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgIHJldHVybiBpdFxcbiAgICAgICAgfVxcbiAgICB9KS5qb2luKFxcXCJ8XFxcIik7XFxuICAgIGxldCB2aWRlb0tleXMgPSBuZXcgUmVnRXhwKHZpZGVvV29yZHMpO1xcbiAgICBsZXQgcFVybD1wbGF5VXJsLnNwbGl0KFxcXCI7XFxcIilbMF07XFxuICAgIGxldCBwVXJsMj1wbGF5VXJsLnNwbGl0KFxcXCI7XFxcIilbMF0uc3BsaXQoXFxcIiZcXFwiKVswXS5zcGxpdChcXFwiP1xcXCIpWzBdO1xcbiAgICBpZigodmlkZW9LZXlzLnRlc3QocFVybCl8fHZpZGVvS2V5cy50ZXN0KHBVcmwyKSkmJiFleGNlcHRLZXlzMS50ZXN0KHBVcmwucmVwbGFjZShwVXJsLnNwbGl0KFxcXCI/XFxcIilbMF0sJycpKSl7XFxuICAgICAgICBsZXQgdGlwcyA9ICfmo4DmtYvliLDnlpHkvLzlpJrlqpLkvZPnmoTlnLDlnYA6JztcXG4gICAgICAgIHRyeXtcXG4gICAgICAgICAgICBsb2coXFxcImpz5LitXFxcIit0aXBzK3BVcmwpO1xcbiAgICAgICAgICAgIC8vIGxvZyhwVXJsLnJlcGxhY2UocFVybC5zcGxpdChcXFwiP1xcXCIpWzBdLCcnKSk7XFxuICAgICAgICAgICAgLy8gbG9nKGV4Y2VwdEtleXMxKTtcXG4gICAgICAgIH1jYXRjaCAoZSkge1xcbiAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAubG9nKCd4NeS4rScrdGlwcytwVXJsKTtcXG4gICAgICAgICAgICBmeV9icmlkZ2VfYXBwLmxvZyhcXFwi5YiG5Ymy6Zeu5Y+35ZCOOlxcXCIrcFVybC5yZXBsYWNlKHBVcmwuc3BsaXQoXFxcIj9cXFwiKVswXSwnJykpO1xcbiAgICAgICAgICAgIC8vIGZ5X2JyaWRnZV9hcHAoZXhjZXB0S2V5czEpO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIC8vIGxvZygnMTonKyh2aWRlb0tleXMudGVzdChwVXJsKXx8dmlkZW9LZXlzLnRlc3QocFVybDIpfHx2aWRlb0tleXMudGVzdChwVXJsLnJlcGxhY2UocmVwbGFjZUtleXMsXFxcIlxcXCIpLnNwbGl0KFxcXCImXFxcIilbMF0uc3BsaXQoXFxcIj9cXFwiKVswXSkpKTtcXG4gICAgLy8gbG9nKCcyOicrIWV4Y2VwdEtleXMudGVzdChwVXJsLnNwbGl0KFxcXCI/XFxcIilbMF0uc3BsaXQoJyYnKVswXSkpO1xcbiAgICAvLyBsb2coJzM6JyshZXhjZXB0S2V5czEudGVzdChwVXJsLnJlcGxhY2UocFVybC5zcGxpdChcXFwiP1xcXCIpWzBdLCcnKSkpO1xcbiAgICBpZiAoKHZpZGVvS2V5cy50ZXN0KHBVcmwpfHx2aWRlb0tleXMudGVzdChwVXJsMil8fHZpZGVvS2V5cy50ZXN0KHBVcmwucmVwbGFjZShyZXBsYWNlS2V5cyxcXFwiXFxcIikuc3BsaXQoXFxcIiZcXFwiKVswXS5zcGxpdChcXFwiP1xcXCIpWzBdKSApJiYgIWV4Y2VwdEtleXMudGVzdChwVXJsLnNwbGl0KFxcXCI/XFxcIilbMF0uc3BsaXQoJyYnKVswXSkmJiFleGNlcHRLZXlzMS50ZXN0KHBVcmwucmVwbGFjZShwVXJsLnNwbGl0KFxcXCI/XFxcIilbMF0sJycpKSkge1xcbiAgICAgICAgaWYoISgvVXNlci1BZ2VudHxSZWZlcmVyQC8udGVzdChwbGF5VXJsKSkpe1xcbiAgICAgICAgICAgIGlmKC9sZWNsb3VkXFxcXC5jb218YmlsaXZpZGVvXFxcXC5jb20vLnRlc3QocGxheVVybCkpe1xcbiAgICAgICAgICAgICAgICBwbGF5VXJsKz1cXFwiO3tSZWZlcmVyQGh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS8mJlVzZXItQWdlbnRATW96aWxsYS81LjB9XFxcIjtcXG4gICAgICAgICAgICB9ZWxzZSBpZigvaXhpZ3VhXFxcXC5jb20vLnRlc3QocGxheVVybCkpe1xcbiAgICAgICAgICAgICAgICBwbGF5VXJsKz1cXFwiIy5tcDQ7e1JlZmVyZXJAaHR0cHM6Ly93d3cuaXhpZ3VhLmNvbS8mJlVzZXItQWdlbnRATW96aWxsYS81LjB9XFxcIjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgZWxzZSBpZigvbWd0dlxcXFwuY29tLy50ZXN0KHBsYXlVcmwpKXtcXG4gICAgICAgICAgICAgICAgcGxheVVybCs9XFxcIjt7VXNlci1BZ2VudEBNb3ppbGxhLzUuMH1cXFwiO1xcbiAgICAgICAgICAgIH1lbHNlIGlmKC9wdHdvXFxcXC53a2ZpbGVcXFxcLmNvbS8udGVzdChwbGF5VXJsKSYmL3VybD0vLnRlc3QocGxheVVybCkpe1xcbiAgICAgICAgICAgICAgICBwbGF5VXJsPXBsYXlVcmwuc3BsaXQoXFxcInVybD1cXFwiKVsxXStcXFwiO3tSZWZlcmVyQGh0dHBzOi8vZmFudHVhbi50dn1cXFwiXFxuICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgIHBsYXlVcmw9cmVjaGFuZ2UocGxheVVybCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIC8vIOWkhOeQhuWkp+W4iOWFhOS5i+exu+eahGFwcFxcbiAgICAgICAgICAgIC8vIGVsc2V7XFxuICAgICAgICAgICAgLy8gICAgIHBsYXlVcmwrPVxcXCI7e1VzZXItQWdlbnRATW96aWxsYS81LjB9XFxcIjtcXG4gICAgICAgICAgICAvLyB9XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gcGxheVVybCtcXFwiI2lzVmlkZW89dHJ1ZSNcXFwiO1xcbiAgICB9ZWxzZXtcXG4gICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcbn1cXG5mdW5jdGlvbiBjb21QYXJzZShwYXJTdHIsZWosb25seWJhY2ssaHRtbCl7XFxuICAgIC8v5YiX6KGo77yM5qCH6aKY77yM5Zu+54mH77yM5o+P6L+w77yM6ZO+5o6l77yM5YaF5a65XFxuICAgIGVqID0gZWp8fGZhbHNlOy8v5pyJ5LqM57qnXFxuICAgIG9ubHliYWNrPW9ubHliYWNrfHxmYWxzZTsvL+WPqui/lOWbnuaVsOaNrlxcbiAgICBodG1sID0gaHRtbHx8Z2V0UmVzQ29kZSgpO1xcbiAgICBodG1sID0gdHlwZW9mKGh0bWwpPT09J3N0cmluZyc/aHRtbDpodG1sLmh0bWw7XFxuICAgIHJldHVybiAkLnRvU3RyaW5nKChwYXJTdHIsZWosb25seWJhY2ssaHRtbCxpc1BpYyk9PntcXG4gICAgICAgIGxldCB0PXBhclN0ci5zcGxpdChcXFwiO1xcXCIpO1xcbiAgICAgICAgbGV0IGQ9W107XFxuICAgICAgICAvLyBsZXQgbGlzdD1wZGZhKGdldFJlc0NvZGUoKSx0WzBdKTtcXG4gICAgICAgIGxldCBsaXN0PXBkZmEoaHRtbCx0WzBdKTtcXG4gICAgICAgIGxldCBsYXp5ID0gJCgnJykubGF6eVJ1bGUoKCk9PntcXG4gICAgICAgICAgICBjb25zdCB7bGF6eVBhcnNlfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2dsb2JhbFBhcnNlP3J1bGU96YGT6ZW/5LuT5bqTUHJvJyk7XFxuICAgICAgICAgICAgcmV0dXJuIGxhenlQYXJzZShpbnB1dClcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZm9yKGxldCBpIGluIGxpc3Qpe1xcbiAgICAgICAgICAgIGxldCBfcGljID0gdFsyXT9wZChsaXN0W2ldLHRbMl0pOicnO1xcbiAgICAgICAgICAgIGlmKGlzUGljKF9waWMpJiYhL0BSZWZlcmVyPS8udGVzdChfcGljKSl7XFxuICAgICAgICAgICAgICAgIF9waWMrPSdAUmVmZXJlcj0nXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGxldCBpdD17XFxuICAgICAgICAgICAgICAgIHRpdGxlOnBkZmgobGlzdFtpXSx0WzFdKSxcXG4gICAgICAgICAgICAgICAgcGljX3VybDpfcGljLFxcbiAgICAgICAgICAgICAgICBkZXNjOnBkZmgobGlzdFtpXSx0WzNdKSxcXG4gICAgICAgICAgICAgICAgdXJsOmVqP3BkKGxpc3RbaV0sdFs0XSk6cGQobGlzdFtpXSx0WzRdKStsYXp5XFxuICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICBpZih0Lmxlbmd0aD41KXsvL+WGheWuue+8jOeUqOS6juaQnOe0olxcbiAgICAgICAgICAgICAgICBpdC5jb250ZW50PXBkZmgobGlzdFtpXSx0WzVdKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBkLnB1c2goaXQpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYob25seWJhY2spe1xcbiAgICAgICAgICAgIHJldHVybiBkXFxuICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICBzZXRSZXN1bHQoZClcXG4gICAgICAgIH1cXG4gICAgfSxwYXJTdHIsZWosb25seWJhY2ssaHRtbCxpc1BpYylcXG59XFxuXFxuZnVuY3Rpb24gbGF6eVBhcnNlKHBsYXlVcmwsbXMsdG0scmVjaGFuZ2Upe1xcbiAgICAvLyBsb2coJ+iwg+eUqOS7k+W6k+WFjeWXheaOouS8oOWPgui2heaXtuS4ujonK21zKTtcXG4gICAgdG0gPSBwYXJzZUludCh0bSl8fDUwMDA7XFxuICAgIGNvbnN0IHtpc1ZpZGVvLGdldEhlYWRlcnN9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvZ2xvYmFsUGFyc2U/cnVsZT3pgZPplb/ku5PlupNQcm8nKTtcXG4gICAgbGV0IHJlYWxVcmwgPSBpc1ZpZGVvKHBsYXlVcmwscmVjaGFuZ2UpO1xcbiAgICAvL2xvZyhyZWFsVXJsKTtcXG4gICAgaWYodHlwZW9mKHJlYWxVcmwpPT0nc3RyaW5nJyl7Ly9ib29s5YC85bCx5piv5aSx6LSlXFxuICAgICAgICB0cnl7XFxuICAgICAgICAgICAgbGV0IHJ1cmw9cmVhbFVybC5zcGxpdChcXFwiO1xcXCIpWzBdLnNwbGl0KFxcXCIjXFxcIilbMF07XFxuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UocmVxdWVzdChydXJsLHt0aW1lb3V0OnRtfSkpLnVybFxcbiAgICAgICAgfWNhdGNoKGUpe1xcbiAgICAgICAgICAgIHJldHVybiByZWFsVXJsXFxuICAgICAgICB9XFxuICAgICAgICAvL3JldHVybiByZWFsVXJsXFxuICAgIH1cXG5cXG4gICAgLy9sb2coXFxcIuiuv+mXrui2heaXtjpcXFwiK3RtKTtcXG4gICAgbG9nKFxcXCLlsJ3or5XpgZPplb/ku5PlupN4NeWFjeWXhTpcXFwiK3BsYXlVcmwpO1xcbiAgICBjbGVhclZhcihcXFwiX3g1anhVcmxcXFwiKTtcXG4gICAgbGV0IGJhZD0kKFxcXCLnvZHnu5zkuI3kvbPmiJbogIXnlpHkvLzlr7nmlrnnvZHnq5nmjILkuobvvIzkvaDopoHmn6XnnIvlhbbnvZHpobXlkJfvvJ9cXFwiKS5jb25maXJtKChwbGF5VXJsKT0+e1xcbiAgICAgICAgbG9nKFxcXCLnvZHnq5nnnIvotbfmnaXmjILkuoY6XFxcIitwbGF5VXJsKTtcXG4gICAgICAgIHJldHVybiBwbGF5VXJsXFxuICAgIH0scGxheVVybCk7XFxuICAgIHRyeXtcXG4gICAgICAgIC8vIHZhciBiYWNrPXJlcXVlc3QocGxheVVybCx7aGVhZGVyczogZ2V0SGVhZGVycyhwbGF5VXJsKSx0aW1lb3V0OnRtfSk7XFxuICAgICAgICB2YXIgYmFjaz1mZXRjaChwbGF5VXJsLFxcbiAgICAgICAgICAgIHtoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6IFBDX1VBXFxuICAgICAgICAgICAgICAgIH19KTtcXG4gICAgICAgIGlmKCFiYWNrKXtcXG4gICAgICAgICAgICBsb2coXFxcIue9keermVxcXCIrcGxheVVybCtcXFwi56Gu5a6e5ZWl5Lmf5rKh6L+U5ZueXFxcIik7XFxuICAgICAgICAgICAgcmV0dXJuIGJhZFxcbiAgICAgICAgfWVsc2UgaWYoLyNFWFRJTkYvLnRlc3QoYmFjaykpe1xcbiAgICAgICAgICAgIC8vbGV0IGxjYWNoZT1cXFwiL3N0b3JhZ2UvZW11bGF0ZWQvMC9BbmRyb2lkL2RhdGEvY29tLmV4YW1wbGUuaGlrZXJ2aWV3L2ZpbGVzL0RvY3VtZW50cy9jYWNoZS92aWRlby5tM3U4XFxcIjtcXG4gICAgICAgICAgICAvL3dyaXRlRmlsZShsY2FjaGUsYmFjayk7XFxuICAgICAgICAgICAgLy9yZXR1cm4gbGNhY2hlK1xcXCIjI1xcXCIrcGxheVVybCtcXFwiI2lzVmlkZW89dHJ1ZSNcXFwiXFxuICAgICAgICAgICAgcGxheVVybD1jYWNoZU0zdTgocGxheVVybCk7XFxuICAgICAgICAgICAgcmV0dXJuIHBsYXlVcmxcXG4gICAgICAgIH1lbHNlIGlmKCghL+inpuWPkeS6humYsuebl+mTvnzmnKrmjojmnYN85o6l5Y+j6Ziy55uXLy50ZXN0KGJhY2spKSYmKCEvaHR0cHx1cmwvLnRlc3QoYmFjaykpJiYoIS9tc2d8Y29kZXxodG1sLy50ZXN0KGJhY2spKSl7XFxuICAgICAgICAgICAgbG9nKGJhY2spO1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/nlpHkvLzlr7nmlrnmlbDmja7liqDlr4bkuobvvIzlhbfkvZPmlbDmja7nnIvml6Xlv5cnXFxuICAgICAgICB9XFxuICAgIH1jYXRjaChlKXtcXG4gICAgICAgIGxvZyhlLm1lc3NhZ2UpO1xcbiAgICAgICAgcmV0dXJuIGJhZFxcbiAgICB9XFxuICAgIHRyeSB7XFxuICAgICAgICBiYWNrPUpTT04ucGFyc2UoYmFjayk7XFxuICAgICAgICBsZXQgcmVhbFVybD1iYWNrLnVybDtcXG4gICAgICAgIGlmKHR5cGVvZihyZWFsVXJsKT09XFxcInVuZGVmaW5lZFxcXCJ8fCFyZWFsVXJsKXtcXG4gICAgICAgICAgICBsb2coYmFjayk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+mBk+mVv+S7k+W6k+ino+aekOWksei0pe+8gei/lOWbnuaSreaUvuWcsOWdgOS4uuepulxcXCJcXG4gICAgICAgIH0gZWxzZSBpZih0eXBlb2YoaXNWaWRlbyhyZWFsVXJsLHJlY2hhbmdlKSk9PSdzdHJpbmcnKXtcXG4gICAgICAgICAgICByZXR1cm4gaXNWaWRlbyhyZWFsVXJsLHJlY2hhbmdlKTtcXG4gICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgIHJldHVybiByZWFsVXJsK1xcXCIjaXNWaWRlbz10cnVlI1xcXCI7XFxuICAgICAgICB9XFxuICAgICAgICAvL2Vsc2V7XFxuICAgICAgICAvL3JlYWxVcmwrPVxcXCI7e1VzZXItQWdlbnRATW96aWxsYS81LjB9XFxcIjtcXG4gICAgICAgIC8vIH1cXG4gICAgfWNhdGNoIChlKSB7XFxuICAgICAgICBsb2coXFxcIuajgOa1i+WIsOino+aekOWPo+mdnmpzb27plJnor686XFxcIitlLm1lc3NhZ2UrJyzlvIDlp4t4NeWFjeWXheaOoicpO1xcbiAgICAgICAgbGV0IG1zID0gcGFyc2VJbnQobXMpfHw1MDAwO1xcbiAgICAgICAgbGV0IG1heF9jb3VudD1NYXRoLmNlaWwobXMvMjUwKTtcXG4gICAgICAgIGxvZyhcXFwi5pys5qyh5ZeF5o6i6LaF5pe2OlxcXCIrbXMrXFxcIuWFseiuoeW+heaKk+WMhTpcXFwiK21heF9jb3VudCtcXFwi5qyhXFxcIik7XFxuICAgICAgICBzaG93TG9hZGluZygn5ZeF5o6i5Lit77yM6Iul5aSx6LSl5bCx6YeN6KOFeDUuLi4nKTtcXG4gICAgICAgIGxldCBfeDUgPSAkLnRvU3RyaW5nKChpc1ZpZGVvLHJlY2hhbmdlLHBsYXlVcmwsbWF4X2NvdW50LFBDX1VBKT0+e1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIGlmKHR5cGVvZihmYmEpPT0ndW5kZWZpbmVkJ3x8IWZiYSl7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgZmJhID0gZnlfYnJpZGdlX2FwcDtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mKHJlcXVlc3QpPT0ndW5kZWZpbmVkJ3x8IXJlcXVlc3Qpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoZmJhLmdldEludGVybmFsSnMoKSk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1jYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICAgICAgZmJhLmxvZyhlLm1lc3NhZ2UpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGZiYS5wdXRWYXIoXFxcIl94NWp4VXJsXFxcIixwbGF5VXJsKTtcXG4gICAgICAgICAgICAgICAgaWYod2luZG93LmNvdW50ID09IG51bGwpe1xcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmNvdW50PTE7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgbGV0IHRleHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcXFwiYm9keVxcXCIpLmlubmVyVGV4dDtcXG4gICAgICAgICAgICAgICAgaWYoL+inpuWPkeS6humYsuebl+mTvnzmnKrmjojmnYN85o6l5Y+j6Ziy55uXLy50ZXN0KHRleHQpJiZ3aW5kb3cuY291bnQ9PT0xKXtcXG4gICAgICAgICAgICAgICAgICAgIGZiYS5sb2coXFxcIuajgOa1i+WIsOacieaOiOadg++8jOW8gOWni+i/h+aOiOadg1xcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgLy9sb2NhdGlvbi5yZWxvYWQoKTtcXG4gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLmhyZWY9ZmJhLmdldFZhcihcXFwiX3g1anhVcmxcXFwiKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB3aW5kb3cuY291bnQrKztcXG4gICAgICAgICAgICAgICAgLy8gZmJhLmxvZygnY291bnQ6Jyt3aW5kb3cuY291bnQrJyxtYXhfY291bnQ6JyttYXhfY291bnQpO1xcbiAgICAgICAgICAgICAgICBpZiggd2luZG93LmNvdW50ID49IG1heF9jb3VudCl7XFxuICAgICAgICAgICAgICAgICAgICBmYmEubG9nKFxcXCLotoXov4dcXFwiK21heF9jb3VudCoyNTArXFxcIuavq+enkuacquiOt+WPluWIsOi1hOa6kOWcsOWdgO+8jOi3s+WIsOa6kOe9kemhtSzku6XkuIvmmK/liqDovb3ov4fnmoTlnLDlnYBcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB0ZXh0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXFxcImJvZHlcXFwiKS5pbm5lclRleHQ7XFxuICAgICAgICAgICAgICAgICAgICAvLyBmYmEubG9nKHRleHQpO1xcbiAgICAgICAgICAgICAgICAgICAgZmJhLmxvZyhKU09OLnN0cmluZ2lmeShfZ2V0VXJscygpKSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmJhLmdldFZhcihcXFwiX3g1anhVcmxcXFwiKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBtdXRlTWUoZWxlbSkge1xcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnBhdXNlKCk7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHZhciB2aWRlb3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFxcXCJ2aWRlb1xcXCIpLCBhdWRpb3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFxcXCJhdWRpb1xcXCIpLCB2MiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXFxcImVtYmVkXFxcIiksIHYzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcXFwiI3BsYXllclxcXCIpO1xcbiAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgW10uZm9yRWFjaC5jYWxsKHZpZGVvcywgZnVuY3Rpb24gKHZpZGVvKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbXV0ZU1lKHZpZGVvKTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcbiAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgW10uZm9yRWFjaC5jYWxsKGF1ZGlvcywgZnVuY3Rpb24gKGF1ZGlvKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbXV0ZU1lKGF1ZGlvKTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcbiAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgW10uZm9yRWFjaC5jYWxsKHYyLCBmdW5jdGlvbiAodikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG11dGVNZSh2KTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcbiAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgW10uZm9yRWFjaC5jYWxsKHYzLCBmdW5jdGlvbiAodikge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG11dGVNZSh2KTtcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcbiAgICAgICAgICAgICAgICB2YXIgdXJscyA9IF9nZXRVcmxzKCk7XFxuICAgICAgICAgICAgICAgIC8vIGZiYS5sb2coSlNPTi5zdHJpbmdpZnkodXJscykpO1xcbiAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpIGluIHVybHMpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdT11cmxzW2ldO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnl7dT1kZWNvZGVVUklDb21wb25lbnQodSk7fWNhdGNoKGUpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdT11bmVzY2FwZSh1KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKC91cmw9aHR0cC8udGVzdCh1KSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSB1LnNwbGl0KFxcXCJ1cmw9XFxcIikuc2xpY2UoLTEpWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYmEubG9nKFxcXCJ1cmzliIblibI6XFxcIit1KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZigvdmlkPWh0dHAvLnRlc3QodSkpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gdS5zcGxpdChcXFwidmlkPVxcXCIpLnNsaWNlKC0xKVswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmJhLmxvZyhcXFwidmlk5YiG5YmyOlxcXCIrdSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYoL1xcXFw/KC4qKT1odHRwLy50ZXN0KHUpKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IFxcXCJodHRwXFxcIit1LnNwbGl0KC9cXFxcPyguKik9aHR0cC8pLnNsaWNlKC0xKVswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmJhLmxvZyhcXFwi5YW25LuW5YiG5YmyOlxcXCIrdSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYoL1xcXFwvMVxcXFwubTN1OCQvLnRlc3QodSkpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlYWxVcmwgPSBpc1ZpZGVvKHUscmVjaGFuZ2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZihyZWFsVXJsKT09J3N0cmluZycpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYmEubG9nKFxcXCLku5PlupN4NeWFjeWXhee7k+aenDpcXFwiK3JlYWxVcmwpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2Z5X2JyaWRnZV9hcHAuc2V0V2ViVWEoUENfVUEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVhbFVybFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfWNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgICAgICBmYmEubG9nKGUubWVzc2FnZSlcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1jYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICAvLyBmeV9icmlkZ2VfYXBwLmxvZygneDXlpKfojIPlm7TplJnor686JytlLm1lc3NhZ2UpO1xcbiAgICAgICAgICAgICAgICBhbGVydCgneDXlpKfojIPlm7TplJnor686JytlLm1lc3NhZ2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5oql6ZSZ57uT5p2feDUnXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSxpc1ZpZGVvLHJlY2hhbmdlLHBsYXlVcmwsbWF4X2NvdW50LFBDX1VBKTtcXG4gICAgICAgIGNvbnN0IGxzZz0kLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9sb2NhbFN0b3JhZ2U/cnVsZT3pgZPplb/ku5PlupNQcm9cXFwiKTtcXG4gICAgICAgIGxldCB1c2VXZWI9bHNnLmdldEl0ZW0oXFxcIumAmuWFjVxcXCIsXFxcIlg1XFxcIik9PT1cXFwiV0VCXFxcIjtcXG4gICAgICAgIC8vbG9nKFxcXCLku5PlupPkvb/nlKh3ZWLpgJrlhY3mm7/ku6N4NTpcXFwiK3VzZVdlYik7XFxuICAgICAgICBsZXQgcnVsZUhlYWQ9dXNlV2ViJiZwYXJzZUludChnZXRBcHBWZXJzaW9uKCkpPj0yMzM5P1xcXCJ3ZWJSdWxlOi8vXFxcIjpcXFwieDVSdWxlOi8vXFxcIjtcXG4gICAgICAgIGxldCB4NVVybCA9IHJ1bGVIZWFkK3BsYXlVcmwrICdAJyArX3g1O1xcbiAgICAgICAgcmV0dXJuIHg1VXJsXFxuICAgIH1cXG59XFxuXFxuZnVuY3Rpb24geDVQYXJzZVBybyh4NWxpc3QseDVUaW1lb3V0LGlzVmlkZW8pe1xcbiAgICBsZXQgYnBhdGggPSAnZmlsZTovLy9zdG9yYWdlL2VtdWxhdGVkLzAvQW5kcm9pZC9kYXRhL2NvbS5leGFtcGxlLmhpa2Vydmlldy9maWxlcy9Eb2N1bWVudHMvcnVsZXMvZHpIb3VzZS9odG1sL+a1t+mYlOWXheaOouWZqC5odG1sJztcXG4gICAgbGV0IGJjb2RlID0gZmV0Y2goYnBhdGgpO1xcbiAgICBpZighYmNvZGV8fCEvZnlfYnJpZGdlX2FwcC8udGVzdChiY29kZSkpe1xcbiAgICAgICAgbG9nKCfmnKzlnLDmnKrlronoo4Xll4XmjqLlmajvvIzlvIDlp4vlronoo4UnKTtcXG4gICAgICAgIGNvbnN0IHthcGl9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdXRpbGl5P3J1bGU96YGT6ZW/5LuT5bqTUHJvXFxcIik7XFxuICAgICAgICB3cml0ZUZpbGUoYnBhdGgsZmV0Y2goYXBpLmhvc3QrJy9ydWxlbGlzdC5qc29uP2lkPTIwNTUnKSk7XFxuICAgIH1cXG4gICAgeDVUaW1lb3V0ID0gcGFyc2VJbnQoeDVUaW1lb3V0KXx8NTAwMDtcXG4gICAgbGV0IG1heF9jb3VudD0oeDVUaW1lb3V0LzI1MCk7IC8v5qC55o2u6LaF5pe26Ieq5Yqo6K6h566X5LqG5Y+v5omn6KGM55qE5qyh5pWwXFxuICAgIHB1dFZhcigneDVMaXN0JyxKU09OLnN0cmluZ2lmeSh4NWxpc3QpKTtcXG4gICAgbGV0IF94NSA9ICQudG9TdHJpbmcoKGlzVmlkZW8sIG1heF9jb3VudCx4NVRpbWVvdXQpID0+IHtcXG4gICAgICAgIC8v5Yid5aeL5YyWZmJh5ZKMcmVxdXN0XFxuICAgICAgICBpZiAodHlwZW9mIChmYmEpID09ICd1bmRlZmluZWQnIHx8ICFmYmEpIHtcXG4gICAgICAgICAgICB2YXIgZmJhID0gZnlfYnJpZGdlX2FwcDtcXG4gICAgICAgIH1cXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgaWYgKHR5cGVvZiAocmVxdWVzdCkgPT0gJ3VuZGVmaW5lZCcgfHwgIXJlcXVlc3QpIHtcXG4gICAgICAgICAgICAgICAgZXZhbChmYmEuZ2V0SW50ZXJuYWxKcygpKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgZmJhLmxvZyhlLm1lc3NhZ2UpO1xcbiAgICAgICAgfVxcbiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS1cXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgaWYgKHdpbmRvdy5jb3VudCA9PSBudWxsKSB7XFxuICAgICAgICAgICAgICAgIHdpbmRvdy5jb3VudCA9IDE7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGxldCB0ZXh0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXFxcImJvZHlcXFwiKS5pbm5lclRleHQ7XFxuICAgICAgICAgICAgaWYoL+inpuWPkeS6humYsuebl+mTvnzmnKrmjojmnYN85o6l5Y+j6Ziy55uXLy50ZXN0KHRleHQpJiZ3aW5kb3cuY291bnQ9PTEpe1xcbiAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTtcXG4gICAgICAgICAgICAgICAgZmJhLmxvZyhcXFwi5qOA5rWL5Yiw5pyJ5o6I5p2D77yM5byA5aeL6L+H5o6I5p2DXFxcIik7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHdpbmRvdy5jb3VudCsrO1xcbiAgICAgICAgICAgIC8vIGZiYS5sb2coJ2NvdW50OicgKyB3aW5kb3cuY291bnQgKyAnLG1heF9jb3VudDonICsgbWF4X2NvdW50KTtcXG4gICAgICAgICAgICBpZiAod2luZG93LmNvdW50ID49IG1heF9jb3VudCkge1xcbiAgICAgICAgICAgICAgICBmYmEuY2xlYXJWYXIoJ3g1TGlzdCcpO1xcbiAgICAgICAgICAgICAgICBmYmEuaGlkZUxvYWRpbmcoKTtcXG4gICAgICAgICAgICAgICAgbGV0IGZtc2cgPSAn6YGT6ZW/5LuT5bqT6YCa5YWN6Kej5p6Q5aSx6LSlLOWOn+WboDrotoXml7YnK3g1VGltZW91dCsn5q+r56eSJztcXG4gICAgICAgICAgICAgICAgZmJhLmxvZyhmbXNnKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovLycrZm1zZztcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9Y2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICBmYmEubG9nKGUubWVzc2FnZSk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBmdW5jdGlvbiBtdXRlTWUoZWxlbSkge1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIGVsZW0ucGF1c2UoKTtcXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIHZpZGVvcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXFxcInZpZGVvXFxcIiksIGF1ZGlvcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXFxcImF1ZGlvXFxcIiksXFxuICAgICAgICAgICAgdjIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFxcXCJlbWJlZFxcXCIpLCB2MyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXFxcIiNwbGF5ZXJcXFwiKTtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgW10uZm9yRWFjaC5jYWxsKHZpZGVvcywgZnVuY3Rpb24gKHZpZGVvKSB7XFxuICAgICAgICAgICAgICAgIG11dGVNZSh2aWRlbyk7XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICB9XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIFtdLmZvckVhY2guY2FsbChhdWRpb3MsIGZ1bmN0aW9uIChhdWRpbykge1xcbiAgICAgICAgICAgICAgICBtdXRlTWUoYXVkaW8pO1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgfVxcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBbXS5mb3JFYWNoLmNhbGwodjIsIGZ1bmN0aW9uICh2KSB7XFxuICAgICAgICAgICAgICAgIG11dGVNZSh2KTtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgIH1cXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgW10uZm9yRWFjaC5jYWxsKHYzLCBmdW5jdGlvbiAodikge1xcbiAgICAgICAgICAgICAgICBtdXRlTWUodik7XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgdXJscyA9IF9nZXRVcmxzKCk7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIGZvciAobGV0IGkgaW4gdXJscykge1xcbiAgICAgICAgICAgICAgICBsZXQgdT11cmxzW2ldO1xcbiAgICAgICAgICAgICAgICAvL3U9ZGVjb2RlVVJJQ29tcG9uZW50KHUpO1xcbiAgICAgICAgICAgICAgICB0cnl7dT1kZWNvZGVVUklDb21wb25lbnQodSk7fWNhdGNoKGUpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdT11bmVzY2FwZSh1KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZigvdXJsPWh0dHAvLnRlc3QodSkpe1xcbiAgICAgICAgICAgICAgICAgICAgdSA9IHUuc3BsaXQoXFxcInVybD1cXFwiKS5zbGljZSgtMSlbMF07XFxuICAgICAgICAgICAgICAgIH1lbHNlIGlmKC92aWQ9aHR0cC8udGVzdCh1KSl7XFxuICAgICAgICAgICAgICAgICAgICB1ID0gdS5zcGxpdChcXFwidmlkPVxcXCIpLnNsaWNlKC0xKVswXTtcXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYoL1xcXFw/KC4qKT1odHRwLy50ZXN0KHUpKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IFxcXCJodHRwXFxcIit1LnNwbGl0KC9cXFxcPyguKik9aHR0cC8pLnNsaWNlKC0xKVswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9mYmEubG9nKFxcXCLlhbbku5bliIblibI6XFxcIit1KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZigvXFxcXC8xXFxcXC5tM3U4JC8udGVzdCh1KSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIGxldCByZWFsVXJsID0gaXNWaWRlbyh1KTtcXG4gICAgICAgICAgICAgICAgaWYgKHJlYWxVcmwpIHtcXG4gICAgICAgICAgICAgICAgICAgIGZiYS5sb2coXFxcIuS7k+W6k3g15YWN5ZeF57uT5p6cOlxcXCIgKyByZWFsVXJsKTtcXG4gICAgICAgICAgICAgICAgICAgIGZiYS5jbGVhclZhcigneDVMaXN0Jyk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVhbFVybFxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIGZiYS5sb2coZS5tZXNzYWdlKVxcbiAgICAgICAgfVxcbiAgICB9LCBpc1ZpZGVvLCBtYXhfY291bnQseDVUaW1lb3V0KTtcXG4gICAgY29uc3QgbHNnPSQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2xvY2FsU3RvcmFnZT9ydWxlPemBk+mVv+S7k+W6k1Byb1xcXCIpO1xcbiAgICAgICAgbGV0IHVzZVdlYj1sc2cuZ2V0SXRlbShcXFwi6YCa5YWNXFxcIixcXFwiWDVcXFwiKT09PVxcXCJXRUJcXFwiO1xcbiAgICAgICAgLy9sb2coXFxcIuS7k+W6k+S9v+eUqHdlYumAmuWFjeabv+S7o3g1OlxcXCIrdXNlV2ViKTtcXG4gICAgbGV0IHJ1bGVIZWFkPXVzZVdlYiYmcGFyc2VJbnQoZ2V0QXBwVmVyc2lvbigpKT49MjMzOT9cXFwid2ViUnVsZTovL1xcXCI6XFxcIng1UnVsZTovL1xcXCI7XFxuICAgIHJldHVybiBydWxlSGVhZCticGF0aCsnQCcgKyBfeDU7XFxufVxcblxcbmZ1bmN0aW9uIExhenlQYXJzZUZhc3QocGxheVVybExpc3QsZ2V0VGltZW91dCx4NVRpbWVvdXQpe1xcbiAgICBjb25zdCB7aXNWaWRlbyxnZXRIZWFkZXJzLHg1UGFyc2VQcm99ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvZ2xvYmFsUGFyc2U/cnVsZT3pgZPplb/ku5PlupNQcm8nKTtcXG4gICAgLy8gbG9nKCflvIDlp4vmiafooYwnK3BsYXlVcmxMaXN0Lmxlbmd0aCsn5Liq5Zyw5Z2A55qE5om56YeP5ZeF5o6iOicrcGxheVVybExpc3QpO1xcbiAgICBsb2coJ+W8gOWni+aJp+ihjCcrcGxheVVybExpc3QubGVuZ3RoKyfkuKrlnLDlnYDnmoTmibnph4/ll4XmjqInKTtcXG4gICAgbGV0IHBsYXlVcmxzID0gcGxheVVybExpc3QubWFwKChpdCk9PntcXG4gICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgdXJsOml0LnNwbGl0KFxcXCI7XFxcIilbMF0sXFxuICAgICAgICAgICAgb3B0aW9uczoge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAvL1xcXCJVc2VyLUFnZW50XFxcIjogXFxcIkRhcnQvMi4xMyAoZGFydDppbylcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOlxcXCJNb3ppbGxhLzUuMFxcXCJcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgdGltZW91dDogZ2V0VGltZW91dFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfSk7XFxuICAgIGxldCBiaHRtbCA9IGJhdGNoRmV0Y2gocGxheVVybHMpO1xcbiAgICBsZXQgdmlkZW9zID0gW107XFxuICAgIGxldCB4NWxpc3QgPSBbXTtcXG4gICAgZm9yKGxldCBpIGluIGJodG1sKXtcXG4gICAgICAgIGxldCBvcmRlciA9IHBhcnNlSW50KGkpKzE7XFxuICAgICAgICBsZXQgdG5hbWU9b3JkZXIrJ+WPt+ino+aekOe9keWdgDonO1xcbiAgICAgICAgLy9sb2codG5hbWUpO1xcbiAgICAgICAgbGV0IHR1cmw9cGxheVVybExpc3RbaV0uc3BsaXQoXFxcIjtcXFwiKVswXTtcXG4gICAgICAgIGxldCBqbmFtZT1wbGF5VXJsTGlzdFtpXS5zcGxpdChcXFwiO1xcXCIpLmxlbmd0aD4xP3BsYXlVcmxMaXN0W2ldLnNwbGl0KFxcXCI7XFxcIilbMV06XFxcIlxcXCI7XFxuICAgICAgICB0bmFtZSs9am5hbWU7XFxuICAgICAgICBsZXQgYmFja2NvZGUgPSBiaHRtbFtpXTtcXG4gICAgICAgIGlmKCghL3VybHxodHRwLy50ZXN0KGJhY2tjb2RlKSkmJighLyNFWFRJTkYvLnRlc3QoYmFja2NvZGUpKSl7XFxuICAgICAgICAgICAgbG9nKHRuYW1lK3R1cmwrJ+aciemXrumimCzlj6/og73liqDlr4bmiJbogIXmjILkuoYnKTtcXG4gICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgIH1lbHNlIGlmKC8jRVhUSU5GLy50ZXN0KGJhY2tjb2RlKSl7XFxuICAgICAgICAgICAgLy9sZXQgbGNhY2hlPVxcXCIvc3RvcmFnZS9lbXVsYXRlZC8wL0FuZHJvaWQvZGF0YS9jb20uZXhhbXBsZS5oaWtlcnZpZXcvZmlsZXMvRG9jdW1lbnRzL2NhY2hlL3ZpZGVvX1xcXCIrdG5hbWUrXFxcIi5tM3U4XFxcIjtcXG4gICAgICAgICAgICAvL3dyaXRlRmlsZShsY2FjaGUsYmFja2NvZGUpO1xcbiAgICAgICAgICAgIC8vdmlkZW9zLnB1c2gobGNhY2hlKTtcXG4gICAgICAgICAgICBsZXQgcFVybD1jYWNoZU0zdTgodHVybCk7XFxuICAgICAgICAgICAgdmlkZW9zLnB1c2gocFVybCk7XFxuICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICB9XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIGxldCB1cmwgPSBKU09OLnBhcnNlKGJhY2tjb2RlKS51cmw7XFxuICAgICAgICAgICAgaWYoL15odHRwLy50ZXN0KHVybCkpe1xcbiAgICAgICAgICAgICAgICBsZXQgcmVhbFZpZGVvID0gaXNWaWRlbyh1cmwpO1xcbiAgICAgICAgICAgICAgICBpZih0eXBlb2YocmVhbFZpZGVvKT09J3N0cmluZycpe1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKHRuYW1lKyflt7Lop6PmnpDlh7rop4bpopE6JytyZWFsVmlkZW8pO1xcbiAgICAgICAgICAgICAgICAgICAgaWYoam5hbWUpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxWaWRlbys9XFxcIuKYhVxcXCIram5hbWVcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHZpZGVvcy5wdXNoKHJlYWxWaWRlbyk7XFxuICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKHRuYW1lKyfop6PmnpDlh7rkuI3nn6XpgZPku4DkuYjkuJzopb86Jyt1cmwpO1xcbiAgICAgICAgICAgICAgICAgICAgdXJsKz1cXFwiI2lzVmlkZW89dHJ1ZSNcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgaWYoam5hbWUpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybCs9XFxcIuKYhVxcXCIram5hbWVcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHZpZGVvcy5wdXNoKHVybCk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgbG9nKHRuYW1lKyfkuLpqc29u5o6l5Y+j5LiU5peg6L+U5Zue6KeG6aKR5Zyw5Z2A5pWw5o2uOicrcGxheVVybExpc3RbaV0rJ1xcXFxuJytiYWNrY29kZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfWNhdGNoIChlKSB7XFxuICAgICAgICAgICAgbG9nKHRuYW1lKyfkuLp4NeaOpeWPoyzliqDlhaV4NeWXheaOouWIl+ihqCcpO1xcbiAgICAgICAgICAgIHg1bGlzdC5wdXNoKHBsYXlVcmxMaXN0W2ldKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICAvLyBsb2codmlkZW9zKTtcXG4gICAgaWYodmlkZW9zLmxlbmd0aD4wKXtcXG4gICAgICAgIGlmKGdldFZhcignZHAuY2FjaGVWaWRlbycsJ3RydWUnKT09PSd0cnVlJyYmcGFyc2VJbnQoZ2V0QXBwVmVyc2lvbigpKT49MjI1NSlcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBsb2coXFxcIuWwiuaVrOeahOmtlOaWreeUqOaIt++8jOinhumikee8k+WtmOW3suWQr+eUqO+8jOivt+WwveaDheS6q+WPl+eci+WJp+aXtuWFiVxcXCIpO1xcbiAgICAgICAgICAgIGxldCB2aWRlb3NDYWNoZT12aWRlb3MubWFwKChpdCk9PntcXG4gICAgICAgICAgICAgICAgbGV0IGhlYWRlcnM9e307XFxuICAgICAgICAgICAgICAgIGlmKGl0LnNwbGl0KFxcXCI7XFxcIikubGVuZ3RoPjEpe1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGhlYWQgPSBpdC5zcGxpdCgnOycpWzFdO1xcbiAgICAgICAgICAgICAgICAgICAgaWYoL0AvLnRlc3QoaGVhZCkmJi97fH0vLnRlc3QoaGVhZCkpe1xcbi8vaGVhZCA9IGhlYWQucmVwbGFjZSgve3x9L2csJycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQgPSBoZWFkLnNwbGl0KFxcXCJ7XFxcIilbMV0uc3BsaXQoXFxcIn1cXFwiKVswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkID0gaGVhZC5zcGxpdCgnJiYnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGkgaW4gaGVhZCl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBrZXkgPSBoZWFkW2ldLnNwbGl0KCdAJylbMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9aGVhZFtpXS5zcGxpdCgnQCcpWzFdLnJlcGxhY2UoLzsvLCfvvJvvvJsnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1trZXldID0gdmFsdWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgICAgICB1cmw6aXQuc3BsaXQoXFxcIjtcXFwiKVswXS5zcGxpdChcXFwi4piFXFxcIilbMF0sXFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zOntcXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOmhlYWRlcnNcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHZhciBkYXRhPWJhdGNoQ2FjaGVNM3U4KHZpZGVvc0NhY2hlKTtcXG4gICAgICAgICAgICBkYXRhPWRhdGEubWFwKChpdCxpZCk9PntcXG4gICAgICAgICAgICAgICAgbGV0IGV4dHJhPVxcXCJcXFwiO1xcbiAgICAgICAgICAgICAgICBpZih2aWRlb3NbaWRdLnNwbGl0KFxcXCI7XFxcIikubGVuZ3RoPjEpe1xcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE9XFxcIjtcXFwiK3ZpZGVvc1tpZF0uc3BsaXQoXFxcIjtcXFwiKVsxXTtcXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYodmlkZW9zW2lkXS5zcGxpdChcXFwi4piFXFxcIikubGVuZ3RoPjEpe1xcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE9XFxcIuKYhVxcXCIrdmlkZW9zW2lkXS5zcGxpdChcXFwi4piFXFxcIilbMV07XFxuICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgaWYoaXQrXFxcIlxcXCIhPVxcXCJudWxsXFxcIil7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXQrZXh0cmFcXG4gICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmlkZW9zW2lkXVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgLy9sb2coZGF0YSk7XFxuICAgICAgICAgICAgcmV0dXJuIGRhdGFcXG4gICAgICAgICAgICAvL3JldHVybiB2aWRlb3NcXG4gICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgIHJldHVybiB2aWRlb3NcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBsb2coJ+WFseaciScreDVsaXN0Lmxlbmd0aCsn5LiqeDXlnLDlnYDov5vooYzova7mtYHll4XmjqInKTtcXG4gICAgLy/msqHmnInnmoTor53lsLHlvIDlp4vkvp3mrKF4NeWXheaOolxcbiAgICBzaG93TG9hZGluZygn5ZeF5o6i5Lit77yM6Iul5aSx6LSl5bCx6YeN6KOFeDUuLi4nKTtcXG4gICAgcmV0dXJuIHg1UGFyc2VQcm8oeDVsaXN0LHg1VGltZW91dCxpc1ZpZGVvKTtcXG59XFxudmFyIGxhenk9JCgnJykubGF6eVJ1bGUoKCk9PntcXG4gICAgdHJ5e1xcbiAgICAgICAgcmVhbFVybD1pbnB1dDtcXG4gICAgICAgIGV2YWwoXFxcInZhciBjb25maWcgPVxcXCIgKyBmZXRjaChcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb25cXFwiKSk7XFxuICAgICAgICBldmFsKGZldGNoKGNvbmZpZy5jaikpO1xcbiAgICAgICAgbG9nKGlucHV0KyctPuato+WcqOaWreaPkumtlOaUueeJiOino+aekC4uLicpO1xcbiAgICAgICAgLy8g5Yqg5YWl6LaF5pe26K6+572u77yM5bu66K6u5Zyo6aaW6aG16K6+572uXFxuICAgICAgICByZXR1cm4gYXl0bVBhcnNlKHJlYWxVcmwpXFxuICAgIH1jYXRjaChlKXtcXG4gICAgICAgIHJldHVybiBpbnB1dFxcbiAgICB9XFxufSk7XFxuJC5leHBvcnRzLmlzUGljPWlzUGljO1xcbiQuZXhwb3J0cy5pc1ZpZGVvPWlzVmlkZW87XFxuJC5leHBvcnRzLmNvbVBhcnNlPWNvbVBhcnNlO1xcbiQuZXhwb3J0cy5nZXRIZWFkZXJzPWdldEhlYWRlcnM7XFxuJC5leHBvcnRzLmxhenlQYXJzZT1sYXp5UGFyc2U7XFxuJC5leHBvcnRzLng1UGFyc2VQcm89eDVQYXJzZVBybztcXG4kLmV4cG9ydHMuTGF6eVBhcnNlRmFzdD1MYXp5UGFyc2VGYXN0O1xcbiQuZXhwb3J0cy5sYXp5PWxhenk7XCJ9LHtcIm5hbWVcIjpcIuS7u+WKoeS7k+W6k+aOpeWPo1wiLFwicGF0aFwiOlwidGFza0NhbGxcIixcInJ1bGVcIjpcImpzOlxcblN0cmluZy5wcm90b3R5cGUuc3RyaXAgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLnJlcGxhY2UoLyheXFxcXHMqKXwoXFxcXHMqJCkvZywgXFxcIlxcXCIpOyB9O1xcbmZ1bmN0aW9uIHRhc2tfcmVxKHRhc2tfYXBpLHRhc2spIHsgLy8g6YCa55So5Y+R6YCB5LuT5bqTcG9zdOiwg+eUqOS7u+WKoeivt+axglxcbiAgICBjb25zdCB7Z2V0RmlsZX0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS91dGlsaXk/cnVsZT3pgZPplb/ku5PlupNQcm9cXFwiKTtcXG4gICAgbGV0IGhvdXNlRmlsZSA9IGdldEZpbGV8fGZhbHNlO1xcbiAgICBpZighaG91c2VGaWxlKXtcXG4gICAgICAgIHNldEl0ZW0oJ2lzX2hvdXNlX3ZpcCcsICdmYWxzZScpO1xcbiAgICB9XFxuICAgIGxldCBob3VzZV9kYXRhID0gaG91c2VGaWxlKCk7XFxuICAgIGxldCByZXN1bHQgPSByZXF1ZXN0KHRhc2tfYXBpLCB7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xcbiAgICAgICAgfSxcXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICBcXFwicGFyYW1zXFxcIjoge1xcbiAgICAgICAgICAgICAgICBcXFwiZGF0YVxcXCI6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJ0eXBlXFxcIjogdGFzay5tb2RlfHwncnVuJyxcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJmdW5jXFxcIjogdGFzay5mdW5jfHwnJyxcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJwYXJhbXNcXFwiOiB0YXNrLnBhcmFtc3x8W11cXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgXFxcImF1dGhcXFwiOiB7XFxuICAgICAgICAgICAgICAgICAgICBcXFwibmFtZVxcXCI6IGhvdXNlX2RhdGEudXNlcm5hbWV8fFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcInBhc3N3b3JkXFxcIjogaG91c2VfZGF0YS5wYXNzd29yZHx8XFxcIlxcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pLFxcbiAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgfSk7XFxuICAgIHJldHVybiBKU09OLnBhcnNlKHJlc3VsdCkucmVzdWx0O1xcbn1cXG5cXG5mdW5jdGlvbiB0YXNrX3VwbG9hZCh0YXNrKXsgLy8g6YCa55So5Lu75Yqh5Y+R5biD5paw5aKe5Y+K5L+u5pS55Yqf6IO9XFxuICAgIGNvbnN0IHthcGksZ2V0RmlsZX0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS91dGlsaXk/cnVsZT3pgZPplb/ku5PlupNQcm9cXFwiKTtcXG4gICAgbGV0IGhvdXNlRmlsZSA9IGdldEZpbGV8fGZhbHNlO1xcbiAgICBpZighaG91c2VGaWxlKXtcXG4gICAgICAgIHNldEl0ZW0oJ2lzX2hvdXNlX3ZpcCcsICdmYWxzZScpO1xcbiAgICB9XFxuICAgIGxldCBhcGlfdXJsID0gYXBpLmhvc3QrJy9oaWtlcnVsZS90YXNrL2FkZCc7XFxuICAgIGxldCBob3VzZV9kYXRhID0gaG91c2VGaWxlKCk7XFxuICAgIGxldCByZXN1bHQgPSByZXF1ZXN0KGFwaV91cmwsIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXFxuICAgICAgICB9LFxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgIFxcXCJwYXJhbXNcXFwiOiB7XFxuICAgICAgICAgICAgICAgIFxcXCJkYXRhXFxcIjoge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcIm5hbWVcXFwiOiB0YXNrLm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICBcXFwicHljb2RlXFxcIjogdGFzay5weWNvZGUsXFxuICAgICAgICAgICAgICAgICAgICBcXFwibm90ZVxcXCI6IHRhc2subm90ZSxcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJ0ZXN0X2NvZGVcXFwiOiB0YXNrLnRlc3RfY29kZSxcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgXFxcImF1dGhcXFwiOiB7XFxuICAgICAgICAgICAgICAgICAgICBcXFwibmFtZVxcXCI6IGhvdXNlX2RhdGEudXNlcm5hbWV8fFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgXFxcInBhc3N3b3JkXFxcIjogaG91c2VfZGF0YS5wYXNzd29yZHx8XFxcIlxcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pLFxcbiAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgfSk7XFxuICAgIHJldHVybiBKU09OLnBhcnNlKHJlc3VsdCkucmVzdWx0O1xcbn1cXG5cXG5mdW5jdGlvbiB0YXNrX2NhbGwoaWQsZnVuYyxwYXJhbXMpe1xcbiAgICBjb25zdCB7YXBpfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3V0aWxpeT9ydWxlPemBk+mVv+S7k+W6k1Byb1xcXCIpO1xcbiAgICBsZXQgdGFza19hcGkgPSBhcGkuaG9zdCsnL2hpa2VydWxlL3Rhc2svcnVuLycraWQ7XFxuICAgIGxldCB0YXNrID0ge1xcbiAgICAgICAgbW9kZTonY2FsbCcsXFxuICAgICAgICBmdW5jOmZ1bmMsXFxuICAgICAgICBwYXJhbXM6cGFyYW1zfHxbXVxcbiAgICB9O1xcbiAgICByZXR1cm4gdGFza19yZXEodGFza19hcGksdGFzayk7XFxufVxcblxcbmZ1bmN0aW9uIHRhc2tfcmVuYW1lKGlkLG5ld190YXNrX25hbWUpe1xcbiAgICBjb25zdCB7YXBpLGdldEZpbGV9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdXRpbGl5P3J1bGU96YGT6ZW/5LuT5bqTUHJvXFxcIik7XFxuICAgIGxldCBob3VzZUZpbGUgPSBnZXRGaWxlfHxmYWxzZTtcXG4gICAgaWYoIWhvdXNlRmlsZSl7XFxuICAgICAgICBzZXRJdGVtKCdpc19ob3VzZV92aXAnLCAnZmFsc2UnKTtcXG4gICAgfVxcbiAgICBsZXQgaG91c2VfZGF0YSA9IGhvdXNlRmlsZSgpO1xcbiAgICBsZXQgdGFza19hcGkgPSBhcGkuaG9zdCsnL2hpa2VydWxlL3Rhc2svcmVuYW1lLycraWQ7XFxuICAgIHRhc2tfYXBpID0gdGFza19hcGkrJz9uYW1lPScraG91c2VfZGF0YS51c2VybmFtZSsnJnBhc3N3b3JkPScraG91c2VfZGF0YS5wYXNzd29yZCsnJnRhc2tfbmFtZT0nK25ld190YXNrX25hbWU7XFxuICAgIHRyeSB7XFxuICAgICAgICBsZXQgcmVzdWx0ID0gSlNPTi5wYXJzZShmZXRjaCh0YXNrX2FwaSx7fSkpO1xcbiAgICAgICAgaWYocmVzdWx0LnN0YXR1cz09MCl7XFxuICAgICAgICAgICAgcmV0dXJuICByZXN1bHQuZGV0YWlsXFxuICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJlc3VsdCsnJytyZXN1bHQuZGV0YWlsXFxuICAgICAgICB9XFxuICAgIH1jYXRjaCAoZSkge1xcbiAgICAgICAgbG9nKGUubWVzc2FnZSk7XFxuICAgICAgICByZXR1cm4gJycrZS5tZXNzYWdlXFxuICAgIH1cXG59XFxuXFxuZnVuY3Rpb24gdGFza19jaGFuZ2Vfc3RhdGUoaWQpe1xcbiAgICBjb25zdCB7YXBpLGdldEZpbGV9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdXRpbGl5P3J1bGU96YGT6ZW/5LuT5bqTUHJvXFxcIik7XFxuICAgIGxldCBob3VzZUZpbGUgPSBnZXRGaWxlfHxmYWxzZTtcXG4gICAgaWYoIWhvdXNlRmlsZSl7XFxuICAgICAgICBzZXRJdGVtKCdpc19ob3VzZV92aXAnLCAnZmFsc2UnKTtcXG4gICAgfVxcbiAgICBsZXQgaG91c2VfZGF0YSA9IGhvdXNlRmlsZSgpO1xcbiAgICBsZXQgdGFza19hcGkgPSBhcGkuaG9zdCsnL2hpa2VydWxlL3Rhc2svY2hhbmdlX3N0YXRlLycraWQ7XFxuICAgIHRhc2tfYXBpID0gdGFza19hcGkrJz9uYW1lPScraG91c2VfZGF0YS51c2VybmFtZSsnJnBhc3N3b3JkPScraG91c2VfZGF0YS5wYXNzd29yZDtcXG4gICAgdHJ5IHtcXG4gICAgICAgIGxldCByZXN1bHQgPSBKU09OLnBhcnNlKGZldGNoKHRhc2tfYXBpLHt9KSk7XFxuICAgICAgICBpZihyZXN1bHQuc3RhdHVzPT0wKXtcXG4gICAgICAgICAgICByZXR1cm4gIHJlc3VsdC5kZXRhaWxcXG4gICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQucmVzdWx0KycnK3Jlc3VsdC5kZXRhaWxcXG4gICAgICAgIH1cXG4gICAgfWNhdGNoIChlKSB7XFxuICAgICAgICBsb2coZS5tZXNzYWdlKTtcXG4gICAgICAgIHJldHVybiAnJytlLm1lc3NhZ2VcXG4gICAgfVxcbn1cXG5cXG5mdW5jdGlvbiB0YXNrX3J1bihpZCl7XFxuICAgIGNvbnN0IHthcGl9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdXRpbGl5P3J1bGU96YGT6ZW/5LuT5bqTUHJvXFxcIik7XFxuICAgIGxldCB0YXNrX2FwaSA9IGFwaS5ob3N0KycvaGlrZXJ1bGUvdGFzay9ydW4vJytpZDtcXG4gICAgbGV0IHRhc2sgPSB7fTtcXG4gICAgcmV0dXJuIHRhc2tfcmVxKHRhc2tfYXBpLHRhc2spO1xcbn1cXG5cXG4kLmV4cG9ydHMudGFza0NhbGwgPSB0YXNrX2NhbGw7XFxuJC5leHBvcnRzLnRhc2tSdW4gPSB0YXNrX3J1bjtcXG4kLmV4cG9ydHMudGFza1JlcSA9IHRhc2tfcmVxO1xcbiQuZXhwb3J0cy50YXNrVXBsb2FkID0gdGFza191cGxvYWQ7XFxuJC5leHBvcnRzLnRhc2tSZW5hbWUgPSB0YXNrX3JlbmFtZTtcXG4kLmV4cG9ydHMudGFza0NoYW5nZVN0YXRlID0gdGFza19jaGFuZ2Vfc3RhdGU7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLlhajlsYDlgqjlrZhcIixcInBhdGhcIjpcImxvY2FsU3RvcmFnZVwiLFwicnVsZVwiOlwibGV0IGxvY2FsU3RvcmFnZSA9IChmdW5jdGlvbigpIHtcXG4gICAgZXZhbFByaXZhdGVKUyhcXFwiandVS3dOVGlQR2NXU0xDWEI1WHRBWHdiNkxRYlZ5SEQrMFhKN2wwN2NlMD1cXFwiKTtcXG4gICAgLy9wYXRodG89dW5kZWZpbmVkO1xcbiAgICBldmFsUHJpdmF0ZUpTKFxcXCI0QzBZeFJZbkdDWWtnRlJYdHBsL0N6NXpMNWhoNGpDQ3p0YituZytXb2t5bVE4b1VyelM5bEE4eXhDNWFGYWRuU0VteUhLTWJyYWZsUnFYQ25OUkhEbGs2dWU4eUhUTzE2bEJQcnB3Z3M1amYwUGhyQXRvVEpJRTBaSG45bUthUTRKZDJlcnFiNEk1NWJlV0lldWdLc0RzMjExU3pJTlE1eUpnU2gxZFZ1Tnp6eFJHSmc0MEZtVHVWbVhWZk4xeGcyV0lHSEJFbWtWbkd4bU9SaFBPTkErUTVWd1BtZHA0MS9oemUzZUlzVXZobzdWQ0JnSzRyYUptUGFsSVJCQlZsQ1ZnbjhGa1dtZktxWm8rVlcrb0JjSDdocmNyc1NsQ1NqQmFuZ1QvN3N5V0h4S1loZWhVMGthTVlqbldGZzFFbTBjbU5SdG9tQ3NIejFCOHEzMk9lUUhvYXdkV3h6S09hTUhPWERCalJvakE4RS9haDBXUk95emlxUlN4bC9tOGRoQmQwZjlwaFl6LzVTVS96SkQ1MlgvOUVDMTZXVlZkcFNXMzNha1JIUnNsUHBSbFRXRjkrQXlSbVJ3MGVaT0VzMW85UU1QQVFVZkF4Yll5RkhnenR3L08yZEpScEh5VG1pQmlhYXFUY2l2eDZ2OXp5dkJ6MDR3STFBYVNDdWkrZFR1VTNsdTV4ZEV0M0FqdDZaM2lEWE9WY0VQMEVERjc0NzRQUVU2SkVadXdlOTdTY2g0Ymkxd0IxWEhaU2ZJdGRsWVlvR2VkM0xMcGJtREFJUmNpdjByQW9wOFZtUWNUdDJLM0xmaDFSRFlZMFl0dlJjSDQ5T3ZwRFJIL3hhNUZjOE1ZM0RyRm9BN3Fjb0Y0ZUNnaVZCZkJnSlI2OCtMcFFLN3RPa2c4azllYyszTlN4SlRoY2w4ZDZ5Tnd4VDlUazE3emVKZ2Q2TW95WVpJcFdRTGxGNll2Yk9kRVdoam1uQTc4d0MwaFd6K1htNmhRTVNxdEZ3K2JoRmY3Y0JHVTNhYXRQRm1kQ1kyRWRYZmgwSVlXODV3ZE95TWZpd1c3L3ZWVHA5aUUwMEkzRjA5d0dIa0dLaFZiTHVlQWtZZTd6ekpYUjd0aGFGb3I2SDdxTG1KamJSUWs5ZXZOdEJRWE5SN0RpZmlYdVFmMmx0N25PSDgwU1dtMWZESEh6am1Qc05JcHMyVFhHVCtpd1ZWNjlnL3RXaXBWUTZEOEJUeCtjQ1FwNDdubVRJclkrcU40a2gyRlloNUxsd1hkZ0l5eTFWSXVDM3gwNTNld0FJSVVtbFk5bmlFcHFZdCsxZkZQWE9DdENHdFliU2QzN3ZWUjFFT2oyazVHdS8rOUpXZzJxdndsMXR3ZWxnMUowdHhhcklpNGtUYlRydnJuRkxOOTJwb2ZwWlFVZm9XbzRjZTdIV05kYnU0SktFcmFMUVVmZGZHRVBkMVRJdWZ1dVJWYTM5ZXE5R1p5U0R1Qkw2ME1QZGxkeEt3MXpvK2ZCNVpZK1lNajNMTDJnR3REYnM5OCtBc1JWOUxKV21VbXN4OTFobUp0RlVNV0QzeG5qOEhNWldzME5QbENGVXI5NDg1S3FUcG81a1J6R2ZGK2svTmwySnpydjVjdmtxdFVuTGdLcFhFT2ovc2Uvb0R6T0FyUUtJNVROVWJ2WXdjd2NkampNU2ZqSzY4S3J3aHMrbjZTbVdaNFpkZ1JIZ0FLNU1vRmkzWG1MVjQ3UDN2U1JXdTV6eUVzTWs0eTN1dUNGaXVSUFJsdTRRNXBKdnVPZW03SDdVTGlJaENlbXY1RGdrR3RETDFjR0w0RVFoWVJCNklTelZ2c2IyRWFQOXdRRTZEVlJuTTdPK3BuU3pldDZsenAzcEZkR25ib3gxTFJmQzYwdXRYWitDakltNGlFTW10YkIyTjV6RFNoR2JlTTNYVWJKUWRDQmlzOFhJcmhoMmJpQjVoQkNWd24zWTNldHQ3R0RQVnRvaTFHUmp6K0piZ00rWVI5MjhLYmRXUzV0RmFNTTNLajNYdjZvdEl4ek1CbkRDOXVXM2QrSVh4NnZMUEowSlJ1aDN5UDdwVGxhNmMzaVI0cDluV1lEcUorWlNtcHJIRm5ET3pzTFdtRmphcGplL01xd01KZDZUazNuQVd3aWNNT1B1WXBNeXFJRjA0Zmw0bXFndHNITFNNV1JSTkhQWmpFVFE5Z1JtZURZZTZhUnRsVzAycUwyb2xERU5xTFFNdEFkb2lyTldSY1A5VkwzVGQ4SGFVTzZmU2xHTmFiTWFrSkQvMDBYQ2hPU1VPSVArN2ZNN1YwL2wxYkxXUHRFejFpN0x5Z1RWN3BkR29EbnRxU0NFbkpyQnloQkF6TFJnNVFJYzk0MzhJaEtteWZuMC8zYXdvRDFJcjc4MGV5cC9YY0k2eE5jdzZUdi9FVGZIZzBlN2lZQzBVWWNKSUU1UVVYdjBzK1lvR0lFcTVHSXpLdWI4SE5qU1RVcHN2bmtWeCtkYmUyalJuM1liOVc3SkNaNVlTNkY1TXlVVnNwak1EN05ZYytEV2pVTDJiMnNWeUFmZVlwQzhVaGFoOXR1bWF2YkJ2N2EzYTlrZ0ZicTU4bHJIeHpZN2lKUVZpZ3pxM2UxYTJCU2IwUGNXMWFKOEJEN05rTnBoS1lheVR4eWtnd2lsRVJMOGpxcUJFbmlIVmRCeERKWUxiK1h3M2FsTG1sdHVURVY2S0d0Qm50QlgreXozNlJQRE15R0lLZSszZnpjeGZuQ0RuMjBNb2RWVmtWTm96UHFNWFowRzVMNGFMVEFRYWtZS1Vqc1ZNUWpBaFFrVGxIQmVPL2FMUHg5c3hsKytqMVo1ckxnRzEyVE40WEoxZWljdnc0QVZFNThMb3JhcTBRaUUwY1M3UEgxcGJyWldyZnQ3TFlHaXlCU2hvcjcrMGppb1VoMXBkV3EycU1ZTHFlTUVldUNST1F0NTdtRnJPanlQSDQ5cXA5N2NXT3JnZWcyV3lmV1NER1FQamU1K1AweVFvQ3BEL0QzUkFNdVdtYjl3bEJ0Y3EyajhXSlB0OTFFM2tLYXd1UUl5dmQycjJVang0K0hUTnRWS2I5a01MT084NUk2NWJOR0JIKzRpclN5NWdRWWxFMjZBMmNTR0ljTEtRUmx2Sm9NbmE3TC85d3lyeTRIek9yemtyQXZMZGdzU05sWWpwSFFFUmlPSTgwc0o1ak5DQ25mdzAxM0YrQStzQWZMbXlTL0JETE5RMXFhUTNwNmg4L0pxQWZoWDVPR0hnU2lSVk9DRWp1YURCL013Wk5DdTNRTDllaGhvQWo3dU9mOFBrcjNtSWpiaGg5SGlqc2p4MTkxKzBlMkpRckZhMDFBVkpLRVZ0dVB0SWMyaC8xcFBLTXZ5ZW54alRPMk94UG5qanQrODRuSUtLaHhESi9naFB0N2l2OFBtVEowbEtLeVBSc3NsOGYvUWRIZHh1cGI2alRzSTZVS216OVk0NlBNQnVENlAzd2g4cXAzNk82b2liTkRpUWQxc0UxMHZKaDl6MUZ5c0tJZThFcU1wbk5kRW1HMlRmRUJ4UnBtUXJoS0VxZWUwcDYrYTZzUW84Y1ZsUkprS1FBWUthd2NhTkVTNVhjNmRRWTVucWVpcThzVWl6ZjFzcGZIZUhlbER1MU02QlJYdUNqRmFmWGh6OGkzbFBXZ1lxVnBmeDEzaWdWQ1JmNDdVSDY1MnlMbnNtZXBDQldneUJUV0FjT3lGMVF4OFlHdFpub2IxVE4rNnhFd3pwY1dWeTdRTzlQOTJzS0E5U0srL05Ic3FmMTNDT3QwSkhDdFRWMU9sVFFXK0pBS3l4ZTFIbDcrczk1ejNLQ2dGS1FTKzNBczFKVjdOYStnK0xDUjJJZXZ1OGQ1RDBMN0d3b0RyZVV2NDM3NExSYUZrTnNIT3FXYlU5bmhRamRNVnI3YS9pOE8vNGhicHRhU3pxcWtnWUZpTkZVL29tVzVxd0l6N3NwNG5zY0lUUkUzZ3VhNmJ6a2xNWjhFQ24xaXFBV3QwYTZnZWtpNURhTDhxWWFwVENDaGpsV3NFeHFGdXhpV1AzNVRVQ2RkRWQ4QUNiTUdzK2dRRnlET296ZkJERzE3ZFpPMG1Dd1crUHpDTDJqYklDRE5haTUvam0xUXI2TUw1Nmp6VWFJRHowR0xQVFNhZXgxVUREd2tROW83bVhXQzBSN2pXbnpia0hSV2NvbVZiV21HcUwxcmpkb2Fjcy9SOXVqcVV1QkE2QTVWTC9xa1ExeEhMNDJFWG9vcHJDOHdycmZSNjh6TU1GeE93VTdDWUhKN2JoRy9RNHJOc1hEQmNNbzFBZGlxOUxYYlhtL1FKajB1L2pnWkdzc3owbm5LS1VGSmN4enVBTks5NnpXd2YxRFhhc1VjT29FdUVhdG0xcm1QNXdyQkptVy9ad1Q2YUJCaVIyT1NKMHhyOHRRNk9ibWRLanliKzFlRVhiMTQzN1IySWRoRFVkazVQUnp0SDJZRnQycG11TDQvTG1JTEZBdlBkaXlNdERITmorS2g0c1Y0TWxYYldQcnJJOTdZQk9GcEZsWCtnbmV3S0tmRlprSEU3ZGl0eTM0ZFVRMkduZTZzQUd4MXp4eWpadjVLQk0yNmxSSEY0NVhxRk5KMVJRM2hNeW1KSHN5WU5zTU80MUJXckd2MTlQQTQ2OGVjdzlIY1JOMHdoalVUZ25zOFpWYUM0aGlKc2dZMDdhQUVCSG05MC91aGhqTy9XbWI3d3VWYWRobDlSbkhlUWpweDRnd0NyTHo1aTVzNUl0MXNCd2ZEYjBGZStQQ3BMa2Mrd0lJTksyWTg2a1B0aFI2Z0p3Vzc1enVvTjVDMENBaUR3ZlU3M3ZhQVphaHpmNFZMTmxNMFUwNE90SFlCaTEzWWdQb05tR0hSZWxaVkV5Mkt1S1ZaZ2hEMTR2U2xZK0pyTUJEZG0yeTJ0aEZWK0JyaWhMNytmUTV3Y1lueEdlbGF3RHVvU1I1K2JERGtyNlJMNDBMNHh5ZkFoeGxyT24wdUEyOGdoR2VXZ3VhV0tFdjVuQnJydmV1MXVlVnkxTXZHVVlCWStJbEVyOE5kRE5SZG1Felh0MzlrR2xkODZ4T2ZBSC94TDFWbXVnYVhPR2FQQjJxYzdXRFJrVzZrNUY2bjNQa0l6ZFBYeU9OS3AxRGtPZzNvY1NNWk1UczZHS2o5QzN2T0RaNlpRcHdORFlMTVQrQ21FTDE4R1JqWE5jWmxQL0xuaGlBSXNjWVRMMStpSFdEWXZSbXZQTXd0T0hoQ25FWElVM0ZUYlArNlFSR0E2cXlkYm5uZXFWaFhvd2NMbWJNSXoxNklDMWt3aFpqNzUvTTUzc0tZWDJ6UmdPU1RBZk5TRC81bFpZU05VeEpmS1REZ2lhRkVnZ3JDcmQrM0NjK2NoenNsSTN6RFhFS1RydmxjWDJJbkM5dUgrZnN5cHlIdytBdlkyT21CR1FNSUljOGZFM3ROTzBnQlRWcVhzZHNFNzZZd0hyMjlkelFja3VzdXlKc0JmU1ZjbHJ2c05DWjFQUURMOEgzY1JzM0hFOW5Va3g1YmJKWVdzUHhiODI1Z25FcFdVOVo5S3R6dnNsaTcvaGVPbERLcEh4SmIxdUNyV3FmOGdSbldtcTN6ZlNTclVYQkhTTHU2Mk1ya1hUaldnYXBVVnhNR2tybnpSMEU0UE15MWJGY3lEcEVRZTE1VGF5V0JNMUI2anJJRyswRFJSOU9hQ1VQd0Q3ZXhObWpaYjlNODF1cytBSVJmeXpKUFpHbWZIdVQ5U056RmZOdVFkRlp5aVpWdGFZYW92V3VOMmlySTN6UWF0S0NEblFJWHByMFZoRzBHb3A4Yy96cm9XQm9OL2FWS21uOHNrU0Z2QURPam9aQWl4ZzZLMXk5d0ZpOHBlQ21pbUZaM1p6Q1ZzRzZFVTlTdmxicTUrd243RDZ5K2RBWWRhUG1zNGd3Q3JMejVpNXM1SXQxc0J3ZkRiejRYNFZ4cUlwY1RDOU5hWUtxQTdHS0srYVRyWldVd3dOMjFRT3RyOGVxeFNnSjFVOWVDT2NXWFFkK3AzNkd5NGZZK3Q5YzJDc1ZOYk5sMWdoeGE5Ykk4VTZlNkZUZC92dkJhcTlqcktkaXRxNG1OQ2Fpb2dtZlBLNk00OFVZSThqWk1DZGQvOUM4QnF2VWo0YllVNWJ5V0FTRUc2QkJHZEs4S2xmaS9hNExXdDNpdkM0dTlRQlRmYi92Q21OSmkvUUFmYWJjUEcrVXNXbXNZTlJLK2c4aE1jc3VCbWhoNDhOcGhSdmViVlFxcTZuY0t4YzFuRkhXTVc1TTZvZit6OGMxSGRkbmllRFA5R2FCc3EreXNsaktzbFlydDk4OVBZOXhzYm1rcjNYL29DZmlGVTROZmNPaGVlKytuZ1cwWHBaQVZ0MUkyUW5jMWFsd2Jub05xTU1oWElCOTVpa0x4U0ZxSDIyNlpxOXNHL3RyZHIyU0FWdXJueVdzZkhOanVJbEJXS0RPcmQ3VnJZRkp2UTl4YlZvbUtxUWp1aDlkemYybnZWckJ6YkVGMENaWTZpemtZL1JRWTVyOWs5My95Mk5HN28wN25NWWpPdFpZWWVOVW9pazdHYksvSHpRbDFTN3MvRkNobnQ5TTZmRTBVeXVQbXR0Tzk4aHF6eFFidGVNYWxNdFNjZTJXTGNqeVhWR2ZwcWRCa1l5bTRnWkJ5Y2NTNmFudHQ0b0xkbHVXU1NKc0hYMUljWGhReTZvSitBaGp3OWhGWXdYTEhQTG9DbzNqRWxpVUFLNDE3OXd0WXRIc08wYWJMeDQraG10TTVGejd3VVZhaEJBOXN1cE9UZi9GRDRzaVpNTW9mNVczdm01RGVkaHFHQU5saHQzbUk2Um1JaHY0OFFWdG5lTXNVellDNE5EaFpENE01UjZwN0dYQnFjcHUzRmFFRi8wSTBlM0xjZVgxSE4raURxS1JQdUd6dnBhYy8xdHNHUEl0ZUFEeHU5T1lvYXAyejNGMUN6U2cvVXVhOGwvS0V6dEFLRGN2YmhOVS9ZVWMybGhneGdmZGI0ZStQOVRaN1JhWDgyczYyN3UwQ2JGc2ZHRS8xaExwYjVNYzJ2azF1REdyZEljYldBNnhocFlBSFloRVlVbDljNzVZL1IvMGdsNnI5K202Y0kwQnZCWTVBYTVOQlJjNlVNdnNPL1BPdzVDY3I3OXNKemljZWFWM1l3cllFa2pwNktpK09Zckd1OTU0QUErZEo5V3N2TkdCRkdNcktBZlE5VlVDL0FUa0pmVGxvTWx0RGVWNUFvOXprYWF5M2RLQWE1L1B4QUdSREFVY1FMREY3dVZYYkQxdkZnRS8rUlhpd3pTNU43Y3IzYUZCZFJZN1hBbUZ6L2ZiMC9LU3BSOENRL2xva3BtTTJtbHRKOXZHUGdpcWI1blpsOUt1N2QyR2xnQWRpRVJoU1gxenZsajlIL1NCdWpCUG9PMWZwb091NUYzNWNkSGE1a1NGdkFET2pvWkFpeGc2SzF5OXdGbGowRXo1a3NVVzNXVTYzRTdlNHF0RFVDS1d3ampVNWYwRmQ1N1Z5VnpwQzZDZENTY0JqWVN6VDlyWkxWc2txNjFhT1dyRERVTktxQVEzK25YL0JCVzNjUVRFY09WZGMxNW5nVlhjU1MvYUsyUUZNZGlLUWxxbTE1ZkVySmR3cXllemE3aGZsS1RpQ3pVZHU1VkdsRlc5cUN0OHN5SG9vc0EyTnpmb3NKZFRkTjhiV0hub0RyNU4yNWV0K3AvbnZqak96WlJhTFlvWS9mci9rNWhxcHRPaz1cXFwiKTtcXG4gICAgcmV0dXJuICQuZXhwb3J0cztcXG59KSgpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi57yW6L6R5YWs5ZGKXCIsXCJwYXRoXCI6XCJkZXZJbmZvRWRpdFwiLFwicnVsZVwiOlwianM6XFxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKCgpPT57XFxuICAgIHB1dE15VmFyKFxcXCJkZXZJbmZvXFxcIiwnJyk7IC8v5riF6Zmk5Y6G5Y+y5YWs5ZGKXFxufSkpO1xcbnNldFBhZ2VUaXRsZSgn57yW6L6R5YWs5ZGKJyk7XFxuLy8gbGV0IHtub3dKeCxNeUppZXhpLGp4c1JvdXRlfSA9IE1ZX1BBUkFNUztcXG5jb25zdCB7Y29sb3Isc21hbGwsYXBpLCBnZXRGaWxlLGdldEFwaX0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS91dGlsaXlcXFwiKTtcXG4vLyBsZXQgaG91c2VGaWxlID0gZ2V0RmlsZXx8ZmFsc2U7XFxudmFyIGRldl9pbmZvX3VybCA9IGdldEFwaSgnaW5mb0dldFVybCcpO1xcbi8vIGxvZyhkZXZfaW5mb191cmwpO1xcbnZhciBnZXRfaW5mbyA9IGZ1bmN0aW9uKHFxKXtcXG4gICAgcXEgPSBxcXx8JzQzNDg1NzAwNSc7XFxuICAgIGxldCBkZXZfaW5mb191cmwgPSBkZXZfaW5mb191cmwrcXE7XFxuICAgIGxldCBiYWNrX2NvZGUgPSBKU09OLnBhcnNlKHJlcXVlc3QoZGV2X2luZm9fdXJsKSk7XFxuICAgIGxldCBkZXZfaW5mbz1iYWNrX2NvZGUucmVzdWx0fHxiYWNrX2NvZGUuZGV0YWlsO1xcbiAgICByZXR1cm4gZGV2X2luZm87XFxufTtcXG52YXIgYmVmb3JlX3JlZnJlc2ggPSBmdW5jdGlvbigpe1xcbiAgICBsZXQgZGV2X3NldF9pbmZvID0gZ2V0TXlWYXIoXFxcImRldl9zZXRfaW5mb1xcXCIpLnNwbGl0KCckJCcpO1xcbiAgICBsZXQgZGV2X2luZm9fdXJsID0gZGV2X3NldF9pbmZvLnNsaWNlKC0xKVswXTtcXG4gICAgbGV0IGJhY2tfY29kZSA9IEpTT04ucGFyc2UocmVxdWVzdChkZXZfaW5mb191cmwpKTtcXG4gICAgbGV0IGRldl9pbmZvPWJhY2tfY29kZS5yZXN1bHR8fGJhY2tfY29kZS5kZXRhaWw7XFxuICAgIHB1dE15VmFyKFxcXCJkZXZJbmZvXFxcIixkZXZfaW5mbyk7XFxuICAgIHJldHVybiBkZXZfaW5mb1xcbn07XFxubGV0IGQgPSBbXTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTon57yW6L6R5YWs5ZGKJyxcXG4gICAgZGVzYzon5pSv5oyBbWTor63ms5Us54K55Ye76L+b5YWl5a2m5LmgTWTor63ms5VcXFxcbuS/neWtmOWFrOWRiuaMiemSruWcqOaWh+acrOahhuacgOS4i+mdoicsXFxuICAgIGNvbF90eXBlOid0ZXh0XzEnLFxcbiAgICB1cmw6J2h0dHBzOi8vd3d3LnJ1bm9vYi5jb20vbWFya2Rvd24vbWQtdHV0b3JpYWwuaHRtbCdcXG59KTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTon6L+U5ZueJyxcXG4gICAgY29sX3R5cGU6J3RleHRfMicsXFxuICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpPT57XFxuICAgICAgICBiYWNrKGZhbHNlKTtcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgfSlcXG59KTtcXG5pZighZ2V0TXlWYXIoJ2RldkluZm8nKSl7XFxuICAgIGJlZm9yZV9yZWZyZXNoKCk7XFxufVxcbmxldCBlbXB0eSA9ICdoaWtlcjovL2VtcHR5JztcXG5kLnB1c2goe1xcbiAgICB0aXRsZTon6ZiF6KeI5p+l6ZiFJyxcXG4gICAgY29sX3R5cGU6J3RleHRfMicsXFxuICAgIC8vIHVybDokKGdldE15VmFyKCdkZXZJbmZvJykpLmNvbmZpcm0oKVxcbiAgICB1cmw6JChlbXB0eSkucnVsZSgoKT0+e1xcbiAgICAgICAgcmVxdWlyZShcXFwiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9tYXJrZWQvbWFya2VkLm1pbi5qc1xcXCIpO1xcbiAgICAgICBsZXQgZGV2SW5mbz1cXFwiXFxcIjtcXG4gICAgICAgdHJ5e1xcbiAgICAgICAgICBkZXZJbmZvPW1hcmtlZC5wYXJzZShnZXRNeVZhcignZGV2SW5mbycpKTtcXG4gICAgICAgfWNhdGNoKGUpe31cXG4gICAgICAgIHNldFJlc3VsdChbXFxuICAgICAgICAgICAge1xcbiAgICAgICAgICAgICAgICB0aXRsZTpkZXZJbmZvLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZToncmljaF90ZXh0JyxcXG4gICAgICAgICAgICB9XFxuICAgICAgICBdKTtcXG4gICAgfSlcXG59KTtcXG5kLnB1c2goe1xcbiAgICBkZXNjOiBcXFwi5b+r5p2l57yW6L6R5L2g55qE5YWs5ZGK5ZCnflxcXCIsXFxuICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgdGl0bGVWaXNpYmxlOiBmYWxzZSxcXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoJ2RldkluZm8nLCAnJyl8fFxcXCJcXFwiLFxcbiAgICAgICAgdHlwZTogXFxcInRleHRhcmVhXFxcIixcXG4gICAgICAgIGhlaWdodDotMSxcXG4gICAgICAgIG9uQ2hhbmdlOiAncHV0TXlWYXIoXFxcImRldkluZm9cXFwiLGlucHV0KSdcXG4gICAgfVxcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOlxcXCLkv53lrZjlhazlkYpcXFwiLFxcbiAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcbiAgICB1cmw6JCgn56Gu6K6k5L+d5a2Y5YWs5ZGK5ZCX77yf5bCG5Lya5LiO6YGT6ZW/5LuT5bqT5pyN5Yqh5Zmo6YCa6K6vJykuY29uZmlybSgoKT0+e1xcbiAgICAgICAgbGV0IGRldl9zZXRfaW5mbyA9IGdldE15VmFyKFxcXCJkZXZfc2V0X2luZm9cXFwiKS5zcGxpdCgnJCQnKTtcXG4gICAgICAgIGxldCBpbnB1dF90ZXh0ID0gZ2V0TXlWYXIoJ2RldkluZm8nLCAnJyk7XFxuICAgICAgICBpZihpbnB1dF90ZXh0Lmxlbmd0aCA+PSA0KXtcXG4gICAgICAgICAgICBsZXQgaW5mb19zZXRfdXJsPSBkZXZfc2V0X2luZm9bMl07XFxuICAgICAgICAgICAgbGV0IHNlbmRfZGF0YSA9IHtcXFwicGFyYW1zXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgIHtcXFwiZGF0YVxcXCI6IHtcXFwiaW5mb1xcXCI6IGlucHV0X3RleHR9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJuYW1lXFxcIjogZGV2X3NldF9pbmZvWzBdLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJwYXNzd29yZFxcXCI6IGRldl9zZXRfaW5mb1sxXX1cXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIC8vIGxvZyhzZW5kX2RhdGEpO1xcbiAgICAgICAgICAgIGxldCBwYXIyID0ge2hlYWRlcnM6eydjb250ZW50LXR5cGUnOidhcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9VVRGLTgnLCdVc2VyLUFnZW50JzpkZXZfc2V0X2luZm9bM119LGJvZHk6SlNPTi5zdHJpbmdpZnkoc2VuZF9kYXRhKSxtZXRob2Q6J1BPU1QnfTtcXG4gICAgICAgICAgICAvLyBwYXIyID0gSlNPTi5zdHJpbmdpZnkocGFyMik7IC8veDXph4zpnaLor7fmsYLmiY3pnIDopoHnvJbnoIFcXG4gICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICBsZXQgYmFja19yZXQgPSByZXF1ZXN0KGluZm9fc2V0X3VybCwgcGFyMik7XFxuICAgICAgICAgICAgICAgIGJhY2tfcmV0ID0gSlNPTi5wYXJzZShiYWNrX3JldCkucmVzdWx0O1xcbiAgICAgICAgICAgICAgICBpZihiYWNrX3JldC5zdGF0dXM9PT0wKXtcXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5L+d5a2Y5oiQ5YqfXFxcXG4nK2JhY2tfcmV0LmRldGFpbDtcXG4gICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5L+d5a2Y5aSx6LSlXFxcXG4nK2JhY2tfcmV0LmRldGFpbDtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1jYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6ZSZ6K+vXFxcXG4nK2UubWVzc2FnZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICBjb25maXJtKHt0aXRsZTon6YGT6ZW/5o+Q56S6Jyxjb250ZW50Oifomb3nhLbkvaDlvojmh5LvvIzkvYbmmK/lhazlkYroh7PlsJHlhpk05Liq5a2X5ZCn77yBJ30pO1xcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgIH1cXG4gICAgfSlcXG59KTtcXG5cXG5zZXRSZXN1bHQoZCk7XCJ9XSIsImljb24iOiJodHRwczovL2xhbm1laWd1b2ppYW5nLmNvbS90dWJpYW8vb3RoZXIvMzAuc3ZnIn0=
Add Comment
Please, Sign In to add comment