3N4XMPXxEs6eZsy78Fgo4butfcAiwoDtG9P · data · 2.7c767379.chunk.js_51
{
"2.7c767379.chunk.js_51": "base64:cGUudXBkYXRlPWZ1bmN0aW9uKGUscil7cmV0dXJuInN0cmluZyI9PT10eXBlb2YgZSYmKGU9bmV3IHQoZSxyKSksdGhpcy5faGFzaC51cGRhdGUoZSksdGhpc30sZi5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKGUscixuKXsic3RyaW5nIj09PXR5cGVvZiByJiYocj1uZXcgdChyLG4pKSx0aGlzLmVuZCgpO3ZhciBpPXRoaXMuX2hhc2guZGlnZXN0KCk7cmV0dXJuIHMocixpLGUsdGhpcy5fc2lnblR5cGUsdGhpcy5fdGFnKX0sZS5leHBvcnRzPXtTaWduOmwsVmVyaWZ5OmgsY3JlYXRlU2lnbjpsLGNyZWF0ZVZlcmlmeTpofX0pLmNhbGwodGhpcyxyKDE4KS5CdWZmZXIpfSxmdW5jdGlvbihlLHQscil7KGZ1bmN0aW9uKHQpe3ZhciBuPXIoMzE2KSxpPXIoMjE3KSxvPXIoMjE4KS5lYyxhPXIoMjQpLHM9cigxNjEpLHU9cigzMzkpO2Z1bmN0aW9uIGMoZSxyLGksbyl7aWYoKGU9bmV3IHQoZS50b0FycmF5KCkpKS5sZW5ndGg8ci5ieXRlTGVuZ3RoKCkpe3ZhciBhPW5ldyB0KHIuYnl0ZUxlbmd0aCgpLWUubGVuZ3RoKTthLmZpbGwoMCksZT10LmNvbmNhdChbYSxlXSl9dmFyIHM9aS5sZW5ndGgsdT1mdW5jdGlvbihlLHIpe2U9KGU9ZihlLHIpKS5tb2Qocik7dmFyIG49bmV3IHQoZS50b0FycmF5KCkpO2lmKG4ubGVuZ3RoPHIuYnl0ZUxlbmd0aCgpKXt2YXIgaT1uZXcgdChyLmJ5dGVMZW5ndGgoKS1uLmxlbmd0aCk7aS5maWxsKDApLG49dC5jb25jYXQoW2ksbl0pfXJldHVybiBufShpLHIpLGM9bmV3IHQocyk7Yy5maWxsKDEpO3ZhciBsPW5ldyB0KHMpO3JldHVybiBsLmZpbGwoMCksbD1uKG8sbCkudXBkYXRlKGMpLnVwZGF0ZShuZXcgdChbMF0pKS51cGRhdGUoZSkudXBkYXRlKHUpLmRpZ2VzdCgpLGM9bihvLGwpLnVwZGF0ZShjKS5kaWdlc3QoKSx7azpsPW4obyxsKS51cGRhdGUoYykudXBkYXRlKG5ldyB0KFsxXSkpLnVwZGF0ZShlKS51cGRhdGUodSkuZGlnZXN0KCksdjpjPW4obyxsKS51cGRhdGUoYykuZGlnZXN0KCl9fWZ1bmN0aW9uIGYoZSx0KXt2YXIgcj1uZXcgYShlKSxuPShlLmxlbmd0aDw8MyktdC5iaXRMZW5ndGgoKTtyZXR1cm4gbj4wJiZyLmlzaHJuKG4pLHJ9ZnVuY3Rpb24gbChlLHIsaSl7dmFyIG8sYTtkb3tmb3Iobz1uZXcgdCgwKTs4Km8ubGVuZ3RoPGUuYml0TGVuZ3RoKCk7KXIudj1uKGksci5rKS51cGRhdGUoci52KS5kaWdlc3QoKSxvPXQuY29uY2F0KFtvLHIudl0pO2E9ZihvLGUpLHIuaz1uKGksci5rKS51cGRhdGUoci52KS51cGRhdGUobmV3IHQoWzBdKSkuZGlnZXN0KCksci52PW4oaSxyLmspLnVwZGF0ZShyLnYpLmRpZ2VzdCgpfXdoaWxlKC0xIT09YS5jbXAoZSkpO3JldHVybiBhfWZ1bmN0aW9uIGgoZSx0LHIsbil7cmV0dXJuIGUudG9SZWQoYS5tb250KHIpKS5yZWRQb3codCkuZnJvbVJlZCgpLm1vZChuKX1lLmV4cG9ydHM9ZnVuY3Rpb24oZSxyLG4scCxkKXt2YXIgeT1zKHIpO2lmKHkuY3VydmUpe2lmKCJlY2RzYSIhPT1wJiYiZWNkc2EvcnNhIiE9PXApdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uKGUscil7dmFyIG49dVtyLmN1cnZlLmpvaW4oIi4iKV07aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGN1cnZlICIrci5jdXJ2ZS5qb2luKCIuIikpO3ZhciBpPW5ldyBvKG4pLmtleUZyb21Qcml2YXRlKHIucHJpdmF0ZUtleSkuc2lnbihlKTtyZXR1cm4gbmV3IHQoaS50b0RFUigpKX0oZSx5KX1pZigiZHNhIj09PXkudHlwZSl7aWYoImRzYSIhPT1wKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpLG89ci5wYXJhbXMucHJpdl9rZXkscz1yLnBhcmFtcy5wLHU9ci5wYXJhbXMucSxwPXIucGFyYW1zLmcsZD1uZXcgYSgwKSx5PWYoZSx1KS5tb2QodSksZz0hMSx2PWMobyx1LGUsbik7ITE9PT1nOylpPWwodSx2LG4pLGQ9aChwLGkscyx1KSwwPT09KGc9aS5pbnZtKHUpLmltdWwoeS5hZGQoby5tdWwoZCkpKS5tb2QodSkpLmNtcG4oMCkmJihnPSExLGQ9bmV3IGEoMCkpO3JldHVybiBmdW5jdGlvbihlLHIpe2U9ZS50b0FycmF5KCkscj1yLnRvQXJyYXkoKSwxMjgmZVswXSYmKGU9WzBdLmNvbmNhdChlKSksMTI4JnJbMF0mJihyPVswXS5jb25jYXQocikpO3ZhciBuPVs0OCxlLmxlbmd0aCtyLmxlbmd0aCs0LDIsZS5sZW5ndGhdO3JldHVybiBuPW4uY29uY2F0KGUsWzIsci5sZW5ndGhdLHIpLG5ldyB0KG4pfShkLGcpfShlLHksbil9aWYoInJzYSIhPT1wJiYiZWNkc2EvcnNhIiE9PXApdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlIik7ZT10LmNvbmNhdChbZCxlXSk7Zm9yKHZhciBnPXkubW9kdWx1cy5ieXRlTGVuZ3RoKCksdj1bMCwxXTtlLmxlbmd0aCt2Lmxlbmd0aCsxPGc7KXYucHVzaCgyNTUpO3YucHVzaCgwKTtmb3IodmFyIG09LTE7KyttPGUubGVuZ3RoOyl2LnB1c2goZVttXSk7cmV0dXJuIGkodix5KX0sZS5leHBvcnRzLmdldEtleT1jLGUuZXhwb3J0cy5tYWtlS2V5PWx9KS5jYWxsKHRoaXMscigxOCkuQnVmZmVyKX0sZnVuY3Rpb24oZSl7ZS5leHBvcnRzPXtfYXJnczpbWyJlbGxpcHRpY0A2LjUuMCIsIkQ6XFxEb3dubG9hZHNcXFJpZGVSaXNrXFxSaWRlUmlzayJdXSxfZnJvbToiZWxsaXB0aWNANi41LjAiLF9pZDoiZWxsaXB0aWNANi41LjAiLF9pbkJ1bmRsZTohMSxfaW50ZWdyaXR5OiJzaGE1MTItZUZPSlRNeUNZYjd4dEUvY2FKNkpKdStiaGk2N1dDWU5ia0dTa251MjBwbU04S2UvYnFPZmRuWld4eW9HTjI2SmdmeFRiWHJzQ2tFdzRLaGVDVC9LR2c9PSIsX2xvY2F0aW9uOiIvZWxsaXB0aWMiLF9waGFudG9tQ2hpbGRyZW46e30sX3JlcXVlc3RlZDp7dHlwZToidmVyc2lvbiIscmVnaXN0cnk6ITAscmF3OiJlbGxpcHRpY0A2LjUuMCIsbmFtZToiZWxsaXB0aWMiLGVzY2FwZWROYW1lOiJlbGxpcHRpYyIscmF3U3BlYzoiNi41LjAiLHNhdmVTcGVjOm51bGwsZmV0Y2hTcGVjOiI2LjUuMCJ9LF9yZXF1aXJlZEJ5OlsiL2Jyb3dzZXJpZnktc2lnbiIsIi9jcmVhdGUtZWNkaCJdLF9yZXNvbHZlZDoiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZWxsaXB0aWMvLS9lbGxpcHRpYy02LjUuMC50Z3oiLF9zcGVjOiI2LjUuMCIsX3doZXJlOiJEOlxcRG93bmxvYWRzXFxSaWRlUmlza1xcUmlkZVJpc2siLGF1dGhvcjp7bmFtZToiRmVkb3IgSW5kdXRueSIsZW1haWw6ImZlZG9yQGluZHV0bnkuY29tIn0sYnVnczp7dXJsOiJodHRwczovL2dpdGh1Yi5jb20vaW5kdXRueS9lbGxpcHRpYy9pc3N1ZXMifSxkZXBlbmRlbmNpZXM6eyJibi5qcyI6Il40LjQuMCIsYnJvcmFuZDoiXjEuMC4xIiwiaGFzaC5qcyI6Il4xLjAuMCIsImhtYWMtZHJiZyI6Il4xLjAuMCIsaW5oZXJpdHM6Il4yLjAuMSIsIm1pbmltYWxpc3RpYy1hc3NlcnQiOiJeMS4wLjAiLCJtaW5pbWFsaXN0aWMtY3J5cHRvLXV0aWxzIjoiXjEuMC4wIn0sZGVzY3JpcHRpb246IkVDIGNyeXB0b2dyYXBoeSIsZGV2RGVwZW5kZW5jaWVzOnticmZzOiJeMS40LjMiLGNvdmVyYWxsczoiXjIuMTEuMyIsZ3J1bnQ6Il4wLjQuNSIsImdydW50LWJyb3dzZXJpZnkiOiJeNS4wLjAiLCJncnVudC1jbGkiOiJeMS4yLjAiLCJncnVudC1jb250cmliLWNvbm5lY3QiOiJeMS4wLjAiLCJncnVudC1jb250cmliLWNvcHkiOiJeMS4wLjAiLCJncnVudC1jb250cmliLXVnbGlmeSI6Il4xLjAuMSIsImdydW50LW1vY2hhLWlzdGFuYnVsIjoiXjMuMC4xIiwiZ3J1bnQtc2F1Y2VsYWJzIjoiXjguNi4yIixpc3RhbmJ1bDoiXjAuNC4yIixqc2NzOiJeMi45LjAiLGpzaGludDoiXjIuNi4wIixtb2NoYToiXjIuMS4wIn0sZmlsZXM6WyJsaWIiXSxob21lcGFnZToiaHR0cHM6Ly9naXRodWIuY29tL2luZHV0bnkvZWxsaXB0aWMiLGtleXdvcmRzOlsiRUMiLCJFbGxpcHRpYyIsImN1cnZlIiwiQ3J5cHRvZ3JhcGh5Il0sbGljZW5zZToiTUlUIixtYWluOiJsaWIvZWxsaXB0aWMuanMiLG5hbWU6ImVsbGlwdGljIixyZXBvc2l0b3J5Ont0eXBlOiJnaXQiLHVybDoiZ2l0K3NzaDovL2dpdEBnaXRodWIuY29tL2luZHV0bnkvZWxsaXB0aWMuZ2l0In0sc2NyaXB0czp7anNjczoianNjcyBiZW5jaG1hcmtzLyouanMgbGliLyouanMgbGliLyoqLyouanMgbGliLyoqLyoqLyouanMgdGVzdC9pbmRleC5qcyIsanNoaW50OiJqc2NzIGJlbmNobWFya3MvKi5qcyBsaWIvKi5qcyBsaWIvKiovKi5qcyBsaWIvKiovKiovKi5qcyB0ZXN0L2luZGV4LmpzIixsaW50OiJucG0gcnVuIGpzY3MgJiYgbnBtIHJ1biBqc2hpbnQiLHRlc3Q6Im5wbSBydW4gbGludCAmJiBucG0gcnVuIHVuaXQiLHVuaXQ6ImlzdGFuYnVsIHRlc3QgX21vY2hhIC0tcmVwb3J0ZXI9c3BlYyB0ZXN0L2luZGV4LmpzIix2ZXJzaW9uOiJncnVudCBkaXN0ICYmIGdpdCBhZGQgZGlzdC8ifSx2ZXJzaW9uOiI2LjUuMCJ9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNDgpLGk9cigyNCksbz1yKDcpLGE9cigxNjApLHM9bi5hc3NlcnQ7ZnVuY3Rpb24gdShlKXthLmNhbGwodGhpcywic2hvcnQiLGUpLHRoaXMuYT1uZXcgaShlLmEsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmI9bmV3IGkoZS5iLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy50aW52PXRoaXMudHdvLnJlZEludm0oKSx0aGlzLnplcm9BPTA9PT10aGlzLmEuZnJvbVJlZCgpLmNtcG4oMCksdGhpcy50aHJlZUE9MD09PXRoaXMuYS5mcm9tUmVkKCkuc3ViKHRoaXMucCkuY21wbigtMyksdGhpcy5lbmRvPXRoaXMuX2dldEVuZG9tb3JwaGlzbShlKSx0aGlzLl9lbmRvV25hZlQxPW5ldyBBcnJheSg0KSx0aGlzLl9lbmRvV25hZlQyPW5ldyBBcnJheSg0KX1mdW5jdGlvbiBjKGUsdCxyLG4pe2EuQmFzZVBvaW50LmNhbGwodGhpcyxlLCJhZmZpbmUiKSxudWxsPT09dCYmbnVsbD09PXI/KHRoaXMueD1udWxsLHRoaXMueT1udWxsLHRoaXMuaW5mPSEwKToodGhpcy54PW5ldyBpKHQsMTYpLHRoaXMueT1uZXcgaShyLDE2KSxuJiYodGhpcy54LmZvcmNlUmVkKHRoaXMuY3VydmUucmVkKSx0aGlzLnkuZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy5pbmY9ITEpfWZ1bmN0aW9uIGYoZSx0LHIsbil7YS5CYXNlUG9pbnQuY2FsbCh0aGlzLGUsImphY29iaWFuIiksbnVsbD09PXQmJm51bGw9PT1yJiZudWxsPT09bj8odGhpcy54PXRoaXMuY3VydmUub25lLHRoaXMueT10aGlzLmN1cnZlLm9uZSx0aGlzLno9bmV3IGkoMCkpOih0aGlzLng9bmV3IGkodCwxNiksdGhpcy55PW5ldyBpKHIsMTYpLHRoaXMuej1uZXcgaShuLDE2KSksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56T25lPXRoaXMuej09PXRoaXMuY3VydmUub25lfW8odSxhKSxlLmV4cG9ydHM9dSx1LnByb3RvdHlwZS5fZ2V0RW5kb21vcnBoaXNtPWZ1bmN0aW9uKGUpe2lmKHRoaXMuemVyb0EmJnRoaXMuZyYmdGhpcy5uJiYxPT09dGhpcy5wLm1vZG4oMykpe3ZhciB0LHI7aWYoZS5iZXRhKXQ9bmV3IGkoZS5iZXRhLDE2KS50b1JlZCh0aGlzLnJlZCk7ZWxzZXt2YXIgbj10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5wKTt0PSh0PW5bMF0uY21wKG5bMV0pPDA/blswXTpuWzFdKS50b1JlZCh0aGlzLnJlZCl9aWYoZS5sYW1iZGEpcj1uZXcgaShlLmxhbWJkYSwxNik7ZWxzZXt2YXIgbz10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5uKTswPT09dGhpcy5nLm11bChvWzBdKS54LmNtcCh0aGlzLmcueC5yZWRNdWwodCkpP3I9b1swXToocj1vWzFdLHMoMD09PXRoaXMuZy5tdWwocikueC5jbXAodGhpcy5nLngucmVkTXVsKHQpKSkpfXJldHVybntiZXRhOnQsbGFtYmRhOnIsYmFzaXM6ZS5iYXNpcz9lLmJhc2lzLm1hcChmdW5jdGlvbihlKXtyZXR1cm57YTpuZXcgaShlLmEsMTYpLGI6bmV3IGkoZS5iLDE2KX19KTp0aGlzLl9nZXRFbmRvQmFzaXMocil9fX0sdS5wcm90b3R5cGUuX2dldEVuZG9Sb290cz1mdW5jdGlvbihlKXt2YXIgdD1lPT09dGhpcy5wP3RoaXMucmVkOmkubW9udChlKSxyPW5ldyBpKDIpLnRvUmVkKHQpLnJlZEludm0oKSxuPXIucmVkTmVnKCksbz1uZXcgaSgzKS50b1JlZCh0KS5yZWROZWcoKS5yZWRTcXJ0KCkucmVkTXVsKHIpO3JldHVybltuLnJlZEFkZChvKS5mcm9tUmVkKCksbi5yZWRTdWIobykuZnJvbVJlZCgpXX0sdS5wcm90b3R5cGUuX2dldEVuZG9CYXNpcz1mdW5jdGlvbihlKXtmb3IodmFyIHQscixuLG8sYSxzLHUsYyxmLGw9dGhpcy5uLnVzaHJuKE1hdGguZmxvb3IodGhpcy5uLmJpdExlbmd0aCgpLzIpKSxoPWUscD10aGlzLm4uY2xvbmUoKSxkPW5ldyBpKDEpLHk9bmV3IGkoMCksZz1uZXcgaSgwKSx2PW5ldyBpKDEpLG09MDswIT09aC5jbXBuKDApOyl7dmFyIGI9cC5kaXYoaCk7Yz1wLnN1YihiLm11bChoKSksZj1nLnN1YihiLm11bChkKSk7dmFyIF89di5zdWIoYi5tdWwoeSkpO2lmKCFuJiZjLmNtcChsKTwwKXQ9dS5uZWcoKSxyPWQsbj1jLm5lZygpLG89ZjtlbHNlIGlmKG4mJjI9PT0rK20pYnJlYWs7dT1jLHA9aCxoPWMsZz1kLGQ9Zix2PXkseT1ffWE9Yy5uZWcoKSxzPWY7dmFyIFM9bi5zcXIoKS5hZGQoby5zcXIoKSk7cmV0dXJuIGEuc3FyKCkuYWRkKHMuc3FyKCkpLmNtcChTKT49MCYmKGE9dCxzPXIpLG4ubmVnYXRpdmUmJihuPW4ubmVnKCksbz1vLm5lZygpKSxhLm5lZ2F0aXZlJiYoYT1hLm5lZygpLHM9cy5uZWcoKSksW3thOm4sYjpvfSx7YTphLGI6c31dfSx1LnByb3RvdHlwZS5fZW5kb1NwbGl0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZW5kby5iYXNpcyxyPXRbMF0sbj10WzFdLGk9bi5iLm11bChlKS5kaXZSb3VuZCh0aGlzLm4pLG89ci5iLm5lZygpLm11bChlKS5kaXZSb3VuZCh0aGlzLm4pLGE9aS5tdWwoci5hKSxzPW8ubXVsKG4uYSksdT1pLm11bChyLmIpLGM9by5tdWwobi5iKTtyZXR1cm57azE6ZS5zdWIoYSkuc3ViKHMpLGsyOnUuYWRkKGMpLm5lZygpfX0sdS5wcm90b3R5cGUucG9pbnRGcm9tWD1mdW5jdGlvbihlLHQpeyhlPW5ldyBpKGUsMTYpKS5yZWR8fChlPWUudG9SZWQodGhpcy5yZWQpKTt2YXIgcj1lLnJlZFNxcigpLnJlZE11bChlKS5yZWRJQWRkKGUucmVkTXVsKHRoaXMuYSkpLnJlZElBZGQodGhpcy5iKSxuPXIucmVkU3FydCgpO2lmKDAhPT1uLnJlZFNxcigpLnJlZFN1YihyKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTt2YXIgbz1uLmZyb21SZWQoKS5pc09kZCgpO3JldHVybih0JiYhb3x8IXQmJm8pJiYobj1uLnJlZE5lZygpKSx0aGlzLnBvaW50KGUsbil9LHUucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKGUpe2lmKGUuaW5mKXJldHVybiEwO3ZhciB0PWUueCxyPWUueSxuPXRoaXMuYS5yZWRNdWwodCksaT10LnJlZFNxcigpLnJlZE11bCh0KS5yZWRJQWRkKG4pLnJlZElBZGQodGhpcy5iKTtyZXR1cm4gMD09PXIucmVkU3FyKCkucmVkSVN1YihpKS5jbXBuKDApfSx1LnByb3RvdHlwZS5fZW5kb1duYWZNdWxBZGQ9ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgbj10aGlzLl9lbmRvV25hZlQxLGk9dGhpcy5fZW5kb1duYWZUMixvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBhPXRoaXMuX2VuZG9TcGxpdCh0W29dKSxzPWVbb10sdT1zLl9nZXRCZXRhKCk7YS5rMS5uZWdhdGl2ZSYmKGEuazEuaW5lZygpLHM9cy5uZWcoITApKSxhLmsyLm5lZ2F0aXZlJiYoYS5rMi5pbmVnKCksdT11Lm5lZyghMCkpLG5bMipvXT1zLG5bMipvKzFdPXUsaVsyKm9dPWEuazEsaVsyKm8rMV09YS5rMn1mb3IodmFyIGM9dGhpcy5fd25hZk11bEFkZCgxLG4saSwyKm8sciksZj0wO2Y8MipvO2YrKyluW2ZdPW51bGwsaVtmXT1udWxsO3JldHVybiBjfSxvKGMsYS5CYXNlUG9pbnQpLHUucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gbmV3IGModGhpcyxlLHQscil9LHUucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYy5mcm9tSlNPTih0aGlzLGUsdCl9LGMucHJvdG90eXBlLl9nZXRCZXRhPWZ1bmN0aW9uKCl7aWYodGhpcy5jdXJ2ZS5lbmRvKXt2YXIgZT10aGlzLnByZWNvbXB1dGVkO2lmKGUmJmUuYmV0YSlyZXR1cm4gZS5iZXRhO3ZhciB0PXRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE11bCh0aGlzLmN1cnZlLmVuZG8uYmV0YSksdGhpcy55KTtpZihlKXt2YXIgcj10aGlzLmN1cnZlLG49ZnVuY3Rpb24oZSl7cmV0dXJuIHIucG9pbnQoZS54LnJlZE11bChyLmVuZG8uYmV0YSksZS55KX07ZS5iZXRhPXQsdC5wcmVjb21wdXRlZD17YmV0YTpudWxsLG5hZjplLm5hZiYme3duZDplLm5hZi53bmQscG9pbnRzOmUubmFmLnBvaW50cy5tYXAobil9LGRvdWJsZXM6ZS5kb3VibGVzJiZ7c3RlcDplLmRvdWJsZXMuc3RlcCxwb2ludHM6ZS5kb3VibGVzLnBvaW50cy5tYXAobil9fX1yZXR1cm4gdH19LGMucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByZWNvbXB1dGVkP1t0aGlzLngsdGhpcy55LHRoaXMucHJlY29tcHV0ZWQmJntkb3VibGVzOnRoaXMucHJlY29tcHV0ZWQuZG91YmxlcyYme3N0ZXA6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnN0ZXAscG9pbnRzOnRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcy5wb2ludHMuc2xpY2UoMSl9LG5hZjp0aGlzLnByZWNvbXB1dGVkLm5hZiYme3duZDp0aGlzLnByZWNvbXB1dGVkLm5hZi53bmQscG9pbnRzOnRoaXMucHJlY29tcHV0ZWQubmFmLnBvaW50cy5zbGljZSgxKX19XTpbdGhpcy54LHRoaXMueV19LGMuZnJvbUpTT049ZnVuY3Rpb24oZSx0LHIpeyJzdHJpbmciPT09dHlwZW9mIHQmJih0PUpTT04ucGFyc2UodCkpO3ZhciBuPWUucG9pbnQodFswXSx0WzFdLHIpO2lmKCF0WzJdKXJldHVybiBuO2Z1bmN0aW9uIGkodCl7cmV0dXJuIGUucG9pbnQodFswXSx0WzFdLHIpfXZhciBvPXRbMl07cmV0dXJuIG4ucHJlY29tcHV0ZWQ9e2JldGE6bnVsbCxkb3VibGVzOm8uZG91YmxlcyYme3N0ZXA6by5kb3VibGVzLnN0ZXAscG9pbnRzOltuXS5jb25jYXQoby5kb3VibGVzLnBvaW50cy5tYXAoaSkpfSxuYWY6by5uYWYmJnt3bmQ6by5uYWYud25kLHBvaW50czpbbl0uY29uY2F0KG8ubmFmLnBvaW50cy5tYXAoaSkpfX0sbn0sYy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxjLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5mfSxjLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7aWYodGhpcy5pbmYpcmV0dXJuIGU7aWYoZS5pbmYpcmV0dXJuIHRoaXM7aWYodGhpcy5lcShlKSlyZXR1cm4gdGhpcy5kYmwoKTtpZih0aGlzLm5lZygpLmVxKGUpKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7aWYoMD09PXRoaXMueC5jbXAoZS54KSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciB0PXRoaXMueS5yZWRTdWIoZS55KTswIT09dC5jbXBuKDApJiYodD10LnJlZE11bCh0aGlzLngucmVkU3ViKGUueCkucmVkSW52bSgpKSk7dmFyIHI9dC5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueCkucmVkSVN1YihlLngpLG49dC5yZWRNdWwodGhpcy54LnJlZFN1YihyKSkucmVkSVN1Yih0aGlzLnkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHIsbil9LGMucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe2lmKHRoaXMuaW5mKXJldHVybiB0aGlzO3ZhciBlPXRoaXMueS5yZWRBZGQodGhpcy55KTtpZigwPT09ZS5jbXBuKDApKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIHQ9dGhpcy5jdXJ2ZS5hLHI9dGhpcy54LnJlZFNxcigpLG49ZS5yZWRJbnZtKCksaT1yLnJlZEFkZChyKS5yZWRJQWRkKHIpLnJlZElBZGQodCkucmVkTXVsKG4pLG89aS5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueC5yZWRBZGQodGhpcy54KSksYT1pLnJlZE11bCh0aGlzLngucmVkU3ViKG8pKS5yZWRJU3ViKHRoaXMueSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQobyxhKX0sYy5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnguZnJvbVJlZCgpfSxjLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueS5mcm9tUmVkKCl9LGMucHJvdG90eXBlLm11bD1mdW5jdGlvbihlKXtyZXR1cm4gZT1uZXcgaShlLDE2KSx0aGlzLl9oYXNEb3VibGVzKGUpP3RoaXMuY3VydmUuX2ZpeGVkTmFmTXVsKHRoaXMsZSk6dGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKFt0aGlzXSxbZV0pOnRoaXMuY3VydmUuX3duYWZNdWwodGhpcyxlKX0sYy5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1bdGhpcyx0XSxpPVtlLHJdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQobixpKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsbixpLDIpfSxjLnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1bdGhpcyx0XSxpPVtlLHJdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQobixpLCEwKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsbixpLDIsITApfSxjLnByb3RvdHlwZS5lcT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV8fHRoaXMuaW5mPT09ZS5pbmYmJih0aGlzLmluZnx8MD09PXRoaXMueC5jbXAoZS54KSYmMD09PXRoaXMueS5jbXAoZS55KSl9LGMucHJvdG90eXBlLm5lZz1mdW5jdGlvbihlKXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgdD10aGlzLmN1cnZlLnBvaW50KHRoaXMueCx0aGlzLnkucmVkTmVnKCkpO2lmKGUmJnRoaXMucHJlY29tcHV0ZWQpe3ZhciByPXRoaXMucHJlY29tcHV0ZWQsbj1mdW5jdGlvbihlKXtyZXR1cm4gZS5uZWcoKX07dC5wcmVjb21wdXRlZD17bmFmOnIubmFmJiZ7d25kOnIubmFmLnduZCxwb2ludHM6ci5uYWYucG9pbnRzLm1hcChuKX0sZG91YmxlczpyLmRvdWJsZXMmJntzdGVwOnIuZG91Ymxlcy5zdGVwLHBvaW50czpyLmRvdWJsZXMucG9pbnRzLm1hcChuKX19fXJldHVybiB0fSxjLnByb3RvdHlwZS50b0o9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmY/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuY3VydmUuanBvaW50KHRoaXMueCx0aGlzLnksdGhpcy5jdXJ2ZS5vbmUpfSxvKGYsYS5CYXNlUG9pbnQpLHUucHJvdG90eXBlLmpwb2ludD1mdW5jdGlvbihlLHQscil7cmV0dXJuIG5ldyBmKHRoaXMsZSx0LHIpfSxmLnByb3RvdHlwZS50b1A9ZnVuY3Rpb24oKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBlPXRoaXMuei5yZWRJbnZtKCksdD1lLnJlZFNxcigpLHI9dGhpcy54LnJlZE11bCh0KSxuPXRoaXMueS5yZWRNdWwodCkucmVkTXVsKGUpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHIsbil9LGYucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsdGhpcy55LnJlZE5lZygpLHRoaXMueil9LGYucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gZTtpZihlLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpczt2YXIgdD1lLnoucmVkU3FyKCkscj10aGlzLnoucmVkU3FyKCksbj10aGlzLngucmVkTXVsKHQpLGk9ZS54LnJlZE11bChyKSxvPXRoaXMueS5yZWRNdWwodC5yZWRNdWwoZS56KSksYT1lLnkucmVkTXVsKHIucmVkTXVsKHRoaXMueikpLHM9bi5yZWRTdWIoaSksdT1vLnJlZFN1YihhKTtpZigwPT09cy5jbXBuKDApKXJldHVybiAwIT09dS5jbXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciBjPXMucmVkU3FyKCksZj1jLnJlZE11bChzKSxsPW4ucmVkTXVsKGMpLGg9dS5yZWRTcXIoKS5yZWRJQWRkKGYpLnJlZElTdWIobCkucmVkSVN1YihsKSxwPXUucmVkTXVsKGwucmVkSVN1YihoKSkucmVkSVN1YihvLnJlZE11bChmKSksZD10aGlzLnoucmVkTXVsKGUueikucmVkTXVsKHMpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChoLHAsZCl9LGYucHJvdG90eXBlLm1peGVkQWRkPWZ1bmN0aW9uKGUpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiBlLnRvSigpO2lmKGUuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO3ZhciB0PXRoaXMuei5yZWRTcXIoKSxyPXRoaXMueCxuPWUueC5yZWRNdWwodCksaT10aGlzLnksbz1lLnkucmVkTXVsKHQpLnJlZE11bCh0aGlzLnopLGE9ci5yZWRTdWIobikscz1pLnJlZFN1YihvKTtpZigwPT09YS5jbXBuKDApKXJldHVybiAwIT09cy5jbXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciB1PWEucmVkU3FyKCksYz11LnJlZE11bChhKSxmPXIucmVkTXVsKHUpLGw9cy5yZWRTcXIoKS5yZWRJQWRkKGMpLnJlZElTdWIoZikucmVkSVN1YihmKSxoPXMucmVkTXVsKGYucmVkSVN1YihsKSkucmVkSVN1YihpLnJlZE11bChjKSkscD10aGlzLnoucmVkTXVsKGEpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChsLGgscCl9LGYucHJvdG90eXBlLmRibHA9ZnVuY3Rpb24oZSl7aWYoMD09PWUpcmV0dXJuIHRoaXM7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7aWYoIWUpcmV0dXJuIHRoaXMuZGJsKCk7aWYodGhpcy5jdXJ2ZS56ZXJvQXx8dGhpcy5jdXJ2ZS50aHJlZUEpe2Zvcih2YXIgdD10aGlzLHI9MDtyPGU7cisrKXQ9dC5kYmwoKTtyZXR1cm4gdH12YXIgbj10aGlzLmN1cnZlLmEsaT10aGlzLmN1cnZlLnRpbnYsbz10aGlzLngsYT10aGlzLnkscz10aGlzLnosdT1zLnJlZFNxcigpLnJlZFNxcigpLGM9YS5yZWRBZGQoYSk7Zm9yKHI9MDtyPGU7cisrKXt2YXIgZj1vLnJlZFNxcigpLGw9Yy5yZWRTcXIoKSxoPWwucmVkU3FyKCkscD1mLnJlZEFkZChmKS5yZWRJQWRkKGYpLnJlZElBZGQobi5yZWRNdWwodSkpLGQ9by5yZWRNdWwobCkseT1wLnJlZFNxcigpLnJlZElTdWIoZC5yZWRBZGQoZCkpLGc9ZC5yZWRJU3ViKHkpLHY9cC5yZWRNdWwoZyk7dj12LnJlZElBZGQodikucmVkSVN1YihoKTt2YXIgbT1jLnJlZE11bChzKTtyKzE8ZSYmKHU9dS5yZWRNdWwoaCkpLG89eSxzPW0sYz12fXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChvLGMucmVkTXVsKGkpLHMpfSxmLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLnplcm9BP3RoaXMuX3plcm9EYmwoKTp0aGlzLmN1cnZlLnRocmVlQT90aGlzLl90aHJlZURibCgpOnRoaXMuX2RibCgpfSxmLnByb3RvdHlwZS5femVyb0RibD1mdW5jdGlvbigpe3ZhciBlLHQscjtpZih0aGlzLnpPbmUpe3ZhciBuPXRoaXMueC5yZWRTcXIoKSxpPXRoaXMueS5yZWRTcXIoKSxvPWkucmVkU3FyKCksYT10aGlzLngucmVkQWRkKGkpLnJlZFNxcigpLnJlZElTdWIobikucmVkSVN1YihvKTthPWEucmVkSUFkZChhKTt2YXIgcz1uLnJlZEFkZChuKS5yZWRJQWRkKG4pLHU9cy5yZWRTcXIoKS5yZWRJU3ViKGEpLnJlZElTdWIoYSksYz1vLnJlZElBZGQobyk7Yz0oYz1jLnJlZElBZGQoYykpLnJlZElBZGQoYyksZT11LHQ9cy5yZWRNdWwoYS5yZWRJU3ViKHUpKS5yZWRJU3ViKGMpLHI9dGhpcy55LnJlZEFkZCh0aGlzLnkpfWVsc2V7dmFyIGY9dGhpcy54LnJlZFNxcigpLGw9dGhpcy55LnJlZFNxcigpLGg9bC5yZWRTcXIoKSxwPXRoaXMueC5yZWRBZGQobCkucmVkU3FyKCkucmVkSVN1YihmKS5yZWRJU3ViKGgpO3A9cC5yZWRJQWRkKHApO3ZhciBkPWYucmVkQWRkKGYpLnJlZElBZGQoZikseT1kLnJlZFNxcigpLGc9aC5yZWRJQWRkKGgpO2c9KGc9Zy5yZWRJQWRkKGcpKS5yZWRJQWRkKGcpLGU9eS5yZWRJU3ViKHApLnJlZElTdWIocCksdD1kLnJlZE11bChwLnJlZElTdWIoZSkpLnJlZElTdWIoZykscj0ocj10aGlzLnkucmVkTXVsKHRoaXMueikpLnJlZElBZGQocil9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGUsdCxyKX0sZi5wcm90b3R5cGUuX3RocmVlRGJsPWZ1bmN0aW9uKCl7dmFyIGUsdCxyO2lmKHRoaXMuek9uZSl7dmFyIG49dGhpcy54LnJlZFNxcigpLGk9dGhpcy55LnJlZFNxcigpLG89aS5yZWRTcXIoKSxhPXRoaXMueC5yZWRBZGQoaSkucmVkU3FyKCkucmVkSVN1YihuKS5yZWRJU3ViKG8pO2E9YS5yZWRJQWRkKGEpO3ZhciBzPW4ucmVkQWRkKG4pLnJlZElBZGQobikucmVkSUFkZCh0aGlzLmN1cnZlLmEpLHU9cy5yZWRTcXIoKS5yZWRJU3ViKGEpLnJlZElTdWIoYSk7ZT11O3ZhciBjPW8ucmVkSUFkZChvKTtjPShjPWMucmVkSUFkZChjKSkucmVkSUFkZChjKSx0PXMucmVkTXVsKGEucmVkSVN1Yih1KSkucmVkSVN1YihjKSxyPXRoaXMueS5yZWRBZGQodGhpcy55KX1lbHNle3ZhciBmPXRoaXMuei5yZWRTcXIoKSxsPXRoaXMueS5yZWRTcXIoKSxoPXRoaXMueC5yZWRNdWwobCkscD10aGlzLngucmVkU3ViKGYpLnJlZE11bCh0aGlzLngucmVkQWRkKGYpKTtwPXAucmVkQWRkKHApLnJlZElBZGQocCk7dmFyIGQ9aC5yZWRJQWRkKGgpLHk9KGQ9ZC5yZWRJQWRkKGQpKS5yZWRBZGQoZCk7ZT1wLnJlZFNxcigpLnJlZElTdWIoeSkscj10aGlzLnkucmVkQWRkKHRoaXMueikucmVkU3FyKCkucmVkSVN1YihsKS5yZWRJU3ViKGYpO3ZhciBnPWwucmVkU3FyKCk7Zz0oZz0oZz1nLnJlZElBZGQoZykpLnJlZElBZGQoZykpLnJlZElBZGQoZyksdD1wLnJlZE11bChkLnJlZElTdWIoZSkpLnJlZElTdWIoZyl9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGUsdCxyKX0sZi5wcm90b3R5cGUuX2RibD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3VydmUuYSx0PXRoaXMueCxyPXRoaXMueSxuPXRoaXMueixpPW4ucmVkU3FyKCkucmVkU3FyKCksbz10LnJlZFNxcigpLGE9ci5yZWRTcXIoKSxzPW8ucmVkQWRkKG8pLnJlZElBZGQobykucmVkSUFkZChlLnJlZE11bChpKSksdT10LnJlZEFkZCh0KSxjPSh1PXUucmVkSUFkZCh1KSkucmVkTXVsKGEpLGY9cy5yZWRTcXIoKS5yZWRJU3ViKGMucmVkQWRkKGMpKSxsPWMucmVkSVN1YihmKSxoPWEucmVkU3FyKCk7aD0oaD0oaD1oLnJlZElBZGQoaCkpLnJlZElBZGQoaCkpLnJlZElBZGQoaCk7dmFyIHA9cy5yZWRNdWwobCkucmVkSVN1YihoKSxkPXIucmVkQWRkKHIpLnJlZE11bChuKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoZixwLGQpfSxmLnByb3RvdHlwZS50cnBsPWZ1bmN0aW9uKCl7aWYoIXRoaXMuY3VydmUuemVyb0EpcmV0dXJuIHRoaXMuZGJsKCkuYWRkKHRoaXMpO3ZhciBlPXRoaXMueC5yZWRTcXIoKSx0PXRoaXMueS5yZWRTcXIoKSxyPXRoaXMuei5yZWRTcXIoKSxuPXQucmVkU3FyKCksaT1lLnJlZEFkZChlKS5yZWRJQWRkKGUpLG89aS5yZWRTcXIoKSxhPXRoaXMueC5yZWRBZGQodCkucmVkU3FyKCkucmVkSVN1YihlKS5yZWRJU3ViKG4pLHM9KGE9KGE9KGE9YS5yZWRJQWRkKGEpKS5yZWRBZGQoYSkucmVkSUFkZChhKSkucmVkSVN1YihvKSkucmVkU3FyKCksdT1uLnJlZElBZGQobik7dT0odT0odT11LnJlZElBZGQodSkpLnJlZElBZGQodSkpLnJlZElBZGQodSk7dmFyIGM9aS5yZWRJQWRkKGEpLnJlZFNxcigpLnJlZElTdWIobykucmVkSVN1YihzKS5yZWRJU3ViKHUpLGY9dC5yZWRNdWwoYyk7Zj0oZj1mLnJlZElBZGQoZikpLnJlZElBZGQoZik7dmFyIGw9dGhpcy54LnJlZE11bChzKS5yZWRJU3ViKGYpO2w9KGw9bC5yZWRJQWRkKGwpKS5yZWRJQWRkKGwpO3ZhciBoPXRoaXMueS5yZWRNdWwoYy5yZWRNdWwodS5yZWRJU3ViKGMpKS5yZWRJU3ViKGEucmVkTXVsKHMpKSk7aD0oaD0oaD1oLnJlZElBZGQoaCkpLnJlZElBZGQoaCkpLnJlZElBZGQoaCk7dmFyIHA9dGhpcy56LnJlZEFkZChhKS5yZWRTcXIoKS5yZWRJU3ViKHIpLnJlZElTdWIocyk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGwsaCxwKX0sZi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9bmV3IGkoZSx0KSx0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsZSl9LGYucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGUpe2lmKCJhZmZpbmUiPT09ZS50eXBlKXJldHVybiB0aGlzLmVxKGUudG9KKCkpO2lmKHRoaXM9PT1lKXJldHVybiEwO3ZhciB0PXRoaXMuei5yZWRTcXIoKSxyPWUuei5yZWRTcXIoKTtpZigwIT09dGhpcy54LnJlZE11bChyKS5yZWRJU3ViKGUueC5yZWRNdWwodCkpLmNtcG4oMCkpcmV0dXJuITE7dmFyIG49dC5yZWRNdWwodGhpcy56KSxpPXIucmVkTXVsKGUueik7cmV0dXJuIDA9PT10aGlzLnkucmVkTXVsKGkpLnJlZElTdWIoZS55LnJlZE11bChuKSkuY21wbigwKX0sZi5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuei5yZWRTcXIoKSxyPWUudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bCh0KTtpZigwPT09dGhpcy54LmNtcChyKSlyZXR1cm4hMDtmb3IodmFyIG49ZS5jbG9uZSgpLGk9dGhpcy5jdXJ2ZS5yZWROLnJlZE11bCh0KTs7KXtpZihuLmlhZGQodGhpcy5jdXJ2ZS5uKSxuLmNtcCh0aGlzLmN1cnZlLnApPj0wKXJldHVybiExO2lmKHIucmVkSUFkZChpKSwwPT09dGhpcy54LmNtcChyKSlyZXR1cm4hMH19LGYucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBKUG9pbnQgSW5maW5pdHk+IjoiPEVDIEpQb2ludCB4OiAiK3RoaXMueC50b1N0cmluZygxNiwyKSsiIHk6ICIrdGhpcy55LnRvU3RyaW5nKDE2LDIpKyIgejogIit0aGlzLnoudG9TdHJpbmcoMTYsMikrIj4ifSxmLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnouY21wbigwKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigyNCksaT1yKDcpLG89cigxNjApLGE9cig0OCk7ZnVuY3Rpb24gcyhlKXtvLmNhbGwodGhpcywibW9udCIsZSksdGhpcy5hPW5ldyBuKGUuYSwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgbihlLmIsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmk0PW5ldyBuKDQpLnRvUmVkKHRoaXMucmVkKS5yZWRJbnZtKCksdGhpcy50d289bmV3IG4oMikudG9SZWQodGhpcy5yZWQpLHRoaXMuYTI0PXRoaXMuaTQucmVkTXVsKHRoaXMuYS5yZWRBZGQodGhpcy50d28pKX1mdW5jdGlvbiB1KGUsdCxyKXtvLkJhc2VQb2ludC5jYWxsKHRoaXMsZSwicHJvamVjdGl2ZSIpLG51bGw9PT10JiZudWxsPT09cj8odGhpcy54PXRoaXMuY3VydmUub25lLHRoaXMuej10aGlzLmN1cnZlLnplcm8pOih0aGlzLng9bmV3IG4odCwxNiksdGhpcy56PW5ldyBuKHIsMTYpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSl9aShzLG8pLGUuZXhwb3J0cz1zLHMucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKGUpe3ZhciB0PWUubm9ybWFsaXplKCkueCxyPXQucmVkU3FyKCksbj1yLnJlZE11bCh0KS5yZWRBZGQoci5yZWRNdWwodGhpcy5hKSkucmVkQWRkKHQpO3JldHVybiAwPT09bi5yZWRTcXJ0KCkucmVkU3FyKCkuY21wKG4pfSxpKHUsby5CYXNlUG9pbnQpLHMucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMucG9pbnQoYS50b0FycmF5KGUsdCksMSl9LHMucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyB1KHRoaXMsZSx0KX0scy5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbihlKXtyZXR1cm4gdS5mcm9tSlNPTih0aGlzLGUpfSx1LnByb3RvdHlwZS5wcmVjb21wdXRlPWZ1bmN0aW9uKCl7fSx1LnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WCgpLnRvQXJyYXkoImJlIix0aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpKX0sdS5mcm9tSlNPTj1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgdShlLHRbMF0sdFsxXXx8ZS5vbmUpfSx1LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgUG9pbnQgSW5maW5pdHk+IjoiPEVDIFBvaW50IHg6ICIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhpcy56LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiPiJ9LHUucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuei5jbXBuKDApfSx1LnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLngucmVkQWRkKHRoaXMueikucmVkU3FyKCksdD10aGlzLngucmVkU3ViKHRoaXMueikucmVkU3FyKCkscj1lLnJlZFN1Yih0KSxuPWUucmVkTXVsKHQpLGk9ci5yZWRNdWwodC5yZWRBZGQodGhpcy5jdXJ2ZS5hMjQucmVkTXVsKHIpKSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQobixpKX0sdS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sdS5wcm90b3R5cGUuZGlmZkFkZD1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMueC5yZWRBZGQodGhpcy56KSxuPXRoaXMueC5yZWRTdWIodGhpcy56KSxpPWUueC5yZWRBZGQoZS56KSxvPWUueC5yZWRTdWIoZS56KS5yZWRNdWwociksYT1pLnJlZE11bChuKSxzPXQuei5yZWRNdWwoby5yZWRBZGQoYSkucmVkU3FyKCkpLHU9dC54LnJlZE11bChvLnJlZElTdWIoYSkucmVkU3FyKCkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHMsdSl9LHUucHJvdG90eXBlLm11bD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5jbG9uZSgpLHI9dGhpcyxuPXRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKSxpPVtdOzAhPT10LmNtcG4oMCk7dC5pdXNocm4oMSkpaS5wdXNoKHQuYW5kbG4oMSkpO2Zvcih2YXIgbz1pLmxlbmd0aC0xO28+PTA7by0tKTA9PT1pW29dPyhyPXIuZGlmZkFkZChuLHRoaXMpLG49bi5kYmwoKSk6KG49ci5kaWZmQWRkKG4sdGhpcykscj1yLmRibCgpKTtyZXR1cm4gbn0sdS5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sdS5wcm90b3R5cGUuanVtbEFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LHUucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGUpe3JldHVybiAwPT09dGhpcy5nZXRYKCkuY21wKGUuZ2V0WCgpKX0sdS5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueD10aGlzLngucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzfSx1LnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy54LmZyb21SZWQoKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig0OCksaT1yKDI0KSxvPXIoNyksYT1yKDE2MCkscz1uLmFzc2VydDtmdW5jdGlvbiB1KGUpe3RoaXMudHdpc3RlZD0xIT09KDB8ZS5hKSx0aGlzLm1PbmVBPXRoaXMudHdpc3RlZCYmLTE9PT0oMHxlLmEpLHRoaXMuZXh0ZW5kZWQ9dGhpcy5tT25lQSxhLmNhbGwodGhpcywiZWR3YXJkcyIsZSksdGhpcy5hPW5ldyBpKGUuYSwxNikudW1vZCh0aGlzLnJlZC5tKSx0aGlzLmE9dGhpcy5hLnRvUmVkKHRoaXMucmVkKSx0aGlzLmM9bmV3IGkoZS5jLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5jMj10aGlzLmMucmVkU3FyKCksdGhpcy5kPW5ldyBpKGUuZCwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuZGQ9dGhpcy5kLnJlZEFkZCh0aGlzLmQpLHMoIXRoaXMudHdpc3RlZHx8MD09PXRoaXMuYy5mcm9tUmVkKCkuY21wbigxKSksdGhpcy5vbmVDPTE9PT0oMHxlLmMpfWZ1bmN0aW9uIGMoZSx0LHIsbixvKXthLkJhc2VQb2ludC5jYWxsKHRoaXMsZSwicHJvamVjdGl2ZSIpLG51bGw9PT10JiZudWxsPT09ciYmbnVsbD09PW4/KHRoaXMueD10aGlzLmN1cnZlLnplcm8sdGhpcy55PXRoaXMuY3VydmUub25lLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzLnQ9dGhpcy5jdXJ2ZS56ZXJvLHRoaXMuek9uZT0hMCk6KHRoaXMueD1uZXcgaSh0LDE2KSx0aGlzLnk9bmV3IGkociwxNiksdGhpcy56PW4/bmV3IGkobiwxNik6dGhpcy5jdXJ2ZS5vbmUsdGhpcy50PW8mJm5ldyBpKG8sMTYpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMudCYmIXRoaXMudC5yZWQmJih0aGlzLnQ9dGhpcy50LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56T25lPXRoaXMuej09PXRoaXMuY3VydmUub25lLHRoaXMuY3VydmUuZXh0ZW5kZWQmJiF0aGlzLnQmJih0aGlzLnQ9dGhpcy54LnJlZE11bCh0aGlzLnkpLHRoaXMuek9uZXx8KHRoaXMudD10aGlzLnQucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpKSkpfW8odSxhKSxlLmV4cG9ydHM9dSx1LnByb3RvdHlwZS5fbXVsQT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5tT25lQT9lLnJlZE5lZygpOnRoaXMuYS5yZWRNdWwoZSl9LHUucHJvdG90eXBlLl9tdWxDPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9uZUM/ZTp0aGlzLmMucmVkTXVsKGUpfSx1LnByb3RvdHlwZS5qcG9pbnQ9ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIHRoaXMucG9pbnQoZSx0LHIsbil9LHUucHJvdG90eXBlLnBvaW50RnJvbVg9ZnVuY3Rpb24oZSx0KXsoZT1uZXcgaShlLDE2KSkucmVkfHwoZT1lLnRvUmVkKHRoaXMucmVkKSk7dmFyIHI9ZS5yZWRTcXIoKSxuPXRoaXMuYzIucmVkU3ViKHRoaXMuYS5yZWRNdWwocikpLG89dGhpcy5vbmUucmVkU3ViKHRoaXMuYzIucmVkTXVsKHRoaXMuZCkucmVkTXVsKHIpKSxhPW4ucmVkTXVsKG8ucmVkSW52bSgpKSxzPWEucmVkU3FydCgpO2lmKDAhPT1zLnJlZFNxcigpLnJlZFN1YihhKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTt2YXIgdT1zLmZyb21SZWQoKS5pc09kZCgpO3JldHVybih0JiYhdXx8IXQmJnUpJiYocz1zLnJlZE5lZygpKSx0aGlzLnBvaW50KGUscyl9LHUucHJvdG90eXBlLnBvaW50RnJvbVk9ZnVuY3Rpb24oZSx0KXsoZT1uZXcgaShlLDE2KSkucmVkfHwoZT1lLnRvUmVkKHRoaXMucmVkKSk7dmFyIHI9ZS5yZWRTcXIoKSxuPXIucmVkU3ViKHRoaXMuYzIpLG89ci5yZWRNdWwodGhpcy5kKS5yZWRNdWwodGhpcy5jMikucmVkU3ViKHRoaXMuYSksYT1uLnJlZE11bChvLnJlZEludm0oKSk7aWYoMD09PWEuY21wKHRoaXMuemVybykpe2lmKHQpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7cmV0dXJuIHRoaXMucG9pbnQodGhpcy56ZXJvLGUpfXZhciBzPWEucmVkU3FydCgpO2lmKDAhPT1zLnJlZFNxcigpLnJlZFN1YihhKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTtyZXR1cm4gcy5mcm9tUmVkKCkuaXNPZGQoKSE9PXQmJihzPXMucmVkTmVnKCkpLHRoaXMucG9pbnQocyxlKX0sdS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oZSl7aWYoZS5pc0luZmluaXR5KCkpcmV0dXJuITA7ZS5ub3JtYWxpemUoKTt2YXIgdD1lLngucmVkU3FyKCkscj1lLnkucmVkU3FyKCksbj10LnJlZE11bCh0aGlzLmEpLnJlZEFkZChyKSxpPXRoaXMuYzIucmVkTXVsKHRoaXMub25lLnJlZEFkZCh0aGlzLmQucmVkTXVsKHQpLnJlZE11bChyKSkpO3JldHVybiAwPT09bi5jbXAoaSl9LG8oYyxhLkJhc2VQb2ludCksdS5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbihlKXtyZXR1cm4gYy5mcm9tSlNPTih0aGlzLGUpfSx1LnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihlLHQscixuKXtyZXR1cm4gbmV3IGModGhpcyxlLHQscixuKX0sYy5mcm9tSlNPTj1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgYyhlLHRbMF0sdFsxXSx0WzJdKX0sYy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiA="
}
Changelog:
{
"2020.03.29 15:15": "base64:cGUudXBkYXRlPWZ1bmN0aW9uKGUscil7cmV0dXJuInN0cmluZyI9PT10eXBlb2YgZSYmKGU9bmV3IHQoZSxyKSksdGhpcy5faGFzaC51cGRhdGUoZSksdGhpc30sZi5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKGUscixuKXsic3RyaW5nIj09PXR5cGVvZiByJiYocj1uZXcgdChyLG4pKSx0aGlzLmVuZCgpO3ZhciBpPXRoaXMuX2hhc2guZGlnZXN0KCk7cmV0dXJuIHMocixpLGUsdGhpcy5fc2lnblR5cGUsdGhpcy5fdGFnKX0sZS5leHBvcnRzPXtTaWduOmwsVmVyaWZ5OmgsY3JlYXRlU2lnbjpsLGNyZWF0ZVZlcmlmeTpofX0pLmNhbGwodGhpcyxyKDE4KS5CdWZmZXIpfSxmdW5jdGlvbihlLHQscil7KGZ1bmN0aW9uKHQpe3ZhciBuPXIoMzE2KSxpPXIoMjE3KSxvPXIoMjE4KS5lYyxhPXIoMjQpLHM9cigxNjEpLHU9cigzMzkpO2Z1bmN0aW9uIGMoZSxyLGksbyl7aWYoKGU9bmV3IHQoZS50b0FycmF5KCkpKS5sZW5ndGg8ci5ieXRlTGVuZ3RoKCkpe3ZhciBhPW5ldyB0KHIuYnl0ZUxlbmd0aCgpLWUubGVuZ3RoKTthLmZpbGwoMCksZT10LmNvbmNhdChbYSxlXSl9dmFyIHM9aS5sZW5ndGgsdT1mdW5jdGlvbihlLHIpe2U9KGU9ZihlLHIpKS5tb2Qocik7dmFyIG49bmV3IHQoZS50b0FycmF5KCkpO2lmKG4ubGVuZ3RoPHIuYnl0ZUxlbmd0aCgpKXt2YXIgaT1uZXcgdChyLmJ5dGVMZW5ndGgoKS1uLmxlbmd0aCk7aS5maWxsKDApLG49dC5jb25jYXQoW2ksbl0pfXJldHVybiBufShpLHIpLGM9bmV3IHQocyk7Yy5maWxsKDEpO3ZhciBsPW5ldyB0KHMpO3JldHVybiBsLmZpbGwoMCksbD1uKG8sbCkudXBkYXRlKGMpLnVwZGF0ZShuZXcgdChbMF0pKS51cGRhdGUoZSkudXBkYXRlKHUpLmRpZ2VzdCgpLGM9bihvLGwpLnVwZGF0ZShjKS5kaWdlc3QoKSx7azpsPW4obyxsKS51cGRhdGUoYykudXBkYXRlKG5ldyB0KFsxXSkpLnVwZGF0ZShlKS51cGRhdGUodSkuZGlnZXN0KCksdjpjPW4obyxsKS51cGRhdGUoYykuZGlnZXN0KCl9fWZ1bmN0aW9uIGYoZSx0KXt2YXIgcj1uZXcgYShlKSxuPShlLmxlbmd0aDw8MyktdC5iaXRMZW5ndGgoKTtyZXR1cm4gbj4wJiZyLmlzaHJuKG4pLHJ9ZnVuY3Rpb24gbChlLHIsaSl7dmFyIG8sYTtkb3tmb3Iobz1uZXcgdCgwKTs4Km8ubGVuZ3RoPGUuYml0TGVuZ3RoKCk7KXIudj1uKGksci5rKS51cGRhdGUoci52KS5kaWdlc3QoKSxvPXQuY29uY2F0KFtvLHIudl0pO2E9ZihvLGUpLHIuaz1uKGksci5rKS51cGRhdGUoci52KS51cGRhdGUobmV3IHQoWzBdKSkuZGlnZXN0KCksci52PW4oaSxyLmspLnVwZGF0ZShyLnYpLmRpZ2VzdCgpfXdoaWxlKC0xIT09YS5jbXAoZSkpO3JldHVybiBhfWZ1bmN0aW9uIGgoZSx0LHIsbil7cmV0dXJuIGUudG9SZWQoYS5tb250KHIpKS5yZWRQb3codCkuZnJvbVJlZCgpLm1vZChuKX1lLmV4cG9ydHM9ZnVuY3Rpb24oZSxyLG4scCxkKXt2YXIgeT1zKHIpO2lmKHkuY3VydmUpe2lmKCJlY2RzYSIhPT1wJiYiZWNkc2EvcnNhIiE9PXApdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uKGUscil7dmFyIG49dVtyLmN1cnZlLmpvaW4oIi4iKV07aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGN1cnZlICIrci5jdXJ2ZS5qb2luKCIuIikpO3ZhciBpPW5ldyBvKG4pLmtleUZyb21Qcml2YXRlKHIucHJpdmF0ZUtleSkuc2lnbihlKTtyZXR1cm4gbmV3IHQoaS50b0RFUigpKX0oZSx5KX1pZigiZHNhIj09PXkudHlwZSl7aWYoImRzYSIhPT1wKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpLG89ci5wYXJhbXMucHJpdl9rZXkscz1yLnBhcmFtcy5wLHU9ci5wYXJhbXMucSxwPXIucGFyYW1zLmcsZD1uZXcgYSgwKSx5PWYoZSx1KS5tb2QodSksZz0hMSx2PWMobyx1LGUsbik7ITE9PT1nOylpPWwodSx2LG4pLGQ9aChwLGkscyx1KSwwPT09KGc9aS5pbnZtKHUpLmltdWwoeS5hZGQoby5tdWwoZCkpKS5tb2QodSkpLmNtcG4oMCkmJihnPSExLGQ9bmV3IGEoMCkpO3JldHVybiBmdW5jdGlvbihlLHIpe2U9ZS50b0FycmF5KCkscj1yLnRvQXJyYXkoKSwxMjgmZVswXSYmKGU9WzBdLmNvbmNhdChlKSksMTI4JnJbMF0mJihyPVswXS5jb25jYXQocikpO3ZhciBuPVs0OCxlLmxlbmd0aCtyLmxlbmd0aCs0LDIsZS5sZW5ndGhdO3JldHVybiBuPW4uY29uY2F0KGUsWzIsci5sZW5ndGhdLHIpLG5ldyB0KG4pfShkLGcpfShlLHksbil9aWYoInJzYSIhPT1wJiYiZWNkc2EvcnNhIiE9PXApdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlIik7ZT10LmNvbmNhdChbZCxlXSk7Zm9yKHZhciBnPXkubW9kdWx1cy5ieXRlTGVuZ3RoKCksdj1bMCwxXTtlLmxlbmd0aCt2Lmxlbmd0aCsxPGc7KXYucHVzaCgyNTUpO3YucHVzaCgwKTtmb3IodmFyIG09LTE7KyttPGUubGVuZ3RoOyl2LnB1c2goZVttXSk7cmV0dXJuIGkodix5KX0sZS5leHBvcnRzLmdldEtleT1jLGUuZXhwb3J0cy5tYWtlS2V5PWx9KS5jYWxsKHRoaXMscigxOCkuQnVmZmVyKX0sZnVuY3Rpb24oZSl7ZS5leHBvcnRzPXtfYXJnczpbWyJlbGxpcHRpY0A2LjUuMCIsIkQ6XFxEb3dubG9hZHNcXFJpZGVSaXNrXFxSaWRlUmlzayJdXSxfZnJvbToiZWxsaXB0aWNANi41LjAiLF9pZDoiZWxsaXB0aWNANi41LjAiLF9pbkJ1bmRsZTohMSxfaW50ZWdyaXR5OiJzaGE1MTItZUZPSlRNeUNZYjd4dEUvY2FKNkpKdStiaGk2N1dDWU5ia0dTa251MjBwbU04S2UvYnFPZmRuWld4eW9HTjI2SmdmeFRiWHJzQ2tFdzRLaGVDVC9LR2c9PSIsX2xvY2F0aW9uOiIvZWxsaXB0aWMiLF9waGFudG9tQ2hpbGRyZW46e30sX3JlcXVlc3RlZDp7dHlwZToidmVyc2lvbiIscmVnaXN0cnk6ITAscmF3OiJlbGxpcHRpY0A2LjUuMCIsbmFtZToiZWxsaXB0aWMiLGVzY2FwZWROYW1lOiJlbGxpcHRpYyIscmF3U3BlYzoiNi41LjAiLHNhdmVTcGVjOm51bGwsZmV0Y2hTcGVjOiI2LjUuMCJ9LF9yZXF1aXJlZEJ5OlsiL2Jyb3dzZXJpZnktc2lnbiIsIi9jcmVhdGUtZWNkaCJdLF9yZXNvbHZlZDoiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZWxsaXB0aWMvLS9lbGxpcHRpYy02LjUuMC50Z3oiLF9zcGVjOiI2LjUuMCIsX3doZXJlOiJEOlxcRG93bmxvYWRzXFxSaWRlUmlza1xcUmlkZVJpc2siLGF1dGhvcjp7bmFtZToiRmVkb3IgSW5kdXRueSIsZW1haWw6ImZlZG9yQGluZHV0bnkuY29tIn0sYnVnczp7dXJsOiJodHRwczovL2dpdGh1Yi5jb20vaW5kdXRueS9lbGxpcHRpYy9pc3N1ZXMifSxkZXBlbmRlbmNpZXM6eyJibi5qcyI6Il40LjQuMCIsYnJvcmFuZDoiXjEuMC4xIiwiaGFzaC5qcyI6Il4xLjAuMCIsImhtYWMtZHJiZyI6Il4xLjAuMCIsaW5oZXJpdHM6Il4yLjAuMSIsIm1pbmltYWxpc3RpYy1hc3NlcnQiOiJeMS4wLjAiLCJtaW5pbWFsaXN0aWMtY3J5cHRvLXV0aWxzIjoiXjEuMC4wIn0sZGVzY3JpcHRpb246IkVDIGNyeXB0b2dyYXBoeSIsZGV2RGVwZW5kZW5jaWVzOnticmZzOiJeMS40LjMiLGNvdmVyYWxsczoiXjIuMTEuMyIsZ3J1bnQ6Il4wLjQuNSIsImdydW50LWJyb3dzZXJpZnkiOiJeNS4wLjAiLCJncnVudC1jbGkiOiJeMS4yLjAiLCJncnVudC1jb250cmliLWNvbm5lY3QiOiJeMS4wLjAiLCJncnVudC1jb250cmliLWNvcHkiOiJeMS4wLjAiLCJncnVudC1jb250cmliLXVnbGlmeSI6Il4xLjAuMSIsImdydW50LW1vY2hhLWlzdGFuYnVsIjoiXjMuMC4xIiwiZ3J1bnQtc2F1Y2VsYWJzIjoiXjguNi4yIixpc3RhbmJ1bDoiXjAuNC4yIixqc2NzOiJeMi45LjAiLGpzaGludDoiXjIuNi4wIixtb2NoYToiXjIuMS4wIn0sZmlsZXM6WyJsaWIiXSxob21lcGFnZToiaHR0cHM6Ly9naXRodWIuY29tL2luZHV0bnkvZWxsaXB0aWMiLGtleXdvcmRzOlsiRUMiLCJFbGxpcHRpYyIsImN1cnZlIiwiQ3J5cHRvZ3JhcGh5Il0sbGljZW5zZToiTUlUIixtYWluOiJsaWIvZWxsaXB0aWMuanMiLG5hbWU6ImVsbGlwdGljIixyZXBvc2l0b3J5Ont0eXBlOiJnaXQiLHVybDoiZ2l0K3NzaDovL2dpdEBnaXRodWIuY29tL2luZHV0bnkvZWxsaXB0aWMuZ2l0In0sc2NyaXB0czp7anNjczoianNjcyBiZW5jaG1hcmtzLyouanMgbGliLyouanMgbGliLyoqLyouanMgbGliLyoqLyoqLyouanMgdGVzdC9pbmRleC5qcyIsanNoaW50OiJqc2NzIGJlbmNobWFya3MvKi5qcyBsaWIvKi5qcyBsaWIvKiovKi5qcyBsaWIvKiovKiovKi5qcyB0ZXN0L2luZGV4LmpzIixsaW50OiJucG0gcnVuIGpzY3MgJiYgbnBtIHJ1biBqc2hpbnQiLHRlc3Q6Im5wbSBydW4gbGludCAmJiBucG0gcnVuIHVuaXQiLHVuaXQ6ImlzdGFuYnVsIHRlc3QgX21vY2hhIC0tcmVwb3J0ZXI9c3BlYyB0ZXN0L2luZGV4LmpzIix2ZXJzaW9uOiJncnVudCBkaXN0ICYmIGdpdCBhZGQgZGlzdC8ifSx2ZXJzaW9uOiI2LjUuMCJ9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNDgpLGk9cigyNCksbz1yKDcpLGE9cigxNjApLHM9bi5hc3NlcnQ7ZnVuY3Rpb24gdShlKXthLmNhbGwodGhpcywic2hvcnQiLGUpLHRoaXMuYT1uZXcgaShlLmEsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmI9bmV3IGkoZS5iLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy50aW52PXRoaXMudHdvLnJlZEludm0oKSx0aGlzLnplcm9BPTA9PT10aGlzLmEuZnJvbVJlZCgpLmNtcG4oMCksdGhpcy50aHJlZUE9MD09PXRoaXMuYS5mcm9tUmVkKCkuc3ViKHRoaXMucCkuY21wbigtMyksdGhpcy5lbmRvPXRoaXMuX2dldEVuZG9tb3JwaGlzbShlKSx0aGlzLl9lbmRvV25hZlQxPW5ldyBBcnJheSg0KSx0aGlzLl9lbmRvV25hZlQyPW5ldyBBcnJheSg0KX1mdW5jdGlvbiBjKGUsdCxyLG4pe2EuQmFzZVBvaW50LmNhbGwodGhpcyxlLCJhZmZpbmUiKSxudWxsPT09dCYmbnVsbD09PXI/KHRoaXMueD1udWxsLHRoaXMueT1udWxsLHRoaXMuaW5mPSEwKToodGhpcy54PW5ldyBpKHQsMTYpLHRoaXMueT1uZXcgaShyLDE2KSxuJiYodGhpcy54LmZvcmNlUmVkKHRoaXMuY3VydmUucmVkKSx0aGlzLnkuZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy5pbmY9ITEpfWZ1bmN0aW9uIGYoZSx0LHIsbil7YS5CYXNlUG9pbnQuY2FsbCh0aGlzLGUsImphY29iaWFuIiksbnVsbD09PXQmJm51bGw9PT1yJiZudWxsPT09bj8odGhpcy54PXRoaXMuY3VydmUub25lLHRoaXMueT10aGlzLmN1cnZlLm9uZSx0aGlzLno9bmV3IGkoMCkpOih0aGlzLng9bmV3IGkodCwxNiksdGhpcy55PW5ldyBpKHIsMTYpLHRoaXMuej1uZXcgaShuLDE2KSksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56T25lPXRoaXMuej09PXRoaXMuY3VydmUub25lfW8odSxhKSxlLmV4cG9ydHM9dSx1LnByb3RvdHlwZS5fZ2V0RW5kb21vcnBoaXNtPWZ1bmN0aW9uKGUpe2lmKHRoaXMuemVyb0EmJnRoaXMuZyYmdGhpcy5uJiYxPT09dGhpcy5wLm1vZG4oMykpe3ZhciB0LHI7aWYoZS5iZXRhKXQ9bmV3IGkoZS5iZXRhLDE2KS50b1JlZCh0aGlzLnJlZCk7ZWxzZXt2YXIgbj10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5wKTt0PSh0PW5bMF0uY21wKG5bMV0pPDA/blswXTpuWzFdKS50b1JlZCh0aGlzLnJlZCl9aWYoZS5sYW1iZGEpcj1uZXcgaShlLmxhbWJkYSwxNik7ZWxzZXt2YXIgbz10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5uKTswPT09dGhpcy5nLm11bChvWzBdKS54LmNtcCh0aGlzLmcueC5yZWRNdWwodCkpP3I9b1swXToocj1vWzFdLHMoMD09PXRoaXMuZy5tdWwocikueC5jbXAodGhpcy5nLngucmVkTXVsKHQpKSkpfXJldHVybntiZXRhOnQsbGFtYmRhOnIsYmFzaXM6ZS5iYXNpcz9lLmJhc2lzLm1hcChmdW5jdGlvbihlKXtyZXR1cm57YTpuZXcgaShlLmEsMTYpLGI6bmV3IGkoZS5iLDE2KX19KTp0aGlzLl9nZXRFbmRvQmFzaXMocil9fX0sdS5wcm90b3R5cGUuX2dldEVuZG9Sb290cz1mdW5jdGlvbihlKXt2YXIgdD1lPT09dGhpcy5wP3RoaXMucmVkOmkubW9udChlKSxyPW5ldyBpKDIpLnRvUmVkKHQpLnJlZEludm0oKSxuPXIucmVkTmVnKCksbz1uZXcgaSgzKS50b1JlZCh0KS5yZWROZWcoKS5yZWRTcXJ0KCkucmVkTXVsKHIpO3JldHVybltuLnJlZEFkZChvKS5mcm9tUmVkKCksbi5yZWRTdWIobykuZnJvbVJlZCgpXX0sdS5wcm90b3R5cGUuX2dldEVuZG9CYXNpcz1mdW5jdGlvbihlKXtmb3IodmFyIHQscixuLG8sYSxzLHUsYyxmLGw9dGhpcy5uLnVzaHJuKE1hdGguZmxvb3IodGhpcy5uLmJpdExlbmd0aCgpLzIpKSxoPWUscD10aGlzLm4uY2xvbmUoKSxkPW5ldyBpKDEpLHk9bmV3IGkoMCksZz1uZXcgaSgwKSx2PW5ldyBpKDEpLG09MDswIT09aC5jbXBuKDApOyl7dmFyIGI9cC5kaXYoaCk7Yz1wLnN1YihiLm11bChoKSksZj1nLnN1YihiLm11bChkKSk7dmFyIF89di5zdWIoYi5tdWwoeSkpO2lmKCFuJiZjLmNtcChsKTwwKXQ9dS5uZWcoKSxyPWQsbj1jLm5lZygpLG89ZjtlbHNlIGlmKG4mJjI9PT0rK20pYnJlYWs7dT1jLHA9aCxoPWMsZz1kLGQ9Zix2PXkseT1ffWE9Yy5uZWcoKSxzPWY7dmFyIFM9bi5zcXIoKS5hZGQoby5zcXIoKSk7cmV0dXJuIGEuc3FyKCkuYWRkKHMuc3FyKCkpLmNtcChTKT49MCYmKGE9dCxzPXIpLG4ubmVnYXRpdmUmJihuPW4ubmVnKCksbz1vLm5lZygpKSxhLm5lZ2F0aXZlJiYoYT1hLm5lZygpLHM9cy5uZWcoKSksW3thOm4sYjpvfSx7YTphLGI6c31dfSx1LnByb3RvdHlwZS5fZW5kb1NwbGl0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZW5kby5iYXNpcyxyPXRbMF0sbj10WzFdLGk9bi5iLm11bChlKS5kaXZSb3VuZCh0aGlzLm4pLG89ci5iLm5lZygpLm11bChlKS5kaXZSb3VuZCh0aGlzLm4pLGE9aS5tdWwoci5hKSxzPW8ubXVsKG4uYSksdT1pLm11bChyLmIpLGM9by5tdWwobi5iKTtyZXR1cm57azE6ZS5zdWIoYSkuc3ViKHMpLGsyOnUuYWRkKGMpLm5lZygpfX0sdS5wcm90b3R5cGUucG9pbnRGcm9tWD1mdW5jdGlvbihlLHQpeyhlPW5ldyBpKGUsMTYpKS5yZWR8fChlPWUudG9SZWQodGhpcy5yZWQpKTt2YXIgcj1lLnJlZFNxcigpLnJlZE11bChlKS5yZWRJQWRkKGUucmVkTXVsKHRoaXMuYSkpLnJlZElBZGQodGhpcy5iKSxuPXIucmVkU3FydCgpO2lmKDAhPT1uLnJlZFNxcigpLnJlZFN1YihyKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTt2YXIgbz1uLmZyb21SZWQoKS5pc09kZCgpO3JldHVybih0JiYhb3x8IXQmJm8pJiYobj1uLnJlZE5lZygpKSx0aGlzLnBvaW50KGUsbil9LHUucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKGUpe2lmKGUuaW5mKXJldHVybiEwO3ZhciB0PWUueCxyPWUueSxuPXRoaXMuYS5yZWRNdWwodCksaT10LnJlZFNxcigpLnJlZE11bCh0KS5yZWRJQWRkKG4pLnJlZElBZGQodGhpcy5iKTtyZXR1cm4gMD09PXIucmVkU3FyKCkucmVkSVN1YihpKS5jbXBuKDApfSx1LnByb3RvdHlwZS5fZW5kb1duYWZNdWxBZGQ9ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgbj10aGlzLl9lbmRvV25hZlQxLGk9dGhpcy5fZW5kb1duYWZUMixvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBhPXRoaXMuX2VuZG9TcGxpdCh0W29dKSxzPWVbb10sdT1zLl9nZXRCZXRhKCk7YS5rMS5uZWdhdGl2ZSYmKGEuazEuaW5lZygpLHM9cy5uZWcoITApKSxhLmsyLm5lZ2F0aXZlJiYoYS5rMi5pbmVnKCksdT11Lm5lZyghMCkpLG5bMipvXT1zLG5bMipvKzFdPXUsaVsyKm9dPWEuazEsaVsyKm8rMV09YS5rMn1mb3IodmFyIGM9dGhpcy5fd25hZk11bEFkZCgxLG4saSwyKm8sciksZj0wO2Y8MipvO2YrKyluW2ZdPW51bGwsaVtmXT1udWxsO3JldHVybiBjfSxvKGMsYS5CYXNlUG9pbnQpLHUucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gbmV3IGModGhpcyxlLHQscil9LHUucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYy5mcm9tSlNPTih0aGlzLGUsdCl9LGMucHJvdG90eXBlLl9nZXRCZXRhPWZ1bmN0aW9uKCl7aWYodGhpcy5jdXJ2ZS5lbmRvKXt2YXIgZT10aGlzLnByZWNvbXB1dGVkO2lmKGUmJmUuYmV0YSlyZXR1cm4gZS5iZXRhO3ZhciB0PXRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE11bCh0aGlzLmN1cnZlLmVuZG8uYmV0YSksdGhpcy55KTtpZihlKXt2YXIgcj10aGlzLmN1cnZlLG49ZnVuY3Rpb24oZSl7cmV0dXJuIHIucG9pbnQoZS54LnJlZE11bChyLmVuZG8uYmV0YSksZS55KX07ZS5iZXRhPXQsdC5wcmVjb21wdXRlZD17YmV0YTpudWxsLG5hZjplLm5hZiYme3duZDplLm5hZi53bmQscG9pbnRzOmUubmFmLnBvaW50cy5tYXAobil9LGRvdWJsZXM6ZS5kb3VibGVzJiZ7c3RlcDplLmRvdWJsZXMuc3RlcCxwb2ludHM6ZS5kb3VibGVzLnBvaW50cy5tYXAobil9fX1yZXR1cm4gdH19LGMucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByZWNvbXB1dGVkP1t0aGlzLngsdGhpcy55LHRoaXMucHJlY29tcHV0ZWQmJntkb3VibGVzOnRoaXMucHJlY29tcHV0ZWQuZG91YmxlcyYme3N0ZXA6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnN0ZXAscG9pbnRzOnRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcy5wb2ludHMuc2xpY2UoMSl9LG5hZjp0aGlzLnByZWNvbXB1dGVkLm5hZiYme3duZDp0aGlzLnByZWNvbXB1dGVkLm5hZi53bmQscG9pbnRzOnRoaXMucHJlY29tcHV0ZWQubmFmLnBvaW50cy5zbGljZSgxKX19XTpbdGhpcy54LHRoaXMueV19LGMuZnJvbUpTT049ZnVuY3Rpb24oZSx0LHIpeyJzdHJpbmciPT09dHlwZW9mIHQmJih0PUpTT04ucGFyc2UodCkpO3ZhciBuPWUucG9pbnQodFswXSx0WzFdLHIpO2lmKCF0WzJdKXJldHVybiBuO2Z1bmN0aW9uIGkodCl7cmV0dXJuIGUucG9pbnQodFswXSx0WzFdLHIpfXZhciBvPXRbMl07cmV0dXJuIG4ucHJlY29tcHV0ZWQ9e2JldGE6bnVsbCxkb3VibGVzOm8uZG91YmxlcyYme3N0ZXA6by5kb3VibGVzLnN0ZXAscG9pbnRzOltuXS5jb25jYXQoby5kb3VibGVzLnBvaW50cy5tYXAoaSkpfSxuYWY6by5uYWYmJnt3bmQ6by5uYWYud25kLHBvaW50czpbbl0uY29uY2F0KG8ubmFmLnBvaW50cy5tYXAoaSkpfX0sbn0sYy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxjLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5mfSxjLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7aWYodGhpcy5pbmYpcmV0dXJuIGU7aWYoZS5pbmYpcmV0dXJuIHRoaXM7aWYodGhpcy5lcShlKSlyZXR1cm4gdGhpcy5kYmwoKTtpZih0aGlzLm5lZygpLmVxKGUpKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7aWYoMD09PXRoaXMueC5jbXAoZS54KSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciB0PXRoaXMueS5yZWRTdWIoZS55KTswIT09dC5jbXBuKDApJiYodD10LnJlZE11bCh0aGlzLngucmVkU3ViKGUueCkucmVkSW52bSgpKSk7dmFyIHI9dC5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueCkucmVkSVN1YihlLngpLG49dC5yZWRNdWwodGhpcy54LnJlZFN1YihyKSkucmVkSVN1Yih0aGlzLnkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHIsbil9LGMucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe2lmKHRoaXMuaW5mKXJldHVybiB0aGlzO3ZhciBlPXRoaXMueS5yZWRBZGQodGhpcy55KTtpZigwPT09ZS5jbXBuKDApKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIHQ9dGhpcy5jdXJ2ZS5hLHI9dGhpcy54LnJlZFNxcigpLG49ZS5yZWRJbnZtKCksaT1yLnJlZEFkZChyKS5yZWRJQWRkKHIpLnJlZElBZGQodCkucmVkTXVsKG4pLG89aS5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueC5yZWRBZGQodGhpcy54KSksYT1pLnJlZE11bCh0aGlzLngucmVkU3ViKG8pKS5yZWRJU3ViKHRoaXMueSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQobyxhKX0sYy5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnguZnJvbVJlZCgpfSxjLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueS5mcm9tUmVkKCl9LGMucHJvdG90eXBlLm11bD1mdW5jdGlvbihlKXtyZXR1cm4gZT1uZXcgaShlLDE2KSx0aGlzLl9oYXNEb3VibGVzKGUpP3RoaXMuY3VydmUuX2ZpeGVkTmFmTXVsKHRoaXMsZSk6dGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKFt0aGlzXSxbZV0pOnRoaXMuY3VydmUuX3duYWZNdWwodGhpcyxlKX0sYy5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1bdGhpcyx0XSxpPVtlLHJdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQobixpKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsbixpLDIpfSxjLnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1bdGhpcyx0XSxpPVtlLHJdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQobixpLCEwKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsbixpLDIsITApfSxjLnByb3RvdHlwZS5lcT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV8fHRoaXMuaW5mPT09ZS5pbmYmJih0aGlzLmluZnx8MD09PXRoaXMueC5jbXAoZS54KSYmMD09PXRoaXMueS5jbXAoZS55KSl9LGMucHJvdG90eXBlLm5lZz1mdW5jdGlvbihlKXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgdD10aGlzLmN1cnZlLnBvaW50KHRoaXMueCx0aGlzLnkucmVkTmVnKCkpO2lmKGUmJnRoaXMucHJlY29tcHV0ZWQpe3ZhciByPXRoaXMucHJlY29tcHV0ZWQsbj1mdW5jdGlvbihlKXtyZXR1cm4gZS5uZWcoKX07dC5wcmVjb21wdXRlZD17bmFmOnIubmFmJiZ7d25kOnIubmFmLnduZCxwb2ludHM6ci5uYWYucG9pbnRzLm1hcChuKX0sZG91YmxlczpyLmRvdWJsZXMmJntzdGVwOnIuZG91Ymxlcy5zdGVwLHBvaW50czpyLmRvdWJsZXMucG9pbnRzLm1hcChuKX19fXJldHVybiB0fSxjLnByb3RvdHlwZS50b0o9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmY/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuY3VydmUuanBvaW50KHRoaXMueCx0aGlzLnksdGhpcy5jdXJ2ZS5vbmUpfSxvKGYsYS5CYXNlUG9pbnQpLHUucHJvdG90eXBlLmpwb2ludD1mdW5jdGlvbihlLHQscil7cmV0dXJuIG5ldyBmKHRoaXMsZSx0LHIpfSxmLnByb3RvdHlwZS50b1A9ZnVuY3Rpb24oKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBlPXRoaXMuei5yZWRJbnZtKCksdD1lLnJlZFNxcigpLHI9dGhpcy54LnJlZE11bCh0KSxuPXRoaXMueS5yZWRNdWwodCkucmVkTXVsKGUpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHIsbil9LGYucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsdGhpcy55LnJlZE5lZygpLHRoaXMueil9LGYucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gZTtpZihlLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpczt2YXIgdD1lLnoucmVkU3FyKCkscj10aGlzLnoucmVkU3FyKCksbj10aGlzLngucmVkTXVsKHQpLGk9ZS54LnJlZE11bChyKSxvPXRoaXMueS5yZWRNdWwodC5yZWRNdWwoZS56KSksYT1lLnkucmVkTXVsKHIucmVkTXVsKHRoaXMueikpLHM9bi5yZWRTdWIoaSksdT1vLnJlZFN1YihhKTtpZigwPT09cy5jbXBuKDApKXJldHVybiAwIT09dS5jbXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciBjPXMucmVkU3FyKCksZj1jLnJlZE11bChzKSxsPW4ucmVkTXVsKGMpLGg9dS5yZWRTcXIoKS5yZWRJQWRkKGYpLnJlZElTdWIobCkucmVkSVN1YihsKSxwPXUucmVkTXVsKGwucmVkSVN1YihoKSkucmVkSVN1YihvLnJlZE11bChmKSksZD10aGlzLnoucmVkTXVsKGUueikucmVkTXVsKHMpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChoLHAsZCl9LGYucHJvdG90eXBlLm1peGVkQWRkPWZ1bmN0aW9uKGUpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiBlLnRvSigpO2lmKGUuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO3ZhciB0PXRoaXMuei5yZWRTcXIoKSxyPXRoaXMueCxuPWUueC5yZWRNdWwodCksaT10aGlzLnksbz1lLnkucmVkTXVsKHQpLnJlZE11bCh0aGlzLnopLGE9ci5yZWRTdWIobikscz1pLnJlZFN1YihvKTtpZigwPT09YS5jbXBuKDApKXJldHVybiAwIT09cy5jbXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciB1PWEucmVkU3FyKCksYz11LnJlZE11bChhKSxmPXIucmVkTXVsKHUpLGw9cy5yZWRTcXIoKS5yZWRJQWRkKGMpLnJlZElTdWIoZikucmVkSVN1YihmKSxoPXMucmVkTXVsKGYucmVkSVN1YihsKSkucmVkSVN1YihpLnJlZE11bChjKSkscD10aGlzLnoucmVkTXVsKGEpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChsLGgscCl9LGYucHJvdG90eXBlLmRibHA9ZnVuY3Rpb24oZSl7aWYoMD09PWUpcmV0dXJuIHRoaXM7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7aWYoIWUpcmV0dXJuIHRoaXMuZGJsKCk7aWYodGhpcy5jdXJ2ZS56ZXJvQXx8dGhpcy5jdXJ2ZS50aHJlZUEpe2Zvcih2YXIgdD10aGlzLHI9MDtyPGU7cisrKXQ9dC5kYmwoKTtyZXR1cm4gdH12YXIgbj10aGlzLmN1cnZlLmEsaT10aGlzLmN1cnZlLnRpbnYsbz10aGlzLngsYT10aGlzLnkscz10aGlzLnosdT1zLnJlZFNxcigpLnJlZFNxcigpLGM9YS5yZWRBZGQoYSk7Zm9yKHI9MDtyPGU7cisrKXt2YXIgZj1vLnJlZFNxcigpLGw9Yy5yZWRTcXIoKSxoPWwucmVkU3FyKCkscD1mLnJlZEFkZChmKS5yZWRJQWRkKGYpLnJlZElBZGQobi5yZWRNdWwodSkpLGQ9by5yZWRNdWwobCkseT1wLnJlZFNxcigpLnJlZElTdWIoZC5yZWRBZGQoZCkpLGc9ZC5yZWRJU3ViKHkpLHY9cC5yZWRNdWwoZyk7dj12LnJlZElBZGQodikucmVkSVN1YihoKTt2YXIgbT1jLnJlZE11bChzKTtyKzE8ZSYmKHU9dS5yZWRNdWwoaCkpLG89eSxzPW0sYz12fXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChvLGMucmVkTXVsKGkpLHMpfSxmLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLnplcm9BP3RoaXMuX3plcm9EYmwoKTp0aGlzLmN1cnZlLnRocmVlQT90aGlzLl90aHJlZURibCgpOnRoaXMuX2RibCgpfSxmLnByb3RvdHlwZS5femVyb0RibD1mdW5jdGlvbigpe3ZhciBlLHQscjtpZih0aGlzLnpPbmUpe3ZhciBuPXRoaXMueC5yZWRTcXIoKSxpPXRoaXMueS5yZWRTcXIoKSxvPWkucmVkU3FyKCksYT10aGlzLngucmVkQWRkKGkpLnJlZFNxcigpLnJlZElTdWIobikucmVkSVN1YihvKTthPWEucmVkSUFkZChhKTt2YXIgcz1uLnJlZEFkZChuKS5yZWRJQWRkKG4pLHU9cy5yZWRTcXIoKS5yZWRJU3ViKGEpLnJlZElTdWIoYSksYz1vLnJlZElBZGQobyk7Yz0oYz1jLnJlZElBZGQoYykpLnJlZElBZGQoYyksZT11LHQ9cy5yZWRNdWwoYS5yZWRJU3ViKHUpKS5yZWRJU3ViKGMpLHI9dGhpcy55LnJlZEFkZCh0aGlzLnkpfWVsc2V7dmFyIGY9dGhpcy54LnJlZFNxcigpLGw9dGhpcy55LnJlZFNxcigpLGg9bC5yZWRTcXIoKSxwPXRoaXMueC5yZWRBZGQobCkucmVkU3FyKCkucmVkSVN1YihmKS5yZWRJU3ViKGgpO3A9cC5yZWRJQWRkKHApO3ZhciBkPWYucmVkQWRkKGYpLnJlZElBZGQoZikseT1kLnJlZFNxcigpLGc9aC5yZWRJQWRkKGgpO2c9KGc9Zy5yZWRJQWRkKGcpKS5yZWRJQWRkKGcpLGU9eS5yZWRJU3ViKHApLnJlZElTdWIocCksdD1kLnJlZE11bChwLnJlZElTdWIoZSkpLnJlZElTdWIoZykscj0ocj10aGlzLnkucmVkTXVsKHRoaXMueikpLnJlZElBZGQocil9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGUsdCxyKX0sZi5wcm90b3R5cGUuX3RocmVlRGJsPWZ1bmN0aW9uKCl7dmFyIGUsdCxyO2lmKHRoaXMuek9uZSl7dmFyIG49dGhpcy54LnJlZFNxcigpLGk9dGhpcy55LnJlZFNxcigpLG89aS5yZWRTcXIoKSxhPXRoaXMueC5yZWRBZGQoaSkucmVkU3FyKCkucmVkSVN1YihuKS5yZWRJU3ViKG8pO2E9YS5yZWRJQWRkKGEpO3ZhciBzPW4ucmVkQWRkKG4pLnJlZElBZGQobikucmVkSUFkZCh0aGlzLmN1cnZlLmEpLHU9cy5yZWRTcXIoKS5yZWRJU3ViKGEpLnJlZElTdWIoYSk7ZT11O3ZhciBjPW8ucmVkSUFkZChvKTtjPShjPWMucmVkSUFkZChjKSkucmVkSUFkZChjKSx0PXMucmVkTXVsKGEucmVkSVN1Yih1KSkucmVkSVN1YihjKSxyPXRoaXMueS5yZWRBZGQodGhpcy55KX1lbHNle3ZhciBmPXRoaXMuei5yZWRTcXIoKSxsPXRoaXMueS5yZWRTcXIoKSxoPXRoaXMueC5yZWRNdWwobCkscD10aGlzLngucmVkU3ViKGYpLnJlZE11bCh0aGlzLngucmVkQWRkKGYpKTtwPXAucmVkQWRkKHApLnJlZElBZGQocCk7dmFyIGQ9aC5yZWRJQWRkKGgpLHk9KGQ9ZC5yZWRJQWRkKGQpKS5yZWRBZGQoZCk7ZT1wLnJlZFNxcigpLnJlZElTdWIoeSkscj10aGlzLnkucmVkQWRkKHRoaXMueikucmVkU3FyKCkucmVkSVN1YihsKS5yZWRJU3ViKGYpO3ZhciBnPWwucmVkU3FyKCk7Zz0oZz0oZz1nLnJlZElBZGQoZykpLnJlZElBZGQoZykpLnJlZElBZGQoZyksdD1wLnJlZE11bChkLnJlZElTdWIoZSkpLnJlZElTdWIoZyl9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGUsdCxyKX0sZi5wcm90b3R5cGUuX2RibD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3VydmUuYSx0PXRoaXMueCxyPXRoaXMueSxuPXRoaXMueixpPW4ucmVkU3FyKCkucmVkU3FyKCksbz10LnJlZFNxcigpLGE9ci5yZWRTcXIoKSxzPW8ucmVkQWRkKG8pLnJlZElBZGQobykucmVkSUFkZChlLnJlZE11bChpKSksdT10LnJlZEFkZCh0KSxjPSh1PXUucmVkSUFkZCh1KSkucmVkTXVsKGEpLGY9cy5yZWRTcXIoKS5yZWRJU3ViKGMucmVkQWRkKGMpKSxsPWMucmVkSVN1YihmKSxoPWEucmVkU3FyKCk7aD0oaD0oaD1oLnJlZElBZGQoaCkpLnJlZElBZGQoaCkpLnJlZElBZGQoaCk7dmFyIHA9cy5yZWRNdWwobCkucmVkSVN1YihoKSxkPXIucmVkQWRkKHIpLnJlZE11bChuKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoZixwLGQpfSxmLnByb3RvdHlwZS50cnBsPWZ1bmN0aW9uKCl7aWYoIXRoaXMuY3VydmUuemVyb0EpcmV0dXJuIHRoaXMuZGJsKCkuYWRkKHRoaXMpO3ZhciBlPXRoaXMueC5yZWRTcXIoKSx0PXRoaXMueS5yZWRTcXIoKSxyPXRoaXMuei5yZWRTcXIoKSxuPXQucmVkU3FyKCksaT1lLnJlZEFkZChlKS5yZWRJQWRkKGUpLG89aS5yZWRTcXIoKSxhPXRoaXMueC5yZWRBZGQodCkucmVkU3FyKCkucmVkSVN1YihlKS5yZWRJU3ViKG4pLHM9KGE9KGE9KGE9YS5yZWRJQWRkKGEpKS5yZWRBZGQoYSkucmVkSUFkZChhKSkucmVkSVN1YihvKSkucmVkU3FyKCksdT1uLnJlZElBZGQobik7dT0odT0odT11LnJlZElBZGQodSkpLnJlZElBZGQodSkpLnJlZElBZGQodSk7dmFyIGM9aS5yZWRJQWRkKGEpLnJlZFNxcigpLnJlZElTdWIobykucmVkSVN1YihzKS5yZWRJU3ViKHUpLGY9dC5yZWRNdWwoYyk7Zj0oZj1mLnJlZElBZGQoZikpLnJlZElBZGQoZik7dmFyIGw9dGhpcy54LnJlZE11bChzKS5yZWRJU3ViKGYpO2w9KGw9bC5yZWRJQWRkKGwpKS5yZWRJQWRkKGwpO3ZhciBoPXRoaXMueS5yZWRNdWwoYy5yZWRNdWwodS5yZWRJU3ViKGMpKS5yZWRJU3ViKGEucmVkTXVsKHMpKSk7aD0oaD0oaD1oLnJlZElBZGQoaCkpLnJlZElBZGQoaCkpLnJlZElBZGQoaCk7dmFyIHA9dGhpcy56LnJlZEFkZChhKS5yZWRTcXIoKS5yZWRJU3ViKHIpLnJlZElTdWIocyk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGwsaCxwKX0sZi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9bmV3IGkoZSx0KSx0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsZSl9LGYucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGUpe2lmKCJhZmZpbmUiPT09ZS50eXBlKXJldHVybiB0aGlzLmVxKGUudG9KKCkpO2lmKHRoaXM9PT1lKXJldHVybiEwO3ZhciB0PXRoaXMuei5yZWRTcXIoKSxyPWUuei5yZWRTcXIoKTtpZigwIT09dGhpcy54LnJlZE11bChyKS5yZWRJU3ViKGUueC5yZWRNdWwodCkpLmNtcG4oMCkpcmV0dXJuITE7dmFyIG49dC5yZWRNdWwodGhpcy56KSxpPXIucmVkTXVsKGUueik7cmV0dXJuIDA9PT10aGlzLnkucmVkTXVsKGkpLnJlZElTdWIoZS55LnJlZE11bChuKSkuY21wbigwKX0sZi5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuei5yZWRTcXIoKSxyPWUudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bCh0KTtpZigwPT09dGhpcy54LmNtcChyKSlyZXR1cm4hMDtmb3IodmFyIG49ZS5jbG9uZSgpLGk9dGhpcy5jdXJ2ZS5yZWROLnJlZE11bCh0KTs7KXtpZihuLmlhZGQodGhpcy5jdXJ2ZS5uKSxuLmNtcCh0aGlzLmN1cnZlLnApPj0wKXJldHVybiExO2lmKHIucmVkSUFkZChpKSwwPT09dGhpcy54LmNtcChyKSlyZXR1cm4hMH19LGYucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBKUG9pbnQgSW5maW5pdHk+IjoiPEVDIEpQb2ludCB4OiAiK3RoaXMueC50b1N0cmluZygxNiwyKSsiIHk6ICIrdGhpcy55LnRvU3RyaW5nKDE2LDIpKyIgejogIit0aGlzLnoudG9TdHJpbmcoMTYsMikrIj4ifSxmLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnouY21wbigwKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigyNCksaT1yKDcpLG89cigxNjApLGE9cig0OCk7ZnVuY3Rpb24gcyhlKXtvLmNhbGwodGhpcywibW9udCIsZSksdGhpcy5hPW5ldyBuKGUuYSwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgbihlLmIsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmk0PW5ldyBuKDQpLnRvUmVkKHRoaXMucmVkKS5yZWRJbnZtKCksdGhpcy50d289bmV3IG4oMikudG9SZWQodGhpcy5yZWQpLHRoaXMuYTI0PXRoaXMuaTQucmVkTXVsKHRoaXMuYS5yZWRBZGQodGhpcy50d28pKX1mdW5jdGlvbiB1KGUsdCxyKXtvLkJhc2VQb2ludC5jYWxsKHRoaXMsZSwicHJvamVjdGl2ZSIpLG51bGw9PT10JiZudWxsPT09cj8odGhpcy54PXRoaXMuY3VydmUub25lLHRoaXMuej10aGlzLmN1cnZlLnplcm8pOih0aGlzLng9bmV3IG4odCwxNiksdGhpcy56PW5ldyBuKHIsMTYpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSl9aShzLG8pLGUuZXhwb3J0cz1zLHMucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKGUpe3ZhciB0PWUubm9ybWFsaXplKCkueCxyPXQucmVkU3FyKCksbj1yLnJlZE11bCh0KS5yZWRBZGQoci5yZWRNdWwodGhpcy5hKSkucmVkQWRkKHQpO3JldHVybiAwPT09bi5yZWRTcXJ0KCkucmVkU3FyKCkuY21wKG4pfSxpKHUsby5CYXNlUG9pbnQpLHMucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMucG9pbnQoYS50b0FycmF5KGUsdCksMSl9LHMucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyB1KHRoaXMsZSx0KX0scy5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbihlKXtyZXR1cm4gdS5mcm9tSlNPTih0aGlzLGUpfSx1LnByb3RvdHlwZS5wcmVjb21wdXRlPWZ1bmN0aW9uKCl7fSx1LnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WCgpLnRvQXJyYXkoImJlIix0aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpKX0sdS5mcm9tSlNPTj1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgdShlLHRbMF0sdFsxXXx8ZS5vbmUpfSx1LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgUG9pbnQgSW5maW5pdHk+IjoiPEVDIFBvaW50IHg6ICIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhpcy56LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiPiJ9LHUucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuei5jbXBuKDApfSx1LnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLngucmVkQWRkKHRoaXMueikucmVkU3FyKCksdD10aGlzLngucmVkU3ViKHRoaXMueikucmVkU3FyKCkscj1lLnJlZFN1Yih0KSxuPWUucmVkTXVsKHQpLGk9ci5yZWRNdWwodC5yZWRBZGQodGhpcy5jdXJ2ZS5hMjQucmVkTXVsKHIpKSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQobixpKX0sdS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sdS5wcm90b3R5cGUuZGlmZkFkZD1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMueC5yZWRBZGQodGhpcy56KSxuPXRoaXMueC5yZWRTdWIodGhpcy56KSxpPWUueC5yZWRBZGQoZS56KSxvPWUueC5yZWRTdWIoZS56KS5yZWRNdWwociksYT1pLnJlZE11bChuKSxzPXQuei5yZWRNdWwoby5yZWRBZGQoYSkucmVkU3FyKCkpLHU9dC54LnJlZE11bChvLnJlZElTdWIoYSkucmVkU3FyKCkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHMsdSl9LHUucHJvdG90eXBlLm11bD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5jbG9uZSgpLHI9dGhpcyxuPXRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKSxpPVtdOzAhPT10LmNtcG4oMCk7dC5pdXNocm4oMSkpaS5wdXNoKHQuYW5kbG4oMSkpO2Zvcih2YXIgbz1pLmxlbmd0aC0xO28+PTA7by0tKTA9PT1pW29dPyhyPXIuZGlmZkFkZChuLHRoaXMpLG49bi5kYmwoKSk6KG49ci5kaWZmQWRkKG4sdGhpcykscj1yLmRibCgpKTtyZXR1cm4gbn0sdS5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sdS5wcm90b3R5cGUuanVtbEFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LHUucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGUpe3JldHVybiAwPT09dGhpcy5nZXRYKCkuY21wKGUuZ2V0WCgpKX0sdS5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueD10aGlzLngucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzfSx1LnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy54LmZyb21SZWQoKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig0OCksaT1yKDI0KSxvPXIoNyksYT1yKDE2MCkscz1uLmFzc2VydDtmdW5jdGlvbiB1KGUpe3RoaXMudHdpc3RlZD0xIT09KDB8ZS5hKSx0aGlzLm1PbmVBPXRoaXMudHdpc3RlZCYmLTE9PT0oMHxlLmEpLHRoaXMuZXh0ZW5kZWQ9dGhpcy5tT25lQSxhLmNhbGwodGhpcywiZWR3YXJkcyIsZSksdGhpcy5hPW5ldyBpKGUuYSwxNikudW1vZCh0aGlzLnJlZC5tKSx0aGlzLmE9dGhpcy5hLnRvUmVkKHRoaXMucmVkKSx0aGlzLmM9bmV3IGkoZS5jLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5jMj10aGlzLmMucmVkU3FyKCksdGhpcy5kPW5ldyBpKGUuZCwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuZGQ9dGhpcy5kLnJlZEFkZCh0aGlzLmQpLHMoIXRoaXMudHdpc3RlZHx8MD09PXRoaXMuYy5mcm9tUmVkKCkuY21wbigxKSksdGhpcy5vbmVDPTE9PT0oMHxlLmMpfWZ1bmN0aW9uIGMoZSx0LHIsbixvKXthLkJhc2VQb2ludC5jYWxsKHRoaXMsZSwicHJvamVjdGl2ZSIpLG51bGw9PT10JiZudWxsPT09ciYmbnVsbD09PW4/KHRoaXMueD10aGlzLmN1cnZlLnplcm8sdGhpcy55PXRoaXMuY3VydmUub25lLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzLnQ9dGhpcy5jdXJ2ZS56ZXJvLHRoaXMuek9uZT0hMCk6KHRoaXMueD1uZXcgaSh0LDE2KSx0aGlzLnk9bmV3IGkociwxNiksdGhpcy56PW4/bmV3IGkobiwxNik6dGhpcy5jdXJ2ZS5vbmUsdGhpcy50PW8mJm5ldyBpKG8sMTYpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMudCYmIXRoaXMudC5yZWQmJih0aGlzLnQ9dGhpcy50LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56T25lPXRoaXMuej09PXRoaXMuY3VydmUub25lLHRoaXMuY3VydmUuZXh0ZW5kZWQmJiF0aGlzLnQmJih0aGlzLnQ9dGhpcy54LnJlZE11bCh0aGlzLnkpLHRoaXMuek9uZXx8KHRoaXMudD10aGlzLnQucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpKSkpfW8odSxhKSxlLmV4cG9ydHM9dSx1LnByb3RvdHlwZS5fbXVsQT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5tT25lQT9lLnJlZE5lZygpOnRoaXMuYS5yZWRNdWwoZSl9LHUucHJvdG90eXBlLl9tdWxDPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9uZUM/ZTp0aGlzLmMucmVkTXVsKGUpfSx1LnByb3RvdHlwZS5qcG9pbnQ9ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIHRoaXMucG9pbnQoZSx0LHIsbil9LHUucHJvdG90eXBlLnBvaW50RnJvbVg9ZnVuY3Rpb24oZSx0KXsoZT1uZXcgaShlLDE2KSkucmVkfHwoZT1lLnRvUmVkKHRoaXMucmVkKSk7dmFyIHI9ZS5yZWRTcXIoKSxuPXRoaXMuYzIucmVkU3ViKHRoaXMuYS5yZWRNdWwocikpLG89dGhpcy5vbmUucmVkU3ViKHRoaXMuYzIucmVkTXVsKHRoaXMuZCkucmVkTXVsKHIpKSxhPW4ucmVkTXVsKG8ucmVkSW52bSgpKSxzPWEucmVkU3FydCgpO2lmKDAhPT1zLnJlZFNxcigpLnJlZFN1YihhKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTt2YXIgdT1zLmZyb21SZWQoKS5pc09kZCgpO3JldHVybih0JiYhdXx8IXQmJnUpJiYocz1zLnJlZE5lZygpKSx0aGlzLnBvaW50KGUscyl9LHUucHJvdG90eXBlLnBvaW50RnJvbVk9ZnVuY3Rpb24oZSx0KXsoZT1uZXcgaShlLDE2KSkucmVkfHwoZT1lLnRvUmVkKHRoaXMucmVkKSk7dmFyIHI9ZS5yZWRTcXIoKSxuPXIucmVkU3ViKHRoaXMuYzIpLG89ci5yZWRNdWwodGhpcy5kKS5yZWRNdWwodGhpcy5jMikucmVkU3ViKHRoaXMuYSksYT1uLnJlZE11bChvLnJlZEludm0oKSk7aWYoMD09PWEuY21wKHRoaXMuemVybykpe2lmKHQpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7cmV0dXJuIHRoaXMucG9pbnQodGhpcy56ZXJvLGUpfXZhciBzPWEucmVkU3FydCgpO2lmKDAhPT1zLnJlZFNxcigpLnJlZFN1YihhKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTtyZXR1cm4gcy5mcm9tUmVkKCkuaXNPZGQoKSE9PXQmJihzPXMucmVkTmVnKCkpLHRoaXMucG9pbnQocyxlKX0sdS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oZSl7aWYoZS5pc0luZmluaXR5KCkpcmV0dXJuITA7ZS5ub3JtYWxpemUoKTt2YXIgdD1lLngucmVkU3FyKCkscj1lLnkucmVkU3FyKCksbj10LnJlZE11bCh0aGlzLmEpLnJlZEFkZChyKSxpPXRoaXMuYzIucmVkTXVsKHRoaXMub25lLnJlZEFkZCh0aGlzLmQucmVkTXVsKHQpLnJlZE11bChyKSkpO3JldHVybiAwPT09bi5jbXAoaSl9LG8oYyxhLkJhc2VQb2ludCksdS5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbihlKXtyZXR1cm4gYy5mcm9tSlNPTih0aGlzLGUpfSx1LnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihlLHQscixuKXtyZXR1cm4gbmV3IGModGhpcyxlLHQscixuKX0sYy5mcm9tSlNPTj1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgYyhlLHRbMF0sdFsxXSx0WzJdKX0sYy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiA=",
"2020.03.29 15:15": "base64:cGUudXBkYXRlPWZ1bmN0aW9uKGUscil7cmV0dXJuInN0cmluZyI9PT10eXBlb2YgZSYmKGU9bmV3IHQoZSxyKSksdGhpcy5faGFzaC51cGRhdGUoZSksdGhpc30sZi5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKGUscixuKXsic3RyaW5nIj09PXR5cGVvZiByJiYocj1uZXcgdChyLG4pKSx0aGlzLmVuZCgpO3ZhciBpPXRoaXMuX2hhc2guZGlnZXN0KCk7cmV0dXJuIHMocixpLGUsdGhpcy5fc2lnblR5cGUsdGhpcy5fdGFnKX0sZS5leHBvcnRzPXtTaWduOmwsVmVyaWZ5OmgsY3JlYXRlU2lnbjpsLGNyZWF0ZVZlcmlmeTpofX0pLmNhbGwodGhpcyxyKDE4KS5CdWZmZXIpfSxmdW5jdGlvbihlLHQscil7KGZ1bmN0aW9uKHQpe3ZhciBuPXIoMzE2KSxpPXIoMjE3KSxvPXIoMjE4KS5lYyxhPXIoMjQpLHM9cigxNjEpLHU9cigzMzkpO2Z1bmN0aW9uIGMoZSxyLGksbyl7aWYoKGU9bmV3IHQoZS50b0FycmF5KCkpKS5sZW5ndGg8ci5ieXRlTGVuZ3RoKCkpe3ZhciBhPW5ldyB0KHIuYnl0ZUxlbmd0aCgpLWUubGVuZ3RoKTthLmZpbGwoMCksZT10LmNvbmNhdChbYSxlXSl9dmFyIHM9aS5sZW5ndGgsdT1mdW5jdGlvbihlLHIpe2U9KGU9ZihlLHIpKS5tb2Qocik7dmFyIG49bmV3IHQoZS50b0FycmF5KCkpO2lmKG4ubGVuZ3RoPHIuYnl0ZUxlbmd0aCgpKXt2YXIgaT1uZXcgdChyLmJ5dGVMZW5ndGgoKS1uLmxlbmd0aCk7aS5maWxsKDApLG49dC5jb25jYXQoW2ksbl0pfXJldHVybiBufShpLHIpLGM9bmV3IHQocyk7Yy5maWxsKDEpO3ZhciBsPW5ldyB0KHMpO3JldHVybiBsLmZpbGwoMCksbD1uKG8sbCkudXBkYXRlKGMpLnVwZGF0ZShuZXcgdChbMF0pKS51cGRhdGUoZSkudXBkYXRlKHUpLmRpZ2VzdCgpLGM9bihvLGwpLnVwZGF0ZShjKS5kaWdlc3QoKSx7azpsPW4obyxsKS51cGRhdGUoYykudXBkYXRlKG5ldyB0KFsxXSkpLnVwZGF0ZShlKS51cGRhdGUodSkuZGlnZXN0KCksdjpjPW4obyxsKS51cGRhdGUoYykuZGlnZXN0KCl9fWZ1bmN0aW9uIGYoZSx0KXt2YXIgcj1uZXcgYShlKSxuPShlLmxlbmd0aDw8MyktdC5iaXRMZW5ndGgoKTtyZXR1cm4gbj4wJiZyLmlzaHJuKG4pLHJ9ZnVuY3Rpb24gbChlLHIsaSl7dmFyIG8sYTtkb3tmb3Iobz1uZXcgdCgwKTs4Km8ubGVuZ3RoPGUuYml0TGVuZ3RoKCk7KXIudj1uKGksci5rKS51cGRhdGUoci52KS5kaWdlc3QoKSxvPXQuY29uY2F0KFtvLHIudl0pO2E9ZihvLGUpLHIuaz1uKGksci5rKS51cGRhdGUoci52KS51cGRhdGUobmV3IHQoWzBdKSkuZGlnZXN0KCksci52PW4oaSxyLmspLnVwZGF0ZShyLnYpLmRpZ2VzdCgpfXdoaWxlKC0xIT09YS5jbXAoZSkpO3JldHVybiBhfWZ1bmN0aW9uIGgoZSx0LHIsbil7cmV0dXJuIGUudG9SZWQoYS5tb250KHIpKS5yZWRQb3codCkuZnJvbVJlZCgpLm1vZChuKX1lLmV4cG9ydHM9ZnVuY3Rpb24oZSxyLG4scCxkKXt2YXIgeT1zKHIpO2lmKHkuY3VydmUpe2lmKCJlY2RzYSIhPT1wJiYiZWNkc2EvcnNhIiE9PXApdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uKGUscil7dmFyIG49dVtyLmN1cnZlLmpvaW4oIi4iKV07aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGN1cnZlICIrci5jdXJ2ZS5qb2luKCIuIikpO3ZhciBpPW5ldyBvKG4pLmtleUZyb21Qcml2YXRlKHIucHJpdmF0ZUtleSkuc2lnbihlKTtyZXR1cm4gbmV3IHQoaS50b0RFUigpKX0oZSx5KX1pZigiZHNhIj09PXkudHlwZSl7aWYoImRzYSIhPT1wKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpLG89ci5wYXJhbXMucHJpdl9rZXkscz1yLnBhcmFtcy5wLHU9ci5wYXJhbXMucSxwPXIucGFyYW1zLmcsZD1uZXcgYSgwKSx5PWYoZSx1KS5tb2QodSksZz0hMSx2PWMobyx1LGUsbik7ITE9PT1nOylpPWwodSx2LG4pLGQ9aChwLGkscyx1KSwwPT09KGc9aS5pbnZtKHUpLmltdWwoeS5hZGQoby5tdWwoZCkpKS5tb2QodSkpLmNtcG4oMCkmJihnPSExLGQ9bmV3IGEoMCkpO3JldHVybiBmdW5jdGlvbihlLHIpe2U9ZS50b0FycmF5KCkscj1yLnRvQXJyYXkoKSwxMjgmZVswXSYmKGU9WzBdLmNvbmNhdChlKSksMTI4JnJbMF0mJihyPVswXS5jb25jYXQocikpO3ZhciBuPVs0OCxlLmxlbmd0aCtyLmxlbmd0aCs0LDIsZS5sZW5ndGhdO3JldHVybiBuPW4uY29uY2F0KGUsWzIsci5sZW5ndGhdLHIpLG5ldyB0KG4pfShkLGcpfShlLHksbil9aWYoInJzYSIhPT1wJiYiZWNkc2EvcnNhIiE9PXApdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlIik7ZT10LmNvbmNhdChbZCxlXSk7Zm9yKHZhciBnPXkubW9kdWx1cy5ieXRlTGVuZ3RoKCksdj1bMCwxXTtlLmxlbmd0aCt2Lmxlbmd0aCsxPGc7KXYucHVzaCgyNTUpO3YucHVzaCgwKTtmb3IodmFyIG09LTE7KyttPGUubGVuZ3RoOyl2LnB1c2goZVttXSk7cmV0dXJuIGkodix5KX0sZS5leHBvcnRzLmdldEtleT1jLGUuZXhwb3J0cy5tYWtlS2V5PWx9KS5jYWxsKHRoaXMscigxOCkuQnVmZmVyKX0sZnVuY3Rpb24oZSl7ZS5leHBvcnRzPXtfYXJnczpbWyJlbGxpcHRpY0A2LjUuMCIsIkQ6XFxEb3dubG9hZHNcXFJpZGVSaXNrXFxSaWRlUmlzayJdXSxfZnJvbToiZWxsaXB0aWNANi41LjAiLF9pZDoiZWxsaXB0aWNANi41LjAiLF9pbkJ1bmRsZTohMSxfaW50ZWdyaXR5OiJzaGE1MTItZUZPSlRNeUNZYjd4dEUvY2FKNkpKdStiaGk2N1dDWU5ia0dTa251MjBwbU04S2UvYnFPZmRuWld4eW9HTjI2SmdmeFRiWHJzQ2tFdzRLaGVDVC9LR2c9PSIsX2xvY2F0aW9uOiIvZWxsaXB0aWMiLF9waGFudG9tQ2hpbGRyZW46e30sX3JlcXVlc3RlZDp7dHlwZToidmVyc2lvbiIscmVnaXN0cnk6ITAscmF3OiJlbGxpcHRpY0A2LjUuMCIsbmFtZToiZWxsaXB0aWMiLGVzY2FwZWROYW1lOiJlbGxpcHRpYyIscmF3U3BlYzoiNi41LjAiLHNhdmVTcGVjOm51bGwsZmV0Y2hTcGVjOiI2LjUuMCJ9LF9yZXF1aXJlZEJ5OlsiL2Jyb3dzZXJpZnktc2lnbiIsIi9jcmVhdGUtZWNkaCJdLF9yZXNvbHZlZDoiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZWxsaXB0aWMvLS9lbGxpcHRpYy02LjUuMC50Z3oiLF9zcGVjOiI2LjUuMCIsX3doZXJlOiJEOlxcRG93bmxvYWRzXFxSaWRlUmlza1xcUmlkZVJpc2siLGF1dGhvcjp7bmFtZToiRmVkb3IgSW5kdXRueSIsZW1haWw6ImZlZG9yQGluZHV0bnkuY29tIn0sYnVnczp7dXJsOiJodHRwczovL2dpdGh1Yi5jb20vaW5kdXRueS9lbGxpcHRpYy9pc3N1ZXMifSxkZXBlbmRlbmNpZXM6eyJibi5qcyI6Il40LjQuMCIsYnJvcmFuZDoiXjEuMC4xIiwiaGFzaC5qcyI6Il4xLjAuMCIsImhtYWMtZHJiZyI6Il4xLjAuMCIsaW5oZXJpdHM6Il4yLjAuMSIsIm1pbmltYWxpc3RpYy1hc3NlcnQiOiJeMS4wLjAiLCJtaW5pbWFsaXN0aWMtY3J5cHRvLXV0aWxzIjoiXjEuMC4wIn0sZGVzY3JpcHRpb246IkVDIGNyeXB0b2dyYXBoeSIsZGV2RGVwZW5kZW5jaWVzOnticmZzOiJeMS40LjMiLGNvdmVyYWxsczoiXjIuMTEuMyIsZ3J1bnQ6Il4wLjQuNSIsImdydW50LWJyb3dzZXJpZnkiOiJeNS4wLjAiLCJncnVudC1jbGkiOiJeMS4yLjAiLCJncnVudC1jb250cmliLWNvbm5lY3QiOiJeMS4wLjAiLCJncnVudC1jb250cmliLWNvcHkiOiJeMS4wLjAiLCJncnVudC1jb250cmliLXVnbGlmeSI6Il4xLjAuMSIsImdydW50LW1vY2hhLWlzdGFuYnVsIjoiXjMuMC4xIiwiZ3J1bnQtc2F1Y2VsYWJzIjoiXjguNi4yIixpc3RhbmJ1bDoiXjAuNC4yIixqc2NzOiJeMi45LjAiLGpzaGludDoiXjIuNi4wIixtb2NoYToiXjIuMS4wIn0sZmlsZXM6WyJsaWIiXSxob21lcGFnZToiaHR0cHM6Ly9naXRodWIuY29tL2luZHV0bnkvZWxsaXB0aWMiLGtleXdvcmRzOlsiRUMiLCJFbGxpcHRpYyIsImN1cnZlIiwiQ3J5cHRvZ3JhcGh5Il0sbGljZW5zZToiTUlUIixtYWluOiJsaWIvZWxsaXB0aWMuanMiLG5hbWU6ImVsbGlwdGljIixyZXBvc2l0b3J5Ont0eXBlOiJnaXQiLHVybDoiZ2l0K3NzaDovL2dpdEBnaXRodWIuY29tL2luZHV0bnkvZWxsaXB0aWMuZ2l0In0sc2NyaXB0czp7anNjczoianNjcyBiZW5jaG1hcmtzLyouanMgbGliLyouanMgbGliLyoqLyouanMgbGliLyoqLyoqLyouanMgdGVzdC9pbmRleC5qcyIsanNoaW50OiJqc2NzIGJlbmNobWFya3MvKi5qcyBsaWIvKi5qcyBsaWIvKiovKi5qcyBsaWIvKiovKiovKi5qcyB0ZXN0L2luZGV4LmpzIixsaW50OiJucG0gcnVuIGpzY3MgJiYgbnBtIHJ1biBqc2hpbnQiLHRlc3Q6Im5wbSBydW4gbGludCAmJiBucG0gcnVuIHVuaXQiLHVuaXQ6ImlzdGFuYnVsIHRlc3QgX21vY2hhIC0tcmVwb3J0ZXI9c3BlYyB0ZXN0L2luZGV4LmpzIix2ZXJzaW9uOiJncnVudCBkaXN0ICYmIGdpdCBhZGQgZGlzdC8ifSx2ZXJzaW9uOiI2LjUuMCJ9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNDgpLGk9cigyNCksbz1yKDcpLGE9cigxNjApLHM9bi5hc3NlcnQ7ZnVuY3Rpb24gdShlKXthLmNhbGwodGhpcywic2hvcnQiLGUpLHRoaXMuYT1uZXcgaShlLmEsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmI9bmV3IGkoZS5iLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy50aW52PXRoaXMudHdvLnJlZEludm0oKSx0aGlzLnplcm9BPTA9PT10aGlzLmEuZnJvbVJlZCgpLmNtcG4oMCksdGhpcy50aHJlZUE9MD09PXRoaXMuYS5mcm9tUmVkKCkuc3ViKHRoaXMucCkuY21wbigtMyksdGhpcy5lbmRvPXRoaXMuX2dldEVuZG9tb3JwaGlzbShlKSx0aGlzLl9lbmRvV25hZlQxPW5ldyBBcnJheSg0KSx0aGlzLl9lbmRvV25hZlQyPW5ldyBBcnJheSg0KX1mdW5jdGlvbiBjKGUsdCxyLG4pe2EuQmFzZVBvaW50LmNhbGwodGhpcyxlLCJhZmZpbmUiKSxudWxsPT09dCYmbnVsbD09PXI/KHRoaXMueD1udWxsLHRoaXMueT1udWxsLHRoaXMuaW5mPSEwKToodGhpcy54PW5ldyBpKHQsMTYpLHRoaXMueT1uZXcgaShyLDE2KSxuJiYodGhpcy54LmZvcmNlUmVkKHRoaXMuY3VydmUucmVkKSx0aGlzLnkuZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy5pbmY9ITEpfWZ1bmN0aW9uIGYoZSx0LHIsbil7YS5CYXNlUG9pbnQuY2FsbCh0aGlzLGUsImphY29iaWFuIiksbnVsbD09PXQmJm51bGw9PT1yJiZudWxsPT09bj8odGhpcy54PXRoaXMuY3VydmUub25lLHRoaXMueT10aGlzLmN1cnZlLm9uZSx0aGlzLno9bmV3IGkoMCkpOih0aGlzLng9bmV3IGkodCwxNiksdGhpcy55PW5ldyBpKHIsMTYpLHRoaXMuej1uZXcgaShuLDE2KSksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56T25lPXRoaXMuej09PXRoaXMuY3VydmUub25lfW8odSxhKSxlLmV4cG9ydHM9dSx1LnByb3RvdHlwZS5fZ2V0RW5kb21vcnBoaXNtPWZ1bmN0aW9uKGUpe2lmKHRoaXMuemVyb0EmJnRoaXMuZyYmdGhpcy5uJiYxPT09dGhpcy5wLm1vZG4oMykpe3ZhciB0LHI7aWYoZS5iZXRhKXQ9bmV3IGkoZS5iZXRhLDE2KS50b1JlZCh0aGlzLnJlZCk7ZWxzZXt2YXIgbj10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5wKTt0PSh0PW5bMF0uY21wKG5bMV0pPDA/blswXTpuWzFdKS50b1JlZCh0aGlzLnJlZCl9aWYoZS5sYW1iZGEpcj1uZXcgaShlLmxhbWJkYSwxNik7ZWxzZXt2YXIgbz10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5uKTswPT09dGhpcy5nLm11bChvWzBdKS54LmNtcCh0aGlzLmcueC5yZWRNdWwodCkpP3I9b1swXToocj1vWzFdLHMoMD09PXRoaXMuZy5tdWwocikueC5jbXAodGhpcy5nLngucmVkTXVsKHQpKSkpfXJldHVybntiZXRhOnQsbGFtYmRhOnIsYmFzaXM6ZS5iYXNpcz9lLmJhc2lzLm1hcChmdW5jdGlvbihlKXtyZXR1cm57YTpuZXcgaShlLmEsMTYpLGI6bmV3IGkoZS5iLDE2KX19KTp0aGlzLl9nZXRFbmRvQmFzaXMocil9fX0sdS5wcm90b3R5cGUuX2dldEVuZG9Sb290cz1mdW5jdGlvbihlKXt2YXIgdD1lPT09dGhpcy5wP3RoaXMucmVkOmkubW9udChlKSxyPW5ldyBpKDIpLnRvUmVkKHQpLnJlZEludm0oKSxuPXIucmVkTmVnKCksbz1uZXcgaSgzKS50b1JlZCh0KS5yZWROZWcoKS5yZWRTcXJ0KCkucmVkTXVsKHIpO3JldHVybltuLnJlZEFkZChvKS5mcm9tUmVkKCksbi5yZWRTdWIobykuZnJvbVJlZCgpXX0sdS5wcm90b3R5cGUuX2dldEVuZG9CYXNpcz1mdW5jdGlvbihlKXtmb3IodmFyIHQscixuLG8sYSxzLHUsYyxmLGw9dGhpcy5uLnVzaHJuKE1hdGguZmxvb3IodGhpcy5uLmJpdExlbmd0aCgpLzIpKSxoPWUscD10aGlzLm4uY2xvbmUoKSxkPW5ldyBpKDEpLHk9bmV3IGkoMCksZz1uZXcgaSgwKSx2PW5ldyBpKDEpLG09MDswIT09aC5jbXBuKDApOyl7dmFyIGI9cC5kaXYoaCk7Yz1wLnN1YihiLm11bChoKSksZj1nLnN1YihiLm11bChkKSk7dmFyIF89di5zdWIoYi5tdWwoeSkpO2lmKCFuJiZjLmNtcChsKTwwKXQ9dS5uZWcoKSxyPWQsbj1jLm5lZygpLG89ZjtlbHNlIGlmKG4mJjI9PT0rK20pYnJlYWs7dT1jLHA9aCxoPWMsZz1kLGQ9Zix2PXkseT1ffWE9Yy5uZWcoKSxzPWY7dmFyIFM9bi5zcXIoKS5hZGQoby5zcXIoKSk7cmV0dXJuIGEuc3FyKCkuYWRkKHMuc3FyKCkpLmNtcChTKT49MCYmKGE9dCxzPXIpLG4ubmVnYXRpdmUmJihuPW4ubmVnKCksbz1vLm5lZygpKSxhLm5lZ2F0aXZlJiYoYT1hLm5lZygpLHM9cy5uZWcoKSksW3thOm4sYjpvfSx7YTphLGI6c31dfSx1LnByb3RvdHlwZS5fZW5kb1NwbGl0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZW5kby5iYXNpcyxyPXRbMF0sbj10WzFdLGk9bi5iLm11bChlKS5kaXZSb3VuZCh0aGlzLm4pLG89ci5iLm5lZygpLm11bChlKS5kaXZSb3VuZCh0aGlzLm4pLGE9aS5tdWwoci5hKSxzPW8ubXVsKG4uYSksdT1pLm11bChyLmIpLGM9by5tdWwobi5iKTtyZXR1cm57azE6ZS5zdWIoYSkuc3ViKHMpLGsyOnUuYWRkKGMpLm5lZygpfX0sdS5wcm90b3R5cGUucG9pbnRGcm9tWD1mdW5jdGlvbihlLHQpeyhlPW5ldyBpKGUsMTYpKS5yZWR8fChlPWUudG9SZWQodGhpcy5yZWQpKTt2YXIgcj1lLnJlZFNxcigpLnJlZE11bChlKS5yZWRJQWRkKGUucmVkTXVsKHRoaXMuYSkpLnJlZElBZGQodGhpcy5iKSxuPXIucmVkU3FydCgpO2lmKDAhPT1uLnJlZFNxcigpLnJlZFN1YihyKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTt2YXIgbz1uLmZyb21SZWQoKS5pc09kZCgpO3JldHVybih0JiYhb3x8IXQmJm8pJiYobj1uLnJlZE5lZygpKSx0aGlzLnBvaW50KGUsbil9LHUucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKGUpe2lmKGUuaW5mKXJldHVybiEwO3ZhciB0PWUueCxyPWUueSxuPXRoaXMuYS5yZWRNdWwodCksaT10LnJlZFNxcigpLnJlZE11bCh0KS5yZWRJQWRkKG4pLnJlZElBZGQodGhpcy5iKTtyZXR1cm4gMD09PXIucmVkU3FyKCkucmVkSVN1YihpKS5jbXBuKDApfSx1LnByb3RvdHlwZS5fZW5kb1duYWZNdWxBZGQ9ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgbj10aGlzLl9lbmRvV25hZlQxLGk9dGhpcy5fZW5kb1duYWZUMixvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBhPXRoaXMuX2VuZG9TcGxpdCh0W29dKSxzPWVbb10sdT1zLl9nZXRCZXRhKCk7YS5rMS5uZWdhdGl2ZSYmKGEuazEuaW5lZygpLHM9cy5uZWcoITApKSxhLmsyLm5lZ2F0aXZlJiYoYS5rMi5pbmVnKCksdT11Lm5lZyghMCkpLG5bMipvXT1zLG5bMipvKzFdPXUsaVsyKm9dPWEuazEsaVsyKm8rMV09YS5rMn1mb3IodmFyIGM9dGhpcy5fd25hZk11bEFkZCgxLG4saSwyKm8sciksZj0wO2Y8MipvO2YrKyluW2ZdPW51bGwsaVtmXT1udWxsO3JldHVybiBjfSxvKGMsYS5CYXNlUG9pbnQpLHUucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gbmV3IGModGhpcyxlLHQscil9LHUucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYy5mcm9tSlNPTih0aGlzLGUsdCl9LGMucHJvdG90eXBlLl9nZXRCZXRhPWZ1bmN0aW9uKCl7aWYodGhpcy5jdXJ2ZS5lbmRvKXt2YXIgZT10aGlzLnByZWNvbXB1dGVkO2lmKGUmJmUuYmV0YSlyZXR1cm4gZS5iZXRhO3ZhciB0PXRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE11bCh0aGlzLmN1cnZlLmVuZG8uYmV0YSksdGhpcy55KTtpZihlKXt2YXIgcj10aGlzLmN1cnZlLG49ZnVuY3Rpb24oZSl7cmV0dXJuIHIucG9pbnQoZS54LnJlZE11bChyLmVuZG8uYmV0YSksZS55KX07ZS5iZXRhPXQsdC5wcmVjb21wdXRlZD17YmV0YTpudWxsLG5hZjplLm5hZiYme3duZDplLm5hZi53bmQscG9pbnRzOmUubmFmLnBvaW50cy5tYXAobil9LGRvdWJsZXM6ZS5kb3VibGVzJiZ7c3RlcDplLmRvdWJsZXMuc3RlcCxwb2ludHM6ZS5kb3VibGVzLnBvaW50cy5tYXAobil9fX1yZXR1cm4gdH19LGMucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByZWNvbXB1dGVkP1t0aGlzLngsdGhpcy55LHRoaXMucHJlY29tcHV0ZWQmJntkb3VibGVzOnRoaXMucHJlY29tcHV0ZWQuZG91YmxlcyYme3N0ZXA6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnN0ZXAscG9pbnRzOnRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcy5wb2ludHMuc2xpY2UoMSl9LG5hZjp0aGlzLnByZWNvbXB1dGVkLm5hZiYme3duZDp0aGlzLnByZWNvbXB1dGVkLm5hZi53bmQscG9pbnRzOnRoaXMucHJlY29tcHV0ZWQubmFmLnBvaW50cy5zbGljZSgxKX19XTpbdGhpcy54LHRoaXMueV19LGMuZnJvbUpTT049ZnVuY3Rpb24oZSx0LHIpeyJzdHJpbmciPT09dHlwZW9mIHQmJih0PUpTT04ucGFyc2UodCkpO3ZhciBuPWUucG9pbnQodFswXSx0WzFdLHIpO2lmKCF0WzJdKXJldHVybiBuO2Z1bmN0aW9uIGkodCl7cmV0dXJuIGUucG9pbnQodFswXSx0WzFdLHIpfXZhciBvPXRbMl07cmV0dXJuIG4ucHJlY29tcHV0ZWQ9e2JldGE6bnVsbCxkb3VibGVzOm8uZG91YmxlcyYme3N0ZXA6by5kb3VibGVzLnN0ZXAscG9pbnRzOltuXS5jb25jYXQoby5kb3VibGVzLnBvaW50cy5tYXAoaSkpfSxuYWY6by5uYWYmJnt3bmQ6by5uYWYud25kLHBvaW50czpbbl0uY29uY2F0KG8ubmFmLnBvaW50cy5tYXAoaSkpfX0sbn0sYy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxjLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5mfSxjLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7aWYodGhpcy5pbmYpcmV0dXJuIGU7aWYoZS5pbmYpcmV0dXJuIHRoaXM7aWYodGhpcy5lcShlKSlyZXR1cm4gdGhpcy5kYmwoKTtpZih0aGlzLm5lZygpLmVxKGUpKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7aWYoMD09PXRoaXMueC5jbXAoZS54KSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciB0PXRoaXMueS5yZWRTdWIoZS55KTswIT09dC5jbXBuKDApJiYodD10LnJlZE11bCh0aGlzLngucmVkU3ViKGUueCkucmVkSW52bSgpKSk7dmFyIHI9dC5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueCkucmVkSVN1YihlLngpLG49dC5yZWRNdWwodGhpcy54LnJlZFN1YihyKSkucmVkSVN1Yih0aGlzLnkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHIsbil9LGMucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe2lmKHRoaXMuaW5mKXJldHVybiB0aGlzO3ZhciBlPXRoaXMueS5yZWRBZGQodGhpcy55KTtpZigwPT09ZS5jbXBuKDApKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIHQ9dGhpcy5jdXJ2ZS5hLHI9dGhpcy54LnJlZFNxcigpLG49ZS5yZWRJbnZtKCksaT1yLnJlZEFkZChyKS5yZWRJQWRkKHIpLnJlZElBZGQodCkucmVkTXVsKG4pLG89aS5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueC5yZWRBZGQodGhpcy54KSksYT1pLnJlZE11bCh0aGlzLngucmVkU3ViKG8pKS5yZWRJU3ViKHRoaXMueSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQobyxhKX0sYy5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnguZnJvbVJlZCgpfSxjLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueS5mcm9tUmVkKCl9LGMucHJvdG90eXBlLm11bD1mdW5jdGlvbihlKXtyZXR1cm4gZT1uZXcgaShlLDE2KSx0aGlzLl9oYXNEb3VibGVzKGUpP3RoaXMuY3VydmUuX2ZpeGVkTmFmTXVsKHRoaXMsZSk6dGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKFt0aGlzXSxbZV0pOnRoaXMuY3VydmUuX3duYWZNdWwodGhpcyxlKX0sYy5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1bdGhpcyx0XSxpPVtlLHJdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQobixpKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsbixpLDIpfSxjLnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1bdGhpcyx0XSxpPVtlLHJdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQobixpLCEwKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsbixpLDIsITApfSxjLnByb3RvdHlwZS5lcT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV8fHRoaXMuaW5mPT09ZS5pbmYmJih0aGlzLmluZnx8MD09PXRoaXMueC5jbXAoZS54KSYmMD09PXRoaXMueS5jbXAoZS55KSl9LGMucHJvdG90eXBlLm5lZz1mdW5jdGlvbihlKXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgdD10aGlzLmN1cnZlLnBvaW50KHRoaXMueCx0aGlzLnkucmVkTmVnKCkpO2lmKGUmJnRoaXMucHJlY29tcHV0ZWQpe3ZhciByPXRoaXMucHJlY29tcHV0ZWQsbj1mdW5jdGlvbihlKXtyZXR1cm4gZS5uZWcoKX07dC5wcmVjb21wdXRlZD17bmFmOnIubmFmJiZ7d25kOnIubmFmLnduZCxwb2ludHM6ci5uYWYucG9pbnRzLm1hcChuKX0sZG91YmxlczpyLmRvdWJsZXMmJntzdGVwOnIuZG91Ymxlcy5zdGVwLHBvaW50czpyLmRvdWJsZXMucG9pbnRzLm1hcChuKX19fXJldHVybiB0fSxjLnByb3RvdHlwZS50b0o9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmY/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuY3VydmUuanBvaW50KHRoaXMueCx0aGlzLnksdGhpcy5jdXJ2ZS5vbmUpfSxvKGYsYS5CYXNlUG9pbnQpLHUucHJvdG90eXBlLmpwb2ludD1mdW5jdGlvbihlLHQscil7cmV0dXJuIG5ldyBmKHRoaXMsZSx0LHIpfSxmLnByb3RvdHlwZS50b1A9ZnVuY3Rpb24oKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBlPXRoaXMuei5yZWRJbnZtKCksdD1lLnJlZFNxcigpLHI9dGhpcy54LnJlZE11bCh0KSxuPXRoaXMueS5yZWRNdWwodCkucmVkTXVsKGUpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHIsbil9LGYucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsdGhpcy55LnJlZE5lZygpLHRoaXMueil9LGYucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gZTtpZihlLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpczt2YXIgdD1lLnoucmVkU3FyKCkscj10aGlzLnoucmVkU3FyKCksbj10aGlzLngucmVkTXVsKHQpLGk9ZS54LnJlZE11bChyKSxvPXRoaXMueS5yZWRNdWwodC5yZWRNdWwoZS56KSksYT1lLnkucmVkTXVsKHIucmVkTXVsKHRoaXMueikpLHM9bi5yZWRTdWIoaSksdT1vLnJlZFN1YihhKTtpZigwPT09cy5jbXBuKDApKXJldHVybiAwIT09dS5jbXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciBjPXMucmVkU3FyKCksZj1jLnJlZE11bChzKSxsPW4ucmVkTXVsKGMpLGg9dS5yZWRTcXIoKS5yZWRJQWRkKGYpLnJlZElTdWIobCkucmVkSVN1YihsKSxwPXUucmVkTXVsKGwucmVkSVN1YihoKSkucmVkSVN1YihvLnJlZE11bChmKSksZD10aGlzLnoucmVkTXVsKGUueikucmVkTXVsKHMpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChoLHAsZCl9LGYucHJvdG90eXBlLm1peGVkQWRkPWZ1bmN0aW9uKGUpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiBlLnRvSigpO2lmKGUuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO3ZhciB0PXRoaXMuei5yZWRTcXIoKSxyPXRoaXMueCxuPWUueC5yZWRNdWwodCksaT10aGlzLnksbz1lLnkucmVkTXVsKHQpLnJlZE11bCh0aGlzLnopLGE9ci5yZWRTdWIobikscz1pLnJlZFN1YihvKTtpZigwPT09YS5jbXBuKDApKXJldHVybiAwIT09cy5jbXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciB1PWEucmVkU3FyKCksYz11LnJlZE11bChhKSxmPXIucmVkTXVsKHUpLGw9cy5yZWRTcXIoKS5yZWRJQWRkKGMpLnJlZElTdWIoZikucmVkSVN1YihmKSxoPXMucmVkTXVsKGYucmVkSVN1YihsKSkucmVkSVN1YihpLnJlZE11bChjKSkscD10aGlzLnoucmVkTXVsKGEpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChsLGgscCl9LGYucHJvdG90eXBlLmRibHA9ZnVuY3Rpb24oZSl7aWYoMD09PWUpcmV0dXJuIHRoaXM7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7aWYoIWUpcmV0dXJuIHRoaXMuZGJsKCk7aWYodGhpcy5jdXJ2ZS56ZXJvQXx8dGhpcy5jdXJ2ZS50aHJlZUEpe2Zvcih2YXIgdD10aGlzLHI9MDtyPGU7cisrKXQ9dC5kYmwoKTtyZXR1cm4gdH12YXIgbj10aGlzLmN1cnZlLmEsaT10aGlzLmN1cnZlLnRpbnYsbz10aGlzLngsYT10aGlzLnkscz10aGlzLnosdT1zLnJlZFNxcigpLnJlZFNxcigpLGM9YS5yZWRBZGQoYSk7Zm9yKHI9MDtyPGU7cisrKXt2YXIgZj1vLnJlZFNxcigpLGw9Yy5yZWRTcXIoKSxoPWwucmVkU3FyKCkscD1mLnJlZEFkZChmKS5yZWRJQWRkKGYpLnJlZElBZGQobi5yZWRNdWwodSkpLGQ9by5yZWRNdWwobCkseT1wLnJlZFNxcigpLnJlZElTdWIoZC5yZWRBZGQoZCkpLGc9ZC5yZWRJU3ViKHkpLHY9cC5yZWRNdWwoZyk7dj12LnJlZElBZGQodikucmVkSVN1YihoKTt2YXIgbT1jLnJlZE11bChzKTtyKzE8ZSYmKHU9dS5yZWRNdWwoaCkpLG89eSxzPW0sYz12fXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChvLGMucmVkTXVsKGkpLHMpfSxmLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLnplcm9BP3RoaXMuX3plcm9EYmwoKTp0aGlzLmN1cnZlLnRocmVlQT90aGlzLl90aHJlZURibCgpOnRoaXMuX2RibCgpfSxmLnByb3RvdHlwZS5femVyb0RibD1mdW5jdGlvbigpe3ZhciBlLHQscjtpZih0aGlzLnpPbmUpe3ZhciBuPXRoaXMueC5yZWRTcXIoKSxpPXRoaXMueS5yZWRTcXIoKSxvPWkucmVkU3FyKCksYT10aGlzLngucmVkQWRkKGkpLnJlZFNxcigpLnJlZElTdWIobikucmVkSVN1YihvKTthPWEucmVkSUFkZChhKTt2YXIgcz1uLnJlZEFkZChuKS5yZWRJQWRkKG4pLHU9cy5yZWRTcXIoKS5yZWRJU3ViKGEpLnJlZElTdWIoYSksYz1vLnJlZElBZGQobyk7Yz0oYz1jLnJlZElBZGQoYykpLnJlZElBZGQoYyksZT11LHQ9cy5yZWRNdWwoYS5yZWRJU3ViKHUpKS5yZWRJU3ViKGMpLHI9dGhpcy55LnJlZEFkZCh0aGlzLnkpfWVsc2V7dmFyIGY9dGhpcy54LnJlZFNxcigpLGw9dGhpcy55LnJlZFNxcigpLGg9bC5yZWRTcXIoKSxwPXRoaXMueC5yZWRBZGQobCkucmVkU3FyKCkucmVkSVN1YihmKS5yZWRJU3ViKGgpO3A9cC5yZWRJQWRkKHApO3ZhciBkPWYucmVkQWRkKGYpLnJlZElBZGQoZikseT1kLnJlZFNxcigpLGc9aC5yZWRJQWRkKGgpO2c9KGc9Zy5yZWRJQWRkKGcpKS5yZWRJQWRkKGcpLGU9eS5yZWRJU3ViKHApLnJlZElTdWIocCksdD1kLnJlZE11bChwLnJlZElTdWIoZSkpLnJlZElTdWIoZykscj0ocj10aGlzLnkucmVkTXVsKHRoaXMueikpLnJlZElBZGQocil9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGUsdCxyKX0sZi5wcm90b3R5cGUuX3RocmVlRGJsPWZ1bmN0aW9uKCl7dmFyIGUsdCxyO2lmKHRoaXMuek9uZSl7dmFyIG49dGhpcy54LnJlZFNxcigpLGk9dGhpcy55LnJlZFNxcigpLG89aS5yZWRTcXIoKSxhPXRoaXMueC5yZWRBZGQoaSkucmVkU3FyKCkucmVkSVN1YihuKS5yZWRJU3ViKG8pO2E9YS5yZWRJQWRkKGEpO3ZhciBzPW4ucmVkQWRkKG4pLnJlZElBZGQobikucmVkSUFkZCh0aGlzLmN1cnZlLmEpLHU9cy5yZWRTcXIoKS5yZWRJU3ViKGEpLnJlZElTdWIoYSk7ZT11O3ZhciBjPW8ucmVkSUFkZChvKTtjPShjPWMucmVkSUFkZChjKSkucmVkSUFkZChjKSx0PXMucmVkTXVsKGEucmVkSVN1Yih1KSkucmVkSVN1YihjKSxyPXRoaXMueS5yZWRBZGQodGhpcy55KX1lbHNle3ZhciBmPXRoaXMuei5yZWRTcXIoKSxsPXRoaXMueS5yZWRTcXIoKSxoPXRoaXMueC5yZWRNdWwobCkscD10aGlzLngucmVkU3ViKGYpLnJlZE11bCh0aGlzLngucmVkQWRkKGYpKTtwPXAucmVkQWRkKHApLnJlZElBZGQocCk7dmFyIGQ9aC5yZWRJQWRkKGgpLHk9KGQ9ZC5yZWRJQWRkKGQpKS5yZWRBZGQoZCk7ZT1wLnJlZFNxcigpLnJlZElTdWIoeSkscj10aGlzLnkucmVkQWRkKHRoaXMueikucmVkU3FyKCkucmVkSVN1YihsKS5yZWRJU3ViKGYpO3ZhciBnPWwucmVkU3FyKCk7Zz0oZz0oZz1nLnJlZElBZGQoZykpLnJlZElBZGQoZykpLnJlZElBZGQoZyksdD1wLnJlZE11bChkLnJlZElTdWIoZSkpLnJlZElTdWIoZyl9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGUsdCxyKX0sZi5wcm90b3R5cGUuX2RibD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3VydmUuYSx0PXRoaXMueCxyPXRoaXMueSxuPXRoaXMueixpPW4ucmVkU3FyKCkucmVkU3FyKCksbz10LnJlZFNxcigpLGE9ci5yZWRTcXIoKSxzPW8ucmVkQWRkKG8pLnJlZElBZGQobykucmVkSUFkZChlLnJlZE11bChpKSksdT10LnJlZEFkZCh0KSxjPSh1PXUucmVkSUFkZCh1KSkucmVkTXVsKGEpLGY9cy5yZWRTcXIoKS5yZWRJU3ViKGMucmVkQWRkKGMpKSxsPWMucmVkSVN1YihmKSxoPWEucmVkU3FyKCk7aD0oaD0oaD1oLnJlZElBZGQoaCkpLnJlZElBZGQoaCkpLnJlZElBZGQoaCk7dmFyIHA9cy5yZWRNdWwobCkucmVkSVN1YihoKSxkPXIucmVkQWRkKHIpLnJlZE11bChuKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoZixwLGQpfSxmLnByb3RvdHlwZS50cnBsPWZ1bmN0aW9uKCl7aWYoIXRoaXMuY3VydmUuemVyb0EpcmV0dXJuIHRoaXMuZGJsKCkuYWRkKHRoaXMpO3ZhciBlPXRoaXMueC5yZWRTcXIoKSx0PXRoaXMueS5yZWRTcXIoKSxyPXRoaXMuei5yZWRTcXIoKSxuPXQucmVkU3FyKCksaT1lLnJlZEFkZChlKS5yZWRJQWRkKGUpLG89aS5yZWRTcXIoKSxhPXRoaXMueC5yZWRBZGQodCkucmVkU3FyKCkucmVkSVN1YihlKS5yZWRJU3ViKG4pLHM9KGE9KGE9KGE9YS5yZWRJQWRkKGEpKS5yZWRBZGQoYSkucmVkSUFkZChhKSkucmVkSVN1YihvKSkucmVkU3FyKCksdT1uLnJlZElBZGQobik7dT0odT0odT11LnJlZElBZGQodSkpLnJlZElBZGQodSkpLnJlZElBZGQodSk7dmFyIGM9aS5yZWRJQWRkKGEpLnJlZFNxcigpLnJlZElTdWIobykucmVkSVN1YihzKS5yZWRJU3ViKHUpLGY9dC5yZWRNdWwoYyk7Zj0oZj1mLnJlZElBZGQoZikpLnJlZElBZGQoZik7dmFyIGw9dGhpcy54LnJlZE11bChzKS5yZWRJU3ViKGYpO2w9KGw9bC5yZWRJQWRkKGwpKS5yZWRJQWRkKGwpO3ZhciBoPXRoaXMueS5yZWRNdWwoYy5yZWRNdWwodS5yZWRJU3ViKGMpKS5yZWRJU3ViKGEucmVkTXVsKHMpKSk7aD0oaD0oaD1oLnJlZElBZGQoaCkpLnJlZElBZGQoaCkpLnJlZElBZGQoaCk7dmFyIHA9dGhpcy56LnJlZEFkZChhKS5yZWRTcXIoKS5yZWRJU3ViKHIpLnJlZElTdWIocyk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGwsaCxwKX0sZi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9bmV3IGkoZSx0KSx0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsZSl9LGYucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGUpe2lmKCJhZmZpbmUiPT09ZS50eXBlKXJldHVybiB0aGlzLmVxKGUudG9KKCkpO2lmKHRoaXM9PT1lKXJldHVybiEwO3ZhciB0PXRoaXMuei5yZWRTcXIoKSxyPWUuei5yZWRTcXIoKTtpZigwIT09dGhpcy54LnJlZE11bChyKS5yZWRJU3ViKGUueC5yZWRNdWwodCkpLmNtcG4oMCkpcmV0dXJuITE7dmFyIG49dC5yZWRNdWwodGhpcy56KSxpPXIucmVkTXVsKGUueik7cmV0dXJuIDA9PT10aGlzLnkucmVkTXVsKGkpLnJlZElTdWIoZS55LnJlZE11bChuKSkuY21wbigwKX0sZi5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuei5yZWRTcXIoKSxyPWUudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bCh0KTtpZigwPT09dGhpcy54LmNtcChyKSlyZXR1cm4hMDtmb3IodmFyIG49ZS5jbG9uZSgpLGk9dGhpcy5jdXJ2ZS5yZWROLnJlZE11bCh0KTs7KXtpZihuLmlhZGQodGhpcy5jdXJ2ZS5uKSxuLmNtcCh0aGlzLmN1cnZlLnApPj0wKXJldHVybiExO2lmKHIucmVkSUFkZChpKSwwPT09dGhpcy54LmNtcChyKSlyZXR1cm4hMH19LGYucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBKUG9pbnQgSW5maW5pdHk+IjoiPEVDIEpQb2ludCB4OiAiK3RoaXMueC50b1N0cmluZygxNiwyKSsiIHk6ICIrdGhpcy55LnRvU3RyaW5nKDE2LDIpKyIgejogIit0aGlzLnoudG9TdHJpbmcoMTYsMikrIj4ifSxmLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnouY21wbigwKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigyNCksaT1yKDcpLG89cigxNjApLGE9cig0OCk7ZnVuY3Rpb24gcyhlKXtvLmNhbGwodGhpcywibW9udCIsZSksdGhpcy5hPW5ldyBuKGUuYSwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgbihlLmIsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmk0PW5ldyBuKDQpLnRvUmVkKHRoaXMucmVkKS5yZWRJbnZtKCksdGhpcy50d289bmV3IG4oMikudG9SZWQodGhpcy5yZWQpLHRoaXMuYTI0PXRoaXMuaTQucmVkTXVsKHRoaXMuYS5yZWRBZGQodGhpcy50d28pKX1mdW5jdGlvbiB1KGUsdCxyKXtvLkJhc2VQb2ludC5jYWxsKHRoaXMsZSwicHJvamVjdGl2ZSIpLG51bGw9PT10JiZudWxsPT09cj8odGhpcy54PXRoaXMuY3VydmUub25lLHRoaXMuej10aGlzLmN1cnZlLnplcm8pOih0aGlzLng9bmV3IG4odCwxNiksdGhpcy56PW5ldyBuKHIsMTYpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSl9aShzLG8pLGUuZXhwb3J0cz1zLHMucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKGUpe3ZhciB0PWUubm9ybWFsaXplKCkueCxyPXQucmVkU3FyKCksbj1yLnJlZE11bCh0KS5yZWRBZGQoci5yZWRNdWwodGhpcy5hKSkucmVkQWRkKHQpO3JldHVybiAwPT09bi5yZWRTcXJ0KCkucmVkU3FyKCkuY21wKG4pfSxpKHUsby5CYXNlUG9pbnQpLHMucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMucG9pbnQoYS50b0FycmF5KGUsdCksMSl9LHMucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyB1KHRoaXMsZSx0KX0scy5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbihlKXtyZXR1cm4gdS5mcm9tSlNPTih0aGlzLGUpfSx1LnByb3RvdHlwZS5wcmVjb21wdXRlPWZ1bmN0aW9uKCl7fSx1LnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WCgpLnRvQXJyYXkoImJlIix0aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpKX0sdS5mcm9tSlNPTj1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgdShlLHRbMF0sdFsxXXx8ZS5vbmUpfSx1LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgUG9pbnQgSW5maW5pdHk+IjoiPEVDIFBvaW50IHg6ICIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhpcy56LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiPiJ9LHUucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuei5jbXBuKDApfSx1LnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLngucmVkQWRkKHRoaXMueikucmVkU3FyKCksdD10aGlzLngucmVkU3ViKHRoaXMueikucmVkU3FyKCkscj1lLnJlZFN1Yih0KSxuPWUucmVkTXVsKHQpLGk9ci5yZWRNdWwodC5yZWRBZGQodGhpcy5jdXJ2ZS5hMjQucmVkTXVsKHIpKSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQobixpKX0sdS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sdS5wcm90b3R5cGUuZGlmZkFkZD1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMueC5yZWRBZGQodGhpcy56KSxuPXRoaXMueC5yZWRTdWIodGhpcy56KSxpPWUueC5yZWRBZGQoZS56KSxvPWUueC5yZWRTdWIoZS56KS5yZWRNdWwociksYT1pLnJlZE11bChuKSxzPXQuei5yZWRNdWwoby5yZWRBZGQoYSkucmVkU3FyKCkpLHU9dC54LnJlZE11bChvLnJlZElTdWIoYSkucmVkU3FyKCkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHMsdSl9LHUucHJvdG90eXBlLm11bD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5jbG9uZSgpLHI9dGhpcyxuPXRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKSxpPVtdOzAhPT10LmNtcG4oMCk7dC5pdXNocm4oMSkpaS5wdXNoKHQuYW5kbG4oMSkpO2Zvcih2YXIgbz1pLmxlbmd0aC0xO28+PTA7by0tKTA9PT1pW29dPyhyPXIuZGlmZkFkZChuLHRoaXMpLG49bi5kYmwoKSk6KG49ci5kaWZmQWRkKG4sdGhpcykscj1yLmRibCgpKTtyZXR1cm4gbn0sdS5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sdS5wcm90b3R5cGUuanVtbEFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LHUucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGUpe3JldHVybiAwPT09dGhpcy5nZXRYKCkuY21wKGUuZ2V0WCgpKX0sdS5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueD10aGlzLngucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzfSx1LnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy54LmZyb21SZWQoKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig0OCksaT1yKDI0KSxvPXIoNyksYT1yKDE2MCkscz1uLmFzc2VydDtmdW5jdGlvbiB1KGUpe3RoaXMudHdpc3RlZD0xIT09KDB8ZS5hKSx0aGlzLm1PbmVBPXRoaXMudHdpc3RlZCYmLTE9PT0oMHxlLmEpLHRoaXMuZXh0ZW5kZWQ9dGhpcy5tT25lQSxhLmNhbGwodGhpcywiZWR3YXJkcyIsZSksdGhpcy5hPW5ldyBpKGUuYSwxNikudW1vZCh0aGlzLnJlZC5tKSx0aGlzLmE9dGhpcy5hLnRvUmVkKHRoaXMucmVkKSx0aGlzLmM9bmV3IGkoZS5jLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5jMj10aGlzLmMucmVkU3FyKCksdGhpcy5kPW5ldyBpKGUuZCwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuZGQ9dGhpcy5kLnJlZEFkZCh0aGlzLmQpLHMoIXRoaXMudHdpc3RlZHx8MD09PXRoaXMuYy5mcm9tUmVkKCkuY21wbigxKSksdGhpcy5vbmVDPTE9PT0oMHxlLmMpfWZ1bmN0aW9uIGMoZSx0LHIsbixvKXthLkJhc2VQb2ludC5jYWxsKHRoaXMsZSwicHJvamVjdGl2ZSIpLG51bGw9PT10JiZudWxsPT09ciYmbnVsbD09PW4/KHRoaXMueD10aGlzLmN1cnZlLnplcm8sdGhpcy55PXRoaXMuY3VydmUub25lLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzLnQ9dGhpcy5jdXJ2ZS56ZXJvLHRoaXMuek9uZT0hMCk6KHRoaXMueD1uZXcgaSh0LDE2KSx0aGlzLnk9bmV3IGkociwxNiksdGhpcy56PW4/bmV3IGkobiwxNik6dGhpcy5jdXJ2ZS5vbmUsdGhpcy50PW8mJm5ldyBpKG8sMTYpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMudCYmIXRoaXMudC5yZWQmJih0aGlzLnQ9dGhpcy50LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56T25lPXRoaXMuej09PXRoaXMuY3VydmUub25lLHRoaXMuY3VydmUuZXh0ZW5kZWQmJiF0aGlzLnQmJih0aGlzLnQ9dGhpcy54LnJlZE11bCh0aGlzLnkpLHRoaXMuek9uZXx8KHRoaXMudD10aGlzLnQucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpKSkpfW8odSxhKSxlLmV4cG9ydHM9dSx1LnByb3RvdHlwZS5fbXVsQT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5tT25lQT9lLnJlZE5lZygpOnRoaXMuYS5yZWRNdWwoZSl9LHUucHJvdG90eXBlLl9tdWxDPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9uZUM/ZTp0aGlzLmMucmVkTXVsKGUpfSx1LnByb3RvdHlwZS5qcG9pbnQ9ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIHRoaXMucG9pbnQoZSx0LHIsbil9LHUucHJvdG90eXBlLnBvaW50RnJvbVg9ZnVuY3Rpb24oZSx0KXsoZT1uZXcgaShlLDE2KSkucmVkfHwoZT1lLnRvUmVkKHRoaXMucmVkKSk7dmFyIHI9ZS5yZWRTcXIoKSxuPXRoaXMuYzIucmVkU3ViKHRoaXMuYS5yZWRNdWwocikpLG89dGhpcy5vbmUucmVkU3ViKHRoaXMuYzIucmVkTXVsKHRoaXMuZCkucmVkTXVsKHIpKSxhPW4ucmVkTXVsKG8ucmVkSW52bSgpKSxzPWEucmVkU3FydCgpO2lmKDAhPT1zLnJlZFNxcigpLnJlZFN1YihhKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTt2YXIgdT1zLmZyb21SZWQoKS5pc09kZCgpO3JldHVybih0JiYhdXx8IXQmJnUpJiYocz1zLnJlZE5lZygpKSx0aGlzLnBvaW50KGUscyl9LHUucHJvdG90eXBlLnBvaW50RnJvbVk9ZnVuY3Rpb24oZSx0KXsoZT1uZXcgaShlLDE2KSkucmVkfHwoZT1lLnRvUmVkKHRoaXMucmVkKSk7dmFyIHI9ZS5yZWRTcXIoKSxuPXIucmVkU3ViKHRoaXMuYzIpLG89ci5yZWRNdWwodGhpcy5kKS5yZWRNdWwodGhpcy5jMikucmVkU3ViKHRoaXMuYSksYT1uLnJlZE11bChvLnJlZEludm0oKSk7aWYoMD09PWEuY21wKHRoaXMuemVybykpe2lmKHQpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7cmV0dXJuIHRoaXMucG9pbnQodGhpcy56ZXJvLGUpfXZhciBzPWEucmVkU3FydCgpO2lmKDAhPT1zLnJlZFNxcigpLnJlZFN1YihhKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTtyZXR1cm4gcy5mcm9tUmVkKCkuaXNPZGQoKSE9PXQmJihzPXMucmVkTmVnKCkpLHRoaXMucG9pbnQocyxlKX0sdS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oZSl7aWYoZS5pc0luZmluaXR5KCkpcmV0dXJuITA7ZS5ub3JtYWxpemUoKTt2YXIgdD1lLngucmVkU3FyKCkscj1lLnkucmVkU3FyKCksbj10LnJlZE11bCh0aGlzLmEpLnJlZEFkZChyKSxpPXRoaXMuYzIucmVkTXVsKHRoaXMub25lLnJlZEFkZCh0aGlzLmQucmVkTXVsKHQpLnJlZE11bChyKSkpO3JldHVybiAwPT09bi5jbXAoaSl9LG8oYyxhLkJhc2VQb2ludCksdS5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbihlKXtyZXR1cm4gYy5mcm9tSlNPTih0aGlzLGUpfSx1LnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihlLHQscixuKXtyZXR1cm4gbmV3IGModGhpcyxlLHQscixuKX0sYy5mcm9tSlNPTj1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgYyhlLHRbMF0sdFsxXSx0WzJdKX0sYy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiA="
}