3N2rk3yzChsJp4wCS5VLo5Q3ifLmDChfbzQ · data · qwer?main.e3350ff4d88d534234ef.js?4?3?0
{
    "qwer?main.e3350ff4d88d534234ef.js?4?3?0": "base64:ZGVmaW5lUHJvcGVydHkobyxSdCx7dmFsdWU6ZSxjb25maWd1cmFibGU6ITB9KSx7ZmxhZ3M6aSx0b2tlbjpvLHRva2VuS2V5OlFuKG8pfX0pKX1mdW5jdGlvbiBocih0LGUsbil7dmFyIHI9bi5yZW5kZXJQYXJlbnQ7cmV0dXJuIHI/MD09KDEmci5mbGFncyl8fDA9PSgzMzU1NDQzMiZyLmZsYWdzKXx8ci5lbGVtZW50LmNvbXBvbmVudFJlbmRlcmVyVHlwZSYmci5lbGVtZW50LmNvbXBvbmVudFJlbmRlcmVyVHlwZS5lbmNhcHN1bGF0aW9uPT09WnQuTmF0aXZlP3puKHQsbi5yZW5kZXJQYXJlbnQubm9kZUluZGV4KS5yZW5kZXJFbGVtZW50OnZvaWQgMDplfXZhciBwcj1uZXcgV2Vha01hcDtmdW5jdGlvbiBkcih0KXt2YXIgZT1wci5nZXQodCk7cmV0dXJuIGV8fCgoZT10KChmdW5jdGlvbigpe3JldHVybiBxbn0pKSkuZmFjdG9yeT10LHByLnNldCh0LGUpKSxlfWZ1bmN0aW9uIGdyKHQsZSxuLHIsbyl7Mz09PWUmJihuPXQucmVuZGVyZXIucGFyZW50Tm9kZSh1cih0LHQuZGVmLmxhc3RSZW5kZXJSb290Tm9kZSkpKSx2cih0LGUsMCx0LmRlZi5ub2Rlcy5sZW5ndGgtMSxuLHIsbyl9ZnVuY3Rpb24gdnIodCxlLG4scixvLGksYSl7Zm9yKHZhciB1PW47dTw9cjt1Kyspe3ZhciBsPXQuZGVmLm5vZGVzW3VdOzExJmwuZmxhZ3MmJm1yKHQsbCxlLG8saSxhKSx1Kz1sLmNoaWxkQ291bnR9fWZ1bmN0aW9uIHlyKHQsZSxuLHIsbyxpKXtmb3IodmFyIGE9dDthJiYhbHIoYSk7KWE9YS5wYXJlbnQ7Zm9yKHZhciB1PWEucGFyZW50LGw9YXIoYSkscz1sLm5vZGVJbmRleCtsLmNoaWxkQ291bnQsYz1sLm5vZGVJbmRleCsxO2M8PXM7YysrKXt2YXIgZj11LmRlZi5ub2Rlc1tjXTtmLm5nQ29udGVudEluZGV4PT09ZSYmbXIodSxmLG4scixvLGkpLGMrPWYuY2hpbGRDb3VudH1pZighdS5wYXJlbnQpe3ZhciBoPXQucm9vdC5wcm9qZWN0YWJsZU5vZGVzW2VdO2lmKGgpZm9yKGM9MDtjPGgubGVuZ3RoO2MrKylfcih0LGhbY10sbixyLG8saSl9fWZ1bmN0aW9uIG1yKHQsZSxuLHIsbyxpKXtpZig4JmUuZmxhZ3MpeXIodCxlLm5nQ29udGVudC5pbmRleCxuLHIsbyxpKTtlbHNle3ZhciBhPXVyKHQsZSk7aWYoMz09PW4mJjMzNTU0NDMyJmUuZmxhZ3MmJjQ4JmUuYmluZGluZ0ZsYWdzPygxNiZlLmJpbmRpbmdGbGFncyYmX3IodCxhLG4scixvLGkpLDMyJmUuYmluZGluZ0ZsYWdzJiZfcih6bih0LGUubm9kZUluZGV4KS5jb21wb25lbnRWaWV3LGEsbixyLG8saSkpOl9yKHQsYSxuLHIsbyxpKSwxNjc3NzIxNiZlLmZsYWdzKWZvcih2YXIgdT16bih0LGUubm9kZUluZGV4KS52aWV3Q29udGFpbmVyLl9lbWJlZGRlZFZpZXdzLGw9MDtsPHUubGVuZ3RoO2wrKylncih1W2xdLG4scixvLGkpOzEmZS5mbGFncyYmIWUuZWxlbWVudC5uYW1lJiZ2cih0LG4sZS5ub2RlSW5kZXgrMSxlLm5vZGVJbmRleCtlLmNoaWxkQ291bnQscixvLGkpfX1mdW5jdGlvbiBfcih0LGUsbixyLG8saSl7dmFyIGE9dC5yZW5kZXJlcjtzd2l0Y2gobil7Y2FzZSAxOmEuYXBwZW5kQ2hpbGQocixlKTticmVhaztjYXNlIDI6YS5pbnNlcnRCZWZvcmUocixlLG8pO2JyZWFrO2Nhc2UgMzphLnJlbW92ZUNoaWxkKHIsZSk7YnJlYWs7Y2FzZSAwOmkucHVzaChlKX19dmFyIHdyPS9eOihbXjpdKyk6KC4rKSQvO2Z1bmN0aW9uIGJyKHQpe2lmKCI6Ij09PXRbMF0pe3ZhciBlPXQubWF0Y2god3IpO3JldHVybltlWzFdLGVbMl1dfXJldHVyblsiIix0XX1mdW5jdGlvbiB4cih0KXtmb3IodmFyIGU9MCxuPTA7bjx0Lmxlbmd0aDtuKyspZXw9dFtuXS5mbGFncztyZXR1cm4gZX12YXIgQ3I9bmV3IE9iamVjdCxTcj1RbihNZSksRXI9UW4oUHQpLE9yPVFuKEh0KTtmdW5jdGlvbiBUcih0LGUsbixyKXtyZXR1cm4gbj13dChuKSx7aW5kZXg6LTEsZGVwczpmcihyLHl0KGUpKSxmbGFnczp0LHRva2VuOmUsdmFsdWU6bn19ZnVuY3Rpb24gUHIodCxlLG4pe3ZvaWQgMD09PW4mJihuPU1lLlRIUk9XX0lGX05PVF9GT1VORCk7dmFyIHIsbyxpPU50KHQpO3RyeXtpZig4JmUuZmxhZ3MpcmV0dXJuIGUudG9rZW47aWYoMiZlLmZsYWdzJiYobj1udWxsKSwxJmUuZmxhZ3MpcmV0dXJuIHQuX3BhcmVudC5nZXQoZS50b2tlbixuKTt2YXIgYT1lLnRva2VuS2V5O3N3aXRjaChhKXtjYXNlIFNyOmNhc2UgRXI6Y2FzZSBPcjpyZXR1cm4gdH12YXIgdSxsPXQuX2RlZi5wcm92aWRlcnNCeUtleVthXTtpZihsKXt2YXIgcz10Ll9wcm92aWRlcnNbbC5pbmRleF07cmV0dXJuIHZvaWQgMD09PXMmJihzPXQuX3Byb3ZpZGVyc1tsLmluZGV4XT1rcih0LGwpKSxzPT09Q3I/dm9pZCAwOnN9aWYoKHU9Z3QoZS50b2tlbikpJiYocj10LG51bGwhPShvPXUpLnByb3ZpZGVkSW4mJihmdW5jdGlvbih0LGUpe3JldHVybiB0Ll9kZWYubW9kdWxlcy5pbmRleE9mKGUpPi0xfShyLG8ucHJvdmlkZWRJbil8fCJyb290Ij09PW8ucHJvdmlkZWRJbiYmci5fZGVmLmlzUm9vdCkpKXt2YXIgYz10Ll9wcm92aWRlcnMubGVuZ3RoO3JldHVybiB0Ll9kZWYucHJvdmlkZXJzW2NdPXQuX2RlZi5wcm92aWRlcnNCeUtleVtlLnRva2VuS2V5XT17ZmxhZ3M6NTEyMCx2YWx1ZTp1LmZhY3RvcnksZGVwczpbXSxpbmRleDpjLHRva2VuOmUudG9rZW59LHQuX3Byb3ZpZGVyc1tjXT1Dcix0Ll9wcm92aWRlcnNbY109a3IodCx0Ll9kZWYucHJvdmlkZXJzQnlLZXlbZS50b2tlbktleV0pfXJldHVybiA0JmUuZmxhZ3M/bjp0Ll9wYXJlbnQuZ2V0KGUudG9rZW4sbil9ZmluYWxseXtOdChpKX19ZnVuY3Rpb24ga3IodCxlKXt2YXIgbjtzd2l0Y2goMjAxMzQ3MDY3JmUuZmxhZ3Mpe2Nhc2UgNTEyOm49ZnVuY3Rpb24odCxlLG4pe3ZhciBvPW4ubGVuZ3RoO3N3aXRjaChvKXtjYXNlIDA6cmV0dXJuIG5ldyBlO2Nhc2UgMTpyZXR1cm4gbmV3IGUoUHIodCxuWzBdKSk7Y2FzZSAyOnJldHVybiBuZXcgZShQcih0LG5bMF0pLFByKHQsblsxXSkpO2Nhc2UgMzpyZXR1cm4gbmV3IGUoUHIodCxuWzBdKSxQcih0LG5bMV0pLFByKHQsblsyXSkpO2RlZmF1bHQ6Zm9yKHZhciBpPW5ldyBBcnJheShvKSxhPTA7YTxvO2ErKylpW2FdPVByKHQsblthXSk7cmV0dXJuIG5ldyhlLmJpbmQuYXBwbHkoZSxPYmplY3Qoci5fX3NwcmVhZCkoW3ZvaWQgMF0saSkpKX19KHQsZS52YWx1ZSxlLmRlcHMpO2JyZWFrO2Nhc2UgMTAyNDpuPWZ1bmN0aW9uKHQsZSxuKXt2YXIgbz1uLmxlbmd0aDtzd2l0Y2gobyl7Y2FzZSAwOnJldHVybiBlKCk7Y2FzZSAxOnJldHVybiBlKFByKHQsblswXSkpO2Nhc2UgMjpyZXR1cm4gZShQcih0LG5bMF0pLFByKHQsblsxXSkpO2Nhc2UgMzpyZXR1cm4gZShQcih0LG5bMF0pLFByKHQsblsxXSksUHIodCxuWzJdKSk7ZGVmYXVsdDpmb3IodmFyIGk9QXJyYXkobyksYT0wO2E8bzthKyspaVthXT1Qcih0LG5bYV0pO3JldHVybiBlLmFwcGx5KHZvaWQgMCxPYmplY3Qoci5fX3NwcmVhZCkoaSkpfX0odCxlLnZhbHVlLGUuZGVwcyk7YnJlYWs7Y2FzZSAyMDQ4Om49UHIodCxlLmRlcHNbMF0pO2JyZWFrO2Nhc2UgMjU2Om49ZS52YWx1ZX1yZXR1cm4gbj09PUNyfHxudWxsPT09bnx8Im9iamVjdCIhPXR5cGVvZiBufHwxMzEwNzImZS5mbGFnc3x8ImZ1bmN0aW9uIiE9dHlwZW9mIG4ubmdPbkRlc3Ryb3l8fChlLmZsYWdzfD0xMzEwNzIpLHZvaWQgMD09PW4/Q3I6bn1mdW5jdGlvbiBBcih0LGUpe3ZhciBuPXQudmlld0NvbnRhaW5lci5fZW1iZWRkZWRWaWV3cztpZigobnVsbD09ZXx8ZT49bi5sZW5ndGgpJiYoZT1uLmxlbmd0aC0xKSxlPDApcmV0dXJuIG51bGw7dmFyIHI9bltlXTtyZXR1cm4gci52aWV3Q29udGFpbmVyUGFyZW50PW51bGwsQnQobixlKSxHbi5kaXJ0eVBhcmVudFF1ZXJpZXMociksUnIocikscn1mdW5jdGlvbiBJcih0LGUsbil7dmFyIHI9ZT91cihlLGUuZGVmLmxhc3RSZW5kZXJSb290Tm9kZSk6dC5yZW5kZXJFbGVtZW50LG89bi5yZW5kZXJlci5wYXJlbnROb2RlKHIpLGk9bi5yZW5kZXJlci5uZXh0U2libGluZyhyKTtncihuLDIsbyxpLHZvaWQgMCl9ZnVuY3Rpb24gUnIodCl7Z3IodCwzLG51bGwsbnVsbCx2b2lkIDApfXZhciBNcj1uZXcgT2JqZWN0O2Z1bmN0aW9uIGpyKHQsZSxuLHIsbyxpKXtyZXR1cm4gbmV3IE5yKHQsZSxuLHIsbyxpKX12YXIgTnI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixvLGksYSl7dmFyIHU9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiB1LnNlbGVjdG9yPWUsdS5jb21wb25lbnRUeXBlPW4sdS5faW5wdXRzPW8sdS5fb3V0cHV0cz1pLHUubmdDb250ZW50U2VsZWN0b3JzPWEsdS52aWV3RGVmRmFjdG9yeT1yLHV9cmV0dXJuIE9iamVjdChyLl9fZXh0ZW5kcykoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImlucHV0cyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdLGU9dGhpcy5faW5wdXRzO2Zvcih2YXIgbiBpbiBlKXQucHVzaCh7cHJvcE5hbWU6bix0ZW1wbGF0ZU5hbWU6ZVtuXX0pO3JldHVybiB0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwib3V0cHV0cyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLl9vdXRwdXRzKXQucHVzaCh7cHJvcE5hbWU6ZSx0ZW1wbGF0ZU5hbWU6dGhpcy5fb3V0cHV0c1tlXX0pO3JldHVybiB0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbih0LGUsbixyKXtpZighcil0aHJvdyBuZXcgRXJyb3IoIm5nTW9kdWxlIHNob3VsZCBiZSBwcm92aWRlZCIpO3ZhciBvPWRyKHRoaXMudmlld0RlZkZhY3RvcnkpLGk9by5ub2Rlc1swXS5lbGVtZW50LmNvbXBvbmVudFByb3ZpZGVyLm5vZGVJbmRleCxhPUduLmNyZWF0ZVJvb3RWaWV3KHQsZXx8W10sbixvLHIsTXIpLHU9Rm4oYSxpKS5pbnN0YW5jZTtyZXR1cm4gbiYmYS5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoem4oYSwwKS5yZW5kZXJFbGVtZW50LCJuZy12ZXJzaW9uIixnbi5mdWxsKSxuZXcgRHIoYSxuZXcgSHIoYSksdSl9LGV9KFhlKSxEcj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgbz10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG8uX3ZpZXc9ZSxvLl92aWV3UmVmPW4sby5fY29tcG9uZW50PXIsby5fZWxEZWY9by5fdmlldy5kZWYubm9kZXNbMF0sby5ob3N0Vmlldz1uLG8uY2hhbmdlRGV0ZWN0b3JSZWY9bixvLmluc3RhbmNlPXIsb31yZXR1cm4gT2JqZWN0KHIuX19leHRlbmRzKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibG9jYXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGxuKHpuKHRoaXMuX3ZpZXcsdGhpcy5fZWxEZWYubm9kZUluZGV4KS5yZW5kZXJFbGVtZW50KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImluamVjdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBacih0aGlzLl92aWV3LHRoaXMuX2VsRGVmKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImNvbXBvbmVudFR5cGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29tcG9uZW50LmNvbnN0cnVjdG9yfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl92aWV3UmVmLmRlc3Ryb3koKX0sZS5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMuX3ZpZXdSZWYub25EZXN0cm95KHQpfSxlfSgkZSk7ZnVuY3Rpb24gVXIodCxlLG4pe3JldHVybiBuZXcgTHIodCxlLG4pfXZhciBMcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX3ZpZXc9dCx0aGlzLl9lbERlZj1lLHRoaXMuX2RhdGE9bix0aGlzLl9lbWJlZGRlZFZpZXdzPVtdfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImVsZW1lbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGxuKHRoaXMuX2RhdGEucmVuZGVyRWxlbWVudCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpbmplY3RvciIse2dldDpmdW5jdGlvbigpe3JldHVybiBuZXcgWnIodGhpcy5fdmlldyx0aGlzLl9lbERlZil9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXJlbnRJbmplY3RvciIse2dldDpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl92aWV3LGU9dGhpcy5fZWxEZWYucGFyZW50OyFlJiZ0OyllPWFyKHQpLHQ9dC5wYXJlbnQ7cmV0dXJuIHQ/bmV3IFpyKHQsZSk6bmV3IFpyKHRoaXMuX3ZpZXcsbnVsbCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZW1iZWRkZWRWaWV3cy5sZW5ndGgtMTt0Pj0wO3QtLSl7dmFyIGU9QXIodGhpcy5fZGF0YSx0KTtHbi5kZXN0cm95VmlldyhlKX19LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9lbWJlZGRlZFZpZXdzW3RdO2lmKGUpe3ZhciBuPW5ldyBIcihlKTtyZXR1cm4gbi5hdHRhY2hUb1ZpZXdDb250YWluZXJSZWYodGhpcyksbn1yZXR1cm4gbnVsbH0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJsZW5ndGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW1iZWRkZWRWaWV3cy5sZW5ndGh9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuY3JlYXRlRW1iZWRkZWRWaWV3PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LmNyZWF0ZUVtYmVkZGVkVmlldyhlfHx7fSk7cmV0dXJuIHRoaXMuaW5zZXJ0KHIsbikscn0sdC5wcm90b3R5cGUuY3JlYXRlQ29tcG9uZW50PWZ1bmN0aW9uKHQsZSxuLHIsbyl7dmFyIGk9bnx8dGhpcy5wYXJlbnRJbmplY3RvcjtvfHx0IGluc3RhbmNlb2YgYW58fChvPWkuZ2V0KEh0KSk7dmFyIGE9dC5jcmVhdGUoaSxyLHZvaWQgMCxvKTtyZXR1cm4gdGhpcy5pbnNlcnQoYS5ob3N0VmlldyxlKSxhfSx0LnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24odCxlKXtpZih0LmRlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBpbnNlcnQgYSBkZXN0cm95ZWQgVmlldyBpbiBhIFZpZXdDb250YWluZXIhIik7dmFyIG4scixvLGksYT10O3JldHVybiBpPShuPXRoaXMuX2RhdGEpLnZpZXdDb250YWluZXIuX2VtYmVkZGVkVmlld3MsbnVsbD09KHI9ZSkmJihyPWkubGVuZ3RoKSwobz1hLl92aWV3KS52aWV3Q29udGFpbmVyUGFyZW50PXRoaXMuX3ZpZXcsRnQoaSxyLG8pLGZ1bmN0aW9uKHQsZSl7dmFyIG49aXIoZSk7aWYobiYmbiE9PXQmJiEoMTYmZS5zdGF0ZSkpe2Uuc3RhdGV8PTE2O3ZhciByPW4udGVtcGxhdGUuX3Byb2plY3RlZFZpZXdzO3J8fChyPW4udGVtcGxhdGUuX3Byb2plY3RlZFZpZXdzPVtdKSxyLnB1c2goZSksZnVuY3Rpb24odCxlKXtpZighKDQmZS5mbGFncykpe3Qubm9kZUZsYWdzfD00LGUuZmxhZ3N8PTQ7Zm9yKHZhciBuPWUucGFyZW50O247KW4uY2hpbGRGbGFnc3w9NCxuPW4ucGFyZW50fX0oZS5wYXJlbnQuZGVmLGUucGFyZW50Tm9kZURlZil9fShuLG8pLEduLmRpcnR5UGFyZW50UXVlcmllcyhvKSxJcihuLHI+MD9pW3ItMV06bnVsbCxvKSxhLmF0dGFjaFRvVmlld0NvbnRhaW5lclJlZih0aGlzKSx0fSx0LnByb3RvdHlwZS5tb3ZlPWZ1bmN0aW9uKHQsZSl7aWYodC5kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgbW92ZSBhIGRlc3Ryb3llZCBWaWV3IGluIGEgVmlld0NvbnRhaW5lciEiKTt2YXIgbixyLG8saSxhLHU9dGhpcy5fZW1iZWRkZWRWaWV3cy5pbmRleE9mKHQuX3ZpZXcpO3JldHVybiBvPWUsYT0oaT0obj10aGlzLl9kYXRhKS52aWV3Q29udGFpbmVyLl9lbWJlZGRlZFZpZXdzKVtyPXVdLEJ0KGksciksbnVsbD09byYmKG89aS5sZW5ndGgpLEZ0KGksbyxhKSxHbi5kaXJ0eVBhcmVudFF1ZXJpZXMoYSksUnIoYSksSXIobixvPjA/aVtvLTFdOm51bGwsYSksdH0sdC5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZW1iZWRkZWRWaWV3cy5pbmRleE9mKHQuX3ZpZXcpfSx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9QXIodGhpcy5fZGF0YSx0KTtlJiZHbi5kZXN0cm95VmlldyhlKX0sdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKHQpe3ZhciBlPUFyKHRoaXMuX2RhdGEsdCk7cmV0dXJuIGU/bmV3IEhyKGUpOm51bGx9LHR9KCk7ZnVuY3Rpb24gVnIodCl7cmV0dXJuIG5ldyBIcih0KX12YXIgSHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX3ZpZXc9dCx0aGlzLl92aWV3Q29udGFpbmVyUmVmPW51bGwsdGhpcy5fYXBwUmVmPW51bGx9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicm9vdE5vZGVzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGdyKHRoaXMuX3ZpZXcsMCx2b2lkIDAsdm9pZCAwLHQ9W10pLHQ7dmFyIHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb250ZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZpZXcuY29udGV4dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRlc3Ryb3llZCIse2dldDpmdW5jdGlvbigpe3JldHVybiAwIT0oMTI4JnRoaXMuX3ZpZXcuc3RhdGUpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm1hcmtGb3JDaGVjaz1mdW5jdGlvbigpe25yKHRoaXMuX3ZpZXcpfSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXt0aGlzLl92aWV3LnN0YXRlJj0tNX0sdC5wcm90b3R5cGUuZGV0ZWN0Q2hhbmdlcz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3ZpZXcucm9vdC5yZW5kZXJlckZhY3Rvcnk7dC5iZWdpbiYmdC5iZWdpbigpO3RyeXtHbi5jaGVja0FuZFVwZGF0ZVZpZXcodGhpcy5fdmlldyl9ZmluYWxseXt0LmVuZCYmdC5lbmQoKX19LHQucHJvdG90eXBlLmNoZWNrTm9DaGFuZ2VzPWZ1bmN0aW9uKCl7R24uY2hlY2tOb0NoYW5nZXNWaWV3KHRoaXMuX3ZpZXcpfSx0LnByb3RvdHlwZS5yZWF0dGFjaD1mdW5jdGlvbigpe3RoaXMuX3ZpZXcuc3RhdGV8PTR9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl92aWV3LmRpc3Bvc2FibGVzfHwodGhpcy5fdmlldy5kaXNwb3NhYmxlcz1bXSksdGhpcy5fdmlldy5kaXNwb3NhYmxlcy5wdXNoKHQpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fYXBwUmVmP3RoaXMuX2FwcFJlZi5kZXRhY2hWaWV3KHRoaXMpOnRoaXMuX3ZpZXdDb250YWluZXJSZWYmJnRoaXMuX3ZpZXdDb250YWluZXJSZWYuZGV0YWNoKHRoaXMuX3ZpZXdDb250YWluZXJSZWYuaW5kZXhPZih0aGlzKSksR24uZGVzdHJveVZpZXcodGhpcy5fdmlldyl9LHQucHJvdG90eXBlLmRldGFjaEZyb21BcHBSZWY9ZnVuY3Rpb24oKXt0aGlzLl9hcHBSZWY9bnVsbCxScih0aGlzLl92aWV3KSxHbi5kaXJ0eVBhcmVudFF1ZXJpZXModGhpcy5fdmlldyl9LHQucHJvdG90eXBlLmF0dGFjaFRvQXBwUmVmPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX3ZpZXdDb250YWluZXJSZWYpdGhyb3cgbmV3IEVycm9yKCJUaGlzIHZpZXcgaXMgYWxyZWFkeSBhdHRhY2hlZCB0byBhIFZpZXdDb250YWluZXIhIik7dGhpcy5fYXBwUmVmPXR9LHQucHJvdG90eXBlLmF0dGFjaFRvVmlld0NvbnRhaW5lclJlZj1mdW5jdGlvbih0KXtpZih0aGlzLl9hcHBSZWYpdGhyb3cgbmV3IEVycm9yKCJUaGlzIHZpZXcgaXMgYWxyZWFkeSBhdHRhY2hlZCBkaXJlY3RseSB0byB0aGUgQXBwbGljYXRpb25SZWYhIik7dGhpcy5fdmlld0NvbnRhaW5lclJlZj10fSx0fSgpO2Z1bmN0aW9uIHpyKHQsZSl7cmV0dXJuIG5ldyBGcih0LGUpfXZhciBGcj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9wYXJlbnRWaWV3PWUsci5fZGVmPW4scn1yZXR1cm4gT2JqZWN0KHIuX19leHRlbmRzKShlLHQpLGUucHJvdG90eXBlLmNyZWF0ZUVtYmVkZGVkVmlldz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEhyKEduLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl9wYXJlbnRWaWV3LHRoaXMuX2RlZix0aGlzLl9kZWYuZWxlbWVudC50ZW1wbGF0ZSx0KSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZWxlbWVudFJlZiIse2dldDpmdW5jdGlvbigpe3JldHVybiBuZXcgbG4oem4odGhpcy5fcGFyZW50Vmlldyx0aGlzLl9kZWYubm9kZUluZGV4KS5yZW5kZXJFbGVtZW50KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlfShJbik7ZnVuY3Rpb24gQnIodCxlKXtyZXR1cm4gbmV3IFpyKHQsZSl9dmFyIFpyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMudmlldz10LHRoaXMuZWxEZWY9ZX1yZXR1cm4gdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPU1lLlRIUk9XX0lGX05PVF9GT1VORCksR24ucmVzb2x2ZURlcCh0aGlzLnZpZXcsdGhpcy5lbERlZiwhIXRoaXMuZWxEZWYmJjAhPSgzMzU1NDQzMiZ0aGlzLmVsRGVmLmZsYWdzKSx7ZmxhZ3M6MCx0b2tlbjp0LHRva2VuS2V5OlFuKHQpfSxlKX0sdH0oKTtmdW5jdGlvbiBHcih0LGUpe3ZhciBuPXQuZGVmLm5vZGVzW2VdO2lmKDEmbi5mbGFncyl7dmFyIHI9em4odCxuLm5vZGVJbmRleCk7cmV0dXJuIG4uZWxlbWVudC50ZW1wbGF0ZT9yLnRlbXBsYXRlOnIucmVuZGVyRWxlbWVudH1pZigyJm4uZmxhZ3MpcmV0dXJuIEhuKHQsbi5ub2RlSW5kZXgpLnJlbmRlclRleHQ7aWYoMjAyNDAmbi5mbGFncylyZXR1cm4gRm4odCxuLm5vZGVJbmRleCkuaW5zdGFuY2U7dGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIHN0YXRlOiByZWFkIG5vZGVWYWx1ZSBmb3Igbm9kZSBpbmRleCAiK2UpfWZ1bmN0aW9uIHFyKHQpe3JldHVybiBuZXcgV3IodC5yZW5kZXJlcil9dmFyIFdyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmRlbGVnYXRlPXR9cmV0dXJuIHQucHJvdG90eXBlLnNlbGVjdFJvb3RFbGVtZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLnNlbGVjdFJvb3RFbGVtZW50KHQpfSx0LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49T2JqZWN0KHIuX19yZWFkKShicihlKSwyKSxvPXRoaXMuZGVsZWdhdGUuY3JlYXRlRWxlbWVudChuWzFdLG5bMF0pO3JldHVybiB0JiZ0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKHQsbyksb30sdC5wcm90b3R5cGUuY3JlYXRlVmlld1Jvb3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHQucHJvdG90eXBlLmNyZWF0ZVRlbXBsYXRlQW5jaG9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGVsZWdhdGUuY3JlYXRlQ29tbWVudCgiIik7cmV0dXJuIHQmJnRoaXMuZGVsZWdhdGUuYXBwZW5kQ2hpbGQodCxlKSxlfSx0LnByb3RvdHlwZS5jcmVhdGVUZXh0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5kZWxlZ2F0ZS5jcmVhdGVUZXh0KGUpO3JldHVybiB0JiZ0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKHQsbiksbn0sdC5wcm90b3R5cGUucHJvamVjdE5vZGVzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspdGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZCh0LGVbbl0pfSx0LnByb3RvdHlwZS5hdHRhY2hWaWV3QWZ0ZXI9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dGhpcy5kZWxlZ2F0ZS5wYXJlbnROb2RlKHQpLHI9dGhpcy5kZWxlZ2F0ZS5uZXh0U2libGluZyh0KSxvPTA7bzxlLmxlbmd0aDtvKyspdGhpcy5kZWxlZ2F0ZS5pbnNlcnRCZWZvcmUobixlW29dLHIpfSx0LnByb3RvdHlwZS5kZXRhY2hWaWV3PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgbj10W2VdLHI9dGhpcy5kZWxlZ2F0ZS5wYXJlbnROb2RlKG4pO3RoaXMuZGVsZWdhdGUucmVtb3ZlQ2hpbGQocixuKX19LHQucHJvdG90eXBlLmRlc3Ryb3lWaWV3PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspdGhpcy5kZWxlZ2F0ZS5kZXN0cm95Tm9kZShlW25dKX0sdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4odCxlLG4pfSx0LnByb3RvdHlwZS5saXN0ZW5HbG9iYWw9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLmRlbGVnYXRlLmxpc3Rlbih0LGUsbil9LHQucHJvdG90eXBlLnNldEVsZW1lbnRQcm9wZXJ0eT1mdW5jdGlvbih0LGUsbil7dGhpcy5kZWxlZ2F0ZS5zZXRQcm9wZXJ0eSh0LGUsbil9LHQucHJvdG90eXBlLnNldEVsZW1lbnRBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlLG4pe3ZhciBvPU9iamVjdChyLl9fcmVhZCkoYnIoZSksMiksaT1vWzBdLGE9b1sxXTtudWxsIT1uP3RoaXMuZGVsZWdhdGUuc2V0QXR0cmlidXRlKHQsYSxuLGkpOnRoaXMuZGVsZWdhdGUucmVtb3ZlQXR0cmlidXRlKHQsYSxpKX0sdC5wcm90b3R5cGUuc2V0QmluZGluZ0RlYnVnSW5mbz1mdW5jdGlvbih0LGUsbil7fSx0LnByb3RvdHlwZS5zZXRFbGVtZW50Q2xhc3M9ZnVuY3Rpb24odCxlLG4pe24/dGhpcy5kZWxlZ2F0ZS5hZGRDbGFzcyh0LGUpOnRoaXMuZGVsZWdhdGUucmVtb3ZlQ2xhc3ModCxlKX0sdC5wcm90b3R5cGUuc2V0RWxlbWVudFN0eWxlPWZ1bmN0aW9uKHQsZSxuKXtudWxsIT1uP3RoaXMuZGVsZWdhdGUuc2V0U3R5bGUodCxlLG4pOnRoaXMuZGVsZWdhdGUucmVtb3ZlU3R5bGUodCxlKX0sdC5wcm90b3R5cGUuaW52b2tlRWxlbWVudE1ldGhvZD1mdW5jdGlvbih0LGUsbil7dFtlXS5hcHBseSh0LG4pfSx0LnByb3RvdHlwZS5zZXRUZXh0PWZ1bmN0aW9uKHQsZSl7dGhpcy5kZWxlZ2F0ZS5zZXRWYWx1ZSh0LGUpfSx0LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJSZW5kZXJlci5hbmltYXRlIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQhIil9LHR9KCk7ZnVuY3Rpb24gUXIodCxlLG4scil7cmV0dXJuIG5ldyBLcih0LGUsbixyKX12YXIgS3I9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3RoaXMuX21vZHVsZVR5cGU9dCx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9ib290c3RyYXBDb21wb25lbnRzPW4sdGhpcy5fZGVmPXIsdGhpcy5fZGVzdHJveUxpc3RlbmVycz1bXSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5pbmplY3Rvcj10aGlzLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9kZWYsbj10Ll9wcm92aWRlcnM9bmV3IEFycmF5KGUucHJvdmlkZXJzLmxlbmd0aCkscj0wO3I8ZS5wcm92aWRlcnMubGVuZ3RoO3IrKyl7dmFyIG89ZS5wcm92aWRlcnNbcl07NDA5NiZvLmZsYWdzfHx2b2lkIDA9PT1uW3JdJiYobltyXT1rcih0LG8pKX19KHRoaXMpfXJldHVybiB0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlLG4pe3ZvaWQgMD09PWUmJihlPU1lLlRIUk9XX0lGX05PVF9GT1VORCksdm9pZCAwPT09biYmKG49aHQuRGVmYXVsdCk7dmFyIHI9MDtyZXR1cm4gbiZodC5Ta2lwU2VsZj9yfD0xOm4maHQuU2VsZiYmKHJ8PTQpLFByKHRoaXMse3Rva2VuOnQsdG9rZW5LZXk6UW4odCksZmxhZ3M6cn0sZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaW5zdGFuY2UiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXQodGhpcy5fbW9kdWxlVHlwZSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXQocm4pfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJUaGUgbmcgbW9kdWxlICIreXQodGhpcy5pbnN0YW5jZS5jb25zdHJ1Y3RvcikrIiBoYXMgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZC4iKTt0aGlzLl9kZXN0cm95ZWQ9ITAsZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5fZGVmLHI9bmV3IFNldCxvPTA7bzxuLnByb3ZpZGVycy5sZW5ndGg7bysrKWlmKDEzMTA3MiZuLnByb3ZpZGVyc1tvXS5mbGFncyl7dmFyIGk9dC5fcHJvdmlkZXJzW29dO2lmKGkmJmkhPT1Dcil7dmFyIGE9aS5uZ09uRGVzdHJveTsiZnVuY3Rpb24iIT10eXBlb2YgYXx8ci5oYXMoaSl8fChhLmFwcGx5KGkpLHIuYWRkKGkpKX19fSh0aGlzKSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSl9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl9kZXN0cm95TGlzdGVuZXJzLnB1c2godCl9LHR9KCksWXI9UW4oY24pLEpyPVFuKHBuKSwkcj1RbihsbiksWHI9UW4oTW4pLHRvPVFuKEluKSxlbz1RbihrZSksbm89UW4oTWUpLHJvPVFuKFB0KTtmdW5jdGlvbiBvbyh0LGUsbixvLGksYSx1LGwpe3ZhciBzPVtdO2lmKHUpZm9yKHZhciBjIGluIHUpe3ZhciBmPU9iamVjdChyLl9fcmVhZCkodVtjXSwyKTtzW2ZbMF1dPXtmbGFnczo4LG5hbWU6Yyxub25NaW5pZmllZE5hbWU6ZlsxXSxuczpudWxsLHNlY3VyaXR5Q29udGV4dDpudWxsLHN1ZmZpeDpudWxsfX12YXIgaD1bXTtpZihsKWZvcih2YXIgcCBpbiBsKWgucHVzaCh7dHlwZToxLHByb3BOYW1lOnAsdGFyZ2V0Om51bGwsZXZlbnROYW1lOmxbcF19KTtyZXR1cm4gZnVuY3Rpb24odCxlLG4scixvLGksYSx1LGwpe3ZhciBzPWNyKG4pLGM9cy5tYXRjaGVkUXVlcmllcyxmPXMucmVmZXJlbmNlcyxoPXMubWF0Y2hlZFF1ZXJ5SWRzO2x8fChsPVtdKSx1fHwodT1bXSksaT13dChpKTt2YXIgcD1mcihhLHl0KG8pKTtyZXR1cm57bm9kZUluZGV4Oi0xLHBhcmVudDpudWxsLHJlbmRlclBhcmVudDpudWxsLGJpbmRpbmdJbmRleDotMSxvdXRwdXRJbmRleDotMSxjaGVja0luZGV4OnQsZmxhZ3M6ZSxjaGlsZEZsYWdzOjAsZGlyZWN0Q2hpbGRGbGFnczowLGNoaWxkTWF0Y2hlZFF1ZXJpZXM6MCxtYXRjaGVkUXVlcmllczpjLG1hdGNoZWRRdWVyeUlkczpoLHJlZmVyZW5jZXM6ZixuZ0NvbnRlbnRJbmRleDotMSxjaGlsZENvdW50OnIsYmluZGluZ3M6dSxiaW5kaW5nRmxhZ3M6eHIodSksb3V0cHV0czpsLGVsZW1lbnQ6bnVsbCxwcm92aWRlcjp7dG9rZW46byx2YWx1ZTppLGRlcHM6cH0sdGV4dDpudWxsLHF1ZXJ5Om51bGwsbmdDb250ZW50Om51bGx9fSh0LGV8PTE2Mzg0LG4sbyxpLGksYSxzLGgpfWZ1bmN0aW9uIGlvKHQsZSl7cmV0dXJuIHNvKHQsZSl9ZnVuY3Rpb24gYW8odCxlKXtmb3IodmFyIG49dDtuLnBhcmVudCYmIWxyKG4pOyluPW4ucGFyZW50O3JldHVybiBjbyhuLnBhcmVudCxhcihuKSwhMCxlLnByb3ZpZGVyLnZhbHVlLGUucHJvdmlkZXIuZGVwcyl9ZnVuY3Rpb24gdW8odCxlKXt2YXIgbj1jbyh0LGUucGFyZW50LCgzMjc2OCZlLmZsYWdzKT4wLGUucHJvdmlkZXIudmFsdWUsZS5wcm92aWRlci5kZXBzKTtpZihlLm91dHB1dHMubGVuZ3RoKWZvcih2YXIgcj0wO3I8ZS5vdXRwdXRzLmxlbmd0aDtyKyspe3ZhciBvPWUub3V0cHV0c1tyXSxpPW5bby5wcm9wTmFtZV07aWYoIVllKGkpKXRocm93IG5ldyBFcnJvcigiQE91dHB1dCAiK28ucHJvcE5hbWUrIiBub3QgaW5pdGlhbGl6ZWQgaW4gJyIrbi5jb25zdHJ1Y3Rvci5uYW1lKyInLiIpO3ZhciBhPWkuc3Vic2NyaWJlKGxvKHQsZS5wYXJlbnQubm9kZUluZGV4LG8uZXZlbnROYW1lKSk7dC5kaXNwb3NhYmxlc1tlLm91dHB1dEluZGV4K3JdPWEudW5zdWJzY3JpYmUuYmluZChhKX1yZXR1cm4gbn1mdW5jdGlvbiBsbyh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBvcih0LGUsbixyKX19ZnVuY3Rpb24gc28odCxlKXt2YXIgbj0oODE5MiZlLmZsYWdzKT4wLG89ZS5wcm92aWRlcjtzd2l0Y2goMjAxMzQ3MDY3JmUuZmxhZ3Mpe2Nhc2UgNTEyOnJldHVybiBjbyh0LGUucGFyZW50LG4sby52YWx1ZSxvLmRlcHMpO2Nhc2UgMTAyNDpyZXR1cm4gZnVuY3Rpb24odCxlLG4sbyxpKXt2YXIgYT1pLmxlbmd0aDtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiBvKCk7Y2FzZSAxOnJldHVybiBvKGhvKHQsZSxuLGlbMF0pKTtjYXNlIDI6cmV0dXJuIG8oaG8odCxlLG4saVswXSksaG8odCxlLG4saVsxXSkpO2Nhc2UgMzpyZXR1cm4gbyhobyh0LGUsbixpWzBdKSxobyh0LGUsbixpWzFdKSxobyh0LGUsbixpWzJdKSk7ZGVmYXVsdDpmb3IodmFyIHU9QXJyYXkoYSksbD0wO2w8YTtsKyspdVtsXT1obyh0LGUsbixpW2xdKTtyZXR1cm4gby5hcHBseSh2b2lkIDAsT2JqZWN0KHIuX19zcHJlYWQpKHUpKX19KHQsZS5wYXJlbnQsbixvLnZhbHVlLG8uZGVwcyk7Y2FzZSAyMDQ4OnJldHVybiBobyh0LGUucGFyZW50LG4sby5kZXBzWzBdKTtjYXNlIDI1NjpyZXR1cm4gby52YWx1ZX19ZnVuY3Rpb24gY28odCxlLG4sbyxpKXt2YXIgYT1pLmxlbmd0aDtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiBuZXcgbztjYXNlIDE6cmV0dXJuIG5ldyBvKGhvKHQsZSxuLGlbMF0pKTtjYXNlIDI6cmV0dXJuIG5ldyBvKGhvKHQsZSxuLGlbMF0pLGhvKHQsZSxuLGlbMV0pKTtjYXNlIDM6cmV0dXJuIG5ldyBvKGhvKHQsZSxuLGlbMF0pLGhvKHQsZSxuLGlbMV0pLGhvKHQsZSxuLGlbMl0pKTtkZWZhdWx0OmZvcih2YXIgdT1uZXcgQXJyYXkoYSksbD0wO2w8YTtsKyspdVtsXT1obyh0LGUsbixpW2xdKTtyZXR1cm4gbmV3KG8uYmluZC5hcHBseShvLE9iamVjdChyLl9fc3ByZWFkKShbdm9pZCAwXSx1KSkpfX12YXIgZm89e307ZnVuY3Rpb24gaG8odCxlLG4scixvKXtpZih2b2lkIDA9PT1vJiYobz1NZS5USFJPV19JRl9OT1RfRk9VTkQpLDgmci5mbGFncylyZXR1cm4gci50b2tlbjt2YXIgaT10OzImci5mbGFncyYmKG89bnVsbCk7dmFyIGE9ci50b2tlbktleTthPT09ZW8mJihuPSEoIWV8fCFlLmVsZW1lbnQuY29tcG9uZW50VmlldykpLGUmJjEmci5mbGFncyYmKG49ITEsZT1lLnBhcmVudCk7Zm9yKHZhciB1PXQ7dTspe2lmKGUpc3dpdGNoKGEpe2Nhc2UgWXI6cmV0dXJuIHFyKHBvKHUsZSxuKSk7Y2FzZSBKcjpyZXR1cm4gcG8odSxlLG4pLnJlbmRlcmVyO2Nhc2UgJHI6cmV0dXJuIG5ldyBsbih6bih1LGUubm9kZUluZGV4KS5yZW5kZXJFbGVtZW50KTtjYXNlIFhyOnJldHVybiB6bih1LGUubm9kZUluZGV4KS52aWV3Q29udGFpbmVyO2Nhc2UgdG86aWYoZS5lbGVtZW50LnRlbXBsYXRlKXJldHVybiB6bih1LGUubm9kZUluZGV4KS50ZW1wbGF0ZTticmVhaztjYXNlIGVvOnJldHVybiBWcihwbyh1LGUsbikpO2Nhc2Ugbm86Y2FzZSBybzpyZXR1cm4gQnIodSxlKTtkZWZhdWx0OnZhciBsPShuP2UuZWxlbWVudC5hbGxQcm92aWRlcnM6ZS5lbGVtZW50LnB1YmxpY1Byb3ZpZGVycylbYV07aWYobCl7dmFyIHM9Rm4odSxsLm5vZGVJbmRleCk7cmV0dXJuIHN8fChzPXtpbnN0YW5jZTpzbyh1LGwpfSx1Lm5vZGVzW2wubm9kZUluZGV4XT1zKSxzLmluc3RhbmNlfX1uPWxyKHUpLGU9YXIodSksdT11LnBhcmVudCw0JnIuZmxhZ3MmJih1PW51bGwpfXZhciBjPWkucm9vdC5pbmplY3Rvci5nZXQoci50b2tlbixmbyk7cmV0dXJuIGMhPT1mb3x8bz09PWZvP2M6aS5yb290Lm5nTW9kdWxlLmluamVjdG9yLmdldChyLnRva2VuLG8pfWZ1bmN0aW9uIHBvKHQsZSxuKXt2YXIgcjtpZihuKXI9em4odCxlLm5vZGVJbmRleCkuY29tcG9uZW50VmlldztlbHNlIGZvcihyPXQ7ci5wYXJlbnQmJiFscihyKTspcj1yLnBhcmVudDtyZXR1cm4gcn1mdW5jdGlvbiBnbyh0LGUsbixyLG8saSl7aWYoMzI3Njgmbi5mbGFncyl7dmFyIGE9em4odCxuLnBhcmVudC5ub2RlSW5kZXgpLmNvbXBvbmVudFZpZXc7MiZhLmRlZi5mbGFncyYmKGEuc3RhdGV8PTgpfWlmKGUuaW5zdGFuY2Vbbi5iaW5kaW5nc1tyXS5uYW1lXT1vLDUyNDI4OCZuLmZsYWdzKXtpPWl8fHt9O3ZhciB1PXFlLnVud3JhcCh0Lm9sZFZhbHVlc1tuLmJpbmRpbmdJbmRleCtyXSk7aVtuLmJpbmRpbmdzW3JdLm5vbk1pbmlmaWVkTmFtZV09bmV3IEplKHUsbywwIT0oMiZ0LnN0YXRlKSl9cmV0dXJuIHQub2xkVmFsdWVzW24uYmluZGluZ0luZGV4K3JdPW8saX1mdW5jdGlvbiB2byh0LGUpe2lmKHQuZGVmLm5vZGVGbGFncyZlKWZvcih2YXIgbj10LmRlZi5ub2RlcyxyPTAsbz0wO288bi5sZW5ndGg7bysrKXt2YXIgaT1uW29dLGE9aS5wYXJlbnQ7Zm9yKCFhJiZpLmZsYWdzJmUmJm1vKHQsbyxpLmZsYWdzJmUscisrKSwwPT0oaS5jaGlsZEZsYWdzJmUpJiYobys9aS5jaGlsZENvdW50KTthJiYxJmEuZmxhZ3MmJm89PT1hLm5vZGVJbmRleCthLmNoaWxkQ291bnQ7KWEuZGlyZWN0Q2hpbGRGbGFncyZlJiYocj15byh0LGEsZSxyKSksYT1hLnBhcmVudH19ZnVuY3Rpb24geW8odCxlLG4scil7Zm9yKHZhciBvPWUubm9kZUluZGV4KzE7bzw9ZS5ub2RlSW5kZXgrZS5jaGlsZENvdW50O28rKyl7dmFyIGk9dC5kZWYubm9kZXNbb107aS5mbGFncyZuJiZtbyh0LG8saS5mbGFncyZuLHIrKyksbys9aS5jaGlsZENvdW50fXJldHVybiByfWZ1bmN0aW9uIG1vKHQsZSxuLHIpe3ZhciBvPUZuKHQsZSk7aWYobyl7dmFyIGk9by5pbnN0YW5jZTtpJiYoR24uc2V0Q3VycmVudE5vZGUodCxlKSwxMDQ4NTc2Jm4mJlZuKHQsNTEyLHIpJiZpLm5nQWZ0ZXJDb250ZW50SW5pdCgpLDIwOTcxNTImbiYmaS5uZ0FmdGVyQ29udGVudENoZWNrZWQoKSw0MTk0MzA0Jm4mJlZuKHQsNzY4LHIpJiZpLm5nQWZ0ZXJWaWV3SW5pdCgpLDgzODg2MDgmbiYmaS5uZ0FmdGVyVmlld0NoZWNrZWQoKSwxMzEwNzImbiYmaS5uZ09uRGVzdHJveSgpKX19dmFyIF9vPW5ldyBUdCgiU0NIRURVTEVSX1RPS0VOIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBHdH19KSx3bz17fSxibz1mdW5jdGlvbih0KXtyZXR1cm4gdFt0LkxvY2FsZUlkPTBdPSJMb2NhbGVJZCIsdFt0LkRheVBlcmlvZHNGb3JtYXQ9MV09IkRheVBlcmlvZHNGb3JtYXQiLHRbdC5EYXlQZXJpb2RzU3RhbmRhbG9uZT0yXT0iRGF5UGVyaW9kc1N0YW5kYWxvbmUiLHRbdC5EYXlzRm9ybWF0PTNdPSJEYXlzRm9ybWF0Iix0W3QuRGF5c1N0YW5kYWxvbmU9NF09IkRheXNTdGFuZGFsb25lIix0W3QuTW9udGhzRm9ybWF0PTVdPSJNb250aHNGb3JtYXQiLHRbdC5Nb250aHNTdGFuZGFsb25lPTZdPSJNb250aHNTdGFuZGFsb25lIix0W3QuRXJhcz03XT0iRXJhcyIsdFt0LkZpcnN0RGF5T2ZXZWVrPThdPSJGaXJzdERheU9mV2VlayIsdFt0LldlZWtlbmRSYW5nZT05XT0iV2Vla2VuZFJhbmdlIix0W3QuRGF0ZUZvcm1hdD0xMF09IkRhdGVGb3JtYXQiLHRbdC5UaW1lRm9ybWF0PTExXT0iVGltZUZvcm1hdCIsdFt0LkRhdGVUaW1lRm9ybWF0PTEyXT0iRGF0ZVRpbWVGb3JtYXQiLHRbdC5OdW1iZXJTeW1ib2xzPTEzXT0iTnVtYmVyU3ltYm9scyIsdFt0Lk51bWJlckZvcm1hdHM9MTRdPSJOdW1iZXJGb3JtYXRzIix0W3QuQ3VycmVuY3lTeW1ib2w9MTVdPSJDdXJyZW5jeVN5bWJvbCIsdFt0LkN1cnJlbmN5TmFtZT0xNl09IkN1cnJlbmN5TmFtZSIsdFt0LkN1cnJlbmNpZXM9MTddPSJDdXJyZW5jaWVzIix0W3QuUGx1cmFsQ2FzZT0xOF09IlBsdXJhbENhc2UiLHRbdC5FeHRyYURhdGE9MTldPSJFeHRyYURhdGEiLHR9KHt9KSx4bz12b2lkIDAsQ289WyJlbiIsW1siYSIsInAiXSxbIkFNIiwiUE0iXSx4b10sW1siQU0iLCJQTSJdLHhvLHhvXSxbWyJTIiwiTSIsIlQiLCJXIg=="
}

Changelog:

{
    "2019.12.04 14:30": "base64:ZGVmaW5lUHJvcGVydHkobyxSdCx7dmFsdWU6ZSxjb25maWd1cmFibGU6ITB9KSx7ZmxhZ3M6aSx0b2tlbjpvLHRva2VuS2V5OlFuKG8pfX0pKX1mdW5jdGlvbiBocih0LGUsbil7dmFyIHI9bi5yZW5kZXJQYXJlbnQ7cmV0dXJuIHI/MD09KDEmci5mbGFncyl8fDA9PSgzMzU1NDQzMiZyLmZsYWdzKXx8ci5lbGVtZW50LmNvbXBvbmVudFJlbmRlcmVyVHlwZSYmci5lbGVtZW50LmNvbXBvbmVudFJlbmRlcmVyVHlwZS5lbmNhcHN1bGF0aW9uPT09WnQuTmF0aXZlP3puKHQsbi5yZW5kZXJQYXJlbnQubm9kZUluZGV4KS5yZW5kZXJFbGVtZW50OnZvaWQgMDplfXZhciBwcj1uZXcgV2Vha01hcDtmdW5jdGlvbiBkcih0KXt2YXIgZT1wci5nZXQodCk7cmV0dXJuIGV8fCgoZT10KChmdW5jdGlvbigpe3JldHVybiBxbn0pKSkuZmFjdG9yeT10LHByLnNldCh0LGUpKSxlfWZ1bmN0aW9uIGdyKHQsZSxuLHIsbyl7Mz09PWUmJihuPXQucmVuZGVyZXIucGFyZW50Tm9kZSh1cih0LHQuZGVmLmxhc3RSZW5kZXJSb290Tm9kZSkpKSx2cih0LGUsMCx0LmRlZi5ub2Rlcy5sZW5ndGgtMSxuLHIsbyl9ZnVuY3Rpb24gdnIodCxlLG4scixvLGksYSl7Zm9yKHZhciB1PW47dTw9cjt1Kyspe3ZhciBsPXQuZGVmLm5vZGVzW3VdOzExJmwuZmxhZ3MmJm1yKHQsbCxlLG8saSxhKSx1Kz1sLmNoaWxkQ291bnR9fWZ1bmN0aW9uIHlyKHQsZSxuLHIsbyxpKXtmb3IodmFyIGE9dDthJiYhbHIoYSk7KWE9YS5wYXJlbnQ7Zm9yKHZhciB1PWEucGFyZW50LGw9YXIoYSkscz1sLm5vZGVJbmRleCtsLmNoaWxkQ291bnQsYz1sLm5vZGVJbmRleCsxO2M8PXM7YysrKXt2YXIgZj11LmRlZi5ub2Rlc1tjXTtmLm5nQ29udGVudEluZGV4PT09ZSYmbXIodSxmLG4scixvLGkpLGMrPWYuY2hpbGRDb3VudH1pZighdS5wYXJlbnQpe3ZhciBoPXQucm9vdC5wcm9qZWN0YWJsZU5vZGVzW2VdO2lmKGgpZm9yKGM9MDtjPGgubGVuZ3RoO2MrKylfcih0LGhbY10sbixyLG8saSl9fWZ1bmN0aW9uIG1yKHQsZSxuLHIsbyxpKXtpZig4JmUuZmxhZ3MpeXIodCxlLm5nQ29udGVudC5pbmRleCxuLHIsbyxpKTtlbHNle3ZhciBhPXVyKHQsZSk7aWYoMz09PW4mJjMzNTU0NDMyJmUuZmxhZ3MmJjQ4JmUuYmluZGluZ0ZsYWdzPygxNiZlLmJpbmRpbmdGbGFncyYmX3IodCxhLG4scixvLGkpLDMyJmUuYmluZGluZ0ZsYWdzJiZfcih6bih0LGUubm9kZUluZGV4KS5jb21wb25lbnRWaWV3LGEsbixyLG8saSkpOl9yKHQsYSxuLHIsbyxpKSwxNjc3NzIxNiZlLmZsYWdzKWZvcih2YXIgdT16bih0LGUubm9kZUluZGV4KS52aWV3Q29udGFpbmVyLl9lbWJlZGRlZFZpZXdzLGw9MDtsPHUubGVuZ3RoO2wrKylncih1W2xdLG4scixvLGkpOzEmZS5mbGFncyYmIWUuZWxlbWVudC5uYW1lJiZ2cih0LG4sZS5ub2RlSW5kZXgrMSxlLm5vZGVJbmRleCtlLmNoaWxkQ291bnQscixvLGkpfX1mdW5jdGlvbiBfcih0LGUsbixyLG8saSl7dmFyIGE9dC5yZW5kZXJlcjtzd2l0Y2gobil7Y2FzZSAxOmEuYXBwZW5kQ2hpbGQocixlKTticmVhaztjYXNlIDI6YS5pbnNlcnRCZWZvcmUocixlLG8pO2JyZWFrO2Nhc2UgMzphLnJlbW92ZUNoaWxkKHIsZSk7YnJlYWs7Y2FzZSAwOmkucHVzaChlKX19dmFyIHdyPS9eOihbXjpdKyk6KC4rKSQvO2Z1bmN0aW9uIGJyKHQpe2lmKCI6Ij09PXRbMF0pe3ZhciBlPXQubWF0Y2god3IpO3JldHVybltlWzFdLGVbMl1dfXJldHVyblsiIix0XX1mdW5jdGlvbiB4cih0KXtmb3IodmFyIGU9MCxuPTA7bjx0Lmxlbmd0aDtuKyspZXw9dFtuXS5mbGFncztyZXR1cm4gZX12YXIgQ3I9bmV3IE9iamVjdCxTcj1RbihNZSksRXI9UW4oUHQpLE9yPVFuKEh0KTtmdW5jdGlvbiBUcih0LGUsbixyKXtyZXR1cm4gbj13dChuKSx7aW5kZXg6LTEsZGVwczpmcihyLHl0KGUpKSxmbGFnczp0LHRva2VuOmUsdmFsdWU6bn19ZnVuY3Rpb24gUHIodCxlLG4pe3ZvaWQgMD09PW4mJihuPU1lLlRIUk9XX0lGX05PVF9GT1VORCk7dmFyIHIsbyxpPU50KHQpO3RyeXtpZig4JmUuZmxhZ3MpcmV0dXJuIGUudG9rZW47aWYoMiZlLmZsYWdzJiYobj1udWxsKSwxJmUuZmxhZ3MpcmV0dXJuIHQuX3BhcmVudC5nZXQoZS50b2tlbixuKTt2YXIgYT1lLnRva2VuS2V5O3N3aXRjaChhKXtjYXNlIFNyOmNhc2UgRXI6Y2FzZSBPcjpyZXR1cm4gdH12YXIgdSxsPXQuX2RlZi5wcm92aWRlcnNCeUtleVthXTtpZihsKXt2YXIgcz10Ll9wcm92aWRlcnNbbC5pbmRleF07cmV0dXJuIHZvaWQgMD09PXMmJihzPXQuX3Byb3ZpZGVyc1tsLmluZGV4XT1rcih0LGwpKSxzPT09Q3I/dm9pZCAwOnN9aWYoKHU9Z3QoZS50b2tlbikpJiYocj10LG51bGwhPShvPXUpLnByb3ZpZGVkSW4mJihmdW5jdGlvbih0LGUpe3JldHVybiB0Ll9kZWYubW9kdWxlcy5pbmRleE9mKGUpPi0xfShyLG8ucHJvdmlkZWRJbil8fCJyb290Ij09PW8ucHJvdmlkZWRJbiYmci5fZGVmLmlzUm9vdCkpKXt2YXIgYz10Ll9wcm92aWRlcnMubGVuZ3RoO3JldHVybiB0Ll9kZWYucHJvdmlkZXJzW2NdPXQuX2RlZi5wcm92aWRlcnNCeUtleVtlLnRva2VuS2V5XT17ZmxhZ3M6NTEyMCx2YWx1ZTp1LmZhY3RvcnksZGVwczpbXSxpbmRleDpjLHRva2VuOmUudG9rZW59LHQuX3Byb3ZpZGVyc1tjXT1Dcix0Ll9wcm92aWRlcnNbY109a3IodCx0Ll9kZWYucHJvdmlkZXJzQnlLZXlbZS50b2tlbktleV0pfXJldHVybiA0JmUuZmxhZ3M/bjp0Ll9wYXJlbnQuZ2V0KGUudG9rZW4sbil9ZmluYWxseXtOdChpKX19ZnVuY3Rpb24ga3IodCxlKXt2YXIgbjtzd2l0Y2goMjAxMzQ3MDY3JmUuZmxhZ3Mpe2Nhc2UgNTEyOm49ZnVuY3Rpb24odCxlLG4pe3ZhciBvPW4ubGVuZ3RoO3N3aXRjaChvKXtjYXNlIDA6cmV0dXJuIG5ldyBlO2Nhc2UgMTpyZXR1cm4gbmV3IGUoUHIodCxuWzBdKSk7Y2FzZSAyOnJldHVybiBuZXcgZShQcih0LG5bMF0pLFByKHQsblsxXSkpO2Nhc2UgMzpyZXR1cm4gbmV3IGUoUHIodCxuWzBdKSxQcih0LG5bMV0pLFByKHQsblsyXSkpO2RlZmF1bHQ6Zm9yKHZhciBpPW5ldyBBcnJheShvKSxhPTA7YTxvO2ErKylpW2FdPVByKHQsblthXSk7cmV0dXJuIG5ldyhlLmJpbmQuYXBwbHkoZSxPYmplY3Qoci5fX3NwcmVhZCkoW3ZvaWQgMF0saSkpKX19KHQsZS52YWx1ZSxlLmRlcHMpO2JyZWFrO2Nhc2UgMTAyNDpuPWZ1bmN0aW9uKHQsZSxuKXt2YXIgbz1uLmxlbmd0aDtzd2l0Y2gobyl7Y2FzZSAwOnJldHVybiBlKCk7Y2FzZSAxOnJldHVybiBlKFByKHQsblswXSkpO2Nhc2UgMjpyZXR1cm4gZShQcih0LG5bMF0pLFByKHQsblsxXSkpO2Nhc2UgMzpyZXR1cm4gZShQcih0LG5bMF0pLFByKHQsblsxXSksUHIodCxuWzJdKSk7ZGVmYXVsdDpmb3IodmFyIGk9QXJyYXkobyksYT0wO2E8bzthKyspaVthXT1Qcih0LG5bYV0pO3JldHVybiBlLmFwcGx5KHZvaWQgMCxPYmplY3Qoci5fX3NwcmVhZCkoaSkpfX0odCxlLnZhbHVlLGUuZGVwcyk7YnJlYWs7Y2FzZSAyMDQ4Om49UHIodCxlLmRlcHNbMF0pO2JyZWFrO2Nhc2UgMjU2Om49ZS52YWx1ZX1yZXR1cm4gbj09PUNyfHxudWxsPT09bnx8Im9iamVjdCIhPXR5cGVvZiBufHwxMzEwNzImZS5mbGFnc3x8ImZ1bmN0aW9uIiE9dHlwZW9mIG4ubmdPbkRlc3Ryb3l8fChlLmZsYWdzfD0xMzEwNzIpLHZvaWQgMD09PW4/Q3I6bn1mdW5jdGlvbiBBcih0LGUpe3ZhciBuPXQudmlld0NvbnRhaW5lci5fZW1iZWRkZWRWaWV3cztpZigobnVsbD09ZXx8ZT49bi5sZW5ndGgpJiYoZT1uLmxlbmd0aC0xKSxlPDApcmV0dXJuIG51bGw7dmFyIHI9bltlXTtyZXR1cm4gci52aWV3Q29udGFpbmVyUGFyZW50PW51bGwsQnQobixlKSxHbi5kaXJ0eVBhcmVudFF1ZXJpZXMociksUnIocikscn1mdW5jdGlvbiBJcih0LGUsbil7dmFyIHI9ZT91cihlLGUuZGVmLmxhc3RSZW5kZXJSb290Tm9kZSk6dC5yZW5kZXJFbGVtZW50LG89bi5yZW5kZXJlci5wYXJlbnROb2RlKHIpLGk9bi5yZW5kZXJlci5uZXh0U2libGluZyhyKTtncihuLDIsbyxpLHZvaWQgMCl9ZnVuY3Rpb24gUnIodCl7Z3IodCwzLG51bGwsbnVsbCx2b2lkIDApfXZhciBNcj1uZXcgT2JqZWN0O2Z1bmN0aW9uIGpyKHQsZSxuLHIsbyxpKXtyZXR1cm4gbmV3IE5yKHQsZSxuLHIsbyxpKX12YXIgTnI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixvLGksYSl7dmFyIHU9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiB1LnNlbGVjdG9yPWUsdS5jb21wb25lbnRUeXBlPW4sdS5faW5wdXRzPW8sdS5fb3V0cHV0cz1pLHUubmdDb250ZW50U2VsZWN0b3JzPWEsdS52aWV3RGVmRmFjdG9yeT1yLHV9cmV0dXJuIE9iamVjdChyLl9fZXh0ZW5kcykoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImlucHV0cyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdLGU9dGhpcy5faW5wdXRzO2Zvcih2YXIgbiBpbiBlKXQucHVzaCh7cHJvcE5hbWU6bix0ZW1wbGF0ZU5hbWU6ZVtuXX0pO3JldHVybiB0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwib3V0cHV0cyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLl9vdXRwdXRzKXQucHVzaCh7cHJvcE5hbWU6ZSx0ZW1wbGF0ZU5hbWU6dGhpcy5fb3V0cHV0c1tlXX0pO3JldHVybiB0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbih0LGUsbixyKXtpZighcil0aHJvdyBuZXcgRXJyb3IoIm5nTW9kdWxlIHNob3VsZCBiZSBwcm92aWRlZCIpO3ZhciBvPWRyKHRoaXMudmlld0RlZkZhY3RvcnkpLGk9by5ub2Rlc1swXS5lbGVtZW50LmNvbXBvbmVudFByb3ZpZGVyLm5vZGVJbmRleCxhPUduLmNyZWF0ZVJvb3RWaWV3KHQsZXx8W10sbixvLHIsTXIpLHU9Rm4oYSxpKS5pbnN0YW5jZTtyZXR1cm4gbiYmYS5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoem4oYSwwKS5yZW5kZXJFbGVtZW50LCJuZy12ZXJzaW9uIixnbi5mdWxsKSxuZXcgRHIoYSxuZXcgSHIoYSksdSl9LGV9KFhlKSxEcj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgbz10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG8uX3ZpZXc9ZSxvLl92aWV3UmVmPW4sby5fY29tcG9uZW50PXIsby5fZWxEZWY9by5fdmlldy5kZWYubm9kZXNbMF0sby5ob3N0Vmlldz1uLG8uY2hhbmdlRGV0ZWN0b3JSZWY9bixvLmluc3RhbmNlPXIsb31yZXR1cm4gT2JqZWN0KHIuX19leHRlbmRzKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibG9jYXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGxuKHpuKHRoaXMuX3ZpZXcsdGhpcy5fZWxEZWYubm9kZUluZGV4KS5yZW5kZXJFbGVtZW50KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImluamVjdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBacih0aGlzLl92aWV3LHRoaXMuX2VsRGVmKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImNvbXBvbmVudFR5cGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29tcG9uZW50LmNvbnN0cnVjdG9yfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl92aWV3UmVmLmRlc3Ryb3koKX0sZS5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMuX3ZpZXdSZWYub25EZXN0cm95KHQpfSxlfSgkZSk7ZnVuY3Rpb24gVXIodCxlLG4pe3JldHVybiBuZXcgTHIodCxlLG4pfXZhciBMcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX3ZpZXc9dCx0aGlzLl9lbERlZj1lLHRoaXMuX2RhdGE9bix0aGlzLl9lbWJlZGRlZFZpZXdzPVtdfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImVsZW1lbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGxuKHRoaXMuX2RhdGEucmVuZGVyRWxlbWVudCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpbmplY3RvciIse2dldDpmdW5jdGlvbigpe3JldHVybiBuZXcgWnIodGhpcy5fdmlldyx0aGlzLl9lbERlZil9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXJlbnRJbmplY3RvciIse2dldDpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl92aWV3LGU9dGhpcy5fZWxEZWYucGFyZW50OyFlJiZ0OyllPWFyKHQpLHQ9dC5wYXJlbnQ7cmV0dXJuIHQ/bmV3IFpyKHQsZSk6bmV3IFpyKHRoaXMuX3ZpZXcsbnVsbCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZW1iZWRkZWRWaWV3cy5sZW5ndGgtMTt0Pj0wO3QtLSl7dmFyIGU9QXIodGhpcy5fZGF0YSx0KTtHbi5kZXN0cm95VmlldyhlKX19LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9lbWJlZGRlZFZpZXdzW3RdO2lmKGUpe3ZhciBuPW5ldyBIcihlKTtyZXR1cm4gbi5hdHRhY2hUb1ZpZXdDb250YWluZXJSZWYodGhpcyksbn1yZXR1cm4gbnVsbH0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJsZW5ndGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW1iZWRkZWRWaWV3cy5sZW5ndGh9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuY3JlYXRlRW1iZWRkZWRWaWV3PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LmNyZWF0ZUVtYmVkZGVkVmlldyhlfHx7fSk7cmV0dXJuIHRoaXMuaW5zZXJ0KHIsbikscn0sdC5wcm90b3R5cGUuY3JlYXRlQ29tcG9uZW50PWZ1bmN0aW9uKHQsZSxuLHIsbyl7dmFyIGk9bnx8dGhpcy5wYXJlbnRJbmplY3RvcjtvfHx0IGluc3RhbmNlb2YgYW58fChvPWkuZ2V0KEh0KSk7dmFyIGE9dC5jcmVhdGUoaSxyLHZvaWQgMCxvKTtyZXR1cm4gdGhpcy5pbnNlcnQoYS5ob3N0VmlldyxlKSxhfSx0LnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24odCxlKXtpZih0LmRlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBpbnNlcnQgYSBkZXN0cm95ZWQgVmlldyBpbiBhIFZpZXdDb250YWluZXIhIik7dmFyIG4scixvLGksYT10O3JldHVybiBpPShuPXRoaXMuX2RhdGEpLnZpZXdDb250YWluZXIuX2VtYmVkZGVkVmlld3MsbnVsbD09KHI9ZSkmJihyPWkubGVuZ3RoKSwobz1hLl92aWV3KS52aWV3Q29udGFpbmVyUGFyZW50PXRoaXMuX3ZpZXcsRnQoaSxyLG8pLGZ1bmN0aW9uKHQsZSl7dmFyIG49aXIoZSk7aWYobiYmbiE9PXQmJiEoMTYmZS5zdGF0ZSkpe2Uuc3RhdGV8PTE2O3ZhciByPW4udGVtcGxhdGUuX3Byb2plY3RlZFZpZXdzO3J8fChyPW4udGVtcGxhdGUuX3Byb2plY3RlZFZpZXdzPVtdKSxyLnB1c2goZSksZnVuY3Rpb24odCxlKXtpZighKDQmZS5mbGFncykpe3Qubm9kZUZsYWdzfD00LGUuZmxhZ3N8PTQ7Zm9yKHZhciBuPWUucGFyZW50O247KW4uY2hpbGRGbGFnc3w9NCxuPW4ucGFyZW50fX0oZS5wYXJlbnQuZGVmLGUucGFyZW50Tm9kZURlZil9fShuLG8pLEduLmRpcnR5UGFyZW50UXVlcmllcyhvKSxJcihuLHI+MD9pW3ItMV06bnVsbCxvKSxhLmF0dGFjaFRvVmlld0NvbnRhaW5lclJlZih0aGlzKSx0fSx0LnByb3RvdHlwZS5tb3ZlPWZ1bmN0aW9uKHQsZSl7aWYodC5kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgbW92ZSBhIGRlc3Ryb3llZCBWaWV3IGluIGEgVmlld0NvbnRhaW5lciEiKTt2YXIgbixyLG8saSxhLHU9dGhpcy5fZW1iZWRkZWRWaWV3cy5pbmRleE9mKHQuX3ZpZXcpO3JldHVybiBvPWUsYT0oaT0obj10aGlzLl9kYXRhKS52aWV3Q29udGFpbmVyLl9lbWJlZGRlZFZpZXdzKVtyPXVdLEJ0KGksciksbnVsbD09byYmKG89aS5sZW5ndGgpLEZ0KGksbyxhKSxHbi5kaXJ0eVBhcmVudFF1ZXJpZXMoYSksUnIoYSksSXIobixvPjA/aVtvLTFdOm51bGwsYSksdH0sdC5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZW1iZWRkZWRWaWV3cy5pbmRleE9mKHQuX3ZpZXcpfSx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9QXIodGhpcy5fZGF0YSx0KTtlJiZHbi5kZXN0cm95VmlldyhlKX0sdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKHQpe3ZhciBlPUFyKHRoaXMuX2RhdGEsdCk7cmV0dXJuIGU/bmV3IEhyKGUpOm51bGx9LHR9KCk7ZnVuY3Rpb24gVnIodCl7cmV0dXJuIG5ldyBIcih0KX12YXIgSHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX3ZpZXc9dCx0aGlzLl92aWV3Q29udGFpbmVyUmVmPW51bGwsdGhpcy5fYXBwUmVmPW51bGx9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicm9vdE5vZGVzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGdyKHRoaXMuX3ZpZXcsMCx2b2lkIDAsdm9pZCAwLHQ9W10pLHQ7dmFyIHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb250ZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZpZXcuY29udGV4dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRlc3Ryb3llZCIse2dldDpmdW5jdGlvbigpe3JldHVybiAwIT0oMTI4JnRoaXMuX3ZpZXcuc3RhdGUpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm1hcmtGb3JDaGVjaz1mdW5jdGlvbigpe25yKHRoaXMuX3ZpZXcpfSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXt0aGlzLl92aWV3LnN0YXRlJj0tNX0sdC5wcm90b3R5cGUuZGV0ZWN0Q2hhbmdlcz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3ZpZXcucm9vdC5yZW5kZXJlckZhY3Rvcnk7dC5iZWdpbiYmdC5iZWdpbigpO3RyeXtHbi5jaGVja0FuZFVwZGF0ZVZpZXcodGhpcy5fdmlldyl9ZmluYWxseXt0LmVuZCYmdC5lbmQoKX19LHQucHJvdG90eXBlLmNoZWNrTm9DaGFuZ2VzPWZ1bmN0aW9uKCl7R24uY2hlY2tOb0NoYW5nZXNWaWV3KHRoaXMuX3ZpZXcpfSx0LnByb3RvdHlwZS5yZWF0dGFjaD1mdW5jdGlvbigpe3RoaXMuX3ZpZXcuc3RhdGV8PTR9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl92aWV3LmRpc3Bvc2FibGVzfHwodGhpcy5fdmlldy5kaXNwb3NhYmxlcz1bXSksdGhpcy5fdmlldy5kaXNwb3NhYmxlcy5wdXNoKHQpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fYXBwUmVmP3RoaXMuX2FwcFJlZi5kZXRhY2hWaWV3KHRoaXMpOnRoaXMuX3ZpZXdDb250YWluZXJSZWYmJnRoaXMuX3ZpZXdDb250YWluZXJSZWYuZGV0YWNoKHRoaXMuX3ZpZXdDb250YWluZXJSZWYuaW5kZXhPZih0aGlzKSksR24uZGVzdHJveVZpZXcodGhpcy5fdmlldyl9LHQucHJvdG90eXBlLmRldGFjaEZyb21BcHBSZWY9ZnVuY3Rpb24oKXt0aGlzLl9hcHBSZWY9bnVsbCxScih0aGlzLl92aWV3KSxHbi5kaXJ0eVBhcmVudFF1ZXJpZXModGhpcy5fdmlldyl9LHQucHJvdG90eXBlLmF0dGFjaFRvQXBwUmVmPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX3ZpZXdDb250YWluZXJSZWYpdGhyb3cgbmV3IEVycm9yKCJUaGlzIHZpZXcgaXMgYWxyZWFkeSBhdHRhY2hlZCB0byBhIFZpZXdDb250YWluZXIhIik7dGhpcy5fYXBwUmVmPXR9LHQucHJvdG90eXBlLmF0dGFjaFRvVmlld0NvbnRhaW5lclJlZj1mdW5jdGlvbih0KXtpZih0aGlzLl9hcHBSZWYpdGhyb3cgbmV3IEVycm9yKCJUaGlzIHZpZXcgaXMgYWxyZWFkeSBhdHRhY2hlZCBkaXJlY3RseSB0byB0aGUgQXBwbGljYXRpb25SZWYhIik7dGhpcy5fdmlld0NvbnRhaW5lclJlZj10fSx0fSgpO2Z1bmN0aW9uIHpyKHQsZSl7cmV0dXJuIG5ldyBGcih0LGUpfXZhciBGcj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9wYXJlbnRWaWV3PWUsci5fZGVmPW4scn1yZXR1cm4gT2JqZWN0KHIuX19leHRlbmRzKShlLHQpLGUucHJvdG90eXBlLmNyZWF0ZUVtYmVkZGVkVmlldz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEhyKEduLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl9wYXJlbnRWaWV3LHRoaXMuX2RlZix0aGlzLl9kZWYuZWxlbWVudC50ZW1wbGF0ZSx0KSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZWxlbWVudFJlZiIse2dldDpmdW5jdGlvbigpe3JldHVybiBuZXcgbG4oem4odGhpcy5fcGFyZW50Vmlldyx0aGlzLl9kZWYubm9kZUluZGV4KS5yZW5kZXJFbGVtZW50KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlfShJbik7ZnVuY3Rpb24gQnIodCxlKXtyZXR1cm4gbmV3IFpyKHQsZSl9dmFyIFpyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMudmlldz10LHRoaXMuZWxEZWY9ZX1yZXR1cm4gdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPU1lLlRIUk9XX0lGX05PVF9GT1VORCksR24ucmVzb2x2ZURlcCh0aGlzLnZpZXcsdGhpcy5lbERlZiwhIXRoaXMuZWxEZWYmJjAhPSgzMzU1NDQzMiZ0aGlzLmVsRGVmLmZsYWdzKSx7ZmxhZ3M6MCx0b2tlbjp0LHRva2VuS2V5OlFuKHQpfSxlKX0sdH0oKTtmdW5jdGlvbiBHcih0LGUpe3ZhciBuPXQuZGVmLm5vZGVzW2VdO2lmKDEmbi5mbGFncyl7dmFyIHI9em4odCxuLm5vZGVJbmRleCk7cmV0dXJuIG4uZWxlbWVudC50ZW1wbGF0ZT9yLnRlbXBsYXRlOnIucmVuZGVyRWxlbWVudH1pZigyJm4uZmxhZ3MpcmV0dXJuIEhuKHQsbi5ub2RlSW5kZXgpLnJlbmRlclRleHQ7aWYoMjAyNDAmbi5mbGFncylyZXR1cm4gRm4odCxuLm5vZGVJbmRleCkuaW5zdGFuY2U7dGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIHN0YXRlOiByZWFkIG5vZGVWYWx1ZSBmb3Igbm9kZSBpbmRleCAiK2UpfWZ1bmN0aW9uIHFyKHQpe3JldHVybiBuZXcgV3IodC5yZW5kZXJlcil9dmFyIFdyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmRlbGVnYXRlPXR9cmV0dXJuIHQucHJvdG90eXBlLnNlbGVjdFJvb3RFbGVtZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLnNlbGVjdFJvb3RFbGVtZW50KHQpfSx0LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49T2JqZWN0KHIuX19yZWFkKShicihlKSwyKSxvPXRoaXMuZGVsZWdhdGUuY3JlYXRlRWxlbWVudChuWzFdLG5bMF0pO3JldHVybiB0JiZ0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKHQsbyksb30sdC5wcm90b3R5cGUuY3JlYXRlVmlld1Jvb3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHQucHJvdG90eXBlLmNyZWF0ZVRlbXBsYXRlQW5jaG9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGVsZWdhdGUuY3JlYXRlQ29tbWVudCgiIik7cmV0dXJuIHQmJnRoaXMuZGVsZWdhdGUuYXBwZW5kQ2hpbGQodCxlKSxlfSx0LnByb3RvdHlwZS5jcmVhdGVUZXh0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5kZWxlZ2F0ZS5jcmVhdGVUZXh0KGUpO3JldHVybiB0JiZ0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKHQsbiksbn0sdC5wcm90b3R5cGUucHJvamVjdE5vZGVzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspdGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZCh0LGVbbl0pfSx0LnByb3RvdHlwZS5hdHRhY2hWaWV3QWZ0ZXI9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dGhpcy5kZWxlZ2F0ZS5wYXJlbnROb2RlKHQpLHI9dGhpcy5kZWxlZ2F0ZS5uZXh0U2libGluZyh0KSxvPTA7bzxlLmxlbmd0aDtvKyspdGhpcy5kZWxlZ2F0ZS5pbnNlcnRCZWZvcmUobixlW29dLHIpfSx0LnByb3RvdHlwZS5kZXRhY2hWaWV3PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgbj10W2VdLHI9dGhpcy5kZWxlZ2F0ZS5wYXJlbnROb2RlKG4pO3RoaXMuZGVsZWdhdGUucmVtb3ZlQ2hpbGQocixuKX19LHQucHJvdG90eXBlLmRlc3Ryb3lWaWV3PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspdGhpcy5kZWxlZ2F0ZS5kZXN0cm95Tm9kZShlW25dKX0sdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4odCxlLG4pfSx0LnByb3RvdHlwZS5saXN0ZW5HbG9iYWw9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLmRlbGVnYXRlLmxpc3Rlbih0LGUsbil9LHQucHJvdG90eXBlLnNldEVsZW1lbnRQcm9wZXJ0eT1mdW5jdGlvbih0LGUsbil7dGhpcy5kZWxlZ2F0ZS5zZXRQcm9wZXJ0eSh0LGUsbil9LHQucHJvdG90eXBlLnNldEVsZW1lbnRBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlLG4pe3ZhciBvPU9iamVjdChyLl9fcmVhZCkoYnIoZSksMiksaT1vWzBdLGE9b1sxXTtudWxsIT1uP3RoaXMuZGVsZWdhdGUuc2V0QXR0cmlidXRlKHQsYSxuLGkpOnRoaXMuZGVsZWdhdGUucmVtb3ZlQXR0cmlidXRlKHQsYSxpKX0sdC5wcm90b3R5cGUuc2V0QmluZGluZ0RlYnVnSW5mbz1mdW5jdGlvbih0LGUsbil7fSx0LnByb3RvdHlwZS5zZXRFbGVtZW50Q2xhc3M9ZnVuY3Rpb24odCxlLG4pe24/dGhpcy5kZWxlZ2F0ZS5hZGRDbGFzcyh0LGUpOnRoaXMuZGVsZWdhdGUucmVtb3ZlQ2xhc3ModCxlKX0sdC5wcm90b3R5cGUuc2V0RWxlbWVudFN0eWxlPWZ1bmN0aW9uKHQsZSxuKXtudWxsIT1uP3RoaXMuZGVsZWdhdGUuc2V0U3R5bGUodCxlLG4pOnRoaXMuZGVsZWdhdGUucmVtb3ZlU3R5bGUodCxlKX0sdC5wcm90b3R5cGUuaW52b2tlRWxlbWVudE1ldGhvZD1mdW5jdGlvbih0LGUsbil7dFtlXS5hcHBseSh0LG4pfSx0LnByb3RvdHlwZS5zZXRUZXh0PWZ1bmN0aW9uKHQsZSl7dGhpcy5kZWxlZ2F0ZS5zZXRWYWx1ZSh0LGUpfSx0LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJSZW5kZXJlci5hbmltYXRlIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQhIil9LHR9KCk7ZnVuY3Rpb24gUXIodCxlLG4scil7cmV0dXJuIG5ldyBLcih0LGUsbixyKX12YXIgS3I9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3RoaXMuX21vZHVsZVR5cGU9dCx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9ib290c3RyYXBDb21wb25lbnRzPW4sdGhpcy5fZGVmPXIsdGhpcy5fZGVzdHJveUxpc3RlbmVycz1bXSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5pbmplY3Rvcj10aGlzLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9kZWYsbj10Ll9wcm92aWRlcnM9bmV3IEFycmF5KGUucHJvdmlkZXJzLmxlbmd0aCkscj0wO3I8ZS5wcm92aWRlcnMubGVuZ3RoO3IrKyl7dmFyIG89ZS5wcm92aWRlcnNbcl07NDA5NiZvLmZsYWdzfHx2b2lkIDA9PT1uW3JdJiYobltyXT1rcih0LG8pKX19KHRoaXMpfXJldHVybiB0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlLG4pe3ZvaWQgMD09PWUmJihlPU1lLlRIUk9XX0lGX05PVF9GT1VORCksdm9pZCAwPT09biYmKG49aHQuRGVmYXVsdCk7dmFyIHI9MDtyZXR1cm4gbiZodC5Ta2lwU2VsZj9yfD0xOm4maHQuU2VsZiYmKHJ8PTQpLFByKHRoaXMse3Rva2VuOnQsdG9rZW5LZXk6UW4odCksZmxhZ3M6cn0sZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaW5zdGFuY2UiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXQodGhpcy5fbW9kdWxlVHlwZSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXQocm4pfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJUaGUgbmcgbW9kdWxlICIreXQodGhpcy5pbnN0YW5jZS5jb25zdHJ1Y3RvcikrIiBoYXMgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZC4iKTt0aGlzLl9kZXN0cm95ZWQ9ITAsZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5fZGVmLHI9bmV3IFNldCxvPTA7bzxuLnByb3ZpZGVycy5sZW5ndGg7bysrKWlmKDEzMTA3MiZuLnByb3ZpZGVyc1tvXS5mbGFncyl7dmFyIGk9dC5fcHJvdmlkZXJzW29dO2lmKGkmJmkhPT1Dcil7dmFyIGE9aS5uZ09uRGVzdHJveTsiZnVuY3Rpb24iIT10eXBlb2YgYXx8ci5oYXMoaSl8fChhLmFwcGx5KGkpLHIuYWRkKGkpKX19fSh0aGlzKSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSl9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl9kZXN0cm95TGlzdGVuZXJzLnB1c2godCl9LHR9KCksWXI9UW4oY24pLEpyPVFuKHBuKSwkcj1RbihsbiksWHI9UW4oTW4pLHRvPVFuKEluKSxlbz1RbihrZSksbm89UW4oTWUpLHJvPVFuKFB0KTtmdW5jdGlvbiBvbyh0LGUsbixvLGksYSx1LGwpe3ZhciBzPVtdO2lmKHUpZm9yKHZhciBjIGluIHUpe3ZhciBmPU9iamVjdChyLl9fcmVhZCkodVtjXSwyKTtzW2ZbMF1dPXtmbGFnczo4LG5hbWU6Yyxub25NaW5pZmllZE5hbWU6ZlsxXSxuczpudWxsLHNlY3VyaXR5Q29udGV4dDpudWxsLHN1ZmZpeDpudWxsfX12YXIgaD1bXTtpZihsKWZvcih2YXIgcCBpbiBsKWgucHVzaCh7dHlwZToxLHByb3BOYW1lOnAsdGFyZ2V0Om51bGwsZXZlbnROYW1lOmxbcF19KTtyZXR1cm4gZnVuY3Rpb24odCxlLG4scixvLGksYSx1LGwpe3ZhciBzPWNyKG4pLGM9cy5tYXRjaGVkUXVlcmllcyxmPXMucmVmZXJlbmNlcyxoPXMubWF0Y2hlZFF1ZXJ5SWRzO2x8fChsPVtdKSx1fHwodT1bXSksaT13dChpKTt2YXIgcD1mcihhLHl0KG8pKTtyZXR1cm57bm9kZUluZGV4Oi0xLHBhcmVudDpudWxsLHJlbmRlclBhcmVudDpudWxsLGJpbmRpbmdJbmRleDotMSxvdXRwdXRJbmRleDotMSxjaGVja0luZGV4OnQsZmxhZ3M6ZSxjaGlsZEZsYWdzOjAsZGlyZWN0Q2hpbGRGbGFnczowLGNoaWxkTWF0Y2hlZFF1ZXJpZXM6MCxtYXRjaGVkUXVlcmllczpjLG1hdGNoZWRRdWVyeUlkczpoLHJlZmVyZW5jZXM6ZixuZ0NvbnRlbnRJbmRleDotMSxjaGlsZENvdW50OnIsYmluZGluZ3M6dSxiaW5kaW5nRmxhZ3M6eHIodSksb3V0cHV0czpsLGVsZW1lbnQ6bnVsbCxwcm92aWRlcjp7dG9rZW46byx2YWx1ZTppLGRlcHM6cH0sdGV4dDpudWxsLHF1ZXJ5Om51bGwsbmdDb250ZW50Om51bGx9fSh0LGV8PTE2Mzg0LG4sbyxpLGksYSxzLGgpfWZ1bmN0aW9uIGlvKHQsZSl7cmV0dXJuIHNvKHQsZSl9ZnVuY3Rpb24gYW8odCxlKXtmb3IodmFyIG49dDtuLnBhcmVudCYmIWxyKG4pOyluPW4ucGFyZW50O3JldHVybiBjbyhuLnBhcmVudCxhcihuKSwhMCxlLnByb3ZpZGVyLnZhbHVlLGUucHJvdmlkZXIuZGVwcyl9ZnVuY3Rpb24gdW8odCxlKXt2YXIgbj1jbyh0LGUucGFyZW50LCgzMjc2OCZlLmZsYWdzKT4wLGUucHJvdmlkZXIudmFsdWUsZS5wcm92aWRlci5kZXBzKTtpZihlLm91dHB1dHMubGVuZ3RoKWZvcih2YXIgcj0wO3I8ZS5vdXRwdXRzLmxlbmd0aDtyKyspe3ZhciBvPWUub3V0cHV0c1tyXSxpPW5bby5wcm9wTmFtZV07aWYoIVllKGkpKXRocm93IG5ldyBFcnJvcigiQE91dHB1dCAiK28ucHJvcE5hbWUrIiBub3QgaW5pdGlhbGl6ZWQgaW4gJyIrbi5jb25zdHJ1Y3Rvci5uYW1lKyInLiIpO3ZhciBhPWkuc3Vic2NyaWJlKGxvKHQsZS5wYXJlbnQubm9kZUluZGV4LG8uZXZlbnROYW1lKSk7dC5kaXNwb3NhYmxlc1tlLm91dHB1dEluZGV4K3JdPWEudW5zdWJzY3JpYmUuYmluZChhKX1yZXR1cm4gbn1mdW5jdGlvbiBsbyh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBvcih0LGUsbixyKX19ZnVuY3Rpb24gc28odCxlKXt2YXIgbj0oODE5MiZlLmZsYWdzKT4wLG89ZS5wcm92aWRlcjtzd2l0Y2goMjAxMzQ3MDY3JmUuZmxhZ3Mpe2Nhc2UgNTEyOnJldHVybiBjbyh0LGUucGFyZW50LG4sby52YWx1ZSxvLmRlcHMpO2Nhc2UgMTAyNDpyZXR1cm4gZnVuY3Rpb24odCxlLG4sbyxpKXt2YXIgYT1pLmxlbmd0aDtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiBvKCk7Y2FzZSAxOnJldHVybiBvKGhvKHQsZSxuLGlbMF0pKTtjYXNlIDI6cmV0dXJuIG8oaG8odCxlLG4saVswXSksaG8odCxlLG4saVsxXSkpO2Nhc2UgMzpyZXR1cm4gbyhobyh0LGUsbixpWzBdKSxobyh0LGUsbixpWzFdKSxobyh0LGUsbixpWzJdKSk7ZGVmYXVsdDpmb3IodmFyIHU9QXJyYXkoYSksbD0wO2w8YTtsKyspdVtsXT1obyh0LGUsbixpW2xdKTtyZXR1cm4gby5hcHBseSh2b2lkIDAsT2JqZWN0KHIuX19zcHJlYWQpKHUpKX19KHQsZS5wYXJlbnQsbixvLnZhbHVlLG8uZGVwcyk7Y2FzZSAyMDQ4OnJldHVybiBobyh0LGUucGFyZW50LG4sby5kZXBzWzBdKTtjYXNlIDI1NjpyZXR1cm4gby52YWx1ZX19ZnVuY3Rpb24gY28odCxlLG4sbyxpKXt2YXIgYT1pLmxlbmd0aDtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiBuZXcgbztjYXNlIDE6cmV0dXJuIG5ldyBvKGhvKHQsZSxuLGlbMF0pKTtjYXNlIDI6cmV0dXJuIG5ldyBvKGhvKHQsZSxuLGlbMF0pLGhvKHQsZSxuLGlbMV0pKTtjYXNlIDM6cmV0dXJuIG5ldyBvKGhvKHQsZSxuLGlbMF0pLGhvKHQsZSxuLGlbMV0pLGhvKHQsZSxuLGlbMl0pKTtkZWZhdWx0OmZvcih2YXIgdT1uZXcgQXJyYXkoYSksbD0wO2w8YTtsKyspdVtsXT1obyh0LGUsbixpW2xdKTtyZXR1cm4gbmV3KG8uYmluZC5hcHBseShvLE9iamVjdChyLl9fc3ByZWFkKShbdm9pZCAwXSx1KSkpfX12YXIgZm89e307ZnVuY3Rpb24gaG8odCxlLG4scixvKXtpZih2b2lkIDA9PT1vJiYobz1NZS5USFJPV19JRl9OT1RfRk9VTkQpLDgmci5mbGFncylyZXR1cm4gci50b2tlbjt2YXIgaT10OzImci5mbGFncyYmKG89bnVsbCk7dmFyIGE9ci50b2tlbktleTthPT09ZW8mJihuPSEoIWV8fCFlLmVsZW1lbnQuY29tcG9uZW50VmlldykpLGUmJjEmci5mbGFncyYmKG49ITEsZT1lLnBhcmVudCk7Zm9yKHZhciB1PXQ7dTspe2lmKGUpc3dpdGNoKGEpe2Nhc2UgWXI6cmV0dXJuIHFyKHBvKHUsZSxuKSk7Y2FzZSBKcjpyZXR1cm4gcG8odSxlLG4pLnJlbmRlcmVyO2Nhc2UgJHI6cmV0dXJuIG5ldyBsbih6bih1LGUubm9kZUluZGV4KS5yZW5kZXJFbGVtZW50KTtjYXNlIFhyOnJldHVybiB6bih1LGUubm9kZUluZGV4KS52aWV3Q29udGFpbmVyO2Nhc2UgdG86aWYoZS5lbGVtZW50LnRlbXBsYXRlKXJldHVybiB6bih1LGUubm9kZUluZGV4KS50ZW1wbGF0ZTticmVhaztjYXNlIGVvOnJldHVybiBWcihwbyh1LGUsbikpO2Nhc2Ugbm86Y2FzZSBybzpyZXR1cm4gQnIodSxlKTtkZWZhdWx0OnZhciBsPShuP2UuZWxlbWVudC5hbGxQcm92aWRlcnM6ZS5lbGVtZW50LnB1YmxpY1Byb3ZpZGVycylbYV07aWYobCl7dmFyIHM9Rm4odSxsLm5vZGVJbmRleCk7cmV0dXJuIHN8fChzPXtpbnN0YW5jZTpzbyh1LGwpfSx1Lm5vZGVzW2wubm9kZUluZGV4XT1zKSxzLmluc3RhbmNlfX1uPWxyKHUpLGU9YXIodSksdT11LnBhcmVudCw0JnIuZmxhZ3MmJih1PW51bGwpfXZhciBjPWkucm9vdC5pbmplY3Rvci5nZXQoci50b2tlbixmbyk7cmV0dXJuIGMhPT1mb3x8bz09PWZvP2M6aS5yb290Lm5nTW9kdWxlLmluamVjdG9yLmdldChyLnRva2VuLG8pfWZ1bmN0aW9uIHBvKHQsZSxuKXt2YXIgcjtpZihuKXI9em4odCxlLm5vZGVJbmRleCkuY29tcG9uZW50VmlldztlbHNlIGZvcihyPXQ7ci5wYXJlbnQmJiFscihyKTspcj1yLnBhcmVudDtyZXR1cm4gcn1mdW5jdGlvbiBnbyh0LGUsbixyLG8saSl7aWYoMzI3Njgmbi5mbGFncyl7dmFyIGE9em4odCxuLnBhcmVudC5ub2RlSW5kZXgpLmNvbXBvbmVudFZpZXc7MiZhLmRlZi5mbGFncyYmKGEuc3RhdGV8PTgpfWlmKGUuaW5zdGFuY2Vbbi5iaW5kaW5nc1tyXS5uYW1lXT1vLDUyNDI4OCZuLmZsYWdzKXtpPWl8fHt9O3ZhciB1PXFlLnVud3JhcCh0Lm9sZFZhbHVlc1tuLmJpbmRpbmdJbmRleCtyXSk7aVtuLmJpbmRpbmdzW3JdLm5vbk1pbmlmaWVkTmFtZV09bmV3IEplKHUsbywwIT0oMiZ0LnN0YXRlKSl9cmV0dXJuIHQub2xkVmFsdWVzW24uYmluZGluZ0luZGV4K3JdPW8saX1mdW5jdGlvbiB2byh0LGUpe2lmKHQuZGVmLm5vZGVGbGFncyZlKWZvcih2YXIgbj10LmRlZi5ub2RlcyxyPTAsbz0wO288bi5sZW5ndGg7bysrKXt2YXIgaT1uW29dLGE9aS5wYXJlbnQ7Zm9yKCFhJiZpLmZsYWdzJmUmJm1vKHQsbyxpLmZsYWdzJmUscisrKSwwPT0oaS5jaGlsZEZsYWdzJmUpJiYobys9aS5jaGlsZENvdW50KTthJiYxJmEuZmxhZ3MmJm89PT1hLm5vZGVJbmRleCthLmNoaWxkQ291bnQ7KWEuZGlyZWN0Q2hpbGRGbGFncyZlJiYocj15byh0LGEsZSxyKSksYT1hLnBhcmVudH19ZnVuY3Rpb24geW8odCxlLG4scil7Zm9yKHZhciBvPWUubm9kZUluZGV4KzE7bzw9ZS5ub2RlSW5kZXgrZS5jaGlsZENvdW50O28rKyl7dmFyIGk9dC5kZWYubm9kZXNbb107aS5mbGFncyZuJiZtbyh0LG8saS5mbGFncyZuLHIrKyksbys9aS5jaGlsZENvdW50fXJldHVybiByfWZ1bmN0aW9uIG1vKHQsZSxuLHIpe3ZhciBvPUZuKHQsZSk7aWYobyl7dmFyIGk9by5pbnN0YW5jZTtpJiYoR24uc2V0Q3VycmVudE5vZGUodCxlKSwxMDQ4NTc2Jm4mJlZuKHQsNTEyLHIpJiZpLm5nQWZ0ZXJDb250ZW50SW5pdCgpLDIwOTcxNTImbiYmaS5uZ0FmdGVyQ29udGVudENoZWNrZWQoKSw0MTk0MzA0Jm4mJlZuKHQsNzY4LHIpJiZpLm5nQWZ0ZXJWaWV3SW5pdCgpLDgzODg2MDgmbiYmaS5uZ0FmdGVyVmlld0NoZWNrZWQoKSwxMzEwNzImbiYmaS5uZ09uRGVzdHJveSgpKX19dmFyIF9vPW5ldyBUdCgiU0NIRURVTEVSX1RPS0VOIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBHdH19KSx3bz17fSxibz1mdW5jdGlvbih0KXtyZXR1cm4gdFt0LkxvY2FsZUlkPTBdPSJMb2NhbGVJZCIsdFt0LkRheVBlcmlvZHNGb3JtYXQ9MV09IkRheVBlcmlvZHNGb3JtYXQiLHRbdC5EYXlQZXJpb2RzU3RhbmRhbG9uZT0yXT0iRGF5UGVyaW9kc1N0YW5kYWxvbmUiLHRbdC5EYXlzRm9ybWF0PTNdPSJEYXlzRm9ybWF0Iix0W3QuRGF5c1N0YW5kYWxvbmU9NF09IkRheXNTdGFuZGFsb25lIix0W3QuTW9udGhzRm9ybWF0PTVdPSJNb250aHNGb3JtYXQiLHRbdC5Nb250aHNTdGFuZGFsb25lPTZdPSJNb250aHNTdGFuZGFsb25lIix0W3QuRXJhcz03XT0iRXJhcyIsdFt0LkZpcnN0RGF5T2ZXZWVrPThdPSJGaXJzdERheU9mV2VlayIsdFt0LldlZWtlbmRSYW5nZT05XT0iV2Vla2VuZFJhbmdlIix0W3QuRGF0ZUZvcm1hdD0xMF09IkRhdGVGb3JtYXQiLHRbdC5UaW1lRm9ybWF0PTExXT0iVGltZUZvcm1hdCIsdFt0LkRhdGVUaW1lRm9ybWF0PTEyXT0iRGF0ZVRpbWVGb3JtYXQiLHRbdC5OdW1iZXJTeW1ib2xzPTEzXT0iTnVtYmVyU3ltYm9scyIsdFt0Lk51bWJlckZvcm1hdHM9MTRdPSJOdW1iZXJGb3JtYXRzIix0W3QuQ3VycmVuY3lTeW1ib2w9MTVdPSJDdXJyZW5jeVN5bWJvbCIsdFt0LkN1cnJlbmN5TmFtZT0xNl09IkN1cnJlbmN5TmFtZSIsdFt0LkN1cnJlbmNpZXM9MTddPSJDdXJyZW5jaWVzIix0W3QuUGx1cmFsQ2FzZT0xOF09IlBsdXJhbENhc2UiLHRbdC5FeHRyYURhdGE9MTldPSJFeHRyYURhdGEiLHR9KHt9KSx4bz12b2lkIDAsQ289WyJlbiIsW1siYSIsInAiXSxbIkFNIiwiUE0iXSx4b10sW1siQU0iLCJQTSJdLHhvLHhvXSxbWyJTIiwiTSIsIlQiLCJXIg=="
}

github/deemru/w8io/169f3d6 
4.90 ms