mirror of https://github.com/laurent22/joplin.git
1 line
1.1 MiB
1 line
1.1 MiB
module.exports = `IWZ1bmN0aW9uKHQsZSl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW10sZSk6Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMubWVybWFpZD1lKCk6dC5tZXJtYWlkPWUoKX0oInVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcywoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gbihyKXtpZihlW3JdKXJldHVybiBlW3JdLmV4cG9ydHM7dmFyIGk9ZVtyXT17aTpyLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIHRbcl0uY2FsbChpLmV4cG9ydHMsaSxpLmV4cG9ydHMsbiksaS5sPSEwLGkuZXhwb3J0c31yZXR1cm4gbi5tPXQsbi5jPWUsbi5kPWZ1bmN0aW9uKHQsZSxyKXtuLm8odCxlKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7ZW51bWVyYWJsZTohMCxnZXQ6cn0pfSxuLnI9ZnVuY3Rpb24odCl7InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sbi50PWZ1bmN0aW9uKHQsZSl7aWYoMSZlJiYodD1uKHQpKSw4JmUpcmV0dXJuIHQ7aWYoNCZlJiYib2JqZWN0Ij09dHlwZW9mIHQmJnQmJnQuX19lc01vZHVsZSlyZXR1cm4gdDt2YXIgcj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKG4ucihyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkociwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pLDImZSYmInN0cmluZyIhPXR5cGVvZiB0KWZvcih2YXIgaSBpbiB0KW4uZChyLGksZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19LmJpbmQobnVsbCxpKSk7cmV0dXJuIHJ9LG4ubj1mdW5jdGlvbih0KXt2YXIgZT10JiZ0Ll9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gdC5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiB0fTtyZXR1cm4gbi5kKGUsImEiLGUpLGV9LG4ubz1mdW5jdGlvbih0LGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKX0sbi5wPSIiLG4obi5zPTM4NCl9KFtmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24ucihlKTt2YXIgcj1mdW5jdGlvbih0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn0saT1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gMT09PXQubGVuZ3RoJiYoZT10LHQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gcihlKHQpLG4pfSkse2xlZnQ6ZnVuY3Rpb24oZSxuLHIsaSl7Zm9yKG51bGw9PXImJihyPTApLG51bGw9PWkmJihpPWUubGVuZ3RoKTtyPGk7KXt2YXIgYT1yK2k+Pj4xO3QoZVthXSxuKTwwP3I9YSsxOmk9YX1yZXR1cm4gcn0scmlnaHQ6ZnVuY3Rpb24oZSxuLHIsaSl7Zm9yKG51bGw9PXImJihyPTApLG51bGw9PWkmJihpPWUubGVuZ3RoKTtyPGk7KXt2YXIgYT1yK2k+Pj4xO3QoZVthXSxuKT4wP2k9YTpyPWErMX1yZXR1cm4gcn19fTt2YXIgYT1pKHIpLG89YS5yaWdodCxzPWEubGVmdCxjPW8sdT1mdW5jdGlvbih0LGUpe251bGw9PWUmJihlPWwpO2Zvcih2YXIgbj0wLHI9dC5sZW5ndGgtMSxpPXRbMF0sYT1uZXcgQXJyYXkocjwwPzA6cik7bjxyOylhW25dPWUoaSxpPXRbKytuXSk7cmV0dXJuIGF9O2Z1bmN0aW9uIGwodCxlKXtyZXR1cm5bdCxlXX12YXIgaD1mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhLG8scz10Lmxlbmd0aCxjPWUubGVuZ3RoLHU9bmV3IEFycmF5KHMqYyk7Zm9yKG51bGw9PW4mJihuPWwpLHI9YT0wO3I8czsrK3IpZm9yKG89dFtyXSxpPTA7aTxjOysraSwrK2EpdVthXT1uKG8sZVtpXSk7cmV0dXJuIHV9LGY9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59LGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10P05hTjordH0scD1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaT10Lmxlbmd0aCxhPTAsbz0tMSxzPTAsYz0wO2lmKG51bGw9PWUpZm9yKDsrK288aTspaXNOYU4obj1kKHRbb10pKXx8KGMrPShyPW4tcykqKG4tKHMrPXIvKythKSkpO2Vsc2UgZm9yKDsrK288aTspaXNOYU4obj1kKGUodFtvXSxvLHQpKSl8fChjKz0ocj1uLXMpKihuLShzKz1yLysrYSkpKTtpZihhPjEpcmV0dXJuIGMvKGEtMSl9LHk9ZnVuY3Rpb24odCxlKXt2YXIgbj1wKHQsZSk7cmV0dXJuIG4/TWF0aC5zcXJ0KG4pOm59LGc9ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksYT10Lmxlbmd0aCxvPS0xO2lmKG51bGw9PWUpe2Zvcig7KytvPGE7KWlmKG51bGwhPShuPXRbb10pJiZuPj1uKWZvcihyPWk9bjsrK288YTspbnVsbCE9KG49dFtvXSkmJihyPm4mJihyPW4pLGk8biYmKGk9bikpfWVsc2UgZm9yKDsrK288YTspaWYobnVsbCE9KG49ZSh0W29dLG8sdCkpJiZuPj1uKWZvcihyPWk9bjsrK288YTspbnVsbCE9KG49ZSh0W29dLG8sdCkpJiYocj5uJiYocj1uKSxpPG4mJihpPW4pKTtyZXR1cm5bcixpXX0sdj1BcnJheS5wcm90b3R5cGUsbT12LnNsaWNlLGI9di5tYXAseD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LF89ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGs9ZnVuY3Rpb24odCxlLG4pe3Q9K3QsZT0rZSxuPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KGU9dCx0PTAsMSk6aTwzPzE6K247Zm9yKHZhciByPS0xLGk9MHxNYXRoLm1heCgwLE1hdGguY2VpbCgoZS10KS9uKSksYT1uZXcgQXJyYXkoaSk7KytyPGk7KWFbcl09dCtyKm47cmV0dXJuIGF9LHc9TWF0aC5zcXJ0KDUwKSxFPU1hdGguc3FydCgxMCksVD1NYXRoLnNxcnQoMiksQz1mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhLG8scz0tMTtpZihuPStuLCh0PSt0KT09PShlPStlKSYmbj4wKXJldHVyblt0XTtpZigocj1lPHQpJiYoaT10LHQ9ZSxlPWkpLDA9PT0obz1TKHQsZSxuKSl8fCFpc0Zpbml0ZShvKSlyZXR1cm5bXTtpZihvPjApZm9yKHQ9TWF0aC5jZWlsKHQvbyksZT1NYXRoLmZsb29yKGUvbyksYT1uZXcgQXJyYXkoaT1NYXRoLmNlaWwoZS10KzEpKTsrK3M8aTspYVtzXT0odCtzKSpvO2Vsc2UgZm9yKHQ9TWF0aC5mbG9vcih0Km8pLGU9TWF0aC5jZWlsKGUqbyksYT1uZXcgQXJyYXkoaT1NYXRoLmNlaWwodC1lKzEpKTsrK3M8aTspYVtzXT0odC1zKS9vO3JldHVybiByJiZhLnJldmVyc2UoKSxhfTtmdW5jdGlvbiBTKHQsZSxuKXt2YXIgcj0oZS10KS9NYXRoLm1heCgwLG4pLGk9TWF0aC5mbG9vcihNYXRoLmxvZyhyKS9NYXRoLkxOMTApLGE9ci9NYXRoLnBvdygxMCxpKTtyZXR1cm4gaT49MD8oYT49dz8xMDphPj1FPzU6YT49VD8yOjEpKk1hdGgucG93KDEwLGkpOi1NYXRoLnBvdygxMCwtaSkvKGE+PXc/MTA6YT49RT81OmE+PVQ/MjoxKX1mdW5jdGlvbiBBKHQsZSxuKXt2YXIgcj1NYXRoLmFicyhlLXQpL01hdGgubWF4KDAsbiksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKHIpL01hdGguTE4xMCkpLGE9ci9pO3JldHVybiBhPj13P2kqPTEwOmE+PUU/aSo9NTphPj1UJiYoaSo9MiksZTx0Py1pOml9dmFyIE09ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguY2VpbChNYXRoLmxvZyh0Lmxlbmd0aCkvTWF0aC5MTjIpKzF9LE89ZnVuY3Rpb24oKXt2YXIgdD1fLGU9ZyxuPU07ZnVuY3Rpb24gcihyKXt2YXIgaSxhLG89ci5sZW5ndGgscz1uZXcgQXJyYXkobyk7Zm9yKGk9MDtpPG87KytpKXNbaV09dChyW2ldLGkscik7dmFyIHU9ZShzKSxsPXVbMF0saD11WzFdLGY9bihzLGwsaCk7QXJyYXkuaXNBcnJheShmKXx8KGY9QShsLGgsZiksZj1rKE1hdGguY2VpbChsL2YpKmYsaCxmKSk7Zm9yKHZhciBkPWYubGVuZ3RoO2ZbMF08PWw7KWYuc2hpZnQoKSwtLWQ7Zm9yKDtmW2QtMV0+aDspZi5wb3AoKSwtLWQ7dmFyIHAseT1uZXcgQXJyYXkoZCsxKTtmb3IoaT0wO2k8PWQ7KytpKShwPXlbaV09W10pLngwPWk+MD9mW2ktMV06bCxwLngxPWk8ZD9mW2ldOmg7Zm9yKGk9MDtpPG87KytpKWw8PShhPXNbaV0pJiZhPD1oJiZ5W2MoZixhLDAsZCldLnB1c2gocltpXSk7cmV0dXJuIHl9cmV0dXJuIHIudmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTp4KGUpLHIpOnR9LHIuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6eChbdFswXSx0WzFdXSkscik6ZX0sci50aHJlc2hvbGRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QXJyYXkuaXNBcnJheSh0KT94KG0uY2FsbCh0KSk6eCh0KSxyKTpufSxyfSxCPWZ1bmN0aW9uKHQsZSxuKXtpZihudWxsPT1uJiYobj1kKSxyPXQubGVuZ3RoKXtpZigoZT0rZSk8PTB8fHI8MilyZXR1cm4rbih0WzBdLDAsdCk7aWYoZT49MSlyZXR1cm4rbih0W3ItMV0sci0xLHQpO3ZhciByLGk9KHItMSkqZSxhPU1hdGguZmxvb3IoaSksbz0rbih0W2FdLGEsdCk7cmV0dXJuIG8rKCtuKHRbYSsxXSxhKzEsdCktbykqKGktYSl9fSxOPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdD1iLmNhbGwodCxkKS5zb3J0KHIpLE1hdGguY2VpbCgobi1lKS8oMiooQih0LC43NSktQih0LC4yNSkpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LEQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBNYXRoLmNlaWwoKG4tZSkvKDMuNSp5KHQpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LEw9ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk9dC5sZW5ndGgsYT0tMTtpZihudWxsPT1lKXtmb3IoOysrYTxpOylpZihudWxsIT0obj10W2FdKSYmbj49bilmb3Iocj1uOysrYTxpOyludWxsIT0obj10W2FdKSYmbj5yJiYocj1uKX1lbHNlIGZvcig7KythPGk7KWlmKG51bGwhPShuPWUodFthXSxhLHQpKSYmbj49bilmb3Iocj1uOysrYTxpOyludWxsIT0obj1lKHRbYV0sYSx0KSkmJm4+ciYmKHI9bik7cmV0dXJuIHJ9LEk9ZnVuY3Rpb24odCxlKXt2YXIgbixyPXQubGVuZ3RoLGk9cixhPS0xLG89MDtpZihudWxsPT1lKWZvcig7KythPHI7KWlzTmFOKG49ZCh0W2FdKSk/LS1pOm8rPW47ZWxzZSBmb3IoOysrYTxyOylpc05hTihuPWQoZSh0W2FdLGEsdCkpKT8tLWk6bys9bjtpZihpKXJldHVybiBvL2l9LFI9ZnVuY3Rpb24odCxlKXt2YXIgbixpPXQubGVuZ3RoLGE9LTEsbz1bXTtpZihudWxsPT1lKWZvcig7KythPGk7KWlzTmFOKG49ZCh0W2FdKSl8fG8ucHVzaChuKTtlbHNlIGZvcig7KythPGk7KWlzTmFOKG49ZChlKHRbYV0sYSx0KSkpfHxvLnB1c2gobik7cmV0dXJuIEIoby5zb3J0KHIpLC41KX0sRj1mdW5jdGlvbih0KXtmb3IodmFyIGUsbixyLGk9dC5sZW5ndGgsYT0tMSxvPTA7KythPGk7KW8rPXRbYV0ubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShvKTstLWk+PTA7KWZvcihlPShyPXRbaV0pLmxlbmd0aDstLWU+PTA7KW5bLS1vXT1yW2VdO3JldHVybiBufSxQPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpPXQubGVuZ3RoLGE9LTE7aWYobnVsbD09ZSl7Zm9yKDsrK2E8aTspaWYobnVsbCE9KG49dFthXSkmJm4+PW4pZm9yKHI9bjsrK2E8aTspbnVsbCE9KG49dFthXSkmJnI+biYmKHI9bil9ZWxzZSBmb3IoOysrYTxpOylpZihudWxsIT0obj1lKHRbYV0sYSx0KSkmJm4+PW4pZm9yKHI9bjsrK2E8aTspbnVsbCE9KG49ZSh0W2FdLGEsdCkpJiZyPm4mJihyPW4pO3JldHVybiByfSxqPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPWUubGVuZ3RoLHI9bmV3IEFycmF5KG4pO24tLTspcltuXT10W2Vbbl1dO3JldHVybiByfSxZPWZ1bmN0aW9uKHQsZSl7aWYobj10Lmxlbmd0aCl7dmFyIG4saSxhPTAsbz0wLHM9dFtvXTtmb3IobnVsbD09ZSYmKGU9cik7KythPG47KShlKGk9dFthXSxzKTwwfHwwIT09ZShzLHMpKSYmKHM9aSxvPWEpO3JldHVybiAwPT09ZShzLHMpP286dm9pZCAwfX0sej1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciByLGksYT0obnVsbD09bj90Lmxlbmd0aDpuKS0oZT1udWxsPT1lPzA6K2UpO2E7KWk9TWF0aC5yYW5kb20oKSphLS18MCxyPXRbYStlXSx0W2ErZV09dFtpK2VdLHRbaStlXT1yO3JldHVybiB0fSxVPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj10Lmxlbmd0aCxpPS0xLGE9MDtpZihudWxsPT1lKWZvcig7KytpPHI7KShuPSt0W2ldKSYmKGErPW4pO2Vsc2UgZm9yKDsrK2k8cjspKG49K2UodFtpXSxpLHQpKSYmKGErPW4pO3JldHVybiBhfSwkPWZ1bmN0aW9uKHQpe2lmKCEoaT10Lmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciBlPS0xLG49UCh0LHEpLHI9bmV3IEFycmF5KG4pOysrZTxuOylmb3IodmFyIGksYT0tMSxvPXJbZV09bmV3IEFycmF5KGkpOysrYTxpOylvW2FdPXRbYV1bZV07cmV0dXJuIHJ9O2Z1bmN0aW9uIHEodCl7cmV0dXJuIHQubGVuZ3RofXZhciBXPWZ1bmN0aW9uKCl7cmV0dXJuICQoYXJndW1lbnRzKX0sVj1BcnJheS5wcm90b3R5cGUuc2xpY2UsSD1mdW5jdGlvbih0KXtyZXR1cm4gdH07ZnVuY3Rpb24gRyh0KXtyZXR1cm4idHJhbnNsYXRlKCIrKHQrLjUpKyIsMCkifWZ1bmN0aW9uIFgodCl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKHQrLjUpKyIpIn1mdW5jdGlvbiBaKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4rdChlKX19ZnVuY3Rpb24gUSh0KXt2YXIgZT1NYXRoLm1heCgwLHQuYmFuZHdpZHRoKCktMSkvMjtyZXR1cm4gdC5yb3VuZCgpJiYoZT1NYXRoLnJvdW5kKGUpKSxmdW5jdGlvbihuKXtyZXR1cm4rdChuKStlfX1mdW5jdGlvbiBLKCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIEoodCxlKXt2YXIgbj1bXSxyPW51bGwsaT1udWxsLGE9NixvPTYscz0zLGM9MT09PXR8fDQ9PT10Py0xOjEsdT00PT09dHx8Mj09PXQ/IngiOiJ5IixsPTE9PT10fHwzPT09dD9HOlg7ZnVuY3Rpb24gaChoKXt2YXIgZj1udWxsPT1yP2UudGlja3M/ZS50aWNrcy5hcHBseShlLG4pOmUuZG9tYWluKCk6cixkPW51bGw9PWk/ZS50aWNrRm9ybWF0P2UudGlja0Zvcm1hdC5hcHBseShlLG4pOkg6aSxwPU1hdGgubWF4KGEsMCkrcyx5PWUucmFuZ2UoKSxnPSt5WzBdKy41LHY9K3lbeS5sZW5ndGgtMV0rLjUsbT0oZS5iYW5kd2lkdGg/UTpaKShlLmNvcHkoKSksYj1oLnNlbGVjdGlvbj9oLnNlbGVjdGlvbigpOmgseD1iLnNlbGVjdEFsbCgiLmRvbWFpbiIpLmRhdGEoW251bGxdKSxfPWIuc2VsZWN0QWxsKCIudGljayIpLmRhdGEoZixlKS5vcmRlcigpLGs9Xy5leGl0KCksdz1fLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0aWNrIiksRT1fLnNlbGVjdCgibGluZSIpLFQ9Xy5zZWxlY3QoInRleHQiKTt4PXgubWVyZ2UoeC5lbnRlcigpLmluc2VydCgicGF0aCIsIi50aWNrIikuYXR0cigiY2xhc3MiLCJkb21haW4iKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKSksXz1fLm1lcmdlKHcpLEU9RS5tZXJnZSh3LmFwcGVuZCgibGluZSIpLmF0dHIoInN0cm9rZSIsImN1cnJlbnRDb2xvciIpLmF0dHIodSsiMiIsYyphKSksVD1ULm1lcmdlKHcuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZmlsbCIsImN1cnJlbnRDb2xvciIpLmF0dHIodSxjKnApLmF0dHIoImR5IiwxPT09dD8iMGVtIjozPT09dD8iMC43MWVtIjoiMC4zMmVtIikpLGghPT1iJiYoeD14LnRyYW5zaXRpb24oaCksXz1fLnRyYW5zaXRpb24oaCksRT1FLnRyYW5zaXRpb24oaCksVD1ULnRyYW5zaXRpb24oaCksaz1rLnRyYW5zaXRpb24oaCkuYXR0cigib3BhY2l0eSIsMWUtNikuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9bSh0KSk/bCh0KTp0aGlzLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIil9KSksdy5hdHRyKCJvcGFjaXR5IiwxZS02KS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXt2YXIgZT10aGlzLnBhcmVudE5vZGUuX19heGlzO3JldHVybiBsKGUmJmlzRmluaXRlKGU9ZSh0KSk/ZTptKHQpKX0pKSksay5yZW1vdmUoKSx4LmF0dHIoImQiLDQ9PT10fHwyPT10P28/Ik0iK2MqbysiLCIrZysiSDAuNVYiK3YrIkgiK2MqbzoiTTAuNSwiK2crIlYiK3Y6bz8iTSIrZysiLCIrYypvKyJWMC41SCIrdisiViIrYypvOiJNIitnKyIsMC41SCIrdiksXy5hdHRyKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gbChtKHQpKX0pKSxFLmF0dHIodSsiMiIsYyphKSxULmF0dHIodSxjKnApLnRleHQoZCksYi5maWx0ZXIoSykuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsMj09PXQ/InN0YXJ0Ijo0PT09dD8iZW5kIjoibWlkZGxlIiksYi5lYWNoKChmdW5jdGlvbigpe3RoaXMuX19heGlzPW19KSl9cmV0dXJuIGguc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxoKTplfSxoLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIG49Vi5jYWxsKGFyZ3VtZW50cyksaH0saC50aWNrQXJndW1lbnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/W106Vi5jYWxsKHQpLGgpOm4uc2xpY2UoKX0saC50aWNrVmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PXQ/bnVsbDpWLmNhbGwodCksaCk6ciYmci5zbGljZSgpfSxoLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxoKTppfSxoLnRpY2tTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW89K3QsaCk6YX0saC50aWNrU2l6ZUlubmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSt0LGgpOmF9LGgudGlja1NpemVPdXRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rdCxoKTpvfSxoLnRpY2tQYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0LGgpOnN9LGh9ZnVuY3Rpb24gdHQodCl7cmV0dXJuIEooMSx0KX1mdW5jdGlvbiBldCh0KXtyZXR1cm4gSigyLHQpfWZ1bmN0aW9uIG50KHQpe3JldHVybiBKKDMsdCl9ZnVuY3Rpb24gcnQodCl7cmV0dXJuIEooNCx0KX12YXIgaXQ9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gYXQoKXtmb3IodmFyIHQsZT0wLG49YXJndW1lbnRzLmxlbmd0aCxyPXt9O2U8bjsrK2Upe2lmKCEodD1hcmd1bWVudHNbZV0rIiIpfHx0IGluIHJ8fC9bXHMuXS8udGVzdCh0KSl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIit0KTtyW3RdPVtdfXJldHVybiBuZXcgb3Qocil9ZnVuY3Rpb24gb3QodCl7dGhpcy5fPXR9ZnVuY3Rpb24gc3QodCxlKXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgbj0iIixyPXQuaW5kZXhPZigiLiIpO2lmKHI+PTAmJihuPXQuc2xpY2UocisxKSx0PXQuc2xpY2UoMCxyKSksdCYmIWUuaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7cmV0dXJue3R5cGU6dCxuYW1lOm59fSkpfWZ1bmN0aW9uIGN0KHQsZSl7Zm9yKHZhciBuLHI9MCxpPXQubGVuZ3RoO3I8aTsrK3IpaWYoKG49dFtyXSkubmFtZT09PWUpcmV0dXJuIG4udmFsdWV9ZnVuY3Rpb24gdXQodCxlLG4pe2Zvcih2YXIgcj0wLGk9dC5sZW5ndGg7cjxpOysrcilpZih0W3JdLm5hbWU9PT1lKXt0W3JdPWl0LHQ9dC5zbGljZSgwLHIpLmNvbmNhdCh0LnNsaWNlKHIrMSkpO2JyZWFrfXJldHVybiBudWxsIT1uJiZ0LnB1c2goe25hbWU6ZSx2YWx1ZTpufSksdH1vdC5wcm90b3R5cGU9YXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpvdCxvbjpmdW5jdGlvbih0LGUpe3ZhciBuLHI9dGhpcy5fLGk9c3QodCsiIixyKSxhPS0xLG89aS5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrZSk7Zm9yKDsrK2E8bzspaWYobj0odD1pW2FdKS50eXBlKXJbbl09dXQocltuXSx0Lm5hbWUsZSk7ZWxzZSBpZihudWxsPT1lKWZvcihuIGluIHIpcltuXT11dChyW25dLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrYTxvOylpZigobj0odD1pW2FdKS50eXBlKSYmKG49Y3QocltuXSx0Lm5hbWUpKSlyZXR1cm4gbn0sY29weTpmdW5jdGlvbigpe3ZhciB0PXt9LGU9dGhpcy5fO2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXS5zbGljZSgpO3JldHVybiBuZXcgb3QodCl9LGNhbGw6ZnVuY3Rpb24odCxlKXtpZigobj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBuLHIsaT1uZXcgQXJyYXkobiksYT0wO2E8bjsrK2EpaVthXT1hcmd1bWVudHNbYSsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2ZvcihhPTAsbj0ocj10aGlzLl9bdF0pLmxlbmd0aDthPG47KythKXJbYV0udmFsdWUuYXBwbHkoZSxpKX0sYXBwbHk6ZnVuY3Rpb24odCxlLG4pe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKHZhciByPXRoaXMuX1t0XSxpPTAsYT1yLmxlbmd0aDtpPGE7KytpKXJbaV0udmFsdWUuYXBwbHkoZSxuKX19O3ZhciBsdD1hdDtmdW5jdGlvbiBodCgpe312YXIgZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/aHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHQpfX07ZnVuY3Rpb24gZHQoKXtyZXR1cm5bXX12YXIgcHQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/ZHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKHQpfX0seXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyh0KX19LGd0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQXJyYXkodC5sZW5ndGgpfTtmdW5jdGlvbiB2dCh0LGUpe3RoaXMub3duZXJEb2N1bWVudD10Lm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9dC5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD10LHRoaXMuX19kYXRhX189ZX12dC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnZ0LGFwcGVuZENoaWxkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsZSl9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKHQpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbCh0KX19O2Z1bmN0aW9uIG10KHQsZSxuLHIsaSxhKXtmb3IodmFyIG8scz0wLGM9ZS5sZW5ndGgsdT1hLmxlbmd0aDtzPHU7KytzKShvPWVbc10pPyhvLl9fZGF0YV9fPWFbc10scltzXT1vKTpuW3NdPW5ldyB2dCh0LGFbc10pO2Zvcig7czxjOysrcykobz1lW3NdKSYmKGlbc109byl9ZnVuY3Rpb24gYnQodCxlLG4scixpLGEsbyl7dmFyIHMsYyx1LGw9e30saD1lLmxlbmd0aCxmPWEubGVuZ3RoLGQ9bmV3IEFycmF5KGgpO2ZvcihzPTA7czxoOysrcykoYz1lW3NdKSYmKGRbc109dT0iJCIrby5jYWxsKGMsYy5fX2RhdGFfXyxzLGUpLHUgaW4gbD9pW3NdPWM6bFt1XT1jKTtmb3Iocz0wO3M8ZjsrK3MpKGM9bFt1PSIkIitvLmNhbGwodCxhW3NdLHMsYSldKT8ocltzXT1jLGMuX19kYXRhX189YVtzXSxsW3VdPW51bGwpOm5bc109bmV3IHZ0KHQsYVtzXSk7Zm9yKHM9MDtzPGg7KytzKShjPWVbc10pJiZsW2Rbc11dPT09YyYmKGlbc109Yyl9ZnVuY3Rpb24geHQodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59dmFyIF90PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixrdD17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6X3QseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifSx3dD1mdW5jdGlvbih0KXt2YXIgZT10Kz0iIixuPWUuaW5kZXhPZigiOiIpO3JldHVybiBuPj0wJiYieG1sbnMiIT09KGU9dC5zbGljZSgwLG4pKSYmKHQ9dC5zbGljZShuKzEpKSxrdC5oYXNPd25Qcm9wZXJ0eShlKT97c3BhY2U6a3RbZV0sbG9jYWw6dH06dH07ZnVuY3Rpb24gRXQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIFR0KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gQ3QodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSh0LGUpfX1mdW5jdGlvbiBTdCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLGUpfX1mdW5jdGlvbiBBdCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCk6dGhpcy5zZXRBdHRyaWJ1dGUodCxuKX19ZnVuY3Rpb24gTXQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxuKX19dmFyIE90PWZ1bmN0aW9uKHQpe3JldHVybiB0Lm93bmVyRG9jdW1lbnQmJnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8dC5kb2N1bWVudCYmdHx8dC5kZWZhdWx0Vmlld307ZnVuY3Rpb24gQnQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX19ZnVuY3Rpb24gTnQodCxlLG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLG4pfX1mdW5jdGlvbiBEdCh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09cj90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxyLG4pfX1mdW5jdGlvbiBMdCh0LGUpe3JldHVybiB0LnN0eWxlLmdldFByb3BlcnR5VmFsdWUoZSl8fE90KHQpLmdldENvbXB1dGVkU3R5bGUodCxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGUpfWZ1bmN0aW9uIEl0KHQpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW3RdfX1mdW5jdGlvbiBSdCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbdF09ZX19ZnVuY3Rpb24gRnQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP2RlbGV0ZSB0aGlzW3RdOnRoaXNbdF09bn19ZnVuY3Rpb24gUHQodCl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIGp0KHQpe3JldHVybiB0LmNsYXNzTGlzdHx8bmV3IFl0KHQpfWZ1bmN0aW9uIFl0KHQpe3RoaXMuX25vZGU9dCx0aGlzLl9uYW1lcz1QdCh0LmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIHp0KHQsZSl7Zm9yKHZhciBuPWp0KHQpLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspbi5hZGQoZVtyXSl9ZnVuY3Rpb24gVXQodCxlKXtmb3IodmFyIG49anQodCkscj0tMSxpPWUubGVuZ3RoOysrcjxpOyluLnJlbW92ZShlW3JdKX1mdW5jdGlvbiAkdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt6dCh0aGlzLHQpfX1mdW5jdGlvbiBxdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtVdCh0aGlzLHQpfX1mdW5jdGlvbiBXdCh0LGUpe3JldHVybiBmdW5jdGlvbigpeyhlLmFwcGx5KHRoaXMsYXJndW1lbnRzKT96dDpVdCkodGhpcyx0KX19WXQucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24odCl7dGhpcy5fbmFtZXMuaW5kZXhPZih0KTwwJiYodGhpcy5fbmFtZXMucHVzaCh0KSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZXMuaW5kZXhPZih0KTtlPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKGUsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YodCk+PTB9fTtmdW5jdGlvbiBWdCgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gSHQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX1mdW5jdGlvbiBHdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/IiI6ZX19ZnVuY3Rpb24gWHQoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBadCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD10fX1mdW5jdGlvbiBRdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1udWxsPT1lPyIiOmV9fWZ1bmN0aW9uIEt0KCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIEp0KCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gdGUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vd25lckRvY3VtZW50LG49dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIG49PT1fdCYmZS5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09X3Q/ZS5jcmVhdGVFbGVtZW50KHQpOmUuY3JlYXRlRWxlbWVudE5TKG4sdCl9fWZ1bmN0aW9uIGVlKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHQuc3BhY2UsdC5sb2NhbCl9fXZhciBuZT1mdW5jdGlvbih0KXt2YXIgZT13dCh0KTtyZXR1cm4oZS5sb2NhbD9lZTp0ZSkoZSl9O2Z1bmN0aW9uIHJlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gaWUoKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBhZSgpe3ZhciB0PXRoaXMuY2xvbmVOb2RlKCExKSxlPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gZT9lLmluc2VydEJlZm9yZSh0LHRoaXMubmV4dFNpYmxpbmcpOnR9ZnVuY3Rpb24gb2UoKXt2YXIgdD10aGlzLmNsb25lTm9kZSghMCksZT10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGU/ZS5pbnNlcnRCZWZvcmUodCx0aGlzLm5leHRTaWJsaW5nKTp0fXZhciBzZT17fSxjZT1udWxsOyJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJigib25tb3VzZWVudGVyImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8KHNlPXttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0pKTtmdW5jdGlvbiB1ZSh0LGUsbil7cmV0dXJuIHQ9bGUodCxlLG4pLGZ1bmN0aW9uKGUpe3ZhciBuPWUucmVsYXRlZFRhcmdldDtuJiYobj09PXRoaXN8fDgmbi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSl8fHQuY2FsbCh0aGlzLGUpfX1mdW5jdGlvbiBsZSh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBpPWNlO2NlPXI7dHJ5e3QuY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sZSxuKX1maW5hbGx5e2NlPWl9fX1mdW5jdGlvbiBoZSh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgZT0iIixuPXQuaW5kZXhPZigiLiIpO3JldHVybiBuPj0wJiYoZT10LnNsaWNlKG4rMSksdD10LnNsaWNlKDAsbikpLHt0eXBlOnQsbmFtZTplfX0pKX1mdW5jdGlvbiBmZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9fb247aWYoZSl7Zm9yKHZhciBuLHI9MCxpPS0xLGE9ZS5sZW5ndGg7cjxhOysrciluPWVbcl0sdC50eXBlJiZuLnR5cGUhPT10LnR5cGV8fG4ubmFtZSE9PXQubmFtZT9lWysraV09bjp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobi50eXBlLG4ubGlzdGVuZXIsbi5jYXB0dXJlKTsrK2k/ZS5sZW5ndGg9aTpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gZGUodCxlLG4pe3ZhciByPXNlLmhhc093blByb3BlcnR5KHQudHlwZSk/dWU6bGU7cmV0dXJuIGZ1bmN0aW9uKGksYSxvKXt2YXIgcyxjPXRoaXMuX19vbix1PXIoZSxhLG8pO2lmKGMpZm9yKHZhciBsPTAsaD1jLmxlbmd0aDtsPGg7KytsKWlmKChzPWNbbF0pLnR5cGU9PT10LnR5cGUmJnMubmFtZT09PXQubmFtZSlyZXR1cm4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHMudHlwZSxzLmxpc3RlbmVyLHMuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKHMudHlwZSxzLmxpc3RlbmVyPXUscy5jYXB0dXJlPW4pLHZvaWQocy52YWx1ZT1lKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIodC50eXBlLHUsbikscz17dHlwZTp0LnR5cGUsbmFtZTp0Lm5hbWUsdmFsdWU6ZSxsaXN0ZW5lcjp1LGNhcHR1cmU6bn0sYz9jLnB1c2gocyk6dGhpcy5fX29uPVtzXX19ZnVuY3Rpb24gcGUodCxlLG4scil7dmFyIGk9Y2U7dC5zb3VyY2VFdmVudD1jZSxjZT10O3RyeXtyZXR1cm4gZS5hcHBseShuLHIpfWZpbmFsbHl7Y2U9aX19ZnVuY3Rpb24geWUodCxlLG4pe3ZhciByPU90KHQpLGk9ci5DdXN0b21FdmVudDsiZnVuY3Rpb24iPT10eXBlb2YgaT9pPW5ldyBpKGUsbik6KGk9ci5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxuPyhpLmluaXRFdmVudChlLG4uYnViYmxlcyxuLmNhbmNlbGFibGUpLGkuZGV0YWlsPW4uZGV0YWlsKTppLmluaXRFdmVudChlLCExLCExKSksdC5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIGdlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHllKHRoaXMsdCxlKX19ZnVuY3Rpb24gdmUodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4geWUodGhpcyx0LGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19dmFyIG1lPVtudWxsXTtmdW5jdGlvbiBiZSh0LGUpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZX1mdW5jdGlvbiB4ZSgpe3JldHVybiBuZXcgYmUoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxtZSl9YmUucHJvdG90eXBlPXhlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6YmUsc2VsZWN0OmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1mdCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9bmV3IEFycmF5KG4pLGk9MDtpPG47KytpKWZvcih2YXIgYSxvLHM9ZVtpXSxjPXMubGVuZ3RoLHU9cltpXT1uZXcgQXJyYXkoYyksbD0wO2w8YzsrK2wpKGE9c1tsXSkmJihvPXQuY2FsbChhLGEuX19kYXRhX18sbCxzKSkmJigiX19kYXRhX18iaW4gYSYmKG8uX19kYXRhX189YS5fX2RhdGFfXyksdVtsXT1vKTtyZXR1cm4gbmV3IGJlKHIsdGhpcy5fcGFyZW50cyl9LHNlbGVjdEFsbDpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9cHQodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxyPVtdLGk9W10sYT0wO2E8bjsrK2EpZm9yKHZhciBvLHM9ZVthXSxjPXMubGVuZ3RoLHU9MDt1PGM7Kyt1KShvPXNbdV0pJiYoci5wdXNoKHQuY2FsbChvLG8uX19kYXRhX18sdSxzKSksaS5wdXNoKG8pKTtyZXR1cm4gbmV3IGJlKHIsaSl9LGZpbHRlcjpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9eXQodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxyPW5ldyBBcnJheShuKSxpPTA7aTxuOysraSlmb3IodmFyIGEsbz1lW2ldLHM9by5sZW5ndGgsYz1yW2ldPVtdLHU9MDt1PHM7Kyt1KShhPW9bdV0pJiZ0LmNhbGwoYSxhLl9fZGF0YV9fLHUsbykmJmMucHVzaChhKTtyZXR1cm4gbmV3IGJlKHIsdGhpcy5fcGFyZW50cyl9LGRhdGE6ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm4gcD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGw9LTEsdGhpcy5lYWNoKChmdW5jdGlvbih0KXtwWysrbF09dH0pKSxwO3ZhciBuLHI9ZT9idDptdCxpPXRoaXMuX3BhcmVudHMsYT10aGlzLl9ncm91cHM7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJihuPXQsdD1mdW5jdGlvbigpe3JldHVybiBufSk7Zm9yKHZhciBvPWEubGVuZ3RoLHM9bmV3IEFycmF5KG8pLGM9bmV3IEFycmF5KG8pLHU9bmV3IEFycmF5KG8pLGw9MDtsPG87KytsKXt2YXIgaD1pW2xdLGY9YVtsXSxkPWYubGVuZ3RoLHA9dC5jYWxsKGgsaCYmaC5fX2RhdGFfXyxsLGkpLHk9cC5sZW5ndGgsZz1jW2xdPW5ldyBBcnJheSh5KSx2PXNbbF09bmV3IEFycmF5KHkpO3IoaCxmLGcsdix1W2xdPW5ldyBBcnJheShkKSxwLGUpO2Zvcih2YXIgbSxiLHg9MCxfPTA7eDx5OysreClpZihtPWdbeF0pe2Zvcih4Pj1fJiYoXz14KzEpOyEoYj12W19dKSYmKytfPHk7KTttLl9uZXh0PWJ8fG51bGx9fXJldHVybihzPW5ldyBiZShzLGkpKS5fZW50ZXI9YyxzLl9leGl0PXUsc30sZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGJlKHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKGd0KSx0aGlzLl9wYXJlbnRzKX0sZXhpdDpmdW5jdGlvbigpe3JldHVybiBuZXcgYmUodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChndCksdGhpcy5fcGFyZW50cyl9LGpvaW46ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMuZW50ZXIoKSxpPXRoaXMsYT10aGlzLmV4aXQoKTtyZXR1cm4gcj0iZnVuY3Rpb24iPT10eXBlb2YgdD90KHIpOnIuYXBwZW5kKHQrIiIpLG51bGwhPWUmJihpPWUoaSkpLG51bGw9PW4/YS5yZW1vdmUoKTpuKGEpLHImJmk/ci5tZXJnZShpKS5vcmRlcigpOml9LG1lcmdlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj10Ll9ncm91cHMscj1lLmxlbmd0aCxpPW4ubGVuZ3RoLGE9TWF0aC5taW4ocixpKSxvPW5ldyBBcnJheShyKSxzPTA7czxhOysrcylmb3IodmFyIGMsdT1lW3NdLGw9bltzXSxoPXUubGVuZ3RoLGY9b1tzXT1uZXcgQXJyYXkoaCksZD0wO2Q8aDsrK2QpKGM9dVtkXXx8bFtkXSkmJihmW2RdPWMpO2Zvcig7czxyOysrcylvW3NdPWVbc107cmV0dXJuIG5ldyBiZShvLHRoaXMuX3BhcmVudHMpfSxvcmRlcjpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0tMSxuPXQubGVuZ3RoOysrZTxuOylmb3IodmFyIHIsaT10W2VdLGE9aS5sZW5ndGgtMSxvPWlbYV07LS1hPj0wOykocj1pW2FdKSYmKG8mJjReci5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKSYmby5wYXJlbnROb2RlLmluc2VydEJlZm9yZShyLG8pLG89cik7cmV0dXJuIHRoaXN9LHNvcnQ6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiBlJiZuP3QoZS5fX2RhdGFfXyxuLl9fZGF0YV9fKTohZS0hbn10fHwodD14dCk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxyPW4ubGVuZ3RoLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7KythKXtmb3IodmFyIG8scz1uW2FdLGM9cy5sZW5ndGgsdT1pW2FdPW5ldyBBcnJheShjKSxsPTA7bDxjOysrbCkobz1zW2xdKSYmKHVbbF09byk7dS5zb3J0KGUpfXJldHVybiBuZXcgYmUoaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfSxjYWxsOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyx0LmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfSxub2RlczpmdW5jdGlvbigpe3ZhciB0PW5ldyBBcnJheSh0aGlzLnNpemUoKSksZT0tMTtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe3RbKytlXT10aGlzfSkpLHR9LG5vZGU6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9MCxuPXQubGVuZ3RoO2U8bjsrK2UpZm9yKHZhciByPXRbZV0saT0wLGE9ci5sZW5ndGg7aTxhOysraSl7dmFyIG89cltpXTtpZihvKXJldHVybiBvfXJldHVybiBudWxsfSxzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpeysrdH0pKSx0fSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiF0aGlzLm5vZGUoKX0sZWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49MCxyPWUubGVuZ3RoO248cjsrK24pZm9yKHZhciBpLGE9ZVtuXSxvPTAscz1hLmxlbmd0aDtvPHM7KytvKShpPWFbb10pJiZ0LmNhbGwoaSxpLl9fZGF0YV9fLG8sYSk7cmV0dXJuIHRoaXN9LGF0dHI6ZnVuY3Rpb24odCxlKXt2YXIgbj13dCh0KTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciByPXRoaXMubm9kZSgpO3JldHVybiBuLmxvY2FsP3IuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTpyLmdldEF0dHJpYnV0ZShuKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1lP24ubG9jYWw/VHQ6RXQ6ImZ1bmN0aW9uIj09dHlwZW9mIGU/bi5sb2NhbD9NdDpBdDpuLmxvY2FsP1N0OkN0KShuLGUpKX0sc3R5bGU6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1lP0J0OiJmdW5jdGlvbiI9PXR5cGVvZiBlP0R0Ok50KSh0LGUsbnVsbD09bj8iIjpuKSk6THQodGhpcy5ub2RlKCksdCl9LHByb3BlcnR5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/SXQ6ImZ1bmN0aW9uIj09dHlwZW9mIGU/RnQ6UnQpKHQsZSkpOnRoaXMubm9kZSgpW3RdfSxjbGFzc2VkOmZ1bmN0aW9uKHQsZSl7dmFyIG49UHQodCsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIHI9anQodGhpcy5ub2RlKCkpLGk9LTEsYT1uLmxlbmd0aDsrK2k8YTspaWYoIXIuY29udGFpbnMobltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGU/V3Q6ZT8kdDpxdCkobixlKSl9LHRleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/VnQ6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P0d0Okh0KSh0KSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LGh0bWw6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/WHQ6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P1F0Olp0KSh0KSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxyYWlzZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goS3QpfSxsb3dlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goSnQpfSxhcHBlbmQ6ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpuZSh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSkpfSxpbnNlcnQ6ZnVuY3Rpb24odCxlKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Om5lKHQpLHI9bnVsbD09ZT9yZToiZnVuY3Rpb24iPT10eXBlb2YgZT9lOmZ0KGUpO3JldHVybiB0aGlzLnNlbGVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUobi5hcHBseSh0aGlzLGFyZ3VtZW50cyksci5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSkpfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGllKX0sY2xvbmU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2VsZWN0KHQ/b2U6YWUpfSxkYXR1bTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsdCk6dGhpcy5ub2RlKCkuX19kYXRhX199LG9uOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE9aGUodCsiIiksbz1hLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2ZvcihzPWU/ZGU6ZmUsbnVsbD09biYmKG49ITEpLHI9MDtyPG87KytyKXRoaXMuZWFjaChzKGFbcl0sZSxuKSk7cmV0dXJuIHRoaXN9dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKWZvcih2YXIgYyx1PTAsbD1zLmxlbmd0aDt1PGw7Kyt1KWZvcihyPTAsYz1zW3VdO3I8bzsrK3IpaWYoKGk9YVtyXSkudHlwZT09PWMudHlwZSYmaS5uYW1lPT09Yy5uYW1lKXJldHVybiBjLnZhbHVlfSxkaXNwYXRjaDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlP3ZlOmdlKSh0LGUpKX19O3ZhciBfZT14ZSxrZT1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/bmV3IGJlKFtbZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgYmUoW1t0XV0sbWUpfTtmdW5jdGlvbiB3ZSgpe2NlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciBFZT1mdW5jdGlvbigpe2NlLnByZXZlbnREZWZhdWx0KCksY2Uuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9LFRlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LG49a2UodCkub24oImRyYWdzdGFydC5kcmFnIixFZSwhMCk7Im9uc2VsZWN0c3RhcnQiaW4gZT9uLm9uKCJzZWxlY3RzdGFydC5kcmFnIixFZSwhMCk6KGUuX19ub3NlbGVjdD1lLnN0eWxlLk1velVzZXJTZWxlY3QsZS5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9O2Z1bmN0aW9uIENlKHQsZSl7dmFyIG49dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQscj1rZSh0KS5vbigiZHJhZ3N0YXJ0LmRyYWciLG51bGwpO2UmJihyLm9uKCJjbGljay5kcmFnIixFZSwhMCksc2V0VGltZW91dCgoZnVuY3Rpb24oKXtyLm9uKCJjbGljay5kcmFnIixudWxsKX0pLDApKSwib25zZWxlY3RzdGFydCJpbiBuP3Iub24oInNlbGVjdHN0YXJ0LmRyYWciLG51bGwpOihuLnN0eWxlLk1velVzZXJTZWxlY3Q9bi5fX25vc2VsZWN0LGRlbGV0ZSBuLl9fbm9zZWxlY3QpfXZhciBTZT1mdW5jdGlvbih0LGUsbil7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU9bixuLmNvbnN0cnVjdG9yPXR9O2Z1bmN0aW9uIEFlKHQsZSl7dmFyIG49T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSk7Zm9yKHZhciByIGluIGUpbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIE1lKCl7fXZhciBPZT0iXFxzKihbKy1dP1xcZCspXFxzKiIsQmU9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsTmU9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLERlPS9eIyhbMC05YS1mXXszLDh9KSQvLExlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tPZSxPZSxPZV0rIlxcKSQiKSxJZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbTmUsTmUsTmVdKyJcXCkkIiksUmU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tPZSxPZSxPZSxCZV0rIlxcKSQiKSxGZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW05lLE5lLE5lLEJlXSsiXFwpJCIpLFBlPW5ldyBSZWdFeHAoIl5oc2xcXCgiK1tCZSxOZSxOZV0rIlxcKSQiKSxqZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW0JlLE5lLE5lLEJlXSsiXFwpJCIpLFllPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2Z1bmN0aW9uIHplKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gVWUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiAkZSh0KXt2YXIgZSxuO3JldHVybiB0PSh0KyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwoZT1EZS5leGVjKHQpKT8obj1lWzFdLmxlbmd0aCxlPXBhcnNlSW50KGVbMV0sMTYpLDY9PT1uP3FlKGUpOjM9PT1uP25ldyBHZShlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKDE1JmUpPDw0fDE1JmUsMSk6OD09PW4/bmV3IEdlKGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsKDI1NSZlKS8yNTUpOjQ9PT1uP25ldyBHZShlPj4xMiYxNXxlPj44JjI0MCxlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKCgxNSZlKTw8NHwxNSZlKS8yNTUpOm51bGwpOihlPUxlLmV4ZWModCkpP25ldyBHZShlWzFdLGVbMl0sZVszXSwxKTooZT1JZS5leGVjKHQpKT9uZXcgR2UoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsMSk6KGU9UmUuZXhlYyh0KSk/V2UoZVsxXSxlWzJdLGVbM10sZVs0XSk6KGU9RmUuZXhlYyh0KSk/V2UoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsZVs0XSk6KGU9UGUuZXhlYyh0KSk/S2UoZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCwxKTooZT1qZS5leGVjKHQpKT9LZShlWzFdLGVbMl0vMTAwLGVbM10vMTAwLGVbNF0pOlllLmhhc093blByb3BlcnR5KHQpP3FlKFllW3RdKToidHJhbnNwYXJlbnQiPT09dD9uZXcgR2UoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBxZSh0KXtyZXR1cm4gbmV3IEdlKHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwxKX1mdW5jdGlvbiBXZSh0LGUsbixyKXtyZXR1cm4gcjw9MCYmKHQ9ZT1uPU5hTiksbmV3IEdlKHQsZSxuLHIpfWZ1bmN0aW9uIFZlKHQpe3JldHVybiB0IGluc3RhbmNlb2YgTWV8fCh0PSRlKHQpKSx0P25ldyBHZSgodD10LnJnYigpKS5yLHQuZyx0LmIsdC5vcGFjaXR5KTpuZXcgR2V9ZnVuY3Rpb24gSGUodCxlLG4scil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP1ZlKHQpOm5ldyBHZSh0LGUsbixudWxsPT1yPzE6cil9ZnVuY3Rpb24gR2UodCxlLG4scil7dGhpcy5yPSt0LHRoaXMuZz0rZSx0aGlzLmI9K24sdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIFhlKCl7cmV0dXJuIiMiK1FlKHRoaXMucikrUWUodGhpcy5nKStRZSh0aGlzLmIpfWZ1bmN0aW9uIFplKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKygxPT09dD8iKSI6IiwgIit0KyIpIil9ZnVuY3Rpb24gUWUodCl7cmV0dXJuKCh0PU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodCl8fDApKSk8MTY/IjAiOiIiKSt0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBLZSh0LGUsbixyKXtyZXR1cm4gcjw9MD90PWU9bj1OYU46bjw9MHx8bj49MT90PWU9TmFOOmU8PTAmJih0PU5hTiksbmV3IGVuKHQsZSxuLHIpfWZ1bmN0aW9uIEplKHQpe2lmKHQgaW5zdGFuY2VvZiBlbilyZXR1cm4gbmV3IGVuKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIE1lfHwodD0kZSh0KSksIXQpcmV0dXJuIG5ldyBlbjtpZih0IGluc3RhbmNlb2YgZW4pcmV0dXJuIHQ7dmFyIGU9KHQ9dC5yZ2IoKSkuci8yNTUsbj10LmcvMjU1LHI9dC5iLzI1NSxpPU1hdGgubWluKGUsbixyKSxhPU1hdGgubWF4KGUsbixyKSxvPU5hTixzPWEtaSxjPShhK2kpLzI7cmV0dXJuIHM/KG89ZT09PWE/KG4tcikvcys2KihuPHIpOm49PT1hPyhyLWUpL3MrMjooZS1uKS9zKzQscy89YzwuNT9hK2k6Mi1hLWksbyo9NjApOnM9Yz4wJiZjPDE/MDpvLG5ldyBlbihvLHMsYyx0Lm9wYWNpdHkpfWZ1bmN0aW9uIHRuKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9KZSh0KTpuZXcgZW4odCxlLG4sbnVsbD09cj8xOnIpfWZ1bmN0aW9uIGVuKHQsZSxuLHIpe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBubih0LGUsbil7cmV0dXJuIDI1NSoodDw2MD9lKyhuLWUpKnQvNjA6dDwxODA/bjp0PDI0MD9lKyhuLWUpKigyNDAtdCkvNjA6ZSl9ZnVuY3Rpb24gcm4odCxlLG4scixpKXt2YXIgYT10KnQsbz1hKnQ7cmV0dXJuKCgxLTMqdCszKmEtbykqZSsoNC02KmErMypvKSpuKygxKzMqdCszKmEtMypvKSpyK28qaSkvNn1TZShNZSwkZSx7Y29weTpmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLHQpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDp6ZSxmb3JtYXRIZXg6emUsZm9ybWF0SHNsOmZ1bmN0aW9uKCl7cmV0dXJuIEplKHRoaXMpLmZvcm1hdEhzbCgpfSxmb3JtYXRSZ2I6VWUsdG9TdHJpbmc6VWV9KSxTZShHZSxIZSxBZShNZSx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IEdlKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBHZSh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OlhlLGZvcm1hdEhleDpYZSxmb3JtYXRSZ2I6WmUsdG9TdHJpbmc6WmV9KSksU2UoZW4sdG4sQWUoTWUse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyBlbih0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBlbih0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksZT1pc05hTih0KXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxuPXRoaXMubCxyPW4rKG48LjU/bjoxLW4pKmUsaT0yKm4tcjtyZXR1cm4gbmV3IEdlKG5uKHQ+PTI0MD90LTI0MDp0KzEyMCxpLHIpLG5uKHQsaSxyKSxubih0PDEyMD90KzI0MDp0LTEyMCxpLHIpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKzEwMCoodGhpcy5zfHwwKSsiJSwgIisxMDAqKHRoaXMubHx8MCkrIiUiKygxPT09dD8iKSI6IiwgIit0KyIpIil9fSkpO3ZhciBhbj1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihuKXt2YXIgcj1uPD0wP249MDpuPj0xPyhuPTEsZS0xKTpNYXRoLmZsb29yKG4qZSksaT10W3JdLGE9dFtyKzFdLG89cj4wP3Rbci0xXToyKmktYSxzPXI8ZS0xP3RbcisyXToyKmEtaTtyZXR1cm4gcm4oKG4tci9lKSplLG8saSxhLHMpfX0sb249ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByPU1hdGguZmxvb3IoKChuJT0xKTwwPysrbjpuKSplKSxpPXRbKHIrZS0xKSVlXSxhPXRbciVlXSxvPXRbKHIrMSklZV0scz10WyhyKzIpJWVdO3JldHVybiBybigobi1yL2UpKmUsaSxhLG8scyl9fSxzbj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19O2Z1bmN0aW9uIGNuKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0K24qZX19ZnVuY3Rpb24gdW4odCxlKXt2YXIgbj1lLXQ7cmV0dXJuIG4/Y24odCxuPjE4MHx8bjwtMTgwP24tMzYwKk1hdGgucm91bmQobi8zNjApOm4pOnNuKGlzTmFOKHQpP2U6dCl9ZnVuY3Rpb24gbG4odCl7cmV0dXJuIDE9PSh0PSt0KT9objpmdW5jdGlvbihlLG4pe3JldHVybiBuLWU/ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0PU1hdGgucG93KHQsbiksZT1NYXRoLnBvdyhlLG4pLXQsbj0xL24sZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucG93KHQrciplLG4pfX0oZSxuLHQpOnNuKGlzTmFOKGUpP246ZSl9fWZ1bmN0aW9uIGhuKHQsZSl7dmFyIG49ZS10O3JldHVybiBuP2NuKHQsbik6c24oaXNOYU4odCk/ZTp0KX12YXIgZm49ZnVuY3Rpb24gdChlKXt2YXIgbj1sbihlKTtmdW5jdGlvbiByKHQsZSl7dmFyIHI9bigodD1IZSh0KSkuciwoZT1IZShlKSkuciksaT1uKHQuZyxlLmcpLGE9bih0LmIsZS5iKSxvPWhuKHQub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5yPXIoZSksdC5nPWkoZSksdC5iPWEoZSksdC5vcGFjaXR5PW8oZSksdCsiIn19cmV0dXJuIHIuZ2FtbWE9dCxyfSgxKTtmdW5jdGlvbiBkbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG4scixpPWUubGVuZ3RoLGE9bmV3IEFycmF5KGkpLG89bmV3IEFycmF5KGkpLHM9bmV3IEFycmF5KGkpO2ZvcihuPTA7bjxpOysrbilyPUhlKGVbbl0pLGFbbl09ci5yfHwwLG9bbl09ci5nfHwwLHNbbl09ci5ifHwwO3JldHVybiBhPXQoYSksbz10KG8pLHM9dChzKSxyLm9wYWNpdHk9MSxmdW5jdGlvbih0KXtyZXR1cm4gci5yPWEodCksci5nPW8odCksci5iPXModCkscisiIn19fXZhciBwbj1kbihhbikseW49ZG4ob24pLGduPWZ1bmN0aW9uKHQsZSl7ZXx8KGU9W10pO3ZhciBuLHI9dD9NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCk6MCxpPWUuc2xpY2UoKTtyZXR1cm4gZnVuY3Rpb24oYSl7Zm9yKG49MDtuPHI7KytuKWlbbl09dFtuXSooMS1hKStlW25dKmE7cmV0dXJuIGl9fTtmdW5jdGlvbiB2bih0KXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KHQpJiYhKHQgaW5zdGFuY2VvZiBEYXRhVmlldyl9dmFyIG1uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKHZuKGUpP2duOmJuKSh0LGUpfTtmdW5jdGlvbiBibih0LGUpe3ZhciBuLHI9ZT9lLmxlbmd0aDowLGk9dD9NYXRoLm1pbihyLHQubGVuZ3RoKTowLGE9bmV3IEFycmF5KGkpLG89bmV3IEFycmF5KHIpO2ZvcihuPTA7bjxpOysrbilhW25dPUFuKHRbbl0sZVtuXSk7Zm9yKDtuPHI7KytuKW9bbl09ZVtuXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKG49MDtuPGk7KytuKW9bbl09YVtuXSh0KTtyZXR1cm4gb319dmFyIHhuPWZ1bmN0aW9uKHQsZSl7dmFyIG49bmV3IERhdGU7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihyKXtyZXR1cm4gbi5zZXRUaW1lKHQqKDEtcikrZSpyKSxufX0sX249ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKG4pe3JldHVybiB0KigxLW4pK2Uqbn19LGtuPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj17fSxpPXt9O2ZvcihuIGluIG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHR8fCh0PXt9KSxudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlfHwoZT17fSksZSluIGluIHQ/cltuXT1Bbih0W25dLGVbbl0pOmlbbl09ZVtuXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKG4gaW4gcilpW25dPXJbbl0odCk7cmV0dXJuIGl9fSx3bj0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csRW49bmV3IFJlZ0V4cCh3bi5zb3VyY2UsImciKTt2YXIgVG4sQ24sU249ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksYT13bi5sYXN0SW5kZXg9RW4ubGFzdEluZGV4PTAsbz0tMSxzPVtdLGM9W107Zm9yKHQrPSIiLGUrPSIiOyhuPXduLmV4ZWModCkpJiYocj1Fbi5leGVjKGUpKTspKGk9ci5pbmRleCk+YSYmKGk9ZS5zbGljZShhLGkpLHNbb10/c1tvXSs9aTpzWysrb109aSksKG49blswXSk9PT0ocj1yWzBdKT9zW29dP3Nbb10rPXI6c1srK29dPXI6KHNbKytvXT1udWxsLGMucHVzaCh7aTpvLHg6X24obixyKX0pKSxhPUVuLmxhc3RJbmRleDtyZXR1cm4gYTxlLmxlbmd0aCYmKGk9ZS5zbGljZShhKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLHMubGVuZ3RoPDI/Y1swXT9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkrIiJ9fShjWzBdLngpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0oZSk6KGU9Yy5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciBuLHI9MDtyPGU7KytyKXNbKG49Y1tyXSkuaV09bi54KHQpO3JldHVybiBzLmpvaW4oIiIpfSl9LEFuPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj10eXBlb2YgZTtyZXR1cm4gbnVsbD09ZXx8ImJvb2xlYW4iPT09cj9zbihlKTooIm51bWJlciI9PT1yP19uOiJzdHJpbmciPT09cj8obj0kZShlKSk/KGU9bixmbik6U246ZSBpbnN0YW5jZW9mICRlP2ZuOmUgaW5zdGFuY2VvZiBEYXRlP3huOnZuKGUpP2duOkFycmF5LmlzQXJyYXkoZSk/Ym46ImZ1bmN0aW9uIiE9dHlwZW9mIGUudmFsdWVPZiYmImZ1bmN0aW9uIiE9dHlwZW9mIGUudG9TdHJpbmd8fGlzTmFOKGUpP2tuOl9uKSh0LGUpfSxNbj1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPWNlO3Q9ZS5zb3VyY2VFdmVudDspZT10O3JldHVybiBlfSxPbj1mdW5jdGlvbih0LGUpe3ZhciBuPXQub3duZXJTVkdFbGVtZW50fHx0O2lmKG4uY3JlYXRlU1ZHUG9pbnQpe3ZhciByPW4uY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gci54PWUuY2xpZW50WCxyLnk9ZS5jbGllbnRZLFsocj1yLm1hdHJpeFRyYW5zZm9ybSh0LmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSkpLngsci55XX12YXIgaT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybltlLmNsaWVudFgtaS5sZWZ0LXQuY2xpZW50TGVmdCxlLmNsaWVudFktaS50b3AtdC5jbGllbnRUb3BdfSxCbj1mdW5jdGlvbih0LGUsbil7YXJndW1lbnRzLmxlbmd0aDwzJiYobj1lLGU9TW4oKS5jaGFuZ2VkVG91Y2hlcyk7Zm9yKHZhciByLGk9MCxhPWU/ZS5sZW5ndGg6MDtpPGE7KytpKWlmKChyPWVbaV0pLmlkZW50aWZpZXI9PT1uKXJldHVybiBPbih0LHIpO3JldHVybiBudWxsfSxObj1mdW5jdGlvbih0KXt2YXIgZT1NbigpO3JldHVybiBlLmNoYW5nZWRUb3VjaGVzJiYoZT1lLmNoYW5nZWRUb3VjaGVzWzBdKSxPbih0LGUpfSxEbj0wLExuPTAsSW49MCxSbj0wLEZuPTAsUG49MCxqbj0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxZbj0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtmdW5jdGlvbiB6bigpe3JldHVybiBGbnx8KFluKFVuKSxGbj1qbi5ub3coKStQbil9ZnVuY3Rpb24gVW4oKXtGbj0wfWZ1bmN0aW9uICRuKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBxbih0LGUsbil7dmFyIHI9bmV3ICRuO3JldHVybiByLnJlc3RhcnQodCxlLG4pLHJ9ZnVuY3Rpb24gV24oKXt6bigpLCsrRG47Zm9yKHZhciB0LGU9VG47ZTspKHQ9Rm4tZS5fdGltZSk+PTAmJmUuX2NhbGwuY2FsbChudWxsLHQpLGU9ZS5fbmV4dDstLURufWZ1bmN0aW9uIFZuKCl7Rm49KFJuPWpuLm5vdygpKStQbixEbj1Mbj0wO3RyeXtXbigpfWZpbmFsbHl7RG49MCxmdW5jdGlvbigpe3ZhciB0LGUsbj1UbixyPTEvMDtmb3IoO247KW4uX2NhbGw/KHI+bi5fdGltZSYmKHI9bi5fdGltZSksdD1uLG49bi5fbmV4dCk6KGU9bi5fbmV4dCxuLl9uZXh0PW51bGwsbj10P3QuX25leHQ9ZTpUbj1lKTtDbj10LEduKHIpfSgpLEZuPTB9fWZ1bmN0aW9uIEhuKCl7dmFyIHQ9am4ubm93KCksZT10LVJuO2U+MWUzJiYoUG4tPWUsUm49dCl9ZnVuY3Rpb24gR24odCl7RG58fChMbiYmKExuPWNsZWFyVGltZW91dChMbikpLHQtRm4+MjQ/KHQ8MS8wJiYoTG49c2V0VGltZW91dChWbix0LWpuLm5vdygpLVBuKSksSW4mJihJbj1jbGVhckludGVydmFsKEluKSkpOihJbnx8KFJuPWpuLm5vdygpLEluPXNldEludGVydmFsKEhuLDFlMykpLERuPTEsWW4oVm4pKSl9JG4ucHJvdG90eXBlPXFuLnByb3RvdHlwZT17Y29uc3RydWN0b3I6JG4scmVzdGFydDpmdW5jdGlvbih0LGUsbil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtuPShudWxsPT1uP3puKCk6K24pKyhudWxsPT1lPzA6K2UpLHRoaXMuX25leHR8fENuPT09dGhpc3x8KENuP0NuLl9uZXh0PXRoaXM6VG49dGhpcyxDbj10aGlzKSx0aGlzLl9jYWxsPXQsdGhpcy5fdGltZT1uLEduKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLEduKCkpfX07dmFyIFhuPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uZXcgJG47cmV0dXJuIGU9bnVsbD09ZT8wOitlLHIucmVzdGFydCgoZnVuY3Rpb24obil7ci5zdG9wKCksdChuK2UpfSksZSxuKSxyfSxabj1sdCgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxRbj1bXSxLbj1mdW5jdGlvbih0LGUsbixyLGksYSl7dmFyIG89dC5fX3RyYW5zaXRpb247aWYobyl7aWYobiBpbiBvKXJldHVybn1lbHNlIHQuX190cmFuc2l0aW9uPXt9OyFmdW5jdGlvbih0LGUsbil7dmFyIHIsaT10Ll9fdHJhbnNpdGlvbjtmdW5jdGlvbiBhKGMpe3ZhciB1LGwsaCxmO2lmKDEhPT1uLnN0YXRlKXJldHVybiBzKCk7Zm9yKHUgaW4gaSlpZigoZj1pW3VdKS5uYW1lPT09bi5uYW1lKXtpZigzPT09Zi5zdGF0ZSlyZXR1cm4gWG4oYSk7ND09PWYuc3RhdGU/KGYuc3RhdGU9NixmLnRpbWVyLnN0b3AoKSxmLm9uLmNhbGwoImludGVycnVwdCIsdCx0Ll9fZGF0YV9fLGYuaW5kZXgsZi5ncm91cCksZGVsZXRlIGlbdV0pOit1PGUmJihmLnN0YXRlPTYsZi50aW1lci5zdG9wKCksZi5vbi5jYWxsKCJjYW5jZWwiLHQsdC5fX2RhdGFfXyxmLmluZGV4LGYuZ3JvdXApLGRlbGV0ZSBpW3VdKX1pZihYbigoZnVuY3Rpb24oKXszPT09bi5zdGF0ZSYmKG4uc3RhdGU9NCxuLnRpbWVyLnJlc3RhcnQobyxuLmRlbGF5LG4udGltZSksbyhjKSl9KSksbi5zdGF0ZT0yLG4ub24uY2FsbCgic3RhcnQiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLDI9PT1uLnN0YXRlKXtmb3Iobi5zdGF0ZT0zLHI9bmV3IEFycmF5KGg9bi50d2Vlbi5sZW5ndGgpLHU9MCxsPS0xO3U8aDsrK3UpKGY9bi50d2Vlblt1XS52YWx1ZS5jYWxsKHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApKSYmKHJbKytsXT1mKTtyLmxlbmd0aD1sKzF9fWZ1bmN0aW9uIG8oZSl7Zm9yKHZhciBpPWU8bi5kdXJhdGlvbj9uLmVhc2UuY2FsbChudWxsLGUvbi5kdXJhdGlvbik6KG4udGltZXIucmVzdGFydChzKSxuLnN0YXRlPTUsMSksYT0tMSxvPXIubGVuZ3RoOysrYTxvOylyW2FdLmNhbGwodCxpKTs1PT09bi5zdGF0ZSYmKG4ub24uY2FsbCgiZW5kIix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxzKCkpfWZ1bmN0aW9uIHMoKXtmb3IodmFyIHIgaW4gbi5zdGF0ZT02LG4udGltZXIuc3RvcCgpLGRlbGV0ZSBpW2VdLGkpcmV0dXJuO2RlbGV0ZSB0Ll9fdHJhbnNpdGlvbn1pW2VdPW4sbi50aW1lcj1xbigoZnVuY3Rpb24odCl7bi5zdGF0ZT0xLG4udGltZXIucmVzdGFydChhLG4uZGVsYXksbi50aW1lKSxuLmRlbGF5PD10JiZhKHQtbi5kZWxheSl9KSwwLG4udGltZSl9KHQsbix7bmFtZTplLGluZGV4OnIsZ3JvdXA6aSxvbjpabix0d2VlbjpRbix0aW1lOmEudGltZSxkZWxheTphLmRlbGF5LGR1cmF0aW9uOmEuZHVyYXRpb24sZWFzZTphLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTowfSl9O2Z1bmN0aW9uIEpuKHQsZSl7dmFyIG49ZXIodCxlKTtpZihuLnN0YXRlPjApdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gbn1mdW5jdGlvbiB0cih0LGUpe3ZhciBuPWVyKHQsZSk7aWYobi5zdGF0ZT4zKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiBufWZ1bmN0aW9uIGVyKHQsZSl7dmFyIG49dC5fX3RyYW5zaXRpb247aWYoIW58fCEobj1uW2VdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIG59dmFyIG5yLHJyLGlyLGFyLG9yPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpLGE9dC5fX3RyYW5zaXRpb24sbz0hMDtpZihhKXtmb3IoaSBpbiBlPW51bGw9PWU/bnVsbDplKyIiLGEpKG49YVtpXSkubmFtZT09PWU/KHI9bi5zdGF0ZT4yJiZuLnN0YXRlPDUsbi5zdGF0ZT02LG4udGltZXIuc3RvcCgpLG4ub24uY2FsbChyPyJpbnRlcnJ1cHQiOiJjYW5jZWwiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLGRlbGV0ZSBhW2ldKTpvPSExO28mJmRlbGV0ZSB0Ll9fdHJhbnNpdGlvbn19LHNyPTE4MC9NYXRoLlBJLGNyPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9LHVyPWZ1bmN0aW9uKHQsZSxuLHIsaSxhKXt2YXIgbyxzLGM7cmV0dXJuKG89TWF0aC5zcXJ0KHQqdCtlKmUpKSYmKHQvPW8sZS89byksKGM9dCpuK2UqcikmJihuLT10KmMsci09ZSpjKSwocz1NYXRoLnNxcnQobipuK3IqcikpJiYobi89cyxyLz1zLGMvPXMpLHQqcjxlKm4mJih0PS10LGU9LWUsYz0tYyxvPS1vKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6YSxyb3RhdGU6TWF0aC5hdGFuMihlLHQpKnNyLHNrZXdYOk1hdGguYXRhbihjKSpzcixzY2FsZVg6byxzY2FsZVk6c319O2Z1bmN0aW9uIGxyKHQsZSxuLHIpe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrIiAiOiIifXJldHVybiBmdW5jdGlvbihhLG8pe3ZhciBzPVtdLGM9W107cmV0dXJuIGE9dChhKSxvPXQobyksZnVuY3Rpb24odCxyLGksYSxvLHMpe2lmKHQhPT1pfHxyIT09YSl7dmFyIGM9by5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLGUsbnVsbCxuKTtzLnB1c2goe2k6Yy00LHg6X24odCxpKX0se2k6Yy0yLHg6X24ocixhKX0pfWVsc2UoaXx8YSkmJm8ucHVzaCgidHJhbnNsYXRlKCIraStlK2Erbil9KGEudHJhbnNsYXRlWCxhLnRyYW5zbGF0ZVksby50cmFuc2xhdGVYLG8udHJhbnNsYXRlWSxzLGMpLGZ1bmN0aW9uKHQsZSxuLGEpe3QhPT1lPyh0LWU+MTgwP2UrPTM2MDplLXQ+MTgwJiYodCs9MzYwKSxhLnB1c2goe2k6bi5wdXNoKGkobikrInJvdGF0ZSgiLG51bGwsciktMix4Ol9uKHQsZSl9KSk6ZSYmbi5wdXNoKGkobikrInJvdGF0ZSgiK2Urcil9KGEucm90YXRlLG8ucm90YXRlLHMsYyksZnVuY3Rpb24odCxlLG4sYSl7dCE9PWU/YS5wdXNoKHtpOm4ucHVzaChpKG4pKyJza2V3WCgiLG51bGwsciktMix4Ol9uKHQsZSl9KTplJiZuLnB1c2goaShuKSsic2tld1goIitlK3IpfShhLnNrZXdYLG8uc2tld1gscyxjKSxmdW5jdGlvbih0LGUsbixyLGEsbyl7aWYodCE9PW58fGUhPT1yKXt2YXIgcz1hLnB1c2goaShhKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7by5wdXNoKHtpOnMtNCx4Ol9uKHQsbil9LHtpOnMtMix4Ol9uKGUscil9KX1lbHNlIDE9PT1uJiYxPT09cnx8YS5wdXNoKGkoYSkrInNjYWxlKCIrbisiLCIrcisiKSIpfShhLnNjYWxlWCxhLnNjYWxlWSxvLnNjYWxlWCxvLnNjYWxlWSxzLGMpLGE9bz1udWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPS0xLHI9Yy5sZW5ndGg7KytuPHI7KXNbKGU9Y1tuXSkuaV09ZS54KHQpO3JldHVybiBzLmpvaW4oIiIpfX19dmFyIGhyPWxyKChmdW5jdGlvbih0KXtyZXR1cm4ibm9uZSI9PT10P2NyOihucnx8KG5yPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLHJyPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxpcj1kb2N1bWVudC5kZWZhdWx0VmlldyksbnIuc3R5bGUudHJhbnNmb3JtPXQsdD1pci5nZXRDb21wdXRlZFN0eWxlKHJyLmFwcGVuZENoaWxkKG5yKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxyci5yZW1vdmVDaGlsZChuciksdD10LnNsaWNlKDcsLTEpLnNwbGl0KCIsIiksdXIoK3RbMF0sK3RbMV0sK3RbMl0sK3RbM10sK3RbNF0sK3RbNV0pKX0pLCJweCwgIiwicHgpIiwiZGVnKSIpLGZyPWxyKChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9jcjooYXJ8fChhcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxhci5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCksKHQ9YXIudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KHQ9dC5tYXRyaXgsdXIodC5hLHQuYix0LmMsdC5kLHQuZSx0LmYpKTpjcil9KSwiLCAiLCIpIiwiKSIpO2Z1bmN0aW9uIGRyKHQsZSl7dmFyIG4scjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT10cih0aGlzLHQpLGE9aS50d2VlbjtpZihhIT09bilmb3IodmFyIG89MCxzPShyPW49YSkubGVuZ3RoO288czsrK28paWYocltvXS5uYW1lPT09ZSl7KHI9ci5zbGljZSgpKS5zcGxpY2UobywxKTticmVha31pLnR3ZWVuPXJ9fWZ1bmN0aW9uIHByKHQsZSxuKXt2YXIgcixpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT10cih0aGlzLHQpLG89YS50d2VlbjtpZihvIT09cil7aT0ocj1vKS5zbGljZSgpO2Zvcih2YXIgcz17bmFtZTplLHZhbHVlOm59LGM9MCx1PWkubGVuZ3RoO2M8dTsrK2MpaWYoaVtjXS5uYW1lPT09ZSl7aVtjXT1zO2JyZWFrfWM9PT11JiZpLnB1c2gocyl9YS50d2Vlbj1pfX1mdW5jdGlvbiB5cih0LGUsbil7dmFyIHI9dC5faWQ7cmV0dXJuIHQuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD10cih0aGlzLHIpOyh0LnZhbHVlfHwodC52YWx1ZT17fSkpW2VdPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSkpLGZ1bmN0aW9uKHQpe3JldHVybiBlcih0LHIpLnZhbHVlW2VdfX12YXIgZ3I9ZnVuY3Rpb24odCxlKXt2YXIgbjtyZXR1cm4oIm51bWJlciI9PXR5cGVvZiBlP19uOmUgaW5zdGFuY2VvZiAkZT9mbjoobj0kZShlKSk/KGU9bixmbik6U24pKHQsZSl9O2Z1bmN0aW9uIHZyKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiBtcih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIGJyKHQsZSxuKXt2YXIgcixpLGE9bisiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZSh0KTtyZXR1cm4gbz09PWE/bnVsbDpvPT09cj9pOmk9ZShyPW8sbil9fWZ1bmN0aW9uIHhyKHQsZSxuKXt2YXIgcixpLGE9bisiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk7cmV0dXJuIG89PT1hP251bGw6bz09PXI/aTppPWUocj1vLG4pfX1mdW5jdGlvbiBfcih0LGUsbil7dmFyIHIsaSxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBvLHMsYz1uKHRoaXMpO2lmKG51bGwhPWMpcmV0dXJuKG89dGhpcy5nZXRBdHRyaWJ1dGUodCkpPT09KHM9YysiIik/bnVsbDpvPT09ciYmcz09PWk/YTooaT1zLGE9ZShyPW8sYykpO3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiBrcih0LGUsbil7dmFyIHIsaSxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBvLHMsYz1uKHRoaXMpO2lmKG51bGwhPWMpcmV0dXJuKG89dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpKT09PShzPWMrIiIpP251bGw6bz09PXImJnM9PT1pP2E6KGk9cyxhPWUocj1vLGMpKTt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIHdyKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc2V0QXR0cmlidXRlKHQsZS5jYWxsKHRoaXMsbikpfX1mdW5jdGlvbiBFcih0LGUpe3JldHVybiBmdW5jdGlvbihuKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlLmNhbGwodGhpcyxuKSl9fWZ1bmN0aW9uIFRyKHQsZSl7dmFyIG4scjtmdW5jdGlvbiBpKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkhPT1yJiYobj0ocj1pKSYmRXIodCxpKSksbn1yZXR1cm4gaS5fdmFsdWU9ZSxpfWZ1bmN0aW9uIENyKHQsZSl7dmFyIG4scjtmdW5jdGlvbiBpKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkhPT1yJiYobj0ocj1pKSYmd3IodCxpKSksbn1yZXR1cm4gaS5fdmFsdWU9ZSxpfWZ1bmN0aW9uIFNyKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7Sm4odGhpcyx0KS5kZWxheT0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIEFyKHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXtKbih0aGlzLHQpLmRlbGF5PWV9fWZ1bmN0aW9uIE1yKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dHIodGhpcyx0KS5kdXJhdGlvbj0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIE9yKHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXt0cih0aGlzLHQpLmR1cmF0aW9uPWV9fWZ1bmN0aW9uIEJyKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3RyKHRoaXMsdCkuZWFzZT1lfX1mdW5jdGlvbiBOcih0LGUsbil7dmFyIHIsaSxhPWZ1bmN0aW9uKHQpe3JldHVybih0KyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhPZigiLiIpO3JldHVybiBlPj0wJiYodD10LnNsaWNlKDAsZSkpLCF0fHwic3RhcnQiPT09dH0pKX0oZSk/Sm46dHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89YSh0aGlzLHQpLHM9by5vbjtzIT09ciYmKGk9KHI9cykuY29weSgpKS5vbihlLG4pLG8ub249aX19dmFyIERyPV9lLnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtmdW5jdGlvbiBMcih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiBJcih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLmNhbGwodGhpcyxyKSxuKX19ZnVuY3Rpb24gUnIodCxlLG4pe3ZhciByLGk7ZnVuY3Rpb24gYSgpe3ZhciBhPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBhIT09aSYmKHI9KGk9YSkmJklyKHQsYSxuKSkscn1yZXR1cm4gYS5fdmFsdWU9ZSxhfWZ1bmN0aW9uIEZyKHQpe3JldHVybiBmdW5jdGlvbihlKXt0aGlzLnRleHRDb250ZW50PXQuY2FsbCh0aGlzLGUpfX1mdW5jdGlvbiBQcih0KXt2YXIgZSxuO2Z1bmN0aW9uIHIoKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gciE9PW4mJihlPShuPXIpJiZGcihyKSksZX1yZXR1cm4gci5fdmFsdWU9dCxyfXZhciBqcj0wO2Z1bmN0aW9uIFlyKHQsZSxuLHIpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZSx0aGlzLl9uYW1lPW4sdGhpcy5faWQ9cn1mdW5jdGlvbiB6cih0KXtyZXR1cm4gX2UoKS50cmFuc2l0aW9uKHQpfWZ1bmN0aW9uIFVyKCl7cmV0dXJuKytqcn12YXIgJHI9X2UucHJvdG90eXBlO2Z1bmN0aW9uIHFyKHQpe3JldHVybiB0KnQqdH1mdW5jdGlvbiBXcih0KXtyZXR1cm4tLXQqdCp0KzF9ZnVuY3Rpb24gVnIodCl7cmV0dXJuKCh0Kj0yKTw9MT90KnQqdDoodC09MikqdCp0KzIpLzJ9WXIucHJvdG90eXBlPXpyLnByb3RvdHlwZT17Y29uc3RydWN0b3I6WXIsc2VsZWN0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25hbWUsbj10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9ZnQodCkpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxhPW5ldyBBcnJheShpKSxvPTA7bzxpOysrbylmb3IodmFyIHMsYyx1PXJbb10sbD11Lmxlbmd0aCxoPWFbb109bmV3IEFycmF5KGwpLGY9MDtmPGw7KytmKShzPXVbZl0pJiYoYz10LmNhbGwocyxzLl9fZGF0YV9fLGYsdSkpJiYoIl9fZGF0YV9fImluIHMmJihjLl9fZGF0YV9fPXMuX19kYXRhX18pLGhbZl09YyxLbihoW2ZdLGUsbixmLGgsZXIocyxuKSkpO3JldHVybiBuZXcgWXIoYSx0aGlzLl9wYXJlbnRzLGUsbil9LHNlbGVjdEFsbDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lLG49dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXB0KHQpKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsYT1bXSxvPVtdLHM9MDtzPGk7KytzKWZvcih2YXIgYyx1PXJbc10sbD11Lmxlbmd0aCxoPTA7aDxsOysraClpZihjPXVbaF0pe2Zvcih2YXIgZixkPXQuY2FsbChjLGMuX19kYXRhX18saCx1KSxwPWVyKGMsbikseT0wLGc9ZC5sZW5ndGg7eTxnOysreSkoZj1kW3ldKSYmS24oZixlLG4seSxkLHApO2EucHVzaChkKSxvLnB1c2goYyl9cmV0dXJuIG5ldyBZcihhLG8sZSxuKX0sZmlsdGVyOmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD15dCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9bmV3IEFycmF5KG4pLGk9MDtpPG47KytpKWZvcih2YXIgYSxvPWVbaV0scz1vLmxlbmd0aCxjPXJbaV09W10sdT0wO3U8czsrK3UpKGE9b1t1XSkmJnQuY2FsbChhLGEuX19kYXRhX18sdSxvKSYmYy5wdXNoKGEpO3JldHVybiBuZXcgWXIocix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxtZXJnZTpmdW5jdGlvbih0KXtpZih0Ll9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49dC5fZ3JvdXBzLHI9ZS5sZW5ndGgsaT1uLmxlbmd0aCxhPU1hdGgubWluKHIsaSksbz1uZXcgQXJyYXkocikscz0wO3M8YTsrK3MpZm9yKHZhciBjLHU9ZVtzXSxsPW5bc10saD11Lmxlbmd0aCxmPW9bc109bmV3IEFycmF5KGgpLGQ9MDtkPGg7KytkKShjPXVbZF18fGxbZF0pJiYoZltkXT1jKTtmb3IoO3M8cjsrK3Mpb1tzXT1lW3NdO3JldHVybiBuZXcgWXIobyx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxzZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERyKHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX0sdHJhbnNpdGlvbjpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9uYW1lLGU9dGhpcy5faWQsbj1VcigpLHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsYT0wO2E8aTsrK2EpZm9yKHZhciBvLHM9clthXSxjPXMubGVuZ3RoLHU9MDt1PGM7Kyt1KWlmKG89c1t1XSl7dmFyIGw9ZXIobyxlKTtLbihvLHQsbix1LHMse3RpbWU6bC50aW1lK2wuZGVsYXkrbC5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOmwuZHVyYXRpb24sZWFzZTpsLmVhc2V9KX1yZXR1cm4gbmV3IFlyKHIsdGhpcy5fcGFyZW50cyx0LG4pfSxjYWxsOiRyLmNhbGwsbm9kZXM6JHIubm9kZXMsbm9kZTokci5ub2RlLHNpemU6JHIuc2l6ZSxlbXB0eTokci5lbXB0eSxlYWNoOiRyLmVhY2gsb246ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP2VyKHRoaXMubm9kZSgpLG4pLm9uLm9uKHQpOnRoaXMuZWFjaChOcihuLHQsZSkpfSxhdHRyOmZ1bmN0aW9uKHQsZSl7dmFyIG49d3QodCkscj0idHJhbnNmb3JtIj09PW4/ZnI6Z3I7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKHQsImZ1bmN0aW9uIj09dHlwZW9mIGU/KG4ubG9jYWw/a3I6X3IpKG4scix5cih0aGlzLCJhdHRyLiIrdCxlKSk6bnVsbD09ZT8obi5sb2NhbD9tcjp2cikobik6KG4ubG9jYWw/eHI6YnIpKG4scixlKSl9LGF0dHJUd2VlbjpmdW5jdGlvbih0LGUpe3ZhciBuPSJhdHRyLiIrdDtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKG51bGw9PWUpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7dmFyIHI9d3QodCk7cmV0dXJuIHRoaXMudHdlZW4obiwoci5sb2NhbD9UcjpDcikocixlKSl9LHN0eWxlOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0idHJhbnNmb3JtIj09KHQrPSIiKT9ocjpncjtyZXR1cm4gbnVsbD09ZT90aGlzLnN0eWxlVHdlZW4odCxmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1MdCh0aGlzLHQpLG89KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCksTHQodGhpcyx0KSk7cmV0dXJuIGE9PT1vP251bGw6YT09PW4mJm89PT1yP2k6aT1lKG49YSxyPW8pfX0odCxyKSkub24oImVuZC5zdHlsZS4iK3QsTHIodCkpOiJmdW5jdGlvbiI9PXR5cGVvZiBlP3RoaXMuc3R5bGVUd2Vlbih0LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89THQodGhpcyx0KSxzPW4odGhpcyksYz1zKyIiO3JldHVybiBudWxsPT1zJiYodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxjPXM9THQodGhpcyx0KSksbz09PWM/bnVsbDpvPT09ciYmYz09PWk/YTooaT1jLGE9ZShyPW8scykpfX0odCxyLHlyKHRoaXMsInN0eWxlLiIrdCxlKSkpLmVhY2goZnVuY3Rpb24odCxlKXt2YXIgbixyLGksYSxvPSJzdHlsZS4iK2Uscz0iZW5kLiIrbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYz10cih0aGlzLHQpLHU9Yy5vbixsPW51bGw9PWMudmFsdWVbb10/YXx8KGE9THIoZSkpOnZvaWQgMDt1PT09biYmaT09PWx8fChyPShuPXUpLmNvcHkoKSkub24ocyxpPWwpLGMub249cn19KHRoaXMuX2lkLHQpKTp0aGlzLnN0eWxlVHdlZW4odCxmdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhPW4rIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89THQodGhpcyx0KTtyZXR1cm4gbz09PWE/bnVsbDpvPT09cj9pOmk9ZShyPW8sbil9fSh0LHIsZSksbikub24oImVuZC5zdHlsZS4iK3QsbnVsbCl9LHN0eWxlVHdlZW46ZnVuY3Rpb24odCxlLG4pe3ZhciByPSJzdHlsZS4iKyh0Kz0iIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihyPXRoaXMudHdlZW4ocikpJiZyLl92YWx1ZTtpZihudWxsPT1lKXJldHVybiB0aGlzLnR3ZWVuKHIsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKHIsUnIodCxlLG51bGw9PW4/IiI6bikpfSx0ZXh0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0IiwiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT8iIjplfX0oeXIodGhpcywidGV4dCIsdCkpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19KG51bGw9PXQ/IiI6dCsiIikpfSx0ZXh0VHdlZW46ZnVuY3Rpb24odCl7dmFyIGU9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4oZT10aGlzLnR3ZWVuKGUpKSYmZS5fdmFsdWU7aWYobnVsbD09dClyZXR1cm4gdGhpcy50d2VlbihlLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihlLFByKHQpKX0scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLCh0PXRoaXMuX2lkLGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgbiBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrbiE9PXQpcmV0dXJuO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9KSk7dmFyIHR9LHR3ZWVuOmZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5faWQ7aWYodCs9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIHIsaT1lcih0aGlzLm5vZGUoKSxuKS50d2VlbixhPTAsbz1pLmxlbmd0aDthPG87KythKWlmKChyPWlbYV0pLm5hbWU9PT10KXJldHVybiByLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWU/ZHI6cHIpKG4sdCxlKSl9LGRlbGF5OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIHQ/U3I6QXIpKGUsdCkpOmVyKHRoaXMubm9kZSgpLGUpLmRlbGF5fSxkdXJhdGlvbjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P01yOk9yKShlLHQpKTplcih0aGlzLm5vZGUoKSxlKS5kdXJhdGlvbn0sZWFzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goQnIoZSx0KSk6ZXIodGhpcy5ub2RlKCksZSkuZWFzZX0sZW5kOmZ1bmN0aW9uKCl7dmFyIHQsZSxuPXRoaXMscj1uLl9pZCxpPW4uc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oYSxvKXt2YXIgcz17dmFsdWU6b30sYz17dmFsdWU6ZnVuY3Rpb24oKXswPT0tLWkmJmEoKX19O24uZWFjaCgoZnVuY3Rpb24oKXt2YXIgbj10cih0aGlzLHIpLGk9bi5vbjtpIT09dCYmKChlPSh0PWkpLmNvcHkoKSkuXy5jYW5jZWwucHVzaChzKSxlLl8uaW50ZXJydXB0LnB1c2gocyksZS5fLmVuZC5wdXNoKGMpKSxuLm9uPWV9KSl9KSl9fTt2YXIgSHI9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOlZyfTtmdW5jdGlvbiBHcih0LGUpe2Zvcih2YXIgbjshKG49dC5fX3RyYW5zaXRpb24pfHwhKG49bltlXSk7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybiBIci50aW1lPXpuKCksSHI7cmV0dXJuIG59X2UucHJvdG90eXBlLmludGVycnVwdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe29yKHRoaXMsdCl9KSl9LF9lLnByb3RvdHlwZS50cmFuc2l0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlLG47dCBpbnN0YW5jZW9mIFlyPyhlPXQuX2lkLHQ9dC5fbmFtZSk6KGU9VXIoKSwobj1IcikudGltZT16bigpLHQ9bnVsbD09dD9udWxsOnQrIiIpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxhPTA7YTxpOysrYSlmb3IodmFyIG8scz1yW2FdLGM9cy5sZW5ndGgsdT0wO3U8YzsrK3UpKG89c1t1XSkmJktuKG8sdCxlLHUscyxufHxHcihvLGUpKTtyZXR1cm4gbmV3IFlyKHIsdGhpcy5fcGFyZW50cyx0LGUpfTt2YXIgWHI9W251bGxdLFpyPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpPXQuX190cmFuc2l0aW9uO2lmKGkpZm9yKHIgaW4gZT1udWxsPT1lP251bGw6ZSsiIixpKWlmKChuPWlbcl0pLnN0YXRlPjEmJm4ubmFtZT09PWUpcmV0dXJuIG5ldyBZcihbW3RdXSxYcixlLCtyKTtyZXR1cm4gbnVsbH0sUXI9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxLcj1mdW5jdGlvbih0LGUsbil7dGhpcy50YXJnZXQ9dCx0aGlzLnR5cGU9ZSx0aGlzLnNlbGVjdGlvbj1ufTtmdW5jdGlvbiBKcigpe2NlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciB0aT1mdW5jdGlvbigpe2NlLnByZXZlbnREZWZhdWx0KCksY2Uuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9LGVpPXtuYW1lOiJkcmFnIn0sbmk9e25hbWU6InNwYWNlIn0scmk9e25hbWU6ImhhbmRsZSJ9LGlpPXtuYW1lOiJjZW50ZXIifTtmdW5jdGlvbiBhaSh0KXtyZXR1cm5bK3RbMF0sK3RbMV1dfWZ1bmN0aW9uIG9pKHQpe3JldHVyblthaSh0WzBdKSxhaSh0WzFdKV19ZnVuY3Rpb24gc2kodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBCbihlLGNlLnRvdWNoZXMsdCl9fXZhciBjaT17bmFtZToieCIsaGFuZGxlczpbInciLCJlIl0ubWFwKGdpKSxpbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10P251bGw6W1srdFswXSxlWzBdWzFdXSxbK3RbMV0sZVsxXVsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlt0WzBdWzBdLHRbMV1bMF1dfX0sdWk9e25hbWU6InkiLGhhbmRsZXM6WyJuIiwicyJdLm1hcChnaSksaW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD9udWxsOltbZVswXVswXSwrdFswXV0sW2VbMV1bMF0sK3RbMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0JiZbdFswXVsxXSx0WzFdWzFdXX19LGxpPXtuYW1lOiJ4eSIsaGFuZGxlczpbIm4iLCJ3IiwiZSIsInMiLCJudyIsIm5lIiwic3ciLCJzZSJdLm1hcChnaSksaW5wdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/bnVsbDpvaSh0KX0sb3V0cHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0fX0saGk9e292ZXJsYXk6ImNyb3NzaGFpciIsc2VsZWN0aW9uOiJtb3ZlIixuOiJucy1yZXNpemUiLGU6ImV3LXJlc2l6ZSIsczoibnMtcmVzaXplIix3OiJldy1yZXNpemUiLG53OiJud3NlLXJlc2l6ZSIsbmU6Im5lc3ctcmVzaXplIixzZToibndzZS1yZXNpemUiLHN3OiJuZXN3LXJlc2l6ZSJ9LGZpPXtlOiJ3Iix3OiJlIixudzoibmUiLG5lOiJudyIsc2U6InN3Iixzdzoic2UifSxkaT17bjoicyIsczoibiIsbnc6InN3IixuZToic2UiLHNlOiJuZSIsc3c6Im53In0scGk9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOm51bGwsZToxLHM6bnVsbCx3Oi0xLG53Oi0xLG5lOjEsc2U6MSxzdzotMX0seWk9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOi0xLGU6bnVsbCxzOjEsdzpudWxsLG53Oi0xLG5lOi0xLHNlOjEsc3c6MX07ZnVuY3Rpb24gZ2kodCl7cmV0dXJue3R5cGU6dH19ZnVuY3Rpb24gdmkoKXtyZXR1cm4hY2UuY3RybEtleSYmIWNlLmJ1dHRvbn1mdW5jdGlvbiBtaSgpe3ZhciB0PXRoaXMub3duZXJTVkdFbGVtZW50fHx0aGlzO3JldHVybiB0Lmhhc0F0dHJpYnV0ZSgidmlld0JveCIpP1tbKHQ9dC52aWV3Qm94LmJhc2VWYWwpLngsdC55XSxbdC54K3Qud2lkdGgsdC55K3QuaGVpZ2h0XV06W1swLDBdLFt0LndpZHRoLmJhc2VWYWwudmFsdWUsdC5oZWlnaHQuYmFzZVZhbC52YWx1ZV1dfWZ1bmN0aW9uIGJpKCl7cmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50c3x8Im9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIHhpKHQpe2Zvcig7IXQuX19icnVzaDspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuO3JldHVybiB0Ll9fYnJ1c2h9ZnVuY3Rpb24gX2kodCl7cmV0dXJuIHRbMF1bMF09PT10WzFdWzBdfHx0WzBdWzFdPT09dFsxXVsxXX1mdW5jdGlvbiBraSh0KXt2YXIgZT10Ll9fYnJ1c2g7cmV0dXJuIGU/ZS5kaW0ub3V0cHV0KGUuc2VsZWN0aW9uKTpudWxsfWZ1bmN0aW9uIHdpKCl7cmV0dXJuIENpKGNpKX1mdW5jdGlvbiBFaSgpe3JldHVybiBDaSh1aSl9dmFyIFRpPWZ1bmN0aW9uKCl7cmV0dXJuIENpKGxpKX07ZnVuY3Rpb24gQ2kodCl7dmFyIGUsbj1taSxyPXZpLGk9YmksYT0hMCxvPWx0KCJzdGFydCIsImJydXNoIiwiZW5kIikscz02O2Z1bmN0aW9uIGMoZSl7dmFyIG49ZS5wcm9wZXJ0eSgiX19icnVzaCIseSkuc2VsZWN0QWxsKCIub3ZlcmxheSIpLmRhdGEoW2dpKCJvdmVybGF5IildKTtuLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJvdmVybGF5IikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5hdHRyKCJjdXJzb3IiLGhpLm92ZXJsYXkpLm1lcmdlKG4pLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9eGkodGhpcykuZXh0ZW50O2tlKHRoaXMpLmF0dHIoIngiLHRbMF1bMF0pLmF0dHIoInkiLHRbMF1bMV0pLmF0dHIoIndpZHRoIix0WzFdWzBdLXRbMF1bMF0pLmF0dHIoImhlaWdodCIsdFsxXVsxXS10WzBdWzFdKX0pKSxlLnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLmRhdGEoW2dpKCJzZWxlY3Rpb24iKV0pLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJzZWxlY3Rpb24iKS5hdHRyKCJjdXJzb3IiLGhpLnNlbGVjdGlvbikuYXR0cigiZmlsbCIsIiM3NzciKS5hdHRyKCJmaWxsLW9wYWNpdHkiLC4zKS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpO3ZhciByPWUuc2VsZWN0QWxsKCIuaGFuZGxlIikuZGF0YSh0LmhhbmRsZXMsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnR5cGV9KSk7ci5leGl0KCkucmVtb3ZlKCksci5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7cmV0dXJuImhhbmRsZSBoYW5kbGUtLSIrdC50eXBlfSkpLmF0dHIoImN1cnNvciIsKGZ1bmN0aW9uKHQpe3JldHVybiBoaVt0LnR5cGVdfSkpLGUuZWFjaCh1KS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikub24oIm1vdXNlZG93bi5icnVzaCIsZikuZmlsdGVyKGkpLm9uKCJ0b3VjaHN0YXJ0LmJydXNoIixmKS5vbigidG91Y2htb3ZlLmJydXNoIixkKS5vbigidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2giLHApLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiB1KCl7dmFyIHQ9a2UodGhpcyksZT14aSh0aGlzKS5zZWxlY3Rpb247ZT8odC5zZWxlY3RBbGwoIi5zZWxlY3Rpb24iKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIsZVswXVswXSkuYXR0cigieSIsZVswXVsxXSkuYXR0cigid2lkdGgiLGVbMV1bMF0tZVswXVswXSkuYXR0cigiaGVpZ2h0IixlWzFdWzFdLWVbMF1bMV0pLHQuc2VsZWN0QWxsKCIuaGFuZGxlIikuc3R5bGUoImRpc3BsYXkiLG51bGwpLmF0dHIoIngiLChmdW5jdGlvbih0KXtyZXR1cm4iZSI9PT10LnR5cGVbdC50eXBlLmxlbmd0aC0xXT9lWzFdWzBdLXMvMjplWzBdWzBdLXMvMn0pKS5hdHRyKCJ5IiwoZnVuY3Rpb24odCl7cmV0dXJuInMiPT09dC50eXBlWzBdP2VbMV1bMV0tcy8yOmVbMF1bMV0tcy8yfSkpLmF0dHIoIndpZHRoIiwoZnVuY3Rpb24odCl7cmV0dXJuIm4iPT09dC50eXBlfHwicyI9PT10LnR5cGU/ZVsxXVswXS1lWzBdWzBdK3M6c30pKS5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4iZSI9PT10LnR5cGV8fCJ3Ij09PXQudHlwZT9lWzFdWzFdLWVbMF1bMV0rczpzfSkpKTp0LnNlbGVjdEFsbCgiLnNlbGVjdGlvbiwuaGFuZGxlIikuc3R5bGUoImRpc3BsYXkiLCJub25lIikuYXR0cigieCIsbnVsbCkuYXR0cigieSIsbnVsbCkuYXR0cigid2lkdGgiLG51bGwpLmF0dHIoImhlaWdodCIsbnVsbCl9ZnVuY3Rpb24gbCh0LGUsbil7cmV0dXJuIW4mJnQuX19icnVzaC5lbWl0dGVyfHxuZXcgaCh0LGUpfWZ1bmN0aW9uIGgodCxlKXt0aGlzLnRoYXQ9dCx0aGlzLmFyZ3M9ZSx0aGlzLnN0YXRlPXQuX19icnVzaCx0aGlzLmFjdGl2ZT0wfWZ1bmN0aW9uIGYoKXtpZigoIWV8fGNlLnRvdWNoZXMpJiZyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIG4saSxvLHMsYyxoLGYsZCxwLHksZyx2PXRoaXMsbT1jZS50YXJnZXQuX19kYXRhX18udHlwZSxiPSJzZWxlY3Rpb24iPT09KGEmJmNlLm1ldGFLZXk/bT0ib3ZlcmxheSI6bSk/ZWk6YSYmY2UuYWx0S2V5P2lpOnJpLHg9dD09PXVpP251bGw6cGlbbV0sXz10PT09Y2k/bnVsbDp5aVttXSxrPXhpKHYpLHc9ay5leHRlbnQsRT1rLnNlbGVjdGlvbixUPXdbMF1bMF0sQz13WzBdWzFdLFM9d1sxXVswXSxBPXdbMV1bMV0sTT0wLE89MCxCPXgmJl8mJmEmJmNlLnNoaWZ0S2V5LE49Y2UudG91Y2hlcz9zaShjZS5jaGFuZ2VkVG91Y2hlc1swXS5pZGVudGlmaWVyKTpObixEPU4odiksTD1ELEk9bCh2LGFyZ3VtZW50cywhMCkuYmVmb3Jlc3RhcnQoKTsib3ZlcmxheSI9PT1tPyhFJiYocD0hMCksay5zZWxlY3Rpb249RT1bW249dD09PXVpP1Q6RFswXSxvPXQ9PT1jaT9DOkRbMV1dLFtjPXQ9PT11aT9TOm4sZj10PT09Y2k/QTpvXV0pOihuPUVbMF1bMF0sbz1FWzBdWzFdLGM9RVsxXVswXSxmPUVbMV1bMV0pLGk9bixzPW8saD1jLGQ9Zjt2YXIgUj1rZSh2KS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSxGPVIuc2VsZWN0QWxsKCIub3ZlcmxheSIpLmF0dHIoImN1cnNvciIsaGlbbV0pO2lmKGNlLnRvdWNoZXMpSS5tb3ZlZD1qLEkuZW5kZWQ9ejtlbHNle3ZhciBQPWtlKGNlLnZpZXcpLm9uKCJtb3VzZW1vdmUuYnJ1c2giLGosITApLm9uKCJtb3VzZXVwLmJydXNoIix6LCEwKTthJiZQLm9uKCJrZXlkb3duLmJydXNoIixVLCEwKS5vbigia2V5dXAuYnJ1c2giLCQsITApLFRlKGNlLnZpZXcpfUpyKCksb3IodiksdS5jYWxsKHYpLEkuc3RhcnQoKX1mdW5jdGlvbiBqKCl7dmFyIHQ9Tih2KTshQnx8eXx8Z3x8KE1hdGguYWJzKHRbMF0tTFswXSk+TWF0aC5hYnModFsxXS1MWzFdKT9nPSEwOnk9ITApLEw9dCxwPSEwLHRpKCksWSgpfWZ1bmN0aW9uIFkoKXt2YXIgdDtzd2l0Y2goTT1MWzBdLURbMF0sTz1MWzFdLURbMV0sYil7Y2FzZSBuaTpjYXNlIGVpOngmJihNPU1hdGgubWF4KFQtbixNYXRoLm1pbihTLWMsTSkpLGk9bitNLGg9YytNKSxfJiYoTz1NYXRoLm1heChDLW8sTWF0aC5taW4oQS1mLE8pKSxzPW8rTyxkPWYrTyk7YnJlYWs7Y2FzZSByaTp4PDA/KE09TWF0aC5tYXgoVC1uLE1hdGgubWluKFMtbixNKSksaT1uK00saD1jKTp4PjAmJihNPU1hdGgubWF4KFQtYyxNYXRoLm1pbihTLWMsTSkpLGk9bixoPWMrTSksXzwwPyhPPU1hdGgubWF4KEMtbyxNYXRoLm1pbihBLW8sTykpLHM9bytPLGQ9Zik6Xz4wJiYoTz1NYXRoLm1heChDLWYsTWF0aC5taW4oQS1mLE8pKSxzPW8sZD1mK08pO2JyZWFrO2Nhc2UgaWk6eCYmKGk9TWF0aC5tYXgoVCxNYXRoLm1pbihTLG4tTSp4KSksaD1NYXRoLm1heChULE1hdGgubWluKFMsYytNKngpKSksXyYmKHM9TWF0aC5tYXgoQyxNYXRoLm1pbihBLG8tTypfKSksZD1NYXRoLm1heChDLE1hdGgubWluKEEsZitPKl8pKSl9aDxpJiYoeCo9LTEsdD1uLG49YyxjPXQsdD1pLGk9aCxoPXQsbSBpbiBmaSYmRi5hdHRyKCJjdXJzb3IiLGhpW209ZmlbbV1dKSksZDxzJiYoXyo9LTEsdD1vLG89ZixmPXQsdD1zLHM9ZCxkPXQsbSBpbiBkaSYmRi5hdHRyKCJjdXJzb3IiLGhpW209ZGlbbV1dKSksay5zZWxlY3Rpb24mJihFPWsuc2VsZWN0aW9uKSx5JiYoaT1FWzBdWzBdLGg9RVsxXVswXSksZyYmKHM9RVswXVsxXSxkPUVbMV1bMV0pLEVbMF1bMF09PT1pJiZFWzBdWzFdPT09cyYmRVsxXVswXT09PWgmJkVbMV1bMV09PT1kfHwoay5zZWxlY3Rpb249W1tpLHNdLFtoLGRdXSx1LmNhbGwodiksSS5icnVzaCgpKX1mdW5jdGlvbiB6KCl7aWYoSnIoKSxjZS50b3VjaGVzKXtpZihjZS50b3VjaGVzLmxlbmd0aClyZXR1cm47ZSYmY2xlYXJUaW1lb3V0KGUpLGU9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtlPW51bGx9KSw1MDApfWVsc2UgQ2UoY2UudmlldyxwKSxQLm9uKCJrZXlkb3duLmJydXNoIGtleXVwLmJydXNoIG1vdXNlbW92ZS5icnVzaCBtb3VzZXVwLmJydXNoIixudWxsKTtSLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksRi5hdHRyKCJjdXJzb3IiLGhpLm92ZXJsYXkpLGsuc2VsZWN0aW9uJiYoRT1rLnNlbGVjdGlvbiksX2koRSkmJihrLnNlbGVjdGlvbj1udWxsLHUuY2FsbCh2KSksSS5lbmQoKX1mdW5jdGlvbiBVKCl7c3dpdGNoKGNlLmtleUNvZGUpe2Nhc2UgMTY6Qj14JiZfO2JyZWFrO2Nhc2UgMTg6Yj09PXJpJiYoeCYmKGM9aC1NKngsbj1pK00qeCksXyYmKGY9ZC1PKl8sbz1zK08qXyksYj1paSxZKCkpO2JyZWFrO2Nhc2UgMzI6YiE9PXJpJiZiIT09aWl8fCh4PDA/Yz1oLU06eD4wJiYobj1pLU0pLF88MD9mPWQtTzpfPjAmJihvPXMtTyksYj1uaSxGLmF0dHIoImN1cnNvciIsaGkuc2VsZWN0aW9uKSxZKCkpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufXRpKCl9ZnVuY3Rpb24gJCgpe3N3aXRjaChjZS5rZXlDb2RlKXtjYXNlIDE2OkImJih5PWc9Qj0hMSxZKCkpO2JyZWFrO2Nhc2UgMTg6Yj09PWlpJiYoeDwwP2M9aDp4PjAmJihuPWkpLF88MD9mPWQ6Xz4wJiYobz1zKSxiPXJpLFkoKSk7YnJlYWs7Y2FzZSAzMjpiPT09bmkmJihjZS5hbHRLZXk/KHgmJihjPWgtTSp4LG49aStNKngpLF8mJihmPWQtTypfLG89cytPKl8pLGI9aWkpOih4PDA/Yz1oOng+MCYmKG49aSksXzwwP2Y9ZDpfPjAmJihvPXMpLGI9cmkpLEYuYXR0cigiY3Vyc29yIixoaVttXSksWSgpKTticmVhaztkZWZhdWx0OnJldHVybn10aSgpfX1mdW5jdGlvbiBkKCl7bCh0aGlzLGFyZ3VtZW50cykubW92ZWQoKX1mdW5jdGlvbiBwKCl7bCh0aGlzLGFyZ3VtZW50cykuZW5kZWQoKX1mdW5jdGlvbiB5KCl7dmFyIGU9dGhpcy5fX2JydXNofHx7c2VsZWN0aW9uOm51bGx9O3JldHVybiBlLmV4dGVudD1vaShuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksZS5kaW09dCxlfXJldHVybiBjLm1vdmU9ZnVuY3Rpb24oZSxuKXtlLnNlbGVjdGlvbj9lLm9uKCJzdGFydC5icnVzaCIsKGZ1bmN0aW9uKCl7bCh0aGlzLGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKS5zdGFydCgpfSkpLm9uKCJpbnRlcnJ1cHQuYnJ1c2ggZW5kLmJydXNoIiwoZnVuY3Rpb24oKXtsKHRoaXMsYXJndW1lbnRzKS5lbmQoKX0pKS50d2VlbigiYnJ1c2giLChmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1lLl9fYnJ1c2gsaT1sKGUsYXJndW1lbnRzKSxhPXIuc2VsZWN0aW9uLG89dC5pbnB1dCgiZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpuLHIuZXh0ZW50KSxzPUFuKGEsbyk7ZnVuY3Rpb24gYyh0KXtyLnNlbGVjdGlvbj0xPT09dCYmbnVsbD09PW8/bnVsbDpzKHQpLHUuY2FsbChlKSxpLmJydXNoKCl9cmV0dXJuIG51bGwhPT1hJiZudWxsIT09bz9jOmMoMSl9KSk6ZS5lYWNoKChmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHMsaT1lLl9fYnJ1c2gsYT10LmlucHV0KCJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkoZSxyKTpuLGkuZXh0ZW50KSxvPWwoZSxyKS5iZWZvcmVzdGFydCgpO29yKGUpLGkuc2VsZWN0aW9uPW51bGw9PT1hP251bGw6YSx1LmNhbGwoZSksby5zdGFydCgpLmJydXNoKCkuZW5kKCl9KSl9LGMuY2xlYXI9ZnVuY3Rpb24odCl7Yy5tb3ZlKHQsbnVsbCl9LGgucHJvdG90eXBlPXtiZWZvcmVzdGFydDpmdW5jdGlvbigpe3JldHVybiAxPT0rK3RoaXMuYWN0aXZlJiYodGhpcy5zdGF0ZS5lbWl0dGVyPXRoaXMsdGhpcy5zdGFydGluZz0hMCksdGhpc30sc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFydGluZz8odGhpcy5zdGFydGluZz0hMSx0aGlzLmVtaXQoInN0YXJ0IikpOnRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxicnVzaDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVtaXQoImJydXNoIiksdGhpc30sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PS0tdGhpcy5hY3RpdmUmJihkZWxldGUgdGhpcy5zdGF0ZS5lbWl0dGVyLHRoaXMuZW1pdCgiZW5kIikpLHRoaXN9LGVtaXQ6ZnVuY3Rpb24oZSl7cGUobmV3IEtyKGMsZSx0Lm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLG8uYXBwbHksbyxbZSx0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fSxjLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlFyKG9pKHQpKSxjKTpufSxjLmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlFyKCEhdCksYyk6cn0sYy50b3VjaGFibGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpRcighIXQpLGMpOml9LGMuaGFuZGxlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rdCxjKTpzfSxjLmtleU1vZGlmaWVycz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0hIXQsYyk6YX0sYy5vbj1mdW5jdGlvbigpe3ZhciB0PW8ub24uYXBwbHkobyxhcmd1bWVudHMpO3JldHVybiB0PT09bz9jOnR9LGN9dmFyIFNpPU1hdGguY29zLEFpPU1hdGguc2luLE1pPU1hdGguUEksT2k9TWkvMixCaT0yKk1pLE5pPU1hdGgubWF4O2Z1bmN0aW9uIERpKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3JldHVybiB0KGUuc291cmNlLnZhbHVlK2UudGFyZ2V0LnZhbHVlLG4uc291cmNlLnZhbHVlK24udGFyZ2V0LnZhbHVlKX19dmFyIExpPWZ1bmN0aW9uKCl7dmFyIHQ9MCxlPW51bGwsbj1udWxsLHI9bnVsbDtmdW5jdGlvbiBpKGkpe3ZhciBhLG8scyxjLHUsbCxoPWkubGVuZ3RoLGY9W10sZD1rKGgpLHA9W10seT1bXSxnPXkuZ3JvdXBzPW5ldyBBcnJheShoKSx2PW5ldyBBcnJheShoKmgpO2ZvcihhPTAsdT0tMTsrK3U8aDspe2ZvcihvPTAsbD0tMTsrK2w8aDspbys9aVt1XVtsXTtmLnB1c2gobykscC5wdXNoKGsoaCkpLGErPW99Zm9yKGUmJmQuc29ydCgoZnVuY3Rpb24odCxuKXtyZXR1cm4gZShmW3RdLGZbbl0pfSkpLG4mJnAuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXt0LnNvcnQoKGZ1bmN0aW9uKHQscil7cmV0dXJuIG4oaVtlXVt0XSxpW2VdW3JdKX0pKX0pKSxjPShhPU5pKDAsQmktdCpoKS9hKT90OkJpL2gsbz0wLHU9LTE7Kyt1PGg7KXtmb3Iocz1vLGw9LTE7KytsPGg7KXt2YXIgbT1kW3VdLGI9cFttXVtsXSx4PWlbbV1bYl0sXz1vLHc9bys9eCphO3ZbYipoK21dPXtpbmRleDptLHN1YmluZGV4OmIsc3RhcnRBbmdsZTpfLGVuZEFuZ2xlOncsdmFsdWU6eH19Z1ttXT17aW5kZXg6bSxzdGFydEFuZ2xlOnMsZW5kQW5nbGU6byx2YWx1ZTpmW21dfSxvKz1jfWZvcih1PS0xOysrdTxoOylmb3IobD11LTE7KytsPGg7KXt2YXIgRT12W2wqaCt1XSxUPXZbdSpoK2xdOyhFLnZhbHVlfHxULnZhbHVlKSYmeS5wdXNoKEUudmFsdWU8VC52YWx1ZT97c291cmNlOlQsdGFyZ2V0OkV9Ontzb3VyY2U6RSx0YXJnZXQ6VH0pfXJldHVybiByP3kuc29ydChyKTp5fXJldHVybiBpLnBhZEFuZ2xlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PU5pKDAsZSksaSk6dH0saS5zb3J0R3JvdXBzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsaSk6ZX0saS5zb3J0U3ViZ3JvdXBzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsaSk6bn0saS5zb3J0Q2hvcmRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P3I9bnVsbDoocj1EaSh0KSkuXz10LGkpOnImJnIuX30saX0sSWk9QXJyYXkucHJvdG90eXBlLnNsaWNlLFJpPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sRmk9TWF0aC5QSSxQaT0yKkZpLGppPVBpLTFlLTY7ZnVuY3Rpb24gWWkoKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiB6aSgpe3JldHVybiBuZXcgWWl9WWkucHJvdG90eXBlPXppLnByb3RvdHlwZT17Y29uc3RydWN0b3I6WWksbW92ZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuX3gxJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJMIisodGhpcy5feDE9K3QpKyIsIisodGhpcy5feTE9K2UpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxuLHIpe3RoaXMuXys9IlEiKyArdCsiLCIrICtlKyIsIisodGhpcy5feDE9K24pKyIsIisodGhpcy5feTE9K3IpfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxuLHIsaSxhKXt0aGlzLl8rPSJDIisgK3QrIiwiKyArZSsiLCIrICtuKyIsIisgK3IrIiwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rYSl9LGFyY1RvOmZ1bmN0aW9uKHQsZSxuLHIsaSl7dD0rdCxlPStlLG49K24scj0rcixpPStpO3ZhciBhPXRoaXMuX3gxLG89dGhpcy5feTEscz1uLXQsYz1yLWUsdT1hLXQsbD1vLWUsaD11KnUrbCpsO2lmKGk8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIitpKTtpZihudWxsPT09dGhpcy5feDEpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPXQpKyIsIisodGhpcy5feTE9ZSk7ZWxzZSBpZihoPjFlLTYpaWYoTWF0aC5hYnMobCpzLWMqdSk+MWUtNiYmaSl7dmFyIGY9bi1hLGQ9ci1vLHA9cypzK2MqYyx5PWYqZitkKmQsZz1NYXRoLnNxcnQocCksdj1NYXRoLnNxcnQoaCksbT1pKk1hdGgudGFuKChGaS1NYXRoLmFjb3MoKHAraC15KS8oMipnKnYpKSkvMiksYj1tL3YseD1tL2c7TWF0aC5hYnMoYi0xKT4xZS02JiYodGhpcy5fKz0iTCIrKHQrYip1KSsiLCIrKGUrYipsKSksdGhpcy5fKz0iQSIraSsiLCIraSsiLDAsMCwiKyArKGwqZj51KmQpKyIsIisodGhpcy5feDE9dCt4KnMpKyIsIisodGhpcy5feTE9ZSt4KmMpfWVsc2UgdGhpcy5fKz0iTCIrKHRoaXMuX3gxPXQpKyIsIisodGhpcy5feTE9ZSk7ZWxzZTt9LGFyYzpmdW5jdGlvbih0LGUsbixyLGksYSl7dD0rdCxlPStlLGE9ISFhO3ZhciBvPShuPStuKSpNYXRoLmNvcyhyKSxzPW4qTWF0aC5zaW4ociksYz10K28sdT1lK3MsbD0xXmEsaD1hP3ItaTppLXI7aWYobjwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK24pO251bGw9PT10aGlzLl94MT90aGlzLl8rPSJNIitjKyIsIit1OihNYXRoLmFicyh0aGlzLl94MS1jKT4xZS02fHxNYXRoLmFicyh0aGlzLl95MS11KT4xZS02KSYmKHRoaXMuXys9IkwiK2MrIiwiK3UpLG4mJihoPDAmJihoPWglUGkrUGkpLGg+amk/dGhpcy5fKz0iQSIrbisiLCIrbisiLDAsMSwiK2wrIiwiKyh0LW8pKyIsIisoZS1zKSsiQSIrbisiLCIrbisiLDAsMSwiK2wrIiwiKyh0aGlzLl94MT1jKSsiLCIrKHRoaXMuX3kxPXUpOmg+MWUtNiYmKHRoaXMuXys9IkEiK24rIiwiK24rIiwwLCIrICsoaD49RmkpKyIsIitsKyIsIisodGhpcy5feDE9dCtuKk1hdGguY29zKGkpKSsiLCIrKHRoaXMuX3kxPWUrbipNYXRoLnNpbihpKSkpKX0scmVjdDpmdW5jdGlvbih0LGUsbixyKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K3QpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2UpKyJoIisgK24rInYiKyArcisiaCIrLW4rIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTt2YXIgVWk9emk7ZnVuY3Rpb24gJGkodCl7cmV0dXJuIHQuc291cmNlfWZ1bmN0aW9uIHFpKHQpe3JldHVybiB0LnRhcmdldH1mdW5jdGlvbiBXaSh0KXtyZXR1cm4gdC5yYWRpdXN9ZnVuY3Rpb24gVmkodCl7cmV0dXJuIHQuc3RhcnRBbmdsZX1mdW5jdGlvbiBIaSh0KXtyZXR1cm4gdC5lbmRBbmdsZX12YXIgR2k9ZnVuY3Rpb24oKXt2YXIgdD0kaSxlPXFpLG49V2kscj1WaSxpPUhpLGE9bnVsbDtmdW5jdGlvbiBvKCl7dmFyIG8scz1JaS5jYWxsKGFyZ3VtZW50cyksYz10LmFwcGx5KHRoaXMscyksdT1lLmFwcGx5KHRoaXMscyksbD0rbi5hcHBseSh0aGlzLChzWzBdPWMscykpLGg9ci5hcHBseSh0aGlzLHMpLU9pLGY9aS5hcHBseSh0aGlzLHMpLU9pLGQ9bCpTaShoKSxwPWwqQWkoaCkseT0rbi5hcHBseSh0aGlzLChzWzBdPXUscykpLGc9ci5hcHBseSh0aGlzLHMpLU9pLHY9aS5hcHBseSh0aGlzLHMpLU9pO2lmKGF8fChhPW89VWkoKSksYS5tb3ZlVG8oZCxwKSxhLmFyYygwLDAsbCxoLGYpLGg9PT1nJiZmPT09dnx8KGEucXVhZHJhdGljQ3VydmVUbygwLDAseSpTaShnKSx5KkFpKGcpKSxhLmFyYygwLDAseSxnLHYpKSxhLnF1YWRyYXRpY0N1cnZlVG8oMCwwLGQscCksYS5jbG9zZVBhdGgoKSxvKXJldHVybiBhPW51bGwsbysiInx8bnVsbH1yZXR1cm4gby5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpSaSgrdCksbyk6bn0sby5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UmkoK3QpLG8pOnJ9LG8uZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpSaSgrdCksbyk6aX0sby5zb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxvKTp0fSxvLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG8pOmV9LG8uY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1udWxsPT10P251bGw6dCxvKTphfSxvfTtmdW5jdGlvbiBYaSgpe31mdW5jdGlvbiBaaSh0LGUpe3ZhciBuPW5ldyBYaTtpZih0IGluc3RhbmNlb2YgWGkpdC5lYWNoKChmdW5jdGlvbih0LGUpe24uc2V0KGUsdCl9KSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgcixpPS0xLGE9dC5sZW5ndGg7aWYobnVsbD09ZSlmb3IoOysraTxhOyluLnNldChpLHRbaV0pO2Vsc2UgZm9yKDsrK2k8YTspbi5zZXQoZShyPXRbaV0saSx0KSxyKX1lbHNlIGlmKHQpZm9yKHZhciBvIGluIHQpbi5zZXQobyx0W29dKTtyZXR1cm4gbn1YaS5wcm90b3R5cGU9WmkucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpYaSxoYXM6ZnVuY3Rpb24odCl7cmV0dXJuIiQiK3QgaW4gdGhpc30sZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzWyIkIit0XX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXNbIiQiK3RdPWUsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPSIkIit0O3JldHVybiBlIGluIHRoaXMmJmRlbGV0ZSB0aGlzW2VdfSxjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKSIkIj09PXRbMF0mJmRlbGV0ZSB0aGlzW3RdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdC5wdXNoKGUuc2xpY2UoMSkpO3JldHVybiB0fSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0LnB1c2godGhpc1tlXSk7cmV0dXJuIHR9LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0LnB1c2goe2tleTplLnNsaWNlKDEpLHZhbHVlOnRoaXNbZV19KTtyZXR1cm4gdH0sc2l6ZTpmdW5jdGlvbigpe3ZhciB0PTA7Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmKyt0O3JldHVybiB0fSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKWlmKCIkIj09PXRbMF0pcmV0dXJuITE7cmV0dXJuITB9LGVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdCh0aGlzW2VdLGUuc2xpY2UoMSksdGhpcyl9fTt2YXIgUWk9WmksS2k9ZnVuY3Rpb24oKXt2YXIgdCxlLG4scj1bXSxpPVtdO2Z1bmN0aW9uIGEobixpLG8scyl7aWYoaT49ci5sZW5ndGgpcmV0dXJuIG51bGwhPXQmJm4uc29ydCh0KSxudWxsIT1lP2Uobik6bjtmb3IodmFyIGMsdSxsLGg9LTEsZj1uLmxlbmd0aCxkPXJbaSsrXSxwPVFpKCkseT1vKCk7KytoPGY7KShsPXAuZ2V0KGM9ZCh1PW5baF0pKyIiKSk/bC5wdXNoKHUpOnAuc2V0KGMsW3VdKTtyZXR1cm4gcC5lYWNoKChmdW5jdGlvbih0LGUpe3MoeSxlLGEodCxpLG8scykpfSkpLHl9cmV0dXJuIG49e29iamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gYSh0LDAsSmksdGEpfSxtYXA6ZnVuY3Rpb24odCl7cmV0dXJuIGEodCwwLGVhLG5hKX0sZW50cmllczpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24gdChuLGEpe2lmKCsrYT5yLmxlbmd0aClyZXR1cm4gbjt2YXIgbyxzPWlbYS0xXTtyZXR1cm4gbnVsbCE9ZSYmYT49ci5sZW5ndGg/bz1uLmVudHJpZXMoKToobz1bXSxuLmVhY2goKGZ1bmN0aW9uKGUsbil7by5wdXNoKHtrZXk6bix2YWx1ZXM6dChlLGEpfSl9KSkpLG51bGwhPXM/by5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBzKHQua2V5LGUua2V5KX0pKTpvfShhKHQsMCxlYSxuYSksMCl9LGtleTpmdW5jdGlvbih0KXtyZXR1cm4gci5wdXNoKHQpLG59LHNvcnRLZXlzOmZ1bmN0aW9uKHQpe3JldHVybiBpW3IubGVuZ3RoLTFdPXQsbn0sc29ydFZhbHVlczpmdW5jdGlvbihlKXtyZXR1cm4gdD1lLG59LHJvbGx1cDpmdW5jdGlvbih0KXtyZXR1cm4gZT10LG59fX07ZnVuY3Rpb24gSmkoKXtyZXR1cm57fX1mdW5jdGlvbiB0YSh0LGUsbil7dFtlXT1ufWZ1bmN0aW9uIGVhKCl7cmV0dXJuIFFpKCl9ZnVuY3Rpb24gbmEodCxlLG4pe3Quc2V0KGUsbil9ZnVuY3Rpb24gcmEoKXt9dmFyIGlhPVFpLnByb3RvdHlwZTtmdW5jdGlvbiBhYSh0LGUpe3ZhciBuPW5ldyByYTtpZih0IGluc3RhbmNlb2YgcmEpdC5lYWNoKChmdW5jdGlvbih0KXtuLmFkZCh0KX0pKTtlbHNlIGlmKHQpe3ZhciByPS0xLGk9dC5sZW5ndGg7aWYobnVsbD09ZSlmb3IoOysrcjxpOyluLmFkZCh0W3JdKTtlbHNlIGZvcig7KytyPGk7KW4uYWRkKGUodFtyXSxyLHQpKX1yZXR1cm4gbn1yYS5wcm90b3R5cGU9YWEucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpyYSxoYXM6aWEuaGFzLGFkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpc1siJCIrKHQrPSIiKV09dCx0aGlzfSxyZW1vdmU6aWEucmVtb3ZlLGNsZWFyOmlhLmNsZWFyLHZhbHVlczppYS5rZXlzLHNpemU6aWEuc2l6ZSxlbXB0eTppYS5lbXB0eSxlYWNoOmlhLmVhY2h9O3ZhciBvYT1hYSxzYT1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIG4gaW4gdCllLnB1c2gobik7cmV0dXJuIGV9LGNhPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgbiBpbiB0KWUucHVzaCh0W25dKTtyZXR1cm4gZX0sdWE9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciBuIGluIHQpZS5wdXNoKHtrZXk6bix2YWx1ZTp0W25dfSk7cmV0dXJuIGV9LGxhPU1hdGguUEkvMTgwLGhhPTE4MC9NYXRoLlBJO2Z1bmN0aW9uIGZhKHQpe2lmKHQgaW5zdGFuY2VvZiB5YSlyZXR1cm4gbmV3IHlhKHQubCx0LmEsdC5iLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIHdhKXJldHVybiBFYSh0KTt0IGluc3RhbmNlb2YgR2V8fCh0PVZlKHQpKTt2YXIgZSxuLHI9YmEodC5yKSxpPWJhKHQuZyksYT1iYSh0LmIpLG89Z2EoKC4yMjI1MDQ1KnIrLjcxNjg3ODYqaSsuMDYwNjE2OSphKS8xKTtyZXR1cm4gcj09PWkmJmk9PT1hP2U9bj1vOihlPWdhKCguNDM2MDc0NypyKy4zODUwNjQ5KmkrLjE0MzA4MDQqYSkvLjk2NDIyKSxuPWdhKCguMDEzOTMyMipyKy4wOTcxMDQ1KmkrLjcxNDE3MzMqYSkvLjgyNTIxKSksbmV3IHlhKDExNipvLTE2LDUwMCooZS1vKSwyMDAqKG8tbiksdC5vcGFjaXR5KX1mdW5jdGlvbiBkYSh0LGUpe3JldHVybiBuZXcgeWEodCwwLDAsbnVsbD09ZT8xOmUpfWZ1bmN0aW9uIHBhKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9mYSh0KTpuZXcgeWEodCxlLG4sbnVsbD09cj8xOnIpfWZ1bmN0aW9uIHlhKHQsZSxuLHIpe3RoaXMubD0rdCx0aGlzLmE9K2UsdGhpcy5iPStuLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBnYSh0KXtyZXR1cm4gdD42LzI5Kig2LzI5KSooNi8yOSk/TWF0aC5wb3codCwxLzMpOnQvKDYvMjkqMyooNi8yOSkpKzQvMjl9ZnVuY3Rpb24gdmEodCl7cmV0dXJuIHQ+Ni8yOT90KnQqdDo2LzI5KjMqKDYvMjkpKih0LTQvMjkpfWZ1bmN0aW9uIG1hKHQpe3JldHVybiAyNTUqKHQ8PS4wMDMxMzA4PzEyLjkyKnQ6MS4wNTUqTWF0aC5wb3codCwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gYmEodCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24geGEodCl7aWYodCBpbnN0YW5jZW9mIHdhKXJldHVybiBuZXcgd2EodC5oLHQuYyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgeWF8fCh0PWZhKHQpKSwwPT09dC5hJiYwPT09dC5iKXJldHVybiBuZXcgd2EoTmFOLDA8dC5sJiZ0Lmw8MTAwPzA6TmFOLHQubCx0Lm9wYWNpdHkpO3ZhciBlPU1hdGguYXRhbjIodC5iLHQuYSkqaGE7cmV0dXJuIG5ldyB3YShlPDA/ZSszNjA6ZSxNYXRoLnNxcnQodC5hKnQuYSt0LmIqdC5iKSx0LmwsdC5vcGFjaXR5KX1mdW5jdGlvbiBfYSh0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/eGEodCk6bmV3IHdhKG4sZSx0LG51bGw9PXI/MTpyKX1mdW5jdGlvbiBrYSh0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/eGEodCk6bmV3IHdhKHQsZSxuLG51bGw9PXI/MTpyKX1mdW5jdGlvbiB3YSh0LGUsbixyKXt0aGlzLmg9K3QsdGhpcy5jPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gRWEodCl7aWYoaXNOYU4odC5oKSlyZXR1cm4gbmV3IHlhKHQubCwwLDAsdC5vcGFjaXR5KTt2YXIgZT10LmgqbGE7cmV0dXJuIG5ldyB5YSh0LmwsTWF0aC5jb3MoZSkqdC5jLE1hdGguc2luKGUpKnQuYyx0Lm9wYWNpdHkpfVNlKHlhLHBhLEFlKE1lLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHlhKHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgeWEodGhpcy5sLTE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD0odGhpcy5sKzE2KS8xMTYsZT1pc05hTih0aGlzLmEpP3Q6dCt0aGlzLmEvNTAwLG49aXNOYU4odGhpcy5iKT90OnQtdGhpcy5iLzIwMDtyZXR1cm4gbmV3IEdlKG1hKDMuMTMzODU2MSooZT0uOTY0MjIqdmEoZSkpLTEuNjE2ODY2NyoodD0xKnZhKHQpKS0uNDkwNjE0Nioobj0uODI1MjEqdmEobikpKSxtYSgtLjk3ODc2ODQqZSsxLjkxNjE0MTUqdCsuMDMzNDU0Km4pLG1hKC4wNzE5NDUzKmUtLjIyODk5MTQqdCsxLjQwNTI0MjcqbiksdGhpcy5vcGFjaXR5KX19KSksU2Uod2Esa2EsQWUoTWUse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgd2EodGhpcy5oLHRoaXMuYyx0aGlzLmwrMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB3YSh0aGlzLmgsdGhpcy5jLHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBFYSh0aGlzKS5yZ2IoKX19KSk7dmFyIFRhPS0uMjkyMjcsQ2E9LTEuNzg4NDUwMzgwNixTYT0zLjUxNzI5ODI0MzgsQWE9LS42NTU3NjM2NjY3OTk5OTk5O2Z1bmN0aW9uIE1hKHQpe2lmKHQgaW5zdGFuY2VvZiBCYSlyZXR1cm4gbmV3IEJhKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7dCBpbnN0YW5jZW9mIEdlfHwodD1WZSh0KSk7dmFyIGU9dC5yLzI1NSxuPXQuZy8yNTUscj10LmIvMjU1LGk9KEFhKnIrQ2EqZS1TYSpuKS8oQWErQ2EtU2EpLGE9ci1pLG89KDEuOTcyOTQqKG4taSktVGEqYSkvLS45MDY0OSxzPU1hdGguc3FydChvKm8rYSphKS8oMS45NzI5NCppKigxLWkpKSxjPXM/TWF0aC5hdGFuMihvLGEpKmhhLTEyMDpOYU47cmV0dXJuIG5ldyBCYShjPDA/YyszNjA6YyxzLGksdC5vcGFjaXR5KX1mdW5jdGlvbiBPYSh0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/TWEodCk6bmV3IEJhKHQsZSxuLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBCYSh0LGUsbixyKXt0aGlzLmg9K3QsdGhpcy5zPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K3J9U2UoQmEsT2EsQWUoTWUse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyBCYSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBCYSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PWlzTmFOKHRoaXMuaCk/MDoodGhpcy5oKzEyMCkqbGEsZT0rdGhpcy5sLG49aXNOYU4odGhpcy5zKT8wOnRoaXMucyplKigxLWUpLHI9TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KTtyZXR1cm4gbmV3IEdlKDI1NSooZStuKigtLjE0ODYxKnIrMS43ODI3NyppKSksMjU1KihlK24qKFRhKnIrLS45MDY0OSppKSksMjU1KihlK24qKDEuOTcyOTQqcikpLHRoaXMub3BhY2l0eSl9fSkpO3ZhciBOYT1BcnJheS5wcm90b3R5cGUuc2xpY2UsRGE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSxMYT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LElhPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspaWYobj1SYSh0LGVbcl0pKXJldHVybiBuO3JldHVybiAwfTtmdW5jdGlvbiBSYSh0LGUpe2Zvcih2YXIgbj1lWzBdLHI9ZVsxXSxpPS0xLGE9MCxvPXQubGVuZ3RoLHM9by0xO2E8bztzPWErKyl7dmFyIGM9dFthXSx1PWNbMF0sbD1jWzFdLGg9dFtzXSxmPWhbMF0sZD1oWzFdO2lmKEZhKGMsaCxlKSlyZXR1cm4gMDtsPnIhPWQ+ciYmbjwoZi11KSooci1sKS8oZC1sKSt1JiYoaT0taSl9cmV0dXJuIGl9ZnVuY3Rpb24gRmEodCxlLG4pe3ZhciByLGksYSxvO3JldHVybiBmdW5jdGlvbih0LGUsbil7cmV0dXJuKGVbMF0tdFswXSkqKG5bMV0tdFsxXSk9PShuWzBdLXRbMF0pKihlWzFdLXRbMV0pfSh0LGUsbikmJihpPXRbcj0rKHRbMF09PT1lWzBdKV0sYT1uW3JdLG89ZVtyXSxpPD1hJiZhPD1vfHxvPD1hJiZhPD1pKX12YXIgUGE9ZnVuY3Rpb24oKXt9LGphPVtbXSxbW1sxLDEuNV0sWy41LDFdXV0sW1tbMS41LDFdLFsxLDEuNV1dXSxbW1sxLjUsMV0sWy41LDFdXV0sW1tbMSwuNV0sWzEuNSwxXV1dLFtbWzEsMS41XSxbLjUsMV1dLFtbMSwuNV0sWzEuNSwxXV1dLFtbWzEsLjVdLFsxLDEuNV1dXSxbW1sxLC41XSxbLjUsMV1dXSxbW1suNSwxXSxbMSwuNV1dXSxbW1sxLDEuNV0sWzEsLjVdXV0sW1tbLjUsMV0sWzEsLjVdXSxbWzEuNSwxXSxbMSwxLjVdXV0sW1tbMS41LDFdLFsxLC41XV1dLFtbWy41LDFdLFsxLjUsMV1dXSxbW1sxLDEuNV0sWzEuNSwxXV1dLFtbWy41LDFdLFsxLDEuNV1dXSxbXV0sWWE9ZnVuY3Rpb24oKXt2YXIgdD0xLGU9MSxuPU0scj1zO2Z1bmN0aW9uIGkodCl7dmFyIGU9bih0KTtpZihBcnJheS5pc0FycmF5KGUpKWU9ZS5zbGljZSgpLnNvcnQoRGEpO2Vsc2V7dmFyIHI9Zyh0KSxpPXJbMF0sbz1yWzFdO2U9QShpLG8sZSksZT1rKE1hdGguZmxvb3IoaS9lKSplLE1hdGguZmxvb3Ioby9lKSplLGUpfXJldHVybiBlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGEodCxlKX0pKX1mdW5jdGlvbiBhKG4saSl7dmFyIGE9W10scz1bXTtyZXR1cm4gZnVuY3Rpb24obixyLGkpe3ZhciBhLHMsYyx1LGwsaCxmPW5ldyBBcnJheSxkPW5ldyBBcnJheTthPXM9LTEsdT1uWzBdPj1yLGphW3U8PDFdLmZvckVhY2gocCk7Zm9yKDsrK2E8dC0xOyljPXUsdT1uW2ErMV0+PXIsamFbY3x1PDwxXS5mb3JFYWNoKHApO2phW3U8PDBdLmZvckVhY2gocCk7Zm9yKDsrK3M8ZS0xOyl7Zm9yKGE9LTEsdT1uW3MqdCt0XT49cixsPW5bcyp0XT49cixqYVt1PDwxfGw8PDJdLmZvckVhY2gocCk7KythPHQtMTspYz11LHU9bltzKnQrdCthKzFdPj1yLGg9bCxsPW5bcyp0K2ErMV0+PXIsamFbY3x1PDwxfGw8PDJ8aDw8M10uZm9yRWFjaChwKTtqYVt1fGw8PDNdLmZvckVhY2gocCl9YT0tMSxsPW5bcyp0XT49cixqYVtsPDwyXS5mb3JFYWNoKHApO2Zvcig7KythPHQtMTspaD1sLGw9bltzKnQrYSsxXT49cixqYVtsPDwyfGg8PDNdLmZvckVhY2gocCk7ZnVuY3Rpb24gcCh0KXt2YXIgZSxuLHI9W3RbMF1bMF0rYSx0WzBdWzFdK3NdLGM9W3RbMV1bMF0rYSx0WzFdWzFdK3NdLHU9byhyKSxsPW8oYyk7KGU9ZFt1XSk/KG49ZltsXSk/KGRlbGV0ZSBkW2UuZW5kXSxkZWxldGUgZltuLnN0YXJ0XSxlPT09bj8oZS5yaW5nLnB1c2goYyksaShlLnJpbmcpKTpmW2Uuc3RhcnRdPWRbbi5lbmRdPXtzdGFydDplLnN0YXJ0LGVuZDpuLmVuZCxyaW5nOmUucmluZy5jb25jYXQobi5yaW5nKX0pOihkZWxldGUgZFtlLmVuZF0sZS5yaW5nLnB1c2goYyksZFtlLmVuZD1sXT1lKTooZT1mW2xdKT8obj1kW3VdKT8oZGVsZXRlIGZbZS5zdGFydF0sZGVsZXRlIGRbbi5lbmRdLGU9PT1uPyhlLnJpbmcucHVzaChjKSxpKGUucmluZykpOmZbbi5zdGFydF09ZFtlLmVuZF09e3N0YXJ0Om4uc3RhcnQsZW5kOmUuZW5kLHJpbmc6bi5yaW5nLmNvbmNhdChlLnJpbmcpfSk6KGRlbGV0ZSBmW2Uuc3RhcnRdLGUucmluZy51bnNoaWZ0KHIpLGZbZS5zdGFydD11XT1lKTpmW3VdPWRbbF09e3N0YXJ0OnUsZW5kOmwscmluZzpbcixjXX19amFbbDw8M10uZm9yRWFjaChwKX0obixpLChmdW5jdGlvbih0KXtyKHQsbixpKSxmdW5jdGlvbih0KXtmb3IodmFyIGU9MCxuPXQubGVuZ3RoLHI9dFtuLTFdWzFdKnRbMF1bMF0tdFtuLTFdWzBdKnRbMF1bMV07KytlPG47KXIrPXRbZS0xXVsxXSp0W2VdWzBdLXRbZS0xXVswXSp0W2VdWzFdO3JldHVybiByfSh0KT4wP2EucHVzaChbdF0pOnMucHVzaCh0KX0pKSxzLmZvckVhY2goKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPTAscj1hLmxlbmd0aDtuPHI7KytuKWlmKC0xIT09SWEoKGU9YVtuXSlbMF0sdCkpcmV0dXJuIHZvaWQgZS5wdXNoKHQpfSkpLHt0eXBlOiJNdWx0aVBvbHlnb24iLHZhbHVlOmksY29vcmRpbmF0ZXM6YX19ZnVuY3Rpb24gbyhlKXtyZXR1cm4gMiplWzBdK2VbMV0qKHQrMSkqNH1mdW5jdGlvbiBzKG4scixpKXtuLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBhLG89blswXSxzPW5bMV0sYz0wfG8sdT0wfHMsbD1yW3UqdCtjXTtvPjAmJm88dCYmYz09PW8mJihhPXJbdSp0K2MtMV0sblswXT1vKyhpLWEpLyhsLWEpLS41KSxzPjAmJnM8ZSYmdT09PXMmJihhPXJbKHUtMSkqdCtjXSxuWzFdPXMrKGktYSkvKGwtYSktLjUpfSkpfXJldHVybiBpLmNvbnRvdXI9YSxpLnNpemU9ZnVuY3Rpb24obil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuW3QsZV07dmFyIHI9TWF0aC5jZWlsKG5bMF0pLGE9TWF0aC5jZWlsKG5bMV0pO2lmKCEocj4wJiZhPjApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaXplIik7cmV0dXJuIHQ9cixlPWEsaX0saS50aHJlc2hvbGRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QXJyYXkuaXNBcnJheSh0KT9MYShOYS5jYWxsKHQpKTpMYSh0KSxpKTpufSxpLnNtb290aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10P3M6UGEsaSk6cj09PXN9LGl9O2Z1bmN0aW9uIHphKHQsZSxuKXtmb3IodmFyIHI9dC53aWR0aCxpPXQuaGVpZ2h0LGE9MSsobjw8MSksbz0wO288aTsrK28pZm9yKHZhciBzPTAsYz0wO3M8cituOysrcylzPHImJihjKz10LmRhdGFbcytvKnJdKSxzPj1uJiYocz49YSYmKGMtPXQuZGF0YVtzLWErbypyXSksZS5kYXRhW3MtbitvKnJdPWMvTWF0aC5taW4ocysxLHItMSthLXMsYSkpfWZ1bmN0aW9uIFVhKHQsZSxuKXtmb3IodmFyIHI9dC53aWR0aCxpPXQuaGVpZ2h0LGE9MSsobjw8MSksbz0wO288cjsrK28pZm9yKHZhciBzPTAsYz0wO3M8aStuOysrcylzPGkmJihjKz10LmRhdGFbbytzKnJdKSxzPj1uJiYocz49YSYmKGMtPXQuZGF0YVtvKyhzLWEpKnJdKSxlLmRhdGFbbysocy1uKSpyXT1jL01hdGgubWluKHMrMSxpLTErYS1zLGEpKX1mdW5jdGlvbiAkYSh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBxYSh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBXYSgpe3JldHVybiAxfXZhciBWYT1mdW5jdGlvbigpe3ZhciB0PSRhLGU9cWEsbj1XYSxyPTk2MCxpPTUwMCxhPTIwLG89MixzPTMqYSxjPXIrMipzPj5vLHU9aSsyKnM+Pm8sbD1MYSgyMCk7ZnVuY3Rpb24gaChyKXt2YXIgaT1uZXcgRmxvYXQzMkFycmF5KGMqdSksaD1uZXcgRmxvYXQzMkFycmF5KGMqdSk7ci5mb3JFYWNoKChmdW5jdGlvbihyLGEsbCl7dmFyIGg9K3QocixhLGwpK3M+Pm8sZj0rZShyLGEsbCkrcz4+byxkPStuKHIsYSxsKTtoPj0wJiZoPGMmJmY+PTAmJmY8dSYmKGlbaCtmKmNdKz1kKX0pKSx6YSh7d2lkdGg6YyxoZWlnaHQ6dSxkYXRhOml9LHt3aWR0aDpjLGhlaWdodDp1LGRhdGE6aH0sYT4+byksVWEoe3dpZHRoOmMsaGVpZ2h0OnUsZGF0YTpofSx7d2lkdGg6YyxoZWlnaHQ6dSxkYXRhOml9LGE+Pm8pLHphKHt3aWR0aDpjLGhlaWdodDp1LGRhdGE6aX0se3dpZHRoOmMsaGVpZ2h0OnUsZGF0YTpofSxhPj5vKSxVYSh7d2lkdGg6YyxoZWlnaHQ6dSxkYXRhOmh9LHt3aWR0aDpjLGhlaWdodDp1LGRhdGE6aX0sYT4+byksemEoe3dpZHRoOmMsaGVpZ2h0OnUsZGF0YTppfSx7d2lkdGg6YyxoZWlnaHQ6dSxkYXRhOmh9LGE+Pm8pLFVhKHt3aWR0aDpjLGhlaWdodDp1LGRhdGE6aH0se3dpZHRoOmMsaGVpZ2h0OnUsZGF0YTppfSxhPj5vKTt2YXIgZD1sKGkpO2lmKCFBcnJheS5pc0FycmF5KGQpKXt2YXIgcD1MKGkpO2Q9QSgwLHAsZCksKGQ9aygwLE1hdGguZmxvb3IocC9kKSpkLGQpKS5zaGlmdCgpfXJldHVybiBZYSgpLnRocmVzaG9sZHMoZCkuc2l6ZShbYyx1XSkoaSkubWFwKGYpfWZ1bmN0aW9uIGYodCl7cmV0dXJuIHQudmFsdWUqPU1hdGgucG93KDIsLTIqbyksdC5jb29yZGluYXRlcy5mb3JFYWNoKGQpLHR9ZnVuY3Rpb24gZCh0KXt0LmZvckVhY2gocCl9ZnVuY3Rpb24gcCh0KXt0LmZvckVhY2goeSl9ZnVuY3Rpb24geSh0KXt0WzBdPXRbMF0qTWF0aC5wb3coMixvKS1zLHRbMV09dFsxXSpNYXRoLnBvdygyLG8pLXN9ZnVuY3Rpb24gZygpe3JldHVybiBjPXIrMioocz0zKmEpPj5vLHU9aSsyKnM+Pm8saH1yZXR1cm4gaC54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6TGEoK2UpLGgpOnR9LGgueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkxhKCt0KSxoKTplfSxoLndlaWdodD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkxhKCt0KSxoKTpufSxoLnNpemU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuW3IsaV07dmFyIGU9TWF0aC5jZWlsKHRbMF0pLG49TWF0aC5jZWlsKHRbMV0pO2lmKCEoZT49MHx8ZT49MCkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpemUiKTtyZXR1cm4gcj1lLGk9bixnKCl9LGguY2VsbFNpemU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIDE8PG87aWYoISgodD0rdCk+PTEpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjZWxsIHNpemUiKTtyZXR1cm4gbz1NYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGguTE4yKSxnKCl9LGgudGhyZXNob2xkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkFycmF5LmlzQXJyYXkodCk/TGEoTmEuY2FsbCh0KSk6TGEodCksaCk6bH0saC5iYW5kd2lkdGg9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIE1hdGguc3FydChhKihhKzEpKTtpZighKCh0PSt0KT49MCkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGJhbmR3aWR0aCIpO3JldHVybiBhPU1hdGgucm91bmQoKE1hdGguc3FydCg0KnQqdCsxKS0xKS8yKSxnKCl9LGh9LEhhPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX07ZnVuY3Rpb24gR2EodCxlLG4scixpLGEsbyxzLGMsdSl7dGhpcy50YXJnZXQ9dCx0aGlzLnR5cGU9ZSx0aGlzLnN1YmplY3Q9bix0aGlzLmlkZW50aWZpZXI9cix0aGlzLmFjdGl2ZT1pLHRoaXMueD1hLHRoaXMueT1vLHRoaXMuZHg9cyx0aGlzLmR5PWMsdGhpcy5fPXV9ZnVuY3Rpb24gWGEoKXtyZXR1cm4hY2UuY3RybEtleSYmIWNlLmJ1dHRvbn1mdW5jdGlvbiBaYSgpe3JldHVybiB0aGlzLnBhcmVudE5vZGV9ZnVuY3Rpb24gUWEodCl7cmV0dXJuIG51bGw9PXQ/e3g6Y2UueCx5OmNlLnl9OnR9ZnVuY3Rpb24gS2EoKXtyZXR1cm4gbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzfHwib250b3VjaHN0YXJ0ImluIHRoaXN9R2EucHJvdG90eXBlLm9uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fLm9uLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpO3JldHVybiB0PT09dGhpcy5fP3RoaXM6dH07dmFyIEphPWZ1bmN0aW9uKCl7dmFyIHQsZSxuLHIsaT1YYSxhPVphLG89UWEscz1LYSxjPXt9LHU9bHQoInN0YXJ0IiwiZHJhZyIsImVuZCIpLGw9MCxoPTA7ZnVuY3Rpb24gZih0KXt0Lm9uKCJtb3VzZWRvd24uZHJhZyIsZCkuZmlsdGVyKHMpLm9uKCJ0b3VjaHN0YXJ0LmRyYWciLGcpLm9uKCJ0b3VjaG1vdmUuZHJhZyIsdikub24oInRvdWNoZW5kLmRyYWcgdG91Y2hjYW5jZWwuZHJhZyIsbSkuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIGQoKXtpZighciYmaS5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBvPWIoIm1vdXNlIixhLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxObix0aGlzLGFyZ3VtZW50cyk7byYmKGtlKGNlLnZpZXcpLm9uKCJtb3VzZW1vdmUuZHJhZyIscCwhMCkub24oIm1vdXNldXAuZHJhZyIseSwhMCksVGUoY2Uudmlldyksd2UoKSxuPSExLHQ9Y2UuY2xpZW50WCxlPWNlLmNsaWVudFksbygic3RhcnQiKSl9fWZ1bmN0aW9uIHAoKXtpZihFZSgpLCFuKXt2YXIgcj1jZS5jbGllbnRYLXQsaT1jZS5jbGllbnRZLWU7bj1yKnIraSppPmh9Yy5tb3VzZSgiZHJhZyIpfWZ1bmN0aW9uIHkoKXtrZShjZS52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWcgbW91c2V1cC5kcmFnIixudWxsKSxDZShjZS52aWV3LG4pLEVlKCksYy5tb3VzZSgiZW5kIil9ZnVuY3Rpb24gZygpe2lmKGkuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdCxlLG49Y2UuY2hhbmdlZFRvdWNoZXMscj1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxvPW4ubGVuZ3RoO2Zvcih0PTA7dDxvOysrdCkoZT1iKG5bdF0uaWRlbnRpZmllcixyLEJuLHRoaXMsYXJndW1lbnRzKSkmJih3ZSgpLGUoInN0YXJ0IikpfX1mdW5jdGlvbiB2KCl7dmFyIHQsZSxuPWNlLmNoYW5nZWRUb3VjaGVzLHI9bi5sZW5ndGg7Zm9yKHQ9MDt0PHI7Kyt0KShlPWNbblt0XS5pZGVudGlmaWVyXSkmJihFZSgpLGUoImRyYWciKSl9ZnVuY3Rpb24gbSgpe3ZhciB0LGUsbj1jZS5jaGFuZ2VkVG91Y2hlcyxpPW4ubGVuZ3RoO2ZvcihyJiZjbGVhclRpbWVvdXQocikscj1zZXRUaW1lb3V0KChmdW5jdGlvbigpe3I9bnVsbH0pLDUwMCksdD0wO3Q8aTsrK3QpKGU9Y1tuW3RdLmlkZW50aWZpZXJdKSYmKHdlKCksZSgiZW5kIikpfWZ1bmN0aW9uIGIodCxlLG4scixpKXt2YXIgYSxzLGgsZD1uKGUsdCkscD11LmNvcHkoKTtpZihwZShuZXcgR2EoZiwiYmVmb3Jlc3RhcnQiLGEsdCxsLGRbMF0sZFsxXSwwLDAscCksKGZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPShjZS5zdWJqZWN0PWE9by5hcHBseShyLGkpKSYmKHM9YS54LWRbMF18fDAsaD1hLnktZFsxXXx8MCwhMCl9KSkpcmV0dXJuIGZ1bmN0aW9uIG8odSl7dmFyIHksZz1kO3N3aXRjaCh1KXtjYXNlInN0YXJ0IjpjW3RdPW8seT1sKys7YnJlYWs7Y2FzZSJlbmQiOmRlbGV0ZSBjW3RdLC0tbDtjYXNlImRyYWciOmQ9bihlLHQpLHk9bH1wZShuZXcgR2EoZix1LGEsdCx5LGRbMF0rcyxkWzFdK2gsZFswXS1nWzBdLGRbMV0tZ1sxXSxwKSxwLmFwcGx5LHAsW3UscixpXSl9fXJldHVybiBmLmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkhhKCEhdCksZik6aX0sZi5jb250YWluZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpIYSh0KSxmKTphfSxmLnN1YmplY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpIYSh0KSxmKTpvfSxmLnRvdWNoYWJsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkhhKCEhdCksZik6c30sZi5vbj1mdW5jdGlvbigpe3ZhciB0PXUub24uYXBwbHkodSxhcmd1bWVudHMpO3JldHVybiB0PT09dT9mOnR9LGYuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0odD0rdCkqdCxmKTpNYXRoLnNxcnQoaCl9LGZ9LHRvPXt9LGVvPXt9O2Z1bmN0aW9uIG5vKHQpe3JldHVybiBuZXcgRnVuY3Rpb24oImQiLCJyZXR1cm4geyIrdC5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpKyI6IGRbIitlKyddIHx8ICIiJ30pKS5qb2luKCIsIikrIn0iKX1mdW5jdGlvbiBybyh0KXt2YXIgZT1PYmplY3QuY3JlYXRlKG51bGwpLG49W107cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7Zm9yKHZhciByIGluIHQpciBpbiBlfHxuLnB1c2goZVtyXT1yKX0pKSxufWZ1bmN0aW9uIGlvKHQsZSl7dmFyIG49dCsiIixyPW4ubGVuZ3RoO3JldHVybiByPGU/bmV3IEFycmF5KGUtcisxKS5qb2luKDApK246bn1mdW5jdGlvbiBhbyh0KXt2YXIgZSxuPXQuZ2V0VVRDSG91cnMoKSxyPXQuZ2V0VVRDTWludXRlcygpLGk9dC5nZXRVVENTZWNvbmRzKCksYT10LmdldFVUQ01pbGxpc2Vjb25kcygpO3JldHVybiBpc05hTih0KT8iSW52YWxpZCBEYXRlIjooKGU9dC5nZXRVVENGdWxsWWVhcigpKTwwPyItIitpbygtZSw2KTplPjk5OTk/IisiK2lvKGUsNik6aW8oZSw0KSkrIi0iK2lvKHQuZ2V0VVRDTW9udGgoKSsxLDIpKyItIitpbyh0LmdldFVUQ0RhdGUoKSwyKSsoYT8iVCIraW8obiwyKSsiOiIraW8ociwyKSsiOiIraW8oaSwyKSsiLiIraW8oYSwzKSsiWiI6aT8iVCIraW8obiwyKSsiOiIraW8ociwyKSsiOiIraW8oaSwyKSsiWiI6cnx8bj8iVCIraW8obiwyKSsiOiIraW8ociwyKSsiWiI6IiIpfXZhciBvbz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgUmVnRXhwKCdbIicrdCsiXG5ccl0iKSxuPXQuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiByKHQsZSl7dmFyIHIsaT1bXSxhPXQubGVuZ3RoLG89MCxzPTAsYz1hPD0wLHU9ITE7ZnVuY3Rpb24gbCgpe2lmKGMpcmV0dXJuIGVvO2lmKHUpcmV0dXJuIHU9ITEsdG87dmFyIGUscixpPW87aWYoMzQ9PT10LmNoYXJDb2RlQXQoaSkpe2Zvcig7bysrPGEmJjM0IT09dC5jaGFyQ29kZUF0KG8pfHwzND09PXQuY2hhckNvZGVBdCgrK28pOyk7cmV0dXJuKGU9byk+PWE/Yz0hMDoxMD09PShyPXQuY2hhckNvZGVBdChvKyspKT91PSEwOjEzPT09ciYmKHU9ITAsMTA9PT10LmNoYXJDb2RlQXQobykmJisrbyksdC5zbGljZShpKzEsZS0xKS5yZXBsYWNlKC8iIi9nLCciJyl9Zm9yKDtvPGE7KXtpZigxMD09PShyPXQuY2hhckNvZGVBdChlPW8rKykpKXU9ITA7ZWxzZSBpZigxMz09PXIpdT0hMCwxMD09PXQuY2hhckNvZGVBdChvKSYmKytvO2Vsc2UgaWYociE9PW4pY29udGludWU7cmV0dXJuIHQuc2xpY2UoaSxlKX1yZXR1cm4gYz0hMCx0LnNsaWNlKGksYSl9Zm9yKDEwPT09dC5jaGFyQ29kZUF0KGEtMSkmJi0tYSwxMz09PXQuY2hhckNvZGVBdChhLTEpJiYtLWE7KHI9bCgpKSE9PWVvOyl7Zm9yKHZhciBoPVtdO3IhPT10byYmciE9PWVvOyloLnB1c2gocikscj1sKCk7ZSYmbnVsbD09KGg9ZShoLHMrKykpfHxpLnB1c2goaCl9cmV0dXJuIGl9ZnVuY3Rpb24gaShlLG4pe3JldHVybiBlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIG4ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbyhlW3RdKX0pKS5qb2luKHQpfSkpfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIGUubWFwKG8pLmpvaW4odCl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbnVsbD09dD8iIjp0IGluc3RhbmNlb2YgRGF0ZT9hbyh0KTplLnRlc3QodCs9IiIpPyciJyt0LnJlcGxhY2UoLyIvZywnIiInKSsnIic6dH1yZXR1cm57cGFyc2U6ZnVuY3Rpb24odCxlKXt2YXIgbixpLGE9cih0LChmdW5jdGlvbih0LHIpe2lmKG4pcmV0dXJuIG4odCxyLTEpO2k9dCxuPWU/ZnVuY3Rpb24odCxlKXt2YXIgbj1ubyh0KTtyZXR1cm4gZnVuY3Rpb24ocixpKXtyZXR1cm4gZShuKHIpLGksdCl9fSh0LGUpOm5vKHQpfSkpO3JldHVybiBhLmNvbHVtbnM9aXx8W10sYX0scGFyc2VSb3dzOnIsZm9ybWF0OmZ1bmN0aW9uKGUsbil7cmV0dXJuIG51bGw9PW4mJihuPXJvKGUpKSxbbi5tYXAobykuam9pbih0KV0uY29uY2F0KGkoZSxuKSkuam9pbigiXG4iKX0sZm9ybWF0Qm9keTpmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT1lJiYoZT1ybyh0KSksaSh0LGUpLmpvaW4oIlxuIil9LGZvcm1hdFJvd3M6ZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGEpLmpvaW4oIlxuIil9LGZvcm1hdFJvdzphLGZvcm1hdFZhbHVlOm99fSxzbz1vbygiLCIpLGNvPXNvLnBhcnNlLHVvPXNvLnBhcnNlUm93cyxsbz1zby5mb3JtYXQsaG89c28uZm9ybWF0Qm9keSxmbz1zby5mb3JtYXRSb3dzLHBvPXNvLmZvcm1hdFJvdyx5bz1zby5mb3JtYXRWYWx1ZSxnbz1vbygiXHQiKSx2bz1nby5wYXJzZSxtbz1nby5wYXJzZVJvd3MsYm89Z28uZm9ybWF0LHhvPWdvLmZvcm1hdEJvZHksX289Z28uZm9ybWF0Um93cyxrbz1nby5mb3JtYXRSb3csd289Z28uZm9ybWF0VmFsdWU7ZnVuY3Rpb24gRW8odCl7Zm9yKHZhciBlIGluIHQpe3ZhciBuLHIsaT10W2VdLnRyaW0oKTtpZihpKWlmKCJ0cnVlIj09PWkpaT0hMDtlbHNlIGlmKCJmYWxzZSI9PT1pKWk9ITE7ZWxzZSBpZigiTmFOIj09PWkpaT1OYU47ZWxzZSBpZihpc05hTihuPStpKSl7aWYoIShyPWkubWF0Y2goL14oWy0rXVxkezJ9KT9cZHs0fSgtXGR7Mn0oLVxkezJ9KT8pPyhUXGR7Mn06XGR7Mn0oOlxkezJ9KFwuXGR7M30pPyk/KFp8Wy0rXVxkezJ9OlxkezJ9KT8pPyQvKSkpY29udGludWU7VG8mJnJbNF0mJiFyWzddJiYoaT1pLnJlcGxhY2UoLy0vZywiLyIpLnJlcGxhY2UoL1QvLCIgIikpLGk9bmV3IERhdGUoaSl9ZWxzZSBpPW47ZWxzZSBpPW51bGw7dFtlXT1pfXJldHVybiB0fXZhciBUbz1uZXcgRGF0ZSgiMjAxOS0wMS0wMVQwMDowMCIpLmdldEhvdXJzKCl8fG5ldyBEYXRlKCIyMDE5LTA3LTAxVDAwOjAwIikuZ2V0SG91cnMoKTtmdW5jdGlvbiBDbyh0KXtyZXR1cm4rdH1mdW5jdGlvbiBTbyh0KXtyZXR1cm4gdCp0fWZ1bmN0aW9uIEFvKHQpe3JldHVybiB0KigyLXQpfWZ1bmN0aW9uIE1vKHQpe3JldHVybigodCo9Mik8PTE/dCp0Oi0tdCooMi10KSsxKS8yfXZhciBPbz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIE1hdGgucG93KHQsZSl9cmV0dXJuIGU9K2Usbi5leHBvbmVudD10LG59KDMpLEJvPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gMS1NYXRoLnBvdygxLXQsZSl9cmV0dXJuIGU9K2Usbi5leHBvbmVudD10LG59KDMpLE5vPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4oKHQqPTIpPD0xP01hdGgucG93KHQsZSk6Mi1NYXRoLnBvdygyLXQsZSkpLzJ9cmV0dXJuIGU9K2Usbi5leHBvbmVudD10LG59KDMpLERvPU1hdGguUEksTG89RG8vMjtmdW5jdGlvbiBJbyh0KXtyZXR1cm4gMS1NYXRoLmNvcyh0KkxvKX1mdW5jdGlvbiBSbyh0KXtyZXR1cm4gTWF0aC5zaW4odCpMbyl9ZnVuY3Rpb24gRm8odCl7cmV0dXJuKDEtTWF0aC5jb3MoRG8qdCkpLzJ9ZnVuY3Rpb24gUG8odCl7cmV0dXJuIE1hdGgucG93KDIsMTAqdC0xMCl9ZnVuY3Rpb24gam8odCl7cmV0dXJuIDEtTWF0aC5wb3coMiwtMTAqdCl9ZnVuY3Rpb24gWW8odCl7cmV0dXJuKCh0Kj0yKTw9MT9NYXRoLnBvdygyLDEwKnQtMTApOjItTWF0aC5wb3coMiwxMC0xMCp0KSkvMn1mdW5jdGlvbiB6byh0KXtyZXR1cm4gMS1NYXRoLnNxcnQoMS10KnQpfWZ1bmN0aW9uIFVvKHQpe3JldHVybiBNYXRoLnNxcnQoMS0gLS10KnQpfWZ1bmN0aW9uICRvKHQpe3JldHVybigodCo9Mik8PTE/MS1NYXRoLnNxcnQoMS10KnQpOk1hdGguc3FydCgxLSh0LT0yKSp0KSsxKS8yfWZ1bmN0aW9uIHFvKHQpe3JldHVybiAxLVdvKDEtdCl9ZnVuY3Rpb24gV28odCl7cmV0dXJuKHQ9K3QpPDQvMTE/Ny41NjI1KnQqdDp0PDgvMTE/Ny41NjI1Kih0LT02LzExKSp0Ky43NTp0PDEwLzExPzcuNTYyNSoodC09OS8xMSkqdCsuOTM3NTo3LjU2MjUqKHQtPTIxLzIyKSp0KzYzLzY0fWZ1bmN0aW9uIFZvKHQpe3JldHVybigodCo9Mik8PTE/MS1XbygxLXQpOldvKHQtMSkrMSkvMn12YXIgSG89ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiB0KnQqKChlKzEpKnQtZSl9cmV0dXJuIGU9K2Usbi5vdmVyc2hvb3Q9dCxufSgxLjcwMTU4KSxHbz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuLS10KnQqKChlKzEpKnQrZSkrMX1yZXR1cm4gZT0rZSxuLm92ZXJzaG9vdD10LG59KDEuNzAxNTgpLFhvPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4oKHQqPTIpPDE/dCp0KigoZSsxKSp0LWUpOih0LT0yKSp0KigoZSsxKSp0K2UpKzIpLzJ9cmV0dXJuIGU9K2Usbi5vdmVyc2hvb3Q9dCxufSgxLjcwMTU4KSxabz0yKk1hdGguUEksUW89ZnVuY3Rpb24gdChlLG4pe3ZhciByPU1hdGguYXNpbigxLyhlPU1hdGgubWF4KDEsZSkpKSoobi89Wm8pO2Z1bmN0aW9uIGkodCl7cmV0dXJuIGUqTWF0aC5wb3coMiwxMCotLXQpKk1hdGguc2luKChyLXQpL24pfXJldHVybiBpLmFtcGxpdHVkZT1mdW5jdGlvbihlKXtyZXR1cm4gdChlLG4qWm8pfSxpLnBlcmlvZD1mdW5jdGlvbihuKXtyZXR1cm4gdChlLG4pfSxpfSgxLC4zKSxLbz1mdW5jdGlvbiB0KGUsbil7dmFyIHI9TWF0aC5hc2luKDEvKGU9TWF0aC5tYXgoMSxlKSkpKihuLz1abyk7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gMS1lKk1hdGgucG93KDIsLTEwKih0PSt0KSkqTWF0aC5zaW4oKHQrcikvbil9cmV0dXJuIGkuYW1wbGl0dWRlPWZ1bmN0aW9uKGUpe3JldHVybiB0KGUsbipabyl9LGkucGVyaW9kPWZ1bmN0aW9uKG4pe3JldHVybiB0KGUsbil9LGl9KDEsLjMpLEpvPWZ1bmN0aW9uIHQoZSxuKXt2YXIgcj1NYXRoLmFzaW4oMS8oZT1NYXRoLm1heCgxLGUpKSkqKG4vPVpvKTtmdW5jdGlvbiBpKHQpe3JldHVybigodD0yKnQtMSk8MD9lKk1hdGgucG93KDIsMTAqdCkqTWF0aC5zaW4oKHItdCkvbik6Mi1lKk1hdGgucG93KDIsLTEwKnQpKk1hdGguc2luKChyK3QpL24pKS8yfXJldHVybiBpLmFtcGxpdHVkZT1mdW5jdGlvbihlKXtyZXR1cm4gdChlLG4qWm8pfSxpLnBlcmlvZD1mdW5jdGlvbihuKXtyZXR1cm4gdChlLG4pfSxpfSgxLC4zKTtmdW5jdGlvbiB0cyh0KXtpZighdC5vayl0aHJvdyBuZXcgRXJyb3IodC5zdGF0dXMrIiAiK3Quc3RhdHVzVGV4dCk7cmV0dXJuIHQuYmxvYigpfXZhciBlcz1mdW5jdGlvbih0LGUpe3JldHVybiBmZXRjaCh0LGUpLnRoZW4odHMpfTtmdW5jdGlvbiBucyh0KXtpZighdC5vayl0aHJvdyBuZXcgRXJyb3IodC5zdGF0dXMrIiAiK3Quc3RhdHVzVGV4dCk7cmV0dXJuIHQuYXJyYXlCdWZmZXIoKX12YXIgcnM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZmV0Y2godCxlKS50aGVuKG5zKX07ZnVuY3Rpb24gaXModCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0LnRleHQoKX12YXIgYXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZmV0Y2godCxlKS50aGVuKGlzKX07ZnVuY3Rpb24gb3ModCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBuJiYocj1uLG49dm9pZCAwKSxhcyhlLG4pLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiB0KGUscil9KSl9fWZ1bmN0aW9uIHNzKHQsZSxuLHIpezM9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgbiYmKHI9bixuPXZvaWQgMCk7dmFyIGk9b28odCk7cmV0dXJuIGFzKGUsbikudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIGkucGFyc2UodCxyKX0pKX12YXIgY3M9b3MoY28pLHVzPW9zKHZvKSxscz1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixyKXt2YXIgaT1uZXcgSW1hZ2U7Zm9yKHZhciBhIGluIGUpaVthXT1lW2FdO2kub25lcnJvcj1yLGkub25sb2FkPWZ1bmN0aW9uKCl7bihpKX0saS5zcmM9dH0pKX07ZnVuY3Rpb24gaHModCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0Lmpzb24oKX12YXIgZnM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZmV0Y2godCxlKS50aGVuKGhzKX07ZnVuY3Rpb24gZHModCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuIGFzKGUsbikudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuKG5ldyBET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhlLHQpfSkpfX12YXIgcHM9ZHMoImFwcGxpY2F0aW9uL3htbCIpLHlzPWRzKCJ0ZXh0L2h0bWwiKSxncz1kcygiaW1hZ2Uvc3ZnK3htbCIpLHZzPWZ1bmN0aW9uKHQsZSl7dmFyIG47ZnVuY3Rpb24gcigpe3ZhciByLGksYT1uLmxlbmd0aCxvPTAscz0wO2ZvcihyPTA7cjxhOysrcilvKz0oaT1uW3JdKS54LHMrPWkueTtmb3Iobz1vL2EtdCxzPXMvYS1lLHI9MDtyPGE7KytyKShpPW5bcl0pLngtPW8saS55LT1zfXJldHVybiBudWxsPT10JiYodD0wKSxudWxsPT1lJiYoZT0wKSxyLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7bj10fSxyLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2Uscik6dH0sci55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LHIpOmV9LHJ9LG1zPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sYnM9ZnVuY3Rpb24oKXtyZXR1cm4gMWUtNiooTWF0aC5yYW5kb20oKS0uNSl9O2Z1bmN0aW9uIHhzKHQsZSxuLHIpe2lmKGlzTmFOKGUpfHxpc05hTihuKSlyZXR1cm4gdDt2YXIgaSxhLG8scyxjLHUsbCxoLGYsZD10Ll9yb290LHA9e2RhdGE6cn0seT10Ll94MCxnPXQuX3kwLHY9dC5feDEsbT10Ll95MTtpZighZClyZXR1cm4gdC5fcm9vdD1wLHQ7Zm9yKDtkLmxlbmd0aDspaWYoKHU9ZT49KGE9KHkrdikvMikpP3k9YTp2PWEsKGw9bj49KG89KGcrbSkvMikpP2c9bzptPW8saT1kLCEoZD1kW2g9bDw8MXx1XSkpcmV0dXJuIGlbaF09cCx0O2lmKHM9K3QuX3guY2FsbChudWxsLGQuZGF0YSksYz0rdC5feS5jYWxsKG51bGwsZC5kYXRhKSxlPT09cyYmbj09PWMpcmV0dXJuIHAubmV4dD1kLGk/aVtoXT1wOnQuX3Jvb3Q9cCx0O2Rve2k9aT9pW2hdPW5ldyBBcnJheSg0KTp0Ll9yb290PW5ldyBBcnJheSg0KSwodT1lPj0oYT0oeSt2KS8yKSk/eT1hOnY9YSwobD1uPj0obz0oZyttKS8yKSk/Zz1vOm09b313aGlsZSgoaD1sPDwxfHUpPT0oZj0oYz49byk8PDF8cz49YSkpO3JldHVybiBpW2ZdPWQsaVtoXT1wLHR9dmFyIF9zPWZ1bmN0aW9uKHQsZSxuLHIsaSl7dGhpcy5ub2RlPXQsdGhpcy54MD1lLHRoaXMueTA9bix0aGlzLngxPXIsdGhpcy55MT1pfTtmdW5jdGlvbiBrcyh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiB3cyh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBFcyh0LGUsbil7dmFyIHI9bmV3IFRzKG51bGw9PWU/a3M6ZSxudWxsPT1uP3dzOm4sTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gbnVsbD09dD9yOnIuYWRkQWxsKHQpfWZ1bmN0aW9uIFRzKHQsZSxuLHIsaSxhKXt0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3gwPW4sdGhpcy5feTA9cix0aGlzLl94MT1pLHRoaXMuX3kxPWEsdGhpcy5fcm9vdD12b2lkIDB9ZnVuY3Rpb24gQ3ModCl7Zm9yKHZhciBlPXtkYXRhOnQuZGF0YX0sbj1lO3Q9dC5uZXh0OyluPW4ubmV4dD17ZGF0YTp0LmRhdGF9O3JldHVybiBlfXZhciBTcz1Fcy5wcm90b3R5cGU9VHMucHJvdG90eXBlO2Z1bmN0aW9uIEFzKHQpe3JldHVybiB0LngrdC52eH1mdW5jdGlvbiBNcyh0KXtyZXR1cm4gdC55K3Qudnl9U3MuY29weT1mdW5jdGlvbigpe3ZhciB0LGUsbj1uZXcgVHModGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSxyPXRoaXMuX3Jvb3Q7aWYoIXIpcmV0dXJuIG47aWYoIXIubGVuZ3RoKXJldHVybiBuLl9yb290PUNzKHIpLG47Zm9yKHQ9W3tzb3VyY2U6cix0YXJnZXQ6bi5fcm9vdD1uZXcgQXJyYXkoNCl9XTtyPXQucG9wKCk7KWZvcih2YXIgaT0wO2k8NDsrK2kpKGU9ci5zb3VyY2VbaV0pJiYoZS5sZW5ndGg/dC5wdXNoKHtzb3VyY2U6ZSx0YXJnZXQ6ci50YXJnZXRbaV09bmV3IEFycmF5KDQpfSk6ci50YXJnZXRbaV09Q3MoZSkpO3JldHVybiBufSxTcy5hZGQ9ZnVuY3Rpb24odCl7dmFyIGU9K3RoaXMuX3guY2FsbChudWxsLHQpLG49K3RoaXMuX3kuY2FsbChudWxsLHQpO3JldHVybiB4cyh0aGlzLmNvdmVyKGUsbiksZSxuLHQpfSxTcy5hZGRBbGw9ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksYT10Lmxlbmd0aCxvPW5ldyBBcnJheShhKSxzPW5ldyBBcnJheShhKSxjPTEvMCx1PTEvMCxsPS0xLzAsaD0tMS8wO2ZvcihuPTA7bjxhOysrbilpc05hTihyPSt0aGlzLl94LmNhbGwobnVsbCxlPXRbbl0pKXx8aXNOYU4oaT0rdGhpcy5feS5jYWxsKG51bGwsZSkpfHwob1tuXT1yLHNbbl09aSxyPGMmJihjPXIpLHI+bCYmKGw9ciksaTx1JiYodT1pKSxpPmgmJihoPWkpKTtpZihjPmx8fHU+aClyZXR1cm4gdGhpcztmb3IodGhpcy5jb3ZlcihjLHUpLmNvdmVyKGwsaCksbj0wO248YTsrK24peHModGhpcyxvW25dLHNbbl0sdFtuXSk7cmV0dXJuIHRoaXN9LFNzLmNvdmVyPWZ1bmN0aW9uKHQsZSl7aWYoaXNOYU4odD0rdCl8fGlzTmFOKGU9K2UpKXJldHVybiB0aGlzO3ZhciBuPXRoaXMuX3gwLHI9dGhpcy5feTAsaT10aGlzLl94MSxhPXRoaXMuX3kxO2lmKGlzTmFOKG4pKWk9KG49TWF0aC5mbG9vcih0KSkrMSxhPShyPU1hdGguZmxvb3IoZSkpKzE7ZWxzZXtmb3IodmFyIG8scyxjPWktbix1PXRoaXMuX3Jvb3Q7bj50fHx0Pj1pfHxyPmV8fGU+PWE7KXN3aXRjaChzPShlPHIpPDwxfHQ8biwobz1uZXcgQXJyYXkoNCkpW3NdPXUsdT1vLGMqPTIscyl7Y2FzZSAwOmk9bitjLGE9citjO2JyZWFrO2Nhc2UgMTpuPWktYyxhPXIrYzticmVhaztjYXNlIDI6aT1uK2Mscj1hLWM7YnJlYWs7Y2FzZSAzOm49aS1jLHI9YS1jfXRoaXMuX3Jvb3QmJnRoaXMuX3Jvb3QubGVuZ3RoJiYodGhpcy5fcm9vdD11KX1yZXR1cm4gdGhpcy5feDA9bix0aGlzLl95MD1yLHRoaXMuX3gxPWksdGhpcy5feTE9YSx0aGlzfSxTcy5kYXRhPWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMudmlzaXQoKGZ1bmN0aW9uKGUpe2lmKCFlLmxlbmd0aClkb3t0LnB1c2goZS5kYXRhKX13aGlsZShlPWUubmV4dCl9KSksdH0sU3MuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuY292ZXIoK3RbMF1bMF0sK3RbMF1bMV0pLmNvdmVyKCt0WzFdWzBdLCt0WzFdWzFdKTppc05hTih0aGlzLl94MCk/dm9pZCAwOltbdGhpcy5feDAsdGhpcy5feTBdLFt0aGlzLl94MSx0aGlzLl95MV1dfSxTcy5maW5kPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGEsbyxzLGMsdSxsPXRoaXMuX3gwLGg9dGhpcy5feTAsZj10aGlzLl94MSxkPXRoaXMuX3kxLHA9W10seT10aGlzLl9yb290O2Zvcih5JiZwLnB1c2gobmV3IF9zKHksbCxoLGYsZCkpLG51bGw9PW4/bj0xLzA6KGw9dC1uLGg9ZS1uLGY9dCtuLGQ9ZStuLG4qPW4pO2M9cC5wb3AoKTspaWYoISghKHk9Yy5ub2RlKXx8KGk9Yy54MCk+Znx8KGE9Yy55MCk+ZHx8KG89Yy54MSk8bHx8KHM9Yy55MSk8aCkpaWYoeS5sZW5ndGgpe3ZhciBnPShpK28pLzIsdj0oYStzKS8yO3AucHVzaChuZXcgX3MoeVszXSxnLHYsbyxzKSxuZXcgX3MoeVsyXSxpLHYsZyxzKSxuZXcgX3MoeVsxXSxnLGEsbyx2KSxuZXcgX3MoeVswXSxpLGEsZyx2KSksKHU9KGU+PXYpPDwxfHQ+PWcpJiYoYz1wW3AubGVuZ3RoLTFdLHBbcC5sZW5ndGgtMV09cFtwLmxlbmd0aC0xLXVdLHBbcC5sZW5ndGgtMS11XT1jKX1lbHNle3ZhciBtPXQtK3RoaXMuX3guY2FsbChudWxsLHkuZGF0YSksYj1lLSt0aGlzLl95LmNhbGwobnVsbCx5LmRhdGEpLHg9bSptK2IqYjtpZih4PG4pe3ZhciBfPU1hdGguc3FydChuPXgpO2w9dC1fLGg9ZS1fLGY9dCtfLGQ9ZStfLHI9eS5kYXRhfX1yZXR1cm4gcn0sU3MucmVtb3ZlPWZ1bmN0aW9uKHQpe2lmKGlzTmFOKGE9K3RoaXMuX3guY2FsbChudWxsLHQpKXx8aXNOYU4obz0rdGhpcy5feS5jYWxsKG51bGwsdCkpKXJldHVybiB0aGlzO3ZhciBlLG4scixpLGEsbyxzLGMsdSxsLGgsZixkPXRoaXMuX3Jvb3QscD10aGlzLl94MCx5PXRoaXMuX3kwLGc9dGhpcy5feDEsdj10aGlzLl95MTtpZighZClyZXR1cm4gdGhpcztpZihkLmxlbmd0aClmb3IoOzspe2lmKCh1PWE+PShzPShwK2cpLzIpKT9wPXM6Zz1zLChsPW8+PShjPSh5K3YpLzIpKT95PWM6dj1jLGU9ZCwhKGQ9ZFtoPWw8PDF8dV0pKXJldHVybiB0aGlzO2lmKCFkLmxlbmd0aClicmVhazsoZVtoKzEmM118fGVbaCsyJjNdfHxlW2grMyYzXSkmJihuPWUsZj1oKX1mb3IoO2QuZGF0YSE9PXQ7KWlmKHI9ZCwhKGQ9ZC5uZXh0KSlyZXR1cm4gdGhpcztyZXR1cm4oaT1kLm5leHQpJiZkZWxldGUgZC5uZXh0LHI/KGk/ci5uZXh0PWk6ZGVsZXRlIHIubmV4dCx0aGlzKTplPyhpP2VbaF09aTpkZWxldGUgZVtoXSwoZD1lWzBdfHxlWzFdfHxlWzJdfHxlWzNdKSYmZD09PShlWzNdfHxlWzJdfHxlWzFdfHxlWzBdKSYmIWQubGVuZ3RoJiYobj9uW2ZdPWQ6dGhpcy5fcm9vdD1kKSx0aGlzKToodGhpcy5fcm9vdD1pLHRoaXMpfSxTcy5yZW1vdmVBbGw9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAsbj10Lmxlbmd0aDtlPG47KytlKXRoaXMucmVtb3ZlKHRbZV0pO3JldHVybiB0aGlzfSxTcy5yb290PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jvb3R9LFNzLnNpemU9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiB0aGlzLnZpc2l0KChmdW5jdGlvbihlKXtpZighZS5sZW5ndGgpZG97Kyt0fXdoaWxlKGU9ZS5uZXh0KX0pKSx0fSxTcy52aXNpdD1mdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxhLG8scz1bXSxjPXRoaXMuX3Jvb3Q7Zm9yKGMmJnMucHVzaChuZXcgX3MoYyx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO2U9cy5wb3AoKTspaWYoIXQoYz1lLm5vZGUscj1lLngwLGk9ZS55MCxhPWUueDEsbz1lLnkxKSYmYy5sZW5ndGgpe3ZhciB1PShyK2EpLzIsbD0oaStvKS8yOyhuPWNbM10pJiZzLnB1c2gobmV3IF9zKG4sdSxsLGEsbykpLChuPWNbMl0pJiZzLnB1c2gobmV3IF9zKG4scixsLHUsbykpLChuPWNbMV0pJiZzLnB1c2gobmV3IF9zKG4sdSxpLGEsbCkpLChuPWNbMF0pJiZzLnB1c2gobmV3IF9zKG4scixpLHUsbCkpfXJldHVybiB0aGlzfSxTcy52aXNpdEFmdGVyPWZ1bmN0aW9uKHQpe3ZhciBlLG49W10scj1bXTtmb3IodGhpcy5fcm9vdCYmbi5wdXNoKG5ldyBfcyh0aGlzLl9yb290LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7ZT1uLnBvcCgpOyl7dmFyIGk9ZS5ub2RlO2lmKGkubGVuZ3RoKXt2YXIgYSxvPWUueDAscz1lLnkwLGM9ZS54MSx1PWUueTEsbD0obytjKS8yLGg9KHMrdSkvMjsoYT1pWzBdKSYmbi5wdXNoKG5ldyBfcyhhLG8scyxsLGgpKSwoYT1pWzFdKSYmbi5wdXNoKG5ldyBfcyhhLGwscyxjLGgpKSwoYT1pWzJdKSYmbi5wdXNoKG5ldyBfcyhhLG8saCxsLHUpKSwoYT1pWzNdKSYmbi5wdXNoKG5ldyBfcyhhLGwsaCxjLHUpKX1yLnB1c2goZSl9Zm9yKDtlPXIucG9wKCk7KXQoZS5ub2RlLGUueDAsZS55MCxlLngxLGUueTEpO3JldHVybiB0aGlzfSxTcy54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl94PXQsdGhpcyk6dGhpcy5feH0sU3MueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT10LHRoaXMpOnRoaXMuX3l9O3ZhciBPcz1mdW5jdGlvbih0KXt2YXIgZSxuLHI9MSxpPTE7ZnVuY3Rpb24gYSgpe2Zvcih2YXIgdCxhLHMsYyx1LGwsaCxmPWUubGVuZ3RoLGQ9MDtkPGk7KytkKWZvcihhPUVzKGUsQXMsTXMpLnZpc2l0QWZ0ZXIobyksdD0wO3Q8ZjsrK3Qpcz1lW3RdLGw9bltzLmluZGV4XSxoPWwqbCxjPXMueCtzLnZ4LHU9cy55K3MudnksYS52aXNpdChwKTtmdW5jdGlvbiBwKHQsZSxuLGksYSl7dmFyIG89dC5kYXRhLGY9dC5yLGQ9bCtmO2lmKCFvKXJldHVybiBlPmMrZHx8aTxjLWR8fG4+dStkfHxhPHUtZDtpZihvLmluZGV4PnMuaW5kZXgpe3ZhciBwPWMtby54LW8udngseT11LW8ueS1vLnZ5LGc9cCpwK3kqeTtnPGQqZCYmKDA9PT1wJiYoZys9KHA9YnMoKSkqcCksMD09PXkmJihnKz0oeT1icygpKSp5KSxnPShkLShnPU1hdGguc3FydChnKSkpL2cqcixzLnZ4Kz0ocCo9ZykqKGQ9KGYqPWYpLyhoK2YpKSxzLnZ5Kz0oeSo9ZykqZCxvLnZ4LT1wKihkPTEtZCksby52eS09eSpkKX19fWZ1bmN0aW9uIG8odCl7aWYodC5kYXRhKXJldHVybiB0LnI9blt0LmRhdGEuaW5kZXhdO2Zvcih2YXIgZT10LnI9MDtlPDQ7KytlKXRbZV0mJnRbZV0ucj50LnImJih0LnI9dFtlXS5yKX1mdW5jdGlvbiBzKCl7aWYoZSl7dmFyIHIsaSxhPWUubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShhKSxyPTA7cjxhOysrcilpPWVbcl0sbltpLmluZGV4XT0rdChpLHIsZSl9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1tcyhudWxsPT10PzE6K3QpKSxhLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7ZT10LHMoKX0sYS5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0LGEpOml9LGEuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3QsYSk6cn0sYS5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTptcygrZSkscygpLGEpOnR9LGF9O2Z1bmN0aW9uIEJzKHQpe3JldHVybiB0LmluZGV4fWZ1bmN0aW9uIE5zKHQsZSl7dmFyIG49dC5nZXQoZSk7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK2UpO3JldHVybiBufXZhciBEcz1mdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxhLG89QnMscz1mdW5jdGlvbih0KXtyZXR1cm4gMS9NYXRoLm1pbihpW3Quc291cmNlLmluZGV4XSxpW3QudGFyZ2V0LmluZGV4XSl9LGM9bXMoMzApLHU9MTtmdW5jdGlvbiBsKHIpe2Zvcih2YXIgaT0wLG89dC5sZW5ndGg7aTx1OysraSlmb3IodmFyIHMsYyxsLGgsZixkLHAseT0wO3k8bzsrK3kpYz0ocz10W3ldKS5zb3VyY2UsaD0obD1zLnRhcmdldCkueCtsLnZ4LWMueC1jLnZ4fHxicygpLGY9bC55K2wudnktYy55LWMudnl8fGJzKCksaCo9ZD0oKGQ9TWF0aC5zcXJ0KGgqaCtmKmYpKS1uW3ldKS9kKnIqZVt5XSxmKj1kLGwudngtPWgqKHA9YVt5XSksbC52eS09ZipwLGMudngrPWgqKHA9MS1wKSxjLnZ5Kz1mKnB9ZnVuY3Rpb24gaCgpe2lmKHIpe3ZhciBzLGMsdT1yLmxlbmd0aCxsPXQubGVuZ3RoLGg9UWkocixvKTtmb3Iocz0wLGk9bmV3IEFycmF5KHUpO3M8bDsrK3MpKGM9dFtzXSkuaW5kZXg9cywib2JqZWN0IiE9dHlwZW9mIGMuc291cmNlJiYoYy5zb3VyY2U9TnMoaCxjLnNvdXJjZSkpLCJvYmplY3QiIT10eXBlb2YgYy50YXJnZXQmJihjLnRhcmdldD1OcyhoLGMudGFyZ2V0KSksaVtjLnNvdXJjZS5pbmRleF09KGlbYy5zb3VyY2UuaW5kZXhdfHwwKSsxLGlbYy50YXJnZXQuaW5kZXhdPShpW2MudGFyZ2V0LmluZGV4XXx8MCkrMTtmb3Iocz0wLGE9bmV3IEFycmF5KGwpO3M8bDsrK3MpYz10W3NdLGFbc109aVtjLnNvdXJjZS5pbmRleF0vKGlbYy5zb3VyY2UuaW5kZXhdK2lbYy50YXJnZXQuaW5kZXhdKTtlPW5ldyBBcnJheShsKSxmKCksbj1uZXcgQXJyYXkobCksZCgpfX1mdW5jdGlvbiBmKCl7aWYocilmb3IodmFyIG49MCxpPXQubGVuZ3RoO248aTsrK24pZVtuXT0rcyh0W25dLG4sdCl9ZnVuY3Rpb24gZCgpe2lmKHIpZm9yKHZhciBlPTAsaT10Lmxlbmd0aDtlPGk7KytlKW5bZV09K2ModFtlXSxlLHQpfXJldHVybiBudWxsPT10JiYodD1bXSksbC5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe3I9dCxoKCl9LGwubGlua3M9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxoKCksbCk6dH0sbC5pZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LGwpOm99LGwuaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rdCxsKTp1fSxsLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bXMoK3QpLGYoKSxsKTpzfSxsLmRpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bXMoK3QpLGQoKSxsKTpjfSxsfTtmdW5jdGlvbiBMcyh0KXtyZXR1cm4gdC54fWZ1bmN0aW9uIElzKHQpe3JldHVybiB0Lnl9dmFyIFJzPU1hdGguUEkqKDMtTWF0aC5zcXJ0KDUpKSxGcz1mdW5jdGlvbih0KXt2YXIgZSxuPTEscj0uMDAxLGk9MS1NYXRoLnBvdyhyLDEvMzAwKSxhPTAsbz0uNixzPVFpKCksYz1xbihsKSx1PWx0KCJ0aWNrIiwiZW5kIik7ZnVuY3Rpb24gbCgpe2goKSx1LmNhbGwoInRpY2siLGUpLG48ciYmKGMuc3RvcCgpLHUuY2FsbCgiZW5kIixlKSl9ZnVuY3Rpb24gaChyKXt2YXIgYyx1LGw9dC5sZW5ndGg7dm9pZCAwPT09ciYmKHI9MSk7Zm9yKHZhciBoPTA7aDxyOysraClmb3Iobis9KGEtbikqaSxzLmVhY2goKGZ1bmN0aW9uKHQpe3Qobil9KSksYz0wO2M8bDsrK2MpbnVsbD09KHU9dFtjXSkuZng/dS54Kz11LnZ4Kj1vOih1Lng9dS5meCx1LnZ4PTApLG51bGw9PXUuZnk/dS55Kz11LnZ5Kj1vOih1Lnk9dS5meSx1LnZ5PTApO3JldHVybiBlfWZ1bmN0aW9uIGYoKXtmb3IodmFyIGUsbj0wLHI9dC5sZW5ndGg7bjxyOysrbil7aWYoKGU9dFtuXSkuaW5kZXg9bixudWxsIT1lLmZ4JiYoZS54PWUuZngpLG51bGwhPWUuZnkmJihlLnk9ZS5meSksaXNOYU4oZS54KXx8aXNOYU4oZS55KSl7dmFyIGk9MTAqTWF0aC5zcXJ0KG4pLGE9bipScztlLng9aSpNYXRoLmNvcyhhKSxlLnk9aSpNYXRoLnNpbihhKX0oaXNOYU4oZS52eCl8fGlzTmFOKGUudnkpKSYmKGUudng9ZS52eT0wKX19ZnVuY3Rpb24gZChlKXtyZXR1cm4gZS5pbml0aWFsaXplJiZlLmluaXRpYWxpemUodCksZX1yZXR1cm4gbnVsbD09dCYmKHQ9W10pLGYoKSxlPXt0aWNrOmgscmVzdGFydDpmdW5jdGlvbigpe3JldHVybiBjLnJlc3RhcnQobCksZX0sc3RvcDpmdW5jdGlvbigpe3JldHVybiBjLnN0b3AoKSxlfSxub2RlczpmdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1uLGYoKSxzLmVhY2goZCksZSk6dH0sYWxwaGE6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3QsZSk6bn0sYWxwaGFNaW46ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3QsZSk6cn0sYWxwaGFEZWNheTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdCxlKToraX0sYWxwaGFUYXJnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K3QsZSk6YX0sdmVsb2NpdHlEZWNheTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0xLXQsZSk6MS1vfSxmb3JjZTpmdW5jdGlvbih0LG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KG51bGw9PW4/cy5yZW1vdmUodCk6cy5zZXQodCxkKG4pKSxlKTpzLmdldCh0KX0sZmluZDpmdW5jdGlvbihlLG4scil7dmFyIGksYSxvLHMsYyx1PTAsbD10Lmxlbmd0aDtmb3IobnVsbD09cj9yPTEvMDpyKj1yLHU9MDt1PGw7Kyt1KShvPShpPWUtKHM9dFt1XSkueCkqaSsoYT1uLXMueSkqYSk8ciYmKGM9cyxyPW8pO3JldHVybiBjfSxvbjpmdW5jdGlvbih0LG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KHUub24odCxuKSxlKTp1Lm9uKHQpfX19LFBzPWZ1bmN0aW9uKCl7dmFyIHQsZSxuLHIsaT1tcygtMzApLGE9MSxvPTEvMCxzPS44MTtmdW5jdGlvbiBjKHIpe3ZhciBpLGE9dC5sZW5ndGgsbz1Fcyh0LExzLElzKS52aXNpdEFmdGVyKGwpO2ZvcihuPXIsaT0wO2k8YTsrK2kpZT10W2ldLG8udmlzaXQoaCl9ZnVuY3Rpb24gdSgpe2lmKHQpe3ZhciBlLG4sYT10Lmxlbmd0aDtmb3Iocj1uZXcgQXJyYXkoYSksZT0wO2U8YTsrK2Upbj10W2VdLHJbbi5pbmRleF09K2kobixlLHQpfX1mdW5jdGlvbiBsKHQpe3ZhciBlLG4saSxhLG8scz0wLGM9MDtpZih0Lmxlbmd0aCl7Zm9yKGk9YT1vPTA7bzw0OysrbykoZT10W29dKSYmKG49TWF0aC5hYnMoZS52YWx1ZSkpJiYocys9ZS52YWx1ZSxjKz1uLGkrPW4qZS54LGErPW4qZS55KTt0Lng9aS9jLHQueT1hL2N9ZWxzZXsoZT10KS54PWUuZGF0YS54LGUueT1lLmRhdGEueTtkb3tzKz1yW2UuZGF0YS5pbmRleF19d2hpbGUoZT1lLm5leHQpfXQudmFsdWU9c31mdW5jdGlvbiBoKHQsaSxjLHUpe2lmKCF0LnZhbHVlKXJldHVybiEwO3ZhciBsPXQueC1lLngsaD10LnktZS55LGY9dS1pLGQ9bCpsK2gqaDtpZihmKmYvczxkKXJldHVybiBkPG8mJigwPT09bCYmKGQrPShsPWJzKCkpKmwpLDA9PT1oJiYoZCs9KGg9YnMoKSkqaCksZDxhJiYoZD1NYXRoLnNxcnQoYSpkKSksZS52eCs9bCp0LnZhbHVlKm4vZCxlLnZ5Kz1oKnQudmFsdWUqbi9kKSwhMDtpZighKHQubGVuZ3RofHxkPj1vKSl7KHQuZGF0YSE9PWV8fHQubmV4dCkmJigwPT09bCYmKGQrPShsPWJzKCkpKmwpLDA9PT1oJiYoZCs9KGg9YnMoKSkqaCksZDxhJiYoZD1NYXRoLnNxcnQoYSpkKSkpO2Rve3QuZGF0YSE9PWUmJihmPXJbdC5kYXRhLmluZGV4XSpuL2QsZS52eCs9bCpmLGUudnkrPWgqZil9d2hpbGUodD10Lm5leHQpfX1yZXR1cm4gYy5pbml0aWFsaXplPWZ1bmN0aW9uKGUpe3Q9ZSx1KCl9LGMuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDptcygrdCksdSgpLGMpOml9LGMuZGlzdGFuY2VNaW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCp0LGMpOk1hdGguc3FydChhKX0sYy5kaXN0YW5jZU1heD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10KnQsYyk6TWF0aC5zcXJ0KG8pfSxjLnRoZXRhPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXQqdCxjKTpNYXRoLnNxcnQocyl9LGN9LGpzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGEsbz1tcyguMSk7ZnVuY3Rpb24gcyh0KXtmb3IodmFyIG89MCxzPXIubGVuZ3RoO288czsrK28pe3ZhciBjPXJbb10sdT1jLngtZXx8MWUtNixsPWMueS1ufHwxZS02LGg9TWF0aC5zcXJ0KHUqdStsKmwpLGY9KGFbb10taCkqaVtvXSp0L2g7Yy52eCs9dSpmLGMudnkrPWwqZn19ZnVuY3Rpb24gYygpe2lmKHIpe3ZhciBlLG49ci5sZW5ndGg7Zm9yKGk9bmV3IEFycmF5KG4pLGE9bmV3IEFycmF5KG4pLGU9MDtlPG47KytlKWFbZV09K3QocltlXSxlLHIpLGlbZV09aXNOYU4oYVtlXSk/MDorbyhyW2VdLGUscil9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1tcygrdCkpLG51bGw9PWUmJihlPTApLG51bGw9PW4mJihuPTApLHMuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtyPXQsYygpfSxzLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bXMoK3QpLGMoKSxzKTpvfSxzLnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOm1zKCtlKSxjKCkscyk6dH0scy54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LHMpOmV9LHMueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxzKTpufSxzfSxZcz1mdW5jdGlvbih0KXt2YXIgZSxuLHIsaT1tcyguMSk7ZnVuY3Rpb24gYSh0KXtmb3IodmFyIGksYT0wLG89ZS5sZW5ndGg7YTxvOysrYSkoaT1lW2FdKS52eCs9KHJbYV0taS54KSpuW2FdKnR9ZnVuY3Rpb24gbygpe2lmKGUpe3ZhciBhLG89ZS5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KG8pLHI9bmV3IEFycmF5KG8pLGE9MDthPG87KythKW5bYV09aXNOYU4oclthXT0rdChlW2FdLGEsZSkpPzA6K2koZVthXSxhLGUpfX1yZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9bXMobnVsbD09dD8wOit0KSksYS5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2U9dCxvKCl9LGEuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDptcygrdCksbygpLGEpOml9LGEueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOm1zKCtlKSxvKCksYSk6dH0sYX0senM9ZnVuY3Rpb24odCl7dmFyIGUsbixyLGk9bXMoLjEpO2Z1bmN0aW9uIGEodCl7Zm9yKHZhciBpLGE9MCxvPWUubGVuZ3RoO2E8bzsrK2EpKGk9ZVthXSkudnkrPShyW2FdLWkueSkqblthXSp0fWZ1bmN0aW9uIG8oKXtpZihlKXt2YXIgYSxvPWUubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShvKSxyPW5ldyBBcnJheShvKSxhPTA7YTxvOysrYSluW2FdPWlzTmFOKHJbYV09K3QoZVthXSxhLGUpKT8wOitpKGVbYV0sYSxlKX19cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PW1zKG51bGw9PXQ/MDordCkpLGEuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtlPXQsbygpfSxhLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bXMoK3QpLG8oKSxhKTppfSxhLnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTptcygrZSksbygpLGEpOnR9LGF9LFVzPWZ1bmN0aW9uKHQsZSl7aWYoKG49KHQ9ZT90LnRvRXhwb25lbnRpYWwoZS0xKTp0LnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciBuLHI9dC5zbGljZSgwLG4pO3JldHVybltyLmxlbmd0aD4xP3JbMF0rci5zbGljZSgyKTpyLCt0LnNsaWNlKG4rMSldfSwkcz1mdW5jdGlvbih0KXtyZXR1cm4odD1VcyhNYXRoLmFicyh0KSkpP3RbMV06TmFOfSxxcz0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC0oIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KH4pPyhbYS16JV0pPyQvaTtmdW5jdGlvbiBXcyh0KXtpZighKGU9cXMuZXhlYyh0KSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIit0KTt2YXIgZTtyZXR1cm4gbmV3IFZzKHtmaWxsOmVbMV0sYWxpZ246ZVsyXSxzaWduOmVbM10sc3ltYm9sOmVbNF0semVybzplWzVdLHdpZHRoOmVbNl0sY29tbWE6ZVs3XSxwcmVjaXNpb246ZVs4XSYmZVs4XS5zbGljZSgxKSx0cmltOmVbOV0sdHlwZTplWzEwXX0pfWZ1bmN0aW9uIFZzKHQpe3RoaXMuZmlsbD12b2lkIDA9PT10LmZpbGw/IiAiOnQuZmlsbCsiIix0aGlzLmFsaWduPXZvaWQgMD09PXQuYWxpZ24/Ij4iOnQuYWxpZ24rIiIsdGhpcy5zaWduPXZvaWQgMD09PXQuc2lnbj8iLSI6dC5zaWduKyIiLHRoaXMuc3ltYm9sPXZvaWQgMD09PXQuc3ltYm9sPyIiOnQuc3ltYm9sKyIiLHRoaXMuemVybz0hIXQuemVybyx0aGlzLndpZHRoPXZvaWQgMD09PXQud2lkdGg/dm9pZCAwOit0LndpZHRoLHRoaXMuY29tbWE9ISF0LmNvbW1hLHRoaXMucHJlY2lzaW9uPXZvaWQgMD09PXQucHJlY2lzaW9uP3ZvaWQgMDordC5wcmVjaXNpb24sdGhpcy50cmltPSEhdC50cmltLHRoaXMudHlwZT12b2lkIDA9PT10LnR5cGU/IiI6dC50eXBlKyIifVdzLnByb3RvdHlwZT1Wcy5wcm90b3R5cGUsVnMucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHZvaWQgMD09PXRoaXMud2lkdGg/IiI6TWF0aC5tYXgoMSwwfHRoaXMud2lkdGgpKSsodGhpcy5jb21tYT8iLCI6IiIpKyh2b2lkIDA9PT10aGlzLnByZWNpc2lvbj8iIjoiLiIrTWF0aC5tYXgoMCwwfHRoaXMucHJlY2lzaW9uKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMudHlwZX07dmFyIEhzLEdzLFhzLFpzLFFzPWZ1bmN0aW9uKHQsZSl7dmFyIG49VXModCxlKTtpZighbilyZXR1cm4gdCsiIjt2YXIgcj1uWzBdLGk9blsxXTtyZXR1cm4gaTwwPyIwLiIrbmV3IEFycmF5KC1pKS5qb2luKCIwIikrcjpyLmxlbmd0aD5pKzE/ci5zbGljZSgwLGkrMSkrIi4iK3Iuc2xpY2UoaSsxKTpyK25ldyBBcnJheShpLXIubGVuZ3RoKzIpLmpvaW4oIjAiKX0sS3M9eyIlIjpmdW5jdGlvbih0LGUpe3JldHVybigxMDAqdCkudG9GaXhlZChlKX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygyKX0sYzpmdW5jdGlvbih0KXtyZXR1cm4gdCsiIn0sZDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxMCl9LGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b0V4cG9uZW50aWFsKGUpfSxmOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9GaXhlZChlKX0sZzpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvUHJlY2lzaW9uKGUpfSxvOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDgpfSxwOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFFzKDEwMCp0LGUpfSxyOlFzLHM6ZnVuY3Rpb24odCxlKXt2YXIgbj1Vcyh0LGUpO2lmKCFuKXJldHVybiB0KyIiO3ZhciByPW5bMF0saT1uWzFdLGE9aS0oSHM9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoaS8zKSkpKSsxLG89ci5sZW5ndGg7cmV0dXJuIGE9PT1vP3I6YT5vP3IrbmV3IEFycmF5KGEtbysxKS5qb2luKCIwIik6YT4wP3Iuc2xpY2UoMCxhKSsiLiIrci5zbGljZShhKToiMC4iK25ldyBBcnJheSgxLWEpLmpvaW4oIjAiKStVcyh0LE1hdGgubWF4KDAsZSthLTEpKVswXX0sWDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0seDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNil9fSxKcz1mdW5jdGlvbih0KXtyZXR1cm4gdH0sdGM9QXJyYXkucHJvdG90eXBlLm1hcCxlYz1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIsK1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl0sbmM9ZnVuY3Rpb24odCl7dmFyIGUsbixyPXZvaWQgMD09PXQuZ3JvdXBpbmd8fHZvaWQgMD09PXQudGhvdXNhbmRzP0pzOihlPXRjLmNhbGwodC5ncm91cGluZyxOdW1iZXIpLG49dC50aG91c2FuZHMrIiIsZnVuY3Rpb24odCxyKXtmb3IodmFyIGk9dC5sZW5ndGgsYT1bXSxvPTAscz1lWzBdLGM9MDtpPjAmJnM+MCYmKGMrcysxPnImJihzPU1hdGgubWF4KDEsci1jKSksYS5wdXNoKHQuc3Vic3RyaW5nKGktPXMsaStzKSksISgoYys9cysxKT5yKSk7KXM9ZVtvPShvKzEpJWUubGVuZ3RoXTtyZXR1cm4gYS5yZXZlcnNlKCkuam9pbihuKX0pLGk9dm9pZCAwPT09dC5jdXJyZW5jeT8iIjp0LmN1cnJlbmN5WzBdKyIiLGE9dm9pZCAwPT09dC5jdXJyZW5jeT8iIjp0LmN1cnJlbmN5WzFdKyIiLG89dm9pZCAwPT09dC5kZWNpbWFsPyIuIjp0LmRlY2ltYWwrIiIscz12b2lkIDA9PT10Lm51bWVyYWxzP0pzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bMC05XS9nLChmdW5jdGlvbihlKXtyZXR1cm4gdFsrZV19KSl9fSh0Yy5jYWxsKHQubnVtZXJhbHMsU3RyaW5nKSksYz12b2lkIDA9PT10LnBlcmNlbnQ/IiUiOnQucGVyY2VudCsiIix1PXZvaWQgMD09PXQubWludXM/Ii0iOnQubWludXMrIiIsbD12b2lkIDA9PT10Lm5hbj8iTmFOIjp0Lm5hbisiIjtmdW5jdGlvbiBoKHQpe3ZhciBlPSh0PVdzKHQpKS5maWxsLG49dC5hbGlnbixoPXQuc2lnbixmPXQuc3ltYm9sLGQ9dC56ZXJvLHA9dC53aWR0aCx5PXQuY29tbWEsZz10LnByZWNpc2lvbix2PXQudHJpbSxtPXQudHlwZTsibiI9PT1tPyh5PSEwLG09ImciKTpLc1ttXXx8KHZvaWQgMD09PWcmJihnPTEyKSx2PSEwLG09ImciKSwoZHx8IjAiPT09ZSYmIj0iPT09bikmJihkPSEwLGU9IjAiLG49Ij0iKTt2YXIgYj0iJCI9PT1mP2k6IiMiPT09ZiYmL1tib3hYXS8udGVzdChtKT8iMCIrbS50b0xvd2VyQ2FzZSgpOiIiLHg9IiQiPT09Zj9hOi9bJXBdLy50ZXN0KG0pP2M6IiIsXz1Lc1ttXSxrPS9bZGVmZ3BycyVdLy50ZXN0KG0pO2Z1bmN0aW9uIHcodCl7dmFyIGksYSxjLGY9Yix3PXg7aWYoImMiPT09bSl3PV8odCkrdyx0PSIiO2Vsc2V7dmFyIEU9KHQ9K3QpPDA7aWYodD1pc05hTih0KT9sOl8oTWF0aC5hYnModCksZyksdiYmKHQ9ZnVuY3Rpb24odCl7dDpmb3IodmFyIGUsbj10Lmxlbmd0aCxyPTEsaT0tMTtyPG47KytyKXN3aXRjaCh0W3JdKXtjYXNlIi4iOmk9ZT1yO2JyZWFrO2Nhc2UiMCI6MD09PWkmJihpPXIpLGU9cjticmVhaztkZWZhdWx0OmlmKCErdFtyXSlicmVhayB0O2k+MCYmKGk9MCl9cmV0dXJuIGk+MD90LnNsaWNlKDAsaSkrdC5zbGljZShlKzEpOnR9KHQpKSxFJiYwPT0rdCYmKEU9ITEpLGY9KEU/IigiPT09aD9oOnU6Ii0iPT09aHx8IigiPT09aD8iIjpoKStmLHc9KCJzIj09PW0/ZWNbOCtIcy8zXToiIikrdysoRSYmIigiPT09aD8iKSI6IiIpLGspZm9yKGk9LTEsYT10Lmxlbmd0aDsrK2k8YTspaWYoNDg+KGM9dC5jaGFyQ29kZUF0KGkpKXx8Yz41Nyl7dz0oNDY9PT1jP28rdC5zbGljZShpKzEpOnQuc2xpY2UoaSkpK3csdD10LnNsaWNlKDAsaSk7YnJlYWt9fXkmJiFkJiYodD1yKHQsMS8wKSk7dmFyIFQ9Zi5sZW5ndGgrdC5sZW5ndGgrdy5sZW5ndGgsQz1UPHA/bmV3IEFycmF5KHAtVCsxKS5qb2luKGUpOiIiO3N3aXRjaCh5JiZkJiYodD1yKEMrdCxDLmxlbmd0aD9wLXcubGVuZ3RoOjEvMCksQz0iIiksbil7Y2FzZSI8Ijp0PWYrdCt3K0M7YnJlYWs7Y2FzZSI9Ijp0PWYrQyt0K3c7YnJlYWs7Y2FzZSJeIjp0PUMuc2xpY2UoMCxUPUMubGVuZ3RoPj4xKStmK3QrdytDLnNsaWNlKFQpO2JyZWFrO2RlZmF1bHQ6dD1DK2YrdCt3fXJldHVybiBzKHQpfXJldHVybiBnPXZvaWQgMD09PWc/NjovW2dwcnNdLy50ZXN0KG0pP01hdGgubWF4KDEsTWF0aC5taW4oMjEsZykpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsZykpLHcudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdCsiIn0sd31yZXR1cm57Zm9ybWF0OmgsZm9ybWF0UHJlZml4OmZ1bmN0aW9uKHQsZSl7dmFyIG49aCgoKHQ9V3ModCkpLnR5cGU9ImYiLHQpKSxyPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKCRzKGUpLzMpKSksaT1NYXRoLnBvdygxMCwtciksYT1lY1s4K3IvM107cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBuKGkqdCkrYX19fX07ZnVuY3Rpb24gcmModCl7cmV0dXJuIEdzPW5jKHQpLFhzPUdzLmZvcm1hdCxacz1Hcy5mb3JtYXRQcmVmaXgsR3N9cmMoe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdLG1pbnVzOiItIn0pO3ZhciBpYz1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoMCwtJHMoTWF0aC5hYnModCkpKX0sYWM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXgoMCwzKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcigkcyhlKS8zKSkpLSRzKE1hdGguYWJzKHQpKSl9LG9jPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9TWF0aC5hYnModCksZT1NYXRoLmFicyhlKS10LE1hdGgubWF4KDAsJHMoZSktJHModCkpKzF9LHNjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBjY307ZnVuY3Rpb24gY2MoKXt0aGlzLnJlc2V0KCl9Y2MucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpjYyxyZXNldDpmdW5jdGlvbigpe3RoaXMucz10aGlzLnQ9MH0sYWRkOmZ1bmN0aW9uKHQpe2xjKHVjLHQsdGhpcy50KSxsYyh0aGlzLHVjLnMsdGhpcy5zKSx0aGlzLnM/dGhpcy50Kz11Yy50OnRoaXMucz11Yy50fSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O3ZhciB1Yz1uZXcgY2M7ZnVuY3Rpb24gbGModCxlLG4pe3ZhciByPXQucz1lK24saT1yLWUsYT1yLWk7dC50PWUtYSsobi1pKX12YXIgaGM9TWF0aC5QSSxmYz1oYy8yLGRjPWhjLzQscGM9MipoYyx5Yz0xODAvaGMsZ2M9aGMvMTgwLHZjPU1hdGguYWJzLG1jPU1hdGguYXRhbixiYz1NYXRoLmF0YW4yLHhjPU1hdGguY29zLF9jPU1hdGguY2VpbCxrYz1NYXRoLmV4cCx3Yz0oTWF0aC5mbG9vcixNYXRoLmxvZyksRWM9TWF0aC5wb3csVGM9TWF0aC5zaW4sQ2M9TWF0aC5zaWdufHxmdW5jdGlvbih0KXtyZXR1cm4gdD4wPzE6dDwwPy0xOjB9LFNjPU1hdGguc3FydCxBYz1NYXRoLnRhbjtmdW5jdGlvbiBNYyh0KXtyZXR1cm4gdD4xPzA6dDwtMT9oYzpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gT2ModCl7cmV0dXJuIHQ+MT9mYzp0PC0xPy1mYzpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gQmModCl7cmV0dXJuKHQ9VGModC8yKSkqdH1mdW5jdGlvbiBOYygpe31mdW5jdGlvbiBEYyh0LGUpe3QmJkljLmhhc093blByb3BlcnR5KHQudHlwZSkmJkljW3QudHlwZV0odCxlKX12YXIgTGM9e0ZlYXR1cmU6ZnVuY3Rpb24odCxlKXtEYyh0Lmdlb21ldHJ5LGUpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmZlYXR1cmVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspRGMobltyXS5nZW9tZXRyeSxlKX19LEljPXtTcGhlcmU6ZnVuY3Rpb24odCxlKXtlLnNwaGVyZSgpfSxQb2ludDpmdW5jdGlvbih0LGUpe3Q9dC5jb29yZGluYXRlcyxlLnBvaW50KHRbMF0sdFsxXSx0WzJdKX0sTXVsdGlQb2ludDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspdD1uW3JdLGUucG9pbnQodFswXSx0WzFdLHRbMl0pfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7UmModC5jb29yZGluYXRlcyxlLDApfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KVJjKG5bcl0sZSwwKX0sUG9seWdvbjpmdW5jdGlvbih0LGUpe0ZjKHQuY29vcmRpbmF0ZXMsZSl9LE11bHRpUG9seWdvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspRmMobltyXSxlKX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuZ2VvbWV0cmllcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KURjKG5bcl0sZSl9fTtmdW5jdGlvbiBSYyh0LGUsbil7dmFyIHIsaT0tMSxhPXQubGVuZ3RoLW47Zm9yKGUubGluZVN0YXJ0KCk7KytpPGE7KXI9dFtpXSxlLnBvaW50KHJbMF0sclsxXSxyWzJdKTtlLmxpbmVFbmQoKX1mdW5jdGlvbiBGYyh0LGUpe3ZhciBuPS0xLHI9dC5sZW5ndGg7Zm9yKGUucG9seWdvblN0YXJ0KCk7KytuPHI7KVJjKHRbbl0sZSwxKTtlLnBvbHlnb25FbmQoKX12YXIgUGMsamMsWWMsemMsVWMsJGM9ZnVuY3Rpb24odCxlKXt0JiZMYy5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP0xjW3QudHlwZV0odCxlKTpEYyh0LGUpfSxxYz1zYygpLFdjPXNjKCksVmM9e3BvaW50Ok5jLGxpbmVTdGFydDpOYyxsaW5lRW5kOk5jLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3FjLnJlc2V0KCksVmMubGluZVN0YXJ0PUhjLFZjLmxpbmVFbmQ9R2N9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgdD0rcWM7V2MuYWRkKHQ8MD9wYyt0OnQpLHRoaXMubGluZVN0YXJ0PXRoaXMubGluZUVuZD10aGlzLnBvaW50PU5jfSxzcGhlcmU6ZnVuY3Rpb24oKXtXYy5hZGQocGMpfX07ZnVuY3Rpb24gSGMoKXtWYy5wb2ludD1YY31mdW5jdGlvbiBHYygpe1pjKFBjLGpjKX1mdW5jdGlvbiBYYyh0LGUpe1ZjLnBvaW50PVpjLFBjPXQsamM9ZSxZYz10Kj1nYyx6Yz14YyhlPShlKj1nYykvMitkYyksVWM9VGMoZSl9ZnVuY3Rpb24gWmModCxlKXt2YXIgbj0odCo9Z2MpLVljLHI9bj49MD8xOi0xLGk9cipuLGE9eGMoZT0oZSo9Z2MpLzIrZGMpLG89VGMoZSkscz1VYypvLGM9emMqYStzKnhjKGkpLHU9cypyKlRjKGkpO3FjLmFkZChiYyh1LGMpKSxZYz10LHpjPWEsVWM9b312YXIgUWM9ZnVuY3Rpb24odCl7cmV0dXJuIFdjLnJlc2V0KCksJGModCxWYyksMipXY307ZnVuY3Rpb24gS2ModCl7cmV0dXJuW2JjKHRbMV0sdFswXSksT2ModFsyXSldfWZ1bmN0aW9uIEpjKHQpe3ZhciBlPXRbMF0sbj10WzFdLHI9eGMobik7cmV0dXJuW3IqeGMoZSkscipUYyhlKSxUYyhuKV19ZnVuY3Rpb24gdHUodCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXSt0WzJdKmVbMl19ZnVuY3Rpb24gZXUodCxlKXtyZXR1cm5bdFsxXSplWzJdLXRbMl0qZVsxXSx0WzJdKmVbMF0tdFswXSplWzJdLHRbMF0qZVsxXS10WzFdKmVbMF1dfWZ1bmN0aW9uIG51KHQsZSl7dFswXSs9ZVswXSx0WzFdKz1lWzFdLHRbMl0rPWVbMl19ZnVuY3Rpb24gcnUodCxlKXtyZXR1cm5bdFswXSplLHRbMV0qZSx0WzJdKmVdfWZ1bmN0aW9uIGl1KHQpe3ZhciBlPVNjKHRbMF0qdFswXSt0WzFdKnRbMV0rdFsyXSp0WzJdKTt0WzBdLz1lLHRbMV0vPWUsdFsyXS89ZX12YXIgYXUsb3Usc3UsY3UsdXUsbHUsaHUsZnUsZHUscHUseXU9c2MoKSxndT17cG9pbnQ6dnUsbGluZVN0YXJ0OmJ1LGxpbmVFbmQ6eHUscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Z3UucG9pbnQ9X3UsZ3UubGluZVN0YXJ0PWt1LGd1LmxpbmVFbmQ9d3UseXUucmVzZXQoKSxWYy5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe1ZjLnBvbHlnb25FbmQoKSxndS5wb2ludD12dSxndS5saW5lU3RhcnQ9YnUsZ3UubGluZUVuZD14dSxxYzwwPyhhdT0tKHN1PTE4MCksb3U9LShjdT05MCkpOnl1PjFlLTY/Y3U9OTA6eXU8LTFlLTYmJihvdT0tOTApLHB1WzBdPWF1LHB1WzFdPXN1fSxzcGhlcmU6ZnVuY3Rpb24oKXthdT0tKHN1PTE4MCksb3U9LShjdT05MCl9fTtmdW5jdGlvbiB2dSh0LGUpe2R1LnB1c2gocHU9W2F1PXQsc3U9dF0pLGU8b3UmJihvdT1lKSxlPmN1JiYoY3U9ZSl9ZnVuY3Rpb24gbXUodCxlKXt2YXIgbj1KYyhbdCpnYyxlKmdjXSk7aWYoZnUpe3ZhciByPWV1KGZ1LG4pLGk9ZXUoW3JbMV0sLXJbMF0sMF0scik7aXUoaSksaT1LYyhpKTt2YXIgYSxvPXQtdXUscz1vPjA/MTotMSxjPWlbMF0qeWMqcyx1PXZjKG8pPjE4MDt1XihzKnV1PGMmJmM8cyp0KT8oYT1pWzFdKnljKT5jdSYmKGN1PWEpOnVeKHMqdXU8KGM9KGMrMzYwKSUzNjAtMTgwKSYmYzxzKnQpPyhhPS1pWzFdKnljKTxvdSYmKG91PWEpOihlPG91JiYob3U9ZSksZT5jdSYmKGN1PWUpKSx1P3Q8dXU/RXUoYXUsdCk+RXUoYXUsc3UpJiYoc3U9dCk6RXUodCxzdSk+RXUoYXUsc3UpJiYoYXU9dCk6c3U+PWF1Pyh0PGF1JiYoYXU9dCksdD5zdSYmKHN1PXQpKTp0PnV1P0V1KGF1LHQpPkV1KGF1LHN1KSYmKHN1PXQpOkV1KHQsc3UpPkV1KGF1LHN1KSYmKGF1PXQpfWVsc2UgZHUucHVzaChwdT1bYXU9dCxzdT10XSk7ZTxvdSYmKG91PWUpLGU+Y3UmJihjdT1lKSxmdT1uLHV1PXR9ZnVuY3Rpb24gYnUoKXtndS5wb2ludD1tdX1mdW5jdGlvbiB4dSgpe3B1WzBdPWF1LHB1WzFdPXN1LGd1LnBvaW50PXZ1LGZ1PW51bGx9ZnVuY3Rpb24gX3UodCxlKXtpZihmdSl7dmFyIG49dC11dTt5dS5hZGQodmMobik+MTgwP24rKG4+MD8zNjA6LTM2MCk6bil9ZWxzZSBsdT10LGh1PWU7VmMucG9pbnQodCxlKSxtdSh0LGUpfWZ1bmN0aW9uIGt1KCl7VmMubGluZVN0YXJ0KCl9ZnVuY3Rpb24gd3UoKXtfdShsdSxodSksVmMubGluZUVuZCgpLHZjKHl1KT4xZS02JiYoYXU9LShzdT0xODApKSxwdVswXT1hdSxwdVsxXT1zdSxmdT1udWxsfWZ1bmN0aW9uIEV1KHQsZSl7cmV0dXJuKGUtPXQpPDA/ZSszNjA6ZX1mdW5jdGlvbiBUdSh0LGUpe3JldHVybiB0WzBdLWVbMF19ZnVuY3Rpb24gQ3UodCxlKXtyZXR1cm4gdFswXTw9dFsxXT90WzBdPD1lJiZlPD10WzFdOmU8dFswXXx8dFsxXTxlfXZhciBTdSxBdSxNdSxPdSxCdSxOdSxEdSxMdSxJdSxSdSxGdSxQdSxqdSxZdSx6dSxVdSwkdT1mdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxhLG8scztpZihjdT1zdT0tKGF1PW91PTEvMCksZHU9W10sJGModCxndSksbj1kdS5sZW5ndGgpe2ZvcihkdS5zb3J0KFR1KSxlPTEsYT1bcj1kdVswXV07ZTxuOysrZSlDdShyLChpPWR1W2VdKVswXSl8fEN1KHIsaVsxXSk/KEV1KHJbMF0saVsxXSk+RXUoclswXSxyWzFdKSYmKHJbMV09aVsxXSksRXUoaVswXSxyWzFdKT5FdShyWzBdLHJbMV0pJiYoclswXT1pWzBdKSk6YS5wdXNoKHI9aSk7Zm9yKG89LTEvMCxlPTAscj1hW249YS5sZW5ndGgtMV07ZTw9bjtyPWksKytlKWk9YVtlXSwocz1FdShyWzFdLGlbMF0pKT5vJiYobz1zLGF1PWlbMF0sc3U9clsxXSl9cmV0dXJuIGR1PXB1PW51bGwsYXU9PT0xLzB8fG91PT09MS8wP1tbTmFOLE5hTl0sW05hTixOYU5dXTpbW2F1LG91XSxbc3UsY3VdXX0scXU9e3NwaGVyZTpOYyxwb2ludDpXdSxsaW5lU3RhcnQ6SHUsbGluZUVuZDpadSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtxdS5saW5lU3RhcnQ9UXUscXUubGluZUVuZD1LdX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3F1LmxpbmVTdGFydD1IdSxxdS5saW5lRW5kPVp1fX07ZnVuY3Rpb24gV3UodCxlKXt0Kj1nYzt2YXIgbj14YyhlKj1nYyk7VnUobip4Yyh0KSxuKlRjKHQpLFRjKGUpKX1mdW5jdGlvbiBWdSh0LGUsbil7KytTdSxNdSs9KHQtTXUpL1N1LE91Kz0oZS1PdSkvU3UsQnUrPShuLUJ1KS9TdX1mdW5jdGlvbiBIdSgpe3F1LnBvaW50PUd1fWZ1bmN0aW9uIEd1KHQsZSl7dCo9Z2M7dmFyIG49eGMoZSo9Z2MpO1l1PW4qeGModCksenU9bipUYyh0KSxVdT1UYyhlKSxxdS5wb2ludD1YdSxWdShZdSx6dSxVdSl9ZnVuY3Rpb24gWHUodCxlKXt0Kj1nYzt2YXIgbj14YyhlKj1nYykscj1uKnhjKHQpLGk9bipUYyh0KSxhPVRjKGUpLG89YmMoU2MoKG89enUqYS1VdSppKSpvKyhvPVV1KnItWXUqYSkqbysobz1ZdSppLXp1KnIpKm8pLFl1KnIrenUqaStVdSphKTtBdSs9byxOdSs9byooWXUrKFl1PXIpKSxEdSs9byooenUrKHp1PWkpKSxMdSs9byooVXUrKFV1PWEpKSxWdShZdSx6dSxVdSl9ZnVuY3Rpb24gWnUoKXtxdS5wb2ludD1XdX1mdW5jdGlvbiBRdSgpe3F1LnBvaW50PUp1fWZ1bmN0aW9uIEt1KCl7dGwoUHUsanUpLHF1LnBvaW50PVd1fWZ1bmN0aW9uIEp1KHQsZSl7UHU9dCxqdT1lLHQqPWdjLGUqPWdjLHF1LnBvaW50PXRsO3ZhciBuPXhjKGUpO1l1PW4qeGModCksenU9bipUYyh0KSxVdT1UYyhlKSxWdShZdSx6dSxVdSl9ZnVuY3Rpb24gdGwodCxlKXt0Kj1nYzt2YXIgbj14YyhlKj1nYykscj1uKnhjKHQpLGk9bipUYyh0KSxhPVRjKGUpLG89enUqYS1VdSppLHM9VXUqci1ZdSphLGM9WXUqaS16dSpyLHU9U2MobypvK3MqcytjKmMpLGw9T2ModSksaD11JiYtbC91O0l1Kz1oKm8sUnUrPWgqcyxGdSs9aCpjLEF1Kz1sLE51Kz1sKihZdSsoWXU9cikpLER1Kz1sKih6dSsoenU9aSkpLEx1Kz1sKihVdSsoVXU9YSkpLFZ1KFl1LHp1LFV1KX12YXIgZWw9ZnVuY3Rpb24odCl7U3U9QXU9TXU9T3U9QnU9TnU9RHU9THU9SXU9UnU9RnU9MCwkYyh0LHF1KTt2YXIgZT1JdSxuPVJ1LHI9RnUsaT1lKmUrbipuK3IqcjtyZXR1cm4gaTwxZS0xMiYmKGU9TnUsbj1EdSxyPUx1LEF1PDFlLTYmJihlPU11LG49T3Uscj1CdSksKGk9ZSplK24qbityKnIpPDFlLTEyKT9bTmFOLE5hTl06W2JjKG4sZSkqeWMsT2Moci9TYyhpKSkqeWNdfSxubD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LHJsPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbihuLHIpe3JldHVybiBuPXQobixyKSxlKG5bMF0sblsxXSl9cmV0dXJuIHQuaW52ZXJ0JiZlLmludmVydCYmKG4uaW52ZXJ0PWZ1bmN0aW9uKG4scil7cmV0dXJuKG49ZS5pbnZlcnQobixyKSkmJnQuaW52ZXJ0KG5bMF0sblsxXSl9KSxufTtmdW5jdGlvbiBpbCh0LGUpe3JldHVyblt2Yyh0KT5oYz90K01hdGgucm91bmQoLXQvcGMpKnBjOnQsZV19ZnVuY3Rpb24gYWwodCxlLG4pe3JldHVybih0JT1wYyk/ZXx8bj9ybChzbCh0KSxjbChlLG4pKTpzbCh0KTplfHxuP2NsKGUsbik6aWx9ZnVuY3Rpb24gb2wodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuWyhlKz10KT5oYz9lLXBjOmU8LWhjP2UrcGM6ZSxuXX19ZnVuY3Rpb24gc2wodCl7dmFyIGU9b2wodCk7cmV0dXJuIGUuaW52ZXJ0PW9sKC10KSxlfWZ1bmN0aW9uIGNsKHQsZSl7dmFyIG49eGModCkscj1UYyh0KSxpPXhjKGUpLGE9VGMoZSk7ZnVuY3Rpb24gbyh0LGUpe3ZhciBvPXhjKGUpLHM9eGModCkqbyxjPVRjKHQpKm8sdT1UYyhlKSxsPXUqbitzKnI7cmV0dXJuW2JjKGMqaS1sKmEscypuLXUqciksT2MobCppK2MqYSldfXJldHVybiBvLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBvPXhjKGUpLHM9eGModCkqbyxjPVRjKHQpKm8sdT1UYyhlKSxsPXUqaS1jKmE7cmV0dXJuW2JjKGMqaSt1KmEscypuK2wqciksT2MobCpuLXMqcildfSxvfWlsLmludmVydD1pbDt2YXIgdWw9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4oZT10KGVbMF0qZ2MsZVsxXSpnYykpWzBdKj15YyxlWzFdKj15YyxlfXJldHVybiB0PWFsKHRbMF0qZ2MsdFsxXSpnYyx0Lmxlbmd0aD4yP3RbMl0qZ2M6MCksZS5pbnZlcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuKGU9dC5pbnZlcnQoZVswXSpnYyxlWzFdKmdjKSlbMF0qPXljLGVbMV0qPXljLGV9LGV9O2Z1bmN0aW9uIGxsKHQsZSxuLHIsaSxhKXtpZihuKXt2YXIgbz14YyhlKSxzPVRjKGUpLGM9cipuO251bGw9PWk/KGk9ZStyKnBjLGE9ZS1jLzIpOihpPWhsKG8saSksYT1obChvLGEpLChyPjA/aTxhOmk+YSkmJihpKz1yKnBjKSk7Zm9yKHZhciB1LGw9aTtyPjA/bD5hOmw8YTtsLT1jKXU9S2MoW28sLXMqeGMobCksLXMqVGMobCldKSx0LnBvaW50KHVbMF0sdVsxXSl9fWZ1bmN0aW9uIGhsKHQsZSl7KGU9SmMoZSkpWzBdLT10LGl1KGUpO3ZhciBuPU1jKC1lWzFdKTtyZXR1cm4oKC1lWzJdPDA/LW46bikrcGMtMWUtNiklcGN9dmFyIGZsPWZ1bmN0aW9uKCl7dmFyIHQsZSxuPW5sKFswLDBdKSxyPW5sKDkwKSxpPW5sKDYpLGE9e3BvaW50OmZ1bmN0aW9uKG4scil7dC5wdXNoKG49ZShuLHIpKSxuWzBdKj15YyxuWzFdKj15Y319O2Z1bmN0aW9uIG8oKXt2YXIgbz1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxzPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKmdjLGM9aS5hcHBseSh0aGlzLGFyZ3VtZW50cykqZ2M7cmV0dXJuIHQ9W10sZT1hbCgtb1swXSpnYywtb1sxXSpnYywwKS5pbnZlcnQsbGwoYSxzLGMsMSksbz17dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W3RdfSx0PWU9bnVsbCxvfXJldHVybiBvLmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Om5sKFsrdFswXSwrdFsxXV0pLG8pOm59LG8ucmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bmwoK3QpLG8pOnJ9LG8ucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bmwoK3QpLG8pOml9LG99LGRsPWZ1bmN0aW9uKCl7dmFyIHQsZT1bXTtyZXR1cm57cG9pbnQ6ZnVuY3Rpb24oZSxuKXt0LnB1c2goW2Usbl0pfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtlLnB1c2godD1bXSl9LGxpbmVFbmQ6TmMscmVqb2luOmZ1bmN0aW9uKCl7ZS5sZW5ndGg+MSYmZS5wdXNoKGUucG9wKCkuY29uY2F0KGUuc2hpZnQoKSkpfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgbj1lO3JldHVybiBlPVtdLHQ9bnVsbCxufX19LHBsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZjKHRbMF0tZVswXSk8MWUtNiYmdmModFsxXS1lWzFdKTwxZS02fTtmdW5jdGlvbiB5bCh0LGUsbixyKXt0aGlzLng9dCx0aGlzLno9ZSx0aGlzLm89bix0aGlzLmU9cix0aGlzLnY9ITEsdGhpcy5uPXRoaXMucD1udWxsfXZhciBnbD1mdW5jdGlvbih0LGUsbixyLGkpe3ZhciBhLG8scz1bXSxjPVtdO2lmKHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7aWYoISgoZT10Lmxlbmd0aC0xKTw9MCkpe3ZhciBlLG4scj10WzBdLG89dFtlXTtpZihwbChyLG8pKXtmb3IoaS5saW5lU3RhcnQoKSxhPTA7YTxlOysrYSlpLnBvaW50KChyPXRbYV0pWzBdLHJbMV0pO2kubGluZUVuZCgpfWVsc2Ugcy5wdXNoKG49bmV3IHlsKHIsdCxudWxsLCEwKSksYy5wdXNoKG4ubz1uZXcgeWwocixudWxsLG4sITEpKSxzLnB1c2gobj1uZXcgeWwobyx0LG51bGwsITEpKSxjLnB1c2gobi5vPW5ldyB5bChvLG51bGwsbiwhMCkpfX0pKSxzLmxlbmd0aCl7Zm9yKGMuc29ydChlKSx2bChzKSx2bChjKSxhPTAsbz1jLmxlbmd0aDthPG87KythKWNbYV0uZT1uPSFuO2Zvcih2YXIgdSxsLGg9c1swXTs7KXtmb3IodmFyIGY9aCxkPSEwO2YudjspaWYoKGY9Zi5uKT09PWgpcmV0dXJuO3U9Zi56LGkubGluZVN0YXJ0KCk7ZG97aWYoZi52PWYuby52PSEwLGYuZSl7aWYoZClmb3IoYT0wLG89dS5sZW5ndGg7YTxvOysrYSlpLnBvaW50KChsPXVbYV0pWzBdLGxbMV0pO2Vsc2UgcihmLngsZi5uLngsMSxpKTtmPWYubn1lbHNle2lmKGQpZm9yKHU9Zi5wLnosYT11Lmxlbmd0aC0xO2E+PTA7LS1hKWkucG9pbnQoKGw9dVthXSlbMF0sbFsxXSk7ZWxzZSByKGYueCxmLnAueCwtMSxpKTtmPWYucH11PShmPWYubykueixkPSFkfXdoaWxlKCFmLnYpO2kubGluZUVuZCgpfX19O2Z1bmN0aW9uIHZsKHQpe2lmKGU9dC5sZW5ndGgpe2Zvcih2YXIgZSxuLHI9MCxpPXRbMF07KytyPGU7KWkubj1uPXRbcl0sbi5wPWksaT1uO2kubj1uPXRbMF0sbi5wPWl9fXZhciBtbD1zYygpO2Z1bmN0aW9uIGJsKHQpe3JldHVybiB2Yyh0WzBdKTw9aGM/dFswXTpDYyh0WzBdKSooKHZjKHRbMF0pK2hjKSVwYy1oYyl9dmFyIHhsPWZ1bmN0aW9uKHQsZSl7dmFyIG49YmwoZSkscj1lWzFdLGk9VGMociksYT1bVGMobiksLXhjKG4pLDBdLG89MCxzPTA7bWwucmVzZXQoKSwxPT09aT9yPWZjKzFlLTY6LTE9PT1pJiYocj0tZmMtMWUtNik7Zm9yKHZhciBjPTAsdT10Lmxlbmd0aDtjPHU7KytjKWlmKGg9KGw9dFtjXSkubGVuZ3RoKWZvcih2YXIgbCxoLGY9bFtoLTFdLGQ9YmwoZikscD1mWzFdLzIrZGMseT1UYyhwKSxnPXhjKHApLHY9MDt2PGg7Kyt2LGQ9Yix5PV8sZz1rLGY9bSl7dmFyIG09bFt2XSxiPWJsKG0pLHg9bVsxXS8yK2RjLF89VGMoeCksaz14Yyh4KSx3PWItZCxFPXc+PTA/MTotMSxUPUUqdyxDPVQ+aGMsUz15Kl87aWYobWwuYWRkKGJjKFMqRSpUYyhUKSxnKmsrUyp4YyhUKSkpLG8rPUM/dytFKnBjOncsQ15kPj1uXmI+PW4pe3ZhciBBPWV1KEpjKGYpLEpjKG0pKTtpdShBKTt2YXIgTT1ldShhLEEpO2l1KE0pO3ZhciBPPShDXnc+PTA/LTE6MSkqT2MoTVsyXSk7KHI+T3x8cj09PU8mJihBWzBdfHxBWzFdKSkmJihzKz1DXnc+PTA/MTotMSl9fXJldHVybihvPC0xZS02fHxvPDFlLTYmJm1sPC0xZS02KV4xJnN9LF9sPWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiBmdW5jdGlvbihpKXt2YXIgYSxvLHMsYz1lKGkpLHU9ZGwoKSxsPWUodSksaD0hMSxmPXtwb2ludDpkLGxpbmVTdGFydDp5LGxpbmVFbmQ6Zyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtmLnBvaW50PXYsZi5saW5lU3RhcnQ9bSxmLmxpbmVFbmQ9YixvPVtdLGE9W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtmLnBvaW50PWQsZi5saW5lU3RhcnQ9eSxmLmxpbmVFbmQ9ZyxvPUYobyk7dmFyIHQ9eGwoYSxyKTtvLmxlbmd0aD8oaHx8KGkucG9seWdvblN0YXJ0KCksaD0hMCksZ2wobyx3bCx0LG4saSkpOnQmJihofHwoaS5wb2x5Z29uU3RhcnQoKSxoPSEwKSxpLmxpbmVTdGFydCgpLG4obnVsbCxudWxsLDEsaSksaS5saW5lRW5kKCkpLGgmJihpLnBvbHlnb25FbmQoKSxoPSExKSxvPWE9bnVsbH0sc3BoZXJlOmZ1bmN0aW9uKCl7aS5wb2x5Z29uU3RhcnQoKSxpLmxpbmVTdGFydCgpLG4obnVsbCxudWxsLDEsaSksaS5saW5lRW5kKCksaS5wb2x5Z29uRW5kKCl9fTtmdW5jdGlvbiBkKGUsbil7dChlLG4pJiZpLnBvaW50KGUsbil9ZnVuY3Rpb24gcCh0LGUpe2MucG9pbnQodCxlKX1mdW5jdGlvbiB5KCl7Zi5wb2ludD1wLGMubGluZVN0YXJ0KCl9ZnVuY3Rpb24gZygpe2YucG9pbnQ9ZCxjLmxpbmVFbmQoKX1mdW5jdGlvbiB2KHQsZSl7cy5wdXNoKFt0LGVdKSxsLnBvaW50KHQsZSl9ZnVuY3Rpb24gbSgpe2wubGluZVN0YXJ0KCkscz1bXX1mdW5jdGlvbiBiKCl7dihzWzBdWzBdLHNbMF1bMV0pLGwubGluZUVuZCgpO3ZhciB0LGUsbixyLGM9bC5jbGVhbigpLGY9dS5yZXN1bHQoKSxkPWYubGVuZ3RoO2lmKHMucG9wKCksYS5wdXNoKHMpLHM9bnVsbCxkKWlmKDEmYyl7aWYoKGU9KG49ZlswXSkubGVuZ3RoLTEpPjApe2ZvcihofHwoaS5wb2x5Z29uU3RhcnQoKSxoPSEwKSxpLmxpbmVTdGFydCgpLHQ9MDt0PGU7Kyt0KWkucG9pbnQoKHI9blt0XSlbMF0sclsxXSk7aS5saW5lRW5kKCl9fWVsc2UgZD4xJiYyJmMmJmYucHVzaChmLnBvcCgpLmNvbmNhdChmLnNoaWZ0KCkpKSxvLnB1c2goZi5maWx0ZXIoa2wpKX1yZXR1cm4gZn19O2Z1bmN0aW9uIGtsKHQpe3JldHVybiB0Lmxlbmd0aD4xfWZ1bmN0aW9uIHdsKHQsZSl7cmV0dXJuKCh0PXQueClbMF08MD90WzFdLWZjLTFlLTY6ZmMtdFsxXSktKChlPWUueClbMF08MD9lWzFdLWZjLTFlLTY6ZmMtZVsxXSl9dmFyIEVsPV9sKChmdW5jdGlvbigpe3JldHVybiEwfSksKGZ1bmN0aW9uKHQpe3ZhciBlLG49TmFOLHI9TmFOLGk9TmFOO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0LmxpbmVTdGFydCgpLGU9MX0scG9pbnQ6ZnVuY3Rpb24oYSxvKXt2YXIgcz1hPjA/aGM6LWhjLGM9dmMoYS1uKTt2YyhjLWhjKTwxZS02Pyh0LnBvaW50KG4scj0ocitvKS8yPjA/ZmM6LWZjKSx0LnBvaW50KGksciksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHMsciksdC5wb2ludChhLHIpLGU9MCk6aSE9PXMmJmM+PWhjJiYodmMobi1pKTwxZS02JiYobi09MWUtNippKSx2YyhhLXMpPDFlLTYmJihhLT0xZS02KnMpLHI9ZnVuY3Rpb24odCxlLG4scil7dmFyIGksYSxvPVRjKHQtbik7cmV0dXJuIHZjKG8pPjFlLTY/bWMoKFRjKGUpKihhPXhjKHIpKSpUYyhuKS1UYyhyKSooaT14YyhlKSkqVGModCkpLyhpKmEqbykpOihlK3IpLzJ9KG4scixhLG8pLHQucG9pbnQoaSxyKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQocyxyKSxlPTApLHQucG9pbnQobj1hLHI9byksaT1zfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dC5saW5lRW5kKCksbj1yPU5hTn0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gMi1lfX19KSwoZnVuY3Rpb24odCxlLG4scil7dmFyIGk7aWYobnVsbD09dClpPW4qZmMsci5wb2ludCgtaGMsaSksci5wb2ludCgwLGkpLHIucG9pbnQoaGMsaSksci5wb2ludChoYywwKSxyLnBvaW50KGhjLC1pKSxyLnBvaW50KDAsLWkpLHIucG9pbnQoLWhjLC1pKSxyLnBvaW50KC1oYywwKSxyLnBvaW50KC1oYyxpKTtlbHNlIGlmKHZjKHRbMF0tZVswXSk+MWUtNil7dmFyIGE9dFswXTxlWzBdP2hjOi1oYztpPW4qYS8yLHIucG9pbnQoLWEsaSksci5wb2ludCgwLGkpLHIucG9pbnQoYSxpKX1lbHNlIHIucG9pbnQoZVswXSxlWzFdKX0pLFstaGMsLWZjXSk7dmFyIFRsPWZ1bmN0aW9uKHQpe3ZhciBlPXhjKHQpLG49NipnYyxyPWU+MCxpPXZjKGUpPjFlLTY7ZnVuY3Rpb24gYSh0LG4pe3JldHVybiB4Yyh0KSp4YyhuKT5lfWZ1bmN0aW9uIG8odCxuLHIpe3ZhciBpPVsxLDAsMF0sYT1ldShKYyh0KSxKYyhuKSksbz10dShhLGEpLHM9YVswXSxjPW8tcypzO2lmKCFjKXJldHVybiFyJiZ0O3ZhciB1PWUqby9jLGw9LWUqcy9jLGg9ZXUoaSxhKSxmPXJ1KGksdSk7bnUoZixydShhLGwpKTt2YXIgZD1oLHA9dHUoZixkKSx5PXR1KGQsZCksZz1wKnAteSoodHUoZixmKS0xKTtpZighKGc8MCkpe3ZhciB2PVNjKGcpLG09cnUoZCwoLXAtdikveSk7aWYobnUobSxmKSxtPUtjKG0pLCFyKXJldHVybiBtO3ZhciBiLHg9dFswXSxfPW5bMF0saz10WzFdLHc9blsxXTtfPHgmJihiPXgseD1fLF89Yik7dmFyIEU9Xy14LFQ9dmMoRS1oYyk8MWUtNjtpZighVCYmdzxrJiYoYj1rLGs9dyx3PWIpLFR8fEU8MWUtNj9UP2srdz4wXm1bMV08KHZjKG1bMF0teCk8MWUtNj9rOncpOms8PW1bMV0mJm1bMV08PXc6RT5oY14oeDw9bVswXSYmbVswXTw9Xykpe3ZhciBDPXJ1KGQsKC1wK3YpL3kpO3JldHVybiBudShDLGYpLFttLEtjKEMpXX19fWZ1bmN0aW9uIHMoZSxuKXt2YXIgaT1yP3Q6aGMtdCxhPTA7cmV0dXJuIGU8LWk/YXw9MTplPmkmJihhfD0yKSxuPC1pP2F8PTQ6bj5pJiYoYXw9OCksYX1yZXR1cm4gX2woYSwoZnVuY3Rpb24odCl7dmFyIGUsbixjLHUsbDtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dT1jPSExLGw9MX0scG9pbnQ6ZnVuY3Rpb24oaCxmKXt2YXIgZCxwPVtoLGZdLHk9YShoLGYpLGc9cj95PzA6cyhoLGYpOnk/cyhoKyhoPDA/aGM6LWhjKSxmKTowO2lmKCFlJiYodT1jPXkpJiZ0LmxpbmVTdGFydCgpLHkhPT1jJiYoIShkPW8oZSxwKSl8fHBsKGUsZCl8fHBsKHAsZCkpJiYocFswXSs9MWUtNixwWzFdKz0xZS02LHk9YShwWzBdLHBbMV0pKSx5IT09YylsPTAseT8odC5saW5lU3RhcnQoKSxkPW8ocCxlKSx0LnBvaW50KGRbMF0sZFsxXSkpOihkPW8oZSxwKSx0LnBvaW50KGRbMF0sZFsxXSksdC5saW5lRW5kKCkpLGU9ZDtlbHNlIGlmKGkmJmUmJnJeeSl7dmFyIHY7ZyZufHwhKHY9byhwLGUsITApKXx8KGw9MCxyPyh0LmxpbmVTdGFydCgpLHQucG9pbnQodlswXVswXSx2WzBdWzFdKSx0LnBvaW50KHZbMV1bMF0sdlsxXVsxXSksdC5saW5lRW5kKCkpOih0LnBvaW50KHZbMV1bMF0sdlsxXVsxXSksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHZbMF1bMF0sdlswXVsxXSkpKX0heXx8ZSYmcGwoZSxwKXx8dC5wb2ludChwWzBdLHBbMV0pLGU9cCxjPXksbj1nfSxsaW5lRW5kOmZ1bmN0aW9uKCl7YyYmdC5saW5lRW5kKCksZT1udWxsfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiBsfCh1JiZjKTw8MX19fSksKGZ1bmN0aW9uKGUscixpLGEpe2xsKGEsdCxuLGksZSxyKX0pLHI/WzAsLXRdOlstaGMsdC1oY10pfTtmdW5jdGlvbiBDbCh0LGUsbixyKXtmdW5jdGlvbiBpKGksYSl7cmV0dXJuIHQ8PWkmJmk8PW4mJmU8PWEmJmE8PXJ9ZnVuY3Rpb24gYShpLGEscyx1KXt2YXIgbD0wLGg9MDtpZihudWxsPT1pfHwobD1vKGkscykpIT09KGg9byhhLHMpKXx8YyhpLGEpPDBecz4wKWRve3UucG9pbnQoMD09PWx8fDM9PT1sP3Q6bixsPjE/cjplKX13aGlsZSgobD0obCtzKzQpJTQpIT09aCk7ZWxzZSB1LnBvaW50KGFbMF0sYVsxXSl9ZnVuY3Rpb24gbyhyLGkpe3JldHVybiB2YyhyWzBdLXQpPDFlLTY/aT4wPzA6Mzp2YyhyWzBdLW4pPDFlLTY/aT4wPzI6MTp2YyhyWzFdLWUpPDFlLTY/aT4wPzE6MDppPjA/MzoyfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gYyh0LngsZS54KX1mdW5jdGlvbiBjKHQsZSl7dmFyIG49byh0LDEpLHI9byhlLDEpO3JldHVybiBuIT09cj9uLXI6MD09PW4/ZVsxXS10WzFdOjE9PT1uP3RbMF0tZVswXToyPT09bj90WzFdLWVbMV06ZVswXS10WzBdfXJldHVybiBmdW5jdGlvbihvKXt2YXIgYyx1LGwsaCxmLGQscCx5LGcsdixtLGI9byx4PWRsKCksXz17cG9pbnQ6ayxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtfLnBvaW50PXcsdSYmdS5wdXNoKGw9W10pO3Y9ITAsZz0hMSxwPXk9TmFOfSxsaW5lRW5kOmZ1bmN0aW9uKCl7YyYmKHcoaCxmKSxkJiZnJiZ4LnJlam9pbigpLGMucHVzaCh4LnJlc3VsdCgpKSk7Xy5wb2ludD1rLGcmJmIubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtiPXgsYz1bXSx1PVtdLG09ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbigpe2Zvcih2YXIgZT0wLG49MCxpPXUubGVuZ3RoO248aTsrK24pZm9yKHZhciBhLG8scz11W25dLGM9MSxsPXMubGVuZ3RoLGg9c1swXSxmPWhbMF0sZD1oWzFdO2M8bDsrK2MpYT1mLG89ZCxoPXNbY10sZj1oWzBdLGQ9aFsxXSxvPD1yP2Q+ciYmKGYtYSkqKHItbyk+KGQtbykqKHQtYSkmJisrZTpkPD1yJiYoZi1hKSooci1vKTwoZC1vKSoodC1hKSYmLS1lO3JldHVybiBlfSgpLG49bSYmZSxpPShjPUYoYykpLmxlbmd0aDsobnx8aSkmJihvLnBvbHlnb25TdGFydCgpLG4mJihvLmxpbmVTdGFydCgpLGEobnVsbCxudWxsLDEsbyksby5saW5lRW5kKCkpLGkmJmdsKGMscyxlLGEsbyksby5wb2x5Z29uRW5kKCkpO2I9byxjPXU9bD1udWxsfX07ZnVuY3Rpb24gayh0LGUpe2kodCxlKSYmYi5wb2ludCh0LGUpfWZ1bmN0aW9uIHcoYSxvKXt2YXIgcz1pKGEsbyk7aWYodSYmbC5wdXNoKFthLG9dKSx2KWg9YSxmPW8sZD1zLHY9ITEscyYmKGIubGluZVN0YXJ0KCksYi5wb2ludChhLG8pKTtlbHNlIGlmKHMmJmcpYi5wb2ludChhLG8pO2Vsc2V7dmFyIGM9W3A9TWF0aC5tYXgoLTFlOSxNYXRoLm1pbigxZTkscCkpLHk9TWF0aC5tYXgoLTFlOSxNYXRoLm1pbigxZTkseSkpXSx4PVthPU1hdGgubWF4KC0xZTksTWF0aC5taW4oMWU5LGEpKSxvPU1hdGgubWF4KC0xZTksTWF0aC5taW4oMWU5LG8pKV07IWZ1bmN0aW9uKHQsZSxuLHIsaSxhKXt2YXIgbyxzPXRbMF0sYz10WzFdLHU9MCxsPTEsaD1lWzBdLXMsZj1lWzFdLWM7aWYobz1uLXMsaHx8IShvPjApKXtpZihvLz1oLGg8MCl7aWYobzx1KXJldHVybjtvPGwmJihsPW8pfWVsc2UgaWYoaD4wKXtpZihvPmwpcmV0dXJuO28+dSYmKHU9byl9aWYobz1pLXMsaHx8IShvPDApKXtpZihvLz1oLGg8MCl7aWYobz5sKXJldHVybjtvPnUmJih1PW8pfWVsc2UgaWYoaD4wKXtpZihvPHUpcmV0dXJuO288bCYmKGw9byl9aWYobz1yLWMsZnx8IShvPjApKXtpZihvLz1mLGY8MCl7aWYobzx1KXJldHVybjtvPGwmJihsPW8pfWVsc2UgaWYoZj4wKXtpZihvPmwpcmV0dXJuO28+dSYmKHU9byl9aWYobz1hLWMsZnx8IShvPDApKXtpZihvLz1mLGY8MCl7aWYobz5sKXJldHVybjtvPnUmJih1PW8pfWVsc2UgaWYoZj4wKXtpZihvPHUpcmV0dXJuO288bCYmKGw9byl9cmV0dXJuIHU+MCYmKHRbMF09cyt1KmgsdFsxXT1jK3UqZiksbDwxJiYoZVswXT1zK2wqaCxlWzFdPWMrbCpmKSwhMH19fX19KGMseCx0LGUsbixyKT9zJiYoYi5saW5lU3RhcnQoKSxiLnBvaW50KGEsbyksbT0hMSk6KGd8fChiLmxpbmVTdGFydCgpLGIucG9pbnQoY1swXSxjWzFdKSksYi5wb2ludCh4WzBdLHhbMV0pLHN8fGIubGluZUVuZCgpLG09ITEpfXA9YSx5PW8sZz1zfXJldHVybiBffX12YXIgU2wsQWwsTWwsT2w9ZnVuY3Rpb24oKXt2YXIgdCxlLG4scj0wLGk9MCxhPTk2MCxvPTUwMDtyZXR1cm4gbj17c3RyZWFtOmZ1bmN0aW9uKG4pe3JldHVybiB0JiZlPT09bj90OnQ9Q2wocixpLGEsbykoZT1uKX0sZXh0ZW50OmZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPStzWzBdWzBdLGk9K3NbMF1bMV0sYT0rc1sxXVswXSxvPStzWzFdWzFdLHQ9ZT1udWxsLG4pOltbcixpXSxbYSxvXV19fX0sQmw9c2MoKSxObD17c3BoZXJlOk5jLHBvaW50Ok5jLGxpbmVTdGFydDpmdW5jdGlvbigpe05sLnBvaW50PUxsLE5sLmxpbmVFbmQ9RGx9LGxpbmVFbmQ6TmMscG9seWdvblN0YXJ0Ok5jLHBvbHlnb25FbmQ6TmN9O2Z1bmN0aW9uIERsKCl7TmwucG9pbnQ9TmwubGluZUVuZD1OY31mdW5jdGlvbiBMbCh0LGUpe1NsPXQqPWdjLEFsPVRjKGUqPWdjKSxNbD14YyhlKSxObC5wb2ludD1JbH1mdW5jdGlvbiBJbCh0LGUpe3QqPWdjO3ZhciBuPVRjKGUqPWdjKSxyPXhjKGUpLGk9dmModC1TbCksYT14YyhpKSxvPXIqVGMoaSkscz1NbCpuLUFsKnIqYSxjPUFsKm4rTWwqciphO0JsLmFkZChiYyhTYyhvKm8rcypzKSxjKSksU2w9dCxBbD1uLE1sPXJ9dmFyIFJsPWZ1bmN0aW9uKHQpe3JldHVybiBCbC5yZXNldCgpLCRjKHQsTmwpLCtCbH0sRmw9W251bGwsbnVsbF0sUGw9e3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOkZsfSxqbD1mdW5jdGlvbih0LGUpe3JldHVybiBGbFswXT10LEZsWzFdPWUsUmwoUGwpfSxZbD17RmVhdHVyZTpmdW5jdGlvbih0LGUpe3JldHVybiBVbCh0Lmdlb21ldHJ5LGUpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmZlYXR1cmVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspaWYoVWwobltyXS5nZW9tZXRyeSxlKSlyZXR1cm4hMDtyZXR1cm4hMX19LHpsPXtTcGhlcmU6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUG9pbnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gJGwodC5jb29yZGluYXRlcyxlKX0sTXVsdGlQb2ludDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspaWYoJGwobltyXSxlKSlyZXR1cm4hMDtyZXR1cm4hMX0sTGluZVN0cmluZzpmdW5jdGlvbih0LGUpe3JldHVybiBxbCh0LmNvb3JkaW5hdGVzLGUpfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KWlmKHFsKG5bcl0sZSkpcmV0dXJuITA7cmV0dXJuITF9LFBvbHlnb246ZnVuY3Rpb24odCxlKXtyZXR1cm4gV2wodC5jb29yZGluYXRlcyxlKX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuY29vcmRpbmF0ZXMscj0tMSxpPW4ubGVuZ3RoOysrcjxpOylpZihXbChuW3JdLGUpKXJldHVybiEwO3JldHVybiExfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5nZW9tZXRyaWVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspaWYoVWwobltyXSxlKSlyZXR1cm4hMDtyZXR1cm4hMX19O2Z1bmN0aW9uIFVsKHQsZSl7cmV0dXJuISghdHx8IXpsLmhhc093blByb3BlcnR5KHQudHlwZSkpJiZ6bFt0LnR5cGVdKHQsZSl9ZnVuY3Rpb24gJGwodCxlKXtyZXR1cm4gMD09PWpsKHQsZSl9ZnVuY3Rpb24gcWwodCxlKXtmb3IodmFyIG4scixpLGE9MCxvPXQubGVuZ3RoO2E8bzthKyspe2lmKDA9PT0ocj1qbCh0W2FdLGUpKSlyZXR1cm4hMDtpZihhPjAmJihpPWpsKHRbYV0sdFthLTFdKSk+MCYmbjw9aSYmcjw9aSYmKG4rci1pKSooMS1NYXRoLnBvdygobi1yKS9pLDIpKTwxZS0xMippKXJldHVybiEwO249cn1yZXR1cm4hMX1mdW5jdGlvbiBXbCh0LGUpe3JldHVybiEheGwodC5tYXAoVmwpLEhsKGUpKX1mdW5jdGlvbiBWbCh0KXtyZXR1cm4odD10Lm1hcChIbCkpLnBvcCgpLHR9ZnVuY3Rpb24gSGwodCl7cmV0dXJuW3RbMF0qZ2MsdFsxXSpnY119dmFyIEdsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKHQmJllsLmhhc093blByb3BlcnR5KHQudHlwZSk/WWxbdC50eXBlXTpVbCkodCxlKX07ZnVuY3Rpb24gWGwodCxlLG4pe3ZhciByPWsodCxlLTFlLTYsbikuY29uY2F0KGUpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gci5tYXAoKGZ1bmN0aW9uKGUpe3JldHVyblt0LGVdfSkpfX1mdW5jdGlvbiBabCh0LGUsbil7dmFyIHI9ayh0LGUtMWUtNixuKS5jb25jYXQoZSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuW2UsdF19KSl9fWZ1bmN0aW9uIFFsKCl7dmFyIHQsZSxuLHIsaSxhLG8scyxjLHUsbCxoLGY9MTAsZD1mLHA9OTAseT0zNjAsZz0yLjU7ZnVuY3Rpb24gdigpe3JldHVybnt0eXBlOiJNdWx0aUxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOm0oKX19ZnVuY3Rpb24gbSgpe3JldHVybiBrKF9jKHIvcCkqcCxuLHApLm1hcChsKS5jb25jYXQoayhfYyhzL3kpKnksbyx5KS5tYXAoaCkpLmNvbmNhdChrKF9jKGUvZikqZix0LGYpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHZjKHQlcCk+MWUtNn0pKS5tYXAoYykpLmNvbmNhdChrKF9jKGEvZCkqZCxpLGQpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHZjKHQleSk+MWUtNn0pKS5tYXAodSkpfXJldHVybiB2LmxpbmVzPWZ1bmN0aW9uKCl7cmV0dXJuIG0oKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczp0fX0pKX0sdi5vdXRsaW5lPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltsKHIpLmNvbmNhdChoKG8pLnNsaWNlKDEpLGwobikucmV2ZXJzZSgpLnNsaWNlKDEpLGgocykucmV2ZXJzZSgpLnNsaWNlKDEpKV19fSx2LmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD92LmV4dGVudE1ham9yKHQpLmV4dGVudE1pbm9yKHQpOnYuZXh0ZW50TWlub3IoKX0sdi5leHRlbnRNYWpvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdFswXVswXSxuPSt0WzFdWzBdLHM9K3RbMF1bMV0sbz0rdFsxXVsxXSxyPm4mJih0PXIscj1uLG49dCkscz5vJiYodD1zLHM9byxvPXQpLHYucHJlY2lzaW9uKGcpKTpbW3Isc10sW24sb11dfSx2LmV4dGVudE1pbm9yPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStuWzBdWzBdLHQ9K25bMV1bMF0sYT0rblswXVsxXSxpPStuWzFdWzFdLGU+dCYmKG49ZSxlPXQsdD1uKSxhPmkmJihuPWEsYT1pLGk9biksdi5wcmVjaXNpb24oZykpOltbZSxhXSxbdCxpXV19LHYuc3RlcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD92LnN0ZXBNYWpvcih0KS5zdGVwTWlub3IodCk6di5zdGVwTWlub3IoKX0sdi5zdGVwTWFqb3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9K3RbMF0seT0rdFsxXSx2KTpbcCx5XX0sdi5zdGVwTWlub3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9K3RbMF0sZD0rdFsxXSx2KTpbZixkXX0sdi5wcmVjaXNpb249ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9K2YsYz1YbChhLGksOTApLHU9WmwoZSx0LGcpLGw9WGwocyxvLDkwKSxoPVpsKHIsbixnKSx2KTpnfSx2LmV4dGVudE1ham9yKFtbLTE4MCwxZS02LTkwXSxbMTgwLDkwLTFlLTZdXSkuZXh0ZW50TWlub3IoW1stMTgwLC04MC0xZS02XSxbMTgwLDgwKzFlLTZdXSl9ZnVuY3Rpb24gS2woKXtyZXR1cm4gUWwoKSgpfXZhciBKbCx0aCxlaCxuaCxyaD1mdW5jdGlvbih0LGUpe3ZhciBuPXRbMF0qZ2Mscj10WzFdKmdjLGk9ZVswXSpnYyxhPWVbMV0qZ2Msbz14YyhyKSxzPVRjKHIpLGM9eGMoYSksdT1UYyhhKSxsPW8qeGMobiksaD1vKlRjKG4pLGY9Yyp4YyhpKSxkPWMqVGMoaSkscD0yKk9jKFNjKEJjKGEtcikrbypjKkJjKGktbikpKSx5PVRjKHApLGc9cD9mdW5jdGlvbih0KXt2YXIgZT1UYyh0Kj1wKS95LG49VGMocC10KS95LHI9bipsK2UqZixpPW4qaCtlKmQsYT1uKnMrZSp1O3JldHVybltiYyhpLHIpKnljLGJjKGEsU2MocipyK2kqaSkpKnljXX06ZnVuY3Rpb24oKXtyZXR1cm5bbip5YyxyKnljXX07cmV0dXJuIGcuZGlzdGFuY2U9cCxnfSxpaD1mdW5jdGlvbih0KXtyZXR1cm4gdH0sYWg9c2MoKSxvaD1zYygpLHNoPXtwb2ludDpOYyxsaW5lU3RhcnQ6TmMsbGluZUVuZDpOYyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtzaC5saW5lU3RhcnQ9Y2gsc2gubGluZUVuZD1oaH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3NoLmxpbmVTdGFydD1zaC5saW5lRW5kPXNoLnBvaW50PU5jLGFoLmFkZCh2YyhvaCkpLG9oLnJlc2V0KCl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PWFoLzI7cmV0dXJuIGFoLnJlc2V0KCksdH19O2Z1bmN0aW9uIGNoKCl7c2gucG9pbnQ9dWh9ZnVuY3Rpb24gdWgodCxlKXtzaC5wb2ludD1saCxKbD1laD10LHRoPW5oPWV9ZnVuY3Rpb24gbGgodCxlKXtvaC5hZGQobmgqdC1laCplKSxlaD10LG5oPWV9ZnVuY3Rpb24gaGgoKXtsaChKbCx0aCl9dmFyIGZoPXNoLGRoPTEvMCxwaD1kaCx5aD0tZGgsZ2g9eWg7dmFyIHZoLG1oLGJoLHhoLF9oPXtwb2ludDpmdW5jdGlvbih0LGUpe3Q8ZGgmJihkaD10KTt0PnloJiYoeWg9dCk7ZTxwaCYmKHBoPWUpO2U+Z2gmJihnaD1lKX0sbGluZVN0YXJ0Ok5jLGxpbmVFbmQ6TmMscG9seWdvblN0YXJ0Ok5jLHBvbHlnb25FbmQ6TmMscmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9W1tkaCxwaF0sW3loLGdoXV07cmV0dXJuIHloPWdoPS0ocGg9ZGg9MS8wKSx0fX0sa2g9MCx3aD0wLEVoPTAsVGg9MCxDaD0wLFNoPTAsQWg9MCxNaD0wLE9oPTAsQmg9e3BvaW50Ok5oLGxpbmVTdGFydDpEaCxsaW5lRW5kOlJoLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe0JoLmxpbmVTdGFydD1GaCxCaC5saW5lRW5kPVBofSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7QmgucG9pbnQ9TmgsQmgubGluZVN0YXJ0PURoLEJoLmxpbmVFbmQ9Umh9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PU9oP1tBaC9PaCxNaC9PaF06U2g/W1RoL1NoLENoL1NoXTpFaD9ba2gvRWgsd2gvRWhdOltOYU4sTmFOXTtyZXR1cm4ga2g9d2g9RWg9VGg9Q2g9U2g9QWg9TWg9T2g9MCx0fX07ZnVuY3Rpb24gTmgodCxlKXtraCs9dCx3aCs9ZSwrK0VofWZ1bmN0aW9uIERoKCl7QmgucG9pbnQ9TGh9ZnVuY3Rpb24gTGgodCxlKXtCaC5wb2ludD1JaCxOaChiaD10LHhoPWUpfWZ1bmN0aW9uIEloKHQsZSl7dmFyIG49dC1iaCxyPWUteGgsaT1TYyhuKm4rcipyKTtUaCs9aSooYmgrdCkvMixDaCs9aSooeGgrZSkvMixTaCs9aSxOaChiaD10LHhoPWUpfWZ1bmN0aW9uIFJoKCl7QmgucG9pbnQ9Tmh9ZnVuY3Rpb24gRmgoKXtCaC5wb2ludD1qaH1mdW5jdGlvbiBQaCgpe1loKHZoLG1oKX1mdW5jdGlvbiBqaCh0LGUpe0JoLnBvaW50PVloLE5oKHZoPWJoPXQsbWg9eGg9ZSl9ZnVuY3Rpb24gWWgodCxlKXt2YXIgbj10LWJoLHI9ZS14aCxpPVNjKG4qbityKnIpO1RoKz1pKihiaCt0KS8yLENoKz1pKih4aCtlKS8yLFNoKz1pLEFoKz0oaT14aCp0LWJoKmUpKihiaCt0KSxNaCs9aSooeGgrZSksT2grPTMqaSxOaChiaD10LHhoPWUpfXZhciB6aD1CaDtmdW5jdGlvbiBVaCh0KXt0aGlzLl9jb250ZXh0PXR9VWgucHJvdG90eXBlPXtfcmFkaXVzOjQuNSxwb2ludFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmFkaXVzPXQsdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPT09dGhpcy5fbGluZSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKSx0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpO2JyZWFrO2RlZmF1bHQ6dGhpcy5fY29udGV4dC5tb3ZlVG8odCt0aGlzLl9yYWRpdXMsZSksdGhpcy5fY29udGV4dC5hcmModCxlLHRoaXMuX3JhZGl1cywwLHBjKX19LHJlc3VsdDpOY307dmFyICRoLHFoLFdoLFZoLEhoLEdoPXNjKCksWGg9e3BvaW50Ok5jLGxpbmVTdGFydDpmdW5jdGlvbigpe1hoLnBvaW50PVpofSxsaW5lRW5kOmZ1bmN0aW9uKCl7JGgmJlFoKHFoLFdoKSxYaC5wb2ludD1OY30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7JGg9ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXskaD1udWxsfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD0rR2g7cmV0dXJuIEdoLnJlc2V0KCksdH19O2Z1bmN0aW9uIFpoKHQsZSl7WGgucG9pbnQ9UWgscWg9Vmg9dCxXaD1IaD1lfWZ1bmN0aW9uIFFoKHQsZSl7VmgtPXQsSGgtPWUsR2guYWRkKFNjKFZoKlZoK0hoKkhoKSksVmg9dCxIaD1lfXZhciBLaD1YaDtmdW5jdGlvbiBKaCgpe3RoaXMuX3N0cmluZz1bXX1mdW5jdGlvbiB0Zih0KXtyZXR1cm4ibTAsIit0KyJhIit0KyIsIit0KyIgMCAxLDEgMCwiKy0yKnQrImEiK3QrIiwiK3QrIiAwIDEsMSAwLCIrMip0KyJ6In1KaC5wcm90b3R5cGU9e19yYWRpdXM6NC41LF9jaXJjbGU6dGYoNC41KSxwb2ludFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4odD0rdCkhPT10aGlzLl9yYWRpdXMmJih0aGlzLl9yYWRpdXM9dCx0aGlzLl9jaXJjbGU9bnVsbCksdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPT09dGhpcy5fbGluZSYmdGhpcy5fc3RyaW5nLnB1c2goIloiKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fc3RyaW5nLnB1c2goIk0iLHQsIiwiLGUpLHRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3N0cmluZy5wdXNoKCJMIix0LCIsIixlKTticmVhaztkZWZhdWx0Om51bGw9PXRoaXMuX2NpcmNsZSYmKHRoaXMuX2NpcmNsZT10Zih0aGlzLl9yYWRpdXMpKSx0aGlzLl9zdHJpbmcucHVzaCgiTSIsdCwiLCIsZSx0aGlzLl9jaXJjbGUpfX0scmVzdWx0OmZ1bmN0aW9uKCl7aWYodGhpcy5fc3RyaW5nLmxlbmd0aCl7dmFyIHQ9dGhpcy5fc3RyaW5nLmpvaW4oIiIpO3JldHVybiB0aGlzLl9zdHJpbmc9W10sdH1yZXR1cm4gbnVsbH19O3ZhciBlZj1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaT00LjU7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiZyLnBvaW50UmFkaXVzKCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksJGModCxuKHIpKSksci5yZXN1bHQoKX1yZXR1cm4gYS5hcmVhPWZ1bmN0aW9uKHQpe3JldHVybiAkYyh0LG4oZmgpKSxmaC5yZXN1bHQoKX0sYS5tZWFzdXJlPWZ1bmN0aW9uKHQpe3JldHVybiAkYyh0LG4oS2gpKSxLaC5yZXN1bHQoKX0sYS5ib3VuZHM9ZnVuY3Rpb24odCl7cmV0dXJuICRjKHQsbihfaCkpLF9oLnJlc3VsdCgpfSxhLmNlbnRyb2lkPWZ1bmN0aW9uKHQpe3JldHVybiAkYyh0LG4oemgpKSx6aC5yZXN1bHQoKX0sYS5wcm9qZWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PWU/KHQ9bnVsbCxpaCk6KHQ9ZSkuc3RyZWFtLGEpOnR9LGEuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT10PyhlPW51bGwsbmV3IEpoKTpuZXcgVWgoZT10KSwiZnVuY3Rpb24iIT10eXBlb2YgaSYmci5wb2ludFJhZGl1cyhpKSxhKTplfSxhLnBvaW50UmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6KHIucG9pbnRSYWRpdXMoK3QpLCt0KSxhKTppfSxhLnByb2plY3Rpb24odCkuY29udGV4dChlKX0sbmY9ZnVuY3Rpb24odCl7cmV0dXJue3N0cmVhbTpyZih0KX19O2Z1bmN0aW9uIHJmKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj1uZXcgYWY7Zm9yKHZhciByIGluIHQpbltyXT10W3JdO3JldHVybiBuLnN0cmVhbT1lLG59fWZ1bmN0aW9uIGFmKCl7fWZ1bmN0aW9uIG9mKHQsZSxuKXt2YXIgcj10LmNsaXBFeHRlbnQmJnQuY2xpcEV4dGVudCgpO3JldHVybiB0LnNjYWxlKDE1MCkudHJhbnNsYXRlKFswLDBdKSxudWxsIT1yJiZ0LmNsaXBFeHRlbnQobnVsbCksJGMobix0LnN0cmVhbShfaCkpLGUoX2gucmVzdWx0KCkpLG51bGwhPXImJnQuY2xpcEV4dGVudChyKSx0fWZ1bmN0aW9uIHNmKHQsZSxuKXtyZXR1cm4gb2YodCwoZnVuY3Rpb24obil7dmFyIHI9ZVsxXVswXS1lWzBdWzBdLGk9ZVsxXVsxXS1lWzBdWzFdLGE9TWF0aC5taW4oci8oblsxXVswXS1uWzBdWzBdKSxpLyhuWzFdWzFdLW5bMF1bMV0pKSxvPStlWzBdWzBdKyhyLWEqKG5bMV1bMF0rblswXVswXSkpLzIscz0rZVswXVsxXSsoaS1hKihuWzFdWzFdK25bMF1bMV0pKS8yO3Quc2NhbGUoMTUwKmEpLnRyYW5zbGF0ZShbbyxzXSl9KSxuKX1mdW5jdGlvbiBjZih0LGUsbil7cmV0dXJuIHNmKHQsW1swLDBdLGVdLG4pfWZ1bmN0aW9uIHVmKHQsZSxuKXtyZXR1cm4gb2YodCwoZnVuY3Rpb24obil7dmFyIHI9K2UsaT1yLyhuWzFdWzBdLW5bMF1bMF0pLGE9KHItaSooblsxXVswXStuWzBdWzBdKSkvMixvPS1pKm5bMF1bMV07dC5zY2FsZSgxNTAqaSkudHJhbnNsYXRlKFthLG9dKX0pLG4pfWZ1bmN0aW9uIGxmKHQsZSxuKXtyZXR1cm4gb2YodCwoZnVuY3Rpb24obil7dmFyIHI9K2UsaT1yLyhuWzFdWzFdLW5bMF1bMV0pLGE9LWkqblswXVswXSxvPShyLWkqKG5bMV1bMV0rblswXVsxXSkpLzI7dC5zY2FsZSgxNTAqaSkudHJhbnNsYXRlKFthLG9dKX0pLG4pfWFmLnByb3RvdHlwZT17Y29uc3RydWN0b3I6YWYscG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLnN0cmVhbS5wb2ludCh0LGUpfSxzcGhlcmU6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvbkVuZCgpfX07dmFyIGhmPXhjKDMwKmdjKSxmZj1mdW5jdGlvbih0LGUpe3JldHVybitlP2Z1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbihyLGksYSxvLHMsYyx1LGwsaCxmLGQscCx5LGcpe3ZhciB2PXUtcixtPWwtaSxiPXYqdittKm07aWYoYj40KmUmJnktLSl7dmFyIHg9bytmLF89cytkLGs9YytwLHc9U2MoeCp4K18qXytrKmspLEU9T2Moay89dyksVD12Yyh2YyhrKS0xKTwxZS02fHx2YyhhLWgpPDFlLTY/KGEraCkvMjpiYyhfLHgpLEM9dChULEUpLFM9Q1swXSxBPUNbMV0sTT1TLXIsTz1BLWksQj1tKk0tdipPOyhCKkIvYj5lfHx2YygodipNK20qTykvYi0uNSk+LjN8fG8qZitzKmQrYypwPGhmKSYmKG4ocixpLGEsbyxzLGMsUyxBLFQseC89dyxfLz13LGsseSxnKSxnLnBvaW50KFMsQSksbihTLEEsVCx4LF8sayx1LGwsaCxmLGQscCx5LGcpKX19cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByLGksYSxvLHMsYyx1LGwsaCxmLGQscCx5PXtwb2ludDpnLGxpbmVTdGFydDp2LGxpbmVFbmQ6Yixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtlLnBvbHlnb25TdGFydCgpLHkubGluZVN0YXJ0PXh9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtlLnBvbHlnb25FbmQoKSx5LmxpbmVTdGFydD12fX07ZnVuY3Rpb24gZyhuLHIpe249dChuLHIpLGUucG9pbnQoblswXSxuWzFdKX1mdW5jdGlvbiB2KCl7bD1OYU4seS5wb2ludD1tLGUubGluZVN0YXJ0KCl9ZnVuY3Rpb24gbShyLGkpe3ZhciBhPUpjKFtyLGldKSxvPXQocixpKTtuKGwsaCx1LGYsZCxwLGw9b1swXSxoPW9bMV0sdT1yLGY9YVswXSxkPWFbMV0scD1hWzJdLDE2LGUpLGUucG9pbnQobCxoKX1mdW5jdGlvbiBiKCl7eS5wb2ludD1nLGUubGluZUVuZCgpfWZ1bmN0aW9uIHgoKXt2KCkseS5wb2ludD1fLHkubGluZUVuZD1rfWZ1bmN0aW9uIF8odCxlKXttKHI9dCxlKSxpPWwsYT1oLG89ZixzPWQsYz1wLHkucG9pbnQ9bX1mdW5jdGlvbiBrKCl7bihsLGgsdSxmLGQscCxpLGEscixvLHMsYywxNixlKSx5LmxpbmVFbmQ9YixiKCl9cmV0dXJuIHl9fSh0LGUpOmZ1bmN0aW9uKHQpe3JldHVybiByZih7cG9pbnQ6ZnVuY3Rpb24oZSxuKXtlPXQoZSxuKSx0aGlzLnN0cmVhbS5wb2ludChlWzBdLGVbMV0pfX0pfSh0KX07dmFyIGRmPXJmKHtwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuc3RyZWFtLnBvaW50KHQqZ2MsZSpnYyl9fSk7ZnVuY3Rpb24gcGYodCxlLG4pe2Z1bmN0aW9uIHIocixpKXtyZXR1cm5bZSt0KnIsbi10KmldfXJldHVybiByLmludmVydD1mdW5jdGlvbihyLGkpe3JldHVyblsoci1lKS90LChuLWkpL3RdfSxyfWZ1bmN0aW9uIHlmKHQsZSxuLHIpe3ZhciBpPXhjKHIpLGE9VGMociksbz1pKnQscz1hKnQsYz1pL3QsdT1hL3QsbD0oYSpuLWkqZSkvdCxoPShhKmUraSpuKS90O2Z1bmN0aW9uIGYodCxyKXtyZXR1cm5bbyp0LXMqcitlLG4tcyp0LW8qcl19cmV0dXJuIGYuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW2MqdC11KmUrbCxoLXUqdC1jKmVdfSxmfWZ1bmN0aW9uIGdmKHQpe3JldHVybiB2ZigoZnVuY3Rpb24oKXtyZXR1cm4gdH0pKSgpfWZ1bmN0aW9uIHZmKHQpe3ZhciBlLG4scixpLGEsbyxzLGMsdSxsLGg9MTUwLGY9NDgwLGQ9MjUwLHA9MCx5PTAsZz0wLHY9MCxtPTAsYj0wLHg9bnVsbCxfPUVsLGs9bnVsbCx3PWloLEU9LjU7ZnVuY3Rpb24gVCh0KXtyZXR1cm4gYyh0WzBdKmdjLHRbMV0qZ2MpfWZ1bmN0aW9uIEModCl7cmV0dXJuKHQ9Yy5pbnZlcnQodFswXSx0WzFdKSkmJlt0WzBdKnljLHRbMV0qeWNdfWZ1bmN0aW9uIFMoKXt2YXIgdD15ZihoLDAsMCxiKS5hcHBseShudWxsLGUocCx5KSkscj0oYj95ZjpwZikoaCxmLXRbMF0sZC10WzFdLGIpO3JldHVybiBuPWFsKGcsdixtKSxzPXJsKGUsciksYz1ybChuLHMpLG89ZmYocyxFKSxBKCl9ZnVuY3Rpb24gQSgpe3JldHVybiB1PWw9bnVsbCxUfXJldHVybiBULnN0cmVhbT1mdW5jdGlvbih0KXtyZXR1cm4gdSYmbD09PXQ/dTp1PWRmKGZ1bmN0aW9uKHQpe3JldHVybiByZih7cG9pbnQ6ZnVuY3Rpb24oZSxuKXt2YXIgcj10KGUsbik7cmV0dXJuIHRoaXMuc3RyZWFtLnBvaW50KHJbMF0sclsxXSl9fSl9KG4pKF8obyh3KGw9dCkpKSkpfSxULnByZWNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89dCx4PXZvaWQgMCxBKCkpOl99LFQucG9zdGNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9dCxrPXI9aT1hPW51bGwsQSgpKTp3fSxULmNsaXBBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0rdD9UbCh4PXQqZ2MpOih4PW51bGwsRWwpLEEoKSk6eCp5Y30sVC5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PW51bGw9PXQ/KGs9cj1pPWE9bnVsbCxpaCk6Q2woaz0rdFswXVswXSxyPSt0WzBdWzFdLGk9K3RbMV1bMF0sYT0rdFsxXVsxXSksQSgpKTpudWxsPT1rP251bGw6W1trLHJdLFtpLGFdXX0sVC5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rdCxTKCkpOmh9LFQudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSt0WzBdLGQ9K3RbMV0sUygpKTpbZixkXX0sVC5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9dFswXSUzNjAqZ2MseT10WzFdJTM2MCpnYyxTKCkpOltwKnljLHkqeWNdfSxULnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz10WzBdJTM2MCpnYyx2PXRbMV0lMzYwKmdjLG09dC5sZW5ndGg+Mj90WzJdJTM2MCpnYzowLFMoKSk6W2cqeWMsdip5YyxtKnljXX0sVC5hbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj10JTM2MCpnYyxTKCkpOmIqeWN9LFQucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWZmKHMsRT10KnQpLEEoKSk6U2MoRSl9LFQuZml0RXh0ZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHNmKFQsdCxlKX0sVC5maXRTaXplPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGNmKFQsdCxlKX0sVC5maXRXaWR0aD1mdW5jdGlvbih0LGUpe3JldHVybiB1ZihULHQsZSl9LFQuZml0SGVpZ2h0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGxmKFQsdCxlKX0sZnVuY3Rpb24oKXtyZXR1cm4gZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxULmludmVydD1lLmludmVydCYmQyxTKCl9fWZ1bmN0aW9uIG1mKHQpe3ZhciBlPTAsbj1oYy8zLHI9dmYodCksaT1yKGUsbik7cmV0dXJuIGkucGFyYWxsZWxzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3IoZT10WzBdKmdjLG49dFsxXSpnYyk6W2UqeWMsbip5Y119LGl9ZnVuY3Rpb24gYmYodCxlKXt2YXIgbj1UYyh0KSxyPShuK1RjKGUpKS8yO2lmKHZjKHIpPDFlLTYpcmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXhjKHQpO2Z1bmN0aW9uIG4odCxuKXtyZXR1cm5bdCplLFRjKG4pL2VdfXJldHVybiBuLmludmVydD1mdW5jdGlvbih0LG4pe3JldHVyblt0L2UsT2MobiplKV19LG59KHQpO3ZhciBpPTErbiooMipyLW4pLGE9U2MoaSkvcjtmdW5jdGlvbiBvKHQsZSl7dmFyIG49U2MoaS0yKnIqVGMoZSkpL3I7cmV0dXJuW24qVGModCo9ciksYS1uKnhjKHQpXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1hLWU7cmV0dXJuW2JjKHQsdmMobikpL3IqQ2MobiksT2MoKGktKHQqdCtuKm4pKnIqcikvKDIqcikpXX0sb312YXIgeGY9ZnVuY3Rpb24oKXtyZXR1cm4gbWYoYmYpLnNjYWxlKDE1NS40MjQpLmNlbnRlcihbMCwzMy42NDQyXSl9LF9mPWZ1bmN0aW9uKCl7cmV0dXJuIHhmKCkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKS50cmFuc2xhdGUoWzQ4MCwyNTBdKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSl9O3ZhciBrZj1mdW5jdGlvbigpe3ZhciB0LGUsbixyLGksYSxvPV9mKCkscz14ZigpLnJvdGF0ZShbMTU0LDBdKS5jZW50ZXIoWy0yLDU4LjVdKS5wYXJhbGxlbHMoWzU1LDY1XSksYz14ZigpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSx1PXtwb2ludDpmdW5jdGlvbih0LGUpe2E9W3QsZV19fTtmdW5jdGlvbiBsKHQpe3ZhciBlPXRbMF0sbz10WzFdO3JldHVybiBhPW51bGwsbi5wb2ludChlLG8pLGF8fChyLnBvaW50KGUsbyksYSl8fChpLnBvaW50KGUsbyksYSl9ZnVuY3Rpb24gaCgpe3JldHVybiB0PWU9bnVsbCxsfXJldHVybiBsLmludmVydD1mdW5jdGlvbih0KXt2YXIgZT1vLnNjYWxlKCksbj1vLnRyYW5zbGF0ZSgpLHI9KHRbMF0tblswXSkvZSxpPSh0WzFdLW5bMV0pL2U7cmV0dXJuKGk+PS4xMiYmaTwuMjM0JiZyPj0tLjQyNSYmcjwtLjIxND9zOmk+PS4xNjYmJmk8LjIzNCYmcj49LS4yMTQmJnI8LS4xMTU/YzpvKS5pbnZlcnQodCl9LGwuc3RyZWFtPWZ1bmN0aW9uKG4pe3JldHVybiB0JiZlPT09bj90OihyPVtvLnN0cmVhbShlPW4pLHMuc3RyZWFtKG4pLGMuc3RyZWFtKG4pXSxpPXIubGVuZ3RoLHQ9e3BvaW50OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPS0xOysrbjxpOylyW25dLnBvaW50KHQsZSl9LHNwaGVyZTpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8aTspclt0XS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxpOylyW3RdLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxpOylyW3RdLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxpOylyW3RdLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxpOylyW3RdLnBvbHlnb25FbmQoKX19KTt2YXIgcixpfSxsLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oby5wcmVjaXNpb24odCkscy5wcmVjaXNpb24odCksYy5wcmVjaXNpb24odCksaCgpKTpvLnByZWNpc2lvbigpfSxsLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvLnNjYWxlKHQpLHMuc2NhbGUoLjM1KnQpLGMuc2NhbGUodCksbC50cmFuc2xhdGUoby50cmFuc2xhdGUoKSkpOm8uc2NhbGUoKX0sbC50cmFuc2xhdGU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIG8udHJhbnNsYXRlKCk7dmFyIGU9by5zY2FsZSgpLGE9K3RbMF0sbD0rdFsxXTtyZXR1cm4gbj1vLnRyYW5zbGF0ZSh0KS5jbGlwRXh0ZW50KFtbYS0uNDU1KmUsbC0uMjM4KmVdLFthKy40NTUqZSxsKy4yMzgqZV1dKS5zdHJlYW0odSkscj1zLnRyYW5zbGF0ZShbYS0uMzA3KmUsbCsuMjAxKmVdKS5jbGlwRXh0ZW50KFtbYS0uNDI1KmUrMWUtNixsKy4xMiplKzFlLTZdLFthLS4yMTQqZS0xZS02LGwrLjIzNCplLTFlLTZdXSkuc3RyZWFtKHUpLGk9Yy50cmFuc2xhdGUoW2EtLjIwNSplLGwrLjIxMiplXSkuY2xpcEV4dGVudChbW2EtLjIxNCplKzFlLTYsbCsuMTY2KmUrMWUtNl0sW2EtLjExNSplLTFlLTYsbCsuMjM0KmUtMWUtNl1dKS5zdHJlYW0odSksaCgpfSxsLmZpdEV4dGVudD1mdW5jdGlvbih0LGUpe3JldHVybiBzZihsLHQsZSl9LGwuZml0U2l6ZT1mdW5jdGlvbih0LGUpe3JldHVybiBjZihsLHQsZSl9LGwuZml0V2lkdGg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdWYobCx0LGUpfSxsLmZpdEhlaWdodD1mdW5jdGlvbih0LGUpe3JldHVybiBsZihsLHQsZSl9LGwuc2NhbGUoMTA3MCl9O2Z1bmN0aW9uIHdmKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciByPXhjKGUpLGk9eGMobiksYT10KHIqaSk7cmV0dXJuW2EqaSpUYyhlKSxhKlRjKG4pXX19ZnVuY3Rpb24gRWYodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIHI9U2MoZSplK24qbiksaT10KHIpLGE9VGMoaSksbz14YyhpKTtyZXR1cm5bYmMoZSphLHIqbyksT2MociYmbiphL3IpXX19dmFyIFRmPXdmKChmdW5jdGlvbih0KXtyZXR1cm4gU2MoMi8oMSt0KSl9KSk7VGYuaW52ZXJ0PUVmKChmdW5jdGlvbih0KXtyZXR1cm4gMipPYyh0LzIpfSkpO3ZhciBDZj1mdW5jdGlvbigpe3JldHVybiBnZihUZikuc2NhbGUoMTI0Ljc1KS5jbGlwQW5nbGUoMTc5Ljk5OSl9LFNmPXdmKChmdW5jdGlvbih0KXtyZXR1cm4odD1NYyh0KSkmJnQvVGModCl9KSk7U2YuaW52ZXJ0PUVmKChmdW5jdGlvbih0KXtyZXR1cm4gdH0pKTt2YXIgQWY9ZnVuY3Rpb24oKXtyZXR1cm4gZ2YoU2YpLnNjYWxlKDc5LjQxODgpLmNsaXBBbmdsZSgxNzkuOTk5KX07ZnVuY3Rpb24gTWYodCxlKXtyZXR1cm5bdCx3YyhBYygoZmMrZSkvMikpXX1NZi5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdCwyKm1jKGtjKGUpKS1mY119O3ZhciBPZj1mdW5jdGlvbigpe3JldHVybiBCZihNZikuc2NhbGUoOTYxL3BjKX07ZnVuY3Rpb24gQmYodCl7dmFyIGUsbixyLGk9Z2YodCksYT1pLmNlbnRlcixvPWkuc2NhbGUscz1pLnRyYW5zbGF0ZSxjPWkuY2xpcEV4dGVudCx1PW51bGw7ZnVuY3Rpb24gbCgpe3ZhciBhPWhjKm8oKSxzPWkodWwoaS5yb3RhdGUoKSkuaW52ZXJ0KFswLDBdKSk7cmV0dXJuIGMobnVsbD09dT9bW3NbMF0tYSxzWzFdLWFdLFtzWzBdK2Esc1sxXSthXV06dD09PU1mP1tbTWF0aC5tYXgoc1swXS1hLHUpLGVdLFtNYXRoLm1pbihzWzBdK2Esbikscl1dOltbdSxNYXRoLm1heChzWzFdLWEsZSldLFtuLE1hdGgubWluKHNbMV0rYSxyKV1dKX1yZXR1cm4gaS5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obyh0KSxsKCkpOm8oKX0saS50cmFuc2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHModCksbCgpKTpzKCl9LGkuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhKHQpLGwoKSk6YSgpfSxpLmNsaXBFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/dT1lPW49cj1udWxsOih1PSt0WzBdWzBdLGU9K3RbMF1bMV0sbj0rdFsxXVswXSxyPSt0WzFdWzFdKSxsKCkpOm51bGw9PXU/bnVsbDpbW3UsZV0sW24scl1dfSxsKCl9ZnVuY3Rpb24gTmYodCl7cmV0dXJuIEFjKChmYyt0KS8yKX1mdW5jdGlvbiBEZih0LGUpe3ZhciBuPXhjKHQpLHI9dD09PWU/VGModCk6d2Mobi94YyhlKSkvd2MoTmYoZSkvTmYodCkpLGk9bipFYyhOZih0KSxyKS9yO2lmKCFyKXJldHVybiBNZjtmdW5jdGlvbiBhKHQsZSl7aT4wP2U8MWUtNi1mYyYmKGU9MWUtNi1mYyk6ZT5mYy0xZS02JiYoZT1mYy0xZS02KTt2YXIgbj1pL0VjKE5mKGUpLHIpO3JldHVybltuKlRjKHIqdCksaS1uKnhjKHIqdCldfXJldHVybiBhLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBuPWktZSxhPUNjKHIpKlNjKHQqdCtuKm4pO3JldHVybltiYyh0LHZjKG4pKS9yKkNjKG4pLDIqbWMoRWMoaS9hLDEvcikpLWZjXX0sYX12YXIgTGY9ZnVuY3Rpb24oKXtyZXR1cm4gbWYoRGYpLnNjYWxlKDEwOS41KS5wYXJhbGxlbHMoWzMwLDMwXSl9O2Z1bmN0aW9uIElmKHQsZSl7cmV0dXJuW3QsZV19SWYuaW52ZXJ0PUlmO3ZhciBSZj1mdW5jdGlvbigpe3JldHVybiBnZihJZikuc2NhbGUoMTUyLjYzKX07ZnVuY3Rpb24gRmYodCxlKXt2YXIgbj14Yyh0KSxyPXQ9PT1lP1RjKHQpOihuLXhjKGUpKS8oZS10KSxpPW4vcit0O2lmKHZjKHIpPDFlLTYpcmV0dXJuIElmO2Z1bmN0aW9uIGEodCxlKXt2YXIgbj1pLWUsYT1yKnQ7cmV0dXJuW24qVGMoYSksaS1uKnhjKGEpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1pLWU7cmV0dXJuW2JjKHQsdmMobikpL3IqQ2MobiksaS1DYyhyKSpTYyh0KnQrbipuKV19LGF9dmFyIFBmPWZ1bmN0aW9uKCl7cmV0dXJuIG1mKEZmKS5zY2FsZSgxMzEuMTU0KS5jZW50ZXIoWzAsMTMuOTM4OV0pfSxqZj0xLjM0MDI2NCxZZj0tLjA4MTEwNix6Zj04OTNlLTYsVWY9LjAwMzc5NiwkZj1TYygzKS8yO2Z1bmN0aW9uIHFmKHQsZSl7dmFyIG49T2MoJGYqVGMoZSkpLHI9bipuLGk9cipyKnI7cmV0dXJuW3QqeGMobikvKCRmKihqZiszKllmKnIraSooNyp6Zis5KlVmKnIpKSksbiooamYrWWYqcitpKih6ZitVZipyKSldfXFmLmludmVydD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbixyPWUsaT1yKnIsYT1pKmkqaSxvPTA7bzwxMiYmKGE9KGk9KHItPW49KHIqKGpmK1lmKmkrYSooemYrVWYqaSkpLWUpLyhqZiszKllmKmkrYSooNyp6Zis5KlVmKmkpKSkqcikqaSppLCEodmMobik8MWUtMTIpKTsrK28pO3JldHVyblskZip0KihqZiszKllmKmkrYSooNyp6Zis5KlVmKmkpKS94YyhyKSxPYyhUYyhyKS8kZildfTt2YXIgV2Y9ZnVuY3Rpb24oKXtyZXR1cm4gZ2YocWYpLnNjYWxlKDE3Ny4xNTgpfTtmdW5jdGlvbiBWZih0LGUpe3ZhciBuPXhjKGUpLHI9eGModCkqbjtyZXR1cm5bbipUYyh0KS9yLFRjKGUpL3JdfVZmLmludmVydD1FZihtYyk7dmFyIEhmPWZ1bmN0aW9uKCl7cmV0dXJuIGdmKFZmKS5zY2FsZSgxNDQuMDQ5KS5jbGlwQW5nbGUoNjApfTtmdW5jdGlvbiBHZih0LGUsbixyKXtyZXR1cm4gMT09PXQmJjE9PT1lJiYwPT09biYmMD09PXI/aWg6cmYoe3BvaW50OmZ1bmN0aW9uKGksYSl7dGhpcy5zdHJlYW0ucG9pbnQoaSp0K24sYSplK3IpfX0pfXZhciBYZj1mdW5jdGlvbigpe3ZhciB0LGUsbixyLGksYSxvPTEscz0wLGM9MCx1PTEsbD0xLGg9aWgsZj1udWxsLGQ9aWg7ZnVuY3Rpb24gcCgpe3JldHVybiByPWk9bnVsbCxhfXJldHVybiBhPXtzdHJlYW06ZnVuY3Rpb24odCl7cmV0dXJuIHImJmk9PT10P3I6cj1oKGQoaT10KSl9LHBvc3RjbGlwOmZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPXIsZj10PWU9bj1udWxsLHAoKSk6ZH0sY2xpcEV4dGVudDpmdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD1udWxsPT1yPyhmPXQ9ZT1uPW51bGwsaWgpOkNsKGY9K3JbMF1bMF0sdD0rclswXVsxXSxlPStyWzFdWzBdLG49K3JbMV1bMV0pLHAoKSk6bnVsbD09Zj9udWxsOltbZix0XSxbZSxuXV19LHNjYWxlOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPUdmKChvPSt0KSp1LG8qbCxzLGMpLHAoKSk6b30sdHJhbnNsYXRlOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPUdmKG8qdSxvKmwscz0rdFswXSxjPSt0WzFdKSxwKCkpOltzLGNdfSxyZWZsZWN0WDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD1HZihvKih1PXQ/LTE6MSksbypsLHMsYykscCgpKTp1PDB9LHJlZmxlY3RZOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPUdmKG8qdSxvKihsPXQ/LTE6MSkscyxjKSxwKCkpOmw8MH0sZml0RXh0ZW50OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHNmKGEsdCxlKX0sZml0U2l6ZTpmdW5jdGlvbih0LGUpe3JldHVybiBjZihhLHQsZSl9LGZpdFdpZHRoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHVmKGEsdCxlKX0sZml0SGVpZ2h0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGxmKGEsdCxlKX19fTtmdW5jdGlvbiBaZih0LGUpe3ZhciBuPWUqZSxyPW4qbjtyZXR1cm5bdCooLjg3MDctLjEzMTk3OSpuK3IqKHIqKC4wMDM5NzEqbi0uMDAxNTI5KnIpLS4wMTM3OTEpKSxlKigxLjAwNzIyNituKiguMDE1MDg1K3IqKC4wMjg4NzQqbi0uMDQ0NDc1LS4wMDU5MTYqcikpKV19WmYuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIG4scj1lLGk9MjU7ZG97dmFyIGE9cipyLG89YSphO3ItPW49KHIqKDEuMDA3MjI2K2EqKC4wMTUwODUrbyooLjAyODg3NCphLS4wNDQ0NzUtLjAwNTkxNipvKSkpLWUpLygxLjAwNzIyNithKiguMDQ1MjU1K28qKC4yNTk4NjYqYS0uMzExMzI1LS4wMDU5MTYqMTEqbykpKX13aGlsZSh2YyhuKT4xZS02JiYtLWk+MCk7cmV0dXJuW3QvKC44NzA3KyhhPXIqcikqKGEqKGEqYSphKiguMDAzOTcxLS4wMDE1MjkqYSktLjAxMzc5MSktLjEzMTk3OSkpLHJdfTt2YXIgUWY9ZnVuY3Rpb24oKXtyZXR1cm4gZ2YoWmYpLnNjYWxlKDE3NS4yOTUpfTtmdW5jdGlvbiBLZih0LGUpe3JldHVyblt4YyhlKSpUYyh0KSxUYyhlKV19S2YuaW52ZXJ0PUVmKE9jKTt2YXIgSmY9ZnVuY3Rpb24oKXtyZXR1cm4gZ2YoS2YpLnNjYWxlKDI0OS41KS5jbGlwQW5nbGUoOTArMWUtNil9O2Z1bmN0aW9uIHRkKHQsZSl7dmFyIG49eGMoZSkscj0xK3hjKHQpKm47cmV0dXJuW24qVGModCkvcixUYyhlKS9yXX10ZC5pbnZlcnQ9RWYoKGZ1bmN0aW9uKHQpe3JldHVybiAyKm1jKHQpfSkpO3ZhciBlZD1mdW5jdGlvbigpe3JldHVybiBnZih0ZCkuc2NhbGUoMjUwKS5jbGlwQW5nbGUoMTQyKX07ZnVuY3Rpb24gbmQodCxlKXtyZXR1cm5bd2MoQWMoKGZjK2UpLzIpKSwtdF19bmQuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuWy1lLDIqbWMoa2ModCkpLWZjXX07dmFyIHJkPWZ1bmN0aW9uKCl7dmFyIHQ9QmYobmQpLGU9dC5jZW50ZXIsbj10LnJvdGF0ZTtyZXR1cm4gdC5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShbLXRbMV0sdFswXV0pOlsodD1lKCkpWzFdLC10WzBdXX0sdC5yb3RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bihbdFswXSx0WzFdLHQubGVuZ3RoPjI/dFsyXSs5MDo5MF0pOlsodD1uKCkpWzBdLHRbMV0sdFsyXS05MF19LG4oWzAsMCw5MF0pLnNjYWxlKDE1OS4xNTUpfTtmdW5jdGlvbiBpZCh0LGUpe3JldHVybiB0LnBhcmVudD09PWUucGFyZW50PzE6Mn1mdW5jdGlvbiBhZCh0LGUpe3JldHVybiB0K2UueH1mdW5jdGlvbiBvZCh0LGUpe3JldHVybiBNYXRoLm1heCh0LGUueSl9dmFyIHNkPWZ1bmN0aW9uKCl7dmFyIHQ9aWQsZT0xLG49MSxyPSExO2Z1bmN0aW9uIGkoaSl7dmFyIGEsbz0wO2kuZWFjaEFmdGVyKChmdW5jdGlvbihlKXt2YXIgbj1lLmNoaWxkcmVuO24/KGUueD1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZWR1Y2UoYWQsMCkvdC5sZW5ndGh9KG4pLGUueT1mdW5jdGlvbih0KXtyZXR1cm4gMSt0LnJlZHVjZShvZCwwKX0obikpOihlLng9YT9vKz10KGUsYSk6MCxlLnk9MCxhPWUpfSkpO3ZhciBzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZTtlPXQuY2hpbGRyZW47KXQ9ZVswXTtyZXR1cm4gdH0oaSksYz1mdW5jdGlvbih0KXtmb3IodmFyIGU7ZT10LmNoaWxkcmVuOyl0PWVbZS5sZW5ndGgtMV07cmV0dXJuIHR9KGkpLHU9cy54LXQocyxjKS8yLGw9Yy54K3QoYyxzKS8yO3JldHVybiBpLmVhY2hBZnRlcihyP2Z1bmN0aW9uKHQpe3QueD0odC54LWkueCkqZSx0Lnk9KGkueS10LnkpKm59OmZ1bmN0aW9uKHQpe3QueD0odC54LXUpLyhsLXUpKmUsdC55PSgxLShpLnk/dC55L2kueToxKSkqbn0pfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxpKTp0fSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ITEsZT0rdFswXSxuPSt0WzFdLGkpOnI/bnVsbDpbZSxuXX0saS5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0hMCxlPSt0WzBdLG49K3RbMV0saSk6cj9bZSxuXTpudWxsfSxpfTtmdW5jdGlvbiBjZCh0KXt2YXIgZT0wLG49dC5jaGlsZHJlbixyPW4mJm4ubGVuZ3RoO2lmKHIpZm9yKDstLXI+PTA7KWUrPW5bcl0udmFsdWU7ZWxzZSBlPTE7dC52YWx1ZT1lfWZ1bmN0aW9uIHVkKHQsZSl7dmFyIG4scixpLGEsbyxzPW5ldyBkZCh0KSxjPSt0LnZhbHVlJiYocy52YWx1ZT10LnZhbHVlKSx1PVtzXTtmb3IobnVsbD09ZSYmKGU9bGQpO249dS5wb3AoKTspaWYoYyYmKG4udmFsdWU9K24uZGF0YS52YWx1ZSksKGk9ZShuLmRhdGEpKSYmKG89aS5sZW5ndGgpKWZvcihuLmNoaWxkcmVuPW5ldyBBcnJheShvKSxhPW8tMTthPj0wOy0tYSl1LnB1c2gocj1uLmNoaWxkcmVuW2FdPW5ldyBkZChpW2FdKSksci5wYXJlbnQ9bixyLmRlcHRoPW4uZGVwdGgrMTtyZXR1cm4gcy5lYWNoQmVmb3JlKGZkKX1mdW5jdGlvbiBsZCh0KXtyZXR1cm4gdC5jaGlsZHJlbn1mdW5jdGlvbiBoZCh0KXt0LmRhdGE9dC5kYXRhLmRhdGF9ZnVuY3Rpb24gZmQodCl7dmFyIGU9MDtkb3t0LmhlaWdodD1lfXdoaWxlKCh0PXQucGFyZW50KSYmdC5oZWlnaHQ8KytlKX1mdW5jdGlvbiBkZCh0KXt0aGlzLmRhdGE9dCx0aGlzLmRlcHRoPXRoaXMuaGVpZ2h0PTAsdGhpcy5wYXJlbnQ9bnVsbH1kZC5wcm90b3R5cGU9dWQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpkZCxjb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2hBZnRlcihjZCl9LGVhY2g6ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksYT10aGlzLG89W2FdO2Rve2ZvcihlPW8ucmV2ZXJzZSgpLG89W107YT1lLnBvcCgpOylpZih0KGEpLG49YS5jaGlsZHJlbilmb3Iocj0wLGk9bi5sZW5ndGg7cjxpOysrcilvLnB1c2gobltyXSl9d2hpbGUoby5sZW5ndGgpO3JldHVybiB0aGlzfSxlYWNoQWZ0ZXI6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4scixpPXRoaXMsYT1baV0sbz1bXTtpPWEucG9wKCk7KWlmKG8ucHVzaChpKSxlPWkuY2hpbGRyZW4pZm9yKG49MCxyPWUubGVuZ3RoO248cjsrK24pYS5wdXNoKGVbbl0pO2Zvcig7aT1vLnBvcCgpOyl0KGkpO3JldHVybiB0aGlzfSxlYWNoQmVmb3JlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHI9dGhpcyxpPVtyXTtyPWkucG9wKCk7KWlmKHQociksZT1yLmNoaWxkcmVuKWZvcihuPWUubGVuZ3RoLTE7bj49MDstLW4paS5wdXNoKGVbbl0pO3JldHVybiB0aGlzfSxzdW06ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaEFmdGVyKChmdW5jdGlvbihlKXtmb3IodmFyIG49K3QoZS5kYXRhKXx8MCxyPWUuY2hpbGRyZW4saT1yJiZyLmxlbmd0aDstLWk+PTA7KW4rPXJbaV0udmFsdWU7ZS52YWx1ZT1ufSkpfSxzb3J0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW4mJmUuY2hpbGRyZW4uc29ydCh0KX0pKX0scGF0aDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcyxuPWZ1bmN0aW9uKHQsZSl7aWYodD09PWUpcmV0dXJuIHQ7dmFyIG49dC5hbmNlc3RvcnMoKSxyPWUuYW5jZXN0b3JzKCksaT1udWxsO3Q9bi5wb3AoKSxlPXIucG9wKCk7Zm9yKDt0PT09ZTspaT10LHQ9bi5wb3AoKSxlPXIucG9wKCk7cmV0dXJuIGl9KGUsdCkscj1bZV07ZSE9PW47KWU9ZS5wYXJlbnQsci5wdXNoKGUpO2Zvcih2YXIgaT1yLmxlbmd0aDt0IT09bjspci5zcGxpY2UoaSwwLHQpLHQ9dC5wYXJlbnQ7cmV0dXJuIHJ9LGFuY2VzdG9yczpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9W3RdO3Q9dC5wYXJlbnQ7KWUucHVzaCh0KTtyZXR1cm4gZX0sZGVzY2VuZGFudHM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbihlKXt0LnB1c2goZSl9KSksdH0sbGVhdmVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZWFjaEJlZm9yZSgoZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbnx8dC5wdXNoKGUpfSkpLHR9LGxpbmtzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPVtdO3JldHVybiB0LmVhY2goKGZ1bmN0aW9uKG4pe24hPT10JiZlLnB1c2goe3NvdXJjZTpuLnBhcmVudCx0YXJnZXQ6bn0pfSkpLGV9LGNvcHk6ZnVuY3Rpb24oKXtyZXR1cm4gdWQodGhpcykuZWFjaEJlZm9yZShoZCl9fTt2YXIgcGQ9QXJyYXkucHJvdG90eXBlLnNsaWNlO3ZhciB5ZD1mdW5jdGlvbih0KXtmb3IodmFyIGUsbixyPTAsaT0odD1mdW5jdGlvbih0KXtmb3IodmFyIGUsbixyPXQubGVuZ3RoO3I7KW49TWF0aC5yYW5kb20oKSpyLS18MCxlPXRbcl0sdFtyXT10W25dLHRbbl09ZTtyZXR1cm4gdH0ocGQuY2FsbCh0KSkpLmxlbmd0aCxhPVtdO3I8aTspZT10W3JdLG4mJm1kKG4sZSk/KytyOihuPXhkKGE9Z2QoYSxlKSkscj0wKTtyZXR1cm4gbn07ZnVuY3Rpb24gZ2QodCxlKXt2YXIgbixyO2lmKGJkKGUsdCkpcmV0dXJuW2VdO2ZvcihuPTA7bjx0Lmxlbmd0aDsrK24paWYodmQoZSx0W25dKSYmYmQoX2QodFtuXSxlKSx0KSlyZXR1cm5bdFtuXSxlXTtmb3Iobj0wO248dC5sZW5ndGgtMTsrK24pZm9yKHI9bisxO3I8dC5sZW5ndGg7KytyKWlmKHZkKF9kKHRbbl0sdFtyXSksZSkmJnZkKF9kKHRbbl0sZSksdFtyXSkmJnZkKF9kKHRbcl0sZSksdFtuXSkmJmJkKGtkKHRbbl0sdFtyXSxlKSx0KSlyZXR1cm5bdFtuXSx0W3JdLGVdO3Rocm93IG5ldyBFcnJvcn1mdW5jdGlvbiB2ZCh0LGUpe3ZhciBuPXQuci1lLnIscj1lLngtdC54LGk9ZS55LXQueTtyZXR1cm4gbjwwfHxuKm48cipyK2kqaX1mdW5jdGlvbiBtZCh0LGUpe3ZhciBuPXQuci1lLnIrMWUtNixyPWUueC10LngsaT1lLnktdC55O3JldHVybiBuPjAmJm4qbj5yKnIraSppfWZ1bmN0aW9uIGJkKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDsrK24paWYoIW1kKHQsZVtuXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24geGQodCl7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDE6cmV0dXJue3g6KGU9dFswXSkueCx5OmUueSxyOmUucn07Y2FzZSAyOnJldHVybiBfZCh0WzBdLHRbMV0pO2Nhc2UgMzpyZXR1cm4ga2QodFswXSx0WzFdLHRbMl0pfXZhciBlfWZ1bmN0aW9uIF9kKHQsZSl7dmFyIG49dC54LHI9dC55LGk9dC5yLGE9ZS54LG89ZS55LHM9ZS5yLGM9YS1uLHU9by1yLGw9cy1pLGg9TWF0aC5zcXJ0KGMqYyt1KnUpO3JldHVybnt4OihuK2ErYy9oKmwpLzIseToocitvK3UvaCpsKS8yLHI6KGgraStzKS8yfX1mdW5jdGlvbiBrZCh0LGUsbil7dmFyIHI9dC54LGk9dC55LGE9dC5yLG89ZS54LHM9ZS55LGM9ZS5yLHU9bi54LGw9bi55LGg9bi5yLGY9ci1vLGQ9ci11LHA9aS1zLHk9aS1sLGc9Yy1hLHY9aC1hLG09cipyK2kqaS1hKmEsYj1tLW8qby1zKnMrYypjLHg9bS11KnUtbCpsK2gqaCxfPWQqcC1mKnksaz0ocCp4LXkqYikvKDIqXyktcix3PSh5KmctcCp2KS9fLEU9KGQqYi1mKngpLygyKl8pLWksVD0oZip2LWQqZykvXyxDPXcqdytUKlQtMSxTPTIqKGErayp3K0UqVCksQT1rKmsrRSpFLWEqYSxNPS0oQz8oUytNYXRoLnNxcnQoUypTLTQqQypBKSkvKDIqQyk6QS9TKTtyZXR1cm57eDpyK2srdypNLHk6aStFK1QqTSxyOk19fWZ1bmN0aW9uIHdkKHQsZSxuKXt2YXIgcixpLGEsbyxzPXQueC1lLngsYz10LnktZS55LHU9cypzK2MqYzt1PyhpPWUucituLnIsaSo9aSxvPXQucituLnIsaT4obyo9byk/KHI9KHUrby1pKS8oMip1KSxhPU1hdGguc3FydChNYXRoLm1heCgwLG8vdS1yKnIpKSxuLng9dC54LXIqcy1hKmMsbi55PXQueS1yKmMrYSpzKToocj0odStpLW8pLygyKnUpLGE9TWF0aC5zcXJ0KE1hdGgubWF4KDAsaS91LXIqcikpLG4ueD1lLngrcipzLWEqYyxuLnk9ZS55K3IqYythKnMpKToobi54PWUueCtuLnIsbi55PWUueSl9ZnVuY3Rpb24gRWQodCxlKXt2YXIgbj10LnIrZS5yLTFlLTYscj1lLngtdC54LGk9ZS55LXQueTtyZXR1cm4gbj4wJiZuKm4+cipyK2kqaX1mdW5jdGlvbiBUZCh0KXt2YXIgZT10Ll8sbj10Lm5leHQuXyxyPWUucituLnIsaT0oZS54Km4ucituLngqZS5yKS9yLGE9KGUueSpuLnIrbi55KmUucikvcjtyZXR1cm4gaSppK2EqYX1mdW5jdGlvbiBDZCh0KXt0aGlzLl89dCx0aGlzLm5leHQ9bnVsbCx0aGlzLnByZXZpb3VzPW51bGx9ZnVuY3Rpb24gU2QodCl7aWYoIShpPXQubGVuZ3RoKSlyZXR1cm4gMDt2YXIgZSxuLHIsaSxhLG8scyxjLHUsbCxoO2lmKChlPXRbMF0pLng9MCxlLnk9MCwhKGk+MSkpcmV0dXJuIGUucjtpZihuPXRbMV0sZS54PS1uLnIsbi54PWUucixuLnk9MCwhKGk+MikpcmV0dXJuIGUucituLnI7d2QobixlLHI9dFsyXSksZT1uZXcgQ2QoZSksbj1uZXcgQ2Qobikscj1uZXcgQ2QociksZS5uZXh0PXIucHJldmlvdXM9bixuLm5leHQ9ZS5wcmV2aW91cz1yLHIubmV4dD1uLnByZXZpb3VzPWU7dDpmb3Iocz0zO3M8aTsrK3Mpe3dkKGUuXyxuLl8scj10W3NdKSxyPW5ldyBDZChyKSxjPW4ubmV4dCx1PWUucHJldmlvdXMsbD1uLl8ucixoPWUuXy5yO2Rve2lmKGw8PWgpe2lmKEVkKGMuXyxyLl8pKXtuPWMsZS5uZXh0PW4sbi5wcmV2aW91cz1lLC0tcztjb250aW51ZSB0fWwrPWMuXy5yLGM9Yy5uZXh0fWVsc2V7aWYoRWQodS5fLHIuXykpeyhlPXUpLm5leHQ9bixuLnByZXZpb3VzPWUsLS1zO2NvbnRpbnVlIHR9aCs9dS5fLnIsdT11LnByZXZpb3VzfX13aGlsZShjIT09dS5uZXh0KTtmb3Ioci5wcmV2aW91cz1lLHIubmV4dD1uLGUubmV4dD1uLnByZXZpb3VzPW49cixhPVRkKGUpOyhyPXIubmV4dCkhPT1uOykobz1UZChyKSk8YSYmKGU9cixhPW8pO249ZS5uZXh0fWZvcihlPVtuLl9dLHI9bjsocj1yLm5leHQpIT09bjspZS5wdXNoKHIuXyk7Zm9yKHI9eWQoZSkscz0wO3M8aTsrK3MpKGU9dFtzXSkueC09ci54LGUueS09ci55O3JldHVybiByLnJ9dmFyIEFkPWZ1bmN0aW9uKHQpe3JldHVybiBTZCh0KSx0fTtmdW5jdGlvbiBNZCh0KXtyZXR1cm4gbnVsbD09dD9udWxsOk9kKHQpfWZ1bmN0aW9uIE9kKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdH1mdW5jdGlvbiBCZCgpe3JldHVybiAwfXZhciBOZD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19O2Z1bmN0aW9uIERkKHQpe3JldHVybiBNYXRoLnNxcnQodC52YWx1ZSl9dmFyIExkPWZ1bmN0aW9uKCl7dmFyIHQ9bnVsbCxlPTEsbj0xLHI9QmQ7ZnVuY3Rpb24gaShpKXtyZXR1cm4gaS54PWUvMixpLnk9bi8yLHQ/aS5lYWNoQmVmb3JlKElkKHQpKS5lYWNoQWZ0ZXIoUmQociwuNSkpLmVhY2hCZWZvcmUoRmQoMSkpOmkuZWFjaEJlZm9yZShJZChEZCkpLmVhY2hBZnRlcihSZChCZCwxKSkuZWFjaEFmdGVyKFJkKHIsaS5yL01hdGgubWluKGUsbikpKS5lYWNoQmVmb3JlKEZkKE1hdGgubWluKGUsbikvKDIqaS5yKSkpLGl9cmV0dXJuIGkucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PU1kKGUpLGkpOnR9LGkuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdFswXSxuPSt0WzFdLGkpOltlLG5dfSxpLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOZCgrdCksaSk6cn0saX07ZnVuY3Rpb24gSWQodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW58fChlLnI9TWF0aC5tYXgoMCwrdChlKXx8MCkpfX1mdW5jdGlvbiBSZCh0LGUpe3JldHVybiBmdW5jdGlvbihuKXtpZihyPW4uY2hpbGRyZW4pe3ZhciByLGksYSxvPXIubGVuZ3RoLHM9dChuKSplfHwwO2lmKHMpZm9yKGk9MDtpPG87KytpKXJbaV0ucis9cztpZihhPVNkKHIpLHMpZm9yKGk9MDtpPG87KytpKXJbaV0uci09cztuLnI9YStzfX19ZnVuY3Rpb24gRmQodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPWUucGFyZW50O2Uucio9dCxuJiYoZS54PW4ueCt0KmUueCxlLnk9bi55K3QqZS55KX19dmFyIFBkPWZ1bmN0aW9uKHQpe3QueDA9TWF0aC5yb3VuZCh0LngwKSx0LnkwPU1hdGgucm91bmQodC55MCksdC54MT1NYXRoLnJvdW5kKHQueDEpLHQueTE9TWF0aC5yb3VuZCh0LnkxKX0samQ9ZnVuY3Rpb24odCxlLG4scixpKXtmb3IodmFyIGEsbz10LmNoaWxkcmVuLHM9LTEsYz1vLmxlbmd0aCx1PXQudmFsdWUmJihyLWUpL3QudmFsdWU7KytzPGM7KShhPW9bc10pLnkwPW4sYS55MT1pLGEueDA9ZSxhLngxPWUrPWEudmFsdWUqdX0sWWQ9ZnVuY3Rpb24oKXt2YXIgdD0xLGU9MSxuPTAscj0hMTtmdW5jdGlvbiBpKGkpe3ZhciBhPWkuaGVpZ2h0KzE7cmV0dXJuIGkueDA9aS55MD1uLGkueDE9dCxpLnkxPWUvYSxpLmVhY2hCZWZvcmUoZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7ci5jaGlsZHJlbiYmamQocixyLngwLHQqKHIuZGVwdGgrMSkvZSxyLngxLHQqKHIuZGVwdGgrMikvZSk7dmFyIGk9ci54MCxhPXIueTAsbz1yLngxLW4scz1yLnkxLW47bzxpJiYoaT1vPShpK28pLzIpLHM8YSYmKGE9cz0oYStzKS8yKSxyLngwPWksci55MD1hLHIueDE9byxyLnkxPXN9fShlLGEpKSxyJiZpLmVhY2hCZWZvcmUoUGQpLGl9cmV0dXJuIGkucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ISF0LGkpOnJ9LGkuc2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rblswXSxlPStuWzFdLGkpOlt0LGVdfSxpLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3QsaSk6bn0saX0semQ9e2RlcHRoOi0xfSxVZD17fTtmdW5jdGlvbiAkZCh0KXtyZXR1cm4gdC5pZH1mdW5jdGlvbiBxZCh0KXtyZXR1cm4gdC5wYXJlbnRJZH12YXIgV2Q9ZnVuY3Rpb24oKXt2YXIgdD0kZCxlPXFkO2Z1bmN0aW9uIG4obil7dmFyIHIsaSxhLG8scyxjLHUsbD1uLmxlbmd0aCxoPW5ldyBBcnJheShsKSxmPXt9O2ZvcihpPTA7aTxsOysraSlyPW5baV0scz1oW2ldPW5ldyBkZChyKSxudWxsIT0oYz10KHIsaSxuKSkmJihjKz0iIikmJihmW3U9IiQiKyhzLmlkPWMpXT11IGluIGY/VWQ6cyk7Zm9yKGk9MDtpPGw7KytpKWlmKHM9aFtpXSxudWxsIT0oYz1lKG5baV0saSxuKSkmJihjKz0iIikpe2lmKCEobz1mWyIkIitjXSkpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK2MpO2lmKG89PT1VZCl0aHJvdyBuZXcgRXJyb3IoImFtYmlndW91czogIitjKTtvLmNoaWxkcmVuP28uY2hpbGRyZW4ucHVzaChzKTpvLmNoaWxkcmVuPVtzXSxzLnBhcmVudD1vfWVsc2V7aWYoYSl0aHJvdyBuZXcgRXJyb3IoIm11bHRpcGxlIHJvb3RzIik7YT1zfWlmKCFhKXRocm93IG5ldyBFcnJvcigibm8gcm9vdCIpO2lmKGEucGFyZW50PXpkLGEuZWFjaEJlZm9yZSgoZnVuY3Rpb24odCl7dC5kZXB0aD10LnBhcmVudC5kZXB0aCsxLC0tbH0pKS5lYWNoQmVmb3JlKGZkKSxhLnBhcmVudD1udWxsLGw+MCl0aHJvdyBuZXcgRXJyb3IoImN5Y2xlIik7cmV0dXJuIGF9cmV0dXJuIG4uaWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9T2QoZSksbik6dH0sbi5wYXJlbnRJZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1PZCh0KSxuKTplfSxufTtmdW5jdGlvbiBWZCh0LGUpe3JldHVybiB0LnBhcmVudD09PWUucGFyZW50PzE6Mn1mdW5jdGlvbiBIZCh0KXt2YXIgZT10LmNoaWxkcmVuO3JldHVybiBlP2VbMF06dC50fWZ1bmN0aW9uIEdkKHQpe3ZhciBlPXQuY2hpbGRyZW47cmV0dXJuIGU/ZVtlLmxlbmd0aC0xXTp0LnR9ZnVuY3Rpb24gWGQodCxlLG4pe3ZhciByPW4vKGUuaS10LmkpO2UuYy09cixlLnMrPW4sdC5jKz1yLGUueis9bixlLm0rPW59ZnVuY3Rpb24gWmQodCxlLG4pe3JldHVybiB0LmEucGFyZW50PT09ZS5wYXJlbnQ/dC5hOm59ZnVuY3Rpb24gUWQodCxlKXt0aGlzLl89dCx0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49bnVsbCx0aGlzLkE9bnVsbCx0aGlzLmE9dGhpcyx0aGlzLno9MCx0aGlzLm09MCx0aGlzLmM9MCx0aGlzLnM9MCx0aGlzLnQ9bnVsbCx0aGlzLmk9ZX1RZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkZC5wcm90b3R5cGUpO3ZhciBLZD1mdW5jdGlvbigpe3ZhciB0PVZkLGU9MSxuPTEscj1udWxsO2Z1bmN0aW9uIGkoaSl7dmFyIGM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4scixpLGEsbz1uZXcgUWQodCwwKSxzPVtvXTtlPXMucG9wKCk7KWlmKHI9ZS5fLmNoaWxkcmVuKWZvcihlLmNoaWxkcmVuPW5ldyBBcnJheShhPXIubGVuZ3RoKSxpPWEtMTtpPj0wOy0taSlzLnB1c2gobj1lLmNoaWxkcmVuW2ldPW5ldyBRZChyW2ldLGkpKSxuLnBhcmVudD1lO3JldHVybihvLnBhcmVudD1uZXcgUWQobnVsbCwwKSkuY2hpbGRyZW49W29dLG99KGkpO2lmKGMuZWFjaEFmdGVyKGEpLGMucGFyZW50Lm09LWMueixjLmVhY2hCZWZvcmUobykscilpLmVhY2hCZWZvcmUocyk7ZWxzZXt2YXIgdT1pLGw9aSxoPWk7aS5lYWNoQmVmb3JlKChmdW5jdGlvbih0KXt0Lng8dS54JiYodT10KSx0Lng+bC54JiYobD10KSx0LmRlcHRoPmguZGVwdGgmJihoPXQpfSkpO3ZhciBmPXU9PT1sPzE6dCh1LGwpLzIsZD1mLXUueCxwPWUvKGwueCtmK2QpLHk9bi8oaC5kZXB0aHx8MSk7aS5lYWNoQmVmb3JlKChmdW5jdGlvbih0KXt0Lng9KHQueCtkKSpwLHQueT10LmRlcHRoKnl9KSl9cmV0dXJuIGl9ZnVuY3Rpb24gYShlKXt2YXIgbj1lLmNoaWxkcmVuLHI9ZS5wYXJlbnQuY2hpbGRyZW4saT1lLmk/cltlLmktMV06bnVsbDtpZihuKXshZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49MCxyPTAsaT10LmNoaWxkcmVuLGE9aS5sZW5ndGg7LS1hPj0wOykoZT1pW2FdKS56Kz1uLGUubSs9bixuKz1lLnMrKHIrPWUuYyl9KGUpO3ZhciBhPShuWzBdLnorbltuLmxlbmd0aC0xXS56KS8yO2k/KGUuej1pLnordChlLl8saS5fKSxlLm09ZS56LWEpOmUuej1hfWVsc2UgaSYmKGUuej1pLnordChlLl8saS5fKSk7ZS5wYXJlbnQuQT1mdW5jdGlvbihlLG4scil7aWYobil7Zm9yKHZhciBpLGE9ZSxvPWUscz1uLGM9YS5wYXJlbnQuY2hpbGRyZW5bMF0sdT1hLm0sbD1vLm0saD1zLm0sZj1jLm07cz1HZChzKSxhPUhkKGEpLHMmJmE7KWM9SGQoYyksKG89R2QobykpLmE9ZSwoaT1zLnoraC1hLnotdSt0KHMuXyxhLl8pKT4wJiYoWGQoWmQocyxlLHIpLGUsaSksdSs9aSxsKz1pKSxoKz1zLm0sdSs9YS5tLGYrPWMubSxsKz1vLm07cyYmIUdkKG8pJiYoby50PXMsby5tKz1oLWwpLGEmJiFIZChjKSYmKGMudD1hLGMubSs9dS1mLHI9ZSl9cmV0dXJuIHJ9KGUsaSxlLnBhcmVudC5BfHxyWzBdKX1mdW5jdGlvbiBvKHQpe3QuXy54PXQueit0LnBhcmVudC5tLHQubSs9dC5wYXJlbnQubX1mdW5jdGlvbiBzKHQpe3QueCo9ZSx0Lnk9dC5kZXB0aCpufXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxpKTp0fSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ITEsZT0rdFswXSxuPSt0WzFdLGkpOnI/bnVsbDpbZSxuXX0saS5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0hMCxlPSt0WzBdLG49K3RbMV0saSk6cj9bZSxuXTpudWxsfSxpfSxKZD1mdW5jdGlvbih0LGUsbixyLGkpe2Zvcih2YXIgYSxvPXQuY2hpbGRyZW4scz0tMSxjPW8ubGVuZ3RoLHU9dC52YWx1ZSYmKGktbikvdC52YWx1ZTsrK3M8YzspKGE9b1tzXSkueDA9ZSxhLngxPXIsYS55MD1uLGEueTE9bis9YS52YWx1ZSp1fSx0cD0oMStNYXRoLnNxcnQoNSkpLzI7ZnVuY3Rpb24gZXAodCxlLG4scixpLGEpe2Zvcih2YXIgbyxzLGMsdSxsLGgsZixkLHAseSxnLHY9W10sbT1lLmNoaWxkcmVuLGI9MCx4PTAsXz1tLmxlbmd0aCxrPWUudmFsdWU7YjxfOyl7Yz1pLW4sdT1hLXI7ZG97bD1tW3grK10udmFsdWV9d2hpbGUoIWwmJng8Xyk7Zm9yKGg9Zj1sLGc9bCpsKih5PU1hdGgubWF4KHUvYyxjL3UpLyhrKnQpKSxwPU1hdGgubWF4KGYvZyxnL2gpO3g8XzsrK3gpe2lmKGwrPXM9bVt4XS52YWx1ZSxzPGgmJihoPXMpLHM+ZiYmKGY9cyksZz1sKmwqeSwoZD1NYXRoLm1heChmL2csZy9oKSk+cCl7bC09czticmVha31wPWR9di5wdXNoKG89e3ZhbHVlOmwsZGljZTpjPHUsY2hpbGRyZW46bS5zbGljZShiLHgpfSksby5kaWNlP2pkKG8sbixyLGksaz9yKz11KmwvazphKTpKZChvLG4scixrP24rPWMqbC9rOmksYSksay09bCxiPXh9cmV0dXJuIHZ9dmFyIG5wPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4scixpLGEpe2VwKGUsdCxuLHIsaSxhKX1yZXR1cm4gbi5yYXRpbz1mdW5jdGlvbihlKXtyZXR1cm4gdCgoZT0rZSk+MT9lOjEpfSxufSh0cCkscnA9ZnVuY3Rpb24oKXt2YXIgdD1ucCxlPSExLG49MSxyPTEsaT1bMF0sYT1CZCxvPUJkLHM9QmQsYz1CZCx1PUJkO2Z1bmN0aW9uIGwodCl7cmV0dXJuIHQueDA9dC55MD0wLHQueDE9bix0LnkxPXIsdC5lYWNoQmVmb3JlKGgpLGk9WzBdLGUmJnQuZWFjaEJlZm9yZShQZCksdH1mdW5jdGlvbiBoKGUpe3ZhciBuPWlbZS5kZXB0aF0scj1lLngwK24sbD1lLnkwK24saD1lLngxLW4sZj1lLnkxLW47aDxyJiYocj1oPShyK2gpLzIpLGY8bCYmKGw9Zj0obCtmKS8yKSxlLngwPXIsZS55MD1sLGUueDE9aCxlLnkxPWYsZS5jaGlsZHJlbiYmKG49aVtlLmRlcHRoKzFdPWEoZSkvMixyKz11KGUpLW4sbCs9byhlKS1uLChoLT1zKGUpLW4pPHImJihyPWg9KHIraCkvMiksKGYtPWMoZSktbik8bCYmKGw9Zj0obCtmKS8yKSx0KGUscixsLGgsZikpfXJldHVybiBsLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSEhdCxsKTplfSxsLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3RbMF0scj0rdFsxXSxsKTpbbixyXX0sbC50aWxlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PU9kKGUpLGwpOnR9LGwucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9sLnBhZGRpbmdJbm5lcih0KS5wYWRkaW5nT3V0ZXIodCk6bC5wYWRkaW5nSW5uZXIoKX0sbC5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOZCgrdCksbCk6YX0sbC5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bC5wYWRkaW5nVG9wKHQpLnBhZGRpbmdSaWdodCh0KS5wYWRkaW5nQm90dG9tKHQpLnBhZGRpbmdMZWZ0KHQpOmwucGFkZGluZ1RvcCgpfSxsLnBhZGRpbmdUb3A9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOZCgrdCksbCk6b30sbC5wYWRkaW5nUmlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOZCgrdCksbCk6c30sbC5wYWRkaW5nQm90dG9tPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6TmQoK3QpLGwpOmN9LGwucGFkZGluZ0xlZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOZCgrdCksbCk6dX0sbH0saXA9ZnVuY3Rpb24odCxlLG4scixpKXt2YXIgYSxvLHM9dC5jaGlsZHJlbixjPXMubGVuZ3RoLHU9bmV3IEFycmF5KGMrMSk7Zm9yKHVbMF09bz1hPTA7YTxjOysrYSl1W2ErMV09bys9c1thXS52YWx1ZTshZnVuY3Rpb24gdChlLG4scixpLGEsbyxjKXtpZihlPj1uLTEpe3ZhciBsPXNbZV07cmV0dXJuIGwueDA9aSxsLnkwPWEsbC54MT1vLHZvaWQobC55MT1jKX12YXIgaD11W2VdLGY9ci8yK2gsZD1lKzEscD1uLTE7Zm9yKDtkPHA7KXt2YXIgeT1kK3A+Pj4xO3VbeV08Zj9kPXkrMTpwPXl9Zi11W2QtMV08dVtkXS1mJiZlKzE8ZCYmLS1kO3ZhciBnPXVbZF0taCx2PXItZztpZihvLWk+Yy1hKXt2YXIgbT0oaSp2K28qZykvcjt0KGUsZCxnLGksYSxtLGMpLHQoZCxuLHYsbSxhLG8sYyl9ZWxzZXt2YXIgYj0oYSp2K2MqZykvcjt0KGUsZCxnLGksYSxvLGIpLHQoZCxuLHYsaSxiLG8sYyl9fSgwLGMsdC52YWx1ZSxlLG4scixpKX0sYXA9ZnVuY3Rpb24odCxlLG4scixpKXsoMSZ0LmRlcHRoP0pkOmpkKSh0LGUsbixyLGkpfSxvcD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuLHIsaSxhKXtpZigobz10Ll9zcXVhcmlmeSkmJm8ucmF0aW89PT1lKWZvcih2YXIgbyxzLGMsdSxsLGg9LTEsZj1vLmxlbmd0aCxkPXQudmFsdWU7KytoPGY7KXtmb3IoYz0ocz1vW2hdKS5jaGlsZHJlbix1PXMudmFsdWU9MCxsPWMubGVuZ3RoO3U8bDsrK3Upcy52YWx1ZSs9Y1t1XS52YWx1ZTtzLmRpY2U/amQocyxuLHIsaSxyKz0oYS1yKSpzLnZhbHVlL2QpOkpkKHMsbixyLG4rPShpLW4pKnMudmFsdWUvZCxhKSxkLT1zLnZhbHVlfWVsc2UgdC5fc3F1YXJpZnk9bz1lcChlLHQsbixyLGksYSksby5yYXRpbz1lfXJldHVybiBuLnJhdGlvPWZ1bmN0aW9uKGUpe3JldHVybiB0KChlPStlKT4xP2U6MSl9LG59KHRwKSxzcD1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHRbTWF0aC5tYXgoMCxNYXRoLm1pbihlLTEsTWF0aC5mbG9vcihuKmUpKSldfX0sY3A9ZnVuY3Rpb24odCxlKXt2YXIgbj11bigrdCwrZSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPW4odCk7cmV0dXJuIGUtMzYwKk1hdGguZmxvb3IoZS8zNjApfX0sdXA9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKHQqKDEtbikrZSpuKX19LGxwPU1hdGguU1FSVDI7ZnVuY3Rpb24gaHAodCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKSsxL3QpLzJ9dmFyIGZwPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpPXRbMF0sYT10WzFdLG89dFsyXSxzPWVbMF0sYz1lWzFdLHU9ZVsyXSxsPXMtaSxoPWMtYSxmPWwqbCtoKmg7aWYoZjwxZS0xMilyPU1hdGgubG9nKHUvbykvbHAsbj1mdW5jdGlvbih0KXtyZXR1cm5baSt0KmwsYSt0KmgsbypNYXRoLmV4cChscCp0KnIpXX07ZWxzZXt2YXIgZD1NYXRoLnNxcnQoZikscD0odSp1LW8qbys0KmYpLygyKm8qMipkKSx5PSh1KnUtbypvLTQqZikvKDIqdSoyKmQpLGc9TWF0aC5sb2coTWF0aC5zcXJ0KHAqcCsxKS1wKSx2PU1hdGgubG9nKE1hdGguc3FydCh5KnkrMSkteSk7cj0odi1nKS9scCxuPWZ1bmN0aW9uKHQpe3ZhciBlLG49dCpyLHM9aHAoZyksYz1vLygyKmQpKihzKihlPWxwKm4rZywoKGU9TWF0aC5leHAoMiplKSktMSkvKGUrMSkpLWZ1bmN0aW9uKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSktMS90KS8yfShnKSk7cmV0dXJuW2krYypsLGErYypoLG8qcy9ocChscCpuK2cpXX19cmV0dXJuIG4uZHVyYXRpb249MWUzKnIsbn07ZnVuY3Rpb24gZHAodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIHI9dCgoZT10bihlKSkuaCwobj10bihuKSkuaCksaT1obihlLnMsbi5zKSxhPWhuKGUubCxuLmwpLG89aG4oZS5vcGFjaXR5LG4ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmg9cih0KSxlLnM9aSh0KSxlLmw9YSh0KSxlLm9wYWNpdHk9byh0KSxlKyIifX19dmFyIHBwPWRwKHVuKSx5cD1kcChobik7ZnVuY3Rpb24gZ3AodCxlKXt2YXIgbj1obigodD1wYSh0KSkubCwoZT1wYShlKSkubCkscj1obih0LmEsZS5hKSxpPWhuKHQuYixlLmIpLGE9aG4odC5vcGFjaXR5LGUub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0Lmw9bihlKSx0LmE9cihlKSx0LmI9aShlKSx0Lm9wYWNpdHk9YShlKSx0KyIifX1mdW5jdGlvbiB2cCh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcj10KChlPWthKGUpKS5oLChuPWthKG4pKS5oKSxpPWhuKGUuYyxuLmMpLGE9aG4oZS5sLG4ubCksbz1obihlLm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuaD1yKHQpLGUuYz1pKHQpLGUubD1hKHQpLGUub3BhY2l0eT1vKHQpLGUrIiJ9fX12YXIgbXA9dnAodW4pLGJwPXZwKGhuKTtmdW5jdGlvbiB4cCh0KXtyZXR1cm4gZnVuY3Rpb24gZShuKXtmdW5jdGlvbiByKGUscil7dmFyIGk9dCgoZT1PYShlKSkuaCwocj1PYShyKSkuaCksYT1obihlLnMsci5zKSxvPWhuKGUubCxyLmwpLHM9aG4oZS5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmg9aSh0KSxlLnM9YSh0KSxlLmw9byhNYXRoLnBvdyh0LG4pKSxlLm9wYWNpdHk9cyh0KSxlKyIifX1yZXR1cm4gbj0rbixyLmdhbW1hPWUscn0oMSl9dmFyIF9wPXhwKHVuKSxrcD14cChobik7ZnVuY3Rpb24gd3AodCxlKXtmb3IodmFyIG49MCxyPWUubGVuZ3RoLTEsaT1lWzBdLGE9bmV3IEFycmF5KHI8MD8wOnIpO248cjspYVtuXT10KGksaT1lWysrbl0pO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKHItMSxNYXRoLmZsb29yKHQqPXIpKSk7cmV0dXJuIGFbZV0odC1lKX19dmFyIEVwPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPW5ldyBBcnJheShlKSxyPTA7cjxlOysrciluW3JdPXQoci8oZS0xKSk7cmV0dXJuIG59LFRwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPS0xLHI9dC5sZW5ndGgsaT10W3ItMV0sYT0wOysrbjxyOyllPWksaT10W25dLGErPWVbMV0qaVswXS1lWzBdKmlbMV07cmV0dXJuIGEvMn0sQ3A9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4scj0tMSxpPXQubGVuZ3RoLGE9MCxvPTAscz10W2ktMV0sYz0wOysrcjxpOyllPXMscz10W3JdLGMrPW49ZVswXSpzWzFdLXNbMF0qZVsxXSxhKz0oZVswXStzWzBdKSpuLG8rPShlWzFdK3NbMV0pKm47cmV0dXJuW2EvKGMqPTMpLG8vY119O2Z1bmN0aW9uIFNwKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfWZ1bmN0aW9uIEFwKHQpe2Zvcih2YXIgZSxuLHIsaT10Lmxlbmd0aCxhPVswLDFdLG89MixzPTI7czxpOysrcyl7Zm9yKDtvPjEmJihlPXRbYVtvLTJdXSxuPXRbYVtvLTFdXSxyPXRbc10sKG5bMF0tZVswXSkqKHJbMV0tZVsxXSktKG5bMV0tZVsxXSkqKHJbMF0tZVswXSk8PTApOyktLW87YVtvKytdPXN9cmV0dXJuIGEuc2xpY2UoMCxvKX12YXIgTXA9ZnVuY3Rpb24odCl7aWYoKG49dC5sZW5ndGgpPDMpcmV0dXJuIG51bGw7dmFyIGUsbixyPW5ldyBBcnJheShuKSxpPW5ldyBBcnJheShuKTtmb3IoZT0wO2U8bjsrK2UpcltlXT1bK3RbZV1bMF0sK3RbZV1bMV0sZV07Zm9yKHIuc29ydChTcCksZT0wO2U8bjsrK2UpaVtlXT1bcltlXVswXSwtcltlXVsxXV07dmFyIGE9QXAociksbz1BcChpKSxzPW9bMF09PT1hWzBdLGM9b1tvLmxlbmd0aC0xXT09PWFbYS5sZW5ndGgtMV0sdT1bXTtmb3IoZT1hLmxlbmd0aC0xO2U+PTA7LS1lKXUucHVzaCh0W3JbYVtlXV1bMl1dKTtmb3IoZT0rcztlPG8ubGVuZ3RoLWM7KytlKXUucHVzaCh0W3Jbb1tlXV1bMl1dKTtyZXR1cm4gdX0sT3A9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG4scixpPXQubGVuZ3RoLGE9dFtpLTFdLG89ZVswXSxzPWVbMV0sYz1hWzBdLHU9YVsxXSxsPSExLGg9MDtoPGk7KytoKW49KGE9dFtoXSlbMF0sKHI9YVsxXSk+cyE9dT5zJiZvPChjLW4pKihzLXIpLyh1LXIpK24mJihsPSFsKSxjPW4sdT1yO3JldHVybiBsfSxCcD1mdW5jdGlvbih0KXtmb3IodmFyIGUsbixyPS0xLGk9dC5sZW5ndGgsYT10W2ktMV0sbz1hWzBdLHM9YVsxXSxjPTA7KytyPGk7KWU9byxuPXMsZS09bz0oYT10W3JdKVswXSxuLT1zPWFbMV0sYys9TWF0aC5zcXJ0KGUqZStuKm4pO3JldHVybiBjfSxOcD1mdW5jdGlvbigpe3JldHVybiBNYXRoLnJhbmRvbSgpfSxEcD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuKXtyZXR1cm4gdD1udWxsPT10PzA6K3Qsbj1udWxsPT1uPzE6K24sMT09PWFyZ3VtZW50cy5sZW5ndGg/KG49dCx0PTApOm4tPXQsZnVuY3Rpb24oKXtyZXR1cm4gZSgpKm4rdH19cmV0dXJuIG4uc291cmNlPXQsbn0oTnApLExwPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4pe3ZhciByLGk7cmV0dXJuIHQ9bnVsbD09dD8wOit0LG49bnVsbD09bj8xOituLGZ1bmN0aW9uKCl7dmFyIGE7aWYobnVsbCE9cilhPXIscj1udWxsO2Vsc2UgZG97cj0yKmUoKS0xLGE9MiplKCktMSxpPXIqcithKmF9d2hpbGUoIWl8fGk+MSk7cmV0dXJuIHQrbiphKk1hdGguc3FydCgtMipNYXRoLmxvZyhpKS9pKX19cmV0dXJuIG4uc291cmNlPXQsbn0oTnApLElwPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbigpe3ZhciB0PUxwLnNvdXJjZShlKS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZXhwKHQoKSl9fXJldHVybiBuLnNvdXJjZT10LG59KE5wKSxScD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBuPTAscj0wO3I8dDsrK3Ipbis9ZSgpO3JldHVybiBufX1yZXR1cm4gbi5zb3VyY2U9dCxufShOcCksRnA9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3ZhciBuPVJwLnNvdXJjZShlKSh0KTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbigpL3R9fXJldHVybiBuLnNvdXJjZT10LG59KE5wKSxQcD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuLU1hdGgubG9nKDEtZSgpKS90fX1yZXR1cm4gbi5zb3VyY2U9dCxufShOcCk7ZnVuY3Rpb24ganAodCxlKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTp0aGlzLnJhbmdlKHQpO2JyZWFrO2RlZmF1bHQ6dGhpcy5yYW5nZShlKS5kb21haW4odCl9cmV0dXJuIHRoaXN9ZnVuY3Rpb24gWXAodCxlKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTp0aGlzLmludGVycG9sYXRvcih0KTticmVhaztkZWZhdWx0OnRoaXMuaW50ZXJwb2xhdG9yKGUpLmRvbWFpbih0KX1yZXR1cm4gdGhpc312YXIgenA9QXJyYXkucHJvdG90eXBlLFVwPXpwLm1hcCwkcD16cC5zbGljZSxxcD17bmFtZToiaW1wbGljaXQifTtmdW5jdGlvbiBXcCgpe3ZhciB0PVFpKCksZT1bXSxuPVtdLHI9cXA7ZnVuY3Rpb24gaShpKXt2YXIgYT1pKyIiLG89dC5nZXQoYSk7aWYoIW8pe2lmKHIhPT1xcClyZXR1cm4gcjt0LnNldChhLG89ZS5wdXNoKGkpKX1yZXR1cm4gblsoby0xKSVuLmxlbmd0aF19cmV0dXJuIGkuZG9tYWluPWZ1bmN0aW9uKG4pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBlLnNsaWNlKCk7ZT1bXSx0PVFpKCk7Zm9yKHZhciByLGEsbz0tMSxzPW4ubGVuZ3RoOysrbzxzOyl0LmhhcyhhPShyPW5bb10pKyIiKXx8dC5zZXQoYSxlLnB1c2gocikpO3JldHVybiBpfSxpLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSRwLmNhbGwodCksaSk6bi5zbGljZSgpfSxpLnVua25vd249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxpKTpyfSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gV3AoZSxuKS51bmtub3duKHIpfSxqcC5hcHBseShpLGFyZ3VtZW50cyksaX1mdW5jdGlvbiBWcCgpe3ZhciB0LGUsbj1XcCgpLnVua25vd24odm9pZCAwKSxyPW4uZG9tYWluLGk9bi5yYW5nZSxhPVswLDFdLG89ITEscz0wLGM9MCx1PS41O2Z1bmN0aW9uIGwoKXt2YXIgbj1yKCkubGVuZ3RoLGw9YVsxXTxhWzBdLGg9YVtsLTBdLGY9YVsxLWxdO3Q9KGYtaCkvTWF0aC5tYXgoMSxuLXMrMipjKSxvJiYodD1NYXRoLmZsb29yKHQpKSxoKz0oZi1oLXQqKG4tcykpKnUsZT10KigxLXMpLG8mJihoPU1hdGgucm91bmQoaCksZT1NYXRoLnJvdW5kKGUpKTt2YXIgZD1rKG4pLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGgrdCplfSkpO3JldHVybiBpKGw/ZC5yZXZlcnNlKCk6ZCl9cmV0dXJuIGRlbGV0ZSBuLnVua25vd24sbi5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIodCksbCgpKTpyKCl9LG4ucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9Wyt0WzBdLCt0WzFdXSxsKCkpOmEuc2xpY2UoKX0sbi5yYW5nZVJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhPVsrdFswXSwrdFsxXV0sbz0hMCxsKCl9LG4uYmFuZHdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIGV9LG4uc3RlcD1mdW5jdGlvbigpe3JldHVybiB0fSxuLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSEhdCxsKCkpOm99LG4ucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1NYXRoLm1pbigxLGM9K3QpLGwoKSk6c30sbi5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9TWF0aC5taW4oMSx0KSxsKCkpOnN9LG4ucGFkZGluZ091dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSt0LGwoKSk6Y30sbi5hbGlnbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpLGwoKSk6dX0sbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFZwKHIoKSxhKS5yb3VuZChvKS5wYWRkaW5nSW5uZXIocykucGFkZGluZ091dGVyKGMpLmFsaWduKHUpfSxqcC5hcHBseShsKCksYXJndW1lbnRzKX1mdW5jdGlvbiBIcCh0KXt2YXIgZT10LmNvcHk7cmV0dXJuIHQucGFkZGluZz10LnBhZGRpbmdPdXRlcixkZWxldGUgdC5wYWRkaW5nSW5uZXIsZGVsZXRlIHQucGFkZGluZ091dGVyLHQuY29weT1mdW5jdGlvbigpe3JldHVybiBIcChlKCkpfSx0fWZ1bmN0aW9uIEdwKCl7cmV0dXJuIEhwKFZwLmFwcGx5KG51bGwsYXJndW1lbnRzKS5wYWRkaW5nSW5uZXIoMSkpfXZhciBYcD1mdW5jdGlvbih0KXtyZXR1cm4rdH0sWnA9WzAsMV07ZnVuY3Rpb24gUXAodCl7cmV0dXJuIHR9ZnVuY3Rpb24gS3AodCxlKXtyZXR1cm4oZS09dD0rdCk/ZnVuY3Rpb24obil7cmV0dXJuKG4tdCkvZX06KG49aXNOYU4oZSk/TmFOOi41LGZ1bmN0aW9uKCl7cmV0dXJuIG59KTt2YXIgbn1mdW5jdGlvbiBKcCh0KXt2YXIgZSxuPXRbMF0scj10W3QubGVuZ3RoLTFdO3JldHVybiBuPnImJihlPW4sbj1yLHI9ZSksZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KG4sTWF0aC5taW4ocix0KSl9fWZ1bmN0aW9uIHR5KHQsZSxuKXt2YXIgcj10WzBdLGk9dFsxXSxhPWVbMF0sbz1lWzFdO3JldHVybiBpPHI/KHI9S3AoaSxyKSxhPW4obyxhKSk6KHI9S3AocixpKSxhPW4oYSxvKSksZnVuY3Rpb24odCl7cmV0dXJuIGEocih0KSl9fWZ1bmN0aW9uIGV5KHQsZSxuKXt2YXIgcj1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCktMSxpPW5ldyBBcnJheShyKSxhPW5ldyBBcnJheShyKSxvPS0xO2Zvcih0W3JdPHRbMF0mJih0PXQuc2xpY2UoKS5yZXZlcnNlKCksZT1lLnNsaWNlKCkucmV2ZXJzZSgpKTsrK288cjspaVtvXT1LcCh0W29dLHRbbysxXSksYVtvXT1uKGVbb10sZVtvKzFdKTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49Yyh0LGUsMSxyKS0xO3JldHVybiBhW25dKGlbbl0oZSkpfX1mdW5jdGlvbiBueSh0LGUpe3JldHVybiBlLmRvbWFpbih0LmRvbWFpbigpKS5yYW5nZSh0LnJhbmdlKCkpLmludGVycG9sYXRlKHQuaW50ZXJwb2xhdGUoKSkuY2xhbXAodC5jbGFtcCgpKS51bmtub3duKHQudW5rbm93bigpKX1mdW5jdGlvbiByeSgpe3ZhciB0LGUsbixyLGksYSxvPVpwLHM9WnAsYz1Bbix1PVFwO2Z1bmN0aW9uIGwoKXtyZXR1cm4gcj1NYXRoLm1pbihvLmxlbmd0aCxzLmxlbmd0aCk+Mj9leTp0eSxpPWE9bnVsbCxofWZ1bmN0aW9uIGgoZSl7cmV0dXJuIGlzTmFOKGU9K2UpP246KGl8fChpPXIoby5tYXAodCkscyxjKSkpKHQodShlKSkpfXJldHVybiBoLmludmVydD1mdW5jdGlvbihuKXtyZXR1cm4gdShlKChhfHwoYT1yKHMsby5tYXAodCksX24pKSkobikpKX0saC5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89VXAuY2FsbCh0LFhwKSx1PT09UXB8fCh1PUpwKG8pKSxsKCkpOm8uc2xpY2UoKX0saC5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0kcC5jYWxsKHQpLGwoKSk6cy5zbGljZSgpfSxoLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHM9JHAuY2FsbCh0KSxjPXVwLGwoKX0saC5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10P0pwKG8pOlFwLGgpOnUhPT1RcH0saC5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LGwoKSk6Y30saC51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsaCk6bn0sZnVuY3Rpb24obixyKXtyZXR1cm4gdD1uLGU9cixsKCl9fWZ1bmN0aW9uIGl5KHQsZSl7cmV0dXJuIHJ5KCkodCxlKX12YXIgYXk9ZnVuY3Rpb24odCxlLG4scil7dmFyIGksYT1BKHQsZSxuKTtzd2l0Y2goKHI9V3MobnVsbD09cj8iLGYiOnIpKS50eXBlKXtjYXNlInMiOnZhciBvPU1hdGgubWF4KE1hdGguYWJzKHQpLE1hdGguYWJzKGUpKTtyZXR1cm4gbnVsbCE9ci5wcmVjaXNpb258fGlzTmFOKGk9YWMoYSxvKSl8fChyLnByZWNpc2lvbj1pKSxacyhyLG8pO2Nhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOm51bGwhPXIucHJlY2lzaW9ufHxpc05hTihpPW9jKGEsTWF0aC5tYXgoTWF0aC5hYnModCksTWF0aC5hYnMoZSkpKSl8fChyLnByZWNpc2lvbj1pLSgiZSI9PT1yLnR5cGUpKTticmVhaztjYXNlImYiOmNhc2UiJSI6bnVsbCE9ci5wcmVjaXNpb258fGlzTmFOKGk9aWMoYSkpfHwoci5wcmVjaXNpb249aS0yKigiJSI9PT1yLnR5cGUpKX1yZXR1cm4gWHMocil9O2Z1bmN0aW9uIG95KHQpe3ZhciBlPXQuZG9tYWluO3JldHVybiB0LnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciBuPWUoKTtyZXR1cm4gQyhuWzBdLG5bbi5sZW5ndGgtMV0sbnVsbD09dD8xMDp0KX0sdC50aWNrRm9ybWF0PWZ1bmN0aW9uKHQsbil7dmFyIHI9ZSgpO3JldHVybiBheShyWzBdLHJbci5sZW5ndGgtMV0sbnVsbD09dD8xMDp0LG4pfSx0Lm5pY2U9ZnVuY3Rpb24obil7bnVsbD09biYmKG49MTApO3ZhciByLGk9ZSgpLGE9MCxvPWkubGVuZ3RoLTEscz1pW2FdLGM9aVtvXTtyZXR1cm4gYzxzJiYocj1zLHM9YyxjPXIscj1hLGE9byxvPXIpLChyPVMocyxjLG4pKT4wP3I9UyhzPU1hdGguZmxvb3Iocy9yKSpyLGM9TWF0aC5jZWlsKGMvcikqcixuKTpyPDAmJihyPVMocz1NYXRoLmNlaWwocypyKS9yLGM9TWF0aC5mbG9vcihjKnIpL3IsbikpLHI+MD8oaVthXT1NYXRoLmZsb29yKHMvcikqcixpW29dPU1hdGguY2VpbChjL3IpKnIsZShpKSk6cjwwJiYoaVthXT1NYXRoLmNlaWwocypyKS9yLGlbb109TWF0aC5mbG9vcihjKnIpL3IsZShpKSksdH0sdH1mdW5jdGlvbiBzeSgpe3ZhciB0PWl5KFFwLFFwKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIG55KHQsc3koKSl9LGpwLmFwcGx5KHQsYXJndW1lbnRzKSxveSh0KX1mdW5jdGlvbiBjeSh0KXt2YXIgZTtmdW5jdGlvbiBuKHQpe3JldHVybiBpc05hTih0PSt0KT9lOnR9cmV0dXJuIG4uaW52ZXJ0PW4sbi5kb21haW49bi5yYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1VcC5jYWxsKGUsWHApLG4pOnQuc2xpY2UoKX0sbi51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbik6ZX0sbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGN5KHQpLnVua25vd24oZSl9LHQ9YXJndW1lbnRzLmxlbmd0aD9VcC5jYWxsKHQsWHApOlswLDFdLG95KG4pfXZhciB1eT1mdW5jdGlvbih0LGUpe3ZhciBuLHI9MCxpPSh0PXQuc2xpY2UoKSkubGVuZ3RoLTEsYT10W3JdLG89dFtpXTtyZXR1cm4gbzxhJiYobj1yLHI9aSxpPW4sbj1hLGE9byxvPW4pLHRbcl09ZS5mbG9vcihhKSx0W2ldPWUuY2VpbChvKSx0fTtmdW5jdGlvbiBseSh0KXtyZXR1cm4gTWF0aC5sb2codCl9ZnVuY3Rpb24gaHkodCl7cmV0dXJuIE1hdGguZXhwKHQpfWZ1bmN0aW9uIGZ5KHQpe3JldHVybi1NYXRoLmxvZygtdCl9ZnVuY3Rpb24gZHkodCl7cmV0dXJuLU1hdGguZXhwKC10KX1mdW5jdGlvbiBweSh0KXtyZXR1cm4gaXNGaW5pdGUodCk/KygiMWUiK3QpOnQ8MD8wOnR9ZnVuY3Rpb24geXkodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybi10KC1lKX19ZnVuY3Rpb24gZ3kodCl7dmFyIGUsbixyPXQobHksaHkpLGk9ci5kb21haW4sYT0xMDtmdW5jdGlvbiBvKCl7cmV0dXJuIGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1NYXRoLkU/TWF0aC5sb2c6MTA9PT10JiZNYXRoLmxvZzEwfHwyPT09dCYmTWF0aC5sb2cyfHwodD1NYXRoLmxvZyh0KSxmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5sb2coZSkvdH0pfShhKSxuPWZ1bmN0aW9uKHQpe3JldHVybiAxMD09PXQ/cHk6dD09PU1hdGguRT9NYXRoLmV4cDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5wb3codCxlKX19KGEpLGkoKVswXTwwPyhlPXl5KGUpLG49eXkobiksdChmeSxkeSkpOnQobHksaHkpLHJ9cmV0dXJuIHIuYmFzZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdCxvKCkpOmF9LHIuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpKHQpLG8oKSk6aSgpfSxyLnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciByLG89aSgpLHM9b1swXSxjPW9bby5sZW5ndGgtMV07KHI9YzxzKSYmKGY9cyxzPWMsYz1mKTt2YXIgdSxsLGgsZj1lKHMpLGQ9ZShjKSxwPW51bGw9PXQ/MTA6K3QseT1bXTtpZighKGElMSkmJmQtZjxwKXtpZihmPU1hdGgucm91bmQoZiktMSxkPU1hdGgucm91bmQoZCkrMSxzPjApe2Zvcig7ZjxkOysrZilmb3IobD0xLHU9bihmKTtsPGE7KytsKWlmKCEoKGg9dSpsKTxzKSl7aWYoaD5jKWJyZWFrO3kucHVzaChoKX19ZWxzZSBmb3IoO2Y8ZDsrK2YpZm9yKGw9YS0xLHU9bihmKTtsPj0xOy0tbClpZighKChoPXUqbCk8cykpe2lmKGg+YylicmVhazt5LnB1c2goaCl9fWVsc2UgeT1DKGYsZCxNYXRoLm1pbihkLWYscCkpLm1hcChuKTtyZXR1cm4gcj95LnJldmVyc2UoKTp5fSxyLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxpKXtpZihudWxsPT1pJiYoaT0xMD09PWE/Ii4wZSI6IiwiKSwiZnVuY3Rpb24iIT10eXBlb2YgaSYmKGk9WHMoaSkpLHQ9PT0xLzApcmV0dXJuIGk7bnVsbD09dCYmKHQ9MTApO3ZhciBvPU1hdGgubWF4KDEsYSp0L3IudGlja3MoKS5sZW5ndGgpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj10L24oTWF0aC5yb3VuZChlKHQpKSk7cmV0dXJuIHIqYTxhLS41JiYocio9YSkscjw9bz9pKHQpOiIifX0sci5uaWNlPWZ1bmN0aW9uKCl7cmV0dXJuIGkodXkoaSgpLHtmbG9vcjpmdW5jdGlvbih0KXtyZXR1cm4gbihNYXRoLmZsb29yKGUodCkpKX0sY2VpbDpmdW5jdGlvbih0KXtyZXR1cm4gbihNYXRoLmNlaWwoZSh0KSkpfX0pKX0scn1mdW5jdGlvbiB2eSgpe3ZhciB0PWd5KHJ5KCkpLmRvbWFpbihbMSwxMF0pO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gbnkodCx2eSgpKS5iYXNlKHQuYmFzZSgpKX0sanAuYXBwbHkodCxhcmd1bWVudHMpLHR9ZnVuY3Rpb24gbXkodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnNpZ24oZSkqTWF0aC5sb2cxcChNYXRoLmFicyhlL3QpKX19ZnVuY3Rpb24gYnkodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnNpZ24oZSkqTWF0aC5leHBtMShNYXRoLmFicyhlKSkqdH19ZnVuY3Rpb24geHkodCl7dmFyIGU9MSxuPXQobXkoZSksYnkoZSkpO3JldHVybiBuLmNvbnN0YW50PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QobXkoZT0rbiksYnkoZSkpOmV9LG95KG4pfWZ1bmN0aW9uIF95KCl7dmFyIHQ9eHkocnkoKSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBueSh0LF95KCkpLmNvbnN0YW50KHQuY29uc3RhbnQoKSl9LGpwLmFwcGx5KHQsYXJndW1lbnRzKX1mdW5jdGlvbiBreSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGU8MD8tTWF0aC5wb3coLWUsdCk6TWF0aC5wb3coZSx0KX19ZnVuY3Rpb24gd3kodCl7cmV0dXJuIHQ8MD8tTWF0aC5zcXJ0KC10KTpNYXRoLnNxcnQodCl9ZnVuY3Rpb24gRXkodCl7cmV0dXJuIHQ8MD8tdCp0OnQqdH1mdW5jdGlvbiBUeSh0KXt2YXIgZT10KFFwLFFwKSxuPTE7ZnVuY3Rpb24gcigpe3JldHVybiAxPT09bj90KFFwLFFwKTouNT09PW4/dCh3eSxFeSk6dChreShuKSxreSgxL24pKX1yZXR1cm4gZS5leHBvbmVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxyKCkpOm59LG95KGUpfWZ1bmN0aW9uIEN5KCl7dmFyIHQ9VHkocnkoKSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBueSh0LEN5KCkpLmV4cG9uZW50KHQuZXhwb25lbnQoKSl9LGpwLmFwcGx5KHQsYXJndW1lbnRzKSx0fWZ1bmN0aW9uIFN5KCl7cmV0dXJuIEN5LmFwcGx5KG51bGwsYXJndW1lbnRzKS5leHBvbmVudCguNSl9ZnVuY3Rpb24gQXkoKXt2YXIgdCxlPVtdLG49W10saT1bXTtmdW5jdGlvbiBhKCl7dmFyIHQ9MCxyPU1hdGgubWF4KDEsbi5sZW5ndGgpO2ZvcihpPW5ldyBBcnJheShyLTEpOysrdDxyOylpW3QtMV09QihlLHQvcik7cmV0dXJuIG99ZnVuY3Rpb24gbyhlKXtyZXR1cm4gaXNOYU4oZT0rZSk/dDpuW2MoaSxlKV19cmV0dXJuIG8uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciByPW4uaW5kZXhPZih0KTtyZXR1cm4gcjwwP1tOYU4sTmFOXTpbcj4wP2lbci0xXTplWzBdLHI8aS5sZW5ndGg/aVtyXTplW2UubGVuZ3RoLTFdXX0sby5kb21haW49ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGUuc2xpY2UoKTtlPVtdO2Zvcih2YXIgbixpPTAsbz10Lmxlbmd0aDtpPG87KytpKW51bGw9PShuPXRbaV0pfHxpc05hTihuPStuKXx8ZS5wdXNoKG4pO3JldHVybiBlLnNvcnQociksYSgpfSxvLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSRwLmNhbGwodCksYSgpKTpuLnNsaWNlKCl9LG8udW5rbm93bj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG8pOnR9LG8ucXVhbnRpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGkuc2xpY2UoKX0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEF5KCkuZG9tYWluKGUpLnJhbmdlKG4pLnVua25vd24odCl9LGpwLmFwcGx5KG8sYXJndW1lbnRzKX1mdW5jdGlvbiBNeSgpe3ZhciB0LGU9MCxuPTEscj0xLGk9Wy41XSxhPVswLDFdO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIGU8PWU/YVtjKGksZSwwLHIpXTp0fWZ1bmN0aW9uIHMoKXt2YXIgdD0tMTtmb3IoaT1uZXcgQXJyYXkocik7Kyt0PHI7KWlbdF09KCh0KzEpKm4tKHQtcikqZSkvKHIrMSk7cmV0dXJuIG99cmV0dXJuIG8uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0WzBdLG49K3RbMV0scygpKTpbZSxuXX0sby5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0oYT0kcC5jYWxsKHQpKS5sZW5ndGgtMSxzKCkpOmEuc2xpY2UoKX0sby5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIG89YS5pbmRleE9mKHQpO3JldHVybiBvPDA/W05hTixOYU5dOm88MT9bZSxpWzBdXTpvPj1yP1tpW3ItMV0sbl06W2lbby0xXSxpW29dXX0sby51bmtub3duPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsbyk6b30sby50aHJlc2hvbGRzPWZ1bmN0aW9uKCl7cmV0dXJuIGkuc2xpY2UoKX0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIE15KCkuZG9tYWluKFtlLG5dKS5yYW5nZShhKS51bmtub3duKHQpfSxqcC5hcHBseShveShvKSxhcmd1bWVudHMpfWZ1bmN0aW9uIE95KCl7dmFyIHQsZT1bLjVdLG49WzAsMV0scj0xO2Z1bmN0aW9uIGkoaSl7cmV0dXJuIGk8PWk/bltjKGUsaSwwLHIpXTp0fXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0kcC5jYWxsKHQpLHI9TWF0aC5taW4oZS5sZW5ndGgsbi5sZW5ndGgtMSksaSk6ZS5zbGljZSgpfSxpLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSRwLmNhbGwodCkscj1NYXRoLm1pbihlLmxlbmd0aCxuLmxlbmd0aC0xKSxpKTpuLnNsaWNlKCl9LGkuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciByPW4uaW5kZXhPZih0KTtyZXR1cm5bZVtyLTFdLGVbcl1dfSxpLnVua25vd249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxpKTp0fSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gT3koKS5kb21haW4oZSkucmFuZ2UobikudW5rbm93bih0KX0sanAuYXBwbHkoaSxhcmd1bWVudHMpfXZhciBCeT1uZXcgRGF0ZSxOeT1uZXcgRGF0ZTtmdW5jdGlvbiBEeSh0LGUsbixyKXtmdW5jdGlvbiBpKGUpe3JldHVybiB0KGU9MD09PWFyZ3VtZW50cy5sZW5ndGg/bmV3IERhdGU6bmV3IERhdGUoK2UpKSxlfXJldHVybiBpLmZsb29yPWZ1bmN0aW9uKGUpe3JldHVybiB0KGU9bmV3IERhdGUoK2UpKSxlfSxpLmNlaWw9ZnVuY3Rpb24obil7cmV0dXJuIHQobj1uZXcgRGF0ZShuLTEpKSxlKG4sMSksdChuKSxufSxpLnJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBlPWkodCksbj1pLmNlaWwodCk7cmV0dXJuIHQtZTxuLXQ/ZTpufSxpLm9mZnNldD1mdW5jdGlvbih0LG4pe3JldHVybiBlKHQ9bmV3IERhdGUoK3QpLG51bGw9PW4/MTpNYXRoLmZsb29yKG4pKSx0fSxpLnJhbmdlPWZ1bmN0aW9uKG4scixhKXt2YXIgbyxzPVtdO2lmKG49aS5jZWlsKG4pLGE9bnVsbD09YT8xOk1hdGguZmxvb3IoYSksIShuPHImJmE+MCkpcmV0dXJuIHM7ZG97cy5wdXNoKG89bmV3IERhdGUoK24pKSxlKG4sYSksdChuKX13aGlsZShvPG4mJm48cik7cmV0dXJuIHN9LGkuZmlsdGVyPWZ1bmN0aW9uKG4pe3JldHVybiBEeSgoZnVuY3Rpb24oZSl7aWYoZT49ZSlmb3IoO3QoZSksIW4oZSk7KWUuc2V0VGltZShlLTEpfSksKGZ1bmN0aW9uKHQscil7aWYodD49dClpZihyPDApZm9yKDsrK3I8PTA7KWZvcig7ZSh0LC0xKSwhbih0KTspO2Vsc2UgZm9yKDstLXI+PTA7KWZvcig7ZSh0LDEpLCFuKHQpOyk7fSkpfSxuJiYoaS5jb3VudD1mdW5jdGlvbihlLHIpe3JldHVybiBCeS5zZXRUaW1lKCtlKSxOeS5zZXRUaW1lKCtyKSx0KEJ5KSx0KE55KSxNYXRoLmZsb29yKG4oQnksTnkpKX0saS5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP2kuZmlsdGVyKHI/ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSkldD09MH06ZnVuY3Rpb24oZSl7cmV0dXJuIGkuY291bnQoMCxlKSV0PT0wfSk6aTpudWxsfSksaX12YXIgTHk9RHkoKGZ1bmN0aW9uKHQpe3Quc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfSkpO0x5LmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/RHkoKGZ1bmN0aW9uKGUpe2Uuc2V0RnVsbFllYXIoTWF0aC5mbG9vcihlLmdldEZ1bGxZZWFyKCkvdCkqdCksZS5zZXRNb250aCgwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24oZSxuKXtlLnNldEZ1bGxZZWFyKGUuZ2V0RnVsbFllYXIoKStuKnQpfSkpOm51bGx9O3ZhciBJeT1MeSxSeT1MeS5yYW5nZSxGeT1EeSgoZnVuY3Rpb24odCl7dC5zZXREYXRlKDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldE1vbnRoKHQuZ2V0TW9udGgoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldE1vbnRoKCktdC5nZXRNb250aCgpKzEyKihlLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfSkpLFB5PUZ5LGp5PUZ5LnJhbmdlO2Z1bmN0aW9uIFl5KHQpe3JldHVybiBEeSgoZnVuY3Rpb24oZSl7ZS5zZXREYXRlKGUuZ2V0RGF0ZSgpLShlLmdldERheSgpKzctdCklNyksZS5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKSs3KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdC02ZTQqKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKS82MDQ4ZTV9KSl9dmFyIHp5PVl5KDApLFV5PVl5KDEpLCR5PVl5KDIpLHF5PVl5KDMpLFd5PVl5KDQpLFZ5PVl5KDUpLEh5PVl5KDYpLEd5PXp5LnJhbmdlLFh5PVV5LnJhbmdlLFp5PSR5LnJhbmdlLFF5PXF5LnJhbmdlLEt5PVd5LnJhbmdlLEp5PVZ5LnJhbmdlLHRnPUh5LnJhbmdlLGVnPUR5KChmdW5jdGlvbih0KXt0LnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdC02ZTQqKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKS84NjRlNX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXRlKCktMX0pKSxuZz1lZyxyZz1lZy5yYW5nZSxpZz1EeSgoZnVuY3Rpb24odCl7dC5zZXRUaW1lKHQtdC5nZXRNaWxsaXNlY29uZHMoKS0xZTMqdC5nZXRTZWNvbmRzKCktNmU0KnQuZ2V0TWludXRlcygpKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCszNmU1KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvMzZlNX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRIb3VycygpfSkpLGFnPWlnLG9nPWlnLnJhbmdlLHNnPUR5KChmdW5jdGlvbih0KXt0LnNldFRpbWUodC10LmdldE1pbGxpc2Vjb25kcygpLTFlMyp0LmdldFNlY29uZHMoKSl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrNmU0KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvNmU0fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKX0pKSxjZz1zZyx1Zz1zZy5yYW5nZSxsZz1EeSgoZnVuY3Rpb24odCl7dC5zZXRUaW1lKHQtdC5nZXRNaWxsaXNlY29uZHMoKSl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrMWUzKmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvMWUzfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ1NlY29uZHMoKX0pKSxoZz1sZyxmZz1sZy5yYW5nZSxkZz1EeSgoZnVuY3Rpb24oKXt9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS10fSkpO2RnLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGguZmxvb3IodCksaXNGaW5pdGUodCkmJnQ+MD90PjE/RHkoKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShNYXRoLmZsb29yKGUvdCkqdCl9KSwoZnVuY3Rpb24oZSxuKXtlLnNldFRpbWUoK2Urbip0KX0pLChmdW5jdGlvbihlLG4pe3JldHVybihuLWUpL3R9KSk6ZGc6bnVsbH07dmFyIHBnPWRnLHlnPWRnLnJhbmdlO2Z1bmN0aW9uIGdnKHQpe3JldHVybiBEeSgoZnVuY3Rpb24oZSl7ZS5zZXRVVENEYXRlKGUuZ2V0VVRDRGF0ZSgpLShlLmdldFVUQ0RheSgpKzctdCklNyksZS5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKSs3KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvNjA0OGU1fSkpfXZhciB2Zz1nZygwKSxtZz1nZygxKSxiZz1nZygyKSx4Zz1nZygzKSxfZz1nZyg0KSxrZz1nZyg1KSx3Zz1nZyg2KSxFZz12Zy5yYW5nZSxUZz1tZy5yYW5nZSxDZz1iZy5yYW5nZSxTZz14Zy5yYW5nZSxBZz1fZy5yYW5nZSxNZz1rZy5yYW5nZSxPZz13Zy5yYW5nZSxCZz1EeSgoZnVuY3Rpb24odCl7dC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpLzg2NGU1fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0RhdGUoKS0xfSkpLE5nPUJnLERnPUJnLnJhbmdlLExnPUR5KChmdW5jdGlvbih0KXt0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRnVsbFllYXIoKX0pKTtMZy5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1NYXRoLmZsb29yKHQpKSYmdD4wP0R5KChmdW5jdGlvbihlKXtlLnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IoZS5nZXRVVENGdWxsWWVhcigpL3QpKnQpLGUuc2V0VVRDTW9udGgoMCwxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKGUsbil7ZS5zZXRVVENGdWxsWWVhcihlLmdldFVUQ0Z1bGxZZWFyKCkrbip0KX0pKTpudWxsfTt2YXIgSWc9TGcsUmc9TGcucmFuZ2U7ZnVuY3Rpb24gRmcodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZSgtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCk7cmV0dXJuIGUuc2V0RnVsbFllYXIodC55KSxlfXJldHVybiBuZXcgRGF0ZSh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpfWZ1bmN0aW9uIFBnKHQpe2lmKDA8PXQueSYmdC55PDEwMCl7dmFyIGU9bmV3IERhdGUoRGF0ZS5VVEMoLTEsdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpKTtyZXR1cm4gZS5zZXRVVENGdWxsWWVhcih0LnkpLGV9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpfWZ1bmN0aW9uIGpnKHQsZSxuKXtyZXR1cm57eTp0LG06ZSxkOm4sSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBZZyh0KXt2YXIgZT10LmRhdGVUaW1lLG49dC5kYXRlLHI9dC50aW1lLGk9dC5wZXJpb2RzLGE9dC5kYXlzLG89dC5zaG9ydERheXMscz10Lm1vbnRocyxjPXQuc2hvcnRNb250aHMsdT1LZyhpKSxsPUpnKGkpLGg9S2coYSksZj1KZyhhKSxkPUtnKG8pLHA9SmcobykseT1LZyhzKSxnPUpnKHMpLHY9S2coYyksbT1KZyhjKSxiPXthOmZ1bmN0aW9uKHQpe3JldHVybiBvW3QuZ2V0RGF5KCldfSxBOmZ1bmN0aW9uKHQpe3JldHVybiBhW3QuZ2V0RGF5KCldfSxiOmZ1bmN0aW9uKHQpe3JldHVybiBjW3QuZ2V0TW9udGgoKV19LEI6ZnVuY3Rpb24odCl7cmV0dXJuIHNbdC5nZXRNb250aCgpXX0sYzpudWxsLGQ6eHYsZTp4dixmOlR2LEg6X3YsSTprdixqOnd2LEw6RXYsbTpDdixNOlN2LHA6ZnVuY3Rpb24odCl7cmV0dXJuIGlbKyh0LmdldEhvdXJzKCk+PTEyKV19LHE6ZnVuY3Rpb24odCl7cmV0dXJuIDErfn4odC5nZXRNb250aCgpLzMpfSxROmVtLHM6bm0sUzpBdix1Ok12LFU6T3YsVjpCdix3Ok52LFc6RHYseDpudWxsLFg6bnVsbCx5Okx2LFk6SXYsWjpSdiwiJSI6dG19LHg9e2E6ZnVuY3Rpb24odCl7cmV0dXJuIG9bdC5nZXRVVENEYXkoKV19LEE6ZnVuY3Rpb24odCl7cmV0dXJuIGFbdC5nZXRVVENEYXkoKV19LGI6ZnVuY3Rpb24odCl7cmV0dXJuIGNbdC5nZXRVVENNb250aCgpXX0sQjpmdW5jdGlvbih0KXtyZXR1cm4gc1t0LmdldFVUQ01vbnRoKCldfSxjOm51bGwsZDpGdixlOkZ2LGY6VXYsSDpQdixJOmp2LGo6WXYsTDp6dixtOiR2LE06cXYscDpmdW5jdGlvbih0KXtyZXR1cm4gaVsrKHQuZ2V0VVRDSG91cnMoKT49MTIpXX0scTpmdW5jdGlvbih0KXtyZXR1cm4gMSt+fih0LmdldFVUQ01vbnRoKCkvMyl9LFE6ZW0sczpubSxTOld2LHU6VnYsVTpIdixWOkd2LHc6WHYsVzpadix4Om51bGwsWDpudWxsLHk6UXYsWTpLdixaOkp2LCIlIjp0bX0sXz17YTpmdW5jdGlvbih0LGUsbil7dmFyIHI9ZC5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0Lnc9cFtyWzBdLnRvTG93ZXJDYXNlKCldLG4rclswXS5sZW5ndGgpOi0xfSxBOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1oLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQudz1mW3JbMF0udG9Mb3dlckNhc2UoKV0sbityWzBdLmxlbmd0aCk6LTF9LGI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPXYuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5tPW1bclswXS50b0xvd2VyQ2FzZSgpXSxuK3JbMF0ubGVuZ3RoKTotMX0sQjpmdW5jdGlvbih0LGUsbil7dmFyIHI9eS5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0Lm09Z1tyWzBdLnRvTG93ZXJDYXNlKCldLG4rclswXS5sZW5ndGgpOi0xfSxjOmZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gRSh0LGUsbixyKX0sZDpsdixlOmx2LGY6Z3YsSDpmdixJOmZ2LGo6aHYsTDp5dixtOnV2LE06ZHYscDpmdW5jdGlvbih0LGUsbil7dmFyIHI9dS5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0LnA9bFtyWzBdLnRvTG93ZXJDYXNlKCldLG4rclswXS5sZW5ndGgpOi0xfSxxOmN2LFE6bXYsczpidixTOnB2LHU6ZXYsVTpudixWOnJ2LHc6dHYsVzppdix4OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gRSh0LG4sZSxyKX0sWDpmdW5jdGlvbih0LGUsbil7cmV0dXJuIEUodCxyLGUsbil9LHk6b3YsWTphdixaOnN2LCIlIjp2dn07ZnVuY3Rpb24gayh0LGUpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgcixpLGEsbz1bXSxzPS0xLGM9MCx1PXQubGVuZ3RoO2ZvcihuIGluc3RhbmNlb2YgRGF0ZXx8KG49bmV3IERhdGUoK24pKTsrK3M8dTspMzc9PT10LmNoYXJDb2RlQXQocykmJihvLnB1c2godC5zbGljZShjLHMpKSxudWxsIT0oaT1WZ1tyPXQuY2hhckF0KCsrcyldKT9yPXQuY2hhckF0KCsrcyk6aT0iZSI9PT1yPyIgIjoiMCIsKGE9ZVtyXSkmJihyPWEobixpKSksby5wdXNoKHIpLGM9cysxKTtyZXR1cm4gby5wdXNoKHQuc2xpY2UoYyxzKSksby5qb2luKCIiKX19ZnVuY3Rpb24gdyh0LGUpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgcixpLGE9amcoMTkwMCx2b2lkIDAsMSk7aWYoRShhLHQsbis9IiIsMCkhPW4ubGVuZ3RoKXJldHVybiBudWxsO2lmKCJRImluIGEpcmV0dXJuIG5ldyBEYXRlKGEuUSk7aWYoInMiaW4gYSlyZXR1cm4gbmV3IERhdGUoMWUzKmEucysoIkwiaW4gYT9hLkw6MCkpO2lmKCFlfHwiWiJpbiBhfHwoYS5aPTApLCJwImluIGEmJihhLkg9YS5IJTEyKzEyKmEucCksdm9pZCAwPT09YS5tJiYoYS5tPSJxImluIGE/YS5xOjApLCJWImluIGEpe2lmKGEuVjwxfHxhLlY+NTMpcmV0dXJuIG51bGw7InciaW4gYXx8KGEudz0xKSwiWiJpbiBhPyhpPShyPVBnKGpnKGEueSwwLDEpKSkuZ2V0VVRDRGF5KCkscj1pPjR8fDA9PT1pP21nLmNlaWwocik6bWcocikscj1OZy5vZmZzZXQociw3KihhLlYtMSkpLGEueT1yLmdldFVUQ0Z1bGxZZWFyKCksYS5tPXIuZ2V0VVRDTW9udGgoKSxhLmQ9ci5nZXRVVENEYXRlKCkrKGEudys2KSU3KTooaT0ocj1GZyhqZyhhLnksMCwxKSkpLmdldERheSgpLHI9aT40fHwwPT09aT9VeS5jZWlsKHIpOlV5KHIpLHI9bmcub2Zmc2V0KHIsNyooYS5WLTEpKSxhLnk9ci5nZXRGdWxsWWVhcigpLGEubT1yLmdldE1vbnRoKCksYS5kPXIuZ2V0RGF0ZSgpKyhhLncrNiklNyl9ZWxzZSgiVyJpbiBhfHwiVSJpbiBhKSYmKCJ3ImluIGF8fChhLnc9InUiaW4gYT9hLnUlNzoiVyJpbiBhPzE6MCksaT0iWiJpbiBhP1BnKGpnKGEueSwwLDEpKS5nZXRVVENEYXkoKTpGZyhqZyhhLnksMCwxKSkuZ2V0RGF5KCksYS5tPTAsYS5kPSJXImluIGE/KGEudys2KSU3KzcqYS5XLShpKzUpJTc6YS53KzcqYS5VLShpKzYpJTcpO3JldHVybiJaImluIGE/KGEuSCs9YS5aLzEwMHwwLGEuTSs9YS5aJTEwMCxQZyhhKSk6RmcoYSl9fWZ1bmN0aW9uIEUodCxlLG4scil7Zm9yKHZhciBpLGEsbz0wLHM9ZS5sZW5ndGgsYz1uLmxlbmd0aDtvPHM7KXtpZihyPj1jKXJldHVybi0xO2lmKDM3PT09KGk9ZS5jaGFyQ29kZUF0KG8rKykpKXtpZihpPWUuY2hhckF0KG8rKyksIShhPV9baSBpbiBWZz9lLmNoYXJBdChvKyspOmldKXx8KHI9YSh0LG4scikpPDApcmV0dXJuLTF9ZWxzZSBpZihpIT1uLmNoYXJDb2RlQXQocisrKSlyZXR1cm4tMX1yZXR1cm4gcn1yZXR1cm4oYi54PWsobixiKSxiLlg9ayhyLGIpLGIuYz1rKGUsYikseC54PWsobix4KSx4Llg9ayhyLHgpLHguYz1rKGUseCkse2Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgZT1rKHQrPSIiLGIpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXcodCs9IiIsITEpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHV0Y0Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgZT1rKHQrPSIiLHgpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHV0Y1BhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXcodCs9IiIsITApO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9fSl9dmFyIHpnLFVnLCRnLHFnLFdnLFZnPXsiLSI6IiIsXzoiICIsMDoiMCJ9LEhnPS9eXHMqXGQrLyxHZz0vXiUvLFhnPS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiBaZyh0LGUsbil7dmFyIHI9dDwwPyItIjoiIixpPShyPy10OnQpKyIiLGE9aS5sZW5ndGg7cmV0dXJuIHIrKGE8bj9uZXcgQXJyYXkobi1hKzEpLmpvaW4oZSkraTppKX1mdW5jdGlvbiBRZyh0KXtyZXR1cm4gdC5yZXBsYWNlKFhnLCJcXCQmIil9ZnVuY3Rpb24gS2codCl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK3QubWFwKFFnKS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gSmcodCl7Zm9yKHZhciBlPXt9LG49LTEscj10Lmxlbmd0aDsrK248cjspZVt0W25dLnRvTG93ZXJDYXNlKCldPW47cmV0dXJuIGV9ZnVuY3Rpb24gdHYodCxlLG4pe3ZhciByPUhnLmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiByPyh0Lnc9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZXYodCxlLG4pe3ZhciByPUhnLmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiByPyh0LnU9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbnYodCxlLG4pe3ZhciByPUhnLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0LlU9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcnYodCxlLG4pe3ZhciByPUhnLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0LlY9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gaXYodCxlLG4pe3ZhciByPUhnLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Llc9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYXYodCxlLG4pe3ZhciByPUhnLmV4ZWMoZS5zbGljZShuLG4rNCkpO3JldHVybiByPyh0Lnk9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gb3YodCxlLG4pe3ZhciByPUhnLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Lnk9K3JbMF0rKCtyWzBdPjY4PzE5MDA6MmUzKSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBzdih0LGUsbil7dmFyIHI9L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWMoZS5zbGljZShuLG4rNikpO3JldHVybiByPyh0Llo9clsxXT8wOi0oclsyXSsoclszXXx8IjAwIikpLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGN2KHQsZSxuKXt2YXIgcj1IZy5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gcj8odC5xPTMqclswXS0zLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHV2KHQsZSxuKXt2YXIgcj1IZy5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5tPXJbMF0tMSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBsdih0LGUsbil7dmFyIHI9SGcuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuZD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBodih0LGUsbil7dmFyIHI9SGcuZXhlYyhlLnNsaWNlKG4sbiszKSk7cmV0dXJuIHI/KHQubT0wLHQuZD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBmdih0LGUsbil7dmFyIHI9SGcuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuSD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBkdih0LGUsbil7dmFyIHI9SGcuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuTT0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBwdih0LGUsbil7dmFyIHI9SGcuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuUz0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB5dih0LGUsbil7dmFyIHI9SGcuZXhlYyhlLnNsaWNlKG4sbiszKSk7cmV0dXJuIHI/KHQuTD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBndih0LGUsbil7dmFyIHI9SGcuZXhlYyhlLnNsaWNlKG4sbis2KSk7cmV0dXJuIHI/KHQuTD1NYXRoLmZsb29yKHJbMF0vMWUzKSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB2dih0LGUsbil7dmFyIHI9R2cuZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIHI/bityWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBtdih0LGUsbil7dmFyIHI9SGcuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5RPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGJ2KHQsZSxuKXt2YXIgcj1IZy5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0LnM9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24geHYodCxlKXtyZXR1cm4gWmcodC5nZXREYXRlKCksZSwyKX1mdW5jdGlvbiBfdih0LGUpe3JldHVybiBaZyh0LmdldEhvdXJzKCksZSwyKX1mdW5jdGlvbiBrdih0LGUpe3JldHVybiBaZyh0LmdldEhvdXJzKCklMTJ8fDEyLGUsMil9ZnVuY3Rpb24gd3YodCxlKXtyZXR1cm4gWmcoMStuZy5jb3VudChJeSh0KSx0KSxlLDMpfWZ1bmN0aW9uIEV2KHQsZSl7cmV0dXJuIFpnKHQuZ2V0TWlsbGlzZWNvbmRzKCksZSwzKX1mdW5jdGlvbiBUdih0LGUpe3JldHVybiBFdih0LGUpKyIwMDAifWZ1bmN0aW9uIEN2KHQsZSl7cmV0dXJuIFpnKHQuZ2V0TW9udGgoKSsxLGUsMil9ZnVuY3Rpb24gU3YodCxlKXtyZXR1cm4gWmcodC5nZXRNaW51dGVzKCksZSwyKX1mdW5jdGlvbiBBdih0LGUpe3JldHVybiBaZyh0LmdldFNlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIE12KHQpe3ZhciBlPXQuZ2V0RGF5KCk7cmV0dXJuIDA9PT1lPzc6ZX1mdW5jdGlvbiBPdih0LGUpe3JldHVybiBaZyh6eS5jb3VudChJeSh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gQnYodCxlKXt2YXIgbj10LmdldERheSgpO3JldHVybiB0PW4+PTR8fDA9PT1uP1d5KHQpOld5LmNlaWwodCksWmcoV3kuY291bnQoSXkodCksdCkrKDQ9PT1JeSh0KS5nZXREYXkoKSksZSwyKX1mdW5jdGlvbiBOdih0KXtyZXR1cm4gdC5nZXREYXkoKX1mdW5jdGlvbiBEdih0LGUpe3JldHVybiBaZyhVeS5jb3VudChJeSh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gTHYodCxlKXtyZXR1cm4gWmcodC5nZXRGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIEl2KHQsZSl7cmV0dXJuIFpnKHQuZ2V0RnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBSdih0KXt2YXIgZT10LmdldFRpbWV6b25lT2Zmc2V0KCk7cmV0dXJuKGU+MD8iLSI6KGUqPS0xLCIrIikpK1pnKGUvNjB8MCwiMCIsMikrWmcoZSU2MCwiMCIsMil9ZnVuY3Rpb24gRnYodCxlKXtyZXR1cm4gWmcodC5nZXRVVENEYXRlKCksZSwyKX1mdW5jdGlvbiBQdih0LGUpe3JldHVybiBaZyh0LmdldFVUQ0hvdXJzKCksZSwyKX1mdW5jdGlvbiBqdih0LGUpe3JldHVybiBaZyh0LmdldFVUQ0hvdXJzKCklMTJ8fDEyLGUsMil9ZnVuY3Rpb24gWXYodCxlKXtyZXR1cm4gWmcoMStOZy5jb3VudChJZyh0KSx0KSxlLDMpfWZ1bmN0aW9uIHp2KHQsZSl7cmV0dXJuIFpnKHQuZ2V0VVRDTWlsbGlzZWNvbmRzKCksZSwzKX1mdW5jdGlvbiBVdih0LGUpe3JldHVybiB6dih0LGUpKyIwMDAifWZ1bmN0aW9uICR2KHQsZSl7cmV0dXJuIFpnKHQuZ2V0VVRDTW9udGgoKSsxLGUsMil9ZnVuY3Rpb24gcXYodCxlKXtyZXR1cm4gWmcodC5nZXRVVENNaW51dGVzKCksZSwyKX1mdW5jdGlvbiBXdih0LGUpe3JldHVybiBaZyh0LmdldFVUQ1NlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIFZ2KHQpe3ZhciBlPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIDA9PT1lPzc6ZX1mdW5jdGlvbiBIdih0LGUpe3JldHVybiBaZyh2Zy5jb3VudChJZyh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gR3YodCxlKXt2YXIgbj10LmdldFVUQ0RheSgpO3JldHVybiB0PW4+PTR8fDA9PT1uP19nKHQpOl9nLmNlaWwodCksWmcoX2cuY291bnQoSWcodCksdCkrKDQ9PT1JZyh0KS5nZXRVVENEYXkoKSksZSwyKX1mdW5jdGlvbiBYdih0KXtyZXR1cm4gdC5nZXRVVENEYXkoKX1mdW5jdGlvbiBadih0LGUpe3JldHVybiBaZyhtZy5jb3VudChJZyh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gUXYodCxlKXtyZXR1cm4gWmcodC5nZXRVVENGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIEt2KHQsZSl7cmV0dXJuIFpnKHQuZ2V0VVRDRnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBKdigpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24gdG0oKXtyZXR1cm4iJSJ9ZnVuY3Rpb24gZW0odCl7cmV0dXJuK3R9ZnVuY3Rpb24gbm0odCl7cmV0dXJuIE1hdGguZmxvb3IoK3QvMWUzKX1mdW5jdGlvbiBybSh0KXtyZXR1cm4gemc9WWcodCksVWc9emcuZm9ybWF0LCRnPXpnLnBhcnNlLHFnPXpnLnV0Y0Zvcm1hdCxXZz16Zy51dGNQYXJzZSx6Z31ybSh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pO2Z1bmN0aW9uIGltKHQpe3JldHVybiBuZXcgRGF0ZSh0KX1mdW5jdGlvbiBhbSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIERhdGU/K3Q6K25ldyBEYXRlKCt0KX1mdW5jdGlvbiBvbSh0LGUsbixyLGEsbyxzLGMsdSl7dmFyIGw9aXkoUXAsUXApLGg9bC5pbnZlcnQsZj1sLmRvbWFpbixkPXUoIi4lTCIpLHA9dSgiOiVTIikseT11KCIlSTolTSIpLGc9dSgiJUkgJXAiKSx2PXUoIiVhICVkIiksbT11KCIlYiAlZCIpLGI9dSgiJUIiKSx4PXUoIiVZIiksXz1bW3MsMSwxZTNdLFtzLDUsNWUzXSxbcywxNSwxNWUzXSxbcywzMCwzZTRdLFtvLDEsNmU0XSxbbyw1LDNlNV0sW28sMTUsOWU1XSxbbywzMCwxOGU1XSxbYSwxLDM2ZTVdLFthLDMsMTA4ZTVdLFthLDYsMjE2ZTVdLFthLDEyLDQzMmU1XSxbciwxLDg2NGU1XSxbciwyLDE3MjhlNV0sW24sMSw2MDQ4ZTVdLFtlLDEsMjU5MmU2XSxbZSwzLDc3NzZlNl0sW3QsMSwzMTUzNmU2XV07ZnVuY3Rpb24gayhpKXtyZXR1cm4ocyhpKTxpP2Q6byhpKTxpP3A6YShpKTxpP3k6cihpKTxpP2c6ZShpKTxpP24oaSk8aT92Om06dChpKTxpP2I6eCkoaSl9ZnVuY3Rpb24gdyhlLG4scixhKXtpZihudWxsPT1lJiYoZT0xMCksIm51bWJlciI9PXR5cGVvZiBlKXt2YXIgbz1NYXRoLmFicyhyLW4pL2Uscz1pKChmdW5jdGlvbih0KXtyZXR1cm4gdFsyXX0pKS5yaWdodChfLG8pO3M9PT1fLmxlbmd0aD8oYT1BKG4vMzE1MzZlNixyLzMxNTM2ZTYsZSksZT10KTpzPyhhPShzPV9bby9fW3MtMV1bMl08X1tzXVsyXS9vP3MtMTpzXSlbMV0sZT1zWzBdKTooYT1NYXRoLm1heChBKG4scixlKSwxKSxlPWMpfXJldHVybiBudWxsPT1hP2U6ZS5ldmVyeShhKX1yZXR1cm4gbC5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBEYXRlKGgodCkpfSxsLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9mKFVwLmNhbGwodCxhbSkpOmYoKS5tYXAoaW0pfSxsLnRpY2tzPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj1mKCksaT1yWzBdLGE9cltyLmxlbmd0aC0xXSxvPWE8aTtyZXR1cm4gbyYmKG49aSxpPWEsYT1uKSxuPShuPXcodCxpLGEsZSkpP24ucmFuZ2UoaSxhKzEpOltdLG8/bi5yZXZlcnNlKCk6bn0sbC50aWNrRm9ybWF0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PWU/azp1KGUpfSxsLm5pY2U9ZnVuY3Rpb24odCxlKXt2YXIgbj1mKCk7cmV0dXJuKHQ9dyh0LG5bMF0sbltuLmxlbmd0aC0xXSxlKSk/Zih1eShuLHQpKTpsfSxsLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gbnkobCxvbSh0LGUsbixyLGEsbyxzLGMsdSkpfSxsfXZhciBzbT1mdW5jdGlvbigpe3JldHVybiBqcC5hcHBseShvbShJeSxQeSx6eSxuZyxhZyxjZyxoZyxwZyxVZykuZG9tYWluKFtuZXcgRGF0ZSgyZTMsMCwxKSxuZXcgRGF0ZSgyZTMsMCwyKV0pLGFyZ3VtZW50cyl9LGNtPUR5KChmdW5jdGlvbih0KXt0LnNldFVUQ0RhdGUoMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDTW9udGgodC5nZXRVVENNb250aCgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0VVRDTW9udGgoKS10LmdldFVUQ01vbnRoKCkrMTIqKGUuZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCkpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCl9KSksdW09Y20sbG09Y20ucmFuZ2UsaG09RHkoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDTWludXRlcygwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrMzZlNSplKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpLzM2ZTV9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDSG91cnMoKX0pKSxmbT1obSxkbT1obS5yYW5nZSxwbT1EeSgoZnVuY3Rpb24odCl7dC5zZXRVVENTZWNvbmRzKDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrNmU0KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvNmU0fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbnV0ZXMoKX0pKSx5bT1wbSxnbT1wbS5yYW5nZSx2bT1mdW5jdGlvbigpe3JldHVybiBqcC5hcHBseShvbShJZyx1bSx2ZyxOZyxmbSx5bSxoZyxwZyxxZykuZG9tYWluKFtEYXRlLlVUQygyZTMsMCwxKSxEYXRlLlVUQygyZTMsMCwyKV0pLGFyZ3VtZW50cyl9O2Z1bmN0aW9uIG1tKCl7dmFyIHQsZSxuLHIsaSxhPTAsbz0xLHM9UXAsYz0hMTtmdW5jdGlvbiB1KGUpe3JldHVybiBpc05hTihlPStlKT9pOnMoMD09PW4/LjU6KGU9KHIoZSktdCkqbixjP01hdGgubWF4KDAsTWF0aC5taW4oMSxlKSk6ZSkpfXJldHVybiB1LmRvbWFpbj1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1yKGE9K2lbMF0pLGU9cihvPStpWzFdKSxuPXQ9PT1lPzA6MS8oZS10KSx1KTpbYSxvXX0sdS5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0hIXQsdSk6Y30sdS5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dCx1KTpzfSx1LnVua25vd249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCx1KTppfSxmdW5jdGlvbihpKXtyZXR1cm4gcj1pLHQ9aShhKSxlPWkobyksbj10PT09ZT8wOjEvKGUtdCksdX19ZnVuY3Rpb24gYm0odCxlKXtyZXR1cm4gZS5kb21haW4odC5kb21haW4oKSkuaW50ZXJwb2xhdG9yKHQuaW50ZXJwb2xhdG9yKCkpLmNsYW1wKHQuY2xhbXAoKSkudW5rbm93bih0LnVua25vd24oKSl9ZnVuY3Rpb24geG0oKXt2YXIgdD1veShtbSgpKFFwKSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBibSh0LHhtKCkpfSxZcC5hcHBseSh0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gX20oKXt2YXIgdD1neShtbSgpKS5kb21haW4oWzEsMTBdKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGJtKHQsX20oKSkuYmFzZSh0LmJhc2UoKSl9LFlwLmFwcGx5KHQsYXJndW1lbnRzKX1mdW5jdGlvbiBrbSgpe3ZhciB0PXh5KG1tKCkpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gYm0odCxrbSgpKS5jb25zdGFudCh0LmNvbnN0YW50KCkpfSxZcC5hcHBseSh0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gd20oKXt2YXIgdD1UeShtbSgpKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGJtKHQsd20oKSkuZXhwb25lbnQodC5leHBvbmVudCgpKX0sWXAuYXBwbHkodCxhcmd1bWVudHMpfWZ1bmN0aW9uIEVtKCl7cmV0dXJuIHdtLmFwcGx5KG51bGwsYXJndW1lbnRzKS5leHBvbmVudCguNSl9ZnVuY3Rpb24gVG0oKXt2YXIgdD1bXSxlPVFwO2Z1bmN0aW9uIG4obil7aWYoIWlzTmFOKG49K24pKXJldHVybiBlKChjKHQsbiktMSkvKHQubGVuZ3RoLTEpKX1yZXR1cm4gbi5kb21haW49ZnVuY3Rpb24oZSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHQuc2xpY2UoKTt0PVtdO2Zvcih2YXIgaSxhPTAsbz1lLmxlbmd0aDthPG87KythKW51bGw9PShpPWVbYV0pfHxpc05hTihpPStpKXx8dC5wdXNoKGkpO3JldHVybiB0LnNvcnQociksbn0sbi5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gVG0oZSkuZG9tYWluKHQpfSxZcC5hcHBseShuLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQ20oKXt2YXIgdCxlLG4scixpLGEsbyxzPTAsYz0uNSx1PTEsbD1RcCxoPSExO2Z1bmN0aW9uIGYodCl7cmV0dXJuIGlzTmFOKHQ9K3QpP286KHQ9LjUrKCh0PSthKHQpKS1lKSoodDxlP3I6aSksbChoP01hdGgubWF4KDAsTWF0aC5taW4oMSx0KSk6dCkpfXJldHVybiBmLmRvbWFpbj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1hKHM9K29bMF0pLGU9YShjPStvWzFdKSxuPWEodT0rb1syXSkscj10PT09ZT8wOi41LyhlLXQpLGk9ZT09PW4/MDouNS8obi1lKSxmKTpbcyxjLHVdfSxmLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSEhdCxmKTpofSxmLmludGVycG9sYXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD10LGYpOmx9LGYudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LGYpOm99LGZ1bmN0aW9uKG8pe3JldHVybiBhPW8sdD1vKHMpLGU9byhjKSxuPW8odSkscj10PT09ZT8wOi41LyhlLXQpLGk9ZT09PW4/MDouNS8obi1lKSxmfX1mdW5jdGlvbiBTbSgpe3ZhciB0PW95KENtKCkoUXApKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGJtKHQsU20oKSl9LFlwLmFwcGx5KHQsYXJndW1lbnRzKX1mdW5jdGlvbiBBbSgpe3ZhciB0PWd5KENtKCkpLmRvbWFpbihbLjEsMSwxMF0pO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gYm0odCxBbSgpKS5iYXNlKHQuYmFzZSgpKX0sWXAuYXBwbHkodCxhcmd1bWVudHMpfWZ1bmN0aW9uIE1tKCl7dmFyIHQ9eHkoQ20oKSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBibSh0LE1tKCkpLmNvbnN0YW50KHQuY29uc3RhbnQoKSl9LFlwLmFwcGx5KHQsYXJndW1lbnRzKX1mdW5jdGlvbiBPbSgpe3ZhciB0PVR5KENtKCkpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gYm0odCxPbSgpKS5leHBvbmVudCh0LmV4cG9uZW50KCkpfSxZcC5hcHBseSh0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gQm0oKXtyZXR1cm4gT20uYXBwbHkobnVsbCxhcmd1bWVudHMpLmV4cG9uZW50KC41KX12YXIgTm09ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLzZ8MCxuPW5ldyBBcnJheShlKSxyPTA7cjxlOyluW3JdPSIjIit0LnNsaWNlKDYqciw2Kisrcik7cmV0dXJuIG59LERtPU5tKCIxZjc3YjRmZjdmMGUyY2EwMmNkNjI3Mjg5NDY3YmQ4YzU2NGJlMzc3YzI3ZjdmN2ZiY2JkMjIxN2JlY2YiKSxMbT1ObSgiN2ZjOTdmYmVhZWQ0ZmRjMDg2ZmZmZjk5Mzg2Y2IwZjAwMjdmYmY1YjE3NjY2NjY2IiksSW09Tm0oIjFiOWU3N2Q5NWYwMjc1NzBiM2U3Mjk4YTY2YTYxZWU2YWIwMmE2NzYxZDY2NjY2NiIpLFJtPU5tKCJhNmNlZTMxZjc4YjRiMmRmOGEzM2EwMmNmYjlhOTllMzFhMWNmZGJmNmZmZjdmMDBjYWIyZDY2YTNkOWFmZmZmOTliMTU5MjgiKSxGbT1ObSgiZmJiNGFlYjNjZGUzY2NlYmM1ZGVjYmU0ZmVkOWE2ZmZmZmNjZTVkOGJkZmRkYWVjZjJmMmYyIiksUG09Tm0oImIzZTJjZGZkY2RhY2NiZDVlOGY0Y2FlNGU2ZjVjOWZmZjJhZWYxZTJjY2NjY2NjYyIpLGptPU5tKCJlNDFhMWMzNzdlYjg0ZGFmNGE5ODRlYTNmZjdmMDBmZmZmMzNhNjU2MjhmNzgxYmY5OTk5OTkiKSxZbT1ObSgiNjZjMmE1ZmM4ZDYyOGRhMGNiZTc4YWMzYTZkODU0ZmZkOTJmZTVjNDk0YjNiM2IzIiksem09Tm0oIjhkZDNjN2ZmZmZiM2JlYmFkYWZiODA3MjgwYjFkM2ZkYjQ2MmIzZGU2OWZjY2RlNWQ5ZDlkOWJjODBiZGNjZWJjNWZmZWQ2ZiIpLFVtPU5tKCI0ZTc5YTdmMjhlMmNlMTU3NTk3NmI3YjI1OWExNGZlZGM5NDlhZjdhYTFmZjlkYTc5Yzc1NWZiYWIwYWIiKSwkbT1mdW5jdGlvbih0KXtyZXR1cm4gcG4odFt0Lmxlbmd0aC0xXSl9LHFtPW5ldyBBcnJheSgzKS5jb25jYXQoImQ4YjM2NWY1ZjVmNTVhYjRhYyIsImE2NjExYWRmYzI3ZDgwY2RjMTAxODU3MSIsImE2NjExYWRmYzI3ZGY1ZjVmNTgwY2RjMTAxODU3MSIsIjhjNTEwYWQ4YjM2NWY2ZThjM2M3ZWFlNTVhYjRhYzAxNjY1ZSIsIjhjNTEwYWQ4YjM2NWY2ZThjM2Y1ZjVmNWM3ZWFlNTVhYjRhYzAxNjY1ZSIsIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZSIsIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZSIsIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMCIsIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMCIpLm1hcChObSksV209JG0ocW0pLFZtPW5ldyBBcnJheSgzKS5jb25jYXQoImFmOGRjM2Y3ZjdmNzdmYmY3YiIsIjdiMzI5NGMyYTVjZmE2ZGJhMDAwODgzNyIsIjdiMzI5NGMyYTVjZmY3ZjdmN2E2ZGJhMDAwODgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGQ5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGY3ZjdmN2Q5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIpLm1hcChObSksSG09JG0oVm0pLEdtPW5ldyBBcnJheSgzKS5jb25jYXQoImU5YTNjOWY3ZjdmN2ExZDc2YSIsImQwMWM4YmYxYjZkYWI4ZTE4NjRkYWMyNiIsImQwMWM4YmYxYjZkYWY3ZjdmN2I4ZTE4NjRkYWMyNiIsImM1MWI3ZGU5YTNjOWZkZTBlZmU2ZjVkMGExZDc2YTRkOTIyMSIsImM1MWI3ZGU5YTNjOWZkZTBlZmY3ZjdmN2U2ZjVkMGExZDc2YTRkOTIyMSIsImM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmU2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMSIsImM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmY3ZjdmN2U2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMSIsIjhlMDE1MmM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmU2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMTI3NjQxOSIsIjhlMDE1MmM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmY3ZjdmN2U2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMTI3NjQxOSIpLm1hcChObSksWG09JG0oR20pLFptPW5ldyBBcnJheSgzKS5jb25jYXQoIjk5OGVjM2Y3ZjdmN2YxYTM0MCIsIjVlM2M5OWIyYWJkMmZkYjg2M2U2NjEwMSIsIjVlM2M5OWIyYWJkMmY3ZjdmN2ZkYjg2M2U2NjEwMSIsIjU0Mjc4ODk5OGVjM2Q4ZGFlYmZlZTBiNmYxYTM0MGIzNTgwNiIsIjU0Mjc4ODk5OGVjM2Q4ZGFlYmY3ZjdmN2ZlZTBiNmYxYTM0MGIzNTgwNiIsIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNiIsIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNiIsIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOCIsIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOCIpLm1hcChObSksUW09JG0oWm0pLEttPW5ldyBBcnJheSgzKS5jb25jYXQoImVmOGE2MmY3ZjdmNzY3YTljZiIsImNhMDAyMGY0YTU4MjkyYzVkZTA1NzFiMCIsImNhMDAyMGY0YTU4MmY3ZjdmNzkyYzVkZTA1NzFiMCIsImIyMTgyYmVmOGE2MmZkZGJjN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmVmOGE2MmZkZGJjN2Y3ZjdmN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIpLm1hcChObSksSm09JG0oS20pLHRiPW5ldyBBcnJheSgzKS5jb25jYXQoImVmOGE2MmZmZmZmZjk5OTk5OSIsImNhMDAyMGY0YTU4MmJhYmFiYTQwNDA0MCIsImNhMDAyMGY0YTU4MmZmZmZmZmJhYmFiYTQwNDA0MCIsImIyMTgyYmVmOGE2MmZkZGJjN2UwZTBlMDk5OTk5OTRkNGQ0ZCIsImIyMTgyYmVmOGE2MmZkZGJjN2ZmZmZmZmUwZTBlMDk5OTk5OTRkNGQ0ZCIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2UwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZCIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2ZmZmZmZmUwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZCIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2UwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZDFhMWExYSIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2ZmZmZmZmUwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZDFhMWExYSIpLm1hcChObSksZWI9JG0odGIpLG5iPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjkxYmZkYiIsImQ3MTkxY2ZkYWU2MWFiZDllOTJjN2JiNiIsImQ3MTkxY2ZkYWU2MWZmZmZiZmFiZDllOTJjN2JiNiIsImQ3MzAyN2ZjOGQ1OWZlZTA5MGUwZjNmODkxYmZkYjQ1NzViNCIsImQ3MzAyN2ZjOGQ1OWZlZTA5MGZmZmZiZmUwZjNmODkxYmZkYjQ1NzViNCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNCIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NSIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NSIpLm1hcChObSkscmI9JG0obmIpLGliPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjkxY2Y2MCIsImQ3MTkxY2ZkYWU2MWE2ZDk2YTFhOTY0MSIsImQ3MTkxY2ZkYWU2MWZmZmZiZmE2ZDk2YTFhOTY0MSIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmZmZmZiZmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIpLm1hcChObSksYWI9JG0oaWIpLG9iPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjk5ZDU5NCIsImQ3MTkxY2ZkYWU2MWFiZGRhNDJiODNiYSIsImQ3MTkxY2ZkYWU2MWZmZmZiZmFiZGRhNDJiODNiYSIsImQ1M2U0ZmZjOGQ1OWZlZTA4YmU2ZjU5ODk5ZDU5NDMyODhiZCIsImQ1M2U0ZmZjOGQ1OWZlZTA4YmZmZmZiZmU2ZjU5ODk5ZDU5NDMyODhiZCIsImQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZCIsImQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZCIsIjllMDE0MmQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZDVlNGZhMiIsIjllMDE0MmQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZDVlNGZhMiIpLm1hcChObSksc2I9JG0ob2IpLGNiPW5ldyBBcnJheSgzKS5jb25jYXQoImU1ZjVmOTk5ZDhjOTJjYTI1ZiIsImVkZjhmYmIyZTJlMjY2YzJhNDIzOGI0NSIsImVkZjhmYmIyZTJlMjY2YzJhNDJjYTI1ZjAwNmQyYyIsImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDJjYTI1ZjAwNmQyYyIsImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNCIsImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNCIsImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNmQyYzAwNDQxYiIpLm1hcChObSksdWI9JG0oY2IpLGxiPW5ldyBBcnJheSgzKS5jb25jYXQoImUwZWNmNDllYmNkYTg4NTZhNyIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NDE5ZCIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDgxMGY3YzRkMDA0YiIpLm1hcChObSksaGI9JG0obGIpLGZiPW5ldyBBcnJheSgzKS5jb25jYXQoImUwZjNkYmE4ZGRiNTQzYTJjYSIsImYwZjllOGJhZTRiYzdiY2NjNDJiOGNiZSIsImYwZjllOGJhZTRiYzdiY2NjNDQzYTJjYTA4NjhhYyIsImYwZjllOGNjZWJjNWE4ZGRiNTdiY2NjNDQzYTJjYTA4NjhhYyIsImYwZjllOGNjZWJjNWE4ZGRiNTdiY2NjNDRlYjNkMzJiOGNiZTA4NTg5ZSIsImY3ZmNmMGUwZjNkYmNjZWJjNWE4ZGRiNTdiY2NjNDRlYjNkMzJiOGNiZTA4NTg5ZSIsImY3ZmNmMGUwZjNkYmNjZWJjNWE4ZGRiNTdiY2NjNDRlYjNkMzJiOGNiZTA4NjhhYzA4NDA4MSIpLm1hcChObSksZGI9JG0oZmIpLHBiPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZThjOGZkYmI4NGUzNGEzMyIsImZlZjBkOWZkY2M4YWZjOGQ1OWQ3MzAxZiIsImZlZjBkOWZkY2M4YWZjOGQ1OWUzNGEzM2IzMDAwMCIsImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWUzNGEzM2IzMDAwMCIsImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMCIsImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMCIsImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZmIzMDAwMDdmMDAwMCIpLm1hcChObSkseWI9JG0ocGIpLGdiPW5ldyBBcnJheSgzKS5jb25jYXQoImVjZTJmMGE2YmRkYjFjOTA5OSIsImY2ZWZmN2JkYzllMTY3YTljZjAyODE4YSIsImY2ZWZmN2JkYzllMTY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNmM1OTAxNDYzNiIpLm1hcChObSksdmI9JG0oZ2IpLG1iPW5ldyBBcnJheSgzKS5jb25jYXQoImVjZTdmMmE2YmRkYjJiOGNiZSIsImYxZWVmNmJkYzllMTc0YTljZjA1NzBiMCIsImYxZWVmNmJkYzllMTc0YTljZjJiOGNiZTA0NWE4ZCIsImYxZWVmNmQwZDFlNmE2YmRkYjc0YTljZjJiOGNiZTA0NWE4ZCIsImYxZWVmNmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDAzNGU3YiIsImZmZjdmYmVjZTdmMmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDAzNGU3YiIsImZmZjdmYmVjZTdmMmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDA0NWE4ZDAyMzg1OCIpLm1hcChObSksYmI9JG0obWIpLHhiPW5ldyBBcnJheSgzKS5jb25jYXQoImU3ZTFlZmM5OTRjN2RkMWM3NyIsImYxZWVmNmQ3YjVkOGRmNjViMGNlMTI1NiIsImYxZWVmNmQ3YjVkOGRmNjViMGRkMWM3Nzk4MDA0MyIsImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGRkMWM3Nzk4MDA0MyIsImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZiIsImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZiIsImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1Njk4MDA0MzY3MDAxZiIpLm1hcChObSksX2I9JG0oeGIpLGtiPW5ldyBBcnJheSgzKS5jb25jYXQoImZkZTBkZGZhOWZiNWM1MWI4YSIsImZlZWJlMmZiYjRiOWY3NjhhMWFlMDE3ZSIsImZlZWJlMmZiYjRiOWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NzQ5MDA2YSIpLm1hcChObSksd2I9JG0oa2IpLEViPW5ldyBBcnJheSgzKS5jb25jYXQoImVkZjhiMTdmY2RiYjJjN2ZiOCIsImZmZmZjY2ExZGFiNDQxYjZjNDIyNWVhOCIsImZmZmZjY2ExZGFiNDQxYjZjNDJjN2ZiODI1MzQ5NCIsImZmZmZjY2M3ZTliNDdmY2RiYjQxYjZjNDJjN2ZiODI1MzQ5NCIsImZmZmZjY2M3ZTliNDdmY2RiYjQxYjZjNDFkOTFjMDIyNWVhODBjMmM4NCIsImZmZmZkOWVkZjhiMWM3ZTliNDdmY2RiYjQxYjZjNDFkOTFjMDIyNWVhODBjMmM4NCIsImZmZmZkOWVkZjhiMWM3ZTliNDdmY2RiYjQxYjZjNDFkOTFjMDIyNWVhODI1MzQ5NDA4MWQ1OCIpLm1hcChObSksVGI9JG0oRWIpLENiPW5ldyBBcnJheSgzKS5jb25jYXQoImY3ZmNiOWFkZGQ4ZTMxYTM1NCIsImZmZmZjY2MyZTY5OTc4YzY3OTIzODQ0MyIsImZmZmZjY2MyZTY5OTc4YzY3OTMxYTM1NDAwNjgzNyIsImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTMxYTM1NDAwNjgzNyIsImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMiIsImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMiIsImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNjgzNzAwNDUyOSIpLm1hcChObSksU2I9JG0oQ2IpLEFiPW5ldyBBcnJheSgzKS5jb25jYXQoImZmZjdiY2ZlYzQ0ZmQ5NWYwZSIsImZmZmZkNGZlZDk4ZWZlOTkyOWNjNGMwMiIsImZmZmZkNGZlZDk4ZWZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjk5MzQwNDY2MjUwNiIpLm1hcChObSksTWI9JG0oQWIpLE9iPW5ldyBBcnJheSgzKS5jb25jYXQoImZmZWRhMGZlYjI0Y2YwM2IyMCIsImZmZmZiMmZlY2M1Y2ZkOGQzY2UzMWExYyIsImZmZmZiMmZlY2M1Y2ZkOGQzY2YwM2IyMGJkMDAyNiIsImZmZmZiMmZlZDk3NmZlYjI0Y2ZkOGQzY2YwM2IyMGJkMDAyNiIsImZmZmZiMmZlZDk3NmZlYjI0Y2ZkOGQzY2ZjNGUyYWUzMWExY2IxMDAyNiIsImZmZmZjY2ZmZWRhMGZlZDk3NmZlYjI0Y2ZkOGQzY2ZjNGUyYWUzMWExY2IxMDAyNiIsImZmZmZjY2ZmZWRhMGZlZDk3NmZlYjI0Y2ZkOGQzY2ZjNGUyYWUzMWExY2JkMDAyNjgwMDAyNiIpLm1hcChObSksQmI9JG0oT2IpLE5iPW5ldyBBcnJheSgzKS5jb25jYXQoImRlZWJmNzllY2FlMTMxODJiZCIsImVmZjNmZmJkZDdlNzZiYWVkNjIxNzFiNSIsImVmZjNmZmJkZDdlNzZiYWVkNjMxODJiZDA4NTE5YyIsImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjMxODJiZDA4NTE5YyIsImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NCIsImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NCIsImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NTE5YzA4MzA2YiIpLm1hcChObSksRGI9JG0oTmIpLExiPW5ldyBBcnJheSgzKS5jb25jYXQoImU1ZjVlMGExZDk5YjMxYTM1NCIsImVkZjhlOWJhZTRiMzc0YzQ3NjIzOGI0NSIsImVkZjhlOWJhZTRiMzc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNmQyYzAwNDQxYiIpLm1hcChObSksSWI9JG0oTGIpLFJiPW5ldyBBcnJheSgzKS5jb25jYXQoImYwZjBmMGJkYmRiZDYzNjM2MyIsImY3ZjdmN2NjY2NjYzk2OTY5NjUyNTI1MiIsImY3ZjdmN2NjY2NjYzk2OTY5NjYzNjM2MzI1MjUyNSIsImY3ZjdmN2Q5ZDlkOWJkYmRiZDk2OTY5NjYzNjM2MzI1MjUyNSIsImY3ZjdmN2Q5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNSIsImZmZmZmZmYwZjBmMGQ5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNSIsImZmZmZmZmYwZjBmMGQ5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNTAwMDAwMCIpLm1hcChObSksRmI9JG0oUmIpLFBiPW5ldyBBcnJheSgzKS5jb25jYXQoImVmZWRmNWJjYmRkYzc1NmJiMSIsImYyZjBmN2NiYzllMjllOWFjODZhNTFhMyIsImYyZjBmN2NiYzllMjllOWFjODc1NmJiMTU0Mjc4ZiIsImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODc1NmJiMTU0Mjc4ZiIsImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NiIsImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NiIsImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzU0Mjc4ZjNmMDA3ZCIpLm1hcChObSksamI9JG0oUGIpLFliPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZTBkMmZjOTI3MmRlMmQyNiIsImZlZTVkOWZjYWU5MWZiNmE0YWNiMTgxZCIsImZlZTVkOWZjYWU5MWZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZGE1MGYxNTY3MDAwZCIpLm1hcChObSksemI9JG0oWWIpLFViPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZTZjZWZkYWU2YmU2NTUwZCIsImZlZWRkZWZkYmU4NWZkOGQzY2Q5NDcwMSIsImZlZWRkZWZkYmU4NWZkOGQzY2U2NTUwZGE2MzYwMyIsImZlZWRkZWZkZDBhMmZkYWU2YmZkOGQzY2U2NTUwZGE2MzYwMyIsImZlZWRkZWZkZDBhMmZkYWU2YmZkOGQzY2YxNjkxM2Q5NDgwMThjMmQwNCIsImZmZjVlYmZlZTZjZWZkZDBhMmZkYWU2YmZkOGQzY2YxNjkxM2Q5NDgwMThjMmQwNCIsImZmZjVlYmZlZTZjZWZkZDBhMmZkYWU2YmZkOGQzY2YxNjkxM2Q5NDgwMWE2MzYwMzdmMjcwNCIpLm1hcChObSksJGI9JG0oVWIpLHFiPWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSksInJnYigiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoLTQuNTQtdCooMzUuMzQtdCooMjM4MS43My10Kig2NDAyLjctdCooNzAyNC43Mi0yNzEwLjU3KnQpKSkpKSkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgzMi40OSt0KigxNzAuNzMrdCooNTIuODItdCooMTMxLjQ2LXQqKDE3Ni41OC02Ny4zNyp0KSkpKSkpKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoODEuMjQrdCooNDQyLjM2LXQqKDI0ODIuNDMtdCooNjE2Ny4yNC10Kig2NjE0Ljk0LTI0NzUuNjcqdCkpKSkpKSkrIikifSxXYj1rcChPYSgzMDAsLjUsMCksT2EoLTI0MCwuNSwxKSksVmI9a3AoT2EoLTEwMCwuNzUsLjM1KSxPYSg4MCwxLjUsLjgpKSxIYj1rcChPYSgyNjAsLjc1LC4zNSksT2EoODAsMS41LC44KSksR2I9T2EoKSxYYj1mdW5jdGlvbih0KXsodDwwfHx0PjEpJiYodC09TWF0aC5mbG9vcih0KSk7dmFyIGU9TWF0aC5hYnModC0uNSk7cmV0dXJuIEdiLmg9MzYwKnQtMTAwLEdiLnM9MS41LTEuNSplLEdiLmw9LjgtLjkqZSxHYisiIn0sWmI9SGUoKSxRYj1NYXRoLlBJLzMsS2I9MipNYXRoLlBJLzMsSmI9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIHQ9KC41LXQpKk1hdGguUEksWmIucj0yNTUqKGU9TWF0aC5zaW4odCkpKmUsWmIuZz0yNTUqKGU9TWF0aC5zaW4odCtRYikpKmUsWmIuYj0yNTUqKGU9TWF0aC5zaW4odCtLYikpKmUsWmIrIiJ9LHR4PWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSksInJnYigiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoMzQuNjErdCooMTE3Mi4zMy10KigxMDc5My41Ni10KigzMzMwMC4xMi10KigzODM5NC40OS0xNDgyNS4wNSp0KSkpKSkpKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoMjMuMzErdCooNTU3LjMzK3QqKDEyMjUuMzMtdCooMzU3NC45Ni10KigxMDczLjc3KzcwNy41Nip0KSkpKSkpKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoMjcuMit0KigzMjExLjEtdCooMTUzMjcuOTctdCooMjc4MTQtdCooMjI1NjkuMTgtNjgzOC42Nip0KSkpKSkpKSsiKSJ9O2Z1bmN0aW9uIGV4KHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdFtNYXRoLm1heCgwLE1hdGgubWluKGUtMSxNYXRoLmZsb29yKG4qZSkpKV19fXZhciBueD1leChObSgiNDQwMTU0NDQwMjU2NDUwNDU3NDUwNTU5NDYwNzVhNDYwODVjNDYwYTVkNDYwYjVlNDcwZDYwNDcwZTYxNDcxMDYzNDcxMTY0NDcxMzY1NDgxNDY3NDgxNjY4NDgxNzY5NDgxODZhNDgxYTZjNDgxYjZkNDgxYzZlNDgxZDZmNDgxZjcwNDgyMDcxNDgyMTczNDgyMzc0NDgyNDc1NDgyNTc2NDgyNjc3NDgyODc4NDgyOTc5NDcyYTdhNDcyYzdhNDcyZDdiNDcyZTdjNDcyZjdkNDYzMDdlNDYzMjdlNDYzMzdmNDYzNDgwNDUzNTgxNDUzNzgxNDUzODgyNDQzOTgzNDQzYTgzNDQzYjg0NDMzZDg0NDMzZTg1NDIzZjg1NDI0MDg2NDI0MTg2NDE0Mjg3NDE0NDg3NDA0NTg4NDA0Njg4M2Y0Nzg4M2Y0ODg5M2U0OTg5M2U0YTg5M2U0YzhhM2Q0ZDhhM2Q0ZThhM2M0ZjhhM2M1MDhiM2I1MThiM2I1MjhiM2E1MzhiM2E1NDhjMzk1NThjMzk1NjhjMzg1ODhjMzg1OThjMzc1YThjMzc1YjhkMzY1YzhkMzY1ZDhkMzU1ZThkMzU1ZjhkMzQ2MDhkMzQ2MThkMzM2MjhkMzM2MzhkMzI2NDhlMzI2NThlMzE2NjhlMzE2NzhlMzE2ODhlMzA2OThlMzA2YThlMmY2YjhlMmY2YzhlMmU2ZDhlMmU2ZThlMmU2ZjhlMmQ3MDhlMmQ3MThlMmM3MThlMmM3MjhlMmM3MzhlMmI3NDhlMmI3NThlMmE3NjhlMmE3NzhlMmE3ODhlMjk3OThlMjk3YThlMjk3YjhlMjg3YzhlMjg3ZDhlMjc3ZThlMjc3ZjhlMjc4MDhlMjY4MThlMjY4MjhlMjY4MjhlMjU4MzhlMjU4NDhlMjU4NThlMjQ4NjhlMjQ4NzhlMjM4ODhlMjM4OThlMjM4YThkMjI4YjhkMjI4YzhkMjI4ZDhkMjE4ZThkMjE4ZjhkMjE5MDhkMjE5MThjMjA5MjhjMjA5MjhjMjA5MzhjMWY5NDhjMWY5NThiMWY5NjhiMWY5NzhiMWY5ODhiMWY5OThhMWY5YThhMWU5YjhhMWU5Yzg5MWU5ZDg5MWY5ZTg5MWY5Zjg4MWZhMDg4MWZhMTg4MWZhMTg3MWZhMjg3MjBhMzg2MjBhNDg2MjFhNTg1MjFhNjg1MjJhNzg1MjJhODg0MjNhOTgzMjRhYTgzMjVhYjgyMjVhYzgyMjZhZDgxMjdhZDgxMjhhZTgwMjlhZjdmMmFiMDdmMmNiMTdlMmRiMjdkMmViMzdjMmZiNDdjMzFiNTdiMzJiNjdhMzRiNjc5MzViNzc5MzdiODc4MzhiOTc3M2FiYTc2M2JiYjc1M2RiYzc0M2ZiYzczNDBiZDcyNDJiZTcxNDRiZjcwNDZjMDZmNDhjMTZlNGFjMTZkNGNjMjZjNGVjMzZiNTBjNDZhNTJjNTY5NTRjNTY4NTZjNjY3NThjNzY1NWFjODY0NWNjODYzNWVjOTYyNjBjYTYwNjNjYjVmNjVjYjVlNjdjYzVjNjljZDViNmNjZDVhNmVjZTU4NzBjZjU3NzNkMDU2NzVkMDU0NzdkMTUzN2FkMTUxN2NkMjUwN2ZkMzRlODFkMzRkODRkNDRiODZkNTQ5ODlkNTQ4OGJkNjQ2OGVkNjQ1OTBkNzQzOTNkNzQxOTVkODQwOThkODNlOWJkOTNjOWRkOTNiYTBkYTM5YTJkYTM3YTVkYjM2YThkYjM0YWFkYzMyYWRkYzMwYjBkZDJmYjJkZDJkYjVkZTJiYjhkZTI5YmFkZTI4YmRkZjI2YzBkZjI1YzJkZjIzYzVlMDIxYzhlMDIwY2FlMTFmY2RlMTFkZDBlMTFjZDJlMjFiZDVlMjFhZDhlMjE5ZGFlMzE5ZGRlMzE4ZGZlMzE4ZTJlNDE4ZTVlNDE5ZTdlNDE5ZWFlNTFhZWNlNTFiZWZlNTFjZjFlNTFkZjRlNjFlZjZlNjIwZjhlNjIxZmJlNzIzZmRlNzI1IikpLHJ4PWV4KE5tKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmYiKSksaXg9ZXgoTm0oIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwYTAyMDIwYzAyMDIwZTAzMDIxMDA0MDMxMjA0MDMxNDA1MDQxNzA2MDQxOTA3MDUxYjA4MDUxZDA5MDYxZjBhMDcyMjBiMDcyNDBjMDgyNjBkMDgyOTBlMDkyYjEwMDkyZDExMGEzMDEyMGEzMjE0MGIzNDE1MGIzNzE2MGIzOTE4MGMzYzE5MGMzZTFiMGM0MTFjMGM0MzFlMGM0NTFmMGM0ODIxMGM0YTIzMGM0YzI0MGM0ZjI2MGM1MTI4MGI1MzI5MGI1NTJiMGI1NzJkMGI1OTJmMGE1YjMxMGE1YzMyMGE1ZTM0MGE1ZjM2MDk2MTM4MDk2MjM5MDk2MzNiMDk2NDNkMDk2NTNlMDk2NjQwMGE2NzQyMGE2ODQ0MGE2ODQ1MGE2OTQ3MGI2YTQ5MGI2YTRhMGM2YjRjMGM2YjRkMGQ2YzRmMGQ2YzUxMGU2YzUyMGU2ZDU0MGY2ZDU1MGY2ZDU3MTA2ZTU5MTA2ZTVhMTE2ZTVjMTI2ZTVkMTI2ZTVmMTM2ZTYxMTM2ZTYyMTQ2ZTY0MTU2ZTY1MTU2ZTY3MTY2ZTY5MTY2ZTZhMTc2ZTZjMTg2ZTZkMTg2ZTZmMTk2ZTcxMTk2ZTcyMWE2ZTc0MWE2ZTc1MWI2ZTc3MWM2ZDc4MWM2ZDdhMWQ2ZDdjMWQ2ZDdkMWU2ZDdmMWU2YzgwMWY2YzgyMjA2Yzg0MjA2Yjg1MjE2Yjg3MjE2Yjg4MjI2YThhMjI2YThjMjM2OThkMjM2OThmMjQ2OTkwMjU2ODkyMjU2ODkzMjY2Nzk1MjY2Nzk3Mjc2Njk4Mjc2NjlhMjg2NTliMjk2NDlkMjk2NDlmMmE2M2EwMmE2M2EyMmI2MmEzMmM2MWE1MmM2MGE2MmQ2MGE4MmU1ZmE5MmU1ZWFiMmY1ZWFkMzA1ZGFlMzA1Y2IwMzE1YmIxMzI1YWIzMzI1YWI0MzM1OWI2MzQ1OGI3MzU1N2I5MzU1NmJhMzY1NWJjMzc1NGJkMzg1M2JmMzk1MmMwM2E1MWMxM2E1MGMzM2I0ZmM0M2M0ZWM2M2Q0ZGM3M2U0Y2M4M2Y0YmNhNDA0YWNiNDE0OWNjNDI0OGNlNDM0N2NmNDQ0NmQwNDU0NWQyNDY0NGQzNDc0M2Q0NDg0MmQ1NGE0MWQ3NGIzZmQ4NGMzZWQ5NGQzZGRhNGUzY2RiNTAzYmRkNTEzYWRlNTIzOGRmNTMzN2UwNTUzNmUxNTYzNWUyNTczNGUzNTkzM2U0NWEzMWU1NWMzMGU2NWQyZmU3NWUyZWU4NjAyZGU5NjEyYmVhNjMyYWViNjQyOWViNjYyOGVjNjcyNmVkNjkyNWVlNmEyNGVmNmMyM2VmNmUyMWYwNmYyMGYxNzExZmYxNzMxZGYyNzQxY2YzNzYxYmYzNzgxOWY0NzkxOGY1N2IxN2Y1N2QxNWY2N2UxNGY2ODAxM2Y3ODIxMmY3ODQxMGY4ODUwZmY4ODcwZWY4ODkwY2Y5OGIwYmY5OGMwYWY5OGUwOWZhOTAwOGZhOTIwN2ZhOTQwN2ZiOTYwNmZiOTcwNmZiOTkwNmZiOWIwNmZiOWQwN2ZjOWYwN2ZjYTEwOGZjYTMwOWZjYTUwYWZjYTYwY2ZjYTgwZGZjYWEwZmZjYWMxMWZjYWUxMmZjYjAxNGZjYjIxNmZjYjQxOGZiYjYxYWZiYjgxZGZiYmExZmZiYmMyMWZiYmUyM2ZhYzAyNmZhYzIyOGZhYzQyYWZhYzYyZGY5YzcyZmY5YzkzMmY5Y2IzNWY4Y2QzN2Y4Y2YzYWY3ZDEzZGY3ZDM0MGY2ZDU0M2Y2ZDc0NmY1ZDk0OWY1ZGI0Y2Y0ZGQ0ZmY0ZGY1M2Y0ZTE1NmYzZTM1YWYzZTU1ZGYyZTY2MWYyZTg2NWYyZWE2OWYxZWM2ZGYxZWQ3MWYxZWY3NWYxZjE3OWYyZjI3ZGYyZjQ4MmYzZjU4NmYzZjY4YWY0Zjg4ZWY1Zjk5MmY2ZmE5NmY4ZmI5YWY5ZmM5ZGZhZmRhMWZjZmZhNCIpKSxheD1leChObSgiMGQwODg3MTAwNzg4MTMwNzg5MTYwNzhhMTkwNjhjMWIwNjhkMWQwNjhlMjAwNjhmMjIwNjkwMjQwNjkxMjYwNTkxMjgwNTkyMmEwNTkzMmMwNTk0MmUwNTk1MmYwNTk2MzEwNTk3MzMwNTk3MzUwNDk4MzcwNDk5MzgwNDlhM2EwNDlhM2MwNDliM2UwNDljM2YwNDljNDEwNDlkNDMwMzllNDQwMzllNDYwMzlmNDgwMzlmNDkwM2EwNGIwM2ExNGMwMmExNGUwMmEyNTAwMmEyNTEwMmEzNTMwMmEzNTUwMmE0NTYwMWE0NTgwMWE0NTkwMWE1NWIwMWE1NWMwMWE2NWUwMWE2NjAwMWE2NjEwMGE3NjMwMGE3NjQwMGE3NjYwMGE3NjcwMGE4NjkwMGE4NmEwMGE4NmMwMGE4NmUwMGE4NmYwMGE4NzEwMGE4NzIwMWE4NzQwMWE4NzUwMWE4NzcwMWE4NzgwMWE4N2EwMmE4N2IwMmE4N2QwM2E4N2UwM2E4ODAwNGE4ODEwNGE3ODMwNWE3ODQwNWE3ODYwNmE2ODcwN2E2ODgwOGE2OGEwOWE1OGIwYWE1OGQwYmE1OGUwY2E0OGYwZGE0OTEwZWEzOTIwZmEzOTQxMGEyOTUxMWExOTYxM2ExOTgxNGEwOTkxNTlmOWExNjlmOWMxNzllOWQxODlkOWUxOTlkYTAxYTljYTExYjliYTIxZDlhYTMxZTlhYTUxZjk5YTYyMDk4YTcyMTk3YTgyMjk2YWEyMzk1YWIyNDk0YWMyNjk0YWQyNzkzYWUyODkyYjAyOTkxYjEyYTkwYjIyYjhmYjMyYzhlYjQyZThkYjUyZjhjYjYzMDhiYjczMThhYjgzMjg5YmEzMzg4YmIzNDg4YmMzNTg3YmQzNzg2YmUzODg1YmYzOTg0YzAzYTgzYzEzYjgyYzIzYzgxYzMzZDgwYzQzZTdmYzU0MDdlYzY0MTdkYzc0MjdjYzg0MzdiYzk0NDdhY2E0NTdhY2I0Njc5Y2M0Nzc4Y2M0OTc3Y2Q0YTc2Y2U0Yjc1Y2Y0Yzc0ZDA0ZDczZDE0ZTcyZDI0ZjcxZDM1MTcxZDQ1MjcwZDU1MzZmZDU1NDZlZDY1NTZkZDc1NjZjZDg1NzZiZDk1ODZhZGE1YTZhZGE1YjY5ZGI1YzY4ZGM1ZDY3ZGQ1ZTY2ZGU1ZjY1ZGU2MTY0ZGY2MjYzZTA2MzYzZTE2NDYyZTI2NTYxZTI2NjYwZTM2ODVmZTQ2OTVlZTU2YTVkZTU2YjVkZTY2YzVjZTc2ZTViZTc2ZjVhZTg3MDU5ZTk3MTU4ZTk3MjU3ZWE3NDU3ZWI3NTU2ZWI3NjU1ZWM3NzU0ZWQ3OTUzZWQ3YTUyZWU3YjUxZWY3YzUxZWY3ZTUwZjA3ZjRmZjA4MDRlZjE4MTRkZjE4MzRjZjI4NDRiZjM4NTRiZjM4NzRhZjQ4ODQ5ZjQ4OTQ4ZjU4YjQ3ZjU4YzQ2ZjY4ZDQ1ZjY4ZjQ0Zjc5MDQ0Zjc5MTQzZjc5MzQyZjg5NDQxZjg5NTQwZjk5NzNmZjk5ODNlZjk5YTNlZmE5YjNkZmE5YzNjZmE5ZTNiZmI5ZjNhZmJhMTM5ZmJhMjM4ZmNhMzM4ZmNhNTM3ZmNhNjM2ZmNhODM1ZmNhOTM0ZmRhYjMzZmRhYzMzZmRhZTMyZmRhZjMxZmRiMTMwZmRiMjJmZmRiNDJmZmRiNTJlZmViNzJkZmViODJjZmViYTJjZmViYjJiZmViZDJhZmViZTJhZmVjMDI5ZmRjMjI5ZmRjMzI4ZmRjNTI3ZmRjNjI3ZmRjODI3ZmRjYTI2ZmRjYjI2ZmNjZDI1ZmNjZTI1ZmNkMDI1ZmNkMjI1ZmJkMzI0ZmJkNTI0ZmJkNzI0ZmFkODI0ZmFkYTI0ZjlkYzI0ZjlkZDI1ZjhkZjI1ZjhlMTI1ZjdlMjI1ZjdlNDI1ZjZlNjI2ZjZlODI2ZjVlOTI2ZjVlYjI3ZjRlZDI3ZjNlZTI3ZjNmMDI3ZjJmMjI3ZjFmNDI2ZjFmNTI1ZjBmNzI0ZjBmOTIxIikpLG94PWZ1bmN0aW9uKHQpe3JldHVybiBrZShuZSh0KS5jYWxsKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkpfSxzeD0wO2Z1bmN0aW9uIGN4KCl7cmV0dXJuIG5ldyB1eH1mdW5jdGlvbiB1eCgpe3RoaXMuXz0iQCIrKCsrc3gpLnRvU3RyaW5nKDM2KX11eC5wcm90b3R5cGU9Y3gucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp1eCxnZXQ6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuXzshKGUgaW4gdCk7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gdFtlXX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbdGhpcy5fXT1lfSxyZW1vdmU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuXyBpbiB0JiZkZWxldGUgdFt0aGlzLl9dfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTt2YXIgbHg9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P25ldyBiZShbZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0KV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBiZShbbnVsbD09dD9bXTp0XSxtZSl9LGh4PWZ1bmN0aW9uKHQsZSl7bnVsbD09ZSYmKGU9TW4oKS50b3VjaGVzKTtmb3IodmFyIG49MCxyPWU/ZS5sZW5ndGg6MCxpPW5ldyBBcnJheShyKTtuPHI7KytuKWlbbl09T24odCxlW25dKTtyZXR1cm4gaX0sZng9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxkeD1NYXRoLmFicyxweD1NYXRoLmF0YW4yLHl4PU1hdGguY29zLGd4PU1hdGgubWF4LHZ4PU1hdGgubWluLG14PU1hdGguc2luLGJ4PU1hdGguc3FydCx4eD1NYXRoLlBJLF94PXh4LzIsa3g9Mip4eDtmdW5jdGlvbiB3eCh0KXtyZXR1cm4gdD4xPzA6dDwtMT94eDpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gRXgodCl7cmV0dXJuIHQ+PTE/X3g6dDw9LTE/LV94Ok1hdGguYXNpbih0KX1mdW5jdGlvbiBUeCh0KXtyZXR1cm4gdC5pbm5lclJhZGl1c31mdW5jdGlvbiBDeCh0KXtyZXR1cm4gdC5vdXRlclJhZGl1c31mdW5jdGlvbiBTeCh0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIEF4KHQpe3JldHVybiB0LmVuZEFuZ2xlfWZ1bmN0aW9uIE14KHQpe3JldHVybiB0JiZ0LnBhZEFuZ2xlfWZ1bmN0aW9uIE94KHQsZSxuLHIsaSxhLG8scyl7dmFyIGM9bi10LHU9ci1lLGw9by1pLGg9cy1hLGY9aCpjLWwqdTtpZighKGYqZjwxZS0xMikpcmV0dXJuW3QrKGY9KGwqKGUtYSktaCoodC1pKSkvZikqYyxlK2YqdV19ZnVuY3Rpb24gQngodCxlLG4scixpLGEsbyl7dmFyIHM9dC1uLGM9ZS1yLHU9KG8/YTotYSkvYngocypzK2MqYyksbD11KmMsaD0tdSpzLGY9dCtsLGQ9ZStoLHA9bitsLHk9citoLGc9KGYrcCkvMix2PShkK3kpLzIsbT1wLWYsYj15LWQseD1tKm0rYipiLF89aS1hLGs9Zip5LXAqZCx3PShiPDA/LTE6MSkqYngoZ3goMCxfKl8qeC1rKmspKSxFPShrKmItbSp3KS94LFQ9KC1rKm0tYip3KS94LEM9KGsqYittKncpL3gsUz0oLWsqbStiKncpL3gsQT1FLWcsTT1ULXYsTz1DLWcsQj1TLXY7cmV0dXJuIEEqQStNKk0+TypPK0IqQiYmKEU9QyxUPVMpLHtjeDpFLGN5OlQseDAxOi1sLHkwMTotaCx4MTE6RSooaS9fLTEpLHkxMTpUKihpL18tMSl9fXZhciBOeD1mdW5jdGlvbigpe3ZhciB0PVR4LGU9Q3gsbj1meCgwKSxyPW51bGwsaT1TeCxhPUF4LG89TXgscz1udWxsO2Z1bmN0aW9uIGMoKXt2YXIgYyx1LGw9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLGg9K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpLGY9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyktX3gsZD1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1feCxwPWR4KGQtZikseT1kPmY7aWYoc3x8KHM9Yz1VaSgpKSxoPGwmJih1PWgsaD1sLGw9dSksaD4xZS0xMilpZihwPmt4LTFlLTEyKXMubW92ZVRvKGgqeXgoZiksaCpteChmKSkscy5hcmMoMCwwLGgsZixkLCF5KSxsPjFlLTEyJiYocy5tb3ZlVG8obCp5eChkKSxsKm14KGQpKSxzLmFyYygwLDAsbCxkLGYseSkpO2Vsc2V7dmFyIGcsdixtPWYsYj1kLHg9ZixfPWQsaz1wLHc9cCxFPW8uYXBwbHkodGhpcyxhcmd1bWVudHMpLzIsVD1FPjFlLTEyJiYocj8rci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6YngobCpsK2gqaCkpLEM9dngoZHgoaC1sKS8yLCtuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksUz1DLEE9QztpZihUPjFlLTEyKXt2YXIgTT1FeChUL2wqbXgoRSkpLE89RXgoVC9oKm14KEUpKTsoay09MipNKT4xZS0xMj8oeCs9TSo9eT8xOi0xLF8tPU0pOihrPTAseD1fPShmK2QpLzIpLCh3LT0yKk8pPjFlLTEyPyhtKz1PKj15PzE6LTEsYi09Tyk6KHc9MCxtPWI9KGYrZCkvMil9dmFyIEI9aCp5eChtKSxOPWgqbXgobSksRD1sKnl4KF8pLEw9bCpteChfKTtpZihDPjFlLTEyKXt2YXIgSSxSPWgqeXgoYiksRj1oKm14KGIpLFA9bCp5eCh4KSxqPWwqbXgoeCk7aWYocDx4eCYmKEk9T3goQixOLFAsaixSLEYsRCxMKSkpe3ZhciBZPUItSVswXSx6PU4tSVsxXSxVPVItSVswXSwkPUYtSVsxXSxxPTEvbXgod3goKFkqVSt6KiQpLyhieChZKlkreip6KSpieChVKlUrJCokKSkpLzIpLFc9YngoSVswXSpJWzBdK0lbMV0qSVsxXSk7Uz12eChDLChsLVcpLyhxLTEpKSxBPXZ4KEMsKGgtVykvKHErMSkpfX13PjFlLTEyP0E+MWUtMTI/KGc9QngoUCxqLEIsTixoLEEseSksdj1CeChSLEYsRCxMLGgsQSx5KSxzLm1vdmVUbyhnLmN4K2cueDAxLGcuY3krZy55MDEpLEE8Qz9zLmFyYyhnLmN4LGcuY3ksQSxweChnLnkwMSxnLngwMSkscHgodi55MDEsdi54MDEpLCF5KToocy5hcmMoZy5jeCxnLmN5LEEscHgoZy55MDEsZy54MDEpLHB4KGcueTExLGcueDExKSwheSkscy5hcmMoMCwwLGgscHgoZy5jeStnLnkxMSxnLmN4K2cueDExKSxweCh2LmN5K3YueTExLHYuY3grdi54MTEpLCF5KSxzLmFyYyh2LmN4LHYuY3ksQSxweCh2LnkxMSx2LngxMSkscHgodi55MDEsdi54MDEpLCF5KSkpOihzLm1vdmVUbyhCLE4pLHMuYXJjKDAsMCxoLG0sYiwheSkpOnMubW92ZVRvKEIsTiksbD4xZS0xMiYmaz4xZS0xMj9TPjFlLTEyPyhnPUJ4KEQsTCxSLEYsbCwtUyx5KSx2PUJ4KEIsTixQLGosbCwtUyx5KSxzLmxpbmVUbyhnLmN4K2cueDAxLGcuY3krZy55MDEpLFM8Qz9zLmFyYyhnLmN4LGcuY3ksUyxweChnLnkwMSxnLngwMSkscHgodi55MDEsdi54MDEpLCF5KToocy5hcmMoZy5jeCxnLmN5LFMscHgoZy55MDEsZy54MDEpLHB4KGcueTExLGcueDExKSwheSkscy5hcmMoMCwwLGwscHgoZy5jeStnLnkxMSxnLmN4K2cueDExKSxweCh2LmN5K3YueTExLHYuY3grdi54MTEpLHkpLHMuYXJjKHYuY3gsdi5jeSxTLHB4KHYueTExLHYueDExKSxweCh2LnkwMSx2LngwMSksIXkpKSk6cy5hcmMoMCwwLGwsXyx4LHkpOnMubGluZVRvKEQsTCl9ZWxzZSBzLm1vdmVUbygwLDApO2lmKHMuY2xvc2VQYXRoKCksYylyZXR1cm4gcz1udWxsLGMrIiJ8fG51bGx9cmV0dXJuIGMuY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgbj0oK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIscj0oK2kuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArYS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIteHgvMjtyZXR1cm5beXgocikqbixteChyKSpuXX0sYy5pbm5lclJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmZ4KCtlKSxjKTp0fSxjLm91dGVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZngoK3QpLGMpOmV9LGMuY29ybmVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZngoK3QpLGMpOm59LGMucGFkUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ4KCt0KSxjKTpyfSxjLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmeCgrdCksYyk6aX0sYy5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ4KCt0KSxjKTphfSxjLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZngoK3QpLGMpOm99LGMuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1udWxsPT10P251bGw6dCxjKTpzfSxjfTtmdW5jdGlvbiBEeCh0KXt0aGlzLl9jb250ZXh0PXR9RHgucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKHQsZSl9fX07dmFyIEx4PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRHgodCl9O2Z1bmN0aW9uIEl4KHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIFJ4KHQpe3JldHVybiB0WzFdfXZhciBGeD1mdW5jdGlvbigpe3ZhciB0PUl4LGU9Ungsbj1meCghMCkscj1udWxsLGk9THgsYT1udWxsO2Z1bmN0aW9uIG8obyl7dmFyIHMsYyx1LGw9by5sZW5ndGgsaD0hMTtmb3IobnVsbD09ciYmKGE9aSh1PVVpKCkpKSxzPTA7czw9bDsrK3MpIShzPGwmJm4oYz1vW3NdLHMsbykpPT09aCYmKChoPSFoKT9hLmxpbmVTdGFydCgpOmEubGluZUVuZCgpKSxoJiZhLnBvaW50KCt0KGMscyxvKSwrZShjLHMsbykpO2lmKHUpcmV0dXJuIGE9bnVsbCx1KyIifHxudWxsfXJldHVybiBvLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpmeCgrZSksbyk6dH0sby55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZngoK3QpLG8pOmV9LG8uZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ4KCEhdCksbyk6bn0sby5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LG51bGwhPXImJihhPWkocikpLG8pOml9LG8uY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9yPWE9bnVsbDphPWkocj10KSxvKTpyfSxvfSxQeD1mdW5jdGlvbigpe3ZhciB0PUl4LGU9bnVsbCxuPWZ4KDApLHI9UngsaT1meCghMCksYT1udWxsLG89THgscz1udWxsO2Z1bmN0aW9uIGMoYyl7dmFyIHUsbCxoLGYsZCxwPWMubGVuZ3RoLHk9ITEsZz1uZXcgQXJyYXkocCksdj1uZXcgQXJyYXkocCk7Zm9yKG51bGw9PWEmJihzPW8oZD1VaSgpKSksdT0wO3U8PXA7Kyt1KXtpZighKHU8cCYmaShmPWNbdV0sdSxjKSk9PT15KWlmKHk9IXkpbD11LHMuYXJlYVN0YXJ0KCkscy5saW5lU3RhcnQoKTtlbHNle2ZvcihzLmxpbmVFbmQoKSxzLmxpbmVTdGFydCgpLGg9dS0xO2g+PWw7LS1oKXMucG9pbnQoZ1toXSx2W2hdKTtzLmxpbmVFbmQoKSxzLmFyZWFFbmQoKX15JiYoZ1t1XT0rdChmLHUsYyksdlt1XT0rbihmLHUsYykscy5wb2ludChlPytlKGYsdSxjKTpnW3VdLHI/K3IoZix1LGMpOnZbdV0pKX1pZihkKXJldHVybiBzPW51bGwsZCsiInx8bnVsbH1mdW5jdGlvbiB1KCl7cmV0dXJuIEZ4KCkuZGVmaW5lZChpKS5jdXJ2ZShvKS5jb250ZXh0KGEpfXJldHVybiBjLng9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpmeCgrbiksZT1udWxsLGMpOnR9LGMueDA9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpmeCgrZSksYyk6dH0sYy54MT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10P251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmeCgrdCksYyk6ZX0sYy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZngoK3QpLHI9bnVsbCxjKTpufSxjLnkwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZngoK3QpLGMpOm59LGMueTE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZngoK3QpLGMpOnJ9LGMubGluZVgwPWMubGluZVkwPWZ1bmN0aW9uKCl7cmV0dXJuIHUoKS54KHQpLnkobil9LGMubGluZVkxPWZ1bmN0aW9uKCl7cmV0dXJuIHUoKS54KHQpLnkocil9LGMubGluZVgxPWZ1bmN0aW9uKCl7cmV0dXJuIHUoKS54KGUpLnkobil9LGMuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ4KCEhdCksYyk6aX0sYy5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LG51bGwhPWEmJihzPW8oYSkpLGMpOm99LGMuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9hPXM9bnVsbDpzPW8oYT10KSxjKTphfSxjfSxqeD1mdW5jdGlvbih0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn0sWXg9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHp4PWZ1bmN0aW9uKCl7dmFyIHQ9WXgsZT1qeCxuPW51bGwscj1meCgwKSxpPWZ4KGt4KSxhPWZ4KDApO2Z1bmN0aW9uIG8obyl7dmFyIHMsYyx1LGwsaCxmPW8ubGVuZ3RoLGQ9MCxwPW5ldyBBcnJheShmKSx5PW5ldyBBcnJheShmKSxnPStyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx2PU1hdGgubWluKGt4LE1hdGgubWF4KC1reCxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1nKSksbT1NYXRoLm1pbihNYXRoLmFicyh2KS9mLGEuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxiPW0qKHY8MD8tMToxKTtmb3Iocz0wO3M8ZjsrK3MpKGg9eVtwW3NdPXNdPSt0KG9bc10scyxvKSk+MCYmKGQrPWgpO2ZvcihudWxsIT1lP3Auc29ydCgoZnVuY3Rpb24odCxuKXtyZXR1cm4gZSh5W3RdLHlbbl0pfSkpOm51bGwhPW4mJnAuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gbihvW3RdLG9bZV0pfSkpLHM9MCx1PWQ/KHYtZipiKS9kOjA7czxmOysrcyxnPWwpYz1wW3NdLGw9ZysoKGg9eVtjXSk+MD9oKnU6MCkrYix5W2NdPXtkYXRhOm9bY10saW5kZXg6cyx2YWx1ZTpoLHN0YXJ0QW5nbGU6ZyxlbmRBbmdsZTpsLHBhZEFuZ2xlOm19O3JldHVybiB5fXJldHVybiBvLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZngoK2UpLG8pOnR9LG8uc29ydFZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG49bnVsbCxvKTplfSxvLnNvcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlPW51bGwsbyk6bn0sby5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZngoK3QpLG8pOnJ9LG8uZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmeCgrdCksbyk6aX0sby5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ4KCt0KSxvKTphfSxvfSxVeD1xeChMeCk7ZnVuY3Rpb24gJHgodCl7dGhpcy5fY3VydmU9dH1mdW5jdGlvbiBxeCh0KXtmdW5jdGlvbiBlKGUpe3JldHVybiBuZXcgJHgodChlKSl9cmV0dXJuIGUuX2N1cnZlPXQsZX1mdW5jdGlvbiBXeCh0KXt2YXIgZT10LmN1cnZlO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQucmFkaXVzPXQueSxkZWxldGUgdC55LHQuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShxeCh0KSk6ZSgpLl9jdXJ2ZX0sdH0keC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFTdGFydCgpfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYUVuZCgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLl9jdXJ2ZS5wb2ludChlKk1hdGguc2luKHQpLGUqLU1hdGguY29zKHQpKX19O3ZhciBWeD1mdW5jdGlvbigpe3JldHVybiBXeChGeCgpLmN1cnZlKFV4KSl9LEh4PWZ1bmN0aW9uKCl7dmFyIHQ9UHgoKS5jdXJ2ZShVeCksZT10LmN1cnZlLG49dC5saW5lWDAscj10LmxpbmVYMSxpPXQubGluZVkwLGE9dC5saW5lWTE7cmV0dXJuIHQuYW5nbGU9dC54LGRlbGV0ZSB0LngsdC5zdGFydEFuZ2xlPXQueDAsZGVsZXRlIHQueDAsdC5lbmRBbmdsZT10LngxLGRlbGV0ZSB0LngxLHQucmFkaXVzPXQueSxkZWxldGUgdC55LHQuaW5uZXJSYWRpdXM9dC55MCxkZWxldGUgdC55MCx0Lm91dGVyUmFkaXVzPXQueTEsZGVsZXRlIHQueTEsdC5saW5lU3RhcnRBbmdsZT1mdW5jdGlvbigpe3JldHVybiBXeChuKCkpfSxkZWxldGUgdC5saW5lWDAsdC5saW5lRW5kQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gV3gocigpKX0sZGVsZXRlIHQubGluZVgxLHQubGluZUlubmVyUmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIFd4KGkoKSl9LGRlbGV0ZSB0LmxpbmVZMCx0LmxpbmVPdXRlclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBXeChhKCkpfSxkZWxldGUgdC5saW5lWTEsdC5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lKHF4KHQpKTplKCkuX2N1cnZlfSx0fSxHeD1mdW5jdGlvbih0LGUpe3JldHVyblsoZT0rZSkqTWF0aC5jb3ModC09TWF0aC5QSS8yKSxlKk1hdGguc2luKHQpXX0sWHg9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIFp4KHQpe3JldHVybiB0LnNvdXJjZX1mdW5jdGlvbiBReCh0KXtyZXR1cm4gdC50YXJnZXR9ZnVuY3Rpb24gS3godCl7dmFyIGU9Wngsbj1ReCxyPUl4LGk9UngsYT1udWxsO2Z1bmN0aW9uIG8oKXt2YXIgbyxzPVh4LmNhbGwoYXJndW1lbnRzKSxjPWUuYXBwbHkodGhpcyxzKSx1PW4uYXBwbHkodGhpcyxzKTtpZihhfHwoYT1vPVVpKCkpLHQoYSwrci5hcHBseSh0aGlzLChzWzBdPWMscykpLCtpLmFwcGx5KHRoaXMscyksK3IuYXBwbHkodGhpcywoc1swXT11LHMpKSwraS5hcHBseSh0aGlzLHMpKSxvKXJldHVybiBhPW51bGwsbysiInx8bnVsbH1yZXR1cm4gby5zb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxvKTplfSxvLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LG8pOm59LG8ueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ4KCt0KSxvKTpyfSxvLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmeCgrdCksbyk6aX0sby5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW51bGw9PXQ/bnVsbDp0LG8pOmF9LG99ZnVuY3Rpb24gSngodCxlLG4scixpKXt0Lm1vdmVUbyhlLG4pLHQuYmV6aWVyQ3VydmVUbyhlPShlK3IpLzIsbixlLGkscixpKX1mdW5jdGlvbiB0Xyh0LGUsbixyLGkpe3QubW92ZVRvKGUsbiksdC5iZXppZXJDdXJ2ZVRvKGUsbj0obitpKS8yLHIsbixyLGkpfWZ1bmN0aW9uIGVfKHQsZSxuLHIsaSl7dmFyIGE9R3goZSxuKSxvPUd4KGUsbj0obitpKS8yKSxzPUd4KHIsbiksYz1HeChyLGkpO3QubW92ZVRvKGFbMF0sYVsxXSksdC5iZXppZXJDdXJ2ZVRvKG9bMF0sb1sxXSxzWzBdLHNbMV0sY1swXSxjWzFdKX1mdW5jdGlvbiBuXygpe3JldHVybiBLeChKeCl9ZnVuY3Rpb24gcl8oKXtyZXR1cm4gS3godF8pfWZ1bmN0aW9uIGlfKCl7dmFyIHQ9S3goZV8pO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQucmFkaXVzPXQueSxkZWxldGUgdC55LHR9dmFyIGFfPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUveHgpO3QubW92ZVRvKG4sMCksdC5hcmMoMCwwLG4sMCxreCl9fSxvXz17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguc3FydChlLzUpLzI7dC5tb3ZlVG8oLTMqbiwtbiksdC5saW5lVG8oLW4sLW4pLHQubGluZVRvKC1uLC0zKm4pLHQubGluZVRvKG4sLTMqbiksdC5saW5lVG8obiwtbiksdC5saW5lVG8oMypuLC1uKSx0LmxpbmVUbygzKm4sbiksdC5saW5lVG8obixuKSx0LmxpbmVUbyhuLDMqbiksdC5saW5lVG8oLW4sMypuKSx0LmxpbmVUbygtbixuKSx0LmxpbmVUbygtMypuLG4pLHQuY2xvc2VQYXRoKCl9fSxzXz1NYXRoLnNxcnQoMS8zKSxjXz0yKnNfLHVfPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUvY18pLHI9bipzXzt0Lm1vdmVUbygwLC1uKSx0LmxpbmVUbyhyLDApLHQubGluZVRvKDAsbiksdC5saW5lVG8oLXIsMCksdC5jbG9zZVBhdGgoKX19LGxfPU1hdGguc2luKHh4LzEwKS9NYXRoLnNpbig3Knh4LzEwKSxoXz1NYXRoLnNpbihreC8xMCkqbF8sZl89LU1hdGguY29zKGt4LzEwKSpsXyxkXz17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguc3FydCguODkwODEzMDkxNTI5Mjg1MiplKSxyPWhfKm4saT1mXypuO3QubW92ZVRvKDAsLW4pLHQubGluZVRvKHIsaSk7Zm9yKHZhciBhPTE7YTw1OysrYSl7dmFyIG89a3gqYS81LHM9TWF0aC5jb3MobyksYz1NYXRoLnNpbihvKTt0LmxpbmVUbyhjKm4sLXMqbiksdC5saW5lVG8ocypyLWMqaSxjKnIrcyppKX10LmNsb3NlUGF0aCgpfX0scF89e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgbj1NYXRoLnNxcnQoZSkscj0tbi8yO3QucmVjdChyLHIsbixuKX19LHlfPU1hdGguc3FydCgzKSxnXz17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPS1NYXRoLnNxcnQoZS8oMyp5XykpO3QubW92ZVRvKDAsMipuKSx0LmxpbmVUbygteV8qbiwtbiksdC5saW5lVG8oeV8qbiwtbiksdC5jbG9zZVBhdGgoKX19LHZfPU1hdGguc3FydCgzKS8yLG1fPTEvTWF0aC5zcXJ0KDEyKSxiXz0zKihtXy8yKzEpLHhfPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUvYl8pLHI9bi8yLGk9biptXyxhPXIsbz1uKm1fK24scz0tYSxjPW87dC5tb3ZlVG8ocixpKSx0LmxpbmVUbyhhLG8pLHQubGluZVRvKHMsYyksdC5saW5lVG8oLS41KnItdl8qaSx2XypyKy0uNSppKSx0LmxpbmVUbygtLjUqYS12XypvLHZfKmErLS41Km8pLHQubGluZVRvKC0uNSpzLXZfKmMsdl8qcystLjUqYyksdC5saW5lVG8oLS41KnIrdl8qaSwtLjUqaS12XypyKSx0LmxpbmVUbygtLjUqYSt2XypvLC0uNSpvLXZfKmEpLHQubGluZVRvKC0uNSpzK3ZfKmMsLS41KmMtdl8qcyksdC5jbG9zZVBhdGgoKX19LF9fPVthXyxvXyx1XyxwXyxkXyxnXyx4X10sa189ZnVuY3Rpb24oKXt2YXIgdD1meChhXyksZT1meCg2NCksbj1udWxsO2Z1bmN0aW9uIHIoKXt2YXIgcjtpZihufHwobj1yPVVpKCkpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLmRyYXcobiwrZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLHIpcmV0dXJuIG49bnVsbCxyKyIifHxudWxsfXJldHVybiByLnR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpmeChlKSxyKTp0fSxyLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmeCgrdCkscik6ZX0sci5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/bnVsbDp0LHIpOm59LHJ9LHdfPWZ1bmN0aW9uKCl7fTtmdW5jdGlvbiBFXyh0LGUsbil7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKnQuX3gwK3QuX3gxKS8zLCgyKnQuX3kwK3QuX3kxKS8zLCh0Ll94MCsyKnQuX3gxKS8zLCh0Ll95MCsyKnQuX3kxKS8zLCh0Ll94MCs0KnQuX3gxK2UpLzYsKHQuX3kwKzQqdC5feTErbikvNil9ZnVuY3Rpb24gVF8odCl7dGhpcy5fY29udGV4dD10fVRfLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6RV8odGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fY29udGV4dC5saW5lVG8oKDUqdGhpcy5feDArdGhpcy5feDEpLzYsKDUqdGhpcy5feTArdGhpcy5feTEpLzYpO2RlZmF1bHQ6RV8odGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX19O3ZhciBDXz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFRfKHQpfTtmdW5jdGlvbiBTXyh0KXt0aGlzLl9jb250ZXh0PXR9U18ucHJvdG90eXBlPXthcmVhU3RhcnQ6d18sYXJlYUVuZDp3XyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDIrMip0aGlzLl94MykvMywodGhpcy5feTIrMip0aGlzLl95MykvMyksdGhpcy5fY29udGV4dC5saW5lVG8oKHRoaXMuX3gzKzIqdGhpcy5feDIpLzMsKHRoaXMuX3kzKzIqdGhpcy5feTIpLzMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpLHRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mj10LHRoaXMuX3kyPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSx0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDArNCp0aGlzLl94MSt0KS82LCh0aGlzLl95MCs0KnRoaXMuX3kxK2UpLzYpO2JyZWFrO2RlZmF1bHQ6RV8odGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX19O3ZhciBBXz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFNfKHQpfTtmdW5jdGlvbiBNXyh0KXt0aGlzLl9jb250ZXh0PXR9TV8ucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7dmFyIG49KHRoaXMuX3gwKzQqdGhpcy5feDErdCkvNixyPSh0aGlzLl95MCs0KnRoaXMuX3kxK2UpLzY7dGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhuLHIpOnRoaXMuX2NvbnRleHQubW92ZVRvKG4scik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpFXyh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lfX07dmFyIE9fPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgTV8odCl9O2Z1bmN0aW9uIEJfKHQsZSl7dGhpcy5fYmFzaXM9bmV3IFRfKHQpLHRoaXMuX2JldGE9ZX1CXy5wcm90b3R5cGU9e2xpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXSx0aGlzLl9iYXNpcy5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsZT10aGlzLl95LG49dC5sZW5ndGgtMTtpZihuPjApZm9yKHZhciByLGk9dFswXSxhPWVbMF0sbz10W25dLWkscz1lW25dLWEsYz0tMTsrK2M8PW47KXI9Yy9uLHRoaXMuX2Jhc2lzLnBvaW50KHRoaXMuX2JldGEqdFtjXSsoMS10aGlzLl9iZXRhKSooaStyKm8pLHRoaXMuX2JldGEqZVtjXSsoMS10aGlzLl9iZXRhKSooYStyKnMpKTt0aGlzLl94PXRoaXMuX3k9bnVsbCx0aGlzLl9iYXNpcy5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK2UpfX07dmFyIE5fPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gMT09PWU/bmV3IFRfKHQpOm5ldyBCXyh0LGUpfXJldHVybiBuLmJldGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSguODUpO2Z1bmN0aW9uIERfKHQsZSxuKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8odC5feDErdC5fayoodC5feDItdC5feDApLHQuX3kxK3QuX2sqKHQuX3kyLXQuX3kwKSx0Ll94Mit0Ll9rKih0Ll94MS1lKSx0Ll95Mit0Ll9rKih0Ll95MS1uKSx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gTF8odCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fUxfLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzpEXyh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDE9dCx0aGlzLl95MT1lO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6RF8odGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciBJXz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIG5ldyBMXyh0LGUpfXJldHVybiBuLnRlbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSgwKTtmdW5jdGlvbiBSXyh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9Ul8ucHJvdG90eXBlPXthcmVhU3RhcnQ6d18sYXJlYUVuZDp3XyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSl9fSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND10LHRoaXMuX3k0PWUpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PXQsdGhpcy5feTU9ZTticmVhaztkZWZhdWx0OkRfKHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgRl89ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgUl8odCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oMCk7ZnVuY3Rpb24gUF8odCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fVBfLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OkRfKHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgal89ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgUF8odCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oMCk7ZnVuY3Rpb24gWV8odCxlLG4pe3ZhciByPXQuX3gxLGk9dC5feTEsYT10Ll94MixvPXQuX3kyO2lmKHQuX2wwMV9hPjFlLTEyKXt2YXIgcz0yKnQuX2wwMV8yYSszKnQuX2wwMV9hKnQuX2wxMl9hK3QuX2wxMl8yYSxjPTMqdC5fbDAxX2EqKHQuX2wwMV9hK3QuX2wxMl9hKTtyPShyKnMtdC5feDAqdC5fbDEyXzJhK3QuX3gyKnQuX2wwMV8yYSkvYyxpPShpKnMtdC5feTAqdC5fbDEyXzJhK3QuX3kyKnQuX2wwMV8yYSkvY31pZih0Ll9sMjNfYT4xZS0xMil7dmFyIHU9Mip0Ll9sMjNfMmErMyp0Ll9sMjNfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEsbD0zKnQuX2wyM19hKih0Ll9sMjNfYSt0Ll9sMTJfYSk7YT0oYSp1K3QuX3gxKnQuX2wyM18yYS1lKnQuX2wxMl8yYSkvbCxvPShvKnUrdC5feTEqdC5fbDIzXzJhLW4qdC5fbDEyXzJhKS9sfXQuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhyLGksYSxvLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiB6Xyh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfXpfLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi10LHI9dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbityKnIsdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6WV8odGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgVV89ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBlP25ldyB6Xyh0LGUpOm5ldyBMXyh0LDApfXJldHVybiBuLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oLjUpO2Z1bmN0aW9uICRfKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9JF8ucHJvdG90eXBlPXthcmVhU3RhcnQ6d18sYXJlYUVuZDp3XyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSl9fSxwb2ludDpmdW5jdGlvbih0LGUpe2lmKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7dmFyIG49dGhpcy5feDItdCxyPXRoaXMuX3kyLWU7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhuKm4rcipyLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9dCx0aGlzLl95ND1lKTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT10LHRoaXMuX3k1PWU7YnJlYWs7ZGVmYXVsdDpZXyh0aGlzLHQsZSl9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciBxXz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGU/bmV3ICRfKHQsZSk6bmV3IFJfKHQsMCl9cmV0dXJuIG4uYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSguNSk7ZnVuY3Rpb24gV18odCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX1XXy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciBuPXRoaXMuX3gyLXQscj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cobipuK3Iqcix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6WV8odGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgVl89ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBlP25ldyBXXyh0LGUpOm5ldyBQXyh0LDApfXJldHVybiBuLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oLjUpO2Z1bmN0aW9uIEhfKHQpe3RoaXMuX2NvbnRleHQ9dH1IXy5wcm90b3R5cGU9e2FyZWFTdGFydDp3XyxhcmVhRW5kOndfLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludCYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0PSt0LGU9K2UsdGhpcy5fcG9pbnQ/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKToodGhpcy5fcG9pbnQ9MSx0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpKX19O3ZhciBHXz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEhfKHQpfTtmdW5jdGlvbiBYXyh0KXtyZXR1cm4gdDwwPy0xOjF9ZnVuY3Rpb24gWl8odCxlLG4pe3ZhciByPXQuX3gxLXQuX3gwLGk9ZS10Ll94MSxhPSh0Ll95MS10Ll95MCkvKHJ8fGk8MCYmLTApLG89KG4tdC5feTEpLyhpfHxyPDAmJi0wKSxzPShhKmkrbypyKS8ocitpKTtyZXR1cm4oWF8oYSkrWF8obykpKk1hdGgubWluKE1hdGguYWJzKGEpLE1hdGguYWJzKG8pLC41Kk1hdGguYWJzKHMpKXx8MH1mdW5jdGlvbiBRXyh0LGUpe3ZhciBuPXQuX3gxLXQuX3gwO3JldHVybiBuPygzKih0Ll95MS10Ll95MCkvbi1lKS8yOmV9ZnVuY3Rpb24gS18odCxlLG4pe3ZhciByPXQuX3gwLGk9dC5feTAsYT10Ll94MSxvPXQuX3kxLHM9KGEtcikvMzt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8ocitzLGkrcyplLGEtcyxvLXMqbixhLG8pfWZ1bmN0aW9uIEpfKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiB0ayh0KXt0aGlzLl9jb250ZXh0PW5ldyBlayh0KX1mdW5jdGlvbiBlayh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gbmsodCl7cmV0dXJuIG5ldyBKXyh0KX1mdW5jdGlvbiByayh0KXtyZXR1cm4gbmV3IHRrKHQpfWZ1bmN0aW9uIGlrKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBhayh0KXt2YXIgZSxuLHI9dC5sZW5ndGgtMSxpPW5ldyBBcnJheShyKSxhPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKTtmb3IoaVswXT0wLGFbMF09MixvWzBdPXRbMF0rMip0WzFdLGU9MTtlPHItMTsrK2UpaVtlXT0xLGFbZV09NCxvW2VdPTQqdFtlXSsyKnRbZSsxXTtmb3IoaVtyLTFdPTIsYVtyLTFdPTcsb1tyLTFdPTgqdFtyLTFdK3Rbcl0sZT0xO2U8cjsrK2Upbj1pW2VdL2FbZS0xXSxhW2VdLT1uLG9bZV0tPW4qb1tlLTFdO2ZvcihpW3ItMV09b1tyLTFdL2Fbci0xXSxlPXItMjtlPj0wOy0tZSlpW2VdPShvW2VdLWlbZSsxXSkvYVtlXTtmb3IoYVtyLTFdPSh0W3JdK2lbci0xXSkvMixlPTA7ZTxyLTE7KytlKWFbZV09Mip0W2UrMV0taVtlKzFdO3JldHVybltpLGFdfUpfLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3QwPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpO2JyZWFrO2Nhc2UgMzpLXyh0aGlzLHRoaXMuX3QwLFFfKHRoaXMsdGhpcy5fdDApKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dmFyIG49TmFOO2lmKGU9K2UsKHQ9K3QpIT09dGhpcy5feDF8fGUhPT10aGlzLl95MSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MyxLXyh0aGlzLFFfKHRoaXMsbj1aXyh0aGlzLHQsZSkpLG4pO2JyZWFrO2RlZmF1bHQ6S18odGhpcyx0aGlzLl90MCxuPVpfKHRoaXMsdCxlKSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lLHRoaXMuX3QwPW59fX0sKHRrLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEpfLnByb3RvdHlwZSkpLnBvaW50PWZ1bmN0aW9uKHQsZSl7Sl8ucHJvdG90eXBlLnBvaW50LmNhbGwodGhpcyxlLHQpfSxlay5wcm90b3R5cGU9e21vdmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuX2NvbnRleHQubW92ZVRvKGUsdCl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LGxpbmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24odCxlLG4scixpLGEpe3RoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhlLHQscixuLGEsaSl9fSxpay5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W119LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LGU9dGhpcy5feSxuPXQubGVuZ3RoO2lmKG4paWYodGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0WzBdLGVbMF0pOnRoaXMuX2NvbnRleHQubW92ZVRvKHRbMF0sZVswXSksMj09PW4pdGhpcy5fY29udGV4dC5saW5lVG8odFsxXSxlWzFdKTtlbHNlIGZvcih2YXIgcj1hayh0KSxpPWFrKGUpLGE9MCxvPTE7bzxuOysrYSwrK28pdGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHJbMF1bYV0saVswXVthXSxyWzFdW2FdLGlbMV1bYV0sdFtvXSxlW29dKTsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT1uKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSx0aGlzLl94PXRoaXMuX3k9bnVsbH0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLl94LnB1c2goK3QpLHRoaXMuX3kucHVzaCgrZSl9fTt2YXIgb2s9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBpayh0KX07ZnVuY3Rpb24gc2sodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fdD1lfXNrLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9dGhpcy5feT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA8dGhpcy5fdCYmdGhpcy5fdDwxJiYyPT09dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdGhpcy5feSksKHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU+PTAmJih0aGlzLl90PTEtdGhpcy5fdCx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDppZih0aGlzLl90PD0wKXRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsZSksdGhpcy5fY29udGV4dC5saW5lVG8odCxlKTtlbHNle3ZhciBuPXRoaXMuX3gqKDEtdGhpcy5fdCkrdCp0aGlzLl90O3RoaXMuX2NvbnRleHQubGluZVRvKG4sdGhpcy5feSksdGhpcy5fY29udGV4dC5saW5lVG8obixlKX19dGhpcy5feD10LHRoaXMuX3k9ZX19O3ZhciBjaz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHNrKHQsLjUpfTtmdW5jdGlvbiB1ayh0KXtyZXR1cm4gbmV3IHNrKHQsMCl9ZnVuY3Rpb24gbGsodCl7cmV0dXJuIG5ldyBzayh0LDEpfXZhciBoaz1mdW5jdGlvbih0LGUpe2lmKChpPXQubGVuZ3RoKT4xKWZvcih2YXIgbixyLGksYT0xLG89dFtlWzBdXSxzPW8ubGVuZ3RoO2E8aTsrK2EpZm9yKHI9byxvPXRbZVthXV0sbj0wO248czsrK24pb1tuXVsxXSs9b1tuXVswXT1pc05hTihyW25dWzFdKT9yW25dWzBdOnJbbl1bMV19LGZrPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxuPW5ldyBBcnJheShlKTstLWU+PTA7KW5bZV09ZTtyZXR1cm4gbn07ZnVuY3Rpb24gZGsodCxlKXtyZXR1cm4gdFtlXX12YXIgcGs9ZnVuY3Rpb24oKXt2YXIgdD1meChbXSksZT1mayxuPWhrLHI9ZGs7ZnVuY3Rpb24gaShpKXt2YXIgYSxvLHM9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYz1pLmxlbmd0aCx1PXMubGVuZ3RoLGw9bmV3IEFycmF5KHUpO2ZvcihhPTA7YTx1OysrYSl7Zm9yKHZhciBoLGY9c1thXSxkPWxbYV09bmV3IEFycmF5KGMpLHA9MDtwPGM7KytwKWRbcF09aD1bMCwrcihpW3BdLGYscCxpKV0saC5kYXRhPWlbcF07ZC5rZXk9Zn1mb3IoYT0wLG89ZShsKTthPHU7KythKWxbb1thXV0uaW5kZXg9YTtyZXR1cm4gbihsLG8pLGx9cmV0dXJuIGkua2V5cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmZ4KFh4LmNhbGwoZSkpLGkpOnR9LGkudmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmeCgrdCksaSk6cn0saS5vcmRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10P2ZrOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZngoWHguY2FsbCh0KSksaSk6ZX0saS5vZmZzZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9oazp0LGkpOm59LGl9LHlrPWZ1bmN0aW9uKHQsZSl7aWYoKHI9dC5sZW5ndGgpPjApe2Zvcih2YXIgbixyLGksYT0wLG89dFswXS5sZW5ndGg7YTxvOysrYSl7Zm9yKGk9bj0wO248cjsrK24paSs9dFtuXVthXVsxXXx8MDtpZihpKWZvcihuPTA7bjxyOysrbil0W25dW2FdWzFdLz1pfWhrKHQsZSl9fSxnaz1mdW5jdGlvbih0LGUpe2lmKChzPXQubGVuZ3RoKT4wKWZvcih2YXIgbixyLGksYSxvLHMsYz0wLHU9dFtlWzBdXS5sZW5ndGg7Yzx1OysrYylmb3IoYT1vPTAsbj0wO248czsrK24pKGk9KHI9dFtlW25dXVtjXSlbMV0tclswXSk+MD8oclswXT1hLHJbMV09YSs9aSk6aTwwPyhyWzFdPW8sclswXT1vKz1pKTooclswXT0wLHJbMV09aSl9LHZrPWZ1bmN0aW9uKHQsZSl7aWYoKG49dC5sZW5ndGgpPjApe2Zvcih2YXIgbixyPTAsaT10W2VbMF1dLGE9aS5sZW5ndGg7cjxhOysrcil7Zm9yKHZhciBvPTAscz0wO288bjsrK28pcys9dFtvXVtyXVsxXXx8MDtpW3JdWzFdKz1pW3JdWzBdPS1zLzJ9aGsodCxlKX19LG1rPWZ1bmN0aW9uKHQsZSl7aWYoKGk9dC5sZW5ndGgpPjAmJihyPShuPXRbZVswXV0pLmxlbmd0aCk+MCl7Zm9yKHZhciBuLHIsaSxhPTAsbz0xO288cjsrK28pe2Zvcih2YXIgcz0wLGM9MCx1PTA7czxpOysrcyl7Zm9yKHZhciBsPXRbZVtzXV0saD1sW29dWzFdfHwwLGY9KGgtKGxbby0xXVsxXXx8MCkpLzIsZD0wO2Q8czsrK2Qpe3ZhciBwPXRbZVtkXV07Zis9KHBbb11bMV18fDApLShwW28tMV1bMV18fDApfWMrPWgsdSs9ZipofW5bby0xXVsxXSs9bltvLTFdWzBdPWEsYyYmKGEtPXUvYyl9bltvLTFdWzFdKz1uW28tMV1bMF09YSxoayh0LGUpfX0sYms9ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXAoeGspO3JldHVybiBmayh0KS5zb3J0KChmdW5jdGlvbih0LG4pe3JldHVybiBlW3RdLWVbbl19KSl9O2Z1bmN0aW9uIHhrKHQpe2Zvcih2YXIgZSxuPS0xLHI9MCxpPXQubGVuZ3RoLGE9LTEvMDsrK248aTspKGU9K3Rbbl1bMV0pPmEmJihhPWUscj1uKTtyZXR1cm4gcn12YXIgX2s9ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXAoa2spO3JldHVybiBmayh0KS5zb3J0KChmdW5jdGlvbih0LG4pe3JldHVybiBlW3RdLWVbbl19KSl9O2Z1bmN0aW9uIGtrKHQpe2Zvcih2YXIgZSxuPTAscj0tMSxpPXQubGVuZ3RoOysrcjxpOykoZT0rdFtyXVsxXSkmJihuKz1lKTtyZXR1cm4gbn12YXIgd2s9ZnVuY3Rpb24odCl7cmV0dXJuIF9rKHQpLnJldmVyc2UoKX0sRWs9ZnVuY3Rpb24odCl7dmFyIGUsbixyPXQubGVuZ3RoLGk9dC5tYXAoa2spLGE9YmsodCksbz0wLHM9MCxjPVtdLHU9W107Zm9yKGU9MDtlPHI7KytlKW49YVtlXSxvPHM/KG8rPWlbbl0sYy5wdXNoKG4pKToocys9aVtuXSx1LnB1c2gobikpO3JldHVybiB1LnJldmVyc2UoKS5jb25jYXQoYyl9LFRrPWZ1bmN0aW9uKHQpe3JldHVybiBmayh0KS5yZXZlcnNlKCl9O3ZhciBDaz1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZz9mdW5jdGlvbih0KXtyZXR1cm4gdC50b0lTT1N0cmluZygpfTpxZygiJVktJW0tJWRUJUg6JU06JVMuJUxaIik7dmFyIFNrPStuZXcgRGF0ZSgiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaIik/ZnVuY3Rpb24odCl7dmFyIGU9bmV3IERhdGUodCk7cmV0dXJuIGlzTmFOKGUpP251bGw6ZX06V2coIiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIpLEFrPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uZXcgJG4saT1lO3JldHVybiBudWxsPT1lPyhyLnJlc3RhcnQodCxlLG4pLHIpOihlPStlLG49bnVsbD09bj96bigpOituLHIucmVzdGFydCgoZnVuY3Rpb24gYShvKXtvKz1pLHIucmVzdGFydChhLGkrPWUsbiksdChvKX0pLGUsbikscil9LE1rPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX07ZnVuY3Rpb24gT2sodCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gQmsodCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gTmsoKXt0aGlzLl89bnVsbH1mdW5jdGlvbiBEayh0KXt0LlU9dC5DPXQuTD10LlI9dC5QPXQuTj1udWxsfWZ1bmN0aW9uIExrKHQsZSl7dmFyIG49ZSxyPWUuUixpPW4uVTtpP2kuTD09PW4/aS5MPXI6aS5SPXI6dC5fPXIsci5VPWksbi5VPXIsbi5SPXIuTCxuLlImJihuLlIuVT1uKSxyLkw9bn1mdW5jdGlvbiBJayh0LGUpe3ZhciBuPWUscj1lLkwsaT1uLlU7aT9pLkw9PT1uP2kuTD1yOmkuUj1yOnQuXz1yLHIuVT1pLG4uVT1yLG4uTD1yLlIsbi5MJiYobi5MLlU9biksci5SPW59ZnVuY3Rpb24gUmsodCl7Zm9yKDt0Lkw7KXQ9dC5MO3JldHVybiB0fU5rLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TmssaW5zZXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHQpe2lmKGUuUD10LGUuTj10Lk4sdC5OJiYodC5OLlA9ZSksdC5OPWUsdC5SKXtmb3IodD10LlI7dC5MOyl0PXQuTDt0Lkw9ZX1lbHNlIHQuUj1lO249dH1lbHNlIHRoaXMuXz8odD1Sayh0aGlzLl8pLGUuUD1udWxsLGUuTj10LHQuUD10Lkw9ZSxuPXQpOihlLlA9ZS5OPW51bGwsdGhpcy5fPWUsbj1udWxsKTtmb3IoZS5MPWUuUj1udWxsLGUuVT1uLGUuQz0hMCx0PWU7biYmbi5DOyluPT09KHI9bi5VKS5MPyhpPXIuUikmJmkuQz8obi5DPWkuQz0hMSxyLkM9ITAsdD1yKToodD09PW4uUiYmKExrKHRoaXMsbiksbj0odD1uKS5VKSxuLkM9ITEsci5DPSEwLElrKHRoaXMscikpOihpPXIuTCkmJmkuQz8obi5DPWkuQz0hMSxyLkM9ITAsdD1yKToodD09PW4uTCYmKElrKHRoaXMsbiksbj0odD1uKS5VKSxuLkM9ITEsci5DPSEwLExrKHRoaXMscikpLG49dC5VO3RoaXMuXy5DPSExfSxyZW1vdmU6ZnVuY3Rpb24odCl7dC5OJiYodC5OLlA9dC5QKSx0LlAmJih0LlAuTj10Lk4pLHQuTj10LlA9bnVsbDt2YXIgZSxuLHIsaT10LlUsYT10Lkwsbz10LlI7aWYobj1hP28/Umsobyk6YTpvLGk/aS5MPT09dD9pLkw9bjppLlI9bjp0aGlzLl89bixhJiZvPyhyPW4uQyxuLkM9dC5DLG4uTD1hLGEuVT1uLG4hPT1vPyhpPW4uVSxuLlU9dC5VLHQ9bi5SLGkuTD10LG4uUj1vLG8uVT1uKToobi5VPWksaT1uLHQ9bi5SKSk6KHI9dC5DLHQ9biksdCYmKHQuVT1pKSwhcilpZih0JiZ0LkMpdC5DPSExO2Vsc2V7ZG97aWYodD09PXRoaXMuXylicmVhaztpZih0PT09aS5MKXtpZigoZT1pLlIpLkMmJihlLkM9ITEsaS5DPSEwLExrKHRoaXMsaSksZT1pLlIpLGUuTCYmZS5MLkN8fGUuUiYmZS5SLkMpe2UuUiYmZS5SLkN8fChlLkwuQz0hMSxlLkM9ITAsSWsodGhpcyxlKSxlPWkuUiksZS5DPWkuQyxpLkM9ZS5SLkM9ITEsTGsodGhpcyxpKSx0PXRoaXMuXzticmVha319ZWxzZSBpZigoZT1pLkwpLkMmJihlLkM9ITEsaS5DPSEwLElrKHRoaXMsaSksZT1pLkwpLGUuTCYmZS5MLkN8fGUuUiYmZS5SLkMpe2UuTCYmZS5MLkN8fChlLlIuQz0hMSxlLkM9ITAsTGsodGhpcyxlKSxlPWkuTCksZS5DPWkuQyxpLkM9ZS5MLkM9ITEsSWsodGhpcyxpKSx0PXRoaXMuXzticmVha31lLkM9ITAsdD1pLGk9aS5VfXdoaWxlKCF0LkMpO3QmJih0LkM9ITEpfX19O3ZhciBGaz1OaztmdW5jdGlvbiBQayh0LGUsbixyKXt2YXIgaT1bbnVsbCxudWxsXSxhPWN3LnB1c2goaSktMTtyZXR1cm4gaS5sZWZ0PXQsaS5yaWdodD1lLG4mJllrKGksdCxlLG4pLHImJllrKGksZSx0LHIpLG93W3QuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKGEpLG93W2UuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKGEpLGl9ZnVuY3Rpb24gamsodCxlLG4pe3ZhciByPVtlLG5dO3JldHVybiByLmxlZnQ9dCxyfWZ1bmN0aW9uIFlrKHQsZSxuLHIpe3RbMF18fHRbMV0/dC5sZWZ0PT09bj90WzFdPXI6dFswXT1yOih0WzBdPXIsdC5sZWZ0PWUsdC5yaWdodD1uKX1mdW5jdGlvbiB6ayh0LGUsbixyLGkpe3ZhciBhLG89dFswXSxzPXRbMV0sYz1vWzBdLHU9b1sxXSxsPTAsaD0xLGY9c1swXS1jLGQ9c1sxXS11O2lmKGE9ZS1jLGZ8fCEoYT4wKSl7aWYoYS89ZixmPDApe2lmKGE8bClyZXR1cm47YTxoJiYoaD1hKX1lbHNlIGlmKGY+MCl7aWYoYT5oKXJldHVybjthPmwmJihsPWEpfWlmKGE9ci1jLGZ8fCEoYTwwKSl7aWYoYS89ZixmPDApe2lmKGE+aClyZXR1cm47YT5sJiYobD1hKX1lbHNlIGlmKGY+MCl7aWYoYTxsKXJldHVybjthPGgmJihoPWEpfWlmKGE9bi11LGR8fCEoYT4wKSl7aWYoYS89ZCxkPDApe2lmKGE8bClyZXR1cm47YTxoJiYoaD1hKX1lbHNlIGlmKGQ+MCl7aWYoYT5oKXJldHVybjthPmwmJihsPWEpfWlmKGE9aS11LGR8fCEoYTwwKSl7aWYoYS89ZCxkPDApe2lmKGE+aClyZXR1cm47YT5sJiYobD1hKX1lbHNlIGlmKGQ+MCl7aWYoYTxsKXJldHVybjthPGgmJihoPWEpfXJldHVybiEobD4wfHxoPDEpfHwobD4wJiYodFswXT1bYytsKmYsdStsKmRdKSxoPDEmJih0WzFdPVtjK2gqZix1K2gqZF0pLCEwKX19fX19ZnVuY3Rpb24gVWsodCxlLG4scixpKXt2YXIgYT10WzFdO2lmKGEpcmV0dXJuITA7dmFyIG8scyxjPXRbMF0sdT10LmxlZnQsbD10LnJpZ2h0LGg9dVswXSxmPXVbMV0sZD1sWzBdLHA9bFsxXSx5PShoK2QpLzIsZz0oZitwKS8yO2lmKHA9PT1mKXtpZih5PGV8fHk+PXIpcmV0dXJuO2lmKGg+ZCl7aWYoYyl7aWYoY1sxXT49aSlyZXR1cm59ZWxzZSBjPVt5LG5dO2E9W3ksaV19ZWxzZXtpZihjKXtpZihjWzFdPG4pcmV0dXJufWVsc2UgYz1beSxpXTthPVt5LG5dfX1lbHNlIGlmKHM9Zy0obz0oaC1kKS8ocC1mKSkqeSxvPC0xfHxvPjEpaWYoaD5kKXtpZihjKXtpZihjWzFdPj1pKXJldHVybn1lbHNlIGM9WyhuLXMpL28sbl07YT1bKGktcykvbyxpXX1lbHNle2lmKGMpe2lmKGNbMV08bilyZXR1cm59ZWxzZSBjPVsoaS1zKS9vLGldO2E9WyhuLXMpL28sbl19ZWxzZSBpZihmPHApe2lmKGMpe2lmKGNbMF0+PXIpcmV0dXJufWVsc2UgYz1bZSxvKmUrc107YT1bcixvKnIrc119ZWxzZXtpZihjKXtpZihjWzBdPGUpcmV0dXJufWVsc2UgYz1bcixvKnIrc107YT1bZSxvKmUrc119cmV0dXJuIHRbMF09Yyx0WzFdPWEsITB9ZnVuY3Rpb24gJGsodCxlKXt2YXIgbj10LnNpdGUscj1lLmxlZnQsaT1lLnJpZ2h0O3JldHVybiBuPT09aSYmKGk9cixyPW4pLGk/TWF0aC5hdGFuMihpWzFdLXJbMV0saVswXS1yWzBdKToobj09PXI/KHI9ZVsxXSxpPWVbMF0pOihyPWVbMF0saT1lWzFdKSxNYXRoLmF0YW4yKHJbMF0taVswXSxpWzFdLXJbMV0pKX1mdW5jdGlvbiBxayh0LGUpe3JldHVybiBlWysoZS5sZWZ0IT09dC5zaXRlKV19ZnVuY3Rpb24gV2sodCxlKXtyZXR1cm4gZVsrKGUubGVmdD09PXQuc2l0ZSldfXZhciBWayxIaz1bXTtmdW5jdGlvbiBHaygpe0RrKHRoaXMpLHRoaXMueD10aGlzLnk9dGhpcy5hcmM9dGhpcy5zaXRlPXRoaXMuY3k9bnVsbH1mdW5jdGlvbiBYayh0KXt2YXIgZT10LlAsbj10Lk47aWYoZSYmbil7dmFyIHI9ZS5zaXRlLGk9dC5zaXRlLGE9bi5zaXRlO2lmKHIhPT1hKXt2YXIgbz1pWzBdLHM9aVsxXSxjPXJbMF0tbyx1PXJbMV0tcyxsPWFbMF0tbyxoPWFbMV0tcyxmPTIqKGMqaC11KmwpO2lmKCEoZj49LWx3KSl7dmFyIGQ9YypjK3UqdSxwPWwqbCtoKmgseT0oaCpkLXUqcCkvZixnPShjKnAtbCpkKS9mLHY9SGsucG9wKCl8fG5ldyBHazt2LmFyYz10LHYuc2l0ZT1pLHYueD15K28sdi55PSh2LmN5PWcrcykrTWF0aC5zcXJ0KHkqeStnKmcpLHQuY2lyY2xlPXY7Zm9yKHZhciBtPW51bGwsYj1zdy5fO2I7KWlmKHYueTxiLnl8fHYueT09PWIueSYmdi54PD1iLngpe2lmKCFiLkwpe209Yi5QO2JyZWFrfWI9Yi5MfWVsc2V7aWYoIWIuUil7bT1iO2JyZWFrfWI9Yi5SfXN3Lmluc2VydChtLHYpLG18fChWaz12KX19fX1mdW5jdGlvbiBaayh0KXt2YXIgZT10LmNpcmNsZTtlJiYoZS5QfHwoVms9ZS5OKSxzdy5yZW1vdmUoZSksSGsucHVzaChlKSxEayhlKSx0LmNpcmNsZT1udWxsKX12YXIgUWs9W107ZnVuY3Rpb24gS2soKXtEayh0aGlzKSx0aGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9ZnVuY3Rpb24gSmsodCl7dmFyIGU9UWsucG9wKCl8fG5ldyBLaztyZXR1cm4gZS5zaXRlPXQsZX1mdW5jdGlvbiB0dyh0KXtaayh0KSxhdy5yZW1vdmUodCksUWsucHVzaCh0KSxEayh0KX1mdW5jdGlvbiBldyh0KXt2YXIgZT10LmNpcmNsZSxuPWUueCxyPWUuY3ksaT1bbixyXSxhPXQuUCxvPXQuTixzPVt0XTt0dyh0KTtmb3IodmFyIGM9YTtjLmNpcmNsZSYmTWF0aC5hYnMobi1jLmNpcmNsZS54KTx1dyYmTWF0aC5hYnMoci1jLmNpcmNsZS5jeSk8dXc7KWE9Yy5QLHMudW5zaGlmdChjKSx0dyhjKSxjPWE7cy51bnNoaWZ0KGMpLFprKGMpO2Zvcih2YXIgdT1vO3UuY2lyY2xlJiZNYXRoLmFicyhuLXUuY2lyY2xlLngpPHV3JiZNYXRoLmFicyhyLXUuY2lyY2xlLmN5KTx1dzspbz11Lk4scy5wdXNoKHUpLHR3KHUpLHU9bztzLnB1c2godSksWmsodSk7dmFyIGwsaD1zLmxlbmd0aDtmb3IobD0xO2w8aDsrK2wpdT1zW2xdLGM9c1tsLTFdLFlrKHUuZWRnZSxjLnNpdGUsdS5zaXRlLGkpO2M9c1swXSwodT1zW2gtMV0pLmVkZ2U9UGsoYy5zaXRlLHUuc2l0ZSxudWxsLGkpLFhrKGMpLFhrKHUpfWZ1bmN0aW9uIG53KHQpe2Zvcih2YXIgZSxuLHIsaSxhPXRbMF0sbz10WzFdLHM9YXcuXztzOylpZigocj1ydyhzLG8pLWEpPnV3KXM9cy5MO2Vsc2V7aWYoISgoaT1hLWl3KHMsbykpPnV3KSl7cj4tdXc/KGU9cy5QLG49cyk6aT4tdXc/KGU9cyxuPXMuTik6ZT1uPXM7YnJlYWt9aWYoIXMuUil7ZT1zO2JyZWFrfXM9cy5SfSFmdW5jdGlvbih0KXtvd1t0LmluZGV4XT17c2l0ZTp0LGhhbGZlZGdlczpbXX19KHQpO3ZhciBjPUprKHQpO2lmKGF3Lmluc2VydChlLGMpLGV8fG4pe2lmKGU9PT1uKXJldHVybiBaayhlKSxuPUprKGUuc2l0ZSksYXcuaW5zZXJ0KGMsbiksYy5lZGdlPW4uZWRnZT1QayhlLnNpdGUsYy5zaXRlKSxYayhlKSx2b2lkIFhrKG4pO2lmKG4pe1prKGUpLFprKG4pO3ZhciB1PWUuc2l0ZSxsPXVbMF0saD11WzFdLGY9dFswXS1sLGQ9dFsxXS1oLHA9bi5zaXRlLHk9cFswXS1sLGc9cFsxXS1oLHY9MiooZipnLWQqeSksbT1mKmYrZCpkLGI9eSp5K2cqZyx4PVsoZyptLWQqYikvditsLChmKmIteSptKS92K2hdO1lrKG4uZWRnZSx1LHAseCksYy5lZGdlPVBrKHUsdCxudWxsLHgpLG4uZWRnZT1Qayh0LHAsbnVsbCx4KSxYayhlKSxYayhuKX1lbHNlIGMuZWRnZT1QayhlLnNpdGUsYy5zaXRlKX19ZnVuY3Rpb24gcncodCxlKXt2YXIgbj10LnNpdGUscj1uWzBdLGk9blsxXSxhPWktZTtpZighYSlyZXR1cm4gcjt2YXIgbz10LlA7aWYoIW8pcmV0dXJuLTEvMDt2YXIgcz0obj1vLnNpdGUpWzBdLGM9blsxXSx1PWMtZTtpZighdSlyZXR1cm4gczt2YXIgbD1zLXIsaD0xL2EtMS91LGY9bC91O3JldHVybiBoPygtZitNYXRoLnNxcnQoZipmLTIqaCoobCpsLygtMip1KS1jK3UvMitpLWEvMikpKS9oK3I6KHIrcykvMn1mdW5jdGlvbiBpdyh0LGUpe3ZhciBuPXQuTjtpZihuKXJldHVybiBydyhuLGUpO3ZhciByPXQuc2l0ZTtyZXR1cm4gclsxXT09PWU/clswXToxLzB9dmFyIGF3LG93LHN3LGN3LHV3PTFlLTYsbHc9MWUtMTI7ZnVuY3Rpb24gaHcodCxlKXtyZXR1cm4gZVsxXS10WzFdfHxlWzBdLXRbMF19ZnVuY3Rpb24gZncodCxlKXt2YXIgbixyLGksYT10LnNvcnQoaHcpLnBvcCgpO2Zvcihjdz1bXSxvdz1uZXcgQXJyYXkodC5sZW5ndGgpLGF3PW5ldyBGayxzdz1uZXcgRms7OylpZihpPVZrLGEmJighaXx8YVsxXTxpLnl8fGFbMV09PT1pLnkmJmFbMF08aS54KSlhWzBdPT09biYmYVsxXT09PXJ8fChudyhhKSxuPWFbMF0scj1hWzFdKSxhPXQucG9wKCk7ZWxzZXtpZighaSlicmVhaztldyhpLmFyYyl9aWYoZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxuLHIsaT0wLGE9b3cubGVuZ3RoO2k8YTsrK2kpaWYoKHQ9b3dbaV0pJiYocj0oZT10LmhhbGZlZGdlcykubGVuZ3RoKSl7dmFyIG89bmV3IEFycmF5KHIpLHM9bmV3IEFycmF5KHIpO2ZvcihuPTA7bjxyOysrbilvW25dPW4sc1tuXT0kayh0LGN3W2Vbbl1dKTtmb3Ioby5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBzW2VdLXNbdF19KSksbj0wO248cjsrK24pc1tuXT1lW29bbl1dO2ZvcihuPTA7bjxyOysrbillW25dPXNbbl19fSgpLGUpe3ZhciBvPStlWzBdWzBdLHM9K2VbMF1bMV0sYz0rZVsxXVswXSx1PStlWzFdWzFdOyFmdW5jdGlvbih0LGUsbixyKXtmb3IodmFyIGksYT1jdy5sZW5ndGg7YS0tOylVayhpPWN3W2FdLHQsZSxuLHIpJiZ6ayhpLHQsZSxuLHIpJiYoTWF0aC5hYnMoaVswXVswXS1pWzFdWzBdKT51d3x8TWF0aC5hYnMoaVswXVsxXS1pWzFdWzFdKT51dyl8fGRlbGV0ZSBjd1thXX0obyxzLGMsdSksZnVuY3Rpb24odCxlLG4scil7dmFyIGksYSxvLHMsYyx1LGwsaCxmLGQscCx5LGc9b3cubGVuZ3RoLHY9ITA7Zm9yKGk9MDtpPGc7KytpKWlmKGE9b3dbaV0pe2ZvcihvPWEuc2l0ZSxzPShjPWEuaGFsZmVkZ2VzKS5sZW5ndGg7cy0tOyljd1tjW3NdXXx8Yy5zcGxpY2UocywxKTtmb3Iocz0wLHU9Yy5sZW5ndGg7czx1OylwPShkPVdrKGEsY3dbY1tzXV0pKVswXSx5PWRbMV0saD0obD1xayhhLGN3W2NbKytzJXVdXSkpWzBdLGY9bFsxXSwoTWF0aC5hYnMocC1oKT51d3x8TWF0aC5hYnMoeS1mKT51dykmJihjLnNwbGljZShzLDAsY3cucHVzaChqayhvLGQsTWF0aC5hYnMocC10KTx1dyYmci15PnV3P1t0LE1hdGguYWJzKGgtdCk8dXc/ZjpyXTpNYXRoLmFicyh5LXIpPHV3JiZuLXA+dXc/W01hdGguYWJzKGYtcik8dXc/aDpuLHJdOk1hdGguYWJzKHAtbik8dXcmJnktZT51dz9bbixNYXRoLmFicyhoLW4pPHV3P2Y6ZV06TWF0aC5hYnMoeS1lKTx1dyYmcC10PnV3P1tNYXRoLmFicyhmLWUpPHV3P2g6dCxlXTpudWxsKSktMSksKyt1KTt1JiYodj0hMSl9aWYodil7dmFyIG0sYix4LF89MS8wO2ZvcihpPTAsdj1udWxsO2k8ZzsrK2kpKGE9b3dbaV0pJiYoeD0obT0obz1hLnNpdGUpWzBdLXQpKm0rKGI9b1sxXS1lKSpiKTxfJiYoXz14LHY9YSk7aWYodil7dmFyIGs9W3QsZV0sdz1bdCxyXSxFPVtuLHJdLFQ9W24sZV07di5oYWxmZWRnZXMucHVzaChjdy5wdXNoKGprKG89di5zaXRlLGssdykpLTEsY3cucHVzaChqayhvLHcsRSkpLTEsY3cucHVzaChqayhvLEUsVCkpLTEsY3cucHVzaChqayhvLFQsaykpLTEpfX1mb3IoaT0wO2k8ZzsrK2kpKGE9b3dbaV0pJiYoYS5oYWxmZWRnZXMubGVuZ3RofHxkZWxldGUgb3dbaV0pfShvLHMsYyx1KX10aGlzLmVkZ2VzPWN3LHRoaXMuY2VsbHM9b3csYXc9c3c9Y3c9b3c9bnVsbH1mdy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmZ3LHBvbHlnb25zOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lZGdlcztyZXR1cm4gdGhpcy5jZWxscy5tYXAoKGZ1bmN0aW9uKGUpe3ZhciBuPWUuaGFsZmVkZ2VzLm1hcCgoZnVuY3Rpb24obil7cmV0dXJuIHFrKGUsdFtuXSl9KSk7cmV0dXJuIG4uZGF0YT1lLnNpdGUuZGF0YSxufSkpfSx0cmlhbmdsZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXSxlPXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMuZm9yRWFjaCgoZnVuY3Rpb24obixyKXtpZihhPShpPW4uaGFsZmVkZ2VzKS5sZW5ndGgpZm9yKHZhciBpLGEsbyxzLGMsdSxsPW4uc2l0ZSxoPS0xLGY9ZVtpW2EtMV1dLGQ9Zi5sZWZ0PT09bD9mLnJpZ2h0OmYubGVmdDsrK2g8YTspbz1kLGQ9KGY9ZVtpW2hdXSkubGVmdD09PWw/Zi5yaWdodDpmLmxlZnQsbyYmZCYmcjxvLmluZGV4JiZyPGQuaW5kZXgmJihjPW8sdT1kLCgocz1sKVswXS11WzBdKSooY1sxXS1zWzFdKS0oc1swXS1jWzBdKSoodVsxXS1zWzFdKTwwKSYmdC5wdXNoKFtsLmRhdGEsby5kYXRhLGQuZGF0YV0pfSkpLHR9LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5yaWdodH0pKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybntzb3VyY2U6dC5sZWZ0LmRhdGEsdGFyZ2V0OnQucmlnaHQuZGF0YX19KSl9LGZpbmQ6ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcixpLGE9dGhpcyxvPWEuX2ZvdW5kfHwwLHM9YS5jZWxscy5sZW5ndGg7IShpPWEuY2VsbHNbb10pOylpZigrK28+PXMpcmV0dXJuIG51bGw7dmFyIGM9dC1pLnNpdGVbMF0sdT1lLWkuc2l0ZVsxXSxsPWMqYyt1KnU7ZG97aT1hLmNlbGxzW3I9b10sbz1udWxsLGkuaGFsZmVkZ2VzLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciByPWEuZWRnZXNbbl0scz1yLmxlZnQ7aWYocyE9PWkuc2l0ZSYmc3x8KHM9ci5yaWdodCkpe3ZhciBjPXQtc1swXSx1PWUtc1sxXSxoPWMqYyt1KnU7aDxsJiYobD1oLG89cy5pbmRleCl9fSkpfXdoaWxlKG51bGwhPT1vKTtyZXR1cm4gYS5fZm91bmQ9cixudWxsPT1ufHxsPD1uKm4/aS5zaXRlOm51bGx9fTt2YXIgZHc9ZnVuY3Rpb24oKXt2YXIgdD1PayxlPUJrLG49bnVsbDtmdW5jdGlvbiByKHIpe3JldHVybiBuZXcgZncoci5tYXAoKGZ1bmN0aW9uKG4saSl7dmFyIGE9W01hdGgucm91bmQodChuLGkscikvdXcpKnV3LE1hdGgucm91bmQoZShuLGkscikvdXcpKnV3XTtyZXR1cm4gYS5pbmRleD1pLGEuZGF0YT1uLGF9KSksbil9cmV0dXJuIHIucG9seWdvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCkucG9seWdvbnMoKX0sci5saW5rcz1mdW5jdGlvbih0KXtyZXR1cm4gcih0KS5saW5rcygpfSxyLnRyaWFuZ2xlcz1mdW5jdGlvbih0KXtyZXR1cm4gcih0KS50cmlhbmdsZXMoKX0sci54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6TWsoK2UpLHIpOnR9LHIueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok1rKCt0KSxyKTplfSxyLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P251bGw6W1srdFswXVswXSwrdFswXVsxXV0sWyt0WzFdWzBdLCt0WzFdWzFdXV0scik6biYmW1tuWzBdWzBdLG5bMF1bMV1dLFtuWzFdWzBdLG5bMV1bMV1dXX0sci5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/bnVsbDpbWzAsMF0sWyt0WzBdLCt0WzFdXV0scik6biYmW25bMV1bMF0tblswXVswXSxuWzFdWzFdLW5bMF1bMV1dfSxyfSxwdz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19O2Z1bmN0aW9uIHl3KHQsZSxuKXt0aGlzLnRhcmdldD10LHRoaXMudHlwZT1lLHRoaXMudHJhbnNmb3JtPW59ZnVuY3Rpb24gZ3codCxlLG4pe3RoaXMuaz10LHRoaXMueD1lLHRoaXMueT1ufWd3LnByb3RvdHlwZT17Y29uc3RydWN0b3I6Z3csc2NhbGU6ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10P3RoaXM6bmV3IGd3KHRoaXMuayp0LHRoaXMueCx0aGlzLnkpfSx0cmFuc2xhdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gMD09PXQmMD09PWU/dGhpczpuZXcgZ3codGhpcy5rLHRoaXMueCt0aGlzLmsqdCx0aGlzLnkrdGhpcy5rKmUpfSxhcHBseTpmdW5jdGlvbih0KXtyZXR1cm5bdFswXSp0aGlzLmsrdGhpcy54LHRbMV0qdGhpcy5rK3RoaXMueV19LGFwcGx5WDpmdW5jdGlvbih0KXtyZXR1cm4gdCp0aGlzLmsrdGhpcy54fSxhcHBseVk6ZnVuY3Rpb24odCl7cmV0dXJuIHQqdGhpcy5rK3RoaXMueX0saW52ZXJ0OmZ1bmN0aW9uKHQpe3JldHVyblsodFswXS10aGlzLngpL3RoaXMuaywodFsxXS10aGlzLnkpL3RoaXMua119LGludmVydFg6ZnVuY3Rpb24odCl7cmV0dXJuKHQtdGhpcy54KS90aGlzLmt9LGludmVydFk6ZnVuY3Rpb24odCl7cmV0dXJuKHQtdGhpcy55KS90aGlzLmt9LHJlc2NhbGVYOmZ1bmN0aW9uKHQpe3JldHVybiB0LmNvcHkoKS5kb21haW4odC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFgsdGhpcykubWFwKHQuaW52ZXJ0LHQpKX0scmVzY2FsZVk6ZnVuY3Rpb24odCl7cmV0dXJuIHQuY29weSgpLmRvbWFpbih0LnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WSx0aGlzKS5tYXAodC5pbnZlcnQsdCkpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJ0cmFuc2xhdGUoIit0aGlzLngrIiwiK3RoaXMueSsiKSBzY2FsZSgiK3RoaXMuaysiKSJ9fTt2YXIgdnc9bmV3IGd3KDEsMCwwKTtmdW5jdGlvbiBtdyh0KXtmb3IoOyF0Ll9fem9vbTspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuIHZ3O3JldHVybiB0Ll9fem9vbX1mdW5jdGlvbiBidygpe2NlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfW13LnByb3RvdHlwZT1ndy5wcm90b3R5cGU7dmFyIHh3PWZ1bmN0aW9uKCl7Y2UucHJldmVudERlZmF1bHQoKSxjZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX07ZnVuY3Rpb24gX3coKXtyZXR1cm4hY2UuY3RybEtleSYmIWNlLmJ1dHRvbn1mdW5jdGlvbiBrdygpe3ZhciB0PXRoaXM7cmV0dXJuIHQgaW5zdGFuY2VvZiBTVkdFbGVtZW50Pyh0PXQub3duZXJTVkdFbGVtZW50fHx0KS5oYXNBdHRyaWJ1dGUoInZpZXdCb3giKT9bWyh0PXQudmlld0JveC5iYXNlVmFsKS54LHQueV0sW3QueCt0LndpZHRoLHQueSt0LmhlaWdodF1dOltbMCwwXSxbdC53aWR0aC5iYXNlVmFsLnZhbHVlLHQuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXTpbWzAsMF0sW3QuY2xpZW50V2lkdGgsdC5jbGllbnRIZWlnaHRdXX1mdW5jdGlvbiB3dygpe3JldHVybiB0aGlzLl9fem9vbXx8dnd9ZnVuY3Rpb24gRXcoKXtyZXR1cm4tY2UuZGVsdGFZKigxPT09Y2UuZGVsdGFNb2RlPy4wNTpjZS5kZWx0YU1vZGU/MTouMDAyKX1mdW5jdGlvbiBUdygpe3JldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHN8fCJvbnRvdWNoc3RhcnQiaW4gdGhpc31mdW5jdGlvbiBDdyh0LGUsbil7dmFyIHI9dC5pbnZlcnRYKGVbMF1bMF0pLW5bMF1bMF0saT10LmludmVydFgoZVsxXVswXSktblsxXVswXSxhPXQuaW52ZXJ0WShlWzBdWzFdKS1uWzBdWzFdLG89dC5pbnZlcnRZKGVbMV1bMV0pLW5bMV1bMV07cmV0dXJuIHQudHJhbnNsYXRlKGk+cj8ocitpKS8yOk1hdGgubWluKDAscil8fE1hdGgubWF4KDAsaSksbz5hPyhhK28pLzI6TWF0aC5taW4oMCxhKXx8TWF0aC5tYXgoMCxvKSl9dmFyIFN3PWZ1bmN0aW9uKCl7dmFyIHQsZSxuPV93LHI9a3csaT1DdyxhPUV3LG89VHcscz1bMCwxLzBdLGM9W1stMS8wLC0xLzBdLFsxLzAsMS8wXV0sdT0yNTAsbD1mcCxoPWx0KCJzdGFydCIsInpvb20iLCJlbmQiKSxmPTA7ZnVuY3Rpb24gZCh0KXt0LnByb3BlcnR5KCJfX3pvb20iLHd3KS5vbigid2hlZWwuem9vbSIseCkub24oIm1vdXNlZG93bi56b29tIixfKS5vbigiZGJsY2xpY2suem9vbSIsaykuZmlsdGVyKG8pLm9uKCJ0b3VjaHN0YXJ0Lnpvb20iLHcpLm9uKCJ0b3VjaG1vdmUuem9vbSIsRSkub24oInRvdWNoZW5kLnpvb20gdG91Y2hjYW5jZWwuem9vbSIsVCkuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4oZT1NYXRoLm1heChzWzBdLE1hdGgubWluKHNbMV0sZSkpKT09PXQuaz90Om5ldyBndyhlLHQueCx0LnkpfWZ1bmN0aW9uIHkodCxlLG4pe3ZhciByPWVbMF0tblswXSp0LmssaT1lWzFdLW5bMV0qdC5rO3JldHVybiByPT09dC54JiZpPT09dC55P3Q6bmV3IGd3KHQuayxyLGkpfWZ1bmN0aW9uIGcodCl7cmV0dXJuWygrdFswXVswXSsgK3RbMV1bMF0pLzIsKCt0WzBdWzFdKyArdFsxXVsxXSkvMl19ZnVuY3Rpb24gdih0LGUsbil7dC5vbigic3RhcnQuem9vbSIsKGZ1bmN0aW9uKCl7bSh0aGlzLGFyZ3VtZW50cykuc3RhcnQoKX0pKS5vbigiaW50ZXJydXB0Lnpvb20gZW5kLnpvb20iLChmdW5jdGlvbigpe20odGhpcyxhcmd1bWVudHMpLmVuZCgpfSkpLnR3ZWVuKCJ6b29tIiwoZnVuY3Rpb24oKXt2YXIgdD10aGlzLGk9YXJndW1lbnRzLGE9bSh0LGkpLG89ci5hcHBseSh0LGkpLHM9bnVsbD09bj9nKG8pOiJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodCxpKTpuLGM9TWF0aC5tYXgob1sxXVswXS1vWzBdWzBdLG9bMV1bMV0tb1swXVsxXSksdT10Ll9fem9vbSxoPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodCxpKTplLGY9bCh1LmludmVydChzKS5jb25jYXQoYy91LmspLGguaW52ZXJ0KHMpLmNvbmNhdChjL2guaykpO3JldHVybiBmdW5jdGlvbih0KXtpZigxPT09dCl0PWg7ZWxzZXt2YXIgZT1mKHQpLG49Yy9lWzJdO3Q9bmV3IGd3KG4sc1swXS1lWzBdKm4sc1sxXS1lWzFdKm4pfWEuem9vbShudWxsLHQpfX0pKX1mdW5jdGlvbiBtKHQsZSxuKXtyZXR1cm4hbiYmdC5fX3pvb21pbmd8fG5ldyBiKHQsZSl9ZnVuY3Rpb24gYih0LGUpe3RoaXMudGhhdD10LHRoaXMuYXJncz1lLHRoaXMuYWN0aXZlPTAsdGhpcy5leHRlbnQ9ci5hcHBseSh0LGUpLHRoaXMudGFwcz0wfWZ1bmN0aW9uIHgoKXtpZihuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIHQ9bSh0aGlzLGFyZ3VtZW50cyksZT10aGlzLl9fem9vbSxyPU1hdGgubWF4KHNbMF0sTWF0aC5taW4oc1sxXSxlLmsqTWF0aC5wb3coMixhLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkpKSxvPU5uKHRoaXMpO2lmKHQud2hlZWwpdC5tb3VzZVswXVswXT09PW9bMF0mJnQubW91c2VbMF1bMV09PT1vWzFdfHwodC5tb3VzZVsxXT1lLmludmVydCh0Lm1vdXNlWzBdPW8pKSxjbGVhclRpbWVvdXQodC53aGVlbCk7ZWxzZXtpZihlLms9PT1yKXJldHVybjt0Lm1vdXNlPVtvLGUuaW52ZXJ0KG8pXSxvcih0aGlzKSx0LnN0YXJ0KCl9eHcoKSx0LndoZWVsPXNldFRpbWVvdXQodSwxNTApLHQuem9vbSgibW91c2UiLGkoeShwKGUsciksdC5tb3VzZVswXSx0Lm1vdXNlWzFdKSx0LmV4dGVudCxjKSl9ZnVuY3Rpb24gdSgpe3Qud2hlZWw9bnVsbCx0LmVuZCgpfX1mdW5jdGlvbiBfKCl7aWYoIWUmJm4uYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdD1tKHRoaXMsYXJndW1lbnRzLCEwKSxyPWtlKGNlLnZpZXcpLm9uKCJtb3VzZW1vdmUuem9vbSIsdSwhMCkub24oIm1vdXNldXAuem9vbSIsbCwhMCksYT1Obih0aGlzKSxvPWNlLmNsaWVudFgscz1jZS5jbGllbnRZO1RlKGNlLnZpZXcpLGJ3KCksdC5tb3VzZT1bYSx0aGlzLl9fem9vbS5pbnZlcnQoYSldLG9yKHRoaXMpLHQuc3RhcnQoKX1mdW5jdGlvbiB1KCl7aWYoeHcoKSwhdC5tb3ZlZCl7dmFyIGU9Y2UuY2xpZW50WC1vLG49Y2UuY2xpZW50WS1zO3QubW92ZWQ9ZSplK24qbj5mfXQuem9vbSgibW91c2UiLGkoeSh0LnRoYXQuX196b29tLHQubW91c2VbMF09Tm4odC50aGF0KSx0Lm1vdXNlWzFdKSx0LmV4dGVudCxjKSl9ZnVuY3Rpb24gbCgpe3Iub24oIm1vdXNlbW92ZS56b29tIG1vdXNldXAuem9vbSIsbnVsbCksQ2UoY2Uudmlldyx0Lm1vdmVkKSx4dygpLHQuZW5kKCl9fWZ1bmN0aW9uIGsoKXtpZihuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIHQ9dGhpcy5fX3pvb20sZT1Obih0aGlzKSxhPXQuaW52ZXJ0KGUpLG89dC5rKihjZS5zaGlmdEtleT8uNToyKSxzPWkoeShwKHQsbyksZSxhKSxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxjKTt4dygpLHU+MD9rZSh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24odSkuY2FsbCh2LHMsZSk6a2UodGhpcykuY2FsbChkLnRyYW5zZm9ybSxzKX19ZnVuY3Rpb24gdygpe2lmKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgZSxyLGksYSxvPWNlLnRvdWNoZXMscz1vLmxlbmd0aCxjPW0odGhpcyxhcmd1bWVudHMsY2UuY2hhbmdlZFRvdWNoZXMubGVuZ3RoPT09cyk7Zm9yKGJ3KCkscj0wO3I8czsrK3IpaT1vW3JdLGE9W2E9Qm4odGhpcyxvLGkuaWRlbnRpZmllciksdGhpcy5fX3pvb20uaW52ZXJ0KGEpLGkuaWRlbnRpZmllcl0sYy50b3VjaDA/Yy50b3VjaDF8fGMudG91Y2gwWzJdPT09YVsyXXx8KGMudG91Y2gxPWEsYy50YXBzPTApOihjLnRvdWNoMD1hLGU9ITAsYy50YXBzPTErISF0KTt0JiYodD1jbGVhclRpbWVvdXQodCkpLGUmJihjLnRhcHM8MiYmKHQ9c2V0VGltZW91dCgoZnVuY3Rpb24oKXt0PW51bGx9KSw1MDApKSxvcih0aGlzKSxjLnN0YXJ0KCkpfX1mdW5jdGlvbiBFKCl7aWYodGhpcy5fX3pvb21pbmcpe3ZhciBlLG4scixhLG89bSh0aGlzLGFyZ3VtZW50cykscz1jZS5jaGFuZ2VkVG91Y2hlcyx1PXMubGVuZ3RoO2Zvcih4dygpLHQmJih0PWNsZWFyVGltZW91dCh0KSksby50YXBzPTAsZT0wO2U8dTsrK2Upbj1zW2VdLHI9Qm4odGhpcyxzLG4uaWRlbnRpZmllciksby50b3VjaDAmJm8udG91Y2gwWzJdPT09bi5pZGVudGlmaWVyP28udG91Y2gwWzBdPXI6by50b3VjaDEmJm8udG91Y2gxWzJdPT09bi5pZGVudGlmaWVyJiYoby50b3VjaDFbMF09cik7aWYobj1vLnRoYXQuX196b29tLG8udG91Y2gxKXt2YXIgbD1vLnRvdWNoMFswXSxoPW8udG91Y2gwWzFdLGY9by50b3VjaDFbMF0sZD1vLnRvdWNoMVsxXSxnPShnPWZbMF0tbFswXSkqZysoZz1mWzFdLWxbMV0pKmcsdj0odj1kWzBdLWhbMF0pKnYrKHY9ZFsxXS1oWzFdKSp2O249cChuLE1hdGguc3FydChnL3YpKSxyPVsobFswXStmWzBdKS8yLChsWzFdK2ZbMV0pLzJdLGE9WyhoWzBdK2RbMF0pLzIsKGhbMV0rZFsxXSkvMl19ZWxzZXtpZighby50b3VjaDApcmV0dXJuO3I9by50b3VjaDBbMF0sYT1vLnRvdWNoMFsxXX1vLnpvb20oInRvdWNoIixpKHkobixyLGEpLG8uZXh0ZW50LGMpKX19ZnVuY3Rpb24gVCgpe2lmKHRoaXMuX196b29taW5nKXt2YXIgdCxuLHI9bSh0aGlzLGFyZ3VtZW50cyksaT1jZS5jaGFuZ2VkVG91Y2hlcyxhPWkubGVuZ3RoO2ZvcihidygpLGUmJmNsZWFyVGltZW91dChlKSxlPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZT1udWxsfSksNTAwKSx0PTA7dDxhOysrdCluPWlbdF0sci50b3VjaDAmJnIudG91Y2gwWzJdPT09bi5pZGVudGlmaWVyP2RlbGV0ZSByLnRvdWNoMDpyLnRvdWNoMSYmci50b3VjaDFbMl09PT1uLmlkZW50aWZpZXImJmRlbGV0ZSByLnRvdWNoMTtpZihyLnRvdWNoMSYmIXIudG91Y2gwJiYoci50b3VjaDA9ci50b3VjaDEsZGVsZXRlIHIudG91Y2gxKSxyLnRvdWNoMClyLnRvdWNoMFsxXT10aGlzLl9fem9vbS5pbnZlcnQoci50b3VjaDBbMF0pO2Vsc2UgaWYoci5lbmQoKSwyPT09ci50YXBzKXt2YXIgbz1rZSh0aGlzKS5vbigiZGJsY2xpY2suem9vbSIpO28mJm8uYXBwbHkodGhpcyxhcmd1bWVudHMpfX19cmV0dXJuIGQudHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LnNlbGVjdGlvbj90LnNlbGVjdGlvbigpOnQ7ci5wcm9wZXJ0eSgiX196b29tIix3dyksdCE9PXI/dih0LGUsbik6ci5pbnRlcnJ1cHQoKS5lYWNoKChmdW5jdGlvbigpe20odGhpcyxhcmd1bWVudHMpLnN0YXJ0KCkuem9vbShudWxsLCJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmUpLmVuZCgpfSkpfSxkLnNjYWxlQnk9ZnVuY3Rpb24odCxlLG4pe2Quc2NhbGVUbyh0LChmdW5jdGlvbigpe3ZhciB0PXRoaXMuX196b29tLmssbj0iZnVuY3Rpb24iPT10eXBlb2YgZT9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplO3JldHVybiB0Km59KSxuKX0sZC5zY2FsZVRvPWZ1bmN0aW9uKHQsZSxuKXtkLnRyYW5zZm9ybSh0LChmdW5jdGlvbigpe3ZhciB0PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGE9dGhpcy5fX3pvb20sbz1udWxsPT1uP2codCk6ImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6bixzPWEuaW52ZXJ0KG8pLHU9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZTtyZXR1cm4gaSh5KHAoYSx1KSxvLHMpLHQsYyl9KSxuKX0sZC50cmFuc2xhdGVCeT1mdW5jdGlvbih0LGUsbil7ZC50cmFuc2Zvcm0odCwoZnVuY3Rpb24oKXtyZXR1cm4gaSh0aGlzLl9fem9vbS50cmFuc2xhdGUoImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZSwiZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpuKSxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxjKX0pKX0sZC50cmFuc2xhdGVUbz1mdW5jdGlvbih0LGUsbixhKXtkLnRyYW5zZm9ybSh0LChmdW5jdGlvbigpe3ZhciB0PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLG89dGhpcy5fX3pvb20scz1udWxsPT1hP2codCk6ImZ1bmN0aW9uIj09dHlwZW9mIGE/YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6YTtyZXR1cm4gaSh2dy50cmFuc2xhdGUoc1swXSxzWzFdKS5zY2FsZShvLmspLnRyYW5zbGF0ZSgiZnVuY3Rpb24iPT10eXBlb2YgZT8tZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LWUsImZ1bmN0aW9uIj09dHlwZW9mIG4/LW4uYXBwbHkodGhpcyxhcmd1bWVudHMpOi1uKSx0LGMpfSksYSl9LGIucHJvdG90eXBlPXtzdGFydDpmdW5jdGlvbigpe3JldHVybiAxPT0rK3RoaXMuYWN0aXZlJiYodGhpcy50aGF0Ll9fem9vbWluZz10aGlzLHRoaXMuZW1pdCgic3RhcnQiKSksdGhpc30sem9vbTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLm1vdXNlJiYibW91c2UiIT09dCYmKHRoaXMubW91c2VbMV09ZS5pbnZlcnQodGhpcy5tb3VzZVswXSkpLHRoaXMudG91Y2gwJiYidG91Y2giIT09dCYmKHRoaXMudG91Y2gwWzFdPWUuaW52ZXJ0KHRoaXMudG91Y2gwWzBdKSksdGhpcy50b3VjaDEmJiJ0b3VjaCIhPT10JiYodGhpcy50b3VjaDFbMV09ZS5pbnZlcnQodGhpcy50b3VjaDFbMF0pKSx0aGlzLnRoYXQuX196b29tPWUsdGhpcy5lbWl0KCJ6b29tIiksdGhpc30sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PS0tdGhpcy5hY3RpdmUmJihkZWxldGUgdGhpcy50aGF0Ll9fem9vbWluZyx0aGlzLmVtaXQoImVuZCIpKSx0aGlzfSxlbWl0OmZ1bmN0aW9uKHQpe3BlKG5ldyB5dyhkLHQsdGhpcy50aGF0Ll9fem9vbSksaC5hcHBseSxoLFt0LHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19LGQud2hlZWxEZWx0YT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnB3KCt0KSxkKTphfSxkLmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnB3KCEhdCksZCk6bn0sZC50b3VjaGFibGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpwdyghIXQpLGQpOm99LGQuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cHcoW1srdFswXVswXSwrdFswXVsxXV0sWyt0WzFdWzBdLCt0WzFdWzFdXV0pLGQpOnJ9LGQuc2NhbGVFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHNbMF09K3RbMF0sc1sxXT0rdFsxXSxkKTpbc1swXSxzWzFdXX0sZC50cmFuc2xhdGVFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGNbMF1bMF09K3RbMF1bMF0sY1sxXVswXT0rdFsxXVswXSxjWzBdWzFdPSt0WzBdWzFdLGNbMV1bMV09K3RbMV1bMV0sZCk6W1tjWzBdWzBdLGNbMF1bMV1dLFtjWzFdWzBdLGNbMV1bMV1dXX0sZC5jb25zdHJhaW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxkKTppfSxkLmR1cmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSt0LGQpOnV9LGQuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCxkKTpsfSxkLm9uPWZ1bmN0aW9uKCl7dmFyIHQ9aC5vbi5hcHBseShoLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1oP2Q6dH0sZC5jbGlja0Rpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSh0PSt0KSp0LGQpOk1hdGguc3FydChmKX0sZH07bi5kKGUsInZlcnNpb24iLChmdW5jdGlvbigpe3JldHVybiI1LjE1LjAifSkpLG4uZChlLCJiaXNlY3QiLChmdW5jdGlvbigpe3JldHVybiBjfSkpLG4uZChlLCJiaXNlY3RSaWdodCIsKGZ1bmN0aW9uKCl7cmV0dXJuIG99KSksbi5kKGUsImJpc2VjdExlZnQiLChmdW5jdGlvbigpe3JldHVybiBzfSkpLG4uZChlLCJhc2NlbmRpbmciLChmdW5jdGlvbigpe3JldHVybiByfSkpLG4uZChlLCJiaXNlY3RvciIsKGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSksbi5kKGUsImNyb3NzIiwoZnVuY3Rpb24oKXtyZXR1cm4gaH0pKSxuLmQoZSwiZGVzY2VuZGluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KSksbi5kKGUsImRldmlhdGlvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHl9KSksbi5kKGUsImV4dGVudCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGd9KSksbi5kKGUsImhpc3RvZ3JhbSIsKGZ1bmN0aW9uKCl7cmV0dXJuIE99KSksbi5kKGUsInRocmVzaG9sZEZyZWVkbWFuRGlhY29uaXMiLChmdW5jdGlvbigpe3JldHVybiBOfSkpLG4uZChlLCJ0aHJlc2hvbGRTY290dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIER9KSksbi5kKGUsInRocmVzaG9sZFN0dXJnZXMiLChmdW5jdGlvbigpe3JldHVybiBNfSkpLG4uZChlLCJtYXgiLChmdW5jdGlvbigpe3JldHVybiBMfSkpLG4uZChlLCJtZWFuIiwoZnVuY3Rpb24oKXtyZXR1cm4gSX0pKSxuLmQoZSwibWVkaWFuIiwoZnVuY3Rpb24oKXtyZXR1cm4gUn0pKSxuLmQoZSwibWVyZ2UiLChmdW5jdGlvbigpe3JldHVybiBGfSkpLG4uZChlLCJtaW4iLChmdW5jdGlvbigpe3JldHVybiBQfSkpLG4uZChlLCJwYWlycyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSksbi5kKGUsInBlcm11dGUiLChmdW5jdGlvbigpe3JldHVybiBqfSkpLG4uZChlLCJxdWFudGlsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIEJ9KSksbi5kKGUsInJhbmdlIiwoZnVuY3Rpb24oKXtyZXR1cm4ga30pKSxuLmQoZSwic2NhbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIFl9KSksbi5kKGUsInNodWZmbGUiLChmdW5jdGlvbigpe3JldHVybiB6fSkpLG4uZChlLCJzdW0iLChmdW5jdGlvbigpe3JldHVybiBVfSkpLG4uZChlLCJ0aWNrcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEN9KSksbi5kKGUsInRpY2tJbmNyZW1lbnQiLChmdW5jdGlvbigpe3JldHVybiBTfSkpLG4uZChlLCJ0aWNrU3RlcCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEF9KSksbi5kKGUsInRyYW5zcG9zZSIsKGZ1bmN0aW9uKCl7cmV0dXJuICR9KSksbi5kKGUsInZhcmlhbmNlIiwoZnVuY3Rpb24oKXtyZXR1cm4gcH0pKSxuLmQoZSwiemlwIiwoZnVuY3Rpb24oKXtyZXR1cm4gV30pKSxuLmQoZSwiYXhpc1RvcCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHR0fSkpLG4uZChlLCJheGlzUmlnaHQiLChmdW5jdGlvbigpe3JldHVybiBldH0pKSxuLmQoZSwiYXhpc0JvdHRvbSIsKGZ1bmN0aW9uKCl7cmV0dXJuIG50fSkpLG4uZChlLCJheGlzTGVmdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJ0fSkpLG4uZChlLCJicnVzaCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFRpfSkpLG4uZChlLCJicnVzaFgiLChmdW5jdGlvbigpe3JldHVybiB3aX0pKSxuLmQoZSwiYnJ1c2hZIiwoZnVuY3Rpb24oKXtyZXR1cm4gRWl9KSksbi5kKGUsImJydXNoU2VsZWN0aW9uIiwoZnVuY3Rpb24oKXtyZXR1cm4ga2l9KSksbi5kKGUsImNob3JkIiwoZnVuY3Rpb24oKXtyZXR1cm4gTGl9KSksbi5kKGUsInJpYmJvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIEdpfSkpLG4uZChlLCJuZXN0IiwoZnVuY3Rpb24oKXtyZXR1cm4gS2l9KSksbi5kKGUsInNldCIsKGZ1bmN0aW9uKCl7cmV0dXJuIG9hfSkpLG4uZChlLCJtYXAiLChmdW5jdGlvbigpe3JldHVybiBRaX0pKSxuLmQoZSwia2V5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHNhfSkpLG4uZChlLCJ2YWx1ZXMiLChmdW5jdGlvbigpe3JldHVybiBjYX0pKSxuLmQoZSwiZW50cmllcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHVhfSkpLG4uZChlLCJjb2xvciIsKGZ1bmN0aW9uKCl7cmV0dXJuICRlfSkpLG4uZChlLCJyZ2IiLChmdW5jdGlvbigpe3JldHVybiBIZX0pKSxuLmQoZSwiaHNsIiwoZnVuY3Rpb24oKXtyZXR1cm4gdG59KSksbi5kKGUsImxhYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHBhfSkpLG4uZChlLCJoY2wiLChmdW5jdGlvbigpe3JldHVybiBrYX0pKSxuLmQoZSwibGNoIiwoZnVuY3Rpb24oKXtyZXR1cm4gX2F9KSksbi5kKGUsImdyYXkiLChmdW5jdGlvbigpe3JldHVybiBkYX0pKSxuLmQoZSwiY3ViZWhlbGl4IiwoZnVuY3Rpb24oKXtyZXR1cm4gT2F9KSksbi5kKGUsImNvbnRvdXJzIiwoZnVuY3Rpb24oKXtyZXR1cm4gWWF9KSksbi5kKGUsImNvbnRvdXJEZW5zaXR5IiwoZnVuY3Rpb24oKXtyZXR1cm4gVmF9KSksbi5kKGUsImRpc3BhdGNoIiwoZnVuY3Rpb24oKXtyZXR1cm4gbHR9KSksbi5kKGUsImRyYWciLChmdW5jdGlvbigpe3JldHVybiBKYX0pKSxuLmQoZSwiZHJhZ0Rpc2FibGUiLChmdW5jdGlvbigpe3JldHVybiBUZX0pKSxuLmQoZSwiZHJhZ0VuYWJsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIENlfSkpLG4uZChlLCJkc3ZGb3JtYXQiLChmdW5jdGlvbigpe3JldHVybiBvb30pKSxuLmQoZSwiY3N2UGFyc2UiLChmdW5jdGlvbigpe3JldHVybiBjb30pKSxuLmQoZSwiY3N2UGFyc2VSb3dzIiwoZnVuY3Rpb24oKXtyZXR1cm4gdW99KSksbi5kKGUsImNzdkZvcm1hdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGxvfSkpLG4uZChlLCJjc3ZGb3JtYXRCb2R5IiwoZnVuY3Rpb24oKXtyZXR1cm4gaG99KSksbi5kKGUsImNzdkZvcm1hdFJvd3MiLChmdW5jdGlvbigpe3JldHVybiBmb30pKSxuLmQoZSwiY3N2Rm9ybWF0Um93IiwoZnVuY3Rpb24oKXtyZXR1cm4gcG99KSksbi5kKGUsImNzdkZvcm1hdFZhbHVlIiwoZnVuY3Rpb24oKXtyZXR1cm4geW99KSksbi5kKGUsInRzdlBhcnNlIiwoZnVuY3Rpb24oKXtyZXR1cm4gdm99KSksbi5kKGUsInRzdlBhcnNlUm93cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIG1vfSkpLG4uZChlLCJ0c3ZGb3JtYXQiLChmdW5jdGlvbigpe3JldHVybiBib30pKSxuLmQoZSwidHN2Rm9ybWF0Qm9keSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHhvfSkpLG4uZChlLCJ0c3ZGb3JtYXRSb3dzIiwoZnVuY3Rpb24oKXtyZXR1cm4gX299KSksbi5kKGUsInRzdkZvcm1hdFJvdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGtvfSkpLG4uZChlLCJ0c3ZGb3JtYXRWYWx1ZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHdvfSkpLG4uZChlLCJhdXRvVHlwZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIEVvfSkpLG4uZChlLCJlYXNlTGluZWFyIiwoZnVuY3Rpb24oKXtyZXR1cm4gQ299KSksbi5kKGUsImVhc2VRdWFkIiwoZnVuY3Rpb24oKXtyZXR1cm4gTW99KSksbi5kKGUsImVhc2VRdWFkSW4iLChmdW5jdGlvbigpe3JldHVybiBTb30pKSxuLmQoZSwiZWFzZVF1YWRPdXQiLChmdW5jdGlvbigpe3JldHVybiBBb30pKSxuLmQoZSwiZWFzZVF1YWRJbk91dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIE1vfSkpLG4uZChlLCJlYXNlQ3ViaWMiLChmdW5jdGlvbigpe3JldHVybiBWcn0pKSxuLmQoZSwiZWFzZUN1YmljSW4iLChmdW5jdGlvbigpe3JldHVybiBxcn0pKSxuLmQoZSwiZWFzZUN1YmljT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gV3J9KSksbi5kKGUsImVhc2VDdWJpY0luT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gVnJ9KSksbi5kKGUsImVhc2VQb2x5IiwoZnVuY3Rpb24oKXtyZXR1cm4gTm99KSksbi5kKGUsImVhc2VQb2x5SW4iLChmdW5jdGlvbigpe3JldHVybiBPb30pKSxuLmQoZSwiZWFzZVBvbHlPdXQiLChmdW5jdGlvbigpe3JldHVybiBCb30pKSxuLmQoZSwiZWFzZVBvbHlJbk91dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIE5vfSkpLG4uZChlLCJlYXNlU2luIiwoZnVuY3Rpb24oKXtyZXR1cm4gRm99KSksbi5kKGUsImVhc2VTaW5JbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIElvfSkpLG4uZChlLCJlYXNlU2luT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gUm99KSksbi5kKGUsImVhc2VTaW5Jbk91dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEZvfSkpLG4uZChlLCJlYXNlRXhwIiwoZnVuY3Rpb24oKXtyZXR1cm4gWW99KSksbi5kKGUsImVhc2VFeHBJbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIFBvfSkpLG4uZChlLCJlYXNlRXhwT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gam99KSksbi5kKGUsImVhc2VFeHBJbk91dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFlvfSkpLG4uZChlLCJlYXNlQ2lyY2xlIiwoZnVuY3Rpb24oKXtyZXR1cm4gJG99KSksbi5kKGUsImVhc2VDaXJjbGVJbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHpvfSkpLG4uZChlLCJlYXNlQ2lyY2xlT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gVW99KSksbi5kKGUsImVhc2VDaXJjbGVJbk91dCIsKGZ1bmN0aW9uKCl7cmV0dXJuICRvfSkpLG4uZChlLCJlYXNlQm91bmNlIiwoZnVuY3Rpb24oKXtyZXR1cm4gV299KSksbi5kKGUsImVhc2VCb3VuY2VJbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHFvfSkpLG4uZChlLCJlYXNlQm91bmNlT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gV299KSksbi5kKGUsImVhc2VCb3VuY2VJbk91dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFZvfSkpLG4uZChlLCJlYXNlQmFjayIsKGZ1bmN0aW9uKCl7cmV0dXJuIFhvfSkpLG4uZChlLCJlYXNlQmFja0luIiwoZnVuY3Rpb24oKXtyZXR1cm4gSG99KSksbi5kKGUsImVhc2VCYWNrT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gR299KSksbi5kKGUsImVhc2VCYWNrSW5PdXQiLChmdW5jdGlvbigpe3JldHVybiBYb30pKSxuLmQoZSwiZWFzZUVsYXN0aWMiLChmdW5jdGlvbigpe3JldHVybiBLb30pKSxuLmQoZSwiZWFzZUVsYXN0aWNJbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIFFvfSkpLG4uZChlLCJlYXNlRWxhc3RpY091dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEtvfSkpLG4uZChlLCJlYXNlRWxhc3RpY0luT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gSm99KSksbi5kKGUsImJsb2IiLChmdW5jdGlvbigpe3JldHVybiBlc30pKSxuLmQoZSwiYnVmZmVyIiwoZnVuY3Rpb24oKXtyZXR1cm4gcnN9KSksbi5kKGUsImRzdiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHNzfSkpLG4uZChlLCJjc3YiLChmdW5jdGlvbigpe3JldHVybiBjc30pKSxuLmQoZSwidHN2IiwoZnVuY3Rpb24oKXtyZXR1cm4gdXN9KSksbi5kKGUsImltYWdlIiwoZnVuY3Rpb24oKXtyZXR1cm4gbHN9KSksbi5kKGUsImpzb24iLChmdW5jdGlvbigpe3JldHVybiBmc30pKSxuLmQoZSwidGV4dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGFzfSkpLG4uZChlLCJ4bWwiLChmdW5jdGlvbigpe3JldHVybiBwc30pKSxuLmQoZSwiaHRtbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHlzfSkpLG4uZChlLCJzdmciLChmdW5jdGlvbigpe3JldHVybiBnc30pKSxuLmQoZSwiZm9yY2VDZW50ZXIiLChmdW5jdGlvbigpe3JldHVybiB2c30pKSxuLmQoZSwiZm9yY2VDb2xsaWRlIiwoZnVuY3Rpb24oKXtyZXR1cm4gT3N9KSksbi5kKGUsImZvcmNlTGluayIsKGZ1bmN0aW9uKCl7cmV0dXJuIERzfSkpLG4uZChlLCJmb3JjZU1hbnlCb2R5IiwoZnVuY3Rpb24oKXtyZXR1cm4gUHN9KSksbi5kKGUsImZvcmNlUmFkaWFsIiwoZnVuY3Rpb24oKXtyZXR1cm4ganN9KSksbi5kKGUsImZvcmNlU2ltdWxhdGlvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIEZzfSkpLG4uZChlLCJmb3JjZVgiLChmdW5jdGlvbigpe3JldHVybiBZc30pKSxuLmQoZSwiZm9yY2VZIiwoZnVuY3Rpb24oKXtyZXR1cm4genN9KSksbi5kKGUsImZvcm1hdERlZmF1bHRMb2NhbGUiLChmdW5jdGlvbigpe3JldHVybiByY30pKSxuLmQoZSwiZm9ybWF0IiwoZnVuY3Rpb24oKXtyZXR1cm4gWHN9KSksbi5kKGUsImZvcm1hdFByZWZpeCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFpzfSkpLG4uZChlLCJmb3JtYXRMb2NhbGUiLChmdW5jdGlvbigpe3JldHVybiBuY30pKSxuLmQoZSwiZm9ybWF0U3BlY2lmaWVyIiwoZnVuY3Rpb24oKXtyZXR1cm4gV3N9KSksbi5kKGUsIkZvcm1hdFNwZWNpZmllciIsKGZ1bmN0aW9uKCl7cmV0dXJuIFZzfSkpLG4uZChlLCJwcmVjaXNpb25GaXhlZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGljfSkpLG4uZChlLCJwcmVjaXNpb25QcmVmaXgiLChmdW5jdGlvbigpe3JldHVybiBhY30pKSxuLmQoZSwicHJlY2lzaW9uUm91bmQiLChmdW5jdGlvbigpe3JldHVybiBvY30pKSxuLmQoZSwiZ2VvQXJlYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFFjfSkpLG4uZChlLCJnZW9Cb3VuZHMiLChmdW5jdGlvbigpe3JldHVybiAkdX0pKSxuLmQoZSwiZ2VvQ2VudHJvaWQiLChmdW5jdGlvbigpe3JldHVybiBlbH0pKSxuLmQoZSwiZ2VvQ2lyY2xlIiwoZnVuY3Rpb24oKXtyZXR1cm4gZmx9KSksbi5kKGUsImdlb0NsaXBBbnRpbWVyaWRpYW4iLChmdW5jdGlvbigpe3JldHVybiBFbH0pKSxuLmQoZSwiZ2VvQ2xpcENpcmNsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFRsfSkpLG4uZChlLCJnZW9DbGlwRXh0ZW50IiwoZnVuY3Rpb24oKXtyZXR1cm4gT2x9KSksbi5kKGUsImdlb0NsaXBSZWN0YW5nbGUiLChmdW5jdGlvbigpe3JldHVybiBDbH0pKSxuLmQoZSwiZ2VvQ29udGFpbnMiLChmdW5jdGlvbigpe3JldHVybiBHbH0pKSxuLmQoZSwiZ2VvRGlzdGFuY2UiLChmdW5jdGlvbigpe3JldHVybiBqbH0pKSxuLmQoZSwiZ2VvR3JhdGljdWxlIiwoZnVuY3Rpb24oKXtyZXR1cm4gUWx9KSksbi5kKGUsImdlb0dyYXRpY3VsZTEwIiwoZnVuY3Rpb24oKXtyZXR1cm4gS2x9KSksbi5kKGUsImdlb0ludGVycG9sYXRlIiwoZnVuY3Rpb24oKXtyZXR1cm4gcmh9KSksbi5kKGUsImdlb0xlbmd0aCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFJsfSkpLG4uZChlLCJnZW9QYXRoIiwoZnVuY3Rpb24oKXtyZXR1cm4gZWZ9KSksbi5kKGUsImdlb0FsYmVycyIsKGZ1bmN0aW9uKCl7cmV0dXJuIF9mfSkpLG4uZChlLCJnZW9BbGJlcnNVc2EiLChmdW5jdGlvbigpe3JldHVybiBrZn0pKSxuLmQoZSwiZ2VvQXppbXV0aGFsRXF1YWxBcmVhIiwoZnVuY3Rpb24oKXtyZXR1cm4gQ2Z9KSksbi5kKGUsImdlb0F6aW11dGhhbEVxdWFsQXJlYVJhdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFRmfSkpLG4uZChlLCJnZW9BemltdXRoYWxFcXVpZGlzdGFudCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEFmfSkpLG4uZChlLCJnZW9BemltdXRoYWxFcXVpZGlzdGFudFJhdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFNmfSkpLG4uZChlLCJnZW9Db25pY0NvbmZvcm1hbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIExmfSkpLG4uZChlLCJnZW9Db25pY0NvbmZvcm1hbFJhdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIERmfSkpLG4uZChlLCJnZW9Db25pY0VxdWFsQXJlYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHhmfSkpLG4uZChlLCJnZW9Db25pY0VxdWFsQXJlYVJhdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGJmfSkpLG4uZChlLCJnZW9Db25pY0VxdWlkaXN0YW50IiwoZnVuY3Rpb24oKXtyZXR1cm4gUGZ9KSksbi5kKGUsImdlb0NvbmljRXF1aWRpc3RhbnRSYXciLChmdW5jdGlvbigpe3JldHVybiBGZn0pKSxuLmQoZSwiZ2VvRXF1YWxFYXJ0aCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFdmfSkpLG4uZChlLCJnZW9FcXVhbEVhcnRoUmF3IiwoZnVuY3Rpb24oKXtyZXR1cm4gcWZ9KSksbi5kKGUsImdlb0VxdWlyZWN0YW5ndWxhciIsKGZ1bmN0aW9uKCl7cmV0dXJuIFJmfSkpLG4uZChlLCJnZW9FcXVpcmVjdGFuZ3VsYXJSYXciLChmdW5jdGlvbigpe3JldHVybiBJZn0pKSxuLmQoZSwiZ2VvR25vbW9uaWMiLChmdW5jdGlvbigpe3JldHVybiBIZn0pKSxuLmQoZSwiZ2VvR25vbW9uaWNSYXciLChmdW5jdGlvbigpe3JldHVybiBWZn0pKSxuLmQoZSwiZ2VvSWRlbnRpdHkiLChmdW5jdGlvbigpe3JldHVybiBYZn0pKSxuLmQoZSwiZ2VvUHJvamVjdGlvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGdmfSkpLG4uZChlLCJnZW9Qcm9qZWN0aW9uTXV0YXRvciIsKGZ1bmN0aW9uKCl7cmV0dXJuIHZmfSkpLG4uZChlLCJnZW9NZXJjYXRvciIsKGZ1bmN0aW9uKCl7cmV0dXJuIE9mfSkpLG4uZChlLCJnZW9NZXJjYXRvclJhdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIE1mfSkpLG4uZChlLCJnZW9OYXR1cmFsRWFydGgxIiwoZnVuY3Rpb24oKXtyZXR1cm4gUWZ9KSksbi5kKGUsImdlb05hdHVyYWxFYXJ0aDFSYXciLChmdW5jdGlvbigpe3JldHVybiBaZn0pKSxuLmQoZSwiZ2VvT3J0aG9ncmFwaGljIiwoZnVuY3Rpb24oKXtyZXR1cm4gSmZ9KSksbi5kKGUsImdlb09ydGhvZ3JhcGhpY1JhdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEtmfSkpLG4uZChlLCJnZW9TdGVyZW9ncmFwaGljIiwoZnVuY3Rpb24oKXtyZXR1cm4gZWR9KSksbi5kKGUsImdlb1N0ZXJlb2dyYXBoaWNSYXciLChmdW5jdGlvbigpe3JldHVybiB0ZH0pKSxuLmQoZSwiZ2VvVHJhbnN2ZXJzZU1lcmNhdG9yIiwoZnVuY3Rpb24oKXtyZXR1cm4gcmR9KSksbi5kKGUsImdlb1RyYW5zdmVyc2VNZXJjYXRvclJhdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIG5kfSkpLG4uZChlLCJnZW9Sb3RhdGlvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHVsfSkpLG4uZChlLCJnZW9TdHJlYW0iLChmdW5jdGlvbigpe3JldHVybiAkY30pKSxuLmQoZSwiZ2VvVHJhbnNmb3JtIiwoZnVuY3Rpb24oKXtyZXR1cm4gbmZ9KSksbi5kKGUsImNsdXN0ZXIiLChmdW5jdGlvbigpe3JldHVybiBzZH0pKSxuLmQoZSwiaGllcmFyY2h5IiwoZnVuY3Rpb24oKXtyZXR1cm4gdWR9KSksbi5kKGUsInBhY2siLChmdW5jdGlvbigpe3JldHVybiBMZH0pKSxuLmQoZSwicGFja1NpYmxpbmdzIiwoZnVuY3Rpb24oKXtyZXR1cm4gQWR9KSksbi5kKGUsInBhY2tFbmNsb3NlIiwoZnVuY3Rpb24oKXtyZXR1cm4geWR9KSksbi5kKGUsInBhcnRpdGlvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIFlkfSkpLG4uZChlLCJzdHJhdGlmeSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFdkfSkpLG4uZChlLCJ0cmVlIiwoZnVuY3Rpb24oKXtyZXR1cm4gS2R9KSksbi5kKGUsInRyZWVtYXAiLChmdW5jdGlvbigpe3JldHVybiBycH0pKSxuLmQoZSwidHJlZW1hcEJpbmFyeSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGlwfSkpLG4uZChlLCJ0cmVlbWFwRGljZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGpkfSkpLG4uZChlLCJ0cmVlbWFwU2xpY2UiLChmdW5jdGlvbigpe3JldHVybiBKZH0pKSxuLmQoZSwidHJlZW1hcFNsaWNlRGljZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGFwfSkpLG4uZChlLCJ0cmVlbWFwU3F1YXJpZnkiLChmdW5jdGlvbigpe3JldHVybiBucH0pKSxuLmQoZSwidHJlZW1hcFJlc3F1YXJpZnkiLChmdW5jdGlvbigpe3JldHVybiBvcH0pKSxuLmQoZSwiaW50ZXJwb2xhdGUiLChmdW5jdGlvbigpe3JldHVybiBBbn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVBcnJheSIsKGZ1bmN0aW9uKCl7cmV0dXJuIG1ufSkpLG4uZChlLCJpbnRlcnBvbGF0ZUJhc2lzIiwoZnVuY3Rpb24oKXtyZXR1cm4gYW59KSksbi5kKGUsImludGVycG9sYXRlQmFzaXNDbG9zZWQiLChmdW5jdGlvbigpe3JldHVybiBvbn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVEYXRlIiwoZnVuY3Rpb24oKXtyZXR1cm4geG59KSksbi5kKGUsImludGVycG9sYXRlRGlzY3JldGUiLChmdW5jdGlvbigpe3JldHVybiBzcH0pKSxuLmQoZSwiaW50ZXJwb2xhdGVIdWUiLChmdW5jdGlvbigpe3JldHVybiBjcH0pKSxuLmQoZSwiaW50ZXJwb2xhdGVOdW1iZXIiLChmdW5jdGlvbigpe3JldHVybiBfbn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVOdW1iZXJBcnJheSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGdufSkpLG4uZChlLCJpbnRlcnBvbGF0ZU9iamVjdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGtufSkpLG4uZChlLCJpbnRlcnBvbGF0ZVJvdW5kIiwoZnVuY3Rpb24oKXtyZXR1cm4gdXB9KSksbi5kKGUsImludGVycG9sYXRlU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4gU259KSksbi5kKGUsImludGVycG9sYXRlVHJhbnNmb3JtQ3NzIiwoZnVuY3Rpb24oKXtyZXR1cm4gaHJ9KSksbi5kKGUsImludGVycG9sYXRlVHJhbnNmb3JtU3ZnIiwoZnVuY3Rpb24oKXtyZXR1cm4gZnJ9KSksbi5kKGUsImludGVycG9sYXRlWm9vbSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZwfSkpLG4uZChlLCJpbnRlcnBvbGF0ZVJnYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZufSkpLG4uZChlLCJpbnRlcnBvbGF0ZVJnYkJhc2lzIiwoZnVuY3Rpb24oKXtyZXR1cm4gcG59KSksbi5kKGUsImludGVycG9sYXRlUmdiQmFzaXNDbG9zZWQiLChmdW5jdGlvbigpe3JldHVybiB5bn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVIc2wiLChmdW5jdGlvbigpe3JldHVybiBwcH0pKSxuLmQoZSwiaW50ZXJwb2xhdGVIc2xMb25nIiwoZnVuY3Rpb24oKXtyZXR1cm4geXB9KSksbi5kKGUsImludGVycG9sYXRlTGFiIiwoZnVuY3Rpb24oKXtyZXR1cm4gZ3B9KSksbi5kKGUsImludGVycG9sYXRlSGNsIiwoZnVuY3Rpb24oKXtyZXR1cm4gbXB9KSksbi5kKGUsImludGVycG9sYXRlSGNsTG9uZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGJwfSkpLG4uZChlLCJpbnRlcnBvbGF0ZUN1YmVoZWxpeCIsKGZ1bmN0aW9uKCl7cmV0dXJuIF9wfSkpLG4uZChlLCJpbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmciLChmdW5jdGlvbigpe3JldHVybiBrcH0pKSxuLmQoZSwicGllY2V3aXNlIiwoZnVuY3Rpb24oKXtyZXR1cm4gd3B9KSksbi5kKGUsInF1YW50aXplIiwoZnVuY3Rpb24oKXtyZXR1cm4gRXB9KSksbi5kKGUsInBhdGgiLChmdW5jdGlvbigpe3JldHVybiBVaX0pKSxuLmQoZSwicG9seWdvbkFyZWEiLChmdW5jdGlvbigpe3JldHVybiBUcH0pKSxuLmQoZSwicG9seWdvbkNlbnRyb2lkIiwoZnVuY3Rpb24oKXtyZXR1cm4gQ3B9KSksbi5kKGUsInBvbHlnb25IdWxsIiwoZnVuY3Rpb24oKXtyZXR1cm4gTXB9KSksbi5kKGUsInBvbHlnb25Db250YWlucyIsKGZ1bmN0aW9uKCl7cmV0dXJuIE9wfSkpLG4uZChlLCJwb2x5Z29uTGVuZ3RoIiwoZnVuY3Rpb24oKXtyZXR1cm4gQnB9KSksbi5kKGUsInF1YWR0cmVlIiwoZnVuY3Rpb24oKXtyZXR1cm4gRXN9KSksbi5kKGUsInJhbmRvbVVuaWZvcm0iLChmdW5jdGlvbigpe3JldHVybiBEcH0pKSxuLmQoZSwicmFuZG9tTm9ybWFsIiwoZnVuY3Rpb24oKXtyZXR1cm4gTHB9KSksbi5kKGUsInJhbmRvbUxvZ05vcm1hbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIElwfSkpLG4uZChlLCJyYW5kb21CYXRlcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEZwfSkpLG4uZChlLCJyYW5kb21JcndpbkhhbGwiLChmdW5jdGlvbigpe3JldHVybiBScH0pKSxuLmQoZSwicmFuZG9tRXhwb25lbnRpYWwiLChmdW5jdGlvbigpe3JldHVybiBQcH0pKSxuLmQoZSwic2NhbGVCYW5kIiwoZnVuY3Rpb24oKXtyZXR1cm4gVnB9KSksbi5kKGUsInNjYWxlUG9pbnQiLChmdW5jdGlvbigpe3JldHVybiBHcH0pKSxuLmQoZSwic2NhbGVJZGVudGl0eSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGN5fSkpLG4uZChlLCJzY2FsZUxpbmVhciIsKGZ1bmN0aW9uKCl7cmV0dXJuIHN5fSkpLG4uZChlLCJzY2FsZUxvZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHZ5fSkpLG4uZChlLCJzY2FsZVN5bWxvZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIF95fSkpLG4uZChlLCJzY2FsZU9yZGluYWwiLChmdW5jdGlvbigpe3JldHVybiBXcH0pKSxuLmQoZSwic2NhbGVJbXBsaWNpdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHFwfSkpLG4uZChlLCJzY2FsZVBvdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEN5fSkpLG4uZChlLCJzY2FsZVNxcnQiLChmdW5jdGlvbigpe3JldHVybiBTeX0pKSxuLmQoZSwic2NhbGVRdWFudGlsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIEF5fSkpLG4uZChlLCJzY2FsZVF1YW50aXplIiwoZnVuY3Rpb24oKXtyZXR1cm4gTXl9KSksbi5kKGUsInNjYWxlVGhyZXNob2xkIiwoZnVuY3Rpb24oKXtyZXR1cm4gT3l9KSksbi5kKGUsInNjYWxlVGltZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHNtfSkpLG4uZChlLCJzY2FsZVV0YyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHZtfSkpLG4uZChlLCJzY2FsZVNlcXVlbnRpYWwiLChmdW5jdGlvbigpe3JldHVybiB4bX0pKSxuLmQoZSwic2NhbGVTZXF1ZW50aWFsTG9nIiwoZnVuY3Rpb24oKXtyZXR1cm4gX219KSksbi5kKGUsInNjYWxlU2VxdWVudGlhbFBvdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHdtfSkpLG4uZChlLCJzY2FsZVNlcXVlbnRpYWxTcXJ0IiwoZnVuY3Rpb24oKXtyZXR1cm4gRW19KSksbi5kKGUsInNjYWxlU2VxdWVudGlhbFN5bWxvZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGttfSkpLG4uZChlLCJzY2FsZVNlcXVlbnRpYWxRdWFudGlsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFRtfSkpLG4uZChlLCJzY2FsZURpdmVyZ2luZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFNtfSkpLG4uZChlLCJzY2FsZURpdmVyZ2luZ0xvZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEFtfSkpLG4uZChlLCJzY2FsZURpdmVyZ2luZ1BvdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIE9tfSkpLG4uZChlLCJzY2FsZURpdmVyZ2luZ1NxcnQiLChmdW5jdGlvbigpe3JldHVybiBCbX0pKSxuLmQoZSwic2NhbGVEaXZlcmdpbmdTeW1sb2ciLChmdW5jdGlvbigpe3JldHVybiBNbX0pKSxuLmQoZSwidGlja0Zvcm1hdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGF5fSkpLG4uZChlLCJzY2hlbWVDYXRlZ29yeTEwIiwoZnVuY3Rpb24oKXtyZXR1cm4gRG19KSksbi5kKGUsInNjaGVtZUFjY2VudCIsKGZ1bmN0aW9uKCl7cmV0dXJuIExtfSkpLG4uZChlLCJzY2hlbWVEYXJrMiIsKGZ1bmN0aW9uKCl7cmV0dXJuIEltfSkpLG4uZChlLCJzY2hlbWVQYWlyZWQiLChmdW5jdGlvbigpe3JldHVybiBSbX0pKSxuLmQoZSwic2NoZW1lUGFzdGVsMSIsKGZ1bmN0aW9uKCl7cmV0dXJuIEZtfSkpLG4uZChlLCJzY2hlbWVQYXN0ZWwyIiwoZnVuY3Rpb24oKXtyZXR1cm4gUG19KSksbi5kKGUsInNjaGVtZVNldDEiLChmdW5jdGlvbigpe3JldHVybiBqbX0pKSxuLmQoZSwic2NoZW1lU2V0MiIsKGZ1bmN0aW9uKCl7cmV0dXJuIFltfSkpLG4uZChlLCJzY2hlbWVTZXQzIiwoZnVuY3Rpb24oKXtyZXR1cm4gem19KSksbi5kKGUsInNjaGVtZVRhYmxlYXUxMCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFVtfSkpLG4uZChlLCJpbnRlcnBvbGF0ZUJyQkciLChmdW5jdGlvbigpe3JldHVybiBXbX0pKSxuLmQoZSwic2NoZW1lQnJCRyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHFtfSkpLG4uZChlLCJpbnRlcnBvbGF0ZVBSR24iLChmdW5jdGlvbigpe3JldHVybiBIbX0pKSxuLmQoZSwic2NoZW1lUFJHbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIFZtfSkpLG4uZChlLCJpbnRlcnBvbGF0ZVBpWUciLChmdW5jdGlvbigpe3JldHVybiBYbX0pKSxuLmQoZSwic2NoZW1lUGlZRyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEdtfSkpLG4uZChlLCJpbnRlcnBvbGF0ZVB1T3IiLChmdW5jdGlvbigpe3JldHVybiBRbX0pKSxuLmQoZSwic2NoZW1lUHVPciIsKGZ1bmN0aW9uKCl7cmV0dXJuIFptfSkpLG4uZChlLCJpbnRlcnBvbGF0ZVJkQnUiLChmdW5jdGlvbigpe3JldHVybiBKbX0pKSxuLmQoZSwic2NoZW1lUmRCdSIsKGZ1bmN0aW9uKCl7cmV0dXJuIEttfSkpLG4uZChlLCJpbnRlcnBvbGF0ZVJkR3kiLChmdW5jdGlvbigpe3JldHVybiBlYn0pKSxuLmQoZSwic2NoZW1lUmRHeSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHRifSkpLG4uZChlLCJpbnRlcnBvbGF0ZVJkWWxCdSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJifSkpLG4uZChlLCJzY2hlbWVSZFlsQnUiLChmdW5jdGlvbigpe3JldHVybiBuYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVSZFlsR24iLChmdW5jdGlvbigpe3JldHVybiBhYn0pKSxuLmQoZSwic2NoZW1lUmRZbEduIiwoZnVuY3Rpb24oKXtyZXR1cm4gaWJ9KSksbi5kKGUsImludGVycG9sYXRlU3BlY3RyYWwiLChmdW5jdGlvbigpe3JldHVybiBzYn0pKSxuLmQoZSwic2NoZW1lU3BlY3RyYWwiLChmdW5jdGlvbigpe3JldHVybiBvYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVCdUduIiwoZnVuY3Rpb24oKXtyZXR1cm4gdWJ9KSksbi5kKGUsInNjaGVtZUJ1R24iLChmdW5jdGlvbigpe3JldHVybiBjYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVCdVB1IiwoZnVuY3Rpb24oKXtyZXR1cm4gaGJ9KSksbi5kKGUsInNjaGVtZUJ1UHUiLChmdW5jdGlvbigpe3JldHVybiBsYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVHbkJ1IiwoZnVuY3Rpb24oKXtyZXR1cm4gZGJ9KSksbi5kKGUsInNjaGVtZUduQnUiLChmdW5jdGlvbigpe3JldHVybiBmYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVPclJkIiwoZnVuY3Rpb24oKXtyZXR1cm4geWJ9KSksbi5kKGUsInNjaGVtZU9yUmQiLChmdW5jdGlvbigpe3JldHVybiBwYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVQdUJ1R24iLChmdW5jdGlvbigpe3JldHVybiB2Yn0pKSxuLmQoZSwic2NoZW1lUHVCdUduIiwoZnVuY3Rpb24oKXtyZXR1cm4gZ2J9KSksbi5kKGUsImludGVycG9sYXRlUHVCdSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGJifSkpLG4uZChlLCJzY2hlbWVQdUJ1IiwoZnVuY3Rpb24oKXtyZXR1cm4gbWJ9KSksbi5kKGUsImludGVycG9sYXRlUHVSZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIF9ifSkpLG4uZChlLCJzY2hlbWVQdVJkIiwoZnVuY3Rpb24oKXtyZXR1cm4geGJ9KSksbi5kKGUsImludGVycG9sYXRlUmRQdSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHdifSkpLG4uZChlLCJzY2hlbWVSZFB1IiwoZnVuY3Rpb24oKXtyZXR1cm4ga2J9KSksbi5kKGUsImludGVycG9sYXRlWWxHbkJ1IiwoZnVuY3Rpb24oKXtyZXR1cm4gVGJ9KSksbi5kKGUsInNjaGVtZVlsR25CdSIsKGZ1bmN0aW9uKCl7cmV0dXJuIEVifSkpLG4uZChlLCJpbnRlcnBvbGF0ZVlsR24iLChmdW5jdGlvbigpe3JldHVybiBTYn0pKSxuLmQoZSwic2NoZW1lWWxHbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIENifSkpLG4uZChlLCJpbnRlcnBvbGF0ZVlsT3JCciIsKGZ1bmN0aW9uKCl7cmV0dXJuIE1ifSkpLG4uZChlLCJzY2hlbWVZbE9yQnIiLChmdW5jdGlvbigpe3JldHVybiBBYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVZbE9yUmQiLChmdW5jdGlvbigpe3JldHVybiBCYn0pKSxuLmQoZSwic2NoZW1lWWxPclJkIiwoZnVuY3Rpb24oKXtyZXR1cm4gT2J9KSksbi5kKGUsImludGVycG9sYXRlQmx1ZXMiLChmdW5jdGlvbigpe3JldHVybiBEYn0pKSxuLmQoZSwic2NoZW1lQmx1ZXMiLChmdW5jdGlvbigpe3JldHVybiBOYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVHcmVlbnMiLChmdW5jdGlvbigpe3JldHVybiBJYn0pKSxuLmQoZSwic2NoZW1lR3JlZW5zIiwoZnVuY3Rpb24oKXtyZXR1cm4gTGJ9KSksbi5kKGUsImludGVycG9sYXRlR3JleXMiLChmdW5jdGlvbigpe3JldHVybiBGYn0pKSxuLmQoZSwic2NoZW1lR3JleXMiLChmdW5jdGlvbigpe3JldHVybiBSYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVQdXJwbGVzIiwoZnVuY3Rpb24oKXtyZXR1cm4gamJ9KSksbi5kKGUsInNjaGVtZVB1cnBsZXMiLChmdW5jdGlvbigpe3JldHVybiBQYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVSZWRzIiwoZnVuY3Rpb24oKXtyZXR1cm4gemJ9KSksbi5kKGUsInNjaGVtZVJlZHMiLChmdW5jdGlvbigpe3JldHVybiBZYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVPcmFuZ2VzIiwoZnVuY3Rpb24oKXtyZXR1cm4gJGJ9KSksbi5kKGUsInNjaGVtZU9yYW5nZXMiLChmdW5jdGlvbigpe3JldHVybiBVYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVDaXZpZGlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gcWJ9KSksbi5kKGUsImludGVycG9sYXRlQ3ViZWhlbGl4RGVmYXVsdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFdifSkpLG4uZChlLCJpbnRlcnBvbGF0ZVJhaW5ib3ciLChmdW5jdGlvbigpe3JldHVybiBYYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVXYXJtIiwoZnVuY3Rpb24oKXtyZXR1cm4gVmJ9KSksbi5kKGUsImludGVycG9sYXRlQ29vbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEhifSkpLG4uZChlLCJpbnRlcnBvbGF0ZVNpbmVib3ciLChmdW5jdGlvbigpe3JldHVybiBKYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVUdXJibyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHR4fSkpLG4uZChlLCJpbnRlcnBvbGF0ZVZpcmlkaXMiLChmdW5jdGlvbigpe3JldHVybiBueH0pKSxuLmQoZSwiaW50ZXJwb2xhdGVNYWdtYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJ4fSkpLG4uZChlLCJpbnRlcnBvbGF0ZUluZmVybm8iLChmdW5jdGlvbigpe3JldHVybiBpeH0pKSxuLmQoZSwiaW50ZXJwb2xhdGVQbGFzbWEiLChmdW5jdGlvbigpe3JldHVybiBheH0pKSxuLmQoZSwiY3JlYXRlIiwoZnVuY3Rpb24oKXtyZXR1cm4gb3h9KSksbi5kKGUsImNyZWF0b3IiLChmdW5jdGlvbigpe3JldHVybiBuZX0pKSxuLmQoZSwibG9jYWwiLChmdW5jdGlvbigpe3JldHVybiBjeH0pKSxuLmQoZSwibWF0Y2hlciIsKGZ1bmN0aW9uKCl7cmV0dXJuIHl0fSkpLG4uZChlLCJtb3VzZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIE5ufSkpLG4uZChlLCJuYW1lc3BhY2UiLChmdW5jdGlvbigpe3JldHVybiB3dH0pKSxuLmQoZSwibmFtZXNwYWNlcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGt0fSkpLG4uZChlLCJjbGllbnRQb2ludCIsKGZ1bmN0aW9uKCl7cmV0dXJuIE9ufSkpLG4uZChlLCJzZWxlY3QiLChmdW5jdGlvbigpe3JldHVybiBrZX0pKSxuLmQoZSwic2VsZWN0QWxsIiwoZnVuY3Rpb24oKXtyZXR1cm4gbHh9KSksbi5kKGUsInNlbGVjdGlvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIF9lfSkpLG4uZChlLCJzZWxlY3RvciIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZ0fSkpLG4uZChlLCJzZWxlY3RvckFsbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHB0fSkpLG4uZChlLCJzdHlsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIEx0fSkpLG4uZChlLCJ0b3VjaCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEJufSkpLG4uZChlLCJ0b3VjaGVzIiwoZnVuY3Rpb24oKXtyZXR1cm4gaHh9KSksbi5kKGUsIndpbmRvdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIE90fSkpLG4uZChlLCJldmVudCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGNlfSkpLG4uZChlLCJjdXN0b21FdmVudCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHBlfSkpLG4uZChlLCJhcmMiLChmdW5jdGlvbigpe3JldHVybiBOeH0pKSxuLmQoZSwiYXJlYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFB4fSkpLG4uZChlLCJsaW5lIiwoZnVuY3Rpb24oKXtyZXR1cm4gRnh9KSksbi5kKGUsInBpZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHp4fSkpLG4uZChlLCJhcmVhUmFkaWFsIiwoZnVuY3Rpb24oKXtyZXR1cm4gSHh9KSksbi5kKGUsInJhZGlhbEFyZWEiLChmdW5jdGlvbigpe3JldHVybiBIeH0pKSxuLmQoZSwibGluZVJhZGlhbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFZ4fSkpLG4uZChlLCJyYWRpYWxMaW5lIiwoZnVuY3Rpb24oKXtyZXR1cm4gVnh9KSksbi5kKGUsInBvaW50UmFkaWFsIiwoZnVuY3Rpb24oKXtyZXR1cm4gR3h9KSksbi5kKGUsImxpbmtIb3Jpem9udGFsIiwoZnVuY3Rpb24oKXtyZXR1cm4gbl99KSksbi5kKGUsImxpbmtWZXJ0aWNhbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJffSkpLG4uZChlLCJsaW5rUmFkaWFsIiwoZnVuY3Rpb24oKXtyZXR1cm4gaV99KSksbi5kKGUsInN5bWJvbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGtffSkpLG4uZChlLCJzeW1ib2xzIiwoZnVuY3Rpb24oKXtyZXR1cm4gX199KSksbi5kKGUsInN5bWJvbENpcmNsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGFffSkpLG4uZChlLCJzeW1ib2xDcm9zcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIG9ffSkpLG4uZChlLCJzeW1ib2xEaWFtb25kIiwoZnVuY3Rpb24oKXtyZXR1cm4gdV99KSksbi5kKGUsInN5bWJvbFNxdWFyZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHBffSkpLG4uZChlLCJzeW1ib2xTdGFyIiwoZnVuY3Rpb24oKXtyZXR1cm4gZF99KSksbi5kKGUsInN5bWJvbFRyaWFuZ2xlIiwoZnVuY3Rpb24oKXtyZXR1cm4gZ199KSksbi5kKGUsInN5bWJvbFd5ZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHhffSkpLG4uZChlLCJjdXJ2ZUJhc2lzQ2xvc2VkIiwoZnVuY3Rpb24oKXtyZXR1cm4gQV99KSksbi5kKGUsImN1cnZlQmFzaXNPcGVuIiwoZnVuY3Rpb24oKXtyZXR1cm4gT199KSksbi5kKGUsImN1cnZlQmFzaXMiLChmdW5jdGlvbigpe3JldHVybiBDX30pKSxuLmQoZSwiY3VydmVCdW5kbGUiLChmdW5jdGlvbigpe3JldHVybiBOX30pKSxuLmQoZSwiY3VydmVDYXJkaW5hbENsb3NlZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEZffSkpLG4uZChlLCJjdXJ2ZUNhcmRpbmFsT3BlbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGpffSkpLG4uZChlLCJjdXJ2ZUNhcmRpbmFsIiwoZnVuY3Rpb24oKXtyZXR1cm4gSV99KSksbi5kKGUsImN1cnZlQ2F0bXVsbFJvbUNsb3NlZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHFffSkpLG4uZChlLCJjdXJ2ZUNhdG11bGxSb21PcGVuIiwoZnVuY3Rpb24oKXtyZXR1cm4gVl99KSksbi5kKGUsImN1cnZlQ2F0bXVsbFJvbSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFVffSkpLG4uZChlLCJjdXJ2ZUxpbmVhckNsb3NlZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEdffSkpLG4uZChlLCJjdXJ2ZUxpbmVhciIsKGZ1bmN0aW9uKCl7cmV0dXJuIEx4fSkpLG4uZChlLCJjdXJ2ZU1vbm90b25lWCIsKGZ1bmN0aW9uKCl7cmV0dXJuIG5rfSkpLG4uZChlLCJjdXJ2ZU1vbm90b25lWSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJrfSkpLG4uZChlLCJjdXJ2ZU5hdHVyYWwiLChmdW5jdGlvbigpe3JldHVybiBva30pKSxuLmQoZSwiY3VydmVTdGVwIiwoZnVuY3Rpb24oKXtyZXR1cm4gY2t9KSksbi5kKGUsImN1cnZlU3RlcEFmdGVyIiwoZnVuY3Rpb24oKXtyZXR1cm4gbGt9KSksbi5kKGUsImN1cnZlU3RlcEJlZm9yZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHVrfSkpLG4uZChlLCJzdGFjayIsKGZ1bmN0aW9uKCl7cmV0dXJuIHBrfSkpLG4uZChlLCJzdGFja09mZnNldEV4cGFuZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHlrfSkpLG4uZChlLCJzdGFja09mZnNldERpdmVyZ2luZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGdrfSkpLG4uZChlLCJzdGFja09mZnNldE5vbmUiLChmdW5jdGlvbigpe3JldHVybiBoa30pKSxuLmQoZSwic3RhY2tPZmZzZXRTaWxob3VldHRlIiwoZnVuY3Rpb24oKXtyZXR1cm4gdmt9KSksbi5kKGUsInN0YWNrT2Zmc2V0V2lnZ2xlIiwoZnVuY3Rpb24oKXtyZXR1cm4gbWt9KSksbi5kKGUsInN0YWNrT3JkZXJBcHBlYXJhbmNlIiwoZnVuY3Rpb24oKXtyZXR1cm4gYmt9KSksbi5kKGUsInN0YWNrT3JkZXJBc2NlbmRpbmciLChmdW5jdGlvbigpe3JldHVybiBfa30pKSxuLmQoZSwic3RhY2tPcmRlckRlc2NlbmRpbmciLChmdW5jdGlvbigpe3JldHVybiB3a30pKSxuLmQoZSwic3RhY2tPcmRlckluc2lkZU91dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEVrfSkpLG4uZChlLCJzdGFja09yZGVyTm9uZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZrfSkpLG4uZChlLCJzdGFja09yZGVyUmV2ZXJzZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFRrfSkpLG4uZChlLCJ0aW1lSW50ZXJ2YWwiLChmdW5jdGlvbigpe3JldHVybiBEeX0pKSxuLmQoZSwidGltZU1pbGxpc2Vjb25kIiwoZnVuY3Rpb24oKXtyZXR1cm4gcGd9KSksbi5kKGUsInRpbWVNaWxsaXNlY29uZHMiLChmdW5jdGlvbigpe3JldHVybiB5Z30pKSxuLmQoZSwidXRjTWlsbGlzZWNvbmQiLChmdW5jdGlvbigpe3JldHVybiBwZ30pKSxuLmQoZSwidXRjTWlsbGlzZWNvbmRzIiwoZnVuY3Rpb24oKXtyZXR1cm4geWd9KSksbi5kKGUsInRpbWVTZWNvbmQiLChmdW5jdGlvbigpe3JldHVybiBoZ30pKSxuLmQoZSwidGltZVNlY29uZHMiLChmdW5jdGlvbigpe3JldHVybiBmZ30pKSxuLmQoZSwidXRjU2Vjb25kIiwoZnVuY3Rpb24oKXtyZXR1cm4gaGd9KSksbi5kKGUsInV0Y1NlY29uZHMiLChmdW5jdGlvbigpe3JldHVybiBmZ30pKSxuLmQoZSwidGltZU1pbnV0ZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGNnfSkpLG4uZChlLCJ0aW1lTWludXRlcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHVnfSkpLG4uZChlLCJ0aW1lSG91ciIsKGZ1bmN0aW9uKCl7cmV0dXJuIGFnfSkpLG4uZChlLCJ0aW1lSG91cnMiLChmdW5jdGlvbigpe3JldHVybiBvZ30pKSxuLmQoZSwidGltZURheSIsKGZ1bmN0aW9uKCl7cmV0dXJuIG5nfSkpLG4uZChlLCJ0aW1lRGF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJnfSkpLG4uZChlLCJ0aW1lV2VlayIsKGZ1bmN0aW9uKCl7cmV0dXJuIHp5fSkpLG4uZChlLCJ0aW1lV2Vla3MiLChmdW5jdGlvbigpe3JldHVybiBHeX0pKSxuLmQoZSwidGltZVN1bmRheSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHp5fSkpLG4uZChlLCJ0aW1lU3VuZGF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEd5fSkpLG4uZChlLCJ0aW1lTW9uZGF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gVXl9KSksbi5kKGUsInRpbWVNb25kYXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gWHl9KSksbi5kKGUsInRpbWVUdWVzZGF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gJHl9KSksbi5kKGUsInRpbWVUdWVzZGF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFp5fSkpLG4uZChlLCJ0aW1lV2VkbmVzZGF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gcXl9KSksbi5kKGUsInRpbWVXZWRuZXNkYXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gUXl9KSksbi5kKGUsInRpbWVUaHVyc2RheSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFd5fSkpLG4uZChlLCJ0aW1lVGh1cnNkYXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gS3l9KSksbi5kKGUsInRpbWVGcmlkYXkiLChmdW5jdGlvbigpe3JldHVybiBWeX0pKSxuLmQoZSwidGltZUZyaWRheXMiLChmdW5jdGlvbigpe3JldHVybiBKeX0pKSxuLmQoZSwidGltZVNhdHVyZGF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gSHl9KSksbi5kKGUsInRpbWVTYXR1cmRheXMiLChmdW5jdGlvbigpe3JldHVybiB0Z30pKSxuLmQoZSwidGltZU1vbnRoIiwoZnVuY3Rpb24oKXtyZXR1cm4gUHl9KSksbi5kKGUsInRpbWVNb250aHMiLChmdW5jdGlvbigpe3JldHVybiBqeX0pKSxuLmQoZSwidGltZVllYXIiLChmdW5jdGlvbigpe3JldHVybiBJeX0pKSxuLmQoZSwidGltZVllYXJzIiwoZnVuY3Rpb24oKXtyZXR1cm4gUnl9KSksbi5kKGUsInV0Y01pbnV0ZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHltfSkpLG4uZChlLCJ1dGNNaW51dGVzIiwoZnVuY3Rpb24oKXtyZXR1cm4gZ219KSksbi5kKGUsInV0Y0hvdXIiLChmdW5jdGlvbigpe3JldHVybiBmbX0pKSxuLmQoZSwidXRjSG91cnMiLChmdW5jdGlvbigpe3JldHVybiBkbX0pKSxuLmQoZSwidXRjRGF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gTmd9KSksbi5kKGUsInV0Y0RheXMiLChmdW5jdGlvbigpe3JldHVybiBEZ30pKSxuLmQoZSwidXRjV2VlayIsKGZ1bmN0aW9uKCl7cmV0dXJuIHZnfSkpLG4uZChlLCJ1dGNXZWVrcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEVnfSkpLG4uZChlLCJ1dGNTdW5kYXkiLChmdW5jdGlvbigpe3JldHVybiB2Z30pKSxuLmQoZSwidXRjU3VuZGF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEVnfSkpLG4uZChlLCJ1dGNNb25kYXkiLChmdW5jdGlvbigpe3JldHVybiBtZ30pKSxuLmQoZSwidXRjTW9uZGF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFRnfSkpLG4uZChlLCJ1dGNUdWVzZGF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gYmd9KSksbi5kKGUsInV0Y1R1ZXNkYXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gQ2d9KSksbi5kKGUsInV0Y1dlZG5lc2RheSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHhnfSkpLG4uZChlLCJ1dGNXZWRuZXNkYXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gU2d9KSksbi5kKGUsInV0Y1RodXJzZGF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gX2d9KSksbi5kKGUsInV0Y1RodXJzZGF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEFnfSkpLG4uZChlLCJ1dGNGcmlkYXkiLChmdW5jdGlvbigpe3JldHVybiBrZ30pKSxuLmQoZSwidXRjRnJpZGF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIE1nfSkpLG4uZChlLCJ1dGNTYXR1cmRheSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHdnfSkpLG4uZChlLCJ1dGNTYXR1cmRheXMiLChmdW5jdGlvbigpe3JldHVybiBPZ30pKSxuLmQoZSwidXRjTW9udGgiLChmdW5jdGlvbigpe3JldHVybiB1bX0pKSxuLmQoZSwidXRjTW9udGhzIiwoZnVuY3Rpb24oKXtyZXR1cm4gbG19KSksbi5kKGUsInV0Y1llYXIiLChmdW5jdGlvbigpe3JldHVybiBJZ30pKSxuLmQoZSwidXRjWWVhcnMiLChmdW5jdGlvbigpe3JldHVybiBSZ30pKSxuLmQoZSwidGltZUZvcm1hdERlZmF1bHRMb2NhbGUiLChmdW5jdGlvbigpe3JldHVybiBybX0pKSxuLmQoZSwidGltZUZvcm1hdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFVnfSkpLG4uZChlLCJ0aW1lUGFyc2UiLChmdW5jdGlvbigpe3JldHVybiAkZ30pKSxuLmQoZSwidXRjRm9ybWF0IiwoZnVuY3Rpb24oKXtyZXR1cm4gcWd9KSksbi5kKGUsInV0Y1BhcnNlIiwoZnVuY3Rpb24oKXtyZXR1cm4gV2d9KSksbi5kKGUsInRpbWVGb3JtYXRMb2NhbGUiLChmdW5jdGlvbigpe3JldHVybiBZZ30pKSxuLmQoZSwiaXNvRm9ybWF0IiwoZnVuY3Rpb24oKXtyZXR1cm4gQ2t9KSksbi5kKGUsImlzb1BhcnNlIiwoZnVuY3Rpb24oKXtyZXR1cm4gU2t9KSksbi5kKGUsIm5vdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHpufSkpLG4uZChlLCJ0aW1lciIsKGZ1bmN0aW9uKCl7cmV0dXJuIHFufSkpLG4uZChlLCJ0aW1lckZsdXNoIiwoZnVuY3Rpb24oKXtyZXR1cm4gV259KSksbi5kKGUsInRpbWVvdXQiLChmdW5jdGlvbigpe3JldHVybiBYbn0pKSxuLmQoZSwiaW50ZXJ2YWwiLChmdW5jdGlvbigpe3JldHVybiBBa30pKSxuLmQoZSwidHJhbnNpdGlvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHpyfSkpLG4uZChlLCJhY3RpdmUiLChmdW5jdGlvbigpe3JldHVybiBacn0pKSxuLmQoZSwiaW50ZXJydXB0IiwoZnVuY3Rpb24oKXtyZXR1cm4gb3J9KSksbi5kKGUsInZvcm9ub2kiLChmdW5jdGlvbigpe3JldHVybiBkd30pKSxuLmQoZSwiem9vbSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFN3fSkpLG4uZChlLCJ6b29tVHJhbnNmb3JtIiwoZnVuY3Rpb24oKXtyZXR1cm4gbXd9KSksbi5kKGUsInpvb21JZGVudGl0eSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHZ3fSkpfSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbih0KXtmb3IodmFyIG4gaW4gdCllLmhhc093blByb3BlcnR5KG4pfHwoZVtuXT10W25dKX0obigxNzIpKX0sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbih0LHIpe3ZhciBpPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCxlLG4scil7Zm9yKG49bnx8e30scj10Lmxlbmd0aDtyLS07blt0W3JdXT1lKTtyZXR1cm4gbn0sZT1bMSwyXSxuPVsxLDNdLHI9WzEsNV0saT1bMSw3XSxhPVsyLDVdLG89WzEsMTVdLHM9WzEsMTddLGM9WzEsMThdLHU9WzEsMjBdLGw9WzEsMjFdLGg9WzEsMjJdLGY9WzEsMjRdLGQ9WzEsMjVdLHA9WzEsMjZdLHk9WzEsMjddLGc9WzEsMjhdLHY9WzEsMjldLG09WzEsMzJdLGI9WzEsMzNdLHg9WzEsMzZdLF89WzEsNCw1LDE2LDIxLDIyLDIzLDI1LDI3LDI4LDI5LDMwLDMxLDMzLDM1LDM2LDM3LDQ4LDU4XSxrPVsxLDQ0XSx3PVs0LDUsMTYsMjEsMjIsMjMsMjUsMjcsMjgsMjksMzAsMzEsMzMsMzcsNDgsNThdLEU9WzQsNSwxNiwyMSwyMiwyMywyNSwyNywyOCwyOSwzMCwzMSwzMywzNiwzNyw0OCw1OF0sVD1bNCw1LDE2LDIxLDIyLDIzLDI1LDI3LDI4LDI5LDMwLDMxLDMzLDM1LDM3LDQ4LDU4XSxDPVs0Niw0Nyw0OF0sUz1bMSw0LDUsNywxNiwyMSwyMiwyMywyNSwyNywyOCwyOSwzMCwzMSwzMywzNSwzNiwzNyw0OCw1OF0sQT17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsU1BBQ0U6NCxORVdMSU5FOjUsZGlyZWN0aXZlOjYsU0Q6Nyxkb2N1bWVudDo4LGxpbmU6OSxzdGF0ZW1lbnQ6MTAsb3BlbkRpcmVjdGl2ZToxMSx0eXBlRGlyZWN0aXZlOjEyLGNsb3NlRGlyZWN0aXZlOjEzLCI6IjoxNCxhcmdEaXJlY3RpdmU6MTUscGFydGljaXBhbnQ6MTYsYWN0b3I6MTcsQVM6MTgscmVzdE9mTGluZToxOSxzaWduYWw6MjAsYXV0b251bWJlcjoyMSxhY3RpdmF0ZToyMixkZWFjdGl2YXRlOjIzLG5vdGVfc3RhdGVtZW50OjI0LHRpdGxlOjI1LHRleHQyOjI2LGxvb3A6MjcsZW5kOjI4LHJlY3Q6Mjksb3B0OjMwLGFsdDozMSxlbHNlX3NlY3Rpb25zOjMyLHBhcjozMyxwYXJfc2VjdGlvbnM6MzQsYW5kOjM1LGVsc2U6MzYsbm90ZTozNyxwbGFjZW1lbnQ6Mzgsb3ZlcjozOSxhY3Rvcl9wYWlyOjQwLHNwYWNlTGlzdDo0MSwiLCI6NDIsbGVmdF9vZjo0MyxyaWdodF9vZjo0NCxzaWduYWx0eXBlOjQ1LCIrIjo0NiwiLSI6NDcsQUNUT1I6NDgsU09MSURfT1BFTl9BUlJPVzo0OSxET1RURURfT1BFTl9BUlJPVzo1MCxTT0xJRF9BUlJPVzo1MSxET1RURURfQVJST1c6NTIsU09MSURfQ1JPU1M6NTMsRE9UVEVEX0NST1NTOjU0LFNPTElEX1BPSU5UOjU1LERPVFRFRF9QT0lOVDo1NixUWFQ6NTcsb3Blbl9kaXJlY3RpdmU6NTgsdHlwZV9kaXJlY3RpdmU6NTksYXJnX2RpcmVjdGl2ZTo2MCxjbG9zZV9kaXJlY3RpdmU6NjEsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IlNQQUNFIiw1OiJORVdMSU5FIiw3OiJTRCIsMTQ6IjoiLDE2OiJwYXJ0aWNpcGFudCIsMTg6IkFTIiwxOToicmVzdE9mTGluZSIsMjE6ImF1dG9udW1iZXIiLDIyOiJhY3RpdmF0ZSIsMjM6ImRlYWN0aXZhdGUiLDI1OiJ0aXRsZSIsMjc6Imxvb3AiLDI4OiJlbmQiLDI5OiJyZWN0IiwzMDoib3B0IiwzMToiYWx0IiwzMzoicGFyIiwzNToiYW5kIiwzNjoiZWxzZSIsMzc6Im5vdGUiLDM5OiJvdmVyIiw0MjoiLCIsNDM6ImxlZnRfb2YiLDQ0OiJyaWdodF9vZiIsNDY6IisiLDQ3OiItIiw0ODoiQUNUT1IiLDQ5OiJTT0xJRF9PUEVOX0FSUk9XIiw1MDoiRE9UVEVEX09QRU5fQVJST1ciLDUxOiJTT0xJRF9BUlJPVyIsNTI6IkRPVFRFRF9BUlJPVyIsNTM6IlNPTElEX0NST1NTIiw1NDoiRE9UVEVEX0NST1NTIiw1NToiU09MSURfUE9JTlQiLDU2OiJET1RURURfUE9JTlQiLDU3OiJUWFQiLDU4OiJvcGVuX2RpcmVjdGl2ZSIsNTk6InR5cGVfZGlyZWN0aXZlIiw2MDoiYXJnX2RpcmVjdGl2ZSIsNjE6ImNsb3NlX2RpcmVjdGl2ZSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywyXSxbMywyXSxbMywyXSxbOCwwXSxbOCwyXSxbOSwyXSxbOSwxXSxbOSwxXSxbNiw0XSxbNiw2XSxbMTAsNV0sWzEwLDNdLFsxMCwyXSxbMTAsMV0sWzEwLDNdLFsxMCwzXSxbMTAsMl0sWzEwLDNdLFsxMCw0XSxbMTAsNF0sWzEwLDRdLFsxMCw0XSxbMTAsNF0sWzEwLDFdLFszNCwxXSxbMzQsNF0sWzMyLDFdLFszMiw0XSxbMjQsNF0sWzI0LDRdLFs0MSwyXSxbNDEsMV0sWzQwLDNdLFs0MCwxXSxbMzgsMV0sWzM4LDFdLFsyMCw1XSxbMjAsNV0sWzIwLDRdLFsxNywxXSxbNDUsMV0sWzQ1LDFdLFs0NSwxXSxbNDUsMV0sWzQ1LDFdLFs0NSwxXSxbNDUsMV0sWzQ1LDFdLFsyNiwxXSxbMTEsMV0sWzEyLDFdLFsxNSwxXSxbMTMsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM9YS5sZW5ndGgtMTtzd2l0Y2goaSl7Y2FzZSA0OnJldHVybiByLmFwcGx5KGFbc10pLGFbc107Y2FzZSA1OnRoaXMuJD1bXTticmVhaztjYXNlIDY6YVtzLTFdLnB1c2goYVtzXSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDc6Y2FzZSA4OnRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgOTp0aGlzLiQ9W107YnJlYWs7Y2FzZSAxMjphW3MtM10uZGVzY3JpcHRpb249ci5wYXJzZU1lc3NhZ2UoYVtzLTFdKSx0aGlzLiQ9YVtzLTNdO2JyZWFrO2Nhc2UgMTM6dGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDE1OnIuZW5hYmxlU2VxdWVuY2VOdW1iZXJzKCk7YnJlYWs7Y2FzZSAxNjp0aGlzLiQ9e3R5cGU6ImFjdGl2ZVN0YXJ0IixzaWduYWxUeXBlOnIuTElORVRZUEUuQUNUSVZFX1NUQVJULGFjdG9yOmFbcy0xXX07YnJlYWs7Y2FzZSAxNzp0aGlzLiQ9e3R5cGU6ImFjdGl2ZUVuZCIsc2lnbmFsVHlwZTpyLkxJTkVUWVBFLkFDVElWRV9FTkQsYWN0b3I6YVtzLTFdfTticmVhaztjYXNlIDE5OnRoaXMuJD1be3R5cGU6InNldFRpdGxlIix0ZXh0OmFbcy0xXX1dO2JyZWFrO2Nhc2UgMjA6YVtzLTFdLnVuc2hpZnQoe3R5cGU6Imxvb3BTdGFydCIsbG9vcFRleHQ6ci5wYXJzZU1lc3NhZ2UoYVtzLTJdKSxzaWduYWxUeXBlOnIuTElORVRZUEUuTE9PUF9TVEFSVH0pLGFbcy0xXS5wdXNoKHt0eXBlOiJsb29wRW5kIixsb29wVGV4dDphW3MtMl0sc2lnbmFsVHlwZTpyLkxJTkVUWVBFLkxPT1BfRU5EfSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDIxOmFbcy0xXS51bnNoaWZ0KHt0eXBlOiJyZWN0U3RhcnQiLGNvbG9yOnIucGFyc2VNZXNzYWdlKGFbcy0yXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLlJFQ1RfU1RBUlR9KSxhW3MtMV0ucHVzaCh7dHlwZToicmVjdEVuZCIsY29sb3I6ci5wYXJzZU1lc3NhZ2UoYVtzLTJdKSxzaWduYWxUeXBlOnIuTElORVRZUEUuUkVDVF9FTkR9KSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgMjI6YVtzLTFdLnVuc2hpZnQoe3R5cGU6Im9wdFN0YXJ0IixvcHRUZXh0OnIucGFyc2VNZXNzYWdlKGFbcy0yXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLk9QVF9TVEFSVH0pLGFbcy0xXS5wdXNoKHt0eXBlOiJvcHRFbmQiLG9wdFRleHQ6ci5wYXJzZU1lc3NhZ2UoYVtzLTJdKSxzaWduYWxUeXBlOnIuTElORVRZUEUuT1BUX0VORH0pLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSAyMzphW3MtMV0udW5zaGlmdCh7dHlwZToiYWx0U3RhcnQiLGFsdFRleHQ6ci5wYXJzZU1lc3NhZ2UoYVtzLTJdKSxzaWduYWxUeXBlOnIuTElORVRZUEUuQUxUX1NUQVJUfSksYVtzLTFdLnB1c2goe3R5cGU6ImFsdEVuZCIsc2lnbmFsVHlwZTpyLkxJTkVUWVBFLkFMVF9FTkR9KSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgMjQ6YVtzLTFdLnVuc2hpZnQoe3R5cGU6InBhclN0YXJ0IixwYXJUZXh0OnIucGFyc2VNZXNzYWdlKGFbcy0yXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLlBBUl9TVEFSVH0pLGFbcy0xXS5wdXNoKHt0eXBlOiJwYXJFbmQiLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5QQVJfRU5EfSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDI3OnRoaXMuJD1hW3MtM10uY29uY2F0KFt7dHlwZToiYW5kIixwYXJUZXh0OnIucGFyc2VNZXNzYWdlKGFbcy0xXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLlBBUl9BTkR9LGFbc11dKTticmVhaztjYXNlIDI5OnRoaXMuJD1hW3MtM10uY29uY2F0KFt7dHlwZToiZWxzZSIsYWx0VGV4dDpyLnBhcnNlTWVzc2FnZShhW3MtMV0pLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5BTFRfRUxTRX0sYVtzXV0pO2JyZWFrO2Nhc2UgMzA6dGhpcy4kPVthW3MtMV0se3R5cGU6ImFkZE5vdGUiLHBsYWNlbWVudDphW3MtMl0sYWN0b3I6YVtzLTFdLmFjdG9yLHRleHQ6YVtzXX1dO2JyZWFrO2Nhc2UgMzE6YVtzLTJdPVtdLmNvbmNhdChhW3MtMV0sYVtzLTFdKS5zbGljZSgwLDIpLGFbcy0yXVswXT1hW3MtMl1bMF0uYWN0b3IsYVtzLTJdWzFdPWFbcy0yXVsxXS5hY3Rvcix0aGlzLiQ9W2Fbcy0xXSx7dHlwZToiYWRkTm90ZSIscGxhY2VtZW50OnIuUExBQ0VNRU5ULk9WRVIsYWN0b3I6YVtzLTJdLnNsaWNlKDAsMiksdGV4dDphW3NdfV07YnJlYWs7Y2FzZSAzNDp0aGlzLiQ9W2Fbcy0yXSxhW3NdXTticmVhaztjYXNlIDM1OnRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgMzY6dGhpcy4kPXIuUExBQ0VNRU5ULkxFRlRPRjticmVhaztjYXNlIDM3OnRoaXMuJD1yLlBMQUNFTUVOVC5SSUdIVE9GO2JyZWFrO2Nhc2UgMzg6dGhpcy4kPVthW3MtNF0sYVtzLTFdLHt0eXBlOiJhZGRNZXNzYWdlIixmcm9tOmFbcy00XS5hY3Rvcix0bzphW3MtMV0uYWN0b3Isc2lnbmFsVHlwZTphW3MtM10sbXNnOmFbc119LHt0eXBlOiJhY3RpdmVTdGFydCIsc2lnbmFsVHlwZTpyLkxJTkVUWVBFLkFDVElWRV9TVEFSVCxhY3RvcjphW3MtMV19XTticmVhaztjYXNlIDM5OnRoaXMuJD1bYVtzLTRdLGFbcy0xXSx7dHlwZToiYWRkTWVzc2FnZSIsZnJvbTphW3MtNF0uYWN0b3IsdG86YVtzLTFdLmFjdG9yLHNpZ25hbFR5cGU6YVtzLTNdLG1zZzphW3NdfSx7dHlwZToiYWN0aXZlRW5kIixzaWduYWxUeXBlOnIuTElORVRZUEUuQUNUSVZFX0VORCxhY3RvcjphW3MtNF19XTticmVhaztjYXNlIDQwOnRoaXMuJD1bYVtzLTNdLGFbcy0xXSx7dHlwZToiYWRkTWVzc2FnZSIsZnJvbTphW3MtM10uYWN0b3IsdG86YVtzLTFdLmFjdG9yLHNpZ25hbFR5cGU6YVtzLTJdLG1zZzphW3NdfV07YnJlYWs7Y2FzZSA0MTp0aGlzLiQ9e3R5cGU6ImFkZEFjdG9yIixhY3RvcjphW3NdfTticmVhaztjYXNlIDQyOnRoaXMuJD1yLkxJTkVUWVBFLlNPTElEX09QRU47YnJlYWs7Y2FzZSA0Mzp0aGlzLiQ9ci5MSU5FVFlQRS5ET1RURURfT1BFTjticmVhaztjYXNlIDQ0OnRoaXMuJD1yLkxJTkVUWVBFLlNPTElEO2JyZWFrO2Nhc2UgNDU6dGhpcy4kPXIuTElORVRZUEUuRE9UVEVEO2JyZWFrO2Nhc2UgNDY6dGhpcy4kPXIuTElORVRZUEUuU09MSURfQ1JPU1M7YnJlYWs7Y2FzZSA0Nzp0aGlzLiQ9ci5MSU5FVFlQRS5ET1RURURfQ1JPU1M7YnJlYWs7Y2FzZSA0ODp0aGlzLiQ9ci5MSU5FVFlQRS5TT0xJRF9QT0lOVDticmVhaztjYXNlIDQ5OnRoaXMuJD1yLkxJTkVUWVBFLkRPVFRFRF9QT0lOVDticmVhaztjYXNlIDUwOnRoaXMuJD1yLnBhcnNlTWVzc2FnZShhW3NdLnRyaW0oKS5zdWJzdHJpbmcoMSkpO2JyZWFrO2Nhc2UgNTE6ci5wYXJzZURpcmVjdGl2ZSgiJSV7Iiwib3Blbl9kaXJlY3RpdmUiKTticmVhaztjYXNlIDUyOnIucGFyc2VEaXJlY3RpdmUoYVtzXSwidHlwZV9kaXJlY3RpdmUiKTticmVhaztjYXNlIDUzOmFbc109YVtzXS50cmltKCkucmVwbGFjZSgvJy9nLCciJyksci5wYXJzZURpcmVjdGl2ZShhW3NdLCJhcmdfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA1NDpyLnBhcnNlRGlyZWN0aXZlKCJ9JSUiLCJjbG9zZV9kaXJlY3RpdmUiLCJzZXF1ZW5jZSIpfX0sdGFibGU6W3szOjEsNDplLDU6biw2OjQsNzpyLDExOjYsNTg6aX0sezE6WzNdfSx7Mzo4LDQ6ZSw1Om4sNjo0LDc6ciwxMTo2LDU4Oml9LHszOjksNDplLDU6biw2OjQsNzpyLDExOjYsNTg6aX0sezM6MTAsNDplLDU6biw2OjQsNzpyLDExOjYsNTg6aX0sdChbMSw0LDUsMTYsMjEsMjIsMjMsMjUsMjcsMjksMzAsMzEsMzMsMzcsNDgsNThdLGEsezg6MTF9KSx7MTI6MTIsNTk6WzEsMTNdfSx7NTk6WzIsNTFdfSx7MTpbMiwxXX0sezE6WzIsMl19LHsxOlsyLDNdfSx7MTpbMiw0XSw0Om8sNTpzLDY6MzAsOToxNCwxMDoxNiwxMTo2LDE2OmMsMTc6MzEsMjA6MTksMjE6dSwyMjpsLDIzOmgsMjQ6MjMsMjU6ZiwyNzpkLDI5OnAsMzA6eSwzMTpnLDMzOnYsMzc6bSw0ODpiLDU4Oml9LHsxMzozNCwxNDpbMSwzNV0sNjE6eH0sdChbMTQsNjFdLFsyLDUyXSksdChfLFsyLDZdKSx7NjozMCwxMDozNywxMTo2LDE2OmMsMTc6MzEsMjA6MTksMjE6dSwyMjpsLDIzOmgsMjQ6MjMsMjU6ZiwyNzpkLDI5OnAsMzA6eSwzMTpnLDMzOnYsMzc6bSw0ODpiLDU4Oml9LHQoXyxbMiw4XSksdChfLFsyLDldKSx7MTc6MzgsNDg6Yn0sezU6WzEsMzldfSx0KF8sWzIsMTVdKSx7MTc6NDAsNDg6Yn0sezE3OjQxLDQ4OmJ9LHs1OlsxLDQyXX0sezI2OjQzLDU3Omt9LHsxOTpbMSw0NV19LHsxOTpbMSw0Nl19LHsxOTpbMSw0N119LHsxOTpbMSw0OF19LHsxOTpbMSw0OV19LHQoXyxbMiwyNV0pLHs0NTo1MCw0OTpbMSw1MV0sNTA6WzEsNTJdLDUxOlsxLDUzXSw1MjpbMSw1NF0sNTM6WzEsNTVdLDU0OlsxLDU2XSw1NTpbMSw1N10sNTY6WzEsNThdfSx7Mzg6NTksMzk6WzEsNjBdLDQzOlsxLDYxXSw0NDpbMSw2Ml19LHQoWzUsMTgsNDIsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTddLFsyLDQxXSksezU6WzEsNjNdfSx7MTU6NjQsNjA6WzEsNjVdfSx7NTpbMiw1NF19LHQoXyxbMiw3XSksezU6WzEsNjddLDE4OlsxLDY2XX0sdChfLFsyLDE0XSksezU6WzEsNjhdfSx7NTpbMSw2OV19LHQoXyxbMiwxOF0pLHs1OlsxLDcwXX0sezU6WzIsNTBdfSx0KHcsYSx7ODo3MX0pLHQodyxhLHs4OjcyfSksdCh3LGEsezg6NzN9KSx0KEUsYSx7MzI6NzQsODo3NX0pLHQoVCxhLHszNDo3Niw4Ojc3fSksezE3OjgwLDQ2OlsxLDc4XSw0NzpbMSw3OV0sNDg6Yn0sdChDLFsyLDQyXSksdChDLFsyLDQzXSksdChDLFsyLDQ0XSksdChDLFsyLDQ1XSksdChDLFsyLDQ2XSksdChDLFsyLDQ3XSksdChDLFsyLDQ4XSksdChDLFsyLDQ5XSksezE3OjgxLDQ4OmJ9LHsxNzo4Myw0MDo4Miw0ODpifSx7NDg6WzIsMzZdfSx7NDg6WzIsMzddfSx0KFMsWzIsMTBdKSx7MTM6ODQsNjE6eH0sezYxOlsyLDUzXX0sezE5OlsxLDg1XX0sdChfLFsyLDEzXSksdChfLFsyLDE2XSksdChfLFsyLDE3XSksdChfLFsyLDE5XSksezQ6byw1OnMsNjozMCw5OjE0LDEwOjE2LDExOjYsMTY6YywxNzozMSwyMDoxOSwyMTp1LDIyOmwsMjM6aCwyNDoyMywyNTpmLDI3OmQsMjg6WzEsODZdLDI5OnAsMzA6eSwzMTpnLDMzOnYsMzc6bSw0ODpiLDU4Oml9LHs0Om8sNTpzLDY6MzAsOToxNCwxMDoxNiwxMTo2LDE2OmMsMTc6MzEsMjA6MTksMjE6dSwyMjpsLDIzOmgsMjQ6MjMsMjU6ZiwyNzpkLDI4OlsxLDg3XSwyOTpwLDMwOnksMzE6ZywzMzp2LDM3Om0sNDg6Yiw1ODppfSx7NDpvLDU6cyw2OjMwLDk6MTQsMTA6MTYsMTE6NiwxNjpjLDE3OjMxLDIwOjE5LDIxOnUsMjI6bCwyMzpoLDI0OjIzLDI1OmYsMjc6ZCwyODpbMSw4OF0sMjk6cCwzMDp5LDMxOmcsMzM6diwzNzptLDQ4OmIsNTg6aX0sezI4OlsxLDg5XX0sezQ6byw1OnMsNjozMCw5OjE0LDEwOjE2LDExOjYsMTY6YywxNzozMSwyMDoxOSwyMTp1LDIyOmwsMjM6aCwyNDoyMywyNTpmLDI3OmQsMjg6WzIsMjhdLDI5OnAsMzA6eSwzMTpnLDMzOnYsMzY6WzEsOTBdLDM3Om0sNDg6Yiw1ODppfSx7Mjg6WzEsOTFdfSx7NDpvLDU6cyw2OjMwLDk6MTQsMTA6MTYsMTE6NiwxNjpjLDE3OjMxLDIwOjE5LDIxOnUsMjI6bCwyMzpoLDI0OjIzLDI1OmYsMjc6ZCwyODpbMiwyNl0sMjk6cCwzMDp5LDMxOmcsMzM6diwzNTpbMSw5Ml0sMzc6bSw0ODpiLDU4Oml9LHsxNzo5Myw0ODpifSx7MTc6OTQsNDg6Yn0sezI2Ojk1LDU3Omt9LHsyNjo5Niw1NzprfSx7MjY6OTcsNTc6a30sezQyOlsxLDk4XSw1NzpbMiwzNV19LHs1OlsxLDk5XX0sezU6WzEsMTAwXX0sdChfLFsyLDIwXSksdChfLFsyLDIxXSksdChfLFsyLDIyXSksdChfLFsyLDIzXSksezE5OlsxLDEwMV19LHQoXyxbMiwyNF0pLHsxOTpbMSwxMDJdfSx7MjY6MTAzLDU3Omt9LHsyNjoxMDQsNTc6a30sezU6WzIsNDBdfSx7NTpbMiwzMF19LHs1OlsyLDMxXX0sezE3OjEwNSw0ODpifSx0KFMsWzIsMTFdKSx0KF8sWzIsMTJdKSx0KEUsYSx7ODo3NSwzMjoxMDZ9KSx0KFQsYSx7ODo3NywzNDoxMDd9KSx7NTpbMiwzOF19LHs1OlsyLDM5XX0sezU3OlsyLDM0XX0sezI4OlsyLDI5XX0sezI4OlsyLDI3XX1dLGRlZmF1bHRBY3Rpb25zOns3OlsyLDUxXSw4OlsyLDFdLDk6WzIsMl0sMTA6WzIsM10sMzY6WzIsNTRdLDQ0OlsyLDUwXSw2MTpbMiwzNl0sNjI6WzIsMzddLDY1OlsyLDUzXSw5NTpbMiw0MF0sOTY6WzIsMzBdLDk3OlsyLDMxXSwxMDM6WzIsMzhdLDEwNDpbMiwzOV0sMTA1OlsyLDM0XSwxMDY6WzIsMjldLDEwNzpbMiwyN119LHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighZS5yZWNvdmVyYWJsZSl7dmFyIG49bmV3IEVycm9yKHQpO3Rocm93IG4uaGFzaD1lLG59dGhpcy50cmFjZSh0KX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVswXSxyPVtdLGk9W251bGxdLGE9W10sbz10aGlzLnRhYmxlLHM9IiIsYz0wLHU9MCxsPTAsaD0yLGY9MSxkPWEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHk9e3l5Ont9fTtmb3IodmFyIGcgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxnKSYmKHkueXlbZ109dGhpcy55eVtnXSk7cC5zZXRJbnB1dCh0LHkueXkpLHkueXkubGV4ZXI9cCx5Lnl5LnBhcnNlcj10aGlzLHZvaWQgMD09PXAueXlsbG9jJiYocC55eWxsb2M9e30pO3ZhciB2PXAueXlsbG9jO2EucHVzaCh2KTt2YXIgbT1wLm9wdGlvbnMmJnAub3B0aW9ucy5yYW5nZXM7ZnVuY3Rpb24gYigpe3ZhciB0O3JldHVybiJudW1iZXIiIT10eXBlb2YodD1yLnBvcCgpfHxwLmxleCgpfHxmKSYmKHQgaW5zdGFuY2VvZiBBcnJheSYmKHQ9KHI9dCkucG9wKCkpLHQ9ZS5zeW1ib2xzX1t0XXx8dCksdH0iZnVuY3Rpb24iPT10eXBlb2YgeS55eS5wYXJzZUVycm9yP3RoaXMucGFyc2VFcnJvcj15Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Zvcih2YXIgeCxfLGssdyxFLFQsQyxTLEEsTT17fTs7KXtpZihrPW5bbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1trXT93PXRoaXMuZGVmYXVsdEFjdGlvbnNba106KG51bGw9PXgmJih4PWIoKSksdz1vW2tdJiZvW2tdW3hdKSx2b2lkIDA9PT13fHwhdy5sZW5ndGh8fCF3WzBdKXt2YXIgTz0iIjtmb3IoVCBpbiBBPVtdLG9ba10pdGhpcy50ZXJtaW5hbHNfW1RdJiZUPmgmJkEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW1RdKyInIik7Tz1wLnNob3dQb3NpdGlvbj8iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6XG4iK3Auc2hvd1Bvc2l0aW9uKCkrIlxuRXhwZWN0aW5nICIrQS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyI6IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOiBVbmV4cGVjdGVkICIrKHg9PWY/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIiksdGhpcy5wYXJzZUVycm9yKE8se3RleHQ6cC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19beF18fHgsbGluZTpwLnl5bGluZW5vLGxvYzp2LGV4cGVjdGVkOkF9KX1pZih3WzBdaW5zdGFuY2VvZiBBcnJheSYmdy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2srIiwgdG9rZW46ICIreCk7c3dpdGNoKHdbMF0pe2Nhc2UgMTpuLnB1c2goeCksaS5wdXNoKHAueXl0ZXh0KSxhLnB1c2gocC55eWxsb2MpLG4ucHVzaCh3WzFdKSx4PW51bGwsXz8oeD1fLF89bnVsbCk6KHU9cC55eWxlbmcscz1wLnl5dGV4dCxjPXAueXlsaW5lbm8sdj1wLnl5bGxvYyxsPjAmJmwtLSk7YnJlYWs7Y2FzZSAyOmlmKEM9dGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMV0sTS4kPWlbaS5sZW5ndGgtQ10sTS5fJD17Zmlyc3RfbGluZTphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YVthLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YVthLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sbSYmKE0uXyQucmFuZ2U9W2FbYS5sZW5ndGgtKEN8fDEpXS5yYW5nZVswXSxhW2EubGVuZ3RoLTFdLnJhbmdlWzFdXSksdm9pZCAwIT09KEU9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE0sW3MsdSxjLHkueXksd1sxXSxpLGFdLmNvbmNhdChkKSkpKXJldHVybiBFO0MmJihuPW4uc2xpY2UoMCwtMSpDKjIpLGk9aS5zbGljZSgwLC0xKkMpLGE9YS5zbGljZSgwLC0xKkMpKSxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMF0pLGkucHVzaChNLiQpLGEucHVzaChNLl8kKSxTPW9bbltuLmxlbmd0aC0yXV1bbltuLmxlbmd0aC0xXV0sbi5wdXNoKFMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxNPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm5leHQoKTtyZXR1cm4gdHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24odCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh0fHwwKSk+PTA/dGhpcy5jb25kaXRpb25TdGFja1t0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbih0KXt0aGlzLmJlZ2luKHQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIpe3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oIm9wZW5fZGlyZWN0aXZlIiksNTg7Y2FzZSAxOnJldHVybiB0aGlzLmJlZ2luKCJ0eXBlX2RpcmVjdGl2ZSIpLDU5O2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImFyZ19kaXJlY3RpdmUiKSwxNDtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksNjE7Y2FzZSA0OnJldHVybiA2MDtjYXNlIDU6cmV0dXJuIDU7Y2FzZSA2OmNhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6YnJlYWs7Y2FzZSAxMTpyZXR1cm4gdGhpcy5iZWdpbigiSUQiKSwxNjtjYXNlIDEyOnJldHVybiBlLnl5dGV4dD1lLnl5dGV4dC50cmltKCksdGhpcy5iZWdpbigiQUxJQVMiKSw0ODtjYXNlIDEzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oIkxJTkUiKSwxODtjYXNlIDE0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDU7Y2FzZSAxNTpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDI3O2Nhc2UgMTY6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwyOTtjYXNlIDE3OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksMzA7Y2FzZSAxODpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDMxO2Nhc2UgMTk6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwzNjtjYXNlIDIwOnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksMzM7Y2FzZSAyMTpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDM1O2Nhc2UgMjI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxOTtjYXNlIDIzOnJldHVybiAyODtjYXNlIDI0OnJldHVybiA0MztjYXNlIDI1OnJldHVybiA0NDtjYXNlIDI2OnJldHVybiAzOTtjYXNlIDI3OnJldHVybiAzNztjYXNlIDI4OnJldHVybiB0aGlzLmJlZ2luKCJJRCIpLDIyO2Nhc2UgMjk6cmV0dXJuIHRoaXMuYmVnaW4oIklEIiksMjM7Y2FzZSAzMDpyZXR1cm4gMjU7Y2FzZSAzMTpyZXR1cm4gNztjYXNlIDMyOnJldHVybiAyMTtjYXNlIDMzOnJldHVybiA0MjtjYXNlIDM0OnJldHVybiA1O2Nhc2UgMzU6cmV0dXJuIGUueXl0ZXh0PWUueXl0ZXh0LnRyaW0oKSw0ODtjYXNlIDM2OnJldHVybiA1MTtjYXNlIDM3OnJldHVybiA1MjtjYXNlIDM4OnJldHVybiA0OTtjYXNlIDM5OnJldHVybiA1MDtjYXNlIDQwOnJldHVybiA1MztjYXNlIDQxOnJldHVybiA1NDtjYXNlIDQyOnJldHVybiA1NTtjYXNlIDQzOnJldHVybiA1NjtjYXNlIDQ0OnJldHVybiA1NztjYXNlIDQ1OnJldHVybiA0NjtjYXNlIDQ2OnJldHVybiA0NztjYXNlIDQ3OnJldHVybiA1O2Nhc2UgNDg6cmV0dXJuIklOVkFMSUQifX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS9pLC9eKD86OikvaSwvXig/Olx9JSUpL2ksL14oPzooKD86KD8hXH0lJSkufFxuKSopKS9pLC9eKD86W1xuXSspL2ksL14oPzpccyspL2ksL14oPzooKD8hXG4pXHMpKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzolKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/OnBhcnRpY2lwYW50XGIpL2ksL14oPzpbXlwtPjpcbiw7XSs/KD89KCg/IVxuKVxzKSthcyg/IVxuKVxzfFsjXG47XXwkKSkvaSwvXig/OmFzXGIpL2ksL14oPzooPzopKS9pLC9eKD86bG9vcFxiKS9pLC9eKD86cmVjdFxiKS9pLC9eKD86b3B0XGIpL2ksL14oPzphbHRcYikvaSwvXig/OmVsc2VcYikvaSwvXig/OnBhclxiKS9pLC9eKD86YW5kXGIpL2ksL14oPzooPzpbOl0/KD86bm8pP3dyYXApP1teI1xuO10qKS9pLC9eKD86ZW5kXGIpL2ksL14oPzpsZWZ0IG9mXGIpL2ksL14oPzpyaWdodCBvZlxiKS9pLC9eKD86b3ZlclxiKS9pLC9eKD86bm90ZVxiKS9pLC9eKD86YWN0aXZhdGVcYikvaSwvXig/OmRlYWN0aXZhdGVcYikvaSwvXig/OnRpdGxlXGIpL2ksL14oPzpzZXF1ZW5jZURpYWdyYW1cYikvaSwvXig/OmF1dG9udW1iZXJcYikvaSwvXig/OiwpL2ksL14oPzo7KS9pLC9eKD86W15cK1wtPjpcbiw7XSsoKD8hKC14fC0teHwtXCl8LS1cKSkpW1wtXSpbXlwrXC0+OlxuLDtdKykqKS9pLC9eKD86LT4+KS9pLC9eKD86LS0+PikvaSwvXig/Oi0+KS9pLC9eKD86LS0+KS9pLC9eKD86LVt4XSkvaSwvXig/Oi0tW3hdKS9pLC9eKD86LVtcKV0pL2ksL14oPzotLVtcKV0pL2ksL14oPzo6KD86KD86bm8pP3dyYXApP1teI1xuO10rKS9pLC9eKD86XCspL2ksL14oPzotKS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e29wZW5fZGlyZWN0aXZlOntydWxlczpbMSw4XSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbMiwzLDhdLGluY2x1c2l2ZTohMX0sYXJnX2RpcmVjdGl2ZTp7cnVsZXM6WzMsNCw4XSxpbmNsdXNpdmU6ITF9LElEOntydWxlczpbNyw4LDEyXSxpbmNsdXNpdmU6ITF9LEFMSUFTOntydWxlczpbNyw4LDEzLDE0XSxpbmNsdXNpdmU6ITF9LExJTkU6e3J1bGVzOls3LDgsMjJdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsNSw2LDgsOSwxMCwxMSwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OF0saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIE8oKXt0aGlzLnl5PXt9fXJldHVybiBBLmxleGVyPU0sTy5wcm90b3R5cGU9QSxBLlBhcnNlcj1PLG5ldyBPfSgpO2UucGFyc2VyPWksZS5QYXJzZXI9aS5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiBpLnBhcnNlLmFwcGx5KGksYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHIpe3JbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrclswXSsiIEZJTEUiKSx0LmV4aXQoMSkpO3ZhciBpPW4oMTcpLnJlYWRGaWxlU3luYyhuKDE4KS5ub3JtYWxpemUoclsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2UoaSl9LG4uY1tuLnNdPT09ciYmZS5tYWluKHQuYXJndi5zbGljZSgxKSl9KS5jYWxsKHRoaXMsbigxMSksbig2KSh0KSl9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE5OSk7dC5leHBvcnRzPXtHcmFwaDpyLkdyYXBoLGpzb246bigzMDIpLGFsZzpuKDMwMyksdmVyc2lvbjpyLnZlcnNpb259fSxmdW5jdGlvbih0LGUsbil7dmFyIHI7dHJ5e3I9e2Nsb25lRGVlcDpuKDMxNCksY29uc3RhbnQ6big4NyksZGVmYXVsdHM6bigxNTUpLGVhY2g6big4OCksZmlsdGVyOm4oMTI5KSxmaW5kOm4oMzE1KSxmbGF0dGVuOm4oMTU3KSxmb3JFYWNoOm4oMTI3KSxmb3JJbjpuKDMyMCksaGFzOm4oOTQpLGlzVW5kZWZpbmVkOm4oMTQwKSxsYXN0Om4oMzIxKSxtYXA6bigxNDEpLG1hcFZhbHVlczpuKDMyMiksbWF4Om4oMzIzKSxtZXJnZTpuKDMyNSksbWluOm4oMzMwKSxtaW5CeTpuKDMzMSksbm93Om4oMzMyKSxwaWNrOm4oMTYyKSxyYW5nZTpuKDE2MykscmVkdWNlOm4oMTQzKSxzb3J0Qnk6bigzMzkpLHVuaXF1ZUlkOm4oMTY0KSx2YWx1ZXM6bigxNDgpLHppcE9iamVjdDpuKDM0NCl9fWNhdGNoKHQpe31yfHwocj13aW5kb3cuXyksdC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSl7dmFyIG49QXJyYXkuaXNBcnJheTt0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQud2VicGFja1BvbHlmaWxsfHwodC5kZXByZWNhdGU9ZnVuY3Rpb24oKXt9LHQucGF0aHM9W10sdC5jaGlsZHJlbnx8KHQuY2hpbGRyZW49W10pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJsb2FkZWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0Lmx9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdC5pfX0pLHQud2VicGFja1BvbHlmaWxsPTEpLHR9fSxmdW5jdGlvbih0LGUsbil7Ci8qKgogKiBAbGljZW5zZQogKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBDaHJpcyBQZXR0aXR0CiAqCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwogKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwogKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogKgogKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgogKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KICoKICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQogKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KICogVEhFIFNPRlRXQVJFLgogKi8KdC5leHBvcnRzPXtncmFwaGxpYjpuKDMxMiksZGFncmU6bigxNTQpLGludGVyc2VjdDpuKDM2OSkscmVuZGVyOm4oMzcxKSx1dGlsOm4oMTQpLHZlcnNpb246bigzODMpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQpLGk9bigyMCkuR3JhcGg7ZnVuY3Rpb24gYSh0LGUsbixpKXt2YXIgYTtkb3thPXIudW5pcXVlSWQoaSl9d2hpbGUodC5oYXNOb2RlKGEpKTtyZXR1cm4gbi5kdW1teT1lLHQuc2V0Tm9kZShhLG4pLGF9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gci5tYXgoci5tYXAodC5ub2RlcygpLChmdW5jdGlvbihlKXt2YXIgbj10Lm5vZGUoZSkucmFuaztpZighci5pc1VuZGVmaW5lZChuKSlyZXR1cm4gbn0pKSl9dC5leHBvcnRzPXthZGREdW1teU5vZGU6YSxzaW1wbGlmeTpmdW5jdGlvbih0KXt2YXIgZT0obmV3IGkpLnNldEdyYXBoKHQuZ3JhcGgoKSk7cmV0dXJuIHIuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKG4pe2Uuc2V0Tm9kZShuLHQubm9kZShuKSl9KSksci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24obil7dmFyIHI9ZS5lZGdlKG4udixuLncpfHx7d2VpZ2h0OjAsbWlubGVuOjF9LGk9dC5lZGdlKG4pO2Uuc2V0RWRnZShuLnYsbi53LHt3ZWlnaHQ6ci53ZWlnaHQraS53ZWlnaHQsbWlubGVuOk1hdGgubWF4KHIubWlubGVuLGkubWlubGVuKX0pfSkpLGV9LGFzTm9uQ29tcG91bmRHcmFwaDpmdW5jdGlvbih0KXt2YXIgZT1uZXcgaSh7bXVsdGlncmFwaDp0LmlzTXVsdGlncmFwaCgpfSkuc2V0R3JhcGgodC5ncmFwaCgpKTtyZXR1cm4gci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7dC5jaGlsZHJlbihuKS5sZW5ndGh8fGUuc2V0Tm9kZShuLHQubm9kZShuKSl9KSksci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24obil7ZS5zZXRFZGdlKG4sdC5lZGdlKG4pKX0pKSxlfSxzdWNjZXNzb3JXZWlnaHRzOmZ1bmN0aW9uKHQpe3ZhciBlPXIubWFwKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49e307cmV0dXJuIHIuZm9yRWFjaCh0Lm91dEVkZ2VzKGUpLChmdW5jdGlvbihlKXtuW2Uud109KG5bZS53XXx8MCkrdC5lZGdlKGUpLndlaWdodH0pKSxufSkpO3JldHVybiByLnppcE9iamVjdCh0Lm5vZGVzKCksZSl9LHByZWRlY2Vzc29yV2VpZ2h0czpmdW5jdGlvbih0KXt2YXIgZT1yLm1hcCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXt9O3JldHVybiByLmZvckVhY2godC5pbkVkZ2VzKGUpLChmdW5jdGlvbihlKXtuW2Uudl09KG5bZS52XXx8MCkrdC5lZGdlKGUpLndlaWdodH0pKSxufSkpO3JldHVybiByLnppcE9iamVjdCh0Lm5vZGVzKCksZSl9LGludGVyc2VjdFJlY3Q6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk9dC54LGE9dC55LG89ZS54LWkscz1lLnktYSxjPXQud2lkdGgvMix1PXQuaGVpZ2h0LzI7aWYoIW8mJiFzKXRocm93IG5ldyBFcnJvcigiTm90IHBvc3NpYmxlIHRvIGZpbmQgaW50ZXJzZWN0aW9uIGluc2lkZSBvZiB0aGUgcmVjdGFuZ2xlIik7TWF0aC5hYnMocykqYz5NYXRoLmFicyhvKSp1PyhzPDAmJih1PS11KSxuPXUqby9zLHI9dSk6KG88MCYmKGM9LWMpLG49YyxyPWMqcy9vKTtyZXR1cm57eDppK24seTphK3J9fSxidWlsZExheWVyTWF0cml4OmZ1bmN0aW9uKHQpe3ZhciBlPXIubWFwKHIucmFuZ2Uobyh0KSsxKSwoZnVuY3Rpb24oKXtyZXR1cm5bXX0pKTtyZXR1cm4gci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7dmFyIGk9dC5ub2RlKG4pLGE9aS5yYW5rO3IuaXNVbmRlZmluZWQoYSl8fChlW2FdW2kub3JkZXJdPW4pfSkpLGV9LG5vcm1hbGl6ZVJhbmtzOmZ1bmN0aW9uKHQpe3ZhciBlPXIubWluKHIubWFwKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQubm9kZShlKS5yYW5rfSkpKTtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihuKXt2YXIgaT10Lm5vZGUobik7ci5oYXMoaSwicmFuayIpJiYoaS5yYW5rLT1lKX0pKX0scmVtb3ZlRW1wdHlSYW5rczpmdW5jdGlvbih0KXt2YXIgZT1yLm1pbihyLm1hcCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3JldHVybiB0Lm5vZGUoZSkucmFua30pKSksbj1bXTtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihyKXt2YXIgaT10Lm5vZGUocikucmFuay1lO25baV18fChuW2ldPVtdKSxuW2ldLnB1c2gocil9KSk7dmFyIGk9MCxhPXQuZ3JhcGgoKS5ub2RlUmFua0ZhY3RvcjtyLmZvckVhY2gobiwoZnVuY3Rpb24oZSxuKXtyLmlzVW5kZWZpbmVkKGUpJiZuJWEhPTA/LS1pOmkmJnIuZm9yRWFjaChlLChmdW5jdGlvbihlKXt0Lm5vZGUoZSkucmFuays9aX0pKX0pKX0sYWRkQm9yZGVyTm9kZTpmdW5jdGlvbih0LGUsbixyKXt2YXIgaT17d2lkdGg6MCxoZWlnaHQ6MH07YXJndW1lbnRzLmxlbmd0aD49NCYmKGkucmFuaz1uLGkub3JkZXI9cik7cmV0dXJuIGEodCwiYm9yZGVyIixpLGUpfSxtYXhSYW5rOm8scGFydGl0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIG49e2xoczpbXSxyaHM6W119O3JldHVybiByLmZvckVhY2godCwoZnVuY3Rpb24odCl7ZSh0KT9uLmxocy5wdXNoKHQpOm4ucmhzLnB1c2godCl9KSksbn0sdGltZTpmdW5jdGlvbih0LGUpe3ZhciBuPXIubm93KCk7dHJ5e3JldHVybiBlKCl9ZmluYWxseXtjb25zb2xlLmxvZyh0KyIgdGltZTogIisoci5ub3coKS1uKSsibXMiKX19LG5vdGltZTpmdW5jdGlvbih0LGUpe3JldHVybiBlKCl9fX0sZnVuY3Rpb24odCxlLG4pe3QuZXhwb3J0cz17Z3JhcGhsaWI6bigyMCksbGF5b3V0Om4oMzEzKSxkZWJ1ZzpuKDM2NyksdXRpbDp7dGltZTpuKDgpLnRpbWUsbm90aW1lOm4oOCkubm90aW1lfSx2ZXJzaW9uOm4oMzY4KX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTczKSxpPW4oMTc0KSxhPW4oMTc1KSxvPXtjaGFubmVsOnIuZGVmYXVsdCxsYW5nOmkuZGVmYXVsdCx1bml0OmEuZGVmYXVsdH07ZS5kZWZhdWx0PW99LGZ1bmN0aW9uKHQsZSl7dmFyIG4scixpPXQuZXhwb3J0cz17fTtmdW5jdGlvbiBhKCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gbygpe3Rocm93IG5ldyBFcnJvcigiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gcyh0KXtpZihuPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dCh0LDApO2lmKChuPT09YXx8IW4pJiZzZXRUaW1lb3V0KXJldHVybiBuPXNldFRpbWVvdXQsc2V0VGltZW91dCh0LDApO3RyeXtyZXR1cm4gbih0LDApfWNhdGNoKGUpe3RyeXtyZXR1cm4gbi5jYWxsKG51bGwsdCwwKX1jYXRjaChlKXtyZXR1cm4gbi5jYWxsKHRoaXMsdCwwKX19fSFmdW5jdGlvbigpe3RyeXtuPSJmdW5jdGlvbiI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6YX1jYXRjaCh0KXtuPWF9dHJ5e3I9ImZ1bmN0aW9uIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6b31jYXRjaCh0KXtyPW99fSgpO3ZhciBjLHU9W10sbD0hMSxoPS0xO2Z1bmN0aW9uIGYoKXtsJiZjJiYobD0hMSxjLmxlbmd0aD91PWMuY29uY2F0KHUpOmg9LTEsdS5sZW5ndGgmJmQoKSl9ZnVuY3Rpb24gZCgpe2lmKCFsKXt2YXIgdD1zKGYpO2w9ITA7Zm9yKHZhciBlPXUubGVuZ3RoO2U7KXtmb3IoYz11LHU9W107KytoPGU7KWMmJmNbaF0ucnVuKCk7aD0tMSxlPXUubGVuZ3RofWM9bnVsbCxsPSExLGZ1bmN0aW9uKHQpe2lmKHI9PT1jbGVhclRpbWVvdXQpcmV0dXJuIGNsZWFyVGltZW91dCh0KTtpZigocj09PW98fCFyKSYmY2xlYXJUaW1lb3V0KXJldHVybiByPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQodCk7dHJ5e3IodCl9Y2F0Y2goZSl7dHJ5e3JldHVybiByLmNhbGwobnVsbCx0KX1jYXRjaChlKXtyZXR1cm4gci5jYWxsKHRoaXMsdCl9fX0odCl9fWZ1bmN0aW9uIHAodCxlKXt0aGlzLmZ1bj10LHRoaXMuYXJyYXk9ZX1mdW5jdGlvbiB5KCl7fWkubmV4dFRpY2s9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuLTFdPWFyZ3VtZW50c1tuXTt1LnB1c2gobmV3IHAodCxlKSksMSE9PXUubGVuZ3RofHxsfHxzKGQpfSxwLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfSxpLnRpdGxlPSJicm93c2VyIixpLmJyb3dzZXI9ITAsaS5lbnY9e30saS5hcmd2PVtdLGkudmVyc2lvbj0iIixpLnZlcnNpb25zPXt9LGkub249eSxpLmFkZExpc3RlbmVyPXksaS5vbmNlPXksaS5vZmY9eSxpLnJlbW92ZUxpc3RlbmVyPXksaS5yZW1vdmVBbGxMaXN0ZW5lcnM9eSxpLmVtaXQ9eSxpLnByZXBlbmRMaXN0ZW5lcj15LGkucHJlcGVuZE9uY2VMaXN0ZW5lcj15LGkubGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3JldHVybltdfSxpLmJpbmRpbmc9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCIpfSxpLmN3ZD1mdW5jdGlvbigpe3JldHVybiIvIn0saS5jaGRpcj1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSxpLnVtYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI7dHJ5e3I9e2Nsb25lOm4oMjAwKSxjb25zdGFudDpuKDg3KSxlYWNoOm4oODgpLGZpbHRlcjpuKDEyOSksaGFzOm4oOTQpLGlzQXJyYXk6big1KSxpc0VtcHR5Om4oMjc3KSxpc0Z1bmN0aW9uOm4oMzgpLGlzVW5kZWZpbmVkOm4oMTQwKSxrZXlzOm4oMzApLG1hcDpuKDE0MSkscmVkdWNlOm4oMTQzKSxzaXplOm4oMjgwKSx0cmFuc2Zvcm06bigyODYpLHVuaW9uOm4oMjg3KSx2YWx1ZXM6bigxNDgpfX1jYXRjaCh0KXt9cnx8KHI9d2luZG93Ll8pLHQuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4gbnVsbCE9dCYmKCJvYmplY3QiPT1lfHwiZnVuY3Rpb24iPT1lKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQ0KTt0LmV4cG9ydHM9e2lzU3ViZ3JhcGg6ZnVuY3Rpb24odCxlKXtyZXR1cm4hIXQuY2hpbGRyZW4oZSkubGVuZ3RofSxlZGdlVG9JZDpmdW5jdGlvbih0KXtyZXR1cm4gYSh0LnYpKyI6IithKHQudykrIjoiK2EodC5uYW1lKX0sYXBwbHlTdHlsZTpmdW5jdGlvbih0LGUpe2UmJnQuYXR0cigic3R5bGUiLGUpfSxhcHBseUNsYXNzOmZ1bmN0aW9uKHQsZSxuKXtlJiZ0LmF0dHIoImNsYXNzIixlKS5hdHRyKCJjbGFzcyIsbisiICIrdC5hdHRyKCJjbGFzcyIpKX0sYXBwbHlUcmFuc2l0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5ncmFwaCgpO2lmKHIuaXNQbGFpbk9iamVjdChuKSl7dmFyIGk9bi50cmFuc2l0aW9uO2lmKHIuaXNGdW5jdGlvbihpKSlyZXR1cm4gaSh0KX1yZXR1cm4gdH19O3ZhciBpPS86L2c7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdD9TdHJpbmcodCkucmVwbGFjZShpLCJcXDoiKToiIn19LGZ1bmN0aW9uKHQsZSxuKXsoZnVuY3Rpb24odCxyKXt2YXIgaT1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQsZSxuLHIpe2ZvcihuPW58fHt9LHI9dC5sZW5ndGg7ci0tO25bdFtyXV09ZSk7cmV0dXJuIG59LGU9WzEsN10sbj1bMSw2XSxyPVsxLDE0XSxpPVsxLDI1XSxhPVsxLDI4XSxvPVsxLDI2XSxzPVsxLDI3XSxjPVsxLDI5XSx1PVsxLDMwXSxsPVsxLDMxXSxoPVsxLDMyXSxmPVsxLDM1XSxkPVsxLDM2XSxwPVsxLDM3XSx5PVsxLDM4XSxnPVsxMCwxOV0sdj1bMSw1MF0sbT1bMSw1MV0sYj1bMSw1Ml0seD1bMSw1M10sXz1bMSw1NF0saz1bMSw1NV0sdz1bMTAsMTksMjYsMzMsMzQsNDIsNDUsNDYsNDcsNDgsNDksNTAsNTUsNTddLEU9WzEwLDE5LDI0LDI2LDMzLDM0LDM4LDQyLDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDU1LDU3LDcyLDczLDc0LDc1XSxUPVsxMCwxMywxNywxOV0sQz1bNDIsNzIsNzMsNzQsNzVdLFM9WzQyLDQ5LDUwLDcyLDczLDc0LDc1XSxBPVs0Miw0NSw0Niw0Nyw0OCw3Miw3Myw3NCw3NV0sTT1bMTAsMTksMjZdLE89WzEsODddLEI9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLG1lcm1haWREb2M6NCxkaXJlY3RpdmU6NSxncmFwaENvbmZpZzo2LG9wZW5EaXJlY3RpdmU6Nyx0eXBlRGlyZWN0aXZlOjgsY2xvc2VEaXJlY3RpdmU6OSxORVdMSU5FOjEwLCI6IjoxMSxhcmdEaXJlY3RpdmU6MTIsb3Blbl9kaXJlY3RpdmU6MTMsdHlwZV9kaXJlY3RpdmU6MTQsYXJnX2RpcmVjdGl2ZToxNSxjbG9zZV9kaXJlY3RpdmU6MTYsQ0xBU1NfRElBR1JBTToxNyxzdGF0ZW1lbnRzOjE4LEVPRjoxOSxzdGF0ZW1lbnQ6MjAsY2xhc3NOYW1lOjIxLGFscGhhTnVtVG9rZW46MjIsY2xhc3NMaXRlcmFsTmFtZToyMyxHRU5FUklDVFlQRToyNCxyZWxhdGlvblN0YXRlbWVudDoyNSxMQUJFTDoyNixjbGFzc1N0YXRlbWVudDoyNyxtZXRob2RTdGF0ZW1lbnQ6MjgsYW5ub3RhdGlvblN0YXRlbWVudDoyOSxjbGlja1N0YXRlbWVudDozMCxjc3NDbGFzc1N0YXRlbWVudDozMSxDTEFTUzozMixTVFlMRV9TRVBBUkFUT1I6MzMsU1RSVUNUX1NUQVJUOjM0LG1lbWJlcnM6MzUsU1RSVUNUX1NUT1A6MzYsQU5OT1RBVElPTl9TVEFSVDozNyxBTk5PVEFUSU9OX0VORDozOCxNRU1CRVI6MzksU0VQQVJBVE9SOjQwLHJlbGF0aW9uOjQxLFNUUjo0MixyZWxhdGlvblR5cGU6NDMsbGluZVR5cGU6NDQsQUdHUkVHQVRJT046NDUsRVhURU5TSU9OOjQ2LENPTVBPU0lUSU9OOjQ3LERFUEVOREVOQ1k6NDgsTElORTo0OSxET1RURURfTElORTo1MCxDQUxMQkFDSzo1MSxMSU5LOjUyLExJTktfVEFSR0VUOjUzLENMSUNLOjU0LENBTExCQUNLX05BTUU6NTUsQ0FMTEJBQ0tfQVJHUzo1NixIUkVGOjU3LENTU0NMQVNTOjU4LGNvbW1lbnRUb2tlbjo1OSx0ZXh0VG9rZW46NjAsZ3JhcGhDb2RlVG9rZW5zOjYxLHRleHROb1RhZ3NUb2tlbjo2MixUQUdTVEFSVDo2MyxUQUdFTkQ6NjQsIj09Ijo2NSwiLS0iOjY2LFBDVDo2NyxERUZBVUxUOjY4LFNQQUNFOjY5LE1JTlVTOjcwLGtleXdvcmRzOjcxLFVOSUNPREVfVEVYVDo3MixOVU06NzMsQUxQSEE6NzQsQlFVT1RFX1NUUjo3NSwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsMTA6Ik5FV0xJTkUiLDExOiI6IiwxMzoib3Blbl9kaXJlY3RpdmUiLDE0OiJ0eXBlX2RpcmVjdGl2ZSIsMTU6ImFyZ19kaXJlY3RpdmUiLDE2OiJjbG9zZV9kaXJlY3RpdmUiLDE3OiJDTEFTU19ESUFHUkFNIiwxOToiRU9GIiwyNDoiR0VORVJJQ1RZUEUiLDI2OiJMQUJFTCIsMzI6IkNMQVNTIiwzMzoiU1RZTEVfU0VQQVJBVE9SIiwzNDoiU1RSVUNUX1NUQVJUIiwzNjoiU1RSVUNUX1NUT1AiLDM3OiJBTk5PVEFUSU9OX1NUQVJUIiwzODoiQU5OT1RBVElPTl9FTkQiLDM5OiJNRU1CRVIiLDQwOiJTRVBBUkFUT1IiLDQyOiJTVFIiLDQ1OiJBR0dSRUdBVElPTiIsNDY6IkVYVEVOU0lPTiIsNDc6IkNPTVBPU0lUSU9OIiw0ODoiREVQRU5ERU5DWSIsNDk6IkxJTkUiLDUwOiJET1RURURfTElORSIsNTE6IkNBTExCQUNLIiw1MjoiTElOSyIsNTM6IkxJTktfVEFSR0VUIiw1NDoiQ0xJQ0siLDU1OiJDQUxMQkFDS19OQU1FIiw1NjoiQ0FMTEJBQ0tfQVJHUyIsNTc6IkhSRUYiLDU4OiJDU1NDTEFTUyIsNjE6ImdyYXBoQ29kZVRva2VucyIsNjM6IlRBR1NUQVJUIiw2NDoiVEFHRU5EIiw2NToiPT0iLDY2OiItLSIsNjc6IlBDVCIsNjg6IkRFRkFVTFQiLDY5OiJTUEFDRSIsNzA6Ik1JTlVTIiw3MToia2V5d29yZHMiLDcyOiJVTklDT0RFX1RFWFQiLDczOiJOVU0iLDc0OiJBTFBIQSIsNzU6IkJRVU9URV9TVFIifSxwcm9kdWN0aW9uc186WzAsWzMsMV0sWzMsMl0sWzQsMV0sWzUsNF0sWzUsNl0sWzcsMV0sWzgsMV0sWzEyLDFdLFs5LDFdLFs2LDRdLFsxOCwxXSxbMTgsMl0sWzE4LDNdLFsyMSwxXSxbMjEsMV0sWzIxLDJdLFsyMSwyXSxbMjEsMl0sWzIwLDFdLFsyMCwyXSxbMjAsMV0sWzIwLDFdLFsyMCwxXSxbMjAsMV0sWzIwLDFdLFsyMCwxXSxbMjcsMl0sWzI3LDRdLFsyNyw1XSxbMjcsN10sWzI5LDRdLFszNSwxXSxbMzUsMl0sWzI4LDFdLFsyOCwyXSxbMjgsMV0sWzI4LDFdLFsyNSwzXSxbMjUsNF0sWzI1LDRdLFsyNSw1XSxbNDEsM10sWzQxLDJdLFs0MSwyXSxbNDEsMV0sWzQzLDFdLFs0MywxXSxbNDMsMV0sWzQzLDFdLFs0NCwxXSxbNDQsMV0sWzMwLDNdLFszMCw0XSxbMzAsM10sWzMwLDRdLFszMCw0XSxbMzAsNV0sWzMwLDNdLFszMCw0XSxbMzAsNF0sWzMwLDVdLFszMCwzXSxbMzAsNF0sWzMwLDRdLFszMCw1XSxbMzEsM10sWzU5LDFdLFs1OSwxXSxbNjAsMV0sWzYwLDFdLFs2MCwxXSxbNjAsMV0sWzYwLDFdLFs2MCwxXSxbNjAsMV0sWzYyLDFdLFs2MiwxXSxbNjIsMV0sWzYyLDFdLFsyMiwxXSxbMjIsMV0sWzIyLDFdLFsyMywxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyLGksYSxvKXt2YXIgcz1hLmxlbmd0aC0xO3N3aXRjaChpKXtjYXNlIDY6ci5wYXJzZURpcmVjdGl2ZSgiJSV7Iiwib3Blbl9kaXJlY3RpdmUiKTticmVhaztjYXNlIDc6ci5wYXJzZURpcmVjdGl2ZShhW3NdLCJ0eXBlX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgODphW3NdPWFbc10udHJpbSgpLnJlcGxhY2UoLycvZywnIicpLHIucGFyc2VEaXJlY3RpdmUoYVtzXSwiYXJnX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgOTpyLnBhcnNlRGlyZWN0aXZlKCJ9JSUiLCJjbG9zZV9kaXJlY3RpdmUiLCJjbGFzcyIpO2JyZWFrO2Nhc2UgMTQ6Y2FzZSAxNTp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDE2OnRoaXMuJD1hW3MtMV0rYVtzXTticmVhaztjYXNlIDE3OmNhc2UgMTg6dGhpcy4kPWFbcy0xXSsifiIrYVtzXTticmVhaztjYXNlIDE5OnIuYWRkUmVsYXRpb24oYVtzXSk7YnJlYWs7Y2FzZSAyMDphW3MtMV0udGl0bGU9ci5jbGVhbnVwTGFiZWwoYVtzXSksci5hZGRSZWxhdGlvbihhW3MtMV0pO2JyZWFrO2Nhc2UgMjc6ci5hZGRDbGFzcyhhW3NdKTticmVhaztjYXNlIDI4OnIuYWRkQ2xhc3MoYVtzLTJdKSxyLnNldENzc0NsYXNzKGFbcy0yXSxhW3NdKTticmVhaztjYXNlIDI5OnIuYWRkQ2xhc3MoYVtzLTNdKSxyLmFkZE1lbWJlcnMoYVtzLTNdLGFbcy0xXSk7YnJlYWs7Y2FzZSAzMDpyLmFkZENsYXNzKGFbcy01XSksci5zZXRDc3NDbGFzcyhhW3MtNV0sYVtzLTNdKSxyLmFkZE1lbWJlcnMoYVtzLTVdLGFbcy0xXSk7YnJlYWs7Y2FzZSAzMTpyLmFkZEFubm90YXRpb24oYVtzXSxhW3MtMl0pO2JyZWFrO2Nhc2UgMzI6dGhpcy4kPVthW3NdXTticmVhaztjYXNlIDMzOmFbc10ucHVzaChhW3MtMV0pLHRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgMzQ6YnJlYWs7Y2FzZSAzNTpyLmFkZE1lbWJlcihhW3MtMV0sci5jbGVhbnVwTGFiZWwoYVtzXSkpO2JyZWFrO2Nhc2UgMzY6Y2FzZSAzNzpicmVhaztjYXNlIDM4OnRoaXMuJD17aWQxOmFbcy0yXSxpZDI6YVtzXSxyZWxhdGlvbjphW3MtMV0scmVsYXRpb25UaXRsZTE6Im5vbmUiLHJlbGF0aW9uVGl0bGUyOiJub25lIn07YnJlYWs7Y2FzZSAzOTp0aGlzLiQ9e2lkMTphW3MtM10saWQyOmFbc10scmVsYXRpb246YVtzLTFdLHJlbGF0aW9uVGl0bGUxOmFbcy0yXSxyZWxhdGlvblRpdGxlMjoibm9uZSJ9O2JyZWFrO2Nhc2UgNDA6dGhpcy4kPXtpZDE6YVtzLTNdLGlkMjphW3NdLHJlbGF0aW9uOmFbcy0yXSxyZWxhdGlvblRpdGxlMToibm9uZSIscmVsYXRpb25UaXRsZTI6YVtzLTFdfTticmVhaztjYXNlIDQxOnRoaXMuJD17aWQxOmFbcy00XSxpZDI6YVtzXSxyZWxhdGlvbjphW3MtMl0scmVsYXRpb25UaXRsZTE6YVtzLTNdLHJlbGF0aW9uVGl0bGUyOmFbcy0xXX07YnJlYWs7Y2FzZSA0Mjp0aGlzLiQ9e3R5cGUxOmFbcy0yXSx0eXBlMjphW3NdLGxpbmVUeXBlOmFbcy0xXX07YnJlYWs7Y2FzZSA0Mzp0aGlzLiQ9e3R5cGUxOiJub25lIix0eXBlMjphW3NdLGxpbmVUeXBlOmFbcy0xXX07YnJlYWs7Y2FzZSA0NDp0aGlzLiQ9e3R5cGUxOmFbcy0xXSx0eXBlMjoibm9uZSIsbGluZVR5cGU6YVtzXX07YnJlYWs7Y2FzZSA0NTp0aGlzLiQ9e3R5cGUxOiJub25lIix0eXBlMjoibm9uZSIsbGluZVR5cGU6YVtzXX07YnJlYWs7Y2FzZSA0Njp0aGlzLiQ9ci5yZWxhdGlvblR5cGUuQUdHUkVHQVRJT047YnJlYWs7Y2FzZSA0Nzp0aGlzLiQ9ci5yZWxhdGlvblR5cGUuRVhURU5TSU9OO2JyZWFrO2Nhc2UgNDg6dGhpcy4kPXIucmVsYXRpb25UeXBlLkNPTVBPU0lUSU9OO2JyZWFrO2Nhc2UgNDk6dGhpcy4kPXIucmVsYXRpb25UeXBlLkRFUEVOREVOQ1k7YnJlYWs7Y2FzZSA1MDp0aGlzLiQ9ci5saW5lVHlwZS5MSU5FO2JyZWFrO2Nhc2UgNTE6dGhpcy4kPXIubGluZVR5cGUuRE9UVEVEX0xJTkU7YnJlYWs7Y2FzZSA1MjpjYXNlIDU4OnRoaXMuJD1hW3MtMl0sci5zZXRDbGlja0V2ZW50KGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDUzOmNhc2UgNTk6dGhpcy4kPWFbcy0zXSxyLnNldENsaWNrRXZlbnQoYVtzLTJdLGFbcy0xXSksci5zZXRUb29sdGlwKGFbcy0yXSxhW3NdKTticmVhaztjYXNlIDU0OmNhc2UgNjI6dGhpcy4kPWFbcy0yXSxyLnNldExpbmsoYVtzLTFdLGFbc10pO2JyZWFrO2Nhc2UgNTU6dGhpcy4kPWFbcy0zXSxyLnNldExpbmsoYVtzLTJdLGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDU2OmNhc2UgNjQ6dGhpcy4kPWFbcy0zXSxyLnNldExpbmsoYVtzLTJdLGFbcy0xXSksci5zZXRUb29sdGlwKGFbcy0yXSxhW3NdKTticmVhaztjYXNlIDU3OmNhc2UgNjU6dGhpcy4kPWFbcy00XSxyLnNldExpbmsoYVtzLTNdLGFbcy0yXSxhW3NdKSxyLnNldFRvb2x0aXAoYVtzLTNdLGFbcy0xXSk7YnJlYWs7Y2FzZSA2MDp0aGlzLiQ9YVtzLTNdLHIuc2V0Q2xpY2tFdmVudChhW3MtMl0sYVtzLTFdLGFbc10pO2JyZWFrO2Nhc2UgNjE6dGhpcy4kPWFbcy00XSxyLnNldENsaWNrRXZlbnQoYVtzLTNdLGFbcy0yXSxhW3MtMV0pLHIuc2V0VG9vbHRpcChhW3MtM10sYVtzXSk7YnJlYWs7Y2FzZSA2Mzp0aGlzLiQ9YVtzLTNdLHIuc2V0TGluayhhW3MtMl0sYVtzLTFdLGFbc10pO2JyZWFrO2Nhc2UgNjY6ci5zZXRDc3NDbGFzcyhhW3MtMV0sYVtzXSl9fSx0YWJsZTpbezM6MSw0OjIsNTozLDY6NCw3OjUsMTM6ZSwxNzpufSx7MTpbM119LHsxOlsyLDFdfSx7Mzo4LDQ6Miw1OjMsNjo0LDc6NSwxMzplLDE3Om59LHsxOlsyLDNdfSx7ODo5LDE0OlsxLDEwXX0sezEwOlsxLDExXX0sezE0OlsyLDZdfSx7MTpbMiwyXX0sezk6MTIsMTE6WzEsMTNdLDE2OnJ9LHQoWzExLDE2XSxbMiw3XSksezU6MjMsNzo1LDEzOmUsMTg6MTUsMjA6MTYsMjE6MjQsMjI6MzMsMjM6MzQsMjU6MTcsMjc6MTgsMjg6MTksMjk6MjAsMzA6MjEsMzE6MjIsMzI6aSwzNzphLDM5Om8sNDA6cyw1MTpjLDUyOnUsNTQ6bCw1ODpoLDcyOmYsNzM6ZCw3NDpwLDc1Onl9LHsxMDpbMSwzOV19LHsxMjo0MCwxNTpbMSw0MV19LHsxMDpbMiw5XX0sezE5OlsxLDQyXX0sezEwOlsxLDQzXSwxOTpbMiwxMV19LHQoZyxbMiwxOV0sezI2OlsxLDQ0XX0pLHQoZyxbMiwyMV0pLHQoZyxbMiwyMl0pLHQoZyxbMiwyM10pLHQoZyxbMiwyNF0pLHQoZyxbMiwyNV0pLHQoZyxbMiwyNl0pLHQoZyxbMiwzNF0sezQxOjQ1LDQzOjQ4LDQ0OjQ5LDI2OlsxLDQ3XSw0MjpbMSw0Nl0sNDU6diw0NjptLDQ3OmIsNDg6eCw0OTpfLDUwOmt9KSx7MjE6NTYsMjI6MzMsMjM6MzQsNzI6Ziw3MzpkLDc0OnAsNzU6eX0sdChnLFsyLDM2XSksdChnLFsyLDM3XSksezIyOjU3LDcyOmYsNzM6ZCw3NDpwfSx7MjE6NTgsMjI6MzMsMjM6MzQsNzI6Ziw3MzpkLDc0OnAsNzU6eX0sezIxOjU5LDIyOjMzLDIzOjM0LDcyOmYsNzM6ZCw3NDpwLDc1Onl9LHsyMTo2MCwyMjozMywyMzozNCw3MjpmLDczOmQsNzQ6cCw3NTp5fSx7NDI6WzEsNjFdfSx0KHcsWzIsMTRdLHsyMjozMywyMzozNCwyMTo2MiwyNDpbMSw2M10sNzI6Ziw3MzpkLDc0OnAsNzU6eX0pLHQodyxbMiwxNV0sezI0OlsxLDY0XX0pLHQoRSxbMiw4MF0pLHQoRSxbMiw4MV0pLHQoRSxbMiw4Ml0pLHQoWzEwLDE5LDI0LDI2LDMzLDM0LDQyLDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDU1LDU3XSxbMiw4M10pLHQoVCxbMiw0XSksezk6NjUsMTY6cn0sezE2OlsyLDhdfSx7MTpbMiwxMF19LHs1OjIzLDc6NSwxMzplLDE4OjY2LDE5OlsyLDEyXSwyMDoxNiwyMToyNCwyMjozMywyMzozNCwyNToxNywyNzoxOCwyODoxOSwyOToyMCwzMDoyMSwzMToyMiwzMjppLDM3OmEsMzk6byw0MDpzLDUxOmMsNTI6dSw1NDpsLDU4OmgsNzI6Ziw3MzpkLDc0OnAsNzU6eX0sdChnLFsyLDIwXSksezIxOjY3LDIyOjMzLDIzOjM0LDQyOlsxLDY4XSw3MjpmLDczOmQsNzQ6cCw3NTp5fSx7NDE6NjksNDM6NDgsNDQ6NDksNDU6diw0NjptLDQ3OmIsNDg6eCw0OTpfLDUwOmt9LHQoZyxbMiwzNV0pLHs0NDo3MCw0OTpfLDUwOmt9LHQoQyxbMiw0NV0sezQzOjcxLDQ1OnYsNDY6bSw0NzpiLDQ4Onh9KSx0KFMsWzIsNDZdKSx0KFMsWzIsNDddKSx0KFMsWzIsNDhdKSx0KFMsWzIsNDldKSx0KEEsWzIsNTBdKSx0KEEsWzIsNTFdKSx0KGcsWzIsMjddLHszMzpbMSw3Ml0sMzQ6WzEsNzNdfSksezM4OlsxLDc0XX0sezQyOlsxLDc1XX0sezQyOlsxLDc2XX0sezU1OlsxLDc3XSw1NzpbMSw3OF19LHsyMjo3OSw3MjpmLDczOmQsNzQ6cH0sdCh3LFsyLDE2XSksdCh3LFsyLDE3XSksdCh3LFsyLDE4XSksezEwOlsxLDgwXX0sezE5OlsyLDEzXX0sdChNLFsyLDM4XSksezIxOjgxLDIyOjMzLDIzOjM0LDcyOmYsNzM6ZCw3NDpwLDc1Onl9LHsyMTo4MiwyMjozMywyMzozNCw0MjpbMSw4M10sNzI6Ziw3MzpkLDc0OnAsNzU6eX0sdChDLFsyLDQ0XSx7NDM6ODQsNDU6diw0NjptLDQ3OmIsNDg6eH0pLHQoQyxbMiw0M10pLHsyMjo4NSw3MjpmLDczOmQsNzQ6cH0sezM1Ojg2LDM5Ok99LHsyMTo4OCwyMjozMywyMzozNCw3MjpmLDczOmQsNzQ6cCw3NTp5fSx0KGcsWzIsNTJdLHs0MjpbMSw4OV19KSx0KGcsWzIsNTRdLHs0MjpbMSw5MV0sNTM6WzEsOTBdfSksdChnLFsyLDU4XSx7NDI6WzEsOTJdLDU2OlsxLDkzXX0pLHQoZyxbMiw2Ml0sezQyOlsxLDk1XSw1MzpbMSw5NF19KSx0KGcsWzIsNjZdKSx0KFQsWzIsNV0pLHQoTSxbMiw0MF0pLHQoTSxbMiwzOV0pLHsyMTo5NiwyMjozMywyMzozNCw3MjpmLDczOmQsNzQ6cCw3NTp5fSx0KEMsWzIsNDJdKSx0KGcsWzIsMjhdLHszNDpbMSw5N119KSx7MzY6WzEsOThdfSx7MzU6OTksMzY6WzIsMzJdLDM5Ok99LHQoZyxbMiwzMV0pLHQoZyxbMiw1M10pLHQoZyxbMiw1NV0pLHQoZyxbMiw1Nl0sezUzOlsxLDEwMF19KSx0KGcsWzIsNTldKSx0KGcsWzIsNjBdLHs0MjpbMSwxMDFdfSksdChnLFsyLDYzXSksdChnLFsyLDY0XSx7NTM6WzEsMTAyXX0pLHQoTSxbMiw0MV0pLHszNToxMDMsMzk6T30sdChnLFsyLDI5XSksezM2OlsyLDMzXX0sdChnLFsyLDU3XSksdChnLFsyLDYxXSksdChnLFsyLDY1XSksezM2OlsxLDEwNF19LHQoZyxbMiwzMF0pXSxkZWZhdWx0QWN0aW9uczp7MjpbMiwxXSw0OlsyLDNdLDc6WzIsNl0sODpbMiwyXSwxNDpbMiw5XSw0MTpbMiw4XSw0MjpbMiwxMF0sNjY6WzIsMTNdLDk5OlsyLDMzXX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsdT0wLGw9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlcikseT17eXk6e319O2Zvcih2YXIgZyBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGcpJiYoeS55eVtnXT10aGlzLnl5W2ddKTtwLnNldElucHV0KHQseS55eSkseS55eS5sZXhlcj1wLHkueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIHY9cC55eWxsb2M7YS5wdXNoKHYpO3ZhciBtPXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiBiKCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiB5Lnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPXkueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciB4LF8sayx3LEUsVCxDLFMsQSxNPXt9Ozspe2lmKGs9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2tdP3c9dGhpcy5kZWZhdWx0QWN0aW9uc1trXToobnVsbD09eCYmKHg9YigpKSx3PW9ba10mJm9ba11beF0pLHZvaWQgMD09PXd8fCF3Lmxlbmd0aHx8IXdbMF0pe3ZhciBPPSIiO2ZvcihUIGluIEE9W10sb1trXSl0aGlzLnRlcm1pbmFsc19bVF0mJlQ+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bVF0rIiciKTtPPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoeD09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoTyx7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1t4XXx8eCxsaW5lOnAueXlsaW5lbm8sbG9jOnYsZXhwZWN0ZWQ6QX0pfWlmKHdbMF1pbnN0YW5jZW9mIEFycmF5JiZ3Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIraysiLCB0b2tlbjogIit4KTtzd2l0Y2god1swXSl7Y2FzZSAxOm4ucHVzaCh4KSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKHdbMV0pLHg9bnVsbCxfPyh4PV8sXz1udWxsKToodT1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyx2PXAueXlsbG9jLGw+MCYmbC0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxtJiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oRT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyx1LGMseS55eSx3WzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIEU7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LE49e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighdGhpcy55eS5wYXJzZXIpdGhyb3cgbmV3IEVycm9yKHQpO3RoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IodCxlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy55eT1lfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD10LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2lucHV0WzBdO3JldHVybiB0aGlzLnl5dGV4dCs9dCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9dCx0aGlzLm1hdGNoZWQrPXQsdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHR9LHVucHV0OmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLG49dC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWUpLHRoaXMub2Zmc2V0LT1lO3ZhciByPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLG4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1uLmxlbmd0aC0xKTt2YXIgaT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46bj8obi5sZW5ndGg9PT1yLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrcltyLmxlbmd0aC1uLmxlbmd0aF0ubGVuZ3RoLW5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2lbMF0saVswXSt0aGlzLnl5bGVuZy1lXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcj8odGhpcy5fYmFja3RyYWNrPSEwLHRoaXMpOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxlc3M6ZnVuY3Rpb24odCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih0Lmxlbmd0aD4yMD8iLi4uIjoiIikrdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2g7cmV0dXJuIHQubGVuZ3RoPDIwJiYodCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdC5sZW5ndGgpKSwodC5zdWJzdHIoMCwyMCkrKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFzdElucHV0KCksZT1uZXcgQXJyYXkodC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB0K3RoaXMudXBjb21pbmdJbnB1dCgpKyJcbiIrZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGk9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoaS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSwocj10WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSkmJih0aGlzLnl5bGluZW5vKz1yLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnI/cltyLmxlbmd0aC0xXS5sZW5ndGgtcltyLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3RbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dFswXSx0aGlzLm1hdGNoKz10WzBdLHRoaXMubWF0Y2hlcz10LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXRbMF0sbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLG4pcmV0dXJuIG47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGEgaW4gaSl0aGlzW2FdPWlbYV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3ZhciB0LGUsbixyO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKSx0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBpPXRoaXMuX2N1cnJlbnRSdWxlcygpLGE9MDthPGkubGVuZ3RoO2ErKylpZigobj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2lbYV1dKSkmJighZXx8blswXS5sZW5ndGg+ZVswXS5sZW5ndGgpKXtpZihlPW4scj1hLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKCExIT09KHQ9dGhpcy50ZXN0X21hdGNoKG4saVthXSkpKXJldHVybiB0O2lmKHRoaXMuX2JhY2t0cmFjayl7ZT0hMTtjb250aW51ZX1yZXR1cm4hMX1pZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGU/ITEhPT0odD10aGlzLnRlc3RfbWF0Y2goZSxpW3JdKSkmJnQ6IiI9PT10aGlzLl9pbnB1dD90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFVucmVjb2duaXplZCB0ZXh0LlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubmV4dCgpO3JldHVybiB0fHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbih0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2godCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4odD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHR8fDApKT49MD90aGlzLmNvbmRpdGlvblN0YWNrW3RdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKHQpe3RoaXMuYmVnaW4odCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnt9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scil7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigib3Blbl9kaXJlY3RpdmUiKSwxMztjYXNlIDE6cmV0dXJuIHRoaXMuYmVnaW4oInR5cGVfZGlyZWN0aXZlIiksMTQ7Y2FzZSAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiYXJnX2RpcmVjdGl2ZSIpLDExO2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSwxNjtjYXNlIDQ6cmV0dXJuIDE1O2Nhc2UgNTpjYXNlIDY6YnJlYWs7Y2FzZSA3OnJldHVybiAxMDtjYXNlIDg6YnJlYWs7Y2FzZSA5OmNhc2UgMTA6cmV0dXJuIDE3O2Nhc2UgMTE6cmV0dXJuIHRoaXMuYmVnaW4oInN0cnVjdCIpLDM0O2Nhc2UgMTI6cmV0dXJuIkVPRl9JTl9TVFJVQ1QiO2Nhc2UgMTM6cmV0dXJuIk9QRU5fSU5fU1RSVUNUIjtjYXNlIDE0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMzY7Y2FzZSAxNTpicmVhaztjYXNlIDE2OnJldHVybiJNRU1CRVIiO2Nhc2UgMTc6cmV0dXJuIDMyO2Nhc2UgMTg6cmV0dXJuIDU4O2Nhc2UgMTk6cmV0dXJuIDUxO2Nhc2UgMjA6cmV0dXJuIDUyO2Nhc2UgMjE6cmV0dXJuIDU0O2Nhc2UgMjI6cmV0dXJuIDM3O2Nhc2UgMjM6cmV0dXJuIDM4O2Nhc2UgMjQ6dGhpcy5iZWdpbigiZ2VuZXJpYyIpO2JyZWFrO2Nhc2UgMjU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjY6cmV0dXJuIkdFTkVSSUNUWVBFIjtjYXNlIDI3OnRoaXMuYmVnaW4oInN0cmluZyIpO2JyZWFrO2Nhc2UgMjg6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjk6cmV0dXJuIlNUUiI7Y2FzZSAzMDp0aGlzLmJlZ2luKCJicXN0cmluZyIpO2JyZWFrO2Nhc2UgMzE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzI6cmV0dXJuIkJRVU9URV9TVFIiO2Nhc2UgMzM6dGhpcy5iZWdpbigiaHJlZiIpO2JyZWFrO2Nhc2UgMzQ6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzU6cmV0dXJuIDU3O2Nhc2UgMzY6dGhpcy5iZWdpbigiY2FsbGJhY2tfbmFtZSIpO2JyZWFrO2Nhc2UgMzc6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzg6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImNhbGxiYWNrX2FyZ3MiKTticmVhaztjYXNlIDM5OnJldHVybiA1NTtjYXNlIDQwOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDQxOnJldHVybiA1NjtjYXNlIDQyOmNhc2UgNDM6Y2FzZSA0NDpjYXNlIDQ1OnJldHVybiA1MztjYXNlIDQ2OmNhc2UgNDc6cmV0dXJuIDQ2O2Nhc2UgNDg6Y2FzZSA0OTpyZXR1cm4gNDg7Y2FzZSA1MDpyZXR1cm4gNDc7Y2FzZSA1MTpyZXR1cm4gNDU7Y2FzZSA1MjpyZXR1cm4gNDk7Y2FzZSA1MzpyZXR1cm4gNTA7Y2FzZSA1NDpyZXR1cm4gMjY7Y2FzZSA1NTpyZXR1cm4gMzM7Y2FzZSA1NjpyZXR1cm4gNzA7Y2FzZSA1NzpyZXR1cm4iRE9UIjtjYXNlIDU4OnJldHVybiJQTFVTIjtjYXNlIDU5OnJldHVybiA2NztjYXNlIDYwOmNhc2UgNjE6cmV0dXJuIkVRVUFMUyI7Y2FzZSA2MjpyZXR1cm4gNzQ7Y2FzZSA2MzpyZXR1cm4iUFVOQ1RVQVRJT04iO2Nhc2UgNjQ6cmV0dXJuIDczO2Nhc2UgNjU6cmV0dXJuIDcyO2Nhc2UgNjY6cmV0dXJuIDY5O2Nhc2UgNjc6cmV0dXJuIDE5fX0scnVsZXM6Wy9eKD86JSVceykvLC9eKD86KCg/Oig/IVx9JSUpW146Ll0pKikpLywvXig/OjopLywvXig/Olx9JSUpLywvXig/OigoPzooPyFcfSUlKS58XG4pKikpLywvXig/OiUlKD8hXHspKlteXG5dKihccj9cbj8pKykvLC9eKD86JSVbXlxuXSooXHI/XG4pKikvLC9eKD86KFxyP1xuKSspLywvXig/OlxzKykvLC9eKD86Y2xhc3NEaWFncmFtLXYyXGIpLywvXig/OmNsYXNzRGlhZ3JhbVxiKS8sL14oPzpbe10pLywvXig/OiQpLywvXig/Olt7XSkvLC9eKD86W31dKS8sL14oPzpbXG5dKS8sL14oPzpbXnt9XG5dKikvLC9eKD86Y2xhc3NcYikvLC9eKD86Y3NzQ2xhc3NcYikvLC9eKD86Y2FsbGJhY2tcYikvLC9eKD86bGlua1xiKS8sL14oPzpjbGlja1xiKS8sL14oPzo8PCkvLC9eKD86Pj4pLywvXig/Olt+XSkvLC9eKD86W35dKS8sL14oPzpbXn5dKikvLC9eKD86WyJdKS8sL14oPzpbIl0pLywvXig/OlteIl0qKS8sL14oPzpbYF0pLywvXig/OltgXSkvLC9eKD86W15gXSspLywvXig/OmhyZWZbXHNdK1siXSkvLC9eKD86WyJdKS8sL14oPzpbXiJdKikvLC9eKD86Y2FsbFtcc10rKS8sL14oPzpcKFtcc10qXCkpLywvXig/OlwoKS8sL14oPzpbXihdKikvLC9eKD86XCkpLywvXig/OlteKV0qKS8sL14oPzpfc2VsZlxiKS8sL14oPzpfYmxhbmtcYikvLC9eKD86X3BhcmVudFxiKS8sL14oPzpfdG9wXGIpLywvXig/OlxzKjxcfCkvLC9eKD86XHMqXHw+KS8sL14oPzpccyo+KS8sL14oPzpccyo8KS8sL14oPzpccypcKikvLC9eKD86XHMqb1xiKS8sL14oPzotLSkvLC9eKD86XC5cLikvLC9eKD86OnsxfVteOlxuO10rKS8sL14oPzo6ezN9KS8sL14oPzotKS8sL14oPzpcLikvLC9eKD86XCspLywvXig/OiUpLywvXig/Oj0pLywvXig/Oj0pLywvXig/Olx3KykvLC9eKD86WyEiIyQlJicqKywtLmA/XFwvXSkvLC9eKD86WzAtOV0rKS8sL14oPzpbXHUwMEFBXHUwMEI1XHUwMEJBXHUwMEMwLVx1MDBENlx1MDBEOC1cdTAwRjZdfFtcdTAwRjgtXHUwMkMxXHUwMkM2LVx1MDJEMVx1MDJFMC1cdTAyRTRcdTAyRUNcdTAyRUVcdTAzNzAtXHUwMzc0XHUwMzc2XHUwMzc3XXxbXHUwMzdBLVx1MDM3RFx1MDM4Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwM0ExXHUwM0EzLVx1MDNGNV18W1x1MDNGNy1cdTA0ODFcdTA0OEEtXHUwNTI3XHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1RDAtXHUwNUVBXXxbXHUwNUYwLVx1MDVGMlx1MDYyMC1cdTA2NEFcdTA2NkVcdTA2NkZcdTA2NzEtXHUwNkQzXHUwNkQ1XHUwNkU1XHUwNkU2XHUwNkVFXXxbXHUwNkVGXHUwNkZBLVx1MDZGQ1x1MDZGRlx1MDcxMFx1MDcxMi1cdTA3MkZcdTA3NEQtXHUwN0E1XHUwN0IxXHUwN0NBLVx1MDdFQV18W1x1MDdGNFx1MDdGNVx1MDdGQVx1MDgwMC1cdTA4MTVcdTA4MUFcdTA4MjRcdTA4MjhcdTA4NDAtXHUwODU4XHUwOEEwXXxbXHUwOEEyLVx1MDhBQ1x1MDkwNC1cdTA5MzlcdTA5M0RcdTA5NTBcdTA5NTgtXHUwOTYxXHUwOTcxLVx1MDk3N118W1x1MDk3OS1cdTA5N0ZcdTA5ODUtXHUwOThDXHUwOThGXHUwOTkwXHUwOTkzLVx1MDlBOFx1MDlBQS1cdTA5QjBcdTA5QjJdfFtcdTA5QjYtXHUwOUI5XHUwOUJEXHUwOUNFXHUwOURDXHUwOUREXHUwOURGLVx1MDlFMVx1MDlGMFx1MDlGMVx1MEEwNS1cdTBBMEFdfFtcdTBBMEZcdTBBMTBcdTBBMTMtXHUwQTI4XHUwQTJBLVx1MEEzMFx1MEEzMlx1MEEzM1x1MEEzNVx1MEEzNlx1MEEzOFx1MEEzOV18W1x1MEE1OS1cdTBBNUNcdTBBNUVcdTBBNzItXHUwQTc0XHUwQTg1LVx1MEE4RFx1MEE4Ri1cdTBBOTFcdTBBOTMtXHUwQUE4XXxbXHUwQUFBLVx1MEFCMFx1MEFCMlx1MEFCM1x1MEFCNS1cdTBBQjlcdTBBQkRcdTBBRDBcdTBBRTBcdTBBRTFcdTBCMDUtXHUwQjBDXXxbXHUwQjBGXHUwQjEwXHUwQjEzLVx1MEIyOFx1MEIyQS1cdTBCMzBcdTBCMzJcdTBCMzNcdTBCMzUtXHUwQjM5XHUwQjNEXHUwQjVDXXxbXHUwQjVEXHUwQjVGLVx1MEI2MVx1MEI3MVx1MEI4M1x1MEI4NS1cdTBCOEFcdTBCOEUtXHUwQjkwXHUwQjkyLVx1MEI5NVx1MEI5OV18W1x1MEI5QVx1MEI5Q1x1MEI5RVx1MEI5Rlx1MEJBM1x1MEJBNFx1MEJBOC1cdTBCQUFcdTBCQUUtXHUwQkI5XHUwQkQwXXxbXHUwQzA1LVx1MEMwQ1x1MEMwRS1cdTBDMTBcdTBDMTItXHUwQzI4XHUwQzJBLVx1MEMzM1x1MEMzNS1cdTBDMzlcdTBDM0RdfFtcdTBDNThcdTBDNTlcdTBDNjBcdTBDNjFcdTBDODUtXHUwQzhDXHUwQzhFLVx1MEM5MFx1MEM5Mi1cdTBDQThcdTBDQUEtXHUwQ0IzXXxbXHUwQ0I1LVx1MENCOVx1MENCRFx1MENERVx1MENFMFx1MENFMVx1MENGMVx1MENGMlx1MEQwNS1cdTBEMENcdTBEMEUtXHUwRDEwXXxbXHUwRDEyLVx1MEQzQVx1MEQzRFx1MEQ0RVx1MEQ2MFx1MEQ2MVx1MEQ3QS1cdTBEN0ZcdTBEODUtXHUwRDk2XHUwRDlBLVx1MERCMV18W1x1MERCMy1cdTBEQkJcdTBEQkRcdTBEQzAtXHUwREM2XHUwRTAxLVx1MEUzMFx1MEUzMlx1MEUzM1x1MEU0MC1cdTBFNDZcdTBFODFdfFtcdTBFODJcdTBFODRcdTBFODdcdTBFODhcdTBFOEFcdTBFOERcdTBFOTQtXHUwRTk3XHUwRTk5LVx1MEU5Rlx1MEVBMS1cdTBFQTNdfFtcdTBFQTVcdTBFQTdcdTBFQUFcdTBFQUJcdTBFQUQtXHUwRUIwXHUwRUIyXHUwRUIzXHUwRUJEXHUwRUMwLVx1MEVDNFx1MEVDNl18W1x1MEVEQy1cdTBFREZcdTBGMDBcdTBGNDAtXHUwRjQ3XHUwRjQ5LVx1MEY2Q1x1MEY4OC1cdTBGOENcdTEwMDAtXHUxMDJBXXxbXHUxMDNGXHUxMDUwLVx1MTA1NVx1MTA1QS1cdTEwNURcdTEwNjFcdTEwNjVcdTEwNjZcdTEwNkUtXHUxMDcwXHUxMDc1LVx1MTA4MV18W1x1MTA4RVx1MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0RcdTEwRDAtXHUxMEZBXHUxMEZDLVx1MTI0OFx1MTI0QS1cdTEyNERdfFtcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVBLVx1MTI1RFx1MTI2MC1cdTEyODhcdTEyOEEtXHUxMjhEXHUxMjkwLVx1MTJCMF18W1x1MTJCMi1cdTEyQjVcdTEyQjgtXHUxMkJFXHUxMkMwXHUxMkMyLVx1MTJDNVx1MTJDOC1cdTEyRDZcdTEyRDgtXHUxMzEwXXxbXHUxMzEyLVx1MTMxNVx1MTMxOC1cdTEzNUFcdTEzODAtXHUxMzhGXHUxM0EwLVx1MTNGNFx1MTQwMS1cdTE2NkNdfFtcdTE2NkYtXHUxNjdGXHUxNjgxLVx1MTY5QVx1MTZBMC1cdTE2RUFcdTE3MDAtXHUxNzBDXHUxNzBFLVx1MTcxMV18W1x1MTcyMC1cdTE3MzFcdTE3NDAtXHUxNzUxXHUxNzYwLVx1MTc2Q1x1MTc2RS1cdTE3NzBcdTE3ODAtXHUxN0IzXHUxN0Q3XXxbXHUxN0RDXHUxODIwLVx1MTg3N1x1MTg4MC1cdTE4QThcdTE4QUFcdTE4QjAtXHUxOEY1XHUxOTAwLVx1MTkxQ118W1x1MTk1MC1cdTE5NkRcdTE5NzAtXHUxOTc0XHUxOTgwLVx1MTlBQlx1MTlDMS1cdTE5QzdcdTFBMDAtXHUxQTE2XXxbXHUxQTIwLVx1MUE1NFx1MUFBN1x1MUIwNS1cdTFCMzNcdTFCNDUtXHUxQjRCXHUxQjgzLVx1MUJBMFx1MUJBRVx1MUJBRl18W1x1MUJCQS1cdTFCRTVcdTFDMDAtXHUxQzIzXHUxQzRELVx1MUM0Rlx1MUM1QS1cdTFDN0RcdTFDRTktXHUxQ0VDXXxbXHUxQ0VFLVx1MUNGMVx1MUNGNVx1MUNGNlx1MUQwMC1cdTFEQkZcdTFFMDAtXHUxRjE1XHUxRjE4LVx1MUYxRF18W1x1MUYyMC1cdTFGNDVcdTFGNDgtXHUxRjREXHUxRjUwLVx1MUY1N1x1MUY1OVx1MUY1Qlx1MUY1RFx1MUY1Ri1cdTFGN0RdfFtcdTFGODAtXHUxRkI0XHUxRkI2LVx1MUZCQ1x1MUZCRVx1MUZDMi1cdTFGQzRcdTFGQzYtXHUxRkNDXHUxRkQwLVx1MUZEM118W1x1MUZENi1cdTFGREJcdTFGRTAtXHUxRkVDXHUxRkYyLVx1MUZGNFx1MUZGNi1cdTFGRkNcdTIwNzFcdTIwN0ZdfFtcdTIwOTAtXHUyMDlDXHUyMTAyXHUyMTA3XHUyMTBBLVx1MjExM1x1MjExNVx1MjExOS1cdTIxMURcdTIxMjRcdTIxMjZcdTIxMjhdfFtcdTIxMkEtXHUyMTJEXHUyMTJGLVx1MjEzOVx1MjEzQy1cdTIxM0ZcdTIxNDUtXHUyMTQ5XHUyMTRFXHUyMTgzXHUyMTg0XXxbXHUyQzAwLVx1MkMyRVx1MkMzMC1cdTJDNUVcdTJDNjAtXHUyQ0U0XHUyQ0VCLVx1MkNFRVx1MkNGMlx1MkNGM118W1x1MkQwMC1cdTJEMjVcdTJEMjdcdTJEMkRcdTJEMzAtXHUyRDY3XHUyRDZGXHUyRDgwLVx1MkQ5Nlx1MkRBMC1cdTJEQTZdfFtcdTJEQTgtXHUyREFFXHUyREIwLVx1MkRCNlx1MkRCOC1cdTJEQkVcdTJEQzAtXHUyREM2XHUyREM4LVx1MkRDRV18W1x1MkREMC1cdTJERDZcdTJERDgtXHUyRERFXHUyRTJGXHUzMDA1XHUzMDA2XHUzMDMxLVx1MzAzNVx1MzAzQlx1MzAzQ118W1x1MzA0MS1cdTMwOTZcdTMwOUQtXHUzMDlGXHUzMEExLVx1MzBGQVx1MzBGQy1cdTMwRkZcdTMxMDUtXHUzMTJEXXxbXHUzMTMxLVx1MzE4RVx1MzFBMC1cdTMxQkFcdTMxRjAtXHUzMUZGXHUzNDAwLVx1NERCNVx1NEUwMC1cdTlGQ0NdfFtcdUEwMDAtXHVBNDhDXHVBNEQwLVx1QTRGRFx1QTUwMC1cdUE2MENcdUE2MTAtXHVBNjFGXHVBNjJBXHVBNjJCXXxbXHVBNjQwLVx1QTY2RVx1QTY3Ri1cdUE2OTdcdUE2QTAtXHVBNkU1XHVBNzE3LVx1QTcxRlx1QTcyMi1cdUE3ODhdfFtcdUE3OEItXHVBNzhFXHVBNzkwLVx1QTc5M1x1QTdBMC1cdUE3QUFcdUE3RjgtXHVBODAxXHVBODAzLVx1QTgwNV18W1x1QTgwNy1cdUE4MEFcdUE4MEMtXHVBODIyXHVBODQwLVx1QTg3M1x1QTg4Mi1cdUE4QjNcdUE4RjItXHVBOEY3XHVBOEZCXXxbXHVBOTBBLVx1QTkyNVx1QTkzMC1cdUE5NDZcdUE5NjAtXHVBOTdDXHVBOTg0LVx1QTlCMlx1QTlDRlx1QUEwMC1cdUFBMjhdfFtcdUFBNDAtXHVBQTQyXHVBQTQ0LVx1QUE0Qlx1QUE2MC1cdUFBNzZcdUFBN0FcdUFBODAtXHVBQUFGXHVBQUIxXHVBQUI1XXxbXHVBQUI2XHVBQUI5LVx1QUFCRFx1QUFDMFx1QUFDMlx1QUFEQi1cdUFBRERcdUFBRTAtXHVBQUVBXHVBQUYyLVx1QUFGNF18W1x1QUIwMS1cdUFCMDZcdUFCMDktXHVBQjBFXHVBQjExLVx1QUIxNlx1QUIyMC1cdUFCMjZcdUFCMjgtXHVBQjJFXXxbXHVBQkMwLVx1QUJFMlx1QUMwMC1cdUQ3QTNcdUQ3QjAtXHVEN0M2XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZBNkRdfFtcdUZBNzAtXHVGQUQ5XHVGQjAwLVx1RkIwNlx1RkIxMy1cdUZCMTdcdUZCMURcdUZCMUYtXHVGQjI4XHVGQjJBLVx1RkIzNl18W1x1RkIzOC1cdUZCM0NcdUZCM0VcdUZCNDBcdUZCNDFcdUZCNDNcdUZCNDRcdUZCNDYtXHVGQkIxXHVGQkQzLVx1RkQzRF18W1x1RkQ1MC1cdUZEOEZcdUZEOTItXHVGREM3XHVGREYwLVx1RkRGQlx1RkU3MC1cdUZFNzRcdUZFNzYtXHVGRUZDXXxbXHVGRjIxLVx1RkYzQVx1RkY0MS1cdUZGNUFcdUZGNjYtXHVGRkJFXHVGRkMyLVx1RkZDN1x1RkZDQS1cdUZGQ0ZdfFtcdUZGRDItXHVGRkQ3XHVGRkRBLVx1RkZEQ10pLywvXig/OlxzKS8sL14oPzokKS9dLGNvbmRpdGlvbnM6e2FyZ19kaXJlY3RpdmU6e3J1bGVzOlszLDRdLGluY2x1c2l2ZTohMX0sdHlwZV9kaXJlY3RpdmU6e3J1bGVzOlsyLDNdLGluY2x1c2l2ZTohMX0sb3Blbl9kaXJlY3RpdmU6e3J1bGVzOlsxXSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrX2FyZ3M6e3J1bGVzOls0MCw0MV0saW5jbHVzaXZlOiExfSxjYWxsYmFja19uYW1lOntydWxlczpbMzcsMzgsMzldLGluY2x1c2l2ZTohMX0saHJlZjp7cnVsZXM6WzM0LDM1XSxpbmNsdXNpdmU6ITF9LHN0cnVjdDp7cnVsZXM6WzEyLDEzLDE0LDE1LDE2XSxpbmNsdXNpdmU6ITF9LGdlbmVyaWM6e3J1bGVzOlsyNSwyNl0saW5jbHVzaXZlOiExfSxicXN0cmluZzp7cnVsZXM6WzMxLDMyXSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzI4LDI5XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDUsNiw3LDgsOSwxMCwxMSwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNywzMCwzMywzNiw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2N10saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIEQoKXt0aGlzLnl5PXt9fXJldHVybiBCLmxleGVyPU4sRC5wcm90b3R5cGU9QixCLlBhcnNlcj1ELG5ldyBEfSgpO2UucGFyc2VyPWksZS5QYXJzZXI9aS5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiBpLnBhcnNlLmFwcGx5KGksYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHIpe3JbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrclswXSsiIEZJTEUiKSx0LmV4aXQoMSkpO3ZhciBpPW4oMTcpLnJlYWRGaWxlU3luYyhuKDE4KS5ub3JtYWxpemUoclsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2UoaSl9LG4uY1tuLnNdPT09ciYmZS5tYWluKHQuYXJndi5zbGljZSgxKSl9KS5jYWxsKHRoaXMsbigxMSksbig2KSh0KSl9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oNzYpLGk9big5OSksYT1uKDE3OSksbz1uKDE4MCkscz1uKDE4MSksYz17Zm9ybWF0OntrZXl3b3JkOmEuZGVmYXVsdCxoZXg6aS5kZWZhdWx0LHJnYjpvLmRlZmF1bHQscmdiYTpvLmRlZmF1bHQsaHNsOnMuZGVmYXVsdCxoc2xhOnMuZGVmYXVsdH0scGFyc2U6ZnVuY3Rpb24odCl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXJldHVybiB0O3ZhciBlPWkuZGVmYXVsdC5wYXJzZSh0KXx8by5kZWZhdWx0LnBhcnNlKHQpfHxzLmRlZmF1bHQucGFyc2UodCl8fGEuZGVmYXVsdC5wYXJzZSh0KTtpZihlKXJldHVybiBlO3Rocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgY29sb3IgZm9ybWF0OiAiJyt0KyciJyl9LHN0cmluZ2lmeTpmdW5jdGlvbih0KXtyZXR1cm4hdC5jaGFuZ2VkJiZ0LmNvbG9yP3QuY29sb3I6dC50eXBlLmlzKHIuVFlQRS5IU0wpfHx2b2lkIDA9PT10LmRhdGEucj9zLmRlZmF1bHQuc3RyaW5naWZ5KHQpOnQuYTwxfHwhTnVtYmVyLmlzSW50ZWdlcih0LnIpfHwhTnVtYmVyLmlzSW50ZWdlcih0LmcpfHwhTnVtYmVyLmlzSW50ZWdlcih0LmIpP28uZGVmYXVsdC5zdHJpbmdpZnkodCk6aS5kZWZhdWx0LnN0cmluZ2lmeSh0KX19O2UuZGVmYXVsdD1jfSxmdW5jdGlvbih0LGUpe30sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbih0KXtmdW5jdGlvbiBuKHQsZSl7Zm9yKHZhciBuPTAscj10Lmxlbmd0aC0xO3I+PTA7ci0tKXt2YXIgaT10W3JdOyIuIj09PWk/dC5zcGxpY2UociwxKToiLi4iPT09aT8odC5zcGxpY2UociwxKSxuKyspOm4mJih0LnNwbGljZShyLDEpLG4tLSl9aWYoZSlmb3IoO24tLTtuKXQudW5zaGlmdCgiLi4iKTtyZXR1cm4gdH1mdW5jdGlvbiByKHQsZSl7aWYodC5maWx0ZXIpcmV0dXJuIHQuZmlsdGVyKGUpO2Zvcih2YXIgbj1bXSxyPTA7cjx0Lmxlbmd0aDtyKyspZSh0W3JdLHIsdCkmJm4ucHVzaCh0W3JdKTtyZXR1cm4gbn1lLnJlc29sdmU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9IiIsaT0hMSxhPWFyZ3VtZW50cy5sZW5ndGgtMTthPj0tMSYmIWk7YS0tKXt2YXIgbz1hPj0wP2FyZ3VtZW50c1thXTp0LmN3ZCgpO2lmKCJzdHJpbmciIT10eXBlb2Ygbyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncyIpO28mJihlPW8rIi8iK2UsaT0iLyI9PT1vLmNoYXJBdCgwKSl9cmV0dXJuKGk/Ii8iOiIiKSsoZT1uKHIoZS5zcGxpdCgiLyIpLChmdW5jdGlvbih0KXtyZXR1cm4hIXR9KSksIWkpLmpvaW4oIi8iKSl8fCIuIn0sZS5ub3JtYWxpemU9ZnVuY3Rpb24odCl7dmFyIGE9ZS5pc0Fic29sdXRlKHQpLG89Ii8iPT09aSh0LC0xKTtyZXR1cm4odD1uKHIodC5zcGxpdCgiLyIpLChmdW5jdGlvbih0KXtyZXR1cm4hIXR9KSksIWEpLmpvaW4oIi8iKSl8fGF8fCh0PSIuIiksdCYmbyYmKHQrPSIvIiksKGE/Ii8iOiIiKSt0fSxlLmlzQWJzb2x1dGU9ZnVuY3Rpb24odCl7cmV0dXJuIi8iPT09dC5jaGFyQXQoMCl9LGUuam9pbj1mdW5jdGlvbigpe3ZhciB0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtyZXR1cm4gZS5ub3JtYWxpemUocih0LChmdW5jdGlvbih0LGUpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncyIpO3JldHVybiB0fSkpLmpvaW4oIi8iKSl9LGUucmVsYXRpdmU9ZnVuY3Rpb24odCxuKXtmdW5jdGlvbiByKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGgmJiIiPT09dFtlXTtlKyspO2Zvcih2YXIgbj10Lmxlbmd0aC0xO24+PTAmJiIiPT09dFtuXTtuLS0pO3JldHVybiBlPm4/W106dC5zbGljZShlLG4tZSsxKX10PWUucmVzb2x2ZSh0KS5zdWJzdHIoMSksbj1lLnJlc29sdmUobikuc3Vic3RyKDEpO2Zvcih2YXIgaT1yKHQuc3BsaXQoIi8iKSksYT1yKG4uc3BsaXQoIi8iKSksbz1NYXRoLm1pbihpLmxlbmd0aCxhLmxlbmd0aCkscz1vLGM9MDtjPG87YysrKWlmKGlbY10hPT1hW2NdKXtzPWM7YnJlYWt9dmFyIHU9W107Zm9yKGM9cztjPGkubGVuZ3RoO2MrKyl1LnB1c2goIi4uIik7cmV0dXJuKHU9dS5jb25jYXQoYS5zbGljZShzKSkpLmpvaW4oIi8iKX0sZS5zZXA9Ii8iLGUuZGVsaW1pdGVyPSI6IixlLmRpcm5hbWU9ZnVuY3Rpb24odCl7aWYoInN0cmluZyIhPXR5cGVvZiB0JiYodCs9IiIpLDA9PT10Lmxlbmd0aClyZXR1cm4iLiI7Zm9yKHZhciBlPXQuY2hhckNvZGVBdCgwKSxuPTQ3PT09ZSxyPS0xLGk9ITAsYT10Lmxlbmd0aC0xO2E+PTE7LS1hKWlmKDQ3PT09KGU9dC5jaGFyQ29kZUF0KGEpKSl7aWYoIWkpe3I9YTticmVha319ZWxzZSBpPSExO3JldHVybi0xPT09cj9uPyIvIjoiLiI6biYmMT09PXI/Ii8iOnQuc2xpY2UoMCxyKX0sZS5iYXNlbmFtZT1mdW5jdGlvbih0LGUpe3ZhciBuPWZ1bmN0aW9uKHQpeyJzdHJpbmciIT10eXBlb2YgdCYmKHQrPSIiKTt2YXIgZSxuPTAscj0tMSxpPSEwO2ZvcihlPXQubGVuZ3RoLTE7ZT49MDstLWUpaWYoNDc9PT10LmNoYXJDb2RlQXQoZSkpe2lmKCFpKXtuPWUrMTticmVha319ZWxzZS0xPT09ciYmKGk9ITEscj1lKzEpO3JldHVybi0xPT09cj8iIjp0LnNsaWNlKG4scil9KHQpO3JldHVybiBlJiZuLnN1YnN0cigtMSplLmxlbmd0aCk9PT1lJiYobj1uLnN1YnN0cigwLG4ubGVuZ3RoLWUubGVuZ3RoKSksbn0sZS5leHRuYW1lPWZ1bmN0aW9uKHQpeyJzdHJpbmciIT10eXBlb2YgdCYmKHQrPSIiKTtmb3IodmFyIGU9LTEsbj0wLHI9LTEsaT0hMCxhPTAsbz10Lmxlbmd0aC0xO28+PTA7LS1vKXt2YXIgcz10LmNoYXJDb2RlQXQobyk7aWYoNDchPT1zKS0xPT09ciYmKGk9ITEscj1vKzEpLDQ2PT09cz8tMT09PWU/ZT1vOjEhPT1hJiYoYT0xKTotMSE9PWUmJihhPS0xKTtlbHNlIGlmKCFpKXtuPW8rMTticmVha319cmV0dXJuLTE9PT1lfHwtMT09PXJ8fDA9PT1hfHwxPT09YSYmZT09PXItMSYmZT09PW4rMT8iIjp0LnNsaWNlKGUscil9O3ZhciBpPSJiIj09PSJhYiIuc3Vic3RyKC0xKT9mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQuc3Vic3RyKGUsbil9OmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZTwwJiYoZT10Lmxlbmd0aCtlKSx0LnN1YnN0cihlLG4pfX0pLmNhbGwodGhpcyxuKDExKSl9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDExMCksaT0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLGE9cnx8aXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKTt0LmV4cG9ydHM9YX0sZnVuY3Rpb24odCxlLG4pe3ZhciByO3RyeXtyPW4oMyl9Y2F0Y2godCl7fXJ8fChyPXdpbmRvdy5ncmFwaGxpYiksdC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10JiYib2JqZWN0Ij09dHlwZW9mIHR9fSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKHQscil7dmFyIGk9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVsxLDJdLG49WzEsM10scj1bMSw1XSxpPVsxLDddLGE9WzIsNV0sbz1bMSwxNV0scz1bMSwxN10sYz1bMSwxOV0sdT1bMSwyMF0sbD1bMSwyMV0saD1bMSwyMl0sZj1bMSwzMF0sZD1bMSwyM10scD1bMSwyNF0seT1bMSwyNV0sZz1bMSwyNl0sdj1bMSwyN10sbT1bMSwzMl0sYj1bMSwzM10seD1bMSwzNF0sXz1bMSwzNV0saz1bMSwzMV0sdz1bMSwzOF0sRT1bMSw0LDUsMTQsMTUsMTcsMTksMjAsMjIsMjMsMjQsMjUsMjYsMjcsMzYsMzcsMzgsMzksNDIsNDVdLFQ9WzEsNCw1LDEyLDEzLDE0LDE1LDE3LDE5LDIwLDIyLDIzLDI0LDI1LDI2LDI3LDM2LDM3LDM4LDM5LDQyLDQ1XSxDPVsxLDQsNSw3LDE0LDE1LDE3LDE5LDIwLDIyLDIzLDI0LDI1LDI2LDI3LDM2LDM3LDM4LDM5LDQyLDQ1XSxTPVs0LDUsMTQsMTUsMTcsMTksMjAsMjIsMjMsMjQsMjUsMjYsMjcsMzYsMzcsMzgsMzksNDIsNDVdLEE9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLFNQQUNFOjQsTkw6NSxkaXJlY3RpdmU6NixTRDo3LGRvY3VtZW50OjgsbGluZTo5LHN0YXRlbWVudDoxMCxpZFN0YXRlbWVudDoxMSxERVNDUjoxMiwiLS1ceDNlIjoxMyxISURFX0VNUFRZOjE0LHNjYWxlOjE1LFdJRFRIOjE2LENPTVBPU0lUX1NUQVRFOjE3LFNUUlVDVF9TVEFSVDoxOCxTVFJVQ1RfU1RPUDoxOSxTVEFURV9ERVNDUjoyMCxBUzoyMSxJRDoyMixGT1JLOjIzLEpPSU46MjQsQ0hPSUNFOjI1LENPTkNVUlJFTlQ6MjYsbm90ZToyNyxub3RlUG9zaXRpb246MjgsTk9URV9URVhUOjI5LGRpcmVjdGlvbjozMCxvcGVuRGlyZWN0aXZlOjMxLHR5cGVEaXJlY3RpdmU6MzIsY2xvc2VEaXJlY3RpdmU6MzMsIjoiOjM0LGFyZ0RpcmVjdGl2ZTozNSxkaXJlY3Rpb25fdGI6MzYsZGlyZWN0aW9uX2J0OjM3LGRpcmVjdGlvbl9ybDozOCxkaXJlY3Rpb25fbHI6MzksZW9sOjQwLCI7Ijo0MSxFREdFX1NUQVRFOjQyLGxlZnRfb2Y6NDMscmlnaHRfb2Y6NDQsb3Blbl9kaXJlY3RpdmU6NDUsdHlwZV9kaXJlY3RpdmU6NDYsYXJnX2RpcmVjdGl2ZTo0NyxjbG9zZV9kaXJlY3RpdmU6NDgsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IlNQQUNFIiw1OiJOTCIsNzoiU0QiLDEyOiJERVNDUiIsMTM6Ii0tXHgzZSIsMTQ6IkhJREVfRU1QVFkiLDE1OiJzY2FsZSIsMTY6IldJRFRIIiwxNzoiQ09NUE9TSVRfU1RBVEUiLDE4OiJTVFJVQ1RfU1RBUlQiLDE5OiJTVFJVQ1RfU1RPUCIsMjA6IlNUQVRFX0RFU0NSIiwyMToiQVMiLDIyOiJJRCIsMjM6IkZPUksiLDI0OiJKT0lOIiwyNToiQ0hPSUNFIiwyNjoiQ09OQ1VSUkVOVCIsMjc6Im5vdGUiLDI5OiJOT1RFX1RFWFQiLDM0OiI6IiwzNjoiZGlyZWN0aW9uX3RiIiwzNzoiZGlyZWN0aW9uX2J0IiwzODoiZGlyZWN0aW9uX3JsIiwzOToiZGlyZWN0aW9uX2xyIiw0MToiOyIsNDI6IkVER0VfU1RBVEUiLDQzOiJsZWZ0X29mIiw0NDoicmlnaHRfb2YiLDQ1OiJvcGVuX2RpcmVjdGl2ZSIsNDY6InR5cGVfZGlyZWN0aXZlIiw0NzoiYXJnX2RpcmVjdGl2ZSIsNDg6ImNsb3NlX2RpcmVjdGl2ZSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywyXSxbMywyXSxbMywyXSxbOCwwXSxbOCwyXSxbOSwyXSxbOSwxXSxbOSwxXSxbMTAsMV0sWzEwLDJdLFsxMCwzXSxbMTAsNF0sWzEwLDFdLFsxMCwyXSxbMTAsMV0sWzEwLDRdLFsxMCwzXSxbMTAsNl0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCw0XSxbMTAsNF0sWzEwLDFdLFsxMCwxXSxbNiwzXSxbNiw1XSxbMzAsMV0sWzMwLDFdLFszMCwxXSxbMzAsMV0sWzQwLDFdLFs0MCwxXSxbMTEsMV0sWzExLDFdLFsyOCwxXSxbMjgsMV0sWzMxLDFdLFszMiwxXSxbMzUsMV0sWzMzLDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe3ZhciBzPWEubGVuZ3RoLTE7c3dpdGNoKGkpe2Nhc2UgNDpyZXR1cm4gci5zZXRSb290RG9jKGFbc10pLGFbc107Y2FzZSA1OnRoaXMuJD1bXTticmVhaztjYXNlIDY6Im5sIiE9YVtzXSYmKGFbcy0xXS5wdXNoKGFbc10pLHRoaXMuJD1hW3MtMV0pO2JyZWFrO2Nhc2UgNzpjYXNlIDg6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSA5OnRoaXMuJD0ibmwiO2JyZWFrO2Nhc2UgMTA6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6YVtzXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjoiIn07YnJlYWs7Y2FzZSAxMTp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDphW3MtMV0sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246ci50cmltQ29sb24oYVtzXSl9O2JyZWFrO2Nhc2UgMTI6dGhpcy4kPXtzdG10OiJyZWxhdGlvbiIsc3RhdGUxOntzdG10OiJzdGF0ZSIsaWQ6YVtzLTJdLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIifSxzdGF0ZTI6e3N0bXQ6InN0YXRlIixpZDphW3NdLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIifX07YnJlYWs7Y2FzZSAxMzp0aGlzLiQ9e3N0bXQ6InJlbGF0aW9uIixzdGF0ZTE6e3N0bXQ6InN0YXRlIixpZDphW3MtM10sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246IiJ9LHN0YXRlMjp7c3RtdDoic3RhdGUiLGlkOmFbcy0xXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjoiIn0sZGVzY3JpcHRpb246YVtzXS5zdWJzdHIoMSkudHJpbSgpfTticmVhaztjYXNlIDE3OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmFbcy0zXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjoiIixkb2M6YVtzLTFdfTticmVhaztjYXNlIDE4OnZhciBjPWFbc10sdT1hW3MtMl0udHJpbSgpO2lmKGFbc10ubWF0Y2goIjoiKSl7dmFyIGw9YVtzXS5zcGxpdCgiOiIpO2M9bFswXSx1PVt1LGxbMV1dfXRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmMsdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246dX07YnJlYWs7Y2FzZSAxOTp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDphW3MtM10sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246YVtzLTVdLGRvYzphW3MtMV19O2JyZWFrO2Nhc2UgMjA6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6YVtzXSx0eXBlOiJmb3JrIn07YnJlYWs7Y2FzZSAyMTp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDphW3NdLHR5cGU6ImpvaW4ifTticmVhaztjYXNlIDIyOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmFbc10sdHlwZToiY2hvaWNlIn07YnJlYWs7Y2FzZSAyMzp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpyLmdldERpdmlkZXJJZCgpLHR5cGU6ImRpdmlkZXIifTticmVhaztjYXNlIDI0OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmFbcy0xXS50cmltKCksbm90ZTp7cG9zaXRpb246YVtzLTJdLnRyaW0oKSx0ZXh0OmFbc10udHJpbSgpfX07YnJlYWs7Y2FzZSAzMDpyLnNldERpcmVjdGlvbigiVEIiKSx0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IlRCIn07YnJlYWs7Y2FzZSAzMTpyLnNldERpcmVjdGlvbigiQlQiKSx0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IkJUIn07YnJlYWs7Y2FzZSAzMjpyLnNldERpcmVjdGlvbigiUkwiKSx0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IlJMIn07YnJlYWs7Y2FzZSAzMzpyLnNldERpcmVjdGlvbigiTFIiKSx0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IkxSIn07YnJlYWs7Y2FzZSAzNjpjYXNlIDM3OnRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgNDA6ci5wYXJzZURpcmVjdGl2ZSgiJSV7Iiwib3Blbl9kaXJlY3RpdmUiKTticmVhaztjYXNlIDQxOnIucGFyc2VEaXJlY3RpdmUoYVtzXSwidHlwZV9kaXJlY3RpdmUiKTticmVhaztjYXNlIDQyOmFbc109YVtzXS50cmltKCkucmVwbGFjZSgvJy9nLCciJyksci5wYXJzZURpcmVjdGl2ZShhW3NdLCJhcmdfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA0MzpyLnBhcnNlRGlyZWN0aXZlKCJ9JSUiLCJjbG9zZV9kaXJlY3RpdmUiLCJzdGF0ZSIpfX0sdGFibGU6W3szOjEsNDplLDU6biw2OjQsNzpyLDMxOjYsNDU6aX0sezE6WzNdfSx7Mzo4LDQ6ZSw1Om4sNjo0LDc6ciwzMTo2LDQ1Oml9LHszOjksNDplLDU6biw2OjQsNzpyLDMxOjYsNDU6aX0sezM6MTAsNDplLDU6biw2OjQsNzpyLDMxOjYsNDU6aX0sdChbMSw0LDUsMTQsMTUsMTcsMjAsMjIsMjMsMjQsMjUsMjYsMjcsMzYsMzcsMzgsMzksNDIsNDVdLGEsezg6MTF9KSx7MzI6MTIsNDY6WzEsMTNdfSx7NDY6WzIsNDBdfSx7MTpbMiwxXX0sezE6WzIsMl19LHsxOlsyLDNdfSx7MTpbMiw0XSw0Om8sNTpzLDY6MjgsOToxNCwxMDoxNiwxMToxOCwxNDpjLDE1OnUsMTc6bCwyMDpoLDIyOmYsMjM6ZCwyNDpwLDI1OnksMjY6ZywyNzp2LDMwOjI5LDMxOjYsMzY6bSwzNzpiLDM4OngsMzk6Xyw0MjprLDQ1Oml9LHszMzozNiwzNDpbMSwzN10sNDg6d30sdChbMzQsNDhdLFsyLDQxXSksdChFLFsyLDZdKSx7NjoyOCwxMDozOSwxMToxOCwxNDpjLDE1OnUsMTc6bCwyMDpoLDIyOmYsMjM6ZCwyNDpwLDI1OnksMjY6ZywyNzp2LDMwOjI5LDMxOjYsMzY6bSwzNzpiLDM4OngsMzk6Xyw0MjprLDQ1Oml9LHQoRSxbMiw4XSksdChFLFsyLDldKSx0KEUsWzIsMTBdLHsxMjpbMSw0MF0sMTM6WzEsNDFdfSksdChFLFsyLDE0XSksezE2OlsxLDQyXX0sdChFLFsyLDE2XSx7MTg6WzEsNDNdfSksezIxOlsxLDQ0XX0sdChFLFsyLDIwXSksdChFLFsyLDIxXSksdChFLFsyLDIyXSksdChFLFsyLDIzXSksezI4OjQ1LDI5OlsxLDQ2XSw0MzpbMSw0N10sNDQ6WzEsNDhdfSx0KEUsWzIsMjZdKSx0KEUsWzIsMjddKSx0KFQsWzIsMzZdKSx0KFQsWzIsMzddKSx0KEUsWzIsMzBdKSx0KEUsWzIsMzFdKSx0KEUsWzIsMzJdKSx0KEUsWzIsMzNdKSx0KEMsWzIsMjhdKSx7MzU6NDksNDc6WzEsNTBdfSx0KEMsWzIsNDNdKSx0KEUsWzIsN10pLHQoRSxbMiwxMV0pLHsxMTo1MSwyMjpmLDQyOmt9LHQoRSxbMiwxNV0pLHQoUyxhLHs4OjUyfSksezIyOlsxLDUzXX0sezIyOlsxLDU0XX0sezIxOlsxLDU1XX0sezIyOlsyLDM4XX0sezIyOlsyLDM5XX0sezMzOjU2LDQ4Ond9LHs0ODpbMiw0Ml19LHQoRSxbMiwxMl0sezEyOlsxLDU3XX0pLHs0Om8sNTpzLDY6MjgsOToxNCwxMDoxNiwxMToxOCwxNDpjLDE1OnUsMTc6bCwxOTpbMSw1OF0sMjA6aCwyMjpmLDIzOmQsMjQ6cCwyNTp5LDI2OmcsMjc6diwzMDoyOSwzMTo2LDM2Om0sMzc6YiwzODp4LDM5Ol8sNDI6ayw0NTppfSx0KEUsWzIsMThdLHsxODpbMSw1OV19KSx7Mjk6WzEsNjBdfSx7MjI6WzEsNjFdfSx0KEMsWzIsMjldKSx0KEUsWzIsMTNdKSx0KEUsWzIsMTddKSx0KFMsYSx7ODo2Mn0pLHQoRSxbMiwyNF0pLHQoRSxbMiwyNV0pLHs0Om8sNTpzLDY6MjgsOToxNCwxMDoxNiwxMToxOCwxNDpjLDE1OnUsMTc6bCwxOTpbMSw2M10sMjA6aCwyMjpmLDIzOmQsMjQ6cCwyNTp5LDI2OmcsMjc6diwzMDoyOSwzMTo2LDM2Om0sMzc6YiwzODp4LDM5Ol8sNDI6ayw0NTppfSx0KEUsWzIsMTldKV0sZGVmYXVsdEFjdGlvbnM6ezc6WzIsNDBdLDg6WzIsMV0sOTpbMiwyXSwxMDpbMiwzXSw0NzpbMiwzOF0sNDg6WzIsMzldLDUwOlsyLDQyXX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsdT0wLGw9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlcikseT17eXk6e319O2Zvcih2YXIgZyBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGcpJiYoeS55eVtnXT10aGlzLnl5W2ddKTtwLnNldElucHV0KHQseS55eSkseS55eS5sZXhlcj1wLHkueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIHY9cC55eWxsb2M7YS5wdXNoKHYpO3ZhciBtPXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiBiKCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiB5Lnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPXkueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciB4LF8sayx3LEUsVCxDLFMsQSxNPXt9Ozspe2lmKGs9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2tdP3c9dGhpcy5kZWZhdWx0QWN0aW9uc1trXToobnVsbD09eCYmKHg9YigpKSx3PW9ba10mJm9ba11beF0pLHZvaWQgMD09PXd8fCF3Lmxlbmd0aHx8IXdbMF0pe3ZhciBPPSIiO2ZvcihUIGluIEE9W10sb1trXSl0aGlzLnRlcm1pbmFsc19bVF0mJlQ+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bVF0rIiciKTtPPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoeD09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoTyx7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1t4XXx8eCxsaW5lOnAueXlsaW5lbm8sbG9jOnYsZXhwZWN0ZWQ6QX0pfWlmKHdbMF1pbnN0YW5jZW9mIEFycmF5JiZ3Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIraysiLCB0b2tlbjogIit4KTtzd2l0Y2god1swXSl7Y2FzZSAxOm4ucHVzaCh4KSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKHdbMV0pLHg9bnVsbCxfPyh4PV8sXz1udWxsKToodT1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyx2PXAueXlsbG9jLGw+MCYmbC0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxtJiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oRT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyx1LGMseS55eSx3WzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIEU7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LE09e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighdGhpcy55eS5wYXJzZXIpdGhyb3cgbmV3IEVycm9yKHQpO3RoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IodCxlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy55eT1lfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD10LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2lucHV0WzBdO3JldHVybiB0aGlzLnl5dGV4dCs9dCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9dCx0aGlzLm1hdGNoZWQrPXQsdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHR9LHVucHV0OmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLG49dC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWUpLHRoaXMub2Zmc2V0LT1lO3ZhciByPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLG4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1uLmxlbmd0aC0xKTt2YXIgaT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46bj8obi5sZW5ndGg9PT1yLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrcltyLmxlbmd0aC1uLmxlbmd0aF0ubGVuZ3RoLW5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2lbMF0saVswXSt0aGlzLnl5bGVuZy1lXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcj8odGhpcy5fYmFja3RyYWNrPSEwLHRoaXMpOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxlc3M6ZnVuY3Rpb24odCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih0Lmxlbmd0aD4yMD8iLi4uIjoiIikrdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2g7cmV0dXJuIHQubGVuZ3RoPDIwJiYodCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdC5sZW5ndGgpKSwodC5zdWJzdHIoMCwyMCkrKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFzdElucHV0KCksZT1uZXcgQXJyYXkodC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB0K3RoaXMudXBjb21pbmdJbnB1dCgpKyJcbiIrZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGk9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoaS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSwocj10WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSkmJih0aGlzLnl5bGluZW5vKz1yLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnI/cltyLmxlbmd0aC0xXS5sZW5ndGgtcltyLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3RbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dFswXSx0aGlzLm1hdGNoKz10WzBdLHRoaXMubWF0Y2hlcz10LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXRbMF0sbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLG4pcmV0dXJuIG47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGEgaW4gaSl0aGlzW2FdPWlbYV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3ZhciB0LGUsbixyO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKSx0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBpPXRoaXMuX2N1cnJlbnRSdWxlcygpLGE9MDthPGkubGVuZ3RoO2ErKylpZigobj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2lbYV1dKSkmJighZXx8blswXS5sZW5ndGg+ZVswXS5sZW5ndGgpKXtpZihlPW4scj1hLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKCExIT09KHQ9dGhpcy50ZXN0X21hdGNoKG4saVthXSkpKXJldHVybiB0O2lmKHRoaXMuX2JhY2t0cmFjayl7ZT0hMTtjb250aW51ZX1yZXR1cm4hMX1pZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGU/ITEhPT0odD10aGlzLnRlc3RfbWF0Y2goZSxpW3JdKSkmJnQ6IiI9PT10aGlzLl9pbnB1dD90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFVucmVjb2duaXplZCB0ZXh0LlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubmV4dCgpO3JldHVybiB0fHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbih0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2godCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4odD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHR8fDApKT49MD90aGlzLmNvbmRpdGlvblN0YWNrW3RdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKHQpe3RoaXMuYmVnaW4odCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scil7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gMzY7Y2FzZSAxOnJldHVybiAzNztjYXNlIDI6cmV0dXJuIDM4O2Nhc2UgMzpyZXR1cm4gMzk7Y2FzZSA0OnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLDQ1O2Nhc2UgNTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSw0NjtjYXNlIDY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMzQ7Y2FzZSA3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDQ4O2Nhc2UgODpyZXR1cm4gNDc7Y2FzZSA5OmNhc2UgMTA6YnJlYWs7Y2FzZSAxMTpyZXR1cm4gNTtjYXNlIDEyOmNhc2UgMTM6Y2FzZSAxNDpjYXNlIDE1OmJyZWFrO2Nhc2UgMTY6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJTQ0FMRSIpLDE1O2Nhc2UgMTc6cmV0dXJuIDE2O2Nhc2UgMTg6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTk6dGhpcy5wdXNoU3RhdGUoIlNUQVRFIik7YnJlYWs7Y2FzZSAyMDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGUueXl0ZXh0PWUueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwyMztjYXNlIDIxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksZS55eXRleHQ9ZS55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDI0O2Nhc2UgMjI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxlLnl5dGV4dD1lLnl5dGV4dC5zbGljZSgwLC0xMCkudHJpbSgpLDI1O2Nhc2UgMjM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxlLnl5dGV4dD1lLnl5dGV4dC5zbGljZSgwLC04KS50cmltKCksMjM7Y2FzZSAyNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGUueXl0ZXh0PWUueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwyNDtjYXNlIDI1OnJldHVybiB0aGlzLnBvcFN0YXRlKCksZS55eXRleHQ9ZS55eXRleHQuc2xpY2UoMCwtMTApLnRyaW0oKSwyNTtjYXNlIDI2OnJldHVybiAzNjtjYXNlIDI3OnJldHVybiAzNztjYXNlIDI4OnJldHVybiAzODtjYXNlIDI5OnJldHVybiAzOTtjYXNlIDMwOnRoaXMuYmVnaW4oIlNUQVRFX1NUUklORyIpO2JyZWFrO2Nhc2UgMzE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiU1RBVEVfSUQiKSwiQVMiO2Nhc2UgMzI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiSUQiO2Nhc2UgMzM6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzQ6cmV0dXJuIlNUQVRFX0RFU0NSIjtjYXNlIDM1OnJldHVybiAxNztjYXNlIDM2OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDM3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoInN0cnVjdCIpLDE4O2Nhc2UgMzg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxOTtjYXNlIDM5OmJyZWFrO2Nhc2UgNDA6cmV0dXJuIHRoaXMuYmVnaW4oIk5PVEUiKSwyNztjYXNlIDQxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIk5PVEVfSUQiKSw0MztjYXNlIDQyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIk5PVEVfSUQiKSw0NDtjYXNlIDQzOnRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiRkxPQVRJTkdfTk9URSIpO2JyZWFrO2Nhc2UgNDQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiRkxPQVRJTkdfTk9URV9JRCIpLCJBUyI7Y2FzZSA0NTpicmVhaztjYXNlIDQ2OnJldHVybiJOT1RFX1RFWFQiO2Nhc2UgNDc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiSUQiO2Nhc2UgNDg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiTk9URV9URVhUIiksMjI7Y2FzZSA0OTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGUueXl0ZXh0PWUueXl0ZXh0LnN1YnN0cigyKS50cmltKCksMjk7Y2FzZSA1MDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGUueXl0ZXh0PWUueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwyOTtjYXNlIDUxOmNhc2UgNTI6cmV0dXJuIDc7Y2FzZSA1MzpyZXR1cm4gMTQ7Y2FzZSA1NDpyZXR1cm4gNDI7Y2FzZSA1NTpyZXR1cm4gMjI7Y2FzZSA1NjpyZXR1cm4gZS55eXRleHQ9ZS55eXRleHQudHJpbSgpLDEyO2Nhc2UgNTc6cmV0dXJuIDEzO2Nhc2UgNTg6cmV0dXJuIDI2O2Nhc2UgNTk6cmV0dXJuIDU7Y2FzZSA2MDpyZXR1cm4iSU5WQUxJRCJ9fSxydWxlczpbL14oPzouKmRpcmVjdGlvblxzK1RCW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrUkxbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0xSW15cbl0qKS9pLC9eKD86JSVceykvaSwvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS9pLC9eKD86OikvaSwvXig/Olx9JSUpL2ksL14oPzooKD86KD8hXH0lJSkufFxuKSopKS9pLC9eKD86JSUoPyFceylbXlxuXSopL2ksL14oPzpbXlx9XSUlW15cbl0qKS9pLC9eKD86W1xuXSspL2ksL14oPzpbXHNdKykvaSwvXig/OigoPyFcbilccykrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OiVbXlxuXSopL2ksL14oPzpzY2FsZVxzKykvaSwvXig/OlxkKykvaSwvXig/OlxzK3dpZHRoXGIpL2ksL14oPzpzdGF0ZVxzKykvaSwvXig/Oi4qPDxmb3JrPj4pL2ksL14oPzouKjw8am9pbj4+KS9pLC9eKD86Lio8PGNob2ljZT4+KS9pLC9eKD86LipcW1xbZm9ya1xdXF0pL2ksL14oPzouKlxbXFtqb2luXF1cXSkvaSwvXig/Oi4qXFtcW2Nob2ljZVxdXF0pL2ksL14oPzouKmRpcmVjdGlvblxzK1RCW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrUkxbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0xSW15cbl0qKS9pLC9eKD86WyJdKS9pLC9eKD86XHMqYXNccyspL2ksL14oPzpbXlxuXHtdKikvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86W15cblxzXHtdKykvaSwvXig/OlxuKS9pLC9eKD86XHspL2ksL14oPzpcfSkvaSwvXig/Oltcbl0pL2ksL14oPzpub3RlXHMrKS9pLC9eKD86bGVmdCBvZlxiKS9pLC9eKD86cmlnaHQgb2ZcYikvaSwvXig/OiIpL2ksL14oPzpccyphc1xzKikvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86W15cbl0qKS9pLC9eKD86XHMqW146XG5cc1wtXSspL2ksL14oPzpccyo6W146XG47XSspL2ksL14oPzpbXHNcU10qP2VuZCBub3RlXGIpL2ksL14oPzpzdGF0ZURpYWdyYW1ccyspL2ksL14oPzpzdGF0ZURpYWdyYW0tdjJccyspL2ksL14oPzpoaWRlIGVtcHR5IGRlc2NyaXB0aW9uXGIpL2ksL14oPzpcW1wqXF0pL2ksL14oPzpbXjpcblxzXC1ce10rKS9pLC9eKD86XHMqOlteOlxuO10rKS9pLC9eKD86LS0+KS9pLC9eKD86LS0pL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7TElORTp7cnVsZXM6WzEzLDE0XSxpbmNsdXNpdmU6ITF9LGNsb3NlX2RpcmVjdGl2ZTp7cnVsZXM6WzEzLDE0XSxpbmNsdXNpdmU6ITF9LGFyZ19kaXJlY3RpdmU6e3J1bGVzOls3LDgsMTMsMTRdLGluY2x1c2l2ZTohMX0sdHlwZV9kaXJlY3RpdmU6e3J1bGVzOls2LDcsMTMsMTRdLGluY2x1c2l2ZTohMX0sb3Blbl9kaXJlY3RpdmU6e3J1bGVzOls1LDEzLDE0XSxpbmNsdXNpdmU6ITF9LHN0cnVjdDp7cnVsZXM6WzEzLDE0LDE5LDI2LDI3LDI4LDI5LDM4LDM5LDQwLDU0LDU1LDU2LDU3LDU4XSxpbmNsdXNpdmU6ITF9LEZMT0FUSU5HX05PVEVfSUQ6e3J1bGVzOls0N10saW5jbHVzaXZlOiExfSxGTE9BVElOR19OT1RFOntydWxlczpbNDQsNDUsNDZdLGluY2x1c2l2ZTohMX0sTk9URV9URVhUOntydWxlczpbNDksNTBdLGluY2x1c2l2ZTohMX0sTk9URV9JRDp7cnVsZXM6WzQ4XSxpbmNsdXNpdmU6ITF9LE5PVEU6e3J1bGVzOls0MSw0Miw0M10saW5jbHVzaXZlOiExfSxTQ0FMRTp7cnVsZXM6WzE3LDE4XSxpbmNsdXNpdmU6ITF9LEFMSUFTOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LFNUQVRFX0lEOntydWxlczpbMzJdLGluY2x1c2l2ZTohMX0sU1RBVEVfU1RSSU5HOntydWxlczpbMzMsMzRdLGluY2x1c2l2ZTohMX0sRk9SS19TVEFURTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxTVEFURTp7cnVsZXM6WzEzLDE0LDIwLDIxLDIyLDIzLDI0LDI1LDMwLDMxLDM1LDM2LDM3XSxpbmNsdXNpdmU6ITF9LElEOntydWxlczpbMTMsMTRdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw5LDEwLDExLDEyLDE0LDE1LDE2LDE5LDM3LDQwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU5LDYwXSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24gTygpe3RoaXMueXk9e319cmV0dXJuIEEubGV4ZXI9TSxPLnByb3RvdHlwZT1BLEEuUGFyc2VyPU8sbmV3IE99KCk7ZS5wYXJzZXI9aSxlLlBhcnNlcj1pLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIGkucGFyc2UuYXBwbHkoaSxhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24ocil7clsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIityWzBdKyIgRklMRSIpLHQuZXhpdCgxKSk7dmFyIGk9bigxNykucmVhZEZpbGVTeW5jKG4oMTgpLm5vcm1hbGl6ZShyWzFdKSwidXRmOCIpO3JldHVybiBlLnBhcnNlci5wYXJzZShpKX0sbi5jW24uc109PT1yJiZlLm1haW4odC5hcmd2LnNsaWNlKDEpKX0pLmNhbGwodGhpcyxuKDExKSxuKDYpKHQpKX0sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIGUscjtmdW5jdGlvbiBpKCl7cmV0dXJuIGUuYXBwbHkobnVsbCxhcmd1bWVudHMpfWZ1bmN0aW9uIGEodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBBcnJheXx8IltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBvKHQpe3JldHVybiBudWxsIT10JiYiW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBzKHQpe3JldHVybiB2b2lkIDA9PT10fWZ1bmN0aW9uIGModCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0fHwiW29iamVjdCBOdW1iZXJdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiB1KHQpe3JldHVybiB0IGluc3RhbmNlb2YgRGF0ZXx8IltvYmplY3QgRGF0ZV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIGwodCxlKXt2YXIgbixyPVtdO2ZvcihuPTA7bjx0Lmxlbmd0aDsrK24pci5wdXNoKGUodFtuXSxuKSk7cmV0dXJuIHJ9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKX1mdW5jdGlvbiBmKHQsZSl7Zm9yKHZhciBuIGluIGUpaChlLG4pJiYodFtuXT1lW25dKTtyZXR1cm4gaChlLCJ0b1N0cmluZyIpJiYodC50b1N0cmluZz1lLnRvU3RyaW5nKSxoKGUsInZhbHVlT2YiKSYmKHQudmFsdWVPZj1lLnZhbHVlT2YpLHR9ZnVuY3Rpb24gZCh0LGUsbixyKXtyZXR1cm4gYmUodCxlLG4sciwhMCkudXRjKCl9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gbnVsbD09dC5fcGYmJih0Ll9wZj17ZW1wdHk6ITEsdW51c2VkVG9rZW5zOltdLHVudXNlZElucHV0OltdLG92ZXJmbG93Oi0yLGNoYXJzTGVmdE92ZXI6MCxudWxsSW5wdXQ6ITEsaW52YWxpZE1vbnRoOm51bGwsaW52YWxpZEZvcm1hdDohMSx1c2VySW52YWxpZGF0ZWQ6ITEsaXNvOiExLHBhcnNlZERhdGVQYXJ0czpbXSxtZXJpZGllbTpudWxsLHJmYzI4MjI6ITEsd2Vla2RheU1pc21hdGNoOiExfSksdC5fcGZ9ZnVuY3Rpb24geSh0KXtpZihudWxsPT10Ll9pc1ZhbGlkKXt2YXIgZT1wKHQpLG49ci5jYWxsKGUucGFyc2VkRGF0ZVBhcnRzLChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dH0pKSxpPSFpc05hTih0Ll9kLmdldFRpbWUoKSkmJmUub3ZlcmZsb3c8MCYmIWUuZW1wdHkmJiFlLmludmFsaWRNb250aCYmIWUuaW52YWxpZFdlZWtkYXkmJiFlLndlZWtkYXlNaXNtYXRjaCYmIWUubnVsbElucHV0JiYhZS5pbnZhbGlkRm9ybWF0JiYhZS51c2VySW52YWxpZGF0ZWQmJighZS5tZXJpZGllbXx8ZS5tZXJpZGllbSYmbik7aWYodC5fc3RyaWN0JiYoaT1pJiYwPT09ZS5jaGFyc0xlZnRPdmVyJiYwPT09ZS51bnVzZWRUb2tlbnMubGVuZ3RoJiZ2b2lkIDA9PT1lLmJpZ0hvdXIpLG51bGwhPU9iamVjdC5pc0Zyb3plbiYmT2JqZWN0LmlzRnJvemVuKHQpKXJldHVybiBpO3QuX2lzVmFsaWQ9aX1yZXR1cm4gdC5faXNWYWxpZH1mdW5jdGlvbiBnKHQpe3ZhciBlPWQoTmFOKTtyZXR1cm4gbnVsbCE9dD9mKHAoZSksdCk6cChlKS51c2VySW52YWxpZGF0ZWQ9ITAsZX1yPUFycmF5LnByb3RvdHlwZS5zb21lP0FycmF5LnByb3RvdHlwZS5zb21lOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1PYmplY3QodGhpcyksbj1lLmxlbmd0aD4+PjAscj0wO3I8bjtyKyspaWYociBpbiBlJiZ0LmNhbGwodGhpcyxlW3JdLHIsZSkpcmV0dXJuITA7cmV0dXJuITF9O3ZhciB2PWkubW9tZW50UHJvcGVydGllcz1bXTtmdW5jdGlvbiBtKHQsZSl7dmFyIG4scixpO2lmKHMoZS5faXNBTW9tZW50T2JqZWN0KXx8KHQuX2lzQU1vbWVudE9iamVjdD1lLl9pc0FNb21lbnRPYmplY3QpLHMoZS5faSl8fCh0Ll9pPWUuX2kpLHMoZS5fZil8fCh0Ll9mPWUuX2YpLHMoZS5fbCl8fCh0Ll9sPWUuX2wpLHMoZS5fc3RyaWN0KXx8KHQuX3N0cmljdD1lLl9zdHJpY3QpLHMoZS5fdHptKXx8KHQuX3R6bT1lLl90em0pLHMoZS5faXNVVEMpfHwodC5faXNVVEM9ZS5faXNVVEMpLHMoZS5fb2Zmc2V0KXx8KHQuX29mZnNldD1lLl9vZmZzZXQpLHMoZS5fcGYpfHwodC5fcGY9cChlKSkscyhlLl9sb2NhbGUpfHwodC5fbG9jYWxlPWUuX2xvY2FsZSksMDx2Lmxlbmd0aClmb3Iobj0wO248di5sZW5ndGg7bisrKXMoaT1lW3I9dltuXV0pfHwodFtyXT1pKTtyZXR1cm4gdH12YXIgYj0hMTtmdW5jdGlvbiB4KHQpe20odGhpcyx0KSx0aGlzLl9kPW5ldyBEYXRlKG51bGwhPXQuX2Q/dC5fZC5nZXRUaW1lKCk6TmFOKSx0aGlzLmlzVmFsaWQoKXx8KHRoaXMuX2Q9bmV3IERhdGUoTmFOKSksITE9PT1iJiYoYj0hMCxpLnVwZGF0ZU9mZnNldCh0aGlzKSxiPSExKX1mdW5jdGlvbiBfKHQpe3JldHVybiB0IGluc3RhbmNlb2YgeHx8bnVsbCE9dCYmbnVsbCE9dC5faXNBTW9tZW50T2JqZWN0fWZ1bmN0aW9uIGsodCl7cmV0dXJuIHQ8MD9NYXRoLmNlaWwodCl8fDA6TWF0aC5mbG9vcih0KX1mdW5jdGlvbiB3KHQpe3ZhciBlPSt0LG49MDtyZXR1cm4gMCE9PWUmJmlzRmluaXRlKGUpJiYobj1rKGUpKSxufWZ1bmN0aW9uIEUodCxlLG4pe3ZhciByLGk9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpLGE9TWF0aC5hYnModC5sZW5ndGgtZS5sZW5ndGgpLG89MDtmb3Iocj0wO3I8aTtyKyspKG4mJnRbcl0hPT1lW3JdfHwhbiYmdyh0W3JdKSE9PXcoZVtyXSkpJiZvKys7cmV0dXJuIG8rYX1mdW5jdGlvbiBUKHQpeyExPT09aS5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MmJiJ1bmRlZmluZWQiIT10eXBlb2YgY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oIkRlcHJlY2F0aW9uIHdhcm5pbmc6ICIrdCl9ZnVuY3Rpb24gQyh0LGUpe3ZhciBuPSEwO3JldHVybiBmKChmdW5jdGlvbigpe2lmKG51bGwhPWkuZGVwcmVjYXRpb25IYW5kbGVyJiZpLmRlcHJlY2F0aW9uSGFuZGxlcihudWxsLHQpLG4pe2Zvcih2YXIgcixhPVtdLG89MDtvPGFyZ3VtZW50cy5sZW5ndGg7bysrKXtpZihyPSIiLCJvYmplY3QiPT10eXBlb2YgYXJndW1lbnRzW29dKXtmb3IodmFyIHMgaW4gcis9IlxuWyIrbysiXSAiLGFyZ3VtZW50c1swXSlyKz1zKyI6ICIrYXJndW1lbnRzWzBdW3NdKyIsICI7cj1yLnNsaWNlKDAsLTIpfWVsc2Ugcj1hcmd1bWVudHNbb107YS5wdXNoKHIpfVQodCsiXG5Bcmd1bWVudHM6ICIrQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYSkuam9pbigiIikrIlxuIisobmV3IEVycm9yKS5zdGFjayksbj0hMX1yZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxlKX12YXIgUyxBPXt9O2Z1bmN0aW9uIE0odCxlKXtudWxsIT1pLmRlcHJlY2F0aW9uSGFuZGxlciYmaS5kZXByZWNhdGlvbkhhbmRsZXIodCxlKSxBW3RdfHwoVChlKSxBW3RdPSEwKX1mdW5jdGlvbiBPKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRnVuY3Rpb258fCJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gQih0LGUpe3ZhciBuLHI9Zih7fSx0KTtmb3IobiBpbiBlKWgoZSxuKSYmKG8odFtuXSkmJm8oZVtuXSk/KHJbbl09e30sZihyW25dLHRbbl0pLGYocltuXSxlW25dKSk6bnVsbCE9ZVtuXT9yW25dPWVbbl06ZGVsZXRlIHJbbl0pO2ZvcihuIGluIHQpaCh0LG4pJiYhaChlLG4pJiZvKHRbbl0pJiYocltuXT1mKHt9LHJbbl0pKTtyZXR1cm4gcn1mdW5jdGlvbiBOKHQpe251bGwhPXQmJnRoaXMuc2V0KHQpfWkuc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzPSExLGkuZGVwcmVjYXRpb25IYW5kbGVyPW51bGwsUz1PYmplY3Qua2V5cz9PYmplY3Qua2V5czpmdW5jdGlvbih0KXt2YXIgZSxuPVtdO2ZvcihlIGluIHQpaCh0LGUpJiZuLnB1c2goZSk7cmV0dXJuIG59O3ZhciBEPXt9O2Z1bmN0aW9uIEwodCxlKXt2YXIgbj10LnRvTG93ZXJDYXNlKCk7RFtuXT1EW24rInMiXT1EW2VdPXR9ZnVuY3Rpb24gSSh0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/RFt0XXx8RFt0LnRvTG93ZXJDYXNlKCldOnZvaWQgMH1mdW5jdGlvbiBSKHQpe3ZhciBlLG4scj17fTtmb3IobiBpbiB0KWgodCxuKSYmKGU9SShuKSkmJihyW2VdPXRbbl0pO3JldHVybiByfXZhciBGPXt9O2Z1bmN0aW9uIFAodCxlKXtGW3RdPWV9ZnVuY3Rpb24gaih0LGUsbil7dmFyIHI9IiIrTWF0aC5hYnModCksaT1lLXIubGVuZ3RoO3JldHVybigwPD10P24/IisiOiIiOiItIikrTWF0aC5wb3coMTAsTWF0aC5tYXgoMCxpKSkudG9TdHJpbmcoKS5zdWJzdHIoMSkrcn12YXIgWT0vKFxbW15cW10qXF0pfChcXCk/KFtIaF1tbShzcyk/fE1vfE1NP00/TT98RG98REREb3xERD9EP0Q/fGRkZD9kP3xkbz98d1tvfHddP3xXW298V10/fFFvP3xZWVlZWVl8WVlZWVl8WVlZWXxZWXxnZyhnZ2c/KT98R0coR0dHPyk/fGV8RXxhfEF8aGg/fEhIP3xraz98bW0/fHNzP3xTezEsOX18eHxYfHp6P3xaWj98LikvZyx6PS8oXFtbXlxbXSpcXSl8KFxcKT8oTFRTfExUfExMP0w/TD98bHsxLDR9KS9nLFU9e30sJD17fTtmdW5jdGlvbiBxKHQsZSxuLHIpe3ZhciBpPXI7InN0cmluZyI9PXR5cGVvZiByJiYoaT1mdW5jdGlvbigpe3JldHVybiB0aGlzW3JdKCl9KSx0JiYoJFt0XT1pKSxlJiYoJFtlWzBdXT1mdW5jdGlvbigpe3JldHVybiBqKGkuYXBwbHkodGhpcyxhcmd1bWVudHMpLGVbMV0sZVsyXSl9KSxuJiYoJFtuXT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5vcmRpbmFsKGkuYXBwbHkodGhpcyxhcmd1bWVudHMpLHQpfSl9ZnVuY3Rpb24gVyh0LGUpe3JldHVybiB0LmlzVmFsaWQoKT8oZT1WKGUsdC5sb2NhbGVEYXRhKCkpLFVbZV09VVtlXXx8ZnVuY3Rpb24odCl7dmFyIGUsbixyLGk9dC5tYXRjaChZKTtmb3IoZT0wLG49aS5sZW5ndGg7ZTxuO2UrKykkW2lbZV1dP2lbZV09JFtpW2VdXTppW2VdPShyPWlbZV0pLm1hdGNoKC9cW1tcc1xTXS8pP3IucmVwbGFjZSgvXlxbfFxdJC9nLCIiKTpyLnJlcGxhY2UoL1xcL2csIiIpO3JldHVybiBmdW5jdGlvbihlKXt2YXIgcixhPSIiO2ZvcihyPTA7cjxuO3IrKylhKz1PKGlbcl0pP2lbcl0uY2FsbChlLHQpOmlbcl07cmV0dXJuIGF9fShlKSxVW2VdKHQpKTp0LmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpfWZ1bmN0aW9uIFYodCxlKXt2YXIgbj01O2Z1bmN0aW9uIHIodCl7cmV0dXJuIGUubG9uZ0RhdGVGb3JtYXQodCl8fHR9Zm9yKHoubGFzdEluZGV4PTA7MDw9biYmei50ZXN0KHQpOyl0PXQucmVwbGFjZSh6LHIpLHoubGFzdEluZGV4PTAsbi09MTtyZXR1cm4gdH12YXIgSD0vXGQvLEc9L1xkXGQvLFg9L1xkezN9LyxaPS9cZHs0fS8sUT0vWystXT9cZHs2fS8sSz0vXGRcZD8vLEo9L1xkXGRcZFxkPy8sdHQ9L1xkXGRcZFxkXGRcZD8vLGV0PS9cZHsxLDN9LyxudD0vXGR7MSw0fS8scnQ9L1srLV0/XGR7MSw2fS8saXQ9L1xkKy8sYXQ9L1srLV0/XGQrLyxvdD0vWnxbKy1dXGRcZDo/XGRcZC9naSxzdD0vWnxbKy1dXGRcZCg/Ojo/XGRcZCk/L2dpLGN0PS9bMC05XXswLDI1Nn1bJ2Etelx1MDBBMC1cdTA1RkZcdTA3MDAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGMDdcdUZGMTAtXHVGRkVGXXsxLDI1Nn18W1x1MDYwMC1cdTA2RkZcL117MSwyNTZ9KFxzKj9bXHUwNjAwLVx1MDZGRl17MSwyNTZ9KXsxLDJ9L2ksdXQ9e307ZnVuY3Rpb24gbHQodCxlLG4pe3V0W3RdPU8oZSk/ZTpmdW5jdGlvbih0LHIpe3JldHVybiB0JiZuP246ZX19ZnVuY3Rpb24gaHQodCxlKXtyZXR1cm4gaCh1dCx0KT91dFt0XShlLl9zdHJpY3QsZS5fbG9jYWxlKTpuZXcgUmVnRXhwKGZ0KHQucmVwbGFjZSgiXFwiLCIiKS5yZXBsYWNlKC9cXChcWyl8XFwoXF0pfFxbKFteXF1cW10qKVxdfFxcKC4pL2csKGZ1bmN0aW9uKHQsZSxuLHIsaSl7cmV0dXJuIGV8fG58fHJ8fGl9KSkpKX1mdW5jdGlvbiBmdCh0KXtyZXR1cm4gdC5yZXBsYWNlKC9bLVwvXFxeJCorPy4oKXxbXF17fV0vZywiXFwkJiIpfXZhciBkdD17fTtmdW5jdGlvbiBwdCh0LGUpe3ZhciBuLHI9ZTtmb3IoInN0cmluZyI9PXR5cGVvZiB0JiYodD1bdF0pLGMoZSkmJihyPWZ1bmN0aW9uKHQsbil7bltlXT13KHQpfSksbj0wO248dC5sZW5ndGg7bisrKWR0W3Rbbl1dPXJ9ZnVuY3Rpb24geXQodCxlKXtwdCh0LChmdW5jdGlvbih0LG4scixpKXtyLl93PXIuX3d8fHt9LGUodCxyLl93LHIsaSl9KSl9ZnVuY3Rpb24gZ3QodCl7cmV0dXJuIHZ0KHQpPzM2NjozNjV9ZnVuY3Rpb24gdnQodCl7cmV0dXJuIHQlND09MCYmdCUxMDAhPTB8fHQlNDAwPT0wfXEoIlkiLDAsMCwoZnVuY3Rpb24oKXt2YXIgdD10aGlzLnllYXIoKTtyZXR1cm4gdDw9OTk5OT8iIit0OiIrIit0fSkpLHEoMCxbIllZIiwyXSwwLChmdW5jdGlvbigpe3JldHVybiB0aGlzLnllYXIoKSUxMDB9KSkscSgwLFsiWVlZWSIsNF0sMCwieWVhciIpLHEoMCxbIllZWVlZIiw1XSwwLCJ5ZWFyIikscSgwLFsiWVlZWVlZIiw2LCEwXSwwLCJ5ZWFyIiksTCgieWVhciIsInkiKSxQKCJ5ZWFyIiwxKSxsdCgiWSIsYXQpLGx0KCJZWSIsSyxHKSxsdCgiWVlZWSIsbnQsWiksbHQoIllZWVlZIixydCxRKSxsdCgiWVlZWVlZIixydCxRKSxwdChbIllZWVlZIiwiWVlZWVlZIl0sMCkscHQoIllZWVkiLChmdW5jdGlvbih0LGUpe2VbMF09Mj09PXQubGVuZ3RoP2kucGFyc2VUd29EaWdpdFllYXIodCk6dyh0KX0pKSxwdCgiWVkiLChmdW5jdGlvbih0LGUpe2VbMF09aS5wYXJzZVR3b0RpZ2l0WWVhcih0KX0pKSxwdCgiWSIsKGZ1bmN0aW9uKHQsZSl7ZVswXT1wYXJzZUludCh0LDEwKX0pKSxpLnBhcnNlVHdvRGlnaXRZZWFyPWZ1bmN0aW9uKHQpe3JldHVybiB3KHQpKyg2ODx3KHQpPzE5MDA6MmUzKX07dmFyIG10LGJ0PXh0KCJGdWxsWWVhciIsITApO2Z1bmN0aW9uIHh0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBudWxsIT1uPyhrdCh0aGlzLHQsbiksaS51cGRhdGVPZmZzZXQodGhpcyxlKSx0aGlzKTpfdCh0aGlzLHQpfX1mdW5jdGlvbiBfdCh0LGUpe3JldHVybiB0LmlzVmFsaWQoKT90Ll9kWyJnZXQiKyh0Ll9pc1VUQz8iVVRDIjoiIikrZV0oKTpOYU59ZnVuY3Rpb24ga3QodCxlLG4pe3QuaXNWYWxpZCgpJiYhaXNOYU4obikmJigiRnVsbFllYXIiPT09ZSYmdnQodC55ZWFyKCkpJiYxPT09dC5tb250aCgpJiYyOT09PXQuZGF0ZSgpP3QuX2RbInNldCIrKHQuX2lzVVRDPyJVVEMiOiIiKStlXShuLHQubW9udGgoKSx3dChuLHQubW9udGgoKSkpOnQuX2RbInNldCIrKHQuX2lzVVRDPyJVVEMiOiIiKStlXShuKSl9ZnVuY3Rpb24gd3QodCxlKXtpZihpc05hTih0KXx8aXNOYU4oZSkpcmV0dXJuIE5hTjt2YXIgbj0oZSUxMisxMiklMTI7cmV0dXJuIHQrPShlLW4pLzEyLDE9PT1uP3Z0KHQpPzI5OjI4OjMxLW4lNyUyfW10PUFycmF5LnByb3RvdHlwZS5pbmRleE9mP0FycmF5LnByb3RvdHlwZS5pbmRleE9mOmZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPTA7ZTx0aGlzLmxlbmd0aDsrK2UpaWYodGhpc1tlXT09PXQpcmV0dXJuIGU7cmV0dXJuLTF9LHEoIk0iLFsiTU0iLDJdLCJNbyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9udGgoKSsxfSkpLHEoIk1NTSIsMCwwLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzU2hvcnQodGhpcyx0KX0pKSxxKCJNTU1NIiwwLDAsKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHModGhpcyx0KX0pKSxMKCJtb250aCIsIk0iKSxQKCJtb250aCIsOCksbHQoIk0iLEspLGx0KCJNTSIsSyxHKSxsdCgiTU1NIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5tb250aHNTaG9ydFJlZ2V4KHQpfSkpLGx0KCJNTU1NIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5tb250aHNSZWdleCh0KX0pKSxwdChbIk0iLCJNTSJdLChmdW5jdGlvbih0LGUpe2VbMV09dyh0KS0xfSkpLHB0KFsiTU1NIiwiTU1NTSJdLChmdW5jdGlvbih0LGUsbixyKXt2YXIgaT1uLl9sb2NhbGUubW9udGhzUGFyc2UodCxyLG4uX3N0cmljdCk7bnVsbCE9aT9lWzFdPWk6cChuKS5pbnZhbGlkTW9udGg9dH0pKTt2YXIgRXQ9L0Rbb0RdPyhcW1teXFtcXV0qXF18XHMpK01NTU0/LyxUdD0iSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxDdD0iSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIik7ZnVuY3Rpb24gU3QodCxlKXt2YXIgbjtpZighdC5pc1ZhbGlkKCkpcmV0dXJuIHQ7aWYoInN0cmluZyI9PXR5cGVvZiBlKWlmKC9eXGQrJC8udGVzdChlKSllPXcoZSk7ZWxzZSBpZighYyhlPXQubG9jYWxlRGF0YSgpLm1vbnRoc1BhcnNlKGUpKSlyZXR1cm4gdDtyZXR1cm4gbj1NYXRoLm1pbih0LmRhdGUoKSx3dCh0LnllYXIoKSxlKSksdC5fZFsic2V0IisodC5faXNVVEM/IlVUQyI6IiIpKyJNb250aCJdKGUsbiksdH1mdW5jdGlvbiBBdCh0KXtyZXR1cm4gbnVsbCE9dD8oU3QodGhpcyx0KSxpLnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzKTpfdCh0aGlzLCJNb250aCIpfXZhciBNdD1jdCxPdD1jdDtmdW5jdGlvbiBCdCgpe2Z1bmN0aW9uIHQodCxlKXtyZXR1cm4gZS5sZW5ndGgtdC5sZW5ndGh9dmFyIGUsbixyPVtdLGk9W10sYT1bXTtmb3IoZT0wO2U8MTI7ZSsrKW49ZChbMmUzLGVdKSxyLnB1c2godGhpcy5tb250aHNTaG9ydChuLCIiKSksaS5wdXNoKHRoaXMubW9udGhzKG4sIiIpKSxhLnB1c2godGhpcy5tb250aHMobiwiIikpLGEucHVzaCh0aGlzLm1vbnRoc1Nob3J0KG4sIiIpKTtmb3Ioci5zb3J0KHQpLGkuc29ydCh0KSxhLnNvcnQodCksZT0wO2U8MTI7ZSsrKXJbZV09ZnQocltlXSksaVtlXT1mdChpW2VdKTtmb3IoZT0wO2U8MjQ7ZSsrKWFbZV09ZnQoYVtlXSk7dGhpcy5fbW9udGhzUmVnZXg9bmV3IFJlZ0V4cCgiXigiK2Euam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX21vbnRoc1Nob3J0UmVnZXg9dGhpcy5fbW9udGhzUmVnZXgsdGhpcy5fbW9udGhzU3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK2kuam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK3Iuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIE50KHQpe3ZhciBlO2lmKHQ8MTAwJiYwPD10KXt2YXIgbj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO25bMF09dCs0MDAsZT1uZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLG4pKSxpc0Zpbml0ZShlLmdldFVUQ0Z1bGxZZWFyKCkpJiZlLnNldFVUQ0Z1bGxZZWFyKHQpfWVsc2UgZT1uZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLGFyZ3VtZW50cykpO3JldHVybiBlfWZ1bmN0aW9uIER0KHQsZSxuKXt2YXIgcj03K2UtbjtyZXR1cm4tKDcrTnQodCwwLHIpLmdldFVUQ0RheSgpLWUpJTcrci0xfWZ1bmN0aW9uIEx0KHQsZSxuLHIsaSl7dmFyIGEsbyxzPTErNyooZS0xKSsoNytuLXIpJTcrRHQodCxyLGkpO3JldHVybiBvPXM8PTA/Z3QoYT10LTEpK3M6cz5ndCh0KT8oYT10KzEscy1ndCh0KSk6KGE9dCxzKSx7eWVhcjphLGRheU9mWWVhcjpvfX1mdW5jdGlvbiBJdCh0LGUsbil7dmFyIHIsaSxhPUR0KHQueWVhcigpLGUsbiksbz1NYXRoLmZsb29yKCh0LmRheU9mWWVhcigpLWEtMSkvNykrMTtyZXR1cm4gbzwxP3I9bytSdChpPXQueWVhcigpLTEsZSxuKTpvPlJ0KHQueWVhcigpLGUsbik/KHI9by1SdCh0LnllYXIoKSxlLG4pLGk9dC55ZWFyKCkrMSk6KGk9dC55ZWFyKCkscj1vKSx7d2VlazpyLHllYXI6aX19ZnVuY3Rpb24gUnQodCxlLG4pe3ZhciByPUR0KHQsZSxuKSxpPUR0KHQrMSxlLG4pO3JldHVybihndCh0KS1yK2kpLzd9ZnVuY3Rpb24gRnQodCxlKXtyZXR1cm4gdC5zbGljZShlLDcpLmNvbmNhdCh0LnNsaWNlKDAsZSkpfXEoInciLFsid3ciLDJdLCJ3byIsIndlZWsiKSxxKCJXIixbIldXIiwyXSwiV28iLCJpc29XZWVrIiksTCgid2VlayIsInciKSxMKCJpc29XZWVrIiwiVyIpLFAoIndlZWsiLDUpLFAoImlzb1dlZWsiLDUpLGx0KCJ3IixLKSxsdCgid3ciLEssRyksbHQoIlciLEspLGx0KCJXVyIsSyxHKSx5dChbInciLCJ3dyIsIlciLCJXVyJdLChmdW5jdGlvbih0LGUsbixyKXtlW3Iuc3Vic3RyKDAsMSldPXcodCl9KSkscSgiZCIsMCwiZG8iLCJkYXkiKSxxKCJkZCIsMCwwLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNNaW4odGhpcyx0KX0pKSxxKCJkZGQiLDAsMCwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzU2hvcnQodGhpcyx0KX0pKSxxKCJkZGRkIiwwLDAsKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5cyh0aGlzLHQpfSkpLHEoImUiLDAsMCwid2Vla2RheSIpLHEoIkUiLDAsMCwiaXNvV2Vla2RheSIpLEwoImRheSIsImQiKSxMKCJ3ZWVrZGF5IiwiZSIpLEwoImlzb1dlZWtkYXkiLCJFIiksUCgiZGF5IiwxMSksUCgid2Vla2RheSIsMTEpLFAoImlzb1dlZWtkYXkiLDExKSxsdCgiZCIsSyksbHQoImUiLEspLGx0KCJFIixLKSxsdCgiZGQiLChmdW5jdGlvbih0LGUpe3JldHVybiBlLndlZWtkYXlzTWluUmVnZXgodCl9KSksbHQoImRkZCIsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUud2Vla2RheXNTaG9ydFJlZ2V4KHQpfSkpLGx0KCJkZGRkIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS53ZWVrZGF5c1JlZ2V4KHQpfSkpLHl0KFsiZGQiLCJkZGQiLCJkZGRkIl0sKGZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPW4uX2xvY2FsZS53ZWVrZGF5c1BhcnNlKHQscixuLl9zdHJpY3QpO251bGwhPWk/ZS5kPWk6cChuKS5pbnZhbGlkV2Vla2RheT10fSkpLHl0KFsiZCIsImUiLCJFIl0sKGZ1bmN0aW9uKHQsZSxuLHIpe2Vbcl09dyh0KX0pKTt2YXIgUHQ9IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLGp0PSJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksWXQ9IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLHp0PWN0LFV0PWN0LCR0PWN0O2Z1bmN0aW9uIHF0KCl7ZnVuY3Rpb24gdCh0LGUpe3JldHVybiBlLmxlbmd0aC10Lmxlbmd0aH12YXIgZSxuLHIsaSxhLG89W10scz1bXSxjPVtdLHU9W107Zm9yKGU9MDtlPDc7ZSsrKW49ZChbMmUzLDFdKS5kYXkoZSkscj10aGlzLndlZWtkYXlzTWluKG4sIiIpLGk9dGhpcy53ZWVrZGF5c1Nob3J0KG4sIiIpLGE9dGhpcy53ZWVrZGF5cyhuLCIiKSxvLnB1c2gocikscy5wdXNoKGkpLGMucHVzaChhKSx1LnB1c2gociksdS5wdXNoKGkpLHUucHVzaChhKTtmb3Ioby5zb3J0KHQpLHMuc29ydCh0KSxjLnNvcnQodCksdS5zb3J0KHQpLGU9MDtlPDc7ZSsrKXNbZV09ZnQoc1tlXSksY1tlXT1mdChjW2VdKSx1W2VdPWZ0KHVbZV0pO3RoaXMuX3dlZWtkYXlzUmVnZXg9bmV3IFJlZ0V4cCgiXigiK3Uuam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleD10aGlzLl93ZWVrZGF5c1JlZ2V4LHRoaXMuX3dlZWtkYXlzTWluUmVnZXg9dGhpcy5fd2Vla2RheXNSZWdleCx0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4PW5ldyBSZWdFeHAoIl4oIitjLmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK3Muam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK28uam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIFd0KCl7cmV0dXJuIHRoaXMuaG91cnMoKSUxMnx8MTJ9ZnVuY3Rpb24gVnQodCxlKXtxKHQsMCwwLChmdW5jdGlvbigpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tZXJpZGllbSh0aGlzLmhvdXJzKCksdGhpcy5taW51dGVzKCksZSl9KSl9ZnVuY3Rpb24gSHQodCxlKXtyZXR1cm4gZS5fbWVyaWRpZW1QYXJzZX1xKCJIIixbIkhIIiwyXSwwLCJob3VyIikscSgiaCIsWyJoaCIsMl0sMCxXdCkscSgiayIsWyJrayIsMl0sMCwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ob3VycygpfHwyNH0pKSxxKCJobW0iLDAsMCwoZnVuY3Rpb24oKXtyZXR1cm4iIitXdC5hcHBseSh0aGlzKStqKHRoaXMubWludXRlcygpLDIpfSkpLHEoImhtbXNzIiwwLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIiIrV3QuYXBwbHkodGhpcykraih0aGlzLm1pbnV0ZXMoKSwyKStqKHRoaXMuc2Vjb25kcygpLDIpfSkpLHEoIkhtbSIsMCwwLChmdW5jdGlvbigpe3JldHVybiIiK3RoaXMuaG91cnMoKStqKHRoaXMubWludXRlcygpLDIpfSkpLHEoIkhtbXNzIiwwLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIiIrdGhpcy5ob3VycygpK2oodGhpcy5taW51dGVzKCksMikraih0aGlzLnNlY29uZHMoKSwyKX0pKSxWdCgiYSIsITApLFZ0KCJBIiwhMSksTCgiaG91ciIsImgiKSxQKCJob3VyIiwxMyksbHQoImEiLEh0KSxsdCgiQSIsSHQpLGx0KCJIIixLKSxsdCgiaCIsSyksbHQoImsiLEspLGx0KCJISCIsSyxHKSxsdCgiaGgiLEssRyksbHQoImtrIixLLEcpLGx0KCJobW0iLEopLGx0KCJobW1zcyIsdHQpLGx0KCJIbW0iLEopLGx0KCJIbW1zcyIsdHQpLHB0KFsiSCIsIkhIIl0sMykscHQoWyJrIiwia2siXSwoZnVuY3Rpb24odCxlLG4pe3ZhciByPXcodCk7ZVszXT0yND09PXI/MDpyfSkpLHB0KFsiYSIsIkEiXSwoZnVuY3Rpb24odCxlLG4pe24uX2lzUG09bi5fbG9jYWxlLmlzUE0odCksbi5fbWVyaWRpZW09dH0pKSxwdChbImgiLCJoaCJdLChmdW5jdGlvbih0LGUsbil7ZVszXT13KHQpLHAobikuYmlnSG91cj0hMH0pKSxwdCgiaG1tIiwoZnVuY3Rpb24odCxlLG4pe3ZhciByPXQubGVuZ3RoLTI7ZVszXT13KHQuc3Vic3RyKDAscikpLGVbNF09dyh0LnN1YnN0cihyKSkscChuKS5iaWdIb3VyPSEwfSkpLHB0KCJobW1zcyIsKGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10Lmxlbmd0aC00LGk9dC5sZW5ndGgtMjtlWzNdPXcodC5zdWJzdHIoMCxyKSksZVs0XT13KHQuc3Vic3RyKHIsMikpLGVbNV09dyh0LnN1YnN0cihpKSkscChuKS5iaWdIb3VyPSEwfSkpLHB0KCJIbW0iLChmdW5jdGlvbih0LGUsbil7dmFyIHI9dC5sZW5ndGgtMjtlWzNdPXcodC5zdWJzdHIoMCxyKSksZVs0XT13KHQuc3Vic3RyKHIpKX0pKSxwdCgiSG1tc3MiLChmdW5jdGlvbih0LGUsbil7dmFyIHI9dC5sZW5ndGgtNCxpPXQubGVuZ3RoLTI7ZVszXT13KHQuc3Vic3RyKDAscikpLGVbNF09dyh0LnN1YnN0cihyLDIpKSxlWzVdPXcodC5zdWJzdHIoaSkpfSkpO3ZhciBHdCxYdD14dCgiSG91cnMiLCEwKSxadD17Y2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxsb25nRGF0ZUZvcm1hdDp7TFRTOiJoOm1tOnNzIEEiLExUOiJoOm1tIEEiLEw6Ik1NL0REL1lZWVkiLExMOiJNTU1NIEQsIFlZWVkiLExMTDoiTU1NTSBELCBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQSJ9LGludmFsaWREYXRlOiJJbnZhbGlkIGRhdGUiLG9yZGluYWw6IiVkIixkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LyxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sbW9udGhzOlR0LG1vbnRoc1Nob3J0OkN0LHdlZWs6e2RvdzowLGRveTo2fSx3ZWVrZGF5czpQdCx3ZWVrZGF5c01pbjpZdCx3ZWVrZGF5c1Nob3J0Omp0LG1lcmlkaWVtUGFyc2U6L1thcF1cLj9tP1wuPy9pfSxRdD17fSxLdD17fTtmdW5jdGlvbiBKdCh0KXtyZXR1cm4gdD90LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgiXyIsIi0iKTp0fWZ1bmN0aW9uIHRlKGUpe3ZhciByPW51bGw7aWYoIVF0W2VdJiZ2b2lkIDAhPT10JiZ0JiZ0LmV4cG9ydHMpdHJ5e3I9R3QuX2FiYnIsbigxOTgpKCIuLyIrZSksZWUocil9Y2F0Y2goZSl7fXJldHVybiBRdFtlXX1mdW5jdGlvbiBlZSh0LGUpe3ZhciBuO3JldHVybiB0JiYoKG49cyhlKT9yZSh0KTpuZSh0LGUpKT9HdD1uOiJ1bmRlZmluZWQiIT10eXBlb2YgY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oIkxvY2FsZSAiK3QrIiBub3QgZm91bmQuIERpZCB5b3UgZm9yZ2V0IHRvIGxvYWQgaXQ/IikpLEd0Ll9hYmJyfWZ1bmN0aW9uIG5lKHQsZSl7aWYobnVsbD09PWUpcmV0dXJuIGRlbGV0ZSBRdFt0XSxudWxsO3ZhciBuLHI9WnQ7aWYoZS5hYmJyPXQsbnVsbCE9UXRbdF0pTSgiZGVmaW5lTG9jYWxlT3ZlcnJpZGUiLCJ1c2UgbW9tZW50LnVwZGF0ZUxvY2FsZShsb2NhbGVOYW1lLCBjb25maWcpIHRvIGNoYW5nZSBhbiBleGlzdGluZyBsb2NhbGUuIG1vbWVudC5kZWZpbmVMb2NhbGUobG9jYWxlTmFtZSwgY29uZmlnKSBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGUgU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZGVmaW5lLWxvY2FsZS8gZm9yIG1vcmUgaW5mby4iKSxyPVF0W3RdLl9jb25maWc7ZWxzZSBpZihudWxsIT1lLnBhcmVudExvY2FsZSlpZihudWxsIT1RdFtlLnBhcmVudExvY2FsZV0pcj1RdFtlLnBhcmVudExvY2FsZV0uX2NvbmZpZztlbHNle2lmKG51bGw9PShuPXRlKGUucGFyZW50TG9jYWxlKSkpcmV0dXJuIEt0W2UucGFyZW50TG9jYWxlXXx8KEt0W2UucGFyZW50TG9jYWxlXT1bXSksS3RbZS5wYXJlbnRMb2NhbGVdLnB1c2goe25hbWU6dCxjb25maWc6ZX0pLG51bGw7cj1uLl9jb25maWd9cmV0dXJuIFF0W3RdPW5ldyBOKEIocixlKSksS3RbdF0mJkt0W3RdLmZvckVhY2goKGZ1bmN0aW9uKHQpe25lKHQubmFtZSx0LmNvbmZpZyl9KSksZWUodCksUXRbdF19ZnVuY3Rpb24gcmUodCl7dmFyIGU7aWYodCYmdC5fbG9jYWxlJiZ0Ll9sb2NhbGUuX2FiYnImJih0PXQuX2xvY2FsZS5fYWJiciksIXQpcmV0dXJuIEd0O2lmKCFhKHQpKXtpZihlPXRlKHQpKXJldHVybiBlO3Q9W3RdfXJldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGUsbixyLGksYT0wO2E8dC5sZW5ndGg7KXtmb3IoZT0oaT1KdCh0W2FdKS5zcGxpdCgiLSIpKS5sZW5ndGgsbj0obj1KdCh0W2ErMV0pKT9uLnNwbGl0KCItIik6bnVsbDswPGU7KXtpZihyPXRlKGkuc2xpY2UoMCxlKS5qb2luKCItIikpKXJldHVybiByO2lmKG4mJm4ubGVuZ3RoPj1lJiZFKGksbiwhMCk+PWUtMSlicmVhaztlLS19YSsrfXJldHVybiBHdH0odCl9ZnVuY3Rpb24gaWUodCl7dmFyIGUsbj10Ll9hO3JldHVybiBuJiYtMj09PXAodCkub3ZlcmZsb3cmJihlPW5bMV08MHx8MTE8blsxXT8xOm5bMl08MXx8blsyXT53dChuWzBdLG5bMV0pPzI6blszXTwwfHwyNDxuWzNdfHwyND09PW5bM10mJigwIT09bls0XXx8MCE9PW5bNV18fDAhPT1uWzZdKT8zOm5bNF08MHx8NTk8bls0XT80Om5bNV08MHx8NTk8bls1XT81Om5bNl08MHx8OTk5PG5bNl0/NjotMSxwKHQpLl9vdmVyZmxvd0RheU9mWWVhciYmKGU8MHx8MjxlKSYmKGU9MikscCh0KS5fb3ZlcmZsb3dXZWVrcyYmLTE9PT1lJiYoZT03KSxwKHQpLl9vdmVyZmxvd1dlZWtkYXkmJi0xPT09ZSYmKGU9OCkscCh0KS5vdmVyZmxvdz1lKSx0fWZ1bmN0aW9uIGFlKHQsZSxuKXtyZXR1cm4gbnVsbCE9dD90Om51bGwhPWU/ZTpufWZ1bmN0aW9uIG9lKHQpe3ZhciBlLG4scixhLG8scz1bXTtpZighdC5fZCl7dmFyIGMsdTtmb3IoYz10LHU9bmV3IERhdGUoaS5ub3coKSkscj1jLl91c2VVVEM/W3UuZ2V0VVRDRnVsbFllYXIoKSx1LmdldFVUQ01vbnRoKCksdS5nZXRVVENEYXRlKCldOlt1LmdldEZ1bGxZZWFyKCksdS5nZXRNb250aCgpLHUuZ2V0RGF0ZSgpXSx0Ll93JiZudWxsPT10Ll9hWzJdJiZudWxsPT10Ll9hWzFdJiZmdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxhLG8scyxjO2lmKG51bGwhPShlPXQuX3cpLkdHfHxudWxsIT1lLld8fG51bGwhPWUuRSlhPTEsbz00LG49YWUoZS5HRyx0Ll9hWzBdLEl0KHhlKCksMSw0KS55ZWFyKSxyPWFlKGUuVywxKSwoKGk9YWUoZS5FLDEpKTwxfHw3PGkpJiYoYz0hMCk7ZWxzZXthPXQuX2xvY2FsZS5fd2Vlay5kb3csbz10Ll9sb2NhbGUuX3dlZWsuZG95O3ZhciB1PUl0KHhlKCksYSxvKTtuPWFlKGUuZ2csdC5fYVswXSx1LnllYXIpLHI9YWUoZS53LHUud2VlayksbnVsbCE9ZS5kPygoaT1lLmQpPDB8fDY8aSkmJihjPSEwKTpudWxsIT1lLmU/KGk9ZS5lK2EsKGUuZTwwfHw2PGUuZSkmJihjPSEwKSk6aT1hfXI8MXx8cj5SdChuLGEsbyk/cCh0KS5fb3ZlcmZsb3dXZWVrcz0hMDpudWxsIT1jP3AodCkuX292ZXJmbG93V2Vla2RheT0hMDoocz1MdChuLHIsaSxhLG8pLHQuX2FbMF09cy55ZWFyLHQuX2RheU9mWWVhcj1zLmRheU9mWWVhcil9KHQpLG51bGwhPXQuX2RheU9mWWVhciYmKG89YWUodC5fYVswXSxyWzBdKSwodC5fZGF5T2ZZZWFyPmd0KG8pfHwwPT09dC5fZGF5T2ZZZWFyKSYmKHAodCkuX292ZXJmbG93RGF5T2ZZZWFyPSEwKSxuPU50KG8sMCx0Ll9kYXlPZlllYXIpLHQuX2FbMV09bi5nZXRVVENNb250aCgpLHQuX2FbMl09bi5nZXRVVENEYXRlKCkpLGU9MDtlPDMmJm51bGw9PXQuX2FbZV07KytlKXQuX2FbZV09c1tlXT1yW2VdO2Zvcig7ZTw3O2UrKyl0Ll9hW2VdPXNbZV09bnVsbD09dC5fYVtlXT8yPT09ZT8xOjA6dC5fYVtlXTsyND09PXQuX2FbM10mJjA9PT10Ll9hWzRdJiYwPT09dC5fYVs1XSYmMD09PXQuX2FbNl0mJih0Ll9uZXh0RGF5PSEwLHQuX2FbM109MCksdC5fZD0odC5fdXNlVVRDP050OmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe3ZhciBzO3JldHVybiB0PDEwMCYmMDw9dD8ocz1uZXcgRGF0ZSh0KzQwMCxlLG4scixpLGEsbyksaXNGaW5pdGUocy5nZXRGdWxsWWVhcigpKSYmcy5zZXRGdWxsWWVhcih0KSk6cz1uZXcgRGF0ZSh0LGUsbixyLGksYSxvKSxzfSkuYXBwbHkobnVsbCxzKSxhPXQuX3VzZVVUQz90Ll9kLmdldFVUQ0RheSgpOnQuX2QuZ2V0RGF5KCksbnVsbCE9dC5fdHptJiZ0Ll9kLnNldFVUQ01pbnV0ZXModC5fZC5nZXRVVENNaW51dGVzKCktdC5fdHptKSx0Ll9uZXh0RGF5JiYodC5fYVszXT0yNCksdC5fdyYmdm9pZCAwIT09dC5fdy5kJiZ0Ll93LmQhPT1hJiYocCh0KS53ZWVrZGF5TWlzbWF0Y2g9ITApfX12YXIgc2U9L15ccyooKD86WystXVxkezZ9fFxkezR9KS0oPzpcZFxkLVxkXGR8V1xkXGQtXGR8V1xkXGR8XGRcZFxkfFxkXGQpKSg/OihUfCApKFxkXGQoPzo6XGRcZCg/OjpcZFxkKD86Wy4sXVxkKyk/KT8pPykoW1wrXC1dXGRcZCg/Ojo/XGRcZCk/fFxzKlopPyk/JC8sY2U9L15ccyooKD86WystXVxkezZ9fFxkezR9KSg/OlxkXGRcZFxkfFdcZFxkXGR8V1xkXGR8XGRcZFxkfFxkXGQpKSg/OihUfCApKFxkXGQoPzpcZFxkKD86XGRcZCg/OlsuLF1cZCspPyk/KT8pKFtcK1wtXVxkXGQoPzo6P1xkXGQpP3xccypaKT8pPyQvLHVlPS9afFsrLV1cZFxkKD86Oj9cZFxkKT8vLGxlPVtbIllZWVlZWS1NTS1ERCIsL1srLV1cZHs2fS1cZFxkLVxkXGQvXSxbIllZWVktTU0tREQiLC9cZHs0fS1cZFxkLVxkXGQvXSxbIkdHR0ctW1ddV1ctRSIsL1xkezR9LVdcZFxkLVxkL10sWyJHR0dHLVtXXVdXIiwvXGR7NH0tV1xkXGQvLCExXSxbIllZWVktREREIiwvXGR7NH0tXGR7M30vXSxbIllZWVktTU0iLC9cZHs0fS1cZFxkLywhMV0sWyJZWVlZWVlNTUREIiwvWystXVxkezEwfS9dLFsiWVlZWU1NREQiLC9cZHs4fS9dLFsiR0dHR1tXXVdXRSIsL1xkezR9V1xkezN9L10sWyJHR0dHW1ddV1ciLC9cZHs0fVdcZHsyfS8sITFdLFsiWVlZWURERCIsL1xkezd9L11dLGhlPVtbIkhIOm1tOnNzLlNTU1MiLC9cZFxkOlxkXGQ6XGRcZFwuXGQrL10sWyJISDptbTpzcyxTU1NTIiwvXGRcZDpcZFxkOlxkXGQsXGQrL10sWyJISDptbTpzcyIsL1xkXGQ6XGRcZDpcZFxkL10sWyJISDptbSIsL1xkXGQ6XGRcZC9dLFsiSEhtbXNzLlNTU1MiLC9cZFxkXGRcZFxkXGRcLlxkKy9dLFsiSEhtbXNzLFNTU1MiLC9cZFxkXGRcZFxkXGQsXGQrL10sWyJISG1tc3MiLC9cZFxkXGRcZFxkXGQvXSxbIkhIbW0iLC9cZFxkXGRcZC9dLFsiSEgiLC9cZFxkL11dLGZlPS9eXC8/RGF0ZVwoKFwtP1xkKykvaTtmdW5jdGlvbiBkZSh0KXt2YXIgZSxuLHIsaSxhLG8scz10Ll9pLGM9c2UuZXhlYyhzKXx8Y2UuZXhlYyhzKTtpZihjKXtmb3IocCh0KS5pc289ITAsZT0wLG49bGUubGVuZ3RoO2U8bjtlKyspaWYobGVbZV1bMV0uZXhlYyhjWzFdKSl7aT1sZVtlXVswXSxyPSExIT09bGVbZV1bMl07YnJlYWt9aWYobnVsbD09aSlyZXR1cm4gdm9pZCh0Ll9pc1ZhbGlkPSExKTtpZihjWzNdKXtmb3IoZT0wLG49aGUubGVuZ3RoO2U8bjtlKyspaWYoaGVbZV1bMV0uZXhlYyhjWzNdKSl7YT0oY1syXXx8IiAiKStoZVtlXVswXTticmVha31pZihudWxsPT1hKXJldHVybiB2b2lkKHQuX2lzVmFsaWQ9ITEpfWlmKCFyJiZudWxsIT1hKXJldHVybiB2b2lkKHQuX2lzVmFsaWQ9ITEpO2lmKGNbNF0pe2lmKCF1ZS5leGVjKGNbNF0pKXJldHVybiB2b2lkKHQuX2lzVmFsaWQ9ITEpO289IloifXQuX2Y9aSsoYXx8IiIpKyhvfHwiIiksdmUodCl9ZWxzZSB0Ll9pc1ZhbGlkPSExfXZhciBwZT0vXig/OihNb258VHVlfFdlZHxUaHV8RnJpfFNhdHxTdW4pLD9ccyk/KFxkezEsMn0pXHMoSmFufEZlYnxNYXJ8QXByfE1heXxKdW58SnVsfEF1Z3xTZXB8T2N0fE5vdnxEZWMpXHMoXGR7Miw0fSlccyhcZFxkKTooXGRcZCkoPzo6KFxkXGQpKT9ccyg/OihVVHxHTVR8W0VDTVBdW1NEXVQpfChbWnpdKXwoWystXVxkezR9KSkkLyx5ZT17VVQ6MCxHTVQ6MCxFRFQ6LTI0MCxFU1Q6LTMwMCxDRFQ6LTMwMCxDU1Q6LTM2MCxNRFQ6LTM2MCxNU1Q6LTQyMCxQRFQ6LTQyMCxQU1Q6LTQ4MH07ZnVuY3Rpb24gZ2UodCl7dmFyIGUsbixyLGk9cGUuZXhlYyh0Ll9pLnJlcGxhY2UoL1woW14pXSpcKXxbXG5cdF0vZywiICIpLnJlcGxhY2UoLyhcc1xzKykvZywiICIpLnJlcGxhY2UoL15cc1xzKi8sIiIpLnJlcGxhY2UoL1xzXHMqJC8sIiIpKTtpZihpKXt2YXIgYT1mdW5jdGlvbih0LGUsbixyLGksYSl7dmFyIG89W2Z1bmN0aW9uKHQpe3ZhciBlPXBhcnNlSW50KHQsMTApO3JldHVybiBlPD00OT8yZTMrZTplPD05OTk/MTkwMCtlOmV9KHQpLEN0LmluZGV4T2YoZSkscGFyc2VJbnQobiwxMCkscGFyc2VJbnQociwxMCkscGFyc2VJbnQoaSwxMCldO3JldHVybiBhJiZvLnB1c2gocGFyc2VJbnQoYSwxMCkpLG99KGlbNF0saVszXSxpWzJdLGlbNV0saVs2XSxpWzddKTtpZihuPWEscj10LChlPWlbMV0pJiZqdC5pbmRleE9mKGUpIT09bmV3IERhdGUoblswXSxuWzFdLG5bMl0pLmdldERheSgpJiYocChyKS53ZWVrZGF5TWlzbWF0Y2g9ITAsIShyLl9pc1ZhbGlkPSExKSkpcmV0dXJuO3QuX2E9YSx0Ll90em09ZnVuY3Rpb24odCxlLG4pe2lmKHQpcmV0dXJuIHllW3RdO2lmKGUpcmV0dXJuIDA7dmFyIHI9cGFyc2VJbnQobiwxMCksaT1yJTEwMDtyZXR1cm4oci1pKS8xMDAqNjAraX0oaVs4XSxpWzldLGlbMTBdKSx0Ll9kPU50LmFwcGx5KG51bGwsdC5fYSksdC5fZC5zZXRVVENNaW51dGVzKHQuX2QuZ2V0VVRDTWludXRlcygpLXQuX3R6bSkscCh0KS5yZmMyODIyPSEwfWVsc2UgdC5faXNWYWxpZD0hMX1mdW5jdGlvbiB2ZSh0KXtpZih0Ll9mIT09aS5JU09fODYwMSlpZih0Ll9mIT09aS5SRkNfMjgyMil7dC5fYT1bXSxwKHQpLmVtcHR5PSEwO3ZhciBlLG4scixhLG8scyxjLHUsbD0iIit0Ll9pLGY9bC5sZW5ndGgsZD0wO2ZvcihyPVYodC5fZix0Ll9sb2NhbGUpLm1hdGNoKFkpfHxbXSxlPTA7ZTxyLmxlbmd0aDtlKyspYT1yW2VdLChuPShsLm1hdGNoKGh0KGEsdCkpfHxbXSlbMF0pJiYoMDwobz1sLnN1YnN0cigwLGwuaW5kZXhPZihuKSkpLmxlbmd0aCYmcCh0KS51bnVzZWRJbnB1dC5wdXNoKG8pLGw9bC5zbGljZShsLmluZGV4T2Yobikrbi5sZW5ndGgpLGQrPW4ubGVuZ3RoKSwkW2FdPyhuP3AodCkuZW1wdHk9ITE6cCh0KS51bnVzZWRUb2tlbnMucHVzaChhKSxzPWEsdT10LG51bGwhPShjPW4pJiZoKGR0LHMpJiZkdFtzXShjLHUuX2EsdSxzKSk6dC5fc3RyaWN0JiYhbiYmcCh0KS51bnVzZWRUb2tlbnMucHVzaChhKTtwKHQpLmNoYXJzTGVmdE92ZXI9Zi1kLDA8bC5sZW5ndGgmJnAodCkudW51c2VkSW5wdXQucHVzaChsKSx0Ll9hWzNdPD0xMiYmITA9PT1wKHQpLmJpZ0hvdXImJjA8dC5fYVszXSYmKHAodCkuYmlnSG91cj12b2lkIDApLHAodCkucGFyc2VkRGF0ZVBhcnRzPXQuX2Euc2xpY2UoMCkscCh0KS5tZXJpZGllbT10Ll9tZXJpZGllbSx0Ll9hWzNdPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcjtyZXR1cm4gbnVsbD09bj9lOm51bGwhPXQubWVyaWRpZW1Ib3VyP3QubWVyaWRpZW1Ib3VyKGUsbik6KG51bGwhPXQuaXNQTSYmKChyPXQuaXNQTShuKSkmJmU8MTImJihlKz0xMikscnx8MTIhPT1lfHwoZT0wKSksZSl9KHQuX2xvY2FsZSx0Ll9hWzNdLHQuX21lcmlkaWVtKSxvZSh0KSxpZSh0KX1lbHNlIGdlKHQpO2Vsc2UgZGUodCl9ZnVuY3Rpb24gbWUodCl7dmFyIGUsbixyLGgsZD10Ll9pLHY9dC5fZjtyZXR1cm4gdC5fbG9jYWxlPXQuX2xvY2FsZXx8cmUodC5fbCksbnVsbD09PWR8fHZvaWQgMD09PXYmJiIiPT09ZD9nKHtudWxsSW5wdXQ6ITB9KTooInN0cmluZyI9PXR5cGVvZiBkJiYodC5faT1kPXQuX2xvY2FsZS5wcmVwYXJzZShkKSksXyhkKT9uZXcgeChpZShkKSk6KHUoZCk/dC5fZD1kOmEodik/ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksYTtpZigwPT09dC5fZi5sZW5ndGgpcmV0dXJuIHAodCkuaW52YWxpZEZvcm1hdD0hMCx0Ll9kPW5ldyBEYXRlKE5hTik7Zm9yKGk9MDtpPHQuX2YubGVuZ3RoO2krKylhPTAsZT1tKHt9LHQpLG51bGwhPXQuX3VzZVVUQyYmKGUuX3VzZVVUQz10Ll91c2VVVEMpLGUuX2Y9dC5fZltpXSx2ZShlKSx5KGUpJiYoYSs9cChlKS5jaGFyc0xlZnRPdmVyLGErPTEwKnAoZSkudW51c2VkVG9rZW5zLmxlbmd0aCxwKGUpLnNjb3JlPWEsKG51bGw9PXJ8fGE8cikmJihyPWEsbj1lKSk7Zih0LG58fGUpfSh0KTp2P3ZlKHQpOnMobj0oZT10KS5faSk/ZS5fZD1uZXcgRGF0ZShpLm5vdygpKTp1KG4pP2UuX2Q9bmV3IERhdGUobi52YWx1ZU9mKCkpOiJzdHJpbmciPT10eXBlb2Ygbj8ocj1lLG51bGw9PT0oaD1mZS5leGVjKHIuX2kpKT8oZGUociksITE9PT1yLl9pc1ZhbGlkJiYoZGVsZXRlIHIuX2lzVmFsaWQsZ2UociksITE9PT1yLl9pc1ZhbGlkJiYoZGVsZXRlIHIuX2lzVmFsaWQsaS5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhyKSkpKTpyLl9kPW5ldyBEYXRlKCtoWzFdKSk6YShuKT8oZS5fYT1sKG4uc2xpY2UoMCksKGZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUludCh0LDEwKX0pKSxvZShlKSk6byhuKT9mdW5jdGlvbih0KXtpZighdC5fZCl7dmFyIGU9Uih0Ll9pKTt0Ll9hPWwoW2UueWVhcixlLm1vbnRoLGUuZGF5fHxlLmRhdGUsZS5ob3VyLGUubWludXRlLGUuc2Vjb25kLGUubWlsbGlzZWNvbmRdLChmdW5jdGlvbih0KXtyZXR1cm4gdCYmcGFyc2VJbnQodCwxMCl9KSksb2UodCl9fShlKTpjKG4pP2UuX2Q9bmV3IERhdGUobik6aS5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhlKSx5KHQpfHwodC5fZD1udWxsKSx0KSl9ZnVuY3Rpb24gYmUodCxlLG4scixpKXt2YXIgcyxjPXt9O3JldHVybiEwIT09biYmITEhPT1ufHwocj1uLG49dm9pZCAwKSwobyh0KSYmZnVuY3Rpb24odCl7aWYoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMpcmV0dXJuIDA9PT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KS5sZW5ndGg7dmFyIGU7Zm9yKGUgaW4gdClpZih0Lmhhc093blByb3BlcnR5KGUpKXJldHVybiExO3JldHVybiEwfSh0KXx8YSh0KSYmMD09PXQubGVuZ3RoKSYmKHQ9dm9pZCAwKSxjLl9pc0FNb21lbnRPYmplY3Q9ITAsYy5fdXNlVVRDPWMuX2lzVVRDPWksYy5fbD1uLGMuX2k9dCxjLl9mPWUsYy5fc3RyaWN0PXIsKHM9bmV3IHgoaWUobWUoYykpKSkuX25leHREYXkmJihzLmFkZCgxLCJkIikscy5fbmV4dERheT12b2lkIDApLHN9ZnVuY3Rpb24geGUodCxlLG4scil7cmV0dXJuIGJlKHQsZSxuLHIsITEpfWkuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2s9QygidmFsdWUgcHJvdmlkZWQgaXMgbm90IGluIGEgcmVjb2duaXplZCBSRkMyODIyIG9yIElTTyBmb3JtYXQuIG1vbWVudCBjb25zdHJ1Y3Rpb24gZmFsbHMgYmFjayB0byBqcyBEYXRlKCksIHdoaWNoIGlzIG5vdCByZWxpYWJsZSBhY3Jvc3MgYWxsIGJyb3dzZXJzIGFuZCB2ZXJzaW9ucy4gTm9uIFJGQzI4MjIvSVNPIGRhdGUgZm9ybWF0cyBhcmUgZGlzY291cmFnZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhbiB1cGNvbWluZyBtYWpvciByZWxlYXNlLiBQbGVhc2UgcmVmZXIgdG8gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9qcy1kYXRlLyBmb3IgbW9yZSBpbmZvLiIsKGZ1bmN0aW9uKHQpe3QuX2Q9bmV3IERhdGUodC5faSsodC5fdXNlVVRDPyIgVVRDIjoiIikpfSkpLGkuSVNPXzg2MDE9ZnVuY3Rpb24oKXt9LGkuUkZDXzI4MjI9ZnVuY3Rpb24oKXt9O3ZhciBfZT1DKCJtb21lbnQoKS5taW4gaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5tYXggaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LyIsKGZ1bmN0aW9uKCl7dmFyIHQ9eGUuYXBwbHkobnVsbCxhcmd1bWVudHMpO3JldHVybiB0aGlzLmlzVmFsaWQoKSYmdC5pc1ZhbGlkKCk/dDx0aGlzP3RoaXM6dDpnKCl9KSksa2U9QygibW9tZW50KCkubWF4IGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWluIGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvbWluLW1heC8iLChmdW5jdGlvbigpe3ZhciB0PXhlLmFwcGx5KG51bGwsYXJndW1lbnRzKTtyZXR1cm4gdGhpcy5pc1ZhbGlkKCkmJnQuaXNWYWxpZCgpP3RoaXM8dD90aGlzOnQ6ZygpfSkpO2Z1bmN0aW9uIHdlKHQsZSl7dmFyIG4scjtpZigxPT09ZS5sZW5ndGgmJmEoZVswXSkmJihlPWVbMF0pLCFlLmxlbmd0aClyZXR1cm4geGUoKTtmb3Iobj1lWzBdLHI9MTtyPGUubGVuZ3RoOysrcillW3JdLmlzVmFsaWQoKSYmIWVbcl1bdF0obil8fChuPWVbcl0pO3JldHVybiBufXZhciBFZT1bInllYXIiLCJxdWFydGVyIiwibW9udGgiLCJ3ZWVrIiwiZGF5IiwiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsIm1pbGxpc2Vjb25kIl07ZnVuY3Rpb24gVGUodCl7dmFyIGU9Uih0KSxuPWUueWVhcnx8MCxyPWUucXVhcnRlcnx8MCxpPWUubW9udGh8fDAsYT1lLndlZWt8fGUuaXNvV2Vla3x8MCxvPWUuZGF5fHwwLHM9ZS5ob3VyfHwwLGM9ZS5taW51dGV8fDAsdT1lLnNlY29uZHx8MCxsPWUubWlsbGlzZWNvbmR8fDA7dGhpcy5faXNWYWxpZD1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdClpZigtMT09PW10LmNhbGwoRWUsZSl8fG51bGwhPXRbZV0mJmlzTmFOKHRbZV0pKXJldHVybiExO2Zvcih2YXIgbj0hMSxyPTA7cjxFZS5sZW5ndGg7KytyKWlmKHRbRWVbcl1dKXtpZihuKXJldHVybiExO3BhcnNlRmxvYXQodFtFZVtyXV0pIT09dyh0W0VlW3JdXSkmJihuPSEwKX1yZXR1cm4hMH0oZSksdGhpcy5fbWlsbGlzZWNvbmRzPStsKzFlMyp1KzZlNCpjKzFlMypzKjYwKjYwLHRoaXMuX2RheXM9K28rNyphLHRoaXMuX21vbnRocz0raSszKnIrMTIqbix0aGlzLl9kYXRhPXt9LHRoaXMuX2xvY2FsZT1yZSgpLHRoaXMuX2J1YmJsZSgpfWZ1bmN0aW9uIENlKHQpe3JldHVybiB0IGluc3RhbmNlb2YgVGV9ZnVuY3Rpb24gU2UodCl7cmV0dXJuIHQ8MD8tMSpNYXRoLnJvdW5kKC0xKnQpOk1hdGgucm91bmQodCl9ZnVuY3Rpb24gQWUodCxlKXtxKHQsMCwwLChmdW5jdGlvbigpe3ZhciB0PXRoaXMudXRjT2Zmc2V0KCksbj0iKyI7cmV0dXJuIHQ8MCYmKHQ9LXQsbj0iLSIpLG4raih+fih0LzYwKSwyKStlK2oofn50JTYwLDIpfSkpfUFlKCJaIiwiOiIpLEFlKCJaWiIsIiIpLGx0KCJaIixzdCksbHQoIlpaIixzdCkscHQoWyJaIiwiWloiXSwoZnVuY3Rpb24odCxlLG4pe24uX3VzZVVUQz0hMCxuLl90em09T2Uoc3QsdCl9KSk7dmFyIE1lPS8oW1wrXC1dfFxkXGQpL2dpO2Z1bmN0aW9uIE9lKHQsZSl7dmFyIG49KGV8fCIiKS5tYXRjaCh0KTtpZihudWxsPT09bilyZXR1cm4gbnVsbDt2YXIgcj0oKG5bbi5sZW5ndGgtMV18fFtdKSsiIikubWF0Y2goTWUpfHxbIi0iLDAsMF0saT02MCpyWzFdK3coclsyXSk7cmV0dXJuIDA9PT1pPzA6IisiPT09clswXT9pOi1pfWZ1bmN0aW9uIEJlKHQsZSl7dmFyIG4scjtyZXR1cm4gZS5faXNVVEM/KG49ZS5jbG9uZSgpLHI9KF8odCl8fHUodCk/dC52YWx1ZU9mKCk6eGUodCkudmFsdWVPZigpKS1uLnZhbHVlT2YoKSxuLl9kLnNldFRpbWUobi5fZC52YWx1ZU9mKCkrciksaS51cGRhdGVPZmZzZXQobiwhMSksbik6eGUodCkubG9jYWwoKX1mdW5jdGlvbiBOZSh0KXtyZXR1cm4gMTUqLU1hdGgucm91bmQodC5fZC5nZXRUaW1lem9uZU9mZnNldCgpLzE1KX1mdW5jdGlvbiBEZSgpe3JldHVybiEhdGhpcy5pc1ZhbGlkKCkmJnRoaXMuX2lzVVRDJiYwPT09dGhpcy5fb2Zmc2V0fWkudXBkYXRlT2Zmc2V0PWZ1bmN0aW9uKCl7fTt2YXIgTGU9L14oXC18XCspPyg/OihcZCopWy4gXSk/KFxkKylcOihcZCspKD86XDooXGQrKShcLlxkKik/KT8kLyxJZT0vXigtfFwrKT9QKD86KFstK10/WzAtOSwuXSopWSk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopVyk/KD86KFstK10/WzAtOSwuXSopRCk/KD86VCg/OihbLStdP1swLTksLl0qKUgpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVMpPyk/JC87ZnVuY3Rpb24gUmUodCxlKXt2YXIgbixyLGksYT10LG89bnVsbDtyZXR1cm4gQ2UodCk/YT17bXM6dC5fbWlsbGlzZWNvbmRzLGQ6dC5fZGF5cyxNOnQuX21vbnRoc306Yyh0KT8oYT17fSxlP2FbZV09dDphLm1pbGxpc2Vjb25kcz10KToobz1MZS5leGVjKHQpKT8obj0iLSI9PT1vWzFdPy0xOjEsYT17eTowLGQ6dyhvWzJdKSpuLGg6dyhvWzNdKSpuLG06dyhvWzRdKSpuLHM6dyhvWzVdKSpuLG1zOncoU2UoMWUzKm9bNl0pKSpufSk6KG89SWUuZXhlYyh0KSk/KG49Ii0iPT09b1sxXT8tMToxLGE9e3k6RmUob1syXSxuKSxNOkZlKG9bM10sbiksdzpGZShvWzRdLG4pLGQ6RmUob1s1XSxuKSxoOkZlKG9bNl0sbiksbTpGZShvWzddLG4pLHM6RmUob1s4XSxuKX0pOm51bGw9PWE/YT17fToib2JqZWN0Ij09dHlwZW9mIGEmJigiZnJvbSJpbiBhfHwidG8iaW4gYSkmJihpPWZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuIHQuaXNWYWxpZCgpJiZlLmlzVmFsaWQoKT8oZT1CZShlLHQpLHQuaXNCZWZvcmUoZSk/bj1QZSh0LGUpOigobj1QZShlLHQpKS5taWxsaXNlY29uZHM9LW4ubWlsbGlzZWNvbmRzLG4ubW9udGhzPS1uLm1vbnRocyksbik6e21pbGxpc2Vjb25kczowLG1vbnRoczowfX0oeGUoYS5mcm9tKSx4ZShhLnRvKSksKGE9e30pLm1zPWkubWlsbGlzZWNvbmRzLGEuTT1pLm1vbnRocykscj1uZXcgVGUoYSksQ2UodCkmJmgodCwiX2xvY2FsZSIpJiYoci5fbG9jYWxlPXQuX2xvY2FsZSkscn1mdW5jdGlvbiBGZSh0LGUpe3ZhciBuPXQmJnBhcnNlRmxvYXQodC5yZXBsYWNlKCIsIiwiLiIpKTtyZXR1cm4oaXNOYU4obik/MDpuKSplfWZ1bmN0aW9uIFBlKHQsZSl7dmFyIG49e307cmV0dXJuIG4ubW9udGhzPWUubW9udGgoKS10Lm1vbnRoKCkrMTIqKGUueWVhcigpLXQueWVhcigpKSx0LmNsb25lKCkuYWRkKG4ubW9udGhzLCJNIikuaXNBZnRlcihlKSYmLS1uLm1vbnRocyxuLm1pbGxpc2Vjb25kcz0rZS0rdC5jbG9uZSgpLmFkZChuLm1vbnRocywiTSIpLG59ZnVuY3Rpb24gamUodCxlKXtyZXR1cm4gZnVuY3Rpb24obixyKXt2YXIgaTtyZXR1cm4gbnVsbD09PXJ8fGlzTmFOKCtyKXx8KE0oZSwibW9tZW50KCkuIitlKyIocGVyaW9kLCBudW1iZXIpIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgbW9tZW50KCkuIitlKyIobnVtYmVyLCBwZXJpb2QpLiBTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9hZGQtaW52ZXJ0ZWQtcGFyYW0vIGZvciBtb3JlIGluZm8uIiksaT1uLG49cixyPWkpLFllKHRoaXMsUmUobj0ic3RyaW5nIj09dHlwZW9mIG4/K246bixyKSx0KSx0aGlzfX1mdW5jdGlvbiBZZSh0LGUsbixyKXt2YXIgYT1lLl9taWxsaXNlY29uZHMsbz1TZShlLl9kYXlzKSxzPVNlKGUuX21vbnRocyk7dC5pc1ZhbGlkKCkmJihyPW51bGw9PXJ8fHIscyYmU3QodCxfdCh0LCJNb250aCIpK3MqbiksbyYma3QodCwiRGF0ZSIsX3QodCwiRGF0ZSIpK28qbiksYSYmdC5fZC5zZXRUaW1lKHQuX2QudmFsdWVPZigpK2EqbiksciYmaS51cGRhdGVPZmZzZXQodCxvfHxzKSl9UmUuZm49VGUucHJvdG90eXBlLFJlLmludmFsaWQ9ZnVuY3Rpb24oKXtyZXR1cm4gUmUoTmFOKX07dmFyIHplPWplKDEsImFkZCIpLFVlPWplKC0xLCJzdWJ0cmFjdCIpO2Z1bmN0aW9uICRlKHQsZSl7dmFyIG49MTIqKGUueWVhcigpLXQueWVhcigpKSsoZS5tb250aCgpLXQubW9udGgoKSkscj10LmNsb25lKCkuYWRkKG4sIm1vbnRocyIpO3JldHVybi0obisoZS1yPDA/KGUtcikvKHItdC5jbG9uZSgpLmFkZChuLTEsIm1vbnRocyIpKTooZS1yKS8odC5jbG9uZSgpLmFkZChuKzEsIm1vbnRocyIpLXIpKSl8fDB9ZnVuY3Rpb24gcWUodCl7dmFyIGU7cmV0dXJuIHZvaWQgMD09PXQ/dGhpcy5fbG9jYWxlLl9hYmJyOihudWxsIT0oZT1yZSh0KSkmJih0aGlzLl9sb2NhbGU9ZSksdGhpcyl9aS5kZWZhdWx0Rm9ybWF0PSJZWVlZLU1NLUREVEhIOm1tOnNzWiIsaS5kZWZhdWx0Rm9ybWF0VXRjPSJZWVlZLU1NLUREVEhIOm1tOnNzW1pdIjt2YXIgV2U9QygibW9tZW50KCkubGFuZygpIGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQsIHVzZSBtb21lbnQoKS5sb2NhbGVEYXRhKCkgdG8gZ2V0IHRoZSBsYW5ndWFnZSBjb25maWd1cmF0aW9uLiBVc2UgbW9tZW50KCkubG9jYWxlKCkgdG8gY2hhbmdlIGxhbmd1YWdlcy4iLChmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD90aGlzLmxvY2FsZURhdGEoKTp0aGlzLmxvY2FsZSh0KX0pKTtmdW5jdGlvbiBWZSgpe3JldHVybiB0aGlzLl9sb2NhbGV9dmFyIEhlPTEyNjIyNzgwOGU1O2Z1bmN0aW9uIEdlKHQsZSl7cmV0dXJuKHQlZStlKSVlfWZ1bmN0aW9uIFhlKHQsZSxuKXtyZXR1cm4gdDwxMDAmJjA8PXQ/bmV3IERhdGUodCs0MDAsZSxuKS1IZTpuZXcgRGF0ZSh0LGUsbikudmFsdWVPZigpfWZ1bmN0aW9uIFplKHQsZSxuKXtyZXR1cm4gdDwxMDAmJjA8PXQ/RGF0ZS5VVEModCs0MDAsZSxuKS1IZTpEYXRlLlVUQyh0LGUsbil9ZnVuY3Rpb24gUWUodCxlKXtxKDAsW3QsdC5sZW5ndGhdLDAsZSl9ZnVuY3Rpb24gS2UodCxlLG4scixpKXt2YXIgYTtyZXR1cm4gbnVsbD09dD9JdCh0aGlzLHIsaSkueWVhcjooKGE9UnQodCxyLGkpKTxlJiYoZT1hKSxmdW5jdGlvbih0LGUsbixyLGkpe3ZhciBhPUx0KHQsZSxuLHIsaSksbz1OdChhLnllYXIsMCxhLmRheU9mWWVhcik7cmV0dXJuIHRoaXMueWVhcihvLmdldFVUQ0Z1bGxZZWFyKCkpLHRoaXMubW9udGgoby5nZXRVVENNb250aCgpKSx0aGlzLmRhdGUoby5nZXRVVENEYXRlKCkpLHRoaXN9LmNhbGwodGhpcyx0LGUsbixyLGkpKX1xKDAsWyJnZyIsMl0sMCwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53ZWVrWWVhcigpJTEwMH0pKSxxKDAsWyJHRyIsMl0sMCwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc29XZWVrWWVhcigpJTEwMH0pKSxRZSgiZ2dnZyIsIndlZWtZZWFyIiksUWUoImdnZ2dnIiwid2Vla1llYXIiKSxRZSgiR0dHRyIsImlzb1dlZWtZZWFyIiksUWUoIkdHR0dHIiwiaXNvV2Vla1llYXIiKSxMKCJ3ZWVrWWVhciIsImdnIiksTCgiaXNvV2Vla1llYXIiLCJHRyIpLFAoIndlZWtZZWFyIiwxKSxQKCJpc29XZWVrWWVhciIsMSksbHQoIkciLGF0KSxsdCgiZyIsYXQpLGx0KCJHRyIsSyxHKSxsdCgiZ2ciLEssRyksbHQoIkdHR0ciLG50LFopLGx0KCJnZ2dnIixudCxaKSxsdCgiR0dHR0ciLHJ0LFEpLGx0KCJnZ2dnZyIscnQsUSkseXQoWyJnZ2dnIiwiZ2dnZ2ciLCJHR0dHIiwiR0dHR0ciXSwoZnVuY3Rpb24odCxlLG4scil7ZVtyLnN1YnN0cigwLDIpXT13KHQpfSkpLHl0KFsiZ2ciLCJHRyJdLChmdW5jdGlvbih0LGUsbixyKXtlW3JdPWkucGFyc2VUd29EaWdpdFllYXIodCl9KSkscSgiUSIsMCwiUW8iLCJxdWFydGVyIiksTCgicXVhcnRlciIsIlEiKSxQKCJxdWFydGVyIiw3KSxsdCgiUSIsSCkscHQoIlEiLChmdW5jdGlvbih0LGUpe2VbMV09Myoodyh0KS0xKX0pKSxxKCJEIixbIkREIiwyXSwiRG8iLCJkYXRlIiksTCgiZGF0ZSIsIkQiKSxQKCJkYXRlIiw5KSxsdCgiRCIsSyksbHQoIkREIixLLEcpLGx0KCJEbyIsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ/ZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZXx8ZS5fb3JkaW5hbFBhcnNlOmUuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50fSkpLHB0KFsiRCIsIkREIl0sMikscHQoIkRvIiwoZnVuY3Rpb24odCxlKXtlWzJdPXcodC5tYXRjaChLKVswXSl9KSk7dmFyIEplPXh0KCJEYXRlIiwhMCk7cSgiREREIixbIkREREQiLDNdLCJERERvIiwiZGF5T2ZZZWFyIiksTCgiZGF5T2ZZZWFyIiwiREREIiksUCgiZGF5T2ZZZWFyIiw0KSxsdCgiREREIixldCksbHQoIkREREQiLFgpLHB0KFsiREREIiwiRERERCJdLChmdW5jdGlvbih0LGUsbil7bi5fZGF5T2ZZZWFyPXcodCl9KSkscSgibSIsWyJtbSIsMl0sMCwibWludXRlIiksTCgibWludXRlIiwibSIpLFAoIm1pbnV0ZSIsMTQpLGx0KCJtIixLKSxsdCgibW0iLEssRykscHQoWyJtIiwibW0iXSw0KTt2YXIgdG49eHQoIk1pbnV0ZXMiLCExKTtxKCJzIixbInNzIiwyXSwwLCJzZWNvbmQiKSxMKCJzZWNvbmQiLCJzIiksUCgic2Vjb25kIiwxNSksbHQoInMiLEspLGx0KCJzcyIsSyxHKSxwdChbInMiLCJzcyJdLDUpO3ZhciBlbixubj14dCgiU2Vjb25kcyIsITEpO2ZvcihxKCJTIiwwLDAsKGZ1bmN0aW9uKCl7cmV0dXJufn4odGhpcy5taWxsaXNlY29uZCgpLzEwMCl9KSkscSgwLFsiU1MiLDJdLDAsKGZ1bmN0aW9uKCl7cmV0dXJufn4odGhpcy5taWxsaXNlY29uZCgpLzEwKX0pKSxxKDAsWyJTU1MiLDNdLDAsIm1pbGxpc2Vjb25kIikscSgwLFsiU1NTUyIsNF0sMCwoZnVuY3Rpb24oKXtyZXR1cm4gMTAqdGhpcy5taWxsaXNlY29uZCgpfSkpLHEoMCxbIlNTU1NTIiw1XSwwLChmdW5jdGlvbigpe3JldHVybiAxMDAqdGhpcy5taWxsaXNlY29uZCgpfSkpLHEoMCxbIlNTU1NTUyIsNl0sMCwoZnVuY3Rpb24oKXtyZXR1cm4gMWUzKnRoaXMubWlsbGlzZWNvbmQoKX0pKSxxKDAsWyJTU1NTU1NTIiw3XSwwLChmdW5jdGlvbigpe3JldHVybiAxZTQqdGhpcy5taWxsaXNlY29uZCgpfSkpLHEoMCxbIlNTU1NTU1NTIiw4XSwwLChmdW5jdGlvbigpe3JldHVybiAxZTUqdGhpcy5taWxsaXNlY29uZCgpfSkpLHEoMCxbIlNTU1NTU1NTUyIsOV0sMCwoZnVuY3Rpb24oKXtyZXR1cm4gMWU2KnRoaXMubWlsbGlzZWNvbmQoKX0pKSxMKCJtaWxsaXNlY29uZCIsIm1zIiksUCgibWlsbGlzZWNvbmQiLDE2KSxsdCgiUyIsZXQsSCksbHQoIlNTIixldCxHKSxsdCgiU1NTIixldCxYKSxlbj0iU1NTUyI7ZW4ubGVuZ3RoPD05O2VuKz0iUyIpbHQoZW4saXQpO2Z1bmN0aW9uIHJuKHQsZSl7ZVs2XT13KDFlMyooIjAuIit0KSl9Zm9yKGVuPSJTIjtlbi5sZW5ndGg8PTk7ZW4rPSJTIilwdChlbixybik7dmFyIGFuPXh0KCJNaWxsaXNlY29uZHMiLCExKTtxKCJ6IiwwLDAsInpvbmVBYmJyIikscSgienoiLDAsMCwiem9uZU5hbWUiKTt2YXIgb249eC5wcm90b3R5cGU7ZnVuY3Rpb24gc24odCl7cmV0dXJuIHR9b24uYWRkPXplLG9uLmNhbGVuZGFyPWZ1bmN0aW9uKHQsZSl7dmFyIG49dHx8eGUoKSxyPUJlKG4sdGhpcykuc3RhcnRPZigiZGF5IiksYT1pLmNhbGVuZGFyRm9ybWF0KHRoaXMscil8fCJzYW1lRWxzZSIsbz1lJiYoTyhlW2FdKT9lW2FdLmNhbGwodGhpcyxuKTplW2FdKTtyZXR1cm4gdGhpcy5mb3JtYXQob3x8dGhpcy5sb2NhbGVEYXRhKCkuY2FsZW5kYXIoYSx0aGlzLHhlKG4pKSl9LG9uLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB4KHRoaXMpfSxvbi5kaWZmPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBOYU47aWYoIShyPUJlKHQsdGhpcykpLmlzVmFsaWQoKSlyZXR1cm4gTmFOO3N3aXRjaChpPTZlNCooci51dGNPZmZzZXQoKS10aGlzLnV0Y09mZnNldCgpKSxlPUkoZSkpe2Nhc2UieWVhciI6YT0kZSh0aGlzLHIpLzEyO2JyZWFrO2Nhc2UibW9udGgiOmE9JGUodGhpcyxyKTticmVhaztjYXNlInF1YXJ0ZXIiOmE9JGUodGhpcyxyKS8zO2JyZWFrO2Nhc2Uic2Vjb25kIjphPSh0aGlzLXIpLzFlMzticmVhaztjYXNlIm1pbnV0ZSI6YT0odGhpcy1yKS82ZTQ7YnJlYWs7Y2FzZSJob3VyIjphPSh0aGlzLXIpLzM2ZTU7YnJlYWs7Y2FzZSJkYXkiOmE9KHRoaXMtci1pKS84NjRlNTticmVhaztjYXNlIndlZWsiOmE9KHRoaXMtci1pKS82MDQ4ZTU7YnJlYWs7ZGVmYXVsdDphPXRoaXMtcn1yZXR1cm4gbj9hOmsoYSl9LG9uLmVuZE9mPWZ1bmN0aW9uKHQpe3ZhciBlO2lmKHZvaWQgMD09PSh0PUkodCkpfHwibWlsbGlzZWNvbmQiPT09dHx8IXRoaXMuaXNWYWxpZCgpKXJldHVybiB0aGlzO3ZhciBuPXRoaXMuX2lzVVRDP1plOlhlO3N3aXRjaCh0KXtjYXNlInllYXIiOmU9bih0aGlzLnllYXIoKSsxLDAsMSktMTticmVhaztjYXNlInF1YXJ0ZXIiOmU9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCktdGhpcy5tb250aCgpJTMrMywxKS0xO2JyZWFrO2Nhc2UibW9udGgiOmU9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCkrMSwxKS0xO2JyZWFrO2Nhc2Uid2VlayI6ZT1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKS10aGlzLndlZWtkYXkoKSs3KS0xO2JyZWFrO2Nhc2UiaXNvV2VlayI6ZT1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKS0odGhpcy5pc29XZWVrZGF5KCktMSkrNyktMTticmVhaztjYXNlImRheSI6Y2FzZSJkYXRlIjplPW4odGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpKzEpLTE7YnJlYWs7Y2FzZSJob3VyIjplPXRoaXMuX2QudmFsdWVPZigpLGUrPTM2ZTUtR2UoZSsodGhpcy5faXNVVEM/MDo2ZTQqdGhpcy51dGNPZmZzZXQoKSksMzZlNSktMTticmVhaztjYXNlIm1pbnV0ZSI6ZT10aGlzLl9kLnZhbHVlT2YoKSxlKz02ZTQtR2UoZSw2ZTQpLTE7YnJlYWs7Y2FzZSJzZWNvbmQiOmU9dGhpcy5fZC52YWx1ZU9mKCksZSs9MWUzLUdlKGUsMWUzKS0xfXJldHVybiB0aGlzLl9kLnNldFRpbWUoZSksaS51cGRhdGVPZmZzZXQodGhpcywhMCksdGhpc30sb24uZm9ybWF0PWZ1bmN0aW9uKHQpe3R8fCh0PXRoaXMuaXNVdGMoKT9pLmRlZmF1bHRGb3JtYXRVdGM6aS5kZWZhdWx0Rm9ybWF0KTt2YXIgZT1XKHRoaXMsdCk7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLnBvc3Rmb3JtYXQoZSl9LG9uLmZyb209ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCkmJihfKHQpJiZ0LmlzVmFsaWQoKXx8eGUodCkuaXNWYWxpZCgpKT9SZSh7dG86dGhpcyxmcm9tOnR9KS5sb2NhbGUodGhpcy5sb2NhbGUoKSkuaHVtYW5pemUoIWUpOnRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCl9LG9uLmZyb21Ob3c9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZnJvbSh4ZSgpLHQpfSxvbi50bz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmlzVmFsaWQoKSYmKF8odCkmJnQuaXNWYWxpZCgpfHx4ZSh0KS5pc1ZhbGlkKCkpP1JlKHtmcm9tOnRoaXMsdG86dH0pLmxvY2FsZSh0aGlzLmxvY2FsZSgpKS5odW1hbml6ZSghZSk6dGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKX0sb24udG9Ob3c9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudG8oeGUoKSx0KX0sb24uZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBPKHRoaXNbdD1JKHQpXSk/dGhpc1t0XSgpOnRoaXN9LG9uLmludmFsaWRBdD1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMpLm92ZXJmbG93fSxvbi5pc0FmdGVyPWZ1bmN0aW9uKHQsZSl7dmFyIG49Xyh0KT90OnhlKHQpO3JldHVybiEoIXRoaXMuaXNWYWxpZCgpfHwhbi5pc1ZhbGlkKCkpJiYoIm1pbGxpc2Vjb25kIj09PShlPUkoZSl8fCJtaWxsaXNlY29uZCIpP3RoaXMudmFsdWVPZigpPm4udmFsdWVPZigpOm4udmFsdWVPZigpPHRoaXMuY2xvbmUoKS5zdGFydE9mKGUpLnZhbHVlT2YoKSl9LG9uLmlzQmVmb3JlPWZ1bmN0aW9uKHQsZSl7dmFyIG49Xyh0KT90OnhlKHQpO3JldHVybiEoIXRoaXMuaXNWYWxpZCgpfHwhbi5pc1ZhbGlkKCkpJiYoIm1pbGxpc2Vjb25kIj09PShlPUkoZSl8fCJtaWxsaXNlY29uZCIpP3RoaXMudmFsdWVPZigpPG4udmFsdWVPZigpOnRoaXMuY2xvbmUoKS5lbmRPZihlKS52YWx1ZU9mKCk8bi52YWx1ZU9mKCkpfSxvbi5pc0JldHdlZW49ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9Xyh0KT90OnhlKHQpLGE9XyhlKT9lOnhlKGUpO3JldHVybiEhKHRoaXMuaXNWYWxpZCgpJiZpLmlzVmFsaWQoKSYmYS5pc1ZhbGlkKCkpJiYoIigiPT09KHI9cnx8IigpIilbMF0/dGhpcy5pc0FmdGVyKGksbik6IXRoaXMuaXNCZWZvcmUoaSxuKSkmJigiKSI9PT1yWzFdP3RoaXMuaXNCZWZvcmUoYSxuKTohdGhpcy5pc0FmdGVyKGEsbikpfSxvbi5pc1NhbWU9ZnVuY3Rpb24odCxlKXt2YXIgbixyPV8odCk/dDp4ZSh0KTtyZXR1cm4hKCF0aGlzLmlzVmFsaWQoKXx8IXIuaXNWYWxpZCgpKSYmKCJtaWxsaXNlY29uZCI9PT0oZT1JKGUpfHwibWlsbGlzZWNvbmQiKT90aGlzLnZhbHVlT2YoKT09PXIudmFsdWVPZigpOihuPXIudmFsdWVPZigpLHRoaXMuY2xvbmUoKS5zdGFydE9mKGUpLnZhbHVlT2YoKTw9biYmbjw9dGhpcy5jbG9uZSgpLmVuZE9mKGUpLnZhbHVlT2YoKSkpfSxvbi5pc1NhbWVPckFmdGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuaXNTYW1lKHQsZSl8fHRoaXMuaXNBZnRlcih0LGUpfSxvbi5pc1NhbWVPckJlZm9yZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmlzU2FtZSh0LGUpfHx0aGlzLmlzQmVmb3JlKHQsZSl9LG9uLmlzVmFsaWQ9ZnVuY3Rpb24oKXtyZXR1cm4geSh0aGlzKX0sb24ubGFuZz1XZSxvbi5sb2NhbGU9cWUsb24ubG9jYWxlRGF0YT1WZSxvbi5tYXg9a2Usb24ubWluPV9lLG9uLnBhcnNpbmdGbGFncz1mdW5jdGlvbigpe3JldHVybiBmKHt9LHAodGhpcykpfSxvbi5zZXQ9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0Ij09dHlwZW9mIHQpZm9yKHZhciBuPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgbiBpbiB0KWUucHVzaCh7dW5pdDpuLHByaW9yaXR5OkZbbl19KTtyZXR1cm4gZS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LnByaW9yaXR5LWUucHJpb3JpdHl9KSksZX0odD1SKHQpKSxyPTA7cjxuLmxlbmd0aDtyKyspdGhpc1tuW3JdLnVuaXRdKHRbbltyXS51bml0XSk7ZWxzZSBpZihPKHRoaXNbdD1JKHQpXSkpcmV0dXJuIHRoaXNbdF0oZSk7cmV0dXJuIHRoaXN9LG9uLnN0YXJ0T2Y9ZnVuY3Rpb24odCl7dmFyIGU7aWYodm9pZCAwPT09KHQ9SSh0KSl8fCJtaWxsaXNlY29uZCI9PT10fHwhdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIHRoaXM7dmFyIG49dGhpcy5faXNVVEM/WmU6WGU7c3dpdGNoKHQpe2Nhc2UieWVhciI6ZT1uKHRoaXMueWVhcigpLDAsMSk7YnJlYWs7Y2FzZSJxdWFydGVyIjplPW4odGhpcy55ZWFyKCksdGhpcy5tb250aCgpLXRoaXMubW9udGgoKSUzLDEpO2JyZWFrO2Nhc2UibW9udGgiOmU9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksMSk7YnJlYWs7Y2FzZSJ3ZWVrIjplPW4odGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpLXRoaXMud2Vla2RheSgpKTticmVhaztjYXNlImlzb1dlZWsiOmU9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCktKHRoaXMuaXNvV2Vla2RheSgpLTEpKTticmVhaztjYXNlImRheSI6Y2FzZSJkYXRlIjplPW4odGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpKTticmVhaztjYXNlImhvdXIiOmU9dGhpcy5fZC52YWx1ZU9mKCksZS09R2UoZSsodGhpcy5faXNVVEM/MDo2ZTQqdGhpcy51dGNPZmZzZXQoKSksMzZlNSk7YnJlYWs7Y2FzZSJtaW51dGUiOmU9dGhpcy5fZC52YWx1ZU9mKCksZS09R2UoZSw2ZTQpO2JyZWFrO2Nhc2Uic2Vjb25kIjplPXRoaXMuX2QudmFsdWVPZigpLGUtPUdlKGUsMWUzKX1yZXR1cm4gdGhpcy5fZC5zZXRUaW1lKGUpLGkudXBkYXRlT2Zmc2V0KHRoaXMsITApLHRoaXN9LG9uLnN1YnRyYWN0PVVlLG9uLnRvQXJyYXk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVyblt0LnllYXIoKSx0Lm1vbnRoKCksdC5kYXRlKCksdC5ob3VyKCksdC5taW51dGUoKSx0LnNlY29uZCgpLHQubWlsbGlzZWNvbmQoKV19LG9uLnRvT2JqZWN0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm57eWVhcnM6dC55ZWFyKCksbW9udGhzOnQubW9udGgoKSxkYXRlOnQuZGF0ZSgpLGhvdXJzOnQuaG91cnMoKSxtaW51dGVzOnQubWludXRlcygpLHNlY29uZHM6dC5zZWNvbmRzKCksbWlsbGlzZWNvbmRzOnQubWlsbGlzZWNvbmRzKCl9fSxvbi50b0RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpfSxvbi50b0lTT1N0cmluZz1mdW5jdGlvbih0KXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGw7dmFyIGU9ITAhPT10LG49ZT90aGlzLmNsb25lKCkudXRjKCk6dGhpcztyZXR1cm4gbi55ZWFyKCk8MHx8OTk5OTxuLnllYXIoKT9XKG4sZT8iWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdIjoiWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTWiIpOk8oRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcpP2U/dGhpcy50b0RhdGUoKS50b0lTT1N0cmluZygpOm5ldyBEYXRlKHRoaXMudmFsdWVPZigpKzYwKnRoaXMudXRjT2Zmc2V0KCkqMWUzKS50b0lTT1N0cmluZygpLnJlcGxhY2UoIloiLFcobiwiWiIpKTpXKG4sZT8iWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXSI6IllZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaIil9LG9uLmluc3BlY3Q9ZnVuY3Rpb24oKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIm1vbWVudC5pbnZhbGlkKC8qICIrdGhpcy5faSsiICovKSI7dmFyIHQ9Im1vbWVudCIsZT0iIjt0aGlzLmlzTG9jYWwoKXx8KHQ9MD09PXRoaXMudXRjT2Zmc2V0KCk/Im1vbWVudC51dGMiOiJtb21lbnQucGFyc2Vab25lIixlPSJaIik7dmFyIG49IlsiK3QrJygiXScscj0wPD10aGlzLnllYXIoKSYmdGhpcy55ZWFyKCk8PTk5OTk/IllZWVkiOiJZWVlZWVkiLGk9ZSsnWyIpXSc7cmV0dXJuIHRoaXMuZm9ybWF0KG4rcisiLU1NLUREW1RdSEg6bW06c3MuU1NTIitpKX0sb24udG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpP3RoaXMudG9JU09TdHJpbmcoKTpudWxsfSxvbi50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkubG9jYWxlKCJlbiIpLmZvcm1hdCgiZGRkIE1NTSBERCBZWVlZIEhIOm1tOnNzIFtHTVRdWloiKX0sb24udW5peD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVPZigpLzFlMyl9LG9uLnZhbHVlT2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZC52YWx1ZU9mKCktNmU0Kih0aGlzLl9vZmZzZXR8fDApfSxvbi5jcmVhdGlvbkRhdGE9ZnVuY3Rpb24oKXtyZXR1cm57aW5wdXQ6dGhpcy5faSxmb3JtYXQ6dGhpcy5fZixsb2NhbGU6dGhpcy5fbG9jYWxlLGlzVVRDOnRoaXMuX2lzVVRDLHN0cmljdDp0aGlzLl9zdHJpY3R9fSxvbi55ZWFyPWJ0LG9uLmlzTGVhcFllYXI9ZnVuY3Rpb24oKXtyZXR1cm4gdnQodGhpcy55ZWFyKCkpfSxvbi53ZWVrWWVhcj1mdW5jdGlvbih0KXtyZXR1cm4gS2UuY2FsbCh0aGlzLHQsdGhpcy53ZWVrKCksdGhpcy53ZWVrZGF5KCksdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRveSl9LG9uLmlzb1dlZWtZZWFyPWZ1bmN0aW9uKHQpe3JldHVybiBLZS5jYWxsKHRoaXMsdCx0aGlzLmlzb1dlZWsoKSx0aGlzLmlzb1dlZWtkYXkoKSwxLDQpfSxvbi5xdWFydGVyPW9uLnF1YXJ0ZXJzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P01hdGguY2VpbCgodGhpcy5tb250aCgpKzEpLzMpOnRoaXMubW9udGgoMyoodC0xKSt0aGlzLm1vbnRoKCklMyl9LG9uLm1vbnRoPUF0LG9uLmRheXNJbk1vbnRoPWZ1bmN0aW9uKCl7cmV0dXJuIHd0KHRoaXMueWVhcigpLHRoaXMubW9udGgoKSl9LG9uLndlZWs9b24ud2Vla3M9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sb2NhbGVEYXRhKCkud2Vlayh0aGlzKTtyZXR1cm4gbnVsbD09dD9lOnRoaXMuYWRkKDcqKHQtZSksImQiKX0sb24uaXNvV2Vlaz1vbi5pc29XZWVrcz1mdW5jdGlvbih0KXt2YXIgZT1JdCh0aGlzLDEsNCkud2VlaztyZXR1cm4gbnVsbD09dD9lOnRoaXMuYWRkKDcqKHQtZSksImQiKX0sb24ud2Vla3NJblllYXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxvY2FsZURhdGEoKS5fd2VlaztyZXR1cm4gUnQodGhpcy55ZWFyKCksdC5kb3csdC5kb3kpfSxvbi5pc29XZWVrc0luWWVhcj1mdW5jdGlvbigpe3JldHVybiBSdCh0aGlzLnllYXIoKSwxLDQpfSxvbi5kYXRlPUplLG9uLmRheT1vbi5kYXlzPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9dD90aGlzOk5hTjt2YXIgZSxuLHI9dGhpcy5faXNVVEM/dGhpcy5fZC5nZXRVVENEYXkoKTp0aGlzLl9kLmdldERheSgpO3JldHVybiBudWxsIT10PyhlPXQsbj10aGlzLmxvY2FsZURhdGEoKSx0PSJzdHJpbmciIT10eXBlb2YgZT9lOmlzTmFOKGUpPyJudW1iZXIiPT10eXBlb2YoZT1uLndlZWtkYXlzUGFyc2UoZSkpP2U6bnVsbDpwYXJzZUludChlLDEwKSx0aGlzLmFkZCh0LXIsImQiKSk6cn0sb24ud2Vla2RheT1mdW5jdGlvbih0KXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGwhPXQ/dGhpczpOYU47dmFyIGU9KHRoaXMuZGF5KCkrNy10aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3cpJTc7cmV0dXJuIG51bGw9PXQ/ZTp0aGlzLmFkZCh0LWUsImQiKX0sb24uaXNvV2Vla2RheT1mdW5jdGlvbih0KXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGwhPXQ/dGhpczpOYU47aWYobnVsbD09dClyZXR1cm4gdGhpcy5kYXkoKXx8Nzt2YXIgZSxuLHI9KGU9dCxuPXRoaXMubG9jYWxlRGF0YSgpLCJzdHJpbmciPT10eXBlb2YgZT9uLndlZWtkYXlzUGFyc2UoZSklN3x8Nzppc05hTihlKT9udWxsOmUpO3JldHVybiB0aGlzLmRheSh0aGlzLmRheSgpJTc/cjpyLTcpfSxvbi5kYXlPZlllYXI9ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5yb3VuZCgodGhpcy5jbG9uZSgpLnN0YXJ0T2YoImRheSIpLXRoaXMuY2xvbmUoKS5zdGFydE9mKCJ5ZWFyIikpLzg2NGU1KSsxO3JldHVybiBudWxsPT10P2U6dGhpcy5hZGQodC1lLCJkIil9LG9uLmhvdXI9b24uaG91cnM9WHQsb24ubWludXRlPW9uLm1pbnV0ZXM9dG4sb24uc2Vjb25kPW9uLnNlY29uZHM9bm4sb24ubWlsbGlzZWNvbmQ9b24ubWlsbGlzZWNvbmRzPWFuLG9uLnV0Y09mZnNldD1mdW5jdGlvbih0LGUsbil7dmFyIHIsYT10aGlzLl9vZmZzZXR8fDA7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBudWxsIT10P3RoaXM6TmFOO2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX2lzVVRDP2E6TmUodGhpcyk7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtpZihudWxsPT09KHQ9T2Uoc3QsdCkpKXJldHVybiB0aGlzfWVsc2UgTWF0aC5hYnModCk8MTYmJiFuJiYodCo9NjApO3JldHVybiF0aGlzLl9pc1VUQyYmZSYmKHI9TmUodGhpcykpLHRoaXMuX29mZnNldD10LHRoaXMuX2lzVVRDPSEwLG51bGwhPXImJnRoaXMuYWRkKHIsIm0iKSxhIT09dCYmKCFlfHx0aGlzLl9jaGFuZ2VJblByb2dyZXNzP1llKHRoaXMsUmUodC1hLCJtIiksMSwhMSk6dGhpcy5fY2hhbmdlSW5Qcm9ncmVzc3x8KHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3M9ITAsaS51cGRhdGVPZmZzZXQodGhpcywhMCksdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcz1udWxsKSksdGhpc30sb24udXRjPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnV0Y09mZnNldCgwLHQpfSxvbi5sb2NhbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faXNVVEMmJih0aGlzLnV0Y09mZnNldCgwLHQpLHRoaXMuX2lzVVRDPSExLHQmJnRoaXMuc3VidHJhY3QoTmUodGhpcyksIm0iKSksdGhpc30sb24ucGFyc2Vab25lPWZ1bmN0aW9uKCl7aWYobnVsbCE9dGhpcy5fdHptKXRoaXMudXRjT2Zmc2V0KHRoaXMuX3R6bSwhMSwhMCk7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIHRoaXMuX2kpe3ZhciB0PU9lKG90LHRoaXMuX2kpO251bGwhPXQ/dGhpcy51dGNPZmZzZXQodCk6dGhpcy51dGNPZmZzZXQoMCwhMCl9cmV0dXJuIHRoaXN9LG9uLmhhc0FsaWduZWRIb3VyT2Zmc2V0PWZ1bmN0aW9uKHQpe3JldHVybiEhdGhpcy5pc1ZhbGlkKCkmJih0PXQ/eGUodCkudXRjT2Zmc2V0KCk6MCwodGhpcy51dGNPZmZzZXQoKS10KSU2MD09MCl9LG9uLmlzRFNUPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudXRjT2Zmc2V0KCk+dGhpcy5jbG9uZSgpLm1vbnRoKDApLnV0Y09mZnNldCgpfHx0aGlzLnV0Y09mZnNldCgpPnRoaXMuY2xvbmUoKS5tb250aCg1KS51dGNPZmZzZXQoKX0sb24uaXNMb2NhbD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5pc1ZhbGlkKCkmJiF0aGlzLl9pc1VUQ30sb24uaXNVdGNPZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuaXNWYWxpZCgpJiZ0aGlzLl9pc1VUQ30sb24uaXNVdGM9RGUsb24uaXNVVEM9RGUsb24uem9uZUFiYnI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNVVEM/IlVUQyI6IiJ9LG9uLnpvbmVOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzVVRDPyJDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZSI6IiJ9LG9uLmRhdGVzPUMoImRhdGVzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSBkYXRlIGluc3RlYWQuIixKZSksb24ubW9udGhzPUMoIm1vbnRocyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgbW9udGggaW5zdGVhZCIsQXQpLG9uLnllYXJzPUMoInllYXJzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSB5ZWFyIGluc3RlYWQiLGJ0KSxvbi56b25lPUMoIm1vbWVudCgpLnpvbmUgaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudCgpLnV0Y09mZnNldCBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL3pvbmUvIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbCE9dD8oInN0cmluZyIhPXR5cGVvZiB0JiYodD0tdCksdGhpcy51dGNPZmZzZXQodCxlKSx0aGlzKTotdGhpcy51dGNPZmZzZXQoKX0pKSxvbi5pc0RTVFNoaWZ0ZWQ9QygiaXNEU1RTaGlmdGVkIGlzIGRlcHJlY2F0ZWQuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RzdC1zaGlmdGVkLyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIsKGZ1bmN0aW9uKCl7aWYoIXModGhpcy5faXNEU1RTaGlmdGVkKSlyZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkO3ZhciB0PXt9O2lmKG0odCx0aGlzKSwodD1tZSh0KSkuX2Epe3ZhciBlPXQuX2lzVVRDP2QodC5fYSk6eGUodC5fYSk7dGhpcy5faXNEU1RTaGlmdGVkPXRoaXMuaXNWYWxpZCgpJiYwPEUodC5fYSxlLnRvQXJyYXkoKSl9ZWxzZSB0aGlzLl9pc0RTVFNoaWZ0ZWQ9ITE7cmV0dXJuIHRoaXMuX2lzRFNUU2hpZnRlZH0pKTt2YXIgY249Ti5wcm90b3R5cGU7ZnVuY3Rpb24gdW4odCxlLG4scil7dmFyIGk9cmUoKSxhPWQoKS5zZXQocixlKTtyZXR1cm4gaVtuXShhLHQpfWZ1bmN0aW9uIGxuKHQsZSxuKXtpZihjKHQpJiYoZT10LHQ9dm9pZCAwKSx0PXR8fCIiLG51bGwhPWUpcmV0dXJuIHVuKHQsZSxuLCJtb250aCIpO3ZhciByLGk9W107Zm9yKHI9MDtyPDEyO3IrKylpW3JdPXVuKHQscixuLCJtb250aCIpO3JldHVybiBpfWZ1bmN0aW9uIGhuKHQsZSxuLHIpeyJib29sZWFuIj09dHlwZW9mIHQ/YyhlKSYmKG49ZSxlPXZvaWQgMCk6KGU9dCx0PSExLGMobj1lKSYmKG49ZSxlPXZvaWQgMCkpLGU9ZXx8IiI7dmFyIGksYT1yZSgpLG89dD9hLl93ZWVrLmRvdzowO2lmKG51bGwhPW4pcmV0dXJuIHVuKGUsKG4rbyklNyxyLCJkYXkiKTt2YXIgcz1bXTtmb3IoaT0wO2k8NztpKyspc1tpXT11bihlLChpK28pJTcsciwiZGF5Iik7cmV0dXJuIHN9Y24uY2FsZW5kYXI9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMuX2NhbGVuZGFyW3RdfHx0aGlzLl9jYWxlbmRhci5zYW1lRWxzZTtyZXR1cm4gTyhyKT9yLmNhbGwoZSxuKTpyfSxjbi5sb25nRGF0ZUZvcm1hdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9sb25nRGF0ZUZvcm1hdFt0XSxuPXRoaXMuX2xvbmdEYXRlRm9ybWF0W3QudG9VcHBlckNhc2UoKV07cmV0dXJuIGV8fCFuP2U6KHRoaXMuX2xvbmdEYXRlRm9ybWF0W3RdPW4ucmVwbGFjZSgvTU1NTXxNTXxERHxkZGRkL2csKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNsaWNlKDEpfSkpLHRoaXMuX2xvbmdEYXRlRm9ybWF0W3RdKX0sY24uaW52YWxpZERhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faW52YWxpZERhdGV9LGNuLm9yZGluYWw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX29yZGluYWwucmVwbGFjZSgiJWQiLHQpfSxjbi5wcmVwYXJzZT1zbixjbi5wb3N0Zm9ybWF0PXNuLGNuLnJlbGF0aXZlVGltZT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzLl9yZWxhdGl2ZVRpbWVbbl07cmV0dXJuIE8oaSk/aSh0LGUsbixyKTppLnJlcGxhY2UoLyVkL2ksdCl9LGNuLnBhc3RGdXR1cmU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9yZWxhdGl2ZVRpbWVbMDx0PyJmdXR1cmUiOiJwYXN0Il07cmV0dXJuIE8obik/bihlKTpuLnJlcGxhY2UoLyVzL2ksZSl9LGNuLnNldD1mdW5jdGlvbih0KXt2YXIgZSxuO2ZvcihuIGluIHQpTyhlPXRbbl0pP3RoaXNbbl09ZTp0aGlzWyJfIituXT1lO3RoaXMuX2NvbmZpZz10LHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50PW5ldyBSZWdFeHAoKHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2Uuc291cmNlfHx0aGlzLl9vcmRpbmFsUGFyc2Uuc291cmNlKSsifCIrL1xkezEsMn0vLnNvdXJjZSl9LGNuLm1vbnRocz1mdW5jdGlvbih0LGUpe3JldHVybiB0P2EodGhpcy5fbW9udGhzKT90aGlzLl9tb250aHNbdC5tb250aCgpXTp0aGlzLl9tb250aHNbKHRoaXMuX21vbnRocy5pc0Zvcm1hdHx8RXQpLnRlc3QoZSk/ImZvcm1hdCI6InN0YW5kYWxvbmUiXVt0Lm1vbnRoKCldOmEodGhpcy5fbW9udGhzKT90aGlzLl9tb250aHM6dGhpcy5fbW9udGhzLnN0YW5kYWxvbmV9LGNuLm1vbnRoc1Nob3J0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ/YSh0aGlzLl9tb250aHNTaG9ydCk/dGhpcy5fbW9udGhzU2hvcnRbdC5tb250aCgpXTp0aGlzLl9tb250aHNTaG9ydFtFdC50ZXN0KGUpPyJmb3JtYXQiOiJzdGFuZGFsb25lIl1bdC5tb250aCgpXTphKHRoaXMuX21vbnRoc1Nob3J0KT90aGlzLl9tb250aHNTaG9ydDp0aGlzLl9tb250aHNTaG9ydC5zdGFuZGFsb25lfSxjbi5tb250aHNQYXJzZT1mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhO2lmKHRoaXMuX21vbnRoc1BhcnNlRXhhY3QpcmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGEsbz10LnRvTG9jYWxlTG93ZXJDYXNlKCk7aWYoIXRoaXMuX21vbnRoc1BhcnNlKWZvcih0aGlzLl9tb250aHNQYXJzZT1bXSx0aGlzLl9sb25nTW9udGhzUGFyc2U9W10sdGhpcy5fc2hvcnRNb250aHNQYXJzZT1bXSxyPTA7cjwxMjsrK3IpYT1kKFsyZTMscl0pLHRoaXMuX3Nob3J0TW9udGhzUGFyc2Vbcl09dGhpcy5tb250aHNTaG9ydChhLCIiKS50b0xvY2FsZUxvd2VyQ2FzZSgpLHRoaXMuX2xvbmdNb250aHNQYXJzZVtyXT10aGlzLm1vbnRocyhhLCIiKS50b0xvY2FsZUxvd2VyQ2FzZSgpO3JldHVybiBuPyJNTU0iPT09ZT8tMSE9PShpPW10LmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSxvKSk/aTpudWxsOi0xIT09KGk9bXQuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsbykpP2k6bnVsbDoiTU1NIj09PWU/LTEhPT0oaT1tdC5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsbykpP2k6LTEhPT0oaT1tdC5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSxvKSk/aTpudWxsOi0xIT09KGk9bXQuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsbykpP2k6LTEhPT0oaT1tdC5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsbykpP2k6bnVsbH0uY2FsbCh0aGlzLHQsZSxuKTtmb3IodGhpcy5fbW9udGhzUGFyc2V8fCh0aGlzLl9tb250aHNQYXJzZT1bXSx0aGlzLl9sb25nTW9udGhzUGFyc2U9W10sdGhpcy5fc2hvcnRNb250aHNQYXJzZT1bXSkscj0wO3I8MTI7cisrKXtpZihpPWQoWzJlMyxyXSksbiYmIXRoaXMuX2xvbmdNb250aHNQYXJzZVtyXSYmKHRoaXMuX2xvbmdNb250aHNQYXJzZVtyXT1uZXcgUmVnRXhwKCJeIit0aGlzLm1vbnRocyhpLCIiKS5yZXBsYWNlKCIuIiwiIikrIiQiLCJpIiksdGhpcy5fc2hvcnRNb250aHNQYXJzZVtyXT1uZXcgUmVnRXhwKCJeIit0aGlzLm1vbnRoc1Nob3J0KGksIiIpLnJlcGxhY2UoIi4iLCIiKSsiJCIsImkiKSksbnx8dGhpcy5fbW9udGhzUGFyc2Vbcl18fChhPSJeIit0aGlzLm1vbnRocyhpLCIiKSsifF4iK3RoaXMubW9udGhzU2hvcnQoaSwiIiksdGhpcy5fbW9udGhzUGFyc2Vbcl09bmV3IFJlZ0V4cChhLnJlcGxhY2UoIi4iLCIiKSwiaSIpKSxuJiYiTU1NTSI9PT1lJiZ0aGlzLl9sb25nTW9udGhzUGFyc2Vbcl0udGVzdCh0KSlyZXR1cm4gcjtpZihuJiYiTU1NIj09PWUmJnRoaXMuX3Nob3J0TW9udGhzUGFyc2Vbcl0udGVzdCh0KSlyZXR1cm4gcjtpZighbiYmdGhpcy5fbW9udGhzUGFyc2Vbcl0udGVzdCh0KSlyZXR1cm4gcn19LGNuLm1vbnRoc1JlZ2V4PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tb250aHNQYXJzZUV4YWN0PyhoKHRoaXMsIl9tb250aHNSZWdleCIpfHxCdC5jYWxsKHRoaXMpLHQ/dGhpcy5fbW9udGhzU3RyaWN0UmVnZXg6dGhpcy5fbW9udGhzUmVnZXgpOihoKHRoaXMsIl9tb250aHNSZWdleCIpfHwodGhpcy5fbW9udGhzUmVnZXg9T3QpLHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4JiZ0P3RoaXMuX21vbnRoc1N0cmljdFJlZ2V4OnRoaXMuX21vbnRoc1JlZ2V4KX0sY24ubW9udGhzU2hvcnRSZWdleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbW9udGhzUGFyc2VFeGFjdD8oaCh0aGlzLCJfbW9udGhzUmVnZXgiKXx8QnQuY2FsbCh0aGlzKSx0P3RoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fbW9udGhzU2hvcnRSZWdleCk6KGgodGhpcywiX21vbnRoc1Nob3J0UmVnZXgiKXx8KHRoaXMuX21vbnRoc1Nob3J0UmVnZXg9TXQpLHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXgmJnQ/dGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleDp0aGlzLl9tb250aHNTaG9ydFJlZ2V4KX0sY24ud2Vlaz1mdW5jdGlvbih0KXtyZXR1cm4gSXQodCx0aGlzLl93ZWVrLmRvdyx0aGlzLl93ZWVrLmRveSkud2Vla30sY24uZmlyc3REYXlPZlllYXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd2Vlay5kb3l9LGNuLmZpcnN0RGF5T2ZXZWVrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dlZWsuZG93fSxjbi53ZWVrZGF5cz1mdW5jdGlvbih0LGUpe3ZhciBuPWEodGhpcy5fd2Vla2RheXMpP3RoaXMuX3dlZWtkYXlzOnRoaXMuX3dlZWtkYXlzW3QmJiEwIT09dCYmdGhpcy5fd2Vla2RheXMuaXNGb3JtYXQudGVzdChlKT8iZm9ybWF0Ijoic3RhbmRhbG9uZSJdO3JldHVybiEwPT09dD9GdChuLHRoaXMuX3dlZWsuZG93KTp0P25bdC5kYXkoKV06bn0sY24ud2Vla2RheXNNaW49ZnVuY3Rpb24odCl7cmV0dXJuITA9PT10P0Z0KHRoaXMuX3dlZWtkYXlzTWluLHRoaXMuX3dlZWsuZG93KTp0P3RoaXMuX3dlZWtkYXlzTWluW3QuZGF5KCldOnRoaXMuX3dlZWtkYXlzTWlufSxjbi53ZWVrZGF5c1Nob3J0PWZ1bmN0aW9uKHQpe3JldHVybiEwPT09dD9GdCh0aGlzLl93ZWVrZGF5c1Nob3J0LHRoaXMuX3dlZWsuZG93KTp0P3RoaXMuX3dlZWtkYXlzU2hvcnRbdC5kYXkoKV06dGhpcy5fd2Vla2RheXNTaG9ydH0sY24ud2Vla2RheXNQYXJzZT1mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhO2lmKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdClyZXR1cm4gZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYSxvPXQudG9Mb2NhbGVMb3dlckNhc2UoKTtpZighdGhpcy5fd2Vla2RheXNQYXJzZSlmb3IodGhpcy5fd2Vla2RheXNQYXJzZT1bXSx0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2U9W10sdGhpcy5fbWluV2Vla2RheXNQYXJzZT1bXSxyPTA7cjw3OysrcilhPWQoWzJlMywxXSkuZGF5KHIpLHRoaXMuX21pbldlZWtkYXlzUGFyc2Vbcl09dGhpcy53ZWVrZGF5c01pbihhLCIiKS50b0xvY2FsZUxvd2VyQ2FzZSgpLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtyXT10aGlzLndlZWtkYXlzU2hvcnQoYSwiIikudG9Mb2NhbGVMb3dlckNhc2UoKSx0aGlzLl93ZWVrZGF5c1BhcnNlW3JdPXRoaXMud2Vla2RheXMoYSwiIikudG9Mb2NhbGVMb3dlckNhc2UoKTtyZXR1cm4gbj8iZGRkZCI9PT1lPy0xIT09KGk9bXQuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLG8pKT9pOm51bGw6ImRkZCI9PT1lPy0xIT09KGk9bXQuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsbykpP2k6bnVsbDotMSE9PShpPW10LmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSxvKSk/aTpudWxsOiJkZGRkIj09PWU/LTEhPT0oaT1tdC5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsbykpP2k6LTEhPT0oaT1tdC5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSxvKSk/aTotMSE9PShpPW10LmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSxvKSk/aTpudWxsOiJkZGQiPT09ZT8tMSE9PShpPW10LmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLG8pKT9pOi0xIT09KGk9bXQuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLG8pKT9pOi0xIT09KGk9bXQuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLG8pKT9pOm51bGw6LTEhPT0oaT1tdC5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsbykpP2k6LTEhPT0oaT1tdC5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsbykpP2k6LTEhPT0oaT1tdC5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSxvKSk/aTpudWxsfS5jYWxsKHRoaXMsdCxlLG4pO2Zvcih0aGlzLl93ZWVrZGF5c1BhcnNlfHwodGhpcy5fd2Vla2RheXNQYXJzZT1bXSx0aGlzLl9taW5XZWVrZGF5c1BhcnNlPVtdLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZT1bXSx0aGlzLl9mdWxsV2Vla2RheXNQYXJzZT1bXSkscj0wO3I8NztyKyspe2lmKGk9ZChbMmUzLDFdKS5kYXkociksbiYmIXRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW3JdJiYodGhpcy5fZnVsbFdlZWtkYXlzUGFyc2Vbcl09bmV3IFJlZ0V4cCgiXiIrdGhpcy53ZWVrZGF5cyhpLCIiKS5yZXBsYWNlKCIuIiwiXFwuPyIpKyIkIiwiaSIpLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtyXT1uZXcgUmVnRXhwKCJeIit0aGlzLndlZWtkYXlzU2hvcnQoaSwiIikucmVwbGFjZSgiLiIsIlxcLj8iKSsiJCIsImkiKSx0aGlzLl9taW5XZWVrZGF5c1BhcnNlW3JdPW5ldyBSZWdFeHAoIl4iK3RoaXMud2Vla2RheXNNaW4oaSwiIikucmVwbGFjZSgiLiIsIlxcLj8iKSsiJCIsImkiKSksdGhpcy5fd2Vla2RheXNQYXJzZVtyXXx8KGE9Il4iK3RoaXMud2Vla2RheXMoaSwiIikrInxeIit0aGlzLndlZWtkYXlzU2hvcnQoaSwiIikrInxeIit0aGlzLndlZWtkYXlzTWluKGksIiIpLHRoaXMuX3dlZWtkYXlzUGFyc2Vbcl09bmV3IFJlZ0V4cChhLnJlcGxhY2UoIi4iLCIiKSwiaSIpKSxuJiYiZGRkZCI9PT1lJiZ0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtyXS50ZXN0KHQpKXJldHVybiByO2lmKG4mJiJkZGQiPT09ZSYmdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW3JdLnRlc3QodCkpcmV0dXJuIHI7aWYobiYmImRkIj09PWUmJnRoaXMuX21pbldlZWtkYXlzUGFyc2Vbcl0udGVzdCh0KSlyZXR1cm4gcjtpZighbiYmdGhpcy5fd2Vla2RheXNQYXJzZVtyXS50ZXN0KHQpKXJldHVybiByfX0sY24ud2Vla2RheXNSZWdleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0PyhoKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fHF0LmNhbGwodGhpcyksdD90aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzUmVnZXgpOihoKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fCh0aGlzLl93ZWVrZGF5c1JlZ2V4PXp0KSx0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4JiZ0P3RoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNSZWdleCl9LGNuLndlZWtkYXlzU2hvcnRSZWdleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0PyhoKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fHF0LmNhbGwodGhpcyksdD90aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4KTooaCh0aGlzLCJfd2Vla2RheXNTaG9ydFJlZ2V4Iil8fCh0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXg9VXQpLHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCYmdD90aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4KX0sY24ud2Vla2RheXNNaW5SZWdleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0PyhoKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fHF0LmNhbGwodGhpcyksdD90aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzTWluUmVnZXgpOihoKHRoaXMsIl93ZWVrZGF5c01pblJlZ2V4Iil8fCh0aGlzLl93ZWVrZGF5c01pblJlZ2V4PSR0KSx0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4JiZ0P3RoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNNaW5SZWdleCl9LGNuLmlzUE09ZnVuY3Rpb24odCl7cmV0dXJuInAiPT09KHQrIiIpLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApfSxjbi5tZXJpZGllbT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIDExPHQ/bj8icG0iOiJQTSI6bj8iYW0iOiJBTSJ9LGVlKCJlbiIse2RheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0odGh8c3R8bmR8cmQpLyxvcmRpbmFsOmZ1bmN0aW9uKHQpe3ZhciBlPXQlMTA7cmV0dXJuIHQrKDE9PT13KHQlMTAwLzEwKT8idGgiOjE9PT1lPyJzdCI6Mj09PWU/Im5kIjozPT09ZT8icmQiOiJ0aCIpfX0pLGkubGFuZz1DKCJtb21lbnQubGFuZyBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZSBpbnN0ZWFkLiIsZWUpLGkubGFuZ0RhdGE9QygibW9tZW50LmxhbmdEYXRhIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlRGF0YSBpbnN0ZWFkLiIscmUpO3ZhciBmbj1NYXRoLmFicztmdW5jdGlvbiBkbih0LGUsbixyKXt2YXIgaT1SZShlLG4pO3JldHVybiB0Ll9taWxsaXNlY29uZHMrPXIqaS5fbWlsbGlzZWNvbmRzLHQuX2RheXMrPXIqaS5fZGF5cyx0Ll9tb250aHMrPXIqaS5fbW9udGhzLHQuX2J1YmJsZSgpfWZ1bmN0aW9uIHBuKHQpe3JldHVybiB0PDA/TWF0aC5mbG9vcih0KTpNYXRoLmNlaWwodCl9ZnVuY3Rpb24geW4odCl7cmV0dXJuIDQ4MDAqdC8xNDYwOTd9ZnVuY3Rpb24gZ24odCl7cmV0dXJuIDE0NjA5Nyp0LzQ4MDB9ZnVuY3Rpb24gdm4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXModCl9fXZhciBtbj12bigibXMiKSxibj12bigicyIpLHhuPXZuKCJtIiksX249dm4oImgiKSxrbj12bigiZCIpLHduPXZuKCJ3IiksRW49dm4oIk0iKSxUbj12bigiUSIpLENuPXZuKCJ5Iik7ZnVuY3Rpb24gU24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpP3RoaXMuX2RhdGFbdF06TmFOfX12YXIgQW49U24oIm1pbGxpc2Vjb25kcyIpLE1uPVNuKCJzZWNvbmRzIiksT249U24oIm1pbnV0ZXMiKSxCbj1TbigiaG91cnMiKSxObj1TbigiZGF5cyIpLERuPVNuKCJtb250aHMiKSxMbj1TbigieWVhcnMiKSxJbj1NYXRoLnJvdW5kLFJuPXtzczo0NCxzOjQ1LG06NDUsaDoyMixkOjI2LE06MTF9LEZuPU1hdGguYWJzO2Z1bmN0aW9uIFBuKHQpe3JldHVybigwPHQpLSh0PDApfHwrdH1mdW5jdGlvbiBqbigpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTt2YXIgdCxlLG49Rm4odGhpcy5fbWlsbGlzZWNvbmRzKS8xZTMscj1Gbih0aGlzLl9kYXlzKSxpPUZuKHRoaXMuX21vbnRocyk7ZT1rKCh0PWsobi82MCkpLzYwKSxuJT02MCx0JT02MDt2YXIgYT1rKGkvMTIpLG89aSU9MTIscz1yLGM9ZSx1PXQsbD1uP24udG9GaXhlZCgzKS5yZXBsYWNlKC9cLj8wKyQvLCIiKToiIixoPXRoaXMuYXNTZWNvbmRzKCk7aWYoIWgpcmV0dXJuIlAwRCI7dmFyIGY9aDwwPyItIjoiIixkPVBuKHRoaXMuX21vbnRocykhPT1QbihoKT8iLSI6IiIscD1Qbih0aGlzLl9kYXlzKSE9PVBuKGgpPyItIjoiIix5PVBuKHRoaXMuX21pbGxpc2Vjb25kcykhPT1QbihoKT8iLSI6IiI7cmV0dXJuIGYrIlAiKyhhP2QrYSsiWSI6IiIpKyhvP2QrbysiTSI6IiIpKyhzP3ArcysiRCI6IiIpKyhjfHx1fHxsPyJUIjoiIikrKGM/eStjKyJIIjoiIikrKHU/eSt1KyJNIjoiIikrKGw/eStsKyJTIjoiIil9dmFyIFluPVRlLnByb3RvdHlwZTtyZXR1cm4gWW4uaXNWYWxpZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1ZhbGlkfSxZbi5hYnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9kYXRhO3JldHVybiB0aGlzLl9taWxsaXNlY29uZHM9Zm4odGhpcy5fbWlsbGlzZWNvbmRzKSx0aGlzLl9kYXlzPWZuKHRoaXMuX2RheXMpLHRoaXMuX21vbnRocz1mbih0aGlzLl9tb250aHMpLHQubWlsbGlzZWNvbmRzPWZuKHQubWlsbGlzZWNvbmRzKSx0LnNlY29uZHM9Zm4odC5zZWNvbmRzKSx0Lm1pbnV0ZXM9Zm4odC5taW51dGVzKSx0LmhvdXJzPWZuKHQuaG91cnMpLHQubW9udGhzPWZuKHQubW9udGhzKSx0LnllYXJzPWZuKHQueWVhcnMpLHRoaXN9LFluLmFkZD1mdW5jdGlvbih0LGUpe3JldHVybiBkbih0aGlzLHQsZSwxKX0sWW4uc3VidHJhY3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZG4odGhpcyx0LGUsLTEpfSxZbi5hcz1mdW5jdGlvbih0KXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIE5hTjt2YXIgZSxuLHI9dGhpcy5fbWlsbGlzZWNvbmRzO2lmKCJtb250aCI9PT0odD1JKHQpKXx8InF1YXJ0ZXIiPT09dHx8InllYXIiPT09dClzd2l0Y2goZT10aGlzLl9kYXlzK3IvODY0ZTUsbj10aGlzLl9tb250aHMreW4oZSksdCl7Y2FzZSJtb250aCI6cmV0dXJuIG47Y2FzZSJxdWFydGVyIjpyZXR1cm4gbi8zO2Nhc2UieWVhciI6cmV0dXJuIG4vMTJ9ZWxzZSBzd2l0Y2goZT10aGlzLl9kYXlzK01hdGgucm91bmQoZ24odGhpcy5fbW9udGhzKSksdCl7Y2FzZSJ3ZWVrIjpyZXR1cm4gZS83K3IvNjA0OGU1O2Nhc2UiZGF5IjpyZXR1cm4gZStyLzg2NGU1O2Nhc2UiaG91ciI6cmV0dXJuIDI0KmUrci8zNmU1O2Nhc2UibWludXRlIjpyZXR1cm4gMTQ0MCplK3IvNmU0O2Nhc2Uic2Vjb25kIjpyZXR1cm4gODY0MDAqZStyLzFlMztjYXNlIm1pbGxpc2Vjb25kIjpyZXR1cm4gTWF0aC5mbG9vcig4NjRlNSplKStyO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHVuaXQgIit0KX19LFluLmFzTWlsbGlzZWNvbmRzPW1uLFluLmFzU2Vjb25kcz1ibixZbi5hc01pbnV0ZXM9eG4sWW4uYXNIb3Vycz1fbixZbi5hc0RheXM9a24sWW4uYXNXZWVrcz13bixZbi5hc01vbnRocz1FbixZbi5hc1F1YXJ0ZXJzPVRuLFluLmFzWWVhcnM9Q24sWW4udmFsdWVPZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzVmFsaWQoKT90aGlzLl9taWxsaXNlY29uZHMrODY0ZTUqdGhpcy5fZGF5cyt0aGlzLl9tb250aHMlMTIqMjU5MmU2KzMxNTM2ZTYqdyh0aGlzLl9tb250aHMvMTIpOk5hTn0sWW4uX2J1YmJsZT1mdW5jdGlvbigpe3ZhciB0LGUsbixyLGksYT10aGlzLl9taWxsaXNlY29uZHMsbz10aGlzLl9kYXlzLHM9dGhpcy5fbW9udGhzLGM9dGhpcy5fZGF0YTtyZXR1cm4gMDw9YSYmMDw9byYmMDw9c3x8YTw9MCYmbzw9MCYmczw9MHx8KGErPTg2NGU1KnBuKGduKHMpK28pLHM9bz0wKSxjLm1pbGxpc2Vjb25kcz1hJTFlMyx0PWsoYS8xZTMpLGMuc2Vjb25kcz10JTYwLGU9ayh0LzYwKSxjLm1pbnV0ZXM9ZSU2MCxuPWsoZS82MCksYy5ob3Vycz1uJTI0LHMrPWk9ayh5bihvKz1rKG4vMjQpKSksby09cG4oZ24oaSkpLHI9ayhzLzEyKSxzJT0xMixjLmRheXM9byxjLm1vbnRocz1zLGMueWVhcnM9cix0aGlzfSxZbi5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBSZSh0aGlzKX0sWW4uZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0PUkodCksdGhpcy5pc1ZhbGlkKCk/dGhpc1t0KyJzIl0oKTpOYU59LFluLm1pbGxpc2Vjb25kcz1BbixZbi5zZWNvbmRzPU1uLFluLm1pbnV0ZXM9T24sWW4uaG91cnM9Qm4sWW4uZGF5cz1ObixZbi53ZWVrcz1mdW5jdGlvbigpe3JldHVybiBrKHRoaXMuZGF5cygpLzcpfSxZbi5tb250aHM9RG4sWW4ueWVhcnM9TG4sWW4uaHVtYW5pemU9ZnVuY3Rpb24odCl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO3ZhciBlLG4scixpLGEsbyxzLGMsdSxsLGg9dGhpcy5sb2NhbGVEYXRhKCksZj0oZT0hdCxuPWgscj1SZSh0aGlzKS5hYnMoKSxpPUluKHIuYXMoInMiKSksYT1JbihyLmFzKCJtIikpLG89SW4oci5hcygiaCIpKSxzPUluKHIuYXMoImQiKSksYz1JbihyLmFzKCJNIikpLHU9SW4oci5hcygieSIpKSwobD1pPD1Sbi5zcyYmWyJzIixpXXx8aTxSbi5zJiZbInNzIixpXXx8YTw9MSYmWyJtIl18fGE8Um4ubSYmWyJtbSIsYV18fG88PTEmJlsiaCJdfHxvPFJuLmgmJlsiaGgiLG9dfHxzPD0xJiZbImQiXXx8czxSbi5kJiZbImRkIixzXXx8Yzw9MSYmWyJNIl18fGM8Um4uTSYmWyJNTSIsY118fHU8PTEmJlsieSJdfHxbInl5Iix1XSlbMl09ZSxsWzNdPTA8K3RoaXMsbFs0XT1uLGZ1bmN0aW9uKHQsZSxuLHIsaSl7cmV0dXJuIGkucmVsYXRpdmVUaW1lKGV8fDEsISFuLHQscil9LmFwcGx5KG51bGwsbCkpO3JldHVybiB0JiYoZj1oLnBhc3RGdXR1cmUoK3RoaXMsZikpLGgucG9zdGZvcm1hdChmKX0sWW4udG9JU09TdHJpbmc9am4sWW4udG9TdHJpbmc9am4sWW4udG9KU09OPWpuLFluLmxvY2FsZT1xZSxZbi5sb2NhbGVEYXRhPVZlLFluLnRvSXNvU3RyaW5nPUMoInRvSXNvU3RyaW5nKCkgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB0b0lTT1N0cmluZygpIGluc3RlYWQgKG5vdGljZSB0aGUgY2FwaXRhbHMpIixqbiksWW4ubGFuZz1XZSxxKCJYIiwwLDAsInVuaXgiKSxxKCJ4IiwwLDAsInZhbHVlT2YiKSxsdCgieCIsYXQpLGx0KCJYIiwvWystXT9cZCsoXC5cZHsxLDN9KT8vKSxwdCgiWCIsKGZ1bmN0aW9uKHQsZSxuKXtuLl9kPW5ldyBEYXRlKDFlMypwYXJzZUZsb2F0KHQsMTApKX0pKSxwdCgieCIsKGZ1bmN0aW9uKHQsZSxuKXtuLl9kPW5ldyBEYXRlKHcodCkpfSkpLGkudmVyc2lvbj0iMi4yNC4wIixlPXhlLGkuZm49b24saS5taW49ZnVuY3Rpb24oKXtyZXR1cm4gd2UoImlzQmVmb3JlIixbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSl9LGkubWF4PWZ1bmN0aW9uKCl7cmV0dXJuIHdlKCJpc0FmdGVyIixbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSl9LGkubm93PWZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93P0RhdGUubm93KCk6K25ldyBEYXRlfSxpLnV0Yz1kLGkudW5peD1mdW5jdGlvbih0KXtyZXR1cm4geGUoMWUzKnQpfSxpLm1vbnRocz1mdW5jdGlvbih0LGUpe3JldHVybiBsbih0LGUsIm1vbnRocyIpfSxpLmlzRGF0ZT11LGkubG9jYWxlPWVlLGkuaW52YWxpZD1nLGkuZHVyYXRpb249UmUsaS5pc01vbWVudD1fLGkud2Vla2RheXM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBobih0LGUsbiwid2Vla2RheXMiKX0saS5wYXJzZVpvbmU9ZnVuY3Rpb24oKXtyZXR1cm4geGUuYXBwbHkobnVsbCxhcmd1bWVudHMpLnBhcnNlWm9uZSgpfSxpLmxvY2FsZURhdGE9cmUsaS5pc0R1cmF0aW9uPUNlLGkubW9udGhzU2hvcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbG4odCxlLCJtb250aHNTaG9ydCIpfSxpLndlZWtkYXlzTWluPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaG4odCxlLG4sIndlZWtkYXlzTWluIil9LGkuZGVmaW5lTG9jYWxlPW5lLGkudXBkYXRlTG9jYWxlPWZ1bmN0aW9uKHQsZSl7aWYobnVsbCE9ZSl7dmFyIG4scixpPVp0O251bGwhPShyPXRlKHQpKSYmKGk9ci5fY29uZmlnKSwobj1uZXcgTihlPUIoaSxlKSkpLnBhcmVudExvY2FsZT1RdFt0XSxRdFt0XT1uLGVlKHQpfWVsc2UgbnVsbCE9UXRbdF0mJihudWxsIT1RdFt0XS5wYXJlbnRMb2NhbGU/UXRbdF09UXRbdF0ucGFyZW50TG9jYWxlOm51bGwhPVF0W3RdJiZkZWxldGUgUXRbdF0pO3JldHVybiBRdFt0XX0saS5sb2NhbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIFMoUXQpfSxpLndlZWtkYXlzU2hvcnQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBobih0LGUsbiwid2Vla2RheXNTaG9ydCIpfSxpLm5vcm1hbGl6ZVVuaXRzPUksaS5yZWxhdGl2ZVRpbWVSb3VuZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD9JbjoiZnVuY3Rpb24iPT10eXBlb2YgdCYmKEluPXQsITApfSxpLnJlbGF0aXZlVGltZVRocmVzaG9sZD1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDAhPT1Sblt0XSYmKHZvaWQgMD09PWU/Um5bdF06KFJuW3RdPWUsInMiPT09dCYmKFJuLnNzPWUtMSksITApKX0saS5jYWxlbmRhckZvcm1hdD1mdW5jdGlvbih0LGUpe3ZhciBuPXQuZGlmZihlLCJkYXlzIiwhMCk7cmV0dXJuIG48LTY/InNhbWVFbHNlIjpuPC0xPyJsYXN0V2VlayI6bjwwPyJsYXN0RGF5IjpuPDE/InNhbWVEYXkiOm48Mj8ibmV4dERheSI6bjw3PyJuZXh0V2VlayI6InNhbWVFbHNlIn0saS5wcm90b3R5cGU9b24saS5IVE1MNV9GTVQ9e0RBVEVUSU1FX0xPQ0FMOiJZWVlZLU1NLUREVEhIOm1tIixEQVRFVElNRV9MT0NBTF9TRUNPTkRTOiJZWVlZLU1NLUREVEhIOm1tOnNzIixEQVRFVElNRV9MT0NBTF9NUzoiWVlZWS1NTS1ERFRISDptbTpzcy5TU1MiLERBVEU6IllZWVktTU0tREQiLFRJTUU6IkhIOm1tIixUSU1FX1NFQ09ORFM6IkhIOm1tOnNzIixUSU1FX01TOiJISDptbTpzcy5TU1MiLFdFRUs6IkdHR0ctW1ddV1ciLE1PTlRIOiJZWVlZLU1NIn0saX0oKX0pLmNhbGwodGhpcyxuKDYpKHQpKX0sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbih0LHIpe3ZhciBpPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCxlLG4scil7Zm9yKG49bnx8e30scj10Lmxlbmd0aDtyLS07blt0W3JdXT1lKTtyZXR1cm4gbn0sZT1bMSwzXSxuPVsxLDVdLHI9WzcsOSwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMSwyOCwzM10saT1bMSwxNV0sYT1bMSwxNl0sbz1bMSwxN10scz1bMSwxOF0sYz1bMSwxOV0sdT1bMSwyMF0sbD1bMSwyMV0saD1bMSwyMl0sZj1bMSwyNF0sZD1bMSwyNl0scD1bMSwyOV0seT1bNSw3LDksMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjEsMjgsMzNdLGc9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGRpcmVjdGl2ZTo0LGdhbnR0OjUsZG9jdW1lbnQ6NixFT0Y6NyxsaW5lOjgsU1BBQ0U6OSxzdGF0ZW1lbnQ6MTAsTkw6MTEsZGF0ZUZvcm1hdDoxMixpbmNsdXNpdmVFbmREYXRlczoxMyx0b3BBeGlzOjE0LGF4aXNGb3JtYXQ6MTUsZXhjbHVkZXM6MTYsdG9kYXlNYXJrZXI6MTcsdGl0bGU6MTgsc2VjdGlvbjoxOSxjbGlja1N0YXRlbWVudDoyMCx0YXNrVHh0OjIxLHRhc2tEYXRhOjIyLG9wZW5EaXJlY3RpdmU6MjMsdHlwZURpcmVjdGl2ZToyNCxjbG9zZURpcmVjdGl2ZToyNSwiOiI6MjYsYXJnRGlyZWN0aXZlOjI3LGNsaWNrOjI4LGNhbGxiYWNrbmFtZToyOSxjYWxsYmFja2FyZ3M6MzAsaHJlZjozMSxjbGlja1N0YXRlbWVudERlYnVnOjMyLG9wZW5fZGlyZWN0aXZlOjMzLHR5cGVfZGlyZWN0aXZlOjM0LGFyZ19kaXJlY3RpdmU6MzUsY2xvc2VfZGlyZWN0aXZlOjM2LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw1OiJnYW50dCIsNzoiRU9GIiw5OiJTUEFDRSIsMTE6Ik5MIiwxMjoiZGF0ZUZvcm1hdCIsMTM6ImluY2x1c2l2ZUVuZERhdGVzIiwxNDoidG9wQXhpcyIsMTU6ImF4aXNGb3JtYXQiLDE2OiJleGNsdWRlcyIsMTc6InRvZGF5TWFya2VyIiwxODoidGl0bGUiLDE5OiJzZWN0aW9uIiwyMToidGFza1R4dCIsMjI6InRhc2tEYXRhIiwyNjoiOiIsMjg6ImNsaWNrIiwyOToiY2FsbGJhY2tuYW1lIiwzMDoiY2FsbGJhY2thcmdzIiwzMToiaHJlZiIsMzM6Im9wZW5fZGlyZWN0aXZlIiwzNDoidHlwZV9kaXJlY3RpdmUiLDM1OiJhcmdfZGlyZWN0aXZlIiwzNjoiY2xvc2VfZGlyZWN0aXZlIn0scHJvZHVjdGlvbnNfOlswLFszLDJdLFszLDNdLFs2LDBdLFs2LDJdLFs4LDJdLFs4LDFdLFs4LDFdLFs4LDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwyXSxbMTAsMV0sWzQsNF0sWzQsNl0sWzIwLDJdLFsyMCwzXSxbMjAsM10sWzIwLDRdLFsyMCwzXSxbMjAsNF0sWzIwLDJdLFszMiwyXSxbMzIsM10sWzMyLDNdLFszMiw0XSxbMzIsM10sWzMyLDRdLFszMiwyXSxbMjMsMV0sWzI0LDFdLFsyNywxXSxbMjUsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM9YS5sZW5ndGgtMTtzd2l0Y2goaSl7Y2FzZSAyOnJldHVybiBhW3MtMV07Y2FzZSAzOnRoaXMuJD1bXTticmVhaztjYXNlIDQ6YVtzLTFdLnB1c2goYVtzXSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDU6Y2FzZSA2OnRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgNzpjYXNlIDg6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgOTpyLnNldERhdGVGb3JtYXQoYVtzXS5zdWJzdHIoMTEpKSx0aGlzLiQ9YVtzXS5zdWJzdHIoMTEpO2JyZWFrO2Nhc2UgMTA6ci5lbmFibGVJbmNsdXNpdmVFbmREYXRlcygpLHRoaXMuJD1hW3NdLnN1YnN0cigxOCk7YnJlYWs7Y2FzZSAxMTpyLlRvcEF4aXMoKSx0aGlzLiQ9YVtzXS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAxMjpyLnNldEF4aXNGb3JtYXQoYVtzXS5zdWJzdHIoMTEpKSx0aGlzLiQ9YVtzXS5zdWJzdHIoMTEpO2JyZWFrO2Nhc2UgMTM6ci5zZXRFeGNsdWRlcyhhW3NdLnN1YnN0cig5KSksdGhpcy4kPWFbc10uc3Vic3RyKDkpO2JyZWFrO2Nhc2UgMTQ6ci5zZXRUb2RheU1hcmtlcihhW3NdLnN1YnN0cigxMikpLHRoaXMuJD1hW3NdLnN1YnN0cigxMik7YnJlYWs7Y2FzZSAxNTpyLnNldFRpdGxlKGFbc10uc3Vic3RyKDYpKSx0aGlzLiQ9YVtzXS5zdWJzdHIoNik7YnJlYWs7Y2FzZSAxNjpyLmFkZFNlY3Rpb24oYVtzXS5zdWJzdHIoOCkpLHRoaXMuJD1hW3NdLnN1YnN0cig4KTticmVhaztjYXNlIDE4OnIuYWRkVGFzayhhW3MtMV0sYVtzXSksdGhpcy4kPSJ0YXNrIjticmVhaztjYXNlIDIyOnRoaXMuJD1hW3MtMV0sci5zZXRDbGlja0V2ZW50KGFbcy0xXSxhW3NdLG51bGwpO2JyZWFrO2Nhc2UgMjM6dGhpcy4kPWFbcy0yXSxyLnNldENsaWNrRXZlbnQoYVtzLTJdLGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDI0OnRoaXMuJD1hW3MtMl0sci5zZXRDbGlja0V2ZW50KGFbcy0yXSxhW3MtMV0sbnVsbCksci5zZXRMaW5rKGFbcy0yXSxhW3NdKTticmVhaztjYXNlIDI1OnRoaXMuJD1hW3MtM10sci5zZXRDbGlja0V2ZW50KGFbcy0zXSxhW3MtMl0sYVtzLTFdKSxyLnNldExpbmsoYVtzLTNdLGFbc10pO2JyZWFrO2Nhc2UgMjY6dGhpcy4kPWFbcy0yXSxyLnNldENsaWNrRXZlbnQoYVtzLTJdLGFbc10sbnVsbCksci5zZXRMaW5rKGFbcy0yXSxhW3MtMV0pO2JyZWFrO2Nhc2UgMjc6dGhpcy4kPWFbcy0zXSxyLnNldENsaWNrRXZlbnQoYVtzLTNdLGFbcy0xXSxhW3NdKSxyLnNldExpbmsoYVtzLTNdLGFbcy0yXSk7YnJlYWs7Y2FzZSAyODp0aGlzLiQ9YVtzLTFdLHIuc2V0TGluayhhW3MtMV0sYVtzXSk7YnJlYWs7Y2FzZSAyOTpjYXNlIDM1OnRoaXMuJD1hW3MtMV0rIiAiK2Fbc107YnJlYWs7Y2FzZSAzMDpjYXNlIDMxOmNhc2UgMzM6dGhpcy4kPWFbcy0yXSsiICIrYVtzLTFdKyIgIithW3NdO2JyZWFrO2Nhc2UgMzI6Y2FzZSAzNDp0aGlzLiQ9YVtzLTNdKyIgIithW3MtMl0rIiAiK2Fbcy0xXSsiICIrYVtzXTticmVhaztjYXNlIDM2OnIucGFyc2VEaXJlY3RpdmUoIiUleyIsIm9wZW5fZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAzNzpyLnBhcnNlRGlyZWN0aXZlKGFbc10sInR5cGVfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAzODphW3NdPWFbc10udHJpbSgpLnJlcGxhY2UoLycvZywnIicpLHIucGFyc2VEaXJlY3RpdmUoYVtzXSwiYXJnX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMzk6ci5wYXJzZURpcmVjdGl2ZSgifSUlIiwiY2xvc2VfZGlyZWN0aXZlIiwiZ2FudHQiKX19LHRhYmxlOlt7MzoxLDQ6Miw1OmUsMjM6NCwzMzpufSx7MTpbM119LHszOjYsNDoyLDU6ZSwyMzo0LDMzOm59LHQocixbMiwzXSx7Njo3fSksezI0OjgsMzQ6WzEsOV19LHszNDpbMiwzNl19LHsxOlsyLDFdfSx7NDoyNSw3OlsxLDEwXSw4OjExLDk6WzEsMTJdLDEwOjEzLDExOlsxLDE0XSwxMjppLDEzOmEsMTQ6bywxNTpzLDE2OmMsMTc6dSwxODpsLDE5OmgsMjA6MjMsMjE6ZiwyMzo0LDI4OmQsMzM6bn0sezI1OjI3LDI2OlsxLDI4XSwzNjpwfSx0KFsyNiwzNl0sWzIsMzddKSx0KHIsWzIsOF0sezE6WzIsMl19KSx0KHIsWzIsNF0pLHs0OjI1LDEwOjMwLDEyOmksMTM6YSwxNDpvLDE1OnMsMTY6YywxNzp1LDE4OmwsMTk6aCwyMDoyMywyMTpmLDIzOjQsMjg6ZCwzMzpufSx0KHIsWzIsNl0pLHQocixbMiw3XSksdChyLFsyLDldKSx0KHIsWzIsMTBdKSx0KHIsWzIsMTFdKSx0KHIsWzIsMTJdKSx0KHIsWzIsMTNdKSx0KHIsWzIsMTRdKSx0KHIsWzIsMTVdKSx0KHIsWzIsMTZdKSx0KHIsWzIsMTddKSx7MjI6WzEsMzFdfSx0KHIsWzIsMTldKSx7Mjk6WzEsMzJdLDMxOlsxLDMzXX0sezExOlsxLDM0XX0sezI3OjM1LDM1OlsxLDM2XX0sezExOlsyLDM5XX0sdChyLFsyLDVdKSx0KHIsWzIsMThdKSx0KHIsWzIsMjJdLHszMDpbMSwzN10sMzE6WzEsMzhdfSksdChyLFsyLDI4XSx7Mjk6WzEsMzldfSksdCh5LFsyLDIwXSksezI1OjQwLDM2OnB9LHszNjpbMiwzOF19LHQocixbMiwyM10sezMxOlsxLDQxXX0pLHQocixbMiwyNF0pLHQocixbMiwyNl0sezMwOlsxLDQyXX0pLHsxMTpbMSw0M119LHQocixbMiwyNV0pLHQocixbMiwyN10pLHQoeSxbMiwyMV0pXSxkZWZhdWx0QWN0aW9uczp7NTpbMiwzNl0sNjpbMiwxXSwyOTpbMiwzOV0sMzY6WzIsMzhdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIWUucmVjb3ZlcmFibGUpe3ZhciBuPW5ldyBFcnJvcih0KTt0aHJvdyBuLmhhc2g9ZSxufXRoaXMudHJhY2UodCl9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bMF0scj1bXSxpPVtudWxsXSxhPVtdLG89dGhpcy50YWJsZSxzPSIiLGM9MCx1PTAsbD0wLGg9MixmPTEsZD1hLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHA9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSx5PXt5eTp7fX07Zm9yKHZhciBnIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksZykmJih5Lnl5W2ddPXRoaXMueXlbZ10pO3Auc2V0SW5wdXQodCx5Lnl5KSx5Lnl5LmxleGVyPXAseS55eS5wYXJzZXI9dGhpcyx2b2lkIDA9PT1wLnl5bGxvYyYmKHAueXlsbG9jPXt9KTt2YXIgdj1wLnl5bGxvYzthLnB1c2godik7dmFyIG09cC5vcHRpb25zJiZwLm9wdGlvbnMucmFuZ2VzO2Z1bmN0aW9uIGIoKXt2YXIgdDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mKHQ9ci5wb3AoKXx8cC5sZXgoKXx8ZikmJih0IGluc3RhbmNlb2YgQXJyYXkmJih0PShyPXQpLnBvcCgpKSx0PWUuc3ltYm9sc19bdF18fHQpLHR9ImZ1bmN0aW9uIj09dHlwZW9mIHkueXkucGFyc2VFcnJvcj90aGlzLnBhcnNlRXJyb3I9eS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmb3IodmFyIHgsXyxrLHcsRSxULEMsUyxBLE09e307Oyl7aWYoaz1uW24ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNba10/dz10aGlzLmRlZmF1bHRBY3Rpb25zW2tdOihudWxsPT14JiYoeD1iKCkpLHc9b1trXSYmb1trXVt4XSksdm9pZCAwPT09d3x8IXcubGVuZ3RofHwhd1swXSl7dmFyIE89IiI7Zm9yKFQgaW4gQT1bXSxvW2tdKXRoaXMudGVybWluYWxzX1tUXSYmVD5oJiZBLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tUXSsiJyIpO089cC5zaG93UG9zaXRpb24/IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOlxuIitwLnNob3dQb3NpdGlvbigpKyJcbkV4cGVjdGluZyAiK0Euam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciOiJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjogVW5leHBlY3RlZCAiKyh4PT1mPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyIpLHRoaXMucGFyc2VFcnJvcihPLHt0ZXh0OnAubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3hdfHx4LGxpbmU6cC55eWxpbmVubyxsb2M6dixleHBlY3RlZDpBfSl9aWYod1swXWluc3RhbmNlb2YgQXJyYXkmJncubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitrKyIsIHRva2VuOiAiK3gpO3N3aXRjaCh3WzBdKXtjYXNlIDE6bi5wdXNoKHgpLGkucHVzaChwLnl5dGV4dCksYS5wdXNoKHAueXlsbG9jKSxuLnB1c2god1sxXSkseD1udWxsLF8/KHg9XyxfPW51bGwpOih1PXAueXlsZW5nLHM9cC55eXRleHQsYz1wLnl5bGluZW5vLHY9cC55eWxsb2MsbD4wJiZsLS0pO2JyZWFrO2Nhc2UgMjppZihDPXRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzFdLE0uJD1pW2kubGVuZ3RoLUNdLE0uXyQ9e2ZpcnN0X2xpbmU6YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmFbYS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmFbYS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LG0mJihNLl8kLnJhbmdlPVthW2EubGVuZ3RoLShDfHwxKV0ucmFuZ2VbMF0sYVthLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHZvaWQgMCE9PShFPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShNLFtzLHUsYyx5Lnl5LHdbMV0saSxhXS5jb25jYXQoZCkpKSlyZXR1cm4gRTtDJiYobj1uLnNsaWNlKDAsLTEqQyoyKSxpPWkuc2xpY2UoMCwtMSpDKSxhPWEuc2xpY2UoMCwtMSpDKSksbi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzBdKSxpLnB1c2goTS4kKSxhLnB1c2goTS5fJCksUz1vW25bbi5sZW5ndGgtMl1dW25bbi5sZW5ndGgtMV1dLG4ucHVzaChTKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sdj17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLnl5LnBhcnNlcil0aHJvdyBuZXcgRXJyb3IodCk7dGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih0LGUpfSxzZXRJbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnl5PWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW5wdXRbMF07cmV0dXJuIHRoaXMueXl0ZXh0Kz10LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz10LHRoaXMubWF0Y2hlZCs9dCx0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksdH0sdW5wdXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsbj10LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9dCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZSksdGhpcy5vZmZzZXQtPWU7dmFyIHI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPW4ubGVuZ3RoLTEpO3ZhciBpPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpuPyhuLmxlbmd0aD09PXIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStyW3IubGVuZ3RoLW4ubGVuZ3RoXS5sZW5ndGgtblswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1baVswXSxpWzBdK3RoaXMueXlsZW5nLWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyPyh0aGlzLl9iYWNrdHJhY2s9ITAsdGhpcyk6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGVzczpmdW5jdGlvbih0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSt0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaDtyZXR1cm4gdC5sZW5ndGg8MjAmJih0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC10Lmxlbmd0aCkpLCh0LnN1YnN0cigwLDIwKSsodC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXN0SW5wdXQoKSxlPW5ldyBBcnJheSh0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHQrdGhpcy51cGNvbWluZ0lucHV0KCkrIlxuIitlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihpLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLChyPXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpKSYmKHRoaXMueXlsaW5lbm8rPXIubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46cj9yW3IubGVuZ3RoLTFdLmxlbmd0aC1yW3IubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz10WzBdLHRoaXMubWF0Y2grPXRbMF0sdGhpcy5tYXRjaGVzPXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UodFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9dFswXSxuPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksbilyZXR1cm4gbjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgYSBpbiBpKXRoaXNbYV09aVthXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dmFyIHQsZSxuLHI7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApLHRoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGk9dGhpcy5fY3VycmVudFJ1bGVzKCksYT0wO2E8aS5sZW5ndGg7YSsrKWlmKChuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbaVthXV0pKSYmKCFlfHxuWzBdLmxlbmd0aD5lWzBdLmxlbmd0aCkpe2lmKGU9bixyPWEsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoITEhPT0odD10aGlzLnRlc3RfbWF0Y2gobixpW2FdKSkpcmV0dXJuIHQ7aWYodGhpcy5fYmFja3RyYWNrKXtlPSExO2NvbnRpbnVlfXJldHVybiExfWlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZT8hMSE9PSh0PXRoaXMudGVzdF9tYXRjaChlLGlbcl0pKSYmdDoiIj09PXRoaXMuX2lucHV0P3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gVW5yZWNvZ25pemVkIHRleHQuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5uZXh0KCk7cmV0dXJuIHR8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLDMzO2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSwzNDtjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMjY7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDM2O2Nhc2UgNDpyZXR1cm4gMzU7Y2FzZSA1OmNhc2UgNjpjYXNlIDc6YnJlYWs7Y2FzZSA4OnJldHVybiAxMTtjYXNlIDk6Y2FzZSAxMDpjYXNlIDExOmJyZWFrO2Nhc2UgMTI6dGhpcy5iZWdpbigiaHJlZiIpO2JyZWFrO2Nhc2UgMTM6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTQ6cmV0dXJuIDMxO2Nhc2UgMTU6dGhpcy5iZWdpbigiY2FsbGJhY2tuYW1lIik7YnJlYWs7Y2FzZSAxNjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxNzp0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiY2FsbGJhY2thcmdzIik7YnJlYWs7Y2FzZSAxODpyZXR1cm4gMjk7Y2FzZSAxOTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyMDpyZXR1cm4gMzA7Y2FzZSAyMTp0aGlzLmJlZ2luKCJjbGljayIpO2JyZWFrO2Nhc2UgMjI6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjM6cmV0dXJuIDI4O2Nhc2UgMjQ6cmV0dXJuIDU7Y2FzZSAyNTpyZXR1cm4gMTI7Y2FzZSAyNjpyZXR1cm4gMTM7Y2FzZSAyNzpyZXR1cm4gMTQ7Y2FzZSAyODpyZXR1cm4gMTU7Y2FzZSAyOTpyZXR1cm4gMTY7Y2FzZSAzMDpyZXR1cm4gMTc7Y2FzZSAzMTpyZXR1cm4iZGF0ZSI7Y2FzZSAzMjpyZXR1cm4gMTg7Y2FzZSAzMzpyZXR1cm4gMTk7Y2FzZSAzNDpyZXR1cm4gMjE7Y2FzZSAzNTpyZXR1cm4gMjI7Y2FzZSAzNjpyZXR1cm4gMjY7Y2FzZSAzNzpyZXR1cm4gNztjYXNlIDM4OnJldHVybiJJTlZBTElEIn19LHJ1bGVzOlsvXig/OiUlXHspL2ksL14oPzooKD86KD8hXH0lJSlbXjouXSkqKSkvaSwvXig/OjopL2ksL14oPzpcfSUlKS9pLC9eKD86KCg/Oig/IVx9JSUpLnxcbikqKSkvaSwvXig/OiUlKD8hXHspKlteXG5dKikvaSwvXig/OlteXH1dJSUqW15cbl0qKS9pLC9eKD86JSUqW15cbl0qW1xuXSopL2ksL14oPzpbXG5dKykvaSwvXig/OlxzKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzolW15cbl0qKS9pLC9eKD86aHJlZltcc10rWyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpjYWxsW1xzXSspL2ksL14oPzpcKFtcc10qXCkpL2ksL14oPzpcKCkvaSwvXig/OlteKF0qKS9pLC9eKD86XCkpL2ksL14oPzpbXildKikvaSwvXig/OmNsaWNrW1xzXSspL2ksL14oPzpbXHNcbl0pL2ksL14oPzpbXlxzXG5dKikvaSwvXig/OmdhbnR0XGIpL2ksL14oPzpkYXRlRm9ybWF0XHNbXiNcbjtdKykvaSwvXig/OmluY2x1c2l2ZUVuZERhdGVzXGIpL2ksL14oPzp0b3BBeGlzXGIpL2ksL14oPzpheGlzRm9ybWF0XHNbXiNcbjtdKykvaSwvXig/OmV4Y2x1ZGVzXHNbXiNcbjtdKykvaSwvXig/OnRvZGF5TWFya2VyXHNbXlxuO10rKS9pLC9eKD86XGRcZFxkXGQtXGRcZC1cZFxkXGIpL2ksL14oPzp0aXRsZVxzW14jXG47XSspL2ksL14oPzpzZWN0aW9uXHNbXiM6XG47XSspL2ksL14oPzpbXiM6XG47XSspL2ksL14oPzo6W14jXG47XSspL2ksL14oPzo6KS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e2Nsb3NlX2RpcmVjdGl2ZTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0XSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbMiwzXSxpbmNsdXNpdmU6ITF9LG9wZW5fZGlyZWN0aXZlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSxjYWxsYmFja2FyZ3M6e3J1bGVzOlsxOSwyMF0saW5jbHVzaXZlOiExfSxjYWxsYmFja25hbWU6e3J1bGVzOlsxNiwxNywxOF0saW5jbHVzaXZlOiExfSxocmVmOntydWxlczpbMTMsMTRdLGluY2x1c2l2ZTohMX0sY2xpY2s6e3J1bGVzOlsyMiwyM10saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCw1LDYsNyw4LDksMTAsMTEsMTIsMTUsMjEsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzhdLGluY2x1c2l2ZTohMH19fTtmdW5jdGlvbiBtKCl7dGhpcy55eT17fX1yZXR1cm4gZy5sZXhlcj12LG0ucHJvdG90eXBlPWcsZy5QYXJzZXI9bSxuZXcgbX0oKTtlLnBhcnNlcj1pLGUuUGFyc2VyPWkuUGFyc2VyLGUucGFyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gaS5wYXJzZS5hcHBseShpLGFyZ3VtZW50cyl9LGUubWFpbj1mdW5jdGlvbihyKXtyWzFdfHwoY29uc29sZS5sb2coIlVzYWdlOiAiK3JbMF0rIiBGSUxFIiksdC5leGl0KDEpKTt2YXIgaT1uKDE3KS5yZWFkRmlsZVN5bmMobigxOCkubm9ybWFsaXplKHJbMV0pLCJ1dGY4Iik7cmV0dXJuIGUucGFyc2VyLnBhcnNlKGkpfSxuLmNbbi5zXT09PXImJmUubWFpbih0LmFyZ3Yuc2xpY2UoMSkpfSkuY2FsbCh0aGlzLG4oMTEpLG4oNikodCkpfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzOCksaT1uKDgxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXQmJmkodC5sZW5ndGgpJiYhcih0KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI1NyksaT1uKDI2NyksYT1uKDM1KSxvPW4oNSkscz1uKDI3NCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bnVsbD09dD9hOiJvYmplY3QiPT10eXBlb2YgdD9vKHQpP2kodFswXSx0WzFdKTpyKHQpOnModCl9fSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKHQscil7dmFyIGk9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVsxLDldLG49WzEsN10scj1bMSw2XSxpPVsxLDhdLGE9WzEsMjAsMjEsMjIsMjMsMzgsNDcsNzYsNzcsNzgsNzksODAsODEsOTUsOTYsOTksMTAwLDEwMSwxMDMsMTA0LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOV0sbz1bMiwxMF0scz1bMSwyMF0sYz1bMSwyMV0sdT1bMSwyMl0sbD1bMSwyM10saD1bMSwzMF0sZj1bMSw1OV0sZD1bMSwzM10scD1bMSwzNF0seT1bMSwzNV0sZz1bMSwzNl0sdj1bMSwzN10sbT1bMSw1M10sYj1bMSw0OF0seD1bMSw1MF0sXz1bMSw0NV0saz1bMSw0OV0sdz1bMSw1Ml0sRT1bMSw1Nl0sVD1bMSw1N10sQz1bMSwzOF0sUz1bMSwzOV0sQT1bMSw0MF0sTT1bMSw0MV0sTz1bMSw1OF0sQj1bMSw0N10sTj1bMSw1MV0sRD1bMSw1NF0sTD1bMSw1NV0sST1bMSw0Nl0sUj1bMSw2Ml0sRj1bMSw2N10sUD1bMSwyMCwyMSwyMiwyMywzOCw0Miw0Nyw3Niw3Nyw3OCw3OSw4MCw4MSw5NSw5Niw5OSwxMDAsMTAxLDEwMywxMDQsMTEwLDExMSwxMTIsMTEzLDExNCwxMTUsMTE2LDExNywxMTgsMTE5XSxqPVsxLDcxXSxZPVsxLDcwXSx6PVsxLDcyXSxVPVsyMCwyMSwyMyw3MCw3MV0sJD1bMSw5M10scT1bMSw5OF0sVz1bMSw5NV0sVj1bMSwxMDBdLEg9WzEsMTAzXSxHPVsxLDEwMV0sWD1bMSwxMDJdLFo9WzEsOTZdLFE9WzEsMTA4XSxLPVsxLDEwN10sSj1bMSw5N10sdHQ9WzEsOTldLGV0PVsxLDEwNF0sbnQ9WzEsMTA1XSxydD1bMSwxMDZdLGl0PVsxLDEwOV0sYXQ9WzIwLDIxLDIyLDIzLDcwLDcxXSxvdD1bMjAsMjEsMjIsMjMsNDgsNzAsNzFdLHN0PVsyMCwyMSwyMiwyMyw0MCw0Nyw0OCw1MCw1Miw1NCw1Niw1OCw2MCw2Miw2Myw2NSw3MCw3MSw4MSw5NSw5Niw5OSwxMDAsMTAxLDEwMywxMDQsMTE0LDExNSwxMTYsMTE3LDExOCwxMTldLGN0PVsyMCwyMSwyM10sdXQ9WzIwLDIxLDIzLDQ3LDcwLDcxLDgxLDk1LDk2LDk5LDEwMCwxMDEsMTAzLDEwNCwxMTQsMTE1LDExNiwxMTcsMTE4LDExOV0sbHQ9WzEsMTIsMjAsMjEsMjIsMjMsMjQsMzgsNDIsNDcsNzYsNzcsNzgsNzksODAsODEsOTUsOTYsOTksMTAwLDEwMSwxMDMsMTA0LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOV0saHQ9WzQ3LDgxLDk1LDk2LDk5LDEwMCwxMDEsMTAzLDEwNCwxMTQsMTE1LDExNiwxMTcsMTE4LDExOV0sZnQ9WzEsMTQxXSxkdD1bMSwxNDldLHB0PVsxLDE1MF0seXQ9WzEsMTUxXSxndD1bMSwxNTJdLHZ0PVsxLDEzNl0sbXQ9WzEsMTM3XSxidD1bMSwxMzNdLHh0PVsxLDE0NF0sX3Q9WzEsMTQ1XSxrdD1bMSwxNDZdLHd0PVsxLDE0N10sRXQ9WzEsMTQ4XSxUdD1bMSwxNTNdLEN0PVsxLDE1NF0sU3Q9WzEsMTM5XSxBdD1bMSwxNDJdLE10PVsxLDEzOF0sT3Q9WzEsMTM1XSxCdD1bMjAsMjEsMjIsMjMsMzgsNDIsNDcsNzYsNzcsNzgsNzksODAsODEsOTUsOTYsOTksMTAwLDEwMSwxMDMsMTA0LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOV0sTnQ9WzEsMTU3XSxEdD1bMjAsMjEsMjIsMjMsMjYsNDcsODEsOTUsOTYsOTksMTAwLDEwMSwxMDMsMTA0LDExNCwxMTUsMTE2LDExNywxMTgsMTE5XSxMdD1bMjAsMjEsMjIsMjMsMjQsMjYsMzgsNDAsNDEsNDIsNDcsNTEsNTMsNTUsNTcsNTksNjEsNjIsNjQsNjYsNzAsNzEsNzIsNzYsNzcsNzgsNzksODAsODEsODIsODUsOTUsOTYsOTksMTAwLDEwMSwxMDMsMTA0LDEwNSwxMDYsMTE0LDExNSwxMTYsMTE3LDExOCwxMTldLEl0PVsxMiwyMSwyMiwyNF0sUnQ9WzIyLDk2XSxGdD1bMSwyMzhdLFB0PVsxLDI0Ml0sanQ9WzEsMjM5XSxZdD1bMSwyMzZdLHp0PVsxLDIzM10sVXQ9WzEsMjM0XSwkdD1bMSwyMzVdLHF0PVsxLDIzN10sV3Q9WzEsMjQwXSxWdD1bMSwyNDFdLEh0PVsxLDI0M10sR3Q9WzEsMjYwXSxYdD1bMjAsMjEsMjMsOTZdLFp0PVsyMCwyMSwyMiwyMyw3Niw5Miw5NSw5Niw5OSwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNV0sUXQ9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLG1lcm1haWREb2M6NCxkaXJlY3RpdmU6NSxvcGVuRGlyZWN0aXZlOjYsdHlwZURpcmVjdGl2ZTo3LGNsb3NlRGlyZWN0aXZlOjgsc2VwYXJhdG9yOjksIjoiOjEwLGFyZ0RpcmVjdGl2ZToxMSxvcGVuX2RpcmVjdGl2ZToxMix0eXBlX2RpcmVjdGl2ZToxMyxhcmdfZGlyZWN0aXZlOjE0LGNsb3NlX2RpcmVjdGl2ZToxNSxncmFwaENvbmZpZzoxNixkb2N1bWVudDoxNyxsaW5lOjE4LHN0YXRlbWVudDoxOSxTRU1JOjIwLE5FV0xJTkU6MjEsU1BBQ0U6MjIsRU9GOjIzLEdSQVBIOjI0LE5PRElSOjI1LERJUjoyNixGaXJzdFN0bXRTZXBlcmF0b3I6MjcsZW5kaW5nOjI4LGVuZFRva2VuOjI5LHNwYWNlTGlzdDozMCxzcGFjZUxpc3ROZXdsaW5lOjMxLHZlcnRpY2VTdGF0ZW1lbnQ6MzIsc3R5bGVTdGF0ZW1lbnQ6MzMsbGlua1N0eWxlU3RhdGVtZW50OjM0LGNsYXNzRGVmU3RhdGVtZW50OjM1LGNsYXNzU3RhdGVtZW50OjM2LGNsaWNrU3RhdGVtZW50OjM3LHN1YmdyYXBoOjM4LHRleHQ6MzksU1FTOjQwLFNRRTo0MSxlbmQ6NDIsZGlyZWN0aW9uOjQzLGxpbms6NDQsbm9kZTo0NSx2ZXJ0ZXg6NDYsQU1QOjQ3LFNUWUxFX1NFUEFSQVRPUjo0OCxpZFN0cmluZzo0OSxQUzo1MCxQRTo1MSwiKC0iOjUyLCItKSI6NTMsU1RBRElVTVNUQVJUOjU0LFNUQURJVU1FTkQ6NTUsU1VCUk9VVElORVNUQVJUOjU2LFNVQlJPVVRJTkVFTkQ6NTcsQ1lMSU5ERVJTVEFSVDo1OCxDWUxJTkRFUkVORDo1OSxESUFNT05EX1NUQVJUOjYwLERJQU1PTkRfU1RPUDo2MSxUQUdFTkQ6NjIsVFJBUFNUQVJUOjYzLFRSQVBFTkQ6NjQsSU5WVFJBUFNUQVJUOjY1LElOVlRSQVBFTkQ6NjYsbGlua1N0YXRlbWVudDo2NyxhcnJvd1RleHQ6NjgsVEVTVFNUUjo2OSxTVEFSVF9MSU5LOjcwLExJTks6NzEsUElQRTo3Mix0ZXh0VG9rZW46NzMsU1RSOjc0LGtleXdvcmRzOjc1LFNUWUxFOjc2LExJTktTVFlMRTo3NyxDTEFTU0RFRjo3OCxDTEFTUzo3OSxDTElDSzo4MCxET1dOOjgxLFVQOjgyLHRleHROb1RhZ3M6ODMsdGV4dE5vVGFnc1Rva2VuOjg0LERFRkFVTFQ6ODUsc3R5bGVzT3B0Ojg2LGFscGhhTnVtOjg3LENBTExCQUNLTkFNRTo4OCxDQUxMQkFDS0FSR1M6ODksSFJFRjo5MCxMSU5LX1RBUkdFVDo5MSxIRVg6OTIsbnVtTGlzdDo5MyxJTlRFUlBPTEFURTo5NCxOVU06OTUsQ09NTUE6OTYsc3R5bGU6OTcsc3R5bGVDb21wb25lbnQ6OTgsQUxQSEE6OTksQ09MT046MTAwLE1JTlVTOjEwMSxVTklUOjEwMixCUktUOjEwMyxET1Q6MTA0LFBDVDoxMDUsVEFHU1RBUlQ6MTA2LGFscGhhTnVtVG9rZW46MTA3LGlkU3RyaW5nVG9rZW46MTA4LGFscGhhTnVtU3RhdGVtZW50OjEwOSxkaXJlY3Rpb25fdGI6MTEwLGRpcmVjdGlvbl9idDoxMTEsZGlyZWN0aW9uX3JsOjExMixkaXJlY3Rpb25fbHI6MTEzLFBVTkNUVUFUSU9OOjExNCxVTklDT0RFX1RFWFQ6MTE1LFBMVVM6MTE2LEVRVUFMUzoxMTcsTVVMVDoxMTgsVU5ERVJTQ09SRToxMTksZ3JhcGhDb2RlVG9rZW5zOjEyMCxBUlJPV19DUk9TUzoxMjEsQVJST1dfUE9JTlQ6MTIyLEFSUk9XX0NJUkNMRToxMjMsQVJST1dfT1BFTjoxMjQsUVVPVEU6MTI1LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiwxMDoiOiIsMTI6Im9wZW5fZGlyZWN0aXZlIiwxMzoidHlwZV9kaXJlY3RpdmUiLDE0OiJhcmdfZGlyZWN0aXZlIiwxNToiY2xvc2VfZGlyZWN0aXZlIiwyMDoiU0VNSSIsMjE6Ik5FV0xJTkUiLDIyOiJTUEFDRSIsMjM6IkVPRiIsMjQ6IkdSQVBIIiwyNToiTk9ESVIiLDI2OiJESVIiLDM4OiJzdWJncmFwaCIsNDA6IlNRUyIsNDE6IlNRRSIsNDI6ImVuZCIsNDc6IkFNUCIsNDg6IlNUWUxFX1NFUEFSQVRPUiIsNTA6IlBTIiw1MToiUEUiLDUyOiIoLSIsNTM6Ii0pIiw1NDoiU1RBRElVTVNUQVJUIiw1NToiU1RBRElVTUVORCIsNTY6IlNVQlJPVVRJTkVTVEFSVCIsNTc6IlNVQlJPVVRJTkVFTkQiLDU4OiJDWUxJTkRFUlNUQVJUIiw1OToiQ1lMSU5ERVJFTkQiLDYwOiJESUFNT05EX1NUQVJUIiw2MToiRElBTU9ORF9TVE9QIiw2MjoiVEFHRU5EIiw2MzoiVFJBUFNUQVJUIiw2NDoiVFJBUEVORCIsNjU6IklOVlRSQVBTVEFSVCIsNjY6IklOVlRSQVBFTkQiLDY5OiJURVNUU1RSIiw3MDoiU1RBUlRfTElOSyIsNzE6IkxJTksiLDcyOiJQSVBFIiw3NDoiU1RSIiw3NjoiU1RZTEUiLDc3OiJMSU5LU1RZTEUiLDc4OiJDTEFTU0RFRiIsNzk6IkNMQVNTIiw4MDoiQ0xJQ0siLDgxOiJET1dOIiw4MjoiVVAiLDg1OiJERUZBVUxUIiw4ODoiQ0FMTEJBQ0tOQU1FIiw4OToiQ0FMTEJBQ0tBUkdTIiw5MDoiSFJFRiIsOTE6IkxJTktfVEFSR0VUIiw5MjoiSEVYIiw5NDoiSU5URVJQT0xBVEUiLDk1OiJOVU0iLDk2OiJDT01NQSIsOTk6IkFMUEhBIiwxMDA6IkNPTE9OIiwxMDE6Ik1JTlVTIiwxMDI6IlVOSVQiLDEwMzoiQlJLVCIsMTA0OiJET1QiLDEwNToiUENUIiwxMDY6IlRBR1NUQVJUIiwxMTA6ImRpcmVjdGlvbl90YiIsMTExOiJkaXJlY3Rpb25fYnQiLDExMjoiZGlyZWN0aW9uX3JsIiwxMTM6ImRpcmVjdGlvbl9sciIsMTE0OiJQVU5DVFVBVElPTiIsMTE1OiJVTklDT0RFX1RFWFQiLDExNjoiUExVUyIsMTE3OiJFUVVBTFMiLDExODoiTVVMVCIsMTE5OiJVTkRFUlNDT1JFIiwxMjE6IkFSUk9XX0NST1NTIiwxMjI6IkFSUk9XX1BPSU5UIiwxMjM6IkFSUk9XX0NJUkNMRSIsMTI0OiJBUlJPV19PUEVOIiwxMjU6IlFVT1RFIn0scHJvZHVjdGlvbnNfOlswLFszLDFdLFszLDJdLFs1LDRdLFs1LDZdLFs2LDFdLFs3LDFdLFsxMSwxXSxbOCwxXSxbNCwyXSxbMTcsMF0sWzE3LDJdLFsxOCwxXSxbMTgsMV0sWzE4LDFdLFsxOCwxXSxbMTgsMV0sWzE2LDJdLFsxNiwyXSxbMTYsMl0sWzE2LDNdLFsyOCwyXSxbMjgsMV0sWzI5LDFdLFsyOSwxXSxbMjksMV0sWzI3LDFdLFsyNywxXSxbMjcsMl0sWzMxLDJdLFszMSwyXSxbMzEsMV0sWzMxLDFdLFszMCwyXSxbMzAsMV0sWzE5LDJdLFsxOSwyXSxbMTksMl0sWzE5LDJdLFsxOSwyXSxbMTksMl0sWzE5LDldLFsxOSw2XSxbMTksNF0sWzE5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFszMiwzXSxbMzIsNF0sWzMyLDJdLFszMiwxXSxbNDUsMV0sWzQ1LDVdLFs0NSwzXSxbNDYsNF0sWzQ2LDZdLFs0Niw0XSxbNDYsNF0sWzQ2LDRdLFs0Niw0XSxbNDYsNF0sWzQ2LDRdLFs0Niw2XSxbNDYsNF0sWzQ2LDRdLFs0Niw0XSxbNDYsNF0sWzQ2LDRdLFs0NiwxXSxbNDQsMl0sWzQ0LDNdLFs0NCwzXSxbNDQsMV0sWzQ0LDNdLFs2NywxXSxbNjgsM10sWzM5LDFdLFszOSwyXSxbMzksMV0sWzc1LDFdLFs3NSwxXSxbNzUsMV0sWzc1LDFdLFs3NSwxXSxbNzUsMV0sWzc1LDFdLFs3NSwxXSxbNzUsMV0sWzc1LDFdLFs3NSwxXSxbODMsMV0sWzgzLDJdLFszNSw1XSxbMzUsNV0sWzM2LDVdLFszNywyXSxbMzcsNF0sWzM3LDNdLFszNyw1XSxbMzcsMl0sWzM3LDRdLFszNyw0XSxbMzcsNl0sWzM3LDJdLFszNyw0XSxbMzcsMl0sWzM3LDRdLFszNyw0XSxbMzcsNl0sWzMzLDVdLFszMyw1XSxbMzQsNV0sWzM0LDVdLFszNCw5XSxbMzQsOV0sWzM0LDddLFszNCw3XSxbOTMsMV0sWzkzLDNdLFs4NiwxXSxbODYsM10sWzk3LDFdLFs5NywyXSxbOTgsMV0sWzk4LDFdLFs5OCwxXSxbOTgsMV0sWzk4LDFdLFs5OCwxXSxbOTgsMV0sWzk4LDFdLFs5OCwxXSxbOTgsMV0sWzk4LDFdLFs3MywxXSxbNzMsMV0sWzczLDFdLFs3MywxXSxbNzMsMV0sWzczLDFdLFs4NCwxXSxbODQsMV0sWzg0LDFdLFs4NCwxXSxbNDksMV0sWzQ5LDJdLFs4NywxXSxbODcsMl0sWzEwOSwxXSxbMTA5LDFdLFsxMDksMV0sWzEwOSwxXSxbNDMsMV0sWzQzLDFdLFs0MywxXSxbNDMsMV0sWzEwNywxXSxbMTA3LDFdLFsxMDcsMV0sWzEwNywxXSxbMTA3LDFdLFsxMDcsMV0sWzEwNywxXSxbMTA3LDFdLFsxMDcsMV0sWzEwNywxXSxbMTA3LDFdLFsxMDcsMV0sWzEwNywxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe3ZhciBzPWEubGVuZ3RoLTE7c3dpdGNoKGkpe2Nhc2UgNTpyLnBhcnNlRGlyZWN0aXZlKCIlJXsiLCJvcGVuX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgNjpyLnBhcnNlRGlyZWN0aXZlKGFbc10sInR5cGVfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA3OmFbc109YVtzXS50cmltKCkucmVwbGFjZSgvJy9nLCciJyksci5wYXJzZURpcmVjdGl2ZShhW3NdLCJhcmdfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA4OnIucGFyc2VEaXJlY3RpdmUoIn0lJSIsImNsb3NlX2RpcmVjdGl2ZSIsImZsb3djaGFydCIpO2JyZWFrO2Nhc2UgMTA6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMTE6YVtzXSE9PVtdJiZhW3MtMV0ucHVzaChhW3NdKSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgMTI6Y2FzZSA3NzpjYXNlIDc5OmNhc2UgOTE6Y2FzZSAxNDc6Y2FzZSAxNDk6Y2FzZSAxNTA6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSAxOTpyLnNldERpcmVjdGlvbigiVEIiKSx0aGlzLiQ9IlRCIjticmVhaztjYXNlIDIwOnIuc2V0RGlyZWN0aW9uKGFbcy0xXSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDM1OnRoaXMuJD1hW3MtMV0ubm9kZXM7YnJlYWs7Y2FzZSAzNjpjYXNlIDM3OmNhc2UgMzg6Y2FzZSAzOTpjYXNlIDQwOnRoaXMuJD1bXTticmVhaztjYXNlIDQxOnRoaXMuJD1yLmFkZFN1YkdyYXBoKGFbcy02XSxhW3MtMV0sYVtzLTRdKTticmVhaztjYXNlIDQyOnRoaXMuJD1yLmFkZFN1YkdyYXBoKGFbcy0zXSxhW3MtMV0sYVtzLTNdKTticmVhaztjYXNlIDQzOnRoaXMuJD1yLmFkZFN1YkdyYXBoKHZvaWQgMCxhW3MtMV0sdm9pZCAwKTticmVhaztjYXNlIDQ4OnIuYWRkTGluayhhW3MtMl0uc3RtdCxhW3NdLGFbcy0xXSksdGhpcy4kPXtzdG10OmFbc10sbm9kZXM6YVtzXS5jb25jYXQoYVtzLTJdLm5vZGVzKX07YnJlYWs7Y2FzZSA0OTpyLmFkZExpbmsoYVtzLTNdLnN0bXQsYVtzLTFdLGFbcy0yXSksdGhpcy4kPXtzdG10OmFbcy0xXSxub2RlczphW3MtMV0uY29uY2F0KGFbcy0zXS5ub2Rlcyl9O2JyZWFrO2Nhc2UgNTA6dGhpcy4kPXtzdG10OmFbcy0xXSxub2RlczphW3MtMV19O2JyZWFrO2Nhc2UgNTE6dGhpcy4kPXtzdG10OmFbc10sbm9kZXM6YVtzXX07YnJlYWs7Y2FzZSA1Mjp0aGlzLiQ9W2Fbc11dO2JyZWFrO2Nhc2UgNTM6dGhpcy4kPWFbcy00XS5jb25jYXQoYVtzXSk7YnJlYWs7Y2FzZSA1NDp0aGlzLiQ9W2Fbcy0yXV0sci5zZXRDbGFzcyhhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSA1NTp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sInNxdWFyZSIpO2JyZWFrO2Nhc2UgNTY6dGhpcy4kPWFbcy01XSxyLmFkZFZlcnRleChhW3MtNV0sYVtzLTJdLCJjaXJjbGUiKTticmVhaztjYXNlIDU3OnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwiZWxsaXBzZSIpO2JyZWFrO2Nhc2UgNTg6dGhpcy4kPWFbcy0zXSxyLmFkZFZlcnRleChhW3MtM10sYVtzLTFdLCJzdGFkaXVtIik7YnJlYWs7Y2FzZSA1OTp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sInN1YnJvdXRpbmUiKTticmVhaztjYXNlIDYwOnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwiY3lsaW5kZXIiKTticmVhaztjYXNlIDYxOnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwicm91bmQiKTticmVhaztjYXNlIDYyOnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwiZGlhbW9uZCIpO2JyZWFrO2Nhc2UgNjM6dGhpcy4kPWFbcy01XSxyLmFkZFZlcnRleChhW3MtNV0sYVtzLTJdLCJoZXhhZ29uIik7YnJlYWs7Y2FzZSA2NDp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sIm9kZCIpO2JyZWFrO2Nhc2UgNjU6dGhpcy4kPWFbcy0zXSxyLmFkZFZlcnRleChhW3MtM10sYVtzLTFdLCJ0cmFwZXpvaWQiKTticmVhaztjYXNlIDY2OnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwiaW52X3RyYXBlem9pZCIpO2JyZWFrO2Nhc2UgNjc6dGhpcy4kPWFbcy0zXSxyLmFkZFZlcnRleChhW3MtM10sYVtzLTFdLCJsZWFuX3JpZ2h0Iik7YnJlYWs7Y2FzZSA2ODp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sImxlYW5fbGVmdCIpO2JyZWFrO2Nhc2UgNjk6dGhpcy4kPWFbc10sci5hZGRWZXJ0ZXgoYVtzXSk7YnJlYWs7Y2FzZSA3MDphW3MtMV0udGV4dD1hW3NdLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSA3MTpjYXNlIDcyOmFbcy0yXS50ZXh0PWFbcy0xXSx0aGlzLiQ9YVtzLTJdO2JyZWFrO2Nhc2UgNzM6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSA3NDp2YXIgYz1yLmRlc3RydWN0TGluayhhW3NdLGFbcy0yXSk7dGhpcy4kPXt0eXBlOmMudHlwZSxzdHJva2U6Yy5zdHJva2UsbGVuZ3RoOmMubGVuZ3RoLHRleHQ6YVtzLTFdfTticmVhaztjYXNlIDc1OmM9ci5kZXN0cnVjdExpbmsoYVtzXSk7dGhpcy4kPXt0eXBlOmMudHlwZSxzdHJva2U6Yy5zdHJva2UsbGVuZ3RoOmMubGVuZ3RofTticmVhaztjYXNlIDc2OnRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSA3ODpjYXNlIDkyOmNhc2UgMTQ4OnRoaXMuJD1hW3MtMV0rIiIrYVtzXTticmVhaztjYXNlIDkzOmNhc2UgOTQ6dGhpcy4kPWFbcy00XSxyLmFkZENsYXNzKGFbcy0yXSxhW3NdKTticmVhaztjYXNlIDk1OnRoaXMuJD1hW3MtNF0sci5zZXRDbGFzcyhhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSA5NjpjYXNlIDEwNDp0aGlzLiQ9YVtzLTFdLHIuc2V0Q2xpY2tFdmVudChhW3MtMV0sYVtzXSk7YnJlYWs7Y2FzZSA5NzpjYXNlIDEwNTp0aGlzLiQ9YVtzLTNdLHIuc2V0Q2xpY2tFdmVudChhW3MtM10sYVtzLTJdKSxyLnNldFRvb2x0aXAoYVtzLTNdLGFbc10pO2JyZWFrO2Nhc2UgOTg6dGhpcy4kPWFbcy0yXSxyLnNldENsaWNrRXZlbnQoYVtzLTJdLGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDk5OnRoaXMuJD1hW3MtNF0sci5zZXRDbGlja0V2ZW50KGFbcy00XSxhW3MtM10sYVtzLTJdKSxyLnNldFRvb2x0aXAoYVtzLTRdLGFbc10pO2JyZWFrO2Nhc2UgMTAwOmNhc2UgMTA2OnRoaXMuJD1hW3MtMV0sci5zZXRMaW5rKGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDEwMTpjYXNlIDEwNzp0aGlzLiQ9YVtzLTNdLHIuc2V0TGluayhhW3MtM10sYVtzLTJdKSxyLnNldFRvb2x0aXAoYVtzLTNdLGFbc10pO2JyZWFrO2Nhc2UgMTAyOmNhc2UgMTA4OnRoaXMuJD1hW3MtM10sci5zZXRMaW5rKGFbcy0zXSxhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSAxMDM6Y2FzZSAxMDk6dGhpcy4kPWFbcy01XSxyLnNldExpbmsoYVtzLTVdLGFbcy00XSxhW3NdKSxyLnNldFRvb2x0aXAoYVtzLTVdLGFbcy0yXSk7YnJlYWs7Y2FzZSAxMTA6dGhpcy4kPWFbcy00XSxyLmFkZFZlcnRleChhW3MtMl0sdm9pZCAwLHZvaWQgMCxhW3NdKTticmVhaztjYXNlIDExMTpjYXNlIDExMzp0aGlzLiQ9YVtzLTRdLHIudXBkYXRlTGluayhhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSAxMTI6dGhpcy4kPWFbcy00XSxyLnVwZGF0ZUxpbmsoW2Fbcy0yXV0sYVtzXSk7YnJlYWs7Y2FzZSAxMTQ6dGhpcy4kPWFbcy04XSxyLnVwZGF0ZUxpbmtJbnRlcnBvbGF0ZShbYVtzLTZdXSxhW3MtMl0pLHIudXBkYXRlTGluayhbYVtzLTZdXSxhW3NdKTticmVhaztjYXNlIDExNTp0aGlzLiQ9YVtzLThdLHIudXBkYXRlTGlua0ludGVycG9sYXRlKGFbcy02XSxhW3MtMl0pLHIudXBkYXRlTGluayhhW3MtNl0sYVtzXSk7YnJlYWs7Y2FzZSAxMTY6dGhpcy4kPWFbcy02XSxyLnVwZGF0ZUxpbmtJbnRlcnBvbGF0ZShbYVtzLTRdXSxhW3NdKTticmVhaztjYXNlIDExNzp0aGlzLiQ9YVtzLTZdLHIudXBkYXRlTGlua0ludGVycG9sYXRlKGFbcy00XSxhW3NdKTticmVhaztjYXNlIDExODpjYXNlIDEyMDp0aGlzLiQ9W2Fbc11dO2JyZWFrO2Nhc2UgMTE5OmNhc2UgMTIxOmFbcy0yXS5wdXNoKGFbc10pLHRoaXMuJD1hW3MtMl07YnJlYWs7Y2FzZSAxMjM6dGhpcy4kPWFbcy0xXSthW3NdO2JyZWFrO2Nhc2UgMTQ1OnRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgMTQ2OnRoaXMuJD1hW3MtMV0rIiIrYVtzXTticmVhaztjYXNlIDE1MTp0aGlzLiQ9InYiO2JyZWFrO2Nhc2UgMTUyOnRoaXMuJD0iLSI7YnJlYWs7Y2FzZSAxNTM6dGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJUQiJ9O2JyZWFrO2Nhc2UgMTU0OnRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiQlQifTticmVhaztjYXNlIDE1NTp0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IlJMIn07YnJlYWs7Y2FzZSAxNTY6dGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJMUiJ9fX0sdGFibGU6W3szOjEsNDoyLDU6Myw2OjUsMTI6ZSwxNjo0LDIxOm4sMjI6ciwyNDppfSx7MTpbM119LHsxOlsyLDFdfSx7MzoxMCw0OjIsNTozLDY6NSwxMjplLDE2OjQsMjE6biwyMjpyLDI0Oml9LHQoYSxvLHsxNzoxMX0pLHs3OjEyLDEzOlsxLDEzXX0sezE2OjE0LDIxOm4sMjI6ciwyNDppfSx7MTY6MTUsMjE6biwyMjpyLDI0Oml9LHsyNTpbMSwxNl0sMjY6WzEsMTddfSx7MTM6WzIsNV19LHsxOlsyLDJdfSx7MTpbMiw5XSwxODoxOCwxOToxOSwyMDpzLDIxOmMsMjI6dSwyMzpsLDMyOjI0LDMzOjI1LDM0OjI2LDM1OjI3LDM2OjI4LDM3OjI5LDM4OmgsNDM6MzEsNDU6MzIsNDY6NDIsNDc6Ziw0OTo0Myw3NjpkLDc3OnAsNzg6eSw3OTpnLDgwOnYsODE6bSw5NTpiLDk2OngsOTk6XywxMDA6aywxMDE6dywxMDM6RSwxMDQ6VCwxMDg6NDQsMTEwOkMsMTExOlMsMTEyOkEsMTEzOk0sMTE0Ok8sMTE1OkIsMTE2Ok4sMTE3OkQsMTE4OkwsMTE5Okl9LHs4OjYwLDEwOlsxLDYxXSwxNTpSfSx0KFsxMCwxNV0sWzIsNl0pLHQoYSxbMiwxN10pLHQoYSxbMiwxOF0pLHQoYSxbMiwxOV0pLHsyMDpbMSw2NF0sMjE6WzEsNjVdLDIyOkYsMjc6NjMsMzA6NjZ9LHQoUCxbMiwxMV0pLHQoUCxbMiwxMl0pLHQoUCxbMiwxM10pLHQoUCxbMiwxNF0pLHQoUCxbMiwxNV0pLHQoUCxbMiwxNl0pLHs5OjY4LDIwOmosMjE6WSwyMzp6LDQ0OjY5LDY3OjczLDcwOlsxLDc0XSw3MTpbMSw3NV19LHs5Ojc2LDIwOmosMjE6WSwyMzp6fSx7OTo3NywyMDpqLDIxOlksMjM6en0sezk6NzgsMjA6aiwyMTpZLDIzOnp9LHs5Ojc5LDIwOmosMjE6WSwyMzp6fSx7OTo4MCwyMDpqLDIxOlksMjM6en0sezk6ODIsMjA6aiwyMTpZLDIyOlsxLDgxXSwyMzp6fSx0KFAsWzIsNDRdKSx0KFUsWzIsNTFdLHszMDo4MywyMjpGfSksezIyOlsxLDg0XX0sezIyOlsxLDg1XX0sezIyOlsxLDg2XX0sezIyOlsxLDg3XX0sezI2OiQsNDc6cSw3NDpbMSw5MV0sODE6Vyw4Nzo5MCw4ODpbMSw4OF0sOTA6WzEsODldLDk1OlYsOTY6SCw5OTpHLDEwMDpYLDEwMTpaLDEwMzpRLDEwNDpLLDEwNzo5NCwxMDk6OTIsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sdChQLFsyLDE1M10pLHQoUCxbMiwxNTRdKSx0KFAsWzIsMTU1XSksdChQLFsyLDE1Nl0pLHQoYXQsWzIsNTJdLHs0ODpbMSwxMTBdfSksdChvdCxbMiw2OV0sezEwODoxMjEsNDA6WzEsMTExXSw0NzpmLDUwOlsxLDExMl0sNTI6WzEsMTEzXSw1NDpbMSwxMTRdLDU2OlsxLDExNV0sNTg6WzEsMTE2XSw2MDpbMSwxMTddLDYyOlsxLDExOF0sNjM6WzEsMTE5XSw2NTpbMSwxMjBdLDgxOm0sOTU6Yiw5Njp4LDk5Ol8sMTAwOmssMTAxOncsMTAzOkUsMTA0OlQsMTE0Ok8sMTE1OkIsMTE2Ok4sMTE3OkQsMTE4OkwsMTE5Okl9KSx0KHN0LFsyLDE0NV0pLHQoc3QsWzIsMTcwXSksdChzdCxbMiwxNzFdKSx0KHN0LFsyLDE3Ml0pLHQoc3QsWzIsMTczXSksdChzdCxbMiwxNzRdKSx0KHN0LFsyLDE3NV0pLHQoc3QsWzIsMTc2XSksdChzdCxbMiwxNzddKSx0KHN0LFsyLDE3OF0pLHQoc3QsWzIsMTc5XSksdChzdCxbMiwxODBdKSx0KHN0LFsyLDE4MV0pLHQoc3QsWzIsMTgyXSksdChzdCxbMiwxODNdKSx0KHN0LFsyLDE4NF0pLHs5OjEyMiwyMDpqLDIxOlksMjM6en0sezExOjEyMywxNDpbMSwxMjRdfSx0KGN0LFsyLDhdKSx0KGEsWzIsMjBdKSx0KGEsWzIsMjZdKSx0KGEsWzIsMjddKSx7MjE6WzEsMTI1XX0sdCh1dCxbMiwzNF0sezMwOjEyNiwyMjpGfSksdChQLFsyLDM1XSksezQ1OjEyNyw0Njo0Miw0NzpmLDQ5OjQzLDgxOm0sOTU6Yiw5Njp4LDk5Ol8sMTAwOmssMTAxOncsMTAzOkUsMTA0OlQsMTA4OjQ0LDExNDpPLDExNTpCLDExNjpOLDExNzpELDExODpMLDExOTpJfSx0KGx0LFsyLDQ1XSksdChsdCxbMiw0Nl0pLHQobHQsWzIsNDddKSx0KGh0LFsyLDczXSx7Njg6MTI4LDY5OlsxLDEyOV0sNzI6WzEsMTMwXX0pLHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCwzOToxMzEsNDI6Z3QsNDc6cSw2Mjp2dCw3MDptdCw3MzoxMzIsNzQ6YnQsNzU6MTQzLDc2Onh0LDc3Ol90LDc4Omt0LDc5Ond0LDgwOkV0LDgxOlR0LDgyOkN0LDg0OjEzNCw4NTpTdCw5NTpWLDk2OkgsOTk6RywxMDA6WCwxMDE6QXQsMTAzOlEsMTA0OkssMTA1Ok10LDEwNjpPdCwxMDc6MTQwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHQoWzQ3LDY5LDcyLDgxLDk1LDk2LDk5LDEwMCwxMDEsMTAzLDEwNCwxMTQsMTE1LDExNiwxMTcsMTE4LDExOV0sWzIsNzVdKSx0KFAsWzIsMzZdKSx0KFAsWzIsMzddKSx0KFAsWzIsMzhdKSx0KFAsWzIsMzldKSx0KFAsWzIsNDBdKSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsMzk6MTU1LDQyOmd0LDQ3OnEsNjI6dnQsNzA6bXQsNzM6MTMyLDc0OmJ0LDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpFdCw4MTpUdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6Viw5NjpILDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpRLDEwNDpLLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx0KEJ0LG8sezE3OjE1Nn0pLHQoVSxbMiw1MF0sezQ3Ok50fSksezI2OiQsNDc6cSw4MTpXLDg3OjE1OCw5MjpbMSwxNTldLDk1OlYsOTY6SCw5OTpHLDEwMDpYLDEwMTpaLDEwMzpRLDEwNDpLLDEwNzo5NCwxMDk6OTIsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezg1OlsxLDE2MF0sOTM6MTYxLDk1OlsxLDE2Ml19LHsyNjokLDQ3OnEsODE6Vyw4NTpbMSwxNjNdLDg3OjE2NCw5NTpWLDk2OkgsOTk6RywxMDA6WCwxMDE6WiwxMDM6USwxMDQ6SywxMDc6OTQsMTA5OjkyLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHsyNjokLDQ3OnEsODE6Vyw4NzoxNjUsOTU6Viw5NjpILDk5OkcsMTAwOlgsMTAxOlosMTAzOlEsMTA0OkssMTA3Ojk0LDEwOTo5MiwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx0KGN0LFsyLDk2XSx7MjI6WzEsMTY2XSw4OTpbMSwxNjddfSksdChjdCxbMiwxMDBdLHsyMjpbMSwxNjhdfSksdChjdCxbMiwxMDRdLHsxMDc6OTQsMTA5OjE3MCwyMjpbMSwxNjldLDI2OiQsNDc6cSw4MTpXLDk1OlYsOTY6SCw5OTpHLDEwMDpYLDEwMTpaLDEwMzpRLDEwNDpLLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9KSx0KGN0LFsyLDEwNl0sezIyOlsxLDE3MV19KSx0KER0LFsyLDE0N10pLHQoRHQsWzIsMTQ5XSksdChEdCxbMiwxNTBdKSx0KER0LFsyLDE1MV0pLHQoRHQsWzIsMTUyXSksdChMdCxbMiwxNTddKSx0KEx0LFsyLDE1OF0pLHQoTHQsWzIsMTU5XSksdChMdCxbMiwxNjBdKSx0KEx0LFsyLDE2MV0pLHQoTHQsWzIsMTYyXSksdChMdCxbMiwxNjNdKSx0KEx0LFsyLDE2NF0pLHQoTHQsWzIsMTY1XSksdChMdCxbMiwxNjZdKSx0KEx0LFsyLDE2N10pLHQoTHQsWzIsMTY4XSksdChMdCxbMiwxNjldKSx7NDc6Ziw0OToxNzIsODE6bSw5NTpiLDk2OngsOTk6XywxMDA6aywxMDE6dywxMDM6RSwxMDQ6VCwxMDg6NDQsMTE0Ok8sMTE1OkIsMTE2Ok4sMTE3OkQsMTE4OkwsMTE5Okl9LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCwzOToxNzMsNDI6Z3QsNDc6cSw2Mjp2dCw3MDptdCw3MzoxMzIsNzQ6YnQsNzU6MTQzLDc2Onh0LDc3Ol90LDc4Omt0LDc5Ond0LDgwOkV0LDgxOlR0LDgyOkN0LDg0OjEzNCw4NTpTdCw5NTpWLDk2OkgsOTk6RywxMDA6WCwxMDE6QXQsMTAzOlEsMTA0OkssMTA1Ok10LDEwNjpPdCwxMDc6MTQwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCwzOToxNzUsNDI6Z3QsNDc6cSw1MDpbMSwxNzRdLDYyOnZ0LDcwOm10LDczOjEzMiw3NDpidCw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6RXQsODE6VHQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OlYsOTY6SCw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6USwxMDQ6SywxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDM5OjE3Niw0MjpndCw0NzpxLDYyOnZ0LDcwOm10LDczOjEzMiw3NDpidCw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6RXQsODE6VHQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OlYsOTY6SCw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6USwxMDQ6SywxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDM5OjE3Nyw0MjpndCw0NzpxLDYyOnZ0LDcwOm10LDczOjEzMiw3NDpidCw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6RXQsODE6VHQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OlYsOTY6SCw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6USwxMDQ6SywxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDM5OjE3OCw0MjpndCw0NzpxLDYyOnZ0LDcwOm10LDczOjEzMiw3NDpidCw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6RXQsODE6VHQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OlYsOTY6SCw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6USwxMDQ6SywxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDM5OjE3OSw0MjpndCw0NzpxLDYyOnZ0LDcwOm10LDczOjEzMiw3NDpidCw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6RXQsODE6VHQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OlYsOTY6SCw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6USwxMDQ6SywxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDM5OjE4MCw0MjpndCw0NzpxLDYwOlsxLDE4MV0sNjI6dnQsNzA6bXQsNzM6MTMyLDc0OmJ0LDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpFdCw4MTpUdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6Viw5NjpILDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpRLDEwNDpLLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsMzk6MTgyLDQyOmd0LDQ3OnEsNjI6dnQsNzA6bXQsNzM6MTMyLDc0OmJ0LDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpFdCw4MTpUdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6Viw5NjpILDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpRLDEwNDpLLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsMzk6MTgzLDQyOmd0LDQ3OnEsNjI6dnQsNzA6bXQsNzM6MTMyLDc0OmJ0LDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpFdCw4MTpUdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6Viw5NjpILDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpRLDEwNDpLLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsMzk6MTg0LDQyOmd0LDQ3OnEsNjI6dnQsNzA6bXQsNzM6MTMyLDc0OmJ0LDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpFdCw4MTpUdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6Viw5NjpILDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpRLDEwNDpLLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx0KHN0LFsyLDE0Nl0pLHQoSXQsWzIsM10pLHs4OjE4NSwxNTpSfSx7MTU6WzIsN119LHQoYSxbMiwyOF0pLHQodXQsWzIsMzNdKSx0KFUsWzIsNDhdLHszMDoxODYsMjI6Rn0pLHQoaHQsWzIsNzBdLHsyMjpbMSwxODddfSksezIyOlsxLDE4OF19LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCwzOToxODksNDI6Z3QsNDc6cSw2Mjp2dCw3MDptdCw3MzoxMzIsNzQ6YnQsNzU6MTQzLDc2Onh0LDc3Ol90LDc4Omt0LDc5Ond0LDgwOkV0LDgxOlR0LDgyOkN0LDg0OjEzNCw4NTpTdCw5NTpWLDk2OkgsOTk6RywxMDA6WCwxMDE6QXQsMTAzOlEsMTA0OkssMTA1Ok10LDEwNjpPdCwxMDc6MTQwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCw0MjpndCw0NzpxLDYyOnZ0LDcwOm10LDcxOlsxLDE5MF0sNzM6MTkxLDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpFdCw4MTpUdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6Viw5NjpILDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpRLDEwNDpLLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx0KEx0LFsyLDc3XSksdChMdCxbMiw3OV0pLHQoTHQsWzIsMTM1XSksdChMdCxbMiwxMzZdKSx0KEx0LFsyLDEzN10pLHQoTHQsWzIsMTM4XSksdChMdCxbMiwxMzldKSx0KEx0LFsyLDE0MF0pLHQoTHQsWzIsMTQxXSksdChMdCxbMiwxNDJdKSx0KEx0LFsyLDE0M10pLHQoTHQsWzIsMTQ0XSksdChMdCxbMiw4MF0pLHQoTHQsWzIsODFdKSx0KEx0LFsyLDgyXSksdChMdCxbMiw4M10pLHQoTHQsWzIsODRdKSx0KEx0LFsyLDg1XSksdChMdCxbMiw4Nl0pLHQoTHQsWzIsODddKSx0KEx0LFsyLDg4XSksdChMdCxbMiw4OV0pLHQoTHQsWzIsOTBdKSx7OToxOTMsMjA6aiwyMTpZLDIyOmZ0LDIzOnosMjQ6ZHQsMjY6cHQsMzg6eXQsNDA6WzEsMTkyXSw0MjpndCw0NzpxLDYyOnZ0LDcwOm10LDczOjE5MSw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6RXQsODE6VHQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OlYsOTY6SCw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6USwxMDQ6SywxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezE4OjE4LDE5OjE5LDIwOnMsMjE6YywyMjp1LDIzOmwsMzI6MjQsMzM6MjUsMzQ6MjYsMzU6MjcsMzY6MjgsMzc6MjksMzg6aCw0MjpbMSwxOTRdLDQzOjMxLDQ1OjMyLDQ2OjQyLDQ3OmYsNDk6NDMsNzY6ZCw3NzpwLDc4OnksNzk6Zyw4MDp2LDgxOm0sOTU6Yiw5Njp4LDk5Ol8sMTAwOmssMTAxOncsMTAzOkUsMTA0OlQsMTA4OjQ0LDExMDpDLDExMTpTLDExMjpBLDExMzpNLDExNDpPLDExNTpCLDExNjpOLDExNzpELDExODpMLDExOTpJfSx7MjI6RiwzMDoxOTV9LHsyMjpbMSwxOTZdLDI2OiQsNDc6cSw4MTpXLDk1OlYsOTY6SCw5OTpHLDEwMDpYLDEwMTpaLDEwMzpRLDEwNDpLLDEwNzo5NCwxMDk6MTcwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHsyMjpbMSwxOTddfSx7MjI6WzEsMTk4XX0sezIyOlsxLDE5OV0sOTY6WzEsMjAwXX0sdChSdCxbMiwxMThdKSx7MjI6WzEsMjAxXX0sezIyOlsxLDIwMl0sMjY6JCw0NzpxLDgxOlcsOTU6Viw5NjpILDk5OkcsMTAwOlgsMTAxOlosMTAzOlEsMTA0OkssMTA3Ojk0LDEwOToxNzAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezIyOlsxLDIwM10sMjY6JCw0NzpxLDgxOlcsOTU6Viw5NjpILDk5OkcsMTAwOlgsMTAxOlosMTAzOlEsMTA0OkssMTA3Ojk0LDEwOToxNzAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezc0OlsxLDIwNF19LHQoY3QsWzIsOThdLHsyMjpbMSwyMDVdfSksezc0OlsxLDIwNl0sOTE6WzEsMjA3XX0sezc0OlsxLDIwOF19LHQoRHQsWzIsMTQ4XSksezc0OlsxLDIwOV0sOTE6WzEsMjEwXX0sdChhdCxbMiw1NF0sezEwODoxMjEsNDc6Ziw4MTptLDk1OmIsOTY6eCw5OTpfLDEwMDprLDEwMTp3LDEwMzpFLDEwNDpULDExNDpPLDExNTpCLDExNjpOLDExNzpELDExODpMLDExOTpJfSksezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDQxOlsxLDIxMV0sNDI6Z3QsNDc6cSw2Mjp2dCw3MDptdCw3MzoxOTEsNzU6MTQzLDc2Onh0LDc3Ol90LDc4Omt0LDc5Ond0LDgwOkV0LDgxOlR0LDgyOkN0LDg0OjEzNCw4NTpTdCw5NTpWLDk2OkgsOTk6RywxMDA6WCwxMDE6QXQsMTAzOlEsMTA0OkssMTA1Ok10LDEwNjpPdCwxMDc6MTQwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCwzOToyMTIsNDI6Z3QsNDc6cSw2Mjp2dCw3MDptdCw3MzoxMzIsNzQ6YnQsNzU6MTQzLDc2Onh0LDc3Ol90LDc4Omt0LDc5Ond0LDgwOkV0LDgxOlR0LDgyOkN0LDg0OjEzNCw4NTpTdCw5NTpWLDk2OkgsOTk6RywxMDA6WCwxMDE6QXQsMTAzOlEsMTA0OkssMTA1Ok10LDEwNjpPdCwxMDc6MTQwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCw0MjpndCw0NzpxLDUxOlsxLDIxM10sNjI6dnQsNzA6bXQsNzM6MTkxLDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpFdCw4MTpUdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6Viw5NjpILDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpRLDEwNDpLLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsNDI6Z3QsNDc6cSw1MzpbMSwyMTRdLDYyOnZ0LDcwOm10LDczOjE5MSw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6RXQsODE6VHQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OlYsOTY6SCw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6USwxMDQ6SywxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDQyOmd0LDQ3OnEsNTU6WzEsMjE1XSw2Mjp2dCw3MDptdCw3MzoxOTEsNzU6MTQzLDc2Onh0LDc3Ol90LDc4Omt0LDc5Ond0LDgwOkV0LDgxOlR0LDgyOkN0LDg0OjEzNCw4NTpTdCw5NTpWLDk2OkgsOTk6RywxMDA6WCwxMDE6QXQsMTAzOlEsMTA0OkssMTA1Ok10LDEwNjpPdCwxMDc6MTQwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCw0MjpndCw0NzpxLDU3OlsxLDIxNl0sNjI6dnQsNzA6bXQsNzM6MTkxLDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpFdCw4MTpUdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6Viw5NjpILDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpRLDEwNDpLLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsNDI6Z3QsNDc6cSw1OTpbMSwyMTddLDYyOnZ0LDcwOm10LDczOjE5MSw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6RXQsODE6VHQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OlYsOTY6SCw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6USwxMDQ6SywxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDQyOmd0LDQ3OnEsNjE6WzEsMjE4XSw2Mjp2dCw3MDptdCw3MzoxOTEsNzU6MTQzLDc2Onh0LDc3Ol90LDc4Omt0LDc5Ond0LDgwOkV0LDgxOlR0LDgyOkN0LDg0OjEzNCw4NTpTdCw5NTpWLDk2OkgsOTk6RywxMDA6WCwxMDE6QXQsMTAzOlEsMTA0OkssMTA1Ok10LDEwNjpPdCwxMDc6MTQwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCwzOToyMTksNDI6Z3QsNDc6cSw2Mjp2dCw3MDptdCw3MzoxMzIsNzQ6YnQsNzU6MTQzLDc2Onh0LDc3Ol90LDc4Omt0LDc5Ond0LDgwOkV0LDgxOlR0LDgyOkN0LDg0OjEzNCw4NTpTdCw5NTpWLDk2OkgsOTk6RywxMDA6WCwxMDE6QXQsMTAzOlEsMTA0OkssMTA1Ok10LDEwNjpPdCwxMDc6MTQwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCw0MTpbMSwyMjBdLDQyOmd0LDQ3OnEsNjI6dnQsNzA6bXQsNzM6MTkxLDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpFdCw4MTpUdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6Viw5NjpILDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpRLDEwNDpLLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsNDI6Z3QsNDc6cSw2Mjp2dCw2NDpbMSwyMjFdLDY2OlsxLDIyMl0sNzA6bXQsNzM6MTkxLDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpFdCw4MTpUdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6Viw5NjpILDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpRLDEwNDpLLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsNDI6Z3QsNDc6cSw2Mjp2dCw2NDpbMSwyMjRdLDY2OlsxLDIyM10sNzA6bXQsNzM6MTkxLDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpFdCw4MTpUdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6Viw5NjpILDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpRLDEwNDpLLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx7OToyMjUsMjA6aiwyMTpZLDIzOnp9LHQoVSxbMiw0OV0sezQ3Ok50fSksdChodCxbMiw3Ml0pLHQoaHQsWzIsNzFdKSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsNDI6Z3QsNDc6cSw2Mjp2dCw3MDptdCw3MjpbMSwyMjZdLDczOjE5MSw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6RXQsODE6VHQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OlYsOTY6SCw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6USwxMDQ6SywxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sdChodCxbMiw3NF0pLHQoTHQsWzIsNzhdKSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsMzk6MjI3LDQyOmd0LDQ3OnEsNjI6dnQsNzA6bXQsNzM6MTMyLDc0OmJ0LDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpFdCw4MTpUdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6Viw5NjpILDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpRLDEwNDpLLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx0KEJ0LG8sezE3OjIyOH0pLHQoUCxbMiw0M10pLHs0NjoyMjksNDc6Ziw0OTo0Myw4MTptLDk1OmIsOTY6eCw5OTpfLDEwMDprLDEwMTp3LDEwMzpFLDEwNDpULDEwODo0NCwxMTQ6TywxMTU6QiwxMTY6TiwxMTc6RCwxMTg6TCwxMTk6SX0sezIyOkZ0LDc2OlB0LDg2OjIzMCw5MjpqdCw5NTpZdCw5NzoyMzEsOTg6MjMyLDk5Onp0LDEwMDpVdCwxMDE6JHQsMTAyOnF0LDEwMzpXdCwxMDQ6VnQsMTA1Okh0fSx7MjI6RnQsNzY6UHQsODY6MjQ0LDkyOmp0LDk1Oll0LDk3OjIzMSw5ODoyMzIsOTk6enQsMTAwOlV0LDEwMTokdCwxMDI6cXQsMTAzOld0LDEwNDpWdCwxMDU6SHR9LHsyMjpGdCw3NjpQdCw4NjoyNDUsOTI6anQsOTQ6WzEsMjQ2XSw5NTpZdCw5NzoyMzEsOTg6MjMyLDk5Onp0LDEwMDpVdCwxMDE6JHQsMTAyOnF0LDEwMzpXdCwxMDQ6VnQsMTA1Okh0fSx7MjI6RnQsNzY6UHQsODY6MjQ3LDkyOmp0LDk0OlsxLDI0OF0sOTU6WXQsOTc6MjMxLDk4OjIzMiw5OTp6dCwxMDA6VXQsMTAxOiR0LDEwMjpxdCwxMDM6V3QsMTA0OlZ0LDEwNTpIdH0sezk1OlsxLDI0OV19LHsyMjpGdCw3NjpQdCw4NjoyNTAsOTI6anQsOTU6WXQsOTc6MjMxLDk4OjIzMiw5OTp6dCwxMDA6VXQsMTAxOiR0LDEwMjpxdCwxMDM6V3QsMTA0OlZ0LDEwNTpIdH0sezIyOkZ0LDc2OlB0LDg2OjI1MSw5MjpqdCw5NTpZdCw5NzoyMzEsOTg6MjMyLDk5Onp0LDEwMDpVdCwxMDE6JHQsMTAyOnF0LDEwMzpXdCwxMDQ6VnQsMTA1Okh0fSx7MjY6JCw0NzpxLDgxOlcsODc6MjUyLDk1OlYsOTY6SCw5OTpHLDEwMDpYLDEwMTpaLDEwMzpRLDEwNDpLLDEwNzo5NCwxMDk6OTIsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sdChjdCxbMiw5N10pLHs3NDpbMSwyNTNdfSx0KGN0LFsyLDEwMV0sezIyOlsxLDI1NF19KSx0KGN0LFsyLDEwMl0pLHQoY3QsWzIsMTA1XSksdChjdCxbMiwxMDddLHsyMjpbMSwyNTVdfSksdChjdCxbMiwxMDhdKSx0KG90LFsyLDU1XSksezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDQyOmd0LDQ3OnEsNTE6WzEsMjU2XSw2Mjp2dCw3MDptdCw3MzoxOTEsNzU6MTQzLDc2Onh0LDc3Ol90LDc4Omt0LDc5Ond0LDgwOkV0LDgxOlR0LDgyOkN0LDg0OjEzNCw4NTpTdCw5NTpWLDk2OkgsOTk6RywxMDA6WCwxMDE6QXQsMTAzOlEsMTA0OkssMTA1Ok10LDEwNjpPdCwxMDc6MTQwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHQob3QsWzIsNjFdKSx0KG90LFsyLDU3XSksdChvdCxbMiw1OF0pLHQob3QsWzIsNTldKSx0KG90LFsyLDYwXSksdChvdCxbMiw2Ml0pLHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCw0MjpndCw0NzpxLDYxOlsxLDI1N10sNjI6dnQsNzA6bXQsNzM6MTkxLDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpFdCw4MTpUdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6Viw5NjpILDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpRLDEwNDpLLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx0KG90LFsyLDY0XSksdChvdCxbMiw2NV0pLHQob3QsWzIsNjddKSx0KG90LFsyLDY2XSksdChvdCxbMiw2OF0pLHQoSXQsWzIsNF0pLHQoWzIyLDQ3LDgxLDk1LDk2LDk5LDEwMCwxMDEsMTAzLDEwNCwxMTQsMTE1LDExNiwxMTcsMTE4LDExOV0sWzIsNzZdKSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsNDE6WzEsMjU4XSw0MjpndCw0NzpxLDYyOnZ0LDcwOm10LDczOjE5MSw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6RXQsODE6VHQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OlYsOTY6SCw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6USwxMDQ6SywxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezE4OjE4LDE5OjE5LDIwOnMsMjE6YywyMjp1LDIzOmwsMzI6MjQsMzM6MjUsMzQ6MjYsMzU6MjcsMzY6MjgsMzc6MjksMzg6aCw0MjpbMSwyNTldLDQzOjMxLDQ1OjMyLDQ2OjQyLDQ3OmYsNDk6NDMsNzY6ZCw3NzpwLDc4OnksNzk6Zyw4MDp2LDgxOm0sOTU6Yiw5Njp4LDk5Ol8sMTAwOmssMTAxOncsMTAzOkUsMTA0OlQsMTA4OjQ0LDExMDpDLDExMTpTLDExMjpBLDExMzpNLDExNDpPLDExNTpCLDExNjpOLDExNzpELDExODpMLDExOTpJfSx0KGF0LFsyLDUzXSksdChjdCxbMiwxMTBdLHs5NjpHdH0pLHQoWHQsWzIsMTIwXSx7OTg6MjYxLDIyOkZ0LDc2OlB0LDkyOmp0LDk1Oll0LDk5Onp0LDEwMDpVdCwxMDE6JHQsMTAyOnF0LDEwMzpXdCwxMDQ6VnQsMTA1Okh0fSksdChadCxbMiwxMjJdKSx0KFp0LFsyLDEyNF0pLHQoWnQsWzIsMTI1XSksdChadCxbMiwxMjZdKSx0KFp0LFsyLDEyN10pLHQoWnQsWzIsMTI4XSksdChadCxbMiwxMjldKSx0KFp0LFsyLDEzMF0pLHQoWnQsWzIsMTMxXSksdChadCxbMiwxMzJdKSx0KFp0LFsyLDEzM10pLHQoWnQsWzIsMTM0XSksdChjdCxbMiwxMTFdLHs5NjpHdH0pLHQoY3QsWzIsMTEyXSx7OTY6R3R9KSx7MjI6WzEsMjYyXX0sdChjdCxbMiwxMTNdLHs5NjpHdH0pLHsyMjpbMSwyNjNdfSx0KFJ0LFsyLDExOV0pLHQoY3QsWzIsOTNdLHs5NjpHdH0pLHQoY3QsWzIsOTRdLHs5NjpHdH0pLHQoY3QsWzIsOTVdLHsxMDc6OTQsMTA5OjE3MCwyNjokLDQ3OnEsODE6Vyw5NTpWLDk2OkgsOTk6RywxMDA6WCwxMDE6WiwxMDM6USwxMDQ6SywxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSksdChjdCxbMiw5OV0pLHs5MTpbMSwyNjRdfSx7OTE6WzEsMjY1XX0sezUxOlsxLDI2Nl19LHs2MTpbMSwyNjddfSx7OToyNjgsMjA6aiwyMTpZLDIzOnp9LHQoUCxbMiw0Ml0pLHsyMjpGdCw3NjpQdCw5MjpqdCw5NTpZdCw5NzoyNjksOTg6MjMyLDk5Onp0LDEwMDpVdCwxMDE6JHQsMTAyOnF0LDEwMzpXdCwxMDQ6VnQsMTA1Okh0fSx0KFp0LFsyLDEyM10pLHsyNjokLDQ3OnEsODE6Vyw4NzoyNzAsOTU6Viw5NjpILDk5OkcsMTAwOlgsMTAxOlosMTAzOlEsMTA0OkssMTA3Ojk0LDEwOTo5MiwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx7MjY6JCw0NzpxLDgxOlcsODc6MjcxLDk1OlYsOTY6SCw5OTpHLDEwMDpYLDEwMTpaLDEwMzpRLDEwNDpLLDEwNzo5NCwxMDk6OTIsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sdChjdCxbMiwxMDNdKSx0KGN0LFsyLDEwOV0pLHQob3QsWzIsNTZdKSx0KG90LFsyLDYzXSksdChCdCxvLHsxNzoyNzJ9KSx0KFh0LFsyLDEyMV0sezk4OjI2MSwyMjpGdCw3NjpQdCw5MjpqdCw5NTpZdCw5OTp6dCwxMDA6VXQsMTAxOiR0LDEwMjpxdCwxMDM6V3QsMTA0OlZ0LDEwNTpIdH0pLHQoY3QsWzIsMTE2XSx7MTA3Ojk0LDEwOToxNzAsMjI6WzEsMjczXSwyNjokLDQ3OnEsODE6Vyw5NTpWLDk2OkgsOTk6RywxMDA6WCwxMDE6WiwxMDM6USwxMDQ6SywxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSksdChjdCxbMiwxMTddLHsxMDc6OTQsMTA5OjE3MCwyMjpbMSwyNzRdLDI2OiQsNDc6cSw4MTpXLDk1OlYsOTY6SCw5OTpHLDEwMDpYLDEwMTpaLDEwMzpRLDEwNDpLLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9KSx7MTg6MTgsMTk6MTksMjA6cywyMTpjLDIyOnUsMjM6bCwzMjoyNCwzMzoyNSwzNDoyNiwzNToyNywzNjoyOCwzNzoyOSwzODpoLDQyOlsxLDI3NV0sNDM6MzEsNDU6MzIsNDY6NDIsNDc6Ziw0OTo0Myw3NjpkLDc3OnAsNzg6eSw3OTpnLDgwOnYsODE6bSw5NTpiLDk2OngsOTk6XywxMDA6aywxMDE6dywxMDM6RSwxMDQ6VCwxMDg6NDQsMTEwOkMsMTExOlMsMTEyOkEsMTEzOk0sMTE0Ok8sMTE1OkIsMTE2Ok4sMTE3OkQsMTE4OkwsMTE5Okl9LHsyMjpGdCw3NjpQdCw4NjoyNzYsOTI6anQsOTU6WXQsOTc6MjMxLDk4OjIzMiw5OTp6dCwxMDA6VXQsMTAxOiR0LDEwMjpxdCwxMDM6V3QsMTA0OlZ0LDEwNTpIdH0sezIyOkZ0LDc2OlB0LDg2OjI3Nyw5MjpqdCw5NTpZdCw5NzoyMzEsOTg6MjMyLDk5Onp0LDEwMDpVdCwxMDE6JHQsMTAyOnF0LDEwMzpXdCwxMDQ6VnQsMTA1Okh0fSx0KFAsWzIsNDFdKSx0KGN0LFsyLDExNF0sezk2Okd0fSksdChjdCxbMiwxMTVdLHs5NjpHdH0pXSxkZWZhdWx0QWN0aW9uczp7MjpbMiwxXSw5OlsyLDVdLDEwOlsyLDJdLDEyNDpbMiw3XX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsdT0wLGw9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlcikseT17eXk6e319O2Zvcih2YXIgZyBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGcpJiYoeS55eVtnXT10aGlzLnl5W2ddKTtwLnNldElucHV0KHQseS55eSkseS55eS5sZXhlcj1wLHkueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIHY9cC55eWxsb2M7YS5wdXNoKHYpO3ZhciBtPXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiBiKCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiB5Lnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPXkueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciB4LF8sayx3LEUsVCxDLFMsQSxNPXt9Ozspe2lmKGs9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2tdP3c9dGhpcy5kZWZhdWx0QWN0aW9uc1trXToobnVsbD09eCYmKHg9YigpKSx3PW9ba10mJm9ba11beF0pLHZvaWQgMD09PXd8fCF3Lmxlbmd0aHx8IXdbMF0pe3ZhciBPPSIiO2ZvcihUIGluIEE9W10sb1trXSl0aGlzLnRlcm1pbmFsc19bVF0mJlQ+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bVF0rIiciKTtPPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoeD09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoTyx7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1t4XXx8eCxsaW5lOnAueXlsaW5lbm8sbG9jOnYsZXhwZWN0ZWQ6QX0pfWlmKHdbMF1pbnN0YW5jZW9mIEFycmF5JiZ3Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIraysiLCB0b2tlbjogIit4KTtzd2l0Y2god1swXSl7Y2FzZSAxOm4ucHVzaCh4KSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKHdbMV0pLHg9bnVsbCxfPyh4PV8sXz1udWxsKToodT1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyx2PXAueXlsbG9jLGw+MCYmbC0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxtJiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oRT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyx1LGMseS55eSx3WzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIEU7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LEt0PXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm5leHQoKTtyZXR1cm4gdHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24odCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh0fHwwKSk+PTA/dGhpcy5jb25kaXRpb25TdGFja1t0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbih0KXt0aGlzLmJlZ2luKHQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7fSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIpe3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oIm9wZW5fZGlyZWN0aXZlIiksMTI7Y2FzZSAxOnJldHVybiB0aGlzLmJlZ2luKCJ0eXBlX2RpcmVjdGl2ZSIpLDEzO2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImFyZ19kaXJlY3RpdmUiKSwxMDtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksMTU7Y2FzZSA0OnJldHVybiAxNDtjYXNlIDU6Y2FzZSA2OmJyZWFrO2Nhc2UgNzp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDg6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgOTpyZXR1cm4iU1RSIjtjYXNlIDEwOnJldHVybiA3NjtjYXNlIDExOnJldHVybiA4NTtjYXNlIDEyOnJldHVybiA3NztjYXNlIDEzOnJldHVybiA5NDtjYXNlIDE0OnJldHVybiA3ODtjYXNlIDE1OnJldHVybiA3OTtjYXNlIDE2OnRoaXMuYmVnaW4oImhyZWYiKTticmVhaztjYXNlIDE3OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE4OnJldHVybiA5MDtjYXNlIDE5OnRoaXMuYmVnaW4oImNhbGxiYWNrbmFtZSIpO2JyZWFrO2Nhc2UgMjA6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjE6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImNhbGxiYWNrYXJncyIpO2JyZWFrO2Nhc2UgMjI6cmV0dXJuIDg4O2Nhc2UgMjM6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjQ6cmV0dXJuIDg5O2Nhc2UgMjU6dGhpcy5iZWdpbigiY2xpY2siKTticmVhaztjYXNlIDI2OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI3OnJldHVybiA4MDtjYXNlIDI4OmNhc2UgMjk6cmV0dXJuIHQubGV4LmZpcnN0R3JhcGgoKSYmdGhpcy5iZWdpbigiZGlyIiksMjQ7Y2FzZSAzMDpyZXR1cm4gMzg7Y2FzZSAzMTpyZXR1cm4gNDI7Y2FzZSAzMjpjYXNlIDMzOmNhc2UgMzQ6Y2FzZSAzNTpyZXR1cm4gOTE7Y2FzZSAzNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDI1O2Nhc2UgMzc6Y2FzZSAzODpjYXNlIDM5OmNhc2UgNDA6Y2FzZSA0MTpjYXNlIDQyOmNhc2UgNDM6Y2FzZSA0NDpjYXNlIDQ1OmNhc2UgNDY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwyNjtjYXNlIDQ3OnJldHVybiAxMTA7Y2FzZSA0ODpyZXR1cm4gMTExO2Nhc2UgNDk6cmV0dXJuIDExMjtjYXNlIDUwOnJldHVybiAxMTM7Y2FzZSA1MTpyZXR1cm4gOTU7Y2FzZSA1MjpyZXR1cm4gMTAzO2Nhc2UgNTM6cmV0dXJuIDQ4O2Nhc2UgNTQ6cmV0dXJuIDEwMDtjYXNlIDU1OnJldHVybiA0NztjYXNlIDU2OnJldHVybiAyMDtjYXNlIDU3OnJldHVybiA5NjtjYXNlIDU4OnJldHVybiAxMTg7Y2FzZSA1OTpjYXNlIDYwOmNhc2UgNjE6cmV0dXJuIDcxO2Nhc2UgNjI6Y2FzZSA2MzpjYXNlIDY0OnJldHVybiA3MDtjYXNlIDY1OnJldHVybiA1MjtjYXNlIDY2OnJldHVybiA1MztjYXNlIDY3OnJldHVybiA1NDtjYXNlIDY4OnJldHVybiA1NTtjYXNlIDY5OnJldHVybiA1NjtjYXNlIDcwOnJldHVybiA1NztjYXNlIDcxOnJldHVybiA1ODtjYXNlIDcyOnJldHVybiA1OTtjYXNlIDczOnJldHVybiAxMDE7Y2FzZSA3NDpyZXR1cm4gMTA0O2Nhc2UgNzU6cmV0dXJuIDExOTtjYXNlIDc2OnJldHVybiAxMTY7Y2FzZSA3NzpyZXR1cm4gMTA1O2Nhc2UgNzg6Y2FzZSA3OTpyZXR1cm4gMTE3O2Nhc2UgODA6cmV0dXJuIDEwNjtjYXNlIDgxOnJldHVybiA2MjtjYXNlIDgyOnJldHVybiA4MjtjYXNlIDgzOnJldHVybiJTRVAiO2Nhc2UgODQ6cmV0dXJuIDgxO2Nhc2UgODU6cmV0dXJuIDk5O2Nhc2UgODY6cmV0dXJuIDY0O2Nhc2UgODc6cmV0dXJuIDYzO2Nhc2UgODg6cmV0dXJuIDY2O2Nhc2UgODk6cmV0dXJuIDY1O2Nhc2UgOTA6cmV0dXJuIDExNDtjYXNlIDkxOnJldHVybiAxMTU7Y2FzZSA5MjpyZXR1cm4gNzI7Y2FzZSA5MzpyZXR1cm4gNTA7Y2FzZSA5NDpyZXR1cm4gNTE7Y2FzZSA5NTpyZXR1cm4gNDA7Y2FzZSA5NjpyZXR1cm4gNDE7Y2FzZSA5NzpyZXR1cm4gNjA7Y2FzZSA5ODpyZXR1cm4gNjE7Y2FzZSA5OTpyZXR1cm4gMTI1O2Nhc2UgMTAwOnJldHVybiAyMTtjYXNlIDEwMTpyZXR1cm4gMjI7Y2FzZSAxMDI6cmV0dXJuIDIzfX0scnVsZXM6Wy9eKD86JSVceykvLC9eKD86KCg/Oig/IVx9JSUpW146Ll0pKikpLywvXig/OjopLywvXig/Olx9JSUpLywvXig/OigoPzooPyFcfSUlKS58XG4pKikpLywvXig/OiUlKD8hXHspW15cbl0qKS8sL14oPzpbXlx9XSUlW15cbl0qKS8sL14oPzpbIl0pLywvXig/OlsiXSkvLC9eKD86W14iXSopLywvXig/OnN0eWxlXGIpLywvXig/OmRlZmF1bHRcYikvLC9eKD86bGlua1N0eWxlXGIpLywvXig/OmludGVycG9sYXRlXGIpLywvXig/OmNsYXNzRGVmXGIpLywvXig/OmNsYXNzXGIpLywvXig/OmhyZWZbXHNdK1siXSkvLC9eKD86WyJdKS8sL14oPzpbXiJdKikvLC9eKD86Y2FsbFtcc10rKS8sL14oPzpcKFtcc10qXCkpLywvXig/OlwoKS8sL14oPzpbXihdKikvLC9eKD86XCkpLywvXig/OlteKV0qKS8sL14oPzpjbGlja1tcc10rKS8sL14oPzpbXHNcbl0pLywvXig/OlteXHNcbl0qKS8sL14oPzpncmFwaFxiKS8sL14oPzpmbG93Y2hhcnRcYikvLC9eKD86c3ViZ3JhcGhcYikvLC9eKD86ZW5kXGJccyopLywvXig/Ol9zZWxmXGIpLywvXig/Ol9ibGFua1xiKS8sL14oPzpfcGFyZW50XGIpLywvXig/Ol90b3BcYikvLC9eKD86KFxyP1xuKSpccypcbikvLC9eKD86XHMqTFJcYikvLC9eKD86XHMqUkxcYikvLC9eKD86XHMqVEJcYikvLC9eKD86XHMqQlRcYikvLC9eKD86XHMqVERcYikvLC9eKD86XHMqQlJcYikvLC9eKD86XHMqPCkvLC9eKD86XHMqPikvLC9eKD86XHMqXF4pLywvXig/OlxzKnZcYikvLC9eKD86LipkaXJlY3Rpb25ccytUQlteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytMUlteXG5dKikvLC9eKD86WzAtOV0rKS8sL14oPzojKS8sL14oPzo6OjopLywvXig/OjopLywvXig/OiYpLywvXig/OjspLywvXig/OiwpLywvXig/OlwqKS8sL14oPzpccypbeG88XT8tLStbLXhvPl1ccyopLywvXig/OlxzKlt4bzxdPz09K1s9eG8+XVxzKikvLC9eKD86XHMqW3hvPF0/LT9cListW3hvPl0/XHMqKS8sL14oPzpccypbeG88XT8tLVxzKikvLC9eKD86XHMqW3hvPF0/PT1ccyopLywvXig/OlxzKlt4bzxdPy1cLlxzKikvLC9eKD86XCgtKS8sL14oPzotXCkpLywvXig/OlwoXFspLywvXig/OlxdXCkpLywvXig/OlxbXFspLywvXig/OlxdXF0pLywvXig/OlxbXCgpLywvXig/OlwpXF0pLywvXig/Oi0pLywvXig/OlwuKS8sL14oPzpbXF9dKS8sL14oPzpcKykvLC9eKD86JSkvLC9eKD86PSkvLC9eKD86PSkvLC9eKD86PCkvLC9eKD86PikvLC9eKD86XF4pLywvXig/OlxcXHwpLywvXig/OnZcYikvLC9eKD86W0EtWmEtel0rKS8sL14oPzpcXFxdKS8sL14oPzpcW1wvKS8sL14oPzpcL1xdKS8sL14oPzpcW1xcKS8sL14oPzpbISIjJCUmJyorLC0uYD9cXF8vXSkvLC9eKD86W1x1MDBBQVx1MDBCNVx1MDBCQVx1MDBDMC1cdTAwRDZcdTAwRDgtXHUwMEY2XXxbXHUwMEY4LVx1MDJDMVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUwMzcwLVx1MDM3NFx1MDM3Nlx1MDM3N118W1x1MDM3QS1cdTAzN0RcdTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzRjVdfFtcdTAzRjctXHUwNDgxXHUwNDhBLVx1MDUyN1x1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjEtXHUwNTg3XHUwNUQwLVx1MDVFQV18W1x1MDVGMC1cdTA1RjJcdTA2MjAtXHUwNjRBXHUwNjZFXHUwNjZGXHUwNjcxLVx1MDZEM1x1MDZENVx1MDZFNVx1MDZFNlx1MDZFRV18W1x1MDZFRlx1MDZGQS1cdTA2RkNcdTA2RkZcdTA3MTBcdTA3MTItXHUwNzJGXHUwNzRELVx1MDdBNVx1MDdCMVx1MDdDQS1cdTA3RUFdfFtcdTA3RjRcdTA3RjVcdTA3RkFcdTA4MDAtXHUwODE1XHUwODFBXHUwODI0XHUwODI4XHUwODQwLVx1MDg1OFx1MDhBMF18W1x1MDhBMi1cdTA4QUNcdTA5MDQtXHUwOTM5XHUwOTNEXHUwOTUwXHUwOTU4LVx1MDk2MVx1MDk3MS1cdTA5NzddfFtcdTA5NzktXHUwOTdGXHUwOTg1LVx1MDk4Q1x1MDk4Rlx1MDk5MFx1MDk5My1cdTA5QThcdTA5QUEtXHUwOUIwXHUwOUIyXXxbXHUwOUI2LVx1MDlCOVx1MDlCRFx1MDlDRVx1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTFcdTA5RjBcdTA5RjFcdTBBMDUtXHUwQTBBXXxbXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBBMzhcdTBBMzldfFtcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTcyLVx1MEE3NFx1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOF18W1x1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJEXHUwQUQwXHUwQUUwXHUwQUUxXHUwQjA1LVx1MEIwQ118W1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1MEIzRFx1MEI1Q118W1x1MEI1RFx1MEI1Ri1cdTBCNjFcdTBCNzFcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTldfFtcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJEMF18W1x1MEMwNS1cdTBDMENcdTBDMEUtXHUwQzEwXHUwQzEyLVx1MEMyOFx1MEMyQS1cdTBDMzNcdTBDMzUtXHUwQzM5XHUwQzNEXXxbXHUwQzU4XHUwQzU5XHUwQzYwXHUwQzYxXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBDOTBcdTBDOTItXHUwQ0E4XHUwQ0FBLVx1MENCM118W1x1MENCNS1cdTBDQjlcdTBDQkRcdTBDREVcdTBDRTBcdTBDRTFcdTBDRjFcdTBDRjJcdTBEMDUtXHUwRDBDXHUwRDBFLVx1MEQxMF18W1x1MEQxMi1cdTBEM0FcdTBEM0RcdTBENEVcdTBENjBcdTBENjFcdTBEN0EtXHUwRDdGXHUwRDg1LVx1MEQ5Nlx1MEQ5QS1cdTBEQjFdfFtcdTBEQjMtXHUwREJCXHUwREJEXHUwREMwLVx1MERDNlx1MEUwMS1cdTBFMzBcdTBFMzJcdTBFMzNcdTBFNDAtXHUwRTQ2XHUwRTgxXXxbXHUwRTgyXHUwRTg0XHUwRTg3XHUwRTg4XHUwRThBXHUwRThEXHUwRTk0LVx1MEU5N1x1MEU5OS1cdTBFOUZcdTBFQTEtXHUwRUEzXXxbXHUwRUE1XHUwRUE3XHUwRUFBXHUwRUFCXHUwRUFELVx1MEVCMFx1MEVCMlx1MEVCM1x1MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZdfFtcdTBFREMtXHUwRURGXHUwRjAwXHUwRjQwLVx1MEY0N1x1MEY0OS1cdTBGNkNcdTBGODgtXHUwRjhDXHUxMDAwLVx1MTAyQV18W1x1MTAzRlx1MTA1MC1cdTEwNTVcdTEwNUEtXHUxMDVEXHUxMDYxXHUxMDY1XHUxMDY2XHUxMDZFLVx1MTA3MFx1MTA3NS1cdTEwODFdfFtcdTEwOEVcdTEwQTAtXHUxMEM1XHUxMEM3XHUxMENEXHUxMEQwLVx1MTBGQVx1MTBGQy1cdTEyNDhcdTEyNEEtXHUxMjREXXxbXHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1QS1cdTEyNURcdTEyNjAtXHUxMjg4XHUxMjhBLVx1MTI4RFx1MTI5MC1cdTEyQjBdfFtcdTEyQjItXHUxMkI1XHUxMkI4LVx1MTJCRVx1MTJDMFx1MTJDMi1cdTEyQzVcdTEyQzgtXHUxMkQ2XHUxMkQ4LVx1MTMxMF18W1x1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVBXHUxMzgwLVx1MTM4Rlx1MTNBMC1cdTEzRjRcdTE0MDEtXHUxNjZDXXxbXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFcdTE2QTAtXHUxNkVBXHUxNzAwLVx1MTcwQ1x1MTcwRS1cdTE3MTFdfFtcdTE3MjAtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3NkNcdTE3NkUtXHUxNzcwXHUxNzgwLVx1MTdCM1x1MTdEN118W1x1MTdEQ1x1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOEE4XHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUNdfFtcdTE5NTAtXHUxOTZEXHUxOTcwLVx1MTk3NFx1MTk4MC1cdTE5QUJcdTE5QzEtXHUxOUM3XHUxQTAwLVx1MUExNl18W1x1MUEyMC1cdTFBNTRcdTFBQTdcdTFCMDUtXHUxQjMzXHUxQjQ1LVx1MUI0Qlx1MUI4My1cdTFCQTBcdTFCQUVcdTFCQUZdfFtcdTFCQkEtXHUxQkU1XHUxQzAwLVx1MUMyM1x1MUM0RC1cdTFDNEZcdTFDNUEtXHUxQzdEXHUxQ0U5LVx1MUNFQ118W1x1MUNFRS1cdTFDRjFcdTFDRjVcdTFDRjZcdTFEMDAtXHUxREJGXHUxRTAwLVx1MUYxNVx1MUYxOC1cdTFGMURdfFtcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1cdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXXxbXHUxRjgwLVx1MUZCNFx1MUZCNi1cdTFGQkNcdTFGQkVcdTFGQzItXHUxRkM0XHUxRkM2LVx1MUZDQ1x1MUZEMC1cdTFGRDNdfFtcdTFGRDYtXHUxRkRCXHUxRkUwLVx1MUZFQ1x1MUZGMi1cdTFGRjRcdTFGRjYtXHUxRkZDXHUyMDcxXHUyMDdGXXxbXHUyMDkwLVx1MjA5Q1x1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XXxbXHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE4M1x1MjE4NF18W1x1MkMwMC1cdTJDMkVcdTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1MkNFQi1cdTJDRUVcdTJDRjJcdTJDRjNdfFtcdTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ4MC1cdTJEOTZcdTJEQTAtXHUyREE2XXxbXHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0VdfFtcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MkUyRlx1MzAwNVx1MzAwNlx1MzAzMS1cdTMwMzVcdTMwM0JcdTMwM0NdfFtcdTMwNDEtXHUzMDk2XHUzMDlELVx1MzA5Rlx1MzBBMS1cdTMwRkFcdTMwRkMtXHUzMEZGXHUzMTA1LVx1MzEyRF18W1x1MzEzMS1cdTMxOEVcdTMxQTAtXHUzMUJBXHUzMUYwLVx1MzFGRlx1MzQwMC1cdTREQjVcdTRFMDAtXHU5RkNDXXxbXHVBMDAwLVx1QTQ4Q1x1QTREMC1cdUE0RkRcdUE1MDAtXHVBNjBDXHVBNjEwLVx1QTYxRlx1QTYyQVx1QTYyQl18W1x1QTY0MC1cdUE2NkVcdUE2N0YtXHVBNjk3XHVBNkEwLVx1QTZFNVx1QTcxNy1cdUE3MUZcdUE3MjItXHVBNzg4XXxbXHVBNzhCLVx1QTc4RVx1QTc5MC1cdUE3OTNcdUE3QTAtXHVBN0FBXHVBN0Y4LVx1QTgwMVx1QTgwMy1cdUE4MDVdfFtcdUE4MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTg0MC1cdUE4NzNcdUE4ODItXHVBOEIzXHVBOEYyLVx1QThGN1x1QThGQl18W1x1QTkwQS1cdUE5MjVcdUE5MzAtXHVBOTQ2XHVBOTYwLVx1QTk3Q1x1QTk4NC1cdUE5QjJcdUE5Q0ZcdUFBMDAtXHVBQTI4XXxbXHVBQTQwLVx1QUE0Mlx1QUE0NC1cdUFBNEJcdUFBNjAtXHVBQTc2XHVBQTdBXHVBQTgwLVx1QUFBRlx1QUFCMVx1QUFCNV18W1x1QUFCNlx1QUFCOS1cdUFBQkRcdUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFQVx1QUFGMi1cdUFBRjRdfFtcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIyRV18W1x1QUJDMC1cdUFCRTJcdUFDMDAtXHVEN0EzXHVEN0IwLVx1RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVGQTZEXXxbXHVGQTcwLVx1RkFEOVx1RkIwMC1cdUZCMDZcdUZCMTMtXHVGQjE3XHVGQjFEXHVGQjFGLVx1RkIyOFx1RkIyQS1cdUZCMzZdfFtcdUZCMzgtXHVGQjNDXHVGQjNFXHVGQjQwXHVGQjQxXHVGQjQzXHVGQjQ0XHVGQjQ2LVx1RkJCMVx1RkJEMy1cdUZEM0RdfFtcdUZENTAtXHVGRDhGXHVGRDkyLVx1RkRDN1x1RkRGMC1cdUZERkJcdUZFNzAtXHVGRTc0XHVGRTc2LVx1RkVGQ118W1x1RkYyMS1cdUZGM0FcdUZGNDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1RkZDMi1cdUZGQzdcdUZGQ0EtXHVGRkNGXXxbXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdKS8sL14oPzpcfCkvLC9eKD86XCgpLywvXig/OlwpKS8sL14oPzpcWykvLC9eKD86XF0pLywvXig/Olx7KS8sL14oPzpcfSkvLC9eKD86IikvLC9eKD86KFxyP1xuKSspLywvXig/OlxzKS8sL14oPzokKS9dLGNvbmRpdGlvbnM6e2Nsb3NlX2RpcmVjdGl2ZTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0XSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbMiwzXSxpbmNsdXNpdmU6ITF9LG9wZW5fZGlyZWN0aXZlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSxjYWxsYmFja2FyZ3M6e3J1bGVzOlsyMywyNF0saW5jbHVzaXZlOiExfSxjYWxsYmFja25hbWU6e3J1bGVzOlsyMCwyMSwyMl0saW5jbHVzaXZlOiExfSxocmVmOntydWxlczpbMTcsMThdLGluY2x1c2l2ZTohMX0sY2xpY2s6e3J1bGVzOlsyNiwyN10saW5jbHVzaXZlOiExfSx2ZXJ0ZXg6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sZGlyOntydWxlczpbMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDZdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbOCw5XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDUsNiw3LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE5LDI1LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2LDk3LDk4LDk5LDEwMCwxMDEsMTAyXSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24gSnQoKXt0aGlzLnl5PXt9fXJldHVybiBRdC5sZXhlcj1LdCxKdC5wcm90b3R5cGU9UXQsUXQuUGFyc2VyPUp0LG5ldyBKdH0oKTtlLnBhcnNlcj1pLGUuUGFyc2VyPWkuUGFyc2VyLGUucGFyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gaS5wYXJzZS5hcHBseShpLGFyZ3VtZW50cyl9LGUubWFpbj1mdW5jdGlvbihyKXtyWzFdfHwoY29uc29sZS5sb2coIlVzYWdlOiAiK3JbMF0rIiBGSUxFIiksdC5leGl0KDEpKTt2YXIgaT1uKDE3KS5yZWFkRmlsZVN5bmMobigxOCkubm9ybWFsaXplKHJbMV0pLCJ1dGY4Iik7cmV0dXJuIGUucGFyc2VyLnBhcnNlKGkpfSxuLmNbbi5zXT09PXImJmUubWFpbih0LmFyZ3Yuc2xpY2UoMSkpfSkuY2FsbCh0aGlzLG4oMTEpLG4oNikodCkpfSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKHQscil7dmFyIGk9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVsxLDJdLG49WzEsNV0scj1bNiw5LDExLDE3LDE4LDE5LDIxXSxpPVsxLDE1XSxhPVsxLDE2XSxvPVsxLDE3XSxzPVsxLDIxXSxjPVs0LDYsOSwxMSwxNywxOCwxOSwyMV0sdT17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsam91cm5leTo0LGRvY3VtZW50OjUsRU9GOjYsZGlyZWN0aXZlOjcsbGluZTo4LFNQQUNFOjksc3RhdGVtZW50OjEwLE5FV0xJTkU6MTEsb3BlbkRpcmVjdGl2ZToxMix0eXBlRGlyZWN0aXZlOjEzLGNsb3NlRGlyZWN0aXZlOjE0LCI6IjoxNSxhcmdEaXJlY3RpdmU6MTYsdGl0bGU6MTcsc2VjdGlvbjoxOCx0YXNrTmFtZToxOSx0YXNrRGF0YToyMCxvcGVuX2RpcmVjdGl2ZToyMSx0eXBlX2RpcmVjdGl2ZToyMixhcmdfZGlyZWN0aXZlOjIzLGNsb3NlX2RpcmVjdGl2ZToyNCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiam91cm5leSIsNjoiRU9GIiw5OiJTUEFDRSIsMTE6Ik5FV0xJTkUiLDE1OiI6IiwxNzoidGl0bGUiLDE4OiJzZWN0aW9uIiwxOToidGFza05hbWUiLDIwOiJ0YXNrRGF0YSIsMjE6Im9wZW5fZGlyZWN0aXZlIiwyMjoidHlwZV9kaXJlY3RpdmUiLDIzOiJhcmdfZGlyZWN0aXZlIiwyNDoiY2xvc2VfZGlyZWN0aXZlIn0scHJvZHVjdGlvbnNfOlswLFszLDNdLFszLDJdLFs1LDBdLFs1LDJdLFs4LDJdLFs4LDFdLFs4LDFdLFs4LDFdLFs3LDRdLFs3LDZdLFsxMCwxXSxbMTAsMV0sWzEwLDJdLFsxMCwxXSxbMTIsMV0sWzEzLDFdLFsxNiwxXSxbMTQsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM9YS5sZW5ndGgtMTtzd2l0Y2goaSl7Y2FzZSAxOnJldHVybiBhW3MtMV07Y2FzZSAzOnRoaXMuJD1bXTticmVhaztjYXNlIDQ6YVtzLTFdLnB1c2goYVtzXSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDU6Y2FzZSA2OnRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgNzpjYXNlIDg6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMTE6ci5zZXRUaXRsZShhW3NdLnN1YnN0cig2KSksdGhpcy4kPWFbc10uc3Vic3RyKDYpO2JyZWFrO2Nhc2UgMTI6ci5hZGRTZWN0aW9uKGFbc10uc3Vic3RyKDgpKSx0aGlzLiQ9YVtzXS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAxMzpyLmFkZFRhc2soYVtzLTFdLGFbc10pLHRoaXMuJD0idGFzayI7YnJlYWs7Y2FzZSAxNTpyLnBhcnNlRGlyZWN0aXZlKCIlJXsiLCJvcGVuX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMTY6ci5wYXJzZURpcmVjdGl2ZShhW3NdLCJ0eXBlX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMTc6YVtzXT1hW3NdLnRyaW0oKS5yZXBsYWNlKC8nL2csJyInKSxyLnBhcnNlRGlyZWN0aXZlKGFbc10sImFyZ19kaXJlY3RpdmUiKTticmVhaztjYXNlIDE4OnIucGFyc2VEaXJlY3RpdmUoIn0lJSIsImNsb3NlX2RpcmVjdGl2ZSIsImpvdXJuZXkiKX19LHRhYmxlOlt7MzoxLDQ6ZSw3OjMsMTI6NCwyMTpufSx7MTpbM119LHQocixbMiwzXSx7NTo2fSksezM6Nyw0OmUsNzozLDEyOjQsMjE6bn0sezEzOjgsMjI6WzEsOV19LHsyMjpbMiwxNV19LHs2OlsxLDEwXSw3OjE4LDg6MTEsOTpbMSwxMl0sMTA6MTMsMTE6WzEsMTRdLDEyOjQsMTc6aSwxODphLDE5Om8sMjE6bn0sezE6WzIsMl19LHsxNDoxOSwxNTpbMSwyMF0sMjQ6c30sdChbMTUsMjRdLFsyLDE2XSksdChyLFsyLDhdLHsxOlsyLDFdfSksdChyLFsyLDRdKSx7NzoxOCwxMDoyMiwxMjo0LDE3OmksMTg6YSwxOTpvLDIxOm59LHQocixbMiw2XSksdChyLFsyLDddKSx0KHIsWzIsMTFdKSx0KHIsWzIsMTJdKSx7MjA6WzEsMjNdfSx0KHIsWzIsMTRdKSx7MTE6WzEsMjRdfSx7MTY6MjUsMjM6WzEsMjZdfSx7MTE6WzIsMThdfSx0KHIsWzIsNV0pLHQocixbMiwxM10pLHQoYyxbMiw5XSksezE0OjI3LDI0OnN9LHsyNDpbMiwxN119LHsxMTpbMSwyOF19LHQoYyxbMiwxMF0pXSxkZWZhdWx0QWN0aW9uczp7NTpbMiwxNV0sNzpbMiwyXSwyMTpbMiwxOF0sMjY6WzIsMTddfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIWUucmVjb3ZlcmFibGUpe3ZhciBuPW5ldyBFcnJvcih0KTt0aHJvdyBuLmhhc2g9ZSxufXRoaXMudHJhY2UodCl9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bMF0scj1bXSxpPVtudWxsXSxhPVtdLG89dGhpcy50YWJsZSxzPSIiLGM9MCx1PTAsbD0wLGg9MixmPTEsZD1hLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHA9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSx5PXt5eTp7fX07Zm9yKHZhciBnIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksZykmJih5Lnl5W2ddPXRoaXMueXlbZ10pO3Auc2V0SW5wdXQodCx5Lnl5KSx5Lnl5LmxleGVyPXAseS55eS5wYXJzZXI9dGhpcyx2b2lkIDA9PT1wLnl5bGxvYyYmKHAueXlsbG9jPXt9KTt2YXIgdj1wLnl5bGxvYzthLnB1c2godik7dmFyIG09cC5vcHRpb25zJiZwLm9wdGlvbnMucmFuZ2VzO2Z1bmN0aW9uIGIoKXt2YXIgdDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mKHQ9ci5wb3AoKXx8cC5sZXgoKXx8ZikmJih0IGluc3RhbmNlb2YgQXJyYXkmJih0PShyPXQpLnBvcCgpKSx0PWUuc3ltYm9sc19bdF18fHQpLHR9ImZ1bmN0aW9uIj09dHlwZW9mIHkueXkucGFyc2VFcnJvcj90aGlzLnBhcnNlRXJyb3I9eS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmb3IodmFyIHgsXyxrLHcsRSxULEMsUyxBLE09e307Oyl7aWYoaz1uW24ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNba10/dz10aGlzLmRlZmF1bHRBY3Rpb25zW2tdOihudWxsPT14JiYoeD1iKCkpLHc9b1trXSYmb1trXVt4XSksdm9pZCAwPT09d3x8IXcubGVuZ3RofHwhd1swXSl7dmFyIE89IiI7Zm9yKFQgaW4gQT1bXSxvW2tdKXRoaXMudGVybWluYWxzX1tUXSYmVD5oJiZBLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tUXSsiJyIpO089cC5zaG93UG9zaXRpb24/IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOlxuIitwLnNob3dQb3NpdGlvbigpKyJcbkV4cGVjdGluZyAiK0Euam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciOiJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjogVW5leHBlY3RlZCAiKyh4PT1mPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyIpLHRoaXMucGFyc2VFcnJvcihPLHt0ZXh0OnAubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3hdfHx4LGxpbmU6cC55eWxpbmVubyxsb2M6dixleHBlY3RlZDpBfSl9aWYod1swXWluc3RhbmNlb2YgQXJyYXkmJncubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitrKyIsIHRva2VuOiAiK3gpO3N3aXRjaCh3WzBdKXtjYXNlIDE6bi5wdXNoKHgpLGkucHVzaChwLnl5dGV4dCksYS5wdXNoKHAueXlsbG9jKSxuLnB1c2god1sxXSkseD1udWxsLF8/KHg9XyxfPW51bGwpOih1PXAueXlsZW5nLHM9cC55eXRleHQsYz1wLnl5bGluZW5vLHY9cC55eWxsb2MsbD4wJiZsLS0pO2JyZWFrO2Nhc2UgMjppZihDPXRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzFdLE0uJD1pW2kubGVuZ3RoLUNdLE0uXyQ9e2ZpcnN0X2xpbmU6YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmFbYS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmFbYS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LG0mJihNLl8kLnJhbmdlPVthW2EubGVuZ3RoLShDfHwxKV0ucmFuZ2VbMF0sYVthLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHZvaWQgMCE9PShFPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShNLFtzLHUsYyx5Lnl5LHdbMV0saSxhXS5jb25jYXQoZCkpKSlyZXR1cm4gRTtDJiYobj1uLnNsaWNlKDAsLTEqQyoyKSxpPWkuc2xpY2UoMCwtMSpDKSxhPWEuc2xpY2UoMCwtMSpDKSksbi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzBdKSxpLnB1c2goTS4kKSxhLnB1c2goTS5fJCksUz1vW25bbi5sZW5ndGgtMl1dW25bbi5sZW5ndGgtMV1dLG4ucHVzaChTKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sbD17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLnl5LnBhcnNlcil0aHJvdyBuZXcgRXJyb3IodCk7dGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih0LGUpfSxzZXRJbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnl5PWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW5wdXRbMF07cmV0dXJuIHRoaXMueXl0ZXh0Kz10LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz10LHRoaXMubWF0Y2hlZCs9dCx0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksdH0sdW5wdXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsbj10LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9dCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZSksdGhpcy5vZmZzZXQtPWU7dmFyIHI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPW4ubGVuZ3RoLTEpO3ZhciBpPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpuPyhuLmxlbmd0aD09PXIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStyW3IubGVuZ3RoLW4ubGVuZ3RoXS5sZW5ndGgtblswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1baVswXSxpWzBdK3RoaXMueXlsZW5nLWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyPyh0aGlzLl9iYWNrdHJhY2s9ITAsdGhpcyk6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGVzczpmdW5jdGlvbih0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSt0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaDtyZXR1cm4gdC5sZW5ndGg8MjAmJih0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC10Lmxlbmd0aCkpLCh0LnN1YnN0cigwLDIwKSsodC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXN0SW5wdXQoKSxlPW5ldyBBcnJheSh0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHQrdGhpcy51cGNvbWluZ0lucHV0KCkrIlxuIitlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihpLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLChyPXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpKSYmKHRoaXMueXlsaW5lbm8rPXIubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46cj9yW3IubGVuZ3RoLTFdLmxlbmd0aC1yW3IubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz10WzBdLHRoaXMubWF0Y2grPXRbMF0sdGhpcy5tYXRjaGVzPXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UodFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9dFswXSxuPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksbilyZXR1cm4gbjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgYSBpbiBpKXRoaXNbYV09aVthXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dmFyIHQsZSxuLHI7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApLHRoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGk9dGhpcy5fY3VycmVudFJ1bGVzKCksYT0wO2E8aS5sZW5ndGg7YSsrKWlmKChuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbaVthXV0pKSYmKCFlfHxuWzBdLmxlbmd0aD5lWzBdLmxlbmd0aCkpe2lmKGU9bixyPWEsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoITEhPT0odD10aGlzLnRlc3RfbWF0Y2gobixpW2FdKSkpcmV0dXJuIHQ7aWYodGhpcy5fYmFja3RyYWNrKXtlPSExO2NvbnRpbnVlfXJldHVybiExfWlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZT8hMSE9PSh0PXRoaXMudGVzdF9tYXRjaChlLGlbcl0pKSYmdDoiIj09PXRoaXMuX2lucHV0P3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gVW5yZWNvZ25pemVkIHRleHQuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5uZXh0KCk7cmV0dXJuIHR8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLDIxO2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSwyMjtjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMTU7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDI0O2Nhc2UgNDpyZXR1cm4gMjM7Y2FzZSA1OmNhc2UgNjpicmVhaztjYXNlIDc6cmV0dXJuIDExO2Nhc2UgODpjYXNlIDk6YnJlYWs7Y2FzZSAxMDpyZXR1cm4gNDtjYXNlIDExOnJldHVybiAxNztjYXNlIDEyOnJldHVybiAxODtjYXNlIDEzOnJldHVybiAxOTtjYXNlIDE0OnJldHVybiAyMDtjYXNlIDE1OnJldHVybiAxNTtjYXNlIDE2OnJldHVybiA2O2Nhc2UgMTc6cmV0dXJuIklOVkFMSUQifX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS9pLC9eKD86OikvaSwvXig/Olx9JSUpL2ksL14oPzooKD86KD8hXH0lJSkufFxuKSopKS9pLC9eKD86JSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5dKykvaSwvXig/OlxzKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzpqb3VybmV5XGIpL2ksL14oPzp0aXRsZVxzW14jXG47XSspL2ksL14oPzpzZWN0aW9uXHNbXiM6XG47XSspL2ksL14oPzpbXiM6XG47XSspL2ksL14oPzo6W14jXG47XSspL2ksL14oPzo6KS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e29wZW5fZGlyZWN0aXZlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSx0eXBlX2RpcmVjdGl2ZTp7cnVsZXM6WzIsM10saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxN10saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIGgoKXt0aGlzLnl5PXt9fXJldHVybiB1LmxleGVyPWwsaC5wcm90b3R5cGU9dSx1LlBhcnNlcj1oLG5ldyBofSgpO2UucGFyc2VyPWksZS5QYXJzZXI9aS5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiBpLnBhcnNlLmFwcGx5KGksYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHIpe3JbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrclswXSsiIEZJTEUiKSx0LmV4aXQoMSkpO3ZhciBpPW4oMTcpLnJlYWRGaWxlU3luYyhuKDE4KS5ub3JtYWxpemUoclsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2UoaSl9LG4uY1tuLnNdPT09ciYmZS5tYWluKHQuYXJndi5zbGljZSgxKSl9KS5jYWxsKHRoaXMsbigxMSksbig2KSh0KSl9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTApLGk9bigxNik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuZGVmYXVsdC5sYW5nLnJvdW5kKGkuZGVmYXVsdC5wYXJzZSh0KVtlXSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMTMpLGk9big4MyksYT1uKDI1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGEodCk/cih0KTppKHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByO2lmKCFyKXRyeXtyPW4oMCl9Y2F0Y2godCl7fXJ8fChyPXdpbmRvdy5kMyksdC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTApLGk9bigxNik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSxuKXt2YXIgYT1pLmRlZmF1bHQucGFyc2UodCksbz1hW2VdLHM9ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXBbZV0obytuKTtyZXR1cm4gbyE9PXMmJihhW2VdPXMpLGkuZGVmYXVsdC5zdHJpbmdpZnkoYSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMTEpLGk9bigyMTcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPWkodCxlKTtyZXR1cm4gcihuKT9uOnZvaWQgMH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM5KSxpPW4oMjEzKSxhPW4oMjE0KSxvPXI/ci50b1N0cmluZ1RhZzp2b2lkIDA7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3ZvaWQgMD09PXQ/IltvYmplY3QgVW5kZWZpbmVkXSI6IltvYmplY3QgTnVsbF0iOm8mJm8gaW4gT2JqZWN0KHQpP2kodCk6YSh0KX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0fX0sZnVuY3Rpb24odCl7dC5leHBvcnRzPUpTT04ucGFyc2UoJ3sibmFtZSI6Im1lcm1haWQiLCJ2ZXJzaW9uIjoiOC4xMC4yIiwiZGVzY3JpcHRpb24iOiJNYXJrZG93bmlzaCBzeW50YXggZm9yIGdlbmVyYXRpbmcgZmxvd2NoYXJ0cywgc2VxdWVuY2UgZGlhZ3JhbXMsIGNsYXNzIGRpYWdyYW1zLCBnYW50dCBjaGFydHMgYW5kIGdpdCBncmFwaHMuIiwibWFpbiI6ImRpc3QvbWVybWFpZC5jb3JlLmpzIiwia2V5d29yZHMiOlsiZGlhZ3JhbSIsIm1hcmtkb3duIiwiZmxvd2NoYXJ0Iiwic2VxdWVuY2UgZGlhZ3JhbSIsImdhbnR0IiwiY2xhc3MgZGlhZ3JhbSIsImdpdCBncmFwaCJdLCJzY3JpcHRzIjp7ImJ1aWxkOmRldmVsb3BtZW50Ijoid2VicGFjayAtLXByb2dyZXNzIC0tY29sb3JzIiwiYnVpbGQ6cHJvZHVjdGlvbiI6Inlhcm4gYnVpbGQ6ZGV2ZWxvcG1lbnQgLXAgLS1jb25maWcgd2VicGFjay5jb25maWcucHJvZC5iYWJlbC5qcyIsImJ1aWxkIjoieWFybiBidWlsZDpkZXZlbG9wbWVudCAmJiB5YXJuIGJ1aWxkOnByb2R1Y3Rpb24iLCJwb3N0YnVpbGQiOiJkb2N1bWVudGF0aW9uIGJ1aWxkIHNyYy9tZXJtYWlkQVBJLmpzIHNyYy9jb25maWcuanMgc3JjL2RlZmF1bHRDb25maWcuanMgLS1zaGFsbG93IC1mIG1kIC0tbWFya2Rvd24tdG9jIGZhbHNlID4gZG9jcy9TZXR1cC5tZCIsImJ1aWxkOndhdGNoIjoieWFybiBidWlsZCAtLXdhdGNoIiwibWluaWZ5IjoibWluaWZ5IC4vZGlzdC9tZXJtYWlkLmpzID4gLi9kaXN0L21lcm1haWQubWluLmpzIiwicmVsZWFzZSI6Inlhcm4gYnVpbGQiLCJsaW50IjoiZXNsaW50IHNyYyIsImUyZTpkZXByIjoieWFybiBsaW50ICYmIGplc3QgZTJlIC0tY29uZmlnIGUyZS9qZXN0LmNvbmZpZy5qcyIsImN5cHJlc3MiOiJwZXJjeSBleGVjIC0tIGN5cHJlc3MgcnVuIiwiZTJlIjoic3RhcnQtc2VydmVyLWFuZC10ZXN0IGRldiBodHRwOi8vbG9jYWxob3N0OjkwMDAvIGN5cHJlc3MiLCJlMmUtdXBkIjoieWFybiBsaW50ICYmIGplc3QgZTJlIC11IC0tY29uZmlnIGUyZS9qZXN0LmNvbmZpZy5qcyIsImRldiI6IndlYnBhY2stZGV2LXNlcnZlciAtLWNvbmZpZyB3ZWJwYWNrLmNvbmZpZy5lMmUuanMiLCJ0ZXN0IjoieWFybiBsaW50ICYmIGplc3Qgc3JjLy4qIiwidGVzdDp3YXRjaCI6Implc3QgLS13YXRjaCBzcmMiLCJwcmVwdWJsaXNoT25seSI6Inlhcm4gYnVpbGQgJiYgeWFybiB0ZXN0IiwicHJlcGFyZSI6Inlhcm4gYnVpbGQifSwicmVwb3NpdG9yeSI6eyJ0eXBlIjoiZ2l0IiwidXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2tuc3YvbWVybWFpZCJ9LCJhdXRob3IiOiJLbnV0IFN2ZWlkcXZpc3QiLCJsaWNlbnNlIjoiTUlUIiwic3RhbmRhcmQiOnsiaWdub3JlIjpbIioqL3BhcnNlci8qLmpzIiwiZGlzdC8qKi8qLmpzIiwiY3lwcmVzcy8qKi8qLmpzIl0sImdsb2JhbHMiOlsicGFnZSJdfSwiZGVwZW5kZW5jaWVzIjp7IkBicmFpbnRyZWUvc2FuaXRpemUtdXJsIjoiXjMuMS4wIiwiZDMiOiJeNS43LjAiLCJkYWdyZSI6Il4wLjguNCIsImRhZ3JlLWQzIjoiXjAuNi40IiwiZW50aXR5LWRlY29kZSI6Il4yLjAuMiIsImdyYXBobGliIjoiXjIuMS43IiwiaGUiOiJeMS4yLjAiLCJraHJvbWEiOiJeMS4xLjAiLCJtaW5pZnkiOiJeNC4xLjEiLCJtb21lbnQtbWluaSI6Il4yLjIyLjEiLCJzdHlsaXMiOiJeMy41LjIifSwiZGV2RGVwZW5kZW5jaWVzIjp7IkBiYWJlbC9jb3JlIjoiXjcuMi4yIiwiQGJhYmVsL3ByZXNldC1lbnYiOiJeNy44LjQiLCJAYmFiZWwvcmVnaXN0ZXIiOiJeNy4wLjAiLCJAcGVyY3kvY3lwcmVzcyI6IioiLCJiYWJlbC1jb3JlIjoiNy4wLjAtYnJpZGdlLjAiLCJiYWJlbC1lc2xpbnQiOiJeMTAuMS4wIiwiYmFiZWwtamVzdCI6Il4yNC45LjAiLCJiYWJlbC1sb2FkZXIiOiJeOC4wLjQiLCJjb3ZlcmFsbHMiOiJeMy4wLjIiLCJjc3MtbG9hZGVyIjoiXjIuMC4xIiwiY3NzLXRvLXN0cmluZy1sb2FkZXIiOiJeMC4xLjMiLCJjeXByZXNzIjoiNC4wLjEiLCJkb2N1bWVudGF0aW9uIjoiXjEyLjAuMSIsImVzbGludCI6Il42LjMuMCIsImVzbGludC1jb25maWctcHJldHRpZXIiOiJeNi4zLjAiLCJlc2xpbnQtcGx1Z2luLXByZXR0aWVyIjoiXjMuMS4wIiwiaHVza3kiOiJeMS4yLjEiLCJpZGVudGl0eS1vYmotcHJveHkiOiJeMy4wLjAiLCJqZXN0IjoiXjI0LjkuMCIsImppc29uIjoiXjAuNC4xOCIsIm1vbWVudCI6Il4yLjIzLjAiLCJub2RlLXNhc3MiOiJeNS4wLjAiLCJwcmV0dGllciI6Il4xLjE4LjIiLCJwdXBwZXRlZXIiOiJeMS4xNy4wIiwic2Fzcy1sb2FkZXIiOiJeNy4xLjAiLCJzdGFydC1zZXJ2ZXItYW5kLXRlc3QiOiJeMS4xMC42IiwidGVyc2VyLXdlYnBhY2stcGx1Z2luIjoiXjIuMi4yIiwid2VicGFjayI6Il40LjQxLjIiLCJ3ZWJwYWNrLWJ1bmRsZS1hbmFseXplciI6Il4zLjcuMCIsIndlYnBhY2stY2xpIjoiXjMuMS4yIiwid2VicGFjay1kZXYtc2VydmVyIjoiXjMuNC4xIiwid2VicGFjay1ub2RlLWV4dGVybmFscyI6Il4xLjcuMiIsInlhcm4tdXBncmFkZS1hbGwiOiJeMC41LjAifSwiZmlsZXMiOlsiZGlzdCJdLCJ5YXJuLXVwZ3JhZGUtYWxsIjp7Imlnbm9yZSI6WyJiYWJlbC1jb3JlIl19LCJzaWRlRWZmZWN0cyI6WyIqKi8qLmNzcyIsIioqLyouc2NzcyJdLCJodXNreSI6eyJob29rcyI6eyJwcmUtcHVzaCI6Inlhcm4gdGVzdCJ9fX0nKX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09PWV8fHQhPXQmJmUhPWV9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzNCksaT1uKDEzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIWkodCkpcmV0dXJuITE7dmFyIGU9cih0KTtyZXR1cm4iW29iamVjdCBGdW5jdGlvbl0iPT1lfHwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iPT1lfHwiW29iamVjdCBBc3luY0Z1bmN0aW9uXSI9PWV8fCJbb2JqZWN0IFByb3h5XSI9PWV9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxOSkuU3ltYm9sO3QuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKHQpe3ZhciByPW4oMTkpLGk9bigyMzMpLGE9ZSYmIWUubm9kZVR5cGUmJmUsbz1hJiYib2JqZWN0Ij09dHlwZW9mIHQmJnQmJiF0Lm5vZGVUeXBlJiZ0LHM9byYmby5leHBvcnRzPT09YT9yLkJ1ZmZlcjp2b2lkIDAsYz0ocz9zLmlzQnVmZmVyOnZvaWQgMCl8fGk7dC5leHBvcnRzPWN9KS5jYWxsKHRoaXMsbig2KSh0KSl9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDExMyksaT1uKDIzNyksYT1uKDI1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGEodCk/cih0LCEwKTppKHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjQyKSxpPW4oNzgpLGE9bigyNDMpLG89bigxMjIpLHM9bigyNDQpLGM9bigzNCksdT1uKDExMSksbD11KHIpLGg9dShpKSxmPXUoYSksZD11KG8pLHA9dShzKSx5PWM7KHImJiJbb2JqZWN0IERhdGFWaWV3XSIhPXkobmV3IHIobmV3IEFycmF5QnVmZmVyKDEpKSl8fGkmJiJbb2JqZWN0IE1hcF0iIT15KG5ldyBpKXx8YSYmIltvYmplY3QgUHJvbWlzZV0iIT15KGEucmVzb2x2ZSgpKXx8byYmIltvYmplY3QgU2V0XSIhPXkobmV3IG8pfHxzJiYiW29iamVjdCBXZWFrTWFwXSIhPXkobmV3IHMpKSYmKHk9ZnVuY3Rpb24odCl7dmFyIGU9Yyh0KSxuPSJbb2JqZWN0IE9iamVjdF0iPT1lP3QuY29uc3RydWN0b3I6dm9pZCAwLHI9bj91KG4pOiIiO2lmKHIpc3dpdGNoKHIpe2Nhc2UgbDpyZXR1cm4iW29iamVjdCBEYXRhVmlld10iO2Nhc2UgaDpyZXR1cm4iW29iamVjdCBNYXBdIjtjYXNlIGY6cmV0dXJuIltvYmplY3QgUHJvbWlzZV0iO2Nhc2UgZDpyZXR1cm4iW29iamVjdCBTZXRdIjtjYXNlIHA6cmV0dXJuIltvYmplY3QgV2Vha01hcF0ifXJldHVybiBlfSksdC5leHBvcnRzPXl9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM0KSxpPW4oMjEpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHR8fGkodCkmJiJbb2JqZWN0IFN5bWJvbF0iPT1yKHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByO3RyeXtyPXtkZWZhdWx0czpuKDE1NSksZWFjaDpuKDg4KSxpc0Z1bmN0aW9uOm4oMzgpLGlzUGxhaW5PYmplY3Q6bigxNTkpLHBpY2s6bigxNjIpLGhhczpuKDk0KSxyYW5nZTpuKDE2MyksdW5pcXVlSWQ6bigxNjQpfX1jYXRjaCh0KXt9cnx8KHI9d2luZG93Ll8pLHQuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKHQscil7dmFyIGk9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVsxLDNdLG49WzEsNV0scj1bMSwxN10saT1bMiwxMF0sYT1bMSwyMV0sbz1bMSwyMl0scz1bMSwyM10sYz1bMSwyNF0sdT1bMSwyNV0sbD1bMSwyNl0saD1bMSwxOV0sZj1bMSwyN10sZD1bMSwyOF0scD1bMSwzMV0seT1bNjYsNjddLGc9WzUsOCwxNCwzNSwzNiwzNywzOCwzOSw0MCw0OCw1NSw1Nyw2Niw2N10sdj1bNSw2LDgsMTQsMzUsMzYsMzcsMzgsMzksNDAsNDgsNjYsNjddLG09WzEsNTFdLGI9WzEsNTJdLHg9WzEsNTNdLF89WzEsNTRdLGs9WzEsNTVdLHc9WzEsNTZdLEU9WzEsNTddLFQ9WzU3LDU4XSxDPVsxLDY5XSxTPVsxLDY1XSxBPVsxLDY2XSxNPVsxLDY3XSxPPVsxLDY4XSxCPVsxLDcwXSxOPVsxLDc0XSxEPVsxLDc1XSxMPVsxLDcyXSxJPVsxLDczXSxSPVs1LDgsMTQsMzUsMzYsMzcsMzgsMzksNDAsNDgsNjYsNjddLEY9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGRpcmVjdGl2ZTo0LE5FV0xJTkU6NSxSRDo2LGRpYWdyYW06NyxFT0Y6OCxvcGVuRGlyZWN0aXZlOjksdHlwZURpcmVjdGl2ZToxMCxjbG9zZURpcmVjdGl2ZToxMSwiOiI6MTIsYXJnRGlyZWN0aXZlOjEzLG9wZW5fZGlyZWN0aXZlOjE0LHR5cGVfZGlyZWN0aXZlOjE1LGFyZ19kaXJlY3RpdmU6MTYsY2xvc2VfZGlyZWN0aXZlOjE3LHJlcXVpcmVtZW50RGVmOjE4LGVsZW1lbnREZWY6MTkscmVsYXRpb25zaGlwRGVmOjIwLHJlcXVpcmVtZW50VHlwZToyMSxyZXF1aXJlbWVudE5hbWU6MjIsU1RSVUNUX1NUQVJUOjIzLHJlcXVpcmVtZW50Qm9keToyNCxJRDoyNSxDT0xPTlNFUDoyNixpZDoyNyxURVhUOjI4LHRleHQ6MjksUklTSzozMCxyaXNrTGV2ZWw6MzEsVkVSSUZZTVRIRDozMix2ZXJpZnlUeXBlOjMzLFNUUlVDVF9TVE9QOjM0LFJFUVVJUkVNRU5UOjM1LEZVTkNUSU9OQUxfUkVRVUlSRU1FTlQ6MzYsSU5URVJGQUNFX1JFUVVJUkVNRU5UOjM3LFBFUkZPUk1BTkNFX1JFUVVJUkVNRU5UOjM4LFBIWVNJQ0FMX1JFUVVJUkVNRU5UOjM5LERFU0lHTl9DT05TVFJBSU5UOjQwLExPV19SSVNLOjQxLE1FRF9SSVNLOjQyLEhJR0hfUklTSzo0MyxWRVJJRllfQU5BTFlTSVM6NDQsVkVSSUZZX0RFTU9OU1RSQVRJT046NDUsVkVSSUZZX0lOU1BFQ1RJT046NDYsVkVSSUZZX1RFU1Q6NDcsRUxFTUVOVDo0OCxlbGVtZW50TmFtZTo0OSxlbGVtZW50Qm9keTo1MCxUWVBFOjUxLHR5cGU6NTIsRE9DUkVGOjUzLHJlZjo1NCxFTkRfQVJST1dfTDo1NSxyZWxhdGlvbnNoaXA6NTYsTElORTo1NyxFTkRfQVJST1dfUjo1OCxDT05UQUlOUzo1OSxDT1BJRVM6NjAsREVSSVZFUzo2MSxTQVRJU0ZJRVM6NjIsVkVSSUZJRVM6NjMsUkVGSU5FUzo2NCxUUkFDRVM6NjUsdW5xU3RyaW5nOjY2LHFTdHJpbmc6NjcsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDU6Ik5FV0xJTkUiLDY6IlJEIiw4OiJFT0YiLDEyOiI6IiwxNDoib3Blbl9kaXJlY3RpdmUiLDE1OiJ0eXBlX2RpcmVjdGl2ZSIsMTY6ImFyZ19kaXJlY3RpdmUiLDE3OiJjbG9zZV9kaXJlY3RpdmUiLDIzOiJTVFJVQ1RfU1RBUlQiLDI1OiJJRCIsMjY6IkNPTE9OU0VQIiwyODoiVEVYVCIsMzA6IlJJU0siLDMyOiJWRVJJRllNVEhEIiwzNDoiU1RSVUNUX1NUT1AiLDM1OiJSRVFVSVJFTUVOVCIsMzY6IkZVTkNUSU9OQUxfUkVRVUlSRU1FTlQiLDM3OiJJTlRFUkZBQ0VfUkVRVUlSRU1FTlQiLDM4OiJQRVJGT1JNQU5DRV9SRVFVSVJFTUVOVCIsMzk6IlBIWVNJQ0FMX1JFUVVJUkVNRU5UIiw0MDoiREVTSUdOX0NPTlNUUkFJTlQiLDQxOiJMT1dfUklTSyIsNDI6Ik1FRF9SSVNLIiw0MzoiSElHSF9SSVNLIiw0NDoiVkVSSUZZX0FOQUxZU0lTIiw0NToiVkVSSUZZX0RFTU9OU1RSQVRJT04iLDQ2OiJWRVJJRllfSU5TUEVDVElPTiIsNDc6IlZFUklGWV9URVNUIiw0ODoiRUxFTUVOVCIsNTE6IlRZUEUiLDUzOiJET0NSRUYiLDU1OiJFTkRfQVJST1dfTCIsNTc6IkxJTkUiLDU4OiJFTkRfQVJST1dfUiIsNTk6IkNPTlRBSU5TIiw2MDoiQ09QSUVTIiw2MToiREVSSVZFUyIsNjI6IlNBVElTRklFUyIsNjM6IlZFUklGSUVTIiw2NDoiUkVGSU5FUyIsNjU6IlRSQUNFUyIsNjY6InVucVN0cmluZyIsNjc6InFTdHJpbmcifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzMsMl0sWzMsNF0sWzQsM10sWzQsNV0sWzksMV0sWzEwLDFdLFsxMywxXSxbMTEsMV0sWzcsMF0sWzcsMl0sWzcsMl0sWzcsMl0sWzcsMl0sWzcsMl0sWzE4LDVdLFsyNCw1XSxbMjQsNV0sWzI0LDVdLFsyNCw1XSxbMjQsMl0sWzI0LDFdLFsyMSwxXSxbMjEsMV0sWzIxLDFdLFsyMSwxXSxbMjEsMV0sWzIxLDFdLFszMSwxXSxbMzEsMV0sWzMxLDFdLFszMywxXSxbMzMsMV0sWzMzLDFdLFszMywxXSxbMTksNV0sWzUwLDVdLFs1MCw1XSxbNTAsMl0sWzUwLDFdLFsyMCw1XSxbMjAsNV0sWzU2LDFdLFs1NiwxXSxbNTYsMV0sWzU2LDFdLFs1NiwxXSxbNTYsMV0sWzU2LDFdLFsyMiwxXSxbMjIsMV0sWzI3LDFdLFsyNywxXSxbMjksMV0sWzI5LDFdLFs0OSwxXSxbNDksMV0sWzUyLDFdLFs1MiwxXSxbNTQsMV0sWzU0LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe3ZhciBzPWEubGVuZ3RoLTE7c3dpdGNoKGkpe2Nhc2UgNjpyLnBhcnNlRGlyZWN0aXZlKCIlJXsiLCJvcGVuX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgNzpyLnBhcnNlRGlyZWN0aXZlKGFbc10sInR5cGVfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA4OmFbc109YVtzXS50cmltKCkucmVwbGFjZSgvJy9nLCciJyksci5wYXJzZURpcmVjdGl2ZShhW3NdLCJhcmdfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA5OnIucGFyc2VEaXJlY3RpdmUoIn0lJSIsImNsb3NlX2RpcmVjdGl2ZSIsInBpZSIpO2JyZWFrO2Nhc2UgMTA6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMTY6ci5hZGRSZXF1aXJlbWVudChhW3MtM10sYVtzLTRdKTticmVhaztjYXNlIDE3OnIuc2V0TmV3UmVxSWQoYVtzLTJdKTticmVhaztjYXNlIDE4OnIuc2V0TmV3UmVxVGV4dChhW3MtMl0pO2JyZWFrO2Nhc2UgMTk6ci5zZXROZXdSZXFSaXNrKGFbcy0yXSk7YnJlYWs7Y2FzZSAyMDpyLnNldE5ld1JlcVZlcmlmeU1ldGhvZChhW3MtMl0pO2JyZWFrO2Nhc2UgMjM6dGhpcy4kPXIuUmVxdWlyZW1lbnRUeXBlLlJFUVVJUkVNRU5UO2JyZWFrO2Nhc2UgMjQ6dGhpcy4kPXIuUmVxdWlyZW1lbnRUeXBlLkZVTkNUSU9OQUxfUkVRVUlSRU1FTlQ7YnJlYWs7Y2FzZSAyNTp0aGlzLiQ9ci5SZXF1aXJlbWVudFR5cGUuSU5URVJGQUNFX1JFUVVJUkVNRU5UO2JyZWFrO2Nhc2UgMjY6dGhpcy4kPXIuUmVxdWlyZW1lbnRUeXBlLlBFUkZPUk1BTkNFX1JFUVVJUkVNRU5UO2JyZWFrO2Nhc2UgMjc6dGhpcy4kPXIuUmVxdWlyZW1lbnRUeXBlLlBIWVNJQ0FMX1JFUVVJUkVNRU5UO2JyZWFrO2Nhc2UgMjg6dGhpcy4kPXIuUmVxdWlyZW1lbnRUeXBlLkRFU0lHTl9DT05TVFJBSU5UO2JyZWFrO2Nhc2UgMjk6dGhpcy4kPXIuUmlza0xldmVsLkxPV19SSVNLO2JyZWFrO2Nhc2UgMzA6dGhpcy4kPXIuUmlza0xldmVsLk1FRF9SSVNLO2JyZWFrO2Nhc2UgMzE6dGhpcy4kPXIuUmlza0xldmVsLkhJR0hfUklTSzticmVhaztjYXNlIDMyOnRoaXMuJD1yLlZlcmlmeVR5cGUuVkVSSUZZX0FOQUxZU0lTO2JyZWFrO2Nhc2UgMzM6dGhpcy4kPXIuVmVyaWZ5VHlwZS5WRVJJRllfREVNT05TVFJBVElPTjticmVhaztjYXNlIDM0OnRoaXMuJD1yLlZlcmlmeVR5cGUuVkVSSUZZX0lOU1BFQ1RJT047YnJlYWs7Y2FzZSAzNTp0aGlzLiQ9ci5WZXJpZnlUeXBlLlZFUklGWV9URVNUO2JyZWFrO2Nhc2UgMzY6ci5hZGRFbGVtZW50KGFbcy0zXSk7YnJlYWs7Y2FzZSAzNzpyLnNldE5ld0VsZW1lbnRUeXBlKGFbcy0yXSk7YnJlYWs7Y2FzZSAzODpyLnNldE5ld0VsZW1lbnREb2NSZWYoYVtzLTJdKTticmVhaztjYXNlIDQxOnIuYWRkUmVsYXRpb25zaGlwKGFbcy0yXSxhW3NdLGFbcy00XSk7YnJlYWs7Y2FzZSA0MjpyLmFkZFJlbGF0aW9uc2hpcChhW3MtMl0sYVtzLTRdLGFbc10pO2JyZWFrO2Nhc2UgNDM6dGhpcy4kPXIuUmVsYXRpb25zaGlwcy5DT05UQUlOUzticmVhaztjYXNlIDQ0OnRoaXMuJD1yLlJlbGF0aW9uc2hpcHMuQ09QSUVTO2JyZWFrO2Nhc2UgNDU6dGhpcy4kPXIuUmVsYXRpb25zaGlwcy5ERVJJVkVTO2JyZWFrO2Nhc2UgNDY6dGhpcy4kPXIuUmVsYXRpb25zaGlwcy5TQVRJU0ZJRVM7YnJlYWs7Y2FzZSA0Nzp0aGlzLiQ9ci5SZWxhdGlvbnNoaXBzLlZFUklGSUVTO2JyZWFrO2Nhc2UgNDg6dGhpcy4kPXIuUmVsYXRpb25zaGlwcy5SRUZJTkVTO2JyZWFrO2Nhc2UgNDk6dGhpcy4kPXIuUmVsYXRpb25zaGlwcy5UUkFDRVN9fSx0YWJsZTpbezM6MSw0OjIsNjplLDk6NCwxNDpufSx7MTpbM119LHszOjcsNDoyLDU6WzEsNl0sNjplLDk6NCwxNDpufSx7NTpbMSw4XX0sezEwOjksMTU6WzEsMTBdfSx7MTU6WzIsNl19LHszOjExLDQ6Miw2OmUsOTo0LDE0Om59LHsxOlsyLDJdfSx7NDoxNiw1OnIsNzoxMiw4OmksOTo0LDE0Om4sMTg6MTMsMTk6MTQsMjA6MTUsMjE6MTgsMjc6MjAsMzU6YSwzNjpvLDM3OnMsMzg6YywzOTp1LDQwOmwsNDg6aCw2NjpmLDY3OmR9LHsxMToyOSwxMjpbMSwzMF0sMTc6cH0sdChbMTIsMTddLFsyLDddKSx7MTpbMiwxXX0sezg6WzEsMzJdfSx7NDoxNiw1OnIsNzozMyw4OmksOTo0LDE0Om4sMTg6MTMsMTk6MTQsMjA6MTUsMjE6MTgsMjc6MjAsMzU6YSwzNjpvLDM3OnMsMzg6YywzOTp1LDQwOmwsNDg6aCw2NjpmLDY3OmR9LHs0OjE2LDU6ciw3OjM0LDg6aSw5OjQsMTQ6biwxODoxMywxOToxNCwyMDoxNSwyMToxOCwyNzoyMCwzNTphLDM2Om8sMzc6cywzODpjLDM5OnUsNDA6bCw0ODpoLDY2OmYsNjc6ZH0sezQ6MTYsNTpyLDc6MzUsODppLDk6NCwxNDpuLDE4OjEzLDE5OjE0LDIwOjE1LDIxOjE4LDI3OjIwLDM1OmEsMzY6bywzNzpzLDM4OmMsMzk6dSw0MDpsLDQ4OmgsNjY6Ziw2NzpkfSx7NDoxNiw1OnIsNzozNiw4OmksOTo0LDE0Om4sMTg6MTMsMTk6MTQsMjA6MTUsMjE6MTgsMjc6MjAsMzU6YSwzNjpvLDM3OnMsMzg6YywzOTp1LDQwOmwsNDg6aCw2NjpmLDY3OmR9LHs0OjE2LDU6ciw3OjM3LDg6aSw5OjQsMTQ6biwxODoxMywxOToxNCwyMDoxNSwyMToxOCwyNzoyMCwzNTphLDM2Om8sMzc6cywzODpjLDM5OnUsNDA6bCw0ODpoLDY2OmYsNjc6ZH0sezIyOjM4LDY2OlsxLDM5XSw2NzpbMSw0MF19LHs0OTo0MSw2NjpbMSw0Ml0sNjc6WzEsNDNdfSx7NTU6WzEsNDRdLDU3OlsxLDQ1XX0sdCh5LFsyLDIzXSksdCh5LFsyLDI0XSksdCh5LFsyLDI1XSksdCh5LFsyLDI2XSksdCh5LFsyLDI3XSksdCh5LFsyLDI4XSksdChnLFsyLDUyXSksdChnLFsyLDUzXSksdCh2LFsyLDRdKSx7MTM6NDYsMTY6WzEsNDddfSx0KHYsWzIsOV0pLHsxOlsyLDNdfSx7ODpbMiwxMV19LHs4OlsyLDEyXX0sezg6WzIsMTNdfSx7ODpbMiwxNF19LHs4OlsyLDE1XX0sezIzOlsxLDQ4XX0sezIzOlsyLDUwXX0sezIzOlsyLDUxXX0sezIzOlsxLDQ5XX0sezIzOlsyLDU2XX0sezIzOlsyLDU3XX0sezU2OjUwLDU5Om0sNjA6Yiw2MTp4LDYyOl8sNjM6ayw2NDp3LDY1OkV9LHs1Njo1OCw1OTptLDYwOmIsNjE6eCw2MjpfLDYzOmssNjQ6dyw2NTpFfSx7MTE6NTksMTc6cH0sezE3OlsyLDhdfSx7NTpbMSw2MF19LHs1OlsxLDYxXX0sezU3OlsxLDYyXX0sdChULFsyLDQzXSksdChULFsyLDQ0XSksdChULFsyLDQ1XSksdChULFsyLDQ2XSksdChULFsyLDQ3XSksdChULFsyLDQ4XSksdChULFsyLDQ5XSksezU4OlsxLDYzXX0sdCh2LFsyLDVdKSx7NTpDLDI0OjY0LDI1OlMsMjg6QSwzMDpNLDMyOk8sMzQ6Qn0sezU6TiwzNDpELDUwOjcxLDUxOkwsNTM6SX0sezI3Ojc2LDY2OmYsNjc6ZH0sezI3Ojc3LDY2OmYsNjc6ZH0sdChSLFsyLDE2XSksezI2OlsxLDc4XX0sezI2OlsxLDc5XX0sezI2OlsxLDgwXX0sezI2OlsxLDgxXX0sezU6QywyNDo4MiwyNTpTLDI4OkEsMzA6TSwzMjpPLDM0OkJ9LHQoUixbMiwyMl0pLHQoUixbMiwzNl0pLHsyNjpbMSw4M119LHsyNjpbMSw4NF19LHs1Ok4sMzQ6RCw1MDo4NSw1MTpMLDUzOkl9LHQoUixbMiw0MF0pLHQoUixbMiw0MV0pLHQoUixbMiw0Ml0pLHsyNzo4Niw2NjpmLDY3OmR9LHsyOTo4Nyw2NjpbMSw4OF0sNjc6WzEsODldfSx7MzE6OTAsNDE6WzEsOTFdLDQyOlsxLDkyXSw0MzpbMSw5M119LHszMzo5NCw0NDpbMSw5NV0sNDU6WzEsOTZdLDQ2OlsxLDk3XSw0NzpbMSw5OF19LHQoUixbMiwyMV0pLHs1Mjo5OSw2NjpbMSwxMDBdLDY3OlsxLDEwMV19LHs1NDoxMDIsNjY6WzEsMTAzXSw2NzpbMSwxMDRdfSx0KFIsWzIsMzldKSx7NTpbMSwxMDVdfSx7NTpbMSwxMDZdfSx7NTpbMiw1NF19LHs1OlsyLDU1XX0sezU6WzEsMTA3XX0sezU6WzIsMjldfSx7NTpbMiwzMF19LHs1OlsyLDMxXX0sezU6WzEsMTA4XX0sezU6WzIsMzJdfSx7NTpbMiwzM119LHs1OlsyLDM0XX0sezU6WzIsMzVdfSx7NTpbMSwxMDldfSx7NTpbMiw1OF19LHs1OlsyLDU5XX0sezU6WzEsMTEwXX0sezU6WzIsNjBdfSx7NTpbMiw2MV19LHs1OkMsMjQ6MTExLDI1OlMsMjg6QSwzMDpNLDMyOk8sMzQ6Qn0sezU6QywyNDoxMTIsMjU6UywyODpBLDMwOk0sMzI6TywzNDpCfSx7NTpDLDI0OjExMywyNTpTLDI4OkEsMzA6TSwzMjpPLDM0OkJ9LHs1OkMsMjQ6MTE0LDI1OlMsMjg6QSwzMDpNLDMyOk8sMzQ6Qn0sezU6TiwzNDpELDUwOjExNSw1MTpMLDUzOkl9LHs1Ok4sMzQ6RCw1MDoxMTYsNTE6TCw1MzpJfSx0KFIsWzIsMTddKSx0KFIsWzIsMThdKSx0KFIsWzIsMTldKSx0KFIsWzIsMjBdKSx0KFIsWzIsMzddKSx0KFIsWzIsMzhdKV0sZGVmYXVsdEFjdGlvbnM6ezU6WzIsNl0sNzpbMiwyXSwxMTpbMiwxXSwzMjpbMiwzXSwzMzpbMiwxMV0sMzQ6WzIsMTJdLDM1OlsyLDEzXSwzNjpbMiwxNF0sMzc6WzIsMTVdLDM5OlsyLDUwXSw0MDpbMiw1MV0sNDI6WzIsNTZdLDQzOlsyLDU3XSw0NzpbMiw4XSw4ODpbMiw1NF0sODk6WzIsNTVdLDkxOlsyLDI5XSw5MjpbMiwzMF0sOTM6WzIsMzFdLDk1OlsyLDMyXSw5NjpbMiwzM10sOTc6WzIsMzRdLDk4OlsyLDM1XSwxMDA6WzIsNThdLDEwMTpbMiw1OV0sMTAzOlsyLDYwXSwxMDQ6WzIsNjFdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIWUucmVjb3ZlcmFibGUpe3ZhciBuPW5ldyBFcnJvcih0KTt0aHJvdyBuLmhhc2g9ZSxufXRoaXMudHJhY2UodCl9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bMF0scj1bXSxpPVtudWxsXSxhPVtdLG89dGhpcy50YWJsZSxzPSIiLGM9MCx1PTAsbD0wLGg9MixmPTEsZD1hLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHA9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSx5PXt5eTp7fX07Zm9yKHZhciBnIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksZykmJih5Lnl5W2ddPXRoaXMueXlbZ10pO3Auc2V0SW5wdXQodCx5Lnl5KSx5Lnl5LmxleGVyPXAseS55eS5wYXJzZXI9dGhpcyx2b2lkIDA9PT1wLnl5bGxvYyYmKHAueXlsbG9jPXt9KTt2YXIgdj1wLnl5bGxvYzthLnB1c2godik7dmFyIG09cC5vcHRpb25zJiZwLm9wdGlvbnMucmFuZ2VzO2Z1bmN0aW9uIGIoKXt2YXIgdDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mKHQ9ci5wb3AoKXx8cC5sZXgoKXx8ZikmJih0IGluc3RhbmNlb2YgQXJyYXkmJih0PShyPXQpLnBvcCgpKSx0PWUuc3ltYm9sc19bdF18fHQpLHR9ImZ1bmN0aW9uIj09dHlwZW9mIHkueXkucGFyc2VFcnJvcj90aGlzLnBhcnNlRXJyb3I9eS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmb3IodmFyIHgsXyxrLHcsRSxULEMsUyxBLE09e307Oyl7aWYoaz1uW24ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNba10/dz10aGlzLmRlZmF1bHRBY3Rpb25zW2tdOihudWxsPT14JiYoeD1iKCkpLHc9b1trXSYmb1trXVt4XSksdm9pZCAwPT09d3x8IXcubGVuZ3RofHwhd1swXSl7dmFyIE89IiI7Zm9yKFQgaW4gQT1bXSxvW2tdKXRoaXMudGVybWluYWxzX1tUXSYmVD5oJiZBLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tUXSsiJyIpO089cC5zaG93UG9zaXRpb24/IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOlxuIitwLnNob3dQb3NpdGlvbigpKyJcbkV4cGVjdGluZyAiK0Euam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciOiJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjogVW5leHBlY3RlZCAiKyh4PT1mPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyIpLHRoaXMucGFyc2VFcnJvcihPLHt0ZXh0OnAubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3hdfHx4LGxpbmU6cC55eWxpbmVubyxsb2M6dixleHBlY3RlZDpBfSl9aWYod1swXWluc3RhbmNlb2YgQXJyYXkmJncubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitrKyIsIHRva2VuOiAiK3gpO3N3aXRjaCh3WzBdKXtjYXNlIDE6bi5wdXNoKHgpLGkucHVzaChwLnl5dGV4dCksYS5wdXNoKHAueXlsbG9jKSxuLnB1c2god1sxXSkseD1udWxsLF8/KHg9XyxfPW51bGwpOih1PXAueXlsZW5nLHM9cC55eXRleHQsYz1wLnl5bGluZW5vLHY9cC55eWxsb2MsbD4wJiZsLS0pO2JyZWFrO2Nhc2UgMjppZihDPXRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzFdLE0uJD1pW2kubGVuZ3RoLUNdLE0uXyQ9e2ZpcnN0X2xpbmU6YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmFbYS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmFbYS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LG0mJihNLl8kLnJhbmdlPVthW2EubGVuZ3RoLShDfHwxKV0ucmFuZ2VbMF0sYVthLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHZvaWQgMCE9PShFPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShNLFtzLHUsYyx5Lnl5LHdbMV0saSxhXS5jb25jYXQoZCkpKSlyZXR1cm4gRTtDJiYobj1uLnNsaWNlKDAsLTEqQyoyKSxpPWkuc2xpY2UoMCwtMSpDKSxhPWEuc2xpY2UoMCwtMSpDKSksbi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzBdKSxpLnB1c2goTS4kKSxhLnB1c2goTS5fJCksUz1vW25bbi5sZW5ndGgtMl1dW25bbi5sZW5ndGgtMV1dLG4ucHVzaChTKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sUD17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLnl5LnBhcnNlcil0aHJvdyBuZXcgRXJyb3IodCk7dGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih0LGUpfSxzZXRJbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnl5PWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW5wdXRbMF07cmV0dXJuIHRoaXMueXl0ZXh0Kz10LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz10LHRoaXMubWF0Y2hlZCs9dCx0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksdH0sdW5wdXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsbj10LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9dCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZSksdGhpcy5vZmZzZXQtPWU7dmFyIHI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPW4ubGVuZ3RoLTEpO3ZhciBpPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpuPyhuLmxlbmd0aD09PXIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStyW3IubGVuZ3RoLW4ubGVuZ3RoXS5sZW5ndGgtblswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1baVswXSxpWzBdK3RoaXMueXlsZW5nLWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyPyh0aGlzLl9iYWNrdHJhY2s9ITAsdGhpcyk6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGVzczpmdW5jdGlvbih0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSt0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaDtyZXR1cm4gdC5sZW5ndGg8MjAmJih0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC10Lmxlbmd0aCkpLCh0LnN1YnN0cigwLDIwKSsodC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXN0SW5wdXQoKSxlPW5ldyBBcnJheSh0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHQrdGhpcy51cGNvbWluZ0lucHV0KCkrIlxuIitlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihpLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLChyPXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpKSYmKHRoaXMueXlsaW5lbm8rPXIubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46cj9yW3IubGVuZ3RoLTFdLmxlbmd0aC1yW3IubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz10WzBdLHRoaXMubWF0Y2grPXRbMF0sdGhpcy5tYXRjaGVzPXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UodFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9dFswXSxuPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksbilyZXR1cm4gbjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgYSBpbiBpKXRoaXNbYV09aVthXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dmFyIHQsZSxuLHI7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApLHRoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGk9dGhpcy5fY3VycmVudFJ1bGVzKCksYT0wO2E8aS5sZW5ndGg7YSsrKWlmKChuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbaVthXV0pKSYmKCFlfHxuWzBdLmxlbmd0aD5lWzBdLmxlbmd0aCkpe2lmKGU9bixyPWEsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoITEhPT0odD10aGlzLnRlc3RfbWF0Y2gobixpW2FdKSkpcmV0dXJuIHQ7aWYodGhpcy5fYmFja3RyYWNrKXtlPSExO2NvbnRpbnVlfXJldHVybiExfWlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZT8hMSE9PSh0PXRoaXMudGVzdF9tYXRjaChlLGlbcl0pKSYmdDoiIj09PXRoaXMuX2lucHV0P3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gVW5yZWNvZ25pemVkIHRleHQuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5uZXh0KCk7cmV0dXJuIHR8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLDE0O2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSwxNTtjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMTI7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDE3O2Nhc2UgNDpyZXR1cm4gMTY7Y2FzZSA1OnJldHVybiA1O2Nhc2UgNjpjYXNlIDc6Y2FzZSA4OmJyZWFrO2Nhc2UgOTpyZXR1cm4gODtjYXNlIDEwOnJldHVybiA2O2Nhc2UgMTE6cmV0dXJuIDIzO2Nhc2UgMTI6cmV0dXJuIDM0O2Nhc2UgMTM6cmV0dXJuIDI2O2Nhc2UgMTQ6cmV0dXJuIDI1O2Nhc2UgMTU6cmV0dXJuIDI4O2Nhc2UgMTY6cmV0dXJuIDMwO2Nhc2UgMTc6cmV0dXJuIDMyO2Nhc2UgMTg6cmV0dXJuIDM1O2Nhc2UgMTk6cmV0dXJuIDM2O2Nhc2UgMjA6cmV0dXJuIDM3O2Nhc2UgMjE6cmV0dXJuIDM4O2Nhc2UgMjI6cmV0dXJuIDM5O2Nhc2UgMjM6cmV0dXJuIDQwO2Nhc2UgMjQ6cmV0dXJuIDQxO2Nhc2UgMjU6cmV0dXJuIDQyO2Nhc2UgMjY6cmV0dXJuIDQzO2Nhc2UgMjc6cmV0dXJuIDQ0O2Nhc2UgMjg6cmV0dXJuIDQ1O2Nhc2UgMjk6cmV0dXJuIDQ2O2Nhc2UgMzA6cmV0dXJuIDQ3O2Nhc2UgMzE6cmV0dXJuIDQ4O2Nhc2UgMzI6cmV0dXJuIDU5O2Nhc2UgMzM6cmV0dXJuIDYwO2Nhc2UgMzQ6cmV0dXJuIDYxO2Nhc2UgMzU6cmV0dXJuIDYyO2Nhc2UgMzY6cmV0dXJuIDYzO2Nhc2UgMzc6cmV0dXJuIDY0O2Nhc2UgMzg6cmV0dXJuIDY1O2Nhc2UgMzk6cmV0dXJuIDUxO2Nhc2UgNDA6cmV0dXJuIDUzO2Nhc2UgNDE6cmV0dXJuIDU1O2Nhc2UgNDI6cmV0dXJuIDU4O2Nhc2UgNDM6cmV0dXJuIDU3O2Nhc2UgNDQ6dGhpcy5iZWdpbigic3RyaW5nIik7YnJlYWs7Y2FzZSA0NTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA0NjpyZXR1cm4icVN0cmluZyI7Y2FzZSA0NzpyZXR1cm4gZS55eXRleHQ9ZS55eXRleHQudHJpbSgpLDY2fX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS9pLC9eKD86OikvaSwvXig/Olx9JSUpL2ksL14oPzooKD86KD8hXH0lJSkufFxuKSopKS9pLC9eKD86KFxyP1xuKSspL2ksL14oPzpccyspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JVteXG5dKikvaSwvXig/OiQpL2ksL14oPzpyZXF1aXJlbWVudERpYWdyYW1cYikvaSwvXig/Olx7KS9pLC9eKD86XH0pL2ksL14oPzo6KS9pLC9eKD86aWRcYikvaSwvXig/OnRleHRcYikvaSwvXig/OnJpc2tcYikvaSwvXig/OnZlcmlmeU1ldGhvZFxiKS9pLC9eKD86cmVxdWlyZW1lbnRcYikvaSwvXig/OmZ1bmN0aW9uYWxSZXF1aXJlbWVudFxiKS9pLC9eKD86aW50ZXJmYWNlUmVxdWlyZW1lbnRcYikvaSwvXig/OnBlcmZvcm1hbmNlUmVxdWlyZW1lbnRcYikvaSwvXig/OnBoeXNpY2FsUmVxdWlyZW1lbnRcYikvaSwvXig/OmRlc2lnbkNvbnN0cmFpbnRcYikvaSwvXig/Omxvd1xiKS9pLC9eKD86bWVkaXVtXGIpL2ksL14oPzpoaWdoXGIpL2ksL14oPzphbmFseXNpc1xiKS9pLC9eKD86ZGVtb25zdHJhdGlvblxiKS9pLC9eKD86aW5zcGVjdGlvblxiKS9pLC9eKD86dGVzdFxiKS9pLC9eKD86ZWxlbWVudFxiKS9pLC9eKD86Y29udGFpbnNcYikvaSwvXig/OmNvcGllc1xiKS9pLC9eKD86ZGVyaXZlc1xiKS9pLC9eKD86c2F0aXNmaWVzXGIpL2ksL14oPzp2ZXJpZmllc1xiKS9pLC9eKD86cmVmaW5lc1xiKS9pLC9eKD86dHJhY2VzXGIpL2ksL14oPzp0eXBlXGIpL2ksL14oPzpkb2NyZWZcYikvaSwvXig/OjwtKS9pLC9eKD86LT4pL2ksL14oPzotKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbXHddW15cclxuXHtcPFw+XC1cPV0qKS9pXSxjb25kaXRpb25zOntjbG9zZV9kaXJlY3RpdmU6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sYXJnX2RpcmVjdGl2ZTp7cnVsZXM6WzMsNF0saW5jbHVzaXZlOiExfSx0eXBlX2RpcmVjdGl2ZTp7cnVsZXM6WzIsM10saW5jbHVzaXZlOiExfSxvcGVuX2RpcmVjdGl2ZTp7cnVsZXM6WzFdLGluY2x1c2l2ZTohMX0sdW5xU3RyaW5nOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LHRva2VuOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzQ1LDQ2XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0N10saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIGooKXt0aGlzLnl5PXt9fXJldHVybiBGLmxleGVyPVAsai5wcm90b3R5cGU9RixGLlBhcnNlcj1qLG5ldyBqfSgpO2UucGFyc2VyPWksZS5QYXJzZXI9aS5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiBpLnBhcnNlLmFwcGx5KGksYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHIpe3JbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrclswXSsiIEZJTEUiKSx0LmV4aXQoMSkpO3ZhciBpPW4oMTcpLnJlYWRGaWxlU3luYyhuKDE4KS5ub3JtYWxpemUoclsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2UoaSl9LG4uY1tuLnNdPT09ciYmZS5tYWluKHQuYXJndi5zbGljZSgxKSl9KS5jYWxsKHRoaXMsbigxMSksbig2KSh0KSl9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW5ldyhuKDE3NikuZGVmYXVsdCkoe3I6MCxnOjAsYjowLGE6MH0sInRyYW5zcGFyZW50Iik7ZS5kZWZhdWx0PXJ9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU5KSxpPW4oNjApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixhKXt2YXIgbz0hbjtufHwobj17fSk7Zm9yKHZhciBzPS0xLGM9ZS5sZW5ndGg7KytzPGM7KXt2YXIgdT1lW3NdLGw9YT9hKG5bdV0sdFt1XSx1LG4sdCk6dm9pZCAwO3ZvaWQgMD09PWwmJihsPXRbdV0pLG8/aShuLHUsbCk6cihuLHUsbCl9cmV0dXJuIG59fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMzIpLGk9bigyMSksYT1PYmplY3QucHJvdG90eXBlLG89YS5oYXNPd25Qcm9wZXJ0eSxzPWEucHJvcGVydHlJc0VudW1lcmFibGUsYz1yKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk/cjpmdW5jdGlvbih0KXtyZXR1cm4gaSh0KSYmby5jYWxsKHQsImNhbGxlZSIpJiYhcy5jYWxsKHQsImNhbGxlZSIpfTt0LmV4cG9ydHM9Y30sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjM0KSxpPW4oNjIpLGE9big4Miksbz1hJiZhLmlzVHlwZWRBcnJheSxzPW8/aShvKTpyO3QuZXhwb3J0cz1zfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0Myk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdHx8cih0KSlyZXR1cm4gdDt2YXIgZT10KyIiO3JldHVybiIwIj09ZSYmMS90PT0tMS8wPyItMCI6ZX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpLmF0dHIoIndpZHRoIiwiMTAwMDAwIiksaT1uLmFwcGVuZCgieGh0bWw6ZGl2Iik7aS5hdHRyKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKTt2YXIgYT1lLmxhYmVsO3N3aXRjaCh0eXBlb2YgYSl7Y2FzZSJmdW5jdGlvbiI6aS5pbnNlcnQoYSk7YnJlYWs7Y2FzZSJvYmplY3QiOmkuaW5zZXJ0KChmdW5jdGlvbigpe3JldHVybiBhfSkpO2JyZWFrO2RlZmF1bHQ6aS5odG1sKGEpfXIuYXBwbHlTdHlsZShpLGUubGFiZWxTdHlsZSksaS5zdHlsZSgiZGlzcGxheSIsImlubGluZS1ibG9jayIpLGkuc3R5bGUoIndoaXRlLXNwYWNlIiwibm93cmFwIik7dmFyIG89aS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIG4uYXR0cigid2lkdGgiLG8ud2lkdGgpLmF0dHIoImhlaWdodCIsby5oZWlnaHQpLG59fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDEwKSxpPW4oNDYpLGE9bigxNiksbz1uKDUzKTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlLG4scyl7aWYodm9pZCAwPT09biYmKG49MCksdm9pZCAwPT09cyYmKHM9MSksIm51bWJlciIhPXR5cGVvZiB0KXJldHVybiBvLmRlZmF1bHQodCx7YTplfSk7dmFyIGM9aS5kZWZhdWx0LnNldCh7cjpyLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5yKHQpLGc6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuZyhlKSxiOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmIobiksYTpyLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5hKHMpfSk7cmV0dXJuIGEuZGVmYXVsdC5zdHJpbmdpZnkoYyl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDEwKSxpPW4oMTYpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUpe3ZhciBuPWkuZGVmYXVsdC5wYXJzZSh0KTtmb3IodmFyIGEgaW4gZSluW2FdPXIuZGVmYXVsdC5jaGFubmVsLmNsYW1wW2FdKGVbYV0pO3JldHVybiBpLmRlZmF1bHQuc3RyaW5naWZ5KG4pfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTUpLGk9bigyMDYpLGE9bigyMDcpLG89bigyMDgpLHM9bigyMDkpLGM9bigyMTApO2Z1bmN0aW9uIHUodCl7dmFyIGU9dGhpcy5fX2RhdGFfXz1uZXcgcih0KTt0aGlzLnNpemU9ZS5zaXplfXUucHJvdG90eXBlLmNsZWFyPWksdS5wcm90b3R5cGUuZGVsZXRlPWEsdS5wcm90b3R5cGUuZ2V0PW8sdS5wcm90b3R5cGUuaGFzPXMsdS5wcm90b3R5cGUuc2V0PWMsdC5leHBvcnRzPXV9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDIwMSksaT1uKDIwMiksYT1uKDIwMyksbz1uKDIwNCkscz1uKDIwNSk7ZnVuY3Rpb24gYyh0KXt2YXIgZT0tMSxuPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxuOyl7dmFyIHI9dFtlXTt0aGlzLnNldChyWzBdLHJbMV0pfX1jLnByb3RvdHlwZS5jbGVhcj1yLGMucHJvdG90eXBlLmRlbGV0ZT1pLGMucHJvdG90eXBlLmdldD1hLGMucHJvdG90eXBlLmhhcz1vLGMucHJvdG90eXBlLnNldD1zLHQuZXhwb3J0cz1jfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzNyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQubGVuZ3RoO24tLTspaWYocih0W25dWzBdLGUpKXJldHVybiBuO3JldHVybi0xfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzMpKE9iamVjdCwiY3JlYXRlIik7dC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDIyNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5fX2RhdGFfXztyZXR1cm4gcihlKT9uWyJzdHJpbmciPT10eXBlb2YgZT8ic3RyaW5nIjoiaGFzaCJdOm4ubWFwfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjApLGk9bigzNyksYT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIG89dFtlXTthLmNhbGwodCxlKSYmaShvLG4pJiYodm9pZCAwIT09bnx8ZSBpbiB0KXx8cih0LGUsbil9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMTIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7Il9fcHJvdG9fXyI9PWUmJnI/cih0LGUse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOm4sd3JpdGFibGU6ITB9KTp0W2VdPW59fSxmdW5jdGlvbih0LGUpe3ZhciBuPS9eKD86MHxbMS05XVxkKikkLzt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10eXBlb2YgdDtyZXR1cm4hIShlPW51bGw9PWU/OTAwNzE5OTI1NDc0MDk5MTplKSYmKCJudW1iZXIiPT1yfHwic3ltYm9sIiE9ciYmbi50ZXN0KHQpKSYmdD4tMSYmdCUxPT0wJiZ0PGV9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSl9fX0sZnVuY3Rpb24odCxlKXt2YXIgbj1PYmplY3QucHJvdG90eXBlO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10JiZ0LmNvbnN0cnVjdG9yO3JldHVybiB0PT09KCJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLnByb3RvdHlwZXx8bil9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMTQpKE9iamVjdC5nZXRQcm90b3R5cGVPZixPYmplY3QpO3QuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OSksaT1uKDI1NSkocik7dC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDUpLGk9big5MyksYT1uKDI2OSksbz1uKDEzNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIodCk/dDppKHQsZSk/W3RdOmEobyh0KSl9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMSxyPW51bGw9PXQ/MDp0Lmxlbmd0aCxpPUFycmF5KHIpOysrbjxyOylpW25dPWUodFtuXSxuLHQpO3JldHVybiBpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzUpLGk9bigxNDQpLGE9bigxNDUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBhKGkodCxlLHIpLHQrIiIpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzcpLGk9bigyNSksYT1uKDYxKSxvPW4oMTMpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7aWYoIW8obikpcmV0dXJuITE7dmFyIHM9dHlwZW9mIGU7cmV0dXJuISEoIm51bWJlciI9PXM/aShuKSYmYShlLG4ubGVuZ3RoKToic3RyaW5nIj09cyYmZSBpbiBuKSYmcihuW2VdLHQpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQpO3QuZXhwb3J0cz17bG9uZ2VzdFBhdGg6ZnVuY3Rpb24odCl7dmFyIGU9e307ci5mb3JFYWNoKHQuc291cmNlcygpLChmdW5jdGlvbiBuKGkpe3ZhciBhPXQubm9kZShpKTtpZihyLmhhcyhlLGkpKXJldHVybiBhLnJhbms7ZVtpXT0hMDt2YXIgbz1yLm1pbihyLm1hcCh0Lm91dEVkZ2VzKGkpLChmdW5jdGlvbihlKXtyZXR1cm4gbihlLncpLXQuZWRnZShlKS5taW5sZW59KSkpO3JldHVybiBvIT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZJiZudWxsIT1vfHwobz0wKSxhLnJhbms9b30pKX0sc2xhY2s6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5ub2RlKGUudykucmFuay10Lm5vZGUoZS52KS5yYW5rLXQuZWRnZShlKS5taW5sZW59fX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj0vXiglMjB8XHMpKihqYXZhc2NyaXB0fGRhdGEpL2ltLGk9L1teXHgyMC1ceDdFXS9naW0sYT0vXihbXjpdKyk6L2dtLG89WyIuIiwiLyJdO3QuZXhwb3J0cz17c2FuaXRpemVVcmw6ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuImFib3V0OmJsYW5rIjt2YXIgZSxuLHM9dC5yZXBsYWNlKGksIiIpLnRyaW0oKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG8uaW5kZXhPZih0WzBdKT4tMX0ocyk/czoobj1zLm1hdGNoKGEpKT8oZT1uWzBdLHIudGVzdChlKT8iYWJvdXQ6YmxhbmsiOnMpOiJhYm91dDpibGFuayJ9fX0sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbih0LHIpe3ZhciBpPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCxlLG4scil7Zm9yKG49bnx8e30scj10Lmxlbmd0aDtyLS07blt0W3JdXT1lKTtyZXR1cm4gbn0sZT1bMiwzXSxuPVsxLDddLHI9WzcsMTIsMTUsMTcsMTksMjAsMjFdLGk9WzcsMTEsMTIsMTUsMTcsMTksMjAsMjFdLGE9WzIsMjBdLG89WzEsMzJdLHM9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLEdHOjQsIjoiOjUsZG9jdW1lbnQ6NixFT0Y6NyxESVI6OCxvcHRpb25zOjksYm9keToxMCxPUFQ6MTEsTkw6MTIsbGluZToxMyxzdGF0ZW1lbnQ6MTQsQ09NTUlUOjE1LGNvbW1pdF9hcmc6MTYsQlJBTkNIOjE3LElEOjE4LENIRUNLT1VUOjE5LE1FUkdFOjIwLFJFU0VUOjIxLHJlc2V0X2FyZzoyMixTVFI6MjMsSEVBRDoyNCxyZXNldF9wYXJlbnRzOjI1LENBUkVUOjI2LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJHRyIsNToiOiIsNzoiRU9GIiw4OiJESVIiLDExOiJPUFQiLDEyOiJOTCIsMTU6IkNPTU1JVCIsMTc6IkJSQU5DSCIsMTg6IklEIiwxOToiQ0hFQ0tPVVQiLDIwOiJNRVJHRSIsMjE6IlJFU0VUIiwyMzoiU1RSIiwyNDoiSEVBRCIsMjY6IkNBUkVUIn0scHJvZHVjdGlvbnNfOlswLFszLDRdLFszLDVdLFs2LDBdLFs2LDJdLFs5LDJdLFs5LDFdLFsxMCwwXSxbMTAsMl0sWzEzLDJdLFsxMywxXSxbMTQsMl0sWzE0LDJdLFsxNCwyXSxbMTQsMl0sWzE0LDJdLFsxNiwwXSxbMTYsMV0sWzIyLDJdLFsyMiwyXSxbMjUsMF0sWzI1LDJdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe3ZhciBzPWEubGVuZ3RoLTE7c3dpdGNoKGkpe2Nhc2UgMTpyZXR1cm4gYVtzLTFdO2Nhc2UgMjpyZXR1cm4gci5zZXREaXJlY3Rpb24oYVtzLTNdKSxhW3MtMV07Y2FzZSA0OnIuc2V0T3B0aW9ucyhhW3MtMV0pLHRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgNTphW3MtMV0rPWFbc10sdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDc6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgODphW3MtMV0ucHVzaChhW3NdKSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgOTp0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgMTE6ci5jb21taXQoYVtzXSk7YnJlYWs7Y2FzZSAxMjpyLmJyYW5jaChhW3NdKTticmVhaztjYXNlIDEzOnIuY2hlY2tvdXQoYVtzXSk7YnJlYWs7Y2FzZSAxNDpyLm1lcmdlKGFbc10pO2JyZWFrO2Nhc2UgMTU6ci5yZXNldChhW3NdKTticmVhaztjYXNlIDE2OnRoaXMuJD0iIjticmVhaztjYXNlIDE3OnRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgMTg6dGhpcy4kPWFbcy0xXSsiOiIrYVtzXTticmVhaztjYXNlIDE5OnRoaXMuJD1hW3MtMV0rIjoiK3IuY291bnQsci5jb3VudD0wO2JyZWFrO2Nhc2UgMjA6ci5jb3VudD0wO2JyZWFrO2Nhc2UgMjE6ci5jb3VudCs9MX19LHRhYmxlOlt7MzoxLDQ6WzEsMl19LHsxOlszXX0sezU6WzEsM10sODpbMSw0XX0sezY6NSw3OmUsOTo2LDEyOm59LHs1OlsxLDhdfSx7NzpbMSw5XX0sdChyLFsyLDddLHsxMDoxMCwxMTpbMSwxMV19KSx0KGksWzIsNl0pLHs2OjEyLDc6ZSw5OjYsMTI6bn0sezE6WzIsMV19LHs3OlsyLDRdLDEyOlsxLDE1XSwxMzoxMywxNDoxNCwxNTpbMSwxNl0sMTc6WzEsMTddLDE5OlsxLDE4XSwyMDpbMSwxOV0sMjE6WzEsMjBdfSx0KGksWzIsNV0pLHs3OlsxLDIxXX0sdChyLFsyLDhdKSx7MTI6WzEsMjJdfSx0KHIsWzIsMTBdKSx7MTI6WzIsMTZdLDE2OjIzLDIzOlsxLDI0XX0sezE4OlsxLDI1XX0sezE4OlsxLDI2XX0sezE4OlsxLDI3XX0sezE4OlsxLDMwXSwyMjoyOCwyNDpbMSwyOV19LHsxOlsyLDJdfSx0KHIsWzIsOV0pLHsxMjpbMiwxMV19LHsxMjpbMiwxN119LHsxMjpbMiwxMl19LHsxMjpbMiwxM119LHsxMjpbMiwxNF19LHsxMjpbMiwxNV19LHsxMjphLDI1OjMxLDI2Om99LHsxMjphLDI1OjMzLDI2Om99LHsxMjpbMiwxOF19LHsxMjphLDI1OjM0LDI2Om99LHsxMjpbMiwxOV19LHsxMjpbMiwyMV19XSxkZWZhdWx0QWN0aW9uczp7OTpbMiwxXSwyMTpbMiwyXSwyMzpbMiwxMV0sMjQ6WzIsMTddLDI1OlsyLDEyXSwyNjpbMiwxM10sMjc6WzIsMTRdLDI4OlsyLDE1XSwzMTpbMiwxOF0sMzM6WzIsMTldLDM0OlsyLDIxXX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsdT0wLGw9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlcikseT17eXk6e319O2Zvcih2YXIgZyBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGcpJiYoeS55eVtnXT10aGlzLnl5W2ddKTtwLnNldElucHV0KHQseS55eSkseS55eS5sZXhlcj1wLHkueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIHY9cC55eWxsb2M7YS5wdXNoKHYpO3ZhciBtPXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiBiKCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiB5Lnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPXkueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciB4LF8sayx3LEUsVCxDLFMsQSxNPXt9Ozspe2lmKGs9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2tdP3c9dGhpcy5kZWZhdWx0QWN0aW9uc1trXToobnVsbD09eCYmKHg9YigpKSx3PW9ba10mJm9ba11beF0pLHZvaWQgMD09PXd8fCF3Lmxlbmd0aHx8IXdbMF0pe3ZhciBPPSIiO2ZvcihUIGluIEE9W10sb1trXSl0aGlzLnRlcm1pbmFsc19bVF0mJlQ+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bVF0rIiciKTtPPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoeD09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoTyx7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1t4XXx8eCxsaW5lOnAueXlsaW5lbm8sbG9jOnYsZXhwZWN0ZWQ6QX0pfWlmKHdbMF1pbnN0YW5jZW9mIEFycmF5JiZ3Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIraysiLCB0b2tlbjogIit4KTtzd2l0Y2god1swXSl7Y2FzZSAxOm4ucHVzaCh4KSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKHdbMV0pLHg9bnVsbCxfPyh4PV8sXz1udWxsKToodT1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyx2PXAueXlsbG9jLGw+MCYmbC0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxtJiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oRT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyx1LGMseS55eSx3WzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIEU7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LGM9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighdGhpcy55eS5wYXJzZXIpdGhyb3cgbmV3IEVycm9yKHQpO3RoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IodCxlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy55eT1lfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD10LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2lucHV0WzBdO3JldHVybiB0aGlzLnl5dGV4dCs9dCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9dCx0aGlzLm1hdGNoZWQrPXQsdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHR9LHVucHV0OmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLG49dC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWUpLHRoaXMub2Zmc2V0LT1lO3ZhciByPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLG4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1uLmxlbmd0aC0xKTt2YXIgaT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46bj8obi5sZW5ndGg9PT1yLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrcltyLmxlbmd0aC1uLmxlbmd0aF0ubGVuZ3RoLW5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2lbMF0saVswXSt0aGlzLnl5bGVuZy1lXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcj8odGhpcy5fYmFja3RyYWNrPSEwLHRoaXMpOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxlc3M6ZnVuY3Rpb24odCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih0Lmxlbmd0aD4yMD8iLi4uIjoiIikrdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2g7cmV0dXJuIHQubGVuZ3RoPDIwJiYodCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdC5sZW5ndGgpKSwodC5zdWJzdHIoMCwyMCkrKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFzdElucHV0KCksZT1uZXcgQXJyYXkodC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB0K3RoaXMudXBjb21pbmdJbnB1dCgpKyJcbiIrZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGk9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoaS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSwocj10WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSkmJih0aGlzLnl5bGluZW5vKz1yLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnI/cltyLmxlbmd0aC0xXS5sZW5ndGgtcltyLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3RbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dFswXSx0aGlzLm1hdGNoKz10WzBdLHRoaXMubWF0Y2hlcz10LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXRbMF0sbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLG4pcmV0dXJuIG47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGEgaW4gaSl0aGlzW2FdPWlbYV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3ZhciB0LGUsbixyO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKSx0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBpPXRoaXMuX2N1cnJlbnRSdWxlcygpLGE9MDthPGkubGVuZ3RoO2ErKylpZigobj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2lbYV1dKSkmJighZXx8blswXS5sZW5ndGg+ZVswXS5sZW5ndGgpKXtpZihlPW4scj1hLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKCExIT09KHQ9dGhpcy50ZXN0X21hdGNoKG4saVthXSkpKXJldHVybiB0O2lmKHRoaXMuX2JhY2t0cmFjayl7ZT0hMTtjb250aW51ZX1yZXR1cm4hMX1pZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGU/ITEhPT0odD10aGlzLnRlc3RfbWF0Y2goZSxpW3JdKSkmJnQ6IiI9PT10aGlzLl9pbnB1dD90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFVucmVjb2duaXplZCB0ZXh0LlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubmV4dCgpO3JldHVybiB0fHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbih0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2godCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4odD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHR8fDApKT49MD90aGlzLmNvbmRpdGlvblN0YWNrW3RdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKHQpe3RoaXMuYmVnaW4odCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scil7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gMTI7Y2FzZSAxOmNhc2UgMjpjYXNlIDM6YnJlYWs7Y2FzZSA0OnJldHVybiA0O2Nhc2UgNTpyZXR1cm4gMTU7Y2FzZSA2OnJldHVybiAxNztjYXNlIDc6cmV0dXJuIDIwO2Nhc2UgODpyZXR1cm4gMjE7Y2FzZSA5OnJldHVybiAxOTtjYXNlIDEwOmNhc2UgMTE6cmV0dXJuIDg7Y2FzZSAxMjpyZXR1cm4gNTtjYXNlIDEzOnJldHVybiAyNjtjYXNlIDE0OnRoaXMuYmVnaW4oIm9wdGlvbnMiKTticmVhaztjYXNlIDE1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE2OnJldHVybiAxMTtjYXNlIDE3OnRoaXMuYmVnaW4oInN0cmluZyIpO2JyZWFrO2Nhc2UgMTg6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTk6cmV0dXJuIDIzO2Nhc2UgMjA6cmV0dXJuIDE4O2Nhc2UgMjE6cmV0dXJuIDd9fSxydWxlczpbL14oPzooXHI/XG4pKykvaSwvXig/OlxzKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzolW15cbl0qKS9pLC9eKD86Z2l0R3JhcGhcYikvaSwvXig/OmNvbW1pdFxiKS9pLC9eKD86YnJhbmNoXGIpL2ksL14oPzptZXJnZVxiKS9pLC9eKD86cmVzZXRcYikvaSwvXig/OmNoZWNrb3V0XGIpL2ksL14oPzpMUlxiKS9pLC9eKD86QlRcYikvaSwvXig/OjopL2ksL14oPzpcXikvaSwvXig/Om9wdGlvbnNccj9cbikvaSwvXig/OmVuZFxyP1xuKS9pLC9eKD86W15cbl0rXHI/XG4pL2ksL14oPzpbIl0pL2ksL14oPzpbIl0pL2ksL14oPzpbXiJdKikvaSwvXig/OlthLXpBLVpdWy1fXC5hLXpBLVowLTldKlstX2EtekEtWjAtOV0pL2ksL14oPzokKS9pXSxjb25kaXRpb25zOntvcHRpb25zOntydWxlczpbMTUsMTZdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbMTgsMTldLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTcsMjAsMjFdLGluY2x1c2l2ZTohMH19fTtmdW5jdGlvbiB1KCl7dGhpcy55eT17fX1yZXR1cm4gcy5sZXhlcj1jLHUucHJvdG90eXBlPXMscy5QYXJzZXI9dSxuZXcgdX0oKTtlLnBhcnNlcj1pLGUuUGFyc2VyPWkuUGFyc2VyLGUucGFyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gaS5wYXJzZS5hcHBseShpLGFyZ3VtZW50cyl9LGUubWFpbj1mdW5jdGlvbihyKXtyWzFdfHwoY29uc29sZS5sb2coIlVzYWdlOiAiK3JbMF0rIiBGSUxFIiksdC5leGl0KDEpKTt2YXIgaT1uKDE3KS5yZWFkRmlsZVN5bmMobigxOCkubm9ybWFsaXplKHJbMV0pLCJ1dGY4Iik7cmV0dXJuIGUucGFyc2VyLnBhcnNlKGkpfSxuLmNbbi5zXT09PXImJmUubWFpbih0LmFyZ3Yuc2xpY2UoMSkpfSkuY2FsbCh0aGlzLG4oMTEpLG4oNikodCkpfSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKHQscil7dmFyIGk9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVs2LDksMTBdLG49e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGluZm86NCxkb2N1bWVudDo1LEVPRjo2LGxpbmU6NyxzdGF0ZW1lbnQ6OCxOTDo5LHNob3dJbmZvOjEwLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJpbmZvIiw2OiJFT0YiLDk6Ik5MIiwxMDoic2hvd0luZm8ifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzUsMF0sWzUsMl0sWzcsMV0sWzcsMV0sWzgsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7YS5sZW5ndGg7c3dpdGNoKGkpe2Nhc2UgMTpyZXR1cm4gcjtjYXNlIDQ6YnJlYWs7Y2FzZSA2OnIuc2V0SW5mbyghMCl9fSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LHQoZSxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6Niw5OlsxLDddLDEwOlsxLDhdfSx7MTpbMiwxXX0sdChlLFsyLDNdKSx0KGUsWzIsNF0pLHQoZSxbMiw1XSksdChlLFsyLDZdKV0sZGVmYXVsdEFjdGlvbnM6ezQ6WzIsMV19LHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighZS5yZWNvdmVyYWJsZSl7dmFyIG49bmV3IEVycm9yKHQpO3Rocm93IG4uaGFzaD1lLG59dGhpcy50cmFjZSh0KX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVswXSxyPVtdLGk9W251bGxdLGE9W10sbz10aGlzLnRhYmxlLHM9IiIsYz0wLHU9MCxsPTAsaD0yLGY9MSxkPWEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHk9e3l5Ont9fTtmb3IodmFyIGcgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxnKSYmKHkueXlbZ109dGhpcy55eVtnXSk7cC5zZXRJbnB1dCh0LHkueXkpLHkueXkubGV4ZXI9cCx5Lnl5LnBhcnNlcj10aGlzLHZvaWQgMD09PXAueXlsbG9jJiYocC55eWxsb2M9e30pO3ZhciB2PXAueXlsbG9jO2EucHVzaCh2KTt2YXIgbT1wLm9wdGlvbnMmJnAub3B0aW9ucy5yYW5nZXM7ZnVuY3Rpb24gYigpe3ZhciB0O3JldHVybiJudW1iZXIiIT10eXBlb2YodD1yLnBvcCgpfHxwLmxleCgpfHxmKSYmKHQgaW5zdGFuY2VvZiBBcnJheSYmKHQ9KHI9dCkucG9wKCkpLHQ9ZS5zeW1ib2xzX1t0XXx8dCksdH0iZnVuY3Rpb24iPT10eXBlb2YgeS55eS5wYXJzZUVycm9yP3RoaXMucGFyc2VFcnJvcj15Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Zvcih2YXIgeCxfLGssdyxFLFQsQyxTLEEsTT17fTs7KXtpZihrPW5bbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1trXT93PXRoaXMuZGVmYXVsdEFjdGlvbnNba106KG51bGw9PXgmJih4PWIoKSksdz1vW2tdJiZvW2tdW3hdKSx2b2lkIDA9PT13fHwhdy5sZW5ndGh8fCF3WzBdKXt2YXIgTz0iIjtmb3IoVCBpbiBBPVtdLG9ba10pdGhpcy50ZXJtaW5hbHNfW1RdJiZUPmgmJkEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW1RdKyInIik7Tz1wLnNob3dQb3NpdGlvbj8iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6XG4iK3Auc2hvd1Bvc2l0aW9uKCkrIlxuRXhwZWN0aW5nICIrQS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyI6IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOiBVbmV4cGVjdGVkICIrKHg9PWY/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIiksdGhpcy5wYXJzZUVycm9yKE8se3RleHQ6cC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19beF18fHgsbGluZTpwLnl5bGluZW5vLGxvYzp2LGV4cGVjdGVkOkF9KX1pZih3WzBdaW5zdGFuY2VvZiBBcnJheSYmdy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2srIiwgdG9rZW46ICIreCk7c3dpdGNoKHdbMF0pe2Nhc2UgMTpuLnB1c2goeCksaS5wdXNoKHAueXl0ZXh0KSxhLnB1c2gocC55eWxsb2MpLG4ucHVzaCh3WzFdKSx4PW51bGwsXz8oeD1fLF89bnVsbCk6KHU9cC55eWxlbmcscz1wLnl5dGV4dCxjPXAueXlsaW5lbm8sdj1wLnl5bGxvYyxsPjAmJmwtLSk7YnJlYWs7Y2FzZSAyOmlmKEM9dGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMV0sTS4kPWlbaS5sZW5ndGgtQ10sTS5fJD17Zmlyc3RfbGluZTphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YVthLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YVthLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sbSYmKE0uXyQucmFuZ2U9W2FbYS5sZW5ndGgtKEN8fDEpXS5yYW5nZVswXSxhW2EubGVuZ3RoLTFdLnJhbmdlWzFdXSksdm9pZCAwIT09KEU9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE0sW3MsdSxjLHkueXksd1sxXSxpLGFdLmNvbmNhdChkKSkpKXJldHVybiBFO0MmJihuPW4uc2xpY2UoMCwtMSpDKjIpLGk9aS5zbGljZSgwLC0xKkMpLGE9YS5zbGljZSgwLC0xKkMpKSxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMF0pLGkucHVzaChNLiQpLGEucHVzaChNLl8kKSxTPW9bbltuLmxlbmd0aC0yXV1bbltuLmxlbmd0aC0xXV0sbi5wdXNoKFMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxyPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm5leHQoKTtyZXR1cm4gdHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24odCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh0fHwwKSk+PTA/dGhpcy5jb25kaXRpb25TdGFja1t0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbih0KXt0aGlzLmJlZ2luKHQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIpe3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIDQ7Y2FzZSAxOnJldHVybiA5O2Nhc2UgMjpyZXR1cm4ic3BhY2UiO2Nhc2UgMzpyZXR1cm4gMTA7Y2FzZSA0OnJldHVybiA2O2Nhc2UgNTpyZXR1cm4iVFhUIn19LHJ1bGVzOlsvXig/OmluZm9cYikvaSwvXig/Oltcc1xuXHJdKykvaSwvXig/Oltcc10rKS9pLC9eKD86c2hvd0luZm9cYikvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOntJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDVdLGluY2x1c2l2ZTohMH19fTtmdW5jdGlvbiBpKCl7dGhpcy55eT17fX1yZXR1cm4gbi5sZXhlcj1yLGkucHJvdG90eXBlPW4sbi5QYXJzZXI9aSxuZXcgaX0oKTtlLnBhcnNlcj1pLGUuUGFyc2VyPWkuUGFyc2VyLGUucGFyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gaS5wYXJzZS5hcHBseShpLGFyZ3VtZW50cyl9LGUubWFpbj1mdW5jdGlvbihyKXtyWzFdfHwoY29uc29sZS5sb2coIlVzYWdlOiAiK3JbMF0rIiBGSUxFIiksdC5leGl0KDEpKTt2YXIgaT1uKDE3KS5yZWFkRmlsZVN5bmMobigxOCkubm9ybWFsaXplKHJbMV0pLCJ1dGY4Iik7cmV0dXJuIGUucGFyc2VyLnBhcnNlKGkpfSxuLmNbbi5zXT09PXImJmUubWFpbih0LmFyZ3Yuc2xpY2UoMSkpfSkuY2FsbCh0aGlzLG4oMTEpLG4oNikodCkpfSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKHQscil7dmFyIGk9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVsxLDRdLG49WzEsNV0scj1bMSw2XSxpPVsxLDddLGE9WzEsOV0sbz1bMSwxMSwxMywyMCwyMSwyMiwyM10scz1bMiw1XSxjPVsxLDYsMTEsMTMsMjAsMjEsMjIsMjNdLHU9WzIwLDIxLDIyXSxsPVsyLDhdLGg9WzEsMThdLGY9WzEsMTldLGQ9WzEsMjRdLHA9WzYsMjAsMjEsMjIsMjNdLHk9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGVvbDo0LGRpcmVjdGl2ZTo1LFBJRTo2LGRvY3VtZW50Ojcsc2hvd0RhdGE6OCxsaW5lOjksc3RhdGVtZW50OjEwLHR4dDoxMSx2YWx1ZToxMix0aXRsZToxMyx0aXRsZV92YWx1ZToxNCxvcGVuRGlyZWN0aXZlOjE1LHR5cGVEaXJlY3RpdmU6MTYsY2xvc2VEaXJlY3RpdmU6MTcsIjoiOjE4LGFyZ0RpcmVjdGl2ZToxOSxORVdMSU5FOjIwLCI7IjoyMSxFT0Y6MjIsb3Blbl9kaXJlY3RpdmU6MjMsdHlwZV9kaXJlY3RpdmU6MjQsYXJnX2RpcmVjdGl2ZToyNSxjbG9zZV9kaXJlY3RpdmU6MjYsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDY6IlBJRSIsODoic2hvd0RhdGEiLDExOiJ0eHQiLDEyOiJ2YWx1ZSIsMTM6InRpdGxlIiwxNDoidGl0bGVfdmFsdWUiLDE4OiI6IiwyMDoiTkVXTElORSIsMjE6IjsiLDIyOiJFT0YiLDIzOiJvcGVuX2RpcmVjdGl2ZSIsMjQ6InR5cGVfZGlyZWN0aXZlIiwyNToiYXJnX2RpcmVjdGl2ZSIsMjY6ImNsb3NlX2RpcmVjdGl2ZSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywyXSxbMywyXSxbMywzXSxbNywwXSxbNywyXSxbOSwyXSxbMTAsMF0sWzEwLDJdLFsxMCwyXSxbMTAsMV0sWzUsM10sWzUsNV0sWzQsMV0sWzQsMV0sWzQsMV0sWzE1LDFdLFsxNiwxXSxbMTksMV0sWzE3LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe3ZhciBzPWEubGVuZ3RoLTE7c3dpdGNoKGkpe2Nhc2UgNDpyLnNldFNob3dEYXRhKCEwKTticmVhaztjYXNlIDc6dGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDk6ci5hZGRTZWN0aW9uKGFbcy0xXSxyLmNsZWFudXBWYWx1ZShhW3NdKSk7YnJlYWs7Y2FzZSAxMDp0aGlzLiQ9YVtzXS50cmltKCksci5zZXRUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMTc6ci5wYXJzZURpcmVjdGl2ZSgiJSV7Iiwib3Blbl9kaXJlY3RpdmUiKTticmVhaztjYXNlIDE4OnIucGFyc2VEaXJlY3RpdmUoYVtzXSwidHlwZV9kaXJlY3RpdmUiKTticmVhaztjYXNlIDE5OmFbc109YVtzXS50cmltKCkucmVwbGFjZSgvJy9nLCciJyksci5wYXJzZURpcmVjdGl2ZShhW3NdLCJhcmdfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAyMDpyLnBhcnNlRGlyZWN0aXZlKCJ9JSUiLCJjbG9zZV9kaXJlY3RpdmUiLCJwaWUiKX19LHRhYmxlOlt7MzoxLDQ6Miw1OjMsNjplLDE1OjgsMjA6biwyMTpyLDIyOmksMjM6YX0sezE6WzNdfSx7MzoxMCw0OjIsNTozLDY6ZSwxNTo4LDIwOm4sMjE6ciwyMjppLDIzOmF9LHszOjExLDQ6Miw1OjMsNjplLDE1OjgsMjA6biwyMTpyLDIyOmksMjM6YX0sdChvLHMsezc6MTIsODpbMSwxM119KSx0KGMsWzIsMTRdKSx0KGMsWzIsMTVdKSx0KGMsWzIsMTZdKSx7MTY6MTQsMjQ6WzEsMTVdfSx7MjQ6WzIsMTddfSx7MTpbMiwxXX0sezE6WzIsMl19LHQodSxsLHsxNTo4LDk6MTYsMTA6MTcsNToyMCwxOlsyLDNdLDExOmgsMTM6ZiwyMzphfSksdChvLHMsezc6MjF9KSx7MTc6MjIsMTg6WzEsMjNdLDI2OmR9LHQoWzE4LDI2XSxbMiwxOF0pLHQobyxbMiw2XSksezQ6MjUsMjA6biwyMTpyLDIyOml9LHsxMjpbMSwyNl19LHsxNDpbMSwyN119LHQodSxbMiwxMV0pLHQodSxsLHsxNTo4LDk6MTYsMTA6MTcsNToyMCwxOlsyLDRdLDExOmgsMTM6ZiwyMzphfSksdChwLFsyLDEyXSksezE5OjI4LDI1OlsxLDI5XX0sdChwLFsyLDIwXSksdChvLFsyLDddKSx0KHUsWzIsOV0pLHQodSxbMiwxMF0pLHsxNzozMCwyNjpkfSx7MjY6WzIsMTldfSx0KHAsWzIsMTNdKV0sZGVmYXVsdEFjdGlvbnM6ezk6WzIsMTddLDEwOlsyLDFdLDExOlsyLDJdLDI5OlsyLDE5XX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsdT0wLGw9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlcikseT17eXk6e319O2Zvcih2YXIgZyBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGcpJiYoeS55eVtnXT10aGlzLnl5W2ddKTtwLnNldElucHV0KHQseS55eSkseS55eS5sZXhlcj1wLHkueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIHY9cC55eWxsb2M7YS5wdXNoKHYpO3ZhciBtPXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiBiKCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiB5Lnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPXkueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciB4LF8sayx3LEUsVCxDLFMsQSxNPXt9Ozspe2lmKGs9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2tdP3c9dGhpcy5kZWZhdWx0QWN0aW9uc1trXToobnVsbD09eCYmKHg9YigpKSx3PW9ba10mJm9ba11beF0pLHZvaWQgMD09PXd8fCF3Lmxlbmd0aHx8IXdbMF0pe3ZhciBPPSIiO2ZvcihUIGluIEE9W10sb1trXSl0aGlzLnRlcm1pbmFsc19bVF0mJlQ+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bVF0rIiciKTtPPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoeD09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoTyx7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1t4XXx8eCxsaW5lOnAueXlsaW5lbm8sbG9jOnYsZXhwZWN0ZWQ6QX0pfWlmKHdbMF1pbnN0YW5jZW9mIEFycmF5JiZ3Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIraysiLCB0b2tlbjogIit4KTtzd2l0Y2god1swXSl7Y2FzZSAxOm4ucHVzaCh4KSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKHdbMV0pLHg9bnVsbCxfPyh4PV8sXz1udWxsKToodT1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyx2PXAueXlsbG9jLGw+MCYmbC0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxtJiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oRT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyx1LGMseS55eSx3WzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIEU7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LGc9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighdGhpcy55eS5wYXJzZXIpdGhyb3cgbmV3IEVycm9yKHQpO3RoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IodCxlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy55eT1lfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD10LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2lucHV0WzBdO3JldHVybiB0aGlzLnl5dGV4dCs9dCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9dCx0aGlzLm1hdGNoZWQrPXQsdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHR9LHVucHV0OmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLG49dC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWUpLHRoaXMub2Zmc2V0LT1lO3ZhciByPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLG4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1uLmxlbmd0aC0xKTt2YXIgaT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46bj8obi5sZW5ndGg9PT1yLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrcltyLmxlbmd0aC1uLmxlbmd0aF0ubGVuZ3RoLW5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2lbMF0saVswXSt0aGlzLnl5bGVuZy1lXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcj8odGhpcy5fYmFja3RyYWNrPSEwLHRoaXMpOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxlc3M6ZnVuY3Rpb24odCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih0Lmxlbmd0aD4yMD8iLi4uIjoiIikrdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2g7cmV0dXJuIHQubGVuZ3RoPDIwJiYodCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdC5sZW5ndGgpKSwodC5zdWJzdHIoMCwyMCkrKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFzdElucHV0KCksZT1uZXcgQXJyYXkodC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB0K3RoaXMudXBjb21pbmdJbnB1dCgpKyJcbiIrZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGk9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoaS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSwocj10WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSkmJih0aGlzLnl5bGluZW5vKz1yLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnI/cltyLmxlbmd0aC0xXS5sZW5ndGgtcltyLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3RbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dFswXSx0aGlzLm1hdGNoKz10WzBdLHRoaXMubWF0Y2hlcz10LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXRbMF0sbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLG4pcmV0dXJuIG47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGEgaW4gaSl0aGlzW2FdPWlbYV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3ZhciB0LGUsbixyO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKSx0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBpPXRoaXMuX2N1cnJlbnRSdWxlcygpLGE9MDthPGkubGVuZ3RoO2ErKylpZigobj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2lbYV1dKSkmJighZXx8blswXS5sZW5ndGg+ZVswXS5sZW5ndGgpKXtpZihlPW4scj1hLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKCExIT09KHQ9dGhpcy50ZXN0X21hdGNoKG4saVthXSkpKXJldHVybiB0O2lmKHRoaXMuX2JhY2t0cmFjayl7ZT0hMTtjb250aW51ZX1yZXR1cm4hMX1pZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGU/ITEhPT0odD10aGlzLnRlc3RfbWF0Y2goZSxpW3JdKSkmJnQ6IiI9PT10aGlzLl9pbnB1dD90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFVucmVjb2duaXplZCB0ZXh0LlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubmV4dCgpO3JldHVybiB0fHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbih0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2godCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4odD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHR8fDApKT49MD90aGlzLmNvbmRpdGlvblN0YWNrW3RdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKHQpe3RoaXMuYmVnaW4odCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scil7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigib3Blbl9kaXJlY3RpdmUiKSwyMztjYXNlIDE6cmV0dXJuIHRoaXMuYmVnaW4oInR5cGVfZGlyZWN0aXZlIiksMjQ7Y2FzZSAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiYXJnX2RpcmVjdGl2ZSIpLDE4O2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSwyNjtjYXNlIDQ6cmV0dXJuIDI1O2Nhc2UgNTpjYXNlIDY6YnJlYWs7Y2FzZSA3OnJldHVybiAyMDtjYXNlIDg6Y2FzZSA5OmJyZWFrO2Nhc2UgMTA6cmV0dXJuIHRoaXMuYmVnaW4oInRpdGxlIiksMTM7Y2FzZSAxMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJ0aXRsZV92YWx1ZSI7Y2FzZSAxMjp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDEzOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE0OnJldHVybiJ0eHQiO2Nhc2UgMTU6cmV0dXJuIDY7Y2FzZSAxNjpyZXR1cm4gODtjYXNlIDE3OnJldHVybiJ2YWx1ZSI7Y2FzZSAxODpyZXR1cm4gMjJ9fSxydWxlczpbL14oPzolJVx7KS9pLC9eKD86KCg/Oig/IVx9JSUpW146Ll0pKikpL2ksL14oPzo6KS9pLC9eKD86XH0lJSkvaSwvXig/OigoPzooPyFcfSUlKS58XG4pKikpL2ksL14oPzolJSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5ccl0rKS9pLC9eKD86JSVbXlxuXSopL2ksL14oPzpbXHNdKykvaSwvXig/OnRpdGxlXGIpL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzpbIl0pL2ksL14oPzpbIl0pL2ksL14oPzpbXiJdKikvaSwvXig/OnBpZVxiKS9pLC9eKD86c2hvd0RhdGFcYikvaSwvXig/OjpbXHNdKltcZF0rKD86XC5bXGRdKyk/KS9pLC9eKD86JCkvaV0sY29uZGl0aW9uczp7Y2xvc2VfZGlyZWN0aXZlOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LGFyZ19kaXJlY3RpdmU6e3J1bGVzOlszLDRdLGluY2x1c2l2ZTohMX0sdHlwZV9kaXJlY3RpdmU6e3J1bGVzOlsyLDNdLGluY2x1c2l2ZTohMX0sb3Blbl9kaXJlY3RpdmU6e3J1bGVzOlsxXSxpbmNsdXNpdmU6ITF9LHRpdGxlOntydWxlczpbMTFdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbMTMsMTRdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsNSw2LDcsOCw5LDEwLDEyLDE1LDE2LDE3LDE4XSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24gdigpe3RoaXMueXk9e319cmV0dXJuIHkubGV4ZXI9Zyx2LnByb3RvdHlwZT15LHkuUGFyc2VyPXYsbmV3IHZ9KCk7ZS5wYXJzZXI9aSxlLlBhcnNlcj1pLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIGkucGFyc2UuYXBwbHkoaSxhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24ocil7clsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIityWzBdKyIgRklMRSIpLHQuZXhpdCgxKSk7dmFyIGk9bigxNykucmVhZEZpbGVTeW5jKG4oMTgpLm5vcm1hbGl6ZShyWzFdKSwidXRmOCIpO3JldHVybiBlLnBhcnNlci5wYXJzZShpKX0sbi5jW24uc109PT1yJiZlLm1haW4odC5hcmd2LnNsaWNlKDEpKX0pLmNhbGwodGhpcyxuKDExKSxuKDYpKHQpKX0sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbih0LHIpe3ZhciBpPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCxlLG4scil7Zm9yKG49bnx8e30scj10Lmxlbmd0aDtyLS07blt0W3JdXT1lKTtyZXR1cm4gbn0sZT1bMSwyXSxuPVsxLDVdLHI9WzYsOSwxMSwyMywzN10saT1bMSwxN10sYT1bMSwyMF0sbz1bMSwyNV0scz1bMSwyNl0sYz1bMSwyN10sdT1bMSwyOF0sbD1bMSwzN10saD1bMjMsMzQsMzVdLGY9WzQsNiw5LDExLDIzLDM3XSxkPVszMCwzMSwzMiwzM10scD1bMjIsMjddLHk9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLEVSX0RJQUdSQU06NCxkb2N1bWVudDo1LEVPRjo2LGRpcmVjdGl2ZTo3LGxpbmU6OCxTUEFDRTo5LHN0YXRlbWVudDoxMCxORVdMSU5FOjExLG9wZW5EaXJlY3RpdmU6MTIsdHlwZURpcmVjdGl2ZToxMyxjbG9zZURpcmVjdGl2ZToxNCwiOiI6MTUsYXJnRGlyZWN0aXZlOjE2LGVudGl0eU5hbWU6MTcscmVsU3BlYzoxOCxyb2xlOjE5LEJMT0NLX1NUQVJUOjIwLGF0dHJpYnV0ZXM6MjEsQkxPQ0tfU1RPUDoyMixBTFBIQU5VTToyMyxhdHRyaWJ1dGU6MjQsYXR0cmlidXRlVHlwZToyNSxhdHRyaWJ1dGVOYW1lOjI2LEFUVFJJQlVURV9XT1JEOjI3LGNhcmRpbmFsaXR5OjI4LHJlbFR5cGU6MjksWkVST19PUl9PTkU6MzAsWkVST19PUl9NT1JFOjMxLE9ORV9PUl9NT1JFOjMyLE9OTFlfT05FOjMzLE5PTl9JREVOVElGWUlORzozNCxJREVOVElGWUlORzozNSxXT1JEOjM2LG9wZW5fZGlyZWN0aXZlOjM3LHR5cGVfZGlyZWN0aXZlOjM4LGFyZ19kaXJlY3RpdmU6MzksY2xvc2VfZGlyZWN0aXZlOjQwLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJFUl9ESUFHUkFNIiw2OiJFT0YiLDk6IlNQQUNFIiwxMToiTkVXTElORSIsMTU6IjoiLDIwOiJCTE9DS19TVEFSVCIsMjI6IkJMT0NLX1NUT1AiLDIzOiJBTFBIQU5VTSIsMjc6IkFUVFJJQlVURV9XT1JEIiwzMDoiWkVST19PUl9PTkUiLDMxOiJaRVJPX09SX01PUkUiLDMyOiJPTkVfT1JfTU9SRSIsMzM6Ik9OTFlfT05FIiwzNDoiTk9OX0lERU5USUZZSU5HIiwzNToiSURFTlRJRllJTkciLDM2OiJXT1JEIiwzNzoib3Blbl9kaXJlY3RpdmUiLDM4OiJ0eXBlX2RpcmVjdGl2ZSIsMzk6ImFyZ19kaXJlY3RpdmUiLDQwOiJjbG9zZV9kaXJlY3RpdmUifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzMsMl0sWzUsMF0sWzUsMl0sWzgsMl0sWzgsMV0sWzgsMV0sWzgsMV0sWzcsNF0sWzcsNl0sWzEwLDFdLFsxMCw1XSxbMTAsNF0sWzEwLDNdLFsxMCwxXSxbMTcsMV0sWzIxLDFdLFsyMSwyXSxbMjQsMl0sWzI1LDFdLFsyNiwxXSxbMTgsM10sWzI4LDFdLFsyOCwxXSxbMjgsMV0sWzI4LDFdLFsyOSwxXSxbMjksMV0sWzE5LDFdLFsxOSwxXSxbMTIsMV0sWzEzLDFdLFsxNiwxXSxbMTQsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM9YS5sZW5ndGgtMTtzd2l0Y2goaSl7Y2FzZSAxOmJyZWFrO2Nhc2UgMzp0aGlzLiQ9W107YnJlYWs7Y2FzZSA0OmFbcy0xXS5wdXNoKGFbc10pLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSA1OmNhc2UgNjp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDc6Y2FzZSA4OnRoaXMuJD1bXTticmVhaztjYXNlIDEyOnIuYWRkRW50aXR5KGFbcy00XSksci5hZGRFbnRpdHkoYVtzLTJdKSxyLmFkZFJlbGF0aW9uc2hpcChhW3MtNF0sYVtzXSxhW3MtMl0sYVtzLTNdKTticmVhaztjYXNlIDEzOnIuYWRkRW50aXR5KGFbcy0zXSksci5hZGRBdHRyaWJ1dGVzKGFbcy0zXSxhW3MtMV0pO2JyZWFrO2Nhc2UgMTQ6ci5hZGRFbnRpdHkoYVtzLTJdKTticmVhaztjYXNlIDE1OnIuYWRkRW50aXR5KGFbc10pO2JyZWFrO2Nhc2UgMTY6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSAxNzp0aGlzLiQ9W2Fbc11dO2JyZWFrO2Nhc2UgMTg6YVtzXS5wdXNoKGFbcy0xXSksdGhpcy4kPWFbc107YnJlYWs7Y2FzZSAxOTp0aGlzLiQ9e2F0dHJpYnV0ZVR5cGU6YVtzLTFdLGF0dHJpYnV0ZU5hbWU6YVtzXX07YnJlYWs7Y2FzZSAyMDpjYXNlIDIxOnRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgMjI6dGhpcy4kPXtjYXJkQTphW3NdLHJlbFR5cGU6YVtzLTFdLGNhcmRCOmFbcy0yXX07YnJlYWs7Y2FzZSAyMzp0aGlzLiQ9ci5DYXJkaW5hbGl0eS5aRVJPX09SX09ORTticmVhaztjYXNlIDI0OnRoaXMuJD1yLkNhcmRpbmFsaXR5LlpFUk9fT1JfTU9SRTticmVhaztjYXNlIDI1OnRoaXMuJD1yLkNhcmRpbmFsaXR5Lk9ORV9PUl9NT1JFO2JyZWFrO2Nhc2UgMjY6dGhpcy4kPXIuQ2FyZGluYWxpdHkuT05MWV9PTkU7YnJlYWs7Y2FzZSAyNzp0aGlzLiQ9ci5JZGVudGlmaWNhdGlvbi5OT05fSURFTlRJRllJTkc7YnJlYWs7Y2FzZSAyODp0aGlzLiQ9ci5JZGVudGlmaWNhdGlvbi5JREVOVElGWUlORzticmVhaztjYXNlIDI5OnRoaXMuJD1hW3NdLnJlcGxhY2UoLyIvZywiIik7YnJlYWs7Y2FzZSAzMDp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDMxOnIucGFyc2VEaXJlY3RpdmUoIiUleyIsIm9wZW5fZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAzMjpyLnBhcnNlRGlyZWN0aXZlKGFbc10sInR5cGVfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAzMzphW3NdPWFbc10udHJpbSgpLnJlcGxhY2UoLycvZywnIicpLHIucGFyc2VEaXJlY3RpdmUoYVtzXSwiYXJnX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMzQ6ci5wYXJzZURpcmVjdGl2ZSgifSUlIiwiY2xvc2VfZGlyZWN0aXZlIiwiZXIiKX19LHRhYmxlOlt7MzoxLDQ6ZSw3OjMsMTI6NCwzNzpufSx7MTpbM119LHQocixbMiwzXSx7NTo2fSksezM6Nyw0OmUsNzozLDEyOjQsMzc6bn0sezEzOjgsMzg6WzEsOV19LHszODpbMiwzMV19LHs2OlsxLDEwXSw3OjE1LDg6MTEsOTpbMSwxMl0sMTA6MTMsMTE6WzEsMTRdLDEyOjQsMTc6MTYsMjM6aSwzNzpufSx7MTpbMiwyXX0sezE0OjE4LDE1OlsxLDE5XSw0MDphfSx0KFsxNSw0MF0sWzIsMzJdKSx0KHIsWzIsOF0sezE6WzIsMV19KSx0KHIsWzIsNF0pLHs3OjE1LDEwOjIxLDEyOjQsMTc6MTYsMjM6aSwzNzpufSx0KHIsWzIsNl0pLHQocixbMiw3XSksdChyLFsyLDExXSksdChyLFsyLDE1XSx7MTg6MjIsMjg6MjQsMjA6WzEsMjNdLDMwOm8sMzE6cywzMjpjLDMzOnV9KSx0KFs2LDksMTEsMTUsMjAsMjMsMzAsMzEsMzIsMzMsMzddLFsyLDE2XSksezExOlsxLDI5XX0sezE2OjMwLDM5OlsxLDMxXX0sezExOlsyLDM0XX0sdChyLFsyLDVdKSx7MTc6MzIsMjM6aX0sezIxOjMzLDIyOlsxLDM0XSwyNDozNSwyNTozNiwyNzpsfSx7Mjk6MzgsMzQ6WzEsMzldLDM1OlsxLDQwXX0sdChoLFsyLDIzXSksdChoLFsyLDI0XSksdChoLFsyLDI1XSksdChoLFsyLDI2XSksdChmLFsyLDldKSx7MTQ6NDEsNDA6YX0sezQwOlsyLDMzXX0sezE1OlsxLDQyXX0sezIyOlsxLDQzXX0sdChyLFsyLDE0XSksezIxOjQ0LDIyOlsyLDE3XSwyNDozNSwyNTozNiwyNzpsfSx7MjY6NDUsMjc6WzEsNDZdfSx7Mjc6WzIsMjBdfSx7Mjg6NDcsMzA6bywzMTpzLDMyOmMsMzM6dX0sdChkLFsyLDI3XSksdChkLFsyLDI4XSksezExOlsxLDQ4XX0sezE5OjQ5LDIzOlsxLDUxXSwzNjpbMSw1MF19LHQocixbMiwxM10pLHsyMjpbMiwxOF19LHQocCxbMiwxOV0pLHQocCxbMiwyMV0pLHsyMzpbMiwyMl19LHQoZixbMiwxMF0pLHQocixbMiwxMl0pLHQocixbMiwyOV0pLHQocixbMiwzMF0pXSxkZWZhdWx0QWN0aW9uczp7NTpbMiwzMV0sNzpbMiwyXSwyMDpbMiwzNF0sMzE6WzIsMzNdLDM3OlsyLDIwXSw0NDpbMiwxOF0sNDc6WzIsMjJdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIWUucmVjb3ZlcmFibGUpe3ZhciBuPW5ldyBFcnJvcih0KTt0aHJvdyBuLmhhc2g9ZSxufXRoaXMudHJhY2UodCl9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bMF0scj1bXSxpPVtudWxsXSxhPVtdLG89dGhpcy50YWJsZSxzPSIiLGM9MCx1PTAsbD0wLGg9MixmPTEsZD1hLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHA9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSx5PXt5eTp7fX07Zm9yKHZhciBnIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksZykmJih5Lnl5W2ddPXRoaXMueXlbZ10pO3Auc2V0SW5wdXQodCx5Lnl5KSx5Lnl5LmxleGVyPXAseS55eS5wYXJzZXI9dGhpcyx2b2lkIDA9PT1wLnl5bGxvYyYmKHAueXlsbG9jPXt9KTt2YXIgdj1wLnl5bGxvYzthLnB1c2godik7dmFyIG09cC5vcHRpb25zJiZwLm9wdGlvbnMucmFuZ2VzO2Z1bmN0aW9uIGIoKXt2YXIgdDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mKHQ9ci5wb3AoKXx8cC5sZXgoKXx8ZikmJih0IGluc3RhbmNlb2YgQXJyYXkmJih0PShyPXQpLnBvcCgpKSx0PWUuc3ltYm9sc19bdF18fHQpLHR9ImZ1bmN0aW9uIj09dHlwZW9mIHkueXkucGFyc2VFcnJvcj90aGlzLnBhcnNlRXJyb3I9eS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmb3IodmFyIHgsXyxrLHcsRSxULEMsUyxBLE09e307Oyl7aWYoaz1uW24ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNba10/dz10aGlzLmRlZmF1bHRBY3Rpb25zW2tdOihudWxsPT14JiYoeD1iKCkpLHc9b1trXSYmb1trXVt4XSksdm9pZCAwPT09d3x8IXcubGVuZ3RofHwhd1swXSl7dmFyIE89IiI7Zm9yKFQgaW4gQT1bXSxvW2tdKXRoaXMudGVybWluYWxzX1tUXSYmVD5oJiZBLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tUXSsiJyIpO089cC5zaG93UG9zaXRpb24/IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOlxuIitwLnNob3dQb3NpdGlvbigpKyJcbkV4cGVjdGluZyAiK0Euam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciOiJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjogVW5leHBlY3RlZCAiKyh4PT1mPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyIpLHRoaXMucGFyc2VFcnJvcihPLHt0ZXh0OnAubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3hdfHx4LGxpbmU6cC55eWxpbmVubyxsb2M6dixleHBlY3RlZDpBfSl9aWYod1swXWluc3RhbmNlb2YgQXJyYXkmJncubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitrKyIsIHRva2VuOiAiK3gpO3N3aXRjaCh3WzBdKXtjYXNlIDE6bi5wdXNoKHgpLGkucHVzaChwLnl5dGV4dCksYS5wdXNoKHAueXlsbG9jKSxuLnB1c2god1sxXSkseD1udWxsLF8/KHg9XyxfPW51bGwpOih1PXAueXlsZW5nLHM9cC55eXRleHQsYz1wLnl5bGluZW5vLHY9cC55eWxsb2MsbD4wJiZsLS0pO2JyZWFrO2Nhc2UgMjppZihDPXRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzFdLE0uJD1pW2kubGVuZ3RoLUNdLE0uXyQ9e2ZpcnN0X2xpbmU6YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmFbYS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmFbYS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LG0mJihNLl8kLnJhbmdlPVthW2EubGVuZ3RoLShDfHwxKV0ucmFuZ2VbMF0sYVthLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHZvaWQgMCE9PShFPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShNLFtzLHUsYyx5Lnl5LHdbMV0saSxhXS5jb25jYXQoZCkpKSlyZXR1cm4gRTtDJiYobj1uLnNsaWNlKDAsLTEqQyoyKSxpPWkuc2xpY2UoMCwtMSpDKSxhPWEuc2xpY2UoMCwtMSpDKSksbi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzBdKSxpLnB1c2goTS4kKSxhLnB1c2goTS5fJCksUz1vW25bbi5sZW5ndGgtMl1dW25bbi5sZW5ndGgtMV1dLG4ucHVzaChTKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sZz17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLnl5LnBhcnNlcil0aHJvdyBuZXcgRXJyb3IodCk7dGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih0LGUpfSxzZXRJbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnl5PWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW5wdXRbMF07cmV0dXJuIHRoaXMueXl0ZXh0Kz10LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz10LHRoaXMubWF0Y2hlZCs9dCx0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksdH0sdW5wdXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsbj10LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9dCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZSksdGhpcy5vZmZzZXQtPWU7dmFyIHI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPW4ubGVuZ3RoLTEpO3ZhciBpPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpuPyhuLmxlbmd0aD09PXIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStyW3IubGVuZ3RoLW4ubGVuZ3RoXS5sZW5ndGgtblswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1baVswXSxpWzBdK3RoaXMueXlsZW5nLWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyPyh0aGlzLl9iYWNrdHJhY2s9ITAsdGhpcyk6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGVzczpmdW5jdGlvbih0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSt0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaDtyZXR1cm4gdC5sZW5ndGg8MjAmJih0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC10Lmxlbmd0aCkpLCh0LnN1YnN0cigwLDIwKSsodC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXN0SW5wdXQoKSxlPW5ldyBBcnJheSh0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHQrdGhpcy51cGNvbWluZ0lucHV0KCkrIlxuIitlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihpLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLChyPXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpKSYmKHRoaXMueXlsaW5lbm8rPXIubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46cj9yW3IubGVuZ3RoLTFdLmxlbmd0aC1yW3IubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz10WzBdLHRoaXMubWF0Y2grPXRbMF0sdGhpcy5tYXRjaGVzPXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UodFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9dFswXSxuPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksbilyZXR1cm4gbjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgYSBpbiBpKXRoaXNbYV09aVthXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dmFyIHQsZSxuLHI7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApLHRoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGk9dGhpcy5fY3VycmVudFJ1bGVzKCksYT0wO2E8aS5sZW5ndGg7YSsrKWlmKChuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbaVthXV0pKSYmKCFlfHxuWzBdLmxlbmd0aD5lWzBdLmxlbmd0aCkpe2lmKGU9bixyPWEsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoITEhPT0odD10aGlzLnRlc3RfbWF0Y2gobixpW2FdKSkpcmV0dXJuIHQ7aWYodGhpcy5fYmFja3RyYWNrKXtlPSExO2NvbnRpbnVlfXJldHVybiExfWlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZT8hMSE9PSh0PXRoaXMudGVzdF9tYXRjaChlLGlbcl0pKSYmdDoiIj09PXRoaXMuX2lucHV0P3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gVW5yZWNvZ25pemVkIHRleHQuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5uZXh0KCk7cmV0dXJuIHR8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLDM3O2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSwzODtjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMTU7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDQwO2Nhc2UgNDpyZXR1cm4gMzk7Y2FzZSA1OmNhc2UgNjpicmVhaztjYXNlIDc6cmV0dXJuIDExO2Nhc2UgODpicmVhaztjYXNlIDk6cmV0dXJuIDk7Y2FzZSAxMDpyZXR1cm4gMzY7Y2FzZSAxMTpyZXR1cm4gNDtjYXNlIDEyOnJldHVybiB0aGlzLmJlZ2luKCJibG9jayIpLDIwO2Nhc2UgMTM6YnJlYWs7Y2FzZSAxNDpyZXR1cm4gMjc7Y2FzZSAxNTpicmVhaztjYXNlIDE2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMjI7Y2FzZSAxNzpyZXR1cm4gZS55eXRleHRbMF07Y2FzZSAxODpyZXR1cm4gMzA7Y2FzZSAxOTpyZXR1cm4gMzE7Y2FzZSAyMDpyZXR1cm4gMzI7Y2FzZSAyMTpyZXR1cm4gMzM7Y2FzZSAyMjpyZXR1cm4gMzA7Y2FzZSAyMzpyZXR1cm4gMzE7Y2FzZSAyNDpyZXR1cm4gMzI7Y2FzZSAyNTpyZXR1cm4gMzQ7Y2FzZSAyNjpyZXR1cm4gMzU7Y2FzZSAyNzpjYXNlIDI4OnJldHVybiAzNDtjYXNlIDI5OnJldHVybiAyMztjYXNlIDMwOnJldHVybiBlLnl5dGV4dFswXTtjYXNlIDMxOnJldHVybiA2fX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS9pLC9eKD86OikvaSwvXig/Olx9JSUpL2ksL14oPzooKD86KD8hXH0lJSkufFxuKSopKS9pLC9eKD86JSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5dKykvaSwvXig/OlxzKykvaSwvXig/Oltcc10rKS9pLC9eKD86IlteIl0qIikvaSwvXig/OmVyRGlhZ3JhbVxiKS9pLC9eKD86XHspL2ksL14oPzpccyspL2ksL14oPzpbQS1aYS16XVtBLVphLXowLTlcLV9dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XH0pL2ksL14oPzouKS9pLC9eKD86XHxvXGIpL2ksL14oPzpcfW9cYikvaSwvXig/Olx9XHwpL2ksL14oPzpcfFx8KS9pLC9eKD86b1x8KS9pLC9eKD86b1x7KS9pLC9eKD86XHxceykvaSwvXig/OlwuXC4pL2ksL14oPzotLSkvaSwvXig/OlwuLSkvaSwvXig/Oi1cLikvaSwvXig/OltBLVphLXpdW0EtWmEtejAtOVwtX10qKS9pLC9eKD86LikvaSwvXig/OiQpL2ldLGNvbmRpdGlvbnM6e29wZW5fZGlyZWN0aXZlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSx0eXBlX2RpcmVjdGl2ZTp7cnVsZXM6WzIsM10saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0XSxpbmNsdXNpdmU6ITF9LGJsb2NrOntydWxlczpbMTMsMTQsMTUsMTYsMTddLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsNSw2LDcsOCw5LDEwLDExLDEyLDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxXSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24gdigpe3RoaXMueXk9e319cmV0dXJuIHkubGV4ZXI9Zyx2LnByb3RvdHlwZT15LHkuUGFyc2VyPXYsbmV3IHZ9KCk7ZS5wYXJzZXI9aSxlLlBhcnNlcj1pLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIGkucGFyc2UuYXBwbHkoaSxhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24ocil7clsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIityWzBdKyIgRklMRSIpLHQuZXhpdCgxKSk7dmFyIGk9bigxNykucmVhZEZpbGVTeW5jKG4oMTgpLm5vcm1hbGl6ZShyWzFdKSwidXRmOCIpO3JldHVybiBlLnBhcnNlci5wYXJzZShpKX0sbi5jW24uc109PT1yJiZlLm1haW4odC5hcmd2LnNsaWNlKDEpKX0pLmNhbGwodGhpcyxuKDExKSxuKDYpKHQpKX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZnVuY3Rpb24odCl7dFt0LkFMTD0wXT0iQUxMIix0W3QuUkdCPTFdPSJSR0IiLHRbdC5IU0w9Ml09IkhTTCJ9KHJ8fChyPXt9KSksZS5UWVBFPXJ9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxMik7dC5leHBvcnRzPWk7ZnVuY3Rpb24gaSh0KXt0aGlzLl9pc0RpcmVjdGVkPSFyLmhhcyh0LCJkaXJlY3RlZCIpfHx0LmRpcmVjdGVkLHRoaXMuX2lzTXVsdGlncmFwaD0hIXIuaGFzKHQsIm11bHRpZ3JhcGgiKSYmdC5tdWx0aWdyYXBoLHRoaXMuX2lzQ29tcG91bmQ9ISFyLmhhcyh0LCJjb21wb3VuZCIpJiZ0LmNvbXBvdW5kLHRoaXMuX2xhYmVsPXZvaWQgMCx0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm49ci5jb25zdGFudCh2b2lkIDApLHRoaXMuX2RlZmF1bHRFZGdlTGFiZWxGbj1yLmNvbnN0YW50KHZvaWQgMCksdGhpcy5fbm9kZXM9e30sdGhpcy5faXNDb21wb3VuZCYmKHRoaXMuX3BhcmVudD17fSx0aGlzLl9jaGlsZHJlbj17fSx0aGlzLl9jaGlsZHJlblsiXDAiXT17fSksdGhpcy5faW49e30sdGhpcy5fcHJlZHM9e30sdGhpcy5fb3V0PXt9LHRoaXMuX3N1Y3M9e30sdGhpcy5fZWRnZU9ianM9e30sdGhpcy5fZWRnZUxhYmVscz17fX1mdW5jdGlvbiBhKHQsZSl7dFtlXT90W2VdKys6dFtlXT0xfWZ1bmN0aW9uIG8odCxlKXstLXRbZV18fGRlbGV0ZSB0W2VdfWZ1bmN0aW9uIHModCxlLG4saSl7dmFyIGE9IiIrZSxvPSIiK247aWYoIXQmJmE+byl7dmFyIHM9YTthPW8sbz1zfXJldHVybiBhKyIBIitvKyIBIisoci5pc1VuZGVmaW5lZChpKT8iXDAiOmkpfWZ1bmN0aW9uIGModCxlLG4scil7dmFyIGk9IiIrZSxhPSIiK247aWYoIXQmJmk+YSl7dmFyIG89aTtpPWEsYT1vfXZhciBzPXt2OmksdzphfTtyZXR1cm4gciYmKHMubmFtZT1yKSxzfWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4gcyh0LGUudixlLncsZS5uYW1lKX1pLnByb3RvdHlwZS5fbm9kZUNvdW50PTAsaS5wcm90b3R5cGUuX2VkZ2VDb3VudD0wLGkucHJvdG90eXBlLmlzRGlyZWN0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNEaXJlY3RlZH0saS5wcm90b3R5cGUuaXNNdWx0aWdyYXBoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzTXVsdGlncmFwaH0saS5wcm90b3R5cGUuaXNDb21wb3VuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0NvbXBvdW5kfSxpLnByb3RvdHlwZS5zZXRHcmFwaD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbGFiZWw9dCx0aGlzfSxpLnByb3RvdHlwZS5ncmFwaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYWJlbH0saS5wcm90b3R5cGUuc2V0RGVmYXVsdE5vZGVMYWJlbD1mdW5jdGlvbih0KXtyZXR1cm4gci5pc0Z1bmN0aW9uKHQpfHwodD1yLmNvbnN0YW50KHQpKSx0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm49dCx0aGlzfSxpLnByb3RvdHlwZS5ub2RlQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbm9kZUNvdW50fSxpLnByb3RvdHlwZS5ub2Rlcz1mdW5jdGlvbigpe3JldHVybiByLmtleXModGhpcy5fbm9kZXMpfSxpLnByb3RvdHlwZS5zb3VyY2VzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gci5maWx0ZXIodGhpcy5ub2RlcygpLChmdW5jdGlvbihlKXtyZXR1cm4gci5pc0VtcHR5KHQuX2luW2VdKX0pKX0saS5wcm90b3R5cGUuc2lua3M9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiByLmZpbHRlcih0aGlzLm5vZGVzKCksKGZ1bmN0aW9uKGUpe3JldHVybiByLmlzRW1wdHkodC5fb3V0W2VdKX0pKX0saS5wcm90b3R5cGUuc2V0Tm9kZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj1hcmd1bWVudHMsaT10aGlzO3JldHVybiByLmVhY2godCwoZnVuY3Rpb24odCl7bi5sZW5ndGg+MT9pLnNldE5vZGUodCxlKTppLnNldE5vZGUodCl9KSksdGhpc30saS5wcm90b3R5cGUuc2V0Tm9kZT1mdW5jdGlvbih0LGUpe3JldHVybiByLmhhcyh0aGlzLl9ub2Rlcyx0KT8oYXJndW1lbnRzLmxlbmd0aD4xJiYodGhpcy5fbm9kZXNbdF09ZSksdGhpcyk6KHRoaXMuX25vZGVzW3RdPWFyZ3VtZW50cy5sZW5ndGg+MT9lOnRoaXMuX2RlZmF1bHROb2RlTGFiZWxGbih0KSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcGFyZW50W3RdPSJcMCIsdGhpcy5fY2hpbGRyZW5bdF09e30sdGhpcy5fY2hpbGRyZW5bIlwwIl1bdF09ITApLHRoaXMuX2luW3RdPXt9LHRoaXMuX3ByZWRzW3RdPXt9LHRoaXMuX291dFt0XT17fSx0aGlzLl9zdWNzW3RdPXt9LCsrdGhpcy5fbm9kZUNvdW50LHRoaXMpfSxpLnByb3RvdHlwZS5ub2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ub2Rlc1t0XX0saS5wcm90b3R5cGUuaGFzTm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gci5oYXModGhpcy5fbm9kZXMsdCl9LGkucHJvdG90eXBlLnJlbW92ZU5vZGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZihyLmhhcyh0aGlzLl9ub2Rlcyx0KSl7dmFyIG49ZnVuY3Rpb24odCl7ZS5yZW1vdmVFZGdlKGUuX2VkZ2VPYmpzW3RdKX07ZGVsZXRlIHRoaXMuX25vZGVzW3RdLHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdCh0KSxkZWxldGUgdGhpcy5fcGFyZW50W3RdLHIuZWFjaCh0aGlzLmNoaWxkcmVuKHQpLChmdW5jdGlvbih0KXtlLnNldFBhcmVudCh0KX0pKSxkZWxldGUgdGhpcy5fY2hpbGRyZW5bdF0pLHIuZWFjaChyLmtleXModGhpcy5faW5bdF0pLG4pLGRlbGV0ZSB0aGlzLl9pblt0XSxkZWxldGUgdGhpcy5fcHJlZHNbdF0sci5lYWNoKHIua2V5cyh0aGlzLl9vdXRbdF0pLG4pLGRlbGV0ZSB0aGlzLl9vdXRbdF0sZGVsZXRlIHRoaXMuX3N1Y3NbdF0sLS10aGlzLl9ub2RlQ291bnR9cmV0dXJuIHRoaXN9LGkucHJvdG90eXBlLnNldFBhcmVudD1mdW5jdGlvbih0LGUpe2lmKCF0aGlzLl9pc0NvbXBvdW5kKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNldCBwYXJlbnQgaW4gYSBub24tY29tcG91bmQgZ3JhcGgiKTtpZihyLmlzVW5kZWZpbmVkKGUpKWU9IlwwIjtlbHNle2Zvcih2YXIgbj1lKz0iIjshci5pc1VuZGVmaW5lZChuKTtuPXRoaXMucGFyZW50KG4pKWlmKG49PT10KXRocm93IG5ldyBFcnJvcigiU2V0dGluZyAiK2UrIiBhcyBwYXJlbnQgb2YgIit0KyIgd291bGQgY3JlYXRlIGEgY3ljbGUiKTt0aGlzLnNldE5vZGUoZSl9cmV0dXJuIHRoaXMuc2V0Tm9kZSh0KSx0aGlzLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdCh0KSx0aGlzLl9wYXJlbnRbdF09ZSx0aGlzLl9jaGlsZHJlbltlXVt0XT0hMCx0aGlzfSxpLnByb3RvdHlwZS5fcmVtb3ZlRnJvbVBhcmVudHNDaGlsZExpc3Q9ZnVuY3Rpb24odCl7ZGVsZXRlIHRoaXMuX2NoaWxkcmVuW3RoaXMuX3BhcmVudFt0XV1bdF19LGkucHJvdG90eXBlLnBhcmVudD1mdW5jdGlvbih0KXtpZih0aGlzLl9pc0NvbXBvdW5kKXt2YXIgZT10aGlzLl9wYXJlbnRbdF07aWYoIlwwIiE9PWUpcmV0dXJuIGV9fSxpLnByb3RvdHlwZS5jaGlsZHJlbj1mdW5jdGlvbih0KXtpZihyLmlzVW5kZWZpbmVkKHQpJiYodD0iXDAiKSx0aGlzLl9pc0NvbXBvdW5kKXt2YXIgZT10aGlzLl9jaGlsZHJlblt0XTtpZihlKXJldHVybiByLmtleXMoZSl9ZWxzZXtpZigiXDAiPT09dClyZXR1cm4gdGhpcy5ub2RlcygpO2lmKHRoaXMuaGFzTm9kZSh0KSlyZXR1cm5bXX19LGkucHJvdG90eXBlLnByZWRlY2Vzc29ycz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9wcmVkc1t0XTtpZihlKXJldHVybiByLmtleXMoZSl9LGkucHJvdG90eXBlLnN1Y2Nlc3NvcnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc3Vjc1t0XTtpZihlKXJldHVybiByLmtleXMoZSl9LGkucHJvdG90eXBlLm5laWdoYm9ycz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnByZWRlY2Vzc29ycyh0KTtpZihlKXJldHVybiByLnVuaW9uKGUsdGhpcy5zdWNjZXNzb3JzKHQpKX0saS5wcm90b3R5cGUuaXNMZWFmPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09KHRoaXMuaXNEaXJlY3RlZCgpP3RoaXMuc3VjY2Vzc29ycyh0KTp0aGlzLm5laWdoYm9ycyh0KSkubGVuZ3RofSxpLnByb3RvdHlwZS5maWx0ZXJOb2Rlcz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih7ZGlyZWN0ZWQ6dGhpcy5faXNEaXJlY3RlZCxtdWx0aWdyYXBoOnRoaXMuX2lzTXVsdGlncmFwaCxjb21wb3VuZDp0aGlzLl9pc0NvbXBvdW5kfSk7ZS5zZXRHcmFwaCh0aGlzLmdyYXBoKCkpO3ZhciBuPXRoaXM7ci5lYWNoKHRoaXMuX25vZGVzLChmdW5jdGlvbihuLHIpe3QocikmJmUuc2V0Tm9kZShyLG4pfSkpLHIuZWFjaCh0aGlzLl9lZGdlT2JqcywoZnVuY3Rpb24odCl7ZS5oYXNOb2RlKHQudikmJmUuaGFzTm9kZSh0LncpJiZlLnNldEVkZ2UodCxuLmVkZ2UodCkpfSkpO3ZhciBpPXt9O3JldHVybiB0aGlzLl9pc0NvbXBvdW5kJiZyLmVhY2goZS5ub2RlcygpLChmdW5jdGlvbih0KXtlLnNldFBhcmVudCh0LGZ1bmN0aW9uIHQocil7dmFyIGE9bi5wYXJlbnQocik7cmV0dXJuIHZvaWQgMD09PWF8fGUuaGFzTm9kZShhKT8oaVtyXT1hLGEpOmEgaW4gaT9pW2FdOnQoYSl9KHQpKX0pKSxlfSxpLnByb3RvdHlwZS5zZXREZWZhdWx0RWRnZUxhYmVsPWZ1bmN0aW9uKHQpe3JldHVybiByLmlzRnVuY3Rpb24odCl8fCh0PXIuY29uc3RhbnQodCkpLHRoaXMuX2RlZmF1bHRFZGdlTGFiZWxGbj10LHRoaXN9LGkucHJvdG90eXBlLmVkZ2VDb3VudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lZGdlQ291bnR9LGkucHJvdG90eXBlLmVkZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHIudmFsdWVzKHRoaXMuX2VkZ2VPYmpzKX0saS5wcm90b3R5cGUuc2V0UGF0aD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMsaT1hcmd1bWVudHM7cmV0dXJuIHIucmVkdWNlKHQsKGZ1bmN0aW9uKHQscil7cmV0dXJuIGkubGVuZ3RoPjE/bi5zZXRFZGdlKHQscixlKTpuLnNldEVkZ2UodCxyKSxyfSkpLHRoaXN9LGkucHJvdG90eXBlLnNldEVkZ2U9ZnVuY3Rpb24oKXt2YXIgdCxlLG4saSxvPSExLHU9YXJndW1lbnRzWzBdOyJvYmplY3QiPT10eXBlb2YgdSYmbnVsbCE9PXUmJiJ2ImluIHU/KHQ9dS52LGU9dS53LG49dS5uYW1lLDI9PT1hcmd1bWVudHMubGVuZ3RoJiYoaT1hcmd1bWVudHNbMV0sbz0hMCkpOih0PXUsZT1hcmd1bWVudHNbMV0sbj1hcmd1bWVudHNbM10sYXJndW1lbnRzLmxlbmd0aD4yJiYoaT1hcmd1bWVudHNbMl0sbz0hMCkpLHQ9IiIrdCxlPSIiK2Usci5pc1VuZGVmaW5lZChuKXx8KG49IiIrbik7dmFyIGw9cyh0aGlzLl9pc0RpcmVjdGVkLHQsZSxuKTtpZihyLmhhcyh0aGlzLl9lZGdlTGFiZWxzLGwpKXJldHVybiBvJiYodGhpcy5fZWRnZUxhYmVsc1tsXT1pKSx0aGlzO2lmKCFyLmlzVW5kZWZpbmVkKG4pJiYhdGhpcy5faXNNdWx0aWdyYXBoKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNldCBhIG5hbWVkIGVkZ2Ugd2hlbiBpc011bHRpZ3JhcGggPSBmYWxzZSIpO3RoaXMuc2V0Tm9kZSh0KSx0aGlzLnNldE5vZGUoZSksdGhpcy5fZWRnZUxhYmVsc1tsXT1vP2k6dGhpcy5fZGVmYXVsdEVkZ2VMYWJlbEZuKHQsZSxuKTt2YXIgaD1jKHRoaXMuX2lzRGlyZWN0ZWQsdCxlLG4pO3JldHVybiB0PWgudixlPWgudyxPYmplY3QuZnJlZXplKGgpLHRoaXMuX2VkZ2VPYmpzW2xdPWgsYSh0aGlzLl9wcmVkc1tlXSx0KSxhKHRoaXMuX3N1Y3NbdF0sZSksdGhpcy5faW5bZV1bbF09aCx0aGlzLl9vdXRbdF1bbF09aCx0aGlzLl9lZGdlQ291bnQrKyx0aGlzfSxpLnByb3RvdHlwZS5lZGdlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0xPT09YXJndW1lbnRzLmxlbmd0aD91KHRoaXMuX2lzRGlyZWN0ZWQsYXJndW1lbnRzWzBdKTpzKHRoaXMuX2lzRGlyZWN0ZWQsdCxlLG4pO3JldHVybiB0aGlzLl9lZGdlTGFiZWxzW3JdfSxpLnByb3RvdHlwZS5oYXNFZGdlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT0xPT09YXJndW1lbnRzLmxlbmd0aD91KHRoaXMuX2lzRGlyZWN0ZWQsYXJndW1lbnRzWzBdKTpzKHRoaXMuX2lzRGlyZWN0ZWQsdCxlLG4pO3JldHVybiByLmhhcyh0aGlzLl9lZGdlTGFiZWxzLGkpfSxpLnByb3RvdHlwZS5yZW1vdmVFZGdlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0xPT09YXJndW1lbnRzLmxlbmd0aD91KHRoaXMuX2lzRGlyZWN0ZWQsYXJndW1lbnRzWzBdKTpzKHRoaXMuX2lzRGlyZWN0ZWQsdCxlLG4pLGk9dGhpcy5fZWRnZU9ianNbcl07cmV0dXJuIGkmJih0PWkudixlPWkudyxkZWxldGUgdGhpcy5fZWRnZUxhYmVsc1tyXSxkZWxldGUgdGhpcy5fZWRnZU9ianNbcl0sbyh0aGlzLl9wcmVkc1tlXSx0KSxvKHRoaXMuX3N1Y3NbdF0sZSksZGVsZXRlIHRoaXMuX2luW2VdW3JdLGRlbGV0ZSB0aGlzLl9vdXRbdF1bcl0sdGhpcy5fZWRnZUNvdW50LS0pLHRoaXN9LGkucHJvdG90eXBlLmluRWRnZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9pblt0XTtpZihuKXt2YXIgaT1yLnZhbHVlcyhuKTtyZXR1cm4gZT9yLmZpbHRlcihpLChmdW5jdGlvbih0KXtyZXR1cm4gdC52PT09ZX0pKTppfX0saS5wcm90b3R5cGUub3V0RWRnZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9vdXRbdF07aWYobil7dmFyIGk9ci52YWx1ZXMobik7cmV0dXJuIGU/ci5maWx0ZXIoaSwoZnVuY3Rpb24odCl7cmV0dXJuIHQudz09PWV9KSk6aX19LGkucHJvdG90eXBlLm5vZGVFZGdlcz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuaW5FZGdlcyh0LGUpO2lmKG4pcmV0dXJuIG4uY29uY2F0KHRoaXMub3V0RWRnZXModCxlKSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMykobigxOSksIk1hcCIpO3QuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMTgpLGk9bigyMjUpLGE9bigyMjcpLG89bigyMjgpLHM9bigyMjkpO2Z1bmN0aW9uIGModCl7dmFyIGU9LTEsbj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8bjspe3ZhciByPXRbZV07dGhpcy5zZXQoclswXSxyWzFdKX19Yy5wcm90b3R5cGUuY2xlYXI9cixjLnByb3RvdHlwZS5kZWxldGU9aSxjLnByb3RvdHlwZS5nZXQ9YSxjLnByb3RvdHlwZS5oYXM9byxjLnByb3RvdHlwZS5zZXQ9cyx0LmV4cG9ydHM9Y30sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49LTEscj1udWxsPT10PzA6dC5sZW5ndGg7KytuPHImJiExIT09ZSh0W25dLG4sdCk7KTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmdD4tMSYmdCUxPT0wJiZ0PD05MDA3MTk5MjU0NzQwOTkxfX0sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbih0KXt2YXIgcj1uKDExMCksaT1lJiYhZS5ub2RlVHlwZSYmZSxhPWkmJiJvYmplY3QiPT10eXBlb2YgdCYmdCYmIXQubm9kZVR5cGUmJnQsbz1hJiZhLmV4cG9ydHM9PT1pJiZyLnByb2Nlc3Mscz1mdW5jdGlvbigpe3RyeXt2YXIgdD1hJiZhLnJlcXVpcmUmJmEucmVxdWlyZSgidXRpbCIpLnR5cGVzO3JldHVybiB0fHxvJiZvLmJpbmRpbmcmJm8uYmluZGluZygidXRpbCIpfWNhdGNoKHQpe319KCk7dC5leHBvcnRzPXN9KS5jYWxsKHRoaXMsbig2KSh0KSl9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYzKSxpPW4oMjM1KSxhPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFyKHQpKXJldHVybiBpKHQpO3ZhciBlPVtdO2Zvcih2YXIgbiBpbiBPYmplY3QodCkpYS5jYWxsKHQsbikmJiJjb25zdHJ1Y3RvciIhPW4mJmUucHVzaChuKTtyZXR1cm4gZX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDExNyksaT1uKDExOCksYT1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLG89T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxzPW8/ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/W106KHQ9T2JqZWN0KHQpLHIobyh0KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGEuY2FsbCh0LGUpfSkpKX06aTt0LmV4cG9ydHM9c30sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49LTEscj1lLmxlbmd0aCxpPXQubGVuZ3RoOysrbjxyOyl0W2krbl09ZVtuXTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEyMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyB0LmNvbnN0cnVjdG9yKHQuYnl0ZUxlbmd0aCk7cmV0dXJuIG5ldyByKGUpLnNldChuZXcgcih0KSksZX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX19LGZ1bmN0aW9uKHQsZSxuKXt0LmV4cG9ydHM9bigxMjcpfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big5MCksaT1uKDMwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmcih0LGUsaSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNTQpKCk7dC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPS0xLG49QXJyYXkodC5zaXplKTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXtuWysrZV09dH0pKSxufX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjYpLGk9big1MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTAsYT0oZT1yKGUsdCkpLmxlbmd0aDtudWxsIT10JiZuPGE7KXQ9dFtpKGVbbisrXSldO3JldHVybiBuJiZuPT1hP3Q6dm9pZCAwfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNSksaT1uKDQzKSxhPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLG89L15cdyokLzt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZihyKHQpKXJldHVybiExO3ZhciBuPXR5cGVvZiB0O3JldHVybiEoIm51bWJlciIhPW4mJiJzeW1ib2wiIT1uJiYiYm9vbGVhbiIhPW4mJm51bGwhPXQmJiFpKHQpKXx8KG8udGVzdCh0KXx8IWEudGVzdCh0KXx8bnVsbCE9ZSYmdCBpbiBPYmplY3QoZSkpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjc2KSxpPW4oMTM4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbCE9dCYmaSh0LGUscil9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NSksaT1uKDI4OCk7dC5leHBvcnRzPWZ1bmN0aW9uIHQoZSxuLGEsbyxzKXt2YXIgYz0tMSx1PWUubGVuZ3RoO2ZvcihhfHwoYT1pKSxzfHwocz1bXSk7KytjPHU7KXt2YXIgbD1lW2NdO24+MCYmYShsKT9uPjE/dChsLG4tMSxhLG8scyk6cihzLGwpOm98fChzW3MubGVuZ3RoXT1sKX1yZXR1cm4gc319LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgaT0tMSxhPXQubGVuZ3RoOysraTxhOyl7dmFyIG89dFtpXSxzPWUobyk7aWYobnVsbCE9cyYmKHZvaWQgMD09PWM/cz09cyYmIXIocyk6bihzLGMpKSl2YXIgYz1zLHU9b31yZXR1cm4gdX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXQueCxhPXQueSxvPWktci54LHM9YS1yLnksYz1NYXRoLnNxcnQoZSplKnMqcytuKm4qbypvKSx1PU1hdGguYWJzKGUqbipvL2MpO3IueDxpJiYodT0tdSk7dmFyIGw9TWF0aC5hYnMoZSpuKnMvYyk7ci55PGEmJihsPS1sKTtyZXR1cm57eDppK3UseTphK2x9fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzczKSxpPW4oNTEpLGE9bigzNzQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIG89ZS5sYWJlbCxzPXQuYXBwZW5kKCJnIik7InN2ZyI9PT1lLmxhYmVsVHlwZT9hKHMsZSk6InN0cmluZyIhPXR5cGVvZiBvfHwiaHRtbCI9PT1lLmxhYmVsVHlwZT9pKHMsZSk6cihzLGUpO3ZhciBjLHU9cy5ub2RlKCkuZ2V0QkJveCgpO3N3aXRjaChuKXtjYXNlInRvcCI6Yz0tZS5oZWlnaHQvMjticmVhaztjYXNlImJvdHRvbSI6Yz1lLmhlaWdodC8yLXUuaGVpZ2h0O2JyZWFrO2RlZmF1bHQ6Yz0tdS5oZWlnaHQvMn1yZXR1cm4gcy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistdS53aWR0aC8yKyIsIitjKyIpIiksc319LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTApLGk9big0NiksYT1uKDE3OCksbz17cmU6L14jKCg/OlthLWYwLTldezJ9KXsyLDR9fFthLWYwLTldezN9KSQvaSxwYXJzZTpmdW5jdGlvbih0KXtpZigzNT09PXQuY2hhckNvZGVBdCgwKSl7dmFyIGU9dC5tYXRjaChvLnJlKTtpZihlKXt2YXIgbj1lWzFdLHI9cGFyc2VJbnQobiwxNiksYT1uLmxlbmd0aCxzPWElND09MCxjPWE+NCx1PWM/MToxNyxsPWM/ODo0LGg9cz8wOi0xLGY9Yz8yNTU6MTU7cmV0dXJuIGkuZGVmYXVsdC5zZXQoe3I6KHI+PmwqKGgrMykmZikqdSxnOihyPj5sKihoKzIpJmYpKnUsYjoocj4+bCooaCsxKSZmKSp1LGE6cz8ociZmKSp1LzI1NToxfSx0KX19fSxzdHJpbmdpZnk6ZnVuY3Rpb24odCl7cmV0dXJuIHQuYTwxPyIjIithLkRFQzJIRVhbTWF0aC5yb3VuZCh0LnIpXSthLkRFQzJIRVhbTWF0aC5yb3VuZCh0LmcpXSthLkRFQzJIRVhbTWF0aC5yb3VuZCh0LmIpXStyLmRlZmF1bHQudW5pdC5mcmFjMmhleCh0LmEpOiIjIithLkRFQzJIRVhbTWF0aC5yb3VuZCh0LnIpXSthLkRFQzJIRVhbTWF0aC5yb3VuZCh0LmcpXSthLkRFQzJIRVhbTWF0aC5yb3VuZCh0LmIpXX19O2UuZGVmYXVsdD1vfSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDEwKSxpPW4oNDYpLGE9bigxNik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSxuLG8pe3ZvaWQgMD09PW8mJihvPTEpO3ZhciBzPWkuZGVmYXVsdC5zZXQoe2g6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuaCh0KSxzOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLnMoZSksbDpyLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5sKG4pLGE6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuYShvKX0pO3JldHVybiBhLmRlZmF1bHQuc3RyaW5naWZ5KHMpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigyOSk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQodCwiYSIpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxMCksaT1uKDE2KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCl7dmFyIGU9aS5kZWZhdWx0LnBhcnNlKHQpLG49ZS5yLGE9ZS5nLG89ZS5iLHM9LjIxMjYqci5kZWZhdWx0LmNoYW5uZWwudG9MaW5lYXIobikrLjcxNTIqci5kZWZhdWx0LmNoYW5uZWwudG9MaW5lYXIoYSkrLjA3MjIqci5kZWZhdWx0LmNoYW5uZWwudG9MaW5lYXIobyk7cmV0dXJuIHIuZGVmYXVsdC5sYW5nLnJvdW5kKHMpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxMDIpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQpPj0uNX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMzIpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUpe3JldHVybiByLmRlZmF1bHQodCwiYSIsZSl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDMyKTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5kZWZhdWx0KHQsImEiLC1lKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTYpLGk9big1Myk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSl7dmFyIG49ci5kZWZhdWx0LnBhcnNlKHQpLGE9e307Zm9yKHZhciBvIGluIGUpZVtvXSYmKGFbb109bltvXStlW29dKTtyZXR1cm4gaS5kZWZhdWx0KHQsYSl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDE2KSxpPW4oNTIpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUsbil7dm9pZCAwPT09biYmKG49NTApO3ZhciBhPXIuZGVmYXVsdC5wYXJzZSh0KSxvPWEucixzPWEuZyxjPWEuYix1PWEuYSxsPXIuZGVmYXVsdC5wYXJzZShlKSxoPWwucixmPWwuZyxkPWwuYixwPWwuYSx5PW4vMTAwLGc9Mip5LTEsdj11LXAsbT0oKGcqdj09LTE/ZzooZyt2KS8oMStnKnYpKSsxKS8yLGI9MS1tLHg9byptK2gqYixfPXMqbStmKmIsaz1jKm0rZCpiLHc9dSp5K3AqKDEteSk7cmV0dXJuIGkuZGVmYXVsdCh4LF8sayx3KX19LGZ1bmN0aW9uKHQsZSl7fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1NCksaT1uKDgwKSxhPW4oNTkpLG89bigyMzApLHM9bigyMzYpLGM9bigxMTUpLHU9bigxMTYpLGw9bigyMzkpLGg9bigyNDApLGY9bigxMjApLGQ9bigyNDEpLHA9big0MikseT1uKDI0NSksZz1uKDI0Niksdj1uKDEyNSksbT1uKDUpLGI9big0MCkseD1uKDI1MCksXz1uKDEzKSxrPW4oMjUyKSx3PW4oMzApLEU9e307RVsiW29iamVjdCBBcmd1bWVudHNdIl09RVsiW29iamVjdCBBcnJheV0iXT1FWyJbb2JqZWN0IEFycmF5QnVmZmVyXSJdPUVbIltvYmplY3QgRGF0YVZpZXddIl09RVsiW29iamVjdCBCb29sZWFuXSJdPUVbIltvYmplY3QgRGF0ZV0iXT1FWyJbb2JqZWN0IEZsb2F0MzJBcnJheV0iXT1FWyJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXT1FWyJbb2JqZWN0IEludDhBcnJheV0iXT1FWyJbb2JqZWN0IEludDE2QXJyYXldIl09RVsiW29iamVjdCBJbnQzMkFycmF5XSJdPUVbIltvYmplY3QgTWFwXSJdPUVbIltvYmplY3QgTnVtYmVyXSJdPUVbIltvYmplY3QgT2JqZWN0XSJdPUVbIltvYmplY3QgUmVnRXhwXSJdPUVbIltvYmplY3QgU2V0XSJdPUVbIltvYmplY3QgU3RyaW5nXSJdPUVbIltvYmplY3QgU3ltYm9sXSJdPUVbIltvYmplY3QgVWludDhBcnJheV0iXT1FWyJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSJdPUVbIltvYmplY3QgVWludDE2QXJyYXldIl09RVsiW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxFWyJbb2JqZWN0IEVycm9yXSJdPUVbIltvYmplY3QgRnVuY3Rpb25dIl09RVsiW29iamVjdCBXZWFrTWFwXSJdPSExLHQuZXhwb3J0cz1mdW5jdGlvbiB0KGUsbixULEMsUyxBKXt2YXIgTSxPPTEmbixCPTImbixOPTQmbjtpZihUJiYoTT1TP1QoZSxDLFMsQSk6VChlKSksdm9pZCAwIT09TSlyZXR1cm4gTTtpZighXyhlKSlyZXR1cm4gZTt2YXIgRD1tKGUpO2lmKEQpe2lmKE09eShlKSwhTylyZXR1cm4gdShlLE0pfWVsc2V7dmFyIEw9cChlKSxJPSJbb2JqZWN0IEZ1bmN0aW9uXSI9PUx8fCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PUw7aWYoYihlKSlyZXR1cm4gYyhlLE8pO2lmKCJbb2JqZWN0IE9iamVjdF0iPT1MfHwiW29iamVjdCBBcmd1bWVudHNdIj09THx8SSYmIVMpe2lmKE09Qnx8ST97fTp2KGUpLCFPKXJldHVybiBCP2goZSxzKE0sZSkpOmwoZSxvKE0sZSkpfWVsc2V7aWYoIUVbTF0pcmV0dXJuIFM/ZTp7fTtNPWcoZSxMLE8pfX1BfHwoQT1uZXcgcik7dmFyIFI9QS5nZXQoZSk7aWYoUilyZXR1cm4gUjtBLnNldChlLE0pLGsoZSk/ZS5mb3JFYWNoKChmdW5jdGlvbihyKXtNLmFkZCh0KHIsbixULHIsZSxBKSl9KSk6eChlKSYmZS5mb3JFYWNoKChmdW5jdGlvbihyLGkpe00uc2V0KGksdChyLG4sVCxpLGUsQSkpfSkpO3ZhciBGPU4/Qj9kOmY6Qj9rZXlzSW46dyxQPUQ/dm9pZCAwOkYoZSk7cmV0dXJuIGkoUHx8ZSwoZnVuY3Rpb24ocixpKXtQJiYocj1lW2k9cl0pLGEoTSxpLHQocixuLFQsaSxlLEEpKX0pKSxNfX0sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbihlKXt2YXIgbj0ib2JqZWN0Ij09dHlwZW9mIGUmJmUmJmUuT2JqZWN0PT09T2JqZWN0JiZlO3QuZXhwb3J0cz1ufSkuY2FsbCh0aGlzLG4oMjEyKSl9LGZ1bmN0aW9uKHQsZSl7dmFyIG49RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihudWxsIT10KXt0cnl7cmV0dXJuIG4uY2FsbCh0KX1jYXRjaCh0KXt9dHJ5e3JldHVybiB0KyIifWNhdGNoKHQpe319cmV0dXJuIiJ9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMyksaT1mdW5jdGlvbigpe3RyeXt2YXIgdD1yKE9iamVjdCwiZGVmaW5lUHJvcGVydHkiKTtyZXR1cm4gdCh7fSwiIix7fSksdH1jYXRjaCh0KXt9fSgpO3QuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMzEpLGk9big0OCksYT1uKDUpLG89big0MCkscz1uKDYxKSxjPW4oNDkpLHU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1hKHQpLGw9IW4mJmkodCksaD0hbiYmIWwmJm8odCksZj0hbiYmIWwmJiFoJiZjKHQpLGQ9bnx8bHx8aHx8ZixwPWQ/cih0Lmxlbmd0aCxTdHJpbmcpOltdLHk9cC5sZW5ndGg7Zm9yKHZhciBnIGluIHQpIWUmJiF1LmNhbGwodCxnKXx8ZCYmKCJsZW5ndGgiPT1nfHxoJiYoIm9mZnNldCI9PWd8fCJwYXJlbnQiPT1nKXx8ZiYmKCJidWZmZXIiPT1nfHwiYnl0ZUxlbmd0aCI9PWd8fCJieXRlT2Zmc2V0Ij09Zyl8fHMoZyx5KSl8fHAucHVzaChnKTtyZXR1cm4gcH19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0KGUobikpfX19LGZ1bmN0aW9uKHQsZSxuKXsoZnVuY3Rpb24odCl7dmFyIHI9bigxOSksaT1lJiYhZS5ub2RlVHlwZSYmZSxhPWkmJiJvYmplY3QiPT10eXBlb2YgdCYmdCYmIXQubm9kZVR5cGUmJnQsbz1hJiZhLmV4cG9ydHM9PT1pP3IuQnVmZmVyOnZvaWQgMCxzPW8/by5hbGxvY1Vuc2FmZTp2b2lkIDA7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoZSlyZXR1cm4gdC5zbGljZSgpO3ZhciBuPXQubGVuZ3RoLHI9cz9zKG4pOm5ldyB0LmNvbnN0cnVjdG9yKG4pO3JldHVybiB0LmNvcHkocikscn19KS5jYWxsKHRoaXMsbig2KSh0KSl9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49LTEscj10Lmxlbmd0aDtmb3IoZXx8KGU9QXJyYXkocikpOysrbjxyOyllW25dPXRbbl07cmV0dXJuIGV9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMSxyPW51bGw9PXQ/MDp0Lmxlbmd0aCxpPTAsYT1bXTsrK248cjspe3ZhciBvPXRbbl07ZShvLG4sdCkmJihhW2krK109byl9cmV0dXJuIGF9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybltdfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODUpLGk9big2NCksYT1uKDg0KSxvPW4oMTE4KSxzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM/ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdO3Q7KXIoZSxhKHQpKSx0PWkodCk7cmV0dXJuIGV9Om87dC5leHBvcnRzPXN9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEyMSksaT1uKDg0KSxhPW4oMzApO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcih0LGEsaSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NSksaT1uKDUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGE9ZSh0KTtyZXR1cm4gaSh0KT9hOnIoYSxuKHQpKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMzKShuKDE5KSwiU2V0Iik7dC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE5KS5VaW50OEFycmF5O3QuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big4Nik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZT9yKHQuYnVmZmVyKTp0LmJ1ZmZlcjtyZXR1cm4gbmV3IHQuY29uc3RydWN0b3Iobix0LmJ5dGVPZmZzZXQsdC5sZW5ndGgpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTI2KSxpPW4oNjQpLGE9big2Myk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0LmNvbnN0cnVjdG9yfHxhKHQpP3t9OnIoaSh0KSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMyksaT1PYmplY3QuY3JlYXRlLGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiBmdW5jdGlvbihlKXtpZighcihlKSlyZXR1cm57fTtpZihpKXJldHVybiBpKGUpO3QucHJvdG90eXBlPWU7dmFyIG49bmV3IHQ7cmV0dXJuIHQucHJvdG90eXBlPXZvaWQgMCxufX0oKTt0LmV4cG9ydHM9YX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODApLGk9big2NSksYT1uKDEyOCksbz1uKDUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybihvKHQpP3I6aSkodCxhKGUpKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTE3KSxpPW4oMjU2KSxhPW4oMjYpLG89big1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4obyh0KT9yOmkpKHQsYShlLDMpKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI1OSksaT1uKDIxKTt0LmV4cG9ydHM9ZnVuY3Rpb24gdChlLG4sYSxvLHMpe3JldHVybiBlPT09bnx8KG51bGw9PWV8fG51bGw9PW58fCFpKGUpJiYhaShuKT9lIT1lJiZuIT1uOnIoZSxuLGEsbyx0LHMpKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEzMiksaT1uKDI2MiksYT1uKDEzMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLG8scyxjKXt2YXIgdT0xJm4sbD10Lmxlbmd0aCxoPWUubGVuZ3RoO2lmKGwhPWgmJiEodSYmaD5sKSlyZXR1cm4hMTt2YXIgZj1jLmdldCh0KTtpZihmJiZjLmdldChlKSlyZXR1cm4gZj09ZTt2YXIgZD0tMSxwPSEwLHk9MiZuP25ldyByOnZvaWQgMDtmb3IoYy5zZXQodCxlKSxjLnNldChlLHQpOysrZDxsOyl7dmFyIGc9dFtkXSx2PWVbZF07aWYobyl2YXIgbT11P28odixnLGQsZSx0LGMpOm8oZyx2LGQsdCxlLGMpO2lmKHZvaWQgMCE9PW0pe2lmKG0pY29udGludWU7cD0hMTticmVha31pZih5KXtpZighaShlLChmdW5jdGlvbih0LGUpe2lmKCFhKHksZSkmJihnPT09dHx8cyhnLHQsbixvLGMpKSlyZXR1cm4geS5wdXNoKGUpfSkpKXtwPSExO2JyZWFrfX1lbHNlIGlmKGchPT12JiYhcyhnLHYsbixvLGMpKXtwPSExO2JyZWFrfX1yZXR1cm4gYy5kZWxldGUodCksYy5kZWxldGUoZSkscH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDc5KSxpPW4oMjYwKSxhPW4oMjYxKTtmdW5jdGlvbiBvKHQpe3ZhciBlPS0xLG49bnVsbD09dD8wOnQubGVuZ3RoO2Zvcih0aGlzLl9fZGF0YV9fPW5ldyByOysrZTxuOyl0aGlzLmFkZCh0W2VdKX1vLnByb3RvdHlwZS5hZGQ9by5wcm90b3R5cGUucHVzaD1pLG8ucHJvdG90eXBlLmhhcz1hLHQuZXhwb3J0cz1vfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0LmhhcyhlKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PXQmJiFyKHQpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG51bGwhPW4mJihuW3RdPT09ZSYmKHZvaWQgMCE9PWV8fHQgaW4gT2JqZWN0KG4pKSl9fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjcyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/IiI6cih0KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI3MyksaT1uKDEzOCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGwhPXQmJmkodCxlLHIpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjYpLGk9big0OCksYT1uKDUpLG89big2MSkscz1uKDgxKSxjPW4oNTApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciB1PS0xLGw9KGU9cihlLHQpKS5sZW5ndGgsaD0hMTsrK3U8bDspe3ZhciBmPWMoZVt1XSk7aWYoIShoPW51bGwhPXQmJm4odCxmKSkpYnJlYWs7dD10W2ZdfXJldHVybiBofHwrK3UhPWw/aDohIShsPW51bGw9PXQ/MDp0Lmxlbmd0aCkmJnMobCkmJm8oZixsKSYmKGEodCl8fGkodCkpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3ZvaWQgMDplW3RdfX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjcpLGk9bigyNiksYT1uKDE0Miksbz1uKDUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybihvKHQpP3I6YSkodCxpKGUsMykpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjUpLGk9bigyNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49LTEsYT1pKHQpP0FycmF5KHQubGVuZ3RoKTpbXTtyZXR1cm4gcih0LChmdW5jdGlvbih0LHIsaSl7YVsrK25dPWUodCxyLGkpfSkpLGF9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNzgpLGk9big2NSksYT1uKDI2KSxvPW4oMjc5KSxzPW4oNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgYz1zKHQpP3I6byx1PWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gYyh0LGEoZSw0KSxuLHUsaSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyODkpLGk9TWF0aC5tYXg7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZT1pKHZvaWQgMD09PWU/dC5sZW5ndGgtMTplLDApLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cyxvPS0xLHM9aShhLmxlbmd0aC1lLDApLGM9QXJyYXkocyk7KytvPHM7KWNbb109YVtlK29dO289LTE7Zm9yKHZhciB1PUFycmF5KGUrMSk7KytvPGU7KXVbb109YVtvXTtyZXR1cm4gdVtlXT1uKGMpLHIodCx0aGlzLHUpfX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI5MCksaT1uKDI5MSkocik7dC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLHIpe2Zvcih2YXIgaT10Lmxlbmd0aCxhPW4rKHI/MTotMSk7cj9hLS06KythPGk7KWlmKGUodFthXSxhLHQpKXJldHVybiBhO3JldHVybi0xfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjUpLGk9bigyMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQpJiZyKHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzAwKSxpPW4oMzApO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9bXTpyKHQsaSh0KSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMiksaT1uKDE1MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiBmdW5jdGlvbih0LGUsbixyKXt2YXIgYSxvLHM9e30sYz1uZXcgaSx1PWZ1bmN0aW9uKHQpe3ZhciBlPXQudiE9PWE/dC52OnQudyxyPXNbZV0saT1uKHQpLHU9by5kaXN0YW5jZStpO2lmKGk8MCl0aHJvdyBuZXcgRXJyb3IoImRpamtzdHJhIGRvZXMgbm90IGFsbG93IG5lZ2F0aXZlIGVkZ2Ugd2VpZ2h0cy4gQmFkIGVkZ2U6ICIrdCsiIFdlaWdodDogIitpKTt1PHIuZGlzdGFuY2UmJihyLmRpc3RhbmNlPXUsci5wcmVkZWNlc3Nvcj1hLGMuZGVjcmVhc2UoZSx1KSl9O3Qubm9kZXMoKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj10PT09ZT8wOk51bWJlci5QT1NJVElWRV9JTkZJTklUWTtzW3RdPXtkaXN0YW5jZTpufSxjLmFkZCh0LG4pfSkpO2Zvcig7Yy5zaXplKCk+MCYmKGE9Yy5yZW1vdmVNaW4oKSwobz1zW2FdKS5kaXN0YW5jZSE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7KXIoYSkuZm9yRWFjaCh1KTtyZXR1cm4gc30odCxTdHJpbmcoZSksbnx8YSxyfHxmdW5jdGlvbihlKXtyZXR1cm4gdC5vdXRFZGdlcyhlKX0pfTt2YXIgYT1yLmNvbnN0YW50KDEpfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMik7ZnVuY3Rpb24gaSgpe3RoaXMuX2Fycj1bXSx0aGlzLl9rZXlJbmRpY2VzPXt9fXQuZXhwb3J0cz1pLGkucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXJyLmxlbmd0aH0saS5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcnIubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXl9KSl9LGkucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gci5oYXModGhpcy5fa2V5SW5kaWNlcyx0KX0saS5wcm90b3R5cGUucHJpb3JpdHk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fa2V5SW5kaWNlc1t0XTtpZih2b2lkIDAhPT1lKXJldHVybiB0aGlzLl9hcnJbZV0ucHJpb3JpdHl9LGkucHJvdG90eXBlLm1pbj1mdW5jdGlvbigpe2lmKDA9PT10aGlzLnNpemUoKSl0aHJvdyBuZXcgRXJyb3IoIlF1ZXVlIHVuZGVyZmxvdyIpO3JldHVybiB0aGlzLl9hcnJbMF0ua2V5fSxpLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9rZXlJbmRpY2VzO2lmKHQ9U3RyaW5nKHQpLCFyLmhhcyhuLHQpKXt2YXIgaT10aGlzLl9hcnIsYT1pLmxlbmd0aDtyZXR1cm4gblt0XT1hLGkucHVzaCh7a2V5OnQscHJpb3JpdHk6ZX0pLHRoaXMuX2RlY3JlYXNlKGEpLCEwfXJldHVybiExfSxpLnByb3RvdHlwZS5yZW1vdmVNaW49ZnVuY3Rpb24oKXt0aGlzLl9zd2FwKDAsdGhpcy5fYXJyLmxlbmd0aC0xKTt2YXIgdD10aGlzLl9hcnIucG9wKCk7cmV0dXJuIGRlbGV0ZSB0aGlzLl9rZXlJbmRpY2VzW3Qua2V5XSx0aGlzLl9oZWFwaWZ5KDApLHQua2V5fSxpLnByb3RvdHlwZS5kZWNyZWFzZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2tleUluZGljZXNbdF07aWYoZT50aGlzLl9hcnJbbl0ucHJpb3JpdHkpdGhyb3cgbmV3IEVycm9yKCJOZXcgcHJpb3JpdHkgaXMgZ3JlYXRlciB0aGFuIGN1cnJlbnQgcHJpb3JpdHkuIEtleTogIit0KyIgT2xkOiAiK3RoaXMuX2FycltuXS5wcmlvcml0eSsiIE5ldzogIitlKTt0aGlzLl9hcnJbbl0ucHJpb3JpdHk9ZSx0aGlzLl9kZWNyZWFzZShuKX0saS5wcm90b3R5cGUuX2hlYXBpZnk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYXJyLG49Mip0LHI9bisxLGk9dDtuPGUubGVuZ3RoJiYoaT1lW25dLnByaW9yaXR5PGVbaV0ucHJpb3JpdHk/bjppLHI8ZS5sZW5ndGgmJihpPWVbcl0ucHJpb3JpdHk8ZVtpXS5wcmlvcml0eT9yOmkpLGkhPT10JiYodGhpcy5fc3dhcCh0LGkpLHRoaXMuX2hlYXBpZnkoaSkpKX0saS5wcm90b3R5cGUuX2RlY3JlYXNlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPXRoaXMuX2FycixyPW5bdF0ucHJpb3JpdHk7MCE9PXQmJiEobltlPXQ+PjFdLnByaW9yaXR5PHIpOyl0aGlzLl9zd2FwKHQsZSksdD1lfSxpLnByb3RvdHlwZS5fc3dhcD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2FycixyPXRoaXMuX2tleUluZGljZXMsaT1uW3RdLGE9bltlXTtuW3RdPWEsbltlXT1pLHJbYS5rZXldPXQscltpLmtleV09ZX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9MCxuPVtdLGk9e30sYT1bXTtyZXR1cm4gdC5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKG8pe3IuaGFzKGksbyl8fGZ1bmN0aW9uIG8ocyl7dmFyIGM9aVtzXT17b25TdGFjazohMCxsb3dsaW5rOmUsaW5kZXg6ZSsrfTtpZihuLnB1c2gocyksdC5zdWNjZXNzb3JzKHMpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3IuaGFzKGksdCk/aVt0XS5vblN0YWNrJiYoYy5sb3dsaW5rPU1hdGgubWluKGMubG93bGluayxpW3RdLmluZGV4KSk6KG8odCksYy5sb3dsaW5rPU1hdGgubWluKGMubG93bGluayxpW3RdLmxvd2xpbmspKX0pKSxjLmxvd2xpbms9PT1jLmluZGV4KXt2YXIgdSxsPVtdO2Rve3U9bi5wb3AoKSxpW3VdLm9uU3RhY2s9ITEsbC5wdXNoKHUpfXdoaWxlKHMhPT11KTthLnB1c2gobCl9fShvKX0pKSxhfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTIpO2Z1bmN0aW9uIGkodCl7dmFyIGU9e30sbj17fSxpPVtdO2lmKHIuZWFjaCh0LnNpbmtzKCksKGZ1bmN0aW9uIG8ocyl7aWYoci5oYXMobixzKSl0aHJvdyBuZXcgYTtyLmhhcyhlLHMpfHwobltzXT0hMCxlW3NdPSEwLHIuZWFjaCh0LnByZWRlY2Vzc29ycyhzKSxvKSxkZWxldGUgbltzXSxpLnB1c2gocykpfSkpLHIuc2l6ZShlKSE9PXQubm9kZUNvdW50KCkpdGhyb3cgbmV3IGE7cmV0dXJuIGl9ZnVuY3Rpb24gYSgpe310LmV4cG9ydHM9aSxpLkN5Y2xlRXhjZXB0aW9uPWEsYS5wcm90b3R5cGU9bmV3IEVycm9yfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtyLmlzQXJyYXkoZSl8fChlPVtlXSk7dmFyIGk9KHQuaXNEaXJlY3RlZCgpP3Quc3VjY2Vzc29yczp0Lm5laWdoYm9ycykuYmluZCh0KSxhPVtdLG89e307cmV0dXJuIHIuZWFjaChlLChmdW5jdGlvbihlKXtpZighdC5oYXNOb2RlKGUpKXRocm93IG5ldyBFcnJvcigiR3JhcGggZG9lcyBub3QgaGF2ZSBub2RlOiAiK2UpOyFmdW5jdGlvbiB0KGUsbixpLGEsbyxzKXtyLmhhcyhhLG4pfHwoYVtuXT0hMCxpfHxzLnB1c2gobiksci5lYWNoKG8obiksKGZ1bmN0aW9uKG4pe3QoZSxuLGksYSxvLHMpfSkpLGkmJnMucHVzaChuKSl9KHQsZSwicG9zdCI9PT1uLG8saSxhKX0pKSxhfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByO3RyeXtyPW4oOSl9Y2F0Y2godCl7fXJ8fChyPXdpbmRvdy5kYWdyZSksdC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDY4KSxpPW4oMzcpLGE9big2OSksbz1uKDQxKSxzPU9iamVjdC5wcm90b3R5cGUsYz1zLmhhc093blByb3BlcnR5LHU9cigoZnVuY3Rpb24odCxlKXt0PU9iamVjdCh0KTt2YXIgbj0tMSxyPWUubGVuZ3RoLHU9cj4yP2VbMl06dm9pZCAwO2Zvcih1JiZhKGVbMF0sZVsxXSx1KSYmKHI9MSk7KytuPHI7KWZvcih2YXIgbD1lW25dLGg9byhsKSxmPS0xLGQ9aC5sZW5ndGg7KytmPGQ7KXt2YXIgcD1oW2ZdLHk9dFtwXTsodm9pZCAwPT09eXx8aSh5LHNbcF0pJiYhYy5jYWxsKHQscCkpJiYodFtwXT1sW3BdKX1yZXR1cm4gdH0pKTt0LmV4cG9ydHM9dX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzE5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/KHQ9cih0KSk9PT0xLzB8fHQ9PT0tMS8wPzE3OTc2OTMxMzQ4NjIzMTU3ZTI5MioodDwwPy0xOjEpOnQ9PXQ/dDowOjA9PT10P3Q6MH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDk1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuKG51bGw9PXQ/MDp0Lmxlbmd0aCk/cih0LDEpOltdfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjApLGk9bigzNyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXsodm9pZCAwPT09bnx8aSh0W2VdLG4pKSYmKHZvaWQgMCE9PW58fGUgaW4gdCl8fHIodCxlLG4pfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzQpLGk9big2NCksYT1uKDIxKSxvPUZ1bmN0aW9uLnByb3RvdHlwZSxzPU9iamVjdC5wcm90b3R5cGUsYz1vLnRvU3RyaW5nLHU9cy5oYXNPd25Qcm9wZXJ0eSxsPWMuY2FsbChPYmplY3QpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighYSh0KXx8IltvYmplY3QgT2JqZWN0XSIhPXIodCkpcmV0dXJuITE7dmFyIGU9aSh0KTtpZihudWxsPT09ZSlyZXR1cm4hMDt2YXIgbj11LmNhbGwoZSwiY29uc3RydWN0b3IiKSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgbiYmbiBpbnN0YW5jZW9mIG4mJmMuY2FsbChuKT09bH19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoKCJjb25zdHJ1Y3RvciIhPT1lfHwiZnVuY3Rpb24iIT10eXBlb2YgdFtlXSkmJiJfX3Byb3RvX18iIT1lKXJldHVybiB0W2VdfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdDxlfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzMzKSxpPW4oMzM2KSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD97fTpyKHQsZSl9KSk7dC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMzNykoKTt0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTM2KSxpPTA7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPSsraTtyZXR1cm4gcih0KStlfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQpLGk9bigyMCkuR3JhcGgsYT1uKDcwKS5zbGFjaztmdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHIuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uIG4oaSl7ci5mb3JFYWNoKGUubm9kZUVkZ2VzKGkpLChmdW5jdGlvbihyKXt2YXIgbz1yLnYscz1pPT09bz9yLnc6bzt0Lmhhc05vZGUocyl8fGEoZSxyKXx8KHQuc2V0Tm9kZShzLHt9KSx0LnNldEVkZ2UoaSxzLHt9KSxuKHMpKX0pKX0pKSx0Lm5vZGVDb3VudCgpfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gci5taW5CeShlLmVkZ2VzKCksKGZ1bmN0aW9uKG4pe2lmKHQuaGFzTm9kZShuLnYpIT09dC5oYXNOb2RlKG4udykpcmV0dXJuIGEoZSxuKX0pKX1mdW5jdGlvbiBjKHQsZSxuKXtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbih0KXtlLm5vZGUodCkucmFuays9bn0pKX10LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUsbixyPW5ldyBpKHtkaXJlY3RlZDohMX0pLHU9dC5ub2RlcygpWzBdLGw9dC5ub2RlQ291bnQoKTtyLnNldE5vZGUodSx7fSk7Zm9yKDtvKHIsdCk8bDspZT1zKHIsdCksbj1yLmhhc05vZGUoZS52KT9hKHQsZSk6LWEodCxlKSxjKHIsdCxuKTtyZXR1cm4gcn19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuaW50ZXJzZWN0KGUpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHIodCxlLGUsbil9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzNzApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGk9dC54LGE9dC55LG89W10scz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksYz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7ZS5mb3JFYWNoKChmdW5jdGlvbih0KXtzPU1hdGgubWluKHMsdC54KSxjPU1hdGgubWluKGMsdC55KX0pKTtmb3IodmFyIHU9aS10LndpZHRoLzItcyxsPWEtdC5oZWlnaHQvMi1jLGg9MDtoPGUubGVuZ3RoO2grKyl7dmFyIGY9ZVtoXSxkPWVbaDxlLmxlbmd0aC0xP2grMTowXSxwPXIodCxuLHt4OnUrZi54LHk6bCtmLnl9LHt4OnUrZC54LHk6bCtkLnl9KTtwJiZvLnB1c2gocCl9aWYoIW8ubGVuZ3RoKXJldHVybiBjb25zb2xlLmxvZygiTk8gSU5URVJTRUNUSU9OIEZPVU5ELCBSRVRVUk4gTk9ERSBDRU5URVIiLHQpLHQ7by5sZW5ndGg+MSYmby5zb3J0KChmdW5jdGlvbih0LGUpe3ZhciByPXQueC1uLngsaT10Lnktbi55LGE9TWF0aC5zcXJ0KHIqcitpKmkpLG89ZS54LW4ueCxzPWUueS1uLnksYz1NYXRoLnNxcnQobypvK3Mqcyk7cmV0dXJuIGE8Yz8tMTphPT09Yz8wOjF9KSk7cmV0dXJuIG9bMF19fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaT10LngsYT10Lnksbz1lLngtaSxzPWUueS1hLGM9dC53aWR0aC8yLHU9dC5oZWlnaHQvMjtNYXRoLmFicyhzKSpjPk1hdGguYWJzKG8pKnU/KHM8MCYmKHU9LXUpLG49MD09PXM/MDp1Km8vcyxyPXUpOihvPDAmJihjPS1jKSxuPWMscj0wPT09bz8wOmMqcy9vKTtyZXR1cm57eDppK24seTphK3J9fX0sZnVuY3Rpb24odCxlLG4pe3QuZXhwb3J0cz1mdW5jdGlvbiB0KGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj0vXlwwKy9nLHI9L1tcMFxyXGZdL2csaT0vOiAqL2csYT0vem9vfGdyYS8sbz0vKFssOiBdKSh0cmFuc2Zvcm0pL2cscz0vLCtccyooPyFbXihdKlspXSkvZyxjPS8gK1xzKig/IVteKF0qWyldKS9nLHU9LyAqW1wwXSAqL2csbD0vLFxyKz8vZyxoPS8oW1x0XHJcbiBdKSpcZj8mL2csZj0vOmdsb2JhbFwoKCg/OlteXChcKVxbXF1dKnxcWy4qXF18XChbXlwoXCldKlwpKSopXCkvZyxkPS9cVysvZyxwPS9AKGtcdyspXHMqKFxTKilccyovLHk9Lzo6KHBsYWNlKS9nLGc9LzoocmVhZC1vbmx5KS9nLHY9L1xzKyg/PVt7XF07PTo+XSkvZyxtPS8oW1t9PTo+XSlccysvZyxiPS8oXHtbXntdKz8pOyg/PVx9KS9nLHg9L1xzezIsfS9nLF89LyhbXlwoXSkoOispICovZyxrPS9bc3ZoXVx3Ky1bdGJscl17Mn0vLHc9L1woXHMqKC4qKVxzKlwpL2csRT0vKFtcc1xTXSo/KTsvZyxUPS8tc2VsZnxmbGV4LS9nLEM9L1teXSo/KDpbcnBdW2VsXWFbXHctXSspW15dKi8sUz0vc3RyZXRjaHw6XHMqXHcrXC0oPzpjb250ZXxhdmFpbCkvLEE9LyhbXi1dKShpbWFnZS1zZXRcKCkvLE09Ii13ZWJraXQtIixPPSItbW96LSIsQj0iLW1zLSIsTj0xLEQ9MSxMPTAsST0xLFI9MSxGPTEsUD0wLGo9MCxZPTAsej1bXSxVPVtdLCQ9MCxxPW51bGwsVz0wLFY9MSxIPSIiLEc9IiIsWD0iIjtmdW5jdGlvbiBaKHQsZSxpLGEsbyl7Zm9yKHZhciBzLGMsbD0wLGg9MCxmPTAsZD0wLHY9MCxtPTAsYj0wLHg9MCxrPTAsRT0wLFQ9MCxDPTAsUz0wLEE9MCxPPTAsQj0wLFA9MCxVPTAscT0wLEs9aS5sZW5ndGgsaXQ9Sy0xLGF0PSIiLG90PSIiLHN0PSIiLGN0PSIiLHV0PSIiLGx0PSIiO088Szspe2lmKGI9aS5jaGFyQ29kZUF0KE8pLE89PT1pdCYmaCtkK2YrbCE9PTAmJigwIT09aCYmKGI9NDc9PT1oPzEwOjQ3KSxkPWY9bD0wLEsrKyxpdCsrKSxoK2QrZitsPT09MCl7aWYoTz09PWl0JiYoQj4wJiYob3Q9b3QucmVwbGFjZShyLCIiKSksb3QudHJpbSgpLmxlbmd0aD4wKSl7c3dpdGNoKGIpe2Nhc2UgMzI6Y2FzZSA5OmNhc2UgNTk6Y2FzZSAxMzpjYXNlIDEwOmJyZWFrO2RlZmF1bHQ6b3QrPWkuY2hhckF0KE8pfWI9NTl9aWYoMT09PVApc3dpdGNoKGIpe2Nhc2UgMTIzOmNhc2UgMTI1OmNhc2UgNTk6Y2FzZSAzNDpjYXNlIDM5OmNhc2UgNDA6Y2FzZSA0MTpjYXNlIDQ0OlA9MDtjYXNlIDk6Y2FzZSAxMzpjYXNlIDEwOmNhc2UgMzI6YnJlYWs7ZGVmYXVsdDpmb3IoUD0wLHE9Tyx2PWIsTy0tLGI9NTk7cTxLOylzd2l0Y2goaS5jaGFyQ29kZUF0KHErKykpe2Nhc2UgMTA6Y2FzZSAxMzpjYXNlIDU5OisrTyxiPXYscT1LO2JyZWFrO2Nhc2UgNTg6Qj4wJiYoKytPLGI9dik7Y2FzZSAxMjM6cT1LfX1zd2l0Y2goYil7Y2FzZSAxMjM6Zm9yKHY9KG90PW90LnRyaW0oKSkuY2hhckNvZGVBdCgwKSxUPTEscT0rK087TzxLOyl7c3dpdGNoKGI9aS5jaGFyQ29kZUF0KE8pKXtjYXNlIDEyMzpUKys7YnJlYWs7Y2FzZSAxMjU6VC0tO2JyZWFrO2Nhc2UgNDc6c3dpdGNoKG09aS5jaGFyQ29kZUF0KE8rMSkpe2Nhc2UgNDI6Y2FzZSA0NzpPPXJ0KG0sTyxpdCxpKX1icmVhaztjYXNlIDkxOmIrKztjYXNlIDQwOmIrKztjYXNlIDM0OmNhc2UgMzk6Zm9yKDtPKys8aXQmJmkuY2hhckNvZGVBdChPKSE9PWI7KTt9aWYoMD09PVQpYnJlYWs7TysrfXN3aXRjaChzdD1pLnN1YnN0cmluZyhxLE8pLDA9PT12JiYodj0ob3Q9b3QucmVwbGFjZShuLCIiKS50cmltKCkpLmNoYXJDb2RlQXQoMCkpLHYpe2Nhc2UgNjQ6c3dpdGNoKEI+MCYmKG90PW90LnJlcGxhY2UociwiIikpLG09b3QuY2hhckNvZGVBdCgxKSl7Y2FzZSAxMDA6Y2FzZSAxMDk6Y2FzZSAxMTU6Y2FzZSA0NTpzPWU7YnJlYWs7ZGVmYXVsdDpzPXp9aWYocT0oc3Q9WihlLHMsc3QsbSxvKzEpKS5sZW5ndGgsWT4wJiYwPT09cSYmKHE9b3QubGVuZ3RoKSwkPjAmJihjPW50KDMsc3Qscz1RKHosb3QsVSksZSxELE4scSxtLG8sYSksb3Q9cy5qb2luKCIiKSx2b2lkIDAhPT1jJiYwPT09KHE9KHN0PWMudHJpbSgpKS5sZW5ndGgpJiYobT0wLHN0PSIiKSkscT4wKXN3aXRjaChtKXtjYXNlIDExNTpvdD1vdC5yZXBsYWNlKHcsZXQpO2Nhc2UgMTAwOmNhc2UgMTA5OmNhc2UgNDU6c3Q9b3QrInsiK3N0KyJ9IjticmVhaztjYXNlIDEwNzpzdD0ob3Q9b3QucmVwbGFjZShwLCIkMSAkMiIrKFY+MD9IOiIiKSkpKyJ7IitzdCsifSIsc3Q9MT09PVJ8fDI9PT1SJiZ0dCgiQCIrc3QsMyk/IkAiK00rc3QrIkAiK3N0OiJAIitzdDticmVhaztkZWZhdWx0OnN0PW90K3N0LDExMj09PWEmJihjdCs9c3Qsc3Q9IiIpfWVsc2Ugc3Q9IiI7YnJlYWs7ZGVmYXVsdDpzdD1aKGUsUShlLG90LFUpLHN0LGEsbysxKX11dCs9c3QsQz0wLFA9MCxBPTAsQj0wLFU9MCxTPTAsb3Q9IiIsc3Q9IiIsYj1pLmNoYXJDb2RlQXQoKytPKTticmVhaztjYXNlIDEyNTpjYXNlIDU5OmlmKChxPShvdD0oQj4wP290LnJlcGxhY2UociwiIik6b3QpLnRyaW0oKSkubGVuZ3RoKT4xKXN3aXRjaCgwPT09QSYmKDQ1PT09KHY9b3QuY2hhckNvZGVBdCgwKSl8fHY+OTYmJnY8MTIzKSYmKHE9KG90PW90LnJlcGxhY2UoIiAiLCI6IikpLmxlbmd0aCksJD4wJiZ2b2lkIDAhPT0oYz1udCgxLG90LGUsdCxELE4sY3QubGVuZ3RoLGEsbyxhKSkmJjA9PT0ocT0ob3Q9Yy50cmltKCkpLmxlbmd0aCkmJihvdD0iXDBcMCIpLHY9b3QuY2hhckNvZGVBdCgwKSxtPW90LmNoYXJDb2RlQXQoMSksdil7Y2FzZSAwOmJyZWFrO2Nhc2UgNjQ6aWYoMTA1PT09bXx8OTk9PT1tKXtsdCs9b3QraS5jaGFyQXQoTyk7YnJlYWt9ZGVmYXVsdDppZig1OD09PW90LmNoYXJDb2RlQXQocS0xKSlicmVhaztjdCs9SihvdCx2LG0sb3QuY2hhckNvZGVBdCgyKSl9Qz0wLFA9MCxBPTAsQj0wLFU9MCxvdD0iIixiPWkuY2hhckNvZGVBdCgrK08pfX1zd2l0Y2goYil7Y2FzZSAxMzpjYXNlIDEwOmlmKGgrZCtmK2wraj09PTApc3dpdGNoKEUpe2Nhc2UgNDE6Y2FzZSAzOTpjYXNlIDM0OmNhc2UgNjQ6Y2FzZSAxMjY6Y2FzZSA2MjpjYXNlIDQyOmNhc2UgNDM6Y2FzZSA0NzpjYXNlIDQ1OmNhc2UgNTg6Y2FzZSA0NDpjYXNlIDU5OmNhc2UgMTIzOmNhc2UgMTI1OmJyZWFrO2RlZmF1bHQ6QT4wJiYoUD0xKX00Nz09PWg/aD0wOkkrQz09PTAmJjEwNyE9PWEmJm90Lmxlbmd0aD4wJiYoQj0xLG90Kz0iXDAiKSwkKlc+MCYmbnQoMCxvdCxlLHQsRCxOLGN0Lmxlbmd0aCxhLG8sYSksTj0xLEQrKzticmVhaztjYXNlIDU5OmNhc2UgMTI1OmlmKGgrZCtmK2w9PT0wKXtOKys7YnJlYWt9ZGVmYXVsdDpzd2l0Y2goTisrLGF0PWkuY2hhckF0KE8pLGIpe2Nhc2UgOTpjYXNlIDMyOmlmKGQrbCtoPT09MClzd2l0Y2goeCl7Y2FzZSA0NDpjYXNlIDU4OmNhc2UgOTpjYXNlIDMyOmF0PSIiO2JyZWFrO2RlZmF1bHQ6MzIhPT1iJiYoYXQ9IiAiKX1icmVhaztjYXNlIDA6YXQ9IlxcMCI7YnJlYWs7Y2FzZSAxMjphdD0iXFxmIjticmVhaztjYXNlIDExOmF0PSJcXHYiO2JyZWFrO2Nhc2UgMzg6ZCtoK2w9PT0wJiZJPjAmJihVPTEsQj0xLGF0PSJcZiIrYXQpO2JyZWFrO2Nhc2UgMTA4OmlmKGQraCtsK0w9PT0wJiZBPjApc3dpdGNoKE8tQSl7Y2FzZSAyOjExMj09PXgmJjU4PT09aS5jaGFyQ29kZUF0KE8tMykmJihMPXgpO2Nhc2UgODoxMTE9PT1rJiYoTD1rKX1icmVhaztjYXNlIDU4OmQraCtsPT09MCYmKEE9Tyk7YnJlYWs7Y2FzZSA0NDpoK2YrZCtsPT09MCYmKEI9MSxhdCs9IlxyIik7YnJlYWs7Y2FzZSAzNDpjYXNlIDM5OjA9PT1oJiYoZD1kPT09Yj8wOjA9PT1kP2I6ZCk7YnJlYWs7Y2FzZSA5MTpkK2grZj09PTAmJmwrKzticmVhaztjYXNlIDkzOmQraCtmPT09MCYmbC0tO2JyZWFrO2Nhc2UgNDE6ZCtoK2w9PT0wJiZmLS07YnJlYWs7Y2FzZSA0MDppZihkK2grbD09PTApe2lmKDA9PT1DKXN3aXRjaCgyKngrMyprKXtjYXNlIDUzMzpicmVhaztkZWZhdWx0OlQ9MCxDPTF9ZisrfWJyZWFrO2Nhc2UgNjQ6aCtmK2QrbCtBK1M9PT0wJiYoUz0xKTticmVhaztjYXNlIDQyOmNhc2UgNDc6aWYoZCtsK2Y+MClicmVhaztzd2l0Y2goaCl7Y2FzZSAwOnN3aXRjaCgyKmIrMyppLmNoYXJDb2RlQXQoTysxKSl7Y2FzZSAyMzU6aD00NzticmVhaztjYXNlIDIyMDpxPU8saD00Mn1icmVhaztjYXNlIDQyOjQ3PT09YiYmNDI9PT14JiZxKzIhPT1PJiYoMzM9PT1pLmNoYXJDb2RlQXQocSsyKSYmKGN0Kz1pLnN1YnN0cmluZyhxLE8rMSkpLGF0PSIiLGg9MCl9fWlmKDA9PT1oKXtpZihJK2QrbCtTPT09MCYmMTA3IT09YSYmNTkhPT1iKXN3aXRjaChiKXtjYXNlIDQ0OmNhc2UgMTI2OmNhc2UgNjI6Y2FzZSA0MzpjYXNlIDQxOmNhc2UgNDA6aWYoMD09PUMpe3N3aXRjaCh4KXtjYXNlIDk6Y2FzZSAzMjpjYXNlIDEwOmNhc2UgMTM6YXQrPSJcMCI7YnJlYWs7ZGVmYXVsdDphdD0iXDAiK2F0Kyg0ND09PWI/IiI6IlwwIil9Qj0xfWVsc2Ugc3dpdGNoKGIpe2Nhc2UgNDA6QSs3PT09TyYmMTA4PT09eCYmKEE9MCksQz0rK1Q7YnJlYWs7Y2FzZSA0MTowPT0oQz0tLVQpJiYoQj0xLGF0Kz0iXDAiKX1icmVhaztjYXNlIDk6Y2FzZSAzMjpzd2l0Y2goeCl7Y2FzZSAwOmNhc2UgMTIzOmNhc2UgMTI1OmNhc2UgNTk6Y2FzZSA0NDpjYXNlIDEyOmNhc2UgOTpjYXNlIDMyOmNhc2UgMTA6Y2FzZSAxMzpicmVhaztkZWZhdWx0OjA9PT1DJiYoQj0xLGF0Kz0iXDAiKX19b3QrPWF0LDMyIT09YiYmOSE9PWImJihFPWIpfX1rPXgseD1iLE8rK31pZihxPWN0Lmxlbmd0aCxZPjAmJjA9PT1xJiYwPT09dXQubGVuZ3RoJiYwPT09ZVswXS5sZW5ndGg9PTAmJigxMDkhPT1hfHwxPT09ZS5sZW5ndGgmJihJPjA/RzpYKT09PWVbMF0pJiYocT1lLmpvaW4oIiwiKS5sZW5ndGgrMikscT4wKXtpZihzPTA9PT1JJiYxMDchPT1hP2Z1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLGk9MCxhPXQubGVuZ3RoLG89QXJyYXkoYSk7aTxhOysraSl7Zm9yKHZhciBzPXRbaV0uc3BsaXQodSksYz0iIixsPTAsaD0wLGY9MCxkPTAscD1zLmxlbmd0aDtsPHA7KytsKWlmKCEoMD09PShoPShuPXNbbF0pLmxlbmd0aCkmJnA+MSkpe2lmKGY9Yy5jaGFyQ29kZUF0KGMubGVuZ3RoLTEpLGQ9bi5jaGFyQ29kZUF0KDApLGU9IiIsMCE9PWwpc3dpdGNoKGYpe2Nhc2UgNDI6Y2FzZSAxMjY6Y2FzZSA2MjpjYXNlIDQzOmNhc2UgMzI6Y2FzZSA0MDpicmVhaztkZWZhdWx0OmU9IiAifXN3aXRjaChkKXtjYXNlIDM4Om49ZStHO2Nhc2UgMTI2OmNhc2UgNjI6Y2FzZSA0MzpjYXNlIDMyOmNhc2UgNDE6Y2FzZSA0MDpicmVhaztjYXNlIDkxOm49ZStuK0c7YnJlYWs7Y2FzZSA1ODpzd2l0Y2goMipuLmNoYXJDb2RlQXQoMSkrMypuLmNoYXJDb2RlQXQoMikpe2Nhc2UgNTMwOmlmKEY+MCl7bj1lK24uc3Vic3RyaW5nKDgsaC0xKTticmVha31kZWZhdWx0OihsPDF8fHNbbC0xXS5sZW5ndGg8MSkmJihuPWUrRytuKX1icmVhaztjYXNlIDQ0OmU9IiI7ZGVmYXVsdDpuPWg+MSYmbi5pbmRleE9mKCI6Iik+MD9lK24ucmVwbGFjZShfLCIkMSIrRysiJDIiKTplK24rR31jKz1ufW9baV09Yy5yZXBsYWNlKHIsIiIpLnRyaW0oKX1yZXR1cm4gb30oZSk6ZSwkPjAmJnZvaWQgMCE9PShjPW50KDIsY3Qscyx0LEQsTixxLGEsbyxhKSkmJjA9PT0oY3Q9YykubGVuZ3RoKXJldHVybiBsdCtjdCt1dDtpZihjdD1zLmpvaW4oIiwiKSsieyIrY3QrIn0iLFIqTCE9MCl7c3dpdGNoKDIhPT1SfHx0dChjdCwyKXx8KEw9MCksTCl7Y2FzZSAxMTE6Y3Q9Y3QucmVwbGFjZShnLCI6LW1vei0kMSIpK2N0O2JyZWFrO2Nhc2UgMTEyOmN0PWN0LnJlcGxhY2UoeSwiOjotd2Via2l0LWlucHV0LSQxIikrY3QucmVwbGFjZSh5LCI6Oi1tb3otJDEiKStjdC5yZXBsYWNlKHksIjotbXMtaW5wdXQtJDEiKStjdH1MPTB9fXJldHVybiBsdCtjdCt1dH1mdW5jdGlvbiBRKHQsZSxuKXt2YXIgcj1lLnRyaW0oKS5zcGxpdChsKSxpPXIsYT1yLmxlbmd0aCxvPXQubGVuZ3RoO3N3aXRjaChvKXtjYXNlIDA6Y2FzZSAxOmZvcih2YXIgcz0wLGM9MD09PW8/IiI6dFswXSsiICI7czxhOysrcylpW3NdPUsoYyxpW3NdLG4sbykudHJpbSgpO2JyZWFrO2RlZmF1bHQ6cz0wO3ZhciB1PTA7Zm9yKGk9W107czxhOysrcylmb3IodmFyIGg9MDtoPG87KytoKWlbdSsrXT1LKHRbaF0rIiAiLHJbc10sbixvKS50cmltKCl9cmV0dXJuIGl9ZnVuY3Rpb24gSyh0LGUsbixyKXt2YXIgaT1lLGE9aS5jaGFyQ29kZUF0KDApO3N3aXRjaChhPDMzJiYoYT0oaT1pLnRyaW0oKSkuY2hhckNvZGVBdCgwKSksYSl7Y2FzZSAzODpzd2l0Y2goSStyKXtjYXNlIDA6Y2FzZSAxOmlmKDA9PT10LnRyaW0oKS5sZW5ndGgpYnJlYWs7ZGVmYXVsdDpyZXR1cm4gaS5yZXBsYWNlKGgsIiQxIit0LnRyaW0oKSl9YnJlYWs7Y2FzZSA1ODpzd2l0Y2goaS5jaGFyQ29kZUF0KDEpKXtjYXNlIDEwMzppZihGPjAmJkk+MClyZXR1cm4gaS5yZXBsYWNlKGYsIiQxIikucmVwbGFjZShoLCIkMSIrWCk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdC50cmltKCkraS5yZXBsYWNlKGgsIiQxIit0LnRyaW0oKSl9ZGVmYXVsdDppZihuKkk+MCYmaS5pbmRleE9mKCJcZiIpPjApcmV0dXJuIGkucmVwbGFjZShoLCg1OD09PXQuY2hhckNvZGVBdCgwKT8iIjoiJDEiKSt0LnRyaW0oKSl9cmV0dXJuIHQraX1mdW5jdGlvbiBKKHQsZSxuLHIpe3ZhciB1LGw9MCxoPXQrIjsiLGY9MiplKzMqbis0KnI7aWYoOTQ0PT09ZilyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsbj10LmluZGV4T2YoIjoiLDkpKzEscj10LnN1YnN0cmluZygwLG4pLnRyaW0oKSxpPXQuc3Vic3RyaW5nKG4sZS0xKS50cmltKCk7c3dpdGNoKHQuY2hhckNvZGVBdCg5KSpWKXtjYXNlIDA6YnJlYWs7Y2FzZSA0NTppZigxMTAhPT10LmNoYXJDb2RlQXQoMTApKWJyZWFrO2RlZmF1bHQ6dmFyIGE9aS5zcGxpdCgoaT0iIixzKSksbz0wO2ZvcihuPTAsZT1hLmxlbmd0aDtvPGU7bj0wLCsrbyl7Zm9yKHZhciB1PWFbb10sbD11LnNwbGl0KGMpO3U9bFtuXTspe3ZhciBoPXUuY2hhckNvZGVBdCgwKTtpZigxPT09ViYmKGg+NjQmJmg8OTB8fGg+OTYmJmg8MTIzfHw5NT09PWh8fDQ1PT09aCYmNDUhPT11LmNoYXJDb2RlQXQoMSkpKXN3aXRjaChpc05hTihwYXJzZUZsb2F0KHUpKSsoLTEhPT11LmluZGV4T2YoIigiKSkpe2Nhc2UgMTpzd2l0Y2godSl7Y2FzZSJpbmZpbml0ZSI6Y2FzZSJhbHRlcm5hdGUiOmNhc2UiYmFja3dhcmRzIjpjYXNlInJ1bm5pbmciOmNhc2Uibm9ybWFsIjpjYXNlImZvcndhcmRzIjpjYXNlImJvdGgiOmNhc2Uibm9uZSI6Y2FzZSJsaW5lYXIiOmNhc2UiZWFzZSI6Y2FzZSJlYXNlLWluIjpjYXNlImVhc2Utb3V0IjpjYXNlImVhc2UtaW4tb3V0IjpjYXNlInBhdXNlZCI6Y2FzZSJyZXZlcnNlIjpjYXNlImFsdGVybmF0ZS1yZXZlcnNlIjpjYXNlImluaGVyaXQiOmNhc2UiaW5pdGlhbCI6Y2FzZSJ1bnNldCI6Y2FzZSJzdGVwLXN0YXJ0IjpjYXNlInN0ZXAtZW5kIjpicmVhaztkZWZhdWx0OnUrPUh9fWxbbisrXT11fWkrPSgwPT09bz8iIjoiLCIpK2wuam9pbigiICIpfX1yZXR1cm4gaT1yK2krIjsiLDE9PT1SfHwyPT09UiYmdHQoaSwxKT9NK2kraTppfShoKTtpZigwPT09Unx8Mj09PVImJiF0dChoLDEpKXJldHVybiBoO3N3aXRjaChmKXtjYXNlIDEwMTU6cmV0dXJuIDk3PT09aC5jaGFyQ29kZUF0KDEwKT9NK2graDpoO2Nhc2UgOTUxOnJldHVybiAxMTY9PT1oLmNoYXJDb2RlQXQoMyk/TStoK2g6aDtjYXNlIDk2MzpyZXR1cm4gMTEwPT09aC5jaGFyQ29kZUF0KDUpP00raCtoOmg7Y2FzZSAxMDA5OmlmKDEwMCE9PWguY2hhckNvZGVBdCg0KSlicmVhaztjYXNlIDk2OTpjYXNlIDk0MjpyZXR1cm4gTStoK2g7Y2FzZSA5Nzg6cmV0dXJuIE0raCtPK2graDtjYXNlIDEwMTk6Y2FzZSA5ODM6cmV0dXJuIE0raCtPK2grQitoK2g7Y2FzZSA4ODM6cmV0dXJuIDQ1PT09aC5jaGFyQ29kZUF0KDgpP00raCtoOmguaW5kZXhPZigiaW1hZ2Utc2V0KCIsMTEpPjA/aC5yZXBsYWNlKEEsIiQxLXdlYmtpdC0kMiIpK2g6aDtjYXNlIDkzMjppZig0NT09PWguY2hhckNvZGVBdCg0KSlzd2l0Y2goaC5jaGFyQ29kZUF0KDUpKXtjYXNlIDEwMzpyZXR1cm4gTSsiYm94LSIraC5yZXBsYWNlKCItZ3JvdyIsIiIpK00raCtCK2gucmVwbGFjZSgiZ3JvdyIsInBvc2l0aXZlIikraDtjYXNlIDExNTpyZXR1cm4gTStoK0IraC5yZXBsYWNlKCJzaHJpbmsiLCJuZWdhdGl2ZSIpK2g7Y2FzZSA5ODpyZXR1cm4gTStoK0IraC5yZXBsYWNlKCJiYXNpcyIsInByZWZlcnJlZC1zaXplIikraH1yZXR1cm4gTStoK0IraCtoO2Nhc2UgOTY0OnJldHVybiBNK2grQisiZmxleC0iK2graDtjYXNlIDEwMjM6aWYoOTkhPT1oLmNoYXJDb2RlQXQoOCkpYnJlYWs7cmV0dXJuIHU9aC5zdWJzdHJpbmcoaC5pbmRleE9mKCI6IiwxNSkpLnJlcGxhY2UoImZsZXgtIiwiIikucmVwbGFjZSgic3BhY2UtYmV0d2VlbiIsImp1c3RpZnkiKSxNKyJib3gtcGFjayIrdStNK2grQisiZmxleC1wYWNrIit1K2g7Y2FzZSAxMDA1OnJldHVybiBhLnRlc3QoaCk/aC5yZXBsYWNlKGksIjoiK00pK2gucmVwbGFjZShpLCI6IitPKStoOmg7Y2FzZSAxZTM6c3dpdGNoKGw9KHU9aC5zdWJzdHJpbmcoMTMpLnRyaW0oKSkuaW5kZXhPZigiLSIpKzEsdS5jaGFyQ29kZUF0KDApK3UuY2hhckNvZGVBdChsKSl7Y2FzZSAyMjY6dT1oLnJlcGxhY2UoaywidGIiKTticmVhaztjYXNlIDIzMjp1PWgucmVwbGFjZShrLCJ0Yi1ybCIpO2JyZWFrO2Nhc2UgMjIwOnU9aC5yZXBsYWNlKGssImxyIik7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gaH1yZXR1cm4gTStoK0IrdStoO2Nhc2UgMTAxNzppZigtMT09PWguaW5kZXhPZigic3RpY2t5Iiw5KSlyZXR1cm4gaDtjYXNlIDk3NTpzd2l0Y2gobD0oaD10KS5sZW5ndGgtMTAsZj0odT0oMzM9PT1oLmNoYXJDb2RlQXQobCk/aC5zdWJzdHJpbmcoMCxsKTpoKS5zdWJzdHJpbmcodC5pbmRleE9mKCI6Iiw3KSsxKS50cmltKCkpLmNoYXJDb2RlQXQoMCkrKDB8dS5jaGFyQ29kZUF0KDcpKSl7Y2FzZSAyMDM6aWYodS5jaGFyQ29kZUF0KDgpPDExMSlicmVhaztjYXNlIDExNTpoPWgucmVwbGFjZSh1LE0rdSkrIjsiK2g7YnJlYWs7Y2FzZSAyMDc6Y2FzZSAxMDI6aD1oLnJlcGxhY2UodSxNKyhmPjEwMj8iaW5saW5lLSI6IiIpKyJib3giKSsiOyIraC5yZXBsYWNlKHUsTSt1KSsiOyIraC5yZXBsYWNlKHUsQit1KyJib3giKSsiOyIraH1yZXR1cm4gaCsiOyI7Y2FzZSA5Mzg6aWYoNDU9PT1oLmNoYXJDb2RlQXQoNSkpc3dpdGNoKGguY2hhckNvZGVBdCg2KSl7Y2FzZSAxMDU6cmV0dXJuIHU9aC5yZXBsYWNlKCItaXRlbXMiLCIiKSxNK2grTSsiYm94LSIrdStCKyJmbGV4LSIrdStoO2Nhc2UgMTE1OnJldHVybiBNK2grQisiZmxleC1pdGVtLSIraC5yZXBsYWNlKFQsIiIpK2g7ZGVmYXVsdDpyZXR1cm4gTStoK0IrImZsZXgtbGluZS1wYWNrIitoLnJlcGxhY2UoImFsaWduLWNvbnRlbnQiLCIiKS5yZXBsYWNlKFQsIiIpK2h9YnJlYWs7Y2FzZSA5NzM6Y2FzZSA5ODk6aWYoNDUhPT1oLmNoYXJDb2RlQXQoMyl8fDEyMj09PWguY2hhckNvZGVBdCg0KSlicmVhaztjYXNlIDkzMTpjYXNlIDk1MzppZighMD09PVMudGVzdCh0KSlyZXR1cm4gMTE1PT09KHU9dC5zdWJzdHJpbmcodC5pbmRleE9mKCI6IikrMSkpLmNoYXJDb2RlQXQoMCk/Sih0LnJlcGxhY2UoInN0cmV0Y2giLCJmaWxsLWF2YWlsYWJsZSIpLGUsbixyKS5yZXBsYWNlKCI6ZmlsbC1hdmFpbGFibGUiLCI6c3RyZXRjaCIpOmgucmVwbGFjZSh1LE0rdSkraC5yZXBsYWNlKHUsTyt1LnJlcGxhY2UoImZpbGwtIiwiIikpK2g7YnJlYWs7Y2FzZSA5NjI6aWYoaD1NK2grKDEwMj09PWguY2hhckNvZGVBdCg1KT9CK2g6IiIpK2gsbityPT09MjExJiYxMDU9PT1oLmNoYXJDb2RlQXQoMTMpJiZoLmluZGV4T2YoInRyYW5zZm9ybSIsMTApPjApcmV0dXJuIGguc3Vic3RyaW5nKDAsaC5pbmRleE9mKCI7IiwyNykrMSkucmVwbGFjZShvLCIkMS13ZWJraXQtJDIiKStofXJldHVybiBofWZ1bmN0aW9uIHR0KHQsZSl7dmFyIG49dC5pbmRleE9mKDE9PT1lPyI6IjoieyIpLHI9dC5zdWJzdHJpbmcoMCwzIT09ZT9uOjEwKSxpPXQuc3Vic3RyaW5nKG4rMSx0Lmxlbmd0aC0xKTtyZXR1cm4gcSgyIT09ZT9yOnIucmVwbGFjZShDLCIkMSIpLGksZSl9ZnVuY3Rpb24gZXQodCxlKXt2YXIgbj1KKGUsZS5jaGFyQ29kZUF0KDApLGUuY2hhckNvZGVBdCgxKSxlLmNoYXJDb2RlQXQoMikpO3JldHVybiBuIT09ZSsiOyI/bi5yZXBsYWNlKEUsIiBvciAoJDEpIikuc3Vic3RyaW5nKDQpOiIoIitlKyIpIn1mdW5jdGlvbiBudCh0LGUsbixyLGksYSxvLHMsYyx1KXtmb3IodmFyIGwsaD0wLGY9ZTtoPCQ7KytoKXN3aXRjaChsPVVbaF0uY2FsbChhdCx0LGYsbixyLGksYSxvLHMsYyx1KSl7Y2FzZSB2b2lkIDA6Y2FzZSExOmNhc2UhMDpjYXNlIG51bGw6YnJlYWs7ZGVmYXVsdDpmPWx9aWYoZiE9PWUpcmV0dXJuIGZ9ZnVuY3Rpb24gcnQodCxlLG4scil7Zm9yKHZhciBpPWUrMTtpPG47KytpKXN3aXRjaChyLmNoYXJDb2RlQXQoaSkpe2Nhc2UgNDc6aWYoNDI9PT10JiY0Mj09PXIuY2hhckNvZGVBdChpLTEpJiZlKzIhPT1pKXJldHVybiBpKzE7YnJlYWs7Y2FzZSAxMDppZig0Nz09PXQpcmV0dXJuIGkrMX1yZXR1cm4gaX1mdW5jdGlvbiBpdCh0KXtmb3IodmFyIGUgaW4gdCl7dmFyIG49dFtlXTtzd2l0Y2goZSl7Y2FzZSJrZXlmcmFtZSI6Vj0wfG47YnJlYWs7Y2FzZSJnbG9iYWwiOkY9MHxuO2JyZWFrO2Nhc2UiY2FzY2FkZSI6ST0wfG47YnJlYWs7Y2FzZSJjb21wcmVzcyI6UD0wfG47YnJlYWs7Y2FzZSJzZW1pY29sb24iOmo9MHxuO2JyZWFrO2Nhc2UicHJlc2VydmUiOlk9MHxuO2JyZWFrO2Nhc2UicHJlZml4IjpxPW51bGwsbj8iZnVuY3Rpb24iIT10eXBlb2Ygbj9SPTE6KFI9MixxPW4pOlI9MH19cmV0dXJuIGl0fWZ1bmN0aW9uIGF0KGUsbil7aWYodm9pZCAwIT09dGhpcyYmdGhpcy5jb25zdHJ1Y3Rvcj09PWF0KXJldHVybiB0KGUpO3ZhciBpPWUsYT1pLmNoYXJDb2RlQXQoMCk7YTwzMyYmKGE9KGk9aS50cmltKCkpLmNoYXJDb2RlQXQoMCkpLFY+MCYmKEg9aS5yZXBsYWNlKGQsOTE9PT1hPyIiOiItIikpLGE9MSwxPT09ST9YPWk6Rz1pO3ZhciBvLHM9W1hdOyQ+MCYmdm9pZCAwIT09KG89bnQoLTEsbixzLHMsRCxOLDAsMCwwLDApKSYmInN0cmluZyI9PXR5cGVvZiBvJiYobj1vKTt2YXIgYz1aKHoscyxuLDAsMCk7cmV0dXJuICQ+MCYmdm9pZCAwIT09KG89bnQoLTIsYyxzLHMsRCxOLGMubGVuZ3RoLDAsMCwwKSkmJiJzdHJpbmciIT10eXBlb2YoYz1vKSYmKGE9MCksSD0iIixYPSIiLEc9IiIsTD0wLEQ9MSxOPTEsUCphPT0wP2M6ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZShyLCIiKS5yZXBsYWNlKHYsIiIpLnJlcGxhY2UobSwiJDEiKS5yZXBsYWNlKGIsIiQxIikucmVwbGFjZSh4LCIgIil9KGMpfXJldHVybiBhdC51c2U9ZnVuY3Rpb24gdChlKXtzd2l0Y2goZSl7Y2FzZSB2b2lkIDA6Y2FzZSBudWxsOiQ9VS5sZW5ndGg9MDticmVhaztkZWZhdWx0OmlmKCJmdW5jdGlvbiI9PXR5cGVvZiBlKVVbJCsrXT1lO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBlKWZvcih2YXIgbj0wLHI9ZS5sZW5ndGg7bjxyOysrbil0KGVbbl0pO2Vsc2UgVz0wfCEhZX1yZXR1cm4gdH0sYXQuc2V0PWl0LHZvaWQgMCE9PWUmJml0KGUpLGF0fShudWxsKX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pbnRlcnNlY3QoZSl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDUyKTtlLmhleD1yLmRlZmF1bHQ7dmFyIGk9big1Mik7ZS5yZ2I9aS5kZWZhdWx0O3ZhciBhPW4oNTIpO2UucmdiYT1hLmRlZmF1bHQ7dmFyIG89bigxMDApO2UuaHNsPW8uZGVmYXVsdDt2YXIgcz1uKDEwMCk7ZS5oc2xhPXMuZGVmYXVsdDt2YXIgYz1uKDI5KTtlLmNoYW5uZWw9Yy5kZWZhdWx0O3ZhciB1PW4oMTgyKTtlLnJlZD11LmRlZmF1bHQ7dmFyIGw9bigxODMpO2UuZ3JlZW49bC5kZWZhdWx0O3ZhciBoPW4oMTg0KTtlLmJsdWU9aC5kZWZhdWx0O3ZhciBmPW4oMTg1KTtlLmh1ZT1mLmRlZmF1bHQ7dmFyIGQ9bigxODYpO2Uuc2F0dXJhdGlvbj1kLmRlZmF1bHQ7dmFyIHA9bigxODcpO2UubGlnaHRuZXNzPXAuZGVmYXVsdDt2YXIgeT1uKDEwMSk7ZS5hbHBoYT15LmRlZmF1bHQ7dmFyIGc9bigxMDEpO2Uub3BhY2l0eT1nLmRlZmF1bHQ7dmFyIHY9bigxMDIpO2UubHVtaW5hbmNlPXYuZGVmYXVsdDt2YXIgbT1uKDE4OCk7ZS5pc0Rhcms9bS5kZWZhdWx0O3ZhciBiPW4oMTAzKTtlLmlzTGlnaHQ9Yi5kZWZhdWx0O3ZhciB4PW4oMTg5KTtlLmlzVmFsaWQ9eC5kZWZhdWx0O3ZhciBfPW4oMTkwKTtlLnNhdHVyYXRlPV8uZGVmYXVsdDt2YXIgaz1uKDE5MSk7ZS5kZXNhdHVyYXRlPWsuZGVmYXVsdDt2YXIgdz1uKDE5Mik7ZS5saWdodGVuPXcuZGVmYXVsdDt2YXIgRT1uKDE5Myk7ZS5kYXJrZW49RS5kZWZhdWx0O3ZhciBUPW4oMTA0KTtlLm9wYWNpZnk9VC5kZWZhdWx0O3ZhciBDPW4oMTA0KTtlLmZhZGVJbj1DLmRlZmF1bHQ7dmFyIFM9bigxMDUpO2UudHJhbnNwYXJlbnRpemU9Uy5kZWZhdWx0O3ZhciBBPW4oMTA1KTtlLmZhZGVPdXQ9QS5kZWZhdWx0O3ZhciBNPW4oMTk0KTtlLmNvbXBsZW1lbnQ9TS5kZWZhdWx0O3ZhciBPPW4oMTk1KTtlLmdyYXlzY2FsZT1PLmRlZmF1bHQ7dmFyIEI9bigxMDYpO2UuYWRqdXN0PUIuZGVmYXVsdDt2YXIgTj1uKDUzKTtlLmNoYW5nZT1OLmRlZmF1bHQ7dmFyIEQ9bigxOTYpO2UuaW52ZXJ0PUQuZGVmYXVsdDt2YXIgTD1uKDEwNyk7ZS5taXg9TC5kZWZhdWx0O3ZhciBJPW4oMTk3KTtlLnNjYWxlPUkuZGVmYXVsdH0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9e21pbjp7cjowLGc6MCxiOjAsczowLGw6MCxhOjB9LG1heDp7cjoyNTUsZzoyNTUsYjoyNTUsaDozNjAsczoxMDAsbDoxMDAsYToxfSxjbGFtcDp7cjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MjU1PzI1NTp0PDA/MDp0fSxnOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0yNTU/MjU1OnQ8MD8wOnR9LGI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTI1NT8yNTU6dDwwPzA6dH0saDpmdW5jdGlvbih0KXtyZXR1cm4gdCUzNjB9LHM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEwMD8xMDA6dDwwPzA6dH0sbDpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTAwPzEwMDp0PDA/MDp0fSxhOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xPzE6dDwwPzA6dH19LHRvTGluZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXQvMjU1O3JldHVybiB0Pi4wMzkyOD9NYXRoLnBvdygoZSsuMDU1KS8xLjA1NSwyLjQpOmUvMTIuOTJ9LGh1ZTJyZ2I6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBuPDAmJihuKz0xKSxuPjEmJihuLT0xKSxuPDEvNj90KzYqKGUtdCkqbjpuPC41P2U6bjwyLzM/dCsoZS10KSooMi8zLW4pKjY6dH0saHNsMnJnYjpmdW5jdGlvbih0LGUpe3ZhciBuPXQuaCxpPXQucyxhPXQubDtpZigxMDA9PT1pKXJldHVybiAyLjU1KmE7bi89MzYwLGkvPTEwMDt2YXIgbz0oYS89MTAwKTwuNT9hKigxK2kpOmEraS1hKmkscz0yKmEtbztzd2l0Y2goZSl7Y2FzZSJyIjpyZXR1cm4gMjU1KnIuaHVlMnJnYihzLG8sbisxLzMpO2Nhc2UiZyI6cmV0dXJuIDI1NSpyLmh1ZTJyZ2IocyxvLG4pO2Nhc2UiYiI6cmV0dXJuIDI1NSpyLmh1ZTJyZ2IocyxvLG4tMS8zKX19LHJnYjJoc2w6ZnVuY3Rpb24odCxlKXt2YXIgbj10LnIscj10LmcsaT10LmI7bi89MjU1LHIvPTI1NSxpLz0yNTU7dmFyIGE9TWF0aC5tYXgobixyLGkpLG89TWF0aC5taW4obixyLGkpLHM9KGErbykvMjtpZigibCI9PT1lKXJldHVybiAxMDAqcztpZihhPT09bylyZXR1cm4gMDt2YXIgYz1hLW87aWYoInMiPT09ZSlyZXR1cm4gMTAwKihzPi41P2MvKDItYS1vKTpjLyhhK28pKTtzd2l0Y2goYSl7Y2FzZSBuOnJldHVybiA2MCooKHItaSkvYysocjxpPzY6MCkpO2Nhc2UgcjpyZXR1cm4gNjAqKChpLW4pL2MrMik7Y2FzZSBpOnJldHVybiA2MCooKG4tcikvYys0KTtkZWZhdWx0OnJldHVybi0xfX19O2UuZGVmYXVsdD1yfSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj17cm91bmQ6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQoMWUxMCp0KS8xZTEwfX07ZS5kZWZhdWx0PXJ9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPXtmcmFjMmhleDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnJvdW5kKDI1NSp0KS50b1N0cmluZygxNik7cmV0dXJuIGUubGVuZ3RoPjE/ZToiMCIrZX0sZGVjMmhleDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDE2KTtyZXR1cm4gZS5sZW5ndGg+MT9lOiIwIitlfX07ZS5kZWZhdWx0PXJ9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTApLGk9big3NiksYT1uKDE3Nyksbz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLmNvbG9yPWUsdGhpcy5jaGFuZ2VkPSExLHRoaXMuZGF0YT10LHRoaXMudHlwZT1uZXcgYS5kZWZhdWx0fXJldHVybiB0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jb2xvcj1lLHRoaXMuY2hhbmdlZD0hMSx0aGlzLmRhdGE9dCx0aGlzLnR5cGUudHlwZT1pLlRZUEUuQUxMLHRoaXN9LHQucHJvdG90eXBlLl9lbnN1cmVIU0w9ZnVuY3Rpb24oKXt2b2lkIDA9PT10aGlzLmRhdGEuaCYmKHRoaXMuZGF0YS5oPXIuZGVmYXVsdC5jaGFubmVsLnJnYjJoc2wodGhpcy5kYXRhLCJoIikpLHZvaWQgMD09PXRoaXMuZGF0YS5zJiYodGhpcy5kYXRhLnM9ci5kZWZhdWx0LmNoYW5uZWwucmdiMmhzbCh0aGlzLmRhdGEsInMiKSksdm9pZCAwPT09dGhpcy5kYXRhLmwmJih0aGlzLmRhdGEubD1yLmRlZmF1bHQuY2hhbm5lbC5yZ2IyaHNsKHRoaXMuZGF0YSwibCIpKX0sdC5wcm90b3R5cGUuX2Vuc3VyZVJHQj1mdW5jdGlvbigpe3ZvaWQgMD09PXRoaXMuZGF0YS5yJiYodGhpcy5kYXRhLnI9ci5kZWZhdWx0LmNoYW5uZWwuaHNsMnJnYih0aGlzLmRhdGEsInIiKSksdm9pZCAwPT09dGhpcy5kYXRhLmcmJih0aGlzLmRhdGEuZz1yLmRlZmF1bHQuY2hhbm5lbC5oc2wycmdiKHRoaXMuZGF0YSwiZyIpKSx2b2lkIDA9PT10aGlzLmRhdGEuYiYmKHRoaXMuZGF0YS5iPXIuZGVmYXVsdC5jaGFubmVsLmhzbDJyZ2IodGhpcy5kYXRhLCJiIikpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50eXBlLmlzKGkuVFlQRS5IU0wpfHx2b2lkIDA9PT10aGlzLmRhdGEucj8odGhpcy5fZW5zdXJlSFNMKCksci5kZWZhdWx0LmNoYW5uZWwuaHNsMnJnYih0aGlzLmRhdGEsInIiKSk6dGhpcy5kYXRhLnJ9LHNldDpmdW5jdGlvbih0KXt0aGlzLnR5cGUuc2V0KGkuVFlQRS5SR0IpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEucj10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnR5cGUuaXMoaS5UWVBFLkhTTCl8fHZvaWQgMD09PXRoaXMuZGF0YS5nPyh0aGlzLl9lbnN1cmVIU0woKSxyLmRlZmF1bHQuY2hhbm5lbC5oc2wycmdiKHRoaXMuZGF0YSwiZyIpKTp0aGlzLmRhdGEuZ30sc2V0OmZ1bmN0aW9uKHQpe3RoaXMudHlwZS5zZXQoaS5UWVBFLlJHQiksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5nPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJiIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHlwZS5pcyhpLlRZUEUuSFNMKXx8dm9pZCAwPT09dGhpcy5kYXRhLmI/KHRoaXMuX2Vuc3VyZUhTTCgpLHIuZGVmYXVsdC5jaGFubmVsLmhzbDJyZ2IodGhpcy5kYXRhLCJiIikpOnRoaXMuZGF0YS5ifSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy50eXBlLnNldChpLlRZUEUuUkdCKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmI9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50eXBlLmlzKGkuVFlQRS5SR0IpfHx2b2lkIDA9PT10aGlzLmRhdGEuaD8odGhpcy5fZW5zdXJlUkdCKCksci5kZWZhdWx0LmNoYW5uZWwucmdiMmhzbCh0aGlzLmRhdGEsImgiKSk6dGhpcy5kYXRhLmh9LHNldDpmdW5jdGlvbih0KXt0aGlzLnR5cGUuc2V0KGkuVFlQRS5IU0wpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEuaD10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnR5cGUuaXMoaS5UWVBFLlJHQil8fHZvaWQgMD09PXRoaXMuZGF0YS5zPyh0aGlzLl9lbnN1cmVSR0IoKSxyLmRlZmF1bHQuY2hhbm5lbC5yZ2IyaHNsKHRoaXMuZGF0YSwicyIpKTp0aGlzLmRhdGEuc30sc2V0OmZ1bmN0aW9uKHQpe3RoaXMudHlwZS5zZXQoaS5UWVBFLkhTTCksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5zPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJsIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHlwZS5pcyhpLlRZUEUuUkdCKXx8dm9pZCAwPT09dGhpcy5kYXRhLmw/KHRoaXMuX2Vuc3VyZVJHQigpLHIuZGVmYXVsdC5jaGFubmVsLnJnYjJoc2wodGhpcy5kYXRhLCJsIikpOnRoaXMuZGF0YS5sfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy50eXBlLnNldChpLlRZUEUuSFNMKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmw9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhLmF9LHNldDpmdW5jdGlvbih0KXt0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmE9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpO2UuZGVmYXVsdD1vfSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDc2KSxpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMudHlwZT1yLlRZUEUuQUxMfXJldHVybiB0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50eXBlfSx0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodGhpcy50eXBlJiZ0aGlzLnR5cGUhPT10KXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNoYW5nZSBib3RoIFJHQiBhbmQgSFNMIGNoYW5uZWxzIGF0IHRoZSBzYW1lIHRpbWUiKTt0aGlzLnR5cGU9dH0sdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLnR5cGU9ci5UWVBFLkFMTH0sdC5wcm90b3R5cGUuaXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudHlwZT09PXR9LHR9KCk7ZS5kZWZhdWx0PWl9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTApLGk9e307ZS5ERUMySEVYPWk7Zm9yKHZhciBhPTA7YTw9MjU1O2ErKylpW2FdPXIuZGVmYXVsdC51bml0LmRlYzJoZXgoYSl9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oOTkpLGk9e2NvbG9yczp7YWxpY2VibHVlOiIjZjBmOGZmIixhbnRpcXVld2hpdGU6IiNmYWViZDciLGFxdWE6IiMwMGZmZmYiLGFxdWFtYXJpbmU6IiM3ZmZmZDQiLGF6dXJlOiIjZjBmZmZmIixiZWlnZToiI2Y1ZjVkYyIsYmlzcXVlOiIjZmZlNGM0IixibGFjazoiIzAwMDAwMCIsYmxhbmNoZWRhbG1vbmQ6IiNmZmViY2QiLGJsdWU6IiMwMDAwZmYiLGJsdWV2aW9sZXQ6IiM4YTJiZTIiLGJyb3duOiIjYTUyYTJhIixidXJseXdvb2Q6IiNkZWI4ODciLGNhZGV0Ymx1ZToiIzVmOWVhMCIsY2hhcnRyZXVzZToiIzdmZmYwMCIsY2hvY29sYXRlOiIjZDI2OTFlIixjb3JhbDoiI2ZmN2Y1MCIsY29ybmZsb3dlcmJsdWU6IiM2NDk1ZWQiLGNvcm5zaWxrOiIjZmZmOGRjIixjcmltc29uOiIjZGMxNDNjIixjeWFuYXF1YToiIzAwZmZmZiIsZGFya2JsdWU6IiMwMDAwOGIiLGRhcmtjeWFuOiIjMDA4YjhiIixkYXJrZ29sZGVucm9kOiIjYjg4NjBiIixkYXJrZ3JheToiI2E5YTlhOSIsZGFya2dyZWVuOiIjMDA2NDAwIixkYXJrZ3JleToiI2E5YTlhOSIsZGFya2toYWtpOiIjYmRiNzZiIixkYXJrbWFnZW50YToiIzhiMDA4YiIsZGFya29saXZlZ3JlZW46IiM1NTZiMmYiLGRhcmtvcmFuZ2U6IiNmZjhjMDAiLGRhcmtvcmNoaWQ6IiM5OTMyY2MiLGRhcmtyZWQ6IiM4YjAwMDAiLGRhcmtzYWxtb246IiNlOTk2N2EiLGRhcmtzZWFncmVlbjoiIzhmYmM4ZiIsZGFya3NsYXRlYmx1ZToiIzQ4M2Q4YiIsZGFya3NsYXRlZ3JheToiIzJmNGY0ZiIsZGFya3NsYXRlZ3JleToiIzJmNGY0ZiIsZGFya3R1cnF1b2lzZToiIzAwY2VkMSIsZGFya3Zpb2xldDoiIzk0MDBkMyIsZGVlcHBpbms6IiNmZjE0OTMiLGRlZXBza3libHVlOiIjMDBiZmZmIixkaW1ncmF5OiIjNjk2OTY5IixkaW1ncmV5OiIjNjk2OTY5Iixkb2RnZXJibHVlOiIjMWU5MGZmIixmaXJlYnJpY2s6IiNiMjIyMjIiLGZsb3JhbHdoaXRlOiIjZmZmYWYwIixmb3Jlc3RncmVlbjoiIzIyOGIyMiIsZnVjaHNpYToiI2ZmMDBmZiIsZ2FpbnNib3JvOiIjZGNkY2RjIixnaG9zdHdoaXRlOiIjZjhmOGZmIixnb2xkOiIjZmZkNzAwIixnb2xkZW5yb2Q6IiNkYWE1MjAiLGdyYXk6IiM4MDgwODAiLGdyZWVuOiIjMDA4MDAwIixncmVlbnllbGxvdzoiI2FkZmYyZiIsZ3JleToiIzgwODA4MCIsaG9uZXlkZXc6IiNmMGZmZjAiLGhvdHBpbms6IiNmZjY5YjQiLGluZGlhbnJlZDoiI2NkNWM1YyIsaW5kaWdvOiIjNGIwMDgyIixpdm9yeToiI2ZmZmZmMCIsa2hha2k6IiNmMGU2OGMiLGxhdmVuZGVyOiIjZTZlNmZhIixsYXZlbmRlcmJsdXNoOiIjZmZmMGY1IixsYXduZ3JlZW46IiM3Y2ZjMDAiLGxlbW9uY2hpZmZvbjoiI2ZmZmFjZCIsbGlnaHRibHVlOiIjYWRkOGU2IixsaWdodGNvcmFsOiIjZjA4MDgwIixsaWdodGN5YW46IiNlMGZmZmYiLGxpZ2h0Z29sZGVucm9keWVsbG93OiIjZmFmYWQyIixsaWdodGdyYXk6IiNkM2QzZDMiLGxpZ2h0Z3JlZW46IiM5MGVlOTAiLGxpZ2h0Z3JleToiI2QzZDNkMyIsbGlnaHRwaW5rOiIjZmZiNmMxIixsaWdodHNhbG1vbjoiI2ZmYTA3YSIsbGlnaHRzZWFncmVlbjoiIzIwYjJhYSIsbGlnaHRza3libHVlOiIjODdjZWZhIixsaWdodHNsYXRlZ3JheToiIzc3ODg5OSIsbGlnaHRzbGF0ZWdyZXk6IiM3Nzg4OTkiLGxpZ2h0c3RlZWxibHVlOiIjYjBjNGRlIixsaWdodHllbGxvdzoiI2ZmZmZlMCIsbGltZToiIzAwZmYwMCIsbGltZWdyZWVuOiIjMzJjZDMyIixsaW5lbjoiI2ZhZjBlNiIsbWFnZW50YToiI2ZmMDBmZiIsbWFyb29uOiIjODAwMDAwIixtZWRpdW1hcXVhbWFyaW5lOiIjNjZjZGFhIixtZWRpdW1ibHVlOiIjMDAwMGNkIixtZWRpdW1vcmNoaWQ6IiNiYTU1ZDMiLG1lZGl1bXB1cnBsZToiIzkzNzBkYiIsbWVkaXVtc2VhZ3JlZW46IiMzY2IzNzEiLG1lZGl1bXNsYXRlYmx1ZToiIzdiNjhlZSIsbWVkaXVtc3ByaW5nZ3JlZW46IiMwMGZhOWEiLG1lZGl1bXR1cnF1b2lzZToiIzQ4ZDFjYyIsbWVkaXVtdmlvbGV0cmVkOiIjYzcxNTg1IixtaWRuaWdodGJsdWU6IiMxOTE5NzAiLG1pbnRjcmVhbToiI2Y1ZmZmYSIsbWlzdHlyb3NlOiIjZmZlNGUxIixtb2NjYXNpbjoiI2ZmZTRiNSIsbmF2YWpvd2hpdGU6IiNmZmRlYWQiLG5hdnk6IiMwMDAwODAiLG9sZGxhY2U6IiNmZGY1ZTYiLG9saXZlOiIjODA4MDAwIixvbGl2ZWRyYWI6IiM2YjhlMjMiLG9yYW5nZToiI2ZmYTUwMCIsb3JhbmdlcmVkOiIjZmY0NTAwIixvcmNoaWQ6IiNkYTcwZDYiLHBhbGVnb2xkZW5yb2Q6IiNlZWU4YWEiLHBhbGVncmVlbjoiIzk4ZmI5OCIscGFsZXR1cnF1b2lzZToiI2FmZWVlZSIscGFsZXZpb2xldHJlZDoiI2RiNzA5MyIscGFwYXlhd2hpcDoiI2ZmZWZkNSIscGVhY2hwdWZmOiIjZmZkYWI5IixwZXJ1OiIjY2Q4NTNmIixwaW5rOiIjZmZjMGNiIixwbHVtOiIjZGRhMGRkIixwb3dkZXJibHVlOiIjYjBlMGU2IixwdXJwbGU6IiM4MDAwODAiLHJlYmVjY2FwdXJwbGU6IiM2NjMzOTkiLHJlZDoiI2ZmMDAwMCIscm9zeWJyb3duOiIjYmM4ZjhmIixyb3lhbGJsdWU6IiM0MTY5ZTEiLHNhZGRsZWJyb3duOiIjOGI0NTEzIixzYWxtb246IiNmYTgwNzIiLHNhbmR5YnJvd246IiNmNGE0NjAiLHNlYWdyZWVuOiIjMmU4YjU3IixzZWFzaGVsbDoiI2ZmZjVlZSIsc2llbm5hOiIjYTA1MjJkIixzaWx2ZXI6IiNjMGMwYzAiLHNreWJsdWU6IiM4N2NlZWIiLHNsYXRlYmx1ZToiIzZhNWFjZCIsc2xhdGVncmF5OiIjNzA4MDkwIixzbGF0ZWdyZXk6IiM3MDgwOTAiLHNub3c6IiNmZmZhZmEiLHNwcmluZ2dyZWVuOiIjMDBmZjdmIix0YW46IiNkMmI0OGMiLHRlYWw6IiMwMDgwODAiLHRoaXN0bGU6IiNkOGJmZDgiLHRyYW5zcGFyZW50OiIjMDAwMDAwMDAiLHR1cnF1b2lzZToiIzQwZTBkMCIsdmlvbGV0OiIjZWU4MmVlIix3aGVhdDoiI2Y1ZGViMyIsd2hpdGU6IiNmZmZmZmYiLHdoaXRlc21va2U6IiNmNWY1ZjUiLHllbGxvdzoiI2ZmZmYwMCIseWVsbG93Z3JlZW46IiM5YWNkMzIifSxwYXJzZTpmdW5jdGlvbih0KXt0PXQudG9Mb3dlckNhc2UoKTt2YXIgZT1pLmNvbG9yc1t0XTtpZihlKXJldHVybiByLmRlZmF1bHQucGFyc2UoZSl9LHN0cmluZ2lmeTpmdW5jdGlvbih0KXt2YXIgZT1yLmRlZmF1bHQuc3RyaW5naWZ5KHQpO2Zvcih2YXIgbiBpbiBpLmNvbG9ycylpZihpLmNvbG9yc1tuXT09PWUpcmV0dXJuIG59fTtlLmRlZmF1bHQ9aX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxMCksaT1uKDQ2KSxhPXtyZTovXnJnYmE/XChccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZVxkKyk/KCU/KSlccyo/KD86LHxccylccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZVxkKyk/KCU/KSlccyo/KD86LHxccylccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZVxkKyk/KCU/KSkoPzpccyo/KD86LHxcLylccyo/XCs/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZVxkKyk/KCU/KSkpP1xzKj9cKSQvaSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10LmNoYXJDb2RlQXQoMCk7aWYoMTE0PT09ZXx8ODI9PT1lKXt2YXIgbj10Lm1hdGNoKGEucmUpO2lmKG4pe3ZhciBvPW5bMV0scz1uWzJdLGM9blszXSx1PW5bNF0sbD1uWzVdLGg9bls2XSxmPW5bN10sZD1uWzhdO3JldHVybiBpLmRlZmF1bHQuc2V0KHtyOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLnIocz8yLjU1KnBhcnNlRmxvYXQobyk6cGFyc2VGbG9hdChvKSksZzpyLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5nKHU/Mi41NSpwYXJzZUZsb2F0KGMpOnBhcnNlRmxvYXQoYykpLGI6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuYihoPzIuNTUqcGFyc2VGbG9hdChsKTpwYXJzZUZsb2F0KGwpKSxhOmY/ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuYShkP3BhcnNlRmxvYXQoZikvMTAwOnBhcnNlRmxvYXQoZikpOjF9LHQpfX19LHN0cmluZ2lmeTpmdW5jdGlvbih0KXtyZXR1cm4gdC5hPDE/InJnYmEoIityLmRlZmF1bHQubGFuZy5yb3VuZCh0LnIpKyIsICIrci5kZWZhdWx0Lmxhbmcucm91bmQodC5nKSsiLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKHQuYikrIiwgIityLmRlZmF1bHQubGFuZy5yb3VuZCh0LmEpKyIpIjoicmdiKCIrci5kZWZhdWx0Lmxhbmcucm91bmQodC5yKSsiLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKHQuZykrIiwgIityLmRlZmF1bHQubGFuZy5yb3VuZCh0LmIpKyIpIn19O2UuZGVmYXVsdD1hfSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDEwKSxpPW4oNDYpLGE9e3JlOi9eaHNsYT9cKFxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplLT9cZCspPyg/OmRlZ3xncmFkfHJhZHx0dXJuKT8pXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmUtP1xkKyk/JSlccyo/KD86LHxccylccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZS0/XGQrKT8lKSg/OlxzKj8oPzosfFwvKVxzKj9cKz8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplLT9cZCspPyglKT8pKT9ccyo/XCkkL2ksaHVlUmU6L14oLis/KShkZWd8Z3JhZHxyYWR8dHVybikkL2ksX2h1ZTJkZWc6ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXRjaChhLmh1ZVJlKTtpZihlKXt2YXIgbj1lWzFdO3N3aXRjaChlWzJdKXtjYXNlImdyYWQiOnJldHVybiByLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5oKC45KnBhcnNlRmxvYXQobikpO2Nhc2UicmFkIjpyZXR1cm4gci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuaCgxODAqcGFyc2VGbG9hdChuKS9NYXRoLlBJKTtjYXNlInR1cm4iOnJldHVybiByLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5oKDM2MCpwYXJzZUZsb2F0KG4pKX19cmV0dXJuIHIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmgocGFyc2VGbG9hdCh0KSl9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2hhckNvZGVBdCgwKTtpZigxMDQ9PT1lfHw3Mj09PWUpe3ZhciBuPXQubWF0Y2goYS5yZSk7aWYobil7dmFyIG89blsxXSxzPW5bMl0sYz1uWzNdLHU9bls0XSxsPW5bNV07cmV0dXJuIGkuZGVmYXVsdC5zZXQoe2g6YS5faHVlMmRlZyhvKSxzOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLnMocGFyc2VGbG9hdChzKSksbDpyLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5sKHBhcnNlRmxvYXQoYykpLGE6dT9yLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5hKGw/cGFyc2VGbG9hdCh1KS8xMDA6cGFyc2VGbG9hdCh1KSk6MX0sdCl9fX0sc3RyaW5naWZ5OmZ1bmN0aW9uKHQpe3JldHVybiB0LmE8MT8iaHNsYSgiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKHQuaCkrIiwgIityLmRlZmF1bHQubGFuZy5yb3VuZCh0LnMpKyIlLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKHQubCkrIiUsICIrdC5hKyIpIjoiaHNsKCIrci5kZWZhdWx0Lmxhbmcucm91bmQodC5oKSsiLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKHQucykrIiUsICIrci5kZWZhdWx0Lmxhbmcucm91bmQodC5sKSsiJSkifX07ZS5kZWZhdWx0PWF9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMjkpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQsInIiKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMjkpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQsImciKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMjkpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQsImIiKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMjkpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQsImgiKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMjkpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQsInMiKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMjkpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQsImwiKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTAzKTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCl7cmV0dXJuIXIuZGVmYXVsdCh0KX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTYpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIHIuZGVmYXVsdC5wYXJzZSh0KSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDMyKTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5kZWZhdWx0KHQsInMiLGUpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigzMik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuZGVmYXVsdCh0LCJzIiwtZSl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDMyKTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5kZWZhdWx0KHQsImwiLGUpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigzMik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuZGVmYXVsdCh0LCJsIiwtZSl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDMyKTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHIuZGVmYXVsdCh0LCJoIiwxODApfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big1Myk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQodCx7czowfSl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDE2KSxpPW4oMTA3KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT0xMDApO3ZhciBuPXIuZGVmYXVsdC5wYXJzZSh0KTtyZXR1cm4gbi5yPTI1NS1uLnIsbi5nPTI1NS1uLmcsbi5iPTI1NS1uLmIsaS5kZWZhdWx0KG4sdCxlKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTApLGk9bigxNiksYT1uKDEwNik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSl7dmFyIG4sbyxzLGM9aS5kZWZhdWx0LnBhcnNlKHQpLHU9e307Zm9yKHZhciBsIGluIGUpdVtsXT0obj1jW2xdLG89ZVtsXSxzPXIuZGVmYXVsdC5jaGFubmVsLm1heFtsXSxvPjA/KHMtbikqby8xMDA6bipvLzEwMCk7cmV0dXJuIGEuZGVmYXVsdCh0LHUpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPXsiLi9sb2NhbGUiOjEwOCwiLi9sb2NhbGUuanMiOjEwOH07ZnVuY3Rpb24gaSh0KXt2YXIgZT1hKHQpO3JldHVybiBuKGUpfWZ1bmN0aW9uIGEodCl7aWYoIW4ubyhyLHQpKXt2YXIgZT1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIit0KyInIik7dGhyb3cgZS5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixlfXJldHVybiByW3RdfWkua2V5cz1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyhyKX0saS5yZXNvbHZlPWEsdC5leHBvcnRzPWksaS5pZD0xOTh9LGZ1bmN0aW9uKHQsZSxuKXt0LmV4cG9ydHM9e0dyYXBoOm4oNzcpLHZlcnNpb246bigzMDEpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTA5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCw0KX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU2KSxpPUFycmF5LnByb3RvdHlwZS5zcGxpY2U7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX18sbj1yKGUsdCk7cmV0dXJuIShuPDApJiYobj09ZS5sZW5ndGgtMT9lLnBvcCgpOmkuY2FsbChlLG4sMSksLS10aGlzLnNpemUsITApfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTYpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fLG49cihlLHQpO3JldHVybiBuPDA/dm9pZCAwOmVbbl1bMV19fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1Nik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKHRoaXMuX19kYXRhX18sdCk+LTF9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1Nik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fX2RhdGFfXyxpPXIobix0KTtyZXR1cm4gaTwwPygrK3RoaXMuc2l6ZSxuLnB1c2goW3QsZV0pKTpuW2ldWzFdPWUsdGhpc319LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU1KTt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPW5ldyByLHRoaXMuc2l6ZT0wfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fX2RhdGFfXyxuPWUuZGVsZXRlKHQpO3JldHVybiB0aGlzLnNpemU9ZS5zaXplLG59fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQodCl9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1NSksaT1uKDc4KSxhPW4oNzkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX19kYXRhX187aWYobiBpbnN0YW5jZW9mIHIpe3ZhciBvPW4uX19kYXRhX187aWYoIWl8fG8ubGVuZ3RoPDE5OSlyZXR1cm4gby5wdXNoKFt0LGVdKSx0aGlzLnNpemU9KytuLnNpemUsdGhpcztuPXRoaXMuX19kYXRhX189bmV3IGEobyl9cmV0dXJuIG4uc2V0KHQsZSksdGhpcy5zaXplPW4uc2l6ZSx0aGlzfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzgpLGk9bigyMTUpLGE9bigxMyksbz1uKDExMSkscz0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxjPUZ1bmN0aW9uLnByb3RvdHlwZSx1PU9iamVjdC5wcm90b3R5cGUsbD1jLnRvU3RyaW5nLGg9dS5oYXNPd25Qcm9wZXJ0eSxmPVJlZ0V4cCgiXiIrbC5jYWxsKGgpLnJlcGxhY2UoL1tcXF4kLiorPygpW1xde318XS9nLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hKCFhKHQpfHxpKHQpKSYmKHIodCk/ZjpzKS50ZXN0KG8odCkpfX0sZnVuY3Rpb24odCxlKXt2YXIgbjtuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCk7dHJ5e249bnx8bmV3IEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9Y2F0Y2godCl7Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJihuPXdpbmRvdyl9dC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM5KSxpPU9iamVjdC5wcm90b3R5cGUsYT1pLmhhc093blByb3BlcnR5LG89aS50b1N0cmluZyxzPXI/ci50b1N0cmluZ1RhZzp2b2lkIDA7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWEuY2FsbCh0LHMpLG49dFtzXTt0cnl7dFtzXT12b2lkIDA7dmFyIHI9ITB9Y2F0Y2godCl7fXZhciBpPW8uY2FsbCh0KTtyZXR1cm4gciYmKGU/dFtzXT1uOmRlbGV0ZSB0W3NdKSxpfX0sZnVuY3Rpb24odCxlKXt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbi5jYWxsKHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByLGk9bigyMTYpLGE9KHI9L1teLl0rJC8uZXhlYyhpJiZpLmtleXMmJmkua2V5cy5JRV9QUk9UT3x8IiIpKT8iU3ltYm9sKHNyYylfMS4iK3I6IiI7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiEhYSYmYSBpbiB0fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTkpWyJfX2NvcmUtanNfc2hhcmVkX18iXTt0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD92b2lkIDA6dFtlXX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDIxOSksaT1uKDU1KSxhPW4oNzgpO3QuZXhwb3J0cz1mdW5jdGlvbigpe3RoaXMuc2l6ZT0wLHRoaXMuX19kYXRhX189e2hhc2g6bmV3IHIsbWFwOm5ldyhhfHxpKSxzdHJpbmc6bmV3IHJ9fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjIwKSxpPW4oMjIxKSxhPW4oMjIyKSxvPW4oMjIzKSxzPW4oMjI0KTtmdW5jdGlvbiBjKHQpe3ZhciBlPS0xLG49bnVsbD09dD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPG47KXt2YXIgcj10W2VdO3RoaXMuc2V0KHJbMF0sclsxXSl9fWMucHJvdG90eXBlLmNsZWFyPXIsYy5wcm90b3R5cGUuZGVsZXRlPWksYy5wcm90b3R5cGUuZ2V0PWEsYy5wcm90b3R5cGUuaGFzPW8sYy5wcm90b3R5cGUuc2V0PXMsdC5leHBvcnRzPWN9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU3KTt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPXI/cihudWxsKTp7fSx0aGlzLnNpemU9MH19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaGFzKHQpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1t0XTtyZXR1cm4gdGhpcy5zaXplLT1lPzE6MCxlfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTcpLGk9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fX2RhdGFfXztpZihyKXt2YXIgbj1lW3RdO3JldHVybiJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIj09PW4/dm9pZCAwOm59cmV0dXJuIGkuY2FsbChlLHQpP2VbdF06dm9pZCAwfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTcpLGk9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fX2RhdGFfXztyZXR1cm4gcj92b2lkIDAhPT1lW3RdOmkuY2FsbChlLHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXModCk/MDoxLG5bdF09ciYmdm9pZCAwPT09ZT8iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI6ZSx0aGlzfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1yKHRoaXMsdCkuZGVsZXRlKHQpO3JldHVybiB0aGlzLnNpemUtPWU/MTowLGV9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4ic3RyaW5nIj09ZXx8Im51bWJlciI9PWV8fCJzeW1ib2wiPT1lfHwiYm9vbGVhbiI9PWU/Il9fcHJvdG9fXyIhPT10Om51bGw9PT10fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcih0aGlzLHQpLmdldCh0KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodGhpcyx0KS5oYXModCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1OCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49cih0aGlzLHQpLGk9bi5zaXplO3JldHVybiBuLnNldCh0LGUpLHRoaXMuc2l6ZSs9bi5zaXplPT1pPzA6MSx0aGlzfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDcpLGk9bigzMCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJnIoZSxpKGUpLHQpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49LTEscj1BcnJheSh0KTsrK248dDspcltuXT1lKG4pO3JldHVybiByfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzQpLGk9bigyMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQpJiYiW29iamVjdCBBcmd1bWVudHNdIj09cih0KX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuITF9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzNCksaT1uKDgxKSxhPW4oMjEpLG89e307b1siW29iamVjdCBGbG9hdDMyQXJyYXldIl09b1siW29iamVjdCBGbG9hdDY0QXJyYXldIl09b1siW29iamVjdCBJbnQ4QXJyYXldIl09b1siW29iamVjdCBJbnQxNkFycmF5XSJdPW9bIltvYmplY3QgSW50MzJBcnJheV0iXT1vWyJbb2JqZWN0IFVpbnQ4QXJyYXldIl09b1siW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iXT1vWyJbb2JqZWN0IFVpbnQxNkFycmF5XSJdPW9bIltvYmplY3QgVWludDMyQXJyYXldIl09ITAsb1siW29iamVjdCBBcmd1bWVudHNdIl09b1siW29iamVjdCBBcnJheV0iXT1vWyJbb2JqZWN0IEFycmF5QnVmZmVyXSJdPW9bIltvYmplY3QgQm9vbGVhbl0iXT1vWyJbb2JqZWN0IERhdGFWaWV3XSJdPW9bIltvYmplY3QgRGF0ZV0iXT1vWyJbb2JqZWN0IEVycm9yXSJdPW9bIltvYmplY3QgRnVuY3Rpb25dIl09b1siW29iamVjdCBNYXBdIl09b1siW29iamVjdCBOdW1iZXJdIl09b1siW29iamVjdCBPYmplY3RdIl09b1siW29iamVjdCBSZWdFeHBdIl09b1siW29iamVjdCBTZXRdIl09b1siW29iamVjdCBTdHJpbmddIl09b1siW29iamVjdCBXZWFrTWFwXSJdPSExLHQuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYSh0KSYmaSh0Lmxlbmd0aCkmJiEhb1tyKHQpXX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDExNCkoT2JqZWN0LmtleXMsT2JqZWN0KTt0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDcpLGk9big0MSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJnIoZSxpKGUpLHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTMpLGk9big2MyksYT1uKDIzOCksbz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighcih0KSlyZXR1cm4gYSh0KTt2YXIgZT1pKHQpLG49W107Zm9yKHZhciBzIGluIHQpKCJjb25zdHJ1Y3RvciIhPXN8fCFlJiZvLmNhbGwodCxzKSkmJm4ucHVzaChzKTtyZXR1cm4gbn19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2lmKG51bGwhPXQpZm9yKHZhciBuIGluIE9iamVjdCh0KSllLnB1c2gobik7cmV0dXJuIGV9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0NyksaT1uKDg0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcih0LGkodCksZSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0NyksaT1uKDExOSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIodCxpKHQpLGUpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTIxKSxpPW4oMTE5KSxhPW4oNDEpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcih0LGEsaSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMykobigxOSksIkRhdGFWaWV3Iik7dC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMzKShuKDE5KSwiUHJvbWlzZSIpO3QuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMykobigxOSksIldlYWtNYXAiKTt0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlKXt2YXIgbj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxyPW5ldyB0LmNvbnN0cnVjdG9yKGUpO3JldHVybiBlJiYic3RyaW5nIj09dHlwZW9mIHRbMF0mJm4uY2FsbCh0LCJpbmRleCIpJiYoci5pbmRleD10LmluZGV4LHIuaW5wdXQ9dC5pbnB1dCkscn19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg2KSxpPW4oMjQ3KSxhPW4oMjQ4KSxvPW4oMjQ5KSxzPW4oMTI0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBjPXQuY29uc3RydWN0b3I7c3dpdGNoKGUpe2Nhc2UiW29iamVjdCBBcnJheUJ1ZmZlcl0iOnJldHVybiByKHQpO2Nhc2UiW29iamVjdCBCb29sZWFuXSI6Y2FzZSJbb2JqZWN0IERhdGVdIjpyZXR1cm4gbmV3IGMoK3QpO2Nhc2UiW29iamVjdCBEYXRhVmlld10iOnJldHVybiBpKHQsbik7Y2FzZSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iOmNhc2UiW29iamVjdCBGbG9hdDY0QXJyYXldIjpjYXNlIltvYmplY3QgSW50OEFycmF5XSI6Y2FzZSJbb2JqZWN0IEludDE2QXJyYXldIjpjYXNlIltvYmplY3QgSW50MzJBcnJheV0iOmNhc2UiW29iamVjdCBVaW50OEFycmF5XSI6Y2FzZSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSI6Y2FzZSJbb2JqZWN0IFVpbnQxNkFycmF5XSI6Y2FzZSJbb2JqZWN0IFVpbnQzMkFycmF5XSI6cmV0dXJuIHModCxuKTtjYXNlIltvYmplY3QgTWFwXSI6cmV0dXJuIG5ldyBjO2Nhc2UiW29iamVjdCBOdW1iZXJdIjpjYXNlIltvYmplY3QgU3RyaW5nXSI6cmV0dXJuIG5ldyBjKHQpO2Nhc2UiW29iamVjdCBSZWdFeHBdIjpyZXR1cm4gYSh0KTtjYXNlIltvYmplY3QgU2V0XSI6cmV0dXJuIG5ldyBjO2Nhc2UiW29iamVjdCBTeW1ib2xdIjpyZXR1cm4gbyh0KX19fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big4Nik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZT9yKHQuYnVmZmVyKTp0LmJ1ZmZlcjtyZXR1cm4gbmV3IHQuY29uc3RydWN0b3Iobix0LmJ5dGVPZmZzZXQsdC5ieXRlTGVuZ3RoKX19LGZ1bmN0aW9uKHQsZSl7dmFyIG49L1x3KiQvO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgdC5jb25zdHJ1Y3Rvcih0LnNvdXJjZSxuLmV4ZWModCkpO3JldHVybiBlLmxhc3RJbmRleD10Lmxhc3RJbmRleCxlfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzkpLGk9cj9yLnByb3RvdHlwZTp2b2lkIDAsYT1pP2kudmFsdWVPZjp2b2lkIDA7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhP09iamVjdChhLmNhbGwodCkpOnt9fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjUxKSxpPW4oNjIpLGE9big4Miksbz1hJiZhLmlzTWFwLHM9bz9pKG8pOnI7dC5leHBvcnRzPXN9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQyKSxpPW4oMjEpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0KSYmIltvYmplY3QgTWFwXSI9PXIodCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNTMpLGk9big2MiksYT1uKDgyKSxvPWEmJmEuaXNTZXQscz1vP2kobyk6cjt0LmV4cG9ydHM9c30sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDIpLGk9bigyMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQpJiYiW29iamVjdCBTZXRdIj09cih0KX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4scil7Zm9yKHZhciBpPS0xLGE9T2JqZWN0KGUpLG89cihlKSxzPW8ubGVuZ3RoO3MtLTspe3ZhciBjPW9bdD9zOisraV07aWYoITE9PT1uKGFbY10sYyxhKSlicmVha31yZXR1cm4gZX19fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4saSl7aWYobnVsbD09bilyZXR1cm4gbjtpZighcihuKSlyZXR1cm4gdChuLGkpO2Zvcih2YXIgYT1uLmxlbmd0aCxvPWU/YTotMSxzPU9iamVjdChuKTsoZT9vLS06KytvPGEpJiYhMSE9PWkoc1tvXSxvLHMpOyk7cmV0dXJuIG59fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPVtdO3JldHVybiByKHQsKGZ1bmN0aW9uKHQscixpKXtlKHQscixpKSYmbi5wdXNoKHQpfSkpLG59fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNTgpLGk9bigyNjYpLGE9bigxMzUpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1pKHQpO3JldHVybiAxPT1lLmxlbmd0aCYmZVswXVsyXT9hKGVbMF1bMF0sZVswXVsxXSk6ZnVuY3Rpb24obil7cmV0dXJuIG49PT10fHxyKG4sdCxlKX19fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1NCksaT1uKDEzMCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLGEpe3ZhciBvPW4ubGVuZ3RoLHM9byxjPSFhO2lmKG51bGw9PXQpcmV0dXJuIXM7Zm9yKHQ9T2JqZWN0KHQpO28tLTspe3ZhciB1PW5bb107aWYoYyYmdVsyXT91WzFdIT09dFt1WzBdXTohKHVbMF1pbiB0KSlyZXR1cm4hMX1mb3IoOysrbzxzOyl7dmFyIGw9KHU9bltvXSlbMF0saD10W2xdLGY9dVsxXTtpZihjJiZ1WzJdKXtpZih2b2lkIDA9PT1oJiYhKGwgaW4gdCkpcmV0dXJuITF9ZWxzZXt2YXIgZD1uZXcgcjtpZihhKXZhciBwPWEoaCxmLGwsdCxlLGQpO2lmKCEodm9pZCAwPT09cD9pKGYsaCwzLGEsZCk6cCkpcmV0dXJuITF9fXJldHVybiEwfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTQpLGk9bigxMzEpLGE9bigyNjMpLG89bigyNjUpLHM9big0MiksYz1uKDUpLHU9big0MCksbD1uKDQ5KSxoPSJbb2JqZWN0IE9iamVjdF0iLGY9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4sZCxwLHkpe3ZhciBnPWModCksdj1jKGUpLG09Zz8iW29iamVjdCBBcnJheV0iOnModCksYj12PyJbb2JqZWN0IEFycmF5XSI6cyhlKSx4PShtPSJbb2JqZWN0IEFyZ3VtZW50c10iPT1tP2g6bSk9PWgsXz0oYj0iW29iamVjdCBBcmd1bWVudHNdIj09Yj9oOmIpPT1oLGs9bT09YjtpZihrJiZ1KHQpKXtpZighdShlKSlyZXR1cm4hMTtnPSEwLHg9ITF9aWYoayYmIXgpcmV0dXJuIHl8fCh5PW5ldyByKSxnfHxsKHQpP2kodCxlLG4sZCxwLHkpOmEodCxlLG0sbixkLHAseSk7aWYoISgxJm4pKXt2YXIgdz14JiZmLmNhbGwodCwiX193cmFwcGVkX18iKSxFPV8mJmYuY2FsbChlLCJfX3dyYXBwZWRfXyIpO2lmKHd8fEUpe3ZhciBUPXc/dC52YWx1ZSgpOnQsQz1FP2UudmFsdWUoKTplO3JldHVybiB5fHwoeT1uZXcgcikscChULEMsbixkLHkpfX1yZXR1cm4hIWsmJih5fHwoeT1uZXcgciksbyh0LGUsbixkLHAseSkpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX19kYXRhX18uc2V0KHQsIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iKSx0aGlzfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHQpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49LTEscj1udWxsPT10PzA6dC5sZW5ndGg7KytuPHI7KWlmKGUodFtuXSxuLHQpKXJldHVybiEwO3JldHVybiExfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzkpLGk9bigxMjMpLGE9bigzNyksbz1uKDEzMSkscz1uKDI2NCksYz1uKDkxKSx1PXI/ci5wcm90b3R5cGU6dm9pZCAwLGw9dT91LnZhbHVlT2Y6dm9pZCAwO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixyLHUsaCxmKXtzd2l0Y2gobil7Y2FzZSJbb2JqZWN0IERhdGFWaWV3XSI6aWYodC5ieXRlTGVuZ3RoIT1lLmJ5dGVMZW5ndGh8fHQuYnl0ZU9mZnNldCE9ZS5ieXRlT2Zmc2V0KXJldHVybiExO3Q9dC5idWZmZXIsZT1lLmJ1ZmZlcjtjYXNlIltvYmplY3QgQXJyYXlCdWZmZXJdIjpyZXR1cm4hKHQuYnl0ZUxlbmd0aCE9ZS5ieXRlTGVuZ3RofHwhaChuZXcgaSh0KSxuZXcgaShlKSkpO2Nhc2UiW29iamVjdCBCb29sZWFuXSI6Y2FzZSJbb2JqZWN0IERhdGVdIjpjYXNlIltvYmplY3QgTnVtYmVyXSI6cmV0dXJuIGEoK3QsK2UpO2Nhc2UiW29iamVjdCBFcnJvcl0iOnJldHVybiB0Lm5hbWU9PWUubmFtZSYmdC5tZXNzYWdlPT1lLm1lc3NhZ2U7Y2FzZSJbb2JqZWN0IFJlZ0V4cF0iOmNhc2UiW29iamVjdCBTdHJpbmddIjpyZXR1cm4gdD09ZSsiIjtjYXNlIltvYmplY3QgTWFwXSI6dmFyIGQ9cztjYXNlIltvYmplY3QgU2V0XSI6dmFyIHA9MSZyO2lmKGR8fChkPWMpLHQuc2l6ZSE9ZS5zaXplJiYhcClyZXR1cm4hMTt2YXIgeT1mLmdldCh0KTtpZih5KXJldHVybiB5PT1lO3J8PTIsZi5zZXQodCxlKTt2YXIgZz1vKGQodCksZChlKSxyLHUsaCxmKTtyZXR1cm4gZi5kZWxldGUodCksZztjYXNlIltvYmplY3QgU3ltYm9sXSI6aWYobClyZXR1cm4gbC5jYWxsKHQpPT1sLmNhbGwoZSl9cmV0dXJuITF9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0tMSxuPUFycmF5KHQuc2l6ZSk7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCxyKXtuWysrZV09W3IsdF19KSksbn19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEyMCksaT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixhLG8scyl7dmFyIGM9MSZuLHU9cih0KSxsPXUubGVuZ3RoO2lmKGwhPXIoZSkubGVuZ3RoJiYhYylyZXR1cm4hMTtmb3IodmFyIGg9bDtoLS07KXt2YXIgZj11W2hdO2lmKCEoYz9mIGluIGU6aS5jYWxsKGUsZikpKXJldHVybiExfXZhciBkPXMuZ2V0KHQpO2lmKGQmJnMuZ2V0KGUpKXJldHVybiBkPT1lO3ZhciBwPSEwO3Muc2V0KHQsZSkscy5zZXQoZSx0KTtmb3IodmFyIHk9YzsrK2g8bDspe3ZhciBnPXRbZj11W2hdXSx2PWVbZl07aWYoYSl2YXIgbT1jP2EodixnLGYsZSx0LHMpOmEoZyx2LGYsdCxlLHMpO2lmKCEodm9pZCAwPT09bT9nPT09dnx8byhnLHYsbixhLHMpOm0pKXtwPSExO2JyZWFrfXl8fCh5PSJjb25zdHJ1Y3RvciI9PWYpfWlmKHAmJiF5KXt2YXIgYj10LmNvbnN0cnVjdG9yLHg9ZS5jb25zdHJ1Y3RvcjtiIT14JiYiY29uc3RydWN0b3IiaW4gdCYmImNvbnN0cnVjdG9yImluIGUmJiEoImZ1bmN0aW9uIj09dHlwZW9mIGImJmIgaW5zdGFuY2VvZiBiJiYiZnVuY3Rpb24iPT10eXBlb2YgeCYmeCBpbnN0YW5jZW9mIHgpJiYocD0hMSl9cmV0dXJuIHMuZGVsZXRlKHQpLHMuZGVsZXRlKGUpLHB9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMzQpLGk9bigzMCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1pKHQpLG49ZS5sZW5ndGg7bi0tOyl7dmFyIGE9ZVtuXSxvPXRbYV07ZVtuXT1bYSxvLHIobyldfXJldHVybiBlfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTMwKSxpPW4oMjY4KSxhPW4oMTM3KSxvPW4oOTMpLHM9bigxMzQpLGM9bigxMzUpLHU9big1MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8odCkmJnMoZSk/Yyh1KHQpLGUpOmZ1bmN0aW9uKG4pe3ZhciBvPWkobix0KTtyZXR1cm4gdm9pZCAwPT09byYmbz09PWU/YShuLHQpOnIoZSxvLDMpfX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDkyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPW51bGw9PXQ/dm9pZCAwOnIodCxlKTtyZXR1cm4gdm9pZCAwPT09aT9uOml9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNzApLGk9L1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2csYT0vXFwoXFwpPy9nLG89cigoZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIDQ2PT09dC5jaGFyQ29kZUF0KDApJiZlLnB1c2goIiIpLHQucmVwbGFjZShpLChmdW5jdGlvbih0LG4scixpKXtlLnB1c2gocj9pLnJlcGxhY2UoYSwiJDEiKTpufHx0KX0pKSxlfSkpO3QuZXhwb3J0cz1vfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNzEpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1yKHQsKGZ1bmN0aW9uKHQpe3JldHVybiA1MDA9PT1uLnNpemUmJm4uY2xlYXIoKSx0fSkpLG49ZS5jYWNoZTtyZXR1cm4gZX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDc5KTtmdW5jdGlvbiBpKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHR8fG51bGwhPWUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGEgZnVuY3Rpb24iKTt2YXIgbj1mdW5jdGlvbigpe3ZhciByPWFyZ3VtZW50cyxpPWU/ZS5hcHBseSh0aGlzLHIpOnJbMF0sYT1uLmNhY2hlO2lmKGEuaGFzKGkpKXJldHVybiBhLmdldChpKTt2YXIgbz10LmFwcGx5KHRoaXMscik7cmV0dXJuIG4uY2FjaGU9YS5zZXQoaSxvKXx8YSxvfTtyZXR1cm4gbi5jYWNoZT1uZXcoaS5DYWNoZXx8ciksbn1pLkNhY2hlPXIsdC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM5KSxpPW4oNjcpLGE9big1KSxvPW4oNDMpLHM9cj9yLnByb3RvdHlwZTp2b2lkIDAsYz1zP3MudG9TdHJpbmc6dm9pZCAwO3QuZXhwb3J0cz1mdW5jdGlvbiB0KGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gZTtpZihhKGUpKXJldHVybiBpKGUsdCkrIiI7aWYobyhlKSlyZXR1cm4gYz9jLmNhbGwoZSk6IiI7dmFyIG49ZSsiIjtyZXR1cm4iMCI9PW4mJjEvZT09LTEvMD8iLTAiOm59fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsIT10JiZlIGluIE9iamVjdCh0KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEzOSksaT1uKDI3NSksYT1uKDkzKSxvPW4oNTApO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYSh0KT9yKG8odCkpOmkodCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big5Mik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gcihlLHQpfX19LGZ1bmN0aW9uKHQsZSl7dmFyIG49T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbCE9dCYmbi5jYWxsKHQsZSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big4MyksaT1uKDQyKSxhPW4oNDgpLG89big1KSxzPW4oMjUpLGM9big0MCksdT1uKDYzKSxsPW4oNDkpLGg9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4hMDtpZihzKHQpJiYobyh0KXx8InN0cmluZyI9PXR5cGVvZiB0fHwiZnVuY3Rpb24iPT10eXBlb2YgdC5zcGxpY2V8fGModCl8fGwodCl8fGEodCkpKXJldHVybiF0Lmxlbmd0aDt2YXIgZT1pKHQpO2lmKCJbb2JqZWN0IE1hcF0iPT1lfHwiW29iamVjdCBTZXRdIj09ZSlyZXR1cm4hdC5zaXplO2lmKHUodCkpcmV0dXJuIXIodCkubGVuZ3RoO2Zvcih2YXIgbiBpbiB0KWlmKGguY2FsbCh0LG4pKXJldHVybiExO3JldHVybiEwfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9LTEsYT1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHImJmEmJihuPXRbKytpXSk7KytpPGE7KW49ZShuLHRbaV0saSx0KTtyZXR1cm4gbn19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLHIsaSl7cmV0dXJuIGkodCwoZnVuY3Rpb24odCxpLGEpe249cj8ocj0hMSx0KTplKG4sdCxpLGEpfSkpLG59fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big4MyksaT1uKDQyKSxhPW4oMjUpLG89bigyODEpLHM9bigyODIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiAwO2lmKGEodCkpcmV0dXJuIG8odCk/cyh0KTp0Lmxlbmd0aDt2YXIgZT1pKHQpO3JldHVybiJbb2JqZWN0IE1hcF0iPT1lfHwiW29iamVjdCBTZXRdIj09ZT90LnNpemU6cih0KS5sZW5ndGh9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzNCksaT1uKDUpLGE9bigyMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdHx8IWkodCkmJmEodCkmJiJbb2JqZWN0IFN0cmluZ10iPT1yKHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjgzKSxpPW4oMjg0KSxhPW4oMjg1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCk/YSh0KTpyKHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTM5KSgibGVuZ3RoIik7dC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSl7dmFyIG49UmVnRXhwKCJbXFx1MjAwZFxcdWQ4MDAtXFx1ZGZmZlxcdTAzMDAtXFx1MDM2ZlxcdWZlMjAtXFx1ZmUyZlxcdTIwZDAtXFx1MjBmZlxcdWZlMGVcXHVmZTBmXSIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbi50ZXN0KHQpfX0sZnVuY3Rpb24odCxlKXt2YXIgbj0iW1xcdWQ4MDAtXFx1ZGZmZl0iLHI9IltcXHUwMzAwLVxcdTAzNmZcXHVmZTIwLVxcdWZlMmZcXHUyMGQwLVxcdTIwZmZdIixpPSJcXHVkODNjW1xcdWRmZmItXFx1ZGZmZl0iLGE9IlteXFx1ZDgwMC1cXHVkZmZmXSIsbz0iKD86XFx1ZDgzY1tcXHVkZGU2LVxcdWRkZmZdKXsyfSIscz0iW1xcdWQ4MDAtXFx1ZGJmZl1bXFx1ZGMwMC1cXHVkZmZmXSIsYz0iKD86IityKyJ8IitpKyIpIisiPyIsdT0iW1xcdWZlMGVcXHVmZTBmXT8iK2MrKCIoPzpcXHUyMDBkKD86IitbYSxvLHNdLmpvaW4oInwiKSsiKVtcXHVmZTBlXFx1ZmUwZl0/IitjKyIpKiIpLGw9Iig/OiIrW2ErcisiPyIscixvLHMsbl0uam9pbigifCIpKyIpIixoPVJlZ0V4cChpKyIoPz0iK2krIil8IitsK3UsImciKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPWgubGFzdEluZGV4PTA7aC50ZXN0KHQpOykrK2U7cmV0dXJuIGV9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big4MCksaT1uKDEyNiksYT1uKDg5KSxvPW4oMjYpLHM9big2NCksYz1uKDUpLHU9big0MCksbD1uKDM4KSxoPW4oMTMpLGY9big0OSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgZD1jKHQpLHA9ZHx8dSh0KXx8Zih0KTtpZihlPW8oZSw0KSxudWxsPT1uKXt2YXIgeT10JiZ0LmNvbnN0cnVjdG9yO249cD9kP25ldyB5OltdOmgodCkmJmwoeSk/aShzKHQpKTp7fX1yZXR1cm4ocD9yOmEpKHQsKGZ1bmN0aW9uKHQscixpKXtyZXR1cm4gZShuLHQscixpKX0pKSxufX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTUpLGk9big2OCksYT1uKDI5Miksbz1uKDE0Nykscz1pKChmdW5jdGlvbih0KXtyZXR1cm4gYShyKHQsMSxvLCEwKSl9KSk7dC5leHBvcnRzPXN9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM5KSxpPW4oNDgpLGE9big1KSxvPXI/ci5pc0NvbmNhdFNwcmVhZGFibGU6dm9pZCAwO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYSh0KXx8aSh0KXx8ISEobyYmdCYmdFtvXSl9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7c3dpdGNoKG4ubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIHQuY2FsbChlKTtjYXNlIDE6cmV0dXJuIHQuY2FsbChlLG5bMF0pO2Nhc2UgMjpyZXR1cm4gdC5jYWxsKGUsblswXSxuWzFdKTtjYXNlIDM6cmV0dXJuIHQuY2FsbChlLG5bMF0sblsxXSxuWzJdKX1yZXR1cm4gdC5hcHBseShlLG4pfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODcpLGk9bigxMTIpLGE9bigzNSksbz1pP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGkodCwidG9TdHJpbmciLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTpyKGUpLHdyaXRhYmxlOiEwfSl9OmE7dC5leHBvcnRzPW99LGZ1bmN0aW9uKHQsZSl7dmFyIG49RGF0ZS5ub3c7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPTAscj0wO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPW4oKSxhPTE2LShpLXIpO2lmKHI9aSxhPjApe2lmKCsrZT49ODAwKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSBlPTA7cmV0dXJuIHQuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTMyKSxpPW4oMjkzKSxhPW4oMjk3KSxvPW4oMTMzKSxzPW4oMjk4KSxjPW4oOTEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIHU9LTEsbD1pLGg9dC5sZW5ndGgsZj0hMCxkPVtdLHA9ZDtpZihuKWY9ITEsbD1hO2Vsc2UgaWYoaD49MjAwKXt2YXIgeT1lP251bGw6cyh0KTtpZih5KXJldHVybiBjKHkpO2Y9ITEsbD1vLHA9bmV3IHJ9ZWxzZSBwPWU/W106ZDt0OmZvcig7Kyt1PGg7KXt2YXIgZz10W3VdLHY9ZT9lKGcpOmc7aWYoZz1ufHwwIT09Zz9nOjAsZiYmdj09dil7Zm9yKHZhciBtPXAubGVuZ3RoO20tLTspaWYocFttXT09PXYpY29udGludWUgdDtlJiZwLnB1c2godiksZC5wdXNoKGcpfWVsc2UgbChwLHYsbil8fChwIT09ZCYmcC5wdXNoKHYpLGQucHVzaChnKSl9cmV0dXJuIGR9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyOTQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiEhKG51bGw9PXQ/MDp0Lmxlbmd0aCkmJnIodCxlLDApPi0xfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQ2KSxpPW4oMjk1KSxhPW4oMjk2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBlPT1lP2EodCxlLG4pOnIodCxpLG4pfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQhPXR9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciByPW4tMSxpPXQubGVuZ3RoOysrcjxpOylpZih0W3JdPT09ZSlyZXR1cm4gcjtyZXR1cm4tMX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9LTEsaT1udWxsPT10PzA6dC5sZW5ndGg7KytyPGk7KWlmKG4oZSx0W3JdKSlyZXR1cm4hMDtyZXR1cm4hMX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEyMiksaT1uKDI5OSksYT1uKDkxKSxvPXImJjEvYShuZXcgcihbLC0wXSkpWzFdPT0xLzA/ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyByKHQpfTppO3QuZXhwb3J0cz1vfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbigpe319LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDY3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcihlLChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pKX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPSIyLjEuOCJ9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEyKSxpPW4oNzcpO2Z1bmN0aW9uIGEodCl7cmV0dXJuIHIubWFwKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49dC5ub2RlKGUpLGk9dC5wYXJlbnQoZSksYT17djplfTtyZXR1cm4gci5pc1VuZGVmaW5lZChuKXx8KGEudmFsdWU9biksci5pc1VuZGVmaW5lZChpKXx8KGEucGFyZW50PWkpLGF9KSl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gci5tYXAodC5lZGdlcygpLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSksaT17djplLnYsdzplLnd9O3JldHVybiByLmlzVW5kZWZpbmVkKGUubmFtZSl8fChpLm5hbWU9ZS5uYW1lKSxyLmlzVW5kZWZpbmVkKG4pfHwoaS52YWx1ZT1uKSxpfSkpfXQuZXhwb3J0cz17d3JpdGU6ZnVuY3Rpb24odCl7dmFyIGU9e29wdGlvbnM6e2RpcmVjdGVkOnQuaXNEaXJlY3RlZCgpLG11bHRpZ3JhcGg6dC5pc011bHRpZ3JhcGgoKSxjb21wb3VuZDp0LmlzQ29tcG91bmQoKX0sbm9kZXM6YSh0KSxlZGdlczpvKHQpfTtyLmlzVW5kZWZpbmVkKHQuZ3JhcGgoKSl8fChlLnZhbHVlPXIuY2xvbmUodC5ncmFwaCgpKSk7cmV0dXJuIGV9LHJlYWQ6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IGkodC5vcHRpb25zKS5zZXRHcmFwaCh0LnZhbHVlKTtyZXR1cm4gci5lYWNoKHQubm9kZXMsKGZ1bmN0aW9uKHQpe2Uuc2V0Tm9kZSh0LnYsdC52YWx1ZSksdC5wYXJlbnQmJmUuc2V0UGFyZW50KHQudix0LnBhcmVudCl9KSksci5lYWNoKHQuZWRnZXMsKGZ1bmN0aW9uKHQpe2Uuc2V0RWRnZSh7djp0LnYsdzp0LncsbmFtZTp0Lm5hbWV9LHQudmFsdWUpfSkpLGV9fX0sZnVuY3Rpb24odCxlLG4pe3QuZXhwb3J0cz17Y29tcG9uZW50czpuKDMwNCksZGlqa3N0cmE6bigxNDkpLGRpamtzdHJhQWxsOm4oMzA1KSxmaW5kQ3ljbGVzOm4oMzA2KSxmbG95ZFdhcnNoYWxsOm4oMzA3KSxpc0FjeWNsaWM6bigzMDgpLHBvc3RvcmRlcjpuKDMwOSkscHJlb3JkZXI6bigzMTApLHByaW06bigzMTEpLHRhcmphbjpuKDE1MSksdG9wc29ydDpuKDE1Mil9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG49e30saT1bXTtmdW5jdGlvbiBhKGkpe3IuaGFzKG4saSl8fChuW2ldPSEwLGUucHVzaChpKSxyLmVhY2godC5zdWNjZXNzb3JzKGkpLGEpLHIuZWFjaCh0LnByZWRlY2Vzc29ycyhpKSxhKSl9cmV0dXJuIHIuZWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKHQpe2U9W10sYSh0KSxlLmxlbmd0aCYmaS5wdXNoKGUpfSkpLGl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDkpLGk9bigxMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaS50cmFuc2Zvcm0odC5ub2RlcygpLChmdW5jdGlvbihpLGEpe2lbYV09cih0LGEsZSxuKX0pLHt9KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEyKSxpPW4oMTUxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIuZmlsdGVyKGkodCksKGZ1bmN0aW9uKGUpe3JldHVybiBlLmxlbmd0aD4xfHwxPT09ZS5sZW5ndGgmJnQuaGFzRWRnZShlWzBdLGVbMF0pfSkpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj17fSxpPXQubm9kZXMoKTtyZXR1cm4gaS5mb3JFYWNoKChmdW5jdGlvbih0KXtyW3RdPXt9LHJbdF1bdF09e2Rpc3RhbmNlOjB9LGkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dCE9PWUmJihyW3RdW2VdPXtkaXN0YW5jZTpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl9KX0pKSxuKHQpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBpPW4udj09PXQ/bi53Om4udixhPWUobik7clt0XVtpXT17ZGlzdGFuY2U6YSxwcmVkZWNlc3Nvcjp0fX0pKX0pKSxpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXJbdF07aS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgYT1yW25dO2kuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIHI9YVt0XSxpPWVbbl0sbz1hW25dLHM9ci5kaXN0YW5jZStpLmRpc3RhbmNlO3M8by5kaXN0YW5jZSYmKG8uZGlzdGFuY2U9cyxvLnByZWRlY2Vzc29yPWkucHJlZGVjZXNzb3IpfSkpfSkpfSkpLHJ9KHQsZXx8aSxufHxmdW5jdGlvbihlKXtyZXR1cm4gdC5vdXRFZGdlcyhlKX0pfTt2YXIgaT1yLmNvbnN0YW50KDEpfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNTIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt0cnl7cih0KX1jYXRjaCh0KXtpZih0IGluc3RhbmNlb2Ygci5DeWNsZUV4Y2VwdGlvbilyZXR1cm4hMTt0aHJvdyB0fXJldHVybiEwfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTUzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcih0LGUsInBvc3QiKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE1Myk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIodCxlLCJwcmUiKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEyKSxpPW4oNzcpLGE9bigxNTApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuLG89bmV3IGkscz17fSxjPW5ldyBhO2Z1bmN0aW9uIHUodCl7dmFyIHI9dC52PT09bj90Lnc6dC52LGk9Yy5wcmlvcml0eShyKTtpZih2b2lkIDAhPT1pKXt2YXIgYT1lKHQpO2E8aSYmKHNbcl09bixjLmRlY3JlYXNlKHIsYSkpfX1pZigwPT09dC5ub2RlQ291bnQoKSlyZXR1cm4gbztyLmVhY2godC5ub2RlcygpLChmdW5jdGlvbih0KXtjLmFkZCh0LE51bWJlci5QT1NJVElWRV9JTkZJTklUWSksby5zZXROb2RlKHQpfSkpLGMuZGVjcmVhc2UodC5ub2RlcygpWzBdLDApO3ZhciBsPSExO2Zvcig7Yy5zaXplKCk+MDspe2lmKG49Yy5yZW1vdmVNaW4oKSxyLmhhcyhzLG4pKW8uc2V0RWRnZShuLHNbbl0pO2Vsc2V7aWYobCl0aHJvdyBuZXcgRXJyb3IoIklucHV0IGdyYXBoIGlzIG5vdCBjb25uZWN0ZWQ6ICIrdCk7bD0hMH10Lm5vZGVFZGdlcyhuKS5mb3JFYWNoKHUpfXJldHVybiBvfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByO3RyeXtyPW4oMyl9Y2F0Y2godCl7fXJ8fChyPXdpbmRvdy5ncmFwaGxpYiksdC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0KSxpPW4oMzQ2KSxhPW4oMzQ5KSxvPW4oMzUwKSxzPW4oOCkubm9ybWFsaXplUmFua3MsYz1uKDM1MiksdT1uKDgpLnJlbW92ZUVtcHR5UmFua3MsbD1uKDM1MyksaD1uKDM1NCksZj1uKDM1NSksZD1uKDM1NikscD1uKDM2NSkseT1uKDgpLGc9bigyMCkuR3JhcGg7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZSYmZS5kZWJ1Z1RpbWluZz95LnRpbWU6eS5ub3RpbWU7bigibGF5b3V0IiwoZnVuY3Rpb24oKXt2YXIgZT1uKCIgIGJ1aWxkTGF5b3V0R3JhcGgiLChmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT1uZXcgZyh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLG49Qyh0LmdyYXBoKCkpO3JldHVybiBlLnNldEdyYXBoKHIubWVyZ2Uoe30sbSxUKG4sdiksci5waWNrKG4sYikpKSxyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihuKXt2YXIgaT1DKHQubm9kZShuKSk7ZS5zZXROb2RlKG4sci5kZWZhdWx0cyhUKGkseCksXykpLGUuc2V0UGFyZW50KG4sdC5wYXJlbnQobikpfSkpLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKG4pe3ZhciBpPUModC5lZGdlKG4pKTtlLnNldEVkZ2UobixyLm1lcmdlKHt9LHcsVChpLGspLHIucGljayhpLEUpKSl9KSksZX0odCl9KSk7bigiICBydW5MYXlvdXQiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0LGUpe2UoIiAgICBtYWtlU3BhY2VGb3JFZGdlTGFiZWxzIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7dmFyIGU9dC5ncmFwaCgpO2UucmFua3NlcC89MixyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihuKXt2YXIgcj10LmVkZ2Uobik7ci5taW5sZW4qPTIsImMiIT09ci5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpJiYoIlRCIj09PWUucmFua2Rpcnx8IkJUIj09PWUucmFua2Rpcj9yLndpZHRoKz1yLmxhYmVsb2Zmc2V0OnIuaGVpZ2h0Kz1yLmxhYmVsb2Zmc2V0KX0pKX0odCl9KSksZSgiICAgIHJlbW92ZVNlbGZFZGdlcyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe2lmKGUudj09PWUudyl7dmFyIG49dC5ub2RlKGUudik7bi5zZWxmRWRnZXN8fChuLnNlbGZFZGdlcz1bXSksbi5zZWxmRWRnZXMucHVzaCh7ZTplLGxhYmVsOnQuZWRnZShlKX0pLHQucmVtb3ZlRWRnZShlKX19KSl9KHQpfSkpLGUoIiAgICBhY3ljbGljIiwoZnVuY3Rpb24oKXtpLnJ1bih0KX0pKSxlKCIgICAgbmVzdGluZ0dyYXBoLnJ1biIsKGZ1bmN0aW9uKCl7bC5ydW4odCl9KSksZSgiICAgIHJhbmsiLChmdW5jdGlvbigpe28oeS5hc05vbkNvbXBvdW5kR3JhcGgodCkpfSkpLGUoIiAgICBpbmplY3RFZGdlTGFiZWxQcm94aWVzIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49dC5lZGdlKGUpO2lmKG4ud2lkdGgmJm4uaGVpZ2h0KXt2YXIgcj10Lm5vZGUoZS52KSxpPXtyYW5rOih0Lm5vZGUoZS53KS5yYW5rLXIucmFuaykvMityLnJhbmssZTplfTt5LmFkZER1bW15Tm9kZSh0LCJlZGdlLXByb3h5IixpLCJfZXAiKX19KSl9KHQpfSkpLGUoIiAgICByZW1vdmVFbXB0eVJhbmtzIiwoZnVuY3Rpb24oKXt1KHQpfSkpLGUoIiAgICBuZXN0aW5nR3JhcGguY2xlYW51cCIsKGZ1bmN0aW9uKCl7bC5jbGVhbnVwKHQpfSkpLGUoIiAgICBub3JtYWxpemVSYW5rcyIsKGZ1bmN0aW9uKCl7cyh0KX0pKSxlKCIgICAgYXNzaWduUmFua01pbk1heCIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3ZhciBlPTA7ci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7dmFyIGk9dC5ub2RlKG4pO2kuYm9yZGVyVG9wJiYoaS5taW5SYW5rPXQubm9kZShpLmJvcmRlclRvcCkucmFuayxpLm1heFJhbms9dC5ub2RlKGkuYm9yZGVyQm90dG9tKS5yYW5rLGU9ci5tYXgoZSxpLm1heFJhbmspKX0pKSx0LmdyYXBoKCkubWF4UmFuaz1lfSh0KX0pKSxlKCIgICAgcmVtb3ZlRWRnZUxhYmVsUHJveGllcyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQubm9kZShlKTsiZWRnZS1wcm94eSI9PT1uLmR1bW15JiYodC5lZGdlKG4uZSkubGFiZWxSYW5rPW4ucmFuayx0LnJlbW92ZU5vZGUoZSkpfSkpfSh0KX0pKSxlKCIgICAgbm9ybWFsaXplLnJ1biIsKGZ1bmN0aW9uKCl7YS5ydW4odCl9KSksZSgiICAgIHBhcmVudER1bW15Q2hhaW5zIiwoZnVuY3Rpb24oKXtjKHQpfSkpLGUoIiAgICBhZGRCb3JkZXJTZWdtZW50cyIsKGZ1bmN0aW9uKCl7aCh0KX0pKSxlKCIgICAgb3JkZXIiLChmdW5jdGlvbigpe2QodCl9KSksZSgiICAgIGluc2VydFNlbGZFZGdlcyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3ZhciBlPXkuYnVpbGRMYXllck1hdHJpeCh0KTtyLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7dmFyIG49MDtyLmZvckVhY2goZSwoZnVuY3Rpb24oZSxpKXt2YXIgYT10Lm5vZGUoZSk7YS5vcmRlcj1pK24sci5mb3JFYWNoKGEuc2VsZkVkZ2VzLChmdW5jdGlvbihlKXt5LmFkZER1bW15Tm9kZSh0LCJzZWxmZWRnZSIse3dpZHRoOmUubGFiZWwud2lkdGgsaGVpZ2h0OmUubGFiZWwuaGVpZ2h0LHJhbms6YS5yYW5rLG9yZGVyOmkrICsrbixlOmUuZSxsYWJlbDplLmxhYmVsfSwiX3NlIil9KSksZGVsZXRlIGEuc2VsZkVkZ2VzfSkpfSkpfSh0KX0pKSxlKCIgICAgYWRqdXN0Q29vcmRpbmF0ZVN5c3RlbSIsKGZ1bmN0aW9uKCl7Zi5hZGp1c3QodCl9KSksZSgiICAgIHBvc2l0aW9uIiwoZnVuY3Rpb24oKXtwKHQpfSkpLGUoIiAgICBwb3NpdGlvblNlbGZFZGdlcyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQubm9kZShlKTtpZigic2VsZmVkZ2UiPT09bi5kdW1teSl7dmFyIHI9dC5ub2RlKG4uZS52KSxpPXIueCtyLndpZHRoLzIsYT1yLnksbz1uLngtaSxzPXIuaGVpZ2h0LzI7dC5zZXRFZGdlKG4uZSxuLmxhYmVsKSx0LnJlbW92ZU5vZGUoZSksbi5sYWJlbC5wb2ludHM9W3t4OmkrMipvLzMseTphLXN9LHt4OmkrNSpvLzYseTphLXN9LHt4Omkrbyx5OmF9LHt4OmkrNSpvLzYseTphK3N9LHt4OmkrMipvLzMseTphK3N9XSxuLmxhYmVsLng9bi54LG4ubGFiZWwueT1uLnl9fSkpfSh0KX0pKSxlKCIgICAgcmVtb3ZlQm9yZGVyTm9kZXMiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0KXtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihlKXtpZih0LmNoaWxkcmVuKGUpLmxlbmd0aCl7dmFyIG49dC5ub2RlKGUpLGk9dC5ub2RlKG4uYm9yZGVyVG9wKSxhPXQubm9kZShuLmJvcmRlckJvdHRvbSksbz10Lm5vZGUoci5sYXN0KG4uYm9yZGVyTGVmdCkpLHM9dC5ub2RlKHIubGFzdChuLmJvcmRlclJpZ2h0KSk7bi53aWR0aD1NYXRoLmFicyhzLngtby54KSxuLmhlaWdodD1NYXRoLmFicyhhLnktaS55KSxuLng9by54K24ud2lkdGgvMixuLnk9aS55K24uaGVpZ2h0LzJ9fSkpLHIuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpeyJib3JkZXIiPT09dC5ub2RlKGUpLmR1bW15JiZ0LnJlbW92ZU5vZGUoZSl9KSl9KHQpfSkpLGUoIiAgICBub3JtYWxpemUudW5kbyIsKGZ1bmN0aW9uKCl7YS51bmRvKHQpfSkpLGUoIiAgICBmaXh1cEVkZ2VMYWJlbENvb3JkcyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKTtpZihyLmhhcyhuLCJ4Iikpc3dpdGNoKCJsIiE9PW4ubGFiZWxwb3MmJiJyIiE9PW4ubGFiZWxwb3N8fChuLndpZHRoLT1uLmxhYmVsb2Zmc2V0KSxuLmxhYmVscG9zKXtjYXNlImwiOm4ueC09bi53aWR0aC8yK24ubGFiZWxvZmZzZXQ7YnJlYWs7Y2FzZSJyIjpuLngrPW4ud2lkdGgvMituLmxhYmVsb2Zmc2V0fX0pKX0odCl9KSksZSgiICAgIHVuZG9Db29yZGluYXRlU3lzdGVtIiwoZnVuY3Rpb24oKXtmLnVuZG8odCl9KSksZSgiICAgIHRyYW5zbGF0ZUdyYXBoIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7dmFyIGU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG49MCxpPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxhPTAsbz10LmdyYXBoKCkscz1vLm1hcmdpbnh8fDAsYz1vLm1hcmdpbnl8fDA7ZnVuY3Rpb24gdSh0KXt2YXIgcj10Lngsbz10Lnkscz10LndpZHRoLGM9dC5oZWlnaHQ7ZT1NYXRoLm1pbihlLHItcy8yKSxuPU1hdGgubWF4KG4scitzLzIpLGk9TWF0aC5taW4oaSxvLWMvMiksYT1NYXRoLm1heChhLG8rYy8yKX1yLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihlKXt1KHQubm9kZShlKSl9KSksci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49dC5lZGdlKGUpO3IuaGFzKG4sIngiKSYmdShuKX0pKSxlLT1zLGktPWMsci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7dmFyIHI9dC5ub2RlKG4pO3IueC09ZSxyLnktPWl9KSksci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24obil7dmFyIGE9dC5lZGdlKG4pO3IuZm9yRWFjaChhLnBvaW50cywoZnVuY3Rpb24odCl7dC54LT1lLHQueS09aX0pKSxyLmhhcyhhLCJ4IikmJihhLngtPWUpLHIuaGFzKGEsInkiKSYmKGEueS09aSl9KSksby53aWR0aD1uLWUrcyxvLmhlaWdodD1hLWkrY30odCl9KSksZSgiICAgIGFzc2lnbk5vZGVJbnRlcnNlY3RzIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG4scixpPXQuZWRnZShlKSxhPXQubm9kZShlLnYpLG89dC5ub2RlKGUudyk7aS5wb2ludHM/KG49aS5wb2ludHNbMF0scj1pLnBvaW50c1tpLnBvaW50cy5sZW5ndGgtMV0pOihpLnBvaW50cz1bXSxuPW8scj1hKSxpLnBvaW50cy51bnNoaWZ0KHkuaW50ZXJzZWN0UmVjdChhLG4pKSxpLnBvaW50cy5wdXNoKHkuaW50ZXJzZWN0UmVjdChvLHIpKX0pKX0odCl9KSksZSgiICAgIHJldmVyc2VQb2ludHMiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0KXtyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7bi5yZXZlcnNlZCYmbi5wb2ludHMucmV2ZXJzZSgpfSkpfSh0KX0pKSxlKCIgICAgYWN5Y2xpYy51bmRvIiwoZnVuY3Rpb24oKXtpLnVuZG8odCl9KSl9KGUsbil9KSksbigiICB1cGRhdGVJbnB1dEdyYXBoIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCxlKXtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihuKXt2YXIgcj10Lm5vZGUobiksaT1lLm5vZGUobik7ciYmKHIueD1pLngsci55PWkueSxlLmNoaWxkcmVuKG4pLmxlbmd0aCYmKHIud2lkdGg9aS53aWR0aCxyLmhlaWdodD1pLmhlaWdodCkpfSkpLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKG4pe3ZhciBpPXQuZWRnZShuKSxhPWUuZWRnZShuKTtpLnBvaW50cz1hLnBvaW50cyxyLmhhcyhhLCJ4IikmJihpLng9YS54LGkueT1hLnkpfSkpLHQuZ3JhcGgoKS53aWR0aD1lLmdyYXBoKCkud2lkdGgsdC5ncmFwaCgpLmhlaWdodD1lLmdyYXBoKCkuaGVpZ2h0fSh0LGUpfSkpfSkpfTt2YXIgdj1bIm5vZGVzZXAiLCJlZGdlc2VwIiwicmFua3NlcCIsIm1hcmdpbngiLCJtYXJnaW55Il0sbT17cmFua3NlcDo1MCxlZGdlc2VwOjIwLG5vZGVzZXA6NTAscmFua2RpcjoidGIifSxiPVsiYWN5Y2xpY2VyIiwicmFua2VyIiwicmFua2RpciIsImFsaWduIl0seD1bIndpZHRoIiwiaGVpZ2h0Il0sXz17d2lkdGg6MCxoZWlnaHQ6MH0saz1bIm1pbmxlbiIsIndlaWdodCIsIndpZHRoIiwiaGVpZ2h0IiwibGFiZWxvZmZzZXQiXSx3PXttaW5sZW46MSx3ZWlnaHQ6MSx3aWR0aDowLGhlaWdodDowLGxhYmVsb2Zmc2V0OjEwLGxhYmVscG9zOiJyIn0sRT1bImxhYmVscG9zIl07ZnVuY3Rpb24gVCh0LGUpe3JldHVybiByLm1hcFZhbHVlcyhyLnBpY2sodCxlKSxOdW1iZXIpfWZ1bmN0aW9uIEModCl7dmFyIGU9e307cmV0dXJuIHIuZm9yRWFjaCh0LChmdW5jdGlvbih0LG4pe2Vbbi50b0xvd2VyQ2FzZSgpXT10fSkpLGV9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMDkpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcih0LDUpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzE2KShuKDMxNykpO3QuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNiksaT1uKDI1KSxhPW4oMzApO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLG8pe3ZhciBzPU9iamVjdChlKTtpZighaShlKSl7dmFyIGM9cihuLDMpO2U9YShlKSxuPWZ1bmN0aW9uKHQpe3JldHVybiBjKHNbdF0sdCxzKX19dmFyIHU9dChlLG4sbyk7cmV0dXJuIHU+LTE/c1tjP2VbdV06dV06dm9pZCAwfX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0NiksaT1uKDI2KSxhPW4oMzE4KSxvPU1hdGgubWF4O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIHM9bnVsbD09dD8wOnQubGVuZ3RoO2lmKCFzKXJldHVybi0xO3ZhciBjPW51bGw9PW4/MDphKG4pO3JldHVybiBjPDAmJihjPW8ocytjLDApKSxyKHQsaShlLDMpLGMpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTU2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9cih0KSxuPWUlMTtyZXR1cm4gZT09ZT9uP2UtbjplOjB9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMyksaT1uKDQzKSxhPS9eXHMrfFxzKyQvZyxvPS9eWy0rXTB4WzAtOWEtZl0rJC9pLHM9L14wYlswMV0rJC9pLGM9L14wb1swLTddKyQvaSx1PXBhcnNlSW50O3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIHQ7aWYoaSh0KSlyZXR1cm4gTmFOO2lmKHIodCkpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0LnZhbHVlT2Y/dC52YWx1ZU9mKCk6dDt0PXIoZSk/ZSsiIjplfWlmKCJzdHJpbmciIT10eXBlb2YgdClyZXR1cm4gMD09PXQ/dDordDt0PXQucmVwbGFjZShhLCIiKTt2YXIgbj1zLnRlc3QodCk7cmV0dXJuIG58fGMudGVzdCh0KT91KHQuc2xpY2UoMiksbj8yOjgpOm8udGVzdCh0KT9OYU46K3R9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big5MCksaT1uKDEyOCksYT1uKDQxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD90OnIodCxpKGUpLGEpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bnVsbD09dD8wOnQubGVuZ3RoO3JldHVybiBlP3RbZS0xXTp2b2lkIDB9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big2MCksaT1uKDg5KSxhPW4oMjYpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXt9O3JldHVybiBlPWEoZSwzKSxpKHQsKGZ1bmN0aW9uKHQsaSxhKXtyKG4saSxlKHQsaSxhKSl9KSksbn19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDk2KSxpPW4oMzI0KSxhPW4oMzUpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5sZW5ndGg/cih0LGEsaSk6dm9pZCAwfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD5lfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzI2KSxpPW4oMzI5KSgoZnVuY3Rpb24odCxlLG4pe3IodCxlLG4pfSkpO3QuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1NCksaT1uKDE1OCksYT1uKDkwKSxvPW4oMzI3KSxzPW4oMTMpLGM9big0MSksdT1uKDE2MCk7dC5leHBvcnRzPWZ1bmN0aW9uIHQoZSxuLGwsaCxmKXtlIT09biYmYShuLChmdW5jdGlvbihhLGMpe2lmKGZ8fChmPW5ldyByKSxzKGEpKW8oZSxuLGMsbCx0LGgsZik7ZWxzZXt2YXIgZD1oP2godShlLGMpLGEsYysiIixlLG4sZik6dm9pZCAwO3ZvaWQgMD09PWQmJihkPWEpLGkoZSxjLGQpfX0pLGMpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTU4KSxpPW4oMTE1KSxhPW4oMTI0KSxvPW4oMTE2KSxzPW4oMTI1KSxjPW4oNDgpLHU9big1KSxsPW4oMTQ3KSxoPW4oNDApLGY9bigzOCksZD1uKDEzKSxwPW4oMTU5KSx5PW4oNDkpLGc9bigxNjApLHY9bigzMjgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixtLGIseCxfKXt2YXIgaz1nKHQsbiksdz1nKGUsbiksRT1fLmdldCh3KTtpZihFKXIodCxuLEUpO2Vsc2V7dmFyIFQ9eD94KGssdyxuKyIiLHQsZSxfKTp2b2lkIDAsQz12b2lkIDA9PT1UO2lmKEMpe3ZhciBTPXUodyksQT0hUyYmaCh3KSxNPSFTJiYhQSYmeSh3KTtUPXcsU3x8QXx8TT91KGspP1Q9azpsKGspP1Q9byhrKTpBPyhDPSExLFQ9aSh3LCEwKSk6TT8oQz0hMSxUPWEodywhMCkpOlQ9W106cCh3KXx8Yyh3KT8oVD1rLGMoayk/VD12KGspOmQoaykmJiFmKGspfHwoVD1zKHcpKSk6Qz0hMX1DJiYoXy5zZXQodyxUKSxiKFQsdyxtLHgsXyksXy5kZWxldGUodykpLHIodCxuLFQpfX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQ3KSxpPW4oNDEpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcih0LGkodCkpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjgpLGk9big2OSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKChmdW5jdGlvbihlLG4pe3ZhciByPS0xLGE9bi5sZW5ndGgsbz1hPjE/blthLTFdOnZvaWQgMCxzPWE+Mj9uWzJdOnZvaWQgMDtmb3Iobz10Lmxlbmd0aD4zJiYiZnVuY3Rpb24iPT10eXBlb2Ygbz8oYS0tLG8pOnZvaWQgMCxzJiZpKG5bMF0sblsxXSxzKSYmKG89YTwzP3ZvaWQgMDpvLGE9MSksZT1PYmplY3QoZSk7KytyPGE7KXt2YXIgYz1uW3JdO2MmJnQoZSxjLHIsbyl9cmV0dXJuIGV9KSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big5NiksaT1uKDE2MSksYT1uKDM1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQubGVuZ3RoP3IodCxhLGkpOnZvaWQgMH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDk2KSxpPW4oMjYpLGE9bigxNjEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0JiZ0Lmxlbmd0aD9yKHQsaShlLDIpLGEpOnZvaWQgMH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE5KTt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gci5EYXRlLm5vdygpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzM0KSxpPW4oMTM3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcih0LGUsKGZ1bmN0aW9uKGUsbil7cmV0dXJuIGkodCxuKX0pKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDkyKSxpPW4oMzM1KSxhPW4oNjYpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciBvPS0xLHM9ZS5sZW5ndGgsYz17fTsrK288czspe3ZhciB1PWVbb10sbD1yKHQsdSk7bihsLHUpJiZpKGMsYSh1LHQpLGwpfXJldHVybiBjfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTkpLGk9big2NiksYT1uKDYxKSxvPW4oMTMpLHM9big1MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLGMpe2lmKCFvKHQpKXJldHVybiB0O2Zvcih2YXIgdT0tMSxsPShlPWkoZSx0KSkubGVuZ3RoLGg9bC0xLGY9dDtudWxsIT1mJiYrK3U8bDspe3ZhciBkPXMoZVt1XSkscD1uO2lmKHUhPWgpe3ZhciB5PWZbZF07dm9pZCAwPT09KHA9Yz9jKHksZCxmKTp2b2lkIDApJiYocD1vKHkpP3k6YShlW3UrMV0pP1tdOnt9KX1yKGYsZCxwKSxmPWZbZF19cmV0dXJuIHR9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNTcpLGk9bigxNDQpLGE9bigxNDUpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYShpKHQsdm9pZCAwLHIpLHQrIiIpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzM4KSxpPW4oNjkpLGE9bigxNTYpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLG8pe3JldHVybiBvJiYibnVtYmVyIiE9dHlwZW9mIG8mJmkoZSxuLG8pJiYobj1vPXZvaWQgMCksZT1hKGUpLHZvaWQgMD09PW4/KG49ZSxlPTApOm49YShuKSxvPXZvaWQgMD09PW8/ZTxuPzE6LTE6YShvKSxyKGUsbixvLHQpfX19LGZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5jZWlsLHI9TWF0aC5tYXg7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxpLGEpe2Zvcih2YXIgbz0tMSxzPXIobigoZS10KS8oaXx8MSkpLDApLGM9QXJyYXkocyk7cy0tOyljW2E/czorK29dPXQsdCs9aTtyZXR1cm4gY319LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDk1KSxpPW4oMzQwKSxhPW4oNjgpLG89big2OSkscz1hKChmdW5jdGlvbih0LGUpe2lmKG51bGw9PXQpcmV0dXJuW107dmFyIG49ZS5sZW5ndGg7cmV0dXJuIG4+MSYmbyh0LGVbMF0sZVsxXSk/ZT1bXTpuPjImJm8oZVswXSxlWzFdLGVbMl0pJiYoZT1bZVswXV0pLGkodCxyKGUsMSksW10pfSkpO3QuZXhwb3J0cz1zfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big2NyksaT1uKDI2KSxhPW4oMTQyKSxvPW4oMzQxKSxzPW4oNjIpLGM9bigzNDIpLHU9bigzNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgbD0tMTtlPXIoZS5sZW5ndGg/ZTpbdV0scyhpKSk7dmFyIGg9YSh0LChmdW5jdGlvbih0LG4saSl7cmV0dXJue2NyaXRlcmlhOnIoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIGUodCl9KSksaW5kZXg6KytsLHZhbHVlOnR9fSkpO3JldHVybiBvKGgsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGModCxlLG4pfSkpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj10Lmxlbmd0aDtmb3IodC5zb3J0KGUpO24tLTspdFtuXT10W25dLnZhbHVlO3JldHVybiB0fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzQzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgaT0tMSxhPXQuY3JpdGVyaWEsbz1lLmNyaXRlcmlhLHM9YS5sZW5ndGgsYz1uLmxlbmd0aDsrK2k8czspe3ZhciB1PXIoYVtpXSxvW2ldKTtpZih1KXJldHVybiBpPj1jP3U6dSooImRlc2MiPT1uW2ldPy0xOjEpfXJldHVybiB0LmluZGV4LWUuaW5kZXh9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0Myk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYodCE9PWUpe3ZhciBuPXZvaWQgMCE9PXQsaT1udWxsPT09dCxhPXQ9PXQsbz1yKHQpLHM9dm9pZCAwIT09ZSxjPW51bGw9PT1lLHU9ZT09ZSxsPXIoZSk7aWYoIWMmJiFsJiYhbyYmdD5lfHxvJiZzJiZ1JiYhYyYmIWx8fGkmJnMmJnV8fCFuJiZ1fHwhYSlyZXR1cm4gMTtpZighaSYmIW8mJiFsJiZ0PGV8fGwmJm4mJmEmJiFpJiYhb3x8YyYmbiYmYXx8IXMmJmF8fCF1KXJldHVybi0xfXJldHVybiAwfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTkpLGk9bigzNDUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBpKHR8fFtdLGV8fFtdLHIpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj0tMSxpPXQubGVuZ3RoLGE9ZS5sZW5ndGgsbz17fTsrK3I8aTspe3ZhciBzPXI8YT9lW3JdOnZvaWQgMDtuKG8sdFtyXSxzKX1yZXR1cm4gb319LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0KSxpPW4oMzQ3KTt0LmV4cG9ydHM9e3J1bjpmdW5jdGlvbih0KXt2YXIgZT0iZ3JlZWR5Ij09PXQuZ3JhcGgoKS5hY3ljbGljZXI/aSh0LGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5lZGdlKGUpLndlaWdodH19KHQpKTpmdW5jdGlvbih0KXt2YXIgZT1bXSxuPXt9LGk9e307ZnVuY3Rpb24gYShvKXtyLmhhcyhpLG8pfHwoaVtvXT0hMCxuW29dPSEwLHIuZm9yRWFjaCh0Lm91dEVkZ2VzKG8pLChmdW5jdGlvbih0KXtyLmhhcyhuLHQudyk/ZS5wdXNoKHQpOmEodC53KX0pKSxkZWxldGUgbltvXSl9cmV0dXJuIHIuZm9yRWFjaCh0Lm5vZGVzKCksYSksZX0odCk7ci5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKTt0LnJlbW92ZUVkZ2UoZSksbi5mb3J3YXJkTmFtZT1lLm5hbWUsbi5yZXZlcnNlZD0hMCx0LnNldEVkZ2UoZS53LGUudixuLHIudW5pcXVlSWQoInJldiIpKX0pKX0sdW5kbzpmdW5jdGlvbih0KXtyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7aWYobi5yZXZlcnNlZCl7dC5yZW1vdmVFZGdlKGUpO3ZhciByPW4uZm9yd2FyZE5hbWU7ZGVsZXRlIG4ucmV2ZXJzZWQsZGVsZXRlIG4uZm9yd2FyZE5hbWUsdC5zZXRFZGdlKGUudyxlLnYsbixyKX19KSl9fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNCksaT1uKDIwKS5HcmFwaCxhPW4oMzQ4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZih0Lm5vZGVDb3VudCgpPD0xKXJldHVybltdO3ZhciBuPWZ1bmN0aW9uKHQsZSl7dmFyIG49bmV3IGksbz0wLHM9MDtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbih0KXtuLnNldE5vZGUodCx7djp0LGluOjAsb3V0OjB9KX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbih0KXt2YXIgcj1uLmVkZ2UodC52LHQudyl8fDAsaT1lKHQpLGE9citpO24uc2V0RWRnZSh0LnYsdC53LGEpLHM9TWF0aC5tYXgocyxuLm5vZGUodC52KS5vdXQrPWkpLG89TWF0aC5tYXgobyxuLm5vZGUodC53KS5pbis9aSl9KSk7dmFyIHU9ci5yYW5nZShzK28rMykubWFwKChmdW5jdGlvbigpe3JldHVybiBuZXcgYX0pKSxsPW8rMTtyZXR1cm4gci5mb3JFYWNoKG4ubm9kZXMoKSwoZnVuY3Rpb24odCl7Yyh1LGwsbi5ub2RlKHQpKX0pKSx7Z3JhcGg6bixidWNrZXRzOnUsemVyb0lkeDpsfX0odCxlfHxvKSx1PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpPVtdLGE9ZVtlLmxlbmd0aC0xXSxvPWVbMF07Zm9yKDt0Lm5vZGVDb3VudCgpOyl7Zm9yKDtyPW8uZGVxdWV1ZSgpOylzKHQsZSxuLHIpO2Zvcig7cj1hLmRlcXVldWUoKTspcyh0LGUsbixyKTtpZih0Lm5vZGVDb3VudCgpKWZvcih2YXIgYz1lLmxlbmd0aC0yO2M+MDstLWMpaWYocj1lW2NdLmRlcXVldWUoKSl7aT1pLmNvbmNhdChzKHQsZSxuLHIsITApKTticmVha319cmV0dXJuIGl9KG4uZ3JhcGgsbi5idWNrZXRzLG4uemVyb0lkeCk7cmV0dXJuIHIuZmxhdHRlbihyLm1hcCh1LChmdW5jdGlvbihlKXtyZXR1cm4gdC5vdXRFZGdlcyhlLnYsZS53KX0pKSwhMCl9O3ZhciBvPXIuY29uc3RhbnQoMSk7ZnVuY3Rpb24gcyh0LGUsbixpLGEpe3ZhciBvPWE/W106dm9pZCAwO3JldHVybiByLmZvckVhY2godC5pbkVkZ2VzKGkudiksKGZ1bmN0aW9uKHIpe3ZhciBpPXQuZWRnZShyKSxzPXQubm9kZShyLnYpO2EmJm8ucHVzaCh7djpyLnYsdzpyLnd9KSxzLm91dC09aSxjKGUsbixzKX0pKSxyLmZvckVhY2godC5vdXRFZGdlcyhpLnYpLChmdW5jdGlvbihyKXt2YXIgaT10LmVkZ2UociksYT1yLncsbz10Lm5vZGUoYSk7by5pbi09aSxjKGUsbixvKX0pKSx0LnJlbW92ZU5vZGUoaS52KSxvfWZ1bmN0aW9uIGModCxlLG4pe24ub3V0P24uaW4/dFtuLm91dC1uLmluK2VdLmVucXVldWUobik6dFt0Lmxlbmd0aC0xXS5lbnF1ZXVlKG4pOnRbMF0uZW5xdWV1ZShuKX19LGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbigpe3ZhciB0PXt9O3QuX25leHQ9dC5fcHJldj10LHRoaXMuX3NlbnRpbmVsPXR9ZnVuY3Rpb24gcih0KXt0Ll9wcmV2Ll9uZXh0PXQuX25leHQsdC5fbmV4dC5fcHJldj10Ll9wcmV2LGRlbGV0ZSB0Ll9uZXh0LGRlbGV0ZSB0Ll9wcmV2fWZ1bmN0aW9uIGkodCxlKXtpZigiX25leHQiIT09dCYmIl9wcmV2IiE9PXQpcmV0dXJuIGV9dC5leHBvcnRzPW4sbi5wcm90b3R5cGUuZGVxdWV1ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3NlbnRpbmVsLGU9dC5fcHJldjtpZihlIT09dClyZXR1cm4gcihlKSxlfSxuLnByb3RvdHlwZS5lbnF1ZXVlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3NlbnRpbmVsO3QuX3ByZXYmJnQuX25leHQmJnIodCksdC5fbmV4dD1lLl9uZXh0LGUuX25leHQuX3ByZXY9dCxlLl9uZXh0PXQsdC5fcHJldj1lfSxuLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPXRoaXMuX3NlbnRpbmVsLG49ZS5fcHJldjtuIT09ZTspdC5wdXNoKEpTT04uc3RyaW5naWZ5KG4saSkpLG49bi5fcHJldjtyZXR1cm4iWyIrdC5qb2luKCIsICIpKyJdIn19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0KSxpPW4oOCk7dC5leHBvcnRzPXtydW46ZnVuY3Rpb24odCl7dC5ncmFwaCgpLmR1bW15Q2hhaW5zPVtdLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpeyFmdW5jdGlvbih0LGUpe3ZhciBuLHIsYSxvPWUudixzPXQubm9kZShvKS5yYW5rLGM9ZS53LHU9dC5ub2RlKGMpLnJhbmssbD1lLm5hbWUsaD10LmVkZ2UoZSksZj1oLmxhYmVsUmFuaztpZih1PT09cysxKXJldHVybjtmb3IodC5yZW1vdmVFZGdlKGUpLGE9MCwrK3M7czx1OysrYSwrK3MpaC5wb2ludHM9W10scj17d2lkdGg6MCxoZWlnaHQ6MCxlZGdlTGFiZWw6aCxlZGdlT2JqOmUscmFuazpzfSxuPWkuYWRkRHVtbXlOb2RlKHQsImVkZ2UiLHIsIl9kIikscz09PWYmJihyLndpZHRoPWgud2lkdGgsci5oZWlnaHQ9aC5oZWlnaHQsci5kdW1teT0iZWRnZS1sYWJlbCIsci5sYWJlbHBvcz1oLmxhYmVscG9zKSx0LnNldEVkZ2UobyxuLHt3ZWlnaHQ6aC53ZWlnaHR9LGwpLDA9PT1hJiZ0LmdyYXBoKCkuZHVtbXlDaGFpbnMucHVzaChuKSxvPW47dC5zZXRFZGdlKG8sYyx7d2VpZ2h0Omgud2VpZ2h0fSxsKX0odCxlKX0pKX0sdW5kbzpmdW5jdGlvbih0KXtyLmZvckVhY2godC5ncmFwaCgpLmR1bW15Q2hhaW5zLChmdW5jdGlvbihlKXt2YXIgbixyPXQubm9kZShlKSxpPXIuZWRnZUxhYmVsO2Zvcih0LnNldEVkZ2Uoci5lZGdlT2JqLGkpO3IuZHVtbXk7KW49dC5zdWNjZXNzb3JzKGUpWzBdLHQucmVtb3ZlTm9kZShlKSxpLnBvaW50cy5wdXNoKHt4OnIueCx5OnIueX0pLCJlZGdlLWxhYmVsIj09PXIuZHVtbXkmJihpLng9ci54LGkueT1yLnksaS53aWR0aD1yLndpZHRoLGkuaGVpZ2h0PXIuaGVpZ2h0KSxlPW4scj10Lm5vZGUoZSl9KSl9fX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDcwKS5sb25nZXN0UGF0aCxpPW4oMTY1KSxhPW4oMzUxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7c3dpdGNoKHQuZ3JhcGgoKS5yYW5rZXIpe2Nhc2UibmV0d29yay1zaW1wbGV4IjpzKHQpO2JyZWFrO2Nhc2UidGlnaHQtdHJlZSI6IWZ1bmN0aW9uKHQpe3IodCksaSh0KX0odCk7YnJlYWs7Y2FzZSJsb25nZXN0LXBhdGgiOm8odCk7YnJlYWs7ZGVmYXVsdDpzKHQpfX07dmFyIG89cjtmdW5jdGlvbiBzKHQpe2EodCl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNCksaT1uKDE2NSksYT1uKDcwKS5zbGFjayxvPW4oNzApLmxvbmdlc3RQYXRoLHM9bigyMCkuYWxnLnByZW9yZGVyLGM9bigyMCkuYWxnLnBvc3RvcmRlcix1PW4oOCkuc2ltcGxpZnk7ZnVuY3Rpb24gbCh0KXt0PXUodCksbyh0KTt2YXIgZSxuPWkodCk7Zm9yKGQobiksaChuLHQpO2U9eShuKTspdihuLHQsZSxnKG4sdCxlKSl9ZnVuY3Rpb24gaCh0LGUpe3ZhciBuPWModCx0Lm5vZGVzKCkpO249bi5zbGljZSgwLG4ubGVuZ3RoLTEpLHIuZm9yRWFjaChuLChmdW5jdGlvbihuKXshZnVuY3Rpb24odCxlLG4pe3ZhciByPXQubm9kZShuKS5wYXJlbnQ7dC5lZGdlKG4scikuY3V0dmFsdWU9Zih0LGUsbil9KHQsZSxuKX0pKX1mdW5jdGlvbiBmKHQsZSxuKXt2YXIgaT10Lm5vZGUobikucGFyZW50LGE9ITAsbz1lLmVkZ2UobixpKSxzPTA7cmV0dXJuIG98fChhPSExLG89ZS5lZGdlKGksbikpLHM9by53ZWlnaHQsci5mb3JFYWNoKGUubm9kZUVkZ2VzKG4pLChmdW5jdGlvbihyKXt2YXIgbyxjLHU9ci52PT09bixsPXU/ci53OnIudjtpZihsIT09aSl7dmFyIGg9dT09PWEsZj1lLmVkZ2Uocikud2VpZ2h0O2lmKHMrPWg/ZjotZixvPW4sYz1sLHQuaGFzRWRnZShvLGMpKXt2YXIgZD10LmVkZ2UobixsKS5jdXR2YWx1ZTtzKz1oPy1kOmR9fX0pKSxzfWZ1bmN0aW9uIGQodCxlKXthcmd1bWVudHMubGVuZ3RoPDImJihlPXQubm9kZXMoKVswXSkscCh0LHt9LDEsZSl9ZnVuY3Rpb24gcCh0LGUsbixpLGEpe3ZhciBvPW4scz10Lm5vZGUoaSk7cmV0dXJuIGVbaV09ITAsci5mb3JFYWNoKHQubmVpZ2hib3JzKGkpLChmdW5jdGlvbihhKXtyLmhhcyhlLGEpfHwobj1wKHQsZSxuLGEsaSkpfSkpLHMubG93PW8scy5saW09bisrLGE/cy5wYXJlbnQ9YTpkZWxldGUgcy5wYXJlbnQsbn1mdW5jdGlvbiB5KHQpe3JldHVybiByLmZpbmQodC5lZGdlcygpLChmdW5jdGlvbihlKXtyZXR1cm4gdC5lZGdlKGUpLmN1dHZhbHVlPDB9KSl9ZnVuY3Rpb24gZyh0LGUsbil7dmFyIGk9bi52LG89bi53O2UuaGFzRWRnZShpLG8pfHwoaT1uLncsbz1uLnYpO3ZhciBzPXQubm9kZShpKSxjPXQubm9kZShvKSx1PXMsbD0hMTtzLmxpbT5jLmxpbSYmKHU9YyxsPSEwKTt2YXIgaD1yLmZpbHRlcihlLmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3JldHVybiBsPT09bSh0LHQubm9kZShlLnYpLHUpJiZsIT09bSh0LHQubm9kZShlLncpLHUpfSkpO3JldHVybiByLm1pbkJ5KGgsKGZ1bmN0aW9uKHQpe3JldHVybiBhKGUsdCl9KSl9ZnVuY3Rpb24gdih0LGUsbixpKXt2YXIgYT1uLnYsbz1uLnc7dC5yZW1vdmVFZGdlKGEsbyksdC5zZXRFZGdlKGkudixpLncse30pLGQodCksaCh0LGUpLGZ1bmN0aW9uKHQsZSl7dmFyIG49ci5maW5kKHQubm9kZXMoKSwoZnVuY3Rpb24odCl7cmV0dXJuIWUubm9kZSh0KS5wYXJlbnR9KSksaT1zKHQsbik7aT1pLnNsaWNlKDEpLHIuZm9yRWFjaChpLChmdW5jdGlvbihuKXt2YXIgcj10Lm5vZGUobikucGFyZW50LGk9ZS5lZGdlKG4sciksYT0hMTtpfHwoaT1lLmVkZ2UocixuKSxhPSEwKSxlLm5vZGUobikucmFuaz1lLm5vZGUocikucmFuaysoYT9pLm1pbmxlbjotaS5taW5sZW4pfSkpfSh0LGUpfWZ1bmN0aW9uIG0odCxlLG4pe3JldHVybiBuLmxvdzw9ZS5saW0mJmUubGltPD1uLmxpbX10LmV4cG9ydHM9bCxsLmluaXRMb3dMaW1WYWx1ZXM9ZCxsLmluaXRDdXRWYWx1ZXM9aCxsLmNhbGNDdXRWYWx1ZT1mLGwubGVhdmVFZGdlPXksbC5lbnRlckVkZ2U9ZyxsLmV4Y2hhbmdlRWRnZXM9dn0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlPXt9LG49MDtmdW5jdGlvbiBpKGEpe3ZhciBvPW47ci5mb3JFYWNoKHQuY2hpbGRyZW4oYSksaSksZVthXT17bG93Om8sbGltOm4rK319cmV0dXJuIHIuZm9yRWFjaCh0LmNoaWxkcmVuKCksaSksZX0odCk7ci5mb3JFYWNoKHQuZ3JhcGgoKS5kdW1teUNoYWlucywoZnVuY3Rpb24obil7Zm9yKHZhciByPXQubm9kZShuKSxpPXIuZWRnZU9iaixhPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpLGEsbz1bXSxzPVtdLGM9TWF0aC5taW4oZVtuXS5sb3csZVtyXS5sb3cpLHU9TWF0aC5tYXgoZVtuXS5saW0sZVtyXS5saW0pO2k9bjtkb3tpPXQucGFyZW50KGkpLG8ucHVzaChpKX13aGlsZShpJiYoZVtpXS5sb3c+Y3x8dT5lW2ldLmxpbSkpO2E9aSxpPXI7Zm9yKDsoaT10LnBhcmVudChpKSkhPT1hOylzLnB1c2goaSk7cmV0dXJue3BhdGg6by5jb25jYXQocy5yZXZlcnNlKCkpLGxjYTphfX0odCxlLGkudixpLncpLG89YS5wYXRoLHM9YS5sY2EsYz0wLHU9b1tjXSxsPSEwO24hPT1pLnc7KXtpZihyPXQubm9kZShuKSxsKXtmb3IoOyh1PW9bY10pIT09cyYmdC5ub2RlKHUpLm1heFJhbms8ci5yYW5rOyljKys7dT09PXMmJihsPSExKX1pZighbCl7Zm9yKDtjPG8ubGVuZ3RoLTEmJnQubm9kZSh1PW9bYysxXSkubWluUmFuazw9ci5yYW5rOyljKys7dT1vW2NdfXQuc2V0UGFyZW50KG4sdSksbj10LnN1Y2Nlc3NvcnMobilbMF19fSkpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNCksaT1uKDgpO3QuZXhwb3J0cz17cnVuOmZ1bmN0aW9uKHQpe3ZhciBlPWkuYWRkRHVtbXlOb2RlKHQsInJvb3QiLHt9LCJfcm9vdCIpLG49ZnVuY3Rpb24odCl7dmFyIGU9e307cmV0dXJuIHIuZm9yRWFjaCh0LmNoaWxkcmVuKCksKGZ1bmN0aW9uKG4peyFmdW5jdGlvbiBuKGksYSl7dmFyIG89dC5jaGlsZHJlbihpKTtvJiZvLmxlbmd0aCYmci5mb3JFYWNoKG8sKGZ1bmN0aW9uKHQpe24odCxhKzEpfSkpO2VbaV09YX0obiwxKX0pKSxlfSh0KSxhPXIubWF4KHIudmFsdWVzKG4pKS0xLG89MiphKzE7dC5ncmFwaCgpLm5lc3RpbmdSb290PWUsci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dC5lZGdlKGUpLm1pbmxlbio9b30pKTt2YXIgcz1mdW5jdGlvbih0KXtyZXR1cm4gci5yZWR1Y2UodC5lZGdlcygpLChmdW5jdGlvbihlLG4pe3JldHVybiBlK3QuZWRnZShuKS53ZWlnaHR9KSwwKX0odCkrMTtyLmZvckVhY2godC5jaGlsZHJlbigpLChmdW5jdGlvbihjKXshZnVuY3Rpb24gdChlLG4sYSxvLHMsYyx1KXt2YXIgbD1lLmNoaWxkcmVuKHUpO2lmKCFsLmxlbmd0aClyZXR1cm4gdm9pZCh1IT09biYmZS5zZXRFZGdlKG4sdSx7d2VpZ2h0OjAsbWlubGVuOmF9KSk7dmFyIGg9aS5hZGRCb3JkZXJOb2RlKGUsIl9idCIpLGY9aS5hZGRCb3JkZXJOb2RlKGUsIl9iYiIpLGQ9ZS5ub2RlKHUpO2Uuc2V0UGFyZW50KGgsdSksZC5ib3JkZXJUb3A9aCxlLnNldFBhcmVudChmLHUpLGQuYm9yZGVyQm90dG9tPWYsci5mb3JFYWNoKGwsKGZ1bmN0aW9uKHIpe3QoZSxuLGEsbyxzLGMscik7dmFyIGk9ZS5ub2RlKHIpLGw9aS5ib3JkZXJUb3A/aS5ib3JkZXJUb3A6cixkPWkuYm9yZGVyQm90dG9tP2kuYm9yZGVyQm90dG9tOnIscD1pLmJvcmRlclRvcD9vOjIqbyx5PWwhPT1kPzE6cy1jW3VdKzE7ZS5zZXRFZGdlKGgsbCx7d2VpZ2h0OnAsbWlubGVuOnksbmVzdGluZ0VkZ2U6ITB9KSxlLnNldEVkZ2UoZCxmLHt3ZWlnaHQ6cCxtaW5sZW46eSxuZXN0aW5nRWRnZTohMH0pfSkpLGUucGFyZW50KHUpfHxlLnNldEVkZ2UobixoLHt3ZWlnaHQ6MCxtaW5sZW46cytjW3VdfSl9KHQsZSxvLHMsYSxuLGMpfSkpLHQuZ3JhcGgoKS5ub2RlUmFua0ZhY3Rvcj1vfSxjbGVhbnVwOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ3JhcGgoKTt0LnJlbW92ZU5vZGUoZS5uZXN0aW5nUm9vdCksZGVsZXRlIGUubmVzdGluZ1Jvb3Qsci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dC5lZGdlKGUpLm5lc3RpbmdFZGdlJiZ0LnJlbW92ZUVkZ2UoZSl9KSl9fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNCksaT1uKDgpO2Z1bmN0aW9uIGEodCxlLG4scixhLG8pe3ZhciBzPXt3aWR0aDowLGhlaWdodDowLHJhbms6byxib3JkZXJUeXBlOmV9LGM9YVtlXVtvLTFdLHU9aS5hZGREdW1teU5vZGUodCwiYm9yZGVyIixzLG4pO2FbZV1bb109dSx0LnNldFBhcmVudCh1LHIpLGMmJnQuc2V0RWRnZShjLHUse3dlaWdodDoxfSl9dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0LmNoaWxkcmVuKCksKGZ1bmN0aW9uIGUobil7dmFyIGk9dC5jaGlsZHJlbihuKSxvPXQubm9kZShuKTtpZihpLmxlbmd0aCYmci5mb3JFYWNoKGksZSksci5oYXMobywibWluUmFuayIpKXtvLmJvcmRlckxlZnQ9W10sby5ib3JkZXJSaWdodD1bXTtmb3IodmFyIHM9by5taW5SYW5rLGM9by5tYXhSYW5rKzE7czxjOysrcylhKHQsImJvcmRlckxlZnQiLCJfYmwiLG4sbyxzKSxhKHQsImJvcmRlclJpZ2h0IiwiX2JyIixuLG8scyl9fSkpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQpO2Z1bmN0aW9uIGkodCl7ci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7YSh0Lm5vZGUoZSkpfSkpLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe2EodC5lZGdlKGUpKX0pKX1mdW5jdGlvbiBhKHQpe3ZhciBlPXQud2lkdGg7dC53aWR0aD10LmhlaWdodCx0LmhlaWdodD1lfWZ1bmN0aW9uIG8odCl7dC55PS10Lnl9ZnVuY3Rpb24gcyh0KXt2YXIgZT10Lng7dC54PXQueSx0Lnk9ZX10LmV4cG9ydHM9e2FkanVzdDpmdW5jdGlvbih0KXt2YXIgZT10LmdyYXBoKCkucmFua2Rpci50b0xvd2VyQ2FzZSgpOyJsciIhPT1lJiYicmwiIT09ZXx8aSh0KX0sdW5kbzpmdW5jdGlvbih0KXt2YXIgZT10LmdyYXBoKCkucmFua2Rpci50b0xvd2VyQ2FzZSgpOyJidCIhPT1lJiYicmwiIT09ZXx8ZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7byh0Lm5vZGUoZSkpfSkpLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKTtyLmZvckVhY2gobi5wb2ludHMsbyksci5oYXMobiwieSIpJiZvKG4pfSkpfSh0KTsibHIiIT09ZSYmInJsIiE9PWV8fCghZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7cyh0Lm5vZGUoZSkpfSkpLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKTtyLmZvckVhY2gobi5wb2ludHMscyksci5oYXMobiwieCIpJiZzKG4pfSkpfSh0KSxpKHQpKX19fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNCksaT1uKDM1NyksYT1uKDM1OCksbz1uKDM1OSkscz1uKDM2MyksYz1uKDM2NCksdT1uKDIwKS5HcmFwaCxsPW4oOCk7ZnVuY3Rpb24gaCh0LGUsbil7cmV0dXJuIHIubWFwKGUsKGZ1bmN0aW9uKGUpe3JldHVybiBzKHQsZSxuKX0pKX1mdW5jdGlvbiBmKHQsZSl7dmFyIG49bmV3IHU7ci5mb3JFYWNoKHQsKGZ1bmN0aW9uKHQpe3ZhciBpPXQuZ3JhcGgoKS5yb290LGE9byh0LGksbixlKTtyLmZvckVhY2goYS52cywoZnVuY3Rpb24oZSxuKXt0Lm5vZGUoZSkub3JkZXI9bn0pKSxjKHQsbixhLnZzKX0pKX1mdW5jdGlvbiBkKHQsZSl7ci5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe3IuZm9yRWFjaChlLChmdW5jdGlvbihlLG4pe3Qubm9kZShlKS5vcmRlcj1ufSkpfSkpfXQuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1sLm1heFJhbmsodCksbj1oKHQsci5yYW5nZSgxLGUrMSksImluRWRnZXMiKSxvPWgodCxyLnJhbmdlKGUtMSwtMSwtMSksIm91dEVkZ2VzIikscz1pKHQpO2QodCxzKTtmb3IodmFyIGMsdT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkscD0wLHk9MDt5PDQ7KytwLCsreSl7ZihwJTI/bjpvLHAlND49Mikscz1sLmJ1aWxkTGF5ZXJNYXRyaXgodCk7dmFyIGc9YSh0LHMpO2c8dSYmKHk9MCxjPXIuY2xvbmVEZWVwKHMpLHU9Zyl9ZCh0LGMpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT17fSxuPXIuZmlsdGVyKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7cmV0dXJuIXQuY2hpbGRyZW4oZSkubGVuZ3RofSkpLGk9ci5tYXgoci5tYXAobiwoZnVuY3Rpb24oZSl7cmV0dXJuIHQubm9kZShlKS5yYW5rfSkpKSxhPXIubWFwKHIucmFuZ2UoaSsxKSwoZnVuY3Rpb24oKXtyZXR1cm5bXX0pKTt2YXIgbz1yLnNvcnRCeShuLChmdW5jdGlvbihlKXtyZXR1cm4gdC5ub2RlKGUpLnJhbmt9KSk7cmV0dXJuIHIuZm9yRWFjaChvLChmdW5jdGlvbiBuKGkpe2lmKHIuaGFzKGUsaSkpcmV0dXJuO2VbaV09ITA7dmFyIG89dC5ub2RlKGkpO2Fbby5yYW5rXS5wdXNoKGkpLHIuZm9yRWFjaCh0LnN1Y2Nlc3NvcnMoaSksbil9KSksYX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0KTtmdW5jdGlvbiBpKHQsZSxuKXtmb3IodmFyIGk9ci56aXBPYmplY3QobixyLm1hcChuLChmdW5jdGlvbih0LGUpe3JldHVybiBlfSkpKSxhPXIuZmxhdHRlbihyLm1hcChlLChmdW5jdGlvbihlKXtyZXR1cm4gci5zb3J0Qnkoci5tYXAodC5vdXRFZGdlcyhlKSwoZnVuY3Rpb24oZSl7cmV0dXJue3BvczppW2Uud10sd2VpZ2h0OnQuZWRnZShlKS53ZWlnaHR9fSkpLCJwb3MiKX0pKSwhMCksbz0xO288bi5sZW5ndGg7KW88PD0xO3ZhciBzPTIqby0xO28tPTE7dmFyIGM9ci5tYXAobmV3IEFycmF5KHMpLChmdW5jdGlvbigpe3JldHVybiAwfSkpLHU9MDtyZXR1cm4gci5mb3JFYWNoKGEuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC5wb3MrbztjW2VdKz10LndlaWdodDtmb3IodmFyIG49MDtlPjA7KWUlMiYmKG4rPWNbZSsxXSksY1tlPWUtMT4+MV0rPXQud2VpZ2h0O3UrPXQud2VpZ2h0Km59KSkpLHV9dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTAscj0xO3I8ZS5sZW5ndGg7KytyKW4rPWkodCxlW3ItMV0sZVtyXSk7cmV0dXJuIG59fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0KSxpPW4oMzYwKSxhPW4oMzYxKSxvPW4oMzYyKTt0LmV4cG9ydHM9ZnVuY3Rpb24gdChlLG4scyxjKXt2YXIgdT1lLmNoaWxkcmVuKG4pLGw9ZS5ub2RlKG4pLGg9bD9sLmJvcmRlckxlZnQ6dm9pZCAwLGY9bD9sLmJvcmRlclJpZ2h0OnZvaWQgMCxkPXt9O2gmJih1PXIuZmlsdGVyKHUsKGZ1bmN0aW9uKHQpe3JldHVybiB0IT09aCYmdCE9PWZ9KSkpO3ZhciBwPWkoZSx1KTtyLmZvckVhY2gocCwoZnVuY3Rpb24obil7aWYoZS5jaGlsZHJlbihuLnYpLmxlbmd0aCl7dmFyIGk9dChlLG4udixzLGMpO2Rbbi52XT1pLHIuaGFzKGksImJhcnljZW50ZXIiKSYmKGE9bixvPWksci5pc1VuZGVmaW5lZChhLmJhcnljZW50ZXIpPyhhLmJhcnljZW50ZXI9by5iYXJ5Y2VudGVyLGEud2VpZ2h0PW8ud2VpZ2h0KTooYS5iYXJ5Y2VudGVyPShhLmJhcnljZW50ZXIqYS53ZWlnaHQrby5iYXJ5Y2VudGVyKm8ud2VpZ2h0KS8oYS53ZWlnaHQrby53ZWlnaHQpLGEud2VpZ2h0Kz1vLndlaWdodCkpfXZhciBhLG99KSk7dmFyIHk9YShwLHMpOyFmdW5jdGlvbih0LGUpe3IuZm9yRWFjaCh0LChmdW5jdGlvbih0KXt0LnZzPXIuZmxhdHRlbih0LnZzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF0/ZVt0XS52czp0fSkpLCEwKX0pKX0oeSxkKTt2YXIgZz1vKHksYyk7aWYoaCYmKGcudnM9ci5mbGF0dGVuKFtoLGcudnMsZl0sITApLGUucHJlZGVjZXNzb3JzKGgpLmxlbmd0aCkpe3ZhciB2PWUubm9kZShlLnByZWRlY2Vzc29ycyhoKVswXSksbT1lLm5vZGUoZS5wcmVkZWNlc3NvcnMoZilbMF0pO3IuaGFzKGcsImJhcnljZW50ZXIiKXx8KGcuYmFyeWNlbnRlcj0wLGcud2VpZ2h0PTApLGcuYmFyeWNlbnRlcj0oZy5iYXJ5Y2VudGVyKmcud2VpZ2h0K3Yub3JkZXIrbS5vcmRlcikvKGcud2VpZ2h0KzIpLGcud2VpZ2h0Kz0yfXJldHVybiBnfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIubWFwKGUsKGZ1bmN0aW9uKGUpe3ZhciBuPXQuaW5FZGdlcyhlKTtpZihuLmxlbmd0aCl7dmFyIGk9ci5yZWR1Y2UobiwoZnVuY3Rpb24oZSxuKXt2YXIgcj10LmVkZ2UobiksaT10Lm5vZGUobi52KTtyZXR1cm57c3VtOmUuc3VtK3Iud2VpZ2h0Kmkub3JkZXIsd2VpZ2h0OmUud2VpZ2h0K3Iud2VpZ2h0fX0pLHtzdW06MCx3ZWlnaHQ6MH0pO3JldHVybnt2OmUsYmFyeWNlbnRlcjppLnN1bS9pLndlaWdodCx3ZWlnaHQ6aS53ZWlnaHR9fXJldHVybnt2OmV9fSkpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXt9O3JldHVybiByLmZvckVhY2godCwoZnVuY3Rpb24odCxlKXt2YXIgaT1uW3Qudl09e2luZGVncmVlOjAsaW46W10sb3V0OltdLHZzOlt0LnZdLGk6ZX07ci5pc1VuZGVmaW5lZCh0LmJhcnljZW50ZXIpfHwoaS5iYXJ5Y2VudGVyPXQuYmFyeWNlbnRlcixpLndlaWdodD10LndlaWdodCl9KSksci5mb3JFYWNoKGUuZWRnZXMoKSwoZnVuY3Rpb24odCl7dmFyIGU9blt0LnZdLGk9blt0LnddO3IuaXNVbmRlZmluZWQoZSl8fHIuaXNVbmRlZmluZWQoaSl8fChpLmluZGVncmVlKyssZS5vdXQucHVzaChuW3Qud10pKX0pKSxmdW5jdGlvbih0KXt2YXIgZT1bXTtmdW5jdGlvbiBuKHQpe3JldHVybiBmdW5jdGlvbihlKXtlLm1lcmdlZHx8KHIuaXNVbmRlZmluZWQoZS5iYXJ5Y2VudGVyKXx8ci5pc1VuZGVmaW5lZCh0LmJhcnljZW50ZXIpfHxlLmJhcnljZW50ZXI+PXQuYmFyeWNlbnRlcikmJmZ1bmN0aW9uKHQsZSl7dmFyIG49MCxyPTA7dC53ZWlnaHQmJihuKz10LmJhcnljZW50ZXIqdC53ZWlnaHQscis9dC53ZWlnaHQpO2Uud2VpZ2h0JiYobis9ZS5iYXJ5Y2VudGVyKmUud2VpZ2h0LHIrPWUud2VpZ2h0KTt0LnZzPWUudnMuY29uY2F0KHQudnMpLHQuYmFyeWNlbnRlcj1uL3IsdC53ZWlnaHQ9cix0Lmk9TWF0aC5taW4oZS5pLHQuaSksZS5tZXJnZWQ9ITB9KHQsZSl9fWZ1bmN0aW9uIGkoZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe24uaW4ucHVzaChlKSwwPT0tLW4uaW5kZWdyZWUmJnQucHVzaChuKX19Zm9yKDt0Lmxlbmd0aDspe3ZhciBhPXQucG9wKCk7ZS5wdXNoKGEpLHIuZm9yRWFjaChhLmluLnJldmVyc2UoKSxuKGEpKSxyLmZvckVhY2goYS5vdXQsaShhKSl9cmV0dXJuIHIubWFwKHIuZmlsdGVyKGUsKGZ1bmN0aW9uKHQpe3JldHVybiF0Lm1lcmdlZH0pKSwoZnVuY3Rpb24odCl7cmV0dXJuIHIucGljayh0LFsidnMiLCJpIiwiYmFyeWNlbnRlciIsIndlaWdodCJdKX0pKX0oci5maWx0ZXIobiwoZnVuY3Rpb24odCl7cmV0dXJuIXQuaW5kZWdyZWV9KSkpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNCksaT1uKDgpO2Z1bmN0aW9uIGEodCxlLG4pe2Zvcih2YXIgaTtlLmxlbmd0aCYmKGk9ci5sYXN0KGUpKS5pPD1uOyllLnBvcCgpLHQucHVzaChpLnZzKSxuKys7cmV0dXJuIG59dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49aS5wYXJ0aXRpb24odCwoZnVuY3Rpb24odCl7cmV0dXJuIHIuaGFzKHQsImJhcnljZW50ZXIiKX0pKSxvPW4ubGhzLHM9ci5zb3J0Qnkobi5yaHMsKGZ1bmN0aW9uKHQpe3JldHVybi10Lml9KSksYz1bXSx1PTAsbD0wLGg9MDtvLnNvcnQoKGY9ISFlLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuYmFyeWNlbnRlcjxlLmJhcnljZW50ZXI/LTE6dC5iYXJ5Y2VudGVyPmUuYmFyeWNlbnRlcj8xOmY/ZS5pLXQuaTp0LmktZS5pfSkpLGg9YShjLHMsaCksci5mb3JFYWNoKG8sKGZ1bmN0aW9uKHQpe2grPXQudnMubGVuZ3RoLGMucHVzaCh0LnZzKSx1Kz10LmJhcnljZW50ZXIqdC53ZWlnaHQsbCs9dC53ZWlnaHQsaD1hKGMscyxoKX0pKTt2YXIgZjt2YXIgZD17dnM6ci5mbGF0dGVuKGMsITApfTtsJiYoZC5iYXJ5Y2VudGVyPXUvbCxkLndlaWdodD1sKTtyZXR1cm4gZH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQpLGk9bigyMCkuR3JhcGg7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgYT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoO3QuaGFzTm9kZShlPXIudW5pcXVlSWQoIl9yb290IikpOyk7cmV0dXJuIGV9KHQpLG89bmV3IGkoe2NvbXBvdW5kOiEwfSkuc2V0R3JhcGgoe3Jvb3Q6YX0pLnNldERlZmF1bHROb2RlTGFiZWwoKGZ1bmN0aW9uKGUpe3JldHVybiB0Lm5vZGUoZSl9KSk7cmV0dXJuIHIuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGkpe3ZhciBzPXQubm9kZShpKSxjPXQucGFyZW50KGkpOyhzLnJhbms9PT1lfHxzLm1pblJhbms8PWUmJmU8PXMubWF4UmFuaykmJihvLnNldE5vZGUoaSksby5zZXRQYXJlbnQoaSxjfHxhKSxyLmZvckVhY2godFtuXShpKSwoZnVuY3Rpb24oZSl7dmFyIG49ZS52PT09aT9lLnc6ZS52LGE9by5lZGdlKG4saSkscz1yLmlzVW5kZWZpbmVkKGEpPzA6YS53ZWlnaHQ7by5zZXRFZGdlKG4saSx7d2VpZ2h0OnQuZWRnZShlKS53ZWlnaHQrc30pfSkpLHIuaGFzKHMsIm1pblJhbmsiKSYmby5zZXROb2RlKGkse2JvcmRlckxlZnQ6cy5ib3JkZXJMZWZ0W2VdLGJvcmRlclJpZ2h0OnMuYm9yZGVyUmlnaHRbZV19KSl9KSksb319LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGksYT17fTtyLmZvckVhY2gobiwoZnVuY3Rpb24obil7Zm9yKHZhciByLG8scz10LnBhcmVudChuKTtzOyl7aWYoKHI9dC5wYXJlbnQocykpPyhvPWFbcl0sYVtyXT1zKToobz1pLGk9cyksbyYmbyE9PXMpcmV0dXJuIHZvaWQgZS5zZXRFZGdlKG8scyk7cz1yfX0pKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0KSxpPW4oOCksYT1uKDM2NikucG9zaXRpb25YO3QuZXhwb3J0cz1mdW5jdGlvbih0KXsoZnVuY3Rpb24odCl7dmFyIGU9aS5idWlsZExheWVyTWF0cml4KHQpLG49dC5ncmFwaCgpLnJhbmtzZXAsYT0wO3IuZm9yRWFjaChlLChmdW5jdGlvbihlKXt2YXIgaT1yLm1heChyLm1hcChlLChmdW5jdGlvbihlKXtyZXR1cm4gdC5ub2RlKGUpLmhlaWdodH0pKSk7ci5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe3Qubm9kZShlKS55PWEraS8yfSkpLGErPWkrbn0pKX0pKHQ9aS5hc05vbkNvbXBvdW5kR3JhcGgodCkpLHIuZm9yRWFjaChhKHQpLChmdW5jdGlvbihlLG4pe3Qubm9kZShuKS54PWV9KSl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNCksaT1uKDIwKS5HcmFwaCxhPW4oOCk7ZnVuY3Rpb24gbyh0LGUpe3ZhciBuPXt9O3JldHVybiByLnJlZHVjZShlLChmdW5jdGlvbihlLGkpe3ZhciBhPTAsbz0wLHM9ZS5sZW5ndGgsdT1yLmxhc3QoaSk7cmV0dXJuIHIuZm9yRWFjaChpLChmdW5jdGlvbihlLGwpe3ZhciBoPWZ1bmN0aW9uKHQsZSl7aWYodC5ub2RlKGUpLmR1bW15KXJldHVybiByLmZpbmQodC5wcmVkZWNlc3NvcnMoZSksKGZ1bmN0aW9uKGUpe3JldHVybiB0Lm5vZGUoZSkuZHVtbXl9KSl9KHQsZSksZj1oP3Qubm9kZShoKS5vcmRlcjpzOyhofHxlPT09dSkmJihyLmZvckVhY2goaS5zbGljZShvLGwrMSksKGZ1bmN0aW9uKGUpe3IuZm9yRWFjaCh0LnByZWRlY2Vzc29ycyhlKSwoZnVuY3Rpb24ocil7dmFyIGk9dC5ub2RlKHIpLG89aS5vcmRlcjshKG88YXx8ZjxvKXx8aS5kdW1teSYmdC5ub2RlKGUpLmR1bW15fHxjKG4scixlKX0pKX0pKSxvPWwrMSxhPWYpfSkpLGl9KSksbn1mdW5jdGlvbiBzKHQsZSl7dmFyIG49e307ZnVuY3Rpb24gaShlLGksYSxvLHMpe3ZhciB1O3IuZm9yRWFjaChyLnJhbmdlKGksYSksKGZ1bmN0aW9uKGkpe3U9ZVtpXSx0Lm5vZGUodSkuZHVtbXkmJnIuZm9yRWFjaCh0LnByZWRlY2Vzc29ycyh1KSwoZnVuY3Rpb24oZSl7dmFyIHI9dC5ub2RlKGUpO3IuZHVtbXkmJihyLm9yZGVyPG98fHIub3JkZXI+cykmJmMobixlLHUpfSkpfSkpfXJldHVybiByLnJlZHVjZShlLChmdW5jdGlvbihlLG4pe3ZhciBhLG89LTEscz0wO3JldHVybiByLmZvckVhY2gobiwoZnVuY3Rpb24ocixjKXtpZigiYm9yZGVyIj09PXQubm9kZShyKS5kdW1teSl7dmFyIHU9dC5wcmVkZWNlc3NvcnMocik7dS5sZW5ndGgmJihhPXQubm9kZSh1WzBdKS5vcmRlcixpKG4scyxjLG8sYSkscz1jLG89YSl9aShuLHMsbi5sZW5ndGgsYSxlLmxlbmd0aCl9KSksbn0pKSxufWZ1bmN0aW9uIGModCxlLG4pe2lmKGU+bil7dmFyIHI9ZTtlPW4sbj1yfXZhciBpPXRbZV07aXx8KHRbZV09aT17fSksaVtuXT0hMH1mdW5jdGlvbiB1KHQsZSxuKXtpZihlPm4pe3ZhciBpPWU7ZT1uLG49aX1yZXR1cm4gci5oYXModFtlXSxuKX1mdW5jdGlvbiBsKHQsZSxuLGkpe3ZhciBhPXt9LG89e30scz17fTtyZXR1cm4gci5mb3JFYWNoKGUsKGZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0LChmdW5jdGlvbih0LGUpe2FbdF09dCxvW3RdPXQsc1t0XT1lfSkpfSkpLHIuZm9yRWFjaChlLChmdW5jdGlvbih0KXt2YXIgZT0tMTtyLmZvckVhY2godCwoZnVuY3Rpb24odCl7dmFyIGM9aSh0KTtpZihjLmxlbmd0aClmb3IodmFyIGw9KChjPXIuc29ydEJ5KGMsKGZ1bmN0aW9uKHQpe3JldHVybiBzW3RdfSkpKS5sZW5ndGgtMSkvMixoPU1hdGguZmxvb3IobCksZj1NYXRoLmNlaWwobCk7aDw9ZjsrK2gpe3ZhciBkPWNbaF07b1t0XT09PXQmJmU8c1tkXSYmIXUobix0LGQpJiYob1tkXT10LG9bdF09YVt0XT1hW2RdLGU9c1tkXSl9fSkpfSkpLHtyb290OmEsYWxpZ246b319ZnVuY3Rpb24gaCh0LGUsbixhLG8pe3ZhciBzPXt9LGM9ZnVuY3Rpb24odCxlLG4sYSl7dmFyIG89bmV3IGkscz10LmdyYXBoKCksYz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKGksYSxvKXt2YXIgcyxjPWkubm9kZShhKSx1PWkubm9kZShvKSxsPTA7aWYobCs9Yy53aWR0aC8yLHIuaGFzKGMsImxhYmVscG9zIikpc3dpdGNoKGMubGFiZWxwb3MudG9Mb3dlckNhc2UoKSl7Y2FzZSJsIjpzPS1jLndpZHRoLzI7YnJlYWs7Y2FzZSJyIjpzPWMud2lkdGgvMn1pZihzJiYobCs9bj9zOi1zKSxzPTAsbCs9KGMuZHVtbXk/ZTp0KS8yLGwrPSh1LmR1bW15P2U6dCkvMixsKz11LndpZHRoLzIsci5oYXModSwibGFiZWxwb3MiKSlzd2l0Y2godS5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpKXtjYXNlImwiOnM9dS53aWR0aC8yO2JyZWFrO2Nhc2UiciI6cz0tdS53aWR0aC8yfXJldHVybiBzJiYobCs9bj9zOi1zKSxzPTAsbH19KHMubm9kZXNlcCxzLmVkZ2VzZXAsYSk7cmV0dXJuIHIuZm9yRWFjaChlLChmdW5jdGlvbihlKXt2YXIgaTtyLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7dmFyIHI9bltlXTtpZihvLnNldE5vZGUociksaSl7dmFyIGE9bltpXSxzPW8uZWRnZShhLHIpO28uc2V0RWRnZShhLHIsTWF0aC5tYXgoYyh0LGUsaSksc3x8MCkpfWk9ZX0pKX0pKSxvfSh0LGUsbixvKSx1PW8/ImJvcmRlckxlZnQiOiJib3JkZXJSaWdodCI7ZnVuY3Rpb24gbCh0LGUpe2Zvcih2YXIgbj1jLm5vZGVzKCkscj1uLnBvcCgpLGk9e307cjspaVtyXT90KHIpOihpW3JdPSEwLG4ucHVzaChyKSxuPW4uY29uY2F0KGUocikpKSxyPW4ucG9wKCl9cmV0dXJuIGwoKGZ1bmN0aW9uKHQpe3NbdF09Yy5pbkVkZ2VzKHQpLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXgodCxzW2Uudl0rYy5lZGdlKGUpKX0pLDApfSksYy5wcmVkZWNlc3NvcnMuYmluZChjKSksbCgoZnVuY3Rpb24oZSl7dmFyIG49Yy5vdXRFZGdlcyhlKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWluKHQsc1tlLnddLWMuZWRnZShlKSl9KSxOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpLHI9dC5ub2RlKGUpO24hPT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkmJnIuYm9yZGVyVHlwZSE9PXUmJihzW2VdPU1hdGgubWF4KHNbZV0sbikpfSksYy5zdWNjZXNzb3JzLmJpbmQoYykpLHIuZm9yRWFjaChhLChmdW5jdGlvbih0KXtzW3RdPXNbblt0XV19KSksc31mdW5jdGlvbiBmKHQsZSl7cmV0dXJuIHIubWluQnkoci52YWx1ZXMoZSksKGZ1bmN0aW9uKGUpe3ZhciBuPU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxpPU51bWJlci5QT1NJVElWRV9JTkZJTklUWTtyZXR1cm4gci5mb3JJbihlLChmdW5jdGlvbihlLHIpe3ZhciBhPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubm9kZShlKS53aWR0aH0odCxyKS8yO249TWF0aC5tYXgoZSthLG4pLGk9TWF0aC5taW4oZS1hLGkpfSkpLG4taX0pKX1mdW5jdGlvbiBkKHQsZSl7dmFyIG49ci52YWx1ZXMoZSksaT1yLm1pbihuKSxhPXIubWF4KG4pO3IuZm9yRWFjaChbInUiLCJkIl0sKGZ1bmN0aW9uKG4pe3IuZm9yRWFjaChbImwiLCJyIl0sKGZ1bmN0aW9uKG8pe3ZhciBzLGM9bitvLHU9dFtjXTtpZih1IT09ZSl7dmFyIGw9ci52YWx1ZXModSk7KHM9ImwiPT09bz9pLXIubWluKGwpOmEtci5tYXgobCkpJiYodFtjXT1yLm1hcFZhbHVlcyh1LChmdW5jdGlvbih0KXtyZXR1cm4gdCtzfSkpKX19KSl9KSl9ZnVuY3Rpb24gcCh0LGUpe3JldHVybiByLm1hcFZhbHVlcyh0LnVsLChmdW5jdGlvbihuLGkpe2lmKGUpcmV0dXJuIHRbZS50b0xvd2VyQ2FzZSgpXVtpXTt2YXIgYT1yLnNvcnRCeShyLm1hcCh0LGkpKTtyZXR1cm4oYVsxXSthWzJdKS8yfSkpfXQuZXhwb3J0cz17cG9zaXRpb25YOmZ1bmN0aW9uKHQpe3ZhciBlLG49YS5idWlsZExheWVyTWF0cml4KHQpLGk9ci5tZXJnZShvKHQsbikscyh0LG4pKSxjPXt9O3IuZm9yRWFjaChbInUiLCJkIl0sKGZ1bmN0aW9uKGEpe2U9InUiPT09YT9uOnIudmFsdWVzKG4pLnJldmVyc2UoKSxyLmZvckVhY2goWyJsIiwiciJdLChmdW5jdGlvbihuKXsiciI9PT1uJiYoZT1yLm1hcChlLChmdW5jdGlvbih0KXtyZXR1cm4gci52YWx1ZXModCkucmV2ZXJzZSgpfSkpKTt2YXIgbz0oInUiPT09YT90LnByZWRlY2Vzc29yczp0LnN1Y2Nlc3NvcnMpLmJpbmQodCkscz1sKHQsZSxpLG8pLHU9aCh0LGUscy5yb290LHMuYWxpZ24sInIiPT09bik7InIiPT09biYmKHU9ci5tYXBWYWx1ZXModSwoZnVuY3Rpb24odCl7cmV0dXJuLXR9KSkpLGNbYStuXT11fSkpfSkpO3ZhciB1PWYodCxjKTtyZXR1cm4gZChjLHUpLHAoYyx0LmdyYXBoKCkuYWxpZ24pfSxmaW5kVHlwZTFDb25mbGljdHM6byxmaW5kVHlwZTJDb25mbGljdHM6cyxhZGRDb25mbGljdDpjLGhhc0NvbmZsaWN0OnUsdmVydGljYWxBbGlnbm1lbnQ6bCxob3Jpem9udGFsQ29tcGFjdGlvbjpoLGFsaWduQ29vcmRpbmF0ZXM6ZCxmaW5kU21hbGxlc3RXaWR0aEFsaWdubWVudDpmLGJhbGFuY2U6cH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQpLGk9big4KSxhPW4oMjApLkdyYXBoO3QuZXhwb3J0cz17ZGVidWdPcmRlcmluZzpmdW5jdGlvbih0KXt2YXIgZT1pLmJ1aWxkTGF5ZXJNYXRyaXgodCksbj1uZXcgYSh7Y29tcG91bmQ6ITAsbXVsdGlncmFwaDohMH0pLnNldEdyYXBoKHt9KTtyZXR1cm4gci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7bi5zZXROb2RlKGUse2xhYmVsOmV9KSxuLnNldFBhcmVudChlLCJsYXllciIrdC5ub2RlKGUpLnJhbmspfSkpLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKHQpe24uc2V0RWRnZSh0LnYsdC53LHt9LHQubmFtZSl9KSksci5mb3JFYWNoKGUsKGZ1bmN0aW9uKHQsZSl7dmFyIGk9ImxheWVyIitlO24uc2V0Tm9kZShpLHtyYW5rOiJzYW1lIn0pLHIucmVkdWNlKHQsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uc2V0RWRnZSh0LGUse3N0eWxlOiJpbnZpcyJ9KSxlfSkpfSkpLG59fX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9IjAuOC41In0sZnVuY3Rpb24odCxlLG4pe3QuZXhwb3J0cz17bm9kZTpuKDE2NiksY2lyY2xlOm4oMTY3KSxlbGxpcHNlOm4oOTcpLHBvbHlnb246bigxNjgpLHJlY3Q6bigxNjkpfX0sZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIHQqZT4wfXQuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYSxvLHMsYyx1LGwsaCxmLGQscCx5LGcsdjtpZihhPWUueS10Lnkscz10LngtZS54LHU9ZS54KnQueS10LngqZS55LGQ9YSpyLngrcypyLnkrdSxwPWEqaS54K3MqaS55K3UsMCE9PWQmJjAhPT1wJiZuKGQscCkpcmV0dXJuO2lmKG89aS55LXIueSxjPXIueC1pLngsbD1pLngqci55LXIueCppLnksaD1vKnQueCtjKnQueStsLGY9byplLngrYyplLnkrbCwwIT09aCYmMCE9PWYmJm4oaCxmKSlyZXR1cm47aWYoMD09PSh5PWEqYy1vKnMpKXJldHVybjtyZXR1cm4gZz1NYXRoLmFicyh5LzIpLHt4Oih2PXMqbC1jKnUpPDA/KHYtZykveTooditnKS95LHk6KHY9byp1LWEqbCk8MD8odi1nKS95Oih2K2cpL3l9fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDQpLGk9bigzMSksYT1uKDE1NCkubGF5b3V0O3QuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0PW4oMzcyKSxlPW4oMzc1KSxpPW4oMzc2KSx1PW4oMzc3KSxsPW4oMzc4KSxoPW4oMzc5KSxmPW4oMzgwKSxkPW4oMzgxKSxwPW4oMzgyKSx5PWZ1bmN0aW9uKG4seSl7IWZ1bmN0aW9uKHQpe3Qubm9kZXMoKS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj10Lm5vZGUoZSk7ci5oYXMobiwibGFiZWwiKXx8dC5jaGlsZHJlbihlKS5sZW5ndGh8fChuLmxhYmVsPWUpLHIuaGFzKG4sInBhZGRpbmdYIikmJnIuZGVmYXVsdHMobix7cGFkZGluZ0xlZnQ6bi5wYWRkaW5nWCxwYWRkaW5nUmlnaHQ6bi5wYWRkaW5nWH0pLHIuaGFzKG4sInBhZGRpbmdZIikmJnIuZGVmYXVsdHMobix7cGFkZGluZ1RvcDpuLnBhZGRpbmdZLHBhZGRpbmdCb3R0b206bi5wYWRkaW5nWX0pLHIuaGFzKG4sInBhZGRpbmciKSYmci5kZWZhdWx0cyhuLHtwYWRkaW5nTGVmdDpuLnBhZGRpbmcscGFkZGluZ1JpZ2h0Om4ucGFkZGluZyxwYWRkaW5nVG9wOm4ucGFkZGluZyxwYWRkaW5nQm90dG9tOm4ucGFkZGluZ30pLHIuZGVmYXVsdHMobixvKSxyLmVhY2goWyJwYWRkaW5nTGVmdCIsInBhZGRpbmdSaWdodCIsInBhZGRpbmdUb3AiLCJwYWRkaW5nQm90dG9tIl0sKGZ1bmN0aW9uKHQpe25bdF09TnVtYmVyKG5bdF0pfSkpLHIuaGFzKG4sIndpZHRoIikmJihuLl9wcmV2V2lkdGg9bi53aWR0aCksci5oYXMobiwiaGVpZ2h0IikmJihuLl9wcmV2SGVpZ2h0PW4uaGVpZ2h0KX0pKSx0LmVkZ2VzKCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49dC5lZGdlKGUpO3IuaGFzKG4sImxhYmVsIil8fChuLmxhYmVsPSIiKSxyLmRlZmF1bHRzKG4scyl9KSl9KHkpO3ZhciBnPWMobiwib3V0cHV0Iiksdj1jKGcsImNsdXN0ZXJzIiksbT1jKGcsImVkZ2VQYXRocyIpLGI9aShjKGcsImVkZ2VMYWJlbHMiKSx5KSx4PXQoYyhnLCJub2RlcyIpLHksZCk7YSh5KSxsKHgseSksaChiLHkpLHUobSx5LHApO3ZhciBfPWUodix5KTtmKF8seSksZnVuY3Rpb24odCl7ci5lYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49dC5ub2RlKGUpO3IuaGFzKG4sIl9wcmV2V2lkdGgiKT9uLndpZHRoPW4uX3ByZXZXaWR0aDpkZWxldGUgbi53aWR0aCxyLmhhcyhuLCJfcHJldkhlaWdodCIpP24uaGVpZ2h0PW4uX3ByZXZIZWlnaHQ6ZGVsZXRlIG4uaGVpZ2h0LGRlbGV0ZSBuLl9wcmV2V2lkdGgsZGVsZXRlIG4uX3ByZXZIZWlnaHR9KSl9KHkpfTtyZXR1cm4geS5jcmVhdGVOb2Rlcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLHkpOnR9LHkuY3JlYXRlQ2x1c3RlcnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCx5KTplfSx5LmNyZWF0ZUVkZ2VMYWJlbHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCx5KTppfSx5LmNyZWF0ZUVkZ2VQYXRocz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10LHkpOnV9LHkuc2hhcGVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPXQseSk6ZH0seS5hcnJvd3M9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9dCx5KTpwfSx5fTt2YXIgbz17cGFkZGluZ0xlZnQ6MTAscGFkZGluZ1JpZ2h0OjEwLHBhZGRpbmdUb3A6MTAscGFkZGluZ0JvdHRvbToxMCxyeDowLHJ5OjAsc2hhcGU6InJlY3QifSxzPXthcnJvd2hlYWQ6Im5vcm1hbCIsY3VydmU6aS5jdXJ2ZUxpbmVhcn07ZnVuY3Rpb24gYyh0LGUpe3ZhciBuPXQuc2VsZWN0KCJnLiIrZSk7cmV0dXJuIG4uZW1wdHkoKSYmKG49dC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZSkpLG59fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNDQpLGk9big5OCksYT1uKDE0KSxvPW4oMzEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIHMsYz1lLm5vZGVzKCkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4hYS5pc1N1YmdyYXBoKGUsdCl9KSksdT10LnNlbGVjdEFsbCgiZy5ub2RlIikuZGF0YShjLChmdW5jdGlvbih0KXtyZXR1cm4gdH0pKS5jbGFzc2VkKCJ1cGRhdGUiLCEwKTt1LmV4aXQoKS5yZW1vdmUoKSx1LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJub2RlIikuc3R5bGUoIm9wYWNpdHkiLDApLCh1PXQuc2VsZWN0QWxsKCJnLm5vZGUiKSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHM9ZS5ub2RlKHQpLGM9by5zZWxlY3QodGhpcyk7YS5hcHBseUNsYXNzKGMscy5jbGFzcywoYy5jbGFzc2VkKCJ1cGRhdGUiKT8idXBkYXRlICI6IiIpKyJub2RlIiksYy5zZWxlY3QoImcubGFiZWwiKS5yZW1vdmUoKTt2YXIgdT1jLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKSxsPWkodSxzKSxoPW5bcy5zaGFwZV0sZj1yLnBpY2sobC5ub2RlKCkuZ2V0QkJveCgpLCJ3aWR0aCIsImhlaWdodCIpO3MuZWxlbT10aGlzLHMuaWQmJmMuYXR0cigiaWQiLHMuaWQpLHMubGFiZWxJZCYmdS5hdHRyKCJpZCIscy5sYWJlbElkKSxyLmhhcyhzLCJ3aWR0aCIpJiYoZi53aWR0aD1zLndpZHRoKSxyLmhhcyhzLCJoZWlnaHQiKSYmKGYuaGVpZ2h0PXMuaGVpZ2h0KSxmLndpZHRoKz1zLnBhZGRpbmdMZWZ0K3MucGFkZGluZ1JpZ2h0LGYuaGVpZ2h0Kz1zLnBhZGRpbmdUb3Arcy5wYWRkaW5nQm90dG9tLHUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKHMucGFkZGluZ0xlZnQtcy5wYWRkaW5nUmlnaHQpLzIrIiwiKyhzLnBhZGRpbmdUb3Atcy5wYWRkaW5nQm90dG9tKS8yKyIpIik7dmFyIGQ9by5zZWxlY3QodGhpcyk7ZC5zZWxlY3QoIi5sYWJlbC1jb250YWluZXIiKS5yZW1vdmUoKTt2YXIgcD1oKGQsZixzKS5jbGFzc2VkKCJsYWJlbC1jb250YWluZXIiLCEwKTthLmFwcGx5U3R5bGUocCxzLnN0eWxlKTt2YXIgeT1wLm5vZGUoKS5nZXRCQm94KCk7cy53aWR0aD15LndpZHRoLHMuaGVpZ2h0PXkuaGVpZ2h0fSkpLHM9dS5leGl0P3UuZXhpdCgpOnUuc2VsZWN0QWxsKG51bGwpO3JldHVybiBhLmFwcGx5VHJhbnNpdGlvbihzLGUpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKSx1fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmFwcGVuZCgidGV4dCIpLGk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49IiIscj0hMSxpPTA7aTx0Lmxlbmd0aDsrK2kpaWYoZT10W2ldLHIpe3N3aXRjaChlKXtjYXNlIm4iOm4rPSJcbiI7YnJlYWs7ZGVmYXVsdDpuKz1lfXI9ITF9ZWxzZSJcXCI9PT1lP3I9ITA6bis9ZTtyZXR1cm4gbn0oZS5sYWJlbCkuc3BsaXQoIlxuIiksYT0wO2E8aS5sZW5ndGg7YSsrKW4uYXBwZW5kKCJ0c3BhbiIpLmF0dHIoInhtbDpzcGFjZSIsInByZXNlcnZlIikuYXR0cigiZHkiLCIxZW0iKS5hdHRyKCJ4IiwiMSIpLnRleHQoaVthXSk7cmV0dXJuIHIuYXBwbHlTdHlsZShuLGUubGFiZWxTdHlsZSksbn19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj10O3JldHVybiBuLm5vZGUoKS5hcHBlbmRDaGlsZChlLmxhYmVsKSxyLmFwcGx5U3R5bGUobixlLmxhYmVsU3R5bGUpLG59fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNCksaT1uKDMxKSxhPW4oOTgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuLG89ZS5ub2RlcygpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHIuaXNTdWJncmFwaChlLHQpfSkpLHM9dC5zZWxlY3RBbGwoImcuY2x1c3RlciIpLmRhdGEobywoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSk7cy5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKSxzLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjbHVzdGVyIikuYXR0cigiaWQiLChmdW5jdGlvbih0KXtyZXR1cm4gZS5ub2RlKHQpLmlkfSkpLnN0eWxlKCJvcGFjaXR5IiwwKSxzPXQuc2VsZWN0QWxsKCJnLmNsdXN0ZXIiKSxyLmFwcGx5VHJhbnNpdGlvbihzLGUpLnN0eWxlKCJvcGFjaXR5IiwxKSxzLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPWUubm9kZSh0KSxyPWkuc2VsZWN0KHRoaXMpO2kuc2VsZWN0KHRoaXMpLmFwcGVuZCgicmVjdCIpO3ZhciBvPXIuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpO2EobyxuLG4uY2x1c3RlckxhYmVsUG9zKX0pKSxzLnNlbGVjdEFsbCgicmVjdCIpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPWUubm9kZSh0KSxhPWkuc2VsZWN0KHRoaXMpO3IuYXBwbHlTdHlsZShhLG4uc3R5bGUpfSkpLG49cy5leGl0P3MuZXhpdCgpOnMuc2VsZWN0QWxsKG51bGwpO3JldHVybiByLmFwcGx5VHJhbnNpdGlvbihuLGUpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKSxzfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQ0KSxpPW4oOTgpLGE9bigxNCksbz1uKDMxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbixzPXQuc2VsZWN0QWxsKCJnLmVkZ2VMYWJlbCIpLmRhdGEoZS5lZGdlcygpLChmdW5jdGlvbih0KXtyZXR1cm4gYS5lZGdlVG9JZCh0KX0pKS5jbGFzc2VkKCJ1cGRhdGUiLCEwKTtzLmV4aXQoKS5yZW1vdmUoKSxzLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiZWRnZUxhYmVsIiwhMCkuc3R5bGUoIm9wYWNpdHkiLDApLChzPXQuc2VsZWN0QWxsKCJnLmVkZ2VMYWJlbCIpKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgbj1vLnNlbGVjdCh0aGlzKTtuLnNlbGVjdCgiLmxhYmVsIikucmVtb3ZlKCk7dmFyIGE9ZS5lZGdlKHQpLHM9aShuLGUuZWRnZSh0KSwwLDApLmNsYXNzZWQoImxhYmVsIiwhMCksYz1zLm5vZGUoKS5nZXRCQm94KCk7YS5sYWJlbElkJiZzLmF0dHIoImlkIixhLmxhYmVsSWQpLHIuaGFzKGEsIndpZHRoIil8fChhLndpZHRoPWMud2lkdGgpLHIuaGFzKGEsImhlaWdodCIpfHwoYS5oZWlnaHQ9Yy5oZWlnaHQpfSkpLG49cy5leGl0P3MuZXhpdCgpOnMuc2VsZWN0QWxsKG51bGwpO3JldHVybiBhLmFwcGx5VHJhbnNpdGlvbihuLGUpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKSxzfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQ0KSxpPW4oMTY2KSxhPW4oMTQpLG89bigzMSk7ZnVuY3Rpb24gcyh0LGUpe3ZhciBuPShvLmxpbmV8fG8uc3ZnLmxpbmUpKCkueCgoZnVuY3Rpb24odCl7cmV0dXJuIHQueH0pKS55KChmdW5jdGlvbih0KXtyZXR1cm4gdC55fSkpO3JldHVybihuLmN1cnZlfHxuLmludGVycG9sYXRlKSh0LmN1cnZlKSxuKGUpfXQuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGM9dC5zZWxlY3RBbGwoImcuZWRnZVBhdGgiKS5kYXRhKGUuZWRnZXMoKSwoZnVuY3Rpb24odCl7cmV0dXJuIGEuZWRnZVRvSWQodCl9KSkuY2xhc3NlZCgidXBkYXRlIiwhMCksdT1mdW5jdGlvbih0LGUpe3ZhciBuPXQuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VQYXRoIikuc3R5bGUoIm9wYWNpdHkiLDApO3JldHVybiBuLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwicGF0aCIpLmF0dHIoImQiLChmdW5jdGlvbih0KXt2YXIgbj1lLmVkZ2UodCksaT1lLm5vZGUodC52KS5lbGVtO3JldHVybiBzKG4sci5yYW5nZShuLnBvaW50cy5sZW5ndGgpLm1hcCgoZnVuY3Rpb24oKXtyZXR1cm4gZT0odD1pKS5nZXRCQm94KCkse3g6KG49dC5vd25lclNWR0VsZW1lbnQuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpLm11bHRpcGx5KHQuZ2V0U2NyZWVuQ1RNKCkpLnRyYW5zbGF0ZShlLndpZHRoLzIsZS5oZWlnaHQvMikpLmUseTpuLmZ9O3ZhciB0LGUsbn0pKSl9KSksbi5hcHBlbmQoImRlZnMiKSxufShjLGUpOyFmdW5jdGlvbih0LGUpe3ZhciBuPXQuZXhpdCgpO2EuYXBwbHlUcmFuc2l0aW9uKG4sZSkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpfShjLGUpO3ZhciBsPXZvaWQgMCE9PWMubWVyZ2U/Yy5tZXJnZSh1KTpjO3JldHVybiBhLmFwcGx5VHJhbnNpdGlvbihsLGUpLnN0eWxlKCJvcGFjaXR5IiwxKSxsLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPW8uc2VsZWN0KHRoaXMpLHI9ZS5lZGdlKHQpO3IuZWxlbT10aGlzLHIuaWQmJm4uYXR0cigiaWQiLHIuaWQpLGEuYXBwbHlDbGFzcyhuLHIuY2xhc3MsKG4uY2xhc3NlZCgidXBkYXRlIik/InVwZGF0ZSAiOiIiKSsiZWRnZVBhdGgiKX0pKSxsLnNlbGVjdEFsbCgicGF0aC5wYXRoIikuZWFjaCgoZnVuY3Rpb24odCl7dmFyIG49ZS5lZGdlKHQpO24uYXJyb3doZWFkSWQ9ci51bmlxdWVJZCgiYXJyb3doZWFkIik7dmFyIGM9by5zZWxlY3QodGhpcykuYXR0cigibWFya2VyLWVuZCIsKGZ1bmN0aW9uKCl7cmV0dXJuInVybCgiKyh0PWxvY2F0aW9uLmhyZWYsZT1uLmFycm93aGVhZElkLHQuc3BsaXQoIiMiKVswXSsiIyIrZSkrIikiO3ZhciB0LGV9KSkuc3R5bGUoImZpbGwiLCJub25lIik7YS5hcHBseVRyYW5zaXRpb24oYyxlKS5hdHRyKCJkIiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIG49dC5lZGdlKGUpLHI9dC5ub2RlKGUudiksYT10Lm5vZGUoZS53KSxvPW4ucG9pbnRzLnNsaWNlKDEsbi5wb2ludHMubGVuZ3RoLTEpO3JldHVybiBvLnVuc2hpZnQoaShyLG9bMF0pKSxvLnB1c2goaShhLG9bby5sZW5ndGgtMV0pKSxzKG4sbyl9KGUsdCl9KSksYS5hcHBseVN0eWxlKGMsbi5zdHlsZSl9KSksbC5zZWxlY3RBbGwoImRlZnMgKiIpLnJlbW92ZSgpLGwuc2VsZWN0QWxsKCJkZWZzIikuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9ZS5lZGdlKHQpOygwLG5bci5hcnJvd2hlYWRdKShvLnNlbGVjdCh0aGlzKSxyLmFycm93aGVhZElkLHIsImFycm93aGVhZCIpfSkpLGx9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQpLGk9bigzMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbih0KXt2YXIgbj1lLm5vZGUodCk7cmV0dXJuInRyYW5zbGF0ZSgiK24ueCsiLCIrbi55KyIpIn10LmZpbHRlcigoZnVuY3Rpb24oKXtyZXR1cm4haS5zZWxlY3QodGhpcykuY2xhc3NlZCgidXBkYXRlIil9KSkuYXR0cigidHJhbnNmb3JtIixuKSxyLmFwcGx5VHJhbnNpdGlvbih0LGUpLnN0eWxlKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLG4pfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0KSxpPW4oMzEpLGE9big0NCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbih0KXt2YXIgbj1lLmVkZ2UodCk7cmV0dXJuIGEuaGFzKG4sIngiKT8idHJhbnNsYXRlKCIrbi54KyIsIituLnkrIikiOiIifXQuZmlsdGVyKChmdW5jdGlvbigpe3JldHVybiFpLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJ1cGRhdGUiKX0pKS5hdHRyKCJ0cmFuc2Zvcm0iLG4pLHIuYXBwbHlUcmFuc2l0aW9uKHQsZSkuc3R5bGUoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIsbil9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQpLGk9bigzMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5maWx0ZXIoKGZ1bmN0aW9uKCl7cmV0dXJuIWkuc2VsZWN0KHRoaXMpLmNsYXNzZWQoInVwZGF0ZSIpfSkpO2Z1bmN0aW9uIGEodCl7dmFyIG49ZS5ub2RlKHQpO3JldHVybiJ0cmFuc2xhdGUoIituLngrIiwiK24ueSsiKSJ9bi5hdHRyKCJ0cmFuc2Zvcm0iLGEpLHIuYXBwbHlUcmFuc2l0aW9uKHQsZSkuc3R5bGUoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIsYSksci5hcHBseVRyYW5zaXRpb24obi5zZWxlY3RBbGwoInJlY3QiKSxlKS5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiBlLm5vZGUodCkud2lkdGh9KSkuYXR0cigiaGVpZ2h0IiwoZnVuY3Rpb24odCl7cmV0dXJuIGUubm9kZSh0KS5oZWlnaHR9KSkuYXR0cigieCIsKGZ1bmN0aW9uKHQpe3JldHVybi1lLm5vZGUodCkud2lkdGgvMn0pKS5hdHRyKCJ5IiwoZnVuY3Rpb24odCl7cmV0dXJuLWUubm9kZSh0KS5oZWlnaHQvMn0pKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNjkpLGk9big5NyksYT1uKDE2Nyksbz1uKDE2OCk7dC5leHBvcnRzPXtyZWN0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInJ4IixuLnJ4KS5hdHRyKCJyeSIsbi5yeSkuYXR0cigieCIsLWUud2lkdGgvMikuYXR0cigieSIsLWUuaGVpZ2h0LzIpLmF0dHIoIndpZHRoIixlLndpZHRoKS5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0KTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHIobix0KX0saX0sZWxsaXBzZTpmdW5jdGlvbih0LGUsbil7dmFyIHI9ZS53aWR0aC8yLGE9ZS5oZWlnaHQvMixvPXQuaW5zZXJ0KCJlbGxpcHNlIiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIsLWUud2lkdGgvMikuYXR0cigieSIsLWUuaGVpZ2h0LzIpLmF0dHIoInJ4IixyKS5hdHRyKCJyeSIsYSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBpKG4scixhLHQpfSxvfSxjaXJjbGU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPU1hdGgubWF4KGUud2lkdGgsZS5oZWlnaHQpLzIsaT10Lmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIsLWUud2lkdGgvMikuYXR0cigieSIsLWUuaGVpZ2h0LzIpLmF0dHIoInIiLHIpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gYShuLHIsdCl9LGl9LGRpYW1vbmQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWUud2lkdGgqTWF0aC5TUVJUMi8yLGk9ZS5oZWlnaHQqTWF0aC5TUVJUMi8yLGE9W3t4OjAseTotaX0se3g6LXIseTowfSx7eDowLHk6aX0se3g6cix5OjB9XSxzPXQuaW5zZXJ0KCJwb2x5Z29uIiwiOmZpcnN0LWNoaWxkIikuYXR0cigicG9pbnRzIixhLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQueCsiLCIrdC55fSkpLmpvaW4oIiAiKSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBvKG4sYSx0KX0sc319fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNCk7ZnVuY3Rpb24gaSh0LGUsbixpKXt2YXIgYT10LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigibWFya2VyV2lkdGgiLDgpLmF0dHIoIm1hcmtlckhlaWdodCIsNikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIHoiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpO3IuYXBwbHlTdHlsZShhLG5baSsiU3R5bGUiXSksbltpKyJDbGFzcyJdJiZhLmF0dHIoImNsYXNzIixuW2krIkNsYXNzIl0pfXQuZXhwb3J0cz17ZGVmYXVsdDppLG5vcm1hbDppLHZlZTpmdW5jdGlvbih0LGUsbixpKXt2YXIgYT10LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigibWFya2VyV2lkdGgiLDgpLmF0dHIoIm1hcmtlckhlaWdodCIsNikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIEwgNCA1IHoiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpO3IuYXBwbHlTdHlsZShhLG5baSsiU3R5bGUiXSksbltpKyJDbGFzcyJdJiZhLmF0dHIoImNsYXNzIixuW2krIkNsYXNzIl0pfSx1bmRpcmVjdGVkOmZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBhPXQuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCA1IEwgMTAgNSIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIik7ci5hcHBseVN0eWxlKGEsbltpKyJTdHlsZSJdKSxuW2krIkNsYXNzIl0mJmEuYXR0cigiY2xhc3MiLG5baSsiQ2xhc3MiXSl9fX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9IjAuNi40In0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcjtmdW5jdGlvbiBpKHQpe3JldHVybiByPXJ8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHQ9ZXNjYXBlKHQpLnJlcGxhY2UoLyUyNi9nLCImIikucmVwbGFjZSgvJTIzL2csIiMiKS5yZXBsYWNlKC8lM0IvZywiOyIpLHIuaW5uZXJIVE1MPXQsdW5lc2NhcGUoci50ZXh0Q29udGVudCl9bi5yKGUpO3ZhciBhPW4oMjMpLG89bi5uKGEpLHM9e2RlYnVnOjEsaW5mbzoyLHdhcm46MyxlcnJvcjo0LGZhdGFsOjV9LGM9e2RlYnVnOmZ1bmN0aW9uKCl7fSxpbmZvOmZ1bmN0aW9uKCl7fSx3YXJuOmZ1bmN0aW9uKCl7fSxlcnJvcjpmdW5jdGlvbigpe30sZmF0YWw6ZnVuY3Rpb24oKXt9fSx1PWZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiJmYXRhbCI7aXNOYU4odCkmJih0PXQudG9Mb3dlckNhc2UoKSx2b2lkIDAhPT1zW3RdJiYodD1zW3RdKSksYy50cmFjZT1mdW5jdGlvbigpe30sYy5kZWJ1Zz1mdW5jdGlvbigpe30sYy5pbmZvPWZ1bmN0aW9uKCl7fSxjLndhcm49ZnVuY3Rpb24oKXt9LGMuZXJyb3I9ZnVuY3Rpb24oKXt9LGMuZmF0YWw9ZnVuY3Rpb24oKXt9LHQ8PXMuZmF0YWwmJihjLmZhdGFsPWNvbnNvbGUuZXJyb3I/Y29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUsbCgiRkFUQUwiKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiG1szNW0iLGwoIkZBVEFMIikpKSx0PD1zLmVycm9yJiYoYy5lcnJvcj1jb25zb2xlLmVycm9yP2NvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlLGwoIkVSUk9SIiksImNvbG9yOiBvcmFuZ2UiKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIhtbMzFtIixsKCJFUlJPUiIpKSksdDw9cy53YXJuJiYoYy53YXJuPWNvbnNvbGUud2Fybj9jb25zb2xlLndhcm4uYmluZChjb25zb2xlLGwoIldBUk4iKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiG1szM20iLGwoIldBUk4iKSkpLHQ8PXMuaW5mbyYmKGMuaW5mbz1jb25zb2xlLmluZm8/Y29uc29sZS5pbmZvLmJpbmQoY29uc29sZSxsKCJJTkZPIiksImNvbG9yOiBsaWdodGJsdWUiKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIhtbMzRtIixsKCJJTkZPIikpKSx0PD1zLmRlYnVnJiYoYy5kZWJ1Zz1jb25zb2xlLmRlYnVnP2NvbnNvbGUuZGVidWcuYmluZChjb25zb2xlLGwoIkRFQlVHIiksImNvbG9yOiBsaWdodGdyZWVuIik6Y29uc29sZS5sb2cuYmluZChjb25zb2xlLCIbWzMybSIsbCgiREVCVUciKSkpfSxsPWZ1bmN0aW9uKHQpe3ZhciBlPW8oKSgpLmZvcm1hdCgic3MuU1NTIik7cmV0dXJuIiVjIi5jb25jYXQoZSwiIDogIikuY29uY2F0KHQsIiA6ICIpfSxoPW4oMCksZj1uKDE3MCksZD1uLm4oZikscD1uKDM2KSx5PW4oNzEpLGc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPSIiLG49MDtuPj0wOyl7aWYoISgobj10LmluZGV4T2YoIjxzY3JpcHQiKSk+PTApKXtlKz10LG49LTE7YnJlYWt9ZSs9dC5zdWJzdHIoMCxuKSwobj0odD10LnN1YnN0cihuKzEpKS5pbmRleE9mKCI8XC9zY3JpcHQ+IikpPj0wJiYobis9OSx0PXQuc3Vic3RyKG4pKX1yZXR1cm4gZX0sdj0vPGJyXHMqXC8/Pi9naSxtPWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UodiwiI2JyIyIpfSxiPWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoLyNiciMvZywiPGJyLz4iKX0seD1mdW5jdGlvbih0KXtyZXR1cm4iZmFsc2UiIT09dCYmITEhPT10fSxfPXtnZXRSb3dzOmZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiAxO3ZhciBlPW0odCk7cmV0dXJuKGU9ZS5yZXBsYWNlKC9cXG4vZywiI2JyIyIpKS5zcGxpdCgiI2JyIyIpfSxzYW5pdGl6ZVRleHQ6ZnVuY3Rpb24odCxlKXt2YXIgbj10LHI9ITA7aWYoIWUuZmxvd2NoYXJ0fHwhMSE9PWUuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMmJiJmYWxzZSIhPT1lLmZsb3djaGFydC5odG1sTGFiZWxzfHwocj0hMSkscil7dmFyIGk9ZS5zZWN1cml0eUxldmVsOyJhbnRpc2NyaXB0Ij09PWk/bj1nKG4pOiJsb29zZSIhPT1pJiYobj0obj0obj1tKG4pKS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKSkucmVwbGFjZSgvPS9nLCImZXF1YWxzOyIpLG49YihuKSl9cmV0dXJuIG59LGhhc0JyZWFrczpmdW5jdGlvbih0KXtyZXR1cm4vPGJyXHMqWy9dPz4vZ2kudGVzdCh0KX0sc3BsaXRCcmVha3M6ZnVuY3Rpb24odCl7cmV0dXJuIHQuc3BsaXQoLzxiclxzKlsvXT8+L2dpKX0sbGluZUJyZWFrUmVnZXg6dixyZW1vdmVTY3JpcHQ6ZyxnZXRVcmw6ZnVuY3Rpb24odCl7dmFyIGU9IiI7cmV0dXJuIHQmJihlPShlPShlPXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5yZXBsYWNlKC9cKC9nLCJcXCgiKSkucmVwbGFjZSgvXCkvZywiXFwpIikpLGV9LGV2YWx1YXRlOnh9O2Z1bmN0aW9uIGsodCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIua2V5LHIpfX1mdW5jdGlvbiB3KHQpe3JldHVybih3PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSkodCl9ZnVuY3Rpb24gRSh0KXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHZhciBlPTAsbj1uZXcgQXJyYXkodC5sZW5ndGgpO2U8dC5sZW5ndGg7ZSsrKW5bZV09dFtlXTtyZXR1cm4gbn19KHQpfHxmdW5jdGlvbih0KXtpZihTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KHQpfHwiW29iamVjdCBBcmd1bWVudHNdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSlyZXR1cm4gQXJyYXkuZnJvbSh0KX0odCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UiKX0oKX12YXIgVD17Y3VydmVCYXNpczpoLmN1cnZlQmFzaXMsY3VydmVCYXNpc0Nsb3NlZDpoLmN1cnZlQmFzaXNDbG9zZWQsY3VydmVCYXNpc09wZW46aC5jdXJ2ZUJhc2lzT3BlbixjdXJ2ZUxpbmVhcjpoLmN1cnZlTGluZWFyLGN1cnZlTGluZWFyQ2xvc2VkOmguY3VydmVMaW5lYXJDbG9zZWQsY3VydmVNb25vdG9uZVg6aC5jdXJ2ZU1vbm90b25lWCxjdXJ2ZU1vbm90b25lWTpoLmN1cnZlTW9ub3RvbmVZLGN1cnZlTmF0dXJhbDpoLmN1cnZlTmF0dXJhbCxjdXJ2ZVN0ZXA6aC5jdXJ2ZVN0ZXAsY3VydmVTdGVwQWZ0ZXI6aC5jdXJ2ZVN0ZXBBZnRlcixjdXJ2ZVN0ZXBCZWZvcmU6aC5jdXJ2ZVN0ZXBCZWZvcmV9LEM9L1slXXsyfVt7XVxzKig/Oig/OihcdyspXHMqOnwoXHcrKSlccyooPzooPzooXHcrKSl8KCg/Oig/IVt9XVslXXsyfSkufFxyP1xuKSopKT9ccyopKD86W31dWyVdezJ9KT8vZ2ksUz0vXHMqKD86KD86KFx3KykoPz06KTp8KFx3KykpXHMqKD86KD86KFx3KykpfCgoPzooPyFbfV1bJV17Mn0pLnxccj9cbikqKSk/XHMqKSg/Olt9XVslXXsyfSk/L2dpLEE9L1xzKiUlLipcbi9nbSxNPWZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsO3RyeXt2YXIgbj1uZXcgUmVnRXhwKCJbJV17Mn0oPyFbe10iLmNvbmNhdChTLnNvdXJjZSwiKSg/PVt9XVslXXsyfSkuKlxuIiksImlnIik7dD10LnRyaW0oKS5yZXBsYWNlKG4sIiIpLnJlcGxhY2UoLycvZ20sJyInKSxjLmRlYnVnKCJEZXRlY3RpbmcgZGlhZ3JhbSBkaXJlY3RpdmUiLmNvbmNhdChudWxsIT09ZT8iIHR5cGU6IitlOiIiLCIgYmFzZWQgb24gdGhlIHRleHQ6IikuY29uY2F0KHQpKTtmb3IodmFyIHIsaT1bXTtudWxsIT09KHI9Qy5leGVjKHQpKTspaWYoci5pbmRleD09PUMubGFzdEluZGV4JiZDLmxhc3RJbmRleCsrLHImJiFlfHxlJiZyWzFdJiZyWzFdLm1hdGNoKGUpfHxlJiZyWzJdJiZyWzJdLm1hdGNoKGUpKXt2YXIgYT1yWzFdP3JbMV06clsyXSxvPXJbM10/clszXS50cmltKCk6cls0XT9KU09OLnBhcnNlKHJbNF0udHJpbSgpKTpudWxsO2kucHVzaCh7dHlwZTphLGFyZ3M6b30pfXJldHVybiAwPT09aS5sZW5ndGgmJmkucHVzaCh7dHlwZTp0LGFyZ3M6bnVsbH0pLDE9PT1pLmxlbmd0aD9pWzBdOml9Y2F0Y2gobil7cmV0dXJuIGMuZXJyb3IoIkVSUk9SOiAiLmNvbmNhdChuLm1lc3NhZ2UsIiAtIFVuYWJsZSB0byBwYXJzZSBkaXJlY3RpdmVcbiAgICAgICIpLmNvbmNhdChudWxsIT09ZT8iIHR5cGU6IitlOiIiLCIgYmFzZWQgb24gdGhlIHRleHQ6IikuY29uY2F0KHQpKSx7dHlwZTpudWxsLGFyZ3M6bnVsbH19fSxPPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9dC5yZXBsYWNlKEMsIiIpLnJlcGxhY2UoQSwiXG4iKSxjLmRlYnVnKCJEZXRlY3RpbmcgZGlhZ3JhbSB0eXBlIGJhc2VkIG9uIHRoZSB0ZXh0ICIrdCksdC5tYXRjaCgvXlxzKnNlcXVlbmNlRGlhZ3JhbS8pPyJzZXF1ZW5jZSI6dC5tYXRjaCgvXlxzKmdhbnR0Lyk/ImdhbnR0Ijp0Lm1hdGNoKC9eXHMqY2xhc3NEaWFncmFtLXYyLyk/ImNsYXNzRGlhZ3JhbSI6dC5tYXRjaCgvXlxzKmNsYXNzRGlhZ3JhbS8pP2UmJmUuY2xhc3MmJiJkYWdyZS13cmFwcGVyIj09PWUuY2xhc3MuZGVmYXVsdFJlbmRlcmVyPyJjbGFzc0RpYWdyYW0iOiJjbGFzcyI6dC5tYXRjaCgvXlxzKnN0YXRlRGlhZ3JhbS12Mi8pPyJzdGF0ZURpYWdyYW0iOnQubWF0Y2goL15ccypzdGF0ZURpYWdyYW0vKT9lJiZlLmNsYXNzJiYiZGFncmUtd3JhcHBlciI9PT1lLnN0YXRlLmRlZmF1bHRSZW5kZXJlcj8ic3RhdGVEaWFncmFtIjoic3RhdGUiOnQubWF0Y2goL15ccypnaXRHcmFwaC8pPyJnaXQiOnQubWF0Y2goL15ccypmbG93Y2hhcnQvKT8iZmxvd2NoYXJ0LXYyIjp0Lm1hdGNoKC9eXHMqaW5mby8pPyJpbmZvIjp0Lm1hdGNoKC9eXHMqcGllLyk/InBpZSI6dC5tYXRjaCgvXlxzKmVyRGlhZ3JhbS8pPyJlciI6dC5tYXRjaCgvXlxzKmpvdXJuZXkvKT8iam91cm5leSI6dC5tYXRjaCgvXlxzKnJlcXVpcmVtZW50Lyl8fHQubWF0Y2goL15ccypyZXF1aXJlbWVudERpYWdyYW0vKT8icmVxdWlyZW1lbnQiOmUmJmUuZmxvd2NoYXJ0JiYiZGFncmUtd3JhcHBlciI9PT1lLmZsb3djaGFydC5kZWZhdWx0UmVuZGVyZXI/ImZsb3djaGFydC12MiI6ImZsb3djaGFydCJ9LEI9ZnVuY3Rpb24odCxlKXt2YXIgbj17fTtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShyKSxhPTA7YTxyO2ErKylpW2FdPWFyZ3VtZW50c1thXTt2YXIgbz1lP2UuYXBwbHkodm9pZCAwLGkpOmlbMF07aWYobyBpbiBuKXJldHVybiBuW29dO3ZhciBzPXQuYXBwbHkodm9pZCAwLGkpO3JldHVybiBuW29dPXMsc319LE49ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm4gZTt2YXIgbj0iY3VydmUiLmNvbmNhdCh0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSkpO3JldHVybiBUW25dfHxlfSxEPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJmU/TWF0aC5zcXJ0KE1hdGgucG93KGUueC10LngsMikrTWF0aC5wb3coZS55LXQueSwyKSk6MH0sTD1mdW5jdGlvbih0KXtmb3IodmFyIGU9IiIsbj0iIixyPTA7cjx0Lmxlbmd0aDtyKyspdm9pZCAwIT09dFtyXSYmKHRbcl0uc3RhcnRzV2l0aCgiY29sb3I6Iil8fHRbcl0uc3RhcnRzV2l0aCgidGV4dC1hbGlnbjoiKT9uPW4rdFtyXSsiOyI6ZT1lK3Rbcl0rIjsiKTtyZXR1cm57c3R5bGU6ZSxsYWJlbFN0eWxlOm59fSxJPTAsUj1mdW5jdGlvbigpe3JldHVybiBJKyssImlkLSIrTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsMTIpKyItIitJfTt2YXIgRj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlPSIiLG49IjAxMjM0NTY3ODlhYmNkZWYiLmxlbmd0aCxyPTA7cjx0O3IrKyllKz0iMDEyMzQ1Njc4OWFiY2RlZiIuY2hhckF0KE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpuKSk7cmV0dXJuIGV9KHQubGVuZ3RoKX0sUD1mdW5jdGlvbiB0KGUsbixyKXt2YXIgaT1PYmplY3QuYXNzaWduKHtkZXB0aDoyLGNsb2JiZXI6ITF9LHIpLGE9aS5kZXB0aCxvPWkuY2xvYmJlcjtyZXR1cm4gQXJyYXkuaXNBcnJheShuKSYmIUFycmF5LmlzQXJyYXkoZSk/KG4uZm9yRWFjaCgoZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuLHIpfSkpLGUpOkFycmF5LmlzQXJyYXkobikmJkFycmF5LmlzQXJyYXkoZSk/KG4uZm9yRWFjaCgoZnVuY3Rpb24odCl7LTE9PT1lLmluZGV4T2YodCkmJmUucHVzaCh0KX0pKSxlKTp2b2lkIDA9PT1lfHxhPD0wP251bGwhPWUmJiJvYmplY3QiPT09dyhlKSYmIm9iamVjdCI9PT13KG4pP09iamVjdC5hc3NpZ24oZSxuKTpuOih2b2lkIDAhPT1uJiYib2JqZWN0Ij09PXcoZSkmJiJvYmplY3QiPT09dyhuKSYmT2JqZWN0LmtleXMobikuZm9yRWFjaCgoZnVuY3Rpb24ocil7Im9iamVjdCIhPT13KG5bcl0pfHx2b2lkIDAhPT1lW3JdJiYib2JqZWN0IiE9PXcoZVtyXSk/KG98fCJvYmplY3QiIT09dyhlW3JdKSYmIm9iamVjdCIhPT13KG5bcl0pKSYmKGVbcl09bltyXSk6KHZvaWQgMD09PWVbcl0mJihlW3JdPUFycmF5LmlzQXJyYXkobltyXSk/W106e30pLGVbcl09dChlW3JdLG5bcl0se2RlcHRoOmEtMSxjbG9iYmVyOm99KSl9KSksZSl9LGo9ZnVuY3Rpb24odCxlKXt2YXIgbj1lLnRleHQucmVwbGFjZShfLmxpbmVCcmVha1JlZ2V4LCIgIikscj10LmFwcGVuZCgidGV4dCIpO3IuYXR0cigieCIsZS54KSxyLmF0dHIoInkiLGUueSksci5zdHlsZSgidGV4dC1hbmNob3IiLGUuYW5jaG9yKSxyLnN0eWxlKCJmb250LWZhbWlseSIsZS5mb250RmFtaWx5KSxyLnN0eWxlKCJmb250LXNpemUiLGUuZm9udFNpemUpLHIuc3R5bGUoImZvbnQtd2VpZ2h0IixlLmZvbnRXZWlnaHQpLHIuYXR0cigiZmlsbCIsZS5maWxsKSx2b2lkIDAhPT1lLmNsYXNzJiZyLmF0dHIoImNsYXNzIixlLmNsYXNzKTt2YXIgaT1yLmFwcGVuZCgidHNwYW4iKTtyZXR1cm4gaS5hdHRyKCJ4IixlLngrMiplLnRleHRNYXJnaW4pLGkuYXR0cigiZmlsbCIsZS5maWxsKSxpLnRleHQobikscn0sWT1CKChmdW5jdGlvbih0LGUsbil7aWYoIXQpcmV0dXJuIHQ7aWYobj1PYmplY3QuYXNzaWduKHtmb250U2l6ZToxMixmb250V2VpZ2h0OjQwMCxmb250RmFtaWx5OiJBcmlhbCIsam9pbldpdGg6Ijxici8+In0sbiksXy5saW5lQnJlYWtSZWdleC50ZXN0KHQpKXJldHVybiB0O3ZhciByPXQuc3BsaXQoIiAiKSxpPVtdLGE9IiI7cmV0dXJuIHIuZm9yRWFjaCgoZnVuY3Rpb24odCxvKXt2YXIgcz1VKCIiLmNvbmNhdCh0LCIgIiksbiksYz1VKGEsbik7aWYocz5lKXt2YXIgdT16KHQsZSwiLSIsbiksbD11Lmh5cGhlbmF0ZWRTdHJpbmdzLGg9dS5yZW1haW5pbmdXb3JkO2kucHVzaC5hcHBseShpLFthXS5jb25jYXQoRShsKSkpLGE9aH1lbHNlIGMrcz49ZT8oaS5wdXNoKGEpLGE9dCk6YT1bYSx0XS5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpO28rMT09PXIubGVuZ3RoJiZpLnB1c2goYSl9KSksaS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiIiIT09dH0pKS5qb2luKG4uam9pbldpdGgpfSksKGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4iIi5jb25jYXQodCwiLSIpLmNvbmNhdChlLCItIikuY29uY2F0KG4uZm9udFNpemUsIi0iKS5jb25jYXQobi5mb250V2VpZ2h0LCItIikuY29uY2F0KG4uZm9udEZhbWlseSwiLSIpLmNvbmNhdChuLmpvaW5XaXRoKX0pKSx6PUIoKGZ1bmN0aW9uKHQsZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOiItIixyPWFyZ3VtZW50cy5sZW5ndGg+Mz9hcmd1bWVudHNbM106dm9pZCAwO3I9T2JqZWN0LmFzc2lnbih7Zm9udFNpemU6MTIsZm9udFdlaWdodDo0MDAsZm9udEZhbWlseToiQXJpYWwiLG1hcmdpbjowfSxyKTt2YXIgaT10LnNwbGl0KCIiKSxhPVtdLG89IiI7cmV0dXJuIGkuZm9yRWFjaCgoZnVuY3Rpb24odCxzKXt2YXIgYz0iIi5jb25jYXQobykuY29uY2F0KHQpO2lmKFUoYyxyKT49ZSl7dmFyIHU9cysxLGw9aS5sZW5ndGg9PT11LGg9IiIuY29uY2F0KGMpLmNvbmNhdChuKTthLnB1c2gobD9jOmgpLG89IiJ9ZWxzZSBvPWN9KSkse2h5cGhlbmF0ZWRTdHJpbmdzOmEscmVtYWluaW5nV29yZDpvfX0pLChmdW5jdGlvbih0LGUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiLSIscj1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMDtyZXR1cm4iIi5jb25jYXQodCwiLSIpLmNvbmNhdChlLCItIikuY29uY2F0KG4sIi0iKS5jb25jYXQoci5mb250U2l6ZSwiLSIpLmNvbmNhdChyLmZvbnRXZWlnaHQsIi0iKS5jb25jYXQoci5mb250RmFtaWx5KX0pKSxVPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9T2JqZWN0LmFzc2lnbih7Zm9udFNpemU6MTIsZm9udFdlaWdodDo0MDAsZm9udEZhbWlseToiQXJpYWwifSxlKSwkKHQsZSkud2lkdGh9LCQ9QigoZnVuY3Rpb24odCxlKXt2YXIgbj1lPU9iamVjdC5hc3NpZ24oe2ZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NDAwLGZvbnRGYW1pbHk6IkFyaWFsIn0sZSkscj1uLmZvbnRTaXplLGk9bi5mb250RmFtaWx5LGE9bi5mb250V2VpZ2h0O2lmKCF0KXJldHVybnt3aWR0aDowLGhlaWdodDowfTt2YXIgbz1bInNhbnMtc2VyaWYiLGldLHM9dC5zcGxpdChfLmxpbmVCcmVha1JlZ2V4KSxjPVtdLHU9T2JqZWN0KGguc2VsZWN0KSgiYm9keSIpO2lmKCF1LnJlbW92ZSlyZXR1cm57d2lkdGg6MCxoZWlnaHQ6MCxsaW5lSGVpZ2h0OjB9O2Zvcih2YXIgbD11LmFwcGVuZCgic3ZnIiksZj0wLGQ9bztmPGQubGVuZ3RoO2YrKyl7dmFyIHA9ZFtmXSx5PTAsZz17d2lkdGg6MCxoZWlnaHQ6MCxsaW5lSGVpZ2h0OjB9LHY9ITAsbT0hMSxiPXZvaWQgMDt0cnl7Zm9yKHZhciB4LGs9c1tTeW1ib2wuaXRlcmF0b3JdKCk7ISh2PSh4PWsubmV4dCgpKS5kb25lKTt2PSEwKXt2YXIgdz14LnZhbHVlLEU9e3g6MCx5OjAsZmlsbDp2b2lkIDAsYW5jaG9yOiJzdGFydCIsc3R5bGU6IiM2NjYiLHdpZHRoOjEwMCxoZWlnaHQ6MTAwLHRleHRNYXJnaW46MCxyeDowLHJ5OjAsdmFsaWduOnZvaWQgMH07RS50ZXh0PXc7dmFyIFQ9aihsLEUpLnN0eWxlKCJmb250LXNpemUiLHIpLnN0eWxlKCJmb250LXdlaWdodCIsYSkuc3R5bGUoImZvbnQtZmFtaWx5IixwKSxDPShULl9ncm91cHN8fFQpWzBdWzBdLmdldEJCb3goKTtnLndpZHRoPU1hdGgucm91bmQoTWF0aC5tYXgoZy53aWR0aCxDLndpZHRoKSkseT1NYXRoLnJvdW5kKEMuaGVpZ2h0KSxnLmhlaWdodCs9eSxnLmxpbmVIZWlnaHQ9TWF0aC5yb3VuZChNYXRoLm1heChnLmxpbmVIZWlnaHQseSkpfX1jYXRjaCh0KXttPSEwLGI9dH1maW5hbGx5e3RyeXt2fHxudWxsPT1rLnJldHVybnx8ay5yZXR1cm4oKX1maW5hbGx5e2lmKG0pdGhyb3cgYn19Yy5wdXNoKGcpfXJldHVybiBsLnJlbW92ZSgpLGNbaXNOYU4oY1sxXS5oZWlnaHQpfHxpc05hTihjWzFdLndpZHRoKXx8aXNOYU4oY1sxXS5saW5lSGVpZ2h0KXx8Y1swXS5oZWlnaHQ+Y1sxXS5oZWlnaHQmJmNbMF0ud2lkdGg+Y1sxXS53aWR0aCYmY1swXS5saW5lSGVpZ2h0PmNbMV0ubGluZUhlaWdodD8wOjFdfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIiIuY29uY2F0KHQsIi0iKS5jb25jYXQoZS5mb250U2l6ZSwiLSIpLmNvbmNhdChlLmZvbnRXZWlnaHQsIi0iKS5jb25jYXQoZS5mb250RmFtaWx5KX0pKSxxPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uZXcgTWFwO3JldHVybiByLnNldCgiaGVpZ2h0Iix0KSxuPyhyLnNldCgid2lkdGgiLCIxMDAlIiksci5zZXQoInN0eWxlIiwibWF4LXdpZHRoOiAiLmNvbmNhdChlLCJweDsiKSkpOnIuc2V0KCJ3aWR0aCIsZSkscn0sVz1mdW5jdGlvbih0LGUsbixyKXshZnVuY3Rpb24odCxlKXt2YXIgbj0hMCxyPSExLGk9dm9pZCAwO3RyeXtmb3IodmFyIGEsbz1lW1N5bWJvbC5pdGVyYXRvcl0oKTshKG49KGE9by5uZXh0KCkpLmRvbmUpO249ITApe3ZhciBzPWEudmFsdWU7dC5hdHRyKHNbMF0sc1sxXSl9fWNhdGNoKHQpe3I9ITAsaT10fWZpbmFsbHl7dHJ5e258fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYocil0aHJvdyBpfX19KHQscShlLG4scikpfSxWPXthc3NpZ25XaXRoRGVwdGg6UCx3cmFwTGFiZWw6WSxjYWxjdWxhdGVUZXh0SGVpZ2h0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9T2JqZWN0LmFzc2lnbih7Zm9udFNpemU6MTIsZm9udFdlaWdodDo0MDAsZm9udEZhbWlseToiQXJpYWwiLG1hcmdpbjoxNX0sZSksJCh0LGUpLmhlaWdodH0sY2FsY3VsYXRlVGV4dFdpZHRoOlUsY2FsY3VsYXRlVGV4dERpbWVuc2lvbnM6JCxjYWxjdWxhdGVTdmdTaXplQXR0cnM6cSxjb25maWd1cmVTdmdTaXplOlcsZGV0ZWN0SW5pdDpmdW5jdGlvbih0LGUpe3ZhciBuPU0odCwvKD86aW5pdFxiKXwoPzppbml0aWFsaXplXGIpLykscj17fTtpZihBcnJheS5pc0FycmF5KG4pKXt2YXIgaT1uLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuYXJnc30pKTtyPVAocixFKGkpKX1lbHNlIHI9bi5hcmdzO2lmKHIpe3ZhciBhPU8odCxlKTtbImNvbmZpZyJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXJbdF0mJigiZmxvd2NoYXJ0LXYyIj09PWEmJihhPSJmbG93Y2hhcnQiKSxyW2FdPXJbdF0sZGVsZXRlIHJbdF0pfSkpfXJldHVybiByfSxkZXRlY3REaXJlY3RpdmU6TSxkZXRlY3RUeXBlOk8saXNTdWJzdHJpbmdJbkFycmF5OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspaWYoZVtuXS5tYXRjaCh0KSlyZXR1cm4gbjtyZXR1cm4tMX0saW50ZXJwb2xhdGVUb0N1cnZlOk4sY2FsY0xhYmVsUG9zaXRpb246ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlLG49MDt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe24rPUQodCxlKSxlPXR9KSk7dmFyIHI9bi8yLGk9dm9pZCAwO3JldHVybiBlPXZvaWQgMCx0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2lmKGUmJiFpKXt2YXIgbj1EKHQsZSk7aWYobjxyKXItPW47ZWxzZXt2YXIgYT1yL247YTw9MCYmKGk9ZSksYT49MSYmKGk9e3g6dC54LHk6dC55fSksYT4wJiZhPDEmJihpPXt4OigxLWEpKmUueCthKnQueCx5OigxLWEpKmUueSthKnQueX0pfX1lPXR9KSksaX0odCl9LGNhbGNDYXJkaW5hbGl0eVBvc2l0aW9uOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcjtjLmluZm8oIm91ciBwb2ludHMiLGUpLGVbMF0hPT1uJiYoZT1lLnJldmVyc2UoKSksZS5mb3JFYWNoKChmdW5jdGlvbih0KXtEKHQscikscj10fSkpO3ZhciBpLGE9MjU7cj12b2lkIDAsZS5mb3JFYWNoKChmdW5jdGlvbih0KXtpZihyJiYhaSl7dmFyIGU9RCh0LHIpO2lmKGU8YSlhLT1lO2Vsc2V7dmFyIG49YS9lO248PTAmJihpPXIpLG4+PTEmJihpPXt4OnQueCx5OnQueX0pLG4+MCYmbjwxJiYoaT17eDooMS1uKSpyLngrbip0LngseTooMS1uKSpyLnkrbip0Lnl9KX19cj10fSkpO3ZhciBvPXQ/MTA6NSxzPU1hdGguYXRhbjIoZVswXS55LWkueSxlWzBdLngtaS54KSx1PXt4OjAseTowfTtyZXR1cm4gdS54PU1hdGguc2luKHMpKm8rKGVbMF0ueCtpLngpLzIsdS55PS1NYXRoLmNvcyhzKSpvKyhlWzBdLnkraS55KS8yLHV9LGNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb246ZnVuY3Rpb24odCxlLG4pe3ZhciByLGk9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShuKSk7Yy5pbmZvKCJvdXIgcG9pbnRzIixpKSwic3RhcnRfbGVmdCIhPT1lJiYic3RhcnRfcmlnaHQiIT09ZSYmKGk9aS5yZXZlcnNlKCkpLGkuZm9yRWFjaCgoZnVuY3Rpb24odCl7RCh0LHIpLHI9dH0pKTt2YXIgYSxvPTI1O3I9dm9pZCAwLGkuZm9yRWFjaCgoZnVuY3Rpb24odCl7aWYociYmIWEpe3ZhciBlPUQodCxyKTtpZihlPG8pby09ZTtlbHNle3ZhciBuPW8vZTtuPD0wJiYoYT1yKSxuPj0xJiYoYT17eDp0LngseTp0Lnl9KSxuPjAmJm48MSYmKGE9e3g6KDEtbikqci54K24qdC54LHk6KDEtbikqci55K24qdC55fSl9fXI9dH0pKTt2YXIgcz0xMCx1PU1hdGguYXRhbjIoaVswXS55LWEueSxpWzBdLngtYS54KSxsPXt4OjAseTowfTtyZXR1cm4gbC54PU1hdGguc2luKHUpKnMrKGlbMF0ueCthLngpLzIsbC55PS1NYXRoLmNvcyh1KSpzKyhpWzBdLnkrYS55KS8yLCJzdGFydF9sZWZ0Ij09PWUmJihsLng9TWF0aC5zaW4odStNYXRoLlBJKSpzKyhpWzBdLngrYS54KS8yLGwueT0tTWF0aC5jb3ModStNYXRoLlBJKSpzKyhpWzBdLnkrYS55KS8yKSwiZW5kX3JpZ2h0Ij09PWUmJihsLng9TWF0aC5zaW4odS1NYXRoLlBJKSpzKyhpWzBdLngrYS54KS8yLTUsbC55PS1NYXRoLmNvcyh1LU1hdGguUEkpKnMrKGlbMF0ueSthLnkpLzItNSksImVuZF9sZWZ0Ij09PWUmJihsLng9TWF0aC5zaW4odSkqcysoaVswXS54K2EueCkvMi01LGwueT0tTWF0aC5jb3ModSkqcysoaVswXS55K2EueSkvMi01KSxsfSxmb3JtYXRVcmw6ZnVuY3Rpb24odCxlKXt2YXIgbj10LnRyaW0oKTtpZihuKXJldHVybiJsb29zZSIhPT1lLnNlY3VyaXR5TGV2ZWw/T2JqZWN0KHkuc2FuaXRpemVVcmwpKG4pOm59LGdldFN0eWxlc0Zyb21BcnJheTpMLGdlbmVyYXRlSWQ6UixyYW5kb206RixtZW1vaXplOkIscnVuRnVuYzpmdW5jdGlvbih0KXtmb3IodmFyIGUsbj10LnNwbGl0KCIuIikscj1uLmxlbmd0aC0xLGk9bltyXSxhPXdpbmRvdyxvPTA7bzxyO28rKylpZighKGE9YVtuW29dXSkpcmV0dXJuO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGM9bmV3IEFycmF5KHM+MT9zLTE6MCksdT0xO3U8czt1KyspY1t1LTFdPWFyZ3VtZW50c1t1XTsoZT1hKVtpXS5hcHBseShlLGMpfSxpbml0SWRHZW5lcmF0aW9yOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLG4peyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMuZGV0ZXJtaW5pc3RpYz1lLHRoaXMuc2VlZD1uLHRoaXMuY291bnQ9bj9uLmxlbmd0aDowfXZhciBlLG4scjtyZXR1cm4gZT10LChuPVt7a2V5OiJuZXh0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRldGVybWluaXN0aWM/dGhpcy5jb3VudCsrOkRhdGUubm93KCl9fV0pJiZrKGUucHJvdG90eXBlLG4pLHImJmsoZSxyKSx0fSgpfSxIPW4oMSksRz1mdW5jdGlvbih0LGUpe3JldHVybiBlP09iamVjdChILmFkanVzdCkodCx7czotNDAsbDoxMH0pOk9iamVjdChILmFkanVzdCkodCx7czotNDAsbDotMTB9KX07ZnVuY3Rpb24gWCh0KXtyZXR1cm4oWD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0pKHQpfWZ1bmN0aW9uIFoodCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIua2V5LHIpfX12YXIgUT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXshZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSx0aGlzLmJhY2tncm91bmQ9IiNmNGY0ZjQiLHRoaXMuZGFya01vZGU9ITEsdGhpcy5wcmltYXJ5Q29sb3I9IiNmZmY0ZGQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9IiMzMzMiLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4In12YXIgZSxuLHI7cmV0dXJuIGU9dCwobj1be2tleToidXBkYXRlQ29sb3JzIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucHJpbWFyeVRleHRDb2xvcj10aGlzLnByaW1hcnlUZXh0Q29sb3J8fCh0aGlzLmRhcmtNb2RlPyIjZGRkIjoiIzMzMyIpLHRoaXMuc2Vjb25kYXJ5Q29sb3I9dGhpcy5zZWNvbmRhcnlDb2xvcnx8T2JqZWN0KEguYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotMTIwfSksdGhpcy50ZXJ0aWFyeUNvbG9yPXRoaXMudGVydGlhcnlDb2xvcnx8T2JqZWN0KEguYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxODAsbDo1fSksdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3J8fEcodGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj10aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yfHxHKHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPXRoaXMudGVydGlhcnlCb3JkZXJDb2xvcnx8Ryh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5ub3RlQm9yZGVyQ29sb3I9dGhpcy5ub3RlQm9yZGVyQ29sb3J8fEcodGhpcy5ub3RlQmtnQ29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5ub3RlQmtnQ29sb3I9dGhpcy5ub3RlQmtnQ29sb3J8fCIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9dGhpcy5ub3RlVGV4dENvbG9yfHwiIzMzMyIsdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3J8fE9iamVjdChILmludmVydCkodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj10aGlzLnRlcnRpYXJ5VGV4dENvbG9yfHxPYmplY3QoSC5pbnZlcnQpKHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9dGhpcy5saW5lQ29sb3J8fE9iamVjdChILmludmVydCkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj10aGlzLnRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMubm9kZUJrZz10aGlzLm5vZGVCa2d8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMubWFpbkJrZz10aGlzLm1haW5Ca2d8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMubm9kZUJvcmRlcj10aGlzLm5vZGVCb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuY2x1c3RlckJrZz10aGlzLmNsdXN0ZXJCa2d8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmNsdXN0ZXJCb3JkZXI9dGhpcy5jbHVzdGVyQm9yZGVyfHx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3IsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMuZGVmYXVsdExpbmtDb2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50aXRsZUNvbG9yPXRoaXMudGl0bGVDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9dGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kfHwodGhpcy5kYXJrTW9kZT9PYmplY3QoSC5kYXJrZW4pKHRoaXMuc2Vjb25kYXJ5Q29sb3IsMzApOnRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMubm9kZVRleHRDb2xvcj10aGlzLm5vZGVUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmFjdG9yQm9yZGVyPXRoaXMuYWN0b3JCb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuYWN0b3JCa2c9dGhpcy5hY3RvckJrZ3x8dGhpcy5tYWluQmtnLHRoaXMuYWN0b3JUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuYWN0b3JMaW5lQ29sb3I9dGhpcy5hY3RvckxpbmVDb2xvcnx8ImdyZXkiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmxhYmVsQm94QmtnQ29sb3J8fHRoaXMuYWN0b3JCa2csdGhpcy5zaWduYWxDb2xvcj10aGlzLnNpZ25hbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLnNpZ25hbFRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPXRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcnx8dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMubGFiZWxUZXh0Q29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMubG9vcFRleHRDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj10aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcnx8T2JqZWN0KEguZGFya2VuKSh0aGlzLnNlY29uZGFyeUNvbG9yLDEwKSx0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj10aGlzLmFjdGl2YXRpb25Ca2dDb2xvcnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnNlcXVlbmNlTnVtYmVyQ29sb3I9dGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yfHxPYmplY3QoSC5pbnZlcnQpKHRoaXMubGluZUNvbG9yKSx0aGlzLnNlY3Rpb25Ca2dDb2xvcj10aGlzLnNlY3Rpb25Ca2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPXRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yfHwid2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPXRoaXMuc2VjdGlvbkJrZ0NvbG9yfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj10aGlzLnNlY3Rpb25Ca2dDb2xvcjJ8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMudGFza0JvcmRlckNvbG9yPXRoaXMudGFza0JvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnRhc2tCa2dDb2xvcj10aGlzLnRhc2tCa2dDb2xvcnx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9dGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPXRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yfHxPYmplY3QoSC5saWdodGVuKSh0aGlzLnByaW1hcnlDb2xvciwyMyksdGhpcy5ncmlkQ29sb3I9dGhpcy5ncmlkQ29sb3J8fCJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj10aGlzLmRvbmVUYXNrQmtnQ29sb3J8fCJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj10aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3J8fCJncmV5Iix0aGlzLmNyaXRCb3JkZXJDb2xvcj10aGlzLmNyaXRCb3JkZXJDb2xvcnx8IiNmZjg4ODgiLHRoaXMuY3JpdEJrZ0NvbG9yPXRoaXMuY3JpdEJrZ0NvbG9yfHwicmVkIix0aGlzLnRvZGF5TGluZUNvbG9yPXRoaXMudG9kYXlMaW5lQ29sb3J8fCJyZWQiLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPXRoaXMudGFza1RleHREYXJrQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj10aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3J8fCIjMDAzMTYzIix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLmNvbXBvc2l0ZUJvcmRlcj10aGlzLmNvbXBvc2l0ZUJvcmRlcnx8dGhpcy5ub2RlQm9yZGVyLHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kPXRoaXMubm9kZUJvcmRlcix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuY2xhc3NUZXh0PXRoaXMuY2xhc3NUZXh0fHx0aGlzLnRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLmZpbGxUeXBlMHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5maWxsVHlwZTF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTI9dGhpcy5maWxsVHlwZTJ8fE9iamVjdChILmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz10aGlzLmZpbGxUeXBlM3x8T2JqZWN0KEguYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9dGhpcy5maWxsVHlwZTR8fE9iamVjdChILmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTU9dGhpcy5maWxsVHlwZTV8fE9iamVjdChILmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj10aGlzLmZpbGxUeXBlNnx8T2JqZWN0KEguYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz10aGlzLmZpbGxUeXBlN3x8T2JqZWN0KEguYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjEyOH0pLHRoaXMucGllMT10aGlzLnBpZTF8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucGllMj10aGlzLnBpZTJ8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5waWUzPXRoaXMucGllM3x8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMucGllND10aGlzLnBpZTR8fE9iamVjdChILmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2w6LTEwfSksdGhpcy5waWU1PXRoaXMucGllNXx8T2JqZWN0KEguYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtsOi0xMH0pLHRoaXMucGllNj10aGlzLnBpZTZ8fE9iamVjdChILmFkanVzdCkodGhpcy50ZXJ0aWFyeUNvbG9yLHtsOi0xMH0pLHRoaXMucGllNz10aGlzLnBpZTd8fE9iamVjdChILmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotMTB9KSx0aGlzLnBpZTg9dGhpcy5waWU4fHxPYmplY3QoSC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MCxsOi0xMH0pLHRoaXMucGllOT10aGlzLnBpZTl8fE9iamVjdChILmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6MH0pLHRoaXMucGllMTA9dGhpcy5waWUxMHx8T2JqZWN0KEguYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi0yMH0pLHRoaXMucGllMTE9dGhpcy5waWUxMXx8T2JqZWN0KEguYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotMjB9KSx0aGlzLnBpZTEyPXRoaXMucGllMTJ8fE9iamVjdChILmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6LTEwfSksdGhpcy5waWVUaXRsZVRleHRTaXplPXRoaXMucGllVGl0bGVUZXh0U2l6ZXx8IjI1cHgiLHRoaXMucGllVGl0bGVUZXh0Q29sb3I9dGhpcy5waWVUaXRsZVRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZT10aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllU2VjdGlvblRleHRDb2xvcj10aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMucGllTGVnZW5kVGV4dFNpemU9dGhpcy5waWVMZWdlbmRUZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllTGVnZW5kVGV4dENvbG9yPXRoaXMucGllTGVnZW5kVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU3Ryb2tlQ29sb3I9dGhpcy5waWVTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZVN0cm9rZVdpZHRoPXRoaXMucGllU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3BhY2l0eT10aGlzLnBpZU9wYWNpdHl8fCIwLjciLHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcj10aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZWxhdGlvbkNvbG9yPXRoaXMucmVsYXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZD10aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfHwodGhpcy5kYXJrTW9kZT9PYmplY3QoSC5kYXJrZW4pKHRoaXMuc2Vjb25kYXJ5Q29sb3IsMzApOnRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMucmVsYXRpb25MYWJlbENvbG9yPXRoaXMucmVsYXRpb25MYWJlbENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yfX0se2tleToiY2FsY3VsYXRlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCJvYmplY3QiPT09WCh0KSl7dmFyIG49T2JqZWN0LmtleXModCk7bi5mb3JFYWNoKChmdW5jdGlvbihuKXtlW25dPXRbbl19KSksdGhpcy51cGRhdGVDb2xvcnMoKSxuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pKX1lbHNlIHRoaXMudXBkYXRlQ29sb3JzKCl9fV0pJiZaKGUucHJvdG90eXBlLG4pLHImJlooZSxyKSx0fSgpO2Z1bmN0aW9uIEsodCl7cmV0dXJuKEs9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9KSh0KX1mdW5jdGlvbiBKKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLmtleSxyKX19dmFyIHR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpeyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMuYmFja2dyb3VuZD0iIzMzMyIsdGhpcy5wcmltYXJ5Q29sb3I9IiMxZjIwMjAiLHRoaXMuc2Vjb25kYXJ5Q29sb3I9T2JqZWN0KEgubGlnaHRlbikodGhpcy5wcmltYXJ5Q29sb3IsMTYpLHRoaXMudGVydGlhcnlDb2xvcj1PYmplY3QoSC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0xNjB9KSx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcj1HKHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9Ryh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj1HKHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnByaW1hcnlUZXh0Q29sb3I9T2JqZWN0KEguaW52ZXJ0KSh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9T2JqZWN0KEguaW52ZXJ0KSh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPU9iamVjdChILmludmVydCkodGhpcy50ZXJ0aWFyeUNvbG9yKSx0aGlzLmxpbmVDb2xvcj1PYmplY3QoSC5pbnZlcnQpKHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9T2JqZWN0KEguaW52ZXJ0KSh0aGlzLmJhY2tncm91bmQpLHRoaXMubWFpbkJrZz0iIzFmMjAyMCIsdGhpcy5zZWNvbmRCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubWFpbkNvbnRyYXN0Q29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kYXJrVGV4dENvbG9yPU9iamVjdChILmxpZ2h0ZW4pKE9iamVjdChILmludmVydCkoIiMzMjNENDciKSwxMCksdGhpcy5saW5lQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYm9yZGVyMT0iIzgxQjFEQiIsdGhpcy5ib3JkZXIyPU9iamVjdChILnJnYmEpKDI1NSwyNTUsMjU1LC4yNSksdGhpcy5hcnJvd2hlYWRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgiLHRoaXMubGFiZWxCYWNrZ3JvdW5kPSIjMTgxODE4Iix0aGlzLnRleHRDb2xvcj0iI2NjYyIsdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iI0Y5RkZGRSIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQmtnPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yTGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJibGFjayIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9T2JqZWN0KEguZGFya2VuKSgiI0VBRThEOSIsMzApLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9IiNFQUU4RDkiLHRoaXMudGFza0JvcmRlckNvbG9yPU9iamVjdChILnJnYmEpKDI1NSwyNTUsMjU1LDcwKSx0aGlzLnRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSIjMDAzMTYzIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj1PYmplY3QoSC5yZ2JhKSgyNTUsMjU1LDI1NSw1MCksdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9IiM4MUIxREIiLHRoaXMuZ3JpZENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iZ3JleSIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9IiNFODM3MzciLHRoaXMuY3JpdEJrZ0NvbG9yPSIjRTgzNzM3Iix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSIjREI1NzU3Iix0aGlzLmxhYmVsQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZXJyb3JCa2dDb2xvcj0iI2E0NDE0MSIsdGhpcy5lcnJvclRleHRDb2xvcj0iI2RkZCJ9dmFyIGUsbixyO3JldHVybiBlPXQsKG49W3trZXk6InVwZGF0ZUNvbG9ycyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnNlY29uZEJrZz1PYmplY3QoSC5saWdodGVuKSh0aGlzLm1haW5Ca2csMTYpLHRoaXMubGluZUNvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5hcnJvd2hlYWRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMubm9kZUJrZz10aGlzLm1haW5Ca2csdGhpcy5ub2RlQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmNsdXN0ZXJCa2c9dGhpcy5zZWNvbmRCa2csdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuYm9yZGVyMix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPU9iamVjdChILmxpZ2h0ZW4pKHRoaXMubGFiZWxCYWNrZ3JvdW5kLDI1KSx0aGlzLmFjdG9yQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmFjdG9yQmtnPXRoaXMubWFpbkJrZyx0aGlzLmFjdG9yVGV4dENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmFjdG9yQmtnLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj10aGlzLmFjdG9yQm9yZGVyLHRoaXMubGFiZWxUZXh0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLm5vdGVCb3JkZXJDb2xvcj10aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yLHRoaXMubm90ZUJrZ0NvbG9yPXRoaXMuc2Vjb25kQmtnLHRoaXMubm90ZVRleHRDb2xvcj10aGlzLnNlY29uZGFyeVRleHRDb2xvcix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj10aGlzLmJvcmRlcjEsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9dGhpcy5zZWNvbmRCa2csdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9dGhpcy5iYWNrZ3JvdW5kLHRoaXMudGFza0JrZ0NvbG9yPU9iamVjdChILmxpZ2h0ZW4pKHRoaXMubWFpbkJrZywyMyksdGhpcy50YXNrVGV4dENvbG9yPXRoaXMuZGFya1RleHRDb2xvcix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy5ncmlkQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPXRoaXMuZGFya1RleHRDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiIzU1NSIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLmNvbXBvc2l0ZUJvcmRlcj10aGlzLmNvbXBvc2l0ZUJvcmRlcnx8dGhpcy5ub2RlQm9yZGVyLHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuc3BlY2lhbFN0YXRlQ29sb3I9IiNmNGY0ZjQiLHRoaXMuZXJyb3JCa2dDb2xvcj10aGlzLmVycm9yQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmVycm9yVGV4dENvbG9yPXRoaXMuZXJyb3JUZXh0Q29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj1PYmplY3QoSC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9T2JqZWN0KEguYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9T2JqZWN0KEguYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT1PYmplY3QoSC5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9T2JqZWN0KEguYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz1PYmplY3QoSC5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5waWUxPXRoaXMucGllMXx8IiMwYjAwMDAiLHRoaXMucGllMj10aGlzLnBpZTJ8fCIjNGQxMDM3Iix0aGlzLnBpZTM9dGhpcy5waWUzfHwiIzNmNTI1OCIsdGhpcy5waWU0PXRoaXMucGllNHx8IiM0ZjJmMWIiLHRoaXMucGllNT10aGlzLnBpZTV8fCIjNmUwYTBhIix0aGlzLnBpZTY9dGhpcy5waWU2fHwiIzNiMDA0OCIsdGhpcy5waWU3PXRoaXMucGllN3x8IiM5OTVhMDEiLHRoaXMucGllOD10aGlzLnBpZTh8fCIjMTU0NzA2Iix0aGlzLnBpZTk9dGhpcy5waWU5fHwiIzE2MTcyMiIsdGhpcy5waWUxMD10aGlzLnBpZTEwfHwiIzAwMjk2ZiIsdGhpcy5waWUxMT10aGlzLnBpZTExfHwiIzAxNjI5YyIsdGhpcy5waWUxMj10aGlzLnBpZTEyfHwiIzAxMDAyOSIsdGhpcy5waWVUaXRsZVRleHRTaXplPXRoaXMucGllVGl0bGVUZXh0U2l6ZXx8IjI1cHgiLHRoaXMucGllVGl0bGVUZXh0Q29sb3I9dGhpcy5waWVUaXRsZVRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZT10aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllU2VjdGlvblRleHRDb2xvcj10aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMucGllTGVnZW5kVGV4dFNpemU9dGhpcy5waWVMZWdlbmRUZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllTGVnZW5kVGV4dENvbG9yPXRoaXMucGllTGVnZW5kVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU3Ryb2tlQ29sb3I9dGhpcy5waWVTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZVN0cm9rZVdpZHRoPXRoaXMucGllU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3BhY2l0eT10aGlzLnBpZU9wYWNpdHl8fCIwLjciLHRoaXMuY2xhc3NUZXh0PXRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZD10aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemU9dGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemV8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3I9dGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVsYXRpb25Db2xvcj10aGlzLnJlbGF0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQ9dGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZHx8KHRoaXMuZGFya01vZGU/T2JqZWN0KEguZGFya2VuKSh0aGlzLnNlY29uZGFyeUNvbG9yLDMwKTp0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcn19LHtrZXk6ImNhbGN1bGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZigib2JqZWN0Ij09PUsodCkpe3ZhciBuPU9iamVjdC5rZXlzKHQpO24uZm9yRWFjaCgoZnVuY3Rpb24obil7ZVtuXT10W25dfSkpLHRoaXMudXBkYXRlQ29sb3JzKCksbi5mb3JFYWNoKChmdW5jdGlvbihuKXtlW25dPXRbbl19KSl9ZWxzZSB0aGlzLnVwZGF0ZUNvbG9ycygpfX1dKSYmSihlLnByb3RvdHlwZSxuKSxyJiZKKGUsciksdH0oKTtmdW5jdGlvbiBldCh0KXtyZXR1cm4oZXQ9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9KSh0KX1mdW5jdGlvbiBudCh0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsci5rZXkscil9fXZhciBydD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXshZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSx0aGlzLmJhY2tncm91bmQ9IiNmNGY0ZjQiLHRoaXMucHJpbWFyeUNvbG9yPSIjRUNFQ0ZGIix0aGlzLnNlY29uZGFyeUNvbG9yPU9iamVjdChILmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5zZWNvbmRhcnlDb2xvcj0iI2ZmZmZkZSIsdGhpcy50ZXJ0aWFyeUNvbG9yPU9iamVjdChILmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTE2MH0pLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPUcodGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj1HKHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPUcodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMucHJpbWFyeVRleHRDb2xvcj1PYmplY3QoSC5pbnZlcnQpKHRoaXMucHJpbWFyeUNvbG9yKSx0aGlzLnNlY29uZGFyeVRleHRDb2xvcj1PYmplY3QoSC5pbnZlcnQpKHRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMudGVydGlhcnlUZXh0Q29sb3I9T2JqZWN0KEguaW52ZXJ0KSh0aGlzLnRlcnRpYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPU9iamVjdChILmludmVydCkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj1PYmplY3QoSC5pbnZlcnQpKHRoaXMuYmFja2dyb3VuZCksdGhpcy5iYWNrZ3JvdW5kPSJ3aGl0ZSIsdGhpcy5tYWluQmtnPSIjRUNFQ0ZGIix0aGlzLnNlY29uZEJrZz0iI2ZmZmZkZSIsdGhpcy5saW5lQ29sb3I9IiMzMzMzMzMiLHRoaXMuYm9yZGVyMT0iIzkzNzBEQiIsdGhpcy5ib3JkZXIyPSIjYWFhYTMzIix0aGlzLmFycm93aGVhZENvbG9yPSIjMzMzMzMzIix0aGlzLmZvbnRGYW1pbHk9JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsdGhpcy5mb250U2l6ZT0iMTZweCIsdGhpcy5sYWJlbEJhY2tncm91bmQ9IiNlOGU4ZTgiLHRoaXMudGV4dENvbG9yPSIjMzMzIix0aGlzLm5vZGVCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubm9kZUJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQmtnPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuZGVmYXVsdExpbmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50aXRsZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JUZXh0Q29sb3I9ImJsYWNrIix0aGlzLmFjdG9yTGluZUNvbG9yPSJncmV5Iix0aGlzLnNpZ25hbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSIjNjY2Iix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iI2Y0ZjRmNCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9ImNhbGN1bGF0ZWQiLHRoaXMudGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0TGlnaHRDb2xvcix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZ3JpZENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuY3JpdEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNlY3Rpb25Ca2dDb2xvcj1PYmplY3QoSC5yZ2JhKSgxMDIsMTAyLDI1NSwuNDkpLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSIjZmZmNDAwIix0aGlzLnRhc2tCb3JkZXJDb2xvcj0iIzUzNGZiYyIsdGhpcy50YXNrQmtnQ29sb3I9IiM4YTkwZGQiLHRoaXMudGFza1RleHRMaWdodENvbG9yPSJ3aGl0ZSIsdGhpcy50YXNrVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPSJibGFjayIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSIjMDAzMTYzIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj0iIzUzNGZiYyIsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9IiNiZmM3ZmYiLHRoaXMuZ3JpZENvbG9yPSJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj0ibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9ImdyZXkiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSIjZmY4ODg4Iix0aGlzLmNyaXRCa2dDb2xvcj0icmVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSJyZWQiLHRoaXMubGFiZWxDb2xvcj0iYmxhY2siLHRoaXMuZXJyb3JCa2dDb2xvcj0iIzU1MjIyMiIsdGhpcy5lcnJvclRleHRDb2xvcj0iIzU1MjIyMiIsdGhpcy51cGRhdGVDb2xvcnMoKX12YXIgZSxuLHI7cmV0dXJuIGU9dCwobj1be2tleToidXBkYXRlQ29sb3JzIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMubm9kZUJrZz10aGlzLm1haW5Ca2csdGhpcy5ub2RlQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmNsdXN0ZXJCa2c9dGhpcy5zZWNvbmRCa2csdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuYm9yZGVyMix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy50aXRsZUNvbG9yPXRoaXMudGV4dENvbG9yLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD10aGlzLmxhYmVsQmFja2dyb3VuZCx0aGlzLmFjdG9yQm9yZGVyPU9iamVjdChILmxpZ2h0ZW4pKHRoaXMuYm9yZGVyMSwyMyksdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5sYWJlbEJveEJrZ0NvbG9yPXRoaXMuYWN0b3JCa2csdGhpcy5zaWduYWxDb2xvcj10aGlzLnRleHRDb2xvcix0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLnRleHRDb2xvcix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5ub3RlQm9yZGVyQ29sb3I9dGhpcy5ib3JkZXIyLHRoaXMubm90ZVRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0TGlnaHRDb2xvcix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3I9dGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zdGF0ZUxhYmVsQ29sb3I9dGhpcy5zdGF0ZUxhYmVsQ29sb3J8fHRoaXMuc3RhdGVCa2d8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnN0YXRlQmtnPXRoaXMuc3RhdGVCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yPXRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3J8fHRoaXMuc3RhdGVCa2csdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlQmFja2dyb3VuZHx8dGhpcy5iYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRCYWNrZ3JvdW5kPXRoaXMuYWx0QmFja2dyb3VuZHx8IiNmMGYwZjAiLHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfHx0aGlzLm1haW5Ca2csdGhpcy5jb21wb3NpdGVCb3JkZXI9dGhpcy5jb21wb3NpdGVCb3JkZXJ8fHRoaXMubm9kZUJvcmRlcix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLm5vZGVCb3JkZXIsdGhpcy5zcGVjaWFsU3RhdGVDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLmNsYXNzVGV4dD10aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj1PYmplY3QoSC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9T2JqZWN0KEguYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9T2JqZWN0KEguYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT1PYmplY3QoSC5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9T2JqZWN0KEguYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz1PYmplY3QoSC5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5waWUxPXRoaXMucGllMXx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5waWUyPXRoaXMucGllMnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnBpZTM9dGhpcy5waWUzfHxPYmplY3QoSC5hZGp1c3QpKHRoaXMudGVydGlhcnlDb2xvcix7bDotNDB9KSx0aGlzLnBpZTQ9dGhpcy5waWU0fHxPYmplY3QoSC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtsOi0xMH0pLHRoaXMucGllNT10aGlzLnBpZTV8fE9iamVjdChILmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7bDotMzB9KSx0aGlzLnBpZTY9dGhpcy5waWU2fHxPYmplY3QoSC5hZGp1c3QpKHRoaXMudGVydGlhcnlDb2xvcix7bDotMjB9KSx0aGlzLnBpZTc9dGhpcy5waWU3fHxPYmplY3QoSC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTIwfSksdGhpcy5waWU4PXRoaXMucGllOHx8T2JqZWN0KEguYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotNDB9KSx0aGlzLnBpZTk9dGhpcy5waWU5fHxPYmplY3QoSC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMCxsOi00MH0pLHRoaXMucGllMTA9dGhpcy5waWUxMHx8T2JqZWN0KEguYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi00MH0pLHRoaXMucGllMTE9dGhpcy5waWUxMXx8T2JqZWN0KEguYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotOTAsbDotNDB9KSx0aGlzLnBpZTEyPXRoaXMucGllMTJ8fE9iamVjdChILmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6LTMwfSksdGhpcy5waWVUaXRsZVRleHRTaXplPXRoaXMucGllVGl0bGVUZXh0U2l6ZXx8IjI1cHgiLHRoaXMucGllVGl0bGVUZXh0Q29sb3I9dGhpcy5waWVUaXRsZVRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZT10aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllU2VjdGlvblRleHRDb2xvcj10aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMucGllTGVnZW5kVGV4dFNpemU9dGhpcy5waWVMZWdlbmRUZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllTGVnZW5kVGV4dENvbG9yPXRoaXMucGllTGVnZW5kVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU3Ryb2tlQ29sb3I9dGhpcy5waWVTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZVN0cm9rZVdpZHRoPXRoaXMucGllU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3BhY2l0eT10aGlzLnBpZU9wYWNpdHl8fCIwLjciLHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcj10aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZWxhdGlvbkNvbG9yPXRoaXMucmVsYXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZD10aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLmxhYmVsQmFja2dyb3VuZCx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcn19LHtrZXk6ImNhbGN1bGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZigib2JqZWN0Ij09PWV0KHQpKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pKSx0aGlzLnVwZGF0ZUNvbG9ycygpLG4uZm9yRWFjaCgoZnVuY3Rpb24obil7ZVtuXT10W25dfSkpfWVsc2UgdGhpcy51cGRhdGVDb2xvcnMoKX19XSkmJm50KGUucHJvdG90eXBlLG4pLHImJm50KGUsciksdH0oKTtmdW5jdGlvbiBpdCh0KXtyZXR1cm4oaXQ9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9KSh0KX1mdW5jdGlvbiBhdCh0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsci5rZXkscil9fXZhciBvdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXshZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSx0aGlzLmJhY2tncm91bmQ9IiNmNGY0ZjQiLHRoaXMucHJpbWFyeUNvbG9yPSIjY2RlNDk4Iix0aGlzLnNlY29uZGFyeUNvbG9yPSIjY2RmZmIyIix0aGlzLmJhY2tncm91bmQ9IndoaXRlIix0aGlzLm1haW5Ca2c9IiNjZGU0OTgiLHRoaXMuc2Vjb25kQmtnPSIjY2RmZmIyIix0aGlzLmxpbmVDb2xvcj0iZ3JlZW4iLHRoaXMuYm9yZGVyMT0iIzEzNTQwYyIsdGhpcy5ib3JkZXIyPSIjNmVhYTQ5Iix0aGlzLmFycm93aGVhZENvbG9yPSJncmVlbiIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgiLHRoaXMudGVydGlhcnlDb2xvcj1PYmplY3QoSC5saWdodGVuKSgiI2NkZTQ5OCIsMTApLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPUcodGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj1HKHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPUcodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMucHJpbWFyeVRleHRDb2xvcj1PYmplY3QoSC5pbnZlcnQpKHRoaXMucHJpbWFyeUNvbG9yKSx0aGlzLnNlY29uZGFyeVRleHRDb2xvcj1PYmplY3QoSC5pbnZlcnQpKHRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMudGVydGlhcnlUZXh0Q29sb3I9T2JqZWN0KEguaW52ZXJ0KSh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5saW5lQ29sb3I9T2JqZWN0KEguaW52ZXJ0KSh0aGlzLmJhY2tncm91bmQpLHRoaXMudGV4dENvbG9yPU9iamVjdChILmludmVydCkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLm5vZGVCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubm9kZUJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQmtnPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuZGVmYXVsdExpbmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50aXRsZUNvbG9yPSIjMzMzIix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9IiNlOGU4ZTgiLHRoaXMuYWN0b3JCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JUZXh0Q29sb3I9ImJsYWNrIix0aGlzLmFjdG9yTGluZUNvbG9yPSJncmV5Iix0aGlzLnNpZ25hbENvbG9yPSIjMzMzIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iIzMzMyIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9IiMzMjY5MzIiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSIjNjY2Iix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iI2Y0ZjRmNCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9IiM2ZWFhNDkiLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSIjNmVhYTQ5Iix0aGlzLnRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrQmtnQ29sb3I9IiM0ODdlM2EiLHRoaXMudGFza1RleHRMaWdodENvbG9yPSJ3aGl0ZSIsdGhpcy50YXNrVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPSJibGFjayIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSIjMDAzMTYzIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZ3JpZENvbG9yPSJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj0ibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9ImdyZXkiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSIjZmY4ODg4Iix0aGlzLmNyaXRCa2dDb2xvcj0icmVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSJyZWQiLHRoaXMubGFiZWxDb2xvcj0iYmxhY2siLHRoaXMuZXJyb3JCa2dDb2xvcj0iIzU1MjIyMiIsdGhpcy5lcnJvclRleHRDb2xvcj0iIzU1MjIyMiJ9dmFyIGUsbixyO3JldHVybiBlPXQsKG49W3trZXk6InVwZGF0ZUNvbG9ycyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm5vZGVCa2c9dGhpcy5tYWluQmtnLHRoaXMubm9kZUJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5jbHVzdGVyQmtnPXRoaXMuc2Vjb25kQmtnLHRoaXMuY2x1c3RlckJvcmRlcj10aGlzLmJvcmRlcjIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuYWN0b3JCb3JkZXI9T2JqZWN0KEguZGFya2VuKSh0aGlzLm1haW5Ca2csMjApLHRoaXMuYWN0b3JCa2c9dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmFjdG9yQmtnLHRoaXMubGFiZWxUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLm5vdGVCb3JkZXJDb2xvcj10aGlzLmJvcmRlcjIsdGhpcy5ub3RlVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy50YXNrQm9yZGVyQ29sb3I9dGhpcy5ib3JkZXIxLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0TGlnaHRDb2xvcix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9dGhpcy50YXNrQm9yZGVyQ29sb3IsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9dGhpcy5tYWluQmtnLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yPXRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMuc3RhdGVMYWJlbENvbG9yPXRoaXMuc3RhdGVMYWJlbENvbG9yfHx0aGlzLnN0YXRlQmtnfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5zdGF0ZUJrZz10aGlzLnN0YXRlQmtnfHx0aGlzLm1haW5Ca2csdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcj10aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yfHx0aGlzLnN0YXRlQmtnLHRoaXMuY29tcG9zaXRlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZUJhY2tncm91bmR8fHRoaXMuYmFja2dyb3VuZHx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuYWx0QmFja2dyb3VuZD10aGlzLmFsdEJhY2tncm91bmR8fCIjZjBmMGYwIix0aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZHx8dGhpcy5tYWluQmtnLHRoaXMuY29tcG9zaXRlQm9yZGVyPXRoaXMuY29tcG9zaXRlQm9yZGVyfHx0aGlzLm5vZGVCb3JkZXIsdGhpcy5pbm5lckVuZEJhY2tncm91bmQ9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5zcGVjaWFsU3RhdGVDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLmNsYXNzVGV4dD10aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj1PYmplY3QoSC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9T2JqZWN0KEguYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9T2JqZWN0KEguYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT1PYmplY3QoSC5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9T2JqZWN0KEguYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz1PYmplY3QoSC5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5waWUxPXRoaXMucGllMXx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5waWUyPXRoaXMucGllMnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnBpZTM9dGhpcy5waWUzfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5waWU0PXRoaXMucGllNHx8T2JqZWN0KEguYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7bDotMzB9KSx0aGlzLnBpZTU9dGhpcy5waWU1fHxPYmplY3QoSC5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2w6LTMwfSksdGhpcy5waWU2PXRoaXMucGllNnx8T2JqZWN0KEguYWRqdXN0KSh0aGlzLnRlcnRpYXJ5Q29sb3Ise2g6NDAsbDotNDB9KSx0aGlzLnBpZTc9dGhpcy5waWU3fHxPYmplY3QoSC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTEwfSksdGhpcy5waWU4PXRoaXMucGllOHx8T2JqZWN0KEguYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotMTB9KSx0aGlzLnBpZTk9dGhpcy5waWU5fHxPYmplY3QoSC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMCxsOjB9KSx0aGlzLnBpZTEwPXRoaXMucGllMTB8fE9iamVjdChILmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotNTB9KSx0aGlzLnBpZTExPXRoaXMucGllMTF8fE9iamVjdChILmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTUwfSksdGhpcy5waWUxMj10aGlzLnBpZTEyfHxPYmplY3QoSC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMCxsOi01MH0pLHRoaXMucGllVGl0bGVUZXh0U2l6ZT10aGlzLnBpZVRpdGxlVGV4dFNpemV8fCIyNXB4Iix0aGlzLnBpZVRpdGxlVGV4dENvbG9yPXRoaXMucGllVGl0bGVUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTZWN0aW9uVGV4dFNpemU9dGhpcy5waWVTZWN0aW9uVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3I9dGhpcy5waWVTZWN0aW9uVGV4dENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnBpZUxlZ2VuZFRleHRTaXplPXRoaXMucGllTGVnZW5kVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZUxlZ2VuZFRleHRDb2xvcj10aGlzLnBpZUxlZ2VuZFRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVN0cm9rZUNvbG9yPXRoaXMucGllU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVTdHJva2VXaWR0aD10aGlzLnBpZVN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU9wYWNpdHk9dGhpcy5waWVPcGFjaXR5fHwiMC43Iix0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZD10aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemU9dGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemV8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3I9dGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVsYXRpb25Db2xvcj10aGlzLnJlbGF0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQ9dGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZHx8dGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kLHRoaXMucmVsYXRpb25MYWJlbENvbG9yPXRoaXMucmVsYXRpb25MYWJlbENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yfX0se2tleToiY2FsY3VsYXRlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCJvYmplY3QiPT09aXQodCkpe3ZhciBuPU9iamVjdC5rZXlzKHQpO24uZm9yRWFjaCgoZnVuY3Rpb24obil7ZVtuXT10W25dfSkpLHRoaXMudXBkYXRlQ29sb3JzKCksbi5mb3JFYWNoKChmdW5jdGlvbihuKXtlW25dPXRbbl19KSl9ZWxzZSB0aGlzLnVwZGF0ZUNvbG9ycygpfX1dKSYmYXQoZS5wcm90b3R5cGUsbiksciYmYXQoZSxyKSx0fSgpO2Z1bmN0aW9uIHN0KHQpe3JldHVybihzdD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0pKHQpfWZ1bmN0aW9uIGN0KHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLmtleSxyKX19dmFyIHV0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpeyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMucHJpbWFyeUNvbG9yPSIjZWVlIix0aGlzLmNvbnRyYXN0PSIjNzA3MDcwIix0aGlzLnNlY29uZGFyeUNvbG9yPU9iamVjdChILmxpZ2h0ZW4pKHRoaXMuY29udHJhc3QsNTUpLHRoaXMuYmFja2dyb3VuZD0iI2ZmZmZmZiIsdGhpcy50ZXJ0aWFyeUNvbG9yPU9iamVjdChILmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTE2MH0pLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPUcodGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj1HKHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPUcodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMucHJpbWFyeVRleHRDb2xvcj1PYmplY3QoSC5pbnZlcnQpKHRoaXMucHJpbWFyeUNvbG9yKSx0aGlzLnNlY29uZGFyeVRleHRDb2xvcj1PYmplY3QoSC5pbnZlcnQpKHRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMudGVydGlhcnlUZXh0Q29sb3I9T2JqZWN0KEguaW52ZXJ0KSh0aGlzLnRlcnRpYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPU9iamVjdChILmludmVydCkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj1PYmplY3QoSC5pbnZlcnQpKHRoaXMuYmFja2dyb3VuZCksdGhpcy5tYWluQmtnPSIjZWVlIix0aGlzLnNlY29uZEJrZz0iY2FsY3VsYXRlZCIsdGhpcy5saW5lQ29sb3I9IiM2NjYiLHRoaXMuYm9yZGVyMT0iIzk5OSIsdGhpcy5ib3JkZXIyPSJjYWxjdWxhdGVkIix0aGlzLm5vdGU9IiNmZmEiLHRoaXMudGV4dD0iIzMzMyIsdGhpcy5jcml0aWNhbD0iI2Q0MiIsdGhpcy5kb25lPSIjYmJiIix0aGlzLmFycm93aGVhZENvbG9yPSIjMzMzMzMzIix0aGlzLmZvbnRGYW1pbHk9JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsdGhpcy5mb250U2l6ZT0iMTZweCIsdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSJ3aGl0ZSIsdGhpcy5hY3RvckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvclRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxvb3BUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj0iIzY2NiIsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9IiNmNGY0ZjQiLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0id2hpdGUiLHRoaXMudGFza1RleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSIjMDAzMTYzIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZ3JpZENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5jcml0QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQ29sb3I9ImJsYWNrIix0aGlzLmVycm9yQmtnQ29sb3I9IiM1NTIyMjIiLHRoaXMuZXJyb3JUZXh0Q29sb3I9IiM1NTIyMjIifXZhciBlLG4scjtyZXR1cm4gZT10LChuPVt7a2V5OiJ1cGRhdGVDb2xvcnMiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zZWNvbmRCa2c9T2JqZWN0KEgubGlnaHRlbikodGhpcy5jb250cmFzdCw1NSksdGhpcy5ib3JkZXIyPXRoaXMuY29udHJhc3QsdGhpcy5ub2RlQmtnPXRoaXMubWFpbkJrZyx0aGlzLm5vZGVCb3JkZXI9dGhpcy5ib3JkZXIxLHRoaXMuY2x1c3RlckJrZz10aGlzLnNlY29uZEJrZyx0aGlzLmNsdXN0ZXJCb3JkZXI9dGhpcy5ib3JkZXIyLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnRpdGxlQ29sb3I9dGhpcy50ZXh0LHRoaXMuYWN0b3JCb3JkZXI9T2JqZWN0KEgubGlnaHRlbikodGhpcy5ib3JkZXIxLDIzKSx0aGlzLmFjdG9yQmtnPXRoaXMubWFpbkJrZyx0aGlzLmFjdG9yVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLmFjdG9yTGluZUNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy50ZXh0LHRoaXMuc2lnbmFsVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5hY3RvckJrZyx0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy50ZXh0LHRoaXMubm90ZUJvcmRlckNvbG9yPSIjOTk5Iix0aGlzLm5vdGVCa2dDb2xvcj0iIzY2NiIsdGhpcy5ub3RlVGV4dENvbG9yPSIjZmZmIix0aGlzLnNlY3Rpb25Ca2dDb2xvcj1PYmplY3QoSC5saWdodGVuKSh0aGlzLmNvbnRyYXN0LDMwKSx0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9T2JqZWN0KEgubGlnaHRlbikodGhpcy5jb250cmFzdCwzMCksdGhpcy50YXNrQm9yZGVyQ29sb3I9T2JqZWN0KEguZGFya2VuKSh0aGlzLmNvbnRyYXN0LDEwKSx0aGlzLnRhc2tCa2dDb2xvcj10aGlzLmNvbnRyYXN0LHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0TGlnaHRDb2xvcix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPXRoaXMudGV4dCx0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9dGhpcy50YXNrQm9yZGVyQ29sb3IsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9dGhpcy5tYWluQmtnLHRoaXMuZ3JpZENvbG9yPU9iamVjdChILmxpZ2h0ZW4pKHRoaXMuYm9yZGVyMSwzMCksdGhpcy5kb25lVGFza0JrZ0NvbG9yPXRoaXMuZG9uZSx0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5jcml0QmtnQ29sb3I9dGhpcy5jcml0aWNhbCx0aGlzLmNyaXRCb3JkZXJDb2xvcj1PYmplY3QoSC5kYXJrZW4pKHRoaXMuY3JpdEJrZ0NvbG9yLDEwKSx0aGlzLnRvZGF5TGluZUNvbG9yPXRoaXMuY3JpdEJrZ0NvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHwiIzAwMCIsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiI2Y0ZjRmNCIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLnN0YXRlQm9yZGVyPXRoaXMuc3RhdGVCb3JkZXJ8fCIjMDAwIix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPSIjMjIyIix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMuY2xhc3NUZXh0PXRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZmlsbFR5cGUyPU9iamVjdChILmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz1PYmplY3QoSC5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlND1PYmplY3QoSC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU1PU9iamVjdChILmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj1PYmplY3QoSC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuZmlsbFR5cGU3PU9iamVjdChILmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDoxMjh9KSx0aGlzLnBpZTE9dGhpcy5waWUxfHwiI0Y0RjRGNCIsdGhpcy5waWUyPXRoaXMucGllMnx8IiM1NTUiLHRoaXMucGllMz10aGlzLnBpZTN8fCIjQkJCIix0aGlzLnBpZTQ9dGhpcy5waWU0fHwiIzc3NyIsdGhpcy5waWU1PXRoaXMucGllNXx8IiM5OTkiLHRoaXMucGllNj10aGlzLnBpZTZ8fCIjREREIix0aGlzLnBpZTc9dGhpcy5waWU3fHwiI0ZGRiIsdGhpcy5waWU4PXRoaXMucGllOHx8IiNEREQiLHRoaXMucGllOT10aGlzLnBpZTl8fCIjQkJCIix0aGlzLnBpZTEwPXRoaXMucGllMTB8fCIjOTk5Iix0aGlzLnBpZTExPXRoaXMucGllMTF8fCIjNzc3Iix0aGlzLnBpZTEyPXRoaXMucGllMTJ8fCIjNTU1Iix0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPcGFjaXR5PXRoaXMucGllT3BhY2l0eXx8IjAuNyIsdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZCx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcn19LHtrZXk6ImNhbGN1bGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZigib2JqZWN0Ij09PXN0KHQpKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pKSx0aGlzLnVwZGF0ZUNvbG9ycygpLG4uZm9yRWFjaCgoZnVuY3Rpb24obil7ZVtuXT10W25dfSkpfWVsc2UgdGhpcy51cGRhdGVDb2xvcnMoKX19XSkmJmN0KGUucHJvdG90eXBlLG4pLHImJmN0KGUsciksdH0oKSxsdD17YmFzZTp7Z2V0VGhlbWVWYXJpYWJsZXM6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IFE7cmV0dXJuIGUuY2FsY3VsYXRlKHQpLGV9fSxkYXJrOntnZXRUaGVtZVZhcmlhYmxlczpmdW5jdGlvbih0KXt2YXIgZT1uZXcgdHQ7cmV0dXJuIGUuY2FsY3VsYXRlKHQpLGV9fSxkZWZhdWx0OntnZXRUaGVtZVZhcmlhYmxlczpmdW5jdGlvbih0KXt2YXIgZT1uZXcgcnQ7cmV0dXJuIGUuY2FsY3VsYXRlKHQpLGV9fSxmb3Jlc3Q6e2dldFRoZW1lVmFyaWFibGVzOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBvdDtyZXR1cm4gZS5jYWxjdWxhdGUodCksZX19LG5ldXRyYWw6e2dldFRoZW1lVmFyaWFibGVzOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyB1dDtyZXR1cm4gZS5jYWxjdWxhdGUodCksZX19fSxodD17dGhlbWU6ImRlZmF1bHQiLHRoZW1lVmFyaWFibGVzOmx0LmRlZmF1bHQuZ2V0VGhlbWVWYXJpYWJsZXMoKSx0aGVtZUNTUzp2b2lkIDAsbWF4VGV4dFNpemU6NWU0LGZvbnRGYW1pbHk6JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjsnLGxvZ0xldmVsOjUsc2VjdXJpdHlMZXZlbDoic3RyaWN0IixzdGFydE9uTG9hZDohMCxhcnJvd01hcmtlckFic29sdXRlOiExLHNlY3VyZTpbInNlY3VyZSIsInNlY3VyaXR5TGV2ZWwiLCJzdGFydE9uTG9hZCIsIm1heFRleHRTaXplIl0sZGV0ZXJtaW5pc3RpY0lkczohMSxkZXRlcm1pbmlzdGljSURTZWVkOnZvaWQgMCxmbG93Y2hhcnQ6e2RpYWdyYW1QYWRkaW5nOjgsaHRtbExhYmVsczohMCxub2RlU3BhY2luZzo1MCxyYW5rU3BhY2luZzo1MCxjdXJ2ZToiYmFzaXMiLHBhZGRpbmc6MTUsdXNlTWF4V2lkdGg6ITAsZGVmYXVsdFJlbmRlcmVyOiJkYWdyZS1kMyJ9LHNlcXVlbmNlOnthY3RpdmF0aW9uV2lkdGg6MTAsZGlhZ3JhbU1hcmdpblg6NTAsZGlhZ3JhbU1hcmdpblk6MTAsYWN0b3JNYXJnaW46NTAsd2lkdGg6MTUwLGhlaWdodDo2NSxib3hNYXJnaW46MTAsYm94VGV4dE1hcmdpbjo1LG5vdGVNYXJnaW46MTAsbWVzc2FnZU1hcmdpbjozNSxtZXNzYWdlQWxpZ246ImNlbnRlciIsbWlycm9yQWN0b3JzOiEwLGJvdHRvbU1hcmdpbkFkajoxLHVzZU1heFdpZHRoOiEwLHJpZ2h0QW5nbGVzOiExLHNob3dTZXF1ZW5jZU51bWJlcnM6ITEsYWN0b3JGb250U2l6ZToxNCxhY3RvckZvbnRGYW1pbHk6JyJPcGVuLVNhbnMiLCAic2Fucy1zZXJpZiInLGFjdG9yRm9udFdlaWdodDo0MDAsbm90ZUZvbnRTaXplOjE0LG5vdGVGb250RmFtaWx5OicidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLG5vdGVGb250V2VpZ2h0OjQwMCxub3RlQWxpZ246ImNlbnRlciIsbWVzc2FnZUZvbnRTaXplOjE2LG1lc3NhZ2VGb250RmFtaWx5OicidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLG1lc3NhZ2VGb250V2VpZ2h0OjQwMCx3cmFwOiExLHdyYXBQYWRkaW5nOjEwLGxhYmVsQm94V2lkdGg6NTAsbGFiZWxCb3hIZWlnaHQ6MjAsbWVzc2FnZUZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLm1lc3NhZ2VGb250RmFtaWx5LGZvbnRTaXplOnRoaXMubWVzc2FnZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5tZXNzYWdlRm9udFdlaWdodH19LG5vdGVGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5ub3RlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLm5vdGVGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMubm90ZUZvbnRXZWlnaHR9fSxhY3RvckZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmFjdG9yRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmFjdG9yRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmFjdG9yRm9udFdlaWdodH19fSxnYW50dDp7dGl0bGVUb3BNYXJnaW46MjUsYmFySGVpZ2h0OjIwLGJhckdhcDo0LHRvcFBhZGRpbmc6NTAscmlnaHRQYWRkaW5nOjc1LGxlZnRQYWRkaW5nOjc1LGdyaWRMaW5lU3RhcnRQYWRkaW5nOjM1LGZvbnRTaXplOjExLHNlY3Rpb25Gb250U2l6ZToxMSxudW1iZXJTZWN0aW9uU3R5bGVzOjQsYXhpc0Zvcm1hdDoiJVktJW0tJWQiLHVzZU1heFdpZHRoOiEwLHRvcEF4aXM6ITEsdXNlV2lkdGg6dm9pZCAwfSxqb3VybmV5OntkaWFncmFtTWFyZ2luWDo1MCxkaWFncmFtTWFyZ2luWToxMCxsZWZ0TWFyZ2luOjE1MCx3aWR0aDoxNTAsaGVpZ2h0OjUwLGJveE1hcmdpbjoxMCxib3hUZXh0TWFyZ2luOjUsbm90ZU1hcmdpbjoxMCxtZXNzYWdlTWFyZ2luOjM1LG1lc3NhZ2VBbGlnbjoiY2VudGVyIixib3R0b21NYXJnaW5BZGo6MSx1c2VNYXhXaWR0aDohMCxyaWdodEFuZ2xlczohMSx0YXNrRm9udFNpemU6MTQsdGFza0ZvbnRGYW1pbHk6JyJPcGVuLVNhbnMiLCAic2Fucy1zZXJpZiInLHRhc2tNYXJnaW46NTAsYWN0aXZhdGlvbldpZHRoOjEwLHRleHRQbGFjZW1lbnQ6ImZvIixhY3RvckNvbG91cnM6WyIjOEZCQzhGIiwiIzdDRkMwMCIsIiMwMEZGRkYiLCIjMjBCMkFBIiwiI0IwRTBFNiIsIiNGRkZGRTAiXSxzZWN0aW9uRmlsbHM6WyIjMTkxOTcwIiwiIzhCMDA4QiIsIiM0QjAwODIiLCIjMkY0RjRGIiwiIzgwMDAwMCIsIiM4QjQ1MTMiLCIjMDAwMDhCIl0sc2VjdGlvbkNvbG91cnM6WyIjZmZmIl19LGNsYXNzOnthcnJvd01hcmtlckFic29sdXRlOiExLHVzZU1heFdpZHRoOiEwLGRlZmF1bHRSZW5kZXJlcjoiZGFncmUtZDMifSxnaXQ6e2Fycm93TWFya2VyQWJzb2x1dGU6ITEsdXNlV2lkdGg6dm9pZCAwLHVzZU1heFdpZHRoOiEwfSxzdGF0ZTp7ZGl2aWRlck1hcmdpbjoxMCxzaXplVW5pdDo1LHBhZGRpbmc6OCx0ZXh0SGVpZ2h0OjEwLHRpdGxlU2hpZnQ6LTE1LG5vdGVNYXJnaW46MTAsZm9ya1dpZHRoOjcwLGZvcmtIZWlnaHQ6NyxtaW5pUGFkZGluZzoyLGZvbnRTaXplRmFjdG9yOjUuMDIsZm9udFNpemU6MjQsbGFiZWxIZWlnaHQ6MTYsZWRnZUxlbmd0aEZhY3RvcjoiMjAiLGNvbXBvc2l0VGl0bGVTaXplOjM1LHJhZGl1czo1LHVzZU1heFdpZHRoOiEwLGRlZmF1bHRSZW5kZXJlcjoiZGFncmUtZDMifSxlcjp7ZGlhZ3JhbVBhZGRpbmc6MjAsbGF5b3V0RGlyZWN0aW9uOiJUQiIsbWluRW50aXR5V2lkdGg6MTAwLG1pbkVudGl0eUhlaWdodDo3NSxlbnRpdHlQYWRkaW5nOjE1LHN0cm9rZToiZ3JheSIsZmlsbDoiaG9uZXlkZXciLGZvbnRTaXplOjEyLHVzZU1heFdpZHRoOiEwfSxwaWU6e3VzZVdpZHRoOnZvaWQgMCx1c2VNYXhXaWR0aDohMH0scmVxdWlyZW1lbnQ6e3VzZVdpZHRoOnZvaWQgMCx1c2VNYXhXaWR0aDohMCxyZWN0X2ZpbGw6IiNmOWY5ZjkiLHRleHRfY29sb3I6IiMzMzMiLHJlY3RfYm9yZGVyX3NpemU6IjAuNXB4IixyZWN0X2JvcmRlcl9jb2xvcjoiI2JiYiIscmVjdF9taW5fd2lkdGg6MjAwLHJlY3RfbWluX2hlaWdodDoyMDAsZm9udFNpemU6MTQscmVjdF9wYWRkaW5nOjEwLGxpbmVfaGVpZ2h0OjIwfX07aHQuY2xhc3MuYXJyb3dNYXJrZXJBYnNvbHV0ZT1odC5hcnJvd01hcmtlckFic29sdXRlLGh0LmdpdC5hcnJvd01hcmtlckFic29sdXRlPWh0LmFycm93TWFya2VyQWJzb2x1dGU7dmFyIGZ0PWh0O2Z1bmN0aW9uIGR0KHQpe3JldHVybihkdD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0pKHQpfXZhciBwdCx5dD1PYmplY3QuZnJlZXplKGZ0KSxndD1QKHt9LHl0KSx2dD1bXSxtdD1QKHt9LHl0KSxidD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj1QKHt9LHQpLHI9e30saT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgYT1lW2ldO2t0KGEpLHI9UChyLGEpfWlmKG49UChuLHIpLHIudGhlbWUpe3ZhciBvPVAoe30scHQpLHM9UChvLnRoZW1lVmFyaWFibGVzfHx7fSxyLnRoZW1lVmFyaWFibGVzKTtuLnRoZW1lVmFyaWFibGVzPWx0W24udGhlbWVdLmdldFRoZW1lVmFyaWFibGVzKHMpfXJldHVybiBtdD1uLG59LHh0PWZ1bmN0aW9uKCl7cmV0dXJuIFAoe30sZ3QpfSxfdD1mdW5jdGlvbigpe3JldHVybiBQKHt9LG10KX0sa3Q9ZnVuY3Rpb24gdChlKXtPYmplY3Qua2V5cyhndC5zZWN1cmUpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PWVbZ3Quc2VjdXJlW3RdXSYmKGMuZGVidWcoIkRlbmllZCBhdHRlbXB0IHRvIG1vZGlmeSBhIHNlY3VyZSBrZXkgIi5jb25jYXQoZ3Quc2VjdXJlW3RdKSxlW2d0LnNlY3VyZVt0XV0pLGRlbGV0ZSBlW2d0LnNlY3VyZVt0XV0pfSkpLE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKHQpezA9PT10LmluZGV4T2YoIl9fIikmJmRlbGV0ZSBlW3RdfSkpLE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKG4peyJzdHJpbmciPT10eXBlb2YgZVtuXSYmKGVbbl0uaW5kZXhPZigiPCIpPi0xfHxlW25dLmluZGV4T2YoIj4iKT4tMXx8ZVtuXS5pbmRleE9mKCJ1cmwoZGF0YToiKT4tMSkmJmRlbGV0ZSBlW25dLCJvYmplY3QiPT09ZHQoZVtuXSkmJnQoZVtuXSl9KSl9LHd0PWZ1bmN0aW9uKHQpe3QuZm9udEZhbWlseSYmKHQudGhlbWVWYXJpYWJsZXMmJnQudGhlbWVWYXJpYWJsZXMuZm9udEZhbWlseXx8KHQudGhlbWVWYXJpYWJsZXM9e2ZvbnRGYW1pbHk6dC5mb250RmFtaWx5fSkpLHZ0LnB1c2godCksYnQoZ3QsdnQpfSxFdD1mdW5jdGlvbigpe2J0KGd0LHZ0PVtdKX07ZnVuY3Rpb24gVHQodCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgZT0wLG49bmV3IEFycmF5KHQubGVuZ3RoKTtlPHQubGVuZ3RoO2UrKyluW2VdPXRbZV07cmV0dXJuIG59fSh0KXx8ZnVuY3Rpb24odCl7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdCh0KXx8IltvYmplY3QgQXJndW1lbnRzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkpcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9KCl9dmFyIEN0PVtdLFN0PXt9LEF0PTAsTXQ9W10sT3Q9ZnVuY3Rpb24odCl7dmFyIGU9IiIsbj10O2lmKHQuaW5kZXhPZigifiIpPjApe3ZhciByPXQuc3BsaXQoIn4iKTtuPXJbMF0sZT1yWzFdfXJldHVybntjbGFzc05hbWU6bix0eXBlOmV9fSxCdD1mdW5jdGlvbih0KXt2YXIgZT1PdCh0KTt2b2lkIDA9PT1TdFtlLmNsYXNzTmFtZV0mJihTdFtlLmNsYXNzTmFtZV09e2lkOmUuY2xhc3NOYW1lLHR5cGU6ZS50eXBlLGNzc0NsYXNzZXM6W10sbWV0aG9kczpbXSxtZW1iZXJzOltdLGFubm90YXRpb25zOltdLGRvbUlkOiJjbGFzc2lkLSIrZS5jbGFzc05hbWUrIi0iK0F0fSxBdCsrKX0sTnQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPU9iamVjdC5rZXlzKFN0KSxuPTA7bjxlLmxlbmd0aDtuKyspaWYoU3RbZVtuXV0uaWQ9PT10KXJldHVybiBTdFtlW25dXS5kb21JZH0sRHQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1PdCh0KS5jbGFzc05hbWUscj1TdFtuXTtpZigic3RyaW5nIj09dHlwZW9mIGUpe3ZhciBpPWUudHJpbSgpO2kuc3RhcnRzV2l0aCgiPDwiKSYmaS5lbmRzV2l0aCgiPj4iKT9yLmFubm90YXRpb25zLnB1c2goaS5zdWJzdHJpbmcoMixpLmxlbmd0aC0yKSk6aS5pbmRleE9mKCIpIik+MD9yLm1ldGhvZHMucHVzaChpKTppJiZyLm1lbWJlcnMucHVzaChpKX19LEx0PWZ1bmN0aW9uKHQsZSl7dC5zcGxpdCgiLCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPXQ7dFswXS5tYXRjaCgvXGQvKSYmKG49ImNsYXNzaWQtIituKSx2b2lkIDAhPT1TdFtuXSYmU3Rbbl0uY3NzQ2xhc3Nlcy5wdXNoKGUpfSkpfSxJdD1mdW5jdGlvbih0LGUsbil7dmFyIHI9X3QoKSxpPXQsYT1OdChpKTtpZigibG9vc2UiPT09ci5zZWN1cml0eUxldmVsJiZ2b2lkIDAhPT1lJiZ2b2lkIDAhPT1TdFtpXSl7dmFyIG89W107aWYoInN0cmluZyI9PXR5cGVvZiBuKXtvPW4uc3BsaXQoLywoPz0oPzooPzpbXiJdKiIpezJ9KSpbXiJdKiQpLyk7Zm9yKHZhciBzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBjPW9bc10udHJpbSgpOyciJz09PWMuY2hhckF0KDApJiYnIic9PT1jLmNoYXJBdChjLmxlbmd0aC0xKSYmKGM9Yy5zdWJzdHIoMSxjLmxlbmd0aC0yKSksb1tzXT1jfX0wPT09by5sZW5ndGgmJm8ucHVzaChhKSxNdC5wdXNoKChmdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tpZD0iJy5jb25jYXQoYSwnIl0nKSk7bnVsbCE9PXQmJnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLChmdW5jdGlvbigpe1YucnVuRnVuYy5hcHBseShWLFtlXS5jb25jYXQoVHQobykpKX0pLCExKX0pKX19LFJ0PXtBR0dSRUdBVElPTjowLEVYVEVOU0lPTjoxLENPTVBPU0lUSU9OOjIsREVQRU5ERU5DWTozfSxGdD1mdW5jdGlvbih0KXt2YXIgZT1PYmplY3QoaC5zZWxlY3QpKCIubWVybWFpZFRvb2x0aXAiKTtudWxsPT09KGUuX2dyb3Vwc3x8ZSlbMF1bMF0mJihlPU9iamVjdChoLnNlbGVjdCkoImJvZHkiKS5hcHBlbmQoImRpdiIpLmF0dHIoImNsYXNzIiwibWVybWFpZFRvb2x0aXAiKS5zdHlsZSgib3BhY2l0eSIsMCkpLE9iamVjdChoLnNlbGVjdCkodCkuc2VsZWN0KCJzdmciKS5zZWxlY3RBbGwoImcubm9kZSIpLm9uKCJtb3VzZW92ZXIiLChmdW5jdGlvbigpe3ZhciB0PU9iamVjdChoLnNlbGVjdCkodGhpcyk7aWYobnVsbCE9PXQuYXR0cigidGl0bGUiKSl7dmFyIG49dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlLnRyYW5zaXRpb24oKS5kdXJhdGlvbigyMDApLnN0eWxlKCJvcGFjaXR5IiwiLjkiKSxlLmh0bWwodC5hdHRyKCJ0aXRsZSIpKS5zdHlsZSgibGVmdCIsd2luZG93LnNjcm9sbFgrbi5sZWZ0KyhuLnJpZ2h0LW4ubGVmdCkvMisicHgiKS5zdHlsZSgidG9wIix3aW5kb3cuc2Nyb2xsWStuLnRvcC0xNCtkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCsicHgiKSx0LmNsYXNzZWQoImhvdmVyIiwhMCl9fSkpLm9uKCJtb3VzZW91dCIsKGZ1bmN0aW9uKCl7ZS50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKS5zdHlsZSgib3BhY2l0eSIsMCksT2JqZWN0KGguc2VsZWN0KSh0aGlzKS5jbGFzc2VkKCJob3ZlciIsITEpfSkpfTtNdC5wdXNoKEZ0KTt2YXIgUHQ9e3BhcnNlRGlyZWN0aXZlOmZ1bmN0aW9uKHQsZSxuKXt2cy5wYXJzZURpcmVjdGl2ZSh0aGlzLHQsZSxuKX0sZ2V0Q29uZmlnOmZ1bmN0aW9uKCl7cmV0dXJuIF90KCkuY2xhc3N9LGFkZENsYXNzOkJ0LGJpbmRGdW5jdGlvbnM6ZnVuY3Rpb24odCl7TXQuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZSh0KX0pKX0sY2xlYXI6ZnVuY3Rpb24oKXtDdD1bXSxTdD17fSwoTXQ9W10pLnB1c2goRnQpfSxnZXRDbGFzczpmdW5jdGlvbih0KXtyZXR1cm4gU3RbdF19LGdldENsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm4gU3R9LGFkZEFubm90YXRpb246ZnVuY3Rpb24odCxlKXt2YXIgbj1PdCh0KS5jbGFzc05hbWU7U3Rbbl0uYW5ub3RhdGlvbnMucHVzaChlKX0sZ2V0UmVsYXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIEN0fSxhZGRSZWxhdGlvbjpmdW5jdGlvbih0KXtjLmRlYnVnKCJBZGRpbmcgcmVsYXRpb246ICIrSlNPTi5zdHJpbmdpZnkodCkpLEJ0KHQuaWQxKSxCdCh0LmlkMiksdC5pZDE9T3QodC5pZDEpLmNsYXNzTmFtZSx0LmlkMj1PdCh0LmlkMikuY2xhc3NOYW1lLEN0LnB1c2godCl9LGFkZE1lbWJlcjpEdCxhZGRNZW1iZXJzOmZ1bmN0aW9uKHQsZSl7QXJyYXkuaXNBcnJheShlKSYmKGUucmV2ZXJzZSgpLGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIER0KHQsZSl9KSkpfSxjbGVhbnVwTGFiZWw6ZnVuY3Rpb24odCl7cmV0dXJuIjoiPT09dC5zdWJzdHJpbmcoMCwxKT90LnN1YnN0cigxKS50cmltKCk6dC50cmltKCl9LGxpbmVUeXBlOntMSU5FOjAsRE9UVEVEX0xJTkU6MX0scmVsYXRpb25UeXBlOlJ0LHNldENsaWNrRXZlbnQ6ZnVuY3Rpb24odCxlLG4pe3Quc3BsaXQoIiwiKS5mb3JFYWNoKChmdW5jdGlvbih0KXtJdCh0LGUsbiksU3RbdF0uaGF2ZUNhbGxiYWNrPSEwfSkpLEx0KHQsImNsaWNrYWJsZSIpfSxzZXRDc3NDbGFzczpMdCxzZXRMaW5rOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1fdCgpO3Quc3BsaXQoIiwiKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgaT10O3RbMF0ubWF0Y2goL1xkLykmJihpPSJjbGFzc2lkLSIraSksdm9pZCAwIT09U3RbaV0mJihTdFtpXS5saW5rPVYuZm9ybWF0VXJsKGUsciksU3RbaV0ubGlua1RhcmdldD0ic3RyaW5nIj09dHlwZW9mIG4/bjoiX2JsYW5rIil9KSksTHQodCwiY2xpY2thYmxlIil9LHNldFRvb2x0aXA6ZnVuY3Rpb24odCxlKXt2YXIgbj1fdCgpO3Quc3BsaXQoIiwiKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2b2lkIDAhPT1lJiYoU3RbdF0udG9vbHRpcD1fLnNhbml0aXplVGV4dChlLG4pKX0pKX0sbG9va1VwRG9tSWQ6TnR9LGp0PW4oOSksWXQ9bi5uKGp0KSx6dD1uKDMpLFV0PW4ubih6dCksJHQ9bigxNSkscXQ9bi5uKCR0KSxXdD0wLFZ0PWZ1bmN0aW9uKHQpe3ZhciBlPXQubWF0Y2goLyhcK3wtfH58Iyk/KFx3Kykoflx3K358XFtcXSk/XHMrKFx3KykvKSxuPXQubWF0Y2goL14oWyt8XC18fnwjXSk/KFx3KykgKlwoICooLiopXCkgKihcKnxcJCk/ICooXHcqW358W1xdXSpccypcdyp+PykkLyk7cmV0dXJuIGUmJiFuP0h0KGUpOm4/R3Qobik6WHQodCl9LEh0PWZ1bmN0aW9uKHQpe3ZhciBlPSIiO3RyeXtlPSh0WzFdP3RbMV0udHJpbSgpOiIiKSsodFsyXT90WzJdLnRyaW0oKToiIikrKHRbM10/UXQodFszXS50cmltKCkpOiIiKSsiICIrKHRbNF0/dFs0XS50cmltKCk6IiIpfWNhdGNoKG4pe2U9dH1yZXR1cm57ZGlzcGxheVRleHQ6ZSxjc3NTdHlsZToiIn19LEd0PWZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49IiI7dHJ5e3ZhciByPXRbMV0/dFsxXS50cmltKCk6IiIsaT10WzJdP3RbMl0udHJpbSgpOiIiLGE9dFszXT9RdCh0WzNdLnRyaW0oKSk6IiIsbz10WzRdP3RbNF0udHJpbSgpOiIiO249citpKyIoIithKyIpIisodFs1XT8iIDogIitRdCh0WzVdKS50cmltKCk6IiIpLGU9S3Qobyl9Y2F0Y2goZSl7bj10fXJldHVybntkaXNwbGF5VGV4dDpuLGNzc1N0eWxlOmV9fSxYdD1mdW5jdGlvbih0KXt2YXIgZT0iIixuPSIiLHI9IiIsaT10LmluZGV4T2YoIigiKSxhPXQuaW5kZXhPZigiKSIpO2lmKGk+MSYmYT5pJiZhPD10Lmxlbmd0aCl7dmFyIG89IiIscz0iIixjPXQuc3Vic3RyaW5nKDAsMSk7Yy5tYXRjaCgvXHcvKT9zPXQuc3Vic3RyaW5nKDAsaSkudHJpbSgpOihjLm1hdGNoKC9cK3wtfH58Iy8pJiYobz1jKSxzPXQuc3Vic3RyaW5nKDEsaSkudHJpbSgpKTt2YXIgdT10LnN1YnN0cmluZyhpKzEsYSksbD10LnN1YnN0cmluZyhhKzEsMSk7bj1LdChsKSxlPW8rcysiKCIrUXQodS50cmltKCkpKyIpIixhPCIiLmxlbmd0aCYmIiIhPT0ocj10LnN1YnN0cmluZyhhKzIpLnRyaW0oKSkmJihyPSIgOiAiK1F0KHIpKX1lbHNlIGU9UXQodCk7cmV0dXJue2Rpc3BsYXlUZXh0OmUsY3NzU3R5bGU6bn19LFp0PWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPVZ0KGUpLGE9dC5hcHBlbmQoInRzcGFuIikuYXR0cigieCIsci5wYWRkaW5nKS50ZXh0KGkuZGlzcGxheVRleHQpOyIiIT09aS5jc3NTdHlsZSYmYS5hdHRyKCJzdHlsZSIsaS5jc3NTdHlsZSksbnx8YS5hdHRyKCJkeSIsci50ZXh0SGVpZ2h0KX0sUXQ9ZnVuY3Rpb24gdChlKXt2YXIgbj1lO3JldHVybi0xIT1lLmluZGV4T2YoIn4iKT90KG49KG49bi5yZXBsYWNlKCJ+IiwiPCIpKS5yZXBsYWNlKCJ+IiwiPiIpKTpufSxLdD1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSIqIjpyZXR1cm4iZm9udC1zdHlsZTppdGFsaWM7IjtjYXNlIiQiOnJldHVybiJ0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOyI7ZGVmYXVsdDpyZXR1cm4iIn19LEp0PWZ1bmN0aW9uKHQsZSxuKXtjLmluZm8oIlJlbmRlcmluZyBjbGFzcyAiK2UpO3ZhciByLGk9ZS5pZCxhPXtpZDppLGxhYmVsOmUuaWQsd2lkdGg6MCxoZWlnaHQ6MH0sbz10LmFwcGVuZCgiZyIpLmF0dHIoImlkIixOdChpKSkuYXR0cigiY2xhc3MiLCJjbGFzc0dyb3VwIik7cj1lLmxpbms/by5hcHBlbmQoInN2ZzphIikuYXR0cigieGxpbms6aHJlZiIsZS5saW5rKS5hdHRyKCJ0YXJnZXQiLGUubGlua1RhcmdldCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieSIsbi50ZXh0SGVpZ2h0K24ucGFkZGluZykuYXR0cigieCIsMCk6by5hcHBlbmQoInRleHQiKS5hdHRyKCJ5IixuLnRleHRIZWlnaHQrbi5wYWRkaW5nKS5hdHRyKCJ4IiwwKTt2YXIgcz0hMDtlLmFubm90YXRpb25zLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXIuYXBwZW5kKCJ0c3BhbiIpLnRleHQoIsKrIit0KyLCuyIpO3N8fGUuYXR0cigiZHkiLG4udGV4dEhlaWdodCkscz0hMX0pKTt2YXIgdT1lLmlkO3ZvaWQgMCE9PWUudHlwZSYmIiIhPT1lLnR5cGUmJih1Kz0iPCIrZS50eXBlKyI+Iik7dmFyIGw9ci5hcHBlbmQoInRzcGFuIikudGV4dCh1KS5hdHRyKCJjbGFzcyIsInRpdGxlIik7c3x8bC5hdHRyKCJkeSIsbi50ZXh0SGVpZ2h0KTt2YXIgaD1yLm5vZGUoKS5nZXRCQm94KCkuaGVpZ2h0LGY9by5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieTEiLG4ucGFkZGluZytoK24uZGl2aWRlck1hcmdpbi8yKS5hdHRyKCJ5MiIsbi5wYWRkaW5nK2grbi5kaXZpZGVyTWFyZ2luLzIpLGQ9by5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixuLnBhZGRpbmcpLmF0dHIoInkiLGgrbi5kaXZpZGVyTWFyZ2luK24udGV4dEhlaWdodCkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY2xhc3MiLCJjbGFzc1RleHQiKTtzPSEwLGUubWVtYmVycy5mb3JFYWNoKChmdW5jdGlvbih0KXtadChkLHQscyxuKSxzPSExfSkpO3ZhciBwPWQubm9kZSgpLmdldEJCb3goKSx5PW8uYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLDApLmF0dHIoInkxIixuLnBhZGRpbmcraCtuLmRpdmlkZXJNYXJnaW4rcC5oZWlnaHQpLmF0dHIoInkyIixuLnBhZGRpbmcraCtuLmRpdmlkZXJNYXJnaW4rcC5oZWlnaHQpLGc9by5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixuLnBhZGRpbmcpLmF0dHIoInkiLGgrMipuLmRpdmlkZXJNYXJnaW4rcC5oZWlnaHQrbi50ZXh0SGVpZ2h0KS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjbGFzcyIsImNsYXNzVGV4dCIpO3M9ITAsZS5tZXRob2RzLmZvckVhY2goKGZ1bmN0aW9uKHQpe1p0KGcsdCxzLG4pLHM9ITF9KSk7dmFyIHY9by5ub2RlKCkuZ2V0QkJveCgpLG09IiAiO2UuY3NzQ2xhc3Nlcy5sZW5ndGg+MCYmKG0rPWUuY3NzQ2xhc3Nlcy5qb2luKCIgIikpO3ZhciBiPW8uaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigid2lkdGgiLHYud2lkdGgrMipuLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsdi5oZWlnaHQrbi5wYWRkaW5nKy41Km4uZGl2aWRlck1hcmdpbikuYXR0cigiY2xhc3MiLG0pLm5vZGUoKS5nZXRCQm94KCkud2lkdGg7cmV0dXJuIHIubm9kZSgpLmNoaWxkTm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5zZXRBdHRyaWJ1dGUoIngiLChiLXQuZ2V0QkJveCgpLndpZHRoKS8yKX0pKSxlLnRvb2x0aXAmJnIuaW5zZXJ0KCJ0aXRsZSIpLnRleHQoZS50b29sdGlwKSxmLmF0dHIoIngyIixiKSx5LmF0dHIoIngyIixiKSxhLndpZHRoPWIsYS5oZWlnaHQ9di5oZWlnaHQrbi5wYWRkaW5nKy41Km4uZGl2aWRlck1hcmdpbixhfSx0ZT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSBSdC5BR0dSRUdBVElPTjpyZXR1cm4iYWdncmVnYXRpb24iO2Nhc2UgUnQuRVhURU5TSU9OOnJldHVybiJleHRlbnNpb24iO2Nhc2UgUnQuQ09NUE9TSVRJT046cmV0dXJuImNvbXBvc2l0aW9uIjtjYXNlIFJ0LkRFUEVOREVOQ1k6cmV0dXJuImRlcGVuZGVuY3kifX07ZS5wb2ludHM9ZS5wb2ludHMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4hTnVtYmVyLmlzTmFOKHQueSl9KSk7dmFyIGEsbyxzPWUucG9pbnRzLHU9T2JqZWN0KGgubGluZSkoKS54KChmdW5jdGlvbih0KXtyZXR1cm4gdC54fSkpLnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KSkuY3VydmUoaC5jdXJ2ZUJhc2lzKSxsPXQuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsdShzKSkuYXR0cigiaWQiLCJlZGdlIitXdCkuYXR0cigiY2xhc3MiLCJyZWxhdGlvbiIpLGY9IiI7ci5hcnJvd01hcmtlckFic29sdXRlJiYoZj0oZj0oZj13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCkucmVwbGFjZSgvXCgvZywiXFwoIikpLnJlcGxhY2UoL1wpL2csIlxcKSIpKSwxPT1uLnJlbGF0aW9uLmxpbmVUeXBlJiZsLmF0dHIoImNsYXNzIiwicmVsYXRpb24gZGFzaGVkLWxpbmUiKSwibm9uZSIhPT1uLnJlbGF0aW9uLnR5cGUxJiZsLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK2YrIiMiK2kobi5yZWxhdGlvbi50eXBlMSkrIlN0YXJ0KSIpLCJub25lIiE9PW4ucmVsYXRpb24udHlwZTImJmwuYXR0cigibWFya2VyLWVuZCIsInVybCgiK2YrIiMiK2kobi5yZWxhdGlvbi50eXBlMikrIkVuZCkiKTt2YXIgZCxwLHksZyx2PWUucG9pbnRzLmxlbmd0aCxtPVYuY2FsY0xhYmVsUG9zaXRpb24oZS5wb2ludHMpO2lmKGE9bS54LG89bS55LHYlMiE9MCYmdj4xKXt2YXIgYj1WLmNhbGNDYXJkaW5hbGl0eVBvc2l0aW9uKCJub25lIiE9PW4ucmVsYXRpb24udHlwZTEsZS5wb2ludHMsZS5wb2ludHNbMF0pLHg9Vi5jYWxjQ2FyZGluYWxpdHlQb3NpdGlvbigibm9uZSIhPT1uLnJlbGF0aW9uLnR5cGUyLGUucG9pbnRzLGUucG9pbnRzW3YtMV0pO2MuZGVidWcoImNhcmRpbmFsaXR5XzFfcG9pbnQgIitKU09OLnN0cmluZ2lmeShiKSksYy5kZWJ1ZygiY2FyZGluYWxpdHlfMl9wb2ludCAiK0pTT04uc3RyaW5naWZ5KHgpKSxkPWIueCxwPWIueSx5PXgueCxnPXgueX1pZih2b2lkIDAhPT1uLnRpdGxlKXt2YXIgXz10LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiY2xhc3NMYWJlbCIpLGs9Xy5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuYXR0cigieCIsYSkuYXR0cigieSIsbykuYXR0cigiZmlsbCIsInJlZCIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChuLnRpdGxlKTt3aW5kb3cubGFiZWw9azt2YXIgdz1rLm5vZGUoKS5nZXRCQm94KCk7Xy5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJjbGFzcyIsImJveCIpLmF0dHIoIngiLHcueC1yLnBhZGRpbmcvMikuYXR0cigieSIsdy55LXIucGFkZGluZy8yKS5hdHRyKCJ3aWR0aCIsdy53aWR0aCtyLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsdy5oZWlnaHQrci5wYWRkaW5nKX0oYy5pbmZvKCJSZW5kZXJpbmcgcmVsYXRpb24gIitKU09OLnN0cmluZ2lmeShuKSksdm9pZCAwIT09bi5yZWxhdGlvblRpdGxlMSYmIm5vbmUiIT09bi5yZWxhdGlvblRpdGxlMSkmJnQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjYXJkaW5hbGl0eSIpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwidHlwZTEiKS5hdHRyKCJ4IixkKS5hdHRyKCJ5IixwKS5hdHRyKCJmaWxsIiwiYmxhY2siKS5hdHRyKCJmb250LXNpemUiLCI2IikudGV4dChuLnJlbGF0aW9uVGl0bGUxKTt2b2lkIDAhPT1uLnJlbGF0aW9uVGl0bGUyJiYibm9uZSIhPT1uLnJlbGF0aW9uVGl0bGUyJiZ0LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiY2FyZGluYWxpdHkiKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInR5cGUyIikuYXR0cigieCIseSkuYXR0cigieSIsZykuYXR0cigiZmlsbCIsImJsYWNrIikuYXR0cigiZm9udC1zaXplIiwiNiIpLnRleHQobi5yZWxhdGlvblRpdGxlMik7V3QrK307JHQucGFyc2VyLnl5PVB0O3ZhciBlZT17fSxuZT17ZGl2aWRlck1hcmdpbjoxMCxwYWRkaW5nOjUsdGV4dEhlaWdodDoxMH0scmU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPU9iamVjdC5rZXlzKGVlKSxuPTA7bjxlLmxlbmd0aDtuKyspaWYoZWVbZVtuXV0ubGFiZWw9PT10KXJldHVybiBlW25dfSxpZT1mdW5jdGlvbih0KXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihlKXtuZVtlXT10W2VdfSkpfSxhZT1mdW5jdGlvbih0LGUpe2VlPXt9LCR0LnBhcnNlci55eS5jbGVhcigpLCR0LnBhcnNlci5wYXJzZSh0KSxjLmluZm8oIlJlbmRlcmluZyBkaWFncmFtICIrdCk7dmFyIG4scj1PYmplY3QoaC5zZWxlY3QpKCJbaWQ9JyIuY29uY2F0KGUsIiddIikpO3IuYXR0cigieG1sbnM6eGxpbmsiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiksKG49cikuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImV4dGVuc2lvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJleHRlbnNpb24iKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsNyBMMTgsMTMgViAxIFoiKSxuLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJleHRlbnNpb25FbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIFYgMTMgTDE4LDcgWiIpLG4uYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImNvbXBvc2l0aW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsImV4dGVuc2lvbiIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLG4uYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImNvbXBvc2l0aW9uRW5kIikuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSxuLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhZ2dyZWdhdGlvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJleHRlbnNpb24iKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSxuLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhZ2dyZWdhdGlvbkVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksbi5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZGVwZW5kZW5jeVN0YXJ0IikuYXR0cigiY2xhc3MiLCJleHRlbnNpb24iKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDUsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLG4uYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImRlcGVuZGVuY3lFbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMTQsNyBMOSwxIFoiKTt2YXIgaT1uZXcgVXQuYS5HcmFwaCh7bXVsdGlncmFwaDohMH0pO2kuc2V0R3JhcGgoe2lzTXVsdGlHcmFwaDohMH0pLGkuc2V0RGVmYXVsdEVkZ2VMYWJlbCgoZnVuY3Rpb24oKXtyZXR1cm57fX0pKTtmb3IodmFyIGE9UHQuZ2V0Q2xhc3NlcygpLG89T2JqZWN0LmtleXMoYSkscz0wO3M8by5sZW5ndGg7cysrKXt2YXIgdT1hW29bc11dLGw9SnQocix1LG5lKTtlZVtsLmlkXT1sLGkuc2V0Tm9kZShsLmlkLGwpLGMuaW5mbygiT3JnIGhlaWdodDogIitsLmhlaWdodCl9UHQuZ2V0UmVsYXRpb25zKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7Yy5pbmZvKCJ0am9obyIrcmUodC5pZDEpK3JlKHQuaWQyKStKU09OLnN0cmluZ2lmeSh0KSksaS5zZXRFZGdlKHJlKHQuaWQxKSxyZSh0LmlkMikse3JlbGF0aW9uOnR9LHQudGl0bGV8fCJERUZBVUxUIil9KSksWXQuYS5sYXlvdXQoaSksaS5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXQmJnZvaWQgMCE9PWkubm9kZSh0KSYmKGMuZGVidWcoIk5vZGUgIit0KyI6ICIrSlNPTi5zdHJpbmdpZnkoaS5ub2RlKHQpKSksT2JqZWN0KGguc2VsZWN0KSgiIyIrTnQodCkpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhpLm5vZGUodCkueC1pLm5vZGUodCkud2lkdGgvMikrIiwiKyhpLm5vZGUodCkueS1pLm5vZGUodCkuaGVpZ2h0LzIpKyIgKSIpKX0pKSxpLmVkZ2VzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dm9pZCAwIT09dCYmdm9pZCAwIT09aS5lZGdlKHQpJiYoYy5kZWJ1ZygiRWRnZSAiK3QudisiIC0+ICIrdC53KyI6ICIrSlNPTi5zdHJpbmdpZnkoaS5lZGdlKHQpKSksdGUocixpLmVkZ2UodCksaS5lZGdlKHQpLnJlbGF0aW9uLG5lKSl9KSk7dmFyIGY9ci5ub2RlKCkuZ2V0QkJveCgpLGQ9Zi53aWR0aCs0MCxwPWYuaGVpZ2h0KzQwO1cocixwLGQsbmUudXNlTWF4V2lkdGgpO3ZhciB5PSIiLmNvbmNhdChmLngtMjAsIiAiKS5jb25jYXQoZi55LTIwLCIgIikuY29uY2F0KGQsIiAiKS5jb25jYXQocCk7Yy5kZWJ1Zygidmlld0JveCAiLmNvbmNhdCh5KSksci5hdHRyKCJ2aWV3Qm94Iix5KX0sb2U9e2V4dGVuc2lvbjpmdW5jdGlvbih0LGUsbil7Yy50cmFjZSgiTWFraW5nIG1hcmtlcnMgZm9yICIsbiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItZXh0ZW5zaW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBleHRlbnNpb24gIitlKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsNyBMMTgsMTMgViAxIFoiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1leHRlbnNpb25FbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBleHRlbnNpb24gIitlKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIFYgMTMgTDE4LDcgWiIpfSxjb21wb3NpdGlvbjpmdW5jdGlvbih0LGUpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWNvbXBvc2l0aW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjb21wb3NpdGlvbiAiK2UpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWNvbXBvc2l0aW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgY29tcG9zaXRpb24gIitlKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpfSxhZ2dyZWdhdGlvbjpmdW5jdGlvbih0LGUpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWFnZ3JlZ2F0aW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBhZ2dyZWdhdGlvbiAiK2UpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWFnZ3JlZ2F0aW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgYWdncmVnYXRpb24gIitlKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpfSxkZXBlbmRlbmN5OmZ1bmN0aW9uKHQsZSl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItZGVwZW5kZW5jeVN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZGVwZW5kZW5jeSAiK2UpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gNSw3IEw5LDEzIEwxLDcgTDksMSBaIiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItZGVwZW5kZW5jeUVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGRlcGVuZGVuY3kgIitlKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMTQsNyBMOSwxIFoiKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1wb2ludEVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTIpLmF0dHIoIm1hcmtlckhlaWdodCIsMTIpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxMCA1IEwgMCAxMCB6IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpLHQuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLXBvaW50U3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDEyKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDEyKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCA1IEwgMTAgMTAgTCAxMCAwIHoiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9LGNpcmNsZTpmdW5jdGlvbih0LGUpe3QuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWNpcmNsZUVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDExKS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsIjUiKS5hdHRyKCJjeSIsIjUiKS5hdHRyKCJyIiwiNSIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKSx0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1jaXJjbGVTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLC0xKS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsIjUiKS5hdHRyKCJjeSIsIjUiKS5hdHRyKCJyIiwiNSIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKX0sY3Jvc3M6ZnVuY3Rpb24odCxlKXt0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1jcm9zc0VuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNyb3NzICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMSAxMSIpLmF0dHIoInJlZlgiLDEyKS5hdHRyKCJyZWZZIiw1LjIpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgbCA5LDkgTSAxMCwxIGwgLTksOSIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKSx0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1jcm9zc1N0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgY3Jvc3MgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDExIDExIikuYXR0cigicmVmWCIsLTEpLmF0dHIoInJlZlkiLDUuMikuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMSkuYXR0cigibWFya2VySGVpZ2h0IiwxMSkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsMSBsIDksOSBNIDEwLDEgbCAtOSw5IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwyKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpfSxiYXJiOmZ1bmN0aW9uKHQsZSl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItYmFyYkVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMTQpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTksNyBMOSwxMyBMMTQsNyBMOSwxIFoiKX19LHNlPWZ1bmN0aW9uKHQsZSxuLHIpe2UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7b2VbZV0odCxuLHIpfSkpfTtmdW5jdGlvbiBjZSh0KXtyZXR1cm4oY2U9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9KSh0KX12YXIgdWU9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dHx8IiI7aWYoIm9iamVjdCI9PT1jZShpKSYmKGk9aVswXSkseChfdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKSlyZXR1cm4gaT1pLnJlcGxhY2UoL1xcbnxcbi9nLCI8YnIgLz4iKSxjLmluZm8oInZlcnRleFRleHQiK2kpLGZ1bmN0aW9uKHQpe3ZhciBlLG4scj1PYmplY3QoaC5zZWxlY3QpKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJmb3JlaWduT2JqZWN0IikpLGk9ci5hcHBlbmQoInhodG1sOmRpdiIpLGE9dC5sYWJlbCxvPXQuaXNOb2RlPyJub2RlTGFiZWwiOiJlZGdlTGFiZWwiO3JldHVybiBpLmh0bWwoJzxzcGFuIGNsYXNzPSInK28rJyIgJysodC5sYWJlbFN0eWxlPydzdHlsZT0iJyt0LmxhYmVsU3R5bGUrJyInOiIiKSsiPiIrYSsiPC9zcGFuPiIpLGU9aSwobj10LmxhYmVsU3R5bGUpJiZlLmF0dHIoInN0eWxlIixuKSxpLnN0eWxlKCJkaXNwbGF5IiwiaW5saW5lLWJsb2NrIiksaS5zdHlsZSgid2hpdGUtc3BhY2UiLCJub3dyYXAiKSxpLmF0dHIoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpLHIubm9kZSgpfSh7aXNOb2RlOnIsbGFiZWw6aS5yZXBsYWNlKC9mYVtscnNiXT86ZmEtW1x3LV0rL2csKGZ1bmN0aW9uKHQpe3JldHVybiI8aSBjbGFzcz0nIi5jb25jYXQodC5yZXBsYWNlKCI6IiwiICIpLCInPjwvaT4iKX0pKSxsYWJlbFN0eWxlOmUucmVwbGFjZSgiZmlsbDoiLCJjb2xvcjoiKX0pO3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7YS5zZXRBdHRyaWJ1dGUoInN0eWxlIixlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IikpO3ZhciBvPVtdO289InN0cmluZyI9PXR5cGVvZiBpP2kuc3BsaXQoL1xcbnxcbnw8YnJccypcLz8+L2dpKTpBcnJheS5pc0FycmF5KGkpP2k6W107Zm9yKHZhciBzPTA7czxvLmxlbmd0aDtzKyspe3ZhciB1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0c3BhbiIpO3Uuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsInhtbDpzcGFjZSIsInByZXNlcnZlIiksdS5zZXRBdHRyaWJ1dGUoImR5IiwiMWVtIiksdS5zZXRBdHRyaWJ1dGUoIngiLCIwIiksbj91LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJ0aXRsZS1yb3ciKTp1LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJyb3ciKSx1LnRleHRDb250ZW50PW9bc10udHJpbSgpLGEuYXBwZW5kQ2hpbGQodSl9cmV0dXJuIGF9LGxlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpO2k9bnx8Im5vZGUgZGVmYXVsdCI7dmFyIGE9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsaSkuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLG89YS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuYXR0cigic3R5bGUiLGUubGFiZWxTdHlsZSkscz1vLm5vZGUoKS5hcHBlbmRDaGlsZCh1ZShlLmxhYmVsVGV4dCxlLmxhYmVsU3R5bGUsITEscikpLGM9cy5nZXRCQm94KCk7aWYoeChfdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7dmFyIHU9cy5jaGlsZHJlblswXSxsPU9iamVjdChoLnNlbGVjdCkocyk7Yz11LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGwuYXR0cigid2lkdGgiLGMud2lkdGgpLGwuYXR0cigiaGVpZ2h0IixjLmhlaWdodCl9dmFyIGY9ZS5wYWRkaW5nLzI7cmV0dXJuIG8uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWMud2lkdGgvMisiLCAiKy1jLmhlaWdodC8yKyIpIikse3NoYXBlU3ZnOmEsYmJveDpjLGhhbGZQYWRkaW5nOmYsbGFiZWw6b319LGhlPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5ub2RlKCkuZ2V0QkJveCgpO3Qud2lkdGg9bi53aWR0aCx0LmhlaWdodD1uLmhlaWdodH07ZnVuY3Rpb24gZmUodCxlLG4scil7cmV0dXJuIHQuaW5zZXJ0KCJwb2x5Z29uIiwiOmZpcnN0LWNoaWxkIikuYXR0cigicG9pbnRzIixyLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQueCsiLCIrdC55fSkpLmpvaW4oIiAiKSkuYXR0cigiY2xhc3MiLCJsYWJlbC1jb250YWluZXIiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistZS8yKyIsIituLzIrIikiKX12YXIgZGU9e30scGU9e30seWU9e30sZ2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYy50cmFjZSgiSW4gaXNEZWNlbmRhbnQiLGUsIiAiLHQsIiA9ICIscGVbZV0uaW5kZXhPZih0KT49MCkscGVbZV0uaW5kZXhPZih0KT49MH0sdmU9ZnVuY3Rpb24gdChlLG4scixpKXtjLndhcm4oIkNvcHlpbmcgY2hpbGRyZW4gb2YgIixlLCJyb290IixpLCJkYXRhIixuLm5vZGUoZSksaSk7dmFyIGE9bi5jaGlsZHJlbihlKXx8W107ZSE9PWkmJmEucHVzaChlKSxjLndhcm4oIkNvcHlpbmcgKG5vZGVzKSBjbHVzdGVySWQiLGUsIm5vZGVzIixhKSxhLmZvckVhY2goKGZ1bmN0aW9uKGEpe2lmKG4uY2hpbGRyZW4oYSkubGVuZ3RoPjApdChhLG4scixpKTtlbHNle3ZhciBvPW4ubm9kZShhKTtjLmluZm8oImNwICIsYSwiIHRvICIsaSwiIHdpdGggcGFyZW50ICIsZSksci5zZXROb2RlKGEsbyksaSE9PW4ucGFyZW50KGEpJiYoYy53YXJuKCJTZXR0aW5nIHBhcmVudCIsYSxuLnBhcmVudChhKSksci5zZXRQYXJlbnQoYSxuLnBhcmVudChhKSkpLGUhPT1pJiZhIT09ZT8oYy5kZWJ1ZygiU2V0dGluZyBwYXJlbnQiLGEsZSksci5zZXRQYXJlbnQoYSxlKSk6KGMuaW5mbygiSW4gY29weSAiLGUsInJvb3QiLGksImRhdGEiLG4ubm9kZShlKSxpKSxjLmRlYnVnKCJOb3QgU2V0dGluZyBwYXJlbnQgZm9yIG5vZGU9IixhLCJjbHVzdGVyIT09cm9vdElkIixlIT09aSwibm9kZSE9PWNsdXN0ZXJJZCIsYSE9PWUpKTt2YXIgcz1uLmVkZ2VzKGEpO2MuZGVidWcoIkNvcHlpbmcgRWRnZXMiLHMpLHMuZm9yRWFjaCgoZnVuY3Rpb24odCl7Yy5pbmZvKCJFZGdlIix0KTt2YXIgYT1uLmVkZ2UodC52LHQudyx0Lm5hbWUpO2MuaW5mbygiRWRnZSBkYXRhIixhLGkpO3RyeXshZnVuY3Rpb24odCxlKXtyZXR1cm4gYy5pbmZvKCJEZWNlbmRhbnRzIG9mICIsZSwiIGlzICIscGVbZV0pLGMuaW5mbygiRWRnZSBpcyAiLHQpLHQudiE9PWUmJih0LnchPT1lJiYocGVbZV0/KGMuaW5mbygiSGVyZSAiKSxwZVtlXS5pbmRleE9mKHQudik+PTB8fCghIWdlKHQudixlKXx8KCEhZ2UodC53LGUpfHxwZVtlXS5pbmRleE9mKHQudyk+PTApKSk6KGMuZGVidWcoIlRpbHQsICIsZSwiLG5vdCBpbiBkZWNlbmRhbnRzIiksITEpKSl9KHQsaSk/Yy5pbmZvKCJTa2lwcGluZyBjb3B5IG9mIGVkZ2UgIix0LnYsIi0tXHgzZSIsdC53LCIgcm9vdElkOiAiLGksIiBjbHVzdGVySWQ6IixlKTooYy5pbmZvKCJDb3B5aW5nIGFzICIsdC52LHQudyxhLHQubmFtZSksci5zZXRFZGdlKHQudix0LncsYSx0Lm5hbWUpLGMuaW5mbygibmV3R3JhcGggZWRnZXMgIixyLmVkZ2VzKCksci5lZGdlKHIuZWRnZXMoKVswXSkpKX1jYXRjaCh0KXtjLmVycm9yKHQpfX0pKX1jLmRlYnVnKCJSZW1vdmluZyBub2RlIixhKSxuLnJlbW92ZU5vZGUoYSl9KSl9LG1lPWZ1bmN0aW9uIHQoZSxuKXtjLnRyYWNlKCJTZWFyY2hpbmciLGUpO3ZhciByPW4uY2hpbGRyZW4oZSk7aWYoYy50cmFjZSgiU2VhcmNoaW5nIGNoaWxkcmVuIG9mIGlkICIsZSxyKSxyLmxlbmd0aDwxKXJldHVybiBjLnRyYWNlKCJUaGlzIGlzIGEgdmFsaWQgbm9kZSIsZSksZTtmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9dChyW2ldLG4pO2lmKGEpcmV0dXJuIGMudHJhY2UoIkZvdW5kIHJlcGxhY2VtZW50IGZvciIsZSwiID0+ICIsYSksYX19LGJlPWZ1bmN0aW9uKHQpe3JldHVybiBkZVt0XSYmZGVbdF0uZXh0ZXJuYWxDb25uZWN0aW9ucyYmZGVbdF0/ZGVbdF0uaWQ6dH0seGU9ZnVuY3Rpb24odCxlKXshdHx8ZT4xMD9jLmRlYnVnKCJPcHRpbmcgb3V0LCBubyBncmFwaCAiKTooYy5kZWJ1ZygiT3B0aW5nIGluLCBncmFwaCAiKSx0Lm5vZGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5jaGlsZHJlbihlKS5sZW5ndGg+MCYmKGMud2FybigiQ2x1c3RlciBpZGVudGlmaWVkIixlLCIgUmVwbGFjZW1lbnQgaWQgaW4gZWRnZXM6ICIsbWUoZSx0KSkscGVbZV09ZnVuY3Rpb24gdChlLG4pe2Zvcih2YXIgcj1uLmNoaWxkcmVuKGUpLGk9W10uY29uY2F0KHIpLGE9MDthPHIubGVuZ3RoO2ErKyl5ZVtyW2FdXT1lLGk9aS5jb25jYXQodChyW2FdLG4pKTtyZXR1cm4gaX0oZSx0KSxkZVtlXT17aWQ6bWUoZSx0KSxjbHVzdGVyRGF0YTp0Lm5vZGUoZSl9KX0pKSx0Lm5vZGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49dC5jaGlsZHJlbihlKSxyPXQuZWRnZXMoKTtuLmxlbmd0aD4wPyhjLmRlYnVnKCJDbHVzdGVyIGlkZW50aWZpZWQiLGUscGUpLHIuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC52IT09ZSYmdC53IT09ZSYmKGdlKHQudixlKV5nZSh0LncsZSkmJihjLndhcm4oIkVkZ2U6ICIsdCwiIGxlYXZlcyBjbHVzdGVyICIsZSksYy53YXJuKCJEZWNlbmRhbnRzIG9mIFhYWCAiLGUsIjogIixwZVtlXSksZGVbZV0uZXh0ZXJuYWxDb25uZWN0aW9ucz0hMCkpfSkpKTpjLmRlYnVnKCJOb3QgYSBjbHVzdGVyICIsZSxwZSl9KSksdC5lZGdlcygpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKTtjLndhcm4oIkVkZ2UgIitlLnYrIiAtPiAiK2UudysiOiAiK0pTT04uc3RyaW5naWZ5KGUpKSxjLndhcm4oIkVkZ2UgIitlLnYrIiAtPiAiK2UudysiOiAiK0pTT04uc3RyaW5naWZ5KHQuZWRnZShlKSkpO3ZhciByPWUudixpPWUudztjLndhcm4oIkZpeCBYWFgiLGRlLCJpZHM6IixlLnYsZS53LCJUcmFuc2xhdGVpbmc6ICIsZGVbZS52XSwiIC0tLSAiLGRlW2Uud10pLChkZVtlLnZdfHxkZVtlLnddKSYmKGMud2FybigiRml4aW5nIGFuZCB0cml4aW5nIC0gcmVtb3ZpbmcgWFhYIixlLnYsZS53LGUubmFtZSkscj1iZShlLnYpLGk9YmUoZS53KSx0LnJlbW92ZUVkZ2UoZS52LGUudyxlLm5hbWUpLHIhPT1lLnYmJihuLmZyb21DbHVzdGVyPWUudiksaSE9PWUudyYmKG4udG9DbHVzdGVyPWUudyksYy53YXJuKCJGaXggUmVwbGFjaW5nIHdpdGggWFhYIixyLGksZS5uYW1lKSx0LnNldEVkZ2UocixpLG4sZS5uYW1lKSl9KSksYy53YXJuKCJBZGp1c3RlZCBHcmFwaCIsVXQuYS5qc29uLndyaXRlKHQpKSxfZSh0LDApLGMudHJhY2UoZGUpKX0sX2U9ZnVuY3Rpb24gdChlLG4pe2lmKGMud2FybigiZXh0cmFjdG9yIC0gIixuLFV0LmEuanNvbi53cml0ZShlKSxlLmNoaWxkcmVuKCJEIikpLG4+MTApYy5lcnJvcigiQmFpbGluZyBvdXQiKTtlbHNle2Zvcih2YXIgcj1lLm5vZGVzKCksaT0hMSxhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBvPXJbYV0scz1lLmNoaWxkcmVuKG8pO2k9aXx8cy5sZW5ndGg+MH1pZihpKXtjLmRlYnVnKCJOb2RlcyA9ICIscixuKTtmb3IodmFyIHU9MDt1PHIubGVuZ3RoO3UrKyl7dmFyIGw9clt1XTtpZihjLmRlYnVnKCJFeHRyYWN0aW5nIG5vZGUiLGwsZGUsZGVbbF0mJiFkZVtsXS5leHRlcm5hbENvbm5lY3Rpb25zLCFlLnBhcmVudChsKSxlLm5vZGUobCksZS5jaGlsZHJlbigiRCIpLCIgRGVwdGggIixuKSxkZVtsXSlpZighZGVbbF0uZXh0ZXJuYWxDb25uZWN0aW9ucyYmZS5jaGlsZHJlbihsKSYmZS5jaGlsZHJlbihsKS5sZW5ndGg+MCl7Yy53YXJuKCJDbHVzdGVyIHdpdGhvdXQgZXh0ZXJuYWwgY29ubmVjdGlvbnMsIHdpdGhvdXQgYSBwYXJlbnQgYW5kIHdpdGggY2hpbGRyZW4iLGwsbik7dmFyIGg9IlRCIj09PWUuZ3JhcGgoKS5yYW5rZGlyPyJMUiI6IlRCIjtkZVtsXSYmZGVbbF0uY2x1c3RlckRhdGEmJmRlW2xdLmNsdXN0ZXJEYXRhLmRpciYmKGg9ZGVbbF0uY2x1c3RlckRhdGEuZGlyLGMud2FybigiRml4aW5nIGRpciIsZGVbbF0uY2x1c3RlckRhdGEuZGlyLGgpKTt2YXIgZj1uZXcgVXQuYS5HcmFwaCh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOmgsbm9kZXNlcDo1MCxyYW5rc2VwOjUwLG1hcmdpbng6OCxtYXJnaW55Ojh9KS5zZXREZWZhdWx0RWRnZUxhYmVsKChmdW5jdGlvbigpe3JldHVybnt9fSkpO2Mud2FybigiT2xkIGdyYXBoIGJlZm9yZSBjb3B5IixVdC5hLmpzb24ud3JpdGUoZSkpLHZlKGwsZSxmLGwpLGUuc2V0Tm9kZShsLHtjbHVzdGVyTm9kZTohMCxpZDpsLGNsdXN0ZXJEYXRhOmRlW2xdLmNsdXN0ZXJEYXRhLGxhYmVsVGV4dDpkZVtsXS5sYWJlbFRleHQsZ3JhcGg6Zn0pLGMud2FybigiTmV3IGdyYXBoIGFmdGVyIGNvcHkgbm9kZTogKCIsbCwiKSIsVXQuYS5qc29uLndyaXRlKGYpKSxjLmRlYnVnKCJPbGQgZ3JhcGggYWZ0ZXIgY29weSIsVXQuYS5qc29uLndyaXRlKGUpKX1lbHNlIGMud2FybigiQ2x1c3RlciAqKiAiLGwsIiAqKm5vdCBtZWV0aW5nIHRoZSBjcml0ZXJpYSAhZXh0ZXJuYWxDb25uZWN0aW9uczoiLCFkZVtsXS5leHRlcm5hbENvbm5lY3Rpb25zLCIgbm8gcGFyZW50OiAiLCFlLnBhcmVudChsKSwiIGNoaWxkcmVuICIsZS5jaGlsZHJlbihsKSYmZS5jaGlsZHJlbihsKS5sZW5ndGg+MCxlLmNoaWxkcmVuKCJEIiksbiksYy5kZWJ1ZyhkZSk7ZWxzZSBjLmRlYnVnKCJOb3QgYSBjbHVzdGVyIixsLG4pfXI9ZS5ub2RlcygpLGMud2FybigiTmV3IGxpc3Qgb2Ygbm9kZXMiLHIpO2Zvcih2YXIgZD0wO2Q8ci5sZW5ndGg7ZCsrKXt2YXIgcD1yW2RdLHk9ZS5ub2RlKHApO2Mud2FybigiIE5vdyBuZXh0IGxldmVsIixwLHkpLHkuY2x1c3Rlck5vZGUmJnQoeS5ncmFwaCxuKzEpfX1lbHNlIGMuZGVidWcoIkRvbmUsIG5vIG5vZGUgaGFzIGNoaWxkcmVuIixlLm5vZGVzKCkpfX0sa2U9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uIHQoZSxuKXtpZigwPT09bi5sZW5ndGgpcmV0dXJuW107dmFyIHI9T2JqZWN0LmFzc2lnbihuKTtyZXR1cm4gbi5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgaT1lLmNoaWxkcmVuKG4pLGE9dChlLGkpO3I9ci5jb25jYXQoYSl9KSkscn0odCx0LmNoaWxkcmVuKCkpfSx3ZT1uKDE3MSk7dmFyIEVlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXQueCxhPXQueSxvPWktci54LHM9YS1yLnksYz1NYXRoLnNxcnQoZSplKnMqcytuKm4qbypvKSx1PU1hdGguYWJzKGUqbipvL2MpO3IueDxpJiYodT0tdSk7dmFyIGw9TWF0aC5hYnMoZSpuKnMvYyk7cmV0dXJuIHIueTxhJiYobD0tbCkse3g6aSt1LHk6YStsfX07dmFyIFRlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gRWUodCxlLGUsbil9O2Z1bmN0aW9uIENlKHQsZSl7cmV0dXJuIHQqZT4wfXZhciBTZT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaSxhLG8scyxjLHUsbCxoLGYsZCxwLHksZztpZihpPWUueS10Lnksbz10LngtZS54LGM9ZS54KnQueS10LngqZS55LGY9aSpuLngrbypuLnkrYyxkPWkqci54K28qci55K2MsISgwIT09ZiYmMCE9PWQmJkNlKGYsZCl8fChhPXIueS1uLnkscz1uLngtci54LHU9ci54Km4ueS1uLngqci55LGw9YSp0Lngrcyp0LnkrdSxoPWEqZS54K3MqZS55K3UsMCE9PWwmJjAhPT1oJiZDZShsLGgpfHwwPT0ocD1pKnMtYSpvKSkpKXJldHVybiB5PU1hdGguYWJzKHAvMikse3g6KGc9byp1LXMqYyk8MD8oZy15KS9wOihnK3kpL3AseTooZz1hKmMtaSp1KTwwPyhnLXkpL3A6KGcreSkvcH19LEFlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LngsaT10LnksYT1bXSxvPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxzPU51bWJlci5QT1NJVElWRV9JTkZJTklUWTsiZnVuY3Rpb24iPT10eXBlb2YgZS5mb3JFYWNoP2UuZm9yRWFjaCgoZnVuY3Rpb24odCl7bz1NYXRoLm1pbihvLHQueCkscz1NYXRoLm1pbihzLHQueSl9KSk6KG89TWF0aC5taW4obyxlLngpLHM9TWF0aC5taW4ocyxlLnkpKTtmb3IodmFyIGM9ci10LndpZHRoLzItbyx1PWktdC5oZWlnaHQvMi1zLGw9MDtsPGUubGVuZ3RoO2wrKyl7dmFyIGg9ZVtsXSxmPWVbbDxlLmxlbmd0aC0xP2wrMTowXSxkPVNlKHQsbix7eDpjK2gueCx5OnUraC55fSx7eDpjK2YueCx5OnUrZi55fSk7ZCYmYS5wdXNoKGQpfWlmKCFhLmxlbmd0aClyZXR1cm4gdDthLmxlbmd0aD4xJiZhLnNvcnQoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC54LW4ueCxpPXQueS1uLnksYT1NYXRoLnNxcnQocipyK2kqaSksbz1lLngtbi54LHM9ZS55LW4ueSxjPU1hdGguc3FydChvKm8rcypzKTtyZXR1cm4gYTxjPy0xOmE9PT1jPzA6MX0pKTtyZXR1cm4gYVswXX07dmFyIE1lPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpPXQueCxhPXQueSxvPWUueC1pLHM9ZS55LWEsYz10LndpZHRoLzIsdT10LmhlaWdodC8yO3JldHVybiBNYXRoLmFicyhzKSpjPk1hdGguYWJzKG8pKnU/KHM8MCYmKHU9LXUpLG49MD09PXM/MDp1Km8vcyxyPXUpOihvPDAmJihjPS1jKSxuPWMscj0wPT09bz8wOmMqcy9vKSx7eDppK24seTphK3J9fSxPZT17bm9kZTpuLm4od2UpLmEsY2lyY2xlOlRlLGVsbGlwc2U6RWUscG9seWdvbjpBZSxyZWN0Ok1lfTtmdW5jdGlvbiBCZSh0KXtyZXR1cm4oQmU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9KSh0KX12YXIgTmU9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQiKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCksaT03MCxhPTEwOyJMUiI9PT1uJiYoaT0xMCxhPTcwKTt2YXIgbz1yLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLC0xKmkvMikuYXR0cigieSIsLTEqYS8yKS5hdHRyKCJ3aWR0aCIsaSkuYXR0cigiaGVpZ2h0IixhKS5hdHRyKCJjbGFzcyIsImZvcmstam9pbiIpO3JldHVybiBoZShlLG8pLGUuaGVpZ2h0PWUuaGVpZ2h0K2UucGFkZGluZy8yLGUud2lkdGg9ZS53aWR0aCtlLnBhZGRpbmcvMixlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gT2UucmVjdChlLHQpfSxyfSxEZT17cXVlc3Rpb246ZnVuY3Rpb24odCxlKXt2YXIgbj1sZSh0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLndpZHRoK2UucGFkZGluZysoaS5oZWlnaHQrZS5wYWRkaW5nKSxvPVt7eDphLzIseTowfSx7eDphLHk6LWEvMn0se3g6YS8yLHk6LWF9LHt4OjAseTotYS8yfV07Yy5pbmZvKCJRdWVzdGlvbiBtYWluIChDaXJjbGUpIik7dmFyIHM9ZmUocixhLGEsbyk7cmV0dXJuIHMuYXR0cigic3R5bGUiLGUuc3R5bGUpLGhlKGUscyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGMud2FybigiSW50ZXJzZWN0IGNhbGxlZCIpLE9lLnBvbHlnb24oZSxvLHQpfSxyfSxyZWN0OmZ1bmN0aW9uKHQsZSl7dmFyIG49bGUodCxlLCJub2RlICIrZS5jbGFzc2VzLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1uLmhhbGZQYWRkaW5nO2MudHJhY2UoIkNsYXNzZXMgPSAiLGUuY2xhc3Nlcyk7dmFyIG89ci5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gby5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoIngiLC1pLndpZHRoLzItYSkuYXR0cigieSIsLWkuaGVpZ2h0LzItYSkuYXR0cigid2lkdGgiLGkud2lkdGgrZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLGkuaGVpZ2h0K2UucGFkZGluZyksaGUoZSxvKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gT2UucmVjdChlLHQpfSxyfSxyZWN0V2l0aFRpdGxlOmZ1bmN0aW9uKHQsZSl7dmFyIG47bj1lLmNsYXNzZXM/Im5vZGUgIitlLmNsYXNzZXM6Im5vZGUgZGVmYXVsdCI7dmFyIHI9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsbikuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLGk9ci5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxhPXIuaW5zZXJ0KCJsaW5lIiksbz1yLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKSxzPWUubGFiZWxUZXh0LmZsYXQ/ZS5sYWJlbFRleHQuZmxhdCgpOmUubGFiZWxUZXh0LHU9IiI7dT0ib2JqZWN0Ij09PUJlKHMpP3NbMF06cyxjLmluZm8oIkxhYmVsIHRleHQgYWJjNzkiLHUscywib2JqZWN0Ij09PUJlKHMpKTt2YXIgbCxmPW8ubm9kZSgpLmFwcGVuZENoaWxkKHVlKHUsZS5sYWJlbFN0eWxlLCEwLCEwKSk7aWYoeChfdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7dmFyIGQ9Zi5jaGlsZHJlblswXSxwPU9iamVjdChoLnNlbGVjdCkoZik7bD1kLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHAuYXR0cigid2lkdGgiLGwud2lkdGgpLHAuYXR0cigiaGVpZ2h0IixsLmhlaWdodCl9Yy5pbmZvKCJUZXh0IDIiLHMpO3ZhciB5PXMuc2xpY2UoMSxzLmxlbmd0aCksZz1mLmdldEJCb3goKSx2PW8ubm9kZSgpLmFwcGVuZENoaWxkKHVlKHkuam9pbj95LmpvaW4oIjxici8+Iik6eSxlLmxhYmVsU3R5bGUsITAsITApKTtpZih4KF90KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXt2YXIgbT12LmNoaWxkcmVuWzBdLGI9T2JqZWN0KGguc2VsZWN0KSh2KTtsPW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYi5hdHRyKCJ3aWR0aCIsbC53aWR0aCksYi5hdHRyKCJoZWlnaHQiLGwuaGVpZ2h0KX12YXIgXz1lLnBhZGRpbmcvMjtyZXR1cm4gT2JqZWN0KGguc2VsZWN0KSh2KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKGwud2lkdGg+Zy53aWR0aD8wOihnLndpZHRoLWwud2lkdGgpLzIpKyIsICIrKGcuaGVpZ2h0K18rNSkrIikiKSxPYmplY3QoaC5zZWxlY3QpKGYpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisobC53aWR0aDxnLndpZHRoPzA6LShnLndpZHRoLWwud2lkdGgpLzIpKyIsIDApIiksbD1vLm5vZGUoKS5nZXRCQm94KCksby5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistbC53aWR0aC8yKyIsICIrKC1sLmhlaWdodC8yLV8rMykrIikiKSxpLmF0dHIoImNsYXNzIiwib3V0ZXIgdGl0bGUtc3RhdGUiKS5hdHRyKCJ4IiwtbC53aWR0aC8yLV8pLmF0dHIoInkiLC1sLmhlaWdodC8yLV8pLmF0dHIoIndpZHRoIixsLndpZHRoK2UucGFkZGluZykuYXR0cigiaGVpZ2h0IixsLmhlaWdodCtlLnBhZGRpbmcpLGEuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1sLndpZHRoLzItXykuYXR0cigieDIiLGwud2lkdGgvMitfKS5hdHRyKCJ5MSIsLWwuaGVpZ2h0LzItXytnLmhlaWdodCtfKS5hdHRyKCJ5MiIsLWwuaGVpZ2h0LzItXytnLmhlaWdodCtfKSxoZShlLGkpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBPZS5yZWN0KGUsdCl9LHJ9LGNob2ljZTpmdW5jdGlvbih0LGUpe3ZhciBuPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQiKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCkscj1be3g6MCx5OjE0fSx7eDoxNCx5OjB9LHt4OjAseTotMTR9LHt4Oi0xNCx5OjB9XSxpPW4uaW5zZXJ0KCJwb2x5Z29uIiwiOmZpcnN0LWNoaWxkIikuYXR0cigicG9pbnRzIixyLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQueCsiLCIrdC55fSkpLmpvaW4oIiAiKSk7cmV0dXJuIGkuYXR0cigiY2xhc3MiLCJzdGF0ZS1zdGFydCIpLmF0dHIoInIiLDcpLmF0dHIoIndpZHRoIiwyOCkuYXR0cigiaGVpZ2h0IiwyOCksZS53aWR0aD0yOCxlLmhlaWdodD0yOCxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gT2UuY2lyY2xlKGUsMTQsdCl9LG59LGNpcmNsZTpmdW5jdGlvbih0LGUpe3ZhciBuPWxlKHQsZSx2b2lkIDAsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPW4uaGFsZlBhZGRpbmcsbz1yLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIG8uYXR0cigic3R5bGUiLGUuc3R5bGUpLmF0dHIoInJ4IixlLnJ4KS5hdHRyKCJyeSIsZS5yeSkuYXR0cigiciIsaS53aWR0aC8yK2EpLmF0dHIoIndpZHRoIixpLndpZHRoK2UucGFkZGluZykuYXR0cigiaGVpZ2h0IixpLmhlaWdodCtlLnBhZGRpbmcpLGMuaW5mbygiQ2lyY2xlIG1haW4iKSxoZShlLG8pLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBjLmluZm8oIkNpcmNsZSBpbnRlcnNlY3QiLGUsaS53aWR0aC8yK2EsdCksT2UuY2lyY2xlKGUsaS53aWR0aC8yK2EsdCl9LHJ9LHN0YWRpdW06ZnVuY3Rpb24odCxlKXt2YXIgbj1sZSh0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLmhlaWdodCtlLnBhZGRpbmcsbz1pLndpZHRoK2EvNCtlLnBhZGRpbmcscz1yLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJyeCIsYS8yKS5hdHRyKCJyeSIsYS8yKS5hdHRyKCJ4Iiwtby8yKS5hdHRyKCJ5IiwtYS8yKS5hdHRyKCJ3aWR0aCIsbykuYXR0cigiaGVpZ2h0IixhKTtyZXR1cm4gaGUoZSxzKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gT2UucmVjdChlLHQpfSxyfSxoZXhhZ29uOmZ1bmN0aW9uKHQsZSl7dmFyIG49bGUodCxlLHZvaWQgMCwhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9aS5oZWlnaHQrZS5wYWRkaW5nLG89YS80LHM9aS53aWR0aCsyKm8rZS5wYWRkaW5nLGM9W3t4Om8seTowfSx7eDpzLW8seTowfSx7eDpzLHk6LWEvMn0se3g6cy1vLHk6LWF9LHt4Om8seTotYX0se3g6MCx5Oi1hLzJ9XSx1PWZlKHIscyxhLGMpO3JldHVybiB1LmF0dHIoInN0eWxlIixlLnN0eWxlKSxoZShlLHUpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBPZS5wb2x5Z29uKGUsYyx0KX0scn0scmVjdF9sZWZ0X2ludl9hcnJvdzpmdW5jdGlvbih0LGUpe3ZhciBuPWxlKHQsZSx2b2lkIDAsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPWkud2lkdGgrZS5wYWRkaW5nLG89aS5oZWlnaHQrZS5wYWRkaW5nLHM9W3t4Oi1vLzIseTowfSx7eDphLHk6MH0se3g6YSx5Oi1vfSx7eDotby8yLHk6LW99LHt4OjAseTotby8yfV07cmV0dXJuIGZlKHIsYSxvLHMpLmF0dHIoInN0eWxlIixlLnN0eWxlKSxlLndpZHRoPWErbyxlLmhlaWdodD1vLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBPZS5wb2x5Z29uKGUscyx0KX0scn0sbGVhbl9yaWdodDpmdW5jdGlvbih0LGUpe3ZhciBuPWxlKHQsZSx2b2lkIDAsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPWkud2lkdGgrZS5wYWRkaW5nLG89aS5oZWlnaHQrZS5wYWRkaW5nLHM9W3t4Oi0yKm8vNix5OjB9LHt4OmEtby82LHk6MH0se3g6YSsyKm8vNix5Oi1vfSx7eDpvLzYseTotb31dLGM9ZmUocixhLG8scyk7cmV0dXJuIGMuYXR0cigic3R5bGUiLGUuc3R5bGUpLGhlKGUsYyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIE9lLnBvbHlnb24oZSxzLHQpfSxyfSxsZWFuX2xlZnQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1sZSh0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLndpZHRoK2UucGFkZGluZyxvPWkuaGVpZ2h0K2UucGFkZGluZyxzPVt7eDoyKm8vNix5OjB9LHt4OmErby82LHk6MH0se3g6YS0yKm8vNix5Oi1vfSx7eDotby82LHk6LW99XSxjPWZlKHIsYSxvLHMpO3JldHVybiBjLmF0dHIoInN0eWxlIixlLnN0eWxlKSxoZShlLGMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBPZS5wb2x5Z29uKGUscyx0KX0scn0sdHJhcGV6b2lkOmZ1bmN0aW9uKHQsZSl7dmFyIG49bGUodCxlLHZvaWQgMCwhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9aS53aWR0aCtlLnBhZGRpbmcsbz1pLmhlaWdodCtlLnBhZGRpbmcscz1be3g6LTIqby82LHk6MH0se3g6YSsyKm8vNix5OjB9LHt4OmEtby82LHk6LW99LHt4Om8vNix5Oi1vfV0sYz1mZShyLGEsbyxzKTtyZXR1cm4gYy5hdHRyKCJzdHlsZSIsZS5zdHlsZSksaGUoZSxjKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gT2UucG9seWdvbihlLHMsdCl9LHJ9LGludl90cmFwZXpvaWQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1sZSh0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLndpZHRoK2UucGFkZGluZyxvPWkuaGVpZ2h0K2UucGFkZGluZyxzPVt7eDpvLzYseTowfSx7eDphLW8vNix5OjB9LHt4OmErMipvLzYseTotb30se3g6LTIqby82LHk6LW99XSxjPWZlKHIsYSxvLHMpO3JldHVybiBjLmF0dHIoInN0eWxlIixlLnN0eWxlKSxoZShlLGMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBPZS5wb2x5Z29uKGUscyx0KX0scn0scmVjdF9yaWdodF9pbnZfYXJyb3c6ZnVuY3Rpb24odCxlKXt2YXIgbj1sZSh0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLndpZHRoK2UucGFkZGluZyxvPWkuaGVpZ2h0K2UucGFkZGluZyxzPVt7eDowLHk6MH0se3g6YStvLzIseTowfSx7eDphLHk6LW8vMn0se3g6YStvLzIseTotb30se3g6MCx5Oi1vfV0sYz1mZShyLGEsbyxzKTtyZXR1cm4gYy5hdHRyKCJzdHlsZSIsZS5zdHlsZSksaGUoZSxjKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gT2UucG9seWdvbihlLHMsdCl9LHJ9LGN5bGluZGVyOmZ1bmN0aW9uKHQsZSl7dmFyIG49bGUodCxlLHZvaWQgMCwhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9aS53aWR0aCtlLnBhZGRpbmcsbz1hLzIscz1vLygyLjUrYS81MCksYz1pLmhlaWdodCtzK2UucGFkZGluZyx1PSJNIDAsIitzKyIgYSAiK28rIiwiK3MrIiAwLDAsMCAiK2ErIiAwIGEgIitvKyIsIitzKyIgMCwwLDAgIistYSsiIDAgbCAwLCIrYysiIGEgIitvKyIsIitzKyIgMCwwLDAgIithKyIgMCBsIDAsIistYyxsPXIuYXR0cigibGFiZWwtb2Zmc2V0LXkiLHMpLmluc2VydCgicGF0aCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJkIix1KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistYS8yKyIsIistKGMvMitzKSsiKSIpO3JldHVybiBoZShlLGwpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3ZhciBuPU9lLnJlY3QoZSx0KSxyPW4ueC1lLng7aWYoMCE9byYmKE1hdGguYWJzKHIpPGUud2lkdGgvMnx8TWF0aC5hYnMocik9PWUud2lkdGgvMiYmTWF0aC5hYnMobi55LWUueSk+ZS5oZWlnaHQvMi1zKSl7dmFyIGk9cypzKigxLXIqci8obypvKSk7MCE9aSYmKGk9TWF0aC5zcXJ0KGkpKSxpPXMtaSx0LnktZS55PjAmJihpPS1pKSxuLnkrPWl9cmV0dXJuIG59LHJ9LHN0YXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIG49dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxyPW4uaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gci5hdHRyKCJjbGFzcyIsInN0YXRlLXN0YXJ0IikuYXR0cigiciIsNykuYXR0cigid2lkdGgiLDE0KS5hdHRyKCJoZWlnaHQiLDE0KSxoZShlLHIpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBPZS5jaXJjbGUoZSw3LHQpfSxufSxlbmQ6ZnVuY3Rpb24odCxlKXt2YXIgbj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSBkZWZhdWx0IikuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLHI9bi5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpLGk9bi5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBpLmF0dHIoImNsYXNzIiwic3RhdGUtc3RhcnQiKS5hdHRyKCJyIiw3KS5hdHRyKCJ3aWR0aCIsMTQpLmF0dHIoImhlaWdodCIsMTQpLHIuYXR0cigiY2xhc3MiLCJzdGF0ZS1lbmQiKS5hdHRyKCJyIiw1KS5hdHRyKCJ3aWR0aCIsMTApLmF0dHIoImhlaWdodCIsMTApLGhlKGUsaSksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIE9lLmNpcmNsZShlLDcsdCl9LG59LG5vdGU6ZnVuY3Rpb24odCxlKXt2YXIgbj1sZSh0LGUsIm5vZGUgIitlLmNsYXNzZXMsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPW4uaGFsZlBhZGRpbmc7Yy5pbmZvKCJDbGFzc2VzID0gIixlLmNsYXNzZXMpO3ZhciBvPXIuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIG8uYXR0cigicngiLGUucngpLmF0dHIoInJ5IixlLnJ5KS5hdHRyKCJ4IiwtaS53aWR0aC8yLWEpLmF0dHIoInkiLC1pLmhlaWdodC8yLWEpLmF0dHIoIndpZHRoIixpLndpZHRoK2UucGFkZGluZykuYXR0cigiaGVpZ2h0IixpLmhlaWdodCtlLnBhZGRpbmcpLGhlKGUsbyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIE9lLnJlY3QoZSx0KX0scn0sc3Vicm91dGluZTpmdW5jdGlvbih0LGUpe3ZhciBuPWxlKHQsZSx2b2lkIDAsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPWkud2lkdGgrZS5wYWRkaW5nLG89aS5oZWlnaHQrZS5wYWRkaW5nLHM9W3t4OjAseTowfSx7eDphLHk6MH0se3g6YSx5Oi1vfSx7eDowLHk6LW99LHt4OjAseTowfSx7eDotOCx5OjB9LHt4OmErOCx5OjB9LHt4OmErOCx5Oi1vfSx7eDotOCx5Oi1vfSx7eDotOCx5OjB9XSxjPWZlKHIsYSxvLHMpO3JldHVybiBjLmF0dHIoInN0eWxlIixlLnN0eWxlKSxoZShlLGMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBPZS5wb2x5Z29uKGUscyx0KX0scn0sZm9yazpOZSxqb2luOk5lLGNsYXNzX2JveDpmdW5jdGlvbih0LGUpe3ZhciBuLHI9ZS5wYWRkaW5nLzI7bj1lLmNsYXNzZXM/Im5vZGUgIitlLmNsYXNzZXM6Im5vZGUgZGVmYXVsdCI7dmFyIGk9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsbikuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLGE9aS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxvPWkuaW5zZXJ0KCJsaW5lIikscz1pLmluc2VydCgibGluZSIpLGM9MCx1PTQsbD1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKSxmPTAsZD1lLmNsYXNzRGF0YS5hbm5vdGF0aW9ucyYmZS5jbGFzc0RhdGEuYW5ub3RhdGlvbnNbMF0scD1lLmNsYXNzRGF0YS5hbm5vdGF0aW9uc1swXT8iwqsiK2UuY2xhc3NEYXRhLmFubm90YXRpb25zWzBdKyLCuyI6IiIseT1sLm5vZGUoKS5hcHBlbmRDaGlsZCh1ZShwLGUubGFiZWxTdHlsZSwhMCwhMCkpLGc9eS5nZXRCQm94KCk7aWYoeChfdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7dmFyIHY9eS5jaGlsZHJlblswXSxtPU9iamVjdChoLnNlbGVjdCkoeSk7Zz12LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG0uYXR0cigid2lkdGgiLGcud2lkdGgpLG0uYXR0cigiaGVpZ2h0IixnLmhlaWdodCl9ZS5jbGFzc0RhdGEuYW5ub3RhdGlvbnNbMF0mJih1Kz1nLmhlaWdodCs0LGMrPWcud2lkdGgpO3ZhciBiPWUuY2xhc3NEYXRhLmlkO3ZvaWQgMCE9PWUuY2xhc3NEYXRhLnR5cGUmJiIiIT09ZS5jbGFzc0RhdGEudHlwZSYmKGIrPSI8IitlLmNsYXNzRGF0YS50eXBlKyI+Iik7dmFyIF89bC5ub2RlKCkuYXBwZW5kQ2hpbGQodWUoYixlLmxhYmVsU3R5bGUsITAsITApKTtPYmplY3QoaC5zZWxlY3QpKF8pLmF0dHIoImNsYXNzIiwiY2xhc3NUaXRsZSIpO3ZhciBrPV8uZ2V0QkJveCgpO2lmKHgoX3QoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciB3PV8uY2hpbGRyZW5bMF0sRT1PYmplY3QoaC5zZWxlY3QpKF8pO2s9dy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxFLmF0dHIoIndpZHRoIixrLndpZHRoKSxFLmF0dHIoImhlaWdodCIsay5oZWlnaHQpfXUrPWsuaGVpZ2h0KzQsay53aWR0aD5jJiYoYz1rLndpZHRoKTt2YXIgVD1bXTtlLmNsYXNzRGF0YS5tZW1iZXJzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPVZ0KHQpLmRpc3BsYXlUZXh0LHI9bC5ub2RlKCkuYXBwZW5kQ2hpbGQodWUobixlLmxhYmVsU3R5bGUsITAsITApKSxpPXIuZ2V0QkJveCgpO2lmKHgoX3QoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciBhPXIuY2hpbGRyZW5bMF0sbz1PYmplY3QoaC5zZWxlY3QpKHIpO2k9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvLmF0dHIoIndpZHRoIixpLndpZHRoKSxvLmF0dHIoImhlaWdodCIsaS5oZWlnaHQpfWkud2lkdGg+YyYmKGM9aS53aWR0aCksdSs9aS5oZWlnaHQrNCxULnB1c2gocil9KSksdSs9ODt2YXIgQz1bXTtpZihlLmNsYXNzRGF0YS5tZXRob2RzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPVZ0KHQpLmRpc3BsYXlUZXh0LHI9bC5ub2RlKCkuYXBwZW5kQ2hpbGQodWUobixlLmxhYmVsU3R5bGUsITAsITApKSxpPXIuZ2V0QkJveCgpO2lmKHgoX3QoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciBhPXIuY2hpbGRyZW5bMF0sbz1PYmplY3QoaC5zZWxlY3QpKHIpO2k9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvLmF0dHIoIndpZHRoIixpLndpZHRoKSxvLmF0dHIoImhlaWdodCIsaS5oZWlnaHQpfWkud2lkdGg+YyYmKGM9aS53aWR0aCksdSs9aS5oZWlnaHQrNCxDLnB1c2gocil9KSksdSs9OCxkKXt2YXIgUz0oYy1nLndpZHRoKS8yO09iamVjdChoLnNlbGVjdCkoeSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCAiKygtMSpjLzIrUykrIiwgIistMSp1LzIrIikiKSxmPWcuaGVpZ2h0KzR9dmFyIEE9KGMtay53aWR0aCkvMjtyZXR1cm4gT2JqZWN0KGguc2VsZWN0KShfKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKC0xKmMvMitBKSsiLCAiKygtMSp1LzIrZikrIikiKSxmKz1rLmhlaWdodCs0LG8uYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1jLzItcikuYXR0cigieDIiLGMvMityKS5hdHRyKCJ5MSIsLXUvMi1yKzgrZikuYXR0cigieTIiLC11LzItcis4K2YpLGYrPTgsVC5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QoaC5zZWxlY3QpKHQpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIistYy8yKyIsICIrKC0xKnUvMitmKzQpKyIpIiksZis9ay5oZWlnaHQrNH0pKSxmKz04LHMuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1jLzItcikuYXR0cigieDIiLGMvMityKS5hdHRyKCJ5MSIsLXUvMi1yKzgrZikuYXR0cigieTIiLC11LzItcis4K2YpLGYrPTgsQy5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QoaC5zZWxlY3QpKHQpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIistYy8yKyIsICIrKC0xKnUvMitmKSsiKSIpLGYrPWsuaGVpZ2h0KzR9KSksYS5hdHRyKCJjbGFzcyIsIm91dGVyIHRpdGxlLXN0YXRlIikuYXR0cigieCIsLWMvMi1yKS5hdHRyKCJ5IiwtdS8yLXIpLmF0dHIoIndpZHRoIixjK2UucGFkZGluZykuYXR0cigiaGVpZ2h0Iix1K2UucGFkZGluZyksaGUoZSxhKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gT2UucmVjdChlLHQpfSxpfX0sTGU9e30sSWU9ZnVuY3Rpb24odCl7dmFyIGU9TGVbdC5pZF07Yy50cmFjZSgiVHJhbnNmb3JtaW5nIG5vZGUiLHQuZGlmZix0LCJ0cmFuc2xhdGUoIisodC54LXQud2lkdGgvMi01KSsiLCAiK3Qud2lkdGgvMisiKSIpO3ZhciBuPXQuZGlmZnx8MDtyZXR1cm4gdC5jbHVzdGVyTm9kZT9lLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyh0Lngrbi10LndpZHRoLzIpKyIsICIrKHQueS10LmhlaWdodC8yLTgpKyIpIik6ZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0LngrIiwgIit0LnkrIikiKSxufSxSZT17cmVjdDpmdW5jdGlvbih0LGUpe2MudHJhY2UoIkNyZWF0aW5nIHN1YmdyYXBoIHJlY3QgZm9yICIsZS5pZCxlKTt2YXIgbj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3RlciIrKGUuY2xhc3M/IiAiK2UuY2xhc3M6IiIpKS5hdHRyKCJpZCIsZS5pZCkscj1uLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLGk9bi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXItbGFiZWwiKSxhPWkubm9kZSgpLmFwcGVuZENoaWxkKHVlKGUubGFiZWxUZXh0LGUubGFiZWxTdHlsZSx2b2lkIDAsITApKSxvPWEuZ2V0QkJveCgpO2lmKHgoX3QoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciBzPWEuY2hpbGRyZW5bMF0sdT1PYmplY3QoaC5zZWxlY3QpKGEpO289cy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx1LmF0dHIoIndpZHRoIixvLndpZHRoKSx1LmF0dHIoImhlaWdodCIsby5oZWlnaHQpfXZhciBsPTAqZS5wYWRkaW5nLGY9bC8yLGQ9ZS53aWR0aDw9by53aWR0aCtsP28ud2lkdGgrbDplLndpZHRoO2Uud2lkdGg8PW8ud2lkdGgrbD9lLmRpZmY9KG8ud2lkdGgtZS53aWR0aCkvMjplLmRpZmY9LWUucGFkZGluZy8yLGMudHJhY2UoIkRhdGEgIixlLEpTT04uc3RyaW5naWZ5KGUpKSxyLmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoIngiLGUueC1kLzIpLmF0dHIoInkiLGUueS1lLmhlaWdodC8yLWYpLmF0dHIoIndpZHRoIixkKS5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0K2wpLGkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKGUueC1vLndpZHRoLzIpKyIsICIrKGUueS1lLmhlaWdodC8yK2UucGFkZGluZy8zKSsiKSIpO3ZhciBwPXIubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS53aWR0aD1wLndpZHRoLGUuaGVpZ2h0PXAuaGVpZ2h0LGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBNZShlLHQpfSxufSxyb3VuZGVkV2l0aFRpdGxlOmZ1bmN0aW9uKHQsZSl7dmFyIG49dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsZS5jbGFzc2VzKS5hdHRyKCJpZCIsZS5pZCkscj1uLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLGk9bi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXItbGFiZWwiKSxhPW4uYXBwZW5kKCJyZWN0Iiksbz1pLm5vZGUoKS5hcHBlbmRDaGlsZCh1ZShlLmxhYmVsVGV4dCxlLmxhYmVsU3R5bGUsdm9pZCAwLCEwKSkscz1vLmdldEJCb3goKTtpZih4KF90KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXt2YXIgYz1vLmNoaWxkcmVuWzBdLHU9T2JqZWN0KGguc2VsZWN0KShvKTtzPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdS5hdHRyKCJ3aWR0aCIscy53aWR0aCksdS5hdHRyKCJoZWlnaHQiLHMuaGVpZ2h0KX1zPW8uZ2V0QkJveCgpO3ZhciBsPTAqZS5wYWRkaW5nLGY9bC8yLGQ9ZS53aWR0aDw9cy53aWR0aCtlLnBhZGRpbmc/cy53aWR0aCtlLnBhZGRpbmc6ZS53aWR0aDtlLndpZHRoPD1zLndpZHRoK2UucGFkZGluZz9lLmRpZmY9KHMud2lkdGgrZS5wYWRkaW5nLWUud2lkdGgpLzI6ZS5kaWZmPS1lLnBhZGRpbmcvMixyLmF0dHIoImNsYXNzIiwib3V0ZXIiKS5hdHRyKCJ4IixlLngtZC8yLWYpLmF0dHIoInkiLGUueS1lLmhlaWdodC8yLWYpLmF0dHIoIndpZHRoIixkK2wpLmF0dHIoImhlaWdodCIsZS5oZWlnaHQrbCksYS5hdHRyKCJjbGFzcyIsImlubmVyIikuYXR0cigieCIsZS54LWQvMi1mKS5hdHRyKCJ5IixlLnktZS5oZWlnaHQvMi1mK3MuaGVpZ2h0LTEpLmF0dHIoIndpZHRoIixkK2wpLmF0dHIoImhlaWdodCIsZS5oZWlnaHQrbC1zLmhlaWdodC0zKSxpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhlLngtcy53aWR0aC8yKSsiLCAiKyhlLnktZS5oZWlnaHQvMi1lLnBhZGRpbmcvMysoeChfdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKT81OjMpKSsiKSIpO3ZhciBwPXIubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS5oZWlnaHQ9cC5oZWlnaHQsZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIE1lKGUsdCl9LG59LG5vdGVHcm91cDpmdW5jdGlvbih0LGUpe3ZhciBuPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub3RlLWNsdXN0ZXIiKS5hdHRyKCJpZCIsZS5pZCkscj1uLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLGk9MCplLnBhZGRpbmcsYT1pLzI7ci5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoIngiLGUueC1lLndpZHRoLzItYSkuYXR0cigieSIsZS55LWUuaGVpZ2h0LzItYSkuYXR0cigid2lkdGgiLGUud2lkdGgraSkuYXR0cigiaGVpZ2h0IixlLmhlaWdodCtpKS5hdHRyKCJmaWxsIiwibm9uZSIpO3ZhciBvPXIubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS53aWR0aD1vLndpZHRoLGUuaGVpZ2h0PW8uaGVpZ2h0LGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBNZShlLHQpfSxufSxkaXZpZGVyOmZ1bmN0aW9uKHQsZSl7dmFyIG49dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsZS5jbGFzc2VzKS5hdHRyKCJpZCIsZS5pZCkscj1uLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLGk9MCplLnBhZGRpbmcsYT1pLzI7ci5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4IixlLngtZS53aWR0aC8yLWEpLmF0dHIoInkiLGUueS1lLmhlaWdodC8yKS5hdHRyKCJ3aWR0aCIsZS53aWR0aCtpKS5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0K2kpO3ZhciBvPXIubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS53aWR0aD1vLndpZHRoLGUuaGVpZ2h0PW8uaGVpZ2h0LGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBNZShlLHQpfSxufX0sRmU9e30sUGU9e30samU9e30sWWU9ZnVuY3Rpb24odCxlKXtjLndhcm4oImFiYzg4IGN1dFBhdGhBdEludGVyc2VjdCIsdCxlKTt2YXIgbj1bXSxyPXRbMF0saT0hMTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXtpZihjLmluZm8oImFiYzg4IGNoZWNraW5nIHBvaW50Iix0LGUpLGZ1bmN0aW9uKHQsZSl7dmFyIG49dC54LHI9dC55LGk9TWF0aC5hYnMoZS54LW4pLGE9TWF0aC5hYnMoZS55LXIpLG89dC53aWR0aC8yLHM9dC5oZWlnaHQvMjtyZXR1cm4gaT49b3x8YT49c30oZSx0KXx8aSljLndhcm4oImFiYzg4IG91dHNpZGUiLHQscikscj10LGl8fG4ucHVzaCh0KTtlbHNle3ZhciBhPWZ1bmN0aW9uKHQsZSxuKXtjLndhcm4oImludGVyc2VjdGlvbiBjYWxjIGFiYzg5OlxuICBvdXRzaWRlUG9pbnQ6ICIuY29uY2F0KEpTT04uc3RyaW5naWZ5KGUpLCJcbiAgaW5zaWRlUG9pbnQgOiAiKS5jb25jYXQoSlNPTi5zdHJpbmdpZnkobiksIlxuICBub2RlICAgICAgICA6IHg6IikuY29uY2F0KHQueCwiIHk6IikuY29uY2F0KHQueSwiIHc6IikuY29uY2F0KHQud2lkdGgsIiBoOiIpLmNvbmNhdCh0LmhlaWdodCkpO3ZhciByPXQueCxpPXQueSxhPU1hdGguYWJzKHItbi54KSxvPXQud2lkdGgvMixzPW4ueDxlLng/by1hOm8rYSx1PXQuaGVpZ2h0LzIsbD1NYXRoLmFicyhlLnktbi55KSxoPU1hdGguYWJzKGUueC1uLngpO2lmKE1hdGguYWJzKGktZS55KSpvPk1hdGguYWJzKHItZS54KSp1KXt2YXIgZj1uLnk8ZS55P2UueS11LWk6aS11LWUueTtzPWgqZi9sO3ZhciBkPXt4Om4ueDxlLng/bi54K3M6bi54LWgrcyx5Om4ueTxlLnk/bi55K2wtZjpuLnktbCtmfTtyZXR1cm4gMD09PXMmJihkLng9ZS54LGQueT1lLnkpLDA9PT1oJiYoZC54PWUueCksMD09PWwmJihkLnk9ZS55KSxjLndhcm4oImFiYzg5IHRvcHAvYm90dCBjYWxjLCBRICIuY29uY2F0KGwsIiwgcSAiKS5jb25jYXQoZiwiLCBSICIpLmNvbmNhdChoLCIsIHIgIikuY29uY2F0KHMpLGQpLGR9dmFyIHA9bCoocz1uLng8ZS54P2UueC1vLXI6ci1vLWUueCkvaCx5PW4ueDxlLng/bi54K2gtczpuLngtaCtzLGc9bi55PGUueT9uLnkrcDpuLnktcDtyZXR1cm4gYy53YXJuKCJzaWRlcyBjYWxjIGFiYzg5LCBRICIuY29uY2F0KGwsIiwgcSAiKS5jb25jYXQocCwiLCBSICIpLmNvbmNhdChoLCIsIHIgIikuY29uY2F0KHMpLHtfeDp5LF95Omd9KSwwPT09cyYmKHk9ZS54LGc9ZS55KSwwPT09aCYmKHk9ZS54KSwwPT09bCYmKGc9ZS55KSx7eDp5LHk6Z319KGUscix0KTtjLndhcm4oImFiYzg4IGluc2lkZSIsdCxyLGEpLGMud2FybigiYWJjODggaW50ZXJzZWN0aW9uIixhKTt2YXIgbz0hMTtuLmZvckVhY2goKGZ1bmN0aW9uKHQpe289b3x8dC54PT09YS54JiZ0Lnk9PT1hLnl9KSksbi5maW5kKChmdW5jdGlvbih0KXtyZXR1cm4gdC54PT09YS54JiZ0Lnk9PT1hLnl9KSk/Yy53YXJuKCJhYmM4OCBubyBpbnRlcnNlY3QiLGEsbik6bi5wdXNoKGEpLGk9ITB9fSkpLGMud2FybigiYWJjODggcmV0dXJuaW5nIHBvaW50cyIsbiksbn0semU9ZnVuY3Rpb24gdChlLG4scixpKXtjLmluZm8oIkdyYXBoIGluIHJlY3Vyc2l2ZSByZW5kZXI6IFhYWCIsVXQuYS5qc29uLndyaXRlKG4pLGkpO3ZhciBhPW4uZ3JhcGgoKS5yYW5rZGlyO2MudHJhY2UoIkRpciBpbiByZWN1cnNpdmUgcmVuZGVyIC0gZGlyOiIsYSk7dmFyIG89ZS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsInJvb3QiKTtuLm5vZGVzKCk/Yy5pbmZvKCJSZWN1cnNpdmUgcmVuZGVyIFhYWCIsbi5ub2RlcygpKTpjLmluZm8oIk5vIG5vZGVzIGZvdW5kIGZvciIsbiksbi5lZGdlcygpLmxlbmd0aD4wJiZjLnRyYWNlKCJSZWN1cnNpdmUgZWRnZXMiLG4uZWRnZShuLmVkZ2VzKClbMF0pKTt2YXIgcz1vLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3RlcnMiKSx1PW8uaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlUGF0aHMiKSxsPW8uaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlTGFiZWxzIiksZj1vLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZXMiKTtuLm5vZGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG89bi5ub2RlKGUpO2lmKHZvaWQgMCE9PWkpe3ZhciBzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaS5jbHVzdGVyRGF0YSkpO2MuaW5mbygiU2V0dGluZyBkYXRhIGZvciBjbHVzdGVyIFhYWCAoIixlLCIpICIscyxpKSxuLnNldE5vZGUoaS5pZCxzKSxuLnBhcmVudChlKXx8KGMudHJhY2UoIlNldHRpbmcgcGFyZW50IixlLGkuaWQpLG4uc2V0UGFyZW50KGUsaS5pZCxzKSl9aWYoYy5pbmZvKCIoSW5zZXJ0KSBOb2RlIFhYWCIrZSsiOiAiK0pTT04uc3RyaW5naWZ5KG4ubm9kZShlKSkpLG8mJm8uY2x1c3Rlck5vZGUpe2MuaW5mbygiQ2x1c3RlciBpZGVudGlmaWVkIixlLG8ud2lkdGgsbi5ub2RlKGUpKTt2YXIgdT10KGYsby5ncmFwaCxyLG4ubm9kZShlKSksbD11LmVsZW07aGUobyxsKSxvLmRpZmY9dS5kaWZmfHwwLGMuaW5mbygiTm9kZSBib3VuZHMgKGFiYzEyMykiLGUsbyxvLndpZHRoLG8ueCxvLnkpLGZ1bmN0aW9uKHQsZSl7TGVbZS5pZF09dH0obCxvKSxjLndhcm4oIlJlY3Vyc2l2ZSByZW5kZXIgY29tcGxldGUgIixsLG8pfWVsc2Ugbi5jaGlsZHJlbihlKS5sZW5ndGg+MD8oYy5pbmZvKCJDbHVzdGVyIC0gdGhlIG5vbiByZWN1cnNpdmUgcGF0aCBYWFgiLGUsby5pZCxvLG4pLGMuaW5mbyhtZShvLmlkLG4pKSxkZVtvLmlkXT17aWQ6bWUoby5pZCxuKSxub2RlOm99KTooYy5pbmZvKCJOb2RlIC0gdGhlIG5vbiByZWN1cnNpdmUgcGF0aCIsZSxvLmlkLG8pLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpO2UubGluaz8ocj10Lmluc2VydCgic3ZnOmEiKS5hdHRyKCJ4bGluazpocmVmIixlLmxpbmspLmF0dHIoInRhcmdldCIsZS5saW5rVGFyZ2V0fHwiX2JsYW5rIiksaT1EZVtlLnNoYXBlXShyLGUsbikpOnI9aT1EZVtlLnNoYXBlXSh0LGUsbiksZS50b29sdGlwJiZpLmF0dHIoInRpdGxlIixlLnRvb2x0aXApLGUuY2xhc3MmJmkuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQgIitlLmNsYXNzKSxMZVtlLmlkXT1yLGUuaGF2ZUNhbGxiYWNrJiZMZVtlLmlkXS5hdHRyKCJjbGFzcyIsTGVbZS5pZF0uYXR0cigiY2xhc3MiKSsiIGNsaWNrYWJsZSIpfShmLG4ubm9kZShlKSxhKSl9KSksbi5lZGdlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uZWRnZSh0LnYsdC53LHQubmFtZSk7Yy5pbmZvKCJFZGdlICIrdC52KyIgLT4gIit0LncrIjogIitKU09OLnN0cmluZ2lmeSh0KSksYy5pbmZvKCJFZGdlICIrdC52KyIgLT4gIit0LncrIjogIix0LCIgIixKU09OLnN0cmluZ2lmeShuLmVkZ2UodCkpKSxjLmluZm8oIkZpeCIsZGUsImlkczoiLHQudix0LncsIlRyYW5zbGF0ZWluZzogIixkZVt0LnZdLGRlW3Qud10pLGZ1bmN0aW9uKHQsZSl7dmFyIG49dWUoZS5sYWJlbCxlLmxhYmVsU3R5bGUpLHI9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VMYWJlbCIpLGk9ci5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIik7aS5ub2RlKCkuYXBwZW5kQ2hpbGQobik7dmFyIGE9bi5nZXRCQm94KCk7aWYoeChfdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7dmFyIG89bi5jaGlsZHJlblswXSxzPU9iamVjdChoLnNlbGVjdCkobik7YT1vLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHMuYXR0cigid2lkdGgiLGEud2lkdGgpLHMuYXR0cigiaGVpZ2h0IixhLmhlaWdodCl9aWYoaS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistYS53aWR0aC8yKyIsICIrLWEuaGVpZ2h0LzIrIikiKSxQZVtlLmlkXT1yLGUud2lkdGg9YS53aWR0aCxlLmhlaWdodD1hLmhlaWdodCxlLnN0YXJ0TGFiZWxMZWZ0KXt2YXIgYz11ZShlLnN0YXJ0TGFiZWxMZWZ0LGUubGFiZWxTdHlsZSksdT10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLGw9dS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7bC5ub2RlKCkuYXBwZW5kQ2hpbGQoYyk7dmFyIGY9Yy5nZXRCQm94KCk7bC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistZi53aWR0aC8yKyIsICIrLWYuaGVpZ2h0LzIrIikiKSxqZVtlLmlkXXx8KGplW2UuaWRdPXt9KSxqZVtlLmlkXS5zdGFydExlZnQ9dX1pZihlLnN0YXJ0TGFiZWxSaWdodCl7dmFyIGQ9dWUoZS5zdGFydExhYmVsUmlnaHQsZS5sYWJlbFN0eWxlKSxwPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIikseT1wLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTtwLm5vZGUoKS5hcHBlbmRDaGlsZChkKSx5Lm5vZGUoKS5hcHBlbmRDaGlsZChkKTt2YXIgZz1kLmdldEJCb3goKTt5LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1nLndpZHRoLzIrIiwgIistZy5oZWlnaHQvMisiKSIpLGplW2UuaWRdfHwoamVbZS5pZF09e30pLGplW2UuaWRdLnN0YXJ0UmlnaHQ9cH1pZihlLmVuZExhYmVsTGVmdCl7dmFyIHY9dWUoZS5lbmRMYWJlbExlZnQsZS5sYWJlbFN0eWxlKSxtPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksYj1tLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTtiLm5vZGUoKS5hcHBlbmRDaGlsZCh2KTt2YXIgXz12LmdldEJCb3goKTtiLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1fLndpZHRoLzIrIiwgIistXy5oZWlnaHQvMisiKSIpLG0ubm9kZSgpLmFwcGVuZENoaWxkKHYpLGplW2UuaWRdfHwoamVbZS5pZF09e30pLGplW2UuaWRdLmVuZExlZnQ9bX1pZihlLmVuZExhYmVsUmlnaHQpe3ZhciBrPXVlKGUuZW5kTGFiZWxSaWdodCxlLmxhYmVsU3R5bGUpLHc9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VUZXJtaW5hbHMiKSxFPXcuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJpbm5lciIpO0Uubm9kZSgpLmFwcGVuZENoaWxkKGspO3ZhciBUPWsuZ2V0QkJveCgpO0UuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLVQud2lkdGgvMisiLCAiKy1ULmhlaWdodC8yKyIpIiksdy5ub2RlKCkuYXBwZW5kQ2hpbGQoayksamVbZS5pZF18fChqZVtlLmlkXT17fSksamVbZS5pZF0uZW5kUmlnaHQ9d319KGwsZSl9KSksbi5lZGdlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2MuaW5mbygiRWRnZSAiK3QudisiIC0+ICIrdC53KyI6ICIrSlNPTi5zdHJpbmdpZnkodCkpfSkpLGMuaW5mbygiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIiksYy5pbmZvKCIjIyMgICAgICAgICAgICAgICAgTGF5b3V0ICAgICAgICAgICAgICAgICAjIyMiKSxjLmluZm8oIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpLGMuaW5mbyhuKSxZdC5hLmxheW91dChuKSxjLmluZm8oIkdyYXBoIGFmdGVyIGxheW91dDoiLFV0LmEuanNvbi53cml0ZShuKSk7dmFyIGQ9MDtyZXR1cm4ga2UobikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5ub2RlKHQpO2MuaW5mbygiUG9zaXRpb24gIit0KyI6ICIrSlNPTi5zdHJpbmdpZnkobi5ub2RlKHQpKSksYy5pbmZvKCJQb3NpdGlvbiAiK3QrIjogKCIrZS54LCIsIitlLnksIikgd2lkdGg6ICIsZS53aWR0aCwiIGhlaWdodDogIixlLmhlaWdodCksZSYmZS5jbHVzdGVyTm9kZT9JZShlKTpuLmNoaWxkcmVuKHQpLmxlbmd0aD4wPyghZnVuY3Rpb24odCxlKXtjLnRyYWNlKCJJbnNlcnRpbmcgY2x1c3RlciIpO3ZhciBuPWUuc2hhcGV8fCJyZWN0IjtGZVtlLmlkXT1SZVtuXSh0LGUpfShzLGUpLGRlW2UuaWRdLm5vZGU9ZSk6SWUoZSl9KSksbi5lZGdlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uZWRnZSh0KTtjLmluZm8oIkVkZ2UgIit0LnYrIiAtPiAiK3QudysiOiAiK0pTT04uc3RyaW5naWZ5KGUpLGUpLGZ1bmN0aW9uKHQsZSl7Yy5pbmZvKCJNb3ZpbmcgbGFiZWwgYWJjNzggIix0LmlkLHQubGFiZWwsUGVbdC5pZF0pO3ZhciBuPWUudXBkYXRlZFBhdGg/ZS51cGRhdGVkUGF0aDplLm9yaWdpbmFsUGF0aDtpZih0LmxhYmVsKXt2YXIgcj1QZVt0LmlkXSxpPXQueCxhPXQueTtpZihuKXt2YXIgbz1WLmNhbGNMYWJlbFBvc2l0aW9uKG4pO2MuaW5mbygiTW92aW5nIGxhYmVsIGZyb20gKCIsaSwiLCIsYSwiKSB0byAoIixvLngsIiwiLG8ueSwiKSBhYmM3OCIpfXIuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIraSsiLCAiK2ErIikiKX1pZih0LnN0YXJ0TGFiZWxMZWZ0KXt2YXIgcz1qZVt0LmlkXS5zdGFydExlZnQsdT10LngsbD10Lnk7aWYobil7dmFyIGg9Vi5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKDAsInN0YXJ0X2xlZnQiLG4pO3U9aC54LGw9aC55fXMuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdSsiLCAiK2wrIikiKX1pZih0LnN0YXJ0TGFiZWxSaWdodCl7dmFyIGY9amVbdC5pZF0uc3RhcnRSaWdodCxkPXQueCxwPXQueTtpZihuKXt2YXIgeT1WLmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24oMCwic3RhcnRfcmlnaHQiLG4pO2Q9eS54LHA9eS55fWYuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZCsiLCAiK3ArIikiKX1pZih0LmVuZExhYmVsTGVmdCl7dmFyIGc9amVbdC5pZF0uZW5kTGVmdCx2PXQueCxtPXQueTtpZihuKXt2YXIgYj1WLmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24oMCwiZW5kX2xlZnQiLG4pO3Y9Yi54LG09Yi55fWcuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdisiLCAiK20rIikiKX1pZih0LmVuZExhYmVsUmlnaHQpe3ZhciB4PWplW3QuaWRdLmVuZFJpZ2h0LF89dC54LGs9dC55O2lmKG4pe3ZhciB3PVYuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbigwLCJlbmRfcmlnaHQiLG4pO189dy54LGs9dy55fXguYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrXysiLCAiK2srIikiKX19KGUsZnVuY3Rpb24odCxlLG4scixpLGEpe3ZhciBvPW4ucG9pbnRzLHM9ITEsdT1hLm5vZGUoZS52KSxsPWEubm9kZShlLncpO2MuaW5mbygiYWJjODggSW5zZXJ0RWRnZTogIixuKSxsLmludGVyc2VjdCYmdS5pbnRlcnNlY3QmJigobz1vLnNsaWNlKDEsbi5wb2ludHMubGVuZ3RoLTEpKS51bnNoaWZ0KHUuaW50ZXJzZWN0KG9bMF0pKSxjLmluZm8oIkxhc3QgcG9pbnQiLG9bby5sZW5ndGgtMV0sbCxsLmludGVyc2VjdChvW28ubGVuZ3RoLTFdKSksby5wdXNoKGwuaW50ZXJzZWN0KG9bby5sZW5ndGgtMV0pKSksbi50b0NsdXN0ZXImJihjLmluZm8oInRvIGNsdXN0ZXIgYWJjODgiLHJbbi50b0NsdXN0ZXJdKSxvPVllKG4ucG9pbnRzLHJbbi50b0NsdXN0ZXJdLm5vZGUpLHM9ITApLG4uZnJvbUNsdXN0ZXImJihjLmluZm8oImZyb20gY2x1c3RlciBhYmM4OCIscltuLmZyb21DbHVzdGVyXSksbz1ZZShvLnJldmVyc2UoKSxyW24uZnJvbUNsdXN0ZXJdLm5vZGUpLnJldmVyc2UoKSxzPSEwKTt2YXIgZixkPW8uZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4hTnVtYmVyLmlzTmFOKHQueSl9KSk7Zj0oImdyYXBoIj09PWl8fCJmbG93Y2hhcnQiPT09aSkmJm4uY3VydmV8fGguY3VydmVCYXNpczt2YXIgcCx5PU9iamVjdChoLmxpbmUpKCkueCgoZnVuY3Rpb24odCl7cmV0dXJuIHQueH0pKS55KChmdW5jdGlvbih0KXtyZXR1cm4gdC55fSkpLmN1cnZlKGYpO3N3aXRjaChuLnRoaWNrbmVzcyl7Y2FzZSJub3JtYWwiOnA9ImVkZ2UtdGhpY2tuZXNzLW5vcm1hbCI7YnJlYWs7Y2FzZSJ0aGljayI6cD0iZWRnZS10aGlja25lc3MtdGhpY2siO2JyZWFrO2RlZmF1bHQ6cD0iIn1zd2l0Y2gobi5wYXR0ZXJuKXtjYXNlInNvbGlkIjpwKz0iIGVkZ2UtcGF0dGVybi1zb2xpZCI7YnJlYWs7Y2FzZSJkb3R0ZWQiOnArPSIgZWRnZS1wYXR0ZXJuLWRvdHRlZCI7YnJlYWs7Y2FzZSJkYXNoZWQiOnArPSIgZWRnZS1wYXR0ZXJuLWRhc2hlZCJ9dmFyIGc9dC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIix5KGQpKS5hdHRyKCJpZCIsbi5pZCkuYXR0cigiY2xhc3MiLCIgIitwKyhuLmNsYXNzZXM/IiAiK24uY2xhc3NlczoiIikpLmF0dHIoInN0eWxlIixuLnN0eWxlKSx2PSIiO3N3aXRjaChfdCgpLnN0YXRlLmFycm93TWFya2VyQWJzb2x1dGUmJih2PSh2PSh2PXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5yZXBsYWNlKC9cKC9nLCJcXCgiKSkucmVwbGFjZSgvXCkvZywiXFwpIikpLGMuaW5mbygiYXJyb3dUeXBlU3RhcnQiLG4uYXJyb3dUeXBlU3RhcnQpLGMuaW5mbygiYXJyb3dUeXBlRW5kIixuLmFycm93VHlwZUVuZCksbi5hcnJvd1R5cGVTdGFydCl7Y2FzZSJhcnJvd19jcm9zcyI6Zy5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIit2KyIjIitpKyItY3Jvc3NTdGFydCkiKTticmVhaztjYXNlImFycm93X3BvaW50IjpnLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK3YrIiMiK2krIi1wb2ludFN0YXJ0KSIpO2JyZWFrO2Nhc2UiYXJyb3dfYmFyYiI6Zy5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIit2KyIjIitpKyItYmFyYlN0YXJ0KSIpO2JyZWFrO2Nhc2UiYXJyb3dfY2lyY2xlIjpnLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK3YrIiMiK2krIi1jaXJjbGVTdGFydCkiKTticmVhaztjYXNlImFnZ3JlZ2F0aW9uIjpnLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK3YrIiMiK2krIi1hZ2dyZWdhdGlvblN0YXJ0KSIpO2JyZWFrO2Nhc2UiZXh0ZW5zaW9uIjpnLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK3YrIiMiK2krIi1leHRlbnNpb25TdGFydCkiKTticmVhaztjYXNlImNvbXBvc2l0aW9uIjpnLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK3YrIiMiK2krIi1jb21wb3NpdGlvblN0YXJ0KSIpO2JyZWFrO2Nhc2UiZGVwZW5kZW5jeSI6Zy5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIit2KyIjIitpKyItZGVwZW5kZW5jeVN0YXJ0KSIpfXN3aXRjaChuLmFycm93VHlwZUVuZCl7Y2FzZSJhcnJvd19jcm9zcyI6Zy5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrdisiIyIraSsiLWNyb3NzRW5kKSIpO2JyZWFrO2Nhc2UiYXJyb3dfcG9pbnQiOmcuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3YrIiMiK2krIi1wb2ludEVuZCkiKTticmVhaztjYXNlImFycm93X2JhcmIiOmcuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3YrIiMiK2krIi1iYXJiRW5kKSIpO2JyZWFrO2Nhc2UiYXJyb3dfY2lyY2xlIjpnLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIit2KyIjIitpKyItY2lyY2xlRW5kKSIpO2JyZWFrO2Nhc2UiYWdncmVnYXRpb24iOmcuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3YrIiMiK2krIi1hZ2dyZWdhdGlvbkVuZCkiKTticmVhaztjYXNlImV4dGVuc2lvbiI6Zy5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrdisiIyIraSsiLWV4dGVuc2lvbkVuZCkiKTticmVhaztjYXNlImNvbXBvc2l0aW9uIjpnLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIit2KyIjIitpKyItY29tcG9zaXRpb25FbmQpIik7YnJlYWs7Y2FzZSJkZXBlbmRlbmN5IjpnLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIit2KyIjIitpKyItZGVwZW5kZW5jeUVuZCkiKX12YXIgbT17fTtyZXR1cm4gcyYmKG0udXBkYXRlZFBhdGg9byksbS5vcmlnaW5hbFBhdGg9bi5wb2ludHMsbX0odSx0LGUsZGUscixuKSl9KSksbi5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4ubm9kZSh0KTtjLmluZm8odCxlLnR5cGUsZS5kaWZmKSwiZ3JvdXAiPT09ZS50eXBlJiYoZD1lLmRpZmYpfSkpLHtlbGVtOm8sZGlmZjpkfX0sVWU9ZnVuY3Rpb24odCxlLG4scixpKXtzZSh0LG4scixpKSxMZT17fSxQZT17fSxqZT17fSxGZT17fSxwZT17fSx5ZT17fSxkZT17fSxjLndhcm4oIkdyYXBoIGF0IGZpcnN0OiIsVXQuYS5qc29uLndyaXRlKGUpKSx4ZShlKSxjLndhcm4oIkdyYXBoIGFmdGVyOiIsVXQuYS5qc29uLndyaXRlKGUpKSx6ZSh0LGUscil9OyR0LnBhcnNlci55eT1QdDt2YXIgJGU9e2RpdmlkZXJNYXJnaW46MTAscGFkZGluZzo1LHRleHRIZWlnaHQ6MTB9LHFlPWZ1bmN0aW9uKHQpe09iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKGUpeyRlW2VdPXRbZV19KSl9LFdlPWZ1bmN0aW9uKHQsZSl7Yy5pbmZvKCJEcmF3aW5nIGNsYXNzIiksUHQuY2xlYXIoKSwkdC5wYXJzZXIucGFyc2UodCk7dmFyIG49X3QoKS5mbG93Y2hhcnQ7Yy5pbmZvKCJjb25maWc6IixuKTt2YXIgcj1uLm5vZGVTcGFjaW5nfHw1MCxpPW4ucmFua1NwYWNpbmd8fDUwLGE9bmV3IFV0LmEuR3JhcGgoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cmFua2RpcjoiVEQiLG5vZGVzZXA6cixyYW5rc2VwOmksbWFyZ2lueDo4LG1hcmdpbnk6OH0pLnNldERlZmF1bHRFZGdlTGFiZWwoKGZ1bmN0aW9uKCl7cmV0dXJue319KSksbz1QdC5nZXRDbGFzc2VzKCkscz1QdC5nZXRSZWxhdGlvbnMoKTtjLmluZm8ocyksZnVuY3Rpb24odCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtjLmluZm8oImtleXM6IixuKSxjLmluZm8odCksbi5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgcj10W25dLGk9IiI7ci5jc3NDbGFzc2VzLmxlbmd0aD4wJiYoaT1pKyIgIityLmNzc0NsYXNzZXMuam9pbigiICIpKTt2YXIgYT17bGFiZWxTdHlsZToiIn0sbz12b2lkIDAhPT1yLnRleHQ/ci50ZXh0OnIuaWQscz0iIjtzd2l0Y2goci50eXBlKXtjYXNlImNsYXNzIjpzPSJjbGFzc19ib3giO2JyZWFrO2RlZmF1bHQ6cz0iY2xhc3NfYm94In1lLnNldE5vZGUoci5pZCx7bGFiZWxTdHlsZTphLmxhYmVsU3R5bGUsc2hhcGU6cyxsYWJlbFRleHQ6byxjbGFzc0RhdGE6cixyeDowLHJ5OjAsY2xhc3M6aSxzdHlsZTphLnN0eWxlLGlkOnIuaWQsZG9tSWQ6ci5kb21JZCxoYXZlQ2FsbGJhY2s6ci5oYXZlQ2FsbGJhY2ssbGluazpyLmxpbmssd2lkdGg6Imdyb3VwIj09PXIudHlwZT81MDA6dm9pZCAwLHR5cGU6ci50eXBlLHBhZGRpbmc6X3QoKS5mbG93Y2hhcnQucGFkZGluZ30pLGMuaW5mbygic2V0Tm9kZSIse2xhYmVsU3R5bGU6YS5sYWJlbFN0eWxlLHNoYXBlOnMsbGFiZWxUZXh0Om8scng6MCxyeTowLGNsYXNzOmksc3R5bGU6YS5zdHlsZSxpZDpyLmlkLHdpZHRoOiJncm91cCI9PT1yLnR5cGU/NTAwOnZvaWQgMCx0eXBlOnIudHlwZSxwYWRkaW5nOl90KCkuZmxvd2NoYXJ0LnBhZGRpbmd9KX0pKX0obyxhKSxmdW5jdGlvbih0LGUpe3ZhciBuPTA7dC5mb3JFYWNoKChmdW5jdGlvbihyKXtuKys7dmFyIGk9e2NsYXNzZXM6InJlbGF0aW9uIn07aS5wYXR0ZXJuPTE9PXIucmVsYXRpb24ubGluZVR5cGU/ImRhc2hlZCI6InNvbGlkIixpLmlkPSJpZCIrbiwiYXJyb3dfb3BlbiI9PT1yLnR5cGU/aS5hcnJvd2hlYWQ9Im5vbmUiOmkuYXJyb3doZWFkPSJub3JtYWwiLGMuaW5mbyhpLHIpLGkuc3RhcnRMYWJlbFJpZ2h0PSJub25lIj09PXIucmVsYXRpb25UaXRsZTE/IiI6ci5yZWxhdGlvblRpdGxlMSxpLmVuZExhYmVsTGVmdD0ibm9uZSI9PT1yLnJlbGF0aW9uVGl0bGUyPyIiOnIucmVsYXRpb25UaXRsZTIsaS5hcnJvd1R5cGVTdGFydD1WZShyLnJlbGF0aW9uLnR5cGUxKSxpLmFycm93VHlwZUVuZD1WZShyLnJlbGF0aW9uLnR5cGUyKTt2YXIgYT0iIixvPSIiO2lmKHZvaWQgMCE9PXIuc3R5bGUpe3ZhciBzPUwoci5zdHlsZSk7YT1zLnN0eWxlLG89cy5sYWJlbFN0eWxlfWVsc2UgYT0iZmlsbDpub25lIjtpLnN0eWxlPWEsaS5sYWJlbFN0eWxlPW8sdm9pZCAwIT09ci5pbnRlcnBvbGF0ZT9pLmN1cnZlPU4oci5pbnRlcnBvbGF0ZSxoLmN1cnZlTGluZWFyKTp2b2lkIDAhPT10LmRlZmF1bHRJbnRlcnBvbGF0ZT9pLmN1cnZlPU4odC5kZWZhdWx0SW50ZXJwb2xhdGUsaC5jdXJ2ZUxpbmVhcik6aS5jdXJ2ZT1OKCRlLmN1cnZlLGguY3VydmVMaW5lYXIpLHIudGV4dD1yLnRpdGxlLHZvaWQgMD09PXIudGV4dD92b2lkIDAhPT1yLnN0eWxlJiYoaS5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIpOihpLmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIixpLmxhYmVscG9zPSJjIixfdCgpLmZsb3djaGFydC5odG1sTGFiZWxzLGkubGFiZWxUeXBlPSJ0ZXh0IixpLmxhYmVsPXIudGV4dC5yZXBsYWNlKF8ubGluZUJyZWFrUmVnZXgsIlxuIiksdm9pZCAwPT09ci5zdHlsZSYmKGkuc3R5bGU9aS5zdHlsZXx8InN0cm9rZTogIzMzMzsgc3Ryb2tlLXdpZHRoOiAxLjVweDtmaWxsOm5vbmUiKSxpLmxhYmVsU3R5bGU9aS5sYWJlbFN0eWxlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IikpLGUuc2V0RWRnZShyLmlkMSxyLmlkMixpLG4pfSkpfShzLGEpO3ZhciB1PU9iamVjdChoLnNlbGVjdCkoJ1tpZD0iJy5jb25jYXQoZSwnIl0nKSk7dS5hdHRyKCJ4bWxuczp4bGluayIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiKTt2YXIgbD1PYmplY3QoaC5zZWxlY3QpKCIjIitlKyIgZyIpO1VlKGwsYSxbImFnZ3JlZ2F0aW9uIiwiZXh0ZW5zaW9uIiwiY29tcG9zaXRpb24iLCJkZXBlbmRlbmN5Il0sImNsYXNzRGlhZ3JhbSIsZSk7dmFyIGY9dS5ub2RlKCkuZ2V0QkJveCgpLGQ9Zi53aWR0aCsxNixwPWYuaGVpZ2h0KzE2O2lmKGMuZGVidWcoIm5ldyBWaWV3Qm94IDAgMCAiLmNvbmNhdChkLCIgIikuY29uY2F0KHApLCJ0cmFuc2xhdGUoIi5jb25jYXQoOC1hLl9sYWJlbC5tYXJnaW54LCIsICIpLmNvbmNhdCg4LWEuX2xhYmVsLm1hcmdpbnksIikiKSksVyh1LHAsZCxuLnVzZU1heFdpZHRoKSx1LmF0dHIoInZpZXdCb3giLCIwIDAgIi5jb25jYXQoZCwiICIpLmNvbmNhdChwKSksdS5zZWxlY3QoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIi5jb25jYXQoOC1hLl9sYWJlbC5tYXJnaW54LCIsICIpLmNvbmNhdCg4LWYueSwiKSIpKSwhbi5odG1sTGFiZWxzKWZvcih2YXIgeT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaWQ9IicrZSsnIl0gLmVkZ2VMYWJlbCAubGFiZWwnKSxnPTA7Zzx5Lmxlbmd0aDtnKyspe3ZhciB2PXlbZ10sbT12LmdldEJCb3goKSxiPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJyZWN0Iik7Yi5zZXRBdHRyaWJ1dGUoInJ4IiwwKSxiLnNldEF0dHJpYnV0ZSgicnkiLDApLGIuc2V0QXR0cmlidXRlKCJ3aWR0aCIsbS53aWR0aCksYi5zZXRBdHRyaWJ1dGUoImhlaWdodCIsbS5oZWlnaHQpLGIuc2V0QXR0cmlidXRlKCJzdHlsZSIsImZpbGw6I2U4ZThlODsiKSx2Lmluc2VydEJlZm9yZShiLHYuZmlyc3RDaGlsZCl9fTtmdW5jdGlvbiBWZSh0KXt2YXIgZTtzd2l0Y2godCl7Y2FzZSAwOmU9ImFnZ3JlZ2F0aW9uIjticmVhaztjYXNlIDE6ZT0iZXh0ZW5zaW9uIjticmVhaztjYXNlIDI6ZT0iY29tcG9zaXRpb24iO2JyZWFrO2Nhc2UgMzplPSJkZXBlbmRlbmN5IjticmVhaztkZWZhdWx0OmU9Im5vbmUifXJldHVybiBlfXZhciBIZT17fSxHZT1bXSxYZT0iIixaZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09SGVbdF0mJihIZVt0XT17YXR0cmlidXRlczpbXX0sYy5pbmZvKCJBZGRlZCBuZXcgZW50aXR5IDoiLHQpKSxIZVt0XX0sUWU9e0NhcmRpbmFsaXR5OntaRVJPX09SX09ORToiWkVST19PUl9PTkUiLFpFUk9fT1JfTU9SRToiWkVST19PUl9NT1JFIixPTkVfT1JfTU9SRToiT05FX09SX01PUkUiLE9OTFlfT05FOiJPTkxZX09ORSJ9LElkZW50aWZpY2F0aW9uOntOT05fSURFTlRJRllJTkc6Ik5PTl9JREVOVElGWUlORyIsSURFTlRJRllJTkc6IklERU5USUZZSU5HIn0scGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4pe3ZzLnBhcnNlRGlyZWN0aXZlKHRoaXMsdCxlLG4pfSxnZXRDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm4gX3QoKS5lcn0sYWRkRW50aXR5OlplLGFkZEF0dHJpYnV0ZXM6ZnVuY3Rpb24odCxlKXt2YXIgbixyPVplKHQpO2ZvcihuPWUubGVuZ3RoLTE7bj49MDtuLS0pci5hdHRyaWJ1dGVzLnB1c2goZVtuXSksYy5kZWJ1ZygiQWRkZWQgYXR0cmlidXRlICIsZVtuXS5hdHRyaWJ1dGVOYW1lKX0sZ2V0RW50aXRpZXM6ZnVuY3Rpb24oKXtyZXR1cm4gSGV9LGFkZFJlbGF0aW9uc2hpcDpmdW5jdGlvbih0LGUsbixyKXt2YXIgaT17ZW50aXR5QTp0LHJvbGVBOmUsZW50aXR5QjpuLHJlbFNwZWM6cn07R2UucHVzaChpKSxjLmRlYnVnKCJBZGRlZCBuZXcgcmVsYXRpb25zaGlwIDoiLGkpfSxnZXRSZWxhdGlvbnNoaXBzOmZ1bmN0aW9uKCl7cmV0dXJuIEdlfSxjbGVhcjpmdW5jdGlvbigpe0hlPXt9LEdlPVtdLFhlPSIifSxzZXRUaXRsZTpmdW5jdGlvbih0KXtYZT10fSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiBYZX19LEtlPW4oNzUpLEplPW4ubihLZSksdG49e09OTFlfT05FX1NUQVJUOiJPTkxZX09ORV9TVEFSVCIsT05MWV9PTkVfRU5EOiJPTkxZX09ORV9FTkQiLFpFUk9fT1JfT05FX1NUQVJUOiJaRVJPX09SX09ORV9TVEFSVCIsWkVST19PUl9PTkVfRU5EOiJaRVJPX09SX09ORV9FTkQiLE9ORV9PUl9NT1JFX1NUQVJUOiJPTkVfT1JfTU9SRV9TVEFSVCIsT05FX09SX01PUkVfRU5EOiJPTkVfT1JfTU9SRV9FTkQiLFpFUk9fT1JfTU9SRV9TVEFSVDoiWkVST19PUl9NT1JFX1NUQVJUIixaRVJPX09SX01PUkVfRU5EOiJaRVJPX09SX01PUkVfRU5EIn0sZW49dG4sbm49ZnVuY3Rpb24odCxlKXt2YXIgbjt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHRuLk9OTFlfT05FX1NUQVJUKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw5KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTgpLmF0dHIoIm1hcmtlckhlaWdodCIsMTgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNOSwwIEw5LDE4IE0xNSwwIEwxNSwxOCIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdG4uT05MWV9PTkVfRU5EKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsOSkuYXR0cigibWFya2VyV2lkdGgiLDE4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixlLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTMsMCBMMywxOCBNOSwwIEw5LDE4IiksKG49dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIix0bi5aRVJPX09SX09ORV9TVEFSVCkuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsOSkuYXR0cigibWFya2VyV2lkdGgiLDMwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIixlLnN0cm9rZSkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY3giLDIxKS5hdHRyKCJjeSIsOSkuYXR0cigiciIsNiksbi5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNOSwwIEw5LDE4IiksKG49dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIix0bi5aRVJPX09SX09ORV9FTkQpLmF0dHIoInJlZlgiLDMwKS5hdHRyKCJyZWZZIiw5KS5hdHRyKCJtYXJrZXJXaWR0aCIsMzApLmF0dHIoIm1hcmtlckhlaWdodCIsMTgpLmF0dHIoIm9yaWVudCIsImF1dG8iKSkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjeCIsOSkuYXR0cigiY3kiLDkpLmF0dHIoInIiLDYpLG4uYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixlLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTIxLDAgTDIxLDE4IiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIix0bi5PTkVfT1JfTU9SRV9TVEFSVCkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNDUpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMCwxOCBRIDE4LDAgMzYsMTggUSAxOCwzNiAwLDE4IE00Miw5IEw0MiwyNyIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdG4uT05FX09SX01PUkVfRU5EKS5hdHRyKCJyZWZYIiwyNykuYXR0cigicmVmWSIsMTgpLmF0dHIoIm1hcmtlcldpZHRoIiw0NSkuYXR0cigibWFya2VySGVpZ2h0IiwzNikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0zLDkgTDMsMjcgTTksMTggUTI3LDAgNDUsMTggUTI3LDM2IDksMTgiKSwobj10LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHRuLlpFUk9fT1JfTU9SRV9TVEFSVCkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNTcpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKSkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjeCIsNDgpLmF0dHIoImN5IiwxOCkuYXR0cigiciIsNiksbi5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMCwxOCBRMTgsMCAzNiwxOCBRMTgsMzYgMCwxOCIpLChuPXQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdG4uWkVST19PUl9NT1JFX0VORCkuYXR0cigicmVmWCIsMzkpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNTcpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKSkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjeCIsOSkuYXR0cigiY3kiLDE4KS5hdHRyKCJyIiw2KSxuLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0yMSwxOCBRMzksMCA1NywxOCBRMzksMzYgMjEsMTgiKX0scm49e30sYW49ZnVuY3Rpb24odCxlLG4pe3ZhciByO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihpKXt2YXIgYT10LmFwcGVuZCgiZyIpLmF0dHIoImlkIixpKTtyPXZvaWQgMD09PXI/aTpyO3ZhciBvPSJlbnRpdHktIitpLHM9YS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImVyIGVudGl0eUxhYmVsIikuYXR0cigiaWQiLG8pLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJzdHlsZSIsImZvbnQtZmFtaWx5OiAiK190KCkuZm9udEZhbWlseSsiOyBmb250LXNpemU6ICIrcm4uZm9udFNpemUrInB4IikudGV4dChpKSxjPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1ybi5lbnRpdHlQYWRkaW5nLzMsaT1ybi5lbnRpdHlQYWRkaW5nLzMsYT0uODUqcm4uZm9udFNpemUsbz1lLm5vZGUoKS5nZXRCQm94KCkscz1bXSxjPTAsdT0wLGw9by5oZWlnaHQrMipyLGg9MTtuLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBpPSIiLmNvbmNhdChlLm5vZGUoKS5pZCwiLWF0dHItIikuY29uY2F0KGgpLG89dC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImVyIGVudGl0eUxhYmVsIikuYXR0cigiaWQiLCIiLmNvbmNhdChpLCItdHlwZSIpKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibGVmdCIpLmF0dHIoInN0eWxlIiwiZm9udC1mYW1pbHk6ICIrX3QoKS5mb250RmFtaWx5KyI7IGZvbnQtc2l6ZTogIithKyJweCIpLnRleHQobi5hdHRyaWJ1dGVUeXBlKSxmPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJlciBlbnRpdHlMYWJlbCIpLmF0dHIoImlkIiwiIi5jb25jYXQoaSwiLW5hbWUiKSkuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsImxlZnQiKS5hdHRyKCJzdHlsZSIsImZvbnQtZmFtaWx5OiAiK190KCkuZm9udEZhbWlseSsiOyBmb250LXNpemU6ICIrYSsicHgiKS50ZXh0KG4uYXR0cmlidXRlTmFtZSk7cy5wdXNoKHt0bjpvLG5uOmZ9KTt2YXIgZD1vLm5vZGUoKS5nZXRCQm94KCkscD1mLm5vZGUoKS5nZXRCQm94KCk7Yz1NYXRoLm1heChjLGQud2lkdGgpLHU9TWF0aC5tYXgodSxwLndpZHRoKSxsKz1NYXRoLm1heChkLmhlaWdodCxwLmhlaWdodCkrMipyLGgrPTF9KSk7dmFyIGY9e3dpZHRoOk1hdGgubWF4KHJuLm1pbkVudGl0eVdpZHRoLE1hdGgubWF4KG8ud2lkdGgrMipybi5lbnRpdHlQYWRkaW5nLGMrdSs0KmkpKSxoZWlnaHQ6bi5sZW5ndGg+MD9sOk1hdGgubWF4KHJuLm1pbkVudGl0eUhlaWdodCxvLmhlaWdodCsyKnJuLmVudGl0eVBhZGRpbmcpfSxkPU1hdGgubWF4KDAsZi53aWR0aC0oYyt1KS00KmkpO2lmKG4ubGVuZ3RoPjApe2UuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZi53aWR0aC8yKyIsIisocitvLmhlaWdodC8yKSsiKSIpO3ZhciBwPW8uaGVpZ2h0KzIqcix5PSJhdHRyaWJ1dGVCb3hPZGQiO3MuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49cCtyK01hdGgubWF4KGUudG4ubm9kZSgpLmdldEJCb3goKS5oZWlnaHQsZS5ubi5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodCkvMjtlLnRuLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2krIiwiK24rIikiKTt2YXIgYT10Lmluc2VydCgicmVjdCIsIiMiK2UudG4ubm9kZSgpLmlkKS5hdHRyKCJjbGFzcyIsImVyICIuY29uY2F0KHkpKS5hdHRyKCJmaWxsIixybi5maWxsKS5hdHRyKCJmaWxsLW9wYWNpdHkiLCIxMDAlIikuYXR0cigic3Ryb2tlIixybi5zdHJva2UpLmF0dHIoIngiLDApLmF0dHIoInkiLHApLmF0dHIoIndpZHRoIixjKzIqaStkLzIpLmF0dHIoImhlaWdodCIsZS50bi5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodCsyKnIpO2Uubm4uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKHBhcnNlRmxvYXQoYS5hdHRyKCJ3aWR0aCIpKStpKSsiLCIrbisiKSIpLHQuaW5zZXJ0KCJyZWN0IiwiIyIrZS5ubi5ub2RlKCkuaWQpLmF0dHIoImNsYXNzIiwiZXIgIi5jb25jYXQoeSkpLmF0dHIoImZpbGwiLHJuLmZpbGwpLmF0dHIoImZpbGwtb3BhY2l0eSIsIjEwMCUiKS5hdHRyKCJzdHJva2UiLHJuLnN0cm9rZSkuYXR0cigieCIsIiIuY29uY2F0KGEuYXR0cigieCIpK2EuYXR0cigid2lkdGgiKSkpLmF0dHIoInkiLHApLmF0dHIoIndpZHRoIix1KzIqaStkLzIpLmF0dHIoImhlaWdodCIsZS5ubi5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodCsyKnIpLHArPU1hdGgubWF4KGUudG4ubm9kZSgpLmdldEJCb3goKS5oZWlnaHQsZS5ubi5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodCkrMipyLHk9ImF0dHJpYnV0ZUJveE9kZCI9PXk/ImF0dHJpYnV0ZUJveEV2ZW4iOiJhdHRyaWJ1dGVCb3hPZGQifSkpfWVsc2UgZi5oZWlnaHQ9TWF0aC5tYXgocm4ubWluRW50aXR5SGVpZ2h0LGwpLGUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZi53aWR0aC8yKyIsIitmLmhlaWdodC8yKyIpIik7cmV0dXJuIGZ9KGEscyxlW2ldLmF0dHJpYnV0ZXMpLHU9Yy53aWR0aCxsPWMuaGVpZ2h0LGg9YS5pbnNlcnQoInJlY3QiLCIjIitvKS5hdHRyKCJjbGFzcyIsImVyIGVudGl0eUJveCIpLmF0dHIoImZpbGwiLHJuLmZpbGwpLmF0dHIoImZpbGwtb3BhY2l0eSIsIjEwMCUiKS5hdHRyKCJzdHJva2UiLHJuLnN0cm9rZSkuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigid2lkdGgiLHUpLmF0dHIoImhlaWdodCIsbCkubm9kZSgpLmdldEJCb3goKTtuLnNldE5vZGUoaSx7d2lkdGg6aC53aWR0aCxoZWlnaHQ6aC5oZWlnaHQsc2hhcGU6InJlY3QiLGlkOml9KX0pKSxyfSxvbj1mdW5jdGlvbih0KXtyZXR1cm4odC5lbnRpdHlBK3Qucm9sZUErdC5lbnRpdHlCKS5yZXBsYWNlKC9ccy9nLCIiKX0sc249MCxjbj1mdW5jdGlvbih0KXtmb3IodmFyIGU9T2JqZWN0LmtleXModCksbj0wO248ZS5sZW5ndGg7bisrKXJuW2Vbbl1dPXRbZVtuXV19LHVuPWZ1bmN0aW9uKHQsZSl7Yy5pbmZvKCJEcmF3aW5nIEVSIGRpYWdyYW0iKSxRZS5jbGVhcigpO3ZhciBuPUplLmEucGFyc2VyO24ueXk9UWU7dHJ5e24ucGFyc2UodCl9Y2F0Y2godCl7Yy5kZWJ1ZygiUGFyc2luZyBmYWlsZWQiKX12YXIgcixpPU9iamVjdChoLnNlbGVjdCkoIltpZD0nIi5jb25jYXQoZSwiJ10iKSk7bm4oaSxybikscj1uZXcgVXQuYS5HcmFwaCh7bXVsdGlncmFwaDohMCxkaXJlY3RlZDohMCxjb21wb3VuZDohMX0pLnNldEdyYXBoKHtyYW5rZGlyOnJuLmxheW91dERpcmVjdGlvbixtYXJnaW54OjIwLG1hcmdpbnk6MjAsbm9kZXNlcDoxMDAsZWRnZXNlcDoxMDAscmFua3NlcDoxMDB9KS5zZXREZWZhdWx0RWRnZUxhYmVsKChmdW5jdGlvbigpe3JldHVybnt9fSkpO3ZhciBhLG8scz1hbihpLFFlLmdldEVudGl0aWVzKCksciksdT1mdW5jdGlvbih0LGUpe3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2Uuc2V0RWRnZSh0LmVudGl0eUEsdC5lbnRpdHlCLHtyZWxhdGlvbnNoaXA6dH0sb24odCkpfSkpLHR9KFFlLmdldFJlbGF0aW9uc2hpcHMoKSxyKTtZdC5hLmxheW91dChyKSxhPWksKG89cikubm9kZXMoKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2b2lkIDAhPT10JiZ2b2lkIDAhPT1vLm5vZGUodCkmJmEuc2VsZWN0KCIjIit0KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoby5ub2RlKHQpLngtby5ub2RlKHQpLndpZHRoLzIpKyIsIisoby5ub2RlKHQpLnktby5ub2RlKHQpLmhlaWdodC8yKSsiICkiKX0pKSx1LmZvckVhY2goKGZ1bmN0aW9uKHQpeyFmdW5jdGlvbih0LGUsbixyKXtzbisrO3ZhciBpPW4uZWRnZShlLmVudGl0eUEsZS5lbnRpdHlCLG9uKGUpKSxhPU9iamVjdChoLmxpbmUpKCkueCgoZnVuY3Rpb24odCl7cmV0dXJuIHQueH0pKS55KChmdW5jdGlvbih0KXtyZXR1cm4gdC55fSkpLmN1cnZlKGguY3VydmVCYXNpcyksbz10Lmluc2VydCgicGF0aCIsIiMiK3IpLmF0dHIoImNsYXNzIiwiZXIgcmVsYXRpb25zaGlwTGluZSIpLmF0dHIoImQiLGEoaS5wb2ludHMpKS5hdHRyKCJzdHJva2UiLHJuLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKTtlLnJlbFNwZWMucmVsVHlwZT09PVFlLklkZW50aWZpY2F0aW9uLk5PTl9JREVOVElGWUlORyYmby5hdHRyKCJzdHJva2UtZGFzaGFycmF5IiwiOCw4Iik7dmFyIHM9IiI7c3dpdGNoKHJuLmFycm93TWFya2VyQWJzb2x1dGUmJihzPShzPShzPXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5yZXBsYWNlKC9cKC9nLCJcXCgiKSkucmVwbGFjZSgvXCkvZywiXFwpIikpLGUucmVsU3BlYy5jYXJkQSl7Y2FzZSBRZS5DYXJkaW5hbGl0eS5aRVJPX09SX09ORTpvLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitzKyIjIitlbi5aRVJPX09SX09ORV9FTkQrIikiKTticmVhaztjYXNlIFFlLkNhcmRpbmFsaXR5LlpFUk9fT1JfTU9SRTpvLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitzKyIjIitlbi5aRVJPX09SX01PUkVfRU5EKyIpIik7YnJlYWs7Y2FzZSBRZS5DYXJkaW5hbGl0eS5PTkVfT1JfTU9SRTpvLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitzKyIjIitlbi5PTkVfT1JfTU9SRV9FTkQrIikiKTticmVhaztjYXNlIFFlLkNhcmRpbmFsaXR5Lk9OTFlfT05FOm8uYXR0cigibWFya2VyLWVuZCIsInVybCgiK3MrIiMiK2VuLk9OTFlfT05FX0VORCsiKSIpfXN3aXRjaChlLnJlbFNwZWMuY2FyZEIpe2Nhc2UgUWUuQ2FyZGluYWxpdHkuWkVST19PUl9PTkU6by5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitzKyIjIitlbi5aRVJPX09SX09ORV9TVEFSVCsiKSIpO2JyZWFrO2Nhc2UgUWUuQ2FyZGluYWxpdHkuWkVST19PUl9NT1JFOm8uYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrcysiIyIrZW4uWkVST19PUl9NT1JFX1NUQVJUKyIpIik7YnJlYWs7Y2FzZSBRZS5DYXJkaW5hbGl0eS5PTkVfT1JfTU9SRTpvLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK3MrIiMiK2VuLk9ORV9PUl9NT1JFX1NUQVJUKyIpIik7YnJlYWs7Y2FzZSBRZS5DYXJkaW5hbGl0eS5PTkxZX09ORTpvLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK3MrIiMiK2VuLk9OTFlfT05FX1NUQVJUKyIpIil9dmFyIGM9by5ub2RlKCkuZ2V0VG90YWxMZW5ndGgoKSx1PW8ubm9kZSgpLmdldFBvaW50QXRMZW5ndGgoLjUqYyksbD0icmVsIitzbixmPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJlciByZWxhdGlvbnNoaXBMYWJlbCIpLmF0dHIoImlkIixsKS5hdHRyKCJ4Iix1LngpLmF0dHIoInkiLHUueSkuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInN0eWxlIiwiZm9udC1mYW1pbHk6ICIrX3QoKS5mb250RmFtaWx5KyI7IGZvbnQtc2l6ZTogIitybi5mb250U2l6ZSsicHgiKS50ZXh0KGUucm9sZUEpLm5vZGUoKS5nZXRCQm94KCk7dC5pbnNlcnQoInJlY3QiLCIjIitsKS5hdHRyKCJjbGFzcyIsImVyIHJlbGF0aW9uc2hpcExhYmVsQm94IikuYXR0cigieCIsdS54LWYud2lkdGgvMikuYXR0cigieSIsdS55LWYuaGVpZ2h0LzIpLmF0dHIoIndpZHRoIixmLndpZHRoKS5hdHRyKCJoZWlnaHQiLGYuaGVpZ2h0KS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJmaWxsLW9wYWNpdHkiLCI4NSUiKX0oaSx0LHIscyl9KSk7dmFyIGw9cm4uZGlhZ3JhbVBhZGRpbmcsZj1pLm5vZGUoKS5nZXRCQm94KCksZD1mLndpZHRoKzIqbCxwPWYuaGVpZ2h0KzIqbDtXKGkscCxkLHJuLnVzZU1heFdpZHRoKSxpLmF0dHIoInZpZXdCb3giLCIiLmNvbmNhdChmLngtbCwiICIpLmNvbmNhdChmLnktbCwiICIpLmNvbmNhdChkLCIgIikuY29uY2F0KHApKX07ZnVuY3Rpb24gbG4odCl7cmV0dXJuKGxuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSkodCl9ZnVuY3Rpb24gaG4odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgZT0wLG49bmV3IEFycmF5KHQubGVuZ3RoKTtlPHQubGVuZ3RoO2UrKyluW2VdPXRbZV07cmV0dXJuIG59fSh0KXx8ZnVuY3Rpb24odCl7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdCh0KXx8IltvYmplY3QgQXJndW1lbnRzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkpcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9KCl9dmFyIGZuLGRuLHBuPTAseW49X3QoKSxnbj17fSx2bj1bXSxtbj1bXSxibj1bXSx4bj17fSxfbj17fSxrbj0wLHduPSEwLEVuPVtdLFRuPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1PYmplY3Qua2V5cyhnbiksbj0wO248ZS5sZW5ndGg7bisrKWlmKGduW2Vbbl1dLmlkPT09dClyZXR1cm4gZ25bZVtuXV0uZG9tSWQ7cmV0dXJuIHR9LENuPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXtzdGFydDp0LGVuZDplLHR5cGU6dm9pZCAwLHRleHQ6IiJ9O3ZvaWQgMCE9PShyPW4udGV4dCkmJihpLnRleHQ9Xy5zYW5pdGl6ZVRleHQoci50cmltKCkseW4pLCciJz09PWkudGV4dFswXSYmJyInPT09aS50ZXh0W2kudGV4dC5sZW5ndGgtMV0mJihpLnRleHQ9aS50ZXh0LnN1YnN0cmluZygxLGkudGV4dC5sZW5ndGgtMSkpKSx2b2lkIDAhPT1uJiYoaS50eXBlPW4udHlwZSxpLnN0cm9rZT1uLnN0cm9rZSxpLmxlbmd0aD1uLmxlbmd0aCksdm4ucHVzaChpKX0sU249ZnVuY3Rpb24odCxlKXt0LnNwbGl0KCIsIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49dDt2b2lkIDAhPT1nbltuXSYmZ25bbl0uY2xhc3Nlcy5wdXNoKGUpLHZvaWQgMCE9PXhuW25dJiZ4bltuXS5jbGFzc2VzLnB1c2goZSl9KSl9LEFuPWZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdChoLnNlbGVjdCkoIi5tZXJtYWlkVG9vbHRpcCIpO251bGw9PT0oZS5fZ3JvdXBzfHxlKVswXVswXSYmKGU9T2JqZWN0KGguc2VsZWN0KSgiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJtZXJtYWlkVG9vbHRpcCIpLnN0eWxlKCJvcGFjaXR5IiwwKSksT2JqZWN0KGguc2VsZWN0KSh0KS5zZWxlY3QoInN2ZyIpLnNlbGVjdEFsbCgiZy5ub2RlIikub24oIm1vdXNlb3ZlciIsKGZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0KGguc2VsZWN0KSh0aGlzKTtpZihudWxsIT09dC5hdHRyKCJ0aXRsZSIpKXt2YXIgbj10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2UudHJhbnNpdGlvbigpLmR1cmF0aW9uKDIwMCkuc3R5bGUoIm9wYWNpdHkiLCIuOSIpLGUuaHRtbCh0LmF0dHIoInRpdGxlIikpLnN0eWxlKCJsZWZ0Iix3aW5kb3cuc2Nyb2xsWCtuLmxlZnQrKG4ucmlnaHQtbi5sZWZ0KS8yKyJweCIpLnN0eWxlKCJ0b3AiLHdpbmRvdy5zY3JvbGxZK24udG9wLTE0K2RvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKyJweCIpLHQuY2xhc3NlZCgiaG92ZXIiLCEwKX19KSkub24oIm1vdXNlb3V0IiwoZnVuY3Rpb24oKXtlLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApLnN0eWxlKCJvcGFjaXR5IiwwKSxPYmplY3QoaC5zZWxlY3QpKHRoaXMpLmNsYXNzZWQoImhvdmVyIiwhMSl9KSl9O0VuLnB1c2goQW4pO3ZhciBNbj1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPGJuLmxlbmd0aDtlKyspaWYoYm5bZV0uaWQ9PT10KXJldHVybiBlO3JldHVybi0xfSxPbj0tMSxCbj1bXSxObj1mdW5jdGlvbih0LGUpe3ZhciBuPSExO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3Qubm9kZXMuaW5kZXhPZihlKT49MCYmKG49ITApfSkpLG59LERuPWZ1bmN0aW9uKHQsZSl7dmFyIG49W107cmV0dXJuIHQubm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24ocixpKXtObihlLHIpfHxuLnB1c2godC5ub2Rlc1tpXSl9KSkse25vZGVzOm59fSxMbj17cGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4pe3ZzLnBhcnNlRGlyZWN0aXZlKHRoaXMsdCxlLG4pfSxkZWZhdWx0Q29uZmlnOmZ1bmN0aW9uKCl7cmV0dXJuIHl0LmZsb3djaGFydH0sYWRkVmVydGV4OmZ1bmN0aW9uKHQsZSxuLHIsaSxhKXt2YXIgbyxzPXQ7dm9pZCAwIT09cyYmMCE9PXMudHJpbSgpLmxlbmd0aCYmKHZvaWQgMD09PWduW3NdJiYoZ25bc109e2lkOnMsZG9tSWQ6ImZsb3djaGFydC0iK3MrIi0iK3BuLHN0eWxlczpbXSxjbGFzc2VzOltdfSkscG4rKyx2b2lkIDAhPT1lPyh5bj1fdCgpLCciJz09PShvPV8uc2FuaXRpemVUZXh0KGUudHJpbSgpLHluKSlbMF0mJiciJz09PW9bby5sZW5ndGgtMV0mJihvPW8uc3Vic3RyaW5nKDEsby5sZW5ndGgtMSkpLGduW3NdLnRleHQ9byk6dm9pZCAwPT09Z25bc10udGV4dCYmKGduW3NdLnRleHQ9dCksdm9pZCAwIT09biYmKGduW3NdLnR5cGU9biksbnVsbCE9ciYmci5mb3JFYWNoKChmdW5jdGlvbih0KXtnbltzXS5zdHlsZXMucHVzaCh0KX0pKSxudWxsIT1pJiZpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2duW3NdLmNsYXNzZXMucHVzaCh0KX0pKSx2b2lkIDAhPT1hJiYoZ25bc10uZGlyPWEpKX0sbG9va1VwRG9tSWQ6VG4sYWRkTGluazpmdW5jdGlvbih0LGUsbixyKXt2YXIgaSxhO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspZm9yKGE9MDthPGUubGVuZ3RoO2ErKylDbih0W2ldLGVbYV0sbixyKX0sdXBkYXRlTGlua0ludGVycG9sYXRlOmZ1bmN0aW9uKHQsZSl7dC5mb3JFYWNoKChmdW5jdGlvbih0KXsiZGVmYXVsdCI9PT10P3ZuLmRlZmF1bHRJbnRlcnBvbGF0ZT1lOnZuW3RdLmludGVycG9sYXRlPWV9KSl9LHVwZGF0ZUxpbms6ZnVuY3Rpb24odCxlKXt0LmZvckVhY2goKGZ1bmN0aW9uKHQpeyJkZWZhdWx0Ij09PXQ/dm4uZGVmYXVsdFN0eWxlPWU6KC0xPT09Vi5pc1N1YnN0cmluZ0luQXJyYXkoImZpbGwiLGUpJiZlLnB1c2goImZpbGw6bm9uZSIpLHZuW3RdLnN0eWxlPWUpfSkpfSxhZGRDbGFzczpmdW5jdGlvbih0LGUpe3ZvaWQgMD09PW1uW3RdJiYobW5bdF09e2lkOnQsc3R5bGVzOltdLHRleHRTdHlsZXM6W119KSxudWxsIT1lJiZlLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKGUubWF0Y2goImNvbG9yIikpe3ZhciBuPWUucmVwbGFjZSgiZmlsbCIsImJnRmlsbCIpLnJlcGxhY2UoImNvbG9yIiwiZmlsbCIpO21uW3RdLnRleHRTdHlsZXMucHVzaChuKX1tblt0XS5zdHlsZXMucHVzaChlKX0pKX0sc2V0RGlyZWN0aW9uOmZ1bmN0aW9uKHQpeyhmbj10KS5tYXRjaCgvLio8LykmJihmbj0iUkwiKSxmbi5tYXRjaCgvLipcXi8pJiYoZm49IkJUIiksZm4ubWF0Y2goLy4qPi8pJiYoZm49IkxSIiksZm4ubWF0Y2goLy4qdi8pJiYoZm49IlRCIil9LHNldENsYXNzOlNuLHNldFRvb2x0aXA6ZnVuY3Rpb24odCxlKXt0LnNwbGl0KCIsIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dm9pZCAwIT09ZSYmKF9uWyJnZW4tMSI9PT1kbj9Ubih0KTp0XT1fLnNhbml0aXplVGV4dChlLHluKSl9KSl9LGdldFRvb2x0aXA6ZnVuY3Rpb24odCl7cmV0dXJuIF9uW3RdfSxzZXRDbGlja0V2ZW50OmZ1bmN0aW9uKHQsZSxuKXt0LnNwbGl0KCIsIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1Ubih0KTtpZigibG9vc2UiPT09X3QoKS5zZWN1cml0eUxldmVsJiZ2b2lkIDAhPT1lKXt2YXIgaT1bXTtpZigic3RyaW5nIj09dHlwZW9mIG4pe2k9bi5zcGxpdCgvLCg/PSg/Oig/OlteIl0qIil7Mn0pKlteIl0qJCkvKTtmb3IodmFyIGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXS50cmltKCk7JyInPT09by5jaGFyQXQoMCkmJiciJz09PW8uY2hhckF0KG8ubGVuZ3RoLTEpJiYobz1vLnN1YnN0cigxLG8ubGVuZ3RoLTIpKSxpW2FdPW99fTA9PT1pLmxlbmd0aCYmaS5wdXNoKHQpLHZvaWQgMCE9PWduW3RdJiYoZ25bdF0uaGF2ZUNhbGxiYWNrPSEwLEVuLnB1c2goKGZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2lkPSInLmNvbmNhdChyLCciXScpKTtudWxsIT09dCYmdC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKGZ1bmN0aW9uKCl7Vi5ydW5GdW5jLmFwcGx5KFYsW2VdLmNvbmNhdChobihpKSkpfSksITEpfSkpKX19KHQsZSxuKX0pKSxTbih0LCJjbGlja2FibGUiKX0sc2V0TGluazpmdW5jdGlvbih0LGUsbil7dC5zcGxpdCgiLCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PWduW3RdJiYoZ25bdF0ubGluaz1WLmZvcm1hdFVybChlLHluKSxnblt0XS5saW5rVGFyZ2V0PW4pfSkpLFNuKHQsImNsaWNrYWJsZSIpfSxiaW5kRnVuY3Rpb25zOmZ1bmN0aW9uKHQpe0VuLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UodCl9KSl9LGdldERpcmVjdGlvbjpmdW5jdGlvbigpe3JldHVybiBmbi50cmltKCl9LGdldFZlcnRpY2VzOmZ1bmN0aW9uKCl7cmV0dXJuIGdufSxnZXRFZGdlczpmdW5jdGlvbigpe3JldHVybiB2bn0sZ2V0Q2xhc3NlczpmdW5jdGlvbigpe3JldHVybiBtbn0sY2xlYXI6ZnVuY3Rpb24odCl7Z249e30sbW49e30sdm49W10sKEVuPVtdKS5wdXNoKEFuKSxibj1bXSx4bj17fSxrbj0wLF9uPVtdLHduPSEwLGRuPXR8fCJnZW4tMSJ9LHNldEdlbjpmdW5jdGlvbih0KXtkbj10fHwiZ2VuLTEifSxkZWZhdWx0U3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm4iZmlsbDojZmZhO3N0cm9rZTogI2Y2Njsgc3Ryb2tlLXdpZHRoOiAzcHg7IHN0cm9rZS1kYXNoYXJyYXk6IDUsIDU7ZmlsbDojZmZhO3N0cm9rZTogIzY2NjsifSxhZGRTdWJHcmFwaDpmdW5jdGlvbih0LGUsbil7dmFyIHI9dC50cmltKCksaT1uO3Q9PT1uJiZuLm1hdGNoKC9ccy8pJiYocj12b2lkIDApO3ZhciBhPVtdLG89ZnVuY3Rpb24odCl7dmFyIGUsbj17Ym9vbGVhbjp7fSxudW1iZXI6e30sc3RyaW5nOnt9fSxyPVtdO3JldHVybntub2RlTGlzdDp0LmZpbHRlcigoZnVuY3Rpb24odCl7dmFyIGk9bG4odCk7cmV0dXJuIHQuc3RtdCYmImRpciI9PT10LnN0bXQ/KGU9dC52YWx1ZSwhMSk6IiIhPT10LnRyaW0oKSYmKGkgaW4gbj8hbltpXS5oYXNPd25Qcm9wZXJ0eSh0KSYmKG5baV1bdF09ITApOiEoci5pbmRleE9mKHQpPj0wKSYmci5wdXNoKHQpKX0pKSxkaXI6ZX19KGEuY29uY2F0LmFwcGx5KGEsZSkpLHM9by5ub2RlTGlzdCx1PW8uZGlyO2lmKGE9cywiZ2VuLTEiPT09ZG4pe2Mud2FybigiTE9PS0lORyBVUCIpO2Zvcih2YXIgbD0wO2w8YS5sZW5ndGg7bCsrKWFbbF09VG4oYVtsXSl9cj1yfHwic3ViR3JhcGgiK2tuLGk9aXx8IiIsaT1fLnNhbml0aXplVGV4dChpLHluKSxrbis9MTt2YXIgaD17aWQ6cixub2RlczphLHRpdGxlOmkudHJpbSgpLGNsYXNzZXM6W10sZGlyOnV9O3JldHVybiBjLmluZm8oIkFkZGluZyIsaC5pZCxoLm5vZGVzLGguZGlyKSxoLm5vZGVzPURuKGgsYm4pLm5vZGVzLGJuLnB1c2goaCkseG5bcl09aCxyfSxnZXREZXB0aEZpcnN0UG9zOmZ1bmN0aW9uKHQpe3JldHVybiBCblt0XX0saW5kZXhOb2RlczpmdW5jdGlvbigpe09uPS0xLGJuLmxlbmd0aD4wJiZmdW5jdGlvbiB0KGUsbil7dmFyIHI9Ym5bbl0ubm9kZXM7aWYoISgoT24rPTEpPjJlMykpe2lmKEJuW09uXT1uLGJuW25dLmlkPT09ZSlyZXR1cm57cmVzdWx0OiEwLGNvdW50OjB9O2Zvcih2YXIgaT0wLGE9MTtpPHIubGVuZ3RoOyl7dmFyIG89TW4ocltpXSk7aWYobz49MCl7dmFyIHM9dChlLG8pO2lmKHMucmVzdWx0KXJldHVybntyZXN1bHQ6ITAsY291bnQ6YStzLmNvdW50fTthKz1zLmNvdW50fWkrPTF9cmV0dXJue3Jlc3VsdDohMSxjb3VudDphfX19KCJub25lIixibi5sZW5ndGgtMSl9LGdldFN1YkdyYXBoczpmdW5jdGlvbigpe3JldHVybiBibn0sZGVzdHJ1Y3RMaW5rOmZ1bmN0aW9uKHQsZSl7dmFyIG4scj1mdW5jdGlvbih0KXt2YXIgZT10LnRyaW0oKSxuPWUuc2xpY2UoMCwtMSkscj0iYXJyb3dfb3BlbiI7c3dpdGNoKGUuc2xpY2UoLTEpKXtjYXNlIngiOnI9ImFycm93X2Nyb3NzIiwieCI9PT1lWzBdJiYocj0iZG91YmxlXyIrcixuPW4uc2xpY2UoMSkpO2JyZWFrO2Nhc2UiPiI6cj0iYXJyb3dfcG9pbnQiLCI8Ij09PWVbMF0mJihyPSJkb3VibGVfIityLG49bi5zbGljZSgxKSk7YnJlYWs7Y2FzZSJvIjpyPSJhcnJvd19jaXJjbGUiLCJvIj09PWVbMF0mJihyPSJkb3VibGVfIityLG49bi5zbGljZSgxKSl9dmFyIGk9Im5vcm1hbCIsYT1uLmxlbmd0aC0xOyI9Ij09PW5bMF0mJihpPSJ0aGljayIpO3ZhciBvPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPWUubGVuZ3RoLHI9MCxpPTA7aTxuOysraSllW2ldPT09dCYmKytyO3JldHVybiByfSgiLiIsbik7cmV0dXJuIG8mJihpPSJkb3R0ZWQiLGE9bykse3R5cGU6cixzdHJva2U6aSxsZW5ndGg6YX19KHQpO2lmKGUpe2lmKChuPWZ1bmN0aW9uKHQpe3ZhciBlPXQudHJpbSgpLG49ImFycm93X29wZW4iO3N3aXRjaChlWzBdKXtjYXNlIjwiOm49ImFycm93X3BvaW50IixlPWUuc2xpY2UoMSk7YnJlYWs7Y2FzZSJ4IjpuPSJhcnJvd19jcm9zcyIsZT1lLnNsaWNlKDEpO2JyZWFrO2Nhc2UibyI6bj0iYXJyb3dfY2lyY2xlIixlPWUuc2xpY2UoMSl9dmFyIHI9Im5vcm1hbCI7cmV0dXJuLTEhPT1lLmluZGV4T2YoIj0iKSYmKHI9InRoaWNrIiksLTEhPT1lLmluZGV4T2YoIi4iKSYmKHI9ImRvdHRlZCIpLHt0eXBlOm4sc3Ryb2tlOnJ9fShlKSkuc3Ryb2tlIT09ci5zdHJva2UpcmV0dXJue3R5cGU6IklOVkFMSUQiLHN0cm9rZToiSU5WQUxJRCJ9O2lmKCJhcnJvd19vcGVuIj09PW4udHlwZSluLnR5cGU9ci50eXBlO2Vsc2V7aWYobi50eXBlIT09ci50eXBlKXJldHVybnt0eXBlOiJJTlZBTElEIixzdHJva2U6IklOVkFMSUQifTtuLnR5cGU9ImRvdWJsZV8iK24udHlwZX1yZXR1cm4iZG91YmxlX2Fycm93Ij09PW4udHlwZSYmKG4udHlwZT0iZG91YmxlX2Fycm93X3BvaW50Iiksbi5sZW5ndGg9ci5sZW5ndGgsbn1yZXR1cm4gcn0sbGV4OntmaXJzdEdyYXBoOmZ1bmN0aW9uKCl7cmV0dXJuISF3biYmKHduPSExLCEwKX19LGV4aXN0czpObixtYWtlVW5pcTpEbn0sSW49bigyNyksUm49bi5uKEluKSxGbj1uKDcpLFBuPW4ubihGbiksam49big1MSksWW49bi5uKGpuKTtmdW5jdGlvbiB6bih0LGUsbil7dmFyIHI9LjkqKGUud2lkdGgrZS5oZWlnaHQpLGk9W3t4OnIvMix5OjB9LHt4OnIseTotci8yfSx7eDpyLzIseTotcn0se3g6MCx5Oi1yLzJ9XSxhPUtuKHQscixyLGkpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gUG4uYS5pbnRlcnNlY3QucG9seWdvbihuLGksdCl9LGF9ZnVuY3Rpb24gVW4odCxlLG4pe3ZhciByPWUuaGVpZ2h0LGk9ci80LGE9ZS53aWR0aCsyKmksbz1be3g6aSx5OjB9LHt4OmEtaSx5OjB9LHt4OmEseTotci8yfSx7eDphLWkseTotcn0se3g6aSx5Oi1yfSx7eDowLHk6LXIvMn1dLHM9S24odCxhLHIsbyk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBQbi5hLmludGVyc2VjdC5wb2x5Z29uKG4sbyx0KX0sc31mdW5jdGlvbiAkbih0LGUsbil7dmFyIHI9ZS53aWR0aCxpPWUuaGVpZ2h0LGE9W3t4Oi1pLzIseTowfSx7eDpyLHk6MH0se3g6cix5Oi1pfSx7eDotaS8yLHk6LWl9LHt4OjAseTotaS8yfV0sbz1Lbih0LHIsaSxhKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIFBuLmEuaW50ZXJzZWN0LnBvbHlnb24obixhLHQpfSxvfWZ1bmN0aW9uIHFuKHQsZSxuKXt2YXIgcj1lLndpZHRoLGk9ZS5oZWlnaHQsYT1be3g6LTIqaS82LHk6MH0se3g6ci1pLzYseTowfSx7eDpyKzIqaS82LHk6LWl9LHt4OmkvNix5Oi1pfV0sbz1Lbih0LHIsaSxhKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIFBuLmEuaW50ZXJzZWN0LnBvbHlnb24obixhLHQpfSxvfWZ1bmN0aW9uIFduKHQsZSxuKXt2YXIgcj1lLndpZHRoLGk9ZS5oZWlnaHQsYT1be3g6MippLzYseTowfSx7eDpyK2kvNix5OjB9LHt4OnItMippLzYseTotaX0se3g6LWkvNix5Oi1pfV0sbz1Lbih0LHIsaSxhKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIFBuLmEuaW50ZXJzZWN0LnBvbHlnb24obixhLHQpfSxvfWZ1bmN0aW9uIFZuKHQsZSxuKXt2YXIgcj1lLndpZHRoLGk9ZS5oZWlnaHQsYT1be3g6LTIqaS82LHk6MH0se3g6cisyKmkvNix5OjB9LHt4OnItaS82LHk6LWl9LHt4OmkvNix5Oi1pfV0sbz1Lbih0LHIsaSxhKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIFBuLmEuaW50ZXJzZWN0LnBvbHlnb24obixhLHQpfSxvfWZ1bmN0aW9uIEhuKHQsZSxuKXt2YXIgcj1lLndpZHRoLGk9ZS5oZWlnaHQsYT1be3g6aS82LHk6MH0se3g6ci1pLzYseTowfSx7eDpyKzIqaS82LHk6LWl9LHt4Oi0yKmkvNix5Oi1pfV0sbz1Lbih0LHIsaSxhKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIFBuLmEuaW50ZXJzZWN0LnBvbHlnb24obixhLHQpfSxvfWZ1bmN0aW9uIEduKHQsZSxuKXt2YXIgcj1lLndpZHRoLGk9ZS5oZWlnaHQsYT1be3g6MCx5OjB9LHt4OnIraS8yLHk6MH0se3g6cix5Oi1pLzJ9LHt4OnIraS8yLHk6LWl9LHt4OjAseTotaX1dLG89S24odCxyLGksYSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBQbi5hLmludGVyc2VjdC5wb2x5Z29uKG4sYSx0KX0sb31mdW5jdGlvbiBYbih0LGUsbil7dmFyIHI9ZS5oZWlnaHQsaT1lLndpZHRoK3IvNCxhPXQuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigicngiLHIvMikuYXR0cigicnkiLHIvMikuYXR0cigieCIsLWkvMikuYXR0cigieSIsLXIvMikuYXR0cigid2lkdGgiLGkpLmF0dHIoImhlaWdodCIscik7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBQbi5hLmludGVyc2VjdC5yZWN0KG4sdCl9LGF9ZnVuY3Rpb24gWm4odCxlLG4pe3ZhciByPWUud2lkdGgsaT1lLmhlaWdodCxhPVt7eDowLHk6MH0se3g6cix5OjB9LHt4OnIseTotaX0se3g6MCx5Oi1pfSx7eDowLHk6MH0se3g6LTgseTowfSx7eDpyKzgseTowfSx7eDpyKzgseTotaX0se3g6LTgseTotaX0se3g6LTgseTowfV0sbz1Lbih0LHIsaSxhKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIFBuLmEuaW50ZXJzZWN0LnBvbHlnb24obixhLHQpfSxvfWZ1bmN0aW9uIFFuKHQsZSxuKXt2YXIgcj1lLndpZHRoLGk9ci8yLGE9aS8oMi41K3IvNTApLG89ZS5oZWlnaHQrYSxzPSJNIDAsIithKyIgYSAiK2krIiwiK2ErIiAwLDAsMCAiK3IrIiAwIGEgIitpKyIsIithKyIgMCwwLDAgIistcisiIDAgbCAwLCIrbysiIGEgIitpKyIsIithKyIgMCwwLDAgIityKyIgMCBsIDAsIistbyxjPXQuYXR0cigibGFiZWwtb2Zmc2V0LXkiLGEpLmluc2VydCgicGF0aCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImQiLHMpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1yLzIrIiwiKy0oby8yK2EpKyIpIik7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3ZhciBlPVBuLmEuaW50ZXJzZWN0LnJlY3Qobix0KSxyPWUueC1uLng7aWYoMCE9aSYmKE1hdGguYWJzKHIpPG4ud2lkdGgvMnx8TWF0aC5hYnMocik9PW4ud2lkdGgvMiYmTWF0aC5hYnMoZS55LW4ueSk+bi5oZWlnaHQvMi1hKSl7dmFyIG89YSphKigxLXIqci8oaSppKSk7MCE9byYmKG89TWF0aC5zcXJ0KG8pKSxvPWEtbyx0Lnktbi55PjAmJihvPS1vKSxlLnkrPW99cmV0dXJuIGV9LGN9ZnVuY3Rpb24gS24odCxlLG4scil7cmV0dXJuIHQuaW5zZXJ0KCJwb2x5Z29uIiwiOmZpcnN0LWNoaWxkIikuYXR0cigicG9pbnRzIixyLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQueCsiLCIrdC55fSkpLmpvaW4oIiAiKSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWUvMisiLCIrbi8yKyIpIil9dmFyIEpuPXthZGRUb1JlbmRlcjpmdW5jdGlvbih0KXt0LnNoYXBlcygpLnF1ZXN0aW9uPXpuLHQuc2hhcGVzKCkuaGV4YWdvbj1Vbix0LnNoYXBlcygpLnN0YWRpdW09WG4sdC5zaGFwZXMoKS5zdWJyb3V0aW5lPVpuLHQuc2hhcGVzKCkuY3lsaW5kZXI9UW4sdC5zaGFwZXMoKS5yZWN0X2xlZnRfaW52X2Fycm93PSRuLHQuc2hhcGVzKCkubGVhbl9yaWdodD1xbix0LnNoYXBlcygpLmxlYW5fbGVmdD1Xbix0LnNoYXBlcygpLnRyYXBlem9pZD1Wbix0LnNoYXBlcygpLmludl90cmFwZXpvaWQ9SG4sdC5zaGFwZXMoKS5yZWN0X3JpZ2h0X2ludl9hcnJvdz1Hbn0sYWRkVG9SZW5kZXJWMjpmdW5jdGlvbih0KXt0KHtxdWVzdGlvbjp6bn0pLHQoe2hleGFnb246VW59KSx0KHtzdGFkaXVtOlhufSksdCh7c3Vicm91dGluZTpabn0pLHQoe2N5bGluZGVyOlFufSksdCh7cmVjdF9sZWZ0X2ludl9hcnJvdzokbn0pLHQoe2xlYW5fcmlnaHQ6cW59KSx0KHtsZWFuX2xlZnQ6V259KSx0KHt0cmFwZXpvaWQ6Vm59KSx0KHtpbnZfdHJhcGV6b2lkOkhufSksdCh7cmVjdF9yaWdodF9pbnZfYXJyb3c6R259KX19LHRyPXt9LGVyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1PYmplY3QoaC5zZWxlY3QpKCdbaWQ9IicuY29uY2F0KG4sJyJdJykpO09iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBpPXRbbl0sYT0iZGVmYXVsdCI7aS5jbGFzc2VzLmxlbmd0aD4wJiYoYT1pLmNsYXNzZXMuam9pbigiICIpKTt2YXIgbyxzPUwoaS5zdHlsZXMpLHU9dm9pZCAwIT09aS50ZXh0P2kudGV4dDppLmlkO2lmKHgoX3QoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciBsPXtsYWJlbDp1LnJlcGxhY2UoL2ZhW2xyc2JdPzpmYS1bXHctXSsvZywoZnVuY3Rpb24odCl7cmV0dXJuIjxpIGNsYXNzPSciLmNvbmNhdCh0LnJlcGxhY2UoIjoiLCIgIiksIic+PC9pPiIpfSkpfTsobz1ZbigpKHIsbCkubm9kZSgpKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG8pfWVsc2V7dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRleHQiKTtoLnNldEF0dHJpYnV0ZSgic3R5bGUiLHMubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpKTtmb3IodmFyIGY9dS5zcGxpdChfLmxpbmVCcmVha1JlZ2V4KSxkPTA7ZDxmLmxlbmd0aDtkKyspe3ZhciBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0c3BhbiIpO3Auc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsInhtbDpzcGFjZSIsInByZXNlcnZlIikscC5zZXRBdHRyaWJ1dGUoImR5IiwiMWVtIikscC5zZXRBdHRyaWJ1dGUoIngiLCIxIikscC50ZXh0Q29udGVudD1mW2RdLGguYXBwZW5kQ2hpbGQocCl9bz1ofXZhciB5PTAsZz0iIjtzd2l0Y2goaS50eXBlKXtjYXNlInJvdW5kIjp5PTUsZz0icmVjdCI7YnJlYWs7Y2FzZSJzcXVhcmUiOmc9InJlY3QiO2JyZWFrO2Nhc2UiZGlhbW9uZCI6Zz0icXVlc3Rpb24iO2JyZWFrO2Nhc2UiaGV4YWdvbiI6Zz0iaGV4YWdvbiI7YnJlYWs7Y2FzZSJvZGQiOmc9InJlY3RfbGVmdF9pbnZfYXJyb3ciO2JyZWFrO2Nhc2UibGVhbl9yaWdodCI6Zz0ibGVhbl9yaWdodCI7YnJlYWs7Y2FzZSJsZWFuX2xlZnQiOmc9ImxlYW5fbGVmdCI7YnJlYWs7Y2FzZSJ0cmFwZXpvaWQiOmc9InRyYXBlem9pZCI7YnJlYWs7Y2FzZSJpbnZfdHJhcGV6b2lkIjpnPSJpbnZfdHJhcGV6b2lkIjticmVhaztjYXNlIm9kZF9yaWdodCI6Zz0icmVjdF9sZWZ0X2ludl9hcnJvdyI7YnJlYWs7Y2FzZSJjaXJjbGUiOmc9ImNpcmNsZSI7YnJlYWs7Y2FzZSJlbGxpcHNlIjpnPSJlbGxpcHNlIjticmVhaztjYXNlInN0YWRpdW0iOmc9InN0YWRpdW0iO2JyZWFrO2Nhc2Uic3Vicm91dGluZSI6Zz0ic3Vicm91dGluZSI7YnJlYWs7Y2FzZSJjeWxpbmRlciI6Zz0iY3lsaW5kZXIiO2JyZWFrO2Nhc2UiZ3JvdXAiOmc9InJlY3QiO2JyZWFrO2RlZmF1bHQ6Zz0icmVjdCJ9Yy53YXJuKCJBZGRpbmcgbm9kZSIsaS5pZCxpLmRvbUlkKSxlLnNldE5vZGUoTG4ubG9va1VwRG9tSWQoaS5pZCkse2xhYmVsVHlwZToic3ZnIixsYWJlbFN0eWxlOnMubGFiZWxTdHlsZSxzaGFwZTpnLGxhYmVsOm8scng6eSxyeTp5LGNsYXNzOmEsc3R5bGU6cy5zdHlsZSxpZDpMbi5sb29rVXBEb21JZChpLmlkKX0pfSkpfSxucj1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaT0wO2lmKHZvaWQgMCE9PXQuZGVmYXVsdFN0eWxlKXt2YXIgYT1MKHQuZGVmYXVsdFN0eWxlKTtuPWEuc3R5bGUscj1hLmxhYmVsU3R5bGV9dC5mb3JFYWNoKChmdW5jdGlvbihhKXtpKys7dmFyIG89IkwtIithLnN0YXJ0KyItIithLmVuZCxzPSJMUy0iK2Euc3RhcnQsYz0iTEUtIithLmVuZCx1PXt9OyJhcnJvd19vcGVuIj09PWEudHlwZT91LmFycm93aGVhZD0ibm9uZSI6dS5hcnJvd2hlYWQ9Im5vcm1hbCI7dmFyIGw9IiIsZj0iIjtpZih2b2lkIDAhPT1hLnN0eWxlKXt2YXIgZD1MKGEuc3R5bGUpO2w9ZC5zdHlsZSxmPWQubGFiZWxTdHlsZX1lbHNlIHN3aXRjaChhLnN0cm9rZSl7Y2FzZSJub3JtYWwiOmw9ImZpbGw6bm9uZSIsdm9pZCAwIT09biYmKGw9biksdm9pZCAwIT09ciYmKGY9cik7YnJlYWs7Y2FzZSJkb3R0ZWQiOmw9ImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1kYXNoYXJyYXk6MzsiO2JyZWFrO2Nhc2UidGhpY2siOmw9IiBzdHJva2Utd2lkdGg6IDMuNXB4O2ZpbGw6bm9uZSJ9dS5zdHlsZT1sLHUubGFiZWxTdHlsZT1mLHZvaWQgMCE9PWEuaW50ZXJwb2xhdGU/dS5jdXJ2ZT1OKGEuaW50ZXJwb2xhdGUsaC5jdXJ2ZUxpbmVhcik6dm9pZCAwIT09dC5kZWZhdWx0SW50ZXJwb2xhdGU/dS5jdXJ2ZT1OKHQuZGVmYXVsdEludGVycG9sYXRlLGguY3VydmVMaW5lYXIpOnUuY3VydmU9Tih0ci5jdXJ2ZSxoLmN1cnZlTGluZWFyKSx2b2lkIDA9PT1hLnRleHQ/dm9pZCAwIT09YS5zdHlsZSYmKHUuYXJyb3doZWFkU3R5bGU9ImZpbGw6ICMzMzMiKToodS5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIsdS5sYWJlbHBvcz0iYyIseChfdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKT8odS5sYWJlbFR5cGU9Imh0bWwiLHUubGFiZWw9JzxzcGFuIGlkPSJMLScuY29uY2F0KG8sJyIgY2xhc3M9ImVkZ2VMYWJlbCBMLScpLmNvbmNhdChzLCInIEwtIikuY29uY2F0KGMsJyI+JykuY29uY2F0KGEudGV4dC5yZXBsYWNlKC9mYVtscnNiXT86ZmEtW1x3LV0rL2csKGZ1bmN0aW9uKHQpe3JldHVybiI8aSBjbGFzcz0nIi5jb25jYXQodC5yZXBsYWNlKCI6IiwiICIpLCInPjwvaT4iKX0pKSwiPC9zcGFuPiIpKToodS5sYWJlbFR5cGU9InRleHQiLHUubGFiZWw9YS50ZXh0LnJlcGxhY2UoXy5saW5lQnJlYWtSZWdleCwiXG4iKSx2b2lkIDA9PT1hLnN0eWxlJiYodS5zdHlsZT11LnN0eWxlfHwic3Ryb2tlOiAjMzMzOyBzdHJva2Utd2lkdGg6IDEuNXB4O2ZpbGw6bm9uZSIpLHUubGFiZWxTdHlsZT11LmxhYmVsU3R5bGUucmVwbGFjZSgiY29sb3I6IiwiZmlsbDoiKSkpLHUuaWQ9byx1LmNsYXNzPXMrIiAiK2MsdS5taW5sZW49YS5sZW5ndGh8fDEsZS5zZXRFZGdlKExuLmxvb2tVcERvbUlkKGEuc3RhcnQpLExuLmxvb2tVcERvbUlkKGEuZW5kKSx1LGkpfSkpfSxycj1mdW5jdGlvbih0KXtmb3IodmFyIGU9T2JqZWN0LmtleXModCksbj0wO248ZS5sZW5ndGg7bisrKXRyW2Vbbl1dPXRbZVtuXV19LGlyPWZ1bmN0aW9uKHQpe2MuaW5mbygiRXh0cmFjdGluZyBjbGFzc2VzIiksTG4uY2xlYXIoKTt0cnl7dmFyIGU9Um4uYS5wYXJzZXI7cmV0dXJuIGUueXk9TG4sZS5wYXJzZSh0KSxMbi5nZXRDbGFzc2VzKCl9Y2F0Y2godCl7cmV0dXJufX0sYXI9ZnVuY3Rpb24odCxlKXtjLmluZm8oIkRyYXdpbmcgZmxvd2NoYXJ0IiksTG4uY2xlYXIoKSxMbi5zZXRHZW4oImdlbi0xIik7dmFyIG49Um4uYS5wYXJzZXI7bi55eT1MbixuLnBhcnNlKHQpO3ZhciByPUxuLmdldERpcmVjdGlvbigpO3ZvaWQgMD09PXImJihyPSJURCIpO2Zvcih2YXIgaSxhPV90KCkuZmxvd2NoYXJ0LG89YS5ub2RlU3BhY2luZ3x8NTAscz1hLnJhbmtTcGFjaW5nfHw1MCx1PW5ldyBVdC5hLkdyYXBoKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6cixub2Rlc2VwOm8scmFua3NlcDpzLG1hcmdpbng6OCxtYXJnaW55Ojh9KS5zZXREZWZhdWx0RWRnZUxhYmVsKChmdW5jdGlvbigpe3JldHVybnt9fSkpLGw9TG4uZ2V0U3ViR3JhcGhzKCksZj1sLmxlbmd0aC0xO2Y+PTA7Zi0tKWk9bFtmXSxMbi5hZGRWZXJ0ZXgoaS5pZCxpLnRpdGxlLCJncm91cCIsdm9pZCAwLGkuY2xhc3Nlcyk7dmFyIGQ9TG4uZ2V0VmVydGljZXMoKTtjLndhcm4oIkdldCB2ZXJ0aWNlcyIsZCk7dmFyIHA9TG4uZ2V0RWRnZXMoKSx5PTA7Zm9yKHk9bC5sZW5ndGgtMTt5Pj0wO3ktLSl7aT1sW3ldLE9iamVjdChoLnNlbGVjdEFsbCkoImNsdXN0ZXIiKS5hcHBlbmQoInRleHQiKTtmb3IodmFyIGc9MDtnPGkubm9kZXMubGVuZ3RoO2crKyljLndhcm4oIlNldHRpbmcgc3ViZ3JhcGgiLGkubm9kZXNbZ10sTG4ubG9va1VwRG9tSWQoaS5ub2Rlc1tnXSksTG4ubG9va1VwRG9tSWQoaS5pZCkpLHUuc2V0UGFyZW50KExuLmxvb2tVcERvbUlkKGkubm9kZXNbZ10pLExuLmxvb2tVcERvbUlkKGkuaWQpKX1lcihkLHUsZSksbnIocCx1KTt2YXIgdj1uZXcoMCxQbi5hLnJlbmRlcik7Sm4uYWRkVG9SZW5kZXIodiksdi5hcnJvd3MoKS5ub25lPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXQuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMCAwIEwgMCAwIHoiKTtQbi5hLnV0aWwuYXBwbHlTdHlsZShpLG5bcisiU3R5bGUiXSl9LHYuYXJyb3dzKCkubm9ybWFsPWZ1bmN0aW9uKHQsZSl7dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJzdHJva2VXaWR0aCIpLmF0dHIoIm1hcmtlcldpZHRoIiw4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxMCA1IEwgMCAxMCB6IikuYXR0cigiY2xhc3MiLCJhcnJvd2hlYWRQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKX07dmFyIG09T2JqZWN0KGguc2VsZWN0KSgnW2lkPSInLmNvbmNhdChlLCciXScpKTttLmF0dHIoInhtbG5zOnhsaW5rIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIpLGMud2Fybih1KTt2YXIgYj1PYmplY3QoaC5zZWxlY3QpKCIjIitlKyIgZyIpO3YoYix1KSxiLnNlbGVjdEFsbCgiZy5ub2RlIikuYXR0cigidGl0bGUiLChmdW5jdGlvbigpe3JldHVybiBMbi5nZXRUb29sdGlwKHRoaXMuaWQpfSkpO3ZhciBfPWEuZGlhZ3JhbVBhZGRpbmcsaz1tLm5vZGUoKS5nZXRCQm94KCksdz1rLndpZHRoKzIqXyxFPWsuaGVpZ2h0KzIqXztXKG0sRSx3LGEudXNlTWF4V2lkdGgpO3ZhciBUPSIiLmNvbmNhdChrLngtXywiICIpLmNvbmNhdChrLnktXywiICIpLmNvbmNhdCh3LCIgIikuY29uY2F0KEUpO2ZvcihjLmRlYnVnKCJ2aWV3Qm94ICIuY29uY2F0KFQpKSxtLmF0dHIoInZpZXdCb3giLFQpLExuLmluZGV4Tm9kZXMoInN1YkdyYXBoIit5KSx5PTA7eTxsLmxlbmd0aDt5KyspaWYoInVuZGVmaW5lZCIhPT0oaT1sW3ldKS50aXRsZSl7dmFyIEM9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiIyIrZSsnIFtpZD0iJytMbi5sb29rVXBEb21JZChpLmlkKSsnIl0gcmVjdCcpLFM9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiIyIrZSsnIFtpZD0iJytMbi5sb29rVXBEb21JZChpLmlkKSsnIl0nKSxBPUNbMF0ueC5iYXNlVmFsLnZhbHVlLE09Q1swXS55LmJhc2VWYWwudmFsdWUsTz1DWzBdLndpZHRoLmJhc2VWYWwudmFsdWUsQj1PYmplY3QoaC5zZWxlY3QpKFNbMF0pLnNlbGVjdCgiLmxhYmVsIik7Qi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIi5jb25jYXQoQStPLzIsIiwgIikuY29uY2F0KE0rMTQsIikiKSksQi5hdHRyKCJpZCIsZSsiVGV4dCIpO2Zvcih2YXIgTj0wO048aS5jbGFzc2VzLmxlbmd0aDtOKyspU1swXS5jbGFzc0xpc3QuYWRkKGkuY2xhc3Nlc1tOXSl9eChhLmh0bWxMYWJlbHMpO2Zvcih2YXIgRD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaWQ9IicrZSsnIl0gLmVkZ2VMYWJlbCAubGFiZWwnKSxMPTA7TDxELmxlbmd0aDtMKyspe3ZhciBJPURbTF0sUj1JLmdldEJCb3goKSxGPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJyZWN0Iik7Ri5zZXRBdHRyaWJ1dGUoInJ4IiwwKSxGLnNldEF0dHJpYnV0ZSgicnkiLDApLEYuc2V0QXR0cmlidXRlKCJ3aWR0aCIsUi53aWR0aCksRi5zZXRBdHRyaWJ1dGUoImhlaWdodCIsUi5oZWlnaHQpLEkuaW5zZXJ0QmVmb3JlKEYsSS5maXJzdENoaWxkKX1PYmplY3Qua2V5cyhkKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1kW3RdO2lmKG4ubGluayl7dmFyIHI9T2JqZWN0KGguc2VsZWN0KSgiIyIrZSsnIFtpZD0iJytMbi5sb29rVXBEb21JZCh0KSsnIl0nKTtpZihyKXt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYSIpO2kuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiY2xhc3MiLG4uY2xhc3Nlcy5qb2luKCIgIikpLGkuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiaHJlZiIsbi5saW5rKSxpLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInJlbCIsIm5vb3BlbmVyIiksbi5saW5rVGFyZ2V0JiZpLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRhcmdldCIsbi5saW5rVGFyZ2V0KTt2YXIgYT1yLmluc2VydCgoZnVuY3Rpb24oKXtyZXR1cm4gaX0pLCI6Zmlyc3QtY2hpbGQiKSxvPXIuc2VsZWN0KCIubGFiZWwtY29udGFpbmVyIik7byYmYS5hcHBlbmQoKGZ1bmN0aW9uKCl7cmV0dXJuIG8ubm9kZSgpfSkpO3ZhciBzPXIuc2VsZWN0KCIubGFiZWwiKTtzJiZhLmFwcGVuZCgoZnVuY3Rpb24oKXtyZXR1cm4gcy5ub2RlKCl9KSl9fX0pKX0sb3I9e30sc3I9ZnVuY3Rpb24odCxlLG4pe3ZhciByPU9iamVjdChoLnNlbGVjdCkoJ1tpZD0iJy5jb25jYXQobiwnIl0nKSk7T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIGk9dFtuXSxhPSJkZWZhdWx0IjtpLmNsYXNzZXMubGVuZ3RoPjAmJihhPWkuY2xhc3Nlcy5qb2luKCIgIikpO3ZhciBvLHM9TChpLnN0eWxlcyksdT12b2lkIDAhPT1pLnRleHQ/aS50ZXh0OmkuaWQ7aWYoeChfdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7dmFyIGw9e2xhYmVsOnUucmVwbGFjZSgvZmFbbHJzYl0/OmZhLVtcdy1dKy9nLChmdW5jdGlvbih0KXtyZXR1cm4iPGkgY2xhc3M9JyIuY29uY2F0KHQucmVwbGFjZSgiOiIsIiAiKSwiJz48L2k+Iil9KSl9OyhvPVluKCkocixsKS5ub2RlKCkpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobyl9ZWxzZXt2YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGV4dCIpO2guc2V0QXR0cmlidXRlKCJzdHlsZSIscy5sYWJlbFN0eWxlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IikpO2Zvcih2YXIgZj11LnNwbGl0KF8ubGluZUJyZWFrUmVnZXgpLGQ9MDtkPGYubGVuZ3RoO2QrKyl7dmFyIHA9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRzcGFuIik7cC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOnNwYWNlIiwicHJlc2VydmUiKSxwLnNldEF0dHJpYnV0ZSgiZHkiLCIxZW0iKSxwLnNldEF0dHJpYnV0ZSgieCIsIjEiKSxwLnRleHRDb250ZW50PWZbZF0saC5hcHBlbmRDaGlsZChwKX1vPWh9dmFyIHk9MCxnPSIiO3N3aXRjaChpLnR5cGUpe2Nhc2Uicm91bmQiOnk9NSxnPSJyZWN0IjticmVhaztjYXNlInNxdWFyZSI6Zz0icmVjdCI7YnJlYWs7Y2FzZSJkaWFtb25kIjpnPSJxdWVzdGlvbiI7YnJlYWs7Y2FzZSJoZXhhZ29uIjpnPSJoZXhhZ29uIjticmVhaztjYXNlIm9kZCI6Zz0icmVjdF9sZWZ0X2ludl9hcnJvdyI7YnJlYWs7Y2FzZSJsZWFuX3JpZ2h0IjpnPSJsZWFuX3JpZ2h0IjticmVhaztjYXNlImxlYW5fbGVmdCI6Zz0ibGVhbl9sZWZ0IjticmVhaztjYXNlInRyYXBlem9pZCI6Zz0idHJhcGV6b2lkIjticmVhaztjYXNlImludl90cmFwZXpvaWQiOmc9Imludl90cmFwZXpvaWQiO2JyZWFrO2Nhc2Uib2RkX3JpZ2h0IjpnPSJyZWN0X2xlZnRfaW52X2Fycm93IjticmVhaztjYXNlImNpcmNsZSI6Zz0iY2lyY2xlIjticmVhaztjYXNlImVsbGlwc2UiOmc9ImVsbGlwc2UiO2JyZWFrO2Nhc2Uic3RhZGl1bSI6Zz0ic3RhZGl1bSI7YnJlYWs7Y2FzZSJzdWJyb3V0aW5lIjpnPSJzdWJyb3V0aW5lIjticmVhaztjYXNlImN5bGluZGVyIjpnPSJjeWxpbmRlciI7YnJlYWs7Y2FzZSJncm91cCI6Zz0icmVjdCI7YnJlYWs7ZGVmYXVsdDpnPSJyZWN0In1lLnNldE5vZGUoaS5pZCx7bGFiZWxTdHlsZTpzLmxhYmVsU3R5bGUsc2hhcGU6ZyxsYWJlbFRleHQ6dSxyeDp5LHJ5OnksY2xhc3M6YSxzdHlsZTpzLnN0eWxlLGlkOmkuaWQsbGluazppLmxpbmssbGlua1RhcmdldDppLmxpbmtUYXJnZXQsdG9vbHRpcDpMbi5nZXRUb29sdGlwKGkuaWQpfHwiIixkb21JZDpMbi5sb29rVXBEb21JZChpLmlkKSxoYXZlQ2FsbGJhY2s6aS5oYXZlQ2FsbGJhY2ssd2lkdGg6Imdyb3VwIj09PWkudHlwZT81MDA6dm9pZCAwLGRpcjppLmRpcix0eXBlOmkudHlwZSxwYWRkaW5nOl90KCkuZmxvd2NoYXJ0LnBhZGRpbmd9KSxjLmluZm8oInNldE5vZGUiLHtsYWJlbFN0eWxlOnMubGFiZWxTdHlsZSxzaGFwZTpnLGxhYmVsVGV4dDp1LHJ4Onkscnk6eSxjbGFzczphLHN0eWxlOnMuc3R5bGUsaWQ6aS5pZCxkb21JZDpMbi5sb29rVXBEb21JZChpLmlkKSx3aWR0aDoiZ3JvdXAiPT09aS50eXBlPzUwMDp2b2lkIDAsdHlwZTppLnR5cGUsZGlyOmkuZGlyLHBhZGRpbmc6X3QoKS5mbG93Y2hhcnQucGFkZGluZ30pfSkpfSxjcj1mdW5jdGlvbih0LGUpe2MuaW5mbygiYWJjNzggZWRnZXMgPSAiLHQpO3ZhciBuLHIsaT0wLGE9e307aWYodm9pZCAwIT09dC5kZWZhdWx0U3R5bGUpe3ZhciBvPUwodC5kZWZhdWx0U3R5bGUpO249by5zdHlsZSxyPW8ubGFiZWxTdHlsZX10LmZvckVhY2goKGZ1bmN0aW9uKG8pe2krKzt2YXIgcz0iTC0iK28uc3RhcnQrIi0iK28uZW5kO3ZvaWQgMD09PWFbc10/KGFbc109MCxjLmluZm8oImFiYzc4IG5ldyBlbnRyeSIscyxhW3NdKSk6KGFbc10rKyxjLmluZm8oImFiYzc4IG5ldyBlbnRyeSIscyxhW3NdKSk7dmFyIHU9cysiLSIrYVtzXTtjLmluZm8oImFiYzc4IG5ldyBsaW5rIGlkIHRvIGJlIHVzZWQgaXMiLHMsdSxhW3NdKTt2YXIgbD0iTFMtIitvLnN0YXJ0LGY9IkxFLSIrby5lbmQsZD17c3R5bGU6IiIsbGFiZWxTdHlsZToiIn07c3dpdGNoKGQubWlubGVuPW8ubGVuZ3RofHwxLCJhcnJvd19vcGVuIj09PW8udHlwZT9kLmFycm93aGVhZD0ibm9uZSI6ZC5hcnJvd2hlYWQ9Im5vcm1hbCIsZC5hcnJvd1R5cGVTdGFydD0iYXJyb3dfb3BlbiIsZC5hcnJvd1R5cGVFbmQ9ImFycm93X29wZW4iLG8udHlwZSl7Y2FzZSJkb3VibGVfYXJyb3dfY3Jvc3MiOmQuYXJyb3dUeXBlU3RhcnQ9ImFycm93X2Nyb3NzIjtjYXNlImFycm93X2Nyb3NzIjpkLmFycm93VHlwZUVuZD0iYXJyb3dfY3Jvc3MiO2JyZWFrO2Nhc2UiZG91YmxlX2Fycm93X3BvaW50IjpkLmFycm93VHlwZVN0YXJ0PSJhcnJvd19wb2ludCI7Y2FzZSJhcnJvd19wb2ludCI6ZC5hcnJvd1R5cGVFbmQ9ImFycm93X3BvaW50IjticmVhaztjYXNlImRvdWJsZV9hcnJvd19jaXJjbGUiOmQuYXJyb3dUeXBlU3RhcnQ9ImFycm93X2NpcmNsZSI7Y2FzZSJhcnJvd19jaXJjbGUiOmQuYXJyb3dUeXBlRW5kPSJhcnJvd19jaXJjbGUifXZhciBwPSIiLHk9IiI7c3dpdGNoKG8uc3Ryb2tlKXtjYXNlIm5vcm1hbCI6cD0iZmlsbDpub25lOyIsdm9pZCAwIT09biYmKHA9biksdm9pZCAwIT09ciYmKHk9ciksZC50aGlja25lc3M9Im5vcm1hbCIsZC5wYXR0ZXJuPSJzb2xpZCI7YnJlYWs7Y2FzZSJkb3R0ZWQiOmQudGhpY2tuZXNzPSJub3JtYWwiLGQucGF0dGVybj0iZG90dGVkIixkLnN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtZGFzaGFycmF5OjM7IjticmVhaztjYXNlInRoaWNrIjpkLnRoaWNrbmVzcz0idGhpY2siLGQucGF0dGVybj0ic29saWQiLGQuc3R5bGU9InN0cm9rZS13aWR0aDogMy41cHg7ZmlsbDpub25lOyJ9aWYodm9pZCAwIT09by5zdHlsZSl7dmFyIGc9TChvLnN0eWxlKTtwPWcuc3R5bGUseT1nLmxhYmVsU3R5bGV9ZC5zdHlsZT1kLnN0eWxlKz1wLGQubGFiZWxTdHlsZT1kLmxhYmVsU3R5bGUrPXksdm9pZCAwIT09by5pbnRlcnBvbGF0ZT9kLmN1cnZlPU4oby5pbnRlcnBvbGF0ZSxoLmN1cnZlTGluZWFyKTp2b2lkIDAhPT10LmRlZmF1bHRJbnRlcnBvbGF0ZT9kLmN1cnZlPU4odC5kZWZhdWx0SW50ZXJwb2xhdGUsaC5jdXJ2ZUxpbmVhcik6ZC5jdXJ2ZT1OKG9yLmN1cnZlLGguY3VydmVMaW5lYXIpLHZvaWQgMD09PW8udGV4dD92b2lkIDAhPT1vLnN0eWxlJiYoZC5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIpOihkLmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIixkLmxhYmVscG9zPSJjIiksZC5sYWJlbFR5cGU9InRleHQiLGQubGFiZWw9by50ZXh0LnJlcGxhY2UoXy5saW5lQnJlYWtSZWdleCwiXG4iKSx2b2lkIDA9PT1vLnN0eWxlJiYoZC5zdHlsZT1kLnN0eWxlfHwic3Ryb2tlOiAjMzMzOyBzdHJva2Utd2lkdGg6IDEuNXB4O2ZpbGw6bm9uZTsiKSxkLmxhYmVsU3R5bGU9ZC5sYWJlbFN0eWxlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IiksZC5pZD11LGQuY2xhc3Nlcz0iZmxvd2NoYXJ0LWxpbmsgIitsKyIgIitmLGUuc2V0RWRnZShvLnN0YXJ0LG8uZW5kLGQsaSl9KSl9LHVyPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1PYmplY3Qua2V5cyh0KSxuPTA7bjxlLmxlbmd0aDtuKyspb3JbZVtuXV09dFtlW25dXX0sbHI9ZnVuY3Rpb24odCxlKXtjLmluZm8oIkRyYXdpbmcgZmxvd2NoYXJ0IiksTG4uY2xlYXIoKSxMbi5zZXRHZW4oImdlbi0yIik7dmFyIG49Um4uYS5wYXJzZXI7bi55eT1MbixuLnBhcnNlKHQpO3ZhciByPUxuLmdldERpcmVjdGlvbigpO3ZvaWQgMD09PXImJihyPSJURCIpO3ZhciBpLGE9X3QoKS5mbG93Y2hhcnQsbz1hLm5vZGVTcGFjaW5nfHw1MCxzPWEucmFua1NwYWNpbmd8fDUwLHU9bmV3IFV0LmEuR3JhcGgoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cmFua2RpcjpyLG5vZGVzZXA6byxyYW5rc2VwOnMsbWFyZ2lueDo4LG1hcmdpbnk6OH0pLnNldERlZmF1bHRFZGdlTGFiZWwoKGZ1bmN0aW9uKCl7cmV0dXJue319KSksbD1Mbi5nZXRTdWJHcmFwaHMoKTtjLmluZm8oIlN1YmdyYXBocyAtICIsbCk7Zm9yKHZhciBmPWwubGVuZ3RoLTE7Zj49MDtmLS0paT1sW2ZdLGMuaW5mbygiU3ViZ3JhcGggLSAiLGkpLExuLmFkZFZlcnRleChpLmlkLGkudGl0bGUsImdyb3VwIix2b2lkIDAsaS5jbGFzc2VzLGkuZGlyKTt2YXIgZD1Mbi5nZXRWZXJ0aWNlcygpLHA9TG4uZ2V0RWRnZXMoKTtjLmluZm8ocCk7dmFyIHk9MDtmb3IoeT1sLmxlbmd0aC0xO3k+PTA7eS0tKXtpPWxbeV0sT2JqZWN0KGguc2VsZWN0QWxsKSgiY2x1c3RlciIpLmFwcGVuZCgidGV4dCIpO2Zvcih2YXIgZz0wO2c8aS5ub2Rlcy5sZW5ndGg7ZysrKWMuaW5mbygiU2V0dGluZyB1cCBzdWJncmFwaHMiLGkubm9kZXNbZ10saS5pZCksdS5zZXRQYXJlbnQoaS5ub2Rlc1tnXSxpLmlkKX1zcihkLHUsZSksY3IocCx1KTt2YXIgdj1PYmplY3QoaC5zZWxlY3QpKCdbaWQ9IicuY29uY2F0KGUsJyJdJykpO3YuYXR0cigieG1sbnM6eGxpbmsiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIik7dmFyIG09T2JqZWN0KGguc2VsZWN0KSgiIyIrZSsiIGciKTtVZShtLHUsWyJwb2ludCIsImNpcmNsZSIsImNyb3NzIl0sImZsb3djaGFydCIsZSk7dmFyIGI9YS5kaWFncmFtUGFkZGluZyx4PXYubm9kZSgpLmdldEJCb3goKSxfPXgud2lkdGgrMipiLGs9eC5oZWlnaHQrMipiO2lmKGMuZGVidWcoIm5ldyBWaWV3Qm94IDAgMCAiLmNvbmNhdChfLCIgIikuY29uY2F0KGspLCJ0cmFuc2xhdGUoIi5jb25jYXQoYi11Ll9sYWJlbC5tYXJnaW54LCIsICIpLmNvbmNhdChiLXUuX2xhYmVsLm1hcmdpbnksIikiKSksVyh2LGssXyxhLnVzZU1heFdpZHRoKSx2LmF0dHIoInZpZXdCb3giLCIwIDAgIi5jb25jYXQoXywiICIpLmNvbmNhdChrKSksdi5zZWxlY3QoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIi5jb25jYXQoYi11Ll9sYWJlbC5tYXJnaW54LCIsICIpLmNvbmNhdChiLXgueSwiKSIpKSxMbi5pbmRleE5vZGVzKCJzdWJHcmFwaCIreSksIWEuaHRtbExhYmVscylmb3IodmFyIHc9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2lkPSInK2UrJyJdIC5lZGdlTGFiZWwgLmxhYmVsJyksRT0wO0U8dy5sZW5ndGg7RSsrKXt2YXIgVD13W0VdLEM9VC5nZXRCQm94KCksUz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicmVjdCIpO1Muc2V0QXR0cmlidXRlKCJyeCIsMCksUy5zZXRBdHRyaWJ1dGUoInJ5IiwwKSxTLnNldEF0dHJpYnV0ZSgid2lkdGgiLEMud2lkdGgpLFMuc2V0QXR0cmlidXRlKCJoZWlnaHQiLEMuaGVpZ2h0KSxULmluc2VydEJlZm9yZShTLFQuZmlyc3RDaGlsZCl9T2JqZWN0LmtleXMoZCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49ZFt0XTtpZihuLmxpbmspe3ZhciByPU9iamVjdChoLnNlbGVjdCkoIiMiK2UrJyBbaWQ9IicrdCsnIl0nKTtpZihyKXt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYSIpO2kuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiY2xhc3MiLG4uY2xhc3Nlcy5qb2luKCIgIikpLGkuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiaHJlZiIsbi5saW5rKSxpLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInJlbCIsIm5vb3BlbmVyIiksbi5saW5rVGFyZ2V0JiZpLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRhcmdldCIsbi5saW5rVGFyZ2V0KTt2YXIgYT1yLmluc2VydCgoZnVuY3Rpb24oKXtyZXR1cm4gaX0pLCI6Zmlyc3QtY2hpbGQiKSxvPXIuc2VsZWN0KCIubGFiZWwtY29udGFpbmVyIik7byYmYS5hcHBlbmQoKGZ1bmN0aW9uKCl7cmV0dXJuIG8ubm9kZSgpfSkpO3ZhciBzPXIuc2VsZWN0KCIubGFiZWwiKTtzJiZhLmFwcGVuZCgoZnVuY3Rpb24oKXtyZXR1cm4gcy5ub2RlKCl9KSl9fX0pKX07ZnVuY3Rpb24gaHIodCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgZT0wLG49bmV3IEFycmF5KHQubGVuZ3RoKTtlPHQubGVuZ3RoO2UrKyluW2VdPXRbZV07cmV0dXJuIG59fSh0KXx8ZnVuY3Rpb24odCl7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdCh0KXx8IltvYmplY3QgQXJndW1lbnRzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkpcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9KCl9dmFyIGZyLGRyLHByPSIiLHlyPSIiLGdyPSIiLHZyPVtdLG1yPSIiLGJyPVtdLHhyPVtdLF9yPSIiLGtyPVsiYWN0aXZlIiwiZG9uZSIsImNyaXQiLCJtaWxlc3RvbmUiXSx3cj1bXSxFcj0hMSxUcj0hMSxDcj0wLFNyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdC5pc29XZWVrZGF5KCk+PTYmJm4uaW5kZXhPZigid2Vla2VuZHMiKT49MHx8KG4uaW5kZXhPZih0LmZvcm1hdCgiZGRkZCIpLnRvTG93ZXJDYXNlKCkpPj0wfHxuLmluZGV4T2YodC5mb3JtYXQoZS50cmltKCkpKT49MCl9LEFyPWZ1bmN0aW9uKHQsZSxuKXtpZihuLmxlbmd0aCYmIXQubWFudWFsRW5kVGltZSl7dmFyIHI9bygpKHQuc3RhcnRUaW1lLGUsITApO3IuYWRkKDEsImQiKTt2YXIgaT1vKCkodC5lbmRUaW1lLGUsITApLGE9TXIocixpLGUsbik7dC5lbmRUaW1lPWkudG9EYXRlKCksdC5yZW5kZXJFbmRUaW1lPWF9fSxNcj1mdW5jdGlvbih0LGUsbixyKXtmb3IodmFyIGk9ITEsYT1udWxsO3Q8PWU7KWl8fChhPWUudG9EYXRlKCkpLChpPVNyKHQsbixyKSkmJmUuYWRkKDEsImQiKSx0LmFkZCgxLCJkIik7cmV0dXJuIGF9LE9yPWZ1bmN0aW9uKHQsZSxuKXtuPW4udHJpbSgpO3ZhciByPS9eYWZ0ZXJccysoW1xkXHctIF0rKS8uZXhlYyhuLnRyaW0oKSk7aWYobnVsbCE9PXIpe3ZhciBpPW51bGw7aWYoclsxXS5zcGxpdCgiICIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPUZyKHQpO3ZvaWQgMCE9PWUmJihpP2UuZW5kVGltZT5pLmVuZFRpbWUmJihpPWUpOmk9ZSl9KSksaSlyZXR1cm4gaS5lbmRUaW1lO3ZhciBhPW5ldyBEYXRlO3JldHVybiBhLnNldEhvdXJzKDAsMCwwLDApLGF9dmFyIHM9bygpKG4sZS50cmltKCksITApO3JldHVybiBzLmlzVmFsaWQoKT9zLnRvRGF0ZSgpOihjLmRlYnVnKCJJbnZhbGlkIGRhdGU6IituKSxjLmRlYnVnKCJXaXRoIGRhdGUgZm9ybWF0OiIrZS50cmltKCkpLG5ldyBEYXRlKX0sQnI9ZnVuY3Rpb24odCxlKXtpZihudWxsIT09dClzd2l0Y2godFsyXSl7Y2FzZSJzIjplLmFkZCh0WzFdLCJzZWNvbmRzIik7YnJlYWs7Y2FzZSJtIjplLmFkZCh0WzFdLCJtaW51dGVzIik7YnJlYWs7Y2FzZSJoIjplLmFkZCh0WzFdLCJob3VycyIpO2JyZWFrO2Nhc2UiZCI6ZS5hZGQodFsxXSwiZGF5cyIpO2JyZWFrO2Nhc2UidyI6ZS5hZGQodFsxXSwid2Vla3MiKX1yZXR1cm4gZS50b0RhdGUoKX0sTnI9ZnVuY3Rpb24odCxlLG4scil7cj1yfHwhMSxuPW4udHJpbSgpO3ZhciBpPW8oKShuLGUudHJpbSgpLCEwKTtyZXR1cm4gaS5pc1ZhbGlkKCk/KHImJmkuYWRkKDEsImQiKSxpLnRvRGF0ZSgpKTpCcigvXihbXGRdKykoW3dkaG1zXSkvLmV4ZWMobi50cmltKCkpLG8oKSh0KSl9LERyPTAsTHI9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/InRhc2siKyhEcis9MSk6dH0sSXI9W10sUnI9e30sRnI9ZnVuY3Rpb24odCl7dmFyIGU9UnJbdF07cmV0dXJuIElyW2VdfSxQcj1mdW5jdGlvbigpe2Zvcih2YXIgdD1mdW5jdGlvbih0KXt2YXIgZT1Jclt0XSxuPSIiO3N3aXRjaChJclt0XS5yYXcuc3RhcnRUaW1lLnR5cGUpe2Nhc2UicHJldlRhc2tFbmQiOnZhciByPUZyKGUucHJldlRhc2tJZCk7ZS5zdGFydFRpbWU9ci5lbmRUaW1lO2JyZWFrO2Nhc2UiZ2V0U3RhcnREYXRlIjoobj1PcigwLHByLElyW3RdLnJhdy5zdGFydFRpbWUuc3RhcnREYXRhKSkmJihJclt0XS5zdGFydFRpbWU9bil9cmV0dXJuIElyW3RdLnN0YXJ0VGltZSYmKElyW3RdLmVuZFRpbWU9TnIoSXJbdF0uc3RhcnRUaW1lLHByLElyW3RdLnJhdy5lbmRUaW1lLmRhdGEsRXIpLElyW3RdLmVuZFRpbWUmJihJclt0XS5wcm9jZXNzZWQ9ITAsSXJbdF0ubWFudWFsRW5kVGltZT1vKCkoSXJbdF0ucmF3LmVuZFRpbWUuZGF0YSwiWVlZWS1NTS1ERCIsITApLmlzVmFsaWQoKSxBcihJclt0XSxwcix2cikpKSxJclt0XS5wcm9jZXNzZWR9LGU9ITAsbj0wO248SXIubGVuZ3RoO24rKyl0KG4pLGU9ZSYmSXJbbl0ucHJvY2Vzc2VkO3JldHVybiBlfSxqcj1mdW5jdGlvbih0LGUpe3Quc3BsaXQoIiwiKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1Gcih0KTt2b2lkIDAhPT1uJiZuLmNsYXNzZXMucHVzaChlKX0pKX0sWXI9ZnVuY3Rpb24odCxlKXt3ci5wdXNoKChmdW5jdGlvbigpe3ZhciBuPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tpZD0iJy5jb25jYXQodCwnIl0nKSk7bnVsbCE9PW4mJm4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLChmdW5jdGlvbigpe2UoKX0pKX0pKSx3ci5wdXNoKChmdW5jdGlvbigpe3ZhciBuPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tpZD0iJy5jb25jYXQodCwnLXRleHQiXScpKTtudWxsIT09biYmbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKGZ1bmN0aW9uKCl7ZSgpfSkpfSkpfSx6cj17cGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4pe3ZzLnBhcnNlRGlyZWN0aXZlKHRoaXMsdCxlLG4pfSxnZXRDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm4gX3QoKS5nYW50dH0sY2xlYXI6ZnVuY3Rpb24oKXticj1bXSx4cj1bXSxfcj0iIix3cj1bXSxtcj0iIixEcj0wLGZyPXZvaWQgMCxkcj12b2lkIDAsSXI9W10scHI9IiIseXI9IiIsZ3I9IiIsdnI9W10sRXI9ITEsVHI9ITEsQ3I9MH0sc2V0RGF0ZUZvcm1hdDpmdW5jdGlvbih0KXtwcj10fSxnZXREYXRlRm9ybWF0OmZ1bmN0aW9uKCl7cmV0dXJuIHByfSxlbmFibGVJbmNsdXNpdmVFbmREYXRlczpmdW5jdGlvbigpe0VyPSEwfSxlbmREYXRlc0FyZUluY2x1c2l2ZTpmdW5jdGlvbigpe3JldHVybiBFcn0sZW5hYmxlVG9wQXhpczpmdW5jdGlvbigpe1RyPSEwfSx0b3BBeGlzRW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiBUcn0sc2V0QXhpc0Zvcm1hdDpmdW5jdGlvbih0KXt5cj10fSxnZXRBeGlzRm9ybWF0OmZ1bmN0aW9uKCl7cmV0dXJuIHlyfSxzZXRUb2RheU1hcmtlcjpmdW5jdGlvbih0KXtncj10fSxnZXRUb2RheU1hcmtlcjpmdW5jdGlvbigpe3JldHVybiBncn0sc2V0VGl0bGU6ZnVuY3Rpb24odCl7bXI9dH0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4gbXJ9LGFkZFNlY3Rpb246ZnVuY3Rpb24odCl7X3I9dCxici5wdXNoKHQpfSxnZXRTZWN0aW9uczpmdW5jdGlvbigpe3JldHVybiBicn0sZ2V0VGFza3M6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9UHIoKSxlPTA7IXQmJmU8MTA7KXQ9UHIoKSxlKys7cmV0dXJuIHhyPUlyfSxhZGRUYXNrOmZ1bmN0aW9uKHQsZSl7dmFyIG49e3NlY3Rpb246X3IsdHlwZTpfcixwcm9jZXNzZWQ6ITEsbWFudWFsRW5kVGltZTohMSxyZW5kZXJFbmRUaW1lOm51bGwscmF3OntkYXRhOmV9LHRhc2s6dCxjbGFzc2VzOltdfSxyPWZ1bmN0aW9uKHQsZSl7dmFyIG49KCI6Ij09PWUuc3Vic3RyKDAsMSk/ZS5zdWJzdHIoMSxlLmxlbmd0aCk6ZSkuc3BsaXQoIiwiKSxyPXt9O1VyKG4scixrcik7Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspbltpXT1uW2ldLnRyaW0oKTtzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMTpyLmlkPUxyKCksci5zdGFydFRpbWU9e3R5cGU6InByZXZUYXNrRW5kIixpZDp0fSxyLmVuZFRpbWU9e2RhdGE6blswXX07YnJlYWs7Y2FzZSAyOnIuaWQ9THIoKSxyLnN0YXJ0VGltZT17dHlwZToiZ2V0U3RhcnREYXRlIixzdGFydERhdGE6blswXX0sci5lbmRUaW1lPXtkYXRhOm5bMV19O2JyZWFrO2Nhc2UgMzpyLmlkPUxyKG5bMF0pLHIuc3RhcnRUaW1lPXt0eXBlOiJnZXRTdGFydERhdGUiLHN0YXJ0RGF0YTpuWzFdfSxyLmVuZFRpbWU9e2RhdGE6blsyXX19cmV0dXJuIHJ9KGRyLGUpO24ucmF3LnN0YXJ0VGltZT1yLnN0YXJ0VGltZSxuLnJhdy5lbmRUaW1lPXIuZW5kVGltZSxuLmlkPXIuaWQsbi5wcmV2VGFza0lkPWRyLG4uYWN0aXZlPXIuYWN0aXZlLG4uZG9uZT1yLmRvbmUsbi5jcml0PXIuY3JpdCxuLm1pbGVzdG9uZT1yLm1pbGVzdG9uZSxuLm9yZGVyPUNyLENyKys7dmFyIGk9SXIucHVzaChuKTtkcj1uLmlkLFJyW24uaWRdPWktMX0sZmluZFRhc2tCeUlkOkZyLGFkZFRhc2tPcmc6ZnVuY3Rpb24odCxlKXt2YXIgbj17c2VjdGlvbjpfcix0eXBlOl9yLGRlc2NyaXB0aW9uOnQsdGFzazp0LGNsYXNzZXM6W119LHI9ZnVuY3Rpb24odCxlKXt2YXIgbj0oIjoiPT09ZS5zdWJzdHIoMCwxKT9lLnN1YnN0cigxLGUubGVuZ3RoKTplKS5zcGxpdCgiLCIpLHI9e307VXIobixyLGtyKTtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKyluW2ldPW5baV0udHJpbSgpO3ZhciBhPSIiO3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAxOnIuaWQ9THIoKSxyLnN0YXJ0VGltZT10LmVuZFRpbWUsYT1uWzBdO2JyZWFrO2Nhc2UgMjpyLmlkPUxyKCksci5zdGFydFRpbWU9T3IoMCxwcixuWzBdKSxhPW5bMV07YnJlYWs7Y2FzZSAzOnIuaWQ9THIoblswXSksci5zdGFydFRpbWU9T3IoMCxwcixuWzFdKSxhPW5bMl19cmV0dXJuIGEmJihyLmVuZFRpbWU9TnIoci5zdGFydFRpbWUscHIsYSxFciksci5tYW51YWxFbmRUaW1lPW8oKShhLCJZWVlZLU1NLUREIiwhMCkuaXNWYWxpZCgpLEFyKHIscHIsdnIpKSxyfShmcixlKTtuLnN0YXJ0VGltZT1yLnN0YXJ0VGltZSxuLmVuZFRpbWU9ci5lbmRUaW1lLG4uaWQ9ci5pZCxuLmFjdGl2ZT1yLmFjdGl2ZSxuLmRvbmU9ci5kb25lLG4uY3JpdD1yLmNyaXQsbi5taWxlc3RvbmU9ci5taWxlc3RvbmUsZnI9bix4ci5wdXNoKG4pfSxzZXRFeGNsdWRlczpmdW5jdGlvbih0KXt2cj10LnRvTG93ZXJDYXNlKCkuc3BsaXQoL1tccyxdKy8pfSxnZXRFeGNsdWRlczpmdW5jdGlvbigpe3JldHVybiB2cn0sc2V0Q2xpY2tFdmVudDpmdW5jdGlvbih0LGUsbil7dC5zcGxpdCgiLCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpeyFmdW5jdGlvbih0LGUsbil7aWYoImxvb3NlIj09PV90KCkuc2VjdXJpdHlMZXZlbCYmdm9pZCAwIT09ZSl7dmFyIHI9W107aWYoInN0cmluZyI9PXR5cGVvZiBuKXtyPW4uc3BsaXQoLywoPz0oPzooPzpbXiJdKiIpezJ9KSpbXiJdKiQpLyk7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXJbaV0udHJpbSgpOyciJz09PWEuY2hhckF0KDApJiYnIic9PT1hLmNoYXJBdChhLmxlbmd0aC0xKSYmKGE9YS5zdWJzdHIoMSxhLmxlbmd0aC0yKSkscltpXT1hfX0wPT09ci5sZW5ndGgmJnIucHVzaCh0KSx2b2lkIDAhPT1Gcih0KSYmWXIodCwoZnVuY3Rpb24oKXtWLnJ1bkZ1bmMuYXBwbHkoVixbZV0uY29uY2F0KGhyKHIpKSl9KSl9fSh0LGUsbil9KSksanIodCwiY2xpY2thYmxlIil9LHNldExpbms6ZnVuY3Rpb24odCxlKXt2YXIgbj1lOyJsb29zZSIhPT1fdCgpLnNlY3VyaXR5TGV2ZWwmJihuPU9iamVjdCh5LnNhbml0aXplVXJsKShlKSksdC5zcGxpdCgiLCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PUZyKHQpJiZZcih0LChmdW5jdGlvbigpe3dpbmRvdy5vcGVuKG4sIl9zZWxmIil9KSl9KSksanIodCwiY2xpY2thYmxlIil9LGJpbmRGdW5jdGlvbnM6ZnVuY3Rpb24odCl7d3IuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZSh0KX0pKX0sZHVyYXRpb25Ub0RhdGU6QnJ9O2Z1bmN0aW9uIFVyKHQsZSxuKXtmb3IodmFyIHI9ITA7cjspcj0hMSxuLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBpPW5ldyBSZWdFeHAoIl5cXHMqIituKyJcXHMqJCIpO3RbMF0ubWF0Y2goaSkmJihlW25dPSEwLHQuc2hpZnQoMSkscj0hMCl9KSl9dmFyICRyPW4oMjQpLHFyPW4ubigkcik7JHIucGFyc2VyLnl5PXpyO3ZhciBXcixWcj1mdW5jdGlvbigpe30sSHI9ZnVuY3Rpb24odCxlKXt2YXIgbj1fdCgpLmdhbnR0OyRyLnBhcnNlci55eS5jbGVhcigpLCRyLnBhcnNlci5wYXJzZSh0KTt2YXIgcj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKTt2b2lkIDA9PT0oV3I9ci5wYXJlbnRFbGVtZW50Lm9mZnNldFdpZHRoKSYmKFdyPTEyMDApLHZvaWQgMCE9PW4udXNlV2lkdGgmJihXcj1uLnVzZVdpZHRoKTt2YXIgaT0kci5wYXJzZXIueXkuZ2V0VGFza3MoKSxhPWkubGVuZ3RoKihuLmJhckhlaWdodCtuLmJhckdhcCkrMipuLnRvcFBhZGRpbmc7ci5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLCIwIDAgIitXcisiICIrYSk7Zm9yKHZhciBvPU9iamVjdChoLnNlbGVjdCkoJ1tpZD0iJy5jb25jYXQoZSwnIl0nKSkscz1PYmplY3QoaC5zY2FsZVRpbWUpKCkuZG9tYWluKFtPYmplY3QoaC5taW4pKGksKGZ1bmN0aW9uKHQpe3JldHVybiB0LnN0YXJ0VGltZX0pKSxPYmplY3QoaC5tYXgpKGksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmVuZFRpbWV9KSldKS5yYW5nZVJvdW5kKFswLFdyLW4ubGVmdFBhZGRpbmctbi5yaWdodFBhZGRpbmddKSxjPVtdLHU9MDt1PGkubGVuZ3RoO3UrKyljLnB1c2goaVt1XS50eXBlKTt2YXIgbD1jO2Z1bmN0aW9uIGYodCl7Zm9yKHZhciBlPXQubGVuZ3RoLG49e307ZTspblt0Wy0tZV1dPShuW3RbZV1dfHwwKSsxO3JldHVybiBufWM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXt9LG49W10scj0wLGk9dC5sZW5ndGg7cjxpOysrcillLmhhc093blByb3BlcnR5KHRbcl0pfHwoZVt0W3JdXT0hMCxuLnB1c2godFtyXSkpO3JldHVybiBufShjKSxpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7dmFyIG49dC5zdGFydFRpbWUscj1lLnN0YXJ0VGltZSxpPTA7cmV0dXJuIG4+cj9pPTE6bjxyJiYoaT0tMSksaX0pKSxmdW5jdGlvbih0LGUscil7dmFyIGk9bi5iYXJIZWlnaHQsYT1pK24uYmFyR2FwLHU9bi50b3BQYWRkaW5nLGQ9bi5sZWZ0UGFkZGluZztPYmplY3QoaC5zY2FsZUxpbmVhcikoKS5kb21haW4oWzAsYy5sZW5ndGhdKS5yYW5nZShbIiMwMEI5RkEiLCIjRjk1MDAyIl0pLmludGVycG9sYXRlKGguaW50ZXJwb2xhdGVIY2wpOyhmdW5jdGlvbih0LGUscixpKXt2YXIgYT1PYmplY3QoaC5heGlzQm90dG9tKShzKS50aWNrU2l6ZSgtaStlK24uZ3JpZExpbmVTdGFydFBhZGRpbmcpLnRpY2tGb3JtYXQoT2JqZWN0KGgudGltZUZvcm1hdCkoJHIucGFyc2VyLnl5LmdldEF4aXNGb3JtYXQoKXx8bi5heGlzRm9ybWF0fHwiJVktJW0tJWQiKSk7aWYoby5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImdyaWQiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0KyIsICIrKGktNTApKyIpIikuY2FsbChhKS5zZWxlY3RBbGwoInRleHQiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJmaWxsIiwiIzAwMCIpLmF0dHIoInN0cm9rZSIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJkeSIsIjFlbSIpLHpyLnRvcEF4aXNFbmFibGVkKCl8fG4udG9wQXhpcyl7dmFyIGM9T2JqZWN0KGguYXhpc1RvcCkocykudGlja1NpemUoLWkrZStuLmdyaWRMaW5lU3RhcnRQYWRkaW5nKS50aWNrRm9ybWF0KE9iamVjdChoLnRpbWVGb3JtYXQpKCRyLnBhcnNlci55eS5nZXRBeGlzRm9ybWF0KCl8fG4uYXhpc0Zvcm1hdHx8IiVZLSVtLSVkIikpO28uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJncmlkIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdCsiLCAiK2UrIikiKS5jYWxsKGMpLnNlbGVjdEFsbCgidGV4dCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImZpbGwiLCIjMDAwIikuYXR0cigic3Ryb2tlIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApfX0pKGQsdSwwLHIpLGZ1bmN0aW9uKHQsZSxyLGksYSx1LGwpe28uYXBwZW5kKCJnIikuc2VsZWN0QWxsKCJyZWN0IikuZGF0YSh0KS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLChmdW5jdGlvbih0LG4pe3JldHVybiB0Lm9yZGVyKmUrci0yfSkpLmF0dHIoIndpZHRoIiwoZnVuY3Rpb24oKXtyZXR1cm4gbC1uLnJpZ2h0UGFkZGluZy8yfSkpLmF0dHIoImhlaWdodCIsZSkuYXR0cigiY2xhc3MiLChmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPGMubGVuZ3RoO2UrKylpZih0LnR5cGU9PT1jW2VdKXJldHVybiJzZWN0aW9uIHNlY3Rpb24iK2Ulbi5udW1iZXJTZWN0aW9uU3R5bGVzO3JldHVybiJzZWN0aW9uIHNlY3Rpb24wIn0pKTt2YXIgaD1vLmFwcGVuZCgiZyIpLnNlbGVjdEFsbCgicmVjdCIpLmRhdGEodCkuZW50ZXIoKTtoLmFwcGVuZCgicmVjdCIpLmF0dHIoImlkIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSkuYXR0cigicngiLDMpLmF0dHIoInJ5IiwzKS5hdHRyKCJ4IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQubWlsZXN0b25lP3ModC5zdGFydFRpbWUpK2krLjUqKHModC5lbmRUaW1lKS1zKHQuc3RhcnRUaW1lKSktLjUqYTpzKHQuc3RhcnRUaW1lKStpfSkpLmF0dHIoInkiLChmdW5jdGlvbih0LG4pe3JldHVybiB0Lm9yZGVyKmUrcn0pKS5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1pbGVzdG9uZT9hOnModC5yZW5kZXJFbmRUaW1lfHx0LmVuZFRpbWUpLXModC5zdGFydFRpbWUpfSkpLmF0dHIoImhlaWdodCIsYSkuYXR0cigidHJhbnNmb3JtLW9yaWdpbiIsKGZ1bmN0aW9uKHQsbil7cmV0dXJuIG49dC5vcmRlciwocyh0LnN0YXJ0VGltZSkraSsuNSoocyh0LmVuZFRpbWUpLXModC5zdGFydFRpbWUpKSkudG9TdHJpbmcoKSsicHggIisobiplK3IrLjUqYSkudG9TdHJpbmcoKSsicHgifSkpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7dmFyIGU9IiI7dC5jbGFzc2VzLmxlbmd0aD4wJiYoZT10LmNsYXNzZXMuam9pbigiICIpKTtmb3IodmFyIHI9MCxpPTA7aTxjLmxlbmd0aDtpKyspdC50eXBlPT09Y1tpXSYmKHI9aSVuLm51bWJlclNlY3Rpb25TdHlsZXMpO3ZhciBhPSIiO3JldHVybiB0LmFjdGl2ZT90LmNyaXQ/YSs9IiBhY3RpdmVDcml0IjphPSIgYWN0aXZlIjp0LmRvbmU/YT10LmNyaXQ/IiBkb25lQ3JpdCI6IiBkb25lIjp0LmNyaXQmJihhKz0iIGNyaXQiKSwwPT09YS5sZW5ndGgmJihhPSIgdGFzayIpLHQubWlsZXN0b25lJiYoYT0iIG1pbGVzdG9uZSAiK2EpLGErPXIsInRhc2siKyhhKz0iICIrZSl9KSksaC5hcHBlbmQoInRleHQiKS5hdHRyKCJpZCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkKyItdGV4dCJ9KSkudGV4dCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudGFza30pKS5hdHRyKCJmb250LXNpemUiLG4uZm9udFNpemUpLmF0dHIoIngiLChmdW5jdGlvbih0KXt2YXIgZT1zKHQuc3RhcnRUaW1lKSxyPXModC5yZW5kZXJFbmRUaW1lfHx0LmVuZFRpbWUpO3QubWlsZXN0b25lJiYoZSs9LjUqKHModC5lbmRUaW1lKS1zKHQuc3RhcnRUaW1lKSktLjUqYSksdC5taWxlc3RvbmUmJihyPWUrYSk7dmFyIG89dGhpcy5nZXRCQm94KCkud2lkdGg7cmV0dXJuIG8+ci1lP3IrbysxLjUqbi5sZWZ0UGFkZGluZz5sP2UraS01OnIraSs1OihyLWUpLzIrZStpfSkpLmF0dHIoInkiLChmdW5jdGlvbih0LGkpe3JldHVybiB0Lm9yZGVyKmUrbi5iYXJIZWlnaHQvMisobi5mb250U2l6ZS8yLTIpK3J9KSkuYXR0cigidGV4dC1oZWlnaHQiLGEpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7dmFyIGU9cyh0LnN0YXJ0VGltZSkscj1zKHQuZW5kVGltZSk7dC5taWxlc3RvbmUmJihyPWUrYSk7dmFyIGk9dGhpcy5nZXRCQm94KCkud2lkdGgsbz0iIjt0LmNsYXNzZXMubGVuZ3RoPjAmJihvPXQuY2xhc3Nlcy5qb2luKCIgIikpO2Zvcih2YXIgdT0wLGg9MDtoPGMubGVuZ3RoO2grKyl0LnR5cGU9PT1jW2hdJiYodT1oJW4ubnVtYmVyU2VjdGlvblN0eWxlcyk7dmFyIGY9IiI7cmV0dXJuIHQuYWN0aXZlJiYoZj10LmNyaXQ/ImFjdGl2ZUNyaXRUZXh0Iit1OiJhY3RpdmVUZXh0Iit1KSx0LmRvbmU/Zj10LmNyaXQ/ZisiIGRvbmVDcml0VGV4dCIrdTpmKyIgZG9uZVRleHQiK3U6dC5jcml0JiYoZj1mKyIgY3JpdFRleHQiK3UpLHQubWlsZXN0b25lJiYoZis9IiBtaWxlc3RvbmVUZXh0IiksaT5yLWU/citpKzEuNSpuLmxlZnRQYWRkaW5nPmw/bysiIHRhc2tUZXh0T3V0c2lkZUxlZnQgdGFza1RleHRPdXRzaWRlIit1KyIgIitmOm8rIiB0YXNrVGV4dE91dHNpZGVSaWdodCB0YXNrVGV4dE91dHNpZGUiK3UrIiAiK2YrIiB3aWR0aC0iK2k6bysiIHRhc2tUZXh0IHRhc2tUZXh0Iit1KyIgIitmKyIgd2lkdGgtIitpfSkpfSh0LGEsdSxkLGksMCxlKSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxpPTAsYT0wO2E8Yy5sZW5ndGg7YSsrKXJbYV09W2NbYV0sKHM9Y1thXSx1PWwsZih1KVtzXXx8MCldO3ZhciBzLHU7by5hcHBlbmQoImciKS5zZWxlY3RBbGwoInRleHQiKS5kYXRhKHIpLmVudGVyKCkuYXBwZW5kKChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnNwbGl0KF8ubGluZUJyZWFrUmVnZXgpLG49LShlLmxlbmd0aC0xKS8yLHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRleHQiKTtyLnNldEF0dHJpYnV0ZSgiZHkiLG4rImVtIik7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0c3BhbiIpO2Euc2V0QXR0cmlidXRlKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJjZW50cmFsIiksYS5zZXRBdHRyaWJ1dGUoIngiLCIxMCIpLGk+MCYmYS5zZXRBdHRyaWJ1dGUoImR5IiwiMWVtIiksYS50ZXh0Q29udGVudD1lW2ldLHIuYXBwZW5kQ2hpbGQoYSl9cmV0dXJuIHJ9KSkuYXR0cigieCIsMTApLmF0dHIoInkiLChmdW5jdGlvbihuLGEpe2lmKCEoYT4wKSlyZXR1cm4gblsxXSp0LzIrZTtmb3IodmFyIG89MDtvPGE7bysrKXJldHVybiBpKz1yW2EtMV1bMV0sblsxXSp0LzIraSp0K2V9KSkuYXR0cigiZm9udC1zaXplIixuLnNlY3Rpb25Gb250U2l6ZSkuYXR0cigiZm9udC1zaXplIixuLnNlY3Rpb25Gb250U2l6ZSkuYXR0cigiY2xhc3MiLChmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPGMubGVuZ3RoO2UrKylpZih0WzBdPT09Y1tlXSlyZXR1cm4ic2VjdGlvblRpdGxlIHNlY3Rpb25UaXRsZSIrZSVuLm51bWJlclNlY3Rpb25TdHlsZXM7cmV0dXJuInNlY3Rpb25UaXRsZSJ9KSl9KGEsdSksZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9enIuZ2V0VG9kYXlNYXJrZXIoKTtpZigib2ZmIj09PWEpcmV0dXJuO3ZhciBjPW8uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0b2RheSIpLHU9bmV3IERhdGUsbD1jLmFwcGVuZCgibGluZSIpO2wuYXR0cigieDEiLHModSkrdCkuYXR0cigieDIiLHModSkrdCkuYXR0cigieTEiLG4udGl0bGVUb3BNYXJnaW4pLmF0dHIoInkyIixpLW4udGl0bGVUb3BNYXJnaW4pLmF0dHIoImNsYXNzIiwidG9kYXkiKSwiIiE9PWEmJmwuYXR0cigic3R5bGUiLGEucmVwbGFjZSgvLC9nLCI7IikpfShkLDAsMCxyKX0oaSxXcixhKSxXKG8sYSxXcixuLnVzZU1heFdpZHRoKSxvLmFwcGVuZCgidGV4dCIpLnRleHQoJHIucGFyc2VyLnl5LmdldFRpdGxlKCkpLmF0dHIoIngiLFdyLzIpLmF0dHIoInkiLG4udGl0bGVUb3BNYXJnaW4pLmF0dHIoImNsYXNzIiwidGl0bGVUZXh0Iil9LEdyPXt9LFhyPW51bGwsWnI9e21hc3RlcjpYcn0sUXI9Im1hc3RlciIsS3I9IkxSIixKcj0wO2Z1bmN0aW9uIHRpKCl7cmV0dXJuIEYoe2xlbmd0aDo3fSl9ZnVuY3Rpb24gZWkodCxlKXtmb3IoYy5kZWJ1ZygiRW50ZXJpbmcgaXNmYXN0Zm9yd2FyZGFibGU6Iix0LmlkLGUuaWQpO3Quc2VxPD1lLnNlcSYmdCE9PWUmJm51bGwhPWUucGFyZW50Oyl7aWYoQXJyYXkuaXNBcnJheShlLnBhcmVudCkpcmV0dXJuIGMuZGVidWcoIkluIG1lcmdlIGNvbW1pdDoiLGUucGFyZW50KSxlaSh0LEdyW2UucGFyZW50WzBdXSl8fGVpKHQsR3JbZS5wYXJlbnRbMV1dKTtlPUdyW2UucGFyZW50XX1yZXR1cm4gYy5kZWJ1Zyh0LmlkLGUuaWQpLHQuaWQ9PT1lLmlkfXZhciBuaT17fTtmdW5jdGlvbiByaSh0LGUsbil7dmFyIHI9dC5pbmRleE9mKGUpOy0xPT09cj90LnB1c2gobik6dC5zcGxpY2UociwxLG4pfWZ1bmN0aW9uIGlpKHQpe3ZhciBlPXQucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0LnNlcT5lLnNlcT90OmV9KSx0WzBdKSxuPSIiO3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7bis9dD09PWU/Ilx0KiI6Ilx0fCJ9KSk7dmFyIHIsaSxhLG89W24sZS5pZCxlLnNlcV07Zm9yKHZhciBzIGluIFpyKVpyW3NdPT09ZS5pZCYmby5wdXNoKHMpO2lmKGMuZGVidWcoby5qb2luKCIgIikpLEFycmF5LmlzQXJyYXkoZS5wYXJlbnQpKXt2YXIgdT1HcltlLnBhcmVudFswXV07cmkodCxlLHUpLHQucHVzaChHcltlLnBhcmVudFsxXV0pfWVsc2V7aWYobnVsbD09ZS5wYXJlbnQpcmV0dXJuO3ZhciBsPUdyW2UucGFyZW50XTtyaSh0LGUsbCl9cj10LGk9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9LGE9T2JqZWN0LmNyZWF0ZShudWxsKSxpaSh0PXIucmVkdWNlKChmdW5jdGlvbih0LGUpe3ZhciBuPWkoZSk7cmV0dXJuIGFbbl18fChhW25dPSEwLHQucHVzaChlKSksdH0pLFtdKSl9dmFyIGFpLG9pPWZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0LmtleXMoR3IpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIEdyW3RdfSkpO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2MuZGVidWcodC5pZCl9KSksdC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBlLnNlcS10LnNlcX0pKSx0fSxzaT17c2V0RGlyZWN0aW9uOmZ1bmN0aW9uKHQpe0tyPXR9LHNldE9wdGlvbnM6ZnVuY3Rpb24odCl7Yy5kZWJ1Zygib3B0aW9ucyBzdHIiLHQpLHQ9KHQ9dCYmdC50cmltKCkpfHwie30iO3RyeXtuaT1KU09OLnBhcnNlKHQpfWNhdGNoKHQpe2MuZXJyb3IoImVycm9yIHdoaWxlIHBhcnNpbmcgZ2l0R3JhcGggb3B0aW9ucyIsdC5tZXNzYWdlKX19LGdldE9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gbml9LGNvbW1pdDpmdW5jdGlvbih0KXt2YXIgZT17aWQ6dGkoKSxtZXNzYWdlOnQsc2VxOkpyKysscGFyZW50Om51bGw9PVhyP251bGw6WHIuaWR9O1hyPWUsR3JbZS5pZF09ZSxacltRcl09ZS5pZCxjLmRlYnVnKCJpbiBwdXNoQ29tbWl0ICIrZS5pZCl9LGJyYW5jaDpmdW5jdGlvbih0KXtaclt0XT1udWxsIT1Ycj9Yci5pZDpudWxsLGMuZGVidWcoImluIGNyZWF0ZUJyYW5jaCIpfSxtZXJnZTpmdW5jdGlvbih0KXt2YXIgZT1HcltacltRcl1dLG49R3JbWnJbdF1dO2lmKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuc2VxPmUuc2VxJiZlaShlLHQpfShlLG4pKWMuZGVidWcoIkFscmVhZHkgbWVyZ2VkIik7ZWxzZXtpZihlaShlLG4pKVpyW1FyXT1aclt0XSxYcj1HcltacltRcl1dO2Vsc2V7dmFyIHI9e2lkOnRpKCksbWVzc2FnZToibWVyZ2VkIGJyYW5jaCAiK3QrIiBpbnRvICIrUXIsc2VxOkpyKysscGFyZW50OltudWxsPT1Ycj9udWxsOlhyLmlkLFpyW3RdXX07WHI9cixHcltyLmlkXT1yLFpyW1FyXT1yLmlkfWMuZGVidWcoWnIpLGMuZGVidWcoImluIG1lcmdlQnJhbmNoIil9fSxjaGVja291dDpmdW5jdGlvbih0KXtjLmRlYnVnKCJpbiBjaGVja291dCIpO3ZhciBlPVpyW1FyPXRdO1hyPUdyW2VdfSxyZXNldDpmdW5jdGlvbih0KXtjLmRlYnVnKCJpbiByZXNldCIsdCk7dmFyIGU9dC5zcGxpdCgiOiIpWzBdLG49cGFyc2VJbnQodC5zcGxpdCgiOiIpWzFdKSxyPSJIRUFEIj09PWU/WHI6R3JbWnJbZV1dO2ZvcihjLmRlYnVnKHIsbik7bj4wOylpZihuLS0sIShyPUdyW3IucGFyZW50XSkpe3ZhciBpPSJDcml0aWNhbCBlcnJvciAtIHVuaXF1ZSBwYXJlbnQgY29tbWl0IG5vdCBmb3VuZCBkdXJpbmcgcmVzZXQiO3Rocm93IGMuZXJyb3IoaSksaX1Ycj1yLFpyW1FyXT1yLmlkfSxwcmV0dHlQcmludDpmdW5jdGlvbigpe2MuZGVidWcoR3IpLGlpKFtvaSgpWzBdXSl9LGNsZWFyOmZ1bmN0aW9uKCl7R3I9e30sWnI9e21hc3RlcjpYcj1udWxsfSxRcj0ibWFzdGVyIixKcj0wfSxnZXRCcmFuY2hlc0FzT2JqQXJyYXk6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gWnIpdC5wdXNoKHtuYW1lOmUsY29tbWl0OkdyW1pyW2VdXX0pO3JldHVybiB0fSxnZXRCcmFuY2hlczpmdW5jdGlvbigpe3JldHVybiBacn0sZ2V0Q29tbWl0czpmdW5jdGlvbigpe3JldHVybiBHcn0sZ2V0Q29tbWl0c0FycmF5Om9pLGdldEN1cnJlbnRCcmFuY2g6ZnVuY3Rpb24oKXtyZXR1cm4gUXJ9LGdldERpcmVjdGlvbjpmdW5jdGlvbigpe3JldHVybiBLcn0sZ2V0SGVhZDpmdW5jdGlvbigpe3JldHVybiBYcn19LGNpPW4oNzIpLHVpPW4ubihjaSksbGk9e30saGk9e25vZGVTcGFjaW5nOjE1MCxub2RlRmlsbENvbG9yOiJ5ZWxsb3ciLG5vZGVTdHJva2VXaWR0aDoyLG5vZGVTdHJva2VDb2xvcjoiZ3JleSIsbGluZVN0cm9rZVdpZHRoOjQsYnJhbmNoT2Zmc2V0OjUwLGxpbmVDb2xvcjoiZ3JleSIsbGVmdE1hcmdpbjo1MCxicmFuY2hDb2xvcnM6WyIjNDQyZjc0IiwiIzk4MzM1MSIsIiM2MDk3MzIiLCIjQUE5QTM5Il0sbm9kZVJhZGl1czoxMCxub2RlTGFiZWw6e3dpZHRoOjc1LGhlaWdodDoxMDAseDotMjUseTowfX0sZmk9e307ZnVuY3Rpb24gZGkodCxlLG4scil7dmFyIGk9TihyLGguY3VydmVCYXNpcyksYT1oaS5icmFuY2hDb2xvcnNbbiVoaS5icmFuY2hDb2xvcnMubGVuZ3RoXSxvPU9iamVjdChoLmxpbmUpKCkueCgoZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodC54KX0pKS55KChmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0LnkpfSkpLmN1cnZlKGkpO3QuYXBwZW5kKCJzdmc6cGF0aCIpLmF0dHIoImQiLG8oZSkpLnN0eWxlKCJzdHJva2UiLGEpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGhpLmxpbmVTdHJva2VXaWR0aCkuc3R5bGUoImZpbGwiLCJub25lIil9ZnVuY3Rpb24gcGkodCxlKXtlPWV8fHQubm9kZSgpLmdldEJCb3goKTt2YXIgbj10Lm5vZGUoKS5nZXRDVE0oKTtyZXR1cm57bGVmdDpuLmUrZS54Km4uYSx0b3A6bi5mK2UueSpuLmQsd2lkdGg6ZS53aWR0aCxoZWlnaHQ6ZS5oZWlnaHR9fWZ1bmN0aW9uIHlpKHQsZSxuLHIsaSl7Yy5kZWJ1Zygic3ZnRHJhd0xpbmVGb3JDb21taXRzOiAiLGUsbik7dmFyIGE9cGkodC5zZWxlY3QoIiNub2RlLSIrZSsiIGNpcmNsZSIpKSxvPXBpKHQuc2VsZWN0KCIjbm9kZS0iK24rIiBjaXJjbGUiKSk7c3dpdGNoKHIpe2Nhc2UiTFIiOmlmKGEubGVmdC1vLmxlZnQ+aGkubm9kZVNwYWNpbmcpe3ZhciBzPXt4OmEubGVmdC1oaS5ub2RlU3BhY2luZyx5Om8udG9wK28uaGVpZ2h0LzJ9O2RpKHQsW3Mse3g6by5sZWZ0K28ud2lkdGgseTpvLnRvcCtvLmhlaWdodC8yfV0saSwibGluZWFyIiksZGkodCxbe3g6YS5sZWZ0LHk6YS50b3ArYS5oZWlnaHQvMn0se3g6YS5sZWZ0LWhpLm5vZGVTcGFjaW5nLzIseTphLnRvcCthLmhlaWdodC8yfSx7eDphLmxlZnQtaGkubm9kZVNwYWNpbmcvMix5OnMueX0sc10saSl9ZWxzZSBkaSh0LFt7eDphLmxlZnQseTphLnRvcCthLmhlaWdodC8yfSx7eDphLmxlZnQtaGkubm9kZVNwYWNpbmcvMix5OmEudG9wK2EuaGVpZ2h0LzJ9LHt4OmEubGVmdC1oaS5ub2RlU3BhY2luZy8yLHk6by50b3Arby5oZWlnaHQvMn0se3g6by5sZWZ0K28ud2lkdGgseTpvLnRvcCtvLmhlaWdodC8yfV0saSk7YnJlYWs7Y2FzZSJCVCI6aWYoby50b3AtYS50b3A+aGkubm9kZVNwYWNpbmcpe3ZhciB1PXt4Om8ubGVmdCtvLndpZHRoLzIseTphLnRvcCthLmhlaWdodCtoaS5ub2RlU3BhY2luZ307ZGkodCxbdSx7eDpvLmxlZnQrby53aWR0aC8yLHk6by50b3B9XSxpLCJsaW5lYXIiKSxkaSh0LFt7eDphLmxlZnQrYS53aWR0aC8yLHk6YS50b3ArYS5oZWlnaHR9LHt4OmEubGVmdCthLndpZHRoLzIseTphLnRvcCthLmhlaWdodCtoaS5ub2RlU3BhY2luZy8yfSx7eDpvLmxlZnQrby53aWR0aC8yLHk6dS55LWhpLm5vZGVTcGFjaW5nLzJ9LHVdLGkpfWVsc2UgZGkodCxbe3g6YS5sZWZ0K2Eud2lkdGgvMix5OmEudG9wK2EuaGVpZ2h0fSx7eDphLmxlZnQrYS53aWR0aC8yLHk6YS50b3AraGkubm9kZVNwYWNpbmcvMn0se3g6by5sZWZ0K28ud2lkdGgvMix5Om8udG9wLWhpLm5vZGVTcGFjaW5nLzJ9LHt4Om8ubGVmdCtvLndpZHRoLzIseTpvLnRvcH1dLGkpfX1mdW5jdGlvbiBnaSh0LGUpe3JldHVybiB0LnNlbGVjdChlKS5ub2RlKCkuY2xvbmVOb2RlKCEwKX1mdW5jdGlvbiB2aSh0LGUsbixyKXt2YXIgaSxhPU9iamVjdC5rZXlzKGxpKS5sZW5ndGg7aWYoInN0cmluZyI9PXR5cGVvZiBlKWRve2lmKGk9bGlbZV0sYy5kZWJ1ZygiaW4gcmVuZGVyQ29tbWl0SGlzdG9yeSIsaS5pZCxpLnNlcSksdC5zZWxlY3QoIiNub2RlLSIrZSkuc2l6ZSgpPjApcmV0dXJuO3QuYXBwZW5kKChmdW5jdGlvbigpe3JldHVybiBnaSh0LCIjZGVmLWNvbW1pdCIpfSkpLmF0dHIoImNsYXNzIiwiY29tbWl0IikuYXR0cigiaWQiLChmdW5jdGlvbigpe3JldHVybiJub2RlLSIraS5pZH0pKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbigpe3N3aXRjaChyKXtjYXNlIkxSIjpyZXR1cm4idHJhbnNsYXRlKCIrKGkuc2VxKmhpLm5vZGVTcGFjaW5nK2hpLmxlZnRNYXJnaW4pKyIsICIrYWkqaGkuYnJhbmNoT2Zmc2V0KyIpIjtjYXNlIkJUIjpyZXR1cm4idHJhbnNsYXRlKCIrKGFpKmhpLmJyYW5jaE9mZnNldCtoaS5sZWZ0TWFyZ2luKSsiLCAiKyhhLWkuc2VxKSpoaS5ub2RlU3BhY2luZysiKSJ9fSkpLmF0dHIoImZpbGwiLGhpLm5vZGVGaWxsQ29sb3IpLmF0dHIoInN0cm9rZSIsaGkubm9kZVN0cm9rZUNvbG9yKS5hdHRyKCJzdHJva2Utd2lkdGgiLGhpLm5vZGVTdHJva2VXaWR0aCk7dmFyIG89dm9pZCAwO2Zvcih2YXIgcyBpbiBuKWlmKG5bc10uY29tbWl0PT09aSl7bz1uW3NdO2JyZWFrfW8mJihjLmRlYnVnKCJmb3VuZCBicmFuY2ggIixvLm5hbWUpLHQuc2VsZWN0KCIjbm9kZS0iK2kuaWQrIiBwIikuYXBwZW5kKCJ4aHRtbDpzcGFuIikuYXR0cigiY2xhc3MiLCJicmFuY2gtbGFiZWwiKS50ZXh0KG8ubmFtZSsiLCAiKSksdC5zZWxlY3QoIiNub2RlLSIraS5pZCsiIHAiKS5hcHBlbmQoInhodG1sOnNwYW4iKS5hdHRyKCJjbGFzcyIsImNvbW1pdC1pZCIpLnRleHQoaS5pZCksIiIhPT1pLm1lc3NhZ2UmJiJCVCI9PT1yJiZ0LnNlbGVjdCgiI25vZGUtIitpLmlkKyIgcCIpLmFwcGVuZCgieGh0bWw6c3BhbiIpLmF0dHIoImNsYXNzIiwiY29tbWl0LW1zZyIpLnRleHQoIiwgIitpLm1lc3NhZ2UpLGU9aS5wYXJlbnR9d2hpbGUoZSYmbGlbZV0pO0FycmF5LmlzQXJyYXkoZSkmJihjLmRlYnVnKCJmb3VuZCBtZXJnZSBjb21tbWl0IixlKSx2aSh0LGVbMF0sbixyKSxhaSsrLHZpKHQsZVsxXSxuLHIpLGFpLS0pfWZ1bmN0aW9uIG1pKHQsZSxuLHIpe2ZvcihyPXJ8fDA7ZS5zZXE+MCYmIWUubGluZURyYXduOykic3RyaW5nIj09dHlwZW9mIGUucGFyZW50Pyh5aSh0LGUuaWQsZS5wYXJlbnQsbixyKSxlLmxpbmVEcmF3bj0hMCxlPWxpW2UucGFyZW50XSk6QXJyYXkuaXNBcnJheShlLnBhcmVudCkmJih5aSh0LGUuaWQsZS5wYXJlbnRbMF0sbixyKSx5aSh0LGUuaWQsZS5wYXJlbnRbMV0sbixyKzEpLG1pKHQsbGlbZS5wYXJlbnRbMV1dLG4scisxKSxlLmxpbmVEcmF3bj0hMCxlPWxpW2UucGFyZW50WzBdXSl9dmFyIGJpLHhpPWZ1bmN0aW9uKHQpe2ZpPXR9LF9pPWZ1bmN0aW9uKHQsZSxuKXt0cnl7dmFyIHI9dWkuYS5wYXJzZXI7ci55eT1zaSxyLnl5LmNsZWFyKCksYy5kZWJ1ZygiaW4gZ2l0Z3JhcGggcmVuZGVyZXIiLHQrIlxuIiwiaWQ6IixlLG4pLHIucGFyc2UodCsiXG4iKSxoaT1PYmplY3QuYXNzaWduKGhpLGZpLHNpLmdldE9wdGlvbnMoKSksYy5kZWJ1ZygiZWZmZWN0aXZlIG9wdGlvbnMiLGhpKTt2YXIgaT1zaS5nZXREaXJlY3Rpb24oKTtsaT1zaS5nZXRDb21taXRzKCk7dmFyIGE9c2kuZ2V0QnJhbmNoZXNBc09iakFycmF5KCk7IkJUIj09PWkmJihoaS5ub2RlTGFiZWwueD1hLmxlbmd0aCpoaS5icmFuY2hPZmZzZXQsaGkubm9kZUxhYmVsLndpZHRoPSIxMDAlIixoaS5ub2RlTGFiZWwueT0tMipoaS5ub2RlUmFkaXVzKTt2YXIgbz1PYmplY3QoaC5zZWxlY3QpKCdbaWQ9IicuY29uY2F0KGUsJyJdJykpO2Zvcih2YXIgcyBpbiBmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgiZyIpLmF0dHIoImlkIiwiZGVmLWNvbW1pdCIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiciIsaGkubm9kZVJhZGl1cykuYXR0cigiY3giLDApLmF0dHIoImN5IiwwKSx0LnNlbGVjdCgiI2RlZi1jb21taXQiKS5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ3aWR0aCIsaGkubm9kZUxhYmVsLndpZHRoKS5hdHRyKCJoZWlnaHQiLGhpLm5vZGVMYWJlbC5oZWlnaHQpLmF0dHIoIngiLGhpLm5vZGVMYWJlbC54KS5hdHRyKCJ5IixoaS5ub2RlTGFiZWwueSkuYXR0cigiY2xhc3MiLCJub2RlLWxhYmVsIikuYXR0cigicmVxdWlyZWRGZWF0dXJlcyIsImh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjRXh0ZW5zaWJpbGl0eSIpLmFwcGVuZCgicCIpLmh0bWwoIiIpfShvKSxhaT0xLGEpe3ZhciB1PWFbc107dmkobyx1LmNvbW1pdC5pZCxhLGkpLG1pKG8sdS5jb21taXQsaSksYWkrK31vLmF0dHIoImhlaWdodCIsKGZ1bmN0aW9uKCl7cmV0dXJuIkJUIj09PWk/T2JqZWN0LmtleXMobGkpLmxlbmd0aCpoaS5ub2RlU3BhY2luZzooYS5sZW5ndGgrMSkqaGkuYnJhbmNoT2Zmc2V0fSkpfWNhdGNoKHQpe2MuZXJyb3IoIkVycm9yIHdoaWxlIHJlbmRlcmluZyBnaXRncmFwaCIpLGMuZXJyb3IodC5tZXNzYWdlKX19LGtpPSIiLHdpPSExLEVpPXtzZXRNZXNzYWdlOmZ1bmN0aW9uKHQpe2MuZGVidWcoIlNldHRpbmcgbWVzc2FnZSB0bzogIit0KSxraT10fSxnZXRNZXNzYWdlOmZ1bmN0aW9uKCl7cmV0dXJuIGtpfSxzZXRJbmZvOmZ1bmN0aW9uKHQpe3dpPXR9LGdldEluZm86ZnVuY3Rpb24oKXtyZXR1cm4gd2l9fSxUaT1uKDczKSxDaT1uLm4oVGkpLFNpPXt9LEFpPWZ1bmN0aW9uKHQpe09iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe1NpW2VdPXRbZV19KSl9LE1pPWZ1bmN0aW9uKHQsZSxuKXt0cnl7dmFyIHI9Q2kuYS5wYXJzZXI7ci55eT1FaSxjLmRlYnVnKCJSZW5lcmluZyBpbmZvIGRpYWdyYW1cbiIrdCksci5wYXJzZSh0KSxjLmRlYnVnKCJQYXJzZWQgaW5mbyBkaWFncmFtIik7dmFyIGk9T2JqZWN0KGguc2VsZWN0KSgiIyIrZSk7aS5hcHBlbmQoImciKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwxMDApLmF0dHIoInkiLDQwKS5hdHRyKCJjbGFzcyIsInZlcnNpb24iKS5hdHRyKCJmb250LXNpemUiLCIzMnB4Iikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dCgidiAiK24pLGkuYXR0cigiaGVpZ2h0IiwxMDApLGkuYXR0cigid2lkdGgiLDQwMCl9Y2F0Y2godCl7Yy5lcnJvcigiRXJyb3Igd2hpbGUgcmVuZGVyaW5nIGluZm8gZGlhZ3JhbSIpLGMuZXJyb3IodC5tZXNzYWdlKX19LE9pPW4oNzQpLEJpPW4ubihPaSksTmk9e30sRGk9IiIsTGk9ITEsSWk9e3BhcnNlRGlyZWN0aXZlOmZ1bmN0aW9uKHQsZSxuKXt2cy5wYXJzZURpcmVjdGl2ZSh0aGlzLHQsZSxuKX0sZ2V0Q29uZmlnOmZ1bmN0aW9uKCl7cmV0dXJuIF90KCkucGllfSxhZGRTZWN0aW9uOmZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09TmlbdF0mJihOaVt0XT1lLGMuZGVidWcoIkFkZGVkIG5ldyBzZWN0aW9uIDoiLHQpKX0sZ2V0U2VjdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gTml9LGNsZWFudXBWYWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4iOiI9PT10LnN1YnN0cmluZygwLDEpPyh0PXQuc3Vic3RyaW5nKDEpLnRyaW0oKSxOdW1iZXIodC50cmltKCkpKTpOdW1iZXIodC50cmltKCkpfSxjbGVhcjpmdW5jdGlvbigpe05pPXt9LERpPSIiLExpPSExfSxzZXRUaXRsZTpmdW5jdGlvbih0KXtEaT10fSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiBEaX0sc2V0U2hvd0RhdGE6ZnVuY3Rpb24odCl7TGk9dH0sZ2V0U2hvd0RhdGE6ZnVuY3Rpb24oKXtyZXR1cm4gTGl9fSxSaT1fdCgpLEZpPWZ1bmN0aW9uKHQsZSl7dHJ5e1JpPV90KCk7dmFyIG49QmkuYS5wYXJzZXI7bi55eT1JaSxjLmRlYnVnKCJSZW5kZXJpbmcgaW5mbyBkaWFncmFtXG4iK3QpLG4ueXkuY2xlYXIoKSxuLnBhcnNlKHQpLGMuZGVidWcoIlBhcnNlZCBpbmZvIGRpYWdyYW0iKTt2YXIgcj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKTt2b2lkIDA9PT0oYmk9ci5wYXJlbnRFbGVtZW50Lm9mZnNldFdpZHRoKSYmKGJpPTEyMDApLHZvaWQgMCE9PVJpLnVzZVdpZHRoJiYoYmk9UmkudXNlV2lkdGgpLHZvaWQgMCE9PVJpLnBpZS51c2VXaWR0aCYmKGJpPVJpLnBpZS51c2VXaWR0aCk7dmFyIGk9T2JqZWN0KGguc2VsZWN0KSgiIyIrZSk7VyhpLDQ1MCxiaSxSaS5waWUudXNlTWF4V2lkdGgpLHIuc2V0QXR0cmlidXRlKCJ2aWV3Qm94IiwiMCAwICIrYmkrIiA0NTAiKTt2YXIgYT1NYXRoLm1pbihiaSw0NTApLzItNDAsbz1pLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2JpLzIrIiwyMjUpIikscz1JaS5nZXRTZWN0aW9ucygpLHU9MDtPYmplY3Qua2V5cyhzKS5mb3JFYWNoKChmdW5jdGlvbih0KXt1Kz1zW3RdfSkpO3ZhciBsPVJpLnRoZW1lVmFyaWFibGVzLGY9W2wucGllMSxsLnBpZTIsbC5waWUzLGwucGllNCxsLnBpZTUsbC5waWU2LGwucGllNyxsLnBpZTgsbC5waWU5LGwucGllMTAsbC5waWUxMSxsLnBpZTEyXSxkPU9iamVjdChoLnNjYWxlT3JkaW5hbCkoKS5kb21haW4ocykucmFuZ2UoZikscD1PYmplY3QoaC5waWUpKCkudmFsdWUoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSkpKE9iamVjdChoLmVudHJpZXMpKHMpKSx5PU9iamVjdChoLmFyYykoKS5pbm5lclJhZGl1cygwKS5vdXRlclJhZGl1cyhhKTtvLnNlbGVjdEFsbCgibXlTbGljZXMiKS5kYXRhKHApLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIseSkuYXR0cigiZmlsbCIsKGZ1bmN0aW9uKHQpe3JldHVybiBkKHQuZGF0YS5rZXkpfSkpLmF0dHIoImNsYXNzIiwicGllQ2lyY2xlIiksby5zZWxlY3RBbGwoIm15U2xpY2VzIikuZGF0YShwLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIDAhPT10LmRhdGEudmFsdWV9KSkpLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikudGV4dCgoZnVuY3Rpb24odCl7cmV0dXJuKHQuZGF0YS52YWx1ZS91KjEwMCkudG9GaXhlZCgwKSsiJSJ9KSkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3kuY2VudHJvaWQodCkrIikifSkpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImNsYXNzIiwic2xpY2UiKSxvLmFwcGVuZCgidGV4dCIpLnRleHQobi55eS5nZXRUaXRsZSgpKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwtMjAwKS5hdHRyKCJjbGFzcyIsInBpZVRpdGxlVGV4dCIpO3ZhciBnPW8uc2VsZWN0QWxsKCIubGVnZW5kIikuZGF0YShkLmRvbWFpbigpKS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGVnZW5kIikuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4idHJhbnNsYXRlKDIxNiwiKygyMiplLTIyKmQuZG9tYWluKCkubGVuZ3RoLzIpKyIpIn0pKTtnLmFwcGVuZCgicmVjdCIpLmF0dHIoIndpZHRoIiwxOCkuYXR0cigiaGVpZ2h0IiwxOCkuc3R5bGUoImZpbGwiLGQpLnN0eWxlKCJzdHJva2UiLGQpLGcuZGF0YShwLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIDAhPT10LmRhdGEudmFsdWV9KSkpLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDIyKS5hdHRyKCJ5IiwxNCkudGV4dCgoZnVuY3Rpb24odCl7cmV0dXJuIG4ueXkuZ2V0U2hvd0RhdGEoKXx8Umkuc2hvd0RhdGF8fFJpLnBpZS5zaG93RGF0YT90LmRhdGEua2V5KyIgWyIrdC5kYXRhLnZhbHVlKyJdIjp0LmRhdGEua2V5fSkpfWNhdGNoKHQpe2MuZXJyb3IoIkVycm9yIHdoaWxlIHJlbmRlcmluZyBpbmZvIGRpYWdyYW0iKSxjLmVycm9yKHQpfX0sUGk9big0NSksamk9bi5uKFBpKSxZaT1bXSx6aT17fSxVaT17fSwkaT17fSxxaT17fSxXaT17UmVxdWlyZW1lbnRUeXBlOntSRVFVSVJFTUVOVDoiUmVxdWlyZW1lbnQiLEZVTkNUSU9OQUxfUkVRVUlSRU1FTlQ6IkZ1bmN0aW9uYWwgUmVxdWlyZW1lbnQiLElOVEVSRkFDRV9SRVFVSVJFTUVOVDoiSW50ZXJmYWNlIFJlcXVpcmVtZW50IixQRVJGT1JNQU5DRV9SRVFVSVJFTUVOVDoiUGVyZm9ybWFuY2UgUmVxdWlyZW1lbnQiLFBIWVNJQ0FMX1JFUVVJUkVNRU5UOiJQaHlzaWNhbCBSZXF1aXJlbWVudCIsREVTSUdOX0NPTlNUUkFJTlQ6IkRlc2lnbiBDb25zdHJhaW50In0sUmlza0xldmVsOntMT1dfUklTSzoiTG93IixNRURfUklTSzoiTWVkaXVtIixISUdIX1JJU0s6IkhpZ2gifSxWZXJpZnlUeXBlOntWRVJJRllfQU5BTFlTSVM6IkFuYWx5c2lzIixWRVJJRllfREVNT05TVFJBVElPTjoiRGVtb25zdHJhdGlvbiIsVkVSSUZZX0lOU1BFQ1RJT046Ikluc3BlY3Rpb24iLFZFUklGWV9URVNUOiJUZXN0In0sUmVsYXRpb25zaGlwczp7Q09OVEFJTlM6ImNvbnRhaW5zIixDT1BJRVM6ImNvcGllcyIsREVSSVZFUzoiZGVyaXZlcyIsU0FUSVNGSUVTOiJzYXRpc2ZpZXMiLFZFUklGSUVTOiJ2ZXJpZmllcyIsUkVGSU5FUzoicmVmaW5lcyIsVFJBQ0VTOiJ0cmFjZXMifSxwYXJzZURpcmVjdGl2ZTpmdW5jdGlvbih0LGUsbil7dnMucGFyc2VEaXJlY3RpdmUodGhpcyx0LGUsbil9LGdldENvbmZpZzpmdW5jdGlvbigpe3JldHVybiBfdCgpLnJlcX0sYWRkUmVxdWlyZW1lbnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09VWlbdF0mJihVaVt0XT17bmFtZTp0LHR5cGU6ZSxpZDp6aS5pZCx0ZXh0OnppLnRleHQscmlzazp6aS5yaXNrLHZlcmlmeU1ldGhvZDp6aS52ZXJpZnlNZXRob2R9KSx6aT17fSxVaVt0XX0sZ2V0UmVxdWlyZW1lbnRzOmZ1bmN0aW9uKCl7cmV0dXJuIFVpfSxzZXROZXdSZXFJZDpmdW5jdGlvbih0KXt2b2lkIDAhPT16aSYmKHppLmlkPXQpfSxzZXROZXdSZXFUZXh0OmZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXppJiYoemkudGV4dD10KX0sc2V0TmV3UmVxUmlzazpmdW5jdGlvbih0KXt2b2lkIDAhPT16aSYmKHppLnJpc2s9dCl9LHNldE5ld1JlcVZlcmlmeU1ldGhvZDpmdW5jdGlvbih0KXt2b2lkIDAhPT16aSYmKHppLnZlcmlmeU1ldGhvZD10KX0sYWRkRWxlbWVudDpmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09cWlbdF0mJihxaVt0XT17bmFtZTp0LHR5cGU6JGkudHlwZSxkb2NSZWY6JGkuZG9jUmVmfSxjLmluZm8oIkFkZGVkIG5ldyByZXF1aXJlbWVudDogIix0KSksJGk9e30scWlbdF19LGdldEVsZW1lbnRzOmZ1bmN0aW9uKCl7cmV0dXJuIHFpfSxzZXROZXdFbGVtZW50VHlwZTpmdW5jdGlvbih0KXt2b2lkIDAhPT0kaSYmKCRpLnR5cGU9dCl9LHNldE5ld0VsZW1lbnREb2NSZWY6ZnVuY3Rpb24odCl7dm9pZCAwIT09JGkmJigkaS5kb2NSZWY9dCl9LGFkZFJlbGF0aW9uc2hpcDpmdW5jdGlvbih0LGUsbil7WWkucHVzaCh7dHlwZTp0LHNyYzplLGRzdDpufSl9LGdldFJlbGF0aW9uc2hpcHM6ZnVuY3Rpb24oKXtyZXR1cm4gWWl9LGNsZWFyOmZ1bmN0aW9uKCl7WWk9W10semk9e30sVWk9e30sJGk9e30scWk9e319fSxWaT17Q09OVEFJTlM6ImNvbnRhaW5zIixBUlJPVzoiYXJyb3cifSxIaT1WaSxHaT1mdW5jdGlvbih0LGUpe3ZhciBuPXQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsVmkuQ09OVEFJTlMrIl9saW5lX2VuZGluZyIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLGUubGluZV9oZWlnaHQvMikuYXR0cigibWFya2VyV2lkdGgiLGUubGluZV9oZWlnaHQpLmF0dHIoIm1hcmtlckhlaWdodCIsZS5saW5lX2hlaWdodCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiZyIpO24uYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsZS5saW5lX2hlaWdodC8yKS5hdHRyKCJjeSIsZS5saW5lX2hlaWdodC8yKS5hdHRyKCJyIixlLmxpbmVfaGVpZ2h0LzIpLmF0dHIoImZpbGwiLCJub25lIiksbi5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieDIiLGUubGluZV9oZWlnaHQpLmF0dHIoInkxIixlLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInkyIixlLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInN0cm9rZS13aWR0aCIsMSksbi5hcHBlbmQoImxpbmUiKS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLGUubGluZV9oZWlnaHQpLmF0dHIoIngxIixlLmxpbmVfaGVpZ2h0LzIpLmF0dHIoIngyIixlLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInN0cm9rZS13aWR0aCIsMSksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixWaS5BUlJPVysiX2xpbmVfZW5kaW5nIikuYXR0cigicmVmWCIsZS5saW5lX2hlaWdodCkuYXR0cigicmVmWSIsLjUqZS5saW5lX2hlaWdodCkuYXR0cigibWFya2VyV2lkdGgiLGUubGluZV9oZWlnaHQpLmF0dHIoIm1hcmtlckhlaWdodCIsZS5saW5lX2hlaWdodCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNMCwwXG4gICAgICBMIi5jb25jYXQoZS5saW5lX2hlaWdodCwiLCIpLmNvbmNhdChlLmxpbmVfaGVpZ2h0LzIsIlxuICAgICAgTSIpLmNvbmNhdChlLmxpbmVfaGVpZ2h0LCIsIikuY29uY2F0KGUubGluZV9oZWlnaHQvMiwiXG4gICAgICBMMCwiKS5jb25jYXQoZS5saW5lX2hlaWdodCkpLmF0dHIoInN0cm9rZS13aWR0aCIsMSl9LFhpPXt9LFppPTAsUWk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pbnNlcnQoInJlY3QiLCIjIitlKS5hdHRyKCJjbGFzcyIsInJlcSByZXFCb3giKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsWGkucmVjdF9taW5fd2lkdGgrInB4IikuYXR0cigiaGVpZ2h0IixYaS5yZWN0X21pbl9oZWlnaHQrInB4Iil9LEtpPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1YaS5yZWN0X21pbl93aWR0aC8yLGk9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInJlcSByZXFMYWJlbCByZXFUaXRsZSIpLmF0dHIoImlkIixlKS5hdHRyKCJ4IixyKS5hdHRyKCJ5IixYaS5yZWN0X3BhZGRpbmcpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiaGFuZ2luZyIpLGE9MDtuLmZvckVhY2goKGZ1bmN0aW9uKHQpezA9PWE/aS5hcHBlbmQoInRzcGFuIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ4IixYaS5yZWN0X21pbl93aWR0aC8yKS5hdHRyKCJkeSIsMCkudGV4dCh0KTppLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoIngiLFhpLnJlY3RfbWluX3dpZHRoLzIpLmF0dHIoImR5IiwuNzUqWGkubGluZV9oZWlnaHQpLnRleHQodCksYSsrfSkpO3ZhciBvPTEuNSpYaS5yZWN0X3BhZGRpbmcrYSpYaS5saW5lX2hlaWdodCouNzU7cmV0dXJuIHQuYXBwZW5kKCJsaW5lIikuYXR0cigiY2xhc3MiLCJyZXEtdGl0bGUtbGluZSIpLmF0dHIoIngxIiwiMCIpLmF0dHIoIngyIixYaS5yZWN0X21pbl93aWR0aCkuYXR0cigieTEiLG8pLmF0dHIoInkyIixvKSx7dGl0bGVOb2RlOmkseTpvfX0sSmk9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInJlcSByZXFMYWJlbCIpLmF0dHIoImlkIixlKS5hdHRyKCJ4IixYaS5yZWN0X3BhZGRpbmcpLmF0dHIoInkiLHIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiaGFuZ2luZyIpLGE9MCxvPVtdO3JldHVybiBuLmZvckVhY2goKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aDtlPjMwJiZhPDM7KXt2YXIgbj10LnN1YnN0cmluZygwLDMwKTtlPSh0PXQuc3Vic3RyaW5nKDMwLHQubGVuZ3RoKSkubGVuZ3RoLG9bby5sZW5ndGhdPW4sYSsrfWlmKDM9PWEpe3ZhciByPW9bby5sZW5ndGgtMV07b1tvLmxlbmd0aC0xXT1yLnN1YnN0cmluZygwLHIubGVuZ3RoLTQpKyIuLi4ifWVsc2Ugb1tvLmxlbmd0aF09dDthPTB9KSksby5mb3JFYWNoKChmdW5jdGlvbih0KXtpLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixYaS5yZWN0X3BhZGRpbmcpLmF0dHIoImR5IixYaS5saW5lX2hlaWdodCkudGV4dCh0KX0pKSxpfSx0YT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT1uLmVkZ2UoZWEoZS5zcmMpLGVhKGUuZHN0KSksYT1PYmplY3QoaC5saW5lKSgpLngoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnh9KSkueSgoZnVuY3Rpb24odCl7cmV0dXJuIHQueX0pKSxvPXQuaW5zZXJ0KCJwYXRoIiwiIyIrcikuYXR0cigiY2xhc3MiLCJlciByZWxhdGlvbnNoaXBMaW5lIikuYXR0cigiZCIsYShpLnBvaW50cykpLmF0dHIoImZpbGwiLCJub25lIik7ZS50eXBlPT1XaS5SZWxhdGlvbnNoaXBzLkNPTlRBSU5TP28uYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrXy5nZXRVcmwoWGkuYXJyb3dNYXJrZXJBYnNvbHV0ZSkrIiMiK2UudHlwZSsiX2xpbmVfZW5kaW5nKSIpOihvLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLCIxMCw3Iiksby5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrXy5nZXRVcmwoWGkuYXJyb3dNYXJrZXJBYnNvbHV0ZSkrIiMiK0hpLkFSUk9XKyJfbGluZV9lbmRpbmcpIikpLGZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPWUubm9kZSgpLmdldFRvdGFsTGVuZ3RoKCksYT1lLm5vZGUoKS5nZXRQb2ludEF0TGVuZ3RoKC41KmkpLG89InJlbCIrWmk7WmkrKzt2YXIgcz10LmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwicmVxIHJlbGF0aW9uc2hpcExhYmVsIikuYXR0cigiaWQiLG8pLmF0dHIoIngiLGEueCkuYXR0cigieSIsYS55KS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikudGV4dChyKS5ub2RlKCkuZ2V0QkJveCgpO3QuaW5zZXJ0KCJyZWN0IiwiIyIrbykuYXR0cigiY2xhc3MiLCJyZXEgcmVxTGFiZWxCb3giKS5hdHRyKCJ4IixhLngtcy53aWR0aC8yKS5hdHRyKCJ5IixhLnktcy5oZWlnaHQvMikuYXR0cigid2lkdGgiLHMud2lkdGgpLmF0dHIoImhlaWdodCIscy5oZWlnaHQpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImZpbGwtb3BhY2l0eSIsIjg1JSIpfSh0LG8sMCwiPDwiLmNvbmNhdChlLnR5cGUsIj4+IikpfSxlYT1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC9ccy9nLCIiKS5yZXBsYWNlKC9cLi9nLCJfIil9LG5hPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9PXQpZm9yKHZhciBlPU9iamVjdC5rZXlzKHQpLG49MDtuPGUubGVuZ3RoO24rKylYaVtlW25dXT10W2Vbbl1dfSxyYT1mdW5jdGlvbih0LGUpe1BpLnBhcnNlci55eT1XaSxQaS5wYXJzZXIueXkuY2xlYXIoKSxQaS5wYXJzZXIucGFyc2UodCk7dmFyIG49T2JqZWN0KGguc2VsZWN0KSgiW2lkPSciLmNvbmNhdChlLCInXSIpKTtHaShuLFhpKTt2YXIgcixpLGEsbz1uZXcgVXQuYS5HcmFwaCh7bXVsdGlncmFwaDohMSxjb21wb3VuZDohMSxkaXJlY3RlZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOlhpLmxheW91dERpcmVjdGlvbixtYXJnaW54OjIwLG1hcmdpbnk6MjAsbm9kZXNlcDoxMDAsZWRnZXNlcDoxMDAscmFua3NlcDoxMDB9KS5zZXREZWZhdWx0RWRnZUxhYmVsKChmdW5jdGlvbigpe3JldHVybnt9fSkpLHM9V2kuZ2V0UmVxdWlyZW1lbnRzKCksdT1XaS5nZXRFbGVtZW50cygpLGw9V2kuZ2V0UmVsYXRpb25zaGlwcygpO3I9cyxpPW8sYT1uLE9iamVjdC5rZXlzKHIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXJbdF07dD1lYSh0KSxjLmluZm8oIkFkZGVkIG5ldyByZXF1aXJlbWVudDogIix0KTt2YXIgbj1hLmFwcGVuZCgiZyIpLmF0dHIoImlkIix0KSxvPVFpKG4sInJlcS0iK3QpLHM9W10sdT1LaShuLHQrIl90aXRsZSIsWyI8PCIuY29uY2F0KGUudHlwZSwiPj4iKSwiIi5jb25jYXQoZS5uYW1lKV0pO3MucHVzaCh1LnRpdGxlTm9kZSk7dmFyIGw9Smkobix0KyJfYm9keSIsWyJJZDogIi5jb25jYXQoZS5pZCksIlRleHQ6ICIuY29uY2F0KGUudGV4dCksIlJpc2s6ICIuY29uY2F0KGUucmlzayksIlZlcmlmaWNhdGlvbjogIi5jb25jYXQoZS52ZXJpZnlNZXRob2QpXSx1LnkpO3MucHVzaChsKTt2YXIgaD1vLm5vZGUoKS5nZXRCQm94KCk7aS5zZXROb2RlKHQse3dpZHRoOmgud2lkdGgsaGVpZ2h0OmguaGVpZ2h0LHNoYXBlOiJyZWN0IixpZDp0fSl9KSksZnVuY3Rpb24odCxlLG4pe09iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKHIpe3ZhciBpPXRbcl0sYT1lYShyKSxvPW4uYXBwZW5kKCJnIikuYXR0cigiaWQiLGEpLHM9ImVsZW1lbnQtIithLGM9UWkobyxzKSx1PVtdLGw9S2kobyxzKyJfdGl0bGUiLFsiPDxFbGVtZW50Pj4iLCIiLmNvbmNhdChyKV0pO3UucHVzaChsLnRpdGxlTm9kZSk7dmFyIGg9SmkobyxzKyJfYm9keSIsWyJUeXBlOiAiLmNvbmNhdChpLnR5cGV8fCJOb3QgU3BlY2lmaWVkIiksIkRvYyBSZWY6ICIuY29uY2F0KGkuZG9jUmVmfHwiTm9uZSIpXSxsLnkpO3UucHVzaChoKTt2YXIgZj1jLm5vZGUoKS5nZXRCQm94KCk7ZS5zZXROb2RlKGEse3dpZHRoOmYud2lkdGgsaGVpZ2h0OmYuaGVpZ2h0LHNoYXBlOiJyZWN0IixpZDphfSl9KSl9KHUsbyxuKSxmdW5jdGlvbih0LGUpe3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49ZWEodC5zcmMpLHI9ZWEodC5kc3QpO2Uuc2V0RWRnZShuLHIse3JlbGF0aW9uc2hpcDp0fSl9KSl9KGwsbyksWXQuYS5sYXlvdXQobyksZnVuY3Rpb24odCxlKXtlLm5vZGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24obil7dm9pZCAwIT09biYmdm9pZCAwIT09ZS5ub2RlKG4pJiYodC5zZWxlY3QoIiMiK24pLHQuc2VsZWN0KCIjIituKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoZS5ub2RlKG4pLngtZS5ub2RlKG4pLndpZHRoLzIpKyIsIisoZS5ub2RlKG4pLnktZS5ub2RlKG4pLmhlaWdodC8yKSsiICkiKSl9KSl9KG4sbyksbC5mb3JFYWNoKChmdW5jdGlvbih0KXt0YShuLHQsbyxlKX0pKTt2YXIgZj1YaS5yZWN0X3BhZGRpbmcsZD1uLm5vZGUoKS5nZXRCQm94KCkscD1kLndpZHRoKzIqZix5PWQuaGVpZ2h0KzIqZjtXKG4seSxwLFhpLnVzZU1heFdpZHRoKSxuLmF0dHIoInZpZXdCb3giLCIiLmNvbmNhdChkLngtZiwiICIpLmNvbmNhdChkLnktZiwiICIpLmNvbmNhdChwLCIgIikuY29uY2F0KHkpKX0saWE9bigyKSxhYT1uLm4oaWEpLG9hPXZvaWQgMCxzYT17fSxjYT1bXSx1YT1bXSxsYT0iIixoYT0hMSxmYT0hMSxkYT0hMSxwYT1mdW5jdGlvbih0LGUsbil7dmFyIHI9c2FbdF07ciYmZT09PXIubmFtZSYmbnVsbD09bnx8KG51bGwhPW4mJm51bGwhPW4udGV4dHx8KG49e3RleHQ6ZSx3cmFwOm51bGx9KSxzYVt0XT17bmFtZTplLGRlc2NyaXB0aW9uOm4udGV4dCx3cmFwOnZvaWQgMD09PW4ud3JhcCYmdmEoKXx8ISFuLndyYXAscHJldkFjdG9yOm9hfSxvYSYmc2Fbb2FdJiYoc2Fbb2FdLm5leHRBY3Rvcj10KSxvYT10KX0seWE9ZnVuY3Rpb24odCl7dmFyIGUsbj0wO2ZvcihlPTA7ZTxjYS5sZW5ndGg7ZSsrKWNhW2VdLnR5cGU9PT1tYS5BQ1RJVkVfU1RBUlQmJmNhW2VdLmZyb20uYWN0b3I9PT10JiZuKyssY2FbZV0udHlwZT09PW1hLkFDVElWRV9FTkQmJmNhW2VdLmZyb20uYWN0b3I9PT10JiZuLS07cmV0dXJuIG59LGdhPWZ1bmN0aW9uKHQsZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt0ZXh0OnZvaWQgMCx3cmFwOnZvaWQgMH0scj1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMDtpZihyPT09bWEuQUNUSVZFX0VORCl7dmFyIGk9eWEodC5hY3Rvcik7aWYoaTwxKXt2YXIgYT1uZXcgRXJyb3IoIlRyeWluZyB0byBpbmFjdGl2YXRlIGFuIGluYWN0aXZlIHBhcnRpY2lwYW50ICgiK3QuYWN0b3IrIikiKTt0aHJvdyBhLmhhc2g9e3RleHQ6Ii0+Pi0iLHRva2VuOiItPj4tIixsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbIidBQ1RJVkVfUEFSVElDSVBBTlQnIl19LGF9fXJldHVybiBjYS5wdXNoKHtmcm9tOnQsdG86ZSxtZXNzYWdlOm4udGV4dCx3cmFwOnZvaWQgMD09PW4ud3JhcCYmdmEoKXx8ISFuLndyYXAsdHlwZTpyfSksITB9LHZhPWZ1bmN0aW9uKCl7cmV0dXJuIGRhfSxtYT17U09MSUQ6MCxET1RURUQ6MSxOT1RFOjIsU09MSURfQ1JPU1M6MyxET1RURURfQ1JPU1M6NCxTT0xJRF9PUEVOOjUsRE9UVEVEX09QRU46NixMT09QX1NUQVJUOjEwLExPT1BfRU5EOjExLEFMVF9TVEFSVDoxMixBTFRfRUxTRToxMyxBTFRfRU5EOjE0LE9QVF9TVEFSVDoxNSxPUFRfRU5EOjE2LEFDVElWRV9TVEFSVDoxNyxBQ1RJVkVfRU5EOjE4LFBBUl9TVEFSVDoxOSxQQVJfQU5EOjIwLFBBUl9FTkQ6MjEsUkVDVF9TVEFSVDoyMixSRUNUX0VORDoyMyxTT0xJRF9QT0lOVDoyNCxET1RURURfUE9JTlQ6MjV9LGJhPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj17YWN0b3I6dCxwbGFjZW1lbnQ6ZSxtZXNzYWdlOm4udGV4dCx3cmFwOnZvaWQgMD09PW4ud3JhcCYmdmEoKXx8ISFuLndyYXB9LGk9W10uY29uY2F0KHQsdCk7dWEucHVzaChyKSxjYS5wdXNoKHtmcm9tOmlbMF0sdG86aVsxXSxtZXNzYWdlOm4udGV4dCx3cmFwOnZvaWQgMD09PW4ud3JhcCYmdmEoKXx8ISFuLndyYXAsdHlwZTptYS5OT1RFLHBsYWNlbWVudDplfSl9LHhhPWZ1bmN0aW9uKHQpe2xhPXQudGV4dCxoYT12b2lkIDA9PT10LndyYXAmJnZhKCl8fCEhdC53cmFwfSxfYT17YWRkQWN0b3I6cGEsYWRkTWVzc2FnZTpmdW5jdGlvbih0LGUsbixyKXtjYS5wdXNoKHtmcm9tOnQsdG86ZSxtZXNzYWdlOm4udGV4dCx3cmFwOnZvaWQgMD09PW4ud3JhcCYmdmEoKXx8ISFuLndyYXAsYW5zd2VyOnJ9KX0sYWRkU2lnbmFsOmdhLGF1dG9XcmFwOnZhLHNldFdyYXA6ZnVuY3Rpb24odCl7ZGE9dH0sZW5hYmxlU2VxdWVuY2VOdW1iZXJzOmZ1bmN0aW9uKCl7ZmE9ITB9LHNob3dTZXF1ZW5jZU51bWJlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gZmF9LGdldE1lc3NhZ2VzOmZ1bmN0aW9uKCl7cmV0dXJuIGNhfSxnZXRBY3RvcnM6ZnVuY3Rpb24oKXtyZXR1cm4gc2F9LGdldEFjdG9yOmZ1bmN0aW9uKHQpe3JldHVybiBzYVt0XX0sZ2V0QWN0b3JLZXlzOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHNhKX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4gbGF9LHBhcnNlRGlyZWN0aXZlOmZ1bmN0aW9uKHQsZSxuKXt2cy5wYXJzZURpcmVjdGl2ZSh0aGlzLHQsZSxuKX0sZ2V0Q29uZmlnOmZ1bmN0aW9uKCl7cmV0dXJuIF90KCkuc2VxdWVuY2V9LGdldFRpdGxlV3JhcHBlZDpmdW5jdGlvbigpe3JldHVybiBoYX0sY2xlYXI6ZnVuY3Rpb24oKXtzYT17fSxjYT1bXX0scGFyc2VNZXNzYWdlOmZ1bmN0aW9uKHQpe3ZhciBlPXQudHJpbSgpLG49e3RleHQ6ZS5yZXBsYWNlKC9eWzpdPyg/Om5vKT93cmFwOi8sIiIpLnRyaW0oKSx3cmFwOm51bGwhPT1lLm1hdGNoKC9eWzpdP3dyYXA6Lyl8fG51bGw9PT1lLm1hdGNoKC9eWzpdP25vd3JhcDovKSYmdm9pZCAwfTtyZXR1cm4gYy5kZWJ1ZygicGFyc2VNZXNzYWdlOiIsbiksbn0sTElORVRZUEU6bWEsQVJST1dUWVBFOntGSUxMRUQ6MCxPUEVOOjF9LFBMQUNFTUVOVDp7TEVGVE9GOjAsUklHSFRPRjoxLE9WRVI6Mn0sYWRkTm90ZTpiYSxzZXRUaXRsZTp4YSxhcHBseTpmdW5jdGlvbiB0KGUpe2lmKGUgaW5zdGFuY2VvZiBBcnJheSllLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QoZSl9KSk7ZWxzZSBzd2l0Y2goZS50eXBlKXtjYXNlImFkZEFjdG9yIjpwYShlLmFjdG9yLGUuYWN0b3IsZS5kZXNjcmlwdGlvbik7YnJlYWs7Y2FzZSJhY3RpdmVTdGFydCI6Y2FzZSJhY3RpdmVFbmQiOmdhKGUuYWN0b3Isdm9pZCAwLHZvaWQgMCxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYWRkTm90ZSI6YmEoZS5hY3RvcixlLnBsYWNlbWVudCxlLnRleHQpO2JyZWFrO2Nhc2UiYWRkTWVzc2FnZSI6Z2EoZS5mcm9tLGUudG8sZS5tc2csZS5zaWduYWxUeXBlKTticmVhaztjYXNlImxvb3BTdGFydCI6Z2Eodm9pZCAwLHZvaWQgMCxlLmxvb3BUZXh0LGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJsb29wRW5kIjpnYSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UicmVjdFN0YXJ0IjpnYSh2b2lkIDAsdm9pZCAwLGUuY29sb3IsZS5zaWduYWxUeXBlKTticmVhaztjYXNlInJlY3RFbmQiOmdhKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJvcHRTdGFydCI6Z2Eodm9pZCAwLHZvaWQgMCxlLm9wdFRleHQsZS5zaWduYWxUeXBlKTticmVhaztjYXNlIm9wdEVuZCI6Z2Eodm9pZCAwLHZvaWQgMCx2b2lkIDAsZS5zaWduYWxUeXBlKTticmVhaztjYXNlImFsdFN0YXJ0IjpjYXNlImVsc2UiOmdhKHZvaWQgMCx2b2lkIDAsZS5hbHRUZXh0LGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJhbHRFbmQiOmdhKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJzZXRUaXRsZSI6eGEoZS50ZXh0KTticmVhaztjYXNlInBhclN0YXJ0IjpjYXNlImFuZCI6Z2Eodm9pZCAwLHZvaWQgMCxlLnBhclRleHQsZS5zaWduYWxUeXBlKTticmVhaztjYXNlInBhckVuZCI6Z2Eodm9pZCAwLHZvaWQgMCx2b2lkIDAsZS5zaWduYWxUeXBlKX19fSxrYT1mdW5jdGlvbih0LGUpe3ZhciBuPXQuYXBwZW5kKCJyZWN0Iik7cmV0dXJuIG4uYXR0cigieCIsZS54KSxuLmF0dHIoInkiLGUueSksbi5hdHRyKCJmaWxsIixlLmZpbGwpLG4uYXR0cigic3Ryb2tlIixlLnN0cm9rZSksbi5hdHRyKCJ3aWR0aCIsZS53aWR0aCksbi5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0KSxuLmF0dHIoInJ4IixlLnJ4KSxuLmF0dHIoInJ5IixlLnJ5KSx2b2lkIDAhPT1lLmNsYXNzJiZuLmF0dHIoImNsYXNzIixlLmNsYXNzKSxufSx3YT1mdW5jdGlvbih0LGUpe3ZhciBuPTAscj0wLGk9ZS50ZXh0LnNwbGl0KF8ubGluZUJyZWFrUmVnZXgpLGE9W10sbz0wLHM9ZnVuY3Rpb24oKXtyZXR1cm4gZS55fTtpZih2b2lkIDAhPT1lLnZhbGlnbiYmdm9pZCAwIT09ZS50ZXh0TWFyZ2luJiZlLnRleHRNYXJnaW4+MClzd2l0Y2goZS52YWxpZ24pe2Nhc2UidG9wIjpjYXNlInN0YXJ0IjpzPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgucm91bmQoZS55K2UudGV4dE1hcmdpbil9O2JyZWFrO2Nhc2UibWlkZGxlIjpjYXNlImNlbnRlciI6cz1mdW5jdGlvbigpe3JldHVybiBNYXRoLnJvdW5kKGUueSsobityK2UudGV4dE1hcmdpbikvMil9O2JyZWFrO2Nhc2UiYm90dG9tIjpjYXNlImVuZCI6cz1mdW5jdGlvbigpe3JldHVybiBNYXRoLnJvdW5kKGUueSsobityKzIqZS50ZXh0TWFyZ2luKS1lLnRleHRNYXJnaW4pfX1pZih2b2lkIDAhPT1lLmFuY2hvciYmdm9pZCAwIT09ZS50ZXh0TWFyZ2luJiZ2b2lkIDAhPT1lLndpZHRoKXN3aXRjaChlLmFuY2hvcil7Y2FzZSJsZWZ0IjpjYXNlInN0YXJ0IjplLng9TWF0aC5yb3VuZChlLngrZS50ZXh0TWFyZ2luKSxlLmFuY2hvcj0ic3RhcnQiLGUuZG9taW5hbnRCYXNlbGluZT0idGV4dC1hZnRlci1lZGdlIixlLmFsaWdubWVudEJhc2VsaW5lPSJtaWRkbGUiO2JyZWFrO2Nhc2UibWlkZGxlIjpjYXNlImNlbnRlciI6ZS54PU1hdGgucm91bmQoZS54K2Uud2lkdGgvMiksZS5hbmNob3I9Im1pZGRsZSIsZS5kb21pbmFudEJhc2VsaW5lPSJtaWRkbGUiLGUuYWxpZ25tZW50QmFzZWxpbmU9Im1pZGRsZSI7YnJlYWs7Y2FzZSJyaWdodCI6Y2FzZSJlbmQiOmUueD1NYXRoLnJvdW5kKGUueCtlLndpZHRoLWUudGV4dE1hcmdpbiksZS5hbmNob3I9ImVuZCIsZS5kb21pbmFudEJhc2VsaW5lPSJ0ZXh0LWJlZm9yZS1lZGdlIixlLmFsaWdubWVudEJhc2VsaW5lPSJtaWRkbGUifWZvcih2YXIgYz0wO2M8aS5sZW5ndGg7YysrKXt2YXIgdT1pW2NdO3ZvaWQgMCE9PWUudGV4dE1hcmdpbiYmMD09PWUudGV4dE1hcmdpbiYmdm9pZCAwIT09ZS5mb250U2l6ZSYmKG89YyplLmZvbnRTaXplKTt2YXIgbD10LmFwcGVuZCgidGV4dCIpO2lmKGwuYXR0cigieCIsZS54KSxsLmF0dHIoInkiLHMoKSksdm9pZCAwIT09ZS5hbmNob3ImJmwuYXR0cigidGV4dC1hbmNob3IiLGUuYW5jaG9yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsZS5kb21pbmFudEJhc2VsaW5lKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLGUuYWxpZ25tZW50QmFzZWxpbmUpLHZvaWQgMCE9PWUuZm9udEZhbWlseSYmbC5zdHlsZSgiZm9udC1mYW1pbHkiLGUuZm9udEZhbWlseSksdm9pZCAwIT09ZS5mb250U2l6ZSYmbC5zdHlsZSgiZm9udC1zaXplIixlLmZvbnRTaXplKSx2b2lkIDAhPT1lLmZvbnRXZWlnaHQmJmwuc3R5bGUoImZvbnQtd2VpZ2h0IixlLmZvbnRXZWlnaHQpLHZvaWQgMCE9PWUuZmlsbCYmbC5hdHRyKCJmaWxsIixlLmZpbGwpLHZvaWQgMCE9PWUuY2xhc3MmJmwuYXR0cigiY2xhc3MiLGUuY2xhc3MpLHZvaWQgMCE9PWUuZHk/bC5hdHRyKCJkeSIsZS5keSk6MCE9PW8mJmwuYXR0cigiZHkiLG8pLGUudHNwYW4pe3ZhciBoPWwuYXBwZW5kKCJ0c3BhbiIpO2guYXR0cigieCIsZS54KSx2b2lkIDAhPT1lLmZpbGwmJmguYXR0cigiZmlsbCIsZS5maWxsKSxoLnRleHQodSl9ZWxzZSBsLnRleHQodSk7dm9pZCAwIT09ZS52YWxpZ24mJnZvaWQgMCE9PWUudGV4dE1hcmdpbiYmZS50ZXh0TWFyZ2luPjAmJihyKz0obC5fZ3JvdXBzfHxsKVswXVswXS5nZXRCQm94KCkuaGVpZ2h0LG49ciksYS5wdXNoKGwpfXJldHVybiBhfSxFYT1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaSxhLG8scz10LmFwcGVuZCgicG9seWdvbiIpO3JldHVybiBzLmF0dHIoInBvaW50cyIsKG49ZS54LHI9ZS55LGk9ZS53aWR0aCxhPWUuaGVpZ2h0LG4rIiwiK3IrIiAiKyhuK2kpKyIsIityKyIgIisobitpKSsiLCIrKHIrYS0obz03KSkrIiAiKyhuK2ktMS4yKm8pKyIsIisocithKSsiICIrbisiLCIrKHIrYSkpKSxzLmF0dHIoImNsYXNzIiwibGFiZWxCb3giKSxlLnk9ZS55K2UuaGVpZ2h0LzIsd2EodCxlKSxzfSxUYT0tMSxDYT1mdW5jdGlvbigpe3JldHVybnt4OjAseTowLGZpbGw6dm9pZCAwLGFuY2hvcjp2b2lkIDAsc3R5bGU6IiM2NjYiLHdpZHRoOnZvaWQgMCxoZWlnaHQ6dm9pZCAwLHRleHRNYXJnaW46MCxyeDowLHJ5OjAsdHNwYW46ITAsdmFsaWduOnZvaWQgMH19LFNhPWZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjAsZmlsbDoiI0VERjJBRSIsc3Ryb2tlOiIjNjY2Iix3aWR0aDoxMDAsYW5jaG9yOiJzdGFydCIsaGVpZ2h0OjEwMCxyeDowLHJ5OjB9fSxBYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSxhLG8scyl7cihlLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLG4rYS8yKS5hdHRyKCJ5IixpK28vMis1KS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KHQpLHMpfWZ1bmN0aW9uIGUodCxlLG4saSxhLG8scyxjKXtmb3IodmFyIHU9Yy5hY3RvckZvbnRTaXplLGw9Yy5hY3RvckZvbnRGYW1pbHksaD1jLmFjdG9yRm9udFdlaWdodCxmPXQuc3BsaXQoXy5saW5lQnJlYWtSZWdleCksZD0wO2Q8Zi5sZW5ndGg7ZCsrKXt2YXIgcD1kKnUtdSooZi5sZW5ndGgtMSkvMix5PWUuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsbithLzIpLmF0dHIoInkiLGkpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJmb250LXNpemUiLHUpLnN0eWxlKCJmb250LXdlaWdodCIsaCkuc3R5bGUoImZvbnQtZmFtaWx5IixsKTt5LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixuK2EvMikuYXR0cigiZHkiLHApLnRleHQoZltkXSkseS5hdHRyKCJ5IixpK28vMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLHIoeSxzKX19ZnVuY3Rpb24gbih0LG4saSxhLG8scyxjLHUpe3ZhciBsPW4uYXBwZW5kKCJzd2l0Y2giKSxoPWwuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIsaSkuYXR0cigieSIsYSkuYXR0cigid2lkdGgiLG8pLmF0dHIoImhlaWdodCIscykuYXBwZW5kKCJkaXYiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlIikuc3R5bGUoImhlaWdodCIsIjEwMCUiKS5zdHlsZSgid2lkdGgiLCIxMDAlIik7aC5hcHBlbmQoImRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUtY2VsbCIpLnN0eWxlKCJ0ZXh0LWFsaWduIiwiY2VudGVyIikuc3R5bGUoInZlcnRpY2FsLWFsaWduIiwibWlkZGxlIikudGV4dCh0KSxlKHQsbCxpLGEsbyxzLGMsdSkscihoLGMpfWZ1bmN0aW9uIHIodCxlKXtmb3IodmFyIG4gaW4gZSllLmhhc093blByb3BlcnR5KG4pJiZ0LmF0dHIobixlW25dKX1yZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuImZvIj09PXIudGV4dFBsYWNlbWVudD9uOiJvbGQiPT09ci50ZXh0UGxhY2VtZW50P3Q6ZX19KCksTWE9e2RyYXdSZWN0OmthLGRyYXdUZXh0OndhLGRyYXdMYWJlbDpFYSxkcmF3QWN0b3I6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWUueCtlLndpZHRoLzIsaT10LmFwcGVuZCgiZyIpOzA9PT1lLnkmJihUYSsrLGkuYXBwZW5kKCJsaW5lIikuYXR0cigiaWQiLCJhY3RvciIrVGEpLmF0dHIoIngxIixyKS5hdHRyKCJ5MSIsNSkuYXR0cigieDIiLHIpLmF0dHIoInkyIiwyZTMpLmF0dHIoImNsYXNzIiwiYWN0b3ItbGluZSIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjAuNXB4IikuYXR0cigic3Ryb2tlIiwiIzk5OSIpKTt2YXIgYT1TYSgpO2EueD1lLngsYS55PWUueSxhLmZpbGw9IiNlYWVhZWEiLGEud2lkdGg9ZS53aWR0aCxhLmhlaWdodD1lLmhlaWdodCxhLmNsYXNzPSJhY3RvciIsYS5yeD0zLGEucnk9MyxrYShpLGEpLEFhKG4pKGUuZGVzY3JpcHRpb24saSxhLngsYS55LGEud2lkdGgsYS5oZWlnaHQse2NsYXNzOiJhY3RvciJ9LG4pfSxhbmNob3JFbGVtZW50OmZ1bmN0aW9uKHQpe3JldHVybiB0LmFwcGVuZCgiZyIpfSxkcmF3QWN0aXZhdGlvbjpmdW5jdGlvbih0LGUsbixyLGkpe3ZhciBhPVNhKCksbz1lLmFuY2hvcmVkO2EueD1lLnN0YXJ0eCxhLnk9ZS5zdGFydHksYS5jbGFzcz0iYWN0aXZhdGlvbiIraSUzLGEud2lkdGg9ZS5zdG9weC1lLnN0YXJ0eCxhLmhlaWdodD1uLWUuc3RhcnR5LGthKG8sYSl9LGRyYXdMb29wOmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXIuYm94TWFyZ2luLGE9ci5ib3hUZXh0TWFyZ2luLG89ci5sYWJlbEJveEhlaWdodCxzPXIubGFiZWxCb3hXaWR0aCxjPXIubWVzc2FnZUZvbnRGYW1pbHksdT1yLm1lc3NhZ2VGb250U2l6ZSxsPXIubWVzc2FnZUZvbnRXZWlnaHQsaD10LmFwcGVuZCgiZyIpLGY9ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIGguYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLHQpLmF0dHIoInkxIixlKS5hdHRyKCJ4MiIsbikuYXR0cigieTIiLHIpLmF0dHIoImNsYXNzIiwibG9vcExpbmUiKX07ZihlLnN0YXJ0eCxlLnN0YXJ0eSxlLnN0b3B4LGUuc3RhcnR5KSxmKGUuc3RvcHgsZS5zdGFydHksZS5zdG9weCxlLnN0b3B5KSxmKGUuc3RhcnR4LGUuc3RvcHksZS5zdG9weCxlLnN0b3B5KSxmKGUuc3RhcnR4LGUuc3RhcnR5LGUuc3RhcnR4LGUuc3RvcHkpLHZvaWQgMCE9PWUuc2VjdGlvbnMmJmUuc2VjdGlvbnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZihlLnN0YXJ0eCx0LnksZS5zdG9weCx0LnkpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMywgMyIpfSkpO3ZhciBkPUNhKCk7ZC50ZXh0PW4sZC54PWUuc3RhcnR4LGQueT1lLnN0YXJ0eSxkLmZvbnRGYW1pbHk9YyxkLmZvbnRTaXplPXUsZC5mb250V2VpZ2h0PWwsZC5hbmNob3I9Im1pZGRsZSIsZC52YWxpZ249Im1pZGRsZSIsZC50c3Bhbj0hMSxkLndpZHRoPXN8fDUwLGQuaGVpZ2h0PW98fDIwLGQudGV4dE1hcmdpbj1hLGQuY2xhc3M9ImxhYmVsVGV4dCIsRWEoaCxkKSwoZD1DYSgpKS50ZXh0PWUudGl0bGUsZC54PWUuc3RhcnR4K3MvMisoZS5zdG9weC1lLnN0YXJ0eCkvMixkLnk9ZS5zdGFydHkraSthLGQuYW5jaG9yPSJtaWRkbGUiLGQudmFsaWduPSJtaWRkbGUiLGQudGV4dE1hcmdpbj1hLGQuY2xhc3M9Imxvb3BUZXh0IixkLmZvbnRGYW1pbHk9YyxkLmZvbnRTaXplPXUsZC5mb250V2VpZ2h0PWwsZC53cmFwPSEwO3ZhciBwPXdhKGgsZCk7cmV0dXJuIHZvaWQgMCE9PWUuc2VjdGlvblRpdGxlcyYmZS5zZWN0aW9uVGl0bGVzLmZvckVhY2goKGZ1bmN0aW9uKHQsbil7aWYodC5tZXNzYWdlKXtkLnRleHQ9dC5tZXNzYWdlLGQueD1lLnN0YXJ0eCsoZS5zdG9weC1lLnN0YXJ0eCkvMixkLnk9ZS5zZWN0aW9uc1tuXS55K2krYSxkLmNsYXNzPSJsb29wVGV4dCIsZC5hbmNob3I9Im1pZGRsZSIsZC52YWxpZ249Im1pZGRsZSIsZC50c3Bhbj0hMSxkLmZvbnRGYW1pbHk9YyxkLmZvbnRTaXplPXUsZC5mb250V2VpZ2h0PWwsZC53cmFwPWUud3JhcCxwPXdhKGgsZCk7dmFyIHI9TWF0aC5yb3VuZChwLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuKHQuX2dyb3Vwc3x8dClbMF1bMF0uZ2V0QkJveCgpLmhlaWdodH0pKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pKSk7ZS5zZWN0aW9uc1tuXS5oZWlnaHQrPXItKGkrYSl9fSkpLGUuaGVpZ2h0PU1hdGgucm91bmQoZS5zdG9weS1lLnN0YXJ0eSksaH0sZHJhd0JhY2tncm91bmRSZWN0OmZ1bmN0aW9uKHQsZSl7a2EodCx7eDplLnN0YXJ0eCx5OmUuc3RhcnR5LHdpZHRoOmUuc3RvcHgtZS5zdGFydHgsaGVpZ2h0OmUuc3RvcHktZS5zdGFydHksZmlsbDplLmZpbGwsY2xhc3M6InJlY3QifSkubG93ZXIoKX0saW5zZXJ0QXJyb3dIZWFkOmZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFycm93aGVhZCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTIpLmF0dHIoIm1hcmtlckhlaWdodCIsMTIpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxMCA1IEwgMCAxMCB6Iil9LGluc2VydEFycm93RmlsbGVkSGVhZDpmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJmaWxsZWQtaGVhZCIpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfSxpbnNlcnRTZXF1ZW5jZU51bWJlcjpmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJzZXF1ZW5jZW51bWJlciIpLmF0dHIoInJlZlgiLDE1KS5hdHRyKCJyZWZZIiwxNSkuYXR0cigibWFya2VyV2lkdGgiLDYwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsMTUpLmF0dHIoImN5IiwxNSkuYXR0cigiciIsNil9LGluc2VydEFycm93Q3Jvc3NIZWFkOmZ1bmN0aW9uKHQpe3ZhciBlPXQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImNyb3NzaGVhZCIpLmF0dHIoIm1hcmtlcldpZHRoIiwxNSkuYXR0cigibWFya2VySGVpZ2h0Iiw4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXR0cigicmVmWCIsMTYpLmF0dHIoInJlZlkiLDQpO2UuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsImJsYWNrIikuYXR0cigic3Ryb2tlIiwiIzAwMDAwMCIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMCwgMCIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoImQiLCJNIDksMiBWIDYgTDE2LDQgWiIpLGUuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2UiLCIjMDAwMDAwIikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIwLCAwIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigiZCIsIk0gMCwxIEwgNiw3IE0gNiwxIEwgMCw3Iil9LGdldFRleHRPYmo6Q2EsZ2V0Tm90ZVJlY3Q6U2F9O2lhLnBhcnNlci55eT1fYTt2YXIgT2E9e30sQmE9e2RhdGE6e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwfSx2ZXJ0aWNhbFBvczowLHNlcXVlbmNlSXRlbXM6W10sYWN0aXZhdGlvbnM6W10sbW9kZWxzOntnZXRIZWlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5tYXguYXBwbHkobnVsbCwwPT09dGhpcy5hY3RvcnMubGVuZ3RoP1swXTp0aGlzLmFjdG9ycy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodHx8MH0pKSkrKDA9PT10aGlzLmxvb3BzLmxlbmd0aD8wOnRoaXMubG9vcHMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR8fDB9KSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0K2V9KSkpKygwPT09dGhpcy5tZXNzYWdlcy5sZW5ndGg/MDp0aGlzLm1lc3NhZ2VzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fHwwfSkpLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlfSkpKSsoMD09PXRoaXMubm90ZXMubGVuZ3RoPzA6dGhpcy5ub3Rlcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodHx8MH0pKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pKSl9LGNsZWFyOmZ1bmN0aW9uKCl7dGhpcy5hY3RvcnM9W10sdGhpcy5sb29wcz1bXSx0aGlzLm1lc3NhZ2VzPVtdLHRoaXMubm90ZXM9W119LGFkZEFjdG9yOmZ1bmN0aW9uKHQpe3RoaXMuYWN0b3JzLnB1c2godCl9LGFkZExvb3A6ZnVuY3Rpb24odCl7dGhpcy5sb29wcy5wdXNoKHQpfSxhZGRNZXNzYWdlOmZ1bmN0aW9uKHQpe3RoaXMubWVzc2FnZXMucHVzaCh0KX0sYWRkTm90ZTpmdW5jdGlvbih0KXt0aGlzLm5vdGVzLnB1c2godCl9LGxhc3RBY3RvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFjdG9yc1t0aGlzLmFjdG9ycy5sZW5ndGgtMV19LGxhc3RMb29wOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9vcHNbdGhpcy5sb29wcy5sZW5ndGgtMV19LGxhc3RNZXNzYWdlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZXNbdGhpcy5tZXNzYWdlcy5sZW5ndGgtMV19LGxhc3ROb3RlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm90ZXNbdGhpcy5ub3Rlcy5sZW5ndGgtMV19LGFjdG9yczpbXSxsb29wczpbXSxtZXNzYWdlczpbXSxub3RlczpbXX0saW5pdDpmdW5jdGlvbigpe3RoaXMuc2VxdWVuY2VJdGVtcz1bXSx0aGlzLmFjdGl2YXRpb25zPVtdLHRoaXMubW9kZWxzLmNsZWFyKCksdGhpcy5kYXRhPXtzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdGhpcy52ZXJ0aWNhbFBvcz0wLFJhKGlhLnBhcnNlci55eS5nZXRDb25maWcoKSl9LHVwZGF0ZVZhbDpmdW5jdGlvbih0LGUsbixyKXt2b2lkIDA9PT10W2VdP3RbZV09bjp0W2VdPXIobix0W2VdKX0sdXBkYXRlQm91bmRzOmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXMsYT0wO2Z1bmN0aW9uIG8obyl7cmV0dXJuIGZ1bmN0aW9uKHMpe2ErKzt2YXIgYz1pLnNlcXVlbmNlSXRlbXMubGVuZ3RoLWErMTtpLnVwZGF0ZVZhbChzLCJzdGFydHkiLGUtYypPYS5ib3hNYXJnaW4sTWF0aC5taW4pLGkudXBkYXRlVmFsKHMsInN0b3B5IixyK2MqT2EuYm94TWFyZ2luLE1hdGgubWF4KSxpLnVwZGF0ZVZhbChCYS5kYXRhLCJzdGFydHgiLHQtYypPYS5ib3hNYXJnaW4sTWF0aC5taW4pLGkudXBkYXRlVmFsKEJhLmRhdGEsInN0b3B4IixuK2MqT2EuYm94TWFyZ2luLE1hdGgubWF4KSwiYWN0aXZhdGlvbiIhPT1vJiYoaS51cGRhdGVWYWwocywic3RhcnR4Iix0LWMqT2EuYm94TWFyZ2luLE1hdGgubWluKSxpLnVwZGF0ZVZhbChzLCJzdG9weCIsbitjKk9hLmJveE1hcmdpbixNYXRoLm1heCksaS51cGRhdGVWYWwoQmEuZGF0YSwic3RhcnR5IixlLWMqT2EuYm94TWFyZ2luLE1hdGgubWluKSxpLnVwZGF0ZVZhbChCYS5kYXRhLCJzdG9weSIscitjKk9hLmJveE1hcmdpbixNYXRoLm1heCkpfX10aGlzLnNlcXVlbmNlSXRlbXMuZm9yRWFjaChvKCkpLHRoaXMuYWN0aXZhdGlvbnMuZm9yRWFjaChvKCJhY3RpdmF0aW9uIikpfSxpbnNlcnQ6ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9TWF0aC5taW4odCxuKSxhPU1hdGgubWF4KHQsbiksbz1NYXRoLm1pbihlLHIpLHM9TWF0aC5tYXgoZSxyKTt0aGlzLnVwZGF0ZVZhbChCYS5kYXRhLCJzdGFydHgiLGksTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKEJhLmRhdGEsInN0YXJ0eSIsbyxNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwoQmEuZGF0YSwic3RvcHgiLGEsTWF0aC5tYXgpLHRoaXMudXBkYXRlVmFsKEJhLmRhdGEsInN0b3B5IixzLE1hdGgubWF4KSx0aGlzLnVwZGF0ZUJvdW5kcyhpLG8sYSxzKX0sbmV3QWN0aXZhdGlvbjpmdW5jdGlvbih0LGUsbil7dmFyIHI9blt0LmZyb20uYWN0b3JdLGk9RmEodC5mcm9tLmFjdG9yKS5sZW5ndGh8fDAsYT1yLngrci53aWR0aC8yKyhpLTEpKk9hLmFjdGl2YXRpb25XaWR0aC8yO3RoaXMuYWN0aXZhdGlvbnMucHVzaCh7c3RhcnR4OmEsc3RhcnR5OnRoaXMudmVydGljYWxQb3MrMixzdG9weDphK09hLmFjdGl2YXRpb25XaWR0aCxzdG9weTp2b2lkIDAsYWN0b3I6dC5mcm9tLmFjdG9yLGFuY2hvcmVkOk1hLmFuY2hvckVsZW1lbnQoZSl9KX0sZW5kQWN0aXZhdGlvbjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmFjdGl2YXRpb25zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuYWN0b3J9KSkubGFzdEluZGV4T2YodC5mcm9tLmFjdG9yKTtyZXR1cm4gdGhpcy5hY3RpdmF0aW9ucy5zcGxpY2UoZSwxKVswXX0sY3JlYXRlTG9vcDpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7bWVzc2FnZTp2b2lkIDAsd3JhcDohMSx3aWR0aDp2b2lkIDB9LGU9YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDA7cmV0dXJue3N0YXJ0eDp2b2lkIDAsc3RhcnR5OnRoaXMudmVydGljYWxQb3Msc3RvcHg6dm9pZCAwLHN0b3B5OnZvaWQgMCx0aXRsZTp0Lm1lc3NhZ2Usd3JhcDp0LndyYXAsd2lkdGg6dC53aWR0aCxoZWlnaHQ6MCxmaWxsOmV9fSxuZXdMb29wOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnttZXNzYWdlOnZvaWQgMCx3cmFwOiExLHdpZHRoOnZvaWQgMH0sZT1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMDt0aGlzLnNlcXVlbmNlSXRlbXMucHVzaCh0aGlzLmNyZWF0ZUxvb3AodCxlKSl9LGVuZExvb3A6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXF1ZW5jZUl0ZW1zLnBvcCgpfSxhZGRTZWN0aW9uVG9Mb29wOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2VxdWVuY2VJdGVtcy5wb3AoKTtlLnNlY3Rpb25zPWUuc2VjdGlvbnN8fFtdLGUuc2VjdGlvblRpdGxlcz1lLnNlY3Rpb25UaXRsZXN8fFtdLGUuc2VjdGlvbnMucHVzaCh7eTpCYS5nZXRWZXJ0aWNhbFBvcygpLGhlaWdodDowfSksZS5zZWN0aW9uVGl0bGVzLnB1c2godCksdGhpcy5zZXF1ZW5jZUl0ZW1zLnB1c2goZSl9LGJ1bXBWZXJ0aWNhbFBvczpmdW5jdGlvbih0KXt0aGlzLnZlcnRpY2FsUG9zPXRoaXMudmVydGljYWxQb3MrdCx0aGlzLmRhdGEuc3RvcHk9dGhpcy52ZXJ0aWNhbFBvc30sZ2V0VmVydGljYWxQb3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52ZXJ0aWNhbFBvc30sZ2V0Qm91bmRzOmZ1bmN0aW9uKCl7cmV0dXJue2JvdW5kczp0aGlzLmRhdGEsbW9kZWxzOnRoaXMubW9kZWxzfX19LE5hPWZ1bmN0aW9uKHQpe3JldHVybntmb250RmFtaWx5OnQubWVzc2FnZUZvbnRGYW1pbHksZm9udFNpemU6dC5tZXNzYWdlRm9udFNpemUsZm9udFdlaWdodDp0Lm1lc3NhZ2VGb250V2VpZ2h0fX0sRGE9ZnVuY3Rpb24odCl7cmV0dXJue2ZvbnRGYW1pbHk6dC5ub3RlRm9udEZhbWlseSxmb250U2l6ZTp0Lm5vdGVGb250U2l6ZSxmb250V2VpZ2h0OnQubm90ZUZvbnRXZWlnaHR9fSxMYT1mdW5jdGlvbih0KXtyZXR1cm57Zm9udEZhbWlseTp0LmFjdG9yRm9udEZhbWlseSxmb250U2l6ZTp0LmFjdG9yRm9udFNpemUsZm9udFdlaWdodDp0LmFjdG9yRm9udFdlaWdodH19LElhPWZ1bmN0aW9uKHQsZSxuLHIpe2Zvcih2YXIgaT0wLGE9MCxvPTA7bzxuLmxlbmd0aDtvKyspe3ZhciBzPWVbbltvXV07cy53aWR0aD1zLndpZHRofHxPYS53aWR0aCxzLmhlaWdodD1NYXRoLm1heChzLmhlaWdodHx8T2EuaGVpZ2h0LE9hLmhlaWdodCkscy5tYXJnaW49cy5tYXJnaW58fE9hLmFjdG9yTWFyZ2luLHMueD1pK2Escy55PXIsTWEuZHJhd0FjdG9yKHQscyxPYSksQmEuaW5zZXJ0KHMueCxyLHMueCtzLndpZHRoLHMuaGVpZ2h0KSxpKz1zLndpZHRoLGErPXMubWFyZ2luLEJhLm1vZGVscy5hZGRBY3RvcihzKX1CYS5idW1wVmVydGljYWxQb3MoT2EuaGVpZ2h0KX0sUmE9ZnVuY3Rpb24odCl7UChPYSx0KSx0LmZvbnRGYW1pbHkmJihPYS5hY3RvckZvbnRGYW1pbHk9T2Eubm90ZUZvbnRGYW1pbHk9T2EubWVzc2FnZUZvbnRGYW1pbHk9dC5mb250RmFtaWx5KSx0LmZvbnRTaXplJiYoT2EuYWN0b3JGb250U2l6ZT1PYS5ub3RlRm9udFNpemU9T2EubWVzc2FnZUZvbnRTaXplPXQuZm9udFNpemUpLHQuZm9udFdlaWdodCYmKE9hLmFjdG9yRm9udFdlaWdodD1PYS5ub3RlRm9udFdlaWdodD1PYS5tZXNzYWdlRm9udFdlaWdodD10LmZvbnRXZWlnaHQpfSxGYT1mdW5jdGlvbih0KXtyZXR1cm4gQmEuYWN0aXZhdGlvbnMuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5hY3Rvcj09PXR9KSl9LFBhPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZVt0XSxyPUZhKHQpO3JldHVybltyLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5taW4odCxlLnN0YXJ0eCl9KSxuLngrbi53aWR0aC8yKSxyLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXgodCxlLnN0b3B4KX0pLG4ueCtuLndpZHRoLzIpXX07ZnVuY3Rpb24gamEodCxlLG4scixpKXtCYS5idW1wVmVydGljYWxQb3Mobik7dmFyIGE9cjtpZihlLmlkJiZlLm1lc3NhZ2UmJnRbZS5pZF0pe3ZhciBvPXRbZS5pZF0ud2lkdGgscz1OYShPYSk7ZS5tZXNzYWdlPVYud3JhcExhYmVsKCJbIi5jb25jYXQoZS5tZXNzYWdlLCJdIiksby0yKk9hLndyYXBQYWRkaW5nLHMpLGUud2lkdGg9byxlLndyYXA9ITA7dmFyIHU9Vi5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhlLm1lc3NhZ2UscyksbD1NYXRoLm1heCh1LmhlaWdodCxPYS5sYWJlbEJveEhlaWdodCk7YT1yK2wsYy5kZWJ1ZygiIi5jb25jYXQobCwiIC0gIikuY29uY2F0KGUubWVzc2FnZSkpfWkoZSksQmEuYnVtcFZlcnRpY2FsUG9zKGEpfXZhciBZYT1mdW5jdGlvbih0LGUpe3ZhciBuPXt9O3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKHRbZS50b10mJnRbZS5mcm9tXSl7dmFyIHI9dFtlLnRvXTtpZihlLnBsYWNlbWVudD09PWlhLnBhcnNlci55eS5QTEFDRU1FTlQuTEVGVE9GJiYhci5wcmV2QWN0b3IpcmV0dXJuO2lmKGUucGxhY2VtZW50PT09aWEucGFyc2VyLnl5LlBMQUNFTUVOVC5SSUdIVE9GJiYhci5uZXh0QWN0b3IpcmV0dXJuO3ZhciBpPXZvaWQgMCE9PWUucGxhY2VtZW50LGE9IWksbz1pP0RhKE9hKTpOYShPYSkscz1lLndyYXA/Vi53cmFwTGFiZWwoZS5tZXNzYWdlLE9hLndpZHRoLTIqT2Eud3JhcFBhZGRpbmcsbyk6ZS5tZXNzYWdlLGM9Vi5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhzLG8pLndpZHRoKzIqT2Eud3JhcFBhZGRpbmc7YSYmZS5mcm9tPT09ci5uZXh0QWN0b3I/bltlLnRvXT1NYXRoLm1heChuW2UudG9dfHwwLGMpOmEmJmUuZnJvbT09PXIucHJldkFjdG9yP25bZS5mcm9tXT1NYXRoLm1heChuW2UuZnJvbV18fDAsYyk6YSYmZS5mcm9tPT09ZS50bz8obltlLmZyb21dPU1hdGgubWF4KG5bZS5mcm9tXXx8MCxjLzIpLG5bZS50b109TWF0aC5tYXgobltlLnRvXXx8MCxjLzIpKTplLnBsYWNlbWVudD09PWlhLnBhcnNlci55eS5QTEFDRU1FTlQuUklHSFRPRj9uW2UuZnJvbV09TWF0aC5tYXgobltlLmZyb21dfHwwLGMpOmUucGxhY2VtZW50PT09aWEucGFyc2VyLnl5LlBMQUNFTUVOVC5MRUZUT0Y/bltyLnByZXZBY3Rvcl09TWF0aC5tYXgobltyLnByZXZBY3Rvcl18fDAsYyk6ZS5wbGFjZW1lbnQ9PT1pYS5wYXJzZXIueXkuUExBQ0VNRU5ULk9WRVImJihyLnByZXZBY3RvciYmKG5bci5wcmV2QWN0b3JdPU1hdGgubWF4KG5bci5wcmV2QWN0b3JdfHwwLGMvMikpLHIubmV4dEFjdG9yJiYobltlLmZyb21dPU1hdGgubWF4KG5bZS5mcm9tXXx8MCxjLzIpKSl9fSkpLGMuZGVidWcoIm1heE1lc3NhZ2VXaWR0aFBlckFjdG9yOiIsbiksbn0semE9ZnVuY3Rpb24odCxlKXt2YXIgbj0wO2Zvcih2YXIgciBpbiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgcj10W2VdO3Iud3JhcCYmKHIuZGVzY3JpcHRpb249Vi53cmFwTGFiZWwoci5kZXNjcmlwdGlvbixPYS53aWR0aC0yKk9hLndyYXBQYWRkaW5nLExhKE9hKSkpO3ZhciBpPVYuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoci5kZXNjcmlwdGlvbixMYShPYSkpO3Iud2lkdGg9ci53cmFwP09hLndpZHRoOk1hdGgubWF4KE9hLndpZHRoLGkud2lkdGgrMipPYS53cmFwUGFkZGluZyksci5oZWlnaHQ9ci53cmFwP01hdGgubWF4KGkuaGVpZ2h0LE9hLmhlaWdodCk6T2EuaGVpZ2h0LG49TWF0aC5tYXgobixyLmhlaWdodCl9KSksZSl7dmFyIGk9dFtyXTtpZihpKXt2YXIgYT10W2kubmV4dEFjdG9yXTtpZihhKXt2YXIgbz1lW3JdK09hLmFjdG9yTWFyZ2luLWkud2lkdGgvMi1hLndpZHRoLzI7aS5tYXJnaW49TWF0aC5tYXgobyxPYS5hY3Rvck1hcmdpbil9fX1yZXR1cm4gTWF0aC5tYXgobixPYS5oZWlnaHQpfSxVYT1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaSxhPXt9LG89W107cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7c3dpdGNoKHQuaWQ9Vi5yYW5kb20oe2xlbmd0aDoxMH0pLHQudHlwZSl7Y2FzZSBpYS5wYXJzZXIueXkuTElORVRZUEUuTE9PUF9TVEFSVDpjYXNlIGlhLnBhcnNlci55eS5MSU5FVFlQRS5BTFRfU1RBUlQ6Y2FzZSBpYS5wYXJzZXIueXkuTElORVRZUEUuT1BUX1NUQVJUOmNhc2UgaWEucGFyc2VyLnl5LkxJTkVUWVBFLlBBUl9TVEFSVDpvLnB1c2goe2lkOnQuaWQsbXNnOnQubWVzc2FnZSxmcm9tOk51bWJlci5NQVhfU0FGRV9JTlRFR0VSLHRvOk51bWJlci5NSU5fU0FGRV9JTlRFR0VSLHdpZHRoOjB9KTticmVhaztjYXNlIGlhLnBhcnNlci55eS5MSU5FVFlQRS5BTFRfRUxTRTpjYXNlIGlhLnBhcnNlci55eS5MSU5FVFlQRS5QQVJfQU5EOnQubWVzc2FnZSYmKG49by5wb3AoKSxhW24uaWRdPW4sYVt0LmlkXT1uLG8ucHVzaChuKSk7YnJlYWs7Y2FzZSBpYS5wYXJzZXIueXkuTElORVRZUEUuTE9PUF9FTkQ6Y2FzZSBpYS5wYXJzZXIueXkuTElORVRZUEUuQUxUX0VORDpjYXNlIGlhLnBhcnNlci55eS5MSU5FVFlQRS5PUFRfRU5EOmNhc2UgaWEucGFyc2VyLnl5LkxJTkVUWVBFLlBBUl9FTkQ6bj1vLnBvcCgpLGFbbi5pZF09bjticmVhaztjYXNlIGlhLnBhcnNlci55eS5MSU5FVFlQRS5BQ1RJVkVfU1RBUlQ6dmFyIHM9ZVt0LmZyb20/dC5mcm9tLmFjdG9yOnQudG8uYWN0b3JdLHU9RmEodC5mcm9tP3QuZnJvbS5hY3Rvcjp0LnRvLmFjdG9yKS5sZW5ndGgsbD1zLngrcy53aWR0aC8yKyh1LTEpKk9hLmFjdGl2YXRpb25XaWR0aC8yLGg9e3N0YXJ0eDpsLHN0b3B4OmwrT2EuYWN0aXZhdGlvbldpZHRoLGFjdG9yOnQuZnJvbS5hY3RvcixlbmFibGVkOiEwfTtCYS5hY3RpdmF0aW9ucy5wdXNoKGgpO2JyZWFrO2Nhc2UgaWEucGFyc2VyLnl5LkxJTkVUWVBFLkFDVElWRV9FTkQ6dmFyIGY9QmEuYWN0aXZhdGlvbnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5hY3Rvcn0pKS5sYXN0SW5kZXhPZih0LmZyb20uYWN0b3IpO2RlbGV0ZSBCYS5hY3RpdmF0aW9ucy5zcGxpY2UoZiwxKVswXX12b2lkIDAhPT10LnBsYWNlbWVudD8ocj1mdW5jdGlvbih0LGUpe3ZhciBuPWVbdC5mcm9tXS54LHI9ZVt0LnRvXS54LGk9dC53cmFwJiZ0Lm1lc3NhZ2UsYT1WLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKGk/Vi53cmFwTGFiZWwodC5tZXNzYWdlLE9hLndpZHRoLERhKE9hKSk6dC5tZXNzYWdlLERhKE9hKSksbz17d2lkdGg6aT9PYS53aWR0aDpNYXRoLm1heChPYS53aWR0aCxhLndpZHRoKzIqT2Eubm90ZU1hcmdpbiksaGVpZ2h0OjAsc3RhcnR4OmVbdC5mcm9tXS54LHN0b3B4OjAsc3RhcnR5OjAsc3RvcHk6MCxtZXNzYWdlOnQubWVzc2FnZX07cmV0dXJuIHQucGxhY2VtZW50PT09aWEucGFyc2VyLnl5LlBMQUNFTUVOVC5SSUdIVE9GPyhvLndpZHRoPWk/TWF0aC5tYXgoT2Eud2lkdGgsYS53aWR0aCk6TWF0aC5tYXgoZVt0LmZyb21dLndpZHRoLzIrZVt0LnRvXS53aWR0aC8yLGEud2lkdGgrMipPYS5ub3RlTWFyZ2luKSxvLnN0YXJ0eD1uKyhlW3QuZnJvbV0ud2lkdGgrT2EuYWN0b3JNYXJnaW4pLzIpOnQucGxhY2VtZW50PT09aWEucGFyc2VyLnl5LlBMQUNFTUVOVC5MRUZUT0Y/KG8ud2lkdGg9aT9NYXRoLm1heChPYS53aWR0aCxhLndpZHRoKzIqT2Eubm90ZU1hcmdpbik6TWF0aC5tYXgoZVt0LmZyb21dLndpZHRoLzIrZVt0LnRvXS53aWR0aC8yLGEud2lkdGgrMipPYS5ub3RlTWFyZ2luKSxvLnN0YXJ0eD1uLW8ud2lkdGgrKGVbdC5mcm9tXS53aWR0aC1PYS5hY3Rvck1hcmdpbikvMik6dC50bz09PXQuZnJvbT8oYT1WLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKGk/Vi53cmFwTGFiZWwodC5tZXNzYWdlLE1hdGgubWF4KE9hLndpZHRoLGVbdC5mcm9tXS53aWR0aCksRGEoT2EpKTp0Lm1lc3NhZ2UsRGEoT2EpKSxvLndpZHRoPWk/TWF0aC5tYXgoT2Eud2lkdGgsZVt0LmZyb21dLndpZHRoKTpNYXRoLm1heChlW3QuZnJvbV0ud2lkdGgsT2Eud2lkdGgsYS53aWR0aCsyKk9hLm5vdGVNYXJnaW4pLG8uc3RhcnR4PW4rKGVbdC5mcm9tXS53aWR0aC1vLndpZHRoKS8yKTooby53aWR0aD1NYXRoLmFicyhuK2VbdC5mcm9tXS53aWR0aC8yLShyK2VbdC50b10ud2lkdGgvMikpK09hLmFjdG9yTWFyZ2luLG8uc3RhcnR4PW48cj9uK2VbdC5mcm9tXS53aWR0aC8yLU9hLmFjdG9yTWFyZ2luLzI6citlW3QudG9dLndpZHRoLzItT2EuYWN0b3JNYXJnaW4vMiksaSYmKG8ubWVzc2FnZT1WLndyYXBMYWJlbCh0Lm1lc3NhZ2Usby53aWR0aC0yKk9hLndyYXBQYWRkaW5nLERhKE9hKSkpLGMuZGVidWcoIk5NOlsiLmNvbmNhdChvLnN0YXJ0eCwiLCIpLmNvbmNhdChvLnN0b3B4LCIsIikuY29uY2F0KG8uc3RhcnR5LCIsIikuY29uY2F0KG8uc3RvcHksIjoiKS5jb25jYXQoby53aWR0aCwiLCIpLmNvbmNhdChvLmhlaWdodCwiPSIpLmNvbmNhdCh0Lm1lc3NhZ2UsIl0iKSksb30odCxlKSx0Lm5vdGVNb2RlbD1yLG8uZm9yRWFjaCgoZnVuY3Rpb24odCl7KG49dCkuZnJvbT1NYXRoLm1pbihuLmZyb20sci5zdGFydHgpLG4udG89TWF0aC5tYXgobi50byxyLnN0YXJ0eCtyLndpZHRoKSxuLndpZHRoPU1hdGgubWF4KG4ud2lkdGgsTWF0aC5hYnMobi5mcm9tLW4udG8pKS1PYS5sYWJlbEJveFdpZHRofSkpKTooaT1mdW5jdGlvbih0LGUpe3ZhciBuPSExO2lmKFtpYS5wYXJzZXIueXkuTElORVRZUEUuU09MSURfT1BFTixpYS5wYXJzZXIueXkuTElORVRZUEUuRE9UVEVEX09QRU4saWEucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElELGlhLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURUQsaWEucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElEX0NST1NTLGlhLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfQ1JPU1MsaWEucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElEX1BPSU5ULGlhLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfUE9JTlRdLmluY2x1ZGVzKHQudHlwZSkmJihuPSEwKSwhbilyZXR1cm57fTt2YXIgcj1QYSh0LmZyb20sZSksaT1QYSh0LnRvLGUpLGE9clswXTw9aVswXT8xOjAsbz1yWzBdPGlbMF0/MDoxLHM9ci5jb25jYXQoaSksYz1NYXRoLmFicyhpW29dLXJbYV0pO3Qud3JhcCYmdC5tZXNzYWdlJiYodC5tZXNzYWdlPVYud3JhcExhYmVsKHQubWVzc2FnZSxNYXRoLm1heChjKzIqT2Eud3JhcFBhZGRpbmcsT2Eud2lkdGgpLE5hKE9hKSkpO3ZhciB1PVYuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnModC5tZXNzYWdlLE5hKE9hKSk7cmV0dXJue3dpZHRoOk1hdGgubWF4KHQud3JhcD8wOnUud2lkdGgrMipPYS53cmFwUGFkZGluZyxjKzIqT2Eud3JhcFBhZGRpbmcsT2Eud2lkdGgpLGhlaWdodDowLHN0YXJ0eDpyW2FdLHN0b3B4Omlbb10sc3RhcnR5OjAsc3RvcHk6MCxtZXNzYWdlOnQubWVzc2FnZSx0eXBlOnQudHlwZSx3cmFwOnQud3JhcCxmcm9tQm91bmRzOk1hdGgubWluLmFwcGx5KG51bGwscyksdG9Cb3VuZHM6TWF0aC5tYXguYXBwbHkobnVsbCxzKX19KHQsZSksdC5tc2dNb2RlbD1pLGkuc3RhcnR4JiZpLnN0b3B4JiZvLmxlbmd0aD4wJiZvLmZvckVhY2goKGZ1bmN0aW9uKHIpe2lmKG49cixpLnN0YXJ0eD09PWkuc3RvcHgpe3ZhciBhPWVbdC5mcm9tXSxvPWVbdC50b107bi5mcm9tPU1hdGgubWluKGEueC1pLndpZHRoLzIsYS54LWEud2lkdGgvMixuLmZyb20pLG4udG89TWF0aC5tYXgoby54K2kud2lkdGgvMixvLngrYS53aWR0aC8yLG4udG8pLG4ud2lkdGg9TWF0aC5tYXgobi53aWR0aCxNYXRoLmFicyhuLnRvLW4uZnJvbSkpLU9hLmxhYmVsQm94V2lkdGh9ZWxzZSBuLmZyb209TWF0aC5taW4oaS5zdGFydHgsbi5mcm9tKSxuLnRvPU1hdGgubWF4KGkuc3RvcHgsbi50byksbi53aWR0aD1NYXRoLm1heChuLndpZHRoLGkud2lkdGgpLU9hLmxhYmVsQm94V2lkdGh9KSkpfSkpLEJhLmFjdGl2YXRpb25zPVtdLGMuZGVidWcoIkxvb3AgdHlwZSB3aWR0aHM6IixhKSxhfSwkYT17Ym91bmRzOkJhLGRyYXdBY3RvcnM6SWEsc2V0Q29uZjpSYSxkcmF3OmZ1bmN0aW9uKHQsZSl7T2E9X3QoKS5zZXF1ZW5jZSxpYS5wYXJzZXIueXkuY2xlYXIoKSxpYS5wYXJzZXIueXkuc2V0V3JhcChPYS53cmFwKSxpYS5wYXJzZXIucGFyc2UodCsiXG4iKSxCYS5pbml0KCksYy5kZWJ1ZygiQzoiLmNvbmNhdChKU09OLnN0cmluZ2lmeShPYSxudWxsLDIpKSk7dmFyIG49T2JqZWN0KGguc2VsZWN0KSgnW2lkPSInLmNvbmNhdChlLCciXScpKSxyPWlhLnBhcnNlci55eS5nZXRBY3RvcnMoKSxpPWlhLnBhcnNlci55eS5nZXRBY3RvcktleXMoKSxhPWlhLnBhcnNlci55eS5nZXRNZXNzYWdlcygpLG89aWEucGFyc2VyLnl5LmdldFRpdGxlKCkscz1ZYShyLGEpO09hLmhlaWdodD16YShyLHMpLElhKG4scixpLDApO3ZhciB1PVVhKGEscixzKTtNYS5pbnNlcnRBcnJvd0hlYWQobiksTWEuaW5zZXJ0QXJyb3dDcm9zc0hlYWQobiksTWEuaW5zZXJ0QXJyb3dGaWxsZWRIZWFkKG4pLE1hLmluc2VydFNlcXVlbmNlTnVtYmVyKG4pO3ZhciBsPTE7YS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZSxpLGE7c3dpdGNoKHQudHlwZSl7Y2FzZSBpYS5wYXJzZXIueXkuTElORVRZUEUuTk9URTppPXQubm90ZU1vZGVsLGZ1bmN0aW9uKHQsZSl7QmEuYnVtcFZlcnRpY2FsUG9zKE9hLmJveE1hcmdpbiksZS5oZWlnaHQ9T2EuYm94TWFyZ2luLGUuc3RhcnR5PUJhLmdldFZlcnRpY2FsUG9zKCk7dmFyIG49TWEuZ2V0Tm90ZVJlY3QoKTtuLng9ZS5zdGFydHgsbi55PWUuc3RhcnR5LG4ud2lkdGg9ZS53aWR0aHx8T2Eud2lkdGgsbi5jbGFzcz0ibm90ZSI7dmFyIHI9dC5hcHBlbmQoImciKSxpPU1hLmRyYXdSZWN0KHIsbiksYT1NYS5nZXRUZXh0T2JqKCk7YS54PWUuc3RhcnR4LGEueT1lLnN0YXJ0eSxhLndpZHRoPW4ud2lkdGgsYS5keT0iMWVtIixhLnRleHQ9ZS5tZXNzYWdlLGEuY2xhc3M9Im5vdGVUZXh0IixhLmZvbnRGYW1pbHk9T2Eubm90ZUZvbnRGYW1pbHksYS5mb250U2l6ZT1PYS5ub3RlRm9udFNpemUsYS5mb250V2VpZ2h0PU9hLm5vdGVGb250V2VpZ2h0LGEuYW5jaG9yPU9hLm5vdGVBbGlnbixhLnRleHRNYXJnaW49T2Eubm90ZU1hcmdpbixhLnZhbGlnbj1PYS5ub3RlQWxpZ247dmFyIG89d2EocixhKSxzPU1hdGgucm91bmQoby5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybih0Ll9ncm91cHN8fHQpWzBdWzBdLmdldEJCb3goKS5oZWlnaHR9KSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0K2V9KSkpO2kuYXR0cigiaGVpZ2h0IixzKzIqT2Eubm90ZU1hcmdpbiksZS5oZWlnaHQrPXMrMipPYS5ub3RlTWFyZ2luLEJhLmJ1bXBWZXJ0aWNhbFBvcyhzKzIqT2Eubm90ZU1hcmdpbiksZS5zdG9weT1lLnN0YXJ0eStzKzIqT2Eubm90ZU1hcmdpbixlLnN0b3B4PWUuc3RhcnR4K24ud2lkdGgsQmEuaW5zZXJ0KGUuc3RhcnR4LGUuc3RhcnR5LGUuc3RvcHgsZS5zdG9weSksQmEubW9kZWxzLmFkZE5vdGUoZSl9KG4saSk7YnJlYWs7Y2FzZSBpYS5wYXJzZXIueXkuTElORVRZUEUuQUNUSVZFX1NUQVJUOkJhLm5ld0FjdGl2YXRpb24odCxuLHIpO2JyZWFrO2Nhc2UgaWEucGFyc2VyLnl5LkxJTkVUWVBFLkFDVElWRV9FTkQ6IWZ1bmN0aW9uKHQsZSl7dmFyIHI9QmEuZW5kQWN0aXZhdGlvbih0KTtyLnN0YXJ0eSsxOD5lJiYoci5zdGFydHk9ZS02LGUrPTEyKSxNYS5kcmF3QWN0aXZhdGlvbihuLHIsZSxPYSxGYSh0LmZyb20uYWN0b3IpLmxlbmd0aCksQmEuaW5zZXJ0KHIuc3RhcnR4LGUtMTAsci5zdG9weCxlKX0odCxCYS5nZXRWZXJ0aWNhbFBvcygpKTticmVhaztjYXNlIGlhLnBhcnNlci55eS5MSU5FVFlQRS5MT09QX1NUQVJUOmphKHUsdCxPYS5ib3hNYXJnaW4sT2EuYm94TWFyZ2luK09hLmJveFRleHRNYXJnaW4sKGZ1bmN0aW9uKHQpe3JldHVybiBCYS5uZXdMb29wKHQpfSkpO2JyZWFrO2Nhc2UgaWEucGFyc2VyLnl5LkxJTkVUWVBFLkxPT1BfRU5EOmU9QmEuZW5kTG9vcCgpLE1hLmRyYXdMb29wKG4sZSwibG9vcCIsT2EpLEJhLmJ1bXBWZXJ0aWNhbFBvcyhlLnN0b3B5LUJhLmdldFZlcnRpY2FsUG9zKCkpLEJhLm1vZGVscy5hZGRMb29wKGUpO2JyZWFrO2Nhc2UgaWEucGFyc2VyLnl5LkxJTkVUWVBFLlJFQ1RfU1RBUlQ6amEodSx0LE9hLmJveE1hcmdpbixPYS5ib3hNYXJnaW4sKGZ1bmN0aW9uKHQpe3JldHVybiBCYS5uZXdMb29wKHZvaWQgMCx0Lm1lc3NhZ2UpfSkpO2JyZWFrO2Nhc2UgaWEucGFyc2VyLnl5LkxJTkVUWVBFLlJFQ1RfRU5EOmU9QmEuZW5kTG9vcCgpLE1hLmRyYXdCYWNrZ3JvdW5kUmVjdChuLGUpLEJhLm1vZGVscy5hZGRMb29wKGUpLEJhLmJ1bXBWZXJ0aWNhbFBvcyhlLnN0b3B5LUJhLmdldFZlcnRpY2FsUG9zKCkpO2JyZWFrO2Nhc2UgaWEucGFyc2VyLnl5LkxJTkVUWVBFLk9QVF9TVEFSVDpqYSh1LHQsT2EuYm94TWFyZ2luLE9hLmJveE1hcmdpbitPYS5ib3hUZXh0TWFyZ2luLChmdW5jdGlvbih0KXtyZXR1cm4gQmEubmV3TG9vcCh0KX0pKTticmVhaztjYXNlIGlhLnBhcnNlci55eS5MSU5FVFlQRS5PUFRfRU5EOmU9QmEuZW5kTG9vcCgpLE1hLmRyYXdMb29wKG4sZSwib3B0IixPYSksQmEuYnVtcFZlcnRpY2FsUG9zKGUuc3RvcHktQmEuZ2V0VmVydGljYWxQb3MoKSksQmEubW9kZWxzLmFkZExvb3AoZSk7YnJlYWs7Y2FzZSBpYS5wYXJzZXIueXkuTElORVRZUEUuQUxUX1NUQVJUOmphKHUsdCxPYS5ib3hNYXJnaW4sT2EuYm94TWFyZ2luK09hLmJveFRleHRNYXJnaW4sKGZ1bmN0aW9uKHQpe3JldHVybiBCYS5uZXdMb29wKHQpfSkpO2JyZWFrO2Nhc2UgaWEucGFyc2VyLnl5LkxJTkVUWVBFLkFMVF9FTFNFOmphKHUsdCxPYS5ib3hNYXJnaW4rT2EuYm94VGV4dE1hcmdpbixPYS5ib3hNYXJnaW4sKGZ1bmN0aW9uKHQpe3JldHVybiBCYS5hZGRTZWN0aW9uVG9Mb29wKHQpfSkpO2JyZWFrO2Nhc2UgaWEucGFyc2VyLnl5LkxJTkVUWVBFLkFMVF9FTkQ6ZT1CYS5lbmRMb29wKCksTWEuZHJhd0xvb3AobixlLCJhbHQiLE9hKSxCYS5idW1wVmVydGljYWxQb3MoZS5zdG9weS1CYS5nZXRWZXJ0aWNhbFBvcygpKSxCYS5tb2RlbHMuYWRkTG9vcChlKTticmVhaztjYXNlIGlhLnBhcnNlci55eS5MSU5FVFlQRS5QQVJfU1RBUlQ6amEodSx0LE9hLmJveE1hcmdpbixPYS5ib3hNYXJnaW4rT2EuYm94VGV4dE1hcmdpbiwoZnVuY3Rpb24odCl7cmV0dXJuIEJhLm5ld0xvb3AodCl9KSk7YnJlYWs7Y2FzZSBpYS5wYXJzZXIueXkuTElORVRZUEUuUEFSX0FORDpqYSh1LHQsT2EuYm94TWFyZ2luK09hLmJveFRleHRNYXJnaW4sT2EuYm94TWFyZ2luLChmdW5jdGlvbih0KXtyZXR1cm4gQmEuYWRkU2VjdGlvblRvTG9vcCh0KX0pKTticmVhaztjYXNlIGlhLnBhcnNlci55eS5MSU5FVFlQRS5QQVJfRU5EOmU9QmEuZW5kTG9vcCgpLE1hLmRyYXdMb29wKG4sZSwicGFyIixPYSksQmEuYnVtcFZlcnRpY2FsUG9zKGUuc3RvcHktQmEuZ2V0VmVydGljYWxQb3MoKSksQmEubW9kZWxzLmFkZExvb3AoZSk7YnJlYWs7ZGVmYXVsdDp0cnl7KGE9dC5tc2dNb2RlbCkuc3RhcnR5PUJhLmdldFZlcnRpY2FsUG9zKCksYS5zZXF1ZW5jZUluZGV4PWwsZnVuY3Rpb24odCxlKXtCYS5idW1wVmVydGljYWxQb3MoMTApO3ZhciBuPWUuc3RhcnR4LHI9ZS5zdG9weCxpPWUuc3RhcnR5LGE9ZS5tZXNzYWdlLG89ZS50eXBlLHM9ZS5zZXF1ZW5jZUluZGV4LGM9Xy5zcGxpdEJyZWFrcyhhKS5sZW5ndGgsdT1WLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKGEsTmEoT2EpKSxsPXUuaGVpZ2h0L2M7ZS5oZWlnaHQrPWwsQmEuYnVtcFZlcnRpY2FsUG9zKGwpO3ZhciBoPU1hLmdldFRleHRPYmooKTtoLng9bixoLnk9aSsxMCxoLndpZHRoPXItbixoLmNsYXNzPSJtZXNzYWdlVGV4dCIsaC5keT0iMWVtIixoLnRleHQ9YSxoLmZvbnRGYW1pbHk9T2EubWVzc2FnZUZvbnRGYW1pbHksaC5mb250U2l6ZT1PYS5tZXNzYWdlRm9udFNpemUsaC5mb250V2VpZ2h0PU9hLm1lc3NhZ2VGb250V2VpZ2h0LGguYW5jaG9yPU9hLm1lc3NhZ2VBbGlnbixoLnZhbGlnbj1PYS5tZXNzYWdlQWxpZ24saC50ZXh0TWFyZ2luPU9hLndyYXBQYWRkaW5nLGgudHNwYW49ITEsd2EodCxoKTt2YXIgZixkLHA9dS5oZWlnaHQtMTAseT11LndpZHRoO2lmKG49PT1yKXtkPUJhLmdldFZlcnRpY2FsUG9zKCkrcCxPYS5yaWdodEFuZ2xlcz9mPXQuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gICIuY29uY2F0KG4sIiwiKS5jb25jYXQoZCwiIEggIikuY29uY2F0KG4rTWF0aC5tYXgoT2Eud2lkdGgvMix5LzIpLCIgViAiKS5jb25jYXQoZCsyNSwiIEggIikuY29uY2F0KG4pKToocCs9T2EuYm94TWFyZ2luLGQ9QmEuZ2V0VmVydGljYWxQb3MoKStwLGY9dC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAiK24rIiwiK2QrIiBDICIrKG4rNjApKyIsIisoZC0xMCkrIiAiKyhuKzYwKSsiLCIrKGQrMzApKyIgIituKyIsIisoZCsyMCkpKSxwKz0zMDt2YXIgZz1NYXRoLm1heCh5LzIsT2Eud2lkdGgvMik7QmEuaW5zZXJ0KG4tZyxCYS5nZXRWZXJ0aWNhbFBvcygpLTEwK3AscitnLEJhLmdldFZlcnRpY2FsUG9zKCkrMzArcCl9ZWxzZSBwKz1PYS5ib3hNYXJnaW4sZD1CYS5nZXRWZXJ0aWNhbFBvcygpK3AsKGY9dC5hcHBlbmQoImxpbmUiKSkuYXR0cigieDEiLG4pLGYuYXR0cigieTEiLGQpLGYuYXR0cigieDIiLHIpLGYuYXR0cigieTIiLGQpLEJhLmluc2VydChuLGQtMTAscixkKTtvPT09aWEucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRHx8bz09PWlhLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfQ1JPU1N8fG89PT1pYS5wYXJzZXIueXkuTElORVRZUEUuRE9UVEVEX1BPSU5UfHxvPT09aWEucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRF9PUEVOPyhmLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMywgMyIpLGYuYXR0cigiY2xhc3MiLCJtZXNzYWdlTGluZTEiKSk6Zi5hdHRyKCJjbGFzcyIsIm1lc3NhZ2VMaW5lMCIpO3ZhciB2PSIiO09hLmFycm93TWFya2VyQWJzb2x1dGUmJih2PSh2PSh2PXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5yZXBsYWNlKC9cKC9nLCJcXCgiKSkucmVwbGFjZSgvXCkvZywiXFwpIikpLGYuYXR0cigic3Ryb2tlLXdpZHRoIiwyKSxmLmF0dHIoInN0cm9rZSIsIm5vbmUiKSxmLnN0eWxlKCJmaWxsIiwibm9uZSIpLG8hPT1pYS5wYXJzZXIueXkuTElORVRZUEUuU09MSUQmJm8hPT1pYS5wYXJzZXIueXkuTElORVRZUEUuRE9UVEVEfHxmLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIit2KyIjYXJyb3doZWFkKSIpLG8hPT1pYS5wYXJzZXIueXkuTElORVRZUEUuU09MSURfUE9JTlQmJm8hPT1pYS5wYXJzZXIueXkuTElORVRZUEUuRE9UVEVEX1BPSU5UfHxmLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIit2KyIjZmlsbGVkLWhlYWQpIiksbyE9PWlhLnBhcnNlci55eS5MSU5FVFlQRS5TT0xJRF9DUk9TUyYmbyE9PWlhLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfQ1JPU1N8fGYuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3YrIiNjcm9zc2hlYWQpIiksKF9hLnNob3dTZXF1ZW5jZU51bWJlcnMoKXx8T2Euc2hvd1NlcXVlbmNlTnVtYmVycykmJihmLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK3YrIiNzZXF1ZW5jZW51bWJlcikiKSx0LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLG4pLmF0dHIoInkiLGQrNCkuYXR0cigiZm9udC1mYW1pbHkiLCJzYW5zLXNlcmlmIikuYXR0cigiZm9udC1zaXplIiwiMTJweCIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigidGV4dExlbmd0aCIsIjE2cHgiKS5hdHRyKCJjbGFzcyIsInNlcXVlbmNlTnVtYmVyIikudGV4dChzKSksQmEuYnVtcFZlcnRpY2FsUG9zKHApLGUuaGVpZ2h0Kz1wLGUuc3RvcHk9ZS5zdGFydHkrZS5oZWlnaHQsQmEuaW5zZXJ0KGUuZnJvbUJvdW5kcyxlLnN0YXJ0eSxlLnRvQm91bmRzLGUuc3RvcHkpfShuLGEpLEJhLm1vZGVscy5hZGRNZXNzYWdlKGEpfWNhdGNoKHQpe2MuZXJyb3IoImVycm9yIHdoaWxlIGRyYXdpbmcgbWVzc2FnZSIsdCl9fVtpYS5wYXJzZXIueXkuTElORVRZUEUuU09MSURfT1BFTixpYS5wYXJzZXIueXkuTElORVRZUEUuRE9UVEVEX09QRU4saWEucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElELGlhLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURUQsaWEucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElEX0NST1NTLGlhLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfQ1JPU1MsaWEucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElEX1BPSU5ULGlhLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfUE9JTlRdLmluY2x1ZGVzKHQudHlwZSkmJmwrK30pKSxPYS5taXJyb3JBY3RvcnMmJihCYS5idW1wVmVydGljYWxQb3MoMipPYS5ib3hNYXJnaW4pLElhKG4scixpLEJhLmdldFZlcnRpY2FsUG9zKCkpKTt2YXIgZj1CYS5nZXRCb3VuZHMoKS5ib3VuZHM7Yy5kZWJ1ZygiRm9yIGxpbmUgaGVpZ2h0IGZpeCBRdWVyeWluZzogIyIrZSsiIC5hY3Rvci1saW5lIiksT2JqZWN0KGguc2VsZWN0QWxsKSgiIyIrZSsiIC5hY3Rvci1saW5lIikuYXR0cigieTIiLGYuc3RvcHkpO3ZhciBkPWYuc3RvcHktZi5zdGFydHkrMipPYS5kaWFncmFtTWFyZ2luWTtPYS5taXJyb3JBY3RvcnMmJihkPWQtT2EuYm94TWFyZ2luK09hLmJvdHRvbU1hcmdpbkFkaik7dmFyIHA9Zi5zdG9weC1mLnN0YXJ0eCsyKk9hLmRpYWdyYW1NYXJnaW5YO28mJm4uYXBwZW5kKCJ0ZXh0IikudGV4dChvKS5hdHRyKCJ4IiwoZi5zdG9weC1mLnN0YXJ0eCkvMi0yKk9hLmRpYWdyYW1NYXJnaW5YKS5hdHRyKCJ5IiwtMjUpLFcobixkLHAsT2EudXNlTWF4V2lkdGgpO3ZhciB5PW8/NDA6MDtuLmF0dHIoInZpZXdCb3giLGYuc3RhcnR4LU9hLmRpYWdyYW1NYXJnaW5YKyIgLSIrKE9hLmRpYWdyYW1NYXJnaW5ZK3kpKyIgIitwKyIgIisoZCt5KSksYy5kZWJ1ZygibW9kZWxzOiIsQmEubW9kZWxzKX19LHFhPW4oMjIpLFdhPW4ubihxYSk7ZnVuY3Rpb24gVmEodCl7cmV0dXJuKFZhPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSkodCl9dmFyIEhhLEdhPWZ1bmN0aW9uKHQpe3JldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQpKX0sWGE9W10sWmE9e3Jvb3Q6e3JlbGF0aW9uczpbXSxzdGF0ZXM6e30sZG9jdW1lbnRzOnt9fX0sUWE9WmEucm9vdCxLYT0wLEphPWZ1bmN0aW9uKHQsZSxuLHIsaSl7dm9pZCAwPT09UWEuc3RhdGVzW3RdP1FhLnN0YXRlc1t0XT17aWQ6dCxkZXNjcmlwdGlvbnM6W10sdHlwZTplLGRvYzpuLG5vdGU6aX06KFFhLnN0YXRlc1t0XS5kb2N8fChRYS5zdGF0ZXNbdF0uZG9jPW4pLFFhLnN0YXRlc1t0XS50eXBlfHwoUWEuc3RhdGVzW3RdLnR5cGU9ZSkpLHImJihjLmluZm8oIkFkZGluZyBzdGF0ZSAiLHQsciksInN0cmluZyI9PXR5cGVvZiByJiZubyh0LHIudHJpbSgpKSwib2JqZWN0Ij09PVZhKHIpJiZyLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBubyh0LGUudHJpbSgpKX0pKSksaSYmKFFhLnN0YXRlc1t0XS5ub3RlPWkpfSx0bz1mdW5jdGlvbigpe1FhPShaYT17cm9vdDp7cmVsYXRpb25zOltdLHN0YXRlczp7fSxkb2N1bWVudHM6e319fSkucm9vdCxRYT1aYS5yb290LEthPTAsMCxpbz1bXX0sZW89ZnVuY3Rpb24odCxlLG4pe3ZhciByPXQsaT1lLGE9ImRlZmF1bHQiLG89ImRlZmF1bHQiOyJbKl0iPT09dCYmKHI9InN0YXJ0IisgKytLYSxhPSJzdGFydCIpLCJbKl0iPT09ZSYmKGk9ImVuZCIrS2Esbz0iZW5kIiksSmEocixhKSxKYShpLG8pLFFhLnJlbGF0aW9ucy5wdXNoKHtpZDE6cixpZDI6aSx0aXRsZTpufSl9LG5vPWZ1bmN0aW9uKHQsZSl7dmFyIG49UWEuc3RhdGVzW3RdLHI9ZTsiOiI9PT1yWzBdJiYocj1yLnN1YnN0cigxKS50cmltKCkpLG4uZGVzY3JpcHRpb25zLnB1c2gocil9LHJvPTAsaW89W10sYW89IlRCIixvbz17cGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4pe3ZzLnBhcnNlRGlyZWN0aXZlKHRoaXMsdCxlLG4pfSxnZXRDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm4gX3QoKS5zdGF0ZX0sYWRkU3RhdGU6SmEsY2xlYXI6dG8sZ2V0U3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIFFhLnN0YXRlc1t0XX0sZ2V0U3RhdGVzOmZ1bmN0aW9uKCl7cmV0dXJuIFFhLnN0YXRlc30sZ2V0UmVsYXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIFFhLnJlbGF0aW9uc30sZ2V0Q2xhc3NlczpmdW5jdGlvbigpe3JldHVybiBpb30sZ2V0RGlyZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGFvfSxhZGRSZWxhdGlvbjplbyxnZXREaXZpZGVySWQ6ZnVuY3Rpb24oKXtyZXR1cm4iZGl2aWRlci1pZC0iKyArK3JvfSxzZXREaXJlY3Rpb246ZnVuY3Rpb24odCl7YW89dH0sY2xlYW51cExhYmVsOmZ1bmN0aW9uKHQpe3JldHVybiI6Ij09PXQuc3Vic3RyaW5nKDAsMSk/dC5zdWJzdHIoMikudHJpbSgpOnQudHJpbSgpfSxsaW5lVHlwZTp7TElORTowLERPVFRFRF9MSU5FOjF9LHJlbGF0aW9uVHlwZTp7QUdHUkVHQVRJT046MCxFWFRFTlNJT046MSxDT01QT1NJVElPTjoyLERFUEVOREVOQ1k6M30sbG9nRG9jdW1lbnRzOmZ1bmN0aW9uKCl7Yy5pbmZvKCJEb2N1bWVudHMgPSAiLFphKX0sZ2V0Um9vdERvYzpmdW5jdGlvbigpe3JldHVybiBYYX0sc2V0Um9vdERvYzpmdW5jdGlvbih0KXtjLmluZm8oIlNldHRpbmcgcm9vdCBkb2MiLHQpLFhhPXR9LGdldFJvb3REb2NWMjpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiB0KGUsbixyKXtpZigicmVsYXRpb24iPT09bi5zdG10KXQoZSxuLnN0YXRlMSwhMCksdChlLG4uc3RhdGUyLCExKTtlbHNlIGlmKCJzdGF0ZSI9PT1uLnN0bXQmJiJbKl0iPT09bi5pZCYmKG4uaWQ9cj9lLmlkKyJfc3RhcnQiOmUuaWQrIl9lbmQiLG4uc3RhcnQ9ciksbi5kb2Mpe3ZhciBpPVtdLGE9MCxvPVtdO2ZvcihhPTA7YTxuLmRvYy5sZW5ndGg7YSsrKWlmKCJkaXZpZGVyIj09PW4uZG9jW2FdLnR5cGUpe3ZhciBzPUdhKG4uZG9jW2FdKTtzLmRvYz1HYShvKSxpLnB1c2gocyksbz1bXX1lbHNlIG8ucHVzaChuLmRvY1thXSk7aWYoaS5sZW5ndGg+MCYmby5sZW5ndGg+MCl7dmFyIGM9e3N0bXQ6InN0YXRlIixpZDpSKCksdHlwZToiZGl2aWRlciIsZG9jOkdhKG8pfTtpLnB1c2goR2EoYykpLG4uZG9jPWl9bi5kb2MuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQobixlLCEwKX0pKX19KHtpZDoicm9vdCJ9LHtpZDoicm9vdCIsZG9jOlhhfSwhMCkse2lkOiJyb290Iixkb2M6WGF9fSxleHRyYWN0OmZ1bmN0aW9uKHQpe3ZhciBlO2U9dC5kb2M/dC5kb2M6dCxjLmluZm8oZSksdG8oKSxjLmluZm8oIkV4dHJhY3QiLGUpLGUuZm9yRWFjaCgoZnVuY3Rpb24odCl7InN0YXRlIj09PXQuc3RtdCYmSmEodC5pZCx0LnR5cGUsdC5kb2MsdC5kZXNjcmlwdGlvbix0Lm5vdGUpLCJyZWxhdGlvbiI9PT10LnN0bXQmJmVvKHQuc3RhdGUxLmlkLHQuc3RhdGUyLmlkLHQuZGVzY3JpcHRpb24pfSkpfSx0cmltQ29sb246ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiI6Ij09PXRbMF0/dC5zdWJzdHIoMSkudHJpbSgpOnQudHJpbSgpfX0sc289e30sY289ZnVuY3Rpb24odCxlKXtzb1t0XT1lfSx1bz1mdW5jdGlvbih0LGUpe3ZhciBuPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMipfdCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkiLF90KCkuc3RhdGUudGV4dEhlaWdodCsxLjMqX3QoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJmb250LXNpemUiLF90KCkuc3RhdGUuZm9udFNpemUpLmF0dHIoImNsYXNzIiwic3RhdGUtdGl0bGUiKS50ZXh0KGUuZGVzY3JpcHRpb25zWzBdKS5ub2RlKCkuZ2V0QkJveCgpLHI9bi5oZWlnaHQsaT10LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLF90KCkuc3RhdGUucGFkZGluZykuYXR0cigieSIscisuNCpfdCgpLnN0YXRlLnBhZGRpbmcrX3QoKS5zdGF0ZS5kaXZpZGVyTWFyZ2luK190KCkuc3RhdGUudGV4dEhlaWdodCkuYXR0cigiY2xhc3MiLCJzdGF0ZS1kZXNjcmlwdGlvbiIpLGE9ITAsbz0hMDtlLmRlc2NyaXB0aW9ucy5mb3JFYWNoKChmdW5jdGlvbih0KXthfHwoIWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IiwyKl90KCkuc3RhdGUucGFkZGluZykudGV4dChlKTtufHxyLmF0dHIoImR5IixfdCgpLnN0YXRlLnRleHRIZWlnaHQpfShpLHQsbyksbz0hMSksYT0hMX0pKTt2YXIgcz10LmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixfdCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkxIixfdCgpLnN0YXRlLnBhZGRpbmcrcitfdCgpLnN0YXRlLmRpdmlkZXJNYXJnaW4vMikuYXR0cigieTIiLF90KCkuc3RhdGUucGFkZGluZytyK190KCkuc3RhdGUuZGl2aWRlck1hcmdpbi8yKS5hdHRyKCJjbGFzcyIsImRlc2NyLWRpdmlkZXIiKSxjPWkubm9kZSgpLmdldEJCb3goKSx1PU1hdGgubWF4KGMud2lkdGgsbi53aWR0aCk7cmV0dXJuIHMuYXR0cigieDIiLHUrMypfdCgpLnN0YXRlLnBhZGRpbmcpLHQuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIsX3QoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixfdCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoIndpZHRoIix1KzIqX3QoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLGMuaGVpZ2h0K3IrMipfdCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInJ4IixfdCgpLnN0YXRlLnJhZGl1cyksdH0sbG89ZnVuY3Rpb24odCxlLG4pe3ZhciByLGk9X3QoKS5zdGF0ZS5wYWRkaW5nLGE9MipfdCgpLnN0YXRlLnBhZGRpbmcsbz10Lm5vZGUoKS5nZXRCQm94KCkscz1vLndpZHRoLGM9by54LHU9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixfdCgpLnN0YXRlLnRpdGxlU2hpZnQpLmF0dHIoImZvbnQtc2l6ZSIsX3QoKS5zdGF0ZS5mb250U2l6ZSkuYXR0cigiY2xhc3MiLCJzdGF0ZS10aXRsZSIpLnRleHQoZS5pZCksbD11Lm5vZGUoKS5nZXRCQm94KCkud2lkdGgrYSxoPU1hdGgubWF4KGwscyk7aD09PXMmJihoKz1hKTt2YXIgZj10Lm5vZGUoKS5nZXRCQm94KCk7ZS5kb2Mscj1jLWksbD5zJiYocj0ocy1oKS8yK2kpLE1hdGguYWJzKGMtZi54KTxpJiZsPnMmJihyPWMtKGwtcykvMik7dmFyIGQ9MS1fdCgpLnN0YXRlLnRleHRIZWlnaHQ7cmV0dXJuIHQuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIscikuYXR0cigieSIsZCkuYXR0cigiY2xhc3MiLG4/ImFsdC1jb21wb3NpdCI6ImNvbXBvc2l0IikuYXR0cigid2lkdGgiLGgpLmF0dHIoImhlaWdodCIsZi5oZWlnaHQrX3QoKS5zdGF0ZS50ZXh0SGVpZ2h0K190KCkuc3RhdGUudGl0bGVTaGlmdCsxKS5hdHRyKCJyeCIsIjAiKSx1LmF0dHIoIngiLHIraSksbDw9cyYmdS5hdHRyKCJ4IixjKyhoLWEpLzItbC8yK2kpLHQuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIscikuYXR0cigieSIsX3QoKS5zdGF0ZS50aXRsZVNoaWZ0LV90KCkuc3RhdGUudGV4dEhlaWdodC1fdCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoIndpZHRoIixoKS5hdHRyKCJoZWlnaHQiLDMqX3QoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKCJyeCIsX3QoKS5zdGF0ZS5yYWRpdXMpLHQuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIscikuYXR0cigieSIsX3QoKS5zdGF0ZS50aXRsZVNoaWZ0LV90KCkuc3RhdGUudGV4dEhlaWdodC1fdCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoIndpZHRoIixoKS5hdHRyKCJoZWlnaHQiLGYuaGVpZ2h0KzMrMipfdCgpLnN0YXRlLnRleHRIZWlnaHQpLmF0dHIoInJ4IixfdCgpLnN0YXRlLnJhZGl1cyksdH0saG89ZnVuY3Rpb24odCxlKXtlLmF0dHIoImNsYXNzIiwic3RhdGUtbm90ZSIpO3ZhciBuPWUuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsMCkuYXR0cigieSIsX3QoKS5zdGF0ZS5wYWRkaW5nKSxyPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPTAsYT1yLmFwcGVuZCgidGV4dCIpO2Euc3R5bGUoInRleHQtYW5jaG9yIiwic3RhcnQiKSxhLmF0dHIoImNsYXNzIiwibm90ZVRleHQiKTt2YXIgbz10LnJlcGxhY2UoL1xyXG4vZywiPGJyLz4iKSxzPShvPW8ucmVwbGFjZSgvXG4vZywiPGJyLz4iKSkuc3BsaXQoXy5saW5lQnJlYWtSZWdleCksYz0xLjI1Kl90KCkuc3RhdGUubm90ZU1hcmdpbix1PSEwLGw9ITEsaD12b2lkIDA7dHJ5e2Zvcih2YXIgZixkPXNbU3ltYm9sLml0ZXJhdG9yXSgpOyEodT0oZj1kLm5leHQoKSkuZG9uZSk7dT0hMCl7dmFyIHA9Zi52YWx1ZS50cmltKCk7aWYocC5sZW5ndGg+MCl7dmFyIHk9YS5hcHBlbmQoInRzcGFuIik7aWYoeS50ZXh0KHApLDA9PT1jKWMrPXkubm9kZSgpLmdldEJCb3goKS5oZWlnaHQ7aSs9Yyx5LmF0dHIoIngiLGUrX3QoKS5zdGF0ZS5ub3RlTWFyZ2luKSx5LmF0dHIoInkiLG4raSsxLjI1Kl90KCkuc3RhdGUubm90ZU1hcmdpbil9fX1jYXRjaCh0KXtsPSEwLGg9dH1maW5hbGx5e3RyeXt1fHxudWxsPT1kLnJldHVybnx8ZC5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgaH19cmV0dXJue3RleHRXaWR0aDphLm5vZGUoKS5nZXRCQm94KCkud2lkdGgsdGV4dEhlaWdodDppfX0odCwwLDAsZS5hcHBlbmQoImciKSksaT1yLnRleHRXaWR0aCxhPXIudGV4dEhlaWdodDtyZXR1cm4gbi5hdHRyKCJoZWlnaHQiLGErMipfdCgpLnN0YXRlLm5vdGVNYXJnaW4pLG4uYXR0cigid2lkdGgiLGkrMipfdCgpLnN0YXRlLm5vdGVNYXJnaW4pLG59LGZvPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5pZCxyPXtpZDpuLGxhYmVsOmUuaWQsd2lkdGg6MCxoZWlnaHQ6MH0saT10LmFwcGVuZCgiZyIpLmF0dHIoImlkIixuKS5hdHRyKCJjbGFzcyIsInN0YXRlR3JvdXAiKTsic3RhcnQiPT09ZS50eXBlJiZmdW5jdGlvbih0KXt0LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY2xhc3MiLCJzdGFydC1zdGF0ZSIpLmF0dHIoInIiLF90KCkuc3RhdGUuc2l6ZVVuaXQpLmF0dHIoImN4IixfdCgpLnN0YXRlLnBhZGRpbmcrX3QoKS5zdGF0ZS5zaXplVW5pdCkuYXR0cigiY3kiLF90KCkuc3RhdGUucGFkZGluZytfdCgpLnN0YXRlLnNpemVVbml0KX0oaSksImVuZCI9PT1lLnR5cGUmJmZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjbGFzcyIsImVuZC1zdGF0ZS1vdXRlciIpLmF0dHIoInIiLF90KCkuc3RhdGUuc2l6ZVVuaXQrX3QoKS5zdGF0ZS5taW5pUGFkZGluZykuYXR0cigiY3giLF90KCkuc3RhdGUucGFkZGluZytfdCgpLnN0YXRlLnNpemVVbml0K190KCkuc3RhdGUubWluaVBhZGRpbmcpLmF0dHIoImN5IixfdCgpLnN0YXRlLnBhZGRpbmcrX3QoKS5zdGF0ZS5zaXplVW5pdCtfdCgpLnN0YXRlLm1pbmlQYWRkaW5nKSx0LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY2xhc3MiLCJlbmQtc3RhdGUtaW5uZXIiKS5hdHRyKCJyIixfdCgpLnN0YXRlLnNpemVVbml0KS5hdHRyKCJjeCIsX3QoKS5zdGF0ZS5wYWRkaW5nK190KCkuc3RhdGUuc2l6ZVVuaXQrMikuYXR0cigiY3kiLF90KCkuc3RhdGUucGFkZGluZytfdCgpLnN0YXRlLnNpemVVbml0KzIpfShpKSwiZm9yayIhPT1lLnR5cGUmJiJqb2luIiE9PWUudHlwZXx8ZnVuY3Rpb24odCxlKXt2YXIgbj1fdCgpLnN0YXRlLmZvcmtXaWR0aCxyPV90KCkuc3RhdGUuZm9ya0hlaWdodDtpZihlLnBhcmVudElkKXt2YXIgaT1uO249cixyPWl9dC5hcHBlbmQoInJlY3QiKS5zdHlsZSgic3Ryb2tlIiwiYmxhY2siKS5zdHlsZSgiZmlsbCIsImJsYWNrIikuYXR0cigid2lkdGgiLG4pLmF0dHIoImhlaWdodCIscikuYXR0cigieCIsX3QoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixfdCgpLnN0YXRlLnBhZGRpbmcpfShpLGUpLCJub3RlIj09PWUudHlwZSYmaG8oZS5ub3RlLnRleHQsaSksImRpdmlkZXIiPT09ZS50eXBlJiZmdW5jdGlvbih0KXt0LmFwcGVuZCgibGluZSIpLnN0eWxlKCJzdHJva2UiLCJncmV5Iikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIzIikuYXR0cigieDEiLF90KCkuc3RhdGUudGV4dEhlaWdodCkuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDIiLDIqX3QoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLDApfShpKSwiZGVmYXVsdCI9PT1lLnR5cGUmJjA9PT1lLmRlc2NyaXB0aW9ucy5sZW5ndGgmJmZ1bmN0aW9uKHQsZSl7dmFyIG49dC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwyKl90KCkuc3RhdGUucGFkZGluZykuYXR0cigieSIsX3QoKS5zdGF0ZS50ZXh0SGVpZ2h0KzIqX3QoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJmb250LXNpemUiLF90KCkuc3RhdGUuZm9udFNpemUpLmF0dHIoImNsYXNzIiwic3RhdGUtdGl0bGUiKS50ZXh0KGUuaWQpLHI9bi5ub2RlKCkuZ2V0QkJveCgpO3QuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIsX3QoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixfdCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoIndpZHRoIixyLndpZHRoKzIqX3QoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLHIuaGVpZ2h0KzIqX3QoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJyeCIsX3QoKS5zdGF0ZS5yYWRpdXMpfShpLGUpLCJkZWZhdWx0Ij09PWUudHlwZSYmZS5kZXNjcmlwdGlvbnMubGVuZ3RoPjAmJnVvKGksZSk7dmFyIGE9aS5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiByLndpZHRoPWEud2lkdGgrMipfdCgpLnN0YXRlLnBhZGRpbmcsci5oZWlnaHQ9YS5oZWlnaHQrMipfdCgpLnN0YXRlLnBhZGRpbmcsY28obixyKSxyfSxwbz0wO3FhLnBhcnNlci55eT1vbzt2YXIgeW89e30sZ289ZnVuY3Rpb24gdChlLG4scixpKXt2YXIgYSxvPW5ldyBVdC5hLkdyYXBoKHtjb21wb3VuZDohMCxtdWx0aWdyYXBoOiEwfSkscz0hMDtmb3IoYT0wO2E8ZS5sZW5ndGg7YSsrKWlmKCJyZWxhdGlvbiI9PT1lW2FdLnN0bXQpe3M9ITE7YnJlYWt9cj9vLnNldEdyYXBoKHtyYW5rZGlyOiJMUiIsbXVsdGlncmFwaDohMCxjb21wb3VuZDohMCxyYW5rZXI6InRpZ2h0LXRyZWUiLHJhbmtzZXA6cz8xOkhhLmVkZ2VMZW5ndGhGYWN0b3Isbm9kZVNlcDpzPzE6NTAsaXNNdWx0aUdyYXBoOiEwfSk6by5zZXRHcmFwaCh7cmFua2RpcjoiVEIiLG11bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITAscmFua3NlcDpzPzE6SGEuZWRnZUxlbmd0aEZhY3Rvcixub2RlU2VwOnM/MTo1MCxyYW5rZXI6InRpZ2h0LXRyZWUiLGlzTXVsdGlHcmFwaDohMH0pLG8uc2V0RGVmYXVsdEVkZ2VMYWJlbCgoZnVuY3Rpb24oKXtyZXR1cm57fX0pKSxvby5leHRyYWN0KGUpO2Zvcih2YXIgdT1vby5nZXRTdGF0ZXMoKSxsPW9vLmdldFJlbGF0aW9ucygpLGY9T2JqZWN0LmtleXModSksZD0wO2Q8Zi5sZW5ndGg7ZCsrKXt2YXIgcD11W2ZbZF1dO3ImJihwLnBhcmVudElkPXIpO3ZhciB5PXZvaWQgMDtpZihwLmRvYyl7dmFyIGc9bi5hcHBlbmQoImciKS5hdHRyKCJpZCIscC5pZCkuYXR0cigiY2xhc3MiLCJzdGF0ZUdyb3VwIik7eT10KHAuZG9jLGcscC5pZCwhaSk7dmFyIHY9KGc9bG8oZyxwLGkpKS5ub2RlKCkuZ2V0QkJveCgpO3kud2lkdGg9di53aWR0aCx5LmhlaWdodD12LmhlaWdodCtIYS5wYWRkaW5nLzIseW9bcC5pZF09e3k6SGEuY29tcG9zaXRUaXRsZVNpemV9fWVsc2UgeT1mbyhuLHApO2lmKHAubm90ZSl7dmFyIG09e2Rlc2NyaXB0aW9uczpbXSxpZDpwLmlkKyItbm90ZSIsbm90ZTpwLm5vdGUsdHlwZToibm90ZSJ9LGI9Zm8obixtKTsibGVmdCBvZiI9PT1wLm5vdGUucG9zaXRpb24/KG8uc2V0Tm9kZSh5LmlkKyItbm90ZSIsYiksby5zZXROb2RlKHkuaWQseSkpOihvLnNldE5vZGUoeS5pZCx5KSxvLnNldE5vZGUoeS5pZCsiLW5vdGUiLGIpKSxvLnNldFBhcmVudCh5LmlkLHkuaWQrIi1ncm91cCIpLG8uc2V0UGFyZW50KHkuaWQrIi1ub3RlIix5LmlkKyItZ3JvdXAiKX1lbHNlIG8uc2V0Tm9kZSh5LmlkLHkpfWMuZGVidWcoIkNvdW50PSIsby5ub2RlQ291bnQoKSxvKTt2YXIgeD0wO2wuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU7eCsrLGMuZGVidWcoIlNldHRpbmcgZWRnZSIsdCksby5zZXRFZGdlKHQuaWQxLHQuaWQyLHtyZWxhdGlvbjp0LHdpZHRoOihlPXQudGl0bGUsZT9lLmxlbmd0aCpIYS5mb250U2l6ZUZhY3RvcjoxKSxoZWlnaHQ6SGEubGFiZWxIZWlnaHQqXy5nZXRSb3dzKHQudGl0bGUpLmxlbmd0aCxsYWJlbHBvczoiYyJ9LCJpZCIreCl9KSksWXQuYS5sYXlvdXQobyksYy5kZWJ1ZygiR3JhcGggYWZ0ZXIgbGF5b3V0IixvLm5vZGVzKCkpO3ZhciBrPW4ubm9kZSgpO28ubm9kZXMoKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2b2lkIDAhPT10JiZ2b2lkIDAhPT1vLm5vZGUodCk/KGMud2FybigiTm9kZSAiK3QrIjogIitKU09OLnN0cmluZ2lmeShvLm5vZGUodCkpKSxPYmplY3QoaC5zZWxlY3QpKCIjIitrLmlkKyIgIyIrdCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKG8ubm9kZSh0KS54LW8ubm9kZSh0KS53aWR0aC8yKSsiLCIrKG8ubm9kZSh0KS55Kyh5b1t0XT95b1t0XS55OjApLW8ubm9kZSh0KS5oZWlnaHQvMikrIiApIiksT2JqZWN0KGguc2VsZWN0KSgiIyIray5pZCsiICMiK3QpLmF0dHIoImRhdGEteC1zaGlmdCIsby5ub2RlKHQpLngtby5ub2RlKHQpLndpZHRoLzIpLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIiMiK2suaWQrIiAjIit0KyIgLmRpdmlkZXIiKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT10LnBhcmVudEVsZW1lbnQsbj0wLHI9MDtlJiYoZS5wYXJlbnRFbGVtZW50JiYobj1lLnBhcmVudEVsZW1lbnQuZ2V0QkJveCgpLndpZHRoKSxyPXBhcnNlSW50KGUuZ2V0QXR0cmlidXRlKCJkYXRhLXgtc2hpZnQiKSwxMCksTnVtYmVyLmlzTmFOKHIpJiYocj0wKSksdC5zZXRBdHRyaWJ1dGUoIngxIiwwLXIrOCksdC5zZXRBdHRyaWJ1dGUoIngyIixuLXItOCl9KSkpOmMuZGVidWcoIk5vIE5vZGUgIit0KyI6ICIrSlNPTi5zdHJpbmdpZnkoby5ub2RlKHQpKSl9KSk7dmFyIHc9ay5nZXRCQm94KCk7by5lZGdlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXQmJnZvaWQgMCE9PW8uZWRnZSh0KSYmKGMuZGVidWcoIkVkZ2UgIit0LnYrIiAtPiAiK3QudysiOiAiK0pTT04uc3RyaW5naWZ5KG8uZWRnZSh0KSkpLGZ1bmN0aW9uKHQsZSxuKXtlLnBvaW50cz1lLnBvaW50cy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiFOdW1iZXIuaXNOYU4odC55KX0pKTt2YXIgcj1lLnBvaW50cyxpPU9iamVjdChoLmxpbmUpKCkueCgoZnVuY3Rpb24odCl7cmV0dXJuIHQueH0pKS55KChmdW5jdGlvbih0KXtyZXR1cm4gdC55fSkpLmN1cnZlKGguY3VydmVCYXNpcyksYT10LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLGkocikpLmF0dHIoImlkIiwiZWRnZSIrcG8pLmF0dHIoImNsYXNzIiwidHJhbnNpdGlvbiIpLG89IiI7aWYoX3QoKS5zdGF0ZS5hcnJvd01hcmtlckFic29sdXRlJiYobz0obz0obz13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCkucmVwbGFjZSgvXCgvZywiXFwoIikpLnJlcGxhY2UoL1wpL2csIlxcKSIpKSxhLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitvKyIjIitmdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSBvby5yZWxhdGlvblR5cGUuQUdHUkVHQVRJT046cmV0dXJuImFnZ3JlZ2F0aW9uIjtjYXNlIG9vLnJlbGF0aW9uVHlwZS5FWFRFTlNJT046cmV0dXJuImV4dGVuc2lvbiI7Y2FzZSBvby5yZWxhdGlvblR5cGUuQ09NUE9TSVRJT046cmV0dXJuImNvbXBvc2l0aW9uIjtjYXNlIG9vLnJlbGF0aW9uVHlwZS5ERVBFTkRFTkNZOnJldHVybiJkZXBlbmRlbmN5In19KG9vLnJlbGF0aW9uVHlwZS5ERVBFTkRFTkNZKSsiRW5kKSIpLHZvaWQgMCE9PW4udGl0bGUpe2Zvcih2YXIgcz10LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwic3RhdGVMYWJlbCIpLHU9Vi5jYWxjTGFiZWxQb3NpdGlvbihlLnBvaW50cyksbD11LngsZj11LnksZD1fLmdldFJvd3Mobi50aXRsZSkscD0wLHk9W10sZz0wLHY9MCxtPTA7bTw9ZC5sZW5ndGg7bSsrKXt2YXIgYj1zLmFwcGVuZCgidGV4dCIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChkW21dKS5hdHRyKCJ4IixsKS5hdHRyKCJ5IixmK3ApLHg9Yi5ub2RlKCkuZ2V0QkJveCgpO2lmKGc9TWF0aC5tYXgoZyx4LndpZHRoKSx2PU1hdGgubWluKHYseC54KSxjLmluZm8oeC54LGwsZitwKSwwPT09cCl7dmFyIGs9Yi5ub2RlKCkuZ2V0QkJveCgpO3A9ay5oZWlnaHQsYy5pbmZvKCJUaXRsZSBoZWlnaHQiLHAsZil9eS5wdXNoKGIpfXZhciB3PXAqZC5sZW5ndGg7aWYoZC5sZW5ndGg+MSl7dmFyIEU9KGQubGVuZ3RoLTEpKnAqLjU7eS5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3JldHVybiB0LmF0dHIoInkiLGYrZSpwLUUpfSkpLHc9cCpkLmxlbmd0aH12YXIgVD1zLm5vZGUoKS5nZXRCQm94KCk7cy5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJjbGFzcyIsImJveCIpLmF0dHIoIngiLGwtZy8yLV90KCkuc3RhdGUucGFkZGluZy8yKS5hdHRyKCJ5IixmLXcvMi1fdCgpLnN0YXRlLnBhZGRpbmcvMi0zLjUpLmF0dHIoIndpZHRoIixnK190KCkuc3RhdGUucGFkZGluZykuYXR0cigiaGVpZ2h0Iix3K190KCkuc3RhdGUucGFkZGluZyksYy5pbmZvKFQpfXBvKyt9KG4sby5lZGdlKHQpLG8uZWRnZSh0KS5yZWxhdGlvbikpfSkpLHc9ay5nZXRCQm94KCk7dmFyIEU9e2lkOnJ8fCJyb290IixsYWJlbDpyfHwicm9vdCIsd2lkdGg6MCxoZWlnaHQ6MH07cmV0dXJuIEUud2lkdGg9dy53aWR0aCsyKkhhLnBhZGRpbmcsRS5oZWlnaHQ9dy5oZWlnaHQrMipIYS5wYWRkaW5nLGMuZGVidWcoIkRvYyByZW5kZXJlZCIsRSxvKSxFfSx2bz1mdW5jdGlvbigpe30sbW89ZnVuY3Rpb24odCxlKXtIYT1fdCgpLnN0YXRlLHFhLnBhcnNlci55eS5jbGVhcigpLHFhLnBhcnNlci5wYXJzZSh0KSxjLmRlYnVnKCJSZW5kZXJpbmcgZGlhZ3JhbSAiK3QpO3ZhciBuPU9iamVjdChoLnNlbGVjdCkoIltpZD0nIi5jb25jYXQoZSwiJ10iKSk7bi5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZGVwZW5kZW5jeUVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOSw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpLG5ldyBVdC5hLkdyYXBoKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwLHJhbmtkaXI6IlJMIn0pLnNldERlZmF1bHRFZGdlTGFiZWwoKGZ1bmN0aW9uKCl7cmV0dXJue319KSk7dmFyIHI9b28uZ2V0Um9vdERvYygpO2dvKHIsbix2b2lkIDAsITEpO3ZhciBpPUhhLnBhZGRpbmcsYT1uLm5vZGUoKS5nZXRCQm94KCksbz1hLndpZHRoKzIqaSxzPWEuaGVpZ2h0KzIqaTtXKG4scywxLjc1Km8sSGEudXNlTWF4V2lkdGgpLG4uYXR0cigidmlld0JveCIsIiIuY29uY2F0KGEueC1IYS5wYWRkaW5nLCIgICIpLmNvbmNhdChhLnktSGEucGFkZGluZywiICIpK28rIiAiK3MpfSxibz17fSx4bz17fSxfbz1mdW5jdGlvbih0LGUsbixyKXtpZigicm9vdCIhPT1uLmlkKXt2YXIgaT0icmVjdCI7ITA9PT1uLnN0YXJ0JiYoaT0ic3RhcnQiKSwhMT09PW4uc3RhcnQmJihpPSJlbmQiKSwiZGVmYXVsdCIhPT1uLnR5cGUmJihpPW4udHlwZSkseG9bbi5pZF18fCh4b1tuLmlkXT17aWQ6bi5pZCxzaGFwZTppLGRlc2NyaXB0aW9uOm4uaWQsY2xhc3Nlczoic3RhdGVkaWFncmFtLXN0YXRlIn0pLG4uZGVzY3JpcHRpb24mJihBcnJheS5pc0FycmF5KHhvW24uaWRdLmRlc2NyaXB0aW9uKT8oeG9bbi5pZF0uc2hhcGU9InJlY3RXaXRoVGl0bGUiLHhvW24uaWRdLmRlc2NyaXB0aW9uLnB1c2gobi5kZXNjcmlwdGlvbikpOnhvW24uaWRdLmRlc2NyaXB0aW9uLmxlbmd0aD4wPyh4b1tuLmlkXS5zaGFwZT0icmVjdFdpdGhUaXRsZSIseG9bbi5pZF0uZGVzY3JpcHRpb249PT1uLmlkP3hvW24uaWRdLmRlc2NyaXB0aW9uPVtuLmRlc2NyaXB0aW9uXTp4b1tuLmlkXS5kZXNjcmlwdGlvbj1beG9bbi5pZF0uZGVzY3JpcHRpb24sbi5kZXNjcmlwdGlvbl0pOih4b1tuLmlkXS5zaGFwZT0icmVjdCIseG9bbi5pZF0uZGVzY3JpcHRpb249bi5kZXNjcmlwdGlvbikpLCF4b1tuLmlkXS50eXBlJiZuLmRvYyYmKGMuaW5mbygiU2V0dGluZyBjbHVzdGVyIGZvciAiLG4uaWQsRW8obikpLHhvW24uaWRdLnR5cGU9Imdyb3VwIix4b1tuLmlkXS5kaXI9RW8obikseG9bbi5pZF0uc2hhcGU9ImRpdmlkZXIiPT09bi50eXBlPyJkaXZpZGVyIjoicm91bmRlZFdpdGhUaXRsZSIseG9bbi5pZF0uY2xhc3Nlcz14b1tuLmlkXS5jbGFzc2VzKyIgIisocj8ic3RhdGVkaWFncmFtLWNsdXN0ZXIgc3RhdGVkaWFncmFtLWNsdXN0ZXItYWx0Ijoic3RhdGVkaWFncmFtLWNsdXN0ZXIiKSk7dmFyIGE9e2xhYmVsU3R5bGU6IiIsc2hhcGU6eG9bbi5pZF0uc2hhcGUsbGFiZWxUZXh0OnhvW24uaWRdLmRlc2NyaXB0aW9uLGNsYXNzZXM6eG9bbi5pZF0uY2xhc3NlcyxzdHlsZToiIixpZDpuLmlkLGRpcjp4b1tuLmlkXS5kaXIsZG9tSWQ6InN0YXRlLSIrbi5pZCsiLSIra28sdHlwZTp4b1tuLmlkXS50eXBlLHBhZGRpbmc6MTV9O2lmKG4ubm90ZSl7dmFyIG89e2xhYmVsU3R5bGU6IiIsc2hhcGU6Im5vdGUiLGxhYmVsVGV4dDpuLm5vdGUudGV4dCxjbGFzc2VzOiJzdGF0ZWRpYWdyYW0tbm90ZSIsc3R5bGU6IiIsaWQ6bi5pZCsiLS0tLW5vdGUtIitrbyxkb21JZDoic3RhdGUtIituLmlkKyItLS0tbm90ZS0iK2tvLHR5cGU6eG9bbi5pZF0udHlwZSxwYWRkaW5nOjE1fSxzPXtsYWJlbFN0eWxlOiIiLHNoYXBlOiJub3RlR3JvdXAiLGxhYmVsVGV4dDpuLm5vdGUudGV4dCxjbGFzc2VzOnhvW24uaWRdLmNsYXNzZXMsc3R5bGU6IiIsaWQ6bi5pZCsiLS0tLXBhcmVudCIsZG9tSWQ6InN0YXRlLSIrbi5pZCsiLS0tLXBhcmVudC0iK2tvLHR5cGU6Imdyb3VwIixwYWRkaW5nOjB9O2tvKyssdC5zZXROb2RlKG4uaWQrIi0tLS1wYXJlbnQiLHMpLHQuc2V0Tm9kZShvLmlkLG8pLHQuc2V0Tm9kZShuLmlkLGEpLHQuc2V0UGFyZW50KG4uaWQsbi5pZCsiLS0tLXBhcmVudCIpLHQuc2V0UGFyZW50KG8uaWQsbi5pZCsiLS0tLXBhcmVudCIpO3ZhciB1PW4uaWQsbD1vLmlkOyJsZWZ0IG9mIj09PW4ubm90ZS5wb3NpdGlvbiYmKHU9by5pZCxsPW4uaWQpLHQuc2V0RWRnZSh1LGwse2Fycm93aGVhZDoibm9uZSIsYXJyb3dUeXBlOiIiLHN0eWxlOiJmaWxsOm5vbmUiLGxhYmVsU3R5bGU6IiIsY2xhc3NlczoidHJhbnNpdGlvbiBub3RlLWVkZ2UiLGFycm93aGVhZFN0eWxlOiJmaWxsOiAjMzMzIixsYWJlbHBvczoiYyIsbGFiZWxUeXBlOiJ0ZXh0Iix0aGlja25lc3M6Im5vcm1hbCJ9KX1lbHNlIHQuc2V0Tm9kZShuLmlkLGEpfWUmJiJyb290IiE9PWUuaWQmJihjLnRyYWNlKCJTZXR0aW5nIG5vZGUgIixuLmlkLCIgdG8gYmUgY2hpbGQgb2YgaXRzIHBhcmVudCAiLGUuaWQpLHQuc2V0UGFyZW50KG4uaWQsZS5pZCkpLG4uZG9jJiYoYy50cmFjZSgiQWRkaW5nIG5vZGVzIGNoaWxkcmVuICIpLHdvKHQsbixuLmRvYywhcikpfSxrbz0wLHdvPWZ1bmN0aW9uKHQsZSxuLHIpe2MudHJhY2UoIml0ZW1zIixuKSxuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2lmKCJzdGF0ZSI9PT1uLnN0bXR8fCJkZWZhdWx0Ij09PW4uc3RtdClfbyh0LGUsbixyKTtlbHNlIGlmKCJyZWxhdGlvbiI9PT1uLnN0bXQpe19vKHQsZSxuLnN0YXRlMSxyKSxfbyh0LGUsbi5zdGF0ZTIscik7dmFyIGk9e2lkOiJlZGdlIitrbyxhcnJvd2hlYWQ6Im5vcm1hbCIsYXJyb3dUeXBlRW5kOiJhcnJvd19iYXJiIixzdHlsZToiZmlsbDpub25lIixsYWJlbFN0eWxlOiIiLGxhYmVsOm4uZGVzY3JpcHRpb24sYXJyb3doZWFkU3R5bGU6ImZpbGw6ICMzMzMiLGxhYmVscG9zOiJjIixsYWJlbFR5cGU6InRleHQiLHRoaWNrbmVzczoibm9ybWFsIixjbGFzc2VzOiJ0cmFuc2l0aW9uIn0sYT1uLnN0YXRlMS5pZCxvPW4uc3RhdGUyLmlkO3Quc2V0RWRnZShhLG8saSxrbyksa28rK319KSl9LEVvPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZXx8IlRCIjtpZih0LmRvYylmb3IodmFyIHI9MDtyPHQuZG9jLmxlbmd0aDtyKyspe3ZhciBpPXQuZG9jW3JdOyJkaXIiPT09aS5zdG10JiYobj1pLnZhbHVlKX1yZXR1cm4gbn0sVG89ZnVuY3Rpb24odCl7Zm9yKHZhciBlPU9iamVjdC5rZXlzKHQpLG49MDtuPGUubGVuZ3RoO24rKylib1tlW25dXT10W2Vbbl1dfSxDbz1mdW5jdGlvbih0LGUpe2MuaW5mbygiRHJhd2luZyBzdGF0ZSBkaWFncmFtICh2MikiLGUpLG9vLmNsZWFyKCkseG89e307dmFyIG49V2EuYS5wYXJzZXI7bi55eT1vbyxuLnBhcnNlKHQpO3ZhciByPW9vLmdldERpcmVjdGlvbigpO3ZvaWQgMD09PXImJihyPSJMUiIpO3ZhciBpPV90KCkuc3RhdGUsYT1pLm5vZGVTcGFjaW5nfHw1MCxvPWkucmFua1NwYWNpbmd8fDUwO2MuaW5mbyhvby5nZXRSb290RG9jVjIoKSksb28uZXh0cmFjdChvby5nZXRSb290RG9jVjIoKSksYy5pbmZvKG9vLmdldFJvb3REb2NWMigpKTt2YXIgcz1uZXcgVXQuYS5HcmFwaCh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOkVvKG9vLmdldFJvb3REb2NWMigpKSxub2Rlc2VwOmEscmFua3NlcDpvLG1hcmdpbng6OCxtYXJnaW55Ojh9KS5zZXREZWZhdWx0RWRnZUxhYmVsKChmdW5jdGlvbigpe3JldHVybnt9fSkpO19vKHMsdm9pZCAwLG9vLmdldFJvb3REb2NWMigpLCEwKTt2YXIgdT1PYmplY3QoaC5zZWxlY3QpKCdbaWQ9IicuY29uY2F0KGUsJyJdJykpLGw9T2JqZWN0KGguc2VsZWN0KSgiIyIrZSsiIGciKTtVZShsLHMsWyJiYXJiIl0sInN0YXRlZGlhZ3JhbSIsZSk7dmFyIGY9dS5ub2RlKCkuZ2V0QkJveCgpLGQ9Zi53aWR0aCsxNixwPWYuaGVpZ2h0KzE2O3UuYXR0cigiY2xhc3MiLCJzdGF0ZWRpYWdyYW0iKTt2YXIgeT11Lm5vZGUoKS5nZXRCQm94KCk7Vyh1LHAsMS43NSpkLGkudXNlTWF4V2lkdGgpO3ZhciBnPSIiLmNvbmNhdCh5LngtOCwiICIpLmNvbmNhdCh5LnktOCwiICIpLmNvbmNhdChkLCIgIikuY29uY2F0KHApO2MuZGVidWcoInZpZXdCb3ggIi5jb25jYXQoZykpLHUuYXR0cigidmlld0JveCIsZyk7Zm9yKHZhciB2PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZD0iJytlKyciXSAuZWRnZUxhYmVsIC5sYWJlbCcpLG09MDttPHYubGVuZ3RoO20rKyl7dmFyIGI9dlttXSx4PWIuZ2V0QkJveCgpLF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInJlY3QiKTtfLnNldEF0dHJpYnV0ZSgicngiLDApLF8uc2V0QXR0cmlidXRlKCJyeSIsMCksXy5zZXRBdHRyaWJ1dGUoIndpZHRoIix4LndpZHRoKSxfLnNldEF0dHJpYnV0ZSgiaGVpZ2h0Iix4LmhlaWdodCksYi5pbnNlcnRCZWZvcmUoXyxiLmZpcnN0Q2hpbGQpfX07ZnVuY3Rpb24gU28odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgZT0wLG49bmV3IEFycmF5KHQubGVuZ3RoKTtlPHQubGVuZ3RoO2UrKyluW2VdPXRbZV07cmV0dXJuIG59fSh0KXx8ZnVuY3Rpb24odCl7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdCh0KXx8IltvYmplY3QgQXJndW1lbnRzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkpcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9KCl9dmFyIEFvPSIiLE1vPSIiLE9vPVtdLEJvPVtdLE5vPVtdLERvPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PSEwLGU9MDtlPE5vLmxlbmd0aDtlKyspTm9bZV0ucHJvY2Vzc2VkLHQ9dCYmTm9bZV0ucHJvY2Vzc2VkO3JldHVybiB0fSxMbz17cGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4pe3ZzLnBhcnNlRGlyZWN0aXZlKHRoaXMsdCxlLG4pfSxnZXRDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm4gX3QoKS5qb3VybmV5fSxjbGVhcjpmdW5jdGlvbigpe09vLmxlbmd0aD0wLEJvLmxlbmd0aD0wLE1vPSIiLEFvPSIiLE5vLmxlbmd0aD0wfSxzZXRUaXRsZTpmdW5jdGlvbih0KXtBbz10fSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiBBb30sYWRkU2VjdGlvbjpmdW5jdGlvbih0KXtNbz10LE9vLnB1c2godCl9LGdldFNlY3Rpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIE9vfSxnZXRUYXNrczpmdW5jdGlvbigpe2Zvcih2YXIgdD1EbygpLGU9MDshdCYmZTwxMDA7KXQ9RG8oKSxlKys7cmV0dXJuIEJvLnB1c2guYXBwbHkoQm8sTm8pLEJvfSxhZGRUYXNrOmZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5zdWJzdHIoMSkuc3BsaXQoIjoiKSxyPTAsaT1bXTsxPT09bi5sZW5ndGg/KHI9TnVtYmVyKG5bMF0pLGk9W10pOihyPU51bWJlcihuWzBdKSxpPW5bMV0uc3BsaXQoIiwiKSk7dmFyIGE9aS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRyaW0oKX0pKSxvPXtzZWN0aW9uOk1vLHR5cGU6TW8scGVvcGxlOmEsdGFzazp0LHNjb3JlOnJ9O05vLnB1c2gobyl9LGFkZFRhc2tPcmc6ZnVuY3Rpb24odCl7dmFyIGU9e3NlY3Rpb246TW8sdHlwZTpNbyxkZXNjcmlwdGlvbjp0LHRhc2s6dCxjbGFzc2VzOltdfTtCby5wdXNoKGUpfSxnZXRBY3RvcnM6ZnVuY3Rpb24oKXtyZXR1cm4gdD1bXSxCby5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnBlb3BsZSYmdC5wdXNoLmFwcGx5KHQsU28oZS5wZW9wbGUpKX0pKSxTbyhuZXcgU2V0KHQpKS5zb3J0KCk7dmFyIHR9fSxJbz1uKDI4KSxSbz1uLm4oSW8pLEZvPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5hcHBlbmQoInJlY3QiKTtyZXR1cm4gbi5hdHRyKCJ4IixlLngpLG4uYXR0cigieSIsZS55KSxuLmF0dHIoImZpbGwiLGUuZmlsbCksbi5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKSxuLmF0dHIoIndpZHRoIixlLndpZHRoKSxuLmF0dHIoImhlaWdodCIsZS5oZWlnaHQpLG4uYXR0cigicngiLGUucngpLG4uYXR0cigicnkiLGUucnkpLHZvaWQgMCE9PWUuY2xhc3MmJm4uYXR0cigiY2xhc3MiLGUuY2xhc3MpLG59LFBvPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5hcHBlbmQoImNpcmNsZSIpO3JldHVybiBuLmF0dHIoImN4IixlLmN4KSxuLmF0dHIoImN5IixlLmN5KSxuLmF0dHIoImZpbGwiLGUuZmlsbCksbi5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKSxuLmF0dHIoInIiLGUuciksdm9pZCAwIT09bi5jbGFzcyYmbi5hdHRyKCJjbGFzcyIsbi5jbGFzcyksdm9pZCAwIT09ZS50aXRsZSYmbi5hcHBlbmQoInRpdGxlIikudGV4dChlLnRpdGxlKSxufSxqbz1mdW5jdGlvbih0LGUpe3ZhciBuPWUudGV4dC5yZXBsYWNlKC88YnJccypcLz8+L2dpLCIgIikscj10LmFwcGVuZCgidGV4dCIpO3IuYXR0cigieCIsZS54KSxyLmF0dHIoInkiLGUueSksci5hdHRyKCJjbGFzcyIsImxlZ2VuZCIpLHIuc3R5bGUoInRleHQtYW5jaG9yIixlLmFuY2hvciksdm9pZCAwIT09ZS5jbGFzcyYmci5hdHRyKCJjbGFzcyIsZS5jbGFzcyk7dmFyIGk9ci5hcHBlbmQoInRzcGFuIik7cmV0dXJuIGkuYXR0cigieCIsZS54KzIqZS50ZXh0TWFyZ2luKSxpLnRleHQobikscn0sWW89LTEsem89ZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MCx3aWR0aDoxMDAsYW5jaG9yOiJzdGFydCIsaGVpZ2h0OjEwMCxyeDowLHJ5OjB9fSxVbz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSxhLG8scyxjKXtyKGUuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsbithLzIpLmF0dHIoInkiLGkrby8yKzUpLnN0eWxlKCJmb250LWNvbG9yIixjKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KHQpLHMpfWZ1bmN0aW9uIGUodCxlLG4saSxhLG8scyxjLHUpe2Zvcih2YXIgbD1jLnRhc2tGb250U2l6ZSxoPWMudGFza0ZvbnRGYW1pbHksZj10LnNwbGl0KC88YnJccypcLz8+L2dpKSxkPTA7ZDxmLmxlbmd0aDtkKyspe3ZhciBwPWQqbC1sKihmLmxlbmd0aC0xKS8yLHk9ZS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixuK2EvMikuYXR0cigieSIsaSkuYXR0cigiZmlsbCIsdSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImZvbnQtc2l6ZSIsbCkuc3R5bGUoImZvbnQtZmFtaWx5IixoKTt5LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixuK2EvMikuYXR0cigiZHkiLHApLnRleHQoZltkXSkseS5hdHRyKCJ5IixpK28vMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLHIoeSxzKX19ZnVuY3Rpb24gbih0LG4saSxhLG8scyxjLHUpe3ZhciBsPW4uYXBwZW5kKCJzd2l0Y2giKSxoPWwuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIsaSkuYXR0cigieSIsYSkuYXR0cigid2lkdGgiLG8pLmF0dHIoImhlaWdodCIscykuYXR0cigicG9zaXRpb24iLCJmaXhlZCIpLmFwcGVuZCgiZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZSIpLnN0eWxlKCJoZWlnaHQiLCIxMDAlIikuc3R5bGUoIndpZHRoIiwiMTAwJSIpO2guYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KHQpLGUodCxsLGksYSxvLHMsYyx1KSxyKGgsYyl9ZnVuY3Rpb24gcih0LGUpe2Zvcih2YXIgbiBpbiBlKW4gaW4gZSYmdC5hdHRyKG4sZVtuXSl9cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiJmbyI9PT1yLnRleHRQbGFjZW1lbnQ/bjoib2xkIj09PXIudGV4dFBsYWNlbWVudD90OmV9fSgpLCRvPVBvLHFvPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LmFwcGVuZCgiZyIpLGk9em8oKTtpLng9ZS54LGkueT1lLnksaS5maWxsPWUuZmlsbCxpLndpZHRoPW4ud2lkdGgsaS5oZWlnaHQ9bi5oZWlnaHQsaS5jbGFzcz0iam91cm5leS1zZWN0aW9uIHNlY3Rpb24tdHlwZS0iK2UubnVtLGkucng9MyxpLnJ5PTMsRm8ocixpKSxVbyhuKShlLnRleHQscixpLngsaS55LGkud2lkdGgsaS5oZWlnaHQse2NsYXNzOiJqb3VybmV5LXNlY3Rpb24gc2VjdGlvbi10eXBlLSIrZS5udW19LG4sZS5jb2xvdXIpfSxXbz1qbyxWbz1mdW5jdGlvbih0LGUsbil7dmFyIHI9ZS54K24ud2lkdGgvMixpPXQuYXBwZW5kKCJnIik7WW8rKzt2YXIgYSxvLHM7aS5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsInRhc2siK1lvKS5hdHRyKCJ4MSIscikuYXR0cigieTEiLGUueSkuYXR0cigieDIiLHIpLmF0dHIoInkyIiw0NTApLmF0dHIoImNsYXNzIiwidGFzay1saW5lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsIjQgMiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKSxhPWksbz17Y3g6cixjeTozMDArMzAqKDUtZS5zY29yZSksc2NvcmU6ZS5zY29yZX0sYS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixvLmN4KS5hdHRyKCJjeSIsby5jeSkuYXR0cigiY2xhc3MiLCJmYWNlIikuYXR0cigiciIsMTUpLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigib3ZlcmZsb3ciLCJ2aXNpYmxlIiksKHM9YS5hcHBlbmQoImciKSkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsby5jeC01KS5hdHRyKCJjeSIsby5jeS01KS5hdHRyKCJyIiwxLjUpLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigiZmlsbCIsIiM2NjYiKS5hdHRyKCJzdHJva2UiLCIjNjY2Iikscy5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixvLmN4KzUpLmF0dHIoImN5IixvLmN5LTUpLmF0dHIoInIiLDEuNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJmaWxsIiwiIzY2NiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKSxvLnNjb3JlPjM/ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KGguYXJjKSgpLnN0YXJ0QW5nbGUoTWF0aC5QSS8yKS5lbmRBbmdsZShNYXRoLlBJLzIqMykuaW5uZXJSYWRpdXMoNy41KS5vdXRlclJhZGl1cygxNS8yLjIpO3QuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoImQiLGUpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK28uY3grIiwiKyhvLmN5KzIpKyIpIil9KHMpOm8uc2NvcmU8Mz9mdW5jdGlvbih0KXt2YXIgZT1PYmplY3QoaC5hcmMpKCkuc3RhcnRBbmdsZSgzKk1hdGguUEkvMikuZW5kQW5nbGUoTWF0aC5QSS8yKjUpLmlubmVyUmFkaXVzKDcuNSkub3V0ZXJSYWRpdXMoMTUvMi4yKTt0LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJkIixlKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitvLmN4KyIsIisoby5jeSs3KSsiKSIpfShzKTpmdW5jdGlvbih0KXt0LmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJzdHJva2UiLDIpLmF0dHIoIngxIixvLmN4LTUpLmF0dHIoInkxIixvLmN5KzcpLmF0dHIoIngyIixvLmN4KzUpLmF0dHIoInkyIixvLmN5KzcpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKS5hdHRyKCJzdHJva2UiLCIjNjY2Iil9KHMpO3ZhciBjPXpvKCk7Yy54PWUueCxjLnk9ZS55LGMuZmlsbD1lLmZpbGwsYy53aWR0aD1uLndpZHRoLGMuaGVpZ2h0PW4uaGVpZ2h0LGMuY2xhc3M9InRhc2sgdGFzay10eXBlLSIrZS5udW0sYy5yeD0zLGMucnk9MyxGbyhpLGMpO3ZhciB1PWUueCsxNDtlLnBlb3BsZS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1lLmFjdG9yc1t0XSxyPXtjeDp1LGN5OmUueSxyOjcsZmlsbDpuLHN0cm9rZToiIzAwMCIsdGl0bGU6dH07UG8oaSxyKSx1Kz0xMH0pKSxVbyhuKShlLnRhc2ssaSxjLngsYy55LGMud2lkdGgsYy5oZWlnaHQse2NsYXNzOiJ0YXNrIn0sbixlLmNvbG91cil9LEhvPWZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFycm93aGVhZCIpLmF0dHIoInJlZlgiLDUpLmF0dHIoInJlZlkiLDIpLmF0dHIoIm1hcmtlcldpZHRoIiw2KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDQpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwLDAgViA0IEw2LDIgWiIpfTtJby5wYXJzZXIueXk9TG87dmFyIEdvPXt9O3ZhciBYbz1fdCgpLmpvdXJuZXksWm89X3QoKS5qb3VybmV5LmxlZnRNYXJnaW4sUW89e2RhdGE6e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwfSx2ZXJ0aWNhbFBvczowLHNlcXVlbmNlSXRlbXM6W10saW5pdDpmdW5jdGlvbigpe3RoaXMuc2VxdWVuY2VJdGVtcz1bXSx0aGlzLmRhdGE9e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwfSx0aGlzLnZlcnRpY2FsUG9zPTB9LHVwZGF0ZVZhbDpmdW5jdGlvbih0LGUsbixyKXt2b2lkIDA9PT10W2VdP3RbZV09bjp0W2VdPXIobix0W2VdKX0sdXBkYXRlQm91bmRzOmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpLGE9X3QoKS5qb3VybmV5LG89dGhpcyxzPTA7dGhpcy5zZXF1ZW5jZUl0ZW1zLmZvckVhY2goKGZ1bmN0aW9uKGMpe3MrKzt2YXIgdT1vLnNlcXVlbmNlSXRlbXMubGVuZ3RoLXMrMTtvLnVwZGF0ZVZhbChjLCJzdGFydHkiLGUtdSphLmJveE1hcmdpbixNYXRoLm1pbiksby51cGRhdGVWYWwoYywic3RvcHkiLHIrdSphLmJveE1hcmdpbixNYXRoLm1heCksby51cGRhdGVWYWwoUW8uZGF0YSwic3RhcnR4Iix0LXUqYS5ib3hNYXJnaW4sTWF0aC5taW4pLG8udXBkYXRlVmFsKFFvLmRhdGEsInN0b3B4IixuK3UqYS5ib3hNYXJnaW4sTWF0aC5tYXgpLCJhY3RpdmF0aW9uIiE9PWkmJihvLnVwZGF0ZVZhbChjLCJzdGFydHgiLHQtdSphLmJveE1hcmdpbixNYXRoLm1pbiksby51cGRhdGVWYWwoYywic3RvcHgiLG4rdSphLmJveE1hcmdpbixNYXRoLm1heCksby51cGRhdGVWYWwoUW8uZGF0YSwic3RhcnR5IixlLXUqYS5ib3hNYXJnaW4sTWF0aC5taW4pLG8udXBkYXRlVmFsKFFvLmRhdGEsInN0b3B5IixyK3UqYS5ib3hNYXJnaW4sTWF0aC5tYXgpKX0pKX0saW5zZXJ0OmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPU1hdGgubWluKHQsbiksYT1NYXRoLm1heCh0LG4pLG89TWF0aC5taW4oZSxyKSxzPU1hdGgubWF4KGUscik7dGhpcy51cGRhdGVWYWwoUW8uZGF0YSwic3RhcnR4IixpLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbChRby5kYXRhLCJzdGFydHkiLG8sTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKFFvLmRhdGEsInN0b3B4IixhLE1hdGgubWF4KSx0aGlzLnVwZGF0ZVZhbChRby5kYXRhLCJzdG9weSIscyxNYXRoLm1heCksdGhpcy51cGRhdGVCb3VuZHMoaSxvLGEscyl9LGJ1bXBWZXJ0aWNhbFBvczpmdW5jdGlvbih0KXt0aGlzLnZlcnRpY2FsUG9zPXRoaXMudmVydGljYWxQb3MrdCx0aGlzLmRhdGEuc3RvcHk9dGhpcy52ZXJ0aWNhbFBvc30sZ2V0VmVydGljYWxQb3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52ZXJ0aWNhbFBvc30sZ2V0Qm91bmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YX19LEtvPVhvLnNlY3Rpb25GaWxscyxKbz1Yby5zZWN0aW9uQ29sb3Vycyx0cz1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciByPV90KCkuam91cm5leSxpPSIiLGE9bisoMipyLmhlaWdodCtyLmRpYWdyYW1NYXJnaW5ZKSxvPTAscz0iI0NDQyIsYz0iYmxhY2siLHU9MCxsPTA7bDxlLmxlbmd0aDtsKyspe3ZhciBoPWVbbF07aWYoaSE9PWguc2VjdGlvbil7cz1Lb1tvJUtvLmxlbmd0aF0sdT1vJUtvLmxlbmd0aCxjPUpvW28lSm8ubGVuZ3RoXTt2YXIgZj17eDpsKnIudGFza01hcmdpbitsKnIud2lkdGgrWm8seTo1MCx0ZXh0Omguc2VjdGlvbixmaWxsOnMsbnVtOnUsY29sb3VyOmN9O3FvKHQsZixyKSxpPWguc2VjdGlvbixvKyt9dmFyIGQ9aC5wZW9wbGUucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBHb1tlXSYmKHRbZV09R29bZV0pLHR9KSx7fSk7aC54PWwqci50YXNrTWFyZ2luK2wqci53aWR0aCtabyxoLnk9YSxoLndpZHRoPXIuZGlhZ3JhbU1hcmdpblgsaC5oZWlnaHQ9ci5kaWFncmFtTWFyZ2luWSxoLmNvbG91cj1jLGguZmlsbD1zLGgubnVtPXUsaC5hY3RvcnM9ZCxWbyh0LGgsciksUW8uaW5zZXJ0KGgueCxoLnksaC54K2gud2lkdGgrci50YXNrTWFyZ2luLDQ1MCl9fSxlcz1mdW5jdGlvbih0KXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihlKXtYb1tlXT10W2VdfSkpfSxucz1mdW5jdGlvbih0LGUpe3ZhciBuPV90KCkuam91cm5leTtJby5wYXJzZXIueXkuY2xlYXIoKSxJby5wYXJzZXIucGFyc2UodCsiXG4iKSxRby5pbml0KCk7dmFyIHI9T2JqZWN0KGguc2VsZWN0KSgiIyIrZSk7ci5hdHRyKCJ4bWxuczp4bGluayIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiKSxIbyhyKTt2YXIgaT1Jby5wYXJzZXIueXkuZ2V0VGFza3MoKSxhPUlvLnBhcnNlci55eS5nZXRUaXRsZSgpLG89SW8ucGFyc2VyLnl5LmdldEFjdG9ycygpO2Zvcih2YXIgcyBpbiBHbylkZWxldGUgR29bc107dmFyIGM9MDtvLmZvckVhY2goKGZ1bmN0aW9uKHQpe0dvW3RdPW4uYWN0b3JDb2xvdXJzW2Mlbi5hY3RvckNvbG91cnMubGVuZ3RoXSxjKyt9KSksZnVuY3Rpb24odCl7dmFyIGU9X3QoKS5qb3VybmV5LG49NjA7T2JqZWN0LmtleXMoR28pLmZvckVhY2goKGZ1bmN0aW9uKHIpe3ZhciBpPUdvW3JdOyRvKHQse2N4OjIwLGN5Om4scjo3LGZpbGw6aSxzdHJva2U6IiMwMDAifSk7dmFyIGE9e3g6NDAseTpuKzcsZmlsbDoiIzY2NiIsdGV4dDpyLHRleHRNYXJnaW46NXxlLmJveFRleHRNYXJnaW59O1dvKHQsYSksbis9MjB9KSl9KHIpLFFvLmluc2VydCgwLDAsWm8sNTAqT2JqZWN0LmtleXMoR28pLmxlbmd0aCksdHMocixpLDApO3ZhciB1PVFvLmdldEJvdW5kcygpO2EmJnIuYXBwZW5kKCJ0ZXh0IikudGV4dChhKS5hdHRyKCJ4IixabykuYXR0cigiZm9udC1zaXplIiwiNGV4IikuYXR0cigiZm9udC13ZWlnaHQiLCJib2xkIikuYXR0cigieSIsMjUpO3ZhciBsPXUuc3RvcHktdS5zdGFydHkrMipuLmRpYWdyYW1NYXJnaW5ZLGY9Wm8rdS5zdG9weCsyKm4uZGlhZ3JhbU1hcmdpblg7VyhyLGwsZixuLnVzZU1heFdpZHRoKSxyLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixabykuYXR0cigieTEiLDQqbi5oZWlnaHQpLmF0dHIoIngyIixmLVpvLTQpLmF0dHIoInkyIiw0Km4uaGVpZ2h0KS5hdHRyKCJzdHJva2Utd2lkdGgiLDQpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigibWFya2VyLWVuZCIsInVybCgjYXJyb3doZWFkKSIpO3ZhciBkPWE/NzA6MDtyLmF0dHIoInZpZXdCb3giLCIiLmNvbmNhdCh1LnN0YXJ0eCwiIC0yNSAiKS5jb25jYXQoZiwiICIpLmNvbmNhdChsK2QpKSxyLmF0dHIoInByZXNlcnZlQXNwZWN0UmF0aW8iLCJ4TWluWU1pbiBtZWV0Iiksci5hdHRyKCJoZWlnaHQiLGwrZCsyNSl9LHJzPXt9LGlzPWZ1bmN0aW9uKHQpe09iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JzW2VdPXRbZV19KSl9LGFzPWZ1bmN0aW9uKHQsZSl7dHJ5e2MuZGVidWcoIlJlbmVyaW5nIHN2ZyBmb3Igc3ludGF4IGVycm9yXG4iKTt2YXIgbj1PYmplY3QoaC5zZWxlY3QpKCIjIit0KSxyPW4uYXBwZW5kKCJnIik7ci5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQxMS4zMTMsMTIzLjMxM2M2LjI1LTYuMjUgNi4yNS0xNi4zNzUgMC0yMi42MjVzLTE2LjM3NS02LjI1LTIyLjYyNSwwbC0zMiwzMi05LjM3NSw5LjM3NS0yMC42ODgtMjAuNjg4Yy0xMi40ODQtMTIuNS0zMi43NjYtMTIuNS00NS4yNSwwbC0xNiwxNmMtMS4yNjEsMS4yNjEtMi4zMDQsMi42NDgtMy4zMSw0LjA1MS0yMS43MzktOC41NjEtNDUuMzI0LTEzLjQyNi03MC4wNjUtMTMuNDI2LTEwNS44NjcsMC0xOTIsODYuMTMzLTE5MiwxOTJzODYuMTMzLDE5MiAxOTIsMTkyIDE5Mi04Ni4xMzMgMTkyLTE5MmMwLTI0Ljc0MS00Ljg2NC00OC4zMjctMTMuNDI2LTcwLjA2NSAxLjQwMi0xLjAwNyAyLjc5LTIuMDQ5IDQuMDUxLTMuMzFsMTYtMTZjMTIuNS0xMi40OTIgMTIuNS0zMi43NTggMC00NS4yNWwtMjAuNjg4LTIwLjY4OCA5LjM3NS05LjM3NSAzMi4wMDEtMzEuOTk5em0tMjE5LjMxMywxMDAuNjg3Yy01Mi45MzgsMC05Niw0My4wNjMtOTYsOTYgMCw4LjgzNi03LjE2NCwxNi0xNiwxNnMtMTYtNy4xNjQtMTYtMTZjMC03MC41NzggNTcuNDIyLTEyOCAxMjgtMTI4IDguODM2LDAgMTYsNy4xNjQgMTYsMTZzLTcuMTY0LDE2LTE2LDE2eiIpLHIuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm00NTkuMDIsMTQ4Ljk4Yy02LjI1LTYuMjUtMTYuMzc1LTYuMjUtMjIuNjI1LDBzLTYuMjUsMTYuMzc1IDAsMjIuNjI1bDE2LDE2YzMuMTI1LDMuMTI1IDcuMjE5LDQuNjg4IDExLjMxMyw0LjY4OCA0LjA5NCwwIDguMTg4LTEuNTYzIDExLjMxMy00LjY4OCA2LjI1LTYuMjUgNi4yNS0xNi4zNzUgMC0yMi42MjVsLTE2LjAwMS0xNnoiKSxyLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtMzQwLjM5NSw3NS42MDVjMy4xMjUsMy4xMjUgNy4yMTksNC42ODggMTEuMzEzLDQuNjg4IDQuMDk0LDAgOC4xODgtMS41NjMgMTEuMzEzLTQuNjg4IDYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNWwtMTYtMTZjLTYuMjUtNi4yNS0xNi4zNzUtNi4yNS0yMi42MjUsMHMtNi4yNSwxNi4zNzUgMCwyMi42MjVsMTUuOTk5LDE2eiIpLHIuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm00MDAsNjRjOC44NDQsMCAxNi03LjE2NCAxNi0xNnYtMzJjMC04LjgzNi03LjE1Ni0xNi0xNi0xNi04Ljg0NCwwLTE2LDcuMTY0LTE2LDE2djMyYzAsOC44MzYgNy4xNTYsMTYgMTYsMTZ6Iiksci5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQ5Niw5Ni41ODZoLTMyYy04Ljg0NCwwLTE2LDcuMTY0LTE2LDE2IDAsOC44MzYgNy4xNTYsMTYgMTYsMTZoMzJjOC44NDQsMCAxNi03LjE2NCAxNi0xNiAwLTguODM2LTcuMTU2LTE2LTE2LTE2eiIpLHIuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm00MzYuOTgsNzUuNjA1YzMuMTI1LDMuMTI1IDcuMjE5LDQuNjg4IDExLjMxMyw0LjY4OCA0LjA5NCwwIDguMTg4LTEuNTYzIDExLjMxMy00LjY4OGwzMi0zMmM2LjI1LTYuMjUgNi4yNS0xNi4zNzUgMC0yMi42MjVzLTE2LjM3NS02LjI1LTIyLjYyNSwwbC0zMiwzMmMtNi4yNTEsNi4yNS02LjI1MSwxNi4zNzUtMC4wMDEsMjIuNjI1eiIpLHIuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJlcnJvci10ZXh0IikuYXR0cigieCIsMTI0MCkuYXR0cigieSIsMjUwKS5hdHRyKCJmb250LXNpemUiLCIxNTBweCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoIlN5bnRheCBlcnJvciBpbiBncmFwaCIpLHIuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJlcnJvci10ZXh0IikuYXR0cigieCIsMTA1MCkuYXR0cigieSIsNDAwKS5hdHRyKCJmb250LXNpemUiLCIxMDBweCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoIm1lcm1haWQgdmVyc2lvbiAiK2UpLG4uYXR0cigiaGVpZ2h0IiwxMDApLG4uYXR0cigid2lkdGgiLDQwMCksbi5hdHRyKCJ2aWV3Qm94IiwiNzY4IDAgNTEyIDUxMiIpfWNhdGNoKHQpe2MuZXJyb3IoIkVycm9yIHdoaWxlIHJlbmRlcmluZyBpbmZvIGRpYWdyYW0iKSxjLmVycm9yKHQubWVzc2FnZSl9fSxvcz1mdW5jdGlvbih0KXtyZXR1cm4iZy5jbGFzc0dyb3VwIHRleHQge1xuICBmaWxsOiAiLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgZmlsbDogIikuY29uY2F0KHQuY2xhc3NUZXh0LCI7XG4gIHN0cm9rZTogbm9uZTtcbiAgZm9udC1mYW1pbHk6ICIpLmNvbmNhdCh0LmZvbnRGYW1pbHksIjtcbiAgZm9udC1zaXplOiAxMHB4O1xuXG4gIC50aXRsZSB7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGRlcjtcbiAgfVxuXG59XG5cbi5jbGFzc1RpdGxlIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGRlcjtcbn1cbi5ub2RlIHJlY3QsXG4gIC5ub2RlIGNpcmNsZSxcbiAgLm5vZGUgZWxsaXBzZSxcbiAgLm5vZGUgcG9seWdvbixcbiAgLm5vZGUgcGF0aCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQubWFpbkJrZywiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICAgIHN0cm9rZS13aWR0aDogMXB4O1xuICB9XG5cblxuLmRpdmlkZXIge1xuICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgc3Ryb2tlOiAxO1xufVxuXG5nLmNsaWNrYWJsZSB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuZy5jbGFzc0dyb3VwIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xufVxuXG5nLmNsYXNzR3JvdXAgbGluZSB7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbi5jbGFzc0xhYmVsIC5ib3gge1xuICBzdHJva2U6IG5vbmU7XG4gIHN0cm9rZS13aWR0aDogMDtcbiAgZmlsbDogIikuY29uY2F0KHQubWFpbkJrZywiO1xuICBvcGFjaXR5OiAwLjU7XG59XG5cbi5jbGFzc0xhYmVsIC5sYWJlbCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgZm9udC1zaXplOiAxMHB4O1xufVxuXG4ucmVsYXRpb24ge1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiO1xuICBzdHJva2Utd2lkdGg6IDE7XG4gIGZpbGw6IG5vbmU7XG59XG5cbi5kYXNoZWQtbGluZXtcbiAgc3Ryb2tlLWRhc2hhcnJheTogMztcbn1cblxuI2NvbXBvc2l0aW9uU3RhcnQsIC5jb21wb3NpdGlvbiB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4jY29tcG9zaXRpb25FbmQsIC5jb21wb3NpdGlvbiB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4jZGVwZW5kZW5jeVN0YXJ0LCAuZGVwZW5kZW5jeSB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4jZGVwZW5kZW5jeVN0YXJ0LCAuZGVwZW5kZW5jeSB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4jZXh0ZW5zaW9uU3RhcnQsIC5leHRlbnNpb24ge1xuICBmaWxsOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cblxuI2V4dGVuc2lvbkVuZCwgLmV4dGVuc2lvbiB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4jYWdncmVnYXRpb25TdGFydCwgLmFnZ3JlZ2F0aW9uIHtcbiAgZmlsbDogIikuY29uY2F0KHQubWFpbkJrZywiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4jYWdncmVnYXRpb25FbmQsIC5hZ2dyZWdhdGlvbiB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm1haW5Ca2csIiAhaW1wb3J0YW50O1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cblxuLmVkZ2VUZXJtaW5hbHMge1xuICBmb250LXNpemU6IDExcHg7XG59XG5cbiIpfSxzcz1mdW5jdGlvbih0KXtyZXR1cm4iLmxhYmVsIHtcbiAgICBmb250LWZhbWlseTogIi5jb25jYXQodC5mb250RmFtaWx5LCI7XG4gICAgY29sb3I6ICIpLmNvbmNhdCh0Lm5vZGVUZXh0Q29sb3J8fHQudGV4dENvbG9yLCI7XG4gIH1cbiAgLmNsdXN0ZXItbGFiZWwgdGV4dCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGl0bGVDb2xvciwiO1xuICB9XG4gIC5jbHVzdGVyLWxhYmVsIHNwYW4ge1xuICAgIGNvbG9yOiAiKS5jb25jYXQodC50aXRsZUNvbG9yLCI7XG4gIH1cblxuICAubGFiZWwgdGV4dCxzcGFuIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5ub2RlVGV4dENvbG9yfHx0LnRleHRDb2xvciwiO1xuICAgIGNvbG9yOiAiKS5jb25jYXQodC5ub2RlVGV4dENvbG9yfHx0LnRleHRDb2xvciwiO1xuICB9XG5cbiAgLm5vZGUgcmVjdCxcbiAgLm5vZGUgY2lyY2xlLFxuICAubm9kZSBlbGxpcHNlLFxuICAubm9kZSBwb2x5Z29uLFxuICAubm9kZSBwYXRoIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub2RlQm9yZGVyLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAxcHg7XG4gIH1cblxuICAubm9kZSAubGFiZWwge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxuICAubm9kZS5jbGlja2FibGUge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxuXG4gIC5hcnJvd2hlYWRQYXRoIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hcnJvd2hlYWRDb2xvciwiO1xuICB9XG5cbiAgLmVkZ2VQYXRoIC5wYXRoIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiO1xuICAgIHN0cm9rZS13aWR0aDogMS41cHg7XG4gIH1cblxuICAuZmxvd2NoYXJ0LWxpbmsge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gICAgZmlsbDogbm9uZTtcbiAgfVxuXG4gIC5lZGdlTGFiZWwge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICIpLmNvbmNhdCh0LmVkZ2VMYWJlbEJhY2tncm91bmQsIjtcbiAgICByZWN0IHtcbiAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICIpLmNvbmNhdCh0LmVkZ2VMYWJlbEJhY2tncm91bmQsIjtcbiAgICAgIGZpbGw6ICIpLmNvbmNhdCh0LmVkZ2VMYWJlbEJhY2tncm91bmQsIjtcbiAgICB9XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG5cbiAgLmNsdXN0ZXIgcmVjdCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQuY2x1c3RlckJrZywiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuY2x1c3RlckJvcmRlciwiO1xuICAgIHN0cm9rZS13aWR0aDogMXB4O1xuICB9XG5cbiAgLmNsdXN0ZXIgdGV4dCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGl0bGVDb2xvciwiO1xuICB9XG5cbiAgLmNsdXN0ZXIgc3BhbiB7XG4gICAgY29sb3I6ICIpLmNvbmNhdCh0LnRpdGxlQ29sb3IsIjtcbiAgfVxuICAvLyAuY2x1c3RlciBkaXYge1xuICAvLyAgIGNvbG9yOiAiKS5jb25jYXQodC50aXRsZUNvbG9yLCI7XG4gIC8vIH1cblxuICBkaXYubWVybWFpZFRvb2x0aXAge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgbWF4LXdpZHRoOiAyMDBweDtcbiAgICBwYWRkaW5nOiAycHg7XG4gICAgZm9udC1mYW1pbHk6ICIpLmNvbmNhdCh0LmZvbnRGYW1pbHksIjtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgYmFja2dyb3VuZDogIikuY29uY2F0KHQudGVydGlhcnlDb2xvciwiO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICIpLmNvbmNhdCh0LmJvcmRlcjIsIjtcbiAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgei1pbmRleDogMTAwO1xuICB9XG4iKX0sY3M9ZnVuY3Rpb24odCl7cmV0dXJuIlxuZGVmcyAjc3RhdGVkaWFncmFtLWJhcmJFbmQge1xuICAgIGZpbGw6ICIuY29uY2F0KHQudHJhbnNpdGlvbkNvbG9yLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC50cmFuc2l0aW9uQ29sb3IsIjtcbiAgfVxuZy5zdGF0ZUdyb3VwIHRleHQge1xuICBmaWxsOiAiKS5jb25jYXQodC5ub2RlQm9yZGVyLCI7XG4gIHN0cm9rZTogbm9uZTtcbiAgZm9udC1zaXplOiAxMHB4O1xufVxuZy5zdGF0ZUdyb3VwIHRleHQge1xuICBmaWxsOiAiKS5jb25jYXQodC50ZXh0Q29sb3IsIjtcbiAgc3Ryb2tlOiBub25lO1xuICBmb250LXNpemU6IDEwcHg7XG5cbn1cbmcuc3RhdGVHcm91cCAuc3RhdGUtdGl0bGUge1xuICBmb250LXdlaWdodDogYm9sZGVyO1xuICBmaWxsOiAiKS5jb25jYXQodC5zdGF0ZUxhYmVsQ29sb3IsIjtcbn1cblxuZy5zdGF0ZUdyb3VwIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xufVxuXG5nLnN0YXRlR3JvdXAgbGluZSB7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cblxuLnRyYW5zaXRpb24ge1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LnRyYW5zaXRpb25Db2xvciwiO1xuICBzdHJva2Utd2lkdGg6IDE7XG4gIGZpbGw6IG5vbmU7XG59XG5cbi5zdGF0ZUdyb3VwIC5jb21wb3NpdCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmJhY2tncm91bmQsIjtcbiAgYm9yZGVyLWJvdHRvbTogMXB4XG59XG5cbi5zdGF0ZUdyb3VwIC5hbHQtY29tcG9zaXQge1xuICBmaWxsOiAjZTBlMGUwO1xuICBib3JkZXItYm90dG9tOiAxcHhcbn1cblxuLnN0YXRlLW5vdGUge1xuICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vdGVCb3JkZXJDb2xvciwiO1xuICBmaWxsOiAiKS5jb25jYXQodC5ub3RlQmtnQ29sb3IsIjtcblxuICB0ZXh0IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5ub3RlVGV4dENvbG9yLCI7XG4gICAgc3Ryb2tlOiBub25lO1xuICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgfVxufVxuXG4uc3RhdGVMYWJlbCAuYm94IHtcbiAgc3Ryb2tlOiBub25lO1xuICBzdHJva2Utd2lkdGg6IDA7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm1haW5Ca2csIjtcbiAgb3BhY2l0eTogMC41O1xufVxuXG4uZWRnZUxhYmVsIC5sYWJlbCByZWN0IHtcbiAgZmlsbDogIikuY29uY2F0KHQubGFiZWxCYWNrZ3JvdW5kQ29sb3IsIjtcbiAgb3BhY2l0eTogMC41O1xufVxuLmVkZ2VMYWJlbCAubGFiZWwgdGV4dCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LnRyYW5zaXRpb25MYWJlbENvbG9yfHx0LnRlcnRpYXJ5VGV4dENvbG9yLCI7XG59XG4ubGFiZWwgZGl2IC5lZGdlTGFiZWwge1xuICBjb2xvcjogIikuY29uY2F0KHQudHJhbnNpdGlvbkxhYmVsQ29sb3J8fHQudGVydGlhcnlUZXh0Q29sb3IsIjtcbn1cblxuLnN0YXRlTGFiZWwgdGV4dCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LnN0YXRlTGFiZWxDb2xvciwiO1xuICBmb250LXNpemU6IDEwcHg7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4ubm9kZSBjaXJjbGUuc3RhdGUtc3RhcnQge1xuICBmaWxsOiAiKS5jb25jYXQodC5zcGVjaWFsU3RhdGVDb2xvciwiO1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LnNwZWNpYWxTdGF0ZUNvbG9yLCI7XG59XG5cbi5ub2RlIC5mb3JrLWpvaW4ge1xuICBmaWxsOiAiKS5jb25jYXQodC5zcGVjaWFsU3RhdGVDb2xvciwiO1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LnNwZWNpYWxTdGF0ZUNvbG9yLCI7XG59XG5cbi5ub2RlIGNpcmNsZS5zdGF0ZS1lbmQge1xuICBmaWxsOiAiKS5jb25jYXQodC5pbm5lckVuZEJhY2tncm91bmQsIjtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5iYWNrZ3JvdW5kLCI7XG4gIHN0cm9rZS13aWR0aDogMS41XG59XG4uZW5kLXN0YXRlLWlubmVyIHtcbiAgZmlsbDogIikuY29uY2F0KHQuY29tcG9zaXRlQmFja2dyb3VuZHx8dC5iYWNrZ3JvdW5kLCI7XG4gIC8vIHN0cm9rZTogIikuY29uY2F0KHQuYmFja2dyb3VuZCwiO1xuICBzdHJva2Utd2lkdGg6IDEuNVxufVxuXG4ubm9kZSByZWN0IHtcbiAgZmlsbDogIikuY29uY2F0KHQuc3RhdGVCa2d8fHQubWFpbkJrZywiO1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LnN0YXRlQm9yZGVyfHx0Lm5vZGVCb3JkZXIsIjtcbiAgc3Ryb2tlLXdpZHRoOiAxcHg7XG59XG4ubm9kZSBwb2x5Z29uIHtcbiAgZmlsbDogIikuY29uY2F0KHQubWFpbkJrZywiO1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LnN0YXRlQm9yZGVyfHx0Lm5vZGVCb3JkZXIsIjs7XG4gIHN0cm9rZS13aWR0aDogMXB4O1xufVxuI3N0YXRlZGlhZ3JhbS1iYXJiRW5kIHtcbiAgZmlsbDogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG59XG5cbi5zdGF0ZWRpYWdyYW0tY2x1c3RlciByZWN0IHtcbiAgZmlsbDogIikuY29uY2F0KHQuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQuc3RhdGVCb3JkZXJ8fHQubm9kZUJvcmRlciwiO1xuICBzdHJva2Utd2lkdGg6IDFweDtcbn1cblxuLmNsdXN0ZXItbGFiZWwsIC5ub2RlTGFiZWwge1xuICBjb2xvcjogIikuY29uY2F0KHQuc3RhdGVMYWJlbENvbG9yLCI7XG59XG5cbi5zdGF0ZWRpYWdyYW0tY2x1c3RlciByZWN0Lm91dGVyIHtcbiAgcng6IDVweDtcbiAgcnk6IDVweDtcbn1cbi5zdGF0ZWRpYWdyYW0tc3RhdGUgLmRpdmlkZXIge1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LnN0YXRlQm9yZGVyfHx0Lm5vZGVCb3JkZXIsIjtcbn1cblxuLnN0YXRlZGlhZ3JhbS1zdGF0ZSAudGl0bGUtc3RhdGUge1xuICByeDogNXB4O1xuICByeTogNXB4O1xufVxuLnN0YXRlZGlhZ3JhbS1jbHVzdGVyLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIC5pbm5lciB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmNvbXBvc2l0ZUJhY2tncm91bmR8fHQuYmFja2dyb3VuZCwiO1xufVxuLnN0YXRlZGlhZ3JhbS1jbHVzdGVyLnN0YXRlZGlhZ3JhbS1jbHVzdGVyLWFsdCAuaW5uZXIge1xuICBmaWxsOiAiKS5jb25jYXQodC5hbHRCYWNrZ3JvdW5kP3QuYWx0QmFja2dyb3VuZDoiI2VmZWZlZiIsIjtcbn1cblxuLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIC5pbm5lciB7XG4gIHJ4OjA7XG4gIHJ5OjA7XG59XG5cbi5zdGF0ZWRpYWdyYW0tc3RhdGUgcmVjdC5iYXNpYyB7XG4gIHJ4OiA1cHg7XG4gIHJ5OiA1cHg7XG59XG4uc3RhdGVkaWFncmFtLXN0YXRlIHJlY3QuZGl2aWRlciB7XG4gIHN0cm9rZS1kYXNoYXJyYXk6IDEwLDEwO1xuICBmaWxsOiAiKS5jb25jYXQodC5hbHRCYWNrZ3JvdW5kP3QuYWx0QmFja2dyb3VuZDoiI2VmZWZlZiIsIjtcbn1cblxuLm5vdGUtZWRnZSB7XG4gIHN0cm9rZS1kYXNoYXJyYXk6IDU7XG59XG5cbi5zdGF0ZWRpYWdyYW0tbm90ZSByZWN0IHtcbiAgZmlsbDogIikuY29uY2F0KHQubm90ZUJrZ0NvbG9yLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubm90ZUJvcmRlckNvbG9yLCI7XG4gIHN0cm9rZS13aWR0aDogMXB4O1xuICByeDogMDtcbiAgcnk6IDA7XG59XG4uc3RhdGVkaWFncmFtLW5vdGUgcmVjdCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm5vdGVCa2dDb2xvciwiO1xuICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vdGVCb3JkZXJDb2xvciwiO1xuICBzdHJva2Utd2lkdGg6IDFweDtcbiAgcng6IDA7XG4gIHJ5OiAwO1xufVxuXG4uc3RhdGVkaWFncmFtLW5vdGUgdGV4dCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm5vdGVUZXh0Q29sb3IsIjtcbn1cblxuLnN0YXRlZGlhZ3JhbS1ub3RlIC5ub2RlTGFiZWwge1xuICBjb2xvcjogIikuY29uY2F0KHQubm90ZVRleHRDb2xvciwiO1xufVxuLnN0YXRlZGlhZ3JhbSAuZWRnZUxhYmVsIHtcbiAgY29sb3I6IHJlZDsgLy8gIikuY29uY2F0KHQubm90ZVRleHRDb2xvciwiO1xufVxuXG4jZGVwZW5kZW5jeVN0YXJ0LCAjZGVwZW5kZW5jeUVuZCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiO1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiO1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG4iKX0sdXM9e2Zsb3djaGFydDpzcywiZmxvd2NoYXJ0LXYyIjpzcyxzZXF1ZW5jZTpmdW5jdGlvbih0KXtyZXR1cm4iLmFjdG9yIHtcbiAgICBzdHJva2U6ICIuY29uY2F0KHQuYWN0b3JCb3JkZXIsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RvckJrZywiO1xuICB9XG5cbiAgdGV4dC5hY3RvciA+IHRzcGFuIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RvclRleHRDb2xvciwiO1xuICAgIHN0cm9rZTogbm9uZTtcbiAgfVxuXG4gIC5hY3Rvci1saW5lIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmFjdG9yTGluZUNvbG9yLCI7XG4gIH1cblxuICAubWVzc2FnZUxpbmUwIHtcbiAgICBzdHJva2Utd2lkdGg6IDEuNTtcbiAgICBzdHJva2UtZGFzaGFycmF5OiBub25lO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuc2lnbmFsQ29sb3IsIjtcbiAgfVxuXG4gIC5tZXNzYWdlTGluZTEge1xuICAgIHN0cm9rZS13aWR0aDogMS41O1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5zaWduYWxDb2xvciwiO1xuICB9XG5cbiAgI2Fycm93aGVhZCBwYXRoIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5zaWduYWxDb2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuc2lnbmFsQ29sb3IsIjtcbiAgfVxuXG4gIC5zZXF1ZW5jZU51bWJlciB7XG4gICAgZmlsbDogIikuY29uY2F0KHQuc2VxdWVuY2VOdW1iZXJDb2xvciwiO1xuICB9XG5cbiAgI3NlcXVlbmNlbnVtYmVyIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5zaWduYWxDb2xvciwiO1xuICB9XG5cbiAgI2Nyb3NzaGVhZCBwYXRoIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5zaWduYWxDb2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuc2lnbmFsQ29sb3IsIjtcbiAgfVxuXG4gIC5tZXNzYWdlVGV4dCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQuc2lnbmFsVGV4dENvbG9yLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5zaWduYWxUZXh0Q29sb3IsIjtcbiAgfVxuXG4gIC5sYWJlbEJveCB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5sYWJlbEJveEJvcmRlckNvbG9yLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQubGFiZWxCb3hCa2dDb2xvciwiO1xuICB9XG5cbiAgLmxhYmVsVGV4dCwgLmxhYmVsVGV4dCA+IHRzcGFuIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5sYWJlbFRleHRDb2xvciwiO1xuICAgIHN0cm9rZTogbm9uZTtcbiAgfVxuXG4gIC5sb29wVGV4dCwgLmxvb3BUZXh0ID4gdHNwYW4ge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0Lmxvb3BUZXh0Q29sb3IsIjtcbiAgICBzdHJva2U6IG5vbmU7XG4gIH1cblxuICAubG9vcExpbmUge1xuICAgIHN0cm9rZS13aWR0aDogMnB4O1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5sYWJlbEJveEJvcmRlckNvbG9yLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQubGFiZWxCb3hCb3JkZXJDb2xvciwiO1xuICB9XG5cbiAgLm5vdGUge1xuICAgIC8vc3Ryb2tlOiAjZGVjYzkzO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubm90ZUJvcmRlckNvbG9yLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQubm90ZUJrZ0NvbG9yLCI7XG4gIH1cblxuICAubm90ZVRleHQsIC5ub3RlVGV4dCA+IHRzcGFuIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5ub3RlVGV4dENvbG9yLCI7XG4gICAgc3Ryb2tlOiBub25lO1xuICB9XG5cbiAgLmFjdGl2YXRpb24wIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RpdmF0aW9uQmtnQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmFjdGl2YXRpb25Cb3JkZXJDb2xvciwiO1xuICB9XG5cbiAgLmFjdGl2YXRpb24xIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RpdmF0aW9uQmtnQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmFjdGl2YXRpb25Cb3JkZXJDb2xvciwiO1xuICB9XG5cbiAgLmFjdGl2YXRpb24yIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RpdmF0aW9uQmtnQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmFjdGl2YXRpb25Cb3JkZXJDb2xvciwiO1xuICB9XG4iKX0sZ2FudHQ6ZnVuY3Rpb24odCl7cmV0dXJuJ1xuICAubWVybWFpZC1tYWluLWZvbnQge1xuICAgIGZvbnQtZmFtaWx5OiAidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpO1xuICB9XG5cbiAgLnNlY3Rpb24ge1xuICAgIHN0cm9rZTogbm9uZTtcbiAgICBvcGFjaXR5OiAwLjI7XG4gIH1cblxuICAuc2VjdGlvbjAge1xuICAgIGZpbGw6ICcuY29uY2F0KHQuc2VjdGlvbkJrZ0NvbG9yLCI7XG4gIH1cblxuICAuc2VjdGlvbjIge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnNlY3Rpb25Ca2dDb2xvcjIsIjtcbiAgfVxuXG4gIC5zZWN0aW9uMSxcbiAgLnNlY3Rpb24zIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hbHRTZWN0aW9uQmtnQ29sb3IsIjtcbiAgICBvcGFjaXR5OiAwLjI7XG4gIH1cblxuICAuc2VjdGlvblRpdGxlMCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGl0bGVDb2xvciwiO1xuICB9XG5cbiAgLnNlY3Rpb25UaXRsZTEge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRpdGxlQ29sb3IsIjtcbiAgfVxuXG4gIC5zZWN0aW9uVGl0bGUyIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50aXRsZUNvbG9yLCI7XG4gIH1cblxuICAuc2VjdGlvblRpdGxlMyB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGl0bGVDb2xvciwiO1xuICB9XG5cbiAgLnNlY3Rpb25UaXRsZSB7XG4gICAgdGV4dC1hbmNob3I6IHN0YXJ0O1xuICAgIC8vIGZvbnQtc2l6ZTogIikuY29uY2F0KHQuZ2FudHRGb250U2l6ZSwiO1xuICAgIC8vIHRleHQtaGVpZ2h0OiAxNHB4O1xuICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpO1xuXG4gIH1cblxuXG4gIC8qIEdyaWQgYW5kIGF4aXMgKi9cblxuICAuZ3JpZCAudGljayB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5ncmlkQ29sb3IsIjtcbiAgICBvcGFjaXR5OiAwLjg7XG4gICAgc2hhcGUtcmVuZGVyaW5nOiBjcmlzcEVkZ2VzO1xuICAgIHRleHQge1xuICAgICAgZm9udC1mYW1pbHk6ICIpLmNvbmNhdCh0LmZvbnRGYW1pbHksIjtcbiAgICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRleHRDb2xvciwiO1xuICAgIH1cbiAgfVxuXG4gIC5ncmlkIHBhdGgge1xuICAgIHN0cm9rZS13aWR0aDogMDtcbiAgfVxuXG5cbiAgLyogVG9kYXkgbGluZSAqL1xuXG4gIC50b2RheSB7XG4gICAgZmlsbDogbm9uZTtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnRvZGF5TGluZUNvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAycHg7XG4gIH1cblxuXG4gIC8qIFRhc2sgc3R5bGluZyAqL1xuXG4gIC8qIERlZmF1bHQgdGFzayAqL1xuXG4gIC50YXNrIHtcbiAgICBzdHJva2Utd2lkdGg6IDI7XG4gIH1cblxuICAudGFza1RleHQge1xuICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7XG4gICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG4gIH1cblxuICAvLyAudGFza1RleHQ6bm90KFtmb250LXNpemVdKSB7XG4gIC8vICAgZm9udC1zaXplOiAiKS5jb25jYXQodC5nYW50dEZvbnRTaXplLCI7XG4gIC8vIH1cblxuICAudGFza1RleHRPdXRzaWRlUmlnaHQge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRhc2tUZXh0RGFya0NvbG9yLCI7XG4gICAgdGV4dC1hbmNob3I6IHN0YXJ0O1xuICAgIC8vIGZvbnQtc2l6ZTogIikuY29uY2F0KHQuZ2FudHRGb250U2l6ZSwiO1xuICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpO1xuXG4gIH1cblxuICAudGFza1RleHRPdXRzaWRlTGVmdCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHREYXJrQ29sb3IsIjtcbiAgICB0ZXh0LWFuY2hvcjogZW5kO1xuICAgIC8vIGZvbnQtc2l6ZTogIikuY29uY2F0KHQuZ2FudHRGb250U2l6ZSwiO1xuICB9XG5cbiAgLyogU3BlY2lhbCBjYXNlIGNsaWNrYWJsZSAqL1xuICAudGFzay5jbGlja2FibGUge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxuICAudGFza1RleHQuY2xpY2thYmxlIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHRDbGlja2FibGVDb2xvciwiICFpbXBvcnRhbnQ7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIH1cblxuICAudGFza1RleHRPdXRzaWRlTGVmdC5jbGlja2FibGUge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dENsaWNrYWJsZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxuXG4gIC50YXNrVGV4dE91dHNpZGVSaWdodC5jbGlja2FibGUge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dENsaWNrYWJsZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxuXG4gIC8qIFNwZWNpZmljIHRhc2sgc2V0dGluZ3MgZm9yIHRoZSBzZWN0aW9ucyovXG5cbiAgLnRhc2tUZXh0MCxcbiAgLnRhc2tUZXh0MSxcbiAgLnRhc2tUZXh0MixcbiAgLnRhc2tUZXh0MyB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHRDb2xvciwiO1xuICB9XG5cbiAgLnRhc2swLFxuICAudGFzazEsXG4gIC50YXNrMixcbiAgLnRhc2szIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrQmtnQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnRhc2tCb3JkZXJDb2xvciwiO1xuICB9XG5cbiAgLnRhc2tUZXh0T3V0c2lkZTAsXG4gIC50YXNrVGV4dE91dHNpZGUyXG4gIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dE91dHNpZGVDb2xvciwiO1xuICB9XG5cbiAgLnRhc2tUZXh0T3V0c2lkZTEsXG4gIC50YXNrVGV4dE91dHNpZGUzIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dE91dHNpZGVDb2xvciwiO1xuICB9XG5cblxuICAvKiBBY3RpdmUgdGFzayAqL1xuXG4gIC5hY3RpdmUwLFxuICAuYWN0aXZlMSxcbiAgLmFjdGl2ZTIsXG4gIC5hY3RpdmUzIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RpdmVUYXNrQmtnQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmFjdGl2ZVRhc2tCb3JkZXJDb2xvciwiO1xuICB9XG5cbiAgLmFjdGl2ZVRleHQwLFxuICAuYWN0aXZlVGV4dDEsXG4gIC5hY3RpdmVUZXh0MixcbiAgLmFjdGl2ZVRleHQzIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dERhcmtDb2xvciwiICFpbXBvcnRhbnQ7XG4gIH1cblxuXG4gIC8qIENvbXBsZXRlZCB0YXNrICovXG5cbiAgLmRvbmUwLFxuICAuZG9uZTEsXG4gIC5kb25lMixcbiAgLmRvbmUzIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmRvbmVUYXNrQm9yZGVyQ29sb3IsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5kb25lVGFza0JrZ0NvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAyO1xuICB9XG5cbiAgLmRvbmVUZXh0MCxcbiAgLmRvbmVUZXh0MSxcbiAgLmRvbmVUZXh0MixcbiAgLmRvbmVUZXh0MyB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHREYXJrQ29sb3IsIiAhaW1wb3J0YW50O1xuICB9XG5cblxuICAvKiBUYXNrcyBvbiB0aGUgY3JpdGljYWwgbGluZSAqL1xuXG4gIC5jcml0MCxcbiAgLmNyaXQxLFxuICAuY3JpdDIsXG4gIC5jcml0MyB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5jcml0Qm9yZGVyQ29sb3IsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5jcml0QmtnQ29sb3IsIjtcbiAgICBzdHJva2Utd2lkdGg6IDI7XG4gIH1cblxuICAuYWN0aXZlQ3JpdDAsXG4gIC5hY3RpdmVDcml0MSxcbiAgLmFjdGl2ZUNyaXQyLFxuICAuYWN0aXZlQ3JpdDMge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuY3JpdEJvcmRlckNvbG9yLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQuYWN0aXZlVGFza0JrZ0NvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAyO1xuICB9XG5cbiAgLmRvbmVDcml0MCxcbiAgLmRvbmVDcml0MSxcbiAgLmRvbmVDcml0MixcbiAgLmRvbmVDcml0MyB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5jcml0Qm9yZGVyQ29sb3IsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5kb25lVGFza0JrZ0NvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAyO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBzaGFwZS1yZW5kZXJpbmc6IGNyaXNwRWRnZXM7XG4gIH1cblxuICAubWlsZXN0b25lIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZykgc2NhbGUoMC44LDAuOCk7XG4gIH1cblxuICAubWlsZXN0b25lVGV4dCB7XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xuICB9XG4gIC5kb25lQ3JpdFRleHQwLFxuICAuZG9uZUNyaXRUZXh0MSxcbiAgLmRvbmVDcml0VGV4dDIsXG4gIC5kb25lQ3JpdFRleHQzIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dERhcmtDb2xvciwiICFpbXBvcnRhbnQ7XG4gIH1cblxuICAuYWN0aXZlQ3JpdFRleHQwLFxuICAuYWN0aXZlQ3JpdFRleHQxLFxuICAuYWN0aXZlQ3JpdFRleHQyLFxuICAuYWN0aXZlQ3JpdFRleHQzIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dERhcmtDb2xvciwiICFpbXBvcnRhbnQ7XG4gIH1cblxuICAudGl0bGVUZXh0IHtcbiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlO1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50ZXh0Q29sb3IsIiAgICA7XG4gICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG4gIH1cbiIpfSxjbGFzc0RpYWdyYW06b3MsImNsYXNzRGlhZ3JhbS12MiI6b3MsY2xhc3M6b3Msc3RhdGVEaWFncmFtOmNzLHN0YXRlOmNzLGdpdDpmdW5jdGlvbigpe3JldHVybiJcbiAgLmNvbW1pdC1pZCxcbiAgLmNvbW1pdC1tc2csXG4gIC5icmFuY2gtbGFiZWwge1xuICAgIGZpbGw6IGxpZ2h0Z3JleTtcbiAgICBjb2xvcjogbGlnaHRncmV5O1xuICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpO1xuICB9XG4ifSxpbmZvOmZ1bmN0aW9uKCl7cmV0dXJuIiJ9LHBpZTpmdW5jdGlvbih0KXtyZXR1cm4iXG4gIC5waWVDaXJjbGV7XG4gICAgc3Ryb2tlOiAiLmNvbmNhdCh0LnBpZVN0cm9rZUNvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoIDogIikuY29uY2F0KHQucGllU3Ryb2tlV2lkdGgsIjtcbiAgICBvcGFjaXR5IDogIikuY29uY2F0KHQucGllT3BhY2l0eSwiO1xuICB9XG4gIC5waWVUaXRsZVRleHQge1xuICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7XG4gICAgZm9udC1zaXplOiAiKS5jb25jYXQodC5waWVUaXRsZVRleHRTaXplLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQucGllVGl0bGVUZXh0Q29sb3IsIjtcbiAgICBmb250LWZhbWlseTogIikuY29uY2F0KHQuZm9udEZhbWlseSwiO1xuICB9XG4gIC5zbGljZSB7XG4gICAgZm9udC1mYW1pbHk6ICIpLmNvbmNhdCh0LmZvbnRGYW1pbHksIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5waWVTZWN0aW9uVGV4dENvbG9yLCI7XG4gICAgZm9udC1zaXplOiIpLmNvbmNhdCh0LnBpZVNlY3Rpb25UZXh0U2l6ZSwiO1xuICAgIC8vIGZpbGw6IHdoaXRlO1xuICB9XG4gIC5sZWdlbmQgdGV4dCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQucGllTGVnZW5kVGV4dENvbG9yLCI7XG4gICAgZm9udC1mYW1pbHk6ICIpLmNvbmNhdCh0LmZvbnRGYW1pbHksIjtcbiAgICBmb250LXNpemU6ICIpLmNvbmNhdCh0LnBpZUxlZ2VuZFRleHRTaXplLCI7XG4gIH1cbiIpfSxlcjpmdW5jdGlvbih0KXtyZXR1cm4iXG4gIC5lbnRpdHlCb3gge1xuICAgIGZpbGw6ICIuY29uY2F0KHQubWFpbkJrZywiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICB9XG5cbiAgLmF0dHJpYnV0ZUJveE9kZCB7XG4gICAgZmlsbDogI2ZmZmZmZjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgfVxuXG4gIC5hdHRyaWJ1dGVCb3hFdmVuIHtcbiAgICBmaWxsOiAjZjJmMmYyO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICB9XG5cbiAgLnJlbGF0aW9uc2hpcExhYmVsQm94IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50ZXJ0aWFyeUNvbG9yLCI7XG4gICAgb3BhY2l0eTogMC43O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICIpLmNvbmNhdCh0LnRlcnRpYXJ5Q29sb3IsIjtcbiAgICAgIHJlY3Qge1xuICAgICAgICBvcGFjaXR5OiAwLjU7XG4gICAgICB9XG4gIH1cblxuICAgIC5yZWxhdGlvbnNoaXBMaW5lIHtcbiAgICAgIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gICAgfVxuIil9LGpvdXJuZXk6ZnVuY3Rpb24odCl7cmV0dXJuIi5sYWJlbCB7XG4gICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG4gICAgY29sb3I6ICIuY29uY2F0KHQudGV4dENvbG9yLCI7XG4gIH1cbiAgLm1vdXRoIHtcbiAgICBzdHJva2U6ICM2NjY7XG4gIH1cblxuICBsaW5lIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnRleHRDb2xvciwiXG4gIH1cblxuICAubGVnZW5kIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50ZXh0Q29sb3IsIjtcbiAgfVxuXG4gIC5sYWJlbCB0ZXh0IHtcbiAgICBmaWxsOiAjMzMzO1xuICB9XG4gIC5sYWJlbCB7XG4gICAgY29sb3I6ICIpLmNvbmNhdCh0LnRleHRDb2xvciwiXG4gIH1cblxuICAuZmFjZSB7XG4gICAgZmlsbDogI0ZGRjhEQztcbiAgICBzdHJva2U6ICM5OTk7XG4gIH1cblxuICAubm9kZSByZWN0LFxuICAubm9kZSBjaXJjbGUsXG4gIC5ub2RlIGVsbGlwc2UsXG4gIC5ub2RlIHBvbHlnb24sXG4gIC5ub2RlIHBhdGgge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0Lm1haW5Ca2csIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgICBzdHJva2Utd2lkdGg6IDFweDtcbiAgfVxuXG4gIC5ub2RlIC5sYWJlbCB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG4gIC5ub2RlLmNsaWNrYWJsZSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5cbiAgLmFycm93aGVhZFBhdGgge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFycm93aGVhZENvbG9yLCI7XG4gIH1cblxuICAuZWRnZVBhdGggLnBhdGgge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAxLjVweDtcbiAgfVxuXG4gIC5mbG93Y2hhcnQtbGluayB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIjtcbiAgICBmaWxsOiBub25lO1xuICB9XG5cbiAgLmVkZ2VMYWJlbCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIikuY29uY2F0KHQuZWRnZUxhYmVsQmFja2dyb3VuZCwiO1xuICAgIHJlY3Qge1xuICAgICAgb3BhY2l0eTogMC41O1xuICAgIH1cbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cblxuICAuY2x1c3RlciByZWN0IHtcbiAgfVxuXG4gIC5jbHVzdGVyIHRleHQge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRpdGxlQ29sb3IsIjtcbiAgfVxuXG4gIGRpdi5tZXJtYWlkVG9vbHRpcCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtYXgtd2lkdGg6IDIwMHB4O1xuICAgIHBhZGRpbmc6IDJweDtcbiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgYmFja2dyb3VuZDogIikuY29uY2F0KHQudGVydGlhcnlDb2xvciwiO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICIpLmNvbmNhdCh0LmJvcmRlcjIsIjtcbiAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgei1pbmRleDogMTAwO1xuICB9XG5cbiAgLnRhc2stdHlwZS0wLCAuc2VjdGlvbi10eXBlLTAgIHtcbiAgICAiKS5jb25jYXQodC5maWxsVHlwZTA/ImZpbGw6ICIuY29uY2F0KHQuZmlsbFR5cGUwKToiIiwiO1xuICB9XG4gIC50YXNrLXR5cGUtMSwgLnNlY3Rpb24tdHlwZS0xICB7XG4gICAgIikuY29uY2F0KHQuZmlsbFR5cGUwPyJmaWxsOiAiLmNvbmNhdCh0LmZpbGxUeXBlMSk6IiIsIjtcbiAgfVxuICAudGFzay10eXBlLTIsIC5zZWN0aW9uLXR5cGUtMiAge1xuICAgICIpLmNvbmNhdCh0LmZpbGxUeXBlMD8iZmlsbDogIi5jb25jYXQodC5maWxsVHlwZTIpOiIiLCI7XG4gIH1cbiAgLnRhc2stdHlwZS0zLCAuc2VjdGlvbi10eXBlLTMgIHtcbiAgICAiKS5jb25jYXQodC5maWxsVHlwZTA/ImZpbGw6ICIuY29uY2F0KHQuZmlsbFR5cGUzKToiIiwiO1xuICB9XG4gIC50YXNrLXR5cGUtNCwgLnNlY3Rpb24tdHlwZS00ICB7XG4gICAgIikuY29uY2F0KHQuZmlsbFR5cGUwPyJmaWxsOiAiLmNvbmNhdCh0LmZpbGxUeXBlNCk6IiIsIjtcbiAgfVxuICAudGFzay10eXBlLTUsIC5zZWN0aW9uLXR5cGUtNSAge1xuICAgICIpLmNvbmNhdCh0LmZpbGxUeXBlMD8iZmlsbDogIi5jb25jYXQodC5maWxsVHlwZTUpOiIiLCI7XG4gIH1cbiAgLnRhc2stdHlwZS02LCAuc2VjdGlvbi10eXBlLTYgIHtcbiAgICAiKS5jb25jYXQodC5maWxsVHlwZTA/ImZpbGw6ICIuY29uY2F0KHQuZmlsbFR5cGU2KToiIiwiO1xuICB9XG4gIC50YXNrLXR5cGUtNywgLnNlY3Rpb24tdHlwZS03ICB7XG4gICAgIikuY29uY2F0KHQuZmlsbFR5cGUwPyJmaWxsOiAiLmNvbmNhdCh0LmZpbGxUeXBlNyk6IiIsIjtcbiAgfVxuIil9LHJlcXVpcmVtZW50OmZ1bmN0aW9uKHQpe3JldHVybiJcblxuICBtYXJrZXIge1xuICAgIGZpbGw6ICIuY29uY2F0KHQucmVsYXRpb25Db2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQucmVsYXRpb25Db2xvciwiO1xuICB9XG5cbiAgbWFya2VyLmNyb3NzIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiO1xuICB9XG5cbiAgc3ZnIHtcbiAgICBmb250LWZhbWlseTogIikuY29uY2F0KHQuZm9udEZhbWlseSwiO1xuICAgIGZvbnQtc2l6ZTogIikuY29uY2F0KHQuZm9udFNpemUsIjtcbiAgfVxuXG4gIC5yZXFCb3gge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnJlcXVpcmVtZW50QmFja2dyb3VuZCwiO1xuICAgIGZpbGwtb3BhY2l0eTogMTAwJTtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnJlcXVpcmVtZW50Qm9yZGVyQ29sb3IsIjtcbiAgICBzdHJva2Utd2lkdGg6ICIpLmNvbmNhdCh0LnJlcXVpcmVtZW50Qm9yZGVyU2l6ZSwiO1xuICB9XG4gIFxuICAucmVxVGl0bGUsIC5yZXFMYWJlbHtcbiAgICBmaWxsOiAgIikuY29uY2F0KHQucmVxdWlyZW1lbnRUZXh0Q29sb3IsIjtcbiAgfVxuICAucmVxTGFiZWxCb3gge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kLCI7XG4gICAgZmlsbC1vcGFjaXR5OiAxMDAlO1xuICB9XG5cbiAgLnJlcS10aXRsZS1saW5lIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnJlcXVpcmVtZW50Qm9yZGVyQ29sb3IsIjtcbiAgICBzdHJva2Utd2lkdGg6ICIpLmNvbmNhdCh0LnJlcXVpcmVtZW50Qm9yZGVyU2l6ZSwiO1xuICB9XG4gIC5yZWxhdGlvbnNoaXBMaW5lIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnJlbGF0aW9uQ29sb3IsIjtcbiAgICBzdHJva2Utd2lkdGg6IDE7XG4gIH1cbiAgLnJlbGF0aW9uc2hpcExhYmVsIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5yZWxhdGlvbkxhYmVsQ29sb3IsIjtcbiAgfVxuXG4iKX19LGxzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4iIHtcbiAgICBmb250LWZhbWlseTogIi5jb25jYXQobi5mb250RmFtaWx5LCI7XG4gICAgZm9udC1zaXplOiAiKS5jb25jYXQobi5mb250U2l6ZSwiO1xuICAgIGZpbGw6ICIpLmNvbmNhdChuLnRleHRDb2xvciwiXG4gIH1cblxuICAvKiBDbGFzc2VzIGNvbW1vbiBmb3IgbXVsdGlwbGUgZGlhZ3JhbXMgKi9cblxuICAuZXJyb3ItaWNvbiB7XG4gICAgZmlsbDogIikuY29uY2F0KG4uZXJyb3JCa2dDb2xvciwiO1xuICB9XG4gIC5lcnJvci10ZXh0IHtcbiAgICBmaWxsOiAiKS5jb25jYXQobi5lcnJvclRleHRDb2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KG4uZXJyb3JUZXh0Q29sb3IsIjtcbiAgfVxuXG4gIC5lZGdlLXRoaWNrbmVzcy1ub3JtYWwge1xuICAgIHN0cm9rZS13aWR0aDogMnB4O1xuICB9XG4gIC5lZGdlLXRoaWNrbmVzcy10aGljayB7XG4gICAgc3Ryb2tlLXdpZHRoOiAzLjVweFxuICB9XG4gIC5lZGdlLXBhdHRlcm4tc29saWQge1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDA7XG4gIH1cblxuICAuZWRnZS1wYXR0ZXJuLWRhc2hlZHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAzO1xuICB9XG4gIC5lZGdlLXBhdHRlcm4tZG90dGVkIHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAyO1xuICB9XG5cbiAgLm1hcmtlciB7XG4gICAgZmlsbDogIikuY29uY2F0KG4ubGluZUNvbG9yLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQobi5saW5lQ29sb3IsIjtcbiAgfVxuICAubWFya2VyLmNyb3NzIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdChuLmxpbmVDb2xvciwiO1xuICB9XG5cbiAgc3ZnIHtcbiAgICBmb250LWZhbWlseTogIikuY29uY2F0KG4uZm9udEZhbWlseSwiO1xuICAgIGZvbnQtc2l6ZTogIikuY29uY2F0KG4uZm9udFNpemUsIjtcbiAgfVxuXG4gICIpLmNvbmNhdCh1c1t0XShuKSwiXG5cbiAgIikuY29uY2F0KGUsIlxuIil9O2Z1bmN0aW9uIGhzKHQpe3JldHVybihocz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0pKHQpfXZhciBmcz17fSxkcz1mdW5jdGlvbih0LGUsbil7c3dpdGNoKGMuZGVidWcoIkRpcmVjdGl2ZSB0eXBlPSIuY29uY2F0KGUudHlwZSwiIHdpdGggYXJnczoiKSxlLmFyZ3MpLGUudHlwZSl7Y2FzZSJpbml0IjpjYXNlImluaXRpYWxpemUiOlsiY29uZmlnIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7dm9pZCAwIT09ZS5hcmdzW3RdJiYoImZsb3djaGFydC12MiI9PT1uJiYobj0iZmxvd2NoYXJ0IiksZS5hcmdzW25dPWUuYXJnc1t0XSxkZWxldGUgZS5hcmdzW3RdKX0pKSxlLmFyZ3Msd3QoZS5hcmdzKTticmVhaztjYXNlIndyYXAiOmNhc2Uibm93cmFwIjp0JiZ0LnNldFdyYXAmJnQuc2V0V3JhcCgid3JhcCI9PT1lLnR5cGUpO2JyZWFrO2RlZmF1bHQ6Yy53YXJuKCJVbmhhbmRsZWQgZGlyZWN0aXZlOiBzb3VyY2U6ICclJXsiLmNvbmNhdChlLnR5cGUsIjogIikuY29uY2F0KEpTT04uc3RyaW5naWZ5KGUuYXJncz9lLmFyZ3M6e30pLCJ9JSUiKSxlKX19O2Z1bmN0aW9uIHBzKHQpe3hpKHQuZ2l0KSxycih0LmZsb3djaGFydCksdXIodC5mbG93Y2hhcnQpLHZvaWQgMCE9PXQuc2VxdWVuY2VEaWFncmFtJiYkYS5zZXRDb25mKFAodC5zZXF1ZW5jZSx0LnNlcXVlbmNlRGlhZ3JhbSkpLCRhLnNldENvbmYodC5zZXF1ZW5jZSksVnIodC5nYW50dCksaWUodC5jbGFzcyksdm8odC5zdGF0ZSksVG8odC5zdGF0ZSksQWkodC5jbGFzcyksY24odC5lciksZXModC5qb3VybmV5KSxuYSh0LnJlcXVpcmVtZW50KSxpcyh0LmNsYXNzKX1mdW5jdGlvbiB5cygpe312YXIgZ3M9T2JqZWN0LmZyZWV6ZSh7cmVuZGVyOmZ1bmN0aW9uKHQsZSxuLHIpe0V0KCk7dmFyIGk9ZSxhPVYuZGV0ZWN0SW5pdChpKTthJiZ3dChhKTt2YXIgbz1fdCgpO2lmKGUubGVuZ3RoPm8ubWF4VGV4dFNpemUmJihpPSJncmFwaCBUQjthW01heGltdW0gdGV4dCBzaXplIGluIGRpYWdyYW0gZXhjZWVkZWRdO3N0eWxlIGEgZmlsbDojZmFhIiksdm9pZCAwIT09cilyLmlubmVySFRNTD0iIixPYmplY3QoaC5zZWxlY3QpKHIpLmFwcGVuZCgiZGl2IikuYXR0cigiaWQiLCJkIit0KS5hdHRyKCJzdHlsZSIsImZvbnQtZmFtaWx5OiAiK28uZm9udEZhbWlseSkuYXBwZW5kKCJzdmciKS5hdHRyKCJpZCIsdCkuYXR0cigid2lkdGgiLCIxMDAlIikuYXR0cigieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIpLmFwcGVuZCgiZyIpO2Vsc2V7dmFyIHM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodCk7cyYmcy5yZW1vdmUoKTt2YXIgdT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjZCIrdCk7dSYmdS5yZW1vdmUoKSxPYmplY3QoaC5zZWxlY3QpKCJib2R5IikuYXBwZW5kKCJkaXYiKS5hdHRyKCJpZCIsImQiK3QpLmFwcGVuZCgic3ZnIikuYXR0cigiaWQiLHQpLmF0dHIoIndpZHRoIiwiMTAwJSIpLmF0dHIoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciKS5hcHBlbmQoImciKX13aW5kb3cudHh0PWksaT1mdW5jdGlvbih0KXt2YXIgZT10O3JldHVybiBlPShlPShlPWUucmVwbGFjZSgvc3R5bGUuKjpcUyojLio7L2csKGZ1bmN0aW9uKHQpe3JldHVybiB0LnN1YnN0cmluZygwLHQubGVuZ3RoLTEpfSkpKS5yZXBsYWNlKC9jbGFzc0RlZi4qOlxTKiMuKjsvZywoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3Vic3RyaW5nKDAsdC5sZW5ndGgtMSl9KSkpLnJlcGxhY2UoLyNcdys7L2csKGZ1bmN0aW9uKHQpe3ZhciBlPXQuc3Vic3RyaW5nKDEsdC5sZW5ndGgtMSk7cmV0dXJuL15cKz9cZCskLy50ZXN0KGUpPyLvrILCsMKwIitlKyLCtsOfIjoi76yCwrAiK2UrIsK2w58ifSkpfShpKTt2YXIgbD1PYmplY3QoaC5zZWxlY3QpKCIjZCIrdCkubm9kZSgpLGY9Vi5kZXRlY3RUeXBlKGksbykseT1sLmZpcnN0Q2hpbGQsZz15LmZpcnN0Q2hpbGQsdj0iIjtpZih2b2lkIDAhPT1vLnRoZW1lQ1NTJiYodis9IlxuIi5jb25jYXQoby50aGVtZUNTUykpLHZvaWQgMCE9PW8uZm9udEZhbWlseSYmKHYrPSJcbjpyb290IHsgLS1tZXJtYWlkLWZvbnQtZmFtaWx5OiAiLmNvbmNhdChvLmZvbnRGYW1pbHksIn0iKSksdm9pZCAwIT09by5hbHRGb250RmFtaWx5JiYodis9IlxuOnJvb3QgeyAtLW1lcm1haWQtYWx0LWZvbnQtZmFtaWx5OiAiLmNvbmNhdChvLmFsdEZvbnRGYW1pbHksIn0iKSksImZsb3djaGFydCI9PT1mfHwiZmxvd2NoYXJ0LXYyIj09PWZ8fCJncmFwaCI9PT1mKXt2YXIgbT1pcihpKSxiPW8uaHRtbExhYmVsc3x8by5mbG93Y2hhcnQuaHRtbExhYmVscztmb3IodmFyIHggaW4gbSliPyh2Kz0iXG4uIi5jb25jYXQoeCwiID4gKiB7ICIpLmNvbmNhdChtW3hdLnN0eWxlcy5qb2luKCIgIWltcG9ydGFudDsgIiksIiAhaW1wb3J0YW50OyB9Iiksdis9IlxuLiIuY29uY2F0KHgsIiBzcGFuIHsgIikuY29uY2F0KG1beF0uc3R5bGVzLmpvaW4oIiAhaW1wb3J0YW50OyAiKSwiICFpbXBvcnRhbnQ7IH0iKSk6KHYrPSJcbi4iLmNvbmNhdCh4LCIgcGF0aCB7ICIpLmNvbmNhdChtW3hdLnN0eWxlcy5qb2luKCIgIWltcG9ydGFudDsgIiksIiAhaW1wb3J0YW50OyB9Iiksdis9IlxuLiIuY29uY2F0KHgsIiByZWN0IHsgIikuY29uY2F0KG1beF0uc3R5bGVzLmpvaW4oIiAhaW1wb3J0YW50OyAiKSwiICFpbXBvcnRhbnQ7IH0iKSx2Kz0iXG4uIi5jb25jYXQoeCwiIHBvbHlnb24geyAiKS5jb25jYXQobVt4XS5zdHlsZXMuam9pbigiICFpbXBvcnRhbnQ7ICIpLCIgIWltcG9ydGFudDsgfSIpLHYrPSJcbi4iLmNvbmNhdCh4LCIgZWxsaXBzZSB7ICIpLmNvbmNhdChtW3hdLnN0eWxlcy5qb2luKCIgIWltcG9ydGFudDsgIiksIiAhaW1wb3J0YW50OyB9Iiksdis9IlxuLiIuY29uY2F0KHgsIiBjaXJjbGUgeyAiKS5jb25jYXQobVt4XS5zdHlsZXMuam9pbigiICFpbXBvcnRhbnQ7ICIpLCIgIWltcG9ydGFudDsgfSIpLG1beF0udGV4dFN0eWxlcyYmKHYrPSJcbi4iLmNvbmNhdCh4LCIgdHNwYW4geyAiKS5jb25jYXQobVt4XS50ZXh0U3R5bGVzLmpvaW4oIiAhaW1wb3J0YW50OyAiKSwiICFpbXBvcnRhbnQ7IH0iKSkpfXZhciBfPShuZXcgZC5hKSgiIyIuY29uY2F0KHQpLGxzKGYsdixvLnRoZW1lVmFyaWFibGVzKSksaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2suaW5uZXJIVE1MPV8seS5pbnNlcnRCZWZvcmUoayxnKTt0cnl7c3dpdGNoKGYpe2Nhc2UiZ2l0IjpvLmZsb3djaGFydC5hcnJvd01hcmtlckFic29sdXRlPW8uYXJyb3dNYXJrZXJBYnNvbHV0ZSx4aShvLmdpdCksX2koaSx0LCExKTticmVhaztjYXNlImZsb3djaGFydCI6by5mbG93Y2hhcnQuYXJyb3dNYXJrZXJBYnNvbHV0ZT1vLmFycm93TWFya2VyQWJzb2x1dGUscnIoby5mbG93Y2hhcnQpLGFyKGksdCwhMSk7YnJlYWs7Y2FzZSJmbG93Y2hhcnQtdjIiOm8uZmxvd2NoYXJ0LmFycm93TWFya2VyQWJzb2x1dGU9by5hcnJvd01hcmtlckFic29sdXRlLHVyKG8uZmxvd2NoYXJ0KSxscihpLHQsITEpO2JyZWFrO2Nhc2Uic2VxdWVuY2UiOm8uc2VxdWVuY2UuYXJyb3dNYXJrZXJBYnNvbHV0ZT1vLmFycm93TWFya2VyQWJzb2x1dGUsby5zZXF1ZW5jZURpYWdyYW0/KCRhLnNldENvbmYoT2JqZWN0LmFzc2lnbihvLnNlcXVlbmNlLG8uc2VxdWVuY2VEaWFncmFtKSksY29uc29sZS5lcnJvcigiYG1lcm1haWQgY29uZmlnLnNlcXVlbmNlRGlhZ3JhbWAgaGFzIGJlZW4gcmVuYW1lZCB0byBgY29uZmlnLnNlcXVlbmNlYC4gUGxlYXNlIHVwZGF0ZSB5b3VyIG1lcm1haWQgY29uZmlnLiIpKTokYS5zZXRDb25mKG8uc2VxdWVuY2UpLCRhLmRyYXcoaSx0KTticmVhaztjYXNlImdhbnR0IjpvLmdhbnR0LmFycm93TWFya2VyQWJzb2x1dGU9by5hcnJvd01hcmtlckFic29sdXRlLFZyKG8uZ2FudHQpLEhyKGksdCk7YnJlYWs7Y2FzZSJjbGFzcyI6by5jbGFzcy5hcnJvd01hcmtlckFic29sdXRlPW8uYXJyb3dNYXJrZXJBYnNvbHV0ZSxpZShvLmNsYXNzKSxhZShpLHQpO2JyZWFrO2Nhc2UiY2xhc3NEaWFncmFtIjpvLmNsYXNzLmFycm93TWFya2VyQWJzb2x1dGU9by5hcnJvd01hcmtlckFic29sdXRlLHFlKG8uY2xhc3MpLFdlKGksdCk7YnJlYWs7Y2FzZSJzdGF0ZSI6by5jbGFzcy5hcnJvd01hcmtlckFic29sdXRlPW8uYXJyb3dNYXJrZXJBYnNvbHV0ZSx2byhvLnN0YXRlKSxtbyhpLHQpO2JyZWFrO2Nhc2Uic3RhdGVEaWFncmFtIjpvLmNsYXNzLmFycm93TWFya2VyQWJzb2x1dGU9by5hcnJvd01hcmtlckFic29sdXRlLFRvKG8uc3RhdGUpLENvKGksdCk7YnJlYWs7Y2FzZSJpbmZvIjpvLmNsYXNzLmFycm93TWFya2VyQWJzb2x1dGU9by5hcnJvd01hcmtlckFic29sdXRlLEFpKG8uY2xhc3MpLE1pKGksdCxwLnZlcnNpb24pO2JyZWFrO2Nhc2UicGllIjpGaShpLHQscC52ZXJzaW9uKTticmVhaztjYXNlImVyIjpjbihvLmVyKSx1bihpLHQscC52ZXJzaW9uKTticmVhaztjYXNlImpvdXJuZXkiOmVzKG8uam91cm5leSksbnMoaSx0LHAudmVyc2lvbik7YnJlYWs7Y2FzZSJyZXF1aXJlbWVudCI6bmEoby5yZXF1aXJlbWVudCkscmEoaSx0LHAudmVyc2lvbil9fWNhdGNoKGUpe3Rocm93IGFzKHQscC52ZXJzaW9uKSxlfU9iamVjdChoLnNlbGVjdCkoJ1tpZD0iJy5jb25jYXQodCwnIl0nKSkuc2VsZWN0QWxsKCJmb3JlaWdub2JqZWN0ID4gKiIpLmF0dHIoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpO3ZhciB3PU9iamVjdChoLnNlbGVjdCkoIiNkIit0KS5ub2RlKCkuaW5uZXJIVE1MO2lmKGMuZGVidWcoImNuZi5hcnJvd01hcmtlckFic29sdXRlIixvLmFycm93TWFya2VyQWJzb2x1dGUpLG8uYXJyb3dNYXJrZXJBYnNvbHV0ZSYmImZhbHNlIiE9PW8uYXJyb3dNYXJrZXJBYnNvbHV0ZXx8KHc9dy5yZXBsYWNlKC9tYXJrZXItZW5kPSJ1cmxcKC4qPyMvZywnbWFya2VyLWVuZD0idXJsKCMnLCJnIikpLHc9KHc9ZnVuY3Rpb24odCl7dmFyIGU9dDtyZXR1cm4gZT0oZT0oZT1lLnJlcGxhY2UoL++sgsKwwrAvZywoZnVuY3Rpb24oKXtyZXR1cm4iJiMifSkpKS5yZXBsYWNlKC/vrILCsC9nLChmdW5jdGlvbigpe3JldHVybiImIn0pKSkucmVwbGFjZSgvwrbDny9nLChmdW5jdGlvbigpe3JldHVybiI7In0pKX0odykpLnJlcGxhY2UoLzxicj4vZywiPGJyLz4iKSx2b2lkIDAhPT1uKXN3aXRjaChmKXtjYXNlImZsb3djaGFydCI6Y2FzZSJmbG93Y2hhcnQtdjIiOm4odyxMbi5iaW5kRnVuY3Rpb25zKTticmVhaztjYXNlImdhbnR0IjpuKHcsenIuYmluZEZ1bmN0aW9ucyk7YnJlYWs7Y2FzZSJjbGFzcyI6Y2FzZSJjbGFzc0RpYWdyYW0iOm4odyxQdC5iaW5kRnVuY3Rpb25zKTticmVhaztkZWZhdWx0Om4odyl9ZWxzZSBjLmRlYnVnKCJDQiA9IHVuZGVmaW5lZCEiKTt2YXIgRT1PYmplY3QoaC5zZWxlY3QpKCIjZCIrdCkubm9kZSgpO3JldHVybiBudWxsIT09RSYmImZ1bmN0aW9uIj09dHlwZW9mIEUucmVtb3ZlJiZPYmplY3QoaC5zZWxlY3QpKCIjZCIrdCkubm9kZSgpLnJlbW92ZSgpLHd9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPV90KCksbj1WLmRldGVjdEluaXQodCxlKTtuJiZjLmRlYnVnKCJyZWluaXQgIixuKTt2YXIgcixpPVYuZGV0ZWN0VHlwZSh0LGUpO3N3aXRjaChjLmRlYnVnKCJUeXBlICIraSksaSl7Y2FzZSJnaXQiOihyPXVpLmEpLnBhcnNlci55eT1zaTticmVhaztjYXNlImZsb3djaGFydCI6Y2FzZSJmbG93Y2hhcnQtdjIiOkxuLmNsZWFyKCksKHI9Um4uYSkucGFyc2VyLnl5PUxuO2JyZWFrO2Nhc2Uic2VxdWVuY2UiOihyPWFhLmEpLnBhcnNlci55eT1fYTticmVhaztjYXNlImdhbnR0Ijoocj1xci5hKS5wYXJzZXIueXk9enI7YnJlYWs7Y2FzZSJjbGFzcyI6Y2FzZSJjbGFzc0RpYWdyYW0iOihyPXF0LmEpLnBhcnNlci55eT1QdDticmVhaztjYXNlInN0YXRlIjpjYXNlInN0YXRlRGlhZ3JhbSI6KHI9V2EuYSkucGFyc2VyLnl5PW9vO2JyZWFrO2Nhc2UiaW5mbyI6Yy5kZWJ1ZygiaW5mbyBpbmZvIGluZm8iKSwocj1DaS5hKS5wYXJzZXIueXk9RWk7YnJlYWs7Y2FzZSJwaWUiOmMuZGVidWcoInBpZSIpLChyPUJpLmEpLnBhcnNlci55eT1JaTticmVhaztjYXNlImVyIjpjLmRlYnVnKCJlciIpLChyPUplLmEpLnBhcnNlci55eT1RZTticmVhaztjYXNlImpvdXJuZXkiOmMuZGVidWcoIkpvdXJuZXkiKSwocj1Sby5hKS5wYXJzZXIueXk9TG87YnJlYWs7Y2FzZSJyZXF1aXJlbWVudCI6Y2FzZSJyZXF1aXJlbWVudERpYWdyYW0iOmMuZGVidWcoIlJlcXVpcmVtZW50RGlhZ3JhbSIpLChyPWppLmEpLnBhcnNlci55eT1XaX1yZXR1cm4gci5wYXJzZXIueXkuZ3JhcGhUeXBlPWksci5wYXJzZXIueXkucGFyc2VFcnJvcj1mdW5jdGlvbih0LGUpe3Rocm93e3N0cjp0LGhhc2g6ZX19LHIucGFyc2UodCkscn0scGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4scil7dHJ5e2lmKHZvaWQgMCE9PWUpc3dpdGNoKGU9ZS50cmltKCksbil7Y2FzZSJvcGVuX2RpcmVjdGl2ZSI6ZnM9e307YnJlYWs7Y2FzZSJ0eXBlX2RpcmVjdGl2ZSI6ZnMudHlwZT1lLnRvTG93ZXJDYXNlKCk7YnJlYWs7Y2FzZSJhcmdfZGlyZWN0aXZlIjpmcy5hcmdzPUpTT04ucGFyc2UoZSk7YnJlYWs7Y2FzZSJjbG9zZV9kaXJlY3RpdmUiOmRzKHQsZnMsciksZnM9bnVsbH19Y2F0Y2godCl7Yy5lcnJvcigiRXJyb3Igd2hpbGUgcmVuZGVyaW5nIHNlcXVlbmNlRGlhZ3JhbSBkaXJlY3RpdmU6ICIuY29uY2F0KGUsIiBqaXNvbiBjb250ZXh0OiAiKS5jb25jYXQobikpLGMuZXJyb3IodC5tZXNzYWdlKX19LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7dCYmdC5mb250RmFtaWx5JiYodC50aGVtZVZhcmlhYmxlcyYmdC50aGVtZVZhcmlhYmxlcy5mb250RmFtaWx5fHwodC50aGVtZVZhcmlhYmxlcz17Zm9udEZhbWlseTp0LmZvbnRGYW1pbHl9KSkscHQ9UCh7fSx0KSx0JiZ0LnRoZW1lJiZsdFt0LnRoZW1lXT90LnRoZW1lVmFyaWFibGVzPWx0W3QudGhlbWVdLmdldFRoZW1lVmFyaWFibGVzKHQudGhlbWVWYXJpYWJsZXMpOnQmJih0LnRoZW1lVmFyaWFibGVzPWx0LmRlZmF1bHQuZ2V0VGhlbWVWYXJpYWJsZXModC50aGVtZVZhcmlhYmxlcykpO3ZhciBlPSJvYmplY3QiPT09aHModCk/ZnVuY3Rpb24odCl7cmV0dXJuIGd0PVAoe30seXQpLGd0PVAoZ3QsdCksdC50aGVtZSYmKGd0LnRoZW1lVmFyaWFibGVzPWx0W3QudGhlbWVdLmdldFRoZW1lVmFyaWFibGVzKHQudGhlbWVWYXJpYWJsZXMpKSxtdD1idChndCx2dCksZ3R9KHQpOnh0KCk7cHMoZSksdShlLmxvZ0xldmVsKX0scmVpbml0aWFsaXplOnlzLGdldENvbmZpZzpfdCxzZXRDb25maWc6ZnVuY3Rpb24odCl7cmV0dXJuIFAobXQsdCksX3QoKX0sZ2V0U2l0ZUNvbmZpZzp4dCx1cGRhdGVTaXRlQ29uZmlnOmZ1bmN0aW9uKHQpe3JldHVybiBndD1QKGd0LHQpLGJ0KGd0LHZ0KSxndH0scmVzZXQ6ZnVuY3Rpb24oKXtFdCgpfSxnbG9iYWxSZXNldDpmdW5jdGlvbigpe0V0KCkscHMoX3QoKSl9LGRlZmF1bHRDb25maWc6eXR9KTt1KF90KCkubG9nTGV2ZWwpLEV0KF90KCkpO3ZhciB2cz1ncyxtcz1mdW5jdGlvbigpe2JzLnN0YXJ0T25Mb2FkP3ZzLmdldENvbmZpZygpLnN0YXJ0T25Mb2FkJiZicy5pbml0KCk6dm9pZCAwPT09YnMuc3RhcnRPbkxvYWQmJihjLmRlYnVnKCJJbiBzdGFydCwgbm8gY29uZmlnIiksdnMuZ2V0Q29uZmlnKCkuc3RhcnRPbkxvYWQmJmJzLmluaXQoKSl9OyJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJgovKiEKICAgKiBXYWl0IGZvciBkb2N1bWVudCBsb2FkZWQgYmVmb3JlIHN0YXJ0aW5nIHRoZSBleGVjdXRpb24KICAgKi8Kd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLChmdW5jdGlvbigpe21zKCl9KSwhMSk7dmFyIGJzPXtzdGFydE9uTG9hZDohMCxodG1sTGFiZWxzOiEwLG1lcm1haWRBUEk6dnMscGFyc2U6dnMucGFyc2UscmVuZGVyOnZzLnJlbmRlcixpbml0OmZ1bmN0aW9uKCl7dmFyIHQsZSxuPXRoaXMscj12cy5nZXRDb25maWcoKTthcmd1bWVudHMubGVuZ3RoPj0yPygKLyohIHNlcXVlbmNlIGNvbmZpZyB3YXMgcGFzc2VkIGFzICMxICovCnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmKGJzLnNlcXVlbmNlQ29uZmlnPWFyZ3VtZW50c1swXSksdD1hcmd1bWVudHNbMV0pOnQ9YXJndW1lbnRzWzBdLCJmdW5jdGlvbiI9PXR5cGVvZiBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXT8oZT1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXSxjLmRlYnVnKCJDYWxsYmFjayBmdW5jdGlvbiBmb3VuZCIpKTp2b2lkIDAhPT1yLm1lcm1haWQmJigiZnVuY3Rpb24iPT10eXBlb2Ygci5tZXJtYWlkLmNhbGxiYWNrPyhlPXIubWVybWFpZC5jYWxsYmFjayxjLmRlYnVnKCJDYWxsYmFjayBmdW5jdGlvbiBmb3VuZCIpKTpjLmRlYnVnKCJObyBDYWxsYmFjayBmdW5jdGlvbiBmb3VuZCIpKSx0PXZvaWQgMD09PXQ/ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLm1lcm1haWQiKToic3RyaW5nIj09dHlwZW9mIHQ/ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0KTp0IGluc3RhbmNlb2Ygd2luZG93Lk5vZGU/W3RdOnQsYy5kZWJ1ZygiU3RhcnQgT24gTG9hZCBiZWZvcmU6ICIrYnMuc3RhcnRPbkxvYWQpLHZvaWQgMCE9PWJzLnN0YXJ0T25Mb2FkJiYoYy5kZWJ1ZygiU3RhcnQgT24gTG9hZCBpbm5lcjogIiticy5zdGFydE9uTG9hZCksdnMudXBkYXRlU2l0ZUNvbmZpZyh7c3RhcnRPbkxvYWQ6YnMuc3RhcnRPbkxvYWR9KSksdm9pZCAwIT09YnMuZ2FudHRDb25maWcmJnZzLnVwZGF0ZVNpdGVDb25maWcoe2dhbnR0OmJzLmdhbnR0Q29uZmlnfSk7Zm9yKHZhciBhLG89bmV3IFYuaW5pdElkR2VuZXJhdGlvcihyLmRldGVybWluaXN0aWNJZHMsci5kZXRlcm1pbmlzdGljSURTZWVkKSxzPWZ1bmN0aW9uKHIpe3ZhciBzPXRbcl07Ci8qISBDaGVjayBpZiBwcmV2aW91c2x5IHByb2Nlc3NlZCAqL2lmKHMuZ2V0QXR0cmlidXRlKCJkYXRhLXByb2Nlc3NlZCIpKXJldHVybiJjb250aW51ZSI7cy5zZXRBdHRyaWJ1dGUoImRhdGEtcHJvY2Vzc2VkIiwhMCk7dmFyIHU9Im1lcm1haWQtIi5jb25jYXQoby5uZXh0KCkpO2E9aShhPXMuaW5uZXJIVE1MKS50cmltKCkucmVwbGFjZSgvPGJyXHMqXC8/Pi9naSwiPGJyLz4iKTt2YXIgbD1WLmRldGVjdEluaXQoYSk7bCYmYy5kZWJ1ZygiRGV0ZWN0ZWQgZWFybHkgcmVpbml0OiAiLGwpO3RyeXt2cy5yZW5kZXIodSxhLChmdW5jdGlvbih0LG4pe3MuaW5uZXJIVE1MPXQsdm9pZCAwIT09ZSYmZSh1KSxuJiZuKHMpfSkscyl9Y2F0Y2godCl7Yy53YXJuKCJTeW50YXggRXJyb3IgcmVuZGVyaW5nIiksYy53YXJuKHQpLG4ucGFyc2VFcnJvciYmbi5wYXJzZUVycm9yKHQpfX0sdT0wO3U8dC5sZW5ndGg7dSsrKXModSl9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7dm9pZCAwIT09dC5tZXJtYWlkJiYodm9pZCAwIT09dC5tZXJtYWlkLnN0YXJ0T25Mb2FkJiYoYnMuc3RhcnRPbkxvYWQ9dC5tZXJtYWlkLnN0YXJ0T25Mb2FkKSx2b2lkIDAhPT10Lm1lcm1haWQuaHRtbExhYmVscyYmKGJzLmh0bWxMYWJlbHM9ImZhbHNlIiE9PXQubWVybWFpZC5odG1sTGFiZWxzJiYhMSE9PXQubWVybWFpZC5odG1sTGFiZWxzKSksdnMuaW5pdGlhbGl6ZSh0KX0sY29udGVudExvYWRlZDptc307ZS5kZWZhdWx0PWJzfV0pLmRlZmF1bHR9KSk7Ci8vIyBzb3VyY2VNYXBwaW5nVVJMPW1lcm1haWQubWluLmpzLm1hcA==`; |