mining Smart Contract

in #hive-engine26 days ago

{"id":"ssc-mainnet-hive","json":{"contractName":"contract","contractAction":"update","contractPayload":{"name":"mining","params":"","code":"Y29uc3QgTUFYX0RJR0lUUz0yMCxQUk9QRVJUWV9PUFM9e0FERDp7YWRkOih4LHkpPT5hcGkuQmlnTnVtYmVyKHgpLnBsdXMoeSkscmVtb3ZlOih4LHkpPT5hcGkuQmlnTnVtYmVyKHgpLm1pbnVzKHkpLGRlZmF1bHRWYWx1ZTowfSxNVUxUSVBMWTp7YWRkOih4LHkpPT5hcGkuQmlnTnVtYmVyKHgpLm11bHRpcGxpZWRCeSh5KS5kcCgyMCkscmVtb3ZlOih4LHkpPT5hcGkuQmlnTnVtYmVyKHgpLmRpdmlkZWRCeSh5KS5kcCgyMCksZGVmYXVsdFZhbHVlOjF9fTthY3Rpb25zLmNyZWF0ZVNTQz1hc3luYygpPT57aWYoITE9PT1hd2FpdCBhcGkuZGIudGFibGVFeGlzdHMoIm1pbmluZ1Bvd2VyIikpe2F3YWl0IGFwaS5kYi5jcmVhdGVUYWJsZSgibWluaW5nUG93ZXIiLFsiaWQiLCJwb3dlciJdKSxhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoInBvb2xzIixbImlkIl0pLGF3YWl0IGFwaS5kYi5jcmVhdGVUYWJsZSgidG9rZW5Qb29scyIsWyJzeW1ib2wiXSksYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCJuZnRUb2tlblBvb2xzIixbInN5bWJvbCJdKSxhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoInBhcmFtcyIpO2NvbnN0IHBhcmFtcz17cG9vbENyZWF0aW9uRmVlOiIxMDAwIixwb29sVXBkYXRlRmVlOiIzMDAiLG1heExvdHRlcmllc1BlckJsb2NrOjIwLG1heEJhbGFuY2VzUHJvY2Vzc2VkUGVyQmxvY2s6MWU0LHByb2Nlc3NRdWVyeUxpbWl0OjFlM307YXdhaXQgYXBpLmRiLmluc2VydCgicGFyYW1zIixwYXJhbXMpfWVsc2V7Y29uc3QgcGFyYW1zPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KTtwYXJhbXMudXBkYXRlSW5kZXh8fChhd2FpdCBhcGkuZGIuYWRkSW5kZXhlcygibWluaW5nUG93ZXIiLFt7bmFtZToiYnlQb29sSWRBbmRBY2NvdW50IixpbmRleDp7aWQ6MSxhY2NvdW50OjF9fV0pLHBhcmFtcy51cGRhdGVJbmRleD0xLGF3YWl0IGFwaS5kYi51cGRhdGUoInBhcmFtcyIscGFyYW1zKSl9fSxhY3Rpb25zLnVwZGF0ZVBhcmFtcz1hc3luYyBwYXlsb2FkPT57aWYoYXBpLnNlbmRlciE9PWFwaS5vd25lcilyZXR1cm47Y29uc3R7cG9vbENyZWF0aW9uRmVlOnBvb2xDcmVhdGlvbkZlZSxwb29sVXBkYXRlRmVlOnBvb2xVcGRhdGVGZWUsbWF4TG90dGVyaWVzUGVyQmxvY2s6bWF4TG90dGVyaWVzUGVyQmxvY2ssbWF4QmFsYW5jZXNQcm9jZXNzZWRQZXJCbG9jazptYXhCYWxhbmNlc1Byb2Nlc3NlZFBlckJsb2NrLHByb2Nlc3NRdWVyeUxpbWl0OnByb2Nlc3NRdWVyeUxpbWl0fT1wYXlsb2FkLHBhcmFtcz1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSk7aWYocG9vbENyZWF0aW9uRmVlKXtpZighYXBpLmFzc2VydCgic3RyaW5nIj09dHlwZW9mIHBvb2xDcmVhdGlvbkZlZSYmIWFwaS5CaWdOdW1iZXIocG9vbENyZWF0aW9uRmVlKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKHBvb2xDcmVhdGlvbkZlZSkuZ3RlKDApLCJpbnZhbGlkIHBvb2xDcmVhdGlvbkZlZSIpKXJldHVybjtwYXJhbXMucG9vbENyZWF0aW9uRmVlPXBvb2xDcmVhdGlvbkZlZX1pZihwb29sVXBkYXRlRmVlKXtpZighYXBpLmFzc2VydCgic3RyaW5nIj09dHlwZW9mIHBvb2xVcGRhdGVGZWUmJiFhcGkuQmlnTnVtYmVyKHBvb2xVcGRhdGVGZWUpLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIocG9vbFVwZGF0ZUZlZSkuZ3RlKDApLCJpbnZhbGlkIHBvb2xVcGRhdGVGZWUiKSlyZXR1cm47cGFyYW1zLnBvb2xVcGRhdGVGZWU9cG9vbFVwZGF0ZUZlZX1pZihtYXhMb3R0ZXJpZXNQZXJCbG9jayl7aWYoIWFwaS5hc3NlcnQoTnVtYmVyLmlzSW50ZWdlcihtYXhMb3R0ZXJpZXNQZXJCbG9jaykmJm1heExvdHRlcmllc1BlckJsb2NrPj0xLCJpbnZhbGlkIG1heExvdHRlcmllc1BlckJsb2NrIikpcmV0dXJuO3BhcmFtcy5tYXhMb3R0ZXJpZXNQZXJCbG9jaz1tYXhMb3R0ZXJpZXNQZXJCbG9ja31pZihtYXhCYWxhbmNlc1Byb2Nlc3NlZFBlckJsb2NrKXtpZighYXBpLmFzc2VydChOdW1iZXIuaXNJbnRlZ2VyKG1heEJhbGFuY2VzUHJvY2Vzc2VkUGVyQmxvY2spJiZtYXhCYWxhbmNlc1Byb2Nlc3NlZFBlckJsb2NrPj0xLCJpbnZhbGlkIG1heEJhbGFuY2VzUHJvY2Vzc2VkUGVyQmxvY2siKSlyZXR1cm47cGFyYW1zLm1heEJhbGFuY2VzUHJvY2Vzc2VkUGVyQmxvY2s9bWF4QmFsYW5jZXNQcm9jZXNzZWRQZXJCbG9ja31pZihwcm9jZXNzUXVlcnlMaW1pdCl7aWYoIWFwaS5hc3NlcnQoTnVtYmVyLmlzSW50ZWdlcihwcm9jZXNzUXVlcnlMaW1pdCkmJnByb2Nlc3NRdWVyeUxpbWl0Pj0xLCJpbnZhbGlkIHByb2Nlc3NRdWVyeUxpbWl0IikpcmV0dXJuO3BhcmFtcy5wcm9jZXNzUXVlcnlMaW1pdD1wcm9jZXNzUXVlcnlMaW1pdH1hd2FpdCBhcGkuZGIudXBkYXRlKCJwYXJhbXMiLHBhcmFtcyl9O2NvbnN0IGZpbmRBbmRQcm9jZXNzQWxsPWFzeW5jKGNvbnRyYWN0TmFtZSx0YWJsZSxxdWVyeSxjYWxsYmFjayk9PntsZXQgb2Zmc2V0PTAscmVzdWx0cz1bXSxkb25lPSExO2Zvcig7IWRvbmU7KWlmKHJlc3VsdHM9YXdhaXQgYXBpLmRiLmZpbmRJblRhYmxlKGNvbnRyYWN0TmFtZSx0YWJsZSxxdWVyeSwxZTMsb2Zmc2V0KSxyZXN1bHRzKXtmb3IobGV0IGk9MDtpPHJlc3VsdHMubGVuZ3RoO2krPTEpYXdhaXQgY2FsbGJhY2socmVzdWx0c1tpXSk7cmVzdWx0cy5sZW5ndGg8MWUzP2RvbmU9ITA6b2Zmc2V0Kz0xZTN9fTthc3luYyBmdW5jdGlvbiB2YWxpZGF0ZU5mdFByb3BlcnRpZXMocHJvcGVydGllcyl7aWYoIWFwaS5hc3NlcnQocHJvcGVydGllcyYmQXJyYXkuaXNBcnJheShwcm9wZXJ0aWVzKSwiaW52YWxpZCBuZnRUb2tlbk1pbmVyIHByb3BlcnRpZXMiKSlyZXR1cm4hMTtpZighYXBpLmFzc2VydChwcm9wZXJ0aWVzLmxlbmd0aD4wJiZwcm9wZXJ0aWVzLmxlbmd0aDw9NCwibmZ0VG9rZW5NaW5lciBwcm9wZXJ0aWVzIHNpemUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDQiKSlyZXR1cm4hMTtmb3IobGV0IGk9MDtpPHByb3BlcnRpZXMubGVuZ3RoO2krPTEpe2NvbnN0IHByb3A9cHJvcGVydGllc1tpXSxwcm9wS2V5cz1PYmplY3Qua2V5cyhwcm9wKTtmb3IobGV0IGo9MDtqPHByb3BLZXlzLmxlbmd0aDtqKz0xKXtjb25zdCBwcm9wS2V5PXByb3BLZXlzW2pdO2lmKCJvcCI9PT1wcm9wS2V5KXtpZighYXBpLmFzc2VydCgic3RyaW5nIj09dHlwZW9mIHByb3Aub3AmJlBST1BFUlRZX09QU1twcm9wLm9wXSwibmZ0VG9rZW5NaW5lciBwcm9wZXJ0aWVzIG9wIHNob3VsZCBiZSBBREQgb3IgTVVMVElQTFkiKSlyZXR1cm4hMX1lbHNlIGlmKCJuYW1lIj09PXByb3BLZXkpe2lmKCFhcGkuYXNzZXJ0KCJzdHJpbmciPT10eXBlb2YgcHJvcC5uYW1lJiZwcm9wLm5hbWUubGVuZ3RoPD0xNiwibmZ0VG9rZW5NaW5lciBwcm9wZXJ0aWVzIG5hbWUgc2hvdWxkIGJlIGEgc3RyaW5nIG9mIGxlbmd0aCA8PSAxNiIpKXJldHVybiExfWVsc2V7aWYoImJ1cm5DaGFuZ2UiIT09cHJvcEtleSlyZXR1cm4gYXBpLmFzc2VydCghMSwibmZ0VG9rZW5NaW5lciBwcm9wZXJ0aWVzIGZpZWxkIGludmFsaWQiKSwhMTt7aWYoIWFwaS5hc3NlcnQoIm9iamVjdCI9PXR5cGVvZiBwcm9wLmJ1cm5DaGFuZ2UmJiJzdHJpbmciPT10eXBlb2YgcHJvcC5idXJuQ2hhbmdlLnN5bWJvbCYmYXBpLkJpZ051bWJlcihwcm9wLmJ1cm5DaGFuZ2UucXVhbnRpdHkpLmlzRmluaXRlKCkmJmFwaS5CaWdOdW1iZXIocHJvcC5idXJuQ2hhbmdlLnF1YW50aXR5KS5pc1Bvc2l0aXZlKCksIm5mdFRva2VuTWluZXIgcHJvcGVydGllcyBidXJuQ2hhbmdlIGludmFsaWQiKSlyZXR1cm4hMTtjb25zdCB0b2tlbj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpwcm9wLmJ1cm5DaGFuZ2Uuc3ltYm9sfSk7aWYoIWFwaS5hc3NlcnQodG9rZW4sIm5mdFRva2VuTWluZXIgcHJvcGVydGllcyBidXJuQ2hhbmdlIHN5bWJvbCBub3QgZm91bmQiKSlyZXR1cm4hMX19fX1yZXR1cm4hMH1mdW5jdGlvbiB2YWxpZGF0ZU5mdFR5cGVNYXAodHlwZU1hcCxwcm9wZXJ0aWVzKXtpZighYXBpLmFzc2VydCh0eXBlTWFwJiYib2JqZWN0Ij09dHlwZW9mIHR5cGVNYXAsImludmFsaWQgbmZ0VG9rZW5NaW5lciB0eXBlTWFwIikpcmV0dXJuITE7Y29uc3QgdHlwZXM9T2JqZWN0LmtleXModHlwZU1hcCk7Zm9yKGxldCBqPTA7ajx0eXBlcy5sZW5ndGg7ais9MSl7Y29uc3QgdHlwZUNvbmZpZz10eXBlTWFwW3R5cGVzW2pdXTtpZighYXBpLmFzc2VydChBcnJheS5pc0FycmF5KHR5cGVDb25maWcpJiZ0eXBlQ29uZmlnLmxlbmd0aD09PXByb3BlcnRpZXMubGVuZ3RoLCJuZnRUb2tlbk1pbmVyIHR5cGVDb25maWcgbGVuZ3RoIG1pc21hdGNoIikpcmV0dXJuITE7Zm9yKGxldCBrPTA7azx0eXBlQ29uZmlnLmxlbmd0aDtrKz0xKXtjb25zdCB0eXBlUHJvcGVydHk9YXBpLkJpZ051bWJlcih0eXBlQ29uZmlnW2tdKTtpZighYXBpLmFzc2VydCghdHlwZVByb3BlcnR5LmlzTmFOKCkmJnR5cGVQcm9wZXJ0eS5pc0Zpbml0ZSgpLCJuZnRUb2tlbk1pbmVyIHR5cGVDb25maWcgaW52YWxpZCIpKXJldHVybiExO2lmKCJNVUxUSVBMWSI9PT1wcm9wZXJ0aWVzW2tdLm9wJiYhYXBpLmFzc2VydCh0eXBlUHJvcGVydHkuZ3RlKC4wMSkmJnR5cGVQcm9wZXJ0eS5sdGUoMTAwKSwibmZ0VG9rZW5NaW5lciB0eXBlQ29uZmlnIE1VTFRJUExZIHByb3BlcnR5IHNob3VsZCBiZSBiZXR3ZWVuIDAuMDEgYW5kIDEwMCIpKXJldHVybiExfX1yZXR1cm4hMH1hc3luYyBmdW5jdGlvbiB2YWxpZGF0ZVRva2VuTWluZXJzKHRva2VuTWluZXJzLG5mdFRva2VuTWluZXIpe2lmKCFhcGkuYXNzZXJ0KHRva2VuTWluZXJzJiZBcnJheS5pc0FycmF5KHRva2VuTWluZXJzKSwidG9rZW5NaW5lcnMgaW52YWxpZCIpKXJldHVybiExO2lmKCFhcGkuYXNzZXJ0KHRva2VuTWluZXJzLmxlbmd0aD49MSYmdG9rZW5NaW5lcnMubGVuZ3RoPD0yfHxuZnRUb2tlbk1pbmVyJiYwPT09dG9rZW5NaW5lcnMubGVuZ3RoLCJvbmx5IDEgb3IgMiB0b2tlbk1pbmVycyBhbGxvd2VkIikpcmV0dXJuITE7Y29uc3QgdG9rZW5NaW5lclN5bWJvbHM9bmV3IFNldDtmb3IobGV0IGk9MDtpPHRva2VuTWluZXJzLmxlbmd0aDtpKz0xKXtjb25zdCB0b2tlbk1pbmVyQ29uZmlnPXRva2VuTWluZXJzW2ldO2lmKCFhcGkuYXNzZXJ0KHRva2VuTWluZXJDb25maWcmJnRva2VuTWluZXJDb25maWcuc3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIHRva2VuTWluZXJDb25maWcuc3ltYm9sLCJ0b2tlbk1pbmVycyBpbnZhbGlkIikpcmV0dXJuITE7aWYoIWFwaS5hc3NlcnQoIXRva2VuTWluZXJTeW1ib2xzLmhhcyh0b2tlbk1pbmVyQ29uZmlnLnN5bWJvbCksInRva2VuTWluZXJzIGNhbm5vdCBoYXZlIGR1cGxpY2F0ZSBzeW1ib2xzIikpcmV0dXJuITE7dG9rZW5NaW5lclN5bWJvbHMuYWRkKHRva2VuTWluZXJDb25maWcuc3ltYm9sKTtjb25zdHtzeW1ib2w6c3ltYm9sfT10b2tlbk1pbmVyQ29uZmlnLHRva2VuPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwidG9rZW5zIix7c3ltYm9sOnN5bWJvbH0pO2lmKCFhcGkuYXNzZXJ0KHRva2VuJiZ0b2tlbi5zdGFraW5nRW5hYmxlZCwidG9rZW5NaW5lcnMgbXVzdCBoYXZlIHN0YWtpbmcgZW5hYmxlZCIpKXJldHVybiExO2lmKCFhcGkuYXNzZXJ0KE51bWJlci5pc0ludGVnZXIodG9rZW5NaW5lckNvbmZpZy5tdWx0aXBsaWVyKSYmdG9rZW5NaW5lckNvbmZpZy5tdWx0aXBsaWVyPj0xJiZ0b2tlbk1pbmVyQ29uZmlnLm11bHRpcGxpZXI8PTEwMCwidG9rZW5NaW5lciBtdWx0aXBsaWVyIG11c3QgYmUgYW4gaW50ZWdlciBmcm9tIDEgdG8gMTAwIikpcmV0dXJuITF9aWYobmZ0VG9rZW5NaW5lcil7aWYoIWFwaS5hc3NlcnQobmZ0VG9rZW5NaW5lci5zeW1ib2wmJiJzdHJpbmciPT10eXBlb2YgbmZ0VG9rZW5NaW5lci5zeW1ib2wsIm5mdFRva2VuTWluZXIgaW52YWxpZCIpKXJldHVybiExO2NvbnN0e3N5bWJvbDpzeW1ib2wsdHlwZU1hcDp0eXBlTWFwLHByb3BlcnRpZXM6cHJvcGVydGllcyx0eXBlRmllbGQ6dHlwZUZpZWxkfT1uZnRUb2tlbk1pbmVyLG5mdD1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoIm5mdCIsIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7aWYoIWFwaS5hc3NlcnQobmZ0JiZuZnQuZGVsZWdhdGlvbkVuYWJsZWQsIm5mdFRva2VuTWluZXIgbXVzdCBoYXZlIGRlbGVnYXRpb24gZW5hYmxlZCIpKXJldHVybiExO2lmKCFhcGkuYXNzZXJ0KHR5cGVGaWVsZCYmInN0cmluZyI9PXR5cGVvZiB0eXBlRmllbGQsInR5cGVGaWVsZCBtdXN0IGJlIGEgc3RyaW5nIikpcmV0dXJuITE7aWYoIWFwaS5hc3NlcnQobmZ0LnByb3BlcnRpZXNbdHlwZUZpZWxkXSYmInN0cmluZyI9PT1uZnQucHJvcGVydGllc1t0eXBlRmllbGRdLnR5cGUsIm5mdFRva2VuTWluZXIgbXVzdCBoYXZlIHN0cmluZyB0eXBlIHByb3BlcnR5IikpcmV0dXJuITE7aWYoIWF3YWl0IHZhbGlkYXRlTmZ0UHJvcGVydGllcyhwcm9wZXJ0aWVzKSlyZXR1cm4hMTtpZighdmFsaWRhdGVOZnRUeXBlTWFwKHR5cGVNYXAscHJvcGVydGllcykpcmV0dXJuITF9cmV0dXJuITB9YXN5bmMgZnVuY3Rpb24gdmFsaWRhdGVUb2tlbk1pbmVyc0NoYW5nZShvbGRUb2tlbk1pbmVycyx0b2tlbk1pbmVycyxvbGROZnRUb2tlbk1pbmVyLG5mdFRva2VuTWluZXIpe2lmKCFhcGkuYXNzZXJ0KHRva2VuTWluZXJzLmxlbmd0aD09PW9sZFRva2VuTWluZXJzLmxlbmd0aCwiY2Fubm90IGNoYW5nZSB3aGljaCB0b2tlbnMgYXJlIGluIHRva2VuTWluZXJzIikpcmV0dXJuITE7bGV0IGNoYW5nZWQ9ITE7Zm9yKGxldCBpPTA7aTx0b2tlbk1pbmVycy5sZW5ndGg7aSs9MSl7Y29uc3Qgb2xkQ29uZmlnPW9sZFRva2VuTWluZXJzW2ldLG5ld0NvbmZpZz10b2tlbk1pbmVyc1tpXTtpZighYXBpLmFzc2VydChvbGRDb25maWcuc3ltYm9sPT09bmV3Q29uZmlnLnN5bWJvbCwiY2Fubm90IGNoYW5nZSB3aGljaCB0b2tlbnMgYXJlIGluIHRva2VuTWluZXJzIikpcmV0dXJuITE7aWYoIWFwaS5hc3NlcnQoTnVtYmVyLmlzSW50ZWdlcihuZXdDb25maWcubXVsdGlwbGllcikmJm5ld0NvbmZpZy5tdWx0aXBsaWVyPj0xJiZuZXdDb25maWcubXVsdGlwbGllcjw9MTAwLCJ0b2tlbk1pbmVyIG11bHRpcGxpZXIgbXVzdCBiZSBhbiBpbnRlZ2VyIGZyb20gMSB0byAxMDAiKSlyZXR1cm4hMTtvbGRDb25maWcubXVsdGlwbGllciE9PW5ld0NvbmZpZy5tdWx0aXBsaWVyJiYoY2hhbmdlZD0hMCl9aWYoIWFwaS5hc3NlcnQoISFvbGROZnRUb2tlbk1pbmVyPT0hIW5mdFRva2VuTWluZXIsImNhbm5vdCBjaGFuZ2UgbmZ0VG9rZW5NaW5lciB0b2tlbiIpKXJldHVybiExO2lmKG5mdFRva2VuTWluZXIpe2lmKCFhcGkuYXNzZXJ0KG9sZE5mdFRva2VuTWluZXIuc3ltYm9sPT09bmZ0VG9rZW5NaW5lci5zeW1ib2wsImNhbm5vdCBjaGFuZ2UgbmZ0VG9rZW5NaW5lciB0b2tlbiIpKXJldHVybiExO2NvbnN0e3R5cGVNYXA6dHlwZU1hcCxwcm9wZXJ0aWVzOnByb3BlcnRpZXMsdHlwZUZpZWxkOnR5cGVGaWVsZH09bmZ0VG9rZW5NaW5lcjtpZighYXBpLmFzc2VydCh0eXBlRmllbGQmJiJzdHJpbmciPT10eXBlb2YgdHlwZUZpZWxkJiZ0eXBlRmllbGQ9PT1vbGROZnRUb2tlbk1pbmVyLnR5cGVGaWVsZCwiY2Fubm90IGNoYW5nZSBuZnRUb2tlbk1pbmVyIHR5cGVGaWVsZCIpKXJldHVybiExO2lmKCFhcGkuYXNzZXJ0KHR5cGVNYXAmJiJvYmplY3QiPT10eXBlb2YgdHlwZU1hcCwiaW52YWxpZCBuZnRUb2tlbk1pbmVyIHR5cGVNYXAiKSlyZXR1cm4hMTtpZighYXdhaXQgdmFsaWRhdGVOZnRQcm9wZXJ0aWVzKHByb3BlcnRpZXMpKXJldHVybiExO2lmKHByb3BlcnRpZXMubGVuZ3RoIT09b2xkTmZ0VG9rZW5NaW5lci5wcm9wZXJ0aWVzLmxlbmd0aCljaGFuZ2VkPSEwO2Vsc2UgZm9yKGxldCBpPTA7aTxwcm9wZXJ0aWVzLmxlbmd0aDtpKz0xKXtjb25zdCBwcm9wPXByb3BlcnRpZXNbaV0sb2xkUHJvcD1vbGROZnRUb2tlbk1pbmVyLnByb3BlcnRpZXNbaV07cHJvcC5vcCE9PW9sZFByb3Aub3AmJihjaGFuZ2VkPSEwKX1pZighdmFsaWRhdGVOZnRUeXBlTWFwKHR5cGVNYXAscHJvcGVydGllcykpcmV0dXJuITE7Y29uc3Qgb2xkVHlwZXM9T2JqZWN0LmtleXMob2xkTmZ0VG9rZW5NaW5lci50eXBlTWFwKTtmb3IobGV0IGk9MDtpPG9sZFR5cGVzLmxlbmd0aDtpKz0xKXtjb25zdCBvbGRUeXBlPW9sZFR5cGVzW2ldLG9sZFR5cGVDb25maWc9b2xkTmZ0VG9rZW5NaW5lci50eXBlTWFwW29sZFR5cGVdLHR5cGVDb25maWc9dHlwZU1hcFtvbGRUeXBlXTtpZighYXBpLmFzc2VydCh0eXBlQ29uZmlnLCJ0eXBlQ29uZmlnIHR5cGVzIG11c3QgYmUgYSBzdXBlcnNldCBvZiBvbGQgdHlwZUNvbmZpZyB0eXBlcyIpKXJldHVybiExO2ZvcihsZXQgaj0wO2o8dHlwZUNvbmZpZy5sZW5ndGg7ais9MSlvbGRUeXBlQ29uZmlnW2pdIT09dHlwZUNvbmZpZ1tqXSYmKGNoYW5nZWQ9ITApfX1yZXR1cm57Y2hhbmdlZDpjaGFuZ2VkfX1mdW5jdGlvbiBjb21wdXRlTWluaW5nUG93ZXIobWluaW5nUG93ZXIsdG9rZW5NaW5lcnMsbmZ0VG9rZW5NaW5lcil7bGV0IHBvd2VyPWFwaS5CaWdOdW1iZXIoMCk7Zm9yKGxldCBpPTA7aTx0b2tlbk1pbmVycy5sZW5ndGg7aSs9MSltaW5pbmdQb3dlci5iYWxhbmNlc1tpXSYmKHBvd2VyPXBvd2VyLnBsdXMoYXBpLkJpZ051bWJlcihtaW5pbmdQb3dlci5iYWxhbmNlc1tpXSkubXVsdGlwbGllZEJ5KHRva2VuTWluZXJzW2ldLm11bHRpcGxpZXIpKSk7aWYobmZ0VG9rZW5NaW5lciYmbWluaW5nUG93ZXIubmZ0QmFsYW5jZXMpe2xldCBuZnRQb3dlcj1hcGkuQmlnTnVtYmVyKDEpO2ZvcihsZXQgaT0wO2k8bmZ0VG9rZW5NaW5lci5wcm9wZXJ0aWVzLmxlbmd0aDtpKz0xKW5mdFBvd2VyPW5mdFBvd2VyLm11bHRpcGxpZWRCeShtaW5pbmdQb3dlci5uZnRCYWxhbmNlc1tpXSkuZHAoMjApO25mdFBvd2VyLmlzRmluaXRlKCl8fChuZnRQb3dlcj1hcGkuQmlnTnVtYmVyKDApKSxwb3dlcj1wb3dlci5wbHVzKG5mdFBvd2VyKX1yZXR1cm4gcG93ZXIuaXNQb3NpdGl2ZSgpJiZwb3dlci5pc0Zpbml0ZSgpP3Bvd2VyOmFwaS5CaWdOdW1iZXIoMCl9YXN5bmMgZnVuY3Rpb24gdXBkYXRlTWluaW5nUG93ZXIocG9vbCx0b2tlbixhY2NvdW50LHN0YWtlZFF1YW50aXR5LGRlbGVnYXRlZFF1YW50aXR5LHVwZGF0ZVBvb2xUaW1lc3RhbXApe2xldCBtaW5pbmdQb3dlcj1hd2FpdCBhcGkuZGIuZmluZE9uZSgibWluaW5nUG93ZXIiLHtpZDpwb29sLmlkLGFjY291bnQ6YWNjb3VudH0pLHN0YWtlPWFwaS5CaWdOdW1iZXIoc3Rha2VkUXVhbnRpdHkpLG9sZE1pbmluZ1Bvd2VyPWFwaS5CaWdOdW1iZXIoMCk7c3Rha2U9c3Rha2UucGx1cyhkZWxlZ2F0ZWRRdWFudGl0eSk7Y29uc3QgdG9rZW5JbmRleD1wb29sLnRva2VuTWluZXJzLmZpbmRJbmRleCgodD0+dC5zeW1ib2w9PT10b2tlbikpO2lmKG1pbmluZ1Bvd2VyKXtpZih1cGRhdGVQb29sVGltZXN0YW1wJiZtaW5pbmdQb3dlci51cGRhdGVQb29sVGltZXN0YW1wIT09dXBkYXRlUG9vbFRpbWVzdGFtcCl7Zm9yKGxldCBpPTA7aTxwb29sLnRva2VuTWluZXJzLmxlbmd0aDtpKz0xKW1pbmluZ1Bvd2VyLmJhbGFuY2VzW2ldPSIwIjtpZihtaW5pbmdQb3dlci5uZnRCYWxhbmNlcyl7bWluaW5nUG93ZXIubmZ0QmFsYW5jZXM9e307Y29uc3R7bmZ0QmFsYW5jZXM6bmZ0QmFsYW5jZXN9PW1pbmluZ1Bvd2VyO2ZvcihsZXQgaj0wO2o8cG9vbC5uZnRUb2tlbk1pbmVyLnByb3BlcnRpZXMubGVuZ3RoO2orPTEpe2NvbnN0IHByb3BlcnR5PXBvb2wubmZ0VG9rZW5NaW5lci5wcm9wZXJ0aWVzW2pdLG9wSW5mbz1QUk9QRVJUWV9PUFNbcHJvcGVydHkub3BdO25mdEJhbGFuY2VzW2pdPW9wSW5mby5kZWZhdWx0VmFsdWV9fX1lbHNlIG1pbmluZ1Bvd2VyLmJhbGFuY2VzW3Rva2VuSW5kZXhdfHwobWluaW5nUG93ZXIuYmFsYW5jZXNbdG9rZW5JbmRleF09IjAiKTtvbGRNaW5pbmdQb3dlcj1jb21wdXRlTWluaW5nUG93ZXIobWluaW5nUG93ZXIscG9vbC50b2tlbk1pbmVycyxwb29sLm5mdFRva2VuTWluZXIpLG1pbmluZ1Bvd2VyLmJhbGFuY2VzW3Rva2VuSW5kZXhdPXN0YWtlLnBsdXMobWluaW5nUG93ZXIuYmFsYW5jZXNbdG9rZW5JbmRleF0pfWVsc2V7Y29uc3QgYmFsYW5jZXM9e307YmFsYW5jZXNbdG9rZW5JbmRleF09c3Rha2UsbWluaW5nUG93ZXI9e2lkOnBvb2wuaWQsYWNjb3VudDphY2NvdW50LGJhbGFuY2VzOmJhbGFuY2VzLHBvd2VyOnskbnVtYmVyRGVjaW1hbDoiMCJ9fSxtaW5pbmdQb3dlcj1hd2FpdCBhcGkuZGIuaW5zZXJ0KCJtaW5pbmdQb3dlciIsbWluaW5nUG93ZXIpfWNvbnN0IG5ld01pbmluZ1Bvd2VyPWNvbXB1dGVNaW5pbmdQb3dlcihtaW5pbmdQb3dlcixwb29sLnRva2VuTWluZXJzLHBvb2wubmZ0VG9rZW5NaW5lcik7cmV0dXJuIG1pbmluZ1Bvd2VyLnBvd2VyPXskbnVtYmVyRGVjaW1hbDpuZXdNaW5pbmdQb3dlcn0sdXBkYXRlUG9vbFRpbWVzdGFtcCYmKG1pbmluZ1Bvd2VyLnVwZGF0ZVBvb2xUaW1lc3RhbXA9dXBkYXRlUG9vbFRpbWVzdGFtcCksYXdhaXQgYXBpLmRiLnVwZGF0ZSgibWluaW5nUG93ZXIiLG1pbmluZ1Bvd2VyKSxuZXdNaW5pbmdQb3dlci5taW51cyhvbGRNaW5pbmdQb3dlcil9ZnVuY3Rpb24gZ2V0TmZ0QWNjb3VudChuZnQpe3JldHVybiJtaW5pbmciPT09bmZ0LmRlbGVnYXRlZFRvLmFjY291bnQmJiJjIj09PW5mdC5kZWxlZ2F0ZWRUby5vd25lZEJ5P25mdC5hY2NvdW50OiJ1Ij09PW5mdC5kZWxlZ2F0ZWRUby5vd25lZEJ5P25mdC5kZWxlZ2F0ZWRUby5hY2NvdW50Om51bGx9YXN5bmMgZnVuY3Rpb24gdXBkYXRlTmZ0TWluaW5nUG93ZXIocG9vbCxuZnQsYWRkLHVwZGF0ZVBvb2xUaW1lc3RhbXApe2NvbnN0IGFjY291bnQ9Z2V0TmZ0QWNjb3VudChuZnQpO2lmKCFhY2NvdW50KXJldHVybiBhcGkuQmlnTnVtYmVyKDApO2xldCBtaW5pbmdQb3dlcj1hd2FpdCBhcGkuZGIuZmluZE9uZSgibWluaW5nUG93ZXIiLHtpZDpwb29sLmlkLGFjY291bnQ6YWNjb3VudH0pLG9sZE1pbmluZ1Bvd2VyPWFwaS5CaWdOdW1iZXIoMCk7Y29uc3R7dHlwZU1hcDp0eXBlTWFwLHByb3BlcnRpZXM6cHJvcGVydGllcyx0eXBlRmllbGQ6dHlwZUZpZWxkfT1wb29sLm5mdFRva2VuTWluZXIsdHlwZVByb3BlcnRpZXM9dHlwZU1hcFtuZnQucHJvcGVydGllc1t0eXBlRmllbGRdXTtpZihtaW5pbmdQb3dlcil7bWluaW5nUG93ZXIubmZ0QmFsYW5jZXN8fChtaW5pbmdQb3dlci5uZnRCYWxhbmNlcz17fSk7Y29uc3R7bmZ0QmFsYW5jZXM6bmZ0QmFsYW5jZXN9PW1pbmluZ1Bvd2VyO2ZvcihsZXQgaT0wO2k8cHJvcGVydGllcy5sZW5ndGg7aSs9MSl7Y29uc3QgcHJvcGVydHk9cHJvcGVydGllc1tpXSxvcEluZm89UFJPUEVSVFlfT1BTW3Byb3BlcnR5Lm9wXTtuZnRCYWxhbmNlc1tpXSYmbWluaW5nUG93ZXIudXBkYXRlUG9vbFRpbWVzdGFtcD09PXVwZGF0ZVBvb2xUaW1lc3RhbXB8fChuZnRCYWxhbmNlc1tpXT1vcEluZm8uZGVmYXVsdFZhbHVlKX1pZihvbGRNaW5pbmdQb3dlcj1jb21wdXRlTWluaW5nUG93ZXIobWluaW5nUG93ZXIscG9vbC50b2tlbk1pbmVycyxwb29sLm5mdFRva2VuTWluZXIpLHR5cGVQcm9wZXJ0aWVzKWZvcihsZXQgaT0wO2k8cHJvcGVydGllcy5sZW5ndGg7aSs9MSl7Y29uc3QgcHJvcGVydHk9cHJvcGVydGllc1tpXSxvcEluZm89UFJPUEVSVFlfT1BTW3Byb3BlcnR5Lm9wXTtuZnRCYWxhbmNlc1tpXT1hZGQ/b3BJbmZvLmFkZChuZnRCYWxhbmNlc1tpXSx0eXBlUHJvcGVydGllc1tpXSk6b3BJbmZvLnJlbW92ZShuZnRCYWxhbmNlc1tpXSx0eXBlUHJvcGVydGllc1tpXSl9fWVsc2V7Y29uc3QgbmZ0QmFsYW5jZXM9e307Zm9yKGxldCBpPTA7aTxwcm9wZXJ0aWVzLmxlbmd0aDtpKz0xKXtjb25zdCBwcm9wZXJ0eT1wcm9wZXJ0aWVzW2ldLG9wSW5mbz1QUk9QRVJUWV9PUFNbcHJvcGVydHkub3BdO2lmKCFhZGQpcmV0dXJuIGFwaS5hc3NlcnQoITEsInVuZXhwZWN0ZWQgY29uZGl0aW9uOiByZW1vdmUgd2l0aG91dCBwcmV2aW91cyBtaW5pbmdQb3dlciIpLGFwaS5CaWdOdW1iZXIoMCk7bmZ0QmFsYW5jZXNbaV09dHlwZVByb3BlcnRpZXM/b3BJbmZvLmFkZChvcEluZm8uZGVmYXVsdFZhbHVlLHR5cGVQcm9wZXJ0aWVzW2ldKTpvcEluZm8uZGVmYXVsdFZhbHVlfW1pbmluZ1Bvd2VyPXtpZDpwb29sLmlkLGFjY291bnQ6YWNjb3VudCxiYWxhbmNlczp7fSxuZnRCYWxhbmNlczpuZnRCYWxhbmNlcyxwb3dlcjp7JG51bWJlckRlY2ltYWw6IjAifX0sbWluaW5nUG93ZXI9YXdhaXQgYXBpLmRiLmluc2VydCgibWluaW5nUG93ZXIiLG1pbmluZ1Bvd2VyKX1jb25zdCBuZXdNaW5pbmdQb3dlcj1jb21wdXRlTWluaW5nUG93ZXIobWluaW5nUG93ZXIscG9vbC50b2tlbk1pbmVycyxwb29sLm5mdFRva2VuTWluZXIpO3JldHVybiBtaW5pbmdQb3dlci5wb3dlcj17JG51bWJlckRlY2ltYWw6bmV3TWluaW5nUG93ZXJ9LG1pbmluZ1Bvd2VyLnVwZGF0ZVBvb2xUaW1lc3RhbXA9dXBkYXRlUG9vbFRpbWVzdGFtcCxhd2FpdCBhcGkuZGIudXBkYXRlKCJtaW5pbmdQb3dlciIsbWluaW5nUG93ZXIpLG5ld01pbmluZ1Bvd2VyLm1pbnVzKG9sZE1pbmluZ1Bvd2VyKX1hc3luYyBmdW5jdGlvbiBpbml0TWluaW5nUG93ZXIocG9vbCx1cGRhdGVQb29sVGltZXN0YW1wLHBhcmFtcyx0b2tlbixsYXN0SWQpe2xldCBiYWxhbmNlcyxhZGp1c3RlZFBvd2VyPWFwaS5CaWdOdW1iZXIoMCksb2Zmc2V0PTAsbGFzdElkUHJvY2Vzc2VkPWxhc3RJZCxjb21wbGV0ZT0hMTtmb3IoOyFjb21wbGV0ZSYmb2Zmc2V0PHBhcmFtcy5tYXhCYWxhbmNlc1Byb2Nlc3NlZFBlckJsb2NrOyl7YmFsYW5jZXM9YXdhaXQgYXBpLmRiLmZpbmRJblRhYmxlKCJ0b2tlbnMiLCJiYWxhbmNlcyIse3N5bWJvbDp0b2tlbixfaWQ6eyRndDpsYXN0SWR9fSxwYXJhbXMucHJvY2Vzc1F1ZXJ5TGltaXQsb2Zmc2V0LFt7aW5kZXg6Il9pZCIsZGVzY2VuZGluZzohMX1dKTtmb3IobGV0IGk9MDtpPGJhbGFuY2VzLmxlbmd0aDtpKz0xKXtjb25zdCBiYWxhbmNlPWJhbGFuY2VzW2ldO2lmKGFwaS5CaWdOdW1iZXIoYmFsYW5jZS5zdGFrZSkuZ3QoMCl8fGFwaS5CaWdOdW1iZXIoYmFsYW5jZS5kZWxlZ2F0aW9uc0luKS5ndCgwKSl7Y29uc3QgYWRqdXN0ZWQ9YXdhaXQgdXBkYXRlTWluaW5nUG93ZXIocG9vbCx0b2tlbixiYWxhbmNlLmFjY291bnQsYmFsYW5jZS5zdGFrZSxiYWxhbmNlLmRlbGVnYXRpb25zSW4sdXBkYXRlUG9vbFRpbWVzdGFtcCk7YWRqdXN0ZWRQb3dlcj1hZGp1c3RlZFBvd2VyLnBsdXMoYWRqdXN0ZWQpfWxhc3RJZFByb2Nlc3NlZD1iYWxhbmNlLl9pZH1iYWxhbmNlcy5sZW5ndGg8cGFyYW1zLnByb2Nlc3NRdWVyeUxpbWl0JiYoY29tcGxldGU9ITApLG9mZnNldCs9cGFyYW1zLnByb2Nlc3NRdWVyeUxpbWl0fXJldHVybnthZGp1c3RlZFBvd2VyOmFkanVzdGVkUG93ZXIsbmV4dElkOmxhc3RJZFByb2Nlc3NlZCxjb21wbGV0ZTpjb21wbGV0ZX19YXN5bmMgZnVuY3Rpb24gaW5pdE5mdE1pbmluZ1Bvd2VyKHBvb2wsdXBkYXRlUG9vbFRpbWVzdGFtcCxwYXJhbXMsbmZ0VG9rZW5NaW5lcixsYXN0SWQpe2xldCBuZnRzLGFkanVzdGVkUG93ZXI9YXBpLkJpZ051bWJlcigwKSxvZmZzZXQ9MCxsYXN0SWRQcm9jZXNzZWQ9bGFzdElkLGNvbXBsZXRlPSExO2NvbnN0e3N5bWJvbDpzeW1ib2x9PW5mdFRva2VuTWluZXI7Zm9yKDshY29tcGxldGUmJm9mZnNldDxwYXJhbXMubWF4QmFsYW5jZXNQcm9jZXNzZWRQZXJCbG9jazspe2NvbnN0IG5mdFF1ZXJ5PXtfaWQ6eyRndDpsYXN0SWR9LGRlbGVnYXRlZFRvOnskbmU6bnVsbH0sImRlbGVnYXRlZFRvLnVuZGVsZWdhdGVBdCI6eyRlcTpudWxsfX07bmZ0cz1hd2FpdCBhcGkuZGIuZmluZEluVGFibGUoIm5mdCIsYCR7c3ltYm9sfWluc3RhbmNlc2AsbmZ0UXVlcnkscGFyYW1zLnByb2Nlc3NRdWVyeUxpbWl0LG9mZnNldCxbe2luZGV4OiJfaWQiLGRlc2NlbmRpbmc6ITF9XSk7Zm9yKGxldCBpPTA7aTxuZnRzLmxlbmd0aDtpKz0xKXtjb25zdCBuZnQ9bmZ0c1tpXSxhZGp1c3RlZD1hd2FpdCB1cGRhdGVOZnRNaW5pbmdQb3dlcihwb29sLG5mdCwhMCx1cGRhdGVQb29sVGltZXN0YW1wKTthZGp1c3RlZFBvd2VyPWFkanVzdGVkUG93ZXIucGx1cyhhZGp1c3RlZCksbGFzdElkUHJvY2Vzc2VkPW5mdC5faWR9bmZ0cy5sZW5ndGg8cGFyYW1zLnByb2Nlc3NRdWVyeUxpbWl0JiYoY29tcGxldGU9ITApLG9mZnNldCs9cGFyYW1zLnByb2Nlc3NRdWVyeUxpbWl0fXJldHVybnthZGp1c3RlZFBvd2VyOmFkanVzdGVkUG93ZXIsbmV4dElkOmxhc3RJZFByb2Nlc3NlZCxjb21wbGV0ZTpjb21wbGV0ZX19YXN5bmMgZnVuY3Rpb24gcmVzdW1lUG93ZXJVcGRhdGUocG9vbCxwYXJhbXMpe2xldHtpblByb2dyZXNzOmluUHJvZ3Jlc3MsdG9rZW5JbmRleDp0b2tlbkluZGV4LG5mdFRva2VuSW5kZXg6bmZ0VG9rZW5JbmRleCxsYXN0SWQ6bGFzdElkfT1wb29sLnVwZGF0aW5nO2NvbnN0e3VwZGF0ZVBvb2xUaW1lc3RhbXA6dXBkYXRlUG9vbFRpbWVzdGFtcH09cG9vbC51cGRhdGluZztpZighaW5Qcm9ncmVzcylyZXR1cm47aWYodG9rZW5JbmRleDxwb29sLnRva2VuTWluZXJzLmxlbmd0aCl7Y29uc3QgdG9rZW5Db25maWc9cG9vbC50b2tlbk1pbmVyc1t0b2tlbkluZGV4XSx7YWRqdXN0ZWRQb3dlcjphZGp1c3RlZFBvd2VyLG5leHRJZDpuZXh0SWQsY29tcGxldGU6Y29tcGxldGV9PWF3YWl0IGluaXRNaW5pbmdQb3dlcihwb29sLHVwZGF0ZVBvb2xUaW1lc3RhbXAscGFyYW1zLHRva2VuQ29uZmlnLnN5bWJvbCxsYXN0SWQpO3Bvb2wudG90YWxQb3dlcj1hcGkuQmlnTnVtYmVyKHBvb2wudG90YWxQb3dlcikucGx1cyhhZGp1c3RlZFBvd2VyKSxjb21wbGV0ZT8obGFzdElkPTAsdG9rZW5JbmRleCs9MSk6bGFzdElkPW5leHRJZH1lbHNlIGlmKHBvb2wubmZ0VG9rZW5NaW5lciYmbmZ0VG9rZW5JbmRleDwxKXtjb25zdHtuZnRUb2tlbk1pbmVyOm5mdFRva2VuTWluZXJ9PXBvb2wse2FkanVzdGVkUG93ZXI6YWRqdXN0ZWRQb3dlcixuZXh0SWQ6bmV4dElkLGNvbXBsZXRlOmNvbXBsZXRlfT1hd2FpdCBpbml0TmZ0TWluaW5nUG93ZXIocG9vbCx1cGRhdGVQb29sVGltZXN0YW1wLHBhcmFtcyxuZnRUb2tlbk1pbmVyLGxhc3RJZCk7cG9vbC50b3RhbFBvd2VyPWFwaS5CaWdOdW1iZXIocG9vbC50b3RhbFBvd2VyKS5wbHVzKGFkanVzdGVkUG93ZXIpLGNvbXBsZXRlPyhsYXN0SWQ9MCxuZnRUb2tlbkluZGV4Kz0xKTpsYXN0SWQ9bmV4dElkfXRva2VuSW5kZXghPT1wb29sLnRva2VuTWluZXJzLmxlbmd0aHx8cG9vbC5uZnRUb2tlbk1pbmVyJiYxIT09bmZ0VG9rZW5JbmRleHx8KGluUHJvZ3Jlc3M9ITEsdG9rZW5JbmRleD0wLG5mdFRva2VuSW5kZXg9MCk7Y29uc3R7dXBkYXRpbmc6dXBkYXRpbmd9PXBvb2w7dXBkYXRpbmcuaW5Qcm9ncmVzcz1pblByb2dyZXNzLHVwZGF0aW5nLnRva2VuSW5kZXg9dG9rZW5JbmRleCx1cGRhdGluZy5uZnRUb2tlbkluZGV4PW5mdFRva2VuSW5kZXgsdXBkYXRpbmcubGFzdElkPWxhc3RJZCxhd2FpdCBhcGkuZGIudXBkYXRlKCJwb29scyIscG9vbCl9ZnVuY3Rpb24gZ2VuZXJhdGVQb29sSWQocG9vbCl7Y29uc3QgdG9rZW5NaW5lclN0cmluZz1wb29sLmV4dGVybmFsQ29udHJhY3QmJnBvb2wuZXh0ZXJuYWxNaW5lcnM/YEVYVC0ke3Bvb2wuZXh0ZXJuYWxNaW5lcnMucmVwbGFjZSgiOiIsIiIpfWA6cG9vbC50b2tlbk1pbmVycy5tYXAoKHQ9PnQuc3ltYm9sLnJlcGxhY2UoIi4iLCItIikpKS5zb3J0KCkuam9pbigiLCIpLG5mdFRva2VuTWluZXJTdHJpbmc9cG9vbC5uZnRUb2tlbk1pbmVyP2A6JHtwb29sLm5mdFRva2VuTWluZXIuc3ltYm9sfWA6IiI7cmV0dXJuYCR7cG9vbC5taW5lZFRva2VuLnJlcGxhY2UoIi4iLCItIil9OiR7dG9rZW5NaW5lclN0cmluZ30ke25mdFRva2VuTWluZXJTdHJpbmd9YH1hc3luYyBmdW5jdGlvbiBydW5Mb3R0ZXJ5KHBvb2wscGFyYW1zKXtjb25zdCBibG9ja0RhdGU9bmV3IERhdGUoYCR7YXBpLmhpdmVCbG9ja1RpbWVzdGFtcH0uMDAwWmApLHdpbm5pbmdOdW1iZXJzPVtdLG1pbmVkVG9rZW49YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJ0b2tlbnMiLHtzeW1ib2w6cG9vbC5taW5lZFRva2VufSksd2lubmluZ0Ftb3VudD1hcGkuQmlnTnVtYmVyKHBvb2wubG90dGVyeUFtb3VudCkuZGl2aWRlZEJ5KHBvb2wubG90dGVyeVdpbm5lcnMpLnRvRml4ZWQobWluZWRUb2tlbi5wcmVjaXNpb24sYXBpLkJpZ051bWJlci5ST1VORF9IQUxGX1VQKTtpZihwb29sLmV4dGVybmFsQ29udHJhY3Qpe2lmKCJtYXJrZXRwb29scyI9PT1wb29sLmV4dGVybmFsQ29udHJhY3Qpe2NvbnN0IG1hcmtldHBvb2w9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJtYXJrZXRwb29scyIsInBvb2xzIix7dG9rZW5QYWlyOnBvb2wuZXh0ZXJuYWxNaW5lcnN9KTtmb3IobGV0IGk9MDtpPHBvb2wubG90dGVyeVdpbm5lcnM7aSs9MSl3aW5uaW5nTnVtYmVyc1tpXT1hcGkuQmlnTnVtYmVyKG1hcmtldHBvb2wudG90YWxTaGFyZXMpLm11bHRpcGxpZWRCeShhcGkucmFuZG9tKCkpfX1lbHNlIGZvcihsZXQgaT0wO2k8cG9vbC5sb3R0ZXJ5V2lubmVycztpKz0xKXdpbm5pbmdOdW1iZXJzW2ldPWFwaS5CaWdOdW1iZXIocG9vbC50b3RhbFBvd2VyKS5tdWx0aXBsaWVkQnkoYXBpLnJhbmRvbSgpKTtsZXQgbWluaW5nUG93ZXJzLG9mZnNldD0wLGN1bXVsYXRpdmVQb3dlcj1hcGkuQmlnTnVtYmVyKDApLG5leHRDdW11bGF0aXZlUG93ZXI9YXBpLkJpZ051bWJlcigwKSxjb21wdXRlZFdpbm5lcnM9MDtjb25zdCB3aW5uZXJzPVtdO2Zvcig7Y29tcHV0ZWRXaW5uZXJzPHBvb2wubG90dGVyeVdpbm5lcnM7KXtpZihwb29sLmV4dGVybmFsQ29udHJhY3Qpe2lmKCJtYXJrZXRwb29scyI9PT1wb29sLmV4dGVybmFsQ29udHJhY3Qpe21pbmluZ1Bvd2Vycz1hd2FpdCBhcGkuZGIuZmluZEluVGFibGUoIm1hcmtldHBvb2xzIiwibGlxdWlkaXR5UG9zaXRpb25zIix7dG9rZW5QYWlyOnBvb2wuZXh0ZXJuYWxNaW5lcnN9LHBhcmFtcy5wcm9jZXNzUXVlcnlMaW1pdCxvZmZzZXQsW3tpbmRleDoiX2lkIixkZXNjZW5kaW5nOiExfV0pO2ZvcihsZXQgaT0wO2k8bWluaW5nUG93ZXJzLmxlbmd0aDtpKz0xKW1pbmluZ1Bvd2Vyc1tpXS5wb3dlcj17JG51bWJlckRlY2ltYWw6YXBpLkJpZ051bWJlcihtaW5pbmdQb3dlcnNbaV0uc2hhcmVzKS50b0ZpeGVkKG1pbmVkVG9rZW4ucHJlY2lzaW9uLGFwaS5CaWdOdW1iZXIuUk9VTkRfSEFMRl9VUCl9fX1lbHNlIG1pbmluZ1Bvd2Vycz1hd2FpdCBhcGkuZGIuZmluZCgibWluaW5nUG93ZXIiLHtpZDpwb29sLmlkLHBvd2VyOnskZ3Q6eyRudW1iZXJEZWNpbWFsOiIwIn19fSxwYXJhbXMucHJvY2Vzc1F1ZXJ5TGltaXQsb2Zmc2V0LFt7aW5kZXg6InBvd2VyIixkZXNjZW5kaW5nOiEwfSx7aW5kZXg6Il9pZCIsZGVzY2VuZGluZzohMX1dKTtmb3IobGV0IGk9MDtpPG1pbmluZ1Bvd2Vycy5sZW5ndGg7aSs9MSl7Y29uc3QgbWluaW5nUG93ZXI9bWluaW5nUG93ZXJzW2ldO25leHRDdW11bGF0aXZlUG93ZXI9Y3VtdWxhdGl2ZVBvd2VyLnBsdXMobWluaW5nUG93ZXIucG93ZXIuJG51bWJlckRlY2ltYWwpO2ZvcihsZXQgaj0wO2o8cG9vbC5sb3R0ZXJ5V2lubmVycztqKz0xKXtjb25zdCBjdXJyZW50V2lubmluZ051bWJlcj13aW5uaW5nTnVtYmVyc1tqXTtjdW11bGF0aXZlUG93ZXIubHRlKGN1cnJlbnRXaW5uaW5nTnVtYmVyKSYmbmV4dEN1bXVsYXRpdmVQb3dlci5ndChjdXJyZW50V2lubmluZ051bWJlcikmJihjb21wdXRlZFdpbm5lcnMrPTEsd2lubmVycy5wdXNoKHt3aW5uZXI6bWluaW5nUG93ZXIuYWNjb3VudCx3aW5uaW5nTnVtYmVyOmN1cnJlbnRXaW5uaW5nTnVtYmVyLHdpbm5pbmdBbW91bnQ6d2lubmluZ0Ftb3VudH0pKX1jdW11bGF0aXZlUG93ZXI9bmV4dEN1bXVsYXRpdmVQb3dlcn1pZihjb21wdXRlZFdpbm5lcnM9PT1wb29sLmxvdHRlcnlXaW5uZXJzfHxtaW5pbmdQb3dlcnMubGVuZ3RoPHBhcmFtcy5wcm9jZXNzUXVlcnlMaW1pdClicmVhaztvZmZzZXQrPXBhcmFtcy5wcm9jZXNzUXVlcnlMaW1pdH1hcGkuZW1pdCgibWluaW5nTG90dGVyeSIse3Bvb2xJZDpwb29sLmlkLHdpbm5lcnM6d2lubmVyc30pO2ZvcihsZXQgaT0wO2k8d2lubmVycy5sZW5ndGg7aSs9MSl7Y29uc3Qgd2lubmVyPXdpbm5lcnNbaV07YXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJpc3N1ZSIse3RvOndpbm5lci53aW5uZXIsc3ltYm9sOm1pbmVkVG9rZW4uc3ltYm9sLHF1YW50aXR5Ondpbm5pbmdBbW91bnR9KX1wb29sLm5leHRMb3R0ZXJ5VGltZXN0YW1wPWFwaS5CaWdOdW1iZXIoYmxvY2tEYXRlLmdldFRpbWUoKSkucGx1cygzNjAwKnBvb2wubG90dGVyeUludGVydmFsSG91cnMqMWUzKS50b051bWJlcigpLGF3YWl0IGFwaS5kYi51cGRhdGUoInBvb2xzIixwb29sKX1hY3Rpb25zLnNldEFjdGl2ZT1hc3luYyBwYXlsb2FkPT57Y29uc3R7aWQ6aWQsYWN0aXZlOmFjdGl2ZSxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fT1wYXlsb2FkO2lmKCFhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSlyZXR1cm47Y29uc3QgcG9vbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgicG9vbHMiLHtpZDppZH0pO2lmKCFhcGkuYXNzZXJ0KHBvb2wsInBvb2wgaWQgbm90IGZvdW5kIikpcmV0dXJuO2NvbnN0IG1pbmVkVG9rZW5PYmplY3Q9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJ0b2tlbnMiLHtzeW1ib2w6cG9vbC5taW5lZFRva2VufSk7aWYoIWFwaS5hc3NlcnQobWluZWRUb2tlbk9iamVjdCYmKG1pbmVkVG9rZW5PYmplY3QuaXNzdWVyPT09YXBpLnNlbmRlcnx8IkJFRSI9PT1taW5lZFRva2VuT2JqZWN0LnN5bWJvbCYmYXBpLnNlbmRlcj09PWFwaS5vd25lciksIm11c3QgYmUgaXNzdWVyIG9mIG1pbmVkVG9rZW4iKSlyZXR1cm47Y29uc3R7bmZ0VG9rZW5NaW5lcjpuZnRUb2tlbk1pbmVyfT1wb29sO2lmKG5mdFRva2VuTWluZXIpe2NvbnN0IG5mdFRva2VuUG9vbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0VG9rZW5Qb29scyIse3N5bWJvbDpuZnRUb2tlbk1pbmVyLnN5bWJvbCxpZDpwb29sLmlkfSk7aWYoYWN0aXZlJiYhbmZ0VG9rZW5Qb29sKXtjb25zdCBvdGhlck5mdFRva2VuUG9vbHM9YXdhaXQgYXBpLmRiLmZpbmQoIm5mdFRva2VuUG9vbHMiLHtzeW1ib2w6bmZ0VG9rZW5NaW5lci5zeW1ib2x9KTtpZighYXBpLmFzc2VydCghb3RoZXJOZnRUb2tlblBvb2xzfHxvdGhlck5mdFRva2VuUG9vbHMubGVuZ3RoPDIsImNhbiBoYXZlIGF0IG1vc3QgMiBhY3RpdmUgbmZ0IHRva2VuIHBvb2xzIGZvciBuZnQgdG9rZW4iKSlyZXR1cm47YXdhaXQgYXBpLmRiLmluc2VydCgibmZ0VG9rZW5Qb29scyIse3N5bWJvbDpuZnRUb2tlbk1pbmVyLnN5bWJvbCxpZDpwb29sLmlkfSl9ZWxzZSFhY3RpdmUmJm5mdFRva2VuUG9vbCYmYXdhaXQgYXBpLmRiLnJlbW92ZSgibmZ0VG9rZW5Qb29scyIsbmZ0VG9rZW5Qb29sKX1wb29sLmFjdGl2ZT0hIWFjdGl2ZTtjb25zdCBibG9ja0RhdGU9bmV3IERhdGUoYCR7YXBpLmhpdmVCbG9ja1RpbWVzdGFtcH0uMDAwWmApO3Bvb2wubmV4dExvdHRlcnlUaW1lc3RhbXA9YXBpLkJpZ051bWJlcihibG9ja0RhdGUuZ2V0VGltZSgpKS5wbHVzKDM2MDAqcG9vbC5sb3R0ZXJ5SW50ZXJ2YWxIb3VycyoxZTMpLnRvTnVtYmVyKCksYXdhaXQgYXBpLmRiLnVwZGF0ZSgicG9vbHMiLHBvb2wpfSxhY3Rpb25zLnVwZGF0ZVBvb2w9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2lkOmlkLGxvdHRlcnlXaW5uZXJzOmxvdHRlcnlXaW5uZXJzLGxvdHRlcnlJbnRlcnZhbEhvdXJzOmxvdHRlcnlJbnRlcnZhbEhvdXJzLGxvdHRlcnlBbW91bnQ6bG90dGVyeUFtb3VudCx0b2tlbk1pbmVyczp0b2tlbk1pbmVycyxuZnRUb2tlbk1pbmVyOm5mdFRva2VuTWluZXIsY2FsbGluZ0NvbnRyYWN0SW5mbzpjYWxsaW5nQ29udHJhY3RJbmZvLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9PXBheWxvYWQscGFyYW1zPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KSx7cG9vbFVwZGF0ZUZlZTpwb29sVXBkYXRlRmVlfT1wYXJhbXMsdXRpbGl0eVRva2VuQmFsYW5jZT1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsImJhbGFuY2VzIix7YWNjb3VudDphcGkuc2VuZGVyLHN5bWJvbDoiQkVFIn0pLGF1dGhvcml6ZWQ9ISghYXBpLkJpZ051bWJlcihwb29sVXBkYXRlRmVlKS5sdGUoMCkmJmFwaS5zZW5kZXIhPT1hcGkub3duZXIpfHx1dGlsaXR5VG9rZW5CYWxhbmNlJiZhcGkuQmlnTnVtYmVyKHV0aWxpdHlUb2tlbkJhbGFuY2UuYmFsYW5jZSkuZ3RlKHBvb2xVcGRhdGVGZWUpO2lmKGFwaS5hc3NlcnQoYXV0aG9yaXplZCwieW91IG11c3QgaGF2ZSBlbm91Z2ggdG9rZW5zIHRvIGNvdmVyIHRoZSB1cGRhdGUgZmVlIikmJmFwaS5hc3NlcnQoITA9PT1pc1NpZ25lZFdpdGhBY3RpdmVLZXksInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KGlkJiYic3RyaW5nIj09dHlwZW9mIGlkJiZsb3R0ZXJ5QW1vdW50JiYic3RyaW5nIj09dHlwZW9mIGxvdHRlcnlBbW91bnQmJiFhcGkuQmlnTnVtYmVyKGxvdHRlcnlBbW91bnQpLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIobG90dGVyeUFtb3VudCkuZ3QoMCksImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQoTnVtYmVyLmlzSW50ZWdlcihsb3R0ZXJ5V2lubmVycykmJmxvdHRlcnlXaW5uZXJzPj0xJiZsb3R0ZXJ5V2lubmVyczw9MjAsImludmFsaWQgbG90dGVyeVdpbm5lcnM6IGludGVnZXIgYmV0d2VlbiAxIGFuZCAyMCBvbmx5IikmJmFwaS5hc3NlcnQoTnVtYmVyLmlzSW50ZWdlcihsb3R0ZXJ5SW50ZXJ2YWxIb3VycykmJmxvdHRlcnlJbnRlcnZhbEhvdXJzPj0xJiZsb3R0ZXJ5SW50ZXJ2YWxIb3Vyczw9NzIwLCJpbnZhbGlkIGxvdHRlcnlJbnRlcnZhbEhvdXJzOiBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgNzIwIG9ubHkiKSl7Y29uc3QgcG9vbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgicG9vbHMiLHtpZDppZH0pO2lmKGFwaS5hc3NlcnQocG9vbCwicG9vbCBpZCBub3QgZm91bmQiKSl7Y29uc3QgbWluZWRUb2tlbk9iamVjdD1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpwb29sLm1pbmVkVG9rZW59KTtpZihhcGkuYXNzZXJ0KG1pbmVkVG9rZW5PYmplY3QmJihtaW5lZFRva2VuT2JqZWN0Lmlzc3Vlcj09PWFwaS5zZW5kZXJ8fCJCRUUiPT09bWluZWRUb2tlbk9iamVjdC5zeW1ib2wmJmFwaS5zZW5kZXI9PT1hcGkub3duZXIpLCJtdXN0IGJlIGlzc3VlciBvZiBtaW5lZFRva2VuIikmJmFwaS5hc3NlcnQoYXBpLkJpZ051bWJlcihsb3R0ZXJ5QW1vdW50KS5kcCgpPD1taW5lZFRva2VuT2JqZWN0LnByZWNpc2lvbiwibWluZWRUb2tlbiBwcmVjaXNpb24gbWlzbWF0Y2ggZm9yIGxvdHRlcnlBbW91bnQiKSl7aWYoY2FsbGluZ0NvbnRyYWN0SW5mbylwb29sLmxvdHRlcnlXaW5uZXJzPWxvdHRlcnlXaW5uZXJzLHBvb2wubG90dGVyeUludGVydmFsSG91cnM9bG90dGVyeUludGVydmFsSG91cnMscG9vbC5sb3R0ZXJ5QW1vdW50PWxvdHRlcnlBbW91bnQ7ZWxzZXtjb25zdCB2YWxpZE1pbmVyc0NoYW5nZT1hd2FpdCB2YWxpZGF0ZVRva2VuTWluZXJzQ2hhbmdlKHBvb2wudG9rZW5NaW5lcnMsdG9rZW5NaW5lcnMscG9vbC5uZnRUb2tlbk1pbmVyLG5mdFRva2VuTWluZXIpO2lmKHZhbGlkTWluZXJzQ2hhbmdlKXtwb29sLmxvdHRlcnlXaW5uZXJzPWxvdHRlcnlXaW5uZXJzLHBvb2wubG90dGVyeUludGVydmFsSG91cnM9bG90dGVyeUludGVydmFsSG91cnMscG9vbC5sb3R0ZXJ5QW1vdW50PWxvdHRlcnlBbW91bnQscG9vbC50b2tlbk1pbmVycz10b2tlbk1pbmVycyxwb29sLm5mdFRva2VuTWluZXI9bmZ0VG9rZW5NaW5lcjtjb25zdCBibG9ja0RhdGU9bmV3IERhdGUoYCR7YXBpLmhpdmVCbG9ja1RpbWVzdGFtcH0uMDAwWmApO3ZhbGlkTWluZXJzQ2hhbmdlLmNoYW5nZWQmJihwb29sLnVwZGF0aW5nLnVwZGF0ZVBvb2xUaW1lc3RhbXA9YXBpLkJpZ051bWJlcihibG9ja0RhdGUuZ2V0VGltZSgpKS50b051bWJlcigpLHBvb2wudXBkYXRpbmcuaW5Qcm9ncmVzcz0hMCxwb29sLnVwZGF0aW5nLnRva2VuSW5kZXg9MCxwb29sLnVwZGF0aW5nLm5mdFRva2VuSW5kZXg9MCxwb29sLnVwZGF0aW5nLmxhc3RJZD0wLHBvb2wudG90YWxQb3dlcj0iMCIpLHBvb2wubmV4dExvdHRlcnlUaW1lc3RhbXA9YXBpLkJpZ051bWJlcihibG9ja0RhdGUuZ2V0VGltZSgpKS5wbHVzKDM2MDAqbG90dGVyeUludGVydmFsSG91cnMqMWUzKS50b051bWJlcigpfX1hd2FpdCBhcGkuZGIudXBkYXRlKCJwb29scyIscG9vbCksYXBpLnNlbmRlciE9PWFwaS5vd25lciYmYXBpLkJpZ051bWJlcihwb29sVXBkYXRlRmVlKS5ndCgwKSYmYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlciIse3RvOiJudWxsIixzeW1ib2w6IkJFRSIscXVhbnRpdHk6cG9vbFVwZGF0ZUZlZSxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fSl9fX19LGFjdGlvbnMuY2hhbmdlTmZ0UHJvcGVydHk9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2lkOmlkLHR5cGU6dHlwZSxwcm9wZXJ0eU5hbWU6cHJvcGVydHlOYW1lLGNoYW5nZUFtb3VudDpjaGFuZ2VBbW91bnQsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX09cGF5bG9hZDtpZighYXBpLmFzc2VydChpZCYmInN0cmluZyI9PXR5cGVvZiBpZCYmdHlwZSYmInN0cmluZyI9PXR5cGVvZiB0eXBlJiZwcm9wZXJ0eU5hbWUmJiJzdHJpbmciPT10eXBlb2YgcHJvcGVydHlOYW1lJiZjaGFuZ2VBbW91bnQmJiJzdHJpbmciPT10eXBlb2YgY2hhbmdlQW1vdW50JiYhYXBpLkJpZ051bWJlcihjaGFuZ2VBbW91bnQpLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIoY2hhbmdlQW1vdW50KS5pc0Zpbml0ZSgpLCJpbnZhbGlkIHBhcmFtcyIpKXJldHVybjtpZighYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikpcmV0dXJuO2NvbnN0IHBvb2w9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBvb2xzIix7aWQ6aWR9KTtpZighYXBpLmFzc2VydChwb29sLCJwb29sIGlkIG5vdCBmb3VuZCIpKXJldHVybjtjb25zdCBwcm9wZXJ0eUluZGV4PXBvb2wubmZ0VG9rZW5NaW5lci5wcm9wZXJ0aWVzLmZpbmRJbmRleCgocD0+cC5uYW1lPT09cHJvcGVydHlOYW1lKSkscHJvcGVydHk9cG9vbC5uZnRUb2tlbk1pbmVyLnByb3BlcnRpZXNbcHJvcGVydHlJbmRleF07aWYoIWFwaS5hc3NlcnQocHJvcGVydHkmJnByb3BlcnR5LmJ1cm5DaGFuZ2UsInByb3BlcnR5IG5vdCBlbmFibGVkIGZvciBidXJuIGNoYW5nZSIpKXJldHVybjtjb25zdCB0eXBlUHJvcGVydGllcz1wb29sLm5mdFRva2VuTWluZXIudHlwZU1hcFt0eXBlXTtpZighYXBpLmFzc2VydCh0eXBlUHJvcGVydGllcywidHlwZSBub3QgZm91bmQiKSlyZXR1cm47Y29uc3QgYnVyblN5bWJvbD1wcm9wZXJ0eS5idXJuQ2hhbmdlLnN5bWJvbCx0b2tlbj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpidXJuU3ltYm9sfSksZmVlPWFwaS5CaWdOdW1iZXIoY2hhbmdlQW1vdW50KS5hYnMoKS5tdWx0aXBsaWVkQnkocHJvcGVydHkuYnVybkNoYW5nZS5xdWFudGl0eSk7aWYoIWFwaS5hc3NlcnQoZmVlLmRwKCk8PXRva2VuLnByZWNpc2lvbixgZmVlIHByZWNpc2lvbiBtaXNtYXRjaCBmb3IgYW1vdW50ICR7ZmVlfWApKXJldHVybjtjb25zdCBiYWxhbmNlPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOmJ1cm5TeW1ib2x9KSxhdXRob3JpemVkPWFwaS5CaWdOdW1iZXIoZmVlKS5sdGUoMCl8fGJhbGFuY2UmJmFwaS5CaWdOdW1iZXIoYmFsYW5jZS5iYWxhbmNlKS5ndGUoZmVlKTtpZighYXBpLmFzc2VydChhdXRob3JpemVkLGB5b3UgbXVzdCBoYXZlIGVub3VnaCB0b2tlbnMgdG8gY292ZXIgdGhlIHVwZGF0ZSBmZWUgb2YgJHtmZWV9ICR7YnVyblN5bWJvbH1gKSlyZXR1cm47aWYodHlwZVByb3BlcnRpZXNbcHJvcGVydHlJbmRleF09YXBpLkJpZ051bWJlcih0eXBlUHJvcGVydGllc1twcm9wZXJ0eUluZGV4XSkucGx1cyhjaGFuZ2VBbW91bnQpLCF2YWxpZGF0ZU5mdFR5cGVNYXAocG9vbC5uZnRUb2tlbk1pbmVyLnR5cGVNYXAscG9vbC5uZnRUb2tlbk1pbmVyLnByb3BlcnRpZXMpKXJldHVybjtjb25zdCBibG9ja0RhdGU9bmV3IERhdGUoYCR7YXBpLmhpdmVCbG9ja1RpbWVzdGFtcH0uMDAwWmApO3Bvb2wudXBkYXRpbmcudXBkYXRlUG9vbFRpbWVzdGFtcD1hcGkuQmlnTnVtYmVyKGJsb2NrRGF0ZS5nZXRUaW1lKCkpLnRvTnVtYmVyKCkscG9vbC51cGRhdGluZy5pblByb2dyZXNzPSEwLHBvb2wudXBkYXRpbmcudG9rZW5JbmRleD0wLHBvb2wudXBkYXRpbmcubmZ0VG9rZW5JbmRleD0wLHBvb2wudXBkYXRpbmcubGFzdElkPTAscG9vbC50b3RhbFBvd2VyPSIwIixhd2FpdCBhcGkuZGIudXBkYXRlKCJwb29scyIscG9vbCksYXBpLkJpZ051bWJlcihmZWUpLmd0KDApJiZhd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoInRva2VucyIsInRyYW5zZmVyIix7dG86Im51bGwiLHN5bWJvbDpidXJuU3ltYm9sLHF1YW50aXR5OmZlZSxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fSl9LGFjdGlvbnMuY3JlYXRlUG9vbD1hc3luYyBwYXlsb2FkPT57Y29uc3R7bG90dGVyeVdpbm5lcnM6bG90dGVyeVdpbm5lcnMsbG90dGVyeUludGVydmFsSG91cnM6bG90dGVyeUludGVydmFsSG91cnMsbG90dGVyeUFtb3VudDpsb3R0ZXJ5QW1vdW50LG1pbmVkVG9rZW46bWluZWRUb2tlbix0b2tlbk1pbmVyczp0b2tlbk1pbmVycyxuZnRUb2tlbk1pbmVyOm5mdFRva2VuTWluZXIsZXh0ZXJuYWxNaW5lcnM6ZXh0ZXJuYWxNaW5lcnMsY2FsbGluZ0NvbnRyYWN0SW5mbzpjYWxsaW5nQ29udHJhY3RJbmZvLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9PXBheWxvYWQscGFyYW1zPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KSx7cG9vbENyZWF0aW9uRmVlOnBvb2xDcmVhdGlvbkZlZX09cGFyYW1zO2lmKCEodm9pZCAwPT09ZXh0ZXJuYWxNaW5lcnN8fGFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiBleHRlcm5hbE1pbmVycywiZXh0ZXJuYWxNaW5lcnMgbXVzdCBiZSBhIHN0cmluZyIpJiZhcGkuYXNzZXJ0KGNhbGxpbmdDb250cmFjdEluZm8sIm11c3QgYmUgY2FsbGVkIGZyb20gYSBjb250cmFjdCIpKSlyZXR1cm47Y29uc3QgdXRpbGl0eVRva2VuQmFsYW5jZT1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsImJhbGFuY2VzIix7YWNjb3VudDphcGkuc2VuZGVyLHN5bWJvbDoiQkVFIn0pLGF1dGhvcml6ZWRDcmVhdGlvbj0hKCFhcGkuQmlnTnVtYmVyKHBvb2xDcmVhdGlvbkZlZSkubHRlKDApJiZhcGkuc2VuZGVyIT09YXBpLm93bmVyKXx8dXRpbGl0eVRva2VuQmFsYW5jZSYmYXBpLkJpZ051bWJlcih1dGlsaXR5VG9rZW5CYWxhbmNlLmJhbGFuY2UpLmd0ZShwb29sQ3JlYXRpb25GZWUpO2lmKGFwaS5hc3NlcnQoYXV0aG9yaXplZENyZWF0aW9uLCJ5b3UgbXVzdCBoYXZlIGVub3VnaCB0b2tlbnMgdG8gY292ZXIgdGhlIGNyZWF0aW9uIGZlZSIpJiZhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChtaW5lZFRva2VuJiYic3RyaW5nIj09dHlwZW9mIG1pbmVkVG9rZW4mJmxvdHRlcnlBbW91bnQmJiJzdHJpbmciPT10eXBlb2YgbG90dGVyeUFtb3VudCYmIWFwaS5CaWdOdW1iZXIobG90dGVyeUFtb3VudCkuaXNOYU4oKSYmYXBpLkJpZ051bWJlcihsb3R0ZXJ5QW1vdW50KS5ndCgwKSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChtaW5lZFRva2VuLmxlbmd0aD4wJiZtaW5lZFRva2VuLmxlbmd0aDw9MTAsImludmFsaWQgc3ltYm9sOiB1cHBlcmNhc2UgbGV0dGVycyBvbmx5LCBtYXggbGVuZ3RoIG9mIDEwIikmJmFwaS5hc3NlcnQoTnVtYmVyLmlzSW50ZWdlcihsb3R0ZXJ5V2lubmVycykmJmxvdHRlcnlXaW5uZXJzPj0xJiZsb3R0ZXJ5V2lubmVyczw9MjAsImludmFsaWQgbG90dGVyeVdpbm5lcnM6IGludGVnZXIgYmV0d2VlbiAxIGFuZCAyMCBvbmx5IikmJmFwaS5hc3NlcnQoTnVtYmVyLmlzSW50ZWdlcihsb3R0ZXJ5SW50ZXJ2YWxIb3VycykmJmxvdHRlcnlJbnRlcnZhbEhvdXJzPj0xJiZsb3R0ZXJ5SW50ZXJ2YWxIb3Vyczw9NzIwLCJpbnZhbGlkIGxvdHRlcnlJbnRlcnZhbEhvdXJzOiBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgNzIwIG9ubHkiKSl7Y29uc3QgbWluZWRUb2tlbk9iamVjdD1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDptaW5lZFRva2VufSk7aWYoYXBpLmFzc2VydChtaW5lZFRva2VuT2JqZWN0LCJtaW5lZFRva2VuIGRvZXMgbm90IGV4aXN0IikmJmFwaS5hc3NlcnQobWluZWRUb2tlbk9iamVjdC5pc3N1ZXI9PT1hcGkuc2VuZGVyfHwiQkVFIj09PW1pbmVkVG9rZW5PYmplY3Quc3ltYm9sJiZhcGkuc2VuZGVyPT09YXBpLm93bmVyLCJtdXN0IGJlIGlzc3VlciBvZiBtaW5lZFRva2VuIikmJmFwaS5hc3NlcnQoYXBpLkJpZ051bWJlcihsb3R0ZXJ5QW1vdW50KS5kcCgpPD1taW5lZFRva2VuT2JqZWN0LnByZWNpc2lvbiwibWluZWRUb2tlbiBwcmVjaXNpb24gbWlzbWF0Y2ggZm9yIGxvdHRlcnlBbW91bnQiKSYmKGNhbGxpbmdDb250cmFjdEluZm98fGF3YWl0IHZhbGlkYXRlVG9rZW5NaW5lcnModG9rZW5NaW5lcnMsbmZ0VG9rZW5NaW5lcikpKXtjb25zdCBibG9ja0RhdGU9bmV3IERhdGUoYCR7YXBpLmhpdmVCbG9ja1RpbWVzdGFtcH0uMDAwWmApLG5ld1Bvb2w9e21pbmVkVG9rZW46bWluZWRUb2tlbixsb3R0ZXJ5V2lubmVyczpsb3R0ZXJ5V2lubmVycyxsb3R0ZXJ5SW50ZXJ2YWxIb3Vyczpsb3R0ZXJ5SW50ZXJ2YWxIb3Vycyxsb3R0ZXJ5QW1vdW50OmxvdHRlcnlBbW91bnQsdG9rZW5NaW5lcnM6dG9rZW5NaW5lcnN8fFtdLG5mdFRva2VuTWluZXI6bmZ0VG9rZW5NaW5lcixhY3RpdmU6ITEsbmV4dExvdHRlcnlUaW1lc3RhbXA6YXBpLkJpZ051bWJlcihibG9ja0RhdGUuZ2V0VGltZSgpKS5wbHVzKDM2MDAqbG90dGVyeUludGVydmFsSG91cnMqMWUzKS50b051bWJlcigpLHRvdGFsUG93ZXI6IjAifTtpZihjYWxsaW5nQ29udHJhY3RJbmZvKXtpZighYXBpLmFzc2VydCghbmZ0VG9rZW5NaW5lciwiZXh0ZXJuYWwgbmZ0VG9rZW5NaW5lciBub3QgY3VycmVudGx5IHN1cHBvcnRlZCIpKXJldHVybjtuZXdQb29sLmV4dGVybmFsQ29udHJhY3Q9Y2FsbGluZ0NvbnRyYWN0SW5mby5uYW1lLG5ld1Bvb2wuZXh0ZXJuYWxNaW5lcnM9ZXh0ZXJuYWxNaW5lcnN9bmV3UG9vbC5pZD1nZW5lcmF0ZVBvb2xJZChuZXdQb29sKTtjb25zdCBleGlzdGluZ1Bvb2w9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBvb2xzIix7aWQ6bmV3UG9vbC5pZH0pO2lmKGFwaS5hc3NlcnQoIWV4aXN0aW5nUG9vbCwicG9vbCBhbHJlYWR5IGV4aXN0cyIpKXtpZih0b2tlbk1pbmVycylmb3IobGV0IGk9MDtpPHRva2VuTWluZXJzLmxlbmd0aDtpKz0xKXtjb25zdCB0b2tlbkNvbmZpZz10b2tlbk1pbmVyc1tpXTthd2FpdCBhcGkuZGIuaW5zZXJ0KCJ0b2tlblBvb2xzIix7c3ltYm9sOnRva2VuQ29uZmlnLnN5bWJvbCxpZDpuZXdQb29sLmlkfSl9bmV3UG9vbC51cGRhdGluZz17aW5Qcm9ncmVzczohMCx1cGRhdGVQb29sVGltZXN0YW1wOmFwaS5CaWdOdW1iZXIoYmxvY2tEYXRlLmdldFRpbWUoKSkudG9OdW1iZXIoKSx0b2tlbkluZGV4OjAsbmZ0VG9rZW5JbmRleDowLGxhc3RJZDowfTtjb25zdCBpbnNlcnRlZFBvb2w9YXdhaXQgYXBpLmRiLmluc2VydCgicG9vbHMiLG5ld1Bvb2wpO2FwaS5zZW5kZXIhPT1hcGkub3duZXImJmFwaS5CaWdOdW1iZXIocG9vbENyZWF0aW9uRmVlKS5ndCgwKSYmYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlciIse3RvOiJudWxsIixzeW1ib2w6IkJFRSIscXVhbnRpdHk6cG9vbENyZWF0aW9uRmVlLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9KSxhcGkuZW1pdCgiY3JlYXRlUG9vbCIse2lkOmluc2VydGVkUG9vbC5pZH0pfX19fSxhY3Rpb25zLmNoZWNrUGVuZGluZ0xvdHRlcmllcz1hc3luYygpPT57aWYoYXBpLmFzc2VydCgibnVsbCI9PT1hcGkuc2VuZGVyLCJub3QgYXV0aG9yaXplZCIpKXtjb25zdCB0aW1lc3RhbXA9bmV3IERhdGUoYCR7YXBpLmhpdmVCbG9ja1RpbWVzdGFtcH0uMDAwWmApLmdldFRpbWUoKSxwYXJhbXM9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pLHVwZGF0aW5nTG90dGVyaWVzPWF3YWl0IGFwaS5kYi5maW5kKCJwb29scyIseyJ1cGRhdGluZy5pblByb2dyZXNzIjohMH0scGFyYW1zLm1heExvdHRlcmllc1BlckJsb2NrLDAsW3tpbmRleDoiaWQiLGRlc2NlbmRpbmc6ITF9XSk7Zm9yKGxldCBpPTA7aTx1cGRhdGluZ0xvdHRlcmllcy5sZW5ndGg7aSs9MSl7Y29uc3QgcG9vbD11cGRhdGluZ0xvdHRlcmllc1tpXTthd2FpdCByZXN1bWVQb3dlclVwZGF0ZShwb29sLHBhcmFtcyl9Y29uc3QgcGVuZGluZ0xvdHRlcmllcz1hd2FpdCBhcGkuZGIuZmluZCgicG9vbHMiLHthY3RpdmU6ITAsInVwZGF0aW5nLmluUHJvZ3Jlc3MiOiExLG5leHRMb3R0ZXJ5VGltZXN0YW1wOnskbHRlOnRpbWVzdGFtcH19LHBhcmFtcy5tYXhMb3R0ZXJpZXNQZXJCbG9jaywwLFt7aW5kZXg6ImlkIixkZXNjZW5kaW5nOiExfV0pO2ZvcihsZXQgaT0wO2k8cGVuZGluZ0xvdHRlcmllcy5sZW5ndGg7aSs9MSl7Y29uc3QgcG9vbD1wZW5kaW5nTG90dGVyaWVzW2ldO2F3YWl0IHJ1bkxvdHRlcnkocG9vbCxwYXJhbXMpfX19LGFjdGlvbnMuaGFuZGxlU3Rha2VDaGFuZ2U9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2FjY291bnQ6YWNjb3VudCxzeW1ib2w6c3ltYm9sLHF1YW50aXR5OnF1YW50aXR5LGRlbGVnYXRlZDpkZWxlZ2F0ZWQsY2FsbGluZ0NvbnRyYWN0SW5mbzpjYWxsaW5nQ29udHJhY3RJbmZvfT1wYXlsb2FkO2FwaS5hc3NlcnQoY2FsbGluZ0NvbnRyYWN0SW5mbyYmInRva2VucyI9PT1jYWxsaW5nQ29udHJhY3RJbmZvLm5hbWUsIm11c3QgYmUgY2FsbGVkIGZyb20gdG9rZW5zIGNvbnRyYWN0IikmJmF3YWl0IGZpbmRBbmRQcm9jZXNzQWxsKCJtaW5pbmciLCJ0b2tlblBvb2xzIix7c3ltYm9sOnN5bWJvbH0sKGFzeW5jIHRva2VuUG9vbD0+e2NvbnN0IHBvb2w9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBvb2xzIix7aWQ6dG9rZW5Qb29sLmlkfSk7bGV0IGFkanVzdGVkO2FkanVzdGVkPWRlbGVnYXRlZD9hd2FpdCB1cGRhdGVNaW5pbmdQb3dlcihwb29sLHN5bWJvbCxhY2NvdW50LDAscXVhbnRpdHkpOmF3YWl0IHVwZGF0ZU1pbmluZ1Bvd2VyKHBvb2wsc3ltYm9sLGFjY291bnQscXVhbnRpdHksMCkscG9vbC50b3RhbFBvd2VyPWFkanVzdGVkLnBsdXMocG9vbC50b3RhbFBvd2VyKSxhd2FpdCBhcGkuZGIudXBkYXRlKCJwb29scyIscG9vbCl9KSl9LGFjdGlvbnMuaGFuZGxlTmZ0Q2hhbmdlPWFzeW5jKCk9Pnt9LGFjdGlvbnMuaGFuZGxlTmZ0RGVsZWdhdGlvbkNoYW5nZT1hc3luYyBwYXlsb2FkPT57Y29uc3R7c3ltYm9sOnN5bWJvbCxuZnQ6bmZ0LGFkZDphZGQsY2FsbGluZ0NvbnRyYWN0SW5mbzpjYWxsaW5nQ29udHJhY3RJbmZvfT1wYXlsb2FkO2FwaS5hc3NlcnQoY2FsbGluZ0NvbnRyYWN0SW5mbyYmIm5mdCI9PT1jYWxsaW5nQ29udHJhY3RJbmZvLm5hbWUsIm11c3QgYmUgY2FsbGVkIGZyb20gbmZ0IGNvbnRyYWN0IikmJmF3YWl0IGZpbmRBbmRQcm9jZXNzQWxsKCJtaW5pbmciLCJuZnRUb2tlblBvb2xzIix7c3ltYm9sOnN5bWJvbH0sKGFzeW5jIHRva2VuUG9vbD0+e2NvbnN0IHBvb2w9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBvb2xzIix7aWQ6dG9rZW5Qb29sLmlkfSk7aWYocG9vbC51cGRhdGluZy5pblByb2dyZXNzJiZwb29sLnVwZGF0aW5nLnRva2VuSW5kZXg9PT1wb29sLnRva2VuTWluZXJzLmxlbmd0aCYmcG9vbC51cGRhdGluZy5sYXN0SWQ8bmZ0Ll9pZClyZXR1cm47aWYoIXBvb2wuYWN0aXZlKXJldHVybjtpZighcG9vbC5uZnRUb2tlbk1pbmVyKXJldHVybjtjb25zdHt0eXBlRmllbGQ6dHlwZUZpZWxkLHR5cGVNYXA6dHlwZU1hcH09cG9vbC5uZnRUb2tlbk1pbmVyO2lmKHR5cGVNYXBbbmZ0LnByb3BlcnRpZXNbdHlwZUZpZWxkXV0pe2NvbnN0IGFkanVzdGVkPWF3YWl0IHVwZGF0ZU5mdE1pbmluZ1Bvd2VyKHBvb2wsbmZ0LGFkZCxwb29sLnVwZGF0aW5nLnVwZGF0ZVBvb2xUaW1lc3RhbXApO3Bvb2wudG90YWxQb3dlcj1hZGp1c3RlZC5wbHVzKHBvb2wudG90YWxQb3dlciksYXdhaXQgYXBpLmRiLnVwZGF0ZSgicG9vbHMiLHBvb2wpfX0pKX0sYWN0aW9ucy5oYW5kbGVOZnRTZXRQcm9wZXJ0eT1hc3luYyBwYXlsb2FkPT57fTs="}}}