mberr · data · 2.7c767379.chunk.js_14
{
"2.7c767379.chunk.js_14": "base64:KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiByZihlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PVpjKHQpJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKTp0fWZ1bmN0aW9uIG5mKGUpe3JldHVybihuZj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gb2YoZSx0KXtyZXR1cm4ob2Y9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfXZhciBhZixzZix1ZixjZj1mdW5jdGlvbihlLHQscixuLGkpe3ZhciBvLGE9TWF0aC5taW4oTWF0aC5hYnMocikvMixNYXRoLmFicyhuKS8yKSxzPW4+PTA/MTotMSx1PXI+PTA/MTotMSxjPW4+PTAmJnI+PTB8fG48MCYmcjwwPzE6MDtpZihhPjAmJmkgaW5zdGFuY2VvZiBBcnJheSl7Zm9yKHZhciBmPVtdLGw9MDtsPDQ7bCsrKWZbbF09aVtsXT5hP2E6aVtsXTtvPSJNIi5jb25jYXQoZSwiLCIpLmNvbmNhdCh0K3MqZlswXSksZlswXT4wJiYobys9IkEgIi5jb25jYXQoZlswXSwiLCIpLmNvbmNhdChmWzBdLCIsMCwwLCIpLmNvbmNhdChjLCIsIikuY29uY2F0KGUrdSpmWzBdLCIsIikuY29uY2F0KHQpKSxvKz0iTCAiLmNvbmNhdChlK3ItdSpmWzFdLCIsIikuY29uY2F0KHQpLGZbMV0+MCYmKG8rPSJBICIuY29uY2F0KGZbMV0sIiwiKS5jb25jYXQoZlsxXSwiLDAsMCwiKS5jb25jYXQoYywiLFxuICAgICAgICAiKS5jb25jYXQoZStyLCIsIikuY29uY2F0KHQrcypmWzFdKSksbys9IkwgIi5jb25jYXQoZStyLCIsIikuY29uY2F0KHQrbi1zKmZbMl0pLGZbMl0+MCYmKG8rPSJBICIuY29uY2F0KGZbMl0sIiwiKS5jb25jYXQoZlsyXSwiLDAsMCwiKS5jb25jYXQoYywiLFxuICAgICAgICAiKS5jb25jYXQoZStyLXUqZlsyXSwiLCIpLmNvbmNhdCh0K24pKSxvKz0iTCAiLmNvbmNhdChlK3UqZlszXSwiLCIpLmNvbmNhdCh0K24pLGZbM10+MCYmKG8rPSJBICIuY29uY2F0KGZbM10sIiwiKS5jb25jYXQoZlszXSwiLDAsMCwiKS5jb25jYXQoYywiLFxuICAgICAgICAiKS5jb25jYXQoZSwiLCIpLmNvbmNhdCh0K24tcypmWzNdKSksbys9IloifWVsc2UgaWYoYT4wJiZpPT09K2kmJmk+MCl7dmFyIGg9TWF0aC5taW4oYSxpKTtvPSJNICIuY29uY2F0KGUsIiwiKS5jb25jYXQodCtzKmgsIlxuICAgICAgICAgICAgQSAiKS5jb25jYXQoaCwiLCIpLmNvbmNhdChoLCIsMCwwLCIpLmNvbmNhdChjLCIsIikuY29uY2F0KGUrdSpoLCIsIikuY29uY2F0KHQsIlxuICAgICAgICAgICAgTCAiKS5jb25jYXQoZStyLXUqaCwiLCIpLmNvbmNhdCh0LCJcbiAgICAgICAgICAgIEEgIikuY29uY2F0KGgsIiwiKS5jb25jYXQoaCwiLDAsMCwiKS5jb25jYXQoYywiLCIpLmNvbmNhdChlK3IsIiwiKS5jb25jYXQodCtzKmgsIlxuICAgICAgICAgICAgTCAiKS5jb25jYXQoZStyLCIsIikuY29uY2F0KHQrbi1zKmgsIlxuICAgICAgICAgICAgQSAiKS5jb25jYXQoaCwiLCIpLmNvbmNhdChoLCIsMCwwLCIpLmNvbmNhdChjLCIsIikuY29uY2F0KGUrci11KmgsIiwiKS5jb25jYXQodCtuLCJcbiAgICAgICAgICAgIEwgIikuY29uY2F0KGUrdSpoLCIsIikuY29uY2F0KHQrbiwiXG4gICAgICAgICAgICBBICIpLmNvbmNhdChoLCIsIikuY29uY2F0KGgsIiwwLDAsIikuY29uY2F0KGMsIiwiKS5jb25jYXQoZSwiLCIpLmNvbmNhdCh0K24tcypoLCIgWiIpfWVsc2Ugbz0iTSAiLmNvbmNhdChlLCIsIikuY29uY2F0KHQsIiBoICIpLmNvbmNhdChyLCIgdiAiKS5jb25jYXQobiwiIGggIikuY29uY2F0KC1yLCIgWiIpO3JldHVybiBvfSxmZj1LKChRYz1YYz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUscjshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KTtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPTA7bzxuO28rKylpW29dPWFyZ3VtZW50c1tvXTtyZXR1cm4ocj1yZih0aGlzLChlPW5mKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpKS5zdGF0ZT17dG90YWxMZW5ndGg6LTF9LHJ9dmFyIHIsbixpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmb2YoZSx0KX0odCx5WyJDb21wb25lbnQiXSkscj10LChuPVt7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLm5vZGUmJnRoaXMubm9kZS5nZXRUb3RhbExlbmd0aCl0cnl7dmFyIGU9dGhpcy5ub2RlLmdldFRvdGFsTGVuZ3RoKCk7ZSYmdGhpcy5zZXRTdGF0ZSh7dG90YWxMZW5ndGg6ZX0pfWNhdGNoKHQpe319fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMscj10Lngsbj10LnksaT10LndpZHRoLG89dC5oZWlnaHQsYT10LnJhZGl1cyxzPXQuY2xhc3NOYW1lLHU9dGhpcy5zdGF0ZS50b3RhbExlbmd0aCxjPXRoaXMucHJvcHMsZj1jLmFuaW1hdGlvbkVhc2luZyxsPWMuYW5pbWF0aW9uRHVyYXRpb24saD1jLmFuaW1hdGlvbkJlZ2luLHA9Yy5pc0FuaW1hdGlvbkFjdGl2ZSxkPWMuaXNVcGRhdGVBbmltYXRpb25BY3RpdmU7aWYociE9PStyfHxuIT09K258fGkhPT0raXx8byE9PStvfHwwPT09aXx8MD09PW8pcmV0dXJuIG51bGw7dmFyIHk9XygpKCJyZWNoYXJ0cy1yZWN0YW5nbGUiLHMpO3JldHVybiBkP2cuYS5jcmVhdGVFbGVtZW50KCRjLHtjYW5CZWdpbjp1PjAsZnJvbTp7d2lkdGg6aSxoZWlnaHQ6byx4OnIseTpufSx0bzp7d2lkdGg6aSxoZWlnaHQ6byx4OnIseTpufSxkdXJhdGlvbjpsLGFuaW1hdGlvbkVhc2luZzpmLGlzQWN0aXZlOmR9LGZ1bmN0aW9uKHQpe3ZhciByPXQud2lkdGgsbj10LmhlaWdodCxpPXQueCxvPXQueTtyZXR1cm4gZy5hLmNyZWF0ZUVsZW1lbnQoJGMse2NhbkJlZ2luOnU+MCxmcm9tOiIwcHggIi5jb25jYXQoLTE9PT11PzE6dSwicHgiKSx0bzoiIi5jb25jYXQodSwicHggMHB4IiksYXR0cmlidXRlTmFtZToic3Ryb2tlRGFzaGFycmF5IixiZWdpbjpoLGR1cmF0aW9uOmwsaXNBY3RpdmU6cCxlYXNpbmc6Zn0sZy5hLmNyZWF0ZUVsZW1lbnQoInBhdGgiLGVmKHt9LGVlKGUucHJvcHMpLHJlKGUucHJvcHMpLHtjbGFzc05hbWU6eSxkOmNmKGksbyxyLG4sYSkscmVmOmZ1bmN0aW9uKHQpe2Uubm9kZT10fX0pKSl9KTpnLmEuY3JlYXRlRWxlbWVudCgicGF0aCIsZWYoe30sZWUodGhpcy5wcm9wcykscmUodGhpcy5wcm9wcykse2NsYXNzTmFtZTp5LGQ6Y2YocixuLGksbyxhKX0pKX19XSkmJnRmKHIucHJvdG90eXBlLG4pLGkmJnRmKHIsaSksdH0oKSxYYy5kaXNwbGF5TmFtZT0iUmVjdGFuZ2xlIixYYy5wcm9wVHlwZXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxuPU9iamVjdC5rZXlzKHIpOyJmdW5jdGlvbiI9PT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKG49bi5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhyKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKS5lbnVtZXJhYmxlfSkpKSxuLmZvckVhY2goZnVuY3Rpb24odCl7SmMoZSx0LHJbdF0pfSl9cmV0dXJuIGV9KHt9LEgsVyx7Y2xhc3NOYW1lOm0uYS5zdHJpbmcseDptLmEubnVtYmVyLHk6bS5hLm51bWJlcix3aWR0aDptLmEubnVtYmVyLGhlaWdodDptLmEubnVtYmVyLHJhZGl1czptLmEub25lT2ZUeXBlKFttLmEubnVtYmVyLG0uYS5hcnJheV0pLGlzQW5pbWF0aW9uQWN0aXZlOm0uYS5ib29sLGlzVXBkYXRlQW5pbWF0aW9uQWN0aXZlOm0uYS5ib29sLGFuaW1hdGlvbkJlZ2luOm0uYS5udW1iZXIsYW5pbWF0aW9uRHVyYXRpb246bS5hLm51bWJlcixhbmltYXRpb25FYXNpbmc6bS5hLm9uZU9mKFsiZWFzZSIsImVhc2UtaW4iLCJlYXNlLW91dCIsImVhc2UtaW4tb3V0IiwibGluZWFyIl0pfSksWGMuZGVmYXVsdFByb3BzPXt4OjAseTowLHdpZHRoOjAsaGVpZ2h0OjAscmFkaXVzOjAsaXNBbmltYXRpb25BY3RpdmU6ITEsaXNVcGRhdGVBbmltYXRpb25BY3RpdmU6ITEsYW5pbWF0aW9uQmVnaW46MCxhbmltYXRpb25EdXJhdGlvbjoxNTAwLGFuaW1hdGlvbkVhc2luZzoiZWFzZSJ9LFljPVFjKSl8fFljO2Z1bmN0aW9uIGxmKGUpe3JldHVybihsZj0iZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIGhmKCl7cmV0dXJuKGhmPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixuKSYmKGVbbl09cltuXSl9cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcGYoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxuPU9iamVjdC5rZXlzKHIpOyJmdW5jdGlvbiI9PT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKG49bi5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhyKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKS5lbnVtZXJhYmxlfSkpKSxuLmZvckVhY2goZnVuY3Rpb24odCl7ZGYoZSx0LHJbdF0pfSl9cmV0dXJuIGV9ZnVuY3Rpb24gZGYoZSx0LHIpe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfWZ1bmN0aW9uIHlmKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLmtleSxuKX19ZnVuY3Rpb24gZ2YoZSx0KXtyZXR1cm4hdHx8Im9iamVjdCIhPT1sZih0KSYmImZ1bmN0aW9uIiE9PXR5cGVvZiB0P2Z1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSk6dH1mdW5jdGlvbiB2ZihlKXtyZXR1cm4odmY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0pKGUpfWZ1bmN0aW9uIG1mKGUsdCl7cmV0dXJuKG1mPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSkoZSx0KX12YXIgYmY9SygodWY9c2Y9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLGdmKHRoaXMsdmYodCkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX12YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiZtZihlLHQpfSh0LHlbIkNvbXBvbmVudCJdKSxyPXQsaT1be2tleToicmVuZGVyUmVjdCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZy5hLmlzVmFsaWRFbGVtZW50KGUpP2cuYS5jbG9uZUVsZW1lbnQoZSx0KTp1KCkoZSk/ZSh0KTpnLmEuY3JlYXRlRWxlbWVudChmZixoZih7fSx0LHtjbGFzc05hbWU6InJlY2hhcnRzLXJlZmVyZW5jZS1hcmVhLXJlY3QifSkpfX1dLChuPVt7a2V5OiJnZXRSZWN0Iix2YWx1ZTpmdW5jdGlvbihlLHQscixuKXt2YXIgaT10aGlzLnByb3BzLG89aS54MSxhPWkueDIscz1pLnkxLHU9aS55MixjPWkueEF4aXMsZj1pLnlBeGlzLGw9aHUuY3JlYXRlKHt4OmMuc2NhbGUseTpmLnNjYWxlfSksaD17eDplP2wueC5hcHBseShvKTpsLngucmFuZ2VNaW4seTpyP2wueS5hcHBseShzKTpsLnkucmFuZ2VNaW59LHA9e3g6dD9sLnguYXBwbHkoYSk6bC54LnJhbmdlTWF4LHk6bj9sLnkuYXBwbHkodSk6bC55LnJhbmdlTWF4fTtyZXR1cm4hVmwodGhpcy5wcm9wcywiZGlzY2FyZCIpfHxsLmlzSW5SYW5nZShoKSYmbC5pc0luUmFuZ2UocCk/c3UoaCxwKTpudWxsfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLngxLHI9ZS54MixuPWUueTEsaT1lLnkyLG89ZS5jbGFzc05hbWUsYT0oZS5hbHdheXNTaG93LGUuY2xpcFBhdGhJZCkscz1CKHQpLHU9QihyKSxjPUIobiksZj1CKGkpO2lmKCFzJiYhdSYmIWMmJiFmKXJldHVybiBudWxsO3ZhciBsPXRoaXMuZ2V0UmVjdChzLHUsYyxmKTtpZighbClyZXR1cm4gbnVsbDt2YXIgaD10aGlzLnByb3BzLnNoYXBlLHA9VmwodGhpcy5wcm9wcywiaGlkZGVuIik/InVybCgjIi5jb25jYXQoYSwiKSIpOnZvaWQgMDtyZXR1cm4gZy5hLmNyZWF0ZUVsZW1lbnQoenMse2NsYXNzTmFtZTpfKCkoInJlY2hhcnRzLXJlZmVyZW5jZS1hcmVhIixvKX0sdGhpcy5jb25zdHJ1Y3Rvci5yZW5kZXJSZWN0KGgscGYoe2NsaXBQYXRoOnB9LHRoaXMucHJvcHMsbCkpLGdoLnJlbmRlckNhbGxCeVBhcmVudCh0aGlzLnByb3BzLGwpKX19XSkmJnlmKHIucHJvdG90eXBlLG4pLGkmJnlmKHIsaSksdH0oKSxzZi5kaXNwbGF5TmFtZT0iUmVmZXJlbmNlQXJlYSIsc2YucHJvcFR5cGVzPXBmKHt9LEgse3ZpZXdCb3g6bS5hLnNoYXBlKHt4Om0uYS5udW1iZXIseTptLmEubnVtYmVyLHdpZHRoOm0uYS5udW1iZXIsaGVpZ2h0Om0uYS5udW1iZXJ9KSx4QXhpczptLmEub2JqZWN0LHlBeGlzOm0uYS5vYmplY3QsaXNGcm9udDptLmEuYm9vbCxhbHdheXNTaG93Om0uYS5ib29sLGlmT3ZlcmZsb3c6bS5hLm9uZU9mKFsiaGlkZGVuIiwidmlzaWJsZSIsImRpc2NhcmQiLCJleHRlbmREb21haW4iXSkseDE6bS5hLm9uZU9mVHlwZShbbS5hLm51bWJlcixtLmEuc3RyaW5nXSkseDI6bS5hLm9uZU9mVHlwZShbbS5hLm51bWJlcixtLmEuc3RyaW5nXSkseTE6bS5hLm9uZU9mVHlwZShbbS5hLm51bWJlcixtLmEuc3RyaW5nXSkseTI6bS5hLm9uZU9mVHlwZShbbS5hLm51bWJlcixtLmEuc3RyaW5nXSksY2xhc3NOYW1lOm0uYS5vbmVPZlR5cGUoW20uYS5udW1iZXIsbS5hLnN0cmluZ10pLHlBeGlzSWQ6bS5hLm9uZU9mVHlwZShbbS5hLnN0cmluZyxtLmEubnVtYmVyXSkseEF4aXNJZDptLmEub25lT2ZUeXBlKFttLmEuc3RyaW5nLG0uYS5udW1iZXJdKSxzaGFwZTptLmEub25lT2ZUeXBlKFttLmEuZnVuYyxtLmEuZWxlbWVudF0pfSksc2YuZGVmYXVsdFByb3BzPXtpc0Zyb250OiExLGlmT3ZlcmZsb3c6ImRpc2NhcmQiLHhBeGlzSWQ6MCx5QXhpc0lkOjAscjoxMCxmaWxsOiIjY2NjIixmaWxsT3BhY2l0eTouNSxzdHJva2U6Im5vbmUiLHN0cm9rZVdpZHRoOjF9LGFmPXVmKSl8fGFmO2Z1bmN0aW9uIF9mKGUpe3JldHVybihfZj0iZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIFNmKCl7cmV0dXJuKFNmPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixuKSYmKGVbbl09cltuXSl9cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gRWYoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9W10sbj0hMCxpPSExLG89dm9pZCAwO3RyeXtmb3IodmFyIGEscz1lW1N5bWJvbC5pdGVyYXRvcl0oKTshKG49KGE9cy5uZXh0KCkpLmRvbmUpJiYoci5wdXNoKGEudmFsdWUpLCF0fHxyLmxlbmd0aCE9PXQpO249ITApO31jYXRjaCh1KXtpPSEwLG89dX1maW5hbGx5e3RyeXtufHxudWxsPT1zLnJldHVybnx8cy5yZXR1cm4oKX1maW5hbGx5e2lmKGkpdGhyb3cgb319cmV0dXJuIHJ9KGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSgpfWZ1bmN0aW9uIHdmKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgcixuLGk9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciByLG4saT17fSxvPU9iamVjdC5rZXlzKGUpO2ZvcihuPTA7bjxvLmxlbmd0aDtuKyspcj1vW25dLHQuaW5kZXhPZihyKT49MHx8KGlbcl09ZVtyXSk7cmV0dXJuIGl9KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iobj0wO248by5sZW5ndGg7bisrKXI9b1tuXSx0LmluZGV4T2Yocik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHIpJiYoaVtyXT1lW3JdKX1yZXR1cm4gaX1mdW5jdGlvbiBUZihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIEFmKGUsdCl7cmV0dXJuIXR8fCJvYmplY3QiIT09X2YodCkmJiJmdW5jdGlvbiIhPT10eXBlb2YgdD9mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpOnR9ZnVuY3Rpb24gQ2YoZSl7cmV0dXJuKENmPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiB4ZihlLHQpe3JldHVybih4Zj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0pKGUsdCl9dmFyIElmPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSxBZih0aGlzLENmKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9dmFyIHIsbixpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmeGYoZSx0KX0odCx5WyJDb21wb25lbnQiXSkscj10LChuPVt7a2V5OiJyZW5kZXJFcnJvckJhcnMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUub2Zmc2V0LHI9ZS5sYXlvdXQsbj1lLndpZHRoLGk9ZS5kYXRhS2V5LG89ZS5kYXRhLGE9ZS5kYXRhUG9pbnRGb3JtYXR0ZXIscz1lLnhBeGlzLHU9ZS55QXhpcyxjPXdmKGUsWyJvZmZzZXQiLCJsYXlvdXQiLCJ3aWR0aCIsImRhdGFLZXkiLCJkYXRhIiwiZGF0YVBvaW50Rm9ybWF0dGVyIiwieEF4aXMiLCJ5QXhpcyJdKSxmPWVlKGMpO3JldHVybiBvLm1hcChmdW5jdGlvbihlLG8pe3ZhciBjLGwsaCxwLGQseSx2LG0sYixfLFMsRSx3PWEoZSxpKSxUPXcueCxBPXcueSxDPXcudmFsdWUseD13LmVycm9yVmFsO2lmKCF4KXJldHVybiBudWxsO2lmKEFycmF5LmlzQXJyYXkoeCkpe3ZhciBJPUVmKHgsMik7Uz1JWzBdLEU9SVsxXX1lbHNlIFM9RT14O3JldHVybiJ2ZXJ0aWNhbCI9PT1yPyh2PXMuc2NhbGUsbD1BK3QsaD12KChjPUMpLVMpLHA9bCtuLG09e3gxOmQ9dihjK0UpLHkxOnAseDI6ZCx5Mjp5PWwtbn0sYj17eDE6aCx5MTpsLHgyOmQseTI6bH0sXz17eDE6aCx5MTpwLHgyOmgseTI6eX0pOiJob3Jpem9udGFsIj09PXImJih2PXUuc2NhbGUsaD0oYz1UK3QpLW4sZD1jK24scD12KChsPUMpLVMpLG09e3gxOmgseTE6eT12KGwrRSkseDI6ZCx5Mjp5fSxiPXt4MTpjLHkxOnAseDI6Yyx5Mjp5fSxfPXt4MTpoLHkxOnAseDI6ZCx5MjpwfSksZy5hLmNyZWF0ZUVsZW1lbnQoenMsU2Yoe2NsYXNzTmFtZToicmVjaGFydHMtZXJyb3JCYXIiLGtleToiYmFyLSIuY29uY2F0KG8pfSxmKSxnLmEuY3JlYXRlRWxlbWVudCgibGluZSIsbSksZy5hLmNyZWF0ZUVsZW1lbnQoImxpbmUiLGIpLGcuYS5jcmVhdGVFbGVtZW50KCJsaW5lIixfKSl9KX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZy5hLmNyZWF0ZUVsZW1lbnQoenMse2NsYXNzTmFtZToicmVjaGFydHMtZXJyb3JCYXJzIn0sdGhpcy5yZW5kZXJFcnJvckJhcnMoKSl9fV0pJiZUZihyLnByb3RvdHlwZSxuKSxpJiZUZihyLGkpLHR9KCk7SWYucHJvcFR5cGVzPXtkYXRhS2V5Om0uYS5vbmVPZlR5cGUoW20uYS5zdHJpbmcsbS5hLm51bWJlcixtLmEuZnVuY10pLmlzUmVxdWlyZWQsZGF0YTptLmEuYXJyYXkseEF4aXM6bS5hLm9iamVjdCx5QXhpczptLmEub2JqZWN0LGxheW91dDptLmEuc3RyaW5nLGRhdGFQb2ludEZvcm1hdHRlcjptLmEuZnVuYyxzdHJva2U6bS5hLnN0cmluZyxzdHJva2VXaWR0aDptLmEubnVtYmVyLHdpZHRoOm0uYS5udW1iZXIsb2Zmc2V0Om0uYS5udW1iZXJ9LElmLmRlZmF1bHRQcm9wcz17c3Ryb2tlOiJibGFjayIsc3Ryb2tlV2lkdGg6MS41LHdpZHRoOjUsb2Zmc2V0OjAsbGF5b3V0OiJob3Jpem9udGFsIn07dmFyIGtmPUlmLE9mPXIoMTI0KSxOZj1yLm4oT2YpO2Z1bmN0aW9uIFBmKCl7cmV0dXJuKFBmPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixuKSYmKGVbbl09cltuXSl9cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gUmYoZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciByLG4saT1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHIsbixpPXt9LG89T2JqZWN0LmtleXMoZSk7Zm9yKG49MDtuPG8ubGVuZ3RoO24rKylyPW9bbl0sdC5pbmRleE9mKHIpPj0wfHwoaVtyXT1lW3JdKTtyZXR1cm4gaX0oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihuPTA7bjxvLmxlbmd0aDtuKyspcj1vW25dLHQuaW5kZXhPZihyKT49MHx8T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscikmJihpW3JdPWVbcl0pfXJldHVybiBpfXZhciBCZj17d2lkdGg6bS5hLm51bWJlci5pc1JlcXVpcmVkLGhlaWdodDptLmEubnVtYmVyLmlzUmVxdWlyZWQsdmlld0JveDptLmEuc2hhcGUoe3g6bS5hLm51bWJlcix5Om0uYS5udW1iZXIsd2lkdGg6bS5hLm51bWJlcixoZWlnaHQ6bS5hLm51bWJlcn0pLGNsYXNzTmFtZTptLmEuc3RyaW5nLHN0eWxlOm0uYS5vYmplY3QsY2hpbGRyZW46bS5hLm9uZU9mVHlwZShbbS5hLmFycmF5T2YobS5hLm5vZGUpLG0uYS5ub2RlXSl9O2Z1bmN0aW9uIE1mKGUpe3ZhciB0PWUuY2hpbGRyZW4scj1lLndpZHRoLG49ZS5oZWlnaHQsaT1lLnZpZXdCb3gsbz1lLmNsYXNzTmFtZSxhPWUuc3R5bGUscz1SZihlLFsiY2hpbGRyZW4iLCJ3aWR0aCIsImhlaWdodCIsInZpZXdCb3giLCJjbGFzc05hbWUiLCJzdHlsZSJdKSx1PWl8fHt3aWR0aDpyLGhlaWdodDpuLHg6MCx5OjB9LGM9XygpKCJyZWNoYXJ0cy1zdXJmYWNlIixvKSxmPWVlKHMpO3JldHVybiBnLmEuY3JlYXRlRWxlbWVudCgic3ZnIixQZih7fSxmLHtjbGFzc05hbWU6Yyx3aWR0aDpyLGhlaWdodDpuLHN0eWxlOmEsdmlld0JveDoiIi5jb25jYXQodS54LCIgIikuY29uY2F0KHUueSwiICIpLmNvbmNhdCh1LndpZHRoLCIgIikuY29uY2F0KHUuaGVpZ2h0KSx2ZXJzaW9uOiIxLjEifSksdCl9TWYucHJvcFR5cGVzPUJmO3ZhciBMZixEZixqZixVZj1NZjtmdW5jdGlvbiBGZihlKXtyZXR1cm4oRmY9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBWZihlLHQscil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1yLGV9ZnVuY3Rpb24gcWYoKXtyZXR1cm4ocWY9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9YXJndW1lbnRzW3RdO2Zvcih2YXIgbiBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG4pJiYoZVtuXT1yW25dKX1yZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBLZihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIHpmKGUsdCl7cmV0dXJuIXR8fCJvYmplY3QiIT09RmYodCkmJiJmdW5jdGlvbiIhPT10eXBlb2YgdD9mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpOnR9ZnVuY3Rpb24gR2YoZSl7cmV0dXJuKEdmPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiBIZihlLHQpe3JldHVybihIZj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0pKGUsdCl9dmFyIFdmLFlmLFhmLFFmPXtzeW1ib2xDaXJjbGU6V2Esc3ltYm9sQ3Jvc3M6WWEsc3ltYm9sRGlhbW9uZDokYSxzeW1ib2xTcXVhcmU6cnMsc3ltYm9sU3Rhcjp0cyxzeW1ib2xUcmlhbmdsZTppcyxzeW1ib2xXeWU6dXN9LCRmPU1hdGguUEkvMTgwLFpmPUsoKGpmPURmPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSx6Zih0aGlzLEdmKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9dmFyIHIsbixpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmSGYoZSx0KX0odCx5WyJDb21wb25lbnQiXSkscj10LChuPVt7a2V5OiJnZXRQYXRoIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnNpemUscj1lLnNpemVUeXBlLG49ZS50eXBlLGk9ZnVuY3Rpb24oZSl7dmFyIHQ9InN5bWJvbCIuY29uY2F0KGUuc2xpY2UoMCwxKS50b1VwcGVyQ2FzZSgpKS5jb25jYXQoZS5zbGljZSgxKSk7cmV0dXJuIFFmW3RdfHxXYX0obik7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9QmEoV2EpLHQ9QmEoNjQpLHI9bnVsbDtmdW5jdGlvbiBuKCl7dmFyIG47aWYocnx8KHI9bj1SYSgpKSxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKS5kcmF3KHIsK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxuKXJldHVybiByPW51bGwsbisiInx8bnVsbH1yZXR1cm4gbi50eXBlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PT10eXBlb2YgdD90OkJhKHQpLG4pOmV9LG4uc2l6ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT09dHlwZW9mIGU/ZTpCYSgrZSksbik6dH0sbi5jb250ZXh0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PWU/bnVsbDplLG4pOnJ9LG59KCkudHlwZShpKS5zaXplKGZ1bmN0aW9uKGUsdCxyKXtpZigiYXJlYSI9PT10KXJldHVybiBlO3N3aXRjaChyKXtjYXNlImNyb3NzIjpyZXR1cm4gNSplKmUvOTtjYXNlImRpYW1vbmQiOnJldHVybi41KmUqZS9NYXRoLnNxcnQoMyk7Y2FzZSJzcXVhcmUiOnJldHVybiBlKmU7Y2FzZSJzdGFyIjp2YXIgbj0xOCokZjtyZXR1cm4gMS4yNSplKmUqKE1hdGgudGFuKG4pLU1hdGgudGFuKDIqbikqTWF0aC5wb3coTWF0aC50YW4obiksMikpO2Nhc2UidHJpYW5nbGUiOnJldHVybiBNYXRoLnNxcnQoMykqZSplLzQ7Y2FzZSJ3eWUiOnJldHVybigyMS0xMCpNYXRoLnNxcnQoMykpKmUqZS84O2RlZmF1bHQ6cmV0dXJuIE1hdGguUEkqZSplLzR9fSh0LHIsbikpKCl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuY2xhc3NOYW1lLHI9ZS5jeCxuPWUuY3ksaT1lLnNpemU7cmV0dXJuIHI9PT0rciYmbj09PStuJiZpPT09K2k/Zy5hLmNyZWF0ZUVsZW1lbnQoInBhdGgiLHFmKHt9LGVlKHRoaXMucHJvcHMpLHJlKHRoaXMucHJvcHMpLHtjbGFzc05hbWU6XygpKCJyZWNoYXJ0cy1zeW1ib2xzIix0KSx0cmFuc2Zvcm06InRyYW5zbGF0ZSgiLmNvbmNhdChyLCIsICIpLmNvbmNhdChuLCIpIiksZDp0aGlzLmdldFBhdGgoKX0pKTpudWxsfX1dKSYmS2Yoci5wcm90b3R5cGUsbiksaSYmS2YocixpKSx0fSgpLERmLmRpc3BsYXlOYW1lPSJTeW1ib2xzIixEZi5wcm9wVHlwZXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxuPU9iamVjdC5rZXlzKHIpOyJmdW5jdGlvbiI9PT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKG49bi5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhyKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKS5lbnVtZXJhYmxlfSkpKSxuLmZvckVhY2goZnVuY3Rpb24odCl7VmYoZSx0LHJbdF0pfSl9cmV0dXJuIGV9KHt9LEgse2NsYXNzTmFtZTptLmEuc3RyaW5nLHR5cGU6bS5hLm9uZU9mKFsiY2lyY2xlIiwiY3Jvc3MiLCJkaWFtb25kIiwic3F1YXJlIiwic3RhciIsInRyaWFuZ2xlIiwid3llIl0pLGN4Om0uYS5udW1iZXIsY3k6bS5hLm51bWJlcixzaXplOm0uYS5udW1iZXIsc2l6ZVR5cGU6bS5hLm9uZU9mKFsiYXJlYSIsImRpYW1ldGVyIl0pfSksRGYuZGVmYXVsdFByb3BzPXt0eXBlOiJjaXJjbGUiLHNpemU6NjQsc2l6ZVR5cGU6ImFyZWEifSxMZj1qZikpfHxMZjtmdW5jdGlvbiBKZihlKXtyZXR1cm4oSmY9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBlbCgpe3JldHVybihlbD1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikmJihlW25dPXJbbl0pfXJldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHRsKGUsdCxyKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX1mdW5jdGlvbiBybChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIG5sKGUsdCl7cmV0dXJuIXR8fCJvYmplY3QiIT09SmYodCkmJiJmdW5jdGlvbiIhPT10eXBlb2YgdD9mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpOnR9ZnVuY3Rpb24gaWwoZSl7cmV0dXJuKGlsPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiBvbChlLHQpe3JldHVybihvbD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0pKGUsdCl9dmFyIGFsLHNsLHVsLGNsPVguZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiJub25lIiE9PWV9KSxmbD1LKChYZj1ZZj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksbmwodGhpcyxpbCh0KS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJm9sKGUsdCl9KHQseVsiQ29tcG9uZW50Il0pLHI9dCwobj1be2tleToicmVuZGVySWNvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcy5pbmFjdGl2ZUNvbG9yLHI9ZS5pbmFjdGl2ZT90OmUuY29sb3I7cmV0dXJuInBsYWlubGluZSI9PT1lLnR5cGU/Zy5hLmNyZWF0ZUVsZW1lbnQoImxpbmUiLHtzdHJva2VXaWR0aDo0LGZpbGw6Im5vbmUiLHN0cm9rZTpyLHN0cm9rZURhc2hhcnJheTplLnBheWxvYWQuc3Ryb2tlRGFzaGFycmF5LHgxOjAseTE6MTYseDI6MzIseTI6MTYsY2xhc3NOYW1lOiJyZWNoYXJ0cy1sZWdlbmQtaWNvbiJ9KToibGluZSI9PT1lLnR5cGU/Zy5hLmNyZWF0ZUVsZW1lbnQoInBhdGgiLHtzdHJva2VXaWR0aDo0LGZpbGw6Im5vbmUiLHN0cm9rZTpyLGQ6Ik0wLCIuY29uY2F0KDE2LCJoIikuY29uY2F0KDMyLzMsIlxuICAgICAgICAgICAgQSIpLmNvbmNhdCgzMi82LCIsIikuY29uY2F0KDMyLzYsIiwwLDEsMSwiKS5jb25jYXQoMzIvMyoyLCIsIikuY29uY2F0KDE2LCJcbiAgICAgICAgICAgIEgiKS5jb25jYXQoMzIsIk0iKS5jb25jYXQoMzIvMyoyLCIsIikuY29uY2F0KDE2LCJcbiAgICAgICAgICAgIEEiKS5jb25jYXQoMzIvNiwiLCIpLmNvbmNhdCgzMi82LCIsMCwxLDEsIikuY29uY2F0KDMyLzMsIiwiKS5jb25jYXQoMTYpLGNsYXNzTmFtZToicmVjaGFydHMtbGVnZW5kLWljb24ifSk6InJlY3QiPT09ZS50eXBlP2cuYS5jcmVhdGVFbGVtZW50KCJwYXRoIix7c3Ryb2tlOiJub25lIixmaWxsOnIsZDoiTTAsIi5jb25jYXQoNCwiaCIpLmNvbmNhdCgzMiwidiIpLmNvbmNhdCgyNCwiaCIpLmNvbmNhdCgtMzIsInoiKSxjbGFzc05hbWU6InJlY2hhcnRzLWxlZ2VuZC1pY29uIn0pOmcuYS5jcmVhdGVFbGVtZW50KFpmLHtmaWxsOnIsY3g6MTYsY3k6MTYsc2l6ZTozMixzaXplVHlwZToiZGlhbWV0ZXIiLHR5cGU6ZS50eXBlfSl9fSx7a2V5OiJyZW5kZXJJdGVtcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcyxyPXQucGF5bG9hZCxuPXQuaWNvblNpemUsaT10LmxheW91dCxvPXQuZm9ybWF0dGVyLGE9e3g6MCx5OjAsd2lkdGg6MzIsaGVpZ2h0OjMyfSxzPXtkaXNwbGF5OiJob3Jpem9udGFsIj09PWk/ImlubGluZS1ibG9jayI6ImJsb2NrIixtYXJnaW5SaWdodDoxMH0sdT17ZGlzcGxheToiaW5saW5lLWJsb2NrIix2ZXJ0aWNhbEFsaWduOiJtaWRkbGUiLG1hcmdpblJpZ2h0OjR9O3JldHVybiByLm1hcChmdW5jdGlvbih0LHIpe3ZhciBpLGM9dC5mb3JtYXR0ZXJ8fG8sZj1fKCkoKHRsKGk9eyJyZWNoYXJ0cy1sZWdlbmQtaXRlbSI6ITB9LCJsZWdlbmQtaXRlbS0iLmNvbmNhdChyKSwhMCksdGwoaSwiaW5hY3RpdmUiLHQuaW5hY3RpdmUpLGkpKTtyZXR1cm4ibm9uZSI9PT10LnR5cGU/bnVsbDpnLmEuY3JlYXRlRWxlbWVudCgibGkiLGVsKHtjbGFzc05hbWU6ZixzdHlsZTpzLGtleToibGVnZW5kLWl0ZW0tIi5jb25jYXQocil9LGllKGUucHJvcHMsdCxyKSksZy5hLmNyZWF0ZUVsZW1lbnQoVWYse3dpZHRoOm4saGVpZ2h0Om4sdmlld0JveDphLHN0eWxlOnV9LGUucmVuZGVySWNvbih0KSksZy5hLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6InJlY2hhcnRzLWxlZ2VuZC1pdGVtLXRleHQifSxjP2ModC52YWx1ZSx0LHIpOnQudmFsdWUpKX0pfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnBheWxvYWQscj1lLmxheW91dCxuPWUuYWxpZ247aWYoIXR8fCF0Lmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgaT17cGFkZGluZzowLG1hcmdpbjowLHRleHRBbGlnbjoiaG9yaXpvbnRhbCI9PT1yP246ImxlZnQifTtyZXR1cm4gZy5hLmNyZWF0ZUVsZW1lbnQoInVsIix7Y2xhc3NOYW1lOiJyZWNoYXJ0cy1kZWZhdWx0LWxlZ2VuZCIsc3R5bGU6aX0sdGhpcy5yZW5kZXJJdGVtcygpKX19XSkmJnJsKHIucHJvdG90eXBlLG4pLGkmJnJsKHIsaSksdH0oKSxZZi5kaXNwbGF5TmFtZT0iTGVnZW5kIixZZi5wcm9wVHlwZXM9e2NvbnRlbnQ6bS5hLmVsZW1lbnQsaWNvblNpemU6bS5hLm51bWJlcixpY29uVHlwZTptLmEub25lT2YoY2wpLGxheW91dDptLmEub25lT2YoWyJob3Jpem9udGFsIiwidmVydGljYWwiXSksYWxpZ246bS5hLm9uZU9mKFsiY2VudGVyIiwibGVmdCIsInJpZ2h0Il0pLHZlcnRpY2FsQWxpZ246bS5hLm9uZU9mKFsidG9wIiwiYm90dG9tIiwibWlkZGxlIl0pLHBheWxvYWQ6bS5hLmFycmF5T2YobS5hLnNoYXBlKHt2YWx1ZTptLmEuYW55LGlkOm0uYS5hbnksdHlwZTptLmEub25lT2YoWCl9KSksaW5hY3RpdmVDb2xvcjptLmEuc3RyaW5nLGZvcm1hdHRlcjptLmEuZnVuYyxvbk1vdXNlRW50ZXI6bS5hLmZ1bmMsb25Nb3VzZUxlYXZlOm0uYS5mdW5jLG9uQ2xpY2s6bS5hLmZ1bmN9LFlmLmRlZmF1bHRQcm9wcz17aWNvblNpemU6MTQsbGF5b3V0OiJob3Jpem9udGFsIixhbGlnbjoiY2VudGVyIix2ZXJ0aWNhbEFsaWduOiJtaWRkbGUiLGluYWN0aXZlQ29sb3I6IiNjY2MifSxXZj1YZikpfHxXZjtmdW5jdGlvbiBsbChlKXtyZXR1cm4obGw9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBobChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LG49T2JqZWN0LmtleXMocik7ImZ1bmN0aW9uIj09PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYobj1uLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHIpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGUpLmVudW1lcmFibGV9KSkpLG4uZm9yRWFjaChmdW5jdGlvbih0KXtwbChlLHQsclt0XSl9KX1yZXR1cm4gZX1mdW5jdGlvbiBwbChlLHQscil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1yLGV9ZnVuY3Rpb24gZGwoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiB5bChlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PWxsKHQpJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZQ=="
}
Changelog:
{
"2020.03.29 15:15": "base64:KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiByZihlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PVpjKHQpJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKTp0fWZ1bmN0aW9uIG5mKGUpe3JldHVybihuZj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gb2YoZSx0KXtyZXR1cm4ob2Y9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfXZhciBhZixzZix1ZixjZj1mdW5jdGlvbihlLHQscixuLGkpe3ZhciBvLGE9TWF0aC5taW4oTWF0aC5hYnMocikvMixNYXRoLmFicyhuKS8yKSxzPW4+PTA/MTotMSx1PXI+PTA/MTotMSxjPW4+PTAmJnI+PTB8fG48MCYmcjwwPzE6MDtpZihhPjAmJmkgaW5zdGFuY2VvZiBBcnJheSl7Zm9yKHZhciBmPVtdLGw9MDtsPDQ7bCsrKWZbbF09aVtsXT5hP2E6aVtsXTtvPSJNIi5jb25jYXQoZSwiLCIpLmNvbmNhdCh0K3MqZlswXSksZlswXT4wJiYobys9IkEgIi5jb25jYXQoZlswXSwiLCIpLmNvbmNhdChmWzBdLCIsMCwwLCIpLmNvbmNhdChjLCIsIikuY29uY2F0KGUrdSpmWzBdLCIsIikuY29uY2F0KHQpKSxvKz0iTCAiLmNvbmNhdChlK3ItdSpmWzFdLCIsIikuY29uY2F0KHQpLGZbMV0+MCYmKG8rPSJBICIuY29uY2F0KGZbMV0sIiwiKS5jb25jYXQoZlsxXSwiLDAsMCwiKS5jb25jYXQoYywiLFxuICAgICAgICAiKS5jb25jYXQoZStyLCIsIikuY29uY2F0KHQrcypmWzFdKSksbys9IkwgIi5jb25jYXQoZStyLCIsIikuY29uY2F0KHQrbi1zKmZbMl0pLGZbMl0+MCYmKG8rPSJBICIuY29uY2F0KGZbMl0sIiwiKS5jb25jYXQoZlsyXSwiLDAsMCwiKS5jb25jYXQoYywiLFxuICAgICAgICAiKS5jb25jYXQoZStyLXUqZlsyXSwiLCIpLmNvbmNhdCh0K24pKSxvKz0iTCAiLmNvbmNhdChlK3UqZlszXSwiLCIpLmNvbmNhdCh0K24pLGZbM10+MCYmKG8rPSJBICIuY29uY2F0KGZbM10sIiwiKS5jb25jYXQoZlszXSwiLDAsMCwiKS5jb25jYXQoYywiLFxuICAgICAgICAiKS5jb25jYXQoZSwiLCIpLmNvbmNhdCh0K24tcypmWzNdKSksbys9IloifWVsc2UgaWYoYT4wJiZpPT09K2kmJmk+MCl7dmFyIGg9TWF0aC5taW4oYSxpKTtvPSJNICIuY29uY2F0KGUsIiwiKS5jb25jYXQodCtzKmgsIlxuICAgICAgICAgICAgQSAiKS5jb25jYXQoaCwiLCIpLmNvbmNhdChoLCIsMCwwLCIpLmNvbmNhdChjLCIsIikuY29uY2F0KGUrdSpoLCIsIikuY29uY2F0KHQsIlxuICAgICAgICAgICAgTCAiKS5jb25jYXQoZStyLXUqaCwiLCIpLmNvbmNhdCh0LCJcbiAgICAgICAgICAgIEEgIikuY29uY2F0KGgsIiwiKS5jb25jYXQoaCwiLDAsMCwiKS5jb25jYXQoYywiLCIpLmNvbmNhdChlK3IsIiwiKS5jb25jYXQodCtzKmgsIlxuICAgICAgICAgICAgTCAiKS5jb25jYXQoZStyLCIsIikuY29uY2F0KHQrbi1zKmgsIlxuICAgICAgICAgICAgQSAiKS5jb25jYXQoaCwiLCIpLmNvbmNhdChoLCIsMCwwLCIpLmNvbmNhdChjLCIsIikuY29uY2F0KGUrci11KmgsIiwiKS5jb25jYXQodCtuLCJcbiAgICAgICAgICAgIEwgIikuY29uY2F0KGUrdSpoLCIsIikuY29uY2F0KHQrbiwiXG4gICAgICAgICAgICBBICIpLmNvbmNhdChoLCIsIikuY29uY2F0KGgsIiwwLDAsIikuY29uY2F0KGMsIiwiKS5jb25jYXQoZSwiLCIpLmNvbmNhdCh0K24tcypoLCIgWiIpfWVsc2Ugbz0iTSAiLmNvbmNhdChlLCIsIikuY29uY2F0KHQsIiBoICIpLmNvbmNhdChyLCIgdiAiKS5jb25jYXQobiwiIGggIikuY29uY2F0KC1yLCIgWiIpO3JldHVybiBvfSxmZj1LKChRYz1YYz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUscjshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KTtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPTA7bzxuO28rKylpW29dPWFyZ3VtZW50c1tvXTtyZXR1cm4ocj1yZih0aGlzLChlPW5mKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpKS5zdGF0ZT17dG90YWxMZW5ndGg6LTF9LHJ9dmFyIHIsbixpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmb2YoZSx0KX0odCx5WyJDb21wb25lbnQiXSkscj10LChuPVt7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLm5vZGUmJnRoaXMubm9kZS5nZXRUb3RhbExlbmd0aCl0cnl7dmFyIGU9dGhpcy5ub2RlLmdldFRvdGFsTGVuZ3RoKCk7ZSYmdGhpcy5zZXRTdGF0ZSh7dG90YWxMZW5ndGg6ZX0pfWNhdGNoKHQpe319fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMscj10Lngsbj10LnksaT10LndpZHRoLG89dC5oZWlnaHQsYT10LnJhZGl1cyxzPXQuY2xhc3NOYW1lLHU9dGhpcy5zdGF0ZS50b3RhbExlbmd0aCxjPXRoaXMucHJvcHMsZj1jLmFuaW1hdGlvbkVhc2luZyxsPWMuYW5pbWF0aW9uRHVyYXRpb24saD1jLmFuaW1hdGlvbkJlZ2luLHA9Yy5pc0FuaW1hdGlvbkFjdGl2ZSxkPWMuaXNVcGRhdGVBbmltYXRpb25BY3RpdmU7aWYociE9PStyfHxuIT09K258fGkhPT0raXx8byE9PStvfHwwPT09aXx8MD09PW8pcmV0dXJuIG51bGw7dmFyIHk9XygpKCJyZWNoYXJ0cy1yZWN0YW5nbGUiLHMpO3JldHVybiBkP2cuYS5jcmVhdGVFbGVtZW50KCRjLHtjYW5CZWdpbjp1PjAsZnJvbTp7d2lkdGg6aSxoZWlnaHQ6byx4OnIseTpufSx0bzp7d2lkdGg6aSxoZWlnaHQ6byx4OnIseTpufSxkdXJhdGlvbjpsLGFuaW1hdGlvbkVhc2luZzpmLGlzQWN0aXZlOmR9LGZ1bmN0aW9uKHQpe3ZhciByPXQud2lkdGgsbj10LmhlaWdodCxpPXQueCxvPXQueTtyZXR1cm4gZy5hLmNyZWF0ZUVsZW1lbnQoJGMse2NhbkJlZ2luOnU+MCxmcm9tOiIwcHggIi5jb25jYXQoLTE9PT11PzE6dSwicHgiKSx0bzoiIi5jb25jYXQodSwicHggMHB4IiksYXR0cmlidXRlTmFtZToic3Ryb2tlRGFzaGFycmF5IixiZWdpbjpoLGR1cmF0aW9uOmwsaXNBY3RpdmU6cCxlYXNpbmc6Zn0sZy5hLmNyZWF0ZUVsZW1lbnQoInBhdGgiLGVmKHt9LGVlKGUucHJvcHMpLHJlKGUucHJvcHMpLHtjbGFzc05hbWU6eSxkOmNmKGksbyxyLG4sYSkscmVmOmZ1bmN0aW9uKHQpe2Uubm9kZT10fX0pKSl9KTpnLmEuY3JlYXRlRWxlbWVudCgicGF0aCIsZWYoe30sZWUodGhpcy5wcm9wcykscmUodGhpcy5wcm9wcykse2NsYXNzTmFtZTp5LGQ6Y2YocixuLGksbyxhKX0pKX19XSkmJnRmKHIucHJvdG90eXBlLG4pLGkmJnRmKHIsaSksdH0oKSxYYy5kaXNwbGF5TmFtZT0iUmVjdGFuZ2xlIixYYy5wcm9wVHlwZXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxuPU9iamVjdC5rZXlzKHIpOyJmdW5jdGlvbiI9PT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKG49bi5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhyKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKS5lbnVtZXJhYmxlfSkpKSxuLmZvckVhY2goZnVuY3Rpb24odCl7SmMoZSx0LHJbdF0pfSl9cmV0dXJuIGV9KHt9LEgsVyx7Y2xhc3NOYW1lOm0uYS5zdHJpbmcseDptLmEubnVtYmVyLHk6bS5hLm51bWJlcix3aWR0aDptLmEubnVtYmVyLGhlaWdodDptLmEubnVtYmVyLHJhZGl1czptLmEub25lT2ZUeXBlKFttLmEubnVtYmVyLG0uYS5hcnJheV0pLGlzQW5pbWF0aW9uQWN0aXZlOm0uYS5ib29sLGlzVXBkYXRlQW5pbWF0aW9uQWN0aXZlOm0uYS5ib29sLGFuaW1hdGlvbkJlZ2luOm0uYS5udW1iZXIsYW5pbWF0aW9uRHVyYXRpb246bS5hLm51bWJlcixhbmltYXRpb25FYXNpbmc6bS5hLm9uZU9mKFsiZWFzZSIsImVhc2UtaW4iLCJlYXNlLW91dCIsImVhc2UtaW4tb3V0IiwibGluZWFyIl0pfSksWGMuZGVmYXVsdFByb3BzPXt4OjAseTowLHdpZHRoOjAsaGVpZ2h0OjAscmFkaXVzOjAsaXNBbmltYXRpb25BY3RpdmU6ITEsaXNVcGRhdGVBbmltYXRpb25BY3RpdmU6ITEsYW5pbWF0aW9uQmVnaW46MCxhbmltYXRpb25EdXJhdGlvbjoxNTAwLGFuaW1hdGlvbkVhc2luZzoiZWFzZSJ9LFljPVFjKSl8fFljO2Z1bmN0aW9uIGxmKGUpe3JldHVybihsZj0iZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIGhmKCl7cmV0dXJuKGhmPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixuKSYmKGVbbl09cltuXSl9cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcGYoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxuPU9iamVjdC5rZXlzKHIpOyJmdW5jdGlvbiI9PT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKG49bi5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhyKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKS5lbnVtZXJhYmxlfSkpKSxuLmZvckVhY2goZnVuY3Rpb24odCl7ZGYoZSx0LHJbdF0pfSl9cmV0dXJuIGV9ZnVuY3Rpb24gZGYoZSx0LHIpe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfWZ1bmN0aW9uIHlmKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLmtleSxuKX19ZnVuY3Rpb24gZ2YoZSx0KXtyZXR1cm4hdHx8Im9iamVjdCIhPT1sZih0KSYmImZ1bmN0aW9uIiE9PXR5cGVvZiB0P2Z1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSk6dH1mdW5jdGlvbiB2ZihlKXtyZXR1cm4odmY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0pKGUpfWZ1bmN0aW9uIG1mKGUsdCl7cmV0dXJuKG1mPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSkoZSx0KX12YXIgYmY9SygodWY9c2Y9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLGdmKHRoaXMsdmYodCkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX12YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiZtZihlLHQpfSh0LHlbIkNvbXBvbmVudCJdKSxyPXQsaT1be2tleToicmVuZGVyUmVjdCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZy5hLmlzVmFsaWRFbGVtZW50KGUpP2cuYS5jbG9uZUVsZW1lbnQoZSx0KTp1KCkoZSk/ZSh0KTpnLmEuY3JlYXRlRWxlbWVudChmZixoZih7fSx0LHtjbGFzc05hbWU6InJlY2hhcnRzLXJlZmVyZW5jZS1hcmVhLXJlY3QifSkpfX1dLChuPVt7a2V5OiJnZXRSZWN0Iix2YWx1ZTpmdW5jdGlvbihlLHQscixuKXt2YXIgaT10aGlzLnByb3BzLG89aS54MSxhPWkueDIscz1pLnkxLHU9aS55MixjPWkueEF4aXMsZj1pLnlBeGlzLGw9aHUuY3JlYXRlKHt4OmMuc2NhbGUseTpmLnNjYWxlfSksaD17eDplP2wueC5hcHBseShvKTpsLngucmFuZ2VNaW4seTpyP2wueS5hcHBseShzKTpsLnkucmFuZ2VNaW59LHA9e3g6dD9sLnguYXBwbHkoYSk6bC54LnJhbmdlTWF4LHk6bj9sLnkuYXBwbHkodSk6bC55LnJhbmdlTWF4fTtyZXR1cm4hVmwodGhpcy5wcm9wcywiZGlzY2FyZCIpfHxsLmlzSW5SYW5nZShoKSYmbC5pc0luUmFuZ2UocCk/c3UoaCxwKTpudWxsfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLngxLHI9ZS54MixuPWUueTEsaT1lLnkyLG89ZS5jbGFzc05hbWUsYT0oZS5hbHdheXNTaG93LGUuY2xpcFBhdGhJZCkscz1CKHQpLHU9QihyKSxjPUIobiksZj1CKGkpO2lmKCFzJiYhdSYmIWMmJiFmKXJldHVybiBudWxsO3ZhciBsPXRoaXMuZ2V0UmVjdChzLHUsYyxmKTtpZighbClyZXR1cm4gbnVsbDt2YXIgaD10aGlzLnByb3BzLnNoYXBlLHA9VmwodGhpcy5wcm9wcywiaGlkZGVuIik/InVybCgjIi5jb25jYXQoYSwiKSIpOnZvaWQgMDtyZXR1cm4gZy5hLmNyZWF0ZUVsZW1lbnQoenMse2NsYXNzTmFtZTpfKCkoInJlY2hhcnRzLXJlZmVyZW5jZS1hcmVhIixvKX0sdGhpcy5jb25zdHJ1Y3Rvci5yZW5kZXJSZWN0KGgscGYoe2NsaXBQYXRoOnB9LHRoaXMucHJvcHMsbCkpLGdoLnJlbmRlckNhbGxCeVBhcmVudCh0aGlzLnByb3BzLGwpKX19XSkmJnlmKHIucHJvdG90eXBlLG4pLGkmJnlmKHIsaSksdH0oKSxzZi5kaXNwbGF5TmFtZT0iUmVmZXJlbmNlQXJlYSIsc2YucHJvcFR5cGVzPXBmKHt9LEgse3ZpZXdCb3g6bS5hLnNoYXBlKHt4Om0uYS5udW1iZXIseTptLmEubnVtYmVyLHdpZHRoOm0uYS5udW1iZXIsaGVpZ2h0Om0uYS5udW1iZXJ9KSx4QXhpczptLmEub2JqZWN0LHlBeGlzOm0uYS5vYmplY3QsaXNGcm9udDptLmEuYm9vbCxhbHdheXNTaG93Om0uYS5ib29sLGlmT3ZlcmZsb3c6bS5hLm9uZU9mKFsiaGlkZGVuIiwidmlzaWJsZSIsImRpc2NhcmQiLCJleHRlbmREb21haW4iXSkseDE6bS5hLm9uZU9mVHlwZShbbS5hLm51bWJlcixtLmEuc3RyaW5nXSkseDI6bS5hLm9uZU9mVHlwZShbbS5hLm51bWJlcixtLmEuc3RyaW5nXSkseTE6bS5hLm9uZU9mVHlwZShbbS5hLm51bWJlcixtLmEuc3RyaW5nXSkseTI6bS5hLm9uZU9mVHlwZShbbS5hLm51bWJlcixtLmEuc3RyaW5nXSksY2xhc3NOYW1lOm0uYS5vbmVPZlR5cGUoW20uYS5udW1iZXIsbS5hLnN0cmluZ10pLHlBeGlzSWQ6bS5hLm9uZU9mVHlwZShbbS5hLnN0cmluZyxtLmEubnVtYmVyXSkseEF4aXNJZDptLmEub25lT2ZUeXBlKFttLmEuc3RyaW5nLG0uYS5udW1iZXJdKSxzaGFwZTptLmEub25lT2ZUeXBlKFttLmEuZnVuYyxtLmEuZWxlbWVudF0pfSksc2YuZGVmYXVsdFByb3BzPXtpc0Zyb250OiExLGlmT3ZlcmZsb3c6ImRpc2NhcmQiLHhBeGlzSWQ6MCx5QXhpc0lkOjAscjoxMCxmaWxsOiIjY2NjIixmaWxsT3BhY2l0eTouNSxzdHJva2U6Im5vbmUiLHN0cm9rZVdpZHRoOjF9LGFmPXVmKSl8fGFmO2Z1bmN0aW9uIF9mKGUpe3JldHVybihfZj0iZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIFNmKCl7cmV0dXJuKFNmPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixuKSYmKGVbbl09cltuXSl9cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gRWYoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9W10sbj0hMCxpPSExLG89dm9pZCAwO3RyeXtmb3IodmFyIGEscz1lW1N5bWJvbC5pdGVyYXRvcl0oKTshKG49KGE9cy5uZXh0KCkpLmRvbmUpJiYoci5wdXNoKGEudmFsdWUpLCF0fHxyLmxlbmd0aCE9PXQpO249ITApO31jYXRjaCh1KXtpPSEwLG89dX1maW5hbGx5e3RyeXtufHxudWxsPT1zLnJldHVybnx8cy5yZXR1cm4oKX1maW5hbGx5e2lmKGkpdGhyb3cgb319cmV0dXJuIHJ9KGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSgpfWZ1bmN0aW9uIHdmKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgcixuLGk9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciByLG4saT17fSxvPU9iamVjdC5rZXlzKGUpO2ZvcihuPTA7bjxvLmxlbmd0aDtuKyspcj1vW25dLHQuaW5kZXhPZihyKT49MHx8KGlbcl09ZVtyXSk7cmV0dXJuIGl9KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iobj0wO248by5sZW5ndGg7bisrKXI9b1tuXSx0LmluZGV4T2Yocik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHIpJiYoaVtyXT1lW3JdKX1yZXR1cm4gaX1mdW5jdGlvbiBUZihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIEFmKGUsdCl7cmV0dXJuIXR8fCJvYmplY3QiIT09X2YodCkmJiJmdW5jdGlvbiIhPT10eXBlb2YgdD9mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpOnR9ZnVuY3Rpb24gQ2YoZSl7cmV0dXJuKENmPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiB4ZihlLHQpe3JldHVybih4Zj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0pKGUsdCl9dmFyIElmPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSxBZih0aGlzLENmKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9dmFyIHIsbixpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmeGYoZSx0KX0odCx5WyJDb21wb25lbnQiXSkscj10LChuPVt7a2V5OiJyZW5kZXJFcnJvckJhcnMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUub2Zmc2V0LHI9ZS5sYXlvdXQsbj1lLndpZHRoLGk9ZS5kYXRhS2V5LG89ZS5kYXRhLGE9ZS5kYXRhUG9pbnRGb3JtYXR0ZXIscz1lLnhBeGlzLHU9ZS55QXhpcyxjPXdmKGUsWyJvZmZzZXQiLCJsYXlvdXQiLCJ3aWR0aCIsImRhdGFLZXkiLCJkYXRhIiwiZGF0YVBvaW50Rm9ybWF0dGVyIiwieEF4aXMiLCJ5QXhpcyJdKSxmPWVlKGMpO3JldHVybiBvLm1hcChmdW5jdGlvbihlLG8pe3ZhciBjLGwsaCxwLGQseSx2LG0sYixfLFMsRSx3PWEoZSxpKSxUPXcueCxBPXcueSxDPXcudmFsdWUseD13LmVycm9yVmFsO2lmKCF4KXJldHVybiBudWxsO2lmKEFycmF5LmlzQXJyYXkoeCkpe3ZhciBJPUVmKHgsMik7Uz1JWzBdLEU9SVsxXX1lbHNlIFM9RT14O3JldHVybiJ2ZXJ0aWNhbCI9PT1yPyh2PXMuc2NhbGUsbD1BK3QsaD12KChjPUMpLVMpLHA9bCtuLG09e3gxOmQ9dihjK0UpLHkxOnAseDI6ZCx5Mjp5PWwtbn0sYj17eDE6aCx5MTpsLHgyOmQseTI6bH0sXz17eDE6aCx5MTpwLHgyOmgseTI6eX0pOiJob3Jpem9udGFsIj09PXImJih2PXUuc2NhbGUsaD0oYz1UK3QpLW4sZD1jK24scD12KChsPUMpLVMpLG09e3gxOmgseTE6eT12KGwrRSkseDI6ZCx5Mjp5fSxiPXt4MTpjLHkxOnAseDI6Yyx5Mjp5fSxfPXt4MTpoLHkxOnAseDI6ZCx5MjpwfSksZy5hLmNyZWF0ZUVsZW1lbnQoenMsU2Yoe2NsYXNzTmFtZToicmVjaGFydHMtZXJyb3JCYXIiLGtleToiYmFyLSIuY29uY2F0KG8pfSxmKSxnLmEuY3JlYXRlRWxlbWVudCgibGluZSIsbSksZy5hLmNyZWF0ZUVsZW1lbnQoImxpbmUiLGIpLGcuYS5jcmVhdGVFbGVtZW50KCJsaW5lIixfKSl9KX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZy5hLmNyZWF0ZUVsZW1lbnQoenMse2NsYXNzTmFtZToicmVjaGFydHMtZXJyb3JCYXJzIn0sdGhpcy5yZW5kZXJFcnJvckJhcnMoKSl9fV0pJiZUZihyLnByb3RvdHlwZSxuKSxpJiZUZihyLGkpLHR9KCk7SWYucHJvcFR5cGVzPXtkYXRhS2V5Om0uYS5vbmVPZlR5cGUoW20uYS5zdHJpbmcsbS5hLm51bWJlcixtLmEuZnVuY10pLmlzUmVxdWlyZWQsZGF0YTptLmEuYXJyYXkseEF4aXM6bS5hLm9iamVjdCx5QXhpczptLmEub2JqZWN0LGxheW91dDptLmEuc3RyaW5nLGRhdGFQb2ludEZvcm1hdHRlcjptLmEuZnVuYyxzdHJva2U6bS5hLnN0cmluZyxzdHJva2VXaWR0aDptLmEubnVtYmVyLHdpZHRoOm0uYS5udW1iZXIsb2Zmc2V0Om0uYS5udW1iZXJ9LElmLmRlZmF1bHRQcm9wcz17c3Ryb2tlOiJibGFjayIsc3Ryb2tlV2lkdGg6MS41LHdpZHRoOjUsb2Zmc2V0OjAsbGF5b3V0OiJob3Jpem9udGFsIn07dmFyIGtmPUlmLE9mPXIoMTI0KSxOZj1yLm4oT2YpO2Z1bmN0aW9uIFBmKCl7cmV0dXJuKFBmPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixuKSYmKGVbbl09cltuXSl9cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gUmYoZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciByLG4saT1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHIsbixpPXt9LG89T2JqZWN0LmtleXMoZSk7Zm9yKG49MDtuPG8ubGVuZ3RoO24rKylyPW9bbl0sdC5pbmRleE9mKHIpPj0wfHwoaVtyXT1lW3JdKTtyZXR1cm4gaX0oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihuPTA7bjxvLmxlbmd0aDtuKyspcj1vW25dLHQuaW5kZXhPZihyKT49MHx8T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscikmJihpW3JdPWVbcl0pfXJldHVybiBpfXZhciBCZj17d2lkdGg6bS5hLm51bWJlci5pc1JlcXVpcmVkLGhlaWdodDptLmEubnVtYmVyLmlzUmVxdWlyZWQsdmlld0JveDptLmEuc2hhcGUoe3g6bS5hLm51bWJlcix5Om0uYS5udW1iZXIsd2lkdGg6bS5hLm51bWJlcixoZWlnaHQ6bS5hLm51bWJlcn0pLGNsYXNzTmFtZTptLmEuc3RyaW5nLHN0eWxlOm0uYS5vYmplY3QsY2hpbGRyZW46bS5hLm9uZU9mVHlwZShbbS5hLmFycmF5T2YobS5hLm5vZGUpLG0uYS5ub2RlXSl9O2Z1bmN0aW9uIE1mKGUpe3ZhciB0PWUuY2hpbGRyZW4scj1lLndpZHRoLG49ZS5oZWlnaHQsaT1lLnZpZXdCb3gsbz1lLmNsYXNzTmFtZSxhPWUuc3R5bGUscz1SZihlLFsiY2hpbGRyZW4iLCJ3aWR0aCIsImhlaWdodCIsInZpZXdCb3giLCJjbGFzc05hbWUiLCJzdHlsZSJdKSx1PWl8fHt3aWR0aDpyLGhlaWdodDpuLHg6MCx5OjB9LGM9XygpKCJyZWNoYXJ0cy1zdXJmYWNlIixvKSxmPWVlKHMpO3JldHVybiBnLmEuY3JlYXRlRWxlbWVudCgic3ZnIixQZih7fSxmLHtjbGFzc05hbWU6Yyx3aWR0aDpyLGhlaWdodDpuLHN0eWxlOmEsdmlld0JveDoiIi5jb25jYXQodS54LCIgIikuY29uY2F0KHUueSwiICIpLmNvbmNhdCh1LndpZHRoLCIgIikuY29uY2F0KHUuaGVpZ2h0KSx2ZXJzaW9uOiIxLjEifSksdCl9TWYucHJvcFR5cGVzPUJmO3ZhciBMZixEZixqZixVZj1NZjtmdW5jdGlvbiBGZihlKXtyZXR1cm4oRmY9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBWZihlLHQscil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1yLGV9ZnVuY3Rpb24gcWYoKXtyZXR1cm4ocWY9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9YXJndW1lbnRzW3RdO2Zvcih2YXIgbiBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG4pJiYoZVtuXT1yW25dKX1yZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBLZihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIHpmKGUsdCl7cmV0dXJuIXR8fCJvYmplY3QiIT09RmYodCkmJiJmdW5jdGlvbiIhPT10eXBlb2YgdD9mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpOnR9ZnVuY3Rpb24gR2YoZSl7cmV0dXJuKEdmPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiBIZihlLHQpe3JldHVybihIZj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0pKGUsdCl9dmFyIFdmLFlmLFhmLFFmPXtzeW1ib2xDaXJjbGU6V2Esc3ltYm9sQ3Jvc3M6WWEsc3ltYm9sRGlhbW9uZDokYSxzeW1ib2xTcXVhcmU6cnMsc3ltYm9sU3Rhcjp0cyxzeW1ib2xUcmlhbmdsZTppcyxzeW1ib2xXeWU6dXN9LCRmPU1hdGguUEkvMTgwLFpmPUsoKGpmPURmPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSx6Zih0aGlzLEdmKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9dmFyIHIsbixpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmSGYoZSx0KX0odCx5WyJDb21wb25lbnQiXSkscj10LChuPVt7a2V5OiJnZXRQYXRoIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnNpemUscj1lLnNpemVUeXBlLG49ZS50eXBlLGk9ZnVuY3Rpb24oZSl7dmFyIHQ9InN5bWJvbCIuY29uY2F0KGUuc2xpY2UoMCwxKS50b1VwcGVyQ2FzZSgpKS5jb25jYXQoZS5zbGljZSgxKSk7cmV0dXJuIFFmW3RdfHxXYX0obik7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9QmEoV2EpLHQ9QmEoNjQpLHI9bnVsbDtmdW5jdGlvbiBuKCl7dmFyIG47aWYocnx8KHI9bj1SYSgpKSxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKS5kcmF3KHIsK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxuKXJldHVybiByPW51bGwsbisiInx8bnVsbH1yZXR1cm4gbi50eXBlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PT10eXBlb2YgdD90OkJhKHQpLG4pOmV9LG4uc2l6ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT09dHlwZW9mIGU/ZTpCYSgrZSksbik6dH0sbi5jb250ZXh0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PWU/bnVsbDplLG4pOnJ9LG59KCkudHlwZShpKS5zaXplKGZ1bmN0aW9uKGUsdCxyKXtpZigiYXJlYSI9PT10KXJldHVybiBlO3N3aXRjaChyKXtjYXNlImNyb3NzIjpyZXR1cm4gNSplKmUvOTtjYXNlImRpYW1vbmQiOnJldHVybi41KmUqZS9NYXRoLnNxcnQoMyk7Y2FzZSJzcXVhcmUiOnJldHVybiBlKmU7Y2FzZSJzdGFyIjp2YXIgbj0xOCokZjtyZXR1cm4gMS4yNSplKmUqKE1hdGgudGFuKG4pLU1hdGgudGFuKDIqbikqTWF0aC5wb3coTWF0aC50YW4obiksMikpO2Nhc2UidHJpYW5nbGUiOnJldHVybiBNYXRoLnNxcnQoMykqZSplLzQ7Y2FzZSJ3eWUiOnJldHVybigyMS0xMCpNYXRoLnNxcnQoMykpKmUqZS84O2RlZmF1bHQ6cmV0dXJuIE1hdGguUEkqZSplLzR9fSh0LHIsbikpKCl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuY2xhc3NOYW1lLHI9ZS5jeCxuPWUuY3ksaT1lLnNpemU7cmV0dXJuIHI9PT0rciYmbj09PStuJiZpPT09K2k/Zy5hLmNyZWF0ZUVsZW1lbnQoInBhdGgiLHFmKHt9LGVlKHRoaXMucHJvcHMpLHJlKHRoaXMucHJvcHMpLHtjbGFzc05hbWU6XygpKCJyZWNoYXJ0cy1zeW1ib2xzIix0KSx0cmFuc2Zvcm06InRyYW5zbGF0ZSgiLmNvbmNhdChyLCIsICIpLmNvbmNhdChuLCIpIiksZDp0aGlzLmdldFBhdGgoKX0pKTpudWxsfX1dKSYmS2Yoci5wcm90b3R5cGUsbiksaSYmS2YocixpKSx0fSgpLERmLmRpc3BsYXlOYW1lPSJTeW1ib2xzIixEZi5wcm9wVHlwZXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxuPU9iamVjdC5rZXlzKHIpOyJmdW5jdGlvbiI9PT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKG49bi5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhyKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKS5lbnVtZXJhYmxlfSkpKSxuLmZvckVhY2goZnVuY3Rpb24odCl7VmYoZSx0LHJbdF0pfSl9cmV0dXJuIGV9KHt9LEgse2NsYXNzTmFtZTptLmEuc3RyaW5nLHR5cGU6bS5hLm9uZU9mKFsiY2lyY2xlIiwiY3Jvc3MiLCJkaWFtb25kIiwic3F1YXJlIiwic3RhciIsInRyaWFuZ2xlIiwid3llIl0pLGN4Om0uYS5udW1iZXIsY3k6bS5hLm51bWJlcixzaXplOm0uYS5udW1iZXIsc2l6ZVR5cGU6bS5hLm9uZU9mKFsiYXJlYSIsImRpYW1ldGVyIl0pfSksRGYuZGVmYXVsdFByb3BzPXt0eXBlOiJjaXJjbGUiLHNpemU6NjQsc2l6ZVR5cGU6ImFyZWEifSxMZj1qZikpfHxMZjtmdW5jdGlvbiBKZihlKXtyZXR1cm4oSmY9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBlbCgpe3JldHVybihlbD1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikmJihlW25dPXJbbl0pfXJldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHRsKGUsdCxyKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX1mdW5jdGlvbiBybChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIG5sKGUsdCl7cmV0dXJuIXR8fCJvYmplY3QiIT09SmYodCkmJiJmdW5jdGlvbiIhPT10eXBlb2YgdD9mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpOnR9ZnVuY3Rpb24gaWwoZSl7cmV0dXJuKGlsPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiBvbChlLHQpe3JldHVybihvbD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0pKGUsdCl9dmFyIGFsLHNsLHVsLGNsPVguZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiJub25lIiE9PWV9KSxmbD1LKChYZj1ZZj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksbmwodGhpcyxpbCh0KS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJm9sKGUsdCl9KHQseVsiQ29tcG9uZW50Il0pLHI9dCwobj1be2tleToicmVuZGVySWNvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcy5pbmFjdGl2ZUNvbG9yLHI9ZS5pbmFjdGl2ZT90OmUuY29sb3I7cmV0dXJuInBsYWlubGluZSI9PT1lLnR5cGU/Zy5hLmNyZWF0ZUVsZW1lbnQoImxpbmUiLHtzdHJva2VXaWR0aDo0LGZpbGw6Im5vbmUiLHN0cm9rZTpyLHN0cm9rZURhc2hhcnJheTplLnBheWxvYWQuc3Ryb2tlRGFzaGFycmF5LHgxOjAseTE6MTYseDI6MzIseTI6MTYsY2xhc3NOYW1lOiJyZWNoYXJ0cy1sZWdlbmQtaWNvbiJ9KToibGluZSI9PT1lLnR5cGU/Zy5hLmNyZWF0ZUVsZW1lbnQoInBhdGgiLHtzdHJva2VXaWR0aDo0LGZpbGw6Im5vbmUiLHN0cm9rZTpyLGQ6Ik0wLCIuY29uY2F0KDE2LCJoIikuY29uY2F0KDMyLzMsIlxuICAgICAgICAgICAgQSIpLmNvbmNhdCgzMi82LCIsIikuY29uY2F0KDMyLzYsIiwwLDEsMSwiKS5jb25jYXQoMzIvMyoyLCIsIikuY29uY2F0KDE2LCJcbiAgICAgICAgICAgIEgiKS5jb25jYXQoMzIsIk0iKS5jb25jYXQoMzIvMyoyLCIsIikuY29uY2F0KDE2LCJcbiAgICAgICAgICAgIEEiKS5jb25jYXQoMzIvNiwiLCIpLmNvbmNhdCgzMi82LCIsMCwxLDEsIikuY29uY2F0KDMyLzMsIiwiKS5jb25jYXQoMTYpLGNsYXNzTmFtZToicmVjaGFydHMtbGVnZW5kLWljb24ifSk6InJlY3QiPT09ZS50eXBlP2cuYS5jcmVhdGVFbGVtZW50KCJwYXRoIix7c3Ryb2tlOiJub25lIixmaWxsOnIsZDoiTTAsIi5jb25jYXQoNCwiaCIpLmNvbmNhdCgzMiwidiIpLmNvbmNhdCgyNCwiaCIpLmNvbmNhdCgtMzIsInoiKSxjbGFzc05hbWU6InJlY2hhcnRzLWxlZ2VuZC1pY29uIn0pOmcuYS5jcmVhdGVFbGVtZW50KFpmLHtmaWxsOnIsY3g6MTYsY3k6MTYsc2l6ZTozMixzaXplVHlwZToiZGlhbWV0ZXIiLHR5cGU6ZS50eXBlfSl9fSx7a2V5OiJyZW5kZXJJdGVtcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcyxyPXQucGF5bG9hZCxuPXQuaWNvblNpemUsaT10LmxheW91dCxvPXQuZm9ybWF0dGVyLGE9e3g6MCx5OjAsd2lkdGg6MzIsaGVpZ2h0OjMyfSxzPXtkaXNwbGF5OiJob3Jpem9udGFsIj09PWk/ImlubGluZS1ibG9jayI6ImJsb2NrIixtYXJnaW5SaWdodDoxMH0sdT17ZGlzcGxheToiaW5saW5lLWJsb2NrIix2ZXJ0aWNhbEFsaWduOiJtaWRkbGUiLG1hcmdpblJpZ2h0OjR9O3JldHVybiByLm1hcChmdW5jdGlvbih0LHIpe3ZhciBpLGM9dC5mb3JtYXR0ZXJ8fG8sZj1fKCkoKHRsKGk9eyJyZWNoYXJ0cy1sZWdlbmQtaXRlbSI6ITB9LCJsZWdlbmQtaXRlbS0iLmNvbmNhdChyKSwhMCksdGwoaSwiaW5hY3RpdmUiLHQuaW5hY3RpdmUpLGkpKTtyZXR1cm4ibm9uZSI9PT10LnR5cGU/bnVsbDpnLmEuY3JlYXRlRWxlbWVudCgibGkiLGVsKHtjbGFzc05hbWU6ZixzdHlsZTpzLGtleToibGVnZW5kLWl0ZW0tIi5jb25jYXQocil9LGllKGUucHJvcHMsdCxyKSksZy5hLmNyZWF0ZUVsZW1lbnQoVWYse3dpZHRoOm4saGVpZ2h0Om4sdmlld0JveDphLHN0eWxlOnV9LGUucmVuZGVySWNvbih0KSksZy5hLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6InJlY2hhcnRzLWxlZ2VuZC1pdGVtLXRleHQifSxjP2ModC52YWx1ZSx0LHIpOnQudmFsdWUpKX0pfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnBheWxvYWQscj1lLmxheW91dCxuPWUuYWxpZ247aWYoIXR8fCF0Lmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgaT17cGFkZGluZzowLG1hcmdpbjowLHRleHRBbGlnbjoiaG9yaXpvbnRhbCI9PT1yP246ImxlZnQifTtyZXR1cm4gZy5hLmNyZWF0ZUVsZW1lbnQoInVsIix7Y2xhc3NOYW1lOiJyZWNoYXJ0cy1kZWZhdWx0LWxlZ2VuZCIsc3R5bGU6aX0sdGhpcy5yZW5kZXJJdGVtcygpKX19XSkmJnJsKHIucHJvdG90eXBlLG4pLGkmJnJsKHIsaSksdH0oKSxZZi5kaXNwbGF5TmFtZT0iTGVnZW5kIixZZi5wcm9wVHlwZXM9e2NvbnRlbnQ6bS5hLmVsZW1lbnQsaWNvblNpemU6bS5hLm51bWJlcixpY29uVHlwZTptLmEub25lT2YoY2wpLGxheW91dDptLmEub25lT2YoWyJob3Jpem9udGFsIiwidmVydGljYWwiXSksYWxpZ246bS5hLm9uZU9mKFsiY2VudGVyIiwibGVmdCIsInJpZ2h0Il0pLHZlcnRpY2FsQWxpZ246bS5hLm9uZU9mKFsidG9wIiwiYm90dG9tIiwibWlkZGxlIl0pLHBheWxvYWQ6bS5hLmFycmF5T2YobS5hLnNoYXBlKHt2YWx1ZTptLmEuYW55LGlkOm0uYS5hbnksdHlwZTptLmEub25lT2YoWCl9KSksaW5hY3RpdmVDb2xvcjptLmEuc3RyaW5nLGZvcm1hdHRlcjptLmEuZnVuYyxvbk1vdXNlRW50ZXI6bS5hLmZ1bmMsb25Nb3VzZUxlYXZlOm0uYS5mdW5jLG9uQ2xpY2s6bS5hLmZ1bmN9LFlmLmRlZmF1bHRQcm9wcz17aWNvblNpemU6MTQsbGF5b3V0OiJob3Jpem9udGFsIixhbGlnbjoiY2VudGVyIix2ZXJ0aWNhbEFsaWduOiJtaWRkbGUiLGluYWN0aXZlQ29sb3I6IiNjY2MifSxXZj1YZikpfHxXZjtmdW5jdGlvbiBsbChlKXtyZXR1cm4obGw9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBobChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LG49T2JqZWN0LmtleXMocik7ImZ1bmN0aW9uIj09PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYobj1uLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHIpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGUpLmVudW1lcmFibGV9KSkpLG4uZm9yRWFjaChmdW5jdGlvbih0KXtwbChlLHQsclt0XSl9KX1yZXR1cm4gZX1mdW5jdGlvbiBwbChlLHQscil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1yLGV9ZnVuY3Rpb24gZGwoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiB5bChlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PWxsKHQpJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZQ==",
"2020.03.29 15:15": "base64:KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiByZihlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PVpjKHQpJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKTp0fWZ1bmN0aW9uIG5mKGUpe3JldHVybihuZj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gb2YoZSx0KXtyZXR1cm4ob2Y9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfXZhciBhZixzZix1ZixjZj1mdW5jdGlvbihlLHQscixuLGkpe3ZhciBvLGE9TWF0aC5taW4oTWF0aC5hYnMocikvMixNYXRoLmFicyhuKS8yKSxzPW4+PTA/MTotMSx1PXI+PTA/MTotMSxjPW4+PTAmJnI+PTB8fG48MCYmcjwwPzE6MDtpZihhPjAmJmkgaW5zdGFuY2VvZiBBcnJheSl7Zm9yKHZhciBmPVtdLGw9MDtsPDQ7bCsrKWZbbF09aVtsXT5hP2E6aVtsXTtvPSJNIi5jb25jYXQoZSwiLCIpLmNvbmNhdCh0K3MqZlswXSksZlswXT4wJiYobys9IkEgIi5jb25jYXQoZlswXSwiLCIpLmNvbmNhdChmWzBdLCIsMCwwLCIpLmNvbmNhdChjLCIsIikuY29uY2F0KGUrdSpmWzBdLCIsIikuY29uY2F0KHQpKSxvKz0iTCAiLmNvbmNhdChlK3ItdSpmWzFdLCIsIikuY29uY2F0KHQpLGZbMV0+MCYmKG8rPSJBICIuY29uY2F0KGZbMV0sIiwiKS5jb25jYXQoZlsxXSwiLDAsMCwiKS5jb25jYXQoYywiLFxuICAgICAgICAiKS5jb25jYXQoZStyLCIsIikuY29uY2F0KHQrcypmWzFdKSksbys9IkwgIi5jb25jYXQoZStyLCIsIikuY29uY2F0KHQrbi1zKmZbMl0pLGZbMl0+MCYmKG8rPSJBICIuY29uY2F0KGZbMl0sIiwiKS5jb25jYXQoZlsyXSwiLDAsMCwiKS5jb25jYXQoYywiLFxuICAgICAgICAiKS5jb25jYXQoZStyLXUqZlsyXSwiLCIpLmNvbmNhdCh0K24pKSxvKz0iTCAiLmNvbmNhdChlK3UqZlszXSwiLCIpLmNvbmNhdCh0K24pLGZbM10+MCYmKG8rPSJBICIuY29uY2F0KGZbM10sIiwiKS5jb25jYXQoZlszXSwiLDAsMCwiKS5jb25jYXQoYywiLFxuICAgICAgICAiKS5jb25jYXQoZSwiLCIpLmNvbmNhdCh0K24tcypmWzNdKSksbys9IloifWVsc2UgaWYoYT4wJiZpPT09K2kmJmk+MCl7dmFyIGg9TWF0aC5taW4oYSxpKTtvPSJNICIuY29uY2F0KGUsIiwiKS5jb25jYXQodCtzKmgsIlxuICAgICAgICAgICAgQSAiKS5jb25jYXQoaCwiLCIpLmNvbmNhdChoLCIsMCwwLCIpLmNvbmNhdChjLCIsIikuY29uY2F0KGUrdSpoLCIsIikuY29uY2F0KHQsIlxuICAgICAgICAgICAgTCAiKS5jb25jYXQoZStyLXUqaCwiLCIpLmNvbmNhdCh0LCJcbiAgICAgICAgICAgIEEgIikuY29uY2F0KGgsIiwiKS5jb25jYXQoaCwiLDAsMCwiKS5jb25jYXQoYywiLCIpLmNvbmNhdChlK3IsIiwiKS5jb25jYXQodCtzKmgsIlxuICAgICAgICAgICAgTCAiKS5jb25jYXQoZStyLCIsIikuY29uY2F0KHQrbi1zKmgsIlxuICAgICAgICAgICAgQSAiKS5jb25jYXQoaCwiLCIpLmNvbmNhdChoLCIsMCwwLCIpLmNvbmNhdChjLCIsIikuY29uY2F0KGUrci11KmgsIiwiKS5jb25jYXQodCtuLCJcbiAgICAgICAgICAgIEwgIikuY29uY2F0KGUrdSpoLCIsIikuY29uY2F0KHQrbiwiXG4gICAgICAgICAgICBBICIpLmNvbmNhdChoLCIsIikuY29uY2F0KGgsIiwwLDAsIikuY29uY2F0KGMsIiwiKS5jb25jYXQoZSwiLCIpLmNvbmNhdCh0K24tcypoLCIgWiIpfWVsc2Ugbz0iTSAiLmNvbmNhdChlLCIsIikuY29uY2F0KHQsIiBoICIpLmNvbmNhdChyLCIgdiAiKS5jb25jYXQobiwiIGggIikuY29uY2F0KC1yLCIgWiIpO3JldHVybiBvfSxmZj1LKChRYz1YYz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUscjshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KTtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPTA7bzxuO28rKylpW29dPWFyZ3VtZW50c1tvXTtyZXR1cm4ocj1yZih0aGlzLChlPW5mKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpKS5zdGF0ZT17dG90YWxMZW5ndGg6LTF9LHJ9dmFyIHIsbixpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmb2YoZSx0KX0odCx5WyJDb21wb25lbnQiXSkscj10LChuPVt7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLm5vZGUmJnRoaXMubm9kZS5nZXRUb3RhbExlbmd0aCl0cnl7dmFyIGU9dGhpcy5ub2RlLmdldFRvdGFsTGVuZ3RoKCk7ZSYmdGhpcy5zZXRTdGF0ZSh7dG90YWxMZW5ndGg6ZX0pfWNhdGNoKHQpe319fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMscj10Lngsbj10LnksaT10LndpZHRoLG89dC5oZWlnaHQsYT10LnJhZGl1cyxzPXQuY2xhc3NOYW1lLHU9dGhpcy5zdGF0ZS50b3RhbExlbmd0aCxjPXRoaXMucHJvcHMsZj1jLmFuaW1hdGlvbkVhc2luZyxsPWMuYW5pbWF0aW9uRHVyYXRpb24saD1jLmFuaW1hdGlvbkJlZ2luLHA9Yy5pc0FuaW1hdGlvbkFjdGl2ZSxkPWMuaXNVcGRhdGVBbmltYXRpb25BY3RpdmU7aWYociE9PStyfHxuIT09K258fGkhPT0raXx8byE9PStvfHwwPT09aXx8MD09PW8pcmV0dXJuIG51bGw7dmFyIHk9XygpKCJyZWNoYXJ0cy1yZWN0YW5nbGUiLHMpO3JldHVybiBkP2cuYS5jcmVhdGVFbGVtZW50KCRjLHtjYW5CZWdpbjp1PjAsZnJvbTp7d2lkdGg6aSxoZWlnaHQ6byx4OnIseTpufSx0bzp7d2lkdGg6aSxoZWlnaHQ6byx4OnIseTpufSxkdXJhdGlvbjpsLGFuaW1hdGlvbkVhc2luZzpmLGlzQWN0aXZlOmR9LGZ1bmN0aW9uKHQpe3ZhciByPXQud2lkdGgsbj10LmhlaWdodCxpPXQueCxvPXQueTtyZXR1cm4gZy5hLmNyZWF0ZUVsZW1lbnQoJGMse2NhbkJlZ2luOnU+MCxmcm9tOiIwcHggIi5jb25jYXQoLTE9PT11PzE6dSwicHgiKSx0bzoiIi5jb25jYXQodSwicHggMHB4IiksYXR0cmlidXRlTmFtZToic3Ryb2tlRGFzaGFycmF5IixiZWdpbjpoLGR1cmF0aW9uOmwsaXNBY3RpdmU6cCxlYXNpbmc6Zn0sZy5hLmNyZWF0ZUVsZW1lbnQoInBhdGgiLGVmKHt9LGVlKGUucHJvcHMpLHJlKGUucHJvcHMpLHtjbGFzc05hbWU6eSxkOmNmKGksbyxyLG4sYSkscmVmOmZ1bmN0aW9uKHQpe2Uubm9kZT10fX0pKSl9KTpnLmEuY3JlYXRlRWxlbWVudCgicGF0aCIsZWYoe30sZWUodGhpcy5wcm9wcykscmUodGhpcy5wcm9wcykse2NsYXNzTmFtZTp5LGQ6Y2YocixuLGksbyxhKX0pKX19XSkmJnRmKHIucHJvdG90eXBlLG4pLGkmJnRmKHIsaSksdH0oKSxYYy5kaXNwbGF5TmFtZT0iUmVjdGFuZ2xlIixYYy5wcm9wVHlwZXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxuPU9iamVjdC5rZXlzKHIpOyJmdW5jdGlvbiI9PT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKG49bi5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhyKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKS5lbnVtZXJhYmxlfSkpKSxuLmZvckVhY2goZnVuY3Rpb24odCl7SmMoZSx0LHJbdF0pfSl9cmV0dXJuIGV9KHt9LEgsVyx7Y2xhc3NOYW1lOm0uYS5zdHJpbmcseDptLmEubnVtYmVyLHk6bS5hLm51bWJlcix3aWR0aDptLmEubnVtYmVyLGhlaWdodDptLmEubnVtYmVyLHJhZGl1czptLmEub25lT2ZUeXBlKFttLmEubnVtYmVyLG0uYS5hcnJheV0pLGlzQW5pbWF0aW9uQWN0aXZlOm0uYS5ib29sLGlzVXBkYXRlQW5pbWF0aW9uQWN0aXZlOm0uYS5ib29sLGFuaW1hdGlvbkJlZ2luOm0uYS5udW1iZXIsYW5pbWF0aW9uRHVyYXRpb246bS5hLm51bWJlcixhbmltYXRpb25FYXNpbmc6bS5hLm9uZU9mKFsiZWFzZSIsImVhc2UtaW4iLCJlYXNlLW91dCIsImVhc2UtaW4tb3V0IiwibGluZWFyIl0pfSksWGMuZGVmYXVsdFByb3BzPXt4OjAseTowLHdpZHRoOjAsaGVpZ2h0OjAscmFkaXVzOjAsaXNBbmltYXRpb25BY3RpdmU6ITEsaXNVcGRhdGVBbmltYXRpb25BY3RpdmU6ITEsYW5pbWF0aW9uQmVnaW46MCxhbmltYXRpb25EdXJhdGlvbjoxNTAwLGFuaW1hdGlvbkVhc2luZzoiZWFzZSJ9LFljPVFjKSl8fFljO2Z1bmN0aW9uIGxmKGUpe3JldHVybihsZj0iZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIGhmKCl7cmV0dXJuKGhmPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixuKSYmKGVbbl09cltuXSl9cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcGYoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxuPU9iamVjdC5rZXlzKHIpOyJmdW5jdGlvbiI9PT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKG49bi5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhyKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKS5lbnVtZXJhYmxlfSkpKSxuLmZvckVhY2goZnVuY3Rpb24odCl7ZGYoZSx0LHJbdF0pfSl9cmV0dXJuIGV9ZnVuY3Rpb24gZGYoZSx0LHIpe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfWZ1bmN0aW9uIHlmKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLmtleSxuKX19ZnVuY3Rpb24gZ2YoZSx0KXtyZXR1cm4hdHx8Im9iamVjdCIhPT1sZih0KSYmImZ1bmN0aW9uIiE9PXR5cGVvZiB0P2Z1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSk6dH1mdW5jdGlvbiB2ZihlKXtyZXR1cm4odmY9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0pKGUpfWZ1bmN0aW9uIG1mKGUsdCl7cmV0dXJuKG1mPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSkoZSx0KX12YXIgYmY9SygodWY9c2Y9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLGdmKHRoaXMsdmYodCkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX12YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiZtZihlLHQpfSh0LHlbIkNvbXBvbmVudCJdKSxyPXQsaT1be2tleToicmVuZGVyUmVjdCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZy5hLmlzVmFsaWRFbGVtZW50KGUpP2cuYS5jbG9uZUVsZW1lbnQoZSx0KTp1KCkoZSk/ZSh0KTpnLmEuY3JlYXRlRWxlbWVudChmZixoZih7fSx0LHtjbGFzc05hbWU6InJlY2hhcnRzLXJlZmVyZW5jZS1hcmVhLXJlY3QifSkpfX1dLChuPVt7a2V5OiJnZXRSZWN0Iix2YWx1ZTpmdW5jdGlvbihlLHQscixuKXt2YXIgaT10aGlzLnByb3BzLG89aS54MSxhPWkueDIscz1pLnkxLHU9aS55MixjPWkueEF4aXMsZj1pLnlBeGlzLGw9aHUuY3JlYXRlKHt4OmMuc2NhbGUseTpmLnNjYWxlfSksaD17eDplP2wueC5hcHBseShvKTpsLngucmFuZ2VNaW4seTpyP2wueS5hcHBseShzKTpsLnkucmFuZ2VNaW59LHA9e3g6dD9sLnguYXBwbHkoYSk6bC54LnJhbmdlTWF4LHk6bj9sLnkuYXBwbHkodSk6bC55LnJhbmdlTWF4fTtyZXR1cm4hVmwodGhpcy5wcm9wcywiZGlzY2FyZCIpfHxsLmlzSW5SYW5nZShoKSYmbC5pc0luUmFuZ2UocCk/c3UoaCxwKTpudWxsfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLngxLHI9ZS54MixuPWUueTEsaT1lLnkyLG89ZS5jbGFzc05hbWUsYT0oZS5hbHdheXNTaG93LGUuY2xpcFBhdGhJZCkscz1CKHQpLHU9QihyKSxjPUIobiksZj1CKGkpO2lmKCFzJiYhdSYmIWMmJiFmKXJldHVybiBudWxsO3ZhciBsPXRoaXMuZ2V0UmVjdChzLHUsYyxmKTtpZighbClyZXR1cm4gbnVsbDt2YXIgaD10aGlzLnByb3BzLnNoYXBlLHA9VmwodGhpcy5wcm9wcywiaGlkZGVuIik/InVybCgjIi5jb25jYXQoYSwiKSIpOnZvaWQgMDtyZXR1cm4gZy5hLmNyZWF0ZUVsZW1lbnQoenMse2NsYXNzTmFtZTpfKCkoInJlY2hhcnRzLXJlZmVyZW5jZS1hcmVhIixvKX0sdGhpcy5jb25zdHJ1Y3Rvci5yZW5kZXJSZWN0KGgscGYoe2NsaXBQYXRoOnB9LHRoaXMucHJvcHMsbCkpLGdoLnJlbmRlckNhbGxCeVBhcmVudCh0aGlzLnByb3BzLGwpKX19XSkmJnlmKHIucHJvdG90eXBlLG4pLGkmJnlmKHIsaSksdH0oKSxzZi5kaXNwbGF5TmFtZT0iUmVmZXJlbmNlQXJlYSIsc2YucHJvcFR5cGVzPXBmKHt9LEgse3ZpZXdCb3g6bS5hLnNoYXBlKHt4Om0uYS5udW1iZXIseTptLmEubnVtYmVyLHdpZHRoOm0uYS5udW1iZXIsaGVpZ2h0Om0uYS5udW1iZXJ9KSx4QXhpczptLmEub2JqZWN0LHlBeGlzOm0uYS5vYmplY3QsaXNGcm9udDptLmEuYm9vbCxhbHdheXNTaG93Om0uYS5ib29sLGlmT3ZlcmZsb3c6bS5hLm9uZU9mKFsiaGlkZGVuIiwidmlzaWJsZSIsImRpc2NhcmQiLCJleHRlbmREb21haW4iXSkseDE6bS5hLm9uZU9mVHlwZShbbS5hLm51bWJlcixtLmEuc3RyaW5nXSkseDI6bS5hLm9uZU9mVHlwZShbbS5hLm51bWJlcixtLmEuc3RyaW5nXSkseTE6bS5hLm9uZU9mVHlwZShbbS5hLm51bWJlcixtLmEuc3RyaW5nXSkseTI6bS5hLm9uZU9mVHlwZShbbS5hLm51bWJlcixtLmEuc3RyaW5nXSksY2xhc3NOYW1lOm0uYS5vbmVPZlR5cGUoW20uYS5udW1iZXIsbS5hLnN0cmluZ10pLHlBeGlzSWQ6bS5hLm9uZU9mVHlwZShbbS5hLnN0cmluZyxtLmEubnVtYmVyXSkseEF4aXNJZDptLmEub25lT2ZUeXBlKFttLmEuc3RyaW5nLG0uYS5udW1iZXJdKSxzaGFwZTptLmEub25lT2ZUeXBlKFttLmEuZnVuYyxtLmEuZWxlbWVudF0pfSksc2YuZGVmYXVsdFByb3BzPXtpc0Zyb250OiExLGlmT3ZlcmZsb3c6ImRpc2NhcmQiLHhBeGlzSWQ6MCx5QXhpc0lkOjAscjoxMCxmaWxsOiIjY2NjIixmaWxsT3BhY2l0eTouNSxzdHJva2U6Im5vbmUiLHN0cm9rZVdpZHRoOjF9LGFmPXVmKSl8fGFmO2Z1bmN0aW9uIF9mKGUpe3JldHVybihfZj0iZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIFNmKCl7cmV0dXJuKFNmPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixuKSYmKGVbbl09cltuXSl9cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gRWYoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9W10sbj0hMCxpPSExLG89dm9pZCAwO3RyeXtmb3IodmFyIGEscz1lW1N5bWJvbC5pdGVyYXRvcl0oKTshKG49KGE9cy5uZXh0KCkpLmRvbmUpJiYoci5wdXNoKGEudmFsdWUpLCF0fHxyLmxlbmd0aCE9PXQpO249ITApO31jYXRjaCh1KXtpPSEwLG89dX1maW5hbGx5e3RyeXtufHxudWxsPT1zLnJldHVybnx8cy5yZXR1cm4oKX1maW5hbGx5e2lmKGkpdGhyb3cgb319cmV0dXJuIHJ9KGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSgpfWZ1bmN0aW9uIHdmKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgcixuLGk9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciByLG4saT17fSxvPU9iamVjdC5rZXlzKGUpO2ZvcihuPTA7bjxvLmxlbmd0aDtuKyspcj1vW25dLHQuaW5kZXhPZihyKT49MHx8KGlbcl09ZVtyXSk7cmV0dXJuIGl9KGUsdCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iobj0wO248by5sZW5ndGg7bisrKXI9b1tuXSx0LmluZGV4T2Yocik+PTB8fE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHIpJiYoaVtyXT1lW3JdKX1yZXR1cm4gaX1mdW5jdGlvbiBUZihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIEFmKGUsdCl7cmV0dXJuIXR8fCJvYmplY3QiIT09X2YodCkmJiJmdW5jdGlvbiIhPT10eXBlb2YgdD9mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpOnR9ZnVuY3Rpb24gQ2YoZSl7cmV0dXJuKENmPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiB4ZihlLHQpe3JldHVybih4Zj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0pKGUsdCl9dmFyIElmPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSxBZih0aGlzLENmKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9dmFyIHIsbixpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmeGYoZSx0KX0odCx5WyJDb21wb25lbnQiXSkscj10LChuPVt7a2V5OiJyZW5kZXJFcnJvckJhcnMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUub2Zmc2V0LHI9ZS5sYXlvdXQsbj1lLndpZHRoLGk9ZS5kYXRhS2V5LG89ZS5kYXRhLGE9ZS5kYXRhUG9pbnRGb3JtYXR0ZXIscz1lLnhBeGlzLHU9ZS55QXhpcyxjPXdmKGUsWyJvZmZzZXQiLCJsYXlvdXQiLCJ3aWR0aCIsImRhdGFLZXkiLCJkYXRhIiwiZGF0YVBvaW50Rm9ybWF0dGVyIiwieEF4aXMiLCJ5QXhpcyJdKSxmPWVlKGMpO3JldHVybiBvLm1hcChmdW5jdGlvbihlLG8pe3ZhciBjLGwsaCxwLGQseSx2LG0sYixfLFMsRSx3PWEoZSxpKSxUPXcueCxBPXcueSxDPXcudmFsdWUseD13LmVycm9yVmFsO2lmKCF4KXJldHVybiBudWxsO2lmKEFycmF5LmlzQXJyYXkoeCkpe3ZhciBJPUVmKHgsMik7Uz1JWzBdLEU9SVsxXX1lbHNlIFM9RT14O3JldHVybiJ2ZXJ0aWNhbCI9PT1yPyh2PXMuc2NhbGUsbD1BK3QsaD12KChjPUMpLVMpLHA9bCtuLG09e3gxOmQ9dihjK0UpLHkxOnAseDI6ZCx5Mjp5PWwtbn0sYj17eDE6aCx5MTpsLHgyOmQseTI6bH0sXz17eDE6aCx5MTpwLHgyOmgseTI6eX0pOiJob3Jpem9udGFsIj09PXImJih2PXUuc2NhbGUsaD0oYz1UK3QpLW4sZD1jK24scD12KChsPUMpLVMpLG09e3gxOmgseTE6eT12KGwrRSkseDI6ZCx5Mjp5fSxiPXt4MTpjLHkxOnAseDI6Yyx5Mjp5fSxfPXt4MTpoLHkxOnAseDI6ZCx5MjpwfSksZy5hLmNyZWF0ZUVsZW1lbnQoenMsU2Yoe2NsYXNzTmFtZToicmVjaGFydHMtZXJyb3JCYXIiLGtleToiYmFyLSIuY29uY2F0KG8pfSxmKSxnLmEuY3JlYXRlRWxlbWVudCgibGluZSIsbSksZy5hLmNyZWF0ZUVsZW1lbnQoImxpbmUiLGIpLGcuYS5jcmVhdGVFbGVtZW50KCJsaW5lIixfKSl9KX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZy5hLmNyZWF0ZUVsZW1lbnQoenMse2NsYXNzTmFtZToicmVjaGFydHMtZXJyb3JCYXJzIn0sdGhpcy5yZW5kZXJFcnJvckJhcnMoKSl9fV0pJiZUZihyLnByb3RvdHlwZSxuKSxpJiZUZihyLGkpLHR9KCk7SWYucHJvcFR5cGVzPXtkYXRhS2V5Om0uYS5vbmVPZlR5cGUoW20uYS5zdHJpbmcsbS5hLm51bWJlcixtLmEuZnVuY10pLmlzUmVxdWlyZWQsZGF0YTptLmEuYXJyYXkseEF4aXM6bS5hLm9iamVjdCx5QXhpczptLmEub2JqZWN0LGxheW91dDptLmEuc3RyaW5nLGRhdGFQb2ludEZvcm1hdHRlcjptLmEuZnVuYyxzdHJva2U6bS5hLnN0cmluZyxzdHJva2VXaWR0aDptLmEubnVtYmVyLHdpZHRoOm0uYS5udW1iZXIsb2Zmc2V0Om0uYS5udW1iZXJ9LElmLmRlZmF1bHRQcm9wcz17c3Ryb2tlOiJibGFjayIsc3Ryb2tlV2lkdGg6MS41LHdpZHRoOjUsb2Zmc2V0OjAsbGF5b3V0OiJob3Jpem9udGFsIn07dmFyIGtmPUlmLE9mPXIoMTI0KSxOZj1yLm4oT2YpO2Z1bmN0aW9uIFBmKCl7cmV0dXJuKFBmPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixuKSYmKGVbbl09cltuXSl9cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gUmYoZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciByLG4saT1mdW5jdGlvbihlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHIsbixpPXt9LG89T2JqZWN0LmtleXMoZSk7Zm9yKG49MDtuPG8ubGVuZ3RoO24rKylyPW9bbl0sdC5pbmRleE9mKHIpPj0wfHwoaVtyXT1lW3JdKTtyZXR1cm4gaX0oZSx0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihuPTA7bjxvLmxlbmd0aDtuKyspcj1vW25dLHQuaW5kZXhPZihyKT49MHx8T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUscikmJihpW3JdPWVbcl0pfXJldHVybiBpfXZhciBCZj17d2lkdGg6bS5hLm51bWJlci5pc1JlcXVpcmVkLGhlaWdodDptLmEubnVtYmVyLmlzUmVxdWlyZWQsdmlld0JveDptLmEuc2hhcGUoe3g6bS5hLm51bWJlcix5Om0uYS5udW1iZXIsd2lkdGg6bS5hLm51bWJlcixoZWlnaHQ6bS5hLm51bWJlcn0pLGNsYXNzTmFtZTptLmEuc3RyaW5nLHN0eWxlOm0uYS5vYmplY3QsY2hpbGRyZW46bS5hLm9uZU9mVHlwZShbbS5hLmFycmF5T2YobS5hLm5vZGUpLG0uYS5ub2RlXSl9O2Z1bmN0aW9uIE1mKGUpe3ZhciB0PWUuY2hpbGRyZW4scj1lLndpZHRoLG49ZS5oZWlnaHQsaT1lLnZpZXdCb3gsbz1lLmNsYXNzTmFtZSxhPWUuc3R5bGUscz1SZihlLFsiY2hpbGRyZW4iLCJ3aWR0aCIsImhlaWdodCIsInZpZXdCb3giLCJjbGFzc05hbWUiLCJzdHlsZSJdKSx1PWl8fHt3aWR0aDpyLGhlaWdodDpuLHg6MCx5OjB9LGM9XygpKCJyZWNoYXJ0cy1zdXJmYWNlIixvKSxmPWVlKHMpO3JldHVybiBnLmEuY3JlYXRlRWxlbWVudCgic3ZnIixQZih7fSxmLHtjbGFzc05hbWU6Yyx3aWR0aDpyLGhlaWdodDpuLHN0eWxlOmEsdmlld0JveDoiIi5jb25jYXQodS54LCIgIikuY29uY2F0KHUueSwiICIpLmNvbmNhdCh1LndpZHRoLCIgIikuY29uY2F0KHUuaGVpZ2h0KSx2ZXJzaW9uOiIxLjEifSksdCl9TWYucHJvcFR5cGVzPUJmO3ZhciBMZixEZixqZixVZj1NZjtmdW5jdGlvbiBGZihlKXtyZXR1cm4oRmY9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBWZihlLHQscil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1yLGV9ZnVuY3Rpb24gcWYoKXtyZXR1cm4ocWY9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9YXJndW1lbnRzW3RdO2Zvcih2YXIgbiBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG4pJiYoZVtuXT1yW25dKX1yZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBLZihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIHpmKGUsdCl7cmV0dXJuIXR8fCJvYmplY3QiIT09RmYodCkmJiJmdW5jdGlvbiIhPT10eXBlb2YgdD9mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpOnR9ZnVuY3Rpb24gR2YoZSl7cmV0dXJuKEdmPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiBIZihlLHQpe3JldHVybihIZj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0pKGUsdCl9dmFyIFdmLFlmLFhmLFFmPXtzeW1ib2xDaXJjbGU6V2Esc3ltYm9sQ3Jvc3M6WWEsc3ltYm9sRGlhbW9uZDokYSxzeW1ib2xTcXVhcmU6cnMsc3ltYm9sU3Rhcjp0cyxzeW1ib2xUcmlhbmdsZTppcyxzeW1ib2xXeWU6dXN9LCRmPU1hdGguUEkvMTgwLFpmPUsoKGpmPURmPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSx6Zih0aGlzLEdmKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9dmFyIHIsbixpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmSGYoZSx0KX0odCx5WyJDb21wb25lbnQiXSkscj10LChuPVt7a2V5OiJnZXRQYXRoIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnNpemUscj1lLnNpemVUeXBlLG49ZS50eXBlLGk9ZnVuY3Rpb24oZSl7dmFyIHQ9InN5bWJvbCIuY29uY2F0KGUuc2xpY2UoMCwxKS50b1VwcGVyQ2FzZSgpKS5jb25jYXQoZS5zbGljZSgxKSk7cmV0dXJuIFFmW3RdfHxXYX0obik7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9QmEoV2EpLHQ9QmEoNjQpLHI9bnVsbDtmdW5jdGlvbiBuKCl7dmFyIG47aWYocnx8KHI9bj1SYSgpKSxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKS5kcmF3KHIsK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxuKXJldHVybiByPW51bGwsbisiInx8bnVsbH1yZXR1cm4gbi50eXBlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PT10eXBlb2YgdD90OkJhKHQpLG4pOmV9LG4uc2l6ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT09dHlwZW9mIGU/ZTpCYSgrZSksbik6dH0sbi5jb250ZXh0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PWU/bnVsbDplLG4pOnJ9LG59KCkudHlwZShpKS5zaXplKGZ1bmN0aW9uKGUsdCxyKXtpZigiYXJlYSI9PT10KXJldHVybiBlO3N3aXRjaChyKXtjYXNlImNyb3NzIjpyZXR1cm4gNSplKmUvOTtjYXNlImRpYW1vbmQiOnJldHVybi41KmUqZS9NYXRoLnNxcnQoMyk7Y2FzZSJzcXVhcmUiOnJldHVybiBlKmU7Y2FzZSJzdGFyIjp2YXIgbj0xOCokZjtyZXR1cm4gMS4yNSplKmUqKE1hdGgudGFuKG4pLU1hdGgudGFuKDIqbikqTWF0aC5wb3coTWF0aC50YW4obiksMikpO2Nhc2UidHJpYW5nbGUiOnJldHVybiBNYXRoLnNxcnQoMykqZSplLzQ7Y2FzZSJ3eWUiOnJldHVybigyMS0xMCpNYXRoLnNxcnQoMykpKmUqZS84O2RlZmF1bHQ6cmV0dXJuIE1hdGguUEkqZSplLzR9fSh0LHIsbikpKCl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUuY2xhc3NOYW1lLHI9ZS5jeCxuPWUuY3ksaT1lLnNpemU7cmV0dXJuIHI9PT0rciYmbj09PStuJiZpPT09K2k/Zy5hLmNyZWF0ZUVsZW1lbnQoInBhdGgiLHFmKHt9LGVlKHRoaXMucHJvcHMpLHJlKHRoaXMucHJvcHMpLHtjbGFzc05hbWU6XygpKCJyZWNoYXJ0cy1zeW1ib2xzIix0KSx0cmFuc2Zvcm06InRyYW5zbGF0ZSgiLmNvbmNhdChyLCIsICIpLmNvbmNhdChuLCIpIiksZDp0aGlzLmdldFBhdGgoKX0pKTpudWxsfX1dKSYmS2Yoci5wcm90b3R5cGUsbiksaSYmS2YocixpKSx0fSgpLERmLmRpc3BsYXlOYW1lPSJTeW1ib2xzIixEZi5wcm9wVHlwZXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fSxuPU9iamVjdC5rZXlzKHIpOyJmdW5jdGlvbiI9PT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKG49bi5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhyKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKS5lbnVtZXJhYmxlfSkpKSxuLmZvckVhY2goZnVuY3Rpb24odCl7VmYoZSx0LHJbdF0pfSl9cmV0dXJuIGV9KHt9LEgse2NsYXNzTmFtZTptLmEuc3RyaW5nLHR5cGU6bS5hLm9uZU9mKFsiY2lyY2xlIiwiY3Jvc3MiLCJkaWFtb25kIiwic3F1YXJlIiwic3RhciIsInRyaWFuZ2xlIiwid3llIl0pLGN4Om0uYS5udW1iZXIsY3k6bS5hLm51bWJlcixzaXplOm0uYS5udW1iZXIsc2l6ZVR5cGU6bS5hLm9uZU9mKFsiYXJlYSIsImRpYW1ldGVyIl0pfSksRGYuZGVmYXVsdFByb3BzPXt0eXBlOiJjaXJjbGUiLHNpemU6NjQsc2l6ZVR5cGU6ImFyZWEifSxMZj1qZikpfHxMZjtmdW5jdGlvbiBKZihlKXtyZXR1cm4oSmY9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBlbCgpe3JldHVybihlbD1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikmJihlW25dPXJbbl0pfXJldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHRsKGUsdCxyKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX1mdW5jdGlvbiBybChlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIG5sKGUsdCl7cmV0dXJuIXR8fCJvYmplY3QiIT09SmYodCkmJiJmdW5jdGlvbiIhPT10eXBlb2YgdD9mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpOnR9ZnVuY3Rpb24gaWwoZSl7cmV0dXJuKGlsPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiBvbChlLHQpe3JldHVybihvbD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0pKGUsdCl9dmFyIGFsLHNsLHVsLGNsPVguZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiJub25lIiE9PWV9KSxmbD1LKChYZj1ZZj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksbmwodGhpcyxpbCh0KS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT09dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJm9sKGUsdCl9KHQseVsiQ29tcG9uZW50Il0pLHI9dCwobj1be2tleToicmVuZGVySWNvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcy5pbmFjdGl2ZUNvbG9yLHI9ZS5pbmFjdGl2ZT90OmUuY29sb3I7cmV0dXJuInBsYWlubGluZSI9PT1lLnR5cGU/Zy5hLmNyZWF0ZUVsZW1lbnQoImxpbmUiLHtzdHJva2VXaWR0aDo0LGZpbGw6Im5vbmUiLHN0cm9rZTpyLHN0cm9rZURhc2hhcnJheTplLnBheWxvYWQuc3Ryb2tlRGFzaGFycmF5LHgxOjAseTE6MTYseDI6MzIseTI6MTYsY2xhc3NOYW1lOiJyZWNoYXJ0cy1sZWdlbmQtaWNvbiJ9KToibGluZSI9PT1lLnR5cGU/Zy5hLmNyZWF0ZUVsZW1lbnQoInBhdGgiLHtzdHJva2VXaWR0aDo0LGZpbGw6Im5vbmUiLHN0cm9rZTpyLGQ6Ik0wLCIuY29uY2F0KDE2LCJoIikuY29uY2F0KDMyLzMsIlxuICAgICAgICAgICAgQSIpLmNvbmNhdCgzMi82LCIsIikuY29uY2F0KDMyLzYsIiwwLDEsMSwiKS5jb25jYXQoMzIvMyoyLCIsIikuY29uY2F0KDE2LCJcbiAgICAgICAgICAgIEgiKS5jb25jYXQoMzIsIk0iKS5jb25jYXQoMzIvMyoyLCIsIikuY29uY2F0KDE2LCJcbiAgICAgICAgICAgIEEiKS5jb25jYXQoMzIvNiwiLCIpLmNvbmNhdCgzMi82LCIsMCwxLDEsIikuY29uY2F0KDMyLzMsIiwiKS5jb25jYXQoMTYpLGNsYXNzTmFtZToicmVjaGFydHMtbGVnZW5kLWljb24ifSk6InJlY3QiPT09ZS50eXBlP2cuYS5jcmVhdGVFbGVtZW50KCJwYXRoIix7c3Ryb2tlOiJub25lIixmaWxsOnIsZDoiTTAsIi5jb25jYXQoNCwiaCIpLmNvbmNhdCgzMiwidiIpLmNvbmNhdCgyNCwiaCIpLmNvbmNhdCgtMzIsInoiKSxjbGFzc05hbWU6InJlY2hhcnRzLWxlZ2VuZC1pY29uIn0pOmcuYS5jcmVhdGVFbGVtZW50KFpmLHtmaWxsOnIsY3g6MTYsY3k6MTYsc2l6ZTozMixzaXplVHlwZToiZGlhbWV0ZXIiLHR5cGU6ZS50eXBlfSl9fSx7a2V5OiJyZW5kZXJJdGVtcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wcm9wcyxyPXQucGF5bG9hZCxuPXQuaWNvblNpemUsaT10LmxheW91dCxvPXQuZm9ybWF0dGVyLGE9e3g6MCx5OjAsd2lkdGg6MzIsaGVpZ2h0OjMyfSxzPXtkaXNwbGF5OiJob3Jpem9udGFsIj09PWk/ImlubGluZS1ibG9jayI6ImJsb2NrIixtYXJnaW5SaWdodDoxMH0sdT17ZGlzcGxheToiaW5saW5lLWJsb2NrIix2ZXJ0aWNhbEFsaWduOiJtaWRkbGUiLG1hcmdpblJpZ2h0OjR9O3JldHVybiByLm1hcChmdW5jdGlvbih0LHIpe3ZhciBpLGM9dC5mb3JtYXR0ZXJ8fG8sZj1fKCkoKHRsKGk9eyJyZWNoYXJ0cy1sZWdlbmQtaXRlbSI6ITB9LCJsZWdlbmQtaXRlbS0iLmNvbmNhdChyKSwhMCksdGwoaSwiaW5hY3RpdmUiLHQuaW5hY3RpdmUpLGkpKTtyZXR1cm4ibm9uZSI9PT10LnR5cGU/bnVsbDpnLmEuY3JlYXRlRWxlbWVudCgibGkiLGVsKHtjbGFzc05hbWU6ZixzdHlsZTpzLGtleToibGVnZW5kLWl0ZW0tIi5jb25jYXQocil9LGllKGUucHJvcHMsdCxyKSksZy5hLmNyZWF0ZUVsZW1lbnQoVWYse3dpZHRoOm4saGVpZ2h0Om4sdmlld0JveDphLHN0eWxlOnV9LGUucmVuZGVySWNvbih0KSksZy5hLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6InJlY2hhcnRzLWxlZ2VuZC1pdGVtLXRleHQifSxjP2ModC52YWx1ZSx0LHIpOnQudmFsdWUpKX0pfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnBheWxvYWQscj1lLmxheW91dCxuPWUuYWxpZ247aWYoIXR8fCF0Lmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgaT17cGFkZGluZzowLG1hcmdpbjowLHRleHRBbGlnbjoiaG9yaXpvbnRhbCI9PT1yP246ImxlZnQifTtyZXR1cm4gZy5hLmNyZWF0ZUVsZW1lbnQoInVsIix7Y2xhc3NOYW1lOiJyZWNoYXJ0cy1kZWZhdWx0LWxlZ2VuZCIsc3R5bGU6aX0sdGhpcy5yZW5kZXJJdGVtcygpKX19XSkmJnJsKHIucHJvdG90eXBlLG4pLGkmJnJsKHIsaSksdH0oKSxZZi5kaXNwbGF5TmFtZT0iTGVnZW5kIixZZi5wcm9wVHlwZXM9e2NvbnRlbnQ6bS5hLmVsZW1lbnQsaWNvblNpemU6bS5hLm51bWJlcixpY29uVHlwZTptLmEub25lT2YoY2wpLGxheW91dDptLmEub25lT2YoWyJob3Jpem9udGFsIiwidmVydGljYWwiXSksYWxpZ246bS5hLm9uZU9mKFsiY2VudGVyIiwibGVmdCIsInJpZ2h0Il0pLHZlcnRpY2FsQWxpZ246bS5hLm9uZU9mKFsidG9wIiwiYm90dG9tIiwibWlkZGxlIl0pLHBheWxvYWQ6bS5hLmFycmF5T2YobS5hLnNoYXBlKHt2YWx1ZTptLmEuYW55LGlkOm0uYS5hbnksdHlwZTptLmEub25lT2YoWCl9KSksaW5hY3RpdmVDb2xvcjptLmEuc3RyaW5nLGZvcm1hdHRlcjptLmEuZnVuYyxvbk1vdXNlRW50ZXI6bS5hLmZ1bmMsb25Nb3VzZUxlYXZlOm0uYS5mdW5jLG9uQ2xpY2s6bS5hLmZ1bmN9LFlmLmRlZmF1bHRQcm9wcz17aWNvblNpemU6MTQsbGF5b3V0OiJob3Jpem9udGFsIixhbGlnbjoiY2VudGVyIix2ZXJ0aWNhbEFsaWduOiJtaWRkbGUiLGluYWN0aXZlQ29sb3I6IiNjY2MifSxXZj1YZikpfHxXZjtmdW5jdGlvbiBsbChlKXtyZXR1cm4obGw9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBobChlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LG49T2JqZWN0LmtleXMocik7ImZ1bmN0aW9uIj09PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYobj1uLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHIpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGUpLmVudW1lcmFibGV9KSkpLG4uZm9yRWFjaChmdW5jdGlvbih0KXtwbChlLHQsclt0XSl9KX1yZXR1cm4gZX1mdW5jdGlvbiBwbChlLHQscil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1yLGV9ZnVuY3Rpb24gZGwoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiB5bChlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PWxsKHQpJiYiZnVuY3Rpb24iIT09dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZQ=="
}