uni-jsframework-vue3.js
717 KB
//{"version":"4.63","encode":"base64"}
dmFyIF9fVW5pU2VydmljZVN0YXJ0VGltZV9fID0gRGF0ZS5ub3coKTt2YXIgZ2xvYmFsPXRoaXM7IHZhciBwcm9jZXNzPXtlbnY6e319OyB2YXIgc2V0VGltZW91dD1nbG9iYWwuc2V0VGltZW91dDsKKCgpPT57dmFyIGh2PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgZ3Y9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sczt2YXIgZEk9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxoST1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO3ZhciBwdj0oZixzLHApPT5zIGluIGY/aHYoZixzLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpwfSk6ZltzXT1wLHZ2PShmLHMpPT57Zm9yKHZhciBwIGluIHN8fChzPXt9KSlkSS5jYWxsKHMscCkmJnB2KGYscCxzW3BdKTtpZihndilmb3IodmFyIHAgb2YgZ3YocykpaEkuY2FsbChzLHApJiZwdihmLHAsc1twXSk7cmV0dXJuIGZ9O3ZhciBnST0oZixzKT0+e2Zvcih2YXIgcCBpbiBzKWh2KGYscCx7Z2V0OnNbcF0sZW51bWVyYWJsZTohMH0pfTt2YXIgcWE9T2JqZWN0LmZyZWV6ZTtmdW5jdGlvbiBaYyh7Z2V0Q3VycmVudFBhZ2VzOmYsdW5pOnMsVW5pU2hhcmVkOnAsVnVlOncsVnVlU2hhcmVkOk59KXt2YXIgRT1mdW5jdGlvbihoLF8sSSxTZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGZ0KCRlKXtyZXR1cm4gJGUuJHBhZ2V9ZnVuY3Rpb24gVHQoKXtsZXQgJGU9ZigpLGV0PSRlLmxlbmd0aDtpZihldClyZXR1cm4gJGVbZXQtMV19ZnVuY3Rpb24gQnQoKXtsZXQgJGU9VHQoKTtpZigkZSlyZXR1cm4gJGUuJHZtfWZ1bmN0aW9uIFIoJGUsZXQsTnQpe2lmKEkuaXNTdHJpbmcoJGUpKU50PWV0LGV0PSRlLCRlPUJ0KCk7ZWxzZSBpZih0eXBlb2YgJGU9PSJudW1iZXIiKXtsZXQgYW49ZigpLmZpbmQoc249PmZ0KHNuKS5pZD09PSRlKTthbj8kZT1hbi4kdm06JGU9QnQoKX1pZighJGUpcmV0dXJuO2lmKCRlLl9fY2FsbF9ob29rKXJldHVybiAkZS5fX2NhbGxfaG9vayhldCxOdCk7bGV0IHVuPSRlLiRbZXRdO3JldHVybiB1biYmXy5pbnZva2VBcnJheUZucyh1bixOdCl9ZnVuY3Rpb24gQXQoJGUsZXQsTnQsdW4pe0kuaXNGdW5jdGlvbihldCkmJlNlLmluamVjdEhvb2soJGUsZXQuYmluZChOdCksdW4pfWZ1bmN0aW9uIFpuKCRlLGV0LE50KXtsZXQgdW49JGUubXBUeXBlfHxOdC4kbXBUeXBlO2lmKCEoIXVufHx1bj09PSJjb21wb25lbnQiKSYmKE9iamVjdC5rZXlzKCRlKS5mb3JFYWNoKGFuPT57aWYoXy5pc1VuaUxpZmVjeWNsZUhvb2soYW4sJGVbYW5dLCExKSl7bGV0IHNuPSRlW2FuXTtJLmlzQXJyYXkoc24pP3NuLmZvckVhY2goa249PkF0KGFuLGtuLE50LGV0KSk6QXQoYW4sc24sTnQsZXQpfX0pLHVuPT09InBhZ2UiKSl7ZXQuX19pc1Zpc2libGU9ITA7dHJ5e2xldCBhbj1ldC5hdHRycy5fX3BhZ2VRdWVyeTtSKE50LF8uT05fTE9BRCxhbiksZGVsZXRlIGV0LmF0dHJzLl9fcGFnZVF1ZXJ5O2xldCBzbj1OdC4kcGFnZTsoc249PW51bGw/dm9pZCAwOnNuLm9wZW5UeXBlKSE9PSJwcmVsb2FkUGFnZSImJlIoTnQsXy5PTl9TSE9XKX1jYXRjaChhbil7Y29uc29sZS5lcnJvcihhbi5tZXNzYWdlK18uTElORUZFRUQrYW4uc3RhY2spfX19ZnVuY3Rpb24gc3QoJGUsZXQpe0coZXQsJGUuJHJlbmRlcmpzLCRlWyIkIitfLlJFTkRFUkpTX01PRFVMRVNdKX1mdW5jdGlvbiBHKCRlLGV0LE50PXt9KXtpZighSS5pc0FycmF5KGV0KSlyZXR1cm47bGV0IHVuPSRlLnVpZCxhbj0kZS4kd3hzTW9kdWxlc3x8KCRlLiR3eHNNb2R1bGVzPVtdKSxzbj0kZS5jdHg7ZXQuZm9yRWFjaChrbj0+e050W2tuXSYmKHNuW2tuXT1uZSh1bixOdFtrbl0sa24pLGFuLnB1c2goa24pKX0pfWZ1bmN0aW9uIG5lKCRlLGV0LE50KXtsZXQgdW49e307cmV0dXJuIG5ldyBQcm94eSh1bix7Z2V0KGFuLHNuKXtyZXR1cm4gdW5bc25dfHwodW5bc25dPUp0KCRlLGV0LE50LHNuKSl9fSl9ZnVuY3Rpb24gSnQoJGUsZXQsTnQsdW4pe2xldCBhbj0oKT0+e30sc249KCk9Pl8uV1hTX1BST1RPQ09MK0pTT04uc3RyaW5naWZ5KFskZSxldCxOdCsiLiIrdW5dKTtyZXR1cm4gbmV3IFByb3h5KGFuLHtnZXQoa24sY3Ipe3JldHVybiBjcj09PSJ0b0pTT04iP3NuOmFuW2NyXXx8KGFuW2NyXT1KdCgkZSxldCxOdCsiLiIrdW4sY3IpKX0sYXBwbHkoa24sY3IscW4pe3JldHVybiBfLldYU19QUk9UT0NPTCtKU09OLnN0cmluZ2lmeShbJGUsZXQsTnQrIi4iK3VuLFsuLi5xbl1dKX19KX1mdW5jdGlvbiBjbigkZSxldCl7RyhldCwkZS4kd3hzLCRlWyIkIitfLldYU19NT0RVTEVTXSl9ZnVuY3Rpb24gU24oJGUsZXQsTnQpe2NuKCRlLGV0KSxzdCgkZSxldCksWm4oJGUsZXQsTnQpfWZ1bmN0aW9uIEduKCRlLGV0LE50KXtyZXR1cm4gJGVbZXRdPU50fWZ1bmN0aW9uIGdpKCRlLC4uLmV0KXtsZXQgTnQ9dGhpc1skZV07cmV0dXJuIE50P050KC4uLmV0KTooY29uc29sZS5lcnJvcihgbWV0aG9kICR7JGV9IG5vdCBmb3VuZGApLG51bGwpfWZ1bmN0aW9uIEhyKCRlKXtsZXQgZXQ9JGUuY29uZmlnLmVycm9ySGFuZGxlcjtyZXR1cm4gZnVuY3Rpb24odW4sYW4sc24pe2V0JiZldCh1bixhbixzbik7bGV0IGtuPSRlLl9pbnN0YW5jZTtpZigha258fCFrbi5wcm94eSl0aHJvdyB1bjtrbltfLk9OX0VSUk9SXT9SKGtuLnByb3h5LF8uT05fRVJST1IsdW4pOlNlLmxvZ0Vycm9yKHVuLHNuLGFuP2FuLiQudm5vZGU6bnVsbCwhMSl9fWZ1bmN0aW9uIENuKCRlLGV0KXtyZXR1cm4gJGU/Wy4uLm5ldyBTZXQoW10uY29uY2F0KCRlLGV0KSldOmV0fWZ1bmN0aW9uIG5uKCRlKXtfLlVuaUxpZmVjeWNsZUhvb2tzLmZvckVhY2goZXQ9PnskZVtldF09Q259KX1sZXQgeW4sSW49IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89IixNbj0vXig/OltBLVphLXpcZCsvXXs0fSkqPyg/OltBLVphLXpcZCsvXXsyfSg/Oj09KT98W0EtWmEtelxkKy9dezN9PT8pPyQvO3R5cGVvZiBhdG9iIT0iZnVuY3Rpb24iP3luPWZ1bmN0aW9uKCRlKXtpZigkZT1TdHJpbmcoJGUpLnJlcGxhY2UoL1tcdFxuXGZcciBdKy9nLCIiKSwhTW4udGVzdCgkZSkpdGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gZXhlY3V0ZSAnYXRvYicgb24gJ1dpbmRvdyc6IFRoZSBzdHJpbmcgdG8gYmUgZGVjb2RlZCBpcyBub3QgY29ycmVjdGx5IGVuY29kZWQuIik7JGUrPSI9PSIuc2xpY2UoMi0oJGUubGVuZ3RoJjMpKTtmb3IodmFyIGV0LE50PSIiLHVuLGFuLHNuPTA7c248JGUubGVuZ3RoOylldD1Jbi5pbmRleE9mKCRlLmNoYXJBdChzbisrKSk8PDE4fEluLmluZGV4T2YoJGUuY2hhckF0KHNuKyspKTw8MTJ8KHVuPUluLmluZGV4T2YoJGUuY2hhckF0KHNuKyspKSk8PDZ8KGFuPUluLmluZGV4T2YoJGUuY2hhckF0KHNuKyspKSksTnQrPXVuPT09NjQ/U3RyaW5nLmZyb21DaGFyQ29kZShldD4+MTYmMjU1KTphbj09PTY0P1N0cmluZy5mcm9tQ2hhckNvZGUoZXQ+PjE2JjI1NSxldD4+OCYyNTUpOlN0cmluZy5mcm9tQ2hhckNvZGUoZXQ+PjE2JjI1NSxldD4+OCYyNTUsZXQmMjU1KTtyZXR1cm4gTnR9OnluPWF0b2I7ZnVuY3Rpb24geHIoJGUpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoeW4oJGUpLnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24oZXQpe3JldHVybiIlIisoIjAwIitldC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpfSkuam9pbigiIikpfWZ1bmN0aW9uIG9pKCl7bGV0ICRlPXMuZ2V0U3RvcmFnZVN5bmMoInVuaV9pZF90b2tlbiIpfHwiIixldD0kZS5zcGxpdCgiLiIpO2lmKCEkZXx8ZXQubGVuZ3RoIT09MylyZXR1cm57dWlkOm51bGwscm9sZTpbXSxwZXJtaXNzaW9uOltdLHRva2VuRXhwaXJlZDowfTtsZXQgTnQ7dHJ5e050PUpTT04ucGFyc2UoeHIoZXRbMV0pKX1jYXRjaCh1bil7dGhyb3cgbmV3IEVycm9yKCJcdTgzQjdcdTUzRDZcdTVGNTNcdTUyNERcdTc1MjhcdTYyMzdcdTRGRTFcdTYwNkZcdTUxRkFcdTk1MTlcdUZGMENcdThCRTZcdTdFQzZcdTk1MTlcdThCRUZcdTRGRTFcdTYwNkZcdTRFM0FcdUZGMUEiK3VuLm1lc3NhZ2UpfXJldHVybiBOdC50b2tlbkV4cGlyZWQ9TnQuZXhwKjFlMyxkZWxldGUgTnQuZXhwLGRlbGV0ZSBOdC5pYXQsTnR9ZnVuY3Rpb24gWG4oJGUpeyRlLnVuaUlESGFzUm9sZT1mdW5jdGlvbihldCl7bGV0e3JvbGU6TnR9PW9pKCk7cmV0dXJuIE50LmluZGV4T2YoZXQpPi0xfSwkZS51bmlJREhhc1Blcm1pc3Npb249ZnVuY3Rpb24oZXQpe2xldHtwZXJtaXNzaW9uOk50fT1vaSgpO3JldHVybiB0aGlzLnVuaUlESGFzUm9sZSgiYWRtaW4iKXx8TnQuaW5kZXhPZihldCk+LTF9LCRlLnVuaUlEVG9rZW5WYWxpZD1mdW5jdGlvbigpe2xldHt0b2tlbkV4cGlyZWQ6ZXR9PW9pKCk7cmV0dXJuIGV0PkRhdGUubm93KCl9fWZ1bmN0aW9uIGpyKCRlKXtsZXQgZXQ9JGUuY29uZmlnO2V0LmVycm9ySGFuZGxlcj1fLmludm9rZUNyZWF0ZUVycm9ySGFuZGxlcigkZSxIciksbm4oZXQub3B0aW9uTWVyZ2VTdHJhdGVnaWVzKTtsZXQgTnQ9ZXQuZ2xvYmFsUHJvcGVydGllcztYbihOdCksTnQuJHNldD1HbixOdC4kYXBwbHlPcHRpb25zPVNuLE50LiRjYWxsTWV0aG9kPWdpLF8uaW52b2tlQ3JlYXRlVnVlQXBwSG9vaygkZSl9cmV0dXJuIGguaW5pdEFwcD1qcixofSh7fSxwLE4sdyk7cmV0dXJuIEV9ZnVuY3Rpb24ganUoZix7bnZ1ZTpzLFVuaVNoYXJlZDpwLFZ1ZVNoYXJlZDp3LFZ1ZVJlYWN0aXZpdHk6Tn0pe2xldCBFPXtwbGF0Zm9ybTpzLmNvbmZpZy5lbnYucGxhdGZvcm0sVW5pU2hhcmVkOnAsVnVlU2hhcmVkOncsVnVlUmVhY3Rpdml0eTpOfTtyZXR1cm4gZihFLHMuZG9jdW1lbnQpfWZ1bmN0aW9uIHBJKHtzZXRUaW1lb3V0OmYsY2xlYXJUaW1lb3V0OnMsdW5pOnAsZ2V0Q3VycmVudFBhZ2VzOncsVnVlOk4sd2VleDpFLHBsdXM6aCxCcm9hZGNhc3RDaGFubmVsOl8sVW5pVmlld0pTQnJpZGdlOkksVnVlU2hhcmVkOlNlLFVuaVNoYXJlZDpmdCxfX3VuaUNvbmZpZzpUdH0pe3ZhciBCdD1mdW5jdGlvbihSLEF0LFpuKXsidXNlIHN0cmljdCI7bGV0IHN0PVsibmF2aWdhdGUiLCJyZWRpcmVjdCIsInN3aXRjaFRhYiIsInJlTGF1bmNoIiwibmF2aWdhdGVCYWNrIl0sRz1bInNsaWRlLWluLXJpZ2h0Iiwic2xpZGUtaW4tbGVmdCIsInNsaWRlLWluLXRvcCIsInNsaWRlLWluLWJvdHRvbSIsImZhZGUtaW4iLCJ6b29tLW91dCIsInpvb20tZmFkZS1vdXQiLCJwb3AtaW4iLCJub25lIl0sbmU9WyJzbGlkZS1vdXQtcmlnaHQiLCJzbGlkZS1vdXQtbGVmdCIsInNsaWRlLW91dC10b3AiLCJzbGlkZS1vdXQtYm90dG9tIiwiZmFkZS1vdXQiLCJ6b29tLWluIiwiem9vbS1mYWRlLWluIiwicG9wLW91dCIsIm5vbmUiXSxKdD17aG92ZXJDbGFzczp7dHlwZTpTdHJpbmcsZGVmYXVsdDoibmF2aWdhdG9yLWhvdmVyIn0sdXJsOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxvcGVuVHlwZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoibmF2aWdhdGUiLHZhbGlkYXRvcihiKXtyZXR1cm4gQm9vbGVhbih+c3QuaW5kZXhPZihiKSl9fSxkZWx0YTp7dHlwZTpOdW1iZXIsZGVmYXVsdDoxfSxob3ZlclN0YXJ0VGltZTp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDo1MH0saG92ZXJTdGF5VGltZTp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDo2MDB9LGV4aXN0czp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0saG92ZXJTdG9wUHJvcGFnYXRpb246e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxhbmltYXRpb25UeXBlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIiLHZhbGlkYXRvcihiKXtyZXR1cm4hYnx8Ry5jb25jYXQobmUpLmluY2x1ZGVzKGIpfX0sYW5pbWF0aW9uRHVyYXRpb246e3R5cGU6W1N0cmluZyxOdW1iZXJdLGRlZmF1bHQ6MzAwfX07ZnVuY3Rpb24gY24oYil7cmV0dXJuKCk9PntpZihiLm9wZW5UeXBlIT09Im5hdmlnYXRlQmFjayImJiFiLnVybCl7Y29uc29sZS5lcnJvcigiPG5hdmlnYXRvci8+IHNob3VsZCBoYXZlIHVybCBhdHRyaWJ1dGUgd2hlbiB1c2luZyBuYXZpZ2F0ZVRvLCByZWRpcmVjdFRvLCByZUxhdW5jaCBvciBzd2l0Y2hUYWIiKTtyZXR1cm59bGV0IEw9cGFyc2VJbnQoYi5hbmltYXRpb25EdXJhdGlvbik7c3dpdGNoKGIub3BlblR5cGUpe2Nhc2UibmF2aWdhdGUiOnAubmF2aWdhdGVUbyh7dXJsOmIudXJsLGFuaW1hdGlvblR5cGU6Yi5hbmltYXRpb25UeXBlfHwicG9wLWluIixhbmltYXRpb25EdXJhdGlvbjpMfSk7YnJlYWs7Y2FzZSJyZWRpcmVjdCI6cC5yZWRpcmVjdFRvKHt1cmw6Yi51cmwsZXhpc3RzOmIuZXhpc3RzfSk7YnJlYWs7Y2FzZSJzd2l0Y2hUYWIiOnAuc3dpdGNoVGFiKHt1cmw6Yi51cmx9KTticmVhaztjYXNlInJlTGF1bmNoIjpwLnJlTGF1bmNoKHt1cmw6Yi51cmx9KTticmVhaztjYXNlIm5hdmlnYXRlQmFjayI6cC5uYXZpZ2F0ZUJhY2soe2RlbHRhOmIuZGVsdGEsYW5pbWF0aW9uVHlwZTpiLmFuaW1hdGlvblR5cGV8fCJwb3Atb3V0IixhbmltYXRpb25EdXJhdGlvbjpMfSk7YnJlYWt9fX1mdW5jdGlvbiBTbihiKXtpZihiLmhvdmVyQ2xhc3MmJmIuaG92ZXJDbGFzcyE9PSJub25lIil7bGV0IEw9e2hvdmVyQ2xhc3M6Yi5ob3ZlckNsYXNzfTtyZXR1cm4gQXQuaGFzT3duKGIsImhvdmVyU3RhcnRUaW1lIikmJihMLmhvdmVyU3RhcnRUaW1lPWIuaG92ZXJTdGFydFRpbWUpLEF0Lmhhc093bihiLCJob3ZlclN0YXlUaW1lIikmJihMLmhvdmVyU3RheVRpbWU9Yi5ob3ZlclN0YXlUaW1lKSxBdC5oYXNPd24oYiwiaG92ZXJTdG9wUHJvcGFnYXRpb24iKSYmKEwuaG92ZXJTdG9wUHJvcGFnYXRpb249Yi5ob3ZlclN0b3BQcm9wYWdhdGlvbiksTH1yZXR1cm57fX1mdW5jdGlvbiBHbihiLEwpe3JldHVybiBSLmNyZWF0ZUVsZW1lbnRWTm9kZSgidS10ZXh0IixBdC5leHRlbmQoe2FwcGVuZEFzVHJlZTohMH0sTCksYil9bGV0IGdpPVt7Im5hdmlnYXRvci1ob3ZlciI6eyIiOntiYWNrZ3JvdW5kQ29sb3I6InJnYmEoMCwwLDAsMC4xKSIsb3BhY2l0eTouN319fV0sSHI9Ui5kZWZpbmVDb21wb25lbnQoe25hbWU6Ik5hdmlnYXRvciIscHJvcHM6SnQsc3R5bGVzOmdpLHNldHVwKGIse3Nsb3RzOkx9KXtsZXQgaj1jbihiKTtyZXR1cm4oKT0+Ui5jcmVhdGVWTm9kZSgidmlldyIsUi5tZXJnZVByb3BzKFNuKGIpLHtvbkNsaWNrOmp9KSxbTC5kZWZhdWx0JiZMLmRlZmF1bHQoKV0pfX0pO2Z1bmN0aW9uIENuKGIpe3JldHVybiBTeW1ib2woYil9ZnVuY3Rpb24gbm4oKXtsZXQgYjt0cnl7Yj1SLmdldEN1cnJlbnRJbnN0YW5jZSgpLnJvb3QucHJveHkuJHBhZ2UuaWR9Y2F0Y2goTCl7bGV0IGo9aC53ZWJ2aWV3LmN1cnJlbnRXZWJ2aWV3KCkuaWQ7Yj1pc05hTihOdW1iZXIoaikpP2o6TnVtYmVyKGopfXJldHVybiBifWxldCB5bixJbixNbjtmdW5jdGlvbiB4cigpe3JldHVybiB0eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmdHlwZW9mIG5hdmlnYXRvcj09Im9iamVjdCImJnR5cGVvZiBkb2N1bWVudD09Im9iamVjdCI/IndlYnZpZXciOiJ2OCJ9ZnVuY3Rpb24gb2koKXtyZXR1cm4geW4ud2Vidmlldy5jdXJyZW50V2VidmlldygpLmlkfWxldCBYbixqciwkZT17fTtmdW5jdGlvbiBldChiKXtsZXQgTD1iLmRhdGEmJmIuZGF0YS5fX21lc3NhZ2U7aWYoIUx8fCFMLl9fcGFnZSlyZXR1cm47bGV0IGo9TC5fX3BhZ2UsSD0kZVtqXTtIJiZIKEwpLEwua2VlcHx8ZGVsZXRlICRlW2pdfWZ1bmN0aW9uIE50KGIsTCl7eHIoKT09PSJ2OCI/TW4/KFhuJiZYbi5jbG9zZSgpLFhuPW5ldyBNbihvaSgpKSxYbi5vbm1lc3NhZ2U9ZXQpOmpyfHwoanI9SW4ucmVxdWlyZU1vZHVsZSgiZ2xvYmFsRXZlbnQiKSxqci5hZGRFdmVudExpc3RlbmVyKCJwbHVzTWVzc2FnZSIsZXQpKTp3aW5kb3cuX19wbHVzTWVzc2FnZT1ldCwkZVtiXT1MfWNsYXNzIHVue2NvbnN0cnVjdG9yKEwpe3RoaXMud2Vidmlldz1MfXNlbmRNZXNzYWdlKEwpe2xldCBqPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoe19fbWVzc2FnZTp7ZGF0YTpMfX0pKSxIPXRoaXMud2Vidmlldy5pZDtNbj9uZXcgTW4oSCkucG9zdE1lc3NhZ2Uoaik6eW4ud2Vidmlldy5wb3N0TWVzc2FnZVRvVW5pTlZpZXcmJnluLndlYnZpZXcucG9zdE1lc3NhZ2VUb1VuaU5WaWV3KGosSCl9Y2xvc2UoKXt0aGlzLndlYnZpZXcuY2xvc2UoKX19ZnVuY3Rpb24gYW4oe2NvbnRleHQ6Yj17fSx1cmw6TCxkYXRhOmo9e30sc3R5bGU6SD17fSxvbk1lc3NhZ2U6SixvbkNsb3NlOlh9KXtsZXQgdWU9VHQuZGFya21vZGU7eW49Yi5wbHVzfHxoLEluPWIud2VleHx8KHR5cGVvZiBFPT0ib2JqZWN0Ij9FOm51bGwpLE1uPWIuQnJvYWRjYXN0Q2hhbm5lbHx8KHR5cGVvZiBfPT0ib2JqZWN0Ij9fOm51bGwpO2xldCBfZT17YXV0b0JhY2tCdXR0b246ITAsdGl0bGVTaXplOiIxN3B4In0sT2U9YHBhZ2Uke0RhdGUubm93KCl9YDtIPUF0LmV4dGVuZCh7fSxIKSxILnRpdGxlTlZpZXchPT0hMSYmSC50aXRsZU5WaWV3IT09Im5vbmUiJiYoSC50aXRsZU5WaWV3PUF0LmV4dGVuZChfZSxILnRpdGxlTlZpZXcpKTtsZXQgRGU9e3RvcDowLGJvdHRvbTowLHVzaW5nQ29tcG9uZW50czp7fSxwb3BHZXN0dXJlOiJjbG9zZSIsc2Nyb2xsSW5kaWNhdG9yOiJub25lIixhbmltYXRpb25UeXBlOiJwb3AtaW4iLGFuaW1hdGlvbkR1cmF0aW9uOjIwMCx1bmlOVmlldzp7cGF0aDpgLyR7TH0uanNgLGRlZmF1bHRGb250U2l6ZToxNix2aWV3cG9ydDp5bi5zY3JlZW4ucmVzb2x1dGlvbldpZHRofX07SD1BdC5leHRlbmQoRGUsSCk7bGV0IHBlPXluLndlYnZpZXcuY3JlYXRlKCIiLE9lLEgse2V4dHJhczp7ZnJvbTpvaSgpLHJ1bnRpbWU6eHIoKSxkYXRhOkF0LmV4dGVuZCh7fSxqLHtkYXJrbW9kZTp1ZX0pLHVzZUdsb2JhbEV2ZW50OiFNbn19KTtyZXR1cm4gcGUuYWRkRXZlbnRMaXN0ZW5lcigiY2xvc2UiLFgpLE50KE9lLExlPT57QXQuaXNGdW5jdGlvbihKKSYmSihMZS5kYXRhKSxMZS5rZWVwfHxwZS5jbG9zZSgiYXV0byIpfSkscGUuc2hvdyhILmFuaW1hdGlvblR5cGUsSC5hbmltYXRpb25EdXJhdGlvbiksbmV3IHVuKHBlKX1sZXQgc249e2Zvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn19LGtuPUNuKCJ1bCIpO2Z1bmN0aW9uIGNyKCl7bGV0IGI9W107cmV0dXJuIFIucHJvdmlkZShrbix7YWRkSGFuZGxlcihMKXtiLnB1c2goTCl9LHJlbW92ZUhhbmRsZXIoTCl7Yi5zcGxpY2UoYi5pbmRleE9mKEwpLDEpfX0pLGJ9bGV0IHFuPVIuZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJMYWJlbCIscHJvcHM6c24sc3R5bGVzOltdLHNldHVwKGIse3Nsb3RzOkx9KXtsZXQgaj1ubigpLEg9Y3IoKSxKPVg9PntiLmZvcj9JLmVtaXQoYHVuaS1sYWJlbC1jbGljay0ke2p9LSR7Yi5mb3J9YCxYLCEwKTpILmxlbmd0aCYmSFswXShYLCEwKX07cmV0dXJuKCk9PlIuY3JlYXRlVk5vZGUoInZpZXciLHtvbkNsaWNrOkp9LFtMLmRlZmF1bHQmJkwuZGVmYXVsdCgpXSl9fSk7ZnVuY3Rpb24gcGkoYixMKXt6cihiLmlkLEwpLFIud2F0Y2goKCk9PmIuaWQsKGosSCk9PntfcihILEwsITApLHpyKGosTCwhMCl9KSxSLm9uVW5tb3VudGVkKCgpPT57X3IoYi5pZCxMKX0pfWZ1bmN0aW9uIHpyKGIsTCxqKXtsZXQgSD1ubigpO2omJiFifHwhQXQuaXNQbGFpbk9iamVjdChMKXx8T2JqZWN0LmtleXMoTCkuZm9yRWFjaChKPT57aj9KLmluZGV4T2YoIkAiKSE9PTAmJkouaW5kZXhPZigidW5pLSIpIT09MCYmSS5vbihgdW5pLSR7Sn0tJHtIfS0ke2J9YCxMW0pdKTpKLmluZGV4T2YoInVuaS0iKT09PTA/SS5vbihKLExbSl0pOmImJkkub24oYHVuaS0ke0p9LSR7SH0tJHtifWAsTFtKXSl9KX1mdW5jdGlvbiBfcihiLEwsail7bGV0IEg9bm4oKTtqJiYhYnx8IUF0LmlzUGxhaW5PYmplY3QoTCl8fE9iamVjdC5rZXlzKEwpLmZvckVhY2goSj0+e2o/Si5pbmRleE9mKCJAIikhPT0wJiZKLmluZGV4T2YoInVuaS0iKSE9PTAmJkkub2ZmKGB1bmktJHtKfS0ke0h9LSR7Yn1gLExbSl0pOkouaW5kZXhPZigidW5pLSIpPT09MD9JLm9mZihKLExbSl0pOmImJkkub2ZmKGB1bmktJHtKfS0ke0h9LSR7Yn1gLExbSl0pfSl9ZnVuY3Rpb24gb28oYil7cmV0dXJuIE9iamVjdC5rZXlzKGIpLm1hcChMPT5bTCxiW0xdXSl9bGV0IFhvPVsiY2xhc3MiLCJzdHlsZSJdLHVhPS9eb25bQS1aXSsvLGppPShiPXt9KT0+e2xldHtleGNsdWRlTGlzdGVuZXJzOkw9ITEsZXhjbHVkZUtleXM6aj1bXX09YixIPVIuZ2V0Q3VycmVudEluc3RhbmNlKCksSj1SLnNoYWxsb3dSZWYoe30pLFg9Ui5zaGFsbG93UmVmKHt9KSx1ZT1SLnNoYWxsb3dSZWYoe30pLF9lPWouY29uY2F0KFhvKTtyZXR1cm4gSC5hdHRycz1SLnJlYWN0aXZlKEguYXR0cnMpLFIud2F0Y2hFZmZlY3QoKCk9PntsZXQgT2U9b28oSC5hdHRycykucmVkdWNlKChEZSxbcGUsTGVdKT0+KF9lLmluY2x1ZGVzKHBlKT9EZS5leGNsdWRlW3BlXT1MZTp1YS50ZXN0KHBlKT8oTHx8KERlLmF0dHJzW3BlXT1MZSksRGUubGlzdGVuZXJzW3BlXT1MZSk6RGUuYXR0cnNbcGVdPUxlLERlKSx7ZXhjbHVkZTp7fSxhdHRyczp7fSxsaXN0ZW5lcnM6e319KTtKLnZhbHVlPU9lLmF0dHJzLFgudmFsdWU9T2UubGlzdGVuZXJzLHVlLnZhbHVlPU9lLmV4Y2x1ZGV9KSx7JGF0dHJzOkosJGxpc3RlbmVyczpYLCRleGNsdWRlQXR0cnM6dWV9fSx4bj17aWQ6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LGhvdmVyQ2xhc3M6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6ImJ1dHRvbi1ob3ZlciJ9LGhvdmVyU3RhcnRUaW1lOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjIwfSxob3ZlclN0YXlUaW1lOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjcwfSxob3ZlclN0b3BQcm9wYWdhdGlvbjp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGRpc2FibGVkOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX0sZm9ybVR5cGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LG9wZW5UeXBlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxsb2FkaW5nOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX0scGxhaW46e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfX0sYnI9Q24oInVmIiksYWk9W3t1Yjp7IiI6e2ZsZXhEaXJlY3Rpb246InJvdyIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixwb3NpdGlvbjoicmVsYXRpdmUiLHBhZGRpbmdMZWZ0OiI1IixwYWRkaW5nUmlnaHQ6IjUiLG92ZXJmbG93OiJoaWRkZW4iLGNvbG9yOiIjMDAwMDAwIixiYWNrZ3JvdW5kQ29sb3I6IiNmOGY4ZjgiLGJvcmRlclJhZGl1czoiNSIsYm9yZGVyU3R5bGU6InNvbGlkIixib3JkZXJXaWR0aDoiMSIsYm9yZGVyQ29sb3I6IiNkYmRiZGIifX0sInViLXQiOnsiIjp7Y29sb3I6IiMwMDAwMDAiLGZvbnRTaXplOiIxOCIsdGV4dERlY29yYXRpb246Im5vbmUiLGxpbmVIZWlnaHQ6IjQ2In19LCJ1Yi1kIjp7IiI6e2JhY2tncm91bmRDb2xvcjoiI2Y4ZjhmOCJ9fSwidWItcCI6eyIiOntiYWNrZ3JvdW5kQ29sb3I6IiMwMDdhZmYiLGJvcmRlckNvbG9yOiIjMDA2MmNjIn19LCJ1Yi13Ijp7IiI6e2JhY2tncm91bmRDb2xvcjoiI2U2NDM0MCIsYm9yZGVyQ29sb3I6IiNiODM2MzMifX0sInViLWQtdCI6eyIiOntjb2xvcjoiIzAwMDAwMCJ9fSwidWItcC10Ijp7IiI6e2NvbG9yOiIjZmZmZmZmIn19LCJ1Yi13LXQiOnsiIjp7Y29sb3I6IiNmZmZmZmYifX0sInViLWQtZCI6eyIiOntiYWNrZ3JvdW5kQ29sb3I6IiNmN2Y3ZjcifX0sInViLXAtZCI6eyIiOntiYWNrZ3JvdW5kQ29sb3I6IiM2M2FjZmMiLGJvcmRlckNvbG9yOiIjNGY4YWNhIn19LCJ1Yi13LWQiOnsiIjp7YmFja2dyb3VuZENvbG9yOiIjZWM4Yjg5Iixib3JkZXJDb2xvcjoiI2JkNmY2ZSJ9fSwidWItZC10LWQiOnsiIjp7Y29sb3I6IiNjY2NjY2MifX0sInViLXAtdC1kIjp7IiI6e2NvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNikifX0sInViLXctdC1kIjp7IiI6e2NvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNikifX0sInViLWQtcGxhaW4iOnsiIjp7Ym9yZGVyQ29sb3I6IiMzNTM1MzUiLGJhY2tncm91bmRDb2xvcjoicmdiYSgwLDAsMCwwKSJ9fSwidWItcC1wbGFpbiI6eyIiOntib3JkZXJDb2xvcjoiIzAwN2FmZiIsYmFja2dyb3VuZENvbG9yOiJyZ2JhKDAsMCwwLDApIn19LCJ1Yi13LXBsYWluIjp7IiI6e2JvcmRlckNvbG9yOiIjZTY0MzQwIixiYWNrZ3JvdW5kQ29sb3I6InJnYmEoMCwwLDAsMCkifX0sInViLWQtdC1wbGFpbiI6eyIiOntjb2xvcjoiIzM1MzUzNSJ9fSwidWItcC10LXBsYWluIjp7IiI6e2NvbG9yOiIjMDA3YWZmIn19LCJ1Yi13LXQtcGxhaW4iOnsiIjp7Y29sb3I6IiNlNjQzNDAifX0sInViLWQtZC1wbGFpbiI6eyIiOntib3JkZXJDb2xvcjoiI2M2YzZjNiIsYmFja2dyb3VuZENvbG9yOiJyZ2JhKDAsMCwwLDApIn19LCJ1Yi1wLWQtcGxhaW4iOnsiIjp7Ym9yZGVyQ29sb3I6IiNjNmM2YzYiLGJhY2tncm91bmRDb2xvcjoicmdiYSgwLDAsMCwwKSJ9fSwidWItdy1kLXBsYWluIjp7IiI6e2JvcmRlckNvbG9yOiIjYzZjNmM2IixiYWNrZ3JvdW5kQ29sb3I6InJnYmEoMCwwLDAsMCkifX0sInViLWQtdC1kLXBsYWluIjp7IiI6e2NvbG9yOiJyZ2JhKDAsMCwwLDAuMikifX0sInViLXAtdC1kLXBsYWluIjp7IiI6e2NvbG9yOiJyZ2JhKDAsMCwwLDAuMikifX0sInViLXctdC1kLXBsYWluIjp7IiI6e2NvbG9yOiJyZ2JhKDAsMCwwLDAuMikifX0sInViLW1pbmkiOnsiIjp7bGluZUhlaWdodDoiMzAiLGZvbnRTaXplOiIxMyIscGFkZGluZ1RvcDowLHBhZGRpbmdSaWdodDoiMTcuNSIscGFkZGluZ0JvdHRvbTowLHBhZGRpbmdMZWZ0OiIxNy41In19LCJ1Yi1sb2FkaW5nIjp7IiI6e3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIsbWFyZ2luUmlnaHQ6IjEwIn19LCJ1Yi1kLWxvYWRpbmciOnsiIjp7Y29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC42KSIsYmFja2dyb3VuZENvbG9yOiJyZ2JhKDAsMCwwLDApIn19LCJ1Yi1wLWxvYWRpbmciOnsiIjp7Y29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC42KSIsYmFja2dyb3VuZENvbG9yOiJyZ2JhKDAsMCwwLDApIn19LCJ1Yi13LWxvYWRpbmciOnsiIjp7Y29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC42KSIsYmFja2dyb3VuZENvbG9yOiJyZ2JhKDAsMCwwLDApIn19LCJ1Yi1kLWxvYWRpbmctcGxhaW4iOnsiIjp7Y29sb3I6IiMzNTM1MzUifX0sInViLXAtbG9hZGluZy1wbGFpbiI6eyIiOntjb2xvcjoiIzAwN2FmZiIsYmFja2dyb3VuZENvbG9yOiIjMDA2MmNjIn19LCJ1Yi13LWxvYWRpbmctcGxhaW4iOnsiIjp7Y29sb3I6IiNlNjQzNDAiLGJhY2tncm91bmRDb2xvcjoicmdiYSgwLDAsMCwwKSJ9fSwidWItZC1ob3ZlciI6eyIiOntvcGFjaXR5Oi44LGJhY2tncm91bmRDb2xvcjoiI2RlZGVkZSJ9fSwidWItcC1ob3ZlciI6eyIiOntvcGFjaXR5Oi44LGJhY2tncm91bmRDb2xvcjoiIzAwNjJjYyJ9fSwidWItdy1ob3ZlciI6eyIiOntvcGFjaXR5Oi44LGJhY2tncm91bmRDb2xvcjoiI2NlM2MzOSJ9fSwidWItZC10LWhvdmVyIjp7IiI6e2NvbG9yOiJyZ2JhKDAsMCwwLDAuNikifX0sInViLXAtdC1ob3ZlciI6eyIiOntjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjYpIn19LCJ1Yi13LXQtaG92ZXIiOnsiIjp7Y29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC42KSJ9fSwidWItZC1ob3Zlci1wbGFpbiI6eyIiOntjb2xvcjoicmdiYSg1Myw1Myw1MywwLjYpIixib3JkZXJDb2xvcjoicmdiYSg1Myw1Myw1MywwLjYpIixiYWNrZ3JvdW5kQ29sb3I6InJnYmEoMCwwLDAsMCkifX0sInViLXAtaG92ZXItcGxhaW4iOnsiIjp7Y29sb3I6InJnYmEoMjYsMTczLDI1LDAuNikiLGJvcmRlckNvbG9yOiJyZ2JhKDAsMTIyLDI1NSwwLjYpIixiYWNrZ3JvdW5kQ29sb3I6InJnYmEoMCwwLDAsMCkifX0sInViLXctaG92ZXItcGxhaW4iOnsiIjp7Y29sb3I6InJnYmEoMjMwLDY3LDY0LDAuNikiLGJvcmRlckNvbG9yOiJyZ2JhKDIzMCw2Nyw2NCwwLjYpIixiYWNrZ3JvdW5kQ29sb3I6InJnYmEoMCwwLDAsMCkifX19XSx2aT17ZGVmYXVsdDoiZCIscHJpbWFyeToicCIsd2FybjoidyJ9LFZuPVIuZGVmaW5lQ29tcG9uZW50KHtpbmhlcml0QXR0cnM6ITEsbmFtZToiQnV0dG9uIixwcm9wczpBdC5leHRlbmQoeG4se3R5cGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6ImRlZmF1bHQifSxzaXplOnt0eXBlOlN0cmluZyxkZWZhdWx0OiJkZWZhdWx0In19KSxzdHlsZXM6YWksc2V0dXAoYix7c2xvdHM6TCxhdHRyczpqfSl7bGV0eyRhdHRyczpILCRleGNsdWRlQXR0cnM6SiwkbGlzdGVuZXJzOlh9PWppKHtleGNsdWRlTGlzdGVuZXJzOiEwfSksdWU9Yi50eXBlLF9lPVIucmVmKG51bGwpLE9lPVIuaW5qZWN0KGJyLCExKSxEZT0odnQsaHQpPT57bGV0IFB0PVgudmFsdWUub25DbGlja3x8KCgpPT57fSk7aWYoYi5kaXNhYmxlZClyZXR1cm47UHQodnQpO2xldCBvbj1iLmZvcm1UeXBlO2lmKG9uKXtpZighT2UpcmV0dXJuO29uPT09InN1Ym1pdCI/T2Uuc3VibWl0KHZ0KTpvbj09PSJyZXNldCImJk9lLnJlc2V0KHZ0KX19LHBlPXZ0PT57bGV0IGh0PSJ1Yi0iK3ZpW3VlXSt2dDtyZXR1cm4gYi5kaXNhYmxlZCYmKGh0Kz0iLWQiKSxiLnBsYWluJiYoaHQrPSItcGxhaW4iKSxiLnNpemU9PT0ibWluaSImJnZ0PT09Ii10IiYmKGh0Kz0iIHViLW1pbmkiKSxodH0sTGU9dnQ9PntpZihiLmRpc2FibGVkKXJldHVybiIiO2xldCBodD0idWItIit2aVt1ZV0rdnQrIi1ob3ZlciI7cmV0dXJuIGIucGxhaW4mJihodCs9Ii1wbGFpbiIpLGh0fSxwdD1SLmluamVjdChrbiwhMSk7cHQmJihwdC5hZGRIYW5kbGVyKERlKSxSLm9uQmVmb3JlVW5tb3VudCgoKT0+e3B0LnJlbW92ZUhhbmRsZXIoRGUpfSkpLHBpKGIseyJsYWJlbC1jbGljayI6RGV9KTtsZXQgT3Q9Ui5jb21wdXRlZCgoKT0+e2xldCB2dD17fTtmb3IobGV0IGh0IGluIFgudmFsdWUpe2xldCBQdD1YLnZhbHVlW2h0XTtodCE9PSJvbkNsaWNrIiYmKHZ0W2h0XT1QdCl9cmV0dXJuIHZ0fSksa3Q9KCk9PntpZighTC5kZWZhdWx0KXJldHVybltdO2xldCB2dD1MLmRlZmF1bHQoKTtyZXR1cm4gdnQubGVuZ3RoPT09MSYmdnRbMF0udHlwZT09PVIuVGV4dD9bR24odnRbMF0uY2hpbGRyZW4se2NsYXNzOiJ1Yi10ICIrcGUoIi10Iil9KV06dnR9O3JldHVybigpPT57bGV0IHZ0PUF0LmV4dGVuZCh7fSxTbihiKSx7aG92ZXJDbGFzczpMZSgiIil9LEgudmFsdWUsSi52YWx1ZSxPdC52YWx1ZSk7cmV0dXJuIFIuY3JlYXRlVk5vZGUoInZpZXciLFIubWVyZ2VQcm9wcyh7cmVmOl9lLGNsYXNzOlsidWIiLHBlKCIiKV0sb25DbGljazpEZX0sdnQpLFtiLmxvYWRpbmc/Ui5jcmVhdGVWTm9kZSgibG9hZGluZy1pbmRpY2F0b3IiLFIubWVyZ2VQcm9wcyh7Y2xhc3M6WyJ1Yi1sb2FkaW5nIixgdWItJHt2aVt1ZV19LWxvYWRpbmdgXX0se2Fycm93OiJmYWxzZSIsYW5pbWF0aW5nOiJ0cnVlIn0pLG51bGwpOm51bGwsLi4ua3QoKV0pfX19KSx5bz17c2NhbGVBcmVhOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX19O2Z1bmN0aW9uIEJyKGIpe2xldCBMPVtdO3JldHVybiBBdC5pc0FycmF5KGIpJiZiLmZvckVhY2goaj0+e1IuaXNWTm9kZShqKT9qLnR5cGU9PT1SLkZyYWdtZW50P0wucHVzaCguLi5CcihqLmNoaWxkcmVuKSk6TC5wdXNoKGopOkF0LmlzQXJyYXkoaikmJkwucHVzaCguLi5CcihqKSl9KSxMfWZ1bmN0aW9uIFBhKGIpe2xldCBMPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIGZ1bmN0aW9uKEgpe3JldHVybiBMW0hdfHwoTFtIXT1iKEgpKX19bGV0IFRpPVBhKGZ1bmN0aW9uKGIpe2xldCBMPXt9LGo9LzsoPyFbXihdKlwpKS9nLEg9LzooLispLztyZXR1cm4gYi5zcGxpdChqKS5mb3JFYWNoKGZ1bmN0aW9uKEope2lmKEope2xldCBYPUouc3BsaXQoSCk7WC5sZW5ndGg+MSYmKExbWFswXS50cmltKCldPVhbMV0udHJpbSgpKX19KSxMfSksUW49Yj0+bmV3IFByb21pc2UoKEwsaik9PntpZighYilyZXR1cm4gTCh7d2lkdGg6MCxoZWlnaHQ6MCx0b3A6MCxsZWZ0OjB9KTtFLnJlcXVpcmVNb2R1bGUoImRvbSIpLmdldENvbXBvbmVudFJlY3QoYiwoe3NpemU6Sn0pPT57TChKKX0pfSkseXI9Ui5kZWZpbmVDb21wb25lbnQoe25hbWU6Ik1vdmFibGVBcmVhIixwcm9wczp5byxzdHlsZXM6W3sidW5pLW1vdmFibGUtYXJlYSI6eyIiOntvdmVyZmxvdzoiaGlkZGVuIix3aWR0aDoiMTBweCIsaGVpZ2h0OiIxMHB4In19fV0sc2V0dXAoYix7c2xvdHM6TH0pe2xldCBqPVIucmVmKDApLEg9Ui5yZWYoMCksSj1SLnJlZigwKSxYPVIucmVmKDApLHVlPVIucmVmKCExKSxfZT1SLnJlZihudWxsKSxPZT1bXSxEZT1udWxsLHBlPWh0PT57RGU9aHR9LExlPSgpPT5RbihfZS52YWx1ZSkudGhlbigoe3dpZHRoOmh0LGhlaWdodDpQdCx0b3A6b24sbGVmdDpGbn0pPT57ai52YWx1ZT1odCxILnZhbHVlPVB0LEoudmFsdWU9b24sWC52YWx1ZT1Gbn0pLHB0PSgpPT57TGUoKS50aGVuKCgpPT57T2UuZm9yRWFjaChmdW5jdGlvbihodCl7aHQuc2V0UGFyZW50KCl9KX0pfTtSLm9uTW91bnRlZCgoKT0+e2YoKCk9Pnt1ZS52YWx1ZT0hMCxwdCgpfSwyMDApfSk7bGV0IE90PXtvblBhbnN0YXJ0KGh0KXtEZSYmRGUudG91Y2hzdGFydChodCl9LG9uUGFubW92ZShodCl7aHQuc3RvcFByb3BhZ2F0aW9uKCksRGUmJkRlLnRvdWNobW92ZShodCl9LG9uUGFuZW5kKGh0KXtEZSYmRGUudG91Y2hlbmQoaHQpLERlPW51bGx9fSxrdD1odD0+e09lLnB1c2goaHQpfSx2dD1odD0+e2xldCBQdD1PZS5pbmRleE9mKGh0KTtQdD49MCYmT2Uuc3BsaWNlKFB0LDEpfTtyZXR1cm4gUi5wcm92aWRlKCJfaXNNb3VudGVkIix1ZSksUi5wcm92aWRlKCJwYXJlbnRTaXplIix7d2lkdGg6aixoZWlnaHQ6SCx0b3A6SixsZWZ0Olh9KSxSLnByb3ZpZGUoImFkZE1vdmFibGVWaWV3Q29udGV4dCIsa3QpLFIucHJvdmlkZSgicmVtb3ZlTW92YWJsZVZpZXdDb250ZXh0Iix2dCksUi5wcm92aWRlKCJzZXRUb3VjaE1vdmFibGVWaWV3Q29udGV4dCIscGUpLCgpPT57bGV0IGh0PUwuZGVmYXVsdCYmTC5kZWZhdWx0KCksUHQ9QnIoaHQpO3JldHVybiBSLmNyZWF0ZVZOb2RlKCJ2aWV3IixSLm1lcmdlUHJvcHMoe3JlZjpfZSxjbGFzczoidW5pLW1vdmFibGUtYXJlYSJ9LE90KSxbUHRdKX19fSk7ZnVuY3Rpb24gTmEoYil7bGV0IEw9e307ZnVuY3Rpb24gaihwZSxMZSl7TFtwZV0mJkxbcGVdKExlKX1mdW5jdGlvbiBIKHBlLExlKXtMW3BlXT1mdW5jdGlvbihwdCl7QXQuaXNGdW5jdGlvbihMZSkmJihwdC50b3VjaGVzPXB0LmNoYW5nZWRUb3VjaGVzLExlKHB0KT09PSExJiZwdC5zdG9wUHJvcGFnYXRpb24oKSl9fWxldCBKPTAsWD0wLHVlPTAsX2U9MCxPZT1mdW5jdGlvbihwZSxMZSxwdCxPdCl7aWYoYih7dGFyZ2V0OnBlLnRhcmdldCxjdXJyZW50VGFyZ2V0OnBlLmN1cnJlbnRUYXJnZXQsc3RvcFByb3BhZ2F0aW9uOnBlLnN0b3BQcm9wYWdhdGlvbi5iaW5kKHBlKSx0b3VjaGVzOnBlLnRvdWNoZXMsY2hhbmdlZFRvdWNoZXM6cGUuY2hhbmdlZFRvdWNoZXMsZGV0YWlsOntzdGF0ZTpMZSx4OnB0LHk6T3QsZHg6cHQtSixkeTpPdC1YLGRkeDpwdC11ZSxkZHk6T3QtX2UsdGltZVN0YW1wOnBlLnRpbWVTdGFtcHx8RGF0ZS5ub3coKX19KT09PSExKXJldHVybiExfSxEZT1udWxsO3JldHVybiBIKCJ0b3VjaHN0YXJ0IixmdW5jdGlvbihwZSl7aWYoIURlKXJldHVybiBEZT1wZSxKPXVlPXBlLnRvdWNoZXNbMF0ucGFnZVgsWD1fZT1wZS50b3VjaGVzWzBdLnBhZ2VZLE9lKHBlLCJzdGFydCIsSixYKX0pLEgoInRvdWNobW92ZSIsZnVuY3Rpb24ocGUpe2lmKERlKXtsZXQgTGU9T2UocGUsIm1vdmUiLHBlLnRvdWNoZXNbMF0ucGFnZVgscGUudG91Y2hlc1swXS5wYWdlWSk7cmV0dXJuIHVlPXBlLnRvdWNoZXNbMF0ucGFnZVgsX2U9cGUudG91Y2hlc1swXS5wYWdlWSxMZX19KSxIKCJ0b3VjaGVuZCIsZnVuY3Rpb24ocGUpe2lmKERlKXJldHVybiBEZT1udWxsLE9lKHBlLCJlbmQiLHBlLmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VYLHBlLmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VZKX0pLHt0b3VjaHN0YXJ0OmZ1bmN0aW9uKHBlKXtqKCJ0b3VjaHN0YXJ0IixwZSl9LHRvdWNobW92ZTpmdW5jdGlvbihwZSl7aigidG91Y2htb3ZlIixwZSl9LHRvdWNoZW5kOmZ1bmN0aW9uKHBlKXtqKCJ0b3VjaGVuZCIscGUpfX19ZnVuY3Rpb24gZ3IoYixMKXtyZXR1cm4oaixIKT0+e2IudmFsdWUmJkwoaixFbyhqLGIudmFsdWUsSHx8e30pKX19ZnVuY3Rpb24gRW8oYixMLGo9e30pe3JldHVybiBMPURvKEwpLHt0eXBlOmIsdGltZVN0YW1wOkRhdGUubm93KCksdGFyZ2V0OkwsY3VycmVudFRhcmdldDpMLGRldGFpbDpqfX1sZXQgTW89Wm4uY2FjaGVTdHJpbmdGdW5jdGlvbihiPT5iLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpK2Iuc2xpY2UoMSkpO2Z1bmN0aW9uIERvKGIpe2xldHtvZmZzZXRMZWZ0Okwsb2Zmc2V0VG9wOmp9PWIsSD1iLmF0dHIsSj17fTtyZXR1cm4gT2JqZWN0LmtleXMoSHx8e30pLmZvckVhY2goWD0+e1guaW5kZXhPZigiZGF0YSIpPT09MCYmKEpbTW8oWC5yZXBsYWNlKCJkYXRhIiwiIikpXT1IW1hdKX0pLHtpZDpIJiZILmlkfHwiIixkYXRhc2V0Okosb2Zmc2V0TGVmdDpMfHwwLG9mZnNldFRvcDpqfHwwfX1mdW5jdGlvbiBPaShiLEwsail7cmV0dXJuIGI+TC1qJiZiPEwran1mdW5jdGlvbiBzaShiLEwpe3JldHVybiBPaShiLDAsTCl9ZnVuY3Rpb24gU28oKXt9U28ucHJvdG90eXBlLng9ZnVuY3Rpb24oYil7cmV0dXJuIE1hdGguc3FydChiKX07ZnVuY3Rpb24gTHIoYixMKXt0aGlzLl9tPWIsdGhpcy5fZj0xZTMqTCx0aGlzLl9zdGFydFRpbWU9MCx0aGlzLl92PTB9THIucHJvdG90eXBlLnNldFY9ZnVuY3Rpb24oYixMKXtsZXQgaj1NYXRoLnBvdyhNYXRoLnBvdyhiLDIpK01hdGgucG93KEwsMiksLjUpO3RoaXMuX3hfdj1iLHRoaXMuX3lfdj1MLHRoaXMuX3hfYT0tdGhpcy5fZip0aGlzLl94X3Yvaix0aGlzLl95X2E9LXRoaXMuX2YqdGhpcy5feV92L2osdGhpcy5fdD1NYXRoLmFicyhiL3RoaXMuX3hfYSl8fE1hdGguYWJzKEwvdGhpcy5feV9hKSx0aGlzLl9sYXN0RHQ9bnVsbCx0aGlzLl9zdGFydFRpbWU9bmV3IERhdGUoKS5nZXRUaW1lKCl9LExyLnByb3RvdHlwZS5zZXRTPWZ1bmN0aW9uKGIsTCl7dGhpcy5feF9zPWIsdGhpcy5feV9zPUx9LExyLnByb3RvdHlwZS5zPWZ1bmN0aW9uKGIpe2I9PT12b2lkIDAmJihiPShuZXcgRGF0ZSgpLmdldFRpbWUoKS10aGlzLl9zdGFydFRpbWUpLzFlMyksYj50aGlzLl90JiYoYj10aGlzLl90LHRoaXMuX2xhc3REdD1iKTtsZXQgTD10aGlzLl94X3YqYisuNSp0aGlzLl94X2EqTWF0aC5wb3coYiwyKSt0aGlzLl94X3Msaj10aGlzLl95X3YqYisuNSp0aGlzLl95X2EqTWF0aC5wb3coYiwyKSt0aGlzLl95X3M7cmV0dXJuKHRoaXMuX3hfYT4wJiZMPHRoaXMuX2VuZFBvc2l0aW9uWHx8dGhpcy5feF9hPDAmJkw+dGhpcy5fZW5kUG9zaXRpb25YKSYmKEw9dGhpcy5fZW5kUG9zaXRpb25YKSwodGhpcy5feV9hPjAmJmo8dGhpcy5fZW5kUG9zaXRpb25ZfHx0aGlzLl95X2E8MCYmaj50aGlzLl9lbmRQb3NpdGlvblkpJiYoaj10aGlzLl9lbmRQb3NpdGlvblkpLHt4OkwseTpqfX0sTHIucHJvdG90eXBlLmRzPWZ1bmN0aW9uKGIpe3JldHVybiBiPT09dm9pZCAwJiYoYj0obmV3IERhdGUoKS5nZXRUaW1lKCktdGhpcy5fc3RhcnRUaW1lKS8xZTMpLGI+dGhpcy5fdCYmKGI9dGhpcy5fdCkse2R4OnRoaXMuX3hfdit0aGlzLl94X2EqYixkeTp0aGlzLl95X3YrdGhpcy5feV9hKmJ9fSxMci5wcm90b3R5cGUuZGVsdGE9ZnVuY3Rpb24oKXtyZXR1cm57eDotMS41Kk1hdGgucG93KHRoaXMuX3hfdiwyKS90aGlzLl94X2F8fDAseTotMS41Kk1hdGgucG93KHRoaXMuX3lfdiwyKS90aGlzLl95X2F8fDB9fSxMci5wcm90b3R5cGUuZHQ9ZnVuY3Rpb24oKXtyZXR1cm4tdGhpcy5feF92L3RoaXMuX3hfYX0sTHIucHJvdG90eXBlLmRvbmU9ZnVuY3Rpb24oKXtsZXQgYj1PaSh0aGlzLnMoKS54LHRoaXMuX2VuZFBvc2l0aW9uWCl8fE9pKHRoaXMucygpLnksdGhpcy5fZW5kUG9zaXRpb25ZKXx8dGhpcy5fbGFzdER0PT09dGhpcy5fdDtyZXR1cm4gdGhpcy5fbGFzdER0PW51bGwsYn0sTHIucHJvdG90eXBlLnNldEVuZD1mdW5jdGlvbihiLEwpe3RoaXMuX2VuZFBvc2l0aW9uWD1iLHRoaXMuX2VuZFBvc2l0aW9uWT1MfSxMci5wcm90b3R5cGUucmVjb25maWd1cmU9ZnVuY3Rpb24oYixMKXt0aGlzLl9tPWIsdGhpcy5fZj0xZTMqTH07ZnVuY3Rpb24gQXIoYixMLGope3RoaXMuX209Yix0aGlzLl9rPUwsdGhpcy5fYz1qLHRoaXMuX3NvbHV0aW9uPW51bGwsdGhpcy5fZW5kUG9zaXRpb249MCx0aGlzLl9zdGFydFRpbWU9MH1Bci5wcm90b3R5cGUuX3NvbHZlPWZ1bmN0aW9uKGIsTCl7bGV0IGo9dGhpcy5fYyxIPXRoaXMuX20sSj10aGlzLl9rLFg9aipqLTQqSCpKO2lmKFg9PT0wKXtsZXQgcGU9LWovKDIqSCksTGU9YixwdD1MLyhwZSpiKTtyZXR1cm57eDpmdW5jdGlvbihPdCl7cmV0dXJuKExlK3B0Kk90KSpNYXRoLnBvdyhNYXRoLkUscGUqT3QpfSxkeDpmdW5jdGlvbihPdCl7bGV0IGt0PU1hdGgucG93KE1hdGguRSxwZSpPdCk7cmV0dXJuIHBlKihMZStwdCpPdCkqa3QrcHQqa3R9fX1pZihYPjApe2xldCBwZT0oLWotTWF0aC5zcXJ0KFgpKS8oMipIKSxMZT0oLWorTWF0aC5zcXJ0KFgpKS8oMipIKSxwdD0oTC1wZSpiKS8oTGUtcGUpLE90PWItcHQ7cmV0dXJue3g6ZnVuY3Rpb24oa3Qpe2xldCB2dCxodDtyZXR1cm4ga3Q9PT10aGlzLl90JiYodnQ9dGhpcy5fcG93RVIxVCxodD10aGlzLl9wb3dFUjJUKSx0aGlzLl90PWt0LHZ0fHwodnQ9dGhpcy5fcG93RVIxVD1NYXRoLnBvdyhNYXRoLkUscGUqa3QpKSxodHx8KGh0PXRoaXMuX3Bvd0VSMlQ9TWF0aC5wb3coTWF0aC5FLExlKmt0KSksT3QqdnQrcHQqaHR9LGR4OmZ1bmN0aW9uKGt0KXtsZXQgdnQsaHQ7cmV0dXJuIGt0PT09dGhpcy5fdCYmKHZ0PXRoaXMuX3Bvd0VSMVQsaHQ9dGhpcy5fcG93RVIyVCksdGhpcy5fdD1rdCx2dHx8KHZ0PXRoaXMuX3Bvd0VSMVQ9TWF0aC5wb3coTWF0aC5FLHBlKmt0KSksaHR8fChodD10aGlzLl9wb3dFUjJUPU1hdGgucG93KE1hdGguRSxMZSprdCkpLE90KnBlKnZ0K3B0KkxlKmh0fX19bGV0IHVlPU1hdGguc3FydCg0KkgqSi1qKmopLygyKkgpLF9lPS1qLzIqSCxPZT1iLERlPShMLV9lKmIpL3VlO3JldHVybnt4OmZ1bmN0aW9uKHBlKXtyZXR1cm4gTWF0aC5wb3coTWF0aC5FLF9lKnBlKSooT2UqTWF0aC5jb3ModWUqcGUpK0RlKk1hdGguc2luKHVlKnBlKSl9LGR4OmZ1bmN0aW9uKHBlKXtsZXQgTGU9TWF0aC5wb3coTWF0aC5FLF9lKnBlKSxwdD1NYXRoLmNvcyh1ZSpwZSksT3Q9TWF0aC5zaW4odWUqcGUpO3JldHVybiBMZSooRGUqdWUqcHQtT2UqdWUqT3QpK19lKkxlKihEZSpPdCtPZSpwdCl9fX0sQXIucHJvdG90eXBlLng9ZnVuY3Rpb24oYil7cmV0dXJuIGI9PT12b2lkIDAmJihiPShuZXcgRGF0ZSgpLmdldFRpbWUoKS10aGlzLl9zdGFydFRpbWUpLzFlMyksdGhpcy5fc29sdXRpb24/dGhpcy5fZW5kUG9zaXRpb24rdGhpcy5fc29sdXRpb24ueChiKTowfSxBci5wcm90b3R5cGUuZHg9ZnVuY3Rpb24oYil7cmV0dXJuIGI9PT12b2lkIDAmJihiPShuZXcgRGF0ZSgpLmdldFRpbWUoKS10aGlzLl9zdGFydFRpbWUpLzFlMyksdGhpcy5fc29sdXRpb24/dGhpcy5fc29sdXRpb24uZHgoYik6MH0sQXIucHJvdG90eXBlLnNldEVuZD1mdW5jdGlvbihiLEwsail7aWYoanx8KGo9bmV3IERhdGUoKS5nZXRUaW1lKCkpLGIhPT10aGlzLl9lbmRQb3NpdGlvbnx8IXNpKEwsLjEpKXtMPUx8fDA7bGV0IEg9dGhpcy5fZW5kUG9zaXRpb247dGhpcy5fc29sdXRpb24mJihzaShMLC4xKSYmKEw9dGhpcy5fc29sdXRpb24uZHgoKGotdGhpcy5fc3RhcnRUaW1lKS8xZTMpKSxIPXRoaXMuX3NvbHV0aW9uLngoKGotdGhpcy5fc3RhcnRUaW1lKS8xZTMpLHNpKEwsLjEpJiYoTD0wKSxzaShILC4xKSYmKEg9MCksSCs9dGhpcy5fZW5kUG9zaXRpb24pLHRoaXMuX3NvbHV0aW9uJiZzaShILWIsLjEpJiZzaShMLC4xKXx8KHRoaXMuX2VuZFBvc2l0aW9uPWIsdGhpcy5fc29sdXRpb249dGhpcy5fc29sdmUoSC10aGlzLl9lbmRQb3NpdGlvbixMKSx0aGlzLl9zdGFydFRpbWU9ail9fSxBci5wcm90b3R5cGUuc25hcD1mdW5jdGlvbihiKXt0aGlzLl9zdGFydFRpbWU9bmV3IERhdGUoKS5nZXRUaW1lKCksdGhpcy5fZW5kUG9zaXRpb249Yix0aGlzLl9zb2x1dGlvbj17eDpmdW5jdGlvbigpe3JldHVybiAwfSxkeDpmdW5jdGlvbigpe3JldHVybiAwfX19LEFyLnByb3RvdHlwZS5kb25lPWZ1bmN0aW9uKGIpe3JldHVybiBifHwoYj1uZXcgRGF0ZSgpLmdldFRpbWUoKSksT2kodGhpcy54KCksdGhpcy5fZW5kUG9zaXRpb24sLjEpJiZzaSh0aGlzLmR4KCksLjEpfSxBci5wcm90b3R5cGUucmVjb25maWd1cmU9ZnVuY3Rpb24oYixMLGope3RoaXMuX209Yix0aGlzLl9rPUwsdGhpcy5fYz1qLHRoaXMuZG9uZSgpfHwodGhpcy5fc29sdXRpb249dGhpcy5fc29sdmUodGhpcy54KCktdGhpcy5fZW5kUG9zaXRpb24sdGhpcy5keCgpKSx0aGlzLl9zdGFydFRpbWU9bmV3IERhdGUoKS5nZXRUaW1lKCkpfSxBci5wcm90b3R5cGUuc3ByaW5nQ29uc3RhbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fa30sQXIucHJvdG90eXBlLmRhbXBpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY30sQXIucHJvdG90eXBlLmNvbmZpZ3VyYXRpb249ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKGosSCl7ai5yZWNvbmZpZ3VyZSgxLEgsai5kYW1waW5nKCkpfWZ1bmN0aW9uIEwoaixIKXtqLnJlY29uZmlndXJlKDEsai5zcHJpbmdDb25zdGFudCgpLEgpfXJldHVyblt7bGFiZWw6IlNwcmluZyBDb25zdGFudCIscmVhZDp0aGlzLnNwcmluZ0NvbnN0YW50LmJpbmQodGhpcyksd3JpdGU6Yi5iaW5kKHRoaXMsdGhpcyksbWluOjEwMCxtYXg6MWUzfSx7bGFiZWw6IkRhbXBpbmciLHJlYWQ6dGhpcy5kYW1waW5nLmJpbmQodGhpcyksd3JpdGU6TC5iaW5kKHRoaXMsdGhpcyksbWluOjEsbWF4OjUwMH1dfTtmdW5jdGlvbiBhbyhiLEwsail7dGhpcy5fc3ByaW5nWD1uZXcgQXIoYixMLGopLHRoaXMuX3NwcmluZ1k9bmV3IEFyKGIsTCxqKSx0aGlzLl9zcHJpbmdTY2FsZT1uZXcgQXIoYixMLGopLHRoaXMuX3N0YXJ0VGltZT0wfWFvLnByb3RvdHlwZS5zZXRFbmQ9ZnVuY3Rpb24oYixMLGosSCl7bGV0IEo9bmV3IERhdGUoKS5nZXRUaW1lKCk7dGhpcy5fc3ByaW5nWC5zZXRFbmQoYixILEopLHRoaXMuX3NwcmluZ1kuc2V0RW5kKEwsSCxKKSx0aGlzLl9zcHJpbmdTY2FsZS5zZXRFbmQoaixILEopLHRoaXMuX3N0YXJ0VGltZT1KfSxhby5wcm90b3R5cGUueD1mdW5jdGlvbigpe2xldCBiPShuZXcgRGF0ZSgpLmdldFRpbWUoKS10aGlzLl9zdGFydFRpbWUpLzFlMztyZXR1cm57eDp0aGlzLl9zcHJpbmdYLngoYikseTp0aGlzLl9zcHJpbmdZLngoYiksc2NhbGU6dGhpcy5fc3ByaW5nU2NhbGUueChiKX19LGFvLnByb3RvdHlwZS5kb25lPWZ1bmN0aW9uKCl7bGV0IGI9bmV3IERhdGUoKS5nZXRUaW1lKCk7cmV0dXJuIHRoaXMuX3NwcmluZ1guZG9uZShiKSYmdGhpcy5fc3ByaW5nWS5kb25lKGIpJiZ0aGlzLl9zcHJpbmdTY2FsZS5kb25lKGIpfSxhby5wcm90b3R5cGUucmVjb25maWd1cmU9ZnVuY3Rpb24oYixMLGope3RoaXMuX3NwcmluZ1gucmVjb25maWd1cmUoYixMLGopLHRoaXMuX3NwcmluZ1kucmVjb25maWd1cmUoYixMLGopLHRoaXMuX3NwcmluZ1NjYWxlLnJlY29uZmlndXJlKGIsTCxqKX07bGV0IHdvPXtkaXJlY3Rpb246e3R5cGU6U3RyaW5nLGRlZmF1bHQ6Im5vbmUifSxpbmVydGlhOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX0sb3V0T2ZCb3VuZHM6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSx4Ont0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjB9LHk6e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6MH0sZGFtcGluZzp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDoyMH0sZnJpY3Rpb246e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6Mn0sZGlzYWJsZWQ6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSxzY2FsZTp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LHNjYWxlTWluOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0Oi41fSxzY2FsZU1heDp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDoxMH0sc2NhbGVWYWx1ZTp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDoxfSxhbmltYXRpb246e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiEwfX07ZnVuY3Rpb24gUGkoYixMKXtyZXR1cm4rKCgxZTMqYi0xZTMqTCkvMWUzKS50b0ZpeGVkKDEpfWZ1bmN0aW9uIGxpKGIsTCxqKXtsZXQgSD17aWQ6MCxjYW5jZWxsZWQ6ITF9LEo9ZnVuY3Rpb24odWUpe3VlJiZ1ZS5pZCYmR2kodWUuaWQpLHVlJiYodWUuY2FuY2VsbGVkPSEwKX07ZnVuY3Rpb24gWCh1ZSxfZSxPZSxEZSl7aWYoIXVlfHwhdWUuY2FuY2VsbGVkKXtPZShfZSk7bGV0IHBlPV9lLmRvbmUoKTtwZXx8dWUuY2FuY2VsbGVkfHwodWUuaWQ9V2koWC5iaW5kKG51bGwsdWUsX2UsT2UsRGUpKSkscGUmJkRlJiZEZShfZSl9fXJldHVybiBYKEgsYixMLGopLHtjYW5jZWw6Si5iaW5kKG51bGwsSCksbW9kZWw6Yn19bGV0IHppPSExO2Z1bmN0aW9uIEZvKGIpe3ppfHwoemk9ITAsV2koZnVuY3Rpb24oKXtiKCksemk9ITF9KSl9ZnVuY3Rpb24gV2koYil7cmV0dXJuIGYoYiwxNil9ZnVuY3Rpb24gR2koYil7cyhiKX1sZXQgSWE9RS5yZXF1aXJlTW9kdWxlKCJhbmltYXRpb24iKSxxaT1SLmRlZmluZUNvbXBvbmVudCh7bmFtZToiTW92YWJsZVZpZXciLHByb3BzOndvLGVtaXRzOlsiY2hhbmdlIiwic2NhbGUiXSxzdHlsZXM6W3sidW5pLW1vdmFibGUtdmlldyI6eyIiOntwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDoiMHB4IixsZWZ0OiIwcHgiLHdpZHRoOiIxMHB4IixoZWlnaHQ6IjEwcHgifX19XSxzZXR1cChiLHtlbWl0Okwsc2xvdHM6an0pe2xldCBIPVIucmVmKG51bGwpLEo9Z3IoSCxMKSxYPVIuaW5qZWN0KCJzZXRUb3VjaE1vdmFibGVWaWV3Q29udGV4dCIsKCk9Pnt9KSx1ZT1EbihiLEosSCxYKTtyZXR1cm4oKT0+e2xldCBfZT17cHJldmVudEdlc3R1cmU6ITB9O3JldHVybiBSLmNyZWF0ZVZOb2RlKCJ2aWV3IixSLm1lcmdlUHJvcHMoe3JlZjpILG9uVG91Y2hzdGFydDp1ZSxjbGFzczoidW5pLW1vdmFibGUtdmlldyIsc3R5bGU6InRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjsifSxfZSksW2ouZGVmYXVsdCYmai5kZWZhdWx0KCldKX19fSk7ZnVuY3Rpb24gRG4oYixMLGosSCl7bGV0IEo9Ui5pbmplY3QoIl9pc01vdW50ZWQiLFIucmVmKCExKSksWD1SLmluamVjdCgicGFyZW50U2l6ZSIse3dpZHRoOlIucmVmKDApLGhlaWdodDpSLnJlZigwKSx0b3A6Ui5yZWYoMCksbGVmdDpSLnJlZigwKX0pLHVlPVIuaW5qZWN0KCJhZGRNb3ZhYmxlVmlld0NvbnRleHQiLCgpPT57fSksX2U9Ui5pbmplY3QoInJlbW92ZU1vdmFibGVWaWV3Q29udGV4dCIsKCk9Pnt9KSxPZT17dG91Y2hzdGFydDooKT0+e30sdG91Y2htb3ZlOigpPT57fSx0b3VjaGVuZDooKT0+e319O2Z1bmN0aW9uIERlKHllKXtyZXR1cm4gTnVtYmVyKHllKXx8MH1mdW5jdGlvbiBwZSh5ZSl7cmV0dXJuIHllPU51bWJlcih5ZSksaXNOYU4oeWUpPzE6eWV9bGV0IExlPVIucmVmKERlKGIueCkpLHB0PVIucmVmKERlKGIueSkpLE90PVIucmVmKHBlKE51bWJlcihiLnNjYWxlVmFsdWUpKSksa3Q9Ui5yZWYoMCksdnQ9Ui5yZWYoMCksaHQ9Ui5yZWYoMCksUHQ9Ui5yZWYoMCksb249Ui5yZWYoMCksRm49Ui5yZWYoMCksd3Q9bnVsbCxlbj1udWxsLHZuPXt4OjAseTowfSx1cj17eDowLHk6MH0scm49MSxCbj0wLG5yPTAsX2E9ITEsZnIsTm8sbW49bnVsbCx0YT1udWxsLG5hPXt0b3A6MCxsZWZ0OjAsd2lkdGg6MCxoZWlnaHQ6MH0sWmk9bmV3IFNvLERhPW5ldyBTbyxycj17aGlzdG9yeVg6WzAsMF0saGlzdG9yeVk6WzAsMF0saGlzdG9yeVQ6WzAsMF19LEZhPVIuY29tcHV0ZWQoKCk9PntsZXQgeWU9TnVtYmVyKGIuZGFtcGluZyk7cmV0dXJuIGlzTmFOKHllKT8yMDp5ZX0pLFduPVIuY29tcHV0ZWQoKCk9PntsZXQgeWU9TnVtYmVyKGIuZnJpY3Rpb24pO3JldHVybiBpc05hTih5ZSl8fHllPD0wPzI6eWV9KSxZbj1SLmNvbXB1dGVkKCgpPT57bGV0IHllPU51bWJlcihiLnNjYWxlTWluKTtyZXR1cm4gaXNOYU4oeWUpPy41OnllfSksR289Ui5jb21wdXRlZCgoKT0+e2xldCB5ZT1OdW1iZXIoYi5zY2FsZU1heCk7cmV0dXJuIGlzTmFOKHllKT8xMDp5ZX0pLHBvPVIuY29tcHV0ZWQoKCk9PmIuZGlyZWN0aW9uPT09ImFsbCJ8fGIuZGlyZWN0aW9uPT09Imhvcml6b250YWwiKSxyYT1SLmNvbXB1dGVkKCgpPT5iLmRpcmVjdGlvbj09PSJhbGwifHxiLmRpcmVjdGlvbj09PSJ2ZXJ0aWNhbCIpLEVpPW5ldyBhbygxLDkqTWF0aC5wb3coRmEudmFsdWUsMikvNDAsRmEudmFsdWUpLElvPW5ldyBMcigxLFduLnZhbHVlKTtSLndhdGNoKCgpPT5iLngseWU9PntMZS52YWx1ZT1EZSh5ZSl9KSxSLndhdGNoKCgpPT5iLnkseWU9PntwdC52YWx1ZT1EZSh5ZSl9KSxSLndhdGNoKCgpPT5iLnNjYWxlVmFsdWUseWU9PntPdC52YWx1ZT1wZShOdW1iZXIoeWUpKX0pLFIud2F0Y2goTGUsaWEpLFIud2F0Y2gocHQsR3IpLFIud2F0Y2goT3QsaXIpLFIud2F0Y2goWW4sa28pLFIud2F0Y2goR28sa28pO2Z1bmN0aW9uIFRuKCl7ZW4mJmVuLmNhbmNlbCgpLHd0JiZ3dC5jYW5jZWwoKX1mdW5jdGlvbiBpYSh5ZSl7aWYocG8udmFsdWUpe2lmKHllK3VyLng9PT1CbilyZXR1cm4gQm47d3QmJnd0LmNhbmNlbCgpLGVpKHllK3VyLngscHQudmFsdWUrdXIueSxybil9cmV0dXJuIHllfWZ1bmN0aW9uIEdyKHllKXtpZihyYS52YWx1ZSl7aWYoeWUrdXIueT09PW5yKXJldHVybiBucjt3dCYmd3QuY2FuY2VsKCksZWkoTGUudmFsdWUrdXIueCx5ZSt1ci55LHJuKX1yZXR1cm4geWV9ZnVuY3Rpb24ga28oKXtpZighYi5zY2FsZSlyZXR1cm4hMTttcihybiwhMCl9ZnVuY3Rpb24gaXIoeWUpe3JldHVybiBiLnNjYWxlPyh5ZT1maSh5ZSksbXIoeWUsITApLHllKTohMX1mdW5jdGlvbiBkcigpe2IuZGlzYWJsZWR8fChUbigpLHJyLmhpc3RvcnlYPVswLDBdLHJyLmhpc3RvcnlZPVswLDBdLHJyLmhpc3RvcnlUPVswLDBdLHBvLnZhbHVlJiYoZnI9Qm4pLHJhLnZhbHVlJiYoTm89bnIpLG1uPW51bGwsdGE9bnVsbCxfYT0hMCl9ZnVuY3Rpb24gaHIoeWUpe2lmKCFiLmRpc2FibGVkJiZfYSl7bGV0IER0PUJuLEZ0PW5yO2lmKHRhPT09bnVsbCYmKHRhPU1hdGguYWJzKHllLmRldGFpbC5keC95ZS5kZXRhaWwuZHkpPjE/Imh0b3VjaG1vdmUiOiJ2dG91Y2htb3ZlIikscG8udmFsdWUmJihEdD15ZS5kZXRhaWwuZHgrZnIscnIuaGlzdG9yeVguc2hpZnQoKSxyci5oaXN0b3J5WC5wdXNoKER0KSwhcmEudmFsdWUmJm1uPT09bnVsbCYmKG1uPU1hdGguYWJzKHllLmRldGFpbC5keC95ZS5kZXRhaWwuZHkpPDEpKSxyYS52YWx1ZSYmKEZ0PXllLmRldGFpbC5keStObyxyci5oaXN0b3J5WS5zaGlmdCgpLHJyLmhpc3RvcnlZLnB1c2goRnQpLCFwby52YWx1ZSYmbW49PT1udWxsJiYobW49TWF0aC5hYnMoeWUuZGV0YWlsLmR5L3llLmRldGFpbC5keCk8MSkpLHJyLmhpc3RvcnlULnNoaWZ0KCkscnIuaGlzdG9yeVQucHVzaCh5ZS5kZXRhaWwudGltZVN0YW1wKSwhbW4pe2xldCBsbj0idG91Y2giO0R0PGh0LnZhbHVlP2Iub3V0T2ZCb3VuZHM/KGxuPSJ0b3VjaC1vdXQtb2YtYm91bmRzIixEdD1odC52YWx1ZS1aaS54KGh0LnZhbHVlLUR0KSk6RHQ9aHQudmFsdWU6RHQ+b24udmFsdWUmJihiLm91dE9mQm91bmRzPyhsbj0idG91Y2gtb3V0LW9mLWJvdW5kcyIsRHQ9b24udmFsdWUrWmkueChEdC1vbi52YWx1ZSkpOkR0PW9uLnZhbHVlKSxGdDxQdC52YWx1ZT9iLm91dE9mQm91bmRzPyhsbj0idG91Y2gtb3V0LW9mLWJvdW5kcyIsRnQ9UHQudmFsdWUtRGEueChQdC52YWx1ZS1GdCkpOkZ0PVB0LnZhbHVlOkZ0PkZuLnZhbHVlJiYoYi5vdXRPZkJvdW5kcz8obG49InRvdWNoLW91dC1vZi1ib3VuZHMiLEZ0PUZuLnZhbHVlK0RhLngoRnQtRm4udmFsdWUpKTpGdD1Gbi52YWx1ZSksRm8oZnVuY3Rpb24oKXt0aShEdCxGdCxybixsbil9KX19fWZ1bmN0aW9uIFJvKCl7aWYoIWIuZGlzYWJsZWQmJl9hJiYoX2E9ITEsIW1uJiYhTHMoIm91dC1vZi1ib3VuZHMiKSYmYi5pbmVydGlhKSl7bGV0IHllPTFlMyoocnIuaGlzdG9yeVhbMV0tcnIuaGlzdG9yeVhbMF0pLyhyci5oaXN0b3J5VFsxXS1yci5oaXN0b3J5VFswXSksRHQ9MWUzKihyci5oaXN0b3J5WVsxXS1yci5oaXN0b3J5WVswXSkvKHJyLmhpc3RvcnlUWzFdLXJyLmhpc3RvcnlUWzBdKTtJby5zZXRWKHllLER0KSxJby5zZXRTKEJuLG5yKTtsZXQgRnQ9SW8uZGVsdGEoKS54LGxuPUlvLmRlbHRhKCkueSxIdD1GdCtCbixxcj1sbitucjtIdDxodC52YWx1ZT8oSHQ9aHQudmFsdWUscXI9bnIrKGh0LnZhbHVlLUJuKSpsbi9GdCk6SHQ+b24udmFsdWUmJihIdD1vbi52YWx1ZSxxcj1ucisob24udmFsdWUtQm4pKmxuL0Z0KSxxcjxQdC52YWx1ZT8ocXI9UHQudmFsdWUsSHQ9Qm4rKFB0LnZhbHVlLW5yKSpGdC9sbik6cXI+Rm4udmFsdWUmJihxcj1Gbi52YWx1ZSxIdD1CbisoRm4udmFsdWUtbnIpKkZ0L2xuKSxJby5zZXRFbmQoSHQscXIpLGVuPWxpKElvLGZ1bmN0aW9uKCl7bGV0IFVyPUlvLnMoKSxPbj1Vci54LExpPVVyLnk7dGkoT24sTGkscm4sImZyaWN0aW9uIil9LGZ1bmN0aW9uKCl7ZW4uY2FuY2VsKCl9KX19ZnVuY3Rpb24gdWkoeWUsRHQpe2xldCBGdD0hMTtyZXR1cm4geWU+b24udmFsdWU/KHllPW9uLnZhbHVlLEZ0PSEwKTp5ZTxodC52YWx1ZSYmKHllPWh0LnZhbHVlLEZ0PSEwKSxEdD5Gbi52YWx1ZT8oRHQ9Rm4udmFsdWUsRnQ9ITApOkR0PFB0LnZhbHVlJiYoRHQ9UHQudmFsdWUsRnQ9ITApLHt4OnllLHk6RHQsb3V0T2ZCb3VuZHM6RnR9fWZ1bmN0aW9uIHdyKCl7dm4ueD1uYS5sZWZ0LVgubGVmdC52YWx1ZSx2bi55PW5hLnRvcC1YLnRvcC52YWx1ZX1mdW5jdGlvbiBiYSh5ZSl7eWU9eWV8fHJuLHllPWZpKHllKSx2dC52YWx1ZT1uYS5oZWlnaHQvcm4sa3QudmFsdWU9bmEud2lkdGgvcm47bGV0IER0PXZ0LnZhbHVlKnllLEZ0PWt0LnZhbHVlKnllO3VyLng9KEZ0LWt0LnZhbHVlKS8yLHVyLnk9KER0LXZ0LnZhbHVlKS8yfWZ1bmN0aW9uIFphKCl7bGV0IHllPTAtdm4ueCt1ci54LER0PVgud2lkdGgudmFsdWUta3QudmFsdWUtdm4ueC11ci54O2h0LnZhbHVlPU1hdGgubWluKHllLER0KSxvbi52YWx1ZT1NYXRoLm1heCh5ZSxEdCk7bGV0IEZ0PTAtdm4ueSt1ci55LGxuPVguaGVpZ2h0LnZhbHVlLXZ0LnZhbHVlLXZuLnktdXIueTtQdC52YWx1ZT1NYXRoLm1pbihGdCxsbiksRm4udmFsdWU9TWF0aC5tYXgoRnQsbG4pfWZ1bmN0aW9uIG1yKHllLER0KXtpZihiLnNjYWxlKXt5ZT1maSh5ZSksYmEoeWUpLFphKCk7bGV0IEZ0PXVpKEJuLG5yKSxsbj1GdC54LEh0PUZ0Lnk7RHQ/ZWkobG4sSHQseWUsIiIsITAsITApOkZvKGZ1bmN0aW9uKCl7dGkobG4sSHQseWUsIiIsITAsITApfSl9fWZ1bmN0aW9uIGZpKHllKXtyZXR1cm4geWU9TWF0aC5tYXgoLjUsWW4udmFsdWUseWUpLHllPU1hdGgubWluKDEwLEdvLnZhbHVlLHllKSx5ZX1mdW5jdGlvbiBlaSh5ZSxEdCxGdCxsbixIdCxxcil7VG4oKSxwby52YWx1ZXx8KHllPUJuKSxyYS52YWx1ZXx8KER0PW5yKSxiLnNjYWxlfHwoRnQ9cm4pO2xldCBVcj11aSh5ZSxEdCk7aWYoeWU9VXIueCxEdD1Vci55LCFiLmFuaW1hdGlvbil7dGkoeWUsRHQsRnQsbG4sSHQscXIpO3JldHVybn1FaS5fc3ByaW5nWC5fc29sdXRpb249bnVsbCxFaS5fc3ByaW5nWS5fc29sdXRpb249bnVsbCxFaS5fc3ByaW5nU2NhbGUuX3NvbHV0aW9uPW51bGwsRWkuX3NwcmluZ1guX2VuZFBvc2l0aW9uPUJuLEVpLl9zcHJpbmdZLl9lbmRQb3NpdGlvbj1ucixFaS5fc3ByaW5nU2NhbGUuX2VuZFBvc2l0aW9uPXJuLEVpLnNldEVuZCh5ZSxEdCxGdCwxKSx3dD1saShFaSxmdW5jdGlvbigpe2xldCBPbj1FaS54KCksTGk9T24ueCxwcz1Pbi55LHZzPU9uLnNjYWxlO3RpKExpLHBzLHZzLGxuLEh0LHFyKX0sZnVuY3Rpb24oKXt3dC5jYW5jZWwoKX0pfWZ1bmN0aW9uIExzKHllKXtsZXQgRHQ9dWkoQm4sbnIpLEZ0PUR0LngsbG49RHQueSxIdD1EdC5vdXRPZkJvdW5kcztyZXR1cm4gSHQmJmVpKEZ0LGxuLHJuLHllKSxIdH1mdW5jdGlvbiB0aSh5ZSxEdCxGdCxsbj0iIixIdCxxcil7eWUhPT1udWxsJiZ5ZS50b1N0cmluZygpIT09Ik5hTiImJnR5cGVvZiB5ZT09Im51bWJlciJ8fCh5ZT1Cbnx8MCksRHQhPT1udWxsJiZEdC50b1N0cmluZygpIT09Ik5hTiImJnR5cGVvZiBEdD09Im51bWJlciJ8fChEdD1ucnx8MCkseWU9TnVtYmVyKHllLnRvRml4ZWQoMSkpLER0PU51bWJlcihEdC50b0ZpeGVkKDEpKSxGdD1OdW1iZXIoRnQudG9GaXhlZCgxKSksQm49PT15ZSYmbnI9PT1EdHx8SHR8fEwoImNoYW5nZSIse3g6UGkoeWUsdXIueCkseTpQaShEdCx1ci55KSxzb3VyY2U6bG59KSxiLnNjYWxlfHwoRnQ9cm4pLEZ0PWZpKEZ0KSxGdD0rRnQudG9GaXhlZCgzKSxxciYmRnQhPT1ybiYmTCgic2NhbGUiLHt4OnllLHk6RHQsc2NhbGU6RnR9KTtsZXQgVXI9YHRyYW5zbGF0ZSgke3llfXB4LCAke0R0fXB4KSBzY2FsZSgke0Z0fSlgO0lhLnRyYW5zaXRpb24oai52YWx1ZSx7c3R5bGVzOnt0cmFuc2Zvcm06VXJ9LGR1cmF0aW9uOjAsZGVsYXk6MH0pLEJuPXllLG5yPUR0LHJuPUZ0fWZ1bmN0aW9uIEJpKCl7cmV0dXJuIFFuKGoudmFsdWUpLnRoZW4oeWU9PntuYT15ZX0pfWZ1bmN0aW9uIFZyKCl7aWYoIUoudmFsdWUpcmV0dXJuO1RuKCk7bGV0IHllPWIuc2NhbGU/T3QudmFsdWU6MTt3cigpLGJhKHllKSxaYSgpLEJuPUxlLnZhbHVlK3VyLngsbnI9cHQudmFsdWUrdXIueTtsZXQgRHQ9dWkoQm4sbnIpLEZ0PUR0LngsbG49RHQueTt0aShGdCxsbix5ZSwiIiwhMCl9cmV0dXJuIFIub25Nb3VudGVkKCgpPT57T2U9TmEoRHQ9Pntzd2l0Y2goRHQuZGV0YWlsLnN0YXRlKXtjYXNlInN0YXJ0IjpkcigpO2JyZWFrO2Nhc2UibW92ZSI6aHIoRHQpO2JyZWFrO2Nhc2UiZW5kIjpSbygpfX0pLGYoKCk9PntCaSgpLnRoZW4oKCk9PntWcigpfSl9LDEwMCksSW8ucmVjb25maWd1cmUoMSxXbi52YWx1ZSksRWkucmVjb25maWd1cmUoMSw5Kk1hdGgucG93KEZhLnZhbHVlLDIpLzQwLEZhLnZhbHVlKTtsZXQgeWU9e3NldFBhcmVudDpWcn07dWUoeWUpLFIub25Vbm1vdW50ZWQoKCk9PntfZSh5ZSl9KX0pLFIub25Vbm1vdW50ZWQoKCk9PntUbigpfSksKCk9PntIKE9lKX19bGV0IFpyPTE2LEVyPXthY3RpdmVDb2xvcjpabi5QUklNQVJZX0NPTE9SLGJhY2tncm91bmRDb2xvcjoiI0VCRUJFQiIsYWN0aXZlTW9kZToiYmFja3dhcmRzIn0sTXQ9e3BlcmNlbnQ6e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6MCx2YWxpZGF0b3IoYil7cmV0dXJuIWlzTmFOKHBhcnNlRmxvYXQoYikpfX0sZm9udFNpemU6e3R5cGU6W1N0cmluZyxOdW1iZXJdLGRlZmF1bHQ6WnJ9LHNob3dJbmZvOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX0sc3Ryb2tlV2lkdGg6e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6Nix2YWxpZGF0b3IoYil7cmV0dXJuIWlzTmFOKHBhcnNlRmxvYXQoYikpfX0sY29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6RXIuYWN0aXZlQ29sb3J9LGFjdGl2ZUNvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OkVyLmFjdGl2ZUNvbG9yfSxiYWNrZ3JvdW5kQ29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6RXIuYmFja2dyb3VuZENvbG9yfSxhY3RpdmU6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSxhY3RpdmVNb2RlOnt0eXBlOlN0cmluZyxkZWZhdWx0OkVyLmFjdGl2ZU1vZGV9LGR1cmF0aW9uOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjMwLHZhbGlkYXRvcihiKXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdChiKSl9fSxib3JkZXJSYWRpdXM6e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6MH19LFRlPVt7InVuaS1wcm9ncmVzcyI6eyIiOntmbGV4OjEsZmxleERpcmVjdGlvbjoicm93IixhbGlnbkl0ZW1zOiJjZW50ZXIifX0sInVuaS1wcm9ncmVzcy1iYXIiOnsiIjp7ZmxleDoxfX0sInVuaS1wcm9ncmVzcy1pbm5lci1iYXIiOnsiIjp7cG9zaXRpb246ImFic29sdXRlIn19LCJ1bmktcHJvZ3Jlc3MtaW5mbyI6eyIiOnttYXJnaW5MZWZ0OiIxNXB4In19fV0sZmE9Ui5kZWZpbmVDb21wb25lbnQoe25hbWU6IlByb2dyZXNzIixwcm9wczpNdCxzdHlsZXM6VGUsZW1pdHM6WyJhY3RpdmVlbmQiXSxzZXR1cChiLHtlbWl0Okx9KXtsZXQgaj1SLnJlZihudWxsKSxIPVIucmVmKG51bGwpLEo9Z3IoaixMKSxYPWZuKGIpO3JldHVybiBSLndhdGNoKCgpPT5YLnJlYWxQZXJjZW50LCh1ZSxfZSk9PntYLmxhc3RQZXJjZW50PV9lfHwwLFZvKFgsYixKKX0pLFIub25Nb3VudGVkKCgpPT57ZigoKT0+e1FuKEgudmFsdWUpLnRoZW4oKHt3aWR0aDp1ZX0pPT57WC5wcm9ncmVzc1dpZHRoPXVlfHwwLFZvKFgsYixKKX0pfSw1MCl9KSwoKT0+e2xldHtzaG93SW5mbzp1ZSxmb250U2l6ZTpfZX09Yix7b3V0ZXJCYXJTdHlsZTpPZSxpbm5lckJhclN0eWxlOkRlLGN1cnJlbnRQZXJjZW50OnBlfT1YO3JldHVybiBSLmNyZWF0ZVZOb2RlKCJkaXYiLHtyZWY6aixjbGFzczoidW5pLXByb2dyZXNzIn0sW1IuY3JlYXRlVk5vZGUoImRpdiIse3JlZjpILHN0eWxlOk9lLGNsYXNzOiJ1bmktcHJvZ3Jlc3MtYmFyIn0sW1IuY3JlYXRlVk5vZGUoImRpdiIse3N0eWxlOkRlLGNsYXNzOiJ1bmktcHJvZ3Jlc3MtaW5uZXItYmFyIn0sbnVsbCldKSx1ZT9HbihwZSsiJSIse2NsYXNzOiJ1bmktcHJvZ3Jlc3MtaW5mbyIsc3R5bGU6e2ZvbnRTaXplOl9lfX0pOm51bGxdKX19fSk7ZnVuY3Rpb24gZm4oYil7bGV0IEw9Ui5yZWYoMCksaj1SLnJlZigwKSxIPVIuY29tcHV0ZWQoKCk9Pih7YmFja2dyb3VuZENvbG9yOmIuYmFja2dyb3VuZENvbG9yLGJvcmRlclJhZGl1czpiLmJvcmRlclJhZGl1cyxoZWlnaHQ6Yi5zdHJva2VXaWR0aH0pKSxKPVIuY29tcHV0ZWQoKCk9PntsZXQgX2U9Yi5jb2xvciE9PUVyLmFjdGl2ZUNvbG9yJiZiLmFjdGl2ZUNvbG9yPT09RXIuYWN0aXZlQ29sb3I/Yi5jb2xvcjpiLmFjdGl2ZUNvbG9yO3JldHVybnt3aWR0aDpMLnZhbHVlKmoudmFsdWUvMTAwLGhlaWdodDpiLnN0cm9rZVdpZHRoLGJhY2tncm91bmRDb2xvcjpfZSxib3JkZXJSYWRpdXM6Yi5ib3JkZXJSYWRpdXN9fSksWD1SLmNvbXB1dGVkKCgpPT57bGV0IF9lPXBhcnNlRmxvYXQoYi5wZXJjZW50KTtyZXR1cm4gX2U8MCYmKF9lPTApLF9lPjEwMCYmKF9lPTEwMCksX2V9KTtyZXR1cm4gUi5yZWFjdGl2ZSh7b3V0ZXJCYXJTdHlsZTpILGlubmVyQmFyU3R5bGU6SixyZWFsUGVyY2VudDpYLGN1cnJlbnRQZXJjZW50Okwsc3Ryb2tlVGltZXI6MCxsYXN0UGVyY2VudDowLHByb2dyZXNzV2lkdGg6an0pfWZ1bmN0aW9uIFZvKGIsTCxqKXtiLnN0cm9rZVRpbWVyJiZjbGVhckludGVydmFsKGIuc3Ryb2tlVGltZXIpLEwuYWN0aXZlPyhiLmN1cnJlbnRQZXJjZW50PUwuYWN0aXZlTW9kZT09PUVyLmFjdGl2ZU1vZGU/MDpiLmxhc3RQZXJjZW50LGIuc3Ryb2tlVGltZXI9c2V0SW50ZXJ2YWwoKCk9PntiLmN1cnJlbnRQZXJjZW50KzE+Yi5yZWFsUGVyY2VudD8oYi5jdXJyZW50UGVyY2VudD1iLnJlYWxQZXJjZW50LGIuc3Ryb2tlVGltZXImJmNsZWFySW50ZXJ2YWwoYi5zdHJva2VUaW1lciksaigiYWN0aXZlZW5kIix7fSkpOmIuY3VycmVudFBlcmNlbnQrPTF9LHBhcnNlRmxvYXQoTC5kdXJhdGlvbikpKTpiLmN1cnJlbnRQZXJjZW50PWIucmVhbFBlcmNlbnR9bGV0IE1yPXt2YWx1ZTp7dHlwZTpBcnJheSxkZWZhdWx0KCl7cmV0dXJuW119LHZhbGlkYXRvcjpmdW5jdGlvbihiKXtyZXR1cm4gQXQuaXNBcnJheShiKSYmYi5maWx0ZXIoTD0+dHlwZW9mIEw9PSJudW1iZXIiKS5sZW5ndGg9PT1iLmxlbmd0aH19LGluZGljYXRvclN0eWxlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxpbmRpY2F0b3JDbGFzczp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0sbWFza1N0eWxlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxtYXNrQ2xhc3M6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9fSxzbz1BdC5leHRlbmQoe30sTXIse2hlaWdodDp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDowfSxtYXNrVG9wU3R5bGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LG1hc2tCb3R0b21TdHlsZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn19KSxsbz1SLmRlZmluZUNvbXBvbmVudCh7bmFtZToiUGlja2VyVmlldyIscHJvcHM6c28sZW1pdHM6WyJjaGFuZ2UiLCJ1cGRhdGU6dmFsdWUiXSxzZXR1cChiLHtzbG90czpMLGVtaXQ6an0pe2xldCBIPVIucmVmKG51bGwpLEo9WWkoYiksWD1ncihILGopLHVlPVtdLF9lPURlPT5BcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHVlLmZpbHRlcihwZT0+cGUudHlwZSE9PVIuQ29tbWVudCksRGUpLE9lPURlPT5SLmNvbXB1dGVkKHtnZXQoKXtsZXQgcGU9X2UoRGUudm5vZGUpO3JldHVybiBKLnZhbHVlW3BlXXx8MH0sc2V0KHBlKXtpZighRGUuZGF0YS5faXNNb3VudGVkKXJldHVybjtsZXQgTGU9X2UoRGUudm5vZGUpO2lmKExlPDApcmV0dXJuO2lmKEoudmFsdWVbTGVdIT09cGUpe0oudmFsdWVbTGVdPXBlO2xldCBPdD1KLnZhbHVlLm1hcChrdD0+a3QpO2ooInVwZGF0ZTp2YWx1ZSIsT3QpLFgoImNoYW5nZSIse3ZhbHVlOk90fSl9fX0pO3JldHVybiBSLnByb3ZpZGUoImdldFBpY2tlclZpZXdDb2x1bW4iLE9lKSxSLnByb3ZpZGUoInBpY2tlclZpZXdQcm9wcyIsYiksKCk9PntsZXQgRGU9TC5kZWZhdWx0JiZMLmRlZmF1bHQoKTt1ZT1CcihEZSk7bGV0IHBlPWIuaGVpZ2h0P3toZWlnaHQ6YCR7cGFyc2VGbG9hdChiLmhlaWdodCl9cHhgfTp7fTtyZXR1cm4gUi5jcmVhdGVWTm9kZSgidmlldyIsUi5tZXJnZVByb3BzKHtyZWY6SCxjbGFzczoidW5pLXBpY2tlci12aWV3IixzdHlsZTpwZX0se3ByZXZlbnRHZXN0dXJlOiEwfSksW1IuY3JlYXRlVk5vZGUoInZpZXciLHtjbGFzczoidW5pLXBpY2tlci12aWV3LXdyYXBwZXIifSxbdWVdKV0pfX0sc3R5bGVzOlt7InVuaS1waWNrZXItdmlldyI6eyIiOntwb3NpdGlvbjoicmVsYXRpdmUifX0sInVuaS1waWNrZXItdmlldy13cmFwcGVyIjp7IiI6e2Rpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246InJvdyIscG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAscmlnaHQ6MCxib3R0b206MCxvdmVyZmxvdzoiaGlkZGVuIn19fV19KTtmdW5jdGlvbiBZaShiKXtsZXQgTD1SLnJlYWN0aXZlKFsuLi5iLnZhbHVlXSksaj1SLnJlYWN0aXZlKHt2YWx1ZTpMfSk7cmV0dXJuIFIud2F0Y2goKCk9PmIudmFsdWUsSD0+e2oudmFsdWUubGVuZ3RoPUgubGVuZ3RoLFIubmV4dFRpY2soKCk9PntILmZvckVhY2goKEosWCk9PntKIT09ai52YWx1ZVtYXSYmai52YWx1ZS5zcGxpY2UoWCwxLEopfSl9KX0pLGp9bGV0IEtpPUUucmVxdWlyZU1vZHVsZSgiZG9tIiksWHI9RS5jb25maWcuZW52LnBsYXRmb3JtLnRvTG93ZXJDYXNlKCk9PT0iYW5kcm9pZCI7ZnVuY3Rpb24gbWkoYil7cmV0dXJuIEF0LmV4dGVuZCh7fSxBdC5pc1N0cmluZyhiKT9UaShiKTpiKX1sZXQgU3I9e2xlbmd0aDp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDowfX0sRHI9Ui5kZWZpbmVDb21wb25lbnQoe25hbWU6IlBpY2tlclZpZXdDb2x1bW4iLHByb3BzOlNyLGRhdGE6KCk9Pih7X2lzTW91bnRlZDohMX0pLHNldHVwKGIse3Nsb3RzOkx9KXtsZXQgaj1SLmdldEN1cnJlbnRJbnN0YW5jZSgpLEg9Ui5yZWYobnVsbCksSj1SLnJlZihudWxsKSxYPVIucmVmKG51bGwpLHVlPVIucmVmKG51bGwpLF9lPVIuaW5qZWN0KCJwaWNrZXJWaWV3UHJvcHMiKSxEZT1SLmluamVjdCgiZ2V0UGlja2VyVmlld0NvbHVtbiIpKGopLHBlPVIuY29tcHV0ZWQoKCk9Pm1pKF9lLmluZGljYXRvclN0eWxlKSksTGU9Ui5jb21wdXRlZCgoKT0+bWkoX2UubWFza1RvcFN0eWxlKSkscHQ9Ui5jb21wdXRlZCgoKT0+bWkoX2UubWFza0JvdHRvbVN0eWxlKSksT3Q9Ui5yZWYoMCk7T3QudmFsdWU9Q28ocGUudmFsdWUpO2xldCBrdD1SLnJlZigwKTtrdC52YWx1ZT1wYXJzZUZsb2F0KF9lLmhlaWdodCk7bGV0e3NldEN1cnJlbnQ6dnQsb25TY3JvbGxlbmQ6aHR9PVFyKGIsRGUsSixPdCksUHQ9KCk9PntsZXQgRm4sd3Q7ZigoKT0+e1Byb21pc2UuYWxsKFtRbihILnZhbHVlKS50aGVuKCh7aGVpZ2h0OmVufSk9PntGbj1rdC52YWx1ZT1lbn0pLFhyJiZiLmxlbmd0aD9RbihYLnZhbHVlKS50aGVuKCh7aGVpZ2h0OmVufSk9Pnt3dD1PdC52YWx1ZT1lbi9wYXJzZUZsb2F0KGIubGVuZ3RoKX0pOlFuKHVlLnZhbHVlKS50aGVuKCh7aGVpZ2h0OmVufSk9Pnt3dD1PdC52YWx1ZT1lbn0pXSkudGhlbigoKT0+e0ZuJiZ3dD9mKCgpPT57ai5kYXRhLl9pc01vdW50ZWQ9ITAsdnQoRGUudmFsdWUsITEsITApfSw1MCk6UHQoKX0pfSw1MCl9O1Iub25Nb3VudGVkKFB0KTtsZXQgb249Rm49PkZuP1hyP1IuY3JlYXRlVk5vZGUoImRpdiIse3JlZjpYLHN0eWxlOiJmbGV4LWRpcmVjdGlvbjpjb2x1bW47In0sW0ZuXSk6Rm46bnVsbDtyZXR1cm4oKT0+e2xldCBGbj1MLmRlZmF1bHQmJkwuZGVmYXVsdCgpLHd0PShrdC52YWx1ZS1PdC52YWx1ZSkvMixlbj1gJHtrdC52YWx1ZS13dH1weGAsdm49e3Nob3dTY3JvbGxiYXI6ITEsc2Nyb2xsVG9CZWdpbjohMSxkZWNlbGVyYXRpb25SYXRlOi4zLHNjcm9sbFk6ITB9O3JldHVybiBYcnx8KHZuLnNjcm9sbFRvcD1EZS52YWx1ZSpPdC52YWx1ZSksUi5jcmVhdGVWTm9kZSgidmlldyIse3JlZjpILGNsYXNzOiJ1bmktcGlja2VyLXZpZXctY29sdW1uIn0sW1IuY3JlYXRlVk5vZGUoInNjcm9sbC12aWV3IixSLm1lcmdlUHJvcHMoe2NsYXNzOiJ1bmktcGlja2VyLXZpZXctZ3JvdXAiLHN0eWxlOiJmbGV4LWRpcmVjdGlvbjpjb2x1bW47IixvblNjcm9sbGVuZDpodH0sdm4pLFtSLmNyZWF0ZVZOb2RlKCJ2aWV3Iix7cmVmOkosY2xhc3M6InVuaS1waWNrZXItdmlldy1jb250ZW50IixzdHlsZTp7cGFkZGluZ1RvcDpgJHt3dH1weGAscGFkZGluZ0JvdHRvbTpgJHt3dH1weGB9fSxbb24oRm4pXSldKSxSLmNyZWF0ZVZOb2RlKCJ1LXNjYWxhYmxlIix7Y2xhc3M6InVuaS1waWNrZXItdmlldy1tYXNrIn0sW1IuY3JlYXRlVk5vZGUoInUtc2NhbGFibGUiLHtjbGFzczoidW5pLXBpY2tlci12aWV3LW1hc2sgdW5pLXBpY2tlci12aWV3LW1hc2stdG9wIixzdHlsZTpBdC5leHRlbmQoe30sTGUudmFsdWUse2JvdHRvbTplbn0pfSxudWxsKSxSLmNyZWF0ZVZOb2RlKCJ1LXNjYWxhYmxlIix7Y2xhc3M6InVuaS1waWNrZXItdmlldy1tYXNrIHVuaS1waWNrZXItdmlldy1tYXNrLWJvdHRvbSIsc3R5bGU6QXQuZXh0ZW5kKHt9LHB0LnZhbHVlLHt0b3A6ZW59KX0sbnVsbCldKSxSLmNyZWF0ZVZOb2RlKCJ1LXNjYWxhYmxlIix7cmVmOnVlLGNsYXNzOiJ1bmktcGlja2VyLXZpZXctaW5kaWNhdG9yIixzdHlsZTpBdC5leHRlbmQoe30scGUudmFsdWUse3RvcDpgJHt3dH1weGB9KX0sbnVsbCldKX19LHN0eWxlczpbeyJ1bmktcGlja2VyLXZpZXctY29sdW1uIjp7IiI6e2ZsZXg6MSxwb3NpdGlvbjoicmVsYXRpdmUiLGFsaWduSXRlbXM6InN0cmV0Y2giLG92ZXJmbG93OiJoaWRkZW4ifX0sInVuaS1waWNrZXItdmlldy1tYXNrIjp7IiI6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjAsbGVmdDowLHJpZ2h0OjAsYm90dG9tOjAscG9pbnRlckV2ZW50czoibm9uZSJ9fSwidW5pLXBpY2tlci12aWV3LW1hc2stdG9wIjp7IiI6e2JvdHRvbTowLGJhY2tncm91bmRJbWFnZToibGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSxyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTUpLHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KSkifX0sInVuaS1waWNrZXItdmlldy1tYXNrLWJvdHRvbSI6eyIiOnt0b3A6MCxiYWNrZ3JvdW5kSW1hZ2U6ImxpbmVhci1ncmFkaWVudCh0byB0b3AscmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk1KSxyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNikpIn19LCJ1bmktcGlja2VyLXZpZXctZ3JvdXAiOnsiIjp7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAscmlnaHQ6MCxib3R0b206MH19LCJ1bmktcGlja2VyLXZpZXctY29udGVudCI6eyIiOntmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLHBhZGRpbmdUb3A6MCxwYWRkaW5nUmlnaHQ6MCxwYWRkaW5nQm90dG9tOjAscGFkZGluZ0xlZnQ6MH19LCJ1bmktcGlja2VyLXZpZXctaW5kaWNhdG9yIjp7IiI6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDowLHJpZ2h0OjAsdG9wOjAsaGVpZ2h0OiIzNHB4Iixwb2ludGVyRXZlbnRzOiJub25lIixib3JkZXJDb2xvcjoiI2U1ZTVlNSIsYm9yZGVyVG9wV2lkdGg6IjFweCIsYm9yZGVyQm90dG9tV2lkdGg6IjFweCJ9fX1dfSk7ZnVuY3Rpb24gQ28oYil7bGV0IGo9KGIuaGVpZ2h0fHxiLmxpbmVIZWlnaHR8fCIiKS5tYXRjaCgvKC0/W1xkXC5dKylweC8pLEg9MDtyZXR1cm4gaiYmKEg9cGFyc2VGbG9hdChqWzFdKSksSH1mdW5jdGlvbiBRcihiLEwsaixIKXtsZXQgSjtmdW5jdGlvbiBYKE9lLERlPSEwKXtLaS5zY3JvbGxUb0VsZW1lbnQoai52YWx1ZSx7b2Zmc2V0Ok9lKkgudmFsdWUsYW5pbWF0ZWQ6RGV9KSxEZSYmKEo9RGF0ZS5ub3coKSl9Ui53YXRjaCgoKT0+Yi5sZW5ndGgsKCk9PntmKCgpPT57dWUoTC52YWx1ZSwhMCwhMCl9LDE1MCl9KSxSLndhdGNoKEwsT2U9PlgoT2UpKTtsZXQgdWU9KE9lLERlPSEwLHBlKT0+e0wudmFsdWU9PT1PZSYmIXBlfHwoTC52YWx1ZT1PZSxYciYmWChPZSxEZSkpfTtyZXR1cm57c2V0Q3VycmVudDp1ZSxvblNjcm9sbGVuZDpPZT0+e2lmKERhdGUubm93KCktSjwzNDApcmV0dXJuO2xldCBEZT1PZS5kZXRhaWwuY29udGVudE9mZnNldC55LHBlPU1hdGgucm91bmQoRGUvSC52YWx1ZSk7RGUlSC52YWx1ZT91ZShwZSwhMCwhMCk6TC52YWx1ZT1wZX19fWxldCBZdD17U0VMRUNUT1I6InNlbGVjdG9yIixNVUxUSVNFTEVDVE9SOiJtdWx0aVNlbGVjdG9yIixUSU1FOiJ0aW1lIixEQVRFOiJkYXRlIn0sUm49e1lFQVI6InllYXIiLE1PTlRIOiJtb250aCIsREFZOiJkYXkifTtmdW5jdGlvbiBVbihiKXtyZXR1cm4gYj45P2I6YDAke2J9YH1mdW5jdGlvbiBkbihiLEwpe2I9U3RyaW5nKGJ8fCIiKTtsZXQgaj1uZXcgRGF0ZTtpZihMPT09WXQuVElNRSl7bGV0IEg9Yi5zcGxpdCgiOiIpO0gubGVuZ3RoPT09MiYmai5zZXRIb3VycyhwYXJzZUludChIWzBdKSxwYXJzZUludChIWzFdKSl9ZWxzZXtsZXQgSD1iLnNwbGl0KCItIik7SC5sZW5ndGg9PT0zJiZqLnNldEZ1bGxZZWFyKHBhcnNlSW50KEhbMF0pLHBhcnNlSW50KFN0cmluZyhwYXJzZUZsb2F0KEhbMV0pLTEpKSxwYXJzZUludChIWzJdKSl9cmV0dXJuIGp9ZnVuY3Rpb24gZXIoYil7aWYoYi5tb2RlPT09WXQuVElNRSlyZXR1cm4iMDA6MDAiO2lmKGIubW9kZT09PVl0LkRBVEUpe2xldCBMPW5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKS0xMDA7c3dpdGNoKGIuZmllbGRzKXtjYXNlIFJuLllFQVI6cmV0dXJuIEw7Y2FzZSBSbi5NT05USDpyZXR1cm4gTCsiLTAxIjtkZWZhdWx0OnJldHVybiBMKyItMDEtMDEifX1yZXR1cm4iIn1mdW5jdGlvbiBVbyhiKXtpZihiLm1vZGU9PT1ZdC5USU1FKXJldHVybiIyMzo1OSI7aWYoYi5tb2RlPT09WXQuREFURSl7bGV0IEw9bmV3IERhdGUoKS5nZXRGdWxsWWVhcigpKzEwMDtzd2l0Y2goYi5maWVsZHMpe2Nhc2UgUm4uWUVBUjpyZXR1cm4gTDtjYXNlIFJuLk1PTlRIOnJldHVybiBMKyItMTIiO2RlZmF1bHQ6cmV0dXJuIEwrIi0xMi0zMSJ9fXJldHVybiIifWxldCAkbz17bmFtZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0scmFuZ2U6e3R5cGU6QXJyYXksZGVmYXVsdCgpe3JldHVybltdfX0scmFuZ2VLZXk6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LHZhbHVlOnt0eXBlOltOdW1iZXIsU3RyaW5nLEFycmF5XSxkZWZhdWx0OjB9LG1vZGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6WXQuU0VMRUNUT1IsdmFsaWRhdG9yKGIpe3JldHVybiBPYmplY3QudmFsdWVzKFl0KS5pbmRleE9mKGIpPj0wfX0sZmllbGRzOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxzdGFydDp7dHlwZTpTdHJpbmcsZGVmYXVsdDplcn0sZW5kOnt0eXBlOlN0cmluZyxkZWZhdWx0OlVvfSxkaXNhYmxlZDp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9fSxGcj1SLmRlZmluZUNvbXBvbmVudCh7bmFtZToiUGlja2VyIixwcm9wczokbyxlbWl0czpbImNoYW5nZSIsImNhbmNlbCIsImNvbHVtbmNoYW5nZSJdLHNldHVwKGIse3Nsb3RzOkwsZW1pdDpqfSl7bGV0IEg9Ui5yZWYobnVsbCksSj1ncihILGopLFg9Ui5yZWYobnVsbCksdWU9Ui5yZWYobnVsbCksX2U9KCk9PntsZXQgdnQ9Yi52YWx1ZTtzd2l0Y2goYi5tb2RlKXtjYXNlIFl0Lk1VTFRJU0VMRUNUT1I6e0F0LmlzQXJyYXkodnQpfHwodnQ9W10pLEF0LmlzQXJyYXkoWC52YWx1ZSl8fChYLnZhbHVlPVtdKTtsZXQgaHQ9WC52YWx1ZS5sZW5ndGg9TWF0aC5tYXgodnQubGVuZ3RoLGIucmFuZ2UubGVuZ3RoKTtmb3IobGV0IFB0PTA7UHQ8aHQ7UHQrKyl7bGV0IG9uPU51bWJlcih2dFtQdF0pLEZuPU51bWJlcihYLnZhbHVlW1B0XSksd3Q9aXNOYU4ob24pP2lzTmFOKEZuKT8wOkZuOm9uO1gudmFsdWUuc3BsaWNlKFB0LDEsd3Q8MD8wOnd0KX19YnJlYWs7Y2FzZSBZdC5USU1FOmNhc2UgWXQuREFURTpYLnZhbHVlPVN0cmluZyh2dCk7YnJlYWs7ZGVmYXVsdDp7bGV0IGh0PU51bWJlcih2dCk7WC52YWx1ZT1odDwwPzA6aHQ7YnJlYWt9fX0sT2U9dnQ9Pnt1ZS52YWx1ZSYmdWUudmFsdWUuc2VuZE1lc3NhZ2UodnQpfSxEZT12dD0+e2xldCBodD17ZXZlbnQ6ImNhbmNlbCJ9O3VlLnZhbHVlPWFuKHt1cmw6Il9fdW5pYXBwcGlja2VyIixkYXRhOnZ0LHN0eWxlOnt0aXRsZU5WaWV3OiExLGFuaW1hdGlvblR5cGU6Im5vbmUiLGFuaW1hdGlvbkR1cmF0aW9uOjAsYmFja2dyb3VuZDoicmdiYSgwLDAsMCwwKSIscG9wR2VzdHVyZToibm9uZSJ9LG9uTWVzc2FnZTpQdD0+e2xldCBvbj1QdC5ldmVudDtpZihvbj09PSJjcmVhdGVkIil7T2UodnQpO3JldHVybn1pZihvbj09PSJjb2x1bW5jaGFuZ2UiKXtkZWxldGUgUHQuZXZlbnQsSihvbixQdCk7cmV0dXJufWh0PVB0fSxvbkNsb3NlOigpPT57dWUudmFsdWU9bnVsbDtsZXQgUHQ9aHQuZXZlbnQ7ZGVsZXRlIGh0LmV2ZW50LFB0JiZKKFB0LGh0KX19KX0scGU9dnQ9PntoLm5hdGl2ZVVJW2IubW9kZT09PVl0LlRJTUU/InBpY2tUaW1lIjoicGlja0RhdGUiXShodD0+e2xldCBQdD1odC5kYXRlO0ooImNoYW5nZSIse3ZhbHVlOmIubW9kZT09PVl0LlRJTUU/YCR7VW4oUHQuZ2V0SG91cnMoKSl9OiR7VW4oUHQuZ2V0TWludXRlcygpKX1gOmAke1B0LmdldEZ1bGxZZWFyKCl9LSR7VW4oUHQuZ2V0TW9udGgoKSsxKX0tJHtVbihQdC5nZXREYXRlKCkpfWB9KX0sKCk9PntKKCJjYW5jZWwiLHt9KX0sYi5tb2RlPT09WXQuVElNRT97dGltZTpkbihiLnZhbHVlLFl0LlRJTUUpfTp7ZGF0ZTpkbihiLnZhbHVlLFl0LkRBVEUpLG1pbkRhdGU6ZG4oYi5zdGFydCxZdC5EQVRFKSxtYXhEYXRlOmRuKGIuZW5kLFl0LkRBVEUpfSl9LExlPXZ0PT57KHZ0Lm1vZGU9PT1ZdC5USU1FfHx2dC5tb2RlPT09WXQuREFURSkmJiF2dC5maWVsZHM/cGUoKToodnQuZmllbGRzPU9iamVjdC52YWx1ZXMoUm4pLmluY2x1ZGVzKHZ0LmZpZWxkcyk/dnQuZmllbGRzOlJuLkRBWSxEZSh2dCkpfSxwdD12dD0+e2IuZGlzYWJsZWR8fExlKEF0LmV4dGVuZCh7fSxiLHt2YWx1ZTpYLnZhbHVlLGxvY2FsZTpwLmdldExvY2FsZSgpfSkpfSxPdD1SLmluamVjdChiciwhMSksa3Q9e3N1Ym1pdDooKT0+W2IubmFtZSxYLnZhbHVlXSxyZXNldDooKT0+e3N3aXRjaChiLm1vZGUpe2Nhc2UgWXQuU0VMRUNUT1I6WC52YWx1ZT0wO2JyZWFrO2Nhc2UgWXQuTVVMVElTRUxFQ1RPUjpBdC5pc0FycmF5KGIudmFsdWUpJiYoWC52YWx1ZT1iLnZhbHVlLm1hcCh2dD0+MCkpO2JyZWFrO2Nhc2UgWXQuREFURTpjYXNlIFl0LlRJTUU6WC52YWx1ZT0iIjticmVha319fTtyZXR1cm4gT3QmJihPdC5hZGRGaWVsZChrdCksUi5vbkJlZm9yZVVubW91bnQoKCk9Pk90LnJlbW92ZUZpZWxkKGt0KSkpLE9iamVjdC5rZXlzKGIpLmZvckVhY2godnQ9PntSLndhdGNoKCgpPT5iW3Z0XSxodD0+e2xldCBQdD17fTtQdFt2dF09aHQsT2UoUHQpfSx7ZGVlcDohMH0pfSksUi53YXRjaCgoKT0+Yi52YWx1ZSxfZSx7ZGVlcDohMH0pLF9lKCksKCk9PlIuY3JlYXRlVk5vZGUoInZpZXciLHtyZWY6SCxvbkNsaWNrOnB0fSxbTC5kZWZhdWx0JiZMLmRlZmF1bHQoKV0pfX0pLEFvPXtuYW1lOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxtaW46e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6MH0sbWF4Ont0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjEwMH0sdmFsdWU6e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6MH0sc3RlcDp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDoxfSxkaXNhYmxlZDp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LGNvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIjZTllOWU5In0sYmFja2dyb3VuZENvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIjZTllOWU5In0sYWN0aXZlQ29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiMwMDdhZmYifSxzZWxlY3RlZENvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIjMDA3YWZmIn0sYmxvY2tDb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiI2ZmZmZmZiJ9LGJsb2NrU2l6ZTp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDoyOH0sc2hvd1ZhbHVlOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX19LFFvPVt7InVuaS1zbGlkZXIiOnsiIjp7ZmxleDoxLGZsZXhEaXJlY3Rpb246ImNvbHVtbiJ9fSwidW5pLXNsaWRlci13cmFwcGVyIjp7IiI6e2ZsZXhEaXJlY3Rpb246InJvdyIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsYWxpZ25JdGVtczoiY2VudGVyIn19LCJ1bmktc2xpZGVyLXRhcC1hcmVhIjp7IiI6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsZmxleDoxLGZsZXhEaXJlY3Rpb246InJvdyIsYWxpZ25JdGVtczoiY2VudGVyIixwYWRkaW5nVG9wOiIxNCIscGFkZGluZ0JvdHRvbToiMTQifX0sInVuaS1zbGlkZXItaGFuZGxlLXdyYXBwZXIiOnsiIjp7cG9zaXRpb246InJlbGF0aXZlIixmbGV4OjEsYmFja2dyb3VuZENvbG9yOiIjZTllOWU5IixoZWlnaHQ6IjIiLGJvcmRlclJhZGl1czoiNSIsbWFyZ2luUmlnaHQ6IjE0IixtYXJnaW5MZWZ0OiIxNCJ9fSwidW5pLXNsaWRlci10cmFjayI6eyIiOntoZWlnaHQ6IjIiLGJvcmRlclJhZGl1czoiNiIsYmFja2dyb3VuZENvbG9yOiIjMDA3YWZmIn19LCJ1bmktc2xpZGVyLXRodW1iIjp7IiI6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOiIxIix3aWR0aDoiMjgiLGhlaWdodDoiMjgiLGJvcmRlclJhZGl1czo1MCxib3hTaGFkb3c6IjAgMCA0cHggI2ViZWJlYiJ9fSwidW5pLXNsaWRlci12YWx1ZSI6eyIiOntjb2xvcjoiIzg4ODg4OCIsZm9udFNpemU6IjE2Iix3aWR0aDoiMzAifX19XSxUbz1SLmRlZmluZUNvbXBvbmVudCh7bmFtZToiVVNsaWRlciIscHJvcHM6QW8sc3R5bGVzOlFvLHNldHVwKGIse2VtaXQ6TH0pe2xldCBqPVIucmVmKG51bGwpLEg9Ui5yZWYobnVsbCksSj1ncihqLEwpLFg9Y28oYiksdWU9X2koYixYLEopO3JldHVybiBIbyhiLFgpLFIud2F0Y2goKCk9PmIudmFsdWUsX2U9PntYLnNsaWRlclZhbHVlPU51bWJlcihfZSl9KSxSLm9uTW91bnRlZCgoKT0+e2YoKCk9PntRbihILnZhbHVlKS50aGVuKCh7d2lkdGg6X2UsbGVmdDpPZX0pPT57WC5zbGlkZXJMZWZ0PU9lLFguc2xpZGVyV2lkdGg9X2V8fDAsWC5zbGlkZXJWYWx1ZT1OdW1iZXIoYi52YWx1ZSl9KX0sMTAwKX0pLCgpPT57bGV0e3Nob3dWYWx1ZTpfZX09Yix7dHJhY2tUYXBTdHlsZTpPZSx0cmFja1N0eWxlOkRlLHRyYWNrQWN0aXZlU3R5bGU6cGUsdGh1bWJTdHlsZTpMZSxzbGlkZXJWYWx1ZTpwdH09WDtyZXR1cm4gUi5jcmVhdGVWTm9kZSgiZGl2Iix7Y2xhc3M6InVuaS1zbGlkZXIiLHJlZjpqfSxbUi5jcmVhdGVWTm9kZSgiZGl2Iix7Y2xhc3M6InVuaS1zbGlkZXItd3JhcHBlciJ9LFtSLmNyZWF0ZVZOb2RlKCJkaXYiLFIubWVyZ2VQcm9wcyh7Y2xhc3M6InVuaS1zbGlkZXItdGFwLWFyZWEiLHN0eWxlOk9lfSx1ZSksW1IuY3JlYXRlVk5vZGUoImRpdiIse2NsYXNzOiJ1bmktc2xpZGVyLWhhbmRsZS13cmFwcGVyIixzdHlsZTpEZSxyZWY6SH0sW1IuY3JlYXRlVk5vZGUoImRpdiIse2NsYXNzOiJ1bmktc2xpZGVyLXRyYWNrIixzdHlsZTpwZX0sbnVsbCldKSxSLmNyZWF0ZVZOb2RlKCJkaXYiLHtjbGFzczoidW5pLXNsaWRlci10aHVtYiIsc3R5bGU6TGV9LG51bGwpXSksX2U/R24ocHQrIiIse2NsYXNzOiJ1bmktc2xpZGVyLXZhbHVlIn0pOm51bGxdKV0pfX19KTtmdW5jdGlvbiBjbyhiKXtsZXQgTD1SLnJlZigwKSxqPVIucmVmKDApLEg9Ui5yZWYoMCksSj0oKT0+Yi5iYWNrZ3JvdW5kQ29sb3IhPT0iI2U5ZTllOSI/Yi5iYWNrZ3JvdW5kQ29sb3I6Yi5jb2xvciE9PSIjMDA3YWZmIj9iLmNvbG9yOiIjMDA3YWZmIixYPSgpPT5iLmFjdGl2ZUNvbG9yIT09IiMwMDdhZmYiP2IuYWN0aXZlQ29sb3I6Yi5zZWxlY3RlZENvbG9yIT09IiNlOWU5ZTkiP2Iuc2VsZWN0ZWRDb2xvcjoiI2U5ZTllOSIsdWU9KCk9PntsZXQgRGU9TnVtYmVyKGIubWF4KSxwZT1OdW1iZXIoYi5taW4pO3JldHVybihILnZhbHVlLXBlKS8oRGUtcGUpKmoudmFsdWV9LF9lPU51bWJlcihiLmJsb2NrU2l6ZSkvMjtyZXR1cm4gUi5yZWFjdGl2ZSh7c2xpZGVyTGVmdDpMLHNsaWRlcldpZHRoOmosc2xpZGVyVmFsdWU6SCxzbGlkZXJUaHVtYk9mZnNldDpfZSx0cmFja1RhcFN0eWxlOlIuY29tcHV0ZWQoKCk9Pih7cGFkZGluZ1RvcDpfZSxwYWRkaW5nQm90dG9tOl9lfSkpLHRyYWNrU3R5bGU6Ui5jb21wdXRlZCgoKT0+KHtiYWNrZ3JvdW5kQ29sb3I6SigpLG1hcmdpbkxlZnQ6X2UsbWFyZ2luUmlnaHQ6X2V9KSksdHJhY2tBY3RpdmVTdHlsZTpSLmNvbXB1dGVkKCgpPT4oe2JhY2tncm91bmRDb2xvcjpYKCksd2lkdGg6dWUoKX0pKSx0aHVtYlN0eWxlOlIuY29tcHV0ZWQoKCk9Pih7d2lkdGg6Yi5ibG9ja1NpemUsaGVpZ2h0OmIuYmxvY2tTaXplLGJhY2tncm91bmRDb2xvcjpiLmJsb2NrQ29sb3IsbGVmdDp1ZSgpfSkpfSl9ZnVuY3Rpb24gX2koYixMLGope2xldCBIPW51bGw7ZnVuY3Rpb24gSihfZSxPZSl7Yi5kaXNhYmxlZHx8KF9lPT09Im1vdmUiPyhYKE9lKSxqKCJjaGFuZ2luZyIse3ZhbHVlOkwuc2xpZGVyVmFsdWV9KSk6X2U9PT0iZW5kIiYmKFgoT2UpLGooImNoYW5nZSIse3ZhbHVlOkwuc2xpZGVyVmFsdWV9KSkpfWZ1bmN0aW9uIFgoX2Upe19lLT1MLnNsaWRlclRodW1iT2Zmc2V0LF9lPDAmJihfZT0wKSxfZT5MLnNsaWRlcldpZHRoJiYoX2U9TC5zbGlkZXJXaWR0aCk7bGV0IE9lPU51bWJlcihiLm1heCksRGU9TnVtYmVyKGIubWluKSxwZT1OdW1iZXIoYi5zdGVwKSxMZT1fZS9MLnNsaWRlcldpZHRoKihPZS1EZSk7cGU+MCYmTGU+cGUmJkxlJXBlL3BlIT09MD9MZS09TGUlcGU6TGU9cGFyc2VJbnQoTGUrIiIpLEwuc2xpZGVyVmFsdWU9TGUrRGV9cmV0dXJue29uVG91Y2hzdGFydChfZSl7X2UuY2hhbmdlZFRvdWNoZXMubGVuZ3RoPT09MSYmIUgmJihIPV9lLEooInN0YXJ0IixfZS5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWCkpfSxvblRvdWNobW92ZShfZSl7X2UuY2hhbmdlZFRvdWNoZXMubGVuZ3RoPT09MSYmSCYmSigibW92ZSIsX2UuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVgpfSxvblRvdWNoZW5kKF9lKXtfZS5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg9PT0xJiZIJiYoSD1udWxsLEooImVuZCIsX2UuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVgpKX19fWZ1bmN0aW9uIEhvKGIsTCl7bGV0IGo9Ui5pbmplY3QoYnIsITEpLEg9e3N1Ym1pdDooKT0+e2xldCBKPVsiIixudWxsXTtyZXR1cm4gYi5uYW1lJiYoSlswXT1iLm5hbWUsSlsxXT1MLnNsaWRlclZhbHVlKSxKfSxyZXNldDooKT0+e0wuc2xpZGVyVmFsdWU9TnVtYmVyKGIudmFsdWUpfX07aiYmKGouYWRkRmllbGQoSCksUi5vblVubW91bnRlZCgoKT0+e2oucmVtb3ZlRmllbGQoSCl9KSl9bGV0IE5pPXtuYW1lOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxjaGVja2VkOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX0sdHlwZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoic3dpdGNoIn0saWQ6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LGRpc2FibGVkOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX0sY29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiMwMDdhZmYifX0sYmk9e3N3aXRjaDoic3dpdGNoIixjaGVja2JveDoiY2hlY2tib3gifSxJaT17d2lkdGg6NTIsaGVpZ2h0OjMyfSxEPVIuZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJTd2l0Y2giLHByb3BzOk5pLGVtaXRzOlsiY2hhbmdlIl0sc2V0dXAoYix7ZW1pdDpMfSl7bGV0IGo9Ui5yZWYobnVsbCksSD1SLnJlZihiLmNoZWNrZWQpLEo9eihiLEgpLFg9Z3IoaixMKTtSLndhdGNoKCgpPT5iLmNoZWNrZWQsX2U9PntILnZhbHVlPV9lfSk7bGV0IHVlPShfZSxPZSk9PntiLmRpc2FibGVkfHwoSC52YWx1ZT1fZS5kZXRhaWw/X2UuZGV0YWlsLnZhbHVlOiFILnZhbHVlLFgoImNoYW5nZSIse3ZhbHVlOkgudmFsdWV9KSl9O3JldHVybiBKJiYoSi5hZGRIYW5kbGVyKHVlKSxSLm9uQmVmb3JlVW5tb3VudCgoKT0+e0oucmVtb3ZlSGFuZGxlcih1ZSl9KSkscGkoYix7ImxhYmVsLWNsaWNrIjp1ZX0pLCgpPT57bGV0e2NvbG9yOl9lLHR5cGU6T2UsZGlzYWJsZWQ6RGV9PWI7cmV0dXJuIFIuY3JlYXRlVk5vZGUoImRpdiIse3JlZjpqfSxbT2U9PT1iaS5zd2l0Y2g/Ui5jcmVhdGVWTm9kZSgiZGMtc3dpdGNoIixSLm1lcmdlUHJvcHMoe2RhdGFVbmNUeXBlOiJ1bmktc3dpdGNoIn0se29uQ2hhbmdlOnVlfSx7Y2hlY2tlZDpILnZhbHVlLGNvbG9yOl9lLGRpc2FibGVkOkRlfSx7c3R5bGU6SWl9KSxudWxsKTpudWxsLE9lPT09YmkuY2hlY2tib3g/Ui5jcmVhdGVWTm9kZShSLnJlc29sdmVDb21wb25lbnQoImNoZWNrYm94IiksUi5tZXJnZVByb3BzKHtzdHlsZTp7Y29sb3I6X2V9fSx7Y2hlY2tlZDpILnZhbHVlLGRpc2FibGVkOkRlfSx7b25DbGljazp1ZX0pLG51bGwpOm51bGxdKX19fSk7ZnVuY3Rpb24geihiLEwpe2xldCBqPVIuaW5qZWN0KGJyLCExKSxIPVIuaW5qZWN0KGtuLCExKSxKPXtzdWJtaXQ6KCk9PntsZXQgWD1bIiIsbnVsbF07cmV0dXJuIGIubmFtZSYmKFhbMF09Yi5uYW1lLFhbMV09TC52YWx1ZSksWH0scmVzZXQ6KCk9PntMLnZhbHVlPSExfX07cmV0dXJuIGomJihqLmFkZEZpZWxkKEopLFIub25Vbm1vdW50ZWQoKCk9PntqLnJlbW92ZUZpZWxkKEopfSkpLEh9bGV0IGxlPXtjaGVja2VkOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX0saWQ6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LGRpc2FibGVkOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX0sY29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiMwMDdhZmYifSx2YWx1ZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn19LEhlPUNuKCJ1Y2ciKSxqZT17bmFtZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn19LGR0PVt7InVuaS1jaGVja2JveCI6eyIiOntmbGV4RGlyZWN0aW9uOiJyb3ciLGFsaWduSXRlbXM6ImNlbnRlciJ9fSwidW5pLWNoZWNrYm94LWlucHV0Ijp7IiI6e2p1c3RpZnlDb250ZW50OiJjZW50ZXIiLGFsaWduSXRlbXM6ImNlbnRlciIscG9zaXRpb246InJlbGF0aXZlIixib3JkZXJXaWR0aDoiMSIsYm9yZGVyQ29sb3I6IiNkMWQxZDEiLGJvcmRlclN0eWxlOiJzb2xpZCIsYmFja2dyb3VuZENvbG9yOiIjZmZmZmZmIixib3JkZXJSYWRpdXM6IjMiLHdpZHRoOiIyMiIsaGVpZ2h0OiIyMiJ9fSwidW5pLWljb24iOnsiIjp7Zm9udEZhbWlseToidW5pbmNvbXBvbmVudHMiLGZvbnRTaXplOiIxNiIsbWFyZ2luTGVmdDoiMiIsbWFyZ2luVG9wOiIyIixjb2xvcjoiIzAwN2FmZiJ9fSwidW5pLWNoZWNrYm94LWlucHV0LWRpc2FibGVkIjp7IiI6e2JhY2tncm91bmRDb2xvcjoiI2UxZTFlMSJ9fSwidW5pLWNoZWNrYm94LWlucHV0LWRpc2FibGVkLWJlZm9yZSI6eyIiOntjb2xvcjoiI2FkYWRhZCJ9fSwidW5pLWNoZWNrYm94LXNsb3QiOnsiIjp7Zm9udFNpemU6IjE2IixtYXJnaW5MZWZ0OiI1In19fV0scWU9Ui5kZWZpbmVDb21wb25lbnQoe25hbWU6IkNoZWNrYm94Iixwcm9wczpsZSxzdHlsZXM6ZHQsc2V0dXAoYix7c2xvdHM6TH0pe2xldCBqPVIucmVmKG51bGwpLEg9Ui5yZWYoYi5jaGVja2VkKSxKPVIucmVmKGIudmFsdWUpLFg9Ui5jb21wdXRlZCgoKT0+Yi5kaXNhYmxlZD8iI2FkYWRhZCI6Yi5jb2xvciksdWU9KCk9PntILnZhbHVlPSExfSxfZT0oTGUscHQpPT57Yi5kaXNhYmxlZHx8KEgudmFsdWU9IUgudmFsdWUsT2UmJk9lLmNoZWNrYm94Q2hhbmdlKExlKSl9LHt1bmlDaGVja0dyb3VwOk9lLHVuaUxhYmVsOkRlfT1udChILEosdWUpO0RlJiYoRGUuYWRkSGFuZGxlcihfZSksUi5vbkJlZm9yZVVubW91bnQoKCk9PntEZS5yZW1vdmVIYW5kbGVyKF9lKX0pKSxwaShiLHsibGFiZWwtY2xpY2siOl9lfSksUi53YXRjaChbKCk9PmIuY2hlY2tlZCwoKT0+Yi52YWx1ZV0sKFtMZSxwdF0pPT57SC52YWx1ZT1MZSxKLnZhbHVlPXB0fSk7bGV0IHBlPSgpPT57aWYoIUwuZGVmYXVsdClyZXR1cm5bXTtsZXQgTGU9TC5kZWZhdWx0KCk7cmV0dXJuIExlLmxlbmd0aD09PTEmJkxlWzBdLnR5cGU9PT1UZXh0P1tHbihMZVswXS5jaGlsZHJlbix7Y2xhc3M6InVuaS1jaGVja2JveC1zbG90In0pXTpMZX07cmV0dXJuKCk9PlIuY3JlYXRlVk5vZGUoImRpdiIsUi5tZXJnZVByb3BzKHtyZWY6an0se2RhdGFVbmNUeXBlOiJ1bmktY2hlY2tib3gifSx7b25DbGljazpfZSxjbGFzczoidW5pLWNoZWNrYm94In0pLFtSLmNyZWF0ZVZOb2RlKCJkaXYiLHtjbGFzczpbInVuaS1jaGVja2JveC1pbnB1dCIseyJ1bmktY2hlY2tib3gtaW5wdXQtZGlzYWJsZWQiOmIuZGlzYWJsZWR9XX0sW0gudmFsdWU/R24oIlx1RUEwOCIse2NsYXNzOiJ1bmktaWNvbiIsc3R5bGU6e2NvbG9yOlgudmFsdWV9fSk6bnVsbF0pLC4uLnBlKCldKX19KTtmdW5jdGlvbiBudChiLEwsail7bGV0IEg9Ui5jb21wdXRlZCgoKT0+KHtjaGVja2JveENoZWNrZWQ6Qm9vbGVhbihiLnZhbHVlKSx2YWx1ZTpMLnZhbHVlfSkpLEo9e3Jlc2V0Omp9LFg9Ui5pbmplY3QoSGUsITEpO1gmJlguYWRkRmllbGQoSCk7bGV0IHVlPVIuaW5qZWN0KGJyLCExKTt1ZSYmdWUuYWRkRmllbGQoSik7bGV0IF9lPVIuaW5qZWN0KGtuLCExKTtyZXR1cm4gUi5vbkJlZm9yZVVubW91bnQoKCk9PntYJiZYLnJlbW92ZUZpZWxkKEgpLHVlJiZ1ZS5yZW1vdmVGaWVsZChKKX0pLHt1bmlDaGVja0dyb3VwOlgsdW5pRm9ybTp1ZSx1bmlMYWJlbDpfZX19bGV0IFRyPVIuZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJDaGVja2JveEdyb3VwIixwcm9wczpqZSxlbWl0czpbImNoYW5nZSJdLHNldHVwKGIse3Nsb3RzOkwsZW1pdDpqfSl7bGV0IEg9Ui5yZWYobnVsbCksSj1ncihILGopO3JldHVybiBraShiLEopLCgpPT5SLmNyZWF0ZVZOb2RlKCJkaXYiLHtyZWY6SCxjbGFzczoidW5pLWNoZWNrYm94LWdyb3VwIn0sW0wuZGVmYXVsdCYmTC5kZWZhdWx0KCldKX19KTtmdW5jdGlvbiBraShiLEwpe2xldCBqPVtdLEg9KCk9PmoucmVkdWNlKChYLHVlKT0+KHVlLnZhbHVlLmNoZWNrYm94Q2hlY2tlZCYmWC5wdXNoKHVlLnZhbHVlLnZhbHVlKSxYKSxuZXcgQXJyYXkpO1IucHJvdmlkZShIZSx7YWRkRmllbGQoWCl7ai5wdXNoKFgpfSxyZW1vdmVGaWVsZChYKXtqLnNwbGljZShqLmluZGV4T2YoWCksMSl9LGNoZWNrYm94Q2hhbmdlKFgpe0woImNoYW5nZSIse3ZhbHVlOkgoKX0pfX0pO2xldCBKPVIuaW5qZWN0KGJyLCExKTtyZXR1cm4gSiYmSi5hZGRGaWVsZCh7c3VibWl0OigpPT57bGV0IFg9WyIiLG51bGxdO3JldHVybiBiLm5hbWUhPT0iIiYmKFhbMF09Yi5uYW1lLFhbMV09SCgpKSxYfX0pLEh9bGV0IE9yPXtjaGVja2VkOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX0saWQ6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LGRpc2FibGVkOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX0sY29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiMwMDdhZmYifSx2YWx1ZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn19LFByPUNuKCJ1Y2ciKSx1bz17bmFtZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn19LGZvPVt7InVuaS1yYWRpbyI6eyIiOnthbGlnbkl0ZW1zOiJjZW50ZXIiLGZsZXhEaXJlY3Rpb246InJvdyJ9fSwidW5pLXJhZGlvLWlucHV0Ijp7IiI6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixtYXJnaW5SaWdodDoiNSIsYm9yZGVyU3R5bGU6InNvbGlkIixib3JkZXJXaWR0aDoiMSIsYm9yZGVyQ29sb3I6IiNkMWQxZDEiLGJvcmRlclJhZGl1czo1MCx3aWR0aDoiMjIiLGhlaWdodDoiMjIiLG91dGxpbmU6MH19LCJ1bmktcmFkaW8taW5wdXQtaWNvbiI6eyIiOntmb250RmFtaWx5OiJ1bmluY29tcG9uZW50cyIsZm9udFNpemU6IjE0Iixjb2xvcjoiI2ZmZmZmZiJ9fSwidW5pLXJhZGlvLWlucHV0LWRpc2FibGVkIjp7IiI6e2JhY2tncm91bmRDb2xvcjoiI2UxZTFlMSIsYm9yZGVyQ29sb3I6IiNkMWQxZDEiLGNvbG9yOiIjYWRhZGFkIn19LCJ1bmktcmFkaW8tc2xvdCI6eyIiOntmb250U2l6ZToiMTYiLG1hcmdpbkxlZnQ6IjUifX19XSxPbz1SLmRlZmluZUNvbXBvbmVudCh7bmFtZToiUmFkaW8iLHByb3BzOk9yLHN0eWxlczpmbyxlbWl0czpbImNoYW5nZSJdLHNldHVwKGIse3Nsb3RzOkx9KXtsZXQgaj1SLnJlZihudWxsKSxIPVIucmVmKGIuY2hlY2tlZCksSj1SLnJlZihiLnZhbHVlKSxYPVIuY29tcHV0ZWQoKCk9PntsZXQgcHQ9Yi5kaXNhYmxlZD8iI2FkYWRhZCI6Yi5jb2xvcjtyZXR1cm4gSC52YWx1ZT97YmFja2dyb3VuZENvbG9yOnB0LGJvcmRlckNvbG9yOnB0fTp7Ym9yZGVyQ29sb3I6IiNkMWQxZDEifX0pLHVlPSgpPT57SC52YWx1ZT0hMX0se3VuaUNoZWNrR3JvdXA6X2UsdW5pTGFiZWw6T2UsZmllbGQ6RGV9PWNpKEgsSix1ZSkscGU9KHB0LE90KT0+e2IuZGlzYWJsZWR8fEgudmFsdWV8fChILnZhbHVlPSFILnZhbHVlLF9lJiZfZS5yYWRpb0NoYW5nZShwdCxEZSkpfTtPZSYmKE9lLmFkZEhhbmRsZXIocGUpLFIub25CZWZvcmVVbm1vdW50KCgpPT57T2UucmVtb3ZlSGFuZGxlcihwZSl9KSkscGkoYix7ImxhYmVsLWNsaWNrIjpwZX0pLFIud2F0Y2goWygpPT5iLmNoZWNrZWQsKCk9PmIudmFsdWVdLChbcHQsT3RdKT0+e0gudmFsdWU9cHQsSi52YWx1ZT1PdH0pO2xldCBMZT0oKT0+e2lmKCFMLmRlZmF1bHQpcmV0dXJuW107bGV0IHB0PUwuZGVmYXVsdCgpO3JldHVybiBwdC5sZW5ndGg9PT0xJiZwdFswXS50eXBlPT09VGV4dD9bR24ocHRbMF0uY2hpbGRyZW4se2NsYXNzOiJ1bmktcmFkaW8tc2xvdCJ9KV06cHR9O3JldHVybigpPT57bGV0e2Rpc2FibGVkOnB0fT1iO3JldHVybiBSLmNyZWF0ZVZOb2RlKCJkaXYiLFIubWVyZ2VQcm9wcyh7cmVmOmp9LHtkYXRhVW5jVHlwZToidW5pLXJhZGlvIn0se29uQ2xpY2s6cGUsY2xhc3M6InVuaS1yYWRpbyJ9KSxbUi5jcmVhdGVWTm9kZSgiZGl2Iix7c3R5bGU6WC52YWx1ZSxjbGFzczpbInVuaS1yYWRpby1pbnB1dCIseyJ1bmktcmFkaW8taW5wdXQtZGlzYWJsZWQiOnB0fV19LFtILnZhbHVlP0duKCJcdUVBMDgiLHtjbGFzczoidW5pLXJhZGlvLWlucHV0LWljb24ifSk6bnVsbF0pLC4uLkxlKCldKX19fSk7ZnVuY3Rpb24gY2koYixMLGope2xldCBIPVIuY29tcHV0ZWQoe2dldDooKT0+KHtyYWRpb0NoZWNrZWQ6Qm9vbGVhbihiLnZhbHVlKSx2YWx1ZTpMLnZhbHVlfSksc2V0Oih7cmFkaW9DaGVja2VkOk9lfSk9PntiLnZhbHVlPU9lfX0pLEo9e3Jlc2V0Omp9LFg9Ui5pbmplY3QoUHIsITEpO1gmJlguYWRkRmllbGQoSCk7bGV0IHVlPVIuaW5qZWN0KGJyLCExKTt1ZSYmdWUuYWRkRmllbGQoSik7bGV0IF9lPVIuaW5qZWN0KGtuLCExKTtyZXR1cm4gUi5vbkJlZm9yZVVubW91bnQoKCk9PntYJiZYLnJlbW92ZUZpZWxkKEgpLHVlJiZ1ZS5yZW1vdmVGaWVsZChKKX0pLHt1bmlDaGVja0dyb3VwOlgsdW5pRm9ybTp1ZSx1bmlMYWJlbDpfZSxmaWVsZDpIfX1sZXQgam89Ui5kZWZpbmVDb21wb25lbnQoe25hbWU6IlJhZGlvR3JvdXAiLHByb3BzOnVvLGVtaXRzOlsiY2hhbmdlIl0sc2V0dXAoYix7c2xvdHM6TCxlbWl0Omp9KXtsZXQgSD1SLnJlZihudWxsKSxKPWdyKEgsaik7cmV0dXJuIEppKGIsSiksKCk9PlIuY3JlYXRlVk5vZGUoImRpdiIse3JlZjpIfSxbTC5kZWZhdWx0JiZMLmRlZmF1bHQoKV0pfX0pO2Z1bmN0aW9uIEppKGIsTCl7bGV0IGo9W107Ui5vbk1vdW50ZWQoKCk9PntfZShqLmxlbmd0aC0xKX0pO2xldCBIPSgpPT57dmFyIE9lO3JldHVybihPZT1qLmZpbmQoRGU9PkRlLnZhbHVlLnJhZGlvQ2hlY2tlZCkpPT1udWxsP3ZvaWQgMDpPZS52YWx1ZS52YWx1ZX07Ui5wcm92aWRlKFByLHthZGRGaWVsZChPZSl7ai5wdXNoKE9lKX0scmVtb3ZlRmllbGQoT2Upe2ouc3BsaWNlKGouaW5kZXhPZihPZSksMSl9LHJhZGlvQ2hhbmdlKE9lLERlKXtsZXQgcGU9ai5pbmRleE9mKERlKTtfZShwZSwhMCksTCgiY2hhbmdlIix7dmFsdWU6SCgpfSl9fSk7bGV0IEo9Ui5pbmplY3QoYnIsITEpLFg9e3N1Ym1pdDooKT0+e2xldCBPZT1bIiIsbnVsbF07cmV0dXJuIGIubmFtZSE9PSIiJiYoT2VbMF09Yi5uYW1lLE9lWzFdPUgoKSksT2V9fTtKJiYoSi5hZGRGaWVsZChYKSxSLm9uQmVmb3JlVW5tb3VudCgoKT0+e0oucmVtb3ZlRmllbGQoWCl9KSk7ZnVuY3Rpb24gdWUoT2UsRGUpe09lLnZhbHVlPXtyYWRpb0NoZWNrZWQ6RGUsdmFsdWU6T2UudmFsdWUudmFsdWV9fWZ1bmN0aW9uIF9lKE9lLERlKXtqLmZvckVhY2goKHBlLExlKT0+e0xlIT09T2UmJkRlJiZ1ZShqW0xlXSwhMSl9KX1yZXR1cm4gan1sZXQga2E9WyJ1LWlucHV0IiwidS10ZXh0YXJlYSJdLG9lPVIuZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJGb3JtIixlbWl0czpbInN1Ym1pdCIsInJlc2V0Il0sc2V0dXAoe30se3Nsb3RzOmIsZW1pdDpMfSl7bGV0IGo9Ui5yZWYobnVsbCksSD1ncihqLEwpLEo9W10sWDtyZXR1cm4gUi5wcm92aWRlKGJyLHthZGRGaWVsZCh1ZSl7Si5wdXNoKHVlKX0scmVtb3ZlRmllbGQodWUpe0ouc3BsaWNlKEouaW5kZXhPZih1ZSksMSl9LHN1Ym1pdCh1ZSl7bGV0IF9lPXt9O1gmJlgoX2UpO2xldCBPZT1KLnJlZHVjZSgoRGUscGUpPT57aWYocGUuc3VibWl0KXtsZXRbTGUscHRdPXBlLnN1Ym1pdCgpO0xlJiYoRGVbTGVdPXB0KX1yZXR1cm4gRGV9LE9iamVjdC5jcmVhdGUobnVsbCkpO09iamVjdC5hc3NpZ24oX2UsT2UpLEgoInN1Ym1pdCIse3ZhbHVlOl9lfSl9LHJlc2V0KHVlKXtYJiZYKCksSi5mb3JFYWNoKF9lPT5fZS5yZXNldCYmX2UucmVzZXQoKSksSCgicmVzZXQiLHVlKX19KSwoKT0+e2xldCB1ZT1iLmRlZmF1bHQmJmIuZGVmYXVsdCgpO3JldHVybiBYPVkodWUpLFIuY3JlYXRlVk5vZGUoInZpZXciLHtyZWY6an0sW3VlXSl9fX0pO2Z1bmN0aW9uIFkoYil7bGV0IEw9RS5yZXF1aXJlTW9kdWxlKCJwbHVzIiksaj0oSCxKKT0+eyhKfHxifHxbXSkuZm9yRWFjaChmdW5jdGlvbihYKXtrYS5pbmRleE9mKFN0cmluZyhYLnR5cGUpKT49MCYmWC5lbCYmWC5lbC5hdHRyJiZYLmVsLmF0dHIubmFtZSYmKEg/SFtYLmVsLmF0dHIubmFtZV09TC5nZXRWYWx1ZShYLmVsLm5vZGVJZCk6WC5lbC5zZXRWYWx1ZSgiIikpLEF0LmlzQXJyYXkoWC5jaGlsZHJlbikmJlguY2hpbGRyZW4mJlguY2hpbGRyZW4ubGVuZ3RoJiZqKEgsWC5jaGlsZHJlbil9KX07cmV0dXJuIGp9bGV0IGFlPXt0eXBlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxzaXplOnt0eXBlOltTdHJpbmcsTnVtYmVyXSxkZWZhdWx0OjIzfSxjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn19LE1lPXtzdWNjZXNzOiIjMDliYjA3IixpbmZvOiIjMTBhZWZmIix3YXJuOiIjZjc2MjYwIix3YWl0aW5nOiIjMTBhZWZmIixzYWZlX3N1Y2Nlc3M6IiMwOWJiMDciLHNhZmVfd2FybjoiI2ZmYmUwMCIsc3VjY2Vzc19jaXJjbGU6IiMwOWJiMDciLHN1Y2Nlc3Nfbm9fY2lyY2xlOiIjMDliYjA3Iix3YWl0aW5nX2NpcmNsZToiIzEwYWVmZiIsY2lyY2xlOiIjYzljOWM5Iixkb3dubG9hZDoiIzA5YmIwNyIsaW5mb19jaXJjbGU6IiMwOWJiMDciLGNhbmNlbDoiI2Y0MzUzMCIsc2VhcmNoOiIjYjJiMmIyIixjbGVhcjoiI2IyYjJiMiJ9LHV0PXtzdWNjZXNzOiJcdUVBMDYiLGluZm86Ilx1RUEwMyIsd2FybjoiXHVFQTBCIix3YWl0aW5nOiJcdUVBMDkiLHNhZmVfc3VjY2VzczoiXHVFQTA0IixzYWZlX3dhcm46Ilx1RUEwNSIsc3VjY2Vzc19jaXJjbGU6Ilx1RUEwNyIsc3VjY2Vzc19ub19jaXJjbGU6Ilx1RUEwOCIsd2FpdGluZ19jaXJjbGU6Ilx1RUEwQSIsY2lyY2xlOiJcdUVBMDEiLGRvd25sb2FkOiJcdUVBMDIiLGluZm9fY2lyY2xlOiJcdUVBMEMiLGNhbmNlbDoiXHVFQTBEIixzZWFyY2g6Ilx1RUEwRSIsY2xlYXI6Ilx1RUEwRiJ9LGhuPVt7InVuaS1pY29uIjp7IiI6e2ZvbnRGYW1pbHk6InVuaW5jb21wb25lbnRzIn19fV0scHI9Ui5kZWZpbmVDb21wb25lbnQoe25hbWU6Ikljb24iLHByb3BzOmFlLHN0eWxlczpobixzZXR1cChiLHt9KXtyZXR1cm4oKT0+R24odXRbYi50eXBlXSx7Y2xhc3M6InVuaS1pY29uIixzdHlsZTp7Y29sb3I6Yi5jb2xvcnx8TWVbYi50eXBlXSxmb250U2l6ZTpiLnNpemV9fSl9fSksQW49e2luZGljYXRvckRvdHM6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSx2ZXJ0aWNhbDp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LGF1dG9wbGF5Ont0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX0sY2lyY3VsYXI6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSxpbnRlcnZhbDp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDo1ZTN9LGR1cmF0aW9uOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjUwMH0sY3VycmVudDp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDowfSxpbmRpY2F0b3JDb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoicmdiYSgwLDAsMCwuMykifSxpbmRpY2F0b3JBY3RpdmVDb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIzAwMDAwMCJ9LHByZXZpb3VzTWFyZ2luOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxuZXh0TWFyZ2luOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxjdXJyZW50SXRlbUlkOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxza2lwSGlkZGVuSXRlbUxheW91dDp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LGRpc3BsYXlNdWx0aXBsZUl0ZW1zOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjF9LGRpc2FibGVUb3VjaDp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9fSx6bj1FLmNvbmZpZy5lbnYucGxhdGZvcm0udG9Mb3dlckNhc2UoKT09PSJhbmRyb2lkIixOcj1beyJ1bmktc3dpcGVyIjp7IiI6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsaGVpZ2h0OiIxNTBweCJ9fSwidW5pLXN3aXBlci1zbGlkZXIiOnsiIjp7cG9zaXRpb246ImFic29sdXRlIixsZWZ0OjAsdG9wOjAscmlnaHQ6MCxib3R0b206MH19LCJ1bmktc3dpcGVyLWRvdHMiOnsiIjp7cG9zaXRpb246ImFic29sdXRlIixsZWZ0OjAscmlnaHQ6MCxib3R0b206IjEwIixoZWlnaHQ6IjEwIn19fV0saG89Ui5kZWZpbmVDb21wb25lbnQoe25hbWU6IlN3aXBlciIscHJvcHM6QW4sc3R5bGVzOk5yLGVtaXRzOlsiY2hhbmdlIiwidHJhbnNpdGlvbiIsImFuaW1hdGlvbmZpbmlzaCJdLHNldHVwKGIse3Nsb3RzOkwsZW1pdDpqfSl7bGV0IEg9Ui5yZWYobnVsbCksSj1bXSxYPWdyKEgsaiksdWU9dnIoYiksX2U9ZGEodWUsYixKLFgpO3JldHVybiBSLndhdGNoKFsoKT0+Yi5jdXJyZW50LCgpPT5iLmN1cnJlbnRJdGVtSWRdLChbT2UsRGVdKT0+e1BvKHVlLGIsSil9KSxSLm9uTW91bnRlZCgoKT0+e2YoKCk9PntRbihILnZhbHVlKS50aGVuKCh7d2lkdGg6T2UsaGVpZ2h0OkRlfSk9Pnt1ZS5zd2lwZXJXaWR0aD1PZSx1ZS5zd2lwZXJIZWlnaHQ9RGV9KX0sNTApfSksKCk9PntsZXQgT2U9TC5kZWZhdWx0JiZMLmRlZmF1bHQoKSx7aW5kaWNhdG9yU3R5bGU6RGUsY3VycmVudFN5bmM6cGV9PXVlO3JldHVybiBKPUJyKE9lKSxSLmNyZWF0ZVZOb2RlKCJkaXYiLHtyZWY6SCxjbGFzczoidW5pLXN3aXBlciJ9LFtSLmNyZWF0ZVZOb2RlKCJzbGlkZXIiLFIubWVyZ2VQcm9wcyh7Y2xhc3M6InVuaS1zd2lwZXItc2xpZGVyIn0se2F1dG9QbGF5OmIuYXV0b3BsYXksaW50ZXJ2YWw6Yi5pbnRlcnZhbCxpbmRleDpwZSxrZWVwSW5kZXg6ITAsc2hvd0luZGljYXRvcnM6Yi5pbmRpY2F0b3JEb3RzLGluZmluaXRlOmIuY2lyY3VsYXIsdmVydGljYWw6Yi52ZXJ0aWNhbCxzY3JvbGxhYmxlOiFiLmRpc2FibGVUb3VjaH0sX2UpLFtKLFIuY3JlYXRlVk5vZGUoImluZGljYXRvciIse2NsYXNzOiJ1bmktc3dpcGVyLWRvdHMiLHN0eWxlOkRlfSxudWxsKV0pXSl9fX0pO2Z1bmN0aW9uIHZyKGIpe2xldCBMPVIucmVmKDApLGo9Ui5yZWYoMCksSD1SLnJlZihiLmN1cnJlbnQpLEo9Ui5yZWYoImF1dG9wbGF5IiksWD1SLmNvbXB1dGVkKCgpPT4oe2l0ZW1Db2xvcjpiLmluZGljYXRvckNvbG9yLGl0ZW1TZWxlY3RlZENvbG9yOmIuaW5kaWNhdG9yQWN0aXZlQ29sb3IsaXRlbVNpemU6OCxvcGFjaXR5OmIuaW5kaWNhdG9yRG90cz8xOjB9KSk7cmV0dXJuIFIucmVhY3RpdmUoe3N3aXBlcldpZHRoOkwsc3dpcGVySGVpZ2h0OmosaW5kaWNhdG9yU3R5bGU6WCxjdXJyZW50U3luYzpILGN1cnJlbnRDaGFuZ2VTb3VyY2U6Sn0pfWZ1bmN0aW9uIGRhKGIsTCxqLEgpe2xldCBKPTAsWD1wZT0+e2xldCBMZT1wZS5kZXRhaWwscHQ9TC52ZXJ0aWNhbCxPdD0ocHQ/TGUub2Zmc2V0WVJhdGlvOkxlLm9mZnNldFhSYXRpbyl8fDA7aWYoKHBlLmRyYWd8fHBlLmRyYWcpJiYoYi5jdXJyZW50Q2hhbmdlU291cmNlPSJ0b3VjaCIpLE90PT09MCl7bGV0IGt0PU1hdGguYWJzKEopO2lmKGt0PT09MSlyZXR1cm47a3Q+LjUmJihPdD0xKX1KPU90LEgoInRyYW5zaXRpb24iLHtkeDpwdD8wOi1iLnN3aXBlcldpZHRoKk90LGR5OnB0Py1iLnN3aXBlckhlaWdodCpPdDowfSl9LHVlPXBlPT57bGV0IExlPSgpPT57SCgiYW5pbWF0aW9uZmluaXNoIixPZSgpKSxiLmN1cnJlbnRDaGFuZ2VTb3VyY2U9ImF1dG9wbGF5In07em4/TGUoKTpmKExlLDUwKX0sX2U9cGU9PntBdC5pc1N0cmluZyhwZS5kZXRhaWwuc291cmNlKSYmKGIuY3VycmVudENoYW5nZVNvdXJjZT1wZS5kZXRhaWwuc291cmNlKSxiLmN1cnJlbnRTeW5jPXBlLmRldGFpbC5pbmRleCxKPTB9O2Z1bmN0aW9uIE9lKCl7bGV0IHBlPU51bWJlcihiLmN1cnJlbnRTeW5jKSxMZT1qW3BlXXx8e30scHQ9TGUuY29tcG9uZW50SW5zdGFuY2UmJkxlLmNvbXBvbmVudEluc3RhbmNlLml0ZW1JZHx8IiI7cmV0dXJue2N1cnJlbnQ6cGUsY3VycmVudEl0ZW1JZDpwdCxzb3VyY2U6Yi5jdXJyZW50Q2hhbmdlU291cmNlfX1yZXR1cm4gUi53YXRjaCgoKT0+Yi5jdXJyZW50U3luYyxwZT0+e0goImNoYW5nZSIsT2UoKSl9KSx7b25TY3JvbGw6WCxvblNjcm9sbGVuZDp1ZSxvbkNoYW5nZTpfZX19ZnVuY3Rpb24gUG8oYixMLGope2xldCBIPS0xO2lmKEwuY3VycmVudEl0ZW1JZClmb3IobGV0IEo9MCxYPWo7SjxYLmxlbmd0aDtKKyspe2xldCB1ZT1YW0pdLmNvbXBvbmVudEluc3RhbmNlO2lmKHVlJiZ1ZS5pdGVtSWQ9PT1MLmN1cnJlbnRJdGVtSWQpe0g9SjticmVha319SDwwJiYoSD1NYXRoLnJvdW5kKE51bWJlcihMLmN1cnJlbnQpKXx8MCksSD1IPDA/MDpILGIuY3VycmVudFN5bmMhPT1IJiYoYi5jdXJyZW50Q2hhbmdlU291cmNlPSIiLGIuY3VycmVudFN5bmM9SCl9bGV0IFJhPXtpdGVtSWQ6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9fSxoYT1SLmRlZmluZUNvbXBvbmVudCh7bmFtZToiU3dpcGVySXRlbSIscHJvcHM6UmEsc2V0dXAoYix7c2xvdHM6TH0pe3JldHVybigpPT5SLmNyZWF0ZVZOb2RlKCJkaXYiLHtjbGFzczoidW5pLXN3aXBlci1pdGVtIixzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixsZWZ0OjAsdG9wOjAscmlnaHQ6MCxib3R0b206MCxvdmVyZmxvdzoiaGlkZGVuIn19LFtMLmRlZmF1bHQmJkwuZGVmYXVsdCgpXSl9fSk7dmFyIE5zPS9ePChbLUEtWmEtejAtOV9dKykoKD86XHMrW2EtekEtWl86XVstYS16QS1aMC05XzouXSooPzpccyo9XHMqKD86KD86IlteIl0qIil8KD86J1teJ10qJyl8W14+XHNdKykpPykqKVxzKihcLz8pPi8sWWE9L148XC8oWy1BLVphLXowLTlfXSspW14+XSo+LyxJcz0vKFthLXpBLVpfOl1bLWEtekEtWjAtOV86Ll0qKSg/OlxzKj1ccyooPzooPzoiKCg/OlxcLnxbXiJdKSopIil8KD86JygoPzpcXC58W14nXSkqKScpfChbXj5cc10rKSkpPy9nLG5sPVJpKCJhcmVhLGJhc2UsYmFzZWZvbnQsYnIsY29sLGZyYW1lLGhyLGltZyxpbnB1dCxsaW5rLG1ldGEscGFyYW0sZW1iZWQsY29tbWFuZCxrZXlnZW4sc291cmNlLHRyYWNrLHdiciIpLHRyPVJpKCJhLGFkZHJlc3MsYXJ0aWNsZSxhcHBsZXQsYXNpZGUsYXVkaW8sYmxvY2txdW90ZSxidXR0b24sY2FudmFzLGNlbnRlcixkZCxkZWwsZGlyLGRpdixkbCxkdCxmaWVsZHNldCxmaWdjYXB0aW9uLGZpZ3VyZSxmb290ZXIsZm9ybSxmcmFtZXNldCxoMSxoMixoMyxoNCxoNSxoNixoZWFkZXIsaGdyb3VwLGhyLGlmcmFtZSxpc2luZGV4LGxpLG1hcCxtZW51LG5vZnJhbWVzLG5vc2NyaXB0LG9iamVjdCxvbCxvdXRwdXQscCxwcmUsc2VjdGlvbixzY3JpcHQsdGFibGUsdGJvZHksdGQsdGZvb3QsdGgsdGhlYWQsdHIsdWwsdmlkZW8iKSxybD1SaSgiYWJicixhY3JvbnltLGFwcGxldCxiLGJhc2Vmb250LGJkbyxiaWcsYnIsYnV0dG9uLGNpdGUsY29kZSxkZWwsZGZuLGVtLGZvbnQsaSxpZnJhbWUsaW1nLGlucHV0LGlucyxrYmQsbGFiZWwsbWFwLG9iamVjdCxxLHMsc2FtcCxzY3JpcHQsc2VsZWN0LHNtYWxsLHNwYW4sc3RyaWtlLHN0cm9uZyxzdWIsc3VwLHRleHRhcmVhLHR0LHUsdmFyIikseGE9UmkoImNvbGdyb3VwLGRkLGR0LGxpLG9wdGlvbnMscCx0ZCx0Zm9vdCx0aCx0aGVhZCx0ciIpLHlpPVJpKCJjaGVja2VkLGNvbXBhY3QsZGVjbGFyZSxkZWZlcixkaXNhYmxlZCxpc21hcCxtdWx0aXBsZSxub2hyZWYsbm9yZXNpemUsbm9zaGFkZSxub3dyYXAscmVhZG9ubHksc2VsZWN0ZWQiKSxrcz1SaSgic2NyaXB0LHN0eWxlIik7ZnVuY3Rpb24gaWwoYixMKXt2YXIgaixILEosWD1bXSx1ZT1iO2ZvcihYLmxhc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1t0aGlzLmxlbmd0aC0xXX07Yjspe2lmKEg9ITAsIVgubGFzdCgpfHwha3NbWC5sYXN0KCldKXtpZihiLmluZGV4T2YoIjwhLS0iKT09MD8oaj1iLmluZGV4T2YoIi0tPiIpLGo+PTAmJihMLmNvbW1lbnQmJkwuY29tbWVudChiLnN1YnN0cmluZyg0LGopKSxiPWIuc3Vic3RyaW5nKGorMyksSD0hMSkpOmIuaW5kZXhPZigiPC8iKT09MD8oSj1iLm1hdGNoKFlhKSxKJiYoYj1iLnN1YnN0cmluZyhKWzBdLmxlbmd0aCksSlswXS5yZXBsYWNlKFlhLERlKSxIPSExKSk6Yi5pbmRleE9mKCI8Iik9PTAmJihKPWIubWF0Y2goTnMpLEomJihiPWIuc3Vic3RyaW5nKEpbMF0ubGVuZ3RoKSxKWzBdLnJlcGxhY2UoTnMsT2UpLEg9ITEpKSxIKXtqPWIuaW5kZXhPZigiPCIpO3ZhciBfZT1qPDA/YjpiLnN1YnN0cmluZygwLGopO2I9ajwwPyIiOmIuc3Vic3RyaW5nKGopLEwuY2hhcnMmJkwuY2hhcnMoX2UpfX1lbHNlIGI9Yi5yZXBsYWNlKG5ldyBSZWdFeHAoIihbXFxzXFxTXSo/KTwvIitYLmxhc3QoKSsiW14+XSo+IiksZnVuY3Rpb24ocGUsTGUpe3JldHVybiBMZT1MZS5yZXBsYWNlKC88IS0tKFtcc1xTXSo/KS0tPnw8IVxbQ0RBVEFcWyhbXHNcU10qPyldXT4vZywiJDEkMiIpLEwuY2hhcnMmJkwuY2hhcnMoTGUpLCIifSksRGUoIiIsWC5sYXN0KCkpO2lmKGI9PXVlKXRocm93IlBhcnNlIEVycm9yOiAiK2I7dWU9Yn1EZSgpO2Z1bmN0aW9uIE9lKHBlLExlLHB0LE90KXtpZihMZT1MZS50b0xvd2VyQ2FzZSgpLHRyW0xlXSlmb3IoO1gubGFzdCgpJiZybFtYLmxhc3QoKV07KURlKCIiLFgubGFzdCgpKTtpZih4YVtMZV0mJlgubGFzdCgpPT1MZSYmRGUoIiIsTGUpLE90PW5sW0xlXXx8ISFPdCxPdHx8WC5wdXNoKExlKSxMLnN0YXJ0KXt2YXIga3Q9W107cHQucmVwbGFjZShJcyxmdW5jdGlvbih2dCxodCl7dmFyIFB0PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTphcmd1bWVudHNbNF0/YXJndW1lbnRzWzRdOnlpW2h0XT9odDoiIjtrdC5wdXNoKHtuYW1lOmh0LHZhbHVlOlB0LGVzY2FwZWQ6UHQucmVwbGFjZSgvKF58W15cXF0pIi9nLCckMVxcIicpfSl9KSxMLnN0YXJ0JiZMLnN0YXJ0KExlLGt0LE90KX19ZnVuY3Rpb24gRGUocGUsTGUpe2lmKExlKWZvcih2YXIgcHQ9WC5sZW5ndGgtMTtwdD49MCYmWFtwdF0hPUxlO3B0LS0pO2Vsc2UgdmFyIHB0PTA7aWYocHQ+PTApe2Zvcih2YXIgT3Q9WC5sZW5ndGgtMTtPdD49cHQ7T3QtLSlMLmVuZCYmTC5lbmQoWFtPdF0pO1gubGVuZ3RoPXB0fX19ZnVuY3Rpb24gUmkoYil7Zm9yKHZhciBMPXt9LGo9Yi5zcGxpdCgiLCIpLEg9MDtIPGoubGVuZ3RoO0grKylMW2pbSF1dPSEwO3JldHVybiBMfWZ1bmN0aW9uIGdhKGIpe3JldHVybiBiLnJlcGxhY2UoLzxcP3htbC4qXD8+XG4vLCIiKS5yZXBsYWNlKC88IWRvY3R5cGUuKj5cbi8sIiIpLnJlcGxhY2UoLzwhRE9DVFlQRS4qPlxuLywiIil9ZnVuY3Rpb24gem8oYil7cmV0dXJuIGIucmVkdWNlKGZ1bmN0aW9uKEwsail7bGV0IEg9ai52YWx1ZSxKPWoubmFtZTtyZXR1cm4gSC5tYXRjaCgvIC8pJiZbInN0eWxlIiwic3JjIl0uaW5kZXhPZihKKT09PS0xJiYoSD1ILnNwbGl0KCIgIikpLExbSl0/QXJyYXkuaXNBcnJheShMW0pdKT9MW0pdLnB1c2goSCk6TFtKXT1bTFtKXSxIXTpMW0pdPUgsTH0se30pfWZ1bmN0aW9uIFJzKGIpe2I9Z2EoYik7bGV0IEw9W10saj17bm9kZToicm9vdCIsY2hpbGRyZW46W119O3JldHVybiBpbChiLHtzdGFydDpmdW5jdGlvbihILEosWCl7bGV0IHVlPXtuYW1lOkh9O2lmKEoubGVuZ3RoIT09MCYmKHVlLmF0dHJzPXpvKEopKSxYKXtsZXQgX2U9TFswXXx8ajtfZS5jaGlsZHJlbnx8KF9lLmNoaWxkcmVuPVtdKSxfZS5jaGlsZHJlbi5wdXNoKHVlKX1lbHNlIEwudW5zaGlmdCh1ZSl9LGVuZDpmdW5jdGlvbihIKXtsZXQgSj1MLnNoaWZ0KCk7aWYoSi5uYW1lIT09SCYmY29uc29sZS5lcnJvcigiaW52YWxpZCBzdGF0ZTogbWlzbWF0Y2ggZW5kIHRhZyIpLEwubGVuZ3RoPT09MClqLmNoaWxkcmVuLnB1c2goSik7ZWxzZXtsZXQgWD1MWzBdO1guY2hpbGRyZW58fChYLmNoaWxkcmVuPVtdKSxYLmNoaWxkcmVuLnB1c2goSil9fSxjaGFyczpmdW5jdGlvbihIKXtsZXQgSj17dHlwZToidGV4dCIsdGV4dDpIfTtpZihMLmxlbmd0aD09PTApai5jaGlsZHJlbi5wdXNoKEopO2Vsc2V7bGV0IFg9TFswXTtYLmNoaWxkcmVufHwoWC5jaGlsZHJlbj1bXSksWC5jaGlsZHJlbi5wdXNoKEopfX0sY29tbWVudDpmdW5jdGlvbihIKXtsZXQgSj17bm9kZToiY29tbWVudCIsdGV4dDpIfSxYPUxbMF07WC5jaGlsZHJlbnx8KFguY2hpbGRyZW49W10pLFguY2hpbGRyZW4ucHVzaChKKX19KSxqLmNoaWxkcmVufWxldCB4cz17bm9kZXM6e3R5cGU6W0FycmF5LFN0cmluZ10sZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybltdfX19LEJhPTE2LHBhPVIuZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJSaWNoVGV4dCIscHJvcHM6eHMsc2V0dXAoYil7bGV0IEw9Ui5nZXRDdXJyZW50SW5zdGFuY2UoKTtyZXR1cm4oKT0+e2xldCBqPWIubm9kZXM7cmV0dXJuIEF0LmlzU3RyaW5nKGopJiYoaj1ScyhqKSksUi5jcmVhdGVWTm9kZSgidS1yaWNoLXRleHQiLHt2YWx1ZTpMYShqfHxbXSxMLnJvb3Qse2RlZmF1bHRGb250U2l6ZTpCYX0pfSxudWxsKX19fSk7ZnVuY3Rpb24gTGEoYixMLGope2xldCBIPVsic3BhbiIsImEiLCJpbWFnZSIsImltZyJdLEo9e2Jsb2NrcXVvdGU6TGUsYnI6dnQsZGl2OkxlLGRsOkxlLGgxOk90KDIpLGgyOk90KDEuNSksaDM6T3QoMS4xNyksaDQ6T3QoMSksaDU6T3QoLjgzKSxoNjpPdCguNjcpLGhyOkxlLG9sOkxlLHA6TGUsc3Ryb25nOmt0LHRhYmxlOkxlLHRib2R5OkxlLHRmb290OkxlLHRoZWFkOkxlLHVsOkxlfSxYPS8mKGFtcHxndHxsdHxuYnNwfHF1b3R8YXBvcyk7L2csdWU9e2FtcDoiJiIsZ3Q6Ij4iLGx0OiI8IixuYnNwOiIgIixxdW90OiciJyxhcG9zOiInIn0sX2U9e3R5cGU6InNwYW4iLF9fdHlwZToiYnJlYWsiLGF0dHI6e3ZhbHVlOmAKYH19LE9lPXtfX2Jsb2NrOiEwLF9fYnJlYWs6ITAsY2hpbGRyZW46W119LERlPW51bGw7ZnVuY3Rpb24gcGUod3Qpe2xldCBlbj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKHd0LmF0dHJzKXtsZXQgdm49KHd0LmF0dHJzLmNsYXNzfHwiIikuc3BsaXQoIiAiKTtPYmplY3QuYXNzaWduKGVuLFIucGFyc2VDbGFzc0xpc3Qodm4sTCksVGkod3QuYXR0cnMuc3R5bGV8fCIiKSl9aWYod3QubmFtZT09PSJpbWcifHx3dC5uYW1lPT09ImltYWdlIil7bGV0IHZuPXd0LmF0dHJzO2VuLndpZHRoPWVuLndpZHRofHx2bi53aWR0aCxlbi5oZWlnaHQ9ZW4uaGVpZ2h0fHx2bi5oZWlnaHR9cmV0dXJuIGVufWZ1bmN0aW9uIExlKHd0KXtyZXR1cm4gd3QuX19ibG9jaz0hMCx3dH1mdW5jdGlvbiBwdCh3dCxlbil7cmV0dXJuIHd0LnN0eWxlJiYhd3Quc3R5bGUuZm9udFNpemUmJih3dC5zdHlsZS5mb250U2l6ZT1qLmRlZmF1bHRGb250U2l6ZSplbiksTGUoa3Qod3QpKX1mdW5jdGlvbiBPdCh3dCl7cmV0dXJuIGZ1bmN0aW9uKGVuKXtyZXR1cm4gcHQoZW4sd3QpfX1mdW5jdGlvbiBrdCh3dCl7cmV0dXJuIHd0LnN0eWxlJiYhd3Quc3R5bGUuZm9udFdlaWdodCYmKHd0LnN0eWxlLmZvbnRXZWlnaHQ9ImJvbGQiKSx3dH1mdW5jdGlvbiB2dCh3dCl7cmV0dXJuIHd0Ll9fdmFsdWU9IiAiLExlKHd0KX1mdW5jdGlvbiBodCh3dCl7cmV0dXJuIHd0LnJlcGxhY2UoWCxmdW5jdGlvbihlbix2bil7cmV0dXJuIHVlW3ZuXX0pfWZ1bmN0aW9uIFB0KHd0KXtsZXQgZW49KHd0Lm5hbWV8fCIiKS50b0xvd2VyQ2FzZSgpLHZuPWVuLHVyPUpbZW5dO0guaW5kZXhPZihlbik9PT0tMSYmKGVuPSJzcGFuIiksZW49PT0iaW1nIiYmKGVuPSJpbWFnZSIpO2xldCBybj17dHlwZTplbixfX3R5cGU6dm4sYXR0cjpPYmplY3QuY3JlYXRlKG51bGwpfTtyZXR1cm4od3QudHlwZT09PSJ0ZXh0Inx8d3QudGV4dCkmJihybi5fX3ZhbHVlPXJuLmF0dHIudmFsdWU9aHQoKHd0LnRleHR8fCIiKS50cmltKCkpKSx3dC5hdHRycyYmT2JqZWN0LmtleXMod3QuYXR0cnMpLmZvckVhY2goQm49PntCbiE9PSJjbGFzcyImJkJuIT09InN0eWxlIiYmKHJuLmF0dHJbQm5dPXd0LmF0dHJzW0JuXSl9KSxybi5zdHlsZT1wZSh3dCksdXImJnVyKHJuKSwoT2UuX19ibG9ja3x8cm4uX19ibG9jaykmJihEZXx8KE9lLmNoaWxkcmVuLnB1c2goX2UpLERlPVtPZSxfZV0pKSxPZT1ybiwoT2UuX192YWx1ZXx8T2UudHlwZT09PSJpbWFnZSImJk9lLmF0dHIuc3JjKSYmKERlPW51bGwpLHJuLmNoaWxkcmVuPW9uKHd0LmNoaWxkcmVuKSxPZT1ybixPZS5fX2Jsb2NrJiZPZS5zdHlsZS5oZWlnaHQmJiEvXjAocHgpPyQvLnRlc3QoT2Uuc3R5bGUuaGVpZ2h0KSYmKERlPW51bGwpLHJufWZ1bmN0aW9uIG9uKHd0KXtyZXR1cm4gQXQuaXNBcnJheSh3dCk/d3QubWFwKGVuPT5QdChlbikpOltdfWxldCBGbj1vbihiKTtpZihEZSl7bGV0W3d0LGVuXT1EZSx2bj13dC5jaGlsZHJlbix1cj12bi5pbmRleE9mKGVuKTt2bi5zcGxpY2UodXIsMSl9cmV0dXJuIEZufWxldCBlYT17fTtmdW5jdGlvbiBCcyhiLEwsail7bGV0e2FkcGlkOkgsd2lkdGg6Sn09YixYPUgrIi0iK0osdWU9ZWFbWF07aWYodWUmJnVlLmxlbmd0aD4wKXtMKHVlLnNwbGljZSgwLDEpWzBdKTtyZXR1cm59aC5hZC5nZXRBZHMoYixfZT0+e2xldCBPZT1fZS5hZHM7TChPZS5zcGxpY2UoMCwxKVswXSksZWFbWF09dWU/dWUuY29uY2F0KE9lKTpPZX0sX2U9PntqKHtlcnJDb2RlOl9lLmNvZGUsZXJyTXNnOl9lLm1lc3NhZ2V9KX0pfWxldCBkcz17YWRwaWQ6e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6IiJ9LGRhdGE6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LHdpZHRoOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxjaGFubmVsOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifX0seGk9e2xvYWQ6ImxvYWQiLGNsb3NlOiJjbG9zZSIsZXJyb3I6ImVycm9yIixkb3dubG9hZGNoYW5nZToiZG93bmxvYWRjaGFuZ2UifSx2YT1SLmRlZmluZUNvbXBvbmVudCh7bmFtZToiQWQiLHByb3BzOmRzLGVtaXRzOlt4aS5sb2FkLHhpLmNsb3NlLHhpLmVycm9yLHhpLmRvd25sb2FkY2hhbmdlXSxzZXR1cChiLHtlbWl0Okx9KXtsZXQgaj1SLnJlZihudWxsKSxIPWdyKGosTCksSj1XcigpO1Iud2F0Y2goKCk9PmIuYWRwaWQsdWU9PntXbyhKLGIsSCl9KSxSLndhdGNoKCgpPT5iLmRhdGEsdWU9PntKLmRhdGE9dWV9KSxSLm9uTW91bnRlZCgoKT0+e2YoKCk9PntRbihqLnZhbHVlKS50aGVuKCh7d2lkdGg6dWV9KT0+e0oud2lkdGg9dWU9PT0wPy0xOnVlLFdvKEosYixIKX0pfSw1MCl9KTtsZXQgWD17b25Eb3dubG9hZGNoYW5nZSh1ZSl7SCh4aS5kb3dubG9hZGNoYW5nZSx1ZSl9LG9uRGlzbGlrZSh1ZSl7SCh4aS5jbG9zZSx1ZSl9fTtyZXR1cm4oKT0+Ui5jcmVhdGVWTm9kZSgidS1hZCIsUi5tZXJnZVByb3BzKHtyZWY6an0se2RhdGE6Si5kYXRhLHJlbmRlcmluZzohMH0sWCksbnVsbCl9fSk7ZnVuY3Rpb24gV3IoYil7bGV0IEw9Ui5yZWYoIiIpO3JldHVybiBSLnJlYWN0aXZlKHt3aWR0aDowLGRhdGE6TH0pfWZ1bmN0aW9uIFdvKGIsTCxqKXtCcyh7YWRwaWQ6TC5hZHBpZCx3aWR0aDpiLndpZHRofSxIPT57Yi5kYXRhPUgsaih4aS5sb2FkLHt9KX0sSD0+e2ooeGkuZXJyb3IsSCl9KX1sZXQgaHM9e307ZnVuY3Rpb24gZ3MoYixMLGosSCxKKXtsZXQgWD1iKyItIitMLHVlPWhzW1hdO2lmKHVlJiZ1ZS5sZW5ndGg+MCl7SCh1ZS5zcGxpY2UoMCwxKVswXSk7cmV0dXJufWguYWQuZ2V0RHJhd0Fkcyh7YWRwaWQ6U3RyaW5nKGIpLGNvdW50OjMsd2lkdGg6TH0sX2U9PntsZXQgT2U9X2UuYWRzO0goT2Uuc3BsaWNlKDAsMSlbMF0pLGhzW1hdPXVlP3VlLmNvbmNhdChPZSk6T2V9LF9lPT57Sih7ZXJyQ29kZTpfZS5jb2RlLGVyck1zZzpfZS5tZXNzYWdlfSl9KX1sZXQgSXI9e2FkcGlkOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OiIifSxkYXRhOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSx3aWR0aDp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn19LGdvPXtsb2FkOiJsb2FkIixjbG9zZToiY2xvc2UiLGVycm9yOiJlcnJvciJ9LE1hPVIuZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJBZERyYXciLHByb3BzOklyLGVtaXRzOltnby5sb2FkLGdvLmNsb3NlLGdvLmVycm9yXSxzZXR1cChiLHtlbWl0Okx9KXtsZXQgaj1SLnJlZihudWxsKSxIPWdyKGosTCksSj1tYSgpO1Iud2F0Y2goKCk9PmIuYWRwaWQsdWU9PntLYShKLGIsSCl9KSxSLndhdGNoKCgpPT5iLmRhdGEsdWU9PntKLmRhdGE9dWV9KTtsZXQgWD17b25EaXNsaWtlKHVlKXtIKGdvLmNsb3NlLHVlKX19O3JldHVybiBSLm9uTW91bnRlZCgoKT0+e2YoKCk9PntRbihqLnZhbHVlKS50aGVuKCh7d2lkdGg6dWUsaGVpZ2h0Ol9lfSk9PntKLndpZHRoPXVlPT09MD8tMTp1ZSxKLmhlaWdodD1fZT09PTA/LTE6X2UsS2EoSixiLEgpfSl9LDUwKX0pLCgpPT57bGV0e2RhdGE6dWV9PUo7cmV0dXJuIFIuY3JlYXRlVk5vZGUoInUtYWQtZHJhdyIsUi5tZXJnZVByb3BzKHtyZWY6an0se2RhdGE6dWUscmVuZGVyaW5nOiEwfSxYKSxudWxsKX19fSk7ZnVuY3Rpb24gbWEoYil7bGV0IEw9Ui5yZWYoIiIpO3JldHVybiBSLnJlYWN0aXZlKHt3aWR0aDowLGhlaWdodDowLGRhdGE6TH0pfWZ1bmN0aW9uIEthKGIsTCxqKXtncyhMLmFkcGlkLGIud2lkdGgsYi5oZWlnaHQsSD0+e2IuZGF0YT1ILGooZ28ubG9hZCx7fSl9LEg9PntqKGdvLmVycm9yLEgpfSl9cmV0dXJue05hdmlnYXRvcjpIcixMYWJlbDpxbixCdXR0b246Vm4sTW92YWJsZUFyZWE6eXIsTW92YWJsZVZpZXc6cWksUHJvZ3Jlc3M6ZmEsUGlja2VyVmlldzpsbyxQaWNrZXJWaWV3Q29sdW1uOkRyLFBpY2tlcjpGcixVU2xpZGVyOlRvLFN3aXRjaDpELENoZWNrYm94OnFlLENoZWNrYm94R3JvdXA6VHIsUmFkaW86T28sUmFkaW9Hcm91cDpqbyxGb3JtOm9lLEljb246cHIsU3dpcGVyOmhvLFN3aXBlckl0ZW06aGEsUmljaFRleHQ6cGEsQWQ6dmEsQWREcmF3Ok1hfX0oTixTZSxmdCk7cmV0dXJuIEJ0fWZ1bmN0aW9uIHZJKGYscyl7bGV0e1VuaVNoYXJlZDpwLFZ1ZTp3fT1zO2Z1bmN0aW9uIE4oaCxfLEkpe2xldCBTZT1oLiRbX107cmV0dXJuIFNlJiZwLmludm9rZUFycmF5Rm5zKFNlLEkpfWxldCBFPWYuc2V0dXA7cmV0dXJuIGYuaW5oZXJpdEF0dHJzPSExLGYuc2V0dXA9KGgsXyk9PntsZXR7YXR0cnM6e19fcGFnZUlkOkksX19wYWdlUGF0aDpTZSxfX3BhZ2VRdWVyeTpmdH19PV8sVHQ9cy5fX3VuaVJvdXRlcy5maW5kKEF0PT5BdC5tZXRhLnJvdXRlPT09U2UpLEJ0PXcuZ2V0Q3VycmVudEluc3RhbmNlKCksUj1CdC5wcm94eTtpZihUdCYmKFR0Lm1ldGEuaXNTdWJOVnVlfHxtSShSLHMse19fcGFnZUlkOkksX19wYWdlUGF0aDpTZX0pKSx3Lm9uTW91bnRlZCgoKT0+e3cubmV4dFRpY2soKCk9PntOKFIscC5PTl9SRUFEWSl9KSxCdC5vblBhZ2VTY3JvbGwmJlIuJGVsLmFkZEV2ZW50KCJzY3JvbGwiLEF0PT57QXQuc2Nyb2xsVG9wPUF0LmRldGFpbC5zY3JvbGxUb3AsTihSLHAuT05fUEFHRV9TQ1JPTEwsQXQpfSksQnQub25SZWFjaEJvdHRvbSYmUi4kZWwuYWRkRXZlbnQoInNjcm9sbHRvbG93ZXIiLEF0PT57TihSLHAuT05fUkVBQ0hfQk9UVE9NLEF0KX0pfSksdy5vbkJlZm9yZVVubW91bnQoKCk9PntOKFIscC5PTl9VTkxPQUQpfSksRSlyZXR1cm4gRShmdCxfKX0sZn1mdW5jdGlvbiBtSShmLHMse19fcGFnZUlkOnAsX19wYWdlUGF0aDp3fSl7bGV0IE49cy5nZXRDdXJyZW50UGFnZXMoKSxFPU5bTi5sZW5ndGgtMV07aWYoRSYmRS5fX3NldHVwKUUuX19zZXR1cChmLEUpO2Vsc2V7bGV0IGg9Ii8iK3c7cmV0dXJuIHMuX19yZWdpc3RlclBhZ2Uoe3VybDpoLHBhdGg6aCxxdWVyeTp7fSxvcGVuVHlwZToibGF1bmNoIix3ZWJ2aWV3OntpZDpwKyIifSxudnVlUGFnZVZtOmZ9KX19dmFyIHZjPXt9LG12O2Z1bmN0aW9uIF92KGYpe212PWZ9dmFyIHp1O2Z1bmN0aW9uIF9JKGYpe2lmKHp1KXJldHVybiB6dTtsZXQgcz1uZXcgZi5FbWl0dGVyO3JldHVybiB6dT17b24ocCx3KXtyZXR1cm4gcy5vbihwLHcpfSxvbmNlKHAsdyl7cmV0dXJuIHMub25jZShwLHcpfSxvZmYocCx3KXtyZXR1cm4gcy5vZmYocCx3KX0sZW1pdChwLC4uLncpe3JldHVybiBzLmVtaXQocCwuLi53KX19LHp1fWZ1bmN0aW9uIGJJKGYpe3JldHVybihzLHAsdyk9PntsZXR7bnZ1ZTpOfT1wLEU9anUoZixwKTtwLlZ1ZT1FLHZjW3NdPXtpbnN0YW5jZUlkOnMsY29uZmlnOk4uY29uZmlnLGRvY3VtZW50Ok4uZG9jdW1lbnQsZGF0YTp3fTtsZXR7Y3JlYXRlQXBwOmh9PUU7RS5jcmVhdGVWdWVBcHA9RS5jcmVhdGVBcHA9KF8sSSk9PihwLl9fdW5pQ29uZmlnLnN0eWxlcz1fLnN0eWxlc3x8W10saChfLEkpLnVzZSh5SSxzLHApKSxFLmNyZWF0ZVBhZ2VBcHA9KF8sSSk9Pnt2SShfLHApO2xldCBTZT1JLiRzdG9yZTtkZWxldGUgSS4kc3RvcmU7bGV0IGZ0PWgoXyxJKTtyZXR1cm4gU2UmJmZ0LnVzZShTZSksZnQudXNlKFNJLEUscyxwKX19fXZhciB5ST17aW5zdGFsbChmLHMscCl7WmMocCkuaW5pdEFwcChmKSxFSShmLHMscCl9fTtmdW5jdGlvbiBFSShmLHMscCl7bGV0e21vdW50Ond9PWYsTj12Y1tzXTtyZXR1cm4gZi5tb3VudD1FPT57bGV0IGg9RT09PSIjYXBwIixfPU4uYXBwPXcoYnYoTi5kb2N1bWVudCx7aXNSb290Omh9KSk7cmV0dXJuIGgmJnAuX19yZWdpc3RlckFwcChfKSxffSxmfXZhciBTST17aW5zdGFsbChmLHMscCx3KXtsZXR7d2VleDpOLHBsdXM6RSxCcm9hZGNhc3RDaGFubmVsOmgsVnVlU2hhcmVkOl8sVW5pU2hhcmVkOkksZ2V0Q3VycmVudFBhZ2VzOlNlLHNldFRpbWVvdXQ6ZnQsY2xlYXJUaW1lb3V0OlR0LF9fdW5pQ29uZmlnOkJ0fT13O2YuY29uZmlnLmdsb2JhbFByb3BlcnRpZXMuJHJlcXVpcmVOYXRpdmVQbHVnaW49Ti5yZXF1aXJlTW9kdWxlO2xldCBSPXBJKHt1bmk6bXYsVnVlOnMsd2VleDpOLHBsdXM6RSxCcm9hZGNhc3RDaGFubmVsOmgsVW5pVmlld0pTQnJpZGdlOl9JKEkpLFZ1ZVNoYXJlZDpfLFVuaVNoYXJlZDpJLGdldEN1cnJlbnRQYWdlczpTZSxzZXRUaW1lb3V0OmZ0LGNsZWFyVGltZW91dDpUdCxfX3VuaUNvbmZpZzpCdH0pO09iamVjdC5rZXlzKFIpLmZvckVhY2goQXQ9PntmLmNvbXBvbmVudChzLmh5cGhlbmF0ZShBdCksUltBdF0pfSksWmModykuaW5pdEFwcChmKSx3SShmLHAsdyl9fTtmdW5jdGlvbiB3SShmLHMse252dWU6cH0pe2xldHtjb25maWc6e2NvbXBpbGVyT3B0aW9uczp3fSxtb3VudDpOfT1mO3cuaXNDdXN0b21FbGVtZW50PWg9PiEhcC5zdXBwb3J0cyhgQGNvbXBvbmVudC8ke2h9YCk7bGV0IEU9dmNbc107cmV0dXJuIGYubW91bnQ9aD0+e2xldCBfPWg9PT0iI3Jvb3QiLEk9RS5hcHA9TihidihFLmRvY3VtZW50LHtpc1Jvb3Q6X30pKTtpZihfKXRyeXtwLmRvY3VtZW50LnRhc2tDZW50ZXIuc2VuZCgiZG9tIix7YWN0aW9uOiJjcmVhdGVGaW5pc2gifSxbXSl9Y2F0Y2goU2Upe31yZXR1cm4gSX0sZn1mdW5jdGlvbiBidihmLHtpc1Jvb3Q6c30pe2lmKHMpcmV0dXJuIGYuZG9jdW1lbnRFbGVtZW50O2xldCBwPWYuY3JlYXRlQ29tbWVudCgicm9vdCIpO3JldHVybiBmLmRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZChwKSxwfWZ1bmN0aW9uIHl2KGYpe2xldCBzPXZjW2ZdO2lmKHMmJnMuYXBwJiZzLmRvY3VtZW50KXt0cnl7cy5hcHAuJC5hcHBDb250ZXh0LmFwcC51bm1vdW50KCkscy5kb2N1bWVudC5kZXN0cm95KCl9Y2F0Y2gocCl7fWRlbGV0ZSBzLmRvY3VtZW50LGRlbGV0ZSBzLmFwcH1kZWxldGUgdmNbZl19ZnVuY3Rpb24gRXYoZil7bGV0IHM9dmNbZl07aWYoIXN8fCFzLmFwcClyZXR1cm4gbmV3IEVycm9yKGByZWZyZXNoSW5zdGFuY2U6IGluc3RhbmNlICR7Zn0gbm90IGZvdW5kIWApO3MuZG9jdW1lbnQudGFza0NlbnRlci5zZW5kKCJkb20iLHthY3Rpb246InJlZnJlc2hGaW5pc2gifSxbXSl9ZnVuY3Rpb24gQ0koZixzKXtsZXR7VW5pU2hhcmVkOnAsVnVlU2hhcmVkOncsVnVlUmVhY3Rpdml0eTpOfT1mO3ZhciBFPWZ1bmN0aW9uKGgsXyxJLFNlKXsidXNlIHN0cmljdCI7dmFyIGZ0PVtdO2Z1bmN0aW9uIFR0KG8pe0kucGF1c2VUcmFja2luZygpO2Zvcih2YXIgYz1mdC5sZW5ndGg/ZnRbZnQubGVuZ3RoLTFdLmNvbXBvbmVudDpudWxsLHY9YyYmYy5hcHBDb250ZXh0LmNvbmZpZy53YXJuSGFuZGxlcixTPUJ0KCksUD1hcmd1bWVudHMubGVuZ3RoLFQ9bmV3IEFycmF5KFA+MT9QLTE6MCksRj0xO0Y8UDtGKyspVFtGLTFdPWFyZ3VtZW50c1tGXTtpZih2KWNuKHYsYywxMSxbbytULm1hcChXPT57dmFyIGllLFJlO3JldHVybihSZT0oaWU9Vy50b1N0cmluZyk9PW51bGw/dm9pZCAwOmllLmNhbGwoVykpIT1udWxsP1JlOkpTT04uc3RyaW5naWZ5KFcpfSkuam9pbigiIiksYyYmYy5wcm94eSxTLm1hcChXPT57dmFye3Zub2RlOmllfT1XO3JldHVybiJhdCA8Ii5jb25jYXQob2EoYyxpZS50eXBlKSwiPiIpfSkuam9pbihgCmApLFNdKTtlbHNle3ZhciBLPVsiW1Z1ZSB3YXJuXTogIi5jb25jYXQobyksLi4uVF07Uy5sZW5ndGgmJksucHVzaChgCmAsLi4uUihTKSksY29uc29sZS53YXJuKC4uLkspfUkucmVzZXRUcmFja2luZygpfWZ1bmN0aW9uIEJ0KCl7dmFyIG89ZnRbZnQubGVuZ3RoLTFdO2lmKCFvKXJldHVybltdO2Zvcih2YXIgYz1bXTtvOyl7dmFyIHY9Y1swXTt2JiZ2LnZub2RlPT09bz92LnJlY3Vyc2VDb3VudCsrOmMucHVzaCh7dm5vZGU6byxyZWN1cnNlQ291bnQ6MH0pO3ZhciBTPW8uY29tcG9uZW50JiZvLmNvbXBvbmVudC5wYXJlbnQ7bz1TJiZTLnZub2RlfXJldHVybiBjfWZ1bmN0aW9uIFIobyl7dmFyIGM9W107cmV0dXJuIG8uZm9yRWFjaCgodixTKT0+e2MucHVzaCguLi5TPT09MD9bXTpbYApgXSwuLi5BdCh2KSl9KSxjfWZ1bmN0aW9uIEF0KG8pe3Zhcnt2bm9kZTpjLHJlY3Vyc2VDb3VudDp2fT1vLFM9dj4wPyIuLi4gKCIuY29uY2F0KHYsIiByZWN1cnNpdmUgY2FsbHMpIik6IiIsUD1jLmNvbXBvbmVudD9jLmNvbXBvbmVudC5wYXJlbnQ9PW51bGw6ITEsVD0iIGF0IDwiLmNvbmNhdChvYShjLmNvbXBvbmVudCxjLnR5cGUsUCkpLEY9Ij4iK1M7cmV0dXJuIGMucHJvcHM/W1QsLi4uWm4oYy5wcm9wcyksRl06W1QrRl19ZnVuY3Rpb24gWm4obyl7dmFyIGM9W10sdj1PYmplY3Qua2V5cyhvKTtyZXR1cm4gdi5zbGljZSgwLDMpLmZvckVhY2goUz0+e2MucHVzaCguLi5zdChTLG9bU10pKX0pLHYubGVuZ3RoPjMmJmMucHVzaCgiIC4uLiIpLGN9ZnVuY3Rpb24gc3QobyxjLHYpe3JldHVybiBfLmlzU3RyaW5nKGMpPyhjPUpTT04uc3RyaW5naWZ5KGMpLHY/YzpbIiIuY29uY2F0KG8sIj0iKS5jb25jYXQoYyldKTp0eXBlb2YgYz09Im51bWJlciJ8fHR5cGVvZiBjPT0iYm9vbGVhbiJ8fGM9PW51bGw/dj9jOlsiIi5jb25jYXQobywiPSIpLmNvbmNhdChjKV06SS5pc1JlZihjKT8oYz1zdChvLEkudG9SYXcoYy52YWx1ZSksITApLHY/YzpbIiIuY29uY2F0KG8sIj1SZWY8IiksYywiPiJdKTpfLmlzRnVuY3Rpb24oYyk/WyIiLmNvbmNhdChvLCI9Zm4iKS5jb25jYXQoYy5uYW1lPyI8Ii5jb25jYXQoYy5uYW1lLCI+Iik6IiIpXTooYz1JLnRvUmF3KGMpLHY/YzpbIiIuY29uY2F0KG8sIj0iKSxjXSl9ZnVuY3Rpb24gRyhvLGMpe312YXIgbmU9e1NFVFVQX0ZVTkNUSU9OOjAsIjAiOiJTRVRVUF9GVU5DVElPTiIsUkVOREVSX0ZVTkNUSU9OOjEsIjEiOiJSRU5ERVJfRlVOQ1RJT04iLFdBVENIX0dFVFRFUjoyLCIyIjoiV0FUQ0hfR0VUVEVSIixXQVRDSF9DQUxMQkFDSzozLCIzIjoiV0FUQ0hfQ0FMTEJBQ0siLFdBVENIX0NMRUFOVVA6NCwiNCI6IldBVENIX0NMRUFOVVAiLE5BVElWRV9FVkVOVF9IQU5ETEVSOjUsIjUiOiJOQVRJVkVfRVZFTlRfSEFORExFUiIsQ09NUE9ORU5UX0VWRU5UX0hBTkRMRVI6NiwiNiI6IkNPTVBPTkVOVF9FVkVOVF9IQU5ETEVSIixWTk9ERV9IT09LOjcsIjciOiJWTk9ERV9IT09LIixESVJFQ1RJVkVfSE9PSzo4LCI4IjoiRElSRUNUSVZFX0hPT0siLFRSQU5TSVRJT05fSE9PSzo5LCI5IjoiVFJBTlNJVElPTl9IT09LIixBUFBfRVJST1JfSEFORExFUjoxMCwiMTAiOiJBUFBfRVJST1JfSEFORExFUiIsQVBQX1dBUk5fSEFORExFUjoxMSwiMTEiOiJBUFBfV0FSTl9IQU5ETEVSIixGVU5DVElPTl9SRUY6MTIsIjEyIjoiRlVOQ1RJT05fUkVGIixBU1lOQ19DT01QT05FTlRfTE9BREVSOjEzLCIxMyI6IkFTWU5DX0NPTVBPTkVOVF9MT0FERVIiLFNDSEVEVUxFUjoxNCwiMTQiOiJTQ0hFRFVMRVIifSxKdD17c3A6InNlcnZlclByZWZldGNoIGhvb2siLGJjOiJiZWZvcmVDcmVhdGUgaG9vayIsYzoiY3JlYXRlZCBob29rIixibToiYmVmb3JlTW91bnQgaG9vayIsbToibW91bnRlZCBob29rIixidToiYmVmb3JlVXBkYXRlIGhvb2siLHU6InVwZGF0ZWQiLGJ1bToiYmVmb3JlVW5tb3VudCBob29rIix1bToidW5tb3VudGVkIGhvb2siLGE6ImFjdGl2YXRlZCBob29rIixkYToiZGVhY3RpdmF0ZWQgaG9vayIsZWM6ImVycm9yQ2FwdHVyZWQgaG9vayIscnRjOiJyZW5kZXJUcmFja2VkIGhvb2siLHJ0ZzoicmVuZGVyVHJpZ2dlcmVkIGhvb2siLFswXToic2V0dXAgZnVuY3Rpb24iLFsxXToicmVuZGVyIGZ1bmN0aW9uIixbMl06IndhdGNoZXIgZ2V0dGVyIixbM106IndhdGNoZXIgY2FsbGJhY2siLFs0XToid2F0Y2hlciBjbGVhbnVwIGZ1bmN0aW9uIixbNV06Im5hdGl2ZSBldmVudCBoYW5kbGVyIixbNl06ImNvbXBvbmVudCBldmVudCBoYW5kbGVyIixbN106InZub2RlIGhvb2siLFs4XToiZGlyZWN0aXZlIGhvb2siLFs5XToidHJhbnNpdGlvbiBob29rIixbMTBdOiJhcHAgZXJyb3JIYW5kbGVyIixbMTFdOiJhcHAgd2FybkhhbmRsZXIiLFsxMl06InJlZiBmdW5jdGlvbiIsWzEzXToiYXN5bmMgY29tcG9uZW50IGxvYWRlciIsWzE0XToic2NoZWR1bGVyIGZsdXNoLiBUaGlzIGlzIGxpa2VseSBhIFZ1ZSBpbnRlcm5hbHMgYnVnLiBQbGVhc2Ugb3BlbiBhbiBpc3N1ZSBhdCBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvY29yZSAuIn07ZnVuY3Rpb24gY24obyxjLHYsUyl7dHJ5e3JldHVybiBTP28oLi4uUyk6bygpfWNhdGNoKFApe0duKFAsYyx2KX19ZnVuY3Rpb24gU24obyxjLHYsUyl7aWYoXy5pc0Z1bmN0aW9uKG8pKXt2YXIgUD1jbihvLGMsdixTKTtyZXR1cm4gUCYmXy5pc1Byb21pc2UoUCkmJlAuY2F0Y2goSz0+e0duKEssYyx2KX0pLFB9Zm9yKHZhciBUPVtdLEY9MDtGPG8ubGVuZ3RoO0YrKylULnB1c2goU24ob1tGXSxjLHYsUykpO3JldHVybiBUfWZ1bmN0aW9uIEduKG8sYyx2KXtpZihjJiZjLnZub2RlLGMpe2Zvcih2YXIgUz1jLnBhcmVudCxQPWMucHJveHksVD0iaHR0cHM6Ly92dWVqcy5vcmcvZXJyb3ItcmVmZXJlbmNlLyNydW50aW1lLSIuY29uY2F0KHYpO1M7KXt2YXIgRj1TLmVjO2lmKEYpe2Zvcih2YXIgSz0wO0s8Ri5sZW5ndGg7SysrKWlmKEZbS10obyxQLFQpPT09ITEpcmV0dXJufVM9Uy5wYXJlbnR9dmFyIFc9Yy5hcHBDb250ZXh0LmNvbmZpZy5lcnJvckhhbmRsZXI7aWYoVyl7Y24oVyxudWxsLDEwLFtvLFAsVF0pO3JldHVybn19Z2kobyl9ZnVuY3Rpb24gZ2kobyxjLHYpe2NvbnNvbGUuZXJyb3Iobyl9dmFyIEhyPSExLENuPSExLG5uPVtdLHluPTAsSW49W10sTW49bnVsbCx4cj0wLG9pPVByb21pc2UucmVzb2x2ZSgpLFhuPW51bGw7ZnVuY3Rpb24ganIobyl7dmFyIGM9WG58fG9pO3JldHVybiBvP2MudGhlbih0aGlzP28uYmluZCh0aGlzKTpvKTpjfWZ1bmN0aW9uICRlKG8pe2Zvcih2YXIgYz15bisxLHY9bm4ubGVuZ3RoO2M8djspe3ZhciBTPWMrdj4+PjEsUD1ubltTXSxUPWNyKFApO1Q8b3x8VD09PW8mJlAucHJlP2M9UysxOnY9U31yZXR1cm4gY31mdW5jdGlvbiBldChvKXsoIW5uLmxlbmd0aHx8IW5uLmluY2x1ZGVzKG8sSHImJm8uYWxsb3dSZWN1cnNlP3luKzE6eW4pKSYmKG8uaWQ9PW51bGw/bm4ucHVzaChvKTpubi5zcGxpY2UoJGUoby5pZCksMCxvKSxOdCgpKX1mdW5jdGlvbiBOdCgpeyFIciYmIUNuJiYoQ249ITAsWG49b2kudGhlbihwaSkpfWZ1bmN0aW9uIHVuKG8pe3ZhciBjPW5uLmluZGV4T2Yobyk7Yz55biYmbm4uc3BsaWNlKGMsMSl9ZnVuY3Rpb24gYW4obyl7Xy5pc0FycmF5KG8pP0luLnB1c2goLi4ubyk6KCFNbnx8IU1uLmluY2x1ZGVzKG8sby5hbGxvd1JlY3Vyc2U/eHIrMTp4cikpJiZJbi5wdXNoKG8pLE50KCl9ZnVuY3Rpb24gc24obyxjKXtmb3IodmFyIHY9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOkhyP3luKzE6MDt2PG5uLmxlbmd0aDt2Kyspe3ZhciBTPW5uW3ZdO2lmKFMmJlMucHJlKXtpZihvJiZTLmlkIT09by51aWQpY29udGludWU7bm4uc3BsaWNlKHYsMSksdi0tLFMoKX19fWZ1bmN0aW9uIGtuKG8pe2lmKEluLmxlbmd0aCl7dmFyIGM9Wy4uLm5ldyBTZXQoSW4pXS5zb3J0KCh2LFMpPT5jcih2KS1jcihTKSk7aWYoSW4ubGVuZ3RoPTAsTW4pe01uLnB1c2goLi4uYyk7cmV0dXJufWZvcihNbj1jLHhyPTA7eHI8TW4ubGVuZ3RoO3hyKyspTW5beHJdKCk7TW49bnVsbCx4cj0wfX12YXIgY3I9bz0+by5pZD09bnVsbD8xLzA6by5pZCxxbj0obyxjKT0+e3ZhciB2PWNyKG8pLWNyKGMpO2lmKHY9PT0wKXtpZihvLnByZSYmIWMucHJlKXJldHVybi0xO2lmKGMucHJlJiYhby5wcmUpcmV0dXJuIDF9cmV0dXJuIHZ9O2Z1bmN0aW9uIHBpKG8pe0NuPSExLEhyPSEwLG5uLnNvcnQocW4pO3ZhciBjPV8uTk9PUDt0cnl7Zm9yKHluPTA7eW48bm4ubGVuZ3RoO3luKyspe3ZhciB2PW5uW3luXTt2JiZ2LmFjdGl2ZSE9PSExJiZjbih2LG51bGwsMTQpfX1maW5hbGx5e3luPTAsbm4ubGVuZ3RoPTAsa24oKSxIcj0hMSxYbj1udWxsLChubi5sZW5ndGh8fEluLmxlbmd0aCkmJnBpKCl9fXZhciB6cixfcj1bXTtmdW5jdGlvbiBvbyhvLGMpe3ZhciB2LFM7aWYoenI9byx6cil6ci5lbmFibGVkPSEwLF9yLmZvckVhY2goVD0+e3ZhcntldmVudDpGLGFyZ3M6S309VDtyZXR1cm4genIuZW1pdChGLC4uLkspfSksX3I9W107ZWxzZSBpZih0eXBlb2Ygd2luZG93IT0idW5kZWZpbmVkIiYmd2luZG93LkhUTUxFbGVtZW50JiYhKChTPSh2PXdpbmRvdy5uYXZpZ2F0b3IpPT1udWxsP3ZvaWQgMDp2LnVzZXJBZ2VudCk9PW51bGw/dm9pZCAwOlMuaW5jbHVkZXMoImpzZG9tIikpKXt2YXIgUD1jLl9fVlVFX0RFVlRPT0xTX0hPT0tfUkVQTEFZX189Yy5fX1ZVRV9ERVZUT09MU19IT09LX1JFUExBWV9ffHxbXTtQLnB1c2goVD0+e29vKFQsYyl9KSxzZXRUaW1lb3V0KCgpPT57enJ8fChjLl9fVlVFX0RFVlRPT0xTX0hPT0tfUkVQTEFZX189bnVsbCxfcj1bXSl9LDNlMyl9ZWxzZSBfcj1bXX1mdW5jdGlvbiBYbyhvLGMpe2lmKCFvLmlzVW5tb3VudGVkKXtmb3IodmFyIHY9by52bm9kZS5wcm9wc3x8Xy5FTVBUWV9PQkosUz1hcmd1bWVudHMubGVuZ3RoLFA9bmV3IEFycmF5KFM+Mj9TLTI6MCksVD0yO1Q8UztUKyspUFtULTJdPWFyZ3VtZW50c1tUXTt2YXIgRj1QLEs9Yy5zdGFydHNXaXRoKCJ1cGRhdGU6IiksVz1LJiZjLnNsaWNlKDcpO2lmKFcmJlcgaW4gdil7dmFyIGllPSIiLmNvbmNhdChXPT09Im1vZGVsVmFsdWUiPyJtb2RlbCI6VywiTW9kaWZpZXJzIikse251bWJlcjpSZSx0cmltOldlfT12W2llXXx8Xy5FTVBUWV9PQko7V2UmJihGPVAubWFwKEV0PT5fLmlzU3RyaW5nKEV0KT9FdC50cmltKCk6RXQpKSxSZSYmKEY9UC5tYXAoXy5sb29zZVRvTnVtYmVyKSl9dmFyIGVlLEJlPXZbZWU9Xy50b0hhbmRsZXJLZXkoYyldfHx2W2VlPV8udG9IYW5kbGVyS2V5KF8uY2FtZWxpemUoYykpXTshQmUmJksmJihCZT12W2VlPV8udG9IYW5kbGVyS2V5KF8uaHlwaGVuYXRlKGMpKV0pLEJlJiZTbihCZSxvLDYsRik7dmFyIFplPXZbZWUrIk9uY2UiXTtpZihaZSl7aWYoIW8uZW1pdHRlZClvLmVtaXR0ZWQ9e307ZWxzZSBpZihvLmVtaXR0ZWRbZWVdKXJldHVybjtvLmVtaXR0ZWRbZWVdPSEwLFNuKFplLG8sNixGKX19fWZ1bmN0aW9uIHVhKG8sYyl7dmFyIHY9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiExLFM9Yy5lbWl0c0NhY2hlLFA9Uy5nZXQobyk7aWYoUCE9PXZvaWQgMClyZXR1cm4gUDt2YXIgVD1vLmVtaXRzLEY9e30sSz0hMTtpZighXy5pc0Z1bmN0aW9uKG8pKXt2YXIgVz1pZT0+e3ZhciBSZT11YShpZSxjLCEwKTtSZSYmKEs9ITAsXy5leHRlbmQoRixSZSkpfTshdiYmYy5taXhpbnMubGVuZ3RoJiZjLm1peGlucy5mb3JFYWNoKFcpLG8uZXh0ZW5kcyYmVyhvLmV4dGVuZHMpLG8ubWl4aW5zJiZvLm1peGlucy5mb3JFYWNoKFcpfXJldHVybiFUJiYhSz8oXy5pc09iamVjdChvKSYmUy5zZXQobyxudWxsKSxudWxsKTooXy5pc0FycmF5KFQpP1QuZm9yRWFjaChpZT0+RltpZV09bnVsbCk6Xy5leHRlbmQoRixUKSxfLmlzT2JqZWN0KG8pJiZTLnNldChvLEYpLEYpfWZ1bmN0aW9uIGppKG8sYyl7cmV0dXJuIW98fCFfLmlzT24oYyk/ITE6KGM9Yy5zbGljZSgyKS5yZXBsYWNlKC9PbmNlJC8sIiIpLF8uaGFzT3duKG8sY1swXS50b0xvd2VyQ2FzZSgpK2Muc2xpY2UoMSkpfHxfLmhhc093bihvLF8uaHlwaGVuYXRlKGMpKXx8Xy5oYXNPd24obyxjKSl9dmFyIHhuPW51bGwsYnI9bnVsbDtmdW5jdGlvbiBhaShvKXt2YXIgYz14bjtyZXR1cm4geG49byxicj1vJiZvLnR5cGUuX19zY29wZUlkfHxudWxsLGN9ZnVuY3Rpb24gdmkobyl7YnI9b31mdW5jdGlvbiBWbigpe2JyPW51bGx9dmFyIHlvPW89PkJyO2Z1bmN0aW9uIEJyKG8pe3ZhciBjPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp4bjtpZighY3x8by5fbilyZXR1cm4gbzt2YXIgdj1mdW5jdGlvbigpe3YuX2QmJndyKC0xKTt2YXIgUz1haShjKSxQO3RyeXtQPW8oLi4uYXJndW1lbnRzKX1maW5hbGx5e2FpKFMpLHYuX2QmJndyKDEpfXJldHVybiBQfTtyZXR1cm4gdi5fbj0hMCx2Ll9jPSEwLHYuX2Q9ITAsdn1mdW5jdGlvbiBQYSgpe31mdW5jdGlvbiBUaShvKXt2YXJ7dHlwZTpjLHZub2RlOnYscHJveHk6Uyx3aXRoUHJveHk6UCxwcm9wczpULHByb3BzT3B0aW9uczpbRl0sc2xvdHM6SyxhdHRyczpXLGVtaXQ6aWUscmVuZGVyOlJlLHJlbmRlckNhY2hlOldlLGRhdGE6ZWUsc2V0dXBTdGF0ZTpCZSxjdHg6WmUsaW5oZXJpdEF0dHJzOkV0fT1vLG10LFd0LEd0PWFpKG8pO3RyeXtpZih2LnNoYXBlRmxhZyY0KXt2YXIgZmU9UHx8Uyx4ZT1mZTttdD1PbihSZS5jYWxsKHhlLGZlLFdlLFQsQmUsZWUsWmUpKSxXdD1XfWVsc2V7dmFyIHdlPWM7bXQ9T24od2UubGVuZ3RoPjE/d2UoVCx7YXR0cnM6VyxzbG90czpLLGVtaXQ6aWV9KTp3ZShULG51bGwpKSxXdD1jLnByb3BzP1c6eXIoVyl9fWNhdGNoKGkpe2lyLmxlbmd0aD0wLEduKGksbywxKSxtdD15ZShHcil9dmFyIHplPW10O2lmKFd0JiZFdCE9PSExKXt2YXIgbHQ9T2JqZWN0LmtleXMoV3QpLHtzaGFwZUZsYWc6cnR9PXplO2x0Lmxlbmd0aCYmcnQmKDF8NikmJihGJiZsdC5zb21lKF8uaXNNb2RlbExpc3RlbmVyKSYmKFd0PU5hKFd0LEYpKSx6ZT1sbih6ZSxXdCkpfXJldHVybiB2LmRpcnMmJih6ZT1sbih6ZSksemUuZGlycz16ZS5kaXJzP3plLmRpcnMuY29uY2F0KHYuZGlycyk6di5kaXJzKSx2LnRyYW5zaXRpb24mJih6ZS50cmFuc2l0aW9uPXYudHJhbnNpdGlvbiksbXQ9emUsYWkoR3QpLG10fWZ1bmN0aW9uIFFuKG8pe2Zvcih2YXIgYyx2PTA7djxvLmxlbmd0aDt2Kyspe3ZhciBTPW9bdl07aWYoZmkoUykpe2lmKFMudHlwZSE9PUdyfHxTLmNoaWxkcmVuPT09InYtaWYiKXtpZihjKXJldHVybjtjPVN9fWVsc2UgcmV0dXJufXJldHVybiBjfXZhciB5cj1vPT57dmFyIGM7Zm9yKHZhciB2IGluIG8pKHY9PT0iY2xhc3MifHx2PT09InN0eWxlInx8Xy5pc09uKHYpKSYmKChjfHwoYz17fSkpW3ZdPW9bdl0pO3JldHVybiBjfSxOYT0obyxjKT0+e3ZhciB2PXt9O2Zvcih2YXIgUyBpbiBvKSghXy5pc01vZGVsTGlzdGVuZXIoUyl8fCEoUy5zbGljZSg5KWluIGMpKSYmKHZbU109b1tTXSk7cmV0dXJuIHZ9O2Z1bmN0aW9uIGdyKG8sYyx2KXt2YXJ7cHJvcHM6UyxjaGlsZHJlbjpQLGNvbXBvbmVudDpUfT1vLHtwcm9wczpGLGNoaWxkcmVuOksscGF0Y2hGbGFnOld9PWMsaWU9VC5lbWl0c09wdGlvbnM7aWYoYy5kaXJzfHxjLnRyYW5zaXRpb24pcmV0dXJuITA7aWYodiYmVz49MCl7aWYoVyYxMDI0KXJldHVybiEwO2lmKFcmMTYpcmV0dXJuIFM/RW8oUyxGLGllKTohIUY7aWYoVyY4KWZvcih2YXIgUmU9Yy5keW5hbWljUHJvcHMsV2U9MDtXZTxSZS5sZW5ndGg7V2UrKyl7dmFyIGVlPVJlW1dlXTtpZihGW2VlXSE9PVNbZWVdJiYhamkoaWUsZWUpKXJldHVybiEwfX1lbHNlIHJldHVybihQfHxLKSYmKCFLfHwhSy4kc3RhYmxlKT8hMDpTPT09Rj8hMTpTP0Y/RW8oUyxGLGllKTohMDohIUY7cmV0dXJuITF9ZnVuY3Rpb24gRW8obyxjLHYpe3ZhciBTPU9iamVjdC5rZXlzKGMpO2lmKFMubGVuZ3RoIT09T2JqZWN0LmtleXMobykubGVuZ3RoKXJldHVybiEwO2Zvcih2YXIgUD0wO1A8Uy5sZW5ndGg7UCsrKXt2YXIgVD1TW1BdO2lmKGNbVF0hPT1vW1RdJiYhamkodixUKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBNbyhvLGMpe2Zvcih2YXJ7dm5vZGU6dixwYXJlbnQ6U309bztTOyl7dmFyIFA9Uy5zdWJUcmVlO2lmKFAuc3VzcGVuc2UmJlAuc3VzcGVuc2UuYWN0aXZlQnJhbmNoPT09diYmKFAuZWw9di5lbCksUD09PXYpKHY9Uy52bm9kZSkuZWw9YyxTPVMucGFyZW50O2Vsc2UgYnJlYWt9fXZhciBEbz0iY29tcG9uZW50cyIsT2k9ImRpcmVjdGl2ZXMiO2Z1bmN0aW9uIHNpKG8sYyl7cmV0dXJuIGFvKERvLG8sITAsYyl8fG99dmFyIFNvPVN5bWJvbC5mb3IoInYtbmRjIik7ZnVuY3Rpb24gTHIobyl7cmV0dXJuIF8uaXNTdHJpbmcobyk/YW8oRG8sbywhMSl8fG86b3x8U299ZnVuY3Rpb24gQXIobyl7cmV0dXJuIGFvKE9pLG8pfWZ1bmN0aW9uIGFvKG8sYyl7dmFyIHY9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiExLFM9eG58fEVuO2lmKFMpe3ZhciBQPVMudHlwZTtpZihvPT09RG8pe3ZhciBUPVFpKFAsITEpO2lmKFQmJihUPT09Y3x8VD09PV8uY2FtZWxpemUoYyl8fFQ9PT1fLmNhcGl0YWxpemUoXy5jYW1lbGl6ZShjKSkpKXJldHVybiBQfXZhciBGPXdvKFNbb118fFBbb10sYyl8fHdvKFMuYXBwQ29udGV4dFtvXSxjKTtyZXR1cm4hRiYmdj9QOkZ9fWZ1bmN0aW9uIHdvKG8sYyl7cmV0dXJuIG8mJihvW2NdfHxvW18uY2FtZWxpemUoYyldfHxvW18uY2FwaXRhbGl6ZShfLmNhbWVsaXplKGMpKV0pfXZhciBQaT1vPT5vLl9faXNTdXNwZW5zZSxsaT0wLHppPXtuYW1lOiJTdXNwZW5zZSIsX19pc1N1c3BlbnNlOiEwLHByb2Nlc3MobyxjLHYsUyxQLFQsRixLLFcsaWUpe2lmKG89PW51bGwpR2koYyx2LFMsUCxULEYsSyxXLGllKTtlbHNle2lmKFQmJlQuZGVwcz4wJiYhby5zdXNwZW5zZS5pc0luRmFsbGJhY2spe2Muc3VzcGVuc2U9by5zdXNwZW5zZSxjLnN1c3BlbnNlLnZub2RlPWMsYy5lbD1vLmVsO3JldHVybn1JYShvLGMsdixTLFAsRixLLFcsaWUpfX0saHlkcmF0ZTpEbixjcmVhdGU6cWksbm9ybWFsaXplOlpyfSxGbz16aTtmdW5jdGlvbiBXaShvLGMpe3ZhciB2PW8ucHJvcHMmJm8ucHJvcHNbY107Xy5pc0Z1bmN0aW9uKHYpJiZ2KCl9ZnVuY3Rpb24gR2kobyxjLHYsUyxQLFQsRixLLFcpe3ZhcntwOmllLG86e2NyZWF0ZUVsZW1lbnQ6UmV9fT1XLFdlPVJlKCJkaXYiKSxlZT1vLnN1c3BlbnNlPXFpKG8sUCxTLGMsV2UsdixULEYsSyxXKTtpZShudWxsLGVlLnBlbmRpbmdCcmFuY2g9by5zc0NvbnRlbnQsV2UsbnVsbCxTLGVlLFQsRiksZWUuZGVwcz4wPyhXaShvLCJvblBlbmRpbmciKSxXaShvLCJvbkZhbGxiYWNrIiksaWUobnVsbCxvLnNzRmFsbGJhY2ssYyx2LFMsbnVsbCxULEYpLFRlKGVlLG8uc3NGYWxsYmFjaykpOmVlLnJlc29sdmUoITEsITApfWZ1bmN0aW9uIElhKG8sYyx2LFMsUCxULEYsSyxXKXt2YXJ7cDppZSx1bTpSZSxvOntjcmVhdGVFbGVtZW50OldlfX09VyxlZT1jLnN1c3BlbnNlPW8uc3VzcGVuc2U7ZWUudm5vZGU9YyxjLmVsPW8uZWw7dmFyIEJlPWMuc3NDb250ZW50LFplPWMuc3NGYWxsYmFjayx7YWN0aXZlQnJhbmNoOkV0LHBlbmRpbmdCcmFuY2g6bXQsaXNJbkZhbGxiYWNrOld0LGlzSHlkcmF0aW5nOkd0fT1lZTtpZihtdCllZS5wZW5kaW5nQnJhbmNoPUJlLGVpKEJlLG10KT8oaWUobXQsQmUsZWUuaGlkZGVuQ29udGFpbmVyLG51bGwsUCxlZSxULEYsSyksZWUuZGVwczw9MD9lZS5yZXNvbHZlKCk6V3QmJihHdHx8KGllKEV0LFplLHYsUyxQLG51bGwsVCxGLEspLFRlKGVlLFplKSkpKTooZWUucGVuZGluZ0lkPWxpKyssR3Q/KGVlLmlzSHlkcmF0aW5nPSExLGVlLmFjdGl2ZUJyYW5jaD1tdCk6UmUobXQsUCxlZSksZWUuZGVwcz0wLGVlLmVmZmVjdHMubGVuZ3RoPTAsZWUuaGlkZGVuQ29udGFpbmVyPVdlKCJkaXYiKSxXdD8oaWUobnVsbCxCZSxlZS5oaWRkZW5Db250YWluZXIsbnVsbCxQLGVlLFQsRixLKSxlZS5kZXBzPD0wP2VlLnJlc29sdmUoKTooaWUoRXQsWmUsdixTLFAsbnVsbCxULEYsSyksVGUoZWUsWmUpKSk6RXQmJmVpKEJlLEV0KT8oaWUoRXQsQmUsdixTLFAsZWUsVCxGLEspLGVlLnJlc29sdmUoITApKTooaWUobnVsbCxCZSxlZS5oaWRkZW5Db250YWluZXIsbnVsbCxQLGVlLFQsRixLKSxlZS5kZXBzPD0wJiZlZS5yZXNvbHZlKCkpKTtlbHNlIGlmKEV0JiZlaShCZSxFdCkpaWUoRXQsQmUsdixTLFAsZWUsVCxGLEspLFRlKGVlLEJlKTtlbHNlIGlmKFdpKGMsIm9uUGVuZGluZyIpLGVlLnBlbmRpbmdCcmFuY2g9QmUsQmUuc2hhcGVGbGFnJjUxMj9lZS5wZW5kaW5nSWQ9QmUuY29tcG9uZW50LnN1c3BlbnNlSWQ6ZWUucGVuZGluZ0lkPWxpKyssaWUobnVsbCxCZSxlZS5oaWRkZW5Db250YWluZXIsbnVsbCxQLGVlLFQsRixLKSxlZS5kZXBzPD0wKWVlLnJlc29sdmUoKTtlbHNle3Zhcnt0aW1lb3V0OmZlLHBlbmRpbmdJZDp4ZX09ZWU7ZmU+MD9zZXRUaW1lb3V0KCgpPT57ZWUucGVuZGluZ0lkPT09eGUmJmVlLmZhbGxiYWNrKFplKX0sZmUpOmZlPT09MCYmZWUuZmFsbGJhY2soWmUpfX1mdW5jdGlvbiBxaShvLGMsdixTLFAsVCxGLEssVyxpZSl7dmFyIFJlPWFyZ3VtZW50cy5sZW5ndGg+MTAmJmFyZ3VtZW50c1sxMF0hPT12b2lkIDA/YXJndW1lbnRzWzEwXTohMSx7cDpXZSxtOmVlLHVtOkJlLG46WmUsbzp7cGFyZW50Tm9kZTpFdCxyZW1vdmU6bXR9fT1pZSxXdCxHdD1mYShvKTtHdCYmKGM9PW51bGw/dm9pZCAwOmMucGVuZGluZ0JyYW5jaCkmJihXdD1jLnBlbmRpbmdJZCxjLmRlcHMrKyk7dmFyIGZlPW8ucHJvcHM/Xy50b051bWJlcihvLnByb3BzLnRpbWVvdXQpOnZvaWQgMCx4ZT1ULHdlPXt2bm9kZTpvLHBhcmVudDpjLHBhcmVudENvbXBvbmVudDp2LG5hbWVzcGFjZTpGLGNvbnRhaW5lcjpTLGhpZGRlbkNvbnRhaW5lcjpQLGRlcHM6MCxwZW5kaW5nSWQ6bGkrKyx0aW1lb3V0OnR5cGVvZiBmZT09Im51bWJlciI/ZmU6LTEsYWN0aXZlQnJhbmNoOm51bGwscGVuZGluZ0JyYW5jaDpudWxsLGlzSW5GYWxsYmFjazohUmUsaXNIeWRyYXRpbmc6UmUsaXNVbm1vdW50ZWQ6ITEsZWZmZWN0czpbXSxyZXNvbHZlKCl7dmFyIHplPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMSxsdD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITEse3Zub2RlOnJ0LGFjdGl2ZUJyYW5jaDppLHBlbmRpbmdCcmFuY2g6bCxwZW5kaW5nSWQ6ZCxlZmZlY3RzOm0scGFyZW50Q29tcG9uZW50OkEsY29udGFpbmVyOkN9PXdlLGs9ITE7d2UuaXNIeWRyYXRpbmc/d2UuaXNIeWRyYXRpbmc9ITE6emV8fChrPWkmJmwudHJhbnNpdGlvbiYmbC50cmFuc2l0aW9uLm1vZGU9PT0ib3V0LWluIixrJiYoaS50cmFuc2l0aW9uLmFmdGVyTGVhdmU9KCk9PntkPT09d2UucGVuZGluZ0lkJiYoZWUobCxDLFQ9PT14ZT9aZShpKTpULDApLGFuKG0pKX0pLGkmJihFdChpLmVsKSE9PXdlLmhpZGRlbkNvbnRhaW5lciYmKFQ9WmUoaSkpLEJlKGksQSx3ZSwhMCkpLGt8fGVlKGwsQyxULDApKSxUZSh3ZSxsKSx3ZS5wZW5kaW5nQnJhbmNoPW51bGwsd2UuaXNJbkZhbGxiYWNrPSExO2Zvcih2YXIgVj13ZS5wYXJlbnQsVT0hMTtWOyl7aWYoVi5wZW5kaW5nQnJhbmNoKXtWLmVmZmVjdHMucHVzaCguLi5tKSxVPSEwO2JyZWFrfVY9Vi5wYXJlbnR9IVUmJiFrJiZhbihtKSx3ZS5lZmZlY3RzPVtdLEd0JiZjJiZjLnBlbmRpbmdCcmFuY2gmJld0PT09Yy5wZW5kaW5nSWQmJihjLmRlcHMtLSxjLmRlcHM9PT0wJiYhbHQmJmMucmVzb2x2ZSgpKSxXaShydCwib25SZXNvbHZlIil9LGZhbGxiYWNrKHplKXtpZighIXdlLnBlbmRpbmdCcmFuY2gpe3Zhcnt2bm9kZTpsdCxhY3RpdmVCcmFuY2g6cnQscGFyZW50Q29tcG9uZW50OmksY29udGFpbmVyOmwsbmFtZXNwYWNlOmR9PXdlO1dpKGx0LCJvbkZhbGxiYWNrIik7dmFyIG09WmUocnQpLEE9KCk9Pnshd2UuaXNJbkZhbGxiYWNrfHwoV2UobnVsbCx6ZSxsLG0saSxudWxsLGQsSyxXKSxUZSh3ZSx6ZSkpfSxDPXplLnRyYW5zaXRpb24mJnplLnRyYW5zaXRpb24ubW9kZT09PSJvdXQtaW4iO0MmJihydC50cmFuc2l0aW9uLmFmdGVyTGVhdmU9QSksd2UuaXNJbkZhbGxiYWNrPSEwLEJlKHJ0LGksbnVsbCwhMCksQ3x8QSgpfX0sbW92ZSh6ZSxsdCxydCl7d2UuYWN0aXZlQnJhbmNoJiZlZSh3ZS5hY3RpdmVCcmFuY2gsemUsbHQscnQpLHdlLmNvbnRhaW5lcj16ZX0sbmV4dCgpe3JldHVybiB3ZS5hY3RpdmVCcmFuY2gmJlplKHdlLmFjdGl2ZUJyYW5jaCl9LHJlZ2lzdGVyRGVwKHplLGx0KXt2YXIgcnQ9ISF3ZS5wZW5kaW5nQnJhbmNoO3J0JiZ3ZS5kZXBzKys7dmFyIGk9emUudm5vZGUuZWw7emUuYXN5bmNEZXAuY2F0Y2gobD0+e0duKGwsemUsMCl9KS50aGVuKGw9PntpZighKHplLmlzVW5tb3VudGVkfHx3ZS5pc1VubW91bnRlZHx8d2UucGVuZGluZ0lkIT09emUuc3VzcGVuc2VJZCkpe3plLmFzeW5jUmVzb2x2ZWQ9ITA7dmFye3Zub2RlOmR9PXplO1ZhKHplLGwsITEpLGkmJihkLmVsPWkpO3ZhciBtPSFpJiZ6ZS5zdWJUcmVlLmVsO2x0KHplLGQsRXQoaXx8emUuc3ViVHJlZS5lbCksaT9udWxsOlplKHplLnN1YlRyZWUpLHdlLEYsVyksbSYmbXQobSksTW8oemUsZC5lbCkscnQmJi0td2UuZGVwcz09PTAmJndlLnJlc29sdmUoKX19KX0sdW5tb3VudCh6ZSxsdCl7d2UuaXNVbm1vdW50ZWQ9ITAsd2UuYWN0aXZlQnJhbmNoJiZCZSh3ZS5hY3RpdmVCcmFuY2gsdix6ZSxsdCksd2UucGVuZGluZ0JyYW5jaCYmQmUod2UucGVuZGluZ0JyYW5jaCx2LHplLGx0KX19O3JldHVybiB3ZX1mdW5jdGlvbiBEbihvLGMsdixTLFAsVCxGLEssVyl7dmFyIGllPWMuc3VzcGVuc2U9cWkoYyxTLHYsby5wYXJlbnROb2RlLHMuY3JlYXRlRWxlbWVudCgiZGl2IiksbnVsbCxQLFQsRixLLCEwKSxSZT1XKG8saWUucGVuZGluZ0JyYW5jaD1jLnNzQ29udGVudCx2LGllLFQsRik7cmV0dXJuIGllLmRlcHM9PT0wJiZpZS5yZXNvbHZlKCExLCEwKSxSZX1mdW5jdGlvbiBacihvKXt2YXJ7c2hhcGVGbGFnOmMsY2hpbGRyZW46dn09byxTPWMmMzI7by5zc0NvbnRlbnQ9RXIoUz92LmRlZmF1bHQ6diksby5zc0ZhbGxiYWNrPVM/RXIodi5mYWxsYmFjayk6eWUoR3IpfWZ1bmN0aW9uIEVyKG8pe3ZhciBjO2lmKF8uaXNGdW5jdGlvbihvKSl7dmFyIHY9dWkmJm8uX2M7diYmKG8uX2Q9ITEsaHIoKSksbz1vKCksdiYmKG8uX2Q9ITAsYz1kcixSbygpKX1pZihfLmlzQXJyYXkobykpe3ZhciBTPVFuKG8pO289U31yZXR1cm4gbz1PbihvKSxjJiYhby5keW5hbWljQ2hpbGRyZW4mJihvLmR5bmFtaWNDaGlsZHJlbj1jLmZpbHRlcihQPT5QIT09bykpLG99ZnVuY3Rpb24gTXQobyxjKXtjJiZjLnBlbmRpbmdCcmFuY2g/Xy5pc0FycmF5KG8pP2MuZWZmZWN0cy5wdXNoKC4uLm8pOmMuZWZmZWN0cy5wdXNoKG8pOmFuKG8pfWZ1bmN0aW9uIFRlKG8sYyl7by5hY3RpdmVCcmFuY2g9Yztmb3IodmFye3Zub2RlOnYscGFyZW50Q29tcG9uZW50OlN9PW8sUD1jLmVsOyFQJiZjLmNvbXBvbmVudDspYz1jLmNvbXBvbmVudC5zdWJUcmVlLFA9Yy5lbDt2LmVsPVAsUyYmUy5zdWJUcmVlPT09diYmKFMudm5vZGUuZWw9UCxNbyhTLFApKX1mdW5jdGlvbiBmYShvKXt2YXIgYztyZXR1cm4oKGM9by5wcm9wcyk9PW51bGw/dm9pZCAwOmMuc3VzcGVuc2libGUpIT1udWxsJiZvLnByb3BzLnN1c3BlbnNpYmxlIT09ITF9dmFyIGZuPVN5bWJvbC5mb3IoInYtc2N4IiksVm89KCk9Pnt7dmFyIG89SmEoZm4pO3JldHVybiBvfX07ZnVuY3Rpb24gTXIobyxjKXtyZXR1cm4gWHIobyxudWxsLGMpfWZ1bmN0aW9uIHNvKG8sYyl7cmV0dXJuIFhyKG8sbnVsbCx7Zmx1c2g6InBvc3QifSl9ZnVuY3Rpb24gbG8obyxjKXtyZXR1cm4gWHIobyxudWxsLHtmbHVzaDoic3luYyJ9KX12YXIgWWk9e307ZnVuY3Rpb24gS2kobyxjLHYpe3JldHVybiBYcihvLGMsdil9ZnVuY3Rpb24gWHIobyxjKXt2YXJ7aW1tZWRpYXRlOnYsZGVlcDpTLGZsdXNoOlAsb25jZTpULG9uVHJhY2s6RixvblRyaWdnZXI6S309YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOl8uRU1QVFlfT0JKO2lmKGMmJlQpe3ZhciBXPWM7Yz1mdW5jdGlvbigpe1coLi4uYXJndW1lbnRzKSxydCgpfX12YXIgaWU9RW4sUmU9aT0+Uz09PSEwP2k6RHIoaSxTPT09ITE/MTp2b2lkIDApLFdlLGVlPSExLEJlPSExO2lmKEkuaXNSZWYobyk/KFdlPSgpPT5vLnZhbHVlLGVlPUkuaXNTaGFsbG93KG8pKTpJLmlzUmVhY3RpdmUobyk/KFdlPSgpPT5SZShvKSxlZT0hMCk6Xy5pc0FycmF5KG8pPyhCZT0hMCxlZT1vLnNvbWUoaT0+SS5pc1JlYWN0aXZlKGkpfHxJLmlzU2hhbGxvdyhpKSksV2U9KCk9Pm8ubWFwKGk9PntpZihJLmlzUmVmKGkpKXJldHVybiBpLnZhbHVlO2lmKEkuaXNSZWFjdGl2ZShpKSlyZXR1cm4gUmUoaSk7aWYoXy5pc0Z1bmN0aW9uKGkpKXJldHVybiBjbihpLGllLDIpfSkpOl8uaXNGdW5jdGlvbihvKT9jP1dlPSgpPT5jbihvLGllLDIpOldlPSgpPT4oRXQmJkV0KCksU24obyxpZSwzLFttdF0pKTpXZT1fLk5PT1AsYyYmUyl7dmFyIFplPVdlO1dlPSgpPT5EcihaZSgpKX12YXIgRXQsbXQ9aT0+e0V0PXplLm9uU3RvcD0oKT0+e2NuKGksaWUsNCksRXQ9emUub25TdG9wPXZvaWQgMH19LFd0O2lmKGguaXNJblNTUkNvbXBvbmVudFNldHVwKWlmKG10PV8uTk9PUCxjP3YmJlNuKGMsaWUsMyxbV2UoKSxCZT9bXTp2b2lkIDAsbXRdKTpXZSgpLFA9PT0ic3luYyIpe3ZhciBHdD1WbygpO1d0PUd0Ll9fd2F0Y2hlckhhbmRsZXN8fChHdC5fX3dhdGNoZXJIYW5kbGVzPVtdKX1lbHNlIHJldHVybiBfLk5PT1A7dmFyIGZlPUJlP25ldyBBcnJheShvLmxlbmd0aCkuZmlsbChZaSk6WWkseGU9KCk9PntpZighKCF6ZS5hY3RpdmV8fCF6ZS5kaXJ0eSkpaWYoYyl7dmFyIGk9emUucnVuKCk7KFN8fGVlfHwoQmU/aS5zb21lKChsLGQpPT5fLmhhc0NoYW5nZWQobCxmZVtkXSkpOl8uaGFzQ2hhbmdlZChpLGZlKSkpJiYoRXQmJkV0KCksU24oYyxpZSwzLFtpLGZlPT09WWk/dm9pZCAwOkJlJiZmZVswXT09PVlpP1tdOmZlLG10XSksZmU9aSl9ZWxzZSB6ZS5ydW4oKX07eGUuYWxsb3dSZWN1cnNlPSEhYzt2YXIgd2U7UD09PSJzeW5jIj93ZT14ZTpQPT09InBvc3QiP3dlPSgpPT5ybih4ZSxpZSYmaWUuc3VzcGVuc2UpOih4ZS5wcmU9ITAsaWUmJih4ZS5pZD1pZS51aWQpLHdlPSgpPT5ldCh4ZSkpO3ZhciB6ZT1uZXcgSS5SZWFjdGl2ZUVmZmVjdChXZSxfLk5PT1Asd2UpLGx0PUkuZ2V0Q3VycmVudFNjb3BlKCkscnQ9KCk9Pnt6ZS5zdG9wKCksbHQmJl8ucmVtb3ZlKGx0LmVmZmVjdHMsemUpfTtyZXR1cm4gYz92P3hlKCk6ZmU9emUucnVuKCk6UD09PSJwb3N0Ij9ybih6ZS5ydW4uYmluZCh6ZSksaWUmJmllLnN1c3BlbnNlKTp6ZS5ydW4oKSxXdCYmV3QucHVzaChydCkscnR9ZnVuY3Rpb24gbWkobyxjLHYpe3ZhciBTPXRoaXMucHJveHksUD1fLmlzU3RyaW5nKG8pP28uaW5jbHVkZXMoIi4iKT9TcihTLG8pOigpPT5TW29dOm8uYmluZChTLFMpLFQ7Xy5pc0Z1bmN0aW9uKGMpP1Q9YzooVD1jLmhhbmRsZXIsdj1jKTt2YXIgRj1EaSh0aGlzKSxLPVhyKFAsVC5iaW5kKFMpLHYpO3JldHVybiBGKCksS31mdW5jdGlvbiBTcihvLGMpe3ZhciB2PWMuc3BsaXQoIi4iKTtyZXR1cm4oKT0+e2Zvcih2YXIgUz1vLFA9MDtQPHYubGVuZ3RoJiZTO1ArKylTPVNbdltQXV07cmV0dXJuIFN9fWZ1bmN0aW9uIERyKG8sYyl7dmFyIHY9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOjAsUz1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMDtpZighXy5pc09iamVjdChvKXx8by5fX3Zfc2tpcClyZXR1cm4gbztpZihjJiZjPjApe2lmKHY+PWMpcmV0dXJuIG87disrfWlmKFM9U3x8bmV3IFNldCxTLmhhcyhvKSlyZXR1cm4gbztpZihTLmFkZChvKSxJLmlzUmVmKG8pKURyKG8udmFsdWUsYyx2LFMpO2Vsc2UgaWYoXy5pc0FycmF5KG8pKWZvcih2YXIgUD0wO1A8by5sZW5ndGg7UCsrKURyKG9bUF0sYyx2LFMpO2Vsc2UgaWYoXy5pc1NldChvKXx8Xy5pc01hcChvKSlvLmZvckVhY2goRj0+e0RyKEYsYyx2LFMpfSk7ZWxzZSBpZihfLmlzUGxhaW5PYmplY3QobykpZm9yKHZhciBUIGluIG8pRHIob1tUXSxjLHYsUyk7cmV0dXJuIG99ZnVuY3Rpb24gQ28obyxjKXtpZih4bj09PW51bGwpcmV0dXJuIG87Zm9yKHZhciB2PSRzKHhuKXx8eG4ucHJveHksUz1vLmRpcnN8fChvLmRpcnM9W10pLFA9MDtQPGMubGVuZ3RoO1ArKyl7dmFyW1QsRixLLFc9Xy5FTVBUWV9PQkpdPWNbUF07VCYmKF8uaXNGdW5jdGlvbihUKSYmKFQ9e21vdW50ZWQ6VCx1cGRhdGVkOlR9KSxULmRlZXAmJkRyKEYpLFMucHVzaCh7ZGlyOlQsaW5zdGFuY2U6dix2YWx1ZTpGLG9sZFZhbHVlOnZvaWQgMCxhcmc6Syxtb2RpZmllcnM6V30pKX1yZXR1cm4gb31mdW5jdGlvbiBRcihvLGMsdixTKXtmb3IodmFyIFA9by5kaXJzLFQ9YyYmYy5kaXJzLEY9MDtGPFAubGVuZ3RoO0YrKyl7dmFyIEs9UFtGXTtUJiYoSy5vbGRWYWx1ZT1UW0ZdLnZhbHVlKTt2YXIgVz1LLmRpcltTXTtXJiYoSS5wYXVzZVRyYWNraW5nKCksU24oVyx2LDgsW28uZWwsSyxvLGNdKSxJLnJlc2V0VHJhY2tpbmcoKSl9fXZhciBZdD1TeW1ib2woIl9sZWF2ZUNiIiksUm49U3ltYm9sKCJfZW50ZXJDYiIpO2Z1bmN0aW9uIFVuKCl7dmFyIG89e2lzTW91bnRlZDohMSxpc0xlYXZpbmc6ITEsaXNVbm1vdW50aW5nOiExLGxlYXZpbmdWTm9kZXM6bmV3IE1hcH07cmV0dXJuIGZvKCgpPT57by5pc01vdW50ZWQ9ITB9KSxqbygoKT0+e28uaXNVbm1vdW50aW5nPSEwfSksb312YXIgZG49W0Z1bmN0aW9uLEFycmF5XSxlcj17bW9kZTpTdHJpbmcsYXBwZWFyOkJvb2xlYW4scGVyc2lzdGVkOkJvb2xlYW4sb25CZWZvcmVFbnRlcjpkbixvbkVudGVyOmRuLG9uQWZ0ZXJFbnRlcjpkbixvbkVudGVyQ2FuY2VsbGVkOmRuLG9uQmVmb3JlTGVhdmU6ZG4sb25MZWF2ZTpkbixvbkFmdGVyTGVhdmU6ZG4sb25MZWF2ZUNhbmNlbGxlZDpkbixvbkJlZm9yZUFwcGVhcjpkbixvbkFwcGVhcjpkbixvbkFmdGVyQXBwZWFyOmRuLG9uQXBwZWFyQ2FuY2VsbGVkOmRufSxVbz17bmFtZToiQmFzZVRyYW5zaXRpb24iLHByb3BzOmVyLHNldHVwKG8sYyl7dmFye3Nsb3RzOnZ9PWMsUz1TYSgpLFA9VW4oKTtyZXR1cm4oKT0+e3ZhciBUPXYuZGVmYXVsdCYmX2kodi5kZWZhdWx0KCksITApO2lmKCEoIVR8fCFULmxlbmd0aCkpe3ZhciBGPVRbMF07aWYoVC5sZW5ndGg+MSl7Zm9yKHZhciBLIG9mIFQpaWYoSy50eXBlIT09R3Ipe0Y9SzticmVha319dmFyIFc9SS50b1JhdyhvKSx7bW9kZTppZX09VztpZihQLmlzTGVhdmluZylyZXR1cm4gUW8oRik7dmFyIFJlPVRvKEYpO2lmKCFSZSlyZXR1cm4gUW8oRik7dmFyIFdlPUFvKFJlLFcsUCxTKTtjbyhSZSxXZSk7dmFyIGVlPVMuc3ViVHJlZSxCZT1lZSYmVG8oZWUpO2lmKEJlJiZCZS50eXBlIT09R3ImJiFlaShSZSxCZSkpe3ZhciBaZT1BbyhCZSxXLFAsUyk7aWYoY28oQmUsWmUpLGllPT09Im91dC1pbiIpcmV0dXJuIFAuaXNMZWF2aW5nPSEwLFplLmFmdGVyTGVhdmU9KCk9PntQLmlzTGVhdmluZz0hMSxTLnVwZGF0ZS5hY3RpdmUhPT0hMSYmKFMuZWZmZWN0LmRpcnR5PSEwLFMudXBkYXRlKCkpfSxRbyhGKTtpZT09PSJpbi1vdXQiJiZSZS50eXBlIT09R3ImJihaZS5kZWxheUxlYXZlPShFdCxtdCxXdCk9Pnt2YXIgR3Q9RnIoUCxCZSk7R3RbU3RyaW5nKEJlLmtleSldPUJlLEV0W1l0XT0oKT0+e210KCksRXRbWXRdPXZvaWQgMCxkZWxldGUgV2UuZGVsYXllZExlYXZlfSxXZS5kZWxheWVkTGVhdmU9V3R9KX1yZXR1cm4gRn19fX0sJG89VW87ZnVuY3Rpb24gRnIobyxjKXt2YXJ7bGVhdmluZ1ZOb2Rlczp2fT1vLFM9di5nZXQoYy50eXBlKTtyZXR1cm4gU3x8KFM9T2JqZWN0LmNyZWF0ZShudWxsKSx2LnNldChjLnR5cGUsUykpLFN9ZnVuY3Rpb24gQW8obyxjLHYsUyl7dmFye2FwcGVhcjpQLG1vZGU6VCxwZXJzaXN0ZWQ6Rj0hMSxvbkJlZm9yZUVudGVyOkssb25FbnRlcjpXLG9uQWZ0ZXJFbnRlcjppZSxvbkVudGVyQ2FuY2VsbGVkOlJlLG9uQmVmb3JlTGVhdmU6V2Usb25MZWF2ZTplZSxvbkFmdGVyTGVhdmU6QmUsb25MZWF2ZUNhbmNlbGxlZDpaZSxvbkJlZm9yZUFwcGVhcjpFdCxvbkFwcGVhcjptdCxvbkFmdGVyQXBwZWFyOld0LG9uQXBwZWFyQ2FuY2VsbGVkOkd0fT1jLGZlPVN0cmluZyhvLmtleSkseGU9RnIodixvKSx3ZT0ocnQsaSk9PntydCYmU24ocnQsUyw5LGkpfSx6ZT0ocnQsaSk9Pnt2YXIgbD1pWzFdO3dlKHJ0LGkpLF8uaXNBcnJheShydCk/cnQuZXZlcnkoZD0+ZC5sZW5ndGg8PTEpJiZsKCk6cnQubGVuZ3RoPD0xJiZsKCl9LGx0PXttb2RlOlQscGVyc2lzdGVkOkYsYmVmb3JlRW50ZXIocnQpe3ZhciBpPUs7aWYoIXYuaXNNb3VudGVkKWlmKFApaT1FdHx8SztlbHNlIHJldHVybjtydFtZdF0mJnJ0W1l0XSghMCk7dmFyIGw9eGVbZmVdO2wmJmVpKG8sbCkmJmwuZWxbWXRdJiZsLmVsW1l0XSgpLHdlKGksW3J0XSl9LGVudGVyKHJ0KXt2YXIgaT1XLGw9aWUsZD1SZTtpZighdi5pc01vdW50ZWQpaWYoUClpPW10fHxXLGw9V3R8fGllLGQ9R3R8fFJlO2Vsc2UgcmV0dXJuO3ZhciBtPSExLEE9cnRbUm5dPUM9PnttfHwobT0hMCxDP3dlKGQsW3J0XSk6d2UobCxbcnRdKSxsdC5kZWxheWVkTGVhdmUmJmx0LmRlbGF5ZWRMZWF2ZSgpLHJ0W1JuXT12b2lkIDApfTtpP3plKGksW3J0LEFdKTpBKCl9LGxlYXZlKHJ0LGkpe3ZhciBsPVN0cmluZyhvLmtleSk7aWYocnRbUm5dJiZydFtSbl0oITApLHYuaXNVbm1vdW50aW5nKXJldHVybiBpKCk7d2UoV2UsW3J0XSk7dmFyIGQ9ITEsbT1ydFtZdF09QT0+e2R8fChkPSEwLGkoKSxBP3dlKFplLFtydF0pOndlKEJlLFtydF0pLHJ0W1l0XT12b2lkIDAseGVbbF09PT1vJiZkZWxldGUgeGVbbF0pfTt4ZVtsXT1vLGVlP3plKGVlLFtydCxtXSk6bSgpfSxjbG9uZShydCl7cmV0dXJuIEFvKHJ0LGMsdixTKX19O3JldHVybiBsdH1mdW5jdGlvbiBRbyhvKXtpZihEKG8pKXJldHVybiBvPWxuKG8pLG8uY2hpbGRyZW49bnVsbCxvfWZ1bmN0aW9uIFRvKG8pe3JldHVybiBEKG8pP28uY2hpbGRyZW4/by5jaGlsZHJlblswXTp2b2lkIDA6b31mdW5jdGlvbiBjbyhvLGMpe28uc2hhcGVGbGFnJjYmJm8uY29tcG9uZW50P2NvKG8uY29tcG9uZW50LnN1YlRyZWUsYyk6by5zaGFwZUZsYWcmMTI4PyhvLnNzQ29udGVudC50cmFuc2l0aW9uPWMuY2xvbmUoby5zc0NvbnRlbnQpLG8uc3NGYWxsYmFjay50cmFuc2l0aW9uPWMuY2xvbmUoby5zc0ZhbGxiYWNrKSk6by50cmFuc2l0aW9uPWN9ZnVuY3Rpb24gX2kobyl7Zm9yKHZhciBjPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMSx2PWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwLFM9W10sUD0wLFQ9MDtUPG8ubGVuZ3RoO1QrKyl7dmFyIEY9b1tUXSxLPXY9PW51bGw/Ri5rZXk6U3RyaW5nKHYpK1N0cmluZyhGLmtleSE9bnVsbD9GLmtleTpUKTtGLnR5cGU9PT1Ubj8oRi5wYXRjaEZsYWcmMTI4JiZQKyssUz1TLmNvbmNhdChfaShGLmNoaWxkcmVuLGMsSykpKTooY3x8Ri50eXBlIT09R3IpJiZTLnB1c2goSyE9bnVsbD9sbihGLHtrZXk6S30pOkYpfWlmKFA+MSlmb3IodmFyIFc9MDtXPFMubGVuZ3RoO1crKylTW1ddLnBhdGNoRmxhZz0tMjtyZXR1cm4gU31mdW5jdGlvbiBIbyhvLGMpe3JldHVybiBfLmlzRnVuY3Rpb24obyk/KCgpPT5fLmV4dGVuZCh7bmFtZTpvLm5hbWV9LGMse3NldHVwOm99KSkoKTpvfXZhciBOaT1vPT4hIW8udHlwZS5fX2FzeW5jTG9hZGVyO2Z1bmN0aW9uIGJpKG8pe18uaXNGdW5jdGlvbihvKSYmKG89e2xvYWRlcjpvfSk7dmFye2xvYWRlcjpjLGxvYWRpbmdDb21wb25lbnQ6dixlcnJvckNvbXBvbmVudDpTLGRlbGF5OlA9MjAwLHRpbWVvdXQ6VCxzdXNwZW5zaWJsZTpGPSEwLG9uRXJyb3I6S309byxXPW51bGwsaWUsUmU9MCxXZT0oKT0+KFJlKyssVz1udWxsLGVlKCkpLGVlPSgpPT57dmFyIEJlO3JldHVybiBXfHwoQmU9Vz1jKCkuY2F0Y2goWmU9PntpZihaZT1aZSBpbnN0YW5jZW9mIEVycm9yP1plOm5ldyBFcnJvcihTdHJpbmcoWmUpKSxLKXJldHVybiBuZXcgUHJvbWlzZSgoRXQsbXQpPT57dmFyIFd0PSgpPT5FdChXZSgpKSxHdD0oKT0+bXQoWmUpO0soWmUsV3QsR3QsUmUrMSl9KTt0aHJvdyBaZX0pLnRoZW4oWmU9PkJlIT09VyYmVz9XOihaZSYmKFplLl9fZXNNb2R1bGV8fFplW1N5bWJvbC50b1N0cmluZ1RhZ109PT0iTW9kdWxlIikmJihaZT1aZS5kZWZhdWx0KSxpZT1aZSxaZSkpKX07cmV0dXJuIEhvKHtuYW1lOiJBc3luY0NvbXBvbmVudFdyYXBwZXIiLF9fYXN5bmNMb2FkZXI6ZWUsZ2V0IF9fYXN5bmNSZXNvbHZlZCgpe3JldHVybiBpZX0sc2V0dXAoKXt2YXIgQmU9RW47aWYoaWUpcmV0dXJuKCk9PklpKGllLEJlKTt2YXIgWmU9R3Q9PntXPW51bGwsR24oR3QsQmUsMTMpfTtpZihGJiZCZS5zdXNwZW5zZXx8aC5pc0luU1NSQ29tcG9uZW50U2V0dXApcmV0dXJuIGVlKCkudGhlbihHdD0+KCk9PklpKEd0LEJlKSkuY2F0Y2goR3Q9PihaZShHdCksKCk9PlM/eWUoUyx7ZXJyb3I6R3R9KTpudWxsKSk7dmFyIEV0PUkucmVmKCExKSxtdD1JLnJlZigpLFd0PUkucmVmKCEhUCk7cmV0dXJuIFAmJnNldFRpbWVvdXQoKCk9PntXdC52YWx1ZT0hMX0sUCksVCE9bnVsbCYmc2V0VGltZW91dCgoKT0+e2lmKCFFdC52YWx1ZSYmIW10LnZhbHVlKXt2YXIgR3Q9bmV3IEVycm9yKCJBc3luYyBjb21wb25lbnQgdGltZWQgb3V0IGFmdGVyICIuY29uY2F0KFQsIm1zLiIpKTtaZShHdCksbXQudmFsdWU9R3R9fSxUKSxlZSgpLnRoZW4oKCk9PntFdC52YWx1ZT0hMCxCZS5wYXJlbnQmJkQoQmUucGFyZW50LnZub2RlKSYmKEJlLnBhcmVudC5lZmZlY3QuZGlydHk9ITAsZXQoQmUucGFyZW50LnVwZGF0ZSkpfSkuY2F0Y2goR3Q9PntaZShHdCksbXQudmFsdWU9R3R9KSwoKT0+e2lmKEV0LnZhbHVlJiZpZSlyZXR1cm4gSWkoaWUsQmUpO2lmKG10LnZhbHVlJiZTKXJldHVybiB5ZShTLHtlcnJvcjptdC52YWx1ZX0pO2lmKHYmJiFXdC52YWx1ZSlyZXR1cm4geWUodil9fX0pfWZ1bmN0aW9uIElpKG8sYyl7dmFye3JlZjp2LHByb3BzOlMsY2hpbGRyZW46UCxjZTpUfT1jLnZub2RlLEY9eWUobyxTLFApO3JldHVybiBGLnJlZj12LEYuY2U9VCxkZWxldGUgYy52bm9kZS5jZSxGfXZhciBEPW89Pm8udHlwZS5fX2lzS2VlcEFsaXZlLHo9e25hbWU6IktlZXBBbGl2ZSIsX19pc0tlZXBBbGl2ZTohMCxwcm9wczp7aW5jbHVkZTpbU3RyaW5nLFJlZ0V4cCxBcnJheV0sZXhjbHVkZTpbU3RyaW5nLFJlZ0V4cCxBcnJheV0sbWF4OltTdHJpbmcsTnVtYmVyXX0sc2V0dXAobyxjKXt2YXJ7c2xvdHM6dn09YyxTPVNhKCksUD1TLmN0eDtpZighUC5yZW5kZXJlcilyZXR1cm4oKT0+e3ZhciBmZT12LmRlZmF1bHQmJnYuZGVmYXVsdCgpO3JldHVybiBmZSYmZmUubGVuZ3RoPT09MT9mZVswXTpmZX07dmFyIFQ9bmV3IE1hcCxGPW5ldyBTZXQsSz1udWxsLFc9Uy5zdXNwZW5zZSx7cmVuZGVyZXI6e3A6aWUsbTpSZSx1bTpXZSxvOntjcmVhdGVFbGVtZW50OmVlfX19PVAsQmU9ZWUoImRpdiIpO1AuYWN0aXZhdGU9KGZlLHhlLHdlLHplLGx0KT0+e3ZhciBydD1mZS5jb21wb25lbnQ7UmUoZmUseGUsd2UsMCxXKSxpZShydC52bm9kZSxmZSx4ZSx3ZSxydCxXLHplLGZlLnNsb3RTY29wZUlkcyxsdCkscm4oKCk9PntydC5pc0RlYWN0aXZhdGVkPSExLHJ0LmEmJl8uaW52b2tlQXJyYXlGbnMocnQuYSk7dmFyIGk9ZmUucHJvcHMmJmZlLnByb3BzLm9uVm5vZGVNb3VudGVkO2kmJiRuKGkscnQucGFyZW50LGZlKX0sVyl9LFAuZGVhY3RpdmF0ZT1mZT0+e3ZhciB4ZT1mZS5jb21wb25lbnQ7UmUoZmUsQmUsbnVsbCwxLFcpLHJuKCgpPT57eGUuZGEmJl8uaW52b2tlQXJyYXlGbnMoeGUuZGEpO3ZhciB3ZT1mZS5wcm9wcyYmZmUucHJvcHMub25Wbm9kZVVubW91bnRlZDt3ZSYmJG4od2UseGUucGFyZW50LGZlKSx4ZS5pc0RlYWN0aXZhdGVkPSEwfSxXKX07ZnVuY3Rpb24gWmUoZmUpe1RyKGZlKSxXZShmZSxTLFcsITApfWZ1bmN0aW9uIEV0KGZlKXtULmZvckVhY2goKHhlLHdlKT0+e3ZhciB6ZT1RaSh4ZS50eXBlKTt6ZSYmKCFmZXx8IWZlKHplKSkmJm10KHdlKX0pfWZ1bmN0aW9uIG10KGZlKXt2YXIgeGU9VC5nZXQoZmUpOyFLfHwhZWkoeGUsSyk/WmUoeGUpOksmJlRyKEspLFQuZGVsZXRlKGZlKSxGLmRlbGV0ZShmZSl9S2koKCk9PltvLmluY2x1ZGUsby5leGNsdWRlXSxmZT0+e3Zhclt4ZSx3ZV09ZmU7eGUmJkV0KHplPT5IZSh4ZSx6ZSkpLHdlJiZFdCh6ZT0+IUhlKHdlLHplKSl9LHtmbHVzaDoicG9zdCIsZGVlcDohMH0pO3ZhciBXdD1udWxsLEd0PSgpPT57V3QhPW51bGwmJlQuc2V0KFd0LGtpKFMuc3ViVHJlZSkpfTtyZXR1cm4gZm8oR3QpLGNpKEd0KSxqbygoKT0+e1QuZm9yRWFjaChmZT0+e3ZhcntzdWJUcmVlOnhlLHN1c3BlbnNlOndlfT1TLHplPWtpKHhlKTtpZihmZS50eXBlPT09emUudHlwZSYmZmUua2V5PT09emUua2V5KXtUcih6ZSk7dmFyIGx0PXplLmNvbXBvbmVudC5kYTtsdCYmcm4obHQsd2UpO3JldHVybn1aZShmZSl9KX0pLCgpPT57aWYoV3Q9bnVsbCwhdi5kZWZhdWx0KXJldHVybiBudWxsO3ZhciBmZT12LmRlZmF1bHQoKSx4ZT1mZVswXTtpZihmZS5sZW5ndGg+MSlyZXR1cm4gSz1udWxsLGZlO2lmKCFmaSh4ZSl8fCEoeGUuc2hhcGVGbGFnJjQpJiYhKHhlLnNoYXBlRmxhZyYxMjgpKXJldHVybiBLPW51bGwseGU7dmFyIHdlPWtpKHhlKSx6ZT13ZS50eXBlLGx0PVFpKE5pKHdlKT93ZS50eXBlLl9fYXN5bmNSZXNvbHZlZHx8e306emUpLHtpbmNsdWRlOnJ0LGV4Y2x1ZGU6aSxtYXg6bH09bztpZihydCYmKCFsdHx8IUhlKHJ0LGx0KSl8fGkmJmx0JiZIZShpLGx0KSlyZXR1cm4gSz13ZSx4ZTt2YXIgZD13ZS5rZXk9PW51bGw/emU6d2Uua2V5LG09VC5nZXQoZCk7cmV0dXJuIHdlLmVsJiYod2U9bG4od2UpLHhlLnNoYXBlRmxhZyYxMjgmJih4ZS5zc0NvbnRlbnQ9d2UpKSxXdD1kLG0/KHdlLmVsPW0uZWwsd2UuY29tcG9uZW50PW0uY29tcG9uZW50LHdlLnRyYW5zaXRpb24mJmNvKHdlLHdlLnRyYW5zaXRpb24pLHdlLnNoYXBlRmxhZ3w9NTEyLEYuZGVsZXRlKGQpLEYuYWRkKGQpKTooRi5hZGQoZCksbCYmRi5zaXplPnBhcnNlSW50KGwsMTApJiZtdChGLnZhbHVlcygpLm5leHQoKS52YWx1ZSkpLHdlLnNoYXBlRmxhZ3w9MjU2LEs9d2UsUGkoeGUudHlwZSk/eGU6d2V9fX0sbGU9ejtmdW5jdGlvbiBIZShvLGMpe3JldHVybiBfLmlzQXJyYXkobyk/by5zb21lKHY9PkhlKHYsYykpOl8uaXNTdHJpbmcobyk/by5zcGxpdCgiLCIpLmluY2x1ZGVzKGMpOl8uaXNSZWdFeHAobyk/by50ZXN0KGMpOiExfWZ1bmN0aW9uIGplKG8sYyl7cWUobywiYSIsYyl9ZnVuY3Rpb24gZHQobyxjKXtxZShvLCJkYSIsYyl9ZnVuY3Rpb24gcWUobyxjKXt2YXIgdj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06RW4sUz1vLl9fd2RjfHwoby5fX3dkYz0oKT0+e2Zvcih2YXIgVD12O1Q7KXtpZihULmlzRGVhY3RpdmF0ZWQpcmV0dXJuO1Q9VC5wYXJlbnR9cmV0dXJuIG8oKX0pO2lmKE9yKGMsUyx2KSx2KWZvcih2YXIgUD12LnBhcmVudDtQJiZQLnBhcmVudDspRChQLnBhcmVudC52bm9kZSkmJm50KFMsYyx2LFApLFA9UC5wYXJlbnR9ZnVuY3Rpb24gbnQobyxjLHYsUyl7dmFyIFA9T3IoYyxvLFMsITApO0ppKCgpPT57Xy5yZW1vdmUoU1tjXSxQKX0sdil9ZnVuY3Rpb24gVHIobyl7by5zaGFwZUZsYWcmPX4yNTYsby5zaGFwZUZsYWcmPX41MTJ9ZnVuY3Rpb24ga2kobyl7cmV0dXJuIG8uc2hhcGVGbGFnJjEyOD9vLnNzQ29udGVudDpvfWZ1bmN0aW9uIE9yKG8sYyl7dmFyIHY9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOkVuLFM9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiExO2lmKHYpe2lmKFNlLmlzUm9vdEhvb2sobykmJnYhPT12LnJvb3QmJih2PXYucm9vdCxTZS5pc1Jvb3RJbW1lZGlhdGVIb29rKG8pKSl7dmFyIFA9di5wcm94eTtTbihjLmJpbmQoUCksdixvLFNlLk9OX0xPQUQ9PT1vP1tQLiRwYWdlLm9wdGlvbnNdOltdKX12YXIgVD12W29dfHwodltvXT1bXSksRj1jLl9fd2VofHwoYy5fX3dlaD1mdW5jdGlvbigpe2lmKCF2LmlzVW5tb3VudGVkKXtJLnBhdXNlVHJhY2tpbmcoKTtmb3IodmFyIEs9RGkodiksVz1hcmd1bWVudHMubGVuZ3RoLGllPW5ldyBBcnJheShXKSxSZT0wO1JlPFc7UmUrKylpZVtSZV09YXJndW1lbnRzW1JlXTt2YXIgV2U9U24oYyx2LG8saWUpO3JldHVybiBLKCksSS5yZXNldFRyYWNraW5nKCksV2V9fSk7cmV0dXJuIFM/VC51bnNoaWZ0KEYpOlQucHVzaChGKSxGfX12YXIgUHI9bz0+ZnVuY3Rpb24oYyl7dmFyIHY9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOkVuO3JldHVybighaC5pc0luU1NSQ29tcG9uZW50U2V0dXB8fG89PT0ic3AiKSYmT3IobyxmdW5jdGlvbigpe3JldHVybiBjKC4uLmFyZ3VtZW50cyl9LHYpfSx1bz1QcigiYm0iKSxmbz1QcigibSIpLE9vPVByKCJidSIpLGNpPVByKCJ1Iiksam89UHIoImJ1bSIpLEppPVByKCJ1bSIpLGthPVByKCJzcCIpLG9lPVByKCJydGciKSxZPVByKCJydGMiKTtmdW5jdGlvbiBhZShvKXt2YXIgYz1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06RW47T3IoImVjIixvLGMpfWZ1bmN0aW9uIE1lKG8sYyx2LFMpe3ZhciBQLFQ9diYmdltTXTtpZihfLmlzQXJyYXkobyl8fF8uaXNTdHJpbmcobykpe1A9bmV3IEFycmF5KG8ubGVuZ3RoKTtmb3IodmFyIEY9MCxLPW8ubGVuZ3RoO0Y8SztGKyspUFtGXT1jKG9bRl0sRix2b2lkIDAsVCYmVFtGXSl9ZWxzZSBpZih0eXBlb2Ygbz09Im51bWJlciIpe1A9bmV3IEFycmF5KG8pO2Zvcih2YXIgVz0wO1c8bztXKyspUFtXXT1jKFcrMSxXLHZvaWQgMCxUJiZUW1ddKX1lbHNlIGlmKF8uaXNPYmplY3QobykpaWYob1tTeW1ib2wuaXRlcmF0b3JdKVA9QXJyYXkuZnJvbShvLChCZSxaZSk9PmMoQmUsWmUsdm9pZCAwLFQmJlRbWmVdKSk7ZWxzZXt2YXIgaWU9T2JqZWN0LmtleXMobyk7UD1uZXcgQXJyYXkoaWUubGVuZ3RoKTtmb3IodmFyIFJlPTAsV2U9aWUubGVuZ3RoO1JlPFdlO1JlKyspe3ZhciBlZT1pZVtSZV07UFtSZV09YyhvW2VlXSxlZSxSZSxUJiZUW1JlXSl9fWVsc2UgUD1bXTtyZXR1cm4gdiYmKHZbU109UCksUH1mdW5jdGlvbiB1dChvLGMpe2Zvcih2YXIgdj1mdW5jdGlvbihQKXt2YXIgVD1jW1BdO2lmKF8uaXNBcnJheShUKSlmb3IodmFyIEY9MDtGPFQubGVuZ3RoO0YrKylvW1RbRl0ubmFtZV09VFtGXS5mbjtlbHNlIFQmJihvW1QubmFtZV09VC5rZXk/ZnVuY3Rpb24oKXt2YXIgSz1ULmZuKC4uLmFyZ3VtZW50cyk7cmV0dXJuIEsmJihLLmtleT1ULmtleSksS306VC5mbil9LFM9MDtTPGMubGVuZ3RoO1MrKyl2KFMpO3JldHVybiBvfWZ1bmN0aW9uIGhuKG8sYyl7dmFyIHY9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOnt9LFM9YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDAsUD1hcmd1bWVudHMubGVuZ3RoPjQ/YXJndW1lbnRzWzRdOnZvaWQgMDtpZih4bi5pc0NFfHx4bi5wYXJlbnQmJk5pKHhuLnBhcmVudCkmJnhuLnBhcmVudC5pc0NFKXJldHVybiBjIT09ImRlZmF1bHQiJiYodi5uYW1lPWMpLHllKCJzbG90Iix2LFMmJlMoKSk7dmFyIFQ9b1tjXTtUJiZULl9jJiYoVC5fZD0hMSksaHIoKTt2YXIgRj1UJiZwcihUKHYpKSxLPW1yKFRuLHtrZXk6di5rZXl8fEYmJkYua2V5fHwiXyIuY29uY2F0KGMpfSxGfHwoUz9TKCk6W10pLEYmJm8uXz09PTE/NjQ6LTIpO3JldHVybiFQJiZLLnNjb3BlSWQmJihLLnNsb3RTY29wZUlkcz1bSy5zY29wZUlkKyItcyJdKSxUJiZULl9jJiYoVC5fZD0hMCksS31mdW5jdGlvbiBwcihvKXtyZXR1cm4gby5zb21lKGM9PmZpKGMpPyEoYy50eXBlPT09R3J8fGMudHlwZT09PVRuJiYhcHIoYy5jaGlsZHJlbikpOiEwKT9vOm51bGx9ZnVuY3Rpb24gQW4obyxjKXt2YXIgdj17fTtmb3IodmFyIFMgaW4gbyl2W2MmJi9bQS1aXS8udGVzdChTKT8ib246Ii5jb25jYXQoUyk6Xy50b0hhbmRsZXJLZXkoUyldPW9bU107cmV0dXJuIHZ9dmFyIHpuPW89Pm8/bXMobyk/JHMobyl8fG8ucHJveHk6em4oby5wYXJlbnQpOm51bGwsTnI9Xy5leHRlbmQoT2JqZWN0LmNyZWF0ZShudWxsKSx7JDpvPT5vLCRlbDpvPT5vLnZub2RlLmVsLCRkYXRhOm89Pm8uZGF0YSwkcHJvcHM6bz0+by5wcm9wcywkYXR0cnM6bz0+by5hdHRycywkc2xvdHM6bz0+by5zbG90cywkcmVmczpvPT5vLnJlZnMsJHBhcmVudDpvPT56bihvLnBhcmVudCksJHJvb3Q6bz0+em4oby5yb290KSwkZW1pdDpvPT5vLmVtaXQsJG9wdGlvbnM6bz0+TGEobyksJGZvcmNlVXBkYXRlOm89Pm8uZnx8KG8uZj0oKT0+e28uZWZmZWN0LmRpcnR5PSEwLGV0KG8udXBkYXRlKX0pLCRuZXh0VGljazpvPT5vLm58fChvLm49anIuYmluZChvLnByb3h5KSksJHdhdGNoOm89Pm1pLmJpbmQobyl9KSxobz0obyxjKT0+byE9PV8uRU1QVFlfT0JKJiYhby5fX2lzU2NyaXB0U2V0dXAmJl8uaGFzT3duKG8sYyksdnI9e2dldChvLGMpe3ZhcntfOnZ9PW8se2N0eDpTLHNldHVwU3RhdGU6UCxkYXRhOlQscHJvcHM6RixhY2Nlc3NDYWNoZTpLLHR5cGU6VyxhcHBDb250ZXh0OmllfT12LFJlO2lmKGNbMF0hPT0iJCIpe3ZhciBXZT1LW2NdO2lmKFdlIT09dm9pZCAwKXN3aXRjaChXZSl7Y2FzZSAxOnJldHVybiBQW2NdO2Nhc2UgMjpyZXR1cm4gVFtjXTtjYXNlIDQ6cmV0dXJuIFNbY107Y2FzZSAzOnJldHVybiBGW2NdfWVsc2V7aWYoaG8oUCxjKSlyZXR1cm4gS1tjXT0xLFBbY107aWYoVCE9PV8uRU1QVFlfT0JKJiZfLmhhc093bihULGMpKXJldHVybiBLW2NdPTIsVFtjXTtpZigoUmU9di5wcm9wc09wdGlvbnNbMF0pJiZfLmhhc093bihSZSxjKSlyZXR1cm4gS1tjXT0zLEZbY107aWYoUyE9PV8uRU1QVFlfT0JKJiZfLmhhc093bihTLGMpKXJldHVybiBLW2NdPTQsU1tjXTt6byYmKEtbY109MCl9fXZhciBlZT1OcltjXSxCZSxaZTtpZihlZSlyZXR1cm4gYz09PSIkYXR0cnMiJiZJLnRyYWNrKHYsImdldCIsYyksZWUodik7aWYoKEJlPVcuX19jc3NNb2R1bGVzKSYmKEJlPUJlW2NdKSlyZXR1cm4gQmU7aWYoUyE9PV8uRU1QVFlfT0JKJiZfLmhhc093bihTLGMpKXJldHVybiBLW2NdPTQsU1tjXTtpZihaZT1pZS5jb25maWcuZ2xvYmFsUHJvcGVydGllcyxfLmhhc093bihaZSxjKSlyZXR1cm4gWmVbY119LHNldChvLGMsdil7dmFye186U309byx7ZGF0YTpQLHNldHVwU3RhdGU6VCxjdHg6Rn09UztyZXR1cm4gaG8oVCxjKT8oVFtjXT12LCEwKTpQIT09Xy5FTVBUWV9PQkomJl8uaGFzT3duKFAsYyk/KFBbY109diwhMCk6Xy5oYXNPd24oUy5wcm9wcyxjKXx8Y1swXT09PSIkIiYmYy5zbGljZSgxKWluIFM/ITE6KEZbY109diwhMCl9LGhhcyhvLGMpe3ZhcntfOntkYXRhOnYsc2V0dXBTdGF0ZTpTLGFjY2Vzc0NhY2hlOlAsY3R4OlQsYXBwQ29udGV4dDpGLHByb3BzT3B0aW9uczpLfX09byxXO3JldHVybiEhUFtjXXx8diE9PV8uRU1QVFlfT0JKJiZfLmhhc093bih2LGMpfHxobyhTLGMpfHwoVz1LWzBdKSYmXy5oYXNPd24oVyxjKXx8Xy5oYXNPd24oVCxjKXx8Xy5oYXNPd24oTnIsYyl8fF8uaGFzT3duKEYuY29uZmlnLmdsb2JhbFByb3BlcnRpZXMsYyl9LGRlZmluZVByb3BlcnR5KG8sYyx2KXtyZXR1cm4gdi5nZXQhPW51bGw/by5fLmFjY2Vzc0NhY2hlW2NdPTA6Xy5oYXNPd24odiwidmFsdWUiKSYmdGhpcy5zZXQobyxjLHYudmFsdWUsbnVsbCksUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShvLGMsdil9fSxkYT1fLmV4dGVuZCh7fSx2cix7Z2V0KG8sYyl7aWYoYyE9PVN5bWJvbC51bnNjb3BhYmxlcylyZXR1cm4gdnIuZ2V0KG8sYyxvKX0saGFzKG8sYyl7dmFyIHY9Y1swXSE9PSJfIiYmIV8uaXNHbG9iYWxseUFsbG93ZWQoYyk7cmV0dXJuIHZ9fSk7ZnVuY3Rpb24gUG8oKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBSYSgpe3JldHVybiBudWxsfWZ1bmN0aW9uIGhhKG8pe31mdW5jdGlvbiBOcyhvKXt9ZnVuY3Rpb24gWWEoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBJcygpe31mdW5jdGlvbiBubChvLGMpe3JldHVybiBudWxsfWZ1bmN0aW9uIHRyKCl7cmV0dXJuIHhhKCkuc2xvdHN9ZnVuY3Rpb24gcmwoKXtyZXR1cm4geGEoKS5hdHRyc31mdW5jdGlvbiB4YSgpe3ZhciBvPVNhKCk7cmV0dXJuIG8uc2V0dXBDb250ZXh0fHwoby5zZXR1cENvbnRleHQ9eXMobykpfWZ1bmN0aW9uIHlpKG8pe3JldHVybiBfLmlzQXJyYXkobyk/by5yZWR1Y2UoKGMsdik9PihjW3ZdPW51bGwsYykse30pOm99ZnVuY3Rpb24ga3MobyxjKXt2YXIgdj15aShvKTtmb3IodmFyIFMgaW4gYylpZighUy5zdGFydHNXaXRoKCJfX3NraXAiKSl7dmFyIFA9dltTXTtQP18uaXNBcnJheShQKXx8Xy5pc0Z1bmN0aW9uKFApP1A9dltTXT17dHlwZTpQLGRlZmF1bHQ6Y1tTXX06UC5kZWZhdWx0PWNbU106UD09PW51bGwmJihQPXZbU109e2RlZmF1bHQ6Y1tTXX0pLFAmJmNbIl9fc2tpcF8iLmNvbmNhdChTKV0mJihQLnNraXBGYWN0b3J5PSEwKX1yZXR1cm4gdn1mdW5jdGlvbiBpbChvLGMpe3JldHVybiFvfHwhYz9vfHxjOl8uaXNBcnJheShvKSYmXy5pc0FycmF5KGMpP28uY29uY2F0KGMpOl8uZXh0ZW5kKHt9LHlpKG8pLHlpKGMpKX1mdW5jdGlvbiBSaShvLGMpe3ZhciB2PXt9LFM9ZnVuY3Rpb24oVCl7Yy5pbmNsdWRlcyhUKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KHYsVCx7ZW51bWVyYWJsZTohMCxnZXQ6KCk9Pm9bVF19KX07Zm9yKHZhciBQIGluIG8pUyhQKTtyZXR1cm4gdn1mdW5jdGlvbiBnYShvKXt2YXIgYz1TYSgpLHY9bygpO3JldHVybiBxbygpLF8uaXNQcm9taXNlKHYpJiYodj12LmNhdGNoKFM9Pnt0aHJvdyBEaShjKSxTfSkpLFt2LCgpPT5EaShjKV19dmFyIHpvPSEwO2Z1bmN0aW9uIFJzKG8pe3ZhciBjPUxhKG8pLHY9by5wcm94eSxTPW8uY3R4O3pvPSExLGMuYmVmb3JlQ3JlYXRlJiZCYShjLmJlZm9yZUNyZWF0ZSxvLCJiYyIpO3ZhcntkYXRhOlAsY29tcHV0ZWQ6VCxtZXRob2RzOkYsd2F0Y2g6Syxwcm92aWRlOlcsaW5qZWN0OmllLGNyZWF0ZWQ6UmUsYmVmb3JlTW91bnQ6V2UsbW91bnRlZDplZSxiZWZvcmVVcGRhdGU6QmUsdXBkYXRlZDpaZSxhY3RpdmF0ZWQ6RXQsZGVhY3RpdmF0ZWQ6bXQsYmVmb3JlRGVzdHJveTpXdCxiZWZvcmVVbm1vdW50Okd0LGRlc3Ryb3llZDpmZSx1bm1vdW50ZWQ6eGUscmVuZGVyOndlLHJlbmRlclRyYWNrZWQ6emUscmVuZGVyVHJpZ2dlcmVkOmx0LGVycm9yQ2FwdHVyZWQ6cnQsc2VydmVyUHJlZmV0Y2g6aSxleHBvc2U6bCxpbmhlcml0QXR0cnM6ZCxjb21wb25lbnRzOm0sZGlyZWN0aXZlczpBLGZpbHRlcnM6Q309YztpZihpZSYmeHMoaWUsUyksRilmb3IodmFyIGsgaW4gRil7dmFyIFY9RltrXTtfLmlzRnVuY3Rpb24oVikmJihTW2tdPVYuYmluZCh2KSl9aWYoUCl7dmFyIFU9UC5jYWxsKHYsdik7Xy5pc09iamVjdChVKSYmKG8uZGF0YT1JLnJlYWN0aXZlKFUpKX1pZih6bz0hMCxUKXt2YXIgWj1mdW5jdGlvbihpdCl7dmFyIEl0PVRbaXRdLEN0PV8uaXNGdW5jdGlvbihJdCk/SXQuYmluZCh2LHYpOl8uaXNGdW5jdGlvbihJdC5nZXQpP0l0LmdldC5iaW5kKHYsdik6Xy5OT09QLGNlPSFfLmlzRnVuY3Rpb24oSXQpJiZfLmlzRnVuY3Rpb24oSXQuc2V0KT9JdC5zZXQuYmluZCh2KTpfLk5PT1AsTmU9ZXMoe2dldDpDdCxzZXQ6Y2V9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoUyxpdCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OigpPT5OZS52YWx1ZSxzZXQ6Q2U9Pk5lLnZhbHVlPUNlfSl9O2Zvcih2YXIgZGUgaW4gVClaKGRlKX1pZihLKWZvcih2YXIgdmUgaW4gSylwYShLW3ZlXSxTLHYsdmUpO2lmKFcpe3ZhciB0ZT1fLmlzRnVuY3Rpb24oVyk/Vy5jYWxsKHYpOlc7UmVmbGVjdC5vd25LZXlzKHRlKS5mb3JFYWNoKGl0PT57S2EoaXQsdGVbaXRdKX0pfVJlJiZCYShSZSxvLCJjIik7ZnVuY3Rpb24gbWUoaXQsSXQpe18uaXNBcnJheShJdCk/SXQuZm9yRWFjaChDdD0+aXQoQ3QuYmluZCh2KSkpOkl0JiZpdChJdC5iaW5kKHYpKX1pZihtZSh1byxXZSksbWUoZm8sZWUpLG1lKE9vLEJlKSxtZShjaSxaZSksbWUoamUsRXQpLG1lKGR0LG10KSxtZShhZSxydCksbWUoWSx6ZSksbWUob2UsbHQpLG1lKGpvLEd0KSxtZShKaSx4ZSksbWUoa2EsaSksXy5pc0FycmF5KGwpKWlmKGwubGVuZ3RoKXt2YXIgSmU9by5leHBvc2VkfHwoby5leHBvc2VkPXt9KTtsLmZvckVhY2goaXQ9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoSmUsaXQse2dldDooKT0+dltpdF0sc2V0Okl0PT52W2l0XT1JdH0pfSl9ZWxzZSBvLmV4cG9zZWR8fChvLmV4cG9zZWQ9e30pO3dlJiZvLnJlbmRlcj09PV8uTk9PUCYmKG8ucmVuZGVyPXdlKSxkIT1udWxsJiYoby5pbmhlcml0QXR0cnM9ZCksbSYmKG8uY29tcG9uZW50cz1tKSxBJiYoby5kaXJlY3RpdmVzPUEpO3ZhciBjdD1vLmFwcENvbnRleHQuY29uZmlnLmdsb2JhbFByb3BlcnRpZXMuJGFwcGx5T3B0aW9ucztjdCYmY3QoYyxvLHYpfWZ1bmN0aW9uIHhzKG8sYyl7Xy5pc0FycmF5KG8pJiYobz12YShvKSk7dmFyIHY9ZnVuY3Rpb24oUCl7dmFyIFQ9b1tQXSxGPXZvaWQgMDtfLmlzT2JqZWN0KFQpPyJkZWZhdWx0ImluIFQ/Rj1KYShULmZyb218fFAsVC5kZWZhdWx0LCEwKTpGPUphKFQuZnJvbXx8UCk6Rj1KYShUKSxJLmlzUmVmKEYpP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLFAse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDooKT0+Ri52YWx1ZSxzZXQ6Sz0+Ri52YWx1ZT1LfSk6Y1tQXT1GfTtmb3IodmFyIFMgaW4gbyl2KFMpfWZ1bmN0aW9uIEJhKG8sYyx2KXtTbihfLmlzQXJyYXkobyk/by5tYXAoUz0+Uy5iaW5kKGMucHJveHkpKTpvLmJpbmQoYy5wcm94eSksYyx2KX1mdW5jdGlvbiBwYShvLGMsdixTKXt2YXIgUD1TLmluY2x1ZGVzKCIuIik/U3IodixTKTooKT0+dltTXTtpZihfLmlzU3RyaW5nKG8pKXt2YXIgVD1jW29dO18uaXNGdW5jdGlvbihUKSYmS2koUCxUKX1lbHNlIGlmKF8uaXNGdW5jdGlvbihvKSlLaShQLG8uYmluZCh2KSk7ZWxzZSBpZihfLmlzT2JqZWN0KG8pKWlmKF8uaXNBcnJheShvKSlvLmZvckVhY2goSz0+cGEoSyxjLHYsUykpO2Vsc2V7dmFyIEY9Xy5pc0Z1bmN0aW9uKG8uaGFuZGxlcik/by5oYW5kbGVyLmJpbmQodik6Y1tvLmhhbmRsZXJdO18uaXNGdW5jdGlvbihGKSYmS2koUCxGLG8pfX1mdW5jdGlvbiBMYShvKXt2YXIgYz1vLnR5cGUse21peGluczp2LGV4dGVuZHM6U309Yyx7bWl4aW5zOlAsb3B0aW9uc0NhY2hlOlQsY29uZmlnOntvcHRpb25NZXJnZVN0cmF0ZWdpZXM6Rn19PW8uYXBwQ29udGV4dCxLPVQuZ2V0KGMpLFc7cmV0dXJuIEs/Vz1LOiFQLmxlbmd0aCYmIXYmJiFTP1c9YzooVz17fSxQLmxlbmd0aCYmUC5mb3JFYWNoKGllPT5lYShXLGllLEYsITApKSxlYShXLGMsRikpLF8uaXNPYmplY3QoYykmJlQuc2V0KGMsVyksV31mdW5jdGlvbiBlYShvLGMsdil7dmFyIFM9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiExLHttaXhpbnM6UCxleHRlbmRzOlR9PWM7VCYmZWEobyxULHYsITApLFAmJlAuZm9yRWFjaChXPT5lYShvLFcsdiwhMCkpO2Zvcih2YXIgRiBpbiBjKWlmKCEoUyYmRj09PSJleHBvc2UiKSl7dmFyIEs9QnNbRl18fHYmJnZbRl07b1tGXT1LP0sob1tGXSxjW0ZdKTpjW0ZdfXJldHVybiBvfXZhciBCcz17ZGF0YTpkcyxwcm9wczpocyxlbWl0czpocyxtZXRob2RzOldvLGNvbXB1dGVkOldvLGJlZm9yZUNyZWF0ZTpXcixjcmVhdGVkOldyLGJlZm9yZU1vdW50OldyLG1vdW50ZWQ6V3IsYmVmb3JlVXBkYXRlOldyLHVwZGF0ZWQ6V3IsYmVmb3JlRGVzdHJveTpXcixiZWZvcmVVbm1vdW50OldyLGRlc3Ryb3llZDpXcix1bm1vdW50ZWQ6V3IsYWN0aXZhdGVkOldyLGRlYWN0aXZhdGVkOldyLGVycm9yQ2FwdHVyZWQ6V3Isc2VydmVyUHJlZmV0Y2g6V3IsY29tcG9uZW50czpXbyxkaXJlY3RpdmVzOldvLHdhdGNoOmdzLHByb3ZpZGU6ZHMsaW5qZWN0OnhpfTtmdW5jdGlvbiBkcyhvLGMpe3JldHVybiBjP28/ZnVuY3Rpb24oKXtyZXR1cm4gXy5leHRlbmQoXy5pc0Z1bmN0aW9uKG8pP28uY2FsbCh0aGlzLHRoaXMpOm8sXy5pc0Z1bmN0aW9uKGMpP2MuY2FsbCh0aGlzLHRoaXMpOmMpfTpjOm99ZnVuY3Rpb24geGkobyxjKXtyZXR1cm4gV28odmEobyksdmEoYykpfWZ1bmN0aW9uIHZhKG8pe2lmKF8uaXNBcnJheShvKSl7Zm9yKHZhciBjPXt9LHY9MDt2PG8ubGVuZ3RoO3YrKyljW29bdl1dPW9bdl07cmV0dXJuIGN9cmV0dXJuIG99ZnVuY3Rpb24gV3IobyxjKXtyZXR1cm4gbz9bLi4ubmV3IFNldChbXS5jb25jYXQobyxjKSldOmN9ZnVuY3Rpb24gV28obyxjKXtyZXR1cm4gbz9fLmV4dGVuZChPYmplY3QuY3JlYXRlKG51bGwpLG8sYyk6Y31mdW5jdGlvbiBocyhvLGMpe3JldHVybiBvP18uaXNBcnJheShvKSYmXy5pc0FycmF5KGMpP1suLi5uZXcgU2V0KFsuLi5vLC4uLmNdKV06Xy5leHRlbmQoT2JqZWN0LmNyZWF0ZShudWxsKSx5aShvKSx5aShjIT1udWxsP2M6e30pKTpjfWZ1bmN0aW9uIGdzKG8sYyl7aWYoIW8pcmV0dXJuIGM7aWYoIWMpcmV0dXJuIG87dmFyIHY9Xy5leHRlbmQoT2JqZWN0LmNyZWF0ZShudWxsKSxvKTtmb3IodmFyIFMgaW4gYyl2W1NdPVdyKG9bU10sY1tTXSk7cmV0dXJuIHZ9ZnVuY3Rpb24gSXIoKXtyZXR1cm57YXBwOm51bGwsY29uZmlnOntpc05hdGl2ZVRhZzpfLk5PLHBlcmZvcm1hbmNlOiExLGdsb2JhbFByb3BlcnRpZXM6e30sb3B0aW9uTWVyZ2VTdHJhdGVnaWVzOnt9LGVycm9ySGFuZGxlcjp2b2lkIDAsd2FybkhhbmRsZXI6dm9pZCAwLGNvbXBpbGVyT3B0aW9uczp7fX0sbWl4aW5zOltdLGNvbXBvbmVudHM6e30sZGlyZWN0aXZlczp7fSxwcm92aWRlczpPYmplY3QuY3JlYXRlKG51bGwpLG9wdGlvbnNDYWNoZTpuZXcgV2Vha01hcCxwcm9wc0NhY2hlOm5ldyBXZWFrTWFwLGVtaXRzQ2FjaGU6bmV3IFdlYWtNYXB9fXZhciBnbz0wO2Z1bmN0aW9uIE1hKG8sYyl7cmV0dXJuIGZ1bmN0aW9uKFMpe3ZhciBQPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpudWxsO18uaXNGdW5jdGlvbihTKXx8KFM9Xy5leHRlbmQoe30sUykpLFAhPW51bGwmJiFfLmlzT2JqZWN0KFApJiYoUD1udWxsKTt2YXIgVD1JcigpLEY9bmV3IFdlYWtTZXQsSz0hMSxXPVQuYXBwPXtfdWlkOmdvKyssX2NvbXBvbmVudDpTLF9wcm9wczpQLF9jb250YWluZXI6bnVsbCxfY29udGV4dDpULF9pbnN0YW5jZTpudWxsLHZlcnNpb246SHMsZ2V0IGNvbmZpZygpe3JldHVybiBULmNvbmZpZ30sc2V0IGNvbmZpZyhpZSl7fSx1c2UoaWUpe2Zvcih2YXIgUmU9YXJndW1lbnRzLmxlbmd0aCxXZT1uZXcgQXJyYXkoUmU+MT9SZS0xOjApLGVlPTE7ZWU8UmU7ZWUrKylXZVtlZS0xXT1hcmd1bWVudHNbZWVdO3JldHVybiBGLmhhcyhpZSl8fChpZSYmXy5pc0Z1bmN0aW9uKGllLmluc3RhbGwpPyhGLmFkZChpZSksaWUuaW5zdGFsbChXLC4uLldlKSk6Xy5pc0Z1bmN0aW9uKGllKSYmKEYuYWRkKGllKSxpZShXLC4uLldlKSkpLFd9LG1peGluKGllKXtyZXR1cm4gVC5taXhpbnMuaW5jbHVkZXMoaWUpfHxULm1peGlucy5wdXNoKGllKSxXfSxjb21wb25lbnQoaWUsUmUpe3JldHVybiBSZT8oVC5jb21wb25lbnRzW2llXT1SZSxXKTpULmNvbXBvbmVudHNbaWVdfSxkaXJlY3RpdmUoaWUsUmUpe3JldHVybiBSZT8oVC5kaXJlY3RpdmVzW2llXT1SZSxXKTpULmRpcmVjdGl2ZXNbaWVdfSxtb3VudChpZSxSZSxXZSl7aWYoIUspe3ZhciBlZT15ZShTLFApO3JldHVybiBlZS5hcHBDb250ZXh0PVQsV2U9PT0hMD9XZT0ic3ZnIjpXZT09PSExJiYoV2U9dm9pZCAwKSxSZSYmYz9jKGVlLGllKTpvKGVlLGllLFdlKSxLPSEwLFcuX2NvbnRhaW5lcj1pZSxpZS5fX3Z1ZV9hcHBfXz1XLFcuX2luc3RhbmNlPWVlLmNvbXBvbmVudCwkcyhlZS5jb21wb25lbnQpfHxlZS5jb21wb25lbnQucHJveHl9fSx1bm1vdW50KCl7SyYmKG8obnVsbCxXLl9jb250YWluZXIpLGRlbGV0ZSBXLl9jb250YWluZXIuX192dWVfYXBwX18pfSxwcm92aWRlKGllLFJlKXtyZXR1cm4gVC5wcm92aWRlc1tpZV09UmUsV30scnVuV2l0aENvbnRleHQoaWUpe3ZhciBSZT1tYTttYT1XO3RyeXtyZXR1cm4gaWUoKX1maW5hbGx5e21hPVJlfX19O3JldHVybiBXfX12YXIgbWE9bnVsbDtmdW5jdGlvbiBLYShvLGMpe2lmKEVuKXt2YXIgdj1Fbi5wcm92aWRlcyxTPUVuLnBhcmVudCYmRW4ucGFyZW50LnByb3ZpZGVzO1M9PT12JiYodj1Fbi5wcm92aWRlcz1PYmplY3QuY3JlYXRlKFMpKSx2W29dPWMsRW4udHlwZS5tcFR5cGU9PT0iYXBwIiYmRW4uYXBwQ29udGV4dC5hcHAucHJvdmlkZShvLGMpfX1mdW5jdGlvbiBKYShvLGMpe3ZhciB2PWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTohMSxTPUVufHx4bjtpZihTfHxtYSl7dmFyIFA9Uz9TLnBhcmVudD09bnVsbD9TLnZub2RlLmFwcENvbnRleHQmJlMudm5vZGUuYXBwQ29udGV4dC5wcm92aWRlczpTLnBhcmVudC5wcm92aWRlczptYS5fY29udGV4dC5wcm92aWRlcztpZihQJiZvIGluIFApcmV0dXJuIFBbb107aWYoYXJndW1lbnRzLmxlbmd0aD4xKXJldHVybiB2JiZfLmlzRnVuY3Rpb24oYyk/Yy5jYWxsKFMmJlMucHJveHkpOmN9fWZ1bmN0aW9uIGIoKXtyZXR1cm4hIShFbnx8eG58fG1hKX1mdW5jdGlvbiBMKG8sYyx2KXt2YXIgUz1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITEsUD17fSxUPXt9O18uZGVmKFQsdGksMSksby5wcm9wc0RlZmF1bHRzPU9iamVjdC5jcmVhdGUobnVsbCksSChvLGMsUCxUKTtmb3IodmFyIEYgaW4gby5wcm9wc09wdGlvbnNbMF0pRiBpbiBQfHwoUFtGXT12b2lkIDApO3Y/by5wcm9wcz1TP1A6SS5zaGFsbG93UmVhY3RpdmUoUCk6by50eXBlLnByb3BzP28ucHJvcHM9UDpvLnByb3BzPVQsby5hdHRycz1UfWZ1bmN0aW9uIGoobyxjLHYsUyl7dmFye3Byb3BzOlAsYXR0cnM6VCx2bm9kZTp7cGF0Y2hGbGFnOkZ9fT1vLEs9SS50b1JhdyhQKSxbV109by5wcm9wc09wdGlvbnMsaWU9ITE7aWYoKFN8fEY+MCkmJiEoRiYxNikpe2lmKEYmOClmb3IodmFyIFJlPW8udm5vZGUuZHluYW1pY1Byb3BzLFdlPTA7V2U8UmUubGVuZ3RoO1dlKyspe3ZhciBlZT1SZVtXZV07aWYoIWppKG8uZW1pdHNPcHRpb25zLGVlKSl7dmFyIEJlPWNbZWVdO2lmKFcpaWYoXy5oYXNPd24oVCxlZSkpQmUhPT1UW2VlXSYmKFRbZWVdPUJlLGllPSEwKTtlbHNle3ZhciBaZT1fLmNhbWVsaXplKGVlKTtQW1plXT1KKFcsSyxaZSxCZSxvLCExKX1lbHNlIEJlIT09VFtlZV0mJihUW2VlXT1CZSxpZT0hMCl9fX1lbHNle0gobyxjLFAsVCkmJihpZT0hMCk7dmFyIEV0O2Zvcih2YXIgbXQgaW4gSykoIWN8fCFfLmhhc093bihjLG10KSYmKChFdD1fLmh5cGhlbmF0ZShtdCkpPT09bXR8fCFfLmhhc093bihjLEV0KSkpJiYoVz92JiYodlttdF0hPT12b2lkIDB8fHZbRXRdIT09dm9pZCAwKSYmKFBbbXRdPUooVyxLLG10LHZvaWQgMCxvLCEwKSk6ZGVsZXRlIFBbbXRdKTtpZihUIT09Sylmb3IodmFyIFd0IGluIFQpKCFjfHwhXy5oYXNPd24oYyxXdCkmJiEwKSYmKGRlbGV0ZSBUW1d0XSxpZT0hMCl9aWUmJkkudHJpZ2dlcihvLCJzZXQiLCIkYXR0cnMiKX1mdW5jdGlvbiBIKG8sYyx2LFMpe3ZhcltQLFRdPW8ucHJvcHNPcHRpb25zLEY9ITEsSztpZihjKXtmb3IodmFyIFcgaW4gYylpZighXy5pc1Jlc2VydmVkUHJvcChXKSl7dmFyIGllPWNbV10sUmU9dm9pZCAwO1AmJl8uaGFzT3duKFAsUmU9Xy5jYW1lbGl6ZShXKSk/IVR8fCFULmluY2x1ZGVzKFJlKT92W1JlXT1pZTooS3x8KEs9e30pKVtSZV09aWU6amkoby5lbWl0c09wdGlvbnMsVyl8fCghKFcgaW4gUyl8fGllIT09U1tXXSkmJihTW1ddPWllLEY9ITApfX1pZihUKWZvcih2YXIgV2U9SS50b1Jhdyh2KSxlZT1LfHxfLkVNUFRZX09CSixCZT0wO0JlPFQubGVuZ3RoO0JlKyspe3ZhciBaZT1UW0JlXTt2W1plXT1KKFAsV2UsWmUsZWVbWmVdLG8sIV8uaGFzT3duKGVlLFplKSl9cmV0dXJuIEZ9ZnVuY3Rpb24gSihvLGMsdixTLFAsVCl7dmFyIEY9b1t2XTtpZihGIT1udWxsKXt2YXIgSz1fLmhhc093bihGLCJkZWZhdWx0Iik7aWYoSyYmUz09PXZvaWQgMCl7dmFyIFc9Ri5kZWZhdWx0O2lmKEYudHlwZSE9PUZ1bmN0aW9uJiYhRi5za2lwRmFjdG9yeSYmXy5pc0Z1bmN0aW9uKFcpKXt2YXJ7cHJvcHNEZWZhdWx0czppZX09UDtpZih2IGluIGllKVM9aWVbdl07ZWxzZXt2YXIgUmU9RGkoUCk7Uz1pZVt2XT1XLmNhbGwobnVsbCxjKSxSZSgpfX1lbHNlIFM9V31GWzBdJiYoVCYmIUs/Uz0hMTpGWzFdJiYoUz09PSIifHxTPT09Xy5oeXBoZW5hdGUodikpJiYoUz0hMCkpfXJldHVybiBTfWZ1bmN0aW9uIFgobyxjKXt2YXIgdj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITEsUz1jLnByb3BzQ2FjaGUsUD1TLmdldChvKTtpZihQKXJldHVybiBQO3ZhciBUPW8ucHJvcHMsRj17fSxLPVtdLFc9ITE7aWYoIV8uaXNGdW5jdGlvbihvKSl7dmFyIGllPWZlPT57Vz0hMDt2YXJbeGUsd2VdPVgoZmUsYywhMCk7Xy5leHRlbmQoRix4ZSksd2UmJksucHVzaCguLi53ZSl9OyF2JiZjLm1peGlucy5sZW5ndGgmJmMubWl4aW5zLmZvckVhY2goaWUpLG8uZXh0ZW5kcyYmaWUoby5leHRlbmRzKSxvLm1peGlucyYmby5taXhpbnMuZm9yRWFjaChpZSl9aWYoIVQmJiFXKXJldHVybiBfLmlzT2JqZWN0KG8pJiZTLnNldChvLF8uRU1QVFlfQVJSKSxfLkVNUFRZX0FSUjtpZihfLmlzQXJyYXkoVCkpZm9yKHZhciBSZT0wO1JlPFQubGVuZ3RoO1JlKyspe3ZhciBXZT1fLmNhbWVsaXplKFRbUmVdKTt1ZShXZSkmJihGW1dlXT1fLkVNUFRZX09CSil9ZWxzZSBpZihUKWZvcih2YXIgZWUgaW4gVCl7dmFyIEJlPV8uY2FtZWxpemUoZWUpO2lmKHVlKEJlKSl7dmFyIFplPVRbZWVdLEV0PUZbQmVdPV8uaXNBcnJheShaZSl8fF8uaXNGdW5jdGlvbihaZSk/e3R5cGU6WmV9Ol8uZXh0ZW5kKHt9LFplKTtpZihFdCl7dmFyIG10PURlKEJvb2xlYW4sRXQudHlwZSksV3Q9RGUoU3RyaW5nLEV0LnR5cGUpO0V0WzBdPW10Pi0xLEV0WzFdPVd0PDB8fG10PFd0LChtdD4tMXx8Xy5oYXNPd24oRXQsImRlZmF1bHQiKSkmJksucHVzaChCZSl9fX12YXIgR3Q9W0YsS107cmV0dXJuIF8uaXNPYmplY3QobykmJlMuc2V0KG8sR3QpLEd0fWZ1bmN0aW9uIHVlKG8pe3JldHVybiBvWzBdIT09IiQiJiYhXy5pc1Jlc2VydmVkUHJvcChvKX1mdW5jdGlvbiBfZShvKXtpZihvPT09bnVsbClyZXR1cm4ibnVsbCI7aWYodHlwZW9mIG89PSJmdW5jdGlvbiIpcmV0dXJuIG8ubmFtZXx8IiI7aWYodHlwZW9mIG89PSJvYmplY3QiKXt2YXIgYz1vLmNvbnN0cnVjdG9yJiZvLmNvbnN0cnVjdG9yLm5hbWU7cmV0dXJuIGN8fCIifXJldHVybiIifWZ1bmN0aW9uIE9lKG8sYyl7cmV0dXJuIF9lKG8pPT09X2UoYyl9ZnVuY3Rpb24gRGUobyxjKXtyZXR1cm4gXy5pc0FycmF5KGMpP2MuZmluZEluZGV4KHY9Pk9lKHYsbykpOl8uaXNGdW5jdGlvbihjKSYmT2UoYyxvKT8wOi0xfXZhciBwZT1vPT5vWzBdPT09Il8ifHxvPT09IiRzdGFibGUiLExlPW89Pl8uaXNBcnJheShvKT9vLm1hcChPbik6W09uKG8pXSxwdD0obyxjLHYpPT57aWYoYy5fbilyZXR1cm4gYzt2YXIgUz1CcihmdW5jdGlvbigpe3JldHVybiBMZShjKC4uLmFyZ3VtZW50cykpfSx2KTtyZXR1cm4gUy5fYz0hMSxTfSxPdD0obyxjLHYpPT57dmFyIFM9by5fY3R4O2Zvcih2YXIgUCBpbiBvKWlmKCFwZShQKSl7dmFyIFQ9b1tQXTtfLmlzRnVuY3Rpb24oVCk/Y1tQXT1wdChQLFQsUyk6VCE9bnVsbCYmZnVuY3Rpb24oKXt2YXIgRj1MZShUKTtjW1BdPSgpPT5GfSgpfX0sa3Q9KG8sYyk9Pnt2YXIgdj1MZShjKTtvLnNsb3RzLmRlZmF1bHQ9KCk9PnZ9LHZ0PShvLGMpPT57aWYoby52bm9kZS5zaGFwZUZsYWcmMzIpe3ZhciB2PWMuXzt2PyhvLnNsb3RzPUkudG9SYXcoYyksXy5kZWYoYywiXyIsdikpOk90KGMsby5zbG90cz17fSl9ZWxzZSBvLnNsb3RzPXt9LGMmJmt0KG8sYyk7Xy5kZWYoby5zbG90cyx0aSwxKX0saHQ9KG8sYyx2KT0+e3Zhcnt2bm9kZTpTLHNsb3RzOlB9PW8sVD0hMCxGPV8uRU1QVFlfT0JKO2lmKFMuc2hhcGVGbGFnJjMyKXt2YXIgSz1jLl87Sz92JiZLPT09MT9UPSExOihfLmV4dGVuZChQLGMpLCF2JiZLPT09MSYmZGVsZXRlIFAuXyk6KFQ9IWMuJHN0YWJsZSxPdChjLFApKSxGPWN9ZWxzZSBjJiYoa3QobyxjKSxGPXtkZWZhdWx0OjF9KTtpZihUKWZvcih2YXIgVyBpbiBQKSFwZShXKSYmRltXXT09bnVsbCYmZGVsZXRlIFBbV119O2Z1bmN0aW9uIFB0KG8sYyx2LFMpe3ZhciBQPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTohMTtpZihfLmlzQXJyYXkobykpe28uZm9yRWFjaCgoRXQsbXQpPT5QdChFdCxjJiYoXy5pc0FycmF5KGMpP2NbbXRdOmMpLHYsUyxQKSk7cmV0dXJufWlmKCEoTmkoUykmJiFQKSl7dmFyIFQ9Uy5zaGFwZUZsYWcmND8kcyhTLmNvbXBvbmVudCl8fFMuY29tcG9uZW50LnByb3h5OlMuZWwsRj1QP251bGw6VCx7aTpLLHI6V309byxpZT1jJiZjLnIsUmU9Sy5yZWZzPT09Xy5FTVBUWV9PQko/Sy5yZWZzPXt9OksucmVmcyxXZT1LLnNldHVwU3RhdGU7aWYoaWUhPW51bGwmJmllIT09VyYmKF8uaXNTdHJpbmcoaWUpPyhSZVtpZV09bnVsbCxfLmhhc093bihXZSxpZSkmJihXZVtpZV09bnVsbCkpOkkuaXNSZWYoaWUpJiYoaWUudmFsdWU9bnVsbCkpLF8uaXNGdW5jdGlvbihXKSljbihXLEssMTIsW0YsUmVdKTtlbHNle3ZhciBlZT1fLmlzU3RyaW5nKFcpLEJlPUkuaXNSZWYoVyk7aWYoZWV8fEJlKXt2YXIgWmU9KCk9PntpZihvLmYpe3ZhciBFdD1lZT9fLmhhc093bihXZSxXKT9XZVtXXTpSZVtXXTpXLnZhbHVlO1A/Xy5pc0FycmF5KEV0KSYmXy5yZW1vdmUoRXQsVCk6Xy5pc0FycmF5KEV0KT9FdC5pbmNsdWRlcyhUKXx8RXQucHVzaChUKTplZT8oUmVbV109W1RdLF8uaGFzT3duKFdlLFcpJiYoV2VbV109UmVbV10pKTooVy52YWx1ZT1bVF0sby5rJiYoUmVbby5rXT1XLnZhbHVlKSl9ZWxzZSBlZT8oUmVbV109RixfLmhhc093bihXZSxXKSYmKFdlW1ddPUYpKTpCZSYmKFcudmFsdWU9RixvLmsmJihSZVtvLmtdPUYpKX07Rj8oWmUuaWQ9LTEscm4oWmUsdikpOlplKCl9fX19dmFyIG9uPSExLEZuPW89Pm8ubmFtZXNwYWNlVVJJLmluY2x1ZGVzKCJzdmciKSYmby50YWdOYW1lIT09ImZvcmVpZ25PYmplY3QiLHd0PW89Pm8ubmFtZXNwYWNlVVJJLmluY2x1ZGVzKCJNYXRoTUwiKSxlbj1vPT57aWYoRm4obykpcmV0dXJuInN2ZyI7aWYod3QobykpcmV0dXJuIm1hdGhtbCJ9LHZuPW89Pm8ubm9kZVR5cGU9PT04O2Z1bmN0aW9uIHVyKG8pe3ZhcnttdDpjLHA6dixvOntwYXRjaFByb3A6UyxjcmVhdGVUZXh0OlAsbmV4dFNpYmxpbmc6VCxwYXJlbnROb2RlOkYscmVtb3ZlOkssaW5zZXJ0OlcsY3JlYXRlQ29tbWVudDppZX19PW8sUmU9KGZlLHhlKT0+e2lmKCF4ZS5oYXNDaGlsZE5vZGVzKCkpe3YobnVsbCxmZSx4ZSksa24oKSx4ZS5fdm5vZGU9ZmU7cmV0dXJufW9uPSExLFdlKHhlLmZpcnN0Q2hpbGQsZmUsbnVsbCxudWxsLG51bGwpLGtuKCkseGUuX3Zub2RlPWZlLG9uJiZjb25zb2xlLmVycm9yKCJIeWRyYXRpb24gY29tcGxldGVkIGJ1dCBjb250YWlucyBtaXNtYXRjaGVzLiIpfSxXZT1mdW5jdGlvbihmZSx4ZSx3ZSx6ZSxsdCl7dmFyIHJ0PWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTohMSxpPXZuKGZlKSYmZmUuZGF0YT09PSJbIixsPSgpPT5FdChmZSx4ZSx3ZSx6ZSxsdCxpKSx7dHlwZTpkLHJlZjptLHNoYXBlRmxhZzpBLHBhdGNoRmxhZzpDfT14ZSxrPWZlLm5vZGVUeXBlO3hlLmVsPWZlLEM9PT0tMiYmKHJ0PSExLHhlLmR5bmFtaWNDaGlsZHJlbj1udWxsKTt2YXIgVj1udWxsO3N3aXRjaChkKXtjYXNlIGlhOmshPT0zP3hlLmNoaWxkcmVuPT09IiI/KFcoeGUuZWw9UCgiIiksRihmZSksZmUpLFY9ZmUpOlY9bCgpOihmZS5kYXRhIT09eGUuY2hpbGRyZW4mJihvbj0hMCxmZS5kYXRhPXhlLmNoaWxkcmVuKSxWPVQoZmUpKTticmVhaztjYXNlIEdyOkd0KGZlKT8oVj1UKGZlKSxXdCh4ZS5lbD1mZS5jb250ZW50LmZpcnN0Q2hpbGQsZmUsd2UpKTprIT09OHx8aT9WPWwoKTpWPVQoZmUpO2JyZWFrO2Nhc2Uga286aWYoaSYmKGZlPVQoZmUpLGs9ZmUubm9kZVR5cGUpLGs9PT0xfHxrPT09Myl7Vj1mZTtmb3IodmFyIFU9IXhlLmNoaWxkcmVuLmxlbmd0aCxaPTA7Wjx4ZS5zdGF0aWNDb3VudDtaKyspVSYmKHhlLmNoaWxkcmVuKz1WLm5vZGVUeXBlPT09MT9WLm91dGVySFRNTDpWLmRhdGEpLFo9PT14ZS5zdGF0aWNDb3VudC0xJiYoeGUuYW5jaG9yPVYpLFY9VChWKTtyZXR1cm4gaT9UKFYpOlZ9ZWxzZSBsKCk7YnJlYWs7Y2FzZSBUbjppP1Y9WmUoZmUseGUsd2UsemUsbHQscnQpOlY9bCgpO2JyZWFrO2RlZmF1bHQ6aWYoQSYxKShrIT09MXx8eGUudHlwZS50b0xvd2VyQ2FzZSgpIT09ZmUudGFnTmFtZS50b0xvd2VyQ2FzZSgpKSYmIUd0KGZlKT9WPWwoKTpWPWVlKGZlLHhlLHdlLHplLGx0LHJ0KTtlbHNlIGlmKEEmNil7eGUuc2xvdFNjb3BlSWRzPWx0O3ZhciBkZT1GKGZlKTtpZihpP1Y9bXQoZmUpOnZuKGZlKSYmZmUuZGF0YT09PSJ0ZWxlcG9ydCBzdGFydCI/Vj1tdChmZSxmZS5kYXRhLCJ0ZWxlcG9ydCBlbmQiKTpWPVQoZmUpLGMoeGUsZGUsbnVsbCx3ZSx6ZSxlbihkZSkscnQpLE5pKHhlKSl7dmFyIHZlO2k/KHZlPXllKFRuKSx2ZS5hbmNob3I9Vj9WLnByZXZpb3VzU2libGluZzpkZS5sYXN0Q2hpbGQpOnZlPWZlLm5vZGVUeXBlPT09Mz9IdCgiIik6eWUoImRpdiIpLHZlLmVsPWZlLHhlLmNvbXBvbmVudC5zdWJUcmVlPXZlfX1lbHNlIEEmNjQ/ayE9PTg/Vj1sKCk6Vj14ZS50eXBlLmh5ZHJhdGUoZmUseGUsd2UsemUsbHQscnQsbyxCZSk6QSYxMjgmJihWPXhlLnR5cGUuaHlkcmF0ZShmZSx4ZSx3ZSx6ZSxlbihGKGZlKSksbHQscnQsbyxXZSkpfXJldHVybiBtIT1udWxsJiZQdChtLG51bGwsemUseGUpLFZ9LGVlPShmZSx4ZSx3ZSx6ZSxsdCxydCk9PntydD1ydHx8ISF4ZS5keW5hbWljQ2hpbGRyZW47dmFye3R5cGU6aSxwcm9wczpsLHBhdGNoRmxhZzpkLHNoYXBlRmxhZzptLGRpcnM6QSx0cmFuc2l0aW9uOkN9PXhlLGs9aT09PSJpbnB1dCJ8fGk9PT0ib3B0aW9uIjtpZihrfHxkIT09LTEpe0EmJlFyKHhlLG51bGwsd2UsImNyZWF0ZWQiKTt2YXIgVj0hMTtpZihHdChmZSkpe1Y9bW4oemUsQykmJndlJiZ3ZS52bm9kZS5wcm9wcyYmd2Uudm5vZGUucHJvcHMuYXBwZWFyO3ZhciBVPWZlLmNvbnRlbnQuZmlyc3RDaGlsZDtWJiZDLmJlZm9yZUVudGVyKFUpLFd0KFUsZmUsd2UpLHhlLmVsPWZlPVV9aWYobSYxNiYmIShsJiYobC5pbm5lckhUTUx8fGwudGV4dENvbnRlbnQpKSlmb3IodmFyIFo9QmUoZmUuZmlyc3RDaGlsZCx4ZSxmZSx3ZSx6ZSxsdCxydCk7Wjspe29uPSEwO3ZhciBkZT1aO1o9Wi5uZXh0U2libGluZyxLKGRlKX1lbHNlIG0mOCYmZmUudGV4dENvbnRlbnQhPT14ZS5jaGlsZHJlbiYmKG9uPSEwLGZlLnRleHRDb250ZW50PXhlLmNoaWxkcmVuKTtpZihsKWlmKGt8fCFydHx8ZCYoMTZ8MzIpKWZvcih2YXIgdmUgaW4gbCkoayYmKHZlLmVuZHNXaXRoKCJ2YWx1ZSIpfHx2ZT09PSJpbmRldGVybWluYXRlIil8fF8uaXNPbih2ZSkmJiFfLmlzUmVzZXJ2ZWRQcm9wKHZlKXx8dmVbMF09PT0iLiIpJiZTKGZlLHZlLG51bGwsbFt2ZV0sdm9pZCAwLHZvaWQgMCx3ZSk7ZWxzZSBsLm9uQ2xpY2smJlMoZmUsIm9uQ2xpY2siLG51bGwsbC5vbkNsaWNrLHZvaWQgMCx2b2lkIDAsd2UpO3ZhciB0ZTsodGU9bCYmbC5vblZub2RlQmVmb3JlTW91bnQpJiYkbih0ZSx3ZSx4ZSksQSYmUXIoeGUsbnVsbCx3ZSwiYmVmb3JlTW91bnQiKSwoKHRlPWwmJmwub25Wbm9kZU1vdW50ZWQpfHxBfHxWKSYmTXQoKCk9Pnt0ZSYmJG4odGUsd2UseGUpLFYmJkMuZW50ZXIoZmUpLEEmJlFyKHhlLG51bGwsd2UsIm1vdW50ZWQiKX0semUpfXJldHVybiBmZS5uZXh0U2libGluZ30sQmU9KGZlLHhlLHdlLHplLGx0LHJ0LGkpPT57aT1pfHwhIXhlLmR5bmFtaWNDaGlsZHJlbjtmb3IodmFyIGw9eGUuY2hpbGRyZW4sZD1sLmxlbmd0aCxtPTA7bTxkO20rKyl7dmFyIEE9aT9sW21dOmxbbV09T24obFttXSk7aWYoZmUpZmU9V2UoZmUsQSx6ZSxsdCxydCxpKTtlbHNle2lmKEEudHlwZT09PWlhJiYhQS5jaGlsZHJlbiljb250aW51ZTtvbj0hMCx2KG51bGwsQSx3ZSxudWxsLHplLGx0LGVuKHdlKSxydCl9fXJldHVybiBmZX0sWmU9KGZlLHhlLHdlLHplLGx0LHJ0KT0+e3ZhcntzbG90U2NvcGVJZHM6aX09eGU7aSYmKGx0PWx0P2x0LmNvbmNhdChpKTppKTt2YXIgbD1GKGZlKSxkPUJlKFQoZmUpLHhlLGwsd2UsemUsbHQscnQpO3JldHVybiBkJiZ2bihkKSYmZC5kYXRhPT09Il0iP1QoeGUuYW5jaG9yPWQpOihvbj0hMCxXKHhlLmFuY2hvcj1pZSgiXSIpLGwsZCksZCl9LEV0PShmZSx4ZSx3ZSx6ZSxsdCxydCk9PntpZihvbj0hMCx4ZS5lbD1udWxsLHJ0KWZvcih2YXIgaT1tdChmZSk7Oyl7dmFyIGw9VChmZSk7aWYobCYmbCE9PWkpSyhsKTtlbHNlIGJyZWFrfXZhciBkPVQoZmUpLG09RihmZSk7cmV0dXJuIEsoZmUpLHYobnVsbCx4ZSxtLGQsd2UsemUsZW4obSksbHQpLGR9LG10PWZ1bmN0aW9uKGZlKXtmb3IodmFyIHhlPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXToiWyIsd2U9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiJdIix6ZT0wO2ZlOylpZihmZT1UKGZlKSxmZSYmdm4oZmUpJiYoZmUuZGF0YT09PXhlJiZ6ZSsrLGZlLmRhdGE9PT13ZSkpe2lmKHplPT09MClyZXR1cm4gVChmZSk7emUtLX1yZXR1cm4gZmV9LFd0PShmZSx4ZSx3ZSk9Pnt2YXIgemU9eGUucGFyZW50Tm9kZTt6ZSYmemUucmVwbGFjZUNoaWxkKGZlLHhlKTtmb3IodmFyIGx0PXdlO2x0OylsdC52bm9kZS5lbD09PXhlJiYobHQudm5vZGUuZWw9bHQuc3ViVHJlZS5lbD1mZSksbHQ9bHQucGFyZW50fSxHdD1mZT0+ZmUubm9kZVR5cGU9PT0xJiZmZS50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PT0idGVtcGxhdGUiO3JldHVybltSZSxXZV19dmFyIHJuPU10O2Z1bmN0aW9uIEJuKG8pe3JldHVybiBfYShvKX1mdW5jdGlvbiBucihvKXtyZXR1cm4gX2Eobyx1cil9ZnVuY3Rpb24gX2EobyxjKXt2YXIgdj1fLmdldEdsb2JhbFRoaXMoKTt2Ll9fVlVFX189ITA7dmFye2luc2VydDpTLHJlbW92ZTpQLHBhdGNoUHJvcDpULGZvcmNlUGF0Y2hQcm9wOkYsY3JlYXRlRWxlbWVudDpLLGNyZWF0ZVRleHQ6VyxjcmVhdGVDb21tZW50OmllLHNldFRleHQ6UmUsc2V0RWxlbWVudFRleHQ6V2UscGFyZW50Tm9kZTplZSxuZXh0U2libGluZzpCZSxzZXRTY29wZUlkOlplPV8uTk9PUCxpbnNlcnRTdGF0aWNDb250ZW50OkV0fT1vLG10PWZ1bmN0aW9uKEIsJCxyZSl7dmFyIGdlPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTpudWxsLHNlPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTpudWxsLGtlPWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTpudWxsLEdlPWFyZ3VtZW50cy5sZW5ndGg+NiYmYXJndW1lbnRzWzZdIT09dm9pZCAwP2FyZ3VtZW50c1s2XTp2b2lkIDAsRWU9YXJndW1lbnRzLmxlbmd0aD43JiZhcmd1bWVudHNbN10hPT12b2lkIDA/YXJndW1lbnRzWzddOm51bGwsWWU9YXJndW1lbnRzLmxlbmd0aD44JiZhcmd1bWVudHNbOF0hPT12b2lkIDA/YXJndW1lbnRzWzhdOiEhJC5keW5hbWljQ2hpbGRyZW47aWYoQiE9PSQpe0ImJiFlaShCLCQpJiYoZ2U9Y2UoQiksSmUoQixzZSxrZSwhMCksQj1udWxsKSwkLnBhdGNoRmxhZz09PS0yJiYoWWU9ITEsJC5keW5hbWljQ2hpbGRyZW49bnVsbCk7dmFye3R5cGU6RmUscmVmOl90LHNoYXBlRmxhZzpSdH09JDtzd2l0Y2goRmUpe2Nhc2UgaWE6V3QoQiwkLHJlLGdlKTticmVhaztjYXNlIEdyOkd0KEIsJCxyZSxnZSk7YnJlYWs7Y2FzZSBrbzpCPT1udWxsJiZmZSgkLHJlLGdlLEdlKTticmVhaztjYXNlIFRuOkEoQiwkLHJlLGdlLHNlLGtlLEdlLEVlLFllKTticmVhaztkZWZhdWx0OlJ0JjE/emUoQiwkLHJlLGdlLHNlLGtlLEdlLEVlLFllKTpSdCY2P0MoQiwkLHJlLGdlLHNlLGtlLEdlLEVlLFllKTooUnQmNjR8fFJ0JjEyOCkmJkZlLnByb2Nlc3MoQiwkLHJlLGdlLHNlLGtlLEdlLEVlLFllLFZlKX1fdCE9bnVsbCYmc2UmJlB0KF90LEImJkIucmVmLGtlLCR8fEIsISQpfX0sV3Q9KEIsJCxyZSxnZSk9PntpZihCPT1udWxsKVMoJC5lbD1XKCQuY2hpbGRyZW4pLHJlLGdlKTtlbHNle3ZhciBzZT0kLmVsPUIuZWw7JC5jaGlsZHJlbiE9PUIuY2hpbGRyZW4mJlJlKHNlLCQuY2hpbGRyZW4pfX0sR3Q9KEIsJCxyZSxnZSk9PntCPT1udWxsP1MoJC5lbD1pZSgkLmNoaWxkcmVufHwiIikscmUsZ2UpOiQuZWw9Qi5lbH0sZmU9KEIsJCxyZSxnZSk9PntbQi5lbCxCLmFuY2hvcl09RXQoQi5jaGlsZHJlbiwkLHJlLGdlLEIuZWwsQi5hbmNob3IpfSx4ZT0oQiwkLHJlKT0+e2Zvcih2YXJ7ZWw6Z2UsYW5jaG9yOnNlfT1CLGtlO2dlJiZnZSE9PXNlOylrZT1CZShnZSksUyhnZSwkLHJlKSxnZT1rZTtTKHNlLCQscmUpfSx3ZT1CPT57Zm9yKHZhcntlbDokLGFuY2hvcjpyZX09QixnZTskJiYkIT09cmU7KWdlPUJlKCQpLFAoJCksJD1nZTtQKHJlKX0semU9KEIsJCxyZSxnZSxzZSxrZSxHZSxFZSxZZSk9PnskLnR5cGU9PT0ic3ZnIj9HZT0ic3ZnIjokLnR5cGU9PT0ibWF0aCImJihHZT0ibWF0aG1sIiksQj09bnVsbD9sdCgkLHJlLGdlLHNlLGtlLEdlLEVlLFllKTpsKEIsJCxzZSxrZSxHZSxFZSxZZSl9LGx0PShCLCQscmUsZ2Usc2Usa2UsR2UsRWUpPT57dmFyIFllLEZlLHtwcm9wczpfdCxzaGFwZUZsYWc6UnQsdHJhbnNpdGlvbjpMdCxkaXJzOnp0fT1CO2lmKFllPUIuZWw9SyhCLnR5cGUsa2UsX3QmJl90LmlzLF90KSxSdCY4P1dlKFllLEIuY2hpbGRyZW4pOlJ0JjE2JiZpKEIuY2hpbGRyZW4sWWUsbnVsbCxnZSxzZSxmcihCLGtlKSxHZSxFZSksenQmJlFyKEIsbnVsbCxnZSwiY3JlYXRlZCIpLHJ0KFllLEIsQi5zY29wZUlkLEdlLGdlKSxfdCl7Zm9yKHZhciBObiBpbiBfdClObiE9PSJ2YWx1ZSImJiFfLmlzUmVzZXJ2ZWRQcm9wKE5uKSYmVChZZSxObixudWxsLF90W05uXSxrZSxCLmNoaWxkcmVuLGdlLHNlLEN0LEIuaG9zdEluc3RhbmNlKTsidmFsdWUiaW4gX3QmJlQoWWUsInZhbHVlIixudWxsLF90LnZhbHVlLGtlLFtdLGdlLG51bGwsdm9pZCAwLEIuaG9zdEluc3RhbmNlKSwoRmU9X3Qub25Wbm9kZUJlZm9yZU1vdW50KSYmJG4oRmUsZ2UsQil9enQmJlFyKEIsbnVsbCxnZSwiYmVmb3JlTW91bnQiKTt2YXIgUG49bW4oc2UsTHQpO1BuJiZMdC5iZWZvcmVFbnRlcihZZSksUyhZZSwkLHJlKSwoKEZlPV90JiZfdC5vblZub2RlTW91bnRlZCl8fFBufHx6dCkmJnJuKCgpPT57RmUmJiRuKEZlLGdlLEIpLFBuJiZMdC5lbnRlcihZZSksenQmJlFyKEIsbnVsbCxnZSwibW91bnRlZCIpfSxzZSl9LHJ0PShCLCQscmUsZ2Usc2UpPT57aWYocmUmJlplKEIscmUpLGdlKWZvcih2YXIga2U9MDtrZTxnZS5sZW5ndGg7a2UrKylaZShCLGdlW2tlXSk7aWYoc2Upe3ZhciBHZT1zZS5zdWJUcmVlO2lmKCQ9PT1HZSl7dmFyIEVlPXNlLnZub2RlO3J0KEIsRWUsRWUuc2NvcGVJZCxFZS5zbG90U2NvcGVJZHMsc2UucGFyZW50KX19fSxpPWZ1bmN0aW9uKEIsJCxyZSxnZSxzZSxrZSxHZSxFZSl7Zm9yKHZhciBZZT1hcmd1bWVudHMubGVuZ3RoPjgmJmFyZ3VtZW50c1s4XSE9PXZvaWQgMD9hcmd1bWVudHNbOF06MCxGZT1ZZTtGZTxCLmxlbmd0aDtGZSsrKXt2YXIgX3Q9QltGZV09RWU/TGkoQltGZV0pOk9uKEJbRmVdKTttdChudWxsLF90LCQscmUsZ2Usc2Usa2UsR2UsRWUpfX0sbD0oQiwkLHJlLGdlLHNlLGtlLEdlKT0+e3ZhciBFZT0kLmVsPUIuZWwse3BhdGNoRmxhZzpZZSxkeW5hbWljQ2hpbGRyZW46RmUsZGlyczpfdH09JDtZZXw9Qi5wYXRjaEZsYWcmMTY7dmFyIFJ0PUIucHJvcHN8fF8uRU1QVFlfT0JKLEx0PSQucHJvcHN8fF8uRU1QVFlfT0JKLHp0O2lmKHJlJiZObyhyZSwhMSksKHp0PUx0Lm9uVm5vZGVCZWZvcmVVcGRhdGUpJiYkbih6dCxyZSwkLEIpLF90JiZRcigkLEIscmUsImJlZm9yZVVwZGF0ZSIpLHJlJiZObyhyZSwhMCksRmU/ZChCLmR5bmFtaWNDaGlsZHJlbixGZSxFZSxyZSxnZSxmcigkLHNlKSxrZSk6R2V8fGRlKEIsJCxFZSxudWxsLHJlLGdlLGZyKCQsc2UpLGtlLCExKSxZZT4wKXtpZihZZSYxNiltKEVlLCQsUnQsTHQscmUsZ2Usc2UpO2Vsc2UgaWYoWWUmMiYmUnQuY2xhc3MhPT1MdC5jbGFzcyYmVChFZSwiY2xhc3MiLG51bGwsTHQuY2xhc3Msc2UsW10scmUsbnVsbCx2b2lkIDAsJC5ob3N0SW5zdGFuY2UpLFllJjQmJlQoRWUsInN0eWxlIixSdC5zdHlsZSxMdC5zdHlsZSxzZSxbXSxyZSxudWxsLHZvaWQgMCwkLmhvc3RJbnN0YW5jZSksWWUmOClmb3IodmFyIE5uPSQuZHluYW1pY1Byb3BzLFBuPTA7UG48Tm4ubGVuZ3RoO1BuKyspe3ZhciBMbj1ObltQbl0sS249UnRbTG5dLCRyPUx0W0xuXTsoJHIhPT1Lbnx8TG49PT0idmFsdWUifHxGJiZGKEVlLExuKSkmJlQoRWUsTG4sS24sJHIsc2UsQi5jaGlsZHJlbixyZSxnZSxDdCwkLmhvc3RJbnN0YW5jZSl9WWUmMSYmQi5jaGlsZHJlbiE9PSQuY2hpbGRyZW4mJldlKEVlLCQuY2hpbGRyZW4pfWVsc2UhR2UmJkZlPT1udWxsJiZtKEVlLCQsUnQsTHQscmUsZ2Usc2UpOygoenQ9THQub25Wbm9kZVVwZGF0ZWQpfHxfdCkmJnJuKCgpPT57enQmJiRuKHp0LHJlLCQsQiksX3QmJlFyKCQsQixyZSwidXBkYXRlZCIpfSxnZSl9LGQ9KEIsJCxyZSxnZSxzZSxrZSxHZSk9Pntmb3IodmFyIEVlPTA7RWU8JC5sZW5ndGg7RWUrKyl7dmFyIFllPUJbRWVdLEZlPSRbRWVdLF90PVllLmVsJiYoWWUudHlwZT09PVRufHwhZWkoWWUsRmUpfHxZZS5zaGFwZUZsYWcmKDZ8NjQpKT9lZShZZS5lbCk6cmU7bXQoWWUsRmUsX3QsbnVsbCxnZSxzZSxrZSxHZSwhMCl9fSxtPShCLCQscmUsZ2Usc2Usa2UsR2UpPT57aWYocmUhPT1nZSl7aWYocmUhPT1fLkVNUFRZX09CSilmb3IodmFyIEVlIGluIHJlKSFfLmlzUmVzZXJ2ZWRQcm9wKEVlKSYmIShFZSBpbiBnZSkmJlQoQixFZSxyZVtFZV0sbnVsbCxHZSwkLmNoaWxkcmVuLHNlLGtlLEN0LCQuaG9zdEluc3RhbmNlKTtmb3IodmFyIFllIGluIGdlKWlmKCFfLmlzUmVzZXJ2ZWRQcm9wKFllKSl7dmFyIEZlPWdlW1llXSxfdD1yZVtZZV07KEZlIT09X3QmJlllIT09InZhbHVlInx8RiYmRihCLFllKSkmJlQoQixZZSxfdCxGZSxHZSwkLmNoaWxkcmVuLHNlLGtlLEN0LCQuaG9zdEluc3RhbmNlKX0idmFsdWUiaW4gZ2UmJlQoQiwidmFsdWUiLHJlLnZhbHVlLGdlLnZhbHVlLEdlLFtdLHNlLG51bGwsdm9pZCAwLCQuaG9zdEluc3RhbmNlKX19LEE9KEIsJCxyZSxnZSxzZSxrZSxHZSxFZSxZZSk9Pnt2YXIgRmU9JC5lbD1CP0IuZWw6VygiIiksX3Q9JC5hbmNob3I9Qj9CLmFuY2hvcjpXKCIiKSx7cGF0Y2hGbGFnOlJ0LGR5bmFtaWNDaGlsZHJlbjpMdCxzbG90U2NvcGVJZHM6enR9PSQ7enQmJihFZT1FZT9FZS5jb25jYXQoenQpOnp0KSxCPT1udWxsPyhTKEZlLHJlLGdlKSxTKF90LHJlLGdlKSxpKCQuY2hpbGRyZW58fFtdLHJlLF90LHNlLGtlLEdlLEVlLFllKSk6UnQ+MCYmUnQmNjQmJkx0JiZCLmR5bmFtaWNDaGlsZHJlbj8oZChCLmR5bmFtaWNDaGlsZHJlbixMdCxyZSxzZSxrZSxHZSxFZSksKCQua2V5IT1udWxsfHxzZSYmJD09PXNlLnN1YlRyZWUpJiZ0YShCLCQsITApKTpkZShCLCQscmUsX3Qsc2Usa2UsR2UsRWUsWWUpfSxDPShCLCQscmUsZ2Usc2Usa2UsR2UsRWUsWWUpPT57JC5zbG90U2NvcGVJZHM9RWUsQj09bnVsbD8kLnNoYXBlRmxhZyY1MTI/c2UuY3R4LmFjdGl2YXRlKCQscmUsZ2UsR2UsWWUpOmsoJCxyZSxnZSxzZSxrZSxHZSxZZSk6VihCLCQsWWUpfSxrPShCLCQscmUsZ2Usc2Usa2UsR2UpPT57dmFyIEVlPUIuY29tcG9uZW50PW9sKEIsZ2Usc2UpO2lmKEQoQikmJihFZS5jdHgucmVuZGVyZXI9VmUpLFZzKEVlKSxFZS5hc3luY0RlcCl7aWYoc2UmJnNlLnJlZ2lzdGVyRGVwKEVlLFUpLCFCLmVsKXt2YXIgWWU9RWUuc3ViVHJlZT15ZShHcik7R3QobnVsbCxZZSwkLHJlKX19ZWxzZSBVKEVlLEIsJCxyZSxzZSxrZSxHZSl9LFY9KEIsJCxyZSk9Pnt2YXIgZ2U9JC5jb21wb25lbnQ9Qi5jb21wb25lbnQ7aWYoZ3IoQiwkLHJlKSlpZihnZS5hc3luY0RlcCYmIWdlLmFzeW5jUmVzb2x2ZWQpe1ooZ2UsJCxyZSk7cmV0dXJufWVsc2UgZ2UubmV4dD0kLHVuKGdlLnVwZGF0ZSksZ2UuZWZmZWN0LmRpcnR5PSEwLGdlLnVwZGF0ZSgpO2Vsc2UgJC5lbD1CLmVsLGdlLnZub2RlPSR9LFU9KEIsJCxyZSxnZSxzZSxrZSxHZSk9Pnt2YXIgRWU9KCk9PntpZihCLmlzTW91bnRlZCl7dmFye25leHQ6SG4sYnU6S28sdTp3aSxwYXJlbnQ6aGksdm5vZGU6Qm99PUI7e3ZhciBxPVppKEIpO2lmKHEpe0huJiYoSG4uZWw9Qm8uZWwsWihCLEhuLEdlKSkscS5hc3luY0RlcC50aGVuKCgpPT57Qi5pc1VubW91bnRlZHx8RWUoKX0pO3JldHVybn19dmFyIFE9SG4sQWU7Tm8oQiwhMSksSG4/KEhuLmVsPUJvLmVsLFooQixIbixHZSkpOkhuPUJvLEtvJiZfLmludm9rZUFycmF5Rm5zKEtvKSwoQWU9SG4ucHJvcHMmJkhuLnByb3BzLm9uVm5vZGVCZWZvcmVVcGRhdGUpJiYkbihBZSxoaSxIbixCbyksTm8oQiwhMCk7dmFyIEllPVRpKEIpLFVlPUIuc3ViVHJlZTtCLnN1YlRyZWU9SWUsbXQoVWUsSWUsZWUoVWUuZWwpLGNlKFVlKSxCLHNlLGtlKSxIbi5lbD1JZS5lbCxRPT09bnVsbCYmTW8oQixJZS5lbCksd2kmJnJuKHdpLHNlKSwoQWU9SG4ucHJvcHMmJkhuLnByb3BzLm9uVm5vZGVVcGRhdGVkKSYmcm4oKCk9PiRuKEFlLGhpLEhuLEJvKSxzZSl9ZWxzZXt2YXIgX3Qse2VsOlJ0LHByb3BzOkx0fT0kLHtibTp6dCxtOk5uLHBhcmVudDpQbn09QixMbj1OaSgkKTtpZihObyhCLCExKSx6dCYmXy5pbnZva2VBcnJheUZucyh6dCksIUxuJiYoX3Q9THQmJkx0Lm9uVm5vZGVCZWZvcmVNb3VudCkmJiRuKF90LFBuLCQpLE5vKEIsITApLFJ0JiZvdCl7dmFyIEtuPSgpPT57Qi5zdWJUcmVlPVRpKEIpLG90KFJ0LEIuc3ViVHJlZSxCLHNlLG51bGwpfTtMbj8kLnR5cGUuX19hc3luY0xvYWRlcigpLnRoZW4oKCk9PiFCLmlzVW5tb3VudGVkJiZLbigpKTpLbigpfWVsc2V7dmFyICRyPUIuc3ViVHJlZT1UaShCKTttdChudWxsLCRyLHJlLGdlLEIsc2Usa2UpLCQuZWw9JHIuZWx9aWYoTm4mJnJuKE5uLHNlKSwhTG4mJihfdD1MdCYmTHQub25Wbm9kZU1vdW50ZWQpKXt2YXIgc2E9JDtybigoKT0+JG4oX3QsUG4sc2EpLHNlKX0oJC5zaGFwZUZsYWcmMjU2fHxQbiYmTmkoUG4udm5vZGUpJiZQbi52bm9kZS5zaGFwZUZsYWcmMjU2KSYmQi5hJiZybihCLmEsc2UpLEIuaXNNb3VudGVkPSEwLCQ9cmU9Z2U9bnVsbH19LFllPUIuZWZmZWN0PW5ldyBJLlJlYWN0aXZlRWZmZWN0KEVlLF8uTk9PUCwoKT0+ZXQoRmUpLEIuc2NvcGUpLEZlPUIudXBkYXRlPSgpPT57WWUuZGlydHkmJlllLnJ1bigpfTtGZS5pZD1CLnVpZCxObyhCLCEwKSxGZSgpfSxaPShCLCQscmUpPT57JC5jb21wb25lbnQ9Qjt2YXIgZ2U9Qi52bm9kZS5wcm9wcztCLnZub2RlPSQsQi5uZXh0PW51bGwsaihCLCQucHJvcHMsZ2UscmUpLGh0KEIsJC5jaGlsZHJlbixyZSksSS5wYXVzZVRyYWNraW5nKCksc24oQiksSS5yZXNldFRyYWNraW5nKCl9LGRlPWZ1bmN0aW9uKEIsJCxyZSxnZSxzZSxrZSxHZSxFZSl7dmFyIFllPWFyZ3VtZW50cy5sZW5ndGg+OCYmYXJndW1lbnRzWzhdIT09dm9pZCAwP2FyZ3VtZW50c1s4XTohMSxGZT1CJiZCLmNoaWxkcmVuLF90PUI/Qi5zaGFwZUZsYWc6MCxSdD0kLmNoaWxkcmVuLHtwYXRjaEZsYWc6THQsc2hhcGVGbGFnOnp0fT0kO2lmKEx0PjApe2lmKEx0JjEyOCl7dGUoRmUsUnQscmUsZ2Usc2Usa2UsR2UsRWUsWWUpO3JldHVybn1lbHNlIGlmKEx0JjI1Nil7dmUoRmUsUnQscmUsZ2Usc2Usa2UsR2UsRWUsWWUpO3JldHVybn19enQmOD8oX3QmMTYmJkN0KEZlLHNlLGtlKSxSdCE9PUZlJiZXZShyZSxSdCkpOl90JjE2P3p0JjE2P3RlKEZlLFJ0LHJlLGdlLHNlLGtlLEdlLEVlLFllKTpDdChGZSxzZSxrZSwhMCk6KF90JjgmJldlKHJlLCIiKSx6dCYxNiYmaShSdCxyZSxnZSxzZSxrZSxHZSxFZSxZZSkpfSx2ZT0oQiwkLHJlLGdlLHNlLGtlLEdlLEVlLFllKT0+e0I9Qnx8Xy5FTVBUWV9BUlIsJD0kfHxfLkVNUFRZX0FSUjt2YXIgRmU9Qi5sZW5ndGgsX3Q9JC5sZW5ndGgsUnQ9TWF0aC5taW4oRmUsX3QpLEx0O2ZvcihMdD0wO0x0PFJ0O0x0Kyspe3ZhciB6dD0kW0x0XT1ZZT9MaSgkW0x0XSk6T24oJFtMdF0pO210KEJbTHRdLHp0LHJlLG51bGwsc2Usa2UsR2UsRWUsWWUpfUZlPl90P0N0KEIsc2Usa2UsITAsITEsUnQpOmkoJCxyZSxnZSxzZSxrZSxHZSxFZSxZZSxSdCl9LHRlPShCLCQscmUsZ2Usc2Usa2UsR2UsRWUsWWUpPT57Zm9yKHZhciBGZT0wLF90PSQubGVuZ3RoLFJ0PUIubGVuZ3RoLTEsTHQ9X3QtMTtGZTw9UnQmJkZlPD1MdDspe3ZhciB6dD1CW0ZlXSxObj0kW0ZlXT1ZZT9MaSgkW0ZlXSk6T24oJFtGZV0pO2lmKGVpKHp0LE5uKSltdCh6dCxObixyZSxudWxsLHNlLGtlLEdlLEVlLFllKTtlbHNlIGJyZWFrO0ZlKyt9Zm9yKDtGZTw9UnQmJkZlPD1MdDspe3ZhciBQbj1CW1J0XSxMbj0kW0x0XT1ZZT9MaSgkW0x0XSk6T24oJFtMdF0pO2lmKGVpKFBuLExuKSltdChQbixMbixyZSxudWxsLHNlLGtlLEdlLEVlLFllKTtlbHNlIGJyZWFrO1J0LS0sTHQtLX1pZihGZT5SdCl7aWYoRmU8PUx0KWZvcih2YXIgS249THQrMSwkcj1LbjxfdD8kW0tuXS5lbDpnZTtGZTw9THQ7KW10KG51bGwsJFtGZV09WWU/TGkoJFtGZV0pOk9uKCRbRmVdKSxyZSwkcixzZSxrZSxHZSxFZSxZZSksRmUrK31lbHNlIGlmKEZlPkx0KWZvcig7RmU8PVJ0OylKZShCW0ZlXSxzZSxrZSwhMCksRmUrKztlbHNle3ZhciBzYT1GZSxIbj1GZSxLbz1uZXcgTWFwO2ZvcihGZT1IbjtGZTw9THQ7RmUrKyl7dmFyIHdpPSRbRmVdPVllP0xpKCRbRmVdKTpPbigkW0ZlXSk7d2kua2V5IT1udWxsJiZLby5zZXQod2kua2V5LEZlKX12YXIgaGksQm89MCxxPUx0LUhuKzEsUT0hMSxBZT0wLEllPW5ldyBBcnJheShxKTtmb3IoRmU9MDtGZTxxO0ZlKyspSWVbRmVdPTA7Zm9yKEZlPXNhO0ZlPD1SdDtGZSsrKXt2YXIgVWU9QltGZV07aWYoQm8+PXEpe0plKFVlLHNlLGtlLCEwKTtjb250aW51ZX12YXIgdHQ9dm9pZCAwO2lmKFVlLmtleSE9bnVsbCl0dD1Lby5nZXQoVWUua2V5KTtlbHNlIGZvcihoaT1IbjtoaTw9THQ7aGkrKylpZihJZVtoaS1Ibl09PT0wJiZlaShVZSwkW2hpXSkpe3R0PWhpO2JyZWFrfXR0PT09dm9pZCAwP0plKFVlLHNlLGtlLCEwKTooSWVbdHQtSG5dPUZlKzEsdHQ+PUFlP0FlPXR0OlE9ITAsbXQoVWUsJFt0dF0scmUsbnVsbCxzZSxrZSxHZSxFZSxZZSksQm8rKyl9dmFyIFN0PVE/bmEoSWUpOl8uRU1QVFlfQVJSO2ZvcihoaT1TdC5sZW5ndGgtMSxGZT1xLTE7RmU+PTA7RmUtLSl7dmFyIFhlPUhuK0ZlLFFlPSRbWGVdLEtlPVhlKzE8X3Q/JFtYZSsxXS5lbDpnZTtJZVtGZV09PT0wP210KG51bGwsUWUscmUsS2Usc2Usa2UsR2UsRWUsWWUpOlEmJihoaTwwfHxGZSE9PVN0W2hpXT9tZShRZSxyZSxLZSwyKTpoaS0tKX19fSxtZT1mdW5jdGlvbihCLCQscmUsZ2Upe3ZhciBzZT1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06bnVsbCx7ZWw6a2UsdHlwZTpHZSx0cmFuc2l0aW9uOkVlLGNoaWxkcmVuOlllLHNoYXBlRmxhZzpGZX09QjtpZihGZSY2KXttZShCLmNvbXBvbmVudC5zdWJUcmVlLCQscmUsZ2UpO3JldHVybn1pZihGZSYxMjgpe0Iuc3VzcGVuc2UubW92ZSgkLHJlLGdlKTtyZXR1cm59aWYoRmUmNjQpe0dlLm1vdmUoQiwkLHJlLFZlKTtyZXR1cm59aWYoR2U9PT1Ubil7UyhrZSwkLHJlKTtmb3IodmFyIF90PTA7X3Q8WWUubGVuZ3RoO190KyspbWUoWWVbX3RdLCQscmUsZ2UpO1MoQi5hbmNob3IsJCxyZSk7cmV0dXJufWlmKEdlPT09a28pe3hlKEIsJCxyZSk7cmV0dXJufXZhciBSdD1nZSE9PTImJkZlJjEmJkVlO2lmKFJ0KWlmKGdlPT09MClFZS5iZWZvcmVFbnRlcihrZSksUyhrZSwkLHJlKSxybigoKT0+RWUuZW50ZXIoa2UpLHNlKTtlbHNle3ZhcntsZWF2ZTpMdCxkZWxheUxlYXZlOnp0LGFmdGVyTGVhdmU6Tm59PUVlLFBuPSgpPT5TKGtlLCQscmUpLExuPSgpPT57THQoa2UsKCk9PntQbigpLE5uJiZObigpfSl9O3p0P3p0KGtlLFBuLExuKTpMbigpfWVsc2UgUyhrZSwkLHJlKX0sSmU9ZnVuY3Rpb24oQiwkLHJlKXt2YXIgZ2U9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiExLHNlPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTohMSx7dHlwZTprZSxwcm9wczpHZSxyZWY6RWUsY2hpbGRyZW46WWUsZHluYW1pY0NoaWxkcmVuOkZlLHNoYXBlRmxhZzpfdCxwYXRjaEZsYWc6UnQsZGlyczpMdH09QjtpZihFZSE9bnVsbCYmUHQoRWUsbnVsbCxyZSxCLCEwKSxfdCYyNTYpeyQuY3R4LmRlYWN0aXZhdGUoQik7cmV0dXJufXZhciB6dD1fdCYxJiZMdCxObj0hTmkoQiksUG47aWYoTm4mJihQbj1HZSYmR2Uub25Wbm9kZUJlZm9yZVVubW91bnQpJiYkbihQbiwkLEIpLF90JjYpSXQoQi5jb21wb25lbnQscmUsZ2UpO2Vsc2V7aWYoX3QmMTI4KXtCLnN1c3BlbnNlLnVubW91bnQocmUsZ2UpO3JldHVybn16dCYmUXIoQixudWxsLCQsImJlZm9yZVVubW91bnQiKSxfdCY2ND9CLnR5cGUucmVtb3ZlKEIsJCxyZSxzZSxWZSxnZSk6RmUmJihrZSE9PVRufHxSdD4wJiZSdCY2NCk/Q3QoRmUsJCxyZSwhMSwhMCk6KGtlPT09VG4mJlJ0JigxMjh8MjU2KXx8IXNlJiZfdCYxNikmJkN0KFllLCQscmUpLGdlJiZjdChCKX0oTm4mJihQbj1HZSYmR2Uub25Wbm9kZVVubW91bnRlZCl8fHp0KSYmcm4oKCk9PntQbiYmJG4oUG4sJCxCKSx6dCYmUXIoQixudWxsLCQsInVubW91bnRlZCIpfSxyZSl9LGN0PUI9Pnt2YXJ7dHlwZTokLGVsOnJlLGFuY2hvcjpnZSx0cmFuc2l0aW9uOnNlfT1CO2lmKCQ9PT1Ubil7aXQocmUsZ2UpO3JldHVybn1pZigkPT09a28pe3dlKEIpO3JldHVybn12YXIga2U9KCk9PntQKHJlKSxzZSYmIXNlLnBlcnNpc3RlZCYmc2UuYWZ0ZXJMZWF2ZSYmc2UuYWZ0ZXJMZWF2ZSgpfTtpZihCLnNoYXBlRmxhZyYxJiZzZSYmIXNlLnBlcnNpc3RlZCl7dmFye2xlYXZlOkdlLGRlbGF5TGVhdmU6RWV9PXNlLFllPSgpPT5HZShyZSxrZSk7RWU/RWUoQi5lbCxrZSxZZSk6WWUoKX1lbHNlIGtlKCl9LGl0PShCLCQpPT57Zm9yKHZhciByZTtCIT09JDspcmU9QmUoQiksUChCKSxCPXJlO1AoJCl9LEl0PShCLCQscmUpPT57dmFye2J1bTpnZSxzY29wZTpzZSx1cGRhdGU6a2Usc3ViVHJlZTpHZSx1bTpFZX09QjtnZSYmXy5pbnZva2VBcnJheUZucyhnZSksc2Uuc3RvcCgpLGtlJiYoa2UuYWN0aXZlPSExLEplKEdlLEIsJCxyZSkpLEVlJiZybihFZSwkKSxybigoKT0+e0IuaXNVbm1vdW50ZWQ9ITB9LCQpLCQmJiQucGVuZGluZ0JyYW5jaCYmISQuaXNVbm1vdW50ZWQmJkIuYXN5bmNEZXAmJiFCLmFzeW5jUmVzb2x2ZWQmJkIuc3VzcGVuc2VJZD09PSQucGVuZGluZ0lkJiYoJC5kZXBzLS0sJC5kZXBzPT09MCYmJC5yZXNvbHZlKCkpfSxDdD1mdW5jdGlvbihCLCQscmUpe2Zvcih2YXIgZ2U9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiExLHNlPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTohMSxrZT1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06MCxHZT1rZTtHZTxCLmxlbmd0aDtHZSsrKUplKEJbR2VdLCQscmUsZ2Usc2UpfSxjZT1CPT5CLnNoYXBlRmxhZyY2P2NlKEIuY29tcG9uZW50LnN1YlRyZWUpOkIuc2hhcGVGbGFnJjEyOD9CLnN1c3BlbnNlLm5leHQoKTpCZShCLmFuY2hvcnx8Qi5lbCksTmU9ITEsQ2U9KEIsJCxyZSk9PntCPT1udWxsPyQuX3Zub2RlJiZKZSgkLl92bm9kZSxudWxsLG51bGwsITApOm10KCQuX3Zub2RlfHxudWxsLEIsJCxudWxsLG51bGwsbnVsbCxyZSksTmV8fChOZT0hMCxzbigpLGtuKCksTmU9ITEpLCQuX3Zub2RlPUJ9LFZlPXtwOm10LHVtOkplLG06bWUscjpjdCxtdDprLG1jOmkscGM6ZGUscGJjOmQsbjpjZSxvfSxidCxvdDtyZXR1cm4gYyYmKFtidCxvdF09YyhWZSkpLHtyZW5kZXI6Q2UsaHlkcmF0ZTpidCxjcmVhdGVBcHA6TWEoQ2UsYnQpfX1mdW5jdGlvbiBmcihvLGMpe3Zhcnt0eXBlOnYscHJvcHM6U309bztyZXR1cm4gYz09PSJzdmciJiZ2PT09ImZvcmVpZ25PYmplY3QifHxjPT09Im1hdGhtbCImJnY9PT0iYW5ub3RhdGlvbi14bWwiJiZTJiZTLmVuY29kaW5nJiZTLmVuY29kaW5nLmluY2x1ZGVzKCJodG1sIik/dm9pZCAwOmN9ZnVuY3Rpb24gTm8obyxjKXt2YXJ7ZWZmZWN0OnYsdXBkYXRlOlN9PW87di5hbGxvd1JlY3Vyc2U9Uy5hbGxvd1JlY3Vyc2U9Y31mdW5jdGlvbiBtbihvLGMpe3JldHVybighb3x8byYmIW8ucGVuZGluZ0JyYW5jaCkmJmMmJiFjLnBlcnNpc3RlZH1mdW5jdGlvbiB0YShvLGMpe3ZhciB2PWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTohMSxTPW8uY2hpbGRyZW4sUD1jLmNoaWxkcmVuO2lmKF8uaXNBcnJheShTKSYmXy5pc0FycmF5KFApKWZvcih2YXIgVD0wO1Q8Uy5sZW5ndGg7VCsrKXt2YXIgRj1TW1RdLEs9UFtUXTtLLnNoYXBlRmxhZyYxJiYhSy5keW5hbWljQ2hpbGRyZW4mJigoSy5wYXRjaEZsYWc8PTB8fEsucGF0Y2hGbGFnPT09MzIpJiYoSz1QW1RdPUxpKFBbVF0pLEsuZWw9Ri5lbCksdnx8dGEoRixLKSksSy50eXBlPT09aWEmJihLLmVsPUYuZWwpfX1mdW5jdGlvbiBuYShvKXt2YXIgYz1vLnNsaWNlKCksdj1bMF0sUyxQLFQsRixLLFc9by5sZW5ndGg7Zm9yKFM9MDtTPFc7UysrKXt2YXIgaWU9b1tTXTtpZihpZSE9PTApe2lmKFA9dlt2Lmxlbmd0aC0xXSxvW1BdPGllKXtjW1NdPVAsdi5wdXNoKFMpO2NvbnRpbnVlfWZvcihUPTAsRj12Lmxlbmd0aC0xO1Q8RjspSz1UK0Y+PjEsb1t2W0tdXTxpZT9UPUsrMTpGPUs7aWU8b1t2W1RdXSYmKFQ+MCYmKGNbU109dltULTFdKSx2W1RdPVMpfX1mb3IoVD12Lmxlbmd0aCxGPXZbVC0xXTtULS0gPjA7KXZbVF09RixGPWNbRl07cmV0dXJuIHZ9ZnVuY3Rpb24gWmkobyl7dmFyIGM9by5zdWJUcmVlLmNvbXBvbmVudDtpZihjKXJldHVybiBjLmFzeW5jRGVwJiYhYy5hc3luY1Jlc29sdmVkP2M6WmkoYyl9dmFyIERhPW89Pm8uX19pc1RlbGVwb3J0LHJyPW89Pm8mJihvLmRpc2FibGVkfHxvLmRpc2FibGVkPT09IiIpLEZhPW89PnR5cGVvZiBTVkdFbGVtZW50IT0idW5kZWZpbmVkIiYmbyBpbnN0YW5jZW9mIFNWR0VsZW1lbnQsV249bz0+dHlwZW9mIE1hdGhNTEVsZW1lbnQ9PSJmdW5jdGlvbiImJm8gaW5zdGFuY2VvZiBNYXRoTUxFbGVtZW50LFluPShvLGMpPT57dmFyIHY9byYmby50bztpZihfLmlzU3RyaW5nKHYpKWlmKGMpe3ZhciBTPWModik7cmV0dXJuIFN9ZWxzZSByZXR1cm4gbnVsbDtlbHNlIHJldHVybiB2fSxHbz17bmFtZToiVGVsZXBvcnQiLF9faXNUZWxlcG9ydDohMCxwcm9jZXNzKG8sYyx2LFMsUCxULEYsSyxXLGllKXt2YXJ7bWM6UmUscGM6V2UscGJjOmVlLG86e2luc2VydDpCZSxxdWVyeVNlbGVjdG9yOlplLGNyZWF0ZVRleHQ6RXQsY3JlYXRlQ29tbWVudDptdH19PWllLFd0PXJyKGMucHJvcHMpLHtzaGFwZUZsYWc6R3QsY2hpbGRyZW46ZmUsZHluYW1pY0NoaWxkcmVuOnhlfT1jO2lmKG89PW51bGwpe3ZhciB3ZT1jLmVsPUV0KCIiKSx6ZT1jLmFuY2hvcj1FdCgiIik7QmUod2UsdixTKSxCZSh6ZSx2LFMpO3ZhciBsdD1jLnRhcmdldD1ZbihjLnByb3BzLFplKSxydD1jLnRhcmdldEFuY2hvcj1FdCgiIik7bHQmJihCZShydCxsdCksRj09PSJzdmcifHxGYShsdCk/Rj0ic3ZnIjooRj09PSJtYXRobWwifHxXbihsdCkpJiYoRj0ibWF0aG1sIikpO3ZhciBpPShVLFopPT57R3QmMTYmJlJlKGZlLFUsWixQLFQsRixLLFcpfTtXdD9pKHYsemUpOmx0JiZpKGx0LHJ0KX1lbHNle2MuZWw9by5lbDt2YXIgbD1jLmFuY2hvcj1vLmFuY2hvcixkPWMudGFyZ2V0PW8udGFyZ2V0LG09Yy50YXJnZXRBbmNob3I9by50YXJnZXRBbmNob3IsQT1ycihvLnByb3BzKSxDPUE/djpkLGs9QT9sOm07aWYoRj09PSJzdmcifHxGYShkKT9GPSJzdmciOihGPT09Im1hdGhtbCJ8fFduKGQpKSYmKEY9Im1hdGhtbCIpLHhlPyhlZShvLmR5bmFtaWNDaGlsZHJlbix4ZSxDLFAsVCxGLEspLHRhKG8sYywhMCkpOld8fFdlKG8sYyxDLGssUCxULEYsSywhMSksV3QpQT9jLnByb3BzJiZvLnByb3BzJiZjLnByb3BzLnRvIT09by5wcm9wcy50byYmKGMucHJvcHMudG89by5wcm9wcy50byk6cG8oYyx2LGwsaWUsMSk7ZWxzZSBpZigoYy5wcm9wcyYmYy5wcm9wcy50bykhPT0oby5wcm9wcyYmby5wcm9wcy50bykpe3ZhciBWPWMudGFyZ2V0PVluKGMucHJvcHMsWmUpO1YmJnBvKGMsVixudWxsLGllLDApfWVsc2UgQSYmcG8oYyxkLG0saWUsMSl9SW8oYyl9LHJlbW92ZShvLGMsdixTLFAsVCl7dmFye3VtOkYsbzp7cmVtb3ZlOkt9fT1QLHtzaGFwZUZsYWc6VyxjaGlsZHJlbjppZSxhbmNob3I6UmUsdGFyZ2V0QW5jaG9yOldlLHRhcmdldDplZSxwcm9wczpCZX09bztpZihlZSYmSyhXZSksVCYmSyhSZSksVyYxNilmb3IodmFyIFplPVR8fCFycihCZSksRXQ9MDtFdDxpZS5sZW5ndGg7RXQrKyl7dmFyIG10PWllW0V0XTtGKG10LGMsdixaZSwhIW10LmR5bmFtaWNDaGlsZHJlbil9fSxtb3ZlOnBvLGh5ZHJhdGU6cmF9O2Z1bmN0aW9uIHBvKG8sYyx2LFMpe3ZhcntvOntpbnNlcnQ6UH0sbTpUfT1TLEY9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOjI7Rj09PTAmJlAoby50YXJnZXRBbmNob3IsYyx2KTt2YXJ7ZWw6SyxhbmNob3I6VyxzaGFwZUZsYWc6aWUsY2hpbGRyZW46UmUscHJvcHM6V2V9PW8sZWU9Rj09PTI7aWYoZWUmJlAoSyxjLHYpLCghZWV8fHJyKFdlKSkmJmllJjE2KWZvcih2YXIgQmU9MDtCZTxSZS5sZW5ndGg7QmUrKylUKFJlW0JlXSxjLHYsMik7ZWUmJlAoVyxjLHYpfWZ1bmN0aW9uIHJhKG8sYyx2LFMsUCxULEYsSyl7dmFye286e25leHRTaWJsaW5nOlcscGFyZW50Tm9kZTppZSxxdWVyeVNlbGVjdG9yOlJlfX09RixXZT1jLnRhcmdldD1ZbihjLnByb3BzLFJlKTtpZihXZSl7dmFyIGVlPVdlLl9scGF8fFdlLmZpcnN0Q2hpbGQ7aWYoYy5zaGFwZUZsYWcmMTYpaWYocnIoYy5wcm9wcykpYy5hbmNob3I9SyhXKG8pLGMsaWUobyksdixTLFAsVCksYy50YXJnZXRBbmNob3I9ZWU7ZWxzZXtjLmFuY2hvcj1XKG8pO2Zvcih2YXIgQmU9ZWU7QmU7KWlmKEJlPVcoQmUpLEJlJiZCZS5ub2RlVHlwZT09PTgmJkJlLmRhdGE9PT0idGVsZXBvcnQgYW5jaG9yIil7Yy50YXJnZXRBbmNob3I9QmUsV2UuX2xwYT1jLnRhcmdldEFuY2hvciYmVyhjLnRhcmdldEFuY2hvcik7YnJlYWt9SyhlZSxjLFdlLHYsUyxQLFQpfUlvKGMpfXJldHVybiBjLmFuY2hvciYmVyhjLmFuY2hvcil9dmFyIEVpPUdvO2Z1bmN0aW9uIElvKG8pe3ZhciBjPW8uY3R4O2lmKGMmJmMudXQpe2Zvcih2YXIgdj1vLmNoaWxkcmVuWzBdLmVsO3YmJnYhPT1vLnRhcmdldEFuY2hvcjspdi5ub2RlVHlwZT09PTEmJnYuc2V0QXR0cmlidXRlKCJkYXRhLXYtb3duZXIiLGMudWlkKSx2PXYubmV4dFNpYmxpbmc7Yy51dCgpfX12YXIgVG49U3ltYm9sLmZvcigidi1mZ3QiKSxpYT1TeW1ib2wuZm9yKCJ2LXR4dCIpLEdyPVN5bWJvbC5mb3IoInYtY210Iiksa289U3ltYm9sLmZvcigidi1zdGMiKSxpcj1bXSxkcj1udWxsO2Z1bmN0aW9uIGhyKCl7dmFyIG89YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiExO2lyLnB1c2goZHI9bz9udWxsOltdKX1mdW5jdGlvbiBSbygpe2lyLnBvcCgpLGRyPWlyW2lyLmxlbmd0aC0xXXx8bnVsbH12YXIgdWk9MTtmdW5jdGlvbiB3cihvKXt1aSs9b31mdW5jdGlvbiBiYShvKXtyZXR1cm4gby5keW5hbWljQ2hpbGRyZW49dWk+MD9kcnx8Xy5FTVBUWV9BUlI6bnVsbCxSbygpLHVpPjAmJmRyJiZkci5wdXNoKG8pLG99ZnVuY3Rpb24gWmEobyxjLHYsUyxQLFQpe3JldHVybiBiYShNcyhvLGMsdixTLFAsVCwhMCkpfWZ1bmN0aW9uIG1yKG8sYyx2LFMsUCl7cmV0dXJuIGJhKHllKG8sYyx2LFMsUCwhMCkpfWZ1bmN0aW9uIGZpKG8pe3JldHVybiBvP28uX192X2lzVk5vZGU9PT0hMDohMX1mdW5jdGlvbiBlaShvLGMpe3JldHVybiBvLnR5cGU9PT1jLnR5cGUmJm8ua2V5PT09Yy5rZXl9ZnVuY3Rpb24gTHMobyl7fXZhciB0aT0iX192SW50ZXJuYWwiLEJpPW89Pnt2YXJ7a2V5OmN9PW87cmV0dXJuIGMhPW51bGw/YzpudWxsfSxWcj1vPT57dmFye3JlZjpjLHJlZl9rZXk6dixyZWZfZm9yOlN9PW87cmV0dXJuIHR5cGVvZiBjPT0ibnVtYmVyIiYmKGM9IiIrYyksYyE9bnVsbD9fLmlzU3RyaW5nKGMpfHxJLmlzUmVmKGMpfHxfLmlzRnVuY3Rpb24oYyk/e2k6eG4scjpjLGs6dixmOiEhU306YzpudWxsfTtmdW5jdGlvbiBNcyhvKXt2YXIgYz1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06bnVsbCx2PWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTpudWxsLFM9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOjAsUD1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06bnVsbCxUPWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTpvPT09VG4/MDoxLEY9YXJndW1lbnRzLmxlbmd0aD42JiZhcmd1bWVudHNbNl0hPT12b2lkIDA/YXJndW1lbnRzWzZdOiExLEs9YXJndW1lbnRzLmxlbmd0aD43JiZhcmd1bWVudHNbN10hPT12b2lkIDA/YXJndW1lbnRzWzddOiExLFc9e19fdl9pc1ZOb2RlOiEwLF9fdl9za2lwOiEwLHR5cGU6byxwcm9wczpjLGtleTpjJiZCaShjKSxyZWY6YyYmVnIoYyksc2NvcGVJZDpicixzbG90U2NvcGVJZHM6bnVsbCxjaGlsZHJlbjp2LGNvbXBvbmVudDpudWxsLHN1c3BlbnNlOm51bGwsc3NDb250ZW50Om51bGwsc3NGYWxsYmFjazpudWxsLGRpcnM6bnVsbCx0cmFuc2l0aW9uOm51bGwsZWw6bnVsbCxhbmNob3I6bnVsbCx0YXJnZXQ6bnVsbCx0YXJnZXRBbmNob3I6bnVsbCxzdGF0aWNDb3VudDowLHNoYXBlRmxhZzpULHBhdGNoRmxhZzpTLGR5bmFtaWNQcm9wczpQLGR5bmFtaWNDaGlsZHJlbjpudWxsLGFwcENvbnRleHQ6bnVsbCxob3N0SW5zdGFuY2U6eG4sY3R4OnhufTtyZXR1cm4gSz8ocHMoVyx2KSxUJjEyOCYmby5ub3JtYWxpemUoVykpOnYmJihXLnNoYXBlRmxhZ3w9Xy5pc1N0cmluZyh2KT84OjE2KSx1aT4wJiYhRiYmZHImJihXLnBhdGNoRmxhZz4wfHxUJjYpJiZXLnBhdGNoRmxhZyE9PTMyJiZkci5wdXNoKFcpLFd9dmFyIHllPUR0O2Z1bmN0aW9uIER0KG8pe3ZhciBjPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpudWxsLHY9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOm51bGwsUz1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106MCxQPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTpudWxsLFQ9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOiExO2lmKCghb3x8bz09PVNvKSYmKG89R3IpLGZpKG8pKXt2YXIgRj1sbihvLGMsITApO3JldHVybiB2JiZwcyhGLHYpLHVpPjAmJiFUJiZkciYmKEYuc2hhcGVGbGFnJjY/ZHJbZHIuaW5kZXhPZihvKV09Rjpkci5wdXNoKEYpKSxGLnBhdGNoRmxhZ3w9LTIsRn1pZihFcyhvKSYmKG89by5fX3ZjY09wdHMpLGMpe2M9RnQoYyk7dmFye2NsYXNzOkssc3R5bGU6V309YztLJiYhXy5pc1N0cmluZyhLKSYmKGMuY2xhc3M9Xy5ub3JtYWxpemVDbGFzcyhLKSksXy5pc09iamVjdChXKSYmKEkuaXNQcm94eShXKSYmIV8uaXNBcnJheShXKSYmKFc9Xy5leHRlbmQoe30sVykpLGMuc3R5bGU9Xy5ub3JtYWxpemVTdHlsZShXKSl9dmFyIGllPV8uaXNTdHJpbmcobyk/MTpQaShvKT8xMjg6RGEobyk/NjQ6Xy5pc09iamVjdChvKT80Ol8uaXNGdW5jdGlvbihvKT8yOjA7cmV0dXJuIE1zKG8sYyx2LFMsUCxpZSxULCEwKX1mdW5jdGlvbiBGdChvKXtyZXR1cm4gbz9JLmlzUHJveHkobyl8fHRpIGluIG8/Xy5leHRlbmQoe30sbyk6bzpudWxsfWZ1bmN0aW9uIGxuKG8sYyl7dmFyIHY9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiExLHtwcm9wczpTLHJlZjpQLHBhdGNoRmxhZzpULGNoaWxkcmVuOkZ9PW8sSz1jP3ZzKFN8fHt9LGMpOlMsVz17X192X2lzVk5vZGU6ITAsX192X3NraXA6ITAsdHlwZTpvLnR5cGUscHJvcHM6SyxrZXk6SyYmQmkoSykscmVmOmMmJmMucmVmP3YmJlA/Xy5pc0FycmF5KFApP1AuY29uY2F0KFZyKGMpKTpbUCxWcihjKV06VnIoYyk6UCxzY29wZUlkOm8uc2NvcGVJZCxzbG90U2NvcGVJZHM6by5zbG90U2NvcGVJZHMsY2hpbGRyZW46Rix0YXJnZXQ6by50YXJnZXQsdGFyZ2V0QW5jaG9yOm8udGFyZ2V0QW5jaG9yLHN0YXRpY0NvdW50Om8uc3RhdGljQ291bnQsc2hhcGVGbGFnOm8uc2hhcGVGbGFnLHBhdGNoRmxhZzpjJiZvLnR5cGUhPT1Ubj9UPT09LTE/MTY6VHwxNjpULGR5bmFtaWNQcm9wczpvLmR5bmFtaWNQcm9wcyxkeW5hbWljQ2hpbGRyZW46by5keW5hbWljQ2hpbGRyZW4sYXBwQ29udGV4dDpvLmFwcENvbnRleHQsaG9zdEluc3RhbmNlOm8uaG9zdEluc3RhbmNlLGRpcnM6by5kaXJzLHRyYW5zaXRpb246by50cmFuc2l0aW9uLGNvbXBvbmVudDpvLmNvbXBvbmVudCxzdXNwZW5zZTpvLnN1c3BlbnNlLHNzQ29udGVudDpvLnNzQ29udGVudCYmbG4oby5zc0NvbnRlbnQpLHNzRmFsbGJhY2s6by5zc0ZhbGxiYWNrJiZsbihvLnNzRmFsbGJhY2spLGVsOm8uZWwsYW5jaG9yOm8uYW5jaG9yLGN0eDpvLmN0eCxjZTpvLmNlfTtyZXR1cm4gV31mdW5jdGlvbiBIdCgpe3ZhciBvPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXToiICIsYz1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06MDtyZXR1cm4geWUoaWEsbnVsbCxvLGMpfWZ1bmN0aW9uIHFyKG8sYyl7dmFyIHY9eWUoa28sbnVsbCxvKTtyZXR1cm4gdi5zdGF0aWNDb3VudD1jLHZ9ZnVuY3Rpb24gVXIoKXt2YXIgbz1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06IiIsYz1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITE7cmV0dXJuIGM/KGhyKCksbXIoR3IsbnVsbCxvKSk6eWUoR3IsbnVsbCxvKX1mdW5jdGlvbiBPbihvKXtyZXR1cm4gbz09bnVsbHx8dHlwZW9mIG89PSJib29sZWFuIj95ZShHcik6Xy5pc0FycmF5KG8pP3llKFRuLG51bGwsby5zbGljZSgpKTp0eXBlb2Ygbz09Im9iamVjdCI/TGkobyk6eWUoaWEsbnVsbCxTdHJpbmcobykpfWZ1bmN0aW9uIExpKG8pe3JldHVybiBvLmVsPT09bnVsbCYmby5wYXRjaEZsYWchPT0tMXx8by5tZW1vP286bG4obyl9ZnVuY3Rpb24gcHMobyxjKXt2YXIgdj0wLHtzaGFwZUZsYWc6U309bztpZihjPT1udWxsKWM9bnVsbDtlbHNlIGlmKF8uaXNBcnJheShjKSl2PTE2O2Vsc2UgaWYodHlwZW9mIGM9PSJvYmplY3QiKWlmKFMmKDF8NjQpKXt2YXIgUD1jLmRlZmF1bHQ7UCYmKFAuX2MmJihQLl9kPSExKSxwcyhvLFAoKSksUC5fYyYmKFAuX2Q9ITApKTtyZXR1cm59ZWxzZXt2PTMyO3ZhciBUPWMuXzshVCYmISh0aSBpbiBjKT9jLl9jdHg9eG46VD09PTMmJnhuJiYoeG4uc2xvdHMuXz09PTE/Yy5fPTE6KGMuXz0yLG8ucGF0Y2hGbGFnfD0xMDI0KSl9ZWxzZSBfLmlzRnVuY3Rpb24oYyk/KGM9e2RlZmF1bHQ6YyxfY3R4OnhufSx2PTMyKTooYz1TdHJpbmcoYyksUyY2ND8odj0xNixjPVtIdChjKV0pOnY9OCk7by5jaGlsZHJlbj1jLG8uc2hhcGVGbGFnfD12fWZ1bmN0aW9uIHZzKCl7Zm9yKHZhciBvPXt9LGM9MDtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKXt2YXIgdj1jPDB8fGFyZ3VtZW50cy5sZW5ndGg8PWM/dm9pZCAwOmFyZ3VtZW50c1tjXTtmb3IodmFyIFMgaW4gdilpZihTPT09ImNsYXNzIilvLmNsYXNzIT09di5jbGFzcyYmKG8uY2xhc3M9Xy5ub3JtYWxpemVDbGFzcyhbby5jbGFzcyx2LmNsYXNzXSkpO2Vsc2UgaWYoUz09PSJzdHlsZSIpby5zdHlsZT1fLm5vcm1hbGl6ZVN0eWxlKFtvLnN0eWxlLHYuc3R5bGVdKTtlbHNlIGlmKF8uaXNPbihTKSl7dmFyIFA9b1tTXSxUPXZbU107VCYmUCE9PVQmJiEoXy5pc0FycmF5KFApJiZQLmluY2x1ZGVzKFQpKSYmKG9bU109UD9bXS5jb25jYXQoUCxUKTpUKX1lbHNlIFMhPT0iIiYmKG9bU109dltTXSl9cmV0dXJuIG99ZnVuY3Rpb24gJG4obyxjLHYpe3ZhciBTPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTpudWxsO1NuKG8sYyw3LFt2LFNdKX12YXIgeWE9SXIoKSxFYT0wO2Z1bmN0aW9uIG9sKG8sYyx2KXt2YXIgUz1vLnR5cGUsUD0oYz9jLmFwcENvbnRleHQ6by5hcHBDb250ZXh0KXx8eWEsVD17dWlkOkVhKyssdm5vZGU6byx0eXBlOlMscGFyZW50OmMsYXBwQ29udGV4dDpQLHJvb3Q6bnVsbCxuZXh0Om51bGwsc3ViVHJlZTpudWxsLGVmZmVjdDpudWxsLHVwZGF0ZTpudWxsLHNjb3BlOm5ldyBJLkVmZmVjdFNjb3BlKCEwKSxyZW5kZXI6bnVsbCxwcm94eTpudWxsLGV4cG9zZWQ6bnVsbCxleHBvc2VQcm94eTpudWxsLHdpdGhQcm94eTpudWxsLHByb3ZpZGVzOmM/Yy5wcm92aWRlczpPYmplY3QuY3JlYXRlKFAucHJvdmlkZXMpLGFjY2Vzc0NhY2hlOm51bGwscmVuZGVyQ2FjaGU6W10sY29tcG9uZW50czpudWxsLGRpcmVjdGl2ZXM6bnVsbCxwcm9wc09wdGlvbnM6WChTLFApLGVtaXRzT3B0aW9uczp1YShTLFApLGVtaXQ6bnVsbCxlbWl0dGVkOm51bGwscHJvcHNEZWZhdWx0czpfLkVNUFRZX09CSixpbmhlcml0QXR0cnM6Uy5pbmhlcml0QXR0cnMsY3R4Ol8uRU1QVFlfT0JKLGRhdGE6Xy5FTVBUWV9PQkoscHJvcHM6Xy5FTVBUWV9PQkosYXR0cnM6Xy5FTVBUWV9PQkosc2xvdHM6Xy5FTVBUWV9PQkoscmVmczpfLkVNUFRZX09CSixzZXR1cFN0YXRlOl8uRU1QVFlfT0JKLHNldHVwQ29udGV4dDpudWxsLGF0dHJzUHJveHk6bnVsbCxzbG90c1Byb3h5Om51bGwsc3VzcGVuc2U6dixzdXNwZW5zZUlkOnY/di5wZW5kaW5nSWQ6MCxhc3luY0RlcDpudWxsLGFzeW5jUmVzb2x2ZWQ6ITEsaXNNb3VudGVkOiExLGlzVW5tb3VudGVkOiExLGlzRGVhY3RpdmF0ZWQ6ITEsYmM6bnVsbCxjOm51bGwsYm06bnVsbCxtOm51bGwsYnU6bnVsbCx1Om51bGwsdW06bnVsbCxidW06bnVsbCxkYTpudWxsLGE6bnVsbCxydGc6bnVsbCxydGM6bnVsbCxlYzpudWxsLHNwOm51bGx9O3JldHVybiBULmN0eD17XzpUfSxULnJvb3Q9Yz9jLnJvb3Q6VCxULmVtaXQ9WG8uYmluZChudWxsLFQpLG8uY2UmJm8uY2UoVCksVH12YXIgRW49bnVsbCxTYT0oKT0+RW58fHhuLERzLEZzO3t2YXIgb3I9Xy5nZXRHbG9iYWxUaGlzKCksTWk9KG8sYyk9Pnt2YXIgdjtyZXR1cm4odj1vcltvXSl8fCh2PW9yW29dPVtdKSx2LnB1c2goYyksUz0+e3YubGVuZ3RoPjE/di5mb3JFYWNoKFA9PlAoUykpOnZbMF0oUyl9fTtEcz1NaSgiX19WVUVfSU5TVEFOQ0VfU0VUVEVSU19fIixvPT5Fbj1vKSxGcz1NaSgiX19WVUVfU1NSX1NFVFRFUlNfXyIsbz0+aC5pc0luU1NSQ29tcG9uZW50U2V0dXA9byl9dmFyIERpPW89Pnt2YXIgYz1FbjtyZXR1cm4gRHMobyksby5zY29wZS5vbigpLCgpPT57by5zY29wZS5vZmYoKSxEcyhjKX19LHFvPSgpPT57RW4mJkVuLnNjb3BlLm9mZigpLERzKG51bGwpfTtmdW5jdGlvbiBtcyhvKXtyZXR1cm4gby52bm9kZS5zaGFwZUZsYWcmNH1oLmlzSW5TU1JDb21wb25lbnRTZXR1cD0hMTtmdW5jdGlvbiBWcyhvKXt2YXIgYz1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITE7YyYmRnMoYyk7dmFye3Byb3BzOnYsY2hpbGRyZW46U309by52bm9kZSxQPW1zKG8pO0wobyx2LFAsYyksdnQobyxTKTt2YXIgVD1QP1hpKG8sYyk6dm9pZCAwO3JldHVybiBjJiZGcyghMSksVH1mdW5jdGlvbiBYaShvLGMpe3ZhciB2PW8udHlwZTtvLmFjY2Vzc0NhY2hlPU9iamVjdC5jcmVhdGUobnVsbCksby5wcm94eT1JLm1hcmtSYXcobmV3IFByb3h5KG8uY3R4LHZyKSk7dmFye3NldHVwOlN9PXY7aWYoUyl7dmFyIFA9by5zZXR1cENvbnRleHQ9Uy5sZW5ndGg+MT95cyhvKTpudWxsLFQ9RGkobyk7SS5wYXVzZVRyYWNraW5nKCk7dmFyIEY9Y24oUyxvLDAsW28ucHJvcHMsUF0pO2lmKEkucmVzZXRUcmFja2luZygpLFQoKSxfLmlzUHJvbWlzZShGKSl7aWYoRi50aGVuKHFvLHFvKSxjKXJldHVybiBGLnRoZW4oSz0+e1ZhKG8sSyxjKX0pLmNhdGNoKEs9PntHbihLLG8sMCl9KTtvLmFzeW5jRGVwPUZ9ZWxzZSBWYShvLEYsYyl9ZWxzZSBRYShvLGMpfWZ1bmN0aW9uIFZhKG8sYyx2KXtfLmlzRnVuY3Rpb24oYyk/by50eXBlLl9fc3NySW5saW5lUmVuZGVyP28uc3NyUmVuZGVyPWM6by5yZW5kZXI9YzpfLmlzT2JqZWN0KGMpJiYoby5zZXR1cFN0YXRlPUkucHJveHlSZWZzKGMpKSxRYShvLHYpfXZhciBfcyxYYTtmdW5jdGlvbiBGbChvKXtfcz1vLFhhPWM9PntjLnJlbmRlci5fcmMmJihjLndpdGhQcm94eT1uZXcgUHJveHkoYy5jdHgsZGEpKX19dmFyIFVzPSgpPT4hX3M7ZnVuY3Rpb24gUWEobyxjLHYpe3ZhciBTPW8udHlwZTtpZighby5yZW5kZXIpe2lmKCFjJiZfcyYmIVMucmVuZGVyKXt2YXIgUD1TLnRlbXBsYXRlfHxMYShvKS50ZW1wbGF0ZTtpZihQKXt2YXJ7aXNDdXN0b21FbGVtZW50OlQsY29tcGlsZXJPcHRpb25zOkZ9PW8uYXBwQ29udGV4dC5jb25maWcse2RlbGltaXRlcnM6Syxjb21waWxlck9wdGlvbnM6V309UyxpZT1fLmV4dGVuZChfLmV4dGVuZCh7aXNDdXN0b21FbGVtZW50OlQsZGVsaW1pdGVyczpLfSxGKSxXKTtTLnJlbmRlcj1fcyhQLGllKX19by5yZW5kZXI9Uy5yZW5kZXJ8fF8uTk9PUCxYYSYmWGEobyl9e3ZhciBSZT1EaShvKTtJLnBhdXNlVHJhY2tpbmcoKTt0cnl7UnMobyl9ZmluYWxseXtJLnJlc2V0VHJhY2tpbmcoKSxSZSgpfX19ZnVuY3Rpb24gYnMobyl7cmV0dXJuIG8uYXR0cnNQcm94eXx8KG8uYXR0cnNQcm94eT1uZXcgUHJveHkoby5hdHRycyx7Z2V0KGMsdil7cmV0dXJuIEkudHJhY2sobywiZ2V0IiwiJGF0dHJzIiksY1t2XX19KSl9ZnVuY3Rpb24geXMobyl7dmFyIGM9dj0+e28uZXhwb3NlZD12fHx7fX07cmV0dXJue2dldCBhdHRycygpe3JldHVybiBicyhvKX0sc2xvdHM6by5zbG90cyxlbWl0Om8uZW1pdCxleHBvc2U6Y319ZnVuY3Rpb24gJHMobyl7aWYoby5leHBvc2VkKXJldHVybiBvLmV4cG9zZVByb3h5fHwoby5leHBvc2VQcm94eT1uZXcgUHJveHkoSS5wcm94eVJlZnMoSS5tYXJrUmF3KG8uZXhwb3NlZCkpLHtnZXQoYyx2KXtpZih2IGluIGMpcmV0dXJuIGNbdl07aWYodiBpbiBOcilyZXR1cm4gTnJbdl0obyl9LGhhcyhjLHYpe3JldHVybiB2IGluIGN8fHYgaW4gTnJ9fSkpfXZhciBhbD0vKD86XnxbLV9dKShcdykvZyxFYz1vPT5vLnJlcGxhY2UoYWwsYz0+Yy50b1VwcGVyQ2FzZSgpKS5yZXBsYWNlKC9bLV9dL2csIiIpO2Z1bmN0aW9uIFFpKG8pe3ZhciBjPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMDtyZXR1cm4gXy5pc0Z1bmN0aW9uKG8pP28uZGlzcGxheU5hbWV8fG8ubmFtZTpvLm5hbWV8fGMmJm8uX19uYW1lfWZ1bmN0aW9uIG9hKG8sYyl7dmFyIHY9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiExLFM9UWkoYyk7aWYoIVMmJmMuX19maWxlKXt2YXIgUD1jLl9fZmlsZS5tYXRjaCgvKFteL1xcXSspXC5cdyskLyk7UCYmKFM9UFsxXSl9aWYoIVMmJm8mJm8ucGFyZW50KXt2YXIgVD1GPT57Zm9yKHZhciBLIGluIEYpaWYoRltLXT09PWMpcmV0dXJuIEt9O1M9VChvLmNvbXBvbmVudHN8fG8ucGFyZW50LnR5cGUuY29tcG9uZW50cyl8fFQoby5hcHBDb250ZXh0LmNvbXBvbmVudHMpfXJldHVybiBTP0VjKFMpOnY/IkFwcCI6IkFub255bW91cyJ9ZnVuY3Rpb24gRXMobyl7cmV0dXJuIF8uaXNGdW5jdGlvbihvKSYmIl9fdmNjT3B0cyJpbiBvfXZhciBlcz0obyxjKT0+e3ZhciB2PUkuY29tcHV0ZWQobyxjLGguaXNJblNTUkNvbXBvbmVudFNldHVwKTtyZXR1cm4gdn07ZnVuY3Rpb24gdHMobyxjKXt2YXIgdj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06Xy5FTVBUWV9PQkosUz1TYSgpLFA9Xy5jYW1lbGl6ZShjKSxUPV8uaHlwaGVuYXRlKGMpLEY9SS5jdXN0b21SZWYoKFcsaWUpPT57dmFyIFJlO3JldHVybiBsbygoKT0+e3ZhciBXZT1vW2NdO18uaGFzQ2hhbmdlZChSZSxXZSkmJihSZT1XZSxpZSgpKX0pLHtnZXQoKXtyZXR1cm4gVygpLHYuZ2V0P3YuZ2V0KFJlKTpSZX0sc2V0KFdlKXt2YXIgZWU9Uy52bm9kZS5wcm9wczshKGVlJiYoYyBpbiBlZXx8UCBpbiBlZXx8VCBpbiBlZSkmJigib25VcGRhdGU6Ii5jb25jYXQoYylpbiBlZXx8Im9uVXBkYXRlOiIuY29uY2F0KFApaW4gZWV8fCJvblVwZGF0ZToiLmNvbmNhdChUKWluIGVlKSkmJl8uaGFzQ2hhbmdlZChXZSxSZSkmJihSZT1XZSxpZSgpKSxTLmVtaXQoInVwZGF0ZToiLmNvbmNhdChjKSx2LnNldD92LnNldChXZSk6V2UpfX19KSxLPWM9PT0ibW9kZWxWYWx1ZSI/Im1vZGVsTW9kaWZpZXJzIjoiIi5jb25jYXQoYywiTW9kaWZpZXJzIik7cmV0dXJuIEZbU3ltYm9sLml0ZXJhdG9yXT0oKT0+e3ZhciBXPTA7cmV0dXJue25leHQoKXtyZXR1cm4gVzwyP3t2YWx1ZTpXKys/b1tLXXx8e306Rixkb25lOiExfTp7ZG9uZTohMH19fX0sRn1mdW5jdGlvbiBTcyhvLGMsdil7dmFyIFM9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gUz09PTI/Xy5pc09iamVjdChjKSYmIV8uaXNBcnJheShjKT9maShjKT95ZShvLG51bGwsW2NdKTp5ZShvLGMpOnllKG8sbnVsbCxjKTooUz4zP3Y9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpOlM9PT0zJiZmaSh2KSYmKHY9W3ZdKSx5ZShvLGMsdikpfWZ1bmN0aW9uIHNsKCl7fWZ1bmN0aW9uIGxsKG8sYyx2LFMpe3ZhciBQPXZbU107aWYoUCYmY2woUCxvKSlyZXR1cm4gUDt2YXIgVD1jKCk7cmV0dXJuIFQubWVtbz1vLnNsaWNlKCksdltTXT1UfWZ1bmN0aW9uIGNsKG8sYyl7dmFyIHY9by5tZW1vO2lmKHYubGVuZ3RoIT1jLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIFM9MDtTPHYubGVuZ3RoO1MrKylpZihfLmhhc0NoYW5nZWQodltTXSxjW1NdKSlyZXR1cm4hMTtyZXR1cm4gdWk+MCYmZHImJmRyLnB1c2gobyksITB9dmFyIEhzPSIzLjQuMjEiLHVsPV8uTk9PUCxWbD1KdCxucz16cixTaT1vbyxZbz17Y3JlYXRlQ29tcG9uZW50SW5zdGFuY2U6b2wsc2V0dXBDb21wb25lbnQ6VnMscmVuZGVyQ29tcG9uZW50Um9vdDpUaSxzZXRDdXJyZW50UmVuZGVyaW5nSW5zdGFuY2U6YWksaXNWTm9kZTpmaSxub3JtYWxpemVWTm9kZTpPbn0sVWw9WW8sU2M9bnVsbCx3Yz1udWxsLCRsPW51bGwsQ2M9e2luc2VydDoobyxjLHYpPT52P2MuaW5zZXJ0QmVmb3JlKG8sdik6Yy5hcHBlbmRDaGlsZChvKSxyZW1vdmU6bz0+e3ZhciBjPW8ucGFyZW50Tm9kZTtjJiZjLnJlbW92ZUNoaWxkKG8pfSxjcmVhdGVFbGVtZW50Om89PnMuY3JlYXRlRWxlbWVudChvKSxjcmVhdGVUZXh0Om89PnMuY3JlYXRlVGV4dChvKSxjcmVhdGVDb21tZW50Om89PnMuY3JlYXRlQ29tbWVudChvKSxzZXRUZXh0OihvLGMpPT57by5zZXRBdHRyKCJ2YWx1ZSIsYyl9LHNldEVsZW1lbnRUZXh0OihvLGMpPT57by5zZXRBdHRyKCJ2YWx1ZSIsYyl9LHBhcmVudE5vZGU6bz0+by5wYXJlbnROb2RlLG5leHRTaWJsaW5nOm89Pm8ubmV4dFNpYmxpbmd9O2Z1bmN0aW9uIHJzKG8pe3JldHVybiBPYmplY3Qua2V5cyhvKX1mdW5jdGlvbiBqcyhvKXt2YXIgYz17fTtyZXR1cm4gXy5pc0FycmF5KG8pJiZvLmZvckVhY2godj0+e3JzKHYpLmZvckVhY2goUz0+e3ZhciBQPXZbU10sVD1jW1NdfHwoY1tTXT17fSk7cnMoUCkuZm9yRWFjaChGPT57dmFyIEs9UFtGXSxXPVRbRl18fChUW0ZdPXt9KTtycyhLKS5mb3JFYWNoKGllPT57aWVbMF09PT0iISI/KFdbaWVdPUtbaWVdLGRlbGV0ZSBXW2llLnNsaWNlKDEpXSk6Xy5oYXNPd24oVywiISIraWUpfHwoV1tpZV09S1tpZV0pfSl9KX0pfSksY31mdW5jdGlvbiBIbChvLGMpe3ZhciB2PWMmJmMuY2xhc3NMaXN0O3JldHVybiB2JiZ2LmluY2x1ZGVzKG8pfXZhciB6cz0vWyt+PiBdJC8sd3M9InBhcmVudE5vZGUiLENzPSJwcmV2aW91c1NpYmxpbmciO2Z1bmN0aW9uIFdzKG8sYyl7Zm9yKHZhciB2PW8uc3BsaXQoIi4iKSxTPXYubGVuZ3RoLTE7Uz4wO1MtLSl7dmFyIFA9dltTXSxUPVBbUC5sZW5ndGgtMV0sRj1QLnJlcGxhY2UoenMsIiIpO2lmKFQ9PT0ifiJ8fFQ9PT0iICIpe2Zvcih2YXIgSz1UPT09In4iP0NzOndzO2MmJihjPWNbS10sIUhsKEYsYykpOyk7aWYoIWMpcmV0dXJuITF9ZWxzZSBpZihUPT09Ij4iP2M9YyYmY1t3c106VD09PSIrIiYmKGM9YyYmY1tDc10pLCFIbChGLGMpKXJldHVybiExfXJldHVybiEwfXZhciBmbD0xZTM7ZnVuY3Rpb24gamwobyxjLHYpe3ZhcntzdHlsZXM6Uyx3ZWlnaHRzOlB9PW87cnMoYykuZm9yRWFjaChUPT57aWYoIShUJiZ2JiYhV3MoVCx2KSkpe3ZhciBGPVQuc3BsaXQoIi4iKS5sZW5ndGgsSz1jW1RdO3JzKEspLmZvckVhY2goVz0+e3ZhciBpZT1LW1ddLFJlPVdbMF09PT0iISI7UmUmJihXPVcuc2xpY2UoMSkpO3ZhciBXZT1QW1ddfHwwLGVlPUYrKFJlP2ZsOjApO2VlPj1XZSYmKFBbV109ZWUsU1tXXT1pZSl9KX19KX1mdW5jdGlvbiB6bChvLGMpe3ZhciB2PWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTpudWxsLFM9e3N0eWxlczp7fSx3ZWlnaHRzOnt9fTtyZXR1cm4gby5mb3JFYWNoKFA9Pnt2YXIgVD1jW1BdO1QmJmpsKFMsVCx2KX0pLFMuc3R5bGVzfWZ1bmN0aW9uIEFjKG8pe3JldHVybiB6bChvLmNsYXNzTGlzdCxvLnN0eWxlU2hlZXQsbyl9ZnVuY3Rpb24gZGwobyxjKXt2YXIgdj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06bnVsbDtyZXR1cm4gemwobyxobChjKSx2KX1mdW5jdGlvbiBobChvKXt2YXJ7dHlwZTpjLGFwcENvbnRleHQ6dn09byxTPWM7aWYoIVMuX19zdHlsZXMpaWYodiYmXy5pc0FycmF5KHYucHJvdmlkZXMuX19nbG9iYWxTdHlsZXMpJiYodi5wcm92aWRlcy5fX2dsb2JhbFN0eWxlcz1qcyh2LnByb3ZpZGVzLl9fZ2xvYmFsU3R5bGVzKSksUy5tcFR5cGU9PT0icGFnZSImJnYpUy5fX3N0eWxlcz12LnByb3ZpZGVzLl9fZ2xvYmFsU3R5bGVzO2Vsc2V7dmFyIFA9W107diYmUC5wdXNoKHYucHJvdmlkZXMuX19nbG9iYWxTdHlsZXMpLF8uaXNBcnJheShTLnN0eWxlcykmJlMuc3R5bGVzLmZvckVhY2goVD0+UC5wdXNoKFQpKSxTLl9fc3R5bGVzPWpzKFApfXJldHVybiBTLl9fc3R5bGVzfWZ1bmN0aW9uIFRjKG8sYyx2KXt2YXIgUz1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106bnVsbDtTJiYoW2Msdl09WWwobyxjLHYsUykpLG8uc2V0QXR0cihjLHYpfXZhciBBcz0iaG92ZXJDbGFzcyIsV2w9InBsYWNlaG9sZGVyQ2xhc3MiLEdsPSJwbGFjZWhvbGRlclN0eWxlIixPYz0iaW5kaWNhdG9yQ2xhc3MiLFBjPSJpbmRpY2F0b3JTdHlsZSIscWw9Im1hc2tDbGFzcyIsTmM9Im1hc2tTdHlsZSIsZ2w9e3ZpZXc6e2NsYXNzOltBc10sc3R5bGU6W119LGJ1dHRvbjp7Y2xhc3M6W0FzXSxzdHlsZTpbXX0sbmF2aWdhdG9yOntjbGFzczpbQXNdLHN0eWxlOltdfSwidS1pbnB1dCI6e2NsYXNzOltXbF0sc3R5bGU6W0dsXX0sInUtdGV4dGFyZWEiOntjbGFzczpbV2xdLHN0eWxlOltHbF19LCJwaWNrZXItdmlldyI6e2NsYXNzOltPYyxxbF0sc3R5bGU6W1BjLE5jXX19O2Z1bmN0aW9uIFlsKG8sYyx2LFMpe2lmKCF2KXJldHVybltjLHZdO3ZhciBQPWdsW28udHlwZV07aWYoUCl7dmFyIFQ9Xy5jYW1lbGl6ZShjKTtpZihQLmNsYXNzLmluZGV4T2YoVCk+LTEpcmV0dXJuW1QsZGwoW3ZdLFMsbyldO2lmKFAuc3R5bGUuaW5kZXhPZihjKT4tMSlyZXR1cm4gXy5pc1N0cmluZyh2KT9bVCxfLnBhcnNlU3RyaW5nU3R5bGUodildOltULF8ubm9ybWFsaXplU3R5bGUodildfXJldHVybltjLHZdfWZ1bmN0aW9uIGFhKG8sYyx2KXt2YXIgUz1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106bnVsbDtpZighIVMpe3ZhciBQPXY/di5zcGxpdCgiICIpOltdO28uc2V0Q2xhc3NMaXN0KFApLG8uc2V0U3R5bGVTaGVldChobChTKSl9fWZ1bmN0aW9uIFVhKG8sYyx2LFMpe28uYWRkRXZlbnQoYyx2KX1mdW5jdGlvbiBuaShvLGMpe28ucmVtb3ZlRXZlbnQoYyl9ZnVuY3Rpb24gZW8obyxjLHYsUyl7dmFyIFA9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOm51bGwsVD1vLl92ZWl8fChvLl92ZWk9e30pLEY9VFtjXTtpZihTJiZGKUYudmFsdWU9UztlbHNle3ZhcltLLFddPUtsKGMpO2lmKFMpe3ZhciBpZT1UW2NdPXdhKFMsUCk7VWEobyxLLGllKX1lbHNlIEYmJihuaShvLEspLFRbY109dm9pZCAwKX19dmFyIHBsPS8oPzpPbmNlfFBhc3NpdmV8Q2FwdHVyZSkkLztmdW5jdGlvbiBGaShvKXtyZXR1cm4gbz09PSJvbi1wb3N0LW1lc3NhZ2UiPyJvblBvc3RNZXNzYWdlIjpvfWZ1bmN0aW9uIEtsKG8pe3ZhciBjO2lmKHBsLnRlc3Qobykpe2M9e307Zm9yKHZhciB2O3Y9by5tYXRjaChwbCk7KW89by5zbGljZSgwLG8ubGVuZ3RoLXZbMF0ubGVuZ3RoKSxjW3ZbMF0udG9Mb3dlckNhc2UoKV09ITB9dmFyIFM9b1syXT09PSI6Ij9vLnNsaWNlKDMpOl8uaHlwaGVuYXRlKG8uc2xpY2UoMikpO3JldHVybltGaShTKSxjXX1mdW5jdGlvbiB3YShvLGMpe3ZhciB2PVA9PntTbih2LnZhbHVlLGMsNSxbUF0pfTt2LnZhbHVlPW87dmFyIFM9bmV3IFNldDtyZXR1cm4gXy5pc0FycmF5KHYudmFsdWUpP3YudmFsdWUuZm9yRWFjaChQPT57UC5tb2RpZmllcnMmJlAubW9kaWZpZXJzLmZvckVhY2goVD0+e1MuYWRkKFQpfSl9KTp2LnZhbHVlLm1vZGlmaWVycyYmdi52YWx1ZS5tb2RpZmllcnMuZm9yRWFjaChQPT57Uy5hZGQoUCl9KSx2Lm1vZGlmaWVycz1bLi4uU10sdn1mdW5jdGlvbiBJYyhvLGMsdil7aWYoISF2KXtfLmlzU3RyaW5nKHYpJiYodj1fLnBhcnNlU3RyaW5nU3R5bGUodikpO3ZhciBTPXt9LFA9YyYmIV8uaXNTdHJpbmcoYyk7aWYoUCl7Zm9yKHZhciBUIGluIGMpdltUXT09bnVsbCYmKFNbXy5jYW1lbGl6ZShUKV09IiIpO2Zvcih2YXIgRiBpbiB2KXt2YXIgSz12W0ZdO0shPT1jW0ZdJiYoU1tfLmNhbWVsaXplKEYpXT1LKX19ZWxzZSBmb3IodmFyIFcgaW4gdilTW18uY2FtZWxpemUoVyldPXZbV107by5zZXRTdHlsZXMoUyl9fXZhciB2bD1bInUtaW5wdXQiLCJ1LXRleHRhcmVhIl0sZGk9KG8sYyx2LFMsUCxULEYsSyxXLGllKT0+e2M9PT0iY2xhc3MiP2FhKG8sdixTLGllfHxGKTpjPT09InN0eWxlIj9JYyhvLHYsUyk6Xy5pc09uKGMpP18uaXNNb2RlbExpc3RlbmVyKGMpfHxlbyhvLGMsdixTLEYpOmM9PT0ibW9kZWxWYWx1ZSImJnZsLmluY2x1ZGVzKG8udHlwZSk/by5zZXRBdHRycyh7bW9kZWxWYWx1ZTpTLHZhbHVlOlN9KTpUYyhvLGMsUyxGKX07ZnVuY3Rpb24gQ2EoKXt2YXIgbz1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06IiRzdHlsZSI7e3ZhciBjPVNhKCk7aWYoIWMpcmV0dXJuIF8uRU1QVFlfT0JKO3ZhciB2PWMudHlwZS5fX2Nzc01vZHVsZXM7aWYoIXYpcmV0dXJuIF8uRU1QVFlfT0JKO3ZhciBTPXZbb107cmV0dXJuIFN8fF8uRU1QVFlfT0JKfX1mdW5jdGlvbiB4byhvKXt2YXIgYz1TYSgpO2lmKCEhYyl7dmFyIHY9KCk9PkdzKGMuc3ViVHJlZSxvKGMucHJveHkpKTtmbygoKT0+TXIodix7Zmx1c2g6InBvc3QifSkpLGNpKHYpfX1mdW5jdGlvbiBHcyhvLGMpe2lmKG8uc2hhcGVGbGFnJjEyOCl7dmFyIHY9by5zdXNwZW5zZTtvPXYuYWN0aXZlQnJhbmNoLHYucGVuZGluZ0JyYW5jaCYmIXYuaXNIeWRyYXRpbmcmJnYuZWZmZWN0cy5wdXNoKCgpPT57R3Modi5hY3RpdmVCcmFuY2gsYyl9KX1mb3IoO28uY29tcG9uZW50OylvPW8uY29tcG9uZW50LnN1YlRyZWU7aWYoby5zaGFwZUZsYWcmMSYmby5lbCl7dmFyIFM9by5lbC5zdHlsZTtmb3IodmFyIFAgaW4gYylTLnNldFByb3BlcnR5KCItLSIuY29uY2F0KFApLGNbUF0pfWVsc2Ugby50eXBlPT09VG4mJm8uY2hpbGRyZW4uZm9yRWFjaChUPT5HcyhULGMpKX12YXIgdG89WyJjdHJsIiwic2hpZnQiLCJhbHQiLCJtZXRhIl0sSmw9e3N0b3A6bz0+by5zdG9wUHJvcGFnYXRpb24oKSxwcmV2ZW50Om89Pm8ucHJldmVudERlZmF1bHQoKSxzZWxmOm89Pm8udGFyZ2V0IT09by5jdXJyZW50VGFyZ2V0LGN0cmw6bz0+IW8uY3RybEtleSxzaGlmdDpvPT4hby5zaGlmdEtleSxhbHQ6bz0+IW8uYWx0S2V5LG1ldGE6bz0+IW8ubWV0YUtleSxsZWZ0Om89PiJidXR0b24iaW4gbyYmby5idXR0b24hPT0wLG1pZGRsZTpvPT4iYnV0dG9uImluIG8mJm8uYnV0dG9uIT09MSxyaWdodDpvPT4iYnV0dG9uImluIG8mJm8uYnV0dG9uIT09MixleGFjdDoobyxjKT0+dG8uc29tZSh2PT5vWyIiLmNvbmNhdCh2LCJLZXkiKV0mJiFjLmluY2x1ZGVzKHYpKX0scXM9KG8sYyk9PmZ1bmN0aW9uKHYpe2Zvcih2YXIgUz0wO1M8Yy5sZW5ndGg7UysrKXt2YXIgUD1KbFtjW1NdXTtpZihQJiZQKHYsYykpcmV0dXJufWZvcih2YXIgVD1hcmd1bWVudHMubGVuZ3RoLEY9bmV3IEFycmF5KFQ+MT9ULTE6MCksSz0xO0s8VDtLKyspRltLLTFdPWFyZ3VtZW50c1tLXTtyZXR1cm4gbyh2LC4uLkYpfSxabD0obyxjKT0+dj0+e2lmKCJrZXkiaW4gdil7dmFyIFM9Xy5oeXBoZW5hdGUodi5rZXkpO2lmKGMuc29tZShQPT5QPT09UykpcmV0dXJuIG8odil9fSxYbD1fLmV4dGVuZCh7cGF0Y2hQcm9wOmRpfSxDYyksaXM7ZnVuY3Rpb24gbWwoKXtyZXR1cm4gaXN8fChpcz1CbihYbCkpfXZhciBRbD1mdW5jdGlvbigpe21sKCkucmVuZGVyKC4uLmFyZ3VtZW50cyl9LGtjPWZ1bmN0aW9uKCl7dmFyIG89bWwoKS5jcmVhdGVBcHAoLi4uYXJndW1lbnRzKSx7bW91bnQ6Y309bztyZXR1cm4gby5tb3VudD12PT5jKHYpLG99O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwiY2FtZWxpemUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBfLmNhbWVsaXplfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJjYXBpdGFsaXplIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gXy5jYXBpdGFsaXplfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJoeXBoZW5hdGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBfLmh5cGhlbmF0ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwibm9ybWFsaXplQ2xhc3MiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBfLm5vcm1hbGl6ZUNsYXNzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJub3JtYWxpemVQcm9wcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF8ubm9ybWFsaXplUHJvcHN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsIm5vcm1hbGl6ZVN0eWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gXy5ub3JtYWxpemVTdHlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwidG9EaXNwbGF5U3RyaW5nIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gXy50b0Rpc3BsYXlTdHJpbmd9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsInRvSGFuZGxlcktleSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF8udG9IYW5kbGVyS2V5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJFZmZlY3RTY29wZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuRWZmZWN0U2NvcGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsIlJlYWN0aXZlRWZmZWN0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5SZWFjdGl2ZUVmZmVjdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwiVHJhY2tPcFR5cGVzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5UcmFja09wVHlwZXN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsIlRyaWdnZXJPcFR5cGVzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5UcmlnZ2VyT3BUeXBlc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwiY3VzdG9tUmVmIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5jdXN0b21SZWZ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsImVmZmVjdCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuZWZmZWN0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJlZmZlY3RTY29wZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuZWZmZWN0U2NvcGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsImdldEN1cnJlbnRTY29wZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuZ2V0Q3VycmVudFNjb3BlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJpc1Byb3h5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5pc1Byb3h5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJpc1JlYWN0aXZlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5pc1JlYWN0aXZlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJpc1JlYWRvbmx5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5pc1JlYWRvbmx5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJpc1JlZiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuaXNSZWZ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsImlzU2hhbGxvdyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuaXNTaGFsbG93fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJtYXJrUmF3Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5tYXJrUmF3fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJvblNjb3BlRGlzcG9zZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkub25TY29wZURpc3Bvc2V9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsInByb3h5UmVmcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkucHJveHlSZWZzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJyZWFjdGl2ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkucmVhY3RpdmV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsInJlYWRvbmx5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5yZWFkb25seX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwicmVmIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5yZWZ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsInNoYWxsb3dSZWFjdGl2ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuc2hhbGxvd1JlYWN0aXZlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJzaGFsbG93UmVhZG9ubHkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLnNoYWxsb3dSZWFkb25seX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwic2hhbGxvd1JlZiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuc2hhbGxvd1JlZn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwic3RvcCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuc3RvcH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwidG9SYXciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLnRvUmF3fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJ0b1JlZiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkudG9SZWZ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGgsInRvUmVmcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkudG9SZWZzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJ0b1ZhbHVlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS50b1ZhbHVlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJ0cmlnZ2VyUmVmIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS50cmlnZ2VyUmVmfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJ1bnJlZiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkudW5yZWZ9fSksaC5CYXNlVHJhbnNpdGlvbj0kbyxoLkJhc2VUcmFuc2l0aW9uUHJvcHNWYWxpZGF0b3JzPWVyLGguQ29tbWVudD1HcixoLkRlcHJlY2F0aW9uVHlwZXM9JGwsaC5FcnJvckNvZGVzPW5lLGguRXJyb3JUeXBlU3RyaW5ncz1WbCxoLkZyYWdtZW50PVRuLGguS2VlcEFsaXZlPWxlLGguU3RhdGljPWtvLGguU3VzcGVuc2U9Rm8saC5UZWxlcG9ydD1FaSxoLlRleHQ9aWEsaC5hc3NlcnROdW1iZXI9RyxoLmNhbGxXaXRoQXN5bmNFcnJvckhhbmRsaW5nPVNuLGguY2FsbFdpdGhFcnJvckhhbmRsaW5nPWNuLGguY2xvbmVWTm9kZT1sbixoLmNvbXBhdFV0aWxzPXdjLGguY29tcHV0ZWQ9ZXMsaC5jcmVhdGVBcHA9a2MsaC5jcmVhdGVCbG9jaz1tcixoLmNyZWF0ZUNvbW1lbnRWTm9kZT1VcixoLmNyZWF0ZUVsZW1lbnRCbG9jaz1aYSxoLmNyZWF0ZUVsZW1lbnRWTm9kZT1NcyxoLmNyZWF0ZUh5ZHJhdGlvblJlbmRlcmVyPW5yLGguY3JlYXRlUHJvcHNSZXN0UHJveHk9UmksaC5jcmVhdGVSZW5kZXJlcj1CbixoLmNyZWF0ZVNsb3RzPXV0LGguY3JlYXRlU3RhdGljVk5vZGU9cXIsaC5jcmVhdGVUZXh0Vk5vZGU9SHQsaC5jcmVhdGVWTm9kZT15ZSxoLmRlZmluZUFzeW5jQ29tcG9uZW50PWJpLGguZGVmaW5lQ29tcG9uZW50PUhvLGguZGVmaW5lRW1pdHM9UmEsaC5kZWZpbmVFeHBvc2U9aGEsaC5kZWZpbmVNb2RlbD1JcyxoLmRlZmluZU9wdGlvbnM9TnMsaC5kZWZpbmVQcm9wcz1QbyxoLmRlZmluZVNsb3RzPVlhLGguZGV2dG9vbHM9bnMsaC5nZXRDdXJyZW50SW5zdGFuY2U9U2EsaC5nZXRUcmFuc2l0aW9uUmF3Q2hpbGRyZW49X2ksaC5ndWFyZFJlYWN0aXZlUHJvcHM9RnQsaC5oPVNzLGguaGFuZGxlRXJyb3I9R24saC5oYXNJbmplY3Rpb25Db250ZXh0PWIsaC5pbml0Q3VzdG9tRm9ybWF0dGVyPXNsLGguaW5qZWN0PUphLGguaW5qZWN0SG9vaz1PcixoLmlzTWVtb1NhbWU9Y2wsaC5pc1J1bnRpbWVPbmx5PVVzLGguaXNWTm9kZT1maSxoLmxvZ0Vycm9yPWdpLGgubWVyZ2VEZWZhdWx0cz1rcyxoLm1lcmdlTW9kZWxzPWlsLGgubWVyZ2VQcm9wcz12cyxoLm5leHRUaWNrPWpyLGgub25BY3RpdmF0ZWQ9amUsaC5vbkJlZm9yZU1vdW50PXVvLGgub25CZWZvcmVVbm1vdW50PWpvLGgub25CZWZvcmVVcGRhdGU9T28saC5vbkRlYWN0aXZhdGVkPWR0LGgub25FcnJvckNhcHR1cmVkPWFlLGgub25Nb3VudGVkPWZvLGgub25SZW5kZXJUcmFja2VkPVksaC5vblJlbmRlclRyaWdnZXJlZD1vZSxoLm9uU2VydmVyUHJlZmV0Y2g9a2EsaC5vblVubW91bnRlZD1KaSxoLm9uVXBkYXRlZD1jaSxoLm9wZW5CbG9jaz1ocixoLnBhcnNlQ2xhc3NMaXN0PWRsLGgucGFyc2VDbGFzc1N0eWxlcz1BYyxoLnBvcFNjb3BlSWQ9Vm4saC5wcm92aWRlPUthLGgucHVzaFNjb3BlSWQ9dmksaC5xdWV1ZVBvc3RGbHVzaENiPWFuLGgucmVnaXN0ZXJSdW50aW1lQ29tcGlsZXI9RmwsaC5yZW5kZXI9UWwsaC5yZW5kZXJMaXN0PU1lLGgucmVuZGVyU2xvdD1obixoLnJlc29sdmVDb21wb25lbnQ9c2ksaC5yZXNvbHZlRGlyZWN0aXZlPUFyLGgucmVzb2x2ZUR5bmFtaWNDb21wb25lbnQ9THIsaC5yZXNvbHZlRmlsdGVyPVNjLGgucmVzb2x2ZVRyYW5zaXRpb25Ib29rcz1BbyxoLnNldEJsb2NrVHJhY2tpbmc9d3IsaC5zZXREZXZ0b29sc0hvb2s9U2ksaC5zZXRUcmFuc2l0aW9uSG9va3M9Y28saC5zc3JDb250ZXh0S2V5PWZuLGguc3NyVXRpbHM9VWwsaC50b0hhbmRsZXJzPUFuLGgudHJhbnNmb3JtVk5vZGVBcmdzPUxzLGgudXNlQXR0cnM9cmwsaC51c2VDc3NNb2R1bGU9Q2EsaC51c2VDc3NTdHlsZXM9anMsaC51c2VDc3NWYXJzPXhvLGgudXNlTW9kZWw9dHMsaC51c2VTU1JDb250ZXh0PVZvLGgudXNlU2xvdHM9dHIsaC51c2VUcmFuc2l0aW9uU3RhdGU9VW4saC52ZXJzaW9uPUhzLGgud2Fybj11bCxoLndhdGNoPUtpLGgud2F0Y2hFZmZlY3Q9TXIsaC53YXRjaFBvc3RFZmZlY3Q9c28saC53YXRjaFN5bmNFZmZlY3Q9bG8saC53aXRoQXN5bmNDb250ZXh0PWdhLGgud2l0aEN0eD1CcixoLndpdGhEZWZhdWx0cz1ubCxoLndpdGhEaXJlY3RpdmVzPUNvLGgud2l0aEtleXM9WmwsaC53aXRoTWVtbz1sbCxoLndpdGhNb2RpZmllcnM9cXMsaC53aXRoU2NvcGVJZD15byxofSh7fSx3LE4scCk7cmV0dXJuIEUuX19UWVBFX189Im52dWUiLEV9dmFyIFN2PWJJKENJKTt2YXIgZXU9e307Z0koZXUse0VNUFRZX0FSUjooKT0+T0ksRU1QVFlfT0JKOigpPT5USSxOTzooKT0+TkksTk9PUDooKT0+UEksY2FtZWxpemU6KCk9PiRJLGNhcGl0YWxpemU6KCk9PlFjLGRlZjooKT0+R0ksZXh0ZW5kOigpPT5ybyxnZXRHbG9iYWxUaGlzOigpPT5LSSxoYXNDaGFuZ2VkOigpPT56SSxoYXNPd246KCk9PklsLGh5cGhlbmF0ZTooKT0+WGMsaW5jbHVkZUJvb2xlYW5BdHRyOigpPT5mayxpbnZva2VBcnJheUZuczooKT0+V0ksaXNBcnJheTooKT0+SGksaXNCb29sZWFuQXR0cjooKT0+dWssaXNCdWlsdEluRGlyZWN0aXZlOigpPT5WSSxpc0Z1bmN0aW9uOigpPT5qbixpc0dsb2JhbGx5QWxsb3dlZDooKT0+WkksaXNIVE1MVGFnOigpPT5hayxpc0ludGVnZXJLZXk6KCk9PkRJLGlzS25vd25IdG1sQXR0cjooKT0+ZGssaXNLbm93blN2Z0F0dHI6KCk9PmhrLGlzTWFwOigpPT53dixpc01vZGVsTGlzdGVuZXI6KCk9PmtJLGlzT2JqZWN0OigpPT5tYyxpc09uOigpPT5JSSxpc1BsYWluT2JqZWN0OigpPT5fYyxpc1Byb21pc2U6KCk9PkxJLGlzUmVnRXhwOigpPT5CSSxpc1JlbmRlcmFibGVBdHRyVmFsdWU6KCk9PmdrLGlzUmVzZXJ2ZWRQcm9wOigpPT5GSSxpc1NWR1RhZzooKT0+c2ssaXNTZXQ6KCk9PkN2LGlzU3RyaW5nOigpPT5paSxpc1N5bWJvbDooKT0+WGYsaXNWb2lkVGFnOigpPT5sayxsb29zZVRvTnVtYmVyOigpPT5xSSxtYWtlTWFwOigpPT5jcyxub3JtYWxpemVDbGFzczooKT0+ZWQsbm9ybWFsaXplUHJvcHM6KCk9Pm5rLG5vcm1hbGl6ZVN0eWxlOigpPT5RZixwYXJzZVN0cmluZ1N0eWxlOigpPT5PdixyZW1vdmU6KCk9PlJJLHN0cmluZ2lmeVN0eWxlOigpPT50ayx0b0Rpc3BsYXlTdHJpbmc6KCk9PnBrLHRvSGFuZGxlcktleTooKT0+akksdG9OdW1iZXI6KCk9PllJLHRvUmF3VHlwZTooKT0+TUksdG9UeXBlU3RyaW5nOigpPT51c30pO2Z1bmN0aW9uIGNzKGYscyl7bGV0IHA9bmV3IFNldChmLnNwbGl0KCIsIikpO3JldHVybiBzP3c9PnAuaGFzKHcudG9Mb3dlckNhc2UoKSk6dz0+cC5oYXModyl9dmFyIFRJPXt9LE9JPVtdLFBJPSgpPT57fSxOST0oKT0+ITEsSUk9Zj0+Zi5jaGFyQ29kZUF0KDApPT09MTExJiZmLmNoYXJDb2RlQXQoMSk9PT0xMTAmJihmLmNoYXJDb2RlQXQoMik+MTIyfHxmLmNoYXJDb2RlQXQoMik8OTcpLGtJPWY9PmYuc3RhcnRzV2l0aCgib25VcGRhdGU6Iikscm89T2JqZWN0LmFzc2lnbixSST0oZixzKT0+e2xldCBwPWYuaW5kZXhPZihzKTtwPi0xJiZmLnNwbGljZShwLDEpfSx4ST1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LElsPShmLHMpPT54SS5jYWxsKGYscyksSGk9QXJyYXkuaXNBcnJheSx3dj1mPT51cyhmKT09PSJbb2JqZWN0IE1hcF0iLEN2PWY9PnVzKGYpPT09IltvYmplY3QgU2V0XSIsQkk9Zj0+dXMoZik9PT0iW29iamVjdCBSZWdFeHBdIixqbj1mPT50eXBlb2YgZj09ImZ1bmN0aW9uIixpaT1mPT50eXBlb2YgZj09InN0cmluZyIsWGY9Zj0+dHlwZW9mIGY9PSJzeW1ib2wiLG1jPWY9PmYhPT1udWxsJiZ0eXBlb2YgZj09Im9iamVjdCIsTEk9Zj0+KG1jKGYpfHxqbihmKSkmJmpuKGYudGhlbikmJmpuKGYuY2F0Y2gpLEF2PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsdXM9Zj0+QXYuY2FsbChmKSxNST1mPT51cyhmKS5zbGljZSg4LC0xKSxfYz1mPT51cyhmKT09PSJbb2JqZWN0IE9iamVjdF0iLERJPWY9PmlpKGYpJiZmIT09Ik5hTiImJmZbMF0hPT0iLSImJiIiK3BhcnNlSW50KGYsMTApPT09ZixGST1jcygiLGtleSxyZWYscmVmX2ZvcixyZWZfa2V5LG9uVm5vZGVCZWZvcmVNb3VudCxvblZub2RlTW91bnRlZCxvblZub2RlQmVmb3JlVXBkYXRlLG9uVm5vZGVVcGRhdGVkLG9uVm5vZGVCZWZvcmVVbm1vdW50LG9uVm5vZGVVbm1vdW50ZWQiKSxWST1jcygiYmluZCxjbG9hayxlbHNlLWlmLGVsc2UsZm9yLGh0bWwsaWYsbW9kZWwsb24sb25jZSxwcmUsc2hvdyxzbG90LHRleHQsbWVtbyIpLFd1PWY9PntsZXQgcz1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBwPT5zW3BdfHwoc1twXT1mKHApKX0sVUk9Ly0oXHcpL2csJEk9V3UoZj0+Zi5yZXBsYWNlKFVJLChzLHApPT5wP3AudG9VcHBlckNhc2UoKToiIikpLEhJPS9cQihbQS1aXSkvZyxYYz1XdShmPT5mLnJlcGxhY2UoSEksIi0kMSIpLnRvTG93ZXJDYXNlKCkpLFFjPVd1KGY9PmYuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZi5zbGljZSgxKSksakk9V3UoZj0+Zj9gb24ke1FjKGYpfWA6IiIpLHpJPShmLHMpPT4hT2JqZWN0LmlzKGYscyksV0k9KGYscyk9Pntmb3IobGV0IHA9MDtwPGYubGVuZ3RoO3ArKylmW3BdKHMpfSxHST0oZixzLHApPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGYscyx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsdmFsdWU6cH0pfSxxST1mPT57bGV0IHM9cGFyc2VGbG9hdChmKTtyZXR1cm4gaXNOYU4ocyk/ZjpzfSxZST1mPT57bGV0IHM9aWkoZik/TnVtYmVyKGYpOk5hTjtyZXR1cm4gaXNOYU4ocyk/ZjpzfSxUdixLST0oKT0+VHZ8fChUdj10eXBlb2YgZ2xvYmFsVGhpcyE9InVuZGVmaW5lZCI/Z2xvYmFsVGhpczp0eXBlb2Ygc2VsZiE9InVuZGVmaW5lZCI/c2VsZjp0eXBlb2Ygd2luZG93IT0idW5kZWZpbmVkIj93aW5kb3c6dHlwZW9mIGdsb2JhbCE9InVuZGVmaW5lZCI/Z2xvYmFsOnt9KSxKST0iSW5maW5pdHksdW5kZWZpbmVkLE5hTixpc0Zpbml0ZSxpc05hTixwYXJzZUZsb2F0LHBhcnNlSW50LGRlY29kZVVSSSxkZWNvZGVVUklDb21wb25lbnQsZW5jb2RlVVJJLGVuY29kZVVSSUNvbXBvbmVudCxNYXRoLE51bWJlcixEYXRlLEFycmF5LE9iamVjdCxCb29sZWFuLFN0cmluZyxSZWdFeHAsTWFwLFNldCxKU09OLEludGwsQmlnSW50LGNvbnNvbGUsRXJyb3IiLFpJPWNzKEpJKTtmdW5jdGlvbiBRZihmKXtpZihIaShmKSl7bGV0IHM9e307Zm9yKGxldCBwPTA7cDxmLmxlbmd0aDtwKyspe2xldCB3PWZbcF0sTj1paSh3KT9Pdih3KTpRZih3KTtpZihOKWZvcihsZXQgRSBpbiBOKXNbRV09TltFXX1yZXR1cm4gc31lbHNlIGlmKGlpKGYpfHxtYyhmKSlyZXR1cm4gZn12YXIgWEk9LzsoPyFbXihdKlwpKS9nLFFJPS86KFteXSspLyxlaz0vXC9cKlteXSo/XCpcLy9nO2Z1bmN0aW9uIE92KGYpe2xldCBzPXt9O3JldHVybiBmLnJlcGxhY2UoZWssIiIpLnNwbGl0KFhJKS5mb3JFYWNoKHA9PntpZihwKXtsZXQgdz1wLnNwbGl0KFFJKTt3Lmxlbmd0aD4xJiYoc1t3WzBdLnRyaW0oKV09d1sxXS50cmltKCkpfX0pLHN9ZnVuY3Rpb24gdGsoZil7bGV0IHM9IiI7aWYoIWZ8fGlpKGYpKXJldHVybiBzO2ZvcihsZXQgcCBpbiBmKXtsZXQgdz1mW3BdLE49cC5zdGFydHNXaXRoKCItLSIpP3A6WGMocCk7KGlpKHcpfHx0eXBlb2Ygdz09Im51bWJlciIpJiYocys9YCR7Tn06JHt3fTtgKX1yZXR1cm4gc31mdW5jdGlvbiBlZChmKXtsZXQgcz0iIjtpZihpaShmKSlzPWY7ZWxzZSBpZihIaShmKSlmb3IobGV0IHA9MDtwPGYubGVuZ3RoO3ArKyl7bGV0IHc9ZWQoZltwXSk7dyYmKHMrPXcrIiAiKX1lbHNlIGlmKG1jKGYpKWZvcihsZXQgcCBpbiBmKWZbcF0mJihzKz1wKyIgIik7cmV0dXJuIHMudHJpbSgpfWZ1bmN0aW9uIG5rKGYpe2lmKCFmKXJldHVybiBudWxsO2xldHtjbGFzczpzLHN0eWxlOnB9PWY7cmV0dXJuIHMmJiFpaShzKSYmKGYuY2xhc3M9ZWQocykpLHAmJihmLnN0eWxlPVFmKHApKSxmfXZhciByaz0iaHRtbCxib2R5LGJhc2UsaGVhZCxsaW5rLG1ldGEsc3R5bGUsdGl0bGUsYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGZvb3RlcixoZWFkZXIsaGdyb3VwLGgxLGgyLGgzLGg0LGg1LGg2LG5hdixzZWN0aW9uLGRpdixkZCxkbCxkdCxmaWdjYXB0aW9uLGZpZ3VyZSxwaWN0dXJlLGhyLGltZyxsaSxtYWluLG9sLHAscHJlLHVsLGEsYixhYmJyLGJkaSxiZG8sYnIsY2l0ZSxjb2RlLGRhdGEsZGZuLGVtLGksa2JkLG1hcmsscSxycCxydCxydWJ5LHMsc2FtcCxzbWFsbCxzcGFuLHN0cm9uZyxzdWIsc3VwLHRpbWUsdSx2YXIsd2JyLGFyZWEsYXVkaW8sbWFwLHRyYWNrLHZpZGVvLGVtYmVkLG9iamVjdCxwYXJhbSxzb3VyY2UsY2FudmFzLHNjcmlwdCxub3NjcmlwdCxkZWwsaW5zLGNhcHRpb24sY29sLGNvbGdyb3VwLHRhYmxlLHRoZWFkLHRib2R5LHRkLHRoLHRyLGJ1dHRvbixkYXRhbGlzdCxmaWVsZHNldCxmb3JtLGlucHV0LGxhYmVsLGxlZ2VuZCxtZXRlcixvcHRncm91cCxvcHRpb24sb3V0cHV0LHByb2dyZXNzLHNlbGVjdCx0ZXh0YXJlYSxkZXRhaWxzLGRpYWxvZyxtZW51LHN1bW1hcnksdGVtcGxhdGUsYmxvY2txdW90ZSxpZnJhbWUsdGZvb3QiLGlrPSJzdmcsYW5pbWF0ZSxhbmltYXRlTW90aW9uLGFuaW1hdGVUcmFuc2Zvcm0sY2lyY2xlLGNsaXBQYXRoLGNvbG9yLXByb2ZpbGUsZGVmcyxkZXNjLGRpc2NhcmQsZWxsaXBzZSxmZUJsZW5kLGZlQ29sb3JNYXRyaXgsZmVDb21wb25lbnRUcmFuc2ZlcixmZUNvbXBvc2l0ZSxmZUNvbnZvbHZlTWF0cml4LGZlRGlmZnVzZUxpZ2h0aW5nLGZlRGlzcGxhY2VtZW50TWFwLGZlRGlzdGFudExpZ2h0LGZlRHJvcFNoYWRvdyxmZUZsb29kLGZlRnVuY0EsZmVGdW5jQixmZUZ1bmNHLGZlRnVuY1IsZmVHYXVzc2lhbkJsdXIsZmVJbWFnZSxmZU1lcmdlLGZlTWVyZ2VOb2RlLGZlTW9ycGhvbG9neSxmZU9mZnNldCxmZVBvaW50TGlnaHQsZmVTcGVjdWxhckxpZ2h0aW5nLGZlU3BvdExpZ2h0LGZlVGlsZSxmZVR1cmJ1bGVuY2UsZmlsdGVyLGZvcmVpZ25PYmplY3QsZyxoYXRjaCxoYXRjaHBhdGgsaW1hZ2UsbGluZSxsaW5lYXJHcmFkaWVudCxtYXJrZXIsbWFzayxtZXNoLG1lc2hncmFkaWVudCxtZXNocGF0Y2gsbWVzaHJvdyxtZXRhZGF0YSxtcGF0aCxwYXRoLHBhdHRlcm4scG9seWdvbixwb2x5bGluZSxyYWRpYWxHcmFkaWVudCxyZWN0LHNldCxzb2xpZGNvbG9yLHN0b3Asc3dpdGNoLHN5bWJvbCx0ZXh0LHRleHRQYXRoLHRpdGxlLHRzcGFuLHVua25vd24sdXNlLHZpZXciLG9rPSJhcmVhLGJhc2UsYnIsY29sLGVtYmVkLGhyLGltZyxpbnB1dCxsaW5rLG1ldGEscGFyYW0sc291cmNlLHRyYWNrLHdiciIsYWs9Y3MocmspLHNrPWNzKGlrKSxsaz1jcyhvayksY2s9Iml0ZW1zY29wZSxhbGxvd2Z1bGxzY3JlZW4sZm9ybW5vdmFsaWRhdGUsaXNtYXAsbm9tb2R1bGUsbm92YWxpZGF0ZSxyZWFkb25seSIsdWs9Y3MoY2srIixhc3luYyxhdXRvZm9jdXMsYXV0b3BsYXksY29udHJvbHMsZGVmYXVsdCxkZWZlcixkaXNhYmxlZCxoaWRkZW4saW5lcnQsbG9vcCxvcGVuLHJlcXVpcmVkLHJldmVyc2VkLHNjb3BlZCxzZWFtbGVzcyxjaGVja2VkLG11dGVkLG11bHRpcGxlLHNlbGVjdGVkIik7ZnVuY3Rpb24gZmsoZil7cmV0dXJuISFmfHxmPT09IiJ9dmFyIGRrPWNzKCJhY2NlcHQsYWNjZXB0LWNoYXJzZXQsYWNjZXNza2V5LGFjdGlvbixhbGlnbixhbGxvdyxhbHQsYXN5bmMsYXV0b2NhcGl0YWxpemUsYXV0b2NvbXBsZXRlLGF1dG9mb2N1cyxhdXRvcGxheSxiYWNrZ3JvdW5kLGJnY29sb3IsYm9yZGVyLGJ1ZmZlcmVkLGNhcHR1cmUsY2hhbGxlbmdlLGNoYXJzZXQsY2hlY2tlZCxjaXRlLGNsYXNzLGNvZGUsY29kZWJhc2UsY29sb3IsY29scyxjb2xzcGFuLGNvbnRlbnQsY29udGVudGVkaXRhYmxlLGNvbnRleHRtZW51LGNvbnRyb2xzLGNvb3Jkcyxjcm9zc29yaWdpbixjc3AsZGF0YSxkYXRldGltZSxkZWNvZGluZyxkZWZhdWx0LGRlZmVyLGRpcixkaXJuYW1lLGRpc2FibGVkLGRvd25sb2FkLGRyYWdnYWJsZSxkcm9wem9uZSxlbmN0eXBlLGVudGVya2V5aGludCxmb3IsZm9ybSxmb3JtYWN0aW9uLGZvcm1lbmN0eXBlLGZvcm1tZXRob2QsZm9ybW5vdmFsaWRhdGUsZm9ybXRhcmdldCxoZWFkZXJzLGhlaWdodCxoaWRkZW4saGlnaCxocmVmLGhyZWZsYW5nLGh0dHAtZXF1aXYsaWNvbixpZCxpbXBvcnRhbmNlLGluZXJ0LGludGVncml0eSxpc21hcCxpdGVtcHJvcCxrZXl0eXBlLGtpbmQsbGFiZWwsbGFuZyxsYW5ndWFnZSxsb2FkaW5nLGxpc3QsbG9vcCxsb3csbWFuaWZlc3QsbWF4LG1heGxlbmd0aCxtaW5sZW5ndGgsbWVkaWEsbWluLG11bHRpcGxlLG11dGVkLG5hbWUsbm92YWxpZGF0ZSxvcGVuLG9wdGltdW0scGF0dGVybixwaW5nLHBsYWNlaG9sZGVyLHBvc3RlcixwcmVsb2FkLHJhZGlvZ3JvdXAscmVhZG9ubHkscmVmZXJyZXJwb2xpY3kscmVsLHJlcXVpcmVkLHJldmVyc2VkLHJvd3Mscm93c3BhbixzYW5kYm94LHNjb3BlLHNjb3BlZCxzZWxlY3RlZCxzaGFwZSxzaXplLHNpemVzLHNsb3Qsc3BhbixzcGVsbGNoZWNrLHNyYyxzcmNkb2Msc3JjbGFuZyxzcmNzZXQsc3RhcnQsc3RlcCxzdHlsZSxzdW1tYXJ5LHRhYmluZGV4LHRhcmdldCx0aXRsZSx0cmFuc2xhdGUsdHlwZSx1c2VtYXAsdmFsdWUsd2lkdGgsd3JhcCIpLGhrPWNzKCJ4bWxucyxhY2NlbnQtaGVpZ2h0LGFjY3VtdWxhdGUsYWRkaXRpdmUsYWxpZ25tZW50LWJhc2VsaW5lLGFscGhhYmV0aWMsYW1wbGl0dWRlLGFyYWJpYy1mb3JtLGFzY2VudCxhdHRyaWJ1dGVOYW1lLGF0dHJpYnV0ZVR5cGUsYXppbXV0aCxiYXNlRnJlcXVlbmN5LGJhc2VsaW5lLXNoaWZ0LGJhc2VQcm9maWxlLGJib3gsYmVnaW4sYmlhcyxieSxjYWxjTW9kZSxjYXAtaGVpZ2h0LGNsYXNzLGNsaXAsY2xpcFBhdGhVbml0cyxjbGlwLXBhdGgsY2xpcC1ydWxlLGNvbG9yLGNvbG9yLWludGVycG9sYXRpb24sY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzLGNvbG9yLXByb2ZpbGUsY29sb3ItcmVuZGVyaW5nLGNvbnRlbnRTY3JpcHRUeXBlLGNvbnRlbnRTdHlsZVR5cGUsY3Jvc3NvcmlnaW4sY3Vyc29yLGN4LGN5LGQsZGVjZWxlcmF0ZSxkZXNjZW50LGRpZmZ1c2VDb25zdGFudCxkaXJlY3Rpb24sZGlzcGxheSxkaXZpc29yLGRvbWluYW50LWJhc2VsaW5lLGR1cixkeCxkeSxlZGdlTW9kZSxlbGV2YXRpb24sZW5hYmxlLWJhY2tncm91bmQsZW5kLGV4cG9uZW50LGZpbGwsZmlsbC1vcGFjaXR5LGZpbGwtcnVsZSxmaWx0ZXIsZmlsdGVyUmVzLGZpbHRlclVuaXRzLGZsb29kLWNvbG9yLGZsb29kLW9wYWNpdHksZm9udC1mYW1pbHksZm9udC1zaXplLGZvbnQtc2l6ZS1hZGp1c3QsZm9udC1zdHJldGNoLGZvbnQtc3R5bGUsZm9udC12YXJpYW50LGZvbnQtd2VpZ2h0LGZvcm1hdCxmcm9tLGZyLGZ4LGZ5LGcxLGcyLGdseXBoLW5hbWUsZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCxnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCxnbHlwaFJlZixncmFkaWVudFRyYW5zZm9ybSxncmFkaWVudFVuaXRzLGhhbmdpbmcsaGVpZ2h0LGhyZWYsaHJlZmxhbmcsaG9yaXotYWR2LXgsaG9yaXotb3JpZ2luLXgsaWQsaWRlb2dyYXBoaWMsaW1hZ2UtcmVuZGVyaW5nLGluLGluMixpbnRlcmNlcHQsayxrMSxrMixrMyxrNCxrZXJuZWxNYXRyaXgsa2VybmVsVW5pdExlbmd0aCxrZXJuaW5nLGtleVBvaW50cyxrZXlTcGxpbmVzLGtleVRpbWVzLGxhbmcsbGVuZ3RoQWRqdXN0LGxldHRlci1zcGFjaW5nLGxpZ2h0aW5nLWNvbG9yLGxpbWl0aW5nQ29uZUFuZ2xlLGxvY2FsLG1hcmtlci1lbmQsbWFya2VyLW1pZCxtYXJrZXItc3RhcnQsbWFya2VySGVpZ2h0LG1hcmtlclVuaXRzLG1hcmtlcldpZHRoLG1hc2ssbWFza0NvbnRlbnRVbml0cyxtYXNrVW5pdHMsbWF0aGVtYXRpY2FsLG1heCxtZWRpYSxtZXRob2QsbWluLG1vZGUsbmFtZSxudW1PY3RhdmVzLG9mZnNldCxvcGFjaXR5LG9wZXJhdG9yLG9yZGVyLG9yaWVudCxvcmllbnRhdGlvbixvcmlnaW4sb3ZlcmZsb3csb3ZlcmxpbmUtcG9zaXRpb24sb3ZlcmxpbmUtdGhpY2tuZXNzLHBhbm9zZS0xLHBhaW50LW9yZGVyLHBhdGgscGF0aExlbmd0aCxwYXR0ZXJuQ29udGVudFVuaXRzLHBhdHRlcm5UcmFuc2Zvcm0scGF0dGVyblVuaXRzLHBpbmcscG9pbnRlci1ldmVudHMscG9pbnRzLHBvaW50c0F0WCxwb2ludHNBdFkscG9pbnRzQXRaLHByZXNlcnZlQWxwaGEscHJlc2VydmVBc3BlY3RSYXRpbyxwcmltaXRpdmVVbml0cyxyLHJhZGl1cyxyZWZlcnJlclBvbGljeSxyZWZYLHJlZlkscmVsLHJlbmRlcmluZy1pbnRlbnQscmVwZWF0Q291bnQscmVwZWF0RHVyLHJlcXVpcmVkRXh0ZW5zaW9ucyxyZXF1aXJlZEZlYXR1cmVzLHJlc3RhcnQscmVzdWx0LHJvdGF0ZSxyeCxyeSxzY2FsZSxzZWVkLHNoYXBlLXJlbmRlcmluZyxzbG9wZSxzcGFjaW5nLHNwZWN1bGFyQ29uc3RhbnQsc3BlY3VsYXJFeHBvbmVudCxzcGVlZCxzcHJlYWRNZXRob2Qsc3RhcnRPZmZzZXQsc3RkRGV2aWF0aW9uLHN0ZW1oLHN0ZW12LHN0aXRjaFRpbGVzLHN0b3AtY29sb3Isc3RvcC1vcGFjaXR5LHN0cmlrZXRocm91Z2gtcG9zaXRpb24sc3RyaWtldGhyb3VnaC10aGlja25lc3Msc3RyaW5nLHN0cm9rZSxzdHJva2UtZGFzaGFycmF5LHN0cm9rZS1kYXNob2Zmc2V0LHN0cm9rZS1saW5lY2FwLHN0cm9rZS1saW5lam9pbixzdHJva2UtbWl0ZXJsaW1pdCxzdHJva2Utb3BhY2l0eSxzdHJva2Utd2lkdGgsc3R5bGUsc3VyZmFjZVNjYWxlLHN5c3RlbUxhbmd1YWdlLHRhYmluZGV4LHRhYmxlVmFsdWVzLHRhcmdldCx0YXJnZXRYLHRhcmdldFksdGV4dC1hbmNob3IsdGV4dC1kZWNvcmF0aW9uLHRleHQtcmVuZGVyaW5nLHRleHRMZW5ndGgsdG8sdHJhbnNmb3JtLHRyYW5zZm9ybS1vcmlnaW4sdHlwZSx1MSx1Mix1bmRlcmxpbmUtcG9zaXRpb24sdW5kZXJsaW5lLXRoaWNrbmVzcyx1bmljb2RlLHVuaWNvZGUtYmlkaSx1bmljb2RlLXJhbmdlLHVuaXRzLXBlci1lbSx2LWFscGhhYmV0aWMsdi1oYW5naW5nLHYtaWRlb2dyYXBoaWMsdi1tYXRoZW1hdGljYWwsdmFsdWVzLHZlY3Rvci1lZmZlY3QsdmVyc2lvbix2ZXJ0LWFkdi15LHZlcnQtb3JpZ2luLXgsdmVydC1vcmlnaW4teSx2aWV3Qm94LHZpZXdUYXJnZXQsdmlzaWJpbGl0eSx3aWR0aCx3aWR0aHMsd29yZC1zcGFjaW5nLHdyaXRpbmctbW9kZSx4LHgtaGVpZ2h0LHgxLHgyLHhDaGFubmVsU2VsZWN0b3IseGxpbms6YWN0dWF0ZSx4bGluazphcmNyb2xlLHhsaW5rOmhyZWYseGxpbms6cm9sZSx4bGluazpzaG93LHhsaW5rOnRpdGxlLHhsaW5rOnR5cGUseG1sbnM6eGxpbmsseG1sOmJhc2UseG1sOmxhbmcseG1sOnNwYWNlLHkseTEseTIseUNoYW5uZWxTZWxlY3Rvcix6LHpvb21BbmRQYW4iKTtmdW5jdGlvbiBnayhmKXtpZihmPT1udWxsKXJldHVybiExO2xldCBzPXR5cGVvZiBmO3JldHVybiBzPT09InN0cmluZyJ8fHM9PT0ibnVtYmVyInx8cz09PSJib29sZWFuIn12YXIgcGs9Zj0+aWkoZik/ZjpmPT1udWxsPyIiOkhpKGYpfHxtYyhmKSYmKGYudG9TdHJpbmc9PT1Bdnx8IWpuKGYudG9TdHJpbmcpKT9KU09OLnN0cmluZ2lmeShmLFB2LDIpOlN0cmluZyhmKSxQdj0oZixzKT0+cyYmcy5fX3ZfaXNSZWY/UHYoZixzLnZhbHVlKTp3dihzKT97W2BNYXAoJHtzLnNpemV9KWBdOlsuLi5zLmVudHJpZXMoKV0ucmVkdWNlKChwLFt3LE5dLEUpPT4ocFt0ZCh3LEUpKyIgPT4iXT1OLHApLHt9KX06Q3Yocyk/e1tgU2V0KCR7cy5zaXplfSlgXTpbLi4ucy52YWx1ZXMoKV0ubWFwKHA9PnRkKHApKX06WGYocyk/dGQocyk6bWMocykmJiFIaShzKSYmIV9jKHMpP1N0cmluZyhzKTpzLHRkPShmLHM9IiIpPT57dmFyIHA7cmV0dXJuIFhmKGYpP2BTeW1ib2woJHsocD1mLmRlc2NyaXB0aW9uKSE9bnVsbD9wOnN9KWA6Zn07ZnVuY3Rpb24gTnYoZil7dmFyIHM9ZnVuY3Rpb24ocCx3KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gTihELC4uLnope2NvbnNvbGUud2FybihgW1Z1ZSB3YXJuXSAke0R9YCwuLi56KX1sZXQgRTtjbGFzcyBoe2NvbnN0cnVjdG9yKHo9ITEpe3RoaXMuZGV0YWNoZWQ9eix0aGlzLl9hY3RpdmU9ITAsdGhpcy5lZmZlY3RzPVtdLHRoaXMuY2xlYW51cHM9W10sdGhpcy5wYXJlbnQ9RSwheiYmRSYmKHRoaXMuaW5kZXg9KEUuc2NvcGVzfHwoRS5zY29wZXM9W10pKS5wdXNoKHRoaXMpLTEpfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5fYWN0aXZlfXJ1bih6KXtpZih0aGlzLl9hY3RpdmUpe2xldCBsZT1FO3RyeXtyZXR1cm4gRT10aGlzLHooKX1maW5hbGx5e0U9bGV9fX1vbigpe0U9dGhpc31vZmYoKXtFPXRoaXMucGFyZW50fXN0b3Aoeil7aWYodGhpcy5fYWN0aXZlKXtsZXQgbGUsSGU7Zm9yKGxlPTAsSGU9dGhpcy5lZmZlY3RzLmxlbmd0aDtsZTxIZTtsZSsrKXRoaXMuZWZmZWN0c1tsZV0uc3RvcCgpO2ZvcihsZT0wLEhlPXRoaXMuY2xlYW51cHMubGVuZ3RoO2xlPEhlO2xlKyspdGhpcy5jbGVhbnVwc1tsZV0oKTtpZih0aGlzLnNjb3Blcylmb3IobGU9MCxIZT10aGlzLnNjb3Blcy5sZW5ndGg7bGU8SGU7bGUrKyl0aGlzLnNjb3Blc1tsZV0uc3RvcCghMCk7aWYoIXRoaXMuZGV0YWNoZWQmJnRoaXMucGFyZW50JiYheil7bGV0IGplPXRoaXMucGFyZW50LnNjb3Blcy5wb3AoKTtqZSYmamUhPT10aGlzJiYodGhpcy5wYXJlbnQuc2NvcGVzW3RoaXMuaW5kZXhdPWplLGplLmluZGV4PXRoaXMuaW5kZXgpfXRoaXMucGFyZW50PXZvaWQgMCx0aGlzLl9hY3RpdmU9ITF9fX1mdW5jdGlvbiBfKEQpe3JldHVybiBuZXcgaChEKX1mdW5jdGlvbiBJKEQsej1FKXt6JiZ6LmFjdGl2ZSYmei5lZmZlY3RzLnB1c2goRCl9ZnVuY3Rpb24gU2UoKXtyZXR1cm4gRX1mdW5jdGlvbiBmdChEKXtFJiZFLmNsZWFudXBzLnB1c2goRCl9bGV0IFR0O2NsYXNzIEJ0e2NvbnN0cnVjdG9yKHosbGUsSGUsamUpe3RoaXMuZm49eix0aGlzLnRyaWdnZXI9bGUsdGhpcy5zY2hlZHVsZXI9SGUsdGhpcy5hY3RpdmU9ITAsdGhpcy5kZXBzPVtdLHRoaXMuX2RpcnR5TGV2ZWw9NCx0aGlzLl90cmFja0lkPTAsdGhpcy5fcnVubmluZ3M9MCx0aGlzLl9zaG91bGRTY2hlZHVsZT0hMSx0aGlzLl9kZXBzTGVuZ3RoPTAsSSh0aGlzLGplKX1nZXQgZGlydHkoKXtpZih0aGlzLl9kaXJ0eUxldmVsPT09Mnx8dGhpcy5fZGlydHlMZXZlbD09PTMpe3RoaXMuX2RpcnR5TGV2ZWw9MSxHbigpO2ZvcihsZXQgej0wO3o8dGhpcy5fZGVwc0xlbmd0aDt6Kyspe2xldCBsZT10aGlzLmRlcHNbel07aWYobGUuY29tcHV0ZWQmJihSKGxlLmNvbXB1dGVkKSx0aGlzLl9kaXJ0eUxldmVsPj00KSlicmVha310aGlzLl9kaXJ0eUxldmVsPT09MSYmKHRoaXMuX2RpcnR5TGV2ZWw9MCksSHIoKX1yZXR1cm4gdGhpcy5fZGlydHlMZXZlbD49NH1zZXQgZGlydHkoeil7dGhpcy5fZGlydHlMZXZlbD16PzQ6MH1ydW4oKXtpZih0aGlzLl9kaXJ0eUxldmVsPTAsIXRoaXMuYWN0aXZlKXJldHVybiB0aGlzLmZuKCk7bGV0IHo9SnQsbGU9VHQ7dHJ5e3JldHVybiBKdD0hMCxUdD10aGlzLHRoaXMuX3J1bm5pbmdzKyssQXQodGhpcyksdGhpcy5mbigpfWZpbmFsbHl7Wm4odGhpcyksdGhpcy5fcnVubmluZ3MtLSxUdD1sZSxKdD16fX1zdG9wKCl7dmFyIHo7dGhpcy5hY3RpdmUmJihBdCh0aGlzKSxabih0aGlzKSwoej10aGlzLm9uU3RvcCk9PW51bGx8fHouY2FsbCh0aGlzKSx0aGlzLmFjdGl2ZT0hMSl9fWZ1bmN0aW9uIFIoRCl7cmV0dXJuIEQudmFsdWV9ZnVuY3Rpb24gQXQoRCl7RC5fdHJhY2tJZCsrLEQuX2RlcHNMZW5ndGg9MH1mdW5jdGlvbiBabihEKXtpZihELmRlcHMubGVuZ3RoPkQuX2RlcHNMZW5ndGgpe2ZvcihsZXQgej1ELl9kZXBzTGVuZ3RoO3o8RC5kZXBzLmxlbmd0aDt6Kyspc3QoRC5kZXBzW3pdLEQpO0QuZGVwcy5sZW5ndGg9RC5fZGVwc0xlbmd0aH19ZnVuY3Rpb24gc3QoRCx6KXtsZXQgbGU9RC5nZXQoeik7bGUhPT12b2lkIDAmJnouX3RyYWNrSWQhPT1sZSYmKEQuZGVsZXRlKHopLEQuc2l6ZT09PTAmJkQuY2xlYW51cCgpKX1mdW5jdGlvbiBHKEQseil7RC5lZmZlY3QgaW5zdGFuY2VvZiBCdCYmKEQ9RC5lZmZlY3QuZm4pO2xldCBsZT1uZXcgQnQoRCx3Lk5PT1AsKCk9PntsZS5kaXJ0eSYmbGUucnVuKCl9KTt6JiYody5leHRlbmQobGUseiksei5zY29wZSYmSShsZSx6LnNjb3BlKSksKCF6fHwhei5sYXp5KSYmbGUucnVuKCk7bGV0IEhlPWxlLnJ1bi5iaW5kKGxlKTtyZXR1cm4gSGUuZWZmZWN0PWxlLEhlfWZ1bmN0aW9uIG5lKEQpe0QuZWZmZWN0LnN0b3AoKX1sZXQgSnQ9ITAsY249MCxTbj1bXTtmdW5jdGlvbiBHbigpe1NuLnB1c2goSnQpLEp0PSExfWZ1bmN0aW9uIGdpKCl7U24ucHVzaChKdCksSnQ9ITB9ZnVuY3Rpb24gSHIoKXtsZXQgRD1Tbi5wb3AoKTtKdD1EPT09dm9pZCAwPyEwOkR9ZnVuY3Rpb24gQ24oKXtjbisrfWZ1bmN0aW9uIG5uKCl7Zm9yKGNuLS07IWNuJiZJbi5sZW5ndGg7KUluLnNoaWZ0KCkoKX1mdW5jdGlvbiB5bihELHosbGUpe3ZhciBIZTtpZih6LmdldChEKSE9PUQuX3RyYWNrSWQpe3ouc2V0KEQsRC5fdHJhY2tJZCk7bGV0IGplPUQuZGVwc1tELl9kZXBzTGVuZ3RoXTtqZSE9PXo/KGplJiZzdChqZSxEKSxELmRlcHNbRC5fZGVwc0xlbmd0aCsrXT16KTpELl9kZXBzTGVuZ3RoKyt9fWxldCBJbj1bXTtmdW5jdGlvbiBNbihELHosbGUpe3ZhciBIZTtDbigpO2ZvcihsZXQgamUgb2YgRC5rZXlzKCkpe2xldCBkdDtqZS5fZGlydHlMZXZlbDx6JiYoZHQhPW51bGw/ZHQ6ZHQ9RC5nZXQoamUpPT09amUuX3RyYWNrSWQpJiYoamUuX3Nob3VsZFNjaGVkdWxlfHwoamUuX3Nob3VsZFNjaGVkdWxlPWplLl9kaXJ0eUxldmVsPT09MCksamUuX2RpcnR5TGV2ZWw9eiksamUuX3Nob3VsZFNjaGVkdWxlJiYoZHQhPW51bGw/ZHQ6ZHQ9RC5nZXQoamUpPT09amUuX3RyYWNrSWQpJiYoamUudHJpZ2dlcigpLCghamUuX3J1bm5pbmdzfHxqZS5hbGxvd1JlY3Vyc2UpJiZqZS5fZGlydHlMZXZlbCE9PTImJihqZS5fc2hvdWxkU2NoZWR1bGU9ITEsamUuc2NoZWR1bGVyJiZJbi5wdXNoKGplLnNjaGVkdWxlcikpKX1ubigpfWxldCB4cj0oRCx6KT0+e2xldCBsZT1uZXcgTWFwO3JldHVybiBsZS5jbGVhbnVwPUQsbGUuY29tcHV0ZWQ9eixsZX0sb2k9bmV3IFdlYWtNYXAsWG49U3ltYm9sKCIiKSxqcj1TeW1ib2woIiIpO2Z1bmN0aW9uICRlKEQseixsZSl7aWYoSnQmJlR0KXtsZXQgSGU9b2kuZ2V0KEQpO0hlfHxvaS5zZXQoRCxIZT1uZXcgTWFwKTtsZXQgamU9SGUuZ2V0KGxlKTtqZXx8SGUuc2V0KGxlLGplPXhyKCgpPT5IZS5kZWxldGUobGUpKSkseW4oVHQsamUsdm9pZCAwKX19ZnVuY3Rpb24gZXQoRCx6LGxlLEhlLGplLGR0KXtsZXQgcWU9b2kuZ2V0KEQpO2lmKCFxZSlyZXR1cm47bGV0IG50PVtdO2lmKHo9PT0iY2xlYXIiKW50PVsuLi5xZS52YWx1ZXMoKV07ZWxzZSBpZihsZT09PSJsZW5ndGgiJiZ3LmlzQXJyYXkoRCkpe2xldCBUcj1OdW1iZXIoSGUpO3FlLmZvckVhY2goKGtpLE9yKT0+eyhPcj09PSJsZW5ndGgifHwhdy5pc1N5bWJvbChPcikmJk9yPj1UcikmJm50LnB1c2goa2kpfSl9ZWxzZSBzd2l0Y2gobGUhPT12b2lkIDAmJm50LnB1c2gocWUuZ2V0KGxlKSkseil7Y2FzZSJhZGQiOncuaXNBcnJheShEKT93LmlzSW50ZWdlcktleShsZSkmJm50LnB1c2gocWUuZ2V0KCJsZW5ndGgiKSk6KG50LnB1c2gocWUuZ2V0KFhuKSksdy5pc01hcChEKSYmbnQucHVzaChxZS5nZXQoanIpKSk7YnJlYWs7Y2FzZSJkZWxldGUiOncuaXNBcnJheShEKXx8KG50LnB1c2gocWUuZ2V0KFhuKSksdy5pc01hcChEKSYmbnQucHVzaChxZS5nZXQoanIpKSk7YnJlYWs7Y2FzZSJzZXQiOncuaXNNYXAoRCkmJm50LnB1c2gocWUuZ2V0KFhuKSk7YnJlYWt9Q24oKTtmb3IobGV0IFRyIG9mIG50KVRyJiZNbihUciw0LHZvaWQgMCk7bm4oKX1mdW5jdGlvbiBOdChELHope3ZhciBsZTtyZXR1cm4obGU9b2kuZ2V0KEQpKT09bnVsbD92b2lkIDA6bGUuZ2V0KHopfWxldCB1bj13Lm1ha2VNYXAoIl9fcHJvdG9fXyxfX3ZfaXNSZWYsX19pc1Z1ZSIpLGFuPW5ldyBTZXQoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoU3ltYm9sKS5maWx0ZXIoRD0+RCE9PSJhcmd1bWVudHMiJiZEIT09ImNhbGxlciIpLm1hcChEPT5TeW1ib2xbRF0pLmZpbHRlcih3LmlzU3ltYm9sKSksc249a24oKTtmdW5jdGlvbiBrbigpe2xldCBEPXt9O3JldHVyblsiaW5jbHVkZXMiLCJpbmRleE9mIiwibGFzdEluZGV4T2YiXS5mb3JFYWNoKHo9PntEW3pdPWZ1bmN0aW9uKC4uLmxlKXtsZXQgSGU9Zm4odGhpcyk7Zm9yKGxldCBkdD0wLHFlPXRoaXMubGVuZ3RoO2R0PHFlO2R0KyspJGUoSGUsImdldCIsZHQrIiIpO2xldCBqZT1IZVt6XSguLi5sZSk7cmV0dXJuIGplPT09LTF8fGplPT09ITE/SGVbel0oLi4ubGUubWFwKGZuKSk6amV9fSksWyJwdXNoIiwicG9wIiwic2hpZnQiLCJ1bnNoaWZ0Iiwic3BsaWNlIl0uZm9yRWFjaCh6PT57RFt6XT1mdW5jdGlvbiguLi5sZSl7R24oKSxDbigpO2xldCBIZT1mbih0aGlzKVt6XS5hcHBseSh0aGlzLGxlKTtyZXR1cm4gbm4oKSxIcigpLEhlfX0pLER9ZnVuY3Rpb24gY3IoRCl7bGV0IHo9Zm4odGhpcyk7cmV0dXJuICRlKHosImhhcyIsRCksei5oYXNPd25Qcm9wZXJ0eShEKX1jbGFzcyBxbntjb25zdHJ1Y3Rvcih6PSExLGxlPSExKXt0aGlzLl9pc1JlYWRvbmx5PXosdGhpcy5faXNTaGFsbG93PWxlfWdldCh6LGxlLEhlKXtsZXQgamU9dGhpcy5faXNSZWFkb25seSxkdD10aGlzLl9pc1NoYWxsb3c7aWYobGU9PT0iX192X2lzUmVhY3RpdmUiKXJldHVybiFqZTtpZihsZT09PSJfX3ZfaXNSZWFkb25seSIpcmV0dXJuIGplO2lmKGxlPT09Il9fdl9pc1NoYWxsb3ciKXJldHVybiBkdDtpZihsZT09PSJfX3ZfcmF3IilyZXR1cm4gSGU9PT0oamU/ZHQ/emk6bGk6ZHQ/UGk6d28pLmdldCh6KXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKHopPT09T2JqZWN0LmdldFByb3RvdHlwZU9mKEhlKT96OnZvaWQgMDtsZXQgcWU9dy5pc0FycmF5KHopO2lmKCFqZSl7aWYocWUmJncuaGFzT3duKHNuLGxlKSlyZXR1cm4gUmVmbGVjdC5nZXQoc24sbGUsSGUpO2lmKGxlPT09Imhhc093blByb3BlcnR5IilyZXR1cm4gY3J9bGV0IG50PVJlZmxlY3QuZ2V0KHosbGUsSGUpO3JldHVybih3LmlzU3ltYm9sKGxlKT9hbi5oYXMobGUpOnVuKGxlKSl8fChqZXx8JGUoeiwiZ2V0IixsZSksZHQpP250OlNyKG50KT9xZSYmdy5pc0ludGVnZXJLZXkobGUpP250Om50LnZhbHVlOncuaXNPYmplY3QobnQpP2plP3FpKG50KTpHaShudCk6bnR9fWNsYXNzIHBpIGV4dGVuZHMgcW57Y29uc3RydWN0b3Ioej0hMSl7c3VwZXIoITEseil9c2V0KHosbGUsSGUsamUpe2xldCBkdD16W2xlXTtpZighdGhpcy5faXNTaGFsbG93KXtsZXQgVHI9TXQoZHQpO2lmKCFUZShIZSkmJiFNdChIZSkmJihkdD1mbihkdCksSGU9Zm4oSGUpKSwhdy5pc0FycmF5KHopJiZTcihkdCkmJiFTcihIZSkpcmV0dXJuIFRyPyExOihkdC52YWx1ZT1IZSwhMCl9bGV0IHFlPXcuaXNBcnJheSh6KSYmdy5pc0ludGVnZXJLZXkobGUpP051bWJlcihsZSk8ei5sZW5ndGg6dy5oYXNPd24oeixsZSksbnQ9UmVmbGVjdC5zZXQoeixsZSxIZSxqZSk7cmV0dXJuIHo9PT1mbihqZSkmJihxZT93Lmhhc0NoYW5nZWQoSGUsZHQpJiZldCh6LCJzZXQiLGxlLEhlLGR0KTpldCh6LCJhZGQiLGxlLEhlKSksbnR9ZGVsZXRlUHJvcGVydHkoeixsZSl7bGV0IEhlPXcuaGFzT3duKHosbGUpLGplPXpbbGVdLGR0PVJlZmxlY3QuZGVsZXRlUHJvcGVydHkoeixsZSk7cmV0dXJuIGR0JiZIZSYmZXQoeiwiZGVsZXRlIixsZSx2b2lkIDAsamUpLGR0fWhhcyh6LGxlKXtsZXQgSGU9UmVmbGVjdC5oYXMoeixsZSk7cmV0dXJuKCF3LmlzU3ltYm9sKGxlKXx8IWFuLmhhcyhsZSkpJiYkZSh6LCJoYXMiLGxlKSxIZX1vd25LZXlzKHope3JldHVybiAkZSh6LCJpdGVyYXRlIix3LmlzQXJyYXkoeik/Imxlbmd0aCI6WG4pLFJlZmxlY3Qub3duS2V5cyh6KX19Y2xhc3MgenIgZXh0ZW5kcyBxbntjb25zdHJ1Y3Rvcih6PSExKXtzdXBlcighMCx6KX1zZXQoeixsZSl7cmV0dXJuITB9ZGVsZXRlUHJvcGVydHkoeixsZSl7cmV0dXJuITB9fWxldCBfcj1uZXcgcGksb289bmV3IHpyLFhvPW5ldyBwaSghMCksdWE9bmV3IHpyKCEwKSxqaT1EPT5ELHhuPUQ9PlJlZmxlY3QuZ2V0UHJvdG90eXBlT2YoRCk7ZnVuY3Rpb24gYnIoRCx6LGxlPSExLEhlPSExKXtEPUQuX192X3JhdztsZXQgamU9Zm4oRCksZHQ9Zm4oeik7bGV8fCh3Lmhhc0NoYW5nZWQoeixkdCkmJiRlKGplLCJnZXQiLHopLCRlKGplLCJnZXQiLGR0KSk7bGV0e2hhczpxZX09eG4oamUpLG50PUhlP2ppOmxlP3NvOk1yO2lmKHFlLmNhbGwoamUseikpcmV0dXJuIG50KEQuZ2V0KHopKTtpZihxZS5jYWxsKGplLGR0KSlyZXR1cm4gbnQoRC5nZXQoZHQpKTtEIT09amUmJkQuZ2V0KHopfWZ1bmN0aW9uIGFpKEQsej0hMSl7bGV0IGxlPXRoaXMuX192X3JhdyxIZT1mbihsZSksamU9Zm4oRCk7cmV0dXJuIHp8fCh3Lmhhc0NoYW5nZWQoRCxqZSkmJiRlKEhlLCJoYXMiLEQpLCRlKEhlLCJoYXMiLGplKSksRD09PWplP2xlLmhhcyhEKTpsZS5oYXMoRCl8fGxlLmhhcyhqZSl9ZnVuY3Rpb24gdmkoRCx6PSExKXtyZXR1cm4gRD1ELl9fdl9yYXcsIXomJiRlKGZuKEQpLCJpdGVyYXRlIixYbiksUmVmbGVjdC5nZXQoRCwic2l6ZSIsRCl9ZnVuY3Rpb24gVm4oRCl7RD1mbihEKTtsZXQgej1mbih0aGlzKTtyZXR1cm4geG4oeikuaGFzLmNhbGwoeixEKXx8KHouYWRkKEQpLGV0KHosImFkZCIsRCxEKSksdGhpc31mdW5jdGlvbiB5byhELHope3o9Zm4oeik7bGV0IGxlPWZuKHRoaXMpLHtoYXM6SGUsZ2V0OmplfT14bihsZSksZHQ9SGUuY2FsbChsZSxEKTtkdHx8KEQ9Zm4oRCksZHQ9SGUuY2FsbChsZSxEKSk7bGV0IHFlPWplLmNhbGwobGUsRCk7cmV0dXJuIGxlLnNldChELHopLGR0P3cuaGFzQ2hhbmdlZCh6LHFlKSYmZXQobGUsInNldCIsRCx6LHFlKTpldChsZSwiYWRkIixELHopLHRoaXN9ZnVuY3Rpb24gQnIoRCl7bGV0IHo9Zm4odGhpcykse2hhczpsZSxnZXQ6SGV9PXhuKHopLGplPWxlLmNhbGwoeixEKTtqZXx8KEQ9Zm4oRCksamU9bGUuY2FsbCh6LEQpKTtsZXQgZHQ9SGU/SGUuY2FsbCh6LEQpOnZvaWQgMCxxZT16LmRlbGV0ZShEKTtyZXR1cm4gamUmJmV0KHosImRlbGV0ZSIsRCx2b2lkIDAsZHQpLHFlfWZ1bmN0aW9uIFBhKCl7bGV0IEQ9Zm4odGhpcyksej1ELnNpemUhPT0wLGxlPXZvaWQgMCxIZT1ELmNsZWFyKCk7cmV0dXJuIHomJmV0KEQsImNsZWFyIix2b2lkIDAsdm9pZCAwLGxlKSxIZX1mdW5jdGlvbiBUaShELHope3JldHVybiBmdW5jdGlvbihIZSxqZSl7bGV0IGR0PXRoaXMscWU9ZHQuX192X3JhdyxudD1mbihxZSksVHI9ej9qaTpEP3NvOk1yO3JldHVybiFEJiYkZShudCwiaXRlcmF0ZSIsWG4pLHFlLmZvckVhY2goKGtpLE9yKT0+SGUuY2FsbChqZSxUcihraSksVHIoT3IpLGR0KSl9fWZ1bmN0aW9uIFFuKEQseixsZSl7cmV0dXJuIGZ1bmN0aW9uKC4uLkhlKXtsZXQgamU9dGhpcy5fX3ZfcmF3LGR0PWZuKGplKSxxZT13LmlzTWFwKGR0KSxudD1EPT09ImVudHJpZXMifHxEPT09U3ltYm9sLml0ZXJhdG9yJiZxZSxUcj1EPT09ImtleXMiJiZxZSxraT1qZVtEXSguLi5IZSksT3I9bGU/amk6ej9zbzpNcjtyZXR1cm4heiYmJGUoZHQsIml0ZXJhdGUiLFRyP2pyOlhuKSx7bmV4dCgpe2xldHt2YWx1ZTpQcixkb25lOnVvfT1raS5uZXh0KCk7cmV0dXJuIHVvP3t2YWx1ZTpQcixkb25lOnVvfTp7dmFsdWU6bnQ/W09yKFByWzBdKSxPcihQclsxXSldOk9yKFByKSxkb25lOnVvfX0sW1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpc319fX1mdW5jdGlvbiB5cihEKXtyZXR1cm4gZnVuY3Rpb24oLi4ueil7cmV0dXJuIEQ9PT0iZGVsZXRlIj8hMTpEPT09ImNsZWFyIj92b2lkIDA6dGhpc319ZnVuY3Rpb24gTmEoKXtsZXQgRD17Z2V0KGR0KXtyZXR1cm4gYnIodGhpcyxkdCl9LGdldCBzaXplKCl7cmV0dXJuIHZpKHRoaXMpfSxoYXM6YWksYWRkOlZuLHNldDp5byxkZWxldGU6QnIsY2xlYXI6UGEsZm9yRWFjaDpUaSghMSwhMSl9LHo9e2dldChkdCl7cmV0dXJuIGJyKHRoaXMsZHQsITEsITApfSxnZXQgc2l6ZSgpe3JldHVybiB2aSh0aGlzKX0saGFzOmFpLGFkZDpWbixzZXQ6eW8sZGVsZXRlOkJyLGNsZWFyOlBhLGZvckVhY2g6VGkoITEsITApfSxsZT17Z2V0KGR0KXtyZXR1cm4gYnIodGhpcyxkdCwhMCl9LGdldCBzaXplKCl7cmV0dXJuIHZpKHRoaXMsITApfSxoYXMoZHQpe3JldHVybiBhaS5jYWxsKHRoaXMsZHQsITApfSxhZGQ6eXIoImFkZCIpLHNldDp5cigic2V0IiksZGVsZXRlOnlyKCJkZWxldGUiKSxjbGVhcjp5cigiY2xlYXIiKSxmb3JFYWNoOlRpKCEwLCExKX0sSGU9e2dldChkdCl7cmV0dXJuIGJyKHRoaXMsZHQsITAsITApfSxnZXQgc2l6ZSgpe3JldHVybiB2aSh0aGlzLCEwKX0saGFzKGR0KXtyZXR1cm4gYWkuY2FsbCh0aGlzLGR0LCEwKX0sYWRkOnlyKCJhZGQiKSxzZXQ6eXIoInNldCIpLGRlbGV0ZTp5cigiZGVsZXRlIiksY2xlYXI6eXIoImNsZWFyIiksZm9yRWFjaDpUaSghMCwhMCl9O3JldHVyblsia2V5cyIsInZhbHVlcyIsImVudHJpZXMiLFN5bWJvbC5pdGVyYXRvcl0uZm9yRWFjaChkdD0+e0RbZHRdPVFuKGR0LCExLCExKSxsZVtkdF09UW4oZHQsITAsITEpLHpbZHRdPVFuKGR0LCExLCEwKSxIZVtkdF09UW4oZHQsITAsITApfSksW0QsbGUseixIZV19bGV0W2dyLEVvLE1vLERvXT1OYSgpO2Z1bmN0aW9uIE9pKEQseil7bGV0IGxlPXo/RD9EbzpNbzpEP0VvOmdyO3JldHVybihIZSxqZSxkdCk9PmplPT09Il9fdl9pc1JlYWN0aXZlIj8hRDpqZT09PSJfX3ZfaXNSZWFkb25seSI/RDpqZT09PSJfX3ZfcmF3Ij9IZTpSZWZsZWN0LmdldCh3Lmhhc093bihsZSxqZSkmJmplIGluIEhlP2xlOkhlLGplLGR0KX1sZXQgc2k9e2dldDpPaSghMSwhMSl9LFNvPXtnZXQ6T2koITEsITApfSxMcj17Z2V0Ok9pKCEwLCExKX0sQXI9e2dldDpPaSghMCwhMCl9O2Z1bmN0aW9uIGFvKEQseixsZSl7bGV0IEhlPWZuKGxlKTtpZihIZSE9PWxlJiZ6LmNhbGwoRCxIZSkpe2xldCBqZT13LnRvUmF3VHlwZShEKTtOKGBSZWFjdGl2ZSAke2plfSBjb250YWlucyBib3RoIHRoZSByYXcgYW5kIHJlYWN0aXZlIHZlcnNpb25zIG9mIHRoZSBzYW1lIG9iamVjdCR7amU9PT0iTWFwIj8iIGFzIGtleXMiOiIifSwgd2hpY2ggY2FuIGxlYWQgdG8gaW5jb25zaXN0ZW5jaWVzLiBBdm9pZCBkaWZmZXJlbnRpYXRpbmcgYmV0d2VlbiB0aGUgcmF3IGFuZCByZWFjdGl2ZSB2ZXJzaW9ucyBvZiBhbiBvYmplY3QgYW5kIG9ubHkgdXNlIHRoZSByZWFjdGl2ZSB2ZXJzaW9uIGlmIHBvc3NpYmxlLmApfX1sZXQgd289bmV3IFdlYWtNYXAsUGk9bmV3IFdlYWtNYXAsbGk9bmV3IFdlYWtNYXAsemk9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gRm8oRCl7c3dpdGNoKEQpe2Nhc2UiT2JqZWN0IjpjYXNlIkFycmF5IjpyZXR1cm4gMTtjYXNlIk1hcCI6Y2FzZSJTZXQiOmNhc2UiV2Vha01hcCI6Y2FzZSJXZWFrU2V0IjpyZXR1cm4gMjtkZWZhdWx0OnJldHVybiAwfX1mdW5jdGlvbiBXaShEKXtyZXR1cm4gRC5fX3Zfc2tpcHx8IU9iamVjdC5pc0V4dGVuc2libGUoRCk/MDpGbyh3LnRvUmF3VHlwZShEKSl9ZnVuY3Rpb24gR2koRCl7cmV0dXJuIE10KEQpP0Q6WnIoRCwhMSxfcixzaSx3byl9ZnVuY3Rpb24gSWEoRCl7cmV0dXJuIFpyKEQsITEsWG8sU28sUGkpfWZ1bmN0aW9uIHFpKEQpe3JldHVybiBacihELCEwLG9vLExyLGxpKX1mdW5jdGlvbiBEbihEKXtyZXR1cm4gWnIoRCwhMCx1YSxBcix6aSl9ZnVuY3Rpb24gWnIoRCx6LGxlLEhlLGplKXtpZighdy5pc09iamVjdChEKXx8RC5fX3ZfcmF3JiYhKHomJkQuX192X2lzUmVhY3RpdmUpKXJldHVybiBEO2xldCBkdD1qZS5nZXQoRCk7aWYoZHQpcmV0dXJuIGR0O2xldCBxZT1XaShEKTtpZihxZT09PTApcmV0dXJuIEQ7bGV0IG50PW5ldyBQcm94eShELHFlPT09Mj9IZTpsZSk7cmV0dXJuIGplLnNldChELG50KSxudH1mdW5jdGlvbiBFcihEKXtyZXR1cm4gTXQoRCk/RXIoRC5fX3ZfcmF3KTohIShEJiZELl9fdl9pc1JlYWN0aXZlKX1mdW5jdGlvbiBNdChEKXtyZXR1cm4hIShEJiZELl9fdl9pc1JlYWRvbmx5KX1mdW5jdGlvbiBUZShEKXtyZXR1cm4hIShEJiZELl9fdl9pc1NoYWxsb3cpfWZ1bmN0aW9uIGZhKEQpe3JldHVybiBFcihEKXx8TXQoRCl9ZnVuY3Rpb24gZm4oRCl7bGV0IHo9RCYmRC5fX3ZfcmF3O3JldHVybiB6P2ZuKHopOkR9ZnVuY3Rpb24gVm8oRCl7cmV0dXJuIE9iamVjdC5pc0V4dGVuc2libGUoRCkmJncuZGVmKEQsIl9fdl9za2lwIiwhMCksRH1sZXQgTXI9RD0+dy5pc09iamVjdChEKT9HaShEKTpELHNvPUQ9PncuaXNPYmplY3QoRCk/cWkoRCk6RCxsbz0iQ29tcHV0ZWQgaXMgc3RpbGwgZGlydHkgYWZ0ZXIgZ2V0dGVyIGV2YWx1YXRpb24sIGxpa2VseSBiZWNhdXNlIGEgY29tcHV0ZWQgaXMgbXV0YXRpbmcgaXRzIG93biBkZXBlbmRlbmN5IGluIGl0cyBnZXR0ZXIuIFN0YXRlIG11dGF0aW9ucyBpbiBjb21wdXRlZCBnZXR0ZXJzIHNob3VsZCBiZSBhdm9pZGVkLiAgQ2hlY2sgdGhlIGRvY3MgZm9yIG1vcmUgZGV0YWlsczogaHR0cHM6Ly92dWVqcy5vcmcvZ3VpZGUvZXNzZW50aWFscy9jb21wdXRlZC5odG1sI2dldHRlcnMtc2hvdWxkLWJlLXNpZGUtZWZmZWN0LWZyZWUiO2NsYXNzIFlpe2NvbnN0cnVjdG9yKHosbGUsSGUsamUpe3RoaXMuZ2V0dGVyPXosdGhpcy5fc2V0dGVyPWxlLHRoaXMuZGVwPXZvaWQgMCx0aGlzLl9fdl9pc1JlZj0hMCx0aGlzLl9fdl9pc1JlYWRvbmx5PSExLHRoaXMuZWZmZWN0PW5ldyBCdCgoKT0+eih0aGlzLl92YWx1ZSksKCk9Pm1pKHRoaXMsdGhpcy5lZmZlY3QuX2RpcnR5TGV2ZWw9PT0yPzI6MykpLHRoaXMuZWZmZWN0LmNvbXB1dGVkPXRoaXMsdGhpcy5lZmZlY3QuYWN0aXZlPXRoaXMuX2NhY2hlYWJsZT0hamUsdGhpcy5fX3ZfaXNSZWFkb25seT1IZX1nZXQgdmFsdWUoKXtsZXQgej1mbih0aGlzKTtyZXR1cm4oIXouX2NhY2hlYWJsZXx8ei5lZmZlY3QuZGlydHkpJiZ3Lmhhc0NoYW5nZWQoei5fdmFsdWUsei5fdmFsdWU9ei5lZmZlY3QucnVuKCkpJiZtaSh6LDQpLFhyKHopLHouZWZmZWN0Ll9kaXJ0eUxldmVsPj0yJiZtaSh6LDIpLHouX3ZhbHVlfXNldCB2YWx1ZSh6KXt0aGlzLl9zZXR0ZXIoeil9Z2V0IF9kaXJ0eSgpe3JldHVybiB0aGlzLmVmZmVjdC5kaXJ0eX1zZXQgX2RpcnR5KHope3RoaXMuZWZmZWN0LmRpcnR5PXp9fWZ1bmN0aW9uIEtpKEQseixsZT0hMSl7bGV0IEhlLGplLGR0PXcuaXNGdW5jdGlvbihEKTtyZXR1cm4gZHQ/KEhlPUQsamU9dy5OT09QKTooSGU9RC5nZXQsamU9RC5zZXQpLG5ldyBZaShIZSxqZSxkdHx8IWplLGxlKX1mdW5jdGlvbiBYcihEKXt2YXIgejtKdCYmVHQmJihEPWZuKEQpLHluKFR0LCh6PUQuZGVwKSE9bnVsbD96OkQuZGVwPXhyKCgpPT5ELmRlcD12b2lkIDAsRCBpbnN0YW5jZW9mIFlpP0Q6dm9pZCAwKSx2b2lkIDApKX1mdW5jdGlvbiBtaShELHo9NCxsZSl7RD1mbihEKTtsZXQgSGU9RC5kZXA7SGUmJk1uKEhlLHosdm9pZCAwKX1mdW5jdGlvbiBTcihEKXtyZXR1cm4hIShEJiZELl9fdl9pc1JlZj09PSEwKX1mdW5jdGlvbiBEcihEKXtyZXR1cm4gUXIoRCwhMSl9ZnVuY3Rpb24gQ28oRCl7cmV0dXJuIFFyKEQsITApfWZ1bmN0aW9uIFFyKEQseil7cmV0dXJuIFNyKEQpP0Q6bmV3IFl0KEQseil9Y2xhc3MgWXR7Y29uc3RydWN0b3IoeixsZSl7dGhpcy5fX3ZfaXNTaGFsbG93PWxlLHRoaXMuZGVwPXZvaWQgMCx0aGlzLl9fdl9pc1JlZj0hMCx0aGlzLl9yYXdWYWx1ZT1sZT96OmZuKHopLHRoaXMuX3ZhbHVlPWxlP3o6TXIoeil9Z2V0IHZhbHVlKCl7cmV0dXJuIFhyKHRoaXMpLHRoaXMuX3ZhbHVlfXNldCB2YWx1ZSh6KXtsZXQgbGU9dGhpcy5fX3ZfaXNTaGFsbG93fHxUZSh6KXx8TXQoeik7ej1sZT96OmZuKHopLHcuaGFzQ2hhbmdlZCh6LHRoaXMuX3Jhd1ZhbHVlKSYmKHRoaXMuX3Jhd1ZhbHVlPXosdGhpcy5fdmFsdWU9bGU/ejpNcih6KSxtaSh0aGlzLDQseikpfX1mdW5jdGlvbiBSbihEKXttaShELDQsdm9pZCAwKX1mdW5jdGlvbiBVbihEKXtyZXR1cm4gU3IoRCk/RC52YWx1ZTpEfWZ1bmN0aW9uIGRuKEQpe3JldHVybiB3LmlzRnVuY3Rpb24oRCk/RCgpOlVuKEQpfWxldCBlcj17Z2V0OihELHosbGUpPT5VbihSZWZsZWN0LmdldChELHosbGUpKSxzZXQ6KEQseixsZSxIZSk9PntsZXQgamU9RFt6XTtyZXR1cm4gU3IoamUpJiYhU3IobGUpPyhqZS52YWx1ZT1sZSwhMCk6UmVmbGVjdC5zZXQoRCx6LGxlLEhlKX19O2Z1bmN0aW9uIFVvKEQpe3JldHVybiBFcihEKT9EOm5ldyBQcm94eShELGVyKX1jbGFzcyAkb3tjb25zdHJ1Y3Rvcih6KXt0aGlzLmRlcD12b2lkIDAsdGhpcy5fX3ZfaXNSZWY9ITA7bGV0e2dldDpsZSxzZXQ6SGV9PXooKCk9PlhyKHRoaXMpLCgpPT5taSh0aGlzKSk7dGhpcy5fZ2V0PWxlLHRoaXMuX3NldD1IZX1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5fZ2V0KCl9c2V0IHZhbHVlKHope3RoaXMuX3NldCh6KX19ZnVuY3Rpb24gRnIoRCl7cmV0dXJuIG5ldyAkbyhEKX1mdW5jdGlvbiBBbyhEKXtsZXQgej13LmlzQXJyYXkoRCk/bmV3IEFycmF5KEQubGVuZ3RoKTp7fTtmb3IobGV0IGxlIGluIEQpeltsZV09X2koRCxsZSk7cmV0dXJuIHp9Y2xhc3MgUW97Y29uc3RydWN0b3IoeixsZSxIZSl7dGhpcy5fb2JqZWN0PXosdGhpcy5fa2V5PWxlLHRoaXMuX2RlZmF1bHRWYWx1ZT1IZSx0aGlzLl9fdl9pc1JlZj0hMH1nZXQgdmFsdWUoKXtsZXQgej10aGlzLl9vYmplY3RbdGhpcy5fa2V5XTtyZXR1cm4gej09PXZvaWQgMD90aGlzLl9kZWZhdWx0VmFsdWU6en1zZXQgdmFsdWUoeil7dGhpcy5fb2JqZWN0W3RoaXMuX2tleV09en1nZXQgZGVwKCl7cmV0dXJuIE50KGZuKHRoaXMuX29iamVjdCksdGhpcy5fa2V5KX19Y2xhc3MgVG97Y29uc3RydWN0b3Ioeil7dGhpcy5fZ2V0dGVyPXosdGhpcy5fX3ZfaXNSZWY9ITAsdGhpcy5fX3ZfaXNSZWFkb25seT0hMH1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5fZ2V0dGVyKCl9fWZ1bmN0aW9uIGNvKEQseixsZSl7cmV0dXJuIFNyKEQpP0Q6dy5pc0Z1bmN0aW9uKEQpP25ldyBUbyhEKTp3LmlzT2JqZWN0KEQpJiZhcmd1bWVudHMubGVuZ3RoPjE/X2koRCx6LGxlKTpEcihEKX1mdW5jdGlvbiBfaShELHosbGUpe2xldCBIZT1EW3pdO3JldHVybiBTcihIZSk/SGU6bmV3IFFvKEQseixsZSl9bGV0IEhvPUtpLE5pPXtHRVQ6ImdldCIsSEFTOiJoYXMiLElURVJBVEU6Iml0ZXJhdGUifSxiaT17U0VUOiJzZXQiLEFERDoiYWRkIixERUxFVEU6ImRlbGV0ZSIsQ0xFQVI6ImNsZWFyIn0sSWk9e1NLSVA6Il9fdl9za2lwIixJU19SRUFDVElWRToiX192X2lzUmVhY3RpdmUiLElTX1JFQURPTkxZOiJfX3ZfaXNSZWFkb25seSIsSVNfU0hBTExPVzoiX192X2lzU2hhbGxvdyIsUkFXOiJfX3ZfcmF3In07cmV0dXJuIHAuRWZmZWN0U2NvcGU9aCxwLklURVJBVEVfS0VZPVhuLHAuUmVhY3RpdmVFZmZlY3Q9QnQscC5SZWFjdGl2ZUZsYWdzPUlpLHAuVHJhY2tPcFR5cGVzPU5pLHAuVHJpZ2dlck9wVHlwZXM9YmkscC5jb21wdXRlZD1LaSxwLmN1c3RvbVJlZj1GcixwLmRlZmVycmVkQ29tcHV0ZWQ9SG8scC5lZmZlY3Q9RyxwLmVmZmVjdFNjb3BlPV8scC5lbmFibGVUcmFja2luZz1naSxwLmdldEN1cnJlbnRTY29wZT1TZSxwLmlzUHJveHk9ZmEscC5pc1JlYWN0aXZlPUVyLHAuaXNSZWFkb25seT1NdCxwLmlzUmVmPVNyLHAuaXNTaGFsbG93PVRlLHAubWFya1Jhdz1WbyxwLm9uU2NvcGVEaXNwb3NlPWZ0LHAucGF1c2VTY2hlZHVsaW5nPUNuLHAucGF1c2VUcmFja2luZz1HbixwLnByb3h5UmVmcz1VbyxwLnJlYWN0aXZlPUdpLHAucmVhZG9ubHk9cWkscC5yZWY9RHIscC5yZXNldFNjaGVkdWxpbmc9bm4scC5yZXNldFRyYWNraW5nPUhyLHAuc2hhbGxvd1JlYWN0aXZlPUlhLHAuc2hhbGxvd1JlYWRvbmx5PURuLHAuc2hhbGxvd1JlZj1DbyxwLnN0b3A9bmUscC50b1Jhdz1mbixwLnRvUmVmPWNvLHAudG9SZWZzPUFvLHAudG9WYWx1ZT1kbixwLnRyYWNrPSRlLHAudHJpZ2dlcj1ldCxwLnRyaWdnZXJSZWY9Um4scC51bnJlZj1VbixwfSh7fSxmKTtyZXR1cm4gc31mdW5jdGlvbiBJdihmKXt2YXIgcz1mdW5jdGlvbihwKXsidXNlIHN0cmljdCI7bGV0IHc9YApgLE49NDQsRT01MCxoPTUwLF89WyIlIiwiJSJdLEk9IiMwMDdhZmYiLFNlPS9eKFthLXotXSs6KT9cL1wvL2ksZnQ9L15kYXRhOi4qLC4qLyxUdD0iV0VCX0lOVk9LRV9BUFBTRVJWSUNFIixCdD0id3hzOi8vIixSPSJqc29uOi8vIixBdD0id3hzTW9kdWxlcyIsWm49InJlbmRlcmpzTW9kdWxlcyIsc3Q9Im9uU2hvdyIsRz0ib25IaWRlIixuZT0ib25MYXVuY2giLEp0PSJvbkVycm9yIixjbj0ib25UaGVtZUNoYW5nZSIsU249Im9mZlRoZW1lQ2hhbmdlIixHbj0ib25LZXlib2FyZEhlaWdodENoYW5nZSIsZ2k9Im9uUGFnZU5vdEZvdW5kIixIcj0ib25VbmhhbmRsZWRSZWplY3Rpb24iLENuPSJvbkV4aXQiLG5uPSJvbkxvYWQiLHluPSJvblJlYWR5IixJbj0ib25VbmxvYWQiLE1uPSJvbkluaXQiLHhyPSJvblNhdmVFeGl0U3RhdGUiLG9pPSJvblJlc2l6ZSIsWG49Im9uQmFja1ByZXNzIixqcj0ib25QYWdlU2Nyb2xsIiwkZT0ib25UYWJJdGVtVGFwIixldD0ib25SZWFjaEJvdHRvbSIsTnQ9Im9uUHVsbERvd25SZWZyZXNoIix1bj0ib25TaGFyZVRpbWVsaW5lIixhbj0ib25TaGFyZUNoYXQiLHNuPSJvbkFkZFRvRmF2b3JpdGVzIixrbj0ib25TaGFyZUFwcE1lc3NhZ2UiLGNyPSJvbk5hdmlnYXRpb25CYXJCdXR0b25UYXAiLHFuPSJvbk5hdmlnYXRpb25CYXJTZWFyY2hJbnB1dENsaWNrZWQiLHBpPSJvbk5hdmlnYXRpb25CYXJTZWFyY2hJbnB1dENoYW5nZWQiLHpyPSJvbk5hdmlnYXRpb25CYXJTZWFyY2hJbnB1dENvbmZpcm1lZCIsX3I9Im9uTmF2aWdhdGlvbkJhclNlYXJjaElucHV0Rm9jdXNDaGFuZ2VkIixvbz0ib25BcHBFbnRlckZvcmVncm91bmQiLFhvPSJvbkFwcEVudGVyQmFja2dyb3VuZCIsdWE9Im9uV3hzSW52b2tlQ2FsbE1ldGhvZCI7ZnVuY3Rpb24gamkob2Upe2xldCBZPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIGFlPT5ZW2FlXXx8KFlbYWVdPW9lKGFlKSl9ZnVuY3Rpb24geG4ob2Upe3JldHVybiBqaShvZSl9ZnVuY3Rpb24gYnIob2U9IiIpe3JldHVybigiIitvZSkucmVwbGFjZSgvW15ceDAwLVx4ZmZdL2csIioqIikubGVuZ3RofWZ1bmN0aW9uIGFpKG9lKXtyZXR1cm4gb2UuaW5kZXhPZigiLyIpPT09MH1mdW5jdGlvbiB2aShvZSl7cmV0dXJuIGFpKG9lKT9vZToiLyIrb2V9ZnVuY3Rpb24gVm4ob2Upe3JldHVybiBhaShvZSk/b2Uuc2xpY2UoMSk6b2V9bGV0IHlvPShvZSxZKT0+e2xldCBhZTtmb3IobGV0IE1lPTA7TWU8b2UubGVuZ3RoO01lKyspYWU9b2VbTWVdKFkpO3JldHVybiBhZX07ZnVuY3Rpb24gQnIob2UsWT1udWxsKXtsZXQgYWU7cmV0dXJuKC4uLk1lKT0+KG9lJiYoYWU9b2UuYXBwbHkoWSxNZSksb2U9bnVsbCksYWUpfWZ1bmN0aW9uIFBhKG9lLFkpe29lPW9lfHx7fSxwLmlzU3RyaW5nKFkpJiYoWT17ZXJyTXNnOll9KSwvOm9rJC8udGVzdChZLmVyck1zZyk/cC5pc0Z1bmN0aW9uKG9lLnN1Y2Nlc3MpJiZvZS5zdWNjZXNzKFkpOnAuaXNGdW5jdGlvbihvZS5mYWlsKSYmb2UuZmFpbChZKSxwLmlzRnVuY3Rpb24ob2UuY29tcGxldGUpJiZvZS5jb21wbGV0ZShZKX1mdW5jdGlvbiBUaShvZSl7bGV0IFk9e307cmV0dXJuIHAuaXNQbGFpbk9iamVjdChvZSkmJk9iamVjdC5rZXlzKG9lKS5zb3J0KCkuZm9yRWFjaChhZT0+e2xldCBNZT1hZTtZW01lXT1vZVtNZV19KSxPYmplY3Qua2V5cyhZKT9ZOm9lfWZ1bmN0aW9uIFFuKG9lKXtyZXR1cm4hIW9lLmFwcENvbnRleHR9ZnVuY3Rpb24geXIob2Upe3JldHVybiBvZSYmKFFuKG9lKT9vZS5wcm94eTpvZSl9ZnVuY3Rpb24gTmEob2Upe3JldHVybiBvZS5ub2RlVHlwZT09PTF9ZnVuY3Rpb24gZ3Iob2UsWT0hMSl7bGV0e3Zub2RlOmFlfT1vZTtpZihOYShhZS5lbCkpcmV0dXJuIFk/YWUuZWw/W2FlLmVsXTpbXTphZS5lbDtsZXR7c3ViVHJlZTpNZX09b2U7aWYoTWUuc2hhcGVGbGFnJjE2KXtsZXQgdXQ9TWUuY2hpbGRyZW4uZmlsdGVyKGhuPT5obi5lbCYmTmEoaG4uZWwpKTtpZih1dC5sZW5ndGg+MClyZXR1cm4gWT91dC5tYXAoaG49PmhuLmVsKTp1dFswXS5lbH1yZXR1cm4gWT9hZS5lbD9bYWUuZWxdOltdOmFlLmVsfWxldCBFbz0wO2Z1bmN0aW9uIE1vKG9lLC4uLlkpe2xldCBhZT1EYXRlLm5vdygpLE1lPUVvP2FlLUVvOjA7cmV0dXJuIEVvPWFlLGBbJHthZX1dWyR7TWV9bXNdWyR7b2V9XVx1RkYxQSR7WS5tYXAodXQ9PkpTT04uc3RyaW5naWZ5KHV0KSkuam9pbigiICIpfWB9bGV0IERvPWVuY29kZVVSSUNvbXBvbmVudDtmdW5jdGlvbiBPaShvZSxZPURvKXtsZXQgYWU9b2U/T2JqZWN0LmtleXMob2UpLm1hcChNZT0+e2xldCB1dD1vZVtNZV07cmV0dXJuIHR5cGVvZiB1dD09PXZvaWQgMHx8dXQ9PT1udWxsP3V0PSIiOnAuaXNQbGFpbk9iamVjdCh1dCkmJih1dD1KU09OLnN0cmluZ2lmeSh1dCkpLFkoTWUpKyI9IitZKHV0KX0pLmZpbHRlcihNZT0+TWUubGVuZ3RoPjApLmpvaW4oIiYiKTpudWxsO3JldHVybiBhZT9gPyR7YWV9YDoiIn1mdW5jdGlvbiBzaShvZSl7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoIiIrb2UpfWNhdGNoKFkpe31yZXR1cm4iIitvZX1mdW5jdGlvbiBTbyhvZT17fSl7bGV0IFk9e307cmV0dXJuIE9iamVjdC5rZXlzKG9lKS5mb3JFYWNoKGFlPT57dHJ5e1lbYWVdPXNpKG9lW2FlXSl9Y2F0Y2goTWUpe1lbYWVdPW9lW2FlXX19KSxZfWxldCBMcj0vXCsvZztmdW5jdGlvbiBBcihvZSl7bGV0IFk9e307aWYob2U9PT0iInx8b2U9PT0iPyIpcmV0dXJuIFk7bGV0IE1lPShvZVswXT09PSI/Ij9vZS5zbGljZSgxKTpvZSkuc3BsaXQoIiYiKTtmb3IobGV0IHV0PTA7dXQ8TWUubGVuZ3RoOysrdXQpe2xldCBobj1NZVt1dF0ucmVwbGFjZShMciwiICIpLHByPWhuLmluZGV4T2YoIj0iKSxBbj1zaShwcjwwP2huOmhuLnNsaWNlKDAscHIpKSx6bj1wcjwwP251bGw6c2koaG4uc2xpY2UocHIrMSkpO2lmKEFuIGluIFkpe2xldCBOcj1ZW0FuXTtwLmlzQXJyYXkoTnIpfHwoTnI9WVtBbl09W05yXSksTnIucHVzaCh6bil9ZWxzZSBZW0FuXT16bn1yZXR1cm4gWX1mdW5jdGlvbiBhbyhvZSl7bGV0W1ksYWVdPW9lLnNwbGl0KCI/IiwyKTtyZXR1cm57cGF0aDpZLHF1ZXJ5OkFyKGFlfHwiIil9fWZ1bmN0aW9uIHdvKG9lKXtsZXQgWT17fTtyZXR1cm4gb2UmJk9iamVjdC5rZXlzKG9lKS5mb3JFYWNoKGFlPT57YWUuaW5kZXhPZigiZGF0YS0iKT09PTAmJihZW2FlLnJlcGxhY2UoImRhdGEtIiwiIildPW9lW2FlXSl9KSxZfWNsYXNzIFBpIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoWSl7c3VwZXIoWSk7dGhpcy5uYW1lPSJET01FeGNlcHRpb24ifX1mdW5jdGlvbiBsaShvZSxZKXtyZXR1cm4gWSYmKFkuY2FwdHVyZSYmKG9lKz0iQ2FwdHVyZSIpLFkub25jZSYmKG9lKz0iT25jZSIpLFkucGFzc2l2ZSYmKG9lKz0iUGFzc2l2ZSIpKSxgb24ke3AuY2FwaXRhbGl6ZShwLmNhbWVsaXplKG9lKSl9YH1jbGFzcyB6aXtjb25zdHJ1Y3RvcihZLGFlKXt0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITEsdGhpcy50aW1lU3RhbXA9RGF0ZS5ub3coKSx0aGlzLl9zdG9wPSExLHRoaXMuX2VuZD0hMSx0aGlzLnR5cGU9WSx0aGlzLmJ1YmJsZXM9ISFhZS5idWJibGVzLHRoaXMuY2FuY2VsYWJsZT0hIWFlLmNhbmNlbGFibGV9cHJldmVudERlZmF1bHQoKXt0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITB9c3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl7dGhpcy5fZW5kPXRoaXMuX3N0b3A9ITB9c3RvcFByb3BhZ2F0aW9uKCl7dGhpcy5fc3RvcD0hMH19ZnVuY3Rpb24gRm8ob2Upe2lmKG9lIGluc3RhbmNlb2YgemkpcmV0dXJuIG9lO2xldFtZXT1JYShvZS50eXBlKSxhZT1uZXcgemkoWSx7YnViYmxlczohMSxjYW5jZWxhYmxlOiExfSk7cmV0dXJuIHAuZXh0ZW5kKGFlLG9lKSxhZX1jbGFzcyBXaXtjb25zdHJ1Y3Rvcigpe3RoaXMubGlzdGVuZXJzPU9iamVjdC5jcmVhdGUobnVsbCl9ZGlzcGF0Y2hFdmVudChZKXtsZXQgYWU9dGhpcy5saXN0ZW5lcnNbWS50eXBlXTtpZighYWUpcmV0dXJuITE7bGV0IE1lPUZvKFkpLHV0PWFlLmxlbmd0aDtmb3IobGV0IGhuPTA7aG48dXQmJihhZVtobl0uY2FsbCh0aGlzLE1lKSwhTWUuX2VuZCk7aG4rKyk7cmV0dXJuIE1lLmNhbmNlbGFibGUmJk1lLmRlZmF1bHRQcmV2ZW50ZWR9YWRkRXZlbnRMaXN0ZW5lcihZLGFlLE1lKXtZPWxpKFksTWUpLCh0aGlzLmxpc3RlbmVyc1tZXXx8KHRoaXMubGlzdGVuZXJzW1ldPVtdKSkucHVzaChhZSl9cmVtb3ZlRXZlbnRMaXN0ZW5lcihZLGFlLE1lKXtZPWxpKFksTWUpO2xldCB1dD10aGlzLmxpc3RlbmVyc1tZXTtpZighdXQpcmV0dXJuO2xldCBobj11dC5pbmRleE9mKGFlKTtobj4tMSYmdXQuc3BsaWNlKGhuLDEpfX1sZXQgR2k9Lyg/Ok9uY2V8UGFzc2l2ZXxDYXB0dXJlKSQvO2Z1bmN0aW9uIElhKG9lKXtsZXQgWTtpZihHaS50ZXN0KG9lKSl7WT17fTtsZXQgYWU7Zm9yKDthZT1vZS5tYXRjaChHaSk7KW9lPW9lLnNsaWNlKDAsb2UubGVuZ3RoLWFlWzBdLmxlbmd0aCksWVthZVswXS50b0xvd2VyQ2FzZSgpXT0hMH1yZXR1cm5bcC5oeXBoZW5hdGUob2Uuc2xpY2UoMikpLFldfWxldCBxaT0oKCk9Pih7c3RvcDoxLHByZXZlbnQ6MTw8MSxzZWxmOjE8PDJ9KSkoKTtmdW5jdGlvbiBEbihvZSl7bGV0IFk9MDtyZXR1cm4gb2UuaW5jbHVkZXMoInN0b3AiKSYmKFl8PXFpLnN0b3ApLG9lLmluY2x1ZGVzKCJwcmV2ZW50IikmJihZfD1xaS5wcmV2ZW50KSxvZS5pbmNsdWRlcygic2VsZiIpJiYoWXw9cWkuc2VsZiksWX1sZXQgWnI9MCxFcj0xLE10PTMsVGU9ODtmdW5jdGlvbiBmYShvZSxZKXtsZXR7cGFyZW50Tm9kZTphZX09b2U7aWYoIWFlKXJldHVybiBudWxsO2xldHtjaGlsZE5vZGVzOk1lfT1hZTtyZXR1cm4gTWVbTWUuaW5kZXhPZihvZSkrKFk9PT0ibiI/MTotMSldfHxudWxsfWZ1bmN0aW9uIGZuKG9lKXtsZXR7cGFyZW50Tm9kZTpZfT1vZTtpZihZKXtsZXR7Y2hpbGROb2RlczphZX09WSxNZT1hZS5pbmRleE9mKG9lKTtNZT4tMSYmKG9lLnBhcmVudE5vZGU9bnVsbCxhZS5zcGxpY2UoTWUsMSkpfX1mdW5jdGlvbiBWbyhvZSl7IW9lLm5vZGVJZCYmb2UucGFnZU5vZGUmJihvZS5ub2RlSWQ9b2UucGFnZU5vZGUuZ2VuSWQoKSl9Y2xhc3MgTXIgZXh0ZW5kcyBXaXtjb25zdHJ1Y3RvcihZLGFlLE1lKXtzdXBlcigpO2lmKHRoaXMucGFnZU5vZGU9bnVsbCx0aGlzLnBhcmVudE5vZGU9bnVsbCx0aGlzLl90ZXh0PW51bGwsTWUpe2xldHtwYWdlTm9kZTp1dH09TWU7dXQmJih0aGlzLnBhZ2VOb2RlPXV0LHRoaXMubm9kZUlkPXV0LmdlbklkKCksIXV0LmlzVW5tb3VudGVkJiZ1dC5vbkNyZWF0ZSh0aGlzLGFlKSl9dGhpcy5ub2RlVHlwZT1ZLHRoaXMubm9kZU5hbWU9YWUsdGhpcy5jaGlsZE5vZGVzPVtdfWdldCBmaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMuY2hpbGROb2Rlc1swXXx8bnVsbH1nZXQgbGFzdENoaWxkKCl7bGV0e2NoaWxkTm9kZXM6WX09dGhpcyxhZT1ZLmxlbmd0aDtyZXR1cm4gYWU/WVthZS0xXTpudWxsfWdldCBuZXh0U2libGluZygpe3JldHVybiBmYSh0aGlzLCJuIil9Z2V0IG5vZGVWYWx1ZSgpe3JldHVybiBudWxsfXNldCBub2RlVmFsdWUoWSl7fWdldCB0ZXh0Q29udGVudCgpe3JldHVybiB0aGlzLl90ZXh0fHwiIn1zZXQgdGV4dENvbnRlbnQoWSl7dGhpcy5fdGV4dD1ZLHRoaXMucGFnZU5vZGUmJiF0aGlzLnBhZ2VOb2RlLmlzVW5tb3VudGVkJiZ0aGlzLnBhZ2VOb2RlLm9uVGV4dENvbnRlbnQodGhpcyxZKX1nZXQgcGFyZW50RWxlbWVudCgpe2xldHtwYXJlbnROb2RlOll9PXRoaXM7cmV0dXJuIFkmJlkubm9kZVR5cGU9PT1Fcj9ZOm51bGx9Z2V0IHByZXZpb3VzU2libGluZygpe3JldHVybiBmYSh0aGlzLCJwIil9YXBwZW5kQ2hpbGQoWSl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKFksbnVsbCl9Y2xvbmVOb2RlKFkpe2xldCBhZT1wLmV4dGVuZChPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSksdGhpcykse2F0dHJpYnV0ZXM6TWV9PWFlO3JldHVybiBNZSYmKGFlLmF0dHJpYnV0ZXM9cC5leHRlbmQoe30sTWUpKSxZJiYoYWUuY2hpbGROb2Rlcz1hZS5jaGlsZE5vZGVzLm1hcCh1dD0+dXQuY2xvbmVOb2RlKCEwKSkpLGFlfWluc2VydEJlZm9yZShZLGFlKXtmbihZKSxZLnBhZ2VOb2RlPXRoaXMucGFnZU5vZGUsWS5wYXJlbnROb2RlPXRoaXMsVm8oWSk7bGV0e2NoaWxkTm9kZXM6TWV9PXRoaXM7aWYoYWUpe2xldCB1dD1NZS5pbmRleE9mKGFlKTtpZih1dD09PS0xKXRocm93IG5ldyBQaSgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2luc2VydEJlZm9yZScgb24gJ05vZGUnOiBUaGUgbm9kZSBiZWZvcmUgd2hpY2ggdGhlIG5ldyBub2RlIGlzIHRvIGJlIGluc2VydGVkIGlzIG5vdCBhIGNoaWxkIG9mIHRoaXMgbm9kZS4iKTtNZS5zcGxpY2UodXQsMCxZKX1lbHNlIE1lLnB1c2goWSk7cmV0dXJuIHRoaXMucGFnZU5vZGUmJiF0aGlzLnBhZ2VOb2RlLmlzVW5tb3VudGVkP3RoaXMucGFnZU5vZGUub25JbnNlcnRCZWZvcmUodGhpcyxZLGFlKTpZfXJlbW92ZUNoaWxkKFkpe2xldHtjaGlsZE5vZGVzOmFlfT10aGlzLE1lPWFlLmluZGV4T2YoWSk7aWYoTWU9PT0tMSl0aHJvdyBuZXcgUGkoIkZhaWxlZCB0byBleGVjdXRlICdyZW1vdmVDaGlsZCcgb24gJ05vZGUnOiBUaGUgbm9kZSB0byBiZSByZW1vdmVkIGlzIG5vdCBhIGNoaWxkIG9mIHRoaXMgbm9kZS4iKTtyZXR1cm4gWS5wYXJlbnROb2RlPW51bGwsYWUuc3BsaWNlKE1lLDEpLHRoaXMucGFnZU5vZGUmJiF0aGlzLnBhZ2VOb2RlLmlzVW5tb3VudGVkP3RoaXMucGFnZU5vZGUub25SZW1vdmVDaGlsZChZKTpZfX1sZXQgc289ImNsYXNzIixsbz0ic3R5bGUiLFlpPSIudk93bmVySWQiLEtpPSIudlJlbmRlcmpzIjtjbGFzcyBYciBleHRlbmRzIE1ye2NvbnN0cnVjdG9yKFksYWUsTWUpe3N1cGVyKFksYWUsTWUpO3RoaXMuYXR0cmlidXRlcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuc3R5bGU9bnVsbCx0aGlzLnZTaG93PW51bGwsdGhpcy5faHRtbD1udWxsfWdldCBjbGFzc05hbWUoKXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW3NvXXx8IiJ9c2V0IGNsYXNzTmFtZShZKXt0aGlzLnNldEF0dHJpYnV0ZShzbyxZKX1nZXQgaW5uZXJIVE1MKCl7cmV0dXJuIiJ9c2V0IGlubmVySFRNTChZKXt0aGlzLl9odG1sPVl9YWRkRXZlbnRMaXN0ZW5lcihZLGFlLE1lKXtzdXBlci5hZGRFdmVudExpc3RlbmVyKFksYWUsTWUpLHRoaXMucGFnZU5vZGUmJiF0aGlzLnBhZ2VOb2RlLmlzVW5tb3VudGVkJiYoYWUud3hzRXZlbnQ/dGhpcy5wYWdlTm9kZS5vbkFkZFd4c0V2ZW50KHRoaXMsbGkoWSxNZSksYWUud3hzRXZlbnQsRG4oYWUubW9kaWZpZXJzfHxbXSkpOnRoaXMucGFnZU5vZGUub25BZGRFdmVudCh0aGlzLGxpKFksTWUpLERuKGFlLm1vZGlmaWVyc3x8W10pKSl9cmVtb3ZlRXZlbnRMaXN0ZW5lcihZLGFlLE1lKXtzdXBlci5yZW1vdmVFdmVudExpc3RlbmVyKFksYWUsTWUpLHRoaXMucGFnZU5vZGUmJiF0aGlzLnBhZ2VOb2RlLmlzVW5tb3VudGVkJiZ0aGlzLnBhZ2VOb2RlLm9uUmVtb3ZlRXZlbnQodGhpcyxsaShZLE1lKSl9Z2V0QXR0cmlidXRlKFkpe3JldHVybiBZPT09bG8/dGhpcy5zdHlsZTp0aGlzLmF0dHJpYnV0ZXNbWV19cmVtb3ZlQXR0cmlidXRlKFkpe1k9PWxvP3RoaXMuc3R5bGU9bnVsbDpkZWxldGUgdGhpcy5hdHRyaWJ1dGVzW1ldLHRoaXMucGFnZU5vZGUmJiF0aGlzLnBhZ2VOb2RlLmlzVW5tb3VudGVkJiZ0aGlzLnBhZ2VOb2RlLm9uUmVtb3ZlQXR0cmlidXRlKHRoaXMsWSl9c2V0QXR0cmlidXRlKFksYWUpe1k9PT1sbz90aGlzLnN0eWxlPWFlOnRoaXMuYXR0cmlidXRlc1tZXT1hZSx0aGlzLnBhZ2VOb2RlJiYhdGhpcy5wYWdlTm9kZS5pc1VubW91bnRlZCYmdGhpcy5wYWdlTm9kZS5vblNldEF0dHJpYnV0ZSh0aGlzLFksYWUpfXRvSlNPTih7YXR0cjpZLG5vcm1hbGl6ZTphZX09e30pe2xldHthdHRyaWJ1dGVzOk1lLHN0eWxlOnV0LGxpc3RlbmVyczpobixfdGV4dDpwcn09dGhpcyxBbj17fTtPYmplY3Qua2V5cyhNZSkubGVuZ3RoJiYoQW4uYT1hZT9hZShNZSk6TWUpO2xldCB6bj1PYmplY3Qua2V5cyhobik7aWYoem4ubGVuZ3RoKXtsZXQgTnIsaG89e307em4uZm9yRWFjaCh2cj0+e2xldCBkYT1oblt2cl07aWYoZGEubGVuZ3RoKXtsZXR7d3hzRXZlbnQ6UG8sbW9kaWZpZXJzOlJhfT1kYVswXSxoYT1EbihSYXx8W10pO1BvPyhOcnx8KE5yPXt9KSxOclt2cl09W2FlP2FlKFBvKTpQbyxoYV0pOmhvW3ZyXT1oYX19KSxBbi5lPWFlP2FlKGhvLCExKTpobyxOciYmKEFuLnc9YWU/YWUoTnIsITEpOk5yKX1yZXR1cm4gdXQhPT1udWxsJiYoQW4ucz1hZT9hZSh1dCk6dXQpLFl8fChBbi5pPXRoaXMubm9kZUlkLEFuLm49dGhpcy5ub2RlTmFtZSkscHIhPT1udWxsJiYoQW4udD1hZT9hZShwcik6cHIpLEFufX1jbGFzcyBtaSBleHRlbmRzIE1ye2NvbnN0cnVjdG9yKFksYWUpe3N1cGVyKFRlLCIjY29tbWVudCIsYWUpO3RoaXMuX3RleHQ9IiJ9dG9KU09OKFk9e30pe3JldHVybiBZLmF0dHI/e306e2k6dGhpcy5ub2RlSWR9fX1jbGFzcyBTciBleHRlbmRzIFhye2NvbnN0cnVjdG9yKFksYWUpe3N1cGVyKEVyLFkudG9VcHBlckNhc2UoKSxhZSk7dGhpcy50YWdOYW1lPXRoaXMubm9kZU5hbWV9fWNsYXNzIERyIGV4dGVuZHMgU3J7Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpfXNldCB2YWx1ZShZKXt0aGlzLnNldEF0dHJpYnV0ZSgidmFsdWUiLFkpfX1jbGFzcyBDbyBleHRlbmRzIERye31jbGFzcyBRciBleHRlbmRzIFhye2NvbnN0cnVjdG9yKFksYWUpe3N1cGVyKE10LCIjdGV4dCIsYWUpO3RoaXMuX3RleHQ9WX1nZXQgbm9kZVZhbHVlKCl7cmV0dXJuIHRoaXMuX3RleHR8fCIifXNldCBub2RlVmFsdWUoWSl7dGhpcy5fdGV4dD1ZLHRoaXMucGFnZU5vZGUmJiF0aGlzLnBhZ2VOb2RlLmlzVW5tb3VudGVkJiZ0aGlzLnBhZ2VOb2RlLm9uTm9kZVZhbHVlKHRoaXMsWSl9fWxldCBZdD17QUQ6WyJkYXRhIl0sIkFELURSQVciOlsiZGF0YSJdLCJMSVZFLVBMQVlFUiI6WyJwaWN0dXJlLWluLXBpY3R1cmUtbW9kZSJdLE1BUDpbIm1hcmtlcnMiLCJwb2x5bGluZSIsImNpcmNsZXMiLCJjb250cm9scyIsImluY2x1ZGUtcG9pbnRzIiwicG9seWdvbnMiXSxQSUNLRVI6WyJyYW5nZSIsInZhbHVlIl0sIlBJQ0tFUi1WSUVXIjpbInZhbHVlIl0sIlJJQ0gtVEVYVCI6WyJub2RlcyJdLFZJREVPOlsiZGFubXUtbGlzdCIsImhlYWRlciJdLCJXRUItVklFVyI6WyJ3ZWJ2aWV3LXN0eWxlcyJdfSxSbj1bImFuaW1hdGlvbiJdLFVuPShvZSxZKT0+e2lmKFJuLmluZGV4T2YoWSk+LTEpcmV0dXJuITA7bGV0IGFlPVl0W29lLm5vZGVOYW1lXTtyZXR1cm4hIShhZSYmYWUuaW5kZXhPZihZKT4tMSl9LGRuPTEsZXI9MixVbz0zLCRvPTQsRnI9NSxBbz02LFFvPTcsVG89OCxjbz05LF9pPTEwLEhvPTEyLE5pPTE1LGJpPTIwO2Z1bmN0aW9uIElpKG9lLFkse2NsZWFyVGltZW91dDphZSxzZXRUaW1lb3V0Ok1lfSl7bGV0IHV0LGhuPWZ1bmN0aW9uKCl7YWUodXQpLHV0PU1lKCgpPT5vZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksWSl9O3JldHVybiBobi5jYW5jZWw9ZnVuY3Rpb24oKXthZSh1dCl9LGhufWNsYXNzIER7Y29uc3RydWN0b3IoWSxhZSl7dGhpcy5pZD1ZLHRoaXMubGlzdGVuZXI9e30sdGhpcy5lbWl0Q2FjaGU9W10sYWUmJk9iamVjdC5rZXlzKGFlKS5mb3JFYWNoKE1lPT57dGhpcy5vbihNZSxhZVtNZV0pfSl9ZW1pdChZLC4uLmFlKXtsZXQgTWU9dGhpcy5saXN0ZW5lcltZXTtpZighTWUpcmV0dXJuIHRoaXMuZW1pdENhY2hlLnB1c2goe2V2ZW50TmFtZTpZLGFyZ3M6YWV9KTtNZS5mb3JFYWNoKHV0PT57dXQuZm4uYXBwbHkodXQuZm4sYWUpfSksdGhpcy5saXN0ZW5lcltZXT1NZS5maWx0ZXIodXQ9PnV0LnR5cGUhPT0ib25jZSIpfW9uKFksYWUpe3RoaXMuX2FkZExpc3RlbmVyKFksIm9uIixhZSksdGhpcy5fY2xlYXJDYWNoZShZKX1vbmNlKFksYWUpe3RoaXMuX2FkZExpc3RlbmVyKFksIm9uY2UiLGFlKSx0aGlzLl9jbGVhckNhY2hlKFkpfW9mZihZLGFlKXtsZXQgTWU9dGhpcy5saXN0ZW5lcltZXTtpZighIU1lKWlmKGFlKWZvcihsZXQgdXQ9MDt1dDxNZS5sZW5ndGg7KU1lW3V0XS5mbj09PWFlJiYoTWUuc3BsaWNlKHV0LDEpLHV0LS0pLHV0Kys7ZWxzZSBkZWxldGUgdGhpcy5saXN0ZW5lcltZXX1fY2xlYXJDYWNoZShZKXtmb3IobGV0IGFlPTA7YWU8dGhpcy5lbWl0Q2FjaGUubGVuZ3RoO2FlKyspe2xldCBNZT10aGlzLmVtaXRDYWNoZVthZV0sdXQ9WT9NZS5ldmVudE5hbWU9PT1ZP1k6bnVsbDpNZS5ldmVudE5hbWU7aWYoIXV0KWNvbnRpbnVlO2lmKHR5cGVvZiB0aGlzLmVtaXQuYXBwbHkodGhpcyxbdXQsLi4uTWUuYXJnc10pPT0ibnVtYmVyIil7dGhpcy5lbWl0Q2FjaGUucG9wKCk7Y29udGludWV9dGhpcy5lbWl0Q2FjaGUuc3BsaWNlKGFlLDEpLGFlLS19fV9hZGRMaXN0ZW5lcihZLGFlLE1lKXsodGhpcy5saXN0ZW5lcltZXXx8KHRoaXMubGlzdGVuZXJbWV09W10pKS5wdXNoKHtmbjpNZSx0eXBlOmFlfSl9fWxldCB6PVtNbixubixzdCxHLEluLFhuLGpyLCRlLGV0LE50LHVuLGtuLGFuLHNuLHhyLGNyLHFuLHBpLHpyLF9yXTtmdW5jdGlvbiBsZShvZSl7cmV0dXJuW25uLHN0XS5pbmRleE9mKG9lKT4tMX1mdW5jdGlvbiBIZShvZSl7cmV0dXJuIHouaW5kZXhPZihvZSk+LTF9bGV0IGplPVtzdCxHLG5lLEp0LGNuLGdpLEhyLENuLE1uLG5uLHluLEluLG9pLFhuLGpyLCRlLGV0LE50LHVuLHNuLGtuLGFuLHhyLGNyLHFuLHBpLHpyLF9yXTtmdW5jdGlvbiBkdChvZSxZLGFlPSEwKXtyZXR1cm4gYWUmJiFwLmlzRnVuY3Rpb24oWSk/ITE6amUuaW5kZXhPZihvZSk+LTE/ITA6b2UuaW5kZXhPZigib24iKT09PTB9bGV0IHFlLG50PVtdO2Z1bmN0aW9uIFRyKG9lKXtpZihxZSlyZXR1cm4gb2UocWUpO250LnB1c2gob2UpfWZ1bmN0aW9uIGtpKG9lKXtxZT1vZSxudC5mb3JFYWNoKFk9Plkob2UpKX1sZXQgT3I9QnIoKG9lLFkpPT5ZKG9lKSksUHI9ZnVuY3Rpb24oKXt9O1ByLnByb3RvdHlwZT17X2lkOjEsb246ZnVuY3Rpb24ob2UsWSxhZSl7dmFyIE1lPXRoaXMuZXx8KHRoaXMuZT17fSk7cmV0dXJuKE1lW29lXXx8KE1lW29lXT1bXSkpLnB1c2goe2ZuOlksY3R4OmFlLF9pZDp0aGlzLl9pZH0pLHRoaXMuX2lkKyt9LG9uY2U6ZnVuY3Rpb24ob2UsWSxhZSl7dmFyIE1lPXRoaXM7ZnVuY3Rpb24gdXQoKXtNZS5vZmYob2UsdXQpLFkuYXBwbHkoYWUsYXJndW1lbnRzKX1yZXR1cm4gdXQuXz1ZLHRoaXMub24ob2UsdXQsYWUpfSxlbWl0OmZ1bmN0aW9uKG9lKXt2YXIgWT1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxhZT0oKHRoaXMuZXx8KHRoaXMuZT17fSkpW29lXXx8W10pLnNsaWNlKCksTWU9MCx1dD1hZS5sZW5ndGg7Zm9yKE1lO01lPHV0O01lKyspYWVbTWVdLmZuLmFwcGx5KGFlW01lXS5jdHgsWSk7cmV0dXJuIHRoaXN9LG9mZjpmdW5jdGlvbihvZSxZKXt2YXIgYWU9dGhpcy5lfHwodGhpcy5lPXt9KSxNZT1hZVtvZV0sdXQ9W107aWYoTWUmJlkpe2Zvcih2YXIgaG49TWUubGVuZ3RoLTE7aG4+PTA7aG4tLSlpZihNZVtobl0uZm49PT1ZfHxNZVtobl0uZm4uXz09PVl8fE1lW2huXS5faWQ9PT1ZKXtNZS5zcGxpY2UoaG4sMSk7YnJlYWt9dXQ9TWV9cmV0dXJuIHV0Lmxlbmd0aD9hZVtvZV09dXQ6ZGVsZXRlIGFlW29lXSx0aGlzfX07dmFyIHVvPVByO2xldCBmbz17YmxhY2s6InJnYmEoMCwwLDAsMC40KSIsd2hpdGU6InJnYmEoMjU1LDI1NSwyNTUsMC40KSJ9O2Z1bmN0aW9uIE9vKG9lKXtyZXR1cm4gb2UmJm9lIGluIGZvP2ZvW29lXTpvZX1mdW5jdGlvbiBjaShvZSl7cmV0dXJuIG9lPT09ImJsYWNrIj8iIzAwMDAwMCI6IiNmZmZmZmYifWZ1bmN0aW9uIGpvKG9lLFksYWUpe2lmKHAuaXNTdHJpbmcoWSkmJlkuc3RhcnRzV2l0aCgiQCIpKXtsZXQgTWU9WS5yZXBsYWNlKCJAIiwiIiksdXQ9b2VbTWVdfHxZO3N3aXRjaChhZSl7Y2FzZSJ0aXRsZUNvbG9yIjp1dD1jaSh1dCk7YnJlYWs7Y2FzZSJib3JkZXJTdHlsZSI6dXQ9T28odXQpO2JyZWFrfXJldHVybiB1dH1yZXR1cm4gWX1mdW5jdGlvbiBKaShvZSxZPXt9LGFlPSJsaWdodCIpe2xldCBNZT1ZW2FlXSx1dD17fTtyZXR1cm4gdHlwZW9mIE1lPT0idW5kZWZpbmVkInx8IW9lP29lOihPYmplY3Qua2V5cyhvZSkuZm9yRWFjaChobj0+e2xldCBwcj1vZVtobl0sQW49KCk9PnAuaXNQbGFpbk9iamVjdChwcik/SmkocHIsWSxhZSk6cC5pc0FycmF5KHByKT9wci5tYXAoem49PnAuaXNQbGFpbk9iamVjdCh6bik/Smkoem4sWSxhZSk6am8oTWUsem4pKTpqbyhNZSxwcixobik7dXRbaG5dPUFuKCl9KSx1dCl9dmFyIGthPXtpbnZva2VBcnJheUZuczp5byxpc1VuaUxpZmVjeWNsZUhvb2s6ZHQsZGVjb2RlZFF1ZXJ5OlNvLE9OX0xPQUQ6bm4sT05fU0hPVzpzdCxMSU5FRkVFRDp3LFJFTkRFUkpTX01PRFVMRVM6Wm4sZm9ybWF0TG9nOk1vLFdYU19QUk9UT0NPTDpCdCxXWFNfTU9EVUxFUzpBdCxPTl9FUlJPUjpKdCxVbmlMaWZlY3ljbGVIb29rczpqZSxpbnZva2VDcmVhdGVFcnJvckhhbmRsZXI6T3IsaW52b2tlQ3JlYXRlVnVlQXBwSG9vazpraSxvbmNlOkJyLEkxOE5fSlNPTl9ERUxJTUlURVJTOl8sRW1pdHRlcjp1byxub3JtYWxpemVTdHlsZXM6SmksYWRkTGVhZGluZ1NsYXNoOnZpLHJlc29sdmVDb21wb25lbnRJbnN0YW5jZTp5cixyZW1vdmVMZWFkaW5nU2xhc2g6Vm4sT05fUkVTSVpFOm9pLE9OX0FQUF9FTlRFUl9GT1JFR1JPVU5EOm9vLE9OX0FQUF9FTlRFUl9CQUNLR1JPVU5EOlhvLE9OX0hJREU6RyxPTl9QQUdFX1NDUk9MTDpqcixPTl9SRUFDSF9CT1RUT006ZXQscGFyc2VOVnVlRGF0YXNldDp3byxTQ0hFTUVfUkU6U2UsREFUQV9SRTpmdCxjYWNoZVN0cmluZ0Z1bmN0aW9uOnhuLHBhcnNlUXVlcnk6QXIsY2FsbE9wdGlvbnM6UGEsT05fVU5IQU5ETEVfUkVKRUNUSU9OOkhyLE9OX1BBR0VfTk9UX0ZPVU5EOmdpLFBSSU1BUllfQ09MT1I6SSxnZXRMZW46YnIsT05fVEhFTUVfQ0hBTkdFOmNuLFRBQkJBUl9IRUlHSFQ6RSxOQVZCQVJfSEVJR0hUOk4sc29ydE9iamVjdDpUaSxPRkZfVEhFTUVfQ0hBTkdFOlNuLE9OX0tFWUJPQVJEX0hFSUdIVF9DSEFOR0U6R24sVW5pTm9kZTpNcixOT0RFX1RZUEVfUEFHRTpacixBQ1RJT05fVFlQRV9QQUdFX0NSRUFURTpkbixBQ1RJT05fVFlQRV9QQUdFX0NSRUFURUQ6ZXIsQUNUSU9OX1RZUEVfUEFHRV9TQ1JPTEw6TmksQUNUSU9OX1RZUEVfSU5TRVJUOiRvLEFDVElPTl9UWVBFX0NSRUFURTpVbyxBQ1RJT05fVFlQRV9SRU1PVkU6RnIsQUNUSU9OX1RZUEVfQUREX0VWRU5UOlRvLEFDVElPTl9UWVBFX0FERF9XWFNfRVZFTlQ6SG8sQUNUSU9OX1RZUEVfUkVNT1ZFX0VWRU5UOmNvLEFDVElPTl9UWVBFX1NFVF9BVFRSSUJVVEU6QW8sQUNUSU9OX1RZUEVfUkVNT1ZFX0FUVFJJQlVURTpRbyxBQ1RJT05fVFlQRV9TRVRfVEVYVDpfaSxPTl9SRUFEWTp5bixPTl9VTkxPQUQ6SW4sRXZlbnRDaGFubmVsOkQsbm9ybWFsaXplVGFiQmFyU3R5bGVzOk9vLE9OX05BVklHQVRJT05fQkFSX0JVVFRPTl9UQVA6Y3Isc3RyaW5naWZ5UXVlcnk6T2ksT05fUkVBQ0hfQk9UVE9NX0RJU1RBTkNFOmgsZGVib3VuY2U6SWksT05fUFVMTF9ET1dOX1JFRlJFU0g6TnQsT05fTkFWSUdBVElPTl9CQVJfU0VBUkNIX0lOUFVUX0NIQU5HRUQ6cGksT05fTkFWSUdBVElPTl9CQVJfU0VBUkNIX0lOUFVUX0NPTkZJUk1FRDp6cixPTl9OQVZJR0FUSU9OX0JBUl9TRUFSQ0hfSU5QVVRfQ0xJQ0tFRDpxbixPTl9OQVZJR0FUSU9OX0JBUl9TRUFSQ0hfSU5QVVRfRk9DVVNfQ0hBTkdFRDpfcixPTl9CQUNLX1BSRVNTOlhuLHBhcnNlVXJsOmFvLG9uQ3JlYXRlVnVlQXBwOlRyLE9OX1RBQl9JVEVNX1RBUDokZSxPTl9MQVVOQ0g6bmUsQUNUSU9OX1RZUEVfRVZFTlQ6YmksY3JlYXRlVW5pRXZlbnQ6Rm8sT05fV1hTX0lOVk9LRV9DQUxMX01FVEhPRDp1YSxXRUJfSU5WT0tFX0FQUFNFUlZJQ0U6VHQsaXNSb290SG9vazpIZSxpc1Jvb3RJbW1lZGlhdGVIb29rOmxlLFVuaUlucHV0RWxlbWVudDpEcixVbmlUZXh0QXJlYUVsZW1lbnQ6Q28sVW5pRWxlbWVudDpTcixVbmlUZXh0Tm9kZTpRcixVbmlDb21tZW50Tm9kZTptaSxmb3JjZVBhdGNoUHJvcDpVbixKU09OX1BST1RPQ09MOlIscmVzb2x2ZU93bmVyRWw6Z3IsQVRUUl9WX09XTkVSX0lEOllpLEFUVFJfVl9SRU5ERVJKUzpLaX07cmV0dXJuIGthfShmKTtyZXR1cm4gc312YXIgdms9MTtmdW5jdGlvbiBrdigpe3JldHVybih2aysrKS50b1N0cmluZygpfXZhciBuZD1mPT5mJiZKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGYpKXx8ZjtmdW5jdGlvbiB0dShmKXtsZXQgcz11cyhmKTtyZXR1cm4gcy5zdWJzdHJpbmcoOCxzLmxlbmd0aC0xKX1mdW5jdGlvbiByZChmKXtpZigham4oYnRvYSkpcmV0dXJuIiI7bGV0IHM9QXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKG5ldyBVaW50OEFycmF5KGYpLHA9PlN0cmluZy5mcm9tQ2hhckNvZGUocCkpLmpvaW4oIiIpO3JldHVybiBidG9hKHMpfWZ1bmN0aW9uIG51KGYpe2lmKCFmfHx0eXBlb2YgZiE9Im9iamVjdCIpcmV0dXJuITA7Zm9yKGxldCBzIGluIGYpaWYoSWwoZixzKSlyZXR1cm4hMTtyZXR1cm4hMH12YXIgR3U9WyJvZmYiLCJlcnJvciIsIndhcm4iLCJpbmZvIiwibG9nIiwiZGVidWciXSxxdT17fTtmdW5jdGlvbiBSdigpe0d1LmZvckVhY2goZj0+e2xldCBzPUd1LmluZGV4T2YoZik7cXVbZl09e30sR3UuZm9yRWFjaChwPT57R3UuaW5kZXhPZihwKTw9cyYmKHF1W2ZdW3BdPSEwKX0pfSl9ZnVuY3Rpb24gbHIoZil7bGV0IHM9Z2xvYmFsLldYRW52aXJvbm1lbnQmJmdsb2JhbC5XWEVudmlyb25tZW50LmxvZ0xldmVsfHwibG9nIjtyZXR1cm4gcXVbc10mJnF1W3NdW2ZdfWZ1bmN0aW9uIGlvKGYpe2dsb2JhbC5uYXRpdmVMb2coInd4SW50ZXJhY3Rpb25BbmFseXplcjogW2pzZm1dIitmLCJfX0RFQlVHIil9ZnVuY3Rpb24geHYoZixzLHApe3JldHVybmAke3N9QCR7cH0jJHtmfWB9dmFyIFl1PWNsYXNze2NvbnN0cnVjdG9yKHMpe3RoaXMuaW5zdGFuY2VJZD1TdHJpbmcocyksdGhpcy5sYXN0Q2FsbGJhY2tJZD0wLHRoaXMuY2FsbGJhY2tzPXt9LHRoaXMuaG9va3M9e319YWRkKHMpe3JldHVybiB0aGlzLmxhc3RDYWxsYmFja0lkKyssdGhpcy5jYWxsYmFja3NbdGhpcy5sYXN0Q2FsbGJhY2tJZF09cyx0aGlzLmxhc3RDYWxsYmFja0lkfXJlbW92ZShzKXtsZXQgcD10aGlzLmNhbGxiYWNrc1tzXTtyZXR1cm4gZGVsZXRlIHRoaXMuY2FsbGJhY2tzW3NdLHB9cmVnaXN0ZXJIb29rKHMscCx3LE4pe2xldCBFPXh2KHMscCx3KTt0aGlzLmhvb2tzW0VdJiZjb25zb2xlLndhcm4oYFtKUyBGcmFtZXdvcmtdIE92ZXJyaWRlIGFuIGV4aXN0aW5nIGNvbXBvbmVudCBob29rICIke0V9Ii5gKSx0aGlzLmhvb2tzW0VdPU59dHJpZ2dlckhvb2socyxwLHcsTil7bGV0IEU9eHYocyxwLHcpLGg9dGhpcy5ob29rc1tFXTtpZigham4oaCkpcmV0dXJuIGNvbnNvbGUuZXJyb3IoYFtKUyBGcmFtZXdvcmtdIEludmFsaWQgaG9vayBmdW5jdGlvbiB0eXBlICgke3R5cGVvZiBofSkgb24gIiR7RX0iLmApLG51bGw7bGV0IF89bnVsbDt0cnl7Xz1oLmFwcGx5KG51bGwsTnx8W10pfWNhdGNoKEkpe3Rocm93IGNvbnNvbGUuZXJyb3IoYFtKUyBGcmFtZXdvcmtdIEZhaWxlZCB0byBleGVjdXRlIHRoZSBob29rIGZ1bmN0aW9uIG9uICIke0V9Ii5gKSxJfXJldHVybiBffWNvbnN1bWUocyxwLHcpe2xldCBOPXRoaXMuY2FsbGJhY2tzW3NdO2lmKCh0eXBlb2Ygdz09InVuZGVmaW5lZCJ8fHc9PT0hMSkmJmRlbGV0ZSB0aGlzLmNhbGxiYWNrc1tzXSxqbihOKSl0cnl7cmV0dXJuIE4uY2FsbChudWxsLHAsdyl9Y2F0Y2goRSl7dGhyb3cgY29uc29sZS5lcnJvcihgW0pTIEZyYW1ld29ya10gRmFpbGVkIHRvIGV4ZWN1dGUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uOgogJHtFLnRvU3RyaW5nKCl9YCksRX1yZXR1cm4gbmV3IEVycm9yKGBpbnZhbGlkIGNhbGxiYWNrIGlkICIke3N9ImApfWNsb3NlKCl7dGhpcy5jYWxsYmFja3M9e30sdGhpcy5ob29rcz17fX19O3ZhciBLdT17fTtmdW5jdGlvbiBCdihmLHMpe2YmJihLdVtmXT1zKX1mdW5jdGlvbiBQcyhmKXtyZXR1cm4gS3VbZl19ZnVuY3Rpb24gTHYoZil7ZGVsZXRlIEt1W2ZdfWZ1bmN0aW9uIEpyKGYpe2lmKGYpe2xldCBzPUt1W2ZdO2lmKHMmJnMudGFza0NlbnRlcilyZXR1cm4gcy50YXNrQ2VudGVyfXJldHVybiBudWxsfWZ1bmN0aW9uIG1rKGYpe2YuY2FsY0NsYXNzTGlzdCYmZi5jYWxjQ2xhc3NMaXN0KCl9ZnVuY3Rpb24gaWQoZixzLHApe2xldHtkb2N1bWVudEVsZW1lbnQ6d309ZjtpZih3LnB1cmVDaGlsZHJlbi5sZW5ndGg+MHx8cy5wYXJlbnROb2RlKXJldHVybjtsZXQgTj13LmNoaWxkcmVuLEU9cD9OLmluZGV4T2YocCk6LTE7RTwwP04ucHVzaChzKTpOLnNwbGljZShFLDAscykscy5ub2RlVHlwZT09PTE/KHMucm9sZT09PSJib2R5Ij8ocy5kb2NJZD1mLmlkLHMub3duZXJEb2N1bWVudD1mLHMucGFyZW50Tm9kZT13LGtsKHMsdykpOihzLmNoaWxkcmVuLmZvckVhY2goaD0+e2gucGFyZW50Tm9kZT1zfSksb2QoZixzKSxrbChzLHcpLGRlbGV0ZSBmLm5vZGVNYXBbcy5ub2RlSWRdKSx3LnB1cmVDaGlsZHJlbi5wdXNoKHMpLF9rKGYscykpOihzLnBhcmVudE5vZGU9dyxmLm5vZGVNYXBbcy5yZWZdPXMpfWZ1bmN0aW9uIF9rKGYscyl7bGV0IHA9cy50b0pTT04oKTtmJiZmLnRhc2tDZW50ZXImJmpuKGYudGFza0NlbnRlci5zZW5kKSYmZi50YXNrQ2VudGVyLnNlbmQoImRvbSIse2FjdGlvbjoiY3JlYXRlQm9keSJ9LFtwXSl9ZnVuY3Rpb24gb2QoZixzKXtzLnJvbGU9ImJvZHkiLHMuZGVwdGg9MSxkZWxldGUgZi5ub2RlTWFwW3Mubm9kZUlkXSxzLnJlZj0iX3Jvb3QiLGYubm9kZU1hcC5fcm9vdD1zLGYuYm9keT1zfWZ1bmN0aW9uIGtsKGYscyl7Zi5wYXJlbnROb2RlPXMsbWsoZikscy5kb2NJZCYmKGYuZG9jSWQ9cy5kb2NJZCxmLm93bmVyRG9jdW1lbnQ9cy5vd25lckRvY3VtZW50LGYub3duZXJEb2N1bWVudC5ub2RlTWFwW2Yubm9kZUlkXT1mLGYuZGVwdGg9cy5kZXB0aCsxKSxmLmNoaWxkcmVuLmZvckVhY2gocD0+e2tsKHAsZil9KX1mdW5jdGlvbiBhZChmKXtmb3IoO2Y7KXtpZihmLm5vZGVUeXBlPT09MSlyZXR1cm4gZjtmPWYubmV4dFNpYmxpbmd9fWZ1bmN0aW9uIHNkKGYpe2Zvcig7Zjspe2lmKGYubm9kZVR5cGU9PT0xKXJldHVybiBmO2Y9Zi5wcmV2aW91c1NpYmxpbmd9fWZ1bmN0aW9uIFJsKGYscyxwLHc9ITEpe3A8MCYmKHA9MCk7bGV0IE49c1twLTFdLEU9c1twXTtyZXR1cm4gcy5zcGxpY2UocCwwLGYpLHcmJihOJiYoTi5uZXh0U2libGluZz1mKSxmLnByZXZpb3VzU2libGluZz1OLGYubmV4dFNpYmxpbmc9RSxFJiYoRS5wcmV2aW91c1NpYmxpbmc9ZikpLHB9ZnVuY3Rpb24geGwoZixzLHAsdz0hMSl7bGV0IE49cy5pbmRleE9mKGYpO2lmKE48MClyZXR1cm4tMTtpZih3KXtsZXQgST1zW04tMV0sU2U9c1tOKzFdO0kmJihJLm5leHRTaWJsaW5nPVNlKSxTZSYmKFNlLnByZXZpb3VzU2libGluZz1JKX1zLnNwbGljZShOLDEpO2xldCBFPXA7Tjw9cCYmKEU9cC0xKTtsZXQgaD1zW0UtMV0sXz1zW0VdO3JldHVybiBzLnNwbGljZShFLDAsZiksdyYmKGgmJihoLm5leHRTaWJsaW5nPWYpLGYucHJldmlvdXNTaWJsaW5nPWgsZi5uZXh0U2libGluZz1fLF8mJihfLnByZXZpb3VzU2libGluZz1mKSksTj09PUU/LTE6cH1mdW5jdGlvbiBsZChmLHMscD0hMSl7bGV0IHc9cy5pbmRleE9mKGYpO2lmKCEodzwwKSl7aWYocCl7bGV0IE49c1t3LTFdLEU9c1t3KzFdO04mJihOLm5leHRTaWJsaW5nPUUpLEUmJihFLnByZXZpb3VzU2libGluZz1OKX1zLnNwbGljZSh3LDEpfX12YXIgQmw9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmRlcHRoPTA7dGhpcy5ub2RlSWQ9a3YoKSx0aGlzLnJlZj10aGlzLm5vZGVJZCx0aGlzLmNoaWxkcmVuPVtdLHRoaXMucHVyZUNoaWxkcmVuPVtdLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMubmV4dFNpYmxpbmc9bnVsbCx0aGlzLnByZXZpb3VzU2libGluZz1udWxsfWRlc3Ryb3koKXtsZXQgcz1Qcyh0aGlzLmRvY0lkKTtzJiYoZGVsZXRlIHRoaXMuZG9jSWQsZGVsZXRlIHMubm9kZU1hcFt0aGlzLm5vZGVJZF0pLHRoaXMuY2hpbGRyZW4uZm9yRWFjaChwPT57cC5kZXN0cm95KCl9KX19O3ZhciBNdj17fTtmdW5jdGlvbiBjZChmLHMpe2lmKCFIaShzKXx8IXMubGVuZ3RoKXJldHVybjtjbGFzcyBwIGV4dGVuZHMgYm97fXMuZm9yRWFjaCh3PT57cC5wcm90b3R5cGVbd109ZnVuY3Rpb24oLi4uTil7bGV0IEU9SnIodGhpcy5kb2NJZCk7aWYoRSlyZXR1cm4gRS5zZW5kKCJjb21wb25lbnQiLHtyZWY6dGhpcy5yZWYsY29tcG9uZW50OmYsbWV0aG9kOnd9LE4pfX0pLE12W2ZdPXB9ZnVuY3Rpb24gRHYoZil7cmV0dXJuIE12W2ZdfWZ1bmN0aW9uIHBuKGYscyxwLHcsTil7bGV0IEU9e3R5cGU6ImRlY2wiLHByb3A6Zix2YWx1ZTpzLnRvU3RyaW5nKCkscmF3czp3LHNvdXJjZTpOfTtyZXR1cm4gcCYmKEUuaW1wb3J0YW50PSEwKSxFfXZhciBKdT0iYmFja2dyb3VuZENvbG9yIixadT0iYmFja2dyb3VuZEltYWdlIixiaz1mPT57bGV0e3ZhbHVlOnMsaW1wb3J0YW50OnAscmF3czp3LHNvdXJjZTpOfT1mO3JldHVybi9eIz9cUyskLy50ZXN0KHMpfHwvXnJnYmE/KC4rKSQvLnRlc3Qocyk/W3BuKFp1LCJub25lIixwLHcsTikscG4oSnUscyxwLHcsTildOi9ebGluZWFyLWdyYWRpZW50KC4rKSQvLnRlc3Qocyk/W3BuKFp1LHMscCx3LE4pLHBuKEp1LCJ0cmFuc3BhcmVudCIscCx3LE4pXTpzPT0iIj9bcG4oWnUsIm5vbmUiLHAsdyxOKSxwbihKdSwidHJhbnNwYXJlbnQiLHAsdyxOKV06W2ZdfSx5az1mPT57bGV0e3ZhbHVlOnMsaW1wb3J0YW50OnAscmF3czp3LHNvdXJjZTpOfT1mO3JldHVybi9eIz9cUyskLy50ZXN0KHMpfHwvXnJnYmE/KC4rKSQvLnRlc3Qocyk/W3BuKEp1LHMscCx3LE4pXTovXmxpbmVhci1ncmFkaWVudCguKykkLy50ZXN0KHMpP1twbihadSxzLHAsdyxOKV06cz09IiI/W2ZdOltmXX07ZnVuY3Rpb24gRWsoZil7cmV0dXJuIHM9PmYudHlwZT09PSJ1dnVlIj9iayhzKTp5ayhzKX1mdW5jdGlvbiBGdigpe3JldHVybiJib3JkZXJUb3AifWZ1bmN0aW9uIFZ2KCl7cmV0dXJuImJvcmRlclJpZ2h0In1mdW5jdGlvbiBVdigpe3JldHVybiJib3JkZXJCb3R0b20ifWZ1bmN0aW9uICR2KCl7cmV0dXJuImJvcmRlckxlZnQifXZhciBYdT1mPT57bGV0e3Byb3A6cyx2YWx1ZTpwLGltcG9ydGFudDp3LHJhd3M6Tixzb3VyY2U6RX09ZixoPVhjKHMpLnNwbGl0KCItIiksXz1oW2gubGVuZ3RoLTFdO189UWMoXyk7bGV0IEk9cC5yZXBsYWNlKC9ccyosXHMqL2csIiwiKS5zcGxpdCgvXHMrLyk7c3dpdGNoKEkubGVuZ3RoKXtjYXNlIDE6aWYoaC5sZW5ndGg9PT0zKXJldHVybltmXTtJLnB1c2goSVswXSxJWzBdLElbMF0pO2JyZWFrO2Nhc2UgMjpJLnB1c2goSVswXSxJWzFdKTticmVhaztjYXNlIDM6SS5wdXNoKElbMV0pO2JyZWFrfXJldHVybltwbihGdigpK18sSVswXSx3LE4sRSkscG4oVnYoKStfLElbMV0sdyxOLEUpLHBuKFV2KCkrXyxJWzJdLHcsTixFKSxwbigkdigpK18sSVszXSx3LE4sRSldfSx1ZD1mPT57bGV0e3Byb3A6cyx2YWx1ZTpwLGltcG9ydGFudDp3LHJhd3M6Tixzb3VyY2U6RX09ZixoPVhjKHMpLnNwbGl0KCItIilbMV07aD1RYyhoKTtsZXQgXz1wLnJlcGxhY2UoL1xzKixccyovZywiLCIpLnNwbGl0KC9ccysvKTtzd2l0Y2goXy5sZW5ndGgpe2Nhc2UgMTpyZXR1cm5bZl07Y2FzZSAyOl8ucHVzaChfWzBdLF9bMV0pO2JyZWFrO2Nhc2UgMzpfLnB1c2goX1sxXSk7YnJlYWt9cmV0dXJuW3BuKEZ2K2gsX1swXSx3LE4sRSkscG4oVnYraCxfWzFdLHcsTixFKSxwbihVditoLF9bMl0sdyxOLEUpLHBuKCR2K2gsX1szXSx3LE4sRSldfSxIdj1YdSxTaz11ZCxqdj1YdSx3az11ZDtmdW5jdGlvbiBDayhmKXtyZXR1cm4gcz0+e2xldCBwPSgpPT4iV2lkdGgiLHc9KCk9PiJTdHlsZSIsTj0oKT0+IkNvbG9yIix7cHJvcDpFLHZhbHVlOmgsaW1wb3J0YW50Ol8scmF3czpJLHNvdXJjZTpTZX09cyxmdD1oLnJlcGxhY2UoL1xzKixccyovZywiLCIpLnNwbGl0KC9ccysvKSxUdD1bL15bXGRcLl0rXFMqfF4odGhpbnxtZWRpdW18dGhpY2spJC8sL14oc29saWR8ZGFzaGVkfGRvdHRlZHxub25lKSQvLC9cUysvXS5tYXAoc3Q9PntsZXQgRz1mdC5maW5kSW5kZXgobmU9PnN0LnRlc3QobmUpKTtyZXR1cm4gRzwwP251bGw6ZnQuc3BsaWNlKEcsMSlbMF19KSxCdD1mLnR5cGU9PSJ1dnVlIjtpZihCdCl7aWYoZnQubGVuZ3RoPjAmJmghPSIiKXJldHVybltzXX1lbHNlIGlmKGZ0Lmxlbmd0aD4wKXJldHVybltzXTtsZXQgUj1zdD0+c3QhPW51bGw/c3QudHJpbSgpOmYudHlwZT09InV2dWUiPyJtZWRpdW0iOiIwIixBdD1zdD0+c3QhPW51bGw/c3QudHJpbSgpOmYudHlwZT09InV2dWUiPyJub25lIjoic29saWQiLFpuPXN0PT5zdCE9bnVsbD9zdC50cmltKCk6IiMwMDAwMDAiO3JldHVybiBCdD9bLi4uanYocG4oRStwKCksUihUdFswXSksXyxJLFNlKSksLi4uSHYocG4oRSt3KCksQXQoVHRbMV0pLF8sSSxTZSkpLC4uLlh1KHBuKEUrTigpLFpuKFR0WzJdKSxfLEksU2UpKV06W3BuKEUrcCgpLFIoVHRbMF0pLF8sSSxTZSkscG4oRSt3KCksQXQoVHRbMV0pLF8sSSxTZSkscG4oRStOKCksWm4oVHRbMl0pLF8sSSxTZSldfX1mdW5jdGlvbiBBayhmKXtyZXR1cm4gcz0+e2xldCBwPSJXaWR0aCIsdz0iU3R5bGUiLE49IkNvbG9yIix7cHJvcDpFLHZhbHVlOmgsaW1wb3J0YW50Ol8scmF3czpJLHNvdXJjZTpTZX09cyxmdD1oLnJlcGxhY2UoL1xzKixccyovZywiLCIpLnNwbGl0KC9ccysvKSxUdD1bL15bXGRcLl0rXFMqfF4odGhpbnxtZWRpdW18dGhpY2spJC8sL14oc29saWR8ZGFzaGVkfGRvdHRlZHxub25lKSQvLC9cUysvXS5tYXAoQnQ9PntsZXQgUj1mdC5maW5kSW5kZXgoQXQ9PkJ0LnRlc3QoQXQpKTtyZXR1cm4gUjwwP251bGw6ZnQuc3BsaWNlKFIsMSlbMF19KTtyZXR1cm4gZnQubGVuZ3RoP1tzXTpbcG4oRStwLChUdFswXXx8IjAiKS50cmltKCksXyxJLFNlKSxwbihFK3csKFR0WzFdfHwic29saWQiKS50cmltKCksXyxJLFNlKSxwbihFK04sKFR0WzJdfHwiIzAwMDAwMCIpLnRyaW0oKSxfLEksU2UpXX19dmFyIHp2PSJib3JkZXJUb3BMZWZ0UmFkaXVzIixXdj0iYm9yZGVyVG9wUmlnaHRSYWRpdXMiLEd2PSJib3JkZXJCb3R0b21SaWdodFJhZGl1cyIscXY9ImJvcmRlckJvdHRvbUxlZnRSYWRpdXMiLFRrPWY9PntsZXR7dmFsdWU6cyxpbXBvcnRhbnQ6cCxyYXdzOncsc291cmNlOk59PWYsRT1zLnNwbGl0KC9ccysvKTtpZihzLmluY2x1ZGVzKCIvIikpcmV0dXJuW2ZdO3N3aXRjaChFLmxlbmd0aCl7Y2FzZSAxOkUucHVzaChFWzBdLEVbMF0sRVswXSk7YnJlYWs7Y2FzZSAyOkUucHVzaChFWzBdLEVbMV0pO2JyZWFrO2Nhc2UgMzpFLnB1c2goRVsxXSk7YnJlYWt9cmV0dXJuW3BuKHp2LEVbMF0scCx3LE4pLHBuKFd2LEVbMV0scCx3LE4pLHBuKEd2LEVbMl0scCx3LE4pLHBuKHF2LEVbM10scCx3LE4pXX0sT2s9Zj0+e2xldHt2YWx1ZTpzLGltcG9ydGFudDpwLHJhd3M6dyxzb3VyY2U6Tn09ZixFPXMuc3BsaXQoL1xzKy8pO2lmKHMuaW5jbHVkZXMoIi8iKSlyZXR1cm5bZl07c3dpdGNoKEUubGVuZ3RoKXtjYXNlIDE6cmV0dXJuW2ZdO2Nhc2UgMjpFLnB1c2goRVswXSxFWzFdKTticmVhaztjYXNlIDM6RS5wdXNoKEVbMV0pO2JyZWFrfXJldHVybltwbih6dixFWzBdLHAsdyxOKSxwbihXdixFWzFdLHAsdyxOKSxwbihHdixFWzJdLHAsdyxOKSxwbihxdixFWzNdLHAsdyxOKV19LFBrPSJmbGV4RGlyZWN0aW9uIixOaz0iZmxleFdyYXAiLElrPWY9PntsZXR7dmFsdWU6cyxpbXBvcnRhbnQ6cCxyYXdzOncsc291cmNlOk59PWYsRT1zLnNwbGl0KC9ccysvKSxoPVsvXihjb2x1bW58Y29sdW1uLXJldmVyc2V8cm93fHJvdy1yZXZlcnNlKSQvLC9eKG5vd3JhcHx3cmFwfHdyYXAtcmV2ZXJzZSkkL10ubWFwKF89PntsZXQgST1FLmZpbmRJbmRleChTZT0+Xy50ZXN0KFNlKSk7cmV0dXJuIEk8MD9udWxsOkUuc3BsaWNlKEksMSlbMF19KTtyZXR1cm4gRS5sZW5ndGg/W2ZdOltwbihQayxoWzBdfHwiY29sdW1uIixwLHcsTikscG4oTmssaFsxXXx8Im5vd3JhcCIscCx3LE4pXX0sa2s9IlRvcCIsUms9IlJpZ2h0Iix4az0iQm90dG9tIixCaz0iTGVmdCIsWXY9Zj0+cz0+e2xldHt2YWx1ZTpwLGltcG9ydGFudDp3LHJhd3M6Tixzb3VyY2U6RX09cyxoPXAuc3BsaXQoL1xzKy8pO3N3aXRjaChoLmxlbmd0aCl7Y2FzZSAxOmgucHVzaChoWzBdLGhbMF0saFswXSk7YnJlYWs7Y2FzZSAyOmgucHVzaChoWzBdLGhbMV0pO2JyZWFrO2Nhc2UgMzpoLnB1c2goaFsxXSk7YnJlYWt9cmV0dXJuW3BuKGYra2ssaFswXSx3LE4sRSkscG4oZitSayxoWzFdLHcsTixFKSxwbihmK3hrLGhbMl0sdyxOLEUpLHBuKGYrQmssaFszXSx3LE4sRSldfSxMaz1ZdigibWFyZ2luIiksTWs9WXYoInBhZGRpbmciKSxEaz0idHJhbnNpdGlvblByb3BlcnR5IixGaz0idHJhbnNpdGlvbkR1cmF0aW9uIixWaz0idHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uIixVaz0idHJhbnNpdGlvbkRlbGF5Iiwkaz1mPT57bGV0e3ZhbHVlOnMsaW1wb3J0YW50OnAscmF3czp3LHNvdXJjZTpOfT1mLEU9W10saDtpZihmLnZhbHVlLmluY2x1ZGVzKCJjdWJpYy1iZXppZXIiKSl7bGV0IF89L14oXFMqKT9ccyooXGQqXC4/XGQrKD86bXN8cyk/KT9ccyooKFxTKil8Y3ViaWMtYmV6aWVyXCguKlwpKT9ccyooXGQqXC4/XGQrKD86bXN8cyk/KT8kLztoPXMubWF0Y2goXyl9ZWxzZXtsZXQgXz0vXihcUyopP1xzKihcZCpcLj9cZCsoPzptc3xzKT8pP1xzKihcUyopP1xzKihcZCpcLj9cZCsoPzptc3xzKT8pPyQvO2g9cy5tYXRjaChfKX1yZXR1cm4gaCYmKGhbMV0mJkUucHVzaChwbihEayxoWzFdLHAsdyxOKSksaFsyXSYmRS5wdXNoKHBuKEZrLGhbMl0scCx3LE4pKSxoWzNdJiZFLnB1c2gocG4oVmssaFszXSxwLHcsTikpLGhbNF0mJkUucHVzaChwbihVayxoWzRdLHAsdyxOKSkpLEV9O2Z1bmN0aW9uIEhrKGYpe2xldCBzPWYudHlwZT09InV2dWUiP0NrKGYpOkFrKCkscD12dih7dHJhbnNpdGlvbjokayxib3JkZXI6cyxiYWNrZ3JvdW5kOkVrKGYpLGJvcmRlclRvcDpzLGJvcmRlclJpZ2h0OnMsYm9yZGVyQm90dG9tOnMsYm9yZGVyTGVmdDpzLGJvcmRlclN0eWxlOmYudHlwZT09InV2dWUiP0h2OlNrLGJvcmRlcldpZHRoOmYudHlwZT09InV2dWUiP2p2OndrLGJvcmRlckNvbG9yOmYudHlwZT09InV2dWUiP1h1OnVkLGJvcmRlclJhZGl1czpmLnR5cGU9PSJ1dnVlIj9UazpPayxtYXJnaW46TGsscGFkZGluZzpNa30sZi50eXBlIT09InV2dWUiP3tmbGV4RmxvdzpJa306e30pLHc9e307cmV0dXJuIHc9cCx3fXZhciBmZCxLdj1TeW1ib2woImV4cGFuZGVkIik7ZnVuY3Rpb24gSnYoZil7cmV0dXJue3Bvc3Rjc3NQbHVnaW46YCR7Zi50eXBlfHwibnZ1ZSJ9OmV4cGFuZGAsRGVjbGFyYXRpb24ocCl7aWYocFtLdl0pcmV0dXJuO2ZkfHwoZmQ9SGsoZikpO2xldCB3PWZkW3AucHJvcF07aWYodyl7bGV0IE49dyhwKTtOLmxlbmd0aD09PTEmJk5bMF09PT1wfHxwLnJlcGxhY2VXaXRoKE4pfXBbS3ZdPSEwfX19dmFyIGprPUp2KHt0eXBlOiJudnVlIn0pLkRlY2xhcmF0aW9uO2Z1bmN0aW9uIGRkKGYscyl7bGV0IHA9cm8oe3JlcGxhY2VXaXRoKE4pe3c9Tn19LHprKGYscykpLHc9W3BdO3JldHVybiBqayhwKSx3fWZ1bmN0aW9uIHprKGYscyl7bGV0IHA9cysiIjtyZXR1cm4gcC5pbmNsdWRlcygiIWltcG9ydGFudCIpP3twcm9wOmYsdmFsdWU6cC5yZXBsYWNlKC9ccyohaW1wb3J0YW50LywiIiksaW1wb3J0YW50OiEwfTp7cHJvcDpmLHZhbHVlOnAsaW1wb3J0YW50OiExfX12YXIgV2s9InZpZXciLEdrPVsiY2xpY2siLCJsb25ncHJlc3MiLCJ0b3VjaHN0YXJ0IiwidG91Y2htb3ZlIiwidG91Y2hlbmQiLCJwYW5zdGFydCIsInBhbm1vdmUiLCJwYW5lbmQiLCJob3Jpem9udGFscGFuIiwidmVydGljYWxwYW4iLCJzd2lwZSJdO2Z1bmN0aW9uIGhkKGYscyl7bGV0IHA9UHMoZik7cC5ub2RlTWFwW3Mubm9kZUlkXT1zfXZhciBnZDtmdW5jdGlvbiBadihmKXtnZHx8KGdkPWYpfXZhciBibz1jbGFzcyBleHRlbmRzIEJse2NvbnN0cnVjdG9yKHM9V2sscD17fSx3KXtzdXBlcigpO2xldCBOPUR2KHMpO2lmKE4mJiF3KXJldHVybiBuZXcgTihzLHAsITApO3RoaXMubm9kZVR5cGU9MSx0aGlzLnR5cGU9cyx0aGlzLmF0dHI9cC5hdHRyfHx7fSx0aGlzLnN0eWxlPXAuc3R5bGV8fHt9LHRoaXMuY2xhc3NTdHlsZT1wLmNsYXNzU3R5bGV8fHt9LHRoaXMuY2xhc3NMaXN0PXAuY2xhc3NMaXN0fHxbXSx0aGlzLnN0eWxlU2hlZXQ9cC5zdHlsZVNoZWV0fHx7fSx0aGlzLmV2ZW50PXt9fWFwcGVuZENoaWxkKHMpe2lmKCEocy5wYXJlbnROb2RlJiZzLnBhcmVudE5vZGUhPT10aGlzKSl7aWYocy5wYXJlbnROb2RlKXtpZihscigiZGVidWciKSYmaW8oYFthcHBlbmRDaGlsZF0oJHt0aGlzLmRvY0lkfSwke3MudHlwZX0sJHtzLnJlZn0pIE1vdmUgPCR7cy50eXBlfT4gdG8gJHt0aGlzLmNoaWxkcmVuLmxlbmd0aH0gb2YgPCR7dGhpcy50eXBlfT4gKCR7dGhpcy5yZWZ9KS5gKSx4bChzLHRoaXMuY2hpbGRyZW4sdGhpcy5jaGlsZHJlbi5sZW5ndGgsITApLHMubm9kZVR5cGU9PT0xKXtsZXQgcD14bChzLHRoaXMucHVyZUNoaWxkcmVuLHRoaXMucHVyZUNoaWxkcmVuLmxlbmd0aCksdz1Kcih0aGlzLmRvY0lkKTtpZih3JiZwPj0wKXJldHVybiB3LnNlbmQoImRvbSIse2FjdGlvbjoibW92ZUVsZW1lbnQifSxbcy5yZWYsdGhpcy5yZWYscF0pfX1lbHNlIGlmKGxyKCJkZWJ1ZyIpJiZpbyhgW2FwcGVuZENoaWxkXSgke3RoaXMuZG9jSWR9LCR7cy50eXBlfSwke3MucmVmfSkgQXBwZW5kIDwke3MudHlwZX0+IHRvIDwke3RoaXMudHlwZX0+ICgke3RoaXMucmVmfSkuYCksa2wocyx0aGlzKSxSbChzLHRoaXMuY2hpbGRyZW4sdGhpcy5jaGlsZHJlbi5sZW5ndGgsITApLHRoaXMuZG9jSWQmJmhkKHRoaXMuZG9jSWQscykscy5ub2RlVHlwZT09PTEpe1JsKHMsdGhpcy5wdXJlQ2hpbGRyZW4sdGhpcy5wdXJlQ2hpbGRyZW4ubGVuZ3RoKTtsZXQgcD1Kcih0aGlzLmRvY0lkKTtpZihwKXJldHVybiBwLnNlbmQoImRvbSIse2FjdGlvbjoiYWRkRWxlbWVudCJ9LFt0aGlzLnJlZixzLnRvSlNPTigpLC0xXSl9fX1pbnNlcnRCZWZvcmUocyxwKXtpZighKHMucGFyZW50Tm9kZSYmcy5wYXJlbnROb2RlIT09dGhpcykmJiEocz09PXB8fHMubmV4dFNpYmxpbmcmJnMubmV4dFNpYmxpbmc9PT1wKSl7aWYocy5wYXJlbnROb2RlKXtpZih4bChzLHRoaXMuY2hpbGRyZW4sdGhpcy5jaGlsZHJlbi5pbmRleE9mKHApLCEwKSxzLm5vZGVUeXBlPT09MSl7bGV0IHc9YWQocCksTj14bChzLHRoaXMucHVyZUNoaWxkcmVuLHc/dGhpcy5wdXJlQ2hpbGRyZW4uaW5kZXhPZih3KTp0aGlzLnB1cmVDaGlsZHJlbi5sZW5ndGgpLEU9SnIodGhpcy5kb2NJZCk7aWYoRSYmTj49MClyZXR1cm4gRS5zZW5kKCJkb20iLHthY3Rpb246Im1vdmVFbGVtZW50In0sW3MucmVmLHRoaXMucmVmLE5dKX19ZWxzZSBpZihscigiZGVidWciKSYmaW8oYFtpbnNlcnRCZWZvcmVdKCR7dGhpcy5kb2NJZH0sJHtzLnR5cGV9LCR7cy5yZWZ9KSBJbnNlcnQgPCR7cy50eXBlfT4gdG8gPCR7dGhpcy50eXBlfT4gKCR7dGhpcy5yZWZ9KSwgYmVmb3JlICgke3AucmVmfSkuYCksa2wocyx0aGlzKSxSbChzLHRoaXMuY2hpbGRyZW4sdGhpcy5jaGlsZHJlbi5pbmRleE9mKHApLCEwKSx0aGlzLmRvY0lkJiZoZCh0aGlzLmRvY0lkLHMpLHMubm9kZVR5cGU9PT0xKXtsZXQgdz1hZChwKSxOPVJsKHMsdGhpcy5wdXJlQ2hpbGRyZW4sdz90aGlzLnB1cmVDaGlsZHJlbi5pbmRleE9mKHcpOnRoaXMucHVyZUNoaWxkcmVuLmxlbmd0aCksRT1Kcih0aGlzLmRvY0lkKTtpZihFKXJldHVybiBFLnNlbmQoImRvbSIse2FjdGlvbjoiYWRkRWxlbWVudCJ9LFt0aGlzLnJlZixzLnRvSlNPTigpLE5dKX19fWluc2VydEFmdGVyKHMscCl7aWYoIShzLnBhcmVudE5vZGUmJnMucGFyZW50Tm9kZSE9PXRoaXMpJiYhKHM9PT1wfHxzLnByZXZpb3VzU2libGluZyYmcy5wcmV2aW91c1NpYmxpbmc9PT1wKSl7aWYocy5wYXJlbnROb2RlKXtpZih4bChzLHRoaXMuY2hpbGRyZW4sdGhpcy5jaGlsZHJlbi5pbmRleE9mKHApKzEsITApLHMubm9kZVR5cGU9PT0xKXtsZXQgdz14bChzLHRoaXMucHVyZUNoaWxkcmVuLHRoaXMucHVyZUNoaWxkcmVuLmluZGV4T2Yoc2QocCkpKzEpLE49SnIodGhpcy5kb2NJZCk7aWYoTiYmdz49MClyZXR1cm4gTi5zZW5kKCJkb20iLHthY3Rpb246Im1vdmVFbGVtZW50In0sW3MucmVmLHRoaXMucmVmLHddKX19ZWxzZSBpZihscigiZGVidWciKSYmaW8oYFtpbnNlcnRBZnRlcl0oJHt0aGlzLmRvY0lkfSwke3MudHlwZX0sJHtzLnJlZn0pIEluc2VydCA8JHtzLnR5cGV9PiB0byA8JHt0aGlzLnR5cGV9PiAoJHt0aGlzLnJlZn0pLCBhZnRlciAoJHtwLnJlZn0pLmApLGtsKHMsdGhpcyksUmwocyx0aGlzLmNoaWxkcmVuLHRoaXMuY2hpbGRyZW4uaW5kZXhPZihwKSsxLCEwKSx0aGlzLmRvY0lkJiZoZCh0aGlzLmRvY0lkLHMpLHMubm9kZVR5cGU9PT0xKXtsZXQgdz1SbChzLHRoaXMucHVyZUNoaWxkcmVuLHRoaXMucHVyZUNoaWxkcmVuLmluZGV4T2Yoc2QocCkpKzEpLE49SnIodGhpcy5kb2NJZCk7aWYoTilyZXR1cm4gTi5zZW5kKCJkb20iLHthY3Rpb246ImFkZEVsZW1lbnQifSxbdGhpcy5yZWYscy50b0pTT04oKSx3XSl9fX1yZW1vdmVDaGlsZChzLHApe2lmKHMucGFyZW50Tm9kZSYmKGxkKHMsdGhpcy5jaGlsZHJlbiwhMCkscy5ub2RlVHlwZT09PTEpKXtscigiZGVidWciKSYmaW8oYFtyZW1vdmVDaGlsZF0oJHt0aGlzLmRvY0lkfSwke3MudHlwZX0sJHtzLnJlZn0pIFJlbW92ZSA8JHtzLnR5cGV9PiBmcm9tIDwke3RoaXMudHlwZX0+ICgke3RoaXMucmVmfSkuYCksbGQocyx0aGlzLnB1cmVDaGlsZHJlbik7bGV0IHc9SnIodGhpcy5kb2NJZCk7dyYmdy5zZW5kKCJkb20iLHthY3Rpb246InJlbW92ZUVsZW1lbnQifSxbcy5yZWZdKX1wfHxzLmRlc3Ryb3koKX1jbGVhcigpe2xldCBzPUpyKHRoaXMuZG9jSWQpO3MmJnRoaXMucHVyZUNoaWxkcmVuLmZvckVhY2gocD0+e3Muc2VuZCgiZG9tIix7YWN0aW9uOiJyZW1vdmVFbGVtZW50In0sW3AucmVmXSl9KSx0aGlzLmNoaWxkcmVuLmZvckVhY2gocD0+e3AuZGVzdHJveSgpfSksdGhpcy5jaGlsZHJlbi5sZW5ndGg9MCx0aGlzLnB1cmVDaGlsZHJlbi5sZW5ndGg9MH1zZXRBdHRyKHMscCx3KXtpZih0aGlzLmF0dHJbc109PT1wJiZ3IT09ITEpcmV0dXJuO3RoaXMuYXR0cltzXT1wO2xldCBOPUpyKHRoaXMuZG9jSWQpOyF3JiZOJiZOLnNlbmQoImRvbSIse2FjdGlvbjoidXBkYXRlQXR0cnMifSxbdGhpcy5yZWYse1tzXTpwfV0pfXNldEF0dHJzKHMscCl7aWYobnUocykpcmV0dXJuO2xldCB3PXt9O2ZvcihsZXQgTiBpbiBzKXRoaXMuYXR0cltOXSE9PXNbTl0mJih0aGlzLmF0dHJbTl09c1tOXSx3W05dPXNbTl0pO2lmKCFudSh3KSl7bGV0IE49SnIodGhpcy5kb2NJZCk7IXAmJk4mJk4uc2VuZCgiZG9tIix7YWN0aW9uOiJ1cGRhdGVBdHRycyJ9LFt0aGlzLnJlZix3XSl9fXNldFN0eWxlKHMscCx3KXtkZChzLHApLmZvckVhY2goKHtwcm9wOk4sdmFsdWU6RX0pPT57aWYodGhpcy5zdHlsZVtOXT09PUUmJnchPT0hMSlyZXR1cm47dGhpcy5zdHlsZVtOXT1FO2xldCBoPUpyKHRoaXMuZG9jSWQpOyF3JiZoJiZoLnNlbmQoImRvbSIse2FjdGlvbjoidXBkYXRlU3R5bGUifSxbdGhpcy5yZWYse1tOXTpFPT09IiImJk4gaW4gdGhpcy5jbGFzc1N0eWxlP3RoaXMuY2xhc3NTdHlsZVtOXTpFfV0pfSl9c2V0U3R5bGVzKHMscCl7aWYobnUocykpcmV0dXJuO2xldCB3PXt9O2ZvcihsZXQgTiBpbiBzKWRkKE4sc1tOXSkuZm9yRWFjaCgoe3Byb3A6RSx2YWx1ZTpofSk9Pnt0aGlzLnN0eWxlW0VdIT09aCYmKHRoaXMuc3R5bGVbRV09aCx3W0VdPWg9PT0iIiYmRSBpbiB0aGlzLmNsYXNzU3R5bGU/dGhpcy5jbGFzc1N0eWxlW0VdOmgpfSk7aWYoIW51KHcpKXtsZXQgTj1Kcih0aGlzLmRvY0lkKTshcCYmTiYmTi5zZW5kKCJkb20iLHthY3Rpb246InVwZGF0ZVN0eWxlIn0sW3RoaXMucmVmLHddKX19c2V0Q2xhc3NTdHlsZShzKXtmb3IobGV0IHcgaW4gdGhpcy5jbGFzc1N0eWxlKXRoaXMuY2xhc3NTdHlsZVt3XT0iIjtybyh0aGlzLmNsYXNzU3R5bGUscyk7bGV0IHA9SnIodGhpcy5kb2NJZCk7cCYmcC5zZW5kKCJkb20iLHthY3Rpb246InVwZGF0ZVN0eWxlIn0sW3RoaXMucmVmLHRoaXMudG9TdHlsZSgpXSl9c2V0Q2xhc3NMaXN0KHMpe3MubGVuZ3RoPT09dGhpcy5jbGFzc0xpc3QubGVuZ3RoJiZzLmZpbHRlcihwPT4hdGhpcy5jbGFzc0xpc3QuaW5jbHVkZXMocCkpLmxlbmd0aD09PTB8fCh0aGlzLmNsYXNzTGlzdD1zLHRoaXMucGFyZW50Tm9kZSYmdGhpcy5jYWxjQ2xhc3NMaXN0KCkpfWNhbGNDbGFzc0xpc3QoKXt0aGlzLnNldENsYXNzU3R5bGUoZ2QodGhpcykpfXNldFN0eWxlU2hlZXQocyl7dGhpcy5zdHlsZVNoZWV0PXN9YWRkRXZlbnQocyxwLHcpe2lmKHRoaXMuZXZlbnR8fCh0aGlzLmV2ZW50PXt9KSwhdGhpcy5ldmVudFtzXSl7bHIoImRlYnVnIikmJmlvKGBbYWRkRXZlbnRdKCR7dGhpcy5kb2NJZH0sJHt0aGlzLnR5cGV9LCR7dGhpcy5yZWZ9KSBBZGQgIiR7c30iIGV2ZW50IG9uIDwke3RoaXMudHlwZX0+ICgke3RoaXMucmVmfSkuYCksdGhpcy5ldmVudFtzXT17aGFuZGxlcjpwLHBhcmFtczp3fTtsZXQgTj1Kcih0aGlzLmRvY0lkKTtOJiZOLnNlbmQoImRvbSIse2FjdGlvbjoiYWRkRXZlbnQifSxbdGhpcy5yZWYsc10pfX1yZW1vdmVFdmVudChzKXtpZih0aGlzLmV2ZW50JiZ0aGlzLmV2ZW50W3NdKXtscigiZGVidWciKSYmaW8oYFtyZW1vdmVFdmVudF0oJHt0aGlzLmRvY0lkfSwke3RoaXMudHlwZX0sJHt0aGlzLnJlZn0pIFJlbW92ZSAiJHtzfSIgZXZlbnQgb24gPCR7dGhpcy50eXBlfT4gKCR7dGhpcy5yZWZ9KS5gKSxkZWxldGUgdGhpcy5ldmVudFtzXTtsZXQgcD1Kcih0aGlzLmRvY0lkKTtwJiZwLnNlbmQoImRvbSIse2FjdGlvbjoicmVtb3ZlRXZlbnQifSxbdGhpcy5yZWYsc10pfX1maXJlRXZlbnQocyxwLHcsTil7bGV0IEU9bnVsbCxoPSExLF89dGhpcy5ldmVudFtzXTtpZihfJiZwKXtscigiZGVidWciKSYmaW8oYFtmaXJlRXZlbnRdKCR7dGhpcy5kb2NJZH0sJHt0aGlzLnR5cGV9LCR7dGhpcy5yZWZ9KSBGaXJlICIke3N9IiBldmVudCBvbiA8JHt0aGlzLnR5cGV9PiAoJHt0aGlzLnJlZn0pLmApO2xldCBJPV8uaGFuZGxlcjtwLnN0b3BQcm9wYWdhdGlvbj0oKT0+e2g9ITB9LHAucHJldmVudERlZmF1bHQ9KCk9Pnt9O3RyeXtOJiZOLnBhcmFtcz9FPUkuY2FsbCh0aGlzLC4uLk4ucGFyYW1zLHApOkU9SS5jYWxsKHRoaXMscCl9Y2F0Y2goU2Upe3Rocm93IGNvbnNvbGUuZXJyb3IoYFtKUyBGcmFtZXdvcmtdIEZhaWxlZCB0byBpbnZva2UgdGhlIGV2ZW50IGhhbmRsZXIgb2YgIiR7c30iIG9uICR7dGhpcy50eXBlfSAoJHt0aGlzLnJlZn0pOgogJHtTZS50b1N0cmluZygpfWApLFNlfX1yZXR1cm4haCYmdyYmR2suaW5kZXhPZihzKSE9PS0xJiZ0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5maXJlRXZlbnQmJihwLmN1cnJlbnRUYXJnZXQ9dGhpcy5wYXJlbnROb2RlLHRoaXMucGFyZW50Tm9kZS5maXJlRXZlbnQocyxwLHcpKSxFfXRvU3R5bGUoKXtsZXQgcz1PYmplY3QuYXNzaWduKHt9LHRoaXMuY2xhc3NTdHlsZSkscD10aGlzLnN0eWxlO2ZvcihsZXQgdyBpbiBwKXtsZXQgTj1wW3ddO3Nbd109Tj09PSIiJiZ3IGluIHRoaXMuY2xhc3NTdHlsZT90aGlzLmNsYXNzU3R5bGVbd106Tn1yZXR1cm4gc310b0pTT04ocz0hMSl7bGV0IHA9e3JlZjp0aGlzLnJlZi50b1N0cmluZygpLHR5cGU6dGhpcy50eXBlLGF0dHI6dGhpcy5hdHRyLHN0eWxlOnRoaXMudG9TdHlsZSgpfSx3PVtdO2ZvcihsZXQgTiBpbiB0aGlzLmV2ZW50KXtsZXR7cGFyYW1zOkV9PXRoaXMuZXZlbnRbTl07RT93LnB1c2goe3R5cGU6TixwYXJhbXM6RX0pOncucHVzaChOKX1yZXR1cm4gdy5sZW5ndGgmJihwLmV2ZW50PXcpLCFzJiZ0aGlzLnB1cmVDaGlsZHJlbi5sZW5ndGgmJihwLmNoaWxkcmVuPXRoaXMucHVyZUNoaWxkcmVuLm1hcChOPT5OLnRvSlNPTigpKSkscH10b1N0cmluZygpe3JldHVybiI8Iit0aGlzLnR5cGUrIiBhdHRyPSIrSlNPTi5zdHJpbmdpZnkodGhpcy5hdHRyKSsiIHN0eWxlPSIrSlNPTi5zdHJpbmdpZnkodGhpcy50b1N0eWxlKCkpKyI+Iit0aGlzLnB1cmVDaGlsZHJlbi5tYXAocz0+cy50b1N0cmluZygpKS5qb2luKCIiKSsiPC8iK3RoaXMudHlwZSsiPiJ9fTtmdW5jdGlvbiBYdihmKXtsZXQgcz1mJiZmLl9fdl9yYXc7cmV0dXJuIHM/WHYocyk6Zn1mdW5jdGlvbiBRdihmKXtsZXQgcz10dShmKTtzd2l0Y2gocyl7Y2FzZSJVbmRlZmluZWQiOmNhc2UiTnVsbCI6cmV0dXJuIiI7Y2FzZSJSZWdFeHAiOnJldHVybiBmLnRvU3RyaW5nKCk7Y2FzZSJEYXRlIjpyZXR1cm4gZi50b0lTT1N0cmluZygpO2Nhc2UiTnVtYmVyIjpjYXNlIlN0cmluZyI6Y2FzZSJCb29sZWFuIjpjYXNlIkFycmF5IjpjYXNlIk9iamVjdCI6cmV0dXJuIFh2KGYpO2Nhc2UiQXJyYXlCdWZmZXIiOnJldHVybnsiQHR5cGUiOiJiaW5hcnkiLGRhdGFUeXBlOnMsYmFzZTY0OnJkKGYpfTtjYXNlIkludDhBcnJheSI6Y2FzZSJVaW50OEFycmF5IjpjYXNlIlVpbnQ4Q2xhbXBlZEFycmF5IjpjYXNlIkludDE2QXJyYXkiOmNhc2UiVWludDE2QXJyYXkiOmNhc2UiSW50MzJBcnJheSI6Y2FzZSJVaW50MzJBcnJheSI6Y2FzZSJGbG9hdDMyQXJyYXkiOmNhc2UiRmxvYXQ2NEFycmF5IjpyZXR1cm57IkB0eXBlIjoiYmluYXJ5IixkYXRhVHlwZTpzLGJhc2U2NDpyZChmLmJ1ZmZlcil9O2RlZmF1bHQ6cmV0dXJuIEpTT04uc3RyaW5naWZ5KGYpfX12YXIgUXU9ZnVuY3Rpb24oKXt9LGJjPWNsYXNze2NvbnN0cnVjdG9yKHMscCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImluc3RhbmNlSWQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOlN0cmluZyhzKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJjYWxsYmFja01hbmFnZXIiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOm5ldyBZdShzKX0pLFF1PXB8fGZ1bmN0aW9uKCl7fX1jYWxsYmFjayhzLHAsdyl7cmV0dXJuIHRoaXMuY2FsbGJhY2tNYW5hZ2VyLmNvbnN1bWUocyxwLHcpfXJlZ2lzdGVySG9vayhzLHAsdyxOKXtyZXR1cm4gdGhpcy5jYWxsYmFja01hbmFnZXIucmVnaXN0ZXJIb29rKHMscCx3LE4pfXRyaWdnZXJIb29rKHMscCx3LE4pe3JldHVybiB0aGlzLmNhbGxiYWNrTWFuYWdlci50cmlnZ2VySG9vayhzLHAsdyxOKX11cGRhdGVEYXRhKHMscCx3KXt0aGlzLnNlbmQoIm1vZHVsZSIse21vZHVsZToiZG9tIixtZXRob2Q6InVwZGF0ZUNvbXBvbmVudERhdGEifSxbcyxwLHddKX1kZXN0cm95Q2FsbGJhY2soKXtyZXR1cm4gdGhpcy5jYWxsYmFja01hbmFnZXIuY2xvc2UoKX1ub3JtYWxpemUocyxwPSExKXtsZXQgdz10dShzKTtpZihzJiZzIGluc3RhbmNlb2YgYm8pcmV0dXJuIHMucmVmO2lmKHMmJnMuJGVsIGluc3RhbmNlb2YgYm8pcmV0dXJuIHMuJGVsLnJlZjtpZih3PT09IkZ1bmN0aW9uIilyZXR1cm4gdGhpcy5jYWxsYmFja01hbmFnZXIuYWRkKHMpLnRvU3RyaW5nKCk7aWYocCl7aWYodz09PSJPYmplY3QiKXtsZXQgTj17fTtmb3IobGV0IEUgaW4gcylOW0VdPXRoaXMubm9ybWFsaXplKHNbRV0sITApO3JldHVybiBOfWlmKHc9PT0iQXJyYXkiKXJldHVybiBzLm1hcChOPT50aGlzLm5vcm1hbGl6ZShOLCEwKSl9cmV0dXJuIHMmJnMucmVmJiZzWyJbW1ZpcnR1YWxFbGVtZW50XV0iXT9zLnJlZjpRdihzKX1zZW5kKHMscCx3LE4pe2xldHthY3Rpb246RSxjb21wb25lbnQ6aCxyZWY6Xyxtb2R1bGU6SSxtZXRob2Q6U2V9PXA7c3dpdGNoKHc9dy5tYXAoZnQ9PnRoaXMubm9ybWFsaXplKGZ0LHMhPT0ibW9kdWxlIikpLHR1KE4pPT09Ik9iamVjdCImJihOPXRoaXMubm9ybWFsaXplKE4sITApKSxzKXtjYXNlImRvbSI6cmV0dXJuIGxyKCJkZWJ1ZyIpJiZpbyhgW3Rhc2tdKCR7dGhpcy5pbnN0YW5jZUlkfSwke3N9LCR7RX0pICR7SlNPTi5zdHJpbmdpZnkodyl9YCksdGhpc1tFXSh0aGlzLmluc3RhbmNlSWQsdyk7Y2FzZSJjb21wb25lbnQiOnJldHVybiB0aGlzLmNvbXBvbmVudEhhbmRsZXIodGhpcy5pbnN0YW5jZUlkLF8sU2Usdyxybyh7Y29tcG9uZW50Omh9LE4pKTtkZWZhdWx0OnJldHVybiBscigiZGVidWciKSYmaW8oYFt0YXNrXSgke3RoaXMuaW5zdGFuY2VJZH0sJHtJfSwke1NlfSkgJHtKU09OLnN0cmluZ2lmeSh3KX1gKSx0aGlzLm1vZHVsZUhhbmRsZXIodGhpcy5pbnN0YW5jZUlkLEksU2UsdyxOKX19Y2FsbERPTShzLHApe3JldHVybiB0aGlzW3NdKHRoaXMuaW5zdGFuY2VJZCxwKX1jYWxsQ29tcG9uZW50KHMscCx3LE4pe3JldHVybiB0aGlzLmNvbXBvbmVudEhhbmRsZXIodGhpcy5pbnN0YW5jZUlkLHMscCx3LE4pfWNhbGxNb2R1bGUocyxwLHcsTil7cmV0dXJuIHRoaXMubW9kdWxlSGFuZGxlcih0aGlzLmluc3RhbmNlSWQscyxwLHcsTil9fTtmdW5jdGlvbiBlbSgpe2xldCBmPXtjcmVhdGVGaW5pc2g6Z2xvYmFsLmNhbGxDcmVhdGVGaW5pc2gsdXBkYXRlRmluaXNoOmdsb2JhbC5jYWxsVXBkYXRlRmluaXNoLHJlZnJlc2hGaW5pc2g6Z2xvYmFsLmNhbGxSZWZyZXNoRmluaXNoLGNyZWF0ZUJvZHk6Z2xvYmFsLmNhbGxDcmVhdGVCb2R5LGFkZEVsZW1lbnQ6Z2xvYmFsLmNhbGxBZGRFbGVtZW50LHJlbW92ZUVsZW1lbnQ6Z2xvYmFsLmNhbGxSZW1vdmVFbGVtZW50LG1vdmVFbGVtZW50Omdsb2JhbC5jYWxsTW92ZUVsZW1lbnQsdXBkYXRlQXR0cnM6Z2xvYmFsLmNhbGxVcGRhdGVBdHRycyx1cGRhdGVTdHlsZTpnbG9iYWwuY2FsbFVwZGF0ZVN0eWxlLGFkZEV2ZW50Omdsb2JhbC5jYWxsQWRkRXZlbnQscmVtb3ZlRXZlbnQ6Z2xvYmFsLmNhbGxSZW1vdmVFdmVudCxfX3VwZGF0ZUNvbXBvbmVudERhdGE6Z2xvYmFsLl9fdXBkYXRlQ29tcG9uZW50RGF0YX0scz1iYy5wcm90b3R5cGU7Zm9yKGxldCBwIGluIGYpe2xldCB3PWZbcF07c1twXT13PyhOLEUpPT53KE4sLi4uRSk6KE4sRSk9PlF1KE4sW3ttb2R1bGU6ImRvbSIsbWV0aG9kOnAsYXJnczpFfV0sIi0xIil9cy5jb21wb25lbnRIYW5kbGVyPWdsb2JhbC5jYWxsTmF0aXZlQ29tcG9uZW50fHwoKHAsdyxOLEUsaCk9PlF1KHAsW3tjb21wb25lbnQ6aC5jb21wb25lbnQscmVmOncsbWV0aG9kOk4sYXJnczpFfV0pKSxzLm1vZHVsZUhhbmRsZXI9Z2xvYmFsLmNhbGxOYXRpdmVNb2R1bGV8fCgocCx3LE4sRSk9PlF1KHAsW3ttb2R1bGU6dyxtZXRob2Q6TixhcmdzOkV9XSkpfWZ1bmN0aW9uIHFrKGYscyxwLHcsTixFKXtsZXQgaD1mLmdldFJlZihzKTtpZihoKXJldHVybiBmLmZpcmVFdmVudChoLHAsdyxOLEUpO2lmKHcpcmV0dXJuIHcuX25vZGVJZD1zLGYuZmlyZUV2ZW50KGYuZ2V0UmVmKCJfZG9jdW1lbnRFbGVtZW50IikscCx3LE4sRSl9ZnVuY3Rpb24gWWsoZixzLHAsdyl7cmV0dXJuIGYudGFza0NlbnRlci5jYWxsYmFjayhzLHAsdyl9ZnVuY3Rpb24gS2soZixzLHAsdyxOKXtpZighZnx8IWYudGFza0NlbnRlcilyZXR1cm4gY29uc29sZS5lcnJvcihgW0pTIEZyYW1ld29ya10gQ2FuJ3QgZmluZCAiZG9jdW1lbnQiIG9yICJ0YXNrQ2VudGVyIi5gKSxudWxsO2xldCBFPW51bGw7dHJ5e0U9Zi50YXNrQ2VudGVyLnRyaWdnZXJIb29rKHMscCx3LE4pfWNhdGNoKGgpe3Rocm93IGNvbnNvbGUuZXJyb3IoYFtKUyBGcmFtZXdvcmtdIEZhaWxlZCB0byB0cmlnZ2VyIHRoZSAiJHtwfUAke3d9IiBob29rIG9uICR7c30uYCksaH1yZXR1cm4gRX1mdW5jdGlvbiBwZChmLHMpe2xldCBwPVBzKGYpO2lmKCFwKXJldHVybiBuZXcgRXJyb3IoYFtKUyBGcmFtZXdvcmtdIEZhaWxlZCB0byByZWNlaXZlVGFza3MsIGluc3RhbmNlICgke2Z9KSBpcyBub3QgYXZhaWxhYmxlLmApO2lmKEhpKHMpKXJldHVybiBzLm1hcCh3PT57c3dpdGNoKHcubWV0aG9kKXtjYXNlImNhbGxiYWNrIjpyZXR1cm4gWWsocCwuLi53LmFyZ3MpO2Nhc2UiZmlyZUV2ZW50U3luYyI6Y2FzZSJmaXJlRXZlbnQiOnJldHVybiBxayhwLC4uLncuYXJncyk7Y2FzZSJjb21wb25lbnRIb29rIjpyZXR1cm4gS2socCwuLi53LmFyZ3MpfX0pfXZhciBRcz17fTtmdW5jdGlvbiB0bShmPXt9KXtmb3IobGV0IHMgaW4gZilJbChRcyxzKXx8KFFzW3NdPXt9KSwhIUhpKGZbc10pJiZmW3NdLmZvckVhY2gocD0+e2lpKHApP1FzW3NdW3BdPSEwOl9jKHApJiZpaShwLm5hbWUpJiYoUXNbc11bcC5uYW1lXT1wLmFyZ3N8fFtdKX0pfWZ1bmN0aW9uIGVmKGYscyl7cmV0dXJuIGlpKHMpPyEhKFFzW2ZdJiZRc1tmXVtzXSk6ISFRc1tmXX1mdW5jdGlvbiBubShmKXtyZXR1cm4gUXNbZl19dmFyIHZkPXt9O2Z1bmN0aW9uIHJtKGYpeyFIaShmKXx8Zi5mb3JFYWNoKHM9Pnshc3x8KGlpKHMpP3ZkW3NdPSEwOl9jKHMpJiZpaShzLnR5cGUpJiYodmRbcy50eXBlXT1zLGNkKHMudHlwZSxzLm1ldGhvZHMpKSl9KX1mdW5jdGlvbiBtZChmKXtyZXR1cm4hIXZkW2ZdfXZhciBlbD1bXTtmdW5jdGlvbiB0ZihmLHMpe19kKGYpP2NvbnNvbGUud2FybihgU2VydmljZSAiJHtmfSIgaGFzIGJlZW4gcmVnaXN0ZXJlZCBhbHJlYWR5IWApOihzPXJvKHt9LHMpLGVsLnB1c2goe25hbWU6ZixvcHRpb25zOnN9KSl9ZnVuY3Rpb24gbmYoZil7ZWwuc29tZSgocyxwKT0+e2lmKHMubmFtZT09PWYpcmV0dXJuIGVsLnNwbGljZShwLDEpLCEwfSl9ZnVuY3Rpb24gX2QoZil7cmV0dXJuIEprKGYpPj0wfWZ1bmN0aW9uIEprKGYpe3JldHVybiBlbC5tYXAocz0+cy5uYW1lKS5pbmRleE9mKGYpfWZ1bmN0aW9uIFprKGYpe3JldHVybiBzPT57bGV0IHA9anUoZixzKSx7Y3JlYXRlQXBwOnd9PXA7cC5jcmVhdGVWdWVBcHA9cC5jcmVhdGVBcHA9KE4sRSk9PncoTixFKS51c2UoWGsscykscy5WdWU9cH19dmFyIFhrPXtpbnN0YWxsKGYscyl7UWsoZixzKSxaYyhzKS5pbml0QXBwKGYpfX07ZnVuY3Rpb24gUWsoZixzKXtsZXR7bW91bnQ6cH09ZjtmLm1vdW50PXc9PntsZXQgTj1wKHcpO3JldHVybiB3PT09IiNhcHAiJiZzLl9fcmVnaXN0ZXJBcHAoTiksTn19ZnVuY3Rpb24gZTEoZil7bGV0e1VuaVNoYXJlZDpzLFZ1ZVNoYXJlZDpwLFZ1ZVJlYWN0aXZpdHk6d309Zjt2YXIgTj1mdW5jdGlvbihFLGgsXyxJKXsidXNlIHN0cmljdCI7dmFyIFNlPVtdO2Z1bmN0aW9uIGZ0KGkpe18ucGF1c2VUcmFja2luZygpO2Zvcih2YXIgbD1TZS5sZW5ndGg/U2VbU2UubGVuZ3RoLTFdLmNvbXBvbmVudDpudWxsLGQ9bCYmbC5hcHBDb250ZXh0LmNvbmZpZy53YXJuSGFuZGxlcixtPVR0KCksQT1hcmd1bWVudHMubGVuZ3RoLEM9bmV3IEFycmF5KEE+MT9BLTE6MCksaz0xO2s8QTtrKyspQ1trLTFdPWFyZ3VtZW50c1trXTtpZihkKUp0KGQsbCwxMSxbaStDLm1hcChVPT57dmFyIFosZGU7cmV0dXJuKGRlPShaPVUudG9TdHJpbmcpPT1udWxsP3ZvaWQgMDpaLmNhbGwoVSkpIT1udWxsP2RlOkpTT04uc3RyaW5naWZ5KFUpfSkuam9pbigiIiksbCYmbC5wcm94eSxtLm1hcChVPT57dmFye3Zub2RlOlp9PVU7cmV0dXJuImF0IDwiLmNvbmNhdChTcyhsLFoudHlwZSksIj4iKX0pLmpvaW4oYApgKSxtXSk7ZWxzZXt2YXIgVj1bIltWdWUgd2Fybl06ICIuY29uY2F0KGkpLC4uLkNdO20ubGVuZ3RoJiZWLnB1c2goYApgLC4uLkJ0KG0pKSxjb25zb2xlLndhcm4oLi4uVil9Xy5yZXNldFRyYWNraW5nKCl9ZnVuY3Rpb24gVHQoKXt2YXIgaT1TZVtTZS5sZW5ndGgtMV07aWYoIWkpcmV0dXJuW107Zm9yKHZhciBsPVtdO2k7KXt2YXIgZD1sWzBdO2QmJmQudm5vZGU9PT1pP2QucmVjdXJzZUNvdW50Kys6bC5wdXNoKHt2bm9kZTppLHJlY3Vyc2VDb3VudDowfSk7dmFyIG09aS5jb21wb25lbnQmJmkuY29tcG9uZW50LnBhcmVudDtpPW0mJm0udm5vZGV9cmV0dXJuIGx9ZnVuY3Rpb24gQnQoaSl7dmFyIGw9W107cmV0dXJuIGkuZm9yRWFjaCgoZCxtKT0+e2wucHVzaCguLi5tPT09MD9bXTpbYApgXSwuLi5SKGQpKX0pLGx9ZnVuY3Rpb24gUihpKXt2YXJ7dm5vZGU6bCxyZWN1cnNlQ291bnQ6ZH09aSxtPWQ+MD8iLi4uICgiLmNvbmNhdChkLCIgcmVjdXJzaXZlIGNhbGxzKSIpOiIiLEE9bC5jb21wb25lbnQ/bC5jb21wb25lbnQucGFyZW50PT1udWxsOiExLEM9IiBhdCA8Ii5jb25jYXQoU3MobC5jb21wb25lbnQsbC50eXBlLEEpKSxrPSI+IittO3JldHVybiBsLnByb3BzP1tDLC4uLkF0KGwucHJvcHMpLGtdOltDK2tdfWZ1bmN0aW9uIEF0KGkpe3ZhciBsPVtdLGQ9T2JqZWN0LmtleXMoaSk7cmV0dXJuIGQuc2xpY2UoMCwzKS5mb3JFYWNoKG09PntsLnB1c2goLi4uWm4obSxpW21dKSl9KSxkLmxlbmd0aD4zJiZsLnB1c2goIiAuLi4iKSxsfWZ1bmN0aW9uIFpuKGksbCxkKXtyZXR1cm4gaC5pc1N0cmluZyhsKT8obD1KU09OLnN0cmluZ2lmeShsKSxkP2w6WyIiLmNvbmNhdChpLCI9IikuY29uY2F0KGwpXSk6dHlwZW9mIGw9PSJudW1iZXIifHx0eXBlb2YgbD09ImJvb2xlYW4ifHxsPT1udWxsP2Q/bDpbIiIuY29uY2F0KGksIj0iKS5jb25jYXQobCldOl8uaXNSZWYobCk/KGw9Wm4oaSxfLnRvUmF3KGwudmFsdWUpLCEwKSxkP2w6WyIiLmNvbmNhdChpLCI9UmVmPCIpLGwsIj4iXSk6aC5pc0Z1bmN0aW9uKGwpP1siIi5jb25jYXQoaSwiPWZuIikuY29uY2F0KGwubmFtZT8iPCIuY29uY2F0KGwubmFtZSwiPiIpOiIiKV06KGw9Xy50b1JhdyhsKSxkP2w6WyIiLmNvbmNhdChpLCI9IiksbF0pfWZ1bmN0aW9uIHN0KGksbCl7fXZhciBHPXtTRVRVUF9GVU5DVElPTjowLCIwIjoiU0VUVVBfRlVOQ1RJT04iLFJFTkRFUl9GVU5DVElPTjoxLCIxIjoiUkVOREVSX0ZVTkNUSU9OIixXQVRDSF9HRVRURVI6MiwiMiI6IldBVENIX0dFVFRFUiIsV0FUQ0hfQ0FMTEJBQ0s6MywiMyI6IldBVENIX0NBTExCQUNLIixXQVRDSF9DTEVBTlVQOjQsIjQiOiJXQVRDSF9DTEVBTlVQIixOQVRJVkVfRVZFTlRfSEFORExFUjo1LCI1IjoiTkFUSVZFX0VWRU5UX0hBTkRMRVIiLENPTVBPTkVOVF9FVkVOVF9IQU5ETEVSOjYsIjYiOiJDT01QT05FTlRfRVZFTlRfSEFORExFUiIsVk5PREVfSE9PSzo3LCI3IjoiVk5PREVfSE9PSyIsRElSRUNUSVZFX0hPT0s6OCwiOCI6IkRJUkVDVElWRV9IT09LIixUUkFOU0lUSU9OX0hPT0s6OSwiOSI6IlRSQU5TSVRJT05fSE9PSyIsQVBQX0VSUk9SX0hBTkRMRVI6MTAsIjEwIjoiQVBQX0VSUk9SX0hBTkRMRVIiLEFQUF9XQVJOX0hBTkRMRVI6MTEsIjExIjoiQVBQX1dBUk5fSEFORExFUiIsRlVOQ1RJT05fUkVGOjEyLCIxMiI6IkZVTkNUSU9OX1JFRiIsQVNZTkNfQ09NUE9ORU5UX0xPQURFUjoxMywiMTMiOiJBU1lOQ19DT01QT05FTlRfTE9BREVSIixTQ0hFRFVMRVI6MTQsIjE0IjoiU0NIRURVTEVSIn0sbmU9e3NwOiJzZXJ2ZXJQcmVmZXRjaCBob29rIixiYzoiYmVmb3JlQ3JlYXRlIGhvb2siLGM6ImNyZWF0ZWQgaG9vayIsYm06ImJlZm9yZU1vdW50IGhvb2siLG06Im1vdW50ZWQgaG9vayIsYnU6ImJlZm9yZVVwZGF0ZSBob29rIix1OiJ1cGRhdGVkIixidW06ImJlZm9yZVVubW91bnQgaG9vayIsdW06InVubW91bnRlZCBob29rIixhOiJhY3RpdmF0ZWQgaG9vayIsZGE6ImRlYWN0aXZhdGVkIGhvb2siLGVjOiJlcnJvckNhcHR1cmVkIGhvb2siLHJ0YzoicmVuZGVyVHJhY2tlZCBob29rIixydGc6InJlbmRlclRyaWdnZXJlZCBob29rIixbMF06InNldHVwIGZ1bmN0aW9uIixbMV06InJlbmRlciBmdW5jdGlvbiIsWzJdOiJ3YXRjaGVyIGdldHRlciIsWzNdOiJ3YXRjaGVyIGNhbGxiYWNrIixbNF06IndhdGNoZXIgY2xlYW51cCBmdW5jdGlvbiIsWzVdOiJuYXRpdmUgZXZlbnQgaGFuZGxlciIsWzZdOiJjb21wb25lbnQgZXZlbnQgaGFuZGxlciIsWzddOiJ2bm9kZSBob29rIixbOF06ImRpcmVjdGl2ZSBob29rIixbOV06InRyYW5zaXRpb24gaG9vayIsWzEwXToiYXBwIGVycm9ySGFuZGxlciIsWzExXToiYXBwIHdhcm5IYW5kbGVyIixbMTJdOiJyZWYgZnVuY3Rpb24iLFsxM106ImFzeW5jIGNvbXBvbmVudCBsb2FkZXIiLFsxNF06InNjaGVkdWxlciBmbHVzaC4gVGhpcyBpcyBsaWtlbHkgYSBWdWUgaW50ZXJuYWxzIGJ1Zy4gUGxlYXNlIG9wZW4gYW4gaXNzdWUgYXQgaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL2NvcmUgLiJ9O2Z1bmN0aW9uIEp0KGksbCxkLG0pe3RyeXtyZXR1cm4gbT9pKC4uLm0pOmkoKX1jYXRjaChBKXtTbihBLGwsZCl9fWZ1bmN0aW9uIGNuKGksbCxkLG0pe2lmKGguaXNGdW5jdGlvbihpKSl7dmFyIEE9SnQoaSxsLGQsbSk7cmV0dXJuIEEmJmguaXNQcm9taXNlKEEpJiZBLmNhdGNoKFY9PntTbihWLGwsZCl9KSxBfWZvcih2YXIgQz1bXSxrPTA7azxpLmxlbmd0aDtrKyspQy5wdXNoKGNuKGlba10sbCxkLG0pKTtyZXR1cm4gQ31mdW5jdGlvbiBTbihpLGwsZCl7aWYobCYmbC52bm9kZSxsKXtmb3IodmFyIG09bC5wYXJlbnQsQT1sLnByb3h5LEM9Imh0dHBzOi8vdnVlanMub3JnL2Vycm9yLXJlZmVyZW5jZS8jcnVudGltZS0iLmNvbmNhdChkKTttOyl7dmFyIGs9bS5lYztpZihrKXtmb3IodmFyIFY9MDtWPGsubGVuZ3RoO1YrKylpZihrW1ZdKGksQSxDKT09PSExKXJldHVybn1tPW0ucGFyZW50fXZhciBVPWwuYXBwQ29udGV4dC5jb25maWcuZXJyb3JIYW5kbGVyO2lmKFUpe0p0KFUsbnVsbCwxMCxbaSxBLENdKTtyZXR1cm59fUduKGkpfWZ1bmN0aW9uIEduKGksbCxkKXtjb25zb2xlLmVycm9yKGkpfXZhciBnaT0hMSxIcj0hMSxDbj1bXSxubj0wLHluPVtdLEluPW51bGwsTW49MCx4cj17dGhlbihpKXtzZXRUaW1lb3V0KCgpPT5pKCksMCl9fSxvaT1FLnBsYXRmb3JtPT09ImlPUyIsWG49b2k/eHI6UHJvbWlzZS5yZXNvbHZlKCksanI9bnVsbDtmdW5jdGlvbiAkZShpKXt2YXIgbD1qcnx8WG47cmV0dXJuIGk/bC50aGVuKHRoaXM/aS5iaW5kKHRoaXMpOmkpOmx9ZnVuY3Rpb24gZXQoaSl7Zm9yKHZhciBsPW5uKzEsZD1Dbi5sZW5ndGg7bDxkOyl7dmFyIG09bCtkPj4+MSxBPUNuW21dLEM9cW4oQSk7QzxpfHxDPT09aSYmQS5wcmU/bD1tKzE6ZD1tfXJldHVybiBsfWZ1bmN0aW9uIE50KGkpeyghQ24ubGVuZ3RofHwhQ24uaW5jbHVkZXMoaSxnaSYmaS5hbGxvd1JlY3Vyc2U/bm4rMTpubikpJiYoaS5pZD09bnVsbD9Dbi5wdXNoKGkpOkNuLnNwbGljZShldChpLmlkKSwwLGkpLHVuKCkpfWZ1bmN0aW9uIHVuKCl7IWdpJiYhSHImJihIcj0hMCxqcj1Ybi50aGVuKHpyKSl9ZnVuY3Rpb24gYW4oaSl7dmFyIGw9Q24uaW5kZXhPZihpKTtsPm5uJiZDbi5zcGxpY2UobCwxKX1mdW5jdGlvbiBzbihpKXtoLmlzQXJyYXkoaSk/eW4ucHVzaCguLi5pKTooIUlufHwhSW4uaW5jbHVkZXMoaSxpLmFsbG93UmVjdXJzZT9NbisxOk1uKSkmJnluLnB1c2goaSksdW4oKX1mdW5jdGlvbiBrbihpLGwpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06Z2k/bm4rMTowO2Q8Q24ubGVuZ3RoO2QrKyl7dmFyIG09Q25bZF07aWYobSYmbS5wcmUpe2lmKGkmJm0uaWQhPT1pLnVpZCljb250aW51ZTtDbi5zcGxpY2UoZCwxKSxkLS0sbSgpfX19ZnVuY3Rpb24gY3IoaSl7aWYoeW4ubGVuZ3RoKXt2YXIgbD1bLi4ubmV3IFNldCh5bildLnNvcnQoKGQsbSk9PnFuKGQpLXFuKG0pKTtpZih5bi5sZW5ndGg9MCxJbil7SW4ucHVzaCguLi5sKTtyZXR1cm59Zm9yKEluPWwsTW49MDtNbjxJbi5sZW5ndGg7TW4rKylJbltNbl0oKTtJbj1udWxsLE1uPTB9fXZhciBxbj1pPT5pLmlkPT1udWxsPzEvMDppLmlkLHBpPShpLGwpPT57dmFyIGQ9cW4oaSktcW4obCk7aWYoZD09PTApe2lmKGkucHJlJiYhbC5wcmUpcmV0dXJuLTE7aWYobC5wcmUmJiFpLnByZSlyZXR1cm4gMX1yZXR1cm4gZH07ZnVuY3Rpb24genIoaSl7SHI9ITEsZ2k9ITAsQ24uc29ydChwaSk7dmFyIGw9aC5OT09QO3RyeXtmb3Iobm49MDtubjxDbi5sZW5ndGg7bm4rKyl7dmFyIGQ9Q25bbm5dO2QmJmQuYWN0aXZlIT09ITEmJkp0KGQsbnVsbCwxNCl9fWZpbmFsbHl7bm49MCxDbi5sZW5ndGg9MCxjcigpLGdpPSExLGpyPW51bGwsKENuLmxlbmd0aHx8eW4ubGVuZ3RoKSYmenIoKX19dmFyIF9yLG9vPVtdLFhvPSExO2Z1bmN0aW9uIHVhKGkpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGw+MT9sLTE6MCksbT0xO208bDttKyspZFttLTFdPWFyZ3VtZW50c1ttXTtfcj9fci5lbWl0KGksLi4uZCk6WG98fG9vLnB1c2goe2V2ZW50OmksYXJnczpkfSl9ZnVuY3Rpb24gamkoaSxsKXt2YXIgZCxtO2lmKF9yPWksX3IpX3IuZW5hYmxlZD0hMCxvby5mb3JFYWNoKEM9Pnt2YXJ7ZXZlbnQ6ayxhcmdzOlZ9PUM7cmV0dXJuIF9yLmVtaXQoaywuLi5WKX0pLG9vPVtdO2Vsc2UgaWYodHlwZW9mIHdpbmRvdyE9InVuZGVmaW5lZCImJndpbmRvdy5IVE1MRWxlbWVudCYmISgobT0oZD13aW5kb3cubmF2aWdhdG9yKT09bnVsbD92b2lkIDA6ZC51c2VyQWdlbnQpPT1udWxsP3ZvaWQgMDptLmluY2x1ZGVzKCJqc2RvbSIpKSl7dmFyIEE9bC5fX1ZVRV9ERVZUT09MU19IT09LX1JFUExBWV9fPWwuX19WVUVfREVWVE9PTFNfSE9PS19SRVBMQVlfX3x8W107QS5wdXNoKEM9PntqaShDLGwpfSksc2V0VGltZW91dCgoKT0+e19yfHwobC5fX1ZVRV9ERVZUT09MU19IT09LX1JFUExBWV9fPW51bGwsWG89ITAsb289W10pfSwzZTMpfWVsc2UgWG89ITAsb289W119ZnVuY3Rpb24geG4oaSxsKXt1YSgiYXBwOmluaXQiLGksbCx7RnJhZ21lbnQ6aXIsVGV4dDpkcixDb21tZW50OmhyLFN0YXRpYzpSb30pfWZ1bmN0aW9uIGJyKGksbCl7aWYoIWkuaXNVbm1vdW50ZWQpe2Zvcih2YXIgZD1pLnZub2RlLnByb3BzfHxoLkVNUFRZX09CSixtPWFyZ3VtZW50cy5sZW5ndGgsQT1uZXcgQXJyYXkobT4yP20tMjowKSxDPTI7QzxtO0MrKylBW0MtMl09YXJndW1lbnRzW0NdO3ZhciBrPUEsVj1sLnN0YXJ0c1dpdGgoInVwZGF0ZToiKSxVPVYmJmwuc2xpY2UoNyk7aWYoVSYmVSBpbiBkKXt2YXIgWj0iIi5jb25jYXQoVT09PSJtb2RlbFZhbHVlIj8ibW9kZWwiOlUsIk1vZGlmaWVycyIpLHtudW1iZXI6ZGUsdHJpbTp2ZX09ZFtaXXx8aC5FTVBUWV9PQko7dmUmJihrPUEubWFwKGN0PT5oLmlzU3RyaW5nKGN0KT9jdC50cmltKCk6Y3QpKSxkZSYmKGs9QS5tYXAoaC5sb29zZVRvTnVtYmVyKSl9dmFyIHRlLG1lPWRbdGU9aC50b0hhbmRsZXJLZXkobCldfHxkW3RlPWgudG9IYW5kbGVyS2V5KGguY2FtZWxpemUobCkpXTshbWUmJlYmJihtZT1kW3RlPWgudG9IYW5kbGVyS2V5KGguaHlwaGVuYXRlKGwpKV0pLG1lJiZjbihtZSxpLDYsayk7dmFyIEplPWRbdGUrIk9uY2UiXTtpZihKZSl7aWYoIWkuZW1pdHRlZClpLmVtaXR0ZWQ9e307ZWxzZSBpZihpLmVtaXR0ZWRbdGVdKXJldHVybjtpLmVtaXR0ZWRbdGVdPSEwLGNuKEplLGksNixrKX19fWZ1bmN0aW9uIGFpKGksbCl7dmFyIGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiExLG09bC5lbWl0c0NhY2hlLEE9bS5nZXQoaSk7aWYoQSE9PXZvaWQgMClyZXR1cm4gQTt2YXIgQz1pLmVtaXRzLGs9e30sVj0hMTtpZighaC5pc0Z1bmN0aW9uKGkpKXt2YXIgVT1aPT57dmFyIGRlPWFpKFosbCwhMCk7ZGUmJihWPSEwLGguZXh0ZW5kKGssZGUpKX07IWQmJmwubWl4aW5zLmxlbmd0aCYmbC5taXhpbnMuZm9yRWFjaChVKSxpLmV4dGVuZHMmJlUoaS5leHRlbmRzKSxpLm1peGlucyYmaS5taXhpbnMuZm9yRWFjaChVKX1yZXR1cm4hQyYmIVY/KGguaXNPYmplY3QoaSkmJm0uc2V0KGksbnVsbCksbnVsbCk6KGguaXNBcnJheShDKT9DLmZvckVhY2goWj0+a1taXT1udWxsKTpoLmV4dGVuZChrLEMpLGguaXNPYmplY3QoaSkmJm0uc2V0KGksayksayl9ZnVuY3Rpb24gdmkoaSxsKXtyZXR1cm4haXx8IWguaXNPbihsKT8hMToobD1sLnNsaWNlKDIpLnJlcGxhY2UoL09uY2UkLywiIiksaC5oYXNPd24oaSxsWzBdLnRvTG93ZXJDYXNlKCkrbC5zbGljZSgxKSl8fGguaGFzT3duKGksaC5oeXBoZW5hdGUobCkpfHxoLmhhc093bihpLGwpKX12YXIgVm49bnVsbCx5bz1udWxsO2Z1bmN0aW9uIEJyKGkpe3ZhciBsPVZuO3JldHVybiBWbj1pLHlvPWkmJmkudHlwZS5fX3Njb3BlSWR8fG51bGwsbH1mdW5jdGlvbiBQYShpKXt5bz1pfWZ1bmN0aW9uIFRpKCl7eW89bnVsbH12YXIgUW49aT0+eXI7ZnVuY3Rpb24geXIoaSl7dmFyIGw9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOlZuO2lmKCFsfHxpLl9uKXJldHVybiBpO3ZhciBkPWZ1bmN0aW9uKCl7ZC5fZCYmZmkoLTEpO3ZhciBtPUJyKGwpLEE7dHJ5e0E9aSguLi5hcmd1bWVudHMpfWZpbmFsbHl7QnIobSksZC5fZCYmZmkoMSl9cmV0dXJuIEF9O3JldHVybiBkLl9uPSEwLGQuX2M9ITAsZC5fZD0hMCxkfWZ1bmN0aW9uIE5hKCl7fWZ1bmN0aW9uIGdyKGkpe3Zhcnt0eXBlOmwsdm5vZGU6ZCxwcm94eTptLHdpdGhQcm94eTpBLHByb3BzOkMscHJvcHNPcHRpb25zOltrXSxzbG90czpWLGF0dHJzOlUsZW1pdDpaLHJlbmRlcjpkZSxyZW5kZXJDYWNoZTp2ZSxkYXRhOnRlLHNldHVwU3RhdGU6bWUsY3R4OkplLGluaGVyaXRBdHRyczpjdH09aSxpdCxJdCxDdD1CcihpKTt0cnl7aWYoZC5zaGFwZUZsYWcmNCl7dmFyIGNlPUF8fG0sTmU9Y2U7aXQ9JG4oZGUuY2FsbChOZSxjZSx2ZSxDLG1lLHRlLEplKSksSXQ9VX1lbHNle3ZhciBDZT1sO2l0PSRuKENlLmxlbmd0aD4xP0NlKEMse2F0dHJzOlUsc2xvdHM6VixlbWl0Olp9KTpDZShDLG51bGwpKSxJdD1sLnByb3BzP1U6TW8oVSl9fWNhdGNoKEIpe3VpLmxlbmd0aD0wLFNuKEIsaSwxKSxpdD1IdChocil9dmFyIFZlPWl0O2lmKEl0JiZjdCE9PSExKXt2YXIgYnQ9T2JqZWN0LmtleXMoSXQpLHtzaGFwZUZsYWc6b3R9PVZlO2J0Lmxlbmd0aCYmb3QmKDF8NikmJihrJiZidC5zb21lKGguaXNNb2RlbExpc3RlbmVyKSYmKEl0PURvKEl0LGspKSxWZT1PbihWZSxJdCkpfXJldHVybiBkLmRpcnMmJihWZT1PbihWZSksVmUuZGlycz1WZS5kaXJzP1ZlLmRpcnMuY29uY2F0KGQuZGlycyk6ZC5kaXJzKSxkLnRyYW5zaXRpb24mJihWZS50cmFuc2l0aW9uPWQudHJhbnNpdGlvbiksaXQ9VmUsQnIoQ3QpLGl0fWZ1bmN0aW9uIEVvKGkpe2Zvcih2YXIgbCxkPTA7ZDxpLmxlbmd0aDtkKyspe3ZhciBtPWlbZF07aWYoQmkobSkpe2lmKG0udHlwZSE9PWhyfHxtLmNoaWxkcmVuPT09InYtaWYiKXtpZihsKXJldHVybjtsPW19fWVsc2UgcmV0dXJufXJldHVybiBsfXZhciBNbz1pPT57dmFyIGw7Zm9yKHZhciBkIGluIGkpKGQ9PT0iY2xhc3MifHxkPT09InN0eWxlInx8aC5pc09uKGQpKSYmKChsfHwobD17fSkpW2RdPWlbZF0pO3JldHVybiBsfSxEbz0oaSxsKT0+e3ZhciBkPXt9O2Zvcih2YXIgbSBpbiBpKSghaC5pc01vZGVsTGlzdGVuZXIobSl8fCEobS5zbGljZSg5KWluIGwpKSYmKGRbbV09aVttXSk7cmV0dXJuIGR9O2Z1bmN0aW9uIE9pKGksbCxkKXt2YXJ7cHJvcHM6bSxjaGlsZHJlbjpBLGNvbXBvbmVudDpDfT1pLHtwcm9wczprLGNoaWxkcmVuOlYscGF0Y2hGbGFnOlV9PWwsWj1DLmVtaXRzT3B0aW9ucztpZihsLmRpcnN8fGwudHJhbnNpdGlvbilyZXR1cm4hMDtpZihkJiZVPj0wKXtpZihVJjEwMjQpcmV0dXJuITA7aWYoVSYxNilyZXR1cm4gbT9zaShtLGssWik6ISFrO2lmKFUmOClmb3IodmFyIGRlPWwuZHluYW1pY1Byb3BzLHZlPTA7dmU8ZGUubGVuZ3RoO3ZlKyspe3ZhciB0ZT1kZVt2ZV07aWYoa1t0ZV0hPT1tW3RlXSYmIXZpKFosdGUpKXJldHVybiEwfX1lbHNlIHJldHVybihBfHxWKSYmKCFWfHwhVi4kc3RhYmxlKT8hMDptPT09az8hMTptP2s/c2kobSxrLFopOiEwOiEhaztyZXR1cm4hMX1mdW5jdGlvbiBzaShpLGwsZCl7dmFyIG09T2JqZWN0LmtleXMobCk7aWYobS5sZW5ndGghPT1PYmplY3Qua2V5cyhpKS5sZW5ndGgpcmV0dXJuITA7Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspe3ZhciBDPW1bQV07aWYobFtDXSE9PWlbQ10mJiF2aShkLEMpKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIFNvKGksbCl7Zm9yKHZhcnt2bm9kZTpkLHBhcmVudDptfT1pO207KXt2YXIgQT1tLnN1YlRyZWU7aWYoQS5zdXNwZW5zZSYmQS5zdXNwZW5zZS5hY3RpdmVCcmFuY2g9PT1kJiYoQS5lbD1kLmVsKSxBPT09ZCkoZD1tLnZub2RlKS5lbD1sLG09bS5wYXJlbnQ7ZWxzZSBicmVha319dmFyIExyPSJjb21wb25lbnRzIixBcj0iZGlyZWN0aXZlcyI7ZnVuY3Rpb24gYW8oaSxsKXtyZXR1cm4gemkoTHIsaSwhMCxsKXx8aX12YXIgd289U3ltYm9sLmZvcigidi1uZGMiKTtmdW5jdGlvbiBQaShpKXtyZXR1cm4gaC5pc1N0cmluZyhpKT96aShMcixpLCExKXx8aTppfHx3b31mdW5jdGlvbiBsaShpKXtyZXR1cm4gemkoQXIsaSl9ZnVuY3Rpb24gemkoaSxsKXt2YXIgZD1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITEsbT1Wbnx8b3I7aWYobSl7dmFyIEE9bS50eXBlO2lmKGk9PT1Mcil7dmFyIEM9dHMoQSwhMSk7aWYoQyYmKEM9PT1sfHxDPT09aC5jYW1lbGl6ZShsKXx8Qz09PWguY2FwaXRhbGl6ZShoLmNhbWVsaXplKGwpKSkpcmV0dXJuIEF9dmFyIGs9Rm8obVtpXXx8QVtpXSxsKXx8Rm8obS5hcHBDb250ZXh0W2ldLGwpO3JldHVybiFrJiZkP0E6a319ZnVuY3Rpb24gRm8oaSxsKXtyZXR1cm4gaSYmKGlbbF18fGlbaC5jYW1lbGl6ZShsKV18fGlbaC5jYXBpdGFsaXplKGguY2FtZWxpemUobCkpXSl9dmFyIFdpPWk9PmkuX19pc1N1c3BlbnNlLEdpPTAsSWE9e25hbWU6IlN1c3BlbnNlIixfX2lzU3VzcGVuc2U6ITAscHJvY2VzcyhpLGwsZCxtLEEsQyxrLFYsVSxaKXtpZihpPT1udWxsKVpyKGwsZCxtLEEsQyxrLFYsVSxaKTtlbHNle2lmKEMmJkMuZGVwcz4wJiYhaS5zdXNwZW5zZS5pc0luRmFsbGJhY2spe2wuc3VzcGVuc2U9aS5zdXNwZW5zZSxsLnN1c3BlbnNlLnZub2RlPWwsbC5lbD1pLmVsO3JldHVybn1FcihpLGwsZCxtLEEsayxWLFUsWil9fSxoeWRyYXRlOlRlLGNyZWF0ZTpNdCxub3JtYWxpemU6ZmF9LHFpPUlhO2Z1bmN0aW9uIERuKGksbCl7dmFyIGQ9aS5wcm9wcyYmaS5wcm9wc1tsXTtoLmlzRnVuY3Rpb24oZCkmJmQoKX1mdW5jdGlvbiBacihpLGwsZCxtLEEsQyxrLFYsVSl7dmFye3A6WixvOntjcmVhdGVFbGVtZW50OmRlfX09VSx2ZT1kZSgiZGl2IixsKSx0ZT1pLnN1c3BlbnNlPU10KGksQSxtLGwsdmUsZCxDLGssVixVKTtaKG51bGwsdGUucGVuZGluZ0JyYW5jaD1pLnNzQ29udGVudCx2ZSxudWxsLG0sdGUsQyxrKSx0ZS5kZXBzPjA/KERuKGksIm9uUGVuZGluZyIpLERuKGksIm9uRmFsbGJhY2siKSxaKG51bGwsaS5zc0ZhbGxiYWNrLGwsZCxtLG51bGwsQyxrKSxNcih0ZSxpLnNzRmFsbGJhY2spKTp0ZS5yZXNvbHZlKCExLCEwKX1mdW5jdGlvbiBFcihpLGwsZCxtLEEsQyxrLFYsVSl7dmFye3A6Wix1bTpkZSxvOntjcmVhdGVFbGVtZW50OnZlfX09VSx0ZT1sLnN1c3BlbnNlPWkuc3VzcGVuc2U7dGUudm5vZGU9bCxsLmVsPWkuZWw7dmFyIG1lPWwuc3NDb250ZW50LEplPWwuc3NGYWxsYmFjayx7YWN0aXZlQnJhbmNoOmN0LHBlbmRpbmdCcmFuY2g6aXQsaXNJbkZhbGxiYWNrOkl0LGlzSHlkcmF0aW5nOkN0fT10ZTtpZihpdCl0ZS5wZW5kaW5nQnJhbmNoPW1lLFZyKG1lLGl0KT8oWihpdCxtZSx0ZS5oaWRkZW5Db250YWluZXIsbnVsbCxBLHRlLEMsayxWKSx0ZS5kZXBzPD0wP3RlLnJlc29sdmUoKTpJdCYmKEN0fHwoWihjdCxKZSxkLG0sQSxudWxsLEMsayxWKSxNcih0ZSxKZSkpKSk6KHRlLnBlbmRpbmdJZD1HaSsrLEN0Pyh0ZS5pc0h5ZHJhdGluZz0hMSx0ZS5hY3RpdmVCcmFuY2g9aXQpOmRlKGl0LEEsdGUpLHRlLmRlcHM9MCx0ZS5lZmZlY3RzLmxlbmd0aD0wLHRlLmhpZGRlbkNvbnRhaW5lcj12ZSgiZGl2IixkKSxJdD8oWihudWxsLG1lLHRlLmhpZGRlbkNvbnRhaW5lcixudWxsLEEsdGUsQyxrLFYpLHRlLmRlcHM8PTA/dGUucmVzb2x2ZSgpOihaKGN0LEplLGQsbSxBLG51bGwsQyxrLFYpLE1yKHRlLEplKSkpOmN0JiZWcihtZSxjdCk/KFooY3QsbWUsZCxtLEEsdGUsQyxrLFYpLHRlLnJlc29sdmUoITApKTooWihudWxsLG1lLHRlLmhpZGRlbkNvbnRhaW5lcixudWxsLEEsdGUsQyxrLFYpLHRlLmRlcHM8PTAmJnRlLnJlc29sdmUoKSkpO2Vsc2UgaWYoY3QmJlZyKG1lLGN0KSlaKGN0LG1lLGQsbSxBLHRlLEMsayxWKSxNcih0ZSxtZSk7ZWxzZSBpZihEbihsLCJvblBlbmRpbmciKSx0ZS5wZW5kaW5nQnJhbmNoPW1lLG1lLnNoYXBlRmxhZyY1MTI/dGUucGVuZGluZ0lkPW1lLmNvbXBvbmVudC5zdXNwZW5zZUlkOnRlLnBlbmRpbmdJZD1HaSsrLFoobnVsbCxtZSx0ZS5oaWRkZW5Db250YWluZXIsbnVsbCxBLHRlLEMsayxWKSx0ZS5kZXBzPD0wKXRlLnJlc29sdmUoKTtlbHNle3Zhcnt0aW1lb3V0OmNlLHBlbmRpbmdJZDpOZX09dGU7Y2U+MD9zZXRUaW1lb3V0KCgpPT57dGUucGVuZGluZ0lkPT09TmUmJnRlLmZhbGxiYWNrKEplKX0sY2UpOmNlPT09MCYmdGUuZmFsbGJhY2soSmUpfX1mdW5jdGlvbiBNdChpLGwsZCxtLEEsQyxrLFYsVSxaKXt2YXIgZGU9YXJndW1lbnRzLmxlbmd0aD4xMCYmYXJndW1lbnRzWzEwXSE9PXZvaWQgMD9hcmd1bWVudHNbMTBdOiExLHtwOnZlLG06dGUsdW06bWUsbjpKZSxvOntwYXJlbnROb2RlOmN0LHJlbW92ZTppdH19PVosSXQsQ3Q9c28oaSk7Q3QmJihsPT1udWxsP3ZvaWQgMDpsLnBlbmRpbmdCcmFuY2gpJiYoSXQ9bC5wZW5kaW5nSWQsbC5kZXBzKyspO3ZhciBjZT1pLnByb3BzP2gudG9OdW1iZXIoaS5wcm9wcy50aW1lb3V0KTp2b2lkIDAsTmU9QyxDZT17dm5vZGU6aSxwYXJlbnQ6bCxwYXJlbnRDb21wb25lbnQ6ZCxuYW1lc3BhY2U6ayxjb250YWluZXI6bSxoaWRkZW5Db250YWluZXI6QSxkZXBzOjAscGVuZGluZ0lkOkdpKyssdGltZW91dDp0eXBlb2YgY2U9PSJudW1iZXIiP2NlOi0xLGFjdGl2ZUJyYW5jaDpudWxsLHBlbmRpbmdCcmFuY2g6bnVsbCxpc0luRmFsbGJhY2s6IWRlLGlzSHlkcmF0aW5nOmRlLGlzVW5tb3VudGVkOiExLGVmZmVjdHM6W10scmVzb2x2ZSgpe3ZhciBWZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06ITEsYnQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiExLHt2bm9kZTpvdCxhY3RpdmVCcmFuY2g6QixwZW5kaW5nQnJhbmNoOiQscGVuZGluZ0lkOnJlLGVmZmVjdHM6Z2UscGFyZW50Q29tcG9uZW50OnNlLGNvbnRhaW5lcjprZX09Q2UsR2U9ITE7Q2UuaXNIeWRyYXRpbmc/Q2UuaXNIeWRyYXRpbmc9ITE6VmV8fChHZT1CJiYkLnRyYW5zaXRpb24mJiQudHJhbnNpdGlvbi5tb2RlPT09Im91dC1pbiIsR2UmJihCLnRyYW5zaXRpb24uYWZ0ZXJMZWF2ZT0oKT0+e3JlPT09Q2UucGVuZGluZ0lkJiYodGUoJCxrZSxDPT09TmU/SmUoQik6QywwKSxzbihnZSkpfSksQiYmKGN0KEIuZWwpIT09Q2UuaGlkZGVuQ29udGFpbmVyJiYoQz1KZShCKSksbWUoQixzZSxDZSwhMCkpLEdlfHx0ZSgkLGtlLEMsMCkpLE1yKENlLCQpLENlLnBlbmRpbmdCcmFuY2g9bnVsbCxDZS5pc0luRmFsbGJhY2s9ITE7Zm9yKHZhciBFZT1DZS5wYXJlbnQsWWU9ITE7RWU7KXtpZihFZS5wZW5kaW5nQnJhbmNoKXtFZS5lZmZlY3RzLnB1c2goLi4uZ2UpLFllPSEwO2JyZWFrfUVlPUVlLnBhcmVudH0hWWUmJiFHZSYmc24oZ2UpLENlLmVmZmVjdHM9W10sQ3QmJmwmJmwucGVuZGluZ0JyYW5jaCYmSXQ9PT1sLnBlbmRpbmdJZCYmKGwuZGVwcy0tLGwuZGVwcz09PTAmJiFidCYmbC5yZXNvbHZlKCkpLERuKG90LCJvblJlc29sdmUiKX0sZmFsbGJhY2soVmUpe2lmKCEhQ2UucGVuZGluZ0JyYW5jaCl7dmFye3Zub2RlOmJ0LGFjdGl2ZUJyYW5jaDpvdCxwYXJlbnRDb21wb25lbnQ6Qixjb250YWluZXI6JCxuYW1lc3BhY2U6cmV9PUNlO0RuKGJ0LCJvbkZhbGxiYWNrIik7dmFyIGdlPUplKG90KSxzZT0oKT0+eyFDZS5pc0luRmFsbGJhY2t8fCh2ZShudWxsLFZlLCQsZ2UsQixudWxsLHJlLFYsVSksTXIoQ2UsVmUpKX0sa2U9VmUudHJhbnNpdGlvbiYmVmUudHJhbnNpdGlvbi5tb2RlPT09Im91dC1pbiI7a2UmJihvdC50cmFuc2l0aW9uLmFmdGVyTGVhdmU9c2UpLENlLmlzSW5GYWxsYmFjaz0hMCxtZShvdCxCLG51bGwsITApLGtlfHxzZSgpfX0sbW92ZShWZSxidCxvdCl7Q2UuYWN0aXZlQnJhbmNoJiZ0ZShDZS5hY3RpdmVCcmFuY2gsVmUsYnQsb3QpLENlLmNvbnRhaW5lcj1WZX0sbmV4dCgpe3JldHVybiBDZS5hY3RpdmVCcmFuY2gmJkplKENlLmFjdGl2ZUJyYW5jaCl9LHJlZ2lzdGVyRGVwKFZlLGJ0KXt2YXIgb3Q9ISFDZS5wZW5kaW5nQnJhbmNoO290JiZDZS5kZXBzKys7dmFyIEI9VmUudm5vZGUuZWw7VmUuYXN5bmNEZXAuY2F0Y2goJD0+e1NuKCQsVmUsMCl9KS50aGVuKCQ9PntpZighKFZlLmlzVW5tb3VudGVkfHxDZS5pc1VubW91bnRlZHx8Q2UucGVuZGluZ0lkIT09VmUuc3VzcGVuc2VJZCkpe1ZlLmFzeW5jUmVzb2x2ZWQ9ITA7dmFye3Zub2RlOnJlfT1WZTtVcyhWZSwkLCExKSxCJiYocmUuZWw9Qik7dmFyIGdlPSFCJiZWZS5zdWJUcmVlLmVsO2J0KFZlLHJlLGN0KEJ8fFZlLnN1YlRyZWUuZWwpLEI/bnVsbDpKZShWZS5zdWJUcmVlKSxDZSxrLFUpLGdlJiZpdChnZSksU28oVmUscmUuZWwpLG90JiYtLUNlLmRlcHM9PT0wJiZDZS5yZXNvbHZlKCl9fSl9LHVubW91bnQoVmUsYnQpe0NlLmlzVW5tb3VudGVkPSEwLENlLmFjdGl2ZUJyYW5jaCYmbWUoQ2UuYWN0aXZlQnJhbmNoLGQsVmUsYnQpLENlLnBlbmRpbmdCcmFuY2gmJm1lKENlLnBlbmRpbmdCcmFuY2gsZCxWZSxidCl9fTtyZXR1cm4gQ2V9ZnVuY3Rpb24gVGUoaSxsLGQsbSxBLEMsayxWLFUpe3ZhciBaPWwuc3VzcGVuc2U9TXQobCxtLGQsaS5wYXJlbnROb2RlLGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLG51bGwsQSxDLGssViwhMCksZGU9VShpLFoucGVuZGluZ0JyYW5jaD1sLnNzQ29udGVudCxkLFosQyxrKTtyZXR1cm4gWi5kZXBzPT09MCYmWi5yZXNvbHZlKCExLCEwKSxkZX1mdW5jdGlvbiBmYShpKXt2YXJ7c2hhcGVGbGFnOmwsY2hpbGRyZW46ZH09aSxtPWwmMzI7aS5zc0NvbnRlbnQ9Zm4obT9kLmRlZmF1bHQ6ZCksaS5zc0ZhbGxiYWNrPW0/Zm4oZC5mYWxsYmFjayk6SHQoaHIpfWZ1bmN0aW9uIGZuKGkpe3ZhciBsO2lmKGguaXNGdW5jdGlvbihpKSl7dmFyIGQ9bXImJmkuX2M7ZCYmKGkuX2Q9ITEsYmEoKSksaT1pKCksZCYmKGkuX2Q9ITAsbD13cixaYSgpKX1pZihoLmlzQXJyYXkoaSkpe3ZhciBtPUVvKGkpO2k9bX1yZXR1cm4gaT0kbihpKSxsJiYhaS5keW5hbWljQ2hpbGRyZW4mJihpLmR5bmFtaWNDaGlsZHJlbj1sLmZpbHRlcihBPT5BIT09aSkpLGl9ZnVuY3Rpb24gVm8oaSxsKXtsJiZsLnBlbmRpbmdCcmFuY2g/aC5pc0FycmF5KGkpP2wuZWZmZWN0cy5wdXNoKC4uLmkpOmwuZWZmZWN0cy5wdXNoKGkpOnNuKGkpfWZ1bmN0aW9uIE1yKGksbCl7aS5hY3RpdmVCcmFuY2g9bDtmb3IodmFye3Zub2RlOmQscGFyZW50Q29tcG9uZW50Om19PWksQT1sLmVsOyFBJiZsLmNvbXBvbmVudDspbD1sLmNvbXBvbmVudC5zdWJUcmVlLEE9bC5lbDtkLmVsPUEsbSYmbS5zdWJUcmVlPT09ZCYmKG0udm5vZGUuZWw9QSxTbyhtLEEpKX1mdW5jdGlvbiBzbyhpKXt2YXIgbDtyZXR1cm4oKGw9aS5wcm9wcyk9PW51bGw/dm9pZCAwOmwuc3VzcGVuc2libGUpIT1udWxsJiZpLnByb3BzLnN1c3BlbnNpYmxlIT09ITF9dmFyIGxvPVN5bWJvbC5mb3IoInYtc2N4IiksWWk9KCk9Pnt7dmFyIGk9SChsbyk7cmV0dXJuIGl9fTtmdW5jdGlvbiBLaShpLGwpe3JldHVybiBDbyhpLG51bGwsbCl9ZnVuY3Rpb24gWHIoaSxsKXtyZXR1cm4gQ28oaSxudWxsLHtmbHVzaDoicG9zdCJ9KX1mdW5jdGlvbiBtaShpLGwpe3JldHVybiBDbyhpLG51bGwse2ZsdXNoOiJzeW5jIn0pfXZhciBTcj17fTtmdW5jdGlvbiBEcihpLGwsZCl7cmV0dXJuIENvKGksbCxkKX1mdW5jdGlvbiBDbyhpLGwpe3ZhcntpbW1lZGlhdGU6ZCxkZWVwOm0sZmx1c2g6QSxvbmNlOkMsb25UcmFjazprLG9uVHJpZ2dlcjpWfT1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06aC5FTVBUWV9PQko7aWYobCYmQyl7dmFyIFU9bDtsPWZ1bmN0aW9uKCl7VSguLi5hcmd1bWVudHMpLG90KCl9fXZhciBaPW9yLGRlPUI9Pm09PT0hMD9COlJuKEIsbT09PSExPzE6dm9pZCAwKSx2ZSx0ZT0hMSxtZT0hMTtpZihfLmlzUmVmKGkpPyh2ZT0oKT0+aS52YWx1ZSx0ZT1fLmlzU2hhbGxvdyhpKSk6Xy5pc1JlYWN0aXZlKGkpPyh2ZT0oKT0+ZGUoaSksdGU9ITApOmguaXNBcnJheShpKT8obWU9ITAsdGU9aS5zb21lKEI9Pl8uaXNSZWFjdGl2ZShCKXx8Xy5pc1NoYWxsb3coQikpLHZlPSgpPT5pLm1hcChCPT57aWYoXy5pc1JlZihCKSlyZXR1cm4gQi52YWx1ZTtpZihfLmlzUmVhY3RpdmUoQikpcmV0dXJuIGRlKEIpO2lmKGguaXNGdW5jdGlvbihCKSlyZXR1cm4gSnQoQixaLDIpfSkpOmguaXNGdW5jdGlvbihpKT9sP3ZlPSgpPT5KdChpLFosMik6dmU9KCk9PihjdCYmY3QoKSxjbihpLFosMyxbaXRdKSk6dmU9aC5OT09QLGwmJm0pe3ZhciBKZT12ZTt2ZT0oKT0+Um4oSmUoKSl9dmFyIGN0LGl0PUI9PntjdD1WZS5vblN0b3A9KCk9PntKdChCLFosNCksY3Q9VmUub25TdG9wPXZvaWQgMH19LEl0O2lmKEUuaXNJblNTUkNvbXBvbmVudFNldHVwKWlmKGl0PWguTk9PUCxsP2QmJmNuKGwsWiwzLFt2ZSgpLG1lP1tdOnZvaWQgMCxpdF0pOnZlKCksQT09PSJzeW5jIil7dmFyIEN0PVlpKCk7SXQ9Q3QuX193YXRjaGVySGFuZGxlc3x8KEN0Ll9fd2F0Y2hlckhhbmRsZXM9W10pfWVsc2UgcmV0dXJuIGguTk9PUDt2YXIgY2U9bWU/bmV3IEFycmF5KGkubGVuZ3RoKS5maWxsKFNyKTpTcixOZT0oKT0+e2lmKCEoIVZlLmFjdGl2ZXx8IVZlLmRpcnR5KSlpZihsKXt2YXIgQj1WZS5ydW4oKTsobXx8dGV8fChtZT9CLnNvbWUoKCQscmUpPT5oLmhhc0NoYW5nZWQoJCxjZVtyZV0pKTpoLmhhc0NoYW5nZWQoQixjZSkpKSYmKGN0JiZjdCgpLGNuKGwsWiwzLFtCLGNlPT09U3I/dm9pZCAwOm1lJiZjZVswXT09PVNyP1tdOmNlLGl0XSksY2U9Qil9ZWxzZSBWZS5ydW4oKX07TmUuYWxsb3dSZWN1cnNlPSEhbDt2YXIgQ2U7QT09PSJzeW5jIj9DZT1OZTpBPT09InBvc3QiP0NlPSgpPT5mcihOZSxaJiZaLnN1c3BlbnNlKTooTmUucHJlPSEwLFomJihOZS5pZD1aLnVpZCksQ2U9KCk9Pk50KE5lKSk7dmFyIFZlPW5ldyBfLlJlYWN0aXZlRWZmZWN0KHZlLGguTk9PUCxDZSksYnQ9Xy5nZXRDdXJyZW50U2NvcGUoKSxvdD0oKT0+e1ZlLnN0b3AoKSxidCYmaC5yZW1vdmUoYnQuZWZmZWN0cyxWZSl9O3JldHVybiBsP2Q/TmUoKTpjZT1WZS5ydW4oKTpBPT09InBvc3QiP2ZyKFZlLnJ1bi5iaW5kKFZlKSxaJiZaLnN1c3BlbnNlKTpWZS5ydW4oKSxJdCYmSXQucHVzaChvdCksb3R9ZnVuY3Rpb24gUXIoaSxsLGQpe3ZhciBtPXRoaXMucHJveHksQT1oLmlzU3RyaW5nKGkpP2kuaW5jbHVkZXMoIi4iKT9ZdChtLGkpOigpPT5tW2ldOmkuYmluZChtLG0pLEM7aC5pc0Z1bmN0aW9uKGwpP0M9bDooQz1sLmhhbmRsZXIsZD1sKTt2YXIgaz1YaSh0aGlzKSxWPUNvKEEsQy5iaW5kKG0pLGQpO3JldHVybiBrKCksVn1mdW5jdGlvbiBZdChpLGwpe3ZhciBkPWwuc3BsaXQoIi4iKTtyZXR1cm4oKT0+e2Zvcih2YXIgbT1pLEE9MDtBPGQubGVuZ3RoJiZtO0ErKyltPW1bZFtBXV07cmV0dXJuIG19fWZ1bmN0aW9uIFJuKGksbCl7dmFyIGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOjAsbT1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMDtpZighaC5pc09iamVjdChpKXx8aS5fX3Zfc2tpcClyZXR1cm4gaTtpZihsJiZsPjApe2lmKGQ+PWwpcmV0dXJuIGk7ZCsrfWlmKG09bXx8bmV3IFNldCxtLmhhcyhpKSlyZXR1cm4gaTtpZihtLmFkZChpKSxfLmlzUmVmKGkpKVJuKGkudmFsdWUsbCxkLG0pO2Vsc2UgaWYoaC5pc0FycmF5KGkpKWZvcih2YXIgQT0wO0E8aS5sZW5ndGg7QSsrKVJuKGlbQV0sbCxkLG0pO2Vsc2UgaWYoaC5pc1NldChpKXx8aC5pc01hcChpKSlpLmZvckVhY2goaz0+e1JuKGssbCxkLG0pfSk7ZWxzZSBpZihoLmlzUGxhaW5PYmplY3QoaSkpZm9yKHZhciBDIGluIGkpUm4oaVtDXSxsLGQsbSk7cmV0dXJuIGl9ZnVuY3Rpb24gVW4oaSxsKXtpZihWbj09PW51bGwpcmV0dXJuIGk7Zm9yKHZhciBkPW9hKFZuKXx8Vm4ucHJveHksbT1pLmRpcnN8fChpLmRpcnM9W10pLEE9MDtBPGwubGVuZ3RoO0ErKyl7dmFyW0MsayxWLFU9aC5FTVBUWV9PQkpdPWxbQV07QyYmKGguaXNGdW5jdGlvbihDKSYmKEM9e21vdW50ZWQ6Qyx1cGRhdGVkOkN9KSxDLmRlZXAmJlJuKGspLG0ucHVzaCh7ZGlyOkMsaW5zdGFuY2U6ZCx2YWx1ZTprLG9sZFZhbHVlOnZvaWQgMCxhcmc6Vixtb2RpZmllcnM6VX0pKX1yZXR1cm4gaX1mdW5jdGlvbiBkbihpLGwsZCxtKXtmb3IodmFyIEE9aS5kaXJzLEM9bCYmbC5kaXJzLGs9MDtrPEEubGVuZ3RoO2srKyl7dmFyIFY9QVtrXTtDJiYoVi5vbGRWYWx1ZT1DW2tdLnZhbHVlKTt2YXIgVT1WLmRpclttXTtVJiYoXy5wYXVzZVRyYWNraW5nKCksY24oVSxkLDgsW2kuZWwsVixpLGxdKSxfLnJlc2V0VHJhY2tpbmcoKSl9fXZhciBlcj1TeW1ib2woIl9sZWF2ZUNiIiksVW89U3ltYm9sKCJfZW50ZXJDYiIpO2Z1bmN0aW9uICRvKCl7dmFyIGk9e2lzTW91bnRlZDohMSxpc0xlYXZpbmc6ITEsaXNVbm1vdW50aW5nOiExLGxlYXZpbmdWTm9kZXM6bmV3IE1hcH07cmV0dXJuIEppKCgpPT57aS5pc01vdW50ZWQ9ITB9KSxZKCgpPT57aS5pc1VubW91bnRpbmc9ITB9KSxpfXZhciBGcj1bRnVuY3Rpb24sQXJyYXldLEFvPXttb2RlOlN0cmluZyxhcHBlYXI6Qm9vbGVhbixwZXJzaXN0ZWQ6Qm9vbGVhbixvbkJlZm9yZUVudGVyOkZyLG9uRW50ZXI6RnIsb25BZnRlckVudGVyOkZyLG9uRW50ZXJDYW5jZWxsZWQ6RnIsb25CZWZvcmVMZWF2ZTpGcixvbkxlYXZlOkZyLG9uQWZ0ZXJMZWF2ZTpGcixvbkxlYXZlQ2FuY2VsbGVkOkZyLG9uQmVmb3JlQXBwZWFyOkZyLG9uQXBwZWFyOkZyLG9uQWZ0ZXJBcHBlYXI6RnIsb25BcHBlYXJDYW5jZWxsZWQ6RnJ9LFFvPXtuYW1lOiJCYXNlVHJhbnNpdGlvbiIscHJvcHM6QW8sc2V0dXAoaSxsKXt2YXJ7c2xvdHM6ZH09bCxtPU1pKCksQT0kbygpO3JldHVybigpPT57dmFyIEM9ZC5kZWZhdWx0JiZJaShkLmRlZmF1bHQoKSwhMCk7aWYoISghQ3x8IUMubGVuZ3RoKSl7dmFyIGs9Q1swXTtpZihDLmxlbmd0aD4xKXtmb3IodmFyIFYgb2YgQylpZihWLnR5cGUhPT1ocil7az1WO2JyZWFrfX12YXIgVT1fLnRvUmF3KGkpLHttb2RlOlp9PVU7aWYoQS5pc0xlYXZpbmcpcmV0dXJuIEhvKGspO3ZhciBkZT1OaShrKTtpZighZGUpcmV0dXJuIEhvKGspO3ZhciB2ZT1faShkZSxVLEEsbSk7YmkoZGUsdmUpO3ZhciB0ZT1tLnN1YlRyZWUsbWU9dGUmJk5pKHRlKTtpZihtZSYmbWUudHlwZSE9PWhyJiYhVnIoZGUsbWUpKXt2YXIgSmU9X2kobWUsVSxBLG0pO2lmKGJpKG1lLEplKSxaPT09Im91dC1pbiIpcmV0dXJuIEEuaXNMZWF2aW5nPSEwLEplLmFmdGVyTGVhdmU9KCk9PntBLmlzTGVhdmluZz0hMSxtLnVwZGF0ZS5hY3RpdmUhPT0hMSYmKG0uZWZmZWN0LmRpcnR5PSEwLG0udXBkYXRlKCkpfSxIbyhrKTtaPT09ImluLW91dCImJmRlLnR5cGUhPT1ociYmKEplLmRlbGF5TGVhdmU9KGN0LGl0LEl0KT0+e3ZhciBDdD1jbyhBLG1lKTtDdFtTdHJpbmcobWUua2V5KV09bWUsY3RbZXJdPSgpPT57aXQoKSxjdFtlcl09dm9pZCAwLGRlbGV0ZSB2ZS5kZWxheWVkTGVhdmV9LHZlLmRlbGF5ZWRMZWF2ZT1JdH0pfXJldHVybiBrfX19fSxUbz1RbztmdW5jdGlvbiBjbyhpLGwpe3ZhcntsZWF2aW5nVk5vZGVzOmR9PWksbT1kLmdldChsLnR5cGUpO3JldHVybiBtfHwobT1PYmplY3QuY3JlYXRlKG51bGwpLGQuc2V0KGwudHlwZSxtKSksbX1mdW5jdGlvbiBfaShpLGwsZCxtKXt2YXJ7YXBwZWFyOkEsbW9kZTpDLHBlcnNpc3RlZDprPSExLG9uQmVmb3JlRW50ZXI6VixvbkVudGVyOlUsb25BZnRlckVudGVyOlosb25FbnRlckNhbmNlbGxlZDpkZSxvbkJlZm9yZUxlYXZlOnZlLG9uTGVhdmU6dGUsb25BZnRlckxlYXZlOm1lLG9uTGVhdmVDYW5jZWxsZWQ6SmUsb25CZWZvcmVBcHBlYXI6Y3Qsb25BcHBlYXI6aXQsb25BZnRlckFwcGVhcjpJdCxvbkFwcGVhckNhbmNlbGxlZDpDdH09bCxjZT1TdHJpbmcoaS5rZXkpLE5lPWNvKGQsaSksQ2U9KG90LEIpPT57b3QmJmNuKG90LG0sOSxCKX0sVmU9KG90LEIpPT57dmFyICQ9QlsxXTtDZShvdCxCKSxoLmlzQXJyYXkob3QpP290LmV2ZXJ5KHJlPT5yZS5sZW5ndGg8PTEpJiYkKCk6b3QubGVuZ3RoPD0xJiYkKCl9LGJ0PXttb2RlOkMscGVyc2lzdGVkOmssYmVmb3JlRW50ZXIob3Qpe3ZhciBCPVY7aWYoIWQuaXNNb3VudGVkKWlmKEEpQj1jdHx8VjtlbHNlIHJldHVybjtvdFtlcl0mJm90W2VyXSghMCk7dmFyICQ9TmVbY2VdOyQmJlZyKGksJCkmJiQuZWxbZXJdJiYkLmVsW2VyXSgpLENlKEIsW290XSl9LGVudGVyKG90KXt2YXIgQj1VLCQ9WixyZT1kZTtpZighZC5pc01vdW50ZWQpaWYoQSlCPWl0fHxVLCQ9SXR8fFoscmU9Q3R8fGRlO2Vsc2UgcmV0dXJuO3ZhciBnZT0hMSxzZT1vdFtVb109a2U9PntnZXx8KGdlPSEwLGtlP0NlKHJlLFtvdF0pOkNlKCQsW290XSksYnQuZGVsYXllZExlYXZlJiZidC5kZWxheWVkTGVhdmUoKSxvdFtVb109dm9pZCAwKX07Qj9WZShCLFtvdCxzZV0pOnNlKCl9LGxlYXZlKG90LEIpe3ZhciAkPVN0cmluZyhpLmtleSk7aWYob3RbVW9dJiZvdFtVb10oITApLGQuaXNVbm1vdW50aW5nKXJldHVybiBCKCk7Q2UodmUsW290XSk7dmFyIHJlPSExLGdlPW90W2VyXT1zZT0+e3JlfHwocmU9ITAsQigpLHNlP0NlKEplLFtvdF0pOkNlKG1lLFtvdF0pLG90W2VyXT12b2lkIDAsTmVbJF09PT1pJiZkZWxldGUgTmVbJF0pfTtOZVskXT1pLHRlP1ZlKHRlLFtvdCxnZV0pOmdlKCl9LGNsb25lKG90KXtyZXR1cm4gX2kob3QsbCxkLG0pfX07cmV0dXJuIGJ0fWZ1bmN0aW9uIEhvKGkpe2lmKGplKGkpKXJldHVybiBpPU9uKGkpLGkuY2hpbGRyZW49bnVsbCxpfWZ1bmN0aW9uIE5pKGkpe3JldHVybiBqZShpKT9pLmNoaWxkcmVuP2kuY2hpbGRyZW5bMF06dm9pZCAwOml9ZnVuY3Rpb24gYmkoaSxsKXtpLnNoYXBlRmxhZyY2JiZpLmNvbXBvbmVudD9iaShpLmNvbXBvbmVudC5zdWJUcmVlLGwpOmkuc2hhcGVGbGFnJjEyOD8oaS5zc0NvbnRlbnQudHJhbnNpdGlvbj1sLmNsb25lKGkuc3NDb250ZW50KSxpLnNzRmFsbGJhY2sudHJhbnNpdGlvbj1sLmNsb25lKGkuc3NGYWxsYmFjaykpOmkudHJhbnNpdGlvbj1sfWZ1bmN0aW9uIElpKGkpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITEsZD1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCxtPVtdLEE9MCxDPTA7QzxpLmxlbmd0aDtDKyspe3ZhciBrPWlbQ10sVj1kPT1udWxsP2sua2V5OlN0cmluZyhkKStTdHJpbmcoay5rZXkhPW51bGw/ay5rZXk6Qyk7ay50eXBlPT09aXI/KGsucGF0Y2hGbGFnJjEyOCYmQSsrLG09bS5jb25jYXQoSWkoay5jaGlsZHJlbixsLFYpKSk6KGx8fGsudHlwZSE9PWhyKSYmbS5wdXNoKFYhPW51bGw/T24oayx7a2V5OlZ9KTprKX1pZihBPjEpZm9yKHZhciBVPTA7VTxtLmxlbmd0aDtVKyspbVtVXS5wYXRjaEZsYWc9LTI7cmV0dXJuIG19ZnVuY3Rpb24gRChpLGwpe3JldHVybiBoLmlzRnVuY3Rpb24oaSk/KCgpPT5oLmV4dGVuZCh7bmFtZTppLm5hbWV9LGwse3NldHVwOml9KSkoKTppfXZhciB6PWk9PiEhaS50eXBlLl9fYXN5bmNMb2FkZXI7ZnVuY3Rpb24gbGUoaSl7aC5pc0Z1bmN0aW9uKGkpJiYoaT17bG9hZGVyOml9KTt2YXJ7bG9hZGVyOmwsbG9hZGluZ0NvbXBvbmVudDpkLGVycm9yQ29tcG9uZW50Om0sZGVsYXk6QT0yMDAsdGltZW91dDpDLHN1c3BlbnNpYmxlOms9ITAsb25FcnJvcjpWfT1pLFU9bnVsbCxaLGRlPTAsdmU9KCk9PihkZSsrLFU9bnVsbCx0ZSgpKSx0ZT0oKT0+e3ZhciBtZTtyZXR1cm4gVXx8KG1lPVU9bCgpLmNhdGNoKEplPT57aWYoSmU9SmUgaW5zdGFuY2VvZiBFcnJvcj9KZTpuZXcgRXJyb3IoU3RyaW5nKEplKSksVilyZXR1cm4gbmV3IFByb21pc2UoKGN0LGl0KT0+e3ZhciBJdD0oKT0+Y3QodmUoKSksQ3Q9KCk9Pml0KEplKTtWKEplLEl0LEN0LGRlKzEpfSk7dGhyb3cgSmV9KS50aGVuKEplPT5tZSE9PVUmJlU/VTooSmUmJihKZS5fX2VzTW9kdWxlfHxKZVtTeW1ib2wudG9TdHJpbmdUYWddPT09Ik1vZHVsZSIpJiYoSmU9SmUuZGVmYXVsdCksWj1KZSxKZSkpKX07cmV0dXJuIEQoe25hbWU6IkFzeW5jQ29tcG9uZW50V3JhcHBlciIsX19hc3luY0xvYWRlcjp0ZSxnZXQgX19hc3luY1Jlc29sdmVkKCl7cmV0dXJuIFp9LHNldHVwKCl7dmFyIG1lPW9yO2lmKFopcmV0dXJuKCk9PkhlKFosbWUpO3ZhciBKZT1DdD0+e1U9bnVsbCxTbihDdCxtZSwxMyl9O2lmKGsmJm1lLnN1c3BlbnNlfHxFLmlzSW5TU1JDb21wb25lbnRTZXR1cClyZXR1cm4gdGUoKS50aGVuKEN0PT4oKT0+SGUoQ3QsbWUpKS5jYXRjaChDdD0+KEplKEN0KSwoKT0+bT9IdChtLHtlcnJvcjpDdH0pOm51bGwpKTt2YXIgY3Q9Xy5yZWYoITEpLGl0PV8ucmVmKCksSXQ9Xy5yZWYoISFBKTtyZXR1cm4gQSYmc2V0VGltZW91dCgoKT0+e0l0LnZhbHVlPSExfSxBKSxDIT1udWxsJiZzZXRUaW1lb3V0KCgpPT57aWYoIWN0LnZhbHVlJiYhaXQudmFsdWUpe3ZhciBDdD1uZXcgRXJyb3IoIkFzeW5jIGNvbXBvbmVudCB0aW1lZCBvdXQgYWZ0ZXIgIi5jb25jYXQoQywibXMuIikpO0plKEN0KSxpdC52YWx1ZT1DdH19LEMpLHRlKCkudGhlbigoKT0+e2N0LnZhbHVlPSEwLG1lLnBhcmVudCYmamUobWUucGFyZW50LnZub2RlKSYmKG1lLnBhcmVudC5lZmZlY3QuZGlydHk9ITAsTnQobWUucGFyZW50LnVwZGF0ZSkpfSkuY2F0Y2goQ3Q9PntKZShDdCksaXQudmFsdWU9Q3R9KSwoKT0+e2lmKGN0LnZhbHVlJiZaKXJldHVybiBIZShaLG1lKTtpZihpdC52YWx1ZSYmbSlyZXR1cm4gSHQobSx7ZXJyb3I6aXQudmFsdWV9KTtpZihkJiYhSXQudmFsdWUpcmV0dXJuIEh0KGQpfX19KX1mdW5jdGlvbiBIZShpLGwpe3ZhcntyZWY6ZCxwcm9wczptLGNoaWxkcmVuOkEsY2U6Q309bC52bm9kZSxrPUh0KGksbSxBKTtyZXR1cm4gay5yZWY9ZCxrLmNlPUMsZGVsZXRlIGwudm5vZGUuY2Usa312YXIgamU9aT0+aS50eXBlLl9faXNLZWVwQWxpdmUsZHQ9e25hbWU6IktlZXBBbGl2ZSIsX19pc0tlZXBBbGl2ZTohMCxwcm9wczp7aW5jbHVkZTpbU3RyaW5nLFJlZ0V4cCxBcnJheV0sZXhjbHVkZTpbU3RyaW5nLFJlZ0V4cCxBcnJheV0sbWF4OltTdHJpbmcsTnVtYmVyXX0sc2V0dXAoaSxsKXt2YXJ7c2xvdHM6ZH09bCxtPU1pKCksQT1tLmN0eDtpZighQS5yZW5kZXJlcilyZXR1cm4oKT0+e3ZhciBjZT1kLmRlZmF1bHQmJmQuZGVmYXVsdCgpO3JldHVybiBjZSYmY2UubGVuZ3RoPT09MT9jZVswXTpjZX07dmFyIEM9bmV3IE1hcCxrPW5ldyBTZXQsVj1udWxsLFU9bS5zdXNwZW5zZSx7cmVuZGVyZXI6e3A6WixtOmRlLHVtOnZlLG86e2NyZWF0ZUVsZW1lbnQ6dGV9fX09QSxtZT10ZSgiZGl2IixudWxsKTtBLmFjdGl2YXRlPShjZSxOZSxDZSxWZSxidCk9Pnt2YXIgb3Q9Y2UuY29tcG9uZW50O2RlKGNlLE5lLENlLDAsVSksWihvdC52bm9kZSxjZSxOZSxDZSxvdCxVLFZlLGNlLnNsb3RTY29wZUlkcyxidCksZnIoKCk9PntvdC5pc0RlYWN0aXZhdGVkPSExLG90LmEmJmguaW52b2tlQXJyYXlGbnMob3QuYSk7dmFyIEI9Y2UucHJvcHMmJmNlLnByb3BzLm9uVm5vZGVNb3VudGVkO0ImJkVuKEIsb3QucGFyZW50LGNlKX0sVSl9LEEuZGVhY3RpdmF0ZT1jZT0+e3ZhciBOZT1jZS5jb21wb25lbnQ7ZGUoY2UsbWUsbnVsbCwxLFUpLGZyKCgpPT57TmUuZGEmJmguaW52b2tlQXJyYXlGbnMoTmUuZGEpO3ZhciBDZT1jZS5wcm9wcyYmY2UucHJvcHMub25Wbm9kZVVubW91bnRlZDtDZSYmRW4oQ2UsTmUucGFyZW50LGNlKSxOZS5pc0RlYWN0aXZhdGVkPSEwfSxVKX07ZnVuY3Rpb24gSmUoY2Upe3VvKGNlKSx2ZShjZSxtLFUsITApfWZ1bmN0aW9uIGN0KGNlKXtDLmZvckVhY2goKE5lLENlKT0+e3ZhciBWZT10cyhOZS50eXBlKTtWZSYmKCFjZXx8IWNlKFZlKSkmJml0KENlKX0pfWZ1bmN0aW9uIGl0KGNlKXt2YXIgTmU9Qy5nZXQoY2UpOyFWfHwhVnIoTmUsVik/SmUoTmUpOlYmJnVvKFYpLEMuZGVsZXRlKGNlKSxrLmRlbGV0ZShjZSl9RHIoKCk9PltpLmluY2x1ZGUsaS5leGNsdWRlXSxjZT0+e3ZhcltOZSxDZV09Y2U7TmUmJmN0KFZlPT5udChOZSxWZSkpLENlJiZjdChWZT0+IW50KENlLFZlKSl9LHtmbHVzaDoicG9zdCIsZGVlcDohMH0pO3ZhciBJdD1udWxsLEN0PSgpPT57SXQhPW51bGwmJkMuc2V0KEl0LGZvKG0uc3ViVHJlZSkpfTtyZXR1cm4gSmkoQ3QpLG9lKEN0KSxZKCgpPT57Qy5mb3JFYWNoKGNlPT57dmFye3N1YlRyZWU6TmUsc3VzcGVuc2U6Q2V9PW0sVmU9Zm8oTmUpO2lmKGNlLnR5cGU9PT1WZS50eXBlJiZjZS5rZXk9PT1WZS5rZXkpe3VvKFZlKTt2YXIgYnQ9VmUuY29tcG9uZW50LmRhO2J0JiZmcihidCxDZSk7cmV0dXJufUplKGNlKX0pfSksKCk9PntpZihJdD1udWxsLCFkLmRlZmF1bHQpcmV0dXJuIG51bGw7dmFyIGNlPWQuZGVmYXVsdCgpLE5lPWNlWzBdO2lmKGNlLmxlbmd0aD4xKXJldHVybiBWPW51bGwsY2U7aWYoIUJpKE5lKXx8IShOZS5zaGFwZUZsYWcmNCkmJiEoTmUuc2hhcGVGbGFnJjEyOCkpcmV0dXJuIFY9bnVsbCxOZTt2YXIgQ2U9Zm8oTmUpLFZlPUNlLnR5cGUsYnQ9dHMoeihDZSk/Q2UudHlwZS5fX2FzeW5jUmVzb2x2ZWR8fHt9OlZlKSx7aW5jbHVkZTpvdCxleGNsdWRlOkIsbWF4OiR9PWk7aWYob3QmJighYnR8fCFudChvdCxidCkpfHxCJiZidCYmbnQoQixidCkpcmV0dXJuIFY9Q2UsTmU7dmFyIHJlPUNlLmtleT09bnVsbD9WZTpDZS5rZXksZ2U9Qy5nZXQocmUpO3JldHVybiBDZS5lbCYmKENlPU9uKENlKSxOZS5zaGFwZUZsYWcmMTI4JiYoTmUuc3NDb250ZW50PUNlKSksSXQ9cmUsZ2U/KENlLmVsPWdlLmVsLENlLmNvbXBvbmVudD1nZS5jb21wb25lbnQsQ2UudHJhbnNpdGlvbiYmYmkoQ2UsQ2UudHJhbnNpdGlvbiksQ2Uuc2hhcGVGbGFnfD01MTIsay5kZWxldGUocmUpLGsuYWRkKHJlKSk6KGsuYWRkKHJlKSwkJiZrLnNpemU+cGFyc2VJbnQoJCwxMCkmJml0KGsudmFsdWVzKCkubmV4dCgpLnZhbHVlKSksQ2Uuc2hhcGVGbGFnfD0yNTYsVj1DZSxXaShOZS50eXBlKT9OZTpDZX19fSxxZT1kdDtmdW5jdGlvbiBudChpLGwpe3JldHVybiBoLmlzQXJyYXkoaSk/aS5zb21lKGQ9Pm50KGQsbCkpOmguaXNTdHJpbmcoaSk/aS5zcGxpdCgiLCIpLmluY2x1ZGVzKGwpOmguaXNSZWdFeHAoaSk/aS50ZXN0KGwpOiExfWZ1bmN0aW9uIFRyKGksbCl7T3IoaSwiYSIsbCl9ZnVuY3Rpb24ga2koaSxsKXtPcihpLCJkYSIsbCl9ZnVuY3Rpb24gT3IoaSxsKXt2YXIgZD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06b3IsbT1pLl9fd2RjfHwoaS5fX3dkYz0oKT0+e2Zvcih2YXIgQz1kO0M7KXtpZihDLmlzRGVhY3RpdmF0ZWQpcmV0dXJuO0M9Qy5wYXJlbnR9cmV0dXJuIGkoKX0pO2lmKE9vKGwsbSxkKSxkKWZvcih2YXIgQT1kLnBhcmVudDtBJiZBLnBhcmVudDspamUoQS5wYXJlbnQudm5vZGUpJiZQcihtLGwsZCxBKSxBPUEucGFyZW50fWZ1bmN0aW9uIFByKGksbCxkLG0pe3ZhciBBPU9vKGwsaSxtLCEwKTthZSgoKT0+e2gucmVtb3ZlKG1bbF0sQSl9LGQpfWZ1bmN0aW9uIHVvKGkpe2kuc2hhcGVGbGFnJj1+MjU2LGkuc2hhcGVGbGFnJj1+NTEyfWZ1bmN0aW9uIGZvKGkpe3JldHVybiBpLnNoYXBlRmxhZyYxMjg/aS5zc0NvbnRlbnQ6aX1mdW5jdGlvbiBPbyhpLGwpe3ZhciBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTpvcixtPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMTtpZihkKXtpZihJLmlzUm9vdEhvb2soaSkmJmQhPT1kLnJvb3QmJihkPWQucm9vdCxJLmlzUm9vdEltbWVkaWF0ZUhvb2soaSkpKXt2YXIgQT1kLnByb3h5O2NuKGwuYmluZChBKSxkLGksSS5PTl9MT0FEPT09aT9bQS4kcGFnZS5vcHRpb25zXTpbXSl9dmFye19fcGFnZV9jb250YWluZXJfXzpDfT1kLnJvb3Qudm5vZGU7QyYmQy5vbkluamVjdEhvb2soaSk7dmFyIGs9ZFtpXXx8KGRbaV09W10pLFY9bC5fX3dlaHx8KGwuX193ZWg9ZnVuY3Rpb24oKXtpZighZC5pc1VubW91bnRlZCl7Xy5wYXVzZVRyYWNraW5nKCk7Zm9yKHZhciBVPVhpKGQpLFo9YXJndW1lbnRzLmxlbmd0aCxkZT1uZXcgQXJyYXkoWiksdmU9MDt2ZTxaO3ZlKyspZGVbdmVdPWFyZ3VtZW50c1t2ZV07dmFyIHRlPWNuKGwsZCxpLGRlKTtyZXR1cm4gVSgpLF8ucmVzZXRUcmFja2luZygpLHRlfX0pO3JldHVybiBtP2sudW5zaGlmdChWKTprLnB1c2goViksVn19dmFyIGNpPWk9PmZ1bmN0aW9uKGwpe3ZhciBkPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpvcjtyZXR1cm4oIUUuaXNJblNTUkNvbXBvbmVudFNldHVwfHxpPT09InNwIikmJk9vKGksZnVuY3Rpb24oKXtyZXR1cm4gbCguLi5hcmd1bWVudHMpfSxkKX0sam89Y2koImJtIiksSmk9Y2koIm0iKSxrYT1jaSgiYnUiKSxvZT1jaSgidSIpLFk9Y2koImJ1bSIpLGFlPWNpKCJ1bSIpLE1lPWNpKCJzcCIpLHV0PWNpKCJydGciKSxobj1jaSgicnRjIik7ZnVuY3Rpb24gcHIoaSl7dmFyIGw9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOm9yO09vKCJlYyIsaSxsKX1mdW5jdGlvbiBBbihpLGwsZCxtKXt2YXIgQSxDPWQmJmRbbV07aWYoaC5pc0FycmF5KGkpfHxoLmlzU3RyaW5nKGkpKXtBPW5ldyBBcnJheShpLmxlbmd0aCk7Zm9yKHZhciBrPTAsVj1pLmxlbmd0aDtrPFY7aysrKUFba109bChpW2tdLGssdm9pZCAwLEMmJkNba10pfWVsc2UgaWYodHlwZW9mIGk9PSJudW1iZXIiKXtBPW5ldyBBcnJheShpKTtmb3IodmFyIFU9MDtVPGk7VSsrKUFbVV09bChVKzEsVSx2b2lkIDAsQyYmQ1tVXSl9ZWxzZSBpZihoLmlzT2JqZWN0KGkpKWlmKGlbU3ltYm9sLml0ZXJhdG9yXSlBPUFycmF5LmZyb20oaSwobWUsSmUpPT5sKG1lLEplLHZvaWQgMCxDJiZDW0plXSkpO2Vsc2V7dmFyIFo9T2JqZWN0LmtleXMoaSk7QT1uZXcgQXJyYXkoWi5sZW5ndGgpO2Zvcih2YXIgZGU9MCx2ZT1aLmxlbmd0aDtkZTx2ZTtkZSsrKXt2YXIgdGU9WltkZV07QVtkZV09bChpW3RlXSx0ZSxkZSxDJiZDW2RlXSl9fWVsc2UgQT1bXTtyZXR1cm4gZCYmKGRbbV09QSksQX1mdW5jdGlvbiB6bihpLGwpe2Zvcih2YXIgZD1mdW5jdGlvbihBKXt2YXIgQz1sW0FdO2lmKGguaXNBcnJheShDKSlmb3IodmFyIGs9MDtrPEMubGVuZ3RoO2srKylpW0Nba10ubmFtZV09Q1trXS5mbjtlbHNlIEMmJihpW0MubmFtZV09Qy5rZXk/ZnVuY3Rpb24oKXt2YXIgVj1DLmZuKC4uLmFyZ3VtZW50cyk7cmV0dXJuIFYmJihWLmtleT1DLmtleSksVn06Qy5mbil9LG09MDttPGwubGVuZ3RoO20rKylkKG0pO3JldHVybiBpfWZ1bmN0aW9uIE5yKGksbCl7dmFyIGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOnt9LG09YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDAsQT1hcmd1bWVudHMubGVuZ3RoPjQ/YXJndW1lbnRzWzRdOnZvaWQgMDtpZihWbi5pc0NFfHxWbi5wYXJlbnQmJnooVm4ucGFyZW50KSYmVm4ucGFyZW50LmlzQ0UpcmV0dXJuIGwhPT0iZGVmYXVsdCImJihkLm5hbWU9bCksSHQoInNsb3QiLGQsbSYmbSgpKTt2YXIgQz1pW2xdO0MmJkMuX2MmJihDLl9kPSExKSxiYSgpO3ZhciBrPUMmJmhvKEMoZCkpLFY9dGkoaXIse2tleTpkLmtleXx8ayYmay5rZXl8fCJfIi5jb25jYXQobCl9LGt8fChtP20oKTpbXSksayYmaS5fPT09MT82NDotMik7cmV0dXJuIUEmJlYuc2NvcGVJZCYmKFYuc2xvdFNjb3BlSWRzPVtWLnNjb3BlSWQrIi1zIl0pLEMmJkMuX2MmJihDLl9kPSEwKSxWfWZ1bmN0aW9uIGhvKGkpe3JldHVybiBpLnNvbWUobD0+QmkobCk/IShsLnR5cGU9PT1ocnx8bC50eXBlPT09aXImJiFobyhsLmNoaWxkcmVuKSk6ITApP2k6bnVsbH1mdW5jdGlvbiB2cihpLGwpe3ZhciBkPXt9O2Zvcih2YXIgbSBpbiBpKWRbbCYmL1tBLVpdLy50ZXN0KG0pPyJvbjoiLmNvbmNhdChtKTpoLnRvSGFuZGxlcktleShtKV09aVttXTtyZXR1cm4gZH12YXIgZGE9aT0+aT9fcyhpKT9vYShpKXx8aS5wcm94eTpkYShpLnBhcmVudCk6bnVsbCxQbz1oLmV4dGVuZChPYmplY3QuY3JlYXRlKG51bGwpLHskOmk9PmksJGVsOmk9Pmkudm5vZGUuZWwsJGRhdGE6aT0+aS5kYXRhLCRwcm9wczppPT5pLnByb3BzLCRhdHRyczppPT5pLmF0dHJzLCRzbG90czppPT5pLnNsb3RzLCRyZWZzOmk9PmkucmVmcywkcGFyZW50Omk9PmRhKGkucGFyZW50KSwkcm9vdDppPT5kYShpLnJvb3QpLCRlbWl0Omk9PmkuZW1pdCwkb3B0aW9uczppPT54aShpKSwkZm9yY2VVcGRhdGU6aT0+aS5mfHwoaS5mPSgpPT57aS5lZmZlY3QuZGlydHk9ITAsTnQoaS51cGRhdGUpfSksJG5leHRUaWNrOmk9Pmkubnx8KGkubj0kZS5iaW5kKGkucHJveHkpKSwkd2F0Y2g6aT0+UXIuYmluZChpKX0pLFJhPShpLGwpPT5pIT09aC5FTVBUWV9PQkomJiFpLl9faXNTY3JpcHRTZXR1cCYmaC5oYXNPd24oaSxsKSxoYT17Z2V0KGksbCl7dmFye186ZH09aSx7Y3R4Om0sc2V0dXBTdGF0ZTpBLGRhdGE6Qyxwcm9wczprLGFjY2Vzc0NhY2hlOlYsdHlwZTpVLGFwcENvbnRleHQ6Wn09ZCxkZTtpZihsWzBdIT09IiQiKXt2YXIgdmU9VltsXTtpZih2ZSE9PXZvaWQgMClzd2l0Y2godmUpe2Nhc2UgMTpyZXR1cm4gQVtsXTtjYXNlIDI6cmV0dXJuIENbbF07Y2FzZSA0OnJldHVybiBtW2xdO2Nhc2UgMzpyZXR1cm4ga1tsXX1lbHNle2lmKFJhKEEsbCkpcmV0dXJuIFZbbF09MSxBW2xdO2lmKEMhPT1oLkVNUFRZX09CSiYmaC5oYXNPd24oQyxsKSlyZXR1cm4gVltsXT0yLENbbF07aWYoKGRlPWQucHJvcHNPcHRpb25zWzBdKSYmaC5oYXNPd24oZGUsbCkpcmV0dXJuIFZbbF09MyxrW2xdO2lmKG0hPT1oLkVNUFRZX09CSiYmaC5oYXNPd24obSxsKSlyZXR1cm4gVltsXT00LG1bbF07cGEmJihWW2xdPTApfX12YXIgdGU9UG9bbF0sbWUsSmU7aWYodGUpcmV0dXJuIGw9PT0iJGF0dHJzIiYmXy50cmFjayhkLCJnZXQiLGwpLHRlKGQpO2lmKChtZT1VLl9fY3NzTW9kdWxlcykmJihtZT1tZVtsXSkpcmV0dXJuIG1lO2lmKG0hPT1oLkVNUFRZX09CSiYmaC5oYXNPd24obSxsKSlyZXR1cm4gVltsXT00LG1bbF07aWYoSmU9Wi5jb25maWcuZ2xvYmFsUHJvcGVydGllcyxoLmhhc093bihKZSxsKSlyZXR1cm4gSmVbbF19LHNldChpLGwsZCl7dmFye186bX09aSx7ZGF0YTpBLHNldHVwU3RhdGU6QyxjdHg6a309bTtyZXR1cm4gUmEoQyxsKT8oQ1tsXT1kLCEwKTpBIT09aC5FTVBUWV9PQkomJmguaGFzT3duKEEsbCk/KEFbbF09ZCwhMCk6aC5oYXNPd24obS5wcm9wcyxsKXx8bFswXT09PSIkIiYmbC5zbGljZSgxKWluIG0/ITE6KGtbbF09ZCwhMCl9LGhhcyhpLGwpe3ZhcntfOntkYXRhOmQsc2V0dXBTdGF0ZTptLGFjY2Vzc0NhY2hlOkEsY3R4OkMsYXBwQ29udGV4dDprLHByb3BzT3B0aW9uczpWfX09aSxVO3JldHVybiEhQVtsXXx8ZCE9PWguRU1QVFlfT0JKJiZoLmhhc093bihkLGwpfHxSYShtLGwpfHwoVT1WWzBdKSYmaC5oYXNPd24oVSxsKXx8aC5oYXNPd24oQyxsKXx8aC5oYXNPd24oUG8sbCl8fGguaGFzT3duKGsuY29uZmlnLmdsb2JhbFByb3BlcnRpZXMsbCl9LGRlZmluZVByb3BlcnR5KGksbCxkKXtyZXR1cm4gZC5nZXQhPW51bGw/aS5fLmFjY2Vzc0NhY2hlW2xdPTA6aC5oYXNPd24oZCwidmFsdWUiKSYmdGhpcy5zZXQoaSxsLGQudmFsdWUsbnVsbCksUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShpLGwsZCl9fSxOcz1oLmV4dGVuZCh7fSxoYSx7Z2V0KGksbCl7aWYobCE9PVN5bWJvbC51bnNjb3BhYmxlcylyZXR1cm4gaGEuZ2V0KGksbCxpKX0saGFzKGksbCl7dmFyIGQ9bFswXSE9PSJfIiYmIWguaXNHbG9iYWxseUFsbG93ZWQobCk7cmV0dXJuIGR9fSk7ZnVuY3Rpb24gWWEoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBJcygpe3JldHVybiBudWxsfWZ1bmN0aW9uIG5sKGkpe31mdW5jdGlvbiB0cihpKXt9ZnVuY3Rpb24gcmwoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiB4YSgpe31mdW5jdGlvbiB5aShpLGwpe3JldHVybiBudWxsfWZ1bmN0aW9uIGtzKCl7cmV0dXJuIFJpKCkuc2xvdHN9ZnVuY3Rpb24gaWwoKXtyZXR1cm4gUmkoKS5hdHRyc31mdW5jdGlvbiBSaSgpe3ZhciBpPU1pKCk7cmV0dXJuIGkuc2V0dXBDb250ZXh0fHwoaS5zZXR1cENvbnRleHQ9UWkoaSkpfWZ1bmN0aW9uIGdhKGkpe3JldHVybiBoLmlzQXJyYXkoaSk/aS5yZWR1Y2UoKGwsZCk9PihsW2RdPW51bGwsbCkse30pOml9ZnVuY3Rpb24gem8oaSxsKXt2YXIgZD1nYShpKTtmb3IodmFyIG0gaW4gbClpZighbS5zdGFydHNXaXRoKCJfX3NraXAiKSl7dmFyIEE9ZFttXTtBP2guaXNBcnJheShBKXx8aC5pc0Z1bmN0aW9uKEEpP0E9ZFttXT17dHlwZTpBLGRlZmF1bHQ6bFttXX06QS5kZWZhdWx0PWxbbV06QT09PW51bGwmJihBPWRbbV09e2RlZmF1bHQ6bFttXX0pLEEmJmxbIl9fc2tpcF8iLmNvbmNhdChtKV0mJihBLnNraXBGYWN0b3J5PSEwKX1yZXR1cm4gZH1mdW5jdGlvbiBScyhpLGwpe3JldHVybiFpfHwhbD9pfHxsOmguaXNBcnJheShpKSYmaC5pc0FycmF5KGwpP2kuY29uY2F0KGwpOmguZXh0ZW5kKHt9LGdhKGkpLGdhKGwpKX1mdW5jdGlvbiB4cyhpLGwpe3ZhciBkPXt9LG09ZnVuY3Rpb24oQyl7bC5pbmNsdWRlcyhDKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGQsQyx7ZW51bWVyYWJsZTohMCxnZXQ6KCk9PmlbQ119KX07Zm9yKHZhciBBIGluIGkpbShBKTtyZXR1cm4gZH1mdW5jdGlvbiBCYShpKXt2YXIgbD1NaSgpLGQ9aSgpO3JldHVybiBWYSgpLGguaXNQcm9taXNlKGQpJiYoZD1kLmNhdGNoKG09Pnt0aHJvdyBYaShsKSxtfSkpLFtkLCgpPT5YaShsKV19dmFyIHBhPSEwO2Z1bmN0aW9uIExhKGkpe3ZhciBsPXhpKGkpLGQ9aS5wcm94eSxtPWkuY3R4O3BhPSExLGwuYmVmb3JlQ3JlYXRlJiZCcyhsLmJlZm9yZUNyZWF0ZSxpLCJiYyIpO3ZhcntkYXRhOkEsY29tcHV0ZWQ6QyxtZXRob2RzOmssd2F0Y2g6Vixwcm92aWRlOlUsaW5qZWN0OlosY3JlYXRlZDpkZSxiZWZvcmVNb3VudDp2ZSxtb3VudGVkOnRlLGJlZm9yZVVwZGF0ZTptZSx1cGRhdGVkOkplLGFjdGl2YXRlZDpjdCxkZWFjdGl2YXRlZDppdCxiZWZvcmVEZXN0cm95Okl0LGJlZm9yZVVubW91bnQ6Q3QsZGVzdHJveWVkOmNlLHVubW91bnRlZDpOZSxyZW5kZXI6Q2UscmVuZGVyVHJhY2tlZDpWZSxyZW5kZXJUcmlnZ2VyZWQ6YnQsZXJyb3JDYXB0dXJlZDpvdCxzZXJ2ZXJQcmVmZXRjaDpCLGV4cG9zZTokLGluaGVyaXRBdHRyczpyZSxjb21wb25lbnRzOmdlLGRpcmVjdGl2ZXM6c2UsZmlsdGVyczprZX09bDtpZihaJiZlYShaLG0pLGspZm9yKHZhciBHZSBpbiBrKXt2YXIgRWU9a1tHZV07aC5pc0Z1bmN0aW9uKEVlKSYmKG1bR2VdPUVlLmJpbmQoZCkpfWlmKEEpe3ZhciBZZT1BLmNhbGwoZCxkKTtoLmlzT2JqZWN0KFllKSYmKGkuZGF0YT1fLnJlYWN0aXZlKFllKSl9aWYocGE9ITAsQyl7dmFyIEZlPWZ1bmN0aW9uKExuKXt2YXIgS249Q1tMbl0sJHI9aC5pc0Z1bmN0aW9uKEtuKT9Lbi5iaW5kKGQsZCk6aC5pc0Z1bmN0aW9uKEtuLmdldCk/S24uZ2V0LmJpbmQoZCxkKTpoLk5PT1Asc2E9IWguaXNGdW5jdGlvbihLbikmJmguaXNGdW5jdGlvbihLbi5zZXQpP0tuLnNldC5iaW5kKGQpOmguTk9PUCxIbj1sbCh7Z2V0OiRyLHNldDpzYX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShtLExuLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6KCk9PkhuLnZhbHVlLHNldDpLbz0+SG4udmFsdWU9S299KX07Zm9yKHZhciBfdCBpbiBDKUZlKF90KX1pZihWKWZvcih2YXIgUnQgaW4gVilkcyhWW1J0XSxtLGQsUnQpO2lmKFUpe3ZhciBMdD1oLmlzRnVuY3Rpb24oVSk/VS5jYWxsKGQpOlU7UmVmbGVjdC5vd25LZXlzKEx0KS5mb3JFYWNoKExuPT57aihMbixMdFtMbl0pfSl9ZGUmJkJzKGRlLGksImMiKTtmdW5jdGlvbiB6dChMbixLbil7aC5pc0FycmF5KEtuKT9Lbi5mb3JFYWNoKCRyPT5Mbigkci5iaW5kKGQpKSk6S24mJkxuKEtuLmJpbmQoZCkpfWlmKHp0KGpvLHZlKSx6dChKaSx0ZSksenQoa2EsbWUpLHp0KG9lLEplKSx6dChUcixjdCksenQoa2ksaXQpLHp0KHByLG90KSx6dChobixWZSksenQodXQsYnQpLHp0KFksQ3QpLHp0KGFlLE5lKSx6dChNZSxCKSxoLmlzQXJyYXkoJCkpaWYoJC5sZW5ndGgpe3ZhciBObj1pLmV4cG9zZWR8fChpLmV4cG9zZWQ9e30pOyQuZm9yRWFjaChMbj0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShObixMbix7Z2V0OigpPT5kW0xuXSxzZXQ6S249PmRbTG5dPUtufSl9KX1lbHNlIGkuZXhwb3NlZHx8KGkuZXhwb3NlZD17fSk7Q2UmJmkucmVuZGVyPT09aC5OT09QJiYoaS5yZW5kZXI9Q2UpLHJlIT1udWxsJiYoaS5pbmhlcml0QXR0cnM9cmUpLGdlJiYoaS5jb21wb25lbnRzPWdlKSxzZSYmKGkuZGlyZWN0aXZlcz1zZSk7dmFyIFBuPWkuYXBwQ29udGV4dC5jb25maWcuZ2xvYmFsUHJvcGVydGllcy4kYXBwbHlPcHRpb25zO1BuJiZQbihsLGksZCl9ZnVuY3Rpb24gZWEoaSxsKXtoLmlzQXJyYXkoaSkmJihpPWdzKGkpKTt2YXIgZD1mdW5jdGlvbihBKXt2YXIgQz1pW0FdLGs9dm9pZCAwO2guaXNPYmplY3QoQyk/ImRlZmF1bHQiaW4gQz9rPUgoQy5mcm9tfHxBLEMuZGVmYXVsdCwhMCk6az1IKEMuZnJvbXx8QSk6az1IKEMpLF8uaXNSZWYoayk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsQSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OigpPT5rLnZhbHVlLHNldDpWPT5rLnZhbHVlPVZ9KTpsW0FdPWt9O2Zvcih2YXIgbSBpbiBpKWQobSl9ZnVuY3Rpb24gQnMoaSxsLGQpe2NuKGguaXNBcnJheShpKT9pLm1hcChtPT5tLmJpbmQobC5wcm94eSkpOmkuYmluZChsLnByb3h5KSxsLGQpfWZ1bmN0aW9uIGRzKGksbCxkLG0pe3ZhciBBPW0uaW5jbHVkZXMoIi4iKT9ZdChkLG0pOigpPT5kW21dO2lmKGguaXNTdHJpbmcoaSkpe3ZhciBDPWxbaV07aC5pc0Z1bmN0aW9uKEMpJiZEcihBLEMpfWVsc2UgaWYoaC5pc0Z1bmN0aW9uKGkpKURyKEEsaS5iaW5kKGQpKTtlbHNlIGlmKGguaXNPYmplY3QoaSkpaWYoaC5pc0FycmF5KGkpKWkuZm9yRWFjaChWPT5kcyhWLGwsZCxtKSk7ZWxzZXt2YXIgaz1oLmlzRnVuY3Rpb24oaS5oYW5kbGVyKT9pLmhhbmRsZXIuYmluZChkKTpsW2kuaGFuZGxlcl07aC5pc0Z1bmN0aW9uKGspJiZEcihBLGssaSl9fWZ1bmN0aW9uIHhpKGkpe3ZhciBsPWkudHlwZSx7bWl4aW5zOmQsZXh0ZW5kczptfT1sLHttaXhpbnM6QSxvcHRpb25zQ2FjaGU6Qyxjb25maWc6e29wdGlvbk1lcmdlU3RyYXRlZ2llczprfX09aS5hcHBDb250ZXh0LFY9Qy5nZXQobCksVTtyZXR1cm4gVj9VPVY6IUEubGVuZ3RoJiYhZCYmIW0/VT1sOihVPXt9LEEubGVuZ3RoJiZBLmZvckVhY2goWj0+dmEoVSxaLGssITApKSx2YShVLGwsaykpLGguaXNPYmplY3QobCkmJkMuc2V0KGwsVSksVX1mdW5jdGlvbiB2YShpLGwsZCl7dmFyIG09YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiExLHttaXhpbnM6QSxleHRlbmRzOkN9PWw7QyYmdmEoaSxDLGQsITApLEEmJkEuZm9yRWFjaChVPT52YShpLFUsZCwhMCkpO2Zvcih2YXIgayBpbiBsKWlmKCEobSYmaz09PSJleHBvc2UiKSl7dmFyIFY9V3Jba118fGQmJmRba107aVtrXT1WP1YoaVtrXSxsW2tdKTpsW2tdfXJldHVybiBpfXZhciBXcj17ZGF0YTpXbyxwcm9wczpNYSxlbWl0czpNYSxtZXRob2RzOmdvLGNvbXB1dGVkOmdvLGJlZm9yZUNyZWF0ZTpJcixjcmVhdGVkOklyLGJlZm9yZU1vdW50OklyLG1vdW50ZWQ6SXIsYmVmb3JlVXBkYXRlOklyLHVwZGF0ZWQ6SXIsYmVmb3JlRGVzdHJveTpJcixiZWZvcmVVbm1vdW50OklyLGRlc3Ryb3llZDpJcix1bm1vdW50ZWQ6SXIsYWN0aXZhdGVkOklyLGRlYWN0aXZhdGVkOklyLGVycm9yQ2FwdHVyZWQ6SXIsc2VydmVyUHJlZmV0Y2g6SXIsY29tcG9uZW50czpnbyxkaXJlY3RpdmVzOmdvLHdhdGNoOm1hLHByb3ZpZGU6V28saW5qZWN0OmhzfTtmdW5jdGlvbiBXbyhpLGwpe3JldHVybiBsP2k/ZnVuY3Rpb24oKXtyZXR1cm4gaC5leHRlbmQoaC5pc0Z1bmN0aW9uKGkpP2kuY2FsbCh0aGlzLHRoaXMpOmksaC5pc0Z1bmN0aW9uKGwpP2wuY2FsbCh0aGlzLHRoaXMpOmwpfTpsOml9ZnVuY3Rpb24gaHMoaSxsKXtyZXR1cm4gZ28oZ3MoaSksZ3MobCkpfWZ1bmN0aW9uIGdzKGkpe2lmKGguaXNBcnJheShpKSl7Zm9yKHZhciBsPXt9LGQ9MDtkPGkubGVuZ3RoO2QrKylsW2lbZF1dPWlbZF07cmV0dXJuIGx9cmV0dXJuIGl9ZnVuY3Rpb24gSXIoaSxsKXtyZXR1cm4gaT9bLi4ubmV3IFNldChbXS5jb25jYXQoaSxsKSldOmx9ZnVuY3Rpb24gZ28oaSxsKXtyZXR1cm4gaT9oLmV4dGVuZChPYmplY3QuY3JlYXRlKG51bGwpLGksbCk6bH1mdW5jdGlvbiBNYShpLGwpe3JldHVybiBpP2guaXNBcnJheShpKSYmaC5pc0FycmF5KGwpP1suLi5uZXcgU2V0KFsuLi5pLC4uLmxdKV06aC5leHRlbmQoT2JqZWN0LmNyZWF0ZShudWxsKSxnYShpKSxnYShsIT1udWxsP2w6e30pKTpsfWZ1bmN0aW9uIG1hKGksbCl7aWYoIWkpcmV0dXJuIGw7aWYoIWwpcmV0dXJuIGk7dmFyIGQ9aC5leHRlbmQoT2JqZWN0LmNyZWF0ZShudWxsKSxpKTtmb3IodmFyIG0gaW4gbClkW21dPUlyKGlbbV0sbFttXSk7cmV0dXJuIGR9ZnVuY3Rpb24gS2EoKXtyZXR1cm57YXBwOm51bGwsY29uZmlnOntpc05hdGl2ZVRhZzpoLk5PLHBlcmZvcm1hbmNlOiExLGdsb2JhbFByb3BlcnRpZXM6e30sb3B0aW9uTWVyZ2VTdHJhdGVnaWVzOnt9LGVycm9ySGFuZGxlcjp2b2lkIDAsd2FybkhhbmRsZXI6dm9pZCAwLGNvbXBpbGVyT3B0aW9uczp7fX0sbWl4aW5zOltdLGNvbXBvbmVudHM6e30sZGlyZWN0aXZlczp7fSxwcm92aWRlczpPYmplY3QuY3JlYXRlKG51bGwpLG9wdGlvbnNDYWNoZTpuZXcgV2Vha01hcCxwcm9wc0NhY2hlOm5ldyBXZWFrTWFwLGVtaXRzQ2FjaGU6bmV3IFdlYWtNYXB9fXZhciBKYT0wO2Z1bmN0aW9uIGIoaSxsKXtyZXR1cm4gZnVuY3Rpb24obSl7dmFyIEE9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOm51bGw7aC5pc0Z1bmN0aW9uKG0pfHwobT1oLmV4dGVuZCh7fSxtKSksQSE9bnVsbCYmIWguaXNPYmplY3QoQSkmJihBPW51bGwpO3ZhciBDPUthKCksaz1uZXcgV2Vha1NldCxWPSExLFU9Qy5hcHA9e191aWQ6SmErKyxfY29tcG9uZW50Om0sX3Byb3BzOkEsX2NvbnRhaW5lcjpudWxsLF9jb250ZXh0OkMsX2luc3RhbmNlOm51bGwsdmVyc2lvbjpTaSxnZXQgY29uZmlnKCl7cmV0dXJuIEMuY29uZmlnfSxzZXQgY29uZmlnKFope30sdXNlKFope2Zvcih2YXIgZGU9YXJndW1lbnRzLmxlbmd0aCx2ZT1uZXcgQXJyYXkoZGU+MT9kZS0xOjApLHRlPTE7dGU8ZGU7dGUrKyl2ZVt0ZS0xXT1hcmd1bWVudHNbdGVdO3JldHVybiBrLmhhcyhaKXx8KFomJmguaXNGdW5jdGlvbihaLmluc3RhbGwpPyhrLmFkZChaKSxaLmluc3RhbGwoVSwuLi52ZSkpOmguaXNGdW5jdGlvbihaKSYmKGsuYWRkKFopLFooVSwuLi52ZSkpKSxVfSxtaXhpbihaKXtyZXR1cm4gQy5taXhpbnMuaW5jbHVkZXMoWil8fEMubWl4aW5zLnB1c2goWiksVX0sY29tcG9uZW50KFosZGUpe3JldHVybiBkZT8oQy5jb21wb25lbnRzW1pdPWRlLFUpOkMuY29tcG9uZW50c1taXX0sZGlyZWN0aXZlKFosZGUpe3JldHVybiBkZT8oQy5kaXJlY3RpdmVzW1pdPWRlLFUpOkMuZGlyZWN0aXZlc1taXX0sbW91bnQoWixkZSx2ZSl7aWYoIVYpe3ZhciB0ZT1IdChtLEEpO3JldHVybiB0ZS5hcHBDb250ZXh0PUMsdmU9PT0hMD92ZT0ic3ZnIjp2ZT09PSExJiYodmU9dm9pZCAwKSxkZSYmbD9sKHRlLFopOmkodGUsWix2ZSksVj0hMCxVLl9jb250YWluZXI9WixaLl9fdnVlX2FwcF9fPVUsVS5faW5zdGFuY2U9dGUuY29tcG9uZW50LG9hKHRlLmNvbXBvbmVudCl8fHRlLmNvbXBvbmVudC5wcm94eX19LHVubW91bnQoKXtWJiYoaShudWxsLFUuX2NvbnRhaW5lciksZGVsZXRlIFUuX2NvbnRhaW5lci5fX3Z1ZV9hcHBfXyl9LHByb3ZpZGUoWixkZSl7cmV0dXJuIEMucHJvdmlkZXNbWl09ZGUsVX0scnVuV2l0aENvbnRleHQoWil7dmFyIGRlPUw7TD1VO3RyeXtyZXR1cm4gWigpfWZpbmFsbHl7TD1kZX19fTtyZXR1cm4gVX19dmFyIEw9bnVsbDtmdW5jdGlvbiBqKGksbCl7aWYob3Ipe3ZhciBkPW9yLnByb3ZpZGVzLG09b3IucGFyZW50JiZvci5wYXJlbnQucHJvdmlkZXM7bT09PWQmJihkPW9yLnByb3ZpZGVzPU9iamVjdC5jcmVhdGUobSkpLGRbaV09bCxvci50eXBlLm1wVHlwZT09PSJhcHAiJiZvci5hcHBDb250ZXh0LmFwcC5wcm92aWRlKGksbCl9fWZ1bmN0aW9uIEgoaSxsKXt2YXIgZD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITEsbT1vcnx8Vm47aWYobXx8TCl7dmFyIEE9bT9tLnBhcmVudD09bnVsbD9tLnZub2RlLmFwcENvbnRleHQmJm0udm5vZGUuYXBwQ29udGV4dC5wcm92aWRlczptLnBhcmVudC5wcm92aWRlczpMLl9jb250ZXh0LnByb3ZpZGVzO2lmKEEmJmkgaW4gQSlyZXR1cm4gQVtpXTtpZihhcmd1bWVudHMubGVuZ3RoPjEpcmV0dXJuIGQmJmguaXNGdW5jdGlvbihsKT9sLmNhbGwobSYmbS5wcm94eSk6bH19ZnVuY3Rpb24gSigpe3JldHVybiEhKG9yfHxWbnx8TCl9ZnVuY3Rpb24gWChpLGwsZCl7dmFyIG09YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiExLEE9e30sQz17fTtoLmRlZihDLHllLDEpLGkucHJvcHNEZWZhdWx0cz1PYmplY3QuY3JlYXRlKG51bGwpLF9lKGksbCxBLEMpO2Zvcih2YXIgayBpbiBpLnByb3BzT3B0aW9uc1swXSlrIGluIEF8fChBW2tdPXZvaWQgMCk7ZD9pLnByb3BzPW0/QTpfLnNoYWxsb3dSZWFjdGl2ZShBKTppLnR5cGUucHJvcHM/aS5wcm9wcz1BOmkucHJvcHM9QyxpLmF0dHJzPUN9ZnVuY3Rpb24gdWUoaSxsLGQsbSl7dmFye3Byb3BzOkEsYXR0cnM6Qyx2bm9kZTp7cGF0Y2hGbGFnOmt9fT1pLFY9Xy50b1JhdyhBKSxbVV09aS5wcm9wc09wdGlvbnMsWj0hMTtpZigobXx8az4wKSYmIShrJjE2KSl7aWYoayY4KWZvcih2YXIgZGU9aS52bm9kZS5keW5hbWljUHJvcHMsdmU9MDt2ZTxkZS5sZW5ndGg7dmUrKyl7dmFyIHRlPWRlW3ZlXTtpZighdmkoaS5lbWl0c09wdGlvbnMsdGUpKXt2YXIgbWU9bFt0ZV07aWYoVSlpZihoLmhhc093bihDLHRlKSltZSE9PUNbdGVdJiYoQ1t0ZV09bWUsWj0hMCk7ZWxzZXt2YXIgSmU9aC5jYW1lbGl6ZSh0ZSk7QVtKZV09T2UoVSxWLEplLG1lLGksITEpfWVsc2UgbWUhPT1DW3RlXSYmKENbdGVdPW1lLFo9ITApfX19ZWxzZXtfZShpLGwsQSxDKSYmKFo9ITApO3ZhciBjdDtmb3IodmFyIGl0IGluIFYpKCFsfHwhaC5oYXNPd24obCxpdCkmJigoY3Q9aC5oeXBoZW5hdGUoaXQpKT09PWl0fHwhaC5oYXNPd24obCxjdCkpKSYmKFU/ZCYmKGRbaXRdIT09dm9pZCAwfHxkW2N0XSE9PXZvaWQgMCkmJihBW2l0XT1PZShVLFYsaXQsdm9pZCAwLGksITApKTpkZWxldGUgQVtpdF0pO2lmKEMhPT1WKWZvcih2YXIgSXQgaW4gQykoIWx8fCFoLmhhc093bihsLEl0KSYmITApJiYoZGVsZXRlIENbSXRdLFo9ITApfVomJl8udHJpZ2dlcihpLCJzZXQiLCIkYXR0cnMiKX1mdW5jdGlvbiBfZShpLGwsZCxtKXt2YXJbQSxDXT1pLnByb3BzT3B0aW9ucyxrPSExLFY7aWYobCl7Zm9yKHZhciBVIGluIGwpaWYoIWguaXNSZXNlcnZlZFByb3AoVSkpe3ZhciBaPWxbVV0sZGU9dm9pZCAwO0EmJmguaGFzT3duKEEsZGU9aC5jYW1lbGl6ZShVKSk/IUN8fCFDLmluY2x1ZGVzKGRlKT9kW2RlXT1aOihWfHwoVj17fSkpW2RlXT1aOnZpKGkuZW1pdHNPcHRpb25zLFUpfHwoIShVIGluIG0pfHxaIT09bVtVXSkmJihtW1VdPVosaz0hMCl9fWlmKEMpZm9yKHZhciB2ZT1fLnRvUmF3KGQpLHRlPVZ8fGguRU1QVFlfT0JKLG1lPTA7bWU8Qy5sZW5ndGg7bWUrKyl7dmFyIEplPUNbbWVdO2RbSmVdPU9lKEEsdmUsSmUsdGVbSmVdLGksIWguaGFzT3duKHRlLEplKSl9cmV0dXJuIGt9ZnVuY3Rpb24gT2UoaSxsLGQsbSxBLEMpe3ZhciBrPWlbZF07aWYoayE9bnVsbCl7dmFyIFY9aC5oYXNPd24oaywiZGVmYXVsdCIpO2lmKFYmJm09PT12b2lkIDApe3ZhciBVPWsuZGVmYXVsdDtpZihrLnR5cGUhPT1GdW5jdGlvbiYmIWsuc2tpcEZhY3RvcnkmJmguaXNGdW5jdGlvbihVKSl7dmFye3Byb3BzRGVmYXVsdHM6Wn09QTtpZihkIGluIFopbT1aW2RdO2Vsc2V7dmFyIGRlPVhpKEEpO209WltkXT1VLmNhbGwobnVsbCxsKSxkZSgpfX1lbHNlIG09VX1rWzBdJiYoQyYmIVY/bT0hMTprWzFdJiYobT09PSIifHxtPT09aC5oeXBoZW5hdGUoZCkpJiYobT0hMCkpfXJldHVybiBtfWZ1bmN0aW9uIERlKGksbCl7dmFyIGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiExLG09bC5wcm9wc0NhY2hlLEE9bS5nZXQoaSk7aWYoQSlyZXR1cm4gQTt2YXIgQz1pLnByb3BzLGs9e30sVj1bXSxVPSExO2lmKCFoLmlzRnVuY3Rpb24oaSkpe3ZhciBaPWNlPT57VT0hMDt2YXJbTmUsQ2VdPURlKGNlLGwsITApO2guZXh0ZW5kKGssTmUpLENlJiZWLnB1c2goLi4uQ2UpfTshZCYmbC5taXhpbnMubGVuZ3RoJiZsLm1peGlucy5mb3JFYWNoKFopLGkuZXh0ZW5kcyYmWihpLmV4dGVuZHMpLGkubWl4aW5zJiZpLm1peGlucy5mb3JFYWNoKFopfWlmKCFDJiYhVSlyZXR1cm4gaC5pc09iamVjdChpKSYmbS5zZXQoaSxoLkVNUFRZX0FSUiksaC5FTVBUWV9BUlI7aWYoaC5pc0FycmF5KEMpKWZvcih2YXIgZGU9MDtkZTxDLmxlbmd0aDtkZSsrKXt2YXIgdmU9aC5jYW1lbGl6ZShDW2RlXSk7cGUodmUpJiYoa1t2ZV09aC5FTVBUWV9PQkopfWVsc2UgaWYoQylmb3IodmFyIHRlIGluIEMpe3ZhciBtZT1oLmNhbWVsaXplKHRlKTtpZihwZShtZSkpe3ZhciBKZT1DW3RlXSxjdD1rW21lXT1oLmlzQXJyYXkoSmUpfHxoLmlzRnVuY3Rpb24oSmUpP3t0eXBlOkplfTpoLmV4dGVuZCh7fSxKZSk7aWYoY3Qpe3ZhciBpdD1PdChCb29sZWFuLGN0LnR5cGUpLEl0PU90KFN0cmluZyxjdC50eXBlKTtjdFswXT1pdD4tMSxjdFsxXT1JdDwwfHxpdDxJdCwoaXQ+LTF8fGguaGFzT3duKGN0LCJkZWZhdWx0IikpJiZWLnB1c2gobWUpfX19dmFyIEN0PVtrLFZdO3JldHVybiBoLmlzT2JqZWN0KGkpJiZtLnNldChpLEN0KSxDdH1mdW5jdGlvbiBwZShpKXtyZXR1cm4gaVswXSE9PSIkIiYmIWguaXNSZXNlcnZlZFByb3AoaSl9ZnVuY3Rpb24gTGUoaSl7aWYoaT09PW51bGwpcmV0dXJuIm51bGwiO2lmKHR5cGVvZiBpPT0iZnVuY3Rpb24iKXJldHVybiBpLm5hbWV8fCIiO2lmKHR5cGVvZiBpPT0ib2JqZWN0Iil7dmFyIGw9aS5jb25zdHJ1Y3RvciYmaS5jb25zdHJ1Y3Rvci5uYW1lO3JldHVybiBsfHwiIn1yZXR1cm4iIn1mdW5jdGlvbiBwdChpLGwpe3JldHVybiBMZShpKT09PUxlKGwpfWZ1bmN0aW9uIE90KGksbCl7cmV0dXJuIGguaXNBcnJheShsKT9sLmZpbmRJbmRleChkPT5wdChkLGkpKTpoLmlzRnVuY3Rpb24obCkmJnB0KGwsaSk/MDotMX12YXIga3Q9aT0+aVswXT09PSJfInx8aT09PSIkc3RhYmxlIix2dD1pPT5oLmlzQXJyYXkoaSk/aS5tYXAoJG4pOlskbihpKV0saHQ9KGksbCxkKT0+e2lmKGwuX24pcmV0dXJuIGw7dmFyIG09eXIoZnVuY3Rpb24oKXtyZXR1cm4gdnQobCguLi5hcmd1bWVudHMpKX0sZCk7cmV0dXJuIG0uX2M9ITEsbX0sUHQ9KGksbCxkKT0+e3ZhciBtPWkuX2N0eDtmb3IodmFyIEEgaW4gaSlpZigha3QoQSkpe3ZhciBDPWlbQV07aC5pc0Z1bmN0aW9uKEMpP2xbQV09aHQoQSxDLG0pOkMhPW51bGwmJmZ1bmN0aW9uKCl7dmFyIGs9dnQoQyk7bFtBXT0oKT0+a30oKX19LG9uPShpLGwpPT57dmFyIGQ9dnQobCk7aS5zbG90cy5kZWZhdWx0PSgpPT5kfSxGbj0oaSxsKT0+e2lmKGkudm5vZGUuc2hhcGVGbGFnJjMyKXt2YXIgZD1sLl87ZD8oaS5zbG90cz1fLnRvUmF3KGwpLGguZGVmKGwsIl8iLGQpKTpQdChsLGkuc2xvdHM9e30pfWVsc2UgaS5zbG90cz17fSxsJiZvbihpLGwpO2guZGVmKGkuc2xvdHMseWUsMSl9LHd0PShpLGwsZCk9Pnt2YXJ7dm5vZGU6bSxzbG90czpBfT1pLEM9ITAsaz1oLkVNUFRZX09CSjtpZihtLnNoYXBlRmxhZyYzMil7dmFyIFY9bC5fO1Y/ZCYmVj09PTE/Qz0hMTooaC5leHRlbmQoQSxsKSwhZCYmVj09PTEmJmRlbGV0ZSBBLl8pOihDPSFsLiRzdGFibGUsUHQobCxBKSksaz1sfWVsc2UgbCYmKG9uKGksbCksaz17ZGVmYXVsdDoxfSk7aWYoQylmb3IodmFyIFUgaW4gQSkha3QoVSkmJmtbVV09PW51bGwmJmRlbGV0ZSBBW1VdfTtmdW5jdGlvbiBlbihpLGwsZCxtKXt2YXIgQT1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06ITE7aWYoaC5pc0FycmF5KGkpKXtpLmZvckVhY2goKGN0LGl0KT0+ZW4oY3QsbCYmKGguaXNBcnJheShsKT9sW2l0XTpsKSxkLG0sQSkpO3JldHVybn1pZighKHoobSkmJiFBKSl7dmFyIEM9bS5zaGFwZUZsYWcmND9vYShtLmNvbXBvbmVudCl8fG0uY29tcG9uZW50LnByb3h5Om0uZWwsaz1BP251bGw6Qyx7aTpWLHI6VX09aSxaPWwmJmwucixkZT1WLnJlZnM9PT1oLkVNUFRZX09CSj9WLnJlZnM9e306Vi5yZWZzLHZlPVYuc2V0dXBTdGF0ZTtpZihaIT1udWxsJiZaIT09VSYmKGguaXNTdHJpbmcoWik/KGRlW1pdPW51bGwsaC5oYXNPd24odmUsWikmJih2ZVtaXT1udWxsKSk6Xy5pc1JlZihaKSYmKFoudmFsdWU9bnVsbCkpLGguaXNGdW5jdGlvbihVKSlKdChVLFYsMTIsW2ssZGVdKTtlbHNle3ZhciB0ZT1oLmlzU3RyaW5nKFUpLG1lPV8uaXNSZWYoVSk7aWYodGV8fG1lKXt2YXIgSmU9KCk9PntpZihpLmYpe3ZhciBjdD10ZT9oLmhhc093bih2ZSxVKT92ZVtVXTpkZVtVXTpVLnZhbHVlO0E/aC5pc0FycmF5KGN0KSYmaC5yZW1vdmUoY3QsQyk6aC5pc0FycmF5KGN0KT9jdC5pbmNsdWRlcyhDKXx8Y3QucHVzaChDKTp0ZT8oZGVbVV09W0NdLGguaGFzT3duKHZlLFUpJiYodmVbVV09ZGVbVV0pKTooVS52YWx1ZT1bQ10saS5rJiYoZGVbaS5rXT1VLnZhbHVlKSl9ZWxzZSB0ZT8oZGVbVV09ayxoLmhhc093bih2ZSxVKSYmKHZlW1VdPWspKTptZSYmKFUudmFsdWU9ayxpLmsmJihkZVtpLmtdPWspKX07az8oSmUuaWQ9LTEsZnIoSmUsZCkpOkplKCl9fX19dmFyIHZuPSExLHVyPWk9PmkubmFtZXNwYWNlVVJJLmluY2x1ZGVzKCJzdmciKSYmaS50YWdOYW1lIT09ImZvcmVpZ25PYmplY3QiLHJuPWk9PmkubmFtZXNwYWNlVVJJLmluY2x1ZGVzKCJNYXRoTUwiKSxCbj1pPT57aWYodXIoaSkpcmV0dXJuInN2ZyI7aWYocm4oaSkpcmV0dXJuIm1hdGhtbCJ9LG5yPWk9Pmkubm9kZVR5cGU9PT04O2Z1bmN0aW9uIF9hKGkpe3ZhcnttdDpsLHA6ZCxvOntwYXRjaFByb3A6bSxjcmVhdGVUZXh0OkEsbmV4dFNpYmxpbmc6QyxwYXJlbnROb2RlOmsscmVtb3ZlOlYsaW5zZXJ0OlUsY3JlYXRlQ29tbWVudDpafX09aSxkZT0oY2UsTmUpPT57aWYoIU5lLmhhc0NoaWxkTm9kZXMoKSl7ZChudWxsLGNlLE5lKSxjcigpLE5lLl92bm9kZT1jZTtyZXR1cm59dm49ITEsdmUoTmUuZmlyc3RDaGlsZCxjZSxudWxsLG51bGwsbnVsbCksY3IoKSxOZS5fdm5vZGU9Y2Usdm4mJmNvbnNvbGUuZXJyb3IoIkh5ZHJhdGlvbiBjb21wbGV0ZWQgYnV0IGNvbnRhaW5zIG1pc21hdGNoZXMuIil9LHZlPWZ1bmN0aW9uKGNlLE5lLENlLFZlLGJ0KXt2YXIgb3Q9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOiExLEI9bnIoY2UpJiZjZS5kYXRhPT09IlsiLCQ9KCk9PmN0KGNlLE5lLENlLFZlLGJ0LEIpLHt0eXBlOnJlLHJlZjpnZSxzaGFwZUZsYWc6c2UscGF0Y2hGbGFnOmtlfT1OZSxHZT1jZS5ub2RlVHlwZTtOZS5lbD1jZSxrZT09PS0yJiYob3Q9ITEsTmUuZHluYW1pY0NoaWxkcmVuPW51bGwpO3ZhciBFZT1udWxsO3N3aXRjaChyZSl7Y2FzZSBkcjpHZSE9PTM/TmUuY2hpbGRyZW49PT0iIj8oVShOZS5lbD1BKCIiLGNlLnBhcmVudE5vZGUpLGsoY2UpLGNlKSxFZT1jZSk6RWU9JCgpOihjZS5kYXRhIT09TmUuY2hpbGRyZW4mJih2bj0hMCxjZS5kYXRhPU5lLmNoaWxkcmVuKSxFZT1DKGNlKSk7YnJlYWs7Y2FzZSBocjpDdChjZSk/KEVlPUMoY2UpLEl0KE5lLmVsPWNlLmNvbnRlbnQuZmlyc3RDaGlsZCxjZSxDZSkpOkdlIT09OHx8Qj9FZT0kKCk6RWU9QyhjZSk7YnJlYWs7Y2FzZSBSbzppZihCJiYoY2U9QyhjZSksR2U9Y2Uubm9kZVR5cGUpLEdlPT09MXx8R2U9PT0zKXtFZT1jZTtmb3IodmFyIFllPSFOZS5jaGlsZHJlbi5sZW5ndGgsRmU9MDtGZTxOZS5zdGF0aWNDb3VudDtGZSsrKVllJiYoTmUuY2hpbGRyZW4rPUVlLm5vZGVUeXBlPT09MT9FZS5vdXRlckhUTUw6RWUuZGF0YSksRmU9PT1OZS5zdGF0aWNDb3VudC0xJiYoTmUuYW5jaG9yPUVlKSxFZT1DKEVlKTtyZXR1cm4gQj9DKEVlKTpFZX1lbHNlICQoKTticmVhaztjYXNlIGlyOkI/RWU9SmUoY2UsTmUsQ2UsVmUsYnQsb3QpOkVlPSQoKTticmVhaztkZWZhdWx0OmlmKHNlJjEpKEdlIT09MXx8TmUudHlwZS50b0xvd2VyQ2FzZSgpIT09Y2UudGFnTmFtZS50b0xvd2VyQ2FzZSgpKSYmIUN0KGNlKT9FZT0kKCk6RWU9dGUoY2UsTmUsQ2UsVmUsYnQsb3QpO2Vsc2UgaWYoc2UmNil7TmUuc2xvdFNjb3BlSWRzPWJ0O3ZhciBfdD1rKGNlKTtpZihCP0VlPWl0KGNlKTpucihjZSkmJmNlLmRhdGE9PT0idGVsZXBvcnQgc3RhcnQiP0VlPWl0KGNlLGNlLmRhdGEsInRlbGVwb3J0IGVuZCIpOkVlPUMoY2UpLGwoTmUsX3QsbnVsbCxDZSxWZSxCbihfdCksb3QpLHooTmUpKXt2YXIgUnQ7Qj8oUnQ9SHQoaXIpLFJ0LmFuY2hvcj1FZT9FZS5wcmV2aW91c1NpYmxpbmc6X3QubGFzdENoaWxkKTpSdD1jZS5ub2RlVHlwZT09PTM/TGkoIiIpOkh0KCJkaXYiKSxSdC5lbD1jZSxOZS5jb21wb25lbnQuc3ViVHJlZT1SdH19ZWxzZSBzZSY2ND9HZSE9PTg/RWU9JCgpOkVlPU5lLnR5cGUuaHlkcmF0ZShjZSxOZSxDZSxWZSxidCxvdCxpLG1lKTpzZSYxMjgmJihFZT1OZS50eXBlLmh5ZHJhdGUoY2UsTmUsQ2UsVmUsQm4oayhjZSkpLGJ0LG90LGksdmUpKX1yZXR1cm4gZ2UhPW51bGwmJmVuKGdlLG51bGwsVmUsTmUpLEVlfSx0ZT0oY2UsTmUsQ2UsVmUsYnQsb3QpPT57b3Q9b3R8fCEhTmUuZHluYW1pY0NoaWxkcmVuO3Zhcnt0eXBlOkIscHJvcHM6JCxwYXRjaEZsYWc6cmUsc2hhcGVGbGFnOmdlLGRpcnM6c2UsdHJhbnNpdGlvbjprZX09TmUsR2U9Qj09PSJpbnB1dCJ8fEI9PT0ib3B0aW9uIjtpZihHZXx8cmUhPT0tMSl7c2UmJmRuKE5lLG51bGwsQ2UsImNyZWF0ZWQiKTt2YXIgRWU9ITE7aWYoQ3QoY2UpKXtFZT1EYShWZSxrZSkmJkNlJiZDZS52bm9kZS5wcm9wcyYmQ2Uudm5vZGUucHJvcHMuYXBwZWFyO3ZhciBZZT1jZS5jb250ZW50LmZpcnN0Q2hpbGQ7RWUmJmtlLmJlZm9yZUVudGVyKFllKSxJdChZZSxjZSxDZSksTmUuZWw9Y2U9WWV9aWYoZ2UmMTYmJiEoJCYmKCQuaW5uZXJIVE1MfHwkLnRleHRDb250ZW50KSkpZm9yKHZhciBGZT1tZShjZS5maXJzdENoaWxkLE5lLGNlLENlLFZlLGJ0LG90KTtGZTspe3ZuPSEwO3ZhciBfdD1GZTtGZT1GZS5uZXh0U2libGluZyxWKF90KX1lbHNlIGdlJjgmJmNlLnRleHRDb250ZW50IT09TmUuY2hpbGRyZW4mJih2bj0hMCxjZS50ZXh0Q29udGVudD1OZS5jaGlsZHJlbik7aWYoJClpZihHZXx8IW90fHxyZSYoMTZ8MzIpKWZvcih2YXIgUnQgaW4gJCkoR2UmJihSdC5lbmRzV2l0aCgidmFsdWUiKXx8UnQ9PT0iaW5kZXRlcm1pbmF0ZSIpfHxoLmlzT24oUnQpJiYhaC5pc1Jlc2VydmVkUHJvcChSdCl8fFJ0WzBdPT09Ii4iKSYmbShjZSxSdCxudWxsLCRbUnRdLHZvaWQgMCx2b2lkIDAsQ2UpO2Vsc2UgJC5vbkNsaWNrJiZtKGNlLCJvbkNsaWNrIixudWxsLCQub25DbGljayx2b2lkIDAsdm9pZCAwLENlKTt2YXIgTHQ7KEx0PSQmJiQub25Wbm9kZUJlZm9yZU1vdW50KSYmRW4oTHQsQ2UsTmUpLHNlJiZkbihOZSxudWxsLENlLCJiZWZvcmVNb3VudCIpLCgoTHQ9JCYmJC5vblZub2RlTW91bnRlZCl8fHNlfHxFZSkmJlZvKCgpPT57THQmJkVuKEx0LENlLE5lKSxFZSYma2UuZW50ZXIoY2UpLHNlJiZkbihOZSxudWxsLENlLCJtb3VudGVkIil9LFZlKX1yZXR1cm4gY2UubmV4dFNpYmxpbmd9LG1lPShjZSxOZSxDZSxWZSxidCxvdCxCKT0+e0I9Qnx8ISFOZS5keW5hbWljQ2hpbGRyZW47Zm9yKHZhciAkPU5lLmNoaWxkcmVuLHJlPSQubGVuZ3RoLGdlPTA7Z2U8cmU7Z2UrKyl7dmFyIHNlPUI/JFtnZV06JFtnZV09JG4oJFtnZV0pO2lmKGNlKWNlPXZlKGNlLHNlLFZlLGJ0LG90LEIpO2Vsc2V7aWYoc2UudHlwZT09PWRyJiYhc2UuY2hpbGRyZW4pY29udGludWU7dm49ITAsZChudWxsLHNlLENlLG51bGwsVmUsYnQsQm4oQ2UpLG90KX19cmV0dXJuIGNlfSxKZT0oY2UsTmUsQ2UsVmUsYnQsb3QpPT57dmFye3Nsb3RTY29wZUlkczpCfT1OZTtCJiYoYnQ9YnQ/YnQuY29uY2F0KEIpOkIpO3ZhciAkPWsoY2UpLHJlPW1lKEMoY2UpLE5lLCQsQ2UsVmUsYnQsb3QpO3JldHVybiByZSYmbnIocmUpJiZyZS5kYXRhPT09Il0iP0MoTmUuYW5jaG9yPXJlKToodm49ITAsVShOZS5hbmNob3I9WigiXSIsJCksJCxyZSkscmUpfSxjdD0oY2UsTmUsQ2UsVmUsYnQsb3QpPT57aWYodm49ITAsTmUuZWw9bnVsbCxvdClmb3IodmFyIEI9aXQoY2UpOzspe3ZhciAkPUMoY2UpO2lmKCQmJiQhPT1CKVYoJCk7ZWxzZSBicmVha312YXIgcmU9QyhjZSksZ2U9ayhjZSk7cmV0dXJuIFYoY2UpLGQobnVsbCxOZSxnZSxyZSxDZSxWZSxCbihnZSksYnQpLHJlfSxpdD1mdW5jdGlvbihjZSl7Zm9yKHZhciBOZT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06IlsiLENlPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXToiXSIsVmU9MDtjZTspaWYoY2U9QyhjZSksY2UmJm5yKGNlKSYmKGNlLmRhdGE9PT1OZSYmVmUrKyxjZS5kYXRhPT09Q2UpKXtpZihWZT09PTApcmV0dXJuIEMoY2UpO1ZlLS19cmV0dXJuIGNlfSxJdD0oY2UsTmUsQ2UpPT57dmFyIFZlPU5lLnBhcmVudE5vZGU7VmUmJlZlLnJlcGxhY2VDaGlsZChjZSxOZSk7Zm9yKHZhciBidD1DZTtidDspYnQudm5vZGUuZWw9PT1OZSYmKGJ0LnZub2RlLmVsPWJ0LnN1YlRyZWUuZWw9Y2UpLGJ0PWJ0LnBhcmVudH0sQ3Q9Y2U9PmNlLm5vZGVUeXBlPT09MSYmY2UudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT09InRlbXBsYXRlIjtyZXR1cm5bZGUsdmVdfXZhciBmcj1WbztmdW5jdGlvbiBObyhpKXtyZXR1cm4gdGEoaSl9ZnVuY3Rpb24gbW4oaSl7cmV0dXJuIHRhKGksX2EpfWZ1bmN0aW9uIHRhKGksbCl7dmFyIGQ9aC5nZXRHbG9iYWxUaGlzKCk7ZC5fX1ZVRV9fPSEwO3ZhcntpbnNlcnQ6bSxyZW1vdmU6QSxwYXRjaFByb3A6Qyxmb3JjZVBhdGNoUHJvcDprLGNyZWF0ZUVsZW1lbnQ6VixjcmVhdGVUZXh0OlUsY3JlYXRlQ29tbWVudDpaLHNldFRleHQ6ZGUsc2V0RWxlbWVudFRleHQ6dmUscGFyZW50Tm9kZTp0ZSxuZXh0U2libGluZzptZSxzZXRTY29wZUlkOkplPWguTk9PUCxpbnNlcnRTdGF0aWNDb250ZW50OmN0fT1pLGl0PWZ1bmN0aW9uKHEsUSxBZSl7dmFyIEllPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTpudWxsLFVlPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTpudWxsLHR0PWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTpudWxsLFN0PWFyZ3VtZW50cy5sZW5ndGg+NiYmYXJndW1lbnRzWzZdIT09dm9pZCAwP2FyZ3VtZW50c1s2XTp2b2lkIDAsWGU9YXJndW1lbnRzLmxlbmd0aD43JiZhcmd1bWVudHNbN10hPT12b2lkIDA/YXJndW1lbnRzWzddOm51bGwsUWU9YXJndW1lbnRzLmxlbmd0aD44JiZhcmd1bWVudHNbOF0hPT12b2lkIDA/YXJndW1lbnRzWzhdOiEhUS5keW5hbWljQ2hpbGRyZW47aWYocSE9PVEpe3EmJiFWcihxLFEpJiYoSWU9c2EocSksTm4ocSxVZSx0dCwhMCkscT1udWxsKSxRLnBhdGNoRmxhZz09PS0yJiYoUWU9ITEsUS5keW5hbWljQ2hpbGRyZW49bnVsbCk7dmFye3R5cGU6S2UscmVmOlV0LHNoYXBlRmxhZzp0bn09UTtzd2l0Y2goS2Upe2Nhc2UgZHI6SXQocSxRLEFlLEllKTticmVhaztjYXNlIGhyOkN0KHEsUSxBZSxJZSk7YnJlYWs7Y2FzZSBSbzpxPT1udWxsJiZjZShRLEFlLEllLFN0KTticmVhaztjYXNlIGlyOnNlKHEsUSxBZSxJZSxVZSx0dCxTdCxYZSxRZSk7YnJlYWs7ZGVmYXVsdDp0biYxP1ZlKHEsUSxBZSxJZSxVZSx0dCxTdCxYZSxRZSk6dG4mNj9rZShxLFEsQWUsSWUsVWUsdHQsU3QsWGUsUWUpOih0biY2NHx8dG4mMTI4KSYmS2UucHJvY2VzcyhxLFEsQWUsSWUsVWUsdHQsU3QsWGUsUWUsd2kpfVV0IT1udWxsJiZVZSYmZW4oVXQscSYmcS5yZWYsdHQsUXx8cSwhUSl9fSxJdD0ocSxRLEFlLEllKT0+e2lmKHE9PW51bGwpbShRLmVsPVUoUS5jaGlsZHJlbixBZSksQWUsSWUpO2Vsc2V7dmFyIFVlPVEuZWw9cS5lbDtRLmNoaWxkcmVuIT09cS5jaGlsZHJlbiYmZGUoVWUsUS5jaGlsZHJlbil9fSxDdD0ocSxRLEFlLEllKT0+e3E9PW51bGw/bShRLmVsPVooUS5jaGlsZHJlbnx8IiIsQWUpLEFlLEllKTpRLmVsPXEuZWx9LGNlPShxLFEsQWUsSWUpPT57W3EuZWwscS5hbmNob3JdPWN0KHEuY2hpbGRyZW4sUSxBZSxJZSxxLmVsLHEuYW5jaG9yKX0sTmU9KHEsUSxBZSk9Pntmb3IodmFye2VsOkllLGFuY2hvcjpVZX09cSx0dDtJZSYmSWUhPT1VZTspdHQ9bWUoSWUpLG0oSWUsUSxBZSksSWU9dHQ7bShVZSxRLEFlKX0sQ2U9cT0+e2Zvcih2YXJ7ZWw6USxhbmNob3I6QWV9PXEsSWU7USYmUSE9PUFlOylJZT1tZShRKSxBKFEpLFE9SWU7QShBZSl9LFZlPShxLFEsQWUsSWUsVWUsdHQsU3QsWGUsUWUpPT57US50eXBlPT09InN2ZyI/U3Q9InN2ZyI6US50eXBlPT09Im1hdGgiJiYoU3Q9Im1hdGhtbCIpLHE9PW51bGw/YnQoUSxBZSxJZSxVZSx0dCxTdCxYZSxRZSk6JChxLFEsVWUsdHQsU3QsWGUsUWUpfSxidD0ocSxRLEFlLEllLFVlLHR0LFN0LFhlKT0+e3ZhciBRZSxLZSx7cHJvcHM6VXQsc2hhcGVGbGFnOnRuLHRyYW5zaXRpb246cXQsZGlyczpfbn09cTtpZihRZT1xLmVsPVYocS50eXBlLFEpLHRuJjg/dmUoUWUscS5jaGlsZHJlbik6dG4mMTYmJkIocS5jaGlsZHJlbixRZSxudWxsLEllLFVlLG5hKHEsdHQpLFN0LFhlKSxfbiYmZG4ocSxudWxsLEllLCJjcmVhdGVkIiksb3QoUWUscSxxLnNjb3BlSWQsU3QsSWUpLFV0KXtmb3IodmFyIFlyIGluIFV0KVlyIT09InZhbHVlIiYmIWguaXNSZXNlcnZlZFByb3AoWXIpJiZDKFFlLFlyLG51bGwsVXRbWXJdLHR0LHEuY2hpbGRyZW4sSWUsVWUsJHIpOyJ2YWx1ZSJpbiBVdCYmQyhRZSwidmFsdWUiLG51bGwsVXQudmFsdWUsdHQpLChLZT1VdC5vblZub2RlQmVmb3JlTW91bnQpJiZFbihLZSxJZSxxKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoUWUsIl9fdnVlUGFyZW50Q29tcG9uZW50Iix7dmFsdWU6SWUsZW51bWVyYWJsZTohMX0pLF9uJiZkbihxLG51bGwsSWUsImJlZm9yZU1vdW50Iik7dmFyIGFyPURhKFVlLHF0KTthciYmcXQuYmVmb3JlRW50ZXIoUWUpLG0oUWUsUSxBZSksKChLZT1VdCYmVXQub25Wbm9kZU1vdW50ZWQpfHxhcnx8X24pJiZmcigoKT0+e0tlJiZFbihLZSxJZSxxKSxhciYmcXQuZW50ZXIoUWUpLF9uJiZkbihxLG51bGwsSWUsIm1vdW50ZWQiKX0sVWUpfSxvdD0ocSxRLEFlLEllLFVlKT0+e2lmKEFlJiZKZShxLEFlKSxJZSlmb3IodmFyIHR0PTA7dHQ8SWUubGVuZ3RoO3R0KyspSmUocSxJZVt0dF0pO2lmKFVlKXt2YXIgU3Q9VWUuc3ViVHJlZTtpZihRPT09U3Qpe3ZhciBYZT1VZS52bm9kZTtvdChxLFhlLFhlLnNjb3BlSWQsWGUuc2xvdFNjb3BlSWRzLFVlLnBhcmVudCl9fX0sQj1mdW5jdGlvbihxLFEsQWUsSWUsVWUsdHQsU3QsWGUpe2Zvcih2YXIgUWU9YXJndW1lbnRzLmxlbmd0aD44JiZhcmd1bWVudHNbOF0hPT12b2lkIDA/YXJndW1lbnRzWzhdOjAsS2U9UWU7S2U8cS5sZW5ndGg7S2UrKyl7dmFyIFV0PXFbS2VdPVhlP3lhKHFbS2VdKTokbihxW0tlXSk7aXQobnVsbCxVdCxRLEFlLEllLFVlLHR0LFN0LFhlKX19LCQ9KHEsUSxBZSxJZSxVZSx0dCxTdCk9Pnt2YXIgWGU9US5lbD1xLmVsLHtwYXRjaEZsYWc6UWUsZHluYW1pY0NoaWxkcmVuOktlLGRpcnM6VXR9PVE7UWV8PXEucGF0Y2hGbGFnJjE2O3ZhciB0bj1xLnByb3BzfHxoLkVNUFRZX09CSixxdD1RLnByb3BzfHxoLkVNUFRZX09CSixfbjtpZihBZSYmWmkoQWUsITEpLChfbj1xdC5vblZub2RlQmVmb3JlVXBkYXRlKSYmRW4oX24sQWUsUSxxKSxVdCYmZG4oUSxxLEFlLCJiZWZvcmVVcGRhdGUiKSxBZSYmWmkoQWUsITApLEtlP3JlKHEuZHluYW1pY0NoaWxkcmVuLEtlLFhlLEFlLEllLG5hKFEsVWUpLHR0KTpTdHx8X3QocSxRLFhlLG51bGwsQWUsSWUsbmEoUSxVZSksdHQsITEpLFFlPjApe2lmKFFlJjE2KWdlKFhlLFEsdG4scXQsQWUsSWUsVWUpO2Vsc2UgaWYoUWUmMiYmdG4uY2xhc3MhPT1xdC5jbGFzcyYmQyhYZSwiY2xhc3MiLG51bGwscXQuY2xhc3MsVWUpLFFlJjQmJkMoWGUsInN0eWxlIix0bi5zdHlsZSxxdC5zdHlsZSxVZSksUWUmOClmb3IodmFyIFlyPVEuZHluYW1pY1Byb3BzLGFyPTA7YXI8WXIubGVuZ3RoO2FyKyspe3ZhciBWaT1Zclthcl0sQWE9dG5bVmldLG9zPXF0W1ZpXTsob3MhPT1BYXx8Vmk9PT0idmFsdWUifHxrJiZrKFhlLFZpKSkmJkMoWGUsVmksQWEsb3MsVWUscS5jaGlsZHJlbixBZSxJZSwkcil9UWUmMSYmcS5jaGlsZHJlbiE9PVEuY2hpbGRyZW4mJnZlKFhlLFEuY2hpbGRyZW4pfWVsc2UhU3QmJktlPT1udWxsJiZnZShYZSxRLHRuLHF0LEFlLEllLFVlKTsoKF9uPXF0Lm9uVm5vZGVVcGRhdGVkKXx8VXQpJiZmcigoKT0+e19uJiZFbihfbixBZSxRLHEpLFV0JiZkbihRLHEsQWUsInVwZGF0ZWQiKX0sSWUpfSxyZT0ocSxRLEFlLEllLFVlLHR0LFN0KT0+e2Zvcih2YXIgWGU9MDtYZTxRLmxlbmd0aDtYZSsrKXt2YXIgUWU9cVtYZV0sS2U9UVtYZV0sVXQ9UWUuZWwmJihRZS50eXBlPT09aXJ8fCFWcihRZSxLZSl8fFFlLnNoYXBlRmxhZyYoNnw2NCkpP3RlKFFlLmVsKTpBZTtpdChRZSxLZSxVdCxudWxsLEllLFVlLHR0LFN0LCEwKX19LGdlPShxLFEsQWUsSWUsVWUsdHQsU3QpPT57aWYoQWUhPT1JZSl7aWYoQWUhPT1oLkVNUFRZX09CSilmb3IodmFyIFhlIGluIEFlKSFoLmlzUmVzZXJ2ZWRQcm9wKFhlKSYmIShYZSBpbiBJZSkmJkMocSxYZSxBZVtYZV0sbnVsbCxTdCxRLmNoaWxkcmVuLFVlLHR0LCRyKTtmb3IodmFyIFFlIGluIEllKWlmKCFoLmlzUmVzZXJ2ZWRQcm9wKFFlKSl7dmFyIEtlPUllW1FlXSxVdD1BZVtRZV07KEtlIT09VXQmJlFlIT09InZhbHVlInx8ayYmayhxLFFlKSkmJkMocSxRZSxVdCxLZSxTdCxRLmNoaWxkcmVuLFVlLHR0LCRyKX0idmFsdWUiaW4gSWUmJkMocSwidmFsdWUiLEFlLnZhbHVlLEllLnZhbHVlLFN0KX19LHNlPShxLFEsQWUsSWUsVWUsdHQsU3QsWGUsUWUpPT57dmFyIEtlPVEuZWw9cT9xLmVsOlUoIiIsQWUpLFV0PVEuYW5jaG9yPXE/cS5hbmNob3I6VSgiIixBZSkse3BhdGNoRmxhZzp0bixkeW5hbWljQ2hpbGRyZW46cXQsc2xvdFNjb3BlSWRzOl9ufT1RO19uJiYoWGU9WGU/WGUuY29uY2F0KF9uKTpfbikscT09bnVsbD8obShLZSxBZSxJZSksbShVdCxBZSxJZSksQihRLmNoaWxkcmVufHxbXSxBZSxVdCxVZSx0dCxTdCxYZSxRZSkpOnRuPjAmJnRuJjY0JiZxdCYmcS5keW5hbWljQ2hpbGRyZW4/KHJlKHEuZHluYW1pY0NoaWxkcmVuLHF0LEFlLFVlLHR0LFN0LFhlKSwoUS5rZXkhPW51bGx8fFVlJiZRPT09VWUuc3ViVHJlZSkmJnJyKHEsUSwhMCkpOl90KHEsUSxBZSxVdCxVZSx0dCxTdCxYZSxRZSl9LGtlPShxLFEsQWUsSWUsVWUsdHQsU3QsWGUsUWUpPT57US5zbG90U2NvcGVJZHM9WGUscT09bnVsbD9RLnNoYXBlRmxhZyY1MTI/VWUuY3R4LmFjdGl2YXRlKFEsQWUsSWUsU3QsUWUpOkdlKFEsQWUsSWUsVWUsdHQsU3QsUWUpOkVlKHEsUSxRZSl9LEdlPShxLFEsQWUsSWUsVWUsdHQsU3QpPT57dmFyIFhlPXEuY29tcG9uZW50PUZzKHEsSWUsVWUpO2lmKGplKHEpJiYoWGUuY3R4LnJlbmRlcmVyPXdpKSxYYShYZSksWGUuYXN5bmNEZXApe2lmKFVlJiZVZS5yZWdpc3RlckRlcChYZSxZZSksIXEuZWwpe3ZhciBRZT1YZS5zdWJUcmVlPUh0KGhyKTtDdChudWxsLFFlLFEsQWUpfX1lbHNlIFllKFhlLHEsUSxBZSxVZSx0dCxTdCk7aWYoWGUuJHd4c01vZHVsZXMpe3ZhciBLZT1JLnJlc29sdmVPd25lckVsKFhlLCEwKTtLZS5sZW5ndGgmJktlLmZvckVhY2goVXQ9PntVdC5zZXRBdHRyaWJ1dGUoSS5BVFRSX1ZfT1dORVJfSUQsWGUudWlkKTt2YXJ7JHJlbmRlcmpzTW9kdWxlczp0bn09WGUudHlwZTt0biYmVXQuc2V0QXR0cmlidXRlKEkuQVRUUl9WX1JFTkRFUkpTLHRuKX0pfX0sRWU9KHEsUSxBZSk9Pnt2YXIgSWU9US5jb21wb25lbnQ9cS5jb21wb25lbnQ7aWYoT2kocSxRLEFlKSlpZihJZS5hc3luY0RlcCYmIUllLmFzeW5jUmVzb2x2ZWQpe0ZlKEllLFEsQWUpO3JldHVybn1lbHNlIEllLm5leHQ9USxhbihJZS51cGRhdGUpLEllLmVmZmVjdC5kaXJ0eT0hMCxJZS51cGRhdGUoKTtlbHNlIFEuZWw9cS5lbCxJZS52bm9kZT1RfSxZZT0ocSxRLEFlLEllLFVlLHR0LFN0KT0+e3ZhciBYZT0oKT0+e2lmKHEuaXNNb3VudGVkKXt2YXJ7bmV4dDprcixidTpfbCx1OmJsLHBhcmVudDpMbyx2bm9kZTpLcn09cTt7dmFyICRhPVduKHEpO2lmKCRhKXtrciYmKGtyLmVsPUtyLmVsLEZlKHEsa3IsU3QpKSwkYS5hc3luY0RlcC50aGVuKCgpPT57cS5pc1VubW91bnRlZHx8WGUoKX0pO3JldHVybn19dmFyIHZvPWtyLFRzO1ppKHEsITEpLGtyPyhrci5lbD1Lci5lbCxGZShxLGtyLFN0KSk6a3I9S3IsX2wmJmguaW52b2tlQXJyYXlGbnMoX2wpLChUcz1rci5wcm9wcyYma3IucHJvcHMub25Wbm9kZUJlZm9yZVVwZGF0ZSkmJkVuKFRzLExvLGtyLEtyKSxaaShxLCEwKTt2YXIgbW89Z3IocSksVGE9cS5zdWJUcmVlO3Euc3ViVHJlZT1tbyxpdChUYSxtbyx0ZShUYS5lbCksc2EoVGEpLHEsVWUsdHQpLGtyLmVsPW1vLmVsLHZvPT09bnVsbCYmU28ocSxtby5lbCksYmwmJmZyKGJsLFVlKSwoVHM9a3IucHJvcHMmJmtyLnByb3BzLm9uVm5vZGVVcGRhdGVkKSYmZnIoKCk9PkVuKFRzLExvLGtyLEtyKSxVZSl9ZWxzZXt2YXIgVXQse2VsOnRuLHByb3BzOnF0fT1RLHtibTpfbixtOllyLHBhcmVudDphcn09cSxWaT16KFEpO2lmKFppKHEsITEpLF9uJiZoLmludm9rZUFycmF5Rm5zKF9uKSwhVmkmJihVdD1xdCYmcXQub25Wbm9kZUJlZm9yZU1vdW50KSYmRW4oVXQsYXIsUSksWmkocSwhMCksdG4mJkJvKXt2YXIgQWE9KCk9PntxLnN1YlRyZWU9Z3IocSksQm8odG4scS5zdWJUcmVlLHEsVWUsbnVsbCl9O1ZpP1EudHlwZS5fX2FzeW5jTG9hZGVyKCkudGhlbigoKT0+IXEuaXNVbm1vdW50ZWQmJkFhKCkpOkFhKCl9ZWxzZXt2YXIgb3M9cS5zdWJUcmVlPWdyKHEpO2l0KG51bGwsb3MsQWUsSWUscSxVZSx0dCksUS5lbD1vcy5lbH1pZihZciYmZnIoWXIsVWUpLCFWaSYmKFV0PXF0JiZxdC5vblZub2RlTW91bnRlZCkpe3ZhciBSYz1RO2ZyKCgpPT5FbihVdCxhcixSYyksVWUpfShRLnNoYXBlRmxhZyYyNTZ8fGFyJiZ6KGFyLnZub2RlKSYmYXIudm5vZGUuc2hhcGVGbGFnJjI1NikmJnEuYSYmZnIocS5hLFVlKSxxLmlzTW91bnRlZD0hMCxRPUFlPUllPW51bGx9fSxRZT1xLmVmZmVjdD1uZXcgXy5SZWFjdGl2ZUVmZmVjdChYZSxoLk5PT1AsKCk9Pk50KEtlKSxxLnNjb3BlKSxLZT1xLnVwZGF0ZT0oKT0+e1FlLmRpcnR5JiZRZS5ydW4oKX07S2UuaWQ9cS51aWQsWmkocSwhMCksS2UoKX0sRmU9KHEsUSxBZSk9PntRLmNvbXBvbmVudD1xO3ZhciBJZT1xLnZub2RlLnByb3BzO3Eudm5vZGU9USxxLm5leHQ9bnVsbCx1ZShxLFEucHJvcHMsSWUsQWUpLHd0KHEsUS5jaGlsZHJlbixBZSksXy5wYXVzZVRyYWNraW5nKCksa24ocSksXy5yZXNldFRyYWNraW5nKCl9LF90PWZ1bmN0aW9uKHEsUSxBZSxJZSxVZSx0dCxTdCxYZSl7dmFyIFFlPWFyZ3VtZW50cy5sZW5ndGg+OCYmYXJndW1lbnRzWzhdIT09dm9pZCAwP2FyZ3VtZW50c1s4XTohMSxLZT1xJiZxLmNoaWxkcmVuLFV0PXE/cS5zaGFwZUZsYWc6MCx0bj1RLmNoaWxkcmVuLHtwYXRjaEZsYWc6cXQsc2hhcGVGbGFnOl9ufT1RO2lmKHF0PjApe2lmKHF0JjEyOCl7THQoS2UsdG4sQWUsSWUsVWUsdHQsU3QsWGUsUWUpO3JldHVybn1lbHNlIGlmKHF0JjI1Nil7UnQoS2UsdG4sQWUsSWUsVWUsdHQsU3QsWGUsUWUpO3JldHVybn19X24mOD8oVXQmMTYmJiRyKEtlLFVlLHR0KSx0biE9PUtlJiZ2ZShBZSx0bikpOlV0JjE2P19uJjE2P0x0KEtlLHRuLEFlLEllLFVlLHR0LFN0LFhlLFFlKTokcihLZSxVZSx0dCwhMCk6KFV0JjgmJnZlKEFlLCIiKSxfbiYxNiYmQih0bixBZSxJZSxVZSx0dCxTdCxYZSxRZSkpfSxSdD0ocSxRLEFlLEllLFVlLHR0LFN0LFhlLFFlKT0+e3E9cXx8aC5FTVBUWV9BUlIsUT1RfHxoLkVNUFRZX0FSUjt2YXIgS2U9cS5sZW5ndGgsVXQ9US5sZW5ndGgsdG49TWF0aC5taW4oS2UsVXQpLHF0O2ZvcihxdD0wO3F0PHRuO3F0Kyspe3ZhciBfbj1RW3F0XT1RZT95YShRW3F0XSk6JG4oUVtxdF0pO2l0KHFbcXRdLF9uLEFlLG51bGwsVWUsdHQsU3QsWGUsUWUpfUtlPlV0PyRyKHEsVWUsdHQsITAsITEsdG4pOkIoUSxBZSxJZSxVZSx0dCxTdCxYZSxRZSx0bil9LEx0PShxLFEsQWUsSWUsVWUsdHQsU3QsWGUsUWUpPT57Zm9yKHZhciBLZT0wLFV0PVEubGVuZ3RoLHRuPXEubGVuZ3RoLTEscXQ9VXQtMTtLZTw9dG4mJktlPD1xdDspe3ZhciBfbj1xW0tlXSxZcj1RW0tlXT1RZT95YShRW0tlXSk6JG4oUVtLZV0pO2lmKFZyKF9uLFlyKSlpdChfbixZcixBZSxudWxsLFVlLHR0LFN0LFhlLFFlKTtlbHNlIGJyZWFrO0tlKyt9Zm9yKDtLZTw9dG4mJktlPD1xdDspe3ZhciBhcj1xW3RuXSxWaT1RW3F0XT1RZT95YShRW3F0XSk6JG4oUVtxdF0pO2lmKFZyKGFyLFZpKSlpdChhcixWaSxBZSxudWxsLFVlLHR0LFN0LFhlLFFlKTtlbHNlIGJyZWFrO3RuLS0scXQtLX1pZihLZT50bil7aWYoS2U8PXF0KWZvcih2YXIgQWE9cXQrMSxvcz1BYTxVdD9RW0FhXS5lbDpJZTtLZTw9cXQ7KWl0KG51bGwsUVtLZV09UWU/eWEoUVtLZV0pOiRuKFFbS2VdKSxBZSxvcyxVZSx0dCxTdCxYZSxRZSksS2UrK31lbHNlIGlmKEtlPnF0KWZvcig7S2U8PXRuOylObihxW0tlXSxVZSx0dCwhMCksS2UrKztlbHNle3ZhciBSYz1LZSxrcj1LZSxfbD1uZXcgTWFwO2ZvcihLZT1rcjtLZTw9cXQ7S2UrKyl7dmFyIGJsPVFbS2VdPVFlP3lhKFFbS2VdKTokbihRW0tlXSk7Ymwua2V5IT1udWxsJiZfbC5zZXQoYmwua2V5LEtlKX12YXIgTG8sS3I9MCwkYT1xdC1rcisxLHZvPSExLFRzPTAsbW89bmV3IEFycmF5KCRhKTtmb3IoS2U9MDtLZTwkYTtLZSsrKW1vW0tlXT0wO2ZvcihLZT1SYztLZTw9dG47S2UrKyl7dmFyIFRhPXFbS2VdO2lmKEtyPj0kYSl7Tm4oVGEsVWUsdHQsITApO2NvbnRpbnVlfXZhciBhcz12b2lkIDA7aWYoVGEua2V5IT1udWxsKWFzPV9sLmdldChUYS5rZXkpO2Vsc2UgZm9yKExvPWtyO0xvPD1xdDtMbysrKWlmKG1vW0xvLWtyXT09PTAmJlZyKFRhLFFbTG9dKSl7YXM9TG87YnJlYWt9YXM9PT12b2lkIDA/Tm4oVGEsVWUsdHQsITApOihtb1thcy1rcl09S2UrMSxhcz49VHM/VHM9YXM6dm89ITAsaXQoVGEsUVthc10sQWUsbnVsbCxVZSx0dCxTdCxYZSxRZSksS3IrKyl9dmFyIHhjPXZvP0ZhKG1vKTpoLkVNUFRZX0FSUjtmb3IoTG89eGMubGVuZ3RoLTEsS2U9JGEtMTtLZT49MDtLZS0tKXt2YXIgZWM9a3IrS2UsYXU9UVtlY10seWw9ZWMrMTxVdD9RW2VjKzFdLmVsOkllO21vW0tlXT09PTA/aXQobnVsbCxhdSxBZSx5bCxVZSx0dCxTdCxYZSxRZSk6dm8mJihMbzwwfHxLZSE9PXhjW0xvXT96dChhdSxBZSx5bCwyKTpMby0tKX19fSx6dD1mdW5jdGlvbihxLFEsQWUsSWUpe3ZhciBVZT1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06bnVsbCx7ZWw6dHQsdHlwZTpTdCx0cmFuc2l0aW9uOlhlLGNoaWxkcmVuOlFlLHNoYXBlRmxhZzpLZX09cTtpZihLZSY2KXt6dChxLmNvbXBvbmVudC5zdWJUcmVlLFEsQWUsSWUpO3JldHVybn1pZihLZSYxMjgpe3Euc3VzcGVuc2UubW92ZShRLEFlLEllKTtyZXR1cm59aWYoS2UmNjQpe1N0Lm1vdmUocSxRLEFlLHdpKTtyZXR1cm59aWYoU3Q9PT1pcil7bSh0dCxRLEFlKTtmb3IodmFyIFV0PTA7VXQ8UWUubGVuZ3RoO1V0KyspenQoUWVbVXRdLFEsQWUsSWUpO20ocS5hbmNob3IsUSxBZSk7cmV0dXJufWlmKFN0PT09Um8pe05lKHEsUSxBZSk7cmV0dXJufXZhciB0bj1JZSE9PTImJktlJjEmJlhlO2lmKHRuKWlmKEllPT09MClYZS5iZWZvcmVFbnRlcih0dCksbSh0dCxRLEFlKSxmcigoKT0+WGUuZW50ZXIodHQpLFVlKTtlbHNle3ZhcntsZWF2ZTpxdCxkZWxheUxlYXZlOl9uLGFmdGVyTGVhdmU6WXJ9PVhlLGFyPSgpPT5tKHR0LFEsQWUpLFZpPSgpPT57cXQodHQsKCk9PnthcigpLFlyJiZZcigpfSl9O19uP19uKHR0LGFyLFZpKTpWaSgpfWVsc2UgbSh0dCxRLEFlKX0sTm49ZnVuY3Rpb24ocSxRLEFlKXt2YXIgSWU9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiExLFVlPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTohMSx7dHlwZTp0dCxwcm9wczpTdCxyZWY6WGUsY2hpbGRyZW46UWUsZHluYW1pY0NoaWxkcmVuOktlLHNoYXBlRmxhZzpVdCxwYXRjaEZsYWc6dG4sZGlyczpxdH09cTtpZihYZSE9bnVsbCYmZW4oWGUsbnVsbCxBZSxxLCEwKSxVdCYyNTYpe1EuY3R4LmRlYWN0aXZhdGUocSk7cmV0dXJufXZhciBfbj1VdCYxJiZxdCxZcj0heihxKSxhcjtpZihZciYmKGFyPVN0JiZTdC5vblZub2RlQmVmb3JlVW5tb3VudCkmJkVuKGFyLFEscSksVXQmNilLbihxLmNvbXBvbmVudCxBZSxJZSk7ZWxzZXtpZihVdCYxMjgpe3Euc3VzcGVuc2UudW5tb3VudChBZSxJZSk7cmV0dXJufV9uJiZkbihxLG51bGwsUSwiYmVmb3JlVW5tb3VudCIpLFV0JjY0P3EudHlwZS5yZW1vdmUocSxRLEFlLFVlLHdpLEllKTpLZSYmKHR0IT09aXJ8fHRuPjAmJnRuJjY0KT8kcihLZSxRLEFlLCExLCEwKToodHQ9PT1pciYmdG4mKDEyOHwyNTYpfHwhVWUmJlV0JjE2KSYmJHIoUWUsUSxBZSksSWUmJlBuKHEpfShZciYmKGFyPVN0JiZTdC5vblZub2RlVW5tb3VudGVkKXx8X24pJiZmcigoKT0+e2FyJiZFbihhcixRLHEpLF9uJiZkbihxLG51bGwsUSwidW5tb3VudGVkIil9LEFlKX0sUG49cT0+e3Zhcnt0eXBlOlEsZWw6QWUsYW5jaG9yOkllLHRyYW5zaXRpb246VWV9PXE7aWYoUT09PWlyKXtMbihBZSxJZSk7cmV0dXJufWlmKFE9PT1Sbyl7Q2UocSk7cmV0dXJufXZhciB0dD0oKT0+e0EoQWUpLFVlJiYhVWUucGVyc2lzdGVkJiZVZS5hZnRlckxlYXZlJiZVZS5hZnRlckxlYXZlKCl9O2lmKHEuc2hhcGVGbGFnJjEmJlVlJiYhVWUucGVyc2lzdGVkKXt2YXJ7bGVhdmU6U3QsZGVsYXlMZWF2ZTpYZX09VWUsUWU9KCk9PlN0KEFlLHR0KTtYZT9YZShxLmVsLHR0LFFlKTpRZSgpfWVsc2UgdHQoKX0sTG49KHEsUSk9Pntmb3IodmFyIEFlO3EhPT1ROylBZT1tZShxKSxBKHEpLHE9QWU7QShRKX0sS249KHEsUSxBZSk9Pnt2YXJ7YnVtOkllLHNjb3BlOlVlLHVwZGF0ZTp0dCxzdWJUcmVlOlN0LHVtOlhlfT1xO0llJiZoLmludm9rZUFycmF5Rm5zKEllKSxVZS5zdG9wKCksdHQmJih0dC5hY3RpdmU9ITEsTm4oU3QscSxRLEFlKSksWGUmJmZyKFhlLFEpLGZyKCgpPT57cS5pc1VubW91bnRlZD0hMH0sUSksUSYmUS5wZW5kaW5nQnJhbmNoJiYhUS5pc1VubW91bnRlZCYmcS5hc3luY0RlcCYmIXEuYXN5bmNSZXNvbHZlZCYmcS5zdXNwZW5zZUlkPT09US5wZW5kaW5nSWQmJihRLmRlcHMtLSxRLmRlcHM9PT0wJiZRLnJlc29sdmUoKSl9LCRyPWZ1bmN0aW9uKHEsUSxBZSl7Zm9yKHZhciBJZT1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITEsVWU9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOiExLHR0PWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTowLFN0PXR0O1N0PHEubGVuZ3RoO1N0KyspTm4ocVtTdF0sUSxBZSxJZSxVZSl9LHNhPXE9PnEuc2hhcGVGbGFnJjY/c2EocS5jb21wb25lbnQuc3ViVHJlZSk6cS5zaGFwZUZsYWcmMTI4P3Euc3VzcGVuc2UubmV4dCgpOm1lKHEuYW5jaG9yfHxxLmVsKSxIbj0hMSxLbz0ocSxRLEFlKT0+e3E9PW51bGw/US5fdm5vZGUmJk5uKFEuX3Zub2RlLG51bGwsbnVsbCwhMCk6aXQoUS5fdm5vZGV8fG51bGwscSxRLG51bGwsbnVsbCxudWxsLEFlKSxIbnx8KEhuPSEwLGtuKCksY3IoKSxIbj0hMSksUS5fdm5vZGU9cX0sd2k9e3A6aXQsdW06Tm4sbTp6dCxyOlBuLG10OkdlLG1jOkIscGM6X3QscGJjOnJlLG46c2EsbzppfSxoaSxCbztyZXR1cm4gbCYmKFtoaSxCb109bCh3aSkpLHtyZW5kZXI6S28saHlkcmF0ZTpoaSxjcmVhdGVBcHA6YihLbyxoaSl9fWZ1bmN0aW9uIG5hKGksbCl7dmFye3R5cGU6ZCxwcm9wczptfT1pO3JldHVybiBsPT09InN2ZyImJmQ9PT0iZm9yZWlnbk9iamVjdCJ8fGw9PT0ibWF0aG1sIiYmZD09PSJhbm5vdGF0aW9uLXhtbCImJm0mJm0uZW5jb2RpbmcmJm0uZW5jb2RpbmcuaW5jbHVkZXMoImh0bWwiKT92b2lkIDA6bH1mdW5jdGlvbiBaaShpLGwpe3ZhcntlZmZlY3Q6ZCx1cGRhdGU6bX09aTtkLmFsbG93UmVjdXJzZT1tLmFsbG93UmVjdXJzZT1sfWZ1bmN0aW9uIERhKGksbCl7cmV0dXJuKCFpfHxpJiYhaS5wZW5kaW5nQnJhbmNoKSYmbCYmIWwucGVyc2lzdGVkfWZ1bmN0aW9uIHJyKGksbCl7dmFyIGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiExLG09aS5jaGlsZHJlbixBPWwuY2hpbGRyZW47aWYoaC5pc0FycmF5KG0pJiZoLmlzQXJyYXkoQSkpZm9yKHZhciBDPTA7QzxtLmxlbmd0aDtDKyspe3ZhciBrPW1bQ10sVj1BW0NdO1Yuc2hhcGVGbGFnJjEmJiFWLmR5bmFtaWNDaGlsZHJlbiYmKChWLnBhdGNoRmxhZzw9MHx8Vi5wYXRjaEZsYWc9PT0zMikmJihWPUFbQ109eWEoQVtDXSksVi5lbD1rLmVsKSxkfHxycihrLFYpKSxWLnR5cGU9PT1kciYmKFYuZWw9ay5lbCl9fWZ1bmN0aW9uIEZhKGkpe3ZhciBsPWkuc2xpY2UoKSxkPVswXSxtLEEsQyxrLFYsVT1pLmxlbmd0aDtmb3IobT0wO208VTttKyspe3ZhciBaPWlbbV07aWYoWiE9PTApe2lmKEE9ZFtkLmxlbmd0aC0xXSxpW0FdPFope2xbbV09QSxkLnB1c2gobSk7Y29udGludWV9Zm9yKEM9MCxrPWQubGVuZ3RoLTE7QzxrOylWPUMraz4+MSxpW2RbVl1dPFo/Qz1WKzE6az1WO1o8aVtkW0NdXSYmKEM+MCYmKGxbbV09ZFtDLTFdKSxkW0NdPW0pfX1mb3IoQz1kLmxlbmd0aCxrPWRbQy0xXTtDLS0gPjA7KWRbQ109ayxrPWxba107cmV0dXJuIGR9ZnVuY3Rpb24gV24oaSl7dmFyIGw9aS5zdWJUcmVlLmNvbXBvbmVudDtpZihsKXJldHVybiBsLmFzeW5jRGVwJiYhbC5hc3luY1Jlc29sdmVkP2w6V24obCl9dmFyIFluPWk9PmkuX19pc1RlbGVwb3J0LEdvPWk9PmkmJihpLmRpc2FibGVkfHxpLmRpc2FibGVkPT09IiIpLHBvPWk9PnR5cGVvZiBTVkdFbGVtZW50IT0idW5kZWZpbmVkIiYmaSBpbnN0YW5jZW9mIFNWR0VsZW1lbnQscmE9aT0+dHlwZW9mIE1hdGhNTEVsZW1lbnQ9PSJmdW5jdGlvbiImJmkgaW5zdGFuY2VvZiBNYXRoTUxFbGVtZW50LEVpPShpLGwpPT57dmFyIGQ9aSYmaS50bztpZihoLmlzU3RyaW5nKGQpKWlmKGwpe3ZhciBtPWwoZCk7cmV0dXJuIG19ZWxzZSByZXR1cm4gbnVsbDtlbHNlIHJldHVybiBkfSxJbz17bmFtZToiVGVsZXBvcnQiLF9faXNUZWxlcG9ydDohMCxwcm9jZXNzKGksbCxkLG0sQSxDLGssVixVLFope3ZhcnttYzpkZSxwYzp2ZSxwYmM6dGUsbzp7aW5zZXJ0Om1lLHF1ZXJ5U2VsZWN0b3I6SmUsY3JlYXRlVGV4dDpjdCxjcmVhdGVDb21tZW50Oml0fX09WixJdD1HbyhsLnByb3BzKSx7c2hhcGVGbGFnOkN0LGNoaWxkcmVuOmNlLGR5bmFtaWNDaGlsZHJlbjpOZX09bDtpZihpPT1udWxsKXt2YXIgQ2U9bC5lbD1jdCgiIixkKSxWZT1sLmFuY2hvcj1jdCgiIixkKTttZShDZSxkLG0pLG1lKFZlLGQsbSk7dmFyIGJ0PWwudGFyZ2V0PUVpKGwucHJvcHMsSmUpLG90PWwudGFyZ2V0QW5jaG9yPWN0KCIiLGQpO2J0JiYobWUob3QsYnQpLGs9PT0ic3ZnInx8cG8oYnQpP2s9InN2ZyI6KGs9PT0ibWF0aG1sInx8cmEoYnQpKSYmKGs9Im1hdGhtbCIpKTt2YXIgQj0oWWUsRmUpPT57Q3QmMTYmJmRlKGNlLFllLEZlLEEsQyxrLFYsVSl9O0l0P0IoZCxWZSk6YnQmJkIoYnQsb3QpfWVsc2V7bC5lbD1pLmVsO3ZhciAkPWwuYW5jaG9yPWkuYW5jaG9yLHJlPWwudGFyZ2V0PWkudGFyZ2V0LGdlPWwudGFyZ2V0QW5jaG9yPWkudGFyZ2V0QW5jaG9yLHNlPUdvKGkucHJvcHMpLGtlPXNlP2Q6cmUsR2U9c2U/JDpnZTtpZihrPT09InN2ZyJ8fHBvKHJlKT9rPSJzdmciOihrPT09Im1hdGhtbCJ8fHJhKHJlKSkmJihrPSJtYXRobWwiKSxOZT8odGUoaS5keW5hbWljQ2hpbGRyZW4sTmUsa2UsQSxDLGssVikscnIoaSxsLCEwKSk6VXx8dmUoaSxsLGtlLEdlLEEsQyxrLFYsITEpLEl0KXNlP2wucHJvcHMmJmkucHJvcHMmJmwucHJvcHMudG8hPT1pLnByb3BzLnRvJiYobC5wcm9wcy50bz1pLnByb3BzLnRvKTpUbihsLGQsJCxaLDEpO2Vsc2UgaWYoKGwucHJvcHMmJmwucHJvcHMudG8pIT09KGkucHJvcHMmJmkucHJvcHMudG8pKXt2YXIgRWU9bC50YXJnZXQ9RWkobC5wcm9wcyxKZSk7RWUmJlRuKGwsRWUsbnVsbCxaLDApfWVsc2Ugc2UmJlRuKGwscmUsZ2UsWiwxKX1rbyhsKX0scmVtb3ZlKGksbCxkLG0sQSxDKXt2YXJ7dW06ayxvOntyZW1vdmU6Vn19PUEse3NoYXBlRmxhZzpVLGNoaWxkcmVuOlosYW5jaG9yOmRlLHRhcmdldEFuY2hvcjp2ZSx0YXJnZXQ6dGUscHJvcHM6bWV9PWk7aWYodGUmJlYodmUpLEMmJlYoZGUpLFUmMTYpZm9yKHZhciBKZT1DfHwhR28obWUpLGN0PTA7Y3Q8Wi5sZW5ndGg7Y3QrKyl7dmFyIGl0PVpbY3RdO2soaXQsbCxkLEplLCEhaXQuZHluYW1pY0NoaWxkcmVuKX19LG1vdmU6VG4saHlkcmF0ZTppYX07ZnVuY3Rpb24gVG4oaSxsLGQsbSl7dmFye286e2luc2VydDpBfSxtOkN9PW0saz1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06MjtrPT09MCYmQShpLnRhcmdldEFuY2hvcixsLGQpO3ZhcntlbDpWLGFuY2hvcjpVLHNoYXBlRmxhZzpaLGNoaWxkcmVuOmRlLHByb3BzOnZlfT1pLHRlPWs9PT0yO2lmKHRlJiZBKFYsbCxkKSwoIXRlfHxHbyh2ZSkpJiZaJjE2KWZvcih2YXIgbWU9MDttZTxkZS5sZW5ndGg7bWUrKylDKGRlW21lXSxsLGQsMik7dGUmJkEoVSxsLGQpfWZ1bmN0aW9uIGlhKGksbCxkLG0sQSxDLGssVil7dmFye286e25leHRTaWJsaW5nOlUscGFyZW50Tm9kZTpaLHF1ZXJ5U2VsZWN0b3I6ZGV9fT1rLHZlPWwudGFyZ2V0PUVpKGwucHJvcHMsZGUpO2lmKHZlKXt2YXIgdGU9dmUuX2xwYXx8dmUuZmlyc3RDaGlsZDtpZihsLnNoYXBlRmxhZyYxNilpZihHbyhsLnByb3BzKSlsLmFuY2hvcj1WKFUoaSksbCxaKGkpLGQsbSxBLEMpLGwudGFyZ2V0QW5jaG9yPXRlO2Vsc2V7bC5hbmNob3I9VShpKTtmb3IodmFyIG1lPXRlO21lOylpZihtZT1VKG1lKSxtZSYmbWUubm9kZVR5cGU9PT04JiZtZS5kYXRhPT09InRlbGVwb3J0IGFuY2hvciIpe2wudGFyZ2V0QW5jaG9yPW1lLHZlLl9scGE9bC50YXJnZXRBbmNob3ImJlUobC50YXJnZXRBbmNob3IpO2JyZWFrfVYodGUsbCx2ZSxkLG0sQSxDKX1rbyhsKX1yZXR1cm4gbC5hbmNob3ImJlUobC5hbmNob3IpfXZhciBHcj1JbztmdW5jdGlvbiBrbyhpKXt2YXIgbD1pLmN0eDtpZihsJiZsLnV0KXtmb3IodmFyIGQ9aS5jaGlsZHJlblswXS5lbDtkJiZkIT09aS50YXJnZXRBbmNob3I7KWQubm9kZVR5cGU9PT0xJiZkLnNldEF0dHJpYnV0ZSgiZGF0YS12LW93bmVyIixsLnVpZCksZD1kLm5leHRTaWJsaW5nO2wudXQoKX19dmFyIGlyPVN5bWJvbC5mb3IoInYtZmd0IiksZHI9U3ltYm9sLmZvcigidi10eHQiKSxocj1TeW1ib2wuZm9yKCJ2LWNtdCIpLFJvPVN5bWJvbC5mb3IoInYtc3RjIiksdWk9W10sd3I9bnVsbDtmdW5jdGlvbiBiYSgpe3ZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMTt1aS5wdXNoKHdyPWk/bnVsbDpbXSl9ZnVuY3Rpb24gWmEoKXt1aS5wb3AoKSx3cj11aVt1aS5sZW5ndGgtMV18fG51bGx9dmFyIG1yPTE7ZnVuY3Rpb24gZmkoaSl7bXIrPWl9ZnVuY3Rpb24gZWkoaSl7cmV0dXJuIGkuZHluYW1pY0NoaWxkcmVuPW1yPjA/d3J8fGguRU1QVFlfQVJSOm51bGwsWmEoKSxtcj4wJiZ3ciYmd3IucHVzaChpKSxpfWZ1bmN0aW9uIExzKGksbCxkLG0sQSxDKXtyZXR1cm4gZWkobG4oaSxsLGQsbSxBLEMsITApKX1mdW5jdGlvbiB0aShpLGwsZCxtLEEpe3JldHVybiBlaShIdChpLGwsZCxtLEEsITApKX1mdW5jdGlvbiBCaShpKXtyZXR1cm4gaT9pLl9fdl9pc1ZOb2RlPT09ITA6ITF9ZnVuY3Rpb24gVnIoaSxsKXtyZXR1cm4gaS50eXBlPT09bC50eXBlJiZpLmtleT09PWwua2V5fWZ1bmN0aW9uIE1zKGkpe312YXIgeWU9Il9fdkludGVybmFsIixEdD1pPT57dmFye2tleTpsfT1pO3JldHVybiBsIT1udWxsP2w6bnVsbH0sRnQ9aT0+e3ZhcntyZWY6bCxyZWZfa2V5OmQscmVmX2ZvcjptfT1pO3JldHVybiB0eXBlb2YgbD09Im51bWJlciImJihsPSIiK2wpLGwhPW51bGw/aC5pc1N0cmluZyhsKXx8Xy5pc1JlZihsKXx8aC5pc0Z1bmN0aW9uKGwpP3tpOlZuLHI6bCxrOmQsZjohIW19Omw6bnVsbH07ZnVuY3Rpb24gbG4oaSl7dmFyIGw9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOm51bGwsZD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06bnVsbCxtPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTowLEE9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOm51bGwsQz1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06aT09PWlyPzA6MSxrPWFyZ3VtZW50cy5sZW5ndGg+NiYmYXJndW1lbnRzWzZdIT09dm9pZCAwP2FyZ3VtZW50c1s2XTohMSxWPWFyZ3VtZW50cy5sZW5ndGg+NyYmYXJndW1lbnRzWzddIT09dm9pZCAwP2FyZ3VtZW50c1s3XTohMSxVPXtfX3ZfaXNWTm9kZTohMCxfX3Zfc2tpcDohMCx0eXBlOmkscHJvcHM6bCxrZXk6bCYmRHQobCkscmVmOmwmJkZ0KGwpLHNjb3BlSWQ6eW8sc2xvdFNjb3BlSWRzOm51bGwsY2hpbGRyZW46ZCxjb21wb25lbnQ6bnVsbCxzdXNwZW5zZTpudWxsLHNzQ29udGVudDpudWxsLHNzRmFsbGJhY2s6bnVsbCxkaXJzOm51bGwsdHJhbnNpdGlvbjpudWxsLGVsOm51bGwsYW5jaG9yOm51bGwsdGFyZ2V0Om51bGwsdGFyZ2V0QW5jaG9yOm51bGwsc3RhdGljQ291bnQ6MCxzaGFwZUZsYWc6QyxwYXRjaEZsYWc6bSxkeW5hbWljUHJvcHM6QSxkeW5hbWljQ2hpbGRyZW46bnVsbCxhcHBDb250ZXh0Om51bGwsY3R4OlZufTtyZXR1cm4gVj8oRWEoVSxkKSxDJjEyOCYmaS5ub3JtYWxpemUoVSkpOmQmJihVLnNoYXBlRmxhZ3w9aC5pc1N0cmluZyhkKT84OjE2KSxtcj4wJiYhayYmd3ImJihVLnBhdGNoRmxhZz4wfHxDJjYpJiZVLnBhdGNoRmxhZyE9PTMyJiZ3ci5wdXNoKFUpLFV9dmFyIEh0PXFyO2Z1bmN0aW9uIHFyKGkpe3ZhciBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpudWxsLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOm51bGwsbT1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106MCxBPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTpudWxsLEM9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOiExO2lmKCghaXx8aT09PXdvKSYmKGk9aHIpLEJpKGkpKXt2YXIgaz1PbihpLGwsITApO3JldHVybiBkJiZFYShrLGQpLG1yPjAmJiFDJiZ3ciYmKGsuc2hhcGVGbGFnJjY/d3Jbd3IuaW5kZXhPZihpKV09azp3ci5wdXNoKGspKSxrLnBhdGNoRmxhZ3w9LTIsa31pZihzbChpKSYmKGk9aS5fX3ZjY09wdHMpLGwpe2w9VXIobCk7dmFye2NsYXNzOlYsc3R5bGU6VX09bDtWJiYhaC5pc1N0cmluZyhWKSYmKGwuY2xhc3M9aC5ub3JtYWxpemVDbGFzcyhWKSksaC5pc09iamVjdChVKSYmKF8uaXNQcm94eShVKSYmIWguaXNBcnJheShVKSYmKFU9aC5leHRlbmQoe30sVSkpLGwuc3R5bGU9aC5ub3JtYWxpemVTdHlsZShVKSl9dmFyIFo9aC5pc1N0cmluZyhpKT8xOldpKGkpPzEyODpZbihpKT82NDpoLmlzT2JqZWN0KGkpPzQ6aC5pc0Z1bmN0aW9uKGkpPzI6MDtyZXR1cm4gbG4oaSxsLGQsbSxBLFosQywhMCl9ZnVuY3Rpb24gVXIoaSl7cmV0dXJuIGk/Xy5pc1Byb3h5KGkpfHx5ZSBpbiBpP2guZXh0ZW5kKHt9LGkpOmk6bnVsbH1mdW5jdGlvbiBPbihpLGwpe3ZhciBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTohMSx7cHJvcHM6bSxyZWY6QSxwYXRjaEZsYWc6QyxjaGlsZHJlbjprfT1pLFY9bD9vbChtfHx7fSxsKTptLFU9e19fdl9pc1ZOb2RlOiEwLF9fdl9za2lwOiEwLHR5cGU6aS50eXBlLHByb3BzOlYsa2V5OlYmJkR0KFYpLHJlZjpsJiZsLnJlZj9kJiZBP2guaXNBcnJheShBKT9BLmNvbmNhdChGdChsKSk6W0EsRnQobCldOkZ0KGwpOkEsc2NvcGVJZDppLnNjb3BlSWQsc2xvdFNjb3BlSWRzOmkuc2xvdFNjb3BlSWRzLGNoaWxkcmVuOmssdGFyZ2V0OmkudGFyZ2V0LHRhcmdldEFuY2hvcjppLnRhcmdldEFuY2hvcixzdGF0aWNDb3VudDppLnN0YXRpY0NvdW50LHNoYXBlRmxhZzppLnNoYXBlRmxhZyxwYXRjaEZsYWc6bCYmaS50eXBlIT09aXI/Qz09PS0xPzE2OkN8MTY6QyxkeW5hbWljUHJvcHM6aS5keW5hbWljUHJvcHMsZHluYW1pY0NoaWxkcmVuOmkuZHluYW1pY0NoaWxkcmVuLGFwcENvbnRleHQ6aS5hcHBDb250ZXh0LGRpcnM6aS5kaXJzLHRyYW5zaXRpb246aS50cmFuc2l0aW9uLGNvbXBvbmVudDppLmNvbXBvbmVudCxzdXNwZW5zZTppLnN1c3BlbnNlLHNzQ29udGVudDppLnNzQ29udGVudCYmT24oaS5zc0NvbnRlbnQpLHNzRmFsbGJhY2s6aS5zc0ZhbGxiYWNrJiZPbihpLnNzRmFsbGJhY2spLGVsOmkuZWwsYW5jaG9yOmkuYW5jaG9yLGN0eDppLmN0eCxjZTppLmNlfTtyZXR1cm4gVX1mdW5jdGlvbiBMaSgpe3ZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXToiICIsbD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06MDtyZXR1cm4gSHQoZHIsbnVsbCxpLGwpfWZ1bmN0aW9uIHBzKGksbCl7dmFyIGQ9SHQoUm8sbnVsbCxpKTtyZXR1cm4gZC5zdGF0aWNDb3VudD1sLGR9ZnVuY3Rpb24gdnMoKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06IiIsbD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITE7cmV0dXJuIGw/KGJhKCksdGkoaHIsbnVsbCxpKSk6SHQoaHIsbnVsbCxpKX1mdW5jdGlvbiAkbihpKXtyZXR1cm4gaT09bnVsbHx8dHlwZW9mIGk9PSJib29sZWFuIj9IdChocik6aC5pc0FycmF5KGkpP0h0KGlyLG51bGwsaS5zbGljZSgpKTp0eXBlb2YgaT09Im9iamVjdCI/eWEoaSk6SHQoZHIsbnVsbCxTdHJpbmcoaSkpfWZ1bmN0aW9uIHlhKGkpe3JldHVybiBpLmVsPT09bnVsbCYmaS5wYXRjaEZsYWchPT0tMXx8aS5tZW1vP2k6T24oaSl9ZnVuY3Rpb24gRWEoaSxsKXt2YXIgZD0wLHtzaGFwZUZsYWc6bX09aTtpZihsPT1udWxsKWw9bnVsbDtlbHNlIGlmKGguaXNBcnJheShsKSlkPTE2O2Vsc2UgaWYodHlwZW9mIGw9PSJvYmplY3QiKWlmKG0mKDF8NjQpKXt2YXIgQT1sLmRlZmF1bHQ7QSYmKEEuX2MmJihBLl9kPSExKSxFYShpLEEoKSksQS5fYyYmKEEuX2Q9ITApKTtyZXR1cm59ZWxzZXtkPTMyO3ZhciBDPWwuXzshQyYmISh5ZSBpbiBsKT9sLl9jdHg9Vm46Qz09PTMmJlZuJiYoVm4uc2xvdHMuXz09PTE/bC5fPTE6KGwuXz0yLGkucGF0Y2hGbGFnfD0xMDI0KSl9ZWxzZSBoLmlzRnVuY3Rpb24obCk/KGw9e2RlZmF1bHQ6bCxfY3R4OlZufSxkPTMyKToobD1TdHJpbmcobCksbSY2ND8oZD0xNixsPVtMaShsKV0pOmQ9OCk7aS5jaGlsZHJlbj1sLGkuc2hhcGVGbGFnfD1kfWZ1bmN0aW9uIG9sKCl7Zm9yKHZhciBpPXt9LGw9MDtsPGFyZ3VtZW50cy5sZW5ndGg7bCsrKXt2YXIgZD1sPDB8fGFyZ3VtZW50cy5sZW5ndGg8PWw/dm9pZCAwOmFyZ3VtZW50c1tsXTtmb3IodmFyIG0gaW4gZClpZihtPT09ImNsYXNzIilpLmNsYXNzIT09ZC5jbGFzcyYmKGkuY2xhc3M9aC5ub3JtYWxpemVDbGFzcyhbaS5jbGFzcyxkLmNsYXNzXSkpO2Vsc2UgaWYobT09PSJzdHlsZSIpaS5zdHlsZT1oLm5vcm1hbGl6ZVN0eWxlKFtpLnN0eWxlLGQuc3R5bGVdKTtlbHNlIGlmKGguaXNPbihtKSl7dmFyIEE9aVttXSxDPWRbbV07QyYmQSE9PUMmJiEoaC5pc0FycmF5KEEpJiZBLmluY2x1ZGVzKEMpKSYmKGlbbV09QT9bXS5jb25jYXQoQSxDKTpDKX1lbHNlIG0hPT0iIiYmKGlbbV09ZFttXSl9cmV0dXJuIGl9ZnVuY3Rpb24gRW4oaSxsLGQpe3ZhciBtPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTpudWxsO2NuKGksbCw3LFtkLG1dKX12YXIgU2E9S2EoKSxEcz0wO2Z1bmN0aW9uIEZzKGksbCxkKXt2YXIgbT1pLnR5cGUsQT0obD9sLmFwcENvbnRleHQ6aS5hcHBDb250ZXh0KXx8U2EsQz17dWlkOkRzKyssdm5vZGU6aSx0eXBlOm0scGFyZW50OmwsYXBwQ29udGV4dDpBLHJvb3Q6bnVsbCxuZXh0Om51bGwsc3ViVHJlZTpudWxsLGVmZmVjdDpudWxsLHVwZGF0ZTpudWxsLHNjb3BlOm5ldyBfLkVmZmVjdFNjb3BlKCEwKSxyZW5kZXI6bnVsbCxwcm94eTpudWxsLGV4cG9zZWQ6bnVsbCxleHBvc2VQcm94eTpudWxsLHdpdGhQcm94eTpudWxsLHByb3ZpZGVzOmw/bC5wcm92aWRlczpPYmplY3QuY3JlYXRlKEEucHJvdmlkZXMpLGFjY2Vzc0NhY2hlOm51bGwscmVuZGVyQ2FjaGU6W10sY29tcG9uZW50czpudWxsLGRpcmVjdGl2ZXM6bnVsbCxwcm9wc09wdGlvbnM6RGUobSxBKSxlbWl0c09wdGlvbnM6YWkobSxBKSxlbWl0Om51bGwsZW1pdHRlZDpudWxsLHByb3BzRGVmYXVsdHM6aC5FTVBUWV9PQkosaW5oZXJpdEF0dHJzOm0uaW5oZXJpdEF0dHJzLGN0eDpoLkVNUFRZX09CSixkYXRhOmguRU1QVFlfT0JKLHByb3BzOmguRU1QVFlfT0JKLGF0dHJzOmguRU1QVFlfT0JKLHNsb3RzOmguRU1QVFlfT0JKLHJlZnM6aC5FTVBUWV9PQkosc2V0dXBTdGF0ZTpoLkVNUFRZX09CSixzZXR1cENvbnRleHQ6bnVsbCxhdHRyc1Byb3h5Om51bGwsc2xvdHNQcm94eTpudWxsLHN1c3BlbnNlOmQsc3VzcGVuc2VJZDpkP2QucGVuZGluZ0lkOjAsYXN5bmNEZXA6bnVsbCxhc3luY1Jlc29sdmVkOiExLGlzTW91bnRlZDohMSxpc1VubW91bnRlZDohMSxpc0RlYWN0aXZhdGVkOiExLGJjOm51bGwsYzpudWxsLGJtOm51bGwsbTpudWxsLGJ1Om51bGwsdTpudWxsLHVtOm51bGwsYnVtOm51bGwsZGE6bnVsbCxhOm51bGwscnRnOm51bGwscnRjOm51bGwsZWM6bnVsbCxzcDpudWxsfTtyZXR1cm4gQy5jdHg9e186Q30sQy5yb290PWw/bC5yb290OkMsQy5lbWl0PWJyLmJpbmQobnVsbCxDKSxpLmNlJiZpLmNlKEMpLEN9dmFyIG9yPW51bGwsTWk9KCk9Pm9yfHxWbixEaSxxbzt7dmFyIG1zPWguZ2V0R2xvYmFsVGhpcygpLFZzPShpLGwpPT57dmFyIGQ7cmV0dXJuKGQ9bXNbaV0pfHwoZD1tc1tpXT1bXSksZC5wdXNoKGwpLG09PntkLmxlbmd0aD4xP2QuZm9yRWFjaChBPT5BKG0pKTpkWzBdKG0pfX07RGk9VnMoIl9fVlVFX0lOU1RBTkNFX1NFVFRFUlNfXyIsaT0+b3I9aSkscW89VnMoIl9fVlVFX1NTUl9TRVRURVJTX18iLGk9PkUuaXNJblNTUkNvbXBvbmVudFNldHVwPWkpfXZhciBYaT1pPT57dmFyIGw9b3I7cmV0dXJuIERpKGkpLGkuc2NvcGUub24oKSwoKT0+e2kuc2NvcGUub2ZmKCksRGkobCl9fSxWYT0oKT0+e29yJiZvci5zY29wZS5vZmYoKSxEaShudWxsKX07ZnVuY3Rpb24gX3MoaSl7cmV0dXJuIGkudm5vZGUuc2hhcGVGbGFnJjR9RS5pc0luU1NSQ29tcG9uZW50U2V0dXA9ITE7ZnVuY3Rpb24gWGEoaSl7dmFyIGw9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiExO2wmJnFvKGwpO3Zhcntwcm9wczpkLGNoaWxkcmVuOm19PWkudm5vZGUsQT1fcyhpKTtYKGksZCxBLGwpLEZuKGksbSk7dmFyIEM9QT9GbChpLGwpOnZvaWQgMDtyZXR1cm4gbCYmcW8oITEpLEN9ZnVuY3Rpb24gRmwoaSxsKXt2YXIgZD1pLnR5cGU7aS5hY2Nlc3NDYWNoZT1PYmplY3QuY3JlYXRlKG51bGwpLGkucHJveHk9Xy5tYXJrUmF3KG5ldyBQcm94eShpLmN0eCxoYSkpO3ZhcntzZXR1cDptfT1kO2lmKG0pe3ZhciBBPWkuc2V0dXBDb250ZXh0PW0ubGVuZ3RoPjE/UWkoaSk6bnVsbCxDPVhpKGkpO18ucGF1c2VUcmFja2luZygpO3ZhciBrPUp0KG0saSwwLFtpLnByb3BzLEFdKTtpZihfLnJlc2V0VHJhY2tpbmcoKSxDKCksaC5pc1Byb21pc2Uoaykpe2lmKGsudGhlbihWYSxWYSksbClyZXR1cm4gay50aGVuKFY9PntVcyhpLFYsbCl9KS5jYXRjaChWPT57U24oVixpLDApfSk7aS5hc3luY0RlcD1rfWVsc2UgVXMoaSxrLGwpfWVsc2UgYWwoaSxsKX1mdW5jdGlvbiBVcyhpLGwsZCl7aC5pc0Z1bmN0aW9uKGwpP2kudHlwZS5fX3NzcklubGluZVJlbmRlcj9pLnNzclJlbmRlcj1sOmkucmVuZGVyPWw6aC5pc09iamVjdChsKSYmKGkuc2V0dXBTdGF0ZT1fLnByb3h5UmVmcyhsKSksYWwoaSxkKX12YXIgUWEsYnM7ZnVuY3Rpb24geXMoaSl7UWE9aSxicz1sPT57bC5yZW5kZXIuX3JjJiYobC53aXRoUHJveHk9bmV3IFByb3h5KGwuY3R4LE5zKSl9fXZhciAkcz0oKT0+IVFhO2Z1bmN0aW9uIGFsKGksbCxkKXt2YXIgbT1pLnR5cGU7aWYoIWkucmVuZGVyKXtpZighbCYmUWEmJiFtLnJlbmRlcil7dmFyIEE9bS50ZW1wbGF0ZXx8eGkoaSkudGVtcGxhdGU7aWYoQSl7dmFye2lzQ3VzdG9tRWxlbWVudDpDLGNvbXBpbGVyT3B0aW9uczprfT1pLmFwcENvbnRleHQuY29uZmlnLHtkZWxpbWl0ZXJzOlYsY29tcGlsZXJPcHRpb25zOlV9PW0sWj1oLmV4dGVuZChoLmV4dGVuZCh7aXNDdXN0b21FbGVtZW50OkMsZGVsaW1pdGVyczpWfSxrKSxVKTttLnJlbmRlcj1RYShBLFopfX1pLnJlbmRlcj1tLnJlbmRlcnx8aC5OT09QLGJzJiZicyhpKX17dmFyIGRlPVhpKGkpO18ucGF1c2VUcmFja2luZygpO3RyeXtMYShpKX1maW5hbGx5e18ucmVzZXRUcmFja2luZygpLGRlKCl9fX1mdW5jdGlvbiBFYyhpKXtyZXR1cm4gaS5hdHRyc1Byb3h5fHwoaS5hdHRyc1Byb3h5PW5ldyBQcm94eShpLmF0dHJzLHtnZXQobCxkKXtyZXR1cm4gXy50cmFjayhpLCJnZXQiLCIkYXR0cnMiKSxsW2RdfX0pKX1mdW5jdGlvbiBRaShpKXt2YXIgbD1kPT57aS5leHBvc2VkPWR8fHt9fTtyZXR1cm57Z2V0IGF0dHJzKCl7cmV0dXJuIEVjKGkpfSxzbG90czppLnNsb3RzLGVtaXQ6aS5lbWl0LGV4cG9zZTpsfX1mdW5jdGlvbiBvYShpKXtpZihpLmV4cG9zZWQpcmV0dXJuIGkuZXhwb3NlUHJveHl8fChpLmV4cG9zZVByb3h5PW5ldyBQcm94eShfLnByb3h5UmVmcyhfLm1hcmtSYXcoaS5leHBvc2VkKSkse2dldChsLGQpe2lmKGQgaW4gbClyZXR1cm4gbFtkXTtpZihkIGluIFBvKXJldHVybiBQb1tkXShpKTtpZihkPT09IiRzY29wZSIpcmV0dXJuIGkuY3R4LiRzY29wZX0saGFzKGwsZCl7cmV0dXJuIGQgaW4gbHx8ZCBpbiBQb3x8ZD09PSIkc2NvcGUifX0pKX12YXIgRXM9Lyg/Ol58Wy1fXSkoXHcpL2csZXM9aT0+aS5yZXBsYWNlKEVzLGw9PmwudG9VcHBlckNhc2UoKSkucmVwbGFjZSgvWy1fXS9nLCIiKTtmdW5jdGlvbiB0cyhpKXt2YXIgbD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITA7cmV0dXJuIGguaXNGdW5jdGlvbihpKT9pLmRpc3BsYXlOYW1lfHxpLm5hbWU6aS5uYW1lfHxsJiZpLl9fbmFtZX1mdW5jdGlvbiBTcyhpLGwpe3ZhciBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTohMSxtPXRzKGwpO2lmKCFtJiZsLl9fZmlsZSl7dmFyIEE9bC5fX2ZpbGUubWF0Y2goLyhbXi9cXF0rKVwuXHcrJC8pO0EmJihtPUFbMV0pfWlmKCFtJiZpJiZpLnBhcmVudCl7dmFyIEM9az0+e2Zvcih2YXIgViBpbiBrKWlmKGtbVl09PT1sKXJldHVybiBWfTttPUMoaS5jb21wb25lbnRzfHxpLnBhcmVudC50eXBlLmNvbXBvbmVudHMpfHxDKGkuYXBwQ29udGV4dC5jb21wb25lbnRzKX1yZXR1cm4gbT9lcyhtKTpkPyJBcHAiOiJBbm9ueW1vdXMifWZ1bmN0aW9uIHNsKGkpe3JldHVybiBoLmlzRnVuY3Rpb24oaSkmJiJfX3ZjY09wdHMiaW4gaX12YXIgbGw9KGksbCk9Pnt2YXIgZD1fLmNvbXB1dGVkKGksbCxFLmlzSW5TU1JDb21wb25lbnRTZXR1cCk7cmV0dXJuIGR9O2Z1bmN0aW9uIGNsKGksbCl7dmFyIGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOmguRU1QVFlfT0JKLG09TWkoKSxBPWguY2FtZWxpemUobCksQz1oLmh5cGhlbmF0ZShsKSxrPV8uY3VzdG9tUmVmKChVLFopPT57dmFyIGRlO3JldHVybiBtaSgoKT0+e3ZhciB2ZT1pW2xdO2guaGFzQ2hhbmdlZChkZSx2ZSkmJihkZT12ZSxaKCkpfSkse2dldCgpe3JldHVybiBVKCksZC5nZXQ/ZC5nZXQoZGUpOmRlfSxzZXQodmUpe3ZhciB0ZT1tLnZub2RlLnByb3BzOyEodGUmJihsIGluIHRlfHxBIGluIHRlfHxDIGluIHRlKSYmKCJvblVwZGF0ZToiLmNvbmNhdChsKWluIHRlfHwib25VcGRhdGU6Ii5jb25jYXQoQSlpbiB0ZXx8Im9uVXBkYXRlOiIuY29uY2F0KEMpaW4gdGUpKSYmaC5oYXNDaGFuZ2VkKHZlLGRlKSYmKGRlPXZlLFooKSksbS5lbWl0KCJ1cGRhdGU6Ii5jb25jYXQobCksZC5zZXQ/ZC5zZXQodmUpOnZlKX19fSksVj1sPT09Im1vZGVsVmFsdWUiPyJtb2RlbE1vZGlmaWVycyI6IiIuY29uY2F0KGwsIk1vZGlmaWVycyIpO3JldHVybiBrW1N5bWJvbC5pdGVyYXRvcl09KCk9Pnt2YXIgVT0wO3JldHVybntuZXh0KCl7cmV0dXJuIFU8Mj97dmFsdWU6VSsrP2lbVl18fHt9OmssZG9uZTohMX06e2RvbmU6ITB9fX19LGt9ZnVuY3Rpb24gSHMoaSxsLGQpe3ZhciBtPWFyZ3VtZW50cy5sZW5ndGg7cmV0dXJuIG09PT0yP2guaXNPYmplY3QobCkmJiFoLmlzQXJyYXkobCk/QmkobCk/SHQoaSxudWxsLFtsXSk6SHQoaSxsKTpIdChpLG51bGwsbCk6KG0+Mz9kPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKTptPT09MyYmQmkoZCkmJihkPVtkXSksSHQoaSxsLGQpKX1mdW5jdGlvbiB1bCgpe31mdW5jdGlvbiBWbChpLGwsZCxtKXt2YXIgQT1kW21dO2lmKEEmJm5zKEEsaSkpcmV0dXJuIEE7dmFyIEM9bCgpO3JldHVybiBDLm1lbW89aS5zbGljZSgpLGRbbV09Q31mdW5jdGlvbiBucyhpLGwpe3ZhciBkPWkubWVtbztpZihkLmxlbmd0aCE9bC5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBtPTA7bTxkLmxlbmd0aDttKyspaWYoaC5oYXNDaGFuZ2VkKGRbbV0sbFttXSkpcmV0dXJuITE7cmV0dXJuIG1yPjAmJndyJiZ3ci5wdXNoKGkpLCEwfXZhciBTaT0iMy40LjIxIixZbz1oLk5PT1AsVWw9bmUsU2M9X3Isd2M9amksJGw9e2NyZWF0ZUNvbXBvbmVudEluc3RhbmNlOkZzLHNldHVwQ29tcG9uZW50OlhhLHJlbmRlckNvbXBvbmVudFJvb3Q6Z3Isc2V0Q3VycmVudFJlbmRlcmluZ0luc3RhbmNlOkJyLGlzVk5vZGU6Qmksbm9ybWFsaXplVk5vZGU6JG59LENjPSRsLHJzPW51bGwsanM9bnVsbCxIbD1udWxsO2Z1bmN0aW9uIHpzKGksbCl7cmV0dXJuIGk9PT0iaW5wdXQiP25ldyBJLlVuaUlucHV0RWxlbWVudChpLGwpOmk9PT0idGV4dGFyZWEiP25ldyBJLlVuaVRleHRBcmVhRWxlbWVudChpLGwpOm5ldyBJLlVuaUVsZW1lbnQoaSxsKX1mdW5jdGlvbiB3cyhpLGwpe3JldHVybiBuZXcgSS5VbmlUZXh0Tm9kZShpLGwpfWZ1bmN0aW9uIENzKGksbCl7cmV0dXJuIG5ldyBJLlVuaUNvbW1lbnROb2RlKGksbCl9dmFyIFdzLGZsPXtpbnNlcnQ6KGksbCxkKT0+e2wuaW5zZXJ0QmVmb3JlKGksZHx8bnVsbCl9LHJlbW92ZTppPT57dmFyIGw9aS5wYXJlbnROb2RlO2wmJmwucmVtb3ZlQ2hpbGQoaSl9LGNyZWF0ZUVsZW1lbnQ6KGksbCk9PnpzKGksbCksY3JlYXRlVGV4dDooaSxsKT0+d3MoaSxsKSxjcmVhdGVDb21tZW50OihpLGwpPT5DcyhpLGwpLHNldFRleHQ6KGksbCk9PntpLm5vZGVWYWx1ZT1sfSxzZXRFbGVtZW50VGV4dDooaSxsKT0+e2kudGV4dENvbnRlbnQ9bH0scGFyZW50Tm9kZTppPT5pLnBhcmVudE5vZGUsbmV4dFNpYmxpbmc6aT0+aS5uZXh0U2libGluZyxzZXRTY29wZUlkKGksbCl7aS5zZXRBdHRyaWJ1dGUobCwiIil9LGNsb25lTm9kZShpKXt2YXIgbD1pLmNsb25lTm9kZSghMCk7cmV0dXJuIl92YWx1ZSJpbiBpJiYobC5fdmFsdWU9aS5fdmFsdWUpLGx9LGluc2VydFN0YXRpY0NvbnRlbnQoaSxsLGQpe3ZhciBtPVdzfHwoV3M9enMoImRpdiIpKTttLmlubmVySFRNTD1pO2Zvcih2YXIgQT1tLmZpcnN0Q2hpbGQsQz1BLGs9QztDOylrPUMsZmwuaW5zZXJ0KEMsbCxkKSxDPW0uZmlyc3RDaGlsZDtyZXR1cm5bQSxrXX19O2Z1bmN0aW9uIGpsKGksbCl7bD09bnVsbCYmKGw9IiIpLGkuc2V0QXR0cmlidXRlKCJjbGFzcyIsbCl9ZnVuY3Rpb24gemwoaSxsLGQpe2lmKCFkKWkucmVtb3ZlQXR0cmlidXRlKCJzdHlsZSIpO2Vsc2UgaWYoaC5pc1N0cmluZyhkKSlsIT09ZCYmaS5zZXRBdHRyaWJ1dGUoInN0eWxlIixkKTtlbHNle3ZhciBtPXt9LEE9bCYmIWguaXNTdHJpbmcobCk7aWYoQSl7Zm9yKHZhciBDIGluIGwpZFtDXT09bnVsbCYmKG1bQ109IiIpO2Zvcih2YXIgayBpbiBkKXt2YXIgVj1kW2tdO1YhPT1sW2tdJiYobVtrXT1WKX19ZWxzZSBmb3IodmFyIFUgaW4gZCltW1VdPWRbVV07T2JqZWN0LmtleXMobSkubGVuZ3RoJiZpLnNldEF0dHJpYnV0ZSgic3R5bGUiLG0pfX1mdW5jdGlvbiBBYyhpLGwsZCl7ZD09bnVsbD9pLnJlbW92ZUF0dHJpYnV0ZShsKTppLnNldEF0dHJpYnV0ZShsLGQpfWZ1bmN0aW9uIGRsKGksbCxkLG0pe2kuYWRkRXZlbnRMaXN0ZW5lcihsLGQsbSl9ZnVuY3Rpb24gaGwoaSxsLGQsbSl7aS5yZW1vdmVFdmVudExpc3RlbmVyKGwsZCxtKX1mdW5jdGlvbiBUYyhpLGwsZCxtKXt2YXIgQT1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06bnVsbCxDPWkuX3ZlaXx8KGkuX3ZlaT17fSksaz1DW2xdO2lmKG0mJmspay52YWx1ZT1tO2Vsc2V7dmFyW1YsVV09V2wobCk7aWYobSl7dmFyIFo9Q1tsXT1HbChtLEEpO2RsKGksVixaLFUpfWVsc2UgayYmKGhsKGksVixrLFUpLENbbF09dm9pZCAwKX19dmFyIEFzPS8oPzpPbmNlfFBhc3NpdmV8Q2FwdHVyZSkkLztmdW5jdGlvbiBXbChpKXt2YXIgbDtpZihBcy50ZXN0KGkpKXtsPXt9O2Zvcih2YXIgZDtkPWkubWF0Y2goQXMpOylpPWkuc2xpY2UoMCxpLmxlbmd0aC1kWzBdLmxlbmd0aCksbFtkWzBdLnRvTG93ZXJDYXNlKCldPSEwfXJldHVybltoLmh5cGhlbmF0ZShpLnNsaWNlKDIpKSxsXX1mdW5jdGlvbiBHbChpLGwpe3ZhciBkPUE9PntjbihkLnZhbHVlLGwsNSxbQV0pfTtkLnZhbHVlPWk7dmFyIG09bmV3IFNldDtyZXR1cm4gaC5pc0FycmF5KGQudmFsdWUpP2QudmFsdWUuZm9yRWFjaChBPT57QS5tb2RpZmllcnMmJkEubW9kaWZpZXJzLmZvckVhY2goQz0+e20uYWRkKEMpfSl9KTooZC52YWx1ZS5tb2RpZmllcnMmJmQudmFsdWUubW9kaWZpZXJzLmZvckVhY2goQT0+e20uYWRkKEEpfSksT2MoZCxsKSksZC5tb2RpZmllcnM9Wy4uLm1dLGR9ZnVuY3Rpb24gT2MoaSxsKXtpZighIWwpe3Zhcnskd3hzTW9kdWxlczpkfT1sO2lmKCEhZCl7dmFyIG09aS52YWx1ZS50b1N0cmluZygpOyFkLmZpbmQoQT0+bS5pbmRleE9mKCIuIitBKyIuIik+LTEpfHwoaS53eHNFdmVudD1pLnZhbHVlKCkpfX19dmFyIFBjPShpLGwsZCxtLEEsQyxrLFYsVSk9Pntzd2l0Y2gobCl7Y2FzZSJjbGFzcyI6amwoaSxtKTticmVhaztjYXNlInN0eWxlIjp6bChpLGQsbSk7YnJlYWs7ZGVmYXVsdDppZihoLmlzT24obCkpaC5pc01vZGVsTGlzdGVuZXIobCl8fFRjKGksbCxkLG0sayk7ZWxzZXtpZihoLmlzT2JqZWN0KG0pKXt2YXIgWj1kPT09bTtpZihtPUkuSlNPTl9QUk9UT0NPTCtKU09OLnN0cmluZ2lmeShtKSxaJiZpLmdldEF0dHJpYnV0ZShsKT09PW0pcmV0dXJufWVsc2UgaWYoZD09PW0pcmV0dXJuO0FjKGksbCxtKX1icmVha319O2Z1bmN0aW9uIHFsKCl7dmFyIGk9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiIkc3R5bGUiO3t2YXIgbD1NaSgpO2lmKCFsKXJldHVybiBoLkVNUFRZX09CSjt2YXIgZD1sLnR5cGUuX19jc3NNb2R1bGVzO2lmKCFkKXJldHVybiBoLkVNUFRZX09CSjt2YXIgbT1kW2ldO3JldHVybiBtfHxoLkVNUFRZX09CSn19ZnVuY3Rpb24gTmMoaSl7dmFyIGw9TWkoKTtpZighIWwpe3ZhciBkPSgpPT5nbChsLnN1YlRyZWUsaShsLnByb3h5KSk7SmkoKCk9PktpKGQse2ZsdXNoOiJwb3N0In0pKSxvZShkKX19ZnVuY3Rpb24gZ2woaSxsKXtpZihpLnNoYXBlRmxhZyYxMjgpe3ZhciBkPWkuc3VzcGVuc2U7aT1kLmFjdGl2ZUJyYW5jaCxkLnBlbmRpbmdCcmFuY2gmJiFkLmlzSHlkcmF0aW5nJiZkLmVmZmVjdHMucHVzaCgoKT0+e2dsKGQuYWN0aXZlQnJhbmNoLGwpfSl9Zm9yKDtpLmNvbXBvbmVudDspaT1pLmNvbXBvbmVudC5zdWJUcmVlO2lmKGkuc2hhcGVGbGFnJjEmJmkuZWwpWWwoaS5lbCxsKTtlbHNlIGlmKGkudHlwZT09PWlyKWkuY2hpbGRyZW4uZm9yRWFjaChDPT5nbChDLGwpKTtlbHNlIGlmKGkudHlwZT09PVJvKWZvcih2YXJ7ZWw6bSxhbmNob3I6QX09aTttJiYoWWwobSxsKSxtIT09QSk7KW09bS5uZXh0U2libGluZ31mdW5jdGlvbiBZbChpLGwpe2lmKGkubm9kZVR5cGU9PT0xKWZvcih2YXIgZCBpbiBsKWkuc2V0QXR0cmlidXRlKCItLSIuY29uY2F0KGQpLGxbZF0pfXZhciBhYT0idHJhbnNpdGlvbiIsVWE9ImFuaW1hdGlvbiIsbmk9KGksbCk9Pnt2YXJ7c2xvdHM6ZH09bDtyZXR1cm4gSHMoVG8sd2EoaSksZCl9O25pLmRpc3BsYXlOYW1lPSJUcmFuc2l0aW9uIjt2YXIgZW89e25hbWU6U3RyaW5nLHR5cGU6U3RyaW5nLGNzczp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LGR1cmF0aW9uOltTdHJpbmcsTnVtYmVyLE9iamVjdF0sZW50ZXJGcm9tQ2xhc3M6U3RyaW5nLGVudGVyQWN0aXZlQ2xhc3M6U3RyaW5nLGVudGVyVG9DbGFzczpTdHJpbmcsYXBwZWFyRnJvbUNsYXNzOlN0cmluZyxhcHBlYXJBY3RpdmVDbGFzczpTdHJpbmcsYXBwZWFyVG9DbGFzczpTdHJpbmcsbGVhdmVGcm9tQ2xhc3M6U3RyaW5nLGxlYXZlQWN0aXZlQ2xhc3M6U3RyaW5nLGxlYXZlVG9DbGFzczpTdHJpbmd9LHBsPW5pLnByb3BzPWguZXh0ZW5kKHt9LFRvLnByb3BzLGVvKSxGaT1mdW5jdGlvbihpKXt2YXIgbD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06W107aC5pc0FycmF5KGkpP2kuZm9yRWFjaChkPT5kKC4uLmwpKTppJiZpKC4uLmwpfSxLbD1pPT5pP2guaXNBcnJheShpKT9pLnNvbWUobD0+bC5sZW5ndGg+MSk6aS5sZW5ndGg+MTohMTtmdW5jdGlvbiB3YShpKXt2YXIgbD17fTtmb3IodmFyIGQgaW4gaSlkIGluIGVvfHwobFtkXT1pW2RdKTtpZihpLmNzcz09PSExKXJldHVybiBsO3ZhcntuYW1lOm09InYiLHR5cGU6QSxkdXJhdGlvbjpDLGVudGVyRnJvbUNsYXNzOms9IiIuY29uY2F0KG0sIi1lbnRlci1mcm9tIiksZW50ZXJBY3RpdmVDbGFzczpWPSIiLmNvbmNhdChtLCItZW50ZXItYWN0aXZlIiksZW50ZXJUb0NsYXNzOlU9IiIuY29uY2F0KG0sIi1lbnRlci10byIpLGFwcGVhckZyb21DbGFzczpaPWssYXBwZWFyQWN0aXZlQ2xhc3M6ZGU9VixhcHBlYXJUb0NsYXNzOnZlPVUsbGVhdmVGcm9tQ2xhc3M6dGU9IiIuY29uY2F0KG0sIi1sZWF2ZS1mcm9tIiksbGVhdmVBY3RpdmVDbGFzczptZT0iIi5jb25jYXQobSwiLWxlYXZlLWFjdGl2ZSIpLGxlYXZlVG9DbGFzczpKZT0iIi5jb25jYXQobSwiLWxlYXZlLXRvIil9PWksY3Q9SWMoQyksaXQ9Y3QmJmN0WzBdLEl0PWN0JiZjdFsxXSx7b25CZWZvcmVFbnRlcjpDdCxvbkVudGVyOmNlLG9uRW50ZXJDYW5jZWxsZWQ6TmUsb25MZWF2ZTpDZSxvbkxlYXZlQ2FuY2VsbGVkOlZlLG9uQmVmb3JlQXBwZWFyOmJ0PUN0LG9uQXBwZWFyOm90PWNlLG9uQXBwZWFyQ2FuY2VsbGVkOkI9TmV9PWwsJD0oc2Usa2UsR2UpPT57Q2Eoc2Usa2U/dmU6VSksQ2Eoc2Usa2U/ZGU6ViksR2UmJkdlKCl9LHJlPShzZSxrZSk9PntDYShzZSxKZSksQ2Eoc2UsbWUpLGtlJiZrZSgpfSxnZT1zZT0+KGtlLEdlKT0+e3ZhciBFZT1zZT9vdDpjZSxZZT0oKT0+JChrZSxzZSxHZSk7RmkoRWUsW2tlLFllXSkseG8oKCk9PntDYShrZSxzZT9aOmspLGRpKGtlLHNlP3ZlOlUpLEtsKEVlKXx8dG8oa2UsQSxpdCxZZSl9KX07cmV0dXJuIGguZXh0ZW5kKGwse29uQmVmb3JlRW50ZXIoc2Upe0ZpKEN0LFtzZV0pLGRpKHNlLGspLGRpKHNlLFYpfSxvbkJlZm9yZUFwcGVhcihzZSl7RmkoYnQsW3NlXSksZGkoc2UsWiksZGkoc2UsZGUpfSxvbkVudGVyOmdlKCExKSxvbkFwcGVhcjpnZSghMCksb25MZWF2ZShzZSxrZSl7dmFyIEdlPSgpPT5yZShzZSxrZSk7ZGkoc2UsdGUpLFhsKCksZGkoc2UsbWUpLHhvKCgpPT57Q2Eoc2UsdGUpLGRpKHNlLEplKSxLbChDZSl8fHRvKHNlLEEsSXQsR2UpfSksRmkoQ2UsW3NlLEdlXSl9LG9uRW50ZXJDYW5jZWxsZWQoc2UpeyQoc2UsITEpLEZpKE5lLFtzZV0pfSxvbkFwcGVhckNhbmNlbGxlZChzZSl7JChzZSwhMCksRmkoQixbc2VdKX0sb25MZWF2ZUNhbmNlbGxlZChzZSl7cmUoc2UpLEZpKFZlLFtzZV0pfX0pfWZ1bmN0aW9uIEljKGkpe2lmKGk9PW51bGwpcmV0dXJuIG51bGw7aWYoaC5pc09iamVjdChpKSlyZXR1cm5bdmwoaS5lbnRlciksdmwoaS5sZWF2ZSldO3ZhciBsPXZsKGkpO3JldHVybltsLGxdfWZ1bmN0aW9uIHZsKGkpe3ZhciBsPWgudG9OdW1iZXIoaSk7cmV0dXJuIGx9ZnVuY3Rpb24gZGkoaSxsKXtsLnNwbGl0KC9ccysvKS5mb3JFYWNoKGQ9PmQmJmkuY2xhc3NMaXN0LmFkZChkKSksKGkuX3Z0Y3x8KGkuX3Z0Yz1uZXcgU2V0KSkuYWRkKGwpfWZ1bmN0aW9uIENhKGksbCl7bC5zcGxpdCgvXHMrLykuZm9yRWFjaChtPT5tJiZpLmNsYXNzTGlzdC5yZW1vdmUobSkpO3ZhcntfdnRjOmR9PWk7ZCYmKGQuZGVsZXRlKGwpLGQuc2l6ZXx8KGkuX3Z0Yz12b2lkIDApKX1mdW5jdGlvbiB4byhpKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoaSl9KX12YXIgR3M9MDtmdW5jdGlvbiB0byhpLGwsZCxtKXt2YXIgQT1pLl9lbmRJZD0rK0dzLEM9KCk9PntBPT09aS5fZW5kSWQmJm0oKX07aWYoZClyZXR1cm4gc2V0VGltZW91dChDLGQpO3Zhcnt0eXBlOmssdGltZW91dDpWLHByb3BDb3VudDpVfT1KbChpLGwpO2lmKCFrKXJldHVybiBtKCk7dmFyIFo9aysiZW5kIixkZT0wLHZlPSgpPT57aS5yZW1vdmVFdmVudExpc3RlbmVyKFosdGUpLEMoKX0sdGU9bWU9PnttZS50YXJnZXQ9PT1pJiYrK2RlPj1VJiZ2ZSgpfTtzZXRUaW1lb3V0KCgpPT57ZGU8VSYmdmUoKX0sVisxKSxpLmFkZEV2ZW50TGlzdGVuZXIoWix0ZSl9ZnVuY3Rpb24gSmwoaSxsKXt2YXIgZD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShpKSxtPUplPT4oZFtKZV18fCIiKS5zcGxpdCgiLCAiKSxBPW0oYWErIkRlbGF5IiksQz1tKGFhKyJEdXJhdGlvbiIpLGs9cXMoQSxDKSxWPW0oVWErIkRlbGF5IiksVT1tKFVhKyJEdXJhdGlvbiIpLFo9cXMoVixVKSxkZT1udWxsLHZlPTAsdGU9MDtsPT09YWE/az4wJiYoZGU9YWEsdmU9ayx0ZT1DLmxlbmd0aCk6bD09PVVhP1o+MCYmKGRlPVVhLHZlPVosdGU9VS5sZW5ndGgpOih2ZT1NYXRoLm1heChrLFopLGRlPXZlPjA/az5aP2FhOlVhOm51bGwsdGU9ZGU/ZGU9PT1hYT9DLmxlbmd0aDpVLmxlbmd0aDowKTt2YXIgbWU9ZGU9PT1hYSYmL1xiKHRyYW5zZm9ybXxhbGwpKCx8JCkvLnRlc3QoZFthYSsiUHJvcGVydHkiXSk7cmV0dXJue3R5cGU6ZGUsdGltZW91dDp2ZSxwcm9wQ291bnQ6dGUsaGFzVHJhbnNmb3JtOm1lfX1mdW5jdGlvbiBxcyhpLGwpe2Zvcig7aS5sZW5ndGg8bC5sZW5ndGg7KWk9aS5jb25jYXQoaSk7cmV0dXJuIE1hdGgubWF4KC4uLmwubWFwKChkLG0pPT5abChkKStabChpW21dKSkpfWZ1bmN0aW9uIFpsKGkpe3JldHVybiBOdW1iZXIoaS5zbGljZSgwLC0xKS5yZXBsYWNlKCIsIiwiLiIpKSoxZTN9ZnVuY3Rpb24gWGwoKXtyZXR1cm4gZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHR9dmFyIGlzPW5ldyBXZWFrTWFwLG1sPW5ldyBXZWFrTWFwLFFsPXtuYW1lOiJUcmFuc2l0aW9uR3JvdXAiLHByb3BzOmguZXh0ZW5kKHt9LHBsLHt0YWc6U3RyaW5nLG1vdmVDbGFzczpTdHJpbmd9KSxzZXR1cChpLGwpe3ZhcntzbG90czpkfT1sLG09TWkoKSxBPSRvKCksQyxrO3JldHVybiBvZSgoKT0+e2lmKCEhQy5sZW5ndGgpe3ZhciBWPWkubW92ZUNsYXNzfHwiIi5jb25jYXQoaS5uYW1lfHwidiIsIi1tb3ZlIik7aWYoISFQKENbMF0uZWwsbS52bm9kZS5lbCxWKSl7Qy5mb3JFYWNoKGMpLEMuZm9yRWFjaCh2KTt2YXIgVT1DLmZpbHRlcihTKTtYbCgpLFUuZm9yRWFjaChaPT57dmFyIGRlPVouZWwsdmU9ZGUuc3R5bGU7ZGkoZGUsViksdmUudHJhbnNmb3JtPXZlLndlYmtpdFRyYW5zZm9ybT12ZS50cmFuc2l0aW9uRHVyYXRpb249IiI7dmFyIHRlPWRlLl9tb3ZlQ2I9bWU9PnttZSYmbWUudGFyZ2V0IT09ZGV8fCghbWV8fC90cmFuc2Zvcm0kLy50ZXN0KG1lLnByb3BlcnR5TmFtZSkpJiYoZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsdGUpLGRlLl9tb3ZlQ2I9bnVsbCxDYShkZSxWKSl9O2RlLmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLHRlKX0pfX19KSwoKT0+e3ZhciBWPV8udG9SYXcoaSksVT13YShWKSxaPVYudGFnfHxpcjtDPWssaz1kLmRlZmF1bHQ/SWkoZC5kZWZhdWx0KCkpOltdO2Zvcih2YXIgZGU9MDtkZTxrLmxlbmd0aDtkZSsrKXt2YXIgdmU9a1tkZV07dmUua2V5IT1udWxsJiZiaSh2ZSxfaSh2ZSxVLEEsbSkpfWlmKEMpZm9yKHZhciB0ZT0wO3RlPEMubGVuZ3RoO3RlKyspe3ZhciBtZT1DW3RlXTtiaShtZSxfaShtZSxVLEEsbSkpLGlzLnNldChtZSxtZS5lbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSl9cmV0dXJuIEh0KFosbnVsbCxrKX19fSxrYz1pPT5kZWxldGUgaS5tb2RlO1FsLnByb3BzO3ZhciBvPVFsO2Z1bmN0aW9uIGMoaSl7dmFyIGw9aS5lbDtsLl9tb3ZlQ2ImJmwuX21vdmVDYigpLGwuX2VudGVyQ2ImJmwuX2VudGVyQ2IoKX1mdW5jdGlvbiB2KGkpe21sLnNldChpLGkuZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpfWZ1bmN0aW9uIFMoaSl7dmFyIGw9aXMuZ2V0KGkpLGQ9bWwuZ2V0KGkpLG09bC5sZWZ0LWQubGVmdCxBPWwudG9wLWQudG9wO2lmKG18fEEpe3ZhciBDPWkuZWwuc3R5bGU7cmV0dXJuIEMudHJhbnNmb3JtPUMud2Via2l0VHJhbnNmb3JtPSJ0cmFuc2xhdGUoIi5jb25jYXQobSwicHgsIikuY29uY2F0KEEsInB4KSIpLEMudHJhbnNpdGlvbkR1cmF0aW9uPSIwcyIsaX19ZnVuY3Rpb24gUChpLGwsZCl7dmFyIG09aS5jbG9uZU5vZGUoKTtpLl92dGMmJmkuX3Z0Yy5mb3JFYWNoKGs9PntrLnNwbGl0KC9ccysvKS5mb3JFYWNoKFY9PlYmJm0uY2xhc3NMaXN0LnJlbW92ZShWKSl9KSxkLnNwbGl0KC9ccysvKS5mb3JFYWNoKGs9PmsmJm0uY2xhc3NMaXN0LmFkZChrKSksbS5zdHlsZS5kaXNwbGF5PSJub25lIjt2YXIgQT1sLm5vZGVUeXBlPT09MT9sOmwucGFyZW50Tm9kZTtBLmFwcGVuZENoaWxkKG0pO3ZhcntoYXNUcmFuc2Zvcm06Q309SmwobSk7cmV0dXJuIEEucmVtb3ZlQ2hpbGQobSksQ312YXIgVD1pPT57dmFyIGw9aS5wcm9wc1sib25VcGRhdGU6bW9kZWxWYWx1ZSJdO3JldHVybiBoLmlzQXJyYXkobCk/ZD0+aC5pbnZva2VBcnJheUZucyhsLGQpOmx9LEY9e2NyZWF0ZWQoaSxsLGQpe3Zhcnt2YWx1ZTptLG1vZGlmaWVyczp7dHJpbTpBLG51bWJlcjpDfX09bDtpLnZhbHVlPW09PW51bGw/IiI6bSxpLl9hc3NpZ249VChkKSxkbChpLCJpbnB1dCIsaz0+e3ZhciBWPWsuZGV0YWlsLnZhbHVlLFU9aS5wYWdlTm9kZTtpLnBhZ2VOb2RlPW51bGwsaS52YWx1ZT1WLGkucGFnZU5vZGU9VSxBP1Y9Vi50cmltKCk6QyYmKFY9aC50b051bWJlcihWKSksaS5fYXNzaWduKFYpfSl9LGJlZm9yZVVwZGF0ZShpLGwsZCl7dmFye3ZhbHVlOm19PWw7aS5fYXNzaWduPVQoZCk7dmFyIEE9bT09bnVsbD8iIjptO2kudmFsdWUhPT1BJiYoaS52YWx1ZT1BKX19LEs9RixXPVsiY3RybCIsInNoaWZ0IiwiYWx0IiwibWV0YSJdLGllPXtzdG9wOmk9Pmkuc3RvcFByb3BhZ2F0aW9uKCkscHJldmVudDppPT5pLnByZXZlbnREZWZhdWx0KCksc2VsZjppPT5pLnRhcmdldCE9PWkuY3VycmVudFRhcmdldCxjdHJsOmk9PiFpLmN0cmxLZXksc2hpZnQ6aT0+IWkuc2hpZnRLZXksYWx0Omk9PiFpLmFsdEtleSxtZXRhOmk9PiFpLm1ldGFLZXksbGVmdDppPT4iYnV0dG9uImluIGkmJmkuYnV0dG9uIT09MCxtaWRkbGU6aT0+ImJ1dHRvbiJpbiBpJiZpLmJ1dHRvbiE9PTEscmlnaHQ6aT0+ImJ1dHRvbiJpbiBpJiZpLmJ1dHRvbiE9PTIsZXhhY3Q6KGksbCk9Plcuc29tZShkPT5pWyIiLmNvbmNhdChkLCJLZXkiKV0mJiFsLmluY2x1ZGVzKGQpKX0sUmU9KGksbCk9Pnt2YXIgZD1mdW5jdGlvbihtKXtmb3IodmFyIEE9MDtBPGwubGVuZ3RoO0ErKyl7dmFyIEM9aWVbbFtBXV07aWYoQyYmQyhtLGwpKXJldHVybn1mb3IodmFyIGs9YXJndW1lbnRzLmxlbmd0aCxWPW5ldyBBcnJheShrPjE/ay0xOjApLFU9MTtVPGs7VSsrKVZbVS0xXT1hcmd1bWVudHNbVV07cmV0dXJuIGkobSwuLi5WKX07cmV0dXJuIGQubW9kaWZpZXJzPWwsZH0sV2U9e2VzYzoiZXNjYXBlIixzcGFjZToiICIsdXA6ImFycm93LXVwIixsZWZ0OiJhcnJvdy1sZWZ0IixyaWdodDoiYXJyb3ctcmlnaHQiLGRvd246ImFycm93LWRvd24iLGRlbGV0ZToiYmFja3NwYWNlIn0sZWU9KGksbCk9PmQ9PntpZigia2V5ImluIGQpe3ZhciBtPWguaHlwaGVuYXRlKGQua2V5KTtpZihsLnNvbWUoQT0+QT09PW18fFdlW0FdPT09bSkpcmV0dXJuIGkoZCl9fSxCZT17YmVmb3JlTW91bnQoaSxsKXt2YXJ7dmFsdWU6ZH09bDtaZShpLGQpfSx1cGRhdGVkKGksbCl7dmFye3ZhbHVlOmQsb2xkVmFsdWU6bX09bDshZCE9IW0mJlplKGksZCl9LGJlZm9yZVVubW91bnQoaSxsKXt2YXJ7dmFsdWU6ZH09bDtaZShpLGQpfX07ZnVuY3Rpb24gWmUoaSxsKXtpLnNldEF0dHJpYnV0ZSgiLnZTaG93IiwhIWwpfXZhciBFdD1oLmV4dGVuZCh7cGF0Y2hQcm9wOlBjLGZvcmNlUGF0Y2hQcm9wOkkuZm9yY2VQYXRjaFByb3B9LGZsKSxtdDtmdW5jdGlvbiBXdCgpe3JldHVybiBtdHx8KG10PU5vKEV0KSl9dmFyIEd0PWZ1bmN0aW9uKCl7V3QoKS5yZW5kZXIoLi4uYXJndW1lbnRzKX0sZmU9ZnVuY3Rpb24oKXt2YXIgaT1XdCgpLmNyZWF0ZUFwcCguLi5hcmd1bWVudHMpLHttb3VudDpsfT1pO3JldHVybiBpLm1vdW50PWQ9PihoLmlzU3RyaW5nKGQpJiYoZD1DcyhkKSksZCYmbChkLCExLCExKSksaX0seGU9ZmU7ZnVuY3Rpb24gd2UoKXt9ZnVuY3Rpb24gemUoKXt9ZnVuY3Rpb24gbHQoaSl7cmV0dXJuIGguaXNPYmplY3QoaSk/SS5KU09OX1BST1RPQ09MK0pTT04uc3RyaW5naWZ5KGkpOml9dmFyIHJ0PWk9Pmx0KGkpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoRSwiY2FtZWxpemUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBoLmNhbWVsaXplfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFLCJjYXBpdGFsaXplIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaC5jYXBpdGFsaXplfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFLCJub3JtYWxpemVDbGFzcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGgubm9ybWFsaXplQ2xhc3N9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEUsIm5vcm1hbGl6ZVByb3BzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaC5ub3JtYWxpemVQcm9wc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRSwibm9ybWFsaXplU3R5bGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBoLm5vcm1hbGl6ZVN0eWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFLCJ0b0Rpc3BsYXlTdHJpbmciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBoLnRvRGlzcGxheVN0cmluZ319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRSwidG9IYW5kbGVyS2V5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaC50b0hhbmRsZXJLZXl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEUsIkVmZmVjdFNjb3BlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gXy5FZmZlY3RTY29wZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRSwiUmVhY3RpdmVFZmZlY3QiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBfLlJlYWN0aXZlRWZmZWN0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFLCJUcmFja09wVHlwZXMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBfLlRyYWNrT3BUeXBlc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRSwiVHJpZ2dlck9wVHlwZXMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBfLlRyaWdnZXJPcFR5cGVzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFLCJjdXN0b21SZWYiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBfLmN1c3RvbVJlZn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRSwiZWZmZWN0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gXy5lZmZlY3R9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEUsImVmZmVjdFNjb3BlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gXy5lZmZlY3RTY29wZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRSwiZ2V0Q3VycmVudFNjb3BlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gXy5nZXRDdXJyZW50U2NvcGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEUsImlzUHJveHkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBfLmlzUHJveHl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEUsImlzUmVhY3RpdmUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBfLmlzUmVhY3RpdmV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEUsImlzUmVhZG9ubHkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBfLmlzUmVhZG9ubHl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEUsImlzUmVmIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gXy5pc1JlZn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRSwiaXNTaGFsbG93Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gXy5pc1NoYWxsb3d9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEUsIm1hcmtSYXciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBfLm1hcmtSYXd9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEUsIm9uU2NvcGVEaXNwb3NlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gXy5vblNjb3BlRGlzcG9zZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRSwicHJveHlSZWZzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gXy5wcm94eVJlZnN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEUsInJlYWN0aXZlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gXy5yZWFjdGl2ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRSwicmVhZG9ubHkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBfLnJlYWRvbmx5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFLCJyZWYiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBfLnJlZn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRSwic2hhbGxvd1JlYWN0aXZlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gXy5zaGFsbG93UmVhY3RpdmV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEUsInNoYWxsb3dSZWFkb25seSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF8uc2hhbGxvd1JlYWRvbmx5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFLCJzaGFsbG93UmVmIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gXy5zaGFsbG93UmVmfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFLCJzdG9wIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gXy5zdG9wfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFLCJ0b1JhdyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF8udG9SYXd9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEUsInRvUmVmIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gXy50b1JlZn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRSwidG9SZWZzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gXy50b1JlZnN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEUsInRvVmFsdWUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBfLnRvVmFsdWV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEUsInRyaWdnZXJSZWYiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBfLnRyaWdnZXJSZWZ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEUsInVucmVmIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gXy51bnJlZn19KSxFLkJhc2VUcmFuc2l0aW9uPVRvLEUuQmFzZVRyYW5zaXRpb25Qcm9wc1ZhbGlkYXRvcnM9QW8sRS5Db21tZW50PWhyLEUuRGVwcmVjYXRpb25UeXBlcz1IbCxFLkVycm9yQ29kZXM9RyxFLkVycm9yVHlwZVN0cmluZ3M9VWwsRS5GcmFnbWVudD1pcixFLktlZXBBbGl2ZT1xZSxFLlN0YXRpYz1SbyxFLlN1c3BlbnNlPXFpLEUuVGVsZXBvcnQ9R3IsRS5UZXh0PWRyLEUuVHJhbnNpdGlvbj1uaSxFLlRyYW5zaXRpb25Hcm91cD1vLEUuYXNzZXJ0TnVtYmVyPXN0LEUuY2FsbFdpdGhBc3luY0Vycm9ySGFuZGxpbmc9Y24sRS5jYWxsV2l0aEVycm9ySGFuZGxpbmc9SnQsRS5jbG9uZVZOb2RlPU9uLEUuY29tcGF0VXRpbHM9anMsRS5jb21wdXRlZD1sbCxFLmNyZWF0ZUFwcD1mZSxFLmNyZWF0ZUJsb2NrPXRpLEUuY3JlYXRlQ29tbWVudD1DcyxFLmNyZWF0ZUNvbW1lbnRWTm9kZT12cyxFLmNyZWF0ZUVsZW1lbnQ9enMsRS5jcmVhdGVFbGVtZW50QmxvY2s9THMsRS5jcmVhdGVFbGVtZW50Vk5vZGU9bG4sRS5jcmVhdGVIeWRyYXRpb25SZW5kZXJlcj1tbixFLmNyZWF0ZVByb3BzUmVzdFByb3h5PXhzLEUuY3JlYXRlUmVuZGVyZXI9Tm8sRS5jcmVhdGVTU1JBcHA9eGUsRS5jcmVhdGVTbG90cz16bixFLmNyZWF0ZVN0YXRpY1ZOb2RlPXBzLEUuY3JlYXRlVGV4dE5vZGU9d3MsRS5jcmVhdGVUZXh0Vk5vZGU9TGksRS5jcmVhdGVWTm9kZT1IdCxFLmNyZWF0ZVZ1ZUFwcD1mZSxFLmRlZmluZUFzeW5jQ29tcG9uZW50PWxlLEUuZGVmaW5lQ29tcG9uZW50PUQsRS5kZWZpbmVFbWl0cz1JcyxFLmRlZmluZUV4cG9zZT1ubCxFLmRlZmluZU1vZGVsPXhhLEUuZGVmaW5lT3B0aW9ucz10cixFLmRlZmluZVByb3BzPVlhLEUuZGVmaW5lU2xvdHM9cmwsRS5kZXZ0b29scz1TYyxFLmRldnRvb2xzSW5pdEFwcD14bixFLmdldEN1cnJlbnRJbnN0YW5jZT1NaSxFLmdldFRyYW5zaXRpb25SYXdDaGlsZHJlbj1JaSxFLmd1YXJkUmVhY3RpdmVQcm9wcz1VcixFLmg9SHMsRS5oYW5kbGVFcnJvcj1TbixFLmhhc0luamVjdGlvbkNvbnRleHQ9SixFLmluaXRDdXN0b21Gb3JtYXR0ZXI9dWwsRS5pbmplY3Q9SCxFLmluamVjdEhvb2s9T28sRS5pc01lbW9TYW1lPW5zLEUuaXNSdW50aW1lT25seT0kcyxFLmlzVk5vZGU9QmksRS5sb2dFcnJvcj1HbixFLm1lcmdlRGVmYXVsdHM9em8sRS5tZXJnZU1vZGVscz1ScyxFLm1lcmdlUHJvcHM9b2wsRS5uZXh0VGljaz0kZSxFLm9uQWN0aXZhdGVkPVRyLEUub25CZWZvcmVBY3RpdmF0ZT13ZSxFLm9uQmVmb3JlRGVhY3RpdmF0ZT16ZSxFLm9uQmVmb3JlTW91bnQ9am8sRS5vbkJlZm9yZVVubW91bnQ9WSxFLm9uQmVmb3JlVXBkYXRlPWthLEUub25EZWFjdGl2YXRlZD1raSxFLm9uRXJyb3JDYXB0dXJlZD1wcixFLm9uTW91bnRlZD1KaSxFLm9uUmVuZGVyVHJhY2tlZD1obixFLm9uUmVuZGVyVHJpZ2dlcmVkPXV0LEUub25TZXJ2ZXJQcmVmZXRjaD1NZSxFLm9uVW5tb3VudGVkPWFlLEUub25VcGRhdGVkPW9lLEUub3BlbkJsb2NrPWJhLEUucG9wU2NvcGVJZD1UaSxFLnByb3ZpZGU9aixFLnB1c2hTY29wZUlkPVBhLEUucXVldWVQb3N0Rmx1c2hDYj1zbixFLnJlZ2lzdGVyUnVudGltZUNvbXBpbGVyPXlzLEUucmVuZGVyPUd0LEUucmVuZGVyTGlzdD1BbixFLnJlbmRlclNsb3Q9TnIsRS5yZXNvbHZlQ29tcG9uZW50PWFvLEUucmVzb2x2ZURpcmVjdGl2ZT1saSxFLnJlc29sdmVEeW5hbWljQ29tcG9uZW50PVBpLEUucmVzb2x2ZUZpbHRlcj1ycyxFLnJlc29sdmVUcmFuc2l0aW9uSG9va3M9X2ksRS5zZXRCbG9ja1RyYWNraW5nPWZpLEUuc2V0RGV2dG9vbHNIb29rPXdjLEUuc2V0VHJhbnNpdGlvbkhvb2tzPWJpLEUuc3NyQ29udGV4dEtleT1sbyxFLnNzclV0aWxzPUNjLEUudG9IYW5kbGVycz12cixFLnRyYW5zZm9ybVZOb2RlQXJncz1NcyxFLnVzZUF0dHJzPWlsLEUudXNlQ3NzTW9kdWxlPXFsLEUudXNlQ3NzVmFycz1OYyxFLnVzZU1vZGVsPWNsLEUudXNlU1NSQ29udGV4dD1ZaSxFLnVzZVNsb3RzPWtzLEUudXNlVHJhbnNpdGlvblN0YXRlPSRvLEUudk1vZGVsRHluYW1pYz1LLEUudk1vZGVsVGV4dD1GLEUudlNob3c9QmUsRS52ZXJzaW9uPVNpLEUud2Fybj1ZbyxFLndhdGNoPURyLEUud2F0Y2hFZmZlY3Q9S2ksRS53YXRjaFBvc3RFZmZlY3Q9WHIsRS53YXRjaFN5bmNFZmZlY3Q9bWksRS53aXRoQXN5bmNDb250ZXh0PUJhLEUud2l0aEN0eD15cixFLndpdGhEZWZhdWx0cz15aSxFLndpdGhEaXJlY3RpdmVzPVVuLEUud2l0aEtleXM9ZWUsRS53aXRoTWVtbz1WbCxFLndpdGhNb2RpZmllcnM9UmUsRS53aXRoU2NvcGVJZD1RbixFLndwPXJ0LEV9KHt9LHAsdyxzKTtyZXR1cm4gTi5fX1RZUEVfXz0idnVlIixOfWZ1bmN0aW9uIGltKGYscyxwKXtsZXQgdz1wLlZ1ZSxOPXAuc2V0VGltZW91dCxFPXAuY2xlYXJUaW1lb3V0LGg9cC5zZXRJbnRlcnZhbCxfPXAuY2xlYXJJbnRlcnZhbCxJPXAuX191bmlDb25maWcsU2U9cC5fX3VuaVJvdXRlcyxmdD1wLlZ1ZVNoYXJlZCxUdD1wLlVuaVNoYXJlZDt2YXIgQnQ9ZnVuY3Rpb24oRyxuZSxKdCl7InVzZSBzdHJpY3QiO3ZhciBjbj0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsU249ZnVuY3Rpb24oKXtsZXQgZT1uZXcgVWludDhBcnJheSgyNTYpO2Zvcih2YXIgdD0wO3Q8Y24ubGVuZ3RoO3QrKyllW2NuLmNoYXJDb2RlQXQodCldPXQ7cmV0dXJuIGV9KCk7ZnVuY3Rpb24gR24oZSl7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoZSksbixyPXQubGVuZ3RoLGE9IiI7Zm9yKG49MDtuPHI7bis9MylhKz1jblt0W25dPj4yXSxhKz1jblsodFtuXSYzKTw8NHx0W24rMV0+PjRdLGErPWNuWyh0W24rMV0mMTUpPDwyfHRbbisyXT4+Nl0sYSs9Y25bdFtuKzJdJjYzXTtyZXR1cm4gciUzPT09Mj9hPWEuc3Vic3RyaW5nKDAsYS5sZW5ndGgtMSkrIj0iOnIlMz09PTEmJihhPWEuc3Vic3RyaW5nKDAsYS5sZW5ndGgtMikrIj09IiksYX1mdW5jdGlvbiBnaShlKXt2YXIgdD1lLmxlbmd0aCouNzUsbj1lLmxlbmd0aCxyLGE9MCx1LGcseSxNO2VbZS5sZW5ndGgtMV09PT0iPSImJih0LS0sZVtlLmxlbmd0aC0yXT09PSI9IiYmdC0tKTt2YXIgTz1uZXcgQXJyYXlCdWZmZXIodCkseD1uZXcgVWludDhBcnJheShPKTtmb3Iocj0wO3I8bjtyKz00KXU9U25bZS5jaGFyQ29kZUF0KHIpXSxnPVNuW2UuY2hhckNvZGVBdChyKzEpXSx5PVNuW2UuY2hhckNvZGVBdChyKzIpXSxNPVNuW2UuY2hhckNvZGVBdChyKzMpXSx4W2ErK109dTw8MnxnPj40LHhbYSsrXT0oZyYxNSk8PDR8eT4+Mix4W2ErK109KHkmMyk8PDZ8TSY2MztyZXR1cm4gT31sZXQgSHI9WyJvcmlnaW5hbCIsImNvbXByZXNzZWQiXSxDbj1bImFsYnVtIiwiY2FtZXJhIl0sbm49WyJHRVQiLCJPUFRJT05TIiwiSEVBRCIsIlBPU1QiLCJQVVQiLCJERUxFVEUiLCJUUkFDRSIsIkNPTk5FQ1QiLCJQQVRDSCJdO2Z1bmN0aW9uIHluKGUsdCl7cmV0dXJuIWV8fHQuaW5kZXhPZihlKT09PS0xP3RbMF06ZX1mdW5jdGlvbiBJbihlLHQpe3JldHVybiFHLmlzQXJyYXkoZSl8fGUubGVuZ3RoPT09MHx8ZS5maW5kKG49PnQuaW5kZXhPZihuKT09PS0xKT90OmV9ZnVuY3Rpb24gTW4oZSx0KXtjb25zb2xlLndhcm4oYCR7ZX06ICR7dH1gKX1mdW5jdGlvbiB4cihlLHQsbixyKXtyfHwocj1Nbik7Zm9yKGxldCBhIGluIG4pe2xldCB1PVhuKGEsdFthXSxuW2FdLCFHLmhhc093bih0LGEpKTtHLmlzU3RyaW5nKHUpJiZyKGUsdSl9fWZ1bmN0aW9uIG9pKGUsdCxuLHIpe2lmKCFuKXJldHVybjtpZighRy5pc0FycmF5KG4pKXJldHVybiB4cihlLHRbMF18fE9iamVjdC5jcmVhdGUobnVsbCksbixyKTtsZXQgYT1uLmxlbmd0aCx1PXQubGVuZ3RoO2ZvcihsZXQgZz0wO2c8YTtnKyspe2xldCB5PW5bZ10sTT1PYmplY3QuY3JlYXRlKG51bGwpO3U+ZyYmKE1beS5uYW1lXT10W2ddKSx4cihlLE0se1t5Lm5hbWVdOnl9LHIpfX1mdW5jdGlvbiBYbihlLHQsbixyKXtHLmlzUGxhaW5PYmplY3Qobil8fChuPXt0eXBlOm59KTtsZXR7dHlwZTphLHJlcXVpcmVkOnUsdmFsaWRhdG9yOmd9PW47aWYodSYmcilyZXR1cm4nTWlzc2luZyByZXF1aXJlZCBhcmdzOiAiJytlKyciJztpZighKHQ9PW51bGwmJiF1KSl7aWYoYSE9bnVsbCl7bGV0IHk9ITEsTT1HLmlzQXJyYXkoYSk/YTpbYV0sTz1bXTtmb3IobGV0IHg9MDt4PE0ubGVuZ3RoJiYheTt4Kyspe2xldHt2YWxpZDpoZSxleHBlY3RlZFR5cGU6YmV9PSRlKHQsTVt4XSk7Ty5wdXNoKGJlfHwiIikseT1oZX1pZigheSlyZXR1cm4gZXQoZSx0LE8pfWlmKGcpcmV0dXJuIGcodCl9fWxldCBqcj1HLm1ha2VNYXAoIlN0cmluZyxOdW1iZXIsQm9vbGVhbixGdW5jdGlvbixTeW1ib2wiKTtmdW5jdGlvbiAkZShlLHQpe2xldCBuLHI9TnQodCk7aWYoanIocikpe2xldCBhPXR5cGVvZiBlO249YT09PXIudG9Mb3dlckNhc2UoKSwhbiYmYT09PSJvYmplY3QiJiYobj1lIGluc3RhbmNlb2YgdCl9ZWxzZSByPT09Ik9iamVjdCI/bj1HLmlzT2JqZWN0KGUpOnI9PT0iQXJyYXkiP249Ry5pc0FycmF5KGUpOm49ZSBpbnN0YW5jZW9mIHR8fEcudG9SYXdUeXBlKGUpPT09TnQodCk7cmV0dXJue3ZhbGlkOm4sZXhwZWN0ZWRUeXBlOnJ9fWZ1bmN0aW9uIGV0KGUsdCxuKXtsZXQgcj1gSW52YWxpZCBhcmdzOiB0eXBlIGNoZWNrIGZhaWxlZCBmb3IgYXJncyAiJHtlfSIuIEV4cGVjdGVkICR7bi5tYXAoRy5jYXBpdGFsaXplKS5qb2luKCIsICIpfWAsYT1uWzBdLHU9Ry50b1Jhd1R5cGUodCksZz11bih0LGEpLHk9dW4odCx1KTtyZXR1cm4gbi5sZW5ndGg9PT0xJiZhbihhKSYmIXNuKGEsdSkmJihyKz1gIHdpdGggdmFsdWUgJHtnfWApLHIrPWAsIGdvdCAke3V9IGAsYW4odSkmJihyKz1gd2l0aCB2YWx1ZSAke3l9LmApLHJ9ZnVuY3Rpb24gTnQoZSl7bGV0IHQ9ZSYmZS50b1N0cmluZygpLm1hdGNoKC9eXHMqZnVuY3Rpb24gKFx3KykvKTtyZXR1cm4gdD90WzFdOiIifWZ1bmN0aW9uIHVuKGUsdCl7cmV0dXJuIHQ9PT0iU3RyaW5nIj9gIiR7ZX0iYDp0PT09Ik51bWJlciI/YCR7TnVtYmVyKGUpfWA6YCR7ZX1gfWZ1bmN0aW9uIGFuKGUpe3JldHVyblsic3RyaW5nIiwibnVtYmVyIiwiYm9vbGVhbiJdLnNvbWUobj0+ZS50b0xvd2VyQ2FzZSgpPT09bil9ZnVuY3Rpb24gc24oLi4uZSl7cmV0dXJuIGUuc29tZSh0PT50LnRvTG93ZXJDYXNlKCk9PT0iYm9vbGVhbiIpfWZ1bmN0aW9uIGtuKGUpe3JldHVybiBmdW5jdGlvbigpe3RyeXtyZXR1cm4gZS5hcHBseShlLGFyZ3VtZW50cyl9Y2F0Y2godCl7Y29uc29sZS5lcnJvcih0KX19fWxldCBjcj0xLHFuPXt9O2Z1bmN0aW9uIHBpKGUsdCxuLHI9ITEpe3JldHVybiBxbltlXT17bmFtZTp0LGtlZXBBbGl2ZTpyLGNhbGxiYWNrOm59LGV9ZnVuY3Rpb24genIoZSx0LG4pe2lmKHR5cGVvZiBlPT0ibnVtYmVyIil7bGV0IHI9cW5bZV07aWYocilyZXR1cm4gci5rZWVwQWxpdmV8fGRlbGV0ZSBxbltlXSxyLmNhbGxiYWNrKHQsbil9cmV0dXJuIHR9ZnVuY3Rpb24gX3IoZSl7Zm9yKGxldCB0IGluIHFuKWlmKHFuW3RdLm5hbWU9PT1lKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIG9vKGUsdCl7Zm9yKGxldCBuIGluIHFuKXtsZXQgcj1xbltuXTtyLmNhbGxiYWNrPT09dCYmci5uYW1lPT09ZSYmZGVsZXRlIHFuW25dfX1mdW5jdGlvbiBYbyhlKXtzdC5vZmYoImFwaS4iK2UpfWZ1bmN0aW9uIHVhKGUpe3N0Lm9uKCJhcGkuIitlLHQ9Pntmb3IobGV0IG4gaW4gcW4pe2xldCByPXFuW25dO3IubmFtZT09PWUmJnIuY2FsbGJhY2sodCl9fSl9ZnVuY3Rpb24gamkoZSx0KXtyZXR1cm4gcGkoY3IrKyxlLHQsITApfWxldCB4bj0ic3VjY2VzcyIsYnI9ImZhaWwiLGFpPSJjb21wbGV0ZSI7ZnVuY3Rpb24gdmkoZSl7bGV0IHQ9e307Zm9yKGxldCBuIGluIGUpe2xldCByPWVbbl07Ry5pc0Z1bmN0aW9uKHIpJiYodFtuXT1rbihyKSxkZWxldGUgZVtuXSl9cmV0dXJuIHR9ZnVuY3Rpb24gVm4oZSx0KXtyZXR1cm4hZXx8ZS5pbmRleE9mKCI6ZmFpbCIpPT09LTE/dCsiOm9rIjp0K2Uuc3Vic3RyaW5nKGUuaW5kZXhPZigiOmZhaWwiKSl9ZnVuY3Rpb24geW8oZSx0PXt9LHtiZWZvcmVBbGw6bixiZWZvcmVTdWNjZXNzOnJ9PXt9KXtHLmlzUGxhaW5PYmplY3QodCl8fCh0PXt9KTtsZXR7c3VjY2VzczphLGZhaWw6dSxjb21wbGV0ZTpnfT12aSh0KSx5PUcuaXNGdW5jdGlvbihhKSxNPUcuaXNGdW5jdGlvbih1KSxPPUcuaXNGdW5jdGlvbihnKSx4PWNyKys7cmV0dXJuIHBpKHgsZSxoZT0+e2hlPWhlfHx7fSxoZS5lcnJNc2c9Vm4oaGUuZXJyTXNnLGUpLEcuaXNGdW5jdGlvbihuKSYmbihoZSksaGUuZXJyTXNnPT09ZSsiOm9rIj8oRy5pc0Z1bmN0aW9uKHIpJiZyKGhlLHQpLHkmJmEoaGUpKTpNJiZ1KGhlKSxPJiZnKGhlKX0pLHh9bGV0IEJyPSJzdWNjZXNzIixQYT0iZmFpbCIsVGk9ImNvbXBsZXRlIixRbj17fSx5cj17fTtmdW5jdGlvbiBOYShlLHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gZShuLHQpfHxufX1mdW5jdGlvbiBncihlLHQsbil7bGV0IHI9ITE7Zm9yKGxldCBhPTA7YTxlLmxlbmd0aDthKyspe2xldCB1PWVbYV07aWYocilyPVByb21pc2UucmVzb2x2ZShOYSh1LG4pKTtlbHNle2xldCBnPXUodCxuKTtpZihHLmlzUHJvbWlzZShnKSYmKHI9UHJvbWlzZS5yZXNvbHZlKGcpKSxnPT09ITEpcmV0dXJue3RoZW4oKXt9LGNhdGNoKCl7fX19fXJldHVybiByfHx7dGhlbihhKXtyZXR1cm4gYSh0KX0sY2F0Y2goKXt9fX1mdW5jdGlvbiBFbyhlLHQ9e30pe3JldHVybltCcixQYSxUaV0uZm9yRWFjaChuPT57bGV0IHI9ZVtuXTtpZighRy5pc0FycmF5KHIpKXJldHVybjtsZXQgYT10W25dO3Rbbl09ZnVuY3Rpb24oZyl7Z3IocixnLHQpLnRoZW4oeT0+Ry5pc0Z1bmN0aW9uKGEpJiZhKHkpfHx5KX19KSx0fWZ1bmN0aW9uIE1vKGUsdCl7bGV0IG49W107Ry5pc0FycmF5KFFuLnJldHVyblZhbHVlKSYmbi5wdXNoKC4uLlFuLnJldHVyblZhbHVlKTtsZXQgcj15cltlXTtyZXR1cm4gciYmRy5pc0FycmF5KHIucmV0dXJuVmFsdWUpJiZuLnB1c2goLi4uci5yZXR1cm5WYWx1ZSksbi5mb3JFYWNoKGE9Pnt0PWEodCl8fHR9KSx0fWZ1bmN0aW9uIERvKGUpe2xldCB0PU9iamVjdC5jcmVhdGUobnVsbCk7T2JqZWN0LmtleXMoUW4pLmZvckVhY2gocj0+e3IhPT0icmV0dXJuVmFsdWUiJiYodFtyXT1RbltyXS5zbGljZSgpKX0pO2xldCBuPXlyW2VdO3JldHVybiBuJiZPYmplY3Qua2V5cyhuKS5mb3JFYWNoKHI9PntyIT09InJldHVyblZhbHVlIiYmKHRbcl09KHRbcl18fFtdKS5jb25jYXQobltyXSkpfSksdH1mdW5jdGlvbiBPaShlLHQsbixyKXtsZXQgYT1EbyhlKTtyZXR1cm4gYSYmT2JqZWN0LmtleXMoYSkubGVuZ3RoP0cuaXNBcnJheShhLmludm9rZSk/Z3IoYS5pbnZva2UsbikudGhlbihnPT50KEVvKERvKGUpLGcpLC4uLnIpKTp0KEVvKGEsbiksLi4ucik6dChuLC4uLnIpfWZ1bmN0aW9uIHNpKGUpe3JldHVybiEhKEcuaXNQbGFpbk9iamVjdChlKSYmW3huLGJyLGFpXS5maW5kKHQ9PkcuaXNGdW5jdGlvbihlW3RdKSkpfWZ1bmN0aW9uIFNvKGUpe3JldHVybiBlfWZ1bmN0aW9uIExyKGUsdCl7cmV0dXJuKG49e30sLi4ucik9PnNpKG4pP01vKGUsT2koZSx0LG4scikpOk1vKGUsbmV3IFByb21pc2UoKGEsdSk9PntPaShlLHQsRy5leHRlbmQobix7c3VjY2VzczphLGZhaWw6dX0pLHIpfSkpfWZ1bmN0aW9uIEFyKGUsdCl7bGV0IG49ZVswXTtpZighdHx8IXQuZm9ybWF0QXJnc3x8IUcuaXNQbGFpbk9iamVjdCh0LmZvcm1hdEFyZ3MpJiZHLmlzUGxhaW5PYmplY3QobikpcmV0dXJuO2xldCByPXQuZm9ybWF0QXJncyxhPU9iamVjdC5rZXlzKHIpO2ZvcihsZXQgdT0wO3U8YS5sZW5ndGg7dSsrKXtsZXQgZz1hW3VdLHk9cltnXTtpZihHLmlzRnVuY3Rpb24oeSkpe2xldCBNPXkoZVswXVtnXSxuKTtpZihHLmlzU3RyaW5nKE0pKXJldHVybiBNfWVsc2UgRy5oYXNPd24obixnKXx8KG5bZ109eSl9fWZ1bmN0aW9uIGFvKGUsdCxuKXtsZXQgcj17ZXJyTXNnOnQrIjpvayJ9O3JldHVybiB6cihlLEcuZXh0ZW5kKG58fHt9LHIpKX1mdW5jdGlvbiB3byhlLHQsbixyPXt9KXtsZXQgYT10KyI6ZmFpbCIsdT0iIjtuP24uaW5kZXhPZihhKT09PTA/dT1uOnU9YSsiICIrbjp1PWEsZGVsZXRlIHIuZXJyQ29kZTtsZXQgZz1HLmV4dGVuZCh7ZXJyTXNnOnV9LHIpO3JldHVybiB6cihlLGcpfWZ1bmN0aW9uIFBpKGUsdCxuLHIpe2lmKHImJnIuYmVmb3JlSW52b2tlKXtsZXQgdT1yLmJlZm9yZUludm9rZSh0KTtpZihHLmlzU3RyaW5nKHUpKXJldHVybiB1fWxldCBhPUFyKHQscik7aWYoYSlyZXR1cm4gYX1mdW5jdGlvbiBsaShlKXtpZighRy5pc0Z1bmN0aW9uKGUpKXRocm93IG5ldyBFcnJvcignSW52YWxpZCBhcmdzOiB0eXBlIGNoZWNrIGZhaWxlZCBmb3IgYXJncyAiY2FsbGJhY2siLiBFeHBlY3RlZCBGdW5jdGlvbicpfWZ1bmN0aW9uIHppKGUsdCxuKXtyZXR1cm4gcj0+e2xpKHIpO2xldCBhPVBpKGUsW3JdLHZvaWQgMCxuKTtpZihhKXRocm93IG5ldyBFcnJvcihhKTtsZXQgdT0hX3IoZSk7amkoZSxyKSx1JiYodWEoZSksdCgpKX19ZnVuY3Rpb24gRm8oZSx0LG4pe3JldHVybiByPT57bGkocik7bGV0IGE9UGkoZSxbcl0sdm9pZCAwLG4pO2lmKGEpdGhyb3cgbmV3IEVycm9yKGEpO2U9ZS5yZXBsYWNlKCJvZmYiLCJvbiIpLG9vKGUsciksX3IoZSl8fChYbyhlKSx0KCkpfX1mdW5jdGlvbiBXaShlKXtyZXR1cm4hZXx8Ry5pc1N0cmluZyhlKT9lOmUuc3RhY2s/KCh0eXBlb2YgZ2xvYmFsVGhpcz09InVuZGVmaW5lZCJ8fCFnbG9iYWxUaGlzLmhhcm1vbnlDaGFubmVsKSYmY29uc29sZS5lcnJvcihlLm1lc3NhZ2UrYApgK2Uuc3RhY2spLGUubWVzc2FnZSk6ZX1mdW5jdGlvbiBHaShlLHQsbixyKXtyZXR1cm4gYT0+e2xldCB1PXlvKGUsYSxyKSxnPVBpKGUsW2FdLG4scik7cmV0dXJuIGc/d28odSxlLGcpOnQoYSx7cmVzb2x2ZTp5PT5hbyh1LGUseSkscmVqZWN0Oih5LE0pPT53byh1LGUsV2koeSksTSl9KX19ZnVuY3Rpb24gSWEoZSx0LG4scil7cmV0dXJuKC4uLmEpPT57bGV0IHU9UGkoZSxhLG4scik7aWYodSl0aHJvdyBuZXcgRXJyb3IodSk7cmV0dXJuIHQuYXBwbHkobnVsbCxhKX19ZnVuY3Rpb24gcWkoZSx0LG4scil7cmV0dXJuIEdpKGUsdCxuLHIpfWZ1bmN0aW9uIERuKGUsdCxuKXtyZXR1cm4gemkoZSx0LG4pfWZ1bmN0aW9uIFpyKGUsdCxuKXtyZXR1cm4gRm8oZSx0LG4pfWZ1bmN0aW9uIEVyKGUsdCxuLHIpe3JldHVybiBMcihlLEdpKGUsdCx2b2lkIDAscikpfWZ1bmN0aW9uIE10KGUsdCxuLHIpe3JldHVybiBJYShlLHQsdm9pZCAwLHIpfWZ1bmN0aW9uIFRlKGUsdCxuLHIpe3JldHVybiBMcihlLHFpKGUsdCx2b2lkIDAscikpfWxldCBmYT0iYmFzZTY0VG9BcnJheUJ1ZmZlciIsZm49W3tuYW1lOiJiYXNlNjQiLHR5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfV0sVm89ImFycmF5QnVmZmVyVG9CYXNlNjQiLE1yPVt7bmFtZToiYXJyYXlCdWZmZXIiLHR5cGU6W0FycmF5QnVmZmVyLFVpbnQ4QXJyYXldLHJlcXVpcmVkOiEwfV0sc289TXQoZmEsZT0+Z2koZSksZm4pLGxvPU10KFZvLGU9PkduKGUpLE1yKTtmdW5jdGlvbiBZaSgpe2lmKHR5cGVvZiBfX1NZU1RFTV9JTkZPX18hPSJ1bmRlZmluZWQiKXJldHVybiB3aW5kb3cuX19TWVNURU1fSU5GT19fO2xldHtyZXNvbHV0aW9uV2lkdGg6ZX09cy5zY3JlZW4uZ2V0Q3VycmVudFNpemUoKXx8e3Jlc29sdXRpb25XaWR0aDowfTtyZXR1cm57cGxhdGZvcm06KHMub3MubmFtZXx8IiIpLnRvTG93ZXJDYXNlKCkscGl4ZWxSYXRpbzpzLnNjcmVlbi5zY2FsZSx3aW5kb3dXaWR0aDpNYXRoLnJvdW5kKGUpfX1sZXQgS2k9ZT0+ZSE9PW51bGwmJnR5cGVvZiBlPT0ib2JqZWN0IixYcj1bInsiLCJ9Il07Y2xhc3MgbWl7Y29uc3RydWN0b3IoKXt0aGlzLl9jYWNoZXM9T2JqZWN0LmNyZWF0ZShudWxsKX1pbnRlcnBvbGF0ZSh0LG4scj1Ycil7aWYoIW4pcmV0dXJuW3RdO2xldCBhPXRoaXMuX2NhY2hlc1t0XTtyZXR1cm4gYXx8KGE9Q28odCxyKSx0aGlzLl9jYWNoZXNbdF09YSksUXIoYSxuKX19bGV0IFNyPS9eKD86XGQpKy8sRHI9L14oPzpcdykrLztmdW5jdGlvbiBDbyhlLFt0LG5dKXtsZXQgcj1bXSxhPTAsdT0iIjtmb3IoO2E8ZS5sZW5ndGg7KXtsZXQgZz1lW2ErK107aWYoZz09PXQpe3UmJnIucHVzaCh7dHlwZToidGV4dCIsdmFsdWU6dX0pLHU9IiI7bGV0IHk9IiI7Zm9yKGc9ZVthKytdO2chPT12b2lkIDAmJmchPT1uOyl5Kz1nLGc9ZVthKytdO2xldCBNPWc9PT1uLE89U3IudGVzdCh5KT8ibGlzdCI6TSYmRHIudGVzdCh5KT8ibmFtZWQiOiJ1bmtub3duIjtyLnB1c2goe3ZhbHVlOnksdHlwZTpPfSl9ZWxzZSB1Kz1nfXJldHVybiB1JiZyLnB1c2goe3R5cGU6InRleHQiLHZhbHVlOnV9KSxyfWZ1bmN0aW9uIFFyKGUsdCl7bGV0IG49W10scj0wLGE9QXJyYXkuaXNBcnJheSh0KT8ibGlzdCI6S2kodCk/Im5hbWVkIjoidW5rbm93biI7aWYoYT09PSJ1bmtub3duIilyZXR1cm4gbjtmb3IoO3I8ZS5sZW5ndGg7KXtsZXQgdT1lW3JdO3N3aXRjaCh1LnR5cGUpe2Nhc2UidGV4dCI6bi5wdXNoKHUudmFsdWUpO2JyZWFrO2Nhc2UibGlzdCI6bi5wdXNoKHRbcGFyc2VJbnQodS52YWx1ZSwxMCldKTticmVhaztjYXNlIm5hbWVkIjphPT09Im5hbWVkIiYmbi5wdXNoKHRbdS52YWx1ZV0pO2JyZWFrO2Nhc2UidW5rbm93biI6YnJlYWt9cisrfXJldHVybiBufWxldCBZdD0iemgtSGFucyIsUm49InpoLUhhbnQiLFVuPSJlbiIsZG49ImZyIixlcj0iZXMiLFVvPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksJG89KGUsdCk9PlVvLmNhbGwoZSx0KSxGcj1uZXcgbWk7ZnVuY3Rpb24gQW8oZSx0KXtyZXR1cm4hIXQuZmluZChuPT5lLmluZGV4T2YobikhPT0tMSl9ZnVuY3Rpb24gUW8oZSx0KXtyZXR1cm4gdC5maW5kKG49PmUuaW5kZXhPZihuKT09PTApfWZ1bmN0aW9uIFRvKGUsdCl7aWYoIWUpcmV0dXJuO2lmKGU9ZS50cmltKCkucmVwbGFjZSgvXy9nLCItIiksdCYmdFtlXSlyZXR1cm4gZTtpZihlPWUudG9Mb3dlckNhc2UoKSxlPT09ImNoaW5lc2UiKXJldHVybiBZdDtpZihlLmluZGV4T2YoInpoIik9PT0wKXJldHVybiBlLmluZGV4T2YoIi1oYW5zIik+LTE/WXQ6ZS5pbmRleE9mKCItaGFudCIpPi0xfHxBbyhlLFsiLXR3IiwiLWhrIiwiLW1vIiwiLWNodCJdKT9SbjpZdDtsZXQgbj1bVW4sZG4sZXJdO3QmJk9iamVjdC5rZXlzKHQpLmxlbmd0aD4wJiYobj1PYmplY3Qua2V5cyh0KSk7bGV0IHI9UW8oZSxuKTtpZihyKXJldHVybiByfWNsYXNzIGNve2NvbnN0cnVjdG9yKHtsb2NhbGU6dCxmYWxsYmFja0xvY2FsZTpuLG1lc3NhZ2VzOnIsd2F0Y2hlcjphLGZvcm1hdGVyOnV9KXt0aGlzLmxvY2FsZT1Vbix0aGlzLmZhbGxiYWNrTG9jYWxlPVVuLHRoaXMubWVzc2FnZT17fSx0aGlzLm1lc3NhZ2VzPXt9LHRoaXMud2F0Y2hlcnM9W10sbiYmKHRoaXMuZmFsbGJhY2tMb2NhbGU9biksdGhpcy5mb3JtYXRlcj11fHxGcix0aGlzLm1lc3NhZ2VzPXJ8fHt9LHRoaXMuc2V0TG9jYWxlKHR8fFVuKSxhJiZ0aGlzLndhdGNoTG9jYWxlKGEpfXNldExvY2FsZSh0KXtsZXQgbj10aGlzLmxvY2FsZTt0aGlzLmxvY2FsZT1Ubyh0LHRoaXMubWVzc2FnZXMpfHx0aGlzLmZhbGxiYWNrTG9jYWxlLHRoaXMubWVzc2FnZXNbdGhpcy5sb2NhbGVdfHwodGhpcy5tZXNzYWdlc1t0aGlzLmxvY2FsZV09e30pLHRoaXMubWVzc2FnZT10aGlzLm1lc3NhZ2VzW3RoaXMubG9jYWxlXSxuIT09dGhpcy5sb2NhbGUmJnRoaXMud2F0Y2hlcnMuZm9yRWFjaChyPT57cih0aGlzLmxvY2FsZSxuKX0pfWdldExvY2FsZSgpe3JldHVybiB0aGlzLmxvY2FsZX13YXRjaExvY2FsZSh0KXtsZXQgbj10aGlzLndhdGNoZXJzLnB1c2godCktMTtyZXR1cm4oKT0+e3RoaXMud2F0Y2hlcnMuc3BsaWNlKG4sMSl9fWFkZCh0LG4scj0hMCl7bGV0IGE9dGhpcy5tZXNzYWdlc1t0XTthP3I/T2JqZWN0LmFzc2lnbihhLG4pOk9iamVjdC5rZXlzKG4pLmZvckVhY2godT0+eyRvKGEsdSl8fChhW3VdPW5bdV0pfSk6dGhpcy5tZXNzYWdlc1t0XT1ufWYodCxuLHIpe3JldHVybiB0aGlzLmZvcm1hdGVyLmludGVycG9sYXRlKHQsbixyKS5qb2luKCIiKX10KHQsbixyKXtsZXQgYT10aGlzLm1lc3NhZ2U7cmV0dXJuIHR5cGVvZiBuPT0ic3RyaW5nIj8obj1UbyhuLHRoaXMubWVzc2FnZXMpLG4mJihhPXRoaXMubWVzc2FnZXNbbl0pKTpyPW4sJG8oYSx0KT90aGlzLmZvcm1hdGVyLmludGVycG9sYXRlKGFbdF0scikuam9pbigiIik6KGNvbnNvbGUud2FybihgQ2Fubm90IHRyYW5zbGF0ZSB0aGUgdmFsdWUgb2Yga2V5cGF0aCAke3R9LiBVc2UgdGhlIHZhbHVlIG9mIGtleXBhdGggYXMgZGVmYXVsdC5gKSx0KX19ZnVuY3Rpb24gX2koZSx0KXtlLiR3YXRjaExvY2FsZT9lLiR3YXRjaExvY2FsZShuPT57dC5zZXRMb2NhbGUobil9KTplLiR3YXRjaCgoKT0+ZS4kbG9jYWxlLG49Pnt0LnNldExvY2FsZShuKX0pfWZ1bmN0aW9uIEhvKCl7cmV0dXJuIHR5cGVvZiBSIT0idW5kZWZpbmVkIiYmUi5nZXRMb2NhbGU/Ui5nZXRMb2NhbGUoKTp0eXBlb2YgZ2xvYmFsIT0idW5kZWZpbmVkIiYmZ2xvYmFsLmdldExvY2FsZT9nbG9iYWwuZ2V0TG9jYWxlKCk6VW59ZnVuY3Rpb24gTmkoZSx0PXt9LG4scil7aWYodHlwZW9mIGUhPSJzdHJpbmciKXtsZXQgZz1bdCxlXTtlPWdbMF0sdD1nWzFdfXR5cGVvZiBlIT0ic3RyaW5nIiYmKGU9SG8oKSksdHlwZW9mIG4hPSJzdHJpbmciJiYobj10eXBlb2YgSSE9InVuZGVmaW5lZCImJkkuZmFsbGJhY2tMb2NhbGV8fFVuKTtsZXQgYT1uZXcgY28oe2xvY2FsZTplLGZhbGxiYWNrTG9jYWxlOm4sbWVzc2FnZXM6dCx3YXRjaGVyOnJ9KSx1PShnLHkpPT57aWYodHlwZW9mIEF0IT0iZnVuY3Rpb24iKXU9ZnVuY3Rpb24oTSxPKXtyZXR1cm4gYS50KE0sTyl9O2Vsc2V7bGV0IE09ITE7dT1mdW5jdGlvbihPLHgpe2xldCBoZT1BdCgpLiR2bTtyZXR1cm4gaGUmJihoZS4kbG9jYWxlLE18fChNPSEwLF9pKGhlLGEpKSksYS50KE8seCl9fXJldHVybiB1KGcseSl9O3JldHVybntpMThuOmEsZihnLHksTSl7cmV0dXJuIGEuZihnLHksTSl9LHQoZyx5KXtyZXR1cm4gdShnLHkpfSxhZGQoZyx5LE09ITApe3JldHVybiBhLmFkZChnLHksTSl9LHdhdGNoKGcpe3JldHVybiBhLndhdGNoTG9jYWxlKGcpfSxnZXRMb2NhbGUoKXtyZXR1cm4gYS5nZXRMb2NhbGUoKX0sc2V0TG9jYWxlKGcpe3JldHVybiBhLnNldExvY2FsZShnKX19fWZ1bmN0aW9uIGJpKGUsdCl7cmV0dXJuIGUuaW5kZXhPZih0WzBdKT4tMX1sZXQgSWk9bmUub25jZSgoKT0+dHlwZW9mIEkhPSJ1bmRlZmluZWQiJiZJLmxvY2FsZXMmJiEhT2JqZWN0LmtleXMoSS5sb2NhbGVzKS5sZW5ndGgpLEQ7ZnVuY3Rpb24geigpe2xldCBlPVIuZ2V0TG9jYWxlKCksdD1JLmxvY2FsZXM7cmV0dXJuIHRbZV18fHRbSS5mYWxsYmFja0xvY2FsZV18fHQuZW58fHt9fWZ1bmN0aW9uIGxlKGUpe3JldHVybiBiaShlLG5lLkkxOE5fSlNPTl9ERUxJTUlURVJTKT9xZSgpLmYoZSx6KCksbmUuSTE4Tl9KU09OX0RFTElNSVRFUlMpOmV9ZnVuY3Rpb24gSGUoZSx0KXtpZih0Lmxlbmd0aD09PTEpe2lmKGUpe2xldCByPXk9PkcuaXNTdHJpbmcoeSkmJmJpKHksbmUuSTE4Tl9KU09OX0RFTElNSVRFUlMpLGE9dFswXSx1PVtdO2lmKEcuaXNBcnJheShlKSYmKHU9ZS5maWx0ZXIoeT0+cih5W2FdKSkpLmxlbmd0aClyZXR1cm4gdTtsZXQgZz1lW3RbMF1dO2lmKHIoZykpcmV0dXJuIGV9cmV0dXJufWxldCBuPXQuc2hpZnQoKTtyZXR1cm4gSGUoZSYmZVtuXSx0KX1mdW5jdGlvbiBqZShlLHQpe3JldHVybiB0Lm1hcChuPT5kdChlLG4pKX1mdW5jdGlvbiBkdChlLHQpe2xldCBuPUhlKGUsdCk7aWYoIW4pcmV0dXJuITE7bGV0IHI9dFt0Lmxlbmd0aC0xXTtpZihHLmlzQXJyYXkobikpbi5mb3JFYWNoKGE9PmR0KGEsW3JdKSk7ZWxzZXtsZXQgYT1uW3JdO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHIse2dldCgpe3JldHVybiBsZShhKX0sc2V0KHUpe2E9dX19KX1yZXR1cm4hMH1mdW5jdGlvbiBxZSgpe2lmKCFEKXtsZXQgZTtpZih0eXBlb2YgQXQ9PSJmdW5jdGlvbiI/ZT1mLnJlcXVpcmVNb2R1bGUoInBsdXMiKS5nZXRMYW5ndWFnZSgpOmU9cy53ZWJ2aWV3LmN1cnJlbnRXZWJ2aWV3KCkuZ2V0U3R5bGUoKS5sb2NhbGUsRD1OaShlKSxJaSgpKXtsZXQgdD1PYmplY3Qua2V5cyhJLmxvY2FsZXN8fHt9KTt0Lmxlbmd0aCYmdC5mb3JFYWNoKG49PkQuYWRkKG4sSS5sb2NhbGVzW25dKSksRC5zZXRMb2NhbGUoZSl9fXJldHVybiBEfWZ1bmN0aW9uIG50KGUsdCxuKXtyZXR1cm4gdC5yZWR1Y2UoKHIsYSx1KT0+KHJbZSthXT1uW3VdLHIpLHt9KX1sZXQgVHI9bmUub25jZSgoKT0+e2xldCBlPSJ1bmkuYXBwLiIsdD1bInF1aXQiXTtxZSgpLmFkZChVbixudChlLHQsWyJQcmVzcyBiYWNrIGJ1dHRvbiBhZ2FpbiB0byBleGl0Il0pLCExKSxxZSgpLmFkZChlcixudChlLHQsWyJQdWxzZSBvdHJhIHZleiBwYXJhIHNhbGlyIl0pLCExKSxxZSgpLmFkZChkbixudChlLHQsWyJBcHB1eWV6IFx4RTAgbm91dmVhdSBwb3VyIHF1aXR0ZXIgbCdhcHBsaWNhdGlvbiJdKSwhMSkscWUoKS5hZGQoWXQsbnQoZSx0LFsiXHU1MThEXHU2MzA5XHU0RTAwXHU2QjIxXHU5MDAwXHU1MUZBXHU1RTk0XHU3NTI4Il0pLCExKSxxZSgpLmFkZChSbixudChlLHQsWyJcdTUxOERcdTYzMDlcdTRFMDBcdTZCMjFcdTkwMDBcdTUxRkFcdTYxQzlcdTc1MjgiXSksITEpfSksa2k9bmUub25jZSgoKT0+e2xldCBlPSJ1bmkuc2hvd0FjdGlvblNoZWV0LiIsdD1bImNhbmNlbCJdO3FlKCkuYWRkKFVuLG50KGUsdCxbIkNhbmNlbCJdKSwhMSkscWUoKS5hZGQoZXIsbnQoZSx0LFsiQ2FuY2VsYXIiXSksITEpLHFlKCkuYWRkKGRuLG50KGUsdCxbIkFubnVsZXIiXSksITEpLHFlKCkuYWRkKFl0LG50KGUsdCxbIlx1NTNENlx1NkQ4OCJdKSwhMSkscWUoKS5hZGQoUm4sbnQoZSx0LFsiXHU1M0Q2XHU2RDg4Il0pLCExKX0pLE9yPW5lLm9uY2UoKCk9PntsZXQgZT0idW5pLnNob3dNb2RhbC4iLHQ9WyJjYW5jZWwiLCJjb25maXJtIl07cWUoKS5hZGQoVW4sbnQoZSx0LFsiQ2FuY2VsIiwiT0siXSksITEpLHFlKCkuYWRkKGVyLG50KGUsdCxbIkNhbmNlbGFyIiwiT0siXSksITEpLHFlKCkuYWRkKGRuLG50KGUsdCxbIkFubnVsZXIiLCJPSyJdKSwhMSkscWUoKS5hZGQoWXQsbnQoZSx0LFsiXHU1M0Q2XHU2RDg4IiwiXHU3ODZFXHU1QjlBIl0pLCExKSxxZSgpLmFkZChSbixudChlLHQsWyJcdTUzRDZcdTZEODgiLCJcdTc4QkFcdTVCOUEiXSksITEpfSksUHI9bmUub25jZSgoKT0+e2xldCBlPSJ1bmkuY2hvb3NlSW1hZ2UuIix0PVsiY2FuY2VsIiwic291cmNlVHlwZS5hbGJ1bSIsInNvdXJjZVR5cGUuY2FtZXJhIl07cWUoKS5hZGQoVW4sbnQoZSx0LFsiQ2FuY2VsIiwiQWxidW0iLCJDYW1lcmEiXSksITEpLHFlKCkuYWRkKGVyLG50KGUsdCxbIkNhbmNlbGFyIiwiXHhDMWxidW0iLCJDXHhFMW1hcmEiXSksITEpLHFlKCkuYWRkKGRuLG50KGUsdCxbIkFubnVsZXIiLCJBbGJ1bSIsIkNhbVx4RTlyYSJdKSwhMSkscWUoKS5hZGQoWXQsbnQoZSx0LFsiXHU1M0Q2XHU2RDg4IiwiXHU0RUNFXHU3NkY4XHU1MThDXHU5MDA5XHU2MkU5IiwiXHU2MkNEXHU2NDQ0Il0pLCExKSxxZSgpLmFkZChSbixudChlLHQsWyJcdTUzRDZcdTZEODgiLCJcdTVGOUVcdTc2RjhcdTUxOEFcdTkwNzhcdTY0QzciLCJcdTYyQ0RcdTY1MUQiXSksITEpfSksdW89bmUub25jZSgoKT0+e2xldCBlPSJ1bmkuY2hvb3NlVmlkZW8uIix0PVsiY2FuY2VsIiwic291cmNlVHlwZS5hbGJ1bSIsInNvdXJjZVR5cGUuY2FtZXJhIl07cWUoKS5hZGQoVW4sbnQoZSx0LFsiQ2FuY2VsIiwiQWxidW0iLCJDYW1lcmEiXSksITEpLHFlKCkuYWRkKGVyLG50KGUsdCxbIkNhbmNlbGFyIiwiXHhDMWxidW0iLCJDXHhFMW1hcmEiXSksITEpLHFlKCkuYWRkKGRuLG50KGUsdCxbIkFubnVsZXIiLCJBbGJ1bSIsIkNhbVx4RTlyYSJdKSwhMSkscWUoKS5hZGQoWXQsbnQoZSx0LFsiXHU1M0Q2XHU2RDg4IiwiXHU0RUNFXHU3NkY4XHU1MThDXHU5MDA5XHU2MkU5IiwiXHU2MkNEXHU2NDQ0Il0pLCExKSxxZSgpLmFkZChSbixudChlLHQsWyJcdTUzRDZcdTZEODgiLCJcdTVGOUVcdTc2RjhcdTUxOEFcdTkwNzhcdTY0QzciLCJcdTYyQ0RcdTY1MUQiXSksITEpfSksZm89bmUub25jZSgoKT0+e2xldCBlPSJ1bmkucHJldmlld0ltYWdlLiIsdD1bImNhbmNlbCIsImJ1dHRvbi5zYXZlIiwic2F2ZS5zdWNjZXNzIiwic2F2ZS5mYWlsIl07cWUoKS5hZGQoVW4sbnQoZSx0LFsiQ2FuY2VsIiwiU2F2ZSBJbWFnZSIsIlNhdmVkIHN1Y2Nlc3NmdWxseSIsIlNhdmUgZmFpbGVkIl0pLCExKSxxZSgpLmFkZChlcixudChlLHQsWyJDYW5jZWxhciIsIkd1YXJkYXIgaW1hZ2VuIiwiR3VhcmRhZG8gZXhpdG9zYW1lbnRlIiwiRXJyb3IgYWwgZ3VhcmRhciJdKSwhMSkscWUoKS5hZGQoZG4sbnQoZSx0LFsiQW5udWxlciIsIkd1YXJkYXIgaW1hZ2VuIiwiRW5yZWdpc3RyXHhFOSBhdmVjIHN1Y2NceEU4cyIsIlx4QzljaGVjIGRlIGxhIHNhdXZlZ2FyZGUiXSksITEpLHFlKCkuYWRkKFl0LG50KGUsdCxbIlx1NTNENlx1NkQ4OCIsIlx1NEZERFx1NUI1OFx1NTZGRVx1NTBDRiIsIlx1NEZERFx1NUI1OFx1NTZGRVx1NTBDRlx1NTIzMFx1NzZGOFx1NTE4Q1x1NjIxMFx1NTI5RiIsIlx1NEZERFx1NUI1OFx1NTZGRVx1NTBDRlx1NTIzMFx1NzZGOFx1NTE4Q1x1NTkzMVx1OEQyNSJdKSwhMSkscWUoKS5hZGQoUm4sbnQoZSx0LFsiXHU1M0Q2XHU2RDg4IiwiXHU0RkREXHU1QjU4XHU1NzE2XHU1MENGIiwiXHU0RkREXHU1QjU4XHU1NzE2XHU1MENGXHU1MjMwXHU3NkY4XHU1MThBXHU2MjEwXHU1MjlGIiwiXHU0RkREXHU1QjU4XHU1NzE2XHU1MENGXHU1MjMwXHU3NkY4XHU1MThBXHU1OTMxXHU2NTU3Il0pLCExKX0pLE9vPW5lLm9uY2UoKCk9PntsZXQgZT0idW5pLnNldENsaXBib2FyZERhdGEuIix0PVsic3VjY2VzcyIsImZhaWwiXTtxZSgpLmFkZChVbixudChlLHQsWyJDb250ZW50IGNvcGllZCIsIkNvcHkgZmFpbGVkLCBwbGVhc2UgY29weSBtYW51YWxseSJdKSwhMSkscWUoKS5hZGQoZXIsbnQoZSx0LFsiQ29udGVuaWRvIGNvcGlhZG8iLCJFcnJvciBhbCBjb3BpYXIsIGNvcGllIG1hbnVhbG1lbnRlIl0pLCExKSxxZSgpLmFkZChkbixudChlLHQsWyJDb250ZW51IGNvcGlceEU5IiwiXHhDOWNoZWMgZGUgbGEgY29waWUsIGNvcGlleiBtYW51ZWxsZW1lbnQiXSksITEpLHFlKCkuYWRkKFl0LG50KGUsdCxbIlx1NTE4NVx1NUJCOVx1NURGMlx1NTkwRFx1NTIzNiIsIlx1NTkwRFx1NTIzNlx1NTkzMVx1OEQyNVx1RkYwQ1x1OEJGN1x1NjI0Qlx1NTJBOFx1NTkwRFx1NTIzNiJdKSwhMSkscWUoKS5hZGQoUm4sbnQoZSx0LFsiXHU1MTY3XHU1QkI5XHU1REYyXHU1RkE5XHU1MjM2IiwiXHU1RkE5XHU1MjM2XHU1OTMxXHU2NTU3XHVGRjBDXHU4QUNCXHU2MjRCXHU1MkQ1XHU1RkE5XHU4OEZEIl0pLCExKX0pLGNpPW5lLm9uY2UoKCk9PntsZXQgZT0idW5pLnNjYW5Db2RlLiIsdD1bInRpdGxlIiwiYWxidW0iLCJmYWlsIiwiZmxhc2gub24iLCJmbGFzaC5vZmYiXTtxZSgpLmFkZChVbixudChlLHQsWyJTY2FuIGNvZGUiLCJBbGJ1bSIsIlJlY29nbml0aW9uIGZhaWx1cmUiLCJUYXAgdG8gdHVybiBsaWdodCBvbiIsIlRhcCB0byB0dXJuIGxpZ2h0IG9mZiJdKSwhMSkscWUoKS5hZGQoZXIsbnQoZSx0LFsiQ1x4RjNkaWdvIGRlIGVzY2FuZW8iLCJceEMxbGJ1bSIsIlx4QzljaGVjIGRlIGxhIHJlY29ubmFpc3NhbmNlIiwiVG9xdWUgcGFyYSBlbmNlbmRlciBsYSBsdXoiLCJUb3F1ZSBwYXJhIGFwYWdhciBsYSBsdXoiXSksITEpLHFlKCkuYWRkKGRuLG50KGUsdCxbIkNvZGUgZFx1MjAxOWFuYWx5c2UiLCJBbGJ1bSIsIkZhbGxvIGRlIHJlY29ub2NpbWllbnRvIiwiQXBwdXlleiBwb3VyIGFjdGl2ZXIgbCdceEU5Y2xhaXJhZ2UiLCJBcHB1eWV6IHBvdXIgZFx4RTlzYWN0aXZlciBsJ1x4RTljbGFpcmFnZSJdKSwhMSkscWUoKS5hZGQoWXQsbnQoZSx0LFsiXHU2MjZCXHU3ODAxIiwiXHU3NkY4XHU1MThDIiwiXHU4QkM2XHU1MjJCXHU1OTMxXHU4RDI1IiwiXHU4RjdCXHU4OUU2XHU3MTY3XHU0RUFFIiwiXHU4RjdCXHU4OUU2XHU1MTczXHU5NUVEIl0pLCExKSxxZSgpLmFkZChSbixudChlLHQsWyJcdTYzODNcdTc4QkMiLCJcdTc2RjhcdTUxOEEiLCJcdThCNThcdTUyMjVcdTU5MzFcdTY1NTciLCJcdThGMTVcdTg5RjhcdTcxNjdcdTRFQUUiLCJcdThGMTVcdTg5RjhcdTk1RENcdTk1ODkiXSksITEpfSksam89bmUub25jZSgoKT0+e2xldCBlPSJ1bmkuc3RhcnRTb3RlckF1dGhlbnRpY2F0aW9uLiIsdD1bImF1dGhDb250ZW50Iiwid2FpdGluZ0NvbnRlbnQiXTtxZSgpLmFkZChVbixudChlLHQsWyJGaW5nZXJwcmludCByZWNvZ25pdGlvbiIsIlVucmVjb2duaXphYmxlIl0pLCExKSxxZSgpLmFkZChlcixudChlLHQsWyJSZWNvbm9jaW1pZW50byBkZSBodWVsbGFzIGRhY3RpbGFyZXMiLCJJcnJlY29ub2NpYmxlIl0pLCExKSxxZSgpLmFkZChkbixudChlLHQsWyJSZWNvbm5haXNzYW5jZSBkZSBsJ2VtcHJlaW50ZSBkaWdpdGFsZSIsIk1ceEU5Y29ubmFpc3NhYmxlIl0pLCExKSxxZSgpLmFkZChZdCxudChlLHQsWyJcdTYzMDdcdTdFQjlcdThCQzZcdTUyMkJcdTRFMkQuLi4iLCJcdTY1RTBcdTZDRDVcdThCQzZcdTUyMkIiXSksITEpLHFlKCkuYWRkKFJuLG50KGUsdCxbIlx1NjMwN1x1N0QwQlx1OEI1OFx1NTIyNVx1NEUyRC4uLiIsIlx1NzEyMVx1NkNENVx1OEI1OFx1NTIyNSJdKSwhMSl9KTtmdW5jdGlvbiBKaShlKXtpZihJaSgpKXJldHVybiBqZShlLFtbInRpdGxlVGV4dCJdLFsic2VhcmNoSW5wdXQiLCJwbGFjZWhvbGRlciJdLFsiYnV0dG9ucyIsInRleHQiXV0pfWZ1bmN0aW9uIGthKGUpe2lmKElpKCkpe2xldCB0PSJjYXB0aW9uIjtyZXR1cm4gamUoZSxbWyJjb250ZW50ZG93biIsdF0sWyJjb250ZW50b3ZlciIsdF0sWyJjb250ZW50cmVmcmVzaCIsdF1dKX19ZnVuY3Rpb24gb2UoZSl7bGV0IHQ9bmV3IG5lLkVtaXR0ZXI7cmV0dXJue29uKG4scil7cmV0dXJuIHQub24obixyKX0sb25jZShuLHIpe3JldHVybiB0Lm9uY2UobixyKX0sb2ZmKG4scil7cmV0dXJuIHQub2ZmKG4scil9LGVtaXQobiwuLi5yKXtyZXR1cm4gdC5lbWl0KG4sLi4ucil9LHN1YnNjcmliZShuLHIsYT0hMSl7dFthPyJvbmNlIjoib24iXShgJHtlfS4ke259YCxyKX0sdW5zdWJzY3JpYmUobixyKXt0Lm9mZihgJHtlfS4ke259YCxyKX0sc3Vic2NyaWJlSGFuZGxlcihuLHIsYSl7dC5lbWl0KGAke2V9LiR7bn1gLHIsYSl9fX1sZXQgWT0iaW52b2tlVmlld0FwaSIsYWU9Imludm9rZVNlcnZpY2VBcGkiO2Z1bmN0aW9uIE1lKGUpe3JldHVybiBlPWUrIiIsZS5pbmRleE9mKCJycHgiKSE9PS0xfHxlLmluZGV4T2YoInVweCIpIT09LTF9ZnVuY3Rpb24gdXQoZSx0PSExKXtpZih0KXJldHVybiBobihlKTtpZihHLmlzU3RyaW5nKGUpKXtsZXQgbj1wYXJzZUludChlKXx8MDtyZXR1cm4gTWUoZSk/Ui51cHgycHgobik6bn1yZXR1cm4gZX1mdW5jdGlvbiBobihlKXtyZXR1cm4gTWUoZSk/ZS5yZXBsYWNlKC8oXGQrKFwuXGQrKT8pW3J1XXB4L2csKHQsbik9PlIudXB4MnB4KHBhcnNlRmxvYXQobikpKyJweCIpOmV9ZnVuY3Rpb24gcHIoZSl7cmV0dXJuIGUuJHBhZ2V9ZnVuY3Rpb24gQW4oZSl7bGV0IHQ9bmUucmVzb2x2ZUNvbXBvbmVudEluc3RhbmNlKGUpO2lmKHQuJHBhZ2UpcmV0dXJuIElzKHQpO2lmKCF0LiQpcmV0dXJuO2xldCBuPXQuJC5yb290LnByb3h5O2lmKG4mJm4uJHBhZ2UpcmV0dXJuIElzKG4pfWZ1bmN0aW9uIHpuKCl7bGV0IGU9Wm4oKSx0PWUubGVuZ3RoO2lmKHQpcmV0dXJuIGVbdC0xXX1mdW5jdGlvbiBOcigpe3ZhciBlO2xldCB0PShlPXpuKCkpPT09bnVsbHx8ZT09PXZvaWQgMD92b2lkIDA6ZS4kcGFnZTtpZih0KXJldHVybiB0Lm1ldGF9ZnVuY3Rpb24gaG8oKXtsZXQgZT1OcigpO3JldHVybiBlP2UuaWQ6LTF9ZnVuY3Rpb24gdnIoKXtsZXQgZT16bigpO2lmKGUpcmV0dXJuIGUuJHZtfWxldCBkYT1bIm5hdmlnYXRpb25CYXIiLCJwdWxsVG9SZWZyZXNoIl07ZnVuY3Rpb24gUG8oKXtyZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShJLmdsb2JhbFN0eWxlfHx7fSkpfWZ1bmN0aW9uIFJhKGUsdCl7bGV0IG49UG8oKSxyPUcuZXh0ZW5kKHtpZDp0fSxuLGUpO2RhLmZvckVhY2godT0+e3JbdV09Ry5leHRlbmQoe30sblt1XSxlW3VdKX0pO2xldHtuYXZpZ2F0aW9uQmFyOmF9PXI7cmV0dXJuIGEudGl0bGVUZXh0JiZhLnRpdGxlSW1hZ2UmJihhLnRpdGxlVGV4dD0iIikscn1mdW5jdGlvbiBoYShlKXtyZXR1cm4gSlNPTi5wYXJzZSh1dChKU09OLnN0cmluZ2lmeShlKSwhMCkpfWZ1bmN0aW9uIE5zKGUpe3JldHVybiBlLm9mZnNldCYmKGUub2Zmc2V0PXV0KGUub2Zmc2V0KSksZS5oZWlnaHQmJihlLmhlaWdodD11dChlLmhlaWdodCkpLGUucmFuZ2UmJihlLnJhbmdlPXV0KGUucmFuZ2UpKSxlfWZ1bmN0aW9uIFlhKGUsdCxuLHIsYSx1KXtsZXR7aWQ6Zyxyb3V0ZTp5fT1yLE09bmUubm9ybWFsaXplU3R5bGVzKHIubmF2aWdhdGlvbkJhcixJLnRoZW1lQ29uZmlnLHUpLnRpdGxlQ29sb3I7cmV0dXJue2lkOmcscGF0aDpuZS5hZGRMZWFkaW5nU2xhc2goeSkscm91dGU6eSxmdWxsUGF0aDp0LG9wdGlvbnM6bixtZXRhOnIsb3BlblR5cGU6ZSxldmVudENoYW5uZWw6YSxzdGF0dXNCYXJTdHlsZTpNPT09IiNmZmZmZmYiPyJsaWdodCI6ImRhcmsifX1mdW5jdGlvbiBJcyhlKXt2YXIgdCxuO3JldHVybigodD1lLiRwYWdlKT09PW51bGx8fHQ9PT12b2lkIDA/dm9pZCAwOnQuaWQpfHwoKG49ZS4kYmFzZVBhZ2UpPT09bnVsbHx8bj09PXZvaWQgMD92b2lkIDA6bi5pZCl9ZnVuY3Rpb24gbmwoZSx0LG4pe2xldCByPWUuJFt0XTshRy5pc0FycmF5KHIpfHxuLl9fd2VoJiZHLnJlbW92ZShyLG4uX193ZWgpfWZ1bmN0aW9uIHRyKGUsdCxuKXtpZihHLmlzU3RyaW5nKGUpKW49dCx0PWUsZT12cigpO2Vsc2UgaWYodHlwZW9mIGU9PSJudW1iZXIiKXtsZXQgYT1abigpLmZpbmQodT0+cHIodSkuaWQ9PT1lKTthP2U9YS4kdm06ZT12cigpfWlmKCFlKXJldHVybjtpZihlLl9fY2FsbF9ob29rKXJldHVybiBlLl9fY2FsbF9ob29rKHQsbik7bGV0IHI9ZS4kW3RdO3JldHVybiByJiZuZS5pbnZva2VBcnJheUZucyhyLG4pfWZ1bmN0aW9uIHJsKGUpe2lmKGUuaW5kZXhPZigiLyIpPT09MHx8ZS5pbmRleE9mKCJ1bmk6Iik9PT0wKXJldHVybiBlO2xldCB0PSIiLG49Wm4oKTtyZXR1cm4gbi5sZW5ndGgmJih0PXByKG5bbi5sZW5ndGgtMV0pLnJvdXRlKSx4YSh0LGUpfWZ1bmN0aW9uIHhhKGUsdCl7aWYodC5pbmRleE9mKCIvIik9PT0wKXJldHVybiB0O2lmKHQuaW5kZXhPZigiLi8iKT09PTApcmV0dXJuIHhhKGUsdC5zbGljZSgyKSk7bGV0IG49dC5zcGxpdCgiLyIpLHI9bi5sZW5ndGgsYT0wO2Zvcig7YTxyJiZuW2FdPT09Ii4uIjthKyspO24uc3BsaWNlKDAsYSksdD1uLmpvaW4oIi8iKTtsZXQgdT1lLmxlbmd0aD4wP2Uuc3BsaXQoIi8iKTpbXTtyZXR1cm4gdS5zcGxpY2UodS5sZW5ndGgtYS0xLGErMSksbmUuYWRkTGVhZGluZ1NsYXNoKHUuY29uY2F0KG4pLmpvaW4oIi8iKSl9ZnVuY3Rpb24geWkoZSx0PSExKXtyZXR1cm4gdD9TZS5maW5kKG49Pm4ucGF0aD09PWV8fG4uYWxpYXM9PT1lKTpTZS5maW5kKG49Pm4ucGF0aD09PWUpfWZ1bmN0aW9uIGtzKGUpe2xldCB0PXlpKGUpO2lmKHQpcmV0dXJuIHQubWV0YX1mdW5jdGlvbiBpbChlLHQsbil7bGV0IHI9eWkobmUuYWRkTGVhZGluZ1NsYXNoKHQpKTtpZihyKXtsZXR7bWV0YTp1fT1yO2RlbGV0ZSB1LnRhYkJhckluZGV4LHUuaXNRdWl0PXUuaXNUYWJCYXI9ITF9bGV0IGE9eWkobmUuYWRkTGVhZGluZ1NsYXNoKG4pKTtpZihhKXtsZXR7bWV0YTp1fT1hO3UudGFiQmFySW5kZXg9ZSx1LmlzUXVpdD11LmlzVGFiQmFyPSEwO2xldCBnPUkudGFiQmFyO2cmJmcubGlzdCYmZy5saXN0W2VdJiYoZy5saXN0W2VdLnBhZ2VQYXRoPW5lLnJlbW92ZUxlYWRpbmdTbGFzaChuKSl9fWxldCBSaSxnYSx6bztmdW5jdGlvbiBScygpe3JldHVybiB0eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmdHlwZW9mIG5hdmlnYXRvcj09Im9iamVjdCImJnR5cGVvZiBkb2N1bWVudD09Im9iamVjdCI/IndlYnZpZXciOiJ2OCJ9ZnVuY3Rpb24geHMoKXtyZXR1cm4gUmkud2Vidmlldy5jdXJyZW50V2VidmlldygpLmlkfWxldCBCYSxwYSxMYT17fTtmdW5jdGlvbiBlYShlKXtsZXQgdD1lLmRhdGEmJmUuZGF0YS5fX21lc3NhZ2U7aWYoIXR8fCF0Ll9fcGFnZSlyZXR1cm47bGV0IG49dC5fX3BhZ2Uscj1MYVtuXTtyJiZyKHQpLHQua2VlcHx8ZGVsZXRlIExhW25dfWZ1bmN0aW9uIEJzKGUsdCl7UnMoKT09PSJ2OCI/em8/KEJhJiZCYS5jbG9zZSgpLEJhPW5ldyB6byh4cygpKSxCYS5vbm1lc3NhZ2U9ZWEpOnBhfHwocGE9Z2EucmVxdWlyZU1vZHVsZSgiZ2xvYmFsRXZlbnQiKSxwYS5hZGRFdmVudExpc3RlbmVyKCJwbHVzTWVzc2FnZSIsZWEpKTp3aW5kb3cuX19wbHVzTWVzc2FnZT1lYSxMYVtlXT10fWNsYXNzIGRze2NvbnN0cnVjdG9yKHQpe3RoaXMud2Vidmlldz10fXNlbmRNZXNzYWdlKHQpe2xldCBuPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoe19fbWVzc2FnZTp7ZGF0YTp0fX0pKSxyPXRoaXMud2Vidmlldy5pZDt6bz9uZXcgem8ocikucG9zdE1lc3NhZ2Uobik6Umkud2Vidmlldy5wb3N0TWVzc2FnZVRvVW5pTlZpZXcmJlJpLndlYnZpZXcucG9zdE1lc3NhZ2VUb1VuaU5WaWV3KG4scil9Y2xvc2UoKXt0aGlzLndlYnZpZXcuY2xvc2UoKX19ZnVuY3Rpb24geGkoe2NvbnRleHQ6ZT17fSx1cmw6dCxkYXRhOm49e30sc3R5bGU6cj17fSxvbk1lc3NhZ2U6YSxvbkNsb3NlOnV9KXtsZXQgZz1JLmRhcmttb2RlO1JpPWUucGx1c3x8cyxnYT1lLndlZXh8fCh0eXBlb2YgZj09Im9iamVjdCI/ZjpudWxsKSx6bz1lLkJyb2FkY2FzdENoYW5uZWx8fCh0eXBlb2YgQnJvYWRjYXN0Q2hhbm5lbD09Im9iamVjdCI/QnJvYWRjYXN0Q2hhbm5lbDpudWxsKTtsZXQgeT17YXV0b0JhY2tCdXR0b246ITAsdGl0bGVTaXplOiIxN3B4In0sTT1gcGFnZSR7RGF0ZS5ub3coKX1gO3I9Ry5leHRlbmQoe30sciksci50aXRsZU5WaWV3IT09ITEmJnIudGl0bGVOVmlldyE9PSJub25lIiYmKHIudGl0bGVOVmlldz1HLmV4dGVuZCh5LHIudGl0bGVOVmlldykpO2xldCBPPXt0b3A6MCxib3R0b206MCx1c2luZ0NvbXBvbmVudHM6e30scG9wR2VzdHVyZToiY2xvc2UiLHNjcm9sbEluZGljYXRvcjoibm9uZSIsYW5pbWF0aW9uVHlwZToicG9wLWluIixhbmltYXRpb25EdXJhdGlvbjoyMDAsdW5pTlZpZXc6e3BhdGg6YC8ke3R9LmpzYCxkZWZhdWx0Rm9udFNpemU6MTYsdmlld3BvcnQ6Umkuc2NyZWVuLnJlc29sdXRpb25XaWR0aH19O3I9Ry5leHRlbmQoTyxyKTtsZXQgeD1SaS53ZWJ2aWV3LmNyZWF0ZSgiIixNLHIse2V4dHJhczp7ZnJvbTp4cygpLHJ1bnRpbWU6UnMoKSxkYXRhOkcuZXh0ZW5kKHt9LG4se2Rhcmttb2RlOmd9KSx1c2VHbG9iYWxFdmVudDohem99fSk7cmV0dXJuIHguYWRkRXZlbnRMaXN0ZW5lcigiY2xvc2UiLHUpLEJzKE0saGU9PntHLmlzRnVuY3Rpb24oYSkmJmEoaGUuZGF0YSksaGUua2VlcHx8eC5jbG9zZSgiYXV0byIpfSkseC5zaG93KHIuYW5pbWF0aW9uVHlwZSxyLmFuaW1hdGlvbkR1cmF0aW9uKSxuZXcgZHMoeCl9bGV0IHZhPShlLHQpPT5zdC5lbWl0KCJhcGkuIitlLHQpLFdyPTE7ZnVuY3Rpb24gV28oZSl7cmV0dXJuKGV8fGhvKCkpKyIuIitZfWxldCBocz0oZSx0LG4scik9PntsZXR7c3Vic2NyaWJlOmEscHVibGlzaEhhbmRsZXI6dX09c3QsZz1yP1dyKys6MDtyJiZhKFkrIi4iK2csciwhMCksdShXbyhuKSx7aWQ6ZyxuYW1lOmUsYXJnczp0fSxuKX0sZ3M9KGUsdCxuLHIpPT57bGV0e3N1YnNjcmliZTphLHVuc3Vic2NyaWJlOnUscHVibGlzaEhhbmRsZXI6Z309c3QseT1XcisrLE09WSsiLiIreTtyZXR1cm4gYShNLG4pLGcoV28ocikse2lkOnksbmFtZTplLGFyZ3M6dH0sciksKCk9Pnt1KE0pfX0sSXI9T2JqZWN0LmNyZWF0ZShudWxsKTtmdW5jdGlvbiBnbygpe3N0LnN1YnNjcmliZShhZSxtYSl9ZnVuY3Rpb24gTWEoZSx0KXtJcltlXXx8KElyW2VdPXQpfWZ1bmN0aW9uIG1hKHtpZDplLG5hbWU6dCxhcmdzOm59LHIpe2xldCBhPWc9PntlJiZzdC5wdWJsaXNoSGFuZGxlcihhZSsiLiIrZSxnLHIpfSx1PUlyW3RdO3U/dShuLGEpOmEoe30pfWxldCBLYT1HLmV4dGVuZChvZSgidmlldyIpLHtpbnZva2VPbkNhbGxiYWNrOnZhLGludm9rZVZpZXdNZXRob2Q6aHMsaW52b2tlVmlld01ldGhvZEtlZXBBbGl2ZTpnc30pO2Z1bmN0aW9uIEphKCl7bGV0e29uOmV9PXN0O2UobmUuT05fUkVTSVpFLGIpLGUobmUuT05fQVBQX0VOVEVSX0ZPUkVHUk9VTkQsTCksZShuZS5PTl9BUFBfRU5URVJfQkFDS0dST1VORCxqKX1mdW5jdGlvbiBiKGUpe2xldCB0PXpuKCk7dHIodCxuZS5PTl9SRVNJWkUsZSksc3QuaW52b2tlT25DYWxsYmFjaygib25XaW5kb3dSZXNpemUiLGUpfWZ1bmN0aW9uIEwoZSl7bGV0IHQ9em4oKTt0cihBdCgpLG5lLk9OX1NIT1csZSksdHIodCxuZS5PTl9TSE9XKX1mdW5jdGlvbiBqKCl7dHIoQXQoKSxuZS5PTl9ISURFKSx0cih6bigpLG5lLk9OX0hJREUpfWxldCBIPVtuZS5PTl9QQUdFX1NDUk9MTCxuZS5PTl9SRUFDSF9CT1RUT01dO2Z1bmN0aW9uIEooKXtILmZvckVhY2goZT0+c3Quc3Vic2NyaWJlKGUsWChlKSkpfWZ1bmN0aW9uIFgoZSl7cmV0dXJuKHQsbik9Pnt0cihwYXJzZUludChuKSxlLHQpfX1mdW5jdGlvbiB1ZSgpe0phKCksSigpfWZ1bmN0aW9uIF9lKGUpe2UuJHZtPWUsZS4kbXBUeXBlPSJhcHAiO2xldCB0PUp0LnJlZihxZSgpLmdldExvY2FsZSgpKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiJGxvY2FsZSIse2dldCgpe3JldHVybiB0LnZhbHVlfSxzZXQobil7dC52YWx1ZT1ufX0pfWZ1bmN0aW9uIE9lKGUsdCl7ZS5yb3V0ZT10LnJvdXRlLGUuJHZtPWUsZS4kcGFnZT10LGUuJG1wVHlwZT0icGFnZSIsZS4kZm9udEZhbWlseVNldD1uZXcgU2V0LHQubWV0YS5pc1RhYkJhciYmKGUuJC5fX2lzVGFiQmFyPSEwLGUuJC5fX2lzQWN0aXZlPSEwKX1mdW5jdGlvbiBEZSgpe3JldHVybntwYXRoOiIiLHF1ZXJ5Ont9LHNjZW5lOjEwMDEscmVmZXJyZXJJbmZvOnthcHBJZDoiIixleHRyYURhdGE6e319fX1mdW5jdGlvbiBwZShlLHQpe2xldCBuPWUuJG9wdGlvbnN8fHt9O24uZ2xvYmFsRGF0YT1HLmV4dGVuZChuLmdsb2JhbERhdGF8fHt9LHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJnbG9iYWxEYXRhIix7Z2V0KCl7cmV0dXJuIG4uZ2xvYmFsRGF0YX0sc2V0KHIpe24uZ2xvYmFsRGF0YT1yfX0pfWxldCBMZTtmdW5jdGlvbiBwdCgpe3JldHVybiBMZX1mdW5jdGlvbiBPdChlKXtsZXQgdD1lLiQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQuY3R4LCIkY2hpbGRyZW4iLHtnZXQoKXtyZXR1cm4gb24oKS5tYXAocj0+ci4kdm0pfX0pO2xldCBuPXQuYXBwQ29udGV4dDtMZT1HLmV4dGVuZChuLmFwcCx7bW91bnRQYWdlKHIsYSx1KXtsZXQgZz1KdC5jcmVhdGVWTm9kZShyLGEpO2cuYXBwQ29udGV4dD1uLGcuX19wYWdlX2NvbnRhaW5lcl9fPXUsSnQucmVuZGVyKGcsdSk7bGV0IHk9Zy5jb21wb25lbnQucHJveHk7cmV0dXJuIHkuX19wYWdlX2NvbnRhaW5lcl9fPXUseX0sdW5tb3VudFBhZ2U6cj0+e2xldHtfX3BhZ2VfY29udGFpbmVyX186YX09cjthJiYoYS5pc1VubW91bnRlZD0hMCxKdC5yZW5kZXIobnVsbCxhKSl9fSl9ZnVuY3Rpb24ga3QoZSl7cmV0dXJuIGUuJHBhZ2V9bGV0IHZ0PVtdO2Z1bmN0aW9uIGh0KGUpe2xldCB0PWt0KGUpO2lmKCF0Lm1ldGEuaXNOVnVlKXJldHVybiB2dC5wdXNoKGUpO2xldCBuPXZ0LmZpbmRJbmRleChyPT5rdChyKS5pZD09PXQuaWQpO24+LTE/dnQuc3BsaWNlKG4sMSxlKTp2dC5wdXNoKGUpfWZ1bmN0aW9uIFB0KGUpe3JldHVybiB2dC5maW5kKHQ9Pmt0KHQpLmlkPT09ZSl9ZnVuY3Rpb24gb24oKXtyZXR1cm4gdnR9ZnVuY3Rpb24gRm4oKXtyZXR1cm4gd3QoKX1mdW5jdGlvbiB3dCgpe2xldCBlPVtdO3JldHVybiB2dC5mb3JFYWNoKHQ9Pnt0LiQuX19pc1RhYkJhcj90LiQuX19pc0FjdGl2ZSYmZS5wdXNoKHQpOmUucHVzaCh0KX0pLGV9ZnVuY3Rpb24gZW4oKXtsZXQgZT16bigpOyFlfHx2bihlKX1mdW5jdGlvbiB2bihlKXtsZXQgdD12dC5maW5kSW5kZXgocj0+cj09PWUpO2lmKHQ9PT0tMSlyZXR1cm47a3QoZSkubWV0YS5pc05WdWV8fHB0KCkudW5tb3VudFBhZ2UoZSksdnQuc3BsaWNlKHQsMSl9ZnVuY3Rpb24gdXIoZSx0LG4pe2t0KGUpLm1ldGEuaXNOVnVlP0JuKGUsdCxuKTpybihlLHQsbil9ZnVuY3Rpb24gcm4oZSx0LG4pe3N0Lmludm9rZVZpZXdNZXRob2QoInJlcXVlc3RDb21wb25lbnRJbmZvIix7cmVxczp0Lm1hcChyPT4oci5jb21wb25lbnQmJihyLmNvbXBvbmVudD1yLmNvbXBvbmVudC4kZWwubm9kZUlkKSxyKSl9LGt0KGUpLmlkLG4pfWZ1bmN0aW9uIEJuKGUsdCxuKXtsZXQgcj1ucih0KSxhPW5ldyBBcnJheShyLmxlbmd0aCk7X2EocixlLiRlbCxhKSxmcihlLiRyZXF1aXJlTmF0aXZlUGx1Z2luKCJkb20iKSxhLDAsW10sdT0+e24odSl9KX1mdW5jdGlvbiBucihlKXtsZXQgdD1bXTtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl7bGV0IHI9ZVtuXS5zZWxlY3RvcjtyLmluZGV4T2YoIiMiKT09PTAmJnQucHVzaChyLnN1YnN0cmluZygxKSl9cmV0dXJuIHR9ZnVuY3Rpb24gX2EoZSx0LG4pe2xldCByPXQuY2hpbGRyZW47aWYoIUcuaXNBcnJheShyKSlyZXR1cm4hMTtmb3IobGV0IGE9MDthPHIubGVuZ3RoO2ErKyl7bGV0IHU9clthXTtpZih1LmF0dHIpe2xldCBnPWUuaW5kZXhPZih1LmF0dHIuaWQpO2lmKGc+PTAmJihuW2ddPXtpZDplW2ddLHJlZjp1LnJlZixkYXRhc2V0Om5lLnBhcnNlTlZ1ZURhdGFzZXQodS5hdHRyKX0sZS5sZW5ndGg9PT0xKSlicmVha311LmNoaWxkcmVuJiZfYShlLHUsbil9fWZ1bmN0aW9uIGZyKGUsdCxuLHIsYSl7bGV0IHU9dFtuXTtlLmdldENvbXBvbmVudFJlY3QodS5yZWYsZz0+e2cuc2l6ZS5pZD11LmlkLGcuc2l6ZS5kYXRhc2V0PXUuZGF0YXNldCxyLnB1c2goZy5zaXplKSxuKz0xLG48dC5sZW5ndGg/ZnIoZSx0LG4scixhKTphKHIpfSl9ZnVuY3Rpb24gTm8oZSx0KXtzdC5pbnZva2VWaWV3TWV0aG9kKCJzZXRQYWdlTWV0YSIsdCxrdChlKS5pZCl9ZnVuY3Rpb24gbW4oZSl7aWYoZS5pbmRleE9mKCIvLyIpPT09MClyZXR1cm4iaHR0cHM6IitlO2lmKG5lLlNDSEVNRV9SRS50ZXN0KGUpfHxuZS5EQVRBX1JFLnRlc3QoZSkpcmV0dXJuIGU7aWYobmEoZSkpcmV0dXJuImZpbGU6Ly8iK3RhKGUpO2xldCB0PSJmaWxlOi8vIit0YSgiX3d3dyIpO2lmKGUuaW5kZXhPZigiLyIpPT09MClyZXR1cm4gZS5zdGFydHNXaXRoKCIvc3RvcmFnZS8iKXx8ZS5zdGFydHNXaXRoKCIvc2RjYXJkLyIpfHxlLmluY2x1ZGVzKCIvQ29udGFpbmVycy9EYXRhL0FwcGxpY2F0aW9uLyIpPyJmaWxlOi8vIitlOnQrZTtpZihlLmluZGV4T2YoIi4uLyIpPT09MHx8ZS5pbmRleE9mKCIuLyIpPT09MCl7aWYodHlwZW9mIF9faWRfXz09InN0cmluZyIpcmV0dXJuIHQreGEobmUuYWRkTGVhZGluZ1NsYXNoKF9faWRfXyksZSk7e2xldCBuPXpuKCk7aWYobilyZXR1cm4gdCt4YShuZS5hZGRMZWFkaW5nU2xhc2gobi5yb3V0ZSksZSl9fXJldHVybiBlfWxldCB0YT1uZS5jYWNoZVN0cmluZ0Z1bmN0aW9uKGU9PnMuaW8uY29udmVydExvY2FsRmlsZVN5c3RlbVVSTChlKS5yZXBsYWNlKC9eXC8/YXBwc1wvLywiL2FuZHJvaWRfYXNzZXQvYXBwcy8iKS5yZXBsYWNlKC9cLyQvLCIiKSk7ZnVuY3Rpb24gbmEoZSl7cmV0dXJuIGUuaW5kZXhPZigiX3d3dyIpPT09MHx8ZS5pbmRleE9mKCJfZG9jIik9PT0wfHxlLmluZGV4T2YoIl9kb2N1bWVudHMiKT09PTB8fGUuaW5kZXhPZigiX2Rvd25sb2FkcyIpPT09MH1sZXQgWmk9InN1Y2Nlc3MiLERhPSJmYWlsIixGYT1bWmksRGEsImNvbXBsZXRlIl07ZnVuY3Rpb24gV24oZSx0LG4scil7aWYoIWUpcmV0dXJuO2lmKHR5cGVvZiBuPT0idW5kZWZpbmVkIilyZXR1cm4gZVt0XSgpO2xldFssYV09cmEobixyKTtyZXR1cm4gT2JqZWN0LmtleXMoYSkubGVuZ3RoP2VbdF0oRWkodCxhKSk6ZVt0XSgpfWZ1bmN0aW9uIFluKGUsdCxuLHIpe2lmKCFlKXJldHVybjtsZXRbYSx1XT1yYShuLHIpO3JldHVybiBPYmplY3Qua2V5cyh1KS5sZW5ndGg/ZVt0XShhLEVpKHQsdSkpOmVbdF0oYSl9ZnVuY3Rpb24gR28oZSx0KXtsZXQgbj1wbyhlLHQuJGVsKTtyZXR1cm4gbnx8Y29uc29sZS5lcnJvcigiQ2FuIG5vdCBmaW5kIGAiK2UrImAiKX1mdW5jdGlvbiBwbyhlLHQpe2lmKCFlfHwhdClyZXR1cm47aWYodC5hdHRyJiZ0LmF0dHIuaWQ9PT1lKXJldHVybiB0O2xldCBuPXQuY2hpbGRyZW47aWYoISFuKWZvcihsZXQgcj0wLGE9bi5sZW5ndGg7cjxhO3IrKyl7bGV0IHU9cG8oZSxuW3JdKTtpZih1KXJldHVybiB1fX1mdW5jdGlvbiByYShlPXt9LHQpe2xldCBuPU9iamVjdC5jcmVhdGUobnVsbCkscj1mdW5jdGlvbih1KXtsZXQgZz1lW3VdO0cuaXNGdW5jdGlvbihnKSYmKG5bdV09ZyxkZWxldGUgZVt1XSl9O3JldHVybiBGYS5mb3JFYWNoKHIpLHQmJnQuZm9yRWFjaChyKSxbZSxuXX1mdW5jdGlvbiBFaShlLHQpe3JldHVybiBmdW5jdGlvbihyKXtsZXQgYT1yLnR5cGU7ZGVsZXRlIHIudHlwZTtsZXQgdT10W2FdO2lmKGE9PT1aaT9yLmVyck1zZz1gJHtlfTpva2A6YT09PURhJiYoci5lcnJNc2c9ZSsiOmZhaWwgIisoci5tc2c/IiAiK3IubXNnOiIiKSksZGVsZXRlIHIuY29kZSxkZWxldGUgci5tc2csRy5pc0Z1bmN0aW9uKHUpJiZ1KHIpLGE9PT1aaXx8YT09PURhKXtsZXQgZz10LmNvbXBsZXRlO0cuaXNGdW5jdGlvbihnKSYmZyhyKX19fWxldCBJbz17cGxheShlKXtyZXR1cm4gV24oZSwicGxheSIpfSxwYXVzZShlKXtyZXR1cm4gV24oZSwicGF1c2UiKX0sc2VlayhlLHQpe3JldHVybiBZbihlLCJzZWVrIix0LnBvc2l0aW9uKX0sc3RvcChlKXtyZXR1cm4gV24oZSwic3RvcCIpfSxzZW5kRGFubXUoZSx0KXtyZXR1cm4gWW4oZSwic2VuZERhbm11Iix0KX0scGxheWJhY2tSYXRlKGUsdCl7cmV0dXJuIFluKGUsInBsYXliYWNrUmF0ZSIsdC5yYXRlKX0scmVxdWVzdEZ1bGxTY3JlZW4oZSx0PXt9KXtyZXR1cm4gWW4oZSwicmVxdWVzdEZ1bGxTY3JlZW4iLHQpfSxleGl0RnVsbFNjcmVlbihlKXtyZXR1cm4gV24oZSwiZXhpdEZ1bGxTY3JlZW4iKX0sc2hvd1N0YXR1c0JhcihlKXtyZXR1cm4gV24oZSwic2hvd1N0YXR1c0JhciIpfSxoaWRlU3RhdHVzQmFyKGUpe3JldHVybiBXbihlLCJoaWRlU3RhdHVzQmFyIil9fTtmdW5jdGlvbiBUbihlLHQsbixyKXtsZXQgYT1QdCh0KTtpZihhJiZrdChhKS5tZXRhLmlzTlZ1ZSl7bGV0IHU9YS4kdm07cmV0dXJuIElvW25dKEdvKGUsdSkscil9c3QuaW52b2tlVmlld01ldGhvZCgidmlkZW8uIitlLHt2aWRlb0lkOmUsdHlwZTpuLGRhdGE6cn0sdCl9bGV0IGlhPXtnZXRDZW50ZXJMb2NhdGlvbihlLHQpe3JldHVybiBXbihlLCJnZXRDZW50ZXJMb2NhdGlvbiIsdCl9LG1vdmVUb0xvY2F0aW9uKGUsdCl7cmV0dXJuIFluKGUsIm1vdmVUb0xvY2F0aW9uIix0KX0sdHJhbnNsYXRlTWFya2VyKGUsdCl7cmV0dXJuIFluKGUsInRyYW5zbGF0ZU1hcmtlciIsdCxbImFuaW1hdGlvbkVuZCJdKX0saW5jbHVkZVBvaW50cyhlLHQpe3JldHVybiBZbihlLCJpbmNsdWRlUG9pbnRzIix0KX0sZ2V0UmVnaW9uKGUsdCl7cmV0dXJuIFduKGUsImdldFJlZ2lvbiIsdCl9LGdldFNjYWxlKGUsdCl7cmV0dXJuIFduKGUsImdldFNjYWxlIix0KX0sYWRkQ3VzdG9tTGF5ZXIoZSx0KXtyZXR1cm4gWW4oZSwiYWRkQ3VzdG9tTGF5ZXIiLHQpfSxyZW1vdmVDdXN0b21MYXllcihlLHQpe3JldHVybiBZbihlLCJyZW1vdmVDdXN0b21MYXllciIsdCl9LGFkZEdyb3VuZE92ZXJsYXkoZSx0KXtyZXR1cm4gWW4oZSwiYWRkR3JvdW5kT3ZlcmxheSIsdCl9LHJlbW92ZUdyb3VuZE92ZXJsYXkoZSx0KXtyZXR1cm4gWW4oZSwicmVtb3ZlR3JvdW5kT3ZlcmxheSIsdCl9LHVwZGF0ZUdyb3VuZE92ZXJsYXkoZSx0KXtyZXR1cm4gWW4oZSwidXBkYXRlR3JvdW5kT3ZlcmxheSIsdCl9LGluaXRNYXJrZXJDbHVzdGVyKGUsdCl7cmV0dXJuIFluKGUsImluaXRNYXJrZXJDbHVzdGVyIix0KX0sYWRkTWFya2VycyhlLHQpe3JldHVybiBZbihlLCJhZGRNYXJrZXJzIix0KX0scmVtb3ZlTWFya2VycyhlLHQpe3JldHVybiBZbihlLCJyZW1vdmVNYXJrZXJzIix0KX0sbW92ZUFsb25nKGUsdCl7cmV0dXJuIFluKGUsIm1vdmVBbG9uZyIsdCl9LHNldExvY01hcmtlckljb24oZSx0KXtyZXR1cm4gWW4oZSwic2V0TG9jTWFya2VySWNvbiIsdCl9LG9wZW5NYXBBcHAoZSx0KXtyZXR1cm4gWW4oZSwib3Blbk1hcEFwcCIsdCl9LG9uKGUsdCl7cmV0dXJuIGUub24odC5uYW1lLHQuY2FsbGJhY2spfX07ZnVuY3Rpb24gR3IoZSx0LG4scixhKXtsZXQgdT1QdCh0KTtpZih1JiZrdCh1KS5tZXRhLmlzTlZ1ZSl7bGV0IGc9dS4kdm07cmV0dXJuIGlhW25dKEdvKGUsZykscil9c3QuaW52b2tlVmlld01ldGhvZCgibWFwLiIrZSx7dHlwZTpuLGRhdGE6cn0sdCxhKX1mdW5jdGlvbiBrbyhlKXtyZXR1cm5gSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuJHtlfWB9ZnVuY3Rpb24gaXIoe3JlcUlkOmUsY29tcG9uZW50OnQsb3B0aW9uczpuLGNhbGxiYWNrOnJ9LGEpe2xldCB1PWtvKGUpO3N0Lmludm9rZVZpZXdNZXRob2QoImFkZEludGVyc2VjdGlvbk9ic2VydmVyIix7cmVxSWQ6ZSxjb21wb25lbnQ6dC4kZWwubm9kZUlkLG9wdGlvbnM6bixldmVudE5hbWU6dX0sYSksc3Quc3Vic2NyaWJlKHUscil9ZnVuY3Rpb24gZHIoe3JlcUlkOmUsY29tcG9uZW50OnR9LG4pe3N0Lmludm9rZVZpZXdNZXRob2QoInJlbW92ZUludGVyc2VjdGlvbk9ic2VydmVyIix7cmVxSWQ6ZSxjb21wb25lbnQ6dC4kZWwubm9kZUlkfSxuKSxzdC51bnN1YnNjcmliZShrbyhlKSl9ZnVuY3Rpb24gaHIoZSl7cmV0dXJuYE1lZGlhUXVlcnlPYnNlcnZlci4ke2V9YH1mdW5jdGlvbiBSbyh7cmVxSWQ6ZSxjb21wb25lbnQ6dCxvcHRpb25zOm4sY2FsbGJhY2s6cn0sYSl7bGV0IHU9aHIoZSk7c3QuaW52b2tlVmlld01ldGhvZCgiYWRkTWVkaWFRdWVyeU9ic2VydmVyIix7cmVxSWQ6ZSxjb21wb25lbnQ6dC4kZWwubm9kZUlkLG9wdGlvbnM6bixldmVudE5hbWU6dX0sYSksc3Quc3Vic2NyaWJlKHUscil9ZnVuY3Rpb24gdWkoe3JlcUlkOmUsY29tcG9uZW50OnR9LG4pe3N0Lmludm9rZVZpZXdNZXRob2QoInJlbW92ZU1lZGlhUXVlcnlPYnNlcnZlciIse3JlcUlkOmUsY29tcG9uZW50OnQuJGVsLm5vZGVJZH0sbiksc3QudW5zdWJzY3JpYmUoaHIoZSkpfWxldCB3cj0yMDAsYmE9WyJ1bmtub3duIiwibm9uZSIsImV0aGVybmV0Iiwid2lmaSIsIjJnIiwiM2ciLCI0ZyIsIjVnIl0sWmE9Il9kb2MvdW5pYXBwX3RlbXAiLG1yPWAke1phfV8ke0RhdGUubm93KCl9YDtmdW5jdGlvbiBmaShlKXtsZXQgdD1lLnNwbGl0KCIvIik7cmV0dXJuIHRbdC5sZW5ndGgtMV19ZnVuY3Rpb24gZWkoZSl7bGV0IHQ9ZS5zcGxpdCgiLiIpO3JldHVybiB0Lmxlbmd0aD4xPyIuIit0W3QubGVuZ3RoLTFdOiIifWxldCBMcz0iYmFja2J1dHRvbiI7ZnVuY3Rpb24gdGkoKXtSLm5hdmlnYXRlQmFjayh7ZnJvbToiYmFja2J1dHRvbiIsc3VjY2Vzcygpe319KX1sZXQgQmk9RGUoKSxWcj1EZSgpO2Z1bmN0aW9uIE1zKCl7cmV0dXJuIEcuZXh0ZW5kKHt9LFZyKX1mdW5jdGlvbiB5ZSgpe3JldHVybiBHLmV4dGVuZCh7fSxCaSl9ZnVuY3Rpb24gRHQoe3BhdGg6ZSxxdWVyeTp0LHJlZmVycmVySW5mbzpufSl7Ry5leHRlbmQoQmkse3BhdGg6ZSxxdWVyeTp0P25lLnBhcnNlUXVlcnkodCk6e30scmVmZXJyZXJJbmZvOm58fHt9fSl9ZnVuY3Rpb24gRnQoe3BhdGg6ZSxxdWVyeTp0LHJlZmVycmVySW5mbzpufSl7cmV0dXJuIEcuZXh0ZW5kKFZyLHtwYXRoOmUscXVlcnk6dD9uZS5wYXJzZVF1ZXJ5KHQpOnt9LHJlZmVycmVySW5mbzpufHx7fSxjaGFubmVsOnMucnVudGltZS5jaGFubmVsLGxhdW5jaGVyOnMucnVudGltZS5sYXVuY2hlcn0pLEcuZXh0ZW5kKEJpLFZyKSxCaX1mdW5jdGlvbiBsbigpe2xldCBlPWYucmVxdWlyZU1vZHVsZSgicGx1cyIpO2lmKGUuZ2V0UmVkaXJlY3RJbmZvKXtsZXR7cGF0aDp0LHF1ZXJ5Om4sZXh0cmFEYXRhOnIsdXNlckFjdGlvbjphLGZyb21BcHBpZDp1fT1lLmdldFJlZGlyZWN0SW5mbygpfHx7fSxnPXthcHBJZDp1LGV4dHJhRGF0YTp7fX07cmV0dXJuIHImJihnLmV4dHJhRGF0YT1yKSx7cGF0aDp0fHwiIixxdWVyeTpuPyI/IituOiIiLHJlZmVycmVySW5mbzpnLHVzZXJBY3Rpb246YX19fXZhciBIdD17fTsoZnVuY3Rpb24oZSl7dmFyIHQ9dHlwZW9mIFVpbnQ4QXJyYXkhPSJ1bmRlZmluZWQiJiZ0eXBlb2YgVWludDE2QXJyYXkhPSJ1bmRlZmluZWQiJiZ0eXBlb2YgSW50MzJBcnJheSE9InVuZGVmaW5lZCI7ZnVuY3Rpb24gbih1LGcpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodSxnKX1lLmFzc2lnbj1mdW5jdGlvbih1KXtmb3IodmFyIGc9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO2cubGVuZ3RoOyl7dmFyIHk9Zy5zaGlmdCgpO2lmKCEheSl7aWYodHlwZW9mIHkhPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoeSsibXVzdCBiZSBub24tb2JqZWN0Iik7Zm9yKHZhciBNIGluIHkpbih5LE0pJiYodVtNXT15W01dKX19cmV0dXJuIHV9LGUuc2hyaW5rQnVmPWZ1bmN0aW9uKHUsZyl7cmV0dXJuIHUubGVuZ3RoPT09Zz91OnUuc3ViYXJyYXk/dS5zdWJhcnJheSgwLGcpOih1Lmxlbmd0aD1nLHUpfTt2YXIgcj17YXJyYXlTZXQ6ZnVuY3Rpb24odSxnLHksTSxPKXtpZihnLnN1YmFycmF5JiZ1LnN1YmFycmF5KXt1LnNldChnLnN1YmFycmF5KHkseStNKSxPKTtyZXR1cm59Zm9yKHZhciB4PTA7eDxNO3grKyl1W08reF09Z1t5K3hdfSxmbGF0dGVuQ2h1bmtzOmZ1bmN0aW9uKHUpe3ZhciBnLHksTSxPLHgsaGU7Zm9yKE09MCxnPTAseT11Lmxlbmd0aDtnPHk7ZysrKU0rPXVbZ10ubGVuZ3RoO2ZvcihoZT1uZXcgVWludDhBcnJheShNKSxPPTAsZz0wLHk9dS5sZW5ndGg7Zzx5O2crKyl4PXVbZ10saGUuc2V0KHgsTyksTys9eC5sZW5ndGg7cmV0dXJuIGhlfX0sYT17YXJyYXlTZXQ6ZnVuY3Rpb24odSxnLHksTSxPKXtmb3IodmFyIHg9MDt4PE07eCsrKXVbTyt4XT1nW3kreF19LGZsYXR0ZW5DaHVua3M6ZnVuY3Rpb24odSl7cmV0dXJuW10uY29uY2F0LmFwcGx5KFtdLHUpfX07ZS5zZXRUeXBlZD1mdW5jdGlvbih1KXt1PyhlLkJ1Zjg9VWludDhBcnJheSxlLkJ1ZjE2PVVpbnQxNkFycmF5LGUuQnVmMzI9SW50MzJBcnJheSxlLmFzc2lnbihlLHIpKTooZS5CdWY4PUFycmF5LGUuQnVmMTY9QXJyYXksZS5CdWYzMj1BcnJheSxlLmFzc2lnbihlLGEpKX0sZS5zZXRUeXBlZCh0KX0pKEh0KTt2YXIgcXI9e30sVXI9e30sT249e30sTGk9SHQscHM9NCx2cz0wLCRuPTEseWE9MjtmdW5jdGlvbiBFYShlKXtmb3IodmFyIHQ9ZS5sZW5ndGg7LS10Pj0wOyllW3RdPTB9dmFyIG9sPTAsRW49MSxTYT0yLERzPTMsRnM9MjU4LG9yPTI5LE1pPTI1NixEaT1NaSsxK29yLHFvPTMwLG1zPTE5LFZzPTIqRGkrMSxYaT0xNSxWYT0xNixfcz03LFhhPTI1NixGbD0xNixVcz0xNyxRYT0xOCxicz1bMCwwLDAsMCwwLDAsMCwwLDEsMSwxLDEsMiwyLDIsMiwzLDMsMywzLDQsNCw0LDQsNSw1LDUsNSwwXSx5cz1bMCwwLDAsMCwxLDEsMiwyLDMsMyw0LDQsNSw1LDYsNiw3LDcsOCw4LDksOSwxMCwxMCwxMSwxMSwxMiwxMiwxMywxM10sJHM9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwzLDddLGFsPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSxFYz01MTIsUWk9bmV3IEFycmF5KChEaSsyKSoyKTtFYShRaSk7dmFyIG9hPW5ldyBBcnJheShxbyoyKTtFYShvYSk7dmFyIEVzPW5ldyBBcnJheShFYyk7RWEoRXMpO3ZhciBlcz1uZXcgQXJyYXkoRnMtRHMrMSk7RWEoZXMpO3ZhciB0cz1uZXcgQXJyYXkob3IpO0VhKHRzKTt2YXIgU3M9bmV3IEFycmF5KHFvKTtFYShTcyk7ZnVuY3Rpb24gc2woZSx0LG4scixhKXt0aGlzLnN0YXRpY190cmVlPWUsdGhpcy5leHRyYV9iaXRzPXQsdGhpcy5leHRyYV9iYXNlPW4sdGhpcy5lbGVtcz1yLHRoaXMubWF4X2xlbmd0aD1hLHRoaXMuaGFzX3N0cmVlPWUmJmUubGVuZ3RofXZhciBsbCxjbCxIcztmdW5jdGlvbiB1bChlLHQpe3RoaXMuZHluX3RyZWU9ZSx0aGlzLm1heF9jb2RlPTAsdGhpcy5zdGF0X2Rlc2M9dH1mdW5jdGlvbiBWbChlKXtyZXR1cm4gZTwyNTY/RXNbZV06RXNbMjU2KyhlPj4+NyldfWZ1bmN0aW9uIG5zKGUsdCl7ZS5wZW5kaW5nX2J1ZltlLnBlbmRpbmcrK109dCYyNTUsZS5wZW5kaW5nX2J1ZltlLnBlbmRpbmcrK109dD4+PjgmMjU1fWZ1bmN0aW9uIFNpKGUsdCxuKXtlLmJpX3ZhbGlkPlZhLW4/KGUuYmlfYnVmfD10PDxlLmJpX3ZhbGlkJjY1NTM1LG5zKGUsZS5iaV9idWYpLGUuYmlfYnVmPXQ+PlZhLWUuYmlfdmFsaWQsZS5iaV92YWxpZCs9bi1WYSk6KGUuYmlfYnVmfD10PDxlLmJpX3ZhbGlkJjY1NTM1LGUuYmlfdmFsaWQrPW4pfWZ1bmN0aW9uIFlvKGUsdCxuKXtTaShlLG5bdCoyXSxuW3QqMisxXSl9ZnVuY3Rpb24gVWwoZSx0KXt2YXIgbj0wO2RvIG58PWUmMSxlPj4+PTEsbjw8PTE7d2hpbGUoLS10PjApO3JldHVybiBuPj4+MX1mdW5jdGlvbiBTYyhlKXtlLmJpX3ZhbGlkPT09MTY/KG5zKGUsZS5iaV9idWYpLGUuYmlfYnVmPTAsZS5iaV92YWxpZD0wKTplLmJpX3ZhbGlkPj04JiYoZS5wZW5kaW5nX2J1ZltlLnBlbmRpbmcrK109ZS5iaV9idWYmMjU1LGUuYmlfYnVmPj49OCxlLmJpX3ZhbGlkLT04KX1mdW5jdGlvbiB3YyhlLHQpe3ZhciBuPXQuZHluX3RyZWUscj10Lm1heF9jb2RlLGE9dC5zdGF0X2Rlc2Muc3RhdGljX3RyZWUsdT10LnN0YXRfZGVzYy5oYXNfc3RyZWUsZz10LnN0YXRfZGVzYy5leHRyYV9iaXRzLHk9dC5zdGF0X2Rlc2MuZXh0cmFfYmFzZSxNPXQuc3RhdF9kZXNjLm1heF9sZW5ndGgsTyx4LGhlLGJlLFBlLGd0LHl0PTA7Zm9yKGJlPTA7YmU8PVhpO2JlKyspZS5ibF9jb3VudFtiZV09MDtmb3IobltlLmhlYXBbZS5oZWFwX21heF0qMisxXT0wLE89ZS5oZWFwX21heCsxO088VnM7TysrKXg9ZS5oZWFwW09dLGJlPW5bblt4KjIrMV0qMisxXSsxLGJlPk0mJihiZT1NLHl0KyspLG5beCoyKzFdPWJlLCEoeD5yKSYmKGUuYmxfY291bnRbYmVdKyssUGU9MCx4Pj15JiYoUGU9Z1t4LXldKSxndD1uW3gqMl0sZS5vcHRfbGVuKz1ndCooYmUrUGUpLHUmJihlLnN0YXRpY19sZW4rPWd0KihhW3gqMisxXStQZSkpKTtpZih5dCE9PTApe2Rve2ZvcihiZT1NLTE7ZS5ibF9jb3VudFtiZV09PT0wOyliZS0tO2UuYmxfY291bnRbYmVdLS0sZS5ibF9jb3VudFtiZSsxXSs9MixlLmJsX2NvdW50W01dLS0seXQtPTJ9d2hpbGUoeXQ+MCk7Zm9yKGJlPU07YmUhPT0wO2JlLS0pZm9yKHg9ZS5ibF9jb3VudFtiZV07eCE9PTA7KWhlPWUuaGVhcFstLU9dLCEoaGU+cikmJihuW2hlKjIrMV0hPT1iZSYmKGUub3B0X2xlbis9KGJlLW5baGUqMisxXSkqbltoZSoyXSxuW2hlKjIrMV09YmUpLHgtLSl9fWZ1bmN0aW9uICRsKGUsdCxuKXt2YXIgcj1uZXcgQXJyYXkoWGkrMSksYT0wLHUsZztmb3IodT0xO3U8PVhpO3UrKylyW3VdPWE9YStuW3UtMV08PDE7Zm9yKGc9MDtnPD10O2crKyl7dmFyIHk9ZVtnKjIrMV07eSE9PTAmJihlW2cqMl09VWwoclt5XSsrLHkpKX19ZnVuY3Rpb24gQ2MoKXt2YXIgZSx0LG4scixhLHU9bmV3IEFycmF5KFhpKzEpO2ZvcihuPTAscj0wO3I8b3ItMTtyKyspZm9yKHRzW3JdPW4sZT0wO2U8MTw8YnNbcl07ZSsrKWVzW24rK109cjtmb3IoZXNbbi0xXT1yLGE9MCxyPTA7cjwxNjtyKyspZm9yKFNzW3JdPWEsZT0wO2U8MTw8eXNbcl07ZSsrKUVzW2ErK109cjtmb3IoYT4+PTc7cjxxbztyKyspZm9yKFNzW3JdPWE8PDcsZT0wO2U8MTw8eXNbcl0tNztlKyspRXNbMjU2K2ErK109cjtmb3IodD0wO3Q8PVhpO3QrKyl1W3RdPTA7Zm9yKGU9MDtlPD0xNDM7KVFpW2UqMisxXT04LGUrKyx1WzhdKys7Zm9yKDtlPD0yNTU7KVFpW2UqMisxXT05LGUrKyx1WzldKys7Zm9yKDtlPD0yNzk7KVFpW2UqMisxXT03LGUrKyx1WzddKys7Zm9yKDtlPD0yODc7KVFpW2UqMisxXT04LGUrKyx1WzhdKys7Zm9yKCRsKFFpLERpKzEsdSksZT0wO2U8cW87ZSsrKW9hW2UqMisxXT01LG9hW2UqMl09VWwoZSw1KTtsbD1uZXcgc2woUWksYnMsTWkrMSxEaSxYaSksY2w9bmV3IHNsKG9hLHlzLDAscW8sWGkpLEhzPW5ldyBzbChuZXcgQXJyYXkoMCksJHMsMCxtcyxfcyl9ZnVuY3Rpb24gcnMoZSl7dmFyIHQ7Zm9yKHQ9MDt0PERpO3QrKyllLmR5bl9sdHJlZVt0KjJdPTA7Zm9yKHQ9MDt0PHFvO3QrKyllLmR5bl9kdHJlZVt0KjJdPTA7Zm9yKHQ9MDt0PG1zO3QrKyllLmJsX3RyZWVbdCoyXT0wO2UuZHluX2x0cmVlW1hhKjJdPTEsZS5vcHRfbGVuPWUuc3RhdGljX2xlbj0wLGUubGFzdF9saXQ9ZS5tYXRjaGVzPTB9ZnVuY3Rpb24ganMoZSl7ZS5iaV92YWxpZD44P25zKGUsZS5iaV9idWYpOmUuYmlfdmFsaWQ+MCYmKGUucGVuZGluZ19idWZbZS5wZW5kaW5nKytdPWUuYmlfYnVmKSxlLmJpX2J1Zj0wLGUuYmlfdmFsaWQ9MH1mdW5jdGlvbiBIbChlLHQsbixyKXtqcyhlKSxucyhlLG4pLG5zKGUsfm4pLExpLmFycmF5U2V0KGUucGVuZGluZ19idWYsZS53aW5kb3csdCxuLGUucGVuZGluZyksZS5wZW5kaW5nKz1ufWZ1bmN0aW9uIHpzKGUsdCxuLHIpe3ZhciBhPXQqMix1PW4qMjtyZXR1cm4gZVthXTxlW3VdfHxlW2FdPT09ZVt1XSYmclt0XTw9cltuXX1mdW5jdGlvbiB3cyhlLHQsbil7Zm9yKHZhciByPWUuaGVhcFtuXSxhPW48PDE7YTw9ZS5oZWFwX2xlbiYmKGE8ZS5oZWFwX2xlbiYmenModCxlLmhlYXBbYSsxXSxlLmhlYXBbYV0sZS5kZXB0aCkmJmErKywhenModCxyLGUuaGVhcFthXSxlLmRlcHRoKSk7KWUuaGVhcFtuXT1lLmhlYXBbYV0sbj1hLGE8PD0xO2UuaGVhcFtuXT1yfWZ1bmN0aW9uIENzKGUsdCxuKXt2YXIgcixhLHU9MCxnLHk7aWYoZS5sYXN0X2xpdCE9PTApZG8gcj1lLnBlbmRpbmdfYnVmW2UuZF9idWYrdSoyXTw8OHxlLnBlbmRpbmdfYnVmW2UuZF9idWYrdSoyKzFdLGE9ZS5wZW5kaW5nX2J1ZltlLmxfYnVmK3VdLHUrKyxyPT09MD9ZbyhlLGEsdCk6KGc9ZXNbYV0sWW8oZSxnK01pKzEsdCkseT1ic1tnXSx5IT09MCYmKGEtPXRzW2ddLFNpKGUsYSx5KSksci0tLGc9VmwociksWW8oZSxnLG4pLHk9eXNbZ10seSE9PTAmJihyLT1Tc1tnXSxTaShlLHIseSkpKTt3aGlsZSh1PGUubGFzdF9saXQpO1lvKGUsWGEsdCl9ZnVuY3Rpb24gV3MoZSx0KXt2YXIgbj10LmR5bl90cmVlLHI9dC5zdGF0X2Rlc2Muc3RhdGljX3RyZWUsYT10LnN0YXRfZGVzYy5oYXNfc3RyZWUsdT10LnN0YXRfZGVzYy5lbGVtcyxnLHksTT0tMSxPO2ZvcihlLmhlYXBfbGVuPTAsZS5oZWFwX21heD1WcyxnPTA7Zzx1O2crKyluW2cqMl0hPT0wPyhlLmhlYXBbKytlLmhlYXBfbGVuXT1NPWcsZS5kZXB0aFtnXT0wKTpuW2cqMisxXT0wO2Zvcig7ZS5oZWFwX2xlbjwyOylPPWUuaGVhcFsrK2UuaGVhcF9sZW5dPU08Mj8rK006MCxuW08qMl09MSxlLmRlcHRoW09dPTAsZS5vcHRfbGVuLS0sYSYmKGUuc3RhdGljX2xlbi09cltPKjIrMV0pO2Zvcih0Lm1heF9jb2RlPU0sZz1lLmhlYXBfbGVuPj4xO2c+PTE7Zy0tKXdzKGUsbixnKTtPPXU7ZG8gZz1lLmhlYXBbMV0sZS5oZWFwWzFdPWUuaGVhcFtlLmhlYXBfbGVuLS1dLHdzKGUsbiwxKSx5PWUuaGVhcFsxXSxlLmhlYXBbLS1lLmhlYXBfbWF4XT1nLGUuaGVhcFstLWUuaGVhcF9tYXhdPXksbltPKjJdPW5bZyoyXStuW3kqMl0sZS5kZXB0aFtPXT0oZS5kZXB0aFtnXT49ZS5kZXB0aFt5XT9lLmRlcHRoW2ddOmUuZGVwdGhbeV0pKzEsbltnKjIrMV09blt5KjIrMV09TyxlLmhlYXBbMV09TysrLHdzKGUsbiwxKTt3aGlsZShlLmhlYXBfbGVuPj0yKTtlLmhlYXBbLS1lLmhlYXBfbWF4XT1lLmhlYXBbMV0sd2MoZSx0KSwkbChuLE0sZS5ibF9jb3VudCl9ZnVuY3Rpb24gZmwoZSx0LG4pe3ZhciByLGE9LTEsdSxnPXRbMCoyKzFdLHk9MCxNPTcsTz00O2ZvcihnPT09MCYmKE09MTM4LE89MyksdFsobisxKSoyKzFdPTY1NTM1LHI9MDtyPD1uO3IrKyl1PWcsZz10WyhyKzEpKjIrMV0sISgrK3k8TSYmdT09PWcpJiYoeTxPP2UuYmxfdHJlZVt1KjJdKz15OnUhPT0wPyh1IT09YSYmZS5ibF90cmVlW3UqMl0rKyxlLmJsX3RyZWVbRmwqMl0rKyk6eTw9MTA/ZS5ibF90cmVlW1VzKjJdKys6ZS5ibF90cmVlW1FhKjJdKysseT0wLGE9dSxnPT09MD8oTT0xMzgsTz0zKTp1PT09Zz8oTT02LE89Myk6KE09NyxPPTQpKX1mdW5jdGlvbiBqbChlLHQsbil7dmFyIHIsYT0tMSx1LGc9dFswKjIrMV0seT0wLE09NyxPPTQ7Zm9yKGc9PT0wJiYoTT0xMzgsTz0zKSxyPTA7cjw9bjtyKyspaWYodT1nLGc9dFsocisxKSoyKzFdLCEoKyt5PE0mJnU9PT1nKSl7aWYoeTxPKWRvIFlvKGUsdSxlLmJsX3RyZWUpO3doaWxlKC0teSE9PTApO2Vsc2UgdSE9PTA/KHUhPT1hJiYoWW8oZSx1LGUuYmxfdHJlZSkseS0tKSxZbyhlLEZsLGUuYmxfdHJlZSksU2koZSx5LTMsMikpOnk8PTEwPyhZbyhlLFVzLGUuYmxfdHJlZSksU2koZSx5LTMsMykpOihZbyhlLFFhLGUuYmxfdHJlZSksU2koZSx5LTExLDcpKTt5PTAsYT11LGc9PT0wPyhNPTEzOCxPPTMpOnU9PT1nPyhNPTYsTz0zKTooTT03LE89NCl9fWZ1bmN0aW9uIHpsKGUpe3ZhciB0O2ZvcihmbChlLGUuZHluX2x0cmVlLGUubF9kZXNjLm1heF9jb2RlKSxmbChlLGUuZHluX2R0cmVlLGUuZF9kZXNjLm1heF9jb2RlKSxXcyhlLGUuYmxfZGVzYyksdD1tcy0xO3Q+PTMmJmUuYmxfdHJlZVthbFt0XSoyKzFdPT09MDt0LS0pO3JldHVybiBlLm9wdF9sZW4rPTMqKHQrMSkrNSs1KzQsdH1mdW5jdGlvbiBBYyhlLHQsbixyKXt2YXIgYTtmb3IoU2koZSx0LTI1Nyw1KSxTaShlLG4tMSw1KSxTaShlLHItNCw0KSxhPTA7YTxyO2ErKylTaShlLGUuYmxfdHJlZVthbFthXSoyKzFdLDMpO2psKGUsZS5keW5fbHRyZWUsdC0xKSxqbChlLGUuZHluX2R0cmVlLG4tMSl9ZnVuY3Rpb24gZGwoZSl7dmFyIHQ9NDA5MzYyNDQ0NyxuO2ZvcihuPTA7bjw9MzE7bisrLHQ+Pj49MSlpZih0JjEmJmUuZHluX2x0cmVlW24qMl0hPT0wKXJldHVybiB2cztpZihlLmR5bl9sdHJlZVs5KjJdIT09MHx8ZS5keW5fbHRyZWVbMTAqMl0hPT0wfHxlLmR5bl9sdHJlZVsxMyoyXSE9PTApcmV0dXJuICRuO2ZvcihuPTMyO248TWk7bisrKWlmKGUuZHluX2x0cmVlW24qMl0hPT0wKXJldHVybiAkbjtyZXR1cm4gdnN9dmFyIGhsPSExO2Z1bmN0aW9uIFRjKGUpe2hsfHwoQ2MoKSxobD0hMCksZS5sX2Rlc2M9bmV3IHVsKGUuZHluX2x0cmVlLGxsKSxlLmRfZGVzYz1uZXcgdWwoZS5keW5fZHRyZWUsY2wpLGUuYmxfZGVzYz1uZXcgdWwoZS5ibF90cmVlLEhzKSxlLmJpX2J1Zj0wLGUuYmlfdmFsaWQ9MCxycyhlKX1mdW5jdGlvbiBBcyhlLHQsbixyKXtTaShlLChvbDw8MSkrKHI/MTowKSwzKSxIbChlLHQsbil9ZnVuY3Rpb24gV2woZSl7U2koZSxFbjw8MSwzKSxZbyhlLFhhLFFpKSxTYyhlKX1mdW5jdGlvbiBHbChlLHQsbixyKXt2YXIgYSx1LGc9MDtlLmxldmVsPjA/KGUuc3RybS5kYXRhX3R5cGU9PT15YSYmKGUuc3RybS5kYXRhX3R5cGU9ZGwoZSkpLFdzKGUsZS5sX2Rlc2MpLFdzKGUsZS5kX2Rlc2MpLGc9emwoZSksYT1lLm9wdF9sZW4rMys3Pj4+Myx1PWUuc3RhdGljX2xlbiszKzc+Pj4zLHU8PWEmJihhPXUpKTphPXU9bis1LG4rNDw9YSYmdCE9PS0xP0FzKGUsdCxuLHIpOmUuc3RyYXRlZ3k9PT1wc3x8dT09PWE/KFNpKGUsKEVuPDwxKSsocj8xOjApLDMpLENzKGUsUWksb2EpKTooU2koZSwoU2E8PDEpKyhyPzE6MCksMyksQWMoZSxlLmxfZGVzYy5tYXhfY29kZSsxLGUuZF9kZXNjLm1heF9jb2RlKzEsZysxKSxDcyhlLGUuZHluX2x0cmVlLGUuZHluX2R0cmVlKSkscnMoZSksciYmanMoZSl9ZnVuY3Rpb24gT2MoZSx0LG4pe3JldHVybiBlLnBlbmRpbmdfYnVmW2UuZF9idWYrZS5sYXN0X2xpdCoyXT10Pj4+OCYyNTUsZS5wZW5kaW5nX2J1ZltlLmRfYnVmK2UubGFzdF9saXQqMisxXT10JjI1NSxlLnBlbmRpbmdfYnVmW2UubF9idWYrZS5sYXN0X2xpdF09biYyNTUsZS5sYXN0X2xpdCsrLHQ9PT0wP2UuZHluX2x0cmVlW24qMl0rKzooZS5tYXRjaGVzKyssdC0tLGUuZHluX2x0cmVlWyhlc1tuXStNaSsxKSoyXSsrLGUuZHluX2R0cmVlW1ZsKHQpKjJdKyspLGUubGFzdF9saXQ9PT1lLmxpdF9idWZzaXplLTF9T24uX3RyX2luaXQ9VGMsT24uX3RyX3N0b3JlZF9ibG9jaz1BcyxPbi5fdHJfZmx1c2hfYmxvY2s9R2wsT24uX3RyX3RhbGx5PU9jLE9uLl90cl9hbGlnbj1XbDtmdW5jdGlvbiBQYyhlLHQsbixyKXtmb3IodmFyIGE9ZSY2NTUzNXwwLHU9ZT4+PjE2JjY1NTM1fDAsZz0wO24hPT0wOyl7Zz1uPjJlMz8yZTM6bixuLT1nO2RvIGE9YSt0W3IrK118MCx1PXUrYXwwO3doaWxlKC0tZyk7YSU9NjU1MjEsdSU9NjU1MjF9cmV0dXJuIGF8dTw8MTZ8MH12YXIgcWw9UGM7ZnVuY3Rpb24gTmMoKXtmb3IodmFyIGUsdD1bXSxuPTA7bjwyNTY7bisrKXtlPW47Zm9yKHZhciByPTA7cjw4O3IrKyllPWUmMT8zOTg4MjkyMzg0XmU+Pj4xOmU+Pj4xO3Rbbl09ZX1yZXR1cm4gdH12YXIgZ2w9TmMoKTtmdW5jdGlvbiBZbChlLHQsbixyKXt2YXIgYT1nbCx1PXIrbjtlXj0tMTtmb3IodmFyIGc9cjtnPHU7ZysrKWU9ZT4+PjheYVsoZV50W2ddKSYyNTVdO3JldHVybiBlXi0xfXZhciBhYT1ZbCxVYT17MjoibmVlZCBkaWN0aW9uYXJ5IiwxOiJzdHJlYW0gZW5kIiwwOiIiLCItMSI6ImZpbGUgZXJyb3IiLCItMiI6InN0cmVhbSBlcnJvciIsIi0zIjoiZGF0YSBlcnJvciIsIi00IjoiaW5zdWZmaWNpZW50IG1lbW9yeSIsIi01IjoiYnVmZmVyIGVycm9yIiwiLTYiOiJpbmNvbXBhdGlibGUgdmVyc2lvbiJ9LG5pPUh0LGVvPU9uLHBsPXFsLEZpPWFhLEtsPVVhLHdhPTAsSWM9MSx2bD0zLGRpPTQsQ2E9NSx4bz0wLEdzPTEsdG89LTIsSmw9LTMscXM9LTUsWmw9LTEsWGw9MSxpcz0yLG1sPTMsUWw9NCxrYz0wLG89MixjPTgsdj05LFM9MTUsUD04LFQ9MjksRj0yNTYsSz1GKzErVCxXPTMwLGllPTE5LFJlPTIqSysxLFdlPTE1LGVlPTMsQmU9MjU4LFplPUJlK2VlKzEsRXQ9MzIsbXQ9NDIsV3Q9NjksR3Q9NzMsZmU9OTEseGU9MTAzLHdlPTExMyx6ZT02NjYsbHQ9MSxydD0yLGk9MyxsPTQsZD0zO2Z1bmN0aW9uIG0oZSx0KXtyZXR1cm4gZS5tc2c9S2xbdF0sdH1mdW5jdGlvbiBBKGUpe3JldHVybihlPDwxKS0oZT40Pzk6MCl9ZnVuY3Rpb24gQyhlKXtmb3IodmFyIHQ9ZS5sZW5ndGg7LS10Pj0wOyllW3RdPTB9ZnVuY3Rpb24gayhlKXt2YXIgdD1lLnN0YXRlLG49dC5wZW5kaW5nO24+ZS5hdmFpbF9vdXQmJihuPWUuYXZhaWxfb3V0KSxuIT09MCYmKG5pLmFycmF5U2V0KGUub3V0cHV0LHQucGVuZGluZ19idWYsdC5wZW5kaW5nX291dCxuLGUubmV4dF9vdXQpLGUubmV4dF9vdXQrPW4sdC5wZW5kaW5nX291dCs9bixlLnRvdGFsX291dCs9bixlLmF2YWlsX291dC09bix0LnBlbmRpbmctPW4sdC5wZW5kaW5nPT09MCYmKHQucGVuZGluZ19vdXQ9MCkpfWZ1bmN0aW9uIFYoZSx0KXtlby5fdHJfZmx1c2hfYmxvY2soZSxlLmJsb2NrX3N0YXJ0Pj0wP2UuYmxvY2tfc3RhcnQ6LTEsZS5zdHJzdGFydC1lLmJsb2NrX3N0YXJ0LHQpLGUuYmxvY2tfc3RhcnQ9ZS5zdHJzdGFydCxrKGUuc3RybSl9ZnVuY3Rpb24gVShlLHQpe2UucGVuZGluZ19idWZbZS5wZW5kaW5nKytdPXR9ZnVuY3Rpb24gWihlLHQpe2UucGVuZGluZ19idWZbZS5wZW5kaW5nKytdPXQ+Pj44JjI1NSxlLnBlbmRpbmdfYnVmW2UucGVuZGluZysrXT10JjI1NX1mdW5jdGlvbiBkZShlLHQsbixyKXt2YXIgYT1lLmF2YWlsX2luO3JldHVybiBhPnImJihhPXIpLGE9PT0wPzA6KGUuYXZhaWxfaW4tPWEsbmkuYXJyYXlTZXQodCxlLmlucHV0LGUubmV4dF9pbixhLG4pLGUuc3RhdGUud3JhcD09PTE/ZS5hZGxlcj1wbChlLmFkbGVyLHQsYSxuKTplLnN0YXRlLndyYXA9PT0yJiYoZS5hZGxlcj1GaShlLmFkbGVyLHQsYSxuKSksZS5uZXh0X2luKz1hLGUudG90YWxfaW4rPWEsYSl9ZnVuY3Rpb24gdmUoZSx0KXt2YXIgbj1lLm1heF9jaGFpbl9sZW5ndGgscj1lLnN0cnN0YXJ0LGEsdSxnPWUucHJldl9sZW5ndGgseT1lLm5pY2VfbWF0Y2gsTT1lLnN0cnN0YXJ0PmUud19zaXplLVplP2Uuc3Ryc3RhcnQtKGUud19zaXplLVplKTowLE89ZS53aW5kb3cseD1lLndfbWFzayxoZT1lLnByZXYsYmU9ZS5zdHJzdGFydCtCZSxQZT1PW3IrZy0xXSxndD1PW3IrZ107ZS5wcmV2X2xlbmd0aD49ZS5nb29kX21hdGNoJiYobj4+PTIpLHk+ZS5sb29rYWhlYWQmJih5PWUubG9va2FoZWFkKTtkbyBpZihhPXQsIShPW2ErZ10hPT1ndHx8T1thK2ctMV0hPT1QZXx8T1thXSE9PU9bcl18fE9bKythXSE9PU9bcisxXSkpe3IrPTIsYSsrO2RvO3doaWxlKE9bKytyXT09PU9bKythXSYmT1srK3JdPT09T1srK2FdJiZPWysrcl09PT1PWysrYV0mJk9bKytyXT09PU9bKythXSYmT1srK3JdPT09T1srK2FdJiZPWysrcl09PT1PWysrYV0mJk9bKytyXT09PU9bKythXSYmT1srK3JdPT09T1srK2FdJiZyPGJlKTtpZih1PUJlLShiZS1yKSxyPWJlLUJlLHU+Zyl7aWYoZS5tYXRjaF9zdGFydD10LGc9dSx1Pj15KWJyZWFrO1BlPU9bcitnLTFdLGd0PU9bcitnXX19d2hpbGUoKHQ9aGVbdCZ4XSk+TSYmLS1uIT09MCk7cmV0dXJuIGc8PWUubG9va2FoZWFkP2c6ZS5sb29rYWhlYWR9ZnVuY3Rpb24gdGUoZSl7dmFyIHQ9ZS53X3NpemUsbixyLGEsdSxnO2Rve2lmKHU9ZS53aW5kb3dfc2l6ZS1lLmxvb2thaGVhZC1lLnN0cnN0YXJ0LGUuc3Ryc3RhcnQ+PXQrKHQtWmUpKXtuaS5hcnJheVNldChlLndpbmRvdyxlLndpbmRvdyx0LHQsMCksZS5tYXRjaF9zdGFydC09dCxlLnN0cnN0YXJ0LT10LGUuYmxvY2tfc3RhcnQtPXQscj1lLmhhc2hfc2l6ZSxuPXI7ZG8gYT1lLmhlYWRbLS1uXSxlLmhlYWRbbl09YT49dD9hLXQ6MDt3aGlsZSgtLXIpO3I9dCxuPXI7ZG8gYT1lLnByZXZbLS1uXSxlLnByZXZbbl09YT49dD9hLXQ6MDt3aGlsZSgtLXIpO3UrPXR9aWYoZS5zdHJtLmF2YWlsX2luPT09MClicmVhaztpZihyPWRlKGUuc3RybSxlLndpbmRvdyxlLnN0cnN0YXJ0K2UubG9va2FoZWFkLHUpLGUubG9va2FoZWFkKz1yLGUubG9va2FoZWFkK2UuaW5zZXJ0Pj1lZSlmb3IoZz1lLnN0cnN0YXJ0LWUuaW5zZXJ0LGUuaW5zX2g9ZS53aW5kb3dbZ10sZS5pbnNfaD0oZS5pbnNfaDw8ZS5oYXNoX3NoaWZ0XmUud2luZG93W2crMV0pJmUuaGFzaF9tYXNrO2UuaW5zZXJ0JiYoZS5pbnNfaD0oZS5pbnNfaDw8ZS5oYXNoX3NoaWZ0XmUud2luZG93W2crZWUtMV0pJmUuaGFzaF9tYXNrLGUucHJldltnJmUud19tYXNrXT1lLmhlYWRbZS5pbnNfaF0sZS5oZWFkW2UuaW5zX2hdPWcsZysrLGUuaW5zZXJ0LS0sIShlLmxvb2thaGVhZCtlLmluc2VydDxlZSkpOyk7fXdoaWxlKGUubG9va2FoZWFkPFplJiZlLnN0cm0uYXZhaWxfaW4hPT0wKX1mdW5jdGlvbiBtZShlLHQpe3ZhciBuPTY1NTM1O2ZvcihuPmUucGVuZGluZ19idWZfc2l6ZS01JiYobj1lLnBlbmRpbmdfYnVmX3NpemUtNSk7Oyl7aWYoZS5sb29rYWhlYWQ8PTEpe2lmKHRlKGUpLGUubG9va2FoZWFkPT09MCYmdD09PXdhKXJldHVybiBsdDtpZihlLmxvb2thaGVhZD09PTApYnJlYWt9ZS5zdHJzdGFydCs9ZS5sb29rYWhlYWQsZS5sb29rYWhlYWQ9MDt2YXIgcj1lLmJsb2NrX3N0YXJ0K247aWYoKGUuc3Ryc3RhcnQ9PT0wfHxlLnN0cnN0YXJ0Pj1yKSYmKGUubG9va2FoZWFkPWUuc3Ryc3RhcnQtcixlLnN0cnN0YXJ0PXIsVihlLCExKSxlLnN0cm0uYXZhaWxfb3V0PT09MCl8fGUuc3Ryc3RhcnQtZS5ibG9ja19zdGFydD49ZS53X3NpemUtWmUmJihWKGUsITEpLGUuc3RybS5hdmFpbF9vdXQ9PT0wKSlyZXR1cm4gbHR9cmV0dXJuIGUuaW5zZXJ0PTAsdD09PWRpPyhWKGUsITApLGUuc3RybS5hdmFpbF9vdXQ9PT0wP2k6bCk6KGUuc3Ryc3RhcnQ+ZS5ibG9ja19zdGFydCYmKFYoZSwhMSksZS5zdHJtLmF2YWlsX291dD09PTApLGx0KX1mdW5jdGlvbiBKZShlLHQpe2Zvcih2YXIgbixyOzspe2lmKGUubG9va2FoZWFkPFplKXtpZih0ZShlKSxlLmxvb2thaGVhZDxaZSYmdD09PXdhKXJldHVybiBsdDtpZihlLmxvb2thaGVhZD09PTApYnJlYWt9aWYobj0wLGUubG9va2FoZWFkPj1lZSYmKGUuaW5zX2g9KGUuaW5zX2g8PGUuaGFzaF9zaGlmdF5lLndpbmRvd1tlLnN0cnN0YXJ0K2VlLTFdKSZlLmhhc2hfbWFzayxuPWUucHJldltlLnN0cnN0YXJ0JmUud19tYXNrXT1lLmhlYWRbZS5pbnNfaF0sZS5oZWFkW2UuaW5zX2hdPWUuc3Ryc3RhcnQpLG4hPT0wJiZlLnN0cnN0YXJ0LW48PWUud19zaXplLVplJiYoZS5tYXRjaF9sZW5ndGg9dmUoZSxuKSksZS5tYXRjaF9sZW5ndGg+PWVlKWlmKHI9ZW8uX3RyX3RhbGx5KGUsZS5zdHJzdGFydC1lLm1hdGNoX3N0YXJ0LGUubWF0Y2hfbGVuZ3RoLWVlKSxlLmxvb2thaGVhZC09ZS5tYXRjaF9sZW5ndGgsZS5tYXRjaF9sZW5ndGg8PWUubWF4X2xhenlfbWF0Y2gmJmUubG9va2FoZWFkPj1lZSl7ZS5tYXRjaF9sZW5ndGgtLTtkbyBlLnN0cnN0YXJ0KyssZS5pbnNfaD0oZS5pbnNfaDw8ZS5oYXNoX3NoaWZ0XmUud2luZG93W2Uuc3Ryc3RhcnQrZWUtMV0pJmUuaGFzaF9tYXNrLG49ZS5wcmV2W2Uuc3Ryc3RhcnQmZS53X21hc2tdPWUuaGVhZFtlLmluc19oXSxlLmhlYWRbZS5pbnNfaF09ZS5zdHJzdGFydDt3aGlsZSgtLWUubWF0Y2hfbGVuZ3RoIT09MCk7ZS5zdHJzdGFydCsrfWVsc2UgZS5zdHJzdGFydCs9ZS5tYXRjaF9sZW5ndGgsZS5tYXRjaF9sZW5ndGg9MCxlLmluc19oPWUud2luZG93W2Uuc3Ryc3RhcnRdLGUuaW5zX2g9KGUuaW5zX2g8PGUuaGFzaF9zaGlmdF5lLndpbmRvd1tlLnN0cnN0YXJ0KzFdKSZlLmhhc2hfbWFzaztlbHNlIHI9ZW8uX3RyX3RhbGx5KGUsMCxlLndpbmRvd1tlLnN0cnN0YXJ0XSksZS5sb29rYWhlYWQtLSxlLnN0cnN0YXJ0Kys7aWYociYmKFYoZSwhMSksZS5zdHJtLmF2YWlsX291dD09PTApKXJldHVybiBsdH1yZXR1cm4gZS5pbnNlcnQ9ZS5zdHJzdGFydDxlZS0xP2Uuc3Ryc3RhcnQ6ZWUtMSx0PT09ZGk/KFYoZSwhMCksZS5zdHJtLmF2YWlsX291dD09PTA/aTpsKTplLmxhc3RfbGl0JiYoVihlLCExKSxlLnN0cm0uYXZhaWxfb3V0PT09MCk/bHQ6cnR9ZnVuY3Rpb24gY3QoZSx0KXtmb3IodmFyIG4scixhOzspe2lmKGUubG9va2FoZWFkPFplKXtpZih0ZShlKSxlLmxvb2thaGVhZDxaZSYmdD09PXdhKXJldHVybiBsdDtpZihlLmxvb2thaGVhZD09PTApYnJlYWt9aWYobj0wLGUubG9va2FoZWFkPj1lZSYmKGUuaW5zX2g9KGUuaW5zX2g8PGUuaGFzaF9zaGlmdF5lLndpbmRvd1tlLnN0cnN0YXJ0K2VlLTFdKSZlLmhhc2hfbWFzayxuPWUucHJldltlLnN0cnN0YXJ0JmUud19tYXNrXT1lLmhlYWRbZS5pbnNfaF0sZS5oZWFkW2UuaW5zX2hdPWUuc3Ryc3RhcnQpLGUucHJldl9sZW5ndGg9ZS5tYXRjaF9sZW5ndGgsZS5wcmV2X21hdGNoPWUubWF0Y2hfc3RhcnQsZS5tYXRjaF9sZW5ndGg9ZWUtMSxuIT09MCYmZS5wcmV2X2xlbmd0aDxlLm1heF9sYXp5X21hdGNoJiZlLnN0cnN0YXJ0LW48PWUud19zaXplLVplJiYoZS5tYXRjaF9sZW5ndGg9dmUoZSxuKSxlLm1hdGNoX2xlbmd0aDw9NSYmKGUuc3RyYXRlZ3k9PT1YbHx8ZS5tYXRjaF9sZW5ndGg9PT1lZSYmZS5zdHJzdGFydC1lLm1hdGNoX3N0YXJ0PjQwOTYpJiYoZS5tYXRjaF9sZW5ndGg9ZWUtMSkpLGUucHJldl9sZW5ndGg+PWVlJiZlLm1hdGNoX2xlbmd0aDw9ZS5wcmV2X2xlbmd0aCl7YT1lLnN0cnN0YXJ0K2UubG9va2FoZWFkLWVlLHI9ZW8uX3RyX3RhbGx5KGUsZS5zdHJzdGFydC0xLWUucHJldl9tYXRjaCxlLnByZXZfbGVuZ3RoLWVlKSxlLmxvb2thaGVhZC09ZS5wcmV2X2xlbmd0aC0xLGUucHJldl9sZW5ndGgtPTI7ZG8rK2Uuc3Ryc3RhcnQ8PWEmJihlLmluc19oPShlLmluc19oPDxlLmhhc2hfc2hpZnReZS53aW5kb3dbZS5zdHJzdGFydCtlZS0xXSkmZS5oYXNoX21hc2ssbj1lLnByZXZbZS5zdHJzdGFydCZlLndfbWFza109ZS5oZWFkW2UuaW5zX2hdLGUuaGVhZFtlLmluc19oXT1lLnN0cnN0YXJ0KTt3aGlsZSgtLWUucHJldl9sZW5ndGghPT0wKTtpZihlLm1hdGNoX2F2YWlsYWJsZT0wLGUubWF0Y2hfbGVuZ3RoPWVlLTEsZS5zdHJzdGFydCsrLHImJihWKGUsITEpLGUuc3RybS5hdmFpbF9vdXQ9PT0wKSlyZXR1cm4gbHR9ZWxzZSBpZihlLm1hdGNoX2F2YWlsYWJsZSl7aWYocj1lby5fdHJfdGFsbHkoZSwwLGUud2luZG93W2Uuc3Ryc3RhcnQtMV0pLHImJlYoZSwhMSksZS5zdHJzdGFydCsrLGUubG9va2FoZWFkLS0sZS5zdHJtLmF2YWlsX291dD09PTApcmV0dXJuIGx0fWVsc2UgZS5tYXRjaF9hdmFpbGFibGU9MSxlLnN0cnN0YXJ0KyssZS5sb29rYWhlYWQtLX1yZXR1cm4gZS5tYXRjaF9hdmFpbGFibGUmJihyPWVvLl90cl90YWxseShlLDAsZS53aW5kb3dbZS5zdHJzdGFydC0xXSksZS5tYXRjaF9hdmFpbGFibGU9MCksZS5pbnNlcnQ9ZS5zdHJzdGFydDxlZS0xP2Uuc3Ryc3RhcnQ6ZWUtMSx0PT09ZGk/KFYoZSwhMCksZS5zdHJtLmF2YWlsX291dD09PTA/aTpsKTplLmxhc3RfbGl0JiYoVihlLCExKSxlLnN0cm0uYXZhaWxfb3V0PT09MCk/bHQ6cnR9ZnVuY3Rpb24gaXQoZSx0KXtmb3IodmFyIG4scixhLHUsZz1lLndpbmRvdzs7KXtpZihlLmxvb2thaGVhZDw9QmUpe2lmKHRlKGUpLGUubG9va2FoZWFkPD1CZSYmdD09PXdhKXJldHVybiBsdDtpZihlLmxvb2thaGVhZD09PTApYnJlYWt9aWYoZS5tYXRjaF9sZW5ndGg9MCxlLmxvb2thaGVhZD49ZWUmJmUuc3Ryc3RhcnQ+MCYmKGE9ZS5zdHJzdGFydC0xLHI9Z1thXSxyPT09Z1srK2FdJiZyPT09Z1srK2FdJiZyPT09Z1srK2FdKSl7dT1lLnN0cnN0YXJ0K0JlO2RvO3doaWxlKHI9PT1nWysrYV0mJnI9PT1nWysrYV0mJnI9PT1nWysrYV0mJnI9PT1nWysrYV0mJnI9PT1nWysrYV0mJnI9PT1nWysrYV0mJnI9PT1nWysrYV0mJnI9PT1nWysrYV0mJmE8dSk7ZS5tYXRjaF9sZW5ndGg9QmUtKHUtYSksZS5tYXRjaF9sZW5ndGg+ZS5sb29rYWhlYWQmJihlLm1hdGNoX2xlbmd0aD1lLmxvb2thaGVhZCl9aWYoZS5tYXRjaF9sZW5ndGg+PWVlPyhuPWVvLl90cl90YWxseShlLDEsZS5tYXRjaF9sZW5ndGgtZWUpLGUubG9va2FoZWFkLT1lLm1hdGNoX2xlbmd0aCxlLnN0cnN0YXJ0Kz1lLm1hdGNoX2xlbmd0aCxlLm1hdGNoX2xlbmd0aD0wKToobj1lby5fdHJfdGFsbHkoZSwwLGUud2luZG93W2Uuc3Ryc3RhcnRdKSxlLmxvb2thaGVhZC0tLGUuc3Ryc3RhcnQrKyksbiYmKFYoZSwhMSksZS5zdHJtLmF2YWlsX291dD09PTApKXJldHVybiBsdH1yZXR1cm4gZS5pbnNlcnQ9MCx0PT09ZGk/KFYoZSwhMCksZS5zdHJtLmF2YWlsX291dD09PTA/aTpsKTplLmxhc3RfbGl0JiYoVihlLCExKSxlLnN0cm0uYXZhaWxfb3V0PT09MCk/bHQ6cnR9ZnVuY3Rpb24gSXQoZSx0KXtmb3IodmFyIG47Oyl7aWYoZS5sb29rYWhlYWQ9PT0wJiYodGUoZSksZS5sb29rYWhlYWQ9PT0wKSl7aWYodD09PXdhKXJldHVybiBsdDticmVha31pZihlLm1hdGNoX2xlbmd0aD0wLG49ZW8uX3RyX3RhbGx5KGUsMCxlLndpbmRvd1tlLnN0cnN0YXJ0XSksZS5sb29rYWhlYWQtLSxlLnN0cnN0YXJ0KyssbiYmKFYoZSwhMSksZS5zdHJtLmF2YWlsX291dD09PTApKXJldHVybiBsdH1yZXR1cm4gZS5pbnNlcnQ9MCx0PT09ZGk/KFYoZSwhMCksZS5zdHJtLmF2YWlsX291dD09PTA/aTpsKTplLmxhc3RfbGl0JiYoVihlLCExKSxlLnN0cm0uYXZhaWxfb3V0PT09MCk/bHQ6cnR9ZnVuY3Rpb24gQ3QoZSx0LG4scixhKXt0aGlzLmdvb2RfbGVuZ3RoPWUsdGhpcy5tYXhfbGF6eT10LHRoaXMubmljZV9sZW5ndGg9bix0aGlzLm1heF9jaGFpbj1yLHRoaXMuZnVuYz1hfXZhciBjZTtjZT1bbmV3IEN0KDAsMCwwLDAsbWUpLG5ldyBDdCg0LDQsOCw0LEplKSxuZXcgQ3QoNCw1LDE2LDgsSmUpLG5ldyBDdCg0LDYsMzIsMzIsSmUpLG5ldyBDdCg0LDQsMTYsMTYsY3QpLG5ldyBDdCg4LDE2LDMyLDMyLGN0KSxuZXcgQ3QoOCwxNiwxMjgsMTI4LGN0KSxuZXcgQ3QoOCwzMiwxMjgsMjU2LGN0KSxuZXcgQ3QoMzIsMTI4LDI1OCwxMDI0LGN0KSxuZXcgQ3QoMzIsMjU4LDI1OCw0MDk2LGN0KV07ZnVuY3Rpb24gTmUoZSl7ZS53aW5kb3dfc2l6ZT0yKmUud19zaXplLEMoZS5oZWFkKSxlLm1heF9sYXp5X21hdGNoPWNlW2UubGV2ZWxdLm1heF9sYXp5LGUuZ29vZF9tYXRjaD1jZVtlLmxldmVsXS5nb29kX2xlbmd0aCxlLm5pY2VfbWF0Y2g9Y2VbZS5sZXZlbF0ubmljZV9sZW5ndGgsZS5tYXhfY2hhaW5fbGVuZ3RoPWNlW2UubGV2ZWxdLm1heF9jaGFpbixlLnN0cnN0YXJ0PTAsZS5ibG9ja19zdGFydD0wLGUubG9va2FoZWFkPTAsZS5pbnNlcnQ9MCxlLm1hdGNoX2xlbmd0aD1lLnByZXZfbGVuZ3RoPWVlLTEsZS5tYXRjaF9hdmFpbGFibGU9MCxlLmluc19oPTB9ZnVuY3Rpb24gQ2UoKXt0aGlzLnN0cm09bnVsbCx0aGlzLnN0YXR1cz0wLHRoaXMucGVuZGluZ19idWY9bnVsbCx0aGlzLnBlbmRpbmdfYnVmX3NpemU9MCx0aGlzLnBlbmRpbmdfb3V0PTAsdGhpcy5wZW5kaW5nPTAsdGhpcy53cmFwPTAsdGhpcy5nemhlYWQ9bnVsbCx0aGlzLmd6aW5kZXg9MCx0aGlzLm1ldGhvZD1jLHRoaXMubGFzdF9mbHVzaD0tMSx0aGlzLndfc2l6ZT0wLHRoaXMud19iaXRzPTAsdGhpcy53X21hc2s9MCx0aGlzLndpbmRvdz1udWxsLHRoaXMud2luZG93X3NpemU9MCx0aGlzLnByZXY9bnVsbCx0aGlzLmhlYWQ9bnVsbCx0aGlzLmluc19oPTAsdGhpcy5oYXNoX3NpemU9MCx0aGlzLmhhc2hfYml0cz0wLHRoaXMuaGFzaF9tYXNrPTAsdGhpcy5oYXNoX3NoaWZ0PTAsdGhpcy5ibG9ja19zdGFydD0wLHRoaXMubWF0Y2hfbGVuZ3RoPTAsdGhpcy5wcmV2X21hdGNoPTAsdGhpcy5tYXRjaF9hdmFpbGFibGU9MCx0aGlzLnN0cnN0YXJ0PTAsdGhpcy5tYXRjaF9zdGFydD0wLHRoaXMubG9va2FoZWFkPTAsdGhpcy5wcmV2X2xlbmd0aD0wLHRoaXMubWF4X2NoYWluX2xlbmd0aD0wLHRoaXMubWF4X2xhenlfbWF0Y2g9MCx0aGlzLmxldmVsPTAsdGhpcy5zdHJhdGVneT0wLHRoaXMuZ29vZF9tYXRjaD0wLHRoaXMubmljZV9tYXRjaD0wLHRoaXMuZHluX2x0cmVlPW5ldyBuaS5CdWYxNihSZSoyKSx0aGlzLmR5bl9kdHJlZT1uZXcgbmkuQnVmMTYoKDIqVysxKSoyKSx0aGlzLmJsX3RyZWU9bmV3IG5pLkJ1ZjE2KCgyKmllKzEpKjIpLEModGhpcy5keW5fbHRyZWUpLEModGhpcy5keW5fZHRyZWUpLEModGhpcy5ibF90cmVlKSx0aGlzLmxfZGVzYz1udWxsLHRoaXMuZF9kZXNjPW51bGwsdGhpcy5ibF9kZXNjPW51bGwsdGhpcy5ibF9jb3VudD1uZXcgbmkuQnVmMTYoV2UrMSksdGhpcy5oZWFwPW5ldyBuaS5CdWYxNigyKksrMSksQyh0aGlzLmhlYXApLHRoaXMuaGVhcF9sZW49MCx0aGlzLmhlYXBfbWF4PTAsdGhpcy5kZXB0aD1uZXcgbmkuQnVmMTYoMipLKzEpLEModGhpcy5kZXB0aCksdGhpcy5sX2J1Zj0wLHRoaXMubGl0X2J1ZnNpemU9MCx0aGlzLmxhc3RfbGl0PTAsdGhpcy5kX2J1Zj0wLHRoaXMub3B0X2xlbj0wLHRoaXMuc3RhdGljX2xlbj0wLHRoaXMubWF0Y2hlcz0wLHRoaXMuaW5zZXJ0PTAsdGhpcy5iaV9idWY9MCx0aGlzLmJpX3ZhbGlkPTB9ZnVuY3Rpb24gVmUoZSl7dmFyIHQ7cmV0dXJuIWV8fCFlLnN0YXRlP20oZSx0byk6KGUudG90YWxfaW49ZS50b3RhbF9vdXQ9MCxlLmRhdGFfdHlwZT1vLHQ9ZS5zdGF0ZSx0LnBlbmRpbmc9MCx0LnBlbmRpbmdfb3V0PTAsdC53cmFwPDAmJih0LndyYXA9LXQud3JhcCksdC5zdGF0dXM9dC53cmFwP210OndlLGUuYWRsZXI9dC53cmFwPT09Mj8wOjEsdC5sYXN0X2ZsdXNoPXdhLGVvLl90cl9pbml0KHQpLHhvKX1mdW5jdGlvbiBidChlKXt2YXIgdD1WZShlKTtyZXR1cm4gdD09PXhvJiZOZShlLnN0YXRlKSx0fWZ1bmN0aW9uIG90KGUsdCl7cmV0dXJuIWV8fCFlLnN0YXRlfHxlLnN0YXRlLndyYXAhPT0yP3RvOihlLnN0YXRlLmd6aGVhZD10LHhvKX1mdW5jdGlvbiBCKGUsdCxuLHIsYSx1KXtpZighZSlyZXR1cm4gdG87dmFyIGc9MTtpZih0PT09WmwmJih0PTYpLHI8MD8oZz0wLHI9LXIpOnI+MTUmJihnPTIsci09MTYpLGE8MXx8YT52fHxuIT09Y3x8cjw4fHxyPjE1fHx0PDB8fHQ+OXx8dTwwfHx1PlFsKXJldHVybiBtKGUsdG8pO3I9PT04JiYocj05KTt2YXIgeT1uZXcgQ2U7cmV0dXJuIGUuc3RhdGU9eSx5LnN0cm09ZSx5LndyYXA9Zyx5Lmd6aGVhZD1udWxsLHkud19iaXRzPXIseS53X3NpemU9MTw8eS53X2JpdHMseS53X21hc2s9eS53X3NpemUtMSx5Lmhhc2hfYml0cz1hKzcseS5oYXNoX3NpemU9MTw8eS5oYXNoX2JpdHMseS5oYXNoX21hc2s9eS5oYXNoX3NpemUtMSx5Lmhhc2hfc2hpZnQ9fn4oKHkuaGFzaF9iaXRzK2VlLTEpL2VlKSx5LndpbmRvdz1uZXcgbmkuQnVmOCh5Lndfc2l6ZSoyKSx5LmhlYWQ9bmV3IG5pLkJ1ZjE2KHkuaGFzaF9zaXplKSx5LnByZXY9bmV3IG5pLkJ1ZjE2KHkud19zaXplKSx5LmxpdF9idWZzaXplPTE8PGErNix5LnBlbmRpbmdfYnVmX3NpemU9eS5saXRfYnVmc2l6ZSo0LHkucGVuZGluZ19idWY9bmV3IG5pLkJ1ZjgoeS5wZW5kaW5nX2J1Zl9zaXplKSx5LmRfYnVmPTEqeS5saXRfYnVmc2l6ZSx5LmxfYnVmPSgxKzIpKnkubGl0X2J1ZnNpemUseS5sZXZlbD10LHkuc3RyYXRlZ3k9dSx5Lm1ldGhvZD1uLGJ0KGUpfWZ1bmN0aW9uICQoZSx0KXtyZXR1cm4gQihlLHQsYyxTLFAsa2MpfWZ1bmN0aW9uIHJlKGUsdCl7dmFyIG4scixhLHU7aWYoIWV8fCFlLnN0YXRlfHx0PkNhfHx0PDApcmV0dXJuIGU/bShlLHRvKTp0bztpZihyPWUuc3RhdGUsIWUub3V0cHV0fHwhZS5pbnB1dCYmZS5hdmFpbF9pbiE9PTB8fHIuc3RhdHVzPT09emUmJnQhPT1kaSlyZXR1cm4gbShlLGUuYXZhaWxfb3V0PT09MD9xczp0byk7aWYoci5zdHJtPWUsbj1yLmxhc3RfZmx1c2gsci5sYXN0X2ZsdXNoPXQsci5zdGF0dXM9PT1tdClpZihyLndyYXA9PT0yKWUuYWRsZXI9MCxVKHIsMzEpLFUociwxMzkpLFUociw4KSxyLmd6aGVhZD8oVShyLChyLmd6aGVhZC50ZXh0PzE6MCkrKHIuZ3poZWFkLmhjcmM/MjowKSsoci5nemhlYWQuZXh0cmE/NDowKSsoci5nemhlYWQubmFtZT84OjApKyhyLmd6aGVhZC5jb21tZW50PzE2OjApKSxVKHIsci5nemhlYWQudGltZSYyNTUpLFUocixyLmd6aGVhZC50aW1lPj44JjI1NSksVShyLHIuZ3poZWFkLnRpbWU+PjE2JjI1NSksVShyLHIuZ3poZWFkLnRpbWU+PjI0JjI1NSksVShyLHIubGV2ZWw9PT05PzI6ci5zdHJhdGVneT49aXN8fHIubGV2ZWw8Mj80OjApLFUocixyLmd6aGVhZC5vcyYyNTUpLHIuZ3poZWFkLmV4dHJhJiZyLmd6aGVhZC5leHRyYS5sZW5ndGgmJihVKHIsci5nemhlYWQuZXh0cmEubGVuZ3RoJjI1NSksVShyLHIuZ3poZWFkLmV4dHJhLmxlbmd0aD4+OCYyNTUpKSxyLmd6aGVhZC5oY3JjJiYoZS5hZGxlcj1GaShlLmFkbGVyLHIucGVuZGluZ19idWYsci5wZW5kaW5nLDApKSxyLmd6aW5kZXg9MCxyLnN0YXR1cz1XdCk6KFUociwwKSxVKHIsMCksVShyLDApLFUociwwKSxVKHIsMCksVShyLHIubGV2ZWw9PT05PzI6ci5zdHJhdGVneT49aXN8fHIubGV2ZWw8Mj80OjApLFUocixkKSxyLnN0YXR1cz13ZSk7ZWxzZXt2YXIgZz1jKyhyLndfYml0cy04PDw0KTw8OCx5PS0xO3Iuc3RyYXRlZ3k+PWlzfHxyLmxldmVsPDI/eT0wOnIubGV2ZWw8Nj95PTE6ci5sZXZlbD09PTY/eT0yOnk9MyxnfD15PDw2LHIuc3Ryc3RhcnQhPT0wJiYoZ3w9RXQpLGcrPTMxLWclMzEsci5zdGF0dXM9d2UsWihyLGcpLHIuc3Ryc3RhcnQhPT0wJiYoWihyLGUuYWRsZXI+Pj4xNiksWihyLGUuYWRsZXImNjU1MzUpKSxlLmFkbGVyPTF9aWYoci5zdGF0dXM9PT1XdClpZihyLmd6aGVhZC5leHRyYSl7Zm9yKGE9ci5wZW5kaW5nO3IuZ3ppbmRleDwoci5nemhlYWQuZXh0cmEubGVuZ3RoJjY1NTM1KSYmIShyLnBlbmRpbmc9PT1yLnBlbmRpbmdfYnVmX3NpemUmJihyLmd6aGVhZC5oY3JjJiZyLnBlbmRpbmc+YSYmKGUuYWRsZXI9RmkoZS5hZGxlcixyLnBlbmRpbmdfYnVmLHIucGVuZGluZy1hLGEpKSxrKGUpLGE9ci5wZW5kaW5nLHIucGVuZGluZz09PXIucGVuZGluZ19idWZfc2l6ZSkpOylVKHIsci5nemhlYWQuZXh0cmFbci5nemluZGV4XSYyNTUpLHIuZ3ppbmRleCsrO3IuZ3poZWFkLmhjcmMmJnIucGVuZGluZz5hJiYoZS5hZGxlcj1GaShlLmFkbGVyLHIucGVuZGluZ19idWYsci5wZW5kaW5nLWEsYSkpLHIuZ3ppbmRleD09PXIuZ3poZWFkLmV4dHJhLmxlbmd0aCYmKHIuZ3ppbmRleD0wLHIuc3RhdHVzPUd0KX1lbHNlIHIuc3RhdHVzPUd0O2lmKHIuc3RhdHVzPT09R3QpaWYoci5nemhlYWQubmFtZSl7YT1yLnBlbmRpbmc7ZG97aWYoci5wZW5kaW5nPT09ci5wZW5kaW5nX2J1Zl9zaXplJiYoci5nemhlYWQuaGNyYyYmci5wZW5kaW5nPmEmJihlLmFkbGVyPUZpKGUuYWRsZXIsci5wZW5kaW5nX2J1ZixyLnBlbmRpbmctYSxhKSksayhlKSxhPXIucGVuZGluZyxyLnBlbmRpbmc9PT1yLnBlbmRpbmdfYnVmX3NpemUpKXt1PTE7YnJlYWt9ci5nemluZGV4PHIuZ3poZWFkLm5hbWUubGVuZ3RoP3U9ci5nemhlYWQubmFtZS5jaGFyQ29kZUF0KHIuZ3ppbmRleCsrKSYyNTU6dT0wLFUocix1KX13aGlsZSh1IT09MCk7ci5nemhlYWQuaGNyYyYmci5wZW5kaW5nPmEmJihlLmFkbGVyPUZpKGUuYWRsZXIsci5wZW5kaW5nX2J1ZixyLnBlbmRpbmctYSxhKSksdT09PTAmJihyLmd6aW5kZXg9MCxyLnN0YXR1cz1mZSl9ZWxzZSByLnN0YXR1cz1mZTtpZihyLnN0YXR1cz09PWZlKWlmKHIuZ3poZWFkLmNvbW1lbnQpe2E9ci5wZW5kaW5nO2Rve2lmKHIucGVuZGluZz09PXIucGVuZGluZ19idWZfc2l6ZSYmKHIuZ3poZWFkLmhjcmMmJnIucGVuZGluZz5hJiYoZS5hZGxlcj1GaShlLmFkbGVyLHIucGVuZGluZ19idWYsci5wZW5kaW5nLWEsYSkpLGsoZSksYT1yLnBlbmRpbmcsci5wZW5kaW5nPT09ci5wZW5kaW5nX2J1Zl9zaXplKSl7dT0xO2JyZWFrfXIuZ3ppbmRleDxyLmd6aGVhZC5jb21tZW50Lmxlbmd0aD91PXIuZ3poZWFkLmNvbW1lbnQuY2hhckNvZGVBdChyLmd6aW5kZXgrKykmMjU1OnU9MCxVKHIsdSl9d2hpbGUodSE9PTApO3IuZ3poZWFkLmhjcmMmJnIucGVuZGluZz5hJiYoZS5hZGxlcj1GaShlLmFkbGVyLHIucGVuZGluZ19idWYsci5wZW5kaW5nLWEsYSkpLHU9PT0wJiYoci5zdGF0dXM9eGUpfWVsc2Ugci5zdGF0dXM9eGU7aWYoci5zdGF0dXM9PT14ZSYmKHIuZ3poZWFkLmhjcmM/KHIucGVuZGluZysyPnIucGVuZGluZ19idWZfc2l6ZSYmayhlKSxyLnBlbmRpbmcrMjw9ci5wZW5kaW5nX2J1Zl9zaXplJiYoVShyLGUuYWRsZXImMjU1KSxVKHIsZS5hZGxlcj4+OCYyNTUpLGUuYWRsZXI9MCxyLnN0YXR1cz13ZSkpOnIuc3RhdHVzPXdlKSxyLnBlbmRpbmchPT0wKXtpZihrKGUpLGUuYXZhaWxfb3V0PT09MClyZXR1cm4gci5sYXN0X2ZsdXNoPS0xLHhvfWVsc2UgaWYoZS5hdmFpbF9pbj09PTAmJkEodCk8PUEobikmJnQhPT1kaSlyZXR1cm4gbShlLHFzKTtpZihyLnN0YXR1cz09PXplJiZlLmF2YWlsX2luIT09MClyZXR1cm4gbShlLHFzKTtpZihlLmF2YWlsX2luIT09MHx8ci5sb29rYWhlYWQhPT0wfHx0IT09d2EmJnIuc3RhdHVzIT09emUpe3ZhciBNPXIuc3RyYXRlZ3k9PT1pcz9JdChyLHQpOnIuc3RyYXRlZ3k9PT1tbD9pdChyLHQpOmNlW3IubGV2ZWxdLmZ1bmMocix0KTtpZigoTT09PWl8fE09PT1sKSYmKHIuc3RhdHVzPXplKSxNPT09bHR8fE09PT1pKXJldHVybiBlLmF2YWlsX291dD09PTAmJihyLmxhc3RfZmx1c2g9LTEpLHhvO2lmKE09PT1ydCYmKHQ9PT1JYz9lby5fdHJfYWxpZ24ocik6dCE9PUNhJiYoZW8uX3RyX3N0b3JlZF9ibG9jayhyLDAsMCwhMSksdD09PXZsJiYoQyhyLmhlYWQpLHIubG9va2FoZWFkPT09MCYmKHIuc3Ryc3RhcnQ9MCxyLmJsb2NrX3N0YXJ0PTAsci5pbnNlcnQ9MCkpKSxrKGUpLGUuYXZhaWxfb3V0PT09MCkpcmV0dXJuIHIubGFzdF9mbHVzaD0tMSx4b31yZXR1cm4gdCE9PWRpP3hvOnIud3JhcDw9MD9Hczooci53cmFwPT09Mj8oVShyLGUuYWRsZXImMjU1KSxVKHIsZS5hZGxlcj4+OCYyNTUpLFUocixlLmFkbGVyPj4xNiYyNTUpLFUocixlLmFkbGVyPj4yNCYyNTUpLFUocixlLnRvdGFsX2luJjI1NSksVShyLGUudG90YWxfaW4+PjgmMjU1KSxVKHIsZS50b3RhbF9pbj4+MTYmMjU1KSxVKHIsZS50b3RhbF9pbj4+MjQmMjU1KSk6KFoocixlLmFkbGVyPj4+MTYpLFoocixlLmFkbGVyJjY1NTM1KSksayhlKSxyLndyYXA+MCYmKHIud3JhcD0tci53cmFwKSxyLnBlbmRpbmchPT0wP3hvOkdzKX1mdW5jdGlvbiBnZShlKXt2YXIgdDtyZXR1cm4hZXx8IWUuc3RhdGU/dG86KHQ9ZS5zdGF0ZS5zdGF0dXMsdCE9PW10JiZ0IT09V3QmJnQhPT1HdCYmdCE9PWZlJiZ0IT09eGUmJnQhPT13ZSYmdCE9PXplP20oZSx0byk6KGUuc3RhdGU9bnVsbCx0PT09d2U/bShlLEpsKTp4bykpfWZ1bmN0aW9uIHNlKGUsdCl7dmFyIG49dC5sZW5ndGgscixhLHUsZyx5LE0sTyx4O2lmKCFlfHwhZS5zdGF0ZXx8KHI9ZS5zdGF0ZSxnPXIud3JhcCxnPT09Mnx8Zz09PTEmJnIuc3RhdHVzIT09bXR8fHIubG9va2FoZWFkKSlyZXR1cm4gdG87Zm9yKGc9PT0xJiYoZS5hZGxlcj1wbChlLmFkbGVyLHQsbiwwKSksci53cmFwPTAsbj49ci53X3NpemUmJihnPT09MCYmKEMoci5oZWFkKSxyLnN0cnN0YXJ0PTAsci5ibG9ja19zdGFydD0wLHIuaW5zZXJ0PTApLHg9bmV3IG5pLkJ1Zjgoci53X3NpemUpLG5pLmFycmF5U2V0KHgsdCxuLXIud19zaXplLHIud19zaXplLDApLHQ9eCxuPXIud19zaXplKSx5PWUuYXZhaWxfaW4sTT1lLm5leHRfaW4sTz1lLmlucHV0LGUuYXZhaWxfaW49bixlLm5leHRfaW49MCxlLmlucHV0PXQsdGUocik7ci5sb29rYWhlYWQ+PWVlOyl7YT1yLnN0cnN0YXJ0LHU9ci5sb29rYWhlYWQtKGVlLTEpO2RvIHIuaW5zX2g9KHIuaW5zX2g8PHIuaGFzaF9zaGlmdF5yLndpbmRvd1thK2VlLTFdKSZyLmhhc2hfbWFzayxyLnByZXZbYSZyLndfbWFza109ci5oZWFkW3IuaW5zX2hdLHIuaGVhZFtyLmluc19oXT1hLGErKzt3aGlsZSgtLXUpO3Iuc3Ryc3RhcnQ9YSxyLmxvb2thaGVhZD1lZS0xLHRlKHIpfXJldHVybiByLnN0cnN0YXJ0Kz1yLmxvb2thaGVhZCxyLmJsb2NrX3N0YXJ0PXIuc3Ryc3RhcnQsci5pbnNlcnQ9ci5sb29rYWhlYWQsci5sb29rYWhlYWQ9MCxyLm1hdGNoX2xlbmd0aD1yLnByZXZfbGVuZ3RoPWVlLTEsci5tYXRjaF9hdmFpbGFibGU9MCxlLm5leHRfaW49TSxlLmlucHV0PU8sZS5hdmFpbF9pbj15LHIud3JhcD1nLHhvfVVyLmRlZmxhdGVJbml0PSQsVXIuZGVmbGF0ZUluaXQyPUIsVXIuZGVmbGF0ZVJlc2V0PWJ0LFVyLmRlZmxhdGVSZXNldEtlZXA9VmUsVXIuZGVmbGF0ZVNldEhlYWRlcj1vdCxVci5kZWZsYXRlPXJlLFVyLmRlZmxhdGVFbmQ9Z2UsVXIuZGVmbGF0ZVNldERpY3Rpb25hcnk9c2UsVXIuZGVmbGF0ZUluZm89InBha28gZGVmbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdCkiO3ZhciBrZT17fSxHZT1IdCxFZT0hMCxZZT0hMDt0cnl7U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLFswXSl9Y2F0Y2goZSl7RWU9ITF9dHJ5e1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxuZXcgVWludDhBcnJheSgxKSl9Y2F0Y2goZSl7WWU9ITF9Zm9yKHZhciBGZT1uZXcgR2UuQnVmOCgyNTYpLF90PTA7X3Q8MjU2O190KyspRmVbX3RdPV90Pj0yNTI/NjpfdD49MjQ4PzU6X3Q+PTI0MD80Ol90Pj0yMjQ/MzpfdD49MTkyPzI6MTtGZVsyNTRdPUZlWzI1NF09MSxrZS5zdHJpbmcyYnVmPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixhLHUsZz1lLmxlbmd0aCx5PTA7Zm9yKGE9MDthPGc7YSsrKW49ZS5jaGFyQ29kZUF0KGEpLChuJjY0NTEyKT09PTU1Mjk2JiZhKzE8ZyYmKHI9ZS5jaGFyQ29kZUF0KGErMSksKHImNjQ1MTIpPT09NTYzMjAmJihuPTY1NTM2KyhuLTU1Mjk2PDwxMCkrKHItNTYzMjApLGErKykpLHkrPW48MTI4PzE6bjwyMDQ4PzI6bjw2NTUzNj8zOjQ7Zm9yKHQ9bmV3IEdlLkJ1ZjgoeSksdT0wLGE9MDt1PHk7YSsrKW49ZS5jaGFyQ29kZUF0KGEpLChuJjY0NTEyKT09PTU1Mjk2JiZhKzE8ZyYmKHI9ZS5jaGFyQ29kZUF0KGErMSksKHImNjQ1MTIpPT09NTYzMjAmJihuPTY1NTM2KyhuLTU1Mjk2PDwxMCkrKHItNTYzMjApLGErKykpLG48MTI4P3RbdSsrXT1uOm48MjA0OD8odFt1KytdPTE5MnxuPj4+Nix0W3UrK109MTI4fG4mNjMpOm48NjU1MzY/KHRbdSsrXT0yMjR8bj4+PjEyLHRbdSsrXT0xMjh8bj4+PjYmNjMsdFt1KytdPTEyOHxuJjYzKToodFt1KytdPTI0MHxuPj4+MTgsdFt1KytdPTEyOHxuPj4+MTImNjMsdFt1KytdPTEyOHxuPj4+NiY2Myx0W3UrK109MTI4fG4mNjMpO3JldHVybiB0fTtmdW5jdGlvbiBSdChlLHQpe2lmKHQ8NjU1MzQmJihlLnN1YmFycmF5JiZZZXx8IWUuc3ViYXJyYXkmJkVlKSlyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLEdlLnNocmlua0J1ZihlLHQpKTtmb3IodmFyIG49IiIscj0wO3I8dDtyKyspbis9U3RyaW5nLmZyb21DaGFyQ29kZShlW3JdKTtyZXR1cm4gbn1rZS5idWYyYmluc3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBSdChlLGUubGVuZ3RoKX0sa2UuYmluc3RyaW5nMmJ1Zj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9bmV3IEdlLkJ1ZjgoZS5sZW5ndGgpLG49MCxyPXQubGVuZ3RoO248cjtuKyspdFtuXT1lLmNoYXJDb2RlQXQobik7cmV0dXJuIHR9LGtlLmJ1ZjJzdHJpbmc9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGEsdSxnPXR8fGUubGVuZ3RoLHk9bmV3IEFycmF5KGcqMik7Zm9yKHI9MCxuPTA7bjxnOyl7aWYoYT1lW24rK10sYTwxMjgpe3lbcisrXT1hO2NvbnRpbnVlfWlmKHU9RmVbYV0sdT40KXt5W3IrK109NjU1MzMsbis9dS0xO2NvbnRpbnVlfWZvcihhJj11PT09Mj8zMTp1PT09Mz8xNTo3O3U+MSYmbjxnOylhPWE8PDZ8ZVtuKytdJjYzLHUtLTtpZih1PjEpe3lbcisrXT02NTUzMztjb250aW51ZX1hPDY1NTM2P3lbcisrXT1hOihhLT02NTUzNix5W3IrK109NTUyOTZ8YT4+MTAmMTAyMyx5W3IrK109NTYzMjB8YSYxMDIzKX1yZXR1cm4gUnQoeSxyKX0sa2UudXRmOGJvcmRlcj1mdW5jdGlvbihlLHQpe3ZhciBuO2Zvcih0PXR8fGUubGVuZ3RoLHQ+ZS5sZW5ndGgmJih0PWUubGVuZ3RoKSxuPXQtMTtuPj0wJiYoZVtuXSYxOTIpPT09MTI4OyluLS07cmV0dXJuIG48MHx8bj09PTA/dDpuK0ZlW2Vbbl1dPnQ/bjp0fTtmdW5jdGlvbiBMdCgpe3RoaXMuaW5wdXQ9bnVsbCx0aGlzLm5leHRfaW49MCx0aGlzLmF2YWlsX2luPTAsdGhpcy50b3RhbF9pbj0wLHRoaXMub3V0cHV0PW51bGwsdGhpcy5uZXh0X291dD0wLHRoaXMuYXZhaWxfb3V0PTAsdGhpcy50b3RhbF9vdXQ9MCx0aGlzLm1zZz0iIix0aGlzLnN0YXRlPW51bGwsdGhpcy5kYXRhX3R5cGU9Mix0aGlzLmFkbGVyPTB9dmFyIHp0PUx0LE5uPVVyLFBuPUh0LExuPWtlLEtuPVVhLCRyPXp0LHNhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsSG49MCxLbz00LHdpPTAsaGk9MSxCbz0yLHE9LTEsUT0wLEFlPTg7ZnVuY3Rpb24gSWUoZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgSWUpKXJldHVybiBuZXcgSWUoZSk7dGhpcy5vcHRpb25zPVBuLmFzc2lnbih7bGV2ZWw6cSxtZXRob2Q6QWUsY2h1bmtTaXplOjE2Mzg0LHdpbmRvd0JpdHM6MTUsbWVtTGV2ZWw6OCxzdHJhdGVneTpRLHRvOiIifSxlfHx7fSk7dmFyIHQ9dGhpcy5vcHRpb25zO3QucmF3JiZ0LndpbmRvd0JpdHM+MD90LndpbmRvd0JpdHM9LXQud2luZG93Qml0czp0Lmd6aXAmJnQud2luZG93Qml0cz4wJiZ0LndpbmRvd0JpdHM8MTYmJih0LndpbmRvd0JpdHMrPTE2KSx0aGlzLmVycj0wLHRoaXMubXNnPSIiLHRoaXMuZW5kZWQ9ITEsdGhpcy5jaHVua3M9W10sdGhpcy5zdHJtPW5ldyAkcix0aGlzLnN0cm0uYXZhaWxfb3V0PTA7dmFyIG49Tm4uZGVmbGF0ZUluaXQyKHRoaXMuc3RybSx0LmxldmVsLHQubWV0aG9kLHQud2luZG93Qml0cyx0Lm1lbUxldmVsLHQuc3RyYXRlZ3kpO2lmKG4hPT13aSl0aHJvdyBuZXcgRXJyb3IoS25bbl0pO2lmKHQuaGVhZGVyJiZObi5kZWZsYXRlU2V0SGVhZGVyKHRoaXMuc3RybSx0LmhlYWRlciksdC5kaWN0aW9uYXJ5KXt2YXIgcjtpZih0eXBlb2YgdC5kaWN0aW9uYXJ5PT0ic3RyaW5nIj9yPUxuLnN0cmluZzJidWYodC5kaWN0aW9uYXJ5KTpzYS5jYWxsKHQuZGljdGlvbmFyeSk9PT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iP3I9bmV3IFVpbnQ4QXJyYXkodC5kaWN0aW9uYXJ5KTpyPXQuZGljdGlvbmFyeSxuPU5uLmRlZmxhdGVTZXREaWN0aW9uYXJ5KHRoaXMuc3RybSxyKSxuIT09d2kpdGhyb3cgbmV3IEVycm9yKEtuW25dKTt0aGlzLl9kaWN0X3NldD0hMH19SWUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnN0cm0scj10aGlzLm9wdGlvbnMuY2h1bmtTaXplLGEsdTtpZih0aGlzLmVuZGVkKXJldHVybiExO3U9dD09PX5+dD90OnQ9PT0hMD9LbzpIbix0eXBlb2YgZT09InN0cmluZyI/bi5pbnB1dD1Mbi5zdHJpbmcyYnVmKGUpOnNhLmNhbGwoZSk9PT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iP24uaW5wdXQ9bmV3IFVpbnQ4QXJyYXkoZSk6bi5pbnB1dD1lLG4ubmV4dF9pbj0wLG4uYXZhaWxfaW49bi5pbnB1dC5sZW5ndGg7ZG97aWYobi5hdmFpbF9vdXQ9PT0wJiYobi5vdXRwdXQ9bmV3IFBuLkJ1Zjgociksbi5uZXh0X291dD0wLG4uYXZhaWxfb3V0PXIpLGE9Tm4uZGVmbGF0ZShuLHUpLGEhPT1oaSYmYSE9PXdpKXJldHVybiB0aGlzLm9uRW5kKGEpLHRoaXMuZW5kZWQ9ITAsITE7KG4uYXZhaWxfb3V0PT09MHx8bi5hdmFpbF9pbj09PTAmJih1PT09S298fHU9PT1CbykpJiYodGhpcy5vcHRpb25zLnRvPT09InN0cmluZyI/dGhpcy5vbkRhdGEoTG4uYnVmMmJpbnN0cmluZyhQbi5zaHJpbmtCdWYobi5vdXRwdXQsbi5uZXh0X291dCkpKTp0aGlzLm9uRGF0YShQbi5zaHJpbmtCdWYobi5vdXRwdXQsbi5uZXh0X291dCkpKX13aGlsZSgobi5hdmFpbF9pbj4wfHxuLmF2YWlsX291dD09PTApJiZhIT09aGkpO3JldHVybiB1PT09S28/KGE9Tm4uZGVmbGF0ZUVuZCh0aGlzLnN0cm0pLHRoaXMub25FbmQoYSksdGhpcy5lbmRlZD0hMCxhPT09d2kpOih1PT09Qm8mJih0aGlzLm9uRW5kKHdpKSxuLmF2YWlsX291dD0wKSwhMCl9LEllLnByb3RvdHlwZS5vbkRhdGE9ZnVuY3Rpb24oZSl7dGhpcy5jaHVua3MucHVzaChlKX0sSWUucHJvdG90eXBlLm9uRW5kPWZ1bmN0aW9uKGUpe2U9PT13aSYmKHRoaXMub3B0aW9ucy50bz09PSJzdHJpbmciP3RoaXMucmVzdWx0PXRoaXMuY2h1bmtzLmpvaW4oIiIpOnRoaXMucmVzdWx0PVBuLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXSx0aGlzLmVycj1lLHRoaXMubXNnPXRoaXMuc3RybS5tc2d9O2Z1bmN0aW9uIFVlKGUsdCl7dmFyIG49bmV3IEllKHQpO2lmKG4ucHVzaChlLCEwKSxuLmVycil0aHJvdyBuLm1zZ3x8S25bbi5lcnJdO3JldHVybiBuLnJlc3VsdH1mdW5jdGlvbiB0dChlLHQpe3JldHVybiB0PXR8fHt9LHQucmF3PSEwLFVlKGUsdCl9ZnVuY3Rpb24gU3QoZSx0KXtyZXR1cm4gdD10fHx7fSx0Lmd6aXA9ITAsVWUoZSx0KX1xci5EZWZsYXRlPUllLHFyLmRlZmxhdGU9VWUscXIuZGVmbGF0ZVJhdz10dCxxci5nemlwPVN0O3ZhciBYZT17fSxRZT17fSxLZT0zMCxVdD0xMix0bj1mdW5jdGlvbih0LG4pe3ZhciByLGEsdSxnLHksTSxPLHgsaGUsYmUsUGUsZ3QseXQsWnQsVnQsd24sYm4seHQsYXQsWHQsJHQsS3QsanQsSm4sUXQ7cj10LnN0YXRlLGE9dC5uZXh0X2luLEpuPXQuaW5wdXQsdT1hKyh0LmF2YWlsX2luLTUpLGc9dC5uZXh0X291dCxRdD10Lm91dHB1dCx5PWctKG4tdC5hdmFpbF9vdXQpLE09ZysodC5hdmFpbF9vdXQtMjU3KSxPPXIuZG1heCx4PXIud3NpemUsaGU9ci53aGF2ZSxiZT1yLnduZXh0LFBlPXIud2luZG93LGd0PXIuaG9sZCx5dD1yLmJpdHMsWnQ9ci5sZW5jb2RlLFZ0PXIuZGlzdGNvZGUsd249KDE8PHIubGVuYml0cyktMSxibj0oMTw8ci5kaXN0Yml0cyktMTtlOmRve3l0PDE1JiYoZ3QrPUpuW2ErK108PHl0LHl0Kz04LGd0Kz1KblthKytdPDx5dCx5dCs9OCkseHQ9WnRbZ3Qmd25dO3Q6Zm9yKDs7KXtpZihhdD14dD4+PjI0LGd0Pj4+PWF0LHl0LT1hdCxhdD14dD4+PjE2JjI1NSxhdD09PTApUXRbZysrXT14dCY2NTUzNTtlbHNlIGlmKGF0JjE2KXtYdD14dCY2NTUzNSxhdCY9MTUsYXQmJih5dDxhdCYmKGd0Kz1KblthKytdPDx5dCx5dCs9OCksWHQrPWd0JigxPDxhdCktMSxndD4+Pj1hdCx5dC09YXQpLHl0PDE1JiYoZ3QrPUpuW2ErK108PHl0LHl0Kz04LGd0Kz1KblthKytdPDx5dCx5dCs9OCkseHQ9VnRbZ3QmYm5dO246Zm9yKDs7KXtpZihhdD14dD4+PjI0LGd0Pj4+PWF0LHl0LT1hdCxhdD14dD4+PjE2JjI1NSxhdCYxNil7aWYoJHQ9eHQmNjU1MzUsYXQmPTE1LHl0PGF0JiYoZ3QrPUpuW2ErK108PHl0LHl0Kz04LHl0PGF0JiYoZ3QrPUpuW2ErK108PHl0LHl0Kz04KSksJHQrPWd0JigxPDxhdCktMSwkdD5PKXt0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLHIubW9kZT1LZTticmVhayBlfWlmKGd0Pj4+PWF0LHl0LT1hdCxhdD1nLXksJHQ+YXQpe2lmKGF0PSR0LWF0LGF0PmhlJiZyLnNhbmUpe3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsci5tb2RlPUtlO2JyZWFrIGV9aWYoS3Q9MCxqdD1QZSxiZT09PTApe2lmKEt0Kz14LWF0LGF0PFh0KXtYdC09YXQ7ZG8gUXRbZysrXT1QZVtLdCsrXTt3aGlsZSgtLWF0KTtLdD1nLSR0LGp0PVF0fX1lbHNlIGlmKGJlPGF0KXtpZihLdCs9eCtiZS1hdCxhdC09YmUsYXQ8WHQpe1h0LT1hdDtkbyBRdFtnKytdPVBlW0t0KytdO3doaWxlKC0tYXQpO2lmKEt0PTAsYmU8WHQpe2F0PWJlLFh0LT1hdDtkbyBRdFtnKytdPVBlW0t0KytdO3doaWxlKC0tYXQpO0t0PWctJHQsanQ9UXR9fX1lbHNlIGlmKEt0Kz1iZS1hdCxhdDxYdCl7WHQtPWF0O2RvIFF0W2crK109UGVbS3QrK107d2hpbGUoLS1hdCk7S3Q9Zy0kdCxqdD1RdH1mb3IoO1h0PjI7KVF0W2crK109anRbS3QrK10sUXRbZysrXT1qdFtLdCsrXSxRdFtnKytdPWp0W0t0KytdLFh0LT0zO1h0JiYoUXRbZysrXT1qdFtLdCsrXSxYdD4xJiYoUXRbZysrXT1qdFtLdCsrXSkpfWVsc2V7S3Q9Zy0kdDtkbyBRdFtnKytdPVF0W0t0KytdLFF0W2crK109UXRbS3QrK10sUXRbZysrXT1RdFtLdCsrXSxYdC09Mzt3aGlsZShYdD4yKTtYdCYmKFF0W2crK109UXRbS3QrK10sWHQ+MSYmKFF0W2crK109UXRbS3QrK10pKX19ZWxzZSBpZigoYXQmNjQpPT09MCl7eHQ9VnRbKHh0JjY1NTM1KSsoZ3QmKDE8PGF0KS0xKV07Y29udGludWUgbn1lbHNle3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlIGNvZGUiLHIubW9kZT1LZTticmVhayBlfWJyZWFrfX1lbHNlIGlmKChhdCY2NCk9PT0wKXt4dD1adFsoeHQmNjU1MzUpKyhndCYoMTw8YXQpLTEpXTtjb250aW51ZSB0fWVsc2UgaWYoYXQmMzIpe3IubW9kZT1VdDticmVhayBlfWVsc2V7dC5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSIsci5tb2RlPUtlO2JyZWFrIGV9YnJlYWt9fXdoaWxlKGE8dSYmZzxNKTtYdD15dD4+MyxhLT1YdCx5dC09WHQ8PDMsZ3QmPSgxPDx5dCktMSx0Lm5leHRfaW49YSx0Lm5leHRfb3V0PWcsdC5hdmFpbF9pbj1hPHU/NSsodS1hKTo1LShhLXUpLHQuYXZhaWxfb3V0PWc8TT8yNTcrKE0tZyk6MjU3LShnLU0pLHIuaG9sZD1ndCxyLmJpdHM9eXR9LHF0PUh0LF9uPTE1LFlyPTg1Mixhcj01OTIsVmk9MCxBYT0xLG9zPTIsUmM9WzMsNCw1LDYsNyw4LDksMTAsMTEsMTMsMTUsMTcsMTksMjMsMjcsMzEsMzUsNDMsNTEsNTksNjcsODMsOTksMTE1LDEzMSwxNjMsMTk1LDIyNywyNTgsMCwwXSxrcj1bMTYsMTYsMTYsMTYsMTYsMTYsMTYsMTYsMTcsMTcsMTcsMTcsMTgsMTgsMTgsMTgsMTksMTksMTksMTksMjAsMjAsMjAsMjAsMjEsMjEsMjEsMjEsMTYsNzIsNzhdLF9sPVsxLDIsMyw0LDUsNyw5LDEzLDE3LDI1LDMzLDQ5LDY1LDk3LDEyOSwxOTMsMjU3LDM4NSw1MTMsNzY5LDEwMjUsMTUzNywyMDQ5LDMwNzMsNDA5Nyw2MTQ1LDgxOTMsMTIyODksMTYzODUsMjQ1NzcsMCwwXSxibD1bMTYsMTYsMTYsMTYsMTcsMTcsMTgsMTgsMTksMTksMjAsMjAsMjEsMjEsMjIsMjIsMjMsMjMsMjQsMjQsMjUsMjUsMjYsMjYsMjcsMjcsMjgsMjgsMjksMjksNjQsNjRdLExvPWZ1bmN0aW9uKHQsbixyLGEsdSxnLHksTSl7dmFyIE89TS5iaXRzLHg9MCxoZT0wLGJlPTAsUGU9MCxndD0wLHl0PTAsWnQ9MCxWdD0wLHduPTAsYm49MCx4dCxhdCxYdCwkdCxLdCxqdD1udWxsLEpuPTAsUXQsX289bmV3IHF0LkJ1ZjE2KF9uKzEpLHBjPW5ldyBxdC5CdWYxNihfbisxKSxVdT1udWxsLGZ2PTAsZHYsJHUsSHU7Zm9yKHg9MDt4PD1fbjt4KyspX29beF09MDtmb3IoaGU9MDtoZTxhO2hlKyspX29bbltyK2hlXV0rKztmb3IoZ3Q9TyxQZT1fbjtQZT49MSYmX29bUGVdPT09MDtQZS0tKTtpZihndD5QZSYmKGd0PVBlKSxQZT09PTApcmV0dXJuIHVbZysrXT0xPDwyNHw2NDw8MTZ8MCx1W2crK109MTw8MjR8NjQ8PDE2fDAsTS5iaXRzPTEsMDtmb3IoYmU9MTtiZTxQZSYmX29bYmVdPT09MDtiZSsrKTtmb3IoZ3Q8YmUmJihndD1iZSksVnQ9MSx4PTE7eDw9X247eCsrKWlmKFZ0PDw9MSxWdC09X29beF0sVnQ8MClyZXR1cm4tMTtpZihWdD4wJiYodD09PVZpfHxQZSE9PTEpKXJldHVybi0xO2ZvcihwY1sxXT0wLHg9MTt4PF9uO3grKylwY1t4KzFdPXBjW3hdK19vW3hdO2ZvcihoZT0wO2hlPGE7aGUrKyluW3IraGVdIT09MCYmKHlbcGNbbltyK2hlXV0rK109aGUpO2lmKHQ9PT1WaT8oanQ9VXU9eSxRdD0xOSk6dD09PUFhPyhqdD1SYyxKbi09MjU3LFV1PWtyLGZ2LT0yNTcsUXQ9MjU2KTooanQ9X2wsVXU9YmwsUXQ9LTEpLGJuPTAsaGU9MCx4PWJlLEt0PWcseXQ9Z3QsWnQ9MCxYdD0tMSx3bj0xPDxndCwkdD13bi0xLHQ9PT1BYSYmd24+WXJ8fHQ9PT1vcyYmd24+YXIpcmV0dXJuIDE7Zm9yKDs7KXtkdj14LVp0LHlbaGVdPFF0PygkdT0wLEh1PXlbaGVdKTp5W2hlXT5RdD8oJHU9VXVbZnYreVtoZV1dLEh1PWp0W0puK3lbaGVdXSk6KCR1PTMyKzY0LEh1PTApLHh0PTE8PHgtWnQsYXQ9MTw8eXQsYmU9YXQ7ZG8gYXQtPXh0LHVbS3QrKGJuPj5adCkrYXRdPWR2PDwyNHwkdTw8MTZ8SHV8MDt3aGlsZShhdCE9PTApO2Zvcih4dD0xPDx4LTE7Ym4meHQ7KXh0Pj49MTtpZih4dCE9PTA/KGJuJj14dC0xLGJuKz14dCk6Ym49MCxoZSsrLC0tX29beF09PT0wKXtpZih4PT09UGUpYnJlYWs7eD1uW3IreVtoZV1dfWlmKHg+Z3QmJihibiYkdCkhPT1YdCl7Zm9yKFp0PT09MCYmKFp0PWd0KSxLdCs9YmUseXQ9eC1adCxWdD0xPDx5dDt5dCtadDxQZSYmKFZ0LT1fb1t5dCtadF0sIShWdDw9MCkpOyl5dCsrLFZ0PDw9MTtpZih3bis9MTw8eXQsdD09PUFhJiZ3bj5Zcnx8dD09PW9zJiZ3bj5hcilyZXR1cm4gMTtYdD1ibiYkdCx1W1h0XT1ndDw8MjR8eXQ8PDE2fEt0LWd8MH19cmV0dXJuIGJuIT09MCYmKHVbS3QrYm5dPXgtWnQ8PDI0fDY0PDwxNnwwKSxNLmJpdHM9Z3QsMH0sS3I9SHQsJGE9cWwsdm89YWEsVHM9dG4sbW89TG8sVGE9MCxhcz0xLHhjPTIsZWM9NCxhdT01LHlsPTYsRWw9MCxGbT0xLFZtPTIsT2E9LTIsSWQ9LTMsa2Q9LTQsVW09LTUsUmQ9OCx4ZD0xLEJkPTIsTGQ9MyxNZD00LERkPTUsRmQ9NixWZD03LFVkPTgsJGQ9OSxIZD0xMCxzdT0xMSxPcz0xMixsZj0xMyxqZD0xNCxjZj0xNSx6ZD0xNixXZD0xNyxHZD0xOCxxZD0xOSxsdT0yMCxjdT0yMSxZZD0yMixLZD0yMyxKZD0yNCxaZD0yNSxYZD0yNix1Zj0yNyxRZD0yOCxlaD0yOSxScj0zMCx0aD0zMSwkbT0zMixIbT04NTIsam09NTkyLHptPTE1LFdtPXptO2Z1bmN0aW9uIG5oKGUpe3JldHVybihlPj4+MjQmMjU1KSsoZT4+PjgmNjUyODApKygoZSY2NTI4MCk8PDgpKygoZSYyNTUpPDwyNCl9ZnVuY3Rpb24gR20oKXt0aGlzLm1vZGU9MCx0aGlzLmxhc3Q9ITEsdGhpcy53cmFwPTAsdGhpcy5oYXZlZGljdD0hMSx0aGlzLmZsYWdzPTAsdGhpcy5kbWF4PTAsdGhpcy5jaGVjaz0wLHRoaXMudG90YWw9MCx0aGlzLmhlYWQ9bnVsbCx0aGlzLndiaXRzPTAsdGhpcy53c2l6ZT0wLHRoaXMud2hhdmU9MCx0aGlzLnduZXh0PTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLmhvbGQ9MCx0aGlzLmJpdHM9MCx0aGlzLmxlbmd0aD0wLHRoaXMub2Zmc2V0PTAsdGhpcy5leHRyYT0wLHRoaXMubGVuY29kZT1udWxsLHRoaXMuZGlzdGNvZGU9bnVsbCx0aGlzLmxlbmJpdHM9MCx0aGlzLmRpc3RiaXRzPTAsdGhpcy5uY29kZT0wLHRoaXMubmxlbj0wLHRoaXMubmRpc3Q9MCx0aGlzLmhhdmU9MCx0aGlzLm5leHQ9bnVsbCx0aGlzLmxlbnM9bmV3IEtyLkJ1ZjE2KDMyMCksdGhpcy53b3JrPW5ldyBLci5CdWYxNigyODgpLHRoaXMubGVuZHluPW51bGwsdGhpcy5kaXN0ZHluPW51bGwsdGhpcy5zYW5lPTAsdGhpcy5iYWNrPTAsdGhpcy53YXM9MH1mdW5jdGlvbiByaChlKXt2YXIgdDtyZXR1cm4hZXx8IWUuc3RhdGU/T2E6KHQ9ZS5zdGF0ZSxlLnRvdGFsX2luPWUudG90YWxfb3V0PXQudG90YWw9MCxlLm1zZz0iIix0LndyYXAmJihlLmFkbGVyPXQud3JhcCYxKSx0Lm1vZGU9eGQsdC5sYXN0PTAsdC5oYXZlZGljdD0wLHQuZG1heD0zMjc2OCx0LmhlYWQ9bnVsbCx0LmhvbGQ9MCx0LmJpdHM9MCx0LmxlbmNvZGU9dC5sZW5keW49bmV3IEtyLkJ1ZjMyKEhtKSx0LmRpc3Rjb2RlPXQuZGlzdGR5bj1uZXcgS3IuQnVmMzIoam0pLHQuc2FuZT0xLHQuYmFjaz0tMSxFbCl9ZnVuY3Rpb24gaWgoZSl7dmFyIHQ7cmV0dXJuIWV8fCFlLnN0YXRlP09hOih0PWUuc3RhdGUsdC53c2l6ZT0wLHQud2hhdmU9MCx0LnduZXh0PTAscmgoZSkpfWZ1bmN0aW9uIG9oKGUsdCl7dmFyIG4scjtyZXR1cm4hZXx8IWUuc3RhdGV8fChyPWUuc3RhdGUsdDwwPyhuPTAsdD0tdCk6KG49KHQ+PjQpKzEsdDw0OCYmKHQmPTE1KSksdCYmKHQ8OHx8dD4xNSkpP09hOihyLndpbmRvdyE9PW51bGwmJnIud2JpdHMhPT10JiYoci53aW5kb3c9bnVsbCksci53cmFwPW4sci53Yml0cz10LGloKGUpKX1mdW5jdGlvbiBhaChlLHQpe3ZhciBuLHI7cmV0dXJuIGU/KHI9bmV3IEdtLGUuc3RhdGU9cixyLndpbmRvdz1udWxsLG49b2goZSx0KSxuIT09RWwmJihlLnN0YXRlPW51bGwpLG4pOk9hfWZ1bmN0aW9uIHFtKGUpe3JldHVybiBhaChlLFdtKX12YXIgc2g9ITAsZmYsZGY7ZnVuY3Rpb24gWW0oZSl7aWYoc2gpe3ZhciB0O2ZvcihmZj1uZXcgS3IuQnVmMzIoNTEyKSxkZj1uZXcgS3IuQnVmMzIoMzIpLHQ9MDt0PDE0NDspZS5sZW5zW3QrK109ODtmb3IoO3Q8MjU2OyllLmxlbnNbdCsrXT05O2Zvcig7dDwyODA7KWUubGVuc1t0KytdPTc7Zm9yKDt0PDI4ODspZS5sZW5zW3QrK109ODtmb3IobW8oYXMsZS5sZW5zLDAsMjg4LGZmLDAsZS53b3JrLHtiaXRzOjl9KSx0PTA7dDwzMjspZS5sZW5zW3QrK109NTttbyh4YyxlLmxlbnMsMCwzMixkZiwwLGUud29yayx7Yml0czo1fSksc2g9ITF9ZS5sZW5jb2RlPWZmLGUubGVuYml0cz05LGUuZGlzdGNvZGU9ZGYsZS5kaXN0Yml0cz01fWZ1bmN0aW9uIGxoKGUsdCxuLHIpe3ZhciBhLHU9ZS5zdGF0ZTtyZXR1cm4gdS53aW5kb3c9PT1udWxsJiYodS53c2l6ZT0xPDx1LndiaXRzLHUud25leHQ9MCx1LndoYXZlPTAsdS53aW5kb3c9bmV3IEtyLkJ1ZjgodS53c2l6ZSkpLHI+PXUud3NpemU/KEtyLmFycmF5U2V0KHUud2luZG93LHQsbi11LndzaXplLHUud3NpemUsMCksdS53bmV4dD0wLHUud2hhdmU9dS53c2l6ZSk6KGE9dS53c2l6ZS11LnduZXh0LGE+ciYmKGE9ciksS3IuYXJyYXlTZXQodS53aW5kb3csdCxuLXIsYSx1LnduZXh0KSxyLT1hLHI/KEtyLmFycmF5U2V0KHUud2luZG93LHQsbi1yLHIsMCksdS53bmV4dD1yLHUud2hhdmU9dS53c2l6ZSk6KHUud25leHQrPWEsdS53bmV4dD09PXUud3NpemUmJih1LnduZXh0PTApLHUud2hhdmU8dS53c2l6ZSYmKHUud2hhdmUrPWEpKSksMH1mdW5jdGlvbiBLbShlLHQpe3ZhciBuLHIsYSx1LGcseSxNLE8seCxoZSxiZSxQZSxndCx5dCxadD0wLFZ0LHduLGJuLHh0LGF0LFh0LCR0LEt0LGp0PW5ldyBLci5CdWY4KDQpLEpuLFF0LF9vPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XTtpZighZXx8IWUuc3RhdGV8fCFlLm91dHB1dHx8IWUuaW5wdXQmJmUuYXZhaWxfaW4hPT0wKXJldHVybiBPYTtuPWUuc3RhdGUsbi5tb2RlPT09T3MmJihuLm1vZGU9bGYpLGc9ZS5uZXh0X291dCxhPWUub3V0cHV0LE09ZS5hdmFpbF9vdXQsdT1lLm5leHRfaW4scj1lLmlucHV0LHk9ZS5hdmFpbF9pbixPPW4uaG9sZCx4PW4uYml0cyxoZT15LGJlPU0sS3Q9RWw7ZTpmb3IoOzspc3dpdGNoKG4ubW9kZSl7Y2FzZSB4ZDppZihuLndyYXA9PT0wKXtuLm1vZGU9bGY7YnJlYWt9Zm9yKDt4PDE2Oyl7aWYoeT09PTApYnJlYWsgZTt5LS0sTys9clt1KytdPDx4LHgrPTh9aWYobi53cmFwJjImJk89PT0zNTYxNSl7bi5jaGVjaz0wLGp0WzBdPU8mMjU1LGp0WzFdPU8+Pj44JjI1NSxuLmNoZWNrPXZvKG4uY2hlY2ssanQsMiwwKSxPPTAseD0wLG4ubW9kZT1CZDticmVha31pZihuLmZsYWdzPTAsbi5oZWFkJiYobi5oZWFkLmRvbmU9ITEpLCEobi53cmFwJjEpfHwoKChPJjI1NSk8PDgpKyhPPj44KSklMzEpe2UubXNnPSJpbmNvcnJlY3QgaGVhZGVyIGNoZWNrIixuLm1vZGU9UnI7YnJlYWt9aWYoKE8mMTUpIT09UmQpe2UubXNnPSJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCIsbi5tb2RlPVJyO2JyZWFrfWlmKE8+Pj49NCx4LT00LCR0PShPJjE1KSs4LG4ud2JpdHM9PT0wKW4ud2JpdHM9JHQ7ZWxzZSBpZigkdD5uLndiaXRzKXtlLm1zZz0iaW52YWxpZCB3aW5kb3cgc2l6ZSIsbi5tb2RlPVJyO2JyZWFrfW4uZG1heD0xPDwkdCxlLmFkbGVyPW4uY2hlY2s9MSxuLm1vZGU9TyY1MTI/SGQ6T3MsTz0wLHg9MDticmVhaztjYXNlIEJkOmZvcig7eDwxNjspe2lmKHk9PT0wKWJyZWFrIGU7eS0tLE8rPXJbdSsrXTw8eCx4Kz04fWlmKG4uZmxhZ3M9Tywobi5mbGFncyYyNTUpIT09UmQpe2UubXNnPSJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCIsbi5tb2RlPVJyO2JyZWFrfWlmKG4uZmxhZ3MmNTczNDQpe2UubXNnPSJ1bmtub3duIGhlYWRlciBmbGFncyBzZXQiLG4ubW9kZT1ScjticmVha31uLmhlYWQmJihuLmhlYWQudGV4dD1PPj44JjEpLG4uZmxhZ3MmNTEyJiYoanRbMF09TyYyNTUsanRbMV09Tz4+PjgmMjU1LG4uY2hlY2s9dm8obi5jaGVjayxqdCwyLDApKSxPPTAseD0wLG4ubW9kZT1MZDtjYXNlIExkOmZvcig7eDwzMjspe2lmKHk9PT0wKWJyZWFrIGU7eS0tLE8rPXJbdSsrXTw8eCx4Kz04fW4uaGVhZCYmKG4uaGVhZC50aW1lPU8pLG4uZmxhZ3MmNTEyJiYoanRbMF09TyYyNTUsanRbMV09Tz4+PjgmMjU1LGp0WzJdPU8+Pj4xNiYyNTUsanRbM109Tz4+PjI0JjI1NSxuLmNoZWNrPXZvKG4uY2hlY2ssanQsNCwwKSksTz0wLHg9MCxuLm1vZGU9TWQ7Y2FzZSBNZDpmb3IoO3g8MTY7KXtpZih5PT09MClicmVhayBlO3ktLSxPKz1yW3UrK108PHgseCs9OH1uLmhlYWQmJihuLmhlYWQueGZsYWdzPU8mMjU1LG4uaGVhZC5vcz1PPj44KSxuLmZsYWdzJjUxMiYmKGp0WzBdPU8mMjU1LGp0WzFdPU8+Pj44JjI1NSxuLmNoZWNrPXZvKG4uY2hlY2ssanQsMiwwKSksTz0wLHg9MCxuLm1vZGU9RGQ7Y2FzZSBEZDppZihuLmZsYWdzJjEwMjQpe2Zvcig7eDwxNjspe2lmKHk9PT0wKWJyZWFrIGU7eS0tLE8rPXJbdSsrXTw8eCx4Kz04fW4ubGVuZ3RoPU8sbi5oZWFkJiYobi5oZWFkLmV4dHJhX2xlbj1PKSxuLmZsYWdzJjUxMiYmKGp0WzBdPU8mMjU1LGp0WzFdPU8+Pj44JjI1NSxuLmNoZWNrPXZvKG4uY2hlY2ssanQsMiwwKSksTz0wLHg9MH1lbHNlIG4uaGVhZCYmKG4uaGVhZC5leHRyYT1udWxsKTtuLm1vZGU9RmQ7Y2FzZSBGZDppZihuLmZsYWdzJjEwMjQmJihQZT1uLmxlbmd0aCxQZT55JiYoUGU9eSksUGUmJihuLmhlYWQmJigkdD1uLmhlYWQuZXh0cmFfbGVuLW4ubGVuZ3RoLG4uaGVhZC5leHRyYXx8KG4uaGVhZC5leHRyYT1uZXcgQXJyYXkobi5oZWFkLmV4dHJhX2xlbikpLEtyLmFycmF5U2V0KG4uaGVhZC5leHRyYSxyLHUsUGUsJHQpKSxuLmZsYWdzJjUxMiYmKG4uY2hlY2s9dm8obi5jaGVjayxyLFBlLHUpKSx5LT1QZSx1Kz1QZSxuLmxlbmd0aC09UGUpLG4ubGVuZ3RoKSlicmVhayBlO24ubGVuZ3RoPTAsbi5tb2RlPVZkO2Nhc2UgVmQ6aWYobi5mbGFncyYyMDQ4KXtpZih5PT09MClicmVhayBlO1BlPTA7ZG8gJHQ9clt1K1BlKytdLG4uaGVhZCYmJHQmJm4ubGVuZ3RoPDY1NTM2JiYobi5oZWFkLm5hbWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoJHQpKTt3aGlsZSgkdCYmUGU8eSk7aWYobi5mbGFncyY1MTImJihuLmNoZWNrPXZvKG4uY2hlY2sscixQZSx1KSkseS09UGUsdSs9UGUsJHQpYnJlYWsgZX1lbHNlIG4uaGVhZCYmKG4uaGVhZC5uYW1lPW51bGwpO24ubGVuZ3RoPTAsbi5tb2RlPVVkO2Nhc2UgVWQ6aWYobi5mbGFncyY0MDk2KXtpZih5PT09MClicmVhayBlO1BlPTA7ZG8gJHQ9clt1K1BlKytdLG4uaGVhZCYmJHQmJm4ubGVuZ3RoPDY1NTM2JiYobi5oZWFkLmNvbW1lbnQrPVN0cmluZy5mcm9tQ2hhckNvZGUoJHQpKTt3aGlsZSgkdCYmUGU8eSk7aWYobi5mbGFncyY1MTImJihuLmNoZWNrPXZvKG4uY2hlY2sscixQZSx1KSkseS09UGUsdSs9UGUsJHQpYnJlYWsgZX1lbHNlIG4uaGVhZCYmKG4uaGVhZC5jb21tZW50PW51bGwpO24ubW9kZT0kZDtjYXNlICRkOmlmKG4uZmxhZ3MmNTEyKXtmb3IoO3g8MTY7KXtpZih5PT09MClicmVhayBlO3ktLSxPKz1yW3UrK108PHgseCs9OH1pZihPIT09KG4uY2hlY2smNjU1MzUpKXtlLm1zZz0iaGVhZGVyIGNyYyBtaXNtYXRjaCIsbi5tb2RlPVJyO2JyZWFrfU89MCx4PTB9bi5oZWFkJiYobi5oZWFkLmhjcmM9bi5mbGFncz4+OSYxLG4uaGVhZC5kb25lPSEwKSxlLmFkbGVyPW4uY2hlY2s9MCxuLm1vZGU9T3M7YnJlYWs7Y2FzZSBIZDpmb3IoO3g8MzI7KXtpZih5PT09MClicmVhayBlO3ktLSxPKz1yW3UrK108PHgseCs9OH1lLmFkbGVyPW4uY2hlY2s9bmgoTyksTz0wLHg9MCxuLm1vZGU9c3U7Y2FzZSBzdTppZihuLmhhdmVkaWN0PT09MClyZXR1cm4gZS5uZXh0X291dD1nLGUuYXZhaWxfb3V0PU0sZS5uZXh0X2luPXUsZS5hdmFpbF9pbj15LG4uaG9sZD1PLG4uYml0cz14LFZtO2UuYWRsZXI9bi5jaGVjaz0xLG4ubW9kZT1PcztjYXNlIE9zOmlmKHQ9PT1hdXx8dD09PXlsKWJyZWFrIGU7Y2FzZSBsZjppZihuLmxhc3Qpe08+Pj49eCY3LHgtPXgmNyxuLm1vZGU9dWY7YnJlYWt9Zm9yKDt4PDM7KXtpZih5PT09MClicmVhayBlO3ktLSxPKz1yW3UrK108PHgseCs9OH1zd2l0Y2gobi5sYXN0PU8mMSxPPj4+PTEseC09MSxPJjMpe2Nhc2UgMDpuLm1vZGU9amQ7YnJlYWs7Y2FzZSAxOmlmKFltKG4pLG4ubW9kZT1sdSx0PT09eWwpe08+Pj49Mix4LT0yO2JyZWFrIGV9YnJlYWs7Y2FzZSAyOm4ubW9kZT1XZDticmVhaztjYXNlIDM6ZS5tc2c9ImludmFsaWQgYmxvY2sgdHlwZSIsbi5tb2RlPVJyfU8+Pj49Mix4LT0yO2JyZWFrO2Nhc2UgamQ6Zm9yKE8+Pj49eCY3LHgtPXgmNzt4PDMyOyl7aWYoeT09PTApYnJlYWsgZTt5LS0sTys9clt1KytdPDx4LHgrPTh9aWYoKE8mNjU1MzUpIT09KE8+Pj4xNl42NTUzNSkpe2UubXNnPSJpbnZhbGlkIHN0b3JlZCBibG9jayBsZW5ndGhzIixuLm1vZGU9UnI7YnJlYWt9aWYobi5sZW5ndGg9TyY2NTUzNSxPPTAseD0wLG4ubW9kZT1jZix0PT09eWwpYnJlYWsgZTtjYXNlIGNmOm4ubW9kZT16ZDtjYXNlIHpkOmlmKFBlPW4ubGVuZ3RoLFBlKXtpZihQZT55JiYoUGU9eSksUGU+TSYmKFBlPU0pLFBlPT09MClicmVhayBlO0tyLmFycmF5U2V0KGEscix1LFBlLGcpLHktPVBlLHUrPVBlLE0tPVBlLGcrPVBlLG4ubGVuZ3RoLT1QZTticmVha31uLm1vZGU9T3M7YnJlYWs7Y2FzZSBXZDpmb3IoO3g8MTQ7KXtpZih5PT09MClicmVhayBlO3ktLSxPKz1yW3UrK108PHgseCs9OH1pZihuLm5sZW49KE8mMzEpKzI1NyxPPj4+PTUseC09NSxuLm5kaXN0PShPJjMxKSsxLE8+Pj49NSx4LT01LG4ubmNvZGU9KE8mMTUpKzQsTz4+Pj00LHgtPTQsbi5ubGVuPjI4Nnx8bi5uZGlzdD4zMCl7ZS5tc2c9InRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzIixuLm1vZGU9UnI7YnJlYWt9bi5oYXZlPTAsbi5tb2RlPUdkO2Nhc2UgR2Q6Zm9yKDtuLmhhdmU8bi5uY29kZTspe2Zvcig7eDwzOyl7aWYoeT09PTApYnJlYWsgZTt5LS0sTys9clt1KytdPDx4LHgrPTh9bi5sZW5zW19vW24uaGF2ZSsrXV09TyY3LE8+Pj49Myx4LT0zfWZvcig7bi5oYXZlPDE5OyluLmxlbnNbX29bbi5oYXZlKytdXT0wO2lmKG4ubGVuY29kZT1uLmxlbmR5bixuLmxlbmJpdHM9NyxKbj17Yml0czpuLmxlbmJpdHN9LEt0PW1vKFRhLG4ubGVucywwLDE5LG4ubGVuY29kZSwwLG4ud29yayxKbiksbi5sZW5iaXRzPUpuLmJpdHMsS3Qpe2UubXNnPSJpbnZhbGlkIGNvZGUgbGVuZ3RocyBzZXQiLG4ubW9kZT1ScjticmVha31uLmhhdmU9MCxuLm1vZGU9cWQ7Y2FzZSBxZDpmb3IoO24uaGF2ZTxuLm5sZW4rbi5uZGlzdDspe2Zvcig7WnQ9bi5sZW5jb2RlW08mKDE8PG4ubGVuYml0cyktMV0sVnQ9WnQ+Pj4yNCx3bj1adD4+PjE2JjI1NSxibj1adCY2NTUzNSwhKFZ0PD14KTspe2lmKHk9PT0wKWJyZWFrIGU7eS0tLE8rPXJbdSsrXTw8eCx4Kz04fWlmKGJuPDE2KU8+Pj49VnQseC09VnQsbi5sZW5zW24uaGF2ZSsrXT1ibjtlbHNle2lmKGJuPT09MTYpe2ZvcihRdD1WdCsyO3g8UXQ7KXtpZih5PT09MClicmVhayBlO3ktLSxPKz1yW3UrK108PHgseCs9OH1pZihPPj4+PVZ0LHgtPVZ0LG4uaGF2ZT09PTApe2UubXNnPSJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0IixuLm1vZGU9UnI7YnJlYWt9JHQ9bi5sZW5zW24uaGF2ZS0xXSxQZT0zKyhPJjMpLE8+Pj49Mix4LT0yfWVsc2UgaWYoYm49PT0xNyl7Zm9yKFF0PVZ0KzM7eDxRdDspe2lmKHk9PT0wKWJyZWFrIGU7eS0tLE8rPXJbdSsrXTw8eCx4Kz04fU8+Pj49VnQseC09VnQsJHQ9MCxQZT0zKyhPJjcpLE8+Pj49Myx4LT0zfWVsc2V7Zm9yKFF0PVZ0Kzc7eDxRdDspe2lmKHk9PT0wKWJyZWFrIGU7eS0tLE8rPXJbdSsrXTw8eCx4Kz04fU8+Pj49VnQseC09VnQsJHQ9MCxQZT0xMSsoTyYxMjcpLE8+Pj49Nyx4LT03fWlmKG4uaGF2ZStQZT5uLm5sZW4rbi5uZGlzdCl7ZS5tc2c9ImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiLG4ubW9kZT1ScjticmVha31mb3IoO1BlLS07KW4ubGVuc1tuLmhhdmUrK109JHR9fWlmKG4ubW9kZT09PVJyKWJyZWFrO2lmKG4ubGVuc1syNTZdPT09MCl7ZS5tc2c9ImludmFsaWQgY29kZSAtLSBtaXNzaW5nIGVuZC1vZi1ibG9jayIsbi5tb2RlPVJyO2JyZWFrfWlmKG4ubGVuYml0cz05LEpuPXtiaXRzOm4ubGVuYml0c30sS3Q9bW8oYXMsbi5sZW5zLDAsbi5ubGVuLG4ubGVuY29kZSwwLG4ud29yayxKbiksbi5sZW5iaXRzPUpuLmJpdHMsS3Qpe2UubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RocyBzZXQiLG4ubW9kZT1ScjticmVha31pZihuLmRpc3RiaXRzPTYsbi5kaXN0Y29kZT1uLmRpc3RkeW4sSm49e2JpdHM6bi5kaXN0Yml0c30sS3Q9bW8oeGMsbi5sZW5zLG4ubmxlbixuLm5kaXN0LG4uZGlzdGNvZGUsMCxuLndvcmssSm4pLG4uZGlzdGJpdHM9Sm4uYml0cyxLdCl7ZS5tc2c9ImludmFsaWQgZGlzdGFuY2VzIHNldCIsbi5tb2RlPVJyO2JyZWFrfWlmKG4ubW9kZT1sdSx0PT09eWwpYnJlYWsgZTtjYXNlIGx1Om4ubW9kZT1jdTtjYXNlIGN1OmlmKHk+PTYmJk0+PTI1OCl7ZS5uZXh0X291dD1nLGUuYXZhaWxfb3V0PU0sZS5uZXh0X2luPXUsZS5hdmFpbF9pbj15LG4uaG9sZD1PLG4uYml0cz14LFRzKGUsYmUpLGc9ZS5uZXh0X291dCxhPWUub3V0cHV0LE09ZS5hdmFpbF9vdXQsdT1lLm5leHRfaW4scj1lLmlucHV0LHk9ZS5hdmFpbF9pbixPPW4uaG9sZCx4PW4uYml0cyxuLm1vZGU9PT1PcyYmKG4uYmFjaz0tMSk7YnJlYWt9Zm9yKG4uYmFjaz0wO1p0PW4ubGVuY29kZVtPJigxPDxuLmxlbmJpdHMpLTFdLFZ0PVp0Pj4+MjQsd249WnQ+Pj4xNiYyNTUsYm49WnQmNjU1MzUsIShWdDw9eCk7KXtpZih5PT09MClicmVhayBlO3ktLSxPKz1yW3UrK108PHgseCs9OH1pZih3biYmKHduJjI0MCk9PT0wKXtmb3IoeHQ9VnQsYXQ9d24sWHQ9Ym47WnQ9bi5sZW5jb2RlW1h0KygoTyYoMTw8eHQrYXQpLTEpPj54dCldLFZ0PVp0Pj4+MjQsd249WnQ+Pj4xNiYyNTUsYm49WnQmNjU1MzUsISh4dCtWdDw9eCk7KXtpZih5PT09MClicmVhayBlO3ktLSxPKz1yW3UrK108PHgseCs9OH1PPj4+PXh0LHgtPXh0LG4uYmFjays9eHR9aWYoTz4+Pj1WdCx4LT1WdCxuLmJhY2srPVZ0LG4ubGVuZ3RoPWJuLHduPT09MCl7bi5tb2RlPVhkO2JyZWFrfWlmKHduJjMyKXtuLmJhY2s9LTEsbi5tb2RlPU9zO2JyZWFrfWlmKHduJjY0KXtlLm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixuLm1vZGU9UnI7YnJlYWt9bi5leHRyYT13biYxNSxuLm1vZGU9WWQ7Y2FzZSBZZDppZihuLmV4dHJhKXtmb3IoUXQ9bi5leHRyYTt4PFF0Oyl7aWYoeT09PTApYnJlYWsgZTt5LS0sTys9clt1KytdPDx4LHgrPTh9bi5sZW5ndGgrPU8mKDE8PG4uZXh0cmEpLTEsTz4+Pj1uLmV4dHJhLHgtPW4uZXh0cmEsbi5iYWNrKz1uLmV4dHJhfW4ud2FzPW4ubGVuZ3RoLG4ubW9kZT1LZDtjYXNlIEtkOmZvcig7WnQ9bi5kaXN0Y29kZVtPJigxPDxuLmRpc3RiaXRzKS0xXSxWdD1adD4+PjI0LHduPVp0Pj4+MTYmMjU1LGJuPVp0JjY1NTM1LCEoVnQ8PXgpOyl7aWYoeT09PTApYnJlYWsgZTt5LS0sTys9clt1KytdPDx4LHgrPTh9aWYoKHduJjI0MCk9PT0wKXtmb3IoeHQ9VnQsYXQ9d24sWHQ9Ym47WnQ9bi5kaXN0Y29kZVtYdCsoKE8mKDE8PHh0K2F0KS0xKT4+eHQpXSxWdD1adD4+PjI0LHduPVp0Pj4+MTYmMjU1LGJuPVp0JjY1NTM1LCEoeHQrVnQ8PXgpOyl7aWYoeT09PTApYnJlYWsgZTt5LS0sTys9clt1KytdPDx4LHgrPTh9Tz4+Pj14dCx4LT14dCxuLmJhY2srPXh0fWlmKE8+Pj49VnQseC09VnQsbi5iYWNrKz1WdCx3biY2NCl7ZS5tc2c9ImludmFsaWQgZGlzdGFuY2UgY29kZSIsbi5tb2RlPVJyO2JyZWFrfW4ub2Zmc2V0PWJuLG4uZXh0cmE9d24mMTUsbi5tb2RlPUpkO2Nhc2UgSmQ6aWYobi5leHRyYSl7Zm9yKFF0PW4uZXh0cmE7eDxRdDspe2lmKHk9PT0wKWJyZWFrIGU7eS0tLE8rPXJbdSsrXTw8eCx4Kz04fW4ub2Zmc2V0Kz1PJigxPDxuLmV4dHJhKS0xLE8+Pj49bi5leHRyYSx4LT1uLmV4dHJhLG4uYmFjays9bi5leHRyYX1pZihuLm9mZnNldD5uLmRtYXgpe2UubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsbi5tb2RlPVJyO2JyZWFrfW4ubW9kZT1aZDtjYXNlIFpkOmlmKE09PT0wKWJyZWFrIGU7aWYoUGU9YmUtTSxuLm9mZnNldD5QZSl7aWYoUGU9bi5vZmZzZXQtUGUsUGU+bi53aGF2ZSYmbi5zYW5lKXtlLm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLG4ubW9kZT1ScjticmVha31QZT5uLnduZXh0PyhQZS09bi53bmV4dCxndD1uLndzaXplLVBlKTpndD1uLnduZXh0LVBlLFBlPm4ubGVuZ3RoJiYoUGU9bi5sZW5ndGgpLHl0PW4ud2luZG93fWVsc2UgeXQ9YSxndD1nLW4ub2Zmc2V0LFBlPW4ubGVuZ3RoO1BlPk0mJihQZT1NKSxNLT1QZSxuLmxlbmd0aC09UGU7ZG8gYVtnKytdPXl0W2d0KytdO3doaWxlKC0tUGUpO24ubGVuZ3RoPT09MCYmKG4ubW9kZT1jdSk7YnJlYWs7Y2FzZSBYZDppZihNPT09MClicmVhayBlO2FbZysrXT1uLmxlbmd0aCxNLS0sbi5tb2RlPWN1O2JyZWFrO2Nhc2UgdWY6aWYobi53cmFwKXtmb3IoO3g8MzI7KXtpZih5PT09MClicmVhayBlO3ktLSxPfD1yW3UrK108PHgseCs9OH1pZihiZS09TSxlLnRvdGFsX291dCs9YmUsbi50b3RhbCs9YmUsYmUmJihlLmFkbGVyPW4uY2hlY2s9bi5mbGFncz92byhuLmNoZWNrLGEsYmUsZy1iZSk6JGEobi5jaGVjayxhLGJlLGctYmUpKSxiZT1NLChuLmZsYWdzP086bmgoTykpIT09bi5jaGVjayl7ZS5tc2c9ImluY29ycmVjdCBkYXRhIGNoZWNrIixuLm1vZGU9UnI7YnJlYWt9Tz0wLHg9MH1uLm1vZGU9UWQ7Y2FzZSBRZDppZihuLndyYXAmJm4uZmxhZ3Mpe2Zvcig7eDwzMjspe2lmKHk9PT0wKWJyZWFrIGU7eS0tLE8rPXJbdSsrXTw8eCx4Kz04fWlmKE8hPT0obi50b3RhbCY0Mjk0OTY3Mjk1KSl7ZS5tc2c9ImluY29ycmVjdCBsZW5ndGggY2hlY2siLG4ubW9kZT1ScjticmVha31PPTAseD0wfW4ubW9kZT1laDtjYXNlIGVoOkt0PUZtO2JyZWFrIGU7Y2FzZSBScjpLdD1JZDticmVhayBlO2Nhc2UgdGg6cmV0dXJuIGtkO2Nhc2UgJG06ZGVmYXVsdDpyZXR1cm4gT2F9cmV0dXJuIGUubmV4dF9vdXQ9ZyxlLmF2YWlsX291dD1NLGUubmV4dF9pbj11LGUuYXZhaWxfaW49eSxuLmhvbGQ9TyxuLmJpdHM9eCwobi53c2l6ZXx8YmUhPT1lLmF2YWlsX291dCYmbi5tb2RlPFJyJiYobi5tb2RlPHVmfHx0IT09ZWMpKSYmbGgoZSxlLm91dHB1dCxlLm5leHRfb3V0LGJlLWUuYXZhaWxfb3V0KSxoZS09ZS5hdmFpbF9pbixiZS09ZS5hdmFpbF9vdXQsZS50b3RhbF9pbis9aGUsZS50b3RhbF9vdXQrPWJlLG4udG90YWwrPWJlLG4ud3JhcCYmYmUmJihlLmFkbGVyPW4uY2hlY2s9bi5mbGFncz92byhuLmNoZWNrLGEsYmUsZS5uZXh0X291dC1iZSk6JGEobi5jaGVjayxhLGJlLGUubmV4dF9vdXQtYmUpKSxlLmRhdGFfdHlwZT1uLmJpdHMrKG4ubGFzdD82NDowKSsobi5tb2RlPT09T3M/MTI4OjApKyhuLm1vZGU9PT1sdXx8bi5tb2RlPT09Y2Y/MjU2OjApLChoZT09PTAmJmJlPT09MHx8dD09PWVjKSYmS3Q9PT1FbCYmKEt0PVVtKSxLdH1mdW5jdGlvbiBKbShlKXtpZighZXx8IWUuc3RhdGUpcmV0dXJuIE9hO3ZhciB0PWUuc3RhdGU7cmV0dXJuIHQud2luZG93JiYodC53aW5kb3c9bnVsbCksZS5zdGF0ZT1udWxsLEVsfWZ1bmN0aW9uIFptKGUsdCl7dmFyIG47cmV0dXJuIWV8fCFlLnN0YXRlfHwobj1lLnN0YXRlLChuLndyYXAmMik9PT0wKT9PYToobi5oZWFkPXQsdC5kb25lPSExLEVsKX1mdW5jdGlvbiBYbShlLHQpe3ZhciBuPXQubGVuZ3RoLHIsYSx1O3JldHVybiFlfHwhZS5zdGF0ZXx8KHI9ZS5zdGF0ZSxyLndyYXAhPT0wJiZyLm1vZGUhPT1zdSk/T2E6ci5tb2RlPT09c3UmJihhPTEsYT0kYShhLHQsbiwwKSxhIT09ci5jaGVjayk/SWQ6KHU9bGgoZSx0LG4sbiksdT8oci5tb2RlPXRoLGtkKTooci5oYXZlZGljdD0xLEVsKSl9UWUuaW5mbGF0ZVJlc2V0PWloLFFlLmluZmxhdGVSZXNldDI9b2gsUWUuaW5mbGF0ZVJlc2V0S2VlcD1yaCxRZS5pbmZsYXRlSW5pdD1xbSxRZS5pbmZsYXRlSW5pdDI9YWgsUWUuaW5mbGF0ZT1LbSxRZS5pbmZsYXRlRW5kPUptLFFlLmluZmxhdGVHZXRIZWFkZXI9Wm0sUWUuaW5mbGF0ZVNldERpY3Rpb25hcnk9WG0sUWUuaW5mbGF0ZUluZm89InBha28gaW5mbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdCkiO3ZhciBjaD17Wl9OT19GTFVTSDowLFpfUEFSVElBTF9GTFVTSDoxLFpfU1lOQ19GTFVTSDoyLFpfRlVMTF9GTFVTSDozLFpfRklOSVNIOjQsWl9CTE9DSzo1LFpfVFJFRVM6NixaX09LOjAsWl9TVFJFQU1fRU5EOjEsWl9ORUVEX0RJQ1Q6MixaX0VSUk5POi0xLFpfU1RSRUFNX0VSUk9SOi0yLFpfREFUQV9FUlJPUjotMyxaX0JVRl9FUlJPUjotNSxaX05PX0NPTVBSRVNTSU9OOjAsWl9CRVNUX1NQRUVEOjEsWl9CRVNUX0NPTVBSRVNTSU9OOjksWl9ERUZBVUxUX0NPTVBSRVNTSU9OOi0xLFpfRklMVEVSRUQ6MSxaX0hVRkZNQU5fT05MWToyLFpfUkxFOjMsWl9GSVhFRDo0LFpfREVGQVVMVF9TVFJBVEVHWTowLFpfQklOQVJZOjAsWl9URVhUOjEsWl9VTktOT1dOOjIsWl9ERUZMQVRFRDo4fTtmdW5jdGlvbiBRbSgpe3RoaXMudGV4dD0wLHRoaXMudGltZT0wLHRoaXMueGZsYWdzPTAsdGhpcy5vcz0wLHRoaXMuZXh0cmE9bnVsbCx0aGlzLmV4dHJhX2xlbj0wLHRoaXMubmFtZT0iIix0aGlzLmNvbW1lbnQ9IiIsdGhpcy5oY3JjPTAsdGhpcy5kb25lPSExfXZhciBlXz1RbSx0Yz1RZSxCYz1IdCx1dT1rZSxyaT1jaCxoZj1VYSx0Xz16dCxuXz1lXyx1aD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIFNsKGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFNsKSlyZXR1cm4gbmV3IFNsKGUpO3RoaXMub3B0aW9ucz1CYy5hc3NpZ24oe2NodW5rU2l6ZToxNjM4NCx3aW5kb3dCaXRzOjAsdG86IiJ9LGV8fHt9KTt2YXIgdD10aGlzLm9wdGlvbnM7dC5yYXcmJnQud2luZG93Qml0cz49MCYmdC53aW5kb3dCaXRzPDE2JiYodC53aW5kb3dCaXRzPS10LndpbmRvd0JpdHMsdC53aW5kb3dCaXRzPT09MCYmKHQud2luZG93Qml0cz0tMTUpKSx0LndpbmRvd0JpdHM+PTAmJnQud2luZG93Qml0czwxNiYmIShlJiZlLndpbmRvd0JpdHMpJiYodC53aW5kb3dCaXRzKz0zMiksdC53aW5kb3dCaXRzPjE1JiZ0LndpbmRvd0JpdHM8NDgmJih0LndpbmRvd0JpdHMmMTUpPT09MCYmKHQud2luZG93Qml0c3w9MTUpLHRoaXMuZXJyPTAsdGhpcy5tc2c9IiIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IHRfLHRoaXMuc3RybS5hdmFpbF9vdXQ9MDt2YXIgbj10Yy5pbmZsYXRlSW5pdDIodGhpcy5zdHJtLHQud2luZG93Qml0cyk7aWYobiE9PXJpLlpfT0spdGhyb3cgbmV3IEVycm9yKGhmW25dKTtpZih0aGlzLmhlYWRlcj1uZXcgbl8sdGMuaW5mbGF0ZUdldEhlYWRlcih0aGlzLnN0cm0sdGhpcy5oZWFkZXIpLHQuZGljdGlvbmFyeSYmKHR5cGVvZiB0LmRpY3Rpb25hcnk9PSJzdHJpbmciP3QuZGljdGlvbmFyeT11dS5zdHJpbmcyYnVmKHQuZGljdGlvbmFyeSk6dWguY2FsbCh0LmRpY3Rpb25hcnkpPT09IltvYmplY3QgQXJyYXlCdWZmZXJdIiYmKHQuZGljdGlvbmFyeT1uZXcgVWludDhBcnJheSh0LmRpY3Rpb25hcnkpKSx0LnJhdyYmKG49dGMuaW5mbGF0ZVNldERpY3Rpb25hcnkodGhpcy5zdHJtLHQuZGljdGlvbmFyeSksbiE9PXJpLlpfT0spKSl0aHJvdyBuZXcgRXJyb3IoaGZbbl0pfVNsLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5zdHJtLHI9dGhpcy5vcHRpb25zLmNodW5rU2l6ZSxhPXRoaXMub3B0aW9ucy5kaWN0aW9uYXJ5LHUsZyx5LE0sTyx4PSExO2lmKHRoaXMuZW5kZWQpcmV0dXJuITE7Zz10PT09fn50P3Q6dD09PSEwP3JpLlpfRklOSVNIOnJpLlpfTk9fRkxVU0gsdHlwZW9mIGU9PSJzdHJpbmciP24uaW5wdXQ9dXUuYmluc3RyaW5nMmJ1ZihlKTp1aC5jYWxsKGUpPT09IltvYmplY3QgQXJyYXlCdWZmZXJdIj9uLmlucHV0PW5ldyBVaW50OEFycmF5KGUpOm4uaW5wdXQ9ZSxuLm5leHRfaW49MCxuLmF2YWlsX2luPW4uaW5wdXQubGVuZ3RoO2Rve2lmKG4uYXZhaWxfb3V0PT09MCYmKG4ub3V0cHV0PW5ldyBCYy5CdWY4KHIpLG4ubmV4dF9vdXQ9MCxuLmF2YWlsX291dD1yKSx1PXRjLmluZmxhdGUobixyaS5aX05PX0ZMVVNIKSx1PT09cmkuWl9ORUVEX0RJQ1QmJmEmJih1PXRjLmluZmxhdGVTZXREaWN0aW9uYXJ5KHRoaXMuc3RybSxhKSksdT09PXJpLlpfQlVGX0VSUk9SJiZ4PT09ITAmJih1PXJpLlpfT0sseD0hMSksdSE9PXJpLlpfU1RSRUFNX0VORCYmdSE9PXJpLlpfT0spcmV0dXJuIHRoaXMub25FbmQodSksdGhpcy5lbmRlZD0hMCwhMTtuLm5leHRfb3V0JiYobi5hdmFpbF9vdXQ9PT0wfHx1PT09cmkuWl9TVFJFQU1fRU5EfHxuLmF2YWlsX2luPT09MCYmKGc9PT1yaS5aX0ZJTklTSHx8Zz09PXJpLlpfU1lOQ19GTFVTSCkpJiYodGhpcy5vcHRpb25zLnRvPT09InN0cmluZyI/KHk9dXUudXRmOGJvcmRlcihuLm91dHB1dCxuLm5leHRfb3V0KSxNPW4ubmV4dF9vdXQteSxPPXV1LmJ1ZjJzdHJpbmcobi5vdXRwdXQseSksbi5uZXh0X291dD1NLG4uYXZhaWxfb3V0PXItTSxNJiZCYy5hcnJheVNldChuLm91dHB1dCxuLm91dHB1dCx5LE0sMCksdGhpcy5vbkRhdGEoTykpOnRoaXMub25EYXRhKEJjLnNocmlua0J1ZihuLm91dHB1dCxuLm5leHRfb3V0KSkpLG4uYXZhaWxfaW49PT0wJiZuLmF2YWlsX291dD09PTAmJih4PSEwKX13aGlsZSgobi5hdmFpbF9pbj4wfHxuLmF2YWlsX291dD09PTApJiZ1IT09cmkuWl9TVFJFQU1fRU5EKTtyZXR1cm4gdT09PXJpLlpfU1RSRUFNX0VORCYmKGc9cmkuWl9GSU5JU0gpLGc9PT1yaS5aX0ZJTklTSD8odT10Yy5pbmZsYXRlRW5kKHRoaXMuc3RybSksdGhpcy5vbkVuZCh1KSx0aGlzLmVuZGVkPSEwLHU9PT1yaS5aX09LKTooZz09PXJpLlpfU1lOQ19GTFVTSCYmKHRoaXMub25FbmQocmkuWl9PSyksbi5hdmFpbF9vdXQ9MCksITApfSxTbC5wcm90b3R5cGUub25EYXRhPWZ1bmN0aW9uKGUpe3RoaXMuY2h1bmtzLnB1c2goZSl9LFNsLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbihlKXtlPT09cmkuWl9PSyYmKHRoaXMub3B0aW9ucy50bz09PSJzdHJpbmciP3RoaXMucmVzdWx0PXRoaXMuY2h1bmtzLmpvaW4oIiIpOnRoaXMucmVzdWx0PUJjLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXSx0aGlzLmVycj1lLHRoaXMubXNnPXRoaXMuc3RybS5tc2d9O2Z1bmN0aW9uIGdmKGUsdCl7dmFyIG49bmV3IFNsKHQpO2lmKG4ucHVzaChlLCEwKSxuLmVycil0aHJvdyBuLm1zZ3x8aGZbbi5lcnJdO3JldHVybiBuLnJlc3VsdH1mdW5jdGlvbiByXyhlLHQpe3JldHVybiB0PXR8fHt9LHQucmF3PSEwLGdmKGUsdCl9WGUuSW5mbGF0ZT1TbCxYZS5pbmZsYXRlPWdmLFhlLmluZmxhdGVSYXc9cl8sWGUudW5nemlwPWdmO3ZhciBpXz1IdC5hc3NpZ24sb189cXIsYV89WGUsc189Y2gsZmg9e307aV8oZmgsb18sYV8sc18pO3ZhciBkaD1maDtsZXQgbF89InVweDJweCIsY189W3tuYW1lOiJ1cHgiLHR5cGU6W051bWJlcixTdHJpbmddLHJlcXVpcmVkOiEwfV0sdV89MWUtNCxmXz03NTAsaGg9ITEscGY9MCxnaD0wLHBoPTk2MCx2aD0zNzUsbWg9NzUwO2Z1bmN0aW9uIGRfKCl7bGV0e3dpbmRvd1dpZHRoOmUscGl4ZWxSYXRpbzp0LHBsYXRmb3JtOm59PVlpKCk7cGY9ZSxnaD10LGhoPW49PT0iaW9zIn1mdW5jdGlvbiB2ZihlLHQpe2xldCBuPU51bWJlcihlKTtyZXR1cm4gaXNOYU4obik/dDpufWZ1bmN0aW9uIGhfKCl7bGV0IGU9SS5nbG9iYWxTdHlsZXx8e307cGg9dmYoZS5ycHhDYWxjTWF4RGV2aWNlV2lkdGgsOTYwKSx2aD12ZihlLnJweENhbGNCYXNlRGV2aWNlV2lkdGgsMzc1KSxtaD12ZihlLnJweENhbGNCYXNlRGV2aWNlV2lkdGgsNzUwKX1sZXQgZ189TXQobF8sKGUsdCk9PntpZihwZj09PTAmJihkXygpLGhfKCkpLGU9TnVtYmVyKGUpLGU9PT0wKXJldHVybiAwO2xldCBuPXR8fHBmO249ZT09PW1ofHxuPD1waD9uOnZoO2xldCByPWUvZl8qbjtyZXR1cm4gcjwwJiYocj0tcikscj1NYXRoLmZsb29yKHIrdV8pLHI9PT0wJiYoZ2g9PT0xfHwhaGg/cj0xOnI9LjUpLGU8MD8tcjpyfSxjXykscF89ImFkZEludGVyY2VwdG9yIix2Xz0icmVtb3ZlSW50ZXJjZXB0b3IiLF9oPVt7bmFtZToibWV0aG9kIix0eXBlOltTdHJpbmcsT2JqZWN0XSxyZXF1aXJlZDohMH1dLG1fPV9oO2Z1bmN0aW9uIGJoKGUsdCl7T2JqZWN0LmtleXModCkuZm9yRWFjaChuPT57Ry5pc0Z1bmN0aW9uKHRbbl0pJiYoZVtuXT1fXyhlW25dLHRbbl0pKX0pfWZ1bmN0aW9uIHloKGUsdCl7IWV8fCF0fHxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKG49PntsZXQgcj1lW25dLGE9dFtuXTtHLmlzQXJyYXkocikmJkcuaXNGdW5jdGlvbihhKSYmRy5yZW1vdmUocixhKX0pfWZ1bmN0aW9uIF9fKGUsdCl7bGV0IG49dD9lP2UuY29uY2F0KHQpOkcuaXNBcnJheSh0KT90Olt0XTplO3JldHVybiBuJiZiXyhuKX1mdW5jdGlvbiBiXyhlKXtsZXQgdD1bXTtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl0LmluZGV4T2YoZVtuXSk9PT0tMSYmdC5wdXNoKGVbbl0pO3JldHVybiB0fWxldCB5Xz1NdChwXywoZSx0KT0+e0cuaXNTdHJpbmcoZSkmJkcuaXNQbGFpbk9iamVjdCh0KT9iaCh5cltlXXx8KHlyW2VdPXt9KSx0KTpHLmlzUGxhaW5PYmplY3QoZSkmJmJoKFFuLGUpfSxfaCksRV89TXQodl8sKGUsdCk9PntHLmlzU3RyaW5nKGUpP0cuaXNQbGFpbk9iamVjdCh0KT95aCh5cltlXSx0KTpkZWxldGUgeXJbZV06Ry5pc1BsYWluT2JqZWN0KGUpJiZ5aChRbixlKX0sbV8pLFNfPXt9LHdfPSIkb24iLEVoPVt7bmFtZToiZXZlbnQiLHR5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSx7bmFtZToiY2FsbGJhY2siLHR5cGU6RnVuY3Rpb24scmVxdWlyZWQ6ITB9XSxDXz0iJG9uY2UiLEFfPUVoLFRfPSIkb2ZmIixPXz1be25hbWU6ImV2ZW50Iix0eXBlOltTdHJpbmcsQXJyYXldfSx7bmFtZToiY2FsbGJhY2siLHR5cGU6W0Z1bmN0aW9uLE51bWJlcl19XSxQXz0iJGVtaXQiLE5fPVt7bmFtZToiZXZlbnQiLHR5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfV07Y2xhc3MgSV97Y29uc3RydWN0b3IoKXt0aGlzLiRlbWl0dGVyPW5ldyBuZS5FbWl0dGVyfW9uKHQsbil7cmV0dXJuIHRoaXMuJGVtaXR0ZXIub24odCxuKX1vbmNlKHQsbil7cmV0dXJuIHRoaXMuJGVtaXR0ZXIub25jZSh0LG4pfW9mZih0LG4pe2lmKCF0KXt0aGlzLiRlbWl0dGVyLmU9e307cmV0dXJufXRoaXMuJGVtaXR0ZXIub2ZmKHQsbil9ZW1pdCh0LC4uLm4pe3RoaXMuJGVtaXR0ZXIuZW1pdCh0LC4uLm4pfX1sZXQgbmM9bmV3IElfLGtfPU10KHdfLChlLHQpPT4obmMub24oZSx0KSwoKT0+bmMub2ZmKGUsdCkpLEVoKSxSXz1NdChDXywoZSx0KT0+KG5jLm9uY2UoZSx0KSwoKT0+bmMub2ZmKGUsdCkpLEFfKSx4Xz1NdChUXywoZSx0KT0+e0cuaXNBcnJheShlKXx8KGU9ZT9bZV06W10pLGUuZm9yRWFjaChuPT57bmMub2ZmKG4sdCl9KX0sT18pLEJfPU10KFBfLChlLC4uLnQpPT57bmMuZW1pdChlLC4uLnQpfSxOXyksU2g9W3tuYW1lOiJpZCIsdHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9XSxMXz0iY3JlYXRlVmlkZW9Db250ZXh0IixNXz0iY3JlYXRlTWFwQ29udGV4dCIsRF89U2gsRl89ImNyZWF0ZUNhbnZhc0NvbnRleHQiLFZfPVt7bmFtZToiY2FudmFzSWQiLHR5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSx7bmFtZToiY29tcG9uZW50SW5zdGFuY2UiLHR5cGU6T2JqZWN0fV0sVV89ImNyZWF0ZUlubmVyQXVkaW9Db250ZXh0IiwkXz0iY3JlYXRlTGl2ZVB1c2hlckNvbnRleHQiLEhfPVNoLmNvbmNhdCh7bmFtZToiY29tcG9uZW50SW5zdGFuY2UiLHR5cGU6T2JqZWN0fSksal89Wy41LC44LDEsMS4yNSwxLjUsMl07Y2xhc3MgbWZ7Y29uc3RydWN0b3IodCxuKXt0aGlzLmlkPXQsdGhpcy5wYWdlSWQ9bn1wbGF5KCl7VG4odGhpcy5pZCx0aGlzLnBhZ2VJZCwicGxheSIpfXBhdXNlKCl7VG4odGhpcy5pZCx0aGlzLnBhZ2VJZCwicGF1c2UiKX1zdG9wKCl7VG4odGhpcy5pZCx0aGlzLnBhZ2VJZCwic3RvcCIpfXNlZWsodCl7VG4odGhpcy5pZCx0aGlzLnBhZ2VJZCwic2VlayIse3Bvc2l0aW9uOnR9KX1zZW5kRGFubXUodCl7VG4odGhpcy5pZCx0aGlzLnBhZ2VJZCwic2VuZERhbm11Iix0KX1wbGF5YmFja1JhdGUodCl7fmpfLmluZGV4T2YodCl8fCh0PTEpLFRuKHRoaXMuaWQsdGhpcy5wYWdlSWQsInBsYXliYWNrUmF0ZSIse3JhdGU6dH0pfXJlcXVlc3RGdWxsU2NyZWVuKHQ9e30pe1RuKHRoaXMuaWQsdGhpcy5wYWdlSWQsInJlcXVlc3RGdWxsU2NyZWVuIix0KX1leGl0RnVsbFNjcmVlbigpe1RuKHRoaXMuaWQsdGhpcy5wYWdlSWQsImV4aXRGdWxsU2NyZWVuIil9c2hvd1N0YXR1c0Jhcigpe1RuKHRoaXMuaWQsdGhpcy5wYWdlSWQsInNob3dTdGF0dXNCYXIiKX1oaWRlU3RhdHVzQmFyKCl7VG4odGhpcy5pZCx0aGlzLnBhZ2VJZCwiaGlkZVN0YXR1c0JhciIpfX1sZXQgel89TXQoTF8sKGUsdCk9PnQ/bmV3IG1mKGUsQW4odCkpOm5ldyBtZihlLEFuKHZyKCkpKSksV189KGUsdCk9PntsZXQgbj10LmVyck1zZ3x8IiI7bmV3IFJlZ0V4cCgiXFw6XFxzKmZhaWwiKS50ZXN0KG4pP2UuZmFpbCYmZS5mYWlsKHQpOmUuc3VjY2VzcyYmZS5zdWNjZXNzKHQpLGUuY29tcGxldGUmJmUuY29tcGxldGUodCl9LFVpPShlLHQsbixyKT0+e0dyKGUsdCxuLHIsYT0+e3ImJldfKHIsYSl9KX07Y2xhc3MgX2Z7Y29uc3RydWN0b3IodCxuKXt0aGlzLmlkPXQsdGhpcy5wYWdlSWQ9bn1nZXRDZW50ZXJMb2NhdGlvbih0KXtVaSh0aGlzLmlkLHRoaXMucGFnZUlkLCJnZXRDZW50ZXJMb2NhdGlvbiIsdCl9bW92ZVRvTG9jYXRpb24odCl7VWkodGhpcy5pZCx0aGlzLnBhZ2VJZCwibW92ZVRvTG9jYXRpb24iLHQpfWdldFNjYWxlKHQpe1VpKHRoaXMuaWQsdGhpcy5wYWdlSWQsImdldFNjYWxlIix0KX1nZXRSZWdpb24odCl7VWkodGhpcy5pZCx0aGlzLnBhZ2VJZCwiZ2V0UmVnaW9uIix0KX1pbmNsdWRlUG9pbnRzKHQpe1VpKHRoaXMuaWQsdGhpcy5wYWdlSWQsImluY2x1ZGVQb2ludHMiLHQpfXRyYW5zbGF0ZU1hcmtlcih0KXtVaSh0aGlzLmlkLHRoaXMucGFnZUlkLCJ0cmFuc2xhdGVNYXJrZXIiLHQpfSRnZXRBcHBNYXAoKXtyZXR1cm4gcy5tYXBzLmdldE1hcEJ5SWQodGhpcy5wYWdlSWQrIi1tYXAtIit0aGlzLmlkKX1hZGRDdXN0b21MYXllcih0KXtVaSh0aGlzLmlkLHRoaXMucGFnZUlkLCJhZGRDdXN0b21MYXllciIsdCl9cmVtb3ZlQ3VzdG9tTGF5ZXIodCl7VWkodGhpcy5pZCx0aGlzLnBhZ2VJZCwicmVtb3ZlQ3VzdG9tTGF5ZXIiLHQpfWFkZEdyb3VuZE92ZXJsYXkodCl7VWkodGhpcy5pZCx0aGlzLnBhZ2VJZCwiYWRkR3JvdW5kT3ZlcmxheSIsdCl9cmVtb3ZlR3JvdW5kT3ZlcmxheSh0KXtVaSh0aGlzLmlkLHRoaXMucGFnZUlkLCJyZW1vdmVHcm91bmRPdmVybGF5Iix0KX11cGRhdGVHcm91bmRPdmVybGF5KHQpe1VpKHRoaXMuaWQsdGhpcy5wYWdlSWQsInVwZGF0ZUdyb3VuZE92ZXJsYXkiLHQpfWluaXRNYXJrZXJDbHVzdGVyKHQpe1VpKHRoaXMuaWQsdGhpcy5wYWdlSWQsImluaXRNYXJrZXJDbHVzdGVyIix0KX1hZGRNYXJrZXJzKHQpe1VpKHRoaXMuaWQsdGhpcy5wYWdlSWQsImFkZE1hcmtlcnMiLHQpfXJlbW92ZU1hcmtlcnModCl7VWkodGhpcy5pZCx0aGlzLnBhZ2VJZCwicmVtb3ZlTWFya2VycyIsdCl9bW92ZUFsb25nKHQpe1VpKHRoaXMuaWQsdGhpcy5wYWdlSWQsIm1vdmVBbG9uZyIsdCl9c2V0TG9jTWFya2VySWNvbih0KXtVaSh0aGlzLmlkLHRoaXMucGFnZUlkLCJzZXRMb2NNYXJrZXJJY29uIix0KX1vcGVuTWFwQXBwKHQpe1VpKHRoaXMuaWQsdGhpcy5wYWdlSWQsIm9wZW5NYXBBcHAiLHQpfW9uKHQsbil7VWkodGhpcy5pZCx0aGlzLnBhZ2VJZCwib24iLHtuYW1lOnQsY2FsbGJhY2s6bn0pfX1sZXQgR189TXQoTV8sKGUsdCk9PnQ/bmV3IF9mKGUsQW4odCkpOm5ldyBfZihlLEFuKHZyKCkpKSxEXyk7ZnVuY3Rpb24gWXMoZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXtuP3JbZV09TWF0aC5yb3VuZChuKTp0eXBlb2YgdCE9InVuZGVmaW5lZCImJihyW2VdPXQpfX1sZXQgd2g9WXMoIndpZHRoIiksQ2g9WXMoImhlaWdodCIpLHFfPSJjYW52YXNHZXRJbWFnZURhdGEiLEFoPXtmb3JtYXRBcmdzOnt4OllzKCJ4IikseTpZcygieSIpLHdpZHRoOndoLGhlaWdodDpDaH19LFRoPXtjYW52YXNJZDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LHg6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiEwfSx5Ont0eXBlOk51bWJlcixyZXF1aXJlZDohMH0sd2lkdGg6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiEwfSxoZWlnaHQ6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiEwfX0sWV89ImNhbnZhc1B1dEltYWdlRGF0YSIsS189QWgsSl89Ry5leHRlbmQoe2RhdGE6e3R5cGU6VWludDhDbGFtcGVkQXJyYXkscmVxdWlyZWQ6ITB9fSxUaCx7aGVpZ2h0Ont0eXBlOk51bWJlcn19KSxPaD17UE5HOiJwbmciLEpQRzoianBnIixKUEVHOiJqcGcifSxaXz0iY2FudmFzVG9UZW1wRmlsZVBhdGgiLFhfPXtmb3JtYXRBcmdzOnt4OllzKCJ4IiwwKSx5OllzKCJ5IiwwKSx3aWR0aDp3aCxoZWlnaHQ6Q2gsZGVzdFdpZHRoOllzKCJkZXN0V2lkdGgiKSxkZXN0SGVpZ2h0OllzKCJkZXN0SGVpZ2h0IiksZmlsZVR5cGUoZSx0KXtlPShlfHwiIikudG9VcHBlckNhc2UoKTtsZXQgbj1PaFtlXTtufHwobj1PaC5QTkcpLHQuZmlsZVR5cGU9bn0scXVhbGl0eShlLHQpe3QucXVhbGl0eT1lJiZlPjAmJmU8MT9lOjF9fX0sUV89e3g6TnVtYmVyLHk6TnVtYmVyLHdpZHRoOk51bWJlcixoZWlnaHQ6TnVtYmVyLGRlc3RXaWR0aDpOdW1iZXIsZGVzdEhlaWdodDpOdW1iZXIsY2FudmFzSWQ6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSxmaWxlVHlwZTpTdHJpbmcscXVhbGl0eTpOdW1iZXJ9O2Z1bmN0aW9uIGZ1KGUsdCxuLHIsYSl7c3QuaW52b2tlVmlld01ldGhvZChgY2FudmFzLiR7ZX1gLHt0eXBlOm4sZGF0YTpyfSx0LHU9PnthJiZhKHUpfSl9dmFyIGViPVsic2NhbGUiLCJyb3RhdGUiLCJ0cmFuc2xhdGUiLCJzZXRUcmFuc2Zvcm0iLCJ0cmFuc2Zvcm0iXSx0Yj1bImRyYXdJbWFnZSIsImZpbGxUZXh0IiwiZmlsbCIsInN0cm9rZSIsImZpbGxSZWN0Iiwic3Ryb2tlUmVjdCIsImNsZWFyUmVjdCIsInN0cm9rZVRleHQiXSxuYj1bInNldEZpbGxTdHlsZSIsInNldFRleHRBbGlnbiIsInNldFN0cm9rZVN0eWxlIiwic2V0R2xvYmFsQWxwaGEiLCJzZXRTaGFkb3ciLCJzZXRGb250U2l6ZSIsInNldExpbmVDYXAiLCJzZXRMaW5lSm9pbiIsInNldExpbmVXaWR0aCIsInNldE1pdGVyTGltaXQiLCJzZXRUZXh0QmFzZWxpbmUiLCJzZXRMaW5lRGFzaCJdO2Z1bmN0aW9uIHJiKGUsdCl7bGV0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikuZ2V0Q29udGV4dCgiMmQiKTtyZXR1cm4gci5mb250PXQsci5tZWFzdXJlVGV4dChlKS53aWR0aHx8MH1sZXQgUGg9e2FsaWNlYmx1ZToiI2YwZjhmZiIsYW50aXF1ZXdoaXRlOiIjZmFlYmQ3IixhcXVhOiIjMDBmZmZmIixhcXVhbWFyaW5lOiIjN2ZmZmQ0IixhenVyZToiI2YwZmZmZiIsYmVpZ2U6IiNmNWY1ZGMiLGJpc3F1ZToiI2ZmZTRjNCIsYmxhY2s6IiMwMDAwMDAiLGJsYW5jaGVkYWxtb25kOiIjZmZlYmNkIixibHVlOiIjMDAwMGZmIixibHVldmlvbGV0OiIjOGEyYmUyIixicm93bjoiI2E1MmEyYSIsYnVybHl3b29kOiIjZGViODg3IixjYWRldGJsdWU6IiM1ZjllYTAiLGNoYXJ0cmV1c2U6IiM3ZmZmMDAiLGNob2NvbGF0ZToiI2QyNjkxZSIsY29yYWw6IiNmZjdmNTAiLGNvcm5mbG93ZXJibHVlOiIjNjQ5NWVkIixjb3Juc2lsazoiI2ZmZjhkYyIsY3JpbXNvbjoiI2RjMTQzYyIsY3lhbjoiIzAwZmZmZiIsZGFya2JsdWU6IiMwMDAwOGIiLGRhcmtjeWFuOiIjMDA4YjhiIixkYXJrZ29sZGVucm9kOiIjYjg4NjBiIixkYXJrZ3JheToiI2E5YTlhOSIsZGFya2dyZXk6IiNhOWE5YTkiLGRhcmtncmVlbjoiIzAwNjQwMCIsZGFya2toYWtpOiIjYmRiNzZiIixkYXJrbWFnZW50YToiIzhiMDA4YiIsZGFya29saXZlZ3JlZW46IiM1NTZiMmYiLGRhcmtvcmFuZ2U6IiNmZjhjMDAiLGRhcmtvcmNoaWQ6IiM5OTMyY2MiLGRhcmtyZWQ6IiM4YjAwMDAiLGRhcmtzYWxtb246IiNlOTk2N2EiLGRhcmtzZWFncmVlbjoiIzhmYmM4ZiIsZGFya3NsYXRlYmx1ZToiIzQ4M2Q4YiIsZGFya3NsYXRlZ3JheToiIzJmNGY0ZiIsZGFya3NsYXRlZ3JleToiIzJmNGY0ZiIsZGFya3R1cnF1b2lzZToiIzAwY2VkMSIsZGFya3Zpb2xldDoiIzk0MDBkMyIsZGVlcHBpbms6IiNmZjE0OTMiLGRlZXBza3libHVlOiIjMDBiZmZmIixkaW1ncmF5OiIjNjk2OTY5IixkaW1ncmV5OiIjNjk2OTY5Iixkb2RnZXJibHVlOiIjMWU5MGZmIixmaXJlYnJpY2s6IiNiMjIyMjIiLGZsb3JhbHdoaXRlOiIjZmZmYWYwIixmb3Jlc3RncmVlbjoiIzIyOGIyMiIsZnVjaHNpYToiI2ZmMDBmZiIsZ2FpbnNib3JvOiIjZGNkY2RjIixnaG9zdHdoaXRlOiIjZjhmOGZmIixnb2xkOiIjZmZkNzAwIixnb2xkZW5yb2Q6IiNkYWE1MjAiLGdyYXk6IiM4MDgwODAiLGdyZXk6IiM4MDgwODAiLGdyZWVuOiIjMDA4MDAwIixncmVlbnllbGxvdzoiI2FkZmYyZiIsaG9uZXlkZXc6IiNmMGZmZjAiLGhvdHBpbms6IiNmZjY5YjQiLGluZGlhbnJlZDoiI2NkNWM1YyIsaW5kaWdvOiIjNGIwMDgyIixpdm9yeToiI2ZmZmZmMCIsa2hha2k6IiNmMGU2OGMiLGxhdmVuZGVyOiIjZTZlNmZhIixsYXZlbmRlcmJsdXNoOiIjZmZmMGY1IixsYXduZ3JlZW46IiM3Y2ZjMDAiLGxlbW9uY2hpZmZvbjoiI2ZmZmFjZCIsbGlnaHRibHVlOiIjYWRkOGU2IixsaWdodGNvcmFsOiIjZjA4MDgwIixsaWdodGN5YW46IiNlMGZmZmYiLGxpZ2h0Z29sZGVucm9keWVsbG93OiIjZmFmYWQyIixsaWdodGdyYXk6IiNkM2QzZDMiLGxpZ2h0Z3JleToiI2QzZDNkMyIsbGlnaHRncmVlbjoiIzkwZWU5MCIsbGlnaHRwaW5rOiIjZmZiNmMxIixsaWdodHNhbG1vbjoiI2ZmYTA3YSIsbGlnaHRzZWFncmVlbjoiIzIwYjJhYSIsbGlnaHRza3libHVlOiIjODdjZWZhIixsaWdodHNsYXRlZ3JheToiIzc3ODg5OSIsbGlnaHRzbGF0ZWdyZXk6IiM3Nzg4OTkiLGxpZ2h0c3RlZWxibHVlOiIjYjBjNGRlIixsaWdodHllbGxvdzoiI2ZmZmZlMCIsbGltZToiIzAwZmYwMCIsbGltZWdyZWVuOiIjMzJjZDMyIixsaW5lbjoiI2ZhZjBlNiIsbWFnZW50YToiI2ZmMDBmZiIsbWFyb29uOiIjODAwMDAwIixtZWRpdW1hcXVhbWFyaW5lOiIjNjZjZGFhIixtZWRpdW1ibHVlOiIjMDAwMGNkIixtZWRpdW1vcmNoaWQ6IiNiYTU1ZDMiLG1lZGl1bXB1cnBsZToiIzkzNzBkYiIsbWVkaXVtc2VhZ3JlZW46IiMzY2IzNzEiLG1lZGl1bXNsYXRlYmx1ZToiIzdiNjhlZSIsbWVkaXVtc3ByaW5nZ3JlZW46IiMwMGZhOWEiLG1lZGl1bXR1cnF1b2lzZToiIzQ4ZDFjYyIsbWVkaXVtdmlvbGV0cmVkOiIjYzcxNTg1IixtaWRuaWdodGJsdWU6IiMxOTE5NzAiLG1pbnRjcmVhbToiI2Y1ZmZmYSIsbWlzdHlyb3NlOiIjZmZlNGUxIixtb2NjYXNpbjoiI2ZmZTRiNSIsbmF2YWpvd2hpdGU6IiNmZmRlYWQiLG5hdnk6IiMwMDAwODAiLG9sZGxhY2U6IiNmZGY1ZTYiLG9saXZlOiIjODA4MDAwIixvbGl2ZWRyYWI6IiM2YjhlMjMiLG9yYW5nZToiI2ZmYTUwMCIsb3JhbmdlcmVkOiIjZmY0NTAwIixvcmNoaWQ6IiNkYTcwZDYiLHBhbGVnb2xkZW5yb2Q6IiNlZWU4YWEiLHBhbGVncmVlbjoiIzk4ZmI5OCIscGFsZXR1cnF1b2lzZToiI2FmZWVlZSIscGFsZXZpb2xldHJlZDoiI2RiNzA5MyIscGFwYXlhd2hpcDoiI2ZmZWZkNSIscGVhY2hwdWZmOiIjZmZkYWI5IixwZXJ1OiIjY2Q4NTNmIixwaW5rOiIjZmZjMGNiIixwbHVtOiIjZGRhMGRkIixwb3dkZXJibHVlOiIjYjBlMGU2IixwdXJwbGU6IiM4MDAwODAiLHJlYmVjY2FwdXJwbGU6IiM2NjMzOTkiLHJlZDoiI2ZmMDAwMCIscm9zeWJyb3duOiIjYmM4ZjhmIixyb3lhbGJsdWU6IiM0MTY5ZTEiLHNhZGRsZWJyb3duOiIjOGI0NTEzIixzYWxtb246IiNmYTgwNzIiLHNhbmR5YnJvd246IiNmNGE0NjAiLHNlYWdyZWVuOiIjMmU4YjU3IixzZWFzaGVsbDoiI2ZmZjVlZSIsc2llbm5hOiIjYTA1MjJkIixzaWx2ZXI6IiNjMGMwYzAiLHNreWJsdWU6IiM4N2NlZWIiLHNsYXRlYmx1ZToiIzZhNWFjZCIsc2xhdGVncmF5OiIjNzA4MDkwIixzbGF0ZWdyZXk6IiM3MDgwOTAiLHNub3c6IiNmZmZhZmEiLHNwcmluZ2dyZWVuOiIjMDBmZjdmIixzdGVlbGJsdWU6IiM0NjgyYjQiLHRhbjoiI2QyYjQ4YyIsdGVhbDoiIzAwODA4MCIsdGhpc3RsZToiI2Q4YmZkOCIsdG9tYXRvOiIjZmY2MzQ3Iix0dXJxdW9pc2U6IiM0MGUwZDAiLHZpb2xldDoiI2VlODJlZSIsd2hlYXQ6IiNmNWRlYjMiLHdoaXRlOiIjZmZmZmZmIix3aGl0ZXNtb2tlOiIjZjVmNWY1Iix5ZWxsb3c6IiNmZmZmMDAiLHllbGxvd2dyZWVuOiIjOWFjZDMyIix0cmFuc3BhcmVudDoiIzAwMDAwMDAwIn07ZnVuY3Rpb24gYmYoZSl7ZT1lfHwiIzAwMDAwMCI7bGV0IHQ9bnVsbDtpZigodD0vXiMoWzAtOXxBLUZ8YS1mXXs2fSkkLy5leGVjKGUpKSE9bnVsbCl7bGV0IHI9cGFyc2VJbnQodFsxXS5zbGljZSgwLDIpLDE2KSxhPXBhcnNlSW50KHRbMV0uc2xpY2UoMiw0KSwxNiksdT1wYXJzZUludCh0WzFdLnNsaWNlKDQpLDE2KTtyZXR1cm5bcixhLHUsMjU1XX1pZigodD0vXiMoWzAtOXxBLUZ8YS1mXXszfSkkLy5leGVjKGUpKSE9bnVsbCl7bGV0IHI9dFsxXS5zbGljZSgwLDEpLGE9dFsxXS5zbGljZSgxLDIpLHU9dFsxXS5zbGljZSgyLDMpO3JldHVybiByPXBhcnNlSW50KHIrciwxNiksYT1wYXJzZUludChhK2EsMTYpLHU9cGFyc2VJbnQodSt1LDE2KSxbcixhLHUsMjU1XX1pZigodD0vXnJnYlwoKC4rKVwpJC8uZXhlYyhlKSkhPW51bGwpcmV0dXJuIHRbMV0uc3BsaXQoIiwiKS5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgubWluKDI1NSxwYXJzZUludChyLnRyaW0oKSkpfSkuY29uY2F0KDI1NSk7aWYoKHQ9L15yZ2JhXCgoLispXCkkLy5leGVjKGUpKSE9bnVsbClyZXR1cm4gdFsxXS5zcGxpdCgiLCIpLm1hcChmdW5jdGlvbihyLGEpe3JldHVybiBhPT09Mz9NYXRoLmZsb29yKDI1NSpwYXJzZUZsb2F0KHIudHJpbSgpKSk6TWF0aC5taW4oMjU1LHBhcnNlSW50KHIudHJpbSgpKSl9KTt2YXIgbj1lLnRvTG93ZXJDYXNlKCk7aWYoRy5oYXNPd24oUGgsbikpe3Q9L14jKFswLTl8QS1GfGEtZl17Niw4fSkkLy5leGVjKFBoW25dKTtsZXQgcj1wYXJzZUludCh0WzFdLnNsaWNlKDAsMiksMTYpLGE9cGFyc2VJbnQodFsxXS5zbGljZSgyLDQpLDE2KSx1PXBhcnNlSW50KHRbMV0uc2xpY2UoNCw2KSwxNiksZz1wYXJzZUludCh0WzFdLnNsaWNlKDYsOCksMTYpO3JldHVybiBnPWc+PTA/ZzoyNTUsW3IsYSx1LGddfXJldHVybiBjb25zb2xlLmVycm9yKCJ1bnN1cHBvcnRlZCBjb2xvcjoiK2UpLFswLDAsMCwyNTVdfWNsYXNzIE5oe2NvbnN0cnVjdG9yKHQsbil7dGhpcy50eXBlPXQsdGhpcy5kYXRhPW4sdGhpcy5jb2xvclN0b3A9W119YWRkQ29sb3JTdG9wKHQsbil7dGhpcy5jb2xvclN0b3AucHVzaChbdCxiZihuKV0pfX1jbGFzcyBpYntjb25zdHJ1Y3Rvcih0LG4pe3RoaXMudHlwZT0icGF0dGVybiIsdGhpcy5kYXRhPXQsdGhpcy5jb2xvclN0b3A9bn19Y2xhc3Mgb2J7Y29uc3RydWN0b3IodCl7dGhpcy53aWR0aD10fX1sZXQgYWI9KCk9Pm1yO2NsYXNzIExje2NvbnN0cnVjdG9yKHQsbil7dGhpcy5pZD10LHRoaXMucGFnZUlkPW4sdGhpcy5hY3Rpb25zPVtdLHRoaXMucGF0aD1bXSx0aGlzLnN1YnBhdGg9W10sdGhpcy5kcmF3aW5nU3RhdGU9W10sdGhpcy5zdGF0ZT17bGluZURhc2g6WzAsMF0sc2hhZG93T2Zmc2V0WDowLHNoYWRvd09mZnNldFk6MCxzaGFkb3dCbHVyOjAsc2hhZG93Q29sb3I6WzAsMCwwLDBdLGZvbnQ6IjEwcHggc2Fucy1zZXJpZiIsZm9udFNpemU6MTAsZm9udFdlaWdodDoibm9ybWFsIixmb250U3R5bGU6Im5vcm1hbCIsZm9udEZhbWlseToic2Fucy1zZXJpZiJ9fXNldEZpbGxTdHlsZSh0KXtjb25zb2xlLmxvZygiaW5pdENhbnZhc0NvbnRleHRQcm9wZXJ0eSBpbXBsZW1lbnRlZC4iKX1zZXRTdHJva2VTdHlsZSh0KXtjb25zb2xlLmxvZygiaW5pdENhbnZhc0NvbnRleHRQcm9wZXJ0eSBpbXBsZW1lbnRlZC4iKX1zZXRTaGFkb3codCxuLHIsYSl7Y29uc29sZS5sb2coImluaXRDYW52YXNDb250ZXh0UHJvcGVydHkgaW1wbGVtZW50ZWQuIil9YWRkQ29sb3JTdG9wKHQsbil7Y29uc29sZS5sb2coImluaXRDYW52YXNDb250ZXh0UHJvcGVydHkgaW1wbGVtZW50ZWQuIil9c2V0TGluZVdpZHRoKHQpe2NvbnNvbGUubG9nKCJpbml0Q2FudmFzQ29udGV4dFByb3BlcnR5IGltcGxlbWVudGVkLiIpfXNldExpbmVDYXAodCl7Y29uc29sZS5sb2coImluaXRDYW52YXNDb250ZXh0UHJvcGVydHkgaW1wbGVtZW50ZWQuIil9c2V0TGluZUpvaW4odCl7Y29uc29sZS5sb2coImluaXRDYW52YXNDb250ZXh0UHJvcGVydHkgaW1wbGVtZW50ZWQuIil9c2V0TGluZURhc2godCxuKXtjb25zb2xlLmxvZygiaW5pdENhbnZhc0NvbnRleHRQcm9wZXJ0eSBpbXBsZW1lbnRlZC4iKX1zZXRNaXRlckxpbWl0KHQpe2NvbnNvbGUubG9nKCJpbml0Q2FudmFzQ29udGV4dFByb3BlcnR5IGltcGxlbWVudGVkLiIpfWZpbGxSZWN0KHQsbixyLGEpe2NvbnNvbGUubG9nKCJpbml0Q2FudmFzQ29udGV4dFByb3BlcnR5IGltcGxlbWVudGVkLiIpfXN0cm9rZVJlY3QodCxuLHIsYSl7Y29uc29sZS5sb2coImluaXRDYW52YXNDb250ZXh0UHJvcGVydHkgaW1wbGVtZW50ZWQuIil9Y2xlYXJSZWN0KHQsbixyLGEpe2NvbnNvbGUubG9nKCJpbml0Q2FudmFzQ29udGV4dFByb3BlcnR5IGltcGxlbWVudGVkLiIpfWZpbGwoKXtjb25zb2xlLmxvZygiaW5pdENhbnZhc0NvbnRleHRQcm9wZXJ0eSBpbXBsZW1lbnRlZC4iKX1zdHJva2UoKXtjb25zb2xlLmxvZygiaW5pdENhbnZhc0NvbnRleHRQcm9wZXJ0eSBpbXBsZW1lbnRlZC4iKX1zY2FsZSh0LG4pe2NvbnNvbGUubG9nKCJpbml0Q2FudmFzQ29udGV4dFByb3BlcnR5IGltcGxlbWVudGVkLiIpfXJvdGF0ZSh0KXtjb25zb2xlLmxvZygiaW5pdENhbnZhc0NvbnRleHRQcm9wZXJ0eSBpbXBsZW1lbnRlZC4iKX10cmFuc2xhdGUodCxuKXtjb25zb2xlLmxvZygiaW5pdENhbnZhc0NvbnRleHRQcm9wZXJ0eSBpbXBsZW1lbnRlZC4iKX1zZXRGb250U2l6ZSh0KXtjb25zb2xlLmxvZygiaW5pdENhbnZhc0NvbnRleHRQcm9wZXJ0eSBpbXBsZW1lbnRlZC4iKX1maWxsVGV4dCh0LG4scixhKXtjb25zb2xlLmxvZygiaW5pdENhbnZhc0NvbnRleHRQcm9wZXJ0eSBpbXBsZW1lbnRlZC4iKX1zZXRUZXh0QWxpZ24odCl7Y29uc29sZS5sb2coImluaXRDYW52YXNDb250ZXh0UHJvcGVydHkgaW1wbGVtZW50ZWQuIil9c2V0VGV4dEJhc2VsaW5lKHQpe2NvbnNvbGUubG9nKCJpbml0Q2FudmFzQ29udGV4dFByb3BlcnR5IGltcGxlbWVudGVkLiIpfWRyYXdJbWFnZSh0LG4scixhLHUsZyx5LE0sTyl7Y29uc29sZS5sb2coImluaXRDYW52YXNDb250ZXh0UHJvcGVydHkgaW1wbGVtZW50ZWQuIil9c2V0R2xvYmFsQWxwaGEodCl7Y29uc29sZS5sb2coImluaXRDYW52YXNDb250ZXh0UHJvcGVydHkgaW1wbGVtZW50ZWQuIil9c3Ryb2tlVGV4dCh0LG4scixhKXtjb25zb2xlLmxvZygiaW5pdENhbnZhc0NvbnRleHRQcm9wZXJ0eSBpbXBsZW1lbnRlZC4iKX1zZXRUcmFuc2Zvcm0odCxuLHIsYSx1LGcpe2NvbnNvbGUubG9nKCJpbml0Q2FudmFzQ29udGV4dFByb3BlcnR5IGltcGxlbWVudGVkLiIpfWRyYXcodD0hMSxuKXt2YXIgcj1bLi4udGhpcy5hY3Rpb25zXTt0aGlzLmFjdGlvbnM9W10sdGhpcy5wYXRoPVtdLGZ1KHRoaXMuaWQsdGhpcy5wYWdlSWQsImFjdGlvbnNDaGFuZ2VkIix7YWN0aW9uczpyLHJlc2VydmU6dH0sbil9Y3JlYXRlTGluZWFyR3JhZGllbnQodCxuLHIsYSl7cmV0dXJuIG5ldyBOaCgibGluZWFyIixbdCxuLHIsYV0pfWNyZWF0ZUNpcmN1bGFyR3JhZGllbnQodCxuLHIpe3JldHVybiBuZXcgTmgoInJhZGlhbCIsW3QsbixyXSl9Y3JlYXRlUGF0dGVybih0LG4pe2lmKG49PT12b2lkIDApY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NyZWF0ZVBhdHRlcm4nIG9uICdDYW52YXNDb250ZXh0JzogMiBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5IDEgcHJlc2VudC4iKTtlbHNlIGlmKFsicmVwZWF0IiwicmVwZWF0LXgiLCJyZXBlYXQteSIsIm5vLXJlcGVhdCJdLmluZGV4T2Yobik8MCljb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRlUGF0dGVybicgb24gJ0NhbnZhc0NvbnRleHQnOiBUaGUgcHJvdmlkZWQgdHlwZSAoJyIrbisiJykgaXMgbm90IG9uZSBvZiAncmVwZWF0JywgJ25vLXJlcGVhdCcsICdyZXBlYXQteCcsIG9yICdyZXBlYXQteScuIik7ZWxzZSByZXR1cm4gbmV3IGliKHQsbil9bWVhc3VyZVRleHQodCxuKXtsZXQgcj10aGlzLnN0YXRlLmZvbnQsYT0wO3tsZXQgdT1zLndlYnZpZXcuYWxsKCkuZmluZChnPT5nLmdldFVSTCgpLmVuZHNXaXRoKCJ3d3cvX191bmlhcHB2aWV3Lmh0bWwiKSk7dSYmKGE9TnVtYmVyKHUuZXZhbEpTU3luYyhgKCR7cmIudG9TdHJpbmcoKX0pKCR7SlNPTi5zdHJpbmdpZnkodCl9LCR7SlNPTi5zdHJpbmdpZnkocil9KWApKSl9cmV0dXJuIG5ldyBvYihhKX1zYXZlKCl7dGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDoic2F2ZSIsZGF0YTpbXX0pLHRoaXMuZHJhd2luZ1N0YXRlLnB1c2godGhpcy5zdGF0ZSl9cmVzdG9yZSgpe3RoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6InJlc3RvcmUiLGRhdGE6W119KSx0aGlzLnN0YXRlPXRoaXMuZHJhd2luZ1N0YXRlLnBvcCgpfHx7bGluZURhc2g6WzAsMF0sc2hhZG93T2Zmc2V0WDowLHNoYWRvd09mZnNldFk6MCxzaGFkb3dCbHVyOjAsc2hhZG93Q29sb3I6WzAsMCwwLDBdLGZvbnQ6IjEwcHggc2Fucy1zZXJpZiIsZm9udFNpemU6MTAsZm9udFdlaWdodDoibm9ybWFsIixmb250U3R5bGU6Im5vcm1hbCIsZm9udEZhbWlseToic2Fucy1zZXJpZiJ9fWJlZ2luUGF0aCgpe3RoaXMucGF0aD1bXSx0aGlzLnN1YnBhdGg9W10sdGhpcy5wYXRoLnB1c2goe21ldGhvZDoiYmVnaW5QYXRoIixkYXRhOltdfSl9bW92ZVRvKHQsbil7dGhpcy5wYXRoLnB1c2goe21ldGhvZDoibW92ZVRvIixkYXRhOlt0LG5dfSksdGhpcy5zdWJwYXRoPVtbdCxuXV19bGluZVRvKHQsbil7dGhpcy5wYXRoLmxlbmd0aD09PTAmJnRoaXMuc3VicGF0aC5sZW5ndGg9PT0wP3RoaXMucGF0aC5wdXNoKHttZXRob2Q6Im1vdmVUbyIsZGF0YTpbdCxuXX0pOnRoaXMucGF0aC5wdXNoKHttZXRob2Q6ImxpbmVUbyIsZGF0YTpbdCxuXX0pLHRoaXMuc3VicGF0aC5wdXNoKFt0LG5dKX1xdWFkcmF0aWNDdXJ2ZVRvKHQsbixyLGEpe3RoaXMucGF0aC5wdXNoKHttZXRob2Q6InF1YWRyYXRpY0N1cnZlVG8iLGRhdGE6W3QsbixyLGFdfSksdGhpcy5zdWJwYXRoLnB1c2goW3IsYV0pfWJlemllckN1cnZlVG8odCxuLHIsYSx1LGcpe3RoaXMucGF0aC5wdXNoKHttZXRob2Q6ImJlemllckN1cnZlVG8iLGRhdGE6W3QsbixyLGEsdSxnXX0pLHRoaXMuc3VicGF0aC5wdXNoKFt1LGddKX1hcmModCxuLHIsYSx1LGc9ITEpe3RoaXMucGF0aC5wdXNoKHttZXRob2Q6ImFyYyIsZGF0YTpbdCxuLHIsYSx1LGddfSksdGhpcy5zdWJwYXRoLnB1c2goW3Qsbl0pfXJlY3QodCxuLHIsYSl7dGhpcy5wYXRoLnB1c2goe21ldGhvZDoicmVjdCIsZGF0YTpbdCxuLHIsYV19KSx0aGlzLnN1YnBhdGg9W1t0LG5dXX1hcmNUbyh0LG4scixhLHUpe3RoaXMucGF0aC5wdXNoKHttZXRob2Q6ImFyY1RvIixkYXRhOlt0LG4scixhLHVdfSksdGhpcy5zdWJwYXRoLnB1c2goW3IsYV0pfWNsaXAoKXt0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOiJjbGlwIixkYXRhOlsuLi50aGlzLnBhdGhdfSl9Y2xvc2VQYXRoKCl7dGhpcy5wYXRoLnB1c2goe21ldGhvZDoiY2xvc2VQYXRoIixkYXRhOltdfSksdGhpcy5zdWJwYXRoLmxlbmd0aCYmKHRoaXMuc3VicGF0aD1bdGhpcy5zdWJwYXRoLnNoaWZ0KCldKX1jbGVhckFjdGlvbnMoKXt0aGlzLmFjdGlvbnM9W10sdGhpcy5wYXRoPVtdLHRoaXMuc3VicGF0aD1bXX1nZXRBY3Rpb25zKCl7dmFyIHQ9Wy4uLnRoaXMuYWN0aW9uc107cmV0dXJuIHRoaXMuY2xlYXJBY3Rpb25zKCksdH1zZXQgbGluZURhc2hPZmZzZXQodCl7dGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDoic2V0TGluZURhc2hPZmZzZXQiLGRhdGE6W3RdfSl9c2V0IGdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbih0KXt0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOiJzZXRHbG9iYWxDb21wb3NpdGVPcGVyYXRpb24iLGRhdGE6W3RdfSl9c2V0IHNoYWRvd0JsdXIodCl7dGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDoic2V0U2hhZG93Qmx1ciIsZGF0YTpbdF19KX1zZXQgc2hhZG93Q29sb3IodCl7dGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDoic2V0U2hhZG93Q29sb3IiLGRhdGE6W3RdfSl9c2V0IHNoYWRvd09mZnNldFgodCl7dGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDoic2V0U2hhZG93T2Zmc2V0WCIsZGF0YTpbdF19KX1zZXQgc2hhZG93T2Zmc2V0WSh0KXt0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOiJzZXRTaGFkb3dPZmZzZXRZIixkYXRhOlt0XX0pfXNldCBmb250KHQpe3ZhciBuPXRoaXM7dGhpcy5zdGF0ZS5mb250PXQ7dmFyIHI9dC5tYXRjaCgvXigoW1x3XC1dK1xzKSopKFxkK1wuP1xkKnI/cHgpKFwvKFxkK1wuP1xkKihyP3B4KT8pKT9ccysoLiopLyk7aWYocil7dmFyIGE9clsxXS50cmltKCkuc3BsaXQoL1xzLyksdT1wYXJzZUZsb2F0KHJbM10pLGc9cls3XSx5PVtdO2EuZm9yRWFjaChmdW5jdGlvbihPLHgpe1siaXRhbGljIiwib2JsaXF1ZSIsIm5vcm1hbCJdLmluZGV4T2YoTyk+LTE/KHkucHVzaCh7bWV0aG9kOiJzZXRGb250U3R5bGUiLGRhdGE6W09dfSksbi5zdGF0ZS5mb250U3R5bGU9Tyk6WyJib2xkIiwibm9ybWFsIiwibGlnaHRlciIsImJvbGRlciJdLmluZGV4T2YoTyk+LTF8fC9eXGQrJC8udGVzdChPKT8oeS5wdXNoKHttZXRob2Q6InNldEZvbnRXZWlnaHQiLGRhdGE6W09dfSksbi5zdGF0ZS5mb250V2VpZ2h0PU8pOng9PT0wPyh5LnB1c2goe21ldGhvZDoic2V0Rm9udFN0eWxlIixkYXRhOlsibm9ybWFsIl19KSxuLnN0YXRlLmZvbnRTdHlsZT0ibm9ybWFsIik6eD09PTEmJk0oKX0pLGEubGVuZ3RoPT09MSYmTSgpLGE9eS5tYXAoZnVuY3Rpb24oTyl7cmV0dXJuIE8uZGF0YVswXX0pLmpvaW4oIiAiKSx0aGlzLnN0YXRlLmZvbnRTaXplPXUsdGhpcy5zdGF0ZS5mb250RmFtaWx5PWcsdGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDoic2V0Rm9udCIsZGF0YTpbYCR7YX0gJHt1fXB4ICR7Z31gXX0pfWVsc2UgY29uc29sZS53YXJuKCJGYWlsZWQgdG8gc2V0ICdmb250JyBvbiAnQ2FudmFzQ29udGV4dCc6IGludmFsaWQgZm9ybWF0LiIpO2Z1bmN0aW9uIE0oKXt5LnB1c2goe21ldGhvZDoic2V0Rm9udFdlaWdodCIsZGF0YTpbIm5vcm1hbCJdfSksbi5zdGF0ZS5mb250V2VpZ2h0PSJub3JtYWwifX1nZXQgZm9udCgpe3JldHVybiB0aGlzLnN0YXRlLmZvbnR9c2V0IGZpbGxTdHlsZSh0KXt0aGlzLnNldEZpbGxTdHlsZSh0KX1zZXQgc3Ryb2tlU3R5bGUodCl7dGhpcy5zZXRTdHJva2VTdHlsZSh0KX1zZXQgZ2xvYmFsQWxwaGEodCl7dD1NYXRoLmZsb29yKDI1NSpwYXJzZUZsb2F0KHQpKSx0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOiJzZXRHbG9iYWxBbHBoYSIsZGF0YTpbdF19KX1zZXQgdGV4dEFsaWduKHQpe3RoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6InNldFRleHRBbGlnbiIsZGF0YTpbdF19KX1zZXQgbGluZUNhcCh0KXt0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOiJzZXRMaW5lQ2FwIixkYXRhOlt0XX0pfXNldCBsaW5lSm9pbih0KXt0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOiJzZXRMaW5lSm9pbiIsZGF0YTpbdF19KX1zZXQgbGluZVdpZHRoKHQpe3RoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6InNldExpbmVXaWR0aCIsZGF0YTpbdF19KX1zZXQgbWl0ZXJMaW1pdCh0KXt0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOiJzZXRNaXRlckxpbWl0IixkYXRhOlt0XX0pfXNldCB0ZXh0QmFzZWxpbmUodCl7dGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDoic2V0VGV4dEJhc2VsaW5lIixkYXRhOlt0XX0pfX1sZXQgc2I9bmUub25jZSgoKT0+e1suLi5lYiwuLi50Yl0uZm9yRWFjaChmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe3N3aXRjaChuKXtjYXNlImZpbGwiOmNhc2Uic3Ryb2tlIjpyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOm4rIlBhdGgiLGRhdGE6Wy4uLnRoaXMucGF0aF19KX07Y2FzZSJmaWxsUmVjdCI6cmV0dXJuIGZ1bmN0aW9uKHIsYSx1LGcpe3RoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6ImZpbGxQYXRoIixkYXRhOlt7bWV0aG9kOiJyZWN0IixkYXRhOltyLGEsdSxnXX1dfSl9O2Nhc2Uic3Ryb2tlUmVjdCI6cmV0dXJuIGZ1bmN0aW9uKHIsYSx1LGcpe3RoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6InN0cm9rZVBhdGgiLGRhdGE6W3ttZXRob2Q6InJlY3QiLGRhdGE6W3IsYSx1LGddfV19KX07Y2FzZSJmaWxsVGV4dCI6Y2FzZSJzdHJva2VUZXh0IjpyZXR1cm4gZnVuY3Rpb24ocixhLHUsZyl7dmFyIHk9W3IudG9TdHJpbmcoKSxhLHVdO3R5cGVvZiBnPT0ibnVtYmVyIiYmeS5wdXNoKGcpLHRoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6bixkYXRhOnl9KX07Y2FzZSJkcmF3SW1hZ2UiOnJldHVybiBmdW5jdGlvbihyLGEsdSxnLHksTSxPLHgsaGUpe2hlPT09dm9pZCAwJiYoTT1hLE89dSx4PWcsaGU9eSxhPXZvaWQgMCx1PXZvaWQgMCxnPXZvaWQgMCx5PXZvaWQgMCk7dmFyIGJlO2Z1bmN0aW9uIFBlKGd0KXtyZXR1cm4gdHlwZW9mIGd0PT0ibnVtYmVyIn1iZT1QZShhKSYmUGUodSkmJlBlKGcpJiZQZSh5KT9bcixNLE8seCxoZSxhLHUsZyx5XTpQZSh4KSYmUGUoaGUpP1tyLE0sTyx4LGhlXTpbcixNLE9dLHRoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6bixkYXRhOmJlfSl9O2RlZmF1bHQ6cmV0dXJuIGZ1bmN0aW9uKC4uLnIpe3RoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6bixkYXRhOnJ9KX19fUxjLnByb3RvdHlwZVtlXT10KGUpfSksbmIuZm9yRWFjaChmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe3N3aXRjaChuKXtjYXNlInNldEZpbGxTdHlsZSI6Y2FzZSJzZXRTdHJva2VTdHlsZSI6cmV0dXJuIGZ1bmN0aW9uKHIpe3R5cGVvZiByIT0ib2JqZWN0Ij90aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOm4sZGF0YTpbIm5vcm1hbCIsYmYocildfSk6dGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDpuLGRhdGE6W3IudHlwZSxyLmRhdGEsci5jb2xvclN0b3BdfSl9O2Nhc2Uic2V0R2xvYmFsQWxwaGEiOnJldHVybiBmdW5jdGlvbihyKXtyPU1hdGguZmxvb3IoMjU1KnBhcnNlRmxvYXQocikpLHRoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6bixkYXRhOltyXX0pfTtjYXNlInNldFNoYWRvdyI6cmV0dXJuIGZ1bmN0aW9uKHIsYSx1LGcpe2c9YmYoZyksdGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDpuLGRhdGE6W3IsYSx1LGddfSksdGhpcy5zdGF0ZS5zaGFkb3dCbHVyPXUsdGhpcy5zdGF0ZS5zaGFkb3dDb2xvcj1nLHRoaXMuc3RhdGUuc2hhZG93T2Zmc2V0WD1yLHRoaXMuc3RhdGUuc2hhZG93T2Zmc2V0WT1hfTtjYXNlInNldExpbmVEYXNoIjpyZXR1cm4gZnVuY3Rpb24ocixhKXtyPXJ8fFswLDBdLGE9YXx8MCx0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOm4sZGF0YTpbcixhXX0pLHRoaXMuc3RhdGUubGluZURhc2g9cn07Y2FzZSJzZXRGb250U2l6ZSI6cmV0dXJuIGZ1bmN0aW9uKHIpe3RoaXMuc3RhdGUuZm9udD10aGlzLnN0YXRlLmZvbnQucmVwbGFjZSgvXGQrXC4/XGQqcHgvLHIrInB4IiksdGhpcy5zdGF0ZS5mb250U2l6ZT1yLHRoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6bixkYXRhOltyXX0pfTtkZWZhdWx0OnJldHVybiBmdW5jdGlvbiguLi5yKXt0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOm4sZGF0YTpyfSl9fX1MYy5wcm90b3R5cGVbZV09dChlKX0pfSksbGI9TXQoRl8sKGUsdCk9PntpZihzYigpLHQpcmV0dXJuIG5ldyBMYyhlLEFuKHQpKTtsZXQgbj1Bbih2cigpKTtpZihuKXJldHVybiBuZXcgTGMoZSxuKTtzdC5lbWl0KG5lLk9OX0VSUk9SLCJjcmVhdGVDYW52YXNDb250ZXh0OmZhaWwiKX0sVl8pLGNiPVRlKHFfLCh7Y2FudmFzSWQ6ZSx4OnQseTpuLHdpZHRoOnIsaGVpZ2h0OmF9LHtyZXNvbHZlOnUscmVqZWN0Omd9KT0+e2xldCB5PUFuKHZyKCkpO2lmKCF5KXtnKCk7cmV0dXJufWZ1bmN0aW9uIE0oTyl7aWYoTy5lcnJNc2cmJk8uZXJyTXNnLmluZGV4T2YoImZhaWwiKSE9PS0xKXtnKCIiLE8pO3JldHVybn1sZXQgeD1PLmRhdGE7eCYmeC5sZW5ndGgmJihPLmNvbXByZXNzZWQmJih4PWRoLmluZmxhdGVSYXcoeCkpLE8uZGF0YT1uZXcgVWludDhDbGFtcGVkQXJyYXkoeCkpLGRlbGV0ZSBPLmNvbXByZXNzZWQsdShPKX1mdShlLHksImdldEltYWdlRGF0YSIse3g6dCx5Om4sd2lkdGg6cixoZWlnaHQ6YX0sTSl9LFRoLEFoKSx1Yj1UZShZXywoe2NhbnZhc0lkOmUsZGF0YTp0LHg6bix5OnIsd2lkdGg6YSxoZWlnaHQ6dX0se3Jlc29sdmU6ZyxyZWplY3Q6eX0pPT57dmFyIE09QW4odnIoKSk7aWYoIU0pe3koKTtyZXR1cm59bGV0IE8seD0oKT0+e2Z1KGUsTSwicHV0SW1hZ2VEYXRhIix7ZGF0YTp0LHg6bix5OnIsd2lkdGg6YSxoZWlnaHQ6dSxjb21wcmVzc2VkOk99LGhlPT57aWYoaGUuZXJyTXNnJiZoZS5lcnJNc2cuaW5kZXhPZigiZmFpbCIpIT09LTEpe3koKTtyZXR1cm59ZyhoZSl9KX07cy5vcy5uYW1lIT09ImlPUyJ8fHR5cGVvZiBfX1dFRVhfREVWVE9PTF9fPT0iYm9vbGVhbiI/KHQ9ZGguZGVmbGF0ZVJhdyh0LHt0bzoic3RyaW5nIn0pLE89ITApOnQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkseCgpfSxKXyxLXyksZmI9VGUoWl8sKHt4OmU9MCx5OnQ9MCx3aWR0aDpuLGhlaWdodDpyLGRlc3RXaWR0aDphLGRlc3RIZWlnaHQ6dSxjYW52YXNJZDpnLGZpbGVUeXBlOnkscXVhbGl0eTpNfSx7cmVzb2x2ZTpPLHJlamVjdDp4fSk9Pnt2YXIgaGU9QW4odnIoKSk7aWYoIWhlKXt4KCk7cmV0dXJufWxldCBiZT1gJHthYigpfS9jYW52YXNgO2Z1KGcsaGUsInRvVGVtcEZpbGVQYXRoIix7eDplLHk6dCx3aWR0aDpuLGhlaWdodDpyLGRlc3RXaWR0aDphLGRlc3RIZWlnaHQ6dSxmaWxlVHlwZTp5LHF1YWxpdHk6TSxkaXJuYW1lOmJlfSxQZT0+e2lmKFBlLmVyck1zZyYmUGUuZXJyTXNnLmluZGV4T2YoImZhaWwiKSE9PS0xKXt4KCIiLFBlKTtyZXR1cm59TyhQZSl9KX0sUV8sWF8pLEloPVsib25DYW5wbGF5Iiwib25QbGF5Iiwib25QYXVzZSIsIm9uU3RvcCIsIm9uRW5kZWQiLCJvblRpbWVVcGRhdGUiLCJvbkVycm9yIiwib25XYWl0aW5nIiwib25TZWVraW5nIiwib25TZWVrZWQiXSxkYj1bIm9mZkNhbnBsYXkiLCJvZmZQbGF5Iiwib2ZmUGF1c2UiLCJvZmZTdG9wIiwib2ZmRW5kZWQiLCJvZmZUaW1lVXBkYXRlIiwib2ZmRXJyb3IiLCJvZmZXYWl0aW5nIiwib2ZmU2Vla2luZyIsIm9mZlNlZWtlZCJdLGhiPXt0aHJlc2hvbGRzOlswXSxpbml0aWFsUmF0aW86MCxvYnNlcnZlQWxsOiExfSxnYj1bInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCJdLHBiPTE7ZnVuY3Rpb24ga2goZT17fSl7cmV0dXJuIGdiLm1hcCh0PT5gJHtOdW1iZXIoZVt0XSl8fDB9cHhgKS5qb2luKCIgIil9Y2xhc3MgUmh7Y29uc3RydWN0b3IodCxuKXt0aGlzLl9wYWdlSWQ9QW4odCksdGhpcy5fY29tcG9uZW50PXQsdGhpcy5fb3B0aW9ucz1HLmV4dGVuZCh7fSxoYixuKX1yZWxhdGl2ZVRvKHQsbil7cmV0dXJuIHRoaXMuX29wdGlvbnMucmVsYXRpdmVUb1NlbGVjdG9yPXQsdGhpcy5fb3B0aW9ucy5yb290TWFyZ2luPWtoKG4pLHRoaXN9cmVsYXRpdmVUb1ZpZXdwb3J0KHQpe3JldHVybiB0aGlzLl9vcHRpb25zLnJlbGF0aXZlVG9TZWxlY3Rvcj12b2lkIDAsdGhpcy5fb3B0aW9ucy5yb290TWFyZ2luPWtoKHQpLHRoaXN9b2JzZXJ2ZSh0LG4peyFHLmlzRnVuY3Rpb24obil8fCh0aGlzLl9vcHRpb25zLnNlbGVjdG9yPXQsdGhpcy5fcmVxSWQ9cGIrKyxpcih7cmVxSWQ6dGhpcy5fcmVxSWQsY29tcG9uZW50OnRoaXMuX2NvbXBvbmVudCxvcHRpb25zOnRoaXMuX29wdGlvbnMsY2FsbGJhY2s6bn0sdGhpcy5fcGFnZUlkKSl9ZGlzY29ubmVjdCgpe3RoaXMuX3JlcUlkJiZkcih7cmVxSWQ6dGhpcy5fcmVxSWQsY29tcG9uZW50OnRoaXMuX2NvbXBvbmVudH0sdGhpcy5fcGFnZUlkKX19bGV0IHZiPU10KCJjcmVhdGVJbnRlcnNlY3Rpb25PYnNlcnZlciIsKGUsdCk9PihlPW5lLnJlc29sdmVDb21wb25lbnRJbnN0YW5jZShlKSxlJiYhQW4oZSkmJih0PWUsZT1udWxsKSxlP25ldyBSaChlLHQpOm5ldyBSaCh2cigpLHQpKSksbWI9MTtjbGFzcyB4aHtjb25zdHJ1Y3Rvcih0KXt0aGlzLl9wYWdlSWQ9dC4kcGFnZSYmdC4kcGFnZS5pZCx0aGlzLl9jb21wb25lbnQ9dH1vYnNlcnZlKHQsbil7IUcuaXNGdW5jdGlvbihuKXx8KHRoaXMuX3JlcUlkPW1iKyssUm8oe3JlcUlkOnRoaXMuX3JlcUlkLGNvbXBvbmVudDp0aGlzLl9jb21wb25lbnQsb3B0aW9uczp0LGNhbGxiYWNrOm59LHRoaXMuX3BhZ2VJZCkpfWRpc2Nvbm5lY3QoKXt0aGlzLl9yZXFJZCYmdWkoe3JlcUlkOnRoaXMuX3JlcUlkLGNvbXBvbmVudDp0aGlzLl9jb21wb25lbnR9LHRoaXMuX3BhZ2VJZCl9fWxldCBfYj1NdCgiY3JlYXRlTWVkaWFRdWVyeU9ic2VydmVyIixlPT4oZT1uZS5yZXNvbHZlQ29tcG9uZW50SW5zdGFuY2UoZSksZSYmIUFuKGUpJiYoZT1udWxsKSxlP25ldyB4aChlKTpuZXcgeGgodnIoKSkpKSxiYj0wLHlmPXt9O2Z1bmN0aW9uIHliKGUsdCxuLHIpe2xldCBhPXtvcHRpb25zOnJ9LHU9ciYmKCJzdWNjZXNzImluIHJ8fCJmYWlsImluIHJ8fCJjb21wbGV0ZSJpbiByKTtpZih1KXtsZXQgZz1TdHJpbmcoYmIrKyk7YS5jYWxsYmFja0lkPWcseWZbZ109cn1zdC5pbnZva2VWaWV3TWV0aG9kKGBlZGl0b3IuJHtlfWAse3R5cGU6bixkYXRhOmF9LHQsKHtjYWxsYmFja0lkOmcsZGF0YTp5fSk9Pnt1JiYobmUuY2FsbE9wdGlvbnMoeWZbZ10seSksZGVsZXRlIHlmW2ddKX0pfWNsYXNzIEVie2NvbnN0cnVjdG9yKHQsbil7dGhpcy5pZD10LHRoaXMucGFnZUlkPW59Zm9ybWF0KHQsbil7dGhpcy5fZXhlYygiZm9ybWF0Iix7bmFtZTp0LHZhbHVlOm59KX1pbnNlcnREaXZpZGVyKCl7dGhpcy5fZXhlYygiaW5zZXJ0RGl2aWRlciIpfWluc2VydEltYWdlKHQpe3RoaXMuX2V4ZWMoImluc2VydEltYWdlIix0KX1pbnNlcnRUZXh0KHQpe3RoaXMuX2V4ZWMoImluc2VydFRleHQiLHQpfXNldENvbnRlbnRzKHQpe3RoaXMuX2V4ZWMoInNldENvbnRlbnRzIix0KX1nZXRDb250ZW50cyh0KXt0aGlzLl9leGVjKCJnZXRDb250ZW50cyIsdCl9Y2xlYXIodCl7dGhpcy5fZXhlYygiY2xlYXIiLHQpfXJlbW92ZUZvcm1hdCh0KXt0aGlzLl9leGVjKCJyZW1vdmVGb3JtYXQiLHQpfXVuZG8odCl7dGhpcy5fZXhlYygidW5kbyIsdCl9cmVkbyh0KXt0aGlzLl9leGVjKCJyZWRvIix0KX1ibHVyKHQpe3RoaXMuX2V4ZWMoImJsdXIiLHQpfWdldFNlbGVjdGlvblRleHQodCl7dGhpcy5fZXhlYygiZ2V0U2VsZWN0aW9uVGV4dCIsdCl9c2Nyb2xsSW50b1ZpZXcodCl7dGhpcy5fZXhlYygic2Nyb2xsSW50b1ZpZXciLHQpfV9leGVjKHQsbil7eWIodGhpcy5pZCx0aGlzLnBhZ2VJZCx0LG4pfX1sZXQgU2I9e2NhbnZhczpMYyxtYXA6X2YsdmlkZW86bWYsZWRpdG9yOkVifTtmdW5jdGlvbiBCaChlKXtpZihlJiZlLmNvbnRleHRJbmZvKXtsZXR7aWQ6dCx0eXBlOm4scGFnZTpyfT1lLmNvbnRleHRJbmZvLGE9U2Jbbl07ZS5jb250ZXh0PW5ldyBhKHQsciksZGVsZXRlIGUuY29udGV4dEluZm99fWNsYXNzIEVme2NvbnN0cnVjdG9yKHQsbixyLGEpe3RoaXMuX3NlbGVjdG9yUXVlcnk9dCx0aGlzLl9jb21wb25lbnQ9bix0aGlzLl9zZWxlY3Rvcj1yLHRoaXMuX3NpbmdsZT1hfWJvdW5kaW5nQ2xpZW50UmVjdCh0KXtyZXR1cm4gdGhpcy5fc2VsZWN0b3JRdWVyeS5fcHVzaCh0aGlzLl9zZWxlY3Rvcix0aGlzLl9jb21wb25lbnQsdGhpcy5fc2luZ2xlLHtpZDohMCxkYXRhc2V0OiEwLHJlY3Q6ITAsc2l6ZTohMH0sdCksdGhpcy5fc2VsZWN0b3JRdWVyeX1maWVsZHModCxuKXtyZXR1cm4gdGhpcy5fc2VsZWN0b3JRdWVyeS5fcHVzaCh0aGlzLl9zZWxlY3Rvcix0aGlzLl9jb21wb25lbnQsdGhpcy5fc2luZ2xlLHQsbiksdGhpcy5fc2VsZWN0b3JRdWVyeX1zY3JvbGxPZmZzZXQodCl7cmV0dXJuIHRoaXMuX3NlbGVjdG9yUXVlcnkuX3B1c2godGhpcy5fc2VsZWN0b3IsdGhpcy5fY29tcG9uZW50LHRoaXMuX3NpbmdsZSx7aWQ6ITAsZGF0YXNldDohMCxzY3JvbGxPZmZzZXQ6ITB9LHQpLHRoaXMuX3NlbGVjdG9yUXVlcnl9Y29udGV4dCh0KXtyZXR1cm4gdGhpcy5fc2VsZWN0b3JRdWVyeS5fcHVzaCh0aGlzLl9zZWxlY3Rvcix0aGlzLl9jb21wb25lbnQsdGhpcy5fc2luZ2xlLHtjb250ZXh0OiEwfSx0KSx0aGlzLl9zZWxlY3RvclF1ZXJ5fW5vZGUodCl7cmV0dXJuIHRoaXMuX3NlbGVjdG9yUXVlcnkuX3B1c2godGhpcy5fc2VsZWN0b3IsdGhpcy5fY29tcG9uZW50LHRoaXMuX3NpbmdsZSx7bm9kZTohMH0sdCksdGhpcy5fc2VsZWN0b3JRdWVyeX19Y2xhc3Mgd2J7Y29uc3RydWN0b3IodCl7dGhpcy5fY29tcG9uZW50PXZvaWQgMCx0aGlzLl9wYWdlPXQsdGhpcy5fcXVldWU9W10sdGhpcy5fcXVldWVDYj1bXX1leGVjKHQpe3JldHVybiB1cih0aGlzLl9wYWdlLHRoaXMuX3F1ZXVlLG49PntsZXQgcj10aGlzLl9xdWV1ZUNiO24uZm9yRWFjaCgoYSx1KT0+e0cuaXNBcnJheShhKT9hLmZvckVhY2goQmgpOkJoKGEpO2xldCBnPXJbdV07Ry5pc0Z1bmN0aW9uKGcpJiZnLmNhbGwodGhpcyxhKX0pLEcuaXNGdW5jdGlvbih0KSYmdC5jYWxsKHRoaXMsbil9KSx0aGlzLl9ub2Rlc1JlZn1pbih0KXtyZXR1cm4gdGhpcy5fY29tcG9uZW50PW5lLnJlc29sdmVDb21wb25lbnRJbnN0YW5jZSh0KSx0aGlzfXNlbGVjdCh0KXtyZXR1cm4gdGhpcy5fbm9kZXNSZWY9bmV3IEVmKHRoaXMsdGhpcy5fY29tcG9uZW50LHQsITApfXNlbGVjdEFsbCh0KXtyZXR1cm4gdGhpcy5fbm9kZXNSZWY9bmV3IEVmKHRoaXMsdGhpcy5fY29tcG9uZW50LHQsITEpfXNlbGVjdFZpZXdwb3J0KCl7cmV0dXJuIHRoaXMuX25vZGVzUmVmPW5ldyBFZih0aGlzLG51bGwsIiIsITApfV9wdXNoKHQsbixyLGEsdSl7dGhpcy5fcXVldWUucHVzaCh7Y29tcG9uZW50Om4sc2VsZWN0b3I6dCxzaW5nbGU6cixmaWVsZHM6YX0pLHRoaXMuX3F1ZXVlQ2IucHVzaCh1KX19bGV0IENiPU10KCJjcmVhdGVTZWxlY3RvclF1ZXJ5IixlPT4oZT1uZS5yZXNvbHZlQ29tcG9uZW50SW5zdGFuY2UoZSksZSYmIUFuKGUpJiYoZT1udWxsKSxuZXcgd2IoZXx8dnIoKSkpKSxBYj0iY3JlYXRlQW5pbWF0aW9uIixUYj17Zm9ybWF0QXJnczp7fX0sT2I9e2R1cmF0aW9uOk51bWJlcix0aW1pbmdGdW5jdGlvbjpTdHJpbmcsZGVsYXk6TnVtYmVyLHRyYW5zZm9ybU9yaWdpbjpTdHJpbmd9LFBiPXtkdXJhdGlvbjo0MDAsdGltaW5nRnVuY3Rpb246ImxpbmVhciIsZGVsYXk6MCx0cmFuc2Zvcm1PcmlnaW46IjUwJSA1MCUgMCJ9O2NsYXNzIExoe2NvbnN0cnVjdG9yKHQpe3RoaXMuYWN0aW9ucz1bXSx0aGlzLmN1cnJlbnRUcmFuc2Zvcm09e30sdGhpcy5jdXJyZW50U3RlcEFuaW1hdGVzPVtdLHRoaXMub3B0aW9uPUcuZXh0ZW5kKHt9LFBiLHQpfV9nZXRPcHRpb24odCl7bGV0IG49e3RyYW5zaXRpb246Ry5leHRlbmQoe30sdGhpcy5vcHRpb24sdCksdHJhbnNmb3JtT3JpZ2luOiIifTtyZXR1cm4gbi50cmFuc2Zvcm1PcmlnaW49bi50cmFuc2l0aW9uLnRyYW5zZm9ybU9yaWdpbixkZWxldGUgbi50cmFuc2l0aW9uLnRyYW5zZm9ybU9yaWdpbixufV9wdXNoQW5pbWF0ZXModCxuKXt0aGlzLmN1cnJlbnRTdGVwQW5pbWF0ZXMucHVzaCh7dHlwZTp0LGFyZ3M6bn0pfV9jb252ZXJUeXBlKHQpe3JldHVybiB0LnJlcGxhY2UoL1tBLVpdL2csbj0+YC0ke24udG9Mb3dlckNhc2UoKX1gKX1fZ2V0VmFsdWUodCl7cmV0dXJuIHR5cGVvZiB0PT0ibnVtYmVyIj9gJHt0fXB4YDp0fWV4cG9ydCgpe2xldCB0PXRoaXMuYWN0aW9ucztyZXR1cm4gdGhpcy5hY3Rpb25zPVtdLHthY3Rpb25zOnR9fXN0ZXAodCl7cmV0dXJuIHRoaXMuY3VycmVudFN0ZXBBbmltYXRlcy5mb3JFYWNoKG49PntuLnR5cGUhPT0ic3R5bGUiP3RoaXMuY3VycmVudFRyYW5zZm9ybVtuLnR5cGVdPW46dGhpcy5jdXJyZW50VHJhbnNmb3JtW2Ake24udHlwZX0uJHtuLmFyZ3NbMF19YF09bn0pLHRoaXMuYWN0aW9ucy5wdXNoKHthbmltYXRlczpPYmplY3QudmFsdWVzKHRoaXMuY3VycmVudFRyYW5zZm9ybSksb3B0aW9uOnRoaXMuX2dldE9wdGlvbih0KX0pLHRoaXMuY3VycmVudFN0ZXBBbmltYXRlcz1bXSx0aGlzfX1sZXQgTmI9bmUub25jZSgoKT0+e2xldCBlPVsibWF0cml4IiwibWF0cml4M2QiLCJyb3RhdGUiLCJyb3RhdGUzZCIsInJvdGF0ZVgiLCJyb3RhdGVZIiwicm90YXRlWiIsInNjYWxlIiwic2NhbGUzZCIsInNjYWxlWCIsInNjYWxlWSIsInNjYWxlWiIsInNrZXciLCJza2V3WCIsInNrZXdZIiwidHJhbnNsYXRlIiwidHJhbnNsYXRlM2QiLCJ0cmFuc2xhdGVYIiwidHJhbnNsYXRlWSIsInRyYW5zbGF0ZVoiXSx0PVsib3BhY2l0eSIsImJhY2tncm91bmRDb2xvciJdLG49WyJ3aWR0aCIsImhlaWdodCIsImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSJdO2UuY29uY2F0KHQsbikuZm9yRWFjaChyPT57TGgucHJvdG90eXBlW3JdPWZ1bmN0aW9uKC4uLmEpe3JldHVybiB0LmNvbmNhdChuKS5pbmNsdWRlcyhyKT90aGlzLl9wdXNoQW5pbWF0ZXMoInN0eWxlIixbdGhpcy5fY29udmVyVHlwZShyKSxuLmluY2x1ZGVzKHIpP3RoaXMuX2dldFZhbHVlKGFbMF0pOmFbMF1dKTp0aGlzLl9wdXNoQW5pbWF0ZXMocixhKSx0aGlzfX0pfSksSWI9TXQoQWIsZT0+KE5iKCksbmV3IExoKGUpKSxPYixUYiksTWg9Im9uVGFiQmFyTWlkQnV0dG9uVGFwIixrYj1EbihNaCwoKT0+e30pLFJiPSJvbldpbmRvd1Jlc2l6ZSIseGI9Im9mZldpbmRvd1Jlc2l6ZSIsQmI9RG4oUmIsKCk9Pnt9KSxMYj1acih4YiwoKT0+e30pLERoPSJzZXRMb2NhbGUiLE1iPSJnZXRMb2NhbGUiLEZoPSJvbkxvY2FsZUNoYW5nZSIsTWM9TXQoTWIsKCk9PntsZXQgZT1BdCh7YWxsb3dEZWZhdWx0OiEwfSk7cmV0dXJuIGUmJmUuJHZtP2UuJHZtLiRsb2NhbGU6cWUoKS5nZXRMb2NhbGUoKX0pLERiPURuKEZoLCgpPT57fSksRmI9TXQoRGgsZT0+e2xldCB0PUF0KCk7cmV0dXJuIHQmJnQuJHZtLiRsb2NhbGUhPT1lPyh0LiR2bS4kbG9jYWxlPWUsWm4oKS5mb3JFYWNoKGE9PntzdC5wdWJsaXNoSGFuZGxlcihEaCxlLGEuJHBhZ2UuaWQpfSksZi5yZXF1aXJlTW9kdWxlKCJwbHVzIikuc2V0TGFuZ3VhZ2UoZSksc3QuaW52b2tlT25DYWxsYmFjayhGaCx7bG9jYWxlOmV9KSwhMCk6ITF9KSxWYj1UZSgic2V0UGFnZU1ldGEiLChlLHtyZXNvbHZlOnR9KT0+e3QoTm8odnIoKSxlKSl9KSxWaD0iZ2V0U2VsZWN0ZWRUZXh0UmFuZ2UiLFViPVRlKFZoLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e3N0Lmludm9rZVZpZXdNZXRob2QoVmgse30saG8oKSxyPT57dHlwZW9mIHIuZW5kPT0idW5kZWZpbmVkIiYmdHlwZW9mIHIuc3RhcnQ9PSJ1bmRlZmluZWQiP24oIm5vIGZvY3VzZWQiKTp0KHIpfSl9KSxkdT17W25lLk9OX1VOSEFORExFX1JFSkVDVElPTl06W10sW25lLk9OX1BBR0VfTk9UX0ZPVU5EXTpbXSxbbmUuT05fRVJST1JdOltdLFtuZS5PTl9TSE9XXTpbXSxbbmUuT05fSElERV06W119O2Z1bmN0aW9uIERjKGUsdCl7bGV0IG49QXQoe2FsbG93RGVmYXVsdDohMH0pO2lmKG4mJm4uJHZtKXJldHVybiBKdC5pbmplY3RIb29rKGUsdCxuLiR2bS4kKTtkdVtlXS5wdXNoKHQpfWZ1bmN0aW9uICRiKGUpe09iamVjdC5rZXlzKGR1KS5mb3JFYWNoKHQ9PntkdVt0XS5mb3JFYWNoKG49PntKdC5pbmplY3RIb29rKHQsbixlKX0pfSl9ZnVuY3Rpb24gRmMoZSx0KXtsZXQgbj1BdCh7YWxsb3dEZWZhdWx0OiEwfSk7aWYobiYmbi4kdm0pcmV0dXJuIG5sKG4uJHZtLGUsdCk7Ry5yZW1vdmUoZHVbZV0sdCl9ZnVuY3Rpb24gSGIoZSl7RGMobmUuT05fVU5IQU5ETEVfUkVKRUNUSU9OLGUpfWZ1bmN0aW9uIGpiKGUpe0ZjKG5lLk9OX1VOSEFORExFX1JFSkVDVElPTixlKX1mdW5jdGlvbiB6YihlKXtEYyhuZS5PTl9QQUdFX05PVF9GT1VORCxlKX1mdW5jdGlvbiBXYihlKXtGYyhuZS5PTl9QQUdFX05PVF9GT1VORCxlKX1mdW5jdGlvbiBHYihlKXtEYyhuZS5PTl9FUlJPUixlKX1mdW5jdGlvbiBxYihlKXtGYyhuZS5PTl9FUlJPUixlKX1mdW5jdGlvbiBZYihlKXtEYyhuZS5PTl9TSE9XLGUpfWZ1bmN0aW9uIEtiKGUpe0ZjKG5lLk9OX1NIT1csZSl9ZnVuY3Rpb24gSmIoZSl7RGMobmUuT05fSElERSxlKX1mdW5jdGlvbiBaYihlKXtGYyhuZS5PTl9ISURFLGUpfWxldCBYYj1NdCgiZ2V0RW50ZXJPcHRpb25zU3luYyIsKCk9PnllKCkpLFFiPU10KCJnZXRMYXVuY2hPcHRpb25zU3luYyIsKCk9Pk1zKCkpLFZjLFNmLHdmLFVoO2Z1bmN0aW9uICRoKGUpe3RyeXtyZXR1cm4gSlNPTi5wYXJzZShlKX1jYXRjaCh0KXt9cmV0dXJuIGV9ZnVuY3Rpb24gQ2YoZSl7aWYoZS50eXBlPT09ImVuYWJsZWQiKXdmPSEwLFVoPWUub2ZmbGluZTtlbHNlIGlmKGUudHlwZT09PSJjbGllbnRJZCIpVmM9ZS5jaWQsU2Y9ZS5lcnJNc2csSGgoVmMsZS5lcnJNc2cpO2Vsc2UgaWYoZS50eXBlPT09InB1c2hNc2ciKXtsZXQgdD17dHlwZToicmVjZWl2ZSIsZGF0YTokaChlLm1lc3NhZ2UpfTtmb3IobGV0IG49MDtuPEtzLmxlbmd0aCYmKEtzW25dKHQpLCF0LnN0b3BwZWQpO24rKyk7fWVsc2UgZS50eXBlPT09ImNsaWNrIiYmS3MuZm9yRWFjaCh0PT57dCh7dHlwZToiY2xpY2siLGRhdGE6JGgoZS5tZXNzYWdlKX0pfSl9bGV0IEFmPVtdO2Z1bmN0aW9uIEhoKGUsdCl7QWYuZm9yRWFjaChuPT57bihlLHQpfSksQWYubGVuZ3RoPTB9bGV0IGV5PVRlKCJnZXRQdXNoQ2xpZW50SWQiLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2lmKFVoKXtzLnB1c2guZ2V0Q2xpZW50SW5mb0FzeW5jKHI9Pnt0KHtjaWQ6ci5jbGllbnRpZH0pfSxyPT57bihyLmNvZGUrIjogIityLm1lc3NhZ2UpfSk7cmV0dXJufVByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnt0eXBlb2Ygd2Y9PSJ1bmRlZmluZWQiJiYod2Y9ITEsVmM9IiIsU2Y9InVuaVB1c2ggaXMgbm90IGVuYWJsZWQiKSxBZi5wdXNoKChyLGEpPT57cj90KHtjaWQ6cn0pOm4oYSl9KSx0eXBlb2YgVmMhPSJ1bmRlZmluZWQiJiZIaChWYyxTZil9KX0pLEtzPVtdLGpoPSExLHR5PWU9PntLcy5pbmRleE9mKGUpPT09LTEmJktzLnB1c2goZSksamh8fChqaD0hMCxzLnB1c2guYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHQ9PntDZih7dHlwZToiY2xpY2siLG1lc3NhZ2U6dH0pfSkscy5wdXNoLmFkZEV2ZW50TGlzdGVuZXIoInJlY2VpdmUiLHQ9PntDZih7dHlwZToicHVzaE1zZyIsbWVzc2FnZTp0fSl9KSl9LG55PWU9PntpZighZSlLcy5sZW5ndGg9MDtlbHNle2xldCB0PUtzLmluZGV4T2YoZSk7dD4tMSYmS3Muc3BsaWNlKHQsMSl9fSxyeT0iY2FuSVVzZSIsaXk9W3tuYW1lOiJzY2hlbWEiLHR5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfV0sb3k9ImdldEJhY2tncm91bmRBdWRpb01hbmFnZXIiLGF5PSJtYWtlUGhvbmVDYWxsIixzeT17cGhvbmVOdW1iZXI6U3RyaW5nfSxseT0iYWRkUGhvbmVDb250YWN0IixjeT17Zm9ybWF0QXJnczp7Zmlyc3ROYW1lKGUpe2lmKCFlKXJldHVybiJhZGRQaG9uZUNvbnRhY3Q6ZmFpbCBwYXJhbWV0ZXIgZXJyb3I6IHBhcmFtZXRlci5maXJzdE5hbWUgc2hvdWxkIG5vdCBiZSBlbXB0eTsifX19LHV5PXtmaXJzdE5hbWU6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSxwaG90b0ZpbGVQYXRoOlN0cmluZyxuaWNrTmFtZTpTdHJpbmcsbGFzdE5hbWU6U3RyaW5nLG1pZGRsZU5hbWU6U3RyaW5nLHJlbWFyazpTdHJpbmcsbW9iaWxlUGhvbmVOdW1iZXI6U3RyaW5nLHdlQ2hhdE51bWJlcjpTdHJpbmcsYWRkcmVzc0NvdW50cnk6U3RyaW5nLGFkZHJlc3NTdGF0ZTpTdHJpbmcsYWRkcmVzc0NpdHk6U3RyaW5nLGFkZHJlc3NTdHJlZXQ6U3RyaW5nLGFkZHJlc3NQb3N0YWxDb2RlOlN0cmluZyxvcmdhbml6YXRpb246U3RyaW5nLHRpdGxlOlN0cmluZyx3b3JrRmF4TnVtYmVyOlN0cmluZyx3b3JrUGhvbmVOdW1iZXI6U3RyaW5nLGhvc3ROdW1iZXI6U3RyaW5nLGVtYWlsOlN0cmluZyx1cmw6U3RyaW5nLHdvcmtBZGRyZXNzQ291bnRyeTpTdHJpbmcsd29ya0FkZHJlc3NTdGF0ZTpTdHJpbmcsd29ya0FkZHJlc3NDaXR5OlN0cmluZyx3b3JrQWRkcmVzc1N0cmVldDpTdHJpbmcsd29ya0FkZHJlc3NQb3N0YWxDb2RlOlN0cmluZyxob21lRmF4TnVtYmVyOlN0cmluZyxob21lUGhvbmVOdW1iZXI6U3RyaW5nLGhvbWVBZGRyZXNzQ291bnRyeTpTdHJpbmcsaG9tZUFkZHJlc3NTdGF0ZTpTdHJpbmcsaG9tZUFkZHJlc3NDaXR5OlN0cmluZyxob21lQWRkcmVzc1N0cmVldDpTdHJpbmcsaG9tZUFkZHJlc3NQb3N0YWxDb2RlOlN0cmluZ30sZnk9ImdldENsaXBib2FyZERhdGEiLGR5PSJzZXRDbGlwYm9hcmREYXRhIixoeT17Zm9ybWF0QXJnczp7c2hvd1RvYXN0OiEwfSxiZWZvcmVJbnZva2UoKXtPbygpfSxiZWZvcmVTdWNjZXNzKGUsdCl7aWYoIXQuc2hvd1RvYXN0KXJldHVybjtsZXR7dDpufT1xZSgpLHI9bigidW5pLnNldENsaXBib2FyZERhdGEuc3VjY2VzcyIpO3ImJlIuc2hvd1RvYXN0KHt0aXRsZTpyLGljb246InN1Y2Nlc3MiLG1hc2s6ITF9KX19LGd5PXtkYXRhOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sc2hvd1RvYXN0Ont0eXBlOkJvb2xlYW59fSx6aD0ib25BY2NlbGVyb21ldGVyIixweT0ib2ZmQWNjZWxlcm9tZXRlciIsdnk9InN0YXJ0QWNjZWxlcm9tZXRlciIsbXk9InN0b3BBY2NlbGVyb21ldGVyIixXaD0ib25Db21wYXNzIixfeT0ib2ZmQ29tcGFzcyIsYnk9InN0YXJ0Q29tcGFzcyIseXk9InN0b3BDb21wYXNzIixFeT0idmlicmF0ZVNob3J0IixTeT0idmlicmF0ZUxvbmciLEdoPSJvbkJsdWV0b290aERldmljZUZvdW5kIixxaD0ib25CbHVldG9vdGhBZGFwdGVyU3RhdGVDaGFuZ2UiLFloPSJvbkJMRUNvbm5lY3Rpb25TdGF0ZUNoYW5nZSIsS2g9Im9uQkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZUNoYW5nZSIsd3k9InN0YXJ0Qmx1ZXRvb3RoRGV2aWNlc0Rpc2NvdmVyeSIsQ3k9e3NlcnZpY2VzOkFycmF5LGFsbG93RHVwbGljYXRlc0tleTpCb29sZWFuLGludGVydmFsOk51bWJlcn0sQXk9ImdldENvbm5lY3RlZEJsdWV0b290aERldmljZXMiLFR5PXtzZXJ2aWNlczp7dHlwZTpBcnJheSxyZXF1aXJlZDohMH19LE95PSJjcmVhdGVCTEVDb25uZWN0aW9uIixQeT17ZGV2aWNlSWQ6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfX0sTnk9ImNsb3NlQkxFQ29ubmVjdGlvbiIsSXk9e2RldmljZUlkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LGt5PSJnZXRCTEVEZXZpY2VTZXJ2aWNlcyIsUnk9e2RldmljZUlkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LHh5PSJnZXRCTEVEZXZpY2VDaGFyYWN0ZXJpc3RpY3MiLEJ5PXtkZXZpY2VJZDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LHNlcnZpY2VJZDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9fSxMeT0ibm90aWZ5QkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZUNoYW5nZSIsTXk9e2RldmljZUlkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sc2VydmljZUlkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sY2hhcmFjdGVyaXN0aWNJZDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LHN0YXRlOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITB9fSxEeT0icmVhZEJMRUNoYXJhY3RlcmlzdGljVmFsdWUiLEZ5PXtkZXZpY2VJZDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LHNlcnZpY2VJZDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LGNoYXJhY3RlcmlzdGljSWQ6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfX0sVnk9IndyaXRlQkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZSIsVXk9e2RldmljZUlkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sc2VydmljZUlkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sY2hhcmFjdGVyaXN0aWNJZDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LHZhbHVlOnt0eXBlOkFycmF5LHJlcXVpcmVkOiEwfX0sJHk9InNldEJMRU1UVSIsSHk9e2RldmljZUlkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sbXR1Ont0eXBlOk51bWJlcixyZXF1aXJlZDohMH19LGp5PSJnZXRCTEVEZXZpY2VSU1NJIix6eT17ZGV2aWNlSWQ6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfX0sSmg9Im9uQmVhY29uVXBkYXRlIixaaD0ib25CZWFjb25TZXJ2aWNlQ2hhbmdlIixXeT0iZ2V0QmVhY29ucyIsR3k9InN0YXJ0QmVhY29uRGlzY292ZXJ5IixxeT17dXVpZHM6e3R5cGU6QXJyYXkscmVxdWlyZWQ6ITB9fSxZeT0ic3RvcEJlYWNvbkRpc2NvdmVyeSIsS3k9ImdldFNjcmVlbkJyaWdodG5lc3MiLEp5PSJzZXRTY3JlZW5CcmlnaHRuZXNzIixaeT0ic2V0S2VlcFNjcmVlbk9uIixYeT0iY2hlY2tJc1N1cHBvcnRTb3RlckF1dGhlbnRpY2F0aW9uIixReT0iY2hlY2tJc1NvdGVyRW5yb2xsZWRJbkRldmljZSIsZTA9WyJmaW5nZXJQcmludCIsImZhY2lhbCIsInNwZWVjaCJdLHQwPXtmb3JtYXRBcmdzOntjaGVja0F1dGhNb2RlKGUsdCl7aWYoIWV8fCFlMC5pbmNsdWRlcyhlKSlyZXR1cm4iY2hlY2tBdXRoTW9kZSBcdTU4NkJcdTUxOTlcdTk1MTlcdThCRUYifX19LG4wPXtjaGVja0F1dGhNb2RlOlN0cmluZ30scjA9InN0YXJ0U290ZXJBdXRoZW50aWNhdGlvbiIsaTA9e2Zvcm1hdEFyZ3M6e3JlcXVlc3RBdXRoTW9kZXMoZSx0KXtpZighZS5pbmNsdWRlcygiZmluZ2VyUHJpbnQiKSYmIWUuaW5jbHVkZXMoImZhY2lhbCIpKXJldHVybiJyZXF1ZXN0QXV0aE1vZGVzIFx1NTg2Qlx1NTE5OVx1OTUxOVx1OEJFRiJ9fX0sbzA9e3JlcXVlc3RBdXRoTW9kZXM6e3R5cGU6QXJyYXkscmVxdWlyZWQ6ITB9LGNoYWxsZW5nZTpTdHJpbmcsYXV0aENvbnRlbnQ6U3RyaW5nfSxhMD0ic2NhbkNvZGUiLHMwPXtvbmx5RnJvbUNhbWVyYTpCb29sZWFuLHNjYW5UeXBlOkFycmF5LGF1dG9EZWNvZGVDaGFyU2V0OkJvb2xlYW4sc291bmQ6U3RyaW5nLGF1dG9ab29tOkJvb2xlYW59LGwwPVsiZGVmYXVsdCIsIm5vbmUiXSxjMD17Zm9ybWF0QXJnczp7c291bmQoZSx0KXtsMC5pbmNsdWRlcyhlKXx8KHQuc291bmQ9Im5vbmUiKX0sYXV0b1pvb20oZSx0KXt0eXBlb2YgZT09InVuZGVmaW5lZCImJih0LmF1dG9ab29tPSEwKX19fSx1MD0iZ2V0U3lzdGVtU2V0dGluZyIsZjA9ImdldEFwcEF1dGhvcml6ZVNldHRpbmciLGQwPSJvcGVuQXBwQXV0aG9yaXplU2V0dGluZyIsaDA9ImdldFN0b3JhZ2UiLFhoPXtrZXk6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfX0sZzA9ImdldFN0b3JhZ2VTeW5jIixRaD1be25hbWU6ImtleSIsdHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9XSxwMD0ic2V0U3RvcmFnZSIsdjA9e2tleTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LGRhdGE6e3JlcXVpcmVkOiEwfX0sbTA9InNldFN0b3JhZ2VTeW5jIixfMD1be25hbWU6ImtleSIsdHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LHtuYW1lOiJkYXRhIixyZXF1aXJlZDohMH1dLGVnPSJyZW1vdmVTdG9yYWdlIixiMD1YaCx5MD1RaCxFMD0ic2F2ZUZpbGUiLFMwPXtmb3JtYXRBcmdzOnt0ZW1wRmlsZVBhdGgoZSx0KXt0LnRlbXBGaWxlUGF0aD1tbihlKX19fSx3MD17dGVtcEZpbGVQYXRoOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LEMwPSJnZXRTYXZlZEZpbGVMaXN0IixBMD0icmVtb3ZlU2F2ZWRGaWxlIixUMD17Zm9ybWF0QXJnczp7ZmlsZVBhdGgoZSx0KXt0LmZpbGVQYXRoPW1uKGUpfX19LE8wPXtmaWxlUGF0aDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9fSxQMD0iZ2V0RmlsZUluZm8iLE4wPXtmb3JtYXRBcmdzOntmaWxlUGF0aChlLHQpe3QuZmlsZVBhdGg9bW4oZSl9fX0sSTA9e2ZpbGVQYXRoOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LGswPSJnZXRTYXZlZEZpbGVJbmZvIixSMD17Zm9ybWF0QXJnczp7ZmlsZVBhdGgoZSx0KXt0LmZpbGVQYXRoPW1uKGUpfX19LHgwPXtmaWxlUGF0aDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9fSxCMD0ib3BlbkRvY3VtZW50IixMMD17Zm9ybWF0QXJnczp7ZmlsZVBhdGgoZSx0KXt0LmZpbGVQYXRoPW1uKGUpfX19LE0wPXtmaWxlUGF0aDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LGZpbGVUeXBlOlN0cmluZ30sRDA9ImhpZGVLZXlib2FyZCIsRjA9InNob3dLZXlib2FyZCIsVjA9ImNob29zZUxvY2F0aW9uIixVMD17a2V5d29yZDpTdHJpbmcsbGF0aXR1ZGU6TnVtYmVyLGxvbmdpdHVkZTpOdW1iZXJ9LHRnPSJnZXRMb2NhdGlvbiIsbmc9WyJ3Z3M4NCIsImdjajAyIl0sJDA9e2Zvcm1hdEFyZ3M6e3R5cGUoZSx0KXtlPShlfHwiIikudG9Mb3dlckNhc2UoKSxuZy5pbmRleE9mKGUpPT09LTE/dC50eXBlPW5nWzBdOnQudHlwZT1lfSxhbHRpdHVkZShlLHQpe3QuYWx0aXR1ZGU9ZXx8ITF9fX0sSDA9e3R5cGU6U3RyaW5nLGFsdGl0dWRlOkJvb2xlYW59LGowPSJvcGVuTG9jYXRpb24iLHJnPShlLHQpPT57aWYodD09PXZvaWQgMClyZXR1cm5gJHtlfSBzaG91bGQgbm90IGJlIGVtcHR5LmA7aWYodHlwZW9mIHQhPSJudW1iZXIiKXtsZXQgbj10eXBlb2YgdDtyZXR1cm4gbj1uWzBdLnRvVXBwZXJDYXNlKCkrbi5zdWJzdHJpbmcoMSksYEV4cGVjdGVkIE51bWJlciwgZ290ICR7bn0gd2l0aCB2YWx1ZSAke0pTT04uc3RyaW5naWZ5KHQpfS5gfX0sejA9e2Zvcm1hdEFyZ3M6e2xhdGl0dWRlKGUsdCl7bGV0IG49cmcoImxhdGl0dWRlIixlKTtpZihuKXJldHVybiBuO3QubGF0aXR1ZGU9ZX0sbG9uZ2l0dWRlKGUsdCl7bGV0IG49cmcoImxvbmdpdHVkZSIsZSk7aWYobilyZXR1cm4gbjt0LmxvbmdpdHVkZT1lfSxzY2FsZShlLHQpe2U9TWF0aC5mbG9vcihlKSx0LnNjYWxlPWU+PTUmJmU8PTE4P2U6MTh9fX0sVzA9e2xhdGl0dWRlOk51bWJlcixsb25naXR1ZGU6TnVtYmVyLHNjYWxlOk51bWJlcixuYW1lOlN0cmluZyxhZGRyZXNzOlN0cmluZ30sRzA9ImNob29zZUltYWdlIixxMD17Zm9ybWF0QXJnczp7Y291bnQoZSx0KXsoIWV8fGU8PTApJiYodC5jb3VudD05KX0sc2l6ZVR5cGUoZSx0KXt0LnNpemVUeXBlPUluKGUsSHIpfSxzb3VyY2VUeXBlKGUsdCl7dC5zb3VyY2VUeXBlPUluKGUsQ24pfSxleHRlbnNpb24oZSx0KXtpZihlIGluc3RhbmNlb2YgQXJyYXkmJmUubGVuZ3RoPT09MClyZXR1cm4icGFyYW0gZXh0ZW5zaW9uIHNob3VsZCBub3QgYmUgZW1wdHkuIjtlfHwodC5leHRlbnNpb249WyIqIl0pfX19LFkwPXtjb3VudDpOdW1iZXIsc2l6ZVR5cGU6W0FycmF5LFN0cmluZ10sc291cmNlVHlwZTpBcnJheSxleHRlbnNpb246QXJyYXl9LEswPSJjaG9vc2VWaWRlbyIsSjA9e2Zvcm1hdEFyZ3M6e3NvdXJjZVR5cGUoZSx0KXt0LnNvdXJjZVR5cGU9SW4oZSxDbil9LGNvbXByZXNzZWQ6ITAsbWF4RHVyYXRpb246NjAsY2FtZXJhOiJiYWNrIixleHRlbnNpb24oZSx0KXtpZihlIGluc3RhbmNlb2YgQXJyYXkmJmUubGVuZ3RoPT09MClyZXR1cm4icGFyYW0gZXh0ZW5zaW9uIHNob3VsZCBub3QgYmUgZW1wdHkuIjtlfHwodC5leHRlbnNpb249WyIqIl0pfX19LFowPXtzb3VyY2VUeXBlOkFycmF5LGNvbXByZXNzZWQ6Qm9vbGVhbixtYXhEdXJhdGlvbjpOdW1iZXIsY2FtZXJhOlN0cmluZyxleHRlbnNpb246QXJyYXl9LFgwPSJnZXRJbWFnZUluZm8iLFEwPXtmb3JtYXRBcmdzOntzcmMoZSx0KXt0LnNyYz1tbihlKX19fSxlRT17c3JjOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LHRFPSJwcmV2aWV3SW1hZ2UiLG5FPXtmb3JtYXRBcmdzOnt1cmxzKGUsdCl7dC51cmxzPWUubWFwKG49PkcuaXNTdHJpbmcobikmJm4/bW4obik6IiIpfSxjdXJyZW50KGUsdCl7dHlwZW9mIGU9PSJudW1iZXIiP3QuY3VycmVudD1lPjAmJmU8dC51cmxzLmxlbmd0aD9lOjA6Ry5pc1N0cmluZyhlKSYmZSYmKHQuY3VycmVudD1tbihlKSl9fX0sckU9e3VybHM6e3R5cGU6QXJyYXkscmVxdWlyZWQ6ITB9LGN1cnJlbnQ6e3R5cGU6W051bWJlcixTdHJpbmddfX0saUU9ImNsb3NlUHJldmlld0ltYWdlIixvRT0iZ2V0VmlkZW9JbmZvIixhRT17Zm9ybWF0QXJnczp7c3JjKGUsdCl7dC5zcmM9bW4oZSl9fX0sc0U9e3NyYzp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9fSxsRT0ic2F2ZUltYWdlVG9QaG90b3NBbGJ1bSIsY0U9e2Zvcm1hdEFyZ3M6e2ZpbGVQYXRoKGUsdCl7dC5maWxlUGF0aD1tbihlKX19fSx1RT17ZmlsZVBhdGg6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfX0sZkU9InNhdmVWaWRlb1RvUGhvdG9zQWxidW0iLGRFPXtmb3JtYXRBcmdzOntmaWxlUGF0aChlLHQpe3QuZmlsZVBhdGg9bW4oZSl9fX0saEU9e2ZpbGVQYXRoOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LGdFPSJnZXRSZWNvcmRlck1hbmFnZXIiLHBFPSJjb21wcmVzc0ltYWdlIix2RT17Zm9ybWF0QXJnczp7c3JjKGUsdCl7dC5zcmM9bW4oZSl9fX0sbUU9e3NyYzp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9fSxfRT0iY29tcHJlc3NWaWRlbyIsYkU9e2Zvcm1hdEFyZ3M6e3NyYyhlLHQpe3Quc3JjPW1uKGUpfX19LHlFPXtzcmM6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSxxdWFsaXR5OlN0cmluZyxiaXRyYXRlOk51bWJlcixmcHM6TnVtYmVyLHJlc29sdXRpb246TnVtYmVyfSxFRT0icmVxdWVzdCIsU0U9e0pTT046Impzb24ifSx3RT1bInRleHQiLCJhcnJheWJ1ZmZlciJdLENFPSJ0ZXh0IixpZz1lbmNvZGVVUklDb21wb25lbnQ7ZnVuY3Rpb24gQUUoZSx0KXtsZXQgbj1lLnNwbGl0KCIjIikscj1uWzFdfHwiIjtuPW5bMF0uc3BsaXQoIj8iKTtsZXQgYT1uWzFdfHwiIjtlPW5bMF07bGV0IHU9YS5zcGxpdCgiJiIpLmZpbHRlcih5PT55KSxnPXt9O3UuZm9yRWFjaCh5PT57bGV0IE09eS5zcGxpdCgiPSIpO2dbTVswXV09TVsxXX0pO2ZvcihsZXQgeSBpbiB0KWlmKEcuaGFzT3duKHQseSkpe2xldCBNPXRbeV07dHlwZW9mIE09PSJ1bmRlZmluZWQifHxNPT09bnVsbD9NPSIiOkcuaXNQbGFpbk9iamVjdChNKSYmKE09SlNPTi5zdHJpbmdpZnkoTSkpLGdbaWcoeSldPWlnKE0pfXJldHVybiBhPU9iamVjdC5rZXlzKGcpLm1hcCh5PT5gJHt5fT0ke2dbeV19YCkuam9pbigiJiIpLGUrKGE/Ij8iK2E6IiIpKyhyPyIjIityOiIiKX1sZXQgVEU9e21ldGhvZDpTdHJpbmcsZGF0YTpbT2JqZWN0LFN0cmluZyxBcnJheSxBcnJheUJ1ZmZlcl0sdXJsOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0saGVhZGVyOk9iamVjdCxkYXRhVHlwZTpTdHJpbmcscmVzcG9uc2VUeXBlOlN0cmluZyx3aXRoQ3JlZGVudGlhbHM6Qm9vbGVhbn0sT0U9e2Zvcm1hdEFyZ3M6e21ldGhvZChlLHQpe3QubWV0aG9kPXluKChlfHwiIikudG9VcHBlckNhc2UoKSxubil9LGRhdGEoZSx0KXt0LmRhdGE9ZXx8IiJ9LHVybChlLHQpe3QubWV0aG9kPT09bm5bMF0mJkcuaXNQbGFpbk9iamVjdCh0LmRhdGEpJiZPYmplY3Qua2V5cyh0LmRhdGEpLmxlbmd0aCYmKHQudXJsPUFFKGUsdC5kYXRhKSl9LGhlYWRlcihlLHQpe2xldCBuPXQuaGVhZGVyPWV8fHt9O3QubWV0aG9kIT09bm5bMF0mJihPYmplY3Qua2V5cyhuKS5maW5kKHI9PnIudG9Mb3dlckNhc2UoKT09PSJjb250ZW50LXR5cGUiKXx8KG5bIkNvbnRlbnQtVHlwZSJdPSJhcHBsaWNhdGlvbi9qc29uIikpfSxkYXRhVHlwZShlLHQpe3QuZGF0YVR5cGU9KGV8fFNFLkpTT04pLnRvTG93ZXJDYXNlKCl9LHJlc3BvbnNlVHlwZShlLHQpe3QucmVzcG9uc2VUeXBlPShlfHwiIikudG9Mb3dlckNhc2UoKSx3RS5pbmRleE9mKHQucmVzcG9uc2VUeXBlKT09PS0xJiYodC5yZXNwb25zZVR5cGU9Q0UpfX19LFBFPSJjb25maWdNVExTIixORT17Y2VydGlmaWNhdGVzOnt0eXBlOkFycmF5LHJlcXVpcmVkOiEwfX0sSUU9e2Zvcm1hdEFyZ3M6e2NlcnRpZmljYXRlcyhlKXtpZihlLnNvbWUodD0+Ry50b1Jhd1R5cGUodC5ob3N0KSE9PSJTdHJpbmciKSlyZXR1cm4iXHU1M0MyXHU2NTcwXHU5MTREXHU3RjZFXHU5NTE5XHU4QkVGXHVGRjBDXHU4QkY3XHU3ODZFXHU4QkE0XHU1NDBFXHU5MUNEXHU4QkQ1In19fSxrRT0iZG93bmxvYWRGaWxlIixSRT17Zm9ybWF0QXJnczp7aGVhZGVyKGUsdCl7dC5oZWFkZXI9ZXx8e319fX0seEU9e3VybDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LGhlYWRlcjpPYmplY3QsdGltZW91dDpOdW1iZXJ9LEJFPSJ1cGxvYWRGaWxlIixMRT17Zm9ybWF0QXJnczp7ZmlsZVBhdGgoZSx0KXtlJiYodC5maWxlUGF0aD1tbihlKSl9LGhlYWRlcihlLHQpe3QuaGVhZGVyPWV8fHt9fSxmb3JtRGF0YShlLHQpe3QuZm9ybURhdGE9ZXx8e319fX0sTUU9e3VybDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LGZpbGVzOkFycmF5LGZpbGVQYXRoOlN0cmluZyxuYW1lOlN0cmluZyxoZWFkZXI6T2JqZWN0LGZvcm1EYXRhOk9iamVjdCx0aW1lb3V0Ok51bWJlcn0sREU9ImNvbm5lY3RTb2NrZXQiLEZFPXtmb3JtYXRBcmdzOntoZWFkZXIoZSx0KXt0LmhlYWRlcj1lfHx7fX0sbWV0aG9kKGUsdCl7dC5tZXRob2Q9eW4oKGV8fCIiKS50b1VwcGVyQ2FzZSgpLG5uKX0scHJvdG9jb2xzKGUsdCl7Ry5pc1N0cmluZyhlKSYmKHQucHJvdG9jb2xzPVtlXSl9fX0sVkU9e3VybDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LGhlYWRlcjp7dHlwZTpPYmplY3R9LG1ldGhvZDpTdHJpbmcscHJvdG9jb2xzOltBcnJheSxTdHJpbmddfSxVRT0ic2VuZFNvY2tldE1lc3NhZ2UiLCRFPXtkYXRhOltTdHJpbmcsQXJyYXlCdWZmZXJdfSxIRT0iY2xvc2VTb2NrZXQiLGpFPXtjb2RlOk51bWJlcixyZWFzb246U3RyaW5nfSx6RT0ic3RhcnRMb2NhdGlvblVwZGF0ZSIsb2c9Im9uTG9jYXRpb25DaGFuZ2UiLFdFPSJzdG9wTG9jYXRpb25VcGRhdGUiLEdFPSJvZmZMb2NhdGlvbkNoYW5nZSIscUU9Im9mZkxvY2F0aW9uQ2hhbmdlRXJyb3IiLGFnPSJvbkxvY2F0aW9uQ2hhbmdlRXJyb3IiLHNnPVsid2dzODQiLCJnY2owMiJdLFlFPXt0eXBlOlN0cmluZ30sS0U9e2Zvcm1hdEFyZ3M6e3R5cGUoZSx0KXtlPShlfHwiIikudG9Mb3dlckNhc2UoKSxzZy5pbmRleE9mKGUpPT09LTE/dC50eXBlPXNnWzFdOnQudHlwZT1lfX19O2Z1bmN0aW9uIEpFKGUpe2lmKCFHLmlzU3RyaW5nKGUpKXJldHVybiBlO2xldCB0PWUuaW5kZXhPZigiPyIpO2lmKHQ9PT0tMSlyZXR1cm4gZTtsZXQgbj1lLnNsaWNlKHQrMSkudHJpbSgpLnJlcGxhY2UoL14oXD98I3wmKS8sIiIpO2lmKCFuKXJldHVybiBlO2U9ZS5zbGljZSgwLHQpO2xldCByPVtdO3JldHVybiBuLnNwbGl0KCImIikuZm9yRWFjaChhPT57bGV0IHU9YS5yZXBsYWNlKC9cKy9nLCIgIikuc3BsaXQoIj0iKSxnPXUuc2hpZnQoKSx5PXUubGVuZ3RoPjA/dS5qb2luKCI9Iik6IiI7ci5wdXNoKGcrIj0iK2VuY29kZVVSSUNvbXBvbmVudCh5KSl9KSxyLmxlbmd0aD9lKyI/IityLmpvaW4oIiYiKTplfWxldCBaRT1bInNsaWRlLWluLXJpZ2h0Iiwic2xpZGUtaW4tbGVmdCIsInNsaWRlLWluLXRvcCIsInNsaWRlLWluLWJvdHRvbSIsImZhZGUtaW4iLCJ6b29tLW91dCIsInpvb20tZmFkZS1vdXQiLCJwb3AtaW4iLCJub25lIl0sWEU9WyJzbGlkZS1vdXQtcmlnaHQiLCJzbGlkZS1vdXQtbGVmdCIsInNsaWRlLW91dC10b3AiLCJzbGlkZS1vdXQtYm90dG9tIiwiZmFkZS1vdXQiLCJ6b29tLWluIiwiem9vbS1mYWRlLWluIiwicG9wLW91dCIsIm5vbmUiXSxyYz17dXJsOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LFRmPSJuYXZpZ2F0ZVRvIixPZj0icmVkaXJlY3RUbyIsbGc9InJlTGF1bmNoIixodT0ic3dpdGNoVGFiIixRRT0ibmF2aWdhdGVCYWNrIixndT0icHJlbG9hZFBhZ2UiLFBmPSJ1blByZWxvYWRQYWdlIixlUz1HLmV4dGVuZCh7fSxyYyxjZyhaRSkpLHRTPUcuZXh0ZW5kKHtkZWx0YTp7dHlwZTpOdW1iZXJ9fSxjZyhYRSkpLG5TPXJjLHJTPXJjLGlTPXJjLG9TPXJjLGFTPXJjLHNTPWljKFRmKSxsUz1pYyhPZiksY1M9aWMobGcpLHVTPWljKGh1KSxmUz17Zm9ybWF0QXJnczp7ZGVsdGEoZSx0KXtlPXBhcnNlSW50KGUrIiIpfHwxLHQuZGVsdGE9TWF0aC5taW4oWm4oKS5sZW5ndGgtMSxlKX19fSxkUz1pYyhndSksaFM9aWMoUGYpO2Z1bmN0aW9uIGNnKGUpe3JldHVybnthbmltYXRpb25UeXBlOnt0eXBlOlN0cmluZyx2YWxpZGF0b3IodCl7aWYodCYmZS5pbmRleE9mKHQpPT09LTEpcmV0dXJuImAiK3QrImAgaXMgbm90IHN1cHBvcnRlZCBmb3IgYGFuaW1hdGlvblR5cGVgIChzdXBwb3J0ZWQgdmFsdWVzIGFyZTogYCIrZS5qb2luKCJgfGAiKSsiYCkifX0sYW5pbWF0aW9uRHVyYXRpb246e3R5cGU6TnVtYmVyfX19bGV0IHB1O2Z1bmN0aW9uIGdTKCl7cHU9IiJ9ZnVuY3Rpb24gaWMoZSl7cmV0dXJue2Zvcm1hdEFyZ3M6e3VybDpwUyhlKX0sYmVmb3JlQWxsOmdTfX1mdW5jdGlvbiBwUyhlKXtyZXR1cm4gZnVuY3Rpb24obixyKXtpZighbilyZXR1cm4nTWlzc2luZyByZXF1aXJlZCBhcmdzOiAidXJsIic7bj1ybChuKTtsZXQgYT1uLnNwbGl0KCI/IilbMF0sdT15aShhLCEwKTtpZighdSlyZXR1cm4icGFnZSBgIituKyJgIGlzIG5vdCBmb3VuZCI7aWYoZT09PVRmfHxlPT09T2Ype2lmKHUubWV0YS5pc1RhYkJhcilyZXR1cm5gY2FuIG5vdCAke2V9IGEgdGFiYmFyIHBhZ2VgfWVsc2UgaWYoZT09PWh1JiYhdS5tZXRhLmlzVGFiQmFyKXJldHVybiJjYW4gbm90IHN3aXRjaCB0byBuby10YWJCYXIgcGFnZSI7aWYoKGU9PT1odXx8ZT09PWd1KSYmdS5tZXRhLmlzVGFiQmFyJiZyLm9wZW5UeXBlIT09ImFwcExhdW5jaCImJihuPWEpLHUubWV0YS5pc0VudHJ5JiYobj1uLnJlcGxhY2UodS5hbGlhcywiLyIpKSxyLnVybD1KRShuKSxlIT09UGYpe2lmKGU9PT1ndSl7aWYoIXUubWV0YS5pc05WdWUpcmV0dXJuImNhbiBub3QgcHJlbG9hZCB2dWUgcGFnZSI7aWYodS5tZXRhLmlzVGFiQmFyKXtsZXQgZz1abigpLHk9dS5wYXRoLnNsaWNlKDEpO2lmKGcuZmluZChNPT5NLnJvdXRlPT09eSkpcmV0dXJuInRhYkJhciBwYWdlIGAiK3krImAgYWxyZWFkeSBleGlzdHMifXJldHVybn1pZihwdT09PW4mJnIub3BlblR5cGUhPT0iYXBwTGF1bmNoIilyZXR1cm5gJHtwdX0gbG9ja2VkYDtJLnJlYWR5JiYocHU9bil9fX1sZXQgdlM9ImhpZGVMb2FkaW5nIixtUz0iaGlkZVRvYXN0Iix1Zz0ibG9hZEZvbnRGYWNlIixfUz17ZmFtaWx5Ont0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sc291cmNlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sZGVzYzpPYmplY3R9LGJTPVsiI2ZmZmZmZiIsIiMwMDAwMDAiXSx5Uz0ic2V0TmF2aWdhdGlvbkJhckNvbG9yIixFUz17Zm9ybWF0QXJnczp7YW5pbWF0aW9uKGUsdCl7ZXx8KGU9e2R1cmF0aW9uOjAsdGltaW5nRnVuYzoibGluZWFyIn0pLHQuYW5pbWF0aW9uPXtkdXJhdGlvbjplLmR1cmF0aW9ufHwwLHRpbWluZ0Z1bmM6ZS50aW1pbmdGdW5jfHwibGluZWFyIn19fX0sU1M9e2Zyb250Q29sb3I6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwLHZhbGlkYXRvcihlKXtpZihiUy5pbmRleE9mKGUpPT09LTEpcmV0dXJuYGludmFsaWQgZnJvbnRDb2xvciAiJHtlfSJgfX0sYmFja2dyb3VuZENvbG9yOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sYW5pbWF0aW9uOk9iamVjdH0sd1M9InNldE5hdmlnYXRpb25CYXJUaXRsZSIsQ1M9e3RpdGxlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LEFTPSJzaG93TmF2aWdhdGlvbkJhckxvYWRpbmciLFRTPSJoaWRlTmF2aWdhdGlvbkJhckxvYWRpbmciLGZnPSJwYWdlU2Nyb2xsVG8iLE9TPXtzY3JvbGxUb3A6TnVtYmVyLHNlbGVjdG9yOlN0cmluZyxkdXJhdGlvbjpOdW1iZXJ9LFBTPXtmb3JtYXRBcmdzOntkdXJhdGlvbjozMDB9fSxOUz0ic2hvd0FjdGlvblNoZWV0IixJUz17aXRlbUxpc3Q6e3R5cGU6QXJyYXkscmVxdWlyZWQ6ITB9LHRpdGxlOlN0cmluZyxpdGVtQ29sb3I6U3RyaW5nLHBvcG92ZXI6T2JqZWN0fSxrUz17Zm9ybWF0QXJnczp7aXRlbUNvbG9yOiIjMDAwIn19LFJTPSJzaG93TG9hZGluZyIseFM9e3RpdGxlOlN0cmluZyxtYXNrOkJvb2xlYW59LEJTPXtmb3JtYXRBcmdzOnt0aXRsZToiIixtYXNrOiExfX0sTFM9InNob3dNb2RhbCIsTVM9e3RpdGxlOlN0cmluZyxjb250ZW50OlN0cmluZyxzaG93Q2FuY2VsOkJvb2xlYW4sY2FuY2VsVGV4dDpTdHJpbmcsY2FuY2VsQ29sb3I6U3RyaW5nLGNvbmZpcm1UZXh0OlN0cmluZyxjb25maXJtQ29sb3I6U3RyaW5nfSxEUz17YmVmb3JlSW52b2tlKCl7T3IoKX0sZm9ybWF0QXJnczp7dGl0bGU6IiIsY29udGVudDoiIixwbGFjZWhvbGRlclRleHQ6IiIsc2hvd0NhbmNlbDohMCxlZGl0YWJsZTohMSxjYW5jZWxUZXh0KGUsdCl7aWYoIUcuaGFzT3duKHQsImNhbmNlbFRleHQiKSl7bGV0e3Q6bn09cWUoKTt0LmNhbmNlbFRleHQ9bigidW5pLnNob3dNb2RhbC5jYW5jZWwiKX19LGNhbmNlbENvbG9yOiIjMDAwIixjb25maXJtVGV4dChlLHQpe2lmKCFHLmhhc093bih0LCJjb25maXJtVGV4dCIpKXtsZXR7dDpufT1xZSgpO3QuY29uZmlybVRleHQ9bigidW5pLnNob3dNb2RhbC5jb25maXJtIil9fSxjb25maXJtQ29sb3I6bmUuUFJJTUFSWV9DT0xPUn19LEZTPSJzaG93VG9hc3QiLFZTPVsic3VjY2VzcyIsImxvYWRpbmciLCJub25lIiwiZXJyb3IiXSxVUz17dGl0bGU6U3RyaW5nLGljb246U3RyaW5nLGltYWdlOlN0cmluZyxkdXJhdGlvbjpOdW1iZXIsbWFzazpCb29sZWFufSwkUz17Zm9ybWF0QXJnczp7dGl0bGU6IiIsaWNvbihlLHQpe3QuaWNvbj15bihlLFZTKX0saW1hZ2UoZSx0KXtlP3QuaW1hZ2U9bW4oZSk6dC5pbWFnZT0iIn0sZHVyYXRpb246MTUwMCxtYXNrOiExfX0sSFM9InN0YXJ0UHVsbERvd25SZWZyZXNoIixqUz0ic3RvcFB1bGxEb3duUmVmcmVzaCIsVWM9e2luZGV4Ont0eXBlOk51bWJlcixyZXF1aXJlZDohMH19LEpzPXtiZWZvcmVJbnZva2UoKXtsZXQgZT1OcigpO2lmKGUmJiFlLmlzVGFiQmFyKXJldHVybiJub3QgVGFiQmFyIHBhZ2UifSxmb3JtYXRBcmdzOntpbmRleChlKXtpZighSS50YWJCYXIubGlzdFtlXSlyZXR1cm4idGFiYmFyIGl0ZW0gbm90IGZvdW5kIn19fSx6Uz0ic2V0VGFiQmFySXRlbSIsV1M9Ry5leHRlbmQoe3RleHQ6U3RyaW5nLGljb25QYXRoOlN0cmluZyxzZWxlY3RlZEljb25QYXRoOlN0cmluZyxwYWdlUGF0aDpTdHJpbmd9LFVjKSxHUz17YmVmb3JlSW52b2tlOkpzLmJlZm9yZUludm9rZSxmb3JtYXRBcmdzOkcuZXh0ZW5kKHtwYWdlUGF0aChlLHQpe2UmJih0LnBhZ2VQYXRoPW5lLnJlbW92ZUxlYWRpbmdTbGFzaChlKSl9fSxKcy5mb3JtYXRBcmdzKX0scVM9InNldFRhYkJhclN0eWxlIixZUz17Y29sb3I6U3RyaW5nLHNlbGVjdGVkQ29sb3I6U3RyaW5nLGJhY2tncm91bmRDb2xvcjpTdHJpbmcsYmFja2dyb3VuZEltYWdlOlN0cmluZyxiYWNrZ3JvdW5kUmVwZWF0OlN0cmluZyxib3JkZXJTdHlsZTpTdHJpbmd9LEtTPS9eKGxpbmVhcnxyYWRpYWwpLWdyYWRpZW50XCguKz9cKTs/JC8sSlM9e2JlZm9yZUludm9rZTpKcy5iZWZvcmVJbnZva2UsZm9ybWF0QXJnczp7YmFja2dyb3VuZEltYWdlKGUsdCl7ZSYmIUtTLnRlc3QoZSkmJih0LmJhY2tncm91bmRJbWFnZT1tbihlKSl9LGJvcmRlclN0eWxlKGUsdCl7ZSYmKHQuYm9yZGVyU3R5bGU9ZT09PSJ3aGl0ZSI/IndoaXRlIjoiYmxhY2siKX19fSxaUz0iaGlkZVRhYkJhciIsZGc9e2FuaW1hdGlvbjpCb29sZWFufSxYUz0ic2hvd1RhYkJhciIsUVM9ZGcsZXc9ImhpZGVUYWJCYXJSZWREb3QiLHR3PVVjLG53PUpzLHJ3PSJzaG93VGFiQmFyUmVkRG90Iixpdz1VYyxvdz1Kcyxhdz0icmVtb3ZlVGFiQmFyQmFkZ2UiLHN3PVVjLGx3PUpzLGN3PSJzZXRUYWJCYXJCYWRnZSIsdXc9Ry5leHRlbmQoe3RleHQ6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfX0sVWMpLGZ3PXtiZWZvcmVJbnZva2U6SnMuYmVmb3JlSW52b2tlLGZvcm1hdEFyZ3M6Ry5leHRlbmQoe3RleHQoZSx0KXtuZS5nZXRMZW4oZSk+PTQmJih0LnRleHQ9Ii4uLiIpfX0sSnMuZm9ybWF0QXJncyl9LGR3PSJnZXRQcm92aWRlciIsaHc9e3NlcnZpY2U6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfX0sZ3c9ImxvZ2luIixwdz17cHJvdmlkZXI6U3RyaW5nLHNjb3BlczpbU3RyaW5nLEFycmF5XSx0aW1lb3V0Ok51bWJlcix1bml2ZXJpZnlTdHlsZTpPYmplY3Qsb25seUF1dGhvcml6ZTpCb29sZWFufSx2dz0iZ2V0VXNlckluZm8iLG13PXtwcm92aWRlcjpTdHJpbmcsd2l0aENyZWRlbnRpYWxzOkJvb2xlYW4sdGltZW91dDpOdW1iZXIsbGFuZzpTdHJpbmd9LF93PSJnZ2V0VXNlclByb2ZpbGVnZXRVc2VyUHJvZmlsZSIsYnc9e3Byb3ZpZGVyOlN0cmluZyx3aXRoQ3JlZGVudGlhbHM6Qm9vbGVhbix0aW1lb3V0Ok51bWJlcixsYW5nOlN0cmluZ30seXc9InByZUxvZ2luIixFdz17VU5JVkVSSUZZOiJ1bml2ZXJpZnkifSxTdz17Zm9ybWF0QXJnczp7cHJvdmlkZXIoZSx0KXtpZihPYmplY3QudmFsdWVzKEV3KS5pbmRleE9mKFN0cmluZyhlKSk8MClyZXR1cm4icHJvdmlkZXIgZXJyb3IifX19LHd3PXtwcm92aWRlcjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9fSxDdz0iY2xvc2VBdXRoVmlldyIsQXc9ImdldENoZWNrQm94U3RhdGUiLFR3PSJnZXRVbml2ZXJpZnlNYW5hZ2VyIixPdz0ic2hhcmUiLGhnPVsiV1hTY2VuZVNlc3Npb24iLCJXWFNjZW5lVGltZWxpbmUiLCJXWFNjZW5lRmF2b3JpdGUiXSxQdz17Zm9ybWF0QXJnczp7c2NlbmUoZSx0KXtsZXR7cHJvdmlkZXI6bixvcGVuQ3VzdG9tZXJTZXJ2aWNlQ2hhdDpyfT10O2lmKG49PT0id2VpeGluIiYmIXImJighZXx8IWhnLmluY2x1ZGVzKGUpKSlyZXR1cm5gXHU1MjA2XHU0RUFCXHU1MjMwXHU1RkFFXHU0RkUxXHU2NUY2XHVGRjBDc2NlbmVcdTVGQzVcdTk4N0JcdTRFM0FcdTRFRTVcdTRFMEJcdTUxNzZcdTRFMkRcdTRFMDBcdTRFMkFcdUZGMUEke2hnLmpvaW4oIlx1MzAwMSIpfWB9LHN1bW1hcnkoZSx0KXtpZih0LnR5cGU9PT0xJiYhZSlyZXR1cm4iXHU1MjA2XHU0RUFCXHU3RUFGXHU2NTg3XHU2NzJDXHU2NUY2XHVGRjBDc3VtbWFyeVx1NUZDNVx1NTg2QiJ9LGhyZWYoZSx0KXtpZih0LnR5cGU9PT0wJiYhZSlyZXR1cm4iXHU1MjA2XHU0RUFCXHU1NkZFXHU2NTg3XHU2NUY2XHVGRjBDaHJlZlx1NUZDNVx1NTg2QiJ9LGltYWdlVXJsKGUsdCl7aWYoWzAsMiw1XS5pbmNsdWRlcyhOdW1iZXIodC50eXBlKSkmJiFlKXJldHVybiJcdTUyMDZcdTRFQUJcdTU2RkVcdTY1ODdcdTMwMDFcdTdFQUZcdTU2RkVcdTcyNDdcdTMwMDFcdTVDMEZcdTdBMEJcdTVFOEZcdTY1RjZcdUZGMENpbWFnZVVybFx1NUZDNVx1NTg2Qlx1RkYwQ1x1NjNBOFx1ODM1MFx1NEY3Rlx1NzUyOFx1NUMwRlx1NEU4RTIwS2JcdTc2ODRcdTU2RkVcdTcyNDcifSxtZWRpYVVybChlLHQpe2lmKFszLDRdLmluY2x1ZGVzKE51bWJlcih0LnR5cGUpKSYmIWUpcmV0dXJuIlx1NTIwNlx1NEVBQlx1OTdGM1x1NEU1MFx1MzAwMVx1ODlDNlx1OTg5MVx1NjVGNlx1RkYwQ21lZGlhVXJsXHU1RkM1XHU1ODZCIn0sbWluaVByb2dyYW0oZSx0KXtpZih0LnR5cGU9PT01JiYhZSlyZXR1cm4iXHU1MjA2XHU0RUFCXHU1QzBGXHU3QTBCXHU1RThGXHU2NUY2XHVGRjBDbWluaVByb2dyYW1cdTVGQzVcdTU4NkIifSxjb3JwaWQoZSx0KXtpZih0Lm9wZW5DdXN0b21lclNlcnZpY2VDaGF0JiYhZSlyZXR1cm4iXHU0RjdGXHU3NTI4XHU2MjUzXHU1RjAwXHU1QkEyXHU2NzBEXHU1MjlGXHU4MEZEXHU2NUY2IGNvcnBpZCBcdTVGQzVcdTU4NkIifSxjdXN0b21lclVybChlLHQpe2lmKHQub3BlbkN1c3RvbWVyU2VydmljZUNoYXQmJiFlKXJldHVybiJcdTRGN0ZcdTc1MjhcdTYyNTNcdTVGMDBcdTVCQTJcdTY3MERcdTUyOUZcdTgwRkRcdTY1RjYgY3VzdG9tZXJVcmwgXHU1RkM1XHU1ODZCIn19fSxOdz17cHJvdmlkZXI6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSx0eXBlOk51bWJlcix0aXRsZTpTdHJpbmcsc2NlbmU6U3RyaW5nLHN1bW1hcnk6U3RyaW5nLGhyZWY6U3RyaW5nLGltYWdlVXJsOlN0cmluZyxtZWRpYVVybDpTdHJpbmcsbWluaVByb2dyYW06T2JqZWN0fSxJdz0ic2hhcmVXaXRoU3lzdGVtIixnZz1bInRleHQiLCJpbWFnZSJdLGt3PXtmb3JtYXRBcmdzOnt0eXBlKGUsdCl7aWYoZSYmIWdnLmluY2x1ZGVzKGUpKXJldHVybiJcdTUyMDZcdTRFQUJcdTUzQzJcdTY1NzAgdHlwZSBcdTRFMERcdTZCNjNcdTc4NkVcdTMwMDJcdTUzRUFcdTY1MkZcdTYzMDF0ZXh0XHUzMDAxaW1hZ2UiO3QudHlwZT15bihlLGdnKX19fSxSdz17dHlwZTpTdHJpbmcsc3VtbWFyeTpTdHJpbmcsaHJlZjpTdHJpbmcsaW1hZ2VVcmw6U3RyaW5nfSx4dz0icmVxdWVzdFBheW1lbnQiLEJ3PXtwcm92aWRlcjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LG9yZGVySW5mbzp7dHlwZTpbU3RyaW5nLE9iamVjdF0scmVxdWlyZWQ6ITB9LHRpbWVTdGFtcDpTdHJpbmcsbm9uY2VTdHI6U3RyaW5nLHBhY2thZ2U6U3RyaW5nLHNpZ25UeXBlOlN0cmluZyxwYXlTaWduOlN0cmluZ30sTHc9ImNyZWF0ZVB1c2hNZXNzYWdlIixNdz17Zm9ybWF0QXJnczp7Y29udGVudChlKXtpZighZSlyZXR1cm4iY29udGVudCBpcyByZXF1aXJlZCJ9fX0sRHc9ImdldENoYW5uZWxNYW5hZ2VyIixGdz0iY3JlYXRlUmV3YXJkZWRWaWRlb0FkIixWdz17Zm9ybWF0QXJnczp7YWRwaWQ6IiIsYWRVbml0SWQ6IiJ9fSxVdz17YWRwaWQ6U3RyaW5nLGFkVW5pdElkOlN0cmluZ30sJHc9ImNyZWF0ZUZ1bGxTY3JlZW5WaWRlb0FkIixIdz17Zm9ybWF0QXJnczp7YWRwaWQ6IiJ9fSxqdz17YWRwaWQ6U3RyaW5nfSx6dz0iY3JlYXRlSW50ZXJzdGl0aWFsQWQiLFd3PXtmb3JtYXRBcmdzOnthZHBpZDoiIixhZFVuaXRJZDoiIn19LEd3PXthZHBpZDpTdHJpbmcsYWRVbml0SWQ6U3RyaW5nfSxxdz0iY3JlYXRlSW50ZXJhY3RpdmVBZCIsWXc9e2Zvcm1hdEFyZ3M6e2FkcGlkKGUsdCl7aWYoIWUpcmV0dXJuImFkcGlkIHNob3VsZCBub3QgYmUgZW1wdHkuIjtlJiYodC5hZHBpZD1lKX0scHJvdmlkZXIoZSx0KXtpZighZSlyZXR1cm4icHJvdmlkZXIgc2hvdWxkIG5vdCBiZSBlbXB0eS4iO2UmJih0LnByb3ZpZGVyPWUpfX19LEt3PXthZHBpZDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LHByb3ZpZGVyOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19O2Z1bmN0aW9uIHdsKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe2RlbGV0ZSByLmNvZGUsZGVsZXRlIHIubWVzc2FnZSxHLmlzRnVuY3Rpb24odCkmJihyPXQocikpLGUocil9fWZ1bmN0aW9uIENyKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3I9cnx8e30sdD1yLm1lc3NhZ2V8fHR8fCIiLGRlbGV0ZSByLm1lc3NhZ2UsZSh0LEcuZXh0ZW5kKHtjb2RlOjB9LHIpKX19ZnVuY3Rpb24gb2MoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtlKCkoZnVuY3Rpb24ocil7ciYmKGRlbGV0ZSByLmNvZGUsZGVsZXRlIHIubWVzc2FnZSksc3QuaW52b2tlT25DYWxsYmFjayh0LHIpfSl9fWZ1bmN0aW9uIENpKGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24ocix7cmVzb2x2ZTphLHJlamVjdDp1fSl7ZSgpKEcuZXh0ZW5kKHt9LEcuaXNGdW5jdGlvbih0KT90KHIpOnIse3N1Y2Nlc3M6d2woYSxuKSxmYWlsOkNyKHUpfSkpfX1mdW5jdGlvbiAkYyhlPSIiKXtpZighKEkudGFiQmFyJiZHLmlzQXJyYXkoSS50YWJCYXIubGlzdCkpKXJldHVybiExO3RyeXtpZighZSl7bGV0IG49d3QoKTtpZighbi5sZW5ndGgpcmV0dXJuITE7bGV0IHI9bltuLmxlbmd0aC0xXTtyZXR1cm4gcj9rdChyKS5tZXRhLmlzVGFiQmFyOiExfS9eXC8vLnRlc3QoZSl8fChlPW5lLmFkZExlYWRpbmdTbGFzaChlKSk7bGV0IHQ9eWkoZSk7cmV0dXJuIHQmJnQubWV0YS5pc1RhYkJhcn1jYXRjaCh0KXt9cmV0dXJuITF9bGV0IEhhPSJfX1RZUEUiLEp3PSJ1bmktc3RvcmFnZS1rZXlzIjtmdW5jdGlvbiBOZihlKXtsZXQgdD1bIm9iamVjdCIsInN0cmluZyIsIm51bWJlciIsImJvb2xlYW4iLCJ1bmRlZmluZWQiXTt0cnl7bGV0IG49Ry5pc1N0cmluZyhlKT9KU09OLnBhcnNlKGUpOmUscj1uLnR5cGU7aWYodC5pbmRleE9mKHIpPj0wKXtsZXQgYT1PYmplY3Qua2V5cyhuKTtpZihhLmxlbmd0aD09PTImJiJkYXRhImluIG4pe2lmKHR5cGVvZiBuLmRhdGE9PT1yKXJldHVybiBuLmRhdGE7aWYocj09PSJvYmplY3QiJiYvXlxkezR9LVxkezJ9LVxkezJ9VFxkezJ9XDpcZHsyfVw6XGR7Mn1cLlxkezN9WiQvLnRlc3Qobi5kYXRhKSlyZXR1cm4gbmV3IERhdGUobi5kYXRhKX1lbHNlIGlmKGEubGVuZ3RoPT09MSlyZXR1cm4iIn19Y2F0Y2gobil7fX1sZXQgWnc9TXQobTAsKGUsdCk9PntsZXQgbj10eXBlb2YgdCxyPW49PT0ic3RyaW5nIj90OkpTT04uc3RyaW5naWZ5KHt0eXBlOm4sZGF0YTp0fSk7dHJ5e249PT0ic3RyaW5nIiYmTmYocikhPT12b2lkIDA/cy5zdG9yYWdlLnNldEl0ZW0oZStIYSxuKTpzLnN0b3JhZ2UucmVtb3ZlSXRlbShlK0hhKSxzLnN0b3JhZ2Uuc2V0SXRlbShlLHIpfWNhdGNoKGEpe319LF8wKSxYdz1UZShwMCwoe2tleTplLGRhdGE6dH0se3Jlc29sdmU6bixyZWplY3Q6cn0pPT57bGV0IGE9dHlwZW9mIHQsdT1hPT09InN0cmluZyI/dDpKU09OLnN0cmluZ2lmeSh7dHlwZTphLGRhdGE6dH0pO3RyeXtsZXQgZz1zLnN0b3JhZ2U7YT09PSJzdHJpbmciJiZOZih1KSE9PXZvaWQgMD9nLnNldEl0ZW1Bc3luYyhlK0hhLGEsKCk9Pnt9KTpnLnJlbW92ZUl0ZW1Bc3luYyhlK0hhLCgpPT57fSksZy5zZXRJdGVtQXN5bmMoZSx1LG4sQ3IocikpfWNhdGNoKGcpe3IoZy5tZXNzYWdlKX19LHYwKTtmdW5jdGlvbiBJZihlLHQpe2xldCBuPXQ7aWYoZSE9PSJzdHJpbmcifHxlPT09InN0cmluZyImJnQ9PT0neyJ0eXBlIjoidW5kZWZpbmVkIn0nKXRyeXtsZXQgcj1KU09OLnBhcnNlKHQpLGE9TmYocik7aWYoYSE9PXZvaWQgMCluPWE7ZWxzZSBpZihlJiYobj1yLEcuaXNTdHJpbmcocikpKXtyPUpTT04ucGFyc2Uocik7bGV0IHU9dHlwZW9mIHI7dT09PSJudW1iZXIiJiZlPT09ImRhdGUiP249bmV3IERhdGUocik6dT09PShbIm51bGwiLCJhcnJheSJdLmluZGV4T2YoZSk8MD9lOiJvYmplY3QiKSYmKG49cil9fWNhdGNoKHIpe31yZXR1cm4gbn1sZXQgUXc9TXQoZzAsZT0+e2xldCB0PXMuc3RvcmFnZS5nZXRJdGVtKGUpLHI9KHMuc3RvcmFnZS5nZXRJdGVtKGUrSGEpfHwiIikudG9Mb3dlckNhc2UoKTtyZXR1cm4gRy5pc1N0cmluZyh0KT9JZihyLHQpOiIifSxRaCksZUM9VGUoaDAsKHtrZXk6ZX0se3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0IHI9cy5zdG9yYWdlO3IuZ2V0SXRlbUFzeW5jKGUsZnVuY3Rpb24oYSl7ci5nZXRJdGVtQXN5bmMoZStIYSxmdW5jdGlvbih1KXtsZXQgeT0odS5kYXRhfHwiIikudG9Mb3dlckNhc2UoKTt0KHtkYXRhOklmKHksYS5kYXRhKX0pfSxmdW5jdGlvbigpe3Qoe2RhdGE6SWYoIiIsYS5kYXRhKX0pfSl9LENyKG4pKX0sWGgpLHRDPU10KGVnLGU9PntzLnN0b3JhZ2UucmVtb3ZlSXRlbShlK0hhKSxzLnN0b3JhZ2UucmVtb3ZlSXRlbShlKX0seTApLG5DPVRlKGVnLCh7a2V5OmV9LHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e3Muc3RvcmFnZS5yZW1vdmVJdGVtQXN5bmMoZStIYSwoKT0+e30pLHMuc3RvcmFnZS5yZW1vdmVJdGVtQXN5bmMoZSx0LENyKG4pKX0sYjApLHJDPU10KCJjbGVhclN0b3JhZ2VTeW5jIiwoKT0+e3Muc3RvcmFnZS5jbGVhcigpfSksaUM9VGUoImNsZWFyU3RvcmFnZSIsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57cy5zdG9yYWdlLmNsZWFyQXN5bmModCxDcihuKSl9KSxwZz1NdCgiZ2V0U3RvcmFnZUluZm9TeW5jIiwoKT0+e2xldCBlPXMuc3RvcmFnZS5nZXRMZW5ndGgoKXx8MCx0PVtdLG49MDtmb3IobGV0IHI9MDtyPGU7cisrKXtsZXQgYT1zLnN0b3JhZ2Uua2V5KHIpO2lmKGEhPT1KdyYmKGEuaW5kZXhPZihIYSk8MHx8YS5pbmRleE9mKEhhKStIYS5sZW5ndGghPT1hLmxlbmd0aCkpe2xldCB1PXMuc3RvcmFnZS5nZXRJdGVtKGEpO24rPWEubGVuZ3RoK3UubGVuZ3RoLHQucHVzaChhKX19cmV0dXJue2tleXM6dCxjdXJyZW50U2l6ZTpNYXRoLmNlaWwobioyLzEwMjQpLGxpbWl0U2l6ZTpOdW1iZXIuTUFYX1ZBTFVFfX0pLG9DPVRlKCJnZXRTdG9yYWdlSW5mbyIsKGUse3Jlc29sdmU6dH0pPT57dChwZygpKX0pLGFDPVRlKFAwLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e3MuaW8uZ2V0RmlsZUluZm8oRy5leHRlbmQoZSx7c3VjY2Vzczp3bCh0KSxmYWlsOkNyKG4pfSkpfSxJMCxOMCksc0M9MCx2Zz0idW5pYXBwX3NhdmUiLGxDPWBfZG9jLyR7dmd9YDtmdW5jdGlvbiBjQyhlLHQpe3Q9dHx8ZnVuY3Rpb24oKXt9LHMuaW8ucmVxdWVzdEZpbGVTeXN0ZW0ocy5pby5QUklWQVRFX0RPQyxuPT57bi5yb290LmdldERpcmVjdG9yeSh2Zyx7Y3JlYXRlOiEwfSxlLHQpfSx0KX1sZXQgdUM9VGUoRTAsKHt0ZW1wRmlsZVBhdGg6ZX0se3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0IHI9Q3IobiksYT1gJHtEYXRlLm5vdygpfSR7c0MrK30ke2VpKGUpfWA7cy5pby5yZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJMKGUsdT0+e2NDKGc9Pnt1LmNvcHlUbyhnLGEsKCk9PntsZXQgeT1sQysiLyIrYTt0KHtzYXZlZEZpbGVQYXRoOnl9KX0scil9LHIpfSxyKX0sdzAsUzApLGZDPSJ1bmlhcHBfc2F2ZSI7ZnVuY3Rpb24gZEMoZSx0KXt0PXR8fGZ1bmN0aW9uKCl7fSxzLmlvLnJlcXVlc3RGaWxlU3lzdGVtKHMuaW8uUFJJVkFURV9ET0Msbj0+e24ucm9vdC5nZXREaXJlY3RvcnkoZkMse2NyZWF0ZTohMH0sZSx0KX0sdCl9bGV0IGhDPVRlKEMwLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldCByPUNyKG4pO2RDKGE9Pnt2YXIgdT1hLmNyZWF0ZVJlYWRlcigpLGc9W107dS5yZWFkRW50cmllcyh5PT57eSYmeS5sZW5ndGg/eS5mb3JFYWNoKE09PntNLmdldE1ldGFkYXRhKE89PntnLnB1c2goe2ZpbGVQYXRoOnMuaW8uY29udmVydEFic29sdXRlRmlsZVN5c3RlbShNLmZ1bGxQYXRoKSxjcmVhdGVUaW1lOk8ubW9kaWZpY2F0aW9uVGltZS5nZXRUaW1lKCksc2l6ZTpPLnNpemV9KSxnLmxlbmd0aD09PXkubGVuZ3RoJiZ0KHtmaWxlTGlzdDpnfSl9LHIsITEpfSk6dCh7ZmlsZUxpc3Q6Z30pfSxyKX0scil9KSxnQz1UZShrMCwoe2ZpbGVQYXRoOmV9LHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldCByPUNyKG4pO3MuaW8ucmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSTChlLGE9PnthLmdldE1ldGFkYXRhKHU9Pnt0KHtjcmVhdGVUaW1lOnUubW9kaWZpY2F0aW9uVGltZS5nZXRUaW1lKCksc2l6ZTp1LnNpemV9KX0sciwhMSl9LHIpfSx4MCxSMCkscEM9VGUoQTAsKHtmaWxlUGF0aDplfSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1DcihuKTtzLmlvLnJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkwoZSxhPT57YS5yZW1vdmUoKCk9Pnt0KCl9LHIpfSxyKX0sTzAsVDApLHZDPVRlKEIwLCh7ZmlsZVBhdGg6ZSxmaWxlVHlwZTp0fSx7cmVzb2x2ZTpuLHJlamVjdDpyfSk9PntsZXQgYT1DcihyKTtzLnJ1bnRpbWUub3BlbkRvY3VtZW50KG1uKGUpLHZvaWQgMCxuLGEpfSxNMCxMMCksbUM9TXQocnksZT0+ISFHLmhhc093bihSLGUpLGl5KSxIYyxtZz1zLm5hdmlnYXRvci5zZXRTdGF0dXNCYXJTdHlsZTtmdW5jdGlvbiBfQyhlKXttZz1lfWZ1bmN0aW9uIF9nKGUpe0hjPWUsbWcoZSl9cy5uYXZpZ2F0b3Iuc2V0U3RhdHVzQmFyU3R5bGU9X2c7ZnVuY3Rpb24gc3MoZSl7aWYoIWUpe2xldCB0PXpuKCk7aWYoIXR8fChlPWt0KHQpLnN0YXR1c0JhclN0eWxlLCFlfHxlPT09SGMpKXJldHVybn1lIT09SGMmJihIYz1lLHMubmF2aWdhdG9yLnNldFN0YXR1c0JhclN0eWxlKGUpKX1mdW5jdGlvbiBiZyhlKXtzdC5vbihuZS5PTl9USEVNRV9DSEFOR0UsZSl9ZnVuY3Rpb24gYkMoZSl7c3Qub2ZmKG5lLk9OX1RIRU1FX0NIQU5HRSxlKX1mdW5jdGlvbiB5Qygpe3JldHVybiB5ZygpPT09ImRhcmsiPyJsaWdodCI6ImRhcmsifWZ1bmN0aW9uIHlnKCl7cmV0dXJuIHMubmF2aWdhdG9yLmdldFVJU3R5bGUoKX1mdW5jdGlvbiBFQygpe2lmKEkuZGFya21vZGUpe2xldCBlPXlDKCk7c3MoZSksb24oKS5mb3JFYWNoKG49PntrdChuKS5zdGF0dXNCYXJTdHlsZT1lfSl9fWZ1bmN0aW9uIGtmKGUpe2lmKEkuZGFya21vZGUpe2xldCB0PXt9LG49cy5uYXZpZ2F0b3IuZ2V0VUlTdHlsZSgpLHI9amMoKTtyZXR1cm4gciYmci5ob3N0VGhlbWUmJihuPXIuaG9zdFRoZW1lKSx0PW5lLm5vcm1hbGl6ZVN0eWxlcyhlLEkudGhlbWVDb25maWcsbiksdH1yZXR1cm4gZX1mdW5jdGlvbiBTQyhlLHQpe2lmKEkuZGFya21vZGUpe2xldCBuPSgpPT57bGV0e2xpc3Q6cj1bXSxjb2xvcjphLHNlbGVjdGVkQ29sb3I6dSxiYWNrZ3JvdW5kQ29sb3I6Zyxib3JkZXJTdHlsZTp5LG1pZEJ1dHRvbjpNfT1rZih0KTtlJiYoZS5zZXRUYWJCYXJTdHlsZSh7Y29sb3I6YSxzZWxlY3RlZENvbG9yOnUsYmFja2dyb3VuZENvbG9yOmcsYm9yZGVyU3R5bGU6eSxtaWRCdXR0b246TX0pLGUuc2V0VGFiQmFySXRlbXMoe2xpc3Q6ci5tYXAoTz0+KHtpY29uUGF0aDpPLmljb25QYXRoLHNlbGVjdGVkSWNvblBhdGg6Ty5zZWxlY3RlZEljb25QYXRoLHZpc2libGU6Ty52aXNpYmxlfSkpfSkpfTtuKCksYmcobil9fWZ1bmN0aW9uIEVnKGUsdCl7aWYoSS5kYXJrbW9kZSl7bGV0IG49KCk9PntsZXQgcj10KCk7ci5hbmltYXRpb25BbHBoYUJHQ29sb3Isci5iYWNrZ3JvdW5kLHIuYmFja2dyb3VuZENvbG9yQm90dG9tLHIuYmFja2dyb3VuZENvbG9yVG9wO3ZhciBhPXIudGl0bGVOVmlldzt0eXBlb2YgYSE9InVuZGVmaW5lZCImJnR5cGVvZiBhPT0ib2JqZWN0IiYmKGEuYmFja2dyb3VuZENvbG9yLGEudGl0bGVDb2xvciksZSYmZS5zZXRTdHlsZShyKX07YmcobiksZS5hZGRFdmVudExpc3RlbmVyKCJjbG9zZSIsKCk9PmJDKG4pKX19bGV0IENsLFJmPSEwLHNyO2Z1bmN0aW9uIHdDKGUsdCxuKXshc3J8fChlPT09Im5vbmUiPyhzci5oaWRlVGFiQmFyUmVkRG90KHtpbmRleDp0fSksc3IucmVtb3ZlVGFiQmFyQmFkZ2Uoe2luZGV4OnR9KSk6ZT09PSJ0ZXh0Ij9zci5zZXRUYWJCYXJCYWRnZSh7aW5kZXg6dCx0ZXh0Om59KTplPT09InJlZERvdCImJnNyLnNob3dUYWJCYXJSZWREb3Qoe2luZGV4OnR9KSl9ZnVuY3Rpb24gQ0MoZSl7c3ImJnNyLnNldFRhYkJhckl0ZW1zKGUpfWZ1bmN0aW9uIEFDKGUsdCxuLHIsYSx1KXtsZXQgZz17aW5kZXg6ZX07aWYodCE9PXZvaWQgMCYmKGcudGV4dD10KSxuJiYoZy5pY29uUGF0aD1tbihuKSksciYmKGcuc2VsZWN0ZWRJY29uUGF0aD1tbihyKSksdSE9PXZvaWQgMCYmKGcuaWNvbmZvbnQ9dSksYSE9PXZvaWQgMCl7Zy52aXNpYmxlPUNsLmxpc3RbZV0udmlzaWJsZT1hLGRlbGV0ZSBnLmluZGV4O2xldCB5PUNsLmxpc3QubWFwKE09Pih7dmlzaWJsZTpNLnZpc2libGV9KSk7eVtlXT1nLENDKHtsaXN0Onl9KX1lbHNlIHNyJiZzci5zZXRUYWJCYXJJdGVtKGcpfWZ1bmN0aW9uIFRDKGUpe3NyJiZzci5zZXRUYWJCYXJTdHlsZShlKX1mdW5jdGlvbiBPQyhlKXtSZj0hMSxzciYmc3IuaGlkZVRhYkJhcih7YW5pbWF0aW9uOmV9KX1mdW5jdGlvbiBQQyhlKXtSZj0hMCxzciYmc3Iuc2hvd1RhYkJhcih7YW5pbWF0aW9uOmV9KX1sZXQgdnU9W107dmFyIEFpPXtpZDoiMCIsaW5pdChlLHQpe2UmJmUubGlzdC5sZW5ndGgmJihDbD1lKTt0cnl7c3I9Zi5yZXF1aXJlTW9kdWxlKCJ1bmktdGFidmlldyIpfWNhdGNoKG4pe2NvbnNvbGUubG9nKGB1bmkucmVxdWlyZU5hdGl2ZVBsdWdpbigidW5pLXRhYnZpZXciKSBlcnJvciAke259YCl9c3Iub25NYXNrQ2xpY2soKCk9Pnt2dS5mb3JFYWNoKG49PntuKCl9KX0pLHNyJiZzci5vbkNsaWNrKCh7aW5kZXg6bn0pPT57bGV0IHI9Q2wuc2VsZWN0ZWRJbmRleDt0KENsLmxpc3Rbbl0sbik7bGV0IGE9Q2wuc2VsZWN0ZWRJbmRleDtuIT09YSYmc3Iuc3dpdGNoU2VsZWN0KHtpbmRleDpyfSl9KSxzciYmc3Iub25NaWRCdXR0b25DbGljaygoKT0+c3QuaW52b2tlT25DYWxsYmFjayhNaCkpLFNDKHNyLGUpfSxpbmRleE9mKGUpe2xldCB0PXRoaXMuY29uZmlnLG49dCYmdC5saXN0JiZ0Lmxpc3QubGVuZ3RoO2lmKG4pe2ZvcihsZXQgcj0wO3I8bjtyKyspaWYodC5saXN0W3JdLnBhZ2VQYXRoPT09ZXx8dC5saXN0W3JdLnBhZ2VQYXRoPT09YCR7ZX0uaHRtbGApcmV0dXJuIHJ9cmV0dXJuLTF9LHN3aXRjaFRhYihlKXtsZXQgdD10aGlzLmluZGV4T2YoZSk7cmV0dXJuIHQ+PTA/KHNyJiZzci5zd2l0Y2hTZWxlY3Qoe2luZGV4OnR9KSx0aGlzLmNvbmZpZy5zZWxlY3RlZEluZGV4PXQsITApOiExfSxzZXRUYWJCYXJCYWRnZTp3QyxzZXRUYWJCYXJJdGVtOkFDLHNldFRhYkJhclN0eWxlOlRDLGhpZGVUYWJCYXI6T0Msc2hvd1RhYkJhcjpQQyxhcHBlbmQoZSl7c3ImJnNyLmFwcGVuZCh7aWQ6ZS5pZH0sKHtjb2RlOnR9KT0+e3QhPT0wJiZOKCgpPT57dGhpcy5hcHBlbmQoZSl9LDIwKX0pfSxnZXQgY29uZmlnKCl7cmV0dXJuIENsfHxJLnRhYkJhcn0sZ2V0IHZpc2libGUoKXtyZXR1cm4gUmZ9LGdldCBoZWlnaHQoKXtsZXQgZT10aGlzLmNvbmZpZztyZXR1cm4oZSYmZS5oZWlnaHQ/cGFyc2VGbG9hdChlLmhlaWdodCk6bmUuVEFCQkFSX0hFSUdIVCkrcy5uYXZpZ2F0b3IuZ2V0U2FmZUFyZWFJbnNldHMoKS5kZXZpY2VCb3R0b219LGdldCBjb3Zlcigpe2xldCBlPXRoaXMuY29uZmlnO3JldHVybiBlJiZbImV4dHJhbGlnaHQiLCJsaWdodCIsImRhcmsiXS5pbmRleE9mKGUuYmx1ckVmZmVjdCk+PTB9LHNldFN0eWxlKHttYXNrOmV9KXtzci5zZXRNYXNrKHtjb2xvcjplfSl9LGFkZEV2ZW50TGlzdGVuZXIoZSx0KXt2dS5wdXNoKHQpfSxyZW1vdmVFdmVudExpc3RlbmVyKGUsdCl7bGV0IG49dnUuaW5kZXhPZih0KTt2dS5zcGxpY2UobiwxKX19O2Z1bmN0aW9uIG11KCl7bGV0IGU9em4oKTtyZXR1cm4gZT9lLiRnZXRBcHBXZWJ2aWV3KCk6bnVsbH1mdW5jdGlvbiBTZyhlKXtyZXR1cm4gZT9lLiRnZXRBcHBXZWJ2aWV3KCk6bXUoKX1sZXQgd2c9bnVsbDtmdW5jdGlvbiBDZygpe3JldHVybiB3Z31mdW5jdGlvbiB4ZihlKXt3Zz1lfWZ1bmN0aW9uIEJmKCl7cmV0dXJuIHMubmF2aWdhdG9yLmlzSW1tZXJzZWRTdGF0dXNiYXIoKT9NYXRoLnJvdW5kKHMub3MubmFtZT09PSJpT1MiP3MubmF2aWdhdG9yLmdldFNhZmVBcmVhSW5zZXRzKCkudG9wOnMubmF2aWdhdG9yLmdldFN0YXR1c2JhckhlaWdodCgpKTowfWZ1bmN0aW9uIEFnKCl7bGV0IGU9cy5uYXZpZ2F0b3IuZ2V0U3RhdHVzQmFyU3R5bGUoKTtyZXR1cm4gZT09PSJVSVN0YXR1c0JhclN0eWxlQmxhY2tUcmFuc2x1Y2VudCJ8fGU9PT0iVUlTdGF0dXNCYXJTdHlsZUJsYWNrT3BhcXVlInx8ZT09PSJudWxsIj9lPSJsaWdodCI6ZT09PSJVSVN0YXR1c0JhclN0eWxlRGVmYXVsdCImJihlPSJkYXJrIiksZX1mdW5jdGlvbiBOQygpe2xldHtyZXNvbHV0aW9uV2lkdGg6ZSxyZXNvbHV0aW9uSGVpZ2h0OnR9PXMuc2NyZWVuLmdldEN1cnJlbnRTaXplKCl8fHtyZXNvbHV0aW9uV2lkdGg6MCxyZXNvbHV0aW9uSGVpZ2h0OjB9O3JldHVybntzY3JlZW5XaWR0aDpNYXRoLnJvdW5kKGUpLHNjcmVlbkhlaWdodDpNYXRoLnJvdW5kKHQpfX1sZXQgVGc9TXQoImdldFdpbmRvd0luZm8iLCgpPT57bGV0IGU9cy5vcy5uYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW9zIix7c2NyZWVuV2lkdGg6dCxzY3JlZW5IZWlnaHQ6bn09TkMoKSxyPUJmKCksYSx1PXtoZWlnaHQ6MCxjb3ZlcjohMX0sZz1tdSgpO2lmKGcpe2xldCBndD1nLmdldFN0eWxlKCkseXQ9Z3QmJmd0LnRpdGxlTlZpZXc7eXQmJnl0LnR5cGUmJnl0LnR5cGUhPT0ibm9uZSImJih1LmhlaWdodD15dC50eXBlPT09InRyYW5zcGFyZW50Ij8wOnIrbmUuTkFWQkFSX0hFSUdIVCx1LmNvdmVyPXl0LnR5cGU9PT0idHJhbnNwYXJlbnQifHx5dC50eXBlPT09ImZsb2F0IiksYT1nLmdldFNhZmVBcmVhSW5zZXRzKCl9ZWxzZSBhPXMubmF2aWdhdG9yLmdldFNhZmVBcmVhSW5zZXRzKCk7bGV0IHk9e2hlaWdodDowLGNvdmVyOiExfTskYygpJiYoeS5oZWlnaHQ9QWkudmlzaWJsZT9BaS5oZWlnaHQ6MCx5LmNvdmVyPUFpLmNvdmVyKTtsZXQgTT11LmNvdmVyP3UuaGVpZ2h0OjAsTz15LmNvdmVyP3kuaGVpZ2h0OjAseD1uLXUuaGVpZ2h0LXkuaGVpZ2h0LGhlPW4tKHUuY292ZXI/MDp1LmhlaWdodCktKHkuY292ZXI/MDp5LmhlaWdodCksYmU9dDsoIXkuaGVpZ2h0fHx5LmNvdmVyKSYmIWEuYm90dG9tJiZhLmRldmljZUJvdHRvbSYmKHgtPWEuZGV2aWNlQm90dG9tLGhlLT1hLmRldmljZUJvdHRvbSksYT1lP2E6e2xlZnQ6MCxyaWdodDowLHRvcDp1LmhlaWdodCYmIXUuY292ZXI/MDpyLGJvdHRvbTowfTtsZXQgUGU9e2xlZnQ6YS5sZWZ0LHJpZ2h0OmJlLWEucmlnaHQsdG9wOmEudG9wLGJvdHRvbTpoZS1hLmJvdHRvbSx3aWR0aDpiZS1hLmxlZnQtYS5yaWdodCxoZWlnaHQ6aGUtYS50b3AtYS5ib3R0b219O3JldHVybntwaXhlbFJhdGlvOnMuc2NyZWVuLnNjYWxlLHNjcmVlbldpZHRoOnQsc2NyZWVuSGVpZ2h0Om4sd2luZG93V2lkdGg6YmUsd2luZG93SGVpZ2h0Ongsc3RhdHVzQmFySGVpZ2h0OnIsc2FmZUFyZWE6UGUsc2FmZUFyZWFJbnNldHM6e3RvcDphLnRvcCxyaWdodDphLnJpZ2h0LGJvdHRvbTphLmJvdHRvbSxsZWZ0OmEubGVmdH0sd2luZG93VG9wOk0sd2luZG93Qm90dG9tOk8sc2NyZWVuVG9wOm4teH19KSxqYSxfdT0hMDtmdW5jdGlvbiBqYygpe2lmKCFfdSlyZXR1cm47bGV0e2dldFN5c3RlbUluZm9TeW5jOmV9PWYucmVxdWlyZU1vZHVsZSgicGx1cyIpO2lmKGphPWUoKSxHLmlzU3RyaW5nKGphKSl0cnl7amE9SlNPTi5wYXJzZShqYSl9Y2F0Y2godCl7fXJldHVybiBqYX1sZXQgT2c9TXQoImdldERldmljZUluZm8iLCgpPT57amMoKTtsZXR7ZGV2aWNlQnJhbmQ6ZT0iIixkZXZpY2VNb2RlbDp0LG9zTmFtZTpuLG9zVmVyc2lvbjpyLGRldmljZU9yaWVudGF0aW9uOmEsZGV2aWNlVHlwZTp1LGRldmljZUlkOmcsb3NMYW5ndWFnZTp5LG9zVGhlbWU6TSxyb21OYW1lOk8scm9tVmVyc2lvbjp4fT1qYSxoZT1lLnRvTG93ZXJDYXNlKCksYmU9bi50b0xvd2VyQ2FzZSgpO3JldHVybnticmFuZDpoZSxkZXZpY2VCcmFuZDpoZSxkZXZpY2VNb2RlbDp0LGRldmljZVBpeGVsUmF0aW86cy5zY3JlZW4uc2NhbGUsZGV2aWNlSWQ6ZyxkZXZpY2VPcmllbnRhdGlvbjphLGRldmljZVR5cGU6dSxtb2RlbDp0LHBsYXRmb3JtOmJlLHN5c3RlbTpgJHtiZT09PSJpb3MiPyJpT1MiOiJBbmRyb2lkIn0gJHtyfWAsb3NOYW1lOm4sb3NWZXJzaW9uOnIsb3NMYW5ndWFnZTp5LG9zVGhlbWU6TSxyb21OYW1lOk8scm9tVmVyc2lvbjp4fX0pLFBnPU10KCJnZXRBcHBCYXNlSW5mbyIsKCk9PntqYygpO2xldHtob3N0UGFja2FnZU5hbWU6ZSxob3N0TmFtZTp0LGhvc3RWZXJzaW9uOm4saG9zdExhbmd1YWdlOnIsb3NMYW5ndWFnZTphLGhvc3RUaGVtZTp1LGFwcElkOmcsYXBwTmFtZTp5LGFwcFZlcnNpb246TSxhcHBWZXJzaW9uQ29kZTpPLGFwcFdndFZlcnNpb246eCx1bmlDb21waWxlVmVyc2lvbjpoZSx1bmlSdW50aW1lVmVyc2lvbjpiZSx1bmlQbGF0Zm9ybTpQZX09amE7cmV0dXJue2FwcElkOmcsYXBwTmFtZTp5LGFwcFZlcnNpb246TSxhcHBWZXJzaW9uQ29kZTpPLGFwcFdndFZlcnNpb246eCxhcHBMYW5ndWFnZTpNYz9NYygpOmEsZW5hYmxlRGVidWc6ITEsaG9zdFBhY2thZ2VOYW1lOmUsaG9zdE5hbWU6dCxob3N0VmVyc2lvbjpuLGhvc3RMYW5ndWFnZTpyLGhvc3RUaGVtZTp1LGhvc3RGb250U2l6ZVNldHRpbmc6dm9pZCAwLGhvc3RTREtWZXJzaW9uOnZvaWQgMCxsYW5ndWFnZTphLFNES1ZlcnNpb246IiIsdGhlbWU6eWcoKSx2ZXJzaW9uOnMucnVudGltZS5pbm5lclZlcnNpb24saXNVbmlBcHBYOiExLHVuaVBsYXRmb3JtOlBlLHVuaVJ1bnRpbWVWZXJzaW9uOmJlLHVuaUNvbXBpbGVWZXJzaW9uOmhlLHVuaUNvbXBpbGVyVmVyc2lvbjpoZX19KSxOZz1NdCgiZ2V0U3lzdGVtSW5mb1N5bmMiLCgpPT57X3U9ITAsamMoKSxfdT0hMTtsZXQgZT1UZygpLHQ9T2coKSxuPVBnKCk7X3U9ITA7bGV0IHI9e2ZvbnRTaXplU2V0dGluZzpuLmhvc3RGb250U2l6ZVNldHRpbmcsb3NOYW1lOmphLm9zTmFtZS50b0xvd2VyQ2FzZSgpfTtqYS5ob3N0TmFtZSYmKHIuaG9zdFNES1ZlcnNpb249amEudW5pUnVudGltZVZlcnNpb24pO2xldCBhPUcuZXh0ZW5kKGphLGUsdCxuLHIpO3JldHVybiBkZWxldGUgYS5zY3JlZW5Ub3AsZGVsZXRlIGEuZW5hYmxlRGVidWcsSS5kYXJrbW9kZXx8ZGVsZXRlIGEudGhlbWUsbmUuc29ydE9iamVjdChhKX0pLElDPVRlKCJnZXRTeXN0ZW1JbmZvIiwoZSx7cmVzb2x2ZTp0fSk9PnQoTmcoKSkpLGFjPW51bGwsa0M9RG4oV2gsKCk9PntJZygpfSksUkM9WnIoX3ksKCk9PntrZygpfSksSWc9VGUoYnksKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57YWN8fChhYz1zLm9yaWVudGF0aW9uLndhdGNoT3JpZW50YXRpb24ocj0+e3N0Lmludm9rZU9uQ2FsbGJhY2soV2gse2RpcmVjdGlvbjpyLm1hZ25ldGljSGVhZGluZ30pfSxyPT57bihyLm1lc3NhZ2UpLGFjPW51bGx9LHtmcmVxdWVuY3k6d3J9KSksTih0LHdyKX0pLGtnPVRlKHl5LChlLHtyZXNvbHZlOnR9KT0+e2FjJiYocy5vcmllbnRhdGlvbi5jbGVhcldhdGNoKGFjKSxhYz1udWxsKSx0KCl9KSx4Qz1UZShFeSwoZSx7cmVzb2x2ZTp0fSk9PntzLmRldmljZS52aWJyYXRlKDE1KSx0KCl9KSxCQz1UZShTeSwoZSx7cmVzb2x2ZTp0fSk9PntzLmRldmljZS52aWJyYXRlKDQwMCksdCgpfSksc2M9bnVsbCxMQz1Ebih6aCwoKT0+e1JnKCl9KSxNQz1acihweSwoKT0+e3hnKCl9KSxSZz1UZSh2eSwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntzY3x8KHNjPXMuYWNjZWxlcm9tZXRlci53YXRjaEFjY2VsZXJhdGlvbihyPT57c3QuaW52b2tlT25DYWxsYmFjayh6aCx7eDpyJiZyLnhBeGlzfHwwLHk6ciYmci55QXhpc3x8MCx6OnImJnIuekF4aXN8fDB9KX0scj0+e3NjPW51bGwsbihgc3RhcnRBY2NlbGVyb21ldGVyOmZhaWwgJHtyLm1lc3NhZ2V9YCl9LHtmcmVxdWVuY3k6d3J9KSksTih0LHdyKX0pLHhnPVRlKG15LChlLHtyZXNvbHZlOnR9KT0+e3NjJiYocy5hY2NlbGVyb21ldGVyLmNsZWFyV2F0Y2goc2MpLHNjPW51bGwpLHQoKX0pLERDPURuKEdoLG9jKCgpPT5zLmJsdWV0b290aC5vbkJsdWV0b290aERldmljZUZvdW5kLmJpbmQocy5ibHVldG9vdGgpLEdoKSksRkM9RG4ocWgsb2MoKCk9PnMuYmx1ZXRvb3RoLm9uQmx1ZXRvb3RoQWRhcHRlclN0YXRlQ2hhbmdlLmJpbmQocy5ibHVldG9vdGgpLHFoKSksVkM9RG4oWWgsb2MoKCk9PnMuYmx1ZXRvb3RoLm9uQkxFQ29ubmVjdGlvblN0YXRlQ2hhbmdlLmJpbmQocy5ibHVldG9vdGgpLFloKSksVUM9RG4oS2gsb2MoKCk9PnMuYmx1ZXRvb3RoLm9uQkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZUNoYW5nZS5iaW5kKHMuYmx1ZXRvb3RoKSxLaCkpLCRDPVRlKCJvcGVuQmx1ZXRvb3RoQWRhcHRlciIsQ2koKCk9PnMuYmx1ZXRvb3RoLm9wZW5CbHVldG9vdGhBZGFwdGVyLmJpbmQocy5ibHVldG9vdGgpKSksSEM9VGUoImNsb3NlQmx1ZXRvb3RoQWRhcHRlciIsQ2koKCk9PnMuYmx1ZXRvb3RoLmNsb3NlQmx1ZXRvb3RoQWRhcHRlci5iaW5kKHMuYmx1ZXRvb3RoKSkpLGpDPVRlKCJnZXRCbHVldG9vdGhBZGFwdGVyU3RhdGUiLENpKCgpPT5zLmJsdWV0b290aC5nZXRCbHVldG9vdGhBZGFwdGVyU3RhdGUuYmluZChzLmJsdWV0b290aCkpKSx6Qz1UZSh3eSxDaSgoKT0+cy5ibHVldG9vdGguc3RhcnRCbHVldG9vdGhEZXZpY2VzRGlzY292ZXJ5LmJpbmQocy5ibHVldG9vdGgpKSxDeSksV0M9VGUoInN0b3BCbHVldG9vdGhEZXZpY2VzRGlzY292ZXJ5IixDaSgoKT0+cy5ibHVldG9vdGguc3RvcEJsdWV0b290aERldmljZXNEaXNjb3ZlcnkuYmluZChzLmJsdWV0b290aCkpKSxHQz1UZSgiZ2V0Qmx1ZXRvb3RoRGV2aWNlcyIsQ2koKCk9PnMuYmx1ZXRvb3RoLmdldEJsdWV0b290aERldmljZXMuYmluZChzLmJsdWV0b290aCkpKSxxQz1UZShBeSxDaSgoKT0+cy5ibHVldG9vdGguZ2V0Q29ubmVjdGVkQmx1ZXRvb3RoRGV2aWNlcy5iaW5kKHMuYmx1ZXRvb3RoKSksVHkpLFlDPVRlKE95LENpKCgpPT5zLmJsdWV0b290aC5jcmVhdGVCTEVDb25uZWN0aW9uLmJpbmQocy5ibHVldG9vdGgpKSxQeSksS0M9VGUoTnksQ2koKCk9PnMuYmx1ZXRvb3RoLmNsb3NlQkxFQ29ubmVjdGlvbi5iaW5kKHMuYmx1ZXRvb3RoKSksSXkpLEpDPVRlKGt5LENpKCgpPT5zLmJsdWV0b290aC5nZXRCTEVEZXZpY2VTZXJ2aWNlcy5iaW5kKHMuYmx1ZXRvb3RoKSksUnkpLFpDPVRlKHh5LENpKCgpPT5zLmJsdWV0b290aC5nZXRCTEVEZXZpY2VDaGFyYWN0ZXJpc3RpY3MuYmluZChzLmJsdWV0b290aCkpLEJ5KSxYQz1UZShMeSxDaSgoKT0+cy5ibHVldG9vdGgubm90aWZ5QkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZUNoYW5nZS5iaW5kKHMuYmx1ZXRvb3RoKSksTXkpLFFDPVRlKER5LENpKCgpPT5zLmJsdWV0b290aC5yZWFkQkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZS5iaW5kKHMuYmx1ZXRvb3RoKSksRnkpLGVBPVRlKFZ5LENpKCgpPT5zLmJsdWV0b290aC53cml0ZUJMRUNoYXJhY3RlcmlzdGljVmFsdWUuYmluZChzLmJsdWV0b290aCkpLFV5KSx0QT1UZSgkeSxDaSgoKT0+cy5ibHVldG9vdGguc2V0QkxFTVRVLmJpbmQocy5ibHVldG9vdGgpKSxIeSksbkE9VGUoanksQ2koKCk9PnMuYmx1ZXRvb3RoLmdldEJMRURldmljZVJTU0kuYmluZChzLmJsdWV0b290aCkpLHp5KSxyQT1EbihKaCxvYygoKT0+cy5pYmVhY29uLm9uQmVhY29uVXBkYXRlLmJpbmQocy5pYmVhY29uKSxKaCkpLGlBPURuKFpoLG9jKCgpPT5zLmliZWFjb24ub25CZWFjb25TZXJ2aWNlQ2hhbmdlLmJpbmQocy5pYmVhY29uKSxaaCkpLG9BPVRlKFd5LENpKCgpPT5zLmliZWFjb24uZ2V0QmVhY29ucy5iaW5kKHMuaWJlYWNvbikpKSxhQT1UZShHeSxDaSgoKT0+cy5pYmVhY29uLnN0YXJ0QmVhY29uRGlzY292ZXJ5LmJpbmQocy5pYmVhY29uKSkscXkpLHNBPVRlKFl5LENpKCgpPT5zLmliZWFjb24uc3RvcEJlYWNvbkRpc2NvdmVyeS5iaW5kKHMuaWJlYWNvbikpKSxsQT1UZShheSwoe3Bob25lTnVtYmVyOmV9LHtyZXNvbHZlOnR9KT0+KHMuZGV2aWNlLmRpYWwoZSksdCgpKSxzeSksY0E9e25hbWU6e2dpdmVuTmFtZToiZmlyc3ROYW1lIixtaWRkbGVOYW1lOiJtaWRkbGVOYW1lIixmYW1pbHlOYW1lOiJsYXN0TmFtZSJ9LG5pY2tuYW1lOiJuaWNrTmFtZSIscGhvdG9zOnt0eXBlOiJ1cmwiLHZhbHVlOiJwaG90b0ZpbGVQYXRoIn0sbm90ZToicmVtYXJrIixwaG9uZU51bWJlcnM6W3t0eXBlOiJtb2JpbGUiLHZhbHVlOiJtb2JpbGVQaG9uZU51bWJlciJ9LHt0eXBlOiJ3b3JrIix2YWx1ZToid29ya1Bob25lTnVtYmVyIn0se3R5cGU6ImNvbXBhbnkiLHZhbHVlOiJob3N0TnVtYmVyIn0se3R5cGU6ImhvbWUgZmF4Iix2YWx1ZToiaG9tZUZheE51bWJlciJ9LHt0eXBlOiJ3b3JrIGZheCIsdmFsdWU6IndvcmtGYXhOdW1iZXIifV0sZW1haWxzOlt7dHlwZToiaG9tZSIsdmFsdWU6ImVtYWlsIn1dLHVybHM6W3t0eXBlOiJvdGhlciIsdmFsdWU6InVybCJ9XSxvcmdhbml6YXRpb25zOlt7dHlwZToiY29tcGFueSIsbmFtZToib3JnYW5pemF0aW9uIix0aXRsZToidGl0bGUifV0saW1zOlt7dHlwZToib3RoZXIiLHZhbHVlOiJ3ZUNoYXROdW1iZXIifV0sYWRkcmVzc2VzOlt7dHlwZToib3RoZXIiLHByZWZlcnJlZDohMCxjb3VudHJ5OiJhZGRyZXNzQ291bnRyeSIscmVnaW9uOiJhZGRyZXNzU3RhdGUiLGxvY2FsaXR5OiJhZGRyZXNzQ2l0eSIsc3RyZWV0QWRkcmVzczoiYWRkcmVzc1N0cmVldCIscG9zdGFsQ29kZToiYWRkcmVzc1Bvc3RhbENvZGUifSx7dHlwZToiaG9tZSIsY291bnRyeToiaG9tZUFkZHJlc3NDb3VudHJ5IixyZWdpb246ImhvbWVBZGRyZXNzU3RhdGUiLGxvY2FsaXR5OiJob21lQWRkcmVzc0NpdHkiLHN0cmVldEFkZHJlc3M6ImhvbWVBZGRyZXNzU3RyZWV0Iixwb3N0YWxDb2RlOiJob21lQWRkcmVzc1Bvc3RhbENvZGUifSx7dHlwZToiY29tcGFueSIsY291bnRyeToid29ya0FkZHJlc3NDb3VudHJ5IixyZWdpb246IndvcmtBZGRyZXNzU3RhdGUiLGxvY2FsaXR5OiJ3b3JrQWRkcmVzc0NpdHkiLHN0cmVldEFkZHJlc3M6IndvcmtBZGRyZXNzU3RyZWV0Iixwb3N0YWxDb2RlOiJ3b3JrQWRkcmVzc1Bvc3RhbENvZGUifV19LHVBPVsidHlwZSIsInByZWZlcnJlZCJdO2Z1bmN0aW9uIExmKGUsdCxuKXtsZXQgcj0wO3JldHVybiBPYmplY3Qua2V5cyhuKS5mb3JFYWNoKGE9PntsZXQgdT1uW2FdO3R5cGVvZiB1IT09Im9iamVjdCI/dUEuaW5kZXhPZihhKSE9PS0xP2VbYV09blthXTp0eXBlb2YgdFt1XSE9InVuZGVmaW5lZCI/KHIrKyxlW2FdPXRbdV0pOmRlbGV0ZSBlW2FdOnUgaW5zdGFuY2VvZiBBcnJheT8oZVthXT1bXSx1LmZvckVhY2goeT0+e2xldCBNPXt9O0xmKE0sdCx5KSYmZVthXS5wdXNoKE0pfSksZVthXS5sZW5ndGg/cisrOmRlbGV0ZSBlW2FdKTooZVthXT17fSxMZihlW2FdLHQsdSk/cisrOmRlbGV0ZSBlW2FdKX0pLHJ9bGV0IGZBPVRlKGx5LChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+eyFlLnBob3RvRmlsZVBhdGgmJihlLnBob3RvRmlsZVBhdGg9IiIpLHMuY29udGFjdHMuZ2V0QWRkcmVzc0Jvb2socy5jb250YWN0cy5BRERSRVNTQk9PS19QSE9ORSxyPT57bGV0IGE9ci5jcmVhdGUoKTtMZihhLGUsY0EpLGEuc2F2ZSgoKT0+dCgpLHU9Pm4oKSl9LHI9Pm4oKSl9LHV5LGN5KTtmdW5jdGlvbiBsYShlKXtyZXR1cm4gdHlwZW9mIGYhPSJ1bmRlZmluZWQiP2YucmVxdWlyZU1vZHVsZShlKTpfX3JlcXVpcmVOYXRpdmVQbHVnaW5fXyhlKX1mdW5jdGlvbiBCZyhlLHQsbil7cmV0dXJuIGxhKCJwbHVzIikuc2VuZE5hdGl2ZUV2ZW50KGUsdCxuKX1sZXQgZEE9VGUoZnksKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGEoImNsaXBib2FyZCIpLmdldFN0cmluZyhhPT57YS5yZXN1bHQ9PT0ic3VjY2VzcyI/dCh7ZGF0YTphLmRhdGF9KTpuKCJnZXRDbGlwYm9hcmREYXRhOmZhaWwiKX0pfSksaEE9VGUoZHksKGUse3Jlc29sdmU6dH0pPT57bGEoImNsaXBib2FyZCIpLnNldFN0cmluZyhlLmRhdGEpLHQoKX0sZ3ksaHkpLExnPSJvbk5ldHdvcmtTdGF0dXNDaGFuZ2UiO2Z1bmN0aW9uIE1nKCl7RGcoKS50aGVuKCh7bmV0d29ya1R5cGU6ZX0pPT57c3QuaW52b2tlT25DYWxsYmFjayhMZyx7aXNDb25uZWN0ZWQ6ZSE9PSJub25lIixuZXR3b3JrVHlwZTplfSl9KX1sZXQgZ0E9RG4oTGcsKCk9PntzLmdsb2JhbEV2ZW50LmFkZEV2ZW50TGlzdGVuZXIoIm5ldGNoYW5nZSIsTWcpfSkscEE9WnIoIm9mZk5ldHdvcmtTdGF0dXNDaGFuZ2UiLCgpPT57cy5nbG9iYWxFdmVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJuZXRjaGFuZ2UiLE1nKX0pLERnPVRlKCJnZXROZXR3b3JrVHlwZSIsKGUse3Jlc29sdmU6dH0pPT57bGV0IG49YmFbcy5uZXR3b3JraW5mby5nZXRDdXJyZW50VHlwZSgpXXx8InVua25vd24iO3JldHVybiB0KHtuZXR3b3JrVHlwZTpufSl9KTtmdW5jdGlvbiBGZygpe2lmKHMub3MubmFtZS50b0xvd2VyQ2FzZSgpIT09ImlvcyIpcmV0dXJuITE7bGV0IHQ9bGEoImZhY2VJRCIpO3JldHVybiEhKHQmJnQuaXNTdXBwb3J0KCkpfWZ1bmN0aW9uIFZnKCl7cmV0dXJuISEocy5maW5nZXJwcmludCYmcy5maW5nZXJwcmludC5pc1N1cHBvcnQoKSl9bGV0IFVnPWU9PntsZXQgdD1bXTtyZXR1cm4gVmcoKSYmdC5wdXNoKCJmaW5nZXJQcmludCIpLEZnKCkmJnQucHVzaCgiZmFjaWFsIiksZSYmZSh7c3VwcG9ydE1vZGU6dH0pLHtzdXBwb3J0TW9kZTp0LGVyck1zZzoiY2hlY2tJc1N1cHBvcnRTb3RlckF1dGhlbnRpY2F0aW9uOm9rIn19LHZBPVRlKFh5LChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e1VnKHQpfSksJGc9KHtjaGVja0F1dGhNb2RlOmUscmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj0odSxnKT0+biYmbih1LGcpLGE9dT0+dCYmdCh1KTtpZihlPT09ImZpbmdlclByaW50Iil7aWYoVmcoKSl7bGV0IHU9cy5maW5nZXJwcmludC5pc0tleWd1YXJkU2VjdXJlKCkmJnMuZmluZ2VycHJpbnQuaXNFbnJvbGxlZEZpbmdlcnByaW50cygpO3JldHVybiBhKHtpc0Vucm9sbGVkOnV9KSx7aXNFbnJvbGxlZDp1LGVyck1zZzoiY2hlY2tJc1NvdGVyRW5yb2xsZWRJbkRldmljZTpvayJ9fXJldHVybiByKCJub3Qgc3VwcG9ydCIse2lzRW5yb2xsZWQ6ITF9KSx7aXNFbnJvbGxlZDohMSxlcnJNc2c6ImNoZWNrSXNTb3RlckVucm9sbGVkSW5EZXZpY2U6ZmFpbCBub3Qgc3VwcG9ydCJ9fWVsc2UgaWYoZT09PSJmYWNpYWwiKXtpZihGZygpKXtsZXQgdT1sYSgiZmFjZUlEIiksZz11JiZ1LmlzS2V5Z3VhcmRTZWN1cmUoKSYmdS5pc0Vucm9sbGVkRmFjZUlEKCk7cmV0dXJuIGEoe2lzRW5yb2xsZWQ6Z30pLHtpc0Vucm9sbGVkOmcsZXJyTXNnOiJjaGVja0lzU290ZXJFbnJvbGxlZEluRGV2aWNlOm9rIn19cmV0dXJuIHIoIm5vdCBzdXBwb3J0Iix7aXNFbnJvbGxlZDohMX0pLHtpc0Vucm9sbGVkOiExLGVyck1zZzoiY2hlY2tJc1NvdGVyRW5yb2xsZWRJbkRldmljZTpmYWlsIG5vdCBzdXBwb3J0In19cmV0dXJuIHIoIm5vdCBzdXBwb3J0Iix7aXNFbnJvbGxlZDohMX0pLHtpc0Vucm9sbGVkOiExLGVyck1zZzoiY2hlY2tJc1NvdGVyRW5yb2xsZWRJbkRldmljZTpmYWlsIG5vdCBzdXBwb3J0In19LG1BPVRlKFF5LCh7Y2hlY2tBdXRoTW9kZTplfSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PnskZyh7Y2hlY2tBdXRoTW9kZTplLHJlc29sdmU6dCxyZWplY3Q6bn0pfSxuMCx0MCksX0E9VGUocjAsKHtyZXF1ZXN0QXV0aE1vZGVzOmUsY2hhbGxlbmdlOnQ9ITEsYXV0aENvbnRlbnQ6bn0se3Jlc29sdmU6cixyZWplY3Q6YX0pPT57am8oKTtsZXR7dDp1fT1xZSgpLHtzdXBwb3J0TW9kZTpnfT1VZygpO2lmKCFnLmxlbmd0aClyZXR1cm4gYSgibm90IHN1cHBvcnQiLHthdXRoTW9kZToiZmluZ2VyUHJpbnQiLGVyckNvZGU6OTAwMDF9KTtsZXQgeT1bXTtpZihlLmZvckVhY2goZ3Q9PntnLmluZGV4T2YoZ3QpPi0xJiZ5LnB1c2goZ3QpfSksIXkubGVuZ3RoKXJldHVybiBhKCJzdGFydFNvdGVyQXV0aGVudGljYXRpb246ZmFpbCBubyBjb3JyZXNwb25kaW5nIG1vZGUiLHthdXRoTW9kZToiZmluZ2VyUHJpbnQiLGVyckNvZGU6OTAwMDN9KTtsZXQgTT1bXTtpZih5LmZvckVhY2goZ3Q9PnskZyh7Y2hlY2tBdXRoTW9kZTpndH0pLmlzRW5yb2xsZWQmJk0ucHVzaChndCl9KSwhTS5sZW5ndGgpcmV0dXJuIGEoYHN0YXJ0U290ZXJBdXRoZW50aWNhdGlvbjpmYWlsIG5vICR7eVswXX0gZW5yb2xsZWRgLHthdXRoTW9kZTp5WzBdLGVyckNvZGU6OTAwMTF9KTtsZXQgTz1NWzBdLHg9bnVsbCxoZSxiZT1ufHx1KCJ1bmkuc3RhcnRTb3RlckF1dGhlbnRpY2F0aW9uLmF1dGhDb250ZW50IiksUGU9Z3Q9PntsZXR7Y29kZTp5dH09Z3QsWnQ9e2F1dGhNb2RlOk99LFZ0PXs0OigpPT57eD8oRShoZSkseC5zZXRUaXRsZSh1KCJ1bmkuc3RhcnRTb3RlckF1dGhlbnRpY2F0aW9uLndhaXRpbmdDb250ZW50IikpLGhlPU4oKCk9Pnt4JiZ4LnNldFRpdGxlKGJlKX0sMWUzKSk6YSgiIixHLmV4dGVuZChadCx7ZXJyQ29kZTo5MDAwOX0pKX0sNTooKT0+e3MubmF0aXZlVUkuY2xvc2VXYWl0aW5nKCksYSgiYXV0aGVudGljYXRlIGZyZWV6ZS4gcGxlYXNlIHRyeSBhZ2FpbiBsYXRlciIsRy5leHRlbmQoWnQse2VyckNvZGU6OTAwMTB9KSl9LDY6KCk9PntzLm5hdGl2ZVVJLmNsb3NlV2FpdGluZygpLGEoImNhbmNlbCIsRy5leHRlbmQoWnQse2VyckNvZGU6OTAwMDh9KSl9fTt5dCYmVnRbeXRdP1Z0W3l0XSgpOihzLm5hdGl2ZVVJLmNsb3NlV2FpdGluZygpLGEoIiIsRy5leHRlbmQoWnQse2VyckNvZGU6OTAwMDd9KSkpfTtPPT09ImZpbmdlclByaW50Ij8ocy5vcy5uYW1lLnRvTG93ZXJDYXNlKCk9PT0iYW5kcm9pZCImJih4PXMubmF0aXZlVUkuc2hvd1dhaXRpbmcoYmUpLHgub25jbG9zZT1mdW5jdGlvbigpe3MuZmluZ2VycHJpbnQuY2FuY2VsKCl9KSxzLmZpbmdlcnByaW50LmF1dGhlbnRpY2F0ZSgoKT0+e3MubmF0aXZlVUkuY2xvc2VXYWl0aW5nKCkscih7YXV0aE1vZGU6TyxlcnJDb2RlOjB9KX0sUGUse21lc3NhZ2U6YmV9KSk6Tz09PSJmYWNpYWwiJiZsYSgiZmFjZUlEIikuYXV0aGVudGljYXRlKHttZXNzYWdlOmJlfSx5dD0+e3l0LnR5cGU9PT0ic3VjY2VzcyImJnl0LmNvZGU9PT0wP3Ioe2F1dGhNb2RlOk8sZXJyQ29kZTowfSk6UGUoeXQpfSl9LG8wLGkwKSxiQT1UZShhMCwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntjaSgpO2xldHt0OnJ9PXFlKCksdT1BZygpIT09ImxpZ2h0IixnLHk9ITEsTT14aSh7dXJsOiJfX3VuaWFwcHNjYW4iLGRhdGE6T2JqZWN0LmFzc2lnbih7fSxlLHttZXNzYWdlczp7ZmFpbDpyKCJ1bmkuc2NhbkNvZGUuZmFpbCIpLCJmbGFzaC5vbiI6cigidW5pLnNjYW5Db2RlLmZsYXNoLm9uIiksImZsYXNoLm9mZiI6cigidW5pLnNjYW5Db2RlLmZsYXNoLm9mZiIpfX0pLHN0eWxlOnthbmltYXRpb25UeXBlOmUuYW5pbWF0aW9uVHlwZXx8InBvcC1pbiIsdGl0bGVOVmlldzp7YXV0b0JhY2tCdXR0b246ITAsdHlwZToiZmxvYXQiLHRpdGxlVGV4dDplLnRpdGxlVGV4dHx8cigidW5pLnNjYW5Db2RlLnRpdGxlIiksdGl0bGVDb2xvcjoiI2ZmZmZmZiIsYmFja2dyb3VuZENvbG9yOiJyZ2JhKDAsMCwwLDApIixidXR0b25zOmUub25seUZyb21DYW1lcmE/W106W3t0ZXh0OmUuYWxidW1UZXh0fHxyKCJ1bmkuc2NhbkNvZGUuYWxidW0iKSxmb250U2l6ZToiMTdweCIsd2lkdGg6IjYwcHgiLG9uY2xpY2s6KCk9PntNLnNlbmRNZXNzYWdlKHt0eXBlOiJnYWxsZXJ5In0pfX1dfSxwb3BHZXN0dXJlOiJjbG9zZSIsYmFja2dyb3VuZDoiIzAwMDAwMCIsYmFja0J1dHRvbkF1dG9Db250cm9sOiJjbG9zZSJ9LG9uTWVzc2FnZSh7ZXZlbnQ6TyxkZXRhaWw6eH0pe2c9eCx5PU89PT0ibWFya2VkIn0sb25DbG9zZSgpe3UmJnMubmF2aWdhdG9yLnNldFN0YXR1c0JhclN0eWxlKCJkYXJrIiksZz95PyhkZWxldGUgZy5tZXNzYWdlLHQoZykpOm4oZy5tZXNzYWdlKTpuKCJjYW5jZWwiKX19KTt1JiYocy5uYXZpZ2F0b3Iuc2V0U3RhdHVzQmFyU3R5bGUoImxpZ2h0IiksTS53ZWJ2aWV3LmFkZEV2ZW50TGlzdGVuZXIoInBvcEdlc3R1cmUiLCh7dHlwZTpPLHJlc3VsdDp4fSk9PntPPT09InN0YXJ0Ij9zLm5hdmlnYXRvci5zZXRTdGF0dXNCYXJTdHlsZSgiZGFyayIpOk89PT0iZW5kIiYmIXgmJnMubmF2aWdhdG9yLnNldFN0YXR1c0JhclN0eWxlKCJsaWdodCIpfSkpfSxzMCxjMCksSGc9ZT0+e3N0Lmludm9rZU9uQ2FsbGJhY2sobmUuT05fVEhFTUVfQ0hBTkdFLGUpfSx5QT1EbihuZS5PTl9USEVNRV9DSEFOR0UsKCk9PntzdC5vbihuZS5PTl9USEVNRV9DSEFOR0UsSGcpfSksRUE9WnIobmUuT0ZGX1RIRU1FX0NIQU5HRSwoKT0+e3N0Lm9mZihuZS5PTl9USEVNRV9DSEFOR0UsSGcpfSksU0E9VGUoS3ksKGUse3Jlc29sdmU6dH0pPT57bGV0IG49cy5zY3JlZW4uZ2V0QnJpZ2h0bmVzcyghMSk7dCh7dmFsdWU6bn0pfSksd0E9VGUoSnksKGUse3Jlc29sdmU6dH0pPT57cy5zY3JlZW4uc2V0QnJpZ2h0bmVzcyhlLnZhbHVlLCExKSx0KCl9KSxDQT1UZShaeSwoZSx7cmVzb2x2ZTp0fSk9PntzLmRldmljZS5zZXRXYWtlbG9jayghIWUua2VlcFNjcmVlbk9uKSx0KCl9KSxBQT1NdCh1MCwoKT0+e2xldHtnZXRTeXN0ZW1TZXR0aW5nOmV9PWYucmVxdWlyZU1vZHVsZSgicGx1cyIpLHQ9ZSgpO3RyeXt0eXBlb2YgdD09InN0cmluZyImJih0PUpTT04ucGFyc2UodCkpfWNhdGNoKG4pe31yZXR1cm4gdH0pLGpnPU10KGYwLCgpPT57bGV0e2dldEFwcEF1dGhvcml6ZVNldHRpbmc6ZX09Zi5yZXF1aXJlTW9kdWxlKCJwbHVzIiksdD1lKCk7dHJ5e3R5cGVvZiB0PT0ic3RyaW5nIiYmKHQ9SlNPTi5wYXJzZSh0KSl9Y2F0Y2gobil7fWZvcihsZXQgbiBpbiB0KUcuaGFzT3duKHQsbikmJnRbbl09PT0idW5kZWZpbmVkIiYmKHRbbl09dm9pZCAwKTtyZXR1cm4gdH0pLFRBPVRlKGQwLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldHtvcGVuQXBwQXV0aG9yaXplU2V0dGluZzpyfT1mLnJlcXVpcmVNb2R1bGUoInBsdXMiKTtyKHU9Pnt1LnR5cGU9PT0ic3VjY2VzcyI/dCgpOm4oKX0pfSksT0E9VGUoWDAsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0IHI9bXIrIi9kb3dubG9hZC8iO3MuaW8uZ2V0SW1hZ2VJbmZvKEcuZXh0ZW5kKGUse3NhdmVQYXRoOnIsZmlsZW5hbWU6cixzdWNjZXNzOndsKHQpLGZhaWw6Q3Iobil9KSl9LGVFLFEwKSxQQT1UZShvRSwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntzLmlvLmdldFZpZGVvSW5mbyh7ZmlsZVBhdGg6ZS5zcmMsc3VjY2VzczpyPT57dCh7b3JpZW50YXRpb246ci5vcmllbnRhdGlvbix0eXBlOnIudHlwZSxkdXJhdGlvbjpyLmR1cmF0aW9uLHNpemU6ci5zaXplLGhlaWdodDpyLmhlaWdodCx3aWR0aDpyLndpZHRoLGZwczpyLmZwc3x8MzAsYml0cmF0ZTpyLmJpdHJhdGV9KX0sZmFpbDpDcihuKX0pfSxzRSxhRSksTkE9VGUodEUsKHtjdXJyZW50OmU9MCxpbmRpY2F0b3I6dD0ibnVtYmVyIixsb29wOm49ITEsdXJsczpyLGxvbmdQcmVzc0FjdGlvbnM6YX0se3Jlc29sdmU6dSxyZWplY3Q6Z30pPT57Zm8oKTtsZXR7dDp5fT1xZSgpO3I9ci5tYXAoTz0+bW4oTykpO2xldCBNPU51bWJlcihlKTtpc05hTihNKT8oZT1yLmluZGV4T2YobW4oZSkpLGU9ZTwwPzA6ZSk6ZT1NLHMubmF0aXZlVUkucHJldmlld0ltYWdlKHIse2N1cnJlbnQ6ZSxpbmRpY2F0b3I6dCxsb29wOm4sb25Mb25nUHJlc3M6ZnVuY3Rpb24oTyl7bGV0IHg9W10saGU9IiIsYmU9YSYmRy5pc1BsYWluT2JqZWN0KGEpO2JlPyh4PWEuaXRlbUxpc3Q/YS5pdGVtTGlzdDpbXSxoZT1hLml0ZW1Db2xvcj9hLml0ZW1Db2xvcjoiIzAwMDAwMCIpOih4PVt5KCJ1bmkucHJldmlld0ltYWdlLmJ1dHRvbi5zYXZlIildLGhlPSIjMDAwMDAwIik7bGV0IFBlPXtidXR0b25zOngubWFwKGd0PT4oe3RpdGxlOmd0LGNvbG9yOmhlfSkpLGNhbmNlbDp5KCJ1bmkucHJldmlld0ltYWdlLmNhbmNlbCIpfTtzLm5hdGl2ZVVJLmFjdGlvblNoZWV0KFBlLGd0PT57aWYoZ3QuaW5kZXg+MCl7aWYoYmUpe0cuaXNGdW5jdGlvbihhLnN1Y2Nlc3MpJiZhLnN1Y2Nlc3Moe3RhcEluZGV4Omd0LmluZGV4LTEsaW5kZXg6Ty5pbmRleH0pO3JldHVybn1zLmdhbGxlcnkuc2F2ZShPLnVybCwoKT0+e3MubmF0aXZlVUkudG9hc3QoeSgidW5pLnByZXZpZXdJbWFnZS5zYXZlLnN1Y2Nlc3MiKSl9LGZ1bmN0aW9uKCl7cy5uYXRpdmVVSS50b2FzdCh5KCJ1bmkucHJldmlld0ltYWdlLnNhdmUuZmFpbCIpKX0pfWVsc2UgYmUmJkcuaXNGdW5jdGlvbihhLmZhaWwpJiZhLmZhaWwoe2Vyck1zZzoic2hvd0FjdGlvblNoZWV0OmZhaWwgY2FuY2VsIn0pfSl9fSksdSgpfSxyRSxuRSksSUE9VGUoaUUsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57dHJ5e3MubmF0aXZlVUkuY2xvc2VQcmV2aWV3SW1hZ2UoKSx0KCl9Y2F0Y2gocil7bigpfX0pLE1mLGxjPSExLERmLGNjPShlLHQ9e30pPT57a0EoRy5leHRlbmQoe3N0YXRlOmV9LHQpKX0semM9e3N0YXJ0KHtkdXJhdGlvbjplPTZlNCxzYW1wbGVSYXRlOnQsbnVtYmVyT2ZDaGFubmVsczpuLGVuY29kZUJpdFJhdGU6cixmb3JtYXQ6YT0ibXAzIixmcmFtZVNpemU6dX09e30pe2lmKGxjKXJldHVybiBjYygic3RhcnQiKTtNZj1zLmF1ZGlvLmdldFJlY29yZGVyKCksTWYucmVjb3JkKHtmb3JtYXQ6YSxzYW1wbGVyYXRlOnQ/U3RyaW5nKHQpOnZvaWQgMCxmaWxlbmFtZTptcisiL3JlY29yZGVyLyJ9LGc9PmNjKCJzdG9wIix7dGVtcEZpbGVQYXRoOmd9KSxnPT5jYygiZXJyb3IiLHtlcnJNc2c6Zy5tZXNzYWdlfSkpLERmPU4oKCk9Pnt6Yy5zdG9wKCl9LGUpLGNjKCJzdGFydCIpLGxjPSEwfSxzdG9wKCl7bGMmJihNZi5zdG9wKCksbGM9ITEsRGYmJkUoRGYpKX0scGF1c2UoKXtsYyYmY2MoImVycm9yIix7ZXJyTXNnOiJVbnN1cHBvcnRlZCBvcGVyYXRpb246IHBhdXNlIn0pfSxyZXN1bWUoKXtsYyYmY2MoImVycm9yIix7ZXJyTXNnOiJVbnN1cHBvcnRlZCBvcGVyYXRpb246IHJlc3VtZSJ9KX19LEFsPXtwYXVzZTpudWxsLHJlc3VtZTpudWxsLHN0YXJ0Om51bGwsc3RvcDpudWxsLGVycm9yOm51bGx9O2Z1bmN0aW9uIGtBKGUpe2xldCB0PWUuc3RhdGU7ZGVsZXRlIGUuc3RhdGUsZGVsZXRlIGUuZXJyTXNnLHQmJkcuaXNGdW5jdGlvbihBbFt0XSkmJkFsW3RdKGUpfWNsYXNzIFJBe2NvbnN0cnVjdG9yKCl7fW9uRXJyb3IodCl7QWwuZXJyb3I9dH1vbkZyYW1lUmVjb3JkZWQodCl7fW9uSW50ZXJydXB0aW9uQmVnaW4odCl7fW9uSW50ZXJydXB0aW9uRW5kKHQpe31vblBhdXNlKHQpe0FsLnBhdXNlPXR9b25SZXN1bWUodCl7QWwucmVzdW1lPXR9b25TdGFydCh0KXtBbC5zdGFydD10fW9uU3RvcCh0KXtBbC5zdG9wPXR9cGF1c2UoKXt6Yy5wYXVzZSgpfXJlc3VtZSgpe3pjLnJlc3VtZSgpfXN0YXJ0KHQ9e30pe3pjLnN0YXJ0KHQpfXN0b3AoKXt6Yy5zdG9wKCl9fWxldCB6Zyx4QT1NdChnRSwoKT0+emd8fCh6Zz1uZXcgUkEpKSxCQT1UZShmRSwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntzLmdhbGxlcnkuc2F2ZShlLmZpbGVQYXRoLHdsKHQpLENyKG4pKX0saEUsZEUpLExBPVRlKGxFLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e3MuZ2FsbGVyeS5zYXZlKGUuZmlsZVBhdGgsd2wodCksQ3IobikpfSx1RSxjRSksTUE9VGUocEUsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0IHI9YCR7bXJ9L2NvbXByZXNzZWQvJHtEYXRlLm5vdygpfV8ke2ZpKGUuc3JjKX1gLHtjb21wcmVzc2VkV2lkdGg6YSxjb21wcmVzc2VkSGVpZ2h0OnV9PWU7dHlwZW9mIGE9PSJudW1iZXIiJiYoZS53aWR0aD1hKyJweCIpLHR5cGVvZiB1PT0ibnVtYmVyIiYmKGUuaGVpZ2h0PXUrInB4Iikscy56aXAuY29tcHJlc3NJbWFnZShHLmV4dGVuZCh7fSxlLHtkc3Q6cn0pLCgpPT57dCh7dGVtcEZpbGVQYXRoOnJ9KX0sbil9LG1FLHZFKSxEQT1UZShfRSwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1gJHttcn0vY29tcHJlc3NlZC8ke0RhdGUubm93KCl9XyR7ZmkoZS5zcmMpfWA7cy56aXAuY29tcHJlc3NWaWRlbyhHLmV4dGVuZCh7fSxlLHtmaWxlbmFtZTpyfSksYT0+e3Qoe3RlbXBGaWxlUGF0aDpyLHNpemU6YS5zaXplfSl9LG4pfSx5RSxiRSk7ZnVuY3Rpb24gRkEoZSl7cmV0dXJuIG5ldyBQcm9taXNlKCh0LG4pPT57cy5pby5yZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJMKGUsZnVuY3Rpb24ocil7ci5nZXRNZXRhZGF0YSh0LG4sITEpfSxuKX0pfWxldCBWQT1UZShHMCwoe2NvdW50OmUsc2l6ZVR5cGU6dCxzb3VyY2VUeXBlOm4sY3JvcDpyfT17fSx7cmVzb2x2ZTphLHJlamVjdDp1fSk9PntQcigpO2xldHt0Omd9PXFlKCkseT1Dcih1KTtmdW5jdGlvbiBNKGhlKXtsZXQgYmU9W10sUGU9W107UHJvbWlzZS5hbGwoaGUubWFwKGd0PT5GQShndCkpKS50aGVuKGd0PT57Z3QuZm9yRWFjaCgoeXQsWnQpPT57bGV0IFZ0PWhlW1p0XTtQZS5wdXNoKFZ0KSxiZS5wdXNoKHtwYXRoOlZ0LHNpemU6eXQuc2l6ZX0pfSksYSh7dGVtcEZpbGVQYXRoczpQZSx0ZW1wRmlsZXM6YmV9KX0pLmNhdGNoKHkpfWZ1bmN0aW9uIE8oKXtzLmNhbWVyYS5nZXRDYW1lcmEoKS5jYXB0dXJlSW1hZ2UoYmU9Pk0oW2JlXSkseSx7ZmlsZW5hbWU6bXIrIi9jYW1lcmEvIixyZXNvbHV0aW9uOiJoaWdoIixjcm9wOnIsc2l6ZVR5cGU6dH0pfWZ1bmN0aW9uIHgoKXtzLmdhbGxlcnkucGljaygoe2ZpbGVzOmhlfSk9Pk0oaGUpLHkse21heGltdW06ZSxtdWx0aXBsZTohMCxzeXN0ZW06ITEsZmlsZW5hbWU6bXIrIi9nYWxsZXJ5LyIscGVybWlzc2lvbkFsZXJ0OiEwLGNyb3A6cixzaXplVHlwZTp0fSl9aWYobi5sZW5ndGg9PT0xKXtpZihuLmluY2x1ZGVzKCJhbGJ1bSIpKXt4KCk7cmV0dXJufWVsc2UgaWYobi5pbmNsdWRlcygiY2FtZXJhIikpe08oKTtyZXR1cm59fXMubmF0aXZlVUkuYWN0aW9uU2hlZXQoe2NhbmNlbDpnKCJ1bmkuY2hvb3NlSW1hZ2UuY2FuY2VsIiksYnV0dG9uczpbe3RpdGxlOmcoInVuaS5jaG9vc2VJbWFnZS5zb3VyY2VUeXBlLmNhbWVyYSIpfSx7dGl0bGU6ZygidW5pLmNob29zZUltYWdlLnNvdXJjZVR5cGUuYWxidW0iKX1dfSxoZT0+e3N3aXRjaChoZS5pbmRleCl7Y2FzZSAxOk8oKTticmVhaztjYXNlIDI6eCgpO2JyZWFrO2RlZmF1bHQ6eSgpO2JyZWFrfX0pfSxZMCxxMCksVUE9VGUoSzAsKHtzb3VyY2VUeXBlOmUsY29tcHJlc3NlZDp0LG1heER1cmF0aW9uOm4sY2FtZXJhOnJ9LHtyZXNvbHZlOmEscmVqZWN0OnV9KT0+e3VvKCk7bGV0e3Q6Z309cWUoKSx5PUNyKHUpO2Z1bmN0aW9uIE0oaGUpe3MuaW8uZ2V0VmlkZW9JbmZvKHtmaWxlUGF0aDpoZSxzdWNjZXNzKGJlKXtsZXQgUGU9e2Vyck1zZzoiY2hvb3NlVmlkZW86b2siLHRlbXBGaWxlUGF0aDpoZSxzaXplOmJlLnNpemUsZHVyYXRpb246YmUuZHVyYXRpb24sd2lkdGg6YmUud2lkdGgsaGVpZ2h0OmJlLmhlaWdodH07YShQZSl9LGZhaWw6eX0pfWZ1bmN0aW9uIE8oKXtzLmdhbGxlcnkucGljaygoe2ZpbGVzOmhlfSk9Pk0oaGVbMF0pLHkse2ZpbHRlcjoidmlkZW8iLHN5c3RlbTohMSxtdWx0aXBsZTohMCxtYXhpbXVtOjEsZmlsZW5hbWU6bXIrIi9nYWxsZXJ5LyIscGVybWlzc2lvbkFsZXJ0OiEwLHZpZGVvQ29tcHJlc3M6dH0pfWZ1bmN0aW9uIHgoKXtzLmNhbWVyYS5nZXRDYW1lcmEoKS5zdGFydFZpZGVvQ2FwdHVyZShNLHkse2luZGV4OnI9PT0iZnJvbnQiPyIyIjoiMSIsdmlkZW9NYXhpbXVtRHVyYXRpb246bixmaWxlbmFtZTptcisiL2NhbWVyYS8iLHZpZGVvQ29tcHJlc3M6dH0pfWlmKGUubGVuZ3RoPT09MSl7aWYoZS5pbmNsdWRlcygiYWxidW0iKSl7TygpO3JldHVybn1lbHNlIGlmKGUuaW5jbHVkZXMoImNhbWVyYSIpKXt4KCk7cmV0dXJufX1zLm5hdGl2ZVVJLmFjdGlvblNoZWV0KHtjYW5jZWw6ZygidW5pLmNob29zZVZpZGVvLmNhbmNlbCIpLGJ1dHRvbnM6W3t0aXRsZTpnKCJ1bmkuY2hvb3NlVmlkZW8uc291cmNlVHlwZS5jYW1lcmEiKX0se3RpdGxlOmcoInVuaS5jaG9vc2VWaWRlby5zb3VyY2VUeXBlLmFsYnVtIil9XX0saGU9Pntzd2l0Y2goaGUuaW5kZXgpe2Nhc2UgMTp4KCk7YnJlYWs7Y2FzZSAyOk8oKTticmVhaztkZWZhdWx0OnkoKTticmVha319KX0sWjAsSjApLCRBPVRlKEYwLChlLHtyZXNvbHZlOnR9KT0+e3Mua2V5LnNob3dTb2Z0S2V5Ym9yZCgpLHQoKX0pLEhBPVRlKEQwLChlLHtyZXNvbHZlOnR9KT0+e3Mua2V5LmhpZGVTb2Z0S2V5Ym9yZCgpLHQoKX0pO2Z1bmN0aW9uIFdnKGUpe3N0Lmludm9rZU9uQ2FsbGJhY2sobmUuT05fS0VZQk9BUkRfSEVJR0hUX0NIQU5HRSxlKX1sZXQgakE9RG4obmUuT05fS0VZQk9BUkRfSEVJR0hUX0NIQU5HRSwoKT0+e3N0Lm9uKG5lLk9OX0tFWUJPQVJEX0hFSUdIVF9DSEFOR0UsV2cpfSksekE9WnIobmUuT05fS0VZQk9BUkRfSEVJR0hUX0NIQU5HRSwoKT0+e3N0Lm9mZihuZS5PTl9LRVlCT0FSRF9IRUlHSFRfQ0hBTkdFLFdnKX0pO2NsYXNzIFdBe2NvbnN0cnVjdG9yKHQpe3RoaXMuX2NhbGxiYWNrcz1bXSx0aGlzLl9kb3dubG9hZGVyPXQsdC5hZGRFdmVudExpc3RlbmVyKCJzdGF0ZWNoYW5nZWQiLChuLHIpPT57bi5kb3dubG9hZGVkU2l6ZSYmbi50b3RhbFNpemUmJnRoaXMuX2NhbGxiYWNrcy5mb3JFYWNoKGE9PnthKHtwcm9ncmVzczpNYXRoLnJvdW5kKG4uZG93bmxvYWRlZFNpemUvbi50b3RhbFNpemUqMTAwKSx0b3RhbEJ5dGVzV3JpdHRlbjpuLmRvd25sb2FkZWRTaXplLHRvdGFsQnl0ZXNFeHBlY3RlZFRvV3JpdGU6bi50b3RhbFNpemV9KX0pfSl9YWJvcnQoKXt0aGlzLl9kb3dubG9hZGVyLmFib3J0KCl9b25Qcm9ncmVzc1VwZGF0ZSh0KXshRy5pc0Z1bmN0aW9uKHQpfHx0aGlzLl9jYWxsYmFja3MucHVzaCh0KX1vZmZQcm9ncmVzc1VwZGF0ZSh0KXtsZXQgbj10aGlzLl9jYWxsYmFja3MuaW5kZXhPZih0KTtuPj0wJiZ0aGlzLl9jYWxsYmFja3Muc3BsaWNlKG4sMSl9b25IZWFkZXJzUmVjZWl2ZWQodCl7dGhyb3cgbmV3IEVycm9yKCJNZXRob2Qgbm90IGltcGxlbWVudGVkLiIpfW9mZkhlYWRlcnNSZWNlaXZlZCh0KXt0aHJvdyBuZXcgRXJyb3IoIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuIil9fWxldCBHQT1FcihrRSwoe3VybDplLGhlYWRlcjp0LHRpbWVvdXQ6bn0se3Jlc29sdmU6cixyZWplY3Q6YX0pPT57bj0obnx8SS5uZXR3b3JrVGltZW91dCYmSS5uZXR3b3JrVGltZW91dC5yZXF1ZXN0fHw2MCoxZTMpLzFlMztsZXQgdT1zLmRvd25sb2FkZXIuY3JlYXRlRG93bmxvYWQoZSx7dGltZW91dDpuLGZpbGVuYW1lOm1yKyIvZG93bmxvYWQvIixyZXRyeTowLHJldHJ5SW50ZXJ2YWw6MH0sKHksTSk9PntNP3Ioe3RlbXBGaWxlUGF0aDp5LmZpbGVuYW1lLHN0YXR1c0NvZGU6TX0pOmEoYHN0YXR1c0NvZGU6ICR7TX1gKX0pLGc9bmV3IFdBKHUpO2ZvcihsZXQgeSBpbiB0KUcuaGFzT3duKHQseSkmJnUuc2V0UmVxdWVzdEhlYWRlcih5LHRbeV0pO3JldHVybiB1LnN0YXJ0KCksZ30seEUsUkUpLHFBPWU9PntsZXQgdD1lWyJTZXQtQ29va2llIl18fGVbInNldC1jb29raWUiXSxuPVtdO2lmKCF0KXJldHVybltdO3RbMF09PT0iWyImJnRbdC5sZW5ndGgtMV09PT0iXSImJih0PXQuc2xpY2UoMSwtMSkpO2xldCByPXQuc3BsaXQoIjsiKTtmb3IobGV0IGE9MDthPHIubGVuZ3RoO2ErKylyW2FdLmluZGV4T2YoIkV4cGlyZXM9IikhPT0tMXx8clthXS5pbmRleE9mKCJleHBpcmVzPSIpIT09LTE/bi5wdXNoKHJbYV0ucmVwbGFjZSgiLCIsIiIpKTpuLnB1c2goclthXSk7cmV0dXJuIG49bi5qb2luKCI7Iikuc3BsaXQoIiwiKSxufTtmdW5jdGlvbiBZQShlLHQpe2lmKEcuaXNTdHJpbmcoZS5kYXRhKSYmZS5kYXRhLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKGUuZGF0YT1lLmRhdGEuc2xpY2UoMSkpLGUuc3RhdHVzQ29kZT1wYXJzZUludChTdHJpbmcoZS5zdGF0dXNDb2RlKSwxMCksRy5pc1BsYWluT2JqZWN0KGUuaGVhZGVyKSYmKGUuaGVhZGVyPU9iamVjdC5rZXlzKGUuaGVhZGVyKS5yZWR1Y2UoZnVuY3Rpb24obixyKXtsZXQgYT1lLmhlYWRlcltyXTtyZXR1cm4gRy5pc0FycmF5KGEpP25bcl09YS5qb2luKCIsIik6Ry5pc1N0cmluZyhhKSYmKG5bcl09YSksbn0se30pKSx0LmRhdGFUeXBlJiZ0LmRhdGFUeXBlLnRvTG93ZXJDYXNlKCk9PT0ianNvbiIpdHJ5e2UuZGF0YT1KU09OLnBhcnNlKGUuZGF0YSl9Y2F0Y2gobil7fXJldHVybiBlfWNsYXNzIEtBe2NvbnN0cnVjdG9yKHQpe3RoaXMuX3JlcXVlc3RUYXNrPXR9YWJvcnQoKXt0aGlzLl9yZXF1ZXN0VGFzay5hYm9ydCgpfW9mZkhlYWRlcnNSZWNlaXZlZCgpe31vbkhlYWRlcnNSZWNlaXZlZCgpe319bGV0IEpBPUVyKEVFLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldHtoZWFkZXI6cixtZXRob2Q6YSxkYXRhOnUsdGltZW91dDpnLHVybDp5LHJlc3BvbnNlVHlwZTpNLHNzbFZlcmlmeTpPLGZpcnN0SXB2NDp4LHRsczpoZX09ZSxiZTtmb3IobGV0IGF0IGluIHIpaWYoYXQudG9Mb3dlckNhc2UoKT09PSJjb250ZW50LXR5cGUiKXtiZT1yW2F0XTticmVha31hIT09IkdFVCImJmJlJiZiZS5pbmRleE9mKCJhcHBsaWNhdGlvbi9qc29uIik9PT0wJiZHLmlzUGxhaW5PYmplY3QodSkmJih1PUpTT04uc3RyaW5naWZ5KHUpKTtsZXQgUGU9bGEoInN0cmVhbSIpLGd0PXt9LHl0LFp0LFZ0PSExO2ZvcihsZXQgYXQgaW4gcilpZighVnQmJmF0LnRvTG93ZXJDYXNlKCk9PT0iY29udGVudC10eXBlIil7aWYoVnQ9ITAsZ3RbIkNvbnRlbnQtVHlwZSJdPXJbYXRdLGEhPT0iR0VUIiYmclthdF0uaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik9PT0wJiYhRy5pc1N0cmluZyh1KSYmISh1IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXtsZXQgWHQ9W107Zm9yKGxldCAkdCBpbiB1KUcuaGFzT3duKHUsJHQpJiZYdC5wdXNoKGVuY29kZVVSSUNvbXBvbmVudCgkdCkrIj0iK2VuY29kZVVSSUNvbXBvbmVudCh1WyR0XSkpO3U9WHQuam9pbigiJiIpfX1lbHNlIGd0W2F0XT1yW2F0XTshVnQmJmE9PT0iUE9TVCImJihndFsiQ29udGVudC1UeXBlIl09ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOCIpLGcmJih5dD1OKCgpPT57WnQ9ITAsbigidGltZW91dCIpfSxnKzIwMCkpO2xldCB3bj17bWV0aG9kOmEsdXJsOnkudHJpbSgpLGhlYWRlcnM6Z3QsdHlwZTpNPT09ImFycmF5YnVmZmVyIj8iYmFzZTY0IjoidGV4dCIsdGltZW91dDpnfHw2ZTUsc3NsVmVyaWZ5OiFPLGZpcnN0SXB2NDp4LHRsczpoZX0sYm49ITE7YSE9PSJHRVQiJiYodG9TdHJpbmcuY2FsbCh1KT09PSJbb2JqZWN0IEFycmF5QnVmZmVyXSI/Ym49ITA6d24uYm9keT1HLmlzU3RyaW5nKHUpP3U6SlNPTi5zdHJpbmdpZnkodSkpO2xldCB4dD0oe29rOmF0LHN0YXR1czpYdCxkYXRhOiR0LGhlYWRlcnM6S3QsZXJyb3JNc2c6anR9KT0+e2lmKFp0KXJldHVybjt5dCYmRSh5dCk7bGV0IEpuPVh0O2lmKEpuPjApdChZQSh7ZGF0YTphdCYmTT09PSJhcnJheWJ1ZmZlciI/c28oJHQpOiR0LHN0YXR1c0NvZGU6Sm4saGVhZGVyOkt0LGNvb2tpZXM6cUEoS3QpfSxlKSk7ZWxzZXtsZXQgUXQ9ImFib3J0IHN0YXR1c0NvZGU6IitKbjtqdCYmKFF0PVF0KyIgIitqdCksbihRdCl9fTtyZXR1cm4gYm4/UGUuZmV0Y2hXaXRoQXJyYXlCdWZmZXIoeyJAdHlwZSI6ImJpbmFyeSIsYmFzZTY0OmxvKHUpfSx3bix4dCk6UGUuZmV0Y2god24seHQpLG5ldyBLQSh7YWJvcnQoKXtadD0hMCx5dCYmRSh5dCksbigiYWJvcnQiKX19KX0sVEUsT0UpLFpBPVRlKFBFLCh7Y2VydGlmaWNhdGVzOmV9LHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xhKCJzdHJlYW0iKS5jb25maWdNVExTKGUsKHt0eXBlOmEsY29kZTp1LG1lc3NhZ2U6Z30pPT57c3dpdGNoKGEpe2Nhc2Uic3VjY2VzcyI6dCh7Y29kZTp1fSk7YnJlYWs7Y2FzZSJmYWlsIjpuKGcse2NvZGU6dX0pO2JyZWFrfX0pfSxORSxJRSksdWM9W10sZmM9e30sRmY9e29wZW46IiIsY2xvc2U6IiIsZXJyb3I6IiIsbWVzc2FnZToiIn0sV2M7ZnVuY3Rpb24gWEEoZSl7bGV0IHQ9U3RyaW5nKERhdGUubm93KCkpLG47dHJ5e1djfHwoV2M9bGEoInVuaS13ZWJTb2NrZXQiKSxRQShXYykpLFdjLldlYlNvY2tldCh7aWQ6dCx1cmw6ZS51cmwscHJvdG9jb2w6Ry5pc0FycmF5KGUucHJvdG9jb2xzKT9lLnByb3RvY29scy5qb2luKCIsIik6ZS5wcm90b2NvbHMsaGVhZGVyOmUuaGVhZGVyfSl9Y2F0Y2gocil7bj1yfXJldHVybntzb2NrZXQ6V2Msc29ja2V0SWQ6dCxlcnJNc2c6bn19ZnVuY3Rpb24gUUEoZSl7ZS5vbm9wZW4odD0+e2xldCBuPWZjW3QuaWRdOyFufHxuLl9zb2NrZXRPbk9wZW4oKX0pLGUub25tZXNzYWdlKHQ9PntsZXQgbj1mY1t0LmlkXTshbnx8bi5fc29ja2V0T25NZXNzYWdlKHQpfSksZS5vbmVycm9yKHQ9PntsZXQgbj1mY1t0LmlkXTshbnx8bi5fc29ja2V0T25FcnJvcigpfSksZS5vbmNsb3NlKHQ9PntsZXR7aWQ6bixjb2RlOnIscmVhc29uOmF9PXQsdT1mY1tuXTshdXx8dS5fc29ja2V0T25DbG9zZSh7Y29kZTpyLHJlYXNvbjphfSl9KX1jbGFzcyBlVHtjb25zdHJ1Y3Rvcih0LG4pe3RoaXMuaWQ9bix0aGlzLl9zb2NrZXQ9dCx0aGlzLl9jYWxsYmFja3M9e29wZW46W10sY2xvc2U6W10sZXJyb3I6W10sbWVzc2FnZTpbXX0sdGhpcy5DTE9TRUQ9Myx0aGlzLkNMT1NJTkc9Mix0aGlzLkNPTk5FQ1RJTkc9MCx0aGlzLk9QRU49MSx0aGlzLnJlYWR5U3RhdGU9dGhpcy5DTE9TRUQsISF0aGlzLl9zb2NrZXR9X3NvY2tldE9uT3Blbigpe3RoaXMucmVhZHlTdGF0ZT10aGlzLk9QRU4sdGhpcy5zb2NrZXRTdGF0ZUNoYW5nZSgib3BlbiIpfV9zb2NrZXRPbk1lc3NhZ2UodCl7dGhpcy5zb2NrZXRTdGF0ZUNoYW5nZSgibWVzc2FnZSIse2RhdGE6dHlwZW9mIHQuZGF0YT09Im9iamVjdCI/c28odC5kYXRhLmJhc2U2NCk6dC5kYXRhfSl9X3NvY2tldE9uRXJyb3IoKXt0aGlzLnNvY2tldFN0YXRlQ2hhbmdlKCJlcnJvciIpLHRoaXMub25FcnJvck9yQ2xvc2UoKX1fc29ja2V0T25DbG9zZSh0KXt0aGlzLnNvY2tldFN0YXRlQ2hhbmdlKCJjbG9zZSIsdCksdGhpcy5vbkVycm9yT3JDbG9zZSgpfW9uRXJyb3JPckNsb3NlKCl7dGhpcy5yZWFkeVN0YXRlPXRoaXMuQ0xPU0VELGRlbGV0ZSBmY1t0aGlzLmlkXTtsZXQgdD11Yy5pbmRleE9mKHRoaXMpO3Q+PTAmJnVjLnNwbGljZSh0LDEpfXNvY2tldFN0YXRlQ2hhbmdlKHQsbj17fSl7bGV0e2NvZGU6cixyZWFzb246YX09bix1PXQ9PT0ibWVzc2FnZSI/e2RhdGE6bi5kYXRhfTp0PT09ImNsb3NlIj97Y29kZTpyLHJlYXNvbjphfTp7fTt0aGlzPT09dWNbMF0mJkZmW3RdJiZzdC5pbnZva2VPbkNhbGxiYWNrKEZmW3RdLHUpLHRoaXMuX2NhbGxiYWNrc1t0XS5mb3JFYWNoKGc9PntHLmlzRnVuY3Rpb24oZykmJmcodSl9KX1zZW5kKHQsbj0hMCl7dGhpcy5yZWFkeVN0YXRlIT09dGhpcy5PUEVOJiZuZS5jYWxsT3B0aW9ucyh0LCJzZW5kU29ja2V0TWVzc2FnZTpmYWlsIFdlYlNvY2tldCBpcyBub3QgY29ubmVjdGVkIik7dHJ5e3RoaXMuX3NvY2tldC5zZW5kKHtpZDp0aGlzLmlkLGRhdGE6dHlwZW9mIHQuZGF0YT09Im9iamVjdCI/eyJAdHlwZSI6ImJpbmFyeSIsYmFzZTY0OmxvKHQuZGF0YSl9OnQuZGF0YX0pLG4mJm5lLmNhbGxPcHRpb25zKHQsInNlbmRTb2NrZXRNZXNzYWdlOm9rIil9Y2F0Y2gocil7biYmbmUuY2FsbE9wdGlvbnModCxgc2VuZFNvY2tldE1lc3NhZ2U6ZmFpbCAke3J9YCl9fWNsb3NlKHQsbj0hMCl7dGhpcy5yZWFkeVN0YXRlPXRoaXMuQ0xPU0lORzt0cnl7dGhpcy5fc29ja2V0LmNsb3NlKEcuZXh0ZW5kKHtpZDp0aGlzLmlkLGFyZ3M6dH0pKSxuJiZuZS5jYWxsT3B0aW9ucyh0LCJjbG9zZVNvY2tldDpvayIpfWNhdGNoKHIpe24mJm5lLmNhbGxPcHRpb25zKHQsYGNsb3NlU29ja2V0OmZhaWwgJHtyfWApfX1vbk9wZW4odCl7dGhpcy5fY2FsbGJhY2tzLm9wZW4ucHVzaCh0KX1vbkNsb3NlKHQpe3RoaXMuX2NhbGxiYWNrcy5jbG9zZS5wdXNoKHQpfW9uRXJyb3IodCl7dGhpcy5fY2FsbGJhY2tzLmVycm9yLnB1c2godCl9b25NZXNzYWdlKHQpe3RoaXMuX2NhbGxiYWNrcy5tZXNzYWdlLnB1c2godCl9fWxldCB0VD1FcihERSwoe3VybDplLHByb3RvY29sczp0LGhlYWRlcjpuLG1ldGhvZDpyfSx7cmVzb2x2ZTphLHJlamVjdDp1fSk9PntsZXR7c29ja2V0Omcsc29ja2V0SWQ6eSxlcnJNc2c6TX09WEEoe3VybDplLHByb3RvY29sczp0LGhlYWRlcjpuLG1ldGhvZDpyfSksTz1uZXcgZVQoZyx5KTtyZXR1cm4gTT9OKCgpPT57dShNKX0sMCk6KHVjLnB1c2goTyksZmNbeV09TyksTigoKT0+e2EoKX0sMCksT30sVkUsRkUpLG5UPVRlKFVFLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldCByPXVjWzBdO2lmKCFyfHxyLnJlYWR5U3RhdGUhPT1yLk9QRU4pe24oIldlYlNvY2tldCBpcyBub3QgY29ubmVjdGVkIik7cmV0dXJufXIuc2VuZCh7ZGF0YTplLmRhdGF9LCExKSx0KCl9LCRFKSxyVD1UZShIRSwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj11Y1swXTtpZighcil7bigiV2ViU29ja2V0IGlzIG5vdCBjb25uZWN0ZWQiKTtyZXR1cm59ci5yZWFkeVN0YXRlPXIuQ0xPU0lORyxyLmNsb3NlKGUsITEpLHQoKX0sakUpO2Z1bmN0aW9uIGJ1KGUpe2xldCB0PWBvblNvY2tldCR7Ry5jYXBpdGFsaXplKGUpfWA7cmV0dXJuIERuKHQsKCk9PntGZltlXT10fSl9bGV0IGlUPWJ1KCJvcGVuIiksb1Q9YnUoImVycm9yIiksYVQ9YnUoIm1lc3NhZ2UiKSxzVD1idSgiY2xvc2UiKTtjbGFzcyBsVHtjb25zdHJ1Y3Rvcih0KXt0aGlzLl9jYWxsYmFja3M9W10sdGhpcy5fdXBsb2FkZXI9dCx0LmFkZEV2ZW50TGlzdGVuZXIoInN0YXRlY2hhbmdlZCIsKG4scik9PntuLnVwbG9hZGVkU2l6ZSYmbi50b3RhbFNpemUmJnRoaXMuX2NhbGxiYWNrcy5mb3JFYWNoKGE9PnthKHtwcm9ncmVzczpwYXJzZUludChTdHJpbmcobi51cGxvYWRlZFNpemUvbi50b3RhbFNpemUqMTAwKSksdG90YWxCeXRlc1NlbnQ6bi51cGxvYWRlZFNpemUsdG90YWxCeXRlc0V4cGVjdGVkVG9TZW5kOm4udG90YWxTaXplfSl9KX0pfWFib3J0KCl7dGhpcy5fdXBsb2FkZXIuYWJvcnQoKX1vblByb2dyZXNzVXBkYXRlKHQpeyFHLmlzRnVuY3Rpb24odCl8fHRoaXMuX2NhbGxiYWNrcy5wdXNoKHQpfW9uSGVhZGVyc1JlY2VpdmVkKCl7fW9mZlByb2dyZXNzVXBkYXRlKHQpe2xldCBuPXRoaXMuX2NhbGxiYWNrcy5pbmRleE9mKHQpO24+PTAmJnRoaXMuX2NhbGxiYWNrcy5zcGxpY2UobiwxKX1vZmZIZWFkZXJzUmVjZWl2ZWQoKXt9fWxldCBjVD1FcihCRSwoe3VybDplLHRpbWVvdXQ6dCxoZWFkZXI6bixmb3JtRGF0YTpyLGZpbGVzOmEsZmlsZVBhdGg6dSxuYW1lOmd9LHtyZXNvbHZlOnkscmVqZWN0Ok19KT0+e3Q9KHR8fEkubmV0d29ya1RpbWVvdXQmJkkubmV0d29ya1RpbWVvdXQudXBsb2FkRmlsZXx8NjAqMWUzKS8xZTM7bGV0IE89cy51cGxvYWRlci5jcmVhdGVVcGxvYWQoZSx7dGltZW91dDp0LHJldHJ5OjAscmV0cnlJbnRlcnZhbDowfSwoaGUsYmUpPT57YmU/eSh7ZGF0YTpoZS5yZXNwb25zZVRleHQsc3RhdHVzQ29kZTpiZX0pOk0oYHN0YXR1c0NvZGU6ICR7YmV9YCl9KTtmb3IobGV0IGhlIGluIG4pRy5oYXNPd24obixoZSkmJk8uc2V0UmVxdWVzdEhlYWRlcihoZSxTdHJpbmcobltoZV0pKTtmb3IobGV0IGhlIGluIHIpRy5oYXNPd24ocixoZSkmJk8uYWRkRGF0YShoZSxTdHJpbmcocltoZV0pKTthJiZhLmxlbmd0aD9hLmZvckVhY2goaGU9PntPLmFkZEZpbGUobW4oaGUudXJpKSx7a2V5OmhlLm5hbWV8fCJmaWxlIn0pfSk6Ty5hZGRGaWxlKG1uKHUpLHtrZXk6Z30pO2xldCB4PW5ldyBsVChPKTtyZXR1cm4gTy5zdGFydCgpLHh9LE1FLExFKSxacz17fSx1VD1bInBsYXkiLCJjYW5wbGF5IiwiZW5kZWQiLCJzdG9wIiwid2FpdGluZyIsInNlZWtpbmciLCJzZWVrZWQiLCJwYXVzZSJdLEdnPSJwbGF5YmFjayIsZlQ9MjAwLGRUPWU9PntsZXQgdD1ac1tlXTshdHx8dC5pbml0U3RhdGVDaGFnZXx8KHQuaW5pdFN0YXRlQ2hhZ2U9ITAsdC5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsbj0+e3FnKHtzdGF0ZToiZXJyb3IiLGF1ZGlvSWQ6ZSxlcnJNc2c6Ik1lZGlhRXJyb3IiLGVyckNvZGU6bi5jb2RlfSl9KSx1VC5mb3JFYWNoKG49Pnt0LmFkZEV2ZW50TGlzdGVuZXIobiwoKT0+e249PT0icGxheSI/dC5pc1N0b3BwZWQ9ITE6bj09PSJzdG9wIiYmKHQuaXNTdG9wcGVkPSEwKSxxZyh7c3RhdGU6bixhdWRpb0lkOmV9KX0pfSkpfTtmdW5jdGlvbiBoVCgpe2xldCBlPWAke0RhdGUubm93KCl9JHtNYXRoLnJhbmRvbSgpfWAsdD1ac1tlXT1zLmF1ZGlvLmNyZWF0ZVBsYXllcigiIik7cmV0dXJuIHQuc3JjPSIiLHQudm9sdW1lPTEsdC5zdGFydFRpbWU9MCx0LnNldFNlc3Npb25DYXRlZ29yeShHZykse2Vyck1zZzoiY3JlYXRlQXVkaW9JbnN0YW5jZTpvayIsYXVkaW9JZDplfX1mdW5jdGlvbiBnVCh7YXVkaW9JZDplLHNyYzp0LHN0YXJ0VGltZTpuLGF1dG9wbGF5OnI9ITEsbG9vcDphPSExLG9iZXlNdXRlU3dpdGNoOnUsdm9sdW1lOmcsc2Vzc2lvbkNhdGVnb3J5Onk9R2cscGxheWJhY2tSYXRlOk19KXtsZXQgTz1ac1tlXTtpZihPKXtsZXQgeD17bG9vcDphLGF1dG9wbGF5OnJ9O2lmKHQpe2xldCBoZT1tbih0KTtPLnNyYyE9PWhlJiYoTy5zcmM9eC5zcmM9aGUpfW4mJihPLnN0YXJ0VGltZT14LnN0YXJ0VGltZT1uKSx0eXBlb2YgZz09Im51bWJlciImJihPLnZvbHVtZT14LnZvbHVtZT1nKSxPLnNldFN0eWxlcyh4KSx5JiZPLnNldFNlc3Npb25DYXRlZ29yeSh5KSxNJiZPLnBsYXliYWNrUmF0ZSYmTy5wbGF5YmFja1JhdGUoTSksZFQoZSl9cmV0dXJue2Vyck1zZzoic2V0QXVkaW9TdGF0ZTpvayJ9fWZ1bmN0aW9uIHBUKHthdWRpb0lkOmV9KXtsZXQgdD1ac1tlXTtpZighdClyZXR1cm57ZXJyTXNnOiJnZXRBdWRpb1N0YXRlOmZhaWwifTtsZXR7c3JjOm4sc3RhcnRUaW1lOnIsdm9sdW1lOmF9PXQ7cmV0dXJue2Vyck1zZzoiZ2V0QXVkaW9TdGF0ZTpvayIsZHVyYXRpb246MWUzKih0LmdldER1cmF0aW9uKCl8fDApLGN1cnJlbnRUaW1lOnQuaXNTdG9wcGVkPzA6MWUzKnQuZ2V0UG9zaXRpb24oKSxwYXVzZWQ6dC5pc1BhdXNlZCgpLHNyYzpuLHZvbHVtZTphLHN0YXJ0VGltZToxZTMqcixidWZmZXJlZDoxZTMqdC5nZXRCdWZmZXJlZCgpfX1mdW5jdGlvbiB2VCh7b3BlcmF0aW9uVHlwZTplLGF1ZGlvSWQ6dCxjdXJyZW50VGltZTpufSl7bGV0IHI9WnNbdF07c3dpdGNoKGUpe2Nhc2UicGxheSI6Y2FzZSJwYXVzZSI6Y2FzZSJzdG9wIjpyW2U9PT0icGxheSImJnIuaXNQYXVzZWQoKT8icmVzdW1lIjplXSgpO2JyZWFrO2Nhc2Uic2VlayI6dHlwZW9mIG4hPSJ1bmRlZmluZWQiJiZyLnNlZWtUbyhuLzFlMyk7YnJlYWt9cmV0dXJue2Vyck1zZzoib3BlcmF0ZUF1ZGlvOm9rIn19bGV0IFZmPU9iamVjdC5jcmVhdGUobnVsbCkscWc9KHtzdGF0ZTplLGF1ZGlvSWQ6dCxlcnJNc2c6bixlcnJDb2RlOnJ9KT0+e2xldCBhPVZmW3RdO2lmKGEpaWYoJGYoYSxlLG4sciksZT09PSJwbGF5Iil7bGV0IHU9YS5jdXJyZW50VGltZTskZihhLCJ0aW1lVXBkYXRlIiksYS5fX3RpbWluZz1oKCgpPT57YS5jdXJyZW50VGltZSE9PXUmJiRmKGEsInRpbWVVcGRhdGUiKX0sZlQpfWVsc2UoZT09PSJwYXVzZSJ8fGU9PT0ic3RvcCJ8fGU9PT0iZXJyb3IiKSYmXyhhLl9fdGltaW5nKX0sbVQ9W3tuYW1lOiJzcmMiLGNhY2hlOiEwfSx7bmFtZToic3RhcnRUaW1lIixkZWZhdWx0OjAsY2FjaGU6ITB9LHtuYW1lOiJhdXRvcGxheSIsZGVmYXVsdDohMSxjYWNoZTohMH0se25hbWU6Imxvb3AiLGRlZmF1bHQ6ITEsY2FjaGU6ITB9LHtuYW1lOiJvYmV5TXV0ZVN3aXRjaCIsZGVmYXVsdDohMCxyZWFkb25seTohMCxjYWNoZTohMH0se25hbWU6ImR1cmF0aW9uIixyZWFkb25seTohMH0se25hbWU6ImN1cnJlbnRUaW1lIixyZWFkb25seTohMH0se25hbWU6InBhdXNlZCIscmVhZG9ubHk6ITB9LHtuYW1lOiJidWZmZXJlZCIscmVhZG9ubHk6ITB9LHtuYW1lOiJ2b2x1bWUifSx7bmFtZToicGxheWJhY2tSYXRlIixjYWNoZTohMH1dO2NsYXNzIFVme2NvbnN0cnVjdG9yKHQpe3RoaXMuaWQ9dCx0aGlzLl9jYWxsYmFja3M9e30sdGhpcy5fb3B0aW9ucz17fSxJaC5mb3JFYWNoKG49Pnt0aGlzLl9jYWxsYmFja3Nbbl09W119KSxtVC5mb3JFYWNoKG49PntsZXQgcj1uLm5hbWU7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMscix7Z2V0OigpPT57bGV0IGE9bi5jYWNoZT90aGlzLl9vcHRpb25zOnBUKHthdWRpb0lkOnRoaXMuaWR9KSx1PXIgaW4gYT9hW3JdOm4uZGVmYXVsdDtyZXR1cm4gdHlwZW9mIHU9PSJudW1iZXIiJiZyIT09InZvbHVtZSI/dS8xZTM6dX0sc2V0Om4ucmVhZG9ubHk/dm9pZCAwOmE9Pnt0aGlzLl9vcHRpb25zW3JdPWEsZ1QoRy5leHRlbmQoe30sdGhpcy5fb3B0aW9ucyx7YXVkaW9JZDp0aGlzLmlkfSkpfX0pfSksX1QoKX1wbGF5KCl7dGhpcy5fb3BlcmF0ZSgicGxheSIpfXBhdXNlKCl7dGhpcy5fb3BlcmF0ZSgicGF1c2UiKX1zdG9wKCl7dGhpcy5fb3BlcmF0ZSgic3RvcCIpfXNlZWsodCl7dGhpcy5fb3BlcmF0ZSgic2VlayIse2N1cnJlbnRUaW1lOnQqMWUzfSl9ZGVzdHJveSgpe18odGhpcy5fX3RpbWluZyksWnNbdGhpcy5pZF0mJihac1t0aGlzLmlkXS5jbG9zZSgpLGRlbGV0ZSBac1t0aGlzLmlkXSksZGVsZXRlIFZmW3RoaXMuaWRdfV9vcGVyYXRlKHQsbil7dlQoRy5leHRlbmQoe30sbix7YXVkaW9JZDp0aGlzLmlkLG9wZXJhdGlvblR5cGU6dH0pKX19bGV0IF9UPW5lLm9uY2UoKCk9PntJaC5mb3JFYWNoKGU9PntVZi5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCl7Ry5pc0Z1bmN0aW9uKHQpJiZ0aGlzLl9jYWxsYmFja3NbZV0ucHVzaCh0KX19KSxkYi5mb3JFYWNoKGU9PntVZi5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCl7bGV0IG49dGhpcy5fY2FsbGJhY2tzW2VdLHI9bi5pbmRleE9mKHQpO3I+PTAmJm4uc3BsaWNlKHIsMSl9fSl9KTtmdW5jdGlvbiAkZihlLHQsbixyKXtsZXQgYT1gb24ke0cuY2FwaXRhbGl6ZSh0KX1gO2UuX2NhbGxiYWNrc1thXS5mb3JFYWNoKHU9PntHLmlzRnVuY3Rpb24odSkmJnUodD09PSJlcnJvciI/e2Vyck1zZzpuLGVyckNvZGU6cn06e30pfSl9bGV0IGJUPU10KFVfLCgpPT57bGV0e2F1ZGlvSWQ6ZX09aFQoKSx0PW5ldyBVZihlKTtyZXR1cm4gVmZbZV09dCx0fSkseVQ9WyJjYW5wbGF5IiwicGxheSIsInBhdXNlIiwic3RvcCIsImVuZGVkIiwidGltZVVwZGF0ZSIsInByZXYiLCJuZXh0IiwiZXJyb3IiLCJ3YWl0aW5nIl0sWWc9e2NhbnBsYXk6W10scGxheTpbXSxwYXVzZTpbXSxzdG9wOltdLGVuZGVkOltdLHRpbWVVcGRhdGU6W10scHJldjpbXSxuZXh0OltdLGVycm9yOltdLHdhaXRpbmc6W119LGduLEhmPW51bGwsRVQ9MjUwLFNUPVsicGxheSIsInBhdXNlIiwiZW5kZWQiLCJzdG9wIiwiY2FucGxheSJdO2Z1bmN0aW9uIHdUKCl7eXUoKSxUbCh7c3RhdGU6InRpbWVVcGRhdGUifSksSGY9aCgoKT0+e1RsKHtzdGF0ZToidGltZVVwZGF0ZSJ9KX0sRVQpfWZ1bmN0aW9uIHl1KCl7SGYhPT1udWxsJiZfKEhmKX1mdW5jdGlvbiBDVCgpe2lmKGduKXJldHVybjtsZXQgZT1zdC5pbnZva2VPbkNhbGxiYWNrO2duPXMuYXVkaW8uY3JlYXRlUGxheWVyKHthdXRvcGxheTohMCxiYWNrZ3JvdW5kQ29udHJvbDohMH0pLGduLnNyYz1nbi50aXRsZT1nbi5lcG5hbWU9Z24uc2luZ2VyPWduLmNvdmVySW1nVXJsPWduLndlYlVybD0iIixnbi5zdGFydFRpbWU9MCxTVC5mb3JFYWNoKHQ9Pntnbi5hZGRFdmVudExpc3RlbmVyKHQsKCk9Pnt0PT09InBsYXkiPyhnbi5pc1N0b3BwZWQ9ITEsd1QoKSk6dD09PSJzdG9wIiYmKGduLmlzU3RvcHBlZD0hMCksKHQ9PT0icGF1c2UifHx0PT09ImVuZGVkInx8dD09PSJzdG9wIikmJnl1KCk7bGV0IG49YG9uTXVzaWMke3RbMF0udG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpfWA7ZShuLHtkYXRhVXJsOmduLnNyYyxlcnJNc2c6YCR7bn06b2tgfSksVGwoe3N0YXRlOnQsZGF0YVVybDpnbi5zcmN9KX0pfSksZ24uYWRkRXZlbnRMaXN0ZW5lcigid2FpdGluZyIsKCk9Pnt5dSgpLFRsKHtzdGF0ZToid2FpdGluZyIsZGF0YVVybDpnbi5zcmN9KX0pLGduLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIix0PT57eXUoKSxlKCJvbk11c2ljRXJyb3IiLHtkYXRhVXJsOmduLnNyYyxlcnJNc2c6IkVycm9yOiIrdC5tZXNzYWdlfSksVGwoe3N0YXRlOiJlcnJvciIsZGF0YVVybDpnbi5zcmMsZXJyTXNnOnQubWVzc2FnZSxlcnJDb2RlOnQuY29kZX0pfSksZ24uYWRkRXZlbnRMaXN0ZW5lcigicHJldiIsKCk9PntUbCh7c3RhdGU6InByZXYifSl9KSxnbi5hZGRFdmVudExpc3RlbmVyKCJuZXh0IiwoKT0+e1RsKHtzdGF0ZToibmV4dCJ9KX0pfWZ1bmN0aW9uIEFUKCl7bGV0IGU9e2R1cmF0aW9uOjAsY3VycmVudFRpbWU6MCxwYXVzZWQ6ITEsc3JjOiIiLGJ1ZmZlcmVkOjAsdGl0bGU6IiIsZXBuYW1lOiIiLHNpbmdlcjoiIixjb3ZlckltZ1VybDoiIix3ZWJVcmw6IiIsc3RhcnRUaW1lOjAsZXJyTXNnOiJnZXRCYWNrZ3JvdW5kQXVkaW9TdGF0ZTpvayJ9O2lmKGduKXtsZXQgdD17ZHVyYXRpb246Z24uZ2V0RHVyYXRpb24oKXx8MCxjdXJyZW50VGltZTpnbi5pc1N0b3BwZWQ/MDpnbi5nZXRQb3NpdGlvbigpLHBhdXNlZDpnbi5pc1BhdXNlZCgpLHNyYzpnbi5zcmMsYnVmZmVyZWQ6Z24uZ2V0QnVmZmVyZWQoKSx0aXRsZTpnbi50aXRsZSxlcG5hbWU6Z24uZXBuYW1lLHNpbmdlcjpnbi5zaW5nZXIsY292ZXJJbWdVcmw6Z24uY292ZXJJbWdVcmwsd2ViVXJsOmduLndlYlVybCxzdGFydFRpbWU6Z24uc3RhcnRUaW1lfTtlPUcuZXh0ZW5kKGUsdCl9cmV0dXJuIGV9ZnVuY3Rpb24gS2coZSx0KXtDVCgpO2xldCBuPVsic3JjIiwic3RhcnRUaW1lIiwiY292ZXJJbWdVcmwiLCJ3ZWJVcmwiLCJzaW5nZXIiLCJlcG5hbWUiLCJ0aXRsZSJdO2lmKHQ9PT0icGxheWJhY2tSYXRlIil7bGV0IGE9ZVt0XTtnbi5wbGF5YmFja1JhdGUmJmduLnBsYXliYWNrUmF0ZShwYXJzZUZsb2F0KGEpKTtyZXR1cm59bGV0IHI9e307T2JqZWN0LmtleXMoZSkuZm9yRWFjaChhPT57aWYobi5pbmRleE9mKGEpPj0wKXtsZXQgdT1lW2FdO2E9PT1uWzBdJiZ1JiYodT1tbih1KSksZ25bYV09clthXT11fX0pLGduLnNldFN0eWxlcyhyKX1mdW5jdGlvbiBUVCh7b3BlcmF0aW9uVHlwZTplLHNyYzp0LHBvc2l0aW9uOm4sYXBpOnI9Im9wZXJhdGVNdXNpY1BsYXllciIsdGl0bGU6YSxjb3ZlckltZ1VybDp1fSl7dmFyIGc9WyJyZXN1bWUiLCJwYXVzZSIsInN0b3AiXTtyZXR1cm4gZy5pbmRleE9mKGUpPjA/Z24mJmduW2VdKCk6ZT09PSJwbGF5Ij8oS2coe3NyYzp0LHN0YXJ0VGltZTpuLHRpdGxlOmEsY292ZXJJbWdVcmw6dX0pLGduLnBsYXkoKSk6ZT09PSJzZWVrIiYmZ24mJmduLnNlZWtUbyhuKSx7ZXJyTXNnOmAke3J9Om9rYH19ZnVuY3Rpb24gT1Qoe29wZXJhdGlvblR5cGU6ZSxzcmM6dCxzdGFydFRpbWU6bixjdXJyZW50VGltZTpyfSl7cmV0dXJuIFRUKHtvcGVyYXRpb25UeXBlOmUsc3JjOnQscG9zaXRpb246bnx8cnx8MCxhcGk6Im9wZXJhdGVCYWNrZ3JvdW5kQXVkaW8ifSl9ZnVuY3Rpb24gVGwoe3N0YXRlOmUsZXJyTXNnOnQsZXJyQ29kZTpuLGRhdGFVcmw6cn0pe1lnW2VdLmZvckVhY2goYT0+e0cuaXNGdW5jdGlvbihhKSYmYShlPT09ImVycm9yIj97ZXJyTXNnOnQsZXJyQ29kZTpufTp7fSl9KX1sZXQgUFQ9bmUub25jZSgoKT0+e3lULmZvckVhY2goZT0+e0pnLnByb3RvdHlwZVtgb24ke0cuY2FwaXRhbGl6ZShlKX1gXT1mdW5jdGlvbih0KXtZZ1tlXS5wdXNoKHQpfX0pfSksTlQ9W3tuYW1lOiJkdXJhdGlvbiIscmVhZG9ubHk6ITB9LHtuYW1lOiJjdXJyZW50VGltZSIscmVhZG9ubHk6ITB9LHtuYW1lOiJwYXVzZWQiLHJlYWRvbmx5OiEwfSx7bmFtZToic3JjIixjYWNoZTohMH0se25hbWU6InN0YXJ0VGltZSIsZGVmYXVsdDowLGNhY2hlOiEwfSx7bmFtZToiYnVmZmVyZWQiLHJlYWRvbmx5OiEwfSx7bmFtZToidGl0bGUiLGNhY2hlOiEwfSx7bmFtZToiZXBuYW1lIixjYWNoZTohMH0se25hbWU6InNpbmdlciIsY2FjaGU6ITB9LHtuYW1lOiJjb3ZlckltZ1VybCIsY2FjaGU6ITB9LHtuYW1lOiJ3ZWJVcmwiLGNhY2hlOiEwfSx7bmFtZToicHJvdG9jb2wiLHJlYWRvbmx5OiEwLGRlZmF1bHQ6Imh0dHAifSx7bmFtZToicGxheWJhY2tSYXRlIixkZWZhdWx0OjEsY2FjaGU6ITB9XTtjbGFzcyBKZ3tjb25zdHJ1Y3Rvcigpe3RoaXMuX29wdGlvbnM9e30sTlQuZm9yRWFjaCh0PT57bGV0IG49dC5uYW1lO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLG4se2dldDooKT0+e2xldCByPXQuY2FjaGU/dGhpcy5fb3B0aW9uczpBVCgpO3JldHVybiBuIGluIHI/cltuXTp0LmRlZmF1bHR9LHNldDp0LnJlYWRvbmx5P3ZvaWQgMDpyPT57dGhpcy5fb3B0aW9uc1tuXT1yLEtnKHRoaXMuX29wdGlvbnMsbil9fSl9KSxQVCgpfXBsYXkoKXt0aGlzLl9vcGVyYXRlKCJwbGF5Iil9cGF1c2UoKXt0aGlzLl9vcGVyYXRlKCJwYXVzZSIpfXN0b3AoKXt0aGlzLl9vcGVyYXRlKCJzdG9wIil9c2Vlayh0KXt0aGlzLl9vcGVyYXRlKCJzZWVrIix7Y3VycmVudFRpbWU6dH0pfV9vcGVyYXRlKHQsbil7T1QoRy5leHRlbmQoe30sbix7b3BlcmF0aW9uVHlwZTp0fSkpfX1sZXQgWmcsSVQ9TXQob3ksKCk9PlpnfHwoWmc9bmV3IEpnKSk7Y2xhc3Mga1R7Y29uc3RydWN0b3IodCxuKXt0aGlzLmlkPXQsdGhpcy5jdHg9bn1zdGFydCh0KXtyZXR1cm4gV24odGhpcy5jdHgsInN0YXJ0Iix0KX1zdG9wKHQpe3JldHVybiBXbih0aGlzLmN0eCwic3RvcCIsdCl9cGF1c2UodCl7cmV0dXJuIFduKHRoaXMuY3R4LCJwYXVzZSIsdCl9cmVzdW1lKHQpe3JldHVybiBXbih0aGlzLmN0eCwicmVzdW1lIix0KX1zd2l0Y2hDYW1lcmEodCl7cmV0dXJuIFduKHRoaXMuY3R4LCJzd2l0Y2hDYW1lcmEiLHQpfXNuYXBzaG90KHQpe3JldHVybiBXbih0aGlzLmN0eCwic25hcHNob3QiLHQpfXRvZ2dsZVRvcmNoKHQpe3JldHVybiBXbih0aGlzLmN0eCwidG9nZ2xlVG9yY2giLHQpfXBsYXlCR00odCl7cmV0dXJuIFluKHRoaXMuY3R4LCJwbGF5QkdNIix0KX1zdG9wQkdNKHQpe3JldHVybiBXbih0aGlzLmN0eCwic3RvcEJHTSIsdCl9cGF1c2VCR00odCl7cmV0dXJuIFduKHRoaXMuY3R4LCJwYXVzZUJHTSIsdCl9cmVzdW1lQkdNKHQpe3JldHVybiBXbih0aGlzLmN0eCwicmVzdW1lQkdNIix0KX1zZXRCR01Wb2x1bWUodCl7cmV0dXJuIFluKHRoaXMuY3R4LCJzZXRCR01Wb2x1bWUiLHQpfXN0YXJ0UHJldmlldyh0KXtyZXR1cm4gV24odGhpcy5jdHgsInN0YXJ0UHJldmlldyIsdCl9c3RvcFByZXZpZXcodCl7cmV0dXJuIFduKHRoaXMuY3R4LCJzdG9wUHJldmlldyIsdCl9fWZ1bmN0aW9uIFhzKGUsdCxuLHIpe3N0Lmludm9rZVZpZXdNZXRob2QoImxpdmVwdXNoZXIuIitlLHtsaXZlUHVzaGVySWQ6ZSx0eXBlOm4sZGF0YTpyfSx0KX1jbGFzcyBSVHtjb25zdHJ1Y3Rvcih0LG4pe3RoaXMuaWQ9dCx0aGlzLnBhZ2VJZD1ufXN0YXJ0KCl7WHModGhpcy5pZCx0aGlzLnBhZ2VJZCwic3RhcnQiKX1zdG9wKCl7WHModGhpcy5pZCx0aGlzLnBhZ2VJZCwic3RvcCIpfXBhdXNlKCl7WHModGhpcy5pZCx0aGlzLnBhZ2VJZCwicGF1c2UiKX1yZXN1bWUoKXtYcyh0aGlzLmlkLHRoaXMucGFnZUlkLCJyZXN1bWUiKX1zd2l0Y2hDYW1lcmEoKXtYcyh0aGlzLmlkLHRoaXMucGFnZUlkLCJzd2l0Y2hDYW1lcmEiKX1zdGFydFByZXZpZXcoKXtYcyh0aGlzLmlkLHRoaXMucGFnZUlkLCJwcmV2aWV3Iil9c3RvcFByZXZpZXcoKXtYcyh0aGlzLmlkLHRoaXMucGFnZUlkLCJzdG9wIil9c25hcHNob3QoKXtYcyh0aGlzLmlkLHRoaXMucGFnZUlkLCJzbmFwc2hvdCIpfX1sZXQgeFQ9TXQoJF8sKGUsdCk9PntpZih0LiRwYWdlLm1ldGEuaXNOVnVlKXtpZighdClyZXR1cm4gY29uc29sZS53YXJuKCJ1bmkuY3JlYXRlTGl2ZVB1c2hlckNvbnRleHQ6IDIgYXJndW1lbnRzIHJlcXVpcmVkLCBidXQgb25seSAxIHByZXNlbnQiKTtsZXQgbj1HbyhlLHQpO3JldHVybiBuP25ldyBrVChlLG4pOmNvbnNvbGUud2FybigiQ2FuIG5vdCBmaW5kIGAiK2UrImAiKX1yZXR1cm4gbmV3IFJUKGUsdC4kcGFnZS5pZCl9LEhfKTtmdW5jdGlvbiBCVChlLHQsbixyKXtmdW5jdGlvbiBhKHUpe3JldHVybiB1IGluc3RhbmNlb2Ygbj91Om5ldyBuKGZ1bmN0aW9uKGcpe2codSl9KX1yZXR1cm4gbmV3KG58fChuPVByb21pc2UpKShmdW5jdGlvbih1LGcpe2Z1bmN0aW9uIHkoeCl7dHJ5e08oci5uZXh0KHgpKX1jYXRjaChoZSl7ZyhoZSl9fWZ1bmN0aW9uIE0oeCl7dHJ5e08oci50aHJvdyh4KSl9Y2F0Y2goaGUpe2coaGUpfX1mdW5jdGlvbiBPKHgpe3guZG9uZT91KHgudmFsdWUpOmEoeC52YWx1ZSkudGhlbih5LE0pfU8oKHI9ci5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pfXR5cGVvZiBTdXBwcmVzc2VkRXJyb3I9PSJmdW5jdGlvbiImJlN1cHByZXNzZWRFcnJvcjtsZXQgJGk9My4xNDE1OTI2NTM1ODk3OTMsRXU9NjM3ODI0NSxTdT0uMDA2NjkzNDIxNjIyOTY1OTQzO2Z1bmN0aW9uIExUKGUsdCl7aWYodD0rdCxlPStlLFhnKGUsdCkpcmV0dXJuW2UsdF07bGV0IG49UWcoZS0xMDUsdC0zNSkscj1lcChlLTEwNSx0LTM1KSxhPXQvMTgwKiRpLHU9TWF0aC5zaW4oYSk7dT0xLVN1KnUqdTtsZXQgZz1NYXRoLnNxcnQodSk7bj1uKjE4MC8oRXUqKDEtU3UpLyh1KmcpKiRpKSxyPXIqMTgwLyhFdS9nKk1hdGguY29zKGEpKiRpKTtsZXQgeT10K24sTT1lK3I7cmV0dXJuW2UqMi1NLHQqMi15XX1mdW5jdGlvbiBNVChlLHQpe2lmKHQ9K3QsZT0rZSxYZyhlLHQpKXJldHVybltlLHRdO2xldCBuPVFnKGUtMTA1LHQtMzUpLHI9ZXAoZS0xMDUsdC0zNSksYT10LzE4MCokaSx1PU1hdGguc2luKGEpO3U9MS1TdSp1KnU7bGV0IGc9TWF0aC5zcXJ0KHUpO249bioxODAvKEV1KigxLVN1KS8odSpnKSokaSkscj1yKjE4MC8oRXUvZypNYXRoLmNvcyhhKSokaSk7bGV0IHk9dCtuO3JldHVybltlK3IseV19bGV0IFhnPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU8NzIuMDA0fHxlPjEzNy44MzQ3fHx0PC44MjkzfHx0PjU1LjgyNzF8fCExfSxRZz1mdW5jdGlvbihlLHQpe2xldCBuPS0xMDArMiplKzMqdCsuMip0KnQrLjEqZSp0Ky4yKk1hdGguc3FydChNYXRoLmFicyhlKSk7cmV0dXJuIG4rPSgyMCpNYXRoLnNpbig2KmUqJGkpKzIwKk1hdGguc2luKDIqZSokaSkpKjIvMyxuKz0oMjAqTWF0aC5zaW4odCokaSkrNDAqTWF0aC5zaW4odC8zKiRpKSkqMi8zLG4rPSgxNjAqTWF0aC5zaW4odC8xMiokaSkrMzIwKk1hdGguc2luKHQqJGkvMzApKSoyLzMsbn0sZXA9ZnVuY3Rpb24oZSx0KXtsZXQgbj0zMDArZSsyKnQrLjEqZSplKy4xKmUqdCsuMSpNYXRoLnNxcnQoTWF0aC5hYnMoZSkpO3JldHVybiBuKz0oMjAqTWF0aC5zaW4oNiplKiRpKSsyMCpNYXRoLnNpbigyKmUqJGkpKSoyLzMsbis9KDIwKk1hdGguc2luKGUqJGkpKzQwKk1hdGguc2luKGUvMyokaSkpKjIvMyxuKz0oMTUwKk1hdGguc2luKGUvMTIqJGkpKzMwMCpNYXRoLnNpbihlLzMwKiRpKSkqMi8zLG59O2Z1bmN0aW9uIHRwKGUsdCxuKXtsZXQgcj10LmNvb3JkcztpZihlIT09dC5jb29yZHNUeXBlKXtsZXQgYTtlPT09Indnczg0Ij9hPUxUKHIubG9uZ2l0dWRlLHIubGF0aXR1ZGUpOmU9PT0iZ2NqMDIiJiYoYT1NVChyLmxvbmdpdHVkZSxyLmxhdGl0dWRlKSksYSYmKHIubG9uZ2l0dWRlPWFbMF0sci5sYXRpdHVkZT1hWzFdKX1uKHt0eXBlOmUsYWx0aXR1ZGU6ci5hbHRpdHVkZXx8MCxsYXRpdHVkZTpyLmxhdGl0dWRlLGxvbmdpdHVkZTpyLmxvbmdpdHVkZSxzcGVlZDpyLnNwZWVkLGFjY3VyYWN5OnIuYWNjdXJhY3ksYWRkcmVzczp0LmFkZHJlc3MsZXJyTXNnOiJnZXRMb2NhdGlvbjpvayJ9KX1sZXQgRFQ9VGUodGcsKHt0eXBlOmU9Indnczg0IixnZW9jb2RlOnQ9ITEsYWx0aXR1ZGU6bj0hMSxoaWdoQWNjdXJhY3lFeHBpcmVUaW1lOnIsaXNIaWdoQWNjdXJhY3k6YT0hMX0se3Jlc29sdmU6dSxyZWplY3Q6Z30pPT57cy5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oeT0+e3RwKGUseSx1KX0seT0+e2lmKHkuY29kZT09PTE1MDEpe3RwKGUseSx1KTtyZXR1cm59ZygiZ2V0TG9jYXRpb246ZmFpbCAiK3kubWVzc2FnZSl9LHtnZW9jb2RlOnQsZW5hYmxlSGlnaEFjY3VyYWN5OmF8fG4sdGltZW91dDpyLGNvb3Jkc1R5cGU6ZX0pfSxIMCwkMCk7ZnVuY3Rpb24gbnAoKXtNYSh0ZywoZSx0KT0+e1IuZ2V0TG9jYXRpb24oe3R5cGU6ZS50eXBlLGFsdGl0dWRlOmUuYWx0aXR1ZGUsaGlnaEFjY3VyYWN5RXhwaXJlVGltZTplLmhpZ2hBY2N1cmFjeUV4cGlyZVRpbWUsaXNIaWdoQWNjdXJhY3k6ZS5pc0hpZ2hBY2N1cmFjeSxzdWNjZXNzKG4pe3Qoe2xhdGl0dWRlOm4ubGF0aXR1ZGUsbG9uZ2l0dWRlOm4ubG9uZ2l0dWRlLHNwZWVkOm4uc3BlZWQsYWNjdXJhY3k6bi5hY2N1cmFjeSxhbHRpdHVkZTpuLmFsdGl0dWRlLHZlcnRpY2FsQWNjdXJhY3k6bi52ZXJ0aWNhbEFjY3VyYWN5LGhvcml6b250YWxBY2N1cmFjeTpuLmhvcml6b250YWxBY2N1cmFjeX0pfSxmYWlsKG4pe3Qoe2Vyck1zZzpuLmVyck1zZ3x8ImdldExvY2F0aW9uOmZhaWwifSl9fSl9KX1sZXQgcnA9InZkU3luYyIsRlQ9Il9fdW5pYXBwX19zZXJ2aWNlIixkYz0ib25XZWJ2aWV3UmVhZHkiLFZUPTAsVVQ9IndlYnZpZXdJbnNlcnRlZCIsJFQ9IndlYnZpZXdSZW1vdmVkIjtjbGFzcyBIVCBleHRlbmRzIG5lLlVuaU5vZGV7Y29uc3RydWN0b3IodCxuLHI9ITEpe3N1cGVyKG5lLk5PREVfVFlQRV9QQUdFLCIjcGFnZSIsbnVsbCk7dGhpcy5faWQ9MSx0aGlzLl9jcmVhdGVkPSExLHRoaXMuX3VwZGF0aW5nPSExLHRoaXMuX2NyZWF0ZUFjdGlvbk1hcD1uZXcgTWFwLHRoaXMudXBkYXRlQWN0aW9ucz1bXSx0aGlzLmRpY3RzPVtdLHRoaXMubm9kZUlkPTAsdGhpcy5wYWdlSWQ9dCx0aGlzLnBhZ2VOb2RlPXRoaXMsdGhpcy5vcHRpb25zPW4sdGhpcy5pc1VubW91bnRlZD0hMSx0aGlzLmNyZWF0ZUFjdGlvbj1bbmUuQUNUSU9OX1RZUEVfUEFHRV9DUkVBVEUsbl0sdGhpcy5jcmVhdGVkQWN0aW9uPVtuZS5BQ1RJT05fVFlQRV9QQUdFX0NSRUFURURdLHRoaXMubm9ybWFsaXplRGljdD10aGlzLl9ub3JtYWxpemVEaWN0LmJpbmQodGhpcyksdGhpcy5fdXBkYXRlPXRoaXMudXBkYXRlLmJpbmQodGhpcyksciYmdGhpcy5zZXR1cCgpfV9ub3JtYWxpemVEaWN0KHQsbj0hMCl7aWYoIUcuaXNQbGFpbk9iamVjdCh0KSlyZXR1cm4gdGhpcy5hZGREaWN0KHQpO2xldCByPVtdO3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGE9PntsZXQgdT1bdGhpcy5hZGREaWN0KGEpXSxnPXRbYV07bj91LnB1c2godGhpcy5hZGREaWN0KGcpKTp1LnB1c2goZyksci5wdXNoKHUpfSkscn1hZGREaWN0KHQpe2xldHtkaWN0czpufT10aGlzLHI9bi5pbmRleE9mKHQpO3JldHVybiByPi0xP3I6bi5wdXNoKHQpLTF9b25JbmplY3RIb29rKHQpeyh0PT09bmUuT05fUEFHRV9TQ1JPTEx8fHQ9PT1uZS5PTl9SRUFDSF9CT1RUT00pJiYhdGhpcy5zY3JvbGxBY3Rpb24mJih0aGlzLnNjcm9sbEFjdGlvbj1bbmUuQUNUSU9OX1RZUEVfUEFHRV9TQ1JPTEwsdGhpcy5vcHRpb25zLm9uUmVhY2hCb3R0b21EaXN0YW5jZV0sdGhpcy5wdXNoKHRoaXMuc2Nyb2xsQWN0aW9uKSl9b25DcmVhdGUodCxuKXtyZXR1cm4gV1QodGhpcyx0Lm5vZGVJZCxuKSx0fW9uSW5zZXJ0QmVmb3JlKHQsbixyKXtyZXR1cm4gR1QodGhpcyxuLHQubm9kZUlkLHImJnIubm9kZUlkfHwtMSksbn1vblJlbW92ZUNoaWxkKHQpe3JldHVybiBxVCh0aGlzLHQubm9kZUlkKSx0fW9uQWRkRXZlbnQodCxuLHIpe3QucGFyZW50Tm9kZSYmWVQodGhpcyx0Lm5vZGVJZCxuLHIpfW9uQWRkV3hzRXZlbnQodCxuLHIsYSl7dC5wYXJlbnROb2RlJiZLVCh0aGlzLHQubm9kZUlkLG4scixhKX1vblJlbW92ZUV2ZW50KHQsbil7dC5wYXJlbnROb2RlJiZKVCh0aGlzLHQubm9kZUlkLG4pfW9uU2V0QXR0cmlidXRlKHQsbixyKXt0LnBhcmVudE5vZGUmJlhUKHRoaXMsdC5ub2RlSWQsbixyKX1vblJlbW92ZUF0dHJpYnV0ZSh0LG4pe3QucGFyZW50Tm9kZSYmUVQodGhpcyx0Lm5vZGVJZCxuKX1vblRleHRDb250ZW50KHQsbil7dC5wYXJlbnROb2RlJiZvcCh0aGlzLHQubm9kZUlkLG4pfW9uTm9kZVZhbHVlKHQsbil7dC5wYXJlbnROb2RlJiZvcCh0aGlzLHQubm9kZUlkLG4pfWdlbklkKCl7cmV0dXJuIHRoaXMuX2lkKyt9cHVzaCh0LG4pe2lmKCF0aGlzLmlzVW5tb3VudGVkKXtzd2l0Y2godFswXSl7Y2FzZSBuZS5BQ1RJT05fVFlQRV9DUkVBVEU6dGhpcy5fY3JlYXRlQWN0aW9uTWFwLnNldCh0WzFdLHQpO2JyZWFrO2Nhc2UgbmUuQUNUSU9OX1RZUEVfSU5TRVJUOmxldCByPXRoaXMuX2NyZWF0ZUFjdGlvbk1hcC5nZXQodFsxXSk7cj8oclszXT10WzJdLHJbNF09dFszXSxuJiYocls1XT1uKSk6KG4mJih0WzRdPW4pLHRoaXMudXBkYXRlQWN0aW9ucy5wdXNoKHQpKTticmVha310WzBdIT09bmUuQUNUSU9OX1RZUEVfSU5TRVJUJiZ0aGlzLnVwZGF0ZUFjdGlvbnMucHVzaCh0KSx0aGlzLl91cGRhdGluZ3x8KHRoaXMuX3VwZGF0aW5nPSEwLEp0LnF1ZXVlUG9zdEZsdXNoQ2IodGhpcy5fdXBkYXRlKSl9fXJlc3RvcmUoKXt0aGlzLmNsZWFyKCksdGhpcy5zZXR1cCgpLHRoaXMuc2Nyb2xsQWN0aW9uJiZ0aGlzLnB1c2godGhpcy5zY3JvbGxBY3Rpb24pO2xldCB0PW49Pnt0aGlzLm9uQ3JlYXRlKG4sbi5ub2RlTmFtZSksdGhpcy5vbkluc2VydEJlZm9yZShuLnBhcmVudE5vZGUsbixudWxsKSxuLmNoaWxkTm9kZXMuZm9yRWFjaChyPT57dChyKX0pfTt0aGlzLmNoaWxkTm9kZXMuZm9yRWFjaChuPT50KG4pKSx0aGlzLnB1c2godGhpcy5jcmVhdGVkQWN0aW9uKX1zZXR1cCgpe3RoaXMuc2VuZChbdGhpcy5jcmVhdGVBY3Rpb25dKX11cGRhdGUoKXtsZXR7ZGljdHM6dCx1cGRhdGVBY3Rpb25zOm4sX2NyZWF0ZUFjdGlvbk1hcDpyfT10aGlzO3RoaXMuX2NyZWF0ZWR8fCh0aGlzLl9jcmVhdGVkPSEwLG4ucHVzaCh0aGlzLmNyZWF0ZWRBY3Rpb24pKSxuLmxlbmd0aCYmKHQubGVuZ3RoJiZuLnVuc2hpZnQoW1ZULHRdKSx0aGlzLnNlbmQobikpLHRoaXMuY2xlYXIoKX1jbGVhcigpe3RoaXMuZGljdHMubGVuZ3RoPTAsdGhpcy51cGRhdGVBY3Rpb25zLmxlbmd0aD0wLHRoaXMuX3VwZGF0aW5nPSExLHRoaXMuX2NyZWF0ZUFjdGlvbk1hcC5jbGVhcigpfXNlbmQodCl7c3QucHVibGlzaEhhbmRsZXIocnAsdCx0aGlzLnBhZ2VJZCl9ZmlyZUV2ZW50KHQsbil7bGV0IHI9aXAodCx0aGlzKTtyJiZyLmRpc3BhdGNoRXZlbnQobil9fWZ1bmN0aW9uIGpUKGUpe2xldCB0PVB0KGUpO3JldHVybiB0P3QuX19wYWdlX2NvbnRhaW5lcl9fOm51bGx9ZnVuY3Rpb24gamYoZSx0LG4pe2lmKHR5cGVvZiBuPT0ibnVtYmVyIiYmKG49alQobikpLG5bZV09PT10KXJldHVybiBuO2xldHtjaGlsZE5vZGVzOnJ9PW47Zm9yKGxldCBhPTA7YTxyLmxlbmd0aDthKyspe2xldCB1PWpmKGUsdCxyW2FdKTtpZih1KXJldHVybiB1fXJldHVybiBudWxsfWZ1bmN0aW9uIGlwKGUsdCl7cmV0dXJuIGpmKCJub2RlSWQiLGUsdCl9ZnVuY3Rpb24gelQoZSx0KXtyZXR1cm4gamYoIm5vZGVOYW1lIixlLnRvVXBwZXJDYXNlKCksdCl9ZnVuY3Rpb24gV1QoZSx0LG4pe2UucHVzaChbbmUuQUNUSU9OX1RZUEVfQ1JFQVRFLHQsZS5hZGREaWN0KG4pLC0xLC0xXSl9ZnVuY3Rpb24gR1QoZSx0LG4scil7bGV0IGE9dC50b0pTT04oe2F0dHI6ITAsbm9ybWFsaXplOmUubm9ybWFsaXplRGljdH0pO2UucHVzaChbbmUuQUNUSU9OX1RZUEVfSU5TRVJULHQubm9kZUlkLG4scl0sT2JqZWN0LmtleXMoYSkubGVuZ3RoP2E6dm9pZCAwKX1mdW5jdGlvbiBxVChlLHQpe2UucHVzaChbbmUuQUNUSU9OX1RZUEVfUkVNT1ZFLHRdKX1mdW5jdGlvbiBZVChlLHQsbixyKXtlLnB1c2goW25lLkFDVElPTl9UWVBFX0FERF9FVkVOVCx0LGUuYWRkRGljdChuKSxyXSl9ZnVuY3Rpb24gS1QoZSx0LG4scixhKXtlLnB1c2goW25lLkFDVElPTl9UWVBFX0FERF9XWFNfRVZFTlQsdCxlLmFkZERpY3QobiksZS5hZGREaWN0KHIpLGFdKX1mdW5jdGlvbiBKVChlLHQsbil7ZS5wdXNoKFtuZS5BQ1RJT05fVFlQRV9SRU1PVkVfRVZFTlQsdCxlLmFkZERpY3QobildKX1mdW5jdGlvbiBaVChlLHQsbil7cmV0dXJuIHQ9PT0ic3R5bGUiJiZHLmlzUGxhaW5PYmplY3Qobik/ZS5ub3JtYWxpemVEaWN0KG4pOmUuYWRkRGljdChuKX1mdW5jdGlvbiBYVChlLHQsbixyKXtlLnB1c2goW25lLkFDVElPTl9UWVBFX1NFVF9BVFRSSUJVVEUsdCxlLmFkZERpY3QobiksWlQoZSxuLHIpXSl9ZnVuY3Rpb24gUVQoZSx0LG4pe2UucHVzaChbbmUuQUNUSU9OX1RZUEVfUkVNT1ZFX0FUVFJJQlVURSx0LGUuYWRkRGljdChuKV0pfWZ1bmN0aW9uIG9wKGUsdCxuKXtlLnB1c2goW25lLkFDVElPTl9UWVBFX1NFVF9URVhULHQsZS5hZGREaWN0KG4pXSl9ZnVuY3Rpb24gZU8oZSx0LG4pe3JldHVybiBuZXcgSFQoZSx0LG4pfWZ1bmN0aW9uIGFwKGUpe2xldCB0PWUuc2V0dXA7cmV0dXJuIGUuaW5oZXJpdEF0dHJzPSExLGUuc2V0dXA9KG4scik9PntsZXR7YXR0cnM6e19fcGFnZUlkOmEsX19wYWdlUGF0aDp1LF9fcGFnZUluc3RhbmNlOmd9fT1yLE09SnQuZ2V0Q3VycmVudEluc3RhbmNlKCkucHJveHk7aWYoT2UoTSxnKSx0TyhhLE0sZyksSnQub25Nb3VudGVkKCgpPT57SnQubmV4dFRpY2soKCk9Pnt0cihNLG5lLk9OX1JFQURZKX0pfSksSnQub25CZWZvcmVVbm1vdW50KCgpPT57dHIoTSxuZS5PTl9VTkxPQUQpfSksdClyZXR1cm4gdChuLHIpfSxlfWZ1bmN0aW9uIHNwKGUsdCxuKXt7bGV0IHI9KCk9PnMud2Vidmlldy5nZXRXZWJ2aWV3QnlJZChlKyIiKTt0LiRnZXRBcHBXZWJ2aWV3PXIsdC4kLmN0eC4kc2NvcGU9eyRnZXRBcHBXZWJ2aWV3OnJ9fXJldHVybiB0LmdldE9wZW5lckV2ZW50Q2hhbm5lbD0oKT0+KG4uZXZlbnRDaGFubmVsfHwobi5ldmVudENoYW5uZWw9bmV3IG5lLkV2ZW50Q2hhbm5lbChlKSksbi5ldmVudENoYW5uZWwpLHR9ZnVuY3Rpb24gdE8oZSx0LG4pe2h0KHNwKGUsdCxuKSl9ZnVuY3Rpb24gbk8oZSl7cmV0dXJuIEcuaXNGdW5jdGlvbihlKX1sZXQgbHA9bmV3IE1hcDtmdW5jdGlvbiB6ZihlLHQpe2xwLnNldChlLG5lLm9uY2UoaU8odCkpKX1mdW5jdGlvbiByTyhlLHQsbixyLGEpe2xldCB1PWVPKGUsYSwhMCksZz1wdCgpLHk9bHAuZ2V0KHQpKCksTT1PPT5nLm1vdW50UGFnZShPLEcuZXh0ZW5kKHtfX3BhZ2VJZDplLF9fcGFnZVBhdGg6dCxfX3BhZ2VRdWVyeTpuLF9fcGFnZUluc3RhbmNlOnJ9LG4pLHUpO3JldHVybiBHLmlzUHJvbWlzZSh5KT95LnRoZW4oTz0+TShPKSk6TSh5KX1mdW5jdGlvbiBpTyhlKXtyZXR1cm4oKT0+bk8oZSk/ZSgpLnRoZW4odD0+YXAodCkpOmFwKGUpfWZ1bmN0aW9uIG9PKGUpe3JldHVybiBCVCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IHQ9Ui5fX3VuaUNsb3VkO2lmKCF0KXRocm93IG5ldyBFcnJvcigiXHU0RjdGXHU3NTI4dW5pLmNob29zZUxvY2F0aW9uXHU0RTE0XHU0RjdGXHU3NTI4XHU4MTdFXHU4QkFGXHU1NzMwXHU1NkZFXHU2NUY2XHVGRjBDXHU5NzAwXHU2NDJEXHU5MTREdW5pQ2xvdWRcdTRGN0ZcdTc1MjhcdUZGMENcdThCRTZcdTYwQzVcdThCRjdcdTUzQzJcdTgwMDNcdUZGMUFodHRwczovL3VuaWFwcC5kY2xvdWQubmV0LmNuL2FwaS9sb2NhdGlvbi9sb2NhdGlvbi5odG1sI2Nob29zZWxvY2F0aW9uIik7bGV0e2tleXdvcmQ6bixsYXRpdHVkZTpyLGxvbmdpdHVkZTphLHBhZ2VJbmRleDp1LHBhZ2VTaXplOmcsc2VjdXJlOnl9PWUsTT10LmltcG9ydE9iamVjdCgidW5pLW1hcC1jbyIse2N1c3RvbVVJOiEwLHNlY3JldE1ldGhvZHM6eT97Y2hvb3NlTG9jYXRpb246ImJvdGgifTp7fX0pLE89W107cmV0dXJuIG4/Tz0oeWllbGQgTS5jaG9vc2VMb2NhdGlvbih7YWN0aW9uOiJzZWFyY2giLGRhdGE6e2tleXdvcmQ6bixsb2NhdGlvbjp7bGF0OnIsbG5nOmF9LHJhZGl1czoxZTMsYXV0b19leHRlbmQ6MSxnZXRfc3VicG9pczowLG9yZGVyYnk6IndlaWdodCIscGFnZV9pbmRleDp1LHBhZ2Vfc2l6ZTpnfSxwcm92aWRlcjoicXFtYXAiLG5lZWRPcmlnaW5hbFJlc3VsdDohMH0pKS5yZXN1bHQuZGF0YXx8W106Tz0oeWllbGQgTS5jaG9vc2VMb2NhdGlvbih7YWN0aW9uOiJsb2NhdGlvbjJhZGRyZXNzIixkYXRhOntsb2NhdGlvbjpgJHtyfSwke2F9YCxnZXRfcG9pOjEscG9pX29wdGlvbnM6e3BhZ2VfaW5kZXg6dSxwYWdlX3NpemU6Z319LHByb3ZpZGVyOiJxcW1hcCIsbmVlZE9yaWdpbmFsUmVzdWx0OiEwfSkpLnJlc3VsdC5yZXN1bHQucG9pc3x8W10sT30pfWZ1bmN0aW9uIGFPKCl7TWEoIm1hcFBsYWNlU2VhcmNoIiwoZSx0KT0+e29PKGUpLnRoZW4odCkuY2F0Y2gobj0+e2NvbnNvbGUuZXJyb3IobiksdCh7ZXJyTXNnOiJtYXBQbGFjZVNlYXJjaDpmYWlsIn0pfSl9KX1sZXQgc089e2RhdGEoKXtyZXR1cm57a2V5d29yZDoiIixsYXRpdHVkZTowLGxvbmdpdHVkZTowLHVzZVNlY3VyZU5ldHdvcms6ITEsbG9hZGVkOiExLGNoYW5uZWw6dm9pZCAwLGNsb3NlZDohMX19LG9uTG9hZChlKXt0aGlzLmxhdGl0dWRlPWUubGF0aXR1ZGUsdGhpcy5sb25naXR1ZGU9ZS5sb25naXR1ZGUsdGhpcy5rZXl3b3JkPWUua2V5d29yZCx0aGlzLnVzZVNlY3VyZU5ldHdvcms9ZS51c2VTZWN1cmVOZXR3b3JrPT09InRydWUiLHRoaXMubG9hZGVkPSEwLHRoaXMuY2hhbm5lbD10aGlzLmdldE9wZW5lckV2ZW50Q2hhbm5lbCgpfSxvblVubG9hZCgpe3RoaXMuY2xvc2VkfHx0aGlzLmNoYW5uZWwuZW1pdCgiY2xvc2UiLHt9KX0sbWV0aG9kczp7b25DbG9zZShlKXt0aGlzLmNsb3NlZD0hMCx0aGlzLmNoYW5uZWwuZW1pdCgiY2xvc2UiLGUuZGV0YWlsKSxSLm5hdmlnYXRlQmFjaygpfX0scmVuZGVyOmZ1bmN0aW9uKGUsdCxuLHIsYSx1KXtyZXR1cm4gYS5sb2FkZWQ/KEp0Lm9wZW5CbG9jaygpLEp0LmNyZWF0ZUVsZW1lbnRCbG9jaygibG9jYXRpb24tcGlja2VyIix7a2V5OjAsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifSxsYXRpdHVkZTphLmxhdGl0dWRlLGxvbmdpdHVkZTphLmxvbmdpdHVkZSxrZXl3b3JkOmEua2V5d29yZCx1c2VTZWN1cmVOZXR3b3JrOmEudXNlU2VjdXJlTmV0d29yayxvbkNsb3NlOnRbMF18fCh0WzBdPSguLi5nKT0+dS5vbkNsb3NlJiZ1Lm9uQ2xvc2UoLi4uZykpfSxudWxsLDQwLFsibGF0aXR1ZGUiLCJsb25naXR1ZGUiLCJrZXl3b3JkIl0pKTpKdC5jcmVhdGVDb21tZW50Vk5vZGUoInYtaWYiLCEwKX19LHd1PSJfX3VuaWFwcGNob29zZWxvY2F0aW9uIixsTz1uZS5vbmNlKCgpPT57emYod3Usc08pLFNlLnB1c2goe21ldGE6e25hdmlnYXRpb25CYXI6e3N0eWxlOiJjdXN0b20ifSxpc05WdWU6ITEscm91dGU6d3V9LHBhdGg6Ii8iK3d1fSl9KSxjTz1UZShWMCwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntpZihJLnFxTWFwS2V5KXtsTygpO2xldHtrZXl3b3JkOnk9IiIsbGF0aXR1ZGU6TT0iIixsb25naXR1ZGU6Tz0iIix1c2VTZWN1cmVOZXR3b3JrOng9ITF9PWV8fHt9O1IubmF2aWdhdGVUbyh7dXJsOiIvIit3dSsiP2tleXdvcmQ9Iit5KyImbGF0aXR1ZGU9IitNKyImbG9uZ2l0dWRlPSIrTysiJnVzZVNlY3VyZU5ldHdvcms9Iit4LGV2ZW50czp7Y2xvc2U6aGU9PntoZSYmaGUubGF0aXR1ZGU/dChoZSk6bigiY2FuY2VsIil9fSxmYWlsOmhlPT57bihoZS5lcnJNc2d8fCJjYW5jZWwiKX19KTtyZXR1cm59bGV0IGE9QWcoKSE9PSJsaWdodCIsdSxnPXhpKHt1cmw6Il9fdW5pYXBwY2hvb3NlbG9jYXRpb24iLGRhdGE6Ry5leHRlbmQoe30sZSx7bG9jYWxlOk1jKCl9KSxzdHlsZTp7YW5pbWF0aW9uVHlwZTplLmFuaW1hdGlvblR5cGV8fCJzbGlkZS1pbi1ib3R0b20iLHRpdGxlTlZpZXc6ITEscG9wR2VzdHVyZToiY2xvc2UiLHNjcm9sbEluZGljYXRvcjoibm9uZSJ9LG9uTWVzc2FnZSh7ZXZlbnQ6eSxkZXRhaWw6TX0pe3k9PT0ic2VsZWN0ZWQiJiYodT1NKX0sb25DbG9zZSgpe2EmJnMubmF2aWdhdG9yLnNldFN0YXR1c0JhclN0eWxlKCJkYXJrIiksdT90KHUpOm4oImNhbmNlbCIpfX0pO2EmJihzLm5hdmlnYXRvci5zZXRTdGF0dXNCYXJTdHlsZSgibGlnaHQiKSxnLndlYnZpZXcuYWRkRXZlbnRMaXN0ZW5lcigicG9wR2VzdHVyZSIsKHt0eXBlOnkscmVzdWx0Ok19KT0+e3k9PT0ic3RhcnQiP3MubmF2aWdhdG9yLnNldFN0YXR1c0JhclN0eWxlKCJkYXJrIik6eT09PSJlbmQiJiYhTSYmcy5uYXZpZ2F0b3Iuc2V0U3RhdHVzQmFyU3R5bGUoImxpZ2h0Iil9KSl9LFUwKSxjcD17ZW46eyJtYXAudGl0bGUuYW1hcCI6IkF1dG9OYXZpIE1hcHMiLCJtYXAudGl0bGUuYmFpZHUiOiJCYWlkdSBNYXBzIiwibWFwLnRpdGxlLnRlbmNlbnQiOiJUZW5jZW50IE1hcHMiLCJtYXAudGl0bGUuYXBwbGUiOiJBcHBsZSBNYXBzIiwibWFwLnRpdGxlLmdvb2dsZSI6Ikdvb2dsZSBNYXBzIiwibG9jYXRpb24udGl0bGUiOiJNeSBMb2NhdGlvbiIsInNlbGVjdC5jYW5jZWwiOiJDYW5jZWwiLCJsb2NhdGlvbi5kZXN0aW5hdGlvbiI6IkRlc3RpbmF0aW9uIn0semg6eyJtYXAudGl0bGUuYW1hcCI6Ilx1OUFEOFx1NUZCN1x1NTczMFx1NTZGRSIsIm1hcC50aXRsZS5iYWlkdSI6Ilx1NzY3RVx1NUVBNlx1NTczMFx1NTZGRSIsIm1hcC50aXRsZS50ZW5jZW50IjoiXHU4MTdFXHU4QkFGXHU1NzMwXHU1NkZFIiwibWFwLnRpdGxlLmFwcGxlIjoiXHU4MkY5XHU2NzlDXHU1NzMwXHU1NkZFIiwibWFwLnRpdGxlLmdvb2dsZSI6Ilx1OEMzN1x1NkI0Q1x1NTczMFx1NTZGRSIsImxvY2F0aW9uLnRpdGxlIjoiXHU2MjExXHU3Njg0XHU0RjREXHU3RjZFIiwic2VsZWN0LmNhbmNlbCI6Ilx1NTNENlx1NkQ4OCIsImxvY2F0aW9uLmRlc3RpbmF0aW9uIjoiXHU3NkVFXHU2ODA3XHU1NzMwXHU3MEI5In19LEN1PSIiO2Z1bmN0aW9uIHVPKCl7Q3V8fChDdT1zLm9zLmxhbmd1YWdlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgiXyIsIi0iKS5zcGxpdCgiLSIpWzBdKX1mdW5jdGlvbiBscyhlKXtyZXR1cm4gdU8oKSxjcFtDdV0mJmNwW0N1XVtlXXx8ZX1mdW5jdGlvbiBmTyhlLHQsbixyKXtsZXQgYT1mLnJlcXVpcmVNb2R1bGUoIm1hcFNlYXJjaCIpO3ZhciB1PVt7dGl0bGU6bHMoIm1hcC50aXRsZS50ZW5jZW50IiksZ2V0VXJsOmZ1bmN0aW9uKCl7dmFyIE07cmV0dXJuIE09Imh0dHBzOi8vYXBpcy5tYXAucXEuY29tL3VyaS92MS9yb3V0ZXBsYW4/dHlwZT1kcml2ZSZ0bz0iK2VuY29kZVVSSUNvbXBvbmVudChuKSsiJnRvY29vcmQ9IitlbmNvZGVVUklDb21wb25lbnQoZSsiLCIrdCkrIiZyZWZlcmVyPUFQUCIsTX19LHt0aXRsZTpscygibWFwLnRpdGxlLmdvb2dsZSIpLGdldFVybDpmdW5jdGlvbigpe3ZhciBNO3JldHVybiBNPSJodHRwczovL3d3dy5nb29nbGUuY29tL21hcHMvP2RhZGRyPSIrZW5jb2RlVVJJQ29tcG9uZW50KG4pKyImc2xsPSIrZW5jb2RlVVJJQ29tcG9uZW50KGUrIiwiK3QpLE19fV0sZz1be3RpdGxlOmxzKCJtYXAudGl0bGUuYW1hcCIpLHBuYW1lOiJjb20uYXV0b25hdmkubWluaW1hcCIsYWN0aW9uOnI/Imlvc2FtYXA6Ly8iOiJhbWFwdXJpOi8vIixnZXRVcmw6ZnVuY3Rpb24oKXt2YXIgTTtyZXR1cm4gcj9NPSJpb3NhbWFwOi8vcGF0aCI6TT0iYW1hcHVyaTovL3JvdXRlL3BsYW4vIixNKz0iP3NvdXJjZUFwcGxpY2F0aW9uPUFQUCZkbmFtZT0iK2VuY29kZVVSSUNvbXBvbmVudChuKSsiJmRsYXQ9IitlKyImZGxvbj0iK3QrIiZkZXY9MCIsTX19LHt0aXRsZTpscygibWFwLnRpdGxlLmJhaWR1IikscG5hbWU6ImNvbS5iYWlkdS5CYWlkdU1hcCIsYWN0aW9uOiJiYWlkdW1hcDovLyIsZ2V0VXJsOmZ1bmN0aW9uKCl7dmFyIE09ImJhaWR1bWFwOi8vbWFwL2RpcmVjdGlvbj9kZXN0aW5hdGlvbj0iK2VuY29kZVVSSUNvbXBvbmVudCgibGF0bG5nOiIrZSsiLCIrdCsifG5hbWU6IituKSsiJm1vZGU9ZHJpdmluZyZzcmM9QVBQJmNvb3JkX3R5cGU9Z2NqMDIiO3JldHVybiBNfX0se3RpdGxlOmxzKCJtYXAudGl0bGUudGVuY2VudCIpLHBuYW1lOiJjb20udGVuY2VudC5tYXAiLGFjdGlvbjoicXFtYXA6Ly8iLGdldFVybDooKT0+e3ZhciBNO3JldHVybiBNPSJxcW1hcDovL21hcC9yb3V0ZXBsYW4/dHlwZT1kcml2ZSIrKHI/IiZmcm9tPSIrZW5jb2RlVVJJQ29tcG9uZW50KGxzKCJsb2NhdGlvbi50aXRsZSIpKToiIikrIiZ0bz0iK2VuY29kZVVSSUNvbXBvbmVudChuKSsiJnRvY29vcmQ9IitlbmNvZGVVUklDb21wb25lbnQoZSsiLCIrdCkrIiZyZWZlcmVyPUFQUCIsTX19LHt0aXRsZTpscygibWFwLnRpdGxlLmdvb2dsZSIpLHBuYW1lOiJjb20uZ29vZ2xlLmFuZHJvaWQuYXBwcy5tYXBzIixhY3Rpb246ImNvbWdvb2dsZW1hcHN1cmw6Ly8iLGdldFVybDpmdW5jdGlvbigpe3ZhciBNO3JldHVybiByP009ImNvbWdvb2dsZW1hcHN1cmw6Ly9tYXBzLmdvb2dsZS5jb20vIjpNPSJodHRwczovL3d3dy5nb29nbGUuY29tL21hcHMvIixNKz0iP2RhZGRyPSIrZW5jb2RlVVJJQ29tcG9uZW50KG4pKyImc2xsPSIrZW5jb2RlVVJJQ29tcG9uZW50KGUrIiwiK3QpLE19fV0seT1bXTtnLmZvckVhY2goZnVuY3Rpb24oTSl7dmFyIE89cy5ydW50aW1lLmlzQXBwbGljYXRpb25FeGlzdCh7cG5hbWU6TS5wbmFtZSxhY3Rpb246TS5hY3Rpb259KTtPJiZ5LnB1c2goTSl9KSxyJiZ5LnVuc2hpZnQoe3RpdGxlOmxzKCJtYXAudGl0bGUuYXBwbGUiKSxuYXZpZ2F0ZVRvOmZ1bmN0aW9uKCl7YS5vcGVuU3lzdGVtTWFwTmF2aWdhdGlvbih7bG9uZ2l0dWRlOnQsbGF0aXR1ZGU6ZSxuYW1lOm59KX19KSx5Lmxlbmd0aD09PTAmJih5PXkuY29uY2F0KHUpKSxzLm5hdGl2ZVVJLmFjdGlvblNoZWV0KHtjYW5jZWw6bHMoInNlbGVjdC5jYW5jZWwiKSxidXR0b25zOnl9LGZ1bmN0aW9uKE0pe3ZhciBPPU0uaW5kZXgseDtPPjAmJih4PXlbTy0xXSx4Lm5hdmlnYXRlVG8/eC5uYXZpZ2F0ZVRvKCk6cy5ydW50aW1lLm9wZW5VUkwoeC5nZXRVcmwoKSxmdW5jdGlvbigpe30seC5wbmFtZSkpfSl9bGV0IGRPPXtkYXRhKCl7cmV0dXJue2xhdGl0dWRlOjAsbG9uZ2l0dWRlOjAsbmFtZToiIixsb2FkZWQ6ITEsc2hvd05hdjohMX19LG9uTG9hZChlKXt0aGlzLmxhdGl0dWRlPWUubGF0aXR1ZGUsdGhpcy5sb25naXR1ZGU9ZS5sb25naXR1ZGUsdGhpcy5uYW1lPWUubmFtZSx0aGlzLmxvYWRlZD0hMH0sb25CYWNrUHJlc3MoKXtpZih0aGlzLnNob3dOYXYpcmV0dXJuIHRoaXMuc2hvd05hdj0hMSwhMH0sbWV0aG9kczp7b25DbG9zZShlKXtSLm5hdmlnYXRlQmFjaygpfSxvbk5hdkNsaWNrKCl7bGV0IGU9Zi5jb25maWcuZW52LnBsYXRmb3JtPT09ImlPUyI7Zk8odGhpcy5sYXRpdHVkZSx0aGlzLmxvbmdpdHVkZSx0aGlzLm5hbWV8fGxzKCJsb2NhdGlvbi5kZXN0aW5hdGlvbiIpLGUpfX0scmVuZGVyOmZ1bmN0aW9uKGUsdCxuLHIsYSx1KXtyZXR1cm4gYS5sb2FkZWQ/KEp0Lm9wZW5CbG9jaygpLEp0LmNyZWF0ZUVsZW1lbnRCbG9jaygibG9jYXRpb24tdmlldyIse2tleTowLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn0sbGF0aXR1ZGU6YS5sYXRpdHVkZSxsb25naXR1ZGU6YS5sb25naXR1ZGUsc2hvd05hdjphLnNob3dOYXYsbmFtZTphLm5hbWUsb25DbG9zZTp0WzBdfHwodFswXT0oLi4uZyk9PnUub25DbG9zZSYmdS5vbkNsb3NlKC4uLmcpKSxvbk5hdkNsaWNrOnRbMV18fCh0WzFdPSguLi5nKT0+dS5vbk5hdkNsaWNrJiZ1Lm9uTmF2Q2xpY2soLi4uZykpfSxudWxsLDQwLFsibGF0aXR1ZGUiLCJsb25naXR1ZGUiLCJzaG93TmF2Il0pKTpKdC5jcmVhdGVDb21tZW50Vk5vZGUoInYtaWYiLCEwKX19LEF1PSJfX3VuaWFwcG9wZW5sb2NhdGlvbiIsaE89bmUub25jZSgoKT0+e3pmKEF1LGRPKSxTZS5wdXNoKHttZXRhOntuYXZpZ2F0aW9uQmFyOntzdHlsZToiY3VzdG9tIn0saXNOVnVlOiExLHJvdXRlOkF1fSxwYXRoOiIvIitBdX0pfSksZ089VGUoajAsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57aWYoSS5xcU1hcEtleSl7aE8oKTtsZXR7bGF0aXR1ZGU6cj0iIixsb25naXR1ZGU6YT0iIixuYW1lOnU9IiJ9PWV8fHt9O1IubmF2aWdhdGVUbyh7dXJsOiIvIitBdSsiP2xhdGl0dWRlPSIrcisiJmxvbmdpdHVkZT0iK2ErIiZuYW1lPSIrdSxzdWNjZXNzOmc9Pnt0KCl9LGZhaWw6Zz0+e24oZy5lcnJNc2d8fCJjYW5jZWwiKX19KTtyZXR1cm59cmV0dXJuIHhpKHt1cmw6Il9fdW5pYXBwb3BlbmxvY2F0aW9uIixkYXRhOkcuZXh0ZW5kKHt9LGUse2xvY2FsZTpNYygpfSksc3R5bGU6e3RpdGxlTlZpZXc6e3R5cGU6InRyYW5zcGFyZW50In0scG9wR2VzdHVyZToiY2xvc2UiLGJhY2tCdXR0b25BdXRvQ29udHJvbDoiY2xvc2UifSxvbkNsb3NlKCl7bigiY2FuY2VsIil9fSksdCgpfSxXMCx6MCksVHU9ITEsR2M9MCxwTz1UZSh6RSwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntHYz1HY3x8cy5nZW9sb2NhdGlvbi53YXRjaFBvc2l0aW9uKHI9PntUdT0hMCxzdC5pbnZva2VPbkNhbGxiYWNrKG9nLHIuY29vcmRzKX0scj0+e1R1fHwobihyLm1lc3NhZ2UpLFR1PSEwKSxzdC5pbnZva2VPbkNhbGxiYWNrKGFnLHtlcnJNc2c6YG9uTG9jYXRpb25DaGFuZ2U6ZmFpbCAke3IubWVzc2FnZX1gfSl9LHtjb29yZHNUeXBlOmU9PW51bGw/dm9pZCAwOmUudHlwZX0pLE4odCwxMDApfSxZRSxLRSksdk89VGUoV0UsKGUse3Jlc29sdmU6dH0pPT57R2MmJihzLmdlb2xvY2F0aW9uLmNsZWFyV2F0Y2goR2MpLFR1PSExLEdjPTApLHQoKX0pLG1PPURuKG9nLCgpPT57fSksX089WnIoR0UsKCk9Pnt9KSxiTz1EbihhZywoKT0+e30pLHlPPVpyKHFFLCgpPT57fSksRU89VGUoTFMsKHt0aXRsZTplPSIiLGNvbnRlbnQ6dD0iIixzaG93Q2FuY2VsOm49ITAsY2FuY2VsVGV4dDpyLGNhbmNlbENvbG9yOmEsY29uZmlybVRleHQ6dSxjb25maXJtQ29sb3I6ZyxlZGl0YWJsZTp5PSExLHBsYWNlaG9sZGVyVGV4dDpNPSIifT17fSx7cmVzb2x2ZTpPfSk9PntsZXQgeD1uP1tyLHVdOlt1XSxoZT15P006eDt0PXR8fCIgIixzLm5hdGl2ZVVJW3k/InByb21wdCI6ImNvbmZpcm0iXSh0LGJlPT57aWYobil7bGV0IFBlPWJlLmluZGV4PT09MSxndD17Y29uZmlybTpQZSxjYW5jZWw6YmUuaW5kZXg9PT0wfHxiZS5pbmRleD09PS0xfTtQZSYmeSYmKGd0LmNvbnRlbnQ9YmUudmFsdWUpLE8oZ3QpfWVsc2V7bGV0IFBlPXtjb25maXJtOmJlLmluZGV4PT09MCxjYW5jZWw6ITF9O3kmJihQZS5jb250ZW50PWJlLnZhbHVlKSxPKFBlKX19LGUsaGUseCl9LE1TLERTKSxTTz17bGlnaHQ6e2l0ZW1Db2xvcjoiIzAwMDAwMCJ9LGRhcms6e2l0ZW1Db2xvcjoicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpIn19LHdPPVRlKE5TLCh7aXRlbUxpc3Q6ZT1bXSxpdGVtQ29sb3I6dCx0aXRsZTpuPSIiLHBvcG92ZXI6cn0se3Jlc29sdmU6YSxyZWplY3Q6dX0pPT57dD09PSIjMDAwIiYmSS5kYXJrbW9kZSYmKHQ9U09bcy5uYXZpZ2F0b3IuZ2V0VUlTdHlsZSgpXS5pdGVtQ29sb3IpLGtpKCk7bGV0e3Q6Z309cWUoKSx5PXt0aXRsZTpuLGNhbmNlbDpnKCJ1bmkuc2hvd0FjdGlvblNoZWV0LmNhbmNlbCIpLGJ1dHRvbnM6ZS5tYXAoTT0+KHt0aXRsZTpNLGNvbG9yOnR9KSl9O3MubmF0aXZlVUkuYWN0aW9uU2hlZXQoRy5leHRlbmQoeSx7cG9wb3ZlcjpyfSksTT0+e00uaW5kZXg+MD9hKHt0YXBJbmRleDpNLmluZGV4LTF9KTp1KCJzaG93QWN0aW9uU2hlZXQ6ZmFpbCBjYW5jZWwiKX0pfSxJUyxrUykscWMsV2Y9ITEsT3U9IiIsUHUsQ089VGUoUlMsKGUsdCk9PnVwKEcuZXh0ZW5kKHt9LGUse3R5cGU6ImxvYWRpbmciLGljb246ImxvYWRpbmcifSksdCkseFMsQlMpLHVwPSh7dGl0bGU6ZT0iIixpY29uOnQ9InN1Y2Nlc3MiLGltYWdlOm49IiIsZHVyYXRpb246cj0xNTAwLG1hc2s6YT0hMSxwb3NpdGlvbjp1LHR5cGU6Zz0idG9hc3QiLHN0eWxlOnl9LHtyZXNvbHZlOk0scmVqZWN0Ok99KT0+e2lmKE51KCIiKSxPdT1nLFsidG9wIiwiY2VudGVyIiwiYm90dG9tIl0uaW5jbHVkZXMoU3RyaW5nKHUpKSlzLm5hdGl2ZVVJLnRvYXN0KGUse3ZlcnRpY2FsQWxpZ246dX0pLFdmPSEwO2Vsc2V7dCYmIX5bInN1Y2Nlc3MiLCJsb2FkaW5nIiwiZXJyb3IiLCJub25lIl0uaW5kZXhPZih0KSYmKHQ9InN1Y2Nlc3MiKTtsZXQgeD17bW9kYWw6YSxiYWNrOiJ0cmFuc21pdCIscGFkZGluZzoiMTBweCIsc2l6ZToiMTZweCJ9OyFuJiYoIXR8fHQ9PT0ibm9uZSIpP3gubG9hZGluZz17ZGlzcGxheToibm9uZSJ9Oih4LndpZHRoPSIxNDBweCIseC5oZWlnaHQ9IjExMnB4Iiksbj94LmxvYWRpbmc9e2Rpc3BsYXk6ImJsb2NrIixoZWlnaHQ6IjU1cHgiLGljb246bixpbnRlcnZhbDpyfTpbInN1Y2Nlc3MiLCJlcnJvciJdLmluZGV4T2YodCkhPT0tMSYmKHgubG9hZGluZz17ZGlzcGxheToiYmxvY2siLGhlaWdodDoiNTVweCIsaWNvbjp0PT09InN1Y2Nlc3MiPyJfX3VuaWFwcHN1Y2Nlc3MucG5nIjoiX191bmlhcHBlcnJvci5wbmciLGludGVydmFsOnJ9KTt0cnl7cWM9cy5uYXRpdmVVSS5zaG93V2FpdGluZyhlLEcuZXh0ZW5kKHgseSkpfWNhdGNoKGhlKXtPKGAke2hlfWApfX1yZXR1cm4gT3U9PT0idG9hc3QiJiYoUHU9TigoKT0+e051KCIiKX0scikpLE0oKX0sQU89VGUoRlMsdXAsVVMsJFMpLFRPPVRlKG1TLChlLHQpPT5OdSgidG9hc3QiLHQpKSxPTz1UZSh2UywoZSx0KT0+TnUoImxvYWRpbmciLHQpKTtmdW5jdGlvbiBOdShlPSJ0b2FzdCIsdCl7cmV0dXJuIGUmJmUhPT1PdXx8KFB1JiYoRShQdSksUHU9bnVsbCksV2Y/cy5uYXRpdmVVSS5jbG9zZVRvYXN0KCk6cWMmJnFjLmNsb3NlJiZxYy5jbG9zZSgpLHFjPW51bGwsV2Y9ITEsT3U9IiIpLHQmJnQucmVzb2x2ZSgpfWxldCBQTz1UZShIUywoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1DZygpO2lmKHImJnIuZW5kUHVsbFRvUmVmcmVzaCgpLHI9bXUoKSwhcilyZXR1cm4gbigpO3IuYmVnaW5QdWxsVG9SZWZyZXNoKCkseGYociksdCgpfSksTk89VGUoalMsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0IHI9Q2coKXx8bXUoKTtpZighcilyZXR1cm4gbigpO3IuZW5kUHVsbFRvUmVmcmVzaCgpLHhmKG51bGwpLHQoKX0pLElPPVRlKHVnLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldCByPUFuKHZyKCkpO3N0Lmludm9rZVZpZXdNZXRob2QodWcsZSxyLGE9Pnt0eXBlb2YgYT09InN0cmluZyI/bihhKTp0KCl9KX0sX1MpLGtPPVRlKGZnLChlLHtyZXNvbHZlOnR9KT0+e2xldCBuPUFuKHZyKCkpO3N0Lmludm9rZVZpZXdNZXRob2QoZmcsZSxuLHQpfSxPUyxQUyksUk89VGUod1MsKHtfX3BhZ2VfXzplLHRpdGxlOnR9LHtyZXNvbHZlOm4scmVqZWN0OnJ9KT0+e2xldCBhPVNnKGUpO2lmKGEpe2xldCB1PWEuZ2V0U3R5bGUoKTt1JiZ1LnRpdGxlTlZpZXcmJmEuc2V0U3R5bGUoe3RpdGxlTlZpZXc6e3RpdGxlVGV4dDp0fX0pLG4oKX1lbHNlIHIoKX0sQ1MpLHhPPVRlKEFTLChlLHtyZXNvbHZlOnR9KT0+e3MubmF0aXZlVUkuc2hvd1dhaXRpbmcoIiIse21vZGFsOiExfSksdCgpfSksQk89VGUoVFMsKGUse3Jlc29sdmU6dH0pPT57cy5uYXRpdmVVSS5jbG9zZVdhaXRpbmcoKSx0KCl9KTtmdW5jdGlvbiBMTyhlKXtsZXQgdD1abigpOyF0Lmxlbmd0aHx8KHRbdC5sZW5ndGgtMV0uJHBhZ2Uuc3RhdHVzQmFyU3R5bGU9ZSl9bGV0IE1PPVRlKHlTLCh7X19wYWdlX186ZSxmcm9udENvbG9yOnQsYmFja2dyb3VuZENvbG9yOm59LHtyZXNvbHZlOnIscmVqZWN0OmF9KT0+e2xldCB1PVNnKGUpO2lmKHUpe2xldCBnPXt9O3QmJihnLnRpdGxlQ29sb3I9dCksbiYmKGcuYmFja2dyb3VuZENvbG9yPW4pO2xldCB5PXQ9PT0iIzAwMDAwMCI/ImRhcmsiOiJsaWdodCI7cy5uYXZpZ2F0b3Iuc2V0U3RhdHVzQmFyU3R5bGUoeSksTE8oeSk7bGV0IE09dS5nZXRTdHlsZSgpO00mJk0udGl0bGVOVmlldyYmKE0udGl0bGVOVmlldy5hdXRvQmFja0J1dHRvbiYmKGcuYmFja0J1dHRvbj1nLmJhY2tCdXR0b258fHt9LGcuYmFja0J1dHRvbi5jb2xvcj10KSx1LnNldFN0eWxlKHt0aXRsZU5WaWV3Omd9KSkscigpfWVsc2UgYSgpfSxTUyxFUyksRE89VGUoY3csKHtpbmRleDplLHRleHQ6dH0se3Jlc29sdmU6bixyZWplY3Q6cn0pPT57QWkuc2V0VGFiQmFyQmFkZ2UoInRleHQiLGUsdCksbigpfSx1dyxmdyksRk89VGUoelMsKHtpbmRleDplLHRleHQ6dCxpY29uUGF0aDpuLHNlbGVjdGVkSWNvblBhdGg6cixwYWdlUGF0aDphLHZpc2libGU6dSxpY29uZm9udDpnfSx7cmVzb2x2ZTp5fSk9PntpZihBaS5zZXRUYWJCYXJJdGVtKGUsdCxuLHIsdSxnKSxhKXtsZXQgTT1JLnRhYkJhci5saXN0W2VdO2lmKE0pe2xldCBPPU0ucGFnZVBhdGgseD1uZS5yZW1vdmVMZWFkaW5nU2xhc2goYSk7eCE9PU8mJmlsKGUsTyx4KX19eSgpfSxXUyxHUyksVk89VGUocVMsKGU9e30se3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57aWYoISRjKCkpcmV0dXJuIG4oIm5vdCBUYWJCYXIgcGFnZSIpO2UuYm9yZGVyU3R5bGU9bmUubm9ybWFsaXplVGFiQmFyU3R5bGVzKGUuYm9yZGVyU3R5bGUpLEFpLnNldFRhYkJhclN0eWxlKGUpLHQoKX0sWVMsSlMpLFVPPVRlKFpTLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldCByPWUmJmUuYW5pbWF0aW9uO2lmKCEkYygpKXJldHVybiBuKCJub3QgVGFiQmFyIHBhZ2UiKTtBaS5oaWRlVGFiQmFyKEJvb2xlYW4ocikpLHQoKX0sZGcpLCRPPVRlKFhTLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldCByPWUmJmUuYW5pbWF0aW9uO2lmKCEkYygpKXJldHVybiBuKCJub3QgVGFiQmFyIHBhZ2UiKTtBaS5zaG93VGFiQmFyKEJvb2xlYW4ocikpLHQoKX0sUVMpLEhPPVRlKHJ3LCh7aW5kZXg6ZX0se3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57QWkuc2V0VGFiQmFyQmFkZ2UoInJlZERvdCIsZSksdCgpfSxpdyxvdyksZnA9ZT0+QWkuc2V0VGFiQmFyQmFkZ2UoIm5vbmUiLGUpLGpPPVRlKGF3LCh7aW5kZXg6ZX0se3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57ZnAoZSksdCgpfSxzdyxsdyksek89VGUoZXcsKHtpbmRleDplfSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntmcChlKSx0KCl9LHR3LG53KSxkcD0iVW5pQXBwU3ViTlZ1ZSI7Y2xhc3MgV097Y29uc3RydWN0b3IodCxuKXt0aGlzLmNhbGxiYWNrcz1bXTtsZXQgcj10aGlzLndlYnZpZXc9cy53ZWJ2aWV3LmdldFdlYnZpZXdCeUlkKHQpO2lmKHRoaXMuaXNTdWI9bnx8ITEsci5fX3VuaWFwcF9tYXNrX2lkKXtsZXQgYT10aGlzLm1hc2tXZWJ2aWV3PXIuX191bmlhcHBfbWFza19pZD09PSIwIj97c2V0U3R5bGUoe21hc2s6Z30pe2xhKCJ1bmktdGFidmlldyIpLnNldE1hc2soe2NvbG9yOmd9KX19OnMud2Vidmlldy5nZXRXZWJ2aWV3QnlJZChyLl9fdW5pYXBwX21hc2tfaWQpLHU9ZnVuY3Rpb24oKXthLnNldFN0eWxlKHttYXNrOiJub25lIn0pfTtyLmFkZEV2ZW50TGlzdGVuZXIoImhpZGUiLHUpLHIuYWRkRXZlbnRMaXN0ZW5lcigiY2xvc2UiLHUpfX1zaG93KC4uLnQpe2lmKHRoaXMubWFza1dlYnZpZXcpe2xldCBuPXRoaXMud2Vidmlldy5fX3VuaWFwcF9tYXNrO3RoaXMubWFza1dlYnZpZXcuc2V0U3R5bGUoe21hc2s6bn0pfXRoaXMud2Vidmlldy5zaG93KC4uLnQpfWhpZGUoLi4udCl7dGhpcy53ZWJ2aWV3LmhpZGUoLi4udCl9c2V0U3R5bGUodCl7dGhpcy53ZWJ2aWV3LnNldFN0eWxlKHQpfWluaXRNZXNzYWdlKCl7aWYodGhpcy5tZXNzYWdlUmVhZHkpcmV0dXJuO3RoaXMubWVzc2FnZVJlYWR5PSEwO2xldCB0PXI9PntpZihyLmRhdGEmJnIuZGF0YS50eXBlPT09ZHApe2xldCBhPXIuZGF0YS50YXJnZXQ7YS5pZD09PXRoaXMud2Vidmlldy5pZCYmYS5pc1N1Yj09PXRoaXMuaXNTdWImJnRoaXMuY2FsbGJhY2tzLmZvckVhY2godT0+e3Uoe29yaWdpbjp0aGlzLndlYnZpZXcuX191bmlhcHBfaG9zdCxkYXRhOnIuZGF0YS5kYXRhfSl9KX19O2xhKCJnbG9iYWxFdmVudCIpLmFkZEV2ZW50TGlzdGVuZXIoInBsdXNNZXNzYWdlIix0KSx0aGlzLndlYnZpZXcuYWRkRXZlbnRMaXN0ZW5lcigiY2xvc2UiLCgpPT57dGhpcy5jYWxsYmFja3MubGVuZ3RoPTB9KX1wb3N0TWVzc2FnZSh0KXtzLndlYnZpZXcucG9zdE1lc3NhZ2VUb1VuaU5WaWV3KHt0eXBlOmRwLGRhdGE6dCx0YXJnZXQ6e2lkOnRoaXMud2Vidmlldy5pZCxpc1N1YjohdGhpcy5pc1N1Yn19LEZUKX1vbk1lc3NhZ2UodCl7dGhpcy5pbml0TWVzc2FnZSgpLHRoaXMuY2FsbGJhY2tzLnB1c2godCl9fWxldCBHTz1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgV08oZSx0KX07ZnVuY3Rpb24gcU8oZSx0LG4scixhLHUsZyl7cyE9PW4mJih3PUp0PWUsZj10LHM9bixfQyhzLm5hdmlnYXRvci5zZXRTdGF0dXNCYXJTdHlsZSkscy5uYXZpZ2F0b3Iuc2V0U3RhdHVzQmFyU3R5bGU9X2csTj1yLEU9YSxoPXUsXz1nKSxJLnNlcnZpY2VSZWFkeT0hMH1mdW5jdGlvbiBZTygpe2xldCBlPVsiQXJyYXlCdWZmZXIiLCJJbnQ4QXJyYXkiLCJVaW50OEFycmF5IiwiVWludDhDbGFtcGVkQXJyYXkiLCJJbnQxNkFycmF5IiwiVWludDE2QXJyYXkiLCJJbnQzMkFycmF5IiwiVWludDMyQXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJGbG9hdDY0QXJyYXkiLCJCaWdJbnQ2NEFycmF5IiwiQmlnVWludDY0QXJyYXkiXSx0PXt9O2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXtsZXQgcj1lW25dO3Rbcl09Z2xvYmFsW3JdfXJldHVybiB0fWZ1bmN0aW9uIEtPKGUpe0cuZXh0ZW5kKGdsb2JhbCxlKX1sZXQgaHA9e29hdXRoKGUpe3Mub2F1dGguZ2V0U2VydmljZXModD0+e3Q9dDtsZXQgbj1bXTt0LmZvckVhY2goKHtpZDpyfSk9PntuLnB1c2gocil9KSxlKG51bGwsbix0KX0sdD0+e3Q9dCxlKHQpfSl9LHNoYXJlKGUpe3Muc2hhcmUuZ2V0U2VydmljZXModD0+e3Q9dDtsZXQgbj1bXTt0LmZvckVhY2goKHtpZDpyfSk9PntuLnB1c2gocil9KSxlKG51bGwsbix0KX0sdD0+e2UodCl9KX0scGF5bWVudChlKXtzLnBheW1lbnQuZ2V0Q2hhbm5lbHModD0+e2xldCBuPVtdO3QuZm9yRWFjaCgoe2lkOnJ9KT0+e24ucHVzaChyKX0pLGUobnVsbCxuLHQpfSx0PT57ZSh0KX0pfSxwdXNoKGUpe2lmKHR5cGVvZiBmIT0idW5kZWZpbmVkInx8dHlwZW9mIHMhPSJ1bmRlZmluZWQiKXtsZXQgdD1zLnB1c2guZ2V0Q2xpZW50SW5mbygpO2UobnVsbCxbdC5pZF0sW3RdKX1lbHNlIGUobnVsbCxbXSl9fSxKTz1UZShkdywoe3NlcnZpY2U6ZX0se3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57aHBbZV0/aHBbZV0oKHIsYT1bXSx1PVtdKT0+e3I/bihyLm1lc3NhZ2UpOnQoe3NlcnZpY2U6ZSxwcm92aWRlcjphLHByb3ZpZGVyczp1Lm1hcChnPT4odHlwZW9mIGcuc2VydmljZVJlYWR5PT0iYm9vbGVhbiImJihnLmlzQXBwRXhpc3Q9Zy5zZXJ2aWNlUmVhZHkpLHR5cGVvZiBnLm5hdGl2ZUNsaWVudD09ImJvb2xlYW4iJiYoZy5pc0FwcEV4aXN0PWcubmF0aXZlQ2xpZW50KSxnKSl9KX0pOm4oInNlcnZpY2Ugbm90IGZvdW5kIil9LGh3KSxJdTtmdW5jdGlvbiBZYyhlKXtyZXR1cm4gbmV3IFByb21pc2UoKHQsbik9PntzLm9hdXRoLmdldFNlcnZpY2VzKHI9PntsZXQgYT1yLmZpbmQoKHtpZDp1fSk9PnU9PT1lKTthP3QoYSk6bihuZXcgRXJyb3IoInByb3ZpZGVyIG5vdCBmaW5kIikpfSxuKX0pfWxldCBncD1UZShndywoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1lLnByb3ZpZGVyfHwid2VpeGluIixhPUNyKG4pLHU9cj09PSJhcHBsZSIsZz11P3tzY29wZToiZW1haWwifTplLnVuaXZlcmlmeVN0eWxlP3t1bml2ZXJpZnlTdHlsZTpRTyhlLnVuaXZlcmlmeVN0eWxlLGEpfTp7fTtZYyhyKS50aGVuKHk9PntmdW5jdGlvbiBNKCl7aWYoZS5vbmx5QXV0aG9yaXplJiZyPT09IndlaXhpbiIpe3kuYXV0aG9yaXplKCh7Y29kZTpPfSk9Pnt0KHtjb2RlOk8sYXV0aFJlc3VsdDoiIn0pfSxhKTtyZXR1cm59eS5sb2dpbihPPT57bGV0IHg9Ty50YXJnZXQuYXV0aFJlc3VsdCxoZT1PLnRhcmdldC5hcHBsZUluZm87dCh7Y29kZTp4LmNvZGUsYXV0aFJlc3VsdDp4LGFwcGxlSW5mbzpoZX0pfSxhLGcpfXV8fHI9PT0idW5pdmVyaWZ5Ij9NKCk6eS5sb2dvdXQoTSxNKX0pLmNhdGNoKGEpfSxwdykscHA9KGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0IHI9ZS5wcm92aWRlcnx8IndlaXhpbiIsYT1DcihuKTtZYyhyKS50aGVuKHU9Pnt1LmdldFVzZXJJbmZvKGc9PntsZXQgeT17bmlja05hbWU6IiJ9O2lmKHI9PT0id2VpeGluIil7bGV0IE89dS51c2VySW5mbztPJiYoeT17b3BlbklkOk8ub3BlbmlkLG5pY2tOYW1lOk8ubmlja25hbWUsZ2VuZGVyOk8uc2V4LGNpdHk6Ty5jaXR5LHByb3ZpbmNlOk8ucHJvdmluY2UsY291bnRyeTpPLmNvdW50cnksYXZhdGFyVXJsOk8uaGVhZGltZ3VybCx1bmlvbklkOk8udW5pb25pZH0pfWVsc2UgaWYocj09PSJhcHBsZSIpe2xldCBPPXUuYXBwbGVJbmZvO08mJih5PXtvcGVuSWQ6Ty51c2VyLGZ1bGxOYW1lOk8uZnVsbE5hbWUsZW1haWw6Ty5lbWFpbCxhdXRob3JpemF0aW9uQ29kZTpPLmF1dGhvcml6YXRpb25Db2RlLGlkZW50aXR5VG9rZW46Ty5pZGVudGl0eVRva2VuLHJlYWxVc2VyU3RhdHVzOk8ucmVhbFVzZXJTdGF0dXN9KX1lbHNlIHk9dS51c2VySW5mbyx5JiYoeS5vcGVuSWQ9eS5vcGVuSWR8fHkub3BlbmlkfHx1LmF1dGhSZXN1bHQub3BlbmlkLHkubmlja05hbWU9eS5uaWNrTmFtZXx8eS5uaWNrbmFtZSx5LmF2YXRhclVybD15LmF2YXRhclVybHx8eS5oZWFkaW1ndXJsKTtsZXQgTT17fTtlLmRhdGEmJmUuZGF0YS5hcGlfbmFtZT09PSJ3ZWJhcGlfZ2V0dXNlcmluZm8iP00uZGF0YT17ZGF0YTpKU09OLnN0cmluZ2lmeSh5KSxyYXdEYXRhOiIiLHNpZ25hdHVyZToiIixlbmNyeXB0ZWREYXRhOiIiLGl2OiIifTpNLnVzZXJJbmZvPXksdChNKX0sYSl9KS5jYXRjaCgoKT0+e24oIlx1OEJGN1x1NTE0OFx1OEMwM1x1NzUyOCB1bmkubG9naW4iKX0pfSxaTz1UZSh2dyxwcCxtdyksWE89VGUoX3cscHAsYncpLHZwPVRlKHl3LCh7cHJvdmlkZXI6ZX0se3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0IHI9d2wodCksYT1DcihuKTtZYyhlKS50aGVuKHU9PnUucHJlTG9naW4ocixhKSkuY2F0Y2goYSl9LHd3LFN3KSxtcD0oKT0+WWMoInVuaXZlcmlmeSIpLnRoZW4oZT0+ZS5jbG9zZUF1dGhWaWV3KCkpLF9wPU10KEN3LG1wKSxicD1UZShBdywoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj13bCh0KSxhPUNyKG4pO3RyeXtZYygidW5pdmVyaWZ5IikudGhlbih1PT57bGV0IGc9dS5nZXRDaGVja0JveFN0YXRlKCk7cih7c3RhdGU6Z30pfSl9Y2F0Y2godSl7YSh1KX19KTtmdW5jdGlvbiBRTyhlLHQpe3JldHVybiBHLmlzUGxhaW5PYmplY3QoZSkmJkcuaXNQbGFpbk9iamVjdChlLmJ1dHRvbnMpJiZHLnRvVHlwZVN0cmluZyhlLmJ1dHRvbnMubGlzdCk9PT0iW29iamVjdCBBcnJheV0iJiZlLmJ1dHRvbnMubGlzdC5mb3JFYWNoKChuLHIpPT57ZS5idXR0b25zLmxpc3Rbcl0ub25jbGljaz1mdW5jdGlvbigpe2xldCBhPXtjb2RlOiIzMDAwOCIsbWVzc2FnZToiXHU3NTI4XHU2MjM3XHU3MEI5XHU1MUZCXHU0RTg2XHU4MUVBXHU1QjlBXHU0RTQ5XHU2MzA5XHU5NEFFIixpbmRleDpyLHByb3ZpZGVyOm4ucHJvdmlkZXJ9O0cuaXNQbGFpbk9iamVjdChJdSk/SXUuX3RyaWdnZXJVbml2ZXJpZnlCdXR0b25zQ2xpY2soYSk6bXAoKS50aGVuKCgpPT57dChhKX0pfX0pLGV9Y2xhc3MgZVB7Y29uc3RydWN0b3IoKXt0aGlzLnByb3ZpZGVyPSJ1bml2ZXJpZnkiLHRoaXMuZXZlbnROYW1lPSJhcGkudW5pdmVyaWZ5QnV0dG9uc0NsaWNrIn1jbG9zZSgpe3JldHVybiBfcCgpfWxvZ2luKHQpe3JldHVybiBncCh0aGlzLl9nZXRPcHRpb25zKHQpKX1nZXRDaGVja0JveFN0YXRlKHQpe3JldHVybiBicCh0KX1wcmVMb2dpbih0KXtyZXR1cm4gdnAodGhpcy5fZ2V0T3B0aW9ucyh0KSl9b25CdXR0b25zQ2xpY2sodCl7c3Qub24odGhpcy5ldmVudE5hbWUsdCl9b2ZmQnV0dG9uc0NsaWNrKHQpe3N0Lm9mZih0aGlzLmV2ZW50TmFtZSx0KX1fdHJpZ2dlclVuaXZlcmlmeUJ1dHRvbnNDbGljayh0KXtzdC5lbWl0KHRoaXMuZXZlbnROYW1lLHQpfV9nZXRPcHRpb25zKHQ9e30pe3JldHVybiBHLmV4dGVuZCh7fSx0LHtwcm92aWRlcjp0aGlzLnByb3ZpZGVyfSl9fWxldCB0UD1NdChUdywoKT0+SXV8fChJdT1uZXcgZVApKSxuUD1UZShMdywoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1qZygpO2lmKHIubm90aWZpY2F0aW9uQXV0aG9yaXplZCE9PSJhdXRob3JpemVkIilyZXR1cm4gbigibm90aWZpY2F0aW9uQXV0aG9yaXplZDogIityLm5vdGlmaWNhdGlvbkF1dGhvcml6ZWQpO2xldCBhPUcuZXh0ZW5kKHt9LGUpO2RlbGV0ZSBhLmNvbnRlbnQsZGVsZXRlIGEucGF5bG9hZCxzLnB1c2guY3JlYXRlTWVzc2FnZShlLmNvbnRlbnQsZS5wYXlsb2FkLGEpLHQoKX0sdm9pZCAwLE13KSx5cCxyUD1NdChEdywoKT0+eXB8fCh5cD1zLnB1c2guZ2V0Q2hhbm5lbE1hbmFnZXIoKSkpLGlQPU10KCJyZWdpc3RlclJ1bnRpbWUiLGU9PntHLmV4dGVuZChqc1J1bnRpbWUsZSl9KSxvUD17MDp7bmFtZToid2ViIix0aXRsZToiXHU1NkZFXHU2NTg3In0sMTp7bmFtZToidGV4dCIsdGl0bGU6Ilx1N0VBRlx1NjU4N1x1NUI1NyJ9LDI6e25hbWU6ImltYWdlIix0aXRsZToiXHU3RUFGXHU1NkZFXHU3MjQ3In0sMzp7bmFtZToibXVzaWMiLHRpdGxlOiJcdTk3RjNcdTRFNTAifSw0OntuYW1lOiJ2aWRlbyIsdGl0bGU6Ilx1ODlDNlx1OTg5MSJ9LDU6e25hbWU6Im1pbmlQcm9ncmFtIix0aXRsZToiXHU1QzBGXHU3QTBCXHU1RThGIn19LGFQPWU9PntlLnR5cGU9ZS50eXBlfHwwO2xldHtwcm92aWRlcjp0LHR5cGU6bix0aXRsZTpyLHN1bW1hcnk6YSxocmVmOnUsaW1hZ2VVcmw6ZyxtZWRpYVVybDp5LHNjZW5lOk0sbWluaVByb2dyYW06TyxvcGVuQ3VzdG9tZXJTZXJ2aWNlQ2hhdDp4LGNvcnBpZDpoZSxjdXN0b21lclVybDpiZX09ZTtHLmlzU3RyaW5nKGcpJiZnJiYoZz1tbihnKSk7bGV0IFBlPW9QW25dO2lmKFBlKXtsZXQgZ3Q9e3Byb3ZpZGVyOnQsdHlwZTpQZS5uYW1lLHRpdGxlOnIsY29udGVudDphLGhyZWY6dSxwaWN0dXJlczpbZ10sdGh1bWJzOmc/W2ddOnZvaWQgMCxtZWRpYTp5LG1pbmlQcm9ncmFtOk8sZXh0cmE6e3NjZW5lOk19LG9wZW5DdXN0b21lclNlcnZpY2VDaGF0OngsY29ycGlkOmhlLHVybDpiZX07cmV0dXJuIHQ9PT0id2VpeGluIiYmKG49PT0xfHxuPT09MikmJmRlbGV0ZSBndC50aHVtYnMsZ3R9cmV0dXJuIlx1NTIwNlx1NEVBQlx1NTNDMlx1NjU3MCB0eXBlIFx1NEUwRFx1NkI2M1x1Nzg2RSJ9LEVwPWZ1bmN0aW9uKGUsdCxuLHIsYT0ic2hhcmUiKXtsZXQgdT1DcihyKSxnPXQub3BlbkN1c3RvbWVyU2VydmljZUNoYXQ/Im9wZW5DdXN0b21lclNlcnZpY2VDaGF0Ijoic2VuZCI7dHJ5e2VbZ10odCwoKT0+e24oKX0sdSl9Y2F0Y2goeSl7dSh7bWVzc2FnZTpgJHt0LnByb3ZpZGVyfSAke2d9IFx1NjVCOVx1NkNENVx1OEMwM1x1NzUyOFx1NTkzMVx1OEQyNWB9KX19LHNQPVRlKE93LChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldCByPWFQKGUpLGE9Q3Iobik7aWYoRy5pc1N0cmluZyhyKSlyZXR1cm4gbihyKTtzLnNoYXJlLmdldFNlcnZpY2VzKHU9PntsZXQgZz11LmZpbmQoKHtpZDp5fSk9Pnk9PT1yLnByb3ZpZGVyKTtnP2cuYXV0aGVudGljYXRlZD9FcChnLHIsdCxuKTpnLmF1dGhvcml6ZSgoKT0+RXAoZyxyLHQsbiksYSk6bigic2VydmljZSBub3QgZm91bmQiKX0sYSl9LE53LFB3KSxsUD1UZShJdywoe3R5cGU6ZSxpbWFnZVVybDp0LHN1bW1hcnk6bixocmVmOnJ9LHtyZXNvbHZlOmEscmVqZWN0OnV9KT0+e2xldCBnPUNyKHUpO0cuaXNTdHJpbmcodCkmJnQmJih0PW1uKHQpKSxzLnNoYXJlLnNlbmRXaXRoU3lzdGVtKHt0eXBlOmUscGljdHVyZXM6dD9bdF06dm9pZCAwLGNvbnRlbnQ6bixocmVmOnJ9LCgpPT5hKCksZyl9LFJ3LGt3KSxjUD1UZSh4dywoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1lLnByb3ZpZGVyLGE9Q3Iobik7cy5wYXltZW50LmdldENoYW5uZWxzKHU9PntsZXQgZz11LmZpbmQoKHtpZDp5fSk9Pnk9PT1yKTtnP3MucGF5bWVudC5yZXF1ZXN0KGcsZS5vcmRlckluZm8seT0+e3QoeSl9LGEpOm4oInNlcnZpY2Ugbm90IGZvdW5kIil9LGEpfSxCdyksU3A9QmcsdVA9VGUoIm5hdmlnYXRlVG9NaW5pUHJvZ3JhbSIsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57U3AoIm5hdmlnYXRlVG9VbmlNUCIsZSxyPT57aWYoci5lcnJNc2cmJnIuZXJyTXNnLmluZGV4T2YoIjpvayIpPT09LTEpcmV0dXJuIG4oci5lcnJNc2cuc3BsaXQoIiAiKVsxXSk7dCgpfSl9KSx3cD1bXTtmdW5jdGlvbiBDcChlKXt3cC5wdXNoKGUpfWxldCBmUD1DcDtmdW5jdGlvbiBkUChlLHQpe3dwLmZvckVhY2gobj0+bihlLHQpKX1mdW5jdGlvbiBoUChlLHQsLi4ubil7bGV0IHI9dlAoZSx0LG4pO3ImJmNvbnNvbGVbZV0ocil9ZnVuY3Rpb24gZ1AoKXtyZXR1cm4gdHlwZW9mIF9fY2hhbm5lbElkX189PSJzdHJpbmciJiZfX2NoYW5uZWxJZF9ffWZ1bmN0aW9uIHBQKGUsdCl7c3dpdGNoKEcudG9SYXdUeXBlKHQpKXtjYXNlIkZ1bmN0aW9uIjpyZXR1cm4iZnVuY3Rpb24oKSB7IFtuYXRpdmUgY29kZV0gfSI7ZGVmYXVsdDpyZXR1cm4gdH19ZnVuY3Rpb24gdlAoZSx0LG4pe3JldHVybiBnUCgpPyhuLnB1c2godC5yZXBsYWNlKCJhdCAiLCJ1bmktYXBwOi8vLyIpKSxjb25zb2xlW2VdLmFwcGx5KGNvbnNvbGUsbikpOm4ubWFwKGZ1bmN0aW9uKGEpe2xldCB1PUcudG9UeXBlU3RyaW5nKGEpLnRvTG93ZXJDYXNlKCk7aWYoWyJbb2JqZWN0IG9iamVjdF0iLCJbb2JqZWN0IGFycmF5XSIsIltvYmplY3QgbW9kdWxlXSJdLmluZGV4T2YodSkhPT0tMSl0cnl7YT0iLS0tQkVHSU46SlNPTi0tLSIrSlNPTi5zdHJpbmdpZnkoYSxwUCkrIi0tLUVORDpKU09OLS0tIn1jYXRjaChnKXthPXV9ZWxzZSBpZihhPT09bnVsbClhPSItLS1OVUxMLS0tIjtlbHNlIGlmKGE9PT12b2lkIDApYT0iLS0tVU5ERUZJTkVELS0tIjtlbHNle2xldCBnPUcudG9SYXdUeXBlKGEpLnRvVXBwZXJDYXNlKCk7Zz09PSJOVU1CRVIifHxnPT09IkJPT0xFQU4iP2E9Ii0tLUJFR0lOOiIrZysiLS0tIithKyItLS1FTkQ6IitnKyItLS0iOmE9U3RyaW5nKGEpfXJldHVybiBhfSkuam9pbigiLS0tQ09NTUEtLS0iKSsiICIrdH1sZXQgQXA9MSxHZixtUD17fTtmdW5jdGlvbiBUcChlKXtyZXR1cm4gZSYmdHlwZW9mIGUuZ2V0Tm9kZUlkPT0iZnVuY3Rpb24iJiZlLnBhZ2VJZH1mdW5jdGlvbiBfUChlKXtyZXR1cm4gZSYmZS4kJiZlLiQucHJveHk9PT1lfWZ1bmN0aW9uIGJQKGUpe2lmKFRwKGUpKXJldHVybiBlfWZ1bmN0aW9uIHlQKGUpe2lmKF9QKGUpKXJldHVybiBlLiRlbH1mdW5jdGlvbiBFUChlKXtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyV3JhcHBlciE9InVuZGVmaW5lZCI/e19fdHlwZV9fOiJBcnJheUJ1ZmZlciIsdmFsdWU6bmV3IEFycmF5QnVmZmVyV3JhcHBlcihlKX06e19fdHlwZV9fOiJBcnJheUJ1ZmZlciIsdmFsdWU6ZX19ZnVuY3Rpb24gU1AoZSx0KXtsZXQgbj0iIixyPSIiO3JldHVybiBlJiZlLmdldE5vZGVJZCYmKHI9ZS5wYWdlSWQsbj1lLmdldE5vZGVJZCgpKSx7X190eXBlX186dCxwYWdlSWQ6cixub2RlSWQ6bn19ZnVuY3Rpb24gT3AoZSl7bGV0IHQ9ZSYmZS5fX3ZfcmF3O3JldHVybiB0P09wKHQpOmV9ZnVuY3Rpb24gcWYoZSx0LG4scil7aWYoZT1PcChlKSx0eXBlb2YgZT09ImZ1bmN0aW9uIil7bGV0IGE7aWYobil7bGV0IHU9T2JqZWN0LmtleXModCkuZmluZChnPT50W2ddPT09ZSk7YT11P3BhcnNlSW50KHUpOkFwKyssdFthXT1lfWVsc2UgYT1BcCsrLHRbYV09ZTtyZXR1cm4gYX1lbHNle2lmKEcuaXNBcnJheShlKSlyZXR1cm4gci5kZXB0aCsrLGUubWFwKGE9PnFmKGEsdCxuLHIpKTtpZihlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIHIuZGVwdGg+MCYmKHIubmVzdGVkPSEwKSxFUChlKTtpZihHLmlzUGxhaW5PYmplY3QoZSl8fFRwKGUpKXtsZXQgYT1iUChlKSx1PWE/dm9pZCAwOnlQKGUpLGc9YXx8dTtpZihnKXJldHVybiByLmRlcHRoPjAmJihyLm5lc3RlZD0hMCksU1AoZyxhPyJVbmlFbGVtZW50IjoiQ29tcG9uZW50UHVibGljSW5zdGFuY2UiKTt7bGV0IHk9e307cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goTT0+e3IuZGVwdGgrKyx5W01dPXFmKGVbTV0sdCxuLHIpfSkseX19fXJldHVybiBlfWZ1bmN0aW9uIHdQKGUsdCxuLHIpe3JldHVybiBLYygibWV0aG9kIixlLHQsbixyKX1mdW5jdGlvbiBZZigpe3JldHVybiBHZnx8KEdmPVIucmVxdWlyZU5hdGl2ZVBsdWdpbigiVVRTLVByb3h5IikpLEdmfWZ1bmN0aW9uIFBwKGUsdCxuLHIsYSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJcdThGRDRcdTU2REVcdTUwM0NcdTRFM0FcdUZGMUEiK0pTT04uc3RyaW5naWZ5KHQpKyJcdUZGMUJcdThCRjdcdTZDNDJcdTUzQzJcdTY1NzBcdTRFM0FcdUZGMUEiK0pTT04uc3RyaW5naWZ5KGUpKTtpZihHLmlzU3RyaW5nKHQpKXRyeXt0PUpTT04ucGFyc2UodCl9Y2F0Y2godSl7dGhyb3cgbmV3IEVycm9yKGBKU09OLnBhcnNlKCR7dH0pOiBgK3UpfWlmKHQuZXJyTXNnKXRocm93IG5ldyBFcnJvcih0LmVyck1zZyk7aWYobiYmbi50eXBlPT09ImludGVyZmFjZSImJnR5cGVvZiB0LnBhcmFtcz09Im51bWJlciIpe2lmKCF0LnBhcmFtcylyZXR1cm4gbnVsbDtpZih0LnBhcmFtcz09PXImJmEpcmV0dXJuIGE7aWYoS2Zbbi5vcHRpb25zXSl7bGV0IHU9UnAoRy5leHRlbmQoe2luc3RhbmNlSWQ6dC5wYXJhbXN9LEtmW24ub3B0aW9uc10pKTtyZXR1cm4gbmV3IHV9fXJldHVybiB0LnBhcmFtc31mdW5jdGlvbiBOcChlKXtpZihlLmVyck1zZyl0aHJvdyBuZXcgRXJyb3IoZS5lcnJNc2cpO3JldHVybiBkZWxldGUgZS5lcnJNc2csUHAoZSxZZigpLmludm9rZVN5bmMoZSwoKT0+e30pKX1mdW5jdGlvbiBLYyhlLHQse21vZHVsZU5hbWU6bixtb2R1bGVUeXBlOnIscGFja2FnZTphLGNsYXNzOnUsbmFtZTpnLG1ldGhvZDp5LGNvbXBhbmlvbjpNLGtlZXBBbGl2ZTpPLHBhcmFtczp4LHJldHVybjpoZSxlcnJNc2c6YmV9LFBlLGd0KXtPfHwoTz0oZy5pbmRleE9mKCJvbiIpPT09MHx8Zy5pbmRleE9mKCJvZmYiKT09PTApJiZ4Lmxlbmd0aD09PTEmJnhbMF0udHlwZT09PSJVVFNDYWxsYmFjayIpO2xldCB5dD1QZT97bW9kdWxlTmFtZTpuLG1vZHVsZVR5cGU6cixpZDpQZSx0eXBlOmUsbmFtZTpnLG1ldGhvZDp4LG5lc3RlZDohMSxrZWVwQWxpdmU6T306e21vZHVsZU5hbWU6bixtb2R1bGVUeXBlOnIscGFja2FnZTphLGNsYXNzOnUsbmFtZTp5fHxnLHR5cGU6ZSxjb21wYW5pb246TSxtZXRob2Q6eCxuZXN0ZWQ6ITEsa2VlcEFsaXZlOk99O3JldHVybiguLi5adCk9PntpZihiZSl0aHJvdyBuZXcgRXJyb3IoYmUpO2xldCBWdD1PP21QOnt9LHduPSh7aWQ6YXQsbmFtZTpYdCxwYXJhbXM6JHR9KT0+e2xldCBLdD1WdFthdF07S3Q/KEt0KC4uLiR0KSxPfHxkZWxldGUgVnRbYXRdKTpjb25zb2xlLmVycm9yKGB1dHNcdTYzRDJcdTRFRjZbJHtufV0gJHthfSR7dX0uJHtnLnJlcGxhY2UoIkJ5SnMiLCIiKX0gJHtYdH1cdTU2REVcdThDMDNcdTUxRkRcdTY1NzBcdTVERjJcdTkxQ0FcdTY1M0VcdUZGMENcdTRFMERcdTgwRkRcdTUxOERcdTZCMjFcdTYyNjdcdTg4NENcdUZGMENcdTUzQzJcdTgwMDNcdTY1ODdcdTY4NjNcdUZGMUFodHRwczovL2RvYy5kY2xvdWQubmV0LmNuL3VuaS1hcHAteC9wbHVnaW4vdXRzLXBsdWdpbi5odG1sI2tlZXBhbGl2ZWApfSxibj17ZGVwdGg6MCxuZXN0ZWQ6ITF9LHh0PUcuZXh0ZW5kKHt9LHl0LHtwYXJhbXM6WnQubWFwKGF0PT5xZihhdCxWdCxPLGJuKSl9KTtyZXR1cm4geHQubmVzdGVkPWJuLm5lc3RlZCx0P25ldyBQcm9taXNlKChhdCxYdCk9PntZZigpLmludm9rZUFzeW5jKHh0LCR0PT57JHQudHlwZSE9PSJyZXR1cm4iP3duKCR0KTokdC5lcnJNc2c/WHQoJHQuZXJyTXNnKTphdCgkdC5wYXJhbXMpfSl9KTpQcCh4dCxZZigpLmludm9rZVN5bmMoeHQsd24pLGhlLFBlLGd0KX19ZnVuY3Rpb24gSXAoZSx0KXtyZXR1cm4gdC5tYWluJiYhdC5tZXRob2QmJnhwKCkmJih0Lm1ldGhvZD0ic18iK3QubmFtZSksS2MoIm1ldGhvZCIsZSx0LDApfWxldCBDUD1JcDtmdW5jdGlvbiBrcChlLHQpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyImJkcuaGFzT3duKHQsZSsiQnlKcyIpP2UrIkJ5SnMiOmV9ZnVuY3Rpb24gQVAoZSl7cmV0dXJuIHR5cGVvZiBlPT0idW5kZWZpbmVkIn1mdW5jdGlvbiBUUChlKXtyZXR1cm4hQVAoZS5pbnN0YW5jZUlkKX1mdW5jdGlvbiBrdShlKXtyZXR1cm4iX18kc2V0IitHLmNhcGl0YWxpemUoZSl9ZnVuY3Rpb24gUnAoZSl7bGV0e21vZHVsZU5hbWU6dCxtb2R1bGVUeXBlOm4scGFja2FnZTpyLGNsYXNzOmEsbWV0aG9kczp1LHByb3BzOmcsc2V0dGVyczp5LGVyck1zZzpNfT1lLE89e21vZHVsZU5hbWU6dCxtb2R1bGVUeXBlOm4scGFja2FnZTpyLGNsYXNzOmEsZXJyTXNnOk19LHgsaGU9W10sYmU9e30sUGU9W10sZ3Q9e30seXQ9ITE7VFAoZSk/KHl0PSEwLHg9ZS5pbnN0YW5jZUlkKTooaGU9ZS5jb25zdHJ1Y3Rvci5wYXJhbXMsYmU9ZS5zdGF0aWNNZXRob2RzLFBlPWUuc3RhdGljUHJvcHMsZ3Q9ZS5zdGF0aWNTZXR0ZXJzKSx4cCgpJiZoZS5maW5kKGJuPT5ibi50eXBlPT09IlVUU0NhbGxiYWNrInx8Ym4udHlwZS5pbmRleE9mKCJKU09OT2JqZWN0Iik+MCkmJmhlLnB1c2goe25hbWU6Il9ieUpzIix0eXBlOiJib29sZWFuIn0pO2xldCBadD1jbGFzc3tjb25zdHJ1Y3RvciguLi54dCl7aWYodGhpcy5fX2luc3RhbmNlSWQ9MCxNKXRocm93IG5ldyBFcnJvcihNKTtsZXQgYXQ9e307aWYoeXQ/dHlwZW9mIHg9PSJudW1iZXIiJiYodGhpcy5fX2luc3RhbmNlSWQ9eCk6dGhpcy5fX2luc3RhbmNlSWQ9S2MoImNvbnN0cnVjdG9yIiwhMSxHLmV4dGVuZCh7bmFtZToiY29uc3RydWN0b3IiLGtlZXBBbGl2ZTohMSxwYXJhbXM6aGV9LE8pLDApLmFwcGx5KG51bGwseHQpLCF0aGlzLl9faW5zdGFuY2VJZCl0aHJvdyBuZXcgRXJyb3IoYG5ldyAke2F9IGlzIGZhaWxlZGApO2xldCBYdD10aGlzLCR0PW5ldyBQcm94eShYdCx7Z2V0KEt0LGp0KXtpZihqdD09PSJfX3Zfc2tpcCIpcmV0dXJuITA7aWYoIWF0W2p0XSl7aWYoanQ9a3AoanQsdSksRy5oYXNPd24odSxqdCkpe2xldHthc3luYzpKbixrZWVwQWxpdmU6UXQscGFyYW1zOl9vLHJldHVybjpwY309dVtqdF07YXRbanRdPXdQKCEhSm4sRy5leHRlbmQoe25hbWU6anQsa2VlcEFsaXZlOlF0LHBhcmFtczpfbyxyZXR1cm46cGN9LE8pLFh0Ll9faW5zdGFuY2VJZCwkdCl9ZWxzZSBpZihnLmluY2x1ZGVzKGp0KSlyZXR1cm4gTnAoe21vZHVsZU5hbWU6dCxtb2R1bGVUeXBlOm4saWQ6WHQuX19pbnN0YW5jZUlkLHR5cGU6ImdldHRlciIsa2VlcEFsaXZlOiExLG5lc3RlZDohMSxuYW1lOmp0LGVyck1zZzpNfSl9cmV0dXJuIGF0W2p0XX0sc2V0KEt0LGp0LEpuKXtpZihnLmluY2x1ZGVzKGp0KSl7bGV0IFF0PWt1KGp0KTtpZighYXRbUXRdKXtsZXQgX289eVtqdF07X28mJihhdFtRdF09S2MoInNldHRlciIsITEsRy5leHRlbmQoe25hbWU6anQsa2VlcEFsaXZlOiExLHBhcmFtczpbX29dfSxPKSxYdC5fX2luc3RhbmNlSWQsJHQpKX1yZXR1cm4gYXRba3UoanQpXShKbiksITB9cmV0dXJuITF9fSk7cmV0dXJuIE9iamVjdC5mcmVlemUoJHQpfX0sVnQ9e30sd249e307cmV0dXJuIE9iamVjdC5mcmVlemUobmV3IFByb3h5KFp0LHtnZXQoYm4seHQsYXQpe2lmKHh0PWtwKHh0LGJlKSxHLmhhc093bihiZSx4dCkpe2lmKCF3blt4dF0pe2xldHthc3luYzpYdCxrZWVwQWxpdmU6JHQscGFyYW1zOkt0LHJldHVybjpqdH09YmVbeHRdO3duW3h0XT1JcCghIVh0LEcuZXh0ZW5kKHtuYW1lOnh0LGNvbXBhbmlvbjohMCxrZWVwQWxpdmU6JHQscGFyYW1zOkt0LHJldHVybjpqdH0sTykpfXJldHVybiB3blt4dF19cmV0dXJuIFBlLmluY2x1ZGVzKHh0KT9OcChHLmV4dGVuZCh7bmFtZTp4dCxjb21wYW5pb246ITAsdHlwZToiZ2V0dGVyIn0sTykpOlJlZmxlY3QuZ2V0KGJuLHh0LGF0KX0sc2V0KGJuLHh0LGF0KXtpZihQZS5pbmNsdWRlcyh4dCkpe2xldCBYdD1rdSh4dCk7aWYoIVZ0W1h0XSl7bGV0ICR0PWd0W3h0XTskdCYmKFZ0W1h0XT1LYygic2V0dGVyIiwhMSxHLmV4dGVuZCh7bmFtZTp4dCxrZWVwQWxpdmU6ITEscGFyYW1zOlskdF19LE8pLDApKX1yZXR1cm4gVnRba3UoeHQpXShhdCksITB9cmV0dXJuITF9fSkpfWZ1bmN0aW9uIFJ1KCl7cmV0dXJuIHR5cGVvZiBzIT0idW5kZWZpbmVkIiYmcy5vcy5uYW1lPT09IkFuZHJvaWQifWZ1bmN0aW9uIHhwKCl7cmV0dXJuIVJ1KCl9ZnVuY3Rpb24gT1AoZSx0KXtyZXR1cm4gUnUoKT8idXRzLnNkay4iKyh0PyJtb2R1bGVzLiI6IiIpK2U6IiJ9ZnVuY3Rpb24gUFAoZSx0KXtyZXR1cm4gQnAoZSxSdSgpPyJJbmRleEt0IjoiSW5kZXhTd2lmdCIsdCl9ZnVuY3Rpb24gQnAoZSx0LG4pe3JldHVybiBSdSgpP3Q6IlVUU1NESyIrKG4/Ik1vZHVsZXMiOiIiKStHLmNhcGl0YWxpemUoZSkrRy5jYXBpdGFsaXplKHQpfWxldCBLZj17fTtmdW5jdGlvbiBOUChlLHQpe0tmW2VdPXR9bGV0IExwPXt9O2Z1bmN0aW9uIElQKGUsdCl7THBbZV09dH1mdW5jdGlvbiBrUChlLHQ9ITEpe2xldCBuPUxwW2VdO3JldHVybiBufHx0fHxjb25zb2xlLmVycm9yKGAke2V9IGlzIG5vdCBmb3VuZGApLG59bGV0IEpvPXtsb2FkOiJsb2FkIixjbG9zZToiY2xvc2UiLGVycm9yOiJlcnJvciIsYWRDbGlja2VkOiJhZENsaWNrZWQifTtjbGFzcyBNcHtjb25zdHJ1Y3Rvcigpe3RoaXMuX2NhbGxiYWNrcz17fX1vbkxvYWQodCl7dGhpcy5fYWRkRXZlbnRMaXN0ZW5lcihKby5sb2FkLHQpfW9uQ2xvc2UodCl7dGhpcy5fYWRkRXZlbnRMaXN0ZW5lcihKby5jbG9zZSx0KX1vbkVycm9yKHQpe3RoaXMuX2FkZEV2ZW50TGlzdGVuZXIoSm8uZXJyb3IsdCl9b2ZmTG9hZCh0KXt0aGlzLl9yZW1vdmVFdmVudExpc3RlbmVyKEpvLmxvYWQsdCl9b2ZmQ2xvc2UodCl7dGhpcy5fcmVtb3ZlRXZlbnRMaXN0ZW5lcihKby5jbG9zZSx0KX1vZmZFcnJvcih0KXt0aGlzLl9yZW1vdmVFdmVudExpc3RlbmVyKEpvLmVycm9yLHQpfV9hZGRFdmVudExpc3RlbmVyKHQsbil7IUcuaXNGdW5jdGlvbihuKXx8KHRoaXMuX2NhbGxiYWNrc1t0XXx8KHRoaXMuX2NhbGxiYWNrc1t0XT1bXSksdGhpcy5fY2FsbGJhY2tzW3RdLnB1c2gobikpfV9yZW1vdmVFdmVudExpc3RlbmVyKHQsbil7bGV0IHI9dGhpcy5fY2FsbGJhY2tzW3RdLGE9ci5pbmRleE9mKG4pO2E+LTEmJnIuc3BsaWNlKGEsMSl9X2Rpc3BhdGNoRXZlbnQodCxuKXt0aGlzLl9jYWxsYmFja3NbdF0uZm9yRWFjaChyPT57cihufHx7fSl9KX19Y2xhc3MgSmYgZXh0ZW5kcyBNcHtjb25zdHJ1Y3Rvcih0LG4pe3N1cGVyKCk7dGhpcy5wcmVsb2FkPSEwLHRoaXMuX2lzTG9hZGVkPSExLHRoaXMuX2lzTG9hZGluZz0hMSx0aGlzLl9sb2FkUHJvbWlzZVJlc29sdmU9bnVsbCx0aGlzLl9sb2FkUHJvbWlzZVJlamVjdD1udWxsLHRoaXMuX3Nob3dQcm9taXNlUmVzb2x2ZT1udWxsLHRoaXMuX3Nob3dQcm9taXNlUmVqZWN0PW51bGwsdGhpcy5wcmVsb2FkPW4ucHJlbG9hZCE9PXZvaWQgMD9uLnByZWxvYWQ6ITE7bGV0IHI9dGhpcy5fYWRJbnN0YW5jZT10O3Iub25Mb2FkKCgpPT57dGhpcy5faXNMb2FkZWQ9ITAsdGhpcy5faXNMb2FkaW5nPSExLHRoaXMuX2xvYWRQcm9taXNlUmVzb2x2ZSE9bnVsbCYmKHRoaXMuX2xvYWRQcm9taXNlUmVzb2x2ZSgpLHRoaXMuX2xvYWRQcm9taXNlUmVzb2x2ZT1udWxsKSx0aGlzLl9zaG93UHJvbWlzZVJlc29sdmUhPW51bGwmJih0aGlzLl9zaG93UHJvbWlzZVJlc29sdmUoKSx0aGlzLl9zaG93UHJvbWlzZVJlc29sdmU9bnVsbCx0aGlzLl9zaG93QWQoKSksdGhpcy5fZGlzcGF0Y2hFdmVudChKby5sb2FkLHt9KX0pLHIub25DbG9zZShhPT57dGhpcy5faXNMb2FkZWQ9ITEsdGhpcy5faXNMb2FkaW5nPSExLHRoaXMuX2Rpc3BhdGNoRXZlbnQoSm8uY2xvc2UsYSksdGhpcy5wcmVsb2FkPT09ITAmJnRoaXMuX2xvYWRBZCgpfSksci5vbkVycm9yKGE9Pnt0aGlzLl9pc0xvYWRpbmc9ITE7bGV0IHU9e2NvZGU6YS5jb2RlLGVyck1zZzphLm1lc3NhZ2V9O3RoaXMuX2Rpc3BhdGNoRXZlbnQoSm8uZXJyb3IsdSk7bGV0IGc9bmV3IEVycm9yKEpTT04uc3RyaW5naWZ5KHUpKTt0aGlzLl9sb2FkUHJvbWlzZVJlamVjdCE9bnVsbCYmKHRoaXMuX2xvYWRQcm9taXNlUmVqZWN0KGcpLHRoaXMuX2xvYWRQcm9taXNlUmVqZWN0PW51bGwpLHRoaXMuX3Nob3dQcm9taXNlUmVqZWN0IT1udWxsJiYodGhpcy5fc2hvd1Byb21pc2VSZWplY3QoZyksdGhpcy5fc2hvd1Byb21pc2VSZWplY3Q9bnVsbCl9KSxyLm9uQWRDbGlja2VkJiZyLm9uQWRDbGlja2VkKCgpPT57dGhpcy5fZGlzcGF0Y2hFdmVudChKby5hZENsaWNrZWQse30pfSl9Z2V0UHJvdmlkZXIoKXtyZXR1cm4gdGhpcy5fYWRJbnN0YW5jZS5nZXRQcm92aWRlcigpfWxvYWQoKXtyZXR1cm4gbmV3IFByb21pc2UoKHQsbik9Pnt0aGlzLl9sb2FkUHJvbWlzZVJlc29sdmU9dCx0aGlzLl9sb2FkUHJvbWlzZVJlamVjdD1uLCF0aGlzLl9pc0xvYWRpbmcmJih0aGlzLl9pc0xvYWRlZD90KCIiKTp0aGlzLl9sb2FkQWQoKSl9KX1zaG93KCl7cmV0dXJuIG5ldyBQcm9taXNlKCh0LG4pPT57dGhpcy5fc2hvd1Byb21pc2VSZXNvbHZlPXQsdGhpcy5fc2hvd1Byb21pc2VSZWplY3Q9biwhdGhpcy5faXNMb2FkaW5nJiYodGhpcy5faXNMb2FkZWQ/KHRoaXMuX3Nob3dBZCgpLHQoIiIpKTp0aGlzLl9sb2FkQWQoKSl9KX1kZXN0cm95KCl7dGhpcy5fYWRJbnN0YW5jZS5kZXN0cm95KCl9X2xvYWRBZCgpe3RoaXMuX2lzTG9hZGVkPSExLHRoaXMuX2lzTG9hZGluZz0hMCx0aGlzLl9hZEluc3RhbmNlLmxvYWQoKX1fc2hvd0FkKCl7dGhpcy5fYWRJbnN0YW5jZS5zaG93KCl9fWNsYXNzIFJQIGV4dGVuZHMgSmZ7Y29uc3RydWN0b3IodCl7c3VwZXIocy5hZC5jcmVhdGVSZXdhcmRlZFZpZGVvQWQodCksdCk7dGhpcy5fbG9hZEFkKCl9fWxldCB4UD1NdChGdyxlPT5uZXcgUlAoZSksVXcsVncpO2NsYXNzIEJQIGV4dGVuZHMgSmZ7Y29uc3RydWN0b3IodCl7c3VwZXIocy5hZC5jcmVhdGVGdWxsU2NyZWVuVmlkZW9BZCh0KSx0KTt0aGlzLnByZWxvYWQ9ITF9fWxldCBMUD1NdCgkdyxlPT5uZXcgQlAoZSksancsSHcpO2NsYXNzIE1QIGV4dGVuZHMgSmZ7Y29uc3RydWN0b3IodCl7c3VwZXIocy5hZC5jcmVhdGVJbnRlcnN0aXRpYWxBZCh0KSx0KTt0aGlzLnByZWxvYWQ9ITEsdGhpcy5fbG9hZEFkKCl9fWxldCBEUD1NdCh6dyxlPT5uZXcgTVAoZSksR3csV3cpLHphPXt9LE9sPXt9O2Z1bmN0aW9uIEZQKGUpe2xldCB0PWUucHJvdmlkZXI7aWYoemFbdF18fCh6YVt0XT17fSksdHlwZW9mIHphW3RdLnBsdWdpbj09Im9iamVjdCIpe2Uuc3VjY2Vzcyh6YVt0XS5wbHVnaW4pO3JldHVybn1pZihPbFt0XXx8KE9sW3RdPVtdKSxPbFt0XS5wdXNoKGUpLHphW3RdLnN0YXR1cz09PSEwKXtlLl9fcGx1Z2luPXphW3RdLnBsdWdpbjtyZXR1cm59emFbdF0uc3RhdHVzPSEwO2xldCBuPWxhKHQpO2lmKCFufHwhbi5pbml0U0RLKXtPbFt0XS5mb3JFYWNoKHI9PntyLmZhaWwoe2NvZGU6LTEsbWVzc2FnZToicHJvdmlkZXIgWyIrdCsiXSBpbnZhbGlkIn0pfSksT2xbdF0ubGVuZ3RoPTAsemFbdF0uc3RhdHVzPSExO3JldHVybn16YVt0XS5wbHVnaW49bixlLl9fcGx1Z2luPW4sbi5pbml0U0RLKHI9PntsZXQgYT1yLmNvZGU9PT0xfHxyLmNvZGU9PT0iMSI7YT96YVt0XS5wbHVnaW49bjp6YVt0XS5zdGF0dXM9ITEsT2xbdF0uZm9yRWFjaCh1PT57YT91LnN1Y2Nlc3ModS5fX3BsdWdpbik6dS5mYWlsKHIpfSksT2xbdF0ubGVuZ3RoPTB9KX1jbGFzcyBWUCBleHRlbmRzIE1we2NvbnN0cnVjdG9yKHQpe3N1cGVyKCk7dGhpcy5fYWRwaWQ9IiIsdGhpcy5fcHJvdmlkZXI9IiIsdGhpcy5fdXNlckRhdGE9bnVsbCx0aGlzLl9pc0xvYWRlZD0hMSx0aGlzLl9pc0xvYWRpbmc9ITEsdGhpcy5fbG9hZFByb21pc2VSZXNvbHZlPW51bGwsdGhpcy5fbG9hZFByb21pc2VSZWplY3Q9bnVsbCx0aGlzLl9zaG93UHJvbWlzZVJlc29sdmU9bnVsbCx0aGlzLl9zaG93UHJvbWlzZVJlamVjdD1udWxsLHRoaXMuX2FkSW5zdGFuY2U9bnVsbCx0aGlzLl9hZEVycm9yPSIiLHRoaXMuX2FkcGlkPXQuYWRwaWQsdGhpcy5fcHJvdmlkZXI9dC5wcm92aWRlcix0aGlzLl91c2VyRGF0YT10LnVzZXJEYXRhLE4oKCk9Pnt0aGlzLl9pbml0KCl9KX1faW5pdCgpe3RoaXMuX2FkRXJyb3I9IiIsRlAoe3Byb3ZpZGVyOnRoaXMuX3Byb3ZpZGVyLHN1Y2Nlc3M6dD0+e3RoaXMuX2FkSW5zdGFuY2U9dCx0aGlzLl91c2VyRGF0YSYmdGhpcy5iaW5kVXNlckRhdGEodGhpcy5fdXNlckRhdGEpLHRoaXMuX2xvYWRBZCgpfSxmYWlsOnQ9Pnt0aGlzLl9hZEVycm9yPXQsdGhpcy5fbG9hZFByb21pc2VSZWplY3QhPW51bGwmJih0aGlzLl9sb2FkUHJvbWlzZVJlamVjdCh0aGlzLl9jcmVhdGVFcnJvcih0KSksdGhpcy5fbG9hZFByb21pc2VSZWplY3Q9bnVsbCksdGhpcy5fZGlzcGF0Y2hFdmVudChKby5lcnJvcix0KX19KX1nZXRQcm92aWRlcigpe3JldHVybiB0aGlzLl9wcm92aWRlcn1sb2FkKCl7cmV0dXJuIG5ldyBQcm9taXNlKCh0LG4pPT57aWYodGhpcy5fbG9hZFByb21pc2VSZXNvbHZlPXQsdGhpcy5fbG9hZFByb21pc2VSZWplY3Q9biwhdGhpcy5faXNMb2FkaW5nKXtpZih0aGlzLl9hZEVycm9yKXt0aGlzLl9pbml0KCk7cmV0dXJufXRoaXMuX2lzTG9hZGVkP3QoIiIpOnRoaXMuX2xvYWRBZCgpfX0pfXNob3coKXtyZXR1cm4gbmV3IFByb21pc2UoKHQsbik9PntpZih0aGlzLl9zaG93UHJvbWlzZVJlc29sdmU9dCx0aGlzLl9zaG93UHJvbWlzZVJlamVjdD1uLCF0aGlzLl9pc0xvYWRpbmcpe2lmKHRoaXMuX2FkRXJyb3Ipe3RoaXMuX2luaXQoKTtyZXR1cm59dGhpcy5faXNMb2FkZWQ/KHRoaXMuX3Nob3dBZCgpLHQoIiIpKTp0aGlzLl9sb2FkQWQoKX19KX1yZXBvcnRFeHBvc3VyZSgpe3RoaXMuX2FkSW5zdGFuY2UhPT1udWxsJiZ0aGlzLl9hZEluc3RhbmNlLnJlcG9ydEV4cG9zdXJlKCl9YmluZFVzZXJEYXRhKHQpe3RoaXMuX2FkSW5zdGFuY2UhPT1udWxsJiZ0aGlzLl9hZEluc3RhbmNlLmJpbmRVc2VyRGF0YSh0KX1kZXN0cm95KCl7dGhpcy5fYWRJbnN0YW5jZSE9PW51bGwmJnRoaXMuX2FkSW5zdGFuY2UuZGVzdHJveSYmdGhpcy5fYWRJbnN0YW5jZS5kZXN0cm95KHthZHBpZDp0aGlzLl9hZHBpZH0pfV9sb2FkQWQoKXtpZih0aGlzLl9hZEluc3RhbmNlIT09bnVsbCl7aWYodGhpcy5faXNMb2FkaW5nPT09ITApcmV0dXJuO3RoaXMuX2lzTG9hZGluZz0hMCx0aGlzLl9hZEluc3RhbmNlLmxvYWREYXRhKHthZHBpZDp0aGlzLl9hZHBpZH0sdD0+e3RoaXMuX2lzTG9hZGVkPSEwLHRoaXMuX2lzTG9hZGluZz0hMSx0aGlzLl9sb2FkUHJvbWlzZVJlc29sdmUhPW51bGwmJih0aGlzLl9sb2FkUHJvbWlzZVJlc29sdmUoKSx0aGlzLl9sb2FkUHJvbWlzZVJlc29sdmU9bnVsbCksdGhpcy5fc2hvd1Byb21pc2VSZXNvbHZlIT1udWxsJiYodGhpcy5fc2hvd1Byb21pc2VSZXNvbHZlKCksdGhpcy5fc2hvd1Byb21pc2VSZXNvbHZlPW51bGwsdGhpcy5fc2hvd0FkKCkpLHRoaXMuX2Rpc3BhdGNoRXZlbnQoSm8ubG9hZCx0KX0sdD0+e3RoaXMuX2lzTG9hZGluZz0hMSx0aGlzLl9zaG93UHJvbWlzZVJlamVjdCE9bnVsbCYmKHRoaXMuX3Nob3dQcm9taXNlUmVqZWN0KHRoaXMuX2NyZWF0ZUVycm9yKHQpKSx0aGlzLl9zaG93UHJvbWlzZVJlamVjdD1udWxsKSx0aGlzLl9kaXNwYXRjaEV2ZW50KEpvLmVycm9yLHQpfSl9fV9zaG93QWQoKXt0aGlzLl9hZEluc3RhbmNlIT09bnVsbCYmdGhpcy5faXNMb2FkZWQ9PT0hMCYmdGhpcy5fYWRJbnN0YW5jZS5zaG93KHthZHBpZDp0aGlzLl9hZHBpZH0sKCk9Pnt0aGlzLl9pc0xvYWRlZD0hMX0sdD0+e3RoaXMuX2lzTG9hZGVkPSExLHRoaXMuX3Nob3dQcm9taXNlUmVqZWN0IT1udWxsJiYodGhpcy5fc2hvd1Byb21pc2VSZWplY3QodGhpcy5fY3JlYXRlRXJyb3IodCkpLHRoaXMuX3Nob3dQcm9taXNlUmVqZWN0PW51bGwpLHRoaXMuX2Rpc3BhdGNoRXZlbnQoSm8uZXJyb3IsdCl9KX1fY3JlYXRlRXJyb3IodCl7cmV0dXJuIG5ldyBFcnJvcihKU09OLnN0cmluZ2lmeSh0KSl9fWxldCBVUD1NdChxdyxlPT5uZXcgVlAoZSksS3csWXcpLERwPXMub3MubmFtZT09PSJBbmRyb2lkIiYmcGFyc2VJbnQocy5vcy52ZXJzaW9uKTw2LCRQPURwPyJzbGlkZS1pbi1yaWdodCI6InBvcC1pbiIseHU9MzAwLEZwPURwPyJzbGlkZS1vdXQtcmlnaHQiOiJwb3Atb3V0IixIUD0iX3d3dy9fX3VuaWFwcHZpZXcuaHRtbCIsalA9IndlYnZpZXdJZCIselA9InVuaU1QTmF0aXZlRXZlbnQiO2Z1bmN0aW9uIFdQKGUsdCxuKXtuJiZ0LmlzTlZ1ZSYmKGUudW5pTlZpZXc9e3BhdGg6bixkZWZhdWx0Rm9udFNpemU6SS5kZWZhdWx0Rm9udFNpemUsdmlld3BvcnQ6SS52aWV3cG9ydH0pfWxldCBHUD0vXiNbYS16MC05XXs2fSQvaTtmdW5jdGlvbiBxUChlKXtyZXR1cm4gZSYmKEdQLnRlc3QoZSl8fGU9PT0idHJhbnNwYXJlbnQiKX1mdW5jdGlvbiBZUChlLHQpe2xldHtiYWNrZ3JvdW5kQ29sb3I6bn09dDshbnx8IXFQKG4pfHwoZS5iYWNrZ3JvdW5kP249ZS5iYWNrZ3JvdW5kOmUuYmFja2dyb3VuZD1uLGUuYmFja2dyb3VuZENvbG9yVG9wfHwoZS5iYWNrZ3JvdW5kQ29sb3JUb3A9biksZS5iYWNrZ3JvdW5kQ29sb3JCb3R0b218fChlLmJhY2tncm91bmRDb2xvckJvdHRvbT1uKSxlLmFuaW1hdGlvbkFscGhhQkdDb2xvcnx8KGUuYW5pbWF0aW9uQWxwaGFCR0NvbG9yPW4pLHR5cGVvZiBlLndlYnZpZXdCR1RyYW5zcGFyZW50PT0idW5kZWZpbmVkIiYmKGUud2Vidmlld0JHVHJhbnNwYXJlbnQ9ITApKX1mdW5jdGlvbiBLUChlLHQpe2UucG9wR2VzdHVyZT09PSJoaWRlIiYmZGVsZXRlIGUucG9wR2VzdHVyZSx0LmlzUXVpdCYmKGUucG9wR2VzdHVyZT1zLm9zLm5hbWU9PT0iaU9TIj8iYXBwYmFjayI6Im5vbmUiKX1mdW5jdGlvbiBKUChlLHQpe2lmKCF0LmVuYWJsZVB1bGxEb3duUmVmcmVzaClyZXR1cm47bGV0IG49TnMoRy5leHRlbmQoe30scy5vcy5uYW1lPT09IkFuZHJvaWQiP1hQOlFQLHQucHVsbFRvUmVmcmVzaCkpO2UucHVsbFRvUmVmcmVzaD1aUChuLHQpfWZ1bmN0aW9uIFpQKGUsdCl7bGV0IG49a2EoZSk7aWYoIW4pcmV0dXJuIGU7bGV0W3IsYSx1XT1uO3JldHVybihyfHxhfHx1KSYmUi5vbkxvY2FsZUNoYW5nZSgoKT0+e2xldCBnPXMud2Vidmlldy5nZXRXZWJ2aWV3QnlJZCh0LmlkKyIiKTtpZighZylyZXR1cm47bGV0IHk9e3N1cHBvcnQ6ITB9O3ImJih5LmNvbnRlbnRkb3duPXtjYXB0aW9uOmUuY29udGVudGRvd24uY2FwdGlvbn0pLGEmJih5LmNvbnRlbnRvdmVyPXtjYXB0aW9uOmUuY29udGVudG92ZXIuY2FwdGlvbn0pLHUmJih5LmNvbnRlbnRyZWZyZXNoPXtjYXB0aW9uOmUuY29udGVudHJlZnJlc2guY2FwdGlvbn0pLGcuc2V0U3R5bGUoe3B1bGxUb1JlZnJlc2g6eX0pfSksZX1sZXQgWFA9e3N1cHBvcnQ6ITAsc3R5bGU6ImNpcmNsZSJ9LFFQPXtzdXBwb3J0OiEwLHN0eWxlOiJkZWZhdWx0IixoZWlnaHQ6IjUwcHgiLHJhbmdlOiIyMDBweCIsY29udGVudGRvd246e2NhcHRpb246IiJ9LGNvbnRlbnRvdmVyOntjYXB0aW9uOiIifSxjb250ZW50cmVmcmVzaDp7Y2FwdGlvbjoiIn19O2Z1bmN0aW9uIGVOKGUsdCl7bGV0e25hdmlnYXRpb25CYXI6bn09dDtpZihuLnN0eWxlPT09ImN1c3RvbSIpcmV0dXJuITE7bGV0IHI9ITA7dC5pc1F1aXQmJihyPSExKTtsZXQgYT17YXV0b0JhY2tCdXR0b246cn07T2JqZWN0LmtleXMobikuZm9yRWFjaCh1PT57bGV0IGc9blt1XTt1PT09InRpdGxlSW1hZ2UiJiZnP2EudGFncz1uTihnKTp1PT09ImJ1dHRvbnMiJiZHLmlzQXJyYXkoZyk/YS5idXR0b25zPWcubWFwKCh5LE0pPT4oeS5vbmNsaWNrPXJOKE0pLHkpKTphW3VdPWd9KSxlLnRpdGxlTlZpZXc9dE4oYSx0KX1mdW5jdGlvbiB0TihlLHQpe2xldCBuPUppKGUpO2lmKCFuKXJldHVybiBlO2xldFtyLGFdPW47cmV0dXJuKHJ8fGEpJiZSLm9uTG9jYWxlQ2hhbmdlKCgpPT57bGV0IHU9cy53ZWJ2aWV3LmdldFdlYnZpZXdCeUlkKHQuaWQrIiIpO2lmKCF1KXJldHVybjtsZXQgZz17fTtyJiYoZy50aXRsZVRleHQ9ZS50aXRsZVRleHQpLGEmJihnLnNlYXJjaElucHV0PXtwbGFjZWhvbGRlcjplLnNlYXJjaElucHV0LnBsYWNlaG9sZGVyfSksdS5zZXRTdHlsZSh7dGl0bGVOVmlldzpnfSl9KSxlfWZ1bmN0aW9uIG5OKGUpe3JldHVyblt7dGFnOiJpbWciLHNyYzplLHBvc2l0aW9uOntsZWZ0OiJhdXRvIix0b3A6ImF1dG8iLHdpZHRoOiJhdXRvIixoZWlnaHQ6IjI2cHgifX1dfWZ1bmN0aW9uIHJOKGUpe3JldHVybiBmdW5jdGlvbihuKXtuLmluZGV4PWUsdHIobmUuT05fTkFWSUdBVElPTl9CQVJfQlVUVE9OX1RBUCxuKX19ZnVuY3Rpb24gVnAoZSx0LG4pe2xldCByPXtib3VuY2U6InZlcnRpY2FsIn07cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goYT0+e2lOLmluZGV4T2YoYSk9PT0tMSYmKHJbYV09dFthXSl9KSxuLmlkIT09IjEiJiZXUChyLHQsZSksS1Aocix0KSxZUChyLHQpLGVOKHIsdCksSlAocix0KSxyfWxldCBpTj1bImlkIiwicm91dGUiLCJpc05WdWUiLCJpc1F1aXQiLCJpc0VudHJ5IiwiaXNUYWJCYXIiLCJ0YWJCYXJJbmRleCIsIndpbmRvd1RvcCIsInRvcFdpbmRvdyIsImxlZnRXaW5kb3ciLCJyaWdodFdpbmRvdyIsIm1heFdpZHRoIiwidXNpbmdDb21wb25lbnRzIiwiZGlzYWJsZVNjcm9sbCIsImVuYWJsZVB1bGxEb3duUmVmcmVzaCIsIm5hdmlnYXRpb25CYXIiLCJwdWxsVG9SZWZyZXNoIiwib25SZWFjaEJvdHRvbURpc3RhbmNlIiwicGFnZU9yaWVudGF0aW9uIiwiYmFja2dyb3VuZENvbG9yIl0sVXA9MjtmdW5jdGlvbiAkcCgpe3JldHVybiBVcH1mdW5jdGlvbiBIcCgpe3JldHVybiBVcCsrfWZ1bmN0aW9uIGpwKGUpe3JldHVybiBlfWZ1bmN0aW9uIHpwKGUsdCl7bGV0IG49dD9uZS5zdHJpbmdpZnlRdWVyeSh0LGpwKToiIjtyZXR1cm57cGF0aDplLnNsaWNlKDEpLHF1ZXJ5Om4mJm4uc2xpY2UoMSl9fWZ1bmN0aW9uIG9OKGUsdCxuKXtsZXQgcj1uP25lLnN0cmluZ2lmeVF1ZXJ5KG4sanApOiIiO3JldHVybntpc1RhYjplLGFyZ3VtZW50czpKU09OLnN0cmluZ2lmeSh7cGF0aDp0LnNsaWNlKDEpLHF1ZXJ5OnImJnIuc2xpY2UoMSl9KX19ZnVuY3Rpb24gYU4oe3BhdGg6ZSxxdWVyeTp0LHJvdXRlT3B0aW9uczpuLHdlYnZpZXdFeHRyYXM6cn0pe2xldCBhPSgpPT5WcChlLGtmKG4ubWV0YSkse2lkOnUrIiJ9KSx1PUhwKCksZz1hKCk7Zy51bmlQYWdlVXJsPXpwKGUsdCksZy5pc1RhYj0hIW4ubWV0YS5pc1RhYkJhcjtsZXQgeT1zLndlYnZpZXcuY3JlYXRlKCIiLFN0cmluZyh1KSxnLEcuZXh0ZW5kKHtudnVlOiEwLF9fcGF0aF9fOmUsX19xdWVyeV9fOkpTT04uc3RyaW5naWZ5KHQpfSxyKSk7cmV0dXJuIEVnKHksYSkseX1sZXQgbm87ZnVuY3Rpb24gV3AoZSl7cmV0dXJuIG5vPWV9ZnVuY3Rpb24gc04oKXtyZXR1cm4gbm99ZnVuY3Rpb24gbE4oKXtyZXR1cm4oIW5vfHxuby5fX3VuaWFwcF9yb3V0ZSkmJihubz1zLndlYnZpZXcuY3JlYXRlKEhQLFN0cmluZyhIcCgpKSx7Y29udGVudEFkanVzdDohMX0pKSxub31mdW5jdGlvbiBjTihlKXtsZXR7cG9wdXBTdWJOVnVlV2Vidmlld3M6dH09ZTshdHx8ZS5hZGRFdmVudExpc3RlbmVyKCJjbG9zZSIsKCk9PntPYmplY3Qua2V5cyh0KS5mb3JFYWNoKG49Pnt0W25dLmNsb3NlKCJub25lIil9KX0pfWxldCBHcD0hMTtmdW5jdGlvbiBxcCgpe2lmKEdwKXJldHVybjtHcD0hMDtsZXQgZSx0O2lmKGYucmVxdWlyZU1vZHVsZSgicGx1cyIpLmdldFJlZGlyZWN0SW5mbyl7bGV0e3BhdGg6dSxxdWVyeTpnLHJlZmVycmVySW5mbzp5fT1sbigpO3UmJihlPXUsdD1nKSxJLnJlZmVycmVySW5mbz15fWVsc2V7bGV0IHU9cy5ydW50aW1lLmFyZ3VtZW50cztpZighdSlyZXR1cm47dHJ5e2xldCBnPUpTT04ucGFyc2UodSk7ZT1nLnBhdGh8fGcucGF0aE5hbWUsdD1nLnF1ZXJ5PyI/IitnLnF1ZXJ5OiIifWNhdGNoKGcpe319aWYoIWV8fGU9PT1JLmVudHJ5UGFnZVBhdGgpe3QmJihJLmVudHJ5UGFnZVF1ZXJ5PXQpO3JldHVybn1sZXQgcj1uZS5hZGRMZWFkaW5nU2xhc2goZSksYT15aShyKTshYXx8KGEubWV0YS5pc1RhYkJhcnx8KEkucmVhbEVudHJ5UGFnZVBhdGg9SS5yZWFsRW50cnlQYWdlUGF0aHx8SS5lbnRyeVBhZ2VQYXRoKSxJLmVudHJ5UGFnZVBhdGg9ZSxJLmVudHJ5UGFnZVF1ZXJ5PXQpfWZ1bmN0aW9uIEJ1KGUsdCl7bGV0IG49SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh5aShlKSkpO3JldHVybiBuLm1ldGE9UmEobi5tZXRhKSx0IT09InByZWxvYWRQYWdlIiYmIUkucmVhbEVudHJ5UGFnZVBhdGgmJih0PT09InJlTGF1bmNoInx8Wm4oKS5sZW5ndGg9PT0wKT9uLm1ldGEuaXNRdWl0PSEwOm4ubWV0YS5pc1RhYkJhcnx8KG4ubWV0YS5pc1F1aXQ9ITEpLG59bGV0IFdhPXt9O2Z1bmN0aW9uIHVOKGUpe2xldCB0PU9iamVjdC5rZXlzKFdhKS5maW5kKG49PldhW25dLmlkPT09ZS5pZCk7dCYmZGVsZXRlIFdhW3RdfWZ1bmN0aW9uIGZOKHt1cmw6ZX0pe2xldCB0PVdhW2VdO3JldHVybiB0JiYodC5fX3BhZ2VfXyYmd3QoKS5maW5kKG49Pm49PT10Ll9fcGFnZV9fKT90Ll9fcHJlbG9hZF9fPSExOnQuY2xvc2UoIm5vbmUiKSxkZWxldGUgV2FbZV0pLHR9ZnVuY3Rpb24gZE4oe3VybDplLHBhdGg6dCxxdWVyeTpufSl7aWYoIVdhW2VdKXtsZXQgcj1CdSh0LCJwcmVsb2FkUGFnZSIpO1dhW2VdPVhwKHtwYXRoOnQscm91dGVPcHRpb25zOnIscXVlcnk6bix3ZWJ2aWV3RXh0cmFzOntfX3ByZWxvYWRfXzohMH19KX1yZXR1cm4gV2FbZV19ZnVuY3Rpb24gSmMoe3VybDplLHBhdGg6dCxxdWVyeTpuLG9wZW5UeXBlOnIsd2VidmlldzphLG52dWVQYWdlVm06dSxldmVudENoYW5uZWw6Z30pe2lmKGEmJnFwKCksV2FbZV0pe2E9V2FbZV07bGV0IGJlPWE7aWYoYmUuX19wYWdlX18paWYod3QoKS5maW5kKFBlPT5QZT09PWJlLl9fcGFnZV9fKSlhPXZvaWQgMDtlbHNlIHJldHVybiBnJiYoa3QoYmUuX19wYWdlX18pLmV2ZW50Q2hhbm5lbD1nKSxyPT09ImxhdW5jaCI/aE4oZSx0LG4sYmUsdSxnKTpodChiZS5fX3BhZ2VfXyksYmV9bGV0IHk9QnUodCxyKTthPyhhPXMud2Vidmlldy5nZXRXZWJ2aWV3QnlJZChhLmlkKSxhLm52dWU9eS5tZXRhLmlzTlZ1ZSk6YT1YcCh7cGF0aDp0LHJvdXRlT3B0aW9uczp5LHF1ZXJ5Om59KSx5Lm1ldGEuaWQ9cGFyc2VJbnQoYS5pZCksISF5Lm1ldGEuaXNUYWJCYXImJkFpLmFwcGVuZChhKSxTTihhLHQsbix5Lm1ldGEpO2xldCBPPXQuc2xpY2UoMSk7YS5fX3VuaWFwcF9yb3V0ZT1PO2xldCB4PVlhKHIsZSxuLHkubWV0YSxnLEkuZGFya21vZGU/cy5uYXZpZ2F0b3IuZ2V0VUlTdHlsZSgpOiJsaWdodCIpLGhlPXBhcnNlSW50KGEuaWQpO3JldHVybiBhLm52dWU/dT9wTihoZSx1LHgpOllwKGhlLGEseCk6ck8oaGUsTyxuLHgsZ04oeSkpLGF9ZnVuY3Rpb24gaE4oZSx0LG4scixhLHUpe2xldCBnPUJ1KHQsInByZWxvYWRQYWdlIik7Zy5tZXRhLmlkPXBhcnNlSW50KHIuaWQpO2xldCB5PVlhKCJwcmVsb2FkUGFnZSIsZSxuLGcubWV0YSx1LEkuZGFya21vZGU/cy5uYXZpZ2F0b3IuZ2V0VUlTdHlsZSgpOiJsaWdodCIpO09lKGEseSksci5fX3BhZ2VfXz1hfWZ1bmN0aW9uIGdOKHttZXRhOmV9KXtsZXQgdD1CZigpLHtwbGF0Zm9ybTpuLHBpeGVsUmF0aW86cix3aW5kb3dXaWR0aDphfT1ZaSgpO3JldHVybntjc3M6ITAscm91dGU6ZS5yb3V0ZSx2ZXJzaW9uOjEsbG9jYWxlOiIiLHBsYXRmb3JtOm4scGl4ZWxSYXRpbzpyLHdpbmRvd1dpZHRoOmEsZGlzYWJsZVNjcm9sbDplLmRpc2FibGVTY3JvbGw9PT0hMCxvblBhZ2VTY3JvbGw6ITEsb25QYWdlUmVhY2hCb3R0b206ITEsb25SZWFjaEJvdHRvbURpc3RhbmNlOkcuaGFzT3duKGUsIm9uUmVhY2hCb3R0b21EaXN0YW5jZSIpP2Uub25SZWFjaEJvdHRvbURpc3RhbmNlOm5lLk9OX1JFQUNIX0JPVFRPTV9ESVNUQU5DRSxzdGF0dXNiYXJIZWlnaHQ6dCx3aW5kb3dUb3A6ZS5uYXZpZ2F0aW9uQmFyLnR5cGU9PT0iZmxvYXQiP3QrbmUuTkFWQkFSX0hFSUdIVDowLHdpbmRvd0JvdHRvbTpBaS5pbmRleE9mKGUucm91dGUpPj0wJiZBaS5jb3Zlcj9BaS5oZWlnaHQ6MH19ZnVuY3Rpb24gcE4oZSx0LG4pe09lKHQsbiksaHQoc3AoZSx0LG4pKSxlPT09MSYmKEkuc3BsYXNoc2NyZWVuJiZJLnNwbGFzaHNjcmVlbi5hdXRvY2xvc2UmJiFJLnNwbGFzaHNjcmVlbi5hbHdheXNTaG93QmVmb3JlUmVuZGVyJiZzLm5hdmlnYXRvci5jbG9zZVNwbGFzaHNjcmVlbigpLEkub25SZWFkeShmdW5jdGlvbigpe252KCl9KSl9ZnVuY3Rpb24gWXAoZSx0LG4pe2xldCByPXskOnt9LCRnZXRBcHBXZWJ2aWV3KCl7cmV0dXJuIHR9LGdldE9wZW5lckV2ZW50Q2hhbm5lbCgpe3JldHVybiBuLmV2ZW50Q2hhbm5lbHx8KG4uZXZlbnRDaGFubmVsPW5ldyBuZS5FdmVudENoYW5uZWwoZSkpLG4uZXZlbnRDaGFubmVsfSxfX3NldHVwKGEsdSl7YS4kZ2V0QXBwV2Vidmlldz0oKT0+dCxhLmdldE9wZW5lckV2ZW50Q2hhbm5lbD11LmdldE9wZW5lckV2ZW50Q2hhbm5lbCxPZShhLG4pLHQuX19wcmVsb2FkX18mJih0Ll9fcGFnZV9fPWEpO2xldCBnPW9uKCkseT1nLmZpbmRJbmRleChNPT5NPT09dSk7eT4tMSYmZy5zcGxpY2UoeSwxLGEpfX07T2UocixuKSx0Ll9fcHJlbG9hZF9fPyh0Ll9fcGFnZV9fPXIsdC5hZGRFdmVudExpc3RlbmVyKCJzaG93IiwoKT0+e3RyKHQuX19wYWdlX18sbmUuT05fU0hPVyl9KSx0LmFkZEV2ZW50TGlzdGVuZXIoImhpZGUiLCgpPT57dHIodC5fX3BhZ2VfXyxuZS5PTl9ISURFKX0pKTpodChyKX1mdW5jdGlvbiBLcChlKXtyZXR1cm4gSS5yZWFsRW50cnlQYWdlUGF0aCYmRm4oKVswXT09PWV9ZnVuY3Rpb24gSnAoKXtJLmVudHJ5UGFnZVBhdGg9SS5yZWFsRW50cnlQYWdlUGF0aCxkZWxldGUgSS5yZWFsRW50cnlQYWdlUGF0aCxSLnJlTGF1bmNoKHt1cmw6bmUuYWRkTGVhZGluZ1NsYXNoKEkuZW50cnlQYWdlUGF0aCl9KX1mdW5jdGlvbiB2TihlKXtsZXQgdDtlLmFkZEV2ZW50TGlzdGVuZXIoInBvcEdlc3R1cmUiLG49PntpZihuLnR5cGU9PT0ic3RhcnQiKXtsZXQgcj13dCgpLGE9cltyLmxlbmd0aC0yXTt0PUhjO2xldCB1O2EmJih1PWt0KGEpLnN0YXR1c0JhclN0eWxlKSx1JiZzcyh1KX1lbHNlIGlmKG4udHlwZT09PSJlbmQiJiYhbi5yZXN1bHQpc3ModCk7ZWxzZSBpZihuLnR5cGU9PT0iZW5kIiYmbi5yZXN1bHQpe2xldCByPVpuKCkubGVuZ3RoLGE9em4oKTtlbigpLHNzKCksYSYmcj09PTEmJktwKGEpP0pwKCk6dHIobmUuT05fU0hPVyl9fSl9ZnVuY3Rpb24gbU4oZSl7aWYoZS5udnVlKXJldHVybjtsZXQgdD1lLmlkLHtzdWJzY3JpYmU6bix1bnN1YnNjcmliZTpyfT1zdCxhPSh1LGcpPT57aWYodCE9PWcpcmV0dXJuO3IoZGMsYSk7bGV0IHk9UHQocGFyc2VJbnQoZykpO3kmJnkuX19wYWdlX2NvbnRhaW5lcl9fLnJlc3RvcmUoKX07ZS5hZGRFdmVudExpc3RlbmVyKCJyZWNvdmVyeSIsKCk9PntuKGRjLGEpfSl9ZnVuY3Rpb24gX04oZSl7bGV0e2VtaXQ6dH09c3Qsbj1mdW5jdGlvbih7d2lkdGg6cixoZWlnaHQ6YX0pe2xldCBnPXtkZXZpY2VPcmllbnRhdGlvbjpNYXRoLmFicyhzLm5hdmlnYXRvci5nZXRPcmllbnRhdGlvbigpKT09PTkwPyJsYW5kc2NhcGUiOiJwb3J0cmFpdCIsc2l6ZTp7d2luZG93V2lkdGg6TWF0aC5jZWlsKHIpLHdpbmRvd0hlaWdodDpNYXRoLmNlaWwoYSl9fTt0KG5lLk9OX1JFU0laRSxnLHBhcnNlSW50KGUuaWQpKX07ZS5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLG5lLmRlYm91bmNlKG4sNTAse3NldFRpbWVvdXQ6TixjbGVhclRpbWVvdXQ6RX0pKX1sZXQgWnA9e3B1bGxUb1JlZnJlc2g6bmUuT05fUFVMTF9ET1dOX1JFRlJFU0gsdGl0bGVOVmlld1NlYXJjaElucHV0Q2hhbmdlZDpuZS5PTl9OQVZJR0FUSU9OX0JBUl9TRUFSQ0hfSU5QVVRfQ0hBTkdFRCx0aXRsZU5WaWV3U2VhcmNoSW5wdXRDb25maXJtZWQ6bmUuT05fTkFWSUdBVElPTl9CQVJfU0VBUkNIX0lOUFVUX0NPTkZJUk1FRCx0aXRsZU5WaWV3U2VhcmNoSW5wdXRDbGlja2VkOm5lLk9OX05BVklHQVRJT05fQkFSX1NFQVJDSF9JTlBVVF9DTElDS0VELHRpdGxlTlZpZXdTZWFyY2hJbnB1dEZvY3VzQ2hhbmdlZDpuZS5PTl9OQVZJR0FUSU9OX0JBUl9TRUFSQ0hfSU5QVVRfRk9DVVNfQ0hBTkdFRH07ZnVuY3Rpb24gYk4oZSl7bGV0IHQ9cGFyc2VJbnQoZS5pZCk7T2JqZWN0LmtleXMoWnApLmZvckVhY2gobj0+e2xldCByPVpwW25dO2UuYWRkRXZlbnRMaXN0ZW5lcihuLGE9PntyPT09bmUuT05fUFVMTF9ET1dOX1JFRlJFU0gmJnhmKGUpLHRyKHQscixhKX0pfSksY04oZSksX04oZSkscy5vcy5uYW1lPT09ImlPUyImJihtTihlKSx2TihlKSl9ZnVuY3Rpb24geU4oZSx0LG4scil7bGV0IGE9KCk9PlZwKHQsa2YociksZSksdT1hKCk7dS51bmlQYWdlVXJsPXpwKHQsbik7bGV0IGc9ISFyLmlzVGFiQmFyO3IuaXNOVnVlP3UuaXNUYWI9Zzp1LmRlYnVnUmVmcmVzaD1vTihnLHQsbiksdS5sb2NhbGU9Zi5yZXF1aXJlTW9kdWxlKCJwbHVzIikuZ2V0TGFuZ3VhZ2UoKSxFZyhlLGEpLGUuc2V0U3R5bGUodSl9ZnVuY3Rpb24gRU4oZSx0LG4peyhuLnN1Yk5WdWVzfHxbXSkuZm9yRWFjaChhPT57aWYoIWEucGF0aClyZXR1cm47bGV0IHU9aGEoYS5zdHlsZXx8e30pLGc9YS50eXBlPT09Im5hdmlnYXRpb25CYXIiLHk9YS50eXBlPT09InBvcHVwIjt1LnVuaU5WaWV3PXtwYXRoOmEucGF0aC5yZXBsYWNlKCIubnZ1ZSIsIi5qcyIpLGRlZmF1bHRGb250U2l6ZTpJLmRlZmF1bHRGb250U2l6ZSx2aWV3cG9ydDpJLnZpZXdwb3J0fTtsZXQgTT17X191bmlhcHBfaG9zdDp0LF9fdW5pYXBwX29yaWdpbjp1LnVuaU5WaWV3LnBhdGguc3BsaXQoIj8iKVswXS5yZXBsYWNlKCIuanMiLCIiKSxfX3VuaWFwcF9vcmlnaW5faWQ6ZS5pZCxfX3VuaWFwcF9vcmlnaW5fdHlwZTplLl9fdW5pYXBwX3R5cGV9LE87Zz8odS5wb3NpdGlvbj0iZG9jayIsdS5kb2NrPSJ0b3AiLHUudG9wPSIwIix1LndpZHRoPSIxMDAlIix1LmhlaWdodD1TdHJpbmcobmUuTkFWQkFSX0hFSUdIVCtCZigpKSxkZWxldGUgdS5sZWZ0LGRlbGV0ZSB1LnJpZ2h0LGRlbGV0ZSB1LmJvdHRvbSxkZWxldGUgdS5tYXJnaW4pOnkmJih1LnBvc2l0aW9uPSJhYnNvbHV0ZSIsJGModCk/Tz1BaTpPPWUsTS5fX3VuaWFwcF9tYXNrPXUubWFza3x8InJnYmEoMCwwLDAsMC41KSIsTS5fX3VuaWFwcF9tYXNrX2lkPU8uaWQpLGRlbGV0ZSB1Lm1hc2s7bGV0IHg9cy53ZWJ2aWV3LmNyZWF0ZSgiIixhLmlkLHUsTSk7aWYoeSl7Ty5wb3B1cFN1Yk5WdWVXZWJ2aWV3c3x8KE8ucG9wdXBTdWJOVnVlV2Vidmlld3M9e30pLE8ucG9wdXBTdWJOVnVlV2Vidmlld3NbeC5pZF09eDtsZXQgaGU9ZnVuY3Rpb24oKXtPLnNldFN0eWxlKHttYXNrOiJub25lIn0pLHguaGlkZSgiYXV0byIpfTtPLmFkZEV2ZW50TGlzdGVuZXIoIm1hc2tDbGljayIsaGUpO2xldCBiZT0hMTt4LmFkZEV2ZW50TGlzdGVuZXIoInNob3ciLCgpPT57YmV8fChzLmtleS5yZW1vdmVFdmVudExpc3RlbmVyKCJiYWNrYnV0dG9uIix0aSkscy5rZXkuYWRkRXZlbnRMaXN0ZW5lcigiYmFja2J1dHRvbiIsaGUpLGJlPSEwKX0pLHguYWRkRXZlbnRMaXN0ZW5lcigiaGlkZSIsKCk9PntiZSYmKHMua2V5LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJhY2tidXR0b24iLGhlKSxzLmtleS5hZGRFdmVudExpc3RlbmVyKCJiYWNrYnV0dG9uIix0aSksYmU9ITEpfSkseC5hZGRFdmVudExpc3RlbmVyKCJjbG9zZSIsKCk9PntkZWxldGUgTy5wb3B1cFN1Yk5WdWVXZWJ2aWV3c1t4LmlkXSxiZSYmKHMua2V5LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJhY2tidXR0b24iLGhlKSxzLmtleS5hZGRFdmVudExpc3RlbmVyKCJiYWNrYnV0dG9uIix0aSksYmU9ITEpfSl9ZWxzZSBlLmFwcGVuZCh4KX0pfWZ1bmN0aW9uIFNOKGUsdCxuLHIpeyhlLmlkPT09IjEifHwhci5pc05WdWUpJiZ5TihlLHQsbixyKSxFTihlLHQsciksYk4oZSl9ZnVuY3Rpb24gWHAoZSl7cmV0dXJuIGUucm91dGVPcHRpb25zLm1ldGEuaXNOVnVlP2FOKGUpOiRwKCk9PT0yP3Mud2Vidmlldy5nZXRMYXVuY2hXZWJ2aWV3KCk6c04oKX1mdW5jdGlvbiBRcChlLHQpe3N0Lm9uY2UoZGMrIi4iK2UsdCl9bGV0IEdhPSExO2Z1bmN0aW9uIGV2KGUsdCxuKXtHYT17cGF0aDplLG52dWU6a3MoZSkuaXNOVnVlLGNhbGxiYWNrOnR9fWZ1bmN0aW9uIHR2KGUsdCxuKXt2bihlKSxQbChlLiRnZXRBcHBXZWJ2aWV3KCksdCxuKX1mdW5jdGlvbiBMdShlLHQsbj0hMSl7aWYoIW4mJkdhKXJldHVybiBjb25zb2xlLmVycm9yKGBXYWl0aW5nIHRvIG5hdmlnYXRlIHRvOiAke0dhLnBhdGh9LCBkbyBub3Qgb3BlcmF0ZSBjb250aW51b3VzbHk6ICR7ZX0uYCk7aWYoSS5yZW5kZXJlcj09PSJuYXRpdmUiKXJldHVybiBabigpLmxlbmd0aD09PTA/ZXYoZSx0LCJ3YWl0Rm9yUmVhZHkiKTp0KCk7bGV0IHI9IW5vfHxubyYmbm8uX191bmlhcHBfcm91dGUsYT1ubyYmIW5vLmxvYWRlZDtyfHxhP2V2KGUsdCxyPyJ3YWl0Rm9yQ3JlYXRlIjoid2FpdEZvclJlYWR5Iik6dCgpLGEmJlFwKG5vLmlkLE11KX1mdW5jdGlvbiBNdSgpe2lmKCFHYSlyZXR1cm47bGV0e2NhbGxiYWNrOmV9PUdhO3JldHVybiBHYT0hMSxlKCl9ZnVuY3Rpb24gbnYoKXtpZihJLnJlbmRlcmVyPT09Im5hdGl2ZSIpcmV0dXJuIEdhJiZHYS5udnVlP011KCk6dm9pZCAwO2xldCBlPWxOKCk7aWYoISFHYSl7aWYoR2EubnZ1ZSlyZXR1cm4gTXUoKTtlLmxvYWRlZD9HYS5jYWxsYmFjaygpOlFwKGUuaWQsTXUpfX1mdW5jdGlvbiBQbChlLHQsbil7ZVtlLl9fcHJlbG9hZF9fPyJoaWRlIjoiY2xvc2UiXSh0LG4pfWZ1bmN0aW9uIER1KGUsdCxuLHIsYSl7dHlwZW9mIGE9PSJ1bmRlZmluZWQiJiYoYT1lLm52dWU/MDoxMDApO2xldCB1PWZ1bmN0aW9uKCl7dS5fY2FsbGVkfHwodS5fY2FsbGVkPSEwLHImJnIoKSxudigpKX07dS5fY2FsbGVkPSExLE4oKCk9PntsZXQgZz1OKCgpPT57dSgpfSxuKzE1MCk7ZS5zaG93KHQsbiwoKT0+e3UuX2NhbGxlZHx8RShnKSx1KCl9KX0sYSl9ZnVuY3Rpb24gd04oZSx0KXtsZXQgbj1lLmNoaWxkcmVuKCk7aWYoIW58fCFuLmxlbmd0aClyZXR1cm4gdCgpO2xldCByPW4uZmluZChhPT5hLmlkLmluZGV4T2YoalApPT09MCl8fG5bMF07ci5jYW5CYWNrKCh7Y2FuQmFjazphfSk9PnthP3IuYmFjaygpOnQoKX0pfWxldCBDTj1UZShRRSwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj16bigpO2lmKCFyKXJldHVybiBuKCJnZXRDdXJyZW50UGFnZXMgaXMgZW1wdHkiKTtpZih0cihyLG5lLk9OX0JBQ0tfUFJFU1Mse2Zyb206ZS5mcm9tfHwibmF2aWdhdGVCYWNrIn0pKXJldHVybiB0KCk7aWYoUi5oaWRlVG9hc3QoKSxSLmhpZGVMb2FkaW5nKCksa3QocikubWV0YS5pc1F1aXQpQU4oKTtlbHNlIGlmKEtwKHIpKUpwKCk7ZWxzZXtsZXR7ZGVsdGE6YSxhbmltYXRpb25UeXBlOnUsYW5pbWF0aW9uRHVyYXRpb246Z309ZTtUTihhLHUsZyl9cmV0dXJuIHQoKX0sdFMsZlMpLEZ1PTA7ZnVuY3Rpb24gQU4oKXtUcigpLEZ1P0RhdGUubm93KCktRnU8MmUzJiZzLnJ1bnRpbWUucXVpdCgpOihGdT1EYXRlLm5vdygpLHMubmF0aXZlVUkudG9hc3QocWUoKS50KCJ1bmkuYXBwLnF1aXQiKSksTigoKT0+e0Z1PTB9LDJlMykpfWZ1bmN0aW9uIFROKGUsdCxuKXtsZXQgcj13dCgpLGE9ci5sZW5ndGgsdT1yW2EtMV07ZT4xJiZyLnNsaWNlKGEtZSxhLTEpLnJldmVyc2UoKS5mb3JFYWNoKE09PntQbChzLndlYnZpZXcuZ2V0V2Vidmlld0J5SWQoYCR7a3QoTSkuaWR9YCksIm5vbmUiLDApfSk7bGV0IGc9ZnVuY3Rpb24oTSl7dD9QbChNLHQsbnx8eHUpOmt0KHUpLm9wZW5UeXBlPT09InJlZGlyZWN0VG8iP1BsKE0sRnAseHUpOlBsKE0sImF1dG8iKSxyLnNsaWNlKGEtZSxhKS5mb3JFYWNoKE89PnZuKE8pKSxzcygpLHRyKG5lLk9OX1NIT1cpfSx5PXMud2Vidmlldy5nZXRXZWJ2aWV3QnlJZChgJHtrdCh1KS5pZH1gKTtpZighdS5fX3VuaWFwcF93ZWJ2aWV3KXJldHVybiBnKHkpO3dOKHksKCk9PntnKHkpfSl9bGV0IHJ2PShlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldHt1cmw6cixldmVudHM6YSxhbmltYXRpb25UeXBlOnUsYW5pbWF0aW9uRHVyYXRpb246Z309ZSx7cGF0aDp5LHF1ZXJ5Ok19PW5lLnBhcnNlVXJsKHIpLFtPLHhdPU5OKHksdSxnKTtMdSh5LCgpPT57UE4oe3VybDpyLHBhdGg6eSxxdWVyeTpNLGV2ZW50czphLGFuaVR5cGU6TyxhbmlEdXJhdGlvbjp4fSkudGhlbih0KS5jYXRjaChuKX0sZS5vcGVuVHlwZT09PSJhcHBMYXVuY2giKX0sT049VGUoVGYscnYsZVMsc1MpO2Z1bmN0aW9uIFBOKHt1cmw6ZSxwYXRoOnQscXVlcnk6bixldmVudHM6cixhbmlUeXBlOmEsYW5pRHVyYXRpb246dX0pe3RyKG5lLk9OX0hJREUpO2xldCBnPW5ldyBuZS5FdmVudENoYW5uZWwoJHAoKSsxLHIpO3JldHVybiBuZXcgUHJvbWlzZSh5PT57RHUoSmMoe3VybDplLHBhdGg6dCxxdWVyeTpuLG9wZW5UeXBlOiJuYXZpZ2F0ZVRvIixldmVudENoYW5uZWw6Z30pLGEsdSwoKT0+e3koe2V2ZW50Q2hhbm5lbDpnfSl9KSxzcygpfSl9ZnVuY3Rpb24gTk4oZSx0LG4pe2xldHtnbG9iYWxTdHlsZTpyfT1JLGE9a3MoZSk7cmV0dXJuW3R8fGEuYW5pbWF0aW9uVHlwZXx8ci5hbmltYXRpb25UeXBlfHwkUCxufHxhLmFuaW1hdGlvbkR1cmF0aW9ufHxyLmFuaW1hdGlvbkR1cmF0aW9ufHx4dV19bGV0IElOPVRlKE9mLCh7dXJsOmV9LHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldHtwYXRoOnIscXVlcnk6YX09bmUucGFyc2VVcmwoZSk7THUociwoKT0+e2tOKHt1cmw6ZSxwYXRoOnIscXVlcnk6YX0pLnRoZW4odCkuY2F0Y2gobil9KX0sblMsbFMpO2Z1bmN0aW9uIGtOKHt1cmw6ZSxwYXRoOnQscXVlcnk6bn0pe2xldCByPXpuKCk7cmV0dXJuIHImJnZuKHIpLG5ldyBQcm9taXNlKGE9PntEdShKYyh7dXJsOmUscGF0aDp0LHF1ZXJ5Om4sb3BlblR5cGU6InJlZGlyZWN0VG8ifSksIm5vbmUiLDAsKCk9PntpZihyKXtsZXQgdT1yLiRnZXRBcHBXZWJ2aWV3KCk7dS5fX3ByZWxvYWRfXyYmdU4odSksdS5jbG9zZSgibm9uZSIpfWEodm9pZCAwKX0pLHNzKCl9KX1sZXQgUk49KHt1cmw6ZX0se3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0e3BhdGg6cixxdWVyeTphfT1uZS5wYXJzZVVybChlKTtMdShyLCgpPT57eE4oe3VybDplLHBhdGg6cixxdWVyeTphfSkudGhlbih0KS5jYXRjaChuKX0pfTtmdW5jdGlvbiB4Tih7dXJsOmUscGF0aDp0LHF1ZXJ5Om59KXtyZXR1cm4gbmV3IFByb21pc2Uocj0+e2xldCBhPW9uKCkuc2xpY2UoMCk7U2UuZmluZChnPT5nLnBhdGg9PT10KS5tZXRhLmlzVGFiQmFyJiZBaS5zd2l0Y2hUYWIodC5zbGljZSgxKSksRHUoSmMoe3VybDplLHBhdGg6dCxxdWVyeTpuLG9wZW5UeXBlOiJyZUxhdW5jaCJ9KSwibm9uZSIsMCwoKT0+e2EuZm9yRWFjaChnPT50dihnLCJub25lIikpLHIodm9pZCAwKX0pLHNzKCl9KX1sZXQgQk49VGUobGcsUk4sclMsY1MpLGl2PShlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldHt1cmw6cn09ZSx7cGF0aDphLHF1ZXJ5OnV9PW5lLnBhcnNlVXJsKHIpO0x1KGEsKCk9PntNTih7dXJsOnIscGF0aDphLHF1ZXJ5OnV9KS50aGVuKHQpLmNhdGNoKG4pfSxlLm9wZW5UeXBlPT09ImFwcExhdW5jaCIpfSxMTj1UZShodSxpdixpUyx1Uyk7ZnVuY3Rpb24gTU4oe3VybDplLHBhdGg6dCxxdWVyeTpufSl7QWkuc3dpdGNoVGFiKHQuc2xpY2UoMSkpO2xldCByPXd0KCksYT1yLmxlbmd0aCx1PSExLGc9ITEseTthPj0xJiYoeT1yW2EtMV0seSYmIXkuJC5fX2lzVGFiQmFyPyhnPSEwLHIucmV2ZXJzZSgpLmZvckVhY2goTz0+eyFPLiQuX19pc1RhYkJhciYmTyE9PXkmJnR2KE8sIm5vbmUiKX0pLHZuKHkpLE4oKCk9PntrdCh5KS5vcGVuVHlwZT09PSJyZWRpcmVjdFRvIj9QbCh5LiRnZXRBcHBXZWJ2aWV3KCksRnAseHUpOlBsKHkuJGdldEFwcFdlYnZpZXcoKSwiYXV0byIpfSwxMDApKTp1PSEwKTtsZXQgTTtyZXR1cm4gb24oKS5mb3JFYWNoKE89PntuZS5hZGRMZWFkaW5nU2xhc2goTy5yb3V0ZSk9PT10PyhPLiQuX19pc0FjdGl2ZXx8KGc9ITApLE8uJC5fX2lzQWN0aXZlPSEwLE09Tyk6Ty4kLl9faXNUYWJCYXImJihPLiQuX19pc0FjdGl2ZT0hMSl9KSx5PT09TSYmKHU9ITEpLHkmJnUmJnRyKHksbmUuT05fSElERSksbmV3IFByb21pc2UoTz0+e2lmKE0pe2xldCB4PU0uJGdldEFwcFdlYnZpZXcoKTt4LnNob3coIm5vbmUiKSxnJiYheC5fX3ByZWxvYWRfXyYmdHIoTSxuZS5PTl9TSE9XKSxzcygpLE8odm9pZCAwKX1lbHNlIER1KEpjKHt1cmw6ZSxwYXRoOnQscXVlcnk6bixvcGVuVHlwZToic3dpdGNoVGFiIn0pLCJub25lIiwwLCgpPT57c3MoKSxPKHZvaWQgMCl9LDcwKX0pfWxldCBETj1UZShQZiwoe3VybDplfSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1mTih7dXJsOmV9KTtpZihyKXt0KHtpZDpyLmlkLHVybDplLGVyck1zZzoidW5QcmVsb2FkUGFnZTpvayJ9KTtyZXR1cm59bigibm90IGZvdW5kIil9LGFTLGhTKSxGTj1UZShndSwoe3VybDplfSx7cmVzb2x2ZTp0fSk9PntpZihXYVtlXSlyZXR1cm47bGV0IG49ZS5zcGxpdCgiPyIpLHI9blswXSxhPW5lLnBhcnNlUXVlcnkoblsxXXx8IiIpLHU9ZE4oe3VybDplLHBhdGg6cixxdWVyeTphfSksZz1CdShyLCJwcmVsb2FkUGFnZSIpO2cubWV0YS5pZD1wYXJzZUludCh1LmlkKTtsZXQgeT1ZYSgicHJlbG9hZFBhZ2UiLGUsYSxnLm1ldGEsdm9pZCAwLEkuZGFya21vZGU/cy5uYXZpZ2F0b3IuZ2V0VUlTdHlsZSgpOiJsaWdodCIpO1lwKHBhcnNlSW50KHUuaWQpLHUseSksdCh7aWQ6dS5pZCx1cmw6ZSxlcnJNc2c6InByZWxvYWRQYWdlOm9rIn0pfSxvUyxkUyk7dmFyIFZOPXtfX3Byb3RvX186bnVsbCwkZW1pdDpCXywkb2ZmOnhfLCRvbjprXywkb25jZTpSXyxfX2xvZ19fOmhQLGFkZEludGVyY2VwdG9yOnlfLGFkZFBob25lQ29udGFjdDpmQSxhcnJheUJ1ZmZlclRvQmFzZTY0OmxvLGJhc2U2NFRvQXJyYXlCdWZmZXI6c28sY2FuSVVzZTptQyxjYW52YXNHZXRJbWFnZURhdGE6Y2IsY2FudmFzUHV0SW1hZ2VEYXRhOnViLGNhbnZhc1RvVGVtcEZpbGVQYXRoOmZiLGNoZWNrSXNTb3RlckVucm9sbGVkSW5EZXZpY2U6bUEsY2hlY2tJc1N1cHBvcnRTb3RlckF1dGhlbnRpY2F0aW9uOnZBLGNob29zZUltYWdlOlZBLGNob29zZUxvY2F0aW9uOmNPLGNob29zZVZpZGVvOlVBLGNsZWFyU3RvcmFnZTppQyxjbGVhclN0b3JhZ2VTeW5jOnJDLGNsb3NlQXV0aFZpZXc6X3AsY2xvc2VCTEVDb25uZWN0aW9uOktDLGNsb3NlQmx1ZXRvb3RoQWRhcHRlcjpIQyxjbG9zZVByZXZpZXdJbWFnZTpJQSxjbG9zZVNvY2tldDpyVCxjb21wcmVzc0ltYWdlOk1BLGNvbXByZXNzVmlkZW86REEsY29uZmlnTVRMUzpaQSxjb25uZWN0U29ja2V0OnRULGNyZWF0ZUFuaW1hdGlvbjpJYixjcmVhdGVCTEVDb25uZWN0aW9uOllDLGNyZWF0ZUNhbnZhc0NvbnRleHQ6bGIsY3JlYXRlRnVsbFNjcmVlblZpZGVvQWQ6TFAsY3JlYXRlSW5uZXJBdWRpb0NvbnRleHQ6YlQsY3JlYXRlSW50ZXJhY3RpdmVBZDpVUCxjcmVhdGVJbnRlcnNlY3Rpb25PYnNlcnZlcjp2YixjcmVhdGVJbnRlcnN0aXRpYWxBZDpEUCxjcmVhdGVMaXZlUHVzaGVyQ29udGV4dDp4VCxjcmVhdGVNYXBDb250ZXh0OkdfLGNyZWF0ZU1lZGlhUXVlcnlPYnNlcnZlcjpfYixjcmVhdGVQdXNoTWVzc2FnZTpuUCxjcmVhdGVSZXdhcmRlZFZpZGVvQWQ6eFAsY3JlYXRlU2VsZWN0b3JRdWVyeTpDYixjcmVhdGVWaWRlb0NvbnRleHQ6el8sZG93bmxvYWRGaWxlOkdBLGdldEFwcEF1dGhvcml6ZVNldHRpbmc6amcsZ2V0QXBwQmFzZUluZm86UGcsZ2V0QkxFRGV2aWNlQ2hhcmFjdGVyaXN0aWNzOlpDLGdldEJMRURldmljZVJTU0k6bkEsZ2V0QkxFRGV2aWNlU2VydmljZXM6SkMsZ2V0QmFja2dyb3VuZEF1ZGlvTWFuYWdlcjpJVCxnZXRCZWFjb25zOm9BLGdldEJsdWV0b290aEFkYXB0ZXJTdGF0ZTpqQyxnZXRCbHVldG9vdGhEZXZpY2VzOkdDLGdldENoYW5uZWxNYW5hZ2VyOnJQLGdldENoZWNrQm94U3RhdGU6YnAsZ2V0Q2xpcGJvYXJkRGF0YTpkQSxnZXRDb25uZWN0ZWRCbHVldG9vdGhEZXZpY2VzOnFDLGdldERldmljZUluZm86T2csZ2V0RW50ZXJPcHRpb25zU3luYzpYYixnZXRGaWxlSW5mbzphQyxnZXRJbWFnZUluZm86T0EsZ2V0TGF1bmNoT3B0aW9uc1N5bmM6UWIsZ2V0TG9jYWxlOk1jLGdldExvY2F0aW9uOkRULGdldE5ldHdvcmtUeXBlOkRnLGdldFByb3ZpZGVyOkpPLGdldFB1c2hDbGllbnRJZDpleSxnZXRSZWNvcmRlck1hbmFnZXI6eEEsZ2V0U2F2ZWRGaWxlSW5mbzpnQyxnZXRTYXZlZEZpbGVMaXN0OmhDLGdldFNjcmVlbkJyaWdodG5lc3M6U0EsZ2V0U2VsZWN0ZWRUZXh0UmFuZ2U6VWIsZ2V0U3RvcmFnZTplQyxnZXRTdG9yYWdlSW5mbzpvQyxnZXRTdG9yYWdlSW5mb1N5bmM6cGcsZ2V0U3RvcmFnZVN5bmM6UXcsZ2V0U3ViTlZ1ZUJ5SWQ6R08sZ2V0U3lzdGVtSW5mbzpJQyxnZXRTeXN0ZW1JbmZvU3luYzpOZyxnZXRTeXN0ZW1TZXR0aW5nOkFBLGdldFVuaXZlcmlmeU1hbmFnZXI6dFAsZ2V0VXNlckluZm86Wk8sZ2V0VXNlclByb2ZpbGU6WE8sZ2V0VmlkZW9JbmZvOlBBLGdldFdpbmRvd0luZm86VGcsaGlkZUtleWJvYXJkOkhBLGhpZGVMb2FkaW5nOk9PLGhpZGVOYXZpZ2F0aW9uQmFyTG9hZGluZzpCTyxoaWRlVGFiQmFyOlVPLGhpZGVUYWJCYXJSZWREb3Q6ek8saGlkZVRvYXN0OlRPLGluaXRVVFNDbGFzc05hbWU6QnAsaW5pdFVUU0luZGV4Q2xhc3NOYW1lOlBQLGluaXRVVFNQYWNrYWdlTmFtZTpPUCxpbml0VVRTUHJveHlDbGFzczpScCxpbml0VVRTUHJveHlGdW5jdGlvbjpDUCxpbnRlcmNlcHRvcnM6U18saW52b2tlUHVzaENhbGxiYWNrOkNmLGxvYWRGb250RmFjZTpJTyxsb2dpbjpncCxtYWtlUGhvbmVDYWxsOmxBLG5hdmlnYXRlQmFjazpDTixuYXZpZ2F0ZVRvOk9OLG5hdmlnYXRlVG9NaW5pUHJvZ3JhbTp1UCxub3RpZnlCTEVDaGFyYWN0ZXJpc3RpY1ZhbHVlQ2hhbmdlOlhDLG9mZkFjY2VsZXJvbWV0ZXJDaGFuZ2U6TUMsb2ZmQXBwSGlkZTpaYixvZmZBcHBTaG93OktiLG9mZkNvbXBhc3NDaGFuZ2U6UkMsb2ZmRXJyb3I6cWIsb2ZmS2V5Ym9hcmRIZWlnaHRDaGFuZ2U6ekEsb2ZmTG9jYXRpb25DaGFuZ2U6X08sb2ZmTG9jYXRpb25DaGFuZ2VFcnJvcjp5TyxvZmZOZXR3b3JrU3RhdHVzQ2hhbmdlOnBBLG9mZlBhZ2VOb3RGb3VuZDpXYixvZmZQdXNoTWVzc2FnZTpueSxvZmZUaGVtZUNoYW5nZTpFQSxvZmZVbmhhbmRsZWRSZWplY3Rpb246amIsb2ZmV2luZG93UmVzaXplOkxiLG9uQWNjZWxlcm9tZXRlckNoYW5nZTpMQyxvbkFwcEhpZGU6SmIsb25BcHBTaG93OlliLG9uQkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZUNoYW5nZTpVQyxvbkJMRUNvbm5lY3Rpb25TdGF0ZUNoYW5nZTpWQyxvbkJlYWNvblNlcnZpY2VDaGFuZ2U6aUEsb25CZWFjb25VcGRhdGU6ckEsb25CbHVldG9vdGhBZGFwdGVyU3RhdGVDaGFuZ2U6RkMsb25CbHVldG9vdGhEZXZpY2VGb3VuZDpEQyxvbkNvbXBhc3NDaGFuZ2U6a0Msb25DcmVhdGVWdWVBcHA6bmUub25DcmVhdGVWdWVBcHAsb25FcnJvcjpHYixvbkhvc3RFdmVudFJlY2VpdmU6Q3Asb25LZXlib2FyZEhlaWdodENoYW5nZTpqQSxvbkxvY2FsZUNoYW5nZTpEYixvbkxvY2F0aW9uQ2hhbmdlOm1PLG9uTG9jYXRpb25DaGFuZ2VFcnJvcjpiTyxvbk5hdGl2ZUV2ZW50UmVjZWl2ZTpmUCxvbk5ldHdvcmtTdGF0dXNDaGFuZ2U6Z0Esb25QYWdlTm90Rm91bmQ6emIsb25QdXNoTWVzc2FnZTp0eSxvblNvY2tldENsb3NlOnNULG9uU29ja2V0RXJyb3I6b1Qsb25Tb2NrZXRNZXNzYWdlOmFULG9uU29ja2V0T3BlbjppVCxvblRhYkJhck1pZEJ1dHRvblRhcDprYixvblRoZW1lQ2hhbmdlOnlBLG9uVW5oYW5kbGVkUmVqZWN0aW9uOkhiLG9uV2luZG93UmVzaXplOkJiLG9wZW5BcHBBdXRob3JpemVTZXR0aW5nOlRBLG9wZW5CbHVldG9vdGhBZGFwdGVyOiRDLG9wZW5Eb2N1bWVudDp2QyxvcGVuTG9jYXRpb246Z08scGFnZVNjcm9sbFRvOmtPLHByZUxvZ2luOnZwLHByZWxvYWRQYWdlOkZOLHByZXZpZXdJbWFnZTpOQSxyZUxhdW5jaDpCTixyZWFkQkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZTpRQyxyZWRpcmVjdFRvOklOLHJlZ2lzdGVyUnVudGltZTppUCxyZWdpc3RlclVUU0ludGVyZmFjZTpOUCxyZWdpc3RlclVUU1BsdWdpbjpJUCxyZW1vdmVJbnRlcmNlcHRvcjpFXyxyZW1vdmVTYXZlZEZpbGU6cEMscmVtb3ZlU3RvcmFnZTpuQyxyZW1vdmVTdG9yYWdlU3luYzp0QyxyZW1vdmVUYWJCYXJCYWRnZTpqTyxyZXF1ZXN0OkpBLHJlcXVlc3RQYXltZW50OmNQLHJlcXVpcmVHbG9iYWw6WU8scmVxdWlyZU5hdGl2ZVBsdWdpbjpsYSxyZXF1aXJlVVRTUGx1Z2luOmtQLHJlc3RvcmVHbG9iYWw6cU8sc2F2ZUZpbGU6dUMsc2F2ZUltYWdlVG9QaG90b3NBbGJ1bTpMQSxzYXZlVmlkZW9Ub1Bob3Rvc0FsYnVtOkJBLHNjYW5Db2RlOmJBLHNlbmRIb3N0RXZlbnQ6U3Asc2VuZE5hdGl2ZUV2ZW50OkJnLHNlbmRTb2NrZXRNZXNzYWdlOm5ULHNldEJMRU1UVTp0QSxzZXRDbGlwYm9hcmREYXRhOmhBLHNldEtlZXBTY3JlZW5PbjpDQSxzZXRMb2NhbGU6RmIsc2V0TmF2aWdhdGlvbkJhckNvbG9yOk1PLHNldE5hdmlnYXRpb25CYXJUaXRsZTpSTyxzZXRQYWdlTWV0YTpWYixzZXRTY3JlZW5CcmlnaHRuZXNzOndBLHNldFN0b3JhZ2U6WHcsc2V0U3RvcmFnZVN5bmM6Wncsc2V0VGFiQmFyQmFkZ2U6RE8sc2V0VGFiQmFySXRlbTpGTyxzZXRUYWJCYXJTdHlsZTpWTyxzaGFyZTpzUCxzaGFyZVdpdGhTeXN0ZW06bFAsc2hvd0FjdGlvblNoZWV0OndPLHNob3dLZXlib2FyZDokQSxzaG93TG9hZGluZzpDTyxzaG93TW9kYWw6RU8sc2hvd05hdmlnYXRpb25CYXJMb2FkaW5nOnhPLHNob3dUYWJCYXI6JE8sc2hvd1RhYkJhclJlZERvdDpITyxzaG93VG9hc3Q6QU8sc3RhcnRBY2NlbGVyb21ldGVyOlJnLHN0YXJ0QmVhY29uRGlzY292ZXJ5OmFBLHN0YXJ0Qmx1ZXRvb3RoRGV2aWNlc0Rpc2NvdmVyeTp6QyxzdGFydENvbXBhc3M6SWcsc3RhcnRMb2NhdGlvblVwZGF0ZTpwTyxzdGFydFB1bGxEb3duUmVmcmVzaDpQTyxzdGFydFNvdGVyQXV0aGVudGljYXRpb246X0Esc3RvcEFjY2VsZXJvbWV0ZXI6eGcsc3RvcEJlYWNvbkRpc2NvdmVyeTpzQSxzdG9wQmx1ZXRvb3RoRGV2aWNlc0Rpc2NvdmVyeTpXQyxzdG9wQ29tcGFzczprZyxzdG9wTG9jYXRpb25VcGRhdGU6dk8sc3RvcFB1bGxEb3duUmVmcmVzaDpOTyxzdWJzY3JpYmVHZXRMb2NhdGlvbjpucCxzd2l0Y2hUYWI6TE4sc3luY0RhdGFUb0dsb2JhbDpLTyx1blByZWxvYWRQYWdlOkROLHVwbG9hZEZpbGU6Y1QsdXB4MnB4OmdfLHZpYnJhdGVMb25nOkJDLHZpYnJhdGVTaG9ydDp4Qyx3ZWV4R2V0U3lzdGVtSW5mb1N5bmM6amMsd3JpdGVCTEVDaGFyYWN0ZXJpc3RpY1ZhbHVlOmVBfTtsZXQgVU49Ry5leHRlbmQoS2Ese3B1Ymxpc2hIYW5kbGVyOiROfSk7ZnVuY3Rpb24gJE4oZSx0LG4pe3Q9SlNPTi5zdHJpbmdpZnkodCksRy5pc0FycmF5KG4pfHwobj1bbl0pO2xldCByPWB0eXBlb2YgVW5pVmlld0pTQnJpZGdlICE9PSAndW5kZWZpbmVkJyAmJiBVbmlWaWV3SlNCcmlkZ2Uuc3Vic2NyaWJlSGFuZGxlcigiJHtlfSIsJHt0fSxfX1BBR0VfSURfXylgO24uZm9yRWFjaChhPT57bGV0IHU9U3RyaW5nKGEpLGc9cy53ZWJ2aWV3LmdldFdlYnZpZXdCeUlkKHUpO2cmJmcuZXZhbEpTKHIucmVwbGFjZSgiX19QQUdFX0lEX18iLHUpKX0pfWZ1bmN0aW9uIEhOKCl7bGV0e3RhYkJhcjplfT1JO2lmKCEoZSYmZS5saXN0JiZlLmxpc3QubGVuZ3RoKSlyZXR1cm47bGV0e2VudHJ5UGFnZVBhdGg6bn09STtlLnNlbGVjdGVkSW5kZXg9MDtsZXQgcj1lLmxpc3QuZmluZEluZGV4KGE9PmEucGFnZVBhdGg9PT1uKTtBaS5pbml0KGUsKGEsdSk9PntSLnN3aXRjaFRhYih7dXJsOm5lLmFkZExlYWRpbmdTbGFzaChhLnBhZ2VQYXRoKSxvcGVuVHlwZToic3dpdGNoVGFiIixmcm9tOiJ0YWJCYXIiLHN1Y2Nlc3MoKXt0cihuZS5PTl9UQUJfSVRFTV9UQVAse2luZGV4OnUsdGV4dDphLnRleHQscGFnZVBhdGg6YS5wYWdlUGF0aH0pfX0pfSksciE9PS0xJiYoZS5zZWxlY3RlZEluZGV4PXIsciE9PTAmJkFpLnN3aXRjaFRhYihuKSl9ZnVuY3Rpb24gak4oKXtsZXQgZT1zLmdsb2JhbEV2ZW50LHQ9Zi5yZXF1aXJlTW9kdWxlKCJnbG9iYWxFdmVudCIpLHtlbWl0Om4scHVibGlzaEhhbmRsZXI6cn09c3Q7Zi5jb25maWcucHJlbG9hZD9zLmtleS5hZGRFdmVudExpc3RlbmVyKExzLHRpKTplLmFkZEV2ZW50TGlzdGVuZXIoInNwbGFzaGNsb3NlZCIsKCk9PntzLmtleS5hZGRFdmVudExpc3RlbmVyKExzLHRpKX0pLGUuYWRkRXZlbnRMaXN0ZW5lcigicGF1c2UiLCgpPT57bihuZS5PTl9BUFBfRU5URVJfQkFDS0dST1VORCl9KSxlLmFkZEV2ZW50TGlzdGVuZXIoInJlc3VtZSIsKCk9PntsZXQgdT1sbigpO3UmJnUudXNlckFjdGlvbiYmRHQodSksbihuZS5PTl9BUFBfRU5URVJfRk9SRUdST1VORCx5ZSgpKX0pLHQuYWRkRXZlbnRMaXN0ZW5lcigidWlzdHlsZWNoYW5nZSIsZnVuY3Rpb24odSl7bGV0IGc9e3RoZW1lOnUudWlzdHlsZX07bihuZS5PTl9USEVNRV9DSEFOR0UsZykscihuZS5PTl9USEVNRV9DSEFOR0UsZyxobygpKSxFQygpfSk7bGV0IGE9MDtlLmFkZEV2ZW50TGlzdGVuZXIoIktleWJvYXJkSGVpZ2h0Q2hhbmdlIixmdW5jdGlvbih1KXthIT09dS5oZWlnaHQmJihhPXUuaGVpZ2h0LG4obmUuT05fS0VZQk9BUkRfSEVJR0hUX0NIQU5HRSx7aGVpZ2h0OmF9KSl9KSx0LmFkZEV2ZW50TGlzdGVuZXIoelAsZnVuY3Rpb24odSl7dSYmdS5ldmVudCYmZFAodS5ldmVudCx1LmRhdGEpfSksZS5hZGRFdmVudExpc3RlbmVyKCJwbHVzTWVzc2FnZSIsb3YpLGUuYWRkRXZlbnRMaXN0ZW5lcigiV2Vidmlld1Bvc3RNZXNzYWdlIixvdil9ZnVuY3Rpb24gb3Yoe2RhdGE6ZX0pe2UmJmUudHlwZSYmc3Quc3Vic2NyaWJlSGFuZGxlcigicGx1c01lc3NhZ2UuIitlLnR5cGUsZS5hcmdzKX1mdW5jdGlvbiBhdihlLHQsbj0hMSl7c3Quc3Vic2NyaWJlKCJwbHVzTWVzc2FnZS4iK2UsdCxuKX1mdW5jdGlvbiB6TihlKXskYihlLiQpO2xldHtlbnRyeVBhZ2VQYXRoOnQsZW50cnlQYWdlUXVlcnk6bixyZWZlcnJlckluZm86cn09SSxhPUZ0KHtwYXRoOnQscXVlcnk6bixyZWZlcnJlckluZm86cn0pO3RyKGUsbmUuT05fTEFVTkNILGEpLHRyKGUsbmUuT05fU0hPVyxhKTtsZXQgdT1mLnJlcXVpcmVNb2R1bGUoInBsdXMiKS5nZXRBcHBTdGF0ZTsodSYmTnVtYmVyKHUoKSkpPT09MiYmdHIoZSxuZS5PTl9ISURFLGEpfWZ1bmN0aW9uIHN2KGUpe3JldHVybiBlPWUucmVwbGFjZSgvXC8kLywiIiksZS5pbmRleE9mKCJfIik9PT0wP3MuaW8uY29udmVydExvY2FsRmlsZVN5c3RlbVVSTChlKTplfWZ1bmN0aW9uIFdOKCl7bGV0IGU9c3YoWmEpLHQ9c3YobXIpLG49dC5zcGxpdCgiLyIpO24ucG9wKCk7bGV0IHI9bi5qb2luKCIvIik7cy5pby5yZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJMKHMuaW8uY29udmVydEFic29sdXRlRmlsZVN5c3RlbShyKSxhPT57YS5jcmVhdGVSZWFkZXIoKS5yZWFkRW50cmllcyhmdW5jdGlvbihnKXtsZXQgeT1nO3kmJnkubGVuZ3RoJiZ5LmZvckVhY2goZnVuY3Rpb24oTSl7TS5pc0RpcmVjdG9yeSYmTS5mdWxsUGF0aC5pbmRleE9mKGUpPT09MCYmTS5mdWxsUGF0aC5pbmRleE9mKHQpIT09MCYmTS5yZW1vdmVSZWN1cnNpdmVseSgpfSl9KX0pfWxldCBsdj0wLGhjPTAsVnU9bnVsbCxObD1udWxsO2Z1bmN0aW9uIEdOKGUsdCl7aWYoVnU9bnVsbCxObCYmKEUoTmwpLE5sPW51bGwpLGUudHlwZT09PSJvbkZvY3VzIilpZihoYz4wKWUuZGV0YWlsLmhlaWdodD1oYztlbHNle05sPU4oZnVuY3Rpb24oKXtlLmRldGFpbC5oZWlnaHQ9aGMsdChlKX0sbHYpLFZ1PWZ1bmN0aW9uKCl7TmwmJihFKE5sKSxObD1udWxsKSxlLmRldGFpbC5oZWlnaHQ9aGMsdChlKX07cmV0dXJufXQoZSl9ZnVuY3Rpb24gcU4oKXtsdj1zLm9zLm5hbWUudG9Mb3dlckNhc2UoKT09PSJhbmRyb2lkIj8zMDA6NzAwLHN0Lm9uKG5lLk9OX0tFWUJPQVJEX0hFSUdIVF9DSEFOR0UsdD0+e2lmKGhjPXQuaGVpZ2h0LGhjPjApe2xldCBuPVZ1O1Z1PW51bGwsbiYmbigpfX0pfWZ1bmN0aW9uIFlOKGUsdCxuKXtsZXQgcj10LnR5cGU7cj09PSJvbkZvY3VzInx8cj09PSJvbkJsdXIiP0dOKHQsYT0+e24uZmlyZUV2ZW50KGUsYSl9KTpuLmZpcmVFdmVudChlLHQpfWZ1bmN0aW9uIEtOKGUsdCl7bGV0IG49UHQocGFyc2VJbnQodCkpO2lmKCFuKXJldHVybjtsZXQgcj1uLl9fcGFnZV9jb250YWluZXJfXztlLmZvckVhY2goYT0+e3N3aXRjaChhWzBdKXtjYXNlIG5lLkFDVElPTl9UWVBFX0VWRU5UOllOKGFbMV0sYVsyXSxyKTticmVha319KX1sZXQgY3Y9e307ZnVuY3Rpb24gSk4oZSx0LG4pe2xldHthZHBpZDpyLHdpZHRoOmF9PWUsdT1yKyItIithLGc9Y3ZbdV07aWYoZyYmZy5sZW5ndGg+MCl7dChnLnNwbGljZSgwLDEpWzBdKTtyZXR1cm59cy5hZC5nZXRBZHMoZSx5PT57bGV0IE09eS5hZHM7dChNLnNwbGljZSgwLDEpWzBdKSxjdlt1XT1nP2cuY29uY2F0KE0pOk19LHk9PntuKHtlcnJDb2RlOnkuY29kZSxlcnJNc2c6eS5tZXNzYWdlfSl9KX1mdW5jdGlvbiBaTigpe01hKCJnZXRBZERhdGEiLChlLHQpPT57Sk4oZSxuPT57dCh7Y29kZTowLGRhdGE6bn0pfSxuPT57dCh7Y29kZToxLG1lc3NhZ2U6bn0pfSl9KX1sZXQgWE49WyJzd2l0Y2hUYWIiLCJyZUxhdW5jaCIsInJlZGlyZWN0VG8iLCJuYXZpZ2F0ZVRvIiwibmF2aWdhdGVCYWNrIl07ZnVuY3Rpb24gUU4oKXtYTi5mb3JFYWNoKGU9PntNYShlLHQ9PntSW2VdKEcuZXh0ZW5kKHQse2ZhaWwobil7Y29uc29sZS5lcnJvcihuLmVyck1zZyl9fSkpfSl9KX1sZXQgdXY9ITE7ZnVuY3Rpb24gZUkoZSx0KXtsZXQgbj10PT09IjEiO2lmKCEobiYmdXYpKXtpZihuPyh1dj0hMCxXcChzLndlYnZpZXcuZ2V0TGF1bmNoV2VidmlldygpKSk6bm98fFdwKHMud2Vidmlldy5nZXRXZWJ2aWV3QnlJZCh0KSksIW5vLmxvYWRlZCl7aWYobm8uaWQhPT10KXJldHVybiBjb25zb2xlLmVycm9yKGB3ZWJ2aWV3UmVhZHlbJHtuby5pZH1dWyR7dH1dIG5vdCBtYXRjaGApO25vLmxvYWRlZD0hMH1zdC5lbWl0KGRjKyIuIit0KSxuJiZ0SSgpfX1mdW5jdGlvbiB0SSgpe2xldHthdXRvY2xvc2U6ZSxhbHdheXNTaG93QmVmb3JlUmVuZGVyOnR9PUkuc3BsYXNoc2NyZWVuO2UmJiF0JiZzLm5hdmlnYXRvci5jbG9zZVNwbGFzaHNjcmVlbigpO2xldCBuPW5lLmFkZExlYWRpbmdTbGFzaChJLmVudHJ5UGFnZVBhdGgpLHI9eWkobik7aWYoIXIubWV0YS5pc05WdWUpe2xldCBhPXt1cmw6bisoSS5lbnRyeVBhZ2VRdWVyeXx8IiIpLG9wZW5UeXBlOiJhcHBMYXVuY2gifSx1PXtyZXNvbHZlKCl7fSxyZWplY3QoKXt9fTtyZXR1cm4gci5tZXRhLmlzVGFiQmFyP2l2KGEsdSk6cnYoYSx1KX19ZnVuY3Rpb24gbkkoZSx0KXtsZXQgbj1QdChwYXJzZUludCh0KSk7biYmKG4uX191bmlhcHBfd2Vidmlldz0hMCl9ZnVuY3Rpb24gckkoZSx0KXtsZXQgbj1QdChwYXJzZUludCh0KSk7biYmZGVsZXRlIG4uX191bmlhcHBfd2Vidmlld31sZXQgaUk9KHtuYW1lOmUsYXJnOnR9LG4pPT57ZT09PSJwb3N0TWVzc2FnZSI/b0koblswXSx0KTpSW2VdKEcuZXh0ZW5kKHQse2ZhaWwocil7Y29uc29sZS5lcnJvcihyLmVyck1zZyl9fSkpfTtmdW5jdGlvbiBvSShlLHQpe2xldCBuPXpUKCJ3ZWItdmlldyIscGFyc2VJbnQoZSkpO24mJm4uZGlzcGF0Y2hFdmVudChuZS5jcmVhdGVVbmlFdmVudCh7dHlwZToib25NZXNzYWdlIix0YXJnZXQ6T2JqZWN0LmNyZWF0ZShudWxsKSxjdXJyZW50VGFyZ2V0Ok9iamVjdC5jcmVhdGUobnVsbCksZGV0YWlsOntkYXRhOlt0XX19KSl9ZnVuY3Rpb24gYUkoe25vZGVJZDplLG93bmVySWQ6dCxtZXRob2Q6bixhcmdzOnJ9LGEpe2xldCB1PWlwKGUscGFyc2VJbnQoYSkpO2lmKCF1KXJldHVybjtsZXQgZz1zSSh0LHUuX192dWVQYXJlbnRDb21wb25lbnQpOyFnfHwhZ1tuXXx8Z1tuXShyKX1mdW5jdGlvbiBzSShlLHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQudWlkPT09ZSlyZXR1cm4gdC5wcm94eTtsZXQgbj10LnBhcmVudDtmb3IoO247KXtpZihuLnVpZD09PWUpcmV0dXJuIG4ucHJveHk7bj1uLnBhcmVudH1yZXR1cm4gdC5wcm94eX1mdW5jdGlvbiBsSSgpe2xldHtzdWJzY3JpYmU6ZSxzdWJzY3JpYmVIYW5kbGVyOnQscHVibGlzaEhhbmRsZXI6bn09c3Q7aWYoYXYoInN1YnNjcmliZUhhbmRsZXIiLCh7dHlwZTpyLGRhdGE6YSxwYWdlSWQ6dX0pPT57dChyLGEsdSl9KSxhdihuZS5XRUJfSU5WT0tFX0FQUFNFUlZJQ0UsKHtkYXRhOnIsd2Vidmlld0lkczphfSk9PntpSShyLGEpfSksSS5yZW5kZXJlciE9PSJuYXRpdmUiKXtlKGRjLGVJKSxlKHJwLEtOKSxnbygpLFpOKCksUU4oKSxlKFVULG5JKSxlKCRULHJJKSxlKG5lLk9OX1dYU19JTlZPS0VfQ0FMTF9NRVRIT0QsYUkpO2xldCByPXlpKG5lLmFkZExlYWRpbmdTbGFzaChJLmVudHJ5UGFnZVBhdGgpKTtyJiYhci5tZXRhLmlzTlZ1ZSYmbihkYyx7fSwxKSxucCgpLGFPKCl9fWxldCBnYyxaZj17Z2xvYmFsRGF0YTp7fX07ZnVuY3Rpb24gY0koe2FsbG93RGVmYXVsdDplPSExfT17fSl7aWYoZ2MpcmV0dXJuIGdjO2lmKGUpcmV0dXJuIFpmO2NvbnNvbGUuZXJyb3IoIlt3YXJuXTogZ2V0QXBwKCkgZmFpbGVkLiBMZWFybiBtb3JlOiBodHRwczovL3VuaWFwcC5kY2xvdWQuaW8vY29sbG9jYXRpb24vZnJhbWUvd2luZG93P2lkPWdldGFwcC4iKX1mdW5jdGlvbiB1SShlKXtpZihSLlZ1ZXgmJmUuJHN0b3JlKXtsZXR7dXNlU3RvcmU6dH09Ui5WdWV4O1IuVnVleC51c2VTdG9yZT1uPT5uP3Qobik6ZS4kc3RvcmV9T3QoZSksZ2M9ZSxfZShnYyksRy5leHRlbmQoZ2MsWmYpLHBlKGdjLFpmLmdsb2JhbERhdGEpLHVlKCkscXAoKSxITigpLGpOKCkscU4oKSxsSSgpLHpOKGUpLE4oV04sMWU0KSxJLnJlYWR5PSEwfXZhciBmST17dW5pOlZOLGdldEFwcDpjSSxnZXRDdXJyZW50UGFnZXM6Rm4sX19kZWZpbmVQYWdlOnpmLF9fcmVnaXN0ZXJBcHA6dUksX19yZWdpc3RlclBhZ2U6SmMsVW5pU2VydmljZUpTQnJpZGdlOlVOfTtyZXR1cm4gZkl9KGZ0LFR0LHcpO0J0PUJ0LmRlZmF1bHR8fEJ0O2xldCBSPUJ0LnVuaSxBdD1CdC5nZXRBcHAsWm49QnQuZ2V0Q3VycmVudFBhZ2VzLHN0PUJ0LlVuaVNlcnZpY2VKU0JyaWRnZTtyZXR1cm4gQnR9dmFyIG9tPVprKGUxKTt2YXIgcmY7ZnVuY3Rpb24gYW0oZil7cmY9Zi5nZXRMb2NhdGlvbn1mdW5jdGlvbiBzbShmKXt0MShmKX1mdW5jdGlvbiB0MShmKXtsZXQgcz1mLmdldExvY2F0aW9uO3MhPT1yZiYmKGYuZ2V0TG9jYXRpb249ZnVuY3Rpb24ocCl7aWYocC50eXBlJiZwLnR5cGU9PT0iZ2NqMDIiKXRyeXtyZXR1cm4gcyhwKX1jYXRjaCh3KXtyZXR1cm4gZi5nZXRMb2NhdGlvbj1yZixmLmdldExvY2F0aW9uKHApfWVsc2UgcmV0dXJuIHJmKHApfSl9ZnVuY3Rpb24gbG0oZil7YW0oZil9ZnVuY3Rpb24gY20oZil7c20oZil9dmFyIHVtPWY9PntsZXR7cmVnaXN0ZXJVVFNJbnRlcmZhY2U6cyxpbml0VVRTUHJveHlDbGFzczpwLGluaXRVVFNQcm94eUZ1bmN0aW9uOncsaW5pdFVUU1BhY2thZ2VOYW1lOk4saW5pdFVUU0luZGV4Q2xhc3NOYW1lOkUsaW5pdFVUU0NsYXNzTmFtZTpofT1mLF89IkRDbG91ZFVuaUNob29zZU1lZGlhIixJPSJ1bmktY2hvb3NlTWVkaWEiLFNlPSJidWlsdC1pbiIsZnQ9IiIsVHQ9ITAsQnQ9TihfLFR0KSxSPUUoXyxUdCk7Zi5jaG9vc2VNZWRpYT13KCExLHttb2R1bGVOYW1lOkksbW9kdWxlVHlwZTpTZSxlcnJNc2c6ZnQsbWFpbjohMCxwYWNrYWdlOkJ0LGNsYXNzOlIsbmFtZToiY2hvb3NlTWVkaWFCeUpzIixrZWVwQWxpdmU6ITEscGFyYW1zOlt7bmFtZToib3B0aW9ucyIsdHlwZToiVVRTU0RLTW9kdWxlc0RDbG91ZFVuaUNob29zZU1lZGlhQ2hvb3NlTWVkaWFPcHRpb25zSlNPTk9iamVjdCJ9XSxyZXR1cm46IiJ9KX07dmFyIGZtPWY9PntsZXR7cmVnaXN0ZXJVVFNJbnRlcmZhY2U6cyxpbml0VVRTUHJveHlDbGFzczpwLGluaXRVVFNQcm94eUZ1bmN0aW9uOncsaW5pdFVUU1BhY2thZ2VOYW1lOk4saW5pdFVUU0luZGV4Q2xhc3NOYW1lOkUsaW5pdFVUU0NsYXNzTmFtZTpofT1mLF89IkRDbG91ZFVuaUNyZWF0ZVJlcXVlc3RQZXJtaXNzaW9uTGlzdGVuZXIiLEk9InVuaS1jcmVhdGVSZXF1ZXN0UGVybWlzc2lvbkxpc3RlbmVyIixTZT0iYnVpbHQtaW4iLGZ0PSIiLFR0PSEwLEJ0PU4oXyxUdCksUj1FKF8sVHQpO3MoIlJlcXVlc3RQZXJtaXNzaW9uTGlzdGVuZXJPcHRpb25zIixPYmplY3QuYXNzaWduKHttb2R1bGVOYW1lOkksbW9kdWxlVHlwZTpTZSxlcnJNc2c6ZnQscGFja2FnZTpCdCxjbGFzczpoKF8sIlJlcXVlc3RQZXJtaXNzaW9uTGlzdGVuZXJCeUpzUHJveHkiLFR0KX0se21ldGhvZHM6e29uUmVxdWVzdEJ5SnM6e2FzeW5jOiExLGtlZXBBbGl2ZTohMSxwYXJhbXM6W3tuYW1lOiJjYWxsYmFjayIsdHlwZToiVVRTQ2FsbGJhY2sifV19LG9uQ29uZmlybUJ5SnM6e2FzeW5jOiExLGtlZXBBbGl2ZTohMSxwYXJhbXM6W3tuYW1lOiJjYWxsYmFjayIsdHlwZToiVVRTQ2FsbGJhY2sifV19LG9uQ29tcGxldGVCeUpzOnthc3luYzohMSxrZWVwQWxpdmU6ITEscGFyYW1zOlt7bmFtZToiY2FsbGJhY2siLHR5cGU6IlVUU0NhbGxiYWNrIn1dfSxzdG9wQnlKczp7YXN5bmM6ITEsa2VlcEFsaXZlOiExLHBhcmFtczpbXX19LHByb3BzOltdLHNldHRlcnM6e319KSksZi5jcmVhdGVSZXF1ZXN0UGVybWlzc2lvbkxpc3RlbmVyPXcoITEse21vZHVsZU5hbWU6SSxtb2R1bGVUeXBlOlNlLGVyck1zZzpmdCxtYWluOiEwLHBhY2thZ2U6QnQsY2xhc3M6UixuYW1lOiJjcmVhdGVSZXF1ZXN0UGVybWlzc2lvbkxpc3RlbmVyQnlKcyIsa2VlcEFsaXZlOiExLHBhcmFtczpbXSxyZXR1cm46e3R5cGU6ImludGVyZmFjZSIsb3B0aW9uczoiUmVxdWVzdFBlcm1pc3Npb25MaXN0ZW5lck9wdGlvbnMifX0pfTt2YXIgZG09Zj0+e2xldHtyZWdpc3RlclVUU0ludGVyZmFjZTpzLGluaXRVVFNQcm94eUNsYXNzOnAsaW5pdFVUU1Byb3h5RnVuY3Rpb246dyxpbml0VVRTUGFja2FnZU5hbWU6Tixpbml0VVRTSW5kZXhDbGFzc05hbWU6RSxpbml0VVRTQ2xhc3NOYW1lOmh9PWYsXz0iRENsb3VkVW5pRXhpdCIsST0idW5pLWV4aXQiLFNlPSJidWlsdC1pbiIsZnQ9IiIsVHQ9ITAsQnQ9TihfLFR0KSxSPUUoXyxUdCk7Zi5leGl0PXcoITEse21vZHVsZU5hbWU6SSxtb2R1bGVUeXBlOlNlLGVyck1zZzpmdCxtYWluOiEwLHBhY2thZ2U6QnQsY2xhc3M6UixuYW1lOiJleGl0QnlKcyIsa2VlcEFsaXZlOiExLHBhcmFtczpbe25hbWU6Im9wdGlvbnMiLHR5cGU6IlVUU1NES01vZHVsZXNEQ2xvdWRVbmlFeGl0RXhpdE9wdGlvbnNKU09OT2JqZWN0IixkZWZhdWx0OiJVVFNOdWxsIn1dLHJldHVybjoiIn0pfTt2YXIgaG09Zj0+e2xldHtyZWdpc3RlclVUU0ludGVyZmFjZTpzLGluaXRVVFNQcm94eUNsYXNzOnAsaW5pdFVUU1Byb3h5RnVuY3Rpb246dyxpbml0VVRTUGFja2FnZU5hbWU6Tixpbml0VVRTSW5kZXhDbGFzc05hbWU6RSxpbml0VVRTQ2xhc3NOYW1lOmh9PWYsXz0iRENsb3VkVW5pRmFjaWFsVmVyaWZ5IixJPSJGYWNpYWxSZWNvZ25pdGlvblZlcmlmeShcdTVCOUVcdTRFQkFcdThCQTRcdThCQzEpIixTZT0iYnVpbHQtaW4iLGZ0PSIiLFR0PSEwLEJ0PU4oXyxUdCksUj1FKF8sVHQpO2Yuc3RhcnRGYWNpYWxSZWNvZ25pdGlvblZlcmlmeT13KCExLHttb2R1bGVOYW1lOkksbW9kdWxlVHlwZTpTZSxlcnJNc2c6ZnQsbWFpbjohMCxwYWNrYWdlOkJ0LGNsYXNzOlIsbmFtZToic3RhcnRGYWNpYWxSZWNvZ25pdGlvblZlcmlmeUJ5SnMiLGtlZXBBbGl2ZTohMSxwYXJhbXM6W3tuYW1lOiJmYWNlU3R5bGUiLHR5cGU6IlVUU1NES01vZHVsZXNEQ2xvdWRVbmlGYWNpYWxWZXJpZnlTdGFydEZhY2lhbFJlY29nbml0aW9uVmVyaWZ5T3B0aW9uc0pTT05PYmplY3QifV0scmV0dXJuOiIifSksZi5nZXRGYWNpYWxSZWNvZ25pdGlvbk1ldGFJbmZvPXcoITEse21vZHVsZU5hbWU6SSxtb2R1bGVUeXBlOlNlLGVyck1zZzpmdCxtYWluOiEwLHBhY2thZ2U6QnQsY2xhc3M6UixuYW1lOiJnZXRGYWNpYWxSZWNvZ25pdGlvbk1ldGFJbmZvQnlKcyIsa2VlcEFsaXZlOiExLHBhcmFtczpbXSxyZXR1cm46IiJ9KX07dmFyIGdtPWY9PntsZXR7cmVnaXN0ZXJVVFNJbnRlcmZhY2U6cyxpbml0VVRTUHJveHlDbGFzczpwLGluaXRVVFNQcm94eUZ1bmN0aW9uOncsaW5pdFVUU1BhY2thZ2VOYW1lOk4saW5pdFVUU0luZGV4Q2xhc3NOYW1lOkUsaW5pdFVUU0NsYXNzTmFtZTpofT1mLF89IkRDbG91ZFVuaUdldExvY2F0aW9uVGVuY2VudFVuaTEiLEk9InVuaS1nZXRMb2NhdGlvbi10ZW5jZW50LXVuaTEiLFNlPSJidWlsdC1pbiIsZnQ9IiIsVHQ9ITAsQnQ9TihfLFR0KSxSPUUoXyxUdCk7Zi5nZXRMb2NhdGlvbj13KCExLHttb2R1bGVOYW1lOkksbW9kdWxlVHlwZTpTZSxlcnJNc2c6ZnQsbWFpbjohMCxwYWNrYWdlOkJ0LGNsYXNzOlIsbmFtZToiZ2V0TG9jYXRpb25CeUpzIixrZWVwQWxpdmU6ITEscGFyYW1zOlt7bmFtZToib3B0aW9ucyIsdHlwZToiVVRTU0RLTW9kdWxlc0RDbG91ZFVuaUdldExvY2F0aW9uVGVuY2VudFVuaTFHZXRMb2NhdGlvbk9wdGlvbnNKU09OT2JqZWN0In1dLHJldHVybjoiIn0pfTt2YXIgcG09Zj0+e2xldHtyZWdpc3RlclVUU0ludGVyZmFjZTpzLGluaXRVVFNQcm94eUNsYXNzOnAsaW5pdFVUU1Byb3h5RnVuY3Rpb246dyxpbml0VVRTUGFja2FnZU5hbWU6Tixpbml0VVRTSW5kZXhDbGFzc05hbWU6RSxpbml0VVRTQ2xhc3NOYW1lOmh9PWYsXz0iRENsb3VkVW5pSW5zdGFsbEFwayIsST0idW5pLWluc3RhbGxBcGsiLFNlPSJidWlsdC1pbiIsZnQ9IiIsVHQ9ITAsQnQ9TihfLFR0KSxSPUUoXyxUdCk7Zi5pbnN0YWxsQXBrPXcoITEse21vZHVsZU5hbWU6SSxtb2R1bGVUeXBlOlNlLGVyck1zZzpmdCxtYWluOiEwLHBhY2thZ2U6QnQsY2xhc3M6UixuYW1lOiJpbnN0YWxsQXBrQnlKcyIsa2VlcEFsaXZlOiExLHBhcmFtczpbe25hbWU6Im9wdGlvbnMiLHR5cGU6IlVUU1NES01vZHVsZXNEQ2xvdWRVbmlJbnN0YWxsQXBrSW5zdGFsbEFwa09wdGlvbnNKU09OT2JqZWN0In1dLHJldHVybjoiIn0pfTt2YXIgdm09Zj0+e2xldHtyZWdpc3RlclVUU0ludGVyZmFjZTpzLGluaXRVVFNQcm94eUNsYXNzOnAsaW5pdFVUU1Byb3h5RnVuY3Rpb246dyxpbml0VVRTUGFja2FnZU5hbWU6Tixpbml0VVRTSW5kZXhDbGFzc05hbWU6RSxpbml0VVRTQ2xhc3NOYW1lOmh9PWYsXz0iRENsb3VkVW5pUHJpdmFjeSIsST0idW5pLXByaXZhY3kiLFNlPSJidWlsdC1pbiIsZnQ9IiIsVHQ9ITAsQnQ9TihfLFR0KSxSPUUoXyxUdCk7Zi5nZXRQcml2YWN5U2V0dGluZz13KCExLHttb2R1bGVOYW1lOkksbW9kdWxlVHlwZTpTZSxlcnJNc2c6ZnQsbWFpbjohMCxwYWNrYWdlOkJ0LGNsYXNzOlIsbmFtZToiZ2V0UHJpdmFjeVNldHRpbmdCeUpzIixrZWVwQWxpdmU6ITEscGFyYW1zOlt7bmFtZToib3B0aW9ucyIsdHlwZToiVVRTU0RLTW9kdWxlc0RDbG91ZFVuaVByaXZhY3lHZXRQcml2YWN5U2V0dGluZ09wdGlvbnNKU09OT2JqZWN0In1dLHJldHVybjoiIn0pLGYucmVzZXRQcml2YWN5QXV0aG9yaXphdGlvbj13KCExLHttb2R1bGVOYW1lOkksbW9kdWxlVHlwZTpTZSxlcnJNc2c6ZnQsbWFpbjohMCxwYWNrYWdlOkJ0LGNsYXNzOlIsbmFtZToicmVzZXRQcml2YWN5QXV0aG9yaXphdGlvbkJ5SnMiLGtlZXBBbGl2ZTohMSxwYXJhbXM6W10scmV0dXJuOiIifSksZi5vblByaXZhY3lBdXRob3JpemF0aW9uQ2hhbmdlPXcoITEse21vZHVsZU5hbWU6SSxtb2R1bGVUeXBlOlNlLGVyck1zZzpmdCxtYWluOiEwLHBhY2thZ2U6QnQsY2xhc3M6UixuYW1lOiJvblByaXZhY3lBdXRob3JpemF0aW9uQ2hhbmdlQnlKcyIsa2VlcEFsaXZlOiExLHBhcmFtczpbe25hbWU6ImNhbGxiYWNrIix0eXBlOiJVVFNDYWxsYmFjayJ9XSxyZXR1cm46IiJ9KSxmLm9mZlByaXZhY3lBdXRob3JpemF0aW9uQ2hhbmdlPXcoITEse21vZHVsZU5hbWU6SSxtb2R1bGVUeXBlOlNlLGVyck1zZzpmdCxtYWluOiEwLHBhY2thZ2U6QnQsY2xhc3M6UixuYW1lOiJvZmZQcml2YWN5QXV0aG9yaXphdGlvbkNoYW5nZUJ5SnMiLGtlZXBBbGl2ZTohMSxwYXJhbXM6W3tuYW1lOiJpZCIsdHlwZToibnVtYmVyIn1dLHJldHVybjoiIn0pfTt2YXIgbW09Zj0+e2xldHtyZWdpc3RlclVUU0ludGVyZmFjZTpzLGluaXRVVFNQcm94eUNsYXNzOnAsaW5pdFVUU1Byb3h5RnVuY3Rpb246dyxpbml0VVRTUGFja2FnZU5hbWU6Tixpbml0VVRTSW5kZXhDbGFzc05hbWU6RSxpbml0VVRTQ2xhc3NOYW1lOmh9PWYsXz0iRENsb3VkVW5pVGhlbWUiLEk9InVuaS10aGVtZSIsU2U9ImJ1aWx0LWluIixmdD0iIixUdD0hMCxCdD1OKF8sVHQpLFI9RShfLFR0KX07ZnVuY3Rpb24gX20oZil7bG0oZiksdW0oZiksZm0oZiksZG0oZiksaG0oZiksZ20oZikscG0oZiksdm0oZiksbW0oZiksY20oZil9dmFyIGJkLHlkLEVkLGZzLFNkLHdkLENkO2Z1bmN0aW9uIGJtKCl7cmV0dXJuIGZzP3tfX2RlZmluZVBhZ2U6YmQsX19yZWdpc3RlckFwcDp5ZCxfX3JlZ2lzdGVyUGFnZTpFZCx1bmk6ZnMsd3g6ZnMsZ2V0QXBwOlNkLGdldEN1cnJlbnRQYWdlczp3ZCxVbmlTZXJ2aWNlSlNCcmlkZ2U6Q2R9Ont9fWZ1bmN0aW9uIHltKGYpe2xldHt3ZWV4OnMscGx1czpwLFZ1ZVNoYXJlZDp3fT1mO3JldHVybiBmc3x8KHtfX2RlZmluZVBhZ2U6YmQsX19yZWdpc3RlckFwcDp5ZCxfX3JlZ2lzdGVyUGFnZTpFZCx1bmk6ZnMsZ2V0QXBwOlNkLGdldEN1cnJlbnRQYWdlczp3ZCxVbmlTZXJ2aWNlSlNCcmlkZ2U6Q2R9PWltKHMscCxmKSxmcy5WdWVTaGFyZWQ9dyxfbShmcyksX3YoZnMpKSx7X19kZWZpbmVQYWdlOmJkLF9fcmVnaXN0ZXJBcHA6eWQsX19yZWdpc3RlclBhZ2U6RWQscGx1czpwLHVuaTpmcyx3eDpmcyxnZXRBcHA6U2QsZ2V0Q3VycmVudFBhZ2VzOndkLFVuaVNlcnZpY2VKU0JyaWRnZTpDZH19ZnVuY3Rpb24gRW0oZixzKXtsZXR7X191bmlDb25maWc6cH09cztpZighcClyZXR1cm47bGV0IHc9cy53ZWV4O3cuZG9jdW1lbnQuX18kYXV0b21hdG9yX189ISFwLmF1dG9tYXRvcjtsZXQgTj1wLnJlbmRlcmVyIT09Im5hdGl2ZSImJncuY29uZmlnLmJ1bmRsZVVybC5pbmRleE9mKCJhcHAtc2VydmljZS5qcyIpIT09LTE7aWYocm8ocyxibSgpKSxOP29tKHMpOihTdihmLHMpLFp2KHMuVnVlLnBhcnNlQ2xhc3NTdHlsZXMpKSxybyhzLHltKHMpKSx3LmNvbmZpZy5wbHVzX3dlYl9pZD09PSIxIil7bGV0IEk9dy5yZXF1aXJlTW9kdWxlKCJwbHVzIik7SS5zZXREZWZhdWx0Rm9udFNpemUmJkkuc2V0RGVmYXVsdEZvbnRTaXplKE1hdGgucm91bmQocy5wbHVzLnNjcmVlbi5yZXNvbHV0aW9uV2lkdGgvMjApKX1sZXR7c2NhbGU6RSxkZXZpY2VXaWR0aDpoLHBsYXRmb3JtOl99PWdsb2JhbC5XWEVudmlyb25tZW50O2lmKF8udG9Mb3dlckNhc2UoKT09PSJpb3MiKXtsZXQgST1NYXRoLmNlaWwoaC9FKTt3LnJlcXVpcmVNb2R1bGUoIm1ldGEiKS5zZXRWaWV3cG9ydCh7d2lkdGg6SSxyb3VuZE9mZkRldmlhdGlvbjohMX0pfX12YXIgTGw9Y2xhc3MgZXh0ZW5kcyBCbHtjb25zdHJ1Y3RvcihzKXtzdXBlcigpO3RoaXMubm9kZVR5cGU9ODt0aGlzLnR5cGU9ImNvbW1lbnQiO3RoaXMudmFsdWU9IiI7dGhpcy52YWx1ZT1zfXRvU3RyaW5nKCl7cmV0dXJuIjwhLS0gIit0aGlzLnZhbHVlKyIgLS0+In19O2Z1bmN0aW9uIFpvKGYscz1bXSl7cmV0dXJue21vZHVsZToiZG9tIixtZXRob2Q6ZixhcmdzOnN9fXZhciB5Yz1jbGFzc3tjb25zdHJ1Y3RvcihzLHApe3RoaXMuaWQ9cyx0aGlzLmJhdGNoZWQ9ITEsdGhpcy51cGRhdGVzPVtdLGpuKHApP09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJoYW5kbGVyIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6cH0pOmNvbnNvbGUuZXJyb3IoIltKUyBSdW50aW1lXSBpbnZhbGlkIHBhcmFtZXRlciwgaGFuZGxlciBtdXN0IGJlIGEgZnVuY3Rpb24iKX1jcmVhdGVGaW5pc2gocyl7cmV0dXJuIHRoaXMuaGFuZGxlcihbWm8oImNyZWF0ZUZpbmlzaCIpXSxzKX11cGRhdGVGaW5pc2gocyl7cmV0dXJuIHRoaXMuaGFuZGxlcihbWm8oInVwZGF0ZUZpbmlzaCIpXSxzKX1yZWZyZXNoRmluaXNoKHMpe3JldHVybiB0aGlzLmhhbmRsZXIoW1pvKCJyZWZyZXNoRmluaXNoIildLHMpfWNyZWF0ZUJvZHkocyl7bGV0IHA9cy50b0pTT04oKSx3PXAuY2hpbGRyZW47ZGVsZXRlIHAuY2hpbGRyZW47bGV0IE49W1pvKCJjcmVhdGVCb2R5IixbcF0pXTtyZXR1cm4gdyYmTi5wdXNoLmFwcGx5KE4sdy5tYXAoRT0+Wm8oImFkZEVsZW1lbnQiLFtwLnJlZixFLC0xXSkpKSx0aGlzLmFkZEFjdGlvbnMoTil9YWRkRWxlbWVudChzLHAsdyl7cmV0dXJuIHc+PTB8fCh3PS0xKSx0aGlzLmFkZEFjdGlvbnMoWm8oImFkZEVsZW1lbnQiLFtwLHMudG9KU09OKCksd10pKX1yZW1vdmVFbGVtZW50KHMpe2lmKEhpKHMpKXtsZXQgcD1zLm1hcCh3PT5abygicmVtb3ZlRWxlbWVudCIsW3ddKSk7cmV0dXJuIHRoaXMuYWRkQWN0aW9ucyhwKX1yZXR1cm4gdGhpcy5hZGRBY3Rpb25zKFpvKCJyZW1vdmVFbGVtZW50Iixbc10pKX1tb3ZlRWxlbWVudChzLHAsdyl7cmV0dXJuIHRoaXMuYWRkQWN0aW9ucyhabygibW92ZUVsZW1lbnQiLFtzLHAsd10pKX1zZXRBdHRyKHMscCx3KXtyZXR1cm4gdGhpcy5hZGRBY3Rpb25zKFpvKCJ1cGRhdGVBdHRycyIsW3Mse1twXTp3fV0pKX1zZXRTdHlsZShzLHAsdyl7cmV0dXJuIHRoaXMuYWRkQWN0aW9ucyhabygidXBkYXRlU3R5bGUiLFtzLHtbcF06d31dKSl9c2V0U3R5bGVzKHMscCl7cmV0dXJuIHRoaXMuYWRkQWN0aW9ucyhabygidXBkYXRlU3R5bGUiLFtzLHBdKSl9YWRkRXZlbnQocyxwKXtyZXR1cm4gdGhpcy5hZGRBY3Rpb25zKFpvKCJhZGRFdmVudCIsW3MscF0pKX1yZW1vdmVFdmVudChzLHApe3JldHVybiB0aGlzLmFkZEFjdGlvbnMoWm8oInJlbW92ZUV2ZW50IixbcyxwXSkpfWhhbmRsZXIocyxwKXtyZXR1cm4gcCYmcCgpfWFkZEFjdGlvbnMocyl7bGV0IHA9dGhpcy51cGRhdGVzLHc9dGhpcy5oYW5kbGVyO2lmKEhpKHMpfHwocz1bc10pLHRoaXMuYmF0Y2hlZClwLnB1c2guYXBwbHkocCxzKTtlbHNlIHJldHVybiB3KHMpfX07dmFyIEFkPXtjcmVhdGVCb2R5OiJjYWxsQ3JlYXRlQm9keSIsYWRkRWxlbWVudDoiY2FsbEFkZEVsZW1lbnQiLHJlbW92ZUVsZW1lbnQ6ImNhbGxSZW1vdmVFbGVtZW50Iixtb3ZlRWxlbWVudDoiY2FsbE1vdmVFbGVtZW50Iix1cGRhdGVBdHRyczoiY2FsbFVwZGF0ZUF0dHJzIix1cGRhdGVTdHlsZToiY2FsbFVwZGF0ZVN0eWxlIixhZGRFdmVudDoiY2FsbEFkZEV2ZW50IixyZW1vdmVFdmVudDoiY2FsbFJlbW92ZUV2ZW50In07ZnVuY3Rpb24gU20oZixzKXtsZXQgcD1zfHxnbG9iYWwuY2FsbE5hdGl2ZTtyZXR1cm4gam4ocCl8fGNvbnNvbGUuZXJyb3IoIltKUyBSdW50aW1lXSBubyBkZWZhdWx0IGhhbmRsZXIiKSxmdW5jdGlvbihOKXtIaShOKXx8KE49W05dKTtmb3IobGV0IEU9MDtFPE4ubGVuZ3RoO0UrKyl7bGV0IGg9cjEoZixOW0VdLHApO2lmKGg9PT0tMSlyZXR1cm4gaH19fWZ1bmN0aW9uIG4xKGYscyl7cmV0dXJuIGY9PT0iZG9tIiYmQWRbc10mJmpuKGdsb2JhbFtBZFtzXV0pfWZ1bmN0aW9uIHIxKGYscyxwKXtsZXR7bW9kdWxlOncsbWV0aG9kOk4sYXJnczpFfT1zO3JldHVybiBuMSh3LE4pP2dsb2JhbFtBZFtOXV0oZiwuLi5FLCItMSIpOnAoZixbc10sIi0xIil9dmFyIG9mPWNsYXNzIGV4dGVuZHMgYm97Y29uc3RydWN0b3Iocyl7c3VwZXIoKTt0aGlzLnZhbHVlPXMsdGhpcy5ub2RlVHlwZT0zLHRoaXMudHlwZT0idGV4dCIsdGhpcy52YWx1ZT0iIn10b1N0cmluZygpe3JldHVybiIiK3RoaXMudmFsdWV9fTt2YXIgd209e3NsaWRlcjp7Y2hhbmdlOmZ1bmN0aW9uKGYpe3JldHVybntpbmRleDpmLmluZGV4LHNvdXJjZTpmLnNvdXJjZX19LHNjcm9sbDpmdW5jdGlvbihmKXtyZXR1cm57b2Zmc2V0WFJhdGlvOmYub2Zmc2V0WFJhdGlvLG9mZnNldFlSYXRpbzpmLm9mZnNldFlSYXRpbyxkcmFnOmYuZHJhZ319fSwic2Nyb2xsLXZpZXciOntzY3JvbGxlbmQ6ZnVuY3Rpb24oZil7cmV0dXJue2NvbnRlbnRPZmZzZXQ6Zi5jb250ZW50T2Zmc2V0fX19fTtmdW5jdGlvbiBDbShmKXtsZXR7YXR0cjpzLG9mZnNldExlZnQ6cCxvZmZzZXRUb3A6d309ZixOPXt9O3JldHVybiBzJiZPYmplY3Qua2V5cyhzKS5mb3JFYWNoKEU9PntFLmluZGV4T2YoImRhdGEtIik9PT0wJiYoTltFLnJlcGxhY2UoImRhdGEtIiwiIildPXNbRV0pfSkse2lkOnMmJnMuaWR8fCIiLGRhdGFzZXQ6TixvZmZzZXRMZWZ0OnB8fDAsb2Zmc2V0VG9wOnd8fDB9fXZhciBpMT1bImEiLCJkaXYiLCJsaXN0IiwiY2VsbCIsImxvYWRpbmciLCJyZWZyZXNoIiwicmVjeWNsZS1saXN0Iiwic2Nyb2xsZXIiLCJpbmRpY2F0b3IiLCJ3YXRlcmZhbGwiLCJ3ZWIiLCJyaWNodGV4dCJdLG8xPVsidmlld2FwcGVhciIsInZpZXdkaXNhcHBlYXIiXSxhMT17bWFya2VydGFwOlsibWFya2VySWQiXSxjb250cm9sdGFwOlsiY29udHJvbElkIl0scmVnaW9uY2hhbmdlOlsiY2F1c2VkQnkiXSxlbmQ6WyJjYXVzZWRCeSJdLGFwcGVhcjpbImRpcmVjdGlvbiJdLGRpc2FwcGVhcjpbImRpcmVjdGlvbiJdfTtmdW5jdGlvbiBBbShmLHMpe2xldCBwPWYudHlwZTtpZihvMS5pbmRleE9mKHApIT09LTEpcmV0dXJuIGY7bGV0IHc9Zi5jdXJyZW50VGFyZ2V0LE49dy50eXBlLnJlcGxhY2UoInUtIiwiIik7aWYoaTEuaW5kZXhPZihOKSE9PS0xKXJldHVybiBmO2xldHt0aW1lc3RhbXA6RSx0YXJnZXQ6aH09ZjtpZighcyl7bGV0IFNlPXdtW05dO1NlP2puKFNlW3BdKT9zPVNlW3BdKGYpOnM9Zi5kZXRhaWx8fHt9OnM9Zi5kZXRhaWx8fHt9fWxldCBfPXt0eXBlOnAsdGltZVN0YW1wOkUsdGFyZ2V0OkNtKGgpLGN1cnJlbnRUYXJnZXQ6Q20odyksZGV0YWlsOnMsdG91Y2hlczpwPT09InRvdWNoZW5kInx8cD09PSJwYW5lbmQiP1tdOmYuY2hhbmdlZFRvdWNoZXMsY2hhbmdlZFRvdWNoZXM6Zi5jaGFuZ2VkVG91Y2hlc307Zi5jb21wb25lbnRJZCYmKF8uY29tcG9uZW50SWQ9Zi5jb21wb25lbnRJZCk7bGV0IEk9YTFbcF07cmV0dXJuIEkmJkkuZm9yRWFjaChTZT0+e0lsKGYsU2UpJiYoX1tTZV09ZltTZV0pfSksX31mdW5jdGlvbiBzMShmLHMpe2xldCBwPXMuYXR0cnN8fHt9O2ZvcihsZXQgTiBpbiBwKWYuc2V0QXR0cihOLHBbTl0sITApO2xldCB3PXMuc3R5bGV8fHt9O2ZvcihsZXQgTiBpbiB3KWYuc2V0U3R5bGUoTix3W05dLCEwKX12YXIgY2E9Y2xhc3N7Y29uc3RydWN0b3IocyxwPSIiLHcpe3M9cz9zLnRvU3RyaW5nKCk6IiIsdGhpcy5pZD1zLHRoaXMuVVJMPXAsQnYocyx0aGlzKSx0aGlzLm5vZGVNYXA9e307bGV0IE49Y2EuTGlzdGVuZXJ8fHljO3RoaXMubGlzdGVuZXI9bmV3IE4ocyx3fHxTbShzLGNhLmhhbmRsZXIpKSx0aGlzLnRhc2tDZW50ZXI9bmV3IGJjKHMsdz8oRSxoKT0+dyhoKTpjYS5oYW5kbGVyKSx0aGlzLmNyZWF0ZURvY3VtZW50RWxlbWVudCgpfWdldFJlZihzKXtyZXR1cm4gdGhpcy5ub2RlTWFwW3NdfW9wZW4oKXt0aGlzLmxpc3RlbmVyLmJhdGNoZWQ9ITF9Y2xvc2UoKXt0aGlzLmxpc3RlbmVyLmJhdGNoZWQ9ITB9Y3JlYXRlRG9jdW1lbnRFbGVtZW50KCl7aWYoIXRoaXMuZG9jdW1lbnRFbGVtZW50KXtsZXQgcz1uZXcgYm8oImRvY3VtZW50Iik7cy5kb2NJZD10aGlzLmlkLHMub3duZXJEb2N1bWVudD10aGlzLHMucm9sZT0iZG9jdW1lbnRFbGVtZW50IixzLnJlZj0iX2RvY3VtZW50RWxlbWVudCIsdGhpcy5ub2RlTWFwLl9kb2N1bWVudEVsZW1lbnQ9cyx0aGlzLmRvY3VtZW50RWxlbWVudD1zLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCJhcHBlbmRDaGlsZCIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnA9PntpZCh0aGlzLHApfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCJpbnNlcnRCZWZvcmUiLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZToocCx3KT0+e2lkKHRoaXMscCx3KX19KSxscigiZGVidWciKSYmaW8oYENyZWF0ZSBkb2N1bWVudCBlbGVtZW50IChpZDogIiR7cy5kb2NJZH0iLCByZWY6ICIke3MucmVmfSIpYCl9cmV0dXJuIHRoaXMuZG9jdW1lbnRFbGVtZW50fWNyZWF0ZUJvZHkocyxwKXtpZighdGhpcy5ib2R5KXtsZXQgdz1uZXcgYm8ocyxwKTtvZCh0aGlzLHcpLGxyKCJkZWJ1ZyIpJiZpbyhgW2NyZWF0ZUJvZHldKCR7dGhpcy5pZH0sJHt3LnR5cGV9LCR7dy5yZWZ9KSAoJHtKU09OLnN0cmluZ2lmeSh3LnRvSlNPTighMCkpfSkuYCl9cmV0dXJuIHRoaXMuYm9keX1jcmVhdGVFbGVtZW50KHMscCl7bGV0IHc9bmV3IGJvKHMscCk7cmV0dXJuIGxyKCJkZWJ1ZyIpJiZpbyhgW2NyZWF0ZUVsZW1lbnRdKCR7dGhpcy5pZH0sJHt3LnR5cGV9LCR7dy5yZWZ9KSAoJHtKU09OLnN0cmluZ2lmeSh3LnRvSlNPTighMCkpfSkuYCksd31jcmVhdGVDb21tZW50KHMpe3JldHVybiBuZXcgTGwocyl9Y3JlYXRlVGV4dChzKXtyZXR1cm4gbmV3IG9mKHMpfWZpcmVFdmVudChzLHAsdyxOLEUpe2lmKCFzKXJldHVybjt3PXd8fHt9LHcudHlwZT13LnR5cGV8fHAsdy50YXJnZXQ9cyx3LmN1cnJlbnRUYXJnZXQ9cyx3LnRpbWVzdGFtcD1EYXRlLm5vdygpLE4mJnMxKHMsTik7bGV0IGg9ITAsXz10aGlzLmdldFJlZigiX3Jvb3QiKTtpZihfJiZfLmF0dHIpe2xldCBJPV8uYXR0ci5idWJibGU7aD1JPT09InRydWUifHxJPT09ITB8fGgmJkk9PT12b2lkIDB9cmV0dXJuIHc9QW0odykscy5maXJlRXZlbnQocCx3LGgsRSl9ZGVzdHJveSgpe2xyKCJkZWJ1ZyIpJiZpbyhgW2Rlc3Ryb3ldKCR7dGhpcy5pZH0sZG9jdW1lbnQpIERlc3Ryb3kgZG9jdW1lbnQgKGlkOiAiJHt0aGlzLmlkfSIsIFVSTDogIiR7dGhpcy5VUkx9IilgKSx0aGlzLnRhc2tDZW50ZXIuZGVzdHJveUNhbGxiYWNrKCksZGVsZXRlIHRoaXMubGlzdGVuZXIsZGVsZXRlIHRoaXMubm9kZU1hcCxkZWxldGUgdGhpcy50YXNrQ2VudGVyLEx2KHRoaXMuaWQpfX07Y2EuaGFuZGxlcj1udWxsO3ZhciBUbT17SW5wdXRFbGVtZW50RGl2OiI8V2hpdGVTcGFjZT58PExpbmVUZXJtaW5hdG9yPnw8UmVzZXJ2ZWRXb3JkPnw8SWRlbnRpZmllcj58PE51bWVyaWNMaXRlcmFsPnw8UHVuY3R1YXRvcj58PFN0cmluZ0xpdGVyYWw+IixJbnB1dEVsZW1lbnRSZWdFeHA6IjxXaGl0ZVNwYWNlPnw8TGluZVRlcm1pbmF0b3I+fDxSZXNlcnZlZFdvcmQ+fDxJZGVudGlmaWVyPnw8TnVtZXJpY0xpdGVyYWw+fDxQdW5jdHVhdG9yPnw8U3RyaW5nTGl0ZXJhbD4iLFJlc2VydmVkV29yZDoiPEtleXdvcmQ+fDxOdWxsTGl0ZXJhbD58PEJvb2xlYW5MaXRlcmFsPiIsV2hpdGVTcGFjZTovW1x0XHZcZlx1MDAyMFx1MDBBMFx1MTY4MFx1MTgwRVx1MjAwMC1cdTIwMEFcdTIwMkZcdTIwNWZcdTMwMDBcdUZFRkZdLyxMaW5lVGVybWluYXRvcjovW1xuXHJcdTIwMjhcdTIwMjldLyxLZXl3b3JkOi9uZXcoPyFbXyRhLXpBLVowLTldKXx2b2lkKD8hW18kYS16QS1aMC05XSl8ZGVsZXRlKD8hW18kYS16QS1aMC05XSl8aW4oPyFbXyRhLXpBLVowLTldKXxpbnN0YW5jZW9mKD8hW18kYS16QS1aMC05XSl8dHlwZW9mKD8hW18kYS16QS1aMC05XSkvLE51bGxMaXRlcmFsOi9udWxsKD8hW18kYS16QS1aMC05XSkvLEJvb2xlYW5MaXRlcmFsOi8oPzp0cnVlfGZhbHNlKSg/IVtfJGEtekEtWjAtOV0pLyxJZGVudGlmaWVyOi9bXyRhLXpBLVpdW18kYS16QS1aMC05XSovLFB1bmN0dWF0b3I6L1wvfD0+fFwqXCp8Pj4+PXw+Pj18PDw9fD09PXwhPT18Pj4+fDw8fCU9fFwqPXwtPXxcKz18PD18Pj18PT18IT18XF49fFx8PXxcfFx8fCYmfCY9fD4+fFwrXCt8LS18XDp8fXxcKnwmfFx8fFxefCF8fnwtfFwrfFw/fCV8PXw+fDx8LHw7fFwuKD8hWzAtOV0pfFxdfFxbfFwpfFwofHsvLERpdlB1bmN0dWF0b3I6L1wvPXxcLy8sTnVtZXJpY0xpdGVyYWw6Lyg/OjBbeFhdWzAtOWEtZkEtRl0qfFwuWzAtOV0rfCg/OlsxLTldK1swLTldKnwwKSg/OlwuWzAtOV0qfFwuKT8pKD86W2VFXVsrLV17MCwxfVswLTldKyk/KD8hW18kYS16QS1aMC05XSkvLFN0cmluZ0xpdGVyYWw6LyIoPzpbXiJcblxcXHJcdTIwMjhcdTIwMjldfFxcKD86WyciXFxiZm5ydHZcblxyXHUyMDI4XHUyMDI5XXxcclxuKXxcXHhbMC05YS1mQS1GXXsyfXxcXHVbMC05YS1mQS1GXXs0fXxcXFteMC05dXgnIlxcYmZucnR2XG5cXFxyXHUyMDI4XHUyMDI5XSkqInwnKD86W14nXG5cXFxyXHUyMDI4XHUyMDI5XXxcXCg/OlsnIlxcYmZucnR2XG5cclx1MjAyOFx1MjAyOV18XHJcbil8XFx4WzAtOWEtZkEtRl17Mn18XFx1WzAtOWEtZkEtRl17NH18XFxbXjAtOXV4JyJcXGJmbnJ0dlxuXFxcclx1MjAyOFx1MjAyOV0pKicvLFJlZ3VsYXJFeHByZXNzaW9uTGl0ZXJhbDovXC8oPzpcWyg/OlxcW1xzXFNdfFteXF1dKSpcXXxbXipcL1xcXG5cclx1MjAyOFx1MjAyOV18XFxbXlxuXHJcdTIwMjhcdTIwMjldKSg/OlxbKD86XFxbXHNcU118W15cXV0pKlxdfFteXC9cXFxuXHJcdTIwMjhcdTIwMjldfFxcW15cblxyXHUyMDI4XHUyMDI5XSkqXC9bMC05YS16QS1aXSovfTtmdW5jdGlvbiBPbShmLHMscCl7dmFyIHc9W3NdO2Z1bmN0aW9uIE4oaCl7dmFyIF89bmV3IFJlZ0V4cDtyZXR1cm4gXy5jb21waWxlKGgucmVwbGFjZSgvPChbXj5dKyk+L2csZnVuY3Rpb24oSSxTZSl7cmV0dXJuIGZbU2VdPyh3LnB1c2goU2UpLGZbU2VdaW5zdGFuY2VvZiBSZWdFeHA/IigiK2ZbU2VdLnNvdXJjZSsiKSI6IigiK04oZltTZV0pLnNvdXJjZSsiKSIpOiIifSkscCksX312YXIgRT1OKGZbc10pO3RoaXMuZXhlYz1mdW5jdGlvbihoKXt2YXIgXz1FLmV4ZWMoaCk7aWYoXz09bnVsbClyZXR1cm4gbnVsbDtmb3IodmFyIEk9bmV3IFN0cmluZyhfWzBdKSxTZT0wO1NlPHcubGVuZ3RoO1NlKyspX1tTZV0mJihJW3dbU2VdXT1fW1NlXSk7cmV0dXJuIEl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJsYXN0SW5kZXgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRS5sYXN0SW5kZXh9LHNldDpmdW5jdGlvbihoKXtFLmxhc3RJbmRleD1ofX0pfWZ1bmN0aW9uIGwxKCl7dmFyIGY9bmV3IE9tKFRtLCJJbnB1dEVsZW1lbnREaXYiLCJnIikscz1uZXcgT20oVG0sIklucHV0RWxlbWVudFJlZ0V4cCIsImciKSxwO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJzb3VyY2UiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcH0sc2V0OmZ1bmN0aW9uKHcpe3A9dyxmLmxhc3RJbmRleD0wLHMubGFzdEluZGV4PTB9fSksdGhpcy5yZXNldD1mdW5jdGlvbigpe2YubGFzdEluZGV4PTAscy5sYXN0SW5kZXg9MH0sdGhpcy5nZXROZXh0VG9rZW49ZnVuY3Rpb24odyl7dmFyIE49Zi5sYXN0SW5kZXgsRTt3P0U9ZjpFPXM7dmFyIGg9RS5leGVjKHApO2lmKGgmJkUubGFzdEluZGV4LU4+aC5sZW5ndGgpdGhyb3cgbmV3IFN5bnRheEVycm9yKCJVbmV4cGVjdGVkIHRva2VuIElMTEVHQUwiKTtyZXR1cm4gZi5sYXN0SW5kZXg9RS5sYXN0SW5kZXgscy5sYXN0SW5kZXg9RS5sYXN0SW5kZXgsaH19dmFyIFBtPXtJZGVudGlmaWVyTmFtZTpbWyJJZGVudGlmaWVyIl1dLExpdGVyYWw6W1siTnVsbExpdGVyYWwiXSxbIkJvb2xlYW5MaXRlcmFsIl0sWyJOdW1lcmljTGl0ZXJhbCJdLFsiU3RyaW5nTGl0ZXJhbCJdLFsiUmVndWxhckV4cHJlc3Npb25MaXRlcmFsIl1dLFByaW1hcnlFeHByZXNzaW9uOltbIklkZW50aWZpZXIiXSxbIkxpdGVyYWwiXSxbIigiLCJFeHByZXNzaW9uIiwiKSJdXSxDYWxsRXhwcmVzc2lvbjpbWyJQcmltYXJ5RXhwcmVzc2lvbiIsIkFyZ3VtZW50cyJdLFsiQ2FsbEV4cHJlc3Npb24iLCJBcmd1bWVudHMiXV0sQXJndW1lbnRzOltbIigiLCIpIl0sWyIoIiwiQXJndW1lbnRMaXN0IiwiKSJdXSxBcmd1bWVudExpc3Q6W1siQ29uZGl0aW9uYWxFeHByZXNzaW9uIl0sWyJBcmd1bWVudExpc3QiLCIsIiwiQ29uZGl0aW9uYWxFeHByZXNzaW9uIl1dLExlZnRIYW5kU2lkZUV4cHJlc3Npb246W1siUHJpbWFyeUV4cHJlc3Npb24iXSxbIkNhbGxFeHByZXNzaW9uIl1dLFVuYXJ5RXhwcmVzc2lvbjpbWyJMZWZ0SGFuZFNpZGVFeHByZXNzaW9uIl0sWyJ2b2lkIiwiVW5hcnlFeHByZXNzaW9uIl0sWyIrIiwiVW5hcnlFeHByZXNzaW9uIl0sWyItIiwiVW5hcnlFeHByZXNzaW9uIl0sWyJ+IiwiVW5hcnlFeHByZXNzaW9uIl0sWyIhIiwiVW5hcnlFeHByZXNzaW9uIl1dLEV4cG9uZW50aWF0aW9uRXhwcmVzc2lvbjpbWyJVbmFyeUV4cHJlc3Npb24iXSxbIkV4cG9uZW50aWF0aW9uRXhwcmVzc2lvbiIsIioqIiwiVW5hcnlFeHByZXNzaW9uIl1dLE11bHRpcGxpY2F0aXZlRXhwcmVzc2lvbjpbWyJNdWx0aXBsaWNhdGl2ZUV4cHJlc3Npb24iLCIvIiwiRXhwb25lbnRpYXRpb25FeHByZXNzaW9uIl0sWyJFeHBvbmVudGlhdGlvbkV4cHJlc3Npb24iXSxbIk11bHRpcGxpY2F0aXZlRXhwcmVzc2lvbiIsIioiLCJFeHBvbmVudGlhdGlvbkV4cHJlc3Npb24iXSxbIk11bHRpcGxpY2F0aXZlRXhwcmVzc2lvbiIsIiUiLCJFeHBvbmVudGlhdGlvbkV4cHJlc3Npb24iXV0sQWRkaXRpdmVFeHByZXNzaW9uOltbIk11bHRpcGxpY2F0aXZlRXhwcmVzc2lvbiJdLFsiQWRkaXRpdmVFeHByZXNzaW9uIiwiKyIsIk11bHRpcGxpY2F0aXZlRXhwcmVzc2lvbiJdLFsiQWRkaXRpdmVFeHByZXNzaW9uIiwiLSIsIk11bHRpcGxpY2F0aXZlRXhwcmVzc2lvbiJdXSxTaGlmdEV4cHJlc3Npb246W1siQWRkaXRpdmVFeHByZXNzaW9uIl0sWyJTaGlmdEV4cHJlc3Npb24iLCI8PCIsIkFkZGl0aXZlRXhwcmVzc2lvbiJdLFsiU2hpZnRFeHByZXNzaW9uIiwiPj4iLCJBZGRpdGl2ZUV4cHJlc3Npb24iXSxbIlNoaWZ0RXhwcmVzc2lvbiIsIj4+PiIsIkFkZGl0aXZlRXhwcmVzc2lvbiJdXSxSZWxhdGlvbmFsRXhwcmVzc2lvbjpbWyJTaGlmdEV4cHJlc3Npb24iXSxbIlJlbGF0aW9uYWxFeHByZXNzaW9uIiwiPCIsIlNoaWZ0RXhwcmVzc2lvbiJdLFsiUmVsYXRpb25hbEV4cHJlc3Npb24iLCI+IiwiU2hpZnRFeHByZXNzaW9uIl0sWyJSZWxhdGlvbmFsRXhwcmVzc2lvbiIsIjw9IiwiU2hpZnRFeHByZXNzaW9uIl0sWyJSZWxhdGlvbmFsRXhwcmVzc2lvbiIsIj49IiwiU2hpZnRFeHByZXNzaW9uIl0sWyJSZWxhdGlvbmFsRXhwcmVzc2lvbiIsImluc3RhbmNlb2YiLCJTaGlmdEV4cHJlc3Npb24iXSxbIlJlbGF0aW9uYWxFeHByZXNzaW9uIiwiaW4iLCJTaGlmdEV4cHJlc3Npb24iXV0sRXF1YWxpdHlFeHByZXNzaW9uOltbIlJlbGF0aW9uYWxFeHByZXNzaW9uIl0sWyJFcXVhbGl0eUV4cHJlc3Npb24iLCI9PSIsIlJlbGF0aW9uYWxFeHByZXNzaW9uIl0sWyJFcXVhbGl0eUV4cHJlc3Npb24iLCIhPSIsIlJlbGF0aW9uYWxFeHByZXNzaW9uIl0sWyJFcXVhbGl0eUV4cHJlc3Npb24iLCI9PT0iLCJSZWxhdGlvbmFsRXhwcmVzc2lvbiJdLFsiRXF1YWxpdHlFeHByZXNzaW9uIiwiIT09IiwiUmVsYXRpb25hbEV4cHJlc3Npb24iXV0sQml0d2lzZUFOREV4cHJlc3Npb246W1siRXF1YWxpdHlFeHByZXNzaW9uIl0sWyJCaXR3aXNlQU5ERXhwcmVzc2lvbiIsIiYiLCJFcXVhbGl0eUV4cHJlc3Npb24iXV0sQml0d2lzZVhPUkV4cHJlc3Npb246W1siQml0d2lzZUFOREV4cHJlc3Npb24iXSxbIkJpdHdpc2VYT1JFeHByZXNzaW9uIiwiXiIsIkJpdHdpc2VBTkRFeHByZXNzaW9uIl1dLEJpdHdpc2VPUkV4cHJlc3Npb246W1siQml0d2lzZVhPUkV4cHJlc3Npb24iXSxbIkJpdHdpc2VPUkV4cHJlc3Npb24iLCJ8IiwiQml0d2lzZVhPUkV4cHJlc3Npb24iXV0sTG9naWNhbEFOREV4cHJlc3Npb246W1siQml0d2lzZU9SRXhwcmVzc2lvbiJdLFsiTG9naWNhbEFOREV4cHJlc3Npb24iLCImJiIsIkJpdHdpc2VPUkV4cHJlc3Npb24iXV0sTG9naWNhbE9SRXhwcmVzc2lvbjpbWyJMb2dpY2FsQU5ERXhwcmVzc2lvbiJdLFsiTG9naWNhbE9SRXhwcmVzc2lvbiIsInx8IiwiTG9naWNhbEFOREV4cHJlc3Npb24iXV0sQ29uZGl0aW9uYWxFeHByZXNzaW9uOltbIkxvZ2ljYWxPUkV4cHJlc3Npb24iXSxbIkxvZ2ljYWxPUkV4cHJlc3Npb24iLCI/IiwiTG9naWNhbE9SRXhwcmVzc2lvbiIsIjoiLCJMb2dpY2FsT1JFeHByZXNzaW9uIl1dLEV4cHJlc3Npb246W1siQ29uZGl0aW9uYWxFeHByZXNzaW9uIl0sWyJFeHByZXNzaW9uIiwiLCIsIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiJdXSxQcm9ncmFtOltbIkV4cHJlc3Npb24iXV19O2Z1bmN0aW9uIHJ1KGYscyl7dGhpcy5uYW1lPWYsdGhpcy50b2tlbj1zLHRoaXMuY2hpbGROb2Rlcz1bXSx0aGlzLnRvU3RyaW5nPWZ1bmN0aW9uKHApe2lmKHB8fChwPSIiKSx0aGlzLmNoaWxkTm9kZXMubGVuZ3RoPT0xKXJldHVybiB0aGlzLmNoaWxkTm9kZXNbMF0udG9TdHJpbmcocCk7Zm9yKHZhciB3PXArdGhpcy5uYW1lKyh0aGlzLnRva2VuIT1udWxsJiZ0aGlzLm5hbWUhPXRoaXMudG9rZW4/IjoiK3RoaXMudG9rZW46IiIpK2AKYCxOPTA7Tjx0aGlzLmNoaWxkTm9kZXMubGVuZ3RoO04rKyl3Kz10aGlzLmNoaWxkTm9kZXNbTl0udG9TdHJpbmcocCsiICAgICIpO3JldHVybiB3fX1mdW5jdGlvbiBjMSgpe3ZhciBmLHM9e1Byb2dyYW06IiQifSxwPXt9O2Z1bmN0aW9uIHcoXyl7cFtKU09OLnN0cmluZ2lmeShfKV09Xztmb3IodmFyIEk9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoXyk7SS5sZW5ndGg7KXt2YXIgU2U9SS5zaGlmdCgpOyFQbVtTZV18fFBtW1NlXS5mb3JFYWNoKGZ1bmN0aW9uKFR0KXtfW1R0WzBdXXx8SS5wdXNoKFR0WzBdKTt2YXIgQnQ9XyxSPW51bGw7VHQuZm9yRWFjaChmdW5jdGlvbihBdCl7QnRbQXRdfHwoQnRbQXRdPXt9KSxSPUJ0LEJ0PUJ0W0F0XX0pLF9bU2VdLiRkaXYmJihCdC4kZGl2PSEwKSxCdC4kcmVkdWNlPVNlLEJ0LiRjb3VudD1UdC5sZW5ndGh9KX1mb3IodmFyIGZ0IGluIF8pdHlwZW9mIF9bZnRdIT0ib2JqZWN0Inx8ZnQuY2hhckF0KDApPT0iJCJ8fF9bZnRdLiRjbG9zdXJlfHwocFtKU09OLnN0cmluZ2lmeShfW2Z0XSldP19bZnRdPXBbSlNPTi5zdHJpbmdpZnkoX1tmdF0pXTp3KF9bZnRdKSk7Xy4kY2xvc3VyZT0hMH13KHMpO3ZhciBOPVtdLEU9W3NdLGg9czt0aGlzLmluc2VydFN5bWJvbD1mdW5jdGlvbihJLFNlKXtmb3IoOyFoW0kubmFtZV0mJmguJHJlZHVjZTspe2Zvcih2YXIgZnQ9aC4kY291bnQsVHQ9bmV3IHJ1KGguJHJlZHVjZSk7ZnQtLTspVHQuY2hpbGROb2Rlcy5wdXNoKE4ucG9wKCkpLEUucG9wKCk7aD1FW0UubGVuZ3RoLTFdLHRoaXMuaW5zZXJ0U3ltYm9sKFR0KX1pZihoPWhbSS5uYW1lXSxOLnB1c2goSSksRS5wdXNoKGgpLCFoKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gaC4kZGl2fSx0aGlzLnJlc2V0PWZ1bmN0aW9uKCl7aD1zLE49W10sRT1bc119LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJncmFtbWFyVHJlZSIse2dldDpmdW5jdGlvbigpe3RyeXtmb3IoO2guJHJlZHVjZTspe2Zvcih2YXIgXz1oLiRjb3VudCxJPW5ldyBydShoLiRyZWR1Y2UpO18tLTspSS5jaGlsZE5vZGVzLnB1c2goTi5wb3AoKSksRS5wb3AoKTtoPUVbRS5sZW5ndGgtMV0sdGhpcy5pbnNlcnRTeW1ib2woSSl9aWYoTi5sZW5ndGg+MCYmaFsiOyJdKXJldHVybiB0aGlzLmluc2VydFN5bWJvbChuZXcgcnUoIjsiLCI7IikpLHRoaXMuZ3JhbW1hclRyZWU7aWYoTi5sZW5ndGghPTF8fE5bMF0ubmFtZSE9IlByb2dyYW0iKXRocm93IG5ldyBFcnJvcn1jYXRjaChTZSl7dGhyb3cgbmV3IFN5bnRheEVycm9yKCJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dCIpfXJldHVybiBOWzBdfX0pfWZ1bmN0aW9uIHUxKCl7dGhpcy5sZXhpY2FsUGFyc2VyPW5ldyBsMSx0aGlzLnN5bnRhY3RpY2FsUGFyc2VyPW5ldyBjMTt2YXIgZj1bIk51bGxMaXRlcmFsIiwiQm9vbGVhbkxpdGVyYWwiLCJOdW1lcmljTGl0ZXJhbCIsIlN0cmluZ0xpdGVyYWwiLCJSZWd1bGFyRXhwcmVzc2lvbkxpdGVyYWwiLCJJZGVudGlmaWVyIiwiKioiLCI9PiIsInsiLCJ9IiwiKCIsIikiLCJbIiwiXSIsIi4iLCI7IiwiLCIsIjwiLCI+IiwiPD0iLCI+PSIsIj09IiwiIT0iLCI9PT0iLCIhPT0iLCIrIiwiLSIsIioiLCIlIiwiKysiLCItLSIsIjw8IiwiPj4iLCI+Pj4iLCImIiwifCIsIl4iLCIhIiwifiIsIiYmIiwifHwiLCI/IiwiOiIsIj0iLCIrPSIsIi09IiwiKj0iLCIlPSIsIjw8PSIsIj4+PSIsIj4+Pj0iLCImPSIsInw9IiwiXj0iLCIvIiwiLz0iLCJpbnN0YW5jZW9mIiwidHlwZW9mIiwibmV3Iiwidm9pZCIsImRlYnVnZ2VyIiwidGhpcyIsImRlbGV0ZSIsImluIl0scz17fTtmLmZvckVhY2goZnVuY3Rpb24ocCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHMscCx7fSl9KSx0aGlzLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5sZXhpY2FsUGFyc2VyLnJlc2V0KCksdGhpcy5zeW50YWN0aWNhbFBhcnNlci5yZXNldCgpfSx0aGlzLnBhcnNlPWZ1bmN0aW9uKHAsdyl7dmFyIE4sRT0hMTt0aGlzLmxleGljYWxQYXJzZXIuc291cmNlPXA7Zm9yKHZhciBoPSExO049dGhpcy5sZXhpY2FsUGFyc2VyLmdldE5leHRUb2tlbihoKTspe3cmJncoTik7dHJ5e2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE4pLnNvbWUoXz0+cy5oYXNPd25Qcm9wZXJ0eShfKT8oaD10aGlzLnN5bnRhY3RpY2FsUGFyc2VyLmluc2VydFN5bWJvbChuZXcgcnUoXyxOKSxFKSxFPSExLCEwKTohMSkpY29udGludWU7KE4uS2V5d29yZHx8Ti5QdW5jdHVhdG9yfHxOLkRpdlB1bmN0dWF0b3IpJiZzLmhhc093blByb3BlcnR5KE4udG9TdHJpbmcoKSkmJihoPXRoaXMuc3ludGFjdGljYWxQYXJzZXIuaW5zZXJ0U3ltYm9sKG5ldyBydShOLnRvU3RyaW5nKCksTiksRSkpfWNhdGNoKF8pe3Rocm93IG5ldyBTeW50YXhFcnJvcigiVW5leHBlY3RlZCB0b2tlbiAiK04pfX1yZXR1cm4gdGhpcy5zeW50YWN0aWNhbFBhcnNlci5ncmFtbWFyVHJlZX19dmFyIE5tPW5ldyB1MTtmdW5jdGlvbiBmMShmKXtObS5yZXNldCgpLHRoaXMudHJlZT1ObS5wYXJzZShmKSx0aGlzLnBhdGhzPVtdO3ZhciBzPU9iamVjdC5jcmVhdGUobnVsbCkscD10aGlzLHc9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLmlzU2ltcGxlLHRoaXMuaXNDb25zdCxFKHRoaXMudHJlZSksTih0aGlzLnRyZWUpLHRoaXMucGF0aHMubGVuZ3RoPT09MCYmKHRoaXMuaXNDb25zdD0hMCksdGhpcy5zZXR0ZXI9ZnVuY3Rpb24oSSl7Zm9yKHZhciBTZT1zLGZ0PTA7ZnQ8SS5sZW5ndGgtMTtmdCsrKVNlW0lbZnRdXXx8KFNlW0lbZnRdXT1PYmplY3QuY3JlYXRlKG51bGwpKSxTZT1TZVtJW2Z0XV07cmV0dXJue2lzQ29tcGxldGVkOmZ1bmN0aW9uKCl7Zm9yKHZhciBUdCBpbiB3KWlmKCF3W1R0XSlyZXR1cm4hMTtyZXR1cm4hMH0sc2V0OmZ1bmN0aW9uKFR0KXtpZih3W0kuam9pbigiLiIpXXx8KHdbSS5qb2luKCIuIildPSEwKSxTZVtJW2Z0XV09VHQsdGhpcy5pc0NvbXBsZXRlZCgpKXJldHVybiBwLmV4ZWMoKX19fSx0aGlzLnZhbHVlT2Y9dGhpcy5leGVjPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBmdW5jdGlvbigpe3JldHVybigwLGV2YWwpKGYpfS5jYWxsKHMpfWNhdGNoKEkpe319O2Z1bmN0aW9uIE4oSSl7Zm9yKHZhciBTZT1JO1NlLmNoaWxkTm9kZXMubGVuZ3RoPD0xJiZTZS5uYW1lIT09Ik1lbWJlckV4cHJlc3Npb24iOylTZT1TZS5jaGlsZE5vZGVzWzBdO1NlLm5hbWU9PT0iTWVtYmVyRXhwcmVzc2lvbiI/cC5pc1NpbXBsZT0hMDpwLmlzU2ltcGxlPSExfWZ1bmN0aW9uIEUoSSl7aWYoSS5uYW1lPT09IkNhbGxFeHByZXNzaW9uIiYmSS5jaGlsZE5vZGVzW0kuY2hpbGROb2Rlcy5sZW5ndGgtMV0ubmFtZSE9PSJDYWxsRXhwcmVzc2lvbiIpe3ZhciBTZT1oKEkuY2hpbGROb2Rlc1sxXSk7RShJLmNoaWxkTm9kZXNbMF0pfWVsc2UgaWYoSS5uYW1lPT09Ik5ld0V4cHJlc3Npb24iJiZJLmNoaWxkTm9kZXMubGVuZ3RoPT09MSl2YXIgU2U9aChJLmNoaWxkTm9kZXNbMF0pO2Vsc2UgaWYoSS5uYW1lPT09Ik1lbWJlckV4cHJlc3Npb24iJiZJLmNoaWxkTm9kZXMubGVuZ3RoPT09MSl2YXIgU2U9aChJKTtlbHNlIGZvcih2YXIgZnQ9MDtmdDxJLmNoaWxkTm9kZXMubGVuZ3RoO2Z0KyspRShJLmNoaWxkTm9kZXNbZnRdKX1mdW5jdGlvbiBoKEkpe2lmKEkuY2hpbGROb2Rlc1swXS5uYW1lPT09IklkZW50aWZpZXJOYW1lIil7dmFyIFNlPWgoSS5jaGlsZE5vZGVzWzJdKTtyZXR1cm4gU2UmJihTZT1TZS5jb25jYXQoSS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF0udG9rZW4udG9TdHJpbmcoKSkpLF8oU2UpLFNlfWVsc2UgaWYoSS5jaGlsZE5vZGVzWzBdLm5hbWU9PT0iUHJpbWFyeUV4cHJlc3Npb24iKWlmKEkuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzBdLm5hbWU9PT0iSWRlbnRpZmllciIpe3ZhciBTZT1bSS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF0udG9rZW4udG9TdHJpbmcoKV07cmV0dXJuIF8oU2UpLFNlfWVsc2UgcmV0dXJuIG51bGw7ZWxzZXtpZihJLmNoaWxkTm9kZXNbMF0ubmFtZT09PSJdIilyZXR1cm4gaChJLmNoaWxkTm9kZXNbM10pLEUoSS5jaGlsZE5vZGVzWzFdKSxudWxsO2lmKEkuY2hpbGROb2Rlc1swXS5uYW1lPT09IkFyZ3VtZW50cyIpcmV0dXJuIEUoSS5jaGlsZE5vZGVzWzBdKSxFKEkuY2hpbGROb2Rlc1sxXSksbnVsbDtmb3IodmFyIGZ0PTA7ZnQ8SS5jaGlsZE5vZGVzLmxlbmd0aDtmdCsrKUUoSS5jaGlsZE5vZGVzW2Z0XSl9fWZ1bmN0aW9uIF8oSSl7Zm9yKHZhciBTZT1zLGZ0PTA7ZnQ8SS5sZW5ndGgtMTtmdCsrKVNlW0lbZnRdXXx8KFNlW0lbZnRdXT1PYmplY3QuY3JlYXRlKG51bGwpKSxTZT1TZVtJW2Z0XV07cC5wYXRocy5wdXNoKEkpLHdbSS5qb2luKCIuIildPSExfX1mdW5jdGlvbiBNbChmKXt2YXIgcz1mLmNoaWxkTm9kZXMuc2xpY2UoKS5yZXZlcnNlKCkscD1zLmZpbHRlcihJPT4hSS50b2tlbnx8IUkudG9rZW4uUHVuY3R1YXRvcik7aWYoZi5uYW1lPT09IlVuYXJ5RXhwcmVzc2lvbiImJnMubGVuZ3RoPT09MiYmc1swXS5uYW1lPT09Ii0iJiZwLmxlbmd0aD09PTEpe3ZhciB3PU1sKHBbMF0pO3JldHVybiB3LnZhbHVlPS13LnZhbHVlLHd9aWYoZi5uYW1lPT09IkFyZ3VtZW50cyIpe2Zvcih2YXIgTj1bXSxFPXBbMF07RTspRS5jaGlsZE5vZGVzLmxlbmd0aD09PTMmJihOLnVuc2hpZnQoRS5jaGlsZE5vZGVzWzBdKSxFPUUuY2hpbGROb2Rlc1syXSksRS5jaGlsZE5vZGVzLmxlbmd0aD09PTEmJihOLnVuc2hpZnQoRS5jaGlsZE5vZGVzWzBdKSxFPW51bGwpO3JldHVybnt0eXBlOiJBcmd1bWVudHMiLGNoaWxkcmVuOk4ubWFwKEk9Pk1sKEkpKX19aWYocCYmcC5sZW5ndGg9PT0xKXt2YXIgdz1NbChwWzBdKTtyZXR1cm4gd31pZihmLnRva2VuJiZbIk51bGxMaXRlcmFsIiwiQm9vbGVhbkxpdGVyYWwiLCJOdW1lcmljTGl0ZXJhbCIsIlN0cmluZ0xpdGVyYWwiLCJJZGVudGlmaWVyIl0uc29tZShJPT5mLnRva2VuW0ldKSl7dmFyIGg9T2JqZWN0LmtleXMoZi50b2tlbikuZmlsdGVyKEk9PkkubWF0Y2goL0xpdGVyYWwvKXx8SS5tYXRjaCgvSWRlbnRpZmllci8pKVswXSxfPXtOdWxsTGl0ZXJhbDpudWxsLEJvb2xlYW5MaXRlcmFsOkJvb2xlYW4oZi50b2tlbiksTnVtZXJpY0xpdGVyYWw6TnVtYmVyKGYudG9rZW4pLFN0cmluZ0xpdGVyYWw6Zi50b2tlbixJZGVudGlmaWVyOmYudG9rZW59W2hdO3JldHVybnt0eXBlOmgsdmFsdWU6X319cmV0dXJuIGYubmFtZT09PSJDYWxsRXhwcmVzc2lvbiI/e3R5cGU6IkNhbGxFeHByZXNzaW9uIixjaGlsZHJlbjpbTWwoc1swXSksTWwoc1sxXSldfTp7dHlwZTpzLmZpbHRlcihJPT5JLnRva2VuJiZJLnRva2VuLlB1bmN0dWF0b3IpWzBdLm5hbWUsY2hpbGRyZW46cy5maWx0ZXIoST0+IUkudG9rZW58fCFJLnRva2VuLlB1bmN0dWF0b3IpLm1hcChJPT5NbChJKSl9fWZ1bmN0aW9uIEltKGYpe3ZhciBzPW5ldyBmMShmKTtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoTWwocy50cmVlKSxudWxsKX1mdW5jdGlvbiBkMShmLHMpe3JldHVybiBzPT09ImJpbmQiJiYoZj09PSJiaW5kaW5neCJ8fGY9PT0iYmluZGluZyIpfWZ1bmN0aW9uIGttKGYpe2lmKCFmKXJldHVybjt0cnl7Zj1KU09OLnBhcnNlKGYpfWNhdGNoKHApe31sZXQgcz17fTtpZihpaShmKT9zLm9yaWdpbj1mOmYmJihzLm9yaWdpbj1mLm9yaWdpbixzLnRyYW5zZm9ybWVkPWYudHJhbnNmb3JtZWQpLCEoIXMudHJhbnNmb3JtZWQmJiFzLm9yaWdpbikpcmV0dXJuIHMudHJhbnNmb3JtZWQ9cy50cmFuc2Zvcm1lZHx8SW0ocy5vcmlnaW4pLHN9ZnVuY3Rpb24gaDEoZil7cmV0dXJuIGYmJihmLmV4aXRFeHByZXNzaW9uPWttKGYuZXhpdEV4cHJlc3Npb24pLGYucHJvcHMmJmYucHJvcHMuZm9yRWFjaChzPT57cy5leHByZXNzaW9uPWttKHMuZXhwcmVzc2lvbil9KSxmKX1mdW5jdGlvbiBnMShmKXtyZXR1cm4gZnVuY3Rpb24ocz17fSl7aWYoam4oZikpcmV0dXJuIGYoe3N0YXRlOnMuc3RhdGU9PT0iZW5kIj8iZXhpdCI6cy5zdGF0ZSx0OnMudCE9PXZvaWQgMD9zLnQ6cy5kZWx0YVR9KX19ZnVuY3Rpb24gUm0oZixzLHApe3JldHVybiBwJiYoZDEoZixzKT9mdW5jdGlvbih3LE49ZnVuY3Rpb24oKXt9KXtpZighdyl0aHJvdyBuZXcgRXJyb3IoInNob3VsZCBwYXNzIG9wdGlvbnMgZm9yIGJpbmRpbmciKTtyZXR1cm4gaDEodykscCh3LHcmJncuZXZlbnRUeXBlPT09InRpbWluZyI/ZzEoTik6Til9OnApfWZ1bmN0aW9uIHAxKGYscyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGYsIltbQ3VycmVudEluc3RhbmNlSWRdXSIse3ZhbHVlOnN9KX1mdW5jdGlvbiB4bShmKXtyZXR1cm4gZlsiW1tDdXJyZW50SW5zdGFuY2VJZF1dIl19ZnVuY3Rpb24gdjEoZixzLHApe2xldCB3PUpyKGYpO3JldHVybiF3fHwham4ody5zZW5kKT8oY29uc29sZS5lcnJvcihgW0pTIEZyYW1ld29ya10gRmFpbGVkIHRvIGZpbmQgdGFza0NlbnRlciAoJHtmfSkuYCksbnVsbCk6KC4uLk4pPT53LnNlbmQoIm1vZHVsZSIse21vZHVsZTpzLG1ldGhvZDpwfSxOKX1mdW5jdGlvbiBtMShmLHMscCx3KXtsZXQgTj1KcihmKTtyZXR1cm4hTnx8IWpuKE4uc2VuZCk/KGNvbnNvbGUuZXJyb3IoYFtKUyBGcmFtZXdvcmtdIEZhaWxlZCB0byBmaW5kIHRhc2tDZW50ZXIgKCR7Zn0pLmApLG51bGwpOmpuKHcpP0U9Pk4uc2VuZCgibW9kdWxlIix7bW9kdWxlOnMsbWV0aG9kOnB9LFtFXSk6KGNvbnNvbGUuZXJyb3IoYFtKUyBGcmFtZXdvcmtdICR7c30uJHtwfSBtdXN0IGJlIGFzc2lnbmVkIGFzIGEgZnVuY3Rpb24uYCksbnVsbCl9dmFyIGFmPWNsYXNze2NvbnN0cnVjdG9yKHMscCl7cDEodGhpcyxTdHJpbmcocykpLHRoaXMuY29uZmlnPXB8fHt9LHRoaXMuZG9jdW1lbnQ9bmV3IGNhKHMsdGhpcy5jb25maWcuYnVuZGxlVXJsKSx0aGlzLnJlcXVpcmVNb2R1bGU9dGhpcy5yZXF1aXJlTW9kdWxlLmJpbmQodGhpcyksdGhpcy5pbXBvcnRTY3JpcHQ9dGhpcy5pbXBvcnRTY3JpcHQuYmluZCh0aGlzKSx0aGlzLmlzUmVnaXN0ZXJlZE1vZHVsZT1lZix0aGlzLmlzUmVnaXN0ZXJlZENvbXBvbmVudD1tZH1yZXF1aXJlTW9kdWxlKHMpe2xldCBwPXhtKHRoaXMpO2lmKCEocCYmdGhpcy5kb2N1bWVudCYmdGhpcy5kb2N1bWVudC50YXNrQ2VudGVyKSl7Y29uc29sZS5lcnJvcihgW0pTIEZyYW1ld29ya10gRmFpbGVkIHRvIHJlcXVpcmVNb2R1bGUoIiR7c30iKSwgaW5zdGFuY2UgKCR7cH0pIGRvZXNuJ3QgZXhpc3QgYW55bW9yZS5gKTtyZXR1cm59aWYoIWVmKHMpKXtjb25zb2xlLndhcm4oYFtKUyBGcmFtZXdvcmtdIFx1NUY1M1x1NTI0RFx1OEZEMFx1ODg0Q1x1NzY4NFx1NTdGQVx1NUVBN1x1NEUwRFx1NTMwNVx1NTQyQlx1NTM5Rlx1NzUxRlx1NjNEMlx1NEVGNlske3N9XVx1RkYwQ1x1OEJGN1x1NTcyOG1hbmlmZXN0XHU0RTJEXHU5MTREXHU3RjZFXHU4QkU1XHU2M0QyXHU0RUY2XHVGRjBDXHU5MUNEXHU2NUIwXHU1MjM2XHU0RjVDXHU1MzA1XHU2MkVDXHU4QkU1XHU1MzlGXHU3NTFGXHU2M0QyXHU0RUY2XHU3Njg0XHU4MUVBXHU1QjlBXHU0RTQ5XHU4RkQwXHU4ODRDXHU1N0ZBXHU1RUE3YCk7cmV0dXJufWxldCB3PXt9LE49bm0ocyk7Zm9yKGxldCBFIGluIE4pT2JqZWN0LmRlZmluZVByb3BlcnR5KHcsRSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OigpPT5SbShzLEUsdjEocCxzLEUpKSxzZXQ6aD0+bTEocCxzLEUsaCl9KTtyZXR1cm4gd31zdXBwb3J0cyhzKXtpZighaWkocykpcmV0dXJuIG51bGw7bGV0IHA9cy5tYXRjaCgvXkAoXHcrKVwvKFtcdy1dKykoXC4oXHcrKSk/JC9pKTtpZihwKXtsZXQgdz1wWzFdLE49cFsyXSxFPXBbNF07c3dpdGNoKHcpe2Nhc2UibW9kdWxlIjpyZXR1cm4gZWYoTixFKTtjYXNlImNvbXBvbmVudCI6cmV0dXJuIG1kKE4pfX1yZXR1cm4gbnVsbH1pbXBvcnRTY3JpcHQocyxwPXt9KXtsZXQgdz14bSh0aGlzKSxOPUpyKHcpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihFLGgpe2lmKCFOfHwham4oTi5zZW5kKSlyZXR1cm4gaChuZXcgRXJyb3IoYFtKUyBGcmFtZXdvcmtdIEZhaWxlZCB0byBpbXBvcnQgc2NyaXB0ICIke3N9Iiwgbm8gdGFza0NlbnRlciAoJHt3fSkgbWF0Y2hlZC5gKSk7dHJ5e04uc2VuZCgibW9kdWxlIix7bW9kdWxlOiJzY3JpcHQiLG1ldGhvZDoiaW1wb3J0U2NyaXB0In0sW3MscF0se2NhbGxiYWNrOltfPT5FKF8pLF89PmgoXyldfSl9Y2F0Y2goXyl7aChfKX19KX19O2Z1bmN0aW9uIF8xKGYscyl7bGV0IHA9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gcC5zZXJ2aWNlPU9iamVjdC5jcmVhdGUobnVsbCksZWwuZm9yRWFjaCgoe25hbWU6dyxvcHRpb25zOk59KT0+e2xldCBFPU4uY3JlYXRlO2lmKEUpdHJ5e2xldCBoPUUoZixzKTtybyhwLnNlcnZpY2UsaCkscm8ocCxoLmluc3RhbmNlKX1jYXRjaChoKXtjb25zb2xlLmVycm9yKGBbSlMgUnVudGltZV0gRmFpbGVkIHRvIGNyZWF0ZSBzZXJ2aWNlICR7d30uYCl9fSksZGVsZXRlIHAuc2VydmljZS5pbnN0YW5jZSxxYShwLnNlcnZpY2UpLHB9dmFyIGIxPXt1aWQ6MH0seTE9SXYoZXUpLEUxPU52KGV1KTtmdW5jdGlvbiBCbShmLHMscCl7bGV0IHc9bmV3IGFmKGYscyksTj0iVnVlIixFPV8xKGYse3dlZXg6dyxudnVlOncsY29uZmlnOnMsY3JlYXRlZDpEYXRlLm5vdygpLGZyYW1ld29yazpOfSk7cWEoRSk7bGV0IGg9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gcm8oaCxQMSh3KSkscm8oaCxFLHtTaGFyZWRPYmplY3Q6YjEsd2VleDp3LG52dWU6dyxyZXF1aXJlTW9kdWxlOl89PncucmVxdWlyZU1vZHVsZShfKSxfX1dFRVhfQ0FMTF9KQVZBU0NSSVBUX186cGQsc2VydmljZXM6RX0pLGgucGx1cz1uZXcgaC5XZWV4UGx1cyh3KSxoLlZ1ZVNoYXJlZD1ldSxoLlVuaVNoYXJlZD15MSxoLlZ1ZVJlYWN0aXZpdHk9RTEsRW0oZixoKSxxYShoKSxofWZ1bmN0aW9uIFMxKGYscyxwPXt9KXtsZXQgdz0iVnVlIjtwPW5kKHApLHAuZW52PW5kKGdsb2JhbC5XWEVudmlyb25tZW50fHx7fSkscC5idW5kbGVUeXBlPXc7bGV0IE49Qm0oZixwKTt3MShzLE4pfWZ1bmN0aW9uIHcxKGYscyl7bGV0IHA9W10sdz1bXTtmb3IobGV0IGggaW4gcylwLnB1c2goaCksdy5wdXNoKHNbaF0pO2xldCBFPSIoZnVuY3Rpb24gKGdsb2JhbCkgeyAiK2AKZ2xvYmFsID0gKGZ1bmN0aW9uICgpIHsKICB2YXIgZwogIC8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlCiAgZyA9IChmdW5jdGlvbiAoKSB7CiAgICByZXR1cm4gdGhpcwogIH0pKCkKICB0cnkgewogICAgLy8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApCiAgICBnID0gZyB8fCBuZXcgRnVuY3Rpb24oInJldHVybiB0aGlzIikoKQogIH0gY2F0Y2ggKGUpIHsKICAgIC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlCiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gIm9iamVjdCIpIGcgPSB3aW5kb3cKICB9CiAgcmV0dXJuIGcKfSkoKSB8fCBnbG9iYWw7CmArZisiIH0pKE9iamVjdC5jcmVhdGUodGhpcykpIjtyZXR1cm4gbmV3IEZ1bmN0aW9uKC4uLnAsRSkoLi4udyl9ZnVuY3Rpb24gQzEoZil7bGV0IHM9UHMoZik7dHJ5e2lmKHMmJnMuYm9keSlyZXR1cm4gcy5ib2R5LnRvSlNPTigpfWNhdGNoKHApe2NvbnNvbGUuZXJyb3IoIltKUyBGcmFtZXdvcmtdIEZhaWxlZCB0byBnZXQgdGhlIHZpcnR1YWwgZG9tIHRyZWUuIik7cmV0dXJufX1mdW5jdGlvbiBBMShmKXt5dihmKSxlbC5mb3JFYWNoKHM9PntsZXQgcD1zLm9wdGlvbnMuZGVzdHJveTtwJiZwKGYpfSl9ZnVuY3Rpb24gVDEoZil7RXYoZiksZWwuZm9yRWFjaChzPT57bGV0IHA9cy5vcHRpb25zLnJlZnJlc2g7cCYmcChmKX0pfXZhciBPMT17Y3JlYXRlSW5zdGFuY2U6UzEsY3JlYXRlSW5zdGFuY2VDb250ZXh0OkJtLGdldFJvb3Q6QzEsZ2V0RG9jdW1lbnQ6UHMscmVnaXN0ZXJTZXJ2aWNlOnRmLHVucmVnaXN0ZXJTZXJ2aWNlOm5mLGNhbGxKUyhmLHMpe3JldHVybiBwZChmLHMpfSxyZWdpc3RlckNvbXBvbmVudHM6cm0scmVnaXN0ZXJNb2R1bGVzOnRtLGRlc3Ryb3lJbnN0YW5jZTpBMSxyZWZyZXNoSW5zdGFuY2U6VDF9O2Z1bmN0aW9uIFRkKCl7cmV0dXJuIGVtKCksTzF9ZnVuY3Rpb24gUDEoZil7aWYoZ2xvYmFsLnNldFRpbWVvdXQmJmdsb2JhbC5zZXRJbnRlcnZhbClyZXR1cm57c2V0VGltZW91dDpnbG9iYWwuc2V0VGltZW91dCxzZXRJbnRlcnZhbDpnbG9iYWwuc2V0SW50ZXJ2YWwsY2xlYXJUaW1lb3V0Omdsb2JhbC5jbGVhclRpbWVvdXQsY2xlYXJJbnRlcnZhbDpnbG9iYWwuY2xlYXJJbnRlcnZhbH07bGV0IHM9Zi5yZXF1aXJlTW9kdWxlKCJ0aW1lciIpO3JldHVybntzZXRUaW1lb3V0OiguLi53KT0+e2xldCBOPWZ1bmN0aW9uKCl7d1swXSguLi53LnNsaWNlKDIpKX07cmV0dXJuIHMuc2V0VGltZW91dChOLHdbMV0pLGYuZG9jdW1lbnQudGFza0NlbnRlci5jYWxsYmFja01hbmFnZXIubGFzdENhbGxiYWNrSWQudG9TdHJpbmcoKX0sc2V0SW50ZXJ2YWw6KC4uLncpPT57bGV0IE49ZnVuY3Rpb24oKXt3WzBdKC4uLncuc2xpY2UoMikpfTtyZXR1cm4gcy5zZXRJbnRlcnZhbChOLHdbMV0pLGYuZG9jdW1lbnQudGFza0NlbnRlci5jYWxsYmFja01hbmFnZXIubGFzdENhbGxiYWNrSWQudG9TdHJpbmcoKX0sY2xlYXJUaW1lb3V0Onc9PntzLmNsZWFyVGltZW91dCh3KX0sY2xlYXJJbnRlcnZhbDp3PT57cy5jbGVhckludGVydmFsKHcpfX19dmFyIExtPXtEb2N1bWVudDpjYSxFbGVtZW50OmJvLENvbW1lbnQ6TGwsTGlzdGVuZXI6eWMsVGFza0NlbnRlcjpiYyxzZW5kVGFza3MoLi4uZil7cmV0dXJuIGpuKGNhbGxOYXRpdmUpP2NhbGxOYXRpdmUoLi4uZik6KGdsb2JhbC5jYWxsTmF0aXZlfHwoKCk9Pnt9KSkoLi4uZil9fTtjYS5oYW5kbGVyPUxtLnNlbmRUYXNrczt2YXIgRGw9TG07ZnVuY3Rpb24gTjEoKXtxYShEbC5Db21tZW50KSxxYShEbC5MaXN0ZW5lcikscWEoRGwuRG9jdW1lbnQucHJvdG90eXBlKSxxYShEbC5Db21tZW50LnByb3RvdHlwZSkscWEoRGwuTGlzdGVuZXIucHJvdG90eXBlKX12YXIgc2Y9e3NlcnZpY2U6e3JlZ2lzdGVyOnRmLHVucmVnaXN0ZXI6bmYsaGFzOl9kfSxmcmVlemVQcm90b3R5cGU6TjEsaW5pdDpUZCxjb25maWc6RGx9O3ZhciBPZD1jbGFzc3tjb25zdHJ1Y3RvcihzLHA9e30pe3RoaXMudHlwZT1zfHwibWVzc2FnZSIsdGhpcy5kYXRhPXAuZGF0YXx8bnVsbCx0aGlzLm9yaWdpbj1wLm9yaWdpbnx8IiIsdGhpcy5zb3VyY2U9cC5zb3VyY2V8fG51bGwsdGhpcy5wb3J0cz1wLnBvcnRzfHxbXSx0aGlzLnRhcmdldD1udWxsLHRoaXMudGltZVN0YW1wPURhdGUubm93KCl9fTt2YXIgdGw9e30saXU9e307ZnVuY3Rpb24gUGQoKXt9UGQucHJvdG90eXBlLnBvc3RNZXNzYWdlPWZ1bmN0aW9uKGYpe2lmKHRoaXMuX2Nsb3NlZCl0aHJvdyBuZXcgRXJyb3IoYEJyb2FkY2FzdENoYW5uZWwgIiR7dGhpcy5uYW1lfSIgaXMgY2xvc2VkLmApO2xldCBzPXRsW3RoaXMubmFtZV07aWYocyYmcy5sZW5ndGgpZm9yKGxldCBwPTA7cDxzLmxlbmd0aDsrK3Ape2xldCB3PXNbcF07dy5fY2xvc2VkfHx3PT09dGhpc3x8am4ody5vbm1lc3NhZ2UpJiZ3Lm9ubWVzc2FnZShuZXcgT2QoIm1lc3NhZ2UiLHtkYXRhOmZ9KSl9fTtQZC5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oKXtpZighdGhpcy5fY2xvc2VkJiYodGhpcy5fY2xvc2VkPSEwLHRsW3RoaXMubmFtZV0pKXtsZXQgZj10bFt0aGlzLm5hbWVdLmZpbHRlcihzPT5zIT09dGhpcyk7Zi5sZW5ndGg/dGxbdGhpcy5uYW1lXT1mOmRlbGV0ZSB0bFt0aGlzLm5hbWVdfX07dmFyIE1tPXtjcmVhdGU6Zj0+e2lmKGl1W2ZdPVtdLGpuKGdsb2JhbC5Ccm9hZGNhc3RDaGFubmVsKSlyZXR1cm57fTtsZXQgcz17QnJvYWRjYXN0Q2hhbm5lbDpmdW5jdGlvbihwKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibmFtZSIse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiExLHZhbHVlOlN0cmluZyhwKX0pLHRoaXMuX2Nsb3NlZD0hMSx0aGlzLm9ubWVzc2FnZT1udWxsLHRsW3RoaXMubmFtZV18fCh0bFt0aGlzLm5hbWVdPVtdKSx0bFt0aGlzLm5hbWVdLnB1c2godGhpcyksaXVbZl0ucHVzaCh0aGlzKX19O3JldHVybiBzLkJyb2FkY2FzdENoYW5uZWwucHJvdG90eXBlPVBkLnByb3RvdHlwZSx7aW5zdGFuY2U6c319LGRlc3Ryb3k6Zj0+e2l1W2ZdJiYoaXVbZl0uZm9yRWFjaChzPT5zLmNsb3NlKCkpLGRlbGV0ZSBpdVtmXSl9fTtmdW5jdGlvbiBOZCgpe2xldHtpbml0OmZ9PXNmO3NmLnNlcnZpY2UucmVnaXN0ZXIoIkJyb2FkY2FzdENoYW5uZWwiLE1tKSxzZi5mcmVlemVQcm90b3R5cGUoKTtsZXQgcz1mKCk7Zm9yKGxldCBwIGluIHMpZ2xvYmFsW3BdPSguLi53KT0+e2xldCBOPXNbcF0oLi4udyk7cmV0dXJuIE4gaW5zdGFuY2VvZiBFcnJvciYmY29uc29sZS5lcnJvcihOLnRvU3RyaW5nKCkpLE59fXZhciBIQj1nbG9iYWwuY29uc29sZTtmdW5jdGlvbiBEbSgpe2lmKFJ2KCksZ2xvYmFsLldYRW52aXJvbm1lbnQmJmdsb2JhbC5XWEVudmlyb25tZW50LnBsYXRmb3JtIT09IldlYiIpZ2xvYmFsLmNvbnNvbGU9e2RlYnVnOiguLi5mKT0+e2xyKCJkZWJ1ZyIpJiZnbG9iYWwubmF0aXZlTG9nKC4uLm91KGYpLCJfX0RFQlVHIil9LGxvZzooLi4uZik9PntscigibG9nIikmJmdsb2JhbC5uYXRpdmVMb2coLi4ub3UoZiksIl9fTE9HIil9LGluZm86KC4uLmYpPT57bHIoImluZm8iKSYmZ2xvYmFsLm5hdGl2ZUxvZyguLi5vdShmKSwiX19JTkZPIil9LHdhcm46KC4uLmYpPT57bHIoIndhcm4iKSYmZ2xvYmFsLm5hdGl2ZUxvZyguLi5vdShmKSwiX19XQVJOIil9LGVycm9yOiguLi5mKT0+e2xyKCJlcnJvciIpJiZnbG9iYWwubmF0aXZlTG9nKC4uLm91KGYpLCJfX0VSUk9SIil9fTtlbHNle2xldHtkZWJ1ZzpmLGxvZzpzLGluZm86cCx3YXJuOncsZXJyb3I6Tn09Y29uc29sZTtjb25zb2xlLl9fb3JpX189e2RlYnVnOmYsbG9nOnMsaW5mbzpwLHdhcm46dyxlcnJvcjpOfSxjb25zb2xlLmRlYnVnPSguLi5FKT0+e2xyKCJkZWJ1ZyIpJiZjb25zb2xlLl9fb3JpX18uZGVidWcuYXBwbHkoY29uc29sZSxFKX0sY29uc29sZS5sb2c9KC4uLkUpPT57bHIoImxvZyIpJiZjb25zb2xlLl9fb3JpX18ubG9nLmFwcGx5KGNvbnNvbGUsRSl9LGNvbnNvbGUuaW5mbz0oLi4uRSk9PntscigiaW5mbyIpJiZjb25zb2xlLl9fb3JpX18uaW5mby5hcHBseShjb25zb2xlLEUpfSxjb25zb2xlLndhcm49KC4uLkUpPT57bHIoIndhcm4iKSYmY29uc29sZS5fX29yaV9fLndhcm4uYXBwbHkoY29uc29sZSxFKX0sY29uc29sZS5lcnJvcj0oLi4uRSk9PntscigiZXJyb3IiKSYmY29uc29sZS5fX29yaV9fLmVycm9yLmFwcGx5KGNvbnNvbGUsRSl9fX1mdW5jdGlvbiBvdShmKXtyZXR1cm4gZi5tYXAocz0+e2lmKHVzKHMpLnRvTG93ZXJDYXNlKCk9PT0iW29iamVjdCBvYmplY3RdIil0cnl7cz1KU09OLnN0cmluZ2lmeShzKX1jYXRjaCh3KXtzPSJbb2JqZWN0IG9iamVjdF0ifWVsc2Ugcz1TdHJpbmcocyk7cmV0dXJuIHN9KX1EbSgpO05kKCk7fSkoKTsKLyohICNfX05PX1NJREVfRUZGRUNUU19fICovCi8qKgoqIEBkY2xvdWRpby91bmktYXBwLW52dWUgdjMuNC4yMQoqIChjKSAyMDE4LXByZXNlbnQgWXV4aSAoRXZhbikgWW91IGFuZCBWdWUgY29udHJpYnV0b3JzCiogQGxpY2Vuc2UgTUlUCioqLwovKioKKiBAZGNsb3VkaW8vdW5pLWFwcC1zZXJ2aWNlLXZ1ZSB2My40LjIxCiogKGMpIDIwMTgtcHJlc2VudCBZdXhpIChFdmFuKSBZb3UgYW5kIFZ1ZSBjb250cmlidXRvcnMKKiBAbGljZW5zZSBNSVQKKiovCi8qKgoqIEB2dWUvcmVhY3Rpdml0eSB2My40LjIxCiogKGMpIDIwMTgtcHJlc2VudCBZdXhpIChFdmFuKSBZb3UgYW5kIFZ1ZSBjb250cmlidXRvcnMKKiBAbGljZW5zZSBNSVQKKiovCi8qKgoqIEB2dWUvc2hhcmVkIHYzLjQuMjEKKiAoYykgMjAxOC1wcmVzZW50IFl1eGkgKEV2YW4pIFlvdSBhbmQgVnVlIGNvbnRyaWJ1dG9ycwoqIEBsaWNlbnNlIE1JVAoqKi8K