3N2rk3yzChsJp4wCS5VLo5Q3ifLmDChfbzQ · data · qwer?main.e3350ff4d88d534234ef.js?4?2?0
{
"qwer?main.e3350ff4d88d534234ef.js?4?2?0": "base64:Z1RlbXBUb2tlblBhdGg7dGhyb3cgZVtSdF0mJm8udW5zaGlmdChlW1J0XSksdC5tZXNzYWdlPVZ0KCJcbiIrdC5tZXNzYWdlLG8sIlN0YXRpY0luamVjdG9yRXJyb3IiLHIpLHQubmdUb2tlblBhdGg9byx0Lm5nVGVtcFRva2VuUGF0aD1udWxsLHR9KGksdCwwLHRoaXMuc291cmNlKX19LHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuX3JlY29yZHMuZm9yRWFjaCgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC5wdXNoKHl0KG4pKX0pKSwiU3RhdGljSW5qZWN0b3JbIit0LmpvaW4oIiwgIikrIl0ifSx0fSgpO2Z1bmN0aW9uIFZlKHQpe3JldHVybiBIZSgiQ2Fubm90IG1peCBtdWx0aSBwcm92aWRlcnMgYW5kIHJlZ3VsYXIgcHJvdmlkZXJzIix0KX1mdW5jdGlvbiBIZSh0LGUpe3JldHVybiBuZXcgRXJyb3IoVnQodCxlLCJTdGF0aWNJbmplY3RvckVycm9yIikpfXZhciB6ZT1uZXcgVHQoIkFuYWx5emVGb3JFbnRyeUNvbXBvbmVudHMiKSxGZT1udWxsO2Z1bmN0aW9uIEJlKCl7aWYoIUZlKXt2YXIgdD1PdC5TeW1ib2w7aWYodCYmdC5pdGVyYXRvcilGZT10Lml0ZXJhdG9yO2Vsc2UgZm9yKHZhciBlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE1hcC5wcm90b3R5cGUpLG49MDtuPGUubGVuZ3RoOysrbil7dmFyIHI9ZVtuXTsiZW50cmllcyIhPT1yJiYic2l6ZSIhPT1yJiZNYXAucHJvdG90eXBlW3JdPT09TWFwLnByb3RvdHlwZS5lbnRyaWVzJiYoRmU9cil9fXJldHVybiBGZX1mdW5jdGlvbiBaZSh0LGUpe3JldHVybiB0PT09ZXx8Im51bWJlciI9PXR5cGVvZiB0JiYibnVtYmVyIj09dHlwZW9mIGUmJmlzTmFOKHQpJiZpc05hTihlKX1mdW5jdGlvbiBHZSh0LGUpe3ZhciBuPVdlKHQpLHI9V2UoZSk7cmV0dXJuIG4mJnI/ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj10W0JlKCldKCksbz1lW0JlKCldKCk7Oyl7dmFyIGk9ci5uZXh0KCksYT1vLm5leHQoKTtpZihpLmRvbmUmJmEuZG9uZSlyZXR1cm4hMDtpZihpLmRvbmV8fGEuZG9uZSlyZXR1cm4hMTtpZighbihpLnZhbHVlLGEudmFsdWUpKXJldHVybiExfX0odCxlLEdlKTohKG58fCF0fHwib2JqZWN0IiE9dHlwZW9mIHQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0fHxyfHwhZXx8Im9iamVjdCIhPXR5cGVvZiBlJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl8fFplKHQsZSl9dmFyIHFlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLndyYXBwZWQ9dH1yZXR1cm4gdC53cmFwPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdChlKX0sdC51bndyYXA9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuaXNXcmFwcGVkKGUpP2Uud3JhcHBlZDplfSx0LmlzV3JhcHBlZD1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHR9LHR9KCk7ZnVuY3Rpb24gV2UodCl7cmV0dXJuISFRZSh0KSYmKEFycmF5LmlzQXJyYXkodCl8fCEodCBpbnN0YW5jZW9mIE1hcCkmJkJlKClpbiB0KX1mdW5jdGlvbiBRZSh0KXtyZXR1cm4gbnVsbCE9PXQmJigiZnVuY3Rpb24iPT10eXBlb2YgdHx8Im9iamVjdCI9PXR5cGVvZiB0KX1mdW5jdGlvbiBLZSh0KXtyZXR1cm4hIXQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnRoZW59ZnVuY3Rpb24gWWUodCl7cmV0dXJuISF0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5zdWJzY3JpYmV9dmFyIEplPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5wcmV2aW91c1ZhbHVlPXQsdGhpcy5jdXJyZW50VmFsdWU9ZSx0aGlzLmZpcnN0Q2hhbmdlPW59cmV0dXJuIHQucHJvdG90eXBlLmlzRmlyc3RDaGFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maXJzdENoYW5nZX0sdH0oKSwkZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe319KCksWGU9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXt9fSgpO2Z1bmN0aW9uIHRuKHQpe3ZhciBlPUVycm9yKCJObyBjb21wb25lbnQgZmFjdG9yeSBmb3VuZCBmb3IgIit5dCh0KSsiLiBEaWQgeW91IGFkZCBpdCB0byBATmdNb2R1bGUuZW50cnlDb21wb25lbnRzPyIpO3JldHVybiBlW2VuXT10LGV9dmFyIGVuPSJuZ0NvbXBvbmVudCIsbm49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeT1mdW5jdGlvbih0KXt0aHJvdyB0bih0KX0sdH0oKSxybj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuTlVMTD1uZXcgbm4sdH0oKSxvbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX3BhcmVudD1lLHRoaXMuX25nTW9kdWxlPW4sdGhpcy5fZmFjdG9yaWVzPW5ldyBNYXA7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBvPXRbcl07dGhpcy5fZmFjdG9yaWVzLnNldChvLmNvbXBvbmVudFR5cGUsbyl9fXJldHVybiB0LnByb3RvdHlwZS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9mYWN0b3JpZXMuZ2V0KHQpO2lmKCFlJiZ0aGlzLl9wYXJlbnQmJihlPXRoaXMuX3BhcmVudC5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0KSksIWUpdGhyb3cgdG4odCk7cmV0dXJuIG5ldyBhbihlLHRoaXMuX25nTW9kdWxlKX0sdH0oKSxhbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLmZhY3Rvcnk9ZSxyLm5nTW9kdWxlPW4sci5zZWxlY3Rvcj1lLnNlbGVjdG9yLHIuY29tcG9uZW50VHlwZT1lLmNvbXBvbmVudFR5cGUsci5uZ0NvbnRlbnRTZWxlY3RvcnM9ZS5uZ0NvbnRlbnRTZWxlY3RvcnMsci5pbnB1dHM9ZS5pbnB1dHMsci5vdXRwdXRzPWUub3V0cHV0cyxyfXJldHVybiBPYmplY3Qoci5fX2V4dGVuZHMpKGUsdCksZS5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiB0aGlzLmZhY3RvcnkuY3JlYXRlKHQsZSxuLHJ8fHRoaXMubmdNb2R1bGUpfSxlfShYZSk7ZnVuY3Rpb24gdW4oKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV19dmFyIGxuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLm5hdGl2ZUVsZW1lbnQ9dH1yZXR1cm4gdC5fX05HX0VMRU1FTlRfSURfXz1mdW5jdGlvbigpe3JldHVybiBzbih0KX0sdH0oKSxzbj11bixjbj1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe319KCksZm49ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXt9fSgpLGhuPWZ1bmN0aW9uKHQpe3JldHVybiB0W3QuSW1wb3J0YW50PTFdPSJJbXBvcnRhbnQiLHRbdC5EYXNoQ2FzZT0yXT0iRGFzaENhc2UiLHR9KHt9KSxwbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuX19OR19FTEVNRU5UX0lEX189ZnVuY3Rpb24oKXtyZXR1cm4gZG4oKX0sdH0oKSxkbj11bixnbj1uZXcoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7dGhpcy5mdWxsPXQsdGhpcy5tYWpvcj10LnNwbGl0KCIuIilbMF0sdGhpcy5taW5vcj10LnNwbGl0KCIuIilbMV0sdGhpcy5wYXRjaD10LnNwbGl0KCIuIikuc2xpY2UoMikuam9pbigiLiIpfX0oKSkoIjguMi4xNCIpLHZuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuc3VwcG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHQpfSx0LnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBtbih0KX0sdH0oKSx5bj1mdW5jdGlvbih0LGUpe3JldHVybiBlfSxtbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5sZW5ndGg9MCx0aGlzLl9saW5rZWRSZWNvcmRzPW51bGwsdGhpcy5fdW5saW5rZWRSZWNvcmRzPW51bGwsdGhpcy5fcHJldmlvdXNJdEhlYWQ9bnVsbCx0aGlzLl9pdEhlYWQ9bnVsbCx0aGlzLl9pdFRhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPW51bGwsdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX21vdmVzSGVhZD1udWxsLHRoaXMuX21vdmVzVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsLHRoaXMuX3JlbW92YWxzVGFpbD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9bnVsbCx0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGwsdGhpcy5fdHJhY2tCeUZuPXR8fHlufXJldHVybiB0LnByb3RvdHlwZS5mb3JFYWNoSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9pdEhlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0KXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hPcGVyYXRpb249ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2l0SGVhZCxuPXRoaXMuX3JlbW92YWxzSGVhZCxyPTAsbz1udWxsO2V8fG47KXt2YXIgaT0hbnx8ZSYmZS5jdXJyZW50SW5kZXg8eG4obixyLG8pP2U6bixhPXhuKGkscixvKSx1PWkuY3VycmVudEluZGV4O2lmKGk9PT1uKXItLSxuPW4uX25leHRSZW1vdmVkO2Vsc2UgaWYoZT1lLl9uZXh0LG51bGw9PWkucHJldmlvdXNJbmRleClyKys7ZWxzZXtvfHwobz1bXSk7dmFyIGw9YS1yLHM9dS1yO2lmKGwhPXMpe2Zvcih2YXIgYz0wO2M8bDtjKyspe3ZhciBmPWM8by5sZW5ndGg/b1tjXTpvW2NdPTAsaD1mK2M7czw9aCYmaDxsJiYob1tjXT1mKzEpfW9baS5wcmV2aW91c0luZGV4XT1zLWx9fWEhPT11JiZ0KGksYSx1KX19LHQucHJvdG90eXBlLmZvckVhY2hQcmV2aW91c0l0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fcHJldmlvdXNJdEhlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0UHJldmlvdXMpdChlKX0sdC5wcm90b3R5cGUuZm9yRWFjaEFkZGVkSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dEFkZGVkKXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hNb3ZlZEl0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fbW92ZXNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dE1vdmVkKXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hSZW1vdmVkSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9yZW1vdmFsc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0UmVtb3ZlZCl0KGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoSWRlbnRpdHlDaGFuZ2U9ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZDtudWxsIT09ZTtlPWUuX25leHRJZGVudGl0eUNoYW5nZSl0KGUpfSx0LnByb3RvdHlwZS5kaWZmPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQmJih0PVtdKSwhV2UodCkpdGhyb3cgbmV3IEVycm9yKCJFcnJvciB0cnlpbmcgdG8gZGlmZiAnIit5dCh0KSsiJy4gT25seSBhcnJheXMgYW5kIGl0ZXJhYmxlcyBhcmUgYWxsb3dlZCIpO3JldHVybiB0aGlzLmNoZWNrKHQpP3RoaXM6bnVsbH0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5jaGVjaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX3Jlc2V0KCk7dmFyIG4scixvLGk9dGhpcy5faXRIZWFkLGE9ITE7aWYoQXJyYXkuaXNBcnJheSh0KSl7dGhpcy5sZW5ndGg9dC5sZW5ndGg7Zm9yKHZhciB1PTA7dTx0aGlzLmxlbmd0aDt1Kyspbz10aGlzLl90cmFja0J5Rm4odSxyPXRbdV0pLG51bGwhPT1pJiZaZShpLnRyYWNrQnlJZCxvKT8oYSYmKGk9dGhpcy5fdmVyaWZ5UmVpbnNlcnRpb24oaSxyLG8sdSkpLFplKGkuaXRlbSxyKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UoaSxyKSk6KGk9dGhpcy5fbWlzbWF0Y2goaSxyLG8sdSksYT0hMCksaT1pLl9uZXh0fWVsc2Ugbj0wLGZ1bmN0aW9uKHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyllKHRbbl0pO2Vsc2UgZm9yKHZhciByPXRbQmUoKV0oKSxvPXZvaWQgMDshKG89ci5uZXh0KCkpLmRvbmU7KWUoby52YWx1ZSl9KHQsKGZ1bmN0aW9uKHQpe289ZS5fdHJhY2tCeUZuKG4sdCksbnVsbCE9PWkmJlplKGkudHJhY2tCeUlkLG8pPyhhJiYoaT1lLl92ZXJpZnlSZWluc2VydGlvbihpLHQsbyxuKSksWmUoaS5pdGVtLHQpfHxlLl9hZGRJZGVudGl0eUNoYW5nZShpLHQpKTooaT1lLl9taXNtYXRjaChpLHQsbyxuKSxhPSEwKSxpPWkuX25leHQsbisrfSkpLHRoaXMubGVuZ3RoPW47cmV0dXJuIHRoaXMuX3RydW5jYXRlKGkpLHRoaXMuY29sbGVjdGlvbj10LHRoaXMuaXNEaXJ0eX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpc0RpcnR5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fbW92ZXNIZWFkfHxudWxsIT09dGhpcy5fcmVtb3ZhbHNIZWFkfHxudWxsIT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5fcmVzZXQ9ZnVuY3Rpb24oKXtpZih0aGlzLmlzRGlydHkpe3ZhciB0PXZvaWQgMCxlPXZvaWQgMDtmb3IodD10aGlzLl9wcmV2aW91c0l0SGVhZD10aGlzLl9pdEhlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0KXQuX25leHRQcmV2aW91cz10Ll9uZXh0O2Zvcih0PXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0QWRkZWQpdC5wcmV2aW91c0luZGV4PXQuY3VycmVudEluZGV4O2Zvcih0aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0PXRoaXMuX21vdmVzSGVhZDtudWxsIT09dDt0PWUpdC5wcmV2aW91c0luZGV4PXQuY3VycmVudEluZGV4LGU9dC5fbmV4dE1vdmVkO3RoaXMuX21vdmVzSGVhZD10aGlzLl9tb3Zlc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9dGhpcy5fcmVtb3ZhbHNUYWlsPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZD10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGx9fSx0LnByb3RvdHlwZS5fbWlzbWF0Y2g9ZnVuY3Rpb24odCxlLG4scil7dmFyIG87cmV0dXJuIG51bGw9PT10P289dGhpcy5faXRUYWlsOihvPXQuX3ByZXYsdGhpcy5fcmVtb3ZlKHQpKSxudWxsIT09KHQ9bnVsbD09PXRoaXMuX2xpbmtlZFJlY29yZHM/bnVsbDp0aGlzLl9saW5rZWRSZWNvcmRzLmdldChuLHIpKT8oWmUodC5pdGVtLGUpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZSh0LGUpLHRoaXMuX21vdmVBZnRlcih0LG8scikpOm51bGwhPT0odD1udWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5rZWRSZWNvcmRzLmdldChuLG51bGwpKT8oWmUodC5pdGVtLGUpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZSh0LGUpLHRoaXMuX3JlaW5zZXJ0QWZ0ZXIodCxvLHIpKTp0PXRoaXMuX2FkZEFmdGVyKG5ldyBfbihlLG4pLG8sciksdH0sdC5wcm90b3R5cGUuX3ZlcmlmeVJlaW5zZXJ0aW9uPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPW51bGw9PT10aGlzLl91bmxpbmtlZFJlY29yZHM/bnVsbDp0aGlzLl91bmxpbmtlZFJlY29yZHMuZ2V0KG4sbnVsbCk7cmV0dXJuIG51bGwhPT1vP3Q9dGhpcy5fcmVpbnNlcnRBZnRlcihvLHQuX3ByZXYscik6dC5jdXJyZW50SW5kZXghPXImJih0LmN1cnJlbnRJbmRleD1yLHRoaXMuX2FkZFRvTW92ZXModCxyKSksdH0sdC5wcm90b3R5cGUuX3RydW5jYXRlPWZ1bmN0aW9uKHQpe2Zvcig7bnVsbCE9PXQ7KXt2YXIgZT10Ll9uZXh0O3RoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5fdW5saW5rKHQpKSx0PWV9bnVsbCE9PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmdGhpcy5fdW5saW5rZWRSZWNvcmRzLmNsZWFyKCksbnVsbCE9PXRoaXMuX2FkZGl0aW9uc1RhaWwmJih0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9bnVsbCksbnVsbCE9PXRoaXMuX21vdmVzVGFpbCYmKHRoaXMuX21vdmVzVGFpbC5fbmV4dE1vdmVkPW51bGwpLG51bGwhPT10aGlzLl9pdFRhaWwmJih0aGlzLl9pdFRhaWwuX25leHQ9bnVsbCksbnVsbCE9PXRoaXMuX3JlbW92YWxzVGFpbCYmKHRoaXMuX3JlbW92YWxzVGFpbC5fbmV4dFJlbW92ZWQ9bnVsbCksbnVsbCE9PXRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwmJih0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbCl9LHQucHJvdG90eXBlLl9yZWluc2VydEFmdGVyPWZ1bmN0aW9uKHQsZSxuKXtudWxsIT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiZ0aGlzLl91bmxpbmtlZFJlY29yZHMucmVtb3ZlKHQpO3ZhciByPXQuX3ByZXZSZW1vdmVkLG89dC5fbmV4dFJlbW92ZWQ7cmV0dXJuIG51bGw9PT1yP3RoaXMuX3JlbW92YWxzSGVhZD1vOnIuX25leHRSZW1vdmVkPW8sbnVsbD09PW8/dGhpcy5fcmVtb3ZhbHNUYWlsPXI6by5fcHJldlJlbW92ZWQ9cix0aGlzLl9pbnNlcnRBZnRlcih0LGUsbiksdGhpcy5fYWRkVG9Nb3Zlcyh0LG4pLHR9LHQucHJvdG90eXBlLl9tb3ZlQWZ0ZXI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLl91bmxpbmsodCksdGhpcy5faW5zZXJ0QWZ0ZXIodCxlLG4pLHRoaXMuX2FkZFRvTW92ZXModCxuKSx0fSx0LnByb3RvdHlwZS5fYWRkQWZ0ZXI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLl9pbnNlcnRBZnRlcih0LGUsbiksdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsPT09dGhpcy5fYWRkaXRpb25zVGFpbD90aGlzLl9hZGRpdGlvbnNIZWFkPXQ6dGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPXQsdH0sdC5wcm90b3R5cGUuX2luc2VydEFmdGVyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1udWxsPT09ZT90aGlzLl9pdEhlYWQ6ZS5fbmV4dDtyZXR1cm4gdC5fbmV4dD1yLHQuX3ByZXY9ZSxudWxsPT09cj90aGlzLl9pdFRhaWw9dDpyLl9wcmV2PXQsbnVsbD09PWU/dGhpcy5faXRIZWFkPXQ6ZS5fbmV4dD10LG51bGw9PT10aGlzLl9saW5rZWRSZWNvcmRzJiYodGhpcy5fbGlua2VkUmVjb3Jkcz1uZXcgYm4pLHRoaXMuX2xpbmtlZFJlY29yZHMucHV0KHQpLHQuY3VycmVudEluZGV4PW4sdH0sdC5wcm90b3R5cGUuX3JlbW92ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYWRkVG9SZW1vdmFscyh0aGlzLl91bmxpbmsodCkpfSx0LnByb3RvdHlwZS5fdW5saW5rPWZ1bmN0aW9uKHQpe251bGwhPT10aGlzLl9saW5rZWRSZWNvcmRzJiZ0aGlzLl9saW5rZWRSZWNvcmRzLnJlbW92ZSh0KTt2YXIgZT10Ll9wcmV2LG49dC5fbmV4dDtyZXR1cm4gbnVsbD09PWU/dGhpcy5faXRIZWFkPW46ZS5fbmV4dD1uLG51bGw9PT1uP3RoaXMuX2l0VGFpbD1lOm4uX3ByZXY9ZSx0fSx0LnByb3RvdHlwZS5fYWRkVG9Nb3Zlcz1mdW5jdGlvbih0LGUpe3JldHVybiB0LnByZXZpb3VzSW5kZXg9PT1lP3Q6KHRoaXMuX21vdmVzVGFpbD1udWxsPT09dGhpcy5fbW92ZXNUYWlsP3RoaXMuX21vdmVzSGVhZD10OnRoaXMuX21vdmVzVGFpbC5fbmV4dE1vdmVkPXQsdCl9LHQucHJvdG90eXBlLl9hZGRUb1JlbW92YWxzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiYodGhpcy5fdW5saW5rZWRSZWNvcmRzPW5ldyBibiksdGhpcy5fdW5saW5rZWRSZWNvcmRzLnB1dCh0KSx0LmN1cnJlbnRJbmRleD1udWxsLHQuX25leHRSZW1vdmVkPW51bGwsbnVsbD09PXRoaXMuX3JlbW92YWxzVGFpbD8odGhpcy5fcmVtb3ZhbHNUYWlsPXRoaXMuX3JlbW92YWxzSGVhZD10LHQuX3ByZXZSZW1vdmVkPW51bGwpOih0Ll9wcmV2UmVtb3ZlZD10aGlzLl9yZW1vdmFsc1RhaWwsdGhpcy5fcmVtb3ZhbHNUYWlsPXRoaXMuX3JlbW92YWxzVGFpbC5fbmV4dFJlbW92ZWQ9dCksdH0sdC5wcm90b3R5cGUuX2FkZElkZW50aXR5Q2hhbmdlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuaXRlbT1lLHRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWw9bnVsbD09PXRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWw/dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZD10OnRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwuX25leHRJZGVudGl0eUNoYW5nZT10LHR9LHR9KCksX249ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlKXt0aGlzLml0ZW09dCx0aGlzLnRyYWNrQnlJZD1lLHRoaXMuY3VycmVudEluZGV4PW51bGwsdGhpcy5wcmV2aW91c0luZGV4PW51bGwsdGhpcy5fbmV4dFByZXZpb3VzPW51bGwsdGhpcy5fcHJldj1udWxsLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wcmV2RHVwPW51bGwsdGhpcy5fbmV4dER1cD1udWxsLHRoaXMuX3ByZXZSZW1vdmVkPW51bGwsdGhpcy5fbmV4dFJlbW92ZWQ9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0TW92ZWQ9bnVsbCx0aGlzLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbH19KCksd249ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5faGVhZD1udWxsLHRoaXMuX3RhaWw9bnVsbH1yZXR1cm4gdC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQpe251bGw9PT10aGlzLl9oZWFkPyh0aGlzLl9oZWFkPXRoaXMuX3RhaWw9dCx0Ll9uZXh0RHVwPW51bGwsdC5fcHJldkR1cD1udWxsKToodGhpcy5fdGFpbC5fbmV4dER1cD10LHQuX3ByZXZEdXA9dGhpcy5fdGFpbCx0Ll9uZXh0RHVwPW51bGwsdGhpcy5fdGFpbD10KX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSl7dmFyIG47Zm9yKG49dGhpcy5faGVhZDtudWxsIT09bjtuPW4uX25leHREdXApaWYoKG51bGw9PT1lfHxlPD1uLmN1cnJlbnRJbmRleCkmJlplKG4udHJhY2tCeUlkLHQpKXJldHVybiBuO3JldHVybiBudWxsfSx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dC5fcHJldkR1cCxuPXQuX25leHREdXA7cmV0dXJuIG51bGw9PT1lP3RoaXMuX2hlYWQ9bjplLl9uZXh0RHVwPW4sbnVsbD09PW4/dGhpcy5fdGFpbD1lOm4uX3ByZXZEdXA9ZSxudWxsPT09dGhpcy5faGVhZH0sdH0oKSxibj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLm1hcD1uZXcgTWFwfXJldHVybiB0LnByb3RvdHlwZS5wdXQ9ZnVuY3Rpb24odCl7dmFyIGU9dC50cmFja0J5SWQsbj10aGlzLm1hcC5nZXQoZSk7bnx8KG49bmV3IHduLHRoaXMubWFwLnNldChlLG4pKSxuLmFkZCh0KX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5tYXAuZ2V0KHQpO3JldHVybiBuP24uZ2V0KHQsZSk6bnVsbH0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXQudHJhY2tCeUlkO3JldHVybiB0aGlzLm1hcC5nZXQoZSkucmVtb3ZlKHQpJiZ0aGlzLm1hcC5kZWxldGUoZSksdH0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpc0VtcHR5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLm1hcC5zaXplfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5tYXAuY2xlYXIoKX0sdH0oKTtmdW5jdGlvbiB4bih0LGUsbil7dmFyIHI9dC5wcmV2aW91c0luZGV4O2lmKG51bGw9PT1yKXJldHVybiByO3ZhciBvPTA7cmV0dXJuIG4mJnI8bi5sZW5ndGgmJihvPW5bcl0pLHIrZStvfXZhciBDbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnN1cHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgTWFwfHxRZSh0KX0sdC5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBTbn0sdH0oKSxTbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9yZWNvcmRzPW5ldyBNYXAsdGhpcy5fbWFwSGVhZD1udWxsLHRoaXMuX2FwcGVuZEFmdGVyPW51bGwsdGhpcy5fcHJldmlvdXNNYXBIZWFkPW51bGwsdGhpcy5fY2hhbmdlc0hlYWQ9bnVsbCx0aGlzLl9jaGFuZ2VzVGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9bnVsbCx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPW51bGwsdGhpcy5fcmVtb3ZhbHNUYWlsPW51bGx9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaXNEaXJ0eSIse2dldDpmdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy5fYWRkaXRpb25zSGVhZHx8bnVsbCE9PXRoaXMuX2NoYW5nZXNIZWFkfHxudWxsIT09dGhpcy5fcmVtb3ZhbHNIZWFkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmZvckVhY2hJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX21hcEhlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0KXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hQcmV2aW91c0l0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fcHJldmlvdXNNYXBIZWFkO251bGwhPT1lO2U9ZS5fbmV4dFByZXZpb3VzKXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hDaGFuZ2VkSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09ZTtlPWUuX25leHRDaGFuZ2VkKXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hBZGRlZEl0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT09ZTtlPWUuX25leHRBZGRlZCl0KGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoUmVtb3ZlZEl0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fcmVtb3ZhbHNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dFJlbW92ZWQpdChlKX0sdC5wcm90b3R5cGUuZGlmZj1mdW5jdGlvbih0KXtpZih0KXtpZighKHQgaW5zdGFuY2VvZiBNYXB8fFFlKHQpKSl0aHJvdyBuZXcgRXJyb3IoIkVycm9yIHRyeWluZyB0byBkaWZmICciK3l0KHQpKyInLiBPbmx5IG1hcHMgYW5kIG9iamVjdHMgYXJlIGFsbG93ZWQiKX1lbHNlIHQ9bmV3IE1hcDtyZXR1cm4gdGhpcy5jaGVjayh0KT90aGlzOm51bGx9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuY2hlY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9yZXNldCgpO3ZhciBuPXRoaXMuX21hcEhlYWQ7aWYodGhpcy5fYXBwZW5kQWZ0ZXI9bnVsbCx0aGlzLl9mb3JFYWNoKHQsKGZ1bmN0aW9uKHQscil7aWYobiYmbi5rZXk9PT1yKWUuX21heWJlQWRkVG9DaGFuZ2VzKG4sdCksZS5fYXBwZW5kQWZ0ZXI9bixuPW4uX25leHQ7ZWxzZXt2YXIgbz1lLl9nZXRPckNyZWF0ZVJlY29yZEZvcktleShyLHQpO249ZS5faW5zZXJ0QmVmb3JlT3JBcHBlbmQobixvKX19KSksbil7bi5fcHJldiYmKG4uX3ByZXYuX25leHQ9bnVsbCksdGhpcy5fcmVtb3ZhbHNIZWFkPW47Zm9yKHZhciByPW47bnVsbCE9PXI7cj1yLl9uZXh0UmVtb3ZlZClyPT09dGhpcy5fbWFwSGVhZCYmKHRoaXMuX21hcEhlYWQ9bnVsbCksdGhpcy5fcmVjb3Jkcy5kZWxldGUoci5rZXkpLHIuX25leHRSZW1vdmVkPXIuX25leHQsci5wcmV2aW91c1ZhbHVlPXIuY3VycmVudFZhbHVlLHIuY3VycmVudFZhbHVlPW51bGwsci5fcHJldj1udWxsLHIuX25leHQ9bnVsbH1yZXR1cm4gdGhpcy5fY2hhbmdlc1RhaWwmJih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9bnVsbCksdGhpcy5fYWRkaXRpb25zVGFpbCYmKHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1udWxsKSx0aGlzLmlzRGlydHl9LHQucHJvdG90eXBlLl9pbnNlcnRCZWZvcmVPckFwcGVuZD1mdW5jdGlvbih0LGUpe2lmKHQpe3ZhciBuPXQuX3ByZXY7cmV0dXJuIGUuX25leHQ9dCxlLl9wcmV2PW4sdC5fcHJldj1lLG4mJihuLl9uZXh0PWUpLHQ9PT10aGlzLl9tYXBIZWFkJiYodGhpcy5fbWFwSGVhZD1lKSx0aGlzLl9hcHBlbmRBZnRlcj10LHR9cmV0dXJuIHRoaXMuX2FwcGVuZEFmdGVyPyh0aGlzLl9hcHBlbmRBZnRlci5fbmV4dD1lLGUuX3ByZXY9dGhpcy5fYXBwZW5kQWZ0ZXIpOnRoaXMuX21hcEhlYWQ9ZSx0aGlzLl9hcHBlbmRBZnRlcj1lLG51bGx9LHQucHJvdG90eXBlLl9nZXRPckNyZWF0ZVJlY29yZEZvcktleT1mdW5jdGlvbih0LGUpe2lmKHRoaXMuX3JlY29yZHMuaGFzKHQpKXt2YXIgbj10aGlzLl9yZWNvcmRzLmdldCh0KTt0aGlzLl9tYXliZUFkZFRvQ2hhbmdlcyhuLGUpO3ZhciByPW4uX3ByZXYsbz1uLl9uZXh0O3JldHVybiByJiYoci5fbmV4dD1vKSxvJiYoby5fcHJldj1yKSxuLl9uZXh0PW51bGwsbi5fcHJldj1udWxsLG59dmFyIGk9bmV3IEVuKHQpO3JldHVybiB0aGlzLl9yZWNvcmRzLnNldCh0LGkpLGkuY3VycmVudFZhbHVlPWUsdGhpcy5fYWRkVG9BZGRpdGlvbnMoaSksaX0sdC5wcm90b3R5cGUuX3Jlc2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5pc0RpcnR5KXt2YXIgdD12b2lkIDA7Zm9yKHRoaXMuX3ByZXZpb3VzTWFwSGVhZD10aGlzLl9tYXBIZWFkLHQ9dGhpcy5fcHJldmlvdXNNYXBIZWFkO251bGwhPT10O3Q9dC5fbmV4dCl0Ll9uZXh0UHJldmlvdXM9dC5fbmV4dDtmb3IodD10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09dDt0PXQuX25leHRDaGFuZ2VkKXQucHJldmlvdXNWYWx1ZT10LmN1cnJlbnRWYWx1ZTtmb3IodD10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPXQ7dD10Ll9uZXh0QWRkZWQpdC5wcmV2aW91c1ZhbHVlPXQuY3VycmVudFZhbHVlO3RoaXMuX2NoYW5nZXNIZWFkPXRoaXMuX2NoYW5nZXNUYWlsPW51bGwsdGhpcy5fYWRkaXRpb25zSGVhZD10aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPW51bGx9fSx0LnByb3RvdHlwZS5fbWF5YmVBZGRUb0NoYW5nZXM9ZnVuY3Rpb24odCxlKXtaZShlLHQuY3VycmVudFZhbHVlKXx8KHQucHJldmlvdXNWYWx1ZT10LmN1cnJlbnRWYWx1ZSx0LmN1cnJlbnRWYWx1ZT1lLHRoaXMuX2FkZFRvQ2hhbmdlcyh0KSl9LHQucHJvdG90eXBlLl9hZGRUb0FkZGl0aW9ucz1mdW5jdGlvbih0KXtudWxsPT09dGhpcy5fYWRkaXRpb25zSGVhZD90aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9dDoodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPXQsdGhpcy5fYWRkaXRpb25zVGFpbD10KX0sdC5wcm90b3R5cGUuX2FkZFRvQ2hhbmdlcz1mdW5jdGlvbih0KXtudWxsPT09dGhpcy5fY2hhbmdlc0hlYWQ/dGhpcy5fY2hhbmdlc0hlYWQ9dGhpcy5fY2hhbmdlc1RhaWw9dDoodGhpcy5fY2hhbmdlc1RhaWwuX25leHRDaGFuZ2VkPXQsdGhpcy5fY2hhbmdlc1RhaWw9dCl9LHQucHJvdG90eXBlLl9mb3JFYWNoPWZ1bmN0aW9uKHQsZSl7dCBpbnN0YW5jZW9mIE1hcD90LmZvckVhY2goZSk6T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24obil7cmV0dXJuIGUodFtuXSxuKX0pKX0sdH0oKSxFbj1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXt0aGlzLmtleT10LHRoaXMucHJldmlvdXNWYWx1ZT1udWxsLHRoaXMuY3VycmVudFZhbHVlPW51bGwsdGhpcy5fbmV4dFByZXZpb3VzPW51bGwsdGhpcy5fbmV4dD1udWxsLHRoaXMuX3ByZXY9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0UmVtb3ZlZD1udWxsLHRoaXMuX25leHRDaGFuZ2VkPW51bGx9fSgpLE9uPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmZhY3Rvcmllcz10fXJldHVybiB0LmNyZWF0ZT1mdW5jdGlvbihlLG4pe2lmKG51bGwhPW4pe3ZhciByPW4uZmFjdG9yaWVzLnNsaWNlKCk7ZT1lLmNvbmNhdChyKX1yZXR1cm4gbmV3IHQoZSl9LHQuZXh0ZW5kPWZ1bmN0aW9uKGUpe3JldHVybntwcm92aWRlOnQsdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtpZighbil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBleHRlbmQgSXRlcmFibGVEaWZmZXJzIHdpdGhvdXQgYSBwYXJlbnQgaW5qZWN0b3IiKTtyZXR1cm4gdC5jcmVhdGUoZSxuKX0sZGVwczpbW3QsbmV3IGZ0LG5ldyBzdF1dfX0sdC5wcm90b3R5cGUuZmluZD1mdW5jdGlvbih0KXt2YXIgZSxuPXRoaXMuZmFjdG9yaWVzLmZpbmQoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnN1cHBvcnRzKHQpfSkpO2lmKG51bGwhPW4pcmV0dXJuIG47dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBhIGRpZmZlciBzdXBwb3J0aW5nIG9iamVjdCAnIit0KyInIG9mIHR5cGUgJyIrKChlPXQpLm5hbWV8fHR5cGVvZiBlKSsiJyIpfSx0Lm5nSW5qZWN0YWJsZURlZj1kdCh7dG9rZW46dCxwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KFtuZXcgdm5dKX19KSx0fSgpLFRuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmZhY3Rvcmllcz10fXJldHVybiB0LmNyZWF0ZT1mdW5jdGlvbihlLG4pe2lmKG4pe3ZhciByPW4uZmFjdG9yaWVzLnNsaWNlKCk7ZT1lLmNvbmNhdChyKX1yZXR1cm4gbmV3IHQoZSl9LHQuZXh0ZW5kPWZ1bmN0aW9uKGUpe3JldHVybntwcm92aWRlOnQsdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtpZighbil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBleHRlbmQgS2V5VmFsdWVEaWZmZXJzIHdpdGhvdXQgYSBwYXJlbnQgaW5qZWN0b3IiKTtyZXR1cm4gdC5jcmVhdGUoZSxuKX0sZGVwczpbW3QsbmV3IGZ0LG5ldyBzdF1dfX0sdC5wcm90b3R5cGUuZmluZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZhY3Rvcmllcy5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4gZS5zdXBwb3J0cyh0KX0pKTtpZihlKXJldHVybiBlO3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgYSBkaWZmZXIgc3VwcG9ydGluZyBvYmplY3QgJyIrdCsiJyIpfSx0Lm5nSW5qZWN0YWJsZURlZj1kdCh7dG9rZW46dCxwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KFtuZXcgQ25dKX19KSx0fSgpLFBuPVtuZXcgQ25dLGtuPW5ldyBPbihbbmV3IHZuXSksQW49bmV3IFRuKFBuKSxJbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuX19OR19FTEVNRU5UX0lEX189ZnVuY3Rpb24oKXtyZXR1cm4gUm4odCxsbil9LHR9KCksUm49dW4sTW49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0Ll9fTkdfRUxFTUVOVF9JRF9fPWZ1bmN0aW9uKCl7cmV0dXJuIGpuKHQsbG4pfSx0fSgpLGpuPXVuO2Z1bmN0aW9uIE5uKHQsZSxuLHIpe3ZhciBvPSJFeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yOiBFeHByZXNzaW9uIGhhcyBjaGFuZ2VkIGFmdGVyIGl0IHdhcyBjaGVja2VkLiBQcmV2aW91cyB2YWx1ZTogJyIrZSsiJy4gQ3VycmVudCB2YWx1ZTogJyIrbisiJy4iO3JldHVybiByJiYobys9IiBJdCBzZWVtcyBsaWtlIHRoZSB2aWV3IGhhcyBiZWVuIGNyZWF0ZWQgYWZ0ZXIgaXRzIHBhcmVudCBhbmQgaXRzIGNoaWxkcmVuIGhhdmUgYmVlbiBkaXJ0eSBjaGVja2VkLiBIYXMgaXQgYmVlbiBjcmVhdGVkIGluIGEgY2hhbmdlIGRldGVjdGlvbiBob29rID8iKSxmdW5jdGlvbih0LGUpe3ZhciBuPW5ldyBFcnJvcih0KTtyZXR1cm4gRG4obixlKSxufShvLHQpfWZ1bmN0aW9uIERuKHQsZSl7dFtxdF09ZSx0W1F0XT1lLmxvZ0Vycm9yLmJpbmQoZSl9ZnVuY3Rpb24gVW4odCl7cmV0dXJuIG5ldyBFcnJvcigiVmlld0Rlc3Ryb3llZEVycm9yOiBBdHRlbXB0IHRvIHVzZSBhIGRlc3Ryb3llZCB2aWV3OiAiK3QpfWZ1bmN0aW9uIExuKHQsZSxuKXt2YXIgcj10LnN0YXRlLG89MTc5MiZyO3JldHVybiBvPT09ZT8odC5zdGF0ZT0tMTc5MyZyfG4sdC5pbml0SW5kZXg9LTEsITApOm89PT1ufWZ1bmN0aW9uIFZuKHQsZSxuKXtyZXR1cm4oMTc5MiZ0LnN0YXRlKT09PWUmJnQuaW5pdEluZGV4PD1uJiYodC5pbml0SW5kZXg9bisxLCEwKX1mdW5jdGlvbiBIbih0LGUpe3JldHVybiB0Lm5vZGVzW2VdfWZ1bmN0aW9uIHpuKHQsZSl7cmV0dXJuIHQubm9kZXNbZV19ZnVuY3Rpb24gRm4odCxlKXtyZXR1cm4gdC5ub2Rlc1tlXX1mdW5jdGlvbiBCbih0LGUpe3JldHVybiB0Lm5vZGVzW2VdfWZ1bmN0aW9uIFpuKHQsZSl7cmV0dXJuIHQubm9kZXNbZV19dmFyIEduPXtzZXRDdXJyZW50Tm9kZTp2b2lkIDAsY3JlYXRlUm9vdFZpZXc6dm9pZCAwLGNyZWF0ZUVtYmVkZGVkVmlldzp2b2lkIDAsY3JlYXRlQ29tcG9uZW50Vmlldzp2b2lkIDAsY3JlYXRlTmdNb2R1bGVSZWY6dm9pZCAwLG92ZXJyaWRlUHJvdmlkZXI6dm9pZCAwLG92ZXJyaWRlQ29tcG9uZW50Vmlldzp2b2lkIDAsY2xlYXJPdmVycmlkZXM6dm9pZCAwLGNoZWNrQW5kVXBkYXRlVmlldzp2b2lkIDAsY2hlY2tOb0NoYW5nZXNWaWV3OnZvaWQgMCxkZXN0cm95Vmlldzp2b2lkIDAscmVzb2x2ZURlcDp2b2lkIDAsY3JlYXRlRGVidWdDb250ZXh0OnZvaWQgMCxoYW5kbGVFdmVudDp2b2lkIDAsdXBkYXRlRGlyZWN0aXZlczp2b2lkIDAsdXBkYXRlUmVuZGVyZXI6dm9pZCAwLGRpcnR5UGFyZW50UXVlcmllczp2b2lkIDB9LHFuPWZ1bmN0aW9uKCl7fSxXbj1uZXcgTWFwO2Z1bmN0aW9uIFFuKHQpe3ZhciBlPVduLmdldCh0KTtyZXR1cm4gZXx8KGU9eXQodCkrIl8iK1duLnNpemUsV24uc2V0KHQsZSkpLGV9dmFyIEtuPSIkJHVuZGVmaW5lZCIsWW49IiQkZW1wdHkiO2Z1bmN0aW9uIEpuKHQpe3JldHVybntpZDpLbixzdHlsZXM6dC5zdHlsZXMsZW5jYXBzdWxhdGlvbjp0LmVuY2Fwc3VsYXRpb24sZGF0YTp0LmRhdGF9fXZhciAkbj0wO2Z1bmN0aW9uIFhuKHQsZSxuLHIpe3JldHVybiEoISgyJnQuc3RhdGUpJiZaZSh0Lm9sZFZhbHVlc1tlLmJpbmRpbmdJbmRleCtuXSxyKSl9ZnVuY3Rpb24gdHIodCxlLG4scil7cmV0dXJuISFYbih0LGUsbixyKSYmKHQub2xkVmFsdWVzW2UuYmluZGluZ0luZGV4K25dPXIsITApfWZ1bmN0aW9uIGVyKHQsZSxuLHIpe3ZhciBvPXQub2xkVmFsdWVzW2UuYmluZGluZ0luZGV4K25dO2lmKDEmdC5zdGF0ZXx8IUdlKG8scikpe3ZhciBpPWUuYmluZGluZ3Nbbl0ubmFtZTt0aHJvdyBObihHbi5jcmVhdGVEZWJ1Z0NvbnRleHQodCxlLm5vZGVJbmRleCksaSsiOiAiK28saSsiOiAiK3IsMCE9KDEmdC5zdGF0ZSkpfX1mdW5jdGlvbiBucih0KXtmb3IodmFyIGU9dDtlOykyJmUuZGVmLmZsYWdzJiYoZS5zdGF0ZXw9OCksZT1lLnZpZXdDb250YWluZXJQYXJlbnR8fGUucGFyZW50fWZ1bmN0aW9uIHJyKHQsZSl7Zm9yKHZhciBuPXQ7biYmbiE9PWU7KW4uc3RhdGV8PTY0LG49bi52aWV3Q29udGFpbmVyUGFyZW50fHxuLnBhcmVudH1mdW5jdGlvbiBvcih0LGUsbixyKXt0cnl7cmV0dXJuIG5yKDMzNTU0NDMyJnQuZGVmLm5vZGVzW2VdLmZsYWdzP3puKHQsZSkuY29tcG9uZW50Vmlldzp0KSxHbi5oYW5kbGVFdmVudCh0LGUsbixyKX1jYXRjaChvKXt0LnJvb3QuZXJyb3JIYW5kbGVyLmhhbmRsZUVycm9yKG8pfX1mdW5jdGlvbiBpcih0KXtyZXR1cm4gdC5wYXJlbnQ/em4odC5wYXJlbnQsdC5wYXJlbnROb2RlRGVmLm5vZGVJbmRleCk6bnVsbH1mdW5jdGlvbiBhcih0KXtyZXR1cm4gdC5wYXJlbnQ/dC5wYXJlbnROb2RlRGVmLnBhcmVudDpudWxsfWZ1bmN0aW9uIHVyKHQsZSl7c3dpdGNoKDIwMTM0NzA2NyZlLmZsYWdzKXtjYXNlIDE6cmV0dXJuIHpuKHQsZS5ub2RlSW5kZXgpLnJlbmRlckVsZW1lbnQ7Y2FzZSAyOnJldHVybiBIbih0LGUubm9kZUluZGV4KS5yZW5kZXJUZXh0fX1mdW5jdGlvbiBscih0KXtyZXR1cm4hIXQucGFyZW50JiYhISgzMjc2OCZ0LnBhcmVudE5vZGVEZWYuZmxhZ3MpfWZ1bmN0aW9uIHNyKHQpe3JldHVybiEoIXQucGFyZW50fHwzMjc2OCZ0LnBhcmVudE5vZGVEZWYuZmxhZ3MpfWZ1bmN0aW9uIGNyKHQpe3ZhciBlPXt9LG49MCxvPXt9O3JldHVybiB0JiZ0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBpPU9iamVjdChyLl9fcmVhZCkodCwyKSxhPWlbMF0sdT1pWzFdOyJudW1iZXIiPT10eXBlb2YgYT8oZVthXT11LG58PWZ1bmN0aW9uKHQpe3JldHVybiAxPDx0JTMyfShhKSk6b1thXT11fSkpLHttYXRjaGVkUXVlcmllczplLHJlZmVyZW5jZXM6byxtYXRjaGVkUXVlcnlJZHM6bn19ZnVuY3Rpb24gZnIodCxlKXtyZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBuLG8saTtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT8oaT0obj1PYmplY3Qoci5fX3JlYWQpKHQsMikpWzBdLG89blsxXSk6KGk9MCxvPXQpLG8mJigiZnVuY3Rpb24iPT10eXBlb2Ygb3x8Im9iamVjdCI9PXR5cGVvZiBvKSYmZSYmT2JqZWN0Lg=="
}
Changelog:
{
"2019.12.04 14:30": "base64:Z1RlbXBUb2tlblBhdGg7dGhyb3cgZVtSdF0mJm8udW5zaGlmdChlW1J0XSksdC5tZXNzYWdlPVZ0KCJcbiIrdC5tZXNzYWdlLG8sIlN0YXRpY0luamVjdG9yRXJyb3IiLHIpLHQubmdUb2tlblBhdGg9byx0Lm5nVGVtcFRva2VuUGF0aD1udWxsLHR9KGksdCwwLHRoaXMuc291cmNlKX19LHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuX3JlY29yZHMuZm9yRWFjaCgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC5wdXNoKHl0KG4pKX0pKSwiU3RhdGljSW5qZWN0b3JbIit0LmpvaW4oIiwgIikrIl0ifSx0fSgpO2Z1bmN0aW9uIFZlKHQpe3JldHVybiBIZSgiQ2Fubm90IG1peCBtdWx0aSBwcm92aWRlcnMgYW5kIHJlZ3VsYXIgcHJvdmlkZXJzIix0KX1mdW5jdGlvbiBIZSh0LGUpe3JldHVybiBuZXcgRXJyb3IoVnQodCxlLCJTdGF0aWNJbmplY3RvckVycm9yIikpfXZhciB6ZT1uZXcgVHQoIkFuYWx5emVGb3JFbnRyeUNvbXBvbmVudHMiKSxGZT1udWxsO2Z1bmN0aW9uIEJlKCl7aWYoIUZlKXt2YXIgdD1PdC5TeW1ib2w7aWYodCYmdC5pdGVyYXRvcilGZT10Lml0ZXJhdG9yO2Vsc2UgZm9yKHZhciBlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE1hcC5wcm90b3R5cGUpLG49MDtuPGUubGVuZ3RoOysrbil7dmFyIHI9ZVtuXTsiZW50cmllcyIhPT1yJiYic2l6ZSIhPT1yJiZNYXAucHJvdG90eXBlW3JdPT09TWFwLnByb3RvdHlwZS5lbnRyaWVzJiYoRmU9cil9fXJldHVybiBGZX1mdW5jdGlvbiBaZSh0LGUpe3JldHVybiB0PT09ZXx8Im51bWJlciI9PXR5cGVvZiB0JiYibnVtYmVyIj09dHlwZW9mIGUmJmlzTmFOKHQpJiZpc05hTihlKX1mdW5jdGlvbiBHZSh0LGUpe3ZhciBuPVdlKHQpLHI9V2UoZSk7cmV0dXJuIG4mJnI/ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj10W0JlKCldKCksbz1lW0JlKCldKCk7Oyl7dmFyIGk9ci5uZXh0KCksYT1vLm5leHQoKTtpZihpLmRvbmUmJmEuZG9uZSlyZXR1cm4hMDtpZihpLmRvbmV8fGEuZG9uZSlyZXR1cm4hMTtpZighbihpLnZhbHVlLGEudmFsdWUpKXJldHVybiExfX0odCxlLEdlKTohKG58fCF0fHwib2JqZWN0IiE9dHlwZW9mIHQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0fHxyfHwhZXx8Im9iamVjdCIhPXR5cGVvZiBlJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl8fFplKHQsZSl9dmFyIHFlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLndyYXBwZWQ9dH1yZXR1cm4gdC53cmFwPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdChlKX0sdC51bndyYXA9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuaXNXcmFwcGVkKGUpP2Uud3JhcHBlZDplfSx0LmlzV3JhcHBlZD1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHR9LHR9KCk7ZnVuY3Rpb24gV2UodCl7cmV0dXJuISFRZSh0KSYmKEFycmF5LmlzQXJyYXkodCl8fCEodCBpbnN0YW5jZW9mIE1hcCkmJkJlKClpbiB0KX1mdW5jdGlvbiBRZSh0KXtyZXR1cm4gbnVsbCE9PXQmJigiZnVuY3Rpb24iPT10eXBlb2YgdHx8Im9iamVjdCI9PXR5cGVvZiB0KX1mdW5jdGlvbiBLZSh0KXtyZXR1cm4hIXQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnRoZW59ZnVuY3Rpb24gWWUodCl7cmV0dXJuISF0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5zdWJzY3JpYmV9dmFyIEplPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5wcmV2aW91c1ZhbHVlPXQsdGhpcy5jdXJyZW50VmFsdWU9ZSx0aGlzLmZpcnN0Q2hhbmdlPW59cmV0dXJuIHQucHJvdG90eXBlLmlzRmlyc3RDaGFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maXJzdENoYW5nZX0sdH0oKSwkZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe319KCksWGU9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXt9fSgpO2Z1bmN0aW9uIHRuKHQpe3ZhciBlPUVycm9yKCJObyBjb21wb25lbnQgZmFjdG9yeSBmb3VuZCBmb3IgIit5dCh0KSsiLiBEaWQgeW91IGFkZCBpdCB0byBATmdNb2R1bGUuZW50cnlDb21wb25lbnRzPyIpO3JldHVybiBlW2VuXT10LGV9dmFyIGVuPSJuZ0NvbXBvbmVudCIsbm49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeT1mdW5jdGlvbih0KXt0aHJvdyB0bih0KX0sdH0oKSxybj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuTlVMTD1uZXcgbm4sdH0oKSxvbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX3BhcmVudD1lLHRoaXMuX25nTW9kdWxlPW4sdGhpcy5fZmFjdG9yaWVzPW5ldyBNYXA7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBvPXRbcl07dGhpcy5fZmFjdG9yaWVzLnNldChvLmNvbXBvbmVudFR5cGUsbyl9fXJldHVybiB0LnByb3RvdHlwZS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9mYWN0b3JpZXMuZ2V0KHQpO2lmKCFlJiZ0aGlzLl9wYXJlbnQmJihlPXRoaXMuX3BhcmVudC5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0KSksIWUpdGhyb3cgdG4odCk7cmV0dXJuIG5ldyBhbihlLHRoaXMuX25nTW9kdWxlKX0sdH0oKSxhbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLmZhY3Rvcnk9ZSxyLm5nTW9kdWxlPW4sci5zZWxlY3Rvcj1lLnNlbGVjdG9yLHIuY29tcG9uZW50VHlwZT1lLmNvbXBvbmVudFR5cGUsci5uZ0NvbnRlbnRTZWxlY3RvcnM9ZS5uZ0NvbnRlbnRTZWxlY3RvcnMsci5pbnB1dHM9ZS5pbnB1dHMsci5vdXRwdXRzPWUub3V0cHV0cyxyfXJldHVybiBPYmplY3Qoci5fX2V4dGVuZHMpKGUsdCksZS5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiB0aGlzLmZhY3RvcnkuY3JlYXRlKHQsZSxuLHJ8fHRoaXMubmdNb2R1bGUpfSxlfShYZSk7ZnVuY3Rpb24gdW4oKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV19dmFyIGxuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLm5hdGl2ZUVsZW1lbnQ9dH1yZXR1cm4gdC5fX05HX0VMRU1FTlRfSURfXz1mdW5jdGlvbigpe3JldHVybiBzbih0KX0sdH0oKSxzbj11bixjbj1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe319KCksZm49ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXt9fSgpLGhuPWZ1bmN0aW9uKHQpe3JldHVybiB0W3QuSW1wb3J0YW50PTFdPSJJbXBvcnRhbnQiLHRbdC5EYXNoQ2FzZT0yXT0iRGFzaENhc2UiLHR9KHt9KSxwbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuX19OR19FTEVNRU5UX0lEX189ZnVuY3Rpb24oKXtyZXR1cm4gZG4oKX0sdH0oKSxkbj11bixnbj1uZXcoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7dGhpcy5mdWxsPXQsdGhpcy5tYWpvcj10LnNwbGl0KCIuIilbMF0sdGhpcy5taW5vcj10LnNwbGl0KCIuIilbMV0sdGhpcy5wYXRjaD10LnNwbGl0KCIuIikuc2xpY2UoMikuam9pbigiLiIpfX0oKSkoIjguMi4xNCIpLHZuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuc3VwcG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIFdlKHQpfSx0LnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBtbih0KX0sdH0oKSx5bj1mdW5jdGlvbih0LGUpe3JldHVybiBlfSxtbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5sZW5ndGg9MCx0aGlzLl9saW5rZWRSZWNvcmRzPW51bGwsdGhpcy5fdW5saW5rZWRSZWNvcmRzPW51bGwsdGhpcy5fcHJldmlvdXNJdEhlYWQ9bnVsbCx0aGlzLl9pdEhlYWQ9bnVsbCx0aGlzLl9pdFRhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPW51bGwsdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX21vdmVzSGVhZD1udWxsLHRoaXMuX21vdmVzVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsLHRoaXMuX3JlbW92YWxzVGFpbD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9bnVsbCx0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGwsdGhpcy5fdHJhY2tCeUZuPXR8fHlufXJldHVybiB0LnByb3RvdHlwZS5mb3JFYWNoSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9pdEhlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0KXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hPcGVyYXRpb249ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2l0SGVhZCxuPXRoaXMuX3JlbW92YWxzSGVhZCxyPTAsbz1udWxsO2V8fG47KXt2YXIgaT0hbnx8ZSYmZS5jdXJyZW50SW5kZXg8eG4obixyLG8pP2U6bixhPXhuKGkscixvKSx1PWkuY3VycmVudEluZGV4O2lmKGk9PT1uKXItLSxuPW4uX25leHRSZW1vdmVkO2Vsc2UgaWYoZT1lLl9uZXh0LG51bGw9PWkucHJldmlvdXNJbmRleClyKys7ZWxzZXtvfHwobz1bXSk7dmFyIGw9YS1yLHM9dS1yO2lmKGwhPXMpe2Zvcih2YXIgYz0wO2M8bDtjKyspe3ZhciBmPWM8by5sZW5ndGg/b1tjXTpvW2NdPTAsaD1mK2M7czw9aCYmaDxsJiYob1tjXT1mKzEpfW9baS5wcmV2aW91c0luZGV4XT1zLWx9fWEhPT11JiZ0KGksYSx1KX19LHQucHJvdG90eXBlLmZvckVhY2hQcmV2aW91c0l0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fcHJldmlvdXNJdEhlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0UHJldmlvdXMpdChlKX0sdC5wcm90b3R5cGUuZm9yRWFjaEFkZGVkSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dEFkZGVkKXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hNb3ZlZEl0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fbW92ZXNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dE1vdmVkKXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hSZW1vdmVkSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9yZW1vdmFsc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0UmVtb3ZlZCl0KGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoSWRlbnRpdHlDaGFuZ2U9ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZDtudWxsIT09ZTtlPWUuX25leHRJZGVudGl0eUNoYW5nZSl0KGUpfSx0LnByb3RvdHlwZS5kaWZmPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQmJih0PVtdKSwhV2UodCkpdGhyb3cgbmV3IEVycm9yKCJFcnJvciB0cnlpbmcgdG8gZGlmZiAnIit5dCh0KSsiJy4gT25seSBhcnJheXMgYW5kIGl0ZXJhYmxlcyBhcmUgYWxsb3dlZCIpO3JldHVybiB0aGlzLmNoZWNrKHQpP3RoaXM6bnVsbH0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5jaGVjaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX3Jlc2V0KCk7dmFyIG4scixvLGk9dGhpcy5faXRIZWFkLGE9ITE7aWYoQXJyYXkuaXNBcnJheSh0KSl7dGhpcy5sZW5ndGg9dC5sZW5ndGg7Zm9yKHZhciB1PTA7dTx0aGlzLmxlbmd0aDt1Kyspbz10aGlzLl90cmFja0J5Rm4odSxyPXRbdV0pLG51bGwhPT1pJiZaZShpLnRyYWNrQnlJZCxvKT8oYSYmKGk9dGhpcy5fdmVyaWZ5UmVpbnNlcnRpb24oaSxyLG8sdSkpLFplKGkuaXRlbSxyKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UoaSxyKSk6KGk9dGhpcy5fbWlzbWF0Y2goaSxyLG8sdSksYT0hMCksaT1pLl9uZXh0fWVsc2Ugbj0wLGZ1bmN0aW9uKHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyllKHRbbl0pO2Vsc2UgZm9yKHZhciByPXRbQmUoKV0oKSxvPXZvaWQgMDshKG89ci5uZXh0KCkpLmRvbmU7KWUoby52YWx1ZSl9KHQsKGZ1bmN0aW9uKHQpe289ZS5fdHJhY2tCeUZuKG4sdCksbnVsbCE9PWkmJlplKGkudHJhY2tCeUlkLG8pPyhhJiYoaT1lLl92ZXJpZnlSZWluc2VydGlvbihpLHQsbyxuKSksWmUoaS5pdGVtLHQpfHxlLl9hZGRJZGVudGl0eUNoYW5nZShpLHQpKTooaT1lLl9taXNtYXRjaChpLHQsbyxuKSxhPSEwKSxpPWkuX25leHQsbisrfSkpLHRoaXMubGVuZ3RoPW47cmV0dXJuIHRoaXMuX3RydW5jYXRlKGkpLHRoaXMuY29sbGVjdGlvbj10LHRoaXMuaXNEaXJ0eX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpc0RpcnR5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fbW92ZXNIZWFkfHxudWxsIT09dGhpcy5fcmVtb3ZhbHNIZWFkfHxudWxsIT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5fcmVzZXQ9ZnVuY3Rpb24oKXtpZih0aGlzLmlzRGlydHkpe3ZhciB0PXZvaWQgMCxlPXZvaWQgMDtmb3IodD10aGlzLl9wcmV2aW91c0l0SGVhZD10aGlzLl9pdEhlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0KXQuX25leHRQcmV2aW91cz10Ll9uZXh0O2Zvcih0PXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0QWRkZWQpdC5wcmV2aW91c0luZGV4PXQuY3VycmVudEluZGV4O2Zvcih0aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0PXRoaXMuX21vdmVzSGVhZDtudWxsIT09dDt0PWUpdC5wcmV2aW91c0luZGV4PXQuY3VycmVudEluZGV4LGU9dC5fbmV4dE1vdmVkO3RoaXMuX21vdmVzSGVhZD10aGlzLl9tb3Zlc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9dGhpcy5fcmVtb3ZhbHNUYWlsPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZD10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGx9fSx0LnByb3RvdHlwZS5fbWlzbWF0Y2g9ZnVuY3Rpb24odCxlLG4scil7dmFyIG87cmV0dXJuIG51bGw9PT10P289dGhpcy5faXRUYWlsOihvPXQuX3ByZXYsdGhpcy5fcmVtb3ZlKHQpKSxudWxsIT09KHQ9bnVsbD09PXRoaXMuX2xpbmtlZFJlY29yZHM/bnVsbDp0aGlzLl9saW5rZWRSZWNvcmRzLmdldChuLHIpKT8oWmUodC5pdGVtLGUpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZSh0LGUpLHRoaXMuX21vdmVBZnRlcih0LG8scikpOm51bGwhPT0odD1udWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5rZWRSZWNvcmRzLmdldChuLG51bGwpKT8oWmUodC5pdGVtLGUpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZSh0LGUpLHRoaXMuX3JlaW5zZXJ0QWZ0ZXIodCxvLHIpKTp0PXRoaXMuX2FkZEFmdGVyKG5ldyBfbihlLG4pLG8sciksdH0sdC5wcm90b3R5cGUuX3ZlcmlmeVJlaW5zZXJ0aW9uPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPW51bGw9PT10aGlzLl91bmxpbmtlZFJlY29yZHM/bnVsbDp0aGlzLl91bmxpbmtlZFJlY29yZHMuZ2V0KG4sbnVsbCk7cmV0dXJuIG51bGwhPT1vP3Q9dGhpcy5fcmVpbnNlcnRBZnRlcihvLHQuX3ByZXYscik6dC5jdXJyZW50SW5kZXghPXImJih0LmN1cnJlbnRJbmRleD1yLHRoaXMuX2FkZFRvTW92ZXModCxyKSksdH0sdC5wcm90b3R5cGUuX3RydW5jYXRlPWZ1bmN0aW9uKHQpe2Zvcig7bnVsbCE9PXQ7KXt2YXIgZT10Ll9uZXh0O3RoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5fdW5saW5rKHQpKSx0PWV9bnVsbCE9PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmdGhpcy5fdW5saW5rZWRSZWNvcmRzLmNsZWFyKCksbnVsbCE9PXRoaXMuX2FkZGl0aW9uc1RhaWwmJih0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9bnVsbCksbnVsbCE9PXRoaXMuX21vdmVzVGFpbCYmKHRoaXMuX21vdmVzVGFpbC5fbmV4dE1vdmVkPW51bGwpLG51bGwhPT10aGlzLl9pdFRhaWwmJih0aGlzLl9pdFRhaWwuX25leHQ9bnVsbCksbnVsbCE9PXRoaXMuX3JlbW92YWxzVGFpbCYmKHRoaXMuX3JlbW92YWxzVGFpbC5fbmV4dFJlbW92ZWQ9bnVsbCksbnVsbCE9PXRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwmJih0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbCl9LHQucHJvdG90eXBlLl9yZWluc2VydEFmdGVyPWZ1bmN0aW9uKHQsZSxuKXtudWxsIT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiZ0aGlzLl91bmxpbmtlZFJlY29yZHMucmVtb3ZlKHQpO3ZhciByPXQuX3ByZXZSZW1vdmVkLG89dC5fbmV4dFJlbW92ZWQ7cmV0dXJuIG51bGw9PT1yP3RoaXMuX3JlbW92YWxzSGVhZD1vOnIuX25leHRSZW1vdmVkPW8sbnVsbD09PW8/dGhpcy5fcmVtb3ZhbHNUYWlsPXI6by5fcHJldlJlbW92ZWQ9cix0aGlzLl9pbnNlcnRBZnRlcih0LGUsbiksdGhpcy5fYWRkVG9Nb3Zlcyh0LG4pLHR9LHQucHJvdG90eXBlLl9tb3ZlQWZ0ZXI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLl91bmxpbmsodCksdGhpcy5faW5zZXJ0QWZ0ZXIodCxlLG4pLHRoaXMuX2FkZFRvTW92ZXModCxuKSx0fSx0LnByb3RvdHlwZS5fYWRkQWZ0ZXI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLl9pbnNlcnRBZnRlcih0LGUsbiksdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsPT09dGhpcy5fYWRkaXRpb25zVGFpbD90aGlzLl9hZGRpdGlvbnNIZWFkPXQ6dGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPXQsdH0sdC5wcm90b3R5cGUuX2luc2VydEFmdGVyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1udWxsPT09ZT90aGlzLl9pdEhlYWQ6ZS5fbmV4dDtyZXR1cm4gdC5fbmV4dD1yLHQuX3ByZXY9ZSxudWxsPT09cj90aGlzLl9pdFRhaWw9dDpyLl9wcmV2PXQsbnVsbD09PWU/dGhpcy5faXRIZWFkPXQ6ZS5fbmV4dD10LG51bGw9PT10aGlzLl9saW5rZWRSZWNvcmRzJiYodGhpcy5fbGlua2VkUmVjb3Jkcz1uZXcgYm4pLHRoaXMuX2xpbmtlZFJlY29yZHMucHV0KHQpLHQuY3VycmVudEluZGV4PW4sdH0sdC5wcm90b3R5cGUuX3JlbW92ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYWRkVG9SZW1vdmFscyh0aGlzLl91bmxpbmsodCkpfSx0LnByb3RvdHlwZS5fdW5saW5rPWZ1bmN0aW9uKHQpe251bGwhPT10aGlzLl9saW5rZWRSZWNvcmRzJiZ0aGlzLl9saW5rZWRSZWNvcmRzLnJlbW92ZSh0KTt2YXIgZT10Ll9wcmV2LG49dC5fbmV4dDtyZXR1cm4gbnVsbD09PWU/dGhpcy5faXRIZWFkPW46ZS5fbmV4dD1uLG51bGw9PT1uP3RoaXMuX2l0VGFpbD1lOm4uX3ByZXY9ZSx0fSx0LnByb3RvdHlwZS5fYWRkVG9Nb3Zlcz1mdW5jdGlvbih0LGUpe3JldHVybiB0LnByZXZpb3VzSW5kZXg9PT1lP3Q6KHRoaXMuX21vdmVzVGFpbD1udWxsPT09dGhpcy5fbW92ZXNUYWlsP3RoaXMuX21vdmVzSGVhZD10OnRoaXMuX21vdmVzVGFpbC5fbmV4dE1vdmVkPXQsdCl9LHQucHJvdG90eXBlLl9hZGRUb1JlbW92YWxzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiYodGhpcy5fdW5saW5rZWRSZWNvcmRzPW5ldyBibiksdGhpcy5fdW5saW5rZWRSZWNvcmRzLnB1dCh0KSx0LmN1cnJlbnRJbmRleD1udWxsLHQuX25leHRSZW1vdmVkPW51bGwsbnVsbD09PXRoaXMuX3JlbW92YWxzVGFpbD8odGhpcy5fcmVtb3ZhbHNUYWlsPXRoaXMuX3JlbW92YWxzSGVhZD10LHQuX3ByZXZSZW1vdmVkPW51bGwpOih0Ll9wcmV2UmVtb3ZlZD10aGlzLl9yZW1vdmFsc1RhaWwsdGhpcy5fcmVtb3ZhbHNUYWlsPXRoaXMuX3JlbW92YWxzVGFpbC5fbmV4dFJlbW92ZWQ9dCksdH0sdC5wcm90b3R5cGUuX2FkZElkZW50aXR5Q2hhbmdlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuaXRlbT1lLHRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWw9bnVsbD09PXRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWw/dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZD10OnRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwuX25leHRJZGVudGl0eUNoYW5nZT10LHR9LHR9KCksX249ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlKXt0aGlzLml0ZW09dCx0aGlzLnRyYWNrQnlJZD1lLHRoaXMuY3VycmVudEluZGV4PW51bGwsdGhpcy5wcmV2aW91c0luZGV4PW51bGwsdGhpcy5fbmV4dFByZXZpb3VzPW51bGwsdGhpcy5fcHJldj1udWxsLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wcmV2RHVwPW51bGwsdGhpcy5fbmV4dER1cD1udWxsLHRoaXMuX3ByZXZSZW1vdmVkPW51bGwsdGhpcy5fbmV4dFJlbW92ZWQ9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0TW92ZWQ9bnVsbCx0aGlzLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbH19KCksd249ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5faGVhZD1udWxsLHRoaXMuX3RhaWw9bnVsbH1yZXR1cm4gdC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQpe251bGw9PT10aGlzLl9oZWFkPyh0aGlzLl9oZWFkPXRoaXMuX3RhaWw9dCx0Ll9uZXh0RHVwPW51bGwsdC5fcHJldkR1cD1udWxsKToodGhpcy5fdGFpbC5fbmV4dER1cD10LHQuX3ByZXZEdXA9dGhpcy5fdGFpbCx0Ll9uZXh0RHVwPW51bGwsdGhpcy5fdGFpbD10KX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSl7dmFyIG47Zm9yKG49dGhpcy5faGVhZDtudWxsIT09bjtuPW4uX25leHREdXApaWYoKG51bGw9PT1lfHxlPD1uLmN1cnJlbnRJbmRleCkmJlplKG4udHJhY2tCeUlkLHQpKXJldHVybiBuO3JldHVybiBudWxsfSx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dC5fcHJldkR1cCxuPXQuX25leHREdXA7cmV0dXJuIG51bGw9PT1lP3RoaXMuX2hlYWQ9bjplLl9uZXh0RHVwPW4sbnVsbD09PW4/dGhpcy5fdGFpbD1lOm4uX3ByZXZEdXA9ZSxudWxsPT09dGhpcy5faGVhZH0sdH0oKSxibj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLm1hcD1uZXcgTWFwfXJldHVybiB0LnByb3RvdHlwZS5wdXQ9ZnVuY3Rpb24odCl7dmFyIGU9dC50cmFja0J5SWQsbj10aGlzLm1hcC5nZXQoZSk7bnx8KG49bmV3IHduLHRoaXMubWFwLnNldChlLG4pKSxuLmFkZCh0KX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5tYXAuZ2V0KHQpO3JldHVybiBuP24uZ2V0KHQsZSk6bnVsbH0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXQudHJhY2tCeUlkO3JldHVybiB0aGlzLm1hcC5nZXQoZSkucmVtb3ZlKHQpJiZ0aGlzLm1hcC5kZWxldGUoZSksdH0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpc0VtcHR5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLm1hcC5zaXplfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5tYXAuY2xlYXIoKX0sdH0oKTtmdW5jdGlvbiB4bih0LGUsbil7dmFyIHI9dC5wcmV2aW91c0luZGV4O2lmKG51bGw9PT1yKXJldHVybiByO3ZhciBvPTA7cmV0dXJuIG4mJnI8bi5sZW5ndGgmJihvPW5bcl0pLHIrZStvfXZhciBDbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnN1cHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgTWFwfHxRZSh0KX0sdC5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBTbn0sdH0oKSxTbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9yZWNvcmRzPW5ldyBNYXAsdGhpcy5fbWFwSGVhZD1udWxsLHRoaXMuX2FwcGVuZEFmdGVyPW51bGwsdGhpcy5fcHJldmlvdXNNYXBIZWFkPW51bGwsdGhpcy5fY2hhbmdlc0hlYWQ9bnVsbCx0aGlzLl9jaGFuZ2VzVGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9bnVsbCx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPW51bGwsdGhpcy5fcmVtb3ZhbHNUYWlsPW51bGx9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaXNEaXJ0eSIse2dldDpmdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy5fYWRkaXRpb25zSGVhZHx8bnVsbCE9PXRoaXMuX2NoYW5nZXNIZWFkfHxudWxsIT09dGhpcy5fcmVtb3ZhbHNIZWFkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmZvckVhY2hJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX21hcEhlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0KXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hQcmV2aW91c0l0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fcHJldmlvdXNNYXBIZWFkO251bGwhPT1lO2U9ZS5fbmV4dFByZXZpb3VzKXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hDaGFuZ2VkSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09ZTtlPWUuX25leHRDaGFuZ2VkKXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hBZGRlZEl0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT09ZTtlPWUuX25leHRBZGRlZCl0KGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoUmVtb3ZlZEl0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fcmVtb3ZhbHNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dFJlbW92ZWQpdChlKX0sdC5wcm90b3R5cGUuZGlmZj1mdW5jdGlvbih0KXtpZih0KXtpZighKHQgaW5zdGFuY2VvZiBNYXB8fFFlKHQpKSl0aHJvdyBuZXcgRXJyb3IoIkVycm9yIHRyeWluZyB0byBkaWZmICciK3l0KHQpKyInLiBPbmx5IG1hcHMgYW5kIG9iamVjdHMgYXJlIGFsbG93ZWQiKX1lbHNlIHQ9bmV3IE1hcDtyZXR1cm4gdGhpcy5jaGVjayh0KT90aGlzOm51bGx9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuY2hlY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9yZXNldCgpO3ZhciBuPXRoaXMuX21hcEhlYWQ7aWYodGhpcy5fYXBwZW5kQWZ0ZXI9bnVsbCx0aGlzLl9mb3JFYWNoKHQsKGZ1bmN0aW9uKHQscil7aWYobiYmbi5rZXk9PT1yKWUuX21heWJlQWRkVG9DaGFuZ2VzKG4sdCksZS5fYXBwZW5kQWZ0ZXI9bixuPW4uX25leHQ7ZWxzZXt2YXIgbz1lLl9nZXRPckNyZWF0ZVJlY29yZEZvcktleShyLHQpO249ZS5faW5zZXJ0QmVmb3JlT3JBcHBlbmQobixvKX19KSksbil7bi5fcHJldiYmKG4uX3ByZXYuX25leHQ9bnVsbCksdGhpcy5fcmVtb3ZhbHNIZWFkPW47Zm9yKHZhciByPW47bnVsbCE9PXI7cj1yLl9uZXh0UmVtb3ZlZClyPT09dGhpcy5fbWFwSGVhZCYmKHRoaXMuX21hcEhlYWQ9bnVsbCksdGhpcy5fcmVjb3Jkcy5kZWxldGUoci5rZXkpLHIuX25leHRSZW1vdmVkPXIuX25leHQsci5wcmV2aW91c1ZhbHVlPXIuY3VycmVudFZhbHVlLHIuY3VycmVudFZhbHVlPW51bGwsci5fcHJldj1udWxsLHIuX25leHQ9bnVsbH1yZXR1cm4gdGhpcy5fY2hhbmdlc1RhaWwmJih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9bnVsbCksdGhpcy5fYWRkaXRpb25zVGFpbCYmKHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1udWxsKSx0aGlzLmlzRGlydHl9LHQucHJvdG90eXBlLl9pbnNlcnRCZWZvcmVPckFwcGVuZD1mdW5jdGlvbih0LGUpe2lmKHQpe3ZhciBuPXQuX3ByZXY7cmV0dXJuIGUuX25leHQ9dCxlLl9wcmV2PW4sdC5fcHJldj1lLG4mJihuLl9uZXh0PWUpLHQ9PT10aGlzLl9tYXBIZWFkJiYodGhpcy5fbWFwSGVhZD1lKSx0aGlzLl9hcHBlbmRBZnRlcj10LHR9cmV0dXJuIHRoaXMuX2FwcGVuZEFmdGVyPyh0aGlzLl9hcHBlbmRBZnRlci5fbmV4dD1lLGUuX3ByZXY9dGhpcy5fYXBwZW5kQWZ0ZXIpOnRoaXMuX21hcEhlYWQ9ZSx0aGlzLl9hcHBlbmRBZnRlcj1lLG51bGx9LHQucHJvdG90eXBlLl9nZXRPckNyZWF0ZVJlY29yZEZvcktleT1mdW5jdGlvbih0LGUpe2lmKHRoaXMuX3JlY29yZHMuaGFzKHQpKXt2YXIgbj10aGlzLl9yZWNvcmRzLmdldCh0KTt0aGlzLl9tYXliZUFkZFRvQ2hhbmdlcyhuLGUpO3ZhciByPW4uX3ByZXYsbz1uLl9uZXh0O3JldHVybiByJiYoci5fbmV4dD1vKSxvJiYoby5fcHJldj1yKSxuLl9uZXh0PW51bGwsbi5fcHJldj1udWxsLG59dmFyIGk9bmV3IEVuKHQpO3JldHVybiB0aGlzLl9yZWNvcmRzLnNldCh0LGkpLGkuY3VycmVudFZhbHVlPWUsdGhpcy5fYWRkVG9BZGRpdGlvbnMoaSksaX0sdC5wcm90b3R5cGUuX3Jlc2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5pc0RpcnR5KXt2YXIgdD12b2lkIDA7Zm9yKHRoaXMuX3ByZXZpb3VzTWFwSGVhZD10aGlzLl9tYXBIZWFkLHQ9dGhpcy5fcHJldmlvdXNNYXBIZWFkO251bGwhPT10O3Q9dC5fbmV4dCl0Ll9uZXh0UHJldmlvdXM9dC5fbmV4dDtmb3IodD10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09dDt0PXQuX25leHRDaGFuZ2VkKXQucHJldmlvdXNWYWx1ZT10LmN1cnJlbnRWYWx1ZTtmb3IodD10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPXQ7dD10Ll9uZXh0QWRkZWQpdC5wcmV2aW91c1ZhbHVlPXQuY3VycmVudFZhbHVlO3RoaXMuX2NoYW5nZXNIZWFkPXRoaXMuX2NoYW5nZXNUYWlsPW51bGwsdGhpcy5fYWRkaXRpb25zSGVhZD10aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPW51bGx9fSx0LnByb3RvdHlwZS5fbWF5YmVBZGRUb0NoYW5nZXM9ZnVuY3Rpb24odCxlKXtaZShlLHQuY3VycmVudFZhbHVlKXx8KHQucHJldmlvdXNWYWx1ZT10LmN1cnJlbnRWYWx1ZSx0LmN1cnJlbnRWYWx1ZT1lLHRoaXMuX2FkZFRvQ2hhbmdlcyh0KSl9LHQucHJvdG90eXBlLl9hZGRUb0FkZGl0aW9ucz1mdW5jdGlvbih0KXtudWxsPT09dGhpcy5fYWRkaXRpb25zSGVhZD90aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9dDoodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPXQsdGhpcy5fYWRkaXRpb25zVGFpbD10KX0sdC5wcm90b3R5cGUuX2FkZFRvQ2hhbmdlcz1mdW5jdGlvbih0KXtudWxsPT09dGhpcy5fY2hhbmdlc0hlYWQ/dGhpcy5fY2hhbmdlc0hlYWQ9dGhpcy5fY2hhbmdlc1RhaWw9dDoodGhpcy5fY2hhbmdlc1RhaWwuX25leHRDaGFuZ2VkPXQsdGhpcy5fY2hhbmdlc1RhaWw9dCl9LHQucHJvdG90eXBlLl9mb3JFYWNoPWZ1bmN0aW9uKHQsZSl7dCBpbnN0YW5jZW9mIE1hcD90LmZvckVhY2goZSk6T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24obil7cmV0dXJuIGUodFtuXSxuKX0pKX0sdH0oKSxFbj1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXt0aGlzLmtleT10LHRoaXMucHJldmlvdXNWYWx1ZT1udWxsLHRoaXMuY3VycmVudFZhbHVlPW51bGwsdGhpcy5fbmV4dFByZXZpb3VzPW51bGwsdGhpcy5fbmV4dD1udWxsLHRoaXMuX3ByZXY9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0UmVtb3ZlZD1udWxsLHRoaXMuX25leHRDaGFuZ2VkPW51bGx9fSgpLE9uPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmZhY3Rvcmllcz10fXJldHVybiB0LmNyZWF0ZT1mdW5jdGlvbihlLG4pe2lmKG51bGwhPW4pe3ZhciByPW4uZmFjdG9yaWVzLnNsaWNlKCk7ZT1lLmNvbmNhdChyKX1yZXR1cm4gbmV3IHQoZSl9LHQuZXh0ZW5kPWZ1bmN0aW9uKGUpe3JldHVybntwcm92aWRlOnQsdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtpZighbil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBleHRlbmQgSXRlcmFibGVEaWZmZXJzIHdpdGhvdXQgYSBwYXJlbnQgaW5qZWN0b3IiKTtyZXR1cm4gdC5jcmVhdGUoZSxuKX0sZGVwczpbW3QsbmV3IGZ0LG5ldyBzdF1dfX0sdC5wcm90b3R5cGUuZmluZD1mdW5jdGlvbih0KXt2YXIgZSxuPXRoaXMuZmFjdG9yaWVzLmZpbmQoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnN1cHBvcnRzKHQpfSkpO2lmKG51bGwhPW4pcmV0dXJuIG47dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBhIGRpZmZlciBzdXBwb3J0aW5nIG9iamVjdCAnIit0KyInIG9mIHR5cGUgJyIrKChlPXQpLm5hbWV8fHR5cGVvZiBlKSsiJyIpfSx0Lm5nSW5qZWN0YWJsZURlZj1kdCh7dG9rZW46dCxwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KFtuZXcgdm5dKX19KSx0fSgpLFRuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmZhY3Rvcmllcz10fXJldHVybiB0LmNyZWF0ZT1mdW5jdGlvbihlLG4pe2lmKG4pe3ZhciByPW4uZmFjdG9yaWVzLnNsaWNlKCk7ZT1lLmNvbmNhdChyKX1yZXR1cm4gbmV3IHQoZSl9LHQuZXh0ZW5kPWZ1bmN0aW9uKGUpe3JldHVybntwcm92aWRlOnQsdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtpZighbil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBleHRlbmQgS2V5VmFsdWVEaWZmZXJzIHdpdGhvdXQgYSBwYXJlbnQgaW5qZWN0b3IiKTtyZXR1cm4gdC5jcmVhdGUoZSxuKX0sZGVwczpbW3QsbmV3IGZ0LG5ldyBzdF1dfX0sdC5wcm90b3R5cGUuZmluZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZhY3Rvcmllcy5maW5kKChmdW5jdGlvbihlKXtyZXR1cm4gZS5zdXBwb3J0cyh0KX0pKTtpZihlKXJldHVybiBlO3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgYSBkaWZmZXIgc3VwcG9ydGluZyBvYmplY3QgJyIrdCsiJyIpfSx0Lm5nSW5qZWN0YWJsZURlZj1kdCh7dG9rZW46dCxwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KFtuZXcgQ25dKX19KSx0fSgpLFBuPVtuZXcgQ25dLGtuPW5ldyBPbihbbmV3IHZuXSksQW49bmV3IFRuKFBuKSxJbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuX19OR19FTEVNRU5UX0lEX189ZnVuY3Rpb24oKXtyZXR1cm4gUm4odCxsbil9LHR9KCksUm49dW4sTW49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0Ll9fTkdfRUxFTUVOVF9JRF9fPWZ1bmN0aW9uKCl7cmV0dXJuIGpuKHQsbG4pfSx0fSgpLGpuPXVuO2Z1bmN0aW9uIE5uKHQsZSxuLHIpe3ZhciBvPSJFeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yOiBFeHByZXNzaW9uIGhhcyBjaGFuZ2VkIGFmdGVyIGl0IHdhcyBjaGVja2VkLiBQcmV2aW91cyB2YWx1ZTogJyIrZSsiJy4gQ3VycmVudCB2YWx1ZTogJyIrbisiJy4iO3JldHVybiByJiYobys9IiBJdCBzZWVtcyBsaWtlIHRoZSB2aWV3IGhhcyBiZWVuIGNyZWF0ZWQgYWZ0ZXIgaXRzIHBhcmVudCBhbmQgaXRzIGNoaWxkcmVuIGhhdmUgYmVlbiBkaXJ0eSBjaGVja2VkLiBIYXMgaXQgYmVlbiBjcmVhdGVkIGluIGEgY2hhbmdlIGRldGVjdGlvbiBob29rID8iKSxmdW5jdGlvbih0LGUpe3ZhciBuPW5ldyBFcnJvcih0KTtyZXR1cm4gRG4obixlKSxufShvLHQpfWZ1bmN0aW9uIERuKHQsZSl7dFtxdF09ZSx0W1F0XT1lLmxvZ0Vycm9yLmJpbmQoZSl9ZnVuY3Rpb24gVW4odCl7cmV0dXJuIG5ldyBFcnJvcigiVmlld0Rlc3Ryb3llZEVycm9yOiBBdHRlbXB0IHRvIHVzZSBhIGRlc3Ryb3llZCB2aWV3OiAiK3QpfWZ1bmN0aW9uIExuKHQsZSxuKXt2YXIgcj10LnN0YXRlLG89MTc5MiZyO3JldHVybiBvPT09ZT8odC5zdGF0ZT0tMTc5MyZyfG4sdC5pbml0SW5kZXg9LTEsITApOm89PT1ufWZ1bmN0aW9uIFZuKHQsZSxuKXtyZXR1cm4oMTc5MiZ0LnN0YXRlKT09PWUmJnQuaW5pdEluZGV4PD1uJiYodC5pbml0SW5kZXg9bisxLCEwKX1mdW5jdGlvbiBIbih0LGUpe3JldHVybiB0Lm5vZGVzW2VdfWZ1bmN0aW9uIHpuKHQsZSl7cmV0dXJuIHQubm9kZXNbZV19ZnVuY3Rpb24gRm4odCxlKXtyZXR1cm4gdC5ub2Rlc1tlXX1mdW5jdGlvbiBCbih0LGUpe3JldHVybiB0Lm5vZGVzW2VdfWZ1bmN0aW9uIFpuKHQsZSl7cmV0dXJuIHQubm9kZXNbZV19dmFyIEduPXtzZXRDdXJyZW50Tm9kZTp2b2lkIDAsY3JlYXRlUm9vdFZpZXc6dm9pZCAwLGNyZWF0ZUVtYmVkZGVkVmlldzp2b2lkIDAsY3JlYXRlQ29tcG9uZW50Vmlldzp2b2lkIDAsY3JlYXRlTmdNb2R1bGVSZWY6dm9pZCAwLG92ZXJyaWRlUHJvdmlkZXI6dm9pZCAwLG92ZXJyaWRlQ29tcG9uZW50Vmlldzp2b2lkIDAsY2xlYXJPdmVycmlkZXM6dm9pZCAwLGNoZWNrQW5kVXBkYXRlVmlldzp2b2lkIDAsY2hlY2tOb0NoYW5nZXNWaWV3OnZvaWQgMCxkZXN0cm95Vmlldzp2b2lkIDAscmVzb2x2ZURlcDp2b2lkIDAsY3JlYXRlRGVidWdDb250ZXh0OnZvaWQgMCxoYW5kbGVFdmVudDp2b2lkIDAsdXBkYXRlRGlyZWN0aXZlczp2b2lkIDAsdXBkYXRlUmVuZGVyZXI6dm9pZCAwLGRpcnR5UGFyZW50UXVlcmllczp2b2lkIDB9LHFuPWZ1bmN0aW9uKCl7fSxXbj1uZXcgTWFwO2Z1bmN0aW9uIFFuKHQpe3ZhciBlPVduLmdldCh0KTtyZXR1cm4gZXx8KGU9eXQodCkrIl8iK1duLnNpemUsV24uc2V0KHQsZSkpLGV9dmFyIEtuPSIkJHVuZGVmaW5lZCIsWW49IiQkZW1wdHkiO2Z1bmN0aW9uIEpuKHQpe3JldHVybntpZDpLbixzdHlsZXM6dC5zdHlsZXMsZW5jYXBzdWxhdGlvbjp0LmVuY2Fwc3VsYXRpb24sZGF0YTp0LmRhdGF9fXZhciAkbj0wO2Z1bmN0aW9uIFhuKHQsZSxuLHIpe3JldHVybiEoISgyJnQuc3RhdGUpJiZaZSh0Lm9sZFZhbHVlc1tlLmJpbmRpbmdJbmRleCtuXSxyKSl9ZnVuY3Rpb24gdHIodCxlLG4scil7cmV0dXJuISFYbih0LGUsbixyKSYmKHQub2xkVmFsdWVzW2UuYmluZGluZ0luZGV4K25dPXIsITApfWZ1bmN0aW9uIGVyKHQsZSxuLHIpe3ZhciBvPXQub2xkVmFsdWVzW2UuYmluZGluZ0luZGV4K25dO2lmKDEmdC5zdGF0ZXx8IUdlKG8scikpe3ZhciBpPWUuYmluZGluZ3Nbbl0ubmFtZTt0aHJvdyBObihHbi5jcmVhdGVEZWJ1Z0NvbnRleHQodCxlLm5vZGVJbmRleCksaSsiOiAiK28saSsiOiAiK3IsMCE9KDEmdC5zdGF0ZSkpfX1mdW5jdGlvbiBucih0KXtmb3IodmFyIGU9dDtlOykyJmUuZGVmLmZsYWdzJiYoZS5zdGF0ZXw9OCksZT1lLnZpZXdDb250YWluZXJQYXJlbnR8fGUucGFyZW50fWZ1bmN0aW9uIHJyKHQsZSl7Zm9yKHZhciBuPXQ7biYmbiE9PWU7KW4uc3RhdGV8PTY0LG49bi52aWV3Q29udGFpbmVyUGFyZW50fHxuLnBhcmVudH1mdW5jdGlvbiBvcih0LGUsbixyKXt0cnl7cmV0dXJuIG5yKDMzNTU0NDMyJnQuZGVmLm5vZGVzW2VdLmZsYWdzP3puKHQsZSkuY29tcG9uZW50Vmlldzp0KSxHbi5oYW5kbGVFdmVudCh0LGUsbixyKX1jYXRjaChvKXt0LnJvb3QuZXJyb3JIYW5kbGVyLmhhbmRsZUVycm9yKG8pfX1mdW5jdGlvbiBpcih0KXtyZXR1cm4gdC5wYXJlbnQ/em4odC5wYXJlbnQsdC5wYXJlbnROb2RlRGVmLm5vZGVJbmRleCk6bnVsbH1mdW5jdGlvbiBhcih0KXtyZXR1cm4gdC5wYXJlbnQ/dC5wYXJlbnROb2RlRGVmLnBhcmVudDpudWxsfWZ1bmN0aW9uIHVyKHQsZSl7c3dpdGNoKDIwMTM0NzA2NyZlLmZsYWdzKXtjYXNlIDE6cmV0dXJuIHpuKHQsZS5ub2RlSW5kZXgpLnJlbmRlckVsZW1lbnQ7Y2FzZSAyOnJldHVybiBIbih0LGUubm9kZUluZGV4KS5yZW5kZXJUZXh0fX1mdW5jdGlvbiBscih0KXtyZXR1cm4hIXQucGFyZW50JiYhISgzMjc2OCZ0LnBhcmVudE5vZGVEZWYuZmxhZ3MpfWZ1bmN0aW9uIHNyKHQpe3JldHVybiEoIXQucGFyZW50fHwzMjc2OCZ0LnBhcmVudE5vZGVEZWYuZmxhZ3MpfWZ1bmN0aW9uIGNyKHQpe3ZhciBlPXt9LG49MCxvPXt9O3JldHVybiB0JiZ0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBpPU9iamVjdChyLl9fcmVhZCkodCwyKSxhPWlbMF0sdT1pWzFdOyJudW1iZXIiPT10eXBlb2YgYT8oZVthXT11LG58PWZ1bmN0aW9uKHQpe3JldHVybiAxPDx0JTMyfShhKSk6b1thXT11fSkpLHttYXRjaGVkUXVlcmllczplLHJlZmVyZW5jZXM6byxtYXRjaGVkUXVlcnlJZHM6bn19ZnVuY3Rpb24gZnIodCxlKXtyZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBuLG8saTtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT8oaT0obj1PYmplY3Qoci5fX3JlYWQpKHQsMikpWzBdLG89blsxXSk6KGk9MCxvPXQpLG8mJigiZnVuY3Rpb24iPT10eXBlb2Ygb3x8Im9iamVjdCI9PXR5cGVvZiBvKSYmZSYmT2JqZWN0Lg=="
}