3NCUbh7cABzRyEMEXAcGCAozSuxvUTf75ms · data · bootstrap.bundle.min.js_0
{
"bootstrap.bundle.min.js_0": "base64:LyohCiAgKiBCb290c3RyYXAgdjQuMy4xIChodHRwczovL2dldGJvb3RzdHJhcC5jb20vKQogICogQ29weXJpZ2h0IDIwMTEtMjAxOSBUaGUgQm9vdHN0cmFwIEF1dGhvcnMgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ncmFwaHMvY29udHJpYnV0b3JzKQogICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSkKICAqLwohZnVuY3Rpb24odCxlKXsib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJiJ1bmRlZmluZWQiIT10eXBlb2YgbW9kdWxlP2UoZXhwb3J0cyxyZXF1aXJlKCJqcXVlcnkiKSk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoWyJleHBvcnRzIiwianF1ZXJ5Il0sZSk6ZSgodD10fHxzZWxmKS5ib290c3RyYXA9e30sdC5qUXVlcnkpfSh0aGlzLGZ1bmN0aW9uKHQscCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkodCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9ZVtuXTtpLmVudW1lcmFibGU9aS5lbnVtZXJhYmxlfHwhMSxpLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gaSYmKGkud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGkua2V5LGkpfX1mdW5jdGlvbiBzKHQsZSxuKXtyZXR1cm4gZSYmaSh0LnByb3RvdHlwZSxlKSxuJiZpKHQsbiksdH1mdW5jdGlvbiBsKG8pe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30sZT1PYmplY3Qua2V5cyhyKTsiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKGU9ZS5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhyKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iocix0KS5lbnVtZXJhYmxlfSkpKSxlLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGUsbixpO2U9byxpPXJbbj10XSxuIGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7dmFsdWU6aSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbbl09aX0pfXJldHVybiBvfXA9cCYmcC5oYXNPd25Qcm9wZXJ0eSgiZGVmYXVsdCIpP3AuZGVmYXVsdDpwO3ZhciBlPSJ0cmFuc2l0aW9uZW5kIjtmdW5jdGlvbiBuKHQpe3ZhciBlPXRoaXMsbj0hMTtyZXR1cm4gcCh0aGlzKS5vbmUobS5UUkFOU0lUSU9OX0VORCxmdW5jdGlvbigpe249ITB9KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bnx8bS50cmlnZ2VyVHJhbnNpdGlvbkVuZChlKX0sdCksdGhpc312YXIgbT17VFJBTlNJVElPTl9FTkQ6ImJzVHJhbnNpdGlvbkVuZCIsZ2V0VUlEOmZ1bmN0aW9uKHQpe2Zvcig7dCs9fn4oMWU2Kk1hdGgucmFuZG9tKCkpLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpOyk7cmV0dXJuIHR9LGdldFNlbGVjdG9yRnJvbUVsZW1lbnQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRBdHRyaWJ1dGUoImRhdGEtdGFyZ2V0Iik7aWYoIWV8fCIjIj09PWUpe3ZhciBuPXQuZ2V0QXR0cmlidXRlKCJocmVmIik7ZT1uJiYiIyIhPT1uP24udHJpbSgpOiIifXRyeXtyZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKT9lOm51bGx9Y2F0Y2godCl7cmV0dXJuIG51bGx9fSxnZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudDpmdW5jdGlvbih0KXtpZighdClyZXR1cm4gMDt2YXIgZT1wKHQpLmNzcygidHJhbnNpdGlvbi1kdXJhdGlvbiIpLG49cCh0KS5jc3MoInRyYW5zaXRpb24tZGVsYXkiKSxpPXBhcnNlRmxvYXQoZSksbz1wYXJzZUZsb2F0KG4pO3JldHVybiBpfHxvPyhlPWUuc3BsaXQoIiwiKVswXSxuPW4uc3BsaXQoIiwiKVswXSwxZTMqKHBhcnNlRmxvYXQoZSkrcGFyc2VGbG9hdChuKSkpOjB9LHJlZmxvdzpmdW5jdGlvbih0KXtyZXR1cm4gdC5vZmZzZXRIZWlnaHR9LHRyaWdnZXJUcmFuc2l0aW9uRW5kOmZ1bmN0aW9uKHQpe3AodCkudHJpZ2dlcihlKX0sc3VwcG9ydHNUcmFuc2l0aW9uRW5kOmZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4oZSl9LGlzRWxlbWVudDpmdW5jdGlvbih0KXtyZXR1cm4odFswXXx8dCkubm9kZVR5cGV9LHR5cGVDaGVja0NvbmZpZzpmdW5jdGlvbih0LGUsbil7Zm9yKHZhciBpIGluIG4paWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4saSkpe3ZhciBvPW5baV0scj1lW2ldLHM9ciYmbS5pc0VsZW1lbnQocik/ImVsZW1lbnQiOihhPXIse30udG9TdHJpbmcuY2FsbChhKS5tYXRjaCgvXHMoW2Etel0rKS9pKVsxXS50b0xvd2VyQ2FzZSgpKTtpZighbmV3IFJlZ0V4cChvKS50ZXN0KHMpKXRocm93IG5ldyBFcnJvcih0LnRvVXBwZXJDYXNlKCkrJzogT3B0aW9uICInK2krJyIgcHJvdmlkZWQgdHlwZSAiJytzKyciIGJ1dCBleHBlY3RlZCB0eXBlICInK28rJyIuJyl9dmFyIGF9LGZpbmRTaGFkb3dSb290OmZ1bmN0aW9uKHQpe2lmKCFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXR0YWNoU2hhZG93KXJldHVybiBudWxsO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0LmdldFJvb3ROb2RlKXJldHVybiB0IGluc3RhbmNlb2YgU2hhZG93Um9vdD90OnQucGFyZW50Tm9kZT9tLmZpbmRTaGFkb3dSb290KHQucGFyZW50Tm9kZSk6bnVsbDt2YXIgZT10LmdldFJvb3ROb2RlKCk7cmV0dXJuIGUgaW5zdGFuY2VvZiBTaGFkb3dSb290P2U6bnVsbH19O3AuZm4uZW11bGF0ZVRyYW5zaXRpb25FbmQ9bixwLmV2ZW50LnNwZWNpYWxbbS5UUkFOU0lUSU9OX0VORF09e2JpbmRUeXBlOmUsZGVsZWdhdGVUeXBlOmUsaGFuZGxlOmZ1bmN0aW9uKHQpe2lmKHAodC50YXJnZXQpLmlzKHRoaXMpKXJldHVybiB0LmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19O3ZhciBvPSJhbGVydCIscj0iYnMuYWxlcnQiLGE9Ii4iK3IsYz1wLmZuW29dLGg9e0NMT1NFOiJjbG9zZSIrYSxDTE9TRUQ6ImNsb3NlZCIrYSxDTElDS19EQVRBX0FQSToiY2xpY2siK2ErIi5kYXRhLWFwaSJ9LHU9ImFsZXJ0IixmPSJmYWRlIixkPSJzaG93IixnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaSh0KXt0aGlzLl9lbGVtZW50PXR9dmFyIHQ9aS5wcm90b3R5cGU7cmV0dXJuIHQuY2xvc2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZWxlbWVudDt0JiYoZT10aGlzLl9nZXRSb290RWxlbWVudCh0KSksdGhpcy5fdHJpZ2dlckNsb3NlRXZlbnQoZSkuaXNEZWZhdWx0UHJldmVudGVkKCl8fHRoaXMuX3JlbW92ZUVsZW1lbnQoZSl9LHQuZGlzcG9zZT1mdW5jdGlvbigpe3AucmVtb3ZlRGF0YSh0aGlzLl9lbGVtZW50LHIpLHRoaXMuX2VsZW1lbnQ9bnVsbH0sdC5fZ2V0Um9vdEVsZW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9bS5nZXRTZWxlY3RvckZyb21FbGVtZW50KHQpLG49ITE7cmV0dXJuIGUmJihuPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSkpLG58fChuPXAodCkuY2xvc2VzdCgiLiIrdSlbMF0pLG59LHQuX3RyaWdnZXJDbG9zZUV2ZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXAuRXZlbnQoaC5DTE9TRSk7cmV0dXJuIHAodCkudHJpZ2dlcihlKSxlfSx0Ll9yZW1vdmVFbGVtZW50PWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXM7aWYocChlKS5yZW1vdmVDbGFzcyhkKSxwKGUpLmhhc0NsYXNzKGYpKXt2YXIgdD1tLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KGUpO3AoZSkub25lKG0uVFJBTlNJVElPTl9FTkQsZnVuY3Rpb24odCl7cmV0dXJuIG4uX2Rlc3Ryb3lFbGVtZW50KGUsdCl9KS5lbXVsYXRlVHJhbnNpdGlvbkVuZCh0KX1lbHNlIHRoaXMuX2Rlc3Ryb3lFbGVtZW50KGUpfSx0Ll9kZXN0cm95RWxlbWVudD1mdW5jdGlvbih0KXtwKHQpLmRldGFjaCgpLnRyaWdnZXIoaC5DTE9TRUQpLnJlbW92ZSgpfSxpLl9qUXVlcnlJbnRlcmZhY2U9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PXAodGhpcyksZT10LmRhdGEocik7ZXx8KGU9bmV3IGkodGhpcyksdC5kYXRhKHIsZSkpLCJjbG9zZSI9PT1uJiZlW25dKHRoaXMpfSl9LGkuX2hhbmRsZURpc21pc3M9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3QmJnQucHJldmVudERlZmF1bHQoKSxlLmNsb3NlKHRoaXMpfX0scyhpLG51bGwsW3trZXk6IlZFUlNJT04iLGdldDpmdW5jdGlvbigpe3JldHVybiI0LjMuMSJ9fV0pLGl9KCk7cChkb2N1bWVudCkub24oaC5DTElDS19EQVRBX0FQSSwnW2RhdGEtZGlzbWlzcz0iYWxlcnQiXScsZy5faGFuZGxlRGlzbWlzcyhuZXcgZykpLHAuZm5bb109Zy5falF1ZXJ5SW50ZXJmYWNlLHAuZm5bb10uQ29uc3RydWN0b3I9ZyxwLmZuW29dLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gcC5mbltvXT1jLGcuX2pRdWVyeUludGVyZmFjZX07dmFyIF89ImJ1dHRvbiIsdj0iYnMuYnV0dG9uIix5PSIuIit2LEU9Ii5kYXRhLWFwaSIsYj1wLmZuW19dLHc9ImFjdGl2ZSIsQz0iYnRuIixUPSJmb2N1cyIsUz0nW2RhdGEtdG9nZ2xlXj0iYnV0dG9uIl0nLEQ9J1tkYXRhLXRvZ2dsZT0iYnV0dG9ucyJdJyxJPSdpbnB1dDpub3QoW3R5cGU9ImhpZGRlbiJdKScsQT0iLmFjdGl2ZSIsTz0iLmJ0biIsTj17Q0xJQ0tfREFUQV9BUEk6ImNsaWNrIit5K0UsRk9DVVNfQkxVUl9EQVRBX0FQSToiZm9jdXMiK3krRSsiIGJsdXIiK3krRX0saz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4odCl7dGhpcy5fZWxlbWVudD10fXZhciB0PW4ucHJvdG90eXBlO3JldHVybiB0LnRvZ2dsZT1mdW5jdGlvbigpe3ZhciB0PSEwLGU9ITAsbj1wKHRoaXMuX2VsZW1lbnQpLmNsb3Nlc3QoRClbMF07aWYobil7dmFyIGk9dGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKEkpO2lmKGkpe2lmKCJyYWRpbyI9PT1pLnR5cGUpaWYoaS5jaGVja2VkJiZ0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyh3KSl0PSExO2Vsc2V7dmFyIG89bi5xdWVyeVNlbGVjdG9yKEEpO28mJnAobykucmVtb3ZlQ2xhc3Modyl9aWYodCl7aWYoaS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil8fG4uaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfHxpLmNsYXNzTGlzdC5jb250YWlucygiZGlzYWJsZWQiKXx8bi5jbGFzc0xpc3QuY29udGFpbnMoImRpc2FibGVkIikpcmV0dXJuO2kuY2hlY2tlZD0hdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnModykscChpKS50cmlnZ2VyKCJjaGFuZ2UiKX1pLmZvY3VzKCksZT0hMX19ZSYmdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIsIXRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKHcpKSx0JiZwKHRoaXMuX2VsZW1lbnQpLnRvZ2dsZUNsYXNzKHcpfSx0LmRpc3Bvc2U9ZnVuY3Rpb24oKXtwLnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCx2KSx0aGlzLl9lbGVtZW50PW51bGx9LG4uX2pRdWVyeUludGVyZmFjZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9cCh0aGlzKS5kYXRhKHYpO3R8fCh0PW5ldyBuKHRoaXMpLHAodGhpcykuZGF0YSh2LHQpKSwidG9nZ2xlIj09PWUmJnRbZV0oKX0pfSxzKG4sbnVsbCxbe2tleToiVkVSU0lPTiIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIjQuMy4xIn19XSksbn0oKTtwKGRvY3VtZW50KS5vbihOLkNMSUNLX0RBVEFfQVBJLFMsZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpO3ZhciBlPXQudGFyZ2V0O3AoZSkuaGFzQ2xhc3MoQyl8fChlPXAoZSkuY2xvc2VzdChPKSksay5falF1ZXJ5SW50ZXJmYWNlLmNhbGwocChlKSwidG9nZ2xlIil9KS5vbihOLkZPQ1VTX0JMVVJfREFUQV9BUEksUyxmdW5jdGlvbih0KXt2YXIgZT1wKHQudGFyZ2V0KS5jbG9zZXN0KE8pWzBdO3AoZSkudG9nZ2xlQ2xhc3MoVCwvXmZvY3VzKGluKT8kLy50ZXN0KHQudHlwZSkpfSkscC5mbltfXT1rLl9qUXVlcnlJbnRlcmZhY2UscC5mbltfXS5Db25zdHJ1Y3Rvcj1rLHAuZm5bX10ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBwLmZuW19dPWIsay5falF1ZXJ5SW50ZXJmYWNlfTt2YXIgTD0iY2Fyb3VzZWwiLHg9ImJzLmNhcm91c2VsIixQPSIuIit4LEg9Ii5kYXRhLWFwaSIsaj1wLmZuW0xdLFI9e2ludGVydmFsOjVlMyxrZXlib2FyZDohMCxzbGlkZTohMSxwYXVzZToiaG92ZXIiLHdyYXA6ITAsdG91Y2g6ITB9LEY9e2ludGVydmFsOiIobnVtYmVyfGJvb2xlYW4pIixrZXlib2FyZDoiYm9vbGVhbiIsc2xpZGU6Iihib29sZWFufHN0cmluZykiLHBhdXNlOiIoc3RyaW5nfGJvb2xlYW4pIix3cmFwOiJib29sZWFuIix0b3VjaDoiYm9vbGVhbiJ9LE09Im5leHQiLFc9InByZXYiLFU9ImxlZnQiLEI9InJpZ2h0IixxPXtTTElERToic2xpZGUiK1AsU0xJRDoic2xpZCIrUCxLRVlET1dOOiJrZXlkb3duIitQLE1PVVNFRU5URVI6Im1vdXNlZW50ZXIiK1AsTU9VU0VMRUFWRToibW91c2VsZWF2ZSIrUCxUT1VDSFNUQVJUOiJ0b3VjaHN0YXJ0IitQLFRPVUNITU9WRToidG91Y2htb3ZlIitQLFRPVUNIRU5EOiJ0b3VjaGVuZCIrUCxQT0lOVEVSRE9XTjoicG9pbnRlcmRvd24iK1AsUE9JTlRFUlVQOiJwb2ludGVydXAiK1AsRFJBR19TVEFSVDoiZHJhZ3N0YXJ0IitQLExPQURfREFUQV9BUEk6ImxvYWQiK1ArSCxDTElDS19EQVRBX0FQSToiY2xpY2siK1ArSH0sSz0iY2Fyb3VzZWwiLFE9ImFjdGl2ZSIsVj0ic2xpZGUiLFk9ImNhcm91c2VsLWl0ZW0tcmlnaHQiLHo9ImNhcm91c2VsLWl0ZW0tbGVmdCIsWD0iY2Fyb3VzZWwtaXRlbS1uZXh0IixHPSJjYXJvdXNlbC1pdGVtLXByZXYiLCQ9InBvaW50ZXItZXZlbnQiLEo9Ii5hY3RpdmUiLFo9Ii5hY3RpdmUuY2Fyb3VzZWwtaXRlbSIsdHQ9Ii5jYXJvdXNlbC1pdGVtIixldD0iLmNhcm91c2VsLWl0ZW0gaW1nIixudD0iLmNhcm91c2VsLWl0ZW0tbmV4dCwgLmNhcm91c2VsLWl0ZW0tcHJldiIsaXQ9Ii5jYXJvdXNlbC1pbmRpY2F0b3JzIixvdD0iW2RhdGEtc2xpZGVdLCBbZGF0YS1zbGlkZS10b10iLHJ0PSdbZGF0YS1yaWRlPSJjYXJvdXNlbCJdJyxzdD17VE9VQ0g6InRvdWNoIixQRU46InBlbiJ9LGF0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcih0LGUpe3RoaXMuX2l0ZW1zPW51bGwsdGhpcy5faW50ZXJ2YWw9bnVsbCx0aGlzLl9hY3RpdmVFbGVtZW50PW51bGwsdGhpcy5faXNQYXVzZWQ9ITEsdGhpcy5faXNTbGlkaW5nPSExLHRoaXMudG91Y2hUaW1lb3V0PW51bGwsdGhpcy50b3VjaFN0YXJ0WD0wLHRoaXMudG91Y2hEZWx0YVg9MCx0aGlzLl9jb25maWc9dGhpcy5fZ2V0Q29uZmlnKGUpLHRoaXMuX2VsZW1lbnQ9dCx0aGlzLl9pbmRpY2F0b3JzRWxlbWVudD10aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoaXQpLHRoaXMuX3RvdWNoU3VwcG9ydGVkPSJvbnRvdWNoc3RhcnQiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHwwPG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyx0aGlzLl9wb2ludGVyRXZlbnQ9Qm9vbGVhbih3aW5kb3cuUG9pbnRlckV2ZW50fHx3aW5kb3cuTVNQb2ludGVyRXZlbnQpLHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJzKCl9dmFyIHQ9ci5wcm90b3R5cGU7cmV0dXJuIHQubmV4dD1mdW5jdGlvbigpe3RoaXMuX2lzU2xpZGluZ3x8dGhpcy5fc2xpZGUoTSl9LHQubmV4dFdoZW5WaXNpYmxlPWZ1bmN0aW9uKCl7IWRvY3VtZW50LmhpZGRlbiYmcCh0aGlzLl9lbGVtZW50KS5pcygiOnZpc2libGUiKSYmImhpZGRlbiIhPT1wKHRoaXMuX2VsZW1lbnQpLmNzcygidmlzaWJpbGl0eSIpJiZ0aGlzLm5leHQoKX0sdC5wcmV2PWZ1bmN0aW9uKCl7dGhpcy5faXNTbGlkaW5nfHx0aGlzLl9zbGlkZShXKX0sdC5wYXVzZT1mdW5jdGlvbih0KXt0fHwodGhpcy5faXNQYXVzZWQ9ITApLHRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcihudCkmJihtLnRyaWdnZXJUcmFuc2l0aW9uRW5kKHRoaXMuX2VsZW1lbnQpLHRoaXMuY3ljbGUoITApKSxjbGVhckludGVydmFsKHRoaXMuX2ludGVydmFsKSx0aGlzLl9pbnRlcnZhbD1udWxsfSx0LmN5Y2xlPWZ1bmN0aW9uKHQpe3R8fCh0aGlzLl9pc1BhdXNlZD0hMSksdGhpcy5faW50ZXJ2YWwmJihjbGVhckludGVydmFsKHRoaXMuX2ludGVydmFsKSx0aGlzLl9pbnRlcnZhbD1udWxsKSx0aGlzLl9jb25maWcuaW50ZXJ2YWwmJiF0aGlzLl9pc1BhdXNlZCYmKHRoaXMuX2ludGVydmFsPXNldEludGVydmFsKChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU/dGhpcy5uZXh0V2hlblZpc2libGU6dGhpcy5uZXh0KS5iaW5kKHRoaXMpLHRoaXMuX2NvbmZpZy5pbnRlcnZhbCkpfSx0LnRvPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fYWN0aXZlRWxlbWVudD10aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoWik7dmFyIG49dGhpcy5fZ2V0SXRlbUluZGV4KHRoaXMuX2FjdGl2ZUVsZW1lbnQpO2lmKCEodD50aGlzLl9pdGVtcy5sZW5ndGgtMXx8dDwwKSlpZih0aGlzLl9pc1NsaWRpbmcpcCh0aGlzLl9lbGVtZW50KS5vbmUocS5TTElELGZ1bmN0aW9uKCl7cmV0dXJuIGUudG8odCl9KTtlbHNle2lmKG49PT10KXJldHVybiB0aGlzLnBhdXNlKCksdm9pZCB0aGlzLmN5Y2xlKCk7dmFyIGk9bjx0P006Vzt0aGlzLl9zbGlkZShpLHRoaXMuX2l0ZW1zW3RdKX19LHQuZGlzcG9zZT1mdW5jdGlvbigpe3AodGhpcy5fZWxlbWVudCkub2ZmKFApLHAucmVtb3ZlRGF0YSh0aGlzLl9lbGVtZW50LHgpLHRoaXMuX2l0ZW1zPW51bGwsdGhpcy5fY29uZmlnPW51bGwsdGhpcy5fZWxlbWVudD1udWxsLHRoaXMuX2ludGVydmFsPW51bGwsdGhpcy5faXNQYXVzZWQ9bnVsbCx0aGlzLl9pc1NsaWRpbmc9bnVsbCx0aGlzLl9hY3RpdmVFbGVtZW50PW51bGwsdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQ9bnVsbH0sdC5fZ2V0Q29uZmlnPWZ1bmN0aW9uKHQpe3JldHVybiB0PWwoe30sUix0KSxtLnR5cGVDaGVja0NvbmZpZyhMLHQsRiksdH0sdC5faGFuZGxlU3dpcGU9ZnVuY3Rpb24oKXt2YXIgdD1NYXRoLmFicyh0aGlzLnRvdWNoRGVsdGFYKTtpZighKHQ8PTQwKSl7dmFyIGU9dC90aGlzLnRvdWNoRGVsdGFYOzA8ZSYmdGhpcy5wcmV2KCksZTwwJiZ0aGlzLm5leHQoKX19LHQuX2FkZEV2ZW50TGlzdGVuZXJzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLl9jb25maWcua2V5Ym9hcmQmJnAodGhpcy5fZWxlbWVudCkub24ocS5LRVlET1dOLGZ1bmN0aW9uKHQpe3JldHVybiBlLl9rZXlkb3duKHQpfSksImhvdmVyIj09PXRoaXMuX2NvbmZpZy5wYXVzZSYmcCh0aGlzLl9lbGVtZW50KS5vbihxLk1PVVNFRU5URVIsZnVuY3Rpb24odCl7cmV0dXJuIGUucGF1c2UodCl9KS5vbihxLk1PVVNFTEVBVkUsZnVuY3Rpb24odCl7cmV0dXJuIGUuY3ljbGUodCl9KSx0aGlzLl9jb25maWcudG91Y2gmJnRoaXMuX2FkZFRvdWNoRXZlbnRMaXN0ZW5lcnMoKX0sdC5fYWRkVG91Y2hFdmVudExpc3RlbmVycz1mdW5jdGlvbigpe3ZhciBuPXRoaXM7aWYodGhpcy5fdG91Y2hTdXBwb3J0ZWQpe3ZhciBlPWZ1bmN0aW9uKHQpe24uX3BvaW50ZXJFdmVudCYmc3RbdC5vcmlnaW5hbEV2ZW50LnBvaW50ZXJUeXBlLnRvVXBwZXJDYXNlKCldP24udG91Y2hTdGFydFg9dC5vcmlnaW5hbEV2ZW50LmNsaWVudFg6bi5fcG9pbnRlckV2ZW50fHwobi50b3VjaFN0YXJ0WD10Lm9yaWdpbmFsRXZlbnQudG91Y2hlc1swXS5jbGllbnRYKX0saT1mdW5jdGlvbih0KXtuLl9wb2ludGVyRXZlbnQmJnN0W3Qub3JpZ2luYWxFdmVudC5wb2ludGVyVHlwZS50b1VwcGVyQ2FzZSgpXSYmKG4udG91Y2hEZWx0YVg9dC5vcmlnaW5hbEV2ZW50LmNsaWVudFgtbi50b3VjaFN0YXJ0WCksbi5faGFuZGxlU3dpcGUoKSwiaG92ZXIiPT09bi5fY29uZmlnLnBhdXNlJiYobi5wYXVzZSgpLG4udG91Y2hUaW1lb3V0JiZjbGVhclRpbWVvdXQobi50b3VjaFRpbWVvdXQpLG4udG91Y2hUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24odCl7cmV0dXJuIG4uY3ljbGUodCl9LDUwMCtuLl9jb25maWcuaW50ZXJ2YWwpKX07cCh0aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZXQpKS5vbihxLkRSQUdfU1RBUlQsZnVuY3Rpb24odCl7cmV0dXJuIHQucHJldmVudERlZmF1bHQoKX0pLHRoaXMuX3BvaW50ZXJFdmVudD8ocCh0aGlzLl9lbGVtZW50KS5vbihxLlBPSU5URVJET1dOLGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpfSkscCh0aGlzLl9lbGVtZW50KS5vbihxLlBPSU5URVJVUCxmdW5jdGlvbih0KXtyZXR1cm4gaSh0KX0pLHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZCgkKSk6KHAodGhpcy5fZWxlbWVudCkub24ocS5UT1VDSFNUQVJULGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpfSkscCh0aGlzLl9lbGVtZW50KS5vbihxLlRPVUNITU9WRSxmdW5jdGlvbih0KXt2YXIgZTsoZT10KS5vcmlnaW5hbEV2ZW50LnRvdWNoZXMmJjE8ZS5vcmlnaW5hbEV2ZW50LnRvdWNoZXMubGVuZ3RoP24udG91Y2hEZWx0YVg9MDpuLnRvdWNoRGVsdGFYPWUub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLmNsaWVudFgtbi50b3VjaFN0YXJ0WH0pLHAodGhpcy5fZWxlbWVudCkub24ocS5UT1VDSEVORCxmdW5jdGlvbih0KXtyZXR1cm4gaSh0KX0pKX19LHQuX2tleWRvd249ZnVuY3Rpb24odCl7aWYoIS9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QodC50YXJnZXQudGFnTmFtZSkpc3dpdGNoKHQud2hpY2gpe2Nhc2UgMzc6dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMucHJldigpO2JyZWFrO2Nhc2UgMzk6dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMubmV4dCgpfX0sdC5fZ2V0SXRlbUluZGV4PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pdGVtcz10JiZ0LnBhcmVudE5vZGU/W10uc2xpY2UuY2FsbCh0LnBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFsbCh0dCkpOltdLHRoaXMuX2l0ZW1zLmluZGV4T2YodCl9LHQuX2dldEl0ZW1CeURpcmVjdGlvbj1mdW5jdGlvbih0LGUpe3ZhciBuPXQ9PT1NLGk9dD09PVcsbz10aGlzLl9nZXRJdGVtSW5kZXgoZSkscj10aGlzLl9pdGVtcy5sZW5ndGgtMTtpZigoaSYmMD09PW98fG4mJm89PT1yKSYmIXRoaXMuX2NvbmZpZy53cmFwKXJldHVybiBlO3ZhciBzPShvKyh0PT09Vz8tMToxKSkldGhpcy5faXRlbXMubGVuZ3RoO3JldHVybi0xPT09cz90aGlzLl9pdGVtc1t0aGlzLl9pdGVtcy5sZW5ndGgtMV06dGhpcy5faXRlbXNbc119LHQuX3RyaWdnZXJTbGlkZUV2ZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fZ2V0SXRlbUluZGV4KHQpLGk9dGhpcy5fZ2V0SXRlbUluZGV4KHRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcihaKSksbz1wLkV2ZW50KHEuU0xJREUse3JlbGF0ZWRUYXJnZXQ6dCxkaXJlY3Rpb246ZSxmcm9tOmksdG86bn0pO3JldHVybiBwKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIobyksb30sdC5fc2V0QWN0aXZlSW5kaWNhdG9yRWxlbWVudD1mdW5jdGlvbih0KXtpZih0aGlzLl9pbmRpY2F0b3JzRWxlbWVudCl7dmFyIGU9W10uc2xpY2UuY2FsbCh0aGlzLl9pbmRpY2F0b3JzRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKEopKTtwKGUpLnJlbW92ZUNsYXNzKFEpO3ZhciBuPXRoaXMuX2luZGljYXRvcnNFbGVtZW50LmNoaWxkcmVuW3RoaXMuX2dldEl0ZW1JbmRleCh0KV07biYmcChuKS5hZGRDbGFzcyhRKX19LHQuX3NsaWRlPWZ1bmN0aW9uKHQsZSl7dmFyIG4saSxvLHI9dGhpcyxzPXRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcihaKSxhPXRoaXMuX2dldEl0ZW1JbmRleChzKSxsPWV8fHMmJnRoaXMuX2dldEl0ZW1CeURpcmVjdGlvbih0LHMpLGM9dGhpcy5fZ2V0SXRlbUluZGV4KGwpLGg9Qm9vbGVhbih0aGlzLl9pbnRlcnZhbCk7aWYobz10PT09TT8obj16LGk9WCxVKToobj1ZLGk9RyxCKSxsJiZwKGwpLmhhc0NsYXNzKFEpKXRoaXMuX2lzU2xpZGluZz0hMTtlbHNlIGlmKCF0aGlzLl90cmlnZ2VyU2xpZGVFdmVudChsLG8pLmlzRGVmYXVsdFByZXZlbnRlZCgpJiZzJiZsKXt0aGlzLl9pc1NsaWRpbmc9ITAsaCYmdGhpcy5wYXVzZSgpLHRoaXMuX3NldEFjdGl2ZUluZGljYXRvckVsZW1lbnQobCk7dmFyIHU9cC5FdmVudChxLlNMSUQse3JlbGF0ZWRUYXJnZXQ6bCxkaXJlY3Rpb246byxmcm9tOmEsdG86Y30pO2lmKHAodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoVikpe3AobCkuYWRkQ2xhc3MoaSksbS5yZWZsb3cobCkscChzKS5hZGRDbGFzcyhuKSxwKGwpLmFkZENsYXNzKG4pO3ZhciBmPXBhcnNlSW50KGwuZ2V0QXR0cmlidXRlKCJkYXRhLWludGVydmFsIiksMTApO3RoaXMuX2NvbmZpZy5pbnRlcnZhbD1mPyh0aGlzLl9jb25maWcuZGVmYXVsdEludGVydmFsPXRoaXMuX2NvbmZpZy5kZWZhdWx0SW50ZXJ2YWx8fHRoaXMuX2NvbmZpZy5pbnRlcnZhbCxmKTp0aGlzLl9jb25maWcuZGVmYXVsdEludGVydmFsfHx0aGlzLl9jb25maWcuaW50ZXJ2YWw7dmFyIGQ9bS5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudChzKTtwKHMpLm9uZShtLlRSQU5TSVRJT05fRU5ELGZ1bmN0aW9uKCl7cChsKS5yZW1vdmVDbGFzcyhuKyIgIitpKS5hZGRDbGFzcyhRKSxwKHMpLnJlbW92ZUNsYXNzKFErIiAiK2krIiAiK24pLHIuX2lzU2xpZGluZz0hMSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIHAoci5fZWxlbWVudCkudHJpZ2dlcih1KX0sMCl9KS5lbXVsYXRlVHJhbnNpdGlvbkVuZChkKX1lbHNlIHAocykucmVtb3ZlQ2xhc3MoUSkscChsKS5hZGRDbGFzcyhRKSx0aGlzLl9pc1NsaWRpbmc9ITEscCh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKHUpO2gmJnRoaXMuY3ljbGUoKX19LHIuX2pRdWVyeUludGVyZmFjZT1mdW5jdGlvbihpKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9cCh0aGlzKS5kYXRhKHgpLGU9bCh7fSxSLHAodGhpcykuZGF0YSgpKTsib2JqZWN0Ij09dHlwZW9mIGkmJihlPWwoe30sZSxpKSk7dmFyIG49InN0cmluZyI9PXR5cGVvZiBpP2k6ZS5zbGlkZTtpZih0fHwodD1uZXcgcih0aGlzLGUpLHAodGhpcykuZGF0YSh4LHQpKSwibnVtYmVyIj09dHlwZW9mIGkpdC50byhpKTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2Ygbil7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiB0W25dKXRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG1ldGhvZCBuYW1lZCAiJytuKyciJyk7dFtuXSgpfWVsc2UgZS5pbnRlcnZhbCYmZS5yaWRlJiYodC5wYXVzZSgpLHQuY3ljbGUoKSl9KX0sci5fZGF0YUFwaUNsaWNrSGFuZGxlcj1mdW5jdGlvbih0KXt2YXIgZT1tLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQodGhpcyk7aWYoZSl7dmFyIG49cChlKVswXTtpZihuJiZwKG4pLmhhc0NsYXNzKEspKXt2YXIgaT1sKHt9LHAobikuZGF0YSgpLHAodGhpcykuZGF0YSgpKSxvPXRoaXMuZ2V0QXR0cmlidXRlKCJkYXRhLXNsaWRlLXRvIik7byYmKGkuaW50ZXJ2YWw9ITEpLHIuX2pRdWVyeUludGVyZmFjZS5jYWxsKHAobiksaSksbyYmcChuKS5kYXRhKHgpLnRvKG8pLHQucHJldmVudERlZmF1bHQoKX19fSxzKHIsbnVsbCxbe2tleToiVkVSU0lPTiIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIjQuMy4xIn19LHtrZXk6IkRlZmF1bHQiLGdldDpmdW5jdGlvbigpe3JldHVybiBSfX1dKSxyfSgpO3AoZG9jdW1lbnQpLm9uKHEuQ0xJQ0tfREFUQV9BUEksb3QsYXQuX2RhdGFBcGlDbGlja0hhbmRsZXIpLHAod2luZG93KS5vbihxLkxPQURfREFUQV9BUEksZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHJ0KSksZT0wLG49dC5sZW5ndGg7ZTxuO2UrKyl7dmFyIGk9cCh0W2VdKTthdC5falF1ZXJ5SW50ZXJmYWNlLmNhbGwoaSxpLmRhdGEoKSl9fSkscC5mbltMXT1hdC5falF1ZXJ5SW50ZXJmYWNlLHAuZm5bTF0uQ29uc3RydWN0b3I9YXQscC5mbltMXS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHAuZm5bTF09aixhdC5falF1ZXJ5SW50ZXJmYWNlfTt2YXIgbHQ9ImNvbGxhcHNlIixjdD0iYnMuY29sbGFwc2UiLGh0PSIuIitjdCx1dD1wLmZuW2x0XSxmdD17dG9nZ2xlOiEwLHBhcmVudDoiIn0sZHQ9e3RvZ2dsZToiYm9vbGVhbiIscGFyZW50OiIoc3RyaW5nfGVsZW1lbnQpIn0scHQ9e1NIT1c6InNob3ciK2h0LFNIT1dOOiJzaG93biIraHQsSElERToiaGlkZSIraHQsSElEREVOOiJoaWRkZW4iK2h0LENMSUNLX0RBVEFfQVBJOiJjbGljayIraHQrIi5kYXRhLWFwaSJ9LG10PSJzaG93IixndD0iY29sbGFwc2UiLF90PSJjb2xsYXBzaW5nIix2dD0iY29sbGFwc2VkIix5dD0id2lkdGgiLEV0PSJoZWlnaHQiLGJ0PSIuc2hvdywgLmNvbGxhcHNpbmciLHd0PSdbZGF0YS10b2dnbGU9ImNvbGxhcHNlIl0nLEN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShlLHQpe3RoaXMuX2lzVHJhbnNpdGlvbmluZz0hMSx0aGlzLl9lbGVtZW50PWUsdGhpcy5fY29uZmlnPXRoaXMuX2dldENvbmZpZyh0KSx0aGlzLl90cmlnZ2VyQXJyYXk9W10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS10b2dnbGU9ImNvbGxhcHNlIl1baHJlZj0iIycrZS5pZCsnIl0sW2RhdGEtdG9nZ2xlPSJjb2xsYXBzZSJdW2RhdGEtdGFyZ2V0PSIjJytlLmlkKyciXScpKTtmb3IodmFyIG49W10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHd0KSksaT0wLG89bi5sZW5ndGg7aTxvO2krKyl7dmFyIHI9bltpXSxzPW0uZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChyKSxhPVtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzKSkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0PT09ZX0pO251bGwhPT1zJiYwPGEubGVuZ3RoJiYodGhpcy5fc2VsZWN0b3I9cyx0aGlzLl90cmlnZ2VyQXJyYXkucHVzaChyKSl9dGhpcy5fcGFyZW50PXRoaXMuX2NvbmZpZy5wYXJlbnQ/dGhpcy5fZ2V0UGFyZW50KCk6bnVsbCx0aGlzLl9jb25maWcucGFyZW50fHx0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3ModGhpcy5fZWxlbWVudCx0aGlzLl90cmlnZ2VyQXJyYXkpLHRoaXMuX2NvbmZpZy50b2dnbGUmJnRoaXMudG9nZ2xlKCl9dmFyIHQ9YS5wcm90b3R5cGU7cmV0dXJuIHQudG9nZ2xlPWZ1bmN0aW9uKCl7cCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhtdCk/dGhpcy5oaWRlKCk6dGhpcy5zaG93KCl9LHQuc2hvdz1mdW5jdGlvbigpe3ZhciB0LGUsbj10aGlzO2lmKCF0aGlzLl9pc1RyYW5zaXRpb25pbmcmJiFwKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKG10KSYmKHRoaXMuX3BhcmVudCYmMD09PSh0PVtdLnNsaWNlLmNhbGwodGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYnQpKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuLl9jb25maWcucGFyZW50P3QuZ2V0QXR0cmlidXRlKCJkYXRhLXBhcmVudCIpPT09bi5fY29uZmlnLnBhcmVudDp0LmNsYXNzTGlzdC5jb250YWlucyhndCl9KSkubGVuZ3RoJiYodD1udWxsKSwhKHQmJihlPXAodCkubm90KHRoaXMuX3NlbGVjdG9yKS5kYXRhKGN0KSkmJmUuX2lzVHJhbnNpdGlvbmluZykpKXt2YXIgaT1wLkV2ZW50KHB0LlNIT1cpO2lmKHAodGhpcy5fZWxlbWVudCkudHJpZ2dlcihpKSwhaS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7dCYmKGEuX2pRdWVyeUludGVyZmFjZS5jYWxsKHAodCkubm90KHRoaXMuX3NlbGVjdG9yKSwiaGlkZSIpLGV8fHAodCkuZGF0YShjdCxudWxsKSk7dmFyIG89dGhpcy5fZ2V0RGltZW5zaW9uKCk7cCh0aGlzLl9lbGVtZW50KS5yZW1vdmVDbGFzcyhndCkuYWRkQ2xhc3MoX3QpLHRoaXMuX2VsZW1lbnQuc3R5bGVbb109MCx0aGlzLl90cmlnZ2VyQXJyYXkubGVuZ3RoJiZwKHRoaXMuX3RyaWdnZXJBcnJheSkucmVtb3ZlQ2xhc3ModnQpLmF0dHIoImFyaWEtZXhwYW5kZWQiLCEwKSx0aGlzLnNldFRyYW5zaXRpb25pbmcoITApO3ZhciByPSJzY3JvbGwiKyhvWzBdLnRvVXBwZXJDYXNlKCkrby5zbGljZSgxKSkscz1tLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRoaXMuX2VsZW1lbnQpO3AodGhpcy5fZWxlbWVudCkub25lKG0uVFJBTlNJVElPTl9FTkQsZnVuY3Rpb24oKXtwKG4uX2VsZW1lbnQpLnJlbW92ZUNsYXNzKF90KS5hZGRDbGFzcyhndCkuYWRkQ2xhc3MobXQpLG4uX2VsZW1lbnQuc3R5bGVbb109IiIsbi5zZXRUcmFuc2l0aW9uaW5nKCExKSxwKG4uX2VsZW1lbnQpLnRyaWdnZXIocHQuU0hPV04pfSkuZW11bGF0ZVRyYW5zaXRpb25FbmQocyksdGhpcy5fZWxlbWVudC5zdHlsZVtvXT10aGlzLl9lbGVtZW50W3JdKyJweCJ9fX0sdC5oaWRlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZighdGhpcy5faXNUcmFuc2l0aW9uaW5nJiZwKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKG10KSl7dmFyIGU9cC5FdmVudChwdC5ISURFKTtpZihwKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoZSksIWUuaXNEZWZhdWx0UHJldmVudGVkKCkpe3ZhciBuPXRoaXMuX2dldERpbWVuc2lvbigpO3RoaXMuX2VsZW1lbnQuc3R5bGVbbl09dGhpcy5fZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtuXSsicHgiLG0ucmVmbG93KHRoaXMuX2VsZW1lbnQpLHAodGhpcy5fZWxlbWVudCkuYWRkQ2xhc3MoX3QpLnJlbW92ZUNsYXNzKGd0KS5yZW1vdmVDbGFzcyhtdCk7dmFyIGk9dGhpcy5fdHJpZ2dlckFycmF5Lmxlbmd0aDtpZigwPGkpZm9yKHZhciBvPTA7bzxpO28rKyl7dmFyIHI9dGhpcy5fdHJpZ2dlckFycmF5W29dLHM9bS5nZXRTZWxlY3RvckZyb21FbGVtZW50KHIpO2lmKG51bGwhPT1zKXAoW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHMpKSkuaGFzQ2xhc3MobXQpfHxwKHIpLmFkZENsYXNzKHZ0KS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhMSl9dGhpcy5zZXRUcmFuc2l0aW9uaW5nKCEwKTt0aGlzLl9lbGVtZW50LnN0eWxlW25dPSIiO3ZhciBhPW0uZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fZWxlbWVudCk7cCh0aGlzLl9lbGVtZW50KS5vbmUobS5UUkFOU0lUSU9OX0VORCxmdW5jdGlvbigpe3Quc2V0VHJhbnNpdGlvbmluZyghMSkscCh0Ll9lbGVtZW50KS5yZW1vdmVDbGFzcyhfdCkuYWRkQ2xhc3MoZ3QpLnRyaWdnZXIocHQuSElEREVOKX0pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGEpfX19LHQuc2V0VHJhbnNpdGlvbmluZz1mdW5jdGlvbih0KXt0aGlzLl9pc1RyYW5zaXRpb25pbmc9dH0sdC5kaXNwb3NlPWZ1bmN0aW9uKCl7cC5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsY3QpLHRoaXMuX2NvbmZpZz1udWxsLHRoaXMuX3BhcmVudD1udWxsLHRoaXMuX2VsZW1lbnQ9bnVsbCx0aGlzLl90cmlnZ2VyQXJyYXk9bnVsbCx0aGlzLl9pc1RyYW5zaXRpb25pbmc9bnVsbH0sdC5fZ2V0Q29uZmlnPWZ1bmN0aW9uKHQpe3JldHVybih0PWwoe30sZnQsdCkpLnRvZ2dsZT1Cb29sZWFuKHQudG9nZ2xlKSxtLnR5cGVDaGVja0NvbmZpZyhsdCx0LGR0KSx0fSx0Ll9nZXREaW1lbnNpb249ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyh5dCk/eXQ6RXR9LHQuX2dldFBhcmVudD1mdW5jdGlvbigpe3ZhciB0LG49dGhpczttLmlzRWxlbWVudCh0aGlzLl9jb25maWcucGFyZW50KT8odD10aGlzLl9jb25maWcucGFyZW50LCJ1bmRlZmluZWQiIT10eXBlb2YgdGhpcy5fY29uZmlnLnBhcmVudC5qcXVlcnkmJih0PXRoaXMuX2NvbmZpZy5wYXJlbnRbMF0pKTp0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5fY29uZmlnLnBhcmVudCk7dmFyIGU9J1tkYXRhLXRvZ2dsZT0iY29sbGFwc2UiXVtkYXRhLXBhcmVudD0iJyt0aGlzLl9jb25maWcucGFyZW50KyciXScsaT1bXS5zbGljZS5jYWxsKHQucXVlcnlTZWxlY3RvckFsbChlKSk7cmV0dXJuIHAoaSkuZWFjaChmdW5jdGlvbih0LGUpe24uX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyhhLl9nZXRUYXJnZXRGcm9tRWxlbWVudChlKSxbZV0pfSksdH0sdC5fYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzPWZ1bmN0aW9uKHQsZSl7dmFyIG49cCh0KS5oYXNDbGFzcyhtdCk7ZS5sZW5ndGgmJnAoZSkudG9nZ2xlQ2xhc3ModnQsIW4pLmF0dHIoImFyaWEtZXhwYW5kZWQiLG4pfSxhLl9nZXRUYXJnZXRGcm9tRWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT1tLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQodCk7cmV0dXJuIGU/ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKTpudWxsfSxhLl9qUXVlcnlJbnRlcmZhY2U9ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PXAodGhpcyksZT10LmRhdGEoY3QpLG49bCh7fSxmdCx0LmRhdGEoKSwib2JqZWN0Ij09dHlwZW9mIGkmJmk/aTp7fSk7aWYoIWUmJm4udG9nZ2xlJiYvc2hvd3xoaWRlLy50ZXN0KGkpJiYobi50b2dnbGU9ITEpLGV8fChlPW5ldyBhKHRoaXMsbiksdC5kYXRhKGN0LGUpKSwic3RyaW5nIj09dHlwZW9mIGkpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgZVtpXSl0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBtZXRob2QgbmFtZWQgIicraSsnIicpO2VbaV0oKX19KX0scyhhLG51bGwsW3trZXk6IlZFUlNJT04iLGdldDpmdW5jdGlvbigpe3JldHVybiI0LjMuMSJ9fSx7a2V5OiJEZWZhdWx0IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZnR9fV0pLGF9KCk7cChkb2N1bWVudCkub24ocHQuQ0xJQ0tfREFUQV9BUEksd3QsZnVuY3Rpb24odCl7IkEiPT09dC5jdXJyZW50VGFyZ2V0LnRhZ05hbWUmJnQucHJldmVudERlZmF1bHQoKTt2YXIgbj1wKHRoaXMpLGU9bS5nZXRTZWxlY3RvckZyb21FbGVtZW50KHRoaXMpLGk9W10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGUpKTtwKGkpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1wKHRoaXMpLGU9dC5kYXRhKGN0KT8idG9nZ2xlIjpuLmRhdGEoKTtDdC5falF1ZXJ5SW50ZXJmYWNlLmNhbGwodCxlKX0pfSkscC5mbltsdF09Q3QuX2pRdWVyeUludGVyZmFjZSxwLmZuW2x0XS5Db25zdHJ1Y3Rvcj1DdCxwLmZuW2x0XS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHAuZm5bbHRdPXV0LEN0Ll9qUXVlcnlJbnRlcmZhY2V9O2Zvcih2YXIgVHQ9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJiJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQsU3Q9WyJFZGdlIiwiVHJpZGVudCIsIkZpcmVmb3giXSxEdD0wLEl0PTA7SXQ8U3QubGVuZ3RoO0l0Kz0xKWlmKFR0JiYwPD1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoU3RbSXRdKSl7RHQ9MTticmVha312YXIgQXQ9VHQmJndpbmRvdy5Qcm9taXNlP2Z1bmN0aW9uKHQpe3ZhciBlPSExO3JldHVybiBmdW5jdGlvbigpe2V8fChlPSEwLHdpbmRvdy5Qcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7ZT0hMSx0KCl9KSl9fTpmdW5jdGlvbih0KXt2YXIgZT0hMTtyZXR1cm4gZnVuY3Rpb24oKXtlfHwoZT0hMCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZT0hMSx0KCl9LER0KSl9fTtmdW5jdGlvbiBPdCh0KXtyZXR1cm4gdCYmIltvYmplY3QgRnVuY3Rpb25dIj09PXt9LnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gTnQodCxlKXtpZigxIT09dC5ub2RlVHlwZSlyZXR1cm5bXTt2YXIgbj10Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpO3JldHVybiBlP25bZV06bn1mdW5jdGlvbiBrdCh0KXtyZXR1cm4iSFRNTCI9PT10Lm5vZGVOYW1lP3Q6dC5wYXJlbnROb2RlfHx0Lmhvc3R9ZnVuY3Rpb24gTHQodCl7aWYoIXQpcmV0dXJuIGRvY3VtZW50LmJvZHk7c3dpdGNoKHQubm9kZU5hbWUpe2Nhc2UiSFRNTCI6Y2FzZSJCT0RZIjpyZXR1cm4gdC5vd25lckRvY3VtZW50LmJvZHk7Y2FzZSIjZG9jdW1lbnQiOnJldHVybiB0LmJvZHl9dmFyIGU9TnQodCksbj1lLm92ZXJmbG93LGk9ZS5vdmVyZmxvd1gsbz1lLm92ZXJmbG93WTtyZXR1cm4vKGF1dG98c2Nyb2xsfG92ZXJsYXkpLy50ZXN0KG4rbytpKT90Okx0KGt0KHQpKX12YXIgeHQ9VHQmJiEoIXdpbmRvdy5NU0lucHV0TWV0aG9kQ29udGV4dHx8IWRvY3VtZW50LmRvY3VtZW50TW9kZSksUHQ9VHQmJi9NU0lFIDEwLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO2Z1bmN0aW9uIEh0KHQpe3JldHVybiAxMT09PXQ/eHQ6MTA9PT10P1B0Onh0fHxQdH1mdW5jdGlvbiBqdCh0KXtpZighdClyZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O2Zvcih2YXIgZT1IdCgxMCk/ZG9jdW1lbnQuYm9keTpudWxsLG49dC5vZmZzZXRQYXJlbnR8fG51bGw7bj09PWUmJnQubmV4dEVsZW1lbnRTaWJsaW5nOyluPSh0PXQubmV4dEVsZW1lbnRTaWJsaW5nKS5vZmZzZXRQYXJlbnQ7dmFyIGk9biYmbi5ub2RlTmFtZTtyZXR1cm4gaSYmIkJPRFkiIT09aSYmIkhUTUwiIT09aT8tMSE9PVsiVEgiLCJURCIsIlRBQkxFIl0uaW5kZXhPZihuLm5vZGVOYW1lKSYmInN0YXRpYyI9PT1OdChuLCJwb3NpdGlvbiIpP2p0KG4pOm46dD90Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OmRvY3VtZW50LmRvY3VtZW50RWxlbWVudH1mdW5jdGlvbiBSdCh0KXtyZXR1cm4gbnVsbCE9PXQucGFyZW50Tm9kZT9SdCh0LnBhcmVudE5vZGUpOnR9ZnVuY3Rpb24gRnQodCxlKXtpZighKHQmJnQubm9kZVR5cGUmJmUmJmUubm9kZVR5cGUpKXJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7dmFyIG49dC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlKSZOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORyxpPW4/dDplLG89bj9lOnQscj1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO3Iuc2V0U3RhcnQoaSwwKSxyLnNldEVuZChvLDApO3ZhciBzLGEsbD1yLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyO2lmKHQhPT1sJiZlIT09bHx8aS5jb250YWlucyhvKSlyZXR1cm4iQk9EWSI9PT0oYT0ocz1sKS5ub2RlTmFtZSl8fCJIVE1MIiE9PWEmJmp0KHMuZmlyc3RFbGVtZW50Q2hpbGQpIT09cz9qdChsKTpsO3ZhciBjPVJ0KHQpO3JldHVybiBjLmhvc3Q/RnQoYy5ob3N0LGUpOkZ0KHQsUnQoZSkuaG9zdCl9ZnVuY3Rpb24gTXQodCl7dmFyIGU9InRvcCI9PT0oMTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJ0b3AiKT8ic2Nyb2xsVG9wIjoic2Nyb2xsTGVmdCIsbj10Lm5vZGVOYW1lO2lmKCJCT0RZIiE9PW4mJiJIVE1MIiE9PW4pcmV0dXJuIHRbZV07dmFyIGk9dC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtyZXR1cm4odC5vd25lckRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnR8fGkpW2VdfWZ1bmN0aW9uIFd0KHQsZSl7dmFyIG49IngiPT09ZT8iTGVmdCI6IlRvcCIsaT0iTGVmdCI9PT1uPyJSaWdodCI6IkJvdHRvbSI7cmV0dXJuIHBhcnNlRmxvYXQodFsiYm9yZGVyIituKyJXaWR0aCJdLDEwKStwYXJzZUZsb2F0KHRbImJvcmRlciIraSsiV2lkdGgiXSwxMCl9ZnVuY3Rpb24gVXQodCxlLG4saSl7cmV0dXJuIE1hdGgubWF4KGVbIm9mZnNldCIrdF0sZVsic2Nyb2xsIit0XSxuWyJjbGllbnQiK3RdLG5bIm9mZnNldCIrdF0sblsic2Nyb2xsIit0XSxIdCgxMCk/cGFyc2VJbnQoblsib2Zmc2V0Iit0XSkrcGFyc2VJbnQoaVsibWFyZ2luIisoIkhlaWdodCI9PT10PyJUb3AiOiJMZWZ0IildKStwYXJzZUludChpWyJtYXJnaW4iKygiSGVpZ2h0Ij09PXQ/IkJvdHRvbSI6IlJpZ2h0IildKTowKX1mdW5jdGlvbiBCdCh0KXt2YXIgZT10LmJvZHksbj10LmRvY3VtZW50RWxlbWVudCxpPUh0KDEwKSYmZ2V0Q29tcHV0ZWRTdHlsZShuKTtyZXR1cm57aGVpZ2h0OlV0KCJIZWlnaHQiLGUsbixpKSx3aWR0aDpVdCgiV2lkdGgiLGUsbixpKX19dmFyIHF0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaSh0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dO2kuZW51bWVyYWJsZT1pLmVudW1lcmFibGV8fCExLGkuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBpJiYoaS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsaS5rZXksaSl9fXJldHVybiBmdW5jdGlvbih0LGUsbil7cmV0dXJuIGUmJmkodC5wcm90b3R5cGUsZSksbiYmaSh0LG4pLHR9fSgpLEt0PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZSBpbiB0P09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp0W2VdPW4sdH0sUXQ9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIG49YXJndW1lbnRzW2VdO2Zvcih2YXIgaSBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLGkpJiYodFtpXT1uW2ldKX1yZXR1cm4gdH07ZnVuY3Rpb24gVnQodCl7cmV0dXJuIFF0KHt9LHQse3JpZ2h0OnQubGVmdCt0LndpZHRoLGJvdHRvbTp0LnRvcCt0LmhlaWdodH0pfWZ1bmN0aW9uIFl0KHQpe3ZhciBlPXt9O3RyeXtpZihIdA=="
}
Changelog:
{
"2020.04.17 15:38": "base64:LyohCiAgKiBCb290c3RyYXAgdjQuMy4xIChodHRwczovL2dldGJvb3RzdHJhcC5jb20vKQogICogQ29weXJpZ2h0IDIwMTEtMjAxOSBUaGUgQm9vdHN0cmFwIEF1dGhvcnMgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ncmFwaHMvY29udHJpYnV0b3JzKQogICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSkKICAqLwohZnVuY3Rpb24odCxlKXsib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJiJ1bmRlZmluZWQiIT10eXBlb2YgbW9kdWxlP2UoZXhwb3J0cyxyZXF1aXJlKCJqcXVlcnkiKSk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoWyJleHBvcnRzIiwianF1ZXJ5Il0sZSk6ZSgodD10fHxzZWxmKS5ib290c3RyYXA9e30sdC5qUXVlcnkpfSh0aGlzLGZ1bmN0aW9uKHQscCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkodCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9ZVtuXTtpLmVudW1lcmFibGU9aS5lbnVtZXJhYmxlfHwhMSxpLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gaSYmKGkud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGkua2V5LGkpfX1mdW5jdGlvbiBzKHQsZSxuKXtyZXR1cm4gZSYmaSh0LnByb3RvdHlwZSxlKSxuJiZpKHQsbiksdH1mdW5jdGlvbiBsKG8pe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30sZT1PYmplY3Qua2V5cyhyKTsiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKGU9ZS5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhyKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iocix0KS5lbnVtZXJhYmxlfSkpKSxlLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGUsbixpO2U9byxpPXJbbj10XSxuIGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7dmFsdWU6aSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbbl09aX0pfXJldHVybiBvfXA9cCYmcC5oYXNPd25Qcm9wZXJ0eSgiZGVmYXVsdCIpP3AuZGVmYXVsdDpwO3ZhciBlPSJ0cmFuc2l0aW9uZW5kIjtmdW5jdGlvbiBuKHQpe3ZhciBlPXRoaXMsbj0hMTtyZXR1cm4gcCh0aGlzKS5vbmUobS5UUkFOU0lUSU9OX0VORCxmdW5jdGlvbigpe249ITB9KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bnx8bS50cmlnZ2VyVHJhbnNpdGlvbkVuZChlKX0sdCksdGhpc312YXIgbT17VFJBTlNJVElPTl9FTkQ6ImJzVHJhbnNpdGlvbkVuZCIsZ2V0VUlEOmZ1bmN0aW9uKHQpe2Zvcig7dCs9fn4oMWU2Kk1hdGgucmFuZG9tKCkpLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpOyk7cmV0dXJuIHR9LGdldFNlbGVjdG9yRnJvbUVsZW1lbnQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRBdHRyaWJ1dGUoImRhdGEtdGFyZ2V0Iik7aWYoIWV8fCIjIj09PWUpe3ZhciBuPXQuZ2V0QXR0cmlidXRlKCJocmVmIik7ZT1uJiYiIyIhPT1uP24udHJpbSgpOiIifXRyeXtyZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKT9lOm51bGx9Y2F0Y2godCl7cmV0dXJuIG51bGx9fSxnZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudDpmdW5jdGlvbih0KXtpZighdClyZXR1cm4gMDt2YXIgZT1wKHQpLmNzcygidHJhbnNpdGlvbi1kdXJhdGlvbiIpLG49cCh0KS5jc3MoInRyYW5zaXRpb24tZGVsYXkiKSxpPXBhcnNlRmxvYXQoZSksbz1wYXJzZUZsb2F0KG4pO3JldHVybiBpfHxvPyhlPWUuc3BsaXQoIiwiKVswXSxuPW4uc3BsaXQoIiwiKVswXSwxZTMqKHBhcnNlRmxvYXQoZSkrcGFyc2VGbG9hdChuKSkpOjB9LHJlZmxvdzpmdW5jdGlvbih0KXtyZXR1cm4gdC5vZmZzZXRIZWlnaHR9LHRyaWdnZXJUcmFuc2l0aW9uRW5kOmZ1bmN0aW9uKHQpe3AodCkudHJpZ2dlcihlKX0sc3VwcG9ydHNUcmFuc2l0aW9uRW5kOmZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4oZSl9LGlzRWxlbWVudDpmdW5jdGlvbih0KXtyZXR1cm4odFswXXx8dCkubm9kZVR5cGV9LHR5cGVDaGVja0NvbmZpZzpmdW5jdGlvbih0LGUsbil7Zm9yKHZhciBpIGluIG4paWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4saSkpe3ZhciBvPW5baV0scj1lW2ldLHM9ciYmbS5pc0VsZW1lbnQocik/ImVsZW1lbnQiOihhPXIse30udG9TdHJpbmcuY2FsbChhKS5tYXRjaCgvXHMoW2Etel0rKS9pKVsxXS50b0xvd2VyQ2FzZSgpKTtpZighbmV3IFJlZ0V4cChvKS50ZXN0KHMpKXRocm93IG5ldyBFcnJvcih0LnRvVXBwZXJDYXNlKCkrJzogT3B0aW9uICInK2krJyIgcHJvdmlkZWQgdHlwZSAiJytzKyciIGJ1dCBleHBlY3RlZCB0eXBlICInK28rJyIuJyl9dmFyIGF9LGZpbmRTaGFkb3dSb290OmZ1bmN0aW9uKHQpe2lmKCFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXR0YWNoU2hhZG93KXJldHVybiBudWxsO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0LmdldFJvb3ROb2RlKXJldHVybiB0IGluc3RhbmNlb2YgU2hhZG93Um9vdD90OnQucGFyZW50Tm9kZT9tLmZpbmRTaGFkb3dSb290KHQucGFyZW50Tm9kZSk6bnVsbDt2YXIgZT10LmdldFJvb3ROb2RlKCk7cmV0dXJuIGUgaW5zdGFuY2VvZiBTaGFkb3dSb290P2U6bnVsbH19O3AuZm4uZW11bGF0ZVRyYW5zaXRpb25FbmQ9bixwLmV2ZW50LnNwZWNpYWxbbS5UUkFOU0lUSU9OX0VORF09e2JpbmRUeXBlOmUsZGVsZWdhdGVUeXBlOmUsaGFuZGxlOmZ1bmN0aW9uKHQpe2lmKHAodC50YXJnZXQpLmlzKHRoaXMpKXJldHVybiB0LmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19O3ZhciBvPSJhbGVydCIscj0iYnMuYWxlcnQiLGE9Ii4iK3IsYz1wLmZuW29dLGg9e0NMT1NFOiJjbG9zZSIrYSxDTE9TRUQ6ImNsb3NlZCIrYSxDTElDS19EQVRBX0FQSToiY2xpY2siK2ErIi5kYXRhLWFwaSJ9LHU9ImFsZXJ0IixmPSJmYWRlIixkPSJzaG93IixnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaSh0KXt0aGlzLl9lbGVtZW50PXR9dmFyIHQ9aS5wcm90b3R5cGU7cmV0dXJuIHQuY2xvc2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZWxlbWVudDt0JiYoZT10aGlzLl9nZXRSb290RWxlbWVudCh0KSksdGhpcy5fdHJpZ2dlckNsb3NlRXZlbnQoZSkuaXNEZWZhdWx0UHJldmVudGVkKCl8fHRoaXMuX3JlbW92ZUVsZW1lbnQoZSl9LHQuZGlzcG9zZT1mdW5jdGlvbigpe3AucmVtb3ZlRGF0YSh0aGlzLl9lbGVtZW50LHIpLHRoaXMuX2VsZW1lbnQ9bnVsbH0sdC5fZ2V0Um9vdEVsZW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9bS5nZXRTZWxlY3RvckZyb21FbGVtZW50KHQpLG49ITE7cmV0dXJuIGUmJihuPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSkpLG58fChuPXAodCkuY2xvc2VzdCgiLiIrdSlbMF0pLG59LHQuX3RyaWdnZXJDbG9zZUV2ZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXAuRXZlbnQoaC5DTE9TRSk7cmV0dXJuIHAodCkudHJpZ2dlcihlKSxlfSx0Ll9yZW1vdmVFbGVtZW50PWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXM7aWYocChlKS5yZW1vdmVDbGFzcyhkKSxwKGUpLmhhc0NsYXNzKGYpKXt2YXIgdD1tLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KGUpO3AoZSkub25lKG0uVFJBTlNJVElPTl9FTkQsZnVuY3Rpb24odCl7cmV0dXJuIG4uX2Rlc3Ryb3lFbGVtZW50KGUsdCl9KS5lbXVsYXRlVHJhbnNpdGlvbkVuZCh0KX1lbHNlIHRoaXMuX2Rlc3Ryb3lFbGVtZW50KGUpfSx0Ll9kZXN0cm95RWxlbWVudD1mdW5jdGlvbih0KXtwKHQpLmRldGFjaCgpLnRyaWdnZXIoaC5DTE9TRUQpLnJlbW92ZSgpfSxpLl9qUXVlcnlJbnRlcmZhY2U9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PXAodGhpcyksZT10LmRhdGEocik7ZXx8KGU9bmV3IGkodGhpcyksdC5kYXRhKHIsZSkpLCJjbG9zZSI9PT1uJiZlW25dKHRoaXMpfSl9LGkuX2hhbmRsZURpc21pc3M9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3QmJnQucHJldmVudERlZmF1bHQoKSxlLmNsb3NlKHRoaXMpfX0scyhpLG51bGwsW3trZXk6IlZFUlNJT04iLGdldDpmdW5jdGlvbigpe3JldHVybiI0LjMuMSJ9fV0pLGl9KCk7cChkb2N1bWVudCkub24oaC5DTElDS19EQVRBX0FQSSwnW2RhdGEtZGlzbWlzcz0iYWxlcnQiXScsZy5faGFuZGxlRGlzbWlzcyhuZXcgZykpLHAuZm5bb109Zy5falF1ZXJ5SW50ZXJmYWNlLHAuZm5bb10uQ29uc3RydWN0b3I9ZyxwLmZuW29dLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gcC5mbltvXT1jLGcuX2pRdWVyeUludGVyZmFjZX07dmFyIF89ImJ1dHRvbiIsdj0iYnMuYnV0dG9uIix5PSIuIit2LEU9Ii5kYXRhLWFwaSIsYj1wLmZuW19dLHc9ImFjdGl2ZSIsQz0iYnRuIixUPSJmb2N1cyIsUz0nW2RhdGEtdG9nZ2xlXj0iYnV0dG9uIl0nLEQ9J1tkYXRhLXRvZ2dsZT0iYnV0dG9ucyJdJyxJPSdpbnB1dDpub3QoW3R5cGU9ImhpZGRlbiJdKScsQT0iLmFjdGl2ZSIsTz0iLmJ0biIsTj17Q0xJQ0tfREFUQV9BUEk6ImNsaWNrIit5K0UsRk9DVVNfQkxVUl9EQVRBX0FQSToiZm9jdXMiK3krRSsiIGJsdXIiK3krRX0saz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4odCl7dGhpcy5fZWxlbWVudD10fXZhciB0PW4ucHJvdG90eXBlO3JldHVybiB0LnRvZ2dsZT1mdW5jdGlvbigpe3ZhciB0PSEwLGU9ITAsbj1wKHRoaXMuX2VsZW1lbnQpLmNsb3Nlc3QoRClbMF07aWYobil7dmFyIGk9dGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKEkpO2lmKGkpe2lmKCJyYWRpbyI9PT1pLnR5cGUpaWYoaS5jaGVja2VkJiZ0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyh3KSl0PSExO2Vsc2V7dmFyIG89bi5xdWVyeVNlbGVjdG9yKEEpO28mJnAobykucmVtb3ZlQ2xhc3Modyl9aWYodCl7aWYoaS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil8fG4uaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfHxpLmNsYXNzTGlzdC5jb250YWlucygiZGlzYWJsZWQiKXx8bi5jbGFzc0xpc3QuY29udGFpbnMoImRpc2FibGVkIikpcmV0dXJuO2kuY2hlY2tlZD0hdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnModykscChpKS50cmlnZ2VyKCJjaGFuZ2UiKX1pLmZvY3VzKCksZT0hMX19ZSYmdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIsIXRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKHcpKSx0JiZwKHRoaXMuX2VsZW1lbnQpLnRvZ2dsZUNsYXNzKHcpfSx0LmRpc3Bvc2U9ZnVuY3Rpb24oKXtwLnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCx2KSx0aGlzLl9lbGVtZW50PW51bGx9LG4uX2pRdWVyeUludGVyZmFjZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9cCh0aGlzKS5kYXRhKHYpO3R8fCh0PW5ldyBuKHRoaXMpLHAodGhpcykuZGF0YSh2LHQpKSwidG9nZ2xlIj09PWUmJnRbZV0oKX0pfSxzKG4sbnVsbCxbe2tleToiVkVSU0lPTiIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIjQuMy4xIn19XSksbn0oKTtwKGRvY3VtZW50KS5vbihOLkNMSUNLX0RBVEFfQVBJLFMsZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpO3ZhciBlPXQudGFyZ2V0O3AoZSkuaGFzQ2xhc3MoQyl8fChlPXAoZSkuY2xvc2VzdChPKSksay5falF1ZXJ5SW50ZXJmYWNlLmNhbGwocChlKSwidG9nZ2xlIil9KS5vbihOLkZPQ1VTX0JMVVJfREFUQV9BUEksUyxmdW5jdGlvbih0KXt2YXIgZT1wKHQudGFyZ2V0KS5jbG9zZXN0KE8pWzBdO3AoZSkudG9nZ2xlQ2xhc3MoVCwvXmZvY3VzKGluKT8kLy50ZXN0KHQudHlwZSkpfSkscC5mbltfXT1rLl9qUXVlcnlJbnRlcmZhY2UscC5mbltfXS5Db25zdHJ1Y3Rvcj1rLHAuZm5bX10ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBwLmZuW19dPWIsay5falF1ZXJ5SW50ZXJmYWNlfTt2YXIgTD0iY2Fyb3VzZWwiLHg9ImJzLmNhcm91c2VsIixQPSIuIit4LEg9Ii5kYXRhLWFwaSIsaj1wLmZuW0xdLFI9e2ludGVydmFsOjVlMyxrZXlib2FyZDohMCxzbGlkZTohMSxwYXVzZToiaG92ZXIiLHdyYXA6ITAsdG91Y2g6ITB9LEY9e2ludGVydmFsOiIobnVtYmVyfGJvb2xlYW4pIixrZXlib2FyZDoiYm9vbGVhbiIsc2xpZGU6Iihib29sZWFufHN0cmluZykiLHBhdXNlOiIoc3RyaW5nfGJvb2xlYW4pIix3cmFwOiJib29sZWFuIix0b3VjaDoiYm9vbGVhbiJ9LE09Im5leHQiLFc9InByZXYiLFU9ImxlZnQiLEI9InJpZ2h0IixxPXtTTElERToic2xpZGUiK1AsU0xJRDoic2xpZCIrUCxLRVlET1dOOiJrZXlkb3duIitQLE1PVVNFRU5URVI6Im1vdXNlZW50ZXIiK1AsTU9VU0VMRUFWRToibW91c2VsZWF2ZSIrUCxUT1VDSFNUQVJUOiJ0b3VjaHN0YXJ0IitQLFRPVUNITU9WRToidG91Y2htb3ZlIitQLFRPVUNIRU5EOiJ0b3VjaGVuZCIrUCxQT0lOVEVSRE9XTjoicG9pbnRlcmRvd24iK1AsUE9JTlRFUlVQOiJwb2ludGVydXAiK1AsRFJBR19TVEFSVDoiZHJhZ3N0YXJ0IitQLExPQURfREFUQV9BUEk6ImxvYWQiK1ArSCxDTElDS19EQVRBX0FQSToiY2xpY2siK1ArSH0sSz0iY2Fyb3VzZWwiLFE9ImFjdGl2ZSIsVj0ic2xpZGUiLFk9ImNhcm91c2VsLWl0ZW0tcmlnaHQiLHo9ImNhcm91c2VsLWl0ZW0tbGVmdCIsWD0iY2Fyb3VzZWwtaXRlbS1uZXh0IixHPSJjYXJvdXNlbC1pdGVtLXByZXYiLCQ9InBvaW50ZXItZXZlbnQiLEo9Ii5hY3RpdmUiLFo9Ii5hY3RpdmUuY2Fyb3VzZWwtaXRlbSIsdHQ9Ii5jYXJvdXNlbC1pdGVtIixldD0iLmNhcm91c2VsLWl0ZW0gaW1nIixudD0iLmNhcm91c2VsLWl0ZW0tbmV4dCwgLmNhcm91c2VsLWl0ZW0tcHJldiIsaXQ9Ii5jYXJvdXNlbC1pbmRpY2F0b3JzIixvdD0iW2RhdGEtc2xpZGVdLCBbZGF0YS1zbGlkZS10b10iLHJ0PSdbZGF0YS1yaWRlPSJjYXJvdXNlbCJdJyxzdD17VE9VQ0g6InRvdWNoIixQRU46InBlbiJ9LGF0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcih0LGUpe3RoaXMuX2l0ZW1zPW51bGwsdGhpcy5faW50ZXJ2YWw9bnVsbCx0aGlzLl9hY3RpdmVFbGVtZW50PW51bGwsdGhpcy5faXNQYXVzZWQ9ITEsdGhpcy5faXNTbGlkaW5nPSExLHRoaXMudG91Y2hUaW1lb3V0PW51bGwsdGhpcy50b3VjaFN0YXJ0WD0wLHRoaXMudG91Y2hEZWx0YVg9MCx0aGlzLl9jb25maWc9dGhpcy5fZ2V0Q29uZmlnKGUpLHRoaXMuX2VsZW1lbnQ9dCx0aGlzLl9pbmRpY2F0b3JzRWxlbWVudD10aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoaXQpLHRoaXMuX3RvdWNoU3VwcG9ydGVkPSJvbnRvdWNoc3RhcnQiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHwwPG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyx0aGlzLl9wb2ludGVyRXZlbnQ9Qm9vbGVhbih3aW5kb3cuUG9pbnRlckV2ZW50fHx3aW5kb3cuTVNQb2ludGVyRXZlbnQpLHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJzKCl9dmFyIHQ9ci5wcm90b3R5cGU7cmV0dXJuIHQubmV4dD1mdW5jdGlvbigpe3RoaXMuX2lzU2xpZGluZ3x8dGhpcy5fc2xpZGUoTSl9LHQubmV4dFdoZW5WaXNpYmxlPWZ1bmN0aW9uKCl7IWRvY3VtZW50LmhpZGRlbiYmcCh0aGlzLl9lbGVtZW50KS5pcygiOnZpc2libGUiKSYmImhpZGRlbiIhPT1wKHRoaXMuX2VsZW1lbnQpLmNzcygidmlzaWJpbGl0eSIpJiZ0aGlzLm5leHQoKX0sdC5wcmV2PWZ1bmN0aW9uKCl7dGhpcy5faXNTbGlkaW5nfHx0aGlzLl9zbGlkZShXKX0sdC5wYXVzZT1mdW5jdGlvbih0KXt0fHwodGhpcy5faXNQYXVzZWQ9ITApLHRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcihudCkmJihtLnRyaWdnZXJUcmFuc2l0aW9uRW5kKHRoaXMuX2VsZW1lbnQpLHRoaXMuY3ljbGUoITApKSxjbGVhckludGVydmFsKHRoaXMuX2ludGVydmFsKSx0aGlzLl9pbnRlcnZhbD1udWxsfSx0LmN5Y2xlPWZ1bmN0aW9uKHQpe3R8fCh0aGlzLl9pc1BhdXNlZD0hMSksdGhpcy5faW50ZXJ2YWwmJihjbGVhckludGVydmFsKHRoaXMuX2ludGVydmFsKSx0aGlzLl9pbnRlcnZhbD1udWxsKSx0aGlzLl9jb25maWcuaW50ZXJ2YWwmJiF0aGlzLl9pc1BhdXNlZCYmKHRoaXMuX2ludGVydmFsPXNldEludGVydmFsKChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU/dGhpcy5uZXh0V2hlblZpc2libGU6dGhpcy5uZXh0KS5iaW5kKHRoaXMpLHRoaXMuX2NvbmZpZy5pbnRlcnZhbCkpfSx0LnRvPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fYWN0aXZlRWxlbWVudD10aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoWik7dmFyIG49dGhpcy5fZ2V0SXRlbUluZGV4KHRoaXMuX2FjdGl2ZUVsZW1lbnQpO2lmKCEodD50aGlzLl9pdGVtcy5sZW5ndGgtMXx8dDwwKSlpZih0aGlzLl9pc1NsaWRpbmcpcCh0aGlzLl9lbGVtZW50KS5vbmUocS5TTElELGZ1bmN0aW9uKCl7cmV0dXJuIGUudG8odCl9KTtlbHNle2lmKG49PT10KXJldHVybiB0aGlzLnBhdXNlKCksdm9pZCB0aGlzLmN5Y2xlKCk7dmFyIGk9bjx0P006Vzt0aGlzLl9zbGlkZShpLHRoaXMuX2l0ZW1zW3RdKX19LHQuZGlzcG9zZT1mdW5jdGlvbigpe3AodGhpcy5fZWxlbWVudCkub2ZmKFApLHAucmVtb3ZlRGF0YSh0aGlzLl9lbGVtZW50LHgpLHRoaXMuX2l0ZW1zPW51bGwsdGhpcy5fY29uZmlnPW51bGwsdGhpcy5fZWxlbWVudD1udWxsLHRoaXMuX2ludGVydmFsPW51bGwsdGhpcy5faXNQYXVzZWQ9bnVsbCx0aGlzLl9pc1NsaWRpbmc9bnVsbCx0aGlzLl9hY3RpdmVFbGVtZW50PW51bGwsdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQ9bnVsbH0sdC5fZ2V0Q29uZmlnPWZ1bmN0aW9uKHQpe3JldHVybiB0PWwoe30sUix0KSxtLnR5cGVDaGVja0NvbmZpZyhMLHQsRiksdH0sdC5faGFuZGxlU3dpcGU9ZnVuY3Rpb24oKXt2YXIgdD1NYXRoLmFicyh0aGlzLnRvdWNoRGVsdGFYKTtpZighKHQ8PTQwKSl7dmFyIGU9dC90aGlzLnRvdWNoRGVsdGFYOzA8ZSYmdGhpcy5wcmV2KCksZTwwJiZ0aGlzLm5leHQoKX19LHQuX2FkZEV2ZW50TGlzdGVuZXJzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLl9jb25maWcua2V5Ym9hcmQmJnAodGhpcy5fZWxlbWVudCkub24ocS5LRVlET1dOLGZ1bmN0aW9uKHQpe3JldHVybiBlLl9rZXlkb3duKHQpfSksImhvdmVyIj09PXRoaXMuX2NvbmZpZy5wYXVzZSYmcCh0aGlzLl9lbGVtZW50KS5vbihxLk1PVVNFRU5URVIsZnVuY3Rpb24odCl7cmV0dXJuIGUucGF1c2UodCl9KS5vbihxLk1PVVNFTEVBVkUsZnVuY3Rpb24odCl7cmV0dXJuIGUuY3ljbGUodCl9KSx0aGlzLl9jb25maWcudG91Y2gmJnRoaXMuX2FkZFRvdWNoRXZlbnRMaXN0ZW5lcnMoKX0sdC5fYWRkVG91Y2hFdmVudExpc3RlbmVycz1mdW5jdGlvbigpe3ZhciBuPXRoaXM7aWYodGhpcy5fdG91Y2hTdXBwb3J0ZWQpe3ZhciBlPWZ1bmN0aW9uKHQpe24uX3BvaW50ZXJFdmVudCYmc3RbdC5vcmlnaW5hbEV2ZW50LnBvaW50ZXJUeXBlLnRvVXBwZXJDYXNlKCldP24udG91Y2hTdGFydFg9dC5vcmlnaW5hbEV2ZW50LmNsaWVudFg6bi5fcG9pbnRlckV2ZW50fHwobi50b3VjaFN0YXJ0WD10Lm9yaWdpbmFsRXZlbnQudG91Y2hlc1swXS5jbGllbnRYKX0saT1mdW5jdGlvbih0KXtuLl9wb2ludGVyRXZlbnQmJnN0W3Qub3JpZ2luYWxFdmVudC5wb2ludGVyVHlwZS50b1VwcGVyQ2FzZSgpXSYmKG4udG91Y2hEZWx0YVg9dC5vcmlnaW5hbEV2ZW50LmNsaWVudFgtbi50b3VjaFN0YXJ0WCksbi5faGFuZGxlU3dpcGUoKSwiaG92ZXIiPT09bi5fY29uZmlnLnBhdXNlJiYobi5wYXVzZSgpLG4udG91Y2hUaW1lb3V0JiZjbGVhclRpbWVvdXQobi50b3VjaFRpbWVvdXQpLG4udG91Y2hUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24odCl7cmV0dXJuIG4uY3ljbGUodCl9LDUwMCtuLl9jb25maWcuaW50ZXJ2YWwpKX07cCh0aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZXQpKS5vbihxLkRSQUdfU1RBUlQsZnVuY3Rpb24odCl7cmV0dXJuIHQucHJldmVudERlZmF1bHQoKX0pLHRoaXMuX3BvaW50ZXJFdmVudD8ocCh0aGlzLl9lbGVtZW50KS5vbihxLlBPSU5URVJET1dOLGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpfSkscCh0aGlzLl9lbGVtZW50KS5vbihxLlBPSU5URVJVUCxmdW5jdGlvbih0KXtyZXR1cm4gaSh0KX0pLHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZCgkKSk6KHAodGhpcy5fZWxlbWVudCkub24ocS5UT1VDSFNUQVJULGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpfSkscCh0aGlzLl9lbGVtZW50KS5vbihxLlRPVUNITU9WRSxmdW5jdGlvbih0KXt2YXIgZTsoZT10KS5vcmlnaW5hbEV2ZW50LnRvdWNoZXMmJjE8ZS5vcmlnaW5hbEV2ZW50LnRvdWNoZXMubGVuZ3RoP24udG91Y2hEZWx0YVg9MDpuLnRvdWNoRGVsdGFYPWUub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLmNsaWVudFgtbi50b3VjaFN0YXJ0WH0pLHAodGhpcy5fZWxlbWVudCkub24ocS5UT1VDSEVORCxmdW5jdGlvbih0KXtyZXR1cm4gaSh0KX0pKX19LHQuX2tleWRvd249ZnVuY3Rpb24odCl7aWYoIS9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QodC50YXJnZXQudGFnTmFtZSkpc3dpdGNoKHQud2hpY2gpe2Nhc2UgMzc6dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMucHJldigpO2JyZWFrO2Nhc2UgMzk6dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMubmV4dCgpfX0sdC5fZ2V0SXRlbUluZGV4PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pdGVtcz10JiZ0LnBhcmVudE5vZGU/W10uc2xpY2UuY2FsbCh0LnBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFsbCh0dCkpOltdLHRoaXMuX2l0ZW1zLmluZGV4T2YodCl9LHQuX2dldEl0ZW1CeURpcmVjdGlvbj1mdW5jdGlvbih0LGUpe3ZhciBuPXQ9PT1NLGk9dD09PVcsbz10aGlzLl9nZXRJdGVtSW5kZXgoZSkscj10aGlzLl9pdGVtcy5sZW5ndGgtMTtpZigoaSYmMD09PW98fG4mJm89PT1yKSYmIXRoaXMuX2NvbmZpZy53cmFwKXJldHVybiBlO3ZhciBzPShvKyh0PT09Vz8tMToxKSkldGhpcy5faXRlbXMubGVuZ3RoO3JldHVybi0xPT09cz90aGlzLl9pdGVtc1t0aGlzLl9pdGVtcy5sZW5ndGgtMV06dGhpcy5faXRlbXNbc119LHQuX3RyaWdnZXJTbGlkZUV2ZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fZ2V0SXRlbUluZGV4KHQpLGk9dGhpcy5fZ2V0SXRlbUluZGV4KHRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcihaKSksbz1wLkV2ZW50KHEuU0xJREUse3JlbGF0ZWRUYXJnZXQ6dCxkaXJlY3Rpb246ZSxmcm9tOmksdG86bn0pO3JldHVybiBwKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIobyksb30sdC5fc2V0QWN0aXZlSW5kaWNhdG9yRWxlbWVudD1mdW5jdGlvbih0KXtpZih0aGlzLl9pbmRpY2F0b3JzRWxlbWVudCl7dmFyIGU9W10uc2xpY2UuY2FsbCh0aGlzLl9pbmRpY2F0b3JzRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKEopKTtwKGUpLnJlbW92ZUNsYXNzKFEpO3ZhciBuPXRoaXMuX2luZGljYXRvcnNFbGVtZW50LmNoaWxkcmVuW3RoaXMuX2dldEl0ZW1JbmRleCh0KV07biYmcChuKS5hZGRDbGFzcyhRKX19LHQuX3NsaWRlPWZ1bmN0aW9uKHQsZSl7dmFyIG4saSxvLHI9dGhpcyxzPXRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcihaKSxhPXRoaXMuX2dldEl0ZW1JbmRleChzKSxsPWV8fHMmJnRoaXMuX2dldEl0ZW1CeURpcmVjdGlvbih0LHMpLGM9dGhpcy5fZ2V0SXRlbUluZGV4KGwpLGg9Qm9vbGVhbih0aGlzLl9pbnRlcnZhbCk7aWYobz10PT09TT8obj16LGk9WCxVKToobj1ZLGk9RyxCKSxsJiZwKGwpLmhhc0NsYXNzKFEpKXRoaXMuX2lzU2xpZGluZz0hMTtlbHNlIGlmKCF0aGlzLl90cmlnZ2VyU2xpZGVFdmVudChsLG8pLmlzRGVmYXVsdFByZXZlbnRlZCgpJiZzJiZsKXt0aGlzLl9pc1NsaWRpbmc9ITAsaCYmdGhpcy5wYXVzZSgpLHRoaXMuX3NldEFjdGl2ZUluZGljYXRvckVsZW1lbnQobCk7dmFyIHU9cC5FdmVudChxLlNMSUQse3JlbGF0ZWRUYXJnZXQ6bCxkaXJlY3Rpb246byxmcm9tOmEsdG86Y30pO2lmKHAodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoVikpe3AobCkuYWRkQ2xhc3MoaSksbS5yZWZsb3cobCkscChzKS5hZGRDbGFzcyhuKSxwKGwpLmFkZENsYXNzKG4pO3ZhciBmPXBhcnNlSW50KGwuZ2V0QXR0cmlidXRlKCJkYXRhLWludGVydmFsIiksMTApO3RoaXMuX2NvbmZpZy5pbnRlcnZhbD1mPyh0aGlzLl9jb25maWcuZGVmYXVsdEludGVydmFsPXRoaXMuX2NvbmZpZy5kZWZhdWx0SW50ZXJ2YWx8fHRoaXMuX2NvbmZpZy5pbnRlcnZhbCxmKTp0aGlzLl9jb25maWcuZGVmYXVsdEludGVydmFsfHx0aGlzLl9jb25maWcuaW50ZXJ2YWw7dmFyIGQ9bS5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudChzKTtwKHMpLm9uZShtLlRSQU5TSVRJT05fRU5ELGZ1bmN0aW9uKCl7cChsKS5yZW1vdmVDbGFzcyhuKyIgIitpKS5hZGRDbGFzcyhRKSxwKHMpLnJlbW92ZUNsYXNzKFErIiAiK2krIiAiK24pLHIuX2lzU2xpZGluZz0hMSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIHAoci5fZWxlbWVudCkudHJpZ2dlcih1KX0sMCl9KS5lbXVsYXRlVHJhbnNpdGlvbkVuZChkKX1lbHNlIHAocykucmVtb3ZlQ2xhc3MoUSkscChsKS5hZGRDbGFzcyhRKSx0aGlzLl9pc1NsaWRpbmc9ITEscCh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKHUpO2gmJnRoaXMuY3ljbGUoKX19LHIuX2pRdWVyeUludGVyZmFjZT1mdW5jdGlvbihpKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9cCh0aGlzKS5kYXRhKHgpLGU9bCh7fSxSLHAodGhpcykuZGF0YSgpKTsib2JqZWN0Ij09dHlwZW9mIGkmJihlPWwoe30sZSxpKSk7dmFyIG49InN0cmluZyI9PXR5cGVvZiBpP2k6ZS5zbGlkZTtpZih0fHwodD1uZXcgcih0aGlzLGUpLHAodGhpcykuZGF0YSh4LHQpKSwibnVtYmVyIj09dHlwZW9mIGkpdC50byhpKTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2Ygbil7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiB0W25dKXRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG1ldGhvZCBuYW1lZCAiJytuKyciJyk7dFtuXSgpfWVsc2UgZS5pbnRlcnZhbCYmZS5yaWRlJiYodC5wYXVzZSgpLHQuY3ljbGUoKSl9KX0sci5fZGF0YUFwaUNsaWNrSGFuZGxlcj1mdW5jdGlvbih0KXt2YXIgZT1tLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQodGhpcyk7aWYoZSl7dmFyIG49cChlKVswXTtpZihuJiZwKG4pLmhhc0NsYXNzKEspKXt2YXIgaT1sKHt9LHAobikuZGF0YSgpLHAodGhpcykuZGF0YSgpKSxvPXRoaXMuZ2V0QXR0cmlidXRlKCJkYXRhLXNsaWRlLXRvIik7byYmKGkuaW50ZXJ2YWw9ITEpLHIuX2pRdWVyeUludGVyZmFjZS5jYWxsKHAobiksaSksbyYmcChuKS5kYXRhKHgpLnRvKG8pLHQucHJldmVudERlZmF1bHQoKX19fSxzKHIsbnVsbCxbe2tleToiVkVSU0lPTiIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIjQuMy4xIn19LHtrZXk6IkRlZmF1bHQiLGdldDpmdW5jdGlvbigpe3JldHVybiBSfX1dKSxyfSgpO3AoZG9jdW1lbnQpLm9uKHEuQ0xJQ0tfREFUQV9BUEksb3QsYXQuX2RhdGFBcGlDbGlja0hhbmRsZXIpLHAod2luZG93KS5vbihxLkxPQURfREFUQV9BUEksZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHJ0KSksZT0wLG49dC5sZW5ndGg7ZTxuO2UrKyl7dmFyIGk9cCh0W2VdKTthdC5falF1ZXJ5SW50ZXJmYWNlLmNhbGwoaSxpLmRhdGEoKSl9fSkscC5mbltMXT1hdC5falF1ZXJ5SW50ZXJmYWNlLHAuZm5bTF0uQ29uc3RydWN0b3I9YXQscC5mbltMXS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHAuZm5bTF09aixhdC5falF1ZXJ5SW50ZXJmYWNlfTt2YXIgbHQ9ImNvbGxhcHNlIixjdD0iYnMuY29sbGFwc2UiLGh0PSIuIitjdCx1dD1wLmZuW2x0XSxmdD17dG9nZ2xlOiEwLHBhcmVudDoiIn0sZHQ9e3RvZ2dsZToiYm9vbGVhbiIscGFyZW50OiIoc3RyaW5nfGVsZW1lbnQpIn0scHQ9e1NIT1c6InNob3ciK2h0LFNIT1dOOiJzaG93biIraHQsSElERToiaGlkZSIraHQsSElEREVOOiJoaWRkZW4iK2h0LENMSUNLX0RBVEFfQVBJOiJjbGljayIraHQrIi5kYXRhLWFwaSJ9LG10PSJzaG93IixndD0iY29sbGFwc2UiLF90PSJjb2xsYXBzaW5nIix2dD0iY29sbGFwc2VkIix5dD0id2lkdGgiLEV0PSJoZWlnaHQiLGJ0PSIuc2hvdywgLmNvbGxhcHNpbmciLHd0PSdbZGF0YS10b2dnbGU9ImNvbGxhcHNlIl0nLEN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShlLHQpe3RoaXMuX2lzVHJhbnNpdGlvbmluZz0hMSx0aGlzLl9lbGVtZW50PWUsdGhpcy5fY29uZmlnPXRoaXMuX2dldENvbmZpZyh0KSx0aGlzLl90cmlnZ2VyQXJyYXk9W10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS10b2dnbGU9ImNvbGxhcHNlIl1baHJlZj0iIycrZS5pZCsnIl0sW2RhdGEtdG9nZ2xlPSJjb2xsYXBzZSJdW2RhdGEtdGFyZ2V0PSIjJytlLmlkKyciXScpKTtmb3IodmFyIG49W10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHd0KSksaT0wLG89bi5sZW5ndGg7aTxvO2krKyl7dmFyIHI9bltpXSxzPW0uZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChyKSxhPVtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzKSkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0PT09ZX0pO251bGwhPT1zJiYwPGEubGVuZ3RoJiYodGhpcy5fc2VsZWN0b3I9cyx0aGlzLl90cmlnZ2VyQXJyYXkucHVzaChyKSl9dGhpcy5fcGFyZW50PXRoaXMuX2NvbmZpZy5wYXJlbnQ/dGhpcy5fZ2V0UGFyZW50KCk6bnVsbCx0aGlzLl9jb25maWcucGFyZW50fHx0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3ModGhpcy5fZWxlbWVudCx0aGlzLl90cmlnZ2VyQXJyYXkpLHRoaXMuX2NvbmZpZy50b2dnbGUmJnRoaXMudG9nZ2xlKCl9dmFyIHQ9YS5wcm90b3R5cGU7cmV0dXJuIHQudG9nZ2xlPWZ1bmN0aW9uKCl7cCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhtdCk/dGhpcy5oaWRlKCk6dGhpcy5zaG93KCl9LHQuc2hvdz1mdW5jdGlvbigpe3ZhciB0LGUsbj10aGlzO2lmKCF0aGlzLl9pc1RyYW5zaXRpb25pbmcmJiFwKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKG10KSYmKHRoaXMuX3BhcmVudCYmMD09PSh0PVtdLnNsaWNlLmNhbGwodGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYnQpKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuLl9jb25maWcucGFyZW50P3QuZ2V0QXR0cmlidXRlKCJkYXRhLXBhcmVudCIpPT09bi5fY29uZmlnLnBhcmVudDp0LmNsYXNzTGlzdC5jb250YWlucyhndCl9KSkubGVuZ3RoJiYodD1udWxsKSwhKHQmJihlPXAodCkubm90KHRoaXMuX3NlbGVjdG9yKS5kYXRhKGN0KSkmJmUuX2lzVHJhbnNpdGlvbmluZykpKXt2YXIgaT1wLkV2ZW50KHB0LlNIT1cpO2lmKHAodGhpcy5fZWxlbWVudCkudHJpZ2dlcihpKSwhaS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7dCYmKGEuX2pRdWVyeUludGVyZmFjZS5jYWxsKHAodCkubm90KHRoaXMuX3NlbGVjdG9yKSwiaGlkZSIpLGV8fHAodCkuZGF0YShjdCxudWxsKSk7dmFyIG89dGhpcy5fZ2V0RGltZW5zaW9uKCk7cCh0aGlzLl9lbGVtZW50KS5yZW1vdmVDbGFzcyhndCkuYWRkQ2xhc3MoX3QpLHRoaXMuX2VsZW1lbnQuc3R5bGVbb109MCx0aGlzLl90cmlnZ2VyQXJyYXkubGVuZ3RoJiZwKHRoaXMuX3RyaWdnZXJBcnJheSkucmVtb3ZlQ2xhc3ModnQpLmF0dHIoImFyaWEtZXhwYW5kZWQiLCEwKSx0aGlzLnNldFRyYW5zaXRpb25pbmcoITApO3ZhciByPSJzY3JvbGwiKyhvWzBdLnRvVXBwZXJDYXNlKCkrby5zbGljZSgxKSkscz1tLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRoaXMuX2VsZW1lbnQpO3AodGhpcy5fZWxlbWVudCkub25lKG0uVFJBTlNJVElPTl9FTkQsZnVuY3Rpb24oKXtwKG4uX2VsZW1lbnQpLnJlbW92ZUNsYXNzKF90KS5hZGRDbGFzcyhndCkuYWRkQ2xhc3MobXQpLG4uX2VsZW1lbnQuc3R5bGVbb109IiIsbi5zZXRUcmFuc2l0aW9uaW5nKCExKSxwKG4uX2VsZW1lbnQpLnRyaWdnZXIocHQuU0hPV04pfSkuZW11bGF0ZVRyYW5zaXRpb25FbmQocyksdGhpcy5fZWxlbWVudC5zdHlsZVtvXT10aGlzLl9lbGVtZW50W3JdKyJweCJ9fX0sdC5oaWRlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZighdGhpcy5faXNUcmFuc2l0aW9uaW5nJiZwKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKG10KSl7dmFyIGU9cC5FdmVudChwdC5ISURFKTtpZihwKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoZSksIWUuaXNEZWZhdWx0UHJldmVudGVkKCkpe3ZhciBuPXRoaXMuX2dldERpbWVuc2lvbigpO3RoaXMuX2VsZW1lbnQuc3R5bGVbbl09dGhpcy5fZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtuXSsicHgiLG0ucmVmbG93KHRoaXMuX2VsZW1lbnQpLHAodGhpcy5fZWxlbWVudCkuYWRkQ2xhc3MoX3QpLnJlbW92ZUNsYXNzKGd0KS5yZW1vdmVDbGFzcyhtdCk7dmFyIGk9dGhpcy5fdHJpZ2dlckFycmF5Lmxlbmd0aDtpZigwPGkpZm9yKHZhciBvPTA7bzxpO28rKyl7dmFyIHI9dGhpcy5fdHJpZ2dlckFycmF5W29dLHM9bS5nZXRTZWxlY3RvckZyb21FbGVtZW50KHIpO2lmKG51bGwhPT1zKXAoW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHMpKSkuaGFzQ2xhc3MobXQpfHxwKHIpLmFkZENsYXNzKHZ0KS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhMSl9dGhpcy5zZXRUcmFuc2l0aW9uaW5nKCEwKTt0aGlzLl9lbGVtZW50LnN0eWxlW25dPSIiO3ZhciBhPW0uZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fZWxlbWVudCk7cCh0aGlzLl9lbGVtZW50KS5vbmUobS5UUkFOU0lUSU9OX0VORCxmdW5jdGlvbigpe3Quc2V0VHJhbnNpdGlvbmluZyghMSkscCh0Ll9lbGVtZW50KS5yZW1vdmVDbGFzcyhfdCkuYWRkQ2xhc3MoZ3QpLnRyaWdnZXIocHQuSElEREVOKX0pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGEpfX19LHQuc2V0VHJhbnNpdGlvbmluZz1mdW5jdGlvbih0KXt0aGlzLl9pc1RyYW5zaXRpb25pbmc9dH0sdC5kaXNwb3NlPWZ1bmN0aW9uKCl7cC5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsY3QpLHRoaXMuX2NvbmZpZz1udWxsLHRoaXMuX3BhcmVudD1udWxsLHRoaXMuX2VsZW1lbnQ9bnVsbCx0aGlzLl90cmlnZ2VyQXJyYXk9bnVsbCx0aGlzLl9pc1RyYW5zaXRpb25pbmc9bnVsbH0sdC5fZ2V0Q29uZmlnPWZ1bmN0aW9uKHQpe3JldHVybih0PWwoe30sZnQsdCkpLnRvZ2dsZT1Cb29sZWFuKHQudG9nZ2xlKSxtLnR5cGVDaGVja0NvbmZpZyhsdCx0LGR0KSx0fSx0Ll9nZXREaW1lbnNpb249ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyh5dCk/eXQ6RXR9LHQuX2dldFBhcmVudD1mdW5jdGlvbigpe3ZhciB0LG49dGhpczttLmlzRWxlbWVudCh0aGlzLl9jb25maWcucGFyZW50KT8odD10aGlzLl9jb25maWcucGFyZW50LCJ1bmRlZmluZWQiIT10eXBlb2YgdGhpcy5fY29uZmlnLnBhcmVudC5qcXVlcnkmJih0PXRoaXMuX2NvbmZpZy5wYXJlbnRbMF0pKTp0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5fY29uZmlnLnBhcmVudCk7dmFyIGU9J1tkYXRhLXRvZ2dsZT0iY29sbGFwc2UiXVtkYXRhLXBhcmVudD0iJyt0aGlzLl9jb25maWcucGFyZW50KyciXScsaT1bXS5zbGljZS5jYWxsKHQucXVlcnlTZWxlY3RvckFsbChlKSk7cmV0dXJuIHAoaSkuZWFjaChmdW5jdGlvbih0LGUpe24uX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyhhLl9nZXRUYXJnZXRGcm9tRWxlbWVudChlKSxbZV0pfSksdH0sdC5fYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzPWZ1bmN0aW9uKHQsZSl7dmFyIG49cCh0KS5oYXNDbGFzcyhtdCk7ZS5sZW5ndGgmJnAoZSkudG9nZ2xlQ2xhc3ModnQsIW4pLmF0dHIoImFyaWEtZXhwYW5kZWQiLG4pfSxhLl9nZXRUYXJnZXRGcm9tRWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT1tLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQodCk7cmV0dXJuIGU/ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKTpudWxsfSxhLl9qUXVlcnlJbnRlcmZhY2U9ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PXAodGhpcyksZT10LmRhdGEoY3QpLG49bCh7fSxmdCx0LmRhdGEoKSwib2JqZWN0Ij09dHlwZW9mIGkmJmk/aTp7fSk7aWYoIWUmJm4udG9nZ2xlJiYvc2hvd3xoaWRlLy50ZXN0KGkpJiYobi50b2dnbGU9ITEpLGV8fChlPW5ldyBhKHRoaXMsbiksdC5kYXRhKGN0LGUpKSwic3RyaW5nIj09dHlwZW9mIGkpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgZVtpXSl0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBtZXRob2QgbmFtZWQgIicraSsnIicpO2VbaV0oKX19KX0scyhhLG51bGwsW3trZXk6IlZFUlNJT04iLGdldDpmdW5jdGlvbigpe3JldHVybiI0LjMuMSJ9fSx7a2V5OiJEZWZhdWx0IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZnR9fV0pLGF9KCk7cChkb2N1bWVudCkub24ocHQuQ0xJQ0tfREFUQV9BUEksd3QsZnVuY3Rpb24odCl7IkEiPT09dC5jdXJyZW50VGFyZ2V0LnRhZ05hbWUmJnQucHJldmVudERlZmF1bHQoKTt2YXIgbj1wKHRoaXMpLGU9bS5nZXRTZWxlY3RvckZyb21FbGVtZW50KHRoaXMpLGk9W10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGUpKTtwKGkpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1wKHRoaXMpLGU9dC5kYXRhKGN0KT8idG9nZ2xlIjpuLmRhdGEoKTtDdC5falF1ZXJ5SW50ZXJmYWNlLmNhbGwodCxlKX0pfSkscC5mbltsdF09Q3QuX2pRdWVyeUludGVyZmFjZSxwLmZuW2x0XS5Db25zdHJ1Y3Rvcj1DdCxwLmZuW2x0XS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHAuZm5bbHRdPXV0LEN0Ll9qUXVlcnlJbnRlcmZhY2V9O2Zvcih2YXIgVHQ9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJiJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQsU3Q9WyJFZGdlIiwiVHJpZGVudCIsIkZpcmVmb3giXSxEdD0wLEl0PTA7SXQ8U3QubGVuZ3RoO0l0Kz0xKWlmKFR0JiYwPD1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoU3RbSXRdKSl7RHQ9MTticmVha312YXIgQXQ9VHQmJndpbmRvdy5Qcm9taXNlP2Z1bmN0aW9uKHQpe3ZhciBlPSExO3JldHVybiBmdW5jdGlvbigpe2V8fChlPSEwLHdpbmRvdy5Qcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7ZT0hMSx0KCl9KSl9fTpmdW5jdGlvbih0KXt2YXIgZT0hMTtyZXR1cm4gZnVuY3Rpb24oKXtlfHwoZT0hMCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZT0hMSx0KCl9LER0KSl9fTtmdW5jdGlvbiBPdCh0KXtyZXR1cm4gdCYmIltvYmplY3QgRnVuY3Rpb25dIj09PXt9LnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gTnQodCxlKXtpZigxIT09dC5ub2RlVHlwZSlyZXR1cm5bXTt2YXIgbj10Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpO3JldHVybiBlP25bZV06bn1mdW5jdGlvbiBrdCh0KXtyZXR1cm4iSFRNTCI9PT10Lm5vZGVOYW1lP3Q6dC5wYXJlbnROb2RlfHx0Lmhvc3R9ZnVuY3Rpb24gTHQodCl7aWYoIXQpcmV0dXJuIGRvY3VtZW50LmJvZHk7c3dpdGNoKHQubm9kZU5hbWUpe2Nhc2UiSFRNTCI6Y2FzZSJCT0RZIjpyZXR1cm4gdC5vd25lckRvY3VtZW50LmJvZHk7Y2FzZSIjZG9jdW1lbnQiOnJldHVybiB0LmJvZHl9dmFyIGU9TnQodCksbj1lLm92ZXJmbG93LGk9ZS5vdmVyZmxvd1gsbz1lLm92ZXJmbG93WTtyZXR1cm4vKGF1dG98c2Nyb2xsfG92ZXJsYXkpLy50ZXN0KG4rbytpKT90Okx0KGt0KHQpKX12YXIgeHQ9VHQmJiEoIXdpbmRvdy5NU0lucHV0TWV0aG9kQ29udGV4dHx8IWRvY3VtZW50LmRvY3VtZW50TW9kZSksUHQ9VHQmJi9NU0lFIDEwLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO2Z1bmN0aW9uIEh0KHQpe3JldHVybiAxMT09PXQ/eHQ6MTA9PT10P1B0Onh0fHxQdH1mdW5jdGlvbiBqdCh0KXtpZighdClyZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O2Zvcih2YXIgZT1IdCgxMCk/ZG9jdW1lbnQuYm9keTpudWxsLG49dC5vZmZzZXRQYXJlbnR8fG51bGw7bj09PWUmJnQubmV4dEVsZW1lbnRTaWJsaW5nOyluPSh0PXQubmV4dEVsZW1lbnRTaWJsaW5nKS5vZmZzZXRQYXJlbnQ7dmFyIGk9biYmbi5ub2RlTmFtZTtyZXR1cm4gaSYmIkJPRFkiIT09aSYmIkhUTUwiIT09aT8tMSE9PVsiVEgiLCJURCIsIlRBQkxFIl0uaW5kZXhPZihuLm5vZGVOYW1lKSYmInN0YXRpYyI9PT1OdChuLCJwb3NpdGlvbiIpP2p0KG4pOm46dD90Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OmRvY3VtZW50LmRvY3VtZW50RWxlbWVudH1mdW5jdGlvbiBSdCh0KXtyZXR1cm4gbnVsbCE9PXQucGFyZW50Tm9kZT9SdCh0LnBhcmVudE5vZGUpOnR9ZnVuY3Rpb24gRnQodCxlKXtpZighKHQmJnQubm9kZVR5cGUmJmUmJmUubm9kZVR5cGUpKXJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7dmFyIG49dC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlKSZOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORyxpPW4/dDplLG89bj9lOnQscj1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO3Iuc2V0U3RhcnQoaSwwKSxyLnNldEVuZChvLDApO3ZhciBzLGEsbD1yLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyO2lmKHQhPT1sJiZlIT09bHx8aS5jb250YWlucyhvKSlyZXR1cm4iQk9EWSI9PT0oYT0ocz1sKS5ub2RlTmFtZSl8fCJIVE1MIiE9PWEmJmp0KHMuZmlyc3RFbGVtZW50Q2hpbGQpIT09cz9qdChsKTpsO3ZhciBjPVJ0KHQpO3JldHVybiBjLmhvc3Q/RnQoYy5ob3N0LGUpOkZ0KHQsUnQoZSkuaG9zdCl9ZnVuY3Rpb24gTXQodCl7dmFyIGU9InRvcCI9PT0oMTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJ0b3AiKT8ic2Nyb2xsVG9wIjoic2Nyb2xsTGVmdCIsbj10Lm5vZGVOYW1lO2lmKCJCT0RZIiE9PW4mJiJIVE1MIiE9PW4pcmV0dXJuIHRbZV07dmFyIGk9dC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtyZXR1cm4odC5vd25lckRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnR8fGkpW2VdfWZ1bmN0aW9uIFd0KHQsZSl7dmFyIG49IngiPT09ZT8iTGVmdCI6IlRvcCIsaT0iTGVmdCI9PT1uPyJSaWdodCI6IkJvdHRvbSI7cmV0dXJuIHBhcnNlRmxvYXQodFsiYm9yZGVyIituKyJXaWR0aCJdLDEwKStwYXJzZUZsb2F0KHRbImJvcmRlciIraSsiV2lkdGgiXSwxMCl9ZnVuY3Rpb24gVXQodCxlLG4saSl7cmV0dXJuIE1hdGgubWF4KGVbIm9mZnNldCIrdF0sZVsic2Nyb2xsIit0XSxuWyJjbGllbnQiK3RdLG5bIm9mZnNldCIrdF0sblsic2Nyb2xsIit0XSxIdCgxMCk/cGFyc2VJbnQoblsib2Zmc2V0Iit0XSkrcGFyc2VJbnQoaVsibWFyZ2luIisoIkhlaWdodCI9PT10PyJUb3AiOiJMZWZ0IildKStwYXJzZUludChpWyJtYXJnaW4iKygiSGVpZ2h0Ij09PXQ/IkJvdHRvbSI6IlJpZ2h0IildKTowKX1mdW5jdGlvbiBCdCh0KXt2YXIgZT10LmJvZHksbj10LmRvY3VtZW50RWxlbWVudCxpPUh0KDEwKSYmZ2V0Q29tcHV0ZWRTdHlsZShuKTtyZXR1cm57aGVpZ2h0OlV0KCJIZWlnaHQiLGUsbixpKSx3aWR0aDpVdCgiV2lkdGgiLGUsbixpKX19dmFyIHF0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaSh0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dO2kuZW51bWVyYWJsZT1pLmVudW1lcmFibGV8fCExLGkuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBpJiYoaS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsaS5rZXksaSl9fXJldHVybiBmdW5jdGlvbih0LGUsbil7cmV0dXJuIGUmJmkodC5wcm90b3R5cGUsZSksbiYmaSh0LG4pLHR9fSgpLEt0PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZSBpbiB0P09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp0W2VdPW4sdH0sUXQ9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIG49YXJndW1lbnRzW2VdO2Zvcih2YXIgaSBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLGkpJiYodFtpXT1uW2ldKX1yZXR1cm4gdH07ZnVuY3Rpb24gVnQodCl7cmV0dXJuIFF0KHt9LHQse3JpZ2h0OnQubGVmdCt0LndpZHRoLGJvdHRvbTp0LnRvcCt0LmhlaWdodH0pfWZ1bmN0aW9uIFl0KHQpe3ZhciBlPXt9O3RyeXtpZihIdA==",
"2020.04.17 15:37": "base64:LyohCiAgKiBCb290c3RyYXAgdjQuMy4xIChodHRwczovL2dldGJvb3RzdHJhcC5jb20vKQogICogQ29weXJpZ2h0IDIwMTEtMjAxOSBUaGUgQm9vdHN0cmFwIEF1dGhvcnMgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ncmFwaHMvY29udHJpYnV0b3JzKQogICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSkKICAqLwohZnVuY3Rpb24odCxlKXsib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJiJ1bmRlZmluZWQiIT10eXBlb2YgbW9kdWxlP2UoZXhwb3J0cyxyZXF1aXJlKCJqcXVlcnkiKSk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoWyJleHBvcnRzIiwianF1ZXJ5Il0sZSk6ZSgodD10fHxzZWxmKS5ib290c3RyYXA9e30sdC5qUXVlcnkpfSh0aGlzLGZ1bmN0aW9uKHQscCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkodCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9ZVtuXTtpLmVudW1lcmFibGU9aS5lbnVtZXJhYmxlfHwhMSxpLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gaSYmKGkud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGkua2V5LGkpfX1mdW5jdGlvbiBzKHQsZSxuKXtyZXR1cm4gZSYmaSh0LnByb3RvdHlwZSxlKSxuJiZpKHQsbiksdH1mdW5jdGlvbiBsKG8pe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e30sZT1PYmplY3Qua2V5cyhyKTsiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKGU9ZS5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhyKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iocix0KS5lbnVtZXJhYmxlfSkpKSxlLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGUsbixpO2U9byxpPXJbbj10XSxuIGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7dmFsdWU6aSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbbl09aX0pfXJldHVybiBvfXA9cCYmcC5oYXNPd25Qcm9wZXJ0eSgiZGVmYXVsdCIpP3AuZGVmYXVsdDpwO3ZhciBlPSJ0cmFuc2l0aW9uZW5kIjtmdW5jdGlvbiBuKHQpe3ZhciBlPXRoaXMsbj0hMTtyZXR1cm4gcCh0aGlzKS5vbmUobS5UUkFOU0lUSU9OX0VORCxmdW5jdGlvbigpe249ITB9KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bnx8bS50cmlnZ2VyVHJhbnNpdGlvbkVuZChlKX0sdCksdGhpc312YXIgbT17VFJBTlNJVElPTl9FTkQ6ImJzVHJhbnNpdGlvbkVuZCIsZ2V0VUlEOmZ1bmN0aW9uKHQpe2Zvcig7dCs9fn4oMWU2Kk1hdGgucmFuZG9tKCkpLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpOyk7cmV0dXJuIHR9LGdldFNlbGVjdG9yRnJvbUVsZW1lbnQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRBdHRyaWJ1dGUoImRhdGEtdGFyZ2V0Iik7aWYoIWV8fCIjIj09PWUpe3ZhciBuPXQuZ2V0QXR0cmlidXRlKCJocmVmIik7ZT1uJiYiIyIhPT1uP24udHJpbSgpOiIifXRyeXtyZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKT9lOm51bGx9Y2F0Y2godCl7cmV0dXJuIG51bGx9fSxnZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudDpmdW5jdGlvbih0KXtpZighdClyZXR1cm4gMDt2YXIgZT1wKHQpLmNzcygidHJhbnNpdGlvbi1kdXJhdGlvbiIpLG49cCh0KS5jc3MoInRyYW5zaXRpb24tZGVsYXkiKSxpPXBhcnNlRmxvYXQoZSksbz1wYXJzZUZsb2F0KG4pO3JldHVybiBpfHxvPyhlPWUuc3BsaXQoIiwiKVswXSxuPW4uc3BsaXQoIiwiKVswXSwxZTMqKHBhcnNlRmxvYXQoZSkrcGFyc2VGbG9hdChuKSkpOjB9LHJlZmxvdzpmdW5jdGlvbih0KXtyZXR1cm4gdC5vZmZzZXRIZWlnaHR9LHRyaWdnZXJUcmFuc2l0aW9uRW5kOmZ1bmN0aW9uKHQpe3AodCkudHJpZ2dlcihlKX0sc3VwcG9ydHNUcmFuc2l0aW9uRW5kOmZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4oZSl9LGlzRWxlbWVudDpmdW5jdGlvbih0KXtyZXR1cm4odFswXXx8dCkubm9kZVR5cGV9LHR5cGVDaGVja0NvbmZpZzpmdW5jdGlvbih0LGUsbil7Zm9yKHZhciBpIGluIG4paWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4saSkpe3ZhciBvPW5baV0scj1lW2ldLHM9ciYmbS5pc0VsZW1lbnQocik/ImVsZW1lbnQiOihhPXIse30udG9TdHJpbmcuY2FsbChhKS5tYXRjaCgvXHMoW2Etel0rKS9pKVsxXS50b0xvd2VyQ2FzZSgpKTtpZighbmV3IFJlZ0V4cChvKS50ZXN0KHMpKXRocm93IG5ldyBFcnJvcih0LnRvVXBwZXJDYXNlKCkrJzogT3B0aW9uICInK2krJyIgcHJvdmlkZWQgdHlwZSAiJytzKyciIGJ1dCBleHBlY3RlZCB0eXBlICInK28rJyIuJyl9dmFyIGF9LGZpbmRTaGFkb3dSb290OmZ1bmN0aW9uKHQpe2lmKCFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXR0YWNoU2hhZG93KXJldHVybiBudWxsO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0LmdldFJvb3ROb2RlKXJldHVybiB0IGluc3RhbmNlb2YgU2hhZG93Um9vdD90OnQucGFyZW50Tm9kZT9tLmZpbmRTaGFkb3dSb290KHQucGFyZW50Tm9kZSk6bnVsbDt2YXIgZT10LmdldFJvb3ROb2RlKCk7cmV0dXJuIGUgaW5zdGFuY2VvZiBTaGFkb3dSb290P2U6bnVsbH19O3AuZm4uZW11bGF0ZVRyYW5zaXRpb25FbmQ9bixwLmV2ZW50LnNwZWNpYWxbbS5UUkFOU0lUSU9OX0VORF09e2JpbmRUeXBlOmUsZGVsZWdhdGVUeXBlOmUsaGFuZGxlOmZ1bmN0aW9uKHQpe2lmKHAodC50YXJnZXQpLmlzKHRoaXMpKXJldHVybiB0LmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19O3ZhciBvPSJhbGVydCIscj0iYnMuYWxlcnQiLGE9Ii4iK3IsYz1wLmZuW29dLGg9e0NMT1NFOiJjbG9zZSIrYSxDTE9TRUQ6ImNsb3NlZCIrYSxDTElDS19EQVRBX0FQSToiY2xpY2siK2ErIi5kYXRhLWFwaSJ9LHU9ImFsZXJ0IixmPSJmYWRlIixkPSJzaG93IixnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaSh0KXt0aGlzLl9lbGVtZW50PXR9dmFyIHQ9aS5wcm90b3R5cGU7cmV0dXJuIHQuY2xvc2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZWxlbWVudDt0JiYoZT10aGlzLl9nZXRSb290RWxlbWVudCh0KSksdGhpcy5fdHJpZ2dlckNsb3NlRXZlbnQoZSkuaXNEZWZhdWx0UHJldmVudGVkKCl8fHRoaXMuX3JlbW92ZUVsZW1lbnQoZSl9LHQuZGlzcG9zZT1mdW5jdGlvbigpe3AucmVtb3ZlRGF0YSh0aGlzLl9lbGVtZW50LHIpLHRoaXMuX2VsZW1lbnQ9bnVsbH0sdC5fZ2V0Um9vdEVsZW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9bS5nZXRTZWxlY3RvckZyb21FbGVtZW50KHQpLG49ITE7cmV0dXJuIGUmJihuPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSkpLG58fChuPXAodCkuY2xvc2VzdCgiLiIrdSlbMF0pLG59LHQuX3RyaWdnZXJDbG9zZUV2ZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXAuRXZlbnQoaC5DTE9TRSk7cmV0dXJuIHAodCkudHJpZ2dlcihlKSxlfSx0Ll9yZW1vdmVFbGVtZW50PWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXM7aWYocChlKS5yZW1vdmVDbGFzcyhkKSxwKGUpLmhhc0NsYXNzKGYpKXt2YXIgdD1tLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KGUpO3AoZSkub25lKG0uVFJBTlNJVElPTl9FTkQsZnVuY3Rpb24odCl7cmV0dXJuIG4uX2Rlc3Ryb3lFbGVtZW50KGUsdCl9KS5lbXVsYXRlVHJhbnNpdGlvbkVuZCh0KX1lbHNlIHRoaXMuX2Rlc3Ryb3lFbGVtZW50KGUpfSx0Ll9kZXN0cm95RWxlbWVudD1mdW5jdGlvbih0KXtwKHQpLmRldGFjaCgpLnRyaWdnZXIoaC5DTE9TRUQpLnJlbW92ZSgpfSxpLl9qUXVlcnlJbnRlcmZhY2U9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PXAodGhpcyksZT10LmRhdGEocik7ZXx8KGU9bmV3IGkodGhpcyksdC5kYXRhKHIsZSkpLCJjbG9zZSI9PT1uJiZlW25dKHRoaXMpfSl9LGkuX2hhbmRsZURpc21pc3M9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3QmJnQucHJldmVudERlZmF1bHQoKSxlLmNsb3NlKHRoaXMpfX0scyhpLG51bGwsW3trZXk6IlZFUlNJT04iLGdldDpmdW5jdGlvbigpe3JldHVybiI0LjMuMSJ9fV0pLGl9KCk7cChkb2N1bWVudCkub24oaC5DTElDS19EQVRBX0FQSSwnW2RhdGEtZGlzbWlzcz0iYWxlcnQiXScsZy5faGFuZGxlRGlzbWlzcyhuZXcgZykpLHAuZm5bb109Zy5falF1ZXJ5SW50ZXJmYWNlLHAuZm5bb10uQ29uc3RydWN0b3I9ZyxwLmZuW29dLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gcC5mbltvXT1jLGcuX2pRdWVyeUludGVyZmFjZX07dmFyIF89ImJ1dHRvbiIsdj0iYnMuYnV0dG9uIix5PSIuIit2LEU9Ii5kYXRhLWFwaSIsYj1wLmZuW19dLHc9ImFjdGl2ZSIsQz0iYnRuIixUPSJmb2N1cyIsUz0nW2RhdGEtdG9nZ2xlXj0iYnV0dG9uIl0nLEQ9J1tkYXRhLXRvZ2dsZT0iYnV0dG9ucyJdJyxJPSdpbnB1dDpub3QoW3R5cGU9ImhpZGRlbiJdKScsQT0iLmFjdGl2ZSIsTz0iLmJ0biIsTj17Q0xJQ0tfREFUQV9BUEk6ImNsaWNrIit5K0UsRk9DVVNfQkxVUl9EQVRBX0FQSToiZm9jdXMiK3krRSsiIGJsdXIiK3krRX0saz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4odCl7dGhpcy5fZWxlbWVudD10fXZhciB0PW4ucHJvdG90eXBlO3JldHVybiB0LnRvZ2dsZT1mdW5jdGlvbigpe3ZhciB0PSEwLGU9ITAsbj1wKHRoaXMuX2VsZW1lbnQpLmNsb3Nlc3QoRClbMF07aWYobil7dmFyIGk9dGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKEkpO2lmKGkpe2lmKCJyYWRpbyI9PT1pLnR5cGUpaWYoaS5jaGVja2VkJiZ0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyh3KSl0PSExO2Vsc2V7dmFyIG89bi5xdWVyeVNlbGVjdG9yKEEpO28mJnAobykucmVtb3ZlQ2xhc3Modyl9aWYodCl7aWYoaS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil8fG4uaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfHxpLmNsYXNzTGlzdC5jb250YWlucygiZGlzYWJsZWQiKXx8bi5jbGFzc0xpc3QuY29udGFpbnMoImRpc2FibGVkIikpcmV0dXJuO2kuY2hlY2tlZD0hdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnModykscChpKS50cmlnZ2VyKCJjaGFuZ2UiKX1pLmZvY3VzKCksZT0hMX19ZSYmdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIsIXRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKHcpKSx0JiZwKHRoaXMuX2VsZW1lbnQpLnRvZ2dsZUNsYXNzKHcpfSx0LmRpc3Bvc2U9ZnVuY3Rpb24oKXtwLnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCx2KSx0aGlzLl9lbGVtZW50PW51bGx9LG4uX2pRdWVyeUludGVyZmFjZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9cCh0aGlzKS5kYXRhKHYpO3R8fCh0PW5ldyBuKHRoaXMpLHAodGhpcykuZGF0YSh2LHQpKSwidG9nZ2xlIj09PWUmJnRbZV0oKX0pfSxzKG4sbnVsbCxbe2tleToiVkVSU0lPTiIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIjQuMy4xIn19XSksbn0oKTtwKGRvY3VtZW50KS5vbihOLkNMSUNLX0RBVEFfQVBJLFMsZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpO3ZhciBlPXQudGFyZ2V0O3AoZSkuaGFzQ2xhc3MoQyl8fChlPXAoZSkuY2xvc2VzdChPKSksay5falF1ZXJ5SW50ZXJmYWNlLmNhbGwocChlKSwidG9nZ2xlIil9KS5vbihOLkZPQ1VTX0JMVVJfREFUQV9BUEksUyxmdW5jdGlvbih0KXt2YXIgZT1wKHQudGFyZ2V0KS5jbG9zZXN0KE8pWzBdO3AoZSkudG9nZ2xlQ2xhc3MoVCwvXmZvY3VzKGluKT8kLy50ZXN0KHQudHlwZSkpfSkscC5mbltfXT1rLl9qUXVlcnlJbnRlcmZhY2UscC5mbltfXS5Db25zdHJ1Y3Rvcj1rLHAuZm5bX10ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBwLmZuW19dPWIsay5falF1ZXJ5SW50ZXJmYWNlfTt2YXIgTD0iY2Fyb3VzZWwiLHg9ImJzLmNhcm91c2VsIixQPSIuIit4LEg9Ii5kYXRhLWFwaSIsaj1wLmZuW0xdLFI9e2ludGVydmFsOjVlMyxrZXlib2FyZDohMCxzbGlkZTohMSxwYXVzZToiaG92ZXIiLHdyYXA6ITAsdG91Y2g6ITB9LEY9e2ludGVydmFsOiIobnVtYmVyfGJvb2xlYW4pIixrZXlib2FyZDoiYm9vbGVhbiIsc2xpZGU6Iihib29sZWFufHN0cmluZykiLHBhdXNlOiIoc3RyaW5nfGJvb2xlYW4pIix3cmFwOiJib29sZWFuIix0b3VjaDoiYm9vbGVhbiJ9LE09Im5leHQiLFc9InByZXYiLFU9ImxlZnQiLEI9InJpZ2h0IixxPXtTTElERToic2xpZGUiK1AsU0xJRDoic2xpZCIrUCxLRVlET1dOOiJrZXlkb3duIitQLE1PVVNFRU5URVI6Im1vdXNlZW50ZXIiK1AsTU9VU0VMRUFWRToibW91c2VsZWF2ZSIrUCxUT1VDSFNUQVJUOiJ0b3VjaHN0YXJ0IitQLFRPVUNITU9WRToidG91Y2htb3ZlIitQLFRPVUNIRU5EOiJ0b3VjaGVuZCIrUCxQT0lOVEVSRE9XTjoicG9pbnRlcmRvd24iK1AsUE9JTlRFUlVQOiJwb2ludGVydXAiK1AsRFJBR19TVEFSVDoiZHJhZ3N0YXJ0IitQLExPQURfREFUQV9BUEk6ImxvYWQiK1ArSCxDTElDS19EQVRBX0FQSToiY2xpY2siK1ArSH0sSz0iY2Fyb3VzZWwiLFE9ImFjdGl2ZSIsVj0ic2xpZGUiLFk9ImNhcm91c2VsLWl0ZW0tcmlnaHQiLHo9ImNhcm91c2VsLWl0ZW0tbGVmdCIsWD0iY2Fyb3VzZWwtaXRlbS1uZXh0IixHPSJjYXJvdXNlbC1pdGVtLXByZXYiLCQ9InBvaW50ZXItZXZlbnQiLEo9Ii5hY3RpdmUiLFo9Ii5hY3RpdmUuY2Fyb3VzZWwtaXRlbSIsdHQ9Ii5jYXJvdXNlbC1pdGVtIixldD0iLmNhcm91c2VsLWl0ZW0gaW1nIixudD0iLmNhcm91c2VsLWl0ZW0tbmV4dCwgLmNhcm91c2VsLWl0ZW0tcHJldiIsaXQ9Ii5jYXJvdXNlbC1pbmRpY2F0b3JzIixvdD0iW2RhdGEtc2xpZGVdLCBbZGF0YS1zbGlkZS10b10iLHJ0PSdbZGF0YS1yaWRlPSJjYXJvdXNlbCJdJyxzdD17VE9VQ0g6InRvdWNoIixQRU46InBlbiJ9LGF0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcih0LGUpe3RoaXMuX2l0ZW1zPW51bGwsdGhpcy5faW50ZXJ2YWw9bnVsbCx0aGlzLl9hY3RpdmVFbGVtZW50PW51bGwsdGhpcy5faXNQYXVzZWQ9ITEsdGhpcy5faXNTbGlkaW5nPSExLHRoaXMudG91Y2hUaW1lb3V0PW51bGwsdGhpcy50b3VjaFN0YXJ0WD0wLHRoaXMudG91Y2hEZWx0YVg9MCx0aGlzLl9jb25maWc9dGhpcy5fZ2V0Q29uZmlnKGUpLHRoaXMuX2VsZW1lbnQ9dCx0aGlzLl9pbmRpY2F0b3JzRWxlbWVudD10aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoaXQpLHRoaXMuX3RvdWNoU3VwcG9ydGVkPSJvbnRvdWNoc3RhcnQiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHwwPG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyx0aGlzLl9wb2ludGVyRXZlbnQ9Qm9vbGVhbih3aW5kb3cuUG9pbnRlckV2ZW50fHx3aW5kb3cuTVNQb2ludGVyRXZlbnQpLHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJzKCl9dmFyIHQ9ci5wcm90b3R5cGU7cmV0dXJuIHQubmV4dD1mdW5jdGlvbigpe3RoaXMuX2lzU2xpZGluZ3x8dGhpcy5fc2xpZGUoTSl9LHQubmV4dFdoZW5WaXNpYmxlPWZ1bmN0aW9uKCl7IWRvY3VtZW50LmhpZGRlbiYmcCh0aGlzLl9lbGVtZW50KS5pcygiOnZpc2libGUiKSYmImhpZGRlbiIhPT1wKHRoaXMuX2VsZW1lbnQpLmNzcygidmlzaWJpbGl0eSIpJiZ0aGlzLm5leHQoKX0sdC5wcmV2PWZ1bmN0aW9uKCl7dGhpcy5faXNTbGlkaW5nfHx0aGlzLl9zbGlkZShXKX0sdC5wYXVzZT1mdW5jdGlvbih0KXt0fHwodGhpcy5faXNQYXVzZWQ9ITApLHRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcihudCkmJihtLnRyaWdnZXJUcmFuc2l0aW9uRW5kKHRoaXMuX2VsZW1lbnQpLHRoaXMuY3ljbGUoITApKSxjbGVhckludGVydmFsKHRoaXMuX2ludGVydmFsKSx0aGlzLl9pbnRlcnZhbD1udWxsfSx0LmN5Y2xlPWZ1bmN0aW9uKHQpe3R8fCh0aGlzLl9pc1BhdXNlZD0hMSksdGhpcy5faW50ZXJ2YWwmJihjbGVhckludGVydmFsKHRoaXMuX2ludGVydmFsKSx0aGlzLl9pbnRlcnZhbD1udWxsKSx0aGlzLl9jb25maWcuaW50ZXJ2YWwmJiF0aGlzLl9pc1BhdXNlZCYmKHRoaXMuX2ludGVydmFsPXNldEludGVydmFsKChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU/dGhpcy5uZXh0V2hlblZpc2libGU6dGhpcy5uZXh0KS5iaW5kKHRoaXMpLHRoaXMuX2NvbmZpZy5pbnRlcnZhbCkpfSx0LnRvPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fYWN0aXZlRWxlbWVudD10aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoWik7dmFyIG49dGhpcy5fZ2V0SXRlbUluZGV4KHRoaXMuX2FjdGl2ZUVsZW1lbnQpO2lmKCEodD50aGlzLl9pdGVtcy5sZW5ndGgtMXx8dDwwKSlpZih0aGlzLl9pc1NsaWRpbmcpcCh0aGlzLl9lbGVtZW50KS5vbmUocS5TTElELGZ1bmN0aW9uKCl7cmV0dXJuIGUudG8odCl9KTtlbHNle2lmKG49PT10KXJldHVybiB0aGlzLnBhdXNlKCksdm9pZCB0aGlzLmN5Y2xlKCk7dmFyIGk9bjx0P006Vzt0aGlzLl9zbGlkZShpLHRoaXMuX2l0ZW1zW3RdKX19LHQuZGlzcG9zZT1mdW5jdGlvbigpe3AodGhpcy5fZWxlbWVudCkub2ZmKFApLHAucmVtb3ZlRGF0YSh0aGlzLl9lbGVtZW50LHgpLHRoaXMuX2l0ZW1zPW51bGwsdGhpcy5fY29uZmlnPW51bGwsdGhpcy5fZWxlbWVudD1udWxsLHRoaXMuX2ludGVydmFsPW51bGwsdGhpcy5faXNQYXVzZWQ9bnVsbCx0aGlzLl9pc1NsaWRpbmc9bnVsbCx0aGlzLl9hY3RpdmVFbGVtZW50PW51bGwsdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQ9bnVsbH0sdC5fZ2V0Q29uZmlnPWZ1bmN0aW9uKHQpe3JldHVybiB0PWwoe30sUix0KSxtLnR5cGVDaGVja0NvbmZpZyhMLHQsRiksdH0sdC5faGFuZGxlU3dpcGU9ZnVuY3Rpb24oKXt2YXIgdD1NYXRoLmFicyh0aGlzLnRvdWNoRGVsdGFYKTtpZighKHQ8PTQwKSl7dmFyIGU9dC90aGlzLnRvdWNoRGVsdGFYOzA8ZSYmdGhpcy5wcmV2KCksZTwwJiZ0aGlzLm5leHQoKX19LHQuX2FkZEV2ZW50TGlzdGVuZXJzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLl9jb25maWcua2V5Ym9hcmQmJnAodGhpcy5fZWxlbWVudCkub24ocS5LRVlET1dOLGZ1bmN0aW9uKHQpe3JldHVybiBlLl9rZXlkb3duKHQpfSksImhvdmVyIj09PXRoaXMuX2NvbmZpZy5wYXVzZSYmcCh0aGlzLl9lbGVtZW50KS5vbihxLk1PVVNFRU5URVIsZnVuY3Rpb24odCl7cmV0dXJuIGUucGF1c2UodCl9KS5vbihxLk1PVVNFTEVBVkUsZnVuY3Rpb24odCl7cmV0dXJuIGUuY3ljbGUodCl9KSx0aGlzLl9jb25maWcudG91Y2gmJnRoaXMuX2FkZFRvdWNoRXZlbnRMaXN0ZW5lcnMoKX0sdC5fYWRkVG91Y2hFdmVudExpc3RlbmVycz1mdW5jdGlvbigpe3ZhciBuPXRoaXM7aWYodGhpcy5fdG91Y2hTdXBwb3J0ZWQpe3ZhciBlPWZ1bmN0aW9uKHQpe24uX3BvaW50ZXJFdmVudCYmc3RbdC5vcmlnaW5hbEV2ZW50LnBvaW50ZXJUeXBlLnRvVXBwZXJDYXNlKCldP24udG91Y2hTdGFydFg9dC5vcmlnaW5hbEV2ZW50LmNsaWVudFg6bi5fcG9pbnRlckV2ZW50fHwobi50b3VjaFN0YXJ0WD10Lm9yaWdpbmFsRXZlbnQudG91Y2hlc1swXS5jbGllbnRYKX0saT1mdW5jdGlvbih0KXtuLl9wb2ludGVyRXZlbnQmJnN0W3Qub3JpZ2luYWxFdmVudC5wb2ludGVyVHlwZS50b1VwcGVyQ2FzZSgpXSYmKG4udG91Y2hEZWx0YVg9dC5vcmlnaW5hbEV2ZW50LmNsaWVudFgtbi50b3VjaFN0YXJ0WCksbi5faGFuZGxlU3dpcGUoKSwiaG92ZXIiPT09bi5fY29uZmlnLnBhdXNlJiYobi5wYXVzZSgpLG4udG91Y2hUaW1lb3V0JiZjbGVhclRpbWVvdXQobi50b3VjaFRpbWVvdXQpLG4udG91Y2hUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24odCl7cmV0dXJuIG4uY3ljbGUodCl9LDUwMCtuLl9jb25maWcuaW50ZXJ2YWwpKX07cCh0aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZXQpKS5vbihxLkRSQUdfU1RBUlQsZnVuY3Rpb24odCl7cmV0dXJuIHQucHJldmVudERlZmF1bHQoKX0pLHRoaXMuX3BvaW50ZXJFdmVudD8ocCh0aGlzLl9lbGVtZW50KS5vbihxLlBPSU5URVJET1dOLGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpfSkscCh0aGlzLl9lbGVtZW50KS5vbihxLlBPSU5URVJVUCxmdW5jdGlvbih0KXtyZXR1cm4gaSh0KX0pLHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZCgkKSk6KHAodGhpcy5fZWxlbWVudCkub24ocS5UT1VDSFNUQVJULGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpfSkscCh0aGlzLl9lbGVtZW50KS5vbihxLlRPVUNITU9WRSxmdW5jdGlvbih0KXt2YXIgZTsoZT10KS5vcmlnaW5hbEV2ZW50LnRvdWNoZXMmJjE8ZS5vcmlnaW5hbEV2ZW50LnRvdWNoZXMubGVuZ3RoP24udG91Y2hEZWx0YVg9MDpuLnRvdWNoRGVsdGFYPWUub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLmNsaWVudFgtbi50b3VjaFN0YXJ0WH0pLHAodGhpcy5fZWxlbWVudCkub24ocS5UT1VDSEVORCxmdW5jdGlvbih0KXtyZXR1cm4gaSh0KX0pKX19LHQuX2tleWRvd249ZnVuY3Rpb24odCl7aWYoIS9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QodC50YXJnZXQudGFnTmFtZSkpc3dpdGNoKHQud2hpY2gpe2Nhc2UgMzc6dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMucHJldigpO2JyZWFrO2Nhc2UgMzk6dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMubmV4dCgpfX0sdC5fZ2V0SXRlbUluZGV4PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pdGVtcz10JiZ0LnBhcmVudE5vZGU/W10uc2xpY2UuY2FsbCh0LnBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFsbCh0dCkpOltdLHRoaXMuX2l0ZW1zLmluZGV4T2YodCl9LHQuX2dldEl0ZW1CeURpcmVjdGlvbj1mdW5jdGlvbih0LGUpe3ZhciBuPXQ9PT1NLGk9dD09PVcsbz10aGlzLl9nZXRJdGVtSW5kZXgoZSkscj10aGlzLl9pdGVtcy5sZW5ndGgtMTtpZigoaSYmMD09PW98fG4mJm89PT1yKSYmIXRoaXMuX2NvbmZpZy53cmFwKXJldHVybiBlO3ZhciBzPShvKyh0PT09Vz8tMToxKSkldGhpcy5faXRlbXMubGVuZ3RoO3JldHVybi0xPT09cz90aGlzLl9pdGVtc1t0aGlzLl9pdGVtcy5sZW5ndGgtMV06dGhpcy5faXRlbXNbc119LHQuX3RyaWdnZXJTbGlkZUV2ZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fZ2V0SXRlbUluZGV4KHQpLGk9dGhpcy5fZ2V0SXRlbUluZGV4KHRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcihaKSksbz1wLkV2ZW50KHEuU0xJREUse3JlbGF0ZWRUYXJnZXQ6dCxkaXJlY3Rpb246ZSxmcm9tOmksdG86bn0pO3JldHVybiBwKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIobyksb30sdC5fc2V0QWN0aXZlSW5kaWNhdG9yRWxlbWVudD1mdW5jdGlvbih0KXtpZih0aGlzLl9pbmRpY2F0b3JzRWxlbWVudCl7dmFyIGU9W10uc2xpY2UuY2FsbCh0aGlzLl9pbmRpY2F0b3JzRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKEopKTtwKGUpLnJlbW92ZUNsYXNzKFEpO3ZhciBuPXRoaXMuX2luZGljYXRvcnNFbGVtZW50LmNoaWxkcmVuW3RoaXMuX2dldEl0ZW1JbmRleCh0KV07biYmcChuKS5hZGRDbGFzcyhRKX19LHQuX3NsaWRlPWZ1bmN0aW9uKHQsZSl7dmFyIG4saSxvLHI9dGhpcyxzPXRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcihaKSxhPXRoaXMuX2dldEl0ZW1JbmRleChzKSxsPWV8fHMmJnRoaXMuX2dldEl0ZW1CeURpcmVjdGlvbih0LHMpLGM9dGhpcy5fZ2V0SXRlbUluZGV4KGwpLGg9Qm9vbGVhbih0aGlzLl9pbnRlcnZhbCk7aWYobz10PT09TT8obj16LGk9WCxVKToobj1ZLGk9RyxCKSxsJiZwKGwpLmhhc0NsYXNzKFEpKXRoaXMuX2lzU2xpZGluZz0hMTtlbHNlIGlmKCF0aGlzLl90cmlnZ2VyU2xpZGVFdmVudChsLG8pLmlzRGVmYXVsdFByZXZlbnRlZCgpJiZzJiZsKXt0aGlzLl9pc1NsaWRpbmc9ITAsaCYmdGhpcy5wYXVzZSgpLHRoaXMuX3NldEFjdGl2ZUluZGljYXRvckVsZW1lbnQobCk7dmFyIHU9cC5FdmVudChxLlNMSUQse3JlbGF0ZWRUYXJnZXQ6bCxkaXJlY3Rpb246byxmcm9tOmEsdG86Y30pO2lmKHAodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoVikpe3AobCkuYWRkQ2xhc3MoaSksbS5yZWZsb3cobCkscChzKS5hZGRDbGFzcyhuKSxwKGwpLmFkZENsYXNzKG4pO3ZhciBmPXBhcnNlSW50KGwuZ2V0QXR0cmlidXRlKCJkYXRhLWludGVydmFsIiksMTApO3RoaXMuX2NvbmZpZy5pbnRlcnZhbD1mPyh0aGlzLl9jb25maWcuZGVmYXVsdEludGVydmFsPXRoaXMuX2NvbmZpZy5kZWZhdWx0SW50ZXJ2YWx8fHRoaXMuX2NvbmZpZy5pbnRlcnZhbCxmKTp0aGlzLl9jb25maWcuZGVmYXVsdEludGVydmFsfHx0aGlzLl9jb25maWcuaW50ZXJ2YWw7dmFyIGQ9bS5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudChzKTtwKHMpLm9uZShtLlRSQU5TSVRJT05fRU5ELGZ1bmN0aW9uKCl7cChsKS5yZW1vdmVDbGFzcyhuKyIgIitpKS5hZGRDbGFzcyhRKSxwKHMpLnJlbW92ZUNsYXNzKFErIiAiK2krIiAiK24pLHIuX2lzU2xpZGluZz0hMSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIHAoci5fZWxlbWVudCkudHJpZ2dlcih1KX0sMCl9KS5lbXVsYXRlVHJhbnNpdGlvbkVuZChkKX1lbHNlIHAocykucmVtb3ZlQ2xhc3MoUSkscChsKS5hZGRDbGFzcyhRKSx0aGlzLl9pc1NsaWRpbmc9ITEscCh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKHUpO2gmJnRoaXMuY3ljbGUoKX19LHIuX2pRdWVyeUludGVyZmFjZT1mdW5jdGlvbihpKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9cCh0aGlzKS5kYXRhKHgpLGU9bCh7fSxSLHAodGhpcykuZGF0YSgpKTsib2JqZWN0Ij09dHlwZW9mIGkmJihlPWwoe30sZSxpKSk7dmFyIG49InN0cmluZyI9PXR5cGVvZiBpP2k6ZS5zbGlkZTtpZih0fHwodD1uZXcgcih0aGlzLGUpLHAodGhpcykuZGF0YSh4LHQpKSwibnVtYmVyIj09dHlwZW9mIGkpdC50byhpKTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2Ygbil7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiB0W25dKXRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG1ldGhvZCBuYW1lZCAiJytuKyciJyk7dFtuXSgpfWVsc2UgZS5pbnRlcnZhbCYmZS5yaWRlJiYodC5wYXVzZSgpLHQuY3ljbGUoKSl9KX0sci5fZGF0YUFwaUNsaWNrSGFuZGxlcj1mdW5jdGlvbih0KXt2YXIgZT1tLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQodGhpcyk7aWYoZSl7dmFyIG49cChlKVswXTtpZihuJiZwKG4pLmhhc0NsYXNzKEspKXt2YXIgaT1sKHt9LHAobikuZGF0YSgpLHAodGhpcykuZGF0YSgpKSxvPXRoaXMuZ2V0QXR0cmlidXRlKCJkYXRhLXNsaWRlLXRvIik7byYmKGkuaW50ZXJ2YWw9ITEpLHIuX2pRdWVyeUludGVyZmFjZS5jYWxsKHAobiksaSksbyYmcChuKS5kYXRhKHgpLnRvKG8pLHQucHJldmVudERlZmF1bHQoKX19fSxzKHIsbnVsbCxbe2tleToiVkVSU0lPTiIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIjQuMy4xIn19LHtrZXk6IkRlZmF1bHQiLGdldDpmdW5jdGlvbigpe3JldHVybiBSfX1dKSxyfSgpO3AoZG9jdW1lbnQpLm9uKHEuQ0xJQ0tfREFUQV9BUEksb3QsYXQuX2RhdGFBcGlDbGlja0hhbmRsZXIpLHAod2luZG93KS5vbihxLkxPQURfREFUQV9BUEksZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHJ0KSksZT0wLG49dC5sZW5ndGg7ZTxuO2UrKyl7dmFyIGk9cCh0W2VdKTthdC5falF1ZXJ5SW50ZXJmYWNlLmNhbGwoaSxpLmRhdGEoKSl9fSkscC5mbltMXT1hdC5falF1ZXJ5SW50ZXJmYWNlLHAuZm5bTF0uQ29uc3RydWN0b3I9YXQscC5mbltMXS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHAuZm5bTF09aixhdC5falF1ZXJ5SW50ZXJmYWNlfTt2YXIgbHQ9ImNvbGxhcHNlIixjdD0iYnMuY29sbGFwc2UiLGh0PSIuIitjdCx1dD1wLmZuW2x0XSxmdD17dG9nZ2xlOiEwLHBhcmVudDoiIn0sZHQ9e3RvZ2dsZToiYm9vbGVhbiIscGFyZW50OiIoc3RyaW5nfGVsZW1lbnQpIn0scHQ9e1NIT1c6InNob3ciK2h0LFNIT1dOOiJzaG93biIraHQsSElERToiaGlkZSIraHQsSElEREVOOiJoaWRkZW4iK2h0LENMSUNLX0RBVEFfQVBJOiJjbGljayIraHQrIi5kYXRhLWFwaSJ9LG10PSJzaG93IixndD0iY29sbGFwc2UiLF90PSJjb2xsYXBzaW5nIix2dD0iY29sbGFwc2VkIix5dD0id2lkdGgiLEV0PSJoZWlnaHQiLGJ0PSIuc2hvdywgLmNvbGxhcHNpbmciLHd0PSdbZGF0YS10b2dnbGU9ImNvbGxhcHNlIl0nLEN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShlLHQpe3RoaXMuX2lzVHJhbnNpdGlvbmluZz0hMSx0aGlzLl9lbGVtZW50PWUsdGhpcy5fY29uZmlnPXRoaXMuX2dldENvbmZpZyh0KSx0aGlzLl90cmlnZ2VyQXJyYXk9W10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS10b2dnbGU9ImNvbGxhcHNlIl1baHJlZj0iIycrZS5pZCsnIl0sW2RhdGEtdG9nZ2xlPSJjb2xsYXBzZSJdW2RhdGEtdGFyZ2V0PSIjJytlLmlkKyciXScpKTtmb3IodmFyIG49W10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHd0KSksaT0wLG89bi5sZW5ndGg7aTxvO2krKyl7dmFyIHI9bltpXSxzPW0uZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChyKSxhPVtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzKSkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0PT09ZX0pO251bGwhPT1zJiYwPGEubGVuZ3RoJiYodGhpcy5fc2VsZWN0b3I9cyx0aGlzLl90cmlnZ2VyQXJyYXkucHVzaChyKSl9dGhpcy5fcGFyZW50PXRoaXMuX2NvbmZpZy5wYXJlbnQ/dGhpcy5fZ2V0UGFyZW50KCk6bnVsbCx0aGlzLl9jb25maWcucGFyZW50fHx0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3ModGhpcy5fZWxlbWVudCx0aGlzLl90cmlnZ2VyQXJyYXkpLHRoaXMuX2NvbmZpZy50b2dnbGUmJnRoaXMudG9nZ2xlKCl9dmFyIHQ9YS5wcm90b3R5cGU7cmV0dXJuIHQudG9nZ2xlPWZ1bmN0aW9uKCl7cCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhtdCk/dGhpcy5oaWRlKCk6dGhpcy5zaG93KCl9LHQuc2hvdz1mdW5jdGlvbigpe3ZhciB0LGUsbj10aGlzO2lmKCF0aGlzLl9pc1RyYW5zaXRpb25pbmcmJiFwKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKG10KSYmKHRoaXMuX3BhcmVudCYmMD09PSh0PVtdLnNsaWNlLmNhbGwodGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYnQpKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuLl9jb25maWcucGFyZW50P3QuZ2V0QXR0cmlidXRlKCJkYXRhLXBhcmVudCIpPT09bi5fY29uZmlnLnBhcmVudDp0LmNsYXNzTGlzdC5jb250YWlucyhndCl9KSkubGVuZ3RoJiYodD1udWxsKSwhKHQmJihlPXAodCkubm90KHRoaXMuX3NlbGVjdG9yKS5kYXRhKGN0KSkmJmUuX2lzVHJhbnNpdGlvbmluZykpKXt2YXIgaT1wLkV2ZW50KHB0LlNIT1cpO2lmKHAodGhpcy5fZWxlbWVudCkudHJpZ2dlcihpKSwhaS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7dCYmKGEuX2pRdWVyeUludGVyZmFjZS5jYWxsKHAodCkubm90KHRoaXMuX3NlbGVjdG9yKSwiaGlkZSIpLGV8fHAodCkuZGF0YShjdCxudWxsKSk7dmFyIG89dGhpcy5fZ2V0RGltZW5zaW9uKCk7cCh0aGlzLl9lbGVtZW50KS5yZW1vdmVDbGFzcyhndCkuYWRkQ2xhc3MoX3QpLHRoaXMuX2VsZW1lbnQuc3R5bGVbb109MCx0aGlzLl90cmlnZ2VyQXJyYXkubGVuZ3RoJiZwKHRoaXMuX3RyaWdnZXJBcnJheSkucmVtb3ZlQ2xhc3ModnQpLmF0dHIoImFyaWEtZXhwYW5kZWQiLCEwKSx0aGlzLnNldFRyYW5zaXRpb25pbmcoITApO3ZhciByPSJzY3JvbGwiKyhvWzBdLnRvVXBwZXJDYXNlKCkrby5zbGljZSgxKSkscz1tLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRoaXMuX2VsZW1lbnQpO3AodGhpcy5fZWxlbWVudCkub25lKG0uVFJBTlNJVElPTl9FTkQsZnVuY3Rpb24oKXtwKG4uX2VsZW1lbnQpLnJlbW92ZUNsYXNzKF90KS5hZGRDbGFzcyhndCkuYWRkQ2xhc3MobXQpLG4uX2VsZW1lbnQuc3R5bGVbb109IiIsbi5zZXRUcmFuc2l0aW9uaW5nKCExKSxwKG4uX2VsZW1lbnQpLnRyaWdnZXIocHQuU0hPV04pfSkuZW11bGF0ZVRyYW5zaXRpb25FbmQocyksdGhpcy5fZWxlbWVudC5zdHlsZVtvXT10aGlzLl9lbGVtZW50W3JdKyJweCJ9fX0sdC5oaWRlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZighdGhpcy5faXNUcmFuc2l0aW9uaW5nJiZwKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKG10KSl7dmFyIGU9cC5FdmVudChwdC5ISURFKTtpZihwKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoZSksIWUuaXNEZWZhdWx0UHJldmVudGVkKCkpe3ZhciBuPXRoaXMuX2dldERpbWVuc2lvbigpO3RoaXMuX2VsZW1lbnQuc3R5bGVbbl09dGhpcy5fZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtuXSsicHgiLG0ucmVmbG93KHRoaXMuX2VsZW1lbnQpLHAodGhpcy5fZWxlbWVudCkuYWRkQ2xhc3MoX3QpLnJlbW92ZUNsYXNzKGd0KS5yZW1vdmVDbGFzcyhtdCk7dmFyIGk9dGhpcy5fdHJpZ2dlckFycmF5Lmxlbmd0aDtpZigwPGkpZm9yKHZhciBvPTA7bzxpO28rKyl7dmFyIHI9dGhpcy5fdHJpZ2dlckFycmF5W29dLHM9bS5nZXRTZWxlY3RvckZyb21FbGVtZW50KHIpO2lmKG51bGwhPT1zKXAoW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHMpKSkuaGFzQ2xhc3MobXQpfHxwKHIpLmFkZENsYXNzKHZ0KS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhMSl9dGhpcy5zZXRUcmFuc2l0aW9uaW5nKCEwKTt0aGlzLl9lbGVtZW50LnN0eWxlW25dPSIiO3ZhciBhPW0uZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fZWxlbWVudCk7cCh0aGlzLl9lbGVtZW50KS5vbmUobS5UUkFOU0lUSU9OX0VORCxmdW5jdGlvbigpe3Quc2V0VHJhbnNpdGlvbmluZyghMSkscCh0Ll9lbGVtZW50KS5yZW1vdmVDbGFzcyhfdCkuYWRkQ2xhc3MoZ3QpLnRyaWdnZXIocHQuSElEREVOKX0pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGEpfX19LHQuc2V0VHJhbnNpdGlvbmluZz1mdW5jdGlvbih0KXt0aGlzLl9pc1RyYW5zaXRpb25pbmc9dH0sdC5kaXNwb3NlPWZ1bmN0aW9uKCl7cC5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsY3QpLHRoaXMuX2NvbmZpZz1udWxsLHRoaXMuX3BhcmVudD1udWxsLHRoaXMuX2VsZW1lbnQ9bnVsbCx0aGlzLl90cmlnZ2VyQXJyYXk9bnVsbCx0aGlzLl9pc1RyYW5zaXRpb25pbmc9bnVsbH0sdC5fZ2V0Q29uZmlnPWZ1bmN0aW9uKHQpe3JldHVybih0PWwoe30sZnQsdCkpLnRvZ2dsZT1Cb29sZWFuKHQudG9nZ2xlKSxtLnR5cGVDaGVja0NvbmZpZyhsdCx0LGR0KSx0fSx0Ll9nZXREaW1lbnNpb249ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyh5dCk/eXQ6RXR9LHQuX2dldFBhcmVudD1mdW5jdGlvbigpe3ZhciB0LG49dGhpczttLmlzRWxlbWVudCh0aGlzLl9jb25maWcucGFyZW50KT8odD10aGlzLl9jb25maWcucGFyZW50LCJ1bmRlZmluZWQiIT10eXBlb2YgdGhpcy5fY29uZmlnLnBhcmVudC5qcXVlcnkmJih0PXRoaXMuX2NvbmZpZy5wYXJlbnRbMF0pKTp0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5fY29uZmlnLnBhcmVudCk7dmFyIGU9J1tkYXRhLXRvZ2dsZT0iY29sbGFwc2UiXVtkYXRhLXBhcmVudD0iJyt0aGlzLl9jb25maWcucGFyZW50KyciXScsaT1bXS5zbGljZS5jYWxsKHQucXVlcnlTZWxlY3RvckFsbChlKSk7cmV0dXJuIHAoaSkuZWFjaChmdW5jdGlvbih0LGUpe24uX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyhhLl9nZXRUYXJnZXRGcm9tRWxlbWVudChlKSxbZV0pfSksdH0sdC5fYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzPWZ1bmN0aW9uKHQsZSl7dmFyIG49cCh0KS5oYXNDbGFzcyhtdCk7ZS5sZW5ndGgmJnAoZSkudG9nZ2xlQ2xhc3ModnQsIW4pLmF0dHIoImFyaWEtZXhwYW5kZWQiLG4pfSxhLl9nZXRUYXJnZXRGcm9tRWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT1tLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQodCk7cmV0dXJuIGU/ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKTpudWxsfSxhLl9qUXVlcnlJbnRlcmZhY2U9ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PXAodGhpcyksZT10LmRhdGEoY3QpLG49bCh7fSxmdCx0LmRhdGEoKSwib2JqZWN0Ij09dHlwZW9mIGkmJmk/aTp7fSk7aWYoIWUmJm4udG9nZ2xlJiYvc2hvd3xoaWRlLy50ZXN0KGkpJiYobi50b2dnbGU9ITEpLGV8fChlPW5ldyBhKHRoaXMsbiksdC5kYXRhKGN0LGUpKSwic3RyaW5nIj09dHlwZW9mIGkpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgZVtpXSl0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBtZXRob2QgbmFtZWQgIicraSsnIicpO2VbaV0oKX19KX0scyhhLG51bGwsW3trZXk6IlZFUlNJT04iLGdldDpmdW5jdGlvbigpe3JldHVybiI0LjMuMSJ9fSx7a2V5OiJEZWZhdWx0IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZnR9fV0pLGF9KCk7cChkb2N1bWVudCkub24ocHQuQ0xJQ0tfREFUQV9BUEksd3QsZnVuY3Rpb24odCl7IkEiPT09dC5jdXJyZW50VGFyZ2V0LnRhZ05hbWUmJnQucHJldmVudERlZmF1bHQoKTt2YXIgbj1wKHRoaXMpLGU9bS5nZXRTZWxlY3RvckZyb21FbGVtZW50KHRoaXMpLGk9W10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGUpKTtwKGkpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1wKHRoaXMpLGU9dC5kYXRhKGN0KT8idG9nZ2xlIjpuLmRhdGEoKTtDdC5falF1ZXJ5SW50ZXJmYWNlLmNhbGwodCxlKX0pfSkscC5mbltsdF09Q3QuX2pRdWVyeUludGVyZmFjZSxwLmZuW2x0XS5Db25zdHJ1Y3Rvcj1DdCxwLmZuW2x0XS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHAuZm5bbHRdPXV0LEN0Ll9qUXVlcnlJbnRlcmZhY2V9O2Zvcih2YXIgVHQ9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJiJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQsU3Q9WyJFZGdlIiwiVHJpZGVudCIsIkZpcmVmb3giXSxEdD0wLEl0PTA7SXQ8U3QubGVuZ3RoO0l0Kz0xKWlmKFR0JiYwPD1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoU3RbSXRdKSl7RHQ9MTticmVha312YXIgQXQ9VHQmJndpbmRvdy5Qcm9taXNlP2Z1bmN0aW9uKHQpe3ZhciBlPSExO3JldHVybiBmdW5jdGlvbigpe2V8fChlPSEwLHdpbmRvdy5Qcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7ZT0hMSx0KCl9KSl9fTpmdW5jdGlvbih0KXt2YXIgZT0hMTtyZXR1cm4gZnVuY3Rpb24oKXtlfHwoZT0hMCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZT0hMSx0KCl9LER0KSl9fTtmdW5jdGlvbiBPdCh0KXtyZXR1cm4gdCYmIltvYmplY3QgRnVuY3Rpb25dIj09PXt9LnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gTnQodCxlKXtpZigxIT09dC5ub2RlVHlwZSlyZXR1cm5bXTt2YXIgbj10Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpO3JldHVybiBlP25bZV06bn1mdW5jdGlvbiBrdCh0KXtyZXR1cm4iSFRNTCI9PT10Lm5vZGVOYW1lP3Q6dC5wYXJlbnROb2RlfHx0Lmhvc3R9ZnVuY3Rpb24gTHQodCl7aWYoIXQpcmV0dXJuIGRvY3VtZW50LmJvZHk7c3dpdGNoKHQubm9kZU5hbWUpe2Nhc2UiSFRNTCI6Y2FzZSJCT0RZIjpyZXR1cm4gdC5vd25lckRvY3VtZW50LmJvZHk7Y2FzZSIjZG9jdW1lbnQiOnJldHVybiB0LmJvZHl9dmFyIGU9TnQodCksbj1lLm92ZXJmbG93LGk9ZS5vdmVyZmxvd1gsbz1lLm92ZXJmbG93WTtyZXR1cm4vKGF1dG98c2Nyb2xsfG92ZXJsYXkpLy50ZXN0KG4rbytpKT90Okx0KGt0KHQpKX12YXIgeHQ9VHQmJiEoIXdpbmRvdy5NU0lucHV0TWV0aG9kQ29udGV4dHx8IWRvY3VtZW50LmRvY3VtZW50TW9kZSksUHQ9VHQmJi9NU0lFIDEwLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO2Z1bmN0aW9uIEh0KHQpe3JldHVybiAxMT09PXQ/eHQ6MTA9PT10P1B0Onh0fHxQdH1mdW5jdGlvbiBqdCh0KXtpZighdClyZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O2Zvcih2YXIgZT1IdCgxMCk/ZG9jdW1lbnQuYm9keTpudWxsLG49dC5vZmZzZXRQYXJlbnR8fG51bGw7bj09PWUmJnQubmV4dEVsZW1lbnRTaWJsaW5nOyluPSh0PXQubmV4dEVsZW1lbnRTaWJsaW5nKS5vZmZzZXRQYXJlbnQ7dmFyIGk9biYmbi5ub2RlTmFtZTtyZXR1cm4gaSYmIkJPRFkiIT09aSYmIkhUTUwiIT09aT8tMSE9PVsiVEgiLCJURCIsIlRBQkxFIl0uaW5kZXhPZihuLm5vZGVOYW1lKSYmInN0YXRpYyI9PT1OdChuLCJwb3NpdGlvbiIpP2p0KG4pOm46dD90Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OmRvY3VtZW50LmRvY3VtZW50RWxlbWVudH1mdW5jdGlvbiBSdCh0KXtyZXR1cm4gbnVsbCE9PXQucGFyZW50Tm9kZT9SdCh0LnBhcmVudE5vZGUpOnR9ZnVuY3Rpb24gRnQodCxlKXtpZighKHQmJnQubm9kZVR5cGUmJmUmJmUubm9kZVR5cGUpKXJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7dmFyIG49dC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlKSZOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORyxpPW4/dDplLG89bj9lOnQscj1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO3Iuc2V0U3RhcnQoaSwwKSxyLnNldEVuZChvLDApO3ZhciBzLGEsbD1yLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyO2lmKHQhPT1sJiZlIT09bHx8aS5jb250YWlucyhvKSlyZXR1cm4iQk9EWSI9PT0oYT0ocz1sKS5ub2RlTmFtZSl8fCJIVE1MIiE9PWEmJmp0KHMuZmlyc3RFbGVtZW50Q2hpbGQpIT09cz9qdChsKTpsO3ZhciBjPVJ0KHQpO3JldHVybiBjLmhvc3Q/RnQoYy5ob3N0LGUpOkZ0KHQsUnQoZSkuaG9zdCl9ZnVuY3Rpb24gTXQodCl7dmFyIGU9InRvcCI9PT0oMTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJ0b3AiKT8ic2Nyb2xsVG9wIjoic2Nyb2xsTGVmdCIsbj10Lm5vZGVOYW1lO2lmKCJCT0RZIiE9PW4mJiJIVE1MIiE9PW4pcmV0dXJuIHRbZV07dmFyIGk9dC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtyZXR1cm4odC5vd25lckRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnR8fGkpW2VdfWZ1bmN0aW9uIFd0KHQsZSl7dmFyIG49IngiPT09ZT8iTGVmdCI6IlRvcCIsaT0iTGVmdCI9PT1uPyJSaWdodCI6IkJvdHRvbSI7cmV0dXJuIHBhcnNlRmxvYXQodFsiYm9yZGVyIituKyJXaWR0aCJdLDEwKStwYXJzZUZsb2F0KHRbImJvcmRlciIraSsiV2lkdGgiXSwxMCl9ZnVuY3Rpb24gVXQodCxlLG4saSl7cmV0dXJuIE1hdGgubWF4KGVbIm9mZnNldCIrdF0sZVsic2Nyb2xsIit0XSxuWyJjbGllbnQiK3RdLG5bIm9mZnNldCIrdF0sblsic2Nyb2xsIit0XSxIdCgxMCk/cGFyc2VJbnQoblsib2Zmc2V0Iit0XSkrcGFyc2VJbnQoaVsibWFyZ2luIisoIkhlaWdodCI9PT10PyJUb3AiOiJMZWZ0IildKStwYXJzZUludChpWyJtYXJnaW4iKygiSGVpZ2h0Ij09PXQ/IkJvdHRvbSI6IlJpZ2h0IildKTowKX1mdW5jdGlvbiBCdCh0KXt2YXIgZT10LmJvZHksbj10LmRvY3VtZW50RWxlbWVudCxpPUh0KDEwKSYmZ2V0Q29tcHV0ZWRTdHlsZShuKTtyZXR1cm57aGVpZ2h0OlV0KCJIZWlnaHQiLGUsbixpKSx3aWR0aDpVdCgiV2lkdGgiLGUsbixpKX19dmFyIHF0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaSh0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dO2kuZW51bWVyYWJsZT1pLmVudW1lcmFibGV8fCExLGkuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBpJiYoaS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsaS5rZXksaSl9fXJldHVybiBmdW5jdGlvbih0LGUsbil7cmV0dXJuIGUmJmkodC5wcm90b3R5cGUsZSksbiYmaSh0LG4pLHR9fSgpLEt0PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZSBpbiB0P09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp0W2VdPW4sdH0sUXQ9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIG49YXJndW1lbnRzW2VdO2Zvcih2YXIgaSBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLGkpJiYodFtpXT1uW2ldKX1yZXR1cm4gdH07ZnVuY3Rpb24gVnQodCl7cmV0dXJuIFF0KHt9LHQse3JpZ2h0OnQubGVmdCt0LndpZHRoLGJvdHRvbTp0LnRvcCt0LmhlaWdodH0pfWZ1bmN0aW9uIFl0KHQpe3ZhciBlPXt9O3RyeXtpZihIdA=="
}