NFT Smart Contract

in #hive-engine2 years ago

{"id":"ssc-mainnet-hive","json":{"contractName":"contract","contractAction":"update","contractPayload":{"name":"nft","params":"","code":"Y29uc3QgQ09OVFJBQ1RfTkFNRT0ibmZ0IixVVElMSVRZX1RPS0VOX1NZTUJPTD0iQkVFIixNQVhfTlVNX0FVVEhPUklaRURfSVNTVUVSUz0xMCxNQVhfTlVNX0xPQ0tFRF9UT0tFTl9UWVBFUz0xMCxNQVhfU1lNQk9MX0xFTkdUSD0xMCxNQVhfREFUQV9QUk9QRVJUWV9MRU5HVEg9MTAwLE1BWF9OVU1fTkZUU19JU1NVQUJMRT0xMCxNQVhfTlVNX05GVFNfRURJVEFCTEU9NTAsTUFYX05VTV9ORlRTX09QRVJBQkxFPTUwLE1BWF9OVU1fQ09OVEFJTkVSX05GVFNfT1BFUkFCTEU9MSxSRVNFUlZFRF9TWU1CT0xTPXtDRUxMOiJiZWdnYXJzIixRVVNUOiJzaW1wbGVnYW1lIixURVNURVJBOiJhZ2dyb2VkIixTUVJMOiJzdHVmZmJ5c3BlbmNlciIsQ1JBRlQ6ImltbWFudWVsOTQiLENHVUxMOiJjZ3VsbCIsTkZUOiJjYWRhd2ciLFJBUkU6ImJlZ2dhcnMiLExJQzoibGljdG9rZW4iLE1FTUJFUjoibWVtYmVydG9rZW4iLENPRkZFRToiYzBmZjMzYSIsUk9DSzoiYmVnZ2FycyIsTU9OU1RFUlM6InNpbXBsZWdhbWUiLFNFVFM6Imxvb3RraXQuZ2FtZXMiLFBIT1RPRlQ6Ind3d2llYmUiLEJFRVI6ImRldGxldiIsU1BJUjoic3BpbnZlc3QiLElGRzoibGlvbjIwMCIsR1VJTERTOiJzaW1wbGVnYW1lIixGQ0FSRDoibGlvbjIwMCIsUFhMOiJwaXhlbG5mdCIsQ09XOiJzdHVmZmJ5c3BlbmNlciIsTE9PT1Q6InN0dWZmYnlzcGVuY2VyIixTUE9SVFNNT006InNwb3J0c3Rlc3RlciIsU1dUOiJzYXRyZW4ifTthY3Rpb25zLmNyZWF0ZVNTQz1hc3luYygpPT57aWYoITE9PT1hd2FpdCBhcGkuZGIudGFibGVFeGlzdHMoIm5mdHMiKSl7YXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCJuZnRzIixbInN5bWJvbCJdKSxhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoInBhcmFtcyIpLGF3YWl0IGFwaS5kYi5jcmVhdGVUYWJsZSgicGVuZGluZ1VuZGVsZWdhdGlvbnMiLFsic3ltYm9sIiwiY29tcGxldGVUaW1lc3RhbXAiXSk7Y29uc3QgcGFyYW1zPXtuZnRDcmVhdGlvbkZlZToiMTAwIixuZnRJc3N1YW5jZUZlZTp7IkJFRSI6IjAuMDAxIixQQUw6IjAuMDAxIn0sZGF0YVByb3BlcnR5Q3JlYXRpb25GZWU6IjEwMCIsZW5hYmxlRGVsZWdhdGlvbkZlZToiMTAwMCJ9O2F3YWl0IGFwaS5kYi5pbnNlcnQoInBhcmFtcyIscGFyYW1zKX19LGFjdGlvbnMudXBkYXRlUGFyYW1zPWFzeW5jIHBheWxvYWQ9PntpZihhcGkuc2VuZGVyIT09YXBpLm93bmVyKXJldHVybjtjb25zdHtuZnRDcmVhdGlvbkZlZTpuZnRDcmVhdGlvbkZlZSxuZnRJc3N1YW5jZUZlZTpuZnRJc3N1YW5jZUZlZSxkYXRhUHJvcGVydHlDcmVhdGlvbkZlZTpkYXRhUHJvcGVydHlDcmVhdGlvbkZlZSxlbmFibGVEZWxlZ2F0aW9uRmVlOmVuYWJsZURlbGVnYXRpb25GZWV9PXBheWxvYWQscGFyYW1zPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KTtuZnRDcmVhdGlvbkZlZSYmInN0cmluZyI9PXR5cGVvZiBuZnRDcmVhdGlvbkZlZSYmIWFwaS5CaWdOdW1iZXIobmZ0Q3JlYXRpb25GZWUpLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIobmZ0Q3JlYXRpb25GZWUpLmd0ZSgwKSYmKHBhcmFtcy5uZnRDcmVhdGlvbkZlZT1uZnRDcmVhdGlvbkZlZSksbmZ0SXNzdWFuY2VGZWUmJiJvYmplY3QiPT10eXBlb2YgbmZ0SXNzdWFuY2VGZWUmJihwYXJhbXMubmZ0SXNzdWFuY2VGZWU9bmZ0SXNzdWFuY2VGZWUpLGRhdGFQcm9wZXJ0eUNyZWF0aW9uRmVlJiYic3RyaW5nIj09dHlwZW9mIGRhdGFQcm9wZXJ0eUNyZWF0aW9uRmVlJiYhYXBpLkJpZ051bWJlcihkYXRhUHJvcGVydHlDcmVhdGlvbkZlZSkuaXNOYU4oKSYmYXBpLkJpZ051bWJlcihkYXRhUHJvcGVydHlDcmVhdGlvbkZlZSkuZ3RlKDApJiYocGFyYW1zLmRhdGFQcm9wZXJ0eUNyZWF0aW9uRmVlPWRhdGFQcm9wZXJ0eUNyZWF0aW9uRmVlKSxlbmFibGVEZWxlZ2F0aW9uRmVlJiYic3RyaW5nIj09dHlwZW9mIGVuYWJsZURlbGVnYXRpb25GZWUmJiFhcGkuQmlnTnVtYmVyKGVuYWJsZURlbGVnYXRpb25GZWUpLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIoZW5hYmxlRGVsZWdhdGlvbkZlZSkuZ3RlKDApJiYocGFyYW1zLmVuYWJsZURlbGVnYXRpb25GZWU9ZW5hYmxlRGVsZWdhdGlvbkZlZSksYXdhaXQgYXBpLmRiLnVwZGF0ZSgicGFyYW1zIixwYXJhbXMpfTtjb25zdCBpc1Rva2VuVHJhbnNmZXJWZXJpZmllZD0ocmVzdWx0LGZyb20sdG8sc3ltYm9sLHF1YW50aXR5LGV2ZW50U3RyKT0+ISh2b2lkIDAhPT1yZXN1bHQuZXJyb3JzfHwhcmVzdWx0LmV2ZW50c3x8dm9pZCAwPT09cmVzdWx0LmV2ZW50cy5maW5kKGVsPT4idG9rZW5zIj09PWVsLmNvbnRyYWN0JiZlbC5ldmVudD09PWV2ZW50U3RyJiZlbC5kYXRhLmZyb209PT1mcm9tJiZlbC5kYXRhLnRvPT09dG8mJmVsLmRhdGEucXVhbnRpdHk9PT1xdWFudGl0eSYmZWwuZGF0YS5zeW1ib2w9PT1zeW1ib2wpKSxjYWxjdWxhdGVCYWxhbmNlPShiYWxhbmNlLHF1YW50aXR5LHByZWNpc2lvbixhZGQpPT5hZGQ/YXBpLkJpZ051bWJlcihiYWxhbmNlKS5wbHVzKHF1YW50aXR5KS50b0ZpeGVkKHByZWNpc2lvbik6YXBpLkJpZ051bWJlcihiYWxhbmNlKS5taW51cyhxdWFudGl0eSkudG9GaXhlZChwcmVjaXNpb24pLGNvdW50RGVjaW1hbHM9dmFsdWU9PmFwaS5CaWdOdW1iZXIodmFsdWUpLmRwKCksY29udGFpbnNEdXBsaWNhdGVzPWFycj0+bmV3IFNldChhcnIpLnNpemUhPT1hcnIubGVuZ3RoLGlzVmFsaWRIaXZlQWNjb3VudExlbmd0aD1hY2NvdW50PT5hY2NvdW50Lmxlbmd0aD49MyYmYWNjb3VudC5sZW5ndGg8PTE2LGlzVmFsaWRDb250cmFjdExlbmd0aD1jb250cmFjdD0+Y29udHJhY3QubGVuZ3RoPj0zJiZjb250cmFjdC5sZW5ndGg8PTUwLGlzVmFsaWRBY2NvdW50c0FycmF5PWFycj0+e2xldCB2YWxpZENvbnRlbnRzPSEwO3JldHVybiBhcnIuZm9yRWFjaChhY2NvdW50PT57InN0cmluZyI9PXR5cGVvZiBhY2NvdW50JiZpc1ZhbGlkSGl2ZUFjY291bnRMZW5ndGgoYWNjb3VudCl8fCh2YWxpZENvbnRlbnRzPSExKX0pLHZhbGlkQ29udGVudHN9LGlzVmFsaWRDb250cmFjdHNBcnJheT1hcnI9PntsZXQgdmFsaWRDb250ZW50cz0hMDtyZXR1cm4gYXJyLmZvckVhY2goY29udHJhY3Q9Pnsic3RyaW5nIj09dHlwZW9mIGNvbnRyYWN0JiZpc1ZhbGlkQ29udHJhY3RMZW5ndGgoY29udHJhY3QpfHwodmFsaWRDb250ZW50cz0hMSl9KSx2YWxpZENvbnRlbnRzfSxpc1ZhbGlkRGF0YVByb3BlcnRpZXM9KGZyb20sZnJvbVR5cGUsbmZ0LHByb3BlcnRpZXMpPT57Y29uc3QgcHJvcGVydHlDb3VudD1PYmplY3Qua2V5cyhwcm9wZXJ0aWVzKS5sZW5ndGgsbmZ0UHJvcGVydHlDb3VudD1PYmplY3Qua2V5cyhuZnQucHJvcGVydGllcykubGVuZ3RoO2lmKCFhcGkuYXNzZXJ0KHByb3BlcnR5Q291bnQ8PW5mdFByb3BlcnR5Q291bnQsImNhbm5vdCBzZXQgbW9yZSBkYXRhIHByb3BlcnRpZXMgdGhhbiBORlQgaGFzIikpcmV0dXJuITE7Zm9yKGNvbnN0W25hbWUsZGF0YV1vZiBPYmplY3QuZW50cmllcyhwcm9wZXJ0aWVzKSl7bGV0IHZhbGlkQ29udGVudHM9ITE7aWYoYXBpLmFzc2VydChuYW1lJiYic3RyaW5nIj09dHlwZW9mIG5hbWUmJmFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMobmFtZSkmJm5hbWUubGVuZ3RoPjAmJm5hbWUubGVuZ3RoPD0yNSwiaW52YWxpZCBkYXRhIHByb3BlcnR5IG5hbWU6IGxldHRlcnMgJiBudW1iZXJzIG9ubHksIG1heCBsZW5ndGggb2YgMjUiKSYmYXBpLmFzc2VydChuYW1lIGluIG5mdC5wcm9wZXJ0aWVzLCJkYXRhIHByb3BlcnR5IG11c3QgZXhpc3QiKSl7Y29uc3QgcHJvcGVydHlTY2hlbWE9bmZ0LnByb3BlcnRpZXNbbmFtZV07YXBpLmFzc2VydChudWxsIT1kYXRhJiYodHlwZW9mIGRhdGE9PT1wcm9wZXJ0eVNjaGVtYS50eXBlfHwibnVtYmVyIj09PXByb3BlcnR5U2NoZW1hLnR5cGUmJiJzdHJpbmciPT10eXBlb2YgZGF0YSYmIWFwaS5CaWdOdW1iZXIoZGF0YSkuaXNOYU4oKSksYGRhdGEgcHJvcGVydHkgdHlwZSBtaXNtYXRjaDogZXhwZWN0ZWQgJHtwcm9wZXJ0eVNjaGVtYS50eXBlfSBidXQgZ290ICR7dHlwZW9mIGRhdGF9IGZvciBwcm9wZXJ0eSAke25hbWV9YCkmJmFwaS5hc3NlcnQoInN0cmluZyIhPXR5cGVvZiBkYXRhfHxkYXRhLmxlbmd0aDw9MTAwLCJzdHJpbmcgcHJvcGVydHkgbWF4IGxlbmd0aCBpcyAxMDAgY2hhcmFjdGVycyIpJiZhcGkuYXNzZXJ0KCJjb250cmFjdCI9PT1mcm9tVHlwZSYmcHJvcGVydHlTY2hlbWEuYXV0aG9yaXplZEVkaXRpbmdDb250cmFjdHMuaW5jbHVkZXMoZnJvbSl8fCJ1c2VyIj09PWZyb21UeXBlJiZwcm9wZXJ0eVNjaGVtYS5hdXRob3JpemVkRWRpdGluZ0FjY291bnRzLmluY2x1ZGVzKGZyb20pLCJub3QgYWxsb3dlZCB0byBzZXQgZGF0YSBwcm9wZXJ0aWVzIikmJih2YWxpZENvbnRlbnRzPSEwLCJudW1iZXIiPT09cHJvcGVydHlTY2hlbWEudHlwZSYmInN0cmluZyI9PXR5cGVvZiBkYXRhJiYocHJvcGVydGllc1tuYW1lXT1hcGkuQmlnTnVtYmVyKGRhdGEpLnRvTnVtYmVyKCkpKX1pZighdmFsaWRDb250ZW50cylyZXR1cm4hMX1yZXR1cm4hMH0saXNWYWxpZERhdGFQcm9wZXJ0aWVzQXJyYXk9KGZyb20sZnJvbVR5cGUsbmZ0LGFycik9Pnt0cnl7Zm9yKGxldCBpPTA7aTxhcnIubGVuZ3RoO2krPTEpe2xldCB2YWxpZENvbnRlbnRzPSExO2NvbnN0e2lkOmlkLHByb3BlcnRpZXM6cHJvcGVydGllc309YXJyW2ldO2lmKGFwaS5hc3NlcnQoaWQmJiJzdHJpbmciPT10eXBlb2YgaWQmJiFhcGkuQmlnTnVtYmVyKGlkKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKGlkKS5ndCgwKSYmcHJvcGVydGllcyYmIm9iamVjdCI9PXR5cGVvZiBwcm9wZXJ0aWVzLCJpbnZhbGlkIGRhdGEgcHJvcGVydGllcyIpJiZpc1ZhbGlkRGF0YVByb3BlcnRpZXMoZnJvbSxmcm9tVHlwZSxuZnQscHJvcGVydGllcykmJih2YWxpZENvbnRlbnRzPSEwKSwhdmFsaWRDb250ZW50cylyZXR1cm4hMX19Y2F0Y2goZSl7cmV0dXJuITF9cmV0dXJuITB9LGlzVmFsaWROZnRJZEFycmF5PWFycj0+e3RyeXtsZXQgaW5zdGFuY2VDb3VudD0wO2ZvcihsZXQgaT0wO2k8YXJyLmxlbmd0aDtpKz0xKXtsZXQgdmFsaWRDb250ZW50cz0hMTtjb25zdHtzeW1ib2w6c3ltYm9sLGlkczppZHN9PWFycltpXTtpZihhcGkuYXNzZXJ0KHN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBzeW1ib2wmJmFwaS52YWxpZGF0b3IuaXNBbHBoYShzeW1ib2wpJiZhcGkudmFsaWRhdG9yLmlzVXBwZXJjYXNlKHN5bWJvbCkmJnN5bWJvbC5sZW5ndGg+MCYmc3ltYm9sLmxlbmd0aDw9MTAmJmlkcyYmIm9iamVjdCI9PXR5cGVvZiBpZHMmJkFycmF5LmlzQXJyYXkoaWRzKSwiaW52YWxpZCBuZnQgbGlzdCIpJiYoaW5zdGFuY2VDb3VudCs9aWRzLmxlbmd0aCxhcGkuYXNzZXJ0KGluc3RhbmNlQ291bnQ8PTUwLCJjYW5ub3Qgb3BlcmF0ZSBvbiBtb3JlIHRoYW4gNTAgTkZUIGluc3RhbmNlcyBhdCBvbmNlIikpKXtmb3IobGV0IGo9MDtqPGlkcy5sZW5ndGg7ais9MSl7Y29uc3QgaWQ9aWRzW2pdO2lmKCFhcGkuYXNzZXJ0KGlkJiYic3RyaW5nIj09dHlwZW9mIGlkJiYhYXBpLkJpZ051bWJlcihpZCkuaXNOYU4oKSYmYXBpLkJpZ051bWJlcihpZCkuZ3QoMCksImludmFsaWQgbmZ0IGxpc3QiKSlyZXR1cm4hMX12YWxpZENvbnRlbnRzPSEwfWlmKCF2YWxpZENvbnRlbnRzKXJldHVybiExfX1jYXRjaChlKXtyZXR1cm4hMX1yZXR1cm4hMH0saXNWYWxpZFRva2VuQmFza2V0PWFzeW5jKGJhc2tldCxiYWxhbmNlVGFibGVOYW1lLGFjY291bnROYW1lLGZlZVN5bWJvbCxmZWVRdWFudGl0eSk9Pnt0cnl7aWYoT2JqZWN0LmtleXMoYmFza2V0KS5sZW5ndGg+MTApcmV0dXJuITE7Zm9yKGNvbnN0W3N5bWJvbCxxdWFudGl0eV1vZiBPYmplY3QuZW50cmllcyhiYXNrZXQpKXtsZXQgdmFsaWRDb250ZW50cz0hMTtpZigic3RyaW5nIj09dHlwZW9mIHN5bWJvbCYmYXBpLnZhbGlkYXRvci5pc0FscGhhKHN5bWJvbCkmJmFwaS52YWxpZGF0b3IuaXNVcHBlcmNhc2Uoc3ltYm9sKSYmc3ltYm9sLmxlbmd0aD4wJiZzeW1ib2wubGVuZ3RoPD0xMCl7Y29uc3QgdG9rZW49YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJ0b2tlbnMiLHtzeW1ib2w6c3ltYm9sfSk7aWYodG9rZW4mJnF1YW50aXR5JiYic3RyaW5nIj09dHlwZW9mIHF1YW50aXR5JiYhYXBpLkJpZ051bWJlcihxdWFudGl0eSkuaXNOYU4oKSYmYXBpLkJpZ051bWJlcihxdWFudGl0eSkuZ3QoMCkmJih2YWx1ZT1xdWFudGl0eSxhcGkuQmlnTnVtYmVyKHZhbHVlKS5kcCgpPD10b2tlbi5wcmVjaXNpb24pKXtjb25zdCBmaW5hbFF1YW50aXR5PXN5bWJvbD09PWZlZVN5bWJvbD9jYWxjdWxhdGVCYWxhbmNlKHF1YW50aXR5LGZlZVF1YW50aXR5LHRva2VuLnByZWNpc2lvbiwhMCk6cXVhbnRpdHksYmFza2V0VG9rZW5CYWxhbmNlPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIixiYWxhbmNlVGFibGVOYW1lLHthY2NvdW50OmFjY291bnROYW1lLHN5bWJvbDpzeW1ib2x9KTtiYXNrZXRUb2tlbkJhbGFuY2UmJmFwaS5CaWdOdW1iZXIoYmFza2V0VG9rZW5CYWxhbmNlLmJhbGFuY2UpLmd0ZShmaW5hbFF1YW50aXR5KSYmKHZhbGlkQ29udGVudHM9ITApfX1pZighdmFsaWRDb250ZW50cylyZXR1cm4hMX19Y2F0Y2goZSl7cmV0dXJuITF9dmFyIHZhbHVlO3JldHVybiEwfSx0cmFuc2ZlckFuZFZlcmlmeU5mdHM9YXN5bmMoZnJvbSxmcm9tVHlwZSx0byx0b1R5cGUsbmZ0cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXksY2FsbGluZ0NvbnRyYWN0SW5mbyk9Pntjb25zdCByZXN1bHRzPXtzdWNjZXNzOltdLGZhaWw6W119LGZpbmFsRnJvbVR5cGU9InVzZXIiPT09ZnJvbVR5cGU/InUiOiJjIixmaW5hbFRvVHlwZT0idXNlciI9PT10b1R5cGU/InUiOiJjIjthd2FpdCBhY3Rpb25zLnRyYW5zZmVyKHtmcm9tVHlwZTpmcm9tVHlwZSx0bzp0byx0b1R5cGU6dG9UeXBlLG5mdHM6bmZ0cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5LGNhbGxpbmdDb250cmFjdEluZm86Y2FsbGluZ0NvbnRyYWN0SW5mb30pO2NvbnN0IGxvZ3M9YXBpLmxvZ3MoKSx0b2tlbk1hcD17fSxjb3VudGVkTWFwPXt9O2lmKGxvZ3MuZXZlbnRzKWZvcihsZXQgaT0wO2k8bG9ncy5ldmVudHMubGVuZ3RoO2krPTEpe2NvbnN0IGV2PWxvZ3MuZXZlbnRzW2ldO2lmKGV2LmNvbnRyYWN0JiZldi5ldmVudCYmZXYuZGF0YSYmIm5mdCI9PT1ldi5jb250cmFjdCYmInRyYW5zZmVyIj09PWV2LmV2ZW50JiZldi5kYXRhLmZyb209PT1mcm9tJiZldi5kYXRhLmZyb21UeXBlPT09ZmluYWxGcm9tVHlwZSYmZXYuZGF0YS50bz09PXRvJiZldi5kYXRhLnRvVHlwZT09PWZpbmFsVG9UeXBlKXt0b2tlbk1hcFtldi5kYXRhLnN5bWJvbCsiLSIrZXYuZGF0YS5pZF09MX19Zm9yKGxldCBpbmRleD0wO2luZGV4PG5mdHMubGVuZ3RoO2luZGV4Kz0xKXtjb25zdHtzeW1ib2w6c3ltYm9sLGlkczppZHN9PW5mdHNbaW5kZXhdLHN1Y2Nlc3M9W10sZmFpbD1bXTtmb3IobGV0IGo9MDtqPGlkcy5sZW5ndGg7ais9MSl7Y29uc3QgaW5wdXRLZXk9c3ltYm9sKyItIitpZHNbal07aW5wdXRLZXkgaW4gY291bnRlZE1hcHx8KGlucHV0S2V5IGluIHRva2VuTWFwP3N1Y2Nlc3MucHVzaChpZHNbal0udG9TdHJpbmcoKSk6ZmFpbC5wdXNoKGlkc1tqXS50b1N0cmluZygpKSxjb3VudGVkTWFwW2lucHV0S2V5XT0xKX1zdWNjZXNzLmxlbmd0aD4wJiZyZXN1bHRzLnN1Y2Nlc3MucHVzaCh7c3ltYm9sOnN5bWJvbCxpZHM6c3VjY2Vzc30pLGZhaWwubGVuZ3RoPjAmJnJlc3VsdHMuZmFpbC5wdXNoKHtzeW1ib2w6c3ltYm9sLGlkczpmYWlsfSl9cmV0dXJuIHJlc3VsdHN9O2FjdGlvbnMudXBkYXRlVXJsPWFzeW5jIHBheWxvYWQ9Pntjb25zdHt1cmw6dXJsLHN5bWJvbDpzeW1ib2x9PXBheWxvYWQ7aWYoYXBpLmFzc2VydChzeW1ib2wmJiJzdHJpbmciPT10eXBlb2Ygc3ltYm9sJiZ1cmwmJiJzdHJpbmciPT10eXBlb2YgdXJsLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KHVybC5sZW5ndGg8PTI1NSwiaW52YWxpZCB1cmw6IG1heCBsZW5ndGggb2YgMjU1Iikpe2NvbnN0IG5mdD1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzeW1ib2x9KTtpZihuZnQmJmFwaS5hc3NlcnQobmZ0Lmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpKXRyeXtjb25zdCBtZXRhZGF0YT1KU09OLnBhcnNlKG5mdC5tZXRhZGF0YSk7YXBpLmFzc2VydChtZXRhZGF0YSYmbWV0YWRhdGEudXJsLCJhbiBlcnJvciBvY2N1cmVkIHdoZW4gdHJ5aW5nIHRvIHVwZGF0ZSB0aGUgdXJsIikmJihtZXRhZGF0YS51cmw9dXJsLG5mdC5tZXRhZGF0YT1KU09OLnN0cmluZ2lmeShtZXRhZGF0YSksYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbmZ0KSl9Y2F0Y2goZSl7fX19LGFjdGlvbnMudXBkYXRlTWV0YWRhdGE9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e21ldGFkYXRhOm1ldGFkYXRhLHN5bWJvbDpzeW1ib2x9PXBheWxvYWQ7aWYoYXBpLmFzc2VydChzeW1ib2wmJiJzdHJpbmciPT10eXBlb2Ygc3ltYm9sJiZtZXRhZGF0YSYmIm9iamVjdCI9PXR5cGVvZiBtZXRhZGF0YSwiaW52YWxpZCBwYXJhbXMiKSl7Y29uc3QgbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO2lmKG5mdCYmYXBpLmFzc2VydChuZnQuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpdHJ5e2NvbnN0IGZpbmFsTWV0YWRhdGE9SlNPTi5zdHJpbmdpZnkobWV0YWRhdGEpO2FwaS5hc3NlcnQoZmluYWxNZXRhZGF0YS5sZW5ndGg8PTFlMywiaW52YWxpZCBtZXRhZGF0YTogbWF4IGxlbmd0aCBvZiAxMDAwIikmJihuZnQubWV0YWRhdGE9ZmluYWxNZXRhZGF0YSxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixuZnQpKX1jYXRjaChlKXt9fX0sYWN0aW9ucy51cGRhdGVOYW1lPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtuYW1lOm5hbWUsc3ltYm9sOnN5bWJvbH09cGF5bG9hZDtpZihhcGkuYXNzZXJ0KHN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBzeW1ib2wmJm5hbWUmJiJzdHJpbmciPT10eXBlb2YgbmFtZSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChhcGkudmFsaWRhdG9yLmlzQWxwaGFudW1lcmljKGFwaS52YWxpZGF0b3IuYmxhY2tsaXN0KG5hbWUsIiAiKSkmJm5hbWUubGVuZ3RoPjAmJm5hbWUubGVuZ3RoPD01MCwiaW52YWxpZCBuYW1lOiBsZXR0ZXJzLCBudW1iZXJzLCB3aGl0ZXNwYWNlcyBvbmx5LCBtYXggbGVuZ3RoIG9mIDUwIikpe2NvbnN0IG5mdD1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzeW1ib2x9KTtuZnQmJmFwaS5hc3NlcnQobmZ0Lmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpJiYobmZ0Lm5hbWU9bmFtZSxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixuZnQpKX19LGFjdGlvbnMudXBkYXRlT3JnTmFtZT1hc3luYyBwYXlsb2FkPT57Y29uc3R7b3JnTmFtZTpvcmdOYW1lLHN5bWJvbDpzeW1ib2x9PXBheWxvYWQ7aWYoYXBpLmFzc2VydChzeW1ib2wmJiJzdHJpbmciPT10eXBlb2Ygc3ltYm9sJiZvcmdOYW1lJiYic3RyaW5nIj09dHlwZW9mIG9yZ05hbWUsImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQoYXBpLnZhbGlkYXRvci5pc0FscGhhbnVtZXJpYyhhcGkudmFsaWRhdG9yLmJsYWNrbGlzdChvcmdOYW1lLCIgIikpJiZvcmdOYW1lLmxlbmd0aD4wJiZvcmdOYW1lLmxlbmd0aDw9NTAsImludmFsaWQgb3JnIG5hbWU6IGxldHRlcnMsIG51bWJlcnMsIHdoaXRlc3BhY2VzIG9ubHksIG1heCBsZW5ndGggb2YgNTAiKSl7Y29uc3QgbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO25mdCYmYXBpLmFzc2VydChuZnQuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJihuZnQub3JnTmFtZT1vcmdOYW1lLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLG5mdCkpfX0sYWN0aW9ucy51cGRhdGVQcm9kdWN0TmFtZT1hc3luYyBwYXlsb2FkPT57Y29uc3R7cHJvZHVjdE5hbWU6cHJvZHVjdE5hbWUsc3ltYm9sOnN5bWJvbH09cGF5bG9hZDtpZihhcGkuYXNzZXJ0KHN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBzeW1ib2wmJnByb2R1Y3ROYW1lJiYic3RyaW5nIj09dHlwZW9mIHByb2R1Y3ROYW1lLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QocHJvZHVjdE5hbWUsIiAiKSkmJnByb2R1Y3ROYW1lLmxlbmd0aD4wJiZwcm9kdWN0TmFtZS5sZW5ndGg8PTUwLCJpbnZhbGlkIHByb2R1Y3QgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpKXtjb25zdCBuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7bmZ0JiZhcGkuYXNzZXJ0KG5mdC5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmKG5mdC5wcm9kdWN0TmFtZT1wcm9kdWN0TmFtZSxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixuZnQpKX19LGFjdGlvbnMuYWRkQXV0aG9yaXplZElzc3VpbmdBY2NvdW50cz1hc3luYyBwYXlsb2FkPT57Y29uc3R7YWNjb3VudHM6YWNjb3VudHMsc3ltYm9sOnN5bWJvbCxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fT1wYXlsb2FkO2lmKGFwaS5hc3NlcnQoITA9PT1pc1NpZ25lZFdpdGhBY3RpdmVLZXksInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBzeW1ib2wmJmFjY291bnRzJiYib2JqZWN0Ij09dHlwZW9mIGFjY291bnRzJiZBcnJheS5pc0FycmF5KGFjY291bnRzKSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChhY2NvdW50cy5sZW5ndGg8PTEwLCJjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gMTAgYXV0aG9yaXplZCBpc3N1aW5nIGFjY291bnRzIikpe2NvbnN0IHZhbGlkQ29udGVudHM9aXNWYWxpZEFjY291bnRzQXJyYXkoYWNjb3VudHMpO2lmKGFwaS5hc3NlcnQodmFsaWRDb250ZW50cywiaW52YWxpZCBhY2NvdW50IGxpc3QiKSl7Y29uc3QgbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO2lmKG5mdCl7Y29uc3Qgc2FuaXRpemVkTGlzdD1bXTtpZihhY2NvdW50cy5mb3JFYWNoKGFjY291bnQ9Pntjb25zdCBmaW5hbEFjY291bnQ9YWNjb3VudC50cmltKCkudG9Mb3dlckNhc2UoKTtsZXQgaXNEdXBsaWNhdGU9ITE7Zm9yKGxldCBpPTA7aTxuZnQuYXV0aG9yaXplZElzc3VpbmdBY2NvdW50cy5sZW5ndGg7aSs9MSlpZihmaW5hbEFjY291bnQ9PT1uZnQuYXV0aG9yaXplZElzc3VpbmdBY2NvdW50c1tpXSl7aXNEdXBsaWNhdGU9ITA7YnJlYWt9aXNEdXBsaWNhdGV8fHNhbml0aXplZExpc3QucHVzaChmaW5hbEFjY291bnQpfSksYXBpLmFzc2VydChuZnQuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJmFwaS5hc3NlcnQoIWNvbnRhaW5zRHVwbGljYXRlcyhzYW5pdGl6ZWRMaXN0KSwiY2Fubm90IGFkZCB0aGUgc2FtZSBhY2NvdW50IHR3aWNlIikmJmFwaS5hc3NlcnQobmZ0LmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMubGVuZ3RoK3Nhbml0aXplZExpc3QubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBhY2NvdW50cyIpKXtjb25zdCBmaW5hbEFjY291bnRMaXN0PW5mdC5hdXRob3JpemVkSXNzdWluZ0FjY291bnRzLmNvbmNhdChzYW5pdGl6ZWRMaXN0KTtuZnQuYXV0aG9yaXplZElzc3VpbmdBY2NvdW50cz1maW5hbEFjY291bnRMaXN0LGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLG5mdCl9fX19fSxhY3Rpb25zLmFkZEF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtjb250cmFjdHM6Y29udHJhY3RzLHN5bWJvbDpzeW1ib2wsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX09cGF5bG9hZDtpZihhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzeW1ib2wmJiJzdHJpbmciPT10eXBlb2Ygc3ltYm9sJiZjb250cmFjdHMmJiJvYmplY3QiPT10eXBlb2YgY29udHJhY3RzJiZBcnJheS5pc0FycmF5KGNvbnRyYWN0cyksImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQoY29udHJhY3RzLmxlbmd0aDw9MTAsImNhbm5vdCBoYXZlIG1vcmUgdGhhbiAxMCBhdXRob3JpemVkIGlzc3VpbmcgY29udHJhY3RzIikpe2NvbnN0IHZhbGlkQ29udGVudHM9aXNWYWxpZENvbnRyYWN0c0FycmF5KGNvbnRyYWN0cyk7aWYoYXBpLmFzc2VydCh2YWxpZENvbnRlbnRzLCJpbnZhbGlkIGNvbnRyYWN0IGxpc3QiKSl7Y29uc3QgbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO2lmKG5mdCl7Y29uc3Qgc2FuaXRpemVkTGlzdD1bXTtpZihjb250cmFjdHMuZm9yRWFjaChjb250cmFjdD0+e2NvbnN0IGZpbmFsQ29udHJhY3Q9Y29udHJhY3QudHJpbSgpO2xldCBpc0R1cGxpY2F0ZT0hMTtmb3IobGV0IGk9MDtpPG5mdC5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cy5sZW5ndGg7aSs9MSlpZihmaW5hbENvbnRyYWN0PT09bmZ0LmF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzW2ldKXtpc0R1cGxpY2F0ZT0hMDticmVha31pc0R1cGxpY2F0ZXx8c2FuaXRpemVkTGlzdC5wdXNoKGZpbmFsQ29udHJhY3QpfSksYXBpLmFzc2VydChuZnQuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJmFwaS5hc3NlcnQoIWNvbnRhaW5zRHVwbGljYXRlcyhzYW5pdGl6ZWRMaXN0KSwiY2Fubm90IGFkZCB0aGUgc2FtZSBjb250cmFjdCB0d2ljZSIpJiZhcGkuYXNzZXJ0KG5mdC5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cy5sZW5ndGgrc2FuaXRpemVkTGlzdC5sZW5ndGg8PTEwLCJjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gMTAgYXV0aG9yaXplZCBpc3N1aW5nIGNvbnRyYWN0cyIpKXtjb25zdCBmaW5hbENvbnRyYWN0TGlzdD1uZnQuYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMuY29uY2F0KHNhbml0aXplZExpc3QpO25mdC5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1maW5hbENvbnRyYWN0TGlzdCxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixuZnQpfX19fX0sYWN0aW9ucy5yZW1vdmVBdXRob3JpemVkSXNzdWluZ0FjY291bnRzPWFzeW5jIHBheWxvYWQ9Pntjb25zdHthY2NvdW50czphY2NvdW50cyxzeW1ib2w6c3ltYm9sLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9PXBheWxvYWQ7aWYoYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoc3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIHN5bWJvbCYmYWNjb3VudHMmJiJvYmplY3QiPT10eXBlb2YgYWNjb3VudHMmJkFycmF5LmlzQXJyYXkoYWNjb3VudHMpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFjY291bnRzLmxlbmd0aDw9MTAsImNhbm5vdCByZW1vdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBhY2NvdW50cyIpKXtjb25zdCB2YWxpZENvbnRlbnRzPWlzVmFsaWRBY2NvdW50c0FycmF5KGFjY291bnRzKTtpZihhcGkuYXNzZXJ0KHZhbGlkQ29udGVudHMsImludmFsaWQgYWNjb3VudCBsaXN0Iikpe2NvbnN0IG5mdD1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzeW1ib2x9KTtpZihuZnQmJmFwaS5hc3NlcnQobmZ0Lmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpKXtjb25zdCBmaW5hbEFjY291bnRMaXN0PW5mdC5hdXRob3JpemVkSXNzdWluZ0FjY291bnRzLmZpbHRlcihjdXJyZW50VmFsdWU9Pntmb3IobGV0IGk9MDtpPGFjY291bnRzLmxlbmd0aDtpKz0xKXtpZihjdXJyZW50VmFsdWU9PT1hY2NvdW50c1tpXS50cmltKCkudG9Mb3dlckNhc2UoKSlyZXR1cm4hMX1yZXR1cm4hMH0pO25mdC5hdXRob3JpemVkSXNzdWluZ0FjY291bnRzPWZpbmFsQWNjb3VudExpc3QsYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbmZ0KX19fX0sYWN0aW9ucy5yZW1vdmVBdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1hc3luYyBwYXlsb2FkPT57Y29uc3R7Y29udHJhY3RzOmNvbnRyYWN0cyxzeW1ib2w6c3ltYm9sLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9PXBheWxvYWQ7aWYoYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoc3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIHN5bWJvbCYmY29udHJhY3RzJiYib2JqZWN0Ij09dHlwZW9mIGNvbnRyYWN0cyYmQXJyYXkuaXNBcnJheShjb250cmFjdHMpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGNvbnRyYWN0cy5sZW5ndGg8PTEwLCJjYW5ub3QgcmVtb3ZlIG1vcmUgdGhhbiAxMCBhdXRob3JpemVkIGlzc3VpbmcgY29udHJhY3RzIikpe2NvbnN0IHZhbGlkQ29udGVudHM9aXNWYWxpZENvbnRyYWN0c0FycmF5KGNvbnRyYWN0cyk7aWYoYXBpLmFzc2VydCh2YWxpZENvbnRlbnRzLCJpbnZhbGlkIGNvbnRyYWN0IGxpc3QiKSl7Y29uc3QgbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO2lmKG5mdCYmYXBpLmFzc2VydChuZnQuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2NvbnN0IGZpbmFsQ29udHJhY3RMaXN0PW5mdC5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cy5maWx0ZXIoY3VycmVudFZhbHVlPT57Zm9yKGxldCBpPTA7aTxjb250cmFjdHMubGVuZ3RoO2krPTEpe2lmKGN1cnJlbnRWYWx1ZT09PWNvbnRyYWN0c1tpXS50cmltKCkpcmV0dXJuITF9cmV0dXJuITB9KTtuZnQuYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHM9ZmluYWxDb250cmFjdExpc3QsYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbmZ0KX19fX0sYWN0aW9ucy50cmFuc2Zlck93bmVyc2hpcD1hc3luYyBwYXlsb2FkPT57Y29uc3R7c3ltYm9sOnN5bWJvbCx0bzp0byxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fT1wYXlsb2FkO2lmKGFwaS5hc3NlcnQoITA9PT1pc1NpZ25lZFdpdGhBY3RpdmVLZXksInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBzeW1ib2wmJnRvJiYic3RyaW5nIj09dHlwZW9mIHRvLCJpbnZhbGlkIHBhcmFtcyIpKXtjb25zdCBuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7aWYobmZ0JiZhcGkuYXNzZXJ0KG5mdC5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSl7Y29uc3QgZmluYWxUbz10by50cmltKCkudG9Mb3dlckNhc2UoKTthcGkuYXNzZXJ0KGlzVmFsaWRIaXZlQWNjb3VudExlbmd0aChmaW5hbFRvKSwiaW52YWxpZCB0byIpJiYobmZ0Lmlzc3Vlcj1maW5hbFRvLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLG5mdCkpfX19LGFjdGlvbnMuZW5hYmxlRGVsZWdhdGlvbj1hc3luYyBwYXlsb2FkPT57Y29uc3R7c3ltYm9sOnN5bWJvbCx1bmRlbGVnYXRpb25Db29sZG93bjp1bmRlbGVnYXRpb25Db29sZG93bixpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fT1wYXlsb2FkLHBhcmFtcz1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSkse2VuYWJsZURlbGVnYXRpb25GZWU6ZW5hYmxlRGVsZWdhdGlvbkZlZX09cGFyYW1zLHV0aWxpdHlUb2tlbkJhbGFuY2U9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJiYWxhbmNlcyIse2FjY291bnQ6YXBpLnNlbmRlcixzeW1ib2w6VVRJTElUWV9UT0tFTl9TWU1CT0x9KSxhdXRob3JpemVkPSEhYXBpLkJpZ051bWJlcihlbmFibGVEZWxlZ2F0aW9uRmVlKS5sdGUoMCl8fHV0aWxpdHlUb2tlbkJhbGFuY2UmJmFwaS5CaWdOdW1iZXIodXRpbGl0eVRva2VuQmFsYW5jZS5iYWxhbmNlKS5ndGUoZW5hYmxlRGVsZWdhdGlvbkZlZSk7aWYoYXBpLmFzc2VydChhdXRob3JpemVkLCJ5b3UgbXVzdCBoYXZlIGVub3VnaCB0b2tlbnMgdG8gY292ZXIgZmVlcyIpJiZhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzeW1ib2wmJiJzdHJpbmciPT10eXBlb2Ygc3ltYm9sLCJpbnZhbGlkIHN5bWJvbCIpJiZhcGkuYXNzZXJ0KHVuZGVsZWdhdGlvbkNvb2xkb3duJiZOdW1iZXIuaXNJbnRlZ2VyKHVuZGVsZWdhdGlvbkNvb2xkb3duKSYmdW5kZWxlZ2F0aW9uQ29vbGRvd24+MCYmdW5kZWxlZ2F0aW9uQ29vbGRvd248PTE4MjUwLCJ1bmRlbGVnYXRpb25Db29sZG93biBtdXN0IGJlIGFuIGludGVnZXIgYmV0d2VlbiAxIGFuZCAxODI1MCIpKXtjb25zdCBuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7aWYoYXBpLmFzc2VydChudWxsIT09bmZ0LCJzeW1ib2wgZG9lcyBub3QgZXhpc3QiKSYmYXBpLmFzc2VydChuZnQuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJmFwaS5hc3NlcnQodm9pZCAwPT09bmZ0LmRlbGVnYXRpb25FbmFibGVkfHwhMT09PW5mdC5kZWxlZ2F0aW9uRW5hYmxlZCwiZGVsZWdhdGlvbiBhbHJlYWR5IGVuYWJsZWQiKSl7aWYoYXBpLkJpZ051bWJlcihlbmFibGVEZWxlZ2F0aW9uRmVlKS5ndCgwKSl7Y29uc3QgcmVzPWF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOlVUSUxJVFlfVE9LRU5fU1lNQk9MLHF1YW50aXR5OmVuYWJsZURlbGVnYXRpb25GZWUsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX0pO2lmKCFpc1Rva2VuVHJhbnNmZXJWZXJpZmllZChyZXMsYXBpLnNlbmRlciwibnVsbCIsVVRJTElUWV9UT0tFTl9TWU1CT0wsZW5hYmxlRGVsZWdhdGlvbkZlZSwidHJhbnNmZXIiKSlyZXR1cm4hMX1yZXR1cm4gbmZ0LmRlbGVnYXRpb25FbmFibGVkPSEwLG5mdC51bmRlbGVnYXRpb25Db29sZG93bj11bmRlbGVnYXRpb25Db29sZG93bixhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixuZnQpLCEwfX1yZXR1cm4hMX0sYWN0aW9ucy51cGRhdGVQcm9wZXJ0eURlZmluaXRpb249YXN5bmMgcGF5bG9hZD0+e2NvbnN0e3N5bWJvbDpzeW1ib2wsbmFtZTpuYW1lLG5ld05hbWU6bmV3TmFtZSx0eXBlOnR5cGUsaXNSZWFkT25seTppc1JlYWRPbmx5LGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9PXBheWxvYWQ7aWYoYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoc3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIHN5bWJvbCYmbmFtZSYmInN0cmluZyI9PXR5cGVvZiBuYW1lLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMobmFtZSkmJm5hbWUubGVuZ3RoPjAmJm5hbWUubGVuZ3RoPD0yNSwiaW52YWxpZCBuYW1lOiBsZXR0ZXJzICYgbnVtYmVycyBvbmx5LCBtYXggbGVuZ3RoIG9mIDI1IikmJmFwaS5hc3NlcnQodm9pZCAwPT09bmV3TmFtZXx8InN0cmluZyI9PXR5cGVvZiBuZXdOYW1lJiZhcGkudmFsaWRhdG9yLmlzQWxwaGFudW1lcmljKG5ld05hbWUpJiZuZXdOYW1lLmxlbmd0aD4wJiZuZXdOYW1lLmxlbmd0aDw9MjUsImludmFsaWQgbmV3IG5hbWU6IGxldHRlcnMgJiBudW1iZXJzIG9ubHksIG1heCBsZW5ndGggb2YgMjUiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT10eXBlfHwic3RyaW5nIj09dHlwZW9mIHR5cGUmJigibnVtYmVyIj09PXR5cGV8fCJzdHJpbmciPT09dHlwZXx8ImJvb2xlYW4iPT09dHlwZSksImludmFsaWQgdHlwZTogbXVzdCBiZSBudW1iZXIsIHN0cmluZywgb3IgYm9vbGVhbiIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWlzUmVhZE9ubHl8fCJib29sZWFuIj09dHlwZW9mIGlzUmVhZE9ubHksImludmFsaWQgaXNSZWFkT25seTogbXVzdCBiZSB0cnVlIG9yIGZhbHNlIikpe2NvbnN0IG5mdD1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzeW1ib2x9KTtpZihuZnQmJmFwaS5hc3NlcnQoMD09PW5mdC5zdXBwbHksImNhbm5vdCBjaGFuZ2UgZGF0YSBwcm9wZXJ0eSBkZWZpbml0aW9uOyB0b2tlbnMgYWxyZWFkeSBpc3N1ZWQiKSYmYXBpLmFzc2VydChuYW1lIGluIG5mdC5wcm9wZXJ0aWVzLCJwcm9wZXJ0eSBtdXN0IGV4aXN0IikmJmFwaS5hc3NlcnQobmZ0Lmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpKXtpZih2b2lkIDAhPT1uZXdOYW1lKXtpZih2b2lkIDAhPT1uZnQuZ3JvdXBCeSYmbmZ0Lmdyb3VwQnkubGVuZ3RoPjAmJiFhcGkuYXNzZXJ0KCFuZnQuZ3JvdXBCeS5pbmNsdWRlcyhuYW1lKSwiY2Fubm90IGNoYW5nZSBkYXRhIHByb3BlcnR5IG5hbWU7IHByb3BlcnR5IGlzIHBhcnQgb2YgZ3JvdXBCeSIpKXJldHVybiExO2lmKCFhcGkuYXNzZXJ0KG5ld05hbWUhPT1uYW1lLCJuZXcgbmFtZSBtdXN0IGJlIGRpZmZlcmVudCBmcm9tIG9sZCBuYW1lIil8fCFhcGkuYXNzZXJ0KCEobmV3TmFtZSBpbiBuZnQucHJvcGVydGllcyksInRoZXJlIGlzIGFscmVhZHkgYSBkYXRhIHByb3BlcnR5IHdpdGggdGhlIGdpdmVuIG5ldyBuYW1lIikpcmV0dXJuITF9bGV0IHNob3VsZFVwZGF0ZT0hMTtjb25zdCBvcmlnaW5hbFR5cGU9bmZ0LnByb3BlcnRpZXNbbmFtZV0udHlwZSxvcmlnaW5hbElzUmVhZE9ubHk9bmZ0LnByb3BlcnRpZXNbbmFtZV0uaXNSZWFkT25seTtyZXR1cm4gdm9pZCAwIT09dHlwZSYmdHlwZSE9PW9yaWdpbmFsVHlwZSYmKG5mdC5wcm9wZXJ0aWVzW25hbWVdLnR5cGU9dHlwZSxzaG91bGRVcGRhdGU9ITApLHZvaWQgMCE9PWlzUmVhZE9ubHkmJmlzUmVhZE9ubHkhPT1vcmlnaW5hbElzUmVhZE9ubHkmJihuZnQucHJvcGVydGllc1tuYW1lXS5pc1JlYWRPbmx5PWlzUmVhZE9ubHksc2hvdWxkVXBkYXRlPSEwKSx2b2lkIDAhPT1uZXdOYW1lJiZuZXdOYW1lIT09bmFtZSYmKG5mdC5wcm9wZXJ0aWVzW25ld05hbWVdPW5mdC5wcm9wZXJ0aWVzW25hbWVdLGRlbGV0ZSBuZnQucHJvcGVydGllc1tuYW1lXSxzaG91bGRVcGRhdGU9ITApLHNob3VsZFVwZGF0ZSYmKGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLG5mdCksYXBpLmVtaXQoInVwZGF0ZVByb3BlcnR5RGVmaW5pdGlvbiIse3N5bWJvbDpzeW1ib2wsb3JpZ2luYWxOYW1lOm5hbWUsb3JpZ2luYWxUeXBlOm9yaWdpbmFsVHlwZSxvcmlnaW5hbElzUmVhZE9ubHk6b3JpZ2luYWxJc1JlYWRPbmx5LG5ld05hbWU6bmV3TmFtZSxuZXdUeXBlOnR5cGUsbmV3SXNSZWFkT25seTppc1JlYWRPbmx5fSkpLCEwfX1yZXR1cm4hMX0sYWN0aW9ucy5hZGRQcm9wZXJ0eT1hc3luYyBwYXlsb2FkPT57Y29uc3R7c3ltYm9sOnN5bWJvbCxuYW1lOm5hbWUsdHlwZTp0eXBlLGlzUmVhZE9ubHk6aXNSZWFkT25seSxhdXRob3JpemVkRWRpdGluZ0FjY291bnRzOmF1dGhvcml6ZWRFZGl0aW5nQWNjb3VudHMsYXV0aG9yaXplZEVkaXRpbmdDb250cmFjdHM6YXV0aG9yaXplZEVkaXRpbmdDb250cmFjdHMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX09cGF5bG9hZCxwYXJhbXM9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pLHtkYXRhUHJvcGVydHlDcmVhdGlvbkZlZTpkYXRhUHJvcGVydHlDcmVhdGlvbkZlZX09cGFyYW1zO2lmKGFwaS5hc3NlcnQoITA9PT1pc1NpZ25lZFdpdGhBY3RpdmVLZXksInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBzeW1ib2wmJm5hbWUmJiJzdHJpbmciPT10eXBlb2YgbmFtZSYmKHZvaWQgMD09PWlzUmVhZE9ubHl8fCJib29sZWFuIj09dHlwZW9mIGlzUmVhZE9ubHkpJiYodm9pZCAwPT09YXV0aG9yaXplZEVkaXRpbmdBY2NvdW50c3x8YXV0aG9yaXplZEVkaXRpbmdBY2NvdW50cyYmIm9iamVjdCI9PXR5cGVvZiBhdXRob3JpemVkRWRpdGluZ0FjY291bnRzJiZBcnJheS5pc0FycmF5KGF1dGhvcml6ZWRFZGl0aW5nQWNjb3VudHMpKSYmKHZvaWQgMD09PWF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzfHxhdXRob3JpemVkRWRpdGluZ0NvbnRyYWN0cyYmIm9iamVjdCI9PXR5cGVvZiBhdXRob3JpemVkRWRpdGluZ0NvbnRyYWN0cyYmQXJyYXkuaXNBcnJheShhdXRob3JpemVkRWRpdGluZ0NvbnRyYWN0cykpJiZ0eXBlJiYic3RyaW5nIj09dHlwZW9mIHR5cGUsImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQoYXBpLnZhbGlkYXRvci5pc0FscGhhbnVtZXJpYyhuYW1lKSYmbmFtZS5sZW5ndGg+MCYmbmFtZS5sZW5ndGg8PTI1LCJpbnZhbGlkIG5hbWU6IGxldHRlcnMgJiBudW1iZXJzIG9ubHksIG1heCBsZW5ndGggb2YgMjUiKSYmYXBpLmFzc2VydCgibnVtYmVyIj09PXR5cGV8fCJzdHJpbmciPT09dHlwZXx8ImJvb2xlYW4iPT09dHlwZSwiaW52YWxpZCB0eXBlOiBtdXN0IGJlIG51bWJlciwgc3RyaW5nLCBvciBib29sZWFuIikpe2NvbnN0IG5mdD1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzeW1ib2x9KTtpZihuZnQmJmFwaS5hc3NlcnQoIShuYW1lIGluIG5mdC5wcm9wZXJ0aWVzKSwiY2Fubm90IGFkZCB0aGUgc2FtZSBwcm9wZXJ0eSB0d2ljZSIpJiZhcGkuYXNzZXJ0KG5mdC5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSl7aWYoT2JqZWN0LmtleXMobmZ0LnByb3BlcnRpZXMpLmxlbmd0aD49Myl7Y29uc3QgdXRpbGl0eVRva2VuQmFsYW5jZT1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsImJhbGFuY2VzIix7YWNjb3VudDphcGkuc2VuZGVyLHN5bWJvbDpVVElMSVRZX1RPS0VOX1NZTUJPTH0pLGF1dGhvcml6ZWRDcmVhdGlvbj0hIWFwaS5CaWdOdW1iZXIoZGF0YVByb3BlcnR5Q3JlYXRpb25GZWUpLmx0ZSgwKXx8dXRpbGl0eVRva2VuQmFsYW5jZSYmYXBpLkJpZ051bWJlcih1dGlsaXR5VG9rZW5CYWxhbmNlLmJhbGFuY2UpLmd0ZShkYXRhUHJvcGVydHlDcmVhdGlvbkZlZSk7aWYoIWFwaS5hc3NlcnQoYXV0aG9yaXplZENyZWF0aW9uLCJ5b3UgbXVzdCBoYXZlIGVub3VnaCB0b2tlbnMgdG8gY292ZXIgdGhlIGNyZWF0aW9uIGZlZXMiKSlyZXR1cm4hMTtpZihhcGkuQmlnTnVtYmVyKGRhdGFQcm9wZXJ0eUNyZWF0aW9uRmVlKS5ndCgwKSl7Y29uc3QgcmVzPWF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOlVUSUxJVFlfVE9LRU5fU1lNQk9MLHF1YW50aXR5OmRhdGFQcm9wZXJ0eUNyZWF0aW9uRmVlLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9KTtpZighaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQocmVzLGFwaS5zZW5kZXIsIm51bGwiLFVUSUxJVFlfVE9LRU5fU1lNQk9MLGRhdGFQcm9wZXJ0eUNyZWF0aW9uRmVlLCJ0cmFuc2ZlciIpKXJldHVybiExfX1jb25zdCBuZXdQcm9wZXJ0eT17dHlwZTp0eXBlLGlzUmVhZE9ubHk6dm9pZCAwIT09aXNSZWFkT25seSYmaXNSZWFkT25seSxhdXRob3JpemVkRWRpdGluZ0FjY291bnRzOnZvaWQgMD09PWF1dGhvcml6ZWRFZGl0aW5nQWNjb3VudHM/W2FwaS5zZW5kZXJdOltdLGF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzOltdfTtyZXR1cm4gbmZ0LnByb3BlcnRpZXNbbmFtZV09bmV3UHJvcGVydHksYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbmZ0KSwoYXV0aG9yaXplZEVkaXRpbmdBY2NvdW50c3x8YXV0aG9yaXplZEVkaXRpbmdDb250cmFjdHMpJiZhd2FpdCBhY3Rpb25zLnNldFByb3BlcnR5UGVybWlzc2lvbnMoe3N5bWJvbDpzeW1ib2wsbmFtZTpuYW1lLGFjY291bnRzOmF1dGhvcml6ZWRFZGl0aW5nQWNjb3VudHMsY29udHJhY3RzOmF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9KSwhMH19cmV0dXJuITF9LGFjdGlvbnMuc2V0UHJvcGVydHlQZXJtaXNzaW9ucz1hc3luYyBwYXlsb2FkPT57Y29uc3R7c3ltYm9sOnN5bWJvbCxuYW1lOm5hbWUsYWNjb3VudHM6YWNjb3VudHMsY29udHJhY3RzOmNvbnRyYWN0cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fT1wYXlsb2FkO2lmKGFwaS5hc3NlcnQoITA9PT1pc1NpZ25lZFdpdGhBY3RpdmVLZXksInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBzeW1ib2wmJm5hbWUmJiJzdHJpbmciPT10eXBlb2YgbmFtZSYmKHZvaWQgMD09PWFjY291bnRzfHxhY2NvdW50cyYmIm9iamVjdCI9PXR5cGVvZiBhY2NvdW50cyYmQXJyYXkuaXNBcnJheShhY2NvdW50cykpJiYodm9pZCAwPT09Y29udHJhY3RzfHxjb250cmFjdHMmJiJvYmplY3QiPT10eXBlb2YgY29udHJhY3RzJiZBcnJheS5pc0FycmF5KGNvbnRyYWN0cykpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMobmFtZSkmJm5hbWUubGVuZ3RoPjAmJm5hbWUubGVuZ3RoPD0yNSwiaW52YWxpZCBuYW1lOiBsZXR0ZXJzICYgbnVtYmVycyBvbmx5LCBtYXggbGVuZ3RoIG9mIDI1IikmJmFwaS5hc3NlcnQodm9pZCAwPT09YWNjb3VudHN8fGFjY291bnRzLmxlbmd0aDw9MTAsImNhbm5vdCBoYXZlIG1vcmUgdGhhbiAxMCBhdXRob3JpemVkIGFjY291bnRzIikmJmFwaS5hc3NlcnQodm9pZCAwPT09Y29udHJhY3RzfHxjb250cmFjdHMubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgY29udHJhY3RzIikmJmFwaS5hc3NlcnQodm9pZCAwPT09YWNjb3VudHN8fGlzVmFsaWRBY2NvdW50c0FycmF5KGFjY291bnRzKSwiaW52YWxpZCBhY2NvdW50IGxpc3QiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1jb250cmFjdHN8fGlzVmFsaWRDb250cmFjdHNBcnJheShjb250cmFjdHMpLCJpbnZhbGlkIGNvbnRyYWN0IGxpc3QiKSl7Y29uc3QgbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO2lmKG5mdCYmYXBpLmFzc2VydChuYW1lIGluIG5mdC5wcm9wZXJ0aWVzLCJwcm9wZXJ0eSBtdXN0IGV4aXN0IikmJmFwaS5hc3NlcnQobmZ0Lmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpKXtsZXQgc2FuaXRpemVkQWNjb3VudExpc3Q9W10sc2FuaXRpemVkQ29udHJhY3RMaXN0PVtdO2lmKGFjY291bnRzJiYoc2FuaXRpemVkQWNjb3VudExpc3Q9YWNjb3VudHMubWFwKGFjY291bnQ9PmFjY291bnQudHJpbSgpLnRvTG93ZXJDYXNlKCkpKSxjb250cmFjdHMmJihzYW5pdGl6ZWRDb250cmFjdExpc3Q9Y29udHJhY3RzLm1hcChjb250cmFjdD0+Y29udHJhY3QudHJpbSgpKSksYXBpLmFzc2VydCh2b2lkIDA9PT1hY2NvdW50c3x8IWNvbnRhaW5zRHVwbGljYXRlcyhzYW5pdGl6ZWRBY2NvdW50TGlzdCksImNhbm5vdCBhZGQgdGhlIHNhbWUgYWNjb3VudCB0d2ljZSIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWNvbnRyYWN0c3x8IWNvbnRhaW5zRHVwbGljYXRlcyhzYW5pdGl6ZWRDb250cmFjdExpc3QpLCJjYW5ub3QgYWRkIHRoZSBzYW1lIGNvbnRyYWN0IHR3aWNlIikpe2xldCBzaG91bGRVcGRhdGU9ITE7YWNjb3VudHMmJihuZnQucHJvcGVydGllc1tuYW1lXS5hdXRob3JpemVkRWRpdGluZ0FjY291bnRzPXNhbml0aXplZEFjY291bnRMaXN0LHNob3VsZFVwZGF0ZT0hMCksY29udHJhY3RzJiYobmZ0LnByb3BlcnRpZXNbbmFtZV0uYXV0aG9yaXplZEVkaXRpbmdDb250cmFjdHM9c2FuaXRpemVkQ29udHJhY3RMaXN0LHNob3VsZFVwZGF0ZT0hMCksc2hvdWxkVXBkYXRlJiZhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixuZnQpfX19fSxhY3Rpb25zLnNldEdyb3VwQnk9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e3N5bWJvbDpzeW1ib2wscHJvcGVydGllczpwcm9wZXJ0aWVzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9PXBheWxvYWQ7aWYoYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoc3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIHN5bWJvbCYmcHJvcGVydGllcyYmIm9iamVjdCI9PXR5cGVvZiBwcm9wZXJ0aWVzJiZBcnJheS5pc0FycmF5KHByb3BlcnRpZXMpLCJpbnZhbGlkIHBhcmFtcyIpKXtjb25zdCBuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7aWYobmZ0KXtjb25zdCBuZnRQcm9wZXJ0eUNvdW50PU9iamVjdC5rZXlzKG5mdC5wcm9wZXJ0aWVzKS5sZW5ndGg7aWYoYXBpLmFzc2VydChuZnQuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJmFwaS5hc3NlcnQodm9pZCAwPT09bmZ0Lmdyb3VwQnl8fDA9PT1uZnQuZ3JvdXBCeS5sZW5ndGgsImxpc3QgaXMgYWxyZWFkeSBzZXQiKSYmYXBpLmFzc2VydChwcm9wZXJ0aWVzLmxlbmd0aDw9bmZ0UHJvcGVydHlDb3VudCwiY2Fubm90IHNldCBtb3JlIGRhdGEgcHJvcGVydGllcyB0aGFuIE5GVCBoYXMiKSYmYXBpLmFzc2VydCghY29udGFpbnNEdXBsaWNhdGVzKHByb3BlcnRpZXMpLCJsaXN0IGNhbm5vdCBjb250YWluIGR1cGxpY2F0ZXMiKSl7Zm9yKGxldCBpPTA7aTxwcm9wZXJ0aWVzLmxlbmd0aDtpKz0xKXtjb25zdCBuYW1lPXByb3BlcnRpZXNbaV07aWYoIWFwaS5hc3NlcnQobmFtZSYmInN0cmluZyI9PXR5cGVvZiBuYW1lJiZuYW1lIGluIG5mdC5wcm9wZXJ0aWVzLCJkYXRhIHByb3BlcnR5IG11c3QgZXhpc3QiKSlyZXR1cm4hMX1yZXR1cm4gbmZ0Lmdyb3VwQnk9cHJvcGVydGllcyxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixuZnQpLCEwfX19cmV0dXJuITF9LGFjdGlvbnMuc2V0UHJvcGVydGllcz1hc3luYyBwYXlsb2FkPT57Y29uc3R7c3ltYm9sOnN5bWJvbCxmcm9tVHlwZTpmcm9tVHlwZSxuZnRzOm5mdHMsY2FsbGluZ0NvbnRyYWN0SW5mbzpjYWxsaW5nQ29udHJhY3RJbmZvfT1wYXlsb2FkLGZpbmFsRnJvbVR5cGU9dm9pZCAwPT09ZnJvbVR5cGU/InVzZXIiOmZyb21UeXBlO2lmKGFwaS5hc3NlcnQobmZ0cyYmIm9iamVjdCI9PXR5cGVvZiBuZnRzJiZBcnJheS5pc0FycmF5KG5mdHMpJiZmaW5hbEZyb21UeXBlJiYic3RyaW5nIj09dHlwZW9mIGZpbmFsRnJvbVR5cGUmJlsidXNlciIsImNvbnRyYWN0Il0uaW5jbHVkZXMoZmluYWxGcm9tVHlwZSkmJnN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBzeW1ib2wmJihjYWxsaW5nQ29udHJhY3RJbmZvfHx2b2lkIDA9PT1jYWxsaW5nQ29udHJhY3RJbmZvJiYidXNlciI9PT1maW5hbEZyb21UeXBlKSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChuZnRzLmxlbmd0aDw9NTAsImNhbm5vdCBzZXQgcHJvcGVydGllcyBvbiBtb3JlIHRoYW4gNTAgTkZUIGluc3RhbmNlcyBhdCBvbmNlIikpe2NvbnN0IGZpbmFsRnJvbT0idXNlciI9PT1maW5hbEZyb21UeXBlP2FwaS5zZW5kZXI6Y2FsbGluZ0NvbnRyYWN0SW5mby5uYW1lLG5mdD1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzeW1ib2x9KTtpZihhcGkuYXNzZXJ0KG51bGwhPT1uZnQsInN5bWJvbCBkb2VzIG5vdCBleGlzdCIpKXtpZighaXNWYWxpZERhdGFQcm9wZXJ0aWVzQXJyYXkoZmluYWxGcm9tLGZpbmFsRnJvbVR5cGUsbmZ0LG5mdHMpKXJldHVybiExO2NvbnN0IGluc3RhbmNlVGFibGVOYW1lPXN5bWJvbCsiaW5zdGFuY2VzIjtmb3IobGV0IGk9MDtpPG5mdHMubGVuZ3RoO2krPTEpe2NvbnN0e2lkOmlkLHByb3BlcnRpZXM6cHJvcGVydGllc309bmZ0c1tpXTtpZigwPT09T2JqZWN0LmtleXMocHJvcGVydGllcykubGVuZ3RoKWNvbnRpbnVlO2NvbnN0IG5mdEluc3RhbmNlPWF3YWl0IGFwaS5kYi5maW5kT25lKGluc3RhbmNlVGFibGVOYW1lLHtfaWQ6YXBpLkJpZ051bWJlcihpZCkudG9OdW1iZXIoKX0pO2lmKGFwaS5hc3NlcnQobnVsbCE9PW5mdEluc3RhbmNlLCJuZnQgaW5zdGFuY2UgZG9lcyBub3QgZXhpc3QiKSl7bGV0IHNob3VsZFVwZGF0ZT0hMTtmb3IoY29uc3RbbmFtZSxkYXRhXW9mIE9iamVjdC5lbnRyaWVzKHByb3BlcnRpZXMpKXtsZXQgb2xkUHJvcGVydHk9bnVsbDtuZnQucHJvcGVydGllc1tuYW1lXS5pc1JlYWRPbmx5P2FwaS5hc3NlcnQoIShuYW1lIGluIG5mdEluc3RhbmNlLnByb3BlcnRpZXMpLCJjYW5ub3QgZWRpdCByZWFkLW9ubHkgcHJvcGVydGllcyIpJiYobmZ0SW5zdGFuY2UucHJvcGVydGllc1tuYW1lXT1kYXRhLHNob3VsZFVwZGF0ZT0hMCk6KG9sZFByb3BlcnR5PW5mdEluc3RhbmNlLnByb3BlcnRpZXNbbmFtZV0sbmZ0SW5zdGFuY2UucHJvcGVydGllc1tuYW1lXT1kYXRhLHNob3VsZFVwZGF0ZT0hMCksc2hvdWxkVXBkYXRlJiZvbGRQcm9wZXJ0eSE9PWRhdGEmJmF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgibWluaW5nIiwiaGFuZGxlTmZ0U2V0UHJvcGVydHkiLHtzeW1ib2w6c3ltYm9sLG5mdDpuZnRJbnN0YW5jZSxwcm9wZXJ0eU5hbWU6bmFtZSxvbGRWYWx1ZTpvbGRQcm9wZXJ0eX0pfXNob3VsZFVwZGF0ZSYmYXdhaXQgYXBpLmRiLnVwZGF0ZShpbnN0YW5jZVRhYmxlTmFtZSxuZnRJbnN0YW5jZSl9fXJldHVybiEwfX1yZXR1cm4hMX0sYWN0aW9ucy5idXJuPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtmcm9tVHlwZTpmcm9tVHlwZSxuZnRzOm5mdHMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleSxjYWxsaW5nQ29udHJhY3RJbmZvOmNhbGxpbmdDb250cmFjdEluZm99PXBheWxvYWQsZmluYWxGcm9tVHlwZT12b2lkIDA9PT1mcm9tVHlwZT8idXNlciI6ZnJvbVR5cGU7aWYoYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoZmluYWxGcm9tVHlwZSYmInN0cmluZyI9PXR5cGVvZiBmaW5hbEZyb21UeXBlJiZbInVzZXIiLCJjb250cmFjdCJdLmluY2x1ZGVzKGZpbmFsRnJvbVR5cGUpJiYoY2FsbGluZ0NvbnRyYWN0SW5mb3x8dm9pZCAwPT09Y2FsbGluZ0NvbnRyYWN0SW5mbyYmInVzZXIiPT09ZmluYWxGcm9tVHlwZSkmJm5mdHMmJiJvYmplY3QiPT10eXBlb2YgbmZ0cyYmQXJyYXkuaXNBcnJheShuZnRzKSwiaW52YWxpZCBwYXJhbXMiKSYmaXNWYWxpZE5mdElkQXJyYXkobmZ0cykpe2NvbnN0IGZpbmFsRnJvbT0idXNlciI9PT1maW5hbEZyb21UeXBlP2FwaS5zZW5kZXI6Y2FsbGluZ0NvbnRyYWN0SW5mby5uYW1lO2xldCBjb250YWluZXJDb3VudD0wLHRva2VuQ291bnQ9MCxpc0ZpcnN0SW5zdGFuY2VDb250YWluZXI9ITE7Zm9yKGxldCBpPTA7aTxuZnRzLmxlbmd0aDtpKz0xKXtjb25zdHtzeW1ib2w6c3ltYm9sLGlkczppZHN9PW5mdHNbaV0sbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO2lmKG5mdCl7Y29uc3QgaW5zdGFuY2VUYWJsZU5hbWU9c3ltYm9sKyJpbnN0YW5jZXMiO2ZvcihsZXQgaj0wO2o8aWRzLmxlbmd0aDtqKz0xKXtjb25zdCBpZD1pZHNbal0sbmZ0SW5zdGFuY2U9YXdhaXQgYXBpLmRiLmZpbmRPbmUoaW5zdGFuY2VUYWJsZU5hbWUse19pZDphcGkuQmlnTnVtYmVyKGlkKS50b051bWJlcigpfSk7aWYobmZ0SW5zdGFuY2Upe2xldCBpc0J1cm5BdXRob3JpemVkPSEwO2lmKG5mdEluc3RhbmNlLmxvY2tlZE5mdHMmJm5mdEluc3RhbmNlLmxvY2tlZE5mdHMubGVuZ3RoPjA/KDA9PT10b2tlbkNvdW50JiYoaXNGaXJzdEluc3RhbmNlQ29udGFpbmVyPSEwKSxjb250YWluZXJDb3VudCs9MSwoY29udGFpbmVyQ291bnQ+MXx8IWlzRmlyc3RJbnN0YW5jZUNvbnRhaW5lcikmJihpc0J1cm5BdXRob3JpemVkPSExKSk6aXNGaXJzdEluc3RhbmNlQ29udGFpbmVyJiYoaXNCdXJuQXV0aG9yaXplZD0hMSksdG9rZW5Db3VudCs9MSxuZnRJbnN0YW5jZS5hY2NvdW50PT09ZmluYWxGcm9tJiYoInUiPT09bmZ0SW5zdGFuY2Uub3duZWRCeSYmInVzZXIiPT09ZmluYWxGcm9tVHlwZXx8ImMiPT09bmZ0SW5zdGFuY2Uub3duZWRCeSYmImNvbnRyYWN0Ij09PWZpbmFsRnJvbVR5cGUpJiZ2b2lkIDA9PT1uZnRJbnN0YW5jZS5kZWxlZ2F0ZWRUbyYmaXNCdXJuQXV0aG9yaXplZCl7Y29uc3QgZmluYWxMb2NrVG9rZW5zPXt9O2xldCBpc1RyYW5zZmVyU3VjY2Vzcz0hMDtmb3IoY29uc3RbbG9ja3N5bWJvbCxxdWFudGl0eV1vZiBPYmplY3QuZW50cmllcyhuZnRJbnN0YW5jZS5sb2NrZWRUb2tlbnMpKXtjb25zdCByZXM9YXdhaXQgYXBpLnRyYW5zZmVyVG9rZW5zKGZpbmFsRnJvbSxsb2Nrc3ltYm9sLHF1YW50aXR5LGZpbmFsRnJvbVR5cGUpO2lzVG9rZW5UcmFuc2ZlclZlcmlmaWVkKHJlcywibmZ0IixmaW5hbEZyb20sbG9ja3N5bWJvbCxxdWFudGl0eSwidHJhbnNmZXJGcm9tQ29udHJhY3QiKXx8KGZpbmFsTG9ja1Rva2Vuc1tsb2Nrc3ltYm9sXT1xdWFudGl0eSxpc1RyYW5zZmVyU3VjY2Vzcz0hMSl9YXBpLmFzc2VydChpc1RyYW5zZmVyU3VjY2VzcyxgdW5hYmxlIHRvIHJlbGVhc2UgbG9ja2VkIHRva2VucyBpbjogJHtzeW1ib2x9LCBpZCAke2lkfWApO2NvbnN0IG9yaWdMb2NrTmZ0cz1uZnRJbnN0YW5jZS5sb2NrZWROZnRzJiZuZnRJbnN0YW5jZS5sb2NrZWROZnRzLmxlbmd0aD4wP25mdEluc3RhbmNlLmxvY2tlZE5mdHM6W107aWYoaXNUcmFuc2ZlclN1Y2Nlc3MmJm5mdEluc3RhbmNlLmxvY2tlZE5mdHMmJm5mdEluc3RhbmNlLmxvY2tlZE5mdHMubGVuZ3RoPjApe2NvbnN0IHJlcz1hd2FpdCB0cmFuc2ZlckFuZFZlcmlmeU5mdHMoIm5mdCIsImNvbnRyYWN0IixmaW5hbEZyb20sZmluYWxGcm9tVHlwZSxuZnRJbnN0YW5jZS5sb2NrZWROZnRzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleSx7bmFtZToibmZ0In0pO25mdEluc3RhbmNlLmxvY2tlZE5mdHM9cmVzLmZhaWwsbmZ0SW5zdGFuY2UubG9ja2VkTmZ0cy5sZW5ndGg+MCYmKGlzVHJhbnNmZXJTdWNjZXNzPSExKSxhcGkuYXNzZXJ0KGlzVHJhbnNmZXJTdWNjZXNzLGB1bmFibGUgdG8gcmVsZWFzZSBsb2NrZWQgTkZUIGluc3RhbmNlcyBpbjogJHtzeW1ib2x9LCBpZCAke2lkfWApfWNvbnN0IG9yaWdPd25lZEJ5PW5mdEluc3RhbmNlLm93bmVkQnksb3JpZ0xvY2tUb2tlbnM9bmZ0SW5zdGFuY2UubG9ja2VkVG9rZW5zO25mdEluc3RhbmNlLmxvY2tlZFRva2Vucz1maW5hbExvY2tUb2tlbnMsaXNUcmFuc2ZlclN1Y2Nlc3MmJihuZnRJbnN0YW5jZS5wcmV2aW91c0FjY291bnQ9bmZ0SW5zdGFuY2UuYWNjb3VudCxuZnRJbnN0YW5jZS5wcmV2aW91c093bmVkQnk9bmZ0SW5zdGFuY2Uub3duZWRCeSxuZnRJbnN0YW5jZS5hY2NvdW50PSJudWxsIixuZnRJbnN0YW5jZS5vd25lZEJ5PSJ1IixuZnQuY2lyY3VsYXRpbmdTdXBwbHktPTEpLGF3YWl0IGFwaS5kYi51cGRhdGUoaW5zdGFuY2VUYWJsZU5hbWUsbmZ0SW5zdGFuY2UpLGlzVHJhbnNmZXJTdWNjZXNzJiZhcGkuZW1pdCgiYnVybiIse2FjY291bnQ6ZmluYWxGcm9tLG93bmVkQnk6b3JpZ093bmVkQnksdW5sb2NrZWRUb2tlbnM6b3JpZ0xvY2tUb2tlbnMsdW5sb2NrZWROZnRzOm9yaWdMb2NrTmZ0cyxzeW1ib2w6c3ltYm9sLGlkOmlkfSl9fX1hd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixuZnQpfX19fSxhY3Rpb25zLnRyYW5zZmVyPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtmcm9tVHlwZTpmcm9tVHlwZSx0bzp0byx0b1R5cGU6dG9UeXBlLG5mdHM6bmZ0cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5LGNhbGxpbmdDb250cmFjdEluZm86Y2FsbGluZ0NvbnRyYWN0SW5mb309cGF5bG9hZCx0eXBlcz1bInVzZXIiLCJjb250cmFjdCJdLGZpbmFsVG9UeXBlPXZvaWQgMD09PXRvVHlwZT8idXNlciI6dG9UeXBlLGZpbmFsRnJvbVR5cGU9dm9pZCAwPT09ZnJvbVR5cGU/InVzZXIiOmZyb21UeXBlO2lmKGFwaS5hc3NlcnQoITA9PT1pc1NpZ25lZFdpdGhBY3RpdmVLZXksInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KGZpbmFsRnJvbVR5cGUmJiJzdHJpbmciPT10eXBlb2YgZmluYWxGcm9tVHlwZSYmdHlwZXMuaW5jbHVkZXMoZmluYWxGcm9tVHlwZSkmJnRvJiYic3RyaW5nIj09dHlwZW9mIHRvJiZmaW5hbFRvVHlwZSYmInN0cmluZyI9PXR5cGVvZiBmaW5hbFRvVHlwZSYmdHlwZXMuaW5jbHVkZXMoZmluYWxUb1R5cGUpJiYoY2FsbGluZ0NvbnRyYWN0SW5mb3x8dm9pZCAwPT09Y2FsbGluZ0NvbnRyYWN0SW5mbyYmInVzZXIiPT09ZmluYWxGcm9tVHlwZSkmJm5mdHMmJiJvYmplY3QiPT10eXBlb2YgbmZ0cyYmQXJyYXkuaXNBcnJheShuZnRzKSwiaW52YWxpZCBwYXJhbXMiKSYmaXNWYWxpZE5mdElkQXJyYXkobmZ0cykpe2NvbnN0IGZpbmFsVG89InVzZXIiPT09ZmluYWxUb1R5cGU/dG8udHJpbSgpLnRvTG93ZXJDYXNlKCk6dG8udHJpbSgpLHRvVmFsaWQ9InVzZXIiPT09ZmluYWxUb1R5cGU/aXNWYWxpZEhpdmVBY2NvdW50TGVuZ3RoKGZpbmFsVG8pOmlzVmFsaWRDb250cmFjdExlbmd0aChmaW5hbFRvKSxmaW5hbEZyb209InVzZXIiPT09ZmluYWxGcm9tVHlwZT9hcGkuc2VuZGVyOmNhbGxpbmdDb250cmFjdEluZm8ubmFtZTtpZihhcGkuYXNzZXJ0KHRvVmFsaWQsImludmFsaWQgdG8iKSYmYXBpLmFzc2VydCghKGZpbmFsVG9UeXBlPT09ZmluYWxGcm9tVHlwZSYmZmluYWxUbz09PWZpbmFsRnJvbSksImNhbm5vdCB0cmFuc2ZlciB0byBzZWxmIikmJmFwaS5hc3NlcnQoISgidXNlciI9PT1maW5hbFRvVHlwZSYmIm51bGwiPT09ZmluYWxUbyksImNhbm5vdCB0cmFuc2ZlciB0byBudWxsOyB1c2UgYnVybiBhY3Rpb24gaW5zdGVhZCIpKWZvcihsZXQgaT0wO2k8bmZ0cy5sZW5ndGg7aSs9MSl7Y29uc3R7c3ltYm9sOnN5bWJvbCxpZHM6aWRzfT1uZnRzW2ldO2lmKGF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pKXtjb25zdCBpbnN0YW5jZVRhYmxlTmFtZT1zeW1ib2wrImluc3RhbmNlcyI7Zm9yKGxldCBqPTA7ajxpZHMubGVuZ3RoO2orPTEpe2NvbnN0IGlkPWlkc1tqXSxuZnRJbnN0YW5jZT1hd2FpdCBhcGkuZGIuZmluZE9uZShpbnN0YW5jZVRhYmxlTmFtZSx7X2lkOmFwaS5CaWdOdW1iZXIoaWQpLnRvTnVtYmVyKCl9KTtpZihuZnRJbnN0YW5jZSYmbmZ0SW5zdGFuY2UuYWNjb3VudD09PWZpbmFsRnJvbSYmKCJ1Ij09PW5mdEluc3RhbmNlLm93bmVkQnkmJiJ1c2VyIj09PWZpbmFsRnJvbVR5cGV8fCJjIj09PW5mdEluc3RhbmNlLm93bmVkQnkmJiJjb250cmFjdCI9PT1maW5hbEZyb21UeXBlKSYmdm9pZCAwPT09bmZ0SW5zdGFuY2UuZGVsZWdhdGVkVG8mJiFuZnRJbnN0YW5jZS5zb3VsQm91bmQpe2NvbnN0IG9yaWdPd25lZEJ5PW5mdEluc3RhbmNlLm93bmVkQnksbmV3T3duZWRCeT0idXNlciI9PT1maW5hbFRvVHlwZT8idSI6ImMiO25mdEluc3RhbmNlLnByZXZpb3VzQWNjb3VudD1uZnRJbnN0YW5jZS5hY2NvdW50LG5mdEluc3RhbmNlLnByZXZpb3VzT3duZWRCeT1uZnRJbnN0YW5jZS5vd25lZEJ5LG5mdEluc3RhbmNlLmFjY291bnQ9ZmluYWxUbyxuZnRJbnN0YW5jZS5vd25lZEJ5PW5ld093bmVkQnksYXdhaXQgYXBpLmRiLnVwZGF0ZShpbnN0YW5jZVRhYmxlTmFtZSxuZnRJbnN0YW5jZSksYXBpLmVtaXQoInRyYW5zZmVyIix7ZnJvbTpmaW5hbEZyb20sZnJvbVR5cGU6b3JpZ093bmVkQnksdG86ZmluYWxUbyx0b1R5cGU6bmV3T3duZWRCeSxzeW1ib2w6c3ltYm9sLGlkOmlkfSl9fX19fX0sYWN0aW9ucy5kZWxlZ2F0ZT1hc3luYyBwYXlsb2FkPT57Y29uc3R7ZnJvbVR5cGU6ZnJvbVR5cGUsdG86dG8sdG9UeXBlOnRvVHlwZSxuZnRzOm5mdHMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleSxjYWxsaW5nQ29udHJhY3RJbmZvOmNhbGxpbmdDb250cmFjdEluZm99PXBheWxvYWQsdHlwZXM9WyJ1c2VyIiwiY29udHJhY3QiXSxmaW5hbFRvVHlwZT12b2lkIDA9PT10b1R5cGU/InVzZXIiOnRvVHlwZSxmaW5hbEZyb21UeXBlPXZvaWQgMD09PWZyb21UeXBlPyJ1c2VyIjpmcm9tVHlwZTtpZihhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChmaW5hbEZyb21UeXBlJiYic3RyaW5nIj09dHlwZW9mIGZpbmFsRnJvbVR5cGUmJnR5cGVzLmluY2x1ZGVzKGZpbmFsRnJvbVR5cGUpJiZ0byYmInN0cmluZyI9PXR5cGVvZiB0byYmZmluYWxUb1R5cGUmJiJzdHJpbmciPT10eXBlb2YgZmluYWxUb1R5cGUmJnR5cGVzLmluY2x1ZGVzKGZpbmFsVG9UeXBlKSYmKGNhbGxpbmdDb250cmFjdEluZm98fHZvaWQgMD09PWNhbGxpbmdDb250cmFjdEluZm8mJiJ1c2VyIj09PWZpbmFsRnJvbVR5cGUpJiZuZnRzJiYib2JqZWN0Ij09dHlwZW9mIG5mdHMmJkFycmF5LmlzQXJyYXkobmZ0cyksImludmFsaWQgcGFyYW1zIikmJmlzVmFsaWROZnRJZEFycmF5KG5mdHMpKXtjb25zdCBmaW5hbFRvPSJ1c2VyIj09PWZpbmFsVG9UeXBlP3RvLnRyaW0oKS50b0xvd2VyQ2FzZSgpOnRvLnRyaW0oKSx0b1ZhbGlkPSJ1c2VyIj09PWZpbmFsVG9UeXBlP2lzVmFsaWRIaXZlQWNjb3VudExlbmd0aChmaW5hbFRvKTppc1ZhbGlkQ29udHJhY3RMZW5ndGgoZmluYWxUbyksZmluYWxGcm9tPSJ1c2VyIj09PWZpbmFsRnJvbVR5cGU/YXBpLnNlbmRlcjpjYWxsaW5nQ29udHJhY3RJbmZvLm5hbWU7aWYoYXBpLmFzc2VydCh0b1ZhbGlkLCJpbnZhbGlkIHRvIikmJmFwaS5hc3NlcnQoIShmaW5hbFRvVHlwZT09PWZpbmFsRnJvbVR5cGUmJmZpbmFsVG89PT1maW5hbEZyb20pLCJjYW5ub3QgZGVsZWdhdGUgdG8gc2VsZiIpJiZhcGkuYXNzZXJ0KCEoInVzZXIiPT09ZmluYWxUb1R5cGUmJiJudWxsIj09PWZpbmFsVG8pLCJjYW5ub3QgZGVsZWdhdGUgdG8gbnVsbCIpKWZvcihsZXQgaT0wO2k8bmZ0cy5sZW5ndGg7aSs9MSl7Y29uc3R7c3ltYm9sOnN5bWJvbCxpZHM6aWRzfT1uZnRzW2ldLG5mdD1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzeW1ib2x9KTtpZihuZnQmJmFwaS5hc3NlcnQoITA9PT1uZnQuZGVsZWdhdGlvbkVuYWJsZWQsImRlbGVnYXRpb24gbm90IGVuYWJsZWQgZm9yICIrc3ltYm9sKSl7Y29uc3QgaW5zdGFuY2VUYWJsZU5hbWU9c3ltYm9sKyJpbnN0YW5jZXMiO2ZvcihsZXQgaj0wO2o8aWRzLmxlbmd0aDtqKz0xKXtjb25zdCBpZD1pZHNbal0sbmZ0SW5zdGFuY2U9YXdhaXQgYXBpLmRiLmZpbmRPbmUoaW5zdGFuY2VUYWJsZU5hbWUse19pZDphcGkuQmlnTnVtYmVyKGlkKS50b051bWJlcigpfSk7aWYobmZ0SW5zdGFuY2UmJm5mdEluc3RhbmNlLmFjY291bnQ9PT1maW5hbEZyb20mJigidSI9PT1uZnRJbnN0YW5jZS5vd25lZEJ5JiYidXNlciI9PT1maW5hbEZyb21UeXBlfHwiYyI9PT1uZnRJbnN0YW5jZS5vd25lZEJ5JiYiY29udHJhY3QiPT09ZmluYWxGcm9tVHlwZSkmJnZvaWQgMD09PW5mdEluc3RhbmNlLmRlbGVnYXRlZFRvJiYhbmZ0SW5zdGFuY2Uuc291bEJvdW5kKXtjb25zdCBuZXdPd25lZEJ5PSJ1c2VyIj09PWZpbmFsVG9UeXBlPyJ1IjoiYyIsbmV3RGVsZWdhdGlvbj17YWNjb3VudDpmaW5hbFRvLG93bmVkQnk6bmV3T3duZWRCeX07bmZ0SW5zdGFuY2UuZGVsZWdhdGVkVG89bmV3RGVsZWdhdGlvbixhd2FpdCBhcGkuZGIudXBkYXRlKGluc3RhbmNlVGFibGVOYW1lLG5mdEluc3RhbmNlKSxhcGkuZW1pdCgiZGVsZWdhdGUiLHtmcm9tOmZpbmFsRnJvbSxmcm9tVHlwZTpuZnRJbnN0YW5jZS5vd25lZEJ5LHRvOmZpbmFsVG8sdG9UeXBlOm5ld093bmVkQnksc3ltYm9sOnN5bWJvbCxpZDppZH0pLGF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgibWluaW5nIiwiaGFuZGxlTmZ0RGVsZWdhdGlvbkNoYW5nZSIse3N5bWJvbDpzeW1ib2wsbmZ0Om5mdEluc3RhbmNlLGFkZDohMH0pfX19fX19LGFjdGlvbnMudW5kZWxlZ2F0ZT1hc3luYyBwYXlsb2FkPT57Y29uc3R7ZnJvbVR5cGU6ZnJvbVR5cGUsbmZ0czpuZnRzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXksY2FsbGluZ0NvbnRyYWN0SW5mbzpjYWxsaW5nQ29udHJhY3RJbmZvfT1wYXlsb2FkLGZpbmFsRnJvbVR5cGU9dm9pZCAwPT09ZnJvbVR5cGU/InVzZXIiOmZyb21UeXBlO2lmKGFwaS5hc3NlcnQoITA9PT1pc1NpZ25lZFdpdGhBY3RpdmVLZXksInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KGZpbmFsRnJvbVR5cGUmJiJzdHJpbmciPT10eXBlb2YgZmluYWxGcm9tVHlwZSYmWyJ1c2VyIiwiY29udHJhY3QiXS5pbmNsdWRlcyhmaW5hbEZyb21UeXBlKSYmKGNhbGxpbmdDb250cmFjdEluZm98fHZvaWQgMD09PWNhbGxpbmdDb250cmFjdEluZm8mJiJ1c2VyIj09PWZpbmFsRnJvbVR5cGUpJiZuZnRzJiYib2JqZWN0Ij09dHlwZW9mIG5mdHMmJkFycmF5LmlzQXJyYXkobmZ0cyksImludmFsaWQgcGFyYW1zIikmJmlzVmFsaWROZnRJZEFycmF5KG5mdHMpKXtjb25zdCBmaW5hbEZyb209InVzZXIiPT09ZmluYWxGcm9tVHlwZT9hcGkuc2VuZGVyOmNhbGxpbmdDb250cmFjdEluZm8ubmFtZSxibG9ja0RhdGU9bmV3IERhdGUoYXBpLmhpdmVCbG9ja1RpbWVzdGFtcCsiLjAwMFoiKTtmb3IobGV0IGk9MDtpPG5mdHMubGVuZ3RoO2krPTEpe2NvbnN0e3N5bWJvbDpzeW1ib2wsaWRzOmlkc309bmZ0c1tpXSxuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7aWYobmZ0JiZhcGkuYXNzZXJ0KCEwPT09bmZ0LmRlbGVnYXRpb25FbmFibGVkLCJkZWxlZ2F0aW9uIG5vdCBlbmFibGVkIGZvciAiK3N5bWJvbCkpe2NvbnN0IGNvb2xkb3duUGVyaW9kTWlsbGlzZWM9MjQqbmZ0LnVuZGVsZWdhdGlvbkNvb2xkb3duKjM2MDAqMWUzLGNvbXBsZXRlVGltZXN0YW1wPWJsb2NrRGF0ZS5nZXRUaW1lKCkrY29vbGRvd25QZXJpb2RNaWxsaXNlYyxpbnN0YW5jZVRhYmxlTmFtZT1zeW1ib2wrImluc3RhbmNlcyIsdW5kZWxlZ2F0aW9uPXtzeW1ib2w6c3ltYm9sLGlkczpbXSxjb21wbGV0ZVRpbWVzdGFtcDpjb21wbGV0ZVRpbWVzdGFtcH07Zm9yKGxldCBqPTA7ajxpZHMubGVuZ3RoO2orPTEpe2NvbnN0IGlkPWlkc1tqXSxuZnRJbnN0YW5jZT1hd2FpdCBhcGkuZGIuZmluZE9uZShpbnN0YW5jZVRhYmxlTmFtZSx7X2lkOmFwaS5CaWdOdW1iZXIoaWQpLnRvTnVtYmVyKCl9KTtuZnRJbnN0YW5jZSYmbmZ0SW5zdGFuY2UuYWNjb3VudD09PWZpbmFsRnJvbSYmKCJ1Ij09PW5mdEluc3RhbmNlLm93bmVkQnkmJiJ1c2VyIj09PWZpbmFsRnJvbVR5cGV8fCJjIj09PW5mdEluc3RhbmNlLm93bmVkQnkmJiJjb250cmFjdCI9PT1maW5hbEZyb21UeXBlKSYmbmZ0SW5zdGFuY2UuZGVsZWdhdGVkVG8mJnZvaWQgMD09PW5mdEluc3RhbmNlLmRlbGVnYXRlZFRvLnVuZGVsZWdhdGVBdCYmKG5mdEluc3RhbmNlLmRlbGVnYXRlZFRvLnVuZGVsZWdhdGVBdD1jb21wbGV0ZVRpbWVzdGFtcCx1bmRlbGVnYXRpb24uaWRzLnB1c2gobmZ0SW5zdGFuY2UuX2lkKSxhd2FpdCBhcGkuZGIudXBkYXRlKGluc3RhbmNlVGFibGVOYW1lLG5mdEluc3RhbmNlKSxhcGkuZW1pdCgidW5kZWxlZ2F0ZVN0YXJ0Iix7ZnJvbTpuZnRJbnN0YW5jZS5kZWxlZ2F0ZWRUby5hY2NvdW50LGZyb21UeXBlOm5mdEluc3RhbmNlLmRlbGVnYXRlZFRvLm93bmVkQnksc3ltYm9sOnN5bWJvbCxpZDppZH0pLGF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgibWluaW5nIiwiaGFuZGxlTmZ0RGVsZWdhdGlvbkNoYW5nZSIse3N5bWJvbDpzeW1ib2wsbmZ0Om5mdEluc3RhbmNlLGFkZDohMX0pKX11bmRlbGVnYXRpb24uaWRzLmxlbmd0aD4wJiZhd2FpdCBhcGkuZGIuaW5zZXJ0KCJwZW5kaW5nVW5kZWxlZ2F0aW9ucyIsdW5kZWxlZ2F0aW9uKX19fX07Y29uc3QgcHJvY2Vzc1VuZGVsZWdhdGlvbj1hc3luYyB1bmRlbGVnYXRpb249Pntjb25zdHtzeW1ib2w6c3ltYm9sLGlkczppZHN9PXVuZGVsZWdhdGlvbixpbnN0YW5jZVRhYmxlTmFtZT1zeW1ib2wrImluc3RhbmNlcyIsaW5zdGFuY2VzPWF3YWl0IGFwaS5kYi5maW5kKGluc3RhbmNlVGFibGVOYW1lLHtfaWQ6eyRpbjppZHN9fSw1MCwwLFt7aW5kZXg6Il9pZCIsZGVzY2VuZGluZzohMX1dKTtmb3IobGV0IGk9MDtpPGluc3RhbmNlcy5sZW5ndGg7aSs9MSlkZWxldGUgaW5zdGFuY2VzW2ldLmRlbGVnYXRlZFRvLGF3YWl0IGFwaS5kYi51cGRhdGUoaW5zdGFuY2VUYWJsZU5hbWUsaW5zdGFuY2VzW2ldLHtkZWxlZ2F0ZWRUbzoiIn0pO2F3YWl0IGFwaS5kYi5yZW1vdmUoInBlbmRpbmdVbmRlbGVnYXRpb25zIix1bmRlbGVnYXRpb24pLGFwaS5lbWl0KCJ1bmRlbGVnYXRlRG9uZSIse3N5bWJvbDpzeW1ib2wsaWRzOmlkc30pfTthY3Rpb25zLmNoZWNrUGVuZGluZ1VuZGVsZWdhdGlvbnM9YXN5bmMoKT0+e2lmKGFwaS5hc3NlcnQoIm51bGwiPT09YXBpLnNlbmRlciwibm90IGF1dGhvcml6ZWQiKSl7Y29uc3QgdGltZXN0YW1wPW5ldyBEYXRlKGFwaS5oaXZlQmxvY2tUaW1lc3RhbXArIi4wMDBaIikuZ2V0VGltZSgpO2xldCBwZW5kaW5nVW5kZWxlZ2F0aW9ucz1hd2FpdCBhcGkuZGIuZmluZCgicGVuZGluZ1VuZGVsZWdhdGlvbnMiLHtjb21wbGV0ZVRpbWVzdGFtcDp7JGx0ZTp0aW1lc3RhbXB9fSksbmJQZW5kaW5nVW5kZWxlZ2F0aW9ucz1wZW5kaW5nVW5kZWxlZ2F0aW9ucy5sZW5ndGg7Zm9yKDtuYlBlbmRpbmdVbmRlbGVnYXRpb25zPjA7KXtmb3IobGV0IGluZGV4PTA7aW5kZXg8bmJQZW5kaW5nVW5kZWxlZ2F0aW9ucztpbmRleCs9MSl7Y29uc3QgcGVuZGluZ1VuZGVsZWdhdGlvbj1wZW5kaW5nVW5kZWxlZ2F0aW9uc1tpbmRleF07YXdhaXQgcHJvY2Vzc1VuZGVsZWdhdGlvbihwZW5kaW5nVW5kZWxlZ2F0aW9uKX1wZW5kaW5nVW5kZWxlZ2F0aW9ucz1hd2FpdCBhcGkuZGIuZmluZCgicGVuZGluZ1VuZGVsZWdhdGlvbnMiLHtjb21wbGV0ZVRpbWVzdGFtcDp7JGx0ZTp0aW1lc3RhbXB9fSksbmJQZW5kaW5nVW5kZWxlZ2F0aW9ucz1wZW5kaW5nVW5kZWxlZ2F0aW9ucy5sZW5ndGh9fX0sYWN0aW9ucy5jcmVhdGU9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e25hbWU6bmFtZSxvcmdOYW1lOm9yZ05hbWUscHJvZHVjdE5hbWU6cHJvZHVjdE5hbWUsc3ltYm9sOnN5bWJvbCx1cmw6dXJsLG1heFN1cHBseTptYXhTdXBwbHksYXV0aG9yaXplZElzc3VpbmdBY2NvdW50czphdXRob3JpemVkSXNzdWluZ0FjY291bnRzLGF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzOmF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9PXBheWxvYWQscGFyYW1zPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KSx7bmZ0Q3JlYXRpb25GZWU6bmZ0Q3JlYXRpb25GZWV9PXBhcmFtcyx1dGlsaXR5VG9rZW5CYWxhbmNlPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOlVUSUxJVFlfVE9LRU5fU1lNQk9MfSksYXV0aG9yaXplZENyZWF0aW9uPSEhYXBpLkJpZ051bWJlcihuZnRDcmVhdGlvbkZlZSkubHRlKDApfHx1dGlsaXR5VG9rZW5CYWxhbmNlJiZhcGkuQmlnTnVtYmVyKHV0aWxpdHlUb2tlbkJhbGFuY2UuYmFsYW5jZSkuZ3RlKG5mdENyZWF0aW9uRmVlKTtpZihhcGkuYXNzZXJ0KGF1dGhvcml6ZWRDcmVhdGlvbiwieW91IG11c3QgaGF2ZSBlbm91Z2ggdG9rZW5zIHRvIGNvdmVyIHRoZSBjcmVhdGlvbiBmZWVzIikmJmFwaS5hc3NlcnQoITA9PT1pc1NpZ25lZFdpdGhBY3RpdmVLZXksInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KG5hbWUmJiJzdHJpbmciPT10eXBlb2YgbmFtZSYmc3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIHN5bWJvbCYmKHZvaWQgMD09PXVybHx8dXJsJiYic3RyaW5nIj09dHlwZW9mIHVybCkmJih2b2lkIDA9PT1vcmdOYW1lfHxvcmdOYW1lJiYic3RyaW5nIj09dHlwZW9mIG9yZ05hbWUpJiYodm9pZCAwPT09cHJvZHVjdE5hbWV8fHByb2R1Y3ROYW1lJiYic3RyaW5nIj09dHlwZW9mIHByb2R1Y3ROYW1lKSYmKHZvaWQgMD09PWF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHN8fGF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMmJiJvYmplY3QiPT10eXBlb2YgYXV0aG9yaXplZElzc3VpbmdBY2NvdW50cyYmQXJyYXkuaXNBcnJheShhdXRob3JpemVkSXNzdWluZ0FjY291bnRzKSkmJih2b2lkIDA9PT1hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0c3x8YXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMmJiJvYmplY3QiPT10eXBlb2YgYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMmJkFycmF5LmlzQXJyYXkoYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMpKSYmKHZvaWQgMD09PW1heFN1cHBseXx8bWF4U3VwcGx5JiYic3RyaW5nIj09dHlwZW9mIG1heFN1cHBseSYmIWFwaS5CaWdOdW1iZXIobWF4U3VwcGx5KS5pc05hTigpKSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChhcGkudmFsaWRhdG9yLmlzQWxwaGEoc3ltYm9sKSYmYXBpLnZhbGlkYXRvci5pc1VwcGVyY2FzZShzeW1ib2wpJiZzeW1ib2wubGVuZ3RoPjAmJnN5bWJvbC5sZW5ndGg8PTEwLCJpbnZhbGlkIHN5bWJvbDogdXBwZXJjYXNlIGxldHRlcnMgb25seSwgbWF4IGxlbmd0aCBvZiAxMCIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PVJFU0VSVkVEX1NZTUJPTFNbc3ltYm9sXXx8YXBpLnNlbmRlcj09PVJFU0VSVkVEX1NZTUJPTFNbc3ltYm9sXSwiY2Fubm90IHVzZSB0aGlzIHN5bWJvbCIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QobmFtZSwiICIpKSYmbmFtZS5sZW5ndGg+MCYmbmFtZS5sZW5ndGg8PTUwLCJpbnZhbGlkIG5hbWU6IGxldHRlcnMsIG51bWJlcnMsIHdoaXRlc3BhY2VzIG9ubHksIG1heCBsZW5ndGggb2YgNTAiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1vcmdOYW1lfHxhcGkudmFsaWRhdG9yLmlzQWxwaGFudW1lcmljKGFwaS52YWxpZGF0b3IuYmxhY2tsaXN0KG9yZ05hbWUsIiAiKSkmJm9yZ05hbWUubGVuZ3RoPjAmJm9yZ05hbWUubGVuZ3RoPD01MCwiaW52YWxpZCBvcmcgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PXByb2R1Y3ROYW1lfHxhcGkudmFsaWRhdG9yLmlzQWxwaGFudW1lcmljKGFwaS52YWxpZGF0b3IuYmxhY2tsaXN0KHByb2R1Y3ROYW1lLCIgIikpJiZwcm9kdWN0TmFtZS5sZW5ndGg+MCYmcHJvZHVjdE5hbWUubGVuZ3RoPD01MCwiaW52YWxpZCBwcm9kdWN0IG5hbWU6IGxldHRlcnMsIG51bWJlcnMsIHdoaXRlc3BhY2VzIG9ubHksIG1heCBsZW5ndGggb2YgNTAiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT11cmx8fHVybC5sZW5ndGg8PTI1NSwiaW52YWxpZCB1cmw6IG1heCBsZW5ndGggb2YgMjU1IikmJmFwaS5hc3NlcnQodm9pZCAwPT09bWF4U3VwcGx5fHxhcGkuQmlnTnVtYmVyKG1heFN1cHBseSkuZ3QoMCksIm1heFN1cHBseSBtdXN0IGJlIHBvc2l0aXZlIikmJmFwaS5hc3NlcnQodm9pZCAwPT09bWF4U3VwcGx5fHxhcGkuQmlnTnVtYmVyKG1heFN1cHBseSkubHRlKE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSwibWF4U3VwcGx5IG11c3QgYmUgbG93ZXIgdGhhbiAiK051bWJlci5NQVhfU0FGRV9JTlRFR0VSKSl7Y29uc3QgbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO2lmKGFwaS5hc3NlcnQobnVsbD09PW5mdCwic3ltYm9sIGFscmVhZHkgZXhpc3RzIikpe2lmKGFwaS5CaWdOdW1iZXIobmZ0Q3JlYXRpb25GZWUpLmd0KDApKXtjb25zdCByZXM9YXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlciIse3RvOiJudWxsIixzeW1ib2w6VVRJTElUWV9UT0tFTl9TWU1CT0wscXVhbnRpdHk6bmZ0Q3JlYXRpb25GZWUsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX0pO2lmKCFpc1Rva2VuVHJhbnNmZXJWZXJpZmllZChyZXMsYXBpLnNlbmRlciwibnVsbCIsVVRJTElUWV9UT0tFTl9TWU1CT0wsbmZ0Q3JlYXRpb25GZWUsInRyYW5zZmVyIikpcmV0dXJuITF9Y29uc3QgZmluYWxNYXhTdXBwbHk9dm9pZCAwPT09bWF4U3VwcGx5PzA6YXBpLkJpZ051bWJlcihtYXhTdXBwbHkpLmludGVnZXJWYWx1ZShhcGkuQmlnTnVtYmVyLlJPVU5EX0RPV04pLnRvTnVtYmVyKCksZmluYWxPcmdOYW1lPXZvaWQgMD09PW9yZ05hbWU/IiI6b3JnTmFtZSxmaW5hbFByb2R1Y3ROYW1lPXZvaWQgMD09PXByb2R1Y3ROYW1lPyIiOnByb2R1Y3ROYW1lO2xldCBtZXRhZGF0YT17dXJsOnZvaWQgMD09PXVybD8iIjp1cmx9O21ldGFkYXRhPUpTT04uc3RyaW5naWZ5KG1ldGFkYXRhKTtjb25zdCBpbml0aWFsQWNjb3VudExpc3Q9dm9pZCAwPT09YXV0aG9yaXplZElzc3VpbmdBY2NvdW50cz9bYXBpLnNlbmRlcl06W10sbmV3TmZ0PXtpc3N1ZXI6YXBpLnNlbmRlcixzeW1ib2w6c3ltYm9sLG5hbWU6bmFtZSxvcmdOYW1lOmZpbmFsT3JnTmFtZSxwcm9kdWN0TmFtZTpmaW5hbFByb2R1Y3ROYW1lLG1ldGFkYXRhOm1ldGFkYXRhLG1heFN1cHBseTpmaW5hbE1heFN1cHBseSxzdXBwbHk6MCxjaXJjdWxhdGluZ1N1cHBseTowLGRlbGVnYXRpb25FbmFibGVkOiExLHVuZGVsZWdhdGlvbkNvb2xkb3duOjAsYXV0aG9yaXplZElzc3VpbmdBY2NvdW50czppbml0aWFsQWNjb3VudExpc3QsYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHM6W10scHJvcGVydGllczp7fSxncm91cEJ5OltdfSxpbnN0YW5jZVRhYmxlTmFtZT1zeW1ib2wrImluc3RhbmNlcyI7cmV0dXJuITE9PT1hd2FpdCBhcGkuZGIudGFibGVFeGlzdHMoaW5zdGFuY2VUYWJsZU5hbWUpJiZhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoaW5zdGFuY2VUYWJsZU5hbWUsWyJhY2NvdW50Iiwib3duZWRCeSJdKSxhd2FpdCBhcGkuZGIuaW5zZXJ0KCJuZnRzIixuZXdOZnQpLHZvaWQgMCE9PWF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMmJmF3YWl0IGFjdGlvbnMuYWRkQXV0aG9yaXplZElzc3VpbmdBY2NvdW50cyh7YWNjb3VudHM6YXV0aG9yaXplZElzc3VpbmdBY2NvdW50cyxzeW1ib2w6c3ltYm9sLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9KSx2b2lkIDAhPT1hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cyYmYXdhaXQgYWN0aW9ucy5hZGRBdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cyh7Y29udHJhY3RzOmF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzLHN5bWJvbDpzeW1ib2wsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX0pLCEwfX1yZXR1cm4hMX0sYWN0aW9ucy5pc3N1ZT1hc3luYyBwYXlsb2FkPT57Y29uc3R7c3ltYm9sOnN5bWJvbCxmcm9tVHlwZTpmcm9tVHlwZSx0bzp0byx0b1R5cGU6dG9UeXBlLGZlZVN5bWJvbDpmZWVTeW1ib2wsbG9ja1Rva2Vuczpsb2NrVG9rZW5zLGxvY2tOZnRzOmxvY2tOZnRzLHNvdWxCb3VuZDpzb3VsQm91bmQscHJvcGVydGllczpwcm9wZXJ0aWVzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXksY2FsbGluZ0NvbnRyYWN0SW5mbzpjYWxsaW5nQ29udHJhY3RJbmZvfT1wYXlsb2FkLHR5cGVzPVsidXNlciIsImNvbnRyYWN0Il0sZmluYWxUb1R5cGU9dm9pZCAwPT09dG9UeXBlPyJ1c2VyIjp0b1R5cGUsZmluYWxGcm9tVHlwZT12b2lkIDA9PT1mcm9tVHlwZT8idXNlciI6ZnJvbVR5cGUscGFyYW1zPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KSx7bmZ0SXNzdWFuY2VGZWU6bmZ0SXNzdWFuY2VGZWV9PXBhcmFtcztpZihhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzeW1ib2wmJiJzdHJpbmciPT10eXBlb2Ygc3ltYm9sJiZmaW5hbEZyb21UeXBlJiYic3RyaW5nIj09dHlwZW9mIGZpbmFsRnJvbVR5cGUmJnR5cGVzLmluY2x1ZGVzKGZpbmFsRnJvbVR5cGUpJiYoY2FsbGluZ0NvbnRyYWN0SW5mb3x8dm9pZCAwPT09Y2FsbGluZ0NvbnRyYWN0SW5mbyYmInVzZXIiPT09ZmluYWxGcm9tVHlwZSkmJnRvJiYic3RyaW5nIj09dHlwZW9mIHRvJiZmaW5hbFRvVHlwZSYmInN0cmluZyI9PXR5cGVvZiBmaW5hbFRvVHlwZSYmdHlwZXMuaW5jbHVkZXMoZmluYWxUb1R5cGUpJiZmZWVTeW1ib2wmJiJzdHJpbmciPT10eXBlb2YgZmVlU3ltYm9sJiZmZWVTeW1ib2wgaW4gbmZ0SXNzdWFuY2VGZWUmJih2b2lkIDA9PT1wcm9wZXJ0aWVzfHxwcm9wZXJ0aWVzJiYib2JqZWN0Ij09dHlwZW9mIHByb3BlcnRpZXMpJiYodm9pZCAwPT09bG9ja1Rva2Vuc3x8bG9ja1Rva2VucyYmIm9iamVjdCI9PXR5cGVvZiBsb2NrVG9rZW5zKSYmKHZvaWQgMD09PWxvY2tOZnRzfHxsb2NrTmZ0cyYmIm9iamVjdCI9PXR5cGVvZiBsb2NrTmZ0cyYmQXJyYXkuaXNBcnJheShsb2NrTmZ0cykpJiYodm9pZCAwPT09c291bEJvdW5kfHwiYm9vbGVhbiI9PXR5cGVvZiBzb3VsQm91bmQpLCJpbnZhbGlkIHBhcmFtcyIpJiYodm9pZCAwPT09bG9ja05mdHN8fGlzVmFsaWROZnRJZEFycmF5KGxvY2tOZnRzKSkpe2NvbnN0IGZpbmFsVG89InVzZXIiPT09ZmluYWxUb1R5cGU/dG8udHJpbSgpLnRvTG93ZXJDYXNlKCk6dG8udHJpbSgpLHRvVmFsaWQ9InVzZXIiPT09ZmluYWxUb1R5cGU/aXNWYWxpZEhpdmVBY2NvdW50TGVuZ3RoKGZpbmFsVG8pOmlzVmFsaWRDb250cmFjdExlbmd0aChmaW5hbFRvKSxmaW5hbEZyb209InVzZXIiPT09ZmluYWxGcm9tVHlwZT9hcGkuc2VuZGVyOmNhbGxpbmdDb250cmFjdEluZm8ubmFtZSxiYWxhbmNlVGFibGVOYW1lPSJ1c2VyIj09PWZpbmFsRnJvbVR5cGU/ImJhbGFuY2VzIjoiY29udHJhY3RzQmFsYW5jZXMiO2lmKGFwaS5hc3NlcnQodG9WYWxpZCwiaW52YWxpZCB0byIpKXtjb25zdCBuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSksZmVlVG9rZW49YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJ0b2tlbnMiLHtzeW1ib2w6ZmVlU3ltYm9sfSk7aWYoYXBpLmFzc2VydChudWxsIT09bmZ0LCJzeW1ib2wgZG9lcyBub3QgZXhpc3QiKSYmYXBpLmFzc2VydChudWxsIT09ZmVlVG9rZW4sImZlZSBzeW1ib2wgZG9lcyBub3QgZXhpc3QiKSl7Y29uc3QgaW5zdGFuY2VUYWJsZU5hbWU9c3ltYm9sKyJpbnN0YW5jZXMiO2lmKGFwaS5hc3NlcnQoImNvbnRyYWN0Ij09PWZpbmFsRnJvbVR5cGUmJm5mdC5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cy5pbmNsdWRlcyhmaW5hbEZyb20pfHwidXNlciI9PT1maW5hbEZyb21UeXBlJiZuZnQuYXV0aG9yaXplZElzc3VpbmdBY2NvdW50cy5pbmNsdWRlcyhmaW5hbEZyb20pLCJub3QgYWxsb3dlZCB0byBpc3N1ZSB0b2tlbnMiKSYmYXBpLmFzc2VydCgwPT09bmZ0Lm1heFN1cHBseXx8bmZ0LnN1cHBseTxuZnQubWF4U3VwcGx5LCJtYXggc3VwcGx5IGxpbWl0IHJlYWNoZWQiKSl7Y29uc3QgcHJvcGVydHlDb3VudD1PYmplY3Qua2V5cyhuZnQucHJvcGVydGllcykubGVuZ3RoLHByb3BlcnR5RmVlPWFwaS5CaWdOdW1iZXIobmZ0SXNzdWFuY2VGZWVbZmVlU3ltYm9sXSkubXVsdGlwbGllZEJ5KHByb3BlcnR5Q291bnQpLGlzc3VhbmNlRmVlPWNhbGN1bGF0ZUJhbGFuY2UobmZ0SXNzdWFuY2VGZWVbZmVlU3ltYm9sXSxwcm9wZXJ0eUZlZSxmZWVUb2tlbi5wcmVjaXNpb24sITApLGZlZVRva2VuQmFsYW5jZT1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsYmFsYW5jZVRhYmxlTmFtZSx7YWNjb3VudDpmaW5hbEZyb20sc3ltYm9sOmZlZVN5bWJvbH0pLGF1dGhvcml6ZWRDcmVhdGlvbj0hIWFwaS5CaWdOdW1iZXIoaXNzdWFuY2VGZWUpLmx0ZSgwKXx8ZmVlVG9rZW5CYWxhbmNlJiZhcGkuQmlnTnVtYmVyKGZlZVRva2VuQmFsYW5jZS5iYWxhbmNlKS5ndGUoaXNzdWFuY2VGZWUpO2lmKGxvY2tUb2tlbnMpe2NvbnN0IGlzTG9ja1ZhbGlkPWF3YWl0IGlzVmFsaWRUb2tlbkJhc2tldChsb2NrVG9rZW5zLGJhbGFuY2VUYWJsZU5hbWUsZmluYWxGcm9tLGZlZVN5bWJvbCxpc3N1YW5jZUZlZSk7aWYoIWFwaS5hc3NlcnQoaXNMb2NrVmFsaWQsImludmFsaWQgYmFza2V0IG9mIHRva2VucyB0byBsb2NrIChjYW5ub3QgbG9jayBtb3JlIHRoYW4gMTAgdG9rZW4gdHlwZXM7IGlzc3VpbmcgYWNjb3VudCBtdXN0IGhhdmUgZW5vdWdoIGJhbGFuY2UpIikpcmV0dXJuITF9bGV0IGZpbmFsUHJvcGVydGllcz17fTtpZih2b2lkIDAhPT1wcm9wZXJ0aWVzKXt0cnl7aWYoIWlzVmFsaWREYXRhUHJvcGVydGllcyhmaW5hbEZyb20sZmluYWxGcm9tVHlwZSxuZnQscHJvcGVydGllcykpcmV0dXJuITF9Y2F0Y2goZSl7cmV0dXJuITF9ZmluYWxQcm9wZXJ0aWVzPXByb3BlcnRpZXN9aWYoYXBpLmFzc2VydChhdXRob3JpemVkQ3JlYXRpb24sInlvdSBtdXN0IGhhdmUgZW5vdWdoIHRva2VucyB0byBjb3ZlciB0aGUgaXNzdWFuY2UgZmVlcyIpKXtpZihhcGkuQmlnTnVtYmVyKGlzc3VhbmNlRmVlKS5ndCgwKSlpZigiY29udHJhY3QiPT09ZmluYWxGcm9tVHlwZSl7Y29uc3QgcmVzPWF3YWl0IGFwaS50cmFuc2ZlclRva2Vuc0Zyb21DYWxsaW5nQ29udHJhY3QoIm51bGwiLGZlZVN5bWJvbCxpc3N1YW5jZUZlZSwidXNlciIpO2lmKCFhcGkuYXNzZXJ0KGlzVG9rZW5UcmFuc2ZlclZlcmlmaWVkKHJlcyxmaW5hbEZyb20sIm51bGwiLGZlZVN5bWJvbCxpc3N1YW5jZUZlZSwidHJhbnNmZXJGcm9tQ29udHJhY3QiKSwidW5hYmxlIHRvIHRyYW5zZmVyIGlzc3VhbmNlIGZlZSIpKXJldHVybiExfWVsc2V7Y29uc3QgcmVzPWF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOmZlZVN5bWJvbCxxdWFudGl0eTppc3N1YW5jZUZlZSxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fSk7aWYoIWFwaS5hc3NlcnQoaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQocmVzLGZpbmFsRnJvbSwibnVsbCIsZmVlU3ltYm9sLGlzc3VhbmNlRmVlLCJ0cmFuc2ZlciIpLCJ1bmFibGUgdG8gdHJhbnNmZXIgaXNzdWFuY2UgZmVlIikpcmV0dXJuITF9Y29uc3QgZmluYWxMb2NrVG9rZW5zPXt9O2lmKGxvY2tUb2tlbnMpZm9yKGNvbnN0W2xvY2tzeW1ib2wscXVhbnRpdHldb2YgT2JqZWN0LmVudHJpZXMobG9ja1Rva2VucykpaWYoImNvbnRyYWN0Ij09PWZpbmFsRnJvbVR5cGUpe2NvbnN0IHJlcz1hd2FpdCBhcGkudHJhbnNmZXJUb2tlbnNGcm9tQ2FsbGluZ0NvbnRyYWN0KCJuZnQiLGxvY2tzeW1ib2wscXVhbnRpdHksImNvbnRyYWN0Iik7aXNUb2tlblRyYW5zZmVyVmVyaWZpZWQocmVzLGZpbmFsRnJvbSwibmZ0Iixsb2Nrc3ltYm9sLHF1YW50aXR5LCJ0cmFuc2ZlckZyb21Db250cmFjdCIpJiYoZmluYWxMb2NrVG9rZW5zW2xvY2tzeW1ib2xdPXF1YW50aXR5KX1lbHNle2NvbnN0IHJlcz1hd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoInRva2VucyIsInRyYW5zZmVyVG9Db250cmFjdCIse3RvOiJuZnQiLHN5bWJvbDpsb2Nrc3ltYm9sLHF1YW50aXR5OnF1YW50aXR5LGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9KTtpc1Rva2VuVHJhbnNmZXJWZXJpZmllZChyZXMsZmluYWxGcm9tLCJuZnQiLGxvY2tzeW1ib2wscXVhbnRpdHksInRyYW5zZmVyVG9Db250cmFjdCIpJiYoZmluYWxMb2NrVG9rZW5zW2xvY2tzeW1ib2xdPXF1YW50aXR5KX1sZXQgZmluYWxMb2NrTmZ0cz1bXTtpZihsb2NrTmZ0cyYmbG9ja05mdHMubGVuZ3RoPjApe2ZpbmFsTG9ja05mdHM9KGF3YWl0IHRyYW5zZmVyQW5kVmVyaWZ5TmZ0cyhmaW5hbEZyb20sZmluYWxGcm9tVHlwZSwibmZ0IiwiY29udHJhY3QiLGxvY2tOZnRzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleSxjYWxsaW5nQ29udHJhY3RJbmZvKSkuc3VjY2Vzc31jb25zdCBvd25lZEJ5PSJ1c2VyIj09PWZpbmFsVG9UeXBlPyJ1IjoiYyI7bGV0IG5ld0luc3RhbmNlPXt9O25ld0luc3RhbmNlPWZpbmFsTG9ja05mdHMubGVuZ3RoPjA/e2FjY291bnQ6ZmluYWxUbyxzb3VsQm91bmQ6ISFzb3VsQm91bmQsb3duZWRCeTpvd25lZEJ5LGxvY2tlZFRva2VuczpmaW5hbExvY2tUb2tlbnMsbG9ja2VkTmZ0czpmaW5hbExvY2tOZnRzLHByb3BlcnRpZXM6ZmluYWxQcm9wZXJ0aWVzfTp7YWNjb3VudDpmaW5hbFRvLHNvdWxCb3VuZDohIXNvdWxCb3VuZCxvd25lZEJ5Om93bmVkQnksbG9ja2VkVG9rZW5zOmZpbmFsTG9ja1Rva2Vucyxwcm9wZXJ0aWVzOmZpbmFsUHJvcGVydGllc307Y29uc3QgcmVzdWx0PWF3YWl0IGFwaS5kYi5pbnNlcnQoaW5zdGFuY2VUYWJsZU5hbWUsbmV3SW5zdGFuY2UpO3JldHVybiBuZnQuc3VwcGx5Kz0xLCJudWxsIj09PWZpbmFsVG8mJiJjb250cmFjdCIhPT1maW5hbFRvVHlwZXx8KG5mdC5jaXJjdWxhdGluZ1N1cHBseSs9MSksYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbmZ0KSxhcGkuZW1pdCgiaXNzdWUiLHtmcm9tOmZpbmFsRnJvbSxmcm9tVHlwZTpmaW5hbEZyb21UeXBlLHRvOmZpbmFsVG8sdG9UeXBlOmZpbmFsVG9UeXBlLHN5bWJvbDpzeW1ib2wsbG9ja2VkVG9rZW5zOmZpbmFsTG9ja1Rva2Vucyxsb2NrZWROZnRzOmZpbmFsTG9ja05mdHMsc291bEJvdW5kOiEhc291bEJvdW5kLHByb3BlcnRpZXM6ZmluYWxQcm9wZXJ0aWVzLGlkOnJlc3VsdC5faWR9KSwhMH19fX19cmV0dXJuITF9LGFjdGlvbnMuaXNzdWVNdWx0aXBsZT1hc3luYyBwYXlsb2FkPT57Y29uc3R7aW5zdGFuY2VzOmluc3RhbmNlcyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5LGNhbGxpbmdDb250cmFjdEluZm86Y2FsbGluZ0NvbnRyYWN0SW5mb309cGF5bG9hZDtpZihhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChpbnN0YW5jZXMmJiJvYmplY3QiPT10eXBlb2YgaW5zdGFuY2VzJiZBcnJheS5pc0FycmF5KGluc3RhbmNlcyksImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQoaW5zdGFuY2VzLmxlbmd0aDw9MTAsImNhbm5vdCBpc3N1ZSBtb3JlIHRoYW4gMTAgTkZUIGluc3RhbmNlcyBhdCBvbmNlIikpe2xldCBjb250YWluZXJDb3VudD0wO2lmKGluc3RhbmNlcy5mb3JFYWNoKGluc3RhbmNlPT57aW5zdGFuY2UmJmluc3RhbmNlLmxvY2tOZnRzJiYoY29udGFpbmVyQ291bnQrPTEpfSksYXBpLmFzc2VydChjb250YWluZXJDb3VudDw9MSwiY2Fubm90IGlzc3VlIG1vcmUgdGhhbiAxIGNvbnRhaW5lciBORlQgaW5zdGFuY2VzIGF0IG9uY2UiKSYmYXBpLmFzc2VydCgwPT09Y29udGFpbmVyQ291bnR8fGNvbnRhaW5lckNvdW50PT09aW5zdGFuY2VzLmxlbmd0aCwiY2Fubm90IGlzc3VlIGEgbWl4IG9mIGNvbnRhaW5lciBhbmQgbm9uLWNvbnRhaW5lciBORlQgaW5zdGFuY2VzIHNpbXVsdGFuZW91c2x5IikpZm9yKGxldCBpPTA7aTxpbnN0YW5jZXMubGVuZ3RoO2krPTEpaWYoaW5zdGFuY2VzW2ldKXtjb25zdHtzeW1ib2w6c3ltYm9sLGZyb21UeXBlOmZyb21UeXBlLHRvOnRvLHRvVHlwZTp0b1R5cGUsZmVlU3ltYm9sOmZlZVN5bWJvbCxsb2NrVG9rZW5zOmxvY2tUb2tlbnMsc291bEJvdW5kOnNvdWxCb3VuZCxsb2NrTmZ0czpsb2NrTmZ0cyxwcm9wZXJ0aWVzOnByb3BlcnRpZXN9PWluc3RhbmNlc1tpXTthd2FpdCBhY3Rpb25zLmlzc3VlKHtzeW1ib2w6c3ltYm9sLGZyb21UeXBlOmZyb21UeXBlLHRvOnRvLHRvVHlwZTp0b1R5cGUsZmVlU3ltYm9sOmZlZVN5bWJvbCxsb2NrVG9rZW5zOmxvY2tUb2tlbnMsc291bEJvdW5kOnNvdWxCb3VuZCxsb2NrTmZ0czpsb2NrTmZ0cyxwcm9wZXJ0aWVzOnByb3BlcnRpZXMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleSxjYWxsaW5nQ29udHJhY3RJbmZvOmNhbGxpbmdDb250cmFjdEluZm99KX19fTs="}}}