Mining Smart Contract

Words
1
Reading
1 min
Listen
Play
5y

{"id":"ssc-mainnet-hive","json":{"contractName":"contract","contractAction":"update","contractPayload":{"name":"mining","params":"","code":"Y29uc3QgTUFYX0RJR0lUUz0yMCxQUk9QRVJUWV9PUFM9e0FERDp7YWRkOih4LHkpPT5hcGkuQmlnTnVtYmVyKHgpLnBsdXMoeSkscmVtb3ZlOih4LHkpPT5hcGkuQmlnTnVtYmVyKHgpLm1pbnVzKHkpLGRlZmF1bHRWYWx1ZTowfSxNVUxUSVBMWTp7YWRkOih4LHkpPT5hcGkuQmlnTnVtYmVyKHgpLm11bHRpcGxpZWRCeSh5KS5kcCgyMCkscmVtb3ZlOih4LHkpPT5hcGkuQmlnTnVtYmVyKHgpLmRpdmlkZWRCeSh5KS5kcCgyMCksZGVmYXVsdFZhbHVlOjF9fSxNSU5JTkdfUE9XRVJfRklFTERfSU5ERVg9Il9taW5pbmdQb3dlciI7YWN0aW9ucy5jcmVhdGVTU0M9YXN5bmMoKT0+e2lmKCExPT09YXdhaXQgYXBpLmRiLnRhYmxlRXhpc3RzKCJtaW5pbmdQb3dlciIpKXthd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoIm1pbmluZ1Bvd2VyIixbImlkIiwicG93ZXIiXSksYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCJwb29scyIsWyJpZCJdKSxhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoInRva2VuUG9vbHMiLFsic3ltYm9sIl0pLGF3YWl0IGFwaS5kYi5jcmVhdGVUYWJsZSgibmZ0VG9rZW5Qb29scyIsWyJzeW1ib2wiXSksYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCJwYXJhbXMiKTtjb25zdCBwYXJhbXM9e3Bvb2xDcmVhdGlvbkZlZToiMTAwMCIscG9vbFVwZGF0ZUZlZToiMzAwIixtYXhMb3R0ZXJpZXNQZXJCbG9jazoyMCxtYXhCYWxhbmNlc1Byb2Nlc3NlZFBlckJsb2NrOjFlNCxwcm9jZXNzUXVlcnlMaW1pdDoxZTN9O2F3YWl0IGFwaS5kYi5pbnNlcnQoInBhcmFtcyIscGFyYW1zKX1lbHNle2NvbnN0IHBhcmFtcz1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSk7cGFyYW1zLnVwZGF0ZUluZGV4fHwoYXdhaXQgYXBpLmRiLmFkZEluZGV4ZXMoIm1pbmluZ1Bvd2VyIixbe25hbWU6ImJ5UG9vbElkQW5kQWNjb3VudCIsaW5kZXg6e2lkOjEsYWNjb3VudDoxfX1dKSxwYXJhbXMudXBkYXRlSW5kZXg9MSxhd2FpdCBhcGkuZGIudXBkYXRlKCJwYXJhbXMiLHBhcmFtcykpfX0sYWN0aW9ucy51cGRhdGVQYXJhbXM9YXN5bmMgcGF5bG9hZD0+e2lmKGFwaS5zZW5kZXIhPT1hcGkub3duZXIpcmV0dXJuO2NvbnN0e3Bvb2xDcmVhdGlvbkZlZTpwb29sQ3JlYXRpb25GZWUscG9vbFVwZGF0ZUZlZTpwb29sVXBkYXRlRmVlLG1heExvdHRlcmllc1BlckJsb2NrOm1heExvdHRlcmllc1BlckJsb2NrLG1heEJhbGFuY2VzUHJvY2Vzc2VkUGVyQmxvY2s6bWF4QmFsYW5jZXNQcm9jZXNzZWRQZXJCbG9jayxwcm9jZXNzUXVlcnlMaW1pdDpwcm9jZXNzUXVlcnlMaW1pdH09cGF5bG9hZCxwYXJhbXM9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pO2lmKHBvb2xDcmVhdGlvbkZlZSl7aWYoIWFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiBwb29sQ3JlYXRpb25GZWUmJiFhcGkuQmlnTnVtYmVyKHBvb2xDcmVhdGlvbkZlZSkuaXNOYU4oKSYmYXBpLkJpZ051bWJlcihwb29sQ3JlYXRpb25GZWUpLmd0ZSgwKSwiaW52YWxpZCBwb29sQ3JlYXRpb25GZWUiKSlyZXR1cm47cGFyYW1zLnBvb2xDcmVhdGlvbkZlZT1wb29sQ3JlYXRpb25GZWV9aWYocG9vbFVwZGF0ZUZlZSl7aWYoIWFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiBwb29sVXBkYXRlRmVlJiYhYXBpLkJpZ051bWJlcihwb29sVXBkYXRlRmVlKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKHBvb2xVcGRhdGVGZWUpLmd0ZSgwKSwiaW52YWxpZCBwb29sVXBkYXRlRmVlIikpcmV0dXJuO3BhcmFtcy5wb29sVXBkYXRlRmVlPXBvb2xVcGRhdGVGZWV9aWYobWF4TG90dGVyaWVzUGVyQmxvY2spe2lmKCFhcGkuYXNzZXJ0KE51bWJlci5pc0ludGVnZXIobWF4TG90dGVyaWVzUGVyQmxvY2spJiZtYXhMb3R0ZXJpZXNQZXJCbG9jaz49MSwiaW52YWxpZCBtYXhMb3R0ZXJpZXNQZXJCbG9jayIpKXJldHVybjtwYXJhbXMubWF4TG90dGVyaWVzUGVyQmxvY2s9bWF4TG90dGVyaWVzUGVyQmxvY2t9aWYobWF4QmFsYW5jZXNQcm9jZXNzZWRQZXJCbG9jayl7aWYoIWFwaS5hc3NlcnQoTnVtYmVyLmlzSW50ZWdlcihtYXhCYWxhbmNlc1Byb2Nlc3NlZFBlckJsb2NrKSYmbWF4QmFsYW5jZXNQcm9jZXNzZWRQZXJCbG9jaz49MSwiaW52YWxpZCBtYXhCYWxhbmNlc1Byb2Nlc3NlZFBlckJsb2NrIikpcmV0dXJuO3BhcmFtcy5tYXhCYWxhbmNlc1Byb2Nlc3NlZFBlckJsb2NrPW1heEJhbGFuY2VzUHJvY2Vzc2VkUGVyQmxvY2t9aWYocHJvY2Vzc1F1ZXJ5TGltaXQpe2lmKCFhcGkuYXNzZXJ0KE51bWJlci5pc0ludGVnZXIocHJvY2Vzc1F1ZXJ5TGltaXQpJiZwcm9jZXNzUXVlcnlMaW1pdD49MSwiaW52YWxpZCBwcm9jZXNzUXVlcnlMaW1pdCIpKXJldHVybjtwYXJhbXMucHJvY2Vzc1F1ZXJ5TGltaXQ9cHJvY2Vzc1F1ZXJ5TGltaXR9YXdhaXQgYXBpLmRiLnVwZGF0ZSgicGFyYW1zIixwYXJhbXMpfTtjb25zdCBmaW5kQW5kUHJvY2Vzc0FsbD1hc3luYyhjb250cmFjdE5hbWUsdGFibGUscXVlcnksY2FsbGJhY2spPT57bGV0IG9mZnNldD0wLHJlc3VsdHM9W10sZG9uZT0hMTtmb3IoOyFkb25lOylpZihyZXN1bHRzPWF3YWl0IGFwaS5kYi5maW5kSW5UYWJsZShjb250cmFjdE5hbWUsdGFibGUscXVlcnksMWUzLG9mZnNldCkscmVzdWx0cyl7Zm9yKGxldCBpPTA7aTxyZXN1bHRzLmxlbmd0aDtpKz0xKWF3YWl0IGNhbGxiYWNrKHJlc3VsdHNbaV0pO3Jlc3VsdHMubGVuZ3RoPDFlMz9kb25lPSEwOm9mZnNldCs9MWUzfX07YXN5bmMgZnVuY3Rpb24gdmFsaWRhdGVOZnRQcm9wZXJ0aWVzKHByb3BlcnRpZXMpe2lmKCFhcGkuYXNzZXJ0KHByb3BlcnRpZXMmJkFycmF5LmlzQXJyYXkocHJvcGVydGllcyksImludmFsaWQgbmZ0VG9rZW5NaW5lciBwcm9wZXJ0aWVzIikpcmV0dXJuITE7aWYoIWFwaS5hc3NlcnQocHJvcGVydGllcy5sZW5ndGg+MCYmcHJvcGVydGllcy5sZW5ndGg8PTQsIm5mdFRva2VuTWluZXIgcHJvcGVydGllcyBzaXplIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA0IikpcmV0dXJuITE7Zm9yKGxldCBpPTA7aTxwcm9wZXJ0aWVzLmxlbmd0aDtpKz0xKXtjb25zdCBwcm9wPXByb3BlcnRpZXNbaV0scHJvcEtleXM9T2JqZWN0LmtleXMocHJvcCk7Zm9yKGxldCBqPTA7ajxwcm9wS2V5cy5sZW5ndGg7ais9MSl7Y29uc3QgcHJvcEtleT1wcm9wS2V5c1tqXTtpZigib3AiPT09cHJvcEtleSl7aWYoIWFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiBwcm9wLm9wJiZQUk9QRVJUWV9PUFNbcHJvcC5vcF0sIm5mdFRva2VuTWluZXIgcHJvcGVydGllcyBvcCBzaG91bGQgYmUgQUREIG9yIE1VTFRJUExZIikpcmV0dXJuITF9ZWxzZSBpZigibmFtZSI9PT1wcm9wS2V5KXtpZighYXBpLmFzc2VydCgic3RyaW5nIj09dHlwZW9mIHByb3AubmFtZSYmcHJvcC5uYW1lLmxlbmd0aDw9MTYsIm5mdFRva2VuTWluZXIgcHJvcGVydGllcyBuYW1lIHNob3VsZCBiZSBhIHN0cmluZyBvZiBsZW5ndGggPD0gMTYiKSlyZXR1cm4hMX1lbHNle2lmKCJidXJuQ2hhbmdlIiE9PXByb3BLZXkpcmV0dXJuIGFwaS5hc3NlcnQoITEsIm5mdFRva2VuTWluZXIgcHJvcGVydGllcyBmaWVsZCBpbnZhbGlkIiksITE7e2lmKCFhcGkuYXNzZXJ0KCJvYmplY3QiPT10eXBlb2YgcHJvcC5idXJuQ2hhbmdlJiYic3RyaW5nIj09dHlwZW9mIHByb3AuYnVybkNoYW5nZS5zeW1ib2wmJmFwaS5CaWdOdW1iZXIocHJvcC5idXJuQ2hhbmdlLnF1YW50aXR5KS5pc0Zpbml0ZSgpJiZhcGkuQmlnTnVtYmVyKHByb3AuYnVybkNoYW5nZS5xdWFudGl0eSkuaXNQb3NpdGl2ZSgpLCJuZnRUb2tlbk1pbmVyIHByb3BlcnRpZXMgYnVybkNoYW5nZSBpbnZhbGlkIikpcmV0dXJuITE7Y29uc3QgdG9rZW49YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJ0b2tlbnMiLHtzeW1ib2w6cHJvcC5idXJuQ2hhbmdlLnN5bWJvbH0pO2lmKCFhcGkuYXNzZXJ0KHRva2VuLCJuZnRUb2tlbk1pbmVyIHByb3BlcnRpZXMgYnVybkNoYW5nZSBzeW1ib2wgbm90IGZvdW5kIikpcmV0dXJuITF9fX19cmV0dXJuITB9ZnVuY3Rpb24gdmFsaWRhdGVOZnRUeXBlTWFwKHR5cGVNYXAscHJvcGVydGllcyl7aWYoIWFwaS5hc3NlcnQodHlwZU1hcCYmIm9iamVjdCI9PXR5cGVvZiB0eXBlTWFwLCJpbnZhbGlkIG5mdFRva2VuTWluZXIgdHlwZU1hcCIpKXJldHVybiExO2NvbnN0IHR5cGVzPU9iamVjdC5rZXlzKHR5cGVNYXApO2ZvcihsZXQgaj0wO2o8dHlwZXMubGVuZ3RoO2orPTEpe2NvbnN0IHR5cGVDb25maWc9dHlwZU1hcFt0eXBlc1tqXV07aWYoIWFwaS5hc3NlcnQoQXJyYXkuaXNBcnJheSh0eXBlQ29uZmlnKSYmdHlwZUNvbmZpZy5sZW5ndGg9PT1wcm9wZXJ0aWVzLmxlbmd0aCwibmZ0VG9rZW5NaW5lciB0eXBlQ29uZmlnIGxlbmd0aCBtaXNtYXRjaCIpKXJldHVybiExO2ZvcihsZXQgaz0wO2s8dHlwZUNvbmZpZy5sZW5ndGg7ays9MSl7Y29uc3QgdHlwZVByb3BlcnR5PWFwaS5CaWdOdW1iZXIodHlwZUNvbmZpZ1trXSk7aWYoIWFwaS5hc3NlcnQoIXR5cGVQcm9wZXJ0eS5pc05hTigpJiZ0eXBlUHJvcGVydHkuaXNGaW5pdGUoKSwibmZ0VG9rZW5NaW5lciB0eXBlQ29uZmlnIGludmFsaWQiKSlyZXR1cm4hMTtpZigiTVVMVElQTFkiPT09cHJvcGVydGllc1trXS5vcCYmIWFwaS5hc3NlcnQodHlwZVByb3BlcnR5Lmd0ZSguMDEpJiZ0eXBlUHJvcGVydHkubHRlKDEwMCksIm5mdFRva2VuTWluZXIgdHlwZUNvbmZpZyBNVUxUSVBMWSBwcm9wZXJ0eSBzaG91bGQgYmUgYmV0d2VlbiAwLjAxIGFuZCAxMDAiKSlyZXR1cm4hMX19cmV0dXJuITB9YXN5bmMgZnVuY3Rpb24gdmFsaWRhdGVUb2tlbk1pbmVycyh0b2tlbk1pbmVycyxuZnRUb2tlbk1pbmVyKXtpZighYXBpLmFzc2VydCh0b2tlbk1pbmVycyYmQXJyYXkuaXNBcnJheSh0b2tlbk1pbmVycyksInRva2VuTWluZXJzIGludmFsaWQiKSlyZXR1cm4hMTtpZighYXBpLmFzc2VydCh0b2tlbk1pbmVycy5sZW5ndGg+PTEmJnRva2VuTWluZXJzLmxlbmd0aDw9Mnx8bmZ0VG9rZW5NaW5lciYmMD09PXRva2VuTWluZXJzLmxlbmd0aCwib25seSAxIG9yIDIgdG9rZW5NaW5lcnMgYWxsb3dlZCIpKXJldHVybiExO2NvbnN0IHRva2VuTWluZXJTeW1ib2xzPW5ldyBTZXQ7Zm9yKGxldCBpPTA7aTx0b2tlbk1pbmVycy5sZW5ndGg7aSs9MSl7Y29uc3QgdG9rZW5NaW5lckNvbmZpZz10b2tlbk1pbmVyc1tpXTtpZighYXBpLmFzc2VydCh0b2tlbk1pbmVyQ29uZmlnJiZ0b2tlbk1pbmVyQ29uZmlnLnN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiB0b2tlbk1pbmVyQ29uZmlnLnN5bWJvbCwidG9rZW5NaW5lcnMgaW52YWxpZCIpKXJldHVybiExO2lmKCFhcGkuYXNzZXJ0KCF0b2tlbk1pbmVyU3ltYm9scy5oYXModG9rZW5NaW5lckNvbmZpZy5zeW1ib2wpLCJ0b2tlbk1pbmVycyBjYW5ub3QgaGF2ZSBkdXBsaWNhdGUgc3ltYm9scyIpKXJldHVybiExO3Rva2VuTWluZXJTeW1ib2xzLmFkZCh0b2tlbk1pbmVyQ29uZmlnLnN5bWJvbCk7Y29uc3R7c3ltYm9sOnN5bWJvbH09dG9rZW5NaW5lckNvbmZpZyx0b2tlbj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpzeW1ib2x9KTtpZighYXBpLmFzc2VydCh0b2tlbiYmdG9rZW4uc3Rha2luZ0VuYWJsZWQsInRva2VuTWluZXJzIG11c3QgaGF2ZSBzdGFraW5nIGVuYWJsZWQiKSlyZXR1cm4hMTtpZighYXBpLmFzc2VydChOdW1iZXIuaXNJbnRlZ2VyKHRva2VuTWluZXJDb25maWcubXVsdGlwbGllcikmJnRva2VuTWluZXJDb25maWcubXVsdGlwbGllcj49MSYmdG9rZW5NaW5lckNvbmZpZy5tdWx0aXBsaWVyPD0xMDAsInRva2VuTWluZXIgbXVsdGlwbGllciBtdXN0IGJlIGFuIGludGVnZXIgZnJvbSAxIHRvIDEwMCIpKXJldHVybiExfWlmKG5mdFRva2VuTWluZXIpe2lmKCFhcGkuYXNzZXJ0KG5mdFRva2VuTWluZXIuc3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIG5mdFRva2VuTWluZXIuc3ltYm9sLCJuZnRUb2tlbk1pbmVyIGludmFsaWQiKSlyZXR1cm4hMTtjb25zdHtzeW1ib2w6c3ltYm9sLHR5cGVNYXA6dHlwZU1hcCxwcm9wZXJ0aWVzOnByb3BlcnRpZXMsdHlwZUZpZWxkOnR5cGVGaWVsZCxlcXVpcEZpZWxkOmVxdWlwRmllbGQsbWluaW5nUG93ZXJGaWVsZDptaW5pbmdQb3dlckZpZWxkfT1uZnRUb2tlbk1pbmVyLG5mdD1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoIm5mdCIsIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7aWYoIWFwaS5hc3NlcnQobmZ0JiZuZnQuZGVsZWdhdGlvbkVuYWJsZWQsIm5mdFRva2VuTWluZXIgbXVzdCBoYXZlIGRlbGVnYXRpb24gZW5hYmxlZCIpKXJldHVybiExO2lmKCFhcGkuYXNzZXJ0KHR5cGVGaWVsZCYmInN0cmluZyI9PXR5cGVvZiB0eXBlRmllbGQsInR5cGVGaWVsZCBtdXN0IGJlIGEgc3RyaW5nIikpcmV0dXJuITE7aWYoIWFwaS5hc3NlcnQobmZ0LnByb3BlcnRpZXNbdHlwZUZpZWxkXSYmInN0cmluZyI9PT1uZnQucHJvcGVydGllc1t0eXBlRmllbGRdLnR5cGUsIm5mdFRva2VuTWluZXIgbXVzdCBoYXZlIHN0cmluZyB0eXBlIHByb3BlcnR5IikpcmV0dXJuITE7aWYodm9pZCAwIT09ZXF1aXBGaWVsZCl7aWYoIWFwaS5hc3NlcnQoZXF1aXBGaWVsZCYmInN0cmluZyI9PXR5cGVvZiBlcXVpcEZpZWxkLCJlcXVpcEZpZWxkIG11c3QgYmUgYSBzdHJpbmciKSlyZXR1cm4hMTtpZighYXBpLmFzc2VydChuZnQucHJvcGVydGllc1tlcXVpcEZpZWxkXSYmInN0cmluZyI9PT1uZnQucHJvcGVydGllc1tlcXVpcEZpZWxkXS50eXBlLCJuZnRUb2tlbk1pbmVyIG11c3QgaGF2ZSBzdHJpbmcgZXF1aXAgcHJvcGVydHkiKSlyZXR1cm4hMX1pZih2b2lkIDAhPT1taW5pbmdQb3dlckZpZWxkKXtpZighYXBpLmFzc2VydChtaW5pbmdQb3dlckZpZWxkJiYic3RyaW5nIj09dHlwZW9mIG1pbmluZ1Bvd2VyRmllbGQsIm1pbmluZ1Bvd2VyRmllbGQgbXVzdCBiZSBhIHN0cmluZyIpKXJldHVybiExO2lmKCFhcGkuYXNzZXJ0KG5mdC5wcm9wZXJ0aWVzW21pbmluZ1Bvd2VyRmllbGRdJiYic3RyaW5nIj09PW5mdC5wcm9wZXJ0aWVzW21pbmluZ1Bvd2VyRmllbGRdLnR5cGUsIm5mdFRva2VuTWluZXIgbXVzdCBoYXZlIHN0cmluZyBtaW5pbmdQb3dlciBwcm9wZXJ0eSIpKXJldHVybiExfWlmKCFhd2FpdCB2YWxpZGF0ZU5mdFByb3BlcnRpZXMocHJvcGVydGllcykpcmV0dXJuITE7aWYoIXZhbGlkYXRlTmZ0VHlwZU1hcCh0eXBlTWFwLHByb3BlcnRpZXMpKXJldHVybiExfXJldHVybiEwfWFzeW5jIGZ1bmN0aW9uIHZhbGlkYXRlVG9rZW5NaW5lcnNDaGFuZ2Uob2xkVG9rZW5NaW5lcnMsdG9rZW5NaW5lcnMsb2xkTmZ0VG9rZW5NaW5lcixuZnRUb2tlbk1pbmVyKXtpZighYXBpLmFzc2VydCh0b2tlbk1pbmVycy5sZW5ndGg9PT1vbGRUb2tlbk1pbmVycy5sZW5ndGgsImNhbm5vdCBjaGFuZ2Ugd2hpY2ggdG9rZW5zIGFyZSBpbiB0b2tlbk1pbmVycyIpKXJldHVybiExO2xldCBjaGFuZ2VkPSExO2ZvcihsZXQgaT0wO2k8dG9rZW5NaW5lcnMubGVuZ3RoO2krPTEpe2NvbnN0IG9sZENvbmZpZz1vbGRUb2tlbk1pbmVyc1tpXSxuZXdDb25maWc9dG9rZW5NaW5lcnNbaV07aWYoIWFwaS5hc3NlcnQob2xkQ29uZmlnLnN5bWJvbD09PW5ld0NvbmZpZy5zeW1ib2wsImNhbm5vdCBjaGFuZ2Ugd2hpY2ggdG9rZW5zIGFyZSBpbiB0b2tlbk1pbmVycyIpKXJldHVybiExO2lmKCFhcGkuYXNzZXJ0KE51bWJlci5pc0ludGVnZXIobmV3Q29uZmlnLm11bHRpcGxpZXIpJiZuZXdDb25maWcubXVsdGlwbGllcj49MSYmbmV3Q29uZmlnLm11bHRpcGxpZXI8PTEwMCwidG9rZW5NaW5lciBtdWx0aXBsaWVyIG11c3QgYmUgYW4gaW50ZWdlciBmcm9tIDEgdG8gMTAwIikpcmV0dXJuITE7b2xkQ29uZmlnLm11bHRpcGxpZXIhPT1uZXdDb25maWcubXVsdGlwbGllciYmKGNoYW5nZWQ9ITApfWlmKCFhcGkuYXNzZXJ0KCEhb2xkTmZ0VG9rZW5NaW5lcj09ISFuZnRUb2tlbk1pbmVyLCJjYW5ub3QgY2hhbmdlIG5mdFRva2VuTWluZXIgdG9rZW4iKSlyZXR1cm4hMTtpZihuZnRUb2tlbk1pbmVyKXtpZighYXBpLmFzc2VydChvbGROZnRUb2tlbk1pbmVyLnN5bWJvbD09PW5mdFRva2VuTWluZXIuc3ltYm9sLCJjYW5ub3QgY2hhbmdlIG5mdFRva2VuTWluZXIgdG9rZW4iKSlyZXR1cm4hMTtjb25zdHt0eXBlTWFwOnR5cGVNYXAscHJvcGVydGllczpwcm9wZXJ0aWVzLHR5cGVGaWVsZDp0eXBlRmllbGQsZXF1aXBGaWVsZDplcXVpcEZpZWxkLG1pbmluZ1Bvd2VyRmllbGQ6bWluaW5nUG93ZXJGaWVsZH09bmZ0VG9rZW5NaW5lcjtpZighYXBpLmFzc2VydCh0eXBlRmllbGQmJiJzdHJpbmciPT10eXBlb2YgdHlwZUZpZWxkJiZ0eXBlRmllbGQ9PT1vbGROZnRUb2tlbk1pbmVyLnR5cGVGaWVsZCwiY2Fubm90IGNoYW5nZSBuZnRUb2tlbk1pbmVyIHR5cGVGaWVsZCIpKXJldHVybiExO2lmKG9sZE5mdFRva2VuTWluZXIuZXF1aXBGaWVsZCl7aWYoIWFwaS5hc3NlcnQoZXF1aXBGaWVsZCYmInN0cmluZyI9PXR5cGVvZiBlcXVpcEZpZWxkJiZlcXVpcEZpZWxkPT09b2xkTmZ0VG9rZW5NaW5lci5lcXVpcEZpZWxkLCJjYW5ub3QgY2hhbmdlIG5mdFRva2VuTWluZXIgZXF1aXBGaWVsZCIpKXJldHVybiExfWVsc2UgaWYoIWFwaS5hc3NlcnQoIWVxdWlwRmllbGQsImNhbm5vdCBjaGFuZ2UgbmZ0VG9rZW5NaW5lciBlcXVpcEZpZWxkIikpcmV0dXJuITE7aWYob2xkTmZ0VG9rZW5NaW5lci5taW5pbmdQb3dlckZpZWxkKXtpZighYXBpLmFzc2VydChtaW5pbmdQb3dlckZpZWxkJiYic3RyaW5nIj09dHlwZW9mIG1pbmluZ1Bvd2VyRmllbGQmJm1pbmluZ1Bvd2VyRmllbGQ9PT1vbGROZnRUb2tlbk1pbmVyLm1pbmluZ1Bvd2VyRmllbGQsImNhbm5vdCBjaGFuZ2UgbmZ0VG9rZW5NaW5lciBtaW5pbmdQb3dlckZpZWxkIikpcmV0dXJuITF9ZWxzZSBpZighYXBpLmFzc2VydCghbWluaW5nUG93ZXJGaWVsZCwiY2Fubm90IGNoYW5nZSBuZnRUb2tlbk1pbmVyIG1pbmluZ1Bvd2VyRmllbGQiKSlyZXR1cm4hMTtpZighYXBpLmFzc2VydCh0eXBlTWFwJiYib2JqZWN0Ij09dHlwZW9mIHR5cGVNYXAsImludmFsaWQgbmZ0VG9rZW5NaW5lciB0eXBlTWFwIikpcmV0dXJuITE7aWYoIWF3YWl0IHZhbGlkYXRlTmZ0UHJvcGVydGllcyhwcm9wZXJ0aWVzKSlyZXR1cm4hMTtpZihwcm9wZXJ0aWVzLmxlbmd0aCE9PW9sZE5mdFRva2VuTWluZXIucHJvcGVydGllcy5sZW5ndGgpY2hhbmdlZD0hMDtlbHNlIGZvcihsZXQgaT0wO2k8cHJvcGVydGllcy5sZW5ndGg7aSs9MSl7Y29uc3QgcHJvcD1wcm9wZXJ0aWVzW2ldLG9sZFByb3A9b2xkTmZ0VG9rZW5NaW5lci5wcm9wZXJ0aWVzW2ldO3Byb3Aub3AhPT1vbGRQcm9wLm9wJiYoY2hhbmdlZD0hMCl9aWYoIXZhbGlkYXRlTmZ0VHlwZU1hcCh0eXBlTWFwLHByb3BlcnRpZXMpKXJldHVybiExO2NvbnN0IG9sZFR5cGVzPU9iamVjdC5rZXlzKG9sZE5mdFRva2VuTWluZXIudHlwZU1hcCk7Zm9yKGxldCBpPTA7aTxvbGRUeXBlcy5sZW5ndGg7aSs9MSl7Y29uc3Qgb2xkVHlwZT1vbGRUeXBlc1tpXSxvbGRUeXBlQ29uZmlnPW9sZE5mdFRva2VuTWluZXIudHlwZU1hcFtvbGRUeXBlXSx0eXBlQ29uZmlnPXR5cGVNYXBbb2xkVHlwZV07aWYoIWFwaS5hc3NlcnQodHlwZUNvbmZpZywidHlwZUNvbmZpZyB0eXBlcyBtdXN0IGJlIGEgc3VwZXJzZXQgb2Ygb2xkIHR5cGVDb25maWcgdHlwZXMiKSlyZXR1cm4hMTtmb3IobGV0IGo9MDtqPHR5cGVDb25maWcubGVuZ3RoO2orPTEpb2xkVHlwZUNvbmZpZ1tqXSE9PXR5cGVDb25maWdbal0mJihjaGFuZ2VkPSEwKX19cmV0dXJue2NoYW5nZWQ6Y2hhbmdlZH19ZnVuY3Rpb24gY29tcHV0ZU1pbmluZ1Bvd2VyKG1pbmluZ1Bvd2VyLHRva2VuTWluZXJzLG5mdFRva2VuTWluZXIpe2xldCBwb3dlcj1hcGkuQmlnTnVtYmVyKDApO2ZvcihsZXQgaT0wO2k8dG9rZW5NaW5lcnMubGVuZ3RoO2krPTEpbWluaW5nUG93ZXIuYmFsYW5jZXNbaV0mJihwb3dlcj1wb3dlci5wbHVzKGFwaS5CaWdOdW1iZXIobWluaW5nUG93ZXIuYmFsYW5jZXNbaV0pLm11bHRpcGxpZWRCeSh0b2tlbk1pbmVyc1tpXS5tdWx0aXBsaWVyKSkpO2lmKG5mdFRva2VuTWluZXImJm1pbmluZ1Bvd2VyLm5mdEJhbGFuY2VzKXtsZXQgbmZ0UG93ZXI9YXBpLkJpZ051bWJlcigxKTtmb3IobGV0IGk9MDtpPG5mdFRva2VuTWluZXIucHJvcGVydGllcy5sZW5ndGg7aSs9MSluZnRQb3dlcj1uZnRQb3dlci5tdWx0aXBsaWVkQnkobWluaW5nUG93ZXIubmZ0QmFsYW5jZXNbaV0pLmRwKDIwKTtuZnRQb3dlci5pc0Zpbml0ZSgpfHwobmZ0UG93ZXI9YXBpLkJpZ051bWJlcigwKSksbWluaW5nUG93ZXIubmZ0QmFsYW5jZXMuX21pbmluZ1Bvd2VyJiYobmZ0UG93ZXI9bmZ0UG93ZXIucGx1cyhtaW5pbmdQb3dlci5uZnRCYWxhbmNlcy5fbWluaW5nUG93ZXIpKSxwb3dlcj1wb3dlci5wbHVzKG5mdFBvd2VyKX1yZXR1cm4gcG93ZXIuaXNQb3NpdGl2ZSgpJiZwb3dlci5pc0Zpbml0ZSgpP3Bvd2VyOmFwaS5CaWdOdW1iZXIoMCl9YXN5bmMgZnVuY3Rpb24gdXBkYXRlTWluaW5nUG93ZXIocG9vbCx0b2tlbixhY2NvdW50LHN0YWtlZFF1YW50aXR5LGRlbGVnYXRlZFF1YW50aXR5LHVwZGF0ZVBvb2xUaW1lc3RhbXApe2xldCBtaW5pbmdQb3dlcj1hd2FpdCBhcGkuZGIuZmluZE9uZSgibWluaW5nUG93ZXIiLHtpZDpwb29sLmlkLGFjY291bnQ6YWNjb3VudH0pLHN0YWtlPWFwaS5CaWdOdW1iZXIoc3Rha2VkUXVhbnRpdHkpLG9sZE1pbmluZ1Bvd2VyPWFwaS5CaWdOdW1iZXIoMCk7c3Rha2U9c3Rha2UucGx1cyhkZWxlZ2F0ZWRRdWFudGl0eSk7Y29uc3QgdG9rZW5JbmRleD1wb29sLnRva2VuTWluZXJzLmZpbmRJbmRleCh0PT50LnN5bWJvbD09PXRva2VuKTtpZihtaW5pbmdQb3dlcil7aWYodXBkYXRlUG9vbFRpbWVzdGFtcCYmbWluaW5nUG93ZXIudXBkYXRlUG9vbFRpbWVzdGFtcCE9PXVwZGF0ZVBvb2xUaW1lc3RhbXApe2ZvcihsZXQgaT0wO2k8cG9vbC50b2tlbk1pbmVycy5sZW5ndGg7aSs9MSltaW5pbmdQb3dlci5iYWxhbmNlc1tpXT0iMCI7aWYobWluaW5nUG93ZXIubmZ0QmFsYW5jZXMpe21pbmluZ1Bvd2VyLm5mdEJhbGFuY2VzPXt9O2NvbnN0e25mdEJhbGFuY2VzOm5mdEJhbGFuY2VzfT1taW5pbmdQb3dlcjtmb3IobGV0IGo9MDtqPHBvb2wubmZ0VG9rZW5NaW5lci5wcm9wZXJ0aWVzLmxlbmd0aDtqKz0xKXtjb25zdCBwcm9wZXJ0eT1wb29sLm5mdFRva2VuTWluZXIucHJvcGVydGllc1tqXSxvcEluZm89UFJPUEVSVFlfT1BTW3Byb3BlcnR5Lm9wXTtuZnRCYWxhbmNlc1tqXT1vcEluZm8uZGVmYXVsdFZhbHVlfX19ZWxzZSBtaW5pbmdQb3dlci5iYWxhbmNlc1t0b2tlbkluZGV4XXx8KG1pbmluZ1Bvd2VyLmJhbGFuY2VzW3Rva2VuSW5kZXhdPSIwIik7b2xkTWluaW5nUG93ZXI9Y29tcHV0ZU1pbmluZ1Bvd2VyKG1pbmluZ1Bvd2VyLHBvb2wudG9rZW5NaW5lcnMscG9vbC5uZnRUb2tlbk1pbmVyKSxtaW5pbmdQb3dlci5iYWxhbmNlc1t0b2tlbkluZGV4XT1zdGFrZS5wbHVzKG1pbmluZ1Bvd2VyLmJhbGFuY2VzW3Rva2VuSW5kZXhdKX1lbHNle2NvbnN0IGJhbGFuY2VzPXt9O2JhbGFuY2VzW3Rva2VuSW5kZXhdPXN0YWtlLG1pbmluZ1Bvd2VyPXtpZDpwb29sLmlkLGFjY291bnQ6YWNjb3VudCxiYWxhbmNlczpiYWxhbmNlcyxwb3dlcjp7JG51bWJlckRlY2ltYWw6IjAifX0sbWluaW5nUG93ZXI9YXdhaXQgYXBpLmRiLmluc2VydCgibWluaW5nUG93ZXIiLG1pbmluZ1Bvd2VyKX1jb25zdCBuZXdNaW5pbmdQb3dlcj1jb21wdXRlTWluaW5nUG93ZXIobWluaW5nUG93ZXIscG9vbC50b2tlbk1pbmVycyxwb29sLm5mdFRva2VuTWluZXIpO3JldHVybiBtaW5pbmdQb3dlci5wb3dlcj17JG51bWJlckRlY2ltYWw6bmV3TWluaW5nUG93ZXJ9LHVwZGF0ZVBvb2xUaW1lc3RhbXAmJihtaW5pbmdQb3dlci51cGRhdGVQb29sVGltZXN0YW1wPXVwZGF0ZVBvb2xUaW1lc3RhbXApLGF3YWl0IGFwaS5kYi51cGRhdGUoIm1pbmluZ1Bvd2VyIixtaW5pbmdQb3dlciksbmV3TWluaW5nUG93ZXIubWludXMob2xkTWluaW5nUG93ZXIpfWZ1bmN0aW9uIGdldE5mdEFjY291bnQobmZ0KXtyZXR1cm4ibWluaW5nIj09PW5mdC5kZWxlZ2F0ZWRUby5hY2NvdW50JiYiYyI9PT1uZnQuZGVsZWdhdGVkVG8ub3duZWRCeT9uZnQuYWNjb3VudDoidSI9PT1uZnQuZGVsZWdhdGVkVG8ub3duZWRCeT9uZnQuZGVsZWdhdGVkVG8uYWNjb3VudDpudWxsfWZ1bmN0aW9uIHNhbml0aXplTmZ0TWluaW5nUG93ZXIobmZ0TWluaW5nUG93ZXIpe2xldCBleHRyYU5mdE1pbmluZ1Bvd2VyPWFwaS5CaWdOdW1iZXIobmZ0TWluaW5nUG93ZXIpO3JldHVybiFleHRyYU5mdE1pbmluZ1Bvd2VyLmlzTmFOKCkmJmV4dHJhTmZ0TWluaW5nUG93ZXIuaXNGaW5pdGUoKXx8KGV4dHJhTmZ0TWluaW5nUG93ZXI9YXBpLkJpZ051bWJlcigwKSksZXh0cmFOZnRNaW5pbmdQb3dlci5kcCgyMCl9YXN5bmMgZnVuY3Rpb24gdXBkYXRlTmZ0TWluaW5nUG93ZXIocG9vbCxuZnQsYWRkLHVwZGF0ZVBvb2xUaW1lc3RhbXAsYWNjb3VudE92ZXJyaWRlKXtjb25zdCBhY2NvdW50PWFjY291bnRPdmVycmlkZXx8Z2V0TmZ0QWNjb3VudChuZnQpO2lmKCFhY2NvdW50KXJldHVybiBhcGkuQmlnTnVtYmVyKDApO2xldCBtaW5pbmdQb3dlcj1hd2FpdCBhcGkuZGIuZmluZE9uZSgibWluaW5nUG93ZXIiLHtpZDpwb29sLmlkLGFjY291bnQ6YWNjb3VudH0pLG9sZE1pbmluZ1Bvd2VyPWFwaS5CaWdOdW1iZXIoMCksZXh0cmFOZnRNaW5pbmdQb3dlcj1hcGkuQmlnTnVtYmVyKDApO2NvbnN0e3R5cGVNYXA6dHlwZU1hcCxwcm9wZXJ0aWVzOnByb3BlcnRpZXMsdHlwZUZpZWxkOnR5cGVGaWVsZCxlcXVpcEZpZWxkOmVxdWlwRmllbGQsbWluaW5nUG93ZXJGaWVsZDptaW5pbmdQb3dlckZpZWxkfT1wb29sLm5mdFRva2VuTWluZXIsbmZ0VHlwZT1uZnQucHJvcGVydGllc1t0eXBlRmllbGRdLHR5cGVQcm9wZXJ0aWVzPXR5cGVNYXBbbmZ0VHlwZV07aWYobWluaW5nUG93ZXJGaWVsZCYmKGV4dHJhTmZ0TWluaW5nUG93ZXI9c2FuaXRpemVOZnRNaW5pbmdQb3dlcihuZnQucHJvcGVydGllc1ttaW5pbmdQb3dlckZpZWxkXSkpLG1pbmluZ1Bvd2VyKXttaW5pbmdQb3dlci5uZnRCYWxhbmNlc3x8KG1pbmluZ1Bvd2VyLm5mdEJhbGFuY2VzPXt9KSxtaW5pbmdQb3dlci5lcXVpcHBlZE5mdHN8fChtaW5pbmdQb3dlci5lcXVpcHBlZE5mdHM9e30pO2NvbnN0IG9sZEV4dHJhTmZ0TWluaW5nUG93ZXI9MDtsZXQgZXF1aXBwZWROZnQ9bWluaW5nUG93ZXIuZXF1aXBwZWROZnRzW25mdC5faWRdO2lmKCFlcXVpcHBlZE5mdCl7aWYoZXF1aXBGaWVsZCYmIWFkZClyZXR1cm4gYXBpLkJpZ051bWJlcigwKTtlcXVpcHBlZE5mdD17dHlwZTpuZnRUeXBlfSxtaW5pbmdQb3dlci5lcXVpcHBlZE5mdHNbbmZ0Ll9pZF09ZXF1aXBwZWROZnR9Y29uc3R7bmZ0QmFsYW5jZXM6bmZ0QmFsYW5jZXN9PW1pbmluZ1Bvd2VyO2lmKHR5cGVQcm9wZXJ0aWVzKWZvcihsZXQgaT0wO2k8cHJvcGVydGllcy5sZW5ndGg7aSs9MSl7Y29uc3QgcHJvcGVydHk9cHJvcGVydGllc1tpXSxvcEluZm89UFJPUEVSVFlfT1BTW3Byb3BlcnR5Lm9wXTtuZnRCYWxhbmNlc1tpXSYmbWluaW5nUG93ZXIudXBkYXRlUG9vbFRpbWVzdGFtcD09PXVwZGF0ZVBvb2xUaW1lc3RhbXB8fChuZnRCYWxhbmNlc1tpXT1vcEluZm8uZGVmYXVsdFZhbHVlKX1pZihtaW5pbmdQb3dlckZpZWxkJiZtaW5pbmdQb3dlci51cGRhdGVQb29sVGltZXN0YW1wIT09dXBkYXRlUG9vbFRpbWVzdGFtcCYmKG5mdEJhbGFuY2VzLl9taW5pbmdQb3dlcj1hcGkuQmlnTnVtYmVyKDApKSxvbGRNaW5pbmdQb3dlcj1jb21wdXRlTWluaW5nUG93ZXIobWluaW5nUG93ZXIscG9vbC50b2tlbk1pbmVycyxwb29sLm5mdFRva2VuTWluZXIpLHR5cGVQcm9wZXJ0aWVzKWZvcihsZXQgaT0wO2k8cHJvcGVydGllcy5sZW5ndGg7aSs9MSl7Y29uc3QgcHJvcGVydHk9cHJvcGVydGllc1tpXSxvcEluZm89UFJPUEVSVFlfT1BTW3Byb3BlcnR5Lm9wXTtuZnRCYWxhbmNlc1tpXT1hZGQ/b3BJbmZvLmFkZChuZnRCYWxhbmNlc1tpXSx0eXBlUHJvcGVydGllc1tpXSk6b3BJbmZvLnJlbW92ZShuZnRCYWxhbmNlc1tpXSx0eXBlUHJvcGVydGllc1tpXSl9bWluaW5nUG93ZXJGaWVsZCYmKG5mdEJhbGFuY2VzLl9taW5pbmdQb3dlcnx8KG5mdEJhbGFuY2VzLl9taW5pbmdQb3dlcj1hcGkuQmlnTnVtYmVyKDApKSxhZGQ/KGVxdWlwcGVkTmZ0LmV4dHJhTWluaW5nUG93ZXI9ZXh0cmFOZnRNaW5pbmdQb3dlcixuZnRCYWxhbmNlcy5fbWluaW5nUG93ZXI9YXBpLkJpZ051bWJlcihuZnRCYWxhbmNlcy5fbWluaW5nUG93ZXIpLm1pbnVzKG9sZEV4dHJhTmZ0TWluaW5nUG93ZXIpLnBsdXMoZXh0cmFOZnRNaW5pbmdQb3dlcikpOm5mdEJhbGFuY2VzLl9taW5pbmdQb3dlcj1hcGkuQmlnTnVtYmVyKG5mdEJhbGFuY2VzLl9taW5pbmdQb3dlcikubWludXMoZXh0cmFOZnRNaW5pbmdQb3dlcikpfWVsc2V7Y29uc3QgbmZ0QmFsYW5jZXM9e30sZXF1aXBwZWROZnQ9e3R5cGU6bmZ0VHlwZX07aWYodHlwZVByb3BlcnRpZXMpZm9yKGxldCBpPTA7aTxwcm9wZXJ0aWVzLmxlbmd0aDtpKz0xKXtjb25zdCBwcm9wZXJ0eT1wcm9wZXJ0aWVzW2ldLG9wSW5mbz1QUk9QRVJUWV9PUFNbcHJvcGVydHkub3BdO2lmKCFhZGQpcmV0dXJuIGFwaS5hc3NlcnQoITEsInVuZXhwZWN0ZWQgY29uZGl0aW9uOiByZW1vdmUgd2l0aG91dCBwcmV2aW91cyBtaW5pbmdQb3dlciIpLGFwaS5CaWdOdW1iZXIoMCk7bmZ0QmFsYW5jZXNbaV09b3BJbmZvLmFkZChvcEluZm8uZGVmYXVsdFZhbHVlLHR5cGVQcm9wZXJ0aWVzW2ldKX1taW5pbmdQb3dlckZpZWxkJiYobmZ0QmFsYW5jZXMuX21pbmluZ1Bvd2VyPWV4dHJhTmZ0TWluaW5nUG93ZXIsZXF1aXBwZWROZnQuZXh0cmFNaW5pbmdQb3dlcj1leHRyYU5mdE1pbmluZ1Bvd2VyKTtjb25zdCBlcXVpcHBlZE5mdHM9e307ZXF1aXBwZWROZnRzW25mdC5faWRdPWVxdWlwcGVkTmZ0LG1pbmluZ1Bvd2VyPXtpZDpwb29sLmlkLGFjY291bnQ6YWNjb3VudCxiYWxhbmNlczp7fSxuZnRCYWxhbmNlczpuZnRCYWxhbmNlcyxwb3dlcjp7JG51bWJlckRlY2ltYWw6IjAifSxlcXVpcHBlZE5mdHM6ZXF1aXBwZWROZnRzfSxtaW5pbmdQb3dlcj1hd2FpdCBhcGkuZGIuaW5zZXJ0KCJtaW5pbmdQb3dlciIsbWluaW5nUG93ZXIpfWNvbnN0IG5ld01pbmluZ1Bvd2VyPWNvbXB1dGVNaW5pbmdQb3dlcihtaW5pbmdQb3dlcixwb29sLnRva2VuTWluZXJzLHBvb2wubmZ0VG9rZW5NaW5lcik7cmV0dXJuIG1pbmluZ1Bvd2VyLnBvd2VyPXskbnVtYmVyRGVjaW1hbDpuZXdNaW5pbmdQb3dlcn0sbWluaW5nUG93ZXIudXBkYXRlUG9vbFRpbWVzdGFtcD11cGRhdGVQb29sVGltZXN0YW1wLGFkZHx8ZGVsZXRlIG1pbmluZ1Bvd2VyLmVxdWlwcGVkTmZ0c1tuZnQuX2lkXSxhd2FpdCBhcGkuZGIudXBkYXRlKCJtaW5pbmdQb3dlciIsbWluaW5nUG93ZXIpLG5ld01pbmluZ1Bvd2VyLm1pbnVzKG9sZE1pbmluZ1Bvd2VyKX1hc3luYyBmdW5jdGlvbiB1cGRhdGVOZnRNaW5pbmdQb3dlckZyb21Qcm9wZXJ0eVVwZGF0ZShwb29sLG5mdCxhY2NvdW50T3ZlcnJpZGUpe2NvbnN0IGFjY291bnQ9YWNjb3VudE92ZXJyaWRlfHxnZXROZnRBY2NvdW50KG5mdCk7aWYoIWFjY291bnQpcmV0dXJuIGFwaS5CaWdOdW1iZXIoMCk7bGV0IG1pbmluZ1Bvd2VyPWF3YWl0IGFwaS5kYi5maW5kT25lKCJtaW5pbmdQb3dlciIse2lkOnBvb2wuaWQsYWNjb3VudDphY2NvdW50fSksb2xkTWluaW5nUG93ZXI9YXBpLkJpZ051bWJlcigwKSxleHRyYU5mdE1pbmluZ1Bvd2VyPWFwaS5CaWdOdW1iZXIoMCk7Y29uc3R7dHlwZUZpZWxkOnR5cGVGaWVsZCxlcXVpcEZpZWxkOmVxdWlwRmllbGQsbWluaW5nUG93ZXJGaWVsZDptaW5pbmdQb3dlckZpZWxkfT1wb29sLm5mdFRva2VuTWluZXIsbmZ0VHlwZT1uZnQucHJvcGVydGllc1t0eXBlRmllbGRdO2lmKCFtaW5pbmdQb3dlckZpZWxkKXJldHVybiBhcGkuQmlnTnVtYmVyKDApO2lmKGV4dHJhTmZ0TWluaW5nUG93ZXI9c2FuaXRpemVOZnRNaW5pbmdQb3dlcihuZnQucHJvcGVydGllc1ttaW5pbmdQb3dlckZpZWxkXSksbWluaW5nUG93ZXIpe21pbmluZ1Bvd2VyLm5mdEJhbGFuY2VzfHwobWluaW5nUG93ZXIubmZ0QmFsYW5jZXM9e30pLG1pbmluZ1Bvd2VyLmVxdWlwcGVkTmZ0c3x8KG1pbmluZ1Bvd2VyLmVxdWlwcGVkTmZ0cz17fSk7bGV0IG9sZEV4dHJhTmZ0TWluaW5nUG93ZXI9MCxlcXVpcHBlZE5mdD1taW5pbmdQb3dlci5lcXVpcHBlZE5mdHNbbmZ0Ll9pZF07aWYoZXF1aXBwZWROZnQpb2xkRXh0cmFOZnRNaW5pbmdQb3dlcj1lcXVpcHBlZE5mdC5leHRyYU1pbmluZ1Bvd2VyO2Vsc2V7aWYoZXF1aXBGaWVsZClyZXR1cm4gYXBpLkJpZ051bWJlcigwKTtlcXVpcHBlZE5mdD17dHlwZTpuZnRUeXBlfSxtaW5pbmdQb3dlci5lcXVpcHBlZE5mdHNbbmZ0Ll9pZF09ZXF1aXBwZWROZnR9Y29uc3R7bmZ0QmFsYW5jZXM6bmZ0QmFsYW5jZXN9PW1pbmluZ1Bvd2VyO29sZE1pbmluZ1Bvd2VyPWNvbXB1dGVNaW5pbmdQb3dlcihtaW5pbmdQb3dlcixwb29sLnRva2VuTWluZXJzLHBvb2wubmZ0VG9rZW5NaW5lciksbmZ0QmFsYW5jZXMuX21pbmluZ1Bvd2VyfHwobmZ0QmFsYW5jZXMuX21pbmluZ1Bvd2VyPWFwaS5CaWdOdW1iZXIoMCkpLGVxdWlwcGVkTmZ0LmV4dHJhTWluaW5nUG93ZXI9ZXh0cmFOZnRNaW5pbmdQb3dlcixuZnRCYWxhbmNlcy5fbWluaW5nUG93ZXI9YXBpLkJpZ051bWJlcihuZnRCYWxhbmNlcy5fbWluaW5nUG93ZXIpLm1pbnVzKG9sZEV4dHJhTmZ0TWluaW5nUG93ZXIpLnBsdXMoZXh0cmFOZnRNaW5pbmdQb3dlcil9ZWxzZXtjb25zdCBuZnRCYWxhbmNlcz17fSxlcXVpcHBlZE5mdD17dHlwZTpuZnRUeXBlfTtuZnRCYWxhbmNlcy5fbWluaW5nUG93ZXI9ZXh0cmFOZnRNaW5pbmdQb3dlcixlcXVpcHBlZE5mdC5leHRyYU1pbmluZ1Bvd2VyPWV4dHJhTmZ0TWluaW5nUG93ZXI7Y29uc3QgZXF1aXBwZWROZnRzPXt9O2VxdWlwcGVkTmZ0c1tuZnQuX2lkXT1lcXVpcHBlZE5mdCxtaW5pbmdQb3dlcj17aWQ6cG9vbC5pZCxhY2NvdW50OmFjY291bnQsYmFsYW5jZXM6e30sbmZ0QmFsYW5jZXM6bmZ0QmFsYW5jZXMscG93ZXI6eyRudW1iZXJEZWNpbWFsOiIwIn0sZXF1aXBwZWROZnRzOmVxdWlwcGVkTmZ0c30sbWluaW5nUG93ZXI9YXdhaXQgYXBpLmRiLmluc2VydCgibWluaW5nUG93ZXIiLG1pbmluZ1Bvd2VyKX1jb25zdCBuZXdNaW5pbmdQb3dlcj1jb21wdXRlTWluaW5nUG93ZXIobWluaW5nUG93ZXIscG9vbC50b2tlbk1pbmVycyxwb29sLm5mdFRva2VuTWluZXIpO3JldHVybiBtaW5pbmdQb3dlci5wb3dlcj17JG51bWJlckRlY2ltYWw6bmV3TWluaW5nUG93ZXJ9LGF3YWl0IGFwaS5kYi51cGRhdGUoIm1pbmluZ1Bvd2VyIixtaW5pbmdQb3dlciksbmV3TWluaW5nUG93ZXIubWludXMob2xkTWluaW5nUG93ZXIpfWFzeW5jIGZ1bmN0aW9uIGluaXRNaW5pbmdQb3dlcihwb29sLHVwZGF0ZVBvb2xUaW1lc3RhbXAscGFyYW1zLHRva2VuLGxhc3RJZCl7bGV0IGJhbGFuY2VzLGFkanVzdGVkUG93ZXI9YXBpLkJpZ051bWJlcigwKSxvZmZzZXQ9MCxsYXN0SWRQcm9jZXNzZWQ9bGFzdElkLGNvbXBsZXRlPSExO2Zvcig7IWNvbXBsZXRlJiZvZmZzZXQ8cGFyYW1zLm1heEJhbGFuY2VzUHJvY2Vzc2VkUGVyQmxvY2s7KXtiYWxhbmNlcz1hd2FpdCBhcGkuZGIuZmluZEluVGFibGUoInRva2VucyIsImJhbGFuY2VzIix7c3ltYm9sOnRva2VuLF9pZDp7JGd0Omxhc3RJZH19LHBhcmFtcy5wcm9jZXNzUXVlcnlMaW1pdCxvZmZzZXQsW3tpbmRleDoiX2lkIixkZXNjZW5kaW5nOiExfV0pO2ZvcihsZXQgaT0wO2k8YmFsYW5jZXMubGVuZ3RoO2krPTEpe2NvbnN0IGJhbGFuY2U9YmFsYW5jZXNbaV07aWYoYXBpLkJpZ051bWJlcihiYWxhbmNlLnN0YWtlKS5ndCgwKXx8YXBpLkJpZ051bWJlcihiYWxhbmNlLmRlbGVnYXRpb25zSW4pLmd0KDApKXtjb25zdCBhZGp1c3RlZD1hd2FpdCB1cGRhdGVNaW5pbmdQb3dlcihwb29sLHRva2VuLGJhbGFuY2UuYWNjb3VudCxiYWxhbmNlLnN0YWtlLGJhbGFuY2UuZGVsZWdhdGlvbnNJbix1cGRhdGVQb29sVGltZXN0YW1wKTthZGp1c3RlZFBvd2VyPWFkanVzdGVkUG93ZXIucGx1cyhhZGp1c3RlZCl9bGFzdElkUHJvY2Vzc2VkPWJhbGFuY2UuX2lkfWJhbGFuY2VzLmxlbmd0aDxwYXJhbXMucHJvY2Vzc1F1ZXJ5TGltaXQmJihjb21wbGV0ZT0hMCksb2Zmc2V0Kz1wYXJhbXMucHJvY2Vzc1F1ZXJ5TGltaXR9cmV0dXJue2FkanVzdGVkUG93ZXI6YWRqdXN0ZWRQb3dlcixuZXh0SWQ6bGFzdElkUHJvY2Vzc2VkLGNvbXBsZXRlOmNvbXBsZXRlfX1hc3luYyBmdW5jdGlvbiBpbml0TmZ0TWluaW5nUG93ZXIocG9vbCx1cGRhdGVQb29sVGltZXN0YW1wLHBhcmFtcyxuZnRUb2tlbk1pbmVyLGxhc3RJZCl7bGV0IG5mdHMsYWRqdXN0ZWRQb3dlcj1hcGkuQmlnTnVtYmVyKDApLG9mZnNldD0wLGxhc3RJZFByb2Nlc3NlZD1sYXN0SWQsY29tcGxldGU9ITE7Y29uc3R7c3ltYm9sOnN5bWJvbCxlcXVpcEZpZWxkOmVxdWlwRmllbGR9PW5mdFRva2VuTWluZXI7Zm9yKDshY29tcGxldGUmJm9mZnNldDxwYXJhbXMubWF4QmFsYW5jZXNQcm9jZXNzZWRQZXJCbG9jazspe2NvbnN0IG5mdFF1ZXJ5PXtfaWQ6eyRndDpsYXN0SWR9fTtlcXVpcEZpZWxkP25mdFF1ZXJ5WyJwcm9wZXJ0aWVzLiIrZXF1aXBGaWVsZF09eyRleGlzdHM6ITAsJG5lOiIifToobmZ0UXVlcnkuZGVsZWdhdGVkVG89eyRuZTpudWxsfSxuZnRRdWVyeVsiZGVsZWdhdGVkVG8udW5kZWxlZ2F0ZUF0Il09eyRlcTpudWxsfSksbmZ0cz1hd2FpdCBhcGkuZGIuZmluZEluVGFibGUoIm5mdCIsc3ltYm9sKyJpbnN0YW5jZXMiLG5mdFF1ZXJ5LHBhcmFtcy5wcm9jZXNzUXVlcnlMaW1pdCxvZmZzZXQsW3tpbmRleDoiX2lkIixkZXNjZW5kaW5nOiExfV0pO2ZvcihsZXQgaT0wO2k8bmZ0cy5sZW5ndGg7aSs9MSl7Y29uc3QgbmZ0PW5mdHNbaV07aWYoIWVxdWlwRmllbGR8fG5mdC5wcm9wZXJ0aWVzW2VxdWlwRmllbGRdKXtjb25zdCBhZGp1c3RlZD1hd2FpdCB1cGRhdGVOZnRNaW5pbmdQb3dlcihwb29sLG5mdCwhMCx1cGRhdGVQb29sVGltZXN0YW1wLGVxdWlwRmllbGQ/bmZ0LnByb3BlcnRpZXNbZXF1aXBGaWVsZF06bnVsbCk7YWRqdXN0ZWRQb3dlcj1hZGp1c3RlZFBvd2VyLnBsdXMoYWRqdXN0ZWQpfWxhc3RJZFByb2Nlc3NlZD1uZnQuX2lkfW5mdHMubGVuZ3RoPHBhcmFtcy5wcm9jZXNzUXVlcnlMaW1pdCYmKGNvbXBsZXRlPSEwKSxvZmZzZXQrPXBhcmFtcy5wcm9jZXNzUXVlcnlMaW1pdH1yZXR1cm57YWRqdXN0ZWRQb3dlcjphZGp1c3RlZFBvd2VyLG5leHRJZDpsYXN0SWRQcm9jZXNzZWQsY29tcGxldGU6Y29tcGxldGV9fWFzeW5jIGZ1bmN0aW9uIHJlc3VtZVBvd2VyVXBkYXRlKHBvb2wscGFyYW1zKXtsZXR7aW5Qcm9ncmVzczppblByb2dyZXNzLHRva2VuSW5kZXg6dG9rZW5JbmRleCxuZnRUb2tlbkluZGV4Om5mdFRva2VuSW5kZXgsbGFzdElkOmxhc3RJZH09cG9vbC51cGRhdGluZztjb25zdHt1cGRhdGVQb29sVGltZXN0YW1wOnVwZGF0ZVBvb2xUaW1lc3RhbXB9PXBvb2wudXBkYXRpbmc7aWYoIWluUHJvZ3Jlc3MpcmV0dXJuO2lmKHRva2VuSW5kZXg8cG9vbC50b2tlbk1pbmVycy5sZW5ndGgpe2NvbnN0IHRva2VuQ29uZmlnPXBvb2wudG9rZW5NaW5lcnNbdG9rZW5JbmRleF0se2FkanVzdGVkUG93ZXI6YWRqdXN0ZWRQb3dlcixuZXh0SWQ6bmV4dElkLGNvbXBsZXRlOmNvbXBsZXRlfT1hd2FpdCBpbml0TWluaW5nUG93ZXIocG9vbCx1cGRhdGVQb29sVGltZXN0YW1wLHBhcmFtcyx0b2tlbkNvbmZpZy5zeW1ib2wsbGFzdElkKTtwb29sLnRvdGFsUG93ZXI9YXBpLkJpZ051bWJlcihwb29sLnRvdGFsUG93ZXIpLnBsdXMoYWRqdXN0ZWRQb3dlciksY29tcGxldGU/KGxhc3RJZD0wLHRva2VuSW5kZXgrPTEpOmxhc3RJZD1uZXh0SWR9ZWxzZSBpZihwb29sLm5mdFRva2VuTWluZXImJm5mdFRva2VuSW5kZXg8MSl7Y29uc3R7bmZ0VG9rZW5NaW5lcjpuZnRUb2tlbk1pbmVyfT1wb29sLHthZGp1c3RlZFBvd2VyOmFkanVzdGVkUG93ZXIsbmV4dElkOm5leHRJZCxjb21wbGV0ZTpjb21wbGV0ZX09YXdhaXQgaW5pdE5mdE1pbmluZ1Bvd2VyKHBvb2wsdXBkYXRlUG9vbFRpbWVzdGFtcCxwYXJhbXMsbmZ0VG9rZW5NaW5lcixsYXN0SWQpO3Bvb2wudG90YWxQb3dlcj1hcGkuQmlnTnVtYmVyKHBvb2wudG90YWxQb3dlcikucGx1cyhhZGp1c3RlZFBvd2VyKSxjb21wbGV0ZT8obGFzdElkPTAsbmZ0VG9rZW5JbmRleCs9MSk6bGFzdElkPW5leHRJZH10b2tlbkluZGV4IT09cG9vbC50b2tlbk1pbmVycy5sZW5ndGh8fHBvb2wubmZ0VG9rZW5NaW5lciYmMSE9PW5mdFRva2VuSW5kZXh8fChpblByb2dyZXNzPSExLHRva2VuSW5kZXg9MCxuZnRUb2tlbkluZGV4PTApO2NvbnN0e3VwZGF0aW5nOnVwZGF0aW5nfT1wb29sO3VwZGF0aW5nLmluUHJvZ3Jlc3M9aW5Qcm9ncmVzcyx1cGRhdGluZy50b2tlbkluZGV4PXRva2VuSW5kZXgsdXBkYXRpbmcubmZ0VG9rZW5JbmRleD1uZnRUb2tlbkluZGV4LHVwZGF0aW5nLmxhc3RJZD1sYXN0SWQsYXdhaXQgYXBpLmRiLnVwZGF0ZSgicG9vbHMiLHBvb2wpfWZ1bmN0aW9uIGdlbmVyYXRlUG9vbElkKHBvb2wpe2NvbnN0IHRva2VuTWluZXJTdHJpbmc9cG9vbC5leHRlcm5hbENvbnRyYWN0JiZwb29sLmV4dGVybmFsTWluZXJzPyJFWFQtIitwb29sLmV4dGVybmFsTWluZXJzLnJlcGxhY2UoIjoiLCIiKTpwb29sLnRva2VuTWluZXJzLm1hcCh0PT50LnN5bWJvbC5yZXBsYWNlKCIuIiwiLSIpKS5zb3J0KCkuam9pbigiLCIpLG5mdFRva2VuTWluZXJTdHJpbmc9cG9vbC5uZnRUb2tlbk1pbmVyPyI6Iitwb29sLm5mdFRva2VuTWluZXIuc3ltYm9sOiIiO3JldHVybmAke3Bvb2wubWluZWRUb2tlbi5yZXBsYWNlKCIuIiwiLSIpfToke3Rva2VuTWluZXJTdHJpbmd9JHtuZnRUb2tlbk1pbmVyU3RyaW5nfWB9YXN5bmMgZnVuY3Rpb24gcnVuTG90dGVyeShwb29sLHBhcmFtcyl7Y29uc3QgYmxvY2tEYXRlPW5ldyBEYXRlKGFwaS5oaXZlQmxvY2tUaW1lc3RhbXArIi4wMDBaIiksd2lubmluZ051bWJlcnM9W10sbWluZWRUb2tlbj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpwb29sLm1pbmVkVG9rZW59KSx3aW5uaW5nQW1vdW50PWFwaS5CaWdOdW1iZXIocG9vbC5sb3R0ZXJ5QW1vdW50KS5kaXZpZGVkQnkocG9vbC5sb3R0ZXJ5V2lubmVycykudG9GaXhlZChtaW5lZFRva2VuLnByZWNpc2lvbixhcGkuQmlnTnVtYmVyLlJPVU5EX0hBTEZfVVApO2lmKHBvb2wuZXh0ZXJuYWxDb250cmFjdCl7aWYoIm1hcmtldHBvb2xzIj09PXBvb2wuZXh0ZXJuYWxDb250cmFjdCl7Y29uc3QgbWFya2V0cG9vbD1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoIm1hcmtldHBvb2xzIiwicG9vbHMiLHt0b2tlblBhaXI6cG9vbC5leHRlcm5hbE1pbmVyc30pO2ZvcihsZXQgaT0wO2k8cG9vbC5sb3R0ZXJ5V2lubmVycztpKz0xKXdpbm5pbmdOdW1iZXJzW2ldPWFwaS5CaWdOdW1iZXIobWFya2V0cG9vbC50b3RhbFNoYXJlcykubXVsdGlwbGllZEJ5KGFwaS5yYW5kb20oKSl9fWVsc2UgZm9yKGxldCBpPTA7aTxwb29sLmxvdHRlcnlXaW5uZXJzO2krPTEpd2lubmluZ051bWJlcnNbaV09YXBpLkJpZ051bWJlcihwb29sLnRvdGFsUG93ZXIpLm11bHRpcGxpZWRCeShhcGkucmFuZG9tKCkpO2xldCBtaW5pbmdQb3dlcnMsb2Zmc2V0PTAsY3VtdWxhdGl2ZVBvd2VyPWFwaS5CaWdOdW1iZXIoMCksbmV4dEN1bXVsYXRpdmVQb3dlcj1hcGkuQmlnTnVtYmVyKDApLGNvbXB1dGVkV2lubmVycz0wO2NvbnN0IHdpbm5lcnM9W107Zm9yKDtjb21wdXRlZFdpbm5lcnM8cG9vbC5sb3R0ZXJ5V2lubmVyczspe2lmKHBvb2wuZXh0ZXJuYWxDb250cmFjdCl7aWYoIm1hcmtldHBvb2xzIj09PXBvb2wuZXh0ZXJuYWxDb250cmFjdCl7bWluaW5nUG93ZXJzPWF3YWl0IGFwaS5kYi5maW5kSW5UYWJsZSgibWFya2V0cG9vbHMiLCJsaXF1aWRpdHlQb3NpdGlvbnMiLHt0b2tlblBhaXI6cG9vbC5leHRlcm5hbE1pbmVyc30scGFyYW1zLnByb2Nlc3NRdWVyeUxpbWl0LG9mZnNldCxbe2luZGV4OiJfaWQiLGRlc2NlbmRpbmc6ITF9XSk7Zm9yKGxldCBpPTA7aTxtaW5pbmdQb3dlcnMubGVuZ3RoO2krPTEpbWluaW5nUG93ZXJzW2ldLnBvd2VyPXskbnVtYmVyRGVjaW1hbDphcGkuQmlnTnVtYmVyKG1pbmluZ1Bvd2Vyc1tpXS5zaGFyZXMpLnRvRml4ZWQobWluZWRUb2tlbi5wcmVjaXNpb24sYXBpLkJpZ051bWJlci5ST1VORF9IQUxGX1VQKX19fWVsc2UgbWluaW5nUG93ZXJzPWF3YWl0IGFwaS5kYi5maW5kKCJtaW5pbmdQb3dlciIse2lkOnBvb2wuaWQscG93ZXI6eyRndDp7JG51bWJlckRlY2ltYWw6IjAifX19LHBhcmFtcy5wcm9jZXNzUXVlcnlMaW1pdCxvZmZzZXQsW3tpbmRleDoicG93ZXIiLGRlc2NlbmRpbmc6ITB9LHtpbmRleDoiX2lkIixkZXNjZW5kaW5nOiExfV0pO2ZvcihsZXQgaT0wO2k8bWluaW5nUG93ZXJzLmxlbmd0aDtpKz0xKXtjb25zdCBtaW5pbmdQb3dlcj1taW5pbmdQb3dlcnNbaV07bmV4dEN1bXVsYXRpdmVQb3dlcj1jdW11bGF0aXZlUG93ZXIucGx1cyhtaW5pbmdQb3dlci5wb3dlci4kbnVtYmVyRGVjaW1hbCk7Zm9yKGxldCBqPTA7ajxwb29sLmxvdHRlcnlXaW5uZXJzO2orPTEpe2NvbnN0IGN1cnJlbnRXaW5uaW5nTnVtYmVyPXdpbm5pbmdOdW1iZXJzW2pdO2N1bXVsYXRpdmVQb3dlci5sdGUoY3VycmVudFdpbm5pbmdOdW1iZXIpJiZuZXh0Q3VtdWxhdGl2ZVBvd2VyLmd0KGN1cnJlbnRXaW5uaW5nTnVtYmVyKSYmKGNvbXB1dGVkV2lubmVycys9MSx3aW5uZXJzLnB1c2goe3dpbm5lcjptaW5pbmdQb3dlci5hY2NvdW50LHdpbm5pbmdOdW1iZXI6Y3VycmVudFdpbm5pbmdOdW1iZXIsd2lubmluZ0Ftb3VudDp3aW5uaW5nQW1vdW50fSkpfWN1bXVsYXRpdmVQb3dlcj1uZXh0Q3VtdWxhdGl2ZVBvd2VyfWlmKGNvbXB1dGVkV2lubmVycz09PXBvb2wubG90dGVyeVdpbm5lcnN8fG1pbmluZ1Bvd2Vycy5sZW5ndGg8cGFyYW1zLnByb2Nlc3NRdWVyeUxpbWl0KWJyZWFrO29mZnNldCs9cGFyYW1zLnByb2Nlc3NRdWVyeUxpbWl0fWFwaS5lbWl0KCJtaW5pbmdMb3R0ZXJ5Iix7cG9vbElkOnBvb2wuaWQsd2lubmVyczp3aW5uZXJzfSk7Zm9yKGxldCBpPTA7aTx3aW5uZXJzLmxlbmd0aDtpKz0xKXtjb25zdCB3aW5uZXI9d2lubmVyc1tpXTthd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoInRva2VucyIsImlzc3VlIix7dG86d2lubmVyLndpbm5lcixzeW1ib2w6bWluZWRUb2tlbi5zeW1ib2wscXVhbnRpdHk6d2lubmluZ0Ftb3VudH0pfXBvb2wubmV4dExvdHRlcnlUaW1lc3RhbXA9YXBpLkJpZ051bWJlcihibG9ja0RhdGUuZ2V0VGltZSgpKS5wbHVzKDM2MDAqcG9vbC5sb3R0ZXJ5SW50ZXJ2YWxIb3VycyoxZTMpLnRvTnVtYmVyKCksYXdhaXQgYXBpLmRiLnVwZGF0ZSgicG9vbHMiLHBvb2wpfWFjdGlvbnMuc2V0QWN0aXZlPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtpZDppZCxhY3RpdmU6YWN0aXZlLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9PXBheWxvYWQ7aWYoIWFwaS5hc3NlcnQoITA9PT1pc1NpZ25lZFdpdGhBY3RpdmVLZXksInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpKXJldHVybjtjb25zdCBwb29sPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwb29scyIse2lkOmlkfSk7aWYoIWFwaS5hc3NlcnQocG9vbCwicG9vbCBpZCBub3QgZm91bmQiKSlyZXR1cm47Y29uc3QgbWluZWRUb2tlbk9iamVjdD1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpwb29sLm1pbmVkVG9rZW59KTtpZighYXBpLmFzc2VydChtaW5lZFRva2VuT2JqZWN0JiYobWluZWRUb2tlbk9iamVjdC5pc3N1ZXI9PT1hcGkuc2VuZGVyfHwiQkVFIj09PW1pbmVkVG9rZW5PYmplY3Quc3ltYm9sJiZhcGkuc2VuZGVyPT09YXBpLm93bmVyKSwibXVzdCBiZSBpc3N1ZXIgb2YgbWluZWRUb2tlbiIpKXJldHVybjtjb25zdHtuZnRUb2tlbk1pbmVyOm5mdFRva2VuTWluZXJ9PXBvb2w7aWYobmZ0VG9rZW5NaW5lcil7Y29uc3QgbmZ0VG9rZW5Qb29sPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRUb2tlblBvb2xzIix7c3ltYm9sOm5mdFRva2VuTWluZXIuc3ltYm9sLGlkOnBvb2wuaWR9KTtpZihhY3RpdmUmJiFuZnRUb2tlblBvb2wpe2NvbnN0IG90aGVyTmZ0VG9rZW5Qb29scz1hd2FpdCBhcGkuZGIuZmluZCgibmZ0VG9rZW5Qb29scyIse3N5bWJvbDpuZnRUb2tlbk1pbmVyLnN5bWJvbH0pO2lmKCFhcGkuYXNzZXJ0KCFvdGhlck5mdFRva2VuUG9vbHN8fG90aGVyTmZ0VG9rZW5Qb29scy5sZW5ndGg8MiwiY2FuIGhhdmUgYXQgbW9zdCAyIGFjdGl2ZSBuZnQgdG9rZW4gcG9vbHMgZm9yIG5mdCB0b2tlbiIpKXJldHVybjthd2FpdCBhcGkuZGIuaW5zZXJ0KCJuZnRUb2tlblBvb2xzIix7c3ltYm9sOm5mdFRva2VuTWluZXIuc3ltYm9sLGlkOnBvb2wuaWR9KX1lbHNlIWFjdGl2ZSYmbmZ0VG9rZW5Qb29sJiZhd2FpdCBhcGkuZGIucmVtb3ZlKCJuZnRUb2tlblBvb2xzIixuZnRUb2tlblBvb2wpfXBvb2wuYWN0aXZlPSEhYWN0aXZlO2NvbnN0IGJsb2NrRGF0ZT1uZXcgRGF0ZShhcGkuaGl2ZUJsb2NrVGltZXN0YW1wKyIuMDAwWiIpO3Bvb2wubmV4dExvdHRlcnlUaW1lc3RhbXA9YXBpLkJpZ051bWJlcihibG9ja0RhdGUuZ2V0VGltZSgpKS5wbHVzKDM2MDAqcG9vbC5sb3R0ZXJ5SW50ZXJ2YWxIb3VycyoxZTMpLnRvTnVtYmVyKCksYXdhaXQgYXBpLmRiLnVwZGF0ZSgicG9vbHMiLHBvb2wpfSxhY3Rpb25zLnVwZGF0ZVBvb2w9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2lkOmlkLGxvdHRlcnlXaW5uZXJzOmxvdHRlcnlXaW5uZXJzLGxvdHRlcnlJbnRlcnZhbEhvdXJzOmxvdHRlcnlJbnRlcnZhbEhvdXJzLGxvdHRlcnlBbW91bnQ6bG90dGVyeUFtb3VudCx0b2tlbk1pbmVyczp0b2tlbk1pbmVycyxuZnRUb2tlbk1pbmVyOm5mdFRva2VuTWluZXIsY2FsbGluZ0NvbnRyYWN0SW5mbzpjYWxsaW5nQ29udHJhY3RJbmZvLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9PXBheWxvYWQscGFyYW1zPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KSx7cG9vbFVwZGF0ZUZlZTpwb29sVXBkYXRlRmVlfT1wYXJhbXMsdXRpbGl0eVRva2VuQmFsYW5jZT1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsImJhbGFuY2VzIix7YWNjb3VudDphcGkuc2VuZGVyLHN5bWJvbDoiQkVFIn0pLGF1dGhvcml6ZWQ9ISghYXBpLkJpZ051bWJlcihwb29sVXBkYXRlRmVlKS5sdGUoMCkmJmFwaS5zZW5kZXIhPT1hcGkub3duZXIpfHx1dGlsaXR5VG9rZW5CYWxhbmNlJiZhcGkuQmlnTnVtYmVyKHV0aWxpdHlUb2tlbkJhbGFuY2UuYmFsYW5jZSkuZ3RlKHBvb2xVcGRhdGVGZWUpO2lmKGFwaS5hc3NlcnQoYXV0aG9yaXplZCwieW91IG11c3QgaGF2ZSBlbm91Z2ggdG9rZW5zIHRvIGNvdmVyIHRoZSB1cGRhdGUgZmVlIikmJmFwaS5hc3NlcnQoITA9PT1pc1NpZ25lZFdpdGhBY3RpdmVLZXksInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KGlkJiYic3RyaW5nIj09dHlwZW9mIGlkJiZsb3R0ZXJ5QW1vdW50JiYic3RyaW5nIj09dHlwZW9mIGxvdHRlcnlBbW91bnQmJiFhcGkuQmlnTnVtYmVyKGxvdHRlcnlBbW91bnQpLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIobG90dGVyeUFtb3VudCkuZ3QoMCksImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQoTnVtYmVyLmlzSW50ZWdlcihsb3R0ZXJ5V2lubmVycykmJmxvdHRlcnlXaW5uZXJzPj0xJiZsb3R0ZXJ5V2lubmVyczw9MjAsImludmFsaWQgbG90dGVyeVdpbm5lcnM6IGludGVnZXIgYmV0d2VlbiAxIGFuZCAyMCBvbmx5IikmJmFwaS5hc3NlcnQoTnVtYmVyLmlzSW50ZWdlcihsb3R0ZXJ5SW50ZXJ2YWxIb3VycykmJmxvdHRlcnlJbnRlcnZhbEhvdXJzPj0xJiZsb3R0ZXJ5SW50ZXJ2YWxIb3Vyczw9NzIwLCJpbnZhbGlkIGxvdHRlcnlJbnRlcnZhbEhvdXJzOiBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgNzIwIG9ubHkiKSl7Y29uc3QgcG9vbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgicG9vbHMiLHtpZDppZH0pO2lmKGFwaS5hc3NlcnQocG9vbCwicG9vbCBpZCBub3QgZm91bmQiKSl7Y29uc3QgbWluZWRUb2tlbk9iamVjdD1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpwb29sLm1pbmVkVG9rZW59KTtpZihhcGkuYXNzZXJ0KG1pbmVkVG9rZW5PYmplY3QmJihtaW5lZFRva2VuT2JqZWN0Lmlzc3Vlcj09PWFwaS5zZW5kZXJ8fCJCRUUiPT09bWluZWRUb2tlbk9iamVjdC5zeW1ib2wmJmFwaS5zZW5kZXI9PT1hcGkub3duZXIpLCJtdXN0IGJlIGlzc3VlciBvZiBtaW5lZFRva2VuIikmJmFwaS5hc3NlcnQoYXBpLkJpZ051bWJlcihsb3R0ZXJ5QW1vdW50KS5kcCgpPD1taW5lZFRva2VuT2JqZWN0LnByZWNpc2lvbiwibWluZWRUb2tlbiBwcmVjaXNpb24gbWlzbWF0Y2ggZm9yIGxvdHRlcnlBbW91bnQiKSl7aWYoY2FsbGluZ0NvbnRyYWN0SW5mbylwb29sLmxvdHRlcnlXaW5uZXJzPWxvdHRlcnlXaW5uZXJzLHBvb2wubG90dGVyeUludGVydmFsSG91cnM9bG90dGVyeUludGVydmFsSG91cnMscG9vbC5sb3R0ZXJ5QW1vdW50PWxvdHRlcnlBbW91bnQ7ZWxzZXtjb25zdCB2YWxpZE1pbmVyc0NoYW5nZT1hd2FpdCB2YWxpZGF0ZVRva2VuTWluZXJzQ2hhbmdlKHBvb2wudG9rZW5NaW5lcnMsdG9rZW5NaW5lcnMscG9vbC5uZnRUb2tlbk1pbmVyLG5mdFRva2VuTWluZXIpO2lmKHZhbGlkTWluZXJzQ2hhbmdlKXtwb29sLmxvdHRlcnlXaW5uZXJzPWxvdHRlcnlXaW5uZXJzLHBvb2wubG90dGVyeUludGVydmFsSG91cnM9bG90dGVyeUludGVydmFsSG91cnMscG9vbC5sb3R0ZXJ5QW1vdW50PWxvdHRlcnlBbW91bnQscG9vbC50b2tlbk1pbmVycz10b2tlbk1pbmVycyxwb29sLm5mdFRva2VuTWluZXI9bmZ0VG9rZW5NaW5lcjtjb25zdCBibG9ja0RhdGU9bmV3IERhdGUoYXBpLmhpdmVCbG9ja1RpbWVzdGFtcCsiLjAwMFoiKTt2YWxpZE1pbmVyc0NoYW5nZS5jaGFuZ2VkJiYocG9vbC51cGRhdGluZy51cGRhdGVQb29sVGltZXN0YW1wPWFwaS5CaWdOdW1iZXIoYmxvY2tEYXRlLmdldFRpbWUoKSkudG9OdW1iZXIoKSxwb29sLnVwZGF0aW5nLmluUHJvZ3Jlc3M9ITAscG9vbC51cGRhdGluZy50b2tlbkluZGV4PTAscG9vbC51cGRhdGluZy5uZnRUb2tlbkluZGV4PTAscG9vbC51cGRhdGluZy5sYXN0SWQ9MCxwb29sLnRvdGFsUG93ZXI9IjAiKSxwb29sLm5leHRMb3R0ZXJ5VGltZXN0YW1wPWFwaS5CaWdOdW1iZXIoYmxvY2tEYXRlLmdldFRpbWUoKSkucGx1cygzNjAwKmxvdHRlcnlJbnRlcnZhbEhvdXJzKjFlMykudG9OdW1iZXIoKX19YXdhaXQgYXBpLmRiLnVwZGF0ZSgicG9vbHMiLHBvb2wpLGFwaS5zZW5kZXIhPT1hcGkub3duZXImJmFwaS5CaWdOdW1iZXIocG9vbFVwZGF0ZUZlZSkuZ3QoMCkmJmF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOiJCRUUiLHF1YW50aXR5OnBvb2xVcGRhdGVGZWUsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX0pfX19fSxhY3Rpb25zLmNoYW5nZU5mdFByb3BlcnR5PWFzeW5jIHBheWxvYWQ9Pntjb25zdHtpZDppZCx0eXBlOnR5cGUscHJvcGVydHlOYW1lOnByb3BlcnR5TmFtZSxjaGFuZ2VBbW91bnQ6Y2hhbmdlQW1vdW50LGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9PXBheWxvYWQ7aWYoIWFwaS5hc3NlcnQoaWQmJiJzdHJpbmciPT10eXBlb2YgaWQmJnR5cGUmJiJzdHJpbmciPT10eXBlb2YgdHlwZSYmcHJvcGVydHlOYW1lJiYic3RyaW5nIj09dHlwZW9mIHByb3BlcnR5TmFtZSYmY2hhbmdlQW1vdW50JiYic3RyaW5nIj09dHlwZW9mIGNoYW5nZUFtb3VudCYmIWFwaS5CaWdOdW1iZXIoY2hhbmdlQW1vdW50KS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKGNoYW5nZUFtb3VudCkuaXNGaW5pdGUoKSwiaW52YWxpZCBwYXJhbXMiKSlyZXR1cm47aWYoIWFwaS5hc3NlcnQoITA9PT1pc1NpZ25lZFdpdGhBY3RpdmVLZXksInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpKXJldHVybjtjb25zdCBwb29sPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwb29scyIse2lkOmlkfSk7aWYoIWFwaS5hc3NlcnQocG9vbCwicG9vbCBpZCBub3QgZm91bmQiKSlyZXR1cm47Y29uc3QgcHJvcGVydHlJbmRleD1wb29sLm5mdFRva2VuTWluZXIucHJvcGVydGllcy5maW5kSW5kZXgocD0+cC5uYW1lPT09cHJvcGVydHlOYW1lKSxwcm9wZXJ0eT1wb29sLm5mdFRva2VuTWluZXIucHJvcGVydGllc1twcm9wZXJ0eUluZGV4XTtpZighYXBpLmFzc2VydChwcm9wZXJ0eSYmcHJvcGVydHkuYnVybkNoYW5nZSwicHJvcGVydHkgbm90IGVuYWJsZWQgZm9yIGJ1cm4gY2hhbmdlIikpcmV0dXJuO2NvbnN0IHR5cGVQcm9wZXJ0aWVzPXBvb2wubmZ0VG9rZW5NaW5lci50eXBlTWFwW3R5cGVdO2lmKCFhcGkuYXNzZXJ0KHR5cGVQcm9wZXJ0aWVzLCJ0eXBlIG5vdCBmb3VuZCIpKXJldHVybjtjb25zdCBidXJuU3ltYm9sPXByb3BlcnR5LmJ1cm5DaGFuZ2Uuc3ltYm9sLHRva2VuPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwidG9rZW5zIix7c3ltYm9sOmJ1cm5TeW1ib2x9KSxmZWU9YXBpLkJpZ051bWJlcihjaGFuZ2VBbW91bnQpLmFicygpLm11bHRpcGxpZWRCeShwcm9wZXJ0eS5idXJuQ2hhbmdlLnF1YW50aXR5KTtpZighYXBpLmFzc2VydChmZWUuZHAoKTw9dG9rZW4ucHJlY2lzaW9uLCJmZWUgcHJlY2lzaW9uIG1pc21hdGNoIGZvciBhbW91bnQgIitmZWUpKXJldHVybjtjb25zdCBiYWxhbmNlPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOmJ1cm5TeW1ib2x9KSxhdXRob3JpemVkPWFwaS5CaWdOdW1iZXIoZmVlKS5sdGUoMCl8fGJhbGFuY2UmJmFwaS5CaWdOdW1iZXIoYmFsYW5jZS5iYWxhbmNlKS5ndGUoZmVlKTtpZighYXBpLmFzc2VydChhdXRob3JpemVkLGB5b3UgbXVzdCBoYXZlIGVub3VnaCB0b2tlbnMgdG8gY292ZXIgdGhlIHVwZGF0ZSBmZWUgb2YgJHtmZWV9ICR7YnVyblN5bWJvbH1gKSlyZXR1cm47aWYodHlwZVByb3BlcnRpZXNbcHJvcGVydHlJbmRleF09YXBpLkJpZ051bWJlcih0eXBlUHJvcGVydGllc1twcm9wZXJ0eUluZGV4XSkucGx1cyhjaGFuZ2VBbW91bnQpLCF2YWxpZGF0ZU5mdFR5cGVNYXAocG9vbC5uZnRUb2tlbk1pbmVyLnR5cGVNYXAscG9vbC5uZnRUb2tlbk1pbmVyLnByb3BlcnRpZXMpKXJldHVybjtjb25zdCBibG9ja0RhdGU9bmV3IERhdGUoYXBpLmhpdmVCbG9ja1RpbWVzdGFtcCsiLjAwMFoiKTtwb29sLnVwZGF0aW5nLnVwZGF0ZVBvb2xUaW1lc3RhbXA9YXBpLkJpZ051bWJlcihibG9ja0RhdGUuZ2V0VGltZSgpKS50b051bWJlcigpLHBvb2wudXBkYXRpbmcuaW5Qcm9ncmVzcz0hMCxwb29sLnVwZGF0aW5nLnRva2VuSW5kZXg9MCxwb29sLnVwZGF0aW5nLm5mdFRva2VuSW5kZXg9MCxwb29sLnVwZGF0aW5nLmxhc3RJZD0wLHBvb2wudG90YWxQb3dlcj0iMCIsYXdhaXQgYXBpLmRiLnVwZGF0ZSgicG9vbHMiLHBvb2wpLGFwaS5CaWdOdW1iZXIoZmVlKS5ndCgwKSYmYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlciIse3RvOiJudWxsIixzeW1ib2w6YnVyblN5bWJvbCxxdWFudGl0eTpmZWUsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX0pfSxhY3Rpb25zLmNyZWF0ZVBvb2w9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2xvdHRlcnlXaW5uZXJzOmxvdHRlcnlXaW5uZXJzLGxvdHRlcnlJbnRlcnZhbEhvdXJzOmxvdHRlcnlJbnRlcnZhbEhvdXJzLGxvdHRlcnlBbW91bnQ6bG90dGVyeUFtb3VudCxtaW5lZFRva2VuOm1pbmVkVG9rZW4sdG9rZW5NaW5lcnM6dG9rZW5NaW5lcnMsbmZ0VG9rZW5NaW5lcjpuZnRUb2tlbk1pbmVyLGV4dGVybmFsTWluZXJzOmV4dGVybmFsTWluZXJzLGNhbGxpbmdDb250cmFjdEluZm86Y2FsbGluZ0NvbnRyYWN0SW5mbyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fT1wYXlsb2FkLHBhcmFtcz1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSkse3Bvb2xDcmVhdGlvbkZlZTpwb29sQ3JlYXRpb25GZWV9PXBhcmFtcztpZighKHZvaWQgMD09PWV4dGVybmFsTWluZXJzfHxhcGkuYXNzZXJ0KCJzdHJpbmciPT10eXBlb2YgZXh0ZXJuYWxNaW5lcnMsImV4dGVybmFsTWluZXJzIG11c3QgYmUgYSBzdHJpbmciKSYmYXBpLmFzc2VydChjYWxsaW5nQ29udHJhY3RJbmZvLCJtdXN0IGJlIGNhbGxlZCBmcm9tIGEgY29udHJhY3QiKSkpcmV0dXJuO2NvbnN0IHV0aWxpdHlUb2tlbkJhbGFuY2U9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJiYWxhbmNlcyIse2FjY291bnQ6YXBpLnNlbmRlcixzeW1ib2w6IkJFRSJ9KSxhdXRob3JpemVkQ3JlYXRpb249ISghYXBpLkJpZ051bWJlcihwb29sQ3JlYXRpb25GZWUpLmx0ZSgwKSYmYXBpLnNlbmRlciE9PWFwaS5vd25lcil8fHV0aWxpdHlUb2tlbkJhbGFuY2UmJmFwaS5CaWdOdW1iZXIodXRpbGl0eVRva2VuQmFsYW5jZS5iYWxhbmNlKS5ndGUocG9vbENyZWF0aW9uRmVlKTtpZihhcGkuYXNzZXJ0KGF1dGhvcml6ZWRDcmVhdGlvbiwieW91IG11c3QgaGF2ZSBlbm91Z2ggdG9rZW5zIHRvIGNvdmVyIHRoZSBjcmVhdGlvbiBmZWUiKSYmYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQobWluZWRUb2tlbiYmInN0cmluZyI9PXR5cGVvZiBtaW5lZFRva2VuJiZsb3R0ZXJ5QW1vdW50JiYic3RyaW5nIj09dHlwZW9mIGxvdHRlcnlBbW91bnQmJiFhcGkuQmlnTnVtYmVyKGxvdHRlcnlBbW91bnQpLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIobG90dGVyeUFtb3VudCkuZ3QoMCksImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQobWluZWRUb2tlbi5sZW5ndGg+MCYmbWluZWRUb2tlbi5sZW5ndGg8PTEwLCJpbnZhbGlkIHN5bWJvbDogdXBwZXJjYXNlIGxldHRlcnMgb25seSwgbWF4IGxlbmd0aCBvZiAxMCIpJiZhcGkuYXNzZXJ0KE51bWJlci5pc0ludGVnZXIobG90dGVyeVdpbm5lcnMpJiZsb3R0ZXJ5V2lubmVycz49MSYmbG90dGVyeVdpbm5lcnM8PTIwLCJpbnZhbGlkIGxvdHRlcnlXaW5uZXJzOiBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgMjAgb25seSIpJiZhcGkuYXNzZXJ0KE51bWJlci5pc0ludGVnZXIobG90dGVyeUludGVydmFsSG91cnMpJiZsb3R0ZXJ5SW50ZXJ2YWxIb3Vycz49MSYmbG90dGVyeUludGVydmFsSG91cnM8PTcyMCwiaW52YWxpZCBsb3R0ZXJ5SW50ZXJ2YWxIb3VyczogaW50ZWdlciBiZXR3ZWVuIDEgYW5kIDcyMCBvbmx5Iikpe2NvbnN0IG1pbmVkVG9rZW5PYmplY3Q9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJ0b2tlbnMiLHtzeW1ib2w6bWluZWRUb2tlbn0pO2lmKGFwaS5hc3NlcnQobWluZWRUb2tlbk9iamVjdCwibWluZWRUb2tlbiBkb2VzIG5vdCBleGlzdCIpJiZhcGkuYXNzZXJ0KG1pbmVkVG9rZW5PYmplY3QuaXNzdWVyPT09YXBpLnNlbmRlcnx8IkJFRSI9PT1taW5lZFRva2VuT2JqZWN0LnN5bWJvbCYmYXBpLnNlbmRlcj09PWFwaS5vd25lciwibXVzdCBiZSBpc3N1ZXIgb2YgbWluZWRUb2tlbiIpJiZhcGkuYXNzZXJ0KGFwaS5CaWdOdW1iZXIobG90dGVyeUFtb3VudCkuZHAoKTw9bWluZWRUb2tlbk9iamVjdC5wcmVjaXNpb24sIm1pbmVkVG9rZW4gcHJlY2lzaW9uIG1pc21hdGNoIGZvciBsb3R0ZXJ5QW1vdW50IikmJihjYWxsaW5nQ29udHJhY3RJbmZvfHxhd2FpdCB2YWxpZGF0ZVRva2VuTWluZXJzKHRva2VuTWluZXJzLG5mdFRva2VuTWluZXIpKSl7Y29uc3QgYmxvY2tEYXRlPW5ldyBEYXRlKGFwaS5oaXZlQmxvY2tUaW1lc3RhbXArIi4wMDBaIiksbmV3UG9vbD17bWluZWRUb2tlbjptaW5lZFRva2VuLGxvdHRlcnlXaW5uZXJzOmxvdHRlcnlXaW5uZXJzLGxvdHRlcnlJbnRlcnZhbEhvdXJzOmxvdHRlcnlJbnRlcnZhbEhvdXJzLGxvdHRlcnlBbW91bnQ6bG90dGVyeUFtb3VudCx0b2tlbk1pbmVyczp0b2tlbk1pbmVyc3x8W10sbmZ0VG9rZW5NaW5lcjpuZnRUb2tlbk1pbmVyLGFjdGl2ZTohMSxuZXh0TG90dGVyeVRpbWVzdGFtcDphcGkuQmlnTnVtYmVyKGJsb2NrRGF0ZS5nZXRUaW1lKCkpLnBsdXMoMzYwMCpsb3R0ZXJ5SW50ZXJ2YWxIb3VycyoxZTMpLnRvTnVtYmVyKCksdG90YWxQb3dlcjoiMCJ9O2lmKGNhbGxpbmdDb250cmFjdEluZm8pe2lmKCFhcGkuYXNzZXJ0KCFuZnRUb2tlbk1pbmVyLCJleHRlcm5hbCBuZnRUb2tlbk1pbmVyIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIikpcmV0dXJuO25ld1Bvb2wuZXh0ZXJuYWxDb250cmFjdD1jYWxsaW5nQ29udHJhY3RJbmZvLm5hbWUsbmV3UG9vbC5leHRlcm5hbE1pbmVycz1leHRlcm5hbE1pbmVyc31uZXdQb29sLmlkPWdlbmVyYXRlUG9vbElkKG5ld1Bvb2wpO2NvbnN0IGV4aXN0aW5nUG9vbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgicG9vbHMiLHtpZDpuZXdQb29sLmlkfSk7aWYoYXBpLmFzc2VydCghZXhpc3RpbmdQb29sLCJwb29sIGFscmVhZHkgZXhpc3RzIikpe2lmKHRva2VuTWluZXJzKWZvcihsZXQgaT0wO2k8dG9rZW5NaW5lcnMubGVuZ3RoO2krPTEpe2NvbnN0IHRva2VuQ29uZmlnPXRva2VuTWluZXJzW2ldO2F3YWl0IGFwaS5kYi5pbnNlcnQoInRva2VuUG9vbHMiLHtzeW1ib2w6dG9rZW5Db25maWcuc3ltYm9sLGlkOm5ld1Bvb2wuaWR9KX1uZXdQb29sLnVwZGF0aW5nPXtpblByb2dyZXNzOiEwLHVwZGF0ZVBvb2xUaW1lc3RhbXA6YXBpLkJpZ051bWJlcihibG9ja0RhdGUuZ2V0VGltZSgpKS50b051bWJlcigpLHRva2VuSW5kZXg6MCxuZnRUb2tlbkluZGV4OjAsbGFzdElkOjB9O2NvbnN0IGluc2VydGVkUG9vbD1hd2FpdCBhcGkuZGIuaW5zZXJ0KCJwb29scyIsbmV3UG9vbCk7YXBpLnNlbmRlciE9PWFwaS5vd25lciYmYXBpLkJpZ051bWJlcihwb29sQ3JlYXRpb25GZWUpLmd0KDApJiZhd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoInRva2VucyIsInRyYW5zZmVyIix7dG86Im51bGwiLHN5bWJvbDoiQkVFIixxdWFudGl0eTpwb29sQ3JlYXRpb25GZWUsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX0pLGFwaS5lbWl0KCJjcmVhdGVQb29sIix7aWQ6aW5zZXJ0ZWRQb29sLmlkfSl9fX19LGFjdGlvbnMuY2hlY2tQZW5kaW5nTG90dGVyaWVzPWFzeW5jKCk9PntpZihhcGkuYXNzZXJ0KCJudWxsIj09PWFwaS5zZW5kZXIsIm5vdCBhdXRob3JpemVkIikpe2NvbnN0IHRpbWVzdGFtcD1uZXcgRGF0ZShhcGkuaGl2ZUJsb2NrVGltZXN0YW1wKyIuMDAwWiIpLmdldFRpbWUoKSxwYXJhbXM9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pLHVwZGF0aW5nTG90dGVyaWVzPWF3YWl0IGFwaS5kYi5maW5kKCJwb29scyIseyJ1cGRhdGluZy5pblByb2dyZXNzIjohMH0scGFyYW1zLm1heExvdHRlcmllc1BlckJsb2NrLDAsW3tpbmRleDoiaWQiLGRlc2NlbmRpbmc6ITF9XSk7Zm9yKGxldCBpPTA7aTx1cGRhdGluZ0xvdHRlcmllcy5sZW5ndGg7aSs9MSl7Y29uc3QgcG9vbD11cGRhdGluZ0xvdHRlcmllc1tpXTthd2FpdCByZXN1bWVQb3dlclVwZGF0ZShwb29sLHBhcmFtcyl9Y29uc3QgcGVuZGluZ0xvdHRlcmllcz1hd2FpdCBhcGkuZGIuZmluZCgicG9vbHMiLHthY3RpdmU6ITAsInVwZGF0aW5nLmluUHJvZ3Jlc3MiOiExLG5leHRMb3R0ZXJ5VGltZXN0YW1wOnskbHRlOnRpbWVzdGFtcH19LHBhcmFtcy5tYXhMb3R0ZXJpZXNQZXJCbG9jaywwLFt7aW5kZXg6ImlkIixkZXNjZW5kaW5nOiExfV0pO2ZvcihsZXQgaT0wO2k8cGVuZGluZ0xvdHRlcmllcy5sZW5ndGg7aSs9MSl7Y29uc3QgcG9vbD1wZW5kaW5nTG90dGVyaWVzW2ldO2F3YWl0IHJ1bkxvdHRlcnkocG9vbCxwYXJhbXMpfX19LGFjdGlvbnMuaGFuZGxlU3Rha2VDaGFuZ2U9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2FjY291bnQ6YWNjb3VudCxzeW1ib2w6c3ltYm9sLHF1YW50aXR5OnF1YW50aXR5LGRlbGVnYXRlZDpkZWxlZ2F0ZWQsY2FsbGluZ0NvbnRyYWN0SW5mbzpjYWxsaW5nQ29udHJhY3RJbmZvfT1wYXlsb2FkO2FwaS5hc3NlcnQoY2FsbGluZ0NvbnRyYWN0SW5mbyYmInRva2VucyI9PT1jYWxsaW5nQ29udHJhY3RJbmZvLm5hbWUsIm11c3QgYmUgY2FsbGVkIGZyb20gdG9rZW5zIGNvbnRyYWN0IikmJmF3YWl0IGZpbmRBbmRQcm9jZXNzQWxsKCJtaW5pbmciLCJ0b2tlblBvb2xzIix7c3ltYm9sOnN5bWJvbH0sYXN5bmMgdG9rZW5Qb29sPT57Y29uc3QgcG9vbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgicG9vbHMiLHtpZDp0b2tlblBvb2wuaWR9KTtsZXQgYWRqdXN0ZWQ7YWRqdXN0ZWQ9ZGVsZWdhdGVkP2F3YWl0IHVwZGF0ZU1pbmluZ1Bvd2VyKHBvb2wsc3ltYm9sLGFjY291bnQsMCxxdWFudGl0eSk6YXdhaXQgdXBkYXRlTWluaW5nUG93ZXIocG9vbCxzeW1ib2wsYWNjb3VudCxxdWFudGl0eSwwKSxwb29sLnRvdGFsUG93ZXI9YWRqdXN0ZWQucGx1cyhwb29sLnRvdGFsUG93ZXIpLGF3YWl0IGFwaS5kYi51cGRhdGUoInBvb2xzIixwb29sKX0pfSxhY3Rpb25zLmhhbmRsZU5mdENoYW5nZT1hc3luYygpPT57fSxhY3Rpb25zLmhhbmRsZU5mdERlbGVnYXRpb25DaGFuZ2U9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e3N5bWJvbDpzeW1ib2wsbmZ0Om5mdCxhZGQ6YWRkLGNhbGxpbmdDb250cmFjdEluZm86Y2FsbGluZ0NvbnRyYWN0SW5mb309cGF5bG9hZDthcGkuYXNzZXJ0KGNhbGxpbmdDb250cmFjdEluZm8mJiJuZnQiPT09Y2FsbGluZ0NvbnRyYWN0SW5mby5uYW1lLCJtdXN0IGJlIGNhbGxlZCBmcm9tIG5mdCBjb250cmFjdCIpJiZhd2FpdCBmaW5kQW5kUHJvY2Vzc0FsbCgibWluaW5nIiwibmZ0VG9rZW5Qb29scyIse3N5bWJvbDpzeW1ib2x9LGFzeW5jIHRva2VuUG9vbD0+e2NvbnN0IHBvb2w9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBvb2xzIix7aWQ6dG9rZW5Qb29sLmlkfSk7aWYocG9vbC51cGRhdGluZy5pblByb2dyZXNzJiZwb29sLnVwZGF0aW5nLnRva2VuSW5kZXg9PT1wb29sLnRva2VuTWluZXJzLmxlbmd0aCYmcG9vbC51cGRhdGluZy5sYXN0SWQ8bmZ0Ll9pZClyZXR1cm47aWYoIXBvb2wuYWN0aXZlKXJldHVybjtpZighcG9vbC5uZnRUb2tlbk1pbmVyKXJldHVybjtjb25zdHtlcXVpcEZpZWxkOmVxdWlwRmllbGQsdHlwZUZpZWxkOnR5cGVGaWVsZCx0eXBlTWFwOnR5cGVNYXAsbWluaW5nUG93ZXJGaWVsZDptaW5pbmdQb3dlckZpZWxkfT1wb29sLm5mdFRva2VuTWluZXI7aWYoZXF1aXBGaWVsZClyZXR1cm47aWYodHlwZU1hcFtuZnQucHJvcGVydGllc1t0eXBlRmllbGRdXXx8bWluaW5nUG93ZXJGaWVsZCl7Y29uc3QgYWRqdXN0ZWQ9YXdhaXQgdXBkYXRlTmZ0TWluaW5nUG93ZXIocG9vbCxuZnQsYWRkLHBvb2wudXBkYXRpbmcudXBkYXRlUG9vbFRpbWVzdGFtcCk7cG9vbC50b3RhbFBvd2VyPWFkanVzdGVkLnBsdXMocG9vbC50b3RhbFBvd2VyKSxhd2FpdCBhcGkuZGIudXBkYXRlKCJwb29scyIscG9vbCl9fSl9LGFjdGlvbnMuaGFuZGxlTmZ0U2V0UHJvcGVydHk9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e3N5bWJvbDpzeW1ib2wsbmZ0Om5mdCxwcm9wZXJ0eU5hbWU6cHJvcGVydHlOYW1lLG9sZFZhbHVlOm9sZFZhbHVlLGNhbGxpbmdDb250cmFjdEluZm86Y2FsbGluZ0NvbnRyYWN0SW5mb309cGF5bG9hZDtpZihhcGkuYXNzZXJ0KGNhbGxpbmdDb250cmFjdEluZm8mJiJuZnQiPT09Y2FsbGluZ0NvbnRyYWN0SW5mby5uYW1lLCJtdXN0IGJlIGNhbGxlZCBmcm9tIG5mdCBjb250cmFjdCIpKXtjb25zdCBuZXdWYWx1ZT1uZnQucHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO2lmKG9sZFZhbHVlPT09bmV3VmFsdWUpcmV0dXJuO2F3YWl0IGZpbmRBbmRQcm9jZXNzQWxsKCJtaW5pbmciLCJuZnRUb2tlblBvb2xzIix7c3ltYm9sOnN5bWJvbH0sYXN5bmMgdG9rZW5Qb29sPT57Y29uc3QgcG9vbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgicG9vbHMiLHtpZDp0b2tlblBvb2wuaWR9KTtpZihwb29sLnVwZGF0aW5nLmluUHJvZ3Jlc3MmJnBvb2wudXBkYXRpbmcudG9rZW5JbmRleD09PXBvb2wudG9rZW5NaW5lcnMubGVuZ3RoJiZwb29sLnVwZGF0aW5nLmxhc3RJZDxuZnQuX2lkKXJldHVybjtpZighcG9vbC5hY3RpdmUpcmV0dXJuO2lmKCFwb29sLm5mdFRva2VuTWluZXIpcmV0dXJuO2NvbnN0e2VxdWlwRmllbGQ6ZXF1aXBGaWVsZCxtaW5pbmdQb3dlckZpZWxkOm1pbmluZ1Bvd2VyRmllbGR9PXBvb2wubmZ0VG9rZW5NaW5lcjtpZihlcXVpcEZpZWxkJiZwcm9wZXJ0eU5hbWU9PT1lcXVpcEZpZWxkKXtpZihvbGRWYWx1ZSYmYXBpLmlzVmFsaWRBY2NvdW50TmFtZShvbGRWYWx1ZSkpe2NvbnN0IGFkanVzdGVkPWF3YWl0IHVwZGF0ZU5mdE1pbmluZ1Bvd2VyKHBvb2wsbmZ0LCExLHBvb2wudXBkYXRpbmcudXBkYXRlUG9vbFRpbWVzdGFtcCxvbGRWYWx1ZSk7cG9vbC50b3RhbFBvd2VyPWFkanVzdGVkLnBsdXMocG9vbC50b3RhbFBvd2VyKX1pZihuZXdWYWx1ZSYmYXBpLmlzVmFsaWRBY2NvdW50TmFtZShuZXdWYWx1ZSkpe2NvbnN0IGFkanVzdGVkPWF3YWl0IHVwZGF0ZU5mdE1pbmluZ1Bvd2VyKHBvb2wsbmZ0LCEwLHBvb2wudXBkYXRpbmcudXBkYXRlUG9vbFRpbWVzdGFtcCxuZXdWYWx1ZSk7cG9vbC50b3RhbFBvd2VyPWFkanVzdGVkLnBsdXMocG9vbC50b3RhbFBvd2VyKX19ZWxzZSBpZihtaW5pbmdQb3dlckZpZWxkJiZwcm9wZXJ0eU5hbWU9PT1taW5pbmdQb3dlckZpZWxkJiYoIWVxdWlwRmllbGR8fGFwaS5pc1ZhbGlkQWNjb3VudE5hbWUobmZ0LnByb3BlcnRpZXNbZXF1aXBGaWVsZF0pKSl7Y29uc3QgYWRqdXN0ZWQ9YXdhaXQgdXBkYXRlTmZ0TWluaW5nUG93ZXJGcm9tUHJvcGVydHlVcGRhdGUocG9vbCxuZnQsZXF1aXBGaWVsZD9uZnQucHJvcGVydGllc1tlcXVpcEZpZWxkXTpudWxsKTtwb29sLnRvdGFsUG93ZXI9YWRqdXN0ZWQucGx1cyhwb29sLnRvdGFsUG93ZXIpfWF3YWl0IGFwaS5kYi51cGRhdGUoInBvb2xzIixwb29sKX0pfX07"}}}

Mining Smart Contract | Ecency