{"id":"ssc-testnet-hive","json":{"contractName":"contract","contractAction":"update","contractPayload":{"name":"nft","params":"","code":"Y29uc3QgQ09OVFJBQ1RfTkFNRT0ibmZ0IixVVElMSVRZX1RPS0VOX1NZTUJPTD0iQkVFIixNQVhfTlVNX0FVVEhPUklaRURfSVNTVUVSUz0xMCxNQVhfTlVNX0xPQ0tFRF9UT0tFTl9UWVBFUz0xMCxNQVhfU1lNQk9MX0xFTkdUSD0xMCxNQVhfREFUQV9QUk9QRVJUWV9MRU5HVEg9MTAwLE1BWF9OVU1fTkZUU19JU1NVQUJMRT0xMCxNQVhfTlVNX05GVFNfRURJVEFCTEU9NTAsTUFYX05VTV9ORlRTX09QRVJBQkxFPTUwLE1BWF9OVU1fQ09OVEFJTkVSX05GVFNfT1BFUkFCTEU9MSxSRVNFUlZFRF9TWU1CT0xTPXtDRUxMOiJiZWdnYXJzIixRVVNUOiJzaW1wbGVnYW1lIixURVNURVJBOiJhZ2dyb2VkIixTUVJMOiJzdHVmZmJ5c3BlbmNlciIsQ1JBRlQ6ImltbWFudWVsOTQiLE1VU0lDOiJhdG9tY29sbGVjdG9yIixDR1VMTDoiY2d1bGwiLE5GVDoiY2FkYXdnIixSQVJFOiJiZWdnYXJzIixMSUM6ImxpY3Rva2VuIixNRU1CRVI6Im1lbWJlcnRva2VuIixDT0ZGRUU6ImMwZmYzM2EiLEFSVDoiYnlvIixST0NLOiJiZWdnYXJzIixDUklUVEVSOiJjcnlwdG9tYW5jZXIiLENJVFk6ImdlcmJlciIsTU9OU1RFUlM6InNpbXBsZWdhbWUiLFNFVFM6Imxvb3RraXQuZ2FtZXMiLEFOSU1FOiJhbmltZXRva2VuIixQSE9UT0ZUOiJ3d3dpZWJlIixCRUVSOiJkZXRsZXYiLFNQSVI6InNwaW52ZXN0IixJRkc6Imxpb24yMDAiLEdVSUxEUzoic2ltcGxlZ2FtZSIsRkNBUkQ6Imxpb24yMDAiLFBYTDoicGl4ZWxuZnQiLENPVzoic3R1ZmZieXNwZW5jZXIiLExPT09UOiJzdHVmZmJ5c3BlbmNlciIsQVBJOiJzdGVlbWNpdHlhcGkiLFNQT1JUU01PTToic3BvcnRzdGVzdGVyIixTV1Q6InNhdHJlbiIsU1RBUjoiYXRvbWNvbGxlY3RvciJ9O2FjdGlvbnMuY3JlYXRlU1NDPWFzeW5jKCk9PntsZXQgZT1hd2FpdCBhcGkuZGIudGFibGVFeGlzdHMoIm5mdHMiKTtpZighMT09PWUpe2F3YWl0IGFwaS5kYi5jcmVhdGVUYWJsZSgibmZ0cyIsWyJzeW1ib2wiXSksYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCJwYXJhbXMiKSxhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoInBlbmRpbmdVbmRlbGVnYXRpb25zIixbInN5bWJvbCIsImNvbXBsZXRlVGltZXN0YW1wIl0pO2xldCB0PXt9O3QubmZ0Q3JlYXRpb25GZWU9IjEwMCIsdC5uZnRJc3N1YW5jZUZlZT17QkVFOiIwLjAwMSIsUEFMOiIwLjAwMSJ9LHQuZGF0YVByb3BlcnR5Q3JlYXRpb25GZWU9IjEwMCIsdC5lbmFibGVEZWxlZ2F0aW9uRmVlPSIxMDAwIixhd2FpdCBhcGkuZGIuaW5zZXJ0KCJwYXJhbXMiLHQpfX0sYWN0aW9ucy51cGRhdGVQYXJhbXM9YXN5bmMgZT0+e2lmKGFwaS5zZW5kZXIhPT1hcGkub3duZXIpcmV0dXJuO2xldHtuZnRDcmVhdGlvbkZlZTp0LG5mdElzc3VhbmNlRmVlOnMsZGF0YVByb3BlcnR5Q3JlYXRpb25GZWU6YSxlbmFibGVEZWxlZ2F0aW9uRmVlOm59PWUsaT1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSk7dCYmInN0cmluZyI9PXR5cGVvZiB0JiYhYXBpLkJpZ051bWJlcih0KS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKHQpLmd0ZSgwKSYmKGkubmZ0Q3JlYXRpb25GZWU9dCkscyYmIm9iamVjdCI9PXR5cGVvZiBzJiYoaS5uZnRJc3N1YW5jZUZlZT1zKSxhJiYic3RyaW5nIj09dHlwZW9mIGEmJiFhcGkuQmlnTnVtYmVyKGEpLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIoYSkuZ3RlKDApJiYoaS5kYXRhUHJvcGVydHlDcmVhdGlvbkZlZT1hKSxuJiYic3RyaW5nIj09dHlwZW9mIG4mJiFhcGkuQmlnTnVtYmVyKG4pLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIobikuZ3RlKDApJiYoaS5lbmFibGVEZWxlZ2F0aW9uRmVlPW4pLGF3YWl0IGFwaS5kYi51cGRhdGUoInBhcmFtcyIsaSl9O2NvbnN0IGlzVG9rZW5UcmFuc2ZlclZlcmlmaWVkPShlLHQscyxhLG4saSk9PnZvaWQgMD09PWUuZXJyb3JzJiYhIWUuZXZlbnRzJiZ2b2lkIDAhPT1lLmV2ZW50cy5maW5kKGU9PiJ0b2tlbnMiPT09ZS5jb250cmFjdCYmZS5ldmVudD09PWkmJmUuZGF0YS5mcm9tPT09dCYmZS5kYXRhLnRvPT09cyYmZS5kYXRhLnF1YW50aXR5PT09biYmZS5kYXRhLnN5bWJvbD09PWEpLGNhbGN1bGF0ZUJhbGFuY2U9KGUsdCxzLGEpPT5hP2FwaS5CaWdOdW1iZXIoZSkucGx1cyh0KS50b0ZpeGVkKHMpOmFwaS5CaWdOdW1iZXIoZSkubWludXModCkudG9GaXhlZChzKSxjb3VudERlY2ltYWxzPWU9PmFwaS5CaWdOdW1iZXIoZSkuZHAoKSxjb250YWluc0R1cGxpY2F0ZXM9ZT0+bmV3IFNldChlKS5zaXplIT09ZS5sZW5ndGgsaXNWYWxpZEhpdmVBY2NvdW50TGVuZ3RoPWU9PmUubGVuZ3RoPj0zJiZlLmxlbmd0aDw9MTYsaXNWYWxpZENvbnRyYWN0TGVuZ3RoPWU9PmUubGVuZ3RoPj0zJiZlLmxlbmd0aDw9NTAsaXNWYWxpZEFjY291bnRzQXJyYXk9ZT0+e2xldCB0PSEwO3JldHVybiBlLmZvckVhY2goZT0+eyJzdHJpbmciPT10eXBlb2YgZSYmaXNWYWxpZEhpdmVBY2NvdW50TGVuZ3RoKGUpfHwodD0hMSl9KSx0fSxpc1ZhbGlkQ29udHJhY3RzQXJyYXk9ZT0+e2xldCB0PSEwO3JldHVybiBlLmZvckVhY2goZT0+eyJzdHJpbmciPT10eXBlb2YgZSYmaXNWYWxpZENvbnRyYWN0TGVuZ3RoKGUpfHwodD0hMSl9KSx0fSxpc1ZhbGlkRGF0YVByb3BlcnRpZXM9KGUsdCxzLGEpPT57bGV0IG49T2JqZWN0LmtleXMoYSkubGVuZ3RoLGk9T2JqZWN0LmtleXMocy5wcm9wZXJ0aWVzKS5sZW5ndGg7aWYoIWFwaS5hc3NlcnQobjw9aSwiY2Fubm90IHNldCBtb3JlIGRhdGEgcHJvcGVydGllcyB0aGFuIE5GVCBoYXMiKSlyZXR1cm4hMTtmb3IobGV0W3Isb11vZiBPYmplY3QuZW50cmllcyhhKSl7bGV0IGw9ITE7aWYoYXBpLmFzc2VydChyJiYic3RyaW5nIj09dHlwZW9mIHImJmFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMocikmJnIubGVuZ3RoPjAmJnIubGVuZ3RoPD0yNSwiaW52YWxpZCBkYXRhIHByb3BlcnR5IG5hbWU6IGxldHRlcnMgJiBudW1iZXJzIG9ubHksIG1heCBsZW5ndGggb2YgMjUiKSYmYXBpLmFzc2VydChyIGluIHMucHJvcGVydGllcywiZGF0YSBwcm9wZXJ0eSBtdXN0IGV4aXN0Iikpe2xldCBkPXMucHJvcGVydGllc1tyXTthcGkuYXNzZXJ0KG51bGwhPW8mJih0eXBlb2Ygbz09PWQudHlwZXx8Im51bWJlciI9PT1kLnR5cGUmJiJzdHJpbmciPT10eXBlb2YgbyYmIWFwaS5CaWdOdW1iZXIobykuaXNOYU4oKSksYGRhdGEgcHJvcGVydHkgdHlwZSBtaXNtYXRjaDogZXhwZWN0ZWQgJHtkLnR5cGV9IGJ1dCBnb3QgJHt0eXBlb2Ygb30gZm9yIHByb3BlcnR5ICR7cn1gKSYmYXBpLmFzc2VydCgic3RyaW5nIiE9dHlwZW9mIG98fG8ubGVuZ3RoPD0xMDAsInN0cmluZyBwcm9wZXJ0eSBtYXggbGVuZ3RoIGlzIDEwMCBjaGFyYWN0ZXJzIikmJmFwaS5hc3NlcnQoImNvbnRyYWN0Ij09PXQmJmQuYXV0aG9yaXplZEVkaXRpbmdDb250cmFjdHMuaW5jbHVkZXMoZSl8fCJ1c2VyIj09PXQmJmQuYXV0aG9yaXplZEVkaXRpbmdBY2NvdW50cy5pbmNsdWRlcyhlKSwibm90IGFsbG93ZWQgdG8gc2V0IGRhdGEgcHJvcGVydGllcyIpJiYobD0hMCwibnVtYmVyIj09PWQudHlwZSYmInN0cmluZyI9PXR5cGVvZiBvJiYoYVtyXT1hcGkuQmlnTnVtYmVyKG8pLnRvTnVtYmVyKCkpKX1pZighbClyZXR1cm4hMX1yZXR1cm4hMH0saXNWYWxpZERhdGFQcm9wZXJ0aWVzQXJyYXk9KGUsdCxzLGEpPT57dHJ5e2ZvcihsZXQgbj0wO248YS5sZW5ndGg7bis9MSl7bGV0IGk9ITEse2lkOnIscHJvcGVydGllczpvfT1hW25dO2lmKGFwaS5hc3NlcnQociYmInN0cmluZyI9PXR5cGVvZiByJiYhYXBpLkJpZ051bWJlcihyKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKHIpLmd0KDApJiZvJiYib2JqZWN0Ij09dHlwZW9mIG8sImludmFsaWQgZGF0YSBwcm9wZXJ0aWVzIikmJmlzVmFsaWREYXRhUHJvcGVydGllcyhlLHQscyxvKSYmKGk9ITApLCFpKXJldHVybiExfX1jYXRjaChsKXtyZXR1cm4hMX1yZXR1cm4hMH0saXNWYWxpZE5mdElkQXJyYXk9ZT0+e3RyeXtsZXQgdD0wO2ZvcihsZXQgcz0wO3M8ZS5sZW5ndGg7cys9MSl7bGV0IGE9ITEse3N5bWJvbDpuLGlkczppfT1lW3NdO2lmKGFwaS5hc3NlcnQobiYmInN0cmluZyI9PXR5cGVvZiBuJiZhcGkudmFsaWRhdG9yLmlzQWxwaGEobikmJmFwaS52YWxpZGF0b3IuaXNVcHBlcmNhc2UobikmJm4ubGVuZ3RoPjAmJm4ubGVuZ3RoPD0xMCYmaSYmIm9iamVjdCI9PXR5cGVvZiBpJiZBcnJheS5pc0FycmF5KGkpLCJpbnZhbGlkIG5mdCBsaXN0IikmJih0Kz1pLmxlbmd0aCxhcGkuYXNzZXJ0KHQ8PTUwLCJjYW5ub3Qgb3BlcmF0ZSBvbiBtb3JlIHRoYW4gNTAgTkZUIGluc3RhbmNlcyBhdCBvbmNlIikpKXtmb3IobGV0IHI9MDtyPGkubGVuZ3RoO3IrPTEpe2xldCBvPWlbcl07aWYoIWFwaS5hc3NlcnQobyYmInN0cmluZyI9PXR5cGVvZiBvJiYhYXBpLkJpZ051bWJlcihvKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKG8pLmd0KDApLCJpbnZhbGlkIG5mdCBsaXN0IikpcmV0dXJuITF9YT0hMH1pZighYSlyZXR1cm4hMX19Y2F0Y2gobCl7cmV0dXJuITF9cmV0dXJuITB9LGlzVmFsaWRUb2tlbkJhc2tldD1hc3luYyhlLHQscyxhLG4pPT57dHJ5e2xldCBpPU9iamVjdC5rZXlzKGUpLmxlbmd0aDtpZihpPjEwKXJldHVybiExO2ZvcihsZXRbcixvXW9mIE9iamVjdC5lbnRyaWVzKGUpKXtsZXQgbD0hMTtpZigic3RyaW5nIj09dHlwZW9mIHImJmFwaS52YWxpZGF0b3IuaXNBbHBoYShyKSYmYXBpLnZhbGlkYXRvci5pc1VwcGVyY2FzZShyKSYmci5sZW5ndGg+MCYmci5sZW5ndGg8PTEwKXtsZXQgZD1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpyfSk7aWYoZCYmbyYmInN0cmluZyI9PXR5cGVvZiBvJiYhYXBpLkJpZ051bWJlcihvKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKG8pLmd0KDApJiZjb3VudERlY2ltYWxzKG8pPD1kLnByZWNpc2lvbil7bGV0IHU9cj09PWE/Y2FsY3VsYXRlQmFsYW5jZShvLG4sZC5wcmVjaXNpb24sITApOm8sYz1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsdCx7YWNjb3VudDpzLHN5bWJvbDpyfSk7YyYmYXBpLkJpZ051bWJlcihjLmJhbGFuY2UpLmd0ZSh1KSYmKGw9ITApfX1pZighbClyZXR1cm4hMX19Y2F0Y2goZil7cmV0dXJuITF9cmV0dXJuITB9LHRyYW5zZmVyQW5kVmVyaWZ5TmZ0cz1hc3luYyhlLHQscyxhLG4saSxyKT0+e2xldCBvPXtzdWNjZXNzOltdLGZhaWw6W119LGw9InVzZXIiPT09dD8idSI6ImMiLGQ9InVzZXIiPT09YT8idSI6ImMiO2F3YWl0IGFjdGlvbnMudHJhbnNmZXIoe2Zyb21UeXBlOnQsdG86cyx0b1R5cGU6YSxuZnRzOm4saXNTaWduZWRXaXRoQWN0aXZlS2V5OmksY2FsbGluZ0NvbnRyYWN0SW5mbzpyfSk7bGV0IHU9YXBpLmxvZ3MoKSxjPXt9LGY9e307aWYodS5ldmVudHMpZm9yKGxldCBwPTA7cDx1LmV2ZW50cy5sZW5ndGg7cCs9MSl7bGV0IGc9dS5ldmVudHNbcF07aWYoZy5jb250cmFjdCYmZy5ldmVudCYmZy5kYXRhJiYibmZ0Ij09PWcuY29udHJhY3QmJiJ0cmFuc2ZlciI9PT1nLmV2ZW50JiZnLmRhdGEuZnJvbT09PWUmJmcuZGF0YS5mcm9tVHlwZT09PWwmJmcuZGF0YS50bz09PXMmJmcuZGF0YS50b1R5cGU9PT1kKXtsZXQgeT1nLmRhdGEuc3ltYm9sKyItIitnLmRhdGEuaWQ7Y1t5XT0xfX1mb3IobGV0IG09MDttPG4ubGVuZ3RoO20rPTEpe2xldHtzeW1ib2w6JCxpZHM6aH09blttXSxiPVtdLHY9W107Zm9yKGxldCB3PTA7dzxoLmxlbmd0aDt3Kz0xKXtsZXQgTj0kKyItIitoW3ddO04gaW4gZnx8KE4gaW4gYz9iLnB1c2goaFt3XS50b1N0cmluZygpKTp2LnB1c2goaFt3XS50b1N0cmluZygpKSxmW05dPTEpfWIubGVuZ3RoPjAmJm8uc3VjY2Vzcy5wdXNoKHtzeW1ib2w6JCxpZHM6Yn0pLHYubGVuZ3RoPjAmJm8uZmFpbC5wdXNoKHtzeW1ib2w6JCxpZHM6dn0pfXJldHVybiBvfTthY3Rpb25zLnVwZGF0ZVVybD1hc3luYyBlPT57bGV0e3VybDp0LHN5bWJvbDpzfT1lO2lmKGFwaS5hc3NlcnQocyYmInN0cmluZyI9PXR5cGVvZiBzJiZ0JiYic3RyaW5nIj09dHlwZW9mIHQsImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQodC5sZW5ndGg8PTI1NSwiaW52YWxpZCB1cmw6IG1heCBsZW5ndGggb2YgMjU1Iikpe2xldCBhPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN9KTtpZihhJiZhcGkuYXNzZXJ0KGEuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpdHJ5e2xldCBuPUpTT04ucGFyc2UoYS5tZXRhZGF0YSk7YXBpLmFzc2VydChuJiZuLnVybCwiYW4gZXJyb3Igb2NjdXJlZCB3aGVuIHRyeWluZyB0byB1cGRhdGUgdGhlIHVybCIpJiYobi51cmw9dCxhLm1ldGFkYXRhPUpTT04uc3RyaW5naWZ5KG4pLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGEpKX1jYXRjaChpKXt9fX0sYWN0aW9ucy51cGRhdGVNZXRhZGF0YT1hc3luYyBlPT57bGV0e21ldGFkYXRhOnQsc3ltYm9sOnN9PWU7aWYoYXBpLmFzc2VydChzJiYic3RyaW5nIj09dHlwZW9mIHMmJnQmJiJvYmplY3QiPT10eXBlb2YgdCwiaW52YWxpZCBwYXJhbXMiKSl7bGV0IGE9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c30pO2lmKGEmJmFwaS5hc3NlcnQoYS5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSl0cnl7bGV0IG49SlNPTi5zdHJpbmdpZnkodCk7YXBpLmFzc2VydChuLmxlbmd0aDw9MWUzLCJpbnZhbGlkIG1ldGFkYXRhOiBtYXggbGVuZ3RoIG9mIDEwMDAiKSYmKGEubWV0YWRhdGE9bixhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixhKSl9Y2F0Y2goaSl7fX19LGFjdGlvbnMudXBkYXRlTmFtZT1hc3luYyBlPT57bGV0e25hbWU6dCxzeW1ib2w6c309ZTtpZihhcGkuYXNzZXJ0KHMmJiJzdHJpbmciPT10eXBlb2YgcyYmdCYmInN0cmluZyI9PXR5cGVvZiB0LCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QodCwiICIpKSYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PTUwLCJpbnZhbGlkIG5hbWU6IGxldHRlcnMsIG51bWJlcnMsIHdoaXRlc3BhY2VzIG9ubHksIG1heCBsZW5ndGggb2YgNTAiKSl7bGV0IGE9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c30pO2EmJmFwaS5hc3NlcnQoYS5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmKGEubmFtZT10LGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGEpKX19LGFjdGlvbnMudXBkYXRlT3JnTmFtZT1hc3luYyBlPT57bGV0e29yZ05hbWU6dCxzeW1ib2w6c309ZTtpZihhcGkuYXNzZXJ0KHMmJiJzdHJpbmciPT10eXBlb2YgcyYmdCYmInN0cmluZyI9PXR5cGVvZiB0LCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QodCwiICIpKSYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PTUwLCJpbnZhbGlkIG9yZyBuYW1lOiBsZXR0ZXJzLCBudW1iZXJzLCB3aGl0ZXNwYWNlcyBvbmx5LCBtYXggbGVuZ3RoIG9mIDUwIikpe2xldCBhPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN9KTthJiZhcGkuYXNzZXJ0KGEuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJihhLm9yZ05hbWU9dCxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixhKSl9fSxhY3Rpb25zLnVwZGF0ZVByb2R1Y3ROYW1lPWFzeW5jIGU9PntsZXR7cHJvZHVjdE5hbWU6dCxzeW1ib2w6c309ZTtpZihhcGkuYXNzZXJ0KHMmJiJzdHJpbmciPT10eXBlb2YgcyYmdCYmInN0cmluZyI9PXR5cGVvZiB0LCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QodCwiICIpKSYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PTUwLCJpbnZhbGlkIHByb2R1Y3QgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpKXtsZXQgYT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzfSk7YSYmYXBpLmFzc2VydChhLmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpJiYoYS5wcm9kdWN0TmFtZT10LGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGEpKX19LGFjdGlvbnMuYWRkQXV0aG9yaXplZElzc3VpbmdBY2NvdW50cz1hc3luYyBlPT57bGV0e2FjY291bnRzOnQsc3ltYm9sOnMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmF9PWU7aWYoYXBpLmFzc2VydCghMD09PWEsInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHMmJiJzdHJpbmciPT10eXBlb2YgcyYmdCYmIm9iamVjdCI9PXR5cGVvZiB0JiZBcnJheS5pc0FycmF5KHQpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KHQubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBhY2NvdW50cyIpKXtsZXQgbj1pc1ZhbGlkQWNjb3VudHNBcnJheSh0KTtpZihhcGkuYXNzZXJ0KG4sImludmFsaWQgYWNjb3VudCBsaXN0Iikpe2xldCBpPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN9KTtpZihpKXtsZXQgcj1bXTtpZih0LmZvckVhY2goZT0+e2xldCB0PWUudHJpbSgpLnRvTG93ZXJDYXNlKCkscz0hMTtmb3IobGV0IGE9MDthPGkuYXV0aG9yaXplZElzc3VpbmdBY2NvdW50cy5sZW5ndGg7YSs9MSlpZih0PT09aS5hdXRob3JpemVkSXNzdWluZ0FjY291bnRzW2FdKXtzPSEwO2JyZWFrfXN8fHIucHVzaCh0KX0pLGFwaS5hc3NlcnQoaS5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmYXBpLmFzc2VydCghY29udGFpbnNEdXBsaWNhdGVzKHIpLCJjYW5ub3QgYWRkIHRoZSBzYW1lIGFjY291bnQgdHdpY2UiKSYmYXBpLmFzc2VydChpLmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMubGVuZ3RoK3IubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBhY2NvdW50cyIpKXtsZXQgbz1pLmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMuY29uY2F0KHIpO2kuYXV0aG9yaXplZElzc3VpbmdBY2NvdW50cz1vLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGkpfX19fX0sYWN0aW9ucy5hZGRBdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1hc3luYyBlPT57bGV0e2NvbnRyYWN0czp0LHN5bWJvbDpzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTphfT1lO2lmKGFwaS5hc3NlcnQoITA9PT1hLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzJiYic3RyaW5nIj09dHlwZW9mIHMmJnQmJiJvYmplY3QiPT10eXBlb2YgdCYmQXJyYXkuaXNBcnJheSh0KSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydCh0Lmxlbmd0aDw9MTAsImNhbm5vdCBoYXZlIG1vcmUgdGhhbiAxMCBhdXRob3JpemVkIGlzc3VpbmcgY29udHJhY3RzIikpe2xldCBuPWlzVmFsaWRDb250cmFjdHNBcnJheSh0KTtpZihhcGkuYXNzZXJ0KG4sImludmFsaWQgY29udHJhY3QgbGlzdCIpKXtsZXQgaT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzfSk7aWYoaSl7bGV0IHI9W107aWYodC5mb3JFYWNoKGU9PntsZXQgdD1lLnRyaW0oKSxzPSExO2ZvcihsZXQgYT0wO2E8aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cy5sZW5ndGg7YSs9MSlpZih0PT09aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0c1thXSl7cz0hMDticmVha31zfHxyLnB1c2godCl9KSxhcGkuYXNzZXJ0KGkuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJmFwaS5hc3NlcnQoIWNvbnRhaW5zRHVwbGljYXRlcyhyKSwiY2Fubm90IGFkZCB0aGUgc2FtZSBjb250cmFjdCB0d2ljZSIpJiZhcGkuYXNzZXJ0KGkuYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMubGVuZ3RoK3IubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBjb250cmFjdHMiKSl7bGV0IG89aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cy5jb25jYXQocik7aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1vLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGkpfX19fX0sYWN0aW9ucy5yZW1vdmVBdXRob3JpemVkSXNzdWluZ0FjY291bnRzPWFzeW5jIGU9PntsZXR7YWNjb3VudHM6dCxzeW1ib2w6cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6YX09ZTtpZihhcGkuYXNzZXJ0KCEwPT09YSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQocyYmInN0cmluZyI9PXR5cGVvZiBzJiZ0JiYib2JqZWN0Ij09dHlwZW9mIHQmJkFycmF5LmlzQXJyYXkodCksImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQodC5sZW5ndGg8PTEwLCJjYW5ub3QgcmVtb3ZlIG1vcmUgdGhhbiAxMCBhdXRob3JpemVkIGlzc3VpbmcgYWNjb3VudHMiKSl7bGV0IG49aXNWYWxpZEFjY291bnRzQXJyYXkodCk7aWYoYXBpLmFzc2VydChuLCJpbnZhbGlkIGFjY291bnQgbGlzdCIpKXtsZXQgaT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzfSk7aWYoaSYmYXBpLmFzc2VydChpLmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpKXtsZXQgcj1pLmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMuZmlsdGVyKGU9Pntmb3IobGV0IHM9MDtzPHQubGVuZ3RoO3MrPTEpe2xldCBhPXRbc10udHJpbSgpLnRvTG93ZXJDYXNlKCk7aWYoZT09PWEpcmV0dXJuITF9cmV0dXJuITB9KTtpLmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHM9cixhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixpKX19fX0sYWN0aW9ucy5yZW1vdmVBdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1hc3luYyBlPT57bGV0e2NvbnRyYWN0czp0LHN5bWJvbDpzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTphfT1lO2lmKGFwaS5hc3NlcnQoITA9PT1hLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzJiYic3RyaW5nIj09dHlwZW9mIHMmJnQmJiJvYmplY3QiPT10eXBlb2YgdCYmQXJyYXkuaXNBcnJheSh0KSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydCh0Lmxlbmd0aDw9MTAsImNhbm5vdCByZW1vdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBjb250cmFjdHMiKSl7bGV0IG49aXNWYWxpZENvbnRyYWN0c0FycmF5KHQpO2lmKGFwaS5hc3NlcnQobiwiaW52YWxpZCBjb250cmFjdCBsaXN0Iikpe2xldCBpPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN9KTtpZihpJiZhcGkuYXNzZXJ0KGkuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2xldCByPWkuYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMuZmlsdGVyKGU9Pntmb3IobGV0IHM9MDtzPHQubGVuZ3RoO3MrPTEpe2xldCBhPXRbc10udHJpbSgpO2lmKGU9PT1hKXJldHVybiExfXJldHVybiEwfSk7aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1yLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGkpfX19fSxhY3Rpb25zLnRyYW5zZmVyT3duZXJzaGlwPWFzeW5jIGU9PntsZXR7c3ltYm9sOnQsdG86cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6YX09ZTtpZihhcGkuYXNzZXJ0KCEwPT09YSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQodCYmInN0cmluZyI9PXR5cGVvZiB0JiZzJiYic3RyaW5nIj09dHlwZW9mIHMsImludmFsaWQgcGFyYW1zIikpe2xldCBuPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnR9KTtpZihuJiZhcGkuYXNzZXJ0KG4uaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2xldCBpPXMudHJpbSgpLnRvTG93ZXJDYXNlKCk7YXBpLmFzc2VydChpc1ZhbGlkSGl2ZUFjY291bnRMZW5ndGgoaSksImludmFsaWQgdG8iKSYmKG4uaXNzdWVyPWksYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbikpfX19LGFjdGlvbnMuZW5hYmxlRGVsZWdhdGlvbj1hc3luYyBlPT57bGV0e3N5bWJvbDp0LHVuZGVsZWdhdGlvbkNvb2xkb3duOnMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmF9PWUsbj1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSkse2VuYWJsZURlbGVnYXRpb25GZWU6aX09bixyPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOiJCRUUifSksbz0hIWFwaS5CaWdOdW1iZXIoaSkubHRlKDApfHxyJiZhcGkuQmlnTnVtYmVyKHIuYmFsYW5jZSkuZ3RlKGkpO2lmKGFwaS5hc3NlcnQobywieW91IG11c3QgaGF2ZSBlbm91Z2ggdG9rZW5zIHRvIGNvdmVyIGZlZXMiKSYmYXBpLmFzc2VydCghMD09PWEsInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHQmJiJzdHJpbmciPT10eXBlb2YgdCwiaW52YWxpZCBzeW1ib2wiKSYmYXBpLmFzc2VydChzJiZOdW1iZXIuaXNJbnRlZ2VyKHMpJiZzPjAmJnM8PTE4MjUwLCJ1bmRlbGVnYXRpb25Db29sZG93biBtdXN0IGJlIGFuIGludGVnZXIgYmV0d2VlbiAxIGFuZCAxODI1MCIpKXtsZXQgbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDp0fSk7aWYoYXBpLmFzc2VydChudWxsIT09bCwic3ltYm9sIGRvZXMgbm90IGV4aXN0IikmJmFwaS5hc3NlcnQobC5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1sLmRlbGVnYXRpb25FbmFibGVkfHwhMT09PWwuZGVsZWdhdGlvbkVuYWJsZWQsImRlbGVnYXRpb24gYWxyZWFkeSBlbmFibGVkIikpe2lmKGFwaS5CaWdOdW1iZXIoaSkuZ3QoMCkpe2xldCBkPWF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOiJCRUUiLHF1YW50aXR5OmksaXNTaWduZWRXaXRoQWN0aXZlS2V5OmF9KTtpZighaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQoZCxhcGkuc2VuZGVyLCJudWxsIiwiQkVFIixpLCJ0cmFuc2ZlciIpKXJldHVybiExfXJldHVybiBsLmRlbGVnYXRpb25FbmFibGVkPSEwLGwudW5kZWxlZ2F0aW9uQ29vbGRvd249cyxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixsKSwhMH19cmV0dXJuITF9LGFjdGlvbnMudXBkYXRlUHJvcGVydHlEZWZpbml0aW9uPWFzeW5jIGU9PntsZXR7c3ltYm9sOnQsbmFtZTpzLG5ld05hbWU6YSx0eXBlOm4saXNSZWFkT25seTppLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTpyfT1lO2lmKGFwaS5hc3NlcnQoITA9PT1yLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCh0JiYic3RyaW5nIj09dHlwZW9mIHQmJnMmJiJzdHJpbmciPT10eXBlb2YgcywiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChhcGkudmFsaWRhdG9yLmlzQWxwaGFudW1lcmljKHMpJiZzLmxlbmd0aD4wJiZzLmxlbmd0aDw9MjUsImludmFsaWQgbmFtZTogbGV0dGVycyAmIG51bWJlcnMgb25seSwgbWF4IGxlbmd0aCBvZiAyNSIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWF8fCJzdHJpbmciPT10eXBlb2YgYSYmYXBpLnZhbGlkYXRvci5pc0FscGhhbnVtZXJpYyhhKSYmYS5sZW5ndGg+MCYmYS5sZW5ndGg8PTI1LCJpbnZhbGlkIG5ldyBuYW1lOiBsZXR0ZXJzICYgbnVtYmVycyBvbmx5LCBtYXggbGVuZ3RoIG9mIDI1IikmJmFwaS5hc3NlcnQodm9pZCAwPT09bnx8InN0cmluZyI9PXR5cGVvZiBuJiYoIm51bWJlciI9PT1ufHwic3RyaW5nIj09PW58fCJib29sZWFuIj09PW4pLCJpbnZhbGlkIHR5cGU6IG11c3QgYmUgbnVtYmVyLCBzdHJpbmcsIG9yIGJvb2xlYW4iKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1pfHwiYm9vbGVhbiI9PXR5cGVvZiBpLCJpbnZhbGlkIGlzUmVhZE9ubHk6IG11c3QgYmUgdHJ1ZSBvciBmYWxzZSIpKXtsZXQgbz1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDp0fSk7aWYobyYmYXBpLmFzc2VydCgwPT09by5zdXBwbHksImNhbm5vdCBjaGFuZ2UgZGF0YSBwcm9wZXJ0eSBkZWZpbml0aW9uOyB0b2tlbnMgYWxyZWFkeSBpc3N1ZWQiKSYmYXBpLmFzc2VydChzIGluIG8ucHJvcGVydGllcywicHJvcGVydHkgbXVzdCBleGlzdCIpJiZhcGkuYXNzZXJ0KG8uaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2lmKHZvaWQgMCE9PWEmJih2b2lkIDAhPT1vLmdyb3VwQnkmJm8uZ3JvdXBCeS5sZW5ndGg+MCYmIWFwaS5hc3NlcnQoIW8uZ3JvdXBCeS5pbmNsdWRlcyhzKSwiY2Fubm90IGNoYW5nZSBkYXRhIHByb3BlcnR5IG5hbWU7IHByb3BlcnR5IGlzIHBhcnQgb2YgZ3JvdXBCeSIpfHwhYXBpLmFzc2VydChhIT09cywibmV3IG5hbWUgbXVzdCBiZSBkaWZmZXJlbnQgZnJvbSBvbGQgbmFtZSIpfHwhYXBpLmFzc2VydCghKGEgaW4gby5wcm9wZXJ0aWVzKSwidGhlcmUgaXMgYWxyZWFkeSBhIGRhdGEgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4gbmV3IG5hbWUiKSkpcmV0dXJuITE7bGV0IGw9ITEsZD1vLnByb3BlcnRpZXNbc10udHlwZSx1PW8ucHJvcGVydGllc1tzXS5pc1JlYWRPbmx5O3JldHVybiB2b2lkIDAhPT1uJiZuIT09ZCYmKG8ucHJvcGVydGllc1tzXS50eXBlPW4sbD0hMCksdm9pZCAwIT09aSYmaSE9PXUmJihvLnByb3BlcnRpZXNbc10uaXNSZWFkT25seT1pLGw9ITApLHZvaWQgMCE9PWEmJmEhPT1zJiYoby5wcm9wZXJ0aWVzW2FdPW8ucHJvcGVydGllc1tzXSxkZWxldGUgby5wcm9wZXJ0aWVzW3NdLGw9ITApLGwmJihhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixvKSxhcGkuZW1pdCgidXBkYXRlUHJvcGVydHlEZWZpbml0aW9uIix7c3ltYm9sOnQsb3JpZ2luYWxOYW1lOnMsb3JpZ2luYWxUeXBlOmQsb3JpZ2luYWxJc1JlYWRPbmx5OnUsbmV3TmFtZTphLG5ld1R5cGU6bixuZXdJc1JlYWRPbmx5Oml9KSksITB9fXJldHVybiExfSxhY3Rpb25zLmFkZFByb3BlcnR5PWFzeW5jIGU9PntsZXR7c3ltYm9sOnQsbmFtZTpzLHR5cGU6YSxpc1JlYWRPbmx5Om4sYXV0aG9yaXplZEVkaXRpbmdBY2NvdW50czppLGF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzOnIsaXNTaWduZWRXaXRoQWN0aXZlS2V5Om99PWUsbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSkse2RhdGFQcm9wZXJ0eUNyZWF0aW9uRmVlOmR9PWw7aWYoYXBpLmFzc2VydCghMD09PW8sInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHQmJiJzdHJpbmciPT10eXBlb2YgdCYmcyYmInN0cmluZyI9PXR5cGVvZiBzJiYodm9pZCAwPT09bnx8ImJvb2xlYW4iPT10eXBlb2YgbikmJih2b2lkIDA9PT1pfHxpJiYib2JqZWN0Ij09dHlwZW9mIGkmJkFycmF5LmlzQXJyYXkoaSkpJiYodm9pZCAwPT09cnx8ciYmIm9iamVjdCI9PXR5cGVvZiByJiZBcnJheS5pc0FycmF5KHIpKSYmYSYmInN0cmluZyI9PXR5cGVvZiBhLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMocykmJnMubGVuZ3RoPjAmJnMubGVuZ3RoPD0yNSwiaW52YWxpZCBuYW1lOiBsZXR0ZXJzICYgbnVtYmVycyBvbmx5LCBtYXggbGVuZ3RoIG9mIDI1IikmJmFwaS5hc3NlcnQoIm51bWJlciI9PT1hfHwic3RyaW5nIj09PWF8fCJib29sZWFuIj09PWEsImludmFsaWQgdHlwZTogbXVzdCBiZSBudW1iZXIsIHN0cmluZywgb3IgYm9vbGVhbiIpKXtsZXQgdT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDp0fSk7aWYodSYmYXBpLmFzc2VydCghKHMgaW4gdS5wcm9wZXJ0aWVzKSwiY2Fubm90IGFkZCB0aGUgc2FtZSBwcm9wZXJ0eSB0d2ljZSIpJiZhcGkuYXNzZXJ0KHUuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2xldCBjPU9iamVjdC5rZXlzKHUucHJvcGVydGllcykubGVuZ3RoO2lmKGM+PTMpe2xldCBmPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOiJCRUUifSkscD0hIWFwaS5CaWdOdW1iZXIoZCkubHRlKDApfHxmJiZhcGkuQmlnTnVtYmVyKGYuYmFsYW5jZSkuZ3RlKGQpO2lmKCFhcGkuYXNzZXJ0KHAsInlvdSBtdXN0IGhhdmUgZW5vdWdoIHRva2VucyB0byBjb3ZlciB0aGUgY3JlYXRpb24gZmVlcyIpKXJldHVybiExO2lmKGFwaS5CaWdOdW1iZXIoZCkuZ3QoMCkpe2xldCBnPWF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOiJCRUUiLHF1YW50aXR5OmQsaXNTaWduZWRXaXRoQWN0aXZlS2V5Om99KTtpZighaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQoZyxhcGkuc2VuZGVyLCJudWxsIiwiQkVFIixkLCJ0cmFuc2ZlciIpKXJldHVybiExfX1sZXQgeT12b2lkIDAhPT1uJiZuLG09dm9pZCAwPT09aT9bYXBpLnNlbmRlcl06W10sJD17dHlwZTphLGlzUmVhZE9ubHk6eSxhdXRob3JpemVkRWRpdGluZ0FjY291bnRzOm0sYXV0aG9yaXplZEVkaXRpbmdDb250cmFjdHM6W119O3JldHVybiB1LnByb3BlcnRpZXNbc109JCxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIix1KSwoaXx8cikmJmF3YWl0IGFjdGlvbnMuc2V0UHJvcGVydHlQZXJtaXNzaW9ucyh7c3ltYm9sOnQsbmFtZTpzLGFjY291bnRzOmksY29udHJhY3RzOnIsaXNTaWduZWRXaXRoQWN0aXZlS2V5Om99KSwhMH19cmV0dXJuITF9LGFjdGlvbnMuc2V0UHJvcGVydHlQZXJtaXNzaW9ucz1hc3luYyBlPT57bGV0e3N5bWJvbDp0LG5hbWU6cyxhY2NvdW50czphLGNvbnRyYWN0czpuLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppfT1lO2lmKGFwaS5hc3NlcnQoITA9PT1pLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCh0JiYic3RyaW5nIj09dHlwZW9mIHQmJnMmJiJzdHJpbmciPT10eXBlb2YgcyYmKHZvaWQgMD09PWF8fGEmJiJvYmplY3QiPT10eXBlb2YgYSYmQXJyYXkuaXNBcnJheShhKSkmJih2b2lkIDA9PT1ufHxuJiYib2JqZWN0Ij09dHlwZW9mIG4mJkFycmF5LmlzQXJyYXkobikpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMocykmJnMubGVuZ3RoPjAmJnMubGVuZ3RoPD0yNSwiaW52YWxpZCBuYW1lOiBsZXR0ZXJzICYgbnVtYmVycyBvbmx5LCBtYXggbGVuZ3RoIG9mIDI1IikmJmFwaS5hc3NlcnQodm9pZCAwPT09YXx8YS5sZW5ndGg8PTEwLCJjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gMTAgYXV0aG9yaXplZCBhY2NvdW50cyIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PW58fG4ubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgY29udHJhY3RzIikmJmFwaS5hc3NlcnQodm9pZCAwPT09YXx8aXNWYWxpZEFjY291bnRzQXJyYXkoYSksImludmFsaWQgYWNjb3VudCBsaXN0IikmJmFwaS5hc3NlcnQodm9pZCAwPT09bnx8aXNWYWxpZENvbnRyYWN0c0FycmF5KG4pLCJpbnZhbGlkIGNvbnRyYWN0IGxpc3QiKSl7bGV0IHI9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6dH0pO2lmKHImJmFwaS5hc3NlcnQocyBpbiByLnByb3BlcnRpZXMsInByb3BlcnR5IG11c3QgZXhpc3QiKSYmYXBpLmFzc2VydChyLmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpKXtsZXQgbz1bXSxsPVtdO2lmKGEmJihvPWEubWFwKGU9PmUudHJpbSgpLnRvTG93ZXJDYXNlKCkpKSxuJiYobD1uLm1hcChlPT5lLnRyaW0oKSkpLGFwaS5hc3NlcnQodm9pZCAwPT09YXx8IWNvbnRhaW5zRHVwbGljYXRlcyhvKSwiY2Fubm90IGFkZCB0aGUgc2FtZSBhY2NvdW50IHR3aWNlIikmJmFwaS5hc3NlcnQodm9pZCAwPT09bnx8IWNvbnRhaW5zRHVwbGljYXRlcyhsKSwiY2Fubm90IGFkZCB0aGUgc2FtZSBjb250cmFjdCB0d2ljZSIpKXtsZXQgZD0hMTthJiYoci5wcm9wZXJ0aWVzW3NdLmF1dGhvcml6ZWRFZGl0aW5nQWNjb3VudHM9byxkPSEwKSxuJiYoci5wcm9wZXJ0aWVzW3NdLmF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzPWwsZD0hMCksZCYmYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIscil9fX19LGFjdGlvbnMuc2V0R3JvdXBCeT1hc3luYyBlPT57bGV0e3N5bWJvbDp0LHByb3BlcnRpZXM6cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6YX09ZTtpZihhcGkuYXNzZXJ0KCEwPT09YSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQodCYmInN0cmluZyI9PXR5cGVvZiB0JiZzJiYib2JqZWN0Ij09dHlwZW9mIHMmJkFycmF5LmlzQXJyYXkocyksImludmFsaWQgcGFyYW1zIikpe2xldCBuPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnR9KTtpZihuKXtsZXQgaT1PYmplY3Qua2V5cyhuLnByb3BlcnRpZXMpLmxlbmd0aDtpZihhcGkuYXNzZXJ0KG4uaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJmFwaS5hc3NlcnQodm9pZCAwPT09bi5ncm91cEJ5fHwwPT09bi5ncm91cEJ5Lmxlbmd0aCwibGlzdCBpcyBhbHJlYWR5IHNldCIpJiZhcGkuYXNzZXJ0KHMubGVuZ3RoPD1pLCJjYW5ub3Qgc2V0IG1vcmUgZGF0YSBwcm9wZXJ0aWVzIHRoYW4gTkZUIGhhcyIpJiZhcGkuYXNzZXJ0KCFjb250YWluc0R1cGxpY2F0ZXMocyksImxpc3QgY2Fubm90IGNvbnRhaW4gZHVwbGljYXRlcyIpKXtmb3IobGV0IHI9MDtyPHMubGVuZ3RoO3IrPTEpe2xldCBvPXNbcl07aWYoIWFwaS5hc3NlcnQobyYmInN0cmluZyI9PXR5cGVvZiBvJiZvIGluIG4ucHJvcGVydGllcywiZGF0YSBwcm9wZXJ0eSBtdXN0IGV4aXN0IikpcmV0dXJuITF9cmV0dXJuIG4uZ3JvdXBCeT1zLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLG4pLCEwfX19cmV0dXJuITF9LGFjdGlvbnMuc2V0UHJvcGVydGllcz1hc3luYyBlPT57bGV0e3N5bWJvbDp0LGZyb21UeXBlOnMsbmZ0czphLGNhbGxpbmdDb250cmFjdEluZm86bn09ZSxpPVsidXNlciIsImNvbnRyYWN0Il0scj12b2lkIDA9PT1zPyJ1c2VyIjpzO2lmKGFwaS5hc3NlcnQoYSYmIm9iamVjdCI9PXR5cGVvZiBhJiZBcnJheS5pc0FycmF5KGEpJiZyJiYic3RyaW5nIj09dHlwZW9mIHImJmkuaW5jbHVkZXMocikmJnQmJiJzdHJpbmciPT10eXBlb2YgdCYmKG58fHZvaWQgMD09PW4mJiJ1c2VyIj09PXIpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGEubGVuZ3RoPD01MCwiY2Fubm90IHNldCBwcm9wZXJ0aWVzIG9uIG1vcmUgdGhhbiA1MCBORlQgaW5zdGFuY2VzIGF0IG9uY2UiKSl7bGV0IG89InVzZXIiPT09cj9hcGkuc2VuZGVyOm4ubmFtZSxsPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnR9KTtpZihhcGkuYXNzZXJ0KG51bGwhPT1sLCJzeW1ib2wgZG9lcyBub3QgZXhpc3QiKSl7aWYoIWlzVmFsaWREYXRhUHJvcGVydGllc0FycmF5KG8scixsLGEpKXJldHVybiExO2xldCBkPXQrImluc3RhbmNlcyI7Zm9yKGxldCB1PTA7dTxhLmxlbmd0aDt1Kz0xKXtsZXR7aWQ6Yyxwcm9wZXJ0aWVzOmZ9PWFbdV07aWYoMD09PU9iamVjdC5rZXlzKGYpLmxlbmd0aCljb250aW51ZTtsZXQgcD1hd2FpdCBhcGkuZGIuZmluZE9uZShkLHtfaWQ6YXBpLkJpZ051bWJlcihjKS50b051bWJlcigpfSk7aWYoYXBpLmFzc2VydChudWxsIT09cCwibmZ0IGluc3RhbmNlIGRvZXMgbm90IGV4aXN0Iikpe2xldCBnPSExO2ZvcihsZXRbeSxtXW9mIE9iamVjdC5lbnRyaWVzKGYpKXtsZXQgJD1sLnByb3BlcnRpZXNbeV0saD1udWxsOyQuaXNSZWFkT25seT9hcGkuYXNzZXJ0KCEoeSBpbiBwLnByb3BlcnRpZXMpLCJjYW5ub3QgZWRpdCByZWFkLW9ubHkgcHJvcGVydGllcyIpJiYocC5wcm9wZXJ0aWVzW3ldPW0sZz0hMCk6KGg9cC5wcm9wZXJ0aWVzW3ldLHAucHJvcGVydGllc1t5XT1tLGc9ITApLGcmJmghPT1tJiZhd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoIm1pbmluZyIsImhhbmRsZU5mdFNldFByb3BlcnR5Iix7c3ltYm9sOnQsbmZ0OnAscHJvcGVydHlOYW1lOnksb2xkVmFsdWU6aH0pfWcmJmF3YWl0IGFwaS5kYi51cGRhdGUoZCxwKX19cmV0dXJuITB9fXJldHVybiExfSxhY3Rpb25zLmJ1cm49YXN5bmMgZT0+e2xldHtmcm9tVHlwZTp0LG5mdHM6cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6YSxjYWxsaW5nQ29udHJhY3RJbmZvOm59PWUsaT1bInVzZXIiLCJjb250cmFjdCJdLHI9dm9pZCAwPT09dD8idXNlciI6dDtpZihhcGkuYXNzZXJ0KCEwPT09YSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQociYmInN0cmluZyI9PXR5cGVvZiByJiZpLmluY2x1ZGVzKHIpJiYobnx8dm9pZCAwPT09biYmInVzZXIiPT09cikmJnMmJiJvYmplY3QiPT10eXBlb2YgcyYmQXJyYXkuaXNBcnJheShzKSwiaW52YWxpZCBwYXJhbXMiKSYmaXNWYWxpZE5mdElkQXJyYXkocykpe2xldCBvPSJ1c2VyIj09PXI/YXBpLnNlbmRlcjpuLm5hbWUsbD0wLGQ9MCx1PSExO2ZvcihsZXQgYz0wO2M8cy5sZW5ndGg7Yys9MSl7bGV0e3N5bWJvbDpmLGlkczpwfT1zW2NdLGc9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6Zn0pO2lmKGcpe2xldCB5PWYrImluc3RhbmNlcyI7Zm9yKGxldCBtPTA7bTxwLmxlbmd0aDttKz0xKXtsZXQgJD1wW21dLGg9YXdhaXQgYXBpLmRiLmZpbmRPbmUoeSx7X2lkOmFwaS5CaWdOdW1iZXIoJCkudG9OdW1iZXIoKX0pO2lmKGgpe2xldCBiPSEwO2lmKGgubG9ja2VkTmZ0cyYmaC5sb2NrZWROZnRzLmxlbmd0aD4wPygwPT09ZCYmKHU9ITApLCgobCs9MSk+MXx8IXUpJiYoYj0hMSkpOnUmJihiPSExKSxkKz0xLGguYWNjb3VudD09PW8mJigidSI9PT1oLm93bmVkQnkmJiJ1c2VyIj09PXJ8fCJjIj09PWgub3duZWRCeSYmImNvbnRyYWN0Ij09PXIpJiZ2b2lkIDA9PT1oLmRlbGVnYXRlZFRvJiZiKXtsZXQgdj17fSx3PSEwO2ZvcihsZXRbTixfXW9mIE9iamVjdC5lbnRyaWVzKGgubG9ja2VkVG9rZW5zKSl7bGV0IEE9YXdhaXQgYXBpLnRyYW5zZmVyVG9rZW5zKG8sTixfLHIpO2lzVG9rZW5UcmFuc2ZlclZlcmlmaWVkKEEsIm5mdCIsbyxOLF8sInRyYW5zZmVyRnJvbUNvbnRyYWN0Iil8fCh2W05dPV8sdz0hMSl9YXBpLmFzc2VydCh3LGB1bmFibGUgdG8gcmVsZWFzZSBsb2NrZWQgdG9rZW5zIGluOiAke2Z9LCBpZCAkeyR9YCk7bGV0IFQ9aC5sb2NrZWROZnRzJiZoLmxvY2tlZE5mdHMubGVuZ3RoPjA/aC5sb2NrZWROZnRzOltdO2lmKHcmJmgubG9ja2VkTmZ0cyYmaC5sb2NrZWROZnRzLmxlbmd0aD4wKXtsZXQgaz1hd2FpdCB0cmFuc2ZlckFuZFZlcmlmeU5mdHMoIm5mdCIsImNvbnRyYWN0IixvLHIsaC5sb2NrZWROZnRzLGEse25hbWU6Im5mdCJ9KTtoLmxvY2tlZE5mdHM9ay5mYWlsLGgubG9ja2VkTmZ0cy5sZW5ndGg+MCYmKHc9ITEpLGFwaS5hc3NlcnQodyxgdW5hYmxlIHRvIHJlbGVhc2UgbG9ja2VkIE5GVCBpbnN0YW5jZXMgaW46ICR7Zn0sIGlkICR7JH1gKX1sZXQgQj1oLm93bmVkQnksRT1oLmxvY2tlZFRva2VucztoLmxvY2tlZFRva2Vucz12LHcmJihoLnByZXZpb3VzQWNjb3VudD1oLmFjY291bnQsaC5wcmV2aW91c093bmVkQnk9aC5vd25lZEJ5LGguYWNjb3VudD0ibnVsbCIsaC5vd25lZEJ5PSJ1IixnLmNpcmN1bGF0aW5nU3VwcGx5LT0xKSxhd2FpdCBhcGkuZGIudXBkYXRlKHksaCksdyYmYXBpLmVtaXQoImJ1cm4iLHthY2NvdW50Om8sb3duZWRCeTpCLHVubG9ja2VkVG9rZW5zOkUsdW5sb2NrZWROZnRzOlQsc3ltYm9sOmYsaWQ6JH0pfX19YXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsZyl9fX19LGFjdGlvbnMudHJhbnNmZXI9YXN5bmMgZT0+e2xldHtmcm9tVHlwZTp0LHRvOnMsdG9UeXBlOmEsbmZ0czpuLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppLGNhbGxpbmdDb250cmFjdEluZm86cn09ZSxvPVsidXNlciIsImNvbnRyYWN0Il0sbD12b2lkIDA9PT1hPyJ1c2VyIjphLGQ9dm9pZCAwPT09dD8idXNlciI6dDtpZihhcGkuYXNzZXJ0KCEwPT09aSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoZCYmInN0cmluZyI9PXR5cGVvZiBkJiZvLmluY2x1ZGVzKGQpJiZzJiYic3RyaW5nIj09dHlwZW9mIHMmJmwmJiJzdHJpbmciPT10eXBlb2YgbCYmby5pbmNsdWRlcyhsKSYmKHJ8fHZvaWQgMD09PXImJiJ1c2VyIj09PWQpJiZuJiYib2JqZWN0Ij09dHlwZW9mIG4mJkFycmF5LmlzQXJyYXkobiksImludmFsaWQgcGFyYW1zIikmJmlzVmFsaWROZnRJZEFycmF5KG4pKXtsZXQgdT0idXNlciI9PT1sP3MudHJpbSgpLnRvTG93ZXJDYXNlKCk6cy50cmltKCksYz0idXNlciI9PT1sP2lzVmFsaWRIaXZlQWNjb3VudExlbmd0aCh1KTppc1ZhbGlkQ29udHJhY3RMZW5ndGgodSksZj0idXNlciI9PT1kP2FwaS5zZW5kZXI6ci5uYW1lO2lmKGFwaS5hc3NlcnQoYywiaW52YWxpZCB0byIpJiZhcGkuYXNzZXJ0KCEobD09PWQmJnU9PT1mKSwiY2Fubm90IHRyYW5zZmVyIHRvIHNlbGYiKSYmYXBpLmFzc2VydCghKCJ1c2VyIj09PWwmJiJudWxsIj09PXUpLCJjYW5ub3QgdHJhbnNmZXIgdG8gbnVsbDsgdXNlIGJ1cm4gYWN0aW9uIGluc3RlYWQiKSlmb3IobGV0IHA9MDtwPG4ubGVuZ3RoO3ArPTEpe2xldHtzeW1ib2w6ZyxpZHM6eX09bltwXSxtPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOmd9KTtpZihtKXtsZXQgJD1nKyJpbnN0YW5jZXMiO2ZvcihsZXQgaD0wO2g8eS5sZW5ndGg7aCs9MSl7bGV0IGI9eVtoXSx2PWF3YWl0IGFwaS5kYi5maW5kT25lKCQse19pZDphcGkuQmlnTnVtYmVyKGIpLnRvTnVtYmVyKCl9KTtpZih2JiZ2LmFjY291bnQ9PT1mJiYoInUiPT09di5vd25lZEJ5JiYidXNlciI9PT1kfHwiYyI9PT12Lm93bmVkQnkmJiJjb250cmFjdCI9PT1kKSYmdm9pZCAwPT09di5kZWxlZ2F0ZWRUbyYmIXYuc291bEJvdW5kKXtsZXQgdz12Lm93bmVkQnksTj0idXNlciI9PT1sPyJ1IjoiYyI7di5wcmV2aW91c0FjY291bnQ9di5hY2NvdW50LHYucHJldmlvdXNPd25lZEJ5PXYub3duZWRCeSx2LmFjY291bnQ9dSx2Lm93bmVkQnk9Tixhd2FpdCBhcGkuZGIudXBkYXRlKCQsdiksYXBpLmVtaXQoInRyYW5zZmVyIix7ZnJvbTpmLGZyb21UeXBlOncsdG86dSx0b1R5cGU6TixzeW1ib2w6ZyxpZDpifSl9fX19fX0sYWN0aW9ucy5kZWxlZ2F0ZT1hc3luYyBlPT57bGV0e2Zyb21UeXBlOnQsdG86cyx0b1R5cGU6YSxuZnRzOm4saXNTaWduZWRXaXRoQWN0aXZlS2V5OmksY2FsbGluZ0NvbnRyYWN0SW5mbzpyfT1lLG89WyJ1c2VyIiwiY29udHJhY3QiXSxsPXZvaWQgMD09PWE/InVzZXIiOmEsZD12b2lkIDA9PT10PyJ1c2VyIjp0O2lmKGFwaS5hc3NlcnQoITA9PT1pLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChkJiYic3RyaW5nIj09dHlwZW9mIGQmJm8uaW5jbHVkZXMoZCkmJnMmJiJzdHJpbmciPT10eXBlb2YgcyYmbCYmInN0cmluZyI9PXR5cGVvZiBsJiZvLmluY2x1ZGVzKGwpJiYocnx8dm9pZCAwPT09ciYmInVzZXIiPT09ZCkmJm4mJiJvYmplY3QiPT10eXBlb2YgbiYmQXJyYXkuaXNBcnJheShuKSwiaW52YWxpZCBwYXJhbXMiKSYmaXNWYWxpZE5mdElkQXJyYXkobikpe2xldCB1PSJ1c2VyIj09PWw/cy50cmltKCkudG9Mb3dlckNhc2UoKTpzLnRyaW0oKSxjPSJ1c2VyIj09PWw/aXNWYWxpZEhpdmVBY2NvdW50TGVuZ3RoKHUpOmlzVmFsaWRDb250cmFjdExlbmd0aCh1KSxmPSJ1c2VyIj09PWQ/YXBpLnNlbmRlcjpyLm5hbWU7aWYoYXBpLmFzc2VydChjLCJpbnZhbGlkIHRvIikmJmFwaS5hc3NlcnQoIShsPT09ZCYmdT09PWYpLCJjYW5ub3QgZGVsZWdhdGUgdG8gc2VsZiIpJiZhcGkuYXNzZXJ0KCEoInVzZXIiPT09bCYmIm51bGwiPT09dSksImNhbm5vdCBkZWxlZ2F0ZSB0byBudWxsIikpZm9yKGxldCBwPTA7cDxuLmxlbmd0aDtwKz0xKXtsZXR7c3ltYm9sOmcsaWRzOnl9PW5bcF0sbT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpnfSk7aWYobSYmYXBpLmFzc2VydCghMD09PW0uZGVsZWdhdGlvbkVuYWJsZWQsYGRlbGVnYXRpb24gbm90IGVuYWJsZWQgZm9yICR7Z31gKSl7bGV0ICQ9ZysiaW5zdGFuY2VzIjtmb3IobGV0IGg9MDtoPHkubGVuZ3RoO2grPTEpe2xldCBiPXlbaF0sdj1hd2FpdCBhcGkuZGIuZmluZE9uZSgkLHtfaWQ6YXBpLkJpZ051bWJlcihiKS50b051bWJlcigpfSk7aWYodiYmdi5hY2NvdW50PT09ZiYmKCJ1Ij09PXYub3duZWRCeSYmInVzZXIiPT09ZHx8ImMiPT09di5vd25lZEJ5JiYiY29udHJhY3QiPT09ZCkmJnZvaWQgMD09PXYuZGVsZWdhdGVkVG8pe2xldCB3PSJ1c2VyIj09PWw/InUiOiJjIixOPXthY2NvdW50OnUsb3duZWRCeTp3fTt2LmRlbGVnYXRlZFRvPU4sYXdhaXQgYXBpLmRiLnVwZGF0ZSgkLHYpLGFwaS5lbWl0KCJkZWxlZ2F0ZSIse2Zyb206Zixmcm9tVHlwZTp2Lm93bmVkQnksdG86dSx0b1R5cGU6dyxzeW1ib2w6ZyxpZDpifSksYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJtaW5pbmciLCJoYW5kbGVOZnREZWxlZ2F0aW9uQ2hhbmdlIix7c3ltYm9sOmcsbmZ0OnYsYWRkOiEwfSl9fX19fX0sYWN0aW9ucy51bmRlbGVnYXRlPWFzeW5jIGU9PntsZXR7ZnJvbVR5cGU6dCxuZnRzOnMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmEsY2FsbGluZ0NvbnRyYWN0SW5mbzpufT1lLGk9WyJ1c2VyIiwiY29udHJhY3QiXSxyPXZvaWQgMD09PXQ/InVzZXIiOnQ7aWYoYXBpLmFzc2VydCghMD09PWEsInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHImJiJzdHJpbmciPT10eXBlb2YgciYmaS5pbmNsdWRlcyhyKSYmKG58fHZvaWQgMD09PW4mJiJ1c2VyIj09PXIpJiZzJiYib2JqZWN0Ij09dHlwZW9mIHMmJkFycmF5LmlzQXJyYXkocyksImludmFsaWQgcGFyYW1zIikmJmlzVmFsaWROZnRJZEFycmF5KHMpKXtsZXQgbz0idXNlciI9PT1yP2FwaS5zZW5kZXI6bi5uYW1lLGw9bmV3IERhdGUoYCR7YXBpLmhpdmVCbG9ja1RpbWVzdGFtcH0uMDAwWmApO2ZvcihsZXQgZD0wO2Q8cy5sZW5ndGg7ZCs9MSl7bGV0e3N5bWJvbDp1LGlkczpjfT1zW2RdLGY9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6dX0pO2lmKGYmJmFwaS5hc3NlcnQoITA9PT1mLmRlbGVnYXRpb25FbmFibGVkLGBkZWxlZ2F0aW9uIG5vdCBlbmFibGVkIGZvciAke3V9YCkpe2xldCBwPTg2NGU1KmYudW5kZWxlZ2F0aW9uQ29vbGRvd24sZz1sLmdldFRpbWUoKStwLHk9dSsiaW5zdGFuY2VzIixtPXtzeW1ib2w6dSxpZHM6W10sY29tcGxldGVUaW1lc3RhbXA6Z307Zm9yKGxldCAkPTA7JDxjLmxlbmd0aDskKz0xKXtsZXQgaD1jWyRdLGI9YXdhaXQgYXBpLmRiLmZpbmRPbmUoeSx7X2lkOmFwaS5CaWdOdW1iZXIoaCkudG9OdW1iZXIoKX0pO2ImJmIuYWNjb3VudD09PW8mJigidSI9PT1iLm93bmVkQnkmJiJ1c2VyIj09PXJ8fCJjIj09PWIub3duZWRCeSYmImNvbnRyYWN0Ij09PXIpJiZiLmRlbGVnYXRlZFRvJiZ2b2lkIDA9PT1iLmRlbGVnYXRlZFRvLnVuZGVsZWdhdGVBdCYmKGIuZGVsZWdhdGVkVG8udW5kZWxlZ2F0ZUF0PWcsbS5pZHMucHVzaChiLl9pZCksYXdhaXQgYXBpLmRiLnVwZGF0ZSh5LGIpLGFwaS5lbWl0KCJ1bmRlbGVnYXRlU3RhcnQiLHtmcm9tOmIuZGVsZWdhdGVkVG8uYWNjb3VudCxmcm9tVHlwZTpiLmRlbGVnYXRlZFRvLm93bmVkQnksc3ltYm9sOnUsaWQ6aH0pLGF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgibWluaW5nIiwiaGFuZGxlTmZ0RGVsZWdhdGlvbkNoYW5nZSIse3N5bWJvbDp1LG5mdDpiLGFkZDohMX0pKX1tLmlkcy5sZW5ndGg+MCYmYXdhaXQgYXBpLmRiLmluc2VydCgicGVuZGluZ1VuZGVsZWdhdGlvbnMiLG0pfX19fTtjb25zdCBwcm9jZXNzVW5kZWxlZ2F0aW9uPWFzeW5jIGU9PntsZXR7c3ltYm9sOnQsaWRzOnN9PWUsYT10KyJpbnN0YW5jZXMiLG49YXdhaXQgYXBpLmRiLmZpbmQoYSx7X2lkOnskaW46c319LDUwLDAsW3tpbmRleDoiX2lkIixkZXNjZW5kaW5nOiExfV0pO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSs9MSlkZWxldGUgbltpXS5kZWxlZ2F0ZWRUbyxhd2FpdCBhcGkuZGIudXBkYXRlKGEsbltpXSx7ZGVsZWdhdGVkVG86IiJ9KTthd2FpdCBhcGkuZGIucmVtb3ZlKCJwZW5kaW5nVW5kZWxlZ2F0aW9ucyIsZSksYXBpLmVtaXQoInVuZGVsZWdhdGVEb25lIix7c3ltYm9sOnQsaWRzOnN9KX07YWN0aW9ucy5jaGVja1BlbmRpbmdVbmRlbGVnYXRpb25zPWFzeW5jKCk9PntpZihhcGkuYXNzZXJ0KCJudWxsIj09PWFwaS5zZW5kZXIsIm5vdCBhdXRob3JpemVkIikpe2xldCBlPW5ldyBEYXRlKGAke2FwaS5oaXZlQmxvY2tUaW1lc3RhbXB9LjAwMFpgKSx0PWUuZ2V0VGltZSgpLHM9YXdhaXQgYXBpLmRiLmZpbmQoInBlbmRpbmdVbmRlbGVnYXRpb25zIix7Y29tcGxldGVUaW1lc3RhbXA6eyRsdGU6dH19KSxhPXMubGVuZ3RoO2Zvcig7YT4wOyl7Zm9yKGxldCBuPTA7bjxhO24rPTEpe2xldCBpPXNbbl07YXdhaXQgcHJvY2Vzc1VuZGVsZWdhdGlvbihpKX1hPShzPWF3YWl0IGFwaS5kYi5maW5kKCJwZW5kaW5nVW5kZWxlZ2F0aW9ucyIse2NvbXBsZXRlVGltZXN0YW1wOnskbHRlOnR9fSkpLmxlbmd0aH19fSxhY3Rpb25zLmNyZWF0ZT1hc3luYyBlPT57bGV0e25hbWU6dCxvcmdOYW1lOnMscHJvZHVjdE5hbWU6YSxzeW1ib2w6bix1cmw6aSxtYXhTdXBwbHk6cixhdXRob3JpemVkSXNzdWluZ0FjY291bnRzOm8sYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHM6bCxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6ZH09ZSx1PWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KSx7bmZ0Q3JlYXRpb25GZWU6Y309dSxmPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOiJCRUUifSkscD0hIWFwaS5CaWdOdW1iZXIoYykubHRlKDApfHxmJiZhcGkuQmlnTnVtYmVyKGYuYmFsYW5jZSkuZ3RlKGMpO2lmKGFwaS5hc3NlcnQocCwieW91IG11c3QgaGF2ZSBlbm91Z2ggdG9rZW5zIHRvIGNvdmVyIHRoZSBjcmVhdGlvbiBmZWVzIikmJmFwaS5hc3NlcnQoITA9PT1kLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCh0JiYic3RyaW5nIj09dHlwZW9mIHQmJm4mJiJzdHJpbmciPT10eXBlb2YgbiYmKHZvaWQgMD09PWl8fGkmJiJzdHJpbmciPT10eXBlb2YgaSkmJih2b2lkIDA9PT1zfHxzJiYic3RyaW5nIj09dHlwZW9mIHMpJiYodm9pZCAwPT09YXx8YSYmInN0cmluZyI9PXR5cGVvZiBhKSYmKHZvaWQgMD09PW98fG8mJiJvYmplY3QiPT10eXBlb2YgbyYmQXJyYXkuaXNBcnJheShvKSkmJih2b2lkIDA9PT1sfHxsJiYib2JqZWN0Ij09dHlwZW9mIGwmJkFycmF5LmlzQXJyYXkobCkpJiYodm9pZCAwPT09cnx8ciYmInN0cmluZyI9PXR5cGVvZiByJiYhYXBpLkJpZ051bWJlcihyKS5pc05hTigpKSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChhcGkudmFsaWRhdG9yLmlzQWxwaGEobikmJmFwaS52YWxpZGF0b3IuaXNVcHBlcmNhc2UobikmJm4ubGVuZ3RoPjAmJm4ubGVuZ3RoPD0xMCwiaW52YWxpZCBzeW1ib2w6IHVwcGVyY2FzZSBsZXR0ZXJzIG9ubHksIG1heCBsZW5ndGggb2YgMTAiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1SRVNFUlZFRF9TWU1CT0xTW25dfHxhcGkuc2VuZGVyPT09UkVTRVJWRURfU1lNQk9MU1tuXSwiY2Fubm90IHVzZSB0aGlzIHN5bWJvbCIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QodCwiICIpKSYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PTUwLCJpbnZhbGlkIG5hbWU6IGxldHRlcnMsIG51bWJlcnMsIHdoaXRlc3BhY2VzIG9ubHksIG1heCBsZW5ndGggb2YgNTAiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1zfHxhcGkudmFsaWRhdG9yLmlzQWxwaGFudW1lcmljKGFwaS52YWxpZGF0b3IuYmxhY2tsaXN0KHMsIiAiKSkmJnMubGVuZ3RoPjAmJnMubGVuZ3RoPD01MCwiaW52YWxpZCBvcmcgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWF8fGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QoYSwiICIpKSYmYS5sZW5ndGg+MCYmYS5sZW5ndGg8PTUwLCJpbnZhbGlkIHByb2R1Y3QgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWl8fGkubGVuZ3RoPD0yNTUsImludmFsaWQgdXJsOiBtYXggbGVuZ3RoIG9mIDI1NSIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PXJ8fGFwaS5CaWdOdW1iZXIocikuZ3QoMCksIm1heFN1cHBseSBtdXN0IGJlIHBvc2l0aXZlIikmJmFwaS5hc3NlcnQodm9pZCAwPT09cnx8YXBpLkJpZ051bWJlcihyKS5sdGUoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLGBtYXhTdXBwbHkgbXVzdCBiZSBsb3dlciB0aGFuICR7TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJ9YCkpe2xldCBnPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOm59KTtpZihhcGkuYXNzZXJ0KG51bGw9PT1nLCJzeW1ib2wgYWxyZWFkeSBleGlzdHMiKSl7aWYoYXBpLkJpZ051bWJlcihjKS5ndCgwKSl7bGV0IHk9YXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlciIse3RvOiJudWxsIixzeW1ib2w6IkJFRSIscXVhbnRpdHk6Yyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6ZH0pO2lmKCFpc1Rva2VuVHJhbnNmZXJWZXJpZmllZCh5LGFwaS5zZW5kZXIsIm51bGwiLCJCRUUiLGMsInRyYW5zZmVyIikpcmV0dXJuITF9bGV0IG09dm9pZCAwPT09cj8wOmFwaS5CaWdOdW1iZXIocikuaW50ZWdlclZhbHVlKGFwaS5CaWdOdW1iZXIuUk9VTkRfRE9XTikudG9OdW1iZXIoKSwkPXZvaWQgMD09PXM/IiI6cyxoPXZvaWQgMD09PWE/IiI6YSxiPXZvaWQgMD09PWk/IiI6aSx2PXt1cmw6Yn07dj1KU09OLnN0cmluZ2lmeSh2KTtsZXQgdz12b2lkIDA9PT1vP1thcGkuc2VuZGVyXTpbXSxOPXtpc3N1ZXI6YXBpLnNlbmRlcixzeW1ib2w6bixuYW1lOnQsb3JnTmFtZTokLHByb2R1Y3ROYW1lOmgsbWV0YWRhdGE6dixtYXhTdXBwbHk6bSxzdXBwbHk6MCxjaXJjdWxhdGluZ1N1cHBseTowLGRlbGVnYXRpb25FbmFibGVkOiExLHVuZGVsZWdhdGlvbkNvb2xkb3duOjAsYXV0aG9yaXplZElzc3VpbmdBY2NvdW50czp3LGF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzOltdLHByb3BlcnRpZXM6e30sZ3JvdXBCeTpbXX0sXz1uKyJpbnN0YW5jZXMiLEE9YXdhaXQgYXBpLmRiLnRhYmxlRXhpc3RzKF8pO3JldHVybiExPT09QSYmYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKF8sWyJhY2NvdW50Iiwib3duZWRCeSJdKSxhd2FpdCBhcGkuZGIuaW5zZXJ0KCJuZnRzIixOKSx2b2lkIDAhPT1vJiZhd2FpdCBhY3Rpb25zLmFkZEF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMoe2FjY291bnRzOm8sc3ltYm9sOm4saXNTaWduZWRXaXRoQWN0aXZlS2V5OmR9KSx2b2lkIDAhPT1sJiZhd2FpdCBhY3Rpb25zLmFkZEF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzKHtjb250cmFjdHM6bCxzeW1ib2w6bixpc1NpZ25lZFdpdGhBY3RpdmVLZXk6ZH0pLCEwfX1yZXR1cm4hMX0sYWN0aW9ucy5pc3N1ZT1hc3luYyBlPT57bGV0e3N5bWJvbDp0LGZyb21UeXBlOnMsdG86YSx0b1R5cGU6bixmZWVTeW1ib2w6aSxsb2NrVG9rZW5zOnIsbG9ja05mdHM6byxzb3VsQm91bmQ6bCxwcm9wZXJ0aWVzOmQsaXNTaWduZWRXaXRoQWN0aXZlS2V5OnUsY2FsbGluZ0NvbnRyYWN0SW5mbzpjfT1lLGY9WyJ1c2VyIiwiY29udHJhY3QiXSxwPXZvaWQgMD09PW4/InVzZXIiOm4sZz12b2lkIDA9PT1zPyJ1c2VyIjpzLHk9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pLHtuZnRJc3N1YW5jZUZlZTptfT15O2lmKGFwaS5hc3NlcnQoITA9PT11LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCh0JiYic3RyaW5nIj09dHlwZW9mIHQmJmcmJiJzdHJpbmciPT10eXBlb2YgZyYmZi5pbmNsdWRlcyhnKSYmKGN8fHZvaWQgMD09PWMmJiJ1c2VyIj09PWcpJiZhJiYic3RyaW5nIj09dHlwZW9mIGEmJnAmJiJzdHJpbmciPT10eXBlb2YgcCYmZi5pbmNsdWRlcyhwKSYmaSYmInN0cmluZyI9PXR5cGVvZiBpJiZpIGluIG0mJih2b2lkIDA9PT1kfHxkJiYib2JqZWN0Ij09dHlwZW9mIGQpJiYodm9pZCAwPT09cnx8ciYmIm9iamVjdCI9PXR5cGVvZiByKSYmKHZvaWQgMD09PW98fG8mJiJvYmplY3QiPT10eXBlb2YgbyYmQXJyYXkuaXNBcnJheShvKSkmJih2b2lkIDA9PT1sfHxsJiYiYm9vbGVhbiI9PXR5cGVvZiBsKSwiaW52YWxpZCBwYXJhbXMiKSYmKHZvaWQgMD09PW98fGlzVmFsaWROZnRJZEFycmF5KG8pKSl7bGV0ICQ9InVzZXIiPT09cD9hLnRyaW0oKS50b0xvd2VyQ2FzZSgpOmEudHJpbSgpLGg9InVzZXIiPT09cD9pc1ZhbGlkSGl2ZUFjY291bnRMZW5ndGgoJCk6aXNWYWxpZENvbnRyYWN0TGVuZ3RoKCQpLGI9InVzZXIiPT09Zz9hcGkuc2VuZGVyOmMubmFtZSx2PSJ1c2VyIj09PWc/ImJhbGFuY2VzIjoiY29udHJhY3RzQmFsYW5jZXMiO2lmKGFwaS5hc3NlcnQoaCwiaW52YWxpZCB0byIpKXtsZXQgdz1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDp0fSksTj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDppfSk7aWYoYXBpLmFzc2VydChudWxsIT09dywic3ltYm9sIGRvZXMgbm90IGV4aXN0IikmJmFwaS5hc3NlcnQobnVsbCE9PU4sImZlZSBzeW1ib2wgZG9lcyBub3QgZXhpc3QiKSl7bGV0IF89dCsiaW5zdGFuY2VzIjtpZihhcGkuYXNzZXJ0KCJjb250cmFjdCI9PT1nJiZ3LmF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzLmluY2x1ZGVzKGIpfHwidXNlciI9PT1nJiZ3LmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMuaW5jbHVkZXMoYiksIm5vdCBhbGxvd2VkIHRvIGlzc3VlIHRva2VucyIpJiZhcGkuYXNzZXJ0KDA9PT13Lm1heFN1cHBseXx8dy5zdXBwbHk8dy5tYXhTdXBwbHksIm1heCBzdXBwbHkgbGltaXQgcmVhY2hlZCIpKXtsZXQgQT1PYmplY3Qua2V5cyh3LnByb3BlcnRpZXMpLmxlbmd0aCxUPWFwaS5CaWdOdW1iZXIobVtpXSkubXVsdGlwbGllZEJ5KEEpLGs9Y2FsY3VsYXRlQmFsYW5jZShtW2ldLFQsTi5wcmVjaXNpb24sITApLEI9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLHYse2FjY291bnQ6YixzeW1ib2w6aX0pLEU9ISFhcGkuQmlnTnVtYmVyKGspLmx0ZSgwKXx8QiYmYXBpLkJpZ051bWJlcihCLmJhbGFuY2UpLmd0ZShrKTtpZihyKXtsZXQgTz1hd2FpdCBpc1ZhbGlkVG9rZW5CYXNrZXQocix2LGIsaSxrKTtpZighYXBpLmFzc2VydChPLCJpbnZhbGlkIGJhc2tldCBvZiB0b2tlbnMgdG8gbG9jayAoY2Fubm90IGxvY2sgbW9yZSB0aGFuIDEwIHRva2VuIHR5cGVzOyBpc3N1aW5nIGFjY291bnQgbXVzdCBoYXZlIGVub3VnaCBiYWxhbmNlKSIpKXJldHVybiExfWxldCBDPXt9O2lmKHZvaWQgMCE9PWQpe3RyeXtpZighaXNWYWxpZERhdGFQcm9wZXJ0aWVzKGIsZyx3LGQpKXJldHVybiExfWNhdGNoKEkpe3JldHVybiExfUM9ZH1pZihhcGkuYXNzZXJ0KEUsInlvdSBtdXN0IGhhdmUgZW5vdWdoIHRva2VucyB0byBjb3ZlciB0aGUgaXNzdWFuY2UgZmVlcyIpKXtpZihhcGkuQmlnTnVtYmVyKGspLmd0KDApKXtpZigiY29udHJhY3QiPT09Zyl7bGV0IFM9YXdhaXQgYXBpLnRyYW5zZmVyVG9rZW5zRnJvbUNhbGxpbmdDb250cmFjdCgibnVsbCIsaSxrLCJ1c2VyIik7aWYoIWFwaS5hc3NlcnQoaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQoUyxiLCJudWxsIixpLGssInRyYW5zZmVyRnJvbUNvbnRyYWN0IiksInVuYWJsZSB0byB0cmFuc2ZlciBpc3N1YW5jZSBmZWUiKSlyZXR1cm4hMX1lbHNle2xldCBWPWF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOmkscXVhbnRpdHk6ayxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6dX0pO2lmKCFhcGkuYXNzZXJ0KGlzVG9rZW5UcmFuc2ZlclZlcmlmaWVkKFYsYiwibnVsbCIsaSxrLCJ0cmFuc2ZlciIpLCJ1bmFibGUgdG8gdHJhbnNmZXIgaXNzdWFuY2UgZmVlIikpcmV0dXJuITF9fWxldCB4PXt9O2lmKHIpZm9yKGxldFtqLExdb2YgT2JqZWN0LmVudHJpZXMocikpaWYoImNvbnRyYWN0Ij09PWcpe2xldCB6PWF3YWl0IGFwaS50cmFuc2ZlclRva2Vuc0Zyb21DYWxsaW5nQ29udHJhY3QoIm5mdCIsaixMLCJjb250cmFjdCIpO2lzVG9rZW5UcmFuc2ZlclZlcmlmaWVkKHosYiwibmZ0IixqLEwsInRyYW5zZmVyRnJvbUNvbnRyYWN0IikmJih4W2pdPUwpfWVsc2V7bGV0IFI9YXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlclRvQ29udHJhY3QiLHt0bzoibmZ0IixzeW1ib2w6aixxdWFudGl0eTpMLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTp1fSk7aXNUb2tlblRyYW5zZmVyVmVyaWZpZWQoUixiLCJuZnQiLGosTCwidHJhbnNmZXJUb0NvbnRyYWN0IikmJih4W2pdPUwpfWxldCBGPVtdO2lmKG8mJm8ubGVuZ3RoPjApe2xldCBEPWF3YWl0IHRyYW5zZmVyQW5kVmVyaWZ5TmZ0cyhiLGcsIm5mdCIsImNvbnRyYWN0IixvLHUsYyk7Rj1ELnN1Y2Nlc3N9bGV0IE09InVzZXIiPT09cD8idSI6ImMiLFA9e307UD1GLmxlbmd0aD4wP3thY2NvdW50OiQsc291bEJvdW5kOmwsb3duZWRCeTpNLGxvY2tlZFRva2Vuczp4LGxvY2tlZE5mdHM6Rixwcm9wZXJ0aWVzOkN9OnthY2NvdW50OiQsc291bEJvdW5kOmwsb3duZWRCeTpNLGxvY2tlZFRva2Vuczp4LHByb3BlcnRpZXM6Q307bGV0IFU9YXdhaXQgYXBpLmRiLmluc2VydChfLFApO3JldHVybiB3LnN1cHBseSs9MSwoIm51bGwiIT09JHx8ImNvbnRyYWN0Ij09PXApJiYody5jaXJjdWxhdGluZ1N1cHBseSs9MSksYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsdyksYXBpLmVtaXQoImlzc3VlIix7ZnJvbTpiLGZyb21UeXBlOmcsdG86JCx0b1R5cGU6cCxzeW1ib2w6dCxsb2NrZWRUb2tlbnM6eCxsb2NrZWROZnRzOkYscHJvcGVydGllczpDLGlkOlUuX2lkfSksITB9fX19fXJldHVybiExfSxhY3Rpb25zLmlzc3VlTXVsdGlwbGU9YXN5bmMgZT0+e2xldHtpbnN0YW5jZXM6dCxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6cyxjYWxsaW5nQ29udHJhY3RJbmZvOmF9PWU7aWYoYXBpLmFzc2VydCghMD09PXMsInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHQmJiJvYmplY3QiPT10eXBlb2YgdCYmQXJyYXkuaXNBcnJheSh0KSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydCh0Lmxlbmd0aDw9MTAsImNhbm5vdCBpc3N1ZSBtb3JlIHRoYW4gMTAgTkZUIGluc3RhbmNlcyBhdCBvbmNlIikpe2xldCBuPTA7aWYodC5mb3JFYWNoKGU9PntlLmxvY2tOZnRzJiYobis9MSl9KSxhcGkuYXNzZXJ0KG48PTEsImNhbm5vdCBpc3N1ZSBtb3JlIHRoYW4gMSBjb250YWluZXIgTkZUIGluc3RhbmNlcyBhdCBvbmNlIikmJmFwaS5hc3NlcnQoMD09PW58fG49PT10Lmxlbmd0aCwiY2Fubm90IGlzc3VlIGEgbWl4IG9mIGNvbnRhaW5lciBhbmQgbm9uLWNvbnRhaW5lciBORlQgaW5zdGFuY2VzIHNpbXVsdGFuZW91c2x5IikpZm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKz0xKXtsZXR7c3ltYm9sOnIsZnJvbVR5cGU6byx0bzpsLHRvVHlwZTpkLGZlZVN5bWJvbDp1LGxvY2tUb2tlbnM6Yyxsb2NrTmZ0czpmLHByb3BlcnRpZXM6cH09dFtpXTthd2FpdCBhY3Rpb25zLmlzc3VlKHtzeW1ib2w6cixmcm9tVHlwZTpvLHRvOmwsdG9UeXBlOmQsZmVlU3ltYm9sOnUsbG9ja1Rva2VuczpjLGxvY2tOZnRzOmYscHJvcGVydGllczpwLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTpzLGNhbGxpbmdDb250cmFjdEluZm86YX0pfX19Ow=="}}}
soulbound
2 years ago in #hive-engine by rishi556.engine (46)
$0.00
{"id":"ssc-testnet-hive","json":{"contractName":"contract","contractAction":"update","contractPayload":{"name":"nft","params":"","code":"Y29uc3QgQ09OVFJBQ1RfTkFNRT0ibmZ0IixVVElMSVRZX1RPS0VOX1NZTUJPTD0iQkVFIixNQVhfTlVNX0FVVEhPUklaRURfSVNTVUVSUz0xMCxNQVhfTlVNX0xPQ0tFRF9UT0tFTl9UWVBFUz0xMCxNQVhfU1lNQk9MX0xFTkdUSD0xMCxNQVhfREFUQV9QUk9QRVJUWV9MRU5HVEg9MTAwLE1BWF9OVU1fTkZUU19JU1NVQUJMRT0xMCxNQVhfTlVNX05GVFNfRURJVEFCTEU9NTAsTUFYX05VTV9ORlRTX09QRVJBQkxFPTUwLE1BWF9OVU1fQ09OVEFJTkVSX05GVFNfT1BFUkFCTEU9MSxSRVNFUlZFRF9TWU1CT0xTPXtDRUxMOiJiZWdnYXJzIixRVVNUOiJzaW1wbGVnYW1lIixURVNURVJBOiJhZ2dyb2VkIixTUVJMOiJzdHVmZmJ5c3BlbmNlciIsQ1JBRlQ6ImltbWFudWVsOTQiLE1VU0lDOiJhdG9tY29sbGVjdG9yIixDR1VMTDoiY2d1bGwiLE5GVDoiY2FkYXdnIixSQVJFOiJiZWdnYXJzIixMSUM6ImxpY3Rva2VuIixNRU1CRVI6Im1lbWJlcnRva2VuIixDT0ZGRUU6ImMwZmYzM2EiLEFSVDoiYnlvIixST0NLOiJiZWdnYXJzIixDUklUVEVSOiJjcnlwdG9tYW5jZXIiLENJVFk6ImdlcmJlciIsTU9OU1RFUlM6InNpbXBsZWdhbWUiLFNFVFM6Imxvb3RraXQuZ2FtZXMiLEFOSU1FOiJhbmltZXRva2VuIixQSE9UT0ZUOiJ3d3dpZWJlIixCRUVSOiJkZXRsZXYiLFNQSVI6InNwaW52ZXN0IixJRkc6Imxpb24yMDAiLEdVSUxEUzoic2ltcGxlZ2FtZSIsRkNBUkQ6Imxpb24yMDAiLFBYTDoicGl4ZWxuZnQiLENPVzoic3R1ZmZieXNwZW5jZXIiLExPT09UOiJzdHVmZmJ5c3BlbmNlciIsQVBJOiJzdGVlbWNpdHlhcGkiLFNQT1JUU01PTToic3BvcnRzdGVzdGVyIixTV1Q6InNhdHJlbiIsU1RBUjoiYXRvbWNvbGxlY3RvciJ9O2FjdGlvbnMuY3JlYXRlU1NDPWFzeW5jKCk9PntsZXQgZT1hd2FpdCBhcGkuZGIudGFibGVFeGlzdHMoIm5mdHMiKTtpZighMT09PWUpe2F3YWl0IGFwaS5kYi5jcmVhdGVUYWJsZSgibmZ0cyIsWyJzeW1ib2wiXSksYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCJwYXJhbXMiKSxhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoInBlbmRpbmdVbmRlbGVnYXRpb25zIixbInN5bWJvbCIsImNvbXBsZXRlVGltZXN0YW1wIl0pO2xldCB0PXt9O3QubmZ0Q3JlYXRpb25GZWU9IjEwMCIsdC5uZnRJc3N1YW5jZUZlZT17QkVFOiIwLjAwMSIsUEFMOiIwLjAwMSJ9LHQuZGF0YVByb3BlcnR5Q3JlYXRpb25GZWU9IjEwMCIsdC5lbmFibGVEZWxlZ2F0aW9uRmVlPSIxMDAwIixhd2FpdCBhcGkuZGIuaW5zZXJ0KCJwYXJhbXMiLHQpfX0sYWN0aW9ucy51cGRhdGVQYXJhbXM9YXN5bmMgZT0+e2lmKGFwaS5zZW5kZXIhPT1hcGkub3duZXIpcmV0dXJuO2xldHtuZnRDcmVhdGlvbkZlZTp0LG5mdElzc3VhbmNlRmVlOnMsZGF0YVByb3BlcnR5Q3JlYXRpb25GZWU6YSxlbmFibGVEZWxlZ2F0aW9uRmVlOm59PWUsaT1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSk7dCYmInN0cmluZyI9PXR5cGVvZiB0JiYhYXBpLkJpZ051bWJlcih0KS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKHQpLmd0ZSgwKSYmKGkubmZ0Q3JlYXRpb25GZWU9dCkscyYmIm9iamVjdCI9PXR5cGVvZiBzJiYoaS5uZnRJc3N1YW5jZUZlZT1zKSxhJiYic3RyaW5nIj09dHlwZW9mIGEmJiFhcGkuQmlnTnVtYmVyKGEpLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIoYSkuZ3RlKDApJiYoaS5kYXRhUHJvcGVydHlDcmVhdGlvbkZlZT1hKSxuJiYic3RyaW5nIj09dHlwZW9mIG4mJiFhcGkuQmlnTnVtYmVyKG4pLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIobikuZ3RlKDApJiYoaS5lbmFibGVEZWxlZ2F0aW9uRmVlPW4pLGF3YWl0IGFwaS5kYi51cGRhdGUoInBhcmFtcyIsaSl9O2NvbnN0IGlzVG9rZW5UcmFuc2ZlclZlcmlmaWVkPShlLHQscyxhLG4saSk9PnZvaWQgMD09PWUuZXJyb3JzJiYhIWUuZXZlbnRzJiZ2b2lkIDAhPT1lLmV2ZW50cy5maW5kKGU9PiJ0b2tlbnMiPT09ZS5jb250cmFjdCYmZS5ldmVudD09PWkmJmUuZGF0YS5mcm9tPT09dCYmZS5kYXRhLnRvPT09cyYmZS5kYXRhLnF1YW50aXR5PT09biYmZS5kYXRhLnN5bWJvbD09PWEpLGNhbGN1bGF0ZUJhbGFuY2U9KGUsdCxzLGEpPT5hP2FwaS5CaWdOdW1iZXIoZSkucGx1cyh0KS50b0ZpeGVkKHMpOmFwaS5CaWdOdW1iZXIoZSkubWludXModCkudG9GaXhlZChzKSxjb3VudERlY2ltYWxzPWU9PmFwaS5CaWdOdW1iZXIoZSkuZHAoKSxjb250YWluc0R1cGxpY2F0ZXM9ZT0+bmV3IFNldChlKS5zaXplIT09ZS5sZW5ndGgsaXNWYWxpZEhpdmVBY2NvdW50TGVuZ3RoPWU9PmUubGVuZ3RoPj0zJiZlLmxlbmd0aDw9MTYsaXNWYWxpZENvbnRyYWN0TGVuZ3RoPWU9PmUubGVuZ3RoPj0zJiZlLmxlbmd0aDw9NTAsaXNWYWxpZEFjY291bnRzQXJyYXk9ZT0+e2xldCB0PSEwO3JldHVybiBlLmZvckVhY2goZT0+eyJzdHJpbmciPT10eXBlb2YgZSYmaXNWYWxpZEhpdmVBY2NvdW50TGVuZ3RoKGUpfHwodD0hMSl9KSx0fSxpc1ZhbGlkQ29udHJhY3RzQXJyYXk9ZT0+e2xldCB0PSEwO3JldHVybiBlLmZvckVhY2goZT0+eyJzdHJpbmciPT10eXBlb2YgZSYmaXNWYWxpZENvbnRyYWN0TGVuZ3RoKGUpfHwodD0hMSl9KSx0fSxpc1ZhbGlkRGF0YVByb3BlcnRpZXM9KGUsdCxzLGEpPT57bGV0IG49T2JqZWN0LmtleXMoYSkubGVuZ3RoLGk9T2JqZWN0LmtleXMocy5wcm9wZXJ0aWVzKS5sZW5ndGg7aWYoIWFwaS5hc3NlcnQobjw9aSwiY2Fubm90IHNldCBtb3JlIGRhdGEgcHJvcGVydGllcyB0aGFuIE5GVCBoYXMiKSlyZXR1cm4hMTtmb3IobGV0W3Isb11vZiBPYmplY3QuZW50cmllcyhhKSl7bGV0IGw9ITE7aWYoYXBpLmFzc2VydChyJiYic3RyaW5nIj09dHlwZW9mIHImJmFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMocikmJnIubGVuZ3RoPjAmJnIubGVuZ3RoPD0yNSwiaW52YWxpZCBkYXRhIHByb3BlcnR5IG5hbWU6IGxldHRlcnMgJiBudW1iZXJzIG9ubHksIG1heCBsZW5ndGggb2YgMjUiKSYmYXBpLmFzc2VydChyIGluIHMucHJvcGVydGllcywiZGF0YSBwcm9wZXJ0eSBtdXN0IGV4aXN0Iikpe2xldCBkPXMucHJvcGVydGllc1tyXTthcGkuYXNzZXJ0KG51bGwhPW8mJih0eXBlb2Ygbz09PWQudHlwZXx8Im51bWJlciI9PT1kLnR5cGUmJiJzdHJpbmciPT10eXBlb2YgbyYmIWFwaS5CaWdOdW1iZXIobykuaXNOYU4oKSksYGRhdGEgcHJvcGVydHkgdHlwZSBtaXNtYXRjaDogZXhwZWN0ZWQgJHtkLnR5cGV9IGJ1dCBnb3QgJHt0eXBlb2Ygb30gZm9yIHByb3BlcnR5ICR7cn1gKSYmYXBpLmFzc2VydCgic3RyaW5nIiE9dHlwZW9mIG98fG8ubGVuZ3RoPD0xMDAsInN0cmluZyBwcm9wZXJ0eSBtYXggbGVuZ3RoIGlzIDEwMCBjaGFyYWN0ZXJzIikmJmFwaS5hc3NlcnQoImNvbnRyYWN0Ij09PXQmJmQuYXV0aG9yaXplZEVkaXRpbmdDb250cmFjdHMuaW5jbHVkZXMoZSl8fCJ1c2VyIj09PXQmJmQuYXV0aG9yaXplZEVkaXRpbmdBY2NvdW50cy5pbmNsdWRlcyhlKSwibm90IGFsbG93ZWQgdG8gc2V0IGRhdGEgcHJvcGVydGllcyIpJiYobD0hMCwibnVtYmVyIj09PWQudHlwZSYmInN0cmluZyI9PXR5cGVvZiBvJiYoYVtyXT1hcGkuQmlnTnVtYmVyKG8pLnRvTnVtYmVyKCkpKX1pZighbClyZXR1cm4hMX1yZXR1cm4hMH0saXNWYWxpZERhdGFQcm9wZXJ0aWVzQXJyYXk9KGUsdCxzLGEpPT57dHJ5e2ZvcihsZXQgbj0wO248YS5sZW5ndGg7bis9MSl7bGV0IGk9ITEse2lkOnIscHJvcGVydGllczpvfT1hW25dO2lmKGFwaS5hc3NlcnQociYmInN0cmluZyI9PXR5cGVvZiByJiYhYXBpLkJpZ051bWJlcihyKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKHIpLmd0KDApJiZvJiYib2JqZWN0Ij09dHlwZW9mIG8sImludmFsaWQgZGF0YSBwcm9wZXJ0aWVzIikmJmlzVmFsaWREYXRhUHJvcGVydGllcyhlLHQscyxvKSYmKGk9ITApLCFpKXJldHVybiExfX1jYXRjaChsKXtyZXR1cm4hMX1yZXR1cm4hMH0saXNWYWxpZE5mdElkQXJyYXk9ZT0+e3RyeXtsZXQgdD0wO2ZvcihsZXQgcz0wO3M8ZS5sZW5ndGg7cys9MSl7bGV0IGE9ITEse3N5bWJvbDpuLGlkczppfT1lW3NdO2lmKGFwaS5hc3NlcnQobiYmInN0cmluZyI9PXR5cGVvZiBuJiZhcGkudmFsaWRhdG9yLmlzQWxwaGEobikmJmFwaS52YWxpZGF0b3IuaXNVcHBlcmNhc2UobikmJm4ubGVuZ3RoPjAmJm4ubGVuZ3RoPD0xMCYmaSYmIm9iamVjdCI9PXR5cGVvZiBpJiZBcnJheS5pc0FycmF5KGkpLCJpbnZhbGlkIG5mdCBsaXN0IikmJih0Kz1pLmxlbmd0aCxhcGkuYXNzZXJ0KHQ8PTUwLCJjYW5ub3Qgb3BlcmF0ZSBvbiBtb3JlIHRoYW4gNTAgTkZUIGluc3RhbmNlcyBhdCBvbmNlIikpKXtmb3IobGV0IHI9MDtyPGkubGVuZ3RoO3IrPTEpe2xldCBvPWlbcl07aWYoIWFwaS5hc3NlcnQobyYmInN0cmluZyI9PXR5cGVvZiBvJiYhYXBpLkJpZ051bWJlcihvKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKG8pLmd0KDApLCJpbnZhbGlkIG5mdCBsaXN0IikpcmV0dXJuITF9YT0hMH1pZighYSlyZXR1cm4hMX19Y2F0Y2gobCl7cmV0dXJuITF9cmV0dXJuITB9LGlzVmFsaWRUb2tlbkJhc2tldD1hc3luYyhlLHQscyxhLG4pPT57dHJ5e2xldCBpPU9iamVjdC5rZXlzKGUpLmxlbmd0aDtpZihpPjEwKXJldHVybiExO2ZvcihsZXRbcixvXW9mIE9iamVjdC5lbnRyaWVzKGUpKXtsZXQgbD0hMTtpZigic3RyaW5nIj09dHlwZW9mIHImJmFwaS52YWxpZGF0b3IuaXNBbHBoYShyKSYmYXBpLnZhbGlkYXRvci5pc1VwcGVyY2FzZShyKSYmci5sZW5ndGg+MCYmci5sZW5ndGg8PTEwKXtsZXQgZD1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpyfSk7aWYoZCYmbyYmInN0cmluZyI9PXR5cGVvZiBvJiYhYXBpLkJpZ051bWJlcihvKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKG8pLmd0KDApJiZjb3VudERlY2ltYWxzKG8pPD1kLnByZWNpc2lvbil7bGV0IHU9cj09PWE/Y2FsY3VsYXRlQmFsYW5jZShvLG4sZC5wcmVjaXNpb24sITApOm8sYz1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsdCx7YWNjb3VudDpzLHN5bWJvbDpyfSk7YyYmYXBpLkJpZ051bWJlcihjLmJhbGFuY2UpLmd0ZSh1KSYmKGw9ITApfX1pZighbClyZXR1cm4hMX19Y2F0Y2goZil7cmV0dXJuITF9cmV0dXJuITB9LHRyYW5zZmVyQW5kVmVyaWZ5TmZ0cz1hc3luYyhlLHQscyxhLG4saSxyKT0+e2xldCBvPXtzdWNjZXNzOltdLGZhaWw6W119LGw9InVzZXIiPT09dD8idSI6ImMiLGQ9InVzZXIiPT09YT8idSI6ImMiO2F3YWl0IGFjdGlvbnMudHJhbnNmZXIoe2Zyb21UeXBlOnQsdG86cyx0b1R5cGU6YSxuZnRzOm4saXNTaWduZWRXaXRoQWN0aXZlS2V5OmksY2FsbGluZ0NvbnRyYWN0SW5mbzpyfSk7bGV0IHU9YXBpLmxvZ3MoKSxjPXt9LGY9e307aWYodS5ldmVudHMpZm9yKGxldCBwPTA7cDx1LmV2ZW50cy5sZW5ndGg7cCs9MSl7bGV0IGc9dS5ldmVudHNbcF07aWYoZy5jb250cmFjdCYmZy5ldmVudCYmZy5kYXRhJiYibmZ0Ij09PWcuY29udHJhY3QmJiJ0cmFuc2ZlciI9PT1nLmV2ZW50JiZnLmRhdGEuZnJvbT09PWUmJmcuZGF0YS5mcm9tVHlwZT09PWwmJmcuZGF0YS50bz09PXMmJmcuZGF0YS50b1R5cGU9PT1kKXtsZXQgeT1nLmRhdGEuc3ltYm9sKyItIitnLmRhdGEuaWQ7Y1t5XT0xfX1mb3IobGV0IG09MDttPG4ubGVuZ3RoO20rPTEpe2xldHtzeW1ib2w6JCxpZHM6aH09blttXSxiPVtdLHY9W107Zm9yKGxldCB3PTA7dzxoLmxlbmd0aDt3Kz0xKXtsZXQgTj0kKyItIitoW3ddO04gaW4gZnx8KE4gaW4gYz9iLnB1c2goaFt3XS50b1N0cmluZygpKTp2LnB1c2goaFt3XS50b1N0cmluZygpKSxmW05dPTEpfWIubGVuZ3RoPjAmJm8uc3VjY2Vzcy5wdXNoKHtzeW1ib2w6JCxpZHM6Yn0pLHYubGVuZ3RoPjAmJm8uZmFpbC5wdXNoKHtzeW1ib2w6JCxpZHM6dn0pfXJldHVybiBvfTthY3Rpb25zLnVwZGF0ZVVybD1hc3luYyBlPT57bGV0e3VybDp0LHN5bWJvbDpzfT1lO2lmKGFwaS5hc3NlcnQocyYmInN0cmluZyI9PXR5cGVvZiBzJiZ0JiYic3RyaW5nIj09dHlwZW9mIHQsImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQodC5sZW5ndGg8PTI1NSwiaW52YWxpZCB1cmw6IG1heCBsZW5ndGggb2YgMjU1Iikpe2xldCBhPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN9KTtpZihhJiZhcGkuYXNzZXJ0KGEuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpdHJ5e2xldCBuPUpTT04ucGFyc2UoYS5tZXRhZGF0YSk7YXBpLmFzc2VydChuJiZuLnVybCwiYW4gZXJyb3Igb2NjdXJlZCB3aGVuIHRyeWluZyB0byB1cGRhdGUgdGhlIHVybCIpJiYobi51cmw9dCxhLm1ldGFkYXRhPUpTT04uc3RyaW5naWZ5KG4pLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGEpKX1jYXRjaChpKXt9fX0sYWN0aW9ucy51cGRhdGVNZXRhZGF0YT1hc3luYyBlPT57bGV0e21ldGFkYXRhOnQsc3ltYm9sOnN9PWU7aWYoYXBpLmFzc2VydChzJiYic3RyaW5nIj09dHlwZW9mIHMmJnQmJiJvYmplY3QiPT10eXBlb2YgdCwiaW52YWxpZCBwYXJhbXMiKSl7bGV0IGE9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c30pO2lmKGEmJmFwaS5hc3NlcnQoYS5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSl0cnl7bGV0IG49SlNPTi5zdHJpbmdpZnkodCk7YXBpLmFzc2VydChuLmxlbmd0aDw9MWUzLCJpbnZhbGlkIG1ldGFkYXRhOiBtYXggbGVuZ3RoIG9mIDEwMDAiKSYmKGEubWV0YWRhdGE9bixhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixhKSl9Y2F0Y2goaSl7fX19LGFjdGlvbnMudXBkYXRlTmFtZT1hc3luYyBlPT57bGV0e25hbWU6dCxzeW1ib2w6c309ZTtpZihhcGkuYXNzZXJ0KHMmJiJzdHJpbmciPT10eXBlb2YgcyYmdCYmInN0cmluZyI9PXR5cGVvZiB0LCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QodCwiICIpKSYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PTUwLCJpbnZhbGlkIG5hbWU6IGxldHRlcnMsIG51bWJlcnMsIHdoaXRlc3BhY2VzIG9ubHksIG1heCBsZW5ndGggb2YgNTAiKSl7bGV0IGE9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c30pO2EmJmFwaS5hc3NlcnQoYS5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmKGEubmFtZT10LGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGEpKX19LGFjdGlvbnMudXBkYXRlT3JnTmFtZT1hc3luYyBlPT57bGV0e29yZ05hbWU6dCxzeW1ib2w6c309ZTtpZihhcGkuYXNzZXJ0KHMmJiJzdHJpbmciPT10eXBlb2YgcyYmdCYmInN0cmluZyI9PXR5cGVvZiB0LCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QodCwiICIpKSYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PTUwLCJpbnZhbGlkIG9yZyBuYW1lOiBsZXR0ZXJzLCBudW1iZXJzLCB3aGl0ZXNwYWNlcyBvbmx5LCBtYXggbGVuZ3RoIG9mIDUwIikpe2xldCBhPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN9KTthJiZhcGkuYXNzZXJ0KGEuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJihhLm9yZ05hbWU9dCxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixhKSl9fSxhY3Rpb25zLnVwZGF0ZVByb2R1Y3ROYW1lPWFzeW5jIGU9PntsZXR7cHJvZHVjdE5hbWU6dCxzeW1ib2w6c309ZTtpZihhcGkuYXNzZXJ0KHMmJiJzdHJpbmciPT10eXBlb2YgcyYmdCYmInN0cmluZyI9PXR5cGVvZiB0LCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QodCwiICIpKSYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PTUwLCJpbnZhbGlkIHByb2R1Y3QgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpKXtsZXQgYT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzfSk7YSYmYXBpLmFzc2VydChhLmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpJiYoYS5wcm9kdWN0TmFtZT10LGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGEpKX19LGFjdGlvbnMuYWRkQXV0aG9yaXplZElzc3VpbmdBY2NvdW50cz1hc3luYyBlPT57bGV0e2FjY291bnRzOnQsc3ltYm9sOnMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmF9PWU7aWYoYXBpLmFzc2VydCghMD09PWEsInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHMmJiJzdHJpbmciPT10eXBlb2YgcyYmdCYmIm9iamVjdCI9PXR5cGVvZiB0JiZBcnJheS5pc0FycmF5KHQpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KHQubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBhY2NvdW50cyIpKXtsZXQgbj1pc1ZhbGlkQWNjb3VudHNBcnJheSh0KTtpZihhcGkuYXNzZXJ0KG4sImludmFsaWQgYWNjb3VudCBsaXN0Iikpe2xldCBpPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN9KTtpZihpKXtsZXQgcj1bXTtpZih0LmZvckVhY2goZT0+e2xldCB0PWUudHJpbSgpLnRvTG93ZXJDYXNlKCkscz0hMTtmb3IobGV0IGE9MDthPGkuYXV0aG9yaXplZElzc3VpbmdBY2NvdW50cy5sZW5ndGg7YSs9MSlpZih0PT09aS5hdXRob3JpemVkSXNzdWluZ0FjY291bnRzW2FdKXtzPSEwO2JyZWFrfXN8fHIucHVzaCh0KX0pLGFwaS5hc3NlcnQoaS5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmYXBpLmFzc2VydCghY29udGFpbnNEdXBsaWNhdGVzKHIpLCJjYW5ub3QgYWRkIHRoZSBzYW1lIGFjY291bnQgdHdpY2UiKSYmYXBpLmFzc2VydChpLmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMubGVuZ3RoK3IubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBhY2NvdW50cyIpKXtsZXQgbz1pLmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMuY29uY2F0KHIpO2kuYXV0aG9yaXplZElzc3VpbmdBY2NvdW50cz1vLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGkpfX19fX0sYWN0aW9ucy5hZGRBdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1hc3luYyBlPT57bGV0e2NvbnRyYWN0czp0LHN5bWJvbDpzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTphfT1lO2lmKGFwaS5hc3NlcnQoITA9PT1hLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzJiYic3RyaW5nIj09dHlwZW9mIHMmJnQmJiJvYmplY3QiPT10eXBlb2YgdCYmQXJyYXkuaXNBcnJheSh0KSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydCh0Lmxlbmd0aDw9MTAsImNhbm5vdCBoYXZlIG1vcmUgdGhhbiAxMCBhdXRob3JpemVkIGlzc3VpbmcgY29udHJhY3RzIikpe2xldCBuPWlzVmFsaWRDb250cmFjdHNBcnJheSh0KTtpZihhcGkuYXNzZXJ0KG4sImludmFsaWQgY29udHJhY3QgbGlzdCIpKXtsZXQgaT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzfSk7aWYoaSl7bGV0IHI9W107aWYodC5mb3JFYWNoKGU9PntsZXQgdD1lLnRyaW0oKSxzPSExO2ZvcihsZXQgYT0wO2E8aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cy5sZW5ndGg7YSs9MSlpZih0PT09aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0c1thXSl7cz0hMDticmVha31zfHxyLnB1c2godCl9KSxhcGkuYXNzZXJ0KGkuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJmFwaS5hc3NlcnQoIWNvbnRhaW5zRHVwbGljYXRlcyhyKSwiY2Fubm90IGFkZCB0aGUgc2FtZSBjb250cmFjdCB0d2ljZSIpJiZhcGkuYXNzZXJ0KGkuYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMubGVuZ3RoK3IubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBjb250cmFjdHMiKSl7bGV0IG89aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cy5jb25jYXQocik7aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1vLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGkpfX19fX0sYWN0aW9ucy5yZW1vdmVBdXRob3JpemVkSXNzdWluZ0FjY291bnRzPWFzeW5jIGU9PntsZXR7YWNjb3VudHM6dCxzeW1ib2w6cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6YX09ZTtpZihhcGkuYXNzZXJ0KCEwPT09YSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQocyYmInN0cmluZyI9PXR5cGVvZiBzJiZ0JiYib2JqZWN0Ij09dHlwZW9mIHQmJkFycmF5LmlzQXJyYXkodCksImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQodC5sZW5ndGg8PTEwLCJjYW5ub3QgcmVtb3ZlIG1vcmUgdGhhbiAxMCBhdXRob3JpemVkIGlzc3VpbmcgYWNjb3VudHMiKSl7bGV0IG49aXNWYWxpZEFjY291bnRzQXJyYXkodCk7aWYoYXBpLmFzc2VydChuLCJpbnZhbGlkIGFjY291bnQgbGlzdCIpKXtsZXQgaT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzfSk7aWYoaSYmYXBpLmFzc2VydChpLmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpKXtsZXQgcj1pLmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMuZmlsdGVyKGU9Pntmb3IobGV0IHM9MDtzPHQubGVuZ3RoO3MrPTEpe2xldCBhPXRbc10udHJpbSgpLnRvTG93ZXJDYXNlKCk7aWYoZT09PWEpcmV0dXJuITF9cmV0dXJuITB9KTtpLmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHM9cixhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixpKX19fX0sYWN0aW9ucy5yZW1vdmVBdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1hc3luYyBlPT57bGV0e2NvbnRyYWN0czp0LHN5bWJvbDpzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTphfT1lO2lmKGFwaS5hc3NlcnQoITA9PT1hLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzJiYic3RyaW5nIj09dHlwZW9mIHMmJnQmJiJvYmplY3QiPT10eXBlb2YgdCYmQXJyYXkuaXNBcnJheSh0KSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydCh0Lmxlbmd0aDw9MTAsImNhbm5vdCByZW1vdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBjb250cmFjdHMiKSl7bGV0IG49aXNWYWxpZENvbnRyYWN0c0FycmF5KHQpO2lmKGFwaS5hc3NlcnQobiwiaW52YWxpZCBjb250cmFjdCBsaXN0Iikpe2xldCBpPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN9KTtpZihpJiZhcGkuYXNzZXJ0KGkuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2xldCByPWkuYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMuZmlsdGVyKGU9Pntmb3IobGV0IHM9MDtzPHQubGVuZ3RoO3MrPTEpe2xldCBhPXRbc10udHJpbSgpO2lmKGU9PT1hKXJldHVybiExfXJldHVybiEwfSk7aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1yLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGkpfX19fSxhY3Rpb25zLnRyYW5zZmVyT3duZXJzaGlwPWFzeW5jIGU9PntsZXR7c3ltYm9sOnQsdG86cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6YX09ZTtpZihhcGkuYXNzZXJ0KCEwPT09YSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQodCYmInN0cmluZyI9PXR5cGVvZiB0JiZzJiYic3RyaW5nIj09dHlwZW9mIHMsImludmFsaWQgcGFyYW1zIikpe2xldCBuPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnR9KTtpZihuJiZhcGkuYXNzZXJ0KG4uaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2xldCBpPXMudHJpbSgpLnRvTG93ZXJDYXNlKCk7YXBpLmFzc2VydChpc1ZhbGlkSGl2ZUFjY291bnRMZW5ndGgoaSksImludmFsaWQgdG8iKSYmKG4uaXNzdWVyPWksYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbikpfX19LGFjdGlvbnMuZW5hYmxlRGVsZWdhdGlvbj1hc3luYyBlPT57bGV0e3N5bWJvbDp0LHVuZGVsZWdhdGlvbkNvb2xkb3duOnMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmF9PWUsbj1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSkse2VuYWJsZURlbGVnYXRpb25GZWU6aX09bixyPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOiJCRUUifSksbz0hIWFwaS5CaWdOdW1iZXIoaSkubHRlKDApfHxyJiZhcGkuQmlnTnVtYmVyKHIuYmFsYW5jZSkuZ3RlKGkpO2lmKGFwaS5hc3NlcnQobywieW91IG11c3QgaGF2ZSBlbm91Z2ggdG9rZW5zIHRvIGNvdmVyIGZlZXMiKSYmYXBpLmFzc2VydCghMD09PWEsInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHQmJiJzdHJpbmciPT10eXBlb2YgdCwiaW52YWxpZCBzeW1ib2wiKSYmYXBpLmFzc2VydChzJiZOdW1iZXIuaXNJbnRlZ2VyKHMpJiZzPjAmJnM8PTE4MjUwLCJ1bmRlbGVnYXRpb25Db29sZG93biBtdXN0IGJlIGFuIGludGVnZXIgYmV0d2VlbiAxIGFuZCAxODI1MCIpKXtsZXQgbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDp0fSk7aWYoYXBpLmFzc2VydChudWxsIT09bCwic3ltYm9sIGRvZXMgbm90IGV4aXN0IikmJmFwaS5hc3NlcnQobC5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1sLmRlbGVnYXRpb25FbmFibGVkfHwhMT09PWwuZGVsZWdhdGlvbkVuYWJsZWQsImRlbGVnYXRpb24gYWxyZWFkeSBlbmFibGVkIikpe2lmKGFwaS5CaWdOdW1iZXIoaSkuZ3QoMCkpe2xldCBkPWF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOiJCRUUiLHF1YW50aXR5OmksaXNTaWduZWRXaXRoQWN0aXZlS2V5OmF9KTtpZighaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQoZCxhcGkuc2VuZGVyLCJudWxsIiwiQkVFIixpLCJ0cmFuc2ZlciIpKXJldHVybiExfXJldHVybiBsLmRlbGVnYXRpb25FbmFibGVkPSEwLGwudW5kZWxlZ2F0aW9uQ29vbGRvd249cyxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixsKSwhMH19cmV0dXJuITF9LGFjdGlvbnMudXBkYXRlUHJvcGVydHlEZWZpbml0aW9uPWFzeW5jIGU9PntsZXR7c3ltYm9sOnQsbmFtZTpzLG5ld05hbWU6YSx0eXBlOm4saXNSZWFkT25seTppLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTpyfT1lO2lmKGFwaS5hc3NlcnQoITA9PT1yLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCh0JiYic3RyaW5nIj09dHlwZW9mIHQmJnMmJiJzdHJpbmciPT10eXBlb2YgcywiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChhcGkudmFsaWRhdG9yLmlzQWxwaGFudW1lcmljKHMpJiZzLmxlbmd0aD4wJiZzLmxlbmd0aDw9MjUsImludmFsaWQgbmFtZTogbGV0dGVycyAmIG51bWJlcnMgb25seSwgbWF4IGxlbmd0aCBvZiAyNSIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWF8fCJzdHJpbmciPT10eXBlb2YgYSYmYXBpLnZhbGlkYXRvci5pc0FscGhhbnVtZXJpYyhhKSYmYS5sZW5ndGg+MCYmYS5sZW5ndGg8PTI1LCJpbnZhbGlkIG5ldyBuYW1lOiBsZXR0ZXJzICYgbnVtYmVycyBvbmx5LCBtYXggbGVuZ3RoIG9mIDI1IikmJmFwaS5hc3NlcnQodm9pZCAwPT09bnx8InN0cmluZyI9PXR5cGVvZiBuJiYoIm51bWJlciI9PT1ufHwic3RyaW5nIj09PW58fCJib29sZWFuIj09PW4pLCJpbnZhbGlkIHR5cGU6IG11c3QgYmUgbnVtYmVyLCBzdHJpbmcsIG9yIGJvb2xlYW4iKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1pfHwiYm9vbGVhbiI9PXR5cGVvZiBpLCJpbnZhbGlkIGlzUmVhZE9ubHk6IG11c3QgYmUgdHJ1ZSBvciBmYWxzZSIpKXtsZXQgbz1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDp0fSk7aWYobyYmYXBpLmFzc2VydCgwPT09by5zdXBwbHksImNhbm5vdCBjaGFuZ2UgZGF0YSBwcm9wZXJ0eSBkZWZpbml0aW9uOyB0b2tlbnMgYWxyZWFkeSBpc3N1ZWQiKSYmYXBpLmFzc2VydChzIGluIG8ucHJvcGVydGllcywicHJvcGVydHkgbXVzdCBleGlzdCIpJiZhcGkuYXNzZXJ0KG8uaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2lmKHZvaWQgMCE9PWEmJih2b2lkIDAhPT1vLmdyb3VwQnkmJm8uZ3JvdXBCeS5sZW5ndGg+MCYmIWFwaS5hc3NlcnQoIW8uZ3JvdXBCeS5pbmNsdWRlcyhzKSwiY2Fubm90IGNoYW5nZSBkYXRhIHByb3BlcnR5IG5hbWU7IHByb3BlcnR5IGlzIHBhcnQgb2YgZ3JvdXBCeSIpfHwhYXBpLmFzc2VydChhIT09cywibmV3IG5hbWUgbXVzdCBiZSBkaWZmZXJlbnQgZnJvbSBvbGQgbmFtZSIpfHwhYXBpLmFzc2VydCghKGEgaW4gby5wcm9wZXJ0aWVzKSwidGhlcmUgaXMgYWxyZWFkeSBhIGRhdGEgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4gbmV3IG5hbWUiKSkpcmV0dXJuITE7bGV0IGw9ITEsZD1vLnByb3BlcnRpZXNbc10udHlwZSx1PW8ucHJvcGVydGllc1tzXS5pc1JlYWRPbmx5O3JldHVybiB2b2lkIDAhPT1uJiZuIT09ZCYmKG8ucHJvcGVydGllc1tzXS50eXBlPW4sbD0hMCksdm9pZCAwIT09aSYmaSE9PXUmJihvLnByb3BlcnRpZXNbc10uaXNSZWFkT25seT1pLGw9ITApLHZvaWQgMCE9PWEmJmEhPT1zJiYoby5wcm9wZXJ0aWVzW2FdPW8ucHJvcGVydGllc1tzXSxkZWxldGUgby5wcm9wZXJ0aWVzW3NdLGw9ITApLGwmJihhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixvKSxhcGkuZW1pdCgidXBkYXRlUHJvcGVydHlEZWZpbml0aW9uIix7c3ltYm9sOnQsb3JpZ2luYWxOYW1lOnMsb3JpZ2luYWxUeXBlOmQsb3JpZ2luYWxJc1JlYWRPbmx5OnUsbmV3TmFtZTphLG5ld1R5cGU6bixuZXdJc1JlYWRPbmx5Oml9KSksITB9fXJldHVybiExfSxhY3Rpb25zLmFkZFByb3BlcnR5PWFzeW5jIGU9PntsZXR7c3ltYm9sOnQsbmFtZTpzLHR5cGU6YSxpc1JlYWRPbmx5Om4sYXV0aG9yaXplZEVkaXRpbmdBY2NvdW50czppLGF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzOnIsaXNTaWduZWRXaXRoQWN0aXZlS2V5Om99PWUsbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSkse2RhdGFQcm9wZXJ0eUNyZWF0aW9uRmVlOmR9PWw7aWYoYXBpLmFzc2VydCghMD09PW8sInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHQmJiJzdHJpbmciPT10eXBlb2YgdCYmcyYmInN0cmluZyI9PXR5cGVvZiBzJiYodm9pZCAwPT09bnx8ImJvb2xlYW4iPT10eXBlb2YgbikmJih2b2lkIDA9PT1pfHxpJiYib2JqZWN0Ij09dHlwZW9mIGkmJkFycmF5LmlzQXJyYXkoaSkpJiYodm9pZCAwPT09cnx8ciYmIm9iamVjdCI9PXR5cGVvZiByJiZBcnJheS5pc0FycmF5KHIpKSYmYSYmInN0cmluZyI9PXR5cGVvZiBhLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMocykmJnMubGVuZ3RoPjAmJnMubGVuZ3RoPD0yNSwiaW52YWxpZCBuYW1lOiBsZXR0ZXJzICYgbnVtYmVycyBvbmx5LCBtYXggbGVuZ3RoIG9mIDI1IikmJmFwaS5hc3NlcnQoIm51bWJlciI9PT1hfHwic3RyaW5nIj09PWF8fCJib29sZWFuIj09PWEsImludmFsaWQgdHlwZTogbXVzdCBiZSBudW1iZXIsIHN0cmluZywgb3IgYm9vbGVhbiIpKXtsZXQgdT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDp0fSk7aWYodSYmYXBpLmFzc2VydCghKHMgaW4gdS5wcm9wZXJ0aWVzKSwiY2Fubm90IGFkZCB0aGUgc2FtZSBwcm9wZXJ0eSB0d2ljZSIpJiZhcGkuYXNzZXJ0KHUuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2xldCBjPU9iamVjdC5rZXlzKHUucHJvcGVydGllcykubGVuZ3RoO2lmKGM+PTMpe2xldCBmPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOiJCRUUifSkscD0hIWFwaS5CaWdOdW1iZXIoZCkubHRlKDApfHxmJiZhcGkuQmlnTnVtYmVyKGYuYmFsYW5jZSkuZ3RlKGQpO2lmKCFhcGkuYXNzZXJ0KHAsInlvdSBtdXN0IGhhdmUgZW5vdWdoIHRva2VucyB0byBjb3ZlciB0aGUgY3JlYXRpb24gZmVlcyIpKXJldHVybiExO2lmKGFwaS5CaWdOdW1iZXIoZCkuZ3QoMCkpe2xldCBnPWF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOiJCRUUiLHF1YW50aXR5OmQsaXNTaWduZWRXaXRoQWN0aXZlS2V5Om99KTtpZighaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQoZyxhcGkuc2VuZGVyLCJudWxsIiwiQkVFIixkLCJ0cmFuc2ZlciIpKXJldHVybiExfX1sZXQgeT12b2lkIDAhPT1uJiZuLG09dm9pZCAwPT09aT9bYXBpLnNlbmRlcl06W10sJD17dHlwZTphLGlzUmVhZE9ubHk6eSxhdXRob3JpemVkRWRpdGluZ0FjY291bnRzOm0sYXV0aG9yaXplZEVkaXRpbmdDb250cmFjdHM6W119O3JldHVybiB1LnByb3BlcnRpZXNbc109JCxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIix1KSwoaXx8cikmJmF3YWl0IGFjdGlvbnMuc2V0UHJvcGVydHlQZXJtaXNzaW9ucyh7c3ltYm9sOnQsbmFtZTpzLGFjY291bnRzOmksY29udHJhY3RzOnIsaXNTaWduZWRXaXRoQWN0aXZlS2V5Om99KSwhMH19cmV0dXJuITF9LGFjdGlvbnMuc2V0UHJvcGVydHlQZXJtaXNzaW9ucz1hc3luYyBlPT57bGV0e3N5bWJvbDp0LG5hbWU6cyxhY2NvdW50czphLGNvbnRyYWN0czpuLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppfT1lO2lmKGFwaS5hc3NlcnQoITA9PT1pLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCh0JiYic3RyaW5nIj09dHlwZW9mIHQmJnMmJiJzdHJpbmciPT10eXBlb2YgcyYmKHZvaWQgMD09PWF8fGEmJiJvYmplY3QiPT10eXBlb2YgYSYmQXJyYXkuaXNBcnJheShhKSkmJih2b2lkIDA9PT1ufHxuJiYib2JqZWN0Ij09dHlwZW9mIG4mJkFycmF5LmlzQXJyYXkobikpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMocykmJnMubGVuZ3RoPjAmJnMubGVuZ3RoPD0yNSwiaW52YWxpZCBuYW1lOiBsZXR0ZXJzICYgbnVtYmVycyBvbmx5LCBtYXggbGVuZ3RoIG9mIDI1IikmJmFwaS5hc3NlcnQodm9pZCAwPT09YXx8YS5sZW5ndGg8PTEwLCJjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gMTAgYXV0aG9yaXplZCBhY2NvdW50cyIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PW58fG4ubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgY29udHJhY3RzIikmJmFwaS5hc3NlcnQodm9pZCAwPT09YXx8aXNWYWxpZEFjY291bnRzQXJyYXkoYSksImludmFsaWQgYWNjb3VudCBsaXN0IikmJmFwaS5hc3NlcnQodm9pZCAwPT09bnx8aXNWYWxpZENvbnRyYWN0c0FycmF5KG4pLCJpbnZhbGlkIGNvbnRyYWN0IGxpc3QiKSl7bGV0IHI9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6dH0pO2lmKHImJmFwaS5hc3NlcnQocyBpbiByLnByb3BlcnRpZXMsInByb3BlcnR5IG11c3QgZXhpc3QiKSYmYXBpLmFzc2VydChyLmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpKXtsZXQgbz1bXSxsPVtdO2lmKGEmJihvPWEubWFwKGU9PmUudHJpbSgpLnRvTG93ZXJDYXNlKCkpKSxuJiYobD1uLm1hcChlPT5lLnRyaW0oKSkpLGFwaS5hc3NlcnQodm9pZCAwPT09YXx8IWNvbnRhaW5zRHVwbGljYXRlcyhvKSwiY2Fubm90IGFkZCB0aGUgc2FtZSBhY2NvdW50IHR3aWNlIikmJmFwaS5hc3NlcnQodm9pZCAwPT09bnx8IWNvbnRhaW5zRHVwbGljYXRlcyhsKSwiY2Fubm90IGFkZCB0aGUgc2FtZSBjb250cmFjdCB0d2ljZSIpKXtsZXQgZD0hMTthJiYoci5wcm9wZXJ0aWVzW3NdLmF1dGhvcml6ZWRFZGl0aW5nQWNjb3VudHM9byxkPSEwKSxuJiYoci5wcm9wZXJ0aWVzW3NdLmF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzPWwsZD0hMCksZCYmYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIscil9fX19LGFjdGlvbnMuc2V0R3JvdXBCeT1hc3luYyBlPT57bGV0e3N5bWJvbDp0LHByb3BlcnRpZXM6cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6YX09ZTtpZihhcGkuYXNzZXJ0KCEwPT09YSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQodCYmInN0cmluZyI9PXR5cGVvZiB0JiZzJiYib2JqZWN0Ij09dHlwZW9mIHMmJkFycmF5LmlzQXJyYXkocyksImludmFsaWQgcGFyYW1zIikpe2xldCBuPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnR9KTtpZihuKXtsZXQgaT1PYmplY3Qua2V5cyhuLnByb3BlcnRpZXMpLmxlbmd0aDtpZihhcGkuYXNzZXJ0KG4uaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJmFwaS5hc3NlcnQodm9pZCAwPT09bi5ncm91cEJ5fHwwPT09bi5ncm91cEJ5Lmxlbmd0aCwibGlzdCBpcyBhbHJlYWR5IHNldCIpJiZhcGkuYXNzZXJ0KHMubGVuZ3RoPD1pLCJjYW5ub3Qgc2V0IG1vcmUgZGF0YSBwcm9wZXJ0aWVzIHRoYW4gTkZUIGhhcyIpJiZhcGkuYXNzZXJ0KCFjb250YWluc0R1cGxpY2F0ZXMocyksImxpc3QgY2Fubm90IGNvbnRhaW4gZHVwbGljYXRlcyIpKXtmb3IobGV0IHI9MDtyPHMubGVuZ3RoO3IrPTEpe2xldCBvPXNbcl07aWYoIWFwaS5hc3NlcnQobyYmInN0cmluZyI9PXR5cGVvZiBvJiZvIGluIG4ucHJvcGVydGllcywiZGF0YSBwcm9wZXJ0eSBtdXN0IGV4aXN0IikpcmV0dXJuITF9cmV0dXJuIG4uZ3JvdXBCeT1zLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLG4pLCEwfX19cmV0dXJuITF9LGFjdGlvbnMuc2V0UHJvcGVydGllcz1hc3luYyBlPT57bGV0e3N5bWJvbDp0LGZyb21UeXBlOnMsbmZ0czphLGNhbGxpbmdDb250cmFjdEluZm86bn09ZSxpPVsidXNlciIsImNvbnRyYWN0Il0scj12b2lkIDA9PT1zPyJ1c2VyIjpzO2lmKGFwaS5hc3NlcnQoYSYmIm9iamVjdCI9PXR5cGVvZiBhJiZBcnJheS5pc0FycmF5KGEpJiZyJiYic3RyaW5nIj09dHlwZW9mIHImJmkuaW5jbHVkZXMocikmJnQmJiJzdHJpbmciPT10eXBlb2YgdCYmKG58fHZvaWQgMD09PW4mJiJ1c2VyIj09PXIpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGEubGVuZ3RoPD01MCwiY2Fubm90IHNldCBwcm9wZXJ0aWVzIG9uIG1vcmUgdGhhbiA1MCBORlQgaW5zdGFuY2VzIGF0IG9uY2UiKSl7bGV0IG89InVzZXIiPT09cj9hcGkuc2VuZGVyOm4ubmFtZSxsPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnR9KTtpZihhcGkuYXNzZXJ0KG51bGwhPT1sLCJzeW1ib2wgZG9lcyBub3QgZXhpc3QiKSl7aWYoIWlzVmFsaWREYXRhUHJvcGVydGllc0FycmF5KG8scixsLGEpKXJldHVybiExO2xldCBkPXQrImluc3RhbmNlcyI7Zm9yKGxldCB1PTA7dTxhLmxlbmd0aDt1Kz0xKXtsZXR7aWQ6Yyxwcm9wZXJ0aWVzOmZ9PWFbdV07aWYoMD09PU9iamVjdC5rZXlzKGYpLmxlbmd0aCljb250aW51ZTtsZXQgcD1hd2FpdCBhcGkuZGIuZmluZE9uZShkLHtfaWQ6YXBpLkJpZ051bWJlcihjKS50b051bWJlcigpfSk7aWYoYXBpLmFzc2VydChudWxsIT09cCwibmZ0IGluc3RhbmNlIGRvZXMgbm90IGV4aXN0Iikpe2xldCBnPSExO2ZvcihsZXRbeSxtXW9mIE9iamVjdC5lbnRyaWVzKGYpKXtsZXQgJD1sLnByb3BlcnRpZXNbeV0saD1udWxsOyQuaXNSZWFkT25seT9hcGkuYXNzZXJ0KCEoeSBpbiBwLnByb3BlcnRpZXMpLCJjYW5ub3QgZWRpdCByZWFkLW9ubHkgcHJvcGVydGllcyIpJiYocC5wcm9wZXJ0aWVzW3ldPW0sZz0hMCk6KGg9cC5wcm9wZXJ0aWVzW3ldLHAucHJvcGVydGllc1t5XT1tLGc9ITApLGcmJmghPT1tJiZhd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoIm1pbmluZyIsImhhbmRsZU5mdFNldFByb3BlcnR5Iix7c3ltYm9sOnQsbmZ0OnAscHJvcGVydHlOYW1lOnksb2xkVmFsdWU6aH0pfWcmJmF3YWl0IGFwaS5kYi51cGRhdGUoZCxwKX19cmV0dXJuITB9fXJldHVybiExfSxhY3Rpb25zLmJ1cm49YXN5bmMgZT0+e2xldHtmcm9tVHlwZTp0LG5mdHM6cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6YSxjYWxsaW5nQ29udHJhY3RJbmZvOm59PWUsaT1bInVzZXIiLCJjb250cmFjdCJdLHI9dm9pZCAwPT09dD8idXNlciI6dDtpZihhcGkuYXNzZXJ0KCEwPT09YSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQociYmInN0cmluZyI9PXR5cGVvZiByJiZpLmluY2x1ZGVzKHIpJiYobnx8dm9pZCAwPT09biYmInVzZXIiPT09cikmJnMmJiJvYmplY3QiPT10eXBlb2YgcyYmQXJyYXkuaXNBcnJheShzKSwiaW52YWxpZCBwYXJhbXMiKSYmaXNWYWxpZE5mdElkQXJyYXkocykpe2xldCBvPSJ1c2VyIj09PXI/YXBpLnNlbmRlcjpuLm5hbWUsbD0wLGQ9MCx1PSExO2ZvcihsZXQgYz0wO2M8cy5sZW5ndGg7Yys9MSl7bGV0e3N5bWJvbDpmLGlkczpwfT1zW2NdLGc9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6Zn0pO2lmKGcpe2xldCB5PWYrImluc3RhbmNlcyI7Zm9yKGxldCBtPTA7bTxwLmxlbmd0aDttKz0xKXtsZXQgJD1wW21dLGg9YXdhaXQgYXBpLmRiLmZpbmRPbmUoeSx7X2lkOmFwaS5CaWdOdW1iZXIoJCkudG9OdW1iZXIoKX0pO2lmKGgpe2xldCBiPSEwO2lmKGgubG9ja2VkTmZ0cyYmaC5sb2NrZWROZnRzLmxlbmd0aD4wPygwPT09ZCYmKHU9ITApLCgobCs9MSk+MXx8IXUpJiYoYj0hMSkpOnUmJihiPSExKSxkKz0xLGguYWNjb3VudD09PW8mJigidSI9PT1oLm93bmVkQnkmJiJ1c2VyIj09PXJ8fCJjIj09PWgub3duZWRCeSYmImNvbnRyYWN0Ij09PXIpJiZ2b2lkIDA9PT1oLmRlbGVnYXRlZFRvJiZiKXtsZXQgdj17fSx3PSEwO2ZvcihsZXRbTixfXW9mIE9iamVjdC5lbnRyaWVzKGgubG9ja2VkVG9rZW5zKSl7bGV0IEE9YXdhaXQgYXBpLnRyYW5zZmVyVG9rZW5zKG8sTixfLHIpO2lzVG9rZW5UcmFuc2ZlclZlcmlmaWVkKEEsIm5mdCIsbyxOLF8sInRyYW5zZmVyRnJvbUNvbnRyYWN0Iil8fCh2W05dPV8sdz0hMSl9YXBpLmFzc2VydCh3LGB1bmFibGUgdG8gcmVsZWFzZSBsb2NrZWQgdG9rZW5zIGluOiAke2Z9LCBpZCAkeyR9YCk7bGV0IFQ9aC5sb2NrZWROZnRzJiZoLmxvY2tlZE5mdHMubGVuZ3RoPjA/aC5sb2NrZWROZnRzOltdO2lmKHcmJmgubG9ja2VkTmZ0cyYmaC5sb2NrZWROZnRzLmxlbmd0aD4wKXtsZXQgaz1hd2FpdCB0cmFuc2ZlckFuZFZlcmlmeU5mdHMoIm5mdCIsImNvbnRyYWN0IixvLHIsaC5sb2NrZWROZnRzLGEse25hbWU6Im5mdCJ9KTtoLmxvY2tlZE5mdHM9ay5mYWlsLGgubG9ja2VkTmZ0cy5sZW5ndGg+MCYmKHc9ITEpLGFwaS5hc3NlcnQodyxgdW5hYmxlIHRvIHJlbGVhc2UgbG9ja2VkIE5GVCBpbnN0YW5jZXMgaW46ICR7Zn0sIGlkICR7JH1gKX1sZXQgQj1oLm93bmVkQnksRT1oLmxvY2tlZFRva2VucztoLmxvY2tlZFRva2Vucz12LHcmJihoLnByZXZpb3VzQWNjb3VudD1oLmFjY291bnQsaC5wcmV2aW91c093bmVkQnk9aC5vd25lZEJ5LGguYWNjb3VudD0ibnVsbCIsaC5vd25lZEJ5PSJ1IixnLmNpcmN1bGF0aW5nU3VwcGx5LT0xKSxhd2FpdCBhcGkuZGIudXBkYXRlKHksaCksdyYmYXBpLmVtaXQoImJ1cm4iLHthY2NvdW50Om8sb3duZWRCeTpCLHVubG9ja2VkVG9rZW5zOkUsdW5sb2NrZWROZnRzOlQsc3ltYm9sOmYsaWQ6JH0pfX19YXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsZyl9fX19LGFjdGlvbnMudHJhbnNmZXI9YXN5bmMgZT0+e2xldHtmcm9tVHlwZTp0LHRvOnMsdG9UeXBlOmEsbmZ0czpuLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppLGNhbGxpbmdDb250cmFjdEluZm86cn09ZSxvPVsidXNlciIsImNvbnRyYWN0Il0sbD12b2lkIDA9PT1hPyJ1c2VyIjphLGQ9dm9pZCAwPT09dD8idXNlciI6dDtpZihhcGkuYXNzZXJ0KCEwPT09aSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoZCYmInN0cmluZyI9PXR5cGVvZiBkJiZvLmluY2x1ZGVzKGQpJiZzJiYic3RyaW5nIj09dHlwZW9mIHMmJmwmJiJzdHJpbmciPT10eXBlb2YgbCYmby5pbmNsdWRlcyhsKSYmKHJ8fHZvaWQgMD09PXImJiJ1c2VyIj09PWQpJiZuJiYib2JqZWN0Ij09dHlwZW9mIG4mJkFycmF5LmlzQXJyYXkobiksImludmFsaWQgcGFyYW1zIikmJmlzVmFsaWROZnRJZEFycmF5KG4pKXtsZXQgdT0idXNlciI9PT1sP3MudHJpbSgpLnRvTG93ZXJDYXNlKCk6cy50cmltKCksYz0idXNlciI9PT1sP2lzVmFsaWRIaXZlQWNjb3VudExlbmd0aCh1KTppc1ZhbGlkQ29udHJhY3RMZW5ndGgodSksZj0idXNlciI9PT1kP2FwaS5zZW5kZXI6ci5uYW1lO2lmKGFwaS5hc3NlcnQoYywiaW52YWxpZCB0byIpJiZhcGkuYXNzZXJ0KCEobD09PWQmJnU9PT1mKSwiY2Fubm90IHRyYW5zZmVyIHRvIHNlbGYiKSYmYXBpLmFzc2VydCghKCJ1c2VyIj09PWwmJiJudWxsIj09PXUpLCJjYW5ub3QgdHJhbnNmZXIgdG8gbnVsbDsgdXNlIGJ1cm4gYWN0aW9uIGluc3RlYWQiKSlmb3IobGV0IHA9MDtwPG4ubGVuZ3RoO3ArPTEpe2xldHtzeW1ib2w6ZyxpZHM6eX09bltwXSxtPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOmd9KTtpZihtKXtsZXQgJD1nKyJpbnN0YW5jZXMiO2ZvcihsZXQgaD0wO2g8eS5sZW5ndGg7aCs9MSl7bGV0IGI9eVtoXSx2PWF3YWl0IGFwaS5kYi5maW5kT25lKCQse19pZDphcGkuQmlnTnVtYmVyKGIpLnRvTnVtYmVyKCl9KTtpZih2JiZ2LmFjY291bnQ9PT1mJiYoInUiPT09di5vd25lZEJ5JiYidXNlciI9PT1kfHwiYyI9PT12Lm93bmVkQnkmJiJjb250cmFjdCI9PT1kKSYmdm9pZCAwPT09di5kZWxlZ2F0ZWRUbyYmIXYuc291bEJvdW5kKXtsZXQgdz12Lm93bmVkQnksTj0idXNlciI9PT1sPyJ1IjoiYyI7di5wcmV2aW91c0FjY291bnQ9di5hY2NvdW50LHYucHJldmlvdXNPd25lZEJ5PXYub3duZWRCeSx2LmFjY291bnQ9dSx2Lm93bmVkQnk9Tixhd2FpdCBhcGkuZGIudXBkYXRlKCQsdiksYXBpLmVtaXQoInRyYW5zZmVyIix7ZnJvbTpmLGZyb21UeXBlOncsdG86dSx0b1R5cGU6TixzeW1ib2w6ZyxpZDpifSl9fX19fX0sYWN0aW9ucy5kZWxlZ2F0ZT1hc3luYyBlPT57bGV0e2Zyb21UeXBlOnQsdG86cyx0b1R5cGU6YSxuZnRzOm4saXNTaWduZWRXaXRoQWN0aXZlS2V5OmksY2FsbGluZ0NvbnRyYWN0SW5mbzpyfT1lLG89WyJ1c2VyIiwiY29udHJhY3QiXSxsPXZvaWQgMD09PWE/InVzZXIiOmEsZD12b2lkIDA9PT10PyJ1c2VyIjp0O2lmKGFwaS5hc3NlcnQoITA9PT1pLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChkJiYic3RyaW5nIj09dHlwZW9mIGQmJm8uaW5jbHVkZXMoZCkmJnMmJiJzdHJpbmciPT10eXBlb2YgcyYmbCYmInN0cmluZyI9PXR5cGVvZiBsJiZvLmluY2x1ZGVzKGwpJiYocnx8dm9pZCAwPT09ciYmInVzZXIiPT09ZCkmJm4mJiJvYmplY3QiPT10eXBlb2YgbiYmQXJyYXkuaXNBcnJheShuKSwiaW52YWxpZCBwYXJhbXMiKSYmaXNWYWxpZE5mdElkQXJyYXkobikpe2xldCB1PSJ1c2VyIj09PWw/cy50cmltKCkudG9Mb3dlckNhc2UoKTpzLnRyaW0oKSxjPSJ1c2VyIj09PWw/aXNWYWxpZEhpdmVBY2NvdW50TGVuZ3RoKHUpOmlzVmFsaWRDb250cmFjdExlbmd0aCh1KSxmPSJ1c2VyIj09PWQ/YXBpLnNlbmRlcjpyLm5hbWU7aWYoYXBpLmFzc2VydChjLCJpbnZhbGlkIHRvIikmJmFwaS5hc3NlcnQoIShsPT09ZCYmdT09PWYpLCJjYW5ub3QgZGVsZWdhdGUgdG8gc2VsZiIpJiZhcGkuYXNzZXJ0KCEoInVzZXIiPT09bCYmIm51bGwiPT09dSksImNhbm5vdCBkZWxlZ2F0ZSB0byBudWxsIikpZm9yKGxldCBwPTA7cDxuLmxlbmd0aDtwKz0xKXtsZXR7c3ltYm9sOmcsaWRzOnl9PW5bcF0sbT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpnfSk7aWYobSYmYXBpLmFzc2VydCghMD09PW0uZGVsZWdhdGlvbkVuYWJsZWQsYGRlbGVnYXRpb24gbm90IGVuYWJsZWQgZm9yICR7Z31gKSl7bGV0ICQ9ZysiaW5zdGFuY2VzIjtmb3IobGV0IGg9MDtoPHkubGVuZ3RoO2grPTEpe2xldCBiPXlbaF0sdj1hd2FpdCBhcGkuZGIuZmluZE9uZSgkLHtfaWQ6YXBpLkJpZ051bWJlcihiKS50b051bWJlcigpfSk7aWYodiYmdi5hY2NvdW50PT09ZiYmKCJ1Ij09PXYub3duZWRCeSYmInVzZXIiPT09ZHx8ImMiPT09di5vd25lZEJ5JiYiY29udHJhY3QiPT09ZCkmJnZvaWQgMD09PXYuZGVsZWdhdGVkVG8pe2xldCB3PSJ1c2VyIj09PWw/InUiOiJjIixOPXthY2NvdW50OnUsb3duZWRCeTp3fTt2LmRlbGVnYXRlZFRvPU4sYXdhaXQgYXBpLmRiLnVwZGF0ZSgkLHYpLGFwaS5lbWl0KCJkZWxlZ2F0ZSIse2Zyb206Zixmcm9tVHlwZTp2Lm93bmVkQnksdG86dSx0b1R5cGU6dyxzeW1ib2w6ZyxpZDpifSksYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJtaW5pbmciLCJoYW5kbGVOZnREZWxlZ2F0aW9uQ2hhbmdlIix7c3ltYm9sOmcsbmZ0OnYsYWRkOiEwfSl9fX19fX0sYWN0aW9ucy51bmRlbGVnYXRlPWFzeW5jIGU9PntsZXR7ZnJvbVR5cGU6dCxuZnRzOnMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmEsY2FsbGluZ0NvbnRyYWN0SW5mbzpufT1lLGk9WyJ1c2VyIiwiY29udHJhY3QiXSxyPXZvaWQgMD09PXQ/InVzZXIiOnQ7aWYoYXBpLmFzc2VydCghMD09PWEsInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHImJiJzdHJpbmciPT10eXBlb2YgciYmaS5pbmNsdWRlcyhyKSYmKG58fHZvaWQgMD09PW4mJiJ1c2VyIj09PXIpJiZzJiYib2JqZWN0Ij09dHlwZW9mIHMmJkFycmF5LmlzQXJyYXkocyksImludmFsaWQgcGFyYW1zIikmJmlzVmFsaWROZnRJZEFycmF5KHMpKXtsZXQgbz0idXNlciI9PT1yP2FwaS5zZW5kZXI6bi5uYW1lLGw9bmV3IERhdGUoYCR7YXBpLmhpdmVCbG9ja1RpbWVzdGFtcH0uMDAwWmApO2ZvcihsZXQgZD0wO2Q8cy5sZW5ndGg7ZCs9MSl7bGV0e3N5bWJvbDp1LGlkczpjfT1zW2RdLGY9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6dX0pO2lmKGYmJmFwaS5hc3NlcnQoITA9PT1mLmRlbGVnYXRpb25FbmFibGVkLGBkZWxlZ2F0aW9uIG5vdCBlbmFibGVkIGZvciAke3V9YCkpe2xldCBwPTg2NGU1KmYudW5kZWxlZ2F0aW9uQ29vbGRvd24sZz1sLmdldFRpbWUoKStwLHk9dSsiaW5zdGFuY2VzIixtPXtzeW1ib2w6dSxpZHM6W10sY29tcGxldGVUaW1lc3RhbXA6Z307Zm9yKGxldCAkPTA7JDxjLmxlbmd0aDskKz0xKXtsZXQgaD1jWyRdLGI9YXdhaXQgYXBpLmRiLmZpbmRPbmUoeSx7X2lkOmFwaS5CaWdOdW1iZXIoaCkudG9OdW1iZXIoKX0pO2ImJmIuYWNjb3VudD09PW8mJigidSI9PT1iLm93bmVkQnkmJiJ1c2VyIj09PXJ8fCJjIj09PWIub3duZWRCeSYmImNvbnRyYWN0Ij09PXIpJiZiLmRlbGVnYXRlZFRvJiZ2b2lkIDA9PT1iLmRlbGVnYXRlZFRvLnVuZGVsZWdhdGVBdCYmKGIuZGVsZWdhdGVkVG8udW5kZWxlZ2F0ZUF0PWcsbS5pZHMucHVzaChiLl9pZCksYXdhaXQgYXBpLmRiLnVwZGF0ZSh5LGIpLGFwaS5lbWl0KCJ1bmRlbGVnYXRlU3RhcnQiLHtmcm9tOmIuZGVsZWdhdGVkVG8uYWNjb3VudCxmcm9tVHlwZTpiLmRlbGVnYXRlZFRvLm93bmVkQnksc3ltYm9sOnUsaWQ6aH0pLGF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgibWluaW5nIiwiaGFuZGxlTmZ0RGVsZWdhdGlvbkNoYW5nZSIse3N5bWJvbDp1LG5mdDpiLGFkZDohMX0pKX1tLmlkcy5sZW5ndGg+MCYmYXdhaXQgYXBpLmRiLmluc2VydCgicGVuZGluZ1VuZGVsZWdhdGlvbnMiLG0pfX19fTtjb25zdCBwcm9jZXNzVW5kZWxlZ2F0aW9uPWFzeW5jIGU9PntsZXR7c3ltYm9sOnQsaWRzOnN9PWUsYT10KyJpbnN0YW5jZXMiLG49YXdhaXQgYXBpLmRiLmZpbmQoYSx7X2lkOnskaW46c319LDUwLDAsW3tpbmRleDoiX2lkIixkZXNjZW5kaW5nOiExfV0pO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSs9MSlkZWxldGUgbltpXS5kZWxlZ2F0ZWRUbyxhd2FpdCBhcGkuZGIudXBkYXRlKGEsbltpXSx7ZGVsZWdhdGVkVG86IiJ9KTthd2FpdCBhcGkuZGIucmVtb3ZlKCJwZW5kaW5nVW5kZWxlZ2F0aW9ucyIsZSksYXBpLmVtaXQoInVuZGVsZWdhdGVEb25lIix7c3ltYm9sOnQsaWRzOnN9KX07YWN0aW9ucy5jaGVja1BlbmRpbmdVbmRlbGVnYXRpb25zPWFzeW5jKCk9PntpZihhcGkuYXNzZXJ0KCJudWxsIj09PWFwaS5zZW5kZXIsIm5vdCBhdXRob3JpemVkIikpe2xldCBlPW5ldyBEYXRlKGAke2FwaS5oaXZlQmxvY2tUaW1lc3RhbXB9LjAwMFpgKSx0PWUuZ2V0VGltZSgpLHM9YXdhaXQgYXBpLmRiLmZpbmQoInBlbmRpbmdVbmRlbGVnYXRpb25zIix7Y29tcGxldGVUaW1lc3RhbXA6eyRsdGU6dH19KSxhPXMubGVuZ3RoO2Zvcig7YT4wOyl7Zm9yKGxldCBuPTA7bjxhO24rPTEpe2xldCBpPXNbbl07YXdhaXQgcHJvY2Vzc1VuZGVsZWdhdGlvbihpKX1hPShzPWF3YWl0IGFwaS5kYi5maW5kKCJwZW5kaW5nVW5kZWxlZ2F0aW9ucyIse2NvbXBsZXRlVGltZXN0YW1wOnskbHRlOnR9fSkpLmxlbmd0aH19fSxhY3Rpb25zLmNyZWF0ZT1hc3luYyBlPT57bGV0e25hbWU6dCxvcmdOYW1lOnMscHJvZHVjdE5hbWU6YSxzeW1ib2w6bix1cmw6aSxtYXhTdXBwbHk6cixhdXRob3JpemVkSXNzdWluZ0FjY291bnRzOm8sYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHM6bCxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6ZH09ZSx1PWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KSx7bmZ0Q3JlYXRpb25GZWU6Y309dSxmPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOiJCRUUifSkscD0hIWFwaS5CaWdOdW1iZXIoYykubHRlKDApfHxmJiZhcGkuQmlnTnVtYmVyKGYuYmFsYW5jZSkuZ3RlKGMpO2lmKGFwaS5hc3NlcnQocCwieW91IG11c3QgaGF2ZSBlbm91Z2ggdG9rZW5zIHRvIGNvdmVyIHRoZSBjcmVhdGlvbiBmZWVzIikmJmFwaS5hc3NlcnQoITA9PT1kLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCh0JiYic3RyaW5nIj09dHlwZW9mIHQmJm4mJiJzdHJpbmciPT10eXBlb2YgbiYmKHZvaWQgMD09PWl8fGkmJiJzdHJpbmciPT10eXBlb2YgaSkmJih2b2lkIDA9PT1zfHxzJiYic3RyaW5nIj09dHlwZW9mIHMpJiYodm9pZCAwPT09YXx8YSYmInN0cmluZyI9PXR5cGVvZiBhKSYmKHZvaWQgMD09PW98fG8mJiJvYmplY3QiPT10eXBlb2YgbyYmQXJyYXkuaXNBcnJheShvKSkmJih2b2lkIDA9PT1sfHxsJiYib2JqZWN0Ij09dHlwZW9mIGwmJkFycmF5LmlzQXJyYXkobCkpJiYodm9pZCAwPT09cnx8ciYmInN0cmluZyI9PXR5cGVvZiByJiYhYXBpLkJpZ051bWJlcihyKS5pc05hTigpKSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChhcGkudmFsaWRhdG9yLmlzQWxwaGEobikmJmFwaS52YWxpZGF0b3IuaXNVcHBlcmNhc2UobikmJm4ubGVuZ3RoPjAmJm4ubGVuZ3RoPD0xMCwiaW52YWxpZCBzeW1ib2w6IHVwcGVyY2FzZSBsZXR0ZXJzIG9ubHksIG1heCBsZW5ndGggb2YgMTAiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1SRVNFUlZFRF9TWU1CT0xTW25dfHxhcGkuc2VuZGVyPT09UkVTRVJWRURfU1lNQk9MU1tuXSwiY2Fubm90IHVzZSB0aGlzIHN5bWJvbCIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QodCwiICIpKSYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PTUwLCJpbnZhbGlkIG5hbWU6IGxldHRlcnMsIG51bWJlcnMsIHdoaXRlc3BhY2VzIG9ubHksIG1heCBsZW5ndGggb2YgNTAiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1zfHxhcGkudmFsaWRhdG9yLmlzQWxwaGFudW1lcmljKGFwaS52YWxpZGF0b3IuYmxhY2tsaXN0KHMsIiAiKSkmJnMubGVuZ3RoPjAmJnMubGVuZ3RoPD01MCwiaW52YWxpZCBvcmcgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWF8fGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QoYSwiICIpKSYmYS5sZW5ndGg+MCYmYS5sZW5ndGg8PTUwLCJpbnZhbGlkIHByb2R1Y3QgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWl8fGkubGVuZ3RoPD0yNTUsImludmFsaWQgdXJsOiBtYXggbGVuZ3RoIG9mIDI1NSIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PXJ8fGFwaS5CaWdOdW1iZXIocikuZ3QoMCksIm1heFN1cHBseSBtdXN0IGJlIHBvc2l0aXZlIikmJmFwaS5hc3NlcnQodm9pZCAwPT09cnx8YXBpLkJpZ051bWJlcihyKS5sdGUoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLGBtYXhTdXBwbHkgbXVzdCBiZSBsb3dlciB0aGFuICR7TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJ9YCkpe2xldCBnPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOm59KTtpZihhcGkuYXNzZXJ0KG51bGw9PT1nLCJzeW1ib2wgYWxyZWFkeSBleGlzdHMiKSl7aWYoYXBpLkJpZ051bWJlcihjKS5ndCgwKSl7bGV0IHk9YXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlciIse3RvOiJudWxsIixzeW1ib2w6IkJFRSIscXVhbnRpdHk6Yyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6ZH0pO2lmKCFpc1Rva2VuVHJhbnNmZXJWZXJpZmllZCh5LGFwaS5zZW5kZXIsIm51bGwiLCJCRUUiLGMsInRyYW5zZmVyIikpcmV0dXJuITF9bGV0IG09dm9pZCAwPT09cj8wOmFwaS5CaWdOdW1iZXIocikuaW50ZWdlclZhbHVlKGFwaS5CaWdOdW1iZXIuUk9VTkRfRE9XTikudG9OdW1iZXIoKSwkPXZvaWQgMD09PXM/IiI6cyxoPXZvaWQgMD09PWE/IiI6YSxiPXZvaWQgMD09PWk/IiI6aSx2PXt1cmw6Yn07dj1KU09OLnN0cmluZ2lmeSh2KTtsZXQgdz12b2lkIDA9PT1vP1thcGkuc2VuZGVyXTpbXSxOPXtpc3N1ZXI6YXBpLnNlbmRlcixzeW1ib2w6bixuYW1lOnQsb3JnTmFtZTokLHByb2R1Y3ROYW1lOmgsbWV0YWRhdGE6dixtYXhTdXBwbHk6bSxzdXBwbHk6MCxjaXJjdWxhdGluZ1N1cHBseTowLGRlbGVnYXRpb25FbmFibGVkOiExLHVuZGVsZWdhdGlvbkNvb2xkb3duOjAsYXV0aG9yaXplZElzc3VpbmdBY2NvdW50czp3LGF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzOltdLHByb3BlcnRpZXM6e30sZ3JvdXBCeTpbXX0sXz1uKyJpbnN0YW5jZXMiLEE9YXdhaXQgYXBpLmRiLnRhYmxlRXhpc3RzKF8pO3JldHVybiExPT09QSYmYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKF8sWyJhY2NvdW50Iiwib3duZWRCeSJdKSxhd2FpdCBhcGkuZGIuaW5zZXJ0KCJuZnRzIixOKSx2b2lkIDAhPT1vJiZhd2FpdCBhY3Rpb25zLmFkZEF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMoe2FjY291bnRzOm8sc3ltYm9sOm4saXNTaWduZWRXaXRoQWN0aXZlS2V5OmR9KSx2b2lkIDAhPT1sJiZhd2FpdCBhY3Rpb25zLmFkZEF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzKHtjb250cmFjdHM6bCxzeW1ib2w6bixpc1NpZ25lZFdpdGhBY3RpdmVLZXk6ZH0pLCEwfX1yZXR1cm4hMX0sYWN0aW9ucy5pc3N1ZT1hc3luYyBlPT57bGV0e3N5bWJvbDp0LGZyb21UeXBlOnMsdG86YSx0b1R5cGU6bixmZWVTeW1ib2w6aSxsb2NrVG9rZW5zOnIsbG9ja05mdHM6byxzb3VsQm91bmQ6bCxwcm9wZXJ0aWVzOmQsaXNTaWduZWRXaXRoQWN0aXZlS2V5OnUsY2FsbGluZ0NvbnRyYWN0SW5mbzpjfT1lLGY9WyJ1c2VyIiwiY29udHJhY3QiXSxwPXZvaWQgMD09PW4/InVzZXIiOm4sZz12b2lkIDA9PT1zPyJ1c2VyIjpzLHk9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pLHtuZnRJc3N1YW5jZUZlZTptfT15O2lmKGFwaS5hc3NlcnQoITA9PT11LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCh0JiYic3RyaW5nIj09dHlwZW9mIHQmJmcmJiJzdHJpbmciPT10eXBlb2YgZyYmZi5pbmNsdWRlcyhnKSYmKGN8fHZvaWQgMD09PWMmJiJ1c2VyIj09PWcpJiZhJiYic3RyaW5nIj09dHlwZW9mIGEmJnAmJiJzdHJpbmciPT10eXBlb2YgcCYmZi5pbmNsdWRlcyhwKSYmaSYmInN0cmluZyI9PXR5cGVvZiBpJiZpIGluIG0mJih2b2lkIDA9PT1kfHxkJiYib2JqZWN0Ij09dHlwZW9mIGQpJiYodm9pZCAwPT09cnx8ciYmIm9iamVjdCI9PXR5cGVvZiByKSYmKHZvaWQgMD09PW98fG8mJiJvYmplY3QiPT10eXBlb2YgbyYmQXJyYXkuaXNBcnJheShvKSkmJih2b2lkIDA9PT1sfHxsJiYiYm9vbGVhbiI9PXR5cGVvZiBsKSwiaW52YWxpZCBwYXJhbXMiKSYmKHZvaWQgMD09PW98fGlzVmFsaWROZnRJZEFycmF5KG8pKSl7bGV0ICQ9InVzZXIiPT09cD9hLnRyaW0oKS50b0xvd2VyQ2FzZSgpOmEudHJpbSgpLGg9InVzZXIiPT09cD9pc1ZhbGlkSGl2ZUFjY291bnRMZW5ndGgoJCk6aXNWYWxpZENvbnRyYWN0TGVuZ3RoKCQpLGI9InVzZXIiPT09Zz9hcGkuc2VuZGVyOmMubmFtZSx2PSJ1c2VyIj09PWc/ImJhbGFuY2VzIjoiY29udHJhY3RzQmFsYW5jZXMiO2lmKGFwaS5hc3NlcnQoaCwiaW52YWxpZCB0byIpKXtsZXQgdz1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDp0fSksTj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDppfSk7aWYoYXBpLmFzc2VydChudWxsIT09dywic3ltYm9sIGRvZXMgbm90IGV4aXN0IikmJmFwaS5hc3NlcnQobnVsbCE9PU4sImZlZSBzeW1ib2wgZG9lcyBub3QgZXhpc3QiKSl7bGV0IF89dCsiaW5zdGFuY2VzIjtpZihhcGkuYXNzZXJ0KCJjb250cmFjdCI9PT1nJiZ3LmF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzLmluY2x1ZGVzKGIpfHwidXNlciI9PT1nJiZ3LmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMuaW5jbHVkZXMoYiksIm5vdCBhbGxvd2VkIHRvIGlzc3VlIHRva2VucyIpJiZhcGkuYXNzZXJ0KDA9PT13Lm1heFN1cHBseXx8dy5zdXBwbHk8dy5tYXhTdXBwbHksIm1heCBzdXBwbHkgbGltaXQgcmVhY2hlZCIpKXtsZXQgQT1PYmplY3Qua2V5cyh3LnByb3BlcnRpZXMpLmxlbmd0aCxUPWFwaS5CaWdOdW1iZXIobVtpXSkubXVsdGlwbGllZEJ5KEEpLGs9Y2FsY3VsYXRlQmFsYW5jZShtW2ldLFQsTi5wcmVjaXNpb24sITApLEI9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLHYse2FjY291bnQ6YixzeW1ib2w6aX0pLEU9ISFhcGkuQmlnTnVtYmVyKGspLmx0ZSgwKXx8QiYmYXBpLkJpZ051bWJlcihCLmJhbGFuY2UpLmd0ZShrKTtpZihyKXtsZXQgTz1hd2FpdCBpc1ZhbGlkVG9rZW5CYXNrZXQocix2LGIsaSxrKTtpZighYXBpLmFzc2VydChPLCJpbnZhbGlkIGJhc2tldCBvZiB0b2tlbnMgdG8gbG9jayAoY2Fubm90IGxvY2sgbW9yZSB0aGFuIDEwIHRva2VuIHR5cGVzOyBpc3N1aW5nIGFjY291bnQgbXVzdCBoYXZlIGVub3VnaCBiYWxhbmNlKSIpKXJldHVybiExfWxldCBDPXt9O2lmKHZvaWQgMCE9PWQpe3RyeXtpZighaXNWYWxpZERhdGFQcm9wZXJ0aWVzKGIsZyx3LGQpKXJldHVybiExfWNhdGNoKEkpe3JldHVybiExfUM9ZH1pZihhcGkuYXNzZXJ0KEUsInlvdSBtdXN0IGhhdmUgZW5vdWdoIHRva2VucyB0byBjb3ZlciB0aGUgaXNzdWFuY2UgZmVlcyIpKXtpZihhcGkuQmlnTnVtYmVyKGspLmd0KDApKXtpZigiY29udHJhY3QiPT09Zyl7bGV0IFM9YXdhaXQgYXBpLnRyYW5zZmVyVG9rZW5zRnJvbUNhbGxpbmdDb250cmFjdCgibnVsbCIsaSxrLCJ1c2VyIik7aWYoIWFwaS5hc3NlcnQoaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQoUyxiLCJudWxsIixpLGssInRyYW5zZmVyRnJvbUNvbnRyYWN0IiksInVuYWJsZSB0byB0cmFuc2ZlciBpc3N1YW5jZSBmZWUiKSlyZXR1cm4hMX1lbHNle2xldCBWPWF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOmkscXVhbnRpdHk6ayxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6dX0pO2lmKCFhcGkuYXNzZXJ0KGlzVG9rZW5UcmFuc2ZlclZlcmlmaWVkKFYsYiwibnVsbCIsaSxrLCJ0cmFuc2ZlciIpLCJ1bmFibGUgdG8gdHJhbnNmZXIgaXNzdWFuY2UgZmVlIikpcmV0dXJuITF9fWxldCB4PXt9O2lmKHIpZm9yKGxldFtqLExdb2YgT2JqZWN0LmVudHJpZXMocikpaWYoImNvbnRyYWN0Ij09PWcpe2xldCB6PWF3YWl0IGFwaS50cmFuc2ZlclRva2Vuc0Zyb21DYWxsaW5nQ29udHJhY3QoIm5mdCIsaixMLCJjb250cmFjdCIpO2lzVG9rZW5UcmFuc2ZlclZlcmlmaWVkKHosYiwibmZ0IixqLEwsInRyYW5zZmVyRnJvbUNvbnRyYWN0IikmJih4W2pdPUwpfWVsc2V7bGV0IFI9YXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlclRvQ29udHJhY3QiLHt0bzoibmZ0IixzeW1ib2w6aixxdWFudGl0eTpMLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTp1fSk7aXNUb2tlblRyYW5zZmVyVmVyaWZpZWQoUixiLCJuZnQiLGosTCwidHJhbnNmZXJUb0NvbnRyYWN0IikmJih4W2pdPUwpfWxldCBGPVtdO2lmKG8mJm8ubGVuZ3RoPjApe2xldCBEPWF3YWl0IHRyYW5zZmVyQW5kVmVyaWZ5TmZ0cyhiLGcsIm5mdCIsImNvbnRyYWN0IixvLHUsYyk7Rj1ELnN1Y2Nlc3N9bGV0IE09InVzZXIiPT09cD8idSI6ImMiLFA9e307UD1GLmxlbmd0aD4wP3thY2NvdW50OiQsc291bEJvdW5kOmwsb3duZWRCeTpNLGxvY2tlZFRva2Vuczp4LGxvY2tlZE5mdHM6Rixwcm9wZXJ0aWVzOkN9OnthY2NvdW50OiQsc291bEJvdW5kOmwsb3duZWRCeTpNLGxvY2tlZFRva2Vuczp4LHByb3BlcnRpZXM6Q307bGV0IFU9YXdhaXQgYXBpLmRiLmluc2VydChfLFApO3JldHVybiB3LnN1cHBseSs9MSwoIm51bGwiIT09JHx8ImNvbnRyYWN0Ij09PXApJiYody5jaXJjdWxhdGluZ1N1cHBseSs9MSksYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsdyksYXBpLmVtaXQoImlzc3VlIix7ZnJvbTpiLGZyb21UeXBlOmcsdG86JCx0b1R5cGU6cCxzeW1ib2w6dCxsb2NrZWRUb2tlbnM6eCxsb2NrZWROZnRzOkYsc291bEJvdW5kOiEhbCxwcm9wZXJ0aWVzOkMsaWQ6VS5faWR9KSwhMH19fX19cmV0dXJuITF9LGFjdGlvbnMuaXNzdWVNdWx0aXBsZT1hc3luYyBlPT57bGV0e2luc3RhbmNlczp0LGlzU2lnbmVkV2l0aEFjdGl2ZUtleTpzLGNhbGxpbmdDb250cmFjdEluZm86YX09ZTtpZihhcGkuYXNzZXJ0KCEwPT09cywieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQodCYmIm9iamVjdCI9PXR5cGVvZiB0JiZBcnJheS5pc0FycmF5KHQpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KHQubGVuZ3RoPD0xMCwiY2Fubm90IGlzc3VlIG1vcmUgdGhhbiAxMCBORlQgaW5zdGFuY2VzIGF0IG9uY2UiKSl7bGV0IG49MDtpZih0LmZvckVhY2goZT0+e2UubG9ja05mdHMmJihuKz0xKX0pLGFwaS5hc3NlcnQobjw9MSwiY2Fubm90IGlzc3VlIG1vcmUgdGhhbiAxIGNvbnRhaW5lciBORlQgaW5zdGFuY2VzIGF0IG9uY2UiKSYmYXBpLmFzc2VydCgwPT09bnx8bj09PXQubGVuZ3RoLCJjYW5ub3QgaXNzdWUgYSBtaXggb2YgY29udGFpbmVyIGFuZCBub24tY29udGFpbmVyIE5GVCBpbnN0YW5jZXMgc2ltdWx0YW5lb3VzbHkiKSlmb3IobGV0IGk9MDtpPHQubGVuZ3RoO2krPTEpe2xldHtzeW1ib2w6cixmcm9tVHlwZTpvLHRvOmwsdG9UeXBlOmQsZmVlU3ltYm9sOnUsbG9ja1Rva2VuczpjLHNvdWxCb3VuZDpmLGxvY2tOZnRzOnAscHJvcGVydGllczpnfT10W2ldO2F3YWl0IGFjdGlvbnMuaXNzdWUoe3N5bWJvbDpyLGZyb21UeXBlOm8sdG86bCx0b1R5cGU6ZCxmZWVTeW1ib2w6dSxsb2NrVG9rZW5zOmMsc291bEJvdW5kOmYsbG9ja05mdHM6cCxwcm9wZXJ0aWVzOmcsaXNTaWduZWRXaXRoQWN0aXZlS2V5OnMsY2FsbGluZ0NvbnRyYWN0SW5mbzphfSl9fX07"}}}
{"id":"ssc-testnet-hive","json":{"contractName":"contract","contractAction":"update","contractPayload":{"name":"nft","params":"","code":"Y29uc3QgQ09OVFJBQ1RfTkFNRT0ibmZ0IixVVElMSVRZX1RPS0VOX1NZTUJPTD0iQkVFIixNQVhfTlVNX0FVVEhPUklaRURfSVNTVUVSUz0xMCxNQVhfTlVNX0xPQ0tFRF9UT0tFTl9UWVBFUz0xMCxNQVhfU1lNQk9MX0xFTkdUSD0xMCxNQVhfREFUQV9QUk9QRVJUWV9MRU5HVEg9MTAwLE1BWF9OVU1fTkZUU19JU1NVQUJMRT0xMCxNQVhfTlVNX05GVFNfRURJVEFCTEU9NTAsTUFYX05VTV9ORlRTX09QRVJBQkxFPTUwLE1BWF9OVU1fQ09OVEFJTkVSX05GVFNfT1BFUkFCTEU9MSxSRVNFUlZFRF9TWU1CT0xTPXtDRUxMOiJiZWdnYXJzIixRVVNUOiJzaW1wbGVnYW1lIixURVNURVJBOiJhZ2dyb2VkIixTUVJMOiJzdHVmZmJ5c3BlbmNlciIsQ1JBRlQ6ImltbWFudWVsOTQiLE1VU0lDOiJhdG9tY29sbGVjdG9yIixDR1VMTDoiY2d1bGwiLE5GVDoiY2FkYXdnIixSQVJFOiJiZWdnYXJzIixMSUM6ImxpY3Rva2VuIixNRU1CRVI6Im1lbWJlcnRva2VuIixDT0ZGRUU6ImMwZmYzM2EiLEFSVDoiYnlvIixST0NLOiJiZWdnYXJzIixDUklUVEVSOiJjcnlwdG9tYW5jZXIiLENJVFk6ImdlcmJlciIsTU9OU1RFUlM6InNpbXBsZWdhbWUiLFNFVFM6Imxvb3RraXQuZ2FtZXMiLEFOSU1FOiJhbmltZXRva2VuIixQSE9UT0ZUOiJ3d3dpZWJlIixCRUVSOiJkZXRsZXYiLFNQSVI6InNwaW52ZXN0IixJRkc6Imxpb24yMDAiLEdVSUxEUzoic2ltcGxlZ2FtZSIsRkNBUkQ6Imxpb24yMDAiLFBYTDoicGl4ZWxuZnQiLENPVzoic3R1ZmZieXNwZW5jZXIiLExPT09UOiJzdHVmZmJ5c3BlbmNlciIsQVBJOiJzdGVlbWNpdHlhcGkiLFNQT1JUU01PTToic3BvcnRzdGVzdGVyIixTV1Q6InNhdHJlbiIsU1RBUjoiYXRvbWNvbGxlY3RvciJ9O2FjdGlvbnMuY3JlYXRlU1NDPWFzeW5jKCk9PntsZXQgZT1hd2FpdCBhcGkuZGIudGFibGVFeGlzdHMoIm5mdHMiKTtpZighMT09PWUpe2F3YWl0IGFwaS5kYi5jcmVhdGVUYWJsZSgibmZ0cyIsWyJzeW1ib2wiXSksYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCJwYXJhbXMiKSxhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoInBlbmRpbmdVbmRlbGVnYXRpb25zIixbInN5bWJvbCIsImNvbXBsZXRlVGltZXN0YW1wIl0pO2xldCB0PXt9O3QubmZ0Q3JlYXRpb25GZWU9IjEwMCIsdC5uZnRJc3N1YW5jZUZlZT17QkVFOiIwLjAwMSIsUEFMOiIwLjAwMSJ9LHQuZGF0YVByb3BlcnR5Q3JlYXRpb25GZWU9IjEwMCIsdC5lbmFibGVEZWxlZ2F0aW9uRmVlPSIxMDAwIixhd2FpdCBhcGkuZGIuaW5zZXJ0KCJwYXJhbXMiLHQpfX0sYWN0aW9ucy51cGRhdGVQYXJhbXM9YXN5bmMgZT0+e2lmKGFwaS5zZW5kZXIhPT1hcGkub3duZXIpcmV0dXJuO2xldHtuZnRDcmVhdGlvbkZlZTp0LG5mdElzc3VhbmNlRmVlOnMsZGF0YVByb3BlcnR5Q3JlYXRpb25GZWU6YSxlbmFibGVEZWxlZ2F0aW9uRmVlOm59PWUsaT1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSk7dCYmInN0cmluZyI9PXR5cGVvZiB0JiYhYXBpLkJpZ051bWJlcih0KS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKHQpLmd0ZSgwKSYmKGkubmZ0Q3JlYXRpb25GZWU9dCkscyYmIm9iamVjdCI9PXR5cGVvZiBzJiYoaS5uZnRJc3N1YW5jZUZlZT1zKSxhJiYic3RyaW5nIj09dHlwZW9mIGEmJiFhcGkuQmlnTnVtYmVyKGEpLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIoYSkuZ3RlKDApJiYoaS5kYXRhUHJvcGVydHlDcmVhdGlvbkZlZT1hKSxuJiYic3RyaW5nIj09dHlwZW9mIG4mJiFhcGkuQmlnTnVtYmVyKG4pLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIobikuZ3RlKDApJiYoaS5lbmFibGVEZWxlZ2F0aW9uRmVlPW4pLGF3YWl0IGFwaS5kYi51cGRhdGUoInBhcmFtcyIsaSl9O2NvbnN0IGlzVG9rZW5UcmFuc2ZlclZlcmlmaWVkPShlLHQscyxhLG4saSk9PnZvaWQgMD09PWUuZXJyb3JzJiYhIWUuZXZlbnRzJiZ2b2lkIDAhPT1lLmV2ZW50cy5maW5kKGU9PiJ0b2tlbnMiPT09ZS5jb250cmFjdCYmZS5ldmVudD09PWkmJmUuZGF0YS5mcm9tPT09dCYmZS5kYXRhLnRvPT09cyYmZS5kYXRhLnF1YW50aXR5PT09biYmZS5kYXRhLnN5bWJvbD09PWEpLGNhbGN1bGF0ZUJhbGFuY2U9KGUsdCxzLGEpPT5hP2FwaS5CaWdOdW1iZXIoZSkucGx1cyh0KS50b0ZpeGVkKHMpOmFwaS5CaWdOdW1iZXIoZSkubWludXModCkudG9GaXhlZChzKSxjb3VudERlY2ltYWxzPWU9PmFwaS5CaWdOdW1iZXIoZSkuZHAoKSxjb250YWluc0R1cGxpY2F0ZXM9ZT0+bmV3IFNldChlKS5zaXplIT09ZS5sZW5ndGgsaXNWYWxpZEhpdmVBY2NvdW50TGVuZ3RoPWU9PmUubGVuZ3RoPj0zJiZlLmxlbmd0aDw9MTYsaXNWYWxpZENvbnRyYWN0TGVuZ3RoPWU9PmUubGVuZ3RoPj0zJiZlLmxlbmd0aDw9NTAsaXNWYWxpZEFjY291bnRzQXJyYXk9ZT0+e2xldCB0PSEwO3JldHVybiBlLmZvckVhY2goZT0+eyJzdHJpbmciPT10eXBlb2YgZSYmaXNWYWxpZEhpdmVBY2NvdW50TGVuZ3RoKGUpfHwodD0hMSl9KSx0fSxpc1ZhbGlkQ29udHJhY3RzQXJyYXk9ZT0+e2xldCB0PSEwO3JldHVybiBlLmZvckVhY2goZT0+eyJzdHJpbmciPT10eXBlb2YgZSYmaXNWYWxpZENvbnRyYWN0TGVuZ3RoKGUpfHwodD0hMSl9KSx0fSxpc1ZhbGlkRGF0YVByb3BlcnRpZXM9KGUsdCxzLGEpPT57bGV0IG49T2JqZWN0LmtleXMoYSkubGVuZ3RoLGk9T2JqZWN0LmtleXMocy5wcm9wZXJ0aWVzKS5sZW5ndGg7aWYoIWFwaS5hc3NlcnQobjw9aSwiY2Fubm90IHNldCBtb3JlIGRhdGEgcHJvcGVydGllcyB0aGFuIE5GVCBoYXMiKSlyZXR1cm4hMTtmb3IobGV0W3Isb11vZiBPYmplY3QuZW50cmllcyhhKSl7bGV0IGw9ITE7aWYoYXBpLmFzc2VydChyJiYic3RyaW5nIj09dHlwZW9mIHImJmFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMocikmJnIubGVuZ3RoPjAmJnIubGVuZ3RoPD0yNSwiaW52YWxpZCBkYXRhIHByb3BlcnR5IG5hbWU6IGxldHRlcnMgJiBudW1iZXJzIG9ubHksIG1heCBsZW5ndGggb2YgMjUiKSYmYXBpLmFzc2VydChyIGluIHMucHJvcGVydGllcywiZGF0YSBwcm9wZXJ0eSBtdXN0IGV4aXN0Iikpe2xldCBkPXMucHJvcGVydGllc1tyXTthcGkuYXNzZXJ0KG51bGwhPW8mJih0eXBlb2Ygbz09PWQudHlwZXx8Im51bWJlciI9PT1kLnR5cGUmJiJzdHJpbmciPT10eXBlb2YgbyYmIWFwaS5CaWdOdW1iZXIobykuaXNOYU4oKSksYGRhdGEgcHJvcGVydHkgdHlwZSBtaXNtYXRjaDogZXhwZWN0ZWQgJHtkLnR5cGV9IGJ1dCBnb3QgJHt0eXBlb2Ygb30gZm9yIHByb3BlcnR5ICR7cn1gKSYmYXBpLmFzc2VydCgic3RyaW5nIiE9dHlwZW9mIG98fG8ubGVuZ3RoPD0xMDAsInN0cmluZyBwcm9wZXJ0eSBtYXggbGVuZ3RoIGlzIDEwMCBjaGFyYWN0ZXJzIikmJmFwaS5hc3NlcnQoImNvbnRyYWN0Ij09PXQmJmQuYXV0aG9yaXplZEVkaXRpbmdDb250cmFjdHMuaW5jbHVkZXMoZSl8fCJ1c2VyIj09PXQmJmQuYXV0aG9yaXplZEVkaXRpbmdBY2NvdW50cy5pbmNsdWRlcyhlKSwibm90IGFsbG93ZWQgdG8gc2V0IGRhdGEgcHJvcGVydGllcyIpJiYobD0hMCwibnVtYmVyIj09PWQudHlwZSYmInN0cmluZyI9PXR5cGVvZiBvJiYoYVtyXT1hcGkuQmlnTnVtYmVyKG8pLnRvTnVtYmVyKCkpKX1pZighbClyZXR1cm4hMX1yZXR1cm4hMH0saXNWYWxpZERhdGFQcm9wZXJ0aWVzQXJyYXk9KGUsdCxzLGEpPT57dHJ5e2ZvcihsZXQgbj0wO248YS5sZW5ndGg7bis9MSl7bGV0IGk9ITEse2lkOnIscHJvcGVydGllczpvfT1hW25dO2lmKGFwaS5hc3NlcnQociYmInN0cmluZyI9PXR5cGVvZiByJiYhYXBpLkJpZ051bWJlcihyKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKHIpLmd0KDApJiZvJiYib2JqZWN0Ij09dHlwZW9mIG8sImludmFsaWQgZGF0YSBwcm9wZXJ0aWVzIikmJmlzVmFsaWREYXRhUHJvcGVydGllcyhlLHQscyxvKSYmKGk9ITApLCFpKXJldHVybiExfX1jYXRjaChsKXtyZXR1cm4hMX1yZXR1cm4hMH0saXNWYWxpZE5mdElkQXJyYXk9ZT0+e3RyeXtsZXQgdD0wO2ZvcihsZXQgcz0wO3M8ZS5sZW5ndGg7cys9MSl7bGV0IGE9ITEse3N5bWJvbDpuLGlkczppfT1lW3NdO2lmKGFwaS5hc3NlcnQobiYmInN0cmluZyI9PXR5cGVvZiBuJiZhcGkudmFsaWRhdG9yLmlzQWxwaGEobikmJmFwaS52YWxpZGF0b3IuaXNVcHBlcmNhc2UobikmJm4ubGVuZ3RoPjAmJm4ubGVuZ3RoPD0xMCYmaSYmIm9iamVjdCI9PXR5cGVvZiBpJiZBcnJheS5pc0FycmF5KGkpLCJpbnZhbGlkIG5mdCBsaXN0IikmJih0Kz1pLmxlbmd0aCxhcGkuYXNzZXJ0KHQ8PTUwLCJjYW5ub3Qgb3BlcmF0ZSBvbiBtb3JlIHRoYW4gNTAgTkZUIGluc3RhbmNlcyBhdCBvbmNlIikpKXtmb3IobGV0IHI9MDtyPGkubGVuZ3RoO3IrPTEpe2xldCBvPWlbcl07aWYoIWFwaS5hc3NlcnQobyYmInN0cmluZyI9PXR5cGVvZiBvJiYhYXBpLkJpZ051bWJlcihvKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKG8pLmd0KDApLCJpbnZhbGlkIG5mdCBsaXN0IikpcmV0dXJuITF9YT0hMH1pZighYSlyZXR1cm4hMX19Y2F0Y2gobCl7cmV0dXJuITF9cmV0dXJuITB9LGlzVmFsaWRUb2tlbkJhc2tldD1hc3luYyhlLHQscyxhLG4pPT57dHJ5e2xldCBpPU9iamVjdC5rZXlzKGUpLmxlbmd0aDtpZihpPjEwKXJldHVybiExO2ZvcihsZXRbcixvXW9mIE9iamVjdC5lbnRyaWVzKGUpKXtsZXQgbD0hMTtpZigic3RyaW5nIj09dHlwZW9mIHImJmFwaS52YWxpZGF0b3IuaXNBbHBoYShyKSYmYXBpLnZhbGlkYXRvci5pc1VwcGVyY2FzZShyKSYmci5sZW5ndGg+MCYmci5sZW5ndGg8PTEwKXtsZXQgZD1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpyfSk7aWYoZCYmbyYmInN0cmluZyI9PXR5cGVvZiBvJiYhYXBpLkJpZ051bWJlcihvKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKG8pLmd0KDApJiZjb3VudERlY2ltYWxzKG8pPD1kLnByZWNpc2lvbil7bGV0IHU9cj09PWE/Y2FsY3VsYXRlQmFsYW5jZShvLG4sZC5wcmVjaXNpb24sITApOm8sYz1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsdCx7YWNjb3VudDpzLHN5bWJvbDpyfSk7YyYmYXBpLkJpZ051bWJlcihjLmJhbGFuY2UpLmd0ZSh1KSYmKGw9ITApfX1pZighbClyZXR1cm4hMX19Y2F0Y2goZil7cmV0dXJuITF9cmV0dXJuITB9LHRyYW5zZmVyQW5kVmVyaWZ5TmZ0cz1hc3luYyhlLHQscyxhLG4saSxyKT0+e2xldCBvPXtzdWNjZXNzOltdLGZhaWw6W119LGw9InVzZXIiPT09dD8idSI6ImMiLGQ9InVzZXIiPT09YT8idSI6ImMiO2F3YWl0IGFjdGlvbnMudHJhbnNmZXIoe2Zyb21UeXBlOnQsdG86cyx0b1R5cGU6YSxuZnRzOm4saXNTaWduZWRXaXRoQWN0aXZlS2V5OmksY2FsbGluZ0NvbnRyYWN0SW5mbzpyfSk7bGV0IHU9YXBpLmxvZ3MoKSxjPXt9LGY9e307aWYodS5ldmVudHMpZm9yKGxldCBwPTA7cDx1LmV2ZW50cy5sZW5ndGg7cCs9MSl7bGV0IGc9dS5ldmVudHNbcF07aWYoZy5jb250cmFjdCYmZy5ldmVudCYmZy5kYXRhJiYibmZ0Ij09PWcuY29udHJhY3QmJiJ0cmFuc2ZlciI9PT1nLmV2ZW50JiZnLmRhdGEuZnJvbT09PWUmJmcuZGF0YS5mcm9tVHlwZT09PWwmJmcuZGF0YS50bz09PXMmJmcuZGF0YS50b1R5cGU9PT1kKXtsZXQgeT1nLmRhdGEuc3ltYm9sKyItIitnLmRhdGEuaWQ7Y1t5XT0xfX1mb3IobGV0IG09MDttPG4ubGVuZ3RoO20rPTEpe2xldHtzeW1ib2w6JCxpZHM6aH09blttXSxiPVtdLHY9W107Zm9yKGxldCB3PTA7dzxoLmxlbmd0aDt3Kz0xKXtsZXQgTj0kKyItIitoW3ddO04gaW4gZnx8KE4gaW4gYz9iLnB1c2goaFt3XS50b1N0cmluZygpKTp2LnB1c2goaFt3XS50b1N0cmluZygpKSxmW05dPTEpfWIubGVuZ3RoPjAmJm8uc3VjY2Vzcy5wdXNoKHtzeW1ib2w6JCxpZHM6Yn0pLHYubGVuZ3RoPjAmJm8uZmFpbC5wdXNoKHtzeW1ib2w6JCxpZHM6dn0pfXJldHVybiBvfTthY3Rpb25zLnVwZGF0ZVVybD1hc3luYyBlPT57bGV0e3VybDp0LHN5bWJvbDpzfT1lO2lmKGFwaS5hc3NlcnQocyYmInN0cmluZyI9PXR5cGVvZiBzJiZ0JiYic3RyaW5nIj09dHlwZW9mIHQsImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQodC5sZW5ndGg8PTI1NSwiaW52YWxpZCB1cmw6IG1heCBsZW5ndGggb2YgMjU1Iikpe2xldCBhPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN9KTtpZihhJiZhcGkuYXNzZXJ0KGEuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpdHJ5e2xldCBuPUpTT04ucGFyc2UoYS5tZXRhZGF0YSk7YXBpLmFzc2VydChuJiZuLnVybCwiYW4gZXJyb3Igb2NjdXJlZCB3aGVuIHRyeWluZyB0byB1cGRhdGUgdGhlIHVybCIpJiYobi51cmw9dCxhLm1ldGFkYXRhPUpTT04uc3RyaW5naWZ5KG4pLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGEpKX1jYXRjaChpKXt9fX0sYWN0aW9ucy51cGRhdGVNZXRhZGF0YT1hc3luYyBlPT57bGV0e21ldGFkYXRhOnQsc3ltYm9sOnN9PWU7aWYoYXBpLmFzc2VydChzJiYic3RyaW5nIj09dHlwZW9mIHMmJnQmJiJvYmplY3QiPT10eXBlb2YgdCwiaW52YWxpZCBwYXJhbXMiKSl7bGV0IGE9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c30pO2lmKGEmJmFwaS5hc3NlcnQoYS5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSl0cnl7bGV0IG49SlNPTi5zdHJpbmdpZnkodCk7YXBpLmFzc2VydChuLmxlbmd0aDw9MWUzLCJpbnZhbGlkIG1ldGFkYXRhOiBtYXggbGVuZ3RoIG9mIDEwMDAiKSYmKGEubWV0YWRhdGE9bixhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixhKSl9Y2F0Y2goaSl7fX19LGFjdGlvbnMudXBkYXRlTmFtZT1hc3luYyBlPT57bGV0e25hbWU6dCxzeW1ib2w6c309ZTtpZihhcGkuYXNzZXJ0KHMmJiJzdHJpbmciPT10eXBlb2YgcyYmdCYmInN0cmluZyI9PXR5cGVvZiB0LCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QodCwiICIpKSYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PTUwLCJpbnZhbGlkIG5hbWU6IGxldHRlcnMsIG51bWJlcnMsIHdoaXRlc3BhY2VzIG9ubHksIG1heCBsZW5ndGggb2YgNTAiKSl7bGV0IGE9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c30pO2EmJmFwaS5hc3NlcnQoYS5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmKGEubmFtZT10LGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGEpKX19LGFjdGlvbnMudXBkYXRlT3JnTmFtZT1hc3luYyBlPT57bGV0e29yZ05hbWU6dCxzeW1ib2w6c309ZTtpZihhcGkuYXNzZXJ0KHMmJiJzdHJpbmciPT10eXBlb2YgcyYmdCYmInN0cmluZyI9PXR5cGVvZiB0LCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QodCwiICIpKSYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PTUwLCJpbnZhbGlkIG9yZyBuYW1lOiBsZXR0ZXJzLCBudW1iZXJzLCB3aGl0ZXNwYWNlcyBvbmx5LCBtYXggbGVuZ3RoIG9mIDUwIikpe2xldCBhPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN9KTthJiZhcGkuYXNzZXJ0KGEuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJihhLm9yZ05hbWU9dCxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixhKSl9fSxhY3Rpb25zLnVwZGF0ZVByb2R1Y3ROYW1lPWFzeW5jIGU9PntsZXR7cHJvZHVjdE5hbWU6dCxzeW1ib2w6c309ZTtpZihhcGkuYXNzZXJ0KHMmJiJzdHJpbmciPT10eXBlb2YgcyYmdCYmInN0cmluZyI9PXR5cGVvZiB0LCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QodCwiICIpKSYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PTUwLCJpbnZhbGlkIHByb2R1Y3QgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpKXtsZXQgYT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzfSk7YSYmYXBpLmFzc2VydChhLmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpJiYoYS5wcm9kdWN0TmFtZT10LGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGEpKX19LGFjdGlvbnMuYWRkQXV0aG9yaXplZElzc3VpbmdBY2NvdW50cz1hc3luYyBlPT57bGV0e2FjY291bnRzOnQsc3ltYm9sOnMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmF9PWU7aWYoYXBpLmFzc2VydCghMD09PWEsInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHMmJiJzdHJpbmciPT10eXBlb2YgcyYmdCYmIm9iamVjdCI9PXR5cGVvZiB0JiZBcnJheS5pc0FycmF5KHQpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KHQubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBhY2NvdW50cyIpKXtsZXQgbj1pc1ZhbGlkQWNjb3VudHNBcnJheSh0KTtpZihhcGkuYXNzZXJ0KG4sImludmFsaWQgYWNjb3VudCBsaXN0Iikpe2xldCBpPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN9KTtpZihpKXtsZXQgcj1bXTtpZih0LmZvckVhY2goZT0+e2xldCB0PWUudHJpbSgpLnRvTG93ZXJDYXNlKCkscz0hMTtmb3IobGV0IGE9MDthPGkuYXV0aG9yaXplZElzc3VpbmdBY2NvdW50cy5sZW5ndGg7YSs9MSlpZih0PT09aS5hdXRob3JpemVkSXNzdWluZ0FjY291bnRzW2FdKXtzPSEwO2JyZWFrfXN8fHIucHVzaCh0KX0pLGFwaS5hc3NlcnQoaS5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmYXBpLmFzc2VydCghY29udGFpbnNEdXBsaWNhdGVzKHIpLCJjYW5ub3QgYWRkIHRoZSBzYW1lIGFjY291bnQgdHdpY2UiKSYmYXBpLmFzc2VydChpLmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMubGVuZ3RoK3IubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBhY2NvdW50cyIpKXtsZXQgbz1pLmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMuY29uY2F0KHIpO2kuYXV0aG9yaXplZElzc3VpbmdBY2NvdW50cz1vLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGkpfX19fX0sYWN0aW9ucy5hZGRBdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1hc3luYyBlPT57bGV0e2NvbnRyYWN0czp0LHN5bWJvbDpzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTphfT1lO2lmKGFwaS5hc3NlcnQoITA9PT1hLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzJiYic3RyaW5nIj09dHlwZW9mIHMmJnQmJiJvYmplY3QiPT10eXBlb2YgdCYmQXJyYXkuaXNBcnJheSh0KSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydCh0Lmxlbmd0aDw9MTAsImNhbm5vdCBoYXZlIG1vcmUgdGhhbiAxMCBhdXRob3JpemVkIGlzc3VpbmcgY29udHJhY3RzIikpe2xldCBuPWlzVmFsaWRDb250cmFjdHNBcnJheSh0KTtpZihhcGkuYXNzZXJ0KG4sImludmFsaWQgY29udHJhY3QgbGlzdCIpKXtsZXQgaT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzfSk7aWYoaSl7bGV0IHI9W107aWYodC5mb3JFYWNoKGU9PntsZXQgdD1lLnRyaW0oKSxzPSExO2ZvcihsZXQgYT0wO2E8aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cy5sZW5ndGg7YSs9MSlpZih0PT09aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0c1thXSl7cz0hMDticmVha31zfHxyLnB1c2godCl9KSxhcGkuYXNzZXJ0KGkuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJmFwaS5hc3NlcnQoIWNvbnRhaW5zRHVwbGljYXRlcyhyKSwiY2Fubm90IGFkZCB0aGUgc2FtZSBjb250cmFjdCB0d2ljZSIpJiZhcGkuYXNzZXJ0KGkuYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMubGVuZ3RoK3IubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBjb250cmFjdHMiKSl7bGV0IG89aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cy5jb25jYXQocik7aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1vLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGkpfX19fX0sYWN0aW9ucy5yZW1vdmVBdXRob3JpemVkSXNzdWluZ0FjY291bnRzPWFzeW5jIGU9PntsZXR7YWNjb3VudHM6dCxzeW1ib2w6cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6YX09ZTtpZihhcGkuYXNzZXJ0KCEwPT09YSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQocyYmInN0cmluZyI9PXR5cGVvZiBzJiZ0JiYib2JqZWN0Ij09dHlwZW9mIHQmJkFycmF5LmlzQXJyYXkodCksImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQodC5sZW5ndGg8PTEwLCJjYW5ub3QgcmVtb3ZlIG1vcmUgdGhhbiAxMCBhdXRob3JpemVkIGlzc3VpbmcgYWNjb3VudHMiKSl7bGV0IG49aXNWYWxpZEFjY291bnRzQXJyYXkodCk7aWYoYXBpLmFzc2VydChuLCJpbnZhbGlkIGFjY291bnQgbGlzdCIpKXtsZXQgaT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzfSk7aWYoaSYmYXBpLmFzc2VydChpLmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpKXtsZXQgcj1pLmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMuZmlsdGVyKGU9Pntmb3IobGV0IHM9MDtzPHQubGVuZ3RoO3MrPTEpe2xldCBhPXRbc10udHJpbSgpLnRvTG93ZXJDYXNlKCk7aWYoZT09PWEpcmV0dXJuITF9cmV0dXJuITB9KTtpLmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHM9cixhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixpKX19fX0sYWN0aW9ucy5yZW1vdmVBdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1hc3luYyBlPT57bGV0e2NvbnRyYWN0czp0LHN5bWJvbDpzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTphfT1lO2lmKGFwaS5hc3NlcnQoITA9PT1hLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzJiYic3RyaW5nIj09dHlwZW9mIHMmJnQmJiJvYmplY3QiPT10eXBlb2YgdCYmQXJyYXkuaXNBcnJheSh0KSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydCh0Lmxlbmd0aDw9MTAsImNhbm5vdCByZW1vdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBjb250cmFjdHMiKSl7bGV0IG49aXNWYWxpZENvbnRyYWN0c0FycmF5KHQpO2lmKGFwaS5hc3NlcnQobiwiaW52YWxpZCBjb250cmFjdCBsaXN0Iikpe2xldCBpPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN9KTtpZihpJiZhcGkuYXNzZXJ0KGkuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2xldCByPWkuYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMuZmlsdGVyKGU9Pntmb3IobGV0IHM9MDtzPHQubGVuZ3RoO3MrPTEpe2xldCBhPXRbc10udHJpbSgpO2lmKGU9PT1hKXJldHVybiExfXJldHVybiEwfSk7aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1yLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGkpfX19fSxhY3Rpb25zLnRyYW5zZmVyT3duZXJzaGlwPWFzeW5jIGU9PntsZXR7c3ltYm9sOnQsdG86cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6YX09ZTtpZihhcGkuYXNzZXJ0KCEwPT09YSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQodCYmInN0cmluZyI9PXR5cGVvZiB0JiZzJiYic3RyaW5nIj09dHlwZW9mIHMsImludmFsaWQgcGFyYW1zIikpe2xldCBuPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnR9KTtpZihuJiZhcGkuYXNzZXJ0KG4uaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2xldCBpPXMudHJpbSgpLnRvTG93ZXJDYXNlKCk7YXBpLmFzc2VydChpc1ZhbGlkSGl2ZUFjY291bnRMZW5ndGgoaSksImludmFsaWQgdG8iKSYmKG4uaXNzdWVyPWksYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbikpfX19LGFjdGlvbnMuZW5hYmxlRGVsZWdhdGlvbj1hc3luYyBlPT57bGV0e3N5bWJvbDp0LHVuZGVsZWdhdGlvbkNvb2xkb3duOnMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmF9PWUsbj1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSkse2VuYWJsZURlbGVnYXRpb25GZWU6aX09bixyPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOiJCRUUifSksbz0hIWFwaS5CaWdOdW1iZXIoaSkubHRlKDApfHxyJiZhcGkuQmlnTnVtYmVyKHIuYmFsYW5jZSkuZ3RlKGkpO2lmKGFwaS5hc3NlcnQobywieW91IG11c3QgaGF2ZSBlbm91Z2ggdG9rZW5zIHRvIGNvdmVyIGZlZXMiKSYmYXBpLmFzc2VydCghMD09PWEsInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHQmJiJzdHJpbmciPT10eXBlb2YgdCwiaW52YWxpZCBzeW1ib2wiKSYmYXBpLmFzc2VydChzJiZOdW1iZXIuaXNJbnRlZ2VyKHMpJiZzPjAmJnM8PTE4MjUwLCJ1bmRlbGVnYXRpb25Db29sZG93biBtdXN0IGJlIGFuIGludGVnZXIgYmV0d2VlbiAxIGFuZCAxODI1MCIpKXtsZXQgbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDp0fSk7aWYoYXBpLmFzc2VydChudWxsIT09bCwic3ltYm9sIGRvZXMgbm90IGV4aXN0IikmJmFwaS5hc3NlcnQobC5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1sLmRlbGVnYXRpb25FbmFibGVkfHwhMT09PWwuZGVsZWdhdGlvbkVuYWJsZWQsImRlbGVnYXRpb24gYWxyZWFkeSBlbmFibGVkIikpe2lmKGFwaS5CaWdOdW1iZXIoaSkuZ3QoMCkpe2xldCBkPWF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOiJCRUUiLHF1YW50aXR5OmksaXNTaWduZWRXaXRoQWN0aXZlS2V5OmF9KTtpZighaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQoZCxhcGkuc2VuZGVyLCJudWxsIiwiQkVFIixpLCJ0cmFuc2ZlciIpKXJldHVybiExfXJldHVybiBsLmRlbGVnYXRpb25FbmFibGVkPSEwLGwudW5kZWxlZ2F0aW9uQ29vbGRvd249cyxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixsKSwhMH19cmV0dXJuITF9LGFjdGlvbnMudXBkYXRlUHJvcGVydHlEZWZpbml0aW9uPWFzeW5jIGU9PntsZXR7c3ltYm9sOnQsbmFtZTpzLG5ld05hbWU6YSx0eXBlOm4saXNSZWFkT25seTppLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTpyfT1lO2lmKGFwaS5hc3NlcnQoITA9PT1yLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCh0JiYic3RyaW5nIj09dHlwZW9mIHQmJnMmJiJzdHJpbmciPT10eXBlb2YgcywiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChhcGkudmFsaWRhdG9yLmlzQWxwaGFudW1lcmljKHMpJiZzLmxlbmd0aD4wJiZzLmxlbmd0aDw9MjUsImludmFsaWQgbmFtZTogbGV0dGVycyAmIG51bWJlcnMgb25seSwgbWF4IGxlbmd0aCBvZiAyNSIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWF8fCJzdHJpbmciPT10eXBlb2YgYSYmYXBpLnZhbGlkYXRvci5pc0FscGhhbnVtZXJpYyhhKSYmYS5sZW5ndGg+MCYmYS5sZW5ndGg8PTI1LCJpbnZhbGlkIG5ldyBuYW1lOiBsZXR0ZXJzICYgbnVtYmVycyBvbmx5LCBtYXggbGVuZ3RoIG9mIDI1IikmJmFwaS5hc3NlcnQodm9pZCAwPT09bnx8InN0cmluZyI9PXR5cGVvZiBuJiYoIm51bWJlciI9PT1ufHwic3RyaW5nIj09PW58fCJib29sZWFuIj09PW4pLCJpbnZhbGlkIHR5cGU6IG11c3QgYmUgbnVtYmVyLCBzdHJpbmcsIG9yIGJvb2xlYW4iKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1pfHwiYm9vbGVhbiI9PXR5cGVvZiBpLCJpbnZhbGlkIGlzUmVhZE9ubHk6IG11c3QgYmUgdHJ1ZSBvciBmYWxzZSIpKXtsZXQgbz1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDp0fSk7aWYobyYmYXBpLmFzc2VydCgwPT09by5zdXBwbHksImNhbm5vdCBjaGFuZ2UgZGF0YSBwcm9wZXJ0eSBkZWZpbml0aW9uOyB0b2tlbnMgYWxyZWFkeSBpc3N1ZWQiKSYmYXBpLmFzc2VydChzIGluIG8ucHJvcGVydGllcywicHJvcGVydHkgbXVzdCBleGlzdCIpJiZhcGkuYXNzZXJ0KG8uaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2lmKHZvaWQgMCE9PWEmJih2b2lkIDAhPT1vLmdyb3VwQnkmJm8uZ3JvdXBCeS5sZW5ndGg+MCYmIWFwaS5hc3NlcnQoIW8uZ3JvdXBCeS5pbmNsdWRlcyhzKSwiY2Fubm90IGNoYW5nZSBkYXRhIHByb3BlcnR5IG5hbWU7IHByb3BlcnR5IGlzIHBhcnQgb2YgZ3JvdXBCeSIpfHwhYXBpLmFzc2VydChhIT09cywibmV3IG5hbWUgbXVzdCBiZSBkaWZmZXJlbnQgZnJvbSBvbGQgbmFtZSIpfHwhYXBpLmFzc2VydCghKGEgaW4gby5wcm9wZXJ0aWVzKSwidGhlcmUgaXMgYWxyZWFkeSBhIGRhdGEgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4gbmV3IG5hbWUiKSkpcmV0dXJuITE7bGV0IGw9ITEsZD1vLnByb3BlcnRpZXNbc10udHlwZSx1PW8ucHJvcGVydGllc1tzXS5pc1JlYWRPbmx5O3JldHVybiB2b2lkIDAhPT1uJiZuIT09ZCYmKG8ucHJvcGVydGllc1tzXS50eXBlPW4sbD0hMCksdm9pZCAwIT09aSYmaSE9PXUmJihvLnByb3BlcnRpZXNbc10uaXNSZWFkT25seT1pLGw9ITApLHZvaWQgMCE9PWEmJmEhPT1zJiYoby5wcm9wZXJ0aWVzW2FdPW8ucHJvcGVydGllc1tzXSxkZWxldGUgby5wcm9wZXJ0aWVzW3NdLGw9ITApLGwmJihhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixvKSxhcGkuZW1pdCgidXBkYXRlUHJvcGVydHlEZWZpbml0aW9uIix7c3ltYm9sOnQsb3JpZ2luYWxOYW1lOnMsb3JpZ2luYWxUeXBlOmQsb3JpZ2luYWxJc1JlYWRPbmx5OnUsbmV3TmFtZTphLG5ld1R5cGU6bixuZXdJc1JlYWRPbmx5Oml9KSksITB9fXJldHVybiExfSxhY3Rpb25zLmFkZFByb3BlcnR5PWFzeW5jIGU9PntsZXR7c3ltYm9sOnQsbmFtZTpzLHR5cGU6YSxpc1JlYWRPbmx5Om4sYXV0aG9yaXplZEVkaXRpbmdBY2NvdW50czppLGF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzOnIsaXNTaWduZWRXaXRoQWN0aXZlS2V5Om99PWUsbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSkse2RhdGFQcm9wZXJ0eUNyZWF0aW9uRmVlOmR9PWw7aWYoYXBpLmFzc2VydCghMD09PW8sInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHQmJiJzdHJpbmciPT10eXBlb2YgdCYmcyYmInN0cmluZyI9PXR5cGVvZiBzJiYodm9pZCAwPT09bnx8ImJvb2xlYW4iPT10eXBlb2YgbikmJih2b2lkIDA9PT1pfHxpJiYib2JqZWN0Ij09dHlwZW9mIGkmJkFycmF5LmlzQXJyYXkoaSkpJiYodm9pZCAwPT09cnx8ciYmIm9iamVjdCI9PXR5cGVvZiByJiZBcnJheS5pc0FycmF5KHIpKSYmYSYmInN0cmluZyI9PXR5cGVvZiBhLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMocykmJnMubGVuZ3RoPjAmJnMubGVuZ3RoPD0yNSwiaW52YWxpZCBuYW1lOiBsZXR0ZXJzICYgbnVtYmVycyBvbmx5LCBtYXggbGVuZ3RoIG9mIDI1IikmJmFwaS5hc3NlcnQoIm51bWJlciI9PT1hfHwic3RyaW5nIj09PWF8fCJib29sZWFuIj09PWEsImludmFsaWQgdHlwZTogbXVzdCBiZSBudW1iZXIsIHN0cmluZywgb3IgYm9vbGVhbiIpKXtsZXQgdT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDp0fSk7aWYodSYmYXBpLmFzc2VydCghKHMgaW4gdS5wcm9wZXJ0aWVzKSwiY2Fubm90IGFkZCB0aGUgc2FtZSBwcm9wZXJ0eSB0d2ljZSIpJiZhcGkuYXNzZXJ0KHUuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2xldCBjPU9iamVjdC5rZXlzKHUucHJvcGVydGllcykubGVuZ3RoO2lmKGM+PTMpe2xldCBmPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOiJCRUUifSkscD0hIWFwaS5CaWdOdW1iZXIoZCkubHRlKDApfHxmJiZhcGkuQmlnTnVtYmVyKGYuYmFsYW5jZSkuZ3RlKGQpO2lmKCFhcGkuYXNzZXJ0KHAsInlvdSBtdXN0IGhhdmUgZW5vdWdoIHRva2VucyB0byBjb3ZlciB0aGUgY3JlYXRpb24gZmVlcyIpKXJldHVybiExO2lmKGFwaS5CaWdOdW1iZXIoZCkuZ3QoMCkpe2xldCBnPWF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOiJCRUUiLHF1YW50aXR5OmQsaXNTaWduZWRXaXRoQWN0aXZlS2V5Om99KTtpZighaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQoZyxhcGkuc2VuZGVyLCJudWxsIiwiQkVFIixkLCJ0cmFuc2ZlciIpKXJldHVybiExfX1sZXQgeT12b2lkIDAhPT1uJiZuLG09dm9pZCAwPT09aT9bYXBpLnNlbmRlcl06W10sJD17dHlwZTphLGlzUmVhZE9ubHk6eSxhdXRob3JpemVkRWRpdGluZ0FjY291bnRzOm0sYXV0aG9yaXplZEVkaXRpbmdDb250cmFjdHM6W119O3JldHVybiB1LnByb3BlcnRpZXNbc109JCxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIix1KSwoaXx8cikmJmF3YWl0IGFjdGlvbnMuc2V0UHJvcGVydHlQZXJtaXNzaW9ucyh7c3ltYm9sOnQsbmFtZTpzLGFjY291bnRzOmksY29udHJhY3RzOnIsaXNTaWduZWRXaXRoQWN0aXZlS2V5Om99KSwhMH19cmV0dXJuITF9LGFjdGlvbnMuc2V0UHJvcGVydHlQZXJtaXNzaW9ucz1hc3luYyBlPT57bGV0e3N5bWJvbDp0LG5hbWU6cyxhY2NvdW50czphLGNvbnRyYWN0czpuLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppfT1lO2lmKGFwaS5hc3NlcnQoITA9PT1pLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCh0JiYic3RyaW5nIj09dHlwZW9mIHQmJnMmJiJzdHJpbmciPT10eXBlb2YgcyYmKHZvaWQgMD09PWF8fGEmJiJvYmplY3QiPT10eXBlb2YgYSYmQXJyYXkuaXNBcnJheShhKSkmJih2b2lkIDA9PT1ufHxuJiYib2JqZWN0Ij09dHlwZW9mIG4mJkFycmF5LmlzQXJyYXkobikpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMocykmJnMubGVuZ3RoPjAmJnMubGVuZ3RoPD0yNSwiaW52YWxpZCBuYW1lOiBsZXR0ZXJzICYgbnVtYmVycyBvbmx5LCBtYXggbGVuZ3RoIG9mIDI1IikmJmFwaS5hc3NlcnQodm9pZCAwPT09YXx8YS5sZW5ndGg8PTEwLCJjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gMTAgYXV0aG9yaXplZCBhY2NvdW50cyIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PW58fG4ubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgY29udHJhY3RzIikmJmFwaS5hc3NlcnQodm9pZCAwPT09YXx8aXNWYWxpZEFjY291bnRzQXJyYXkoYSksImludmFsaWQgYWNjb3VudCBsaXN0IikmJmFwaS5hc3NlcnQodm9pZCAwPT09bnx8aXNWYWxpZENvbnRyYWN0c0FycmF5KG4pLCJpbnZhbGlkIGNvbnRyYWN0IGxpc3QiKSl7bGV0IHI9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6dH0pO2lmKHImJmFwaS5hc3NlcnQocyBpbiByLnByb3BlcnRpZXMsInByb3BlcnR5IG11c3QgZXhpc3QiKSYmYXBpLmFzc2VydChyLmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpKXtsZXQgbz1bXSxsPVtdO2lmKGEmJihvPWEubWFwKGU9PmUudHJpbSgpLnRvTG93ZXJDYXNlKCkpKSxuJiYobD1uLm1hcChlPT5lLnRyaW0oKSkpLGFwaS5hc3NlcnQodm9pZCAwPT09YXx8IWNvbnRhaW5zRHVwbGljYXRlcyhvKSwiY2Fubm90IGFkZCB0aGUgc2FtZSBhY2NvdW50IHR3aWNlIikmJmFwaS5hc3NlcnQodm9pZCAwPT09bnx8IWNvbnRhaW5zRHVwbGljYXRlcyhsKSwiY2Fubm90IGFkZCB0aGUgc2FtZSBjb250cmFjdCB0d2ljZSIpKXtsZXQgZD0hMTthJiYoci5wcm9wZXJ0aWVzW3NdLmF1dGhvcml6ZWRFZGl0aW5nQWNjb3VudHM9byxkPSEwKSxuJiYoci5wcm9wZXJ0aWVzW3NdLmF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzPWwsZD0hMCksZCYmYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIscil9fX19LGFjdGlvbnMuc2V0R3JvdXBCeT1hc3luYyBlPT57bGV0e3N5bWJvbDp0LHByb3BlcnRpZXM6cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6YX09ZTtpZihhcGkuYXNzZXJ0KCEwPT09YSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQodCYmInN0cmluZyI9PXR5cGVvZiB0JiZzJiYib2JqZWN0Ij09dHlwZW9mIHMmJkFycmF5LmlzQXJyYXkocyksImludmFsaWQgcGFyYW1zIikpe2xldCBuPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnR9KTtpZihuKXtsZXQgaT1PYmplY3Qua2V5cyhuLnByb3BlcnRpZXMpLmxlbmd0aDtpZihhcGkuYXNzZXJ0KG4uaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJmFwaS5hc3NlcnQodm9pZCAwPT09bi5ncm91cEJ5fHwwPT09bi5ncm91cEJ5Lmxlbmd0aCwibGlzdCBpcyBhbHJlYWR5IHNldCIpJiZhcGkuYXNzZXJ0KHMubGVuZ3RoPD1pLCJjYW5ub3Qgc2V0IG1vcmUgZGF0YSBwcm9wZXJ0aWVzIHRoYW4gTkZUIGhhcyIpJiZhcGkuYXNzZXJ0KCFjb250YWluc0R1cGxpY2F0ZXMocyksImxpc3QgY2Fubm90IGNvbnRhaW4gZHVwbGljYXRlcyIpKXtmb3IobGV0IHI9MDtyPHMubGVuZ3RoO3IrPTEpe2xldCBvPXNbcl07aWYoIWFwaS5hc3NlcnQobyYmInN0cmluZyI9PXR5cGVvZiBvJiZvIGluIG4ucHJvcGVydGllcywiZGF0YSBwcm9wZXJ0eSBtdXN0IGV4aXN0IikpcmV0dXJuITF9cmV0dXJuIG4uZ3JvdXBCeT1zLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLG4pLCEwfX19cmV0dXJuITF9LGFjdGlvbnMuc2V0UHJvcGVydGllcz1hc3luYyBlPT57bGV0e3N5bWJvbDp0LGZyb21UeXBlOnMsbmZ0czphLGNhbGxpbmdDb250cmFjdEluZm86bn09ZSxpPVsidXNlciIsImNvbnRyYWN0Il0scj12b2lkIDA9PT1zPyJ1c2VyIjpzO2lmKGFwaS5hc3NlcnQoYSYmIm9iamVjdCI9PXR5cGVvZiBhJiZBcnJheS5pc0FycmF5KGEpJiZyJiYic3RyaW5nIj09dHlwZW9mIHImJmkuaW5jbHVkZXMocikmJnQmJiJzdHJpbmciPT10eXBlb2YgdCYmKG58fHZvaWQgMD09PW4mJiJ1c2VyIj09PXIpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGEubGVuZ3RoPD01MCwiY2Fubm90IHNldCBwcm9wZXJ0aWVzIG9uIG1vcmUgdGhhbiA1MCBORlQgaW5zdGFuY2VzIGF0IG9uY2UiKSl7bGV0IG89InVzZXIiPT09cj9hcGkuc2VuZGVyOm4ubmFtZSxsPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnR9KTtpZihhcGkuYXNzZXJ0KG51bGwhPT1sLCJzeW1ib2wgZG9lcyBub3QgZXhpc3QiKSl7aWYoIWlzVmFsaWREYXRhUHJvcGVydGllc0FycmF5KG8scixsLGEpKXJldHVybiExO2xldCBkPXQrImluc3RhbmNlcyI7Zm9yKGxldCB1PTA7dTxhLmxlbmd0aDt1Kz0xKXtsZXR7aWQ6Yyxwcm9wZXJ0aWVzOmZ9PWFbdV07aWYoMD09PU9iamVjdC5rZXlzKGYpLmxlbmd0aCljb250aW51ZTtsZXQgcD1hd2FpdCBhcGkuZGIuZmluZE9uZShkLHtfaWQ6YXBpLkJpZ051bWJlcihjKS50b051bWJlcigpfSk7aWYoYXBpLmFzc2VydChudWxsIT09cCwibmZ0IGluc3RhbmNlIGRvZXMgbm90IGV4aXN0Iikpe2xldCBnPSExO2ZvcihsZXRbeSxtXW9mIE9iamVjdC5lbnRyaWVzKGYpKXtsZXQgJD1sLnByb3BlcnRpZXNbeV0saD1udWxsOyQuaXNSZWFkT25seT9hcGkuYXNzZXJ0KCEoeSBpbiBwLnByb3BlcnRpZXMpLCJjYW5ub3QgZWRpdCByZWFkLW9ubHkgcHJvcGVydGllcyIpJiYocC5wcm9wZXJ0aWVzW3ldPW0sZz0hMCk6KGg9cC5wcm9wZXJ0aWVzW3ldLHAucHJvcGVydGllc1t5XT1tLGc9ITApLGcmJmghPT1tJiZhd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoIm1pbmluZyIsImhhbmRsZU5mdFNldFByb3BlcnR5Iix7c3ltYm9sOnQsbmZ0OnAscHJvcGVydHlOYW1lOnksb2xkVmFsdWU6aH0pfWcmJmF3YWl0IGFwaS5kYi51cGRhdGUoZCxwKX19cmV0dXJuITB9fXJldHVybiExfSxhY3Rpb25zLmJ1cm49YXN5bmMgZT0+e2xldHtmcm9tVHlwZTp0LG5mdHM6cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6YSxjYWxsaW5nQ29udHJhY3RJbmZvOm59PWUsaT1bInVzZXIiLCJjb250cmFjdCJdLHI9dm9pZCAwPT09dD8idXNlciI6dDtpZihhcGkuYXNzZXJ0KCEwPT09YSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQociYmInN0cmluZyI9PXR5cGVvZiByJiZpLmluY2x1ZGVzKHIpJiYobnx8dm9pZCAwPT09biYmInVzZXIiPT09cikmJnMmJiJvYmplY3QiPT10eXBlb2YgcyYmQXJyYXkuaXNBcnJheShzKSwiaW52YWxpZCBwYXJhbXMiKSYmaXNWYWxpZE5mdElkQXJyYXkocykpe2xldCBvPSJ1c2VyIj09PXI/YXBpLnNlbmRlcjpuLm5hbWUsbD0wLGQ9MCx1PSExO2ZvcihsZXQgYz0wO2M8cy5sZW5ndGg7Yys9MSl7bGV0e3N5bWJvbDpmLGlkczpwfT1zW2NdLGc9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6Zn0pO2lmKGcpe2xldCB5PWYrImluc3RhbmNlcyI7Zm9yKGxldCBtPTA7bTxwLmxlbmd0aDttKz0xKXtsZXQgJD1wW21dLGg9YXdhaXQgYXBpLmRiLmZpbmRPbmUoeSx7X2lkOmFwaS5CaWdOdW1iZXIoJCkudG9OdW1iZXIoKX0pO2lmKGgpe2xldCBiPSEwO2lmKGgubG9ja2VkTmZ0cyYmaC5sb2NrZWROZnRzLmxlbmd0aD4wPygwPT09ZCYmKHU9ITApLCgobCs9MSk+MXx8IXUpJiYoYj0hMSkpOnUmJihiPSExKSxkKz0xLGguYWNjb3VudD09PW8mJigidSI9PT1oLm93bmVkQnkmJiJ1c2VyIj09PXJ8fCJjIj09PWgub3duZWRCeSYmImNvbnRyYWN0Ij09PXIpJiZ2b2lkIDA9PT1oLmRlbGVnYXRlZFRvJiZiKXtsZXQgdj17fSx3PSEwO2ZvcihsZXRbTixfXW9mIE9iamVjdC5lbnRyaWVzKGgubG9ja2VkVG9rZW5zKSl7bGV0IEE9YXdhaXQgYXBpLnRyYW5zZmVyVG9rZW5zKG8sTixfLHIpO2lzVG9rZW5UcmFuc2ZlclZlcmlmaWVkKEEsIm5mdCIsbyxOLF8sInRyYW5zZmVyRnJvbUNvbnRyYWN0Iil8fCh2W05dPV8sdz0hMSl9YXBpLmFzc2VydCh3LGB1bmFibGUgdG8gcmVsZWFzZSBsb2NrZWQgdG9rZW5zIGluOiAke2Z9LCBpZCAkeyR9YCk7bGV0IFQ9aC5sb2NrZWROZnRzJiZoLmxvY2tlZE5mdHMubGVuZ3RoPjA/aC5sb2NrZWROZnRzOltdO2lmKHcmJmgubG9ja2VkTmZ0cyYmaC5sb2NrZWROZnRzLmxlbmd0aD4wKXtsZXQgaz1hd2FpdCB0cmFuc2ZlckFuZFZlcmlmeU5mdHMoIm5mdCIsImNvbnRyYWN0IixvLHIsaC5sb2NrZWROZnRzLGEse25hbWU6Im5mdCJ9KTtoLmxvY2tlZE5mdHM9ay5mYWlsLGgubG9ja2VkTmZ0cy5sZW5ndGg+MCYmKHc9ITEpLGFwaS5hc3NlcnQodyxgdW5hYmxlIHRvIHJlbGVhc2UgbG9ja2VkIE5GVCBpbnN0YW5jZXMgaW46ICR7Zn0sIGlkICR7JH1gKX1sZXQgQj1oLm93bmVkQnksRT1oLmxvY2tlZFRva2VucztoLmxvY2tlZFRva2Vucz12LHcmJihoLnByZXZpb3VzQWNjb3VudD1oLmFjY291bnQsaC5wcmV2aW91c093bmVkQnk9aC5vd25lZEJ5LGguYWNjb3VudD0ibnVsbCIsaC5vd25lZEJ5PSJ1IixnLmNpcmN1bGF0aW5nU3VwcGx5LT0xKSxhd2FpdCBhcGkuZGIudXBkYXRlKHksaCksdyYmYXBpLmVtaXQoImJ1cm4iLHthY2NvdW50Om8sb3duZWRCeTpCLHVubG9ja2VkVG9rZW5zOkUsdW5sb2NrZWROZnRzOlQsc3ltYm9sOmYsaWQ6JH0pfX19YXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsZyl9fX19LGFjdGlvbnMudHJhbnNmZXI9YXN5bmMgZT0+e2xldHtmcm9tVHlwZTp0LHRvOnMsdG9UeXBlOmEsbmZ0czpuLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppLGNhbGxpbmdDb250cmFjdEluZm86cn09ZSxvPVsidXNlciIsImNvbnRyYWN0Il0sbD12b2lkIDA9PT1hPyJ1c2VyIjphLGQ9dm9pZCAwPT09dD8idXNlciI6dDtpZihhcGkuYXNzZXJ0KCEwPT09aSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoZCYmInN0cmluZyI9PXR5cGVvZiBkJiZvLmluY2x1ZGVzKGQpJiZzJiYic3RyaW5nIj09dHlwZW9mIHMmJmwmJiJzdHJpbmciPT10eXBlb2YgbCYmby5pbmNsdWRlcyhsKSYmKHJ8fHZvaWQgMD09PXImJiJ1c2VyIj09PWQpJiZuJiYib2JqZWN0Ij09dHlwZW9mIG4mJkFycmF5LmlzQXJyYXkobiksImludmFsaWQgcGFyYW1zIikmJmlzVmFsaWROZnRJZEFycmF5KG4pKXtsZXQgdT0idXNlciI9PT1sP3MudHJpbSgpLnRvTG93ZXJDYXNlKCk6cy50cmltKCksYz0idXNlciI9PT1sP2lzVmFsaWRIaXZlQWNjb3VudExlbmd0aCh1KTppc1ZhbGlkQ29udHJhY3RMZW5ndGgodSksZj0idXNlciI9PT1kP2FwaS5zZW5kZXI6ci5uYW1lO2lmKGFwaS5hc3NlcnQoYywiaW52YWxpZCB0byIpJiZhcGkuYXNzZXJ0KCEobD09PWQmJnU9PT1mKSwiY2Fubm90IHRyYW5zZmVyIHRvIHNlbGYiKSYmYXBpLmFzc2VydCghKCJ1c2VyIj09PWwmJiJudWxsIj09PXUpLCJjYW5ub3QgdHJhbnNmZXIgdG8gbnVsbDsgdXNlIGJ1cm4gYWN0aW9uIGluc3RlYWQiKSlmb3IobGV0IHA9MDtwPG4ubGVuZ3RoO3ArPTEpe2xldHtzeW1ib2w6ZyxpZHM6eX09bltwXSxtPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOmd9KTtpZihtKXtsZXQgJD1nKyJpbnN0YW5jZXMiO2ZvcihsZXQgaD0wO2g8eS5sZW5ndGg7aCs9MSl7bGV0IGI9eVtoXSx2PWF3YWl0IGFwaS5kYi5maW5kT25lKCQse19pZDphcGkuQmlnTnVtYmVyKGIpLnRvTnVtYmVyKCl9KTtpZih2JiZ2LmFjY291bnQ9PT1mJiYoInUiPT09di5vd25lZEJ5JiYidXNlciI9PT1kfHwiYyI9PT12Lm93bmVkQnkmJiJjb250cmFjdCI9PT1kKSYmdm9pZCAwPT09di5kZWxlZ2F0ZWRUbyYmIXYuc291bEJvdW5kKXtsZXQgdz12Lm93bmVkQnksTj0idXNlciI9PT1sPyJ1IjoiYyI7di5wcmV2aW91c0FjY291bnQ9di5hY2NvdW50LHYucHJldmlvdXNPd25lZEJ5PXYub3duZWRCeSx2LmFjY291bnQ9dSx2Lm93bmVkQnk9Tixhd2FpdCBhcGkuZGIudXBkYXRlKCQsdiksYXBpLmVtaXQoInRyYW5zZmVyIix7ZnJvbTpmLGZyb21UeXBlOncsdG86dSx0b1R5cGU6TixzeW1ib2w6ZyxpZDpifSl9fX19fX0sYWN0aW9ucy5kZWxlZ2F0ZT1hc3luYyBlPT57bGV0e2Zyb21UeXBlOnQsdG86cyx0b1R5cGU6YSxuZnRzOm4saXNTaWduZWRXaXRoQWN0aXZlS2V5OmksY2FsbGluZ0NvbnRyYWN0SW5mbzpyfT1lLG89WyJ1c2VyIiwiY29udHJhY3QiXSxsPXZvaWQgMD09PWE/InVzZXIiOmEsZD12b2lkIDA9PT10PyJ1c2VyIjp0O2lmKGFwaS5hc3NlcnQoITA9PT1pLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChkJiYic3RyaW5nIj09dHlwZW9mIGQmJm8uaW5jbHVkZXMoZCkmJnMmJiJzdHJpbmciPT10eXBlb2YgcyYmbCYmInN0cmluZyI9PXR5cGVvZiBsJiZvLmluY2x1ZGVzKGwpJiYocnx8dm9pZCAwPT09ciYmInVzZXIiPT09ZCkmJm4mJiJvYmplY3QiPT10eXBlb2YgbiYmQXJyYXkuaXNBcnJheShuKSwiaW52YWxpZCBwYXJhbXMiKSYmaXNWYWxpZE5mdElkQXJyYXkobikpe2xldCB1PSJ1c2VyIj09PWw/cy50cmltKCkudG9Mb3dlckNhc2UoKTpzLnRyaW0oKSxjPSJ1c2VyIj09PWw/aXNWYWxpZEhpdmVBY2NvdW50TGVuZ3RoKHUpOmlzVmFsaWRDb250cmFjdExlbmd0aCh1KSxmPSJ1c2VyIj09PWQ/YXBpLnNlbmRlcjpyLm5hbWU7aWYoYXBpLmFzc2VydChjLCJpbnZhbGlkIHRvIikmJmFwaS5hc3NlcnQoIShsPT09ZCYmdT09PWYpLCJjYW5ub3QgZGVsZWdhdGUgdG8gc2VsZiIpJiZhcGkuYXNzZXJ0KCEoInVzZXIiPT09bCYmIm51bGwiPT09dSksImNhbm5vdCBkZWxlZ2F0ZSB0byBudWxsIikpZm9yKGxldCBwPTA7cDxuLmxlbmd0aDtwKz0xKXtsZXR7c3ltYm9sOmcsaWRzOnl9PW5bcF0sbT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpnfSk7aWYobSYmYXBpLmFzc2VydCghMD09PW0uZGVsZWdhdGlvbkVuYWJsZWQsYGRlbGVnYXRpb24gbm90IGVuYWJsZWQgZm9yICR7Z31gKSl7bGV0ICQ9ZysiaW5zdGFuY2VzIjtmb3IobGV0IGg9MDtoPHkubGVuZ3RoO2grPTEpe2xldCBiPXlbaF0sdj1hd2FpdCBhcGkuZGIuZmluZE9uZSgkLHtfaWQ6YXBpLkJpZ051bWJlcihiKS50b051bWJlcigpfSk7aWYodiYmdi5hY2NvdW50PT09ZiYmKCJ1Ij09PXYub3duZWRCeSYmInVzZXIiPT09ZHx8ImMiPT09di5vd25lZEJ5JiYiY29udHJhY3QiPT09ZCkmJnZvaWQgMD09PXYuZGVsZWdhdGVkVG8pe2xldCB3PSJ1c2VyIj09PWw/InUiOiJjIixOPXthY2NvdW50OnUsb3duZWRCeTp3fTt2LmRlbGVnYXRlZFRvPU4sYXdhaXQgYXBpLmRiLnVwZGF0ZSgkLHYpLGFwaS5lbWl0KCJkZWxlZ2F0ZSIse2Zyb206Zixmcm9tVHlwZTp2Lm93bmVkQnksdG86dSx0b1R5cGU6dyxzeW1ib2w6ZyxpZDpifSksYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJtaW5pbmciLCJoYW5kbGVOZnREZWxlZ2F0aW9uQ2hhbmdlIix7c3ltYm9sOmcsbmZ0OnYsYWRkOiEwfSl9fX19fX0sYWN0aW9ucy51bmRlbGVnYXRlPWFzeW5jIGU9PntsZXR7ZnJvbVR5cGU6dCxuZnRzOnMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmEsY2FsbGluZ0NvbnRyYWN0SW5mbzpufT1lLGk9WyJ1c2VyIiwiY29udHJhY3QiXSxyPXZvaWQgMD09PXQ/InVzZXIiOnQ7aWYoYXBpLmFzc2VydCghMD09PWEsInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHImJiJzdHJpbmciPT10eXBlb2YgciYmaS5pbmNsdWRlcyhyKSYmKG58fHZvaWQgMD09PW4mJiJ1c2VyIj09PXIpJiZzJiYib2JqZWN0Ij09dHlwZW9mIHMmJkFycmF5LmlzQXJyYXkocyksImludmFsaWQgcGFyYW1zIikmJmlzVmFsaWROZnRJZEFycmF5KHMpKXtsZXQgbz0idXNlciI9PT1yP2FwaS5zZW5kZXI6bi5uYW1lLGw9bmV3IERhdGUoYCR7YXBpLmhpdmVCbG9ja1RpbWVzdGFtcH0uMDAwWmApO2ZvcihsZXQgZD0wO2Q8cy5sZW5ndGg7ZCs9MSl7bGV0e3N5bWJvbDp1LGlkczpjfT1zW2RdLGY9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6dX0pO2lmKGYmJmFwaS5hc3NlcnQoITA9PT1mLmRlbGVnYXRpb25FbmFibGVkLGBkZWxlZ2F0aW9uIG5vdCBlbmFibGVkIGZvciAke3V9YCkpe2xldCBwPTg2NGU1KmYudW5kZWxlZ2F0aW9uQ29vbGRvd24sZz1sLmdldFRpbWUoKStwLHk9dSsiaW5zdGFuY2VzIixtPXtzeW1ib2w6dSxpZHM6W10sY29tcGxldGVUaW1lc3RhbXA6Z307Zm9yKGxldCAkPTA7JDxjLmxlbmd0aDskKz0xKXtsZXQgaD1jWyRdLGI9YXdhaXQgYXBpLmRiLmZpbmRPbmUoeSx7X2lkOmFwaS5CaWdOdW1iZXIoaCkudG9OdW1iZXIoKX0pO2ImJmIuYWNjb3VudD09PW8mJigidSI9PT1iLm93bmVkQnkmJiJ1c2VyIj09PXJ8fCJjIj09PWIub3duZWRCeSYmImNvbnRyYWN0Ij09PXIpJiZiLmRlbGVnYXRlZFRvJiZ2b2lkIDA9PT1iLmRlbGVnYXRlZFRvLnVuZGVsZWdhdGVBdCYmKGIuZGVsZWdhdGVkVG8udW5kZWxlZ2F0ZUF0PWcsbS5pZHMucHVzaChiLl9pZCksYXdhaXQgYXBpLmRiLnVwZGF0ZSh5LGIpLGFwaS5lbWl0KCJ1bmRlbGVnYXRlU3RhcnQiLHtmcm9tOmIuZGVsZWdhdGVkVG8uYWNjb3VudCxmcm9tVHlwZTpiLmRlbGVnYXRlZFRvLm93bmVkQnksc3ltYm9sOnUsaWQ6aH0pLGF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgibWluaW5nIiwiaGFuZGxlTmZ0RGVsZWdhdGlvbkNoYW5nZSIse3N5bWJvbDp1LG5mdDpiLGFkZDohMX0pKX1tLmlkcy5sZW5ndGg+MCYmYXdhaXQgYXBpLmRiLmluc2VydCgicGVuZGluZ1VuZGVsZWdhdGlvbnMiLG0pfX19fTtjb25zdCBwcm9jZXNzVW5kZWxlZ2F0aW9uPWFzeW5jIGU9PntsZXR7c3ltYm9sOnQsaWRzOnN9PWUsYT10KyJpbnN0YW5jZXMiLG49YXdhaXQgYXBpLmRiLmZpbmQoYSx7X2lkOnskaW46c319LDUwLDAsW3tpbmRleDoiX2lkIixkZXNjZW5kaW5nOiExfV0pO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSs9MSlkZWxldGUgbltpXS5kZWxlZ2F0ZWRUbyxhd2FpdCBhcGkuZGIudXBkYXRlKGEsbltpXSx7ZGVsZWdhdGVkVG86IiJ9KTthd2FpdCBhcGkuZGIucmVtb3ZlKCJwZW5kaW5nVW5kZWxlZ2F0aW9ucyIsZSksYXBpLmVtaXQoInVuZGVsZWdhdGVEb25lIix7c3ltYm9sOnQsaWRzOnN9KX07YWN0aW9ucy5jaGVja1BlbmRpbmdVbmRlbGVnYXRpb25zPWFzeW5jKCk9PntpZihhcGkuYXNzZXJ0KCJudWxsIj09PWFwaS5zZW5kZXIsIm5vdCBhdXRob3JpemVkIikpe2xldCBlPW5ldyBEYXRlKGAke2FwaS5oaXZlQmxvY2tUaW1lc3RhbXB9LjAwMFpgKSx0PWUuZ2V0VGltZSgpLHM9YXdhaXQgYXBpLmRiLmZpbmQoInBlbmRpbmdVbmRlbGVnYXRpb25zIix7Y29tcGxldGVUaW1lc3RhbXA6eyRsdGU6dH19KSxhPXMubGVuZ3RoO2Zvcig7YT4wOyl7Zm9yKGxldCBuPTA7bjxhO24rPTEpe2xldCBpPXNbbl07YXdhaXQgcHJvY2Vzc1VuZGVsZWdhdGlvbihpKX1hPShzPWF3YWl0IGFwaS5kYi5maW5kKCJwZW5kaW5nVW5kZWxlZ2F0aW9ucyIse2NvbXBsZXRlVGltZXN0YW1wOnskbHRlOnR9fSkpLmxlbmd0aH19fSxhY3Rpb25zLmNyZWF0ZT1hc3luYyBlPT57bGV0e25hbWU6dCxvcmdOYW1lOnMscHJvZHVjdE5hbWU6YSxzeW1ib2w6bix1cmw6aSxtYXhTdXBwbHk6cixhdXRob3JpemVkSXNzdWluZ0FjY291bnRzOm8sYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHM6bCxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6ZH09ZSx1PWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KSx7bmZ0Q3JlYXRpb25GZWU6Y309dSxmPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOiJCRUUifSkscD0hIWFwaS5CaWdOdW1iZXIoYykubHRlKDApfHxmJiZhcGkuQmlnTnVtYmVyKGYuYmFsYW5jZSkuZ3RlKGMpO2lmKGFwaS5hc3NlcnQocCwieW91IG11c3QgaGF2ZSBlbm91Z2ggdG9rZW5zIHRvIGNvdmVyIHRoZSBjcmVhdGlvbiBmZWVzIikmJmFwaS5hc3NlcnQoITA9PT1kLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCh0JiYic3RyaW5nIj09dHlwZW9mIHQmJm4mJiJzdHJpbmciPT10eXBlb2YgbiYmKHZvaWQgMD09PWl8fGkmJiJzdHJpbmciPT10eXBlb2YgaSkmJih2b2lkIDA9PT1zfHxzJiYic3RyaW5nIj09dHlwZW9mIHMpJiYodm9pZCAwPT09YXx8YSYmInN0cmluZyI9PXR5cGVvZiBhKSYmKHZvaWQgMD09PW98fG8mJiJvYmplY3QiPT10eXBlb2YgbyYmQXJyYXkuaXNBcnJheShvKSkmJih2b2lkIDA9PT1sfHxsJiYib2JqZWN0Ij09dHlwZW9mIGwmJkFycmF5LmlzQXJyYXkobCkpJiYodm9pZCAwPT09cnx8ciYmInN0cmluZyI9PXR5cGVvZiByJiYhYXBpLkJpZ051bWJlcihyKS5pc05hTigpKSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChhcGkudmFsaWRhdG9yLmlzQWxwaGEobikmJmFwaS52YWxpZGF0b3IuaXNVcHBlcmNhc2UobikmJm4ubGVuZ3RoPjAmJm4ubGVuZ3RoPD0xMCwiaW52YWxpZCBzeW1ib2w6IHVwcGVyY2FzZSBsZXR0ZXJzIG9ubHksIG1heCBsZW5ndGggb2YgMTAiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1SRVNFUlZFRF9TWU1CT0xTW25dfHxhcGkuc2VuZGVyPT09UkVTRVJWRURfU1lNQk9MU1tuXSwiY2Fubm90IHVzZSB0aGlzIHN5bWJvbCIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QodCwiICIpKSYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PTUwLCJpbnZhbGlkIG5hbWU6IGxldHRlcnMsIG51bWJlcnMsIHdoaXRlc3BhY2VzIG9ubHksIG1heCBsZW5ndGggb2YgNTAiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1zfHxhcGkudmFsaWRhdG9yLmlzQWxwaGFudW1lcmljKGFwaS52YWxpZGF0b3IuYmxhY2tsaXN0KHMsIiAiKSkmJnMubGVuZ3RoPjAmJnMubGVuZ3RoPD01MCwiaW52YWxpZCBvcmcgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWF8fGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QoYSwiICIpKSYmYS5sZW5ndGg+MCYmYS5sZW5ndGg8PTUwLCJpbnZhbGlkIHByb2R1Y3QgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWl8fGkubGVuZ3RoPD0yNTUsImludmFsaWQgdXJsOiBtYXggbGVuZ3RoIG9mIDI1NSIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PXJ8fGFwaS5CaWdOdW1iZXIocikuZ3QoMCksIm1heFN1cHBseSBtdXN0IGJlIHBvc2l0aXZlIikmJmFwaS5hc3NlcnQodm9pZCAwPT09cnx8YXBpLkJpZ051bWJlcihyKS5sdGUoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLGBtYXhTdXBwbHkgbXVzdCBiZSBsb3dlciB0aGFuICR7TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJ9YCkpe2xldCBnPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOm59KTtpZihhcGkuYXNzZXJ0KG51bGw9PT1nLCJzeW1ib2wgYWxyZWFkeSBleGlzdHMiKSl7aWYoYXBpLkJpZ051bWJlcihjKS5ndCgwKSl7bGV0IHk9YXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlciIse3RvOiJudWxsIixzeW1ib2w6IkJFRSIscXVhbnRpdHk6Yyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6ZH0pO2lmKCFpc1Rva2VuVHJhbnNmZXJWZXJpZmllZCh5LGFwaS5zZW5kZXIsIm51bGwiLCJCRUUiLGMsInRyYW5zZmVyIikpcmV0dXJuITF9bGV0IG09dm9pZCAwPT09cj8wOmFwaS5CaWdOdW1iZXIocikuaW50ZWdlclZhbHVlKGFwaS5CaWdOdW1iZXIuUk9VTkRfRE9XTikudG9OdW1iZXIoKSwkPXZvaWQgMD09PXM/IiI6cyxoPXZvaWQgMD09PWE/IiI6YSxiPXZvaWQgMD09PWk/IiI6aSx2PXt1cmw6Yn07dj1KU09OLnN0cmluZ2lmeSh2KTtsZXQgdz12b2lkIDA9PT1vP1thcGkuc2VuZGVyXTpbXSxOPXtpc3N1ZXI6YXBpLnNlbmRlcixzeW1ib2w6bixuYW1lOnQsb3JnTmFtZTokLHByb2R1Y3ROYW1lOmgsbWV0YWRhdGE6dixtYXhTdXBwbHk6bSxzdXBwbHk6MCxjaXJjdWxhdGluZ1N1cHBseTowLGRlbGVnYXRpb25FbmFibGVkOiExLHVuZGVsZWdhdGlvbkNvb2xkb3duOjAsYXV0aG9yaXplZElzc3VpbmdBY2NvdW50czp3LGF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzOltdLHByb3BlcnRpZXM6e30sZ3JvdXBCeTpbXX0sXz1uKyJpbnN0YW5jZXMiLEE9YXdhaXQgYXBpLmRiLnRhYmxlRXhpc3RzKF8pO3JldHVybiExPT09QSYmYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKF8sWyJhY2NvdW50Iiwib3duZWRCeSJdKSxhd2FpdCBhcGkuZGIuaW5zZXJ0KCJuZnRzIixOKSx2b2lkIDAhPT1vJiZhd2FpdCBhY3Rpb25zLmFkZEF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMoe2FjY291bnRzOm8sc3ltYm9sOm4saXNTaWduZWRXaXRoQWN0aXZlS2V5OmR9KSx2b2lkIDAhPT1sJiZhd2FpdCBhY3Rpb25zLmFkZEF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzKHtjb250cmFjdHM6bCxzeW1ib2w6bixpc1NpZ25lZFdpdGhBY3RpdmVLZXk6ZH0pLCEwfX1yZXR1cm4hMX0sYWN0aW9ucy5pc3N1ZT1hc3luYyBlPT57bGV0e3N5bWJvbDp0LGZyb21UeXBlOnMsdG86YSx0b1R5cGU6bixmZWVTeW1ib2w6aSxsb2NrVG9rZW5zOnIsbG9ja05mdHM6byxzb3VsQm91bmQ6bCxwcm9wZXJ0aWVzOmQsaXNTaWduZWRXaXRoQWN0aXZlS2V5OnUsY2FsbGluZ0NvbnRyYWN0SW5mbzpjfT1lLGY9WyJ1c2VyIiwiY29udHJhY3QiXSxwPXZvaWQgMD09PW4/InVzZXIiOm4sZz12b2lkIDA9PT1zPyJ1c2VyIjpzLHk9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pLHtuZnRJc3N1YW5jZUZlZTptfT15O2lmKGFwaS5hc3NlcnQoITA9PT11LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCh0JiYic3RyaW5nIj09dHlwZW9mIHQmJmcmJiJzdHJpbmciPT10eXBlb2YgZyYmZi5pbmNsdWRlcyhnKSYmKGN8fHZvaWQgMD09PWMmJiJ1c2VyIj09PWcpJiZhJiYic3RyaW5nIj09dHlwZW9mIGEmJnAmJiJzdHJpbmciPT10eXBlb2YgcCYmZi5pbmNsdWRlcyhwKSYmaSYmInN0cmluZyI9PXR5cGVvZiBpJiZpIGluIG0mJih2b2lkIDA9PT1kfHxkJiYib2JqZWN0Ij09dHlwZW9mIGQpJiYodm9pZCAwPT09cnx8ciYmIm9iamVjdCI9PXR5cGVvZiByKSYmKHZvaWQgMD09PW98fG8mJiJvYmplY3QiPT10eXBlb2YgbyYmQXJyYXkuaXNBcnJheShvKSkmJih2b2lkIDA9PT1sfHxsJiYiYm9vbGVhbiI9PXR5cGVvZiBsKSwiaW52YWxpZCBwYXJhbXMiKSYmKHZvaWQgMD09PW98fGlzVmFsaWROZnRJZEFycmF5KG8pKSl7bGV0ICQ9InVzZXIiPT09cD9hLnRyaW0oKS50b0xvd2VyQ2FzZSgpOmEudHJpbSgpLGg9InVzZXIiPT09cD9pc1ZhbGlkSGl2ZUFjY291bnRMZW5ndGgoJCk6aXNWYWxpZENvbnRyYWN0TGVuZ3RoKCQpLGI9InVzZXIiPT09Zz9hcGkuc2VuZGVyOmMubmFtZSx2PSJ1c2VyIj09PWc/ImJhbGFuY2VzIjoiY29udHJhY3RzQmFsYW5jZXMiO2lmKGFwaS5hc3NlcnQoaCwiaW52YWxpZCB0byIpKXtsZXQgdz1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDp0fSksTj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDppfSk7aWYoYXBpLmFzc2VydChudWxsIT09dywic3ltYm9sIGRvZXMgbm90IGV4aXN0IikmJmFwaS5hc3NlcnQobnVsbCE9PU4sImZlZSBzeW1ib2wgZG9lcyBub3QgZXhpc3QiKSl7bGV0IF89dCsiaW5zdGFuY2VzIjtpZihhcGkuYXNzZXJ0KCJjb250cmFjdCI9PT1nJiZ3LmF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzLmluY2x1ZGVzKGIpfHwidXNlciI9PT1nJiZ3LmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMuaW5jbHVkZXMoYiksIm5vdCBhbGxvd2VkIHRvIGlzc3VlIHRva2VucyIpJiZhcGkuYXNzZXJ0KDA9PT13Lm1heFN1cHBseXx8dy5zdXBwbHk8dy5tYXhTdXBwbHksIm1heCBzdXBwbHkgbGltaXQgcmVhY2hlZCIpKXtsZXQgQT1PYmplY3Qua2V5cyh3LnByb3BlcnRpZXMpLmxlbmd0aCxUPWFwaS5CaWdOdW1iZXIobVtpXSkubXVsdGlwbGllZEJ5KEEpLGs9Y2FsY3VsYXRlQmFsYW5jZShtW2ldLFQsTi5wcmVjaXNpb24sITApLEI9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLHYse2FjY291bnQ6YixzeW1ib2w6aX0pLEU9ISFhcGkuQmlnTnVtYmVyKGspLmx0ZSgwKXx8QiYmYXBpLkJpZ051bWJlcihCLmJhbGFuY2UpLmd0ZShrKTtpZihyKXtsZXQgTz1hd2FpdCBpc1ZhbGlkVG9rZW5CYXNrZXQocix2LGIsaSxrKTtpZighYXBpLmFzc2VydChPLCJpbnZhbGlkIGJhc2tldCBvZiB0b2tlbnMgdG8gbG9jayAoY2Fubm90IGxvY2sgbW9yZSB0aGFuIDEwIHRva2VuIHR5cGVzOyBpc3N1aW5nIGFjY291bnQgbXVzdCBoYXZlIGVub3VnaCBiYWxhbmNlKSIpKXJldHVybiExfWxldCBDPXt9O2lmKHZvaWQgMCE9PWQpe3RyeXtpZighaXNWYWxpZERhdGFQcm9wZXJ0aWVzKGIsZyx3LGQpKXJldHVybiExfWNhdGNoKEkpe3JldHVybiExfUM9ZH1pZihhcGkuYXNzZXJ0KEUsInlvdSBtdXN0IGhhdmUgZW5vdWdoIHRva2VucyB0byBjb3ZlciB0aGUgaXNzdWFuY2UgZmVlcyIpKXtpZihhcGkuQmlnTnVtYmVyKGspLmd0KDApKXtpZigiY29udHJhY3QiPT09Zyl7bGV0IFM9YXdhaXQgYXBpLnRyYW5zZmVyVG9rZW5zRnJvbUNhbGxpbmdDb250cmFjdCgibnVsbCIsaSxrLCJ1c2VyIik7aWYoIWFwaS5hc3NlcnQoaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQoUyxiLCJudWxsIixpLGssInRyYW5zZmVyRnJvbUNvbnRyYWN0IiksInVuYWJsZSB0byB0cmFuc2ZlciBpc3N1YW5jZSBmZWUiKSlyZXR1cm4hMX1lbHNle2xldCBWPWF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOmkscXVhbnRpdHk6ayxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6dX0pO2lmKCFhcGkuYXNzZXJ0KGlzVG9rZW5UcmFuc2ZlclZlcmlmaWVkKFYsYiwibnVsbCIsaSxrLCJ0cmFuc2ZlciIpLCJ1bmFibGUgdG8gdHJhbnNmZXIgaXNzdWFuY2UgZmVlIikpcmV0dXJuITF9fWxldCB4PXt9O2lmKHIpZm9yKGxldFtqLExdb2YgT2JqZWN0LmVudHJpZXMocikpaWYoImNvbnRyYWN0Ij09PWcpe2xldCB6PWF3YWl0IGFwaS50cmFuc2ZlclRva2Vuc0Zyb21DYWxsaW5nQ29udHJhY3QoIm5mdCIsaixMLCJjb250cmFjdCIpO2lzVG9rZW5UcmFuc2ZlclZlcmlmaWVkKHosYiwibmZ0IixqLEwsInRyYW5zZmVyRnJvbUNvbnRyYWN0IikmJih4W2pdPUwpfWVsc2V7bGV0IFI9YXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlclRvQ29udHJhY3QiLHt0bzoibmZ0IixzeW1ib2w6aixxdWFudGl0eTpMLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTp1fSk7aXNUb2tlblRyYW5zZmVyVmVyaWZpZWQoUixiLCJuZnQiLGosTCwidHJhbnNmZXJUb0NvbnRyYWN0IikmJih4W2pdPUwpfWxldCBGPVtdO2lmKG8mJm8ubGVuZ3RoPjApe2xldCBEPWF3YWl0IHRyYW5zZmVyQW5kVmVyaWZ5TmZ0cyhiLGcsIm5mdCIsImNvbnRyYWN0IixvLHUsYyk7Rj1ELnN1Y2Nlc3N9bGV0IE09InVzZXIiPT09cD8idSI6ImMiLFA9e307UD1GLmxlbmd0aD4wP3thY2NvdW50OiQsc291bEJvdW5kOmwsb3duZWRCeTpNLGxvY2tlZFRva2Vuczp4LGxvY2tlZE5mdHM6Rixwcm9wZXJ0aWVzOkN9OnthY2NvdW50OiQsc291bEJvdW5kOmwsb3duZWRCeTpNLGxvY2tlZFRva2Vuczp4LHByb3BlcnRpZXM6Q307bGV0IFU9YXdhaXQgYXBpLmRiLmluc2VydChfLFApO3JldHVybiB3LnN1cHBseSs9MSwoIm51bGwiIT09JHx8ImNvbnRyYWN0Ij09PXApJiYody5jaXJjdWxhdGluZ1N1cHBseSs9MSksYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsdyksYXBpLmVtaXQoImlzc3VlIix7ZnJvbTpiLGZyb21UeXBlOmcsdG86JCx0b1R5cGU6cCxzeW1ib2w6dCxsb2NrZWRUb2tlbnM6eCxsb2NrZWROZnRzOkYscHJvcGVydGllczpDLGlkOlUuX2lkfSksITB9fX19fXJldHVybiExfSxhY3Rpb25zLmlzc3VlTXVsdGlwbGU9YXN5bmMgZT0+e2xldHtpbnN0YW5jZXM6dCxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6cyxjYWxsaW5nQ29udHJhY3RJbmZvOmF9PWU7aWYoYXBpLmFzc2VydCghMD09PXMsInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHQmJiJvYmplY3QiPT10eXBlb2YgdCYmQXJyYXkuaXNBcnJheSh0KSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydCh0Lmxlbmd0aDw9MTAsImNhbm5vdCBpc3N1ZSBtb3JlIHRoYW4gMTAgTkZUIGluc3RhbmNlcyBhdCBvbmNlIikpe2xldCBuPTA7aWYodC5mb3JFYWNoKGU9PntlLmxvY2tOZnRzJiYobis9MSl9KSxhcGkuYXNzZXJ0KG48PTEsImNhbm5vdCBpc3N1ZSBtb3JlIHRoYW4gMSBjb250YWluZXIgTkZUIGluc3RhbmNlcyBhdCBvbmNlIikmJmFwaS5hc3NlcnQoMD09PW58fG49PT10Lmxlbmd0aCwiY2Fubm90IGlzc3VlIGEgbWl4IG9mIGNvbnRhaW5lciBhbmQgbm9uLWNvbnRhaW5lciBORlQgaW5zdGFuY2VzIHNpbXVsdGFuZW91c2x5IikpZm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKz0xKXtsZXR7c3ltYm9sOnIsZnJvbVR5cGU6byx0bzpsLHRvVHlwZTpkLGZlZVN5bWJvbDp1LGxvY2tUb2tlbnM6Yyxsb2NrTmZ0czpmLHByb3BlcnRpZXM6cH09dFtpXTthd2FpdCBhY3Rpb25zLmlzc3VlKHtzeW1ib2w6cixmcm9tVHlwZTpvLHRvOmwsdG9UeXBlOmQsZmVlU3ltYm9sOnUsbG9ja1Rva2VuczpjLGxvY2tOZnRzOmYscHJvcGVydGllczpwLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTpzLGNhbGxpbmdDb250cmFjdEluZm86YX0pfX19Ow=="}}}
{"id":"ssc-testnet-hive","json":{"contractName":"contract","contractAction":"update","contractPayload":{"name":"nft","params":"","code":"Y29uc3QgQ09OVFJBQ1RfTkFNRT0ibmZ0IixVVElMSVRZX1RPS0VOX1NZTUJPTD0iQkVFIixNQVhfTlVNX0FVVEhPUklaRURfSVNTVUVSUz0xMCxNQVhfTlVNX0xPQ0tFRF9UT0tFTl9UWVBFUz0xMCxNQVhfU1lNQk9MX0xFTkdUSD0xMCxNQVhfREFUQV9QUk9QRVJUWV9MRU5HVEg9MTAwLE1BWF9OVU1fTkZUU19JU1NVQUJMRT0xMCxNQVhfTlVNX05GVFNfRURJVEFCTEU9NTAsTUFYX05VTV9ORlRTX09QRVJBQkxFPTUwLE1BWF9OVU1fQ09OVEFJTkVSX05GVFNfT1BFUkFCTEU9MSxSRVNFUlZFRF9TWU1CT0xTPXtDRUxMOiJiZWdnYXJzIixRVVNUOiJzaW1wbGVnYW1lIixURVNURVJBOiJhZ2dyb2VkIixTUVJMOiJzdHVmZmJ5c3BlbmNlciIsQ1JBRlQ6ImltbWFudWVsOTQiLE1VU0lDOiJhdG9tY29sbGVjdG9yIixDR1VMTDoiY2d1bGwiLE5GVDoiY2FkYXdnIixSQVJFOiJiZWdnYXJzIixMSUM6ImxpY3Rva2VuIixNRU1CRVI6Im1lbWJlcnRva2VuIixDT0ZGRUU6ImMwZmYzM2EiLEFSVDoiYnlvIixST0NLOiJiZWdnYXJzIixDUklUVEVSOiJjcnlwdG9tYW5jZXIiLENJVFk6ImdlcmJlciIsTU9OU1RFUlM6InNpbXBsZWdhbWUiLFNFVFM6Imxvb3RraXQuZ2FtZXMiLEFOSU1FOiJhbmltZXRva2VuIixQSE9UT0ZUOiJ3d3dpZWJlIixCRUVSOiJkZXRsZXYiLFNQSVI6InNwaW52ZXN0IixJRkc6Imxpb24yMDAiLEdVSUxEUzoic2ltcGxlZ2FtZSIsRkNBUkQ6Imxpb24yMDAiLFBYTDoicGl4ZWxuZnQiLENPVzoic3R1ZmZieXNwZW5jZXIiLExPT09UOiJzdHVmZmJ5c3BlbmNlciIsQVBJOiJzdGVlbWNpdHlhcGkiLFNQT1JUU01PTToic3BvcnRzdGVzdGVyIixTV1Q6InNhdHJlbiIsU1RBUjoiYXRvbWNvbGxlY3RvciJ9O2FjdGlvbnMuY3JlYXRlU1NDPWFzeW5jKCk9PntsZXQgZT1hd2FpdCBhcGkuZGIudGFibGVFeGlzdHMoIm5mdHMiKTtpZighMT09PWUpe2F3YWl0IGFwaS5kYi5jcmVhdGVUYWJsZSgibmZ0cyIsWyJzeW1ib2wiXSksYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCJwYXJhbXMiKSxhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoInBlbmRpbmdVbmRlbGVnYXRpb25zIixbInN5bWJvbCIsImNvbXBsZXRlVGltZXN0YW1wIl0pO2xldCB0PXt9O3QubmZ0Q3JlYXRpb25GZWU9IjEwMCIsdC5uZnRJc3N1YW5jZUZlZT17QkVFOiIwLjAwMSIsUEFMOiIwLjAwMSJ9LHQuZGF0YVByb3BlcnR5Q3JlYXRpb25GZWU9IjEwMCIsdC5lbmFibGVEZWxlZ2F0aW9uRmVlPSIxMDAwIixhd2FpdCBhcGkuZGIuaW5zZXJ0KCJwYXJhbXMiLHQpfX0sYWN0aW9ucy51cGRhdGVQYXJhbXM9YXN5bmMgZT0+e2lmKGFwaS5zZW5kZXIhPT1hcGkub3duZXIpcmV0dXJuO2xldHtuZnRDcmVhdGlvbkZlZTp0LG5mdElzc3VhbmNlRmVlOnMsZGF0YVByb3BlcnR5Q3JlYXRpb25GZWU6YSxlbmFibGVEZWxlZ2F0aW9uRmVlOm59PWUsaT1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSk7dCYmInN0cmluZyI9PXR5cGVvZiB0JiYhYXBpLkJpZ051bWJlcih0KS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKHQpLmd0ZSgwKSYmKGkubmZ0Q3JlYXRpb25GZWU9dCkscyYmIm9iamVjdCI9PXR5cGVvZiBzJiYoaS5uZnRJc3N1YW5jZUZlZT1zKSxhJiYic3RyaW5nIj09dHlwZW9mIGEmJiFhcGkuQmlnTnVtYmVyKGEpLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIoYSkuZ3RlKDApJiYoaS5kYXRhUHJvcGVydHlDcmVhdGlvbkZlZT1hKSxuJiYic3RyaW5nIj09dHlwZW9mIG4mJiFhcGkuQmlnTnVtYmVyKG4pLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIobikuZ3RlKDApJiYoaS5lbmFibGVEZWxlZ2F0aW9uRmVlPW4pLGF3YWl0IGFwaS5kYi51cGRhdGUoInBhcmFtcyIsaSl9O2NvbnN0IGlzVG9rZW5UcmFuc2ZlclZlcmlmaWVkPShlLHQscyxhLG4saSk9PnZvaWQgMD09PWUuZXJyb3JzJiYhIWUuZXZlbnRzJiZ2b2lkIDAhPT1lLmV2ZW50cy5maW5kKGU9PiJ0b2tlbnMiPT09ZS5jb250cmFjdCYmZS5ldmVudD09PWkmJmUuZGF0YS5mcm9tPT09dCYmZS5kYXRhLnRvPT09cyYmZS5kYXRhLnF1YW50aXR5PT09biYmZS5kYXRhLnN5bWJvbD09PWEpLGNhbGN1bGF0ZUJhbGFuY2U9KGUsdCxzLGEpPT5hP2FwaS5CaWdOdW1iZXIoZSkucGx1cyh0KS50b0ZpeGVkKHMpOmFwaS5CaWdOdW1iZXIoZSkubWludXModCkudG9GaXhlZChzKSxjb3VudERlY2ltYWxzPWU9PmFwaS5CaWdOdW1iZXIoZSkuZHAoKSxjb250YWluc0R1cGxpY2F0ZXM9ZT0+bmV3IFNldChlKS5zaXplIT09ZS5sZW5ndGgsaXNWYWxpZEhpdmVBY2NvdW50TGVuZ3RoPWU9PmUubGVuZ3RoPj0zJiZlLmxlbmd0aDw9MTYsaXNWYWxpZENvbnRyYWN0TGVuZ3RoPWU9PmUubGVuZ3RoPj0zJiZlLmxlbmd0aDw9NTAsaXNWYWxpZEFjY291bnRzQXJyYXk9ZT0+e2xldCB0PSEwO3JldHVybiBlLmZvckVhY2goZT0+eyJzdHJpbmciPT10eXBlb2YgZSYmaXNWYWxpZEhpdmVBY2NvdW50TGVuZ3RoKGUpfHwodD0hMSl9KSx0fSxpc1ZhbGlkQ29udHJhY3RzQXJyYXk9ZT0+e2xldCB0PSEwO3JldHVybiBlLmZvckVhY2goZT0+eyJzdHJpbmciPT10eXBlb2YgZSYmaXNWYWxpZENvbnRyYWN0TGVuZ3RoKGUpfHwodD0hMSl9KSx0fSxpc1ZhbGlkRGF0YVByb3BlcnRpZXM9KGUsdCxzLGEpPT57bGV0IG49T2JqZWN0LmtleXMoYSkubGVuZ3RoLGk9T2JqZWN0LmtleXMocy5wcm9wZXJ0aWVzKS5sZW5ndGg7aWYoIWFwaS5hc3NlcnQobjw9aSwiY2Fubm90IHNldCBtb3JlIGRhdGEgcHJvcGVydGllcyB0aGFuIE5GVCBoYXMiKSlyZXR1cm4hMTtmb3IobGV0W3Isb11vZiBPYmplY3QuZW50cmllcyhhKSl7bGV0IGw9ITE7aWYoYXBpLmFzc2VydChyJiYic3RyaW5nIj09dHlwZW9mIHImJmFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMocikmJnIubGVuZ3RoPjAmJnIubGVuZ3RoPD0yNSwiaW52YWxpZCBkYXRhIHByb3BlcnR5IG5hbWU6IGxldHRlcnMgJiBudW1iZXJzIG9ubHksIG1heCBsZW5ndGggb2YgMjUiKSYmYXBpLmFzc2VydChyIGluIHMucHJvcGVydGllcywiZGF0YSBwcm9wZXJ0eSBtdXN0IGV4aXN0Iikpe2xldCBkPXMucHJvcGVydGllc1tyXTthcGkuYXNzZXJ0KG51bGwhPW8mJih0eXBlb2Ygbz09PWQudHlwZXx8Im51bWJlciI9PT1kLnR5cGUmJiJzdHJpbmciPT10eXBlb2YgbyYmIWFwaS5CaWdOdW1iZXIobykuaXNOYU4oKSksYGRhdGEgcHJvcGVydHkgdHlwZSBtaXNtYXRjaDogZXhwZWN0ZWQgJHtkLnR5cGV9IGJ1dCBnb3QgJHt0eXBlb2Ygb30gZm9yIHByb3BlcnR5ICR7cn1gKSYmYXBpLmFzc2VydCgic3RyaW5nIiE9dHlwZW9mIG98fG8ubGVuZ3RoPD0xMDAsInN0cmluZyBwcm9wZXJ0eSBtYXggbGVuZ3RoIGlzIDEwMCBjaGFyYWN0ZXJzIikmJmFwaS5hc3NlcnQoImNvbnRyYWN0Ij09PXQmJmQuYXV0aG9yaXplZEVkaXRpbmdDb250cmFjdHMuaW5jbHVkZXMoZSl8fCJ1c2VyIj09PXQmJmQuYXV0aG9yaXplZEVkaXRpbmdBY2NvdW50cy5pbmNsdWRlcyhlKSwibm90IGFsbG93ZWQgdG8gc2V0IGRhdGEgcHJvcGVydGllcyIpJiYobD0hMCwibnVtYmVyIj09PWQudHlwZSYmInN0cmluZyI9PXR5cGVvZiBvJiYoYVtyXT1hcGkuQmlnTnVtYmVyKG8pLnRvTnVtYmVyKCkpKX1pZighbClyZXR1cm4hMX1yZXR1cm4hMH0saXNWYWxpZERhdGFQcm9wZXJ0aWVzQXJyYXk9KGUsdCxzLGEpPT57dHJ5e2ZvcihsZXQgbj0wO248YS5sZW5ndGg7bis9MSl7bGV0IGk9ITEse2lkOnIscHJvcGVydGllczpvfT1hW25dO2lmKGFwaS5hc3NlcnQociYmInN0cmluZyI9PXR5cGVvZiByJiYhYXBpLkJpZ051bWJlcihyKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKHIpLmd0KDApJiZvJiYib2JqZWN0Ij09dHlwZW9mIG8sImludmFsaWQgZGF0YSBwcm9wZXJ0aWVzIikmJmlzVmFsaWREYXRhUHJvcGVydGllcyhlLHQscyxvKSYmKGk9ITApLCFpKXJldHVybiExfX1jYXRjaChsKXtyZXR1cm4hMX1yZXR1cm4hMH0saXNWYWxpZE5mdElkQXJyYXk9ZT0+e3RyeXtsZXQgdD0wO2ZvcihsZXQgcz0wO3M8ZS5sZW5ndGg7cys9MSl7bGV0IGE9ITEse3N5bWJvbDpuLGlkczppfT1lW3NdO2lmKGFwaS5hc3NlcnQobiYmInN0cmluZyI9PXR5cGVvZiBuJiZhcGkudmFsaWRhdG9yLmlzQWxwaGEobikmJmFwaS52YWxpZGF0b3IuaXNVcHBlcmNhc2UobikmJm4ubGVuZ3RoPjAmJm4ubGVuZ3RoPD0xMCYmaSYmIm9iamVjdCI9PXR5cGVvZiBpJiZBcnJheS5pc0FycmF5KGkpLCJpbnZhbGlkIG5mdCBsaXN0IikmJih0Kz1pLmxlbmd0aCxhcGkuYXNzZXJ0KHQ8PTUwLCJjYW5ub3Qgb3BlcmF0ZSBvbiBtb3JlIHRoYW4gNTAgTkZUIGluc3RhbmNlcyBhdCBvbmNlIikpKXtmb3IobGV0IHI9MDtyPGkubGVuZ3RoO3IrPTEpe2xldCBvPWlbcl07aWYoIWFwaS5hc3NlcnQobyYmInN0cmluZyI9PXR5cGVvZiBvJiYhYXBpLkJpZ051bWJlcihvKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKG8pLmd0KDApLCJpbnZhbGlkIG5mdCBsaXN0IikpcmV0dXJuITF9YT0hMH1pZighYSlyZXR1cm4hMX19Y2F0Y2gobCl7cmV0dXJuITF9cmV0dXJuITB9LGlzVmFsaWRUb2tlbkJhc2tldD1hc3luYyhlLHQscyxhLG4pPT57dHJ5e2xldCBpPU9iamVjdC5rZXlzKGUpLmxlbmd0aDtpZihpPjEwKXJldHVybiExO2ZvcihsZXRbcixvXW9mIE9iamVjdC5lbnRyaWVzKGUpKXtsZXQgbD0hMTtpZigic3RyaW5nIj09dHlwZW9mIHImJmFwaS52YWxpZGF0b3IuaXNBbHBoYShyKSYmYXBpLnZhbGlkYXRvci5pc1VwcGVyY2FzZShyKSYmci5sZW5ndGg+MCYmci5sZW5ndGg8PTEwKXtsZXQgZD1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpyfSk7aWYoZCYmbyYmInN0cmluZyI9PXR5cGVvZiBvJiYhYXBpLkJpZ051bWJlcihvKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKG8pLmd0KDApJiZjb3VudERlY2ltYWxzKG8pPD1kLnByZWNpc2lvbil7bGV0IHU9cj09PWE/Y2FsY3VsYXRlQmFsYW5jZShvLG4sZC5wcmVjaXNpb24sITApOm8sYz1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsdCx7YWNjb3VudDpzLHN5bWJvbDpyfSk7YyYmYXBpLkJpZ051bWJlcihjLmJhbGFuY2UpLmd0ZSh1KSYmKGw9ITApfX1pZighbClyZXR1cm4hMX19Y2F0Y2goZil7cmV0dXJuITF9cmV0dXJuITB9LHRyYW5zZmVyQW5kVmVyaWZ5TmZ0cz1hc3luYyhlLHQscyxhLG4saSxyKT0+e2xldCBvPXtzdWNjZXNzOltdLGZhaWw6W119LGw9InVzZXIiPT09dD8idSI6ImMiLGQ9InVzZXIiPT09YT8idSI6ImMiO2F3YWl0IGFjdGlvbnMudHJhbnNmZXIoe2Zyb21UeXBlOnQsdG86cyx0b1R5cGU6YSxuZnRzOm4saXNTaWduZWRXaXRoQWN0aXZlS2V5OmksY2FsbGluZ0NvbnRyYWN0SW5mbzpyfSk7bGV0IHU9YXBpLmxvZ3MoKSxjPXt9LGY9e307aWYodS5ldmVudHMpZm9yKGxldCBwPTA7cDx1LmV2ZW50cy5sZW5ndGg7cCs9MSl7bGV0IGc9dS5ldmVudHNbcF07aWYoZy5jb250cmFjdCYmZy5ldmVudCYmZy5kYXRhJiYibmZ0Ij09PWcuY29udHJhY3QmJiJ0cmFuc2ZlciI9PT1nLmV2ZW50JiZnLmRhdGEuZnJvbT09PWUmJmcuZGF0YS5mcm9tVHlwZT09PWwmJmcuZGF0YS50bz09PXMmJmcuZGF0YS50b1R5cGU9PT1kKXtsZXQgeT1nLmRhdGEuc3ltYm9sKyItIitnLmRhdGEuaWQ7Y1t5XT0xfX1mb3IobGV0IG09MDttPG4ubGVuZ3RoO20rPTEpe2xldHtzeW1ib2w6JCxpZHM6aH09blttXSxiPVtdLHY9W107Zm9yKGxldCB3PTA7dzxoLmxlbmd0aDt3Kz0xKXtsZXQgTj0kKyItIitoW3ddO04gaW4gZnx8KE4gaW4gYz9iLnB1c2goaFt3XS50b1N0cmluZygpKTp2LnB1c2goaFt3XS50b1N0cmluZygpKSxmW05dPTEpfWIubGVuZ3RoPjAmJm8uc3VjY2Vzcy5wdXNoKHtzeW1ib2w6JCxpZHM6Yn0pLHYubGVuZ3RoPjAmJm8uZmFpbC5wdXNoKHtzeW1ib2w6JCxpZHM6dn0pfXJldHVybiBvfTthY3Rpb25zLnVwZGF0ZVVybD1hc3luYyBlPT57bGV0e3VybDp0LHN5bWJvbDpzfT1lO2lmKGFwaS5hc3NlcnQocyYmInN0cmluZyI9PXR5cGVvZiBzJiZ0JiYic3RyaW5nIj09dHlwZW9mIHQsImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQodC5sZW5ndGg8PTI1NSwiaW52YWxpZCB1cmw6IG1heCBsZW5ndGggb2YgMjU1Iikpe2xldCBhPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN9KTtpZihhJiZhcGkuYXNzZXJ0KGEuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpdHJ5e2xldCBuPUpTT04ucGFyc2UoYS5tZXRhZGF0YSk7YXBpLmFzc2VydChuJiZuLnVybCwiYW4gZXJyb3Igb2NjdXJlZCB3aGVuIHRyeWluZyB0byB1cGRhdGUgdGhlIHVybCIpJiYobi51cmw9dCxhLm1ldGFkYXRhPUpTT04uc3RyaW5naWZ5KG4pLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGEpKX1jYXRjaChpKXt9fX0sYWN0aW9ucy51cGRhdGVNZXRhZGF0YT1hc3luYyBlPT57bGV0e21ldGFkYXRhOnQsc3ltYm9sOnN9PWU7aWYoYXBpLmFzc2VydChzJiYic3RyaW5nIj09dHlwZW9mIHMmJnQmJiJvYmplY3QiPT10eXBlb2YgdCwiaW52YWxpZCBwYXJhbXMiKSl7bGV0IGE9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c30pO2lmKGEmJmFwaS5hc3NlcnQoYS5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSl0cnl7bGV0IG49SlNPTi5zdHJpbmdpZnkodCk7YXBpLmFzc2VydChuLmxlbmd0aDw9MWUzLCJpbnZhbGlkIG1ldGFkYXRhOiBtYXggbGVuZ3RoIG9mIDEwMDAiKSYmKGEubWV0YWRhdGE9bixhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixhKSl9Y2F0Y2goaSl7fX19LGFjdGlvbnMudXBkYXRlTmFtZT1hc3luYyBlPT57bGV0e25hbWU6dCxzeW1ib2w6c309ZTtpZihhcGkuYXNzZXJ0KHMmJiJzdHJpbmciPT10eXBlb2YgcyYmdCYmInN0cmluZyI9PXR5cGVvZiB0LCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QodCwiICIpKSYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PTUwLCJpbnZhbGlkIG5hbWU6IGxldHRlcnMsIG51bWJlcnMsIHdoaXRlc3BhY2VzIG9ubHksIG1heCBsZW5ndGggb2YgNTAiKSl7bGV0IGE9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c30pO2EmJmFwaS5hc3NlcnQoYS5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmKGEubmFtZT10LGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGEpKX19LGFjdGlvbnMudXBkYXRlT3JnTmFtZT1hc3luYyBlPT57bGV0e29yZ05hbWU6dCxzeW1ib2w6c309ZTtpZihhcGkuYXNzZXJ0KHMmJiJzdHJpbmciPT10eXBlb2YgcyYmdCYmInN0cmluZyI9PXR5cGVvZiB0LCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QodCwiICIpKSYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PTUwLCJpbnZhbGlkIG9yZyBuYW1lOiBsZXR0ZXJzLCBudW1iZXJzLCB3aGl0ZXNwYWNlcyBvbmx5LCBtYXggbGVuZ3RoIG9mIDUwIikpe2xldCBhPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN9KTthJiZhcGkuYXNzZXJ0KGEuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJihhLm9yZ05hbWU9dCxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixhKSl9fSxhY3Rpb25zLnVwZGF0ZVByb2R1Y3ROYW1lPWFzeW5jIGU9PntsZXR7cHJvZHVjdE5hbWU6dCxzeW1ib2w6c309ZTtpZihhcGkuYXNzZXJ0KHMmJiJzdHJpbmciPT10eXBlb2YgcyYmdCYmInN0cmluZyI9PXR5cGVvZiB0LCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QodCwiICIpKSYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PTUwLCJpbnZhbGlkIHByb2R1Y3QgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpKXtsZXQgYT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzfSk7YSYmYXBpLmFzc2VydChhLmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpJiYoYS5wcm9kdWN0TmFtZT10LGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGEpKX19LGFjdGlvbnMuYWRkQXV0aG9yaXplZElzc3VpbmdBY2NvdW50cz1hc3luYyBlPT57bGV0e2FjY291bnRzOnQsc3ltYm9sOnMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmF9PWU7aWYoYXBpLmFzc2VydCghMD09PWEsInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHMmJiJzdHJpbmciPT10eXBlb2YgcyYmdCYmIm9iamVjdCI9PXR5cGVvZiB0JiZBcnJheS5pc0FycmF5KHQpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KHQubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBhY2NvdW50cyIpKXtsZXQgbj1pc1ZhbGlkQWNjb3VudHNBcnJheSh0KTtpZihhcGkuYXNzZXJ0KG4sImludmFsaWQgYWNjb3VudCBsaXN0Iikpe2xldCBpPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN9KTtpZihpKXtsZXQgcj1bXTtpZih0LmZvckVhY2goZT0+e2xldCB0PWUudHJpbSgpLnRvTG93ZXJDYXNlKCkscz0hMTtmb3IobGV0IGE9MDthPGkuYXV0aG9yaXplZElzc3VpbmdBY2NvdW50cy5sZW5ndGg7YSs9MSlpZih0PT09aS5hdXRob3JpemVkSXNzdWluZ0FjY291bnRzW2FdKXtzPSEwO2JyZWFrfXN8fHIucHVzaCh0KX0pLGFwaS5hc3NlcnQoaS5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmYXBpLmFzc2VydCghY29udGFpbnNEdXBsaWNhdGVzKHIpLCJjYW5ub3QgYWRkIHRoZSBzYW1lIGFjY291bnQgdHdpY2UiKSYmYXBpLmFzc2VydChpLmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMubGVuZ3RoK3IubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBhY2NvdW50cyIpKXtsZXQgbz1pLmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMuY29uY2F0KHIpO2kuYXV0aG9yaXplZElzc3VpbmdBY2NvdW50cz1vLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGkpfX19fX0sYWN0aW9ucy5hZGRBdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1hc3luYyBlPT57bGV0e2NvbnRyYWN0czp0LHN5bWJvbDpzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTphfT1lO2lmKGFwaS5hc3NlcnQoITA9PT1hLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzJiYic3RyaW5nIj09dHlwZW9mIHMmJnQmJiJvYmplY3QiPT10eXBlb2YgdCYmQXJyYXkuaXNBcnJheSh0KSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydCh0Lmxlbmd0aDw9MTAsImNhbm5vdCBoYXZlIG1vcmUgdGhhbiAxMCBhdXRob3JpemVkIGlzc3VpbmcgY29udHJhY3RzIikpe2xldCBuPWlzVmFsaWRDb250cmFjdHNBcnJheSh0KTtpZihhcGkuYXNzZXJ0KG4sImludmFsaWQgY29udHJhY3QgbGlzdCIpKXtsZXQgaT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzfSk7aWYoaSl7bGV0IHI9W107aWYodC5mb3JFYWNoKGU9PntsZXQgdD1lLnRyaW0oKSxzPSExO2ZvcihsZXQgYT0wO2E8aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cy5sZW5ndGg7YSs9MSlpZih0PT09aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0c1thXSl7cz0hMDticmVha31zfHxyLnB1c2godCl9KSxhcGkuYXNzZXJ0KGkuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJmFwaS5hc3NlcnQoIWNvbnRhaW5zRHVwbGljYXRlcyhyKSwiY2Fubm90IGFkZCB0aGUgc2FtZSBjb250cmFjdCB0d2ljZSIpJiZhcGkuYXNzZXJ0KGkuYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMubGVuZ3RoK3IubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBjb250cmFjdHMiKSl7bGV0IG89aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cy5jb25jYXQocik7aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1vLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGkpfX19fX0sYWN0aW9ucy5yZW1vdmVBdXRob3JpemVkSXNzdWluZ0FjY291bnRzPWFzeW5jIGU9PntsZXR7YWNjb3VudHM6dCxzeW1ib2w6cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6YX09ZTtpZihhcGkuYXNzZXJ0KCEwPT09YSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQocyYmInN0cmluZyI9PXR5cGVvZiBzJiZ0JiYib2JqZWN0Ij09dHlwZW9mIHQmJkFycmF5LmlzQXJyYXkodCksImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQodC5sZW5ndGg8PTEwLCJjYW5ub3QgcmVtb3ZlIG1vcmUgdGhhbiAxMCBhdXRob3JpemVkIGlzc3VpbmcgYWNjb3VudHMiKSl7bGV0IG49aXNWYWxpZEFjY291bnRzQXJyYXkodCk7aWYoYXBpLmFzc2VydChuLCJpbnZhbGlkIGFjY291bnQgbGlzdCIpKXtsZXQgaT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzfSk7aWYoaSYmYXBpLmFzc2VydChpLmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpKXtsZXQgcj1pLmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMuZmlsdGVyKGU9Pntmb3IobGV0IHM9MDtzPHQubGVuZ3RoO3MrPTEpe2xldCBhPXRbc10udHJpbSgpLnRvTG93ZXJDYXNlKCk7aWYoZT09PWEpcmV0dXJuITF9cmV0dXJuITB9KTtpLmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHM9cixhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixpKX19fX0sYWN0aW9ucy5yZW1vdmVBdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1hc3luYyBlPT57bGV0e2NvbnRyYWN0czp0LHN5bWJvbDpzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTphfT1lO2lmKGFwaS5hc3NlcnQoITA9PT1hLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzJiYic3RyaW5nIj09dHlwZW9mIHMmJnQmJiJvYmplY3QiPT10eXBlb2YgdCYmQXJyYXkuaXNBcnJheSh0KSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydCh0Lmxlbmd0aDw9MTAsImNhbm5vdCByZW1vdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBjb250cmFjdHMiKSl7bGV0IG49aXNWYWxpZENvbnRyYWN0c0FycmF5KHQpO2lmKGFwaS5hc3NlcnQobiwiaW52YWxpZCBjb250cmFjdCBsaXN0Iikpe2xldCBpPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN9KTtpZihpJiZhcGkuYXNzZXJ0KGkuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2xldCByPWkuYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMuZmlsdGVyKGU9Pntmb3IobGV0IHM9MDtzPHQubGVuZ3RoO3MrPTEpe2xldCBhPXRbc10udHJpbSgpO2lmKGU9PT1hKXJldHVybiExfXJldHVybiEwfSk7aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1yLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGkpfX19fSxhY3Rpb25zLnRyYW5zZmVyT3duZXJzaGlwPWFzeW5jIGU9PntsZXR7c3ltYm9sOnQsdG86cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6YX09ZTtpZihhcGkuYXNzZXJ0KCEwPT09YSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQodCYmInN0cmluZyI9PXR5cGVvZiB0JiZzJiYic3RyaW5nIj09dHlwZW9mIHMsImludmFsaWQgcGFyYW1zIikpe2xldCBuPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnR9KTtpZihuJiZhcGkuYXNzZXJ0KG4uaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2xldCBpPXMudHJpbSgpLnRvTG93ZXJDYXNlKCk7YXBpLmFzc2VydChpc1ZhbGlkSGl2ZUFjY291bnRMZW5ndGgoaSksImludmFsaWQgdG8iKSYmKG4uaXNzdWVyPWksYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbikpfX19LGFjdGlvbnMuZW5hYmxlRGVsZWdhdGlvbj1hc3luYyBlPT57bGV0e3N5bWJvbDp0LHVuZGVsZWdhdGlvbkNvb2xkb3duOnMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmF9PWUsbj1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSkse2VuYWJsZURlbGVnYXRpb25GZWU6aX09bixyPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOiJCRUUifSksbz0hIWFwaS5CaWdOdW1iZXIoaSkubHRlKDApfHxyJiZhcGkuQmlnTnVtYmVyKHIuYmFsYW5jZSkuZ3RlKGkpO2lmKGFwaS5hc3NlcnQobywieW91IG11c3QgaGF2ZSBlbm91Z2ggdG9rZW5zIHRvIGNvdmVyIGZlZXMiKSYmYXBpLmFzc2VydCghMD09PWEsInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHQmJiJzdHJpbmciPT10eXBlb2YgdCwiaW52YWxpZCBzeW1ib2wiKSYmYXBpLmFzc2VydChzJiZOdW1iZXIuaXNJbnRlZ2VyKHMpJiZzPjAmJnM8PTE4MjUwLCJ1bmRlbGVnYXRpb25Db29sZG93biBtdXN0IGJlIGFuIGludGVnZXIgYmV0d2VlbiAxIGFuZCAxODI1MCIpKXtsZXQgbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDp0fSk7aWYoYXBpLmFzc2VydChudWxsIT09bCwic3ltYm9sIGRvZXMgbm90IGV4aXN0IikmJmFwaS5hc3NlcnQobC5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1sLmRlbGVnYXRpb25FbmFibGVkfHwhMT09PWwuZGVsZWdhdGlvbkVuYWJsZWQsImRlbGVnYXRpb24gYWxyZWFkeSBlbmFibGVkIikpe2lmKGFwaS5CaWdOdW1iZXIoaSkuZ3QoMCkpe2xldCBkPWF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOiJCRUUiLHF1YW50aXR5OmksaXNTaWduZWRXaXRoQWN0aXZlS2V5OmF9KTtpZighaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQoZCxhcGkuc2VuZGVyLCJudWxsIiwiQkVFIixpLCJ0cmFuc2ZlciIpKXJldHVybiExfXJldHVybiBsLmRlbGVnYXRpb25FbmFibGVkPSEwLGwudW5kZWxlZ2F0aW9uQ29vbGRvd249cyxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixsKSwhMH19cmV0dXJuITF9LGFjdGlvbnMudXBkYXRlUHJvcGVydHlEZWZpbml0aW9uPWFzeW5jIGU9PntsZXR7c3ltYm9sOnQsbmFtZTpzLG5ld05hbWU6YSx0eXBlOm4saXNSZWFkT25seTppLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTpyfT1lO2lmKGFwaS5hc3NlcnQoITA9PT1yLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCh0JiYic3RyaW5nIj09dHlwZW9mIHQmJnMmJiJzdHJpbmciPT10eXBlb2YgcywiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChhcGkudmFsaWRhdG9yLmlzQWxwaGFudW1lcmljKHMpJiZzLmxlbmd0aD4wJiZzLmxlbmd0aDw9MjUsImludmFsaWQgbmFtZTogbGV0dGVycyAmIG51bWJlcnMgb25seSwgbWF4IGxlbmd0aCBvZiAyNSIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWF8fCJzdHJpbmciPT10eXBlb2YgYSYmYXBpLnZhbGlkYXRvci5pc0FscGhhbnVtZXJpYyhhKSYmYS5sZW5ndGg+MCYmYS5sZW5ndGg8PTI1LCJpbnZhbGlkIG5ldyBuYW1lOiBsZXR0ZXJzICYgbnVtYmVycyBvbmx5LCBtYXggbGVuZ3RoIG9mIDI1IikmJmFwaS5hc3NlcnQodm9pZCAwPT09bnx8InN0cmluZyI9PXR5cGVvZiBuJiYoIm51bWJlciI9PT1ufHwic3RyaW5nIj09PW58fCJib29sZWFuIj09PW4pLCJpbnZhbGlkIHR5cGU6IG11c3QgYmUgbnVtYmVyLCBzdHJpbmcsIG9yIGJvb2xlYW4iKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1pfHwiYm9vbGVhbiI9PXR5cGVvZiBpLCJpbnZhbGlkIGlzUmVhZE9ubHk6IG11c3QgYmUgdHJ1ZSBvciBmYWxzZSIpKXtsZXQgbz1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDp0fSk7aWYobyYmYXBpLmFzc2VydCgwPT09by5zdXBwbHksImNhbm5vdCBjaGFuZ2UgZGF0YSBwcm9wZXJ0eSBkZWZpbml0aW9uOyB0b2tlbnMgYWxyZWFkeSBpc3N1ZWQiKSYmYXBpLmFzc2VydChzIGluIG8ucHJvcGVydGllcywicHJvcGVydHkgbXVzdCBleGlzdCIpJiZhcGkuYXNzZXJ0KG8uaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2lmKHZvaWQgMCE9PWEmJih2b2lkIDAhPT1vLmdyb3VwQnkmJm8uZ3JvdXBCeS5sZW5ndGg+MCYmIWFwaS5hc3NlcnQoIW8uZ3JvdXBCeS5pbmNsdWRlcyhzKSwiY2Fubm90IGNoYW5nZSBkYXRhIHByb3BlcnR5IG5hbWU7IHByb3BlcnR5IGlzIHBhcnQgb2YgZ3JvdXBCeSIpfHwhYXBpLmFzc2VydChhIT09cywibmV3IG5hbWUgbXVzdCBiZSBkaWZmZXJlbnQgZnJvbSBvbGQgbmFtZSIpfHwhYXBpLmFzc2VydCghKGEgaW4gby5wcm9wZXJ0aWVzKSwidGhlcmUgaXMgYWxyZWFkeSBhIGRhdGEgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4gbmV3IG5hbWUiKSkpcmV0dXJuITE7bGV0IGw9ITEsZD1vLnByb3BlcnRpZXNbc10udHlwZSx1PW8ucHJvcGVydGllc1tzXS5pc1JlYWRPbmx5O3JldHVybiB2b2lkIDAhPT1uJiZuIT09ZCYmKG8ucHJvcGVydGllc1tzXS50eXBlPW4sbD0hMCksdm9pZCAwIT09aSYmaSE9PXUmJihvLnByb3BlcnRpZXNbc10uaXNSZWFkT25seT1pLGw9ITApLHZvaWQgMCE9PWEmJmEhPT1zJiYoby5wcm9wZXJ0aWVzW2FdPW8ucHJvcGVydGllc1tzXSxkZWxldGUgby5wcm9wZXJ0aWVzW3NdLGw9ITApLGwmJihhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixvKSxhcGkuZW1pdCgidXBkYXRlUHJvcGVydHlEZWZpbml0aW9uIix7c3ltYm9sOnQsb3JpZ2luYWxOYW1lOnMsb3JpZ2luYWxUeXBlOmQsb3JpZ2luYWxJc1JlYWRPbmx5OnUsbmV3TmFtZTphLG5ld1R5cGU6bixuZXdJc1JlYWRPbmx5Oml9KSksITB9fXJldHVybiExfSxhY3Rpb25zLmFkZFByb3BlcnR5PWFzeW5jIGU9PntsZXR7c3ltYm9sOnQsbmFtZTpzLHR5cGU6YSxpc1JlYWRPbmx5Om4sYXV0aG9yaXplZEVkaXRpbmdBY2NvdW50czppLGF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzOnIsaXNTaWduZWRXaXRoQWN0aXZlS2V5Om99PWUsbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSkse2RhdGFQcm9wZXJ0eUNyZWF0aW9uRmVlOmR9PWw7aWYoYXBpLmFzc2VydCghMD09PW8sInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHQmJiJzdHJpbmciPT10eXBlb2YgdCYmcyYmInN0cmluZyI9PXR5cGVvZiBzJiYodm9pZCAwPT09bnx8ImJvb2xlYW4iPT10eXBlb2YgbikmJih2b2lkIDA9PT1pfHxpJiYib2JqZWN0Ij09dHlwZW9mIGkmJkFycmF5LmlzQXJyYXkoaSkpJiYodm9pZCAwPT09cnx8ciYmIm9iamVjdCI9PXR5cGVvZiByJiZBcnJheS5pc0FycmF5KHIpKSYmYSYmInN0cmluZyI9PXR5cGVvZiBhLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMocykmJnMubGVuZ3RoPjAmJnMubGVuZ3RoPD0yNSwiaW52YWxpZCBuYW1lOiBsZXR0ZXJzICYgbnVtYmVycyBvbmx5LCBtYXggbGVuZ3RoIG9mIDI1IikmJmFwaS5hc3NlcnQoIm51bWJlciI9PT1hfHwic3RyaW5nIj09PWF8fCJib29sZWFuIj09PWEsImludmFsaWQgdHlwZTogbXVzdCBiZSBudW1iZXIsIHN0cmluZywgb3IgYm9vbGVhbiIpKXtsZXQgdT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDp0fSk7aWYodSYmYXBpLmFzc2VydCghKHMgaW4gdS5wcm9wZXJ0aWVzKSwiY2Fubm90IGFkZCB0aGUgc2FtZSBwcm9wZXJ0eSB0d2ljZSIpJiZhcGkuYXNzZXJ0KHUuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2xldCBjPU9iamVjdC5rZXlzKHUucHJvcGVydGllcykubGVuZ3RoO2lmKGM+PTMpe2xldCBmPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOiJCRUUifSkscD0hIWFwaS5CaWdOdW1iZXIoZCkubHRlKDApfHxmJiZhcGkuQmlnTnVtYmVyKGYuYmFsYW5jZSkuZ3RlKGQpO2lmKCFhcGkuYXNzZXJ0KHAsInlvdSBtdXN0IGhhdmUgZW5vdWdoIHRva2VucyB0byBjb3ZlciB0aGUgY3JlYXRpb24gZmVlcyIpKXJldHVybiExO2lmKGFwaS5CaWdOdW1iZXIoZCkuZ3QoMCkpe2xldCBnPWF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOiJCRUUiLHF1YW50aXR5OmQsaXNTaWduZWRXaXRoQWN0aXZlS2V5Om99KTtpZighaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQoZyxhcGkuc2VuZGVyLCJudWxsIiwiQkVFIixkLCJ0cmFuc2ZlciIpKXJldHVybiExfX1sZXQgeT12b2lkIDAhPT1uJiZuLG09dm9pZCAwPT09aT9bYXBpLnNlbmRlcl06W10sJD17dHlwZTphLGlzUmVhZE9ubHk6eSxhdXRob3JpemVkRWRpdGluZ0FjY291bnRzOm0sYXV0aG9yaXplZEVkaXRpbmdDb250cmFjdHM6W119O3JldHVybiB1LnByb3BlcnRpZXNbc109JCxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIix1KSwoaXx8cikmJmF3YWl0IGFjdGlvbnMuc2V0UHJvcGVydHlQZXJtaXNzaW9ucyh7c3ltYm9sOnQsbmFtZTpzLGFjY291bnRzOmksY29udHJhY3RzOnIsaXNTaWduZWRXaXRoQWN0aXZlS2V5Om99KSwhMH19cmV0dXJuITF9LGFjdGlvbnMuc2V0UHJvcGVydHlQZXJtaXNzaW9ucz1hc3luYyBlPT57bGV0e3N5bWJvbDp0LG5hbWU6cyxhY2NvdW50czphLGNvbnRyYWN0czpuLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppfT1lO2lmKGFwaS5hc3NlcnQoITA9PT1pLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCh0JiYic3RyaW5nIj09dHlwZW9mIHQmJnMmJiJzdHJpbmciPT10eXBlb2YgcyYmKHZvaWQgMD09PWF8fGEmJiJvYmplY3QiPT10eXBlb2YgYSYmQXJyYXkuaXNBcnJheShhKSkmJih2b2lkIDA9PT1ufHxuJiYib2JqZWN0Ij09dHlwZW9mIG4mJkFycmF5LmlzQXJyYXkobikpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMocykmJnMubGVuZ3RoPjAmJnMubGVuZ3RoPD0yNSwiaW52YWxpZCBuYW1lOiBsZXR0ZXJzICYgbnVtYmVycyBvbmx5LCBtYXggbGVuZ3RoIG9mIDI1IikmJmFwaS5hc3NlcnQodm9pZCAwPT09YXx8YS5sZW5ndGg8PTEwLCJjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gMTAgYXV0aG9yaXplZCBhY2NvdW50cyIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PW58fG4ubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgY29udHJhY3RzIikmJmFwaS5hc3NlcnQodm9pZCAwPT09YXx8aXNWYWxpZEFjY291bnRzQXJyYXkoYSksImludmFsaWQgYWNjb3VudCBsaXN0IikmJmFwaS5hc3NlcnQodm9pZCAwPT09bnx8aXNWYWxpZENvbnRyYWN0c0FycmF5KG4pLCJpbnZhbGlkIGNvbnRyYWN0IGxpc3QiKSl7bGV0IHI9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6dH0pO2lmKHImJmFwaS5hc3NlcnQocyBpbiByLnByb3BlcnRpZXMsInByb3BlcnR5IG11c3QgZXhpc3QiKSYmYXBpLmFzc2VydChyLmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpKXtsZXQgbz1bXSxsPVtdO2lmKGEmJihvPWEubWFwKGU9PmUudHJpbSgpLnRvTG93ZXJDYXNlKCkpKSxuJiYobD1uLm1hcChlPT5lLnRyaW0oKSkpLGFwaS5hc3NlcnQodm9pZCAwPT09YXx8IWNvbnRhaW5zRHVwbGljYXRlcyhvKSwiY2Fubm90IGFkZCB0aGUgc2FtZSBhY2NvdW50IHR3aWNlIikmJmFwaS5hc3NlcnQodm9pZCAwPT09bnx8IWNvbnRhaW5zRHVwbGljYXRlcyhsKSwiY2Fubm90IGFkZCB0aGUgc2FtZSBjb250cmFjdCB0d2ljZSIpKXtsZXQgZD0hMTthJiYoci5wcm9wZXJ0aWVzW3NdLmF1dGhvcml6ZWRFZGl0aW5nQWNjb3VudHM9byxkPSEwKSxuJiYoci5wcm9wZXJ0aWVzW3NdLmF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzPWwsZD0hMCksZCYmYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIscil9fX19LGFjdGlvbnMuc2V0R3JvdXBCeT1hc3luYyBlPT57bGV0e3N5bWJvbDp0LHByb3BlcnRpZXM6cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6YX09ZTtpZihhcGkuYXNzZXJ0KCEwPT09YSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQodCYmInN0cmluZyI9PXR5cGVvZiB0JiZzJiYib2JqZWN0Ij09dHlwZW9mIHMmJkFycmF5LmlzQXJyYXkocyksImludmFsaWQgcGFyYW1zIikpe2xldCBuPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnR9KTtpZihuKXtsZXQgaT1PYmplY3Qua2V5cyhuLnByb3BlcnRpZXMpLmxlbmd0aDtpZihhcGkuYXNzZXJ0KG4uaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJmFwaS5hc3NlcnQodm9pZCAwPT09bi5ncm91cEJ5fHwwPT09bi5ncm91cEJ5Lmxlbmd0aCwibGlzdCBpcyBhbHJlYWR5IHNldCIpJiZhcGkuYXNzZXJ0KHMubGVuZ3RoPD1pLCJjYW5ub3Qgc2V0IG1vcmUgZGF0YSBwcm9wZXJ0aWVzIHRoYW4gTkZUIGhhcyIpJiZhcGkuYXNzZXJ0KCFjb250YWluc0R1cGxpY2F0ZXMocyksImxpc3QgY2Fubm90IGNvbnRhaW4gZHVwbGljYXRlcyIpKXtmb3IobGV0IHI9MDtyPHMubGVuZ3RoO3IrPTEpe2xldCBvPXNbcl07aWYoIWFwaS5hc3NlcnQobyYmInN0cmluZyI9PXR5cGVvZiBvJiZvIGluIG4ucHJvcGVydGllcywiZGF0YSBwcm9wZXJ0eSBtdXN0IGV4aXN0IikpcmV0dXJuITF9cmV0dXJuIG4uZ3JvdXBCeT1zLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLG4pLCEwfX19cmV0dXJuITF9LGFjdGlvbnMuc2V0UHJvcGVydGllcz1hc3luYyBlPT57bGV0e3N5bWJvbDp0LGZyb21UeXBlOnMsbmZ0czphLGNhbGxpbmdDb250cmFjdEluZm86bn09ZSxpPVsidXNlciIsImNvbnRyYWN0Il0scj12b2lkIDA9PT1zPyJ1c2VyIjpzO2lmKGFwaS5hc3NlcnQoYSYmIm9iamVjdCI9PXR5cGVvZiBhJiZBcnJheS5pc0FycmF5KGEpJiZyJiYic3RyaW5nIj09dHlwZW9mIHImJmkuaW5jbHVkZXMocikmJnQmJiJzdHJpbmciPT10eXBlb2YgdCYmKG58fHZvaWQgMD09PW4mJiJ1c2VyIj09PXIpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGEubGVuZ3RoPD01MCwiY2Fubm90IHNldCBwcm9wZXJ0aWVzIG9uIG1vcmUgdGhhbiA1MCBORlQgaW5zdGFuY2VzIGF0IG9uY2UiKSl7bGV0IG89InVzZXIiPT09cj9hcGkuc2VuZGVyOm4ubmFtZSxsPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnR9KTtpZihhcGkuYXNzZXJ0KG51bGwhPT1sLCJzeW1ib2wgZG9lcyBub3QgZXhpc3QiKSl7aWYoIWlzVmFsaWREYXRhUHJvcGVydGllc0FycmF5KG8scixsLGEpKXJldHVybiExO2xldCBkPXQrImluc3RhbmNlcyI7Zm9yKGxldCB1PTA7dTxhLmxlbmd0aDt1Kz0xKXtsZXR7aWQ6Yyxwcm9wZXJ0aWVzOmZ9PWFbdV07aWYoMD09PU9iamVjdC5rZXlzKGYpLmxlbmd0aCljb250aW51ZTtsZXQgcD1hd2FpdCBhcGkuZGIuZmluZE9uZShkLHtfaWQ6YXBpLkJpZ051bWJlcihjKS50b051bWJlcigpfSk7aWYoYXBpLmFzc2VydChudWxsIT09cCwibmZ0IGluc3RhbmNlIGRvZXMgbm90IGV4aXN0Iikpe2xldCBnPSExO2ZvcihsZXRbeSxtXW9mIE9iamVjdC5lbnRyaWVzKGYpKXtsZXQgJD1sLnByb3BlcnRpZXNbeV0saD1udWxsOyQuaXNSZWFkT25seT9hcGkuYXNzZXJ0KCEoeSBpbiBwLnByb3BlcnRpZXMpLCJjYW5ub3QgZWRpdCByZWFkLW9ubHkgcHJvcGVydGllcyIpJiYocC5wcm9wZXJ0aWVzW3ldPW0sZz0hMCk6KGg9cC5wcm9wZXJ0aWVzW3ldLHAucHJvcGVydGllc1t5XT1tLGc9ITApLGcmJmghPT1tJiZhd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoIm1pbmluZyIsImhhbmRsZU5mdFNldFByb3BlcnR5Iix7c3ltYm9sOnQsbmZ0OnAscHJvcGVydHlOYW1lOnksb2xkVmFsdWU6aH0pfWcmJmF3YWl0IGFwaS5kYi51cGRhdGUoZCxwKX19cmV0dXJuITB9fXJldHVybiExfSxhY3Rpb25zLmJ1cm49YXN5bmMgZT0+e2xldHtmcm9tVHlwZTp0LG5mdHM6cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6YSxjYWxsaW5nQ29udHJhY3RJbmZvOm59PWUsaT1bInVzZXIiLCJjb250cmFjdCJdLHI9dm9pZCAwPT09dD8idXNlciI6dDtpZihhcGkuYXNzZXJ0KCEwPT09YSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQociYmInN0cmluZyI9PXR5cGVvZiByJiZpLmluY2x1ZGVzKHIpJiYobnx8dm9pZCAwPT09biYmInVzZXIiPT09cikmJnMmJiJvYmplY3QiPT10eXBlb2YgcyYmQXJyYXkuaXNBcnJheShzKSwiaW52YWxpZCBwYXJhbXMiKSYmaXNWYWxpZE5mdElkQXJyYXkocykpe2xldCBvPSJ1c2VyIj09PXI/YXBpLnNlbmRlcjpuLm5hbWUsbD0wLGQ9MCx1PSExO2ZvcihsZXQgYz0wO2M8cy5sZW5ndGg7Yys9MSl7bGV0e3N5bWJvbDpmLGlkczpwfT1zW2NdLGc9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6Zn0pO2lmKGcpe2xldCB5PWYrImluc3RhbmNlcyI7Zm9yKGxldCBtPTA7bTxwLmxlbmd0aDttKz0xKXtsZXQgJD1wW21dLGg9YXdhaXQgYXBpLmRiLmZpbmRPbmUoeSx7X2lkOmFwaS5CaWdOdW1iZXIoJCkudG9OdW1iZXIoKX0pO2lmKGgpe2xldCBiPSEwO2lmKGgubG9ja2VkTmZ0cyYmaC5sb2NrZWROZnRzLmxlbmd0aD4wPygwPT09ZCYmKHU9ITApLCgobCs9MSk+MXx8IXUpJiYoYj0hMSkpOnUmJihiPSExKSxkKz0xLGguYWNjb3VudD09PW8mJigidSI9PT1oLm93bmVkQnkmJiJ1c2VyIj09PXJ8fCJjIj09PWgub3duZWRCeSYmImNvbnRyYWN0Ij09PXIpJiZ2b2lkIDA9PT1oLmRlbGVnYXRlZFRvJiZiKXtsZXQgdj17fSx3PSEwO2ZvcihsZXRbTixfXW9mIE9iamVjdC5lbnRyaWVzKGgubG9ja2VkVG9rZW5zKSl7bGV0IEE9YXdhaXQgYXBpLnRyYW5zZmVyVG9rZW5zKG8sTixfLHIpO2lzVG9rZW5UcmFuc2ZlclZlcmlmaWVkKEEsIm5mdCIsbyxOLF8sInRyYW5zZmVyRnJvbUNvbnRyYWN0Iil8fCh2W05dPV8sdz0hMSl9YXBpLmFzc2VydCh3LGB1bmFibGUgdG8gcmVsZWFzZSBsb2NrZWQgdG9rZW5zIGluOiAke2Z9LCBpZCAkeyR9YCk7bGV0IFQ9aC5sb2NrZWROZnRzJiZoLmxvY2tlZE5mdHMubGVuZ3RoPjA/aC5sb2NrZWROZnRzOltdO2lmKHcmJmgubG9ja2VkTmZ0cyYmaC5sb2NrZWROZnRzLmxlbmd0aD4wKXtsZXQgaz1hd2FpdCB0cmFuc2ZlckFuZFZlcmlmeU5mdHMoIm5mdCIsImNvbnRyYWN0IixvLHIsaC5sb2NrZWROZnRzLGEse25hbWU6Im5mdCJ9KTtoLmxvY2tlZE5mdHM9ay5mYWlsLGgubG9ja2VkTmZ0cy5sZW5ndGg+MCYmKHc9ITEpLGFwaS5hc3NlcnQodyxgdW5hYmxlIHRvIHJlbGVhc2UgbG9ja2VkIE5GVCBpbnN0YW5jZXMgaW46ICR7Zn0sIGlkICR7JH1gKX1sZXQgQj1oLm93bmVkQnksRT1oLmxvY2tlZFRva2VucztoLmxvY2tlZFRva2Vucz12LHcmJihoLnByZXZpb3VzQWNjb3VudD1oLmFjY291bnQsaC5wcmV2aW91c093bmVkQnk9aC5vd25lZEJ5LGguYWNjb3VudD0ibnVsbCIsaC5vd25lZEJ5PSJ1IixnLmNpcmN1bGF0aW5nU3VwcGx5LT0xKSxhd2FpdCBhcGkuZGIudXBkYXRlKHksaCksdyYmYXBpLmVtaXQoImJ1cm4iLHthY2NvdW50Om8sb3duZWRCeTpCLHVubG9ja2VkVG9rZW5zOkUsdW5sb2NrZWROZnRzOlQsc3ltYm9sOmYsaWQ6JH0pfX19YXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsZyl9fX19LGFjdGlvbnMudHJhbnNmZXI9YXN5bmMgZT0+e2xldHtmcm9tVHlwZTp0LHRvOnMsdG9UeXBlOmEsbmZ0czpuLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppLGNhbGxpbmdDb250cmFjdEluZm86cn09ZSxvPVsidXNlciIsImNvbnRyYWN0Il0sbD12b2lkIDA9PT1hPyJ1c2VyIjphLGQ9dm9pZCAwPT09dD8idXNlciI6dDtpZihhcGkuYXNzZXJ0KCEwPT09aSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoZCYmInN0cmluZyI9PXR5cGVvZiBkJiZvLmluY2x1ZGVzKGQpJiZzJiYic3RyaW5nIj09dHlwZW9mIHMmJmwmJiJzdHJpbmciPT10eXBlb2YgbCYmby5pbmNsdWRlcyhsKSYmKHJ8fHZvaWQgMD09PXImJiJ1c2VyIj09PWQpJiZuJiYib2JqZWN0Ij09dHlwZW9mIG4mJkFycmF5LmlzQXJyYXkobiksImludmFsaWQgcGFyYW1zIikmJmlzVmFsaWROZnRJZEFycmF5KG4pKXtsZXQgdT0idXNlciI9PT1sP3MudHJpbSgpLnRvTG93ZXJDYXNlKCk6cy50cmltKCksYz0idXNlciI9PT1sP2lzVmFsaWRIaXZlQWNjb3VudExlbmd0aCh1KTppc1ZhbGlkQ29udHJhY3RMZW5ndGgodSksZj0idXNlciI9PT1kP2FwaS5zZW5kZXI6ci5uYW1lO2lmKGFwaS5hc3NlcnQoYywiaW52YWxpZCB0byIpJiZhcGkuYXNzZXJ0KCEobD09PWQmJnU9PT1mKSwiY2Fubm90IHRyYW5zZmVyIHRvIHNlbGYiKSYmYXBpLmFzc2VydCghKCJ1c2VyIj09PWwmJiJudWxsIj09PXUpLCJjYW5ub3QgdHJhbnNmZXIgdG8gbnVsbDsgdXNlIGJ1cm4gYWN0aW9uIGluc3RlYWQiKSlmb3IobGV0IHA9MDtwPG4ubGVuZ3RoO3ArPTEpe2xldHtzeW1ib2w6ZyxpZHM6eX09bltwXSxtPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOmd9KTtpZihtKXtsZXQgJD1nKyJpbnN0YW5jZXMiO2ZvcihsZXQgaD0wO2g8eS5sZW5ndGg7aCs9MSl7bGV0IGI9eVtoXSx2PWF3YWl0IGFwaS5kYi5maW5kT25lKCQse19pZDphcGkuQmlnTnVtYmVyKGIpLnRvTnVtYmVyKCl9KTtpZih2JiZ2LmFjY291bnQ9PT1mJiYoInUiPT09di5vd25lZEJ5JiYidXNlciI9PT1kfHwiYyI9PT12Lm93bmVkQnkmJiJjb250cmFjdCI9PT1kKSYmdm9pZCAwPT09di5kZWxlZ2F0ZWRUbyYmIXYuc291bEJvdW5kKXtsZXQgdz12Lm93bmVkQnksTj0idXNlciI9PT1sPyJ1IjoiYyI7di5wcmV2aW91c0FjY291bnQ9di5hY2NvdW50LHYucHJldmlvdXNPd25lZEJ5PXYub3duZWRCeSx2LmFjY291bnQ9dSx2Lm93bmVkQnk9Tixhd2FpdCBhcGkuZGIudXBkYXRlKCQsdiksYXBpLmVtaXQoInRyYW5zZmVyIix7ZnJvbTpmLGZyb21UeXBlOncsdG86dSx0b1R5cGU6TixzeW1ib2w6ZyxpZDpifSl9fX19fX0sYWN0aW9ucy5kZWxlZ2F0ZT1hc3luYyBlPT57bGV0e2Zyb21UeXBlOnQsdG86cyx0b1R5cGU6YSxuZnRzOm4saXNTaWduZWRXaXRoQWN0aXZlS2V5OmksY2FsbGluZ0NvbnRyYWN0SW5mbzpyfT1lLG89WyJ1c2VyIiwiY29udHJhY3QiXSxsPXZvaWQgMD09PWE/InVzZXIiOmEsZD12b2lkIDA9PT10PyJ1c2VyIjp0O2lmKGFwaS5hc3NlcnQoITA9PT1pLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChkJiYic3RyaW5nIj09dHlwZW9mIGQmJm8uaW5jbHVkZXMoZCkmJnMmJiJzdHJpbmciPT10eXBlb2YgcyYmbCYmInN0cmluZyI9PXR5cGVvZiBsJiZvLmluY2x1ZGVzKGwpJiYocnx8dm9pZCAwPT09ciYmInVzZXIiPT09ZCkmJm4mJiJvYmplY3QiPT10eXBlb2YgbiYmQXJyYXkuaXNBcnJheShuKSwiaW52YWxpZCBwYXJhbXMiKSYmaXNWYWxpZE5mdElkQXJyYXkobikpe2xldCB1PSJ1c2VyIj09PWw/cy50cmltKCkudG9Mb3dlckNhc2UoKTpzLnRyaW0oKSxjPSJ1c2VyIj09PWw/aXNWYWxpZEhpdmVBY2NvdW50TGVuZ3RoKHUpOmlzVmFsaWRDb250cmFjdExlbmd0aCh1KSxmPSJ1c2VyIj09PWQ/YXBpLnNlbmRlcjpyLm5hbWU7aWYoYXBpLmFzc2VydChjLCJpbnZhbGlkIHRvIikmJmFwaS5hc3NlcnQoIShsPT09ZCYmdT09PWYpLCJjYW5ub3QgZGVsZWdhdGUgdG8gc2VsZiIpJiZhcGkuYXNzZXJ0KCEoInVzZXIiPT09bCYmIm51bGwiPT09dSksImNhbm5vdCBkZWxlZ2F0ZSB0byBudWxsIikpZm9yKGxldCBwPTA7cDxuLmxlbmd0aDtwKz0xKXtsZXR7c3ltYm9sOmcsaWRzOnl9PW5bcF0sbT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpnfSk7aWYobSYmYXBpLmFzc2VydCghMD09PW0uZGVsZWdhdGlvbkVuYWJsZWQsYGRlbGVnYXRpb24gbm90IGVuYWJsZWQgZm9yICR7Z31gKSl7bGV0ICQ9ZysiaW5zdGFuY2VzIjtmb3IobGV0IGg9MDtoPHkubGVuZ3RoO2grPTEpe2xldCBiPXlbaF0sdj1hd2FpdCBhcGkuZGIuZmluZE9uZSgkLHtfaWQ6YXBpLkJpZ051bWJlcihiKS50b051bWJlcigpfSk7aWYodiYmdi5hY2NvdW50PT09ZiYmKCJ1Ij09PXYub3duZWRCeSYmInVzZXIiPT09ZHx8ImMiPT09di5vd25lZEJ5JiYiY29udHJhY3QiPT09ZCkmJnZvaWQgMD09PXYuZGVsZWdhdGVkVG8pe2xldCB3PSJ1c2VyIj09PWw/InUiOiJjIixOPXthY2NvdW50OnUsb3duZWRCeTp3fTt2LmRlbGVnYXRlZFRvPU4sYXdhaXQgYXBpLmRiLnVwZGF0ZSgkLHYpLGFwaS5lbWl0KCJkZWxlZ2F0ZSIse2Zyb206Zixmcm9tVHlwZTp2Lm93bmVkQnksdG86dSx0b1R5cGU6dyxzeW1ib2w6ZyxpZDpifSksYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJtaW5pbmciLCJoYW5kbGVOZnREZWxlZ2F0aW9uQ2hhbmdlIix7c3ltYm9sOmcsbmZ0OnYsYWRkOiEwfSl9fX19fX0sYWN0aW9ucy51bmRlbGVnYXRlPWFzeW5jIGU9PntsZXR7ZnJvbVR5cGU6dCxuZnRzOnMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmEsY2FsbGluZ0NvbnRyYWN0SW5mbzpufT1lLGk9WyJ1c2VyIiwiY29udHJhY3QiXSxyPXZvaWQgMD09PXQ/InVzZXIiOnQ7aWYoYXBpLmFzc2VydCghMD09PWEsInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHImJiJzdHJpbmciPT10eXBlb2YgciYmaS5pbmNsdWRlcyhyKSYmKG58fHZvaWQgMD09PW4mJiJ1c2VyIj09PXIpJiZzJiYib2JqZWN0Ij09dHlwZW9mIHMmJkFycmF5LmlzQXJyYXkocyksImludmFsaWQgcGFyYW1zIikmJmlzVmFsaWROZnRJZEFycmF5KHMpKXtsZXQgbz0idXNlciI9PT1yP2FwaS5zZW5kZXI6bi5uYW1lLGw9bmV3IERhdGUoYCR7YXBpLmhpdmVCbG9ja1RpbWVzdGFtcH0uMDAwWmApO2ZvcihsZXQgZD0wO2Q8cy5sZW5ndGg7ZCs9MSl7bGV0e3N5bWJvbDp1LGlkczpjfT1zW2RdLGY9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6dX0pO2lmKGYmJmFwaS5hc3NlcnQoITA9PT1mLmRlbGVnYXRpb25FbmFibGVkLGBkZWxlZ2F0aW9uIG5vdCBlbmFibGVkIGZvciAke3V9YCkpe2xldCBwPTg2NGU1KmYudW5kZWxlZ2F0aW9uQ29vbGRvd24sZz1sLmdldFRpbWUoKStwLHk9dSsiaW5zdGFuY2VzIixtPXtzeW1ib2w6dSxpZHM6W10sY29tcGxldGVUaW1lc3RhbXA6Z307Zm9yKGxldCAkPTA7JDxjLmxlbmd0aDskKz0xKXtsZXQgaD1jWyRdLGI9YXdhaXQgYXBpLmRiLmZpbmRPbmUoeSx7X2lkOmFwaS5CaWdOdW1iZXIoaCkudG9OdW1iZXIoKX0pO2ImJmIuYWNjb3VudD09PW8mJigidSI9PT1iLm93bmVkQnkmJiJ1c2VyIj09PXJ8fCJjIj09PWIub3duZWRCeSYmImNvbnRyYWN0Ij09PXIpJiZiLmRlbGVnYXRlZFRvJiZ2b2lkIDA9PT1iLmRlbGVnYXRlZFRvLnVuZGVsZWdhdGVBdCYmKGIuZGVsZWdhdGVkVG8udW5kZWxlZ2F0ZUF0PWcsbS5pZHMucHVzaChiLl9pZCksYXdhaXQgYXBpLmRiLnVwZGF0ZSh5LGIpLGFwaS5lbWl0KCJ1bmRlbGVnYXRlU3RhcnQiLHtmcm9tOmIuZGVsZWdhdGVkVG8uYWNjb3VudCxmcm9tVHlwZTpiLmRlbGVnYXRlZFRvLm93bmVkQnksc3ltYm9sOnUsaWQ6aH0pLGF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgibWluaW5nIiwiaGFuZGxlTmZ0RGVsZWdhdGlvbkNoYW5nZSIse3N5bWJvbDp1LG5mdDpiLGFkZDohMX0pKX1tLmlkcy5sZW5ndGg+MCYmYXdhaXQgYXBpLmRiLmluc2VydCgicGVuZGluZ1VuZGVsZWdhdGlvbnMiLG0pfX19fTtjb25zdCBwcm9jZXNzVW5kZWxlZ2F0aW9uPWFzeW5jIGU9PntsZXR7c3ltYm9sOnQsaWRzOnN9PWUsYT10KyJpbnN0YW5jZXMiLG49YXdhaXQgYXBpLmRiLmZpbmQoYSx7X2lkOnskaW46c319LDUwLDAsW3tpbmRleDoiX2lkIixkZXNjZW5kaW5nOiExfV0pO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSs9MSlkZWxldGUgbltpXS5kZWxlZ2F0ZWRUbyxhd2FpdCBhcGkuZGIudXBkYXRlKGEsbltpXSx7ZGVsZWdhdGVkVG86IiJ9KTthd2FpdCBhcGkuZGIucmVtb3ZlKCJwZW5kaW5nVW5kZWxlZ2F0aW9ucyIsZSksYXBpLmVtaXQoInVuZGVsZWdhdGVEb25lIix7c3ltYm9sOnQsaWRzOnN9KX07YWN0aW9ucy5jaGVja1BlbmRpbmdVbmRlbGVnYXRpb25zPWFzeW5jKCk9PntpZihhcGkuYXNzZXJ0KCJudWxsIj09PWFwaS5zZW5kZXIsIm5vdCBhdXRob3JpemVkIikpe2xldCBlPW5ldyBEYXRlKGAke2FwaS5oaXZlQmxvY2tUaW1lc3RhbXB9LjAwMFpgKSx0PWUuZ2V0VGltZSgpLHM9YXdhaXQgYXBpLmRiLmZpbmQoInBlbmRpbmdVbmRlbGVnYXRpb25zIix7Y29tcGxldGVUaW1lc3RhbXA6eyRsdGU6dH19KSxhPXMubGVuZ3RoO2Zvcig7YT4wOyl7Zm9yKGxldCBuPTA7bjxhO24rPTEpe2xldCBpPXNbbl07YXdhaXQgcHJvY2Vzc1VuZGVsZWdhdGlvbihpKX1hPShzPWF3YWl0IGFwaS5kYi5maW5kKCJwZW5kaW5nVW5kZWxlZ2F0aW9ucyIse2NvbXBsZXRlVGltZXN0YW1wOnskbHRlOnR9fSkpLmxlbmd0aH19fSxhY3Rpb25zLmNyZWF0ZT1hc3luYyBlPT57bGV0e25hbWU6dCxvcmdOYW1lOnMscHJvZHVjdE5hbWU6YSxzeW1ib2w6bix1cmw6aSxtYXhTdXBwbHk6cixhdXRob3JpemVkSXNzdWluZ0FjY291bnRzOm8sYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHM6bCxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6ZH09ZSx1PWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KSx7bmZ0Q3JlYXRpb25GZWU6Y309dSxmPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOiJCRUUifSkscD0hIWFwaS5CaWdOdW1iZXIoYykubHRlKDApfHxmJiZhcGkuQmlnTnVtYmVyKGYuYmFsYW5jZSkuZ3RlKGMpO2lmKGFwaS5hc3NlcnQocCwieW91IG11c3QgaGF2ZSBlbm91Z2ggdG9rZW5zIHRvIGNvdmVyIHRoZSBjcmVhdGlvbiBmZWVzIikmJmFwaS5hc3NlcnQoITA9PT1kLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCh0JiYic3RyaW5nIj09dHlwZW9mIHQmJm4mJiJzdHJpbmciPT10eXBlb2YgbiYmKHZvaWQgMD09PWl8fGkmJiJzdHJpbmciPT10eXBlb2YgaSkmJih2b2lkIDA9PT1zfHxzJiYic3RyaW5nIj09dHlwZW9mIHMpJiYodm9pZCAwPT09YXx8YSYmInN0cmluZyI9PXR5cGVvZiBhKSYmKHZvaWQgMD09PW98fG8mJiJvYmplY3QiPT10eXBlb2YgbyYmQXJyYXkuaXNBcnJheShvKSkmJih2b2lkIDA9PT1sfHxsJiYib2JqZWN0Ij09dHlwZW9mIGwmJkFycmF5LmlzQXJyYXkobCkpJiYodm9pZCAwPT09cnx8ciYmInN0cmluZyI9PXR5cGVvZiByJiYhYXBpLkJpZ051bWJlcihyKS5pc05hTigpKSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChhcGkudmFsaWRhdG9yLmlzQWxwaGEobikmJmFwaS52YWxpZGF0b3IuaXNVcHBlcmNhc2UobikmJm4ubGVuZ3RoPjAmJm4ubGVuZ3RoPD0xMCwiaW52YWxpZCBzeW1ib2w6IHVwcGVyY2FzZSBsZXR0ZXJzIG9ubHksIG1heCBsZW5ndGggb2YgMTAiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1SRVNFUlZFRF9TWU1CT0xTW25dfHxhcGkuc2VuZGVyPT09UkVTRVJWRURfU1lNQk9MU1tuXSwiY2Fubm90IHVzZSB0aGlzIHN5bWJvbCIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QodCwiICIpKSYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PTUwLCJpbnZhbGlkIG5hbWU6IGxldHRlcnMsIG51bWJlcnMsIHdoaXRlc3BhY2VzIG9ubHksIG1heCBsZW5ndGggb2YgNTAiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1zfHxhcGkudmFsaWRhdG9yLmlzQWxwaGFudW1lcmljKGFwaS52YWxpZGF0b3IuYmxhY2tsaXN0KHMsIiAiKSkmJnMubGVuZ3RoPjAmJnMubGVuZ3RoPD01MCwiaW52YWxpZCBvcmcgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWF8fGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QoYSwiICIpKSYmYS5sZW5ndGg+MCYmYS5sZW5ndGg8PTUwLCJpbnZhbGlkIHByb2R1Y3QgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWl8fGkubGVuZ3RoPD0yNTUsImludmFsaWQgdXJsOiBtYXggbGVuZ3RoIG9mIDI1NSIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PXJ8fGFwaS5CaWdOdW1iZXIocikuZ3QoMCksIm1heFN1cHBseSBtdXN0IGJlIHBvc2l0aXZlIikmJmFwaS5hc3NlcnQodm9pZCAwPT09cnx8YXBpLkJpZ051bWJlcihyKS5sdGUoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLGBtYXhTdXBwbHkgbXVzdCBiZSBsb3dlciB0aGFuICR7TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJ9YCkpe2xldCBnPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOm59KTtpZihhcGkuYXNzZXJ0KG51bGw9PT1nLCJzeW1ib2wgYWxyZWFkeSBleGlzdHMiKSl7aWYoYXBpLkJpZ051bWJlcihjKS5ndCgwKSl7bGV0IHk9YXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlciIse3RvOiJudWxsIixzeW1ib2w6IkJFRSIscXVhbnRpdHk6Yyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6ZH0pO2lmKCFpc1Rva2VuVHJhbnNmZXJWZXJpZmllZCh5LGFwaS5zZW5kZXIsIm51bGwiLCJCRUUiLGMsInRyYW5zZmVyIikpcmV0dXJuITF9bGV0IG09dm9pZCAwPT09cj8wOmFwaS5CaWdOdW1iZXIocikuaW50ZWdlclZhbHVlKGFwaS5CaWdOdW1iZXIuUk9VTkRfRE9XTikudG9OdW1iZXIoKSwkPXZvaWQgMD09PXM/IiI6cyxoPXZvaWQgMD09PWE/IiI6YSxiPXZvaWQgMD09PWk/IiI6aSx2PXt1cmw6Yn07dj1KU09OLnN0cmluZ2lmeSh2KTtsZXQgdz12b2lkIDA9PT1vP1thcGkuc2VuZGVyXTpbXSxOPXtpc3N1ZXI6YXBpLnNlbmRlcixzeW1ib2w6bixuYW1lOnQsb3JnTmFtZTokLHByb2R1Y3ROYW1lOmgsbWV0YWRhdGE6dixtYXhTdXBwbHk6bSxzdXBwbHk6MCxjaXJjdWxhdGluZ1N1cHBseTowLGRlbGVnYXRpb25FbmFibGVkOiExLHVuZGVsZWdhdGlvbkNvb2xkb3duOjAsYXV0aG9yaXplZElzc3VpbmdBY2NvdW50czp3LGF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzOltdLHByb3BlcnRpZXM6e30sZ3JvdXBCeTpbXX0sXz1uKyJpbnN0YW5jZXMiLEE9YXdhaXQgYXBpLmRiLnRhYmxlRXhpc3RzKF8pO3JldHVybiExPT09QSYmYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKF8sWyJhY2NvdW50Iiwib3duZWRCeSJdKSxhd2FpdCBhcGkuZGIuaW5zZXJ0KCJuZnRzIixOKSx2b2lkIDAhPT1vJiZhd2FpdCBhY3Rpb25zLmFkZEF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMoe2FjY291bnRzOm8sc3ltYm9sOm4saXNTaWduZWRXaXRoQWN0aXZlS2V5OmR9KSx2b2lkIDAhPT1sJiZhd2FpdCBhY3Rpb25zLmFkZEF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzKHtjb250cmFjdHM6bCxzeW1ib2w6bixpc1NpZ25lZFdpdGhBY3RpdmVLZXk6ZH0pLCEwfX1yZXR1cm4hMX0sYWN0aW9ucy5pc3N1ZT1hc3luYyBlPT57bGV0e3N5bWJvbDp0LGZyb21UeXBlOnMsdG86YSx0b1R5cGU6bixmZWVTeW1ib2w6aSxsb2NrVG9rZW5zOnIsbG9ja05mdHM6byxzb3VsQm91bmQ6bCxwcm9wZXJ0aWVzOmQsaXNTaWduZWRXaXRoQWN0aXZlS2V5OnUsY2FsbGluZ0NvbnRyYWN0SW5mbzpjfT1lLGY9WyJ1c2VyIiwiY29udHJhY3QiXSxwPXZvaWQgMD09PW4/InVzZXIiOm4sZz12b2lkIDA9PT1zPyJ1c2VyIjpzLHk9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pLHtuZnRJc3N1YW5jZUZlZTptfT15O2lmKGFwaS5hc3NlcnQoITA9PT11LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCh0JiYic3RyaW5nIj09dHlwZW9mIHQmJmcmJiJzdHJpbmciPT10eXBlb2YgZyYmZi5pbmNsdWRlcyhnKSYmKGN8fHZvaWQgMD09PWMmJiJ1c2VyIj09PWcpJiZhJiYic3RyaW5nIj09dHlwZW9mIGEmJnAmJiJzdHJpbmciPT10eXBlb2YgcCYmZi5pbmNsdWRlcyhwKSYmaSYmInN0cmluZyI9PXR5cGVvZiBpJiZpIGluIG0mJih2b2lkIDA9PT1kfHxkJiYib2JqZWN0Ij09dHlwZW9mIGQpJiYodm9pZCAwPT09cnx8ciYmIm9iamVjdCI9PXR5cGVvZiByKSYmKHZvaWQgMD09PW98fG8mJiJvYmplY3QiPT10eXBlb2YgbyYmQXJyYXkuaXNBcnJheShvKSkmJih2b2lkIDA9PT1sfHxsJiYiYm9vbGVhbiI9PXR5cGVvZiBsKSwiaW52YWxpZCBwYXJhbXMiKSYmKHZvaWQgMD09PW98fGlzVmFsaWROZnRJZEFycmF5KG8pKSl7bGV0ICQ9InVzZXIiPT09cD9hLnRyaW0oKS50b0xvd2VyQ2FzZSgpOmEudHJpbSgpLGg9InVzZXIiPT09cD9pc1ZhbGlkSGl2ZUFjY291bnRMZW5ndGgoJCk6aXNWYWxpZENvbnRyYWN0TGVuZ3RoKCQpLGI9InVzZXIiPT09Zz9hcGkuc2VuZGVyOmMubmFtZSx2PSJ1c2VyIj09PWc/ImJhbGFuY2VzIjoiY29udHJhY3RzQmFsYW5jZXMiO2lmKGFwaS5hc3NlcnQoaCwiaW52YWxpZCB0byIpKXtsZXQgdz1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDp0fSksTj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDppfSk7aWYoYXBpLmFzc2VydChudWxsIT09dywic3ltYm9sIGRvZXMgbm90IGV4aXN0IikmJmFwaS5hc3NlcnQobnVsbCE9PU4sImZlZSBzeW1ib2wgZG9lcyBub3QgZXhpc3QiKSl7bGV0IF89dCsiaW5zdGFuY2VzIjtpZihhcGkuYXNzZXJ0KCJjb250cmFjdCI9PT1nJiZ3LmF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzLmluY2x1ZGVzKGIpfHwidXNlciI9PT1nJiZ3LmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMuaW5jbHVkZXMoYiksIm5vdCBhbGxvd2VkIHRvIGlzc3VlIHRva2VucyIpJiZhcGkuYXNzZXJ0KDA9PT13Lm1heFN1cHBseXx8dy5zdXBwbHk8dy5tYXhTdXBwbHksIm1heCBzdXBwbHkgbGltaXQgcmVhY2hlZCIpKXtsZXQgQT1PYmplY3Qua2V5cyh3LnByb3BlcnRpZXMpLmxlbmd0aCxUPWFwaS5CaWdOdW1iZXIobVtpXSkubXVsdGlwbGllZEJ5KEEpLGs9Y2FsY3VsYXRlQmFsYW5jZShtW2ldLFQsTi5wcmVjaXNpb24sITApLEI9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLHYse2FjY291bnQ6YixzeW1ib2w6aX0pLEU9ISFhcGkuQmlnTnVtYmVyKGspLmx0ZSgwKXx8QiYmYXBpLkJpZ051bWJlcihCLmJhbGFuY2UpLmd0ZShrKTtpZihyKXtsZXQgTz1hd2FpdCBpc1ZhbGlkVG9rZW5CYXNrZXQocix2LGIsaSxrKTtpZighYXBpLmFzc2VydChPLCJpbnZhbGlkIGJhc2tldCBvZiB0b2tlbnMgdG8gbG9jayAoY2Fubm90IGxvY2sgbW9yZSB0aGFuIDEwIHRva2VuIHR5cGVzOyBpc3N1aW5nIGFjY291bnQgbXVzdCBoYXZlIGVub3VnaCBiYWxhbmNlKSIpKXJldHVybiExfWxldCBDPXt9O2lmKHZvaWQgMCE9PWQpe3RyeXtpZighaXNWYWxpZERhdGFQcm9wZXJ0aWVzKGIsZyx3LGQpKXJldHVybiExfWNhdGNoKEkpe3JldHVybiExfUM9ZH1pZihhcGkuYXNzZXJ0KEUsInlvdSBtdXN0IGhhdmUgZW5vdWdoIHRva2VucyB0byBjb3ZlciB0aGUgaXNzdWFuY2UgZmVlcyIpKXtpZihhcGkuQmlnTnVtYmVyKGspLmd0KDApKXtpZigiY29udHJhY3QiPT09Zyl7bGV0IFM9YXdhaXQgYXBpLnRyYW5zZmVyVG9rZW5zRnJvbUNhbGxpbmdDb250cmFjdCgibnVsbCIsaSxrLCJ1c2VyIik7aWYoIWFwaS5hc3NlcnQoaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQoUyxiLCJudWxsIixpLGssInRyYW5zZmVyRnJvbUNvbnRyYWN0IiksInVuYWJsZSB0byB0cmFuc2ZlciBpc3N1YW5jZSBmZWUiKSlyZXR1cm4hMX1lbHNle2xldCBWPWF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOmkscXVhbnRpdHk6ayxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6dX0pO2lmKCFhcGkuYXNzZXJ0KGlzVG9rZW5UcmFuc2ZlclZlcmlmaWVkKFYsYiwibnVsbCIsaSxrLCJ0cmFuc2ZlciIpLCJ1bmFibGUgdG8gdHJhbnNmZXIgaXNzdWFuY2UgZmVlIikpcmV0dXJuITF9fWxldCB4PXt9O2lmKHIpZm9yKGxldFtqLExdb2YgT2JqZWN0LmVudHJpZXMocikpaWYoImNvbnRyYWN0Ij09PWcpe2xldCB6PWF3YWl0IGFwaS50cmFuc2ZlclRva2Vuc0Zyb21DYWxsaW5nQ29udHJhY3QoIm5mdCIsaixMLCJjb250cmFjdCIpO2lzVG9rZW5UcmFuc2ZlclZlcmlmaWVkKHosYiwibmZ0IixqLEwsInRyYW5zZmVyRnJvbUNvbnRyYWN0IikmJih4W2pdPUwpfWVsc2V7bGV0IFI9YXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlclRvQ29udHJhY3QiLHt0bzoibmZ0IixzeW1ib2w6aixxdWFudGl0eTpMLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTp1fSk7aXNUb2tlblRyYW5zZmVyVmVyaWZpZWQoUixiLCJuZnQiLGosTCwidHJhbnNmZXJUb0NvbnRyYWN0IikmJih4W2pdPUwpfWxldCBGPVtdO2lmKG8mJm8ubGVuZ3RoPjApe2xldCBEPWF3YWl0IHRyYW5zZmVyQW5kVmVyaWZ5TmZ0cyhiLGcsIm5mdCIsImNvbnRyYWN0IixvLHUsYyk7Rj1ELnN1Y2Nlc3N9bGV0IE09InVzZXIiPT09cD8idSI6ImMiLFA9e307UD1GLmxlbmd0aD4wP3thY2NvdW50OiQsc291bEJvdW5kOmwsb3duZWRCeTpNLGxvY2tlZFRva2Vuczp4LGxvY2tlZE5mdHM6Rixwcm9wZXJ0aWVzOkN9OnthY2NvdW50OiQsc291bEJvdW5kOmwsb3duZWRCeTpNLGxvY2tlZFRva2Vuczp4LHByb3BlcnRpZXM6Q307bGV0IFU9YXdhaXQgYXBpLmRiLmluc2VydChfLFApO3JldHVybiB3LnN1cHBseSs9MSwoIm51bGwiIT09JHx8ImNvbnRyYWN0Ij09PXApJiYody5jaXJjdWxhdGluZ1N1cHBseSs9MSksYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsdyksYXBpLmVtaXQoImlzc3VlIix7ZnJvbTpiLGZyb21UeXBlOmcsdG86JCx0b1R5cGU6cCxzeW1ib2w6dCxsb2NrZWRUb2tlbnM6eCxsb2NrZWROZnRzOkYscHJvcGVydGllczpDLGlkOlUuX2lkfSksITB9fX19fXJldHVybiExfSxhY3Rpb25zLmlzc3VlTXVsdGlwbGU9YXN5bmMgZT0+e2xldHtpbnN0YW5jZXM6dCxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6cyxjYWxsaW5nQ29udHJhY3RJbmZvOmF9PWU7aWYoYXBpLmFzc2VydCghMD09PXMsInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHQmJiJvYmplY3QiPT10eXBlb2YgdCYmQXJyYXkuaXNBcnJheSh0KSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydCh0Lmxlbmd0aDw9MTAsImNhbm5vdCBpc3N1ZSBtb3JlIHRoYW4gMTAgTkZUIGluc3RhbmNlcyBhdCBvbmNlIikpe2xldCBuPTA7aWYodC5mb3JFYWNoKGU9PntlLmxvY2tOZnRzJiYobis9MSl9KSxhcGkuYXNzZXJ0KG48PTEsImNhbm5vdCBpc3N1ZSBtb3JlIHRoYW4gMSBjb250YWluZXIgTkZUIGluc3RhbmNlcyBhdCBvbmNlIikmJmFwaS5hc3NlcnQoMD09PW58fG49PT10Lmxlbmd0aCwiY2Fubm90IGlzc3VlIGEgbWl4IG9mIGNvbnRhaW5lciBhbmQgbm9uLWNvbnRhaW5lciBORlQgaW5zdGFuY2VzIHNpbXVsdGFuZW91c2x5IikpZm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKz0xKXtsZXR7c3ltYm9sOnIsZnJvbVR5cGU6byx0bzpsLHRvVHlwZTpkLGZlZVN5bWJvbDp1LGxvY2tUb2tlbnM6Yyxsb2NrTmZ0czpmLHByb3BlcnRpZXM6cH09dFtpXTthd2FpdCBhY3Rpb25zLmlzc3VlKHtzeW1ib2w6cixmcm9tVHlwZTpvLHRvOmwsdG9UeXBlOmQsZmVlU3ltYm9sOnUsbG9ja1Rva2VuczpjLGxvY2tOZnRzOmYscHJvcGVydGllczpwLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTpzLGNhbGxpbmdDb250cmFjdEluZm86YX0pfX19Ow=="}}}
{"id":"ssc-testnet-hive","json":{"contractName":"contract","contractAction":"update","contractPayload":{"name":"nft","params":"","code":"Y29uc3QgQ09OVFJBQ1RfTkFNRT0ibmZ0IixVVElMSVRZX1RPS0VOX1NZTUJPTD0iQkVFIixNQVhfTlVNX0FVVEhPUklaRURfSVNTVUVSUz0xMCxNQVhfTlVNX0xPQ0tFRF9UT0tFTl9UWVBFUz0xMCxNQVhfU1lNQk9MX0xFTkdUSD0xMCxNQVhfREFUQV9QUk9QRVJUWV9MRU5HVEg9MTAwLE1BWF9OVU1fTkZUU19JU1NVQUJMRT0xMCxNQVhfTlVNX05GVFNfRURJVEFCTEU9NTAsTUFYX05VTV9ORlRTX09QRVJBQkxFPTUwLE1BWF9OVU1fQ09OVEFJTkVSX05GVFNfT1BFUkFCTEU9MSxSRVNFUlZFRF9TWU1CT0xTPXtDRUxMOiJiZWdnYXJzIixRVVNUOiJzaW1wbGVnYW1lIixURVNURVJBOiJhZ2dyb2VkIixTUVJMOiJzdHVmZmJ5c3BlbmNlciIsQ1JBRlQ6ImltbWFudWVsOTQiLE1VU0lDOiJhdG9tY29sbGVjdG9yIixDR1VMTDoiY2d1bGwiLE5GVDoiY2FkYXdnIixSQVJFOiJiZWdnYXJzIixMSUM6ImxpY3Rva2VuIixNRU1CRVI6Im1lbWJlcnRva2VuIixDT0ZGRUU6ImMwZmYzM2EiLEFSVDoiYnlvIixST0NLOiJiZWdnYXJzIixDUklUVEVSOiJjcnlwdG9tYW5jZXIiLENJVFk6ImdlcmJlciIsTU9OU1RFUlM6InNpbXBsZWdhbWUiLFNFVFM6Imxvb3RraXQuZ2FtZXMiLEFOSU1FOiJhbmltZXRva2VuIixQSE9UT0ZUOiJ3d3dpZWJlIixCRUVSOiJkZXRsZXYiLFNQSVI6InNwaW52ZXN0IixJRkc6Imxpb24yMDAiLEdVSUxEUzoic2ltcGxlZ2FtZSIsRkNBUkQ6Imxpb24yMDAiLFBYTDoicGl4ZWxuZnQiLENPVzoic3R1ZmZieXNwZW5jZXIiLExPT09UOiJzdHVmZmJ5c3BlbmNlciIsQVBJOiJzdGVlbWNpdHlhcGkiLFNQT1JUU01PTToic3BvcnRzdGVzdGVyIixTV1Q6InNhdHJlbiIsU1RBUjoiYXRvbWNvbGxlY3RvciJ9O2FjdGlvbnMuY3JlYXRlU1NDPWFzeW5jKCk9PntsZXQgZT1hd2FpdCBhcGkuZGIudGFibGVFeGlzdHMoIm5mdHMiKTtpZighMT09PWUpe2F3YWl0IGFwaS5kYi5jcmVhdGVUYWJsZSgibmZ0cyIsWyJzeW1ib2wiXSksYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCJwYXJhbXMiKSxhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoInBlbmRpbmdVbmRlbGVnYXRpb25zIixbInN5bWJvbCIsImNvbXBsZXRlVGltZXN0YW1wIl0pO2xldCB0PXt9O3QubmZ0Q3JlYXRpb25GZWU9IjEwMCIsdC5uZnRJc3N1YW5jZUZlZT17QkVFOiIwLjAwMSIsUEFMOiIwLjAwMSJ9LHQuZGF0YVByb3BlcnR5Q3JlYXRpb25GZWU9IjEwMCIsdC5lbmFibGVEZWxlZ2F0aW9uRmVlPSIxMDAwIixhd2FpdCBhcGkuZGIuaW5zZXJ0KCJwYXJhbXMiLHQpfX0sYWN0aW9ucy51cGRhdGVQYXJhbXM9YXN5bmMgZT0+e2lmKGFwaS5zZW5kZXIhPT1hcGkub3duZXIpcmV0dXJuO2xldHtuZnRDcmVhdGlvbkZlZTp0LG5mdElzc3VhbmNlRmVlOnMsZGF0YVByb3BlcnR5Q3JlYXRpb25GZWU6YSxlbmFibGVEZWxlZ2F0aW9uRmVlOm59PWUsaT1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSk7dCYmInN0cmluZyI9PXR5cGVvZiB0JiYhYXBpLkJpZ051bWJlcih0KS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKHQpLmd0ZSgwKSYmKGkubmZ0Q3JlYXRpb25GZWU9dCkscyYmIm9iamVjdCI9PXR5cGVvZiBzJiYoaS5uZnRJc3N1YW5jZUZlZT1zKSxhJiYic3RyaW5nIj09dHlwZW9mIGEmJiFhcGkuQmlnTnVtYmVyKGEpLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIoYSkuZ3RlKDApJiYoaS5kYXRhUHJvcGVydHlDcmVhdGlvbkZlZT1hKSxuJiYic3RyaW5nIj09dHlwZW9mIG4mJiFhcGkuQmlnTnVtYmVyKG4pLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIobikuZ3RlKDApJiYoaS5lbmFibGVEZWxlZ2F0aW9uRmVlPW4pLGF3YWl0IGFwaS5kYi51cGRhdGUoInBhcmFtcyIsaSl9O2NvbnN0IGlzVG9rZW5UcmFuc2ZlclZlcmlmaWVkPShlLHQscyxhLG4saSk9PnZvaWQgMD09PWUuZXJyb3JzJiYhIWUuZXZlbnRzJiZ2b2lkIDAhPT1lLmV2ZW50cy5maW5kKGU9PiJ0b2tlbnMiPT09ZS5jb250cmFjdCYmZS5ldmVudD09PWkmJmUuZGF0YS5mcm9tPT09dCYmZS5kYXRhLnRvPT09cyYmZS5kYXRhLnF1YW50aXR5PT09biYmZS5kYXRhLnN5bWJvbD09PWEpLGNhbGN1bGF0ZUJhbGFuY2U9KGUsdCxzLGEpPT5hP2FwaS5CaWdOdW1iZXIoZSkucGx1cyh0KS50b0ZpeGVkKHMpOmFwaS5CaWdOdW1iZXIoZSkubWludXModCkudG9GaXhlZChzKSxjb3VudERlY2ltYWxzPWU9PmFwaS5CaWdOdW1iZXIoZSkuZHAoKSxjb250YWluc0R1cGxpY2F0ZXM9ZT0+bmV3IFNldChlKS5zaXplIT09ZS5sZW5ndGgsaXNWYWxpZEhpdmVBY2NvdW50TGVuZ3RoPWU9PmUubGVuZ3RoPj0zJiZlLmxlbmd0aDw9MTYsaXNWYWxpZENvbnRyYWN0TGVuZ3RoPWU9PmUubGVuZ3RoPj0zJiZlLmxlbmd0aDw9NTAsaXNWYWxpZEFjY291bnRzQXJyYXk9ZT0+e2xldCB0PSEwO3JldHVybiBlLmZvckVhY2goZT0+eyJzdHJpbmciPT10eXBlb2YgZSYmaXNWYWxpZEhpdmVBY2NvdW50TGVuZ3RoKGUpfHwodD0hMSl9KSx0fSxpc1ZhbGlkQ29udHJhY3RzQXJyYXk9ZT0+e2xldCB0PSEwO3JldHVybiBlLmZvckVhY2goZT0+eyJzdHJpbmciPT10eXBlb2YgZSYmaXNWYWxpZENvbnRyYWN0TGVuZ3RoKGUpfHwodD0hMSl9KSx0fSxpc1ZhbGlkRGF0YVByb3BlcnRpZXM9KGUsdCxzLGEpPT57bGV0IG49T2JqZWN0LmtleXMoYSkubGVuZ3RoLGk9T2JqZWN0LmtleXMocy5wcm9wZXJ0aWVzKS5sZW5ndGg7aWYoIWFwaS5hc3NlcnQobjw9aSwiY2Fubm90IHNldCBtb3JlIGRhdGEgcHJvcGVydGllcyB0aGFuIE5GVCBoYXMiKSlyZXR1cm4hMTtmb3IobGV0W3Isb11vZiBPYmplY3QuZW50cmllcyhhKSl7bGV0IGw9ITE7aWYoYXBpLmFzc2VydChyJiYic3RyaW5nIj09dHlwZW9mIHImJmFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMocikmJnIubGVuZ3RoPjAmJnIubGVuZ3RoPD0yNSwiaW52YWxpZCBkYXRhIHByb3BlcnR5IG5hbWU6IGxldHRlcnMgJiBudW1iZXJzIG9ubHksIG1heCBsZW5ndGggb2YgMjUiKSYmYXBpLmFzc2VydChyIGluIHMucHJvcGVydGllcywiZGF0YSBwcm9wZXJ0eSBtdXN0IGV4aXN0Iikpe2xldCBkPXMucHJvcGVydGllc1tyXTthcGkuYXNzZXJ0KG51bGwhPW8mJih0eXBlb2Ygbz09PWQudHlwZXx8Im51bWJlciI9PT1kLnR5cGUmJiJzdHJpbmciPT10eXBlb2YgbyYmIWFwaS5CaWdOdW1iZXIobykuaXNOYU4oKSksYGRhdGEgcHJvcGVydHkgdHlwZSBtaXNtYXRjaDogZXhwZWN0ZWQgJHtkLnR5cGV9IGJ1dCBnb3QgJHt0eXBlb2Ygb30gZm9yIHByb3BlcnR5ICR7cn1gKSYmYXBpLmFzc2VydCgic3RyaW5nIiE9dHlwZW9mIG98fG8ubGVuZ3RoPD0xMDAsInN0cmluZyBwcm9wZXJ0eSBtYXggbGVuZ3RoIGlzIDEwMCBjaGFyYWN0ZXJzIikmJmFwaS5hc3NlcnQoImNvbnRyYWN0Ij09PXQmJmQuYXV0aG9yaXplZEVkaXRpbmdDb250cmFjdHMuaW5jbHVkZXMoZSl8fCJ1c2VyIj09PXQmJmQuYXV0aG9yaXplZEVkaXRpbmdBY2NvdW50cy5pbmNsdWRlcyhlKSwibm90IGFsbG93ZWQgdG8gc2V0IGRhdGEgcHJvcGVydGllcyIpJiYobD0hMCwibnVtYmVyIj09PWQudHlwZSYmInN0cmluZyI9PXR5cGVvZiBvJiYoYVtyXT1hcGkuQmlnTnVtYmVyKG8pLnRvTnVtYmVyKCkpKX1pZighbClyZXR1cm4hMX1yZXR1cm4hMH0saXNWYWxpZERhdGFQcm9wZXJ0aWVzQXJyYXk9KGUsdCxzLGEpPT57dHJ5e2ZvcihsZXQgbj0wO248YS5sZW5ndGg7bis9MSl7bGV0IGk9ITEse2lkOnIscHJvcGVydGllczpvfT1hW25dO2lmKGFwaS5hc3NlcnQociYmInN0cmluZyI9PXR5cGVvZiByJiYhYXBpLkJpZ051bWJlcihyKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKHIpLmd0KDApJiZvJiYib2JqZWN0Ij09dHlwZW9mIG8sImludmFsaWQgZGF0YSBwcm9wZXJ0aWVzIikmJmlzVmFsaWREYXRhUHJvcGVydGllcyhlLHQscyxvKSYmKGk9ITApLCFpKXJldHVybiExfX1jYXRjaChsKXtyZXR1cm4hMX1yZXR1cm4hMH0saXNWYWxpZE5mdElkQXJyYXk9ZT0+e3RyeXtsZXQgdD0wO2ZvcihsZXQgcz0wO3M8ZS5sZW5ndGg7cys9MSl7bGV0IGE9ITEse3N5bWJvbDpuLGlkczppfT1lW3NdO2lmKGFwaS5hc3NlcnQobiYmInN0cmluZyI9PXR5cGVvZiBuJiZhcGkudmFsaWRhdG9yLmlzQWxwaGEobikmJmFwaS52YWxpZGF0b3IuaXNVcHBlcmNhc2UobikmJm4ubGVuZ3RoPjAmJm4ubGVuZ3RoPD0xMCYmaSYmIm9iamVjdCI9PXR5cGVvZiBpJiZBcnJheS5pc0FycmF5KGkpLCJpbnZhbGlkIG5mdCBsaXN0IikmJih0Kz1pLmxlbmd0aCxhcGkuYXNzZXJ0KHQ8PTUwLCJjYW5ub3Qgb3BlcmF0ZSBvbiBtb3JlIHRoYW4gNTAgTkZUIGluc3RhbmNlcyBhdCBvbmNlIikpKXtmb3IobGV0IHI9MDtyPGkubGVuZ3RoO3IrPTEpe2xldCBvPWlbcl07aWYoIWFwaS5hc3NlcnQobyYmInN0cmluZyI9PXR5cGVvZiBvJiYhYXBpLkJpZ051bWJlcihvKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKG8pLmd0KDApLCJpbnZhbGlkIG5mdCBsaXN0IikpcmV0dXJuITF9YT0hMH1pZighYSlyZXR1cm4hMX19Y2F0Y2gobCl7cmV0dXJuITF9cmV0dXJuITB9LGlzVmFsaWRUb2tlbkJhc2tldD1hc3luYyhlLHQscyxhLG4pPT57dHJ5e2xldCBpPU9iamVjdC5rZXlzKGUpLmxlbmd0aDtpZihpPjEwKXJldHVybiExO2ZvcihsZXRbcixvXW9mIE9iamVjdC5lbnRyaWVzKGUpKXtsZXQgbD0hMTtpZigic3RyaW5nIj09dHlwZW9mIHImJmFwaS52YWxpZGF0b3IuaXNBbHBoYShyKSYmYXBpLnZhbGlkYXRvci5pc1VwcGVyY2FzZShyKSYmci5sZW5ndGg+MCYmci5sZW5ndGg8PTEwKXtsZXQgZD1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpyfSk7aWYoZCYmbyYmInN0cmluZyI9PXR5cGVvZiBvJiYhYXBpLkJpZ051bWJlcihvKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKG8pLmd0KDApJiZjb3VudERlY2ltYWxzKG8pPD1kLnByZWNpc2lvbil7bGV0IHU9cj09PWE/Y2FsY3VsYXRlQmFsYW5jZShvLG4sZC5wcmVjaXNpb24sITApOm8sYz1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsdCx7YWNjb3VudDpzLHN5bWJvbDpyfSk7YyYmYXBpLkJpZ051bWJlcihjLmJhbGFuY2UpLmd0ZSh1KSYmKGw9ITApfX1pZighbClyZXR1cm4hMX19Y2F0Y2goZil7cmV0dXJuITF9cmV0dXJuITB9LHRyYW5zZmVyQW5kVmVyaWZ5TmZ0cz1hc3luYyhlLHQscyxhLG4saSxyKT0+e2xldCBvPXtzdWNjZXNzOltdLGZhaWw6W119LGw9InVzZXIiPT09dD8idSI6ImMiLGQ9InVzZXIiPT09YT8idSI6ImMiO2F3YWl0IGFjdGlvbnMudHJhbnNmZXIoe2Zyb21UeXBlOnQsdG86cyx0b1R5cGU6YSxuZnRzOm4saXNTaWduZWRXaXRoQWN0aXZlS2V5OmksY2FsbGluZ0NvbnRyYWN0SW5mbzpyfSk7bGV0IHU9YXBpLmxvZ3MoKSxjPXt9LGY9e307aWYodS5ldmVudHMpZm9yKGxldCBwPTA7cDx1LmV2ZW50cy5sZW5ndGg7cCs9MSl7bGV0IGc9dS5ldmVudHNbcF07aWYoZy5jb250cmFjdCYmZy5ldmVudCYmZy5kYXRhJiYibmZ0Ij09PWcuY29udHJhY3QmJiJ0cmFuc2ZlciI9PT1nLmV2ZW50JiZnLmRhdGEuZnJvbT09PWUmJmcuZGF0YS5mcm9tVHlwZT09PWwmJmcuZGF0YS50bz09PXMmJmcuZGF0YS50b1R5cGU9PT1kKXtsZXQgeT1nLmRhdGEuc3ltYm9sKyItIitnLmRhdGEuaWQ7Y1t5XT0xfX1mb3IobGV0IG09MDttPG4ubGVuZ3RoO20rPTEpe2xldHtzeW1ib2w6JCxpZHM6aH09blttXSxiPVtdLHY9W107Zm9yKGxldCB3PTA7dzxoLmxlbmd0aDt3Kz0xKXtsZXQgTj0kKyItIitoW3ddO04gaW4gZnx8KE4gaW4gYz9iLnB1c2goaFt3XS50b1N0cmluZygpKTp2LnB1c2goaFt3XS50b1N0cmluZygpKSxmW05dPTEpfWIubGVuZ3RoPjAmJm8uc3VjY2Vzcy5wdXNoKHtzeW1ib2w6JCxpZHM6Yn0pLHYubGVuZ3RoPjAmJm8uZmFpbC5wdXNoKHtzeW1ib2w6JCxpZHM6dn0pfXJldHVybiBvfTthY3Rpb25zLnVwZGF0ZVVybD1hc3luYyBlPT57bGV0e3VybDp0LHN5bWJvbDpzfT1lO2lmKGFwaS5hc3NlcnQocyYmInN0cmluZyI9PXR5cGVvZiBzJiZ0JiYic3RyaW5nIj09dHlwZW9mIHQsImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQodC5sZW5ndGg8PTI1NSwiaW52YWxpZCB1cmw6IG1heCBsZW5ndGggb2YgMjU1Iikpe2xldCBhPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN9KTtpZihhJiZhcGkuYXNzZXJ0KGEuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpdHJ5e2xldCBuPUpTT04ucGFyc2UoYS5tZXRhZGF0YSk7YXBpLmFzc2VydChuJiZuLnVybCwiYW4gZXJyb3Igb2NjdXJlZCB3aGVuIHRyeWluZyB0byB1cGRhdGUgdGhlIHVybCIpJiYobi51cmw9dCxhLm1ldGFkYXRhPUpTT04uc3RyaW5naWZ5KG4pLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGEpKX1jYXRjaChpKXt9fX0sYWN0aW9ucy51cGRhdGVNZXRhZGF0YT1hc3luYyBlPT57bGV0e21ldGFkYXRhOnQsc3ltYm9sOnN9PWU7aWYoYXBpLmFzc2VydChzJiYic3RyaW5nIj09dHlwZW9mIHMmJnQmJiJvYmplY3QiPT10eXBlb2YgdCwiaW52YWxpZCBwYXJhbXMiKSl7bGV0IGE9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c30pO2lmKGEmJmFwaS5hc3NlcnQoYS5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSl0cnl7bGV0IG49SlNPTi5zdHJpbmdpZnkodCk7YXBpLmFzc2VydChuLmxlbmd0aDw9MWUzLCJpbnZhbGlkIG1ldGFkYXRhOiBtYXggbGVuZ3RoIG9mIDEwMDAiKSYmKGEubWV0YWRhdGE9bixhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixhKSl9Y2F0Y2goaSl7fX19LGFjdGlvbnMudXBkYXRlTmFtZT1hc3luYyBlPT57bGV0e25hbWU6dCxzeW1ib2w6c309ZTtpZihhcGkuYXNzZXJ0KHMmJiJzdHJpbmciPT10eXBlb2YgcyYmdCYmInN0cmluZyI9PXR5cGVvZiB0LCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QodCwiICIpKSYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PTUwLCJpbnZhbGlkIG5hbWU6IGxldHRlcnMsIG51bWJlcnMsIHdoaXRlc3BhY2VzIG9ubHksIG1heCBsZW5ndGggb2YgNTAiKSl7bGV0IGE9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c30pO2EmJmFwaS5hc3NlcnQoYS5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmKGEubmFtZT10LGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGEpKX19LGFjdGlvbnMudXBkYXRlT3JnTmFtZT1hc3luYyBlPT57bGV0e29yZ05hbWU6dCxzeW1ib2w6c309ZTtpZihhcGkuYXNzZXJ0KHMmJiJzdHJpbmciPT10eXBlb2YgcyYmdCYmInN0cmluZyI9PXR5cGVvZiB0LCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QodCwiICIpKSYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PTUwLCJpbnZhbGlkIG9yZyBuYW1lOiBsZXR0ZXJzLCBudW1iZXJzLCB3aGl0ZXNwYWNlcyBvbmx5LCBtYXggbGVuZ3RoIG9mIDUwIikpe2xldCBhPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN9KTthJiZhcGkuYXNzZXJ0KGEuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJihhLm9yZ05hbWU9dCxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixhKSl9fSxhY3Rpb25zLnVwZGF0ZVByb2R1Y3ROYW1lPWFzeW5jIGU9PntsZXR7cHJvZHVjdE5hbWU6dCxzeW1ib2w6c309ZTtpZihhcGkuYXNzZXJ0KHMmJiJzdHJpbmciPT10eXBlb2YgcyYmdCYmInN0cmluZyI9PXR5cGVvZiB0LCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QodCwiICIpKSYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PTUwLCJpbnZhbGlkIHByb2R1Y3QgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpKXtsZXQgYT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzfSk7YSYmYXBpLmFzc2VydChhLmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpJiYoYS5wcm9kdWN0TmFtZT10LGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGEpKX19LGFjdGlvbnMuYWRkQXV0aG9yaXplZElzc3VpbmdBY2NvdW50cz1hc3luYyBlPT57bGV0e2FjY291bnRzOnQsc3ltYm9sOnMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmF9PWU7aWYoYXBpLmFzc2VydCghMD09PWEsInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHMmJiJzdHJpbmciPT10eXBlb2YgcyYmdCYmIm9iamVjdCI9PXR5cGVvZiB0JiZBcnJheS5pc0FycmF5KHQpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KHQubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBhY2NvdW50cyIpKXtsZXQgbj1pc1ZhbGlkQWNjb3VudHNBcnJheSh0KTtpZihhcGkuYXNzZXJ0KG4sImludmFsaWQgYWNjb3VudCBsaXN0Iikpe2xldCBpPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN9KTtpZihpKXtsZXQgcj1bXTtpZih0LmZvckVhY2goZT0+e2xldCB0PWUudHJpbSgpLnRvTG93ZXJDYXNlKCkscz0hMTtmb3IobGV0IGE9MDthPGkuYXV0aG9yaXplZElzc3VpbmdBY2NvdW50cy5sZW5ndGg7YSs9MSlpZih0PT09aS5hdXRob3JpemVkSXNzdWluZ0FjY291bnRzW2FdKXtzPSEwO2JyZWFrfXN8fHIucHVzaCh0KX0pLGFwaS5hc3NlcnQoaS5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmYXBpLmFzc2VydCghY29udGFpbnNEdXBsaWNhdGVzKHIpLCJjYW5ub3QgYWRkIHRoZSBzYW1lIGFjY291bnQgdHdpY2UiKSYmYXBpLmFzc2VydChpLmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMubGVuZ3RoK3IubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBhY2NvdW50cyIpKXtsZXQgbz1pLmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMuY29uY2F0KHIpO2kuYXV0aG9yaXplZElzc3VpbmdBY2NvdW50cz1vLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGkpfX19fX0sYWN0aW9ucy5hZGRBdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1hc3luYyBlPT57bGV0e2NvbnRyYWN0czp0LHN5bWJvbDpzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTphfT1lO2lmKGFwaS5hc3NlcnQoITA9PT1hLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzJiYic3RyaW5nIj09dHlwZW9mIHMmJnQmJiJvYmplY3QiPT10eXBlb2YgdCYmQXJyYXkuaXNBcnJheSh0KSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydCh0Lmxlbmd0aDw9MTAsImNhbm5vdCBoYXZlIG1vcmUgdGhhbiAxMCBhdXRob3JpemVkIGlzc3VpbmcgY29udHJhY3RzIikpe2xldCBuPWlzVmFsaWRDb250cmFjdHNBcnJheSh0KTtpZihhcGkuYXNzZXJ0KG4sImludmFsaWQgY29udHJhY3QgbGlzdCIpKXtsZXQgaT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzfSk7aWYoaSl7bGV0IHI9W107aWYodC5mb3JFYWNoKGU9PntsZXQgdD1lLnRyaW0oKSxzPSExO2ZvcihsZXQgYT0wO2E8aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cy5sZW5ndGg7YSs9MSlpZih0PT09aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0c1thXSl7cz0hMDticmVha31zfHxyLnB1c2godCl9KSxhcGkuYXNzZXJ0KGkuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJmFwaS5hc3NlcnQoIWNvbnRhaW5zRHVwbGljYXRlcyhyKSwiY2Fubm90IGFkZCB0aGUgc2FtZSBjb250cmFjdCB0d2ljZSIpJiZhcGkuYXNzZXJ0KGkuYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMubGVuZ3RoK3IubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBjb250cmFjdHMiKSl7bGV0IG89aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cy5jb25jYXQocik7aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1vLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGkpfX19fX0sYWN0aW9ucy5yZW1vdmVBdXRob3JpemVkSXNzdWluZ0FjY291bnRzPWFzeW5jIGU9PntsZXR7YWNjb3VudHM6dCxzeW1ib2w6cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6YX09ZTtpZihhcGkuYXNzZXJ0KCEwPT09YSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQocyYmInN0cmluZyI9PXR5cGVvZiBzJiZ0JiYib2JqZWN0Ij09dHlwZW9mIHQmJkFycmF5LmlzQXJyYXkodCksImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQodC5sZW5ndGg8PTEwLCJjYW5ub3QgcmVtb3ZlIG1vcmUgdGhhbiAxMCBhdXRob3JpemVkIGlzc3VpbmcgYWNjb3VudHMiKSl7bGV0IG49aXNWYWxpZEFjY291bnRzQXJyYXkodCk7aWYoYXBpLmFzc2VydChuLCJpbnZhbGlkIGFjY291bnQgbGlzdCIpKXtsZXQgaT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzfSk7aWYoaSYmYXBpLmFzc2VydChpLmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpKXtsZXQgcj1pLmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMuZmlsdGVyKGU9Pntmb3IobGV0IHM9MDtzPHQubGVuZ3RoO3MrPTEpe2xldCBhPXRbc10udHJpbSgpLnRvTG93ZXJDYXNlKCk7aWYoZT09PWEpcmV0dXJuITF9cmV0dXJuITB9KTtpLmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHM9cixhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixpKX19fX0sYWN0aW9ucy5yZW1vdmVBdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1hc3luYyBlPT57bGV0e2NvbnRyYWN0czp0LHN5bWJvbDpzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTphfT1lO2lmKGFwaS5hc3NlcnQoITA9PT1hLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzJiYic3RyaW5nIj09dHlwZW9mIHMmJnQmJiJvYmplY3QiPT10eXBlb2YgdCYmQXJyYXkuaXNBcnJheSh0KSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydCh0Lmxlbmd0aDw9MTAsImNhbm5vdCByZW1vdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBjb250cmFjdHMiKSl7bGV0IG49aXNWYWxpZENvbnRyYWN0c0FycmF5KHQpO2lmKGFwaS5hc3NlcnQobiwiaW52YWxpZCBjb250cmFjdCBsaXN0Iikpe2xldCBpPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN9KTtpZihpJiZhcGkuYXNzZXJ0KGkuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2xldCByPWkuYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMuZmlsdGVyKGU9Pntmb3IobGV0IHM9MDtzPHQubGVuZ3RoO3MrPTEpe2xldCBhPXRbc10udHJpbSgpO2lmKGU9PT1hKXJldHVybiExfXJldHVybiEwfSk7aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1yLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGkpfX19fSxhY3Rpb25zLnRyYW5zZmVyT3duZXJzaGlwPWFzeW5jIGU9PntsZXR7c3ltYm9sOnQsdG86cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6YX09ZTtpZihhcGkuYXNzZXJ0KCEwPT09YSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQodCYmInN0cmluZyI9PXR5cGVvZiB0JiZzJiYic3RyaW5nIj09dHlwZW9mIHMsImludmFsaWQgcGFyYW1zIikpe2xldCBuPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnR9KTtpZihuJiZhcGkuYXNzZXJ0KG4uaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2xldCBpPXMudHJpbSgpLnRvTG93ZXJDYXNlKCk7YXBpLmFzc2VydChpc1ZhbGlkSGl2ZUFjY291bnRMZW5ndGgoaSksImludmFsaWQgdG8iKSYmKG4uaXNzdWVyPWksYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbikpfX19LGFjdGlvbnMuZW5hYmxlRGVsZWdhdGlvbj1hc3luYyBlPT57bGV0e3N5bWJvbDp0LHVuZGVsZWdhdGlvbkNvb2xkb3duOnMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmF9PWUsbj1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSkse2VuYWJsZURlbGVnYXRpb25GZWU6aX09bixyPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOiJCRUUifSksbz0hIWFwaS5CaWdOdW1iZXIoaSkubHRlKDApfHxyJiZhcGkuQmlnTnVtYmVyKHIuYmFsYW5jZSkuZ3RlKGkpO2lmKGFwaS5hc3NlcnQobywieW91IG11c3QgaGF2ZSBlbm91Z2ggdG9rZW5zIHRvIGNvdmVyIGZlZXMiKSYmYXBpLmFzc2VydCghMD09PWEsInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHQmJiJzdHJpbmciPT10eXBlb2YgdCwiaW52YWxpZCBzeW1ib2wiKSYmYXBpLmFzc2VydChzJiZOdW1iZXIuaXNJbnRlZ2VyKHMpJiZzPjAmJnM8PTE4MjUwLCJ1bmRlbGVnYXRpb25Db29sZG93biBtdXN0IGJlIGFuIGludGVnZXIgYmV0d2VlbiAxIGFuZCAxODI1MCIpKXtsZXQgbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDp0fSk7aWYoYXBpLmFzc2VydChudWxsIT09bCwic3ltYm9sIGRvZXMgbm90IGV4aXN0IikmJmFwaS5hc3NlcnQobC5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1sLmRlbGVnYXRpb25FbmFibGVkfHwhMT09PWwuZGVsZWdhdGlvbkVuYWJsZWQsImRlbGVnYXRpb24gYWxyZWFkeSBlbmFibGVkIikpe2lmKGFwaS5CaWdOdW1iZXIoaSkuZ3QoMCkpe2xldCBkPWF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOiJCRUUiLHF1YW50aXR5OmksaXNTaWduZWRXaXRoQWN0aXZlS2V5OmF9KTtpZighaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQoZCxhcGkuc2VuZGVyLCJudWxsIiwiQkVFIixpLCJ0cmFuc2ZlciIpKXJldHVybiExfXJldHVybiBsLmRlbGVnYXRpb25FbmFibGVkPSEwLGwudW5kZWxlZ2F0aW9uQ29vbGRvd249cyxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixsKSwhMH19cmV0dXJuITF9LGFjdGlvbnMudXBkYXRlUHJvcGVydHlEZWZpbml0aW9uPWFzeW5jIGU9PntsZXR7c3ltYm9sOnQsbmFtZTpzLG5ld05hbWU6YSx0eXBlOm4saXNSZWFkT25seTppLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTpyfT1lO2lmKGFwaS5hc3NlcnQoITA9PT1yLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCh0JiYic3RyaW5nIj09dHlwZW9mIHQmJnMmJiJzdHJpbmciPT10eXBlb2YgcywiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChhcGkudmFsaWRhdG9yLmlzQWxwaGFudW1lcmljKHMpJiZzLmxlbmd0aD4wJiZzLmxlbmd0aDw9MjUsImludmFsaWQgbmFtZTogbGV0dGVycyAmIG51bWJlcnMgb25seSwgbWF4IGxlbmd0aCBvZiAyNSIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWF8fCJzdHJpbmciPT10eXBlb2YgYSYmYXBpLnZhbGlkYXRvci5pc0FscGhhbnVtZXJpYyhhKSYmYS5sZW5ndGg+MCYmYS5sZW5ndGg8PTI1LCJpbnZhbGlkIG5ldyBuYW1lOiBsZXR0ZXJzICYgbnVtYmVycyBvbmx5LCBtYXggbGVuZ3RoIG9mIDI1IikmJmFwaS5hc3NlcnQodm9pZCAwPT09bnx8InN0cmluZyI9PXR5cGVvZiBuJiYoIm51bWJlciI9PT1ufHwic3RyaW5nIj09PW58fCJib29sZWFuIj09PW4pLCJpbnZhbGlkIHR5cGU6IG11c3QgYmUgbnVtYmVyLCBzdHJpbmcsIG9yIGJvb2xlYW4iKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1pfHwiYm9vbGVhbiI9PXR5cGVvZiBpLCJpbnZhbGlkIGlzUmVhZE9ubHk6IG11c3QgYmUgdHJ1ZSBvciBmYWxzZSIpKXtsZXQgbz1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDp0fSk7aWYobyYmYXBpLmFzc2VydCgwPT09by5zdXBwbHksImNhbm5vdCBjaGFuZ2UgZGF0YSBwcm9wZXJ0eSBkZWZpbml0aW9uOyB0b2tlbnMgYWxyZWFkeSBpc3N1ZWQiKSYmYXBpLmFzc2VydChzIGluIG8ucHJvcGVydGllcywicHJvcGVydHkgbXVzdCBleGlzdCIpJiZhcGkuYXNzZXJ0KG8uaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2lmKHZvaWQgMCE9PWEmJih2b2lkIDAhPT1vLmdyb3VwQnkmJm8uZ3JvdXBCeS5sZW5ndGg+MCYmIWFwaS5hc3NlcnQoIW8uZ3JvdXBCeS5pbmNsdWRlcyhzKSwiY2Fubm90IGNoYW5nZSBkYXRhIHByb3BlcnR5IG5hbWU7IHByb3BlcnR5IGlzIHBhcnQgb2YgZ3JvdXBCeSIpfHwhYXBpLmFzc2VydChhIT09cywibmV3IG5hbWUgbXVzdCBiZSBkaWZmZXJlbnQgZnJvbSBvbGQgbmFtZSIpfHwhYXBpLmFzc2VydCghKGEgaW4gby5wcm9wZXJ0aWVzKSwidGhlcmUgaXMgYWxyZWFkeSBhIGRhdGEgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4gbmV3IG5hbWUiKSkpcmV0dXJuITE7bGV0IGw9ITEsZD1vLnByb3BlcnRpZXNbc10udHlwZSx1PW8ucHJvcGVydGllc1tzXS5pc1JlYWRPbmx5O3JldHVybiB2b2lkIDAhPT1uJiZuIT09ZCYmKG8ucHJvcGVydGllc1tzXS50eXBlPW4sbD0hMCksdm9pZCAwIT09aSYmaSE9PXUmJihvLnByb3BlcnRpZXNbc10uaXNSZWFkT25seT1pLGw9ITApLHZvaWQgMCE9PWEmJmEhPT1zJiYoby5wcm9wZXJ0aWVzW2FdPW8ucHJvcGVydGllc1tzXSxkZWxldGUgby5wcm9wZXJ0aWVzW3NdLGw9ITApLGwmJihhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixvKSxhcGkuZW1pdCgidXBkYXRlUHJvcGVydHlEZWZpbml0aW9uIix7c3ltYm9sOnQsb3JpZ2luYWxOYW1lOnMsb3JpZ2luYWxUeXBlOmQsb3JpZ2luYWxJc1JlYWRPbmx5OnUsbmV3TmFtZTphLG5ld1R5cGU6bixuZXdJc1JlYWRPbmx5Oml9KSksITB9fXJldHVybiExfSxhY3Rpb25zLmFkZFByb3BlcnR5PWFzeW5jIGU9PntsZXR7c3ltYm9sOnQsbmFtZTpzLHR5cGU6YSxpc1JlYWRPbmx5Om4sYXV0aG9yaXplZEVkaXRpbmdBY2NvdW50czppLGF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzOnIsaXNTaWduZWRXaXRoQWN0aXZlS2V5Om99PWUsbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSkse2RhdGFQcm9wZXJ0eUNyZWF0aW9uRmVlOmR9PWw7aWYoYXBpLmFzc2VydCghMD09PW8sInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHQmJiJzdHJpbmciPT10eXBlb2YgdCYmcyYmInN0cmluZyI9PXR5cGVvZiBzJiYodm9pZCAwPT09bnx8ImJvb2xlYW4iPT10eXBlb2YgbikmJih2b2lkIDA9PT1pfHxpJiYib2JqZWN0Ij09dHlwZW9mIGkmJkFycmF5LmlzQXJyYXkoaSkpJiYodm9pZCAwPT09cnx8ciYmIm9iamVjdCI9PXR5cGVvZiByJiZBcnJheS5pc0FycmF5KHIpKSYmYSYmInN0cmluZyI9PXR5cGVvZiBhLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMocykmJnMubGVuZ3RoPjAmJnMubGVuZ3RoPD0yNSwiaW52YWxpZCBuYW1lOiBsZXR0ZXJzICYgbnVtYmVycyBvbmx5LCBtYXggbGVuZ3RoIG9mIDI1IikmJmFwaS5hc3NlcnQoIm51bWJlciI9PT1hfHwic3RyaW5nIj09PWF8fCJib29sZWFuIj09PWEsImludmFsaWQgdHlwZTogbXVzdCBiZSBudW1iZXIsIHN0cmluZywgb3IgYm9vbGVhbiIpKXtsZXQgdT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDp0fSk7aWYodSYmYXBpLmFzc2VydCghKHMgaW4gdS5wcm9wZXJ0aWVzKSwiY2Fubm90IGFkZCB0aGUgc2FtZSBwcm9wZXJ0eSB0d2ljZSIpJiZhcGkuYXNzZXJ0KHUuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2xldCBjPU9iamVjdC5rZXlzKHUucHJvcGVydGllcykubGVuZ3RoO2lmKGM+PTMpe2xldCBmPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOiJCRUUifSkscD0hIWFwaS5CaWdOdW1iZXIoZCkubHRlKDApfHxmJiZhcGkuQmlnTnVtYmVyKGYuYmFsYW5jZSkuZ3RlKGQpO2lmKCFhcGkuYXNzZXJ0KHAsInlvdSBtdXN0IGhhdmUgZW5vdWdoIHRva2VucyB0byBjb3ZlciB0aGUgY3JlYXRpb24gZmVlcyIpKXJldHVybiExO2lmKGFwaS5CaWdOdW1iZXIoZCkuZ3QoMCkpe2xldCBnPWF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOiJCRUUiLHF1YW50aXR5OmQsaXNTaWduZWRXaXRoQWN0aXZlS2V5Om99KTtpZighaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQoZyxhcGkuc2VuZGVyLCJudWxsIiwiQkVFIixkLCJ0cmFuc2ZlciIpKXJldHVybiExfX1sZXQgeT12b2lkIDAhPT1uJiZuLG09dm9pZCAwPT09aT9bYXBpLnNlbmRlcl06W10sJD17dHlwZTphLGlzUmVhZE9ubHk6eSxhdXRob3JpemVkRWRpdGluZ0FjY291bnRzOm0sYXV0aG9yaXplZEVkaXRpbmdDb250cmFjdHM6W119O3JldHVybiB1LnByb3BlcnRpZXNbc109JCxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIix1KSwoaXx8cikmJmF3YWl0IGFjdGlvbnMuc2V0UHJvcGVydHlQZXJtaXNzaW9ucyh7c3ltYm9sOnQsbmFtZTpzLGFjY291bnRzOmksY29udHJhY3RzOnIsaXNTaWduZWRXaXRoQWN0aXZlS2V5Om99KSwhMH19cmV0dXJuITF9LGFjdGlvbnMuc2V0UHJvcGVydHlQZXJtaXNzaW9ucz1hc3luYyBlPT57bGV0e3N5bWJvbDp0LG5hbWU6cyxhY2NvdW50czphLGNvbnRyYWN0czpuLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppfT1lO2lmKGFwaS5hc3NlcnQoITA9PT1pLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCh0JiYic3RyaW5nIj09dHlwZW9mIHQmJnMmJiJzdHJpbmciPT10eXBlb2YgcyYmKHZvaWQgMD09PWF8fGEmJiJvYmplY3QiPT10eXBlb2YgYSYmQXJyYXkuaXNBcnJheShhKSkmJih2b2lkIDA9PT1ufHxuJiYib2JqZWN0Ij09dHlwZW9mIG4mJkFycmF5LmlzQXJyYXkobikpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMocykmJnMubGVuZ3RoPjAmJnMubGVuZ3RoPD0yNSwiaW52YWxpZCBuYW1lOiBsZXR0ZXJzICYgbnVtYmVycyBvbmx5LCBtYXggbGVuZ3RoIG9mIDI1IikmJmFwaS5hc3NlcnQodm9pZCAwPT09YXx8YS5sZW5ndGg8PTEwLCJjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gMTAgYXV0aG9yaXplZCBhY2NvdW50cyIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PW58fG4ubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgY29udHJhY3RzIikmJmFwaS5hc3NlcnQodm9pZCAwPT09YXx8aXNWYWxpZEFjY291bnRzQXJyYXkoYSksImludmFsaWQgYWNjb3VudCBsaXN0IikmJmFwaS5hc3NlcnQodm9pZCAwPT09bnx8aXNWYWxpZENvbnRyYWN0c0FycmF5KG4pLCJpbnZhbGlkIGNvbnRyYWN0IGxpc3QiKSl7bGV0IHI9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6dH0pO2lmKHImJmFwaS5hc3NlcnQocyBpbiByLnByb3BlcnRpZXMsInByb3BlcnR5IG11c3QgZXhpc3QiKSYmYXBpLmFzc2VydChyLmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpKXtsZXQgbz1bXSxsPVtdO2lmKGEmJihvPWEubWFwKGU9PmUudHJpbSgpLnRvTG93ZXJDYXNlKCkpKSxuJiYobD1uLm1hcChlPT5lLnRyaW0oKSkpLGFwaS5hc3NlcnQodm9pZCAwPT09YXx8IWNvbnRhaW5zRHVwbGljYXRlcyhvKSwiY2Fubm90IGFkZCB0aGUgc2FtZSBhY2NvdW50IHR3aWNlIikmJmFwaS5hc3NlcnQodm9pZCAwPT09bnx8IWNvbnRhaW5zRHVwbGljYXRlcyhsKSwiY2Fubm90IGFkZCB0aGUgc2FtZSBjb250cmFjdCB0d2ljZSIpKXtsZXQgZD0hMTthJiYoci5wcm9wZXJ0aWVzW3NdLmF1dGhvcml6ZWRFZGl0aW5nQWNjb3VudHM9byxkPSEwKSxuJiYoci5wcm9wZXJ0aWVzW3NdLmF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzPWwsZD0hMCksZCYmYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIscil9fX19LGFjdGlvbnMuc2V0R3JvdXBCeT1hc3luYyBlPT57bGV0e3N5bWJvbDp0LHByb3BlcnRpZXM6cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6YX09ZTtpZihhcGkuYXNzZXJ0KCEwPT09YSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQodCYmInN0cmluZyI9PXR5cGVvZiB0JiZzJiYib2JqZWN0Ij09dHlwZW9mIHMmJkFycmF5LmlzQXJyYXkocyksImludmFsaWQgcGFyYW1zIikpe2xldCBuPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnR9KTtpZihuKXtsZXQgaT1PYmplY3Qua2V5cyhuLnByb3BlcnRpZXMpLmxlbmd0aDtpZihhcGkuYXNzZXJ0KG4uaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJmFwaS5hc3NlcnQodm9pZCAwPT09bi5ncm91cEJ5fHwwPT09bi5ncm91cEJ5Lmxlbmd0aCwibGlzdCBpcyBhbHJlYWR5IHNldCIpJiZhcGkuYXNzZXJ0KHMubGVuZ3RoPD1pLCJjYW5ub3Qgc2V0IG1vcmUgZGF0YSBwcm9wZXJ0aWVzIHRoYW4gTkZUIGhhcyIpJiZhcGkuYXNzZXJ0KCFjb250YWluc0R1cGxpY2F0ZXMocyksImxpc3QgY2Fubm90IGNvbnRhaW4gZHVwbGljYXRlcyIpKXtmb3IobGV0IHI9MDtyPHMubGVuZ3RoO3IrPTEpe2xldCBvPXNbcl07aWYoIWFwaS5hc3NlcnQobyYmInN0cmluZyI9PXR5cGVvZiBvJiZvIGluIG4ucHJvcGVydGllcywiZGF0YSBwcm9wZXJ0eSBtdXN0IGV4aXN0IikpcmV0dXJuITF9cmV0dXJuIG4uZ3JvdXBCeT1zLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLG4pLCEwfX19cmV0dXJuITF9LGFjdGlvbnMuc2V0UHJvcGVydGllcz1hc3luYyBlPT57bGV0e3N5bWJvbDp0LGZyb21UeXBlOnMsbmZ0czphLGNhbGxpbmdDb250cmFjdEluZm86bn09ZSxpPVsidXNlciIsImNvbnRyYWN0Il0scj12b2lkIDA9PT1zPyJ1c2VyIjpzO2lmKGFwaS5hc3NlcnQoYSYmIm9iamVjdCI9PXR5cGVvZiBhJiZBcnJheS5pc0FycmF5KGEpJiZyJiYic3RyaW5nIj09dHlwZW9mIHImJmkuaW5jbHVkZXMocikmJnQmJiJzdHJpbmciPT10eXBlb2YgdCYmKG58fHZvaWQgMD09PW4mJiJ1c2VyIj09PXIpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGEubGVuZ3RoPD01MCwiY2Fubm90IHNldCBwcm9wZXJ0aWVzIG9uIG1vcmUgdGhhbiA1MCBORlQgaW5zdGFuY2VzIGF0IG9uY2UiKSl7bGV0IG89InVzZXIiPT09cj9hcGkuc2VuZGVyOm4ubmFtZSxsPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnR9KTtpZihhcGkuYXNzZXJ0KG51bGwhPT1sLCJzeW1ib2wgZG9lcyBub3QgZXhpc3QiKSl7aWYoIWlzVmFsaWREYXRhUHJvcGVydGllc0FycmF5KG8scixsLGEpKXJldHVybiExO2xldCBkPXQrImluc3RhbmNlcyI7Zm9yKGxldCB1PTA7dTxhLmxlbmd0aDt1Kz0xKXtsZXR7aWQ6Yyxwcm9wZXJ0aWVzOmZ9PWFbdV07aWYoMD09PU9iamVjdC5rZXlzKGYpLmxlbmd0aCljb250aW51ZTtsZXQgcD1hd2FpdCBhcGkuZGIuZmluZE9uZShkLHtfaWQ6YXBpLkJpZ051bWJlcihjKS50b051bWJlcigpfSk7aWYoYXBpLmFzc2VydChudWxsIT09cCwibmZ0IGluc3RhbmNlIGRvZXMgbm90IGV4aXN0Iikpe2xldCBnPSExO2ZvcihsZXRbeSxtXW9mIE9iamVjdC5lbnRyaWVzKGYpKXtsZXQgJD1sLnByb3BlcnRpZXNbeV0saD1udWxsOyQuaXNSZWFkT25seT9hcGkuYXNzZXJ0KCEoeSBpbiBwLnByb3BlcnRpZXMpLCJjYW5ub3QgZWRpdCByZWFkLW9ubHkgcHJvcGVydGllcyIpJiYocC5wcm9wZXJ0aWVzW3ldPW0sZz0hMCk6KGg9cC5wcm9wZXJ0aWVzW3ldLHAucHJvcGVydGllc1t5XT1tLGc9ITApLGcmJmghPT1tJiZhd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoIm1pbmluZyIsImhhbmRsZU5mdFNldFByb3BlcnR5Iix7c3ltYm9sOnQsbmZ0OnAscHJvcGVydHlOYW1lOnksb2xkVmFsdWU6aH0pfWcmJmF3YWl0IGFwaS5kYi51cGRhdGUoZCxwKX19cmV0dXJuITB9fXJldHVybiExfSxhY3Rpb25zLmJ1cm49YXN5bmMgZT0+e2xldHtmcm9tVHlwZTp0LG5mdHM6cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6YSxjYWxsaW5nQ29udHJhY3RJbmZvOm59PWUsaT1bInVzZXIiLCJjb250cmFjdCJdLHI9dm9pZCAwPT09dD8idXNlciI6dDtpZihhcGkuYXNzZXJ0KCEwPT09YSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQociYmInN0cmluZyI9PXR5cGVvZiByJiZpLmluY2x1ZGVzKHIpJiYobnx8dm9pZCAwPT09biYmInVzZXIiPT09cikmJnMmJiJvYmplY3QiPT10eXBlb2YgcyYmQXJyYXkuaXNBcnJheShzKSwiaW52YWxpZCBwYXJhbXMiKSYmaXNWYWxpZE5mdElkQXJyYXkocykpe2xldCBvPSJ1c2VyIj09PXI/YXBpLnNlbmRlcjpuLm5hbWUsbD0wLGQ9MCx1PSExO2ZvcihsZXQgYz0wO2M8cy5sZW5ndGg7Yys9MSl7bGV0e3N5bWJvbDpmLGlkczpwfT1zW2NdLGc9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6Zn0pO2lmKGcpe2xldCB5PWYrImluc3RhbmNlcyI7Zm9yKGxldCBtPTA7bTxwLmxlbmd0aDttKz0xKXtsZXQgJD1wW21dLGg9YXdhaXQgYXBpLmRiLmZpbmRPbmUoeSx7X2lkOmFwaS5CaWdOdW1iZXIoJCkudG9OdW1iZXIoKX0pO2lmKGgpe2xldCBiPSEwO2lmKGgubG9ja2VkTmZ0cyYmaC5sb2NrZWROZnRzLmxlbmd0aD4wPygwPT09ZCYmKHU9ITApLCgobCs9MSk+MXx8IXUpJiYoYj0hMSkpOnUmJihiPSExKSxkKz0xLGguYWNjb3VudD09PW8mJigidSI9PT1oLm93bmVkQnkmJiJ1c2VyIj09PXJ8fCJjIj09PWgub3duZWRCeSYmImNvbnRyYWN0Ij09PXIpJiZ2b2lkIDA9PT1oLmRlbGVnYXRlZFRvJiZiKXtsZXQgdj17fSx3PSEwO2ZvcihsZXRbTixfXW9mIE9iamVjdC5lbnRyaWVzKGgubG9ja2VkVG9rZW5zKSl7bGV0IEE9YXdhaXQgYXBpLnRyYW5zZmVyVG9rZW5zKG8sTixfLHIpO2lzVG9rZW5UcmFuc2ZlclZlcmlmaWVkKEEsIm5mdCIsbyxOLF8sInRyYW5zZmVyRnJvbUNvbnRyYWN0Iil8fCh2W05dPV8sdz0hMSl9YXBpLmFzc2VydCh3LGB1bmFibGUgdG8gcmVsZWFzZSBsb2NrZWQgdG9rZW5zIGluOiAke2Z9LCBpZCAkeyR9YCk7bGV0IFQ9aC5sb2NrZWROZnRzJiZoLmxvY2tlZE5mdHMubGVuZ3RoPjA/aC5sb2NrZWROZnRzOltdO2lmKHcmJmgubG9ja2VkTmZ0cyYmaC5sb2NrZWROZnRzLmxlbmd0aD4wKXtsZXQgaz1hd2FpdCB0cmFuc2ZlckFuZFZlcmlmeU5mdHMoIm5mdCIsImNvbnRyYWN0IixvLHIsaC5sb2NrZWROZnRzLGEse25hbWU6Im5mdCJ9KTtoLmxvY2tlZE5mdHM9ay5mYWlsLGgubG9ja2VkTmZ0cy5sZW5ndGg+MCYmKHc9ITEpLGFwaS5hc3NlcnQodyxgdW5hYmxlIHRvIHJlbGVhc2UgbG9ja2VkIE5GVCBpbnN0YW5jZXMgaW46ICR7Zn0sIGlkICR7JH1gKX1sZXQgQj1oLm93bmVkQnksRT1oLmxvY2tlZFRva2VucztoLmxvY2tlZFRva2Vucz12LHcmJihoLnByZXZpb3VzQWNjb3VudD1oLmFjY291bnQsaC5wcmV2aW91c093bmVkQnk9aC5vd25lZEJ5LGguYWNjb3VudD0ibnVsbCIsaC5vd25lZEJ5PSJ1IixnLmNpcmN1bGF0aW5nU3VwcGx5LT0xKSxhd2FpdCBhcGkuZGIudXBkYXRlKHksaCksdyYmYXBpLmVtaXQoImJ1cm4iLHthY2NvdW50Om8sb3duZWRCeTpCLHVubG9ja2VkVG9rZW5zOkUsdW5sb2NrZWROZnRzOlQsc3ltYm9sOmYsaWQ6JH0pfX19YXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsZyl9fX19LGFjdGlvbnMudHJhbnNmZXI9YXN5bmMgZT0+e2xldHtmcm9tVHlwZTp0LHRvOnMsdG9UeXBlOmEsbmZ0czpuLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppLGNhbGxpbmdDb250cmFjdEluZm86cn09ZSxvPVsidXNlciIsImNvbnRyYWN0Il0sbD12b2lkIDA9PT1hPyJ1c2VyIjphLGQ9dm9pZCAwPT09dD8idXNlciI6dDtpZihhcGkuYXNzZXJ0KCEwPT09aSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoZCYmInN0cmluZyI9PXR5cGVvZiBkJiZvLmluY2x1ZGVzKGQpJiZzJiYic3RyaW5nIj09dHlwZW9mIHMmJmwmJiJzdHJpbmciPT10eXBlb2YgbCYmby5pbmNsdWRlcyhsKSYmKHJ8fHZvaWQgMD09PXImJiJ1c2VyIj09PWQpJiZuJiYib2JqZWN0Ij09dHlwZW9mIG4mJkFycmF5LmlzQXJyYXkobiksImludmFsaWQgcGFyYW1zIikmJmlzVmFsaWROZnRJZEFycmF5KG4pKXtsZXQgdT0idXNlciI9PT1sP3MudHJpbSgpLnRvTG93ZXJDYXNlKCk6cy50cmltKCksYz0idXNlciI9PT1sP2lzVmFsaWRIaXZlQWNjb3VudExlbmd0aCh1KTppc1ZhbGlkQ29udHJhY3RMZW5ndGgodSksZj0idXNlciI9PT1kP2FwaS5zZW5kZXI6ci5uYW1lO2lmKGFwaS5hc3NlcnQoYywiaW52YWxpZCB0byIpJiZhcGkuYXNzZXJ0KCEobD09PWQmJnU9PT1mKSwiY2Fubm90IHRyYW5zZmVyIHRvIHNlbGYiKSYmYXBpLmFzc2VydCghKCJ1c2VyIj09PWwmJiJudWxsIj09PXUpLCJjYW5ub3QgdHJhbnNmZXIgdG8gbnVsbDsgdXNlIGJ1cm4gYWN0aW9uIGluc3RlYWQiKSlmb3IobGV0IHA9MDtwPG4ubGVuZ3RoO3ArPTEpe2xldHtzeW1ib2w6ZyxpZHM6eX09bltwXSxtPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOmd9KTtpZihtKXtsZXQgJD1nKyJpbnN0YW5jZXMiO2ZvcihsZXQgaD0wO2g8eS5sZW5ndGg7aCs9MSl7bGV0IGI9eVtoXSx2PWF3YWl0IGFwaS5kYi5maW5kT25lKCQse19pZDphcGkuQmlnTnVtYmVyKGIpLnRvTnVtYmVyKCl9KTtpZih2JiZ2LmFjY291bnQ9PT1mJiYoInUiPT09di5vd25lZEJ5JiYidXNlciI9PT1kfHwiYyI9PT12Lm93bmVkQnkmJiJjb250cmFjdCI9PT1kKSYmdm9pZCAwPT09di5kZWxlZ2F0ZWRUbyYmIXYuc291bEJvdW5kKXtsZXQgdz12Lm93bmVkQnksTj0idXNlciI9PT1sPyJ1IjoiYyI7di5wcmV2aW91c0FjY291bnQ9di5hY2NvdW50LHYucHJldmlvdXNPd25lZEJ5PXYub3duZWRCeSx2LmFjY291bnQ9dSx2Lm93bmVkQnk9Tixhd2FpdCBhcGkuZGIudXBkYXRlKCQsdiksYXBpLmVtaXQoInRyYW5zZmVyIix7ZnJvbTpmLGZyb21UeXBlOncsdG86dSx0b1R5cGU6TixzeW1ib2w6ZyxpZDpifSl9fX19fX0sYWN0aW9ucy5kZWxlZ2F0ZT1hc3luYyBlPT57bGV0e2Zyb21UeXBlOnQsdG86cyx0b1R5cGU6YSxuZnRzOm4saXNTaWduZWRXaXRoQWN0aXZlS2V5OmksY2FsbGluZ0NvbnRyYWN0SW5mbzpyfT1lLG89WyJ1c2VyIiwiY29udHJhY3QiXSxsPXZvaWQgMD09PWE/InVzZXIiOmEsZD12b2lkIDA9PT10PyJ1c2VyIjp0O2lmKGFwaS5hc3NlcnQoITA9PT1pLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChkJiYic3RyaW5nIj09dHlwZW9mIGQmJm8uaW5jbHVkZXMoZCkmJnMmJiJzdHJpbmciPT10eXBlb2YgcyYmbCYmInN0cmluZyI9PXR5cGVvZiBsJiZvLmluY2x1ZGVzKGwpJiYocnx8dm9pZCAwPT09ciYmInVzZXIiPT09ZCkmJm4mJiJvYmplY3QiPT10eXBlb2YgbiYmQXJyYXkuaXNBcnJheShuKSwiaW52YWxpZCBwYXJhbXMiKSYmaXNWYWxpZE5mdElkQXJyYXkobikpe2xldCB1PSJ1c2VyIj09PWw/cy50cmltKCkudG9Mb3dlckNhc2UoKTpzLnRyaW0oKSxjPSJ1c2VyIj09PWw/aXNWYWxpZEhpdmVBY2NvdW50TGVuZ3RoKHUpOmlzVmFsaWRDb250cmFjdExlbmd0aCh1KSxmPSJ1c2VyIj09PWQ/YXBpLnNlbmRlcjpyLm5hbWU7aWYoYXBpLmFzc2VydChjLCJpbnZhbGlkIHRvIikmJmFwaS5hc3NlcnQoIShsPT09ZCYmdT09PWYpLCJjYW5ub3QgZGVsZWdhdGUgdG8gc2VsZiIpJiZhcGkuYXNzZXJ0KCEoInVzZXIiPT09bCYmIm51bGwiPT09dSksImNhbm5vdCBkZWxlZ2F0ZSB0byBudWxsIikpZm9yKGxldCBwPTA7cDxuLmxlbmd0aDtwKz0xKXtsZXR7c3ltYm9sOmcsaWRzOnl9PW5bcF0sbT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpnfSk7aWYobSYmYXBpLmFzc2VydCghMD09PW0uZGVsZWdhdGlvbkVuYWJsZWQsYGRlbGVnYXRpb24gbm90IGVuYWJsZWQgZm9yICR7Z31gKSl7bGV0ICQ9ZysiaW5zdGFuY2VzIjtmb3IobGV0IGg9MDtoPHkubGVuZ3RoO2grPTEpe2xldCBiPXlbaF0sdj1hd2FpdCBhcGkuZGIuZmluZE9uZSgkLHtfaWQ6YXBpLkJpZ051bWJlcihiKS50b051bWJlcigpfSk7aWYodiYmdi5hY2NvdW50PT09ZiYmKCJ1Ij09PXYub3duZWRCeSYmInVzZXIiPT09ZHx8ImMiPT09di5vd25lZEJ5JiYiY29udHJhY3QiPT09ZCkmJnZvaWQgMD09PXYuZGVsZWdhdGVkVG8pe2xldCB3PSJ1c2VyIj09PWw/InUiOiJjIixOPXthY2NvdW50OnUsb3duZWRCeTp3fTt2LmRlbGVnYXRlZFRvPU4sYXdhaXQgYXBpLmRiLnVwZGF0ZSgkLHYpLGFwaS5lbWl0KCJkZWxlZ2F0ZSIse2Zyb206Zixmcm9tVHlwZTp2Lm93bmVkQnksdG86dSx0b1R5cGU6dyxzeW1ib2w6ZyxpZDpifSksYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJtaW5pbmciLCJoYW5kbGVOZnREZWxlZ2F0aW9uQ2hhbmdlIix7c3ltYm9sOmcsbmZ0OnYsYWRkOiEwfSl9fX19fX0sYWN0aW9ucy51bmRlbGVnYXRlPWFzeW5jIGU9PntsZXR7ZnJvbVR5cGU6dCxuZnRzOnMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmEsY2FsbGluZ0NvbnRyYWN0SW5mbzpufT1lLGk9WyJ1c2VyIiwiY29udHJhY3QiXSxyPXZvaWQgMD09PXQ/InVzZXIiOnQ7aWYoYXBpLmFzc2VydCghMD09PWEsInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHImJiJzdHJpbmciPT10eXBlb2YgciYmaS5pbmNsdWRlcyhyKSYmKG58fHZvaWQgMD09PW4mJiJ1c2VyIj09PXIpJiZzJiYib2JqZWN0Ij09dHlwZW9mIHMmJkFycmF5LmlzQXJyYXkocyksImludmFsaWQgcGFyYW1zIikmJmlzVmFsaWROZnRJZEFycmF5KHMpKXtsZXQgbz0idXNlciI9PT1yP2FwaS5zZW5kZXI6bi5uYW1lLGw9bmV3IERhdGUoYCR7YXBpLmhpdmVCbG9ja1RpbWVzdGFtcH0uMDAwWmApO2ZvcihsZXQgZD0wO2Q8cy5sZW5ndGg7ZCs9MSl7bGV0e3N5bWJvbDp1LGlkczpjfT1zW2RdLGY9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6dX0pO2lmKGYmJmFwaS5hc3NlcnQoITA9PT1mLmRlbGVnYXRpb25FbmFibGVkLGBkZWxlZ2F0aW9uIG5vdCBlbmFibGVkIGZvciAke3V9YCkpe2xldCBwPTg2NGU1KmYudW5kZWxlZ2F0aW9uQ29vbGRvd24sZz1sLmdldFRpbWUoKStwLHk9dSsiaW5zdGFuY2VzIixtPXtzeW1ib2w6dSxpZHM6W10sY29tcGxldGVUaW1lc3RhbXA6Z307Zm9yKGxldCAkPTA7JDxjLmxlbmd0aDskKz0xKXtsZXQgaD1jWyRdLGI9YXdhaXQgYXBpLmRiLmZpbmRPbmUoeSx7X2lkOmFwaS5CaWdOdW1iZXIoaCkudG9OdW1iZXIoKX0pO2ImJmIuYWNjb3VudD09PW8mJigidSI9PT1iLm93bmVkQnkmJiJ1c2VyIj09PXJ8fCJjIj09PWIub3duZWRCeSYmImNvbnRyYWN0Ij09PXIpJiZiLmRlbGVnYXRlZFRvJiZ2b2lkIDA9PT1iLmRlbGVnYXRlZFRvLnVuZGVsZWdhdGVBdCYmKGIuZGVsZWdhdGVkVG8udW5kZWxlZ2F0ZUF0PWcsbS5pZHMucHVzaChiLl9pZCksYXdhaXQgYXBpLmRiLnVwZGF0ZSh5LGIpLGFwaS5lbWl0KCJ1bmRlbGVnYXRlU3RhcnQiLHtmcm9tOmIuZGVsZWdhdGVkVG8uYWNjb3VudCxmcm9tVHlwZTpiLmRlbGVnYXRlZFRvLm93bmVkQnksc3ltYm9sOnUsaWQ6aH0pLGF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgibWluaW5nIiwiaGFuZGxlTmZ0RGVsZWdhdGlvbkNoYW5nZSIse3N5bWJvbDp1LG5mdDpiLGFkZDohMX0pKX1tLmlkcy5sZW5ndGg+MCYmYXdhaXQgYXBpLmRiLmluc2VydCgicGVuZGluZ1VuZGVsZWdhdGlvbnMiLG0pfX19fTtjb25zdCBwcm9jZXNzVW5kZWxlZ2F0aW9uPWFzeW5jIGU9PntsZXR7c3ltYm9sOnQsaWRzOnN9PWUsYT10KyJpbnN0YW5jZXMiLG49YXdhaXQgYXBpLmRiLmZpbmQoYSx7X2lkOnskaW46c319LDUwLDAsW3tpbmRleDoiX2lkIixkZXNjZW5kaW5nOiExfV0pO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSs9MSlkZWxldGUgbltpXS5kZWxlZ2F0ZWRUbyxhd2FpdCBhcGkuZGIudXBkYXRlKGEsbltpXSx7ZGVsZWdhdGVkVG86IiJ9KTthd2FpdCBhcGkuZGIucmVtb3ZlKCJwZW5kaW5nVW5kZWxlZ2F0aW9ucyIsZSksYXBpLmVtaXQoInVuZGVsZWdhdGVEb25lIix7c3ltYm9sOnQsaWRzOnN9KX07YWN0aW9ucy5jaGVja1BlbmRpbmdVbmRlbGVnYXRpb25zPWFzeW5jKCk9PntpZihhcGkuYXNzZXJ0KCJudWxsIj09PWFwaS5zZW5kZXIsIm5vdCBhdXRob3JpemVkIikpe2xldCBlPW5ldyBEYXRlKGAke2FwaS5oaXZlQmxvY2tUaW1lc3RhbXB9LjAwMFpgKSx0PWUuZ2V0VGltZSgpLHM9YXdhaXQgYXBpLmRiLmZpbmQoInBlbmRpbmdVbmRlbGVnYXRpb25zIix7Y29tcGxldGVUaW1lc3RhbXA6eyRsdGU6dH19KSxhPXMubGVuZ3RoO2Zvcig7YT4wOyl7Zm9yKGxldCBuPTA7bjxhO24rPTEpe2xldCBpPXNbbl07YXdhaXQgcHJvY2Vzc1VuZGVsZWdhdGlvbihpKX1hPShzPWF3YWl0IGFwaS5kYi5maW5kKCJwZW5kaW5nVW5kZWxlZ2F0aW9ucyIse2NvbXBsZXRlVGltZXN0YW1wOnskbHRlOnR9fSkpLmxlbmd0aH19fSxhY3Rpb25zLmNyZWF0ZT1hc3luYyBlPT57bGV0e25hbWU6dCxvcmdOYW1lOnMscHJvZHVjdE5hbWU6YSxzeW1ib2w6bix1cmw6aSxtYXhTdXBwbHk6cixhdXRob3JpemVkSXNzdWluZ0FjY291bnRzOm8sYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHM6bCxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6ZH09ZSx1PWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KSx7bmZ0Q3JlYXRpb25GZWU6Y309dSxmPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOiJCRUUifSkscD0hIWFwaS5CaWdOdW1iZXIoYykubHRlKDApfHxmJiZhcGkuQmlnTnVtYmVyKGYuYmFsYW5jZSkuZ3RlKGMpO2lmKGFwaS5hc3NlcnQocCwieW91IG11c3QgaGF2ZSBlbm91Z2ggdG9rZW5zIHRvIGNvdmVyIHRoZSBjcmVhdGlvbiBmZWVzIikmJmFwaS5hc3NlcnQoITA9PT1kLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCh0JiYic3RyaW5nIj09dHlwZW9mIHQmJm4mJiJzdHJpbmciPT10eXBlb2YgbiYmKHZvaWQgMD09PWl8fGkmJiJzdHJpbmciPT10eXBlb2YgaSkmJih2b2lkIDA9PT1zfHxzJiYic3RyaW5nIj09dHlwZW9mIHMpJiYodm9pZCAwPT09YXx8YSYmInN0cmluZyI9PXR5cGVvZiBhKSYmKHZvaWQgMD09PW98fG8mJiJvYmplY3QiPT10eXBlb2YgbyYmQXJyYXkuaXNBcnJheShvKSkmJih2b2lkIDA9PT1sfHxsJiYib2JqZWN0Ij09dHlwZW9mIGwmJkFycmF5LmlzQXJyYXkobCkpJiYodm9pZCAwPT09cnx8ciYmInN0cmluZyI9PXR5cGVvZiByJiYhYXBpLkJpZ051bWJlcihyKS5pc05hTigpKSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChhcGkudmFsaWRhdG9yLmlzQWxwaGEobikmJmFwaS52YWxpZGF0b3IuaXNVcHBlcmNhc2UobikmJm4ubGVuZ3RoPjAmJm4ubGVuZ3RoPD0xMCwiaW52YWxpZCBzeW1ib2w6IHVwcGVyY2FzZSBsZXR0ZXJzIG9ubHksIG1heCBsZW5ndGggb2YgMTAiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1SRVNFUlZFRF9TWU1CT0xTW25dfHxhcGkuc2VuZGVyPT09UkVTRVJWRURfU1lNQk9MU1tuXSwiY2Fubm90IHVzZSB0aGlzIHN5bWJvbCIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QodCwiICIpKSYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PTUwLCJpbnZhbGlkIG5hbWU6IGxldHRlcnMsIG51bWJlcnMsIHdoaXRlc3BhY2VzIG9ubHksIG1heCBsZW5ndGggb2YgNTAiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1zfHxhcGkudmFsaWRhdG9yLmlzQWxwaGFudW1lcmljKGFwaS52YWxpZGF0b3IuYmxhY2tsaXN0KHMsIiAiKSkmJnMubGVuZ3RoPjAmJnMubGVuZ3RoPD01MCwiaW52YWxpZCBvcmcgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWF8fGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QoYSwiICIpKSYmYS5sZW5ndGg+MCYmYS5sZW5ndGg8PTUwLCJpbnZhbGlkIHByb2R1Y3QgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWl8fGkubGVuZ3RoPD0yNTUsImludmFsaWQgdXJsOiBtYXggbGVuZ3RoIG9mIDI1NSIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PXJ8fGFwaS5CaWdOdW1iZXIocikuZ3QoMCksIm1heFN1cHBseSBtdXN0IGJlIHBvc2l0aXZlIikmJmFwaS5hc3NlcnQodm9pZCAwPT09cnx8YXBpLkJpZ051bWJlcihyKS5sdGUoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLGBtYXhTdXBwbHkgbXVzdCBiZSBsb3dlciB0aGFuICR7TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJ9YCkpe2xldCBnPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOm59KTtpZihhcGkuYXNzZXJ0KG51bGw9PT1nLCJzeW1ib2wgYWxyZWFkeSBleGlzdHMiKSl7aWYoYXBpLkJpZ051bWJlcihjKS5ndCgwKSl7bGV0IHk9YXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlciIse3RvOiJudWxsIixzeW1ib2w6IkJFRSIscXVhbnRpdHk6Yyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6ZH0pO2lmKCFpc1Rva2VuVHJhbnNmZXJWZXJpZmllZCh5LGFwaS5zZW5kZXIsIm51bGwiLCJCRUUiLGMsInRyYW5zZmVyIikpcmV0dXJuITF9bGV0IG09dm9pZCAwPT09cj8wOmFwaS5CaWdOdW1iZXIocikuaW50ZWdlclZhbHVlKGFwaS5CaWdOdW1iZXIuUk9VTkRfRE9XTikudG9OdW1iZXIoKSwkPXZvaWQgMD09PXM/IiI6cyxoPXZvaWQgMD09PWE/IiI6YSxiPXZvaWQgMD09PWk/IiI6aSx2PXt1cmw6Yn07dj1KU09OLnN0cmluZ2lmeSh2KTtsZXQgdz12b2lkIDA9PT1vP1thcGkuc2VuZGVyXTpbXSxOPXtpc3N1ZXI6YXBpLnNlbmRlcixzeW1ib2w6bixuYW1lOnQsb3JnTmFtZTokLHByb2R1Y3ROYW1lOmgsbWV0YWRhdGE6dixtYXhTdXBwbHk6bSxzdXBwbHk6MCxjaXJjdWxhdGluZ1N1cHBseTowLGRlbGVnYXRpb25FbmFibGVkOiExLHVuZGVsZWdhdGlvbkNvb2xkb3duOjAsYXV0aG9yaXplZElzc3VpbmdBY2NvdW50czp3LGF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzOltdLHByb3BlcnRpZXM6e30sZ3JvdXBCeTpbXX0sXz1uKyJpbnN0YW5jZXMiLEE9YXdhaXQgYXBpLmRiLnRhYmxlRXhpc3RzKF8pO3JldHVybiExPT09QSYmYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKF8sWyJhY2NvdW50Iiwib3duZWRCeSJdKSxhd2FpdCBhcGkuZGIuaW5zZXJ0KCJuZnRzIixOKSx2b2lkIDAhPT1vJiZhd2FpdCBhY3Rpb25zLmFkZEF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMoe2FjY291bnRzOm8sc3ltYm9sOm4saXNTaWduZWRXaXRoQWN0aXZlS2V5OmR9KSx2b2lkIDAhPT1sJiZhd2FpdCBhY3Rpb25zLmFkZEF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzKHtjb250cmFjdHM6bCxzeW1ib2w6bixpc1NpZ25lZFdpdGhBY3RpdmVLZXk6ZH0pLCEwfX1yZXR1cm4hMX0sYWN0aW9ucy5pc3N1ZT1hc3luYyBlPT57bGV0e3N5bWJvbDp0LGZyb21UeXBlOnMsdG86YSx0b1R5cGU6bixmZWVTeW1ib2w6aSxsb2NrVG9rZW5zOnIsbG9ja05mdHM6byxzb3VsQm91bmQ6bCxwcm9wZXJ0aWVzOmQsaXNTaWduZWRXaXRoQWN0aXZlS2V5OnUsY2FsbGluZ0NvbnRyYWN0SW5mbzpjfT1lLGY9WyJ1c2VyIiwiY29udHJhY3QiXSxwPXZvaWQgMD09PW4/InVzZXIiOm4sZz12b2lkIDA9PT1zPyJ1c2VyIjpzLHk9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pLHtuZnRJc3N1YW5jZUZlZTptfT15O2lmKGFwaS5hc3NlcnQoITA9PT11LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCh0JiYic3RyaW5nIj09dHlwZW9mIHQmJmcmJiJzdHJpbmciPT10eXBlb2YgZyYmZi5pbmNsdWRlcyhnKSYmKGN8fHZvaWQgMD09PWMmJiJ1c2VyIj09PWcpJiZhJiYic3RyaW5nIj09dHlwZW9mIGEmJnAmJiJzdHJpbmciPT10eXBlb2YgcCYmZi5pbmNsdWRlcyhwKSYmaSYmInN0cmluZyI9PXR5cGVvZiBpJiZpIGluIG0mJih2b2lkIDA9PT1kfHxkJiYib2JqZWN0Ij09dHlwZW9mIGQpJiYodm9pZCAwPT09cnx8ciYmIm9iamVjdCI9PXR5cGVvZiByKSYmKHZvaWQgMD09PW98fG8mJiJvYmplY3QiPT10eXBlb2YgbyYmQXJyYXkuaXNBcnJheShvKSkmJih2b2lkIDA9PT1sfHxsJiYiYm9vbGVhbiI9PXR5cGVvZiBsKSwiaW52YWxpZCBwYXJhbXMiKSYmKHZvaWQgMD09PW98fGlzVmFsaWROZnRJZEFycmF5KG8pKSl7bGV0ICQ9InVzZXIiPT09cD9hLnRyaW0oKS50b0xvd2VyQ2FzZSgpOmEudHJpbSgpLGg9InVzZXIiPT09cD9pc1ZhbGlkSGl2ZUFjY291bnRMZW5ndGgoJCk6aXNWYWxpZENvbnRyYWN0TGVuZ3RoKCQpLGI9InVzZXIiPT09Zz9hcGkuc2VuZGVyOmMubmFtZSx2PSJ1c2VyIj09PWc/ImJhbGFuY2VzIjoiY29udHJhY3RzQmFsYW5jZXMiO2lmKGFwaS5hc3NlcnQoaCwiaW52YWxpZCB0byIpKXtsZXQgdz1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDp0fSksTj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDppfSk7aWYoYXBpLmFzc2VydChudWxsIT09dywic3ltYm9sIGRvZXMgbm90IGV4aXN0IikmJmFwaS5hc3NlcnQobnVsbCE9PU4sImZlZSBzeW1ib2wgZG9lcyBub3QgZXhpc3QiKSl7bGV0IF89dCsiaW5zdGFuY2VzIjtpZihhcGkuYXNzZXJ0KCJjb250cmFjdCI9PT1nJiZ3LmF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzLmluY2x1ZGVzKGIpfHwidXNlciI9PT1nJiZ3LmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMuaW5jbHVkZXMoYiksIm5vdCBhbGxvd2VkIHRvIGlzc3VlIHRva2VucyIpJiZhcGkuYXNzZXJ0KDA9PT13Lm1heFN1cHBseXx8dy5zdXBwbHk8dy5tYXhTdXBwbHksIm1heCBzdXBwbHkgbGltaXQgcmVhY2hlZCIpKXtsZXQgQT1PYmplY3Qua2V5cyh3LnByb3BlcnRpZXMpLmxlbmd0aCxUPWFwaS5CaWdOdW1iZXIobVtpXSkubXVsdGlwbGllZEJ5KEEpLGs9Y2FsY3VsYXRlQmFsYW5jZShtW2ldLFQsTi5wcmVjaXNpb24sITApLEI9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLHYse2FjY291bnQ6YixzeW1ib2w6aX0pLEU9ISFhcGkuQmlnTnVtYmVyKGspLmx0ZSgwKXx8QiYmYXBpLkJpZ051bWJlcihCLmJhbGFuY2UpLmd0ZShrKTtpZihyKXtsZXQgTz1hd2FpdCBpc1ZhbGlkVG9rZW5CYXNrZXQocix2LGIsaSxrKTtpZighYXBpLmFzc2VydChPLCJpbnZhbGlkIGJhc2tldCBvZiB0b2tlbnMgdG8gbG9jayAoY2Fubm90IGxvY2sgbW9yZSB0aGFuIDEwIHRva2VuIHR5cGVzOyBpc3N1aW5nIGFjY291bnQgbXVzdCBoYXZlIGVub3VnaCBiYWxhbmNlKSIpKXJldHVybiExfWxldCBDPXt9O2lmKHZvaWQgMCE9PWQpe3RyeXtpZighaXNWYWxpZERhdGFQcm9wZXJ0aWVzKGIsZyx3LGQpKXJldHVybiExfWNhdGNoKEkpe3JldHVybiExfUM9ZH1pZihhcGkuYXNzZXJ0KEUsInlvdSBtdXN0IGhhdmUgZW5vdWdoIHRva2VucyB0byBjb3ZlciB0aGUgaXNzdWFuY2UgZmVlcyIpKXtpZihhcGkuQmlnTnVtYmVyKGspLmd0KDApKXtpZigiY29udHJhY3QiPT09Zyl7bGV0IFM9YXdhaXQgYXBpLnRyYW5zZmVyVG9rZW5zRnJvbUNhbGxpbmdDb250cmFjdCgibnVsbCIsaSxrLCJ1c2VyIik7aWYoIWFwaS5hc3NlcnQoaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQoUyxiLCJudWxsIixpLGssInRyYW5zZmVyRnJvbUNvbnRyYWN0IiksInVuYWJsZSB0byB0cmFuc2ZlciBpc3N1YW5jZSBmZWUiKSlyZXR1cm4hMX1lbHNle2xldCBWPWF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOmkscXVhbnRpdHk6ayxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6dX0pO2lmKCFhcGkuYXNzZXJ0KGlzVG9rZW5UcmFuc2ZlclZlcmlmaWVkKFYsYiwibnVsbCIsaSxrLCJ0cmFuc2ZlciIpLCJ1bmFibGUgdG8gdHJhbnNmZXIgaXNzdWFuY2UgZmVlIikpcmV0dXJuITF9fWxldCB4PXt9O2lmKHIpZm9yKGxldFtqLExdb2YgT2JqZWN0LmVudHJpZXMocikpaWYoImNvbnRyYWN0Ij09PWcpe2xldCB6PWF3YWl0IGFwaS50cmFuc2ZlclRva2Vuc0Zyb21DYWxsaW5nQ29udHJhY3QoIm5mdCIsaixMLCJjb250cmFjdCIpO2lzVG9rZW5UcmFuc2ZlclZlcmlmaWVkKHosYiwibmZ0IixqLEwsInRyYW5zZmVyRnJvbUNvbnRyYWN0IikmJih4W2pdPUwpfWVsc2V7bGV0IFI9YXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlclRvQ29udHJhY3QiLHt0bzoibmZ0IixzeW1ib2w6aixxdWFudGl0eTpMLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTp1fSk7aXNUb2tlblRyYW5zZmVyVmVyaWZpZWQoUixiLCJuZnQiLGosTCwidHJhbnNmZXJUb0NvbnRyYWN0IikmJih4W2pdPUwpfWxldCBGPVtdO2lmKG8mJm8ubGVuZ3RoPjApe2xldCBEPWF3YWl0IHRyYW5zZmVyQW5kVmVyaWZ5TmZ0cyhiLGcsIm5mdCIsImNvbnRyYWN0IixvLHUsYyk7Rj1ELnN1Y2Nlc3N9bGV0IE09InVzZXIiPT09cD8idSI6ImMiLFA9e307UD1GLmxlbmd0aD4wP3thY2NvdW50OiQsc291bEJvdW5kOmwsb3duZWRCeTpNLGxvY2tlZFRva2Vuczp4LGxvY2tlZE5mdHM6Rixwcm9wZXJ0aWVzOkN9OnthY2NvdW50OiQsc291bEJvdW5kOmwsb3duZWRCeTpNLGxvY2tlZFRva2Vuczp4LHByb3BlcnRpZXM6Q307bGV0IFU9YXdhaXQgYXBpLmRiLmluc2VydChfLFApO3JldHVybiB3LnN1cHBseSs9MSwoIm51bGwiIT09JHx8ImNvbnRyYWN0Ij09PXApJiYody5jaXJjdWxhdGluZ1N1cHBseSs9MSksYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsdyksYXBpLmVtaXQoImlzc3VlIix7ZnJvbTpiLGZyb21UeXBlOmcsdG86JCx0b1R5cGU6cCxzeW1ib2w6dCxsb2NrZWRUb2tlbnM6eCxsb2NrZWROZnRzOkYsc291bEJvdW5kOiEhbCxwcm9wZXJ0aWVzOkMsaWQ6VS5faWR9KSwhMH19fX19cmV0dXJuITF9LGFjdGlvbnMuaXNzdWVNdWx0aXBsZT1hc3luYyBlPT57bGV0e2luc3RhbmNlczp0LGlzU2lnbmVkV2l0aEFjdGl2ZUtleTpzLGNhbGxpbmdDb250cmFjdEluZm86YX09ZTtpZihhcGkuYXNzZXJ0KCEwPT09cywieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQodCYmIm9iamVjdCI9PXR5cGVvZiB0JiZBcnJheS5pc0FycmF5KHQpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KHQubGVuZ3RoPD0xMCwiY2Fubm90IGlzc3VlIG1vcmUgdGhhbiAxMCBORlQgaW5zdGFuY2VzIGF0IG9uY2UiKSl7bGV0IG49MDtpZih0LmZvckVhY2goZT0+e2UubG9ja05mdHMmJihuKz0xKX0pLGFwaS5hc3NlcnQobjw9MSwiY2Fubm90IGlzc3VlIG1vcmUgdGhhbiAxIGNvbnRhaW5lciBORlQgaW5zdGFuY2VzIGF0IG9uY2UiKSYmYXBpLmFzc2VydCgwPT09bnx8bj09PXQubGVuZ3RoLCJjYW5ub3QgaXNzdWUgYSBtaXggb2YgY29udGFpbmVyIGFuZCBub24tY29udGFpbmVyIE5GVCBpbnN0YW5jZXMgc2ltdWx0YW5lb3VzbHkiKSlmb3IobGV0IGk9MDtpPHQubGVuZ3RoO2krPTEpe2xldHtzeW1ib2w6cixmcm9tVHlwZTpvLHRvOmwsdG9UeXBlOmQsZmVlU3ltYm9sOnUsbG9ja1Rva2VuczpjLGxvY2tOZnRzOmYscHJvcGVydGllczpwfT10W2ldO2F3YWl0IGFjdGlvbnMuaXNzdWUoe3N5bWJvbDpyLGZyb21UeXBlOm8sdG86bCx0b1R5cGU6ZCxmZWVTeW1ib2w6dSxsb2NrVG9rZW5zOmMsbG9ja05mdHM6Zixwcm9wZXJ0aWVzOnAsaXNTaWduZWRXaXRoQWN0aXZlS2V5OnMsY2FsbGluZ0NvbnRyYWN0SW5mbzphfSl9fX07"}}}
{"id":"ssc-testnet-hive","json":{"contractName":"contract","contractAction":"update","contractPayload":{"name":"nft","params":"","code":"Y29uc3QgQ09OVFJBQ1RfTkFNRT0ibmZ0IixVVElMSVRZX1RPS0VOX1NZTUJPTD0iQkVFIixNQVhfTlVNX0FVVEhPUklaRURfSVNTVUVSUz0xMCxNQVhfTlVNX0xPQ0tFRF9UT0tFTl9UWVBFUz0xMCxNQVhfU1lNQk9MX0xFTkdUSD0xMCxNQVhfREFUQV9QUk9QRVJUWV9MRU5HVEg9MTAwLE1BWF9OVU1fTkZUU19JU1NVQUJMRT0xMCxNQVhfTlVNX05GVFNfRURJVEFCTEU9NTAsTUFYX05VTV9ORlRTX09QRVJBQkxFPTUwLE1BWF9OVU1fQ09OVEFJTkVSX05GVFNfT1BFUkFCTEU9MSxSRVNFUlZFRF9TWU1CT0xTPXtDRUxMOiJiZWdnYXJzIixRVVNUOiJzaW1wbGVnYW1lIixURVNURVJBOiJhZ2dyb2VkIixTUVJMOiJzdHVmZmJ5c3BlbmNlciIsQ1JBRlQ6ImltbWFudWVsOTQiLE1VU0lDOiJhdG9tY29sbGVjdG9yIixDR1VMTDoiY2d1bGwiLE5GVDoiY2FkYXdnIixSQVJFOiJiZWdnYXJzIixMSUM6ImxpY3Rva2VuIixNRU1CRVI6Im1lbWJlcnRva2VuIixDT0ZGRUU6ImMwZmYzM2EiLEFSVDoiYnlvIixST0NLOiJiZWdnYXJzIixDUklUVEVSOiJjcnlwdG9tYW5jZXIiLENJVFk6ImdlcmJlciIsTU9OU1RFUlM6InNpbXBsZWdhbWUiLFNFVFM6Imxvb3RraXQuZ2FtZXMiLEFOSU1FOiJhbmltZXRva2VuIixQSE9UT0ZUOiJ3d3dpZWJlIixCRUVSOiJkZXRsZXYiLFNQSVI6InNwaW52ZXN0IixJRkc6Imxpb24yMDAiLEdVSUxEUzoic2ltcGxlZ2FtZSIsRkNBUkQ6Imxpb24yMDAiLFBYTDoicGl4ZWxuZnQiLENPVzoic3R1ZmZieXNwZW5jZXIiLExPT09UOiJzdHVmZmJ5c3BlbmNlciIsQVBJOiJzdGVlbWNpdHlhcGkiLFNQT1JUU01PTToic3BvcnRzdGVzdGVyIixTV1Q6InNhdHJlbiIsU1RBUjoiYXRvbWNvbGxlY3RvciJ9O2FjdGlvbnMuY3JlYXRlU1NDPWFzeW5jKCk9PntsZXQgZT1hd2FpdCBhcGkuZGIudGFibGVFeGlzdHMoIm5mdHMiKTtpZighMT09PWUpe2F3YWl0IGFwaS5kYi5jcmVhdGVUYWJsZSgibmZ0cyIsWyJzeW1ib2wiXSksYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCJwYXJhbXMiKSxhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoInBlbmRpbmdVbmRlbGVnYXRpb25zIixbInN5bWJvbCIsImNvbXBsZXRlVGltZXN0YW1wIl0pO2xldCB0PXt9O3QubmZ0Q3JlYXRpb25GZWU9IjEwMCIsdC5uZnRJc3N1YW5jZUZlZT17QkVFOiIwLjAwMSIsUEFMOiIwLjAwMSJ9LHQuZGF0YVByb3BlcnR5Q3JlYXRpb25GZWU9IjEwMCIsdC5lbmFibGVEZWxlZ2F0aW9uRmVlPSIxMDAwIixhd2FpdCBhcGkuZGIuaW5zZXJ0KCJwYXJhbXMiLHQpfX0sYWN0aW9ucy51cGRhdGVQYXJhbXM9YXN5bmMgZT0+e2lmKGFwaS5zZW5kZXIhPT1hcGkub3duZXIpcmV0dXJuO2xldHtuZnRDcmVhdGlvbkZlZTp0LG5mdElzc3VhbmNlRmVlOnMsZGF0YVByb3BlcnR5Q3JlYXRpb25GZWU6YSxlbmFibGVEZWxlZ2F0aW9uRmVlOm59PWUsaT1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSk7dCYmInN0cmluZyI9PXR5cGVvZiB0JiYhYXBpLkJpZ051bWJlcih0KS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKHQpLmd0ZSgwKSYmKGkubmZ0Q3JlYXRpb25GZWU9dCkscyYmIm9iamVjdCI9PXR5cGVvZiBzJiYoaS5uZnRJc3N1YW5jZUZlZT1zKSxhJiYic3RyaW5nIj09dHlwZW9mIGEmJiFhcGkuQmlnTnVtYmVyKGEpLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIoYSkuZ3RlKDApJiYoaS5kYXRhUHJvcGVydHlDcmVhdGlvbkZlZT1hKSxuJiYic3RyaW5nIj09dHlwZW9mIG4mJiFhcGkuQmlnTnVtYmVyKG4pLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIobikuZ3RlKDApJiYoaS5lbmFibGVEZWxlZ2F0aW9uRmVlPW4pLGF3YWl0IGFwaS5kYi51cGRhdGUoInBhcmFtcyIsaSl9O2NvbnN0IGlzVG9rZW5UcmFuc2ZlclZlcmlmaWVkPShlLHQscyxhLG4saSk9PnZvaWQgMD09PWUuZXJyb3JzJiYhIWUuZXZlbnRzJiZ2b2lkIDAhPT1lLmV2ZW50cy5maW5kKGU9PiJ0b2tlbnMiPT09ZS5jb250cmFjdCYmZS5ldmVudD09PWkmJmUuZGF0YS5mcm9tPT09dCYmZS5kYXRhLnRvPT09cyYmZS5kYXRhLnF1YW50aXR5PT09biYmZS5kYXRhLnN5bWJvbD09PWEpLGNhbGN1bGF0ZUJhbGFuY2U9KGUsdCxzLGEpPT5hP2FwaS5CaWdOdW1iZXIoZSkucGx1cyh0KS50b0ZpeGVkKHMpOmFwaS5CaWdOdW1iZXIoZSkubWludXModCkudG9GaXhlZChzKSxjb3VudERlY2ltYWxzPWU9PmFwaS5CaWdOdW1iZXIoZSkuZHAoKSxjb250YWluc0R1cGxpY2F0ZXM9ZT0+bmV3IFNldChlKS5zaXplIT09ZS5sZW5ndGgsaXNWYWxpZEhpdmVBY2NvdW50TGVuZ3RoPWU9PmUubGVuZ3RoPj0zJiZlLmxlbmd0aDw9MTYsaXNWYWxpZENvbnRyYWN0TGVuZ3RoPWU9PmUubGVuZ3RoPj0zJiZlLmxlbmd0aDw9NTAsaXNWYWxpZEFjY291bnRzQXJyYXk9ZT0+e2xldCB0PSEwO3JldHVybiBlLmZvckVhY2goZT0+eyJzdHJpbmciPT10eXBlb2YgZSYmaXNWYWxpZEhpdmVBY2NvdW50TGVuZ3RoKGUpfHwodD0hMSl9KSx0fSxpc1ZhbGlkQ29udHJhY3RzQXJyYXk9ZT0+e2xldCB0PSEwO3JldHVybiBlLmZvckVhY2goZT0+eyJzdHJpbmciPT10eXBlb2YgZSYmaXNWYWxpZENvbnRyYWN0TGVuZ3RoKGUpfHwodD0hMSl9KSx0fSxpc1ZhbGlkRGF0YVByb3BlcnRpZXM9KGUsdCxzLGEpPT57bGV0IG49T2JqZWN0LmtleXMoYSkubGVuZ3RoLGk9T2JqZWN0LmtleXMocy5wcm9wZXJ0aWVzKS5sZW5ndGg7aWYoIWFwaS5hc3NlcnQobjw9aSwiY2Fubm90IHNldCBtb3JlIGRhdGEgcHJvcGVydGllcyB0aGFuIE5GVCBoYXMiKSlyZXR1cm4hMTtmb3IobGV0W3Isb11vZiBPYmplY3QuZW50cmllcyhhKSl7bGV0IGw9ITE7aWYoYXBpLmFzc2VydChyJiYic3RyaW5nIj09dHlwZW9mIHImJmFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMocikmJnIubGVuZ3RoPjAmJnIubGVuZ3RoPD0yNSwiaW52YWxpZCBkYXRhIHByb3BlcnR5IG5hbWU6IGxldHRlcnMgJiBudW1iZXJzIG9ubHksIG1heCBsZW5ndGggb2YgMjUiKSYmYXBpLmFzc2VydChyIGluIHMucHJvcGVydGllcywiZGF0YSBwcm9wZXJ0eSBtdXN0IGV4aXN0Iikpe2xldCBkPXMucHJvcGVydGllc1tyXTthcGkuYXNzZXJ0KG51bGwhPW8mJih0eXBlb2Ygbz09PWQudHlwZXx8Im51bWJlciI9PT1kLnR5cGUmJiJzdHJpbmciPT10eXBlb2YgbyYmIWFwaS5CaWdOdW1iZXIobykuaXNOYU4oKSksYGRhdGEgcHJvcGVydHkgdHlwZSBtaXNtYXRjaDogZXhwZWN0ZWQgJHtkLnR5cGV9IGJ1dCBnb3QgJHt0eXBlb2Ygb30gZm9yIHByb3BlcnR5ICR7cn1gKSYmYXBpLmFzc2VydCgic3RyaW5nIiE9dHlwZW9mIG98fG8ubGVuZ3RoPD0xMDAsInN0cmluZyBwcm9wZXJ0eSBtYXggbGVuZ3RoIGlzIDEwMCBjaGFyYWN0ZXJzIikmJmFwaS5hc3NlcnQoImNvbnRyYWN0Ij09PXQmJmQuYXV0aG9yaXplZEVkaXRpbmdDb250cmFjdHMuaW5jbHVkZXMoZSl8fCJ1c2VyIj09PXQmJmQuYXV0aG9yaXplZEVkaXRpbmdBY2NvdW50cy5pbmNsdWRlcyhlKSwibm90IGFsbG93ZWQgdG8gc2V0IGRhdGEgcHJvcGVydGllcyIpJiYobD0hMCwibnVtYmVyIj09PWQudHlwZSYmInN0cmluZyI9PXR5cGVvZiBvJiYoYVtyXT1hcGkuQmlnTnVtYmVyKG8pLnRvTnVtYmVyKCkpKX1pZighbClyZXR1cm4hMX1yZXR1cm4hMH0saXNWYWxpZERhdGFQcm9wZXJ0aWVzQXJyYXk9KGUsdCxzLGEpPT57dHJ5e2ZvcihsZXQgbj0wO248YS5sZW5ndGg7bis9MSl7bGV0IGk9ITEse2lkOnIscHJvcGVydGllczpvfT1hW25dO2lmKGFwaS5hc3NlcnQociYmInN0cmluZyI9PXR5cGVvZiByJiYhYXBpLkJpZ051bWJlcihyKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKHIpLmd0KDApJiZvJiYib2JqZWN0Ij09dHlwZW9mIG8sImludmFsaWQgZGF0YSBwcm9wZXJ0aWVzIikmJmlzVmFsaWREYXRhUHJvcGVydGllcyhlLHQscyxvKSYmKGk9ITApLCFpKXJldHVybiExfX1jYXRjaChsKXtyZXR1cm4hMX1yZXR1cm4hMH0saXNWYWxpZE5mdElkQXJyYXk9ZT0+e3RyeXtsZXQgdD0wO2ZvcihsZXQgcz0wO3M8ZS5sZW5ndGg7cys9MSl7bGV0IGE9ITEse3N5bWJvbDpuLGlkczppfT1lW3NdO2lmKGFwaS5hc3NlcnQobiYmInN0cmluZyI9PXR5cGVvZiBuJiZhcGkudmFsaWRhdG9yLmlzQWxwaGEobikmJmFwaS52YWxpZGF0b3IuaXNVcHBlcmNhc2UobikmJm4ubGVuZ3RoPjAmJm4ubGVuZ3RoPD0xMCYmaSYmIm9iamVjdCI9PXR5cGVvZiBpJiZBcnJheS5pc0FycmF5KGkpLCJpbnZhbGlkIG5mdCBsaXN0IikmJih0Kz1pLmxlbmd0aCxhcGkuYXNzZXJ0KHQ8PTUwLCJjYW5ub3Qgb3BlcmF0ZSBvbiBtb3JlIHRoYW4gNTAgTkZUIGluc3RhbmNlcyBhdCBvbmNlIikpKXtmb3IobGV0IHI9MDtyPGkubGVuZ3RoO3IrPTEpe2xldCBvPWlbcl07aWYoIWFwaS5hc3NlcnQobyYmInN0cmluZyI9PXR5cGVvZiBvJiYhYXBpLkJpZ051bWJlcihvKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKG8pLmd0KDApLCJpbnZhbGlkIG5mdCBsaXN0IikpcmV0dXJuITF9YT0hMH1pZighYSlyZXR1cm4hMX19Y2F0Y2gobCl7cmV0dXJuITF9cmV0dXJuITB9LGlzVmFsaWRUb2tlbkJhc2tldD1hc3luYyhlLHQscyxhLG4pPT57dHJ5e2xldCBpPU9iamVjdC5rZXlzKGUpLmxlbmd0aDtpZihpPjEwKXJldHVybiExO2ZvcihsZXRbcixvXW9mIE9iamVjdC5lbnRyaWVzKGUpKXtsZXQgbD0hMTtpZigic3RyaW5nIj09dHlwZW9mIHImJmFwaS52YWxpZGF0b3IuaXNBbHBoYShyKSYmYXBpLnZhbGlkYXRvci5pc1VwcGVyY2FzZShyKSYmci5sZW5ndGg+MCYmci5sZW5ndGg8PTEwKXtsZXQgZD1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpyfSk7aWYoZCYmbyYmInN0cmluZyI9PXR5cGVvZiBvJiYhYXBpLkJpZ051bWJlcihvKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKG8pLmd0KDApJiZjb3VudERlY2ltYWxzKG8pPD1kLnByZWNpc2lvbil7bGV0IHU9cj09PWE/Y2FsY3VsYXRlQmFsYW5jZShvLG4sZC5wcmVjaXNpb24sITApOm8sYz1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsdCx7YWNjb3VudDpzLHN5bWJvbDpyfSk7YyYmYXBpLkJpZ051bWJlcihjLmJhbGFuY2UpLmd0ZSh1KSYmKGw9ITApfX1pZighbClyZXR1cm4hMX19Y2F0Y2goZil7cmV0dXJuITF9cmV0dXJuITB9LHRyYW5zZmVyQW5kVmVyaWZ5TmZ0cz1hc3luYyhlLHQscyxhLG4saSxyKT0+e2xldCBvPXtzdWNjZXNzOltdLGZhaWw6W119LGw9InVzZXIiPT09dD8idSI6ImMiLGQ9InVzZXIiPT09YT8idSI6ImMiO2F3YWl0IGFjdGlvbnMudHJhbnNmZXIoe2Zyb21UeXBlOnQsdG86cyx0b1R5cGU6YSxuZnRzOm4saXNTaWduZWRXaXRoQWN0aXZlS2V5OmksY2FsbGluZ0NvbnRyYWN0SW5mbzpyfSk7bGV0IHU9YXBpLmxvZ3MoKSxjPXt9LGY9e307aWYodS5ldmVudHMpZm9yKGxldCBwPTA7cDx1LmV2ZW50cy5sZW5ndGg7cCs9MSl7bGV0IGc9dS5ldmVudHNbcF07aWYoZy5jb250cmFjdCYmZy5ldmVudCYmZy5kYXRhJiYibmZ0Ij09PWcuY29udHJhY3QmJiJ0cmFuc2ZlciI9PT1nLmV2ZW50JiZnLmRhdGEuZnJvbT09PWUmJmcuZGF0YS5mcm9tVHlwZT09PWwmJmcuZGF0YS50bz09PXMmJmcuZGF0YS50b1R5cGU9PT1kKXtsZXQgeT1nLmRhdGEuc3ltYm9sKyItIitnLmRhdGEuaWQ7Y1t5XT0xfX1mb3IobGV0IG09MDttPG4ubGVuZ3RoO20rPTEpe2xldHtzeW1ib2w6JCxpZHM6aH09blttXSxiPVtdLHY9W107Zm9yKGxldCB3PTA7dzxoLmxlbmd0aDt3Kz0xKXtsZXQgTj0kKyItIitoW3ddO04gaW4gZnx8KE4gaW4gYz9iLnB1c2goaFt3XS50b1N0cmluZygpKTp2LnB1c2goaFt3XS50b1N0cmluZygpKSxmW05dPTEpfWIubGVuZ3RoPjAmJm8uc3VjY2Vzcy5wdXNoKHtzeW1ib2w6JCxpZHM6Yn0pLHYubGVuZ3RoPjAmJm8uZmFpbC5wdXNoKHtzeW1ib2w6JCxpZHM6dn0pfXJldHVybiBvfTthY3Rpb25zLnVwZGF0ZVVybD1hc3luYyBlPT57bGV0e3VybDp0LHN5bWJvbDpzfT1lO2lmKGFwaS5hc3NlcnQocyYmInN0cmluZyI9PXR5cGVvZiBzJiZ0JiYic3RyaW5nIj09dHlwZW9mIHQsImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQodC5sZW5ndGg8PTI1NSwiaW52YWxpZCB1cmw6IG1heCBsZW5ndGggb2YgMjU1Iikpe2xldCBhPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN9KTtpZihhJiZhcGkuYXNzZXJ0KGEuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpdHJ5e2xldCBuPUpTT04ucGFyc2UoYS5tZXRhZGF0YSk7YXBpLmFzc2VydChuJiZuLnVybCwiYW4gZXJyb3Igb2NjdXJlZCB3aGVuIHRyeWluZyB0byB1cGRhdGUgdGhlIHVybCIpJiYobi51cmw9dCxhLm1ldGFkYXRhPUpTT04uc3RyaW5naWZ5KG4pLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGEpKX1jYXRjaChpKXt9fX0sYWN0aW9ucy51cGRhdGVNZXRhZGF0YT1hc3luYyBlPT57bGV0e21ldGFkYXRhOnQsc3ltYm9sOnN9PWU7aWYoYXBpLmFzc2VydChzJiYic3RyaW5nIj09dHlwZW9mIHMmJnQmJiJvYmplY3QiPT10eXBlb2YgdCwiaW52YWxpZCBwYXJhbXMiKSl7bGV0IGE9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c30pO2lmKGEmJmFwaS5hc3NlcnQoYS5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSl0cnl7bGV0IG49SlNPTi5zdHJpbmdpZnkodCk7YXBpLmFzc2VydChuLmxlbmd0aDw9MWUzLCJpbnZhbGlkIG1ldGFkYXRhOiBtYXggbGVuZ3RoIG9mIDEwMDAiKSYmKGEubWV0YWRhdGE9bixhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixhKSl9Y2F0Y2goaSl7fX19LGFjdGlvbnMudXBkYXRlTmFtZT1hc3luYyBlPT57bGV0e25hbWU6dCxzeW1ib2w6c309ZTtpZihhcGkuYXNzZXJ0KHMmJiJzdHJpbmciPT10eXBlb2YgcyYmdCYmInN0cmluZyI9PXR5cGVvZiB0LCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QodCwiICIpKSYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PTUwLCJpbnZhbGlkIG5hbWU6IGxldHRlcnMsIG51bWJlcnMsIHdoaXRlc3BhY2VzIG9ubHksIG1heCBsZW5ndGggb2YgNTAiKSl7bGV0IGE9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c30pO2EmJmFwaS5hc3NlcnQoYS5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmKGEubmFtZT10LGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGEpKX19LGFjdGlvbnMudXBkYXRlT3JnTmFtZT1hc3luYyBlPT57bGV0e29yZ05hbWU6dCxzeW1ib2w6c309ZTtpZihhcGkuYXNzZXJ0KHMmJiJzdHJpbmciPT10eXBlb2YgcyYmdCYmInN0cmluZyI9PXR5cGVvZiB0LCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QodCwiICIpKSYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PTUwLCJpbnZhbGlkIG9yZyBuYW1lOiBsZXR0ZXJzLCBudW1iZXJzLCB3aGl0ZXNwYWNlcyBvbmx5LCBtYXggbGVuZ3RoIG9mIDUwIikpe2xldCBhPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN9KTthJiZhcGkuYXNzZXJ0KGEuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJihhLm9yZ05hbWU9dCxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixhKSl9fSxhY3Rpb25zLnVwZGF0ZVByb2R1Y3ROYW1lPWFzeW5jIGU9PntsZXR7cHJvZHVjdE5hbWU6dCxzeW1ib2w6c309ZTtpZihhcGkuYXNzZXJ0KHMmJiJzdHJpbmciPT10eXBlb2YgcyYmdCYmInN0cmluZyI9PXR5cGVvZiB0LCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QodCwiICIpKSYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PTUwLCJpbnZhbGlkIHByb2R1Y3QgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpKXtsZXQgYT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzfSk7YSYmYXBpLmFzc2VydChhLmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpJiYoYS5wcm9kdWN0TmFtZT10LGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGEpKX19LGFjdGlvbnMuYWRkQXV0aG9yaXplZElzc3VpbmdBY2NvdW50cz1hc3luYyBlPT57bGV0e2FjY291bnRzOnQsc3ltYm9sOnMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmF9PWU7aWYoYXBpLmFzc2VydCghMD09PWEsInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHMmJiJzdHJpbmciPT10eXBlb2YgcyYmdCYmIm9iamVjdCI9PXR5cGVvZiB0JiZBcnJheS5pc0FycmF5KHQpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KHQubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBhY2NvdW50cyIpKXtsZXQgbj1pc1ZhbGlkQWNjb3VudHNBcnJheSh0KTtpZihhcGkuYXNzZXJ0KG4sImludmFsaWQgYWNjb3VudCBsaXN0Iikpe2xldCBpPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN9KTtpZihpKXtsZXQgcj1bXTtpZih0LmZvckVhY2goZT0+e2xldCB0PWUudHJpbSgpLnRvTG93ZXJDYXNlKCkscz0hMTtmb3IobGV0IGE9MDthPGkuYXV0aG9yaXplZElzc3VpbmdBY2NvdW50cy5sZW5ndGg7YSs9MSlpZih0PT09aS5hdXRob3JpemVkSXNzdWluZ0FjY291bnRzW2FdKXtzPSEwO2JyZWFrfXN8fHIucHVzaCh0KX0pLGFwaS5hc3NlcnQoaS5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmYXBpLmFzc2VydCghY29udGFpbnNEdXBsaWNhdGVzKHIpLCJjYW5ub3QgYWRkIHRoZSBzYW1lIGFjY291bnQgdHdpY2UiKSYmYXBpLmFzc2VydChpLmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMubGVuZ3RoK3IubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBhY2NvdW50cyIpKXtsZXQgbz1pLmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMuY29uY2F0KHIpO2kuYXV0aG9yaXplZElzc3VpbmdBY2NvdW50cz1vLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGkpfX19fX0sYWN0aW9ucy5hZGRBdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1hc3luYyBlPT57bGV0e2NvbnRyYWN0czp0LHN5bWJvbDpzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTphfT1lO2lmKGFwaS5hc3NlcnQoITA9PT1hLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzJiYic3RyaW5nIj09dHlwZW9mIHMmJnQmJiJvYmplY3QiPT10eXBlb2YgdCYmQXJyYXkuaXNBcnJheSh0KSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydCh0Lmxlbmd0aDw9MTAsImNhbm5vdCBoYXZlIG1vcmUgdGhhbiAxMCBhdXRob3JpemVkIGlzc3VpbmcgY29udHJhY3RzIikpe2xldCBuPWlzVmFsaWRDb250cmFjdHNBcnJheSh0KTtpZihhcGkuYXNzZXJ0KG4sImludmFsaWQgY29udHJhY3QgbGlzdCIpKXtsZXQgaT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzfSk7aWYoaSl7bGV0IHI9W107aWYodC5mb3JFYWNoKGU9PntsZXQgdD1lLnRyaW0oKSxzPSExO2ZvcihsZXQgYT0wO2E8aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cy5sZW5ndGg7YSs9MSlpZih0PT09aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0c1thXSl7cz0hMDticmVha31zfHxyLnB1c2godCl9KSxhcGkuYXNzZXJ0KGkuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJmFwaS5hc3NlcnQoIWNvbnRhaW5zRHVwbGljYXRlcyhyKSwiY2Fubm90IGFkZCB0aGUgc2FtZSBjb250cmFjdCB0d2ljZSIpJiZhcGkuYXNzZXJ0KGkuYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMubGVuZ3RoK3IubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBjb250cmFjdHMiKSl7bGV0IG89aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cy5jb25jYXQocik7aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1vLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGkpfX19fX0sYWN0aW9ucy5yZW1vdmVBdXRob3JpemVkSXNzdWluZ0FjY291bnRzPWFzeW5jIGU9PntsZXR7YWNjb3VudHM6dCxzeW1ib2w6cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6YX09ZTtpZihhcGkuYXNzZXJ0KCEwPT09YSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQocyYmInN0cmluZyI9PXR5cGVvZiBzJiZ0JiYib2JqZWN0Ij09dHlwZW9mIHQmJkFycmF5LmlzQXJyYXkodCksImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQodC5sZW5ndGg8PTEwLCJjYW5ub3QgcmVtb3ZlIG1vcmUgdGhhbiAxMCBhdXRob3JpemVkIGlzc3VpbmcgYWNjb3VudHMiKSl7bGV0IG49aXNWYWxpZEFjY291bnRzQXJyYXkodCk7aWYoYXBpLmFzc2VydChuLCJpbnZhbGlkIGFjY291bnQgbGlzdCIpKXtsZXQgaT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzfSk7aWYoaSYmYXBpLmFzc2VydChpLmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpKXtsZXQgcj1pLmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMuZmlsdGVyKGU9Pntmb3IobGV0IHM9MDtzPHQubGVuZ3RoO3MrPTEpe2xldCBhPXRbc10udHJpbSgpLnRvTG93ZXJDYXNlKCk7aWYoZT09PWEpcmV0dXJuITF9cmV0dXJuITB9KTtpLmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHM9cixhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixpKX19fX0sYWN0aW9ucy5yZW1vdmVBdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1hc3luYyBlPT57bGV0e2NvbnRyYWN0czp0LHN5bWJvbDpzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTphfT1lO2lmKGFwaS5hc3NlcnQoITA9PT1hLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzJiYic3RyaW5nIj09dHlwZW9mIHMmJnQmJiJvYmplY3QiPT10eXBlb2YgdCYmQXJyYXkuaXNBcnJheSh0KSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydCh0Lmxlbmd0aDw9MTAsImNhbm5vdCByZW1vdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBjb250cmFjdHMiKSl7bGV0IG49aXNWYWxpZENvbnRyYWN0c0FycmF5KHQpO2lmKGFwaS5hc3NlcnQobiwiaW52YWxpZCBjb250cmFjdCBsaXN0Iikpe2xldCBpPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN9KTtpZihpJiZhcGkuYXNzZXJ0KGkuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2xldCByPWkuYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMuZmlsdGVyKGU9Pntmb3IobGV0IHM9MDtzPHQubGVuZ3RoO3MrPTEpe2xldCBhPXRbc10udHJpbSgpO2lmKGU9PT1hKXJldHVybiExfXJldHVybiEwfSk7aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1yLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGkpfX19fSxhY3Rpb25zLnRyYW5zZmVyT3duZXJzaGlwPWFzeW5jIGU9PntsZXR7c3ltYm9sOnQsdG86cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6YX09ZTtpZihhcGkuYXNzZXJ0KCEwPT09YSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQodCYmInN0cmluZyI9PXR5cGVvZiB0JiZzJiYic3RyaW5nIj09dHlwZW9mIHMsImludmFsaWQgcGFyYW1zIikpe2xldCBuPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnR9KTtpZihuJiZhcGkuYXNzZXJ0KG4uaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2xldCBpPXMudHJpbSgpLnRvTG93ZXJDYXNlKCk7YXBpLmFzc2VydChpc1ZhbGlkSGl2ZUFjY291bnRMZW5ndGgoaSksImludmFsaWQgdG8iKSYmKG4uaXNzdWVyPWksYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbikpfX19LGFjdGlvbnMuZW5hYmxlRGVsZWdhdGlvbj1hc3luYyBlPT57bGV0e3N5bWJvbDp0LHVuZGVsZWdhdGlvbkNvb2xkb3duOnMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmF9PWUsbj1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSkse2VuYWJsZURlbGVnYXRpb25GZWU6aX09bixyPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOiJCRUUifSksbz0hIWFwaS5CaWdOdW1iZXIoaSkubHRlKDApfHxyJiZhcGkuQmlnTnVtYmVyKHIuYmFsYW5jZSkuZ3RlKGkpO2lmKGFwaS5hc3NlcnQobywieW91IG11c3QgaGF2ZSBlbm91Z2ggdG9rZW5zIHRvIGNvdmVyIGZlZXMiKSYmYXBpLmFzc2VydCghMD09PWEsInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHQmJiJzdHJpbmciPT10eXBlb2YgdCwiaW52YWxpZCBzeW1ib2wiKSYmYXBpLmFzc2VydChzJiZOdW1iZXIuaXNJbnRlZ2VyKHMpJiZzPjAmJnM8PTE4MjUwLCJ1bmRlbGVnYXRpb25Db29sZG93biBtdXN0IGJlIGFuIGludGVnZXIgYmV0d2VlbiAxIGFuZCAxODI1MCIpKXtsZXQgbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDp0fSk7aWYoYXBpLmFzc2VydChudWxsIT09bCwic3ltYm9sIGRvZXMgbm90IGV4aXN0IikmJmFwaS5hc3NlcnQobC5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1sLmRlbGVnYXRpb25FbmFibGVkfHwhMT09PWwuZGVsZWdhdGlvbkVuYWJsZWQsImRlbGVnYXRpb24gYWxyZWFkeSBlbmFibGVkIikpe2lmKGFwaS5CaWdOdW1iZXIoaSkuZ3QoMCkpe2xldCBkPWF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOiJCRUUiLHF1YW50aXR5OmksaXNTaWduZWRXaXRoQWN0aXZlS2V5OmF9KTtpZighaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQoZCxhcGkuc2VuZGVyLCJudWxsIiwiQkVFIixpLCJ0cmFuc2ZlciIpKXJldHVybiExfXJldHVybiBsLmRlbGVnYXRpb25FbmFibGVkPSEwLGwudW5kZWxlZ2F0aW9uQ29vbGRvd249cyxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixsKSwhMH19cmV0dXJuITF9LGFjdGlvbnMudXBkYXRlUHJvcGVydHlEZWZpbml0aW9uPWFzeW5jIGU9PntsZXR7c3ltYm9sOnQsbmFtZTpzLG5ld05hbWU6YSx0eXBlOm4saXNSZWFkT25seTppLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTpyfT1lO2lmKGFwaS5hc3NlcnQoITA9PT1yLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCh0JiYic3RyaW5nIj09dHlwZW9mIHQmJnMmJiJzdHJpbmciPT10eXBlb2YgcywiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChhcGkudmFsaWRhdG9yLmlzQWxwaGFudW1lcmljKHMpJiZzLmxlbmd0aD4wJiZzLmxlbmd0aDw9MjUsImludmFsaWQgbmFtZTogbGV0dGVycyAmIG51bWJlcnMgb25seSwgbWF4IGxlbmd0aCBvZiAyNSIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWF8fCJzdHJpbmciPT10eXBlb2YgYSYmYXBpLnZhbGlkYXRvci5pc0FscGhhbnVtZXJpYyhhKSYmYS5sZW5ndGg+MCYmYS5sZW5ndGg8PTI1LCJpbnZhbGlkIG5ldyBuYW1lOiBsZXR0ZXJzICYgbnVtYmVycyBvbmx5LCBtYXggbGVuZ3RoIG9mIDI1IikmJmFwaS5hc3NlcnQodm9pZCAwPT09bnx8InN0cmluZyI9PXR5cGVvZiBuJiYoIm51bWJlciI9PT1ufHwic3RyaW5nIj09PW58fCJib29sZWFuIj09PW4pLCJpbnZhbGlkIHR5cGU6IG11c3QgYmUgbnVtYmVyLCBzdHJpbmcsIG9yIGJvb2xlYW4iKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1pfHwiYm9vbGVhbiI9PXR5cGVvZiBpLCJpbnZhbGlkIGlzUmVhZE9ubHk6IG11c3QgYmUgdHJ1ZSBvciBmYWxzZSIpKXtsZXQgbz1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDp0fSk7aWYobyYmYXBpLmFzc2VydCgwPT09by5zdXBwbHksImNhbm5vdCBjaGFuZ2UgZGF0YSBwcm9wZXJ0eSBkZWZpbml0aW9uOyB0b2tlbnMgYWxyZWFkeSBpc3N1ZWQiKSYmYXBpLmFzc2VydChzIGluIG8ucHJvcGVydGllcywicHJvcGVydHkgbXVzdCBleGlzdCIpJiZhcGkuYXNzZXJ0KG8uaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2lmKHZvaWQgMCE9PWEmJih2b2lkIDAhPT1vLmdyb3VwQnkmJm8uZ3JvdXBCeS5sZW5ndGg+MCYmIWFwaS5hc3NlcnQoIW8uZ3JvdXBCeS5pbmNsdWRlcyhzKSwiY2Fubm90IGNoYW5nZSBkYXRhIHByb3BlcnR5IG5hbWU7IHByb3BlcnR5IGlzIHBhcnQgb2YgZ3JvdXBCeSIpfHwhYXBpLmFzc2VydChhIT09cywibmV3IG5hbWUgbXVzdCBiZSBkaWZmZXJlbnQgZnJvbSBvbGQgbmFtZSIpfHwhYXBpLmFzc2VydCghKGEgaW4gby5wcm9wZXJ0aWVzKSwidGhlcmUgaXMgYWxyZWFkeSBhIGRhdGEgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4gbmV3IG5hbWUiKSkpcmV0dXJuITE7bGV0IGw9ITEsZD1vLnByb3BlcnRpZXNbc10udHlwZSx1PW8ucHJvcGVydGllc1tzXS5pc1JlYWRPbmx5O3JldHVybiB2b2lkIDAhPT1uJiZuIT09ZCYmKG8ucHJvcGVydGllc1tzXS50eXBlPW4sbD0hMCksdm9pZCAwIT09aSYmaSE9PXUmJihvLnByb3BlcnRpZXNbc10uaXNSZWFkT25seT1pLGw9ITApLHZvaWQgMCE9PWEmJmEhPT1zJiYoby5wcm9wZXJ0aWVzW2FdPW8ucHJvcGVydGllc1tzXSxkZWxldGUgby5wcm9wZXJ0aWVzW3NdLGw9ITApLGwmJihhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixvKSxhcGkuZW1pdCgidXBkYXRlUHJvcGVydHlEZWZpbml0aW9uIix7c3ltYm9sOnQsb3JpZ2luYWxOYW1lOnMsb3JpZ2luYWxUeXBlOmQsb3JpZ2luYWxJc1JlYWRPbmx5OnUsbmV3TmFtZTphLG5ld1R5cGU6bixuZXdJc1JlYWRPbmx5Oml9KSksITB9fXJldHVybiExfSxhY3Rpb25zLmFkZFByb3BlcnR5PWFzeW5jIGU9PntsZXR7c3ltYm9sOnQsbmFtZTpzLHR5cGU6YSxpc1JlYWRPbmx5Om4sYXV0aG9yaXplZEVkaXRpbmdBY2NvdW50czppLGF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzOnIsaXNTaWduZWRXaXRoQWN0aXZlS2V5Om99PWUsbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSkse2RhdGFQcm9wZXJ0eUNyZWF0aW9uRmVlOmR9PWw7aWYoYXBpLmFzc2VydCghMD09PW8sInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHQmJiJzdHJpbmciPT10eXBlb2YgdCYmcyYmInN0cmluZyI9PXR5cGVvZiBzJiYodm9pZCAwPT09bnx8ImJvb2xlYW4iPT10eXBlb2YgbikmJih2b2lkIDA9PT1pfHxpJiYib2JqZWN0Ij09dHlwZW9mIGkmJkFycmF5LmlzQXJyYXkoaSkpJiYodm9pZCAwPT09cnx8ciYmIm9iamVjdCI9PXR5cGVvZiByJiZBcnJheS5pc0FycmF5KHIpKSYmYSYmInN0cmluZyI9PXR5cGVvZiBhLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMocykmJnMubGVuZ3RoPjAmJnMubGVuZ3RoPD0yNSwiaW52YWxpZCBuYW1lOiBsZXR0ZXJzICYgbnVtYmVycyBvbmx5LCBtYXggbGVuZ3RoIG9mIDI1IikmJmFwaS5hc3NlcnQoIm51bWJlciI9PT1hfHwic3RyaW5nIj09PWF8fCJib29sZWFuIj09PWEsImludmFsaWQgdHlwZTogbXVzdCBiZSBudW1iZXIsIHN0cmluZywgb3IgYm9vbGVhbiIpKXtsZXQgdT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDp0fSk7aWYodSYmYXBpLmFzc2VydCghKHMgaW4gdS5wcm9wZXJ0aWVzKSwiY2Fubm90IGFkZCB0aGUgc2FtZSBwcm9wZXJ0eSB0d2ljZSIpJiZhcGkuYXNzZXJ0KHUuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2xldCBjPU9iamVjdC5rZXlzKHUucHJvcGVydGllcykubGVuZ3RoO2lmKGM+PTMpe2xldCBmPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOiJCRUUifSkscD0hIWFwaS5CaWdOdW1iZXIoZCkubHRlKDApfHxmJiZhcGkuQmlnTnVtYmVyKGYuYmFsYW5jZSkuZ3RlKGQpO2lmKCFhcGkuYXNzZXJ0KHAsInlvdSBtdXN0IGhhdmUgZW5vdWdoIHRva2VucyB0byBjb3ZlciB0aGUgY3JlYXRpb24gZmVlcyIpKXJldHVybiExO2lmKGFwaS5CaWdOdW1iZXIoZCkuZ3QoMCkpe2xldCBnPWF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOiJCRUUiLHF1YW50aXR5OmQsaXNTaWduZWRXaXRoQWN0aXZlS2V5Om99KTtpZighaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQoZyxhcGkuc2VuZGVyLCJudWxsIiwiQkVFIixkLCJ0cmFuc2ZlciIpKXJldHVybiExfX1sZXQgeT12b2lkIDAhPT1uJiZuLG09dm9pZCAwPT09aT9bYXBpLnNlbmRlcl06W10sJD17dHlwZTphLGlzUmVhZE9ubHk6eSxhdXRob3JpemVkRWRpdGluZ0FjY291bnRzOm0sYXV0aG9yaXplZEVkaXRpbmdDb250cmFjdHM6W119O3JldHVybiB1LnByb3BlcnRpZXNbc109JCxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIix1KSwoaXx8cikmJmF3YWl0IGFjdGlvbnMuc2V0UHJvcGVydHlQZXJtaXNzaW9ucyh7c3ltYm9sOnQsbmFtZTpzLGFjY291bnRzOmksY29udHJhY3RzOnIsaXNTaWduZWRXaXRoQWN0aXZlS2V5Om99KSwhMH19cmV0dXJuITF9LGFjdGlvbnMuc2V0UHJvcGVydHlQZXJtaXNzaW9ucz1hc3luYyBlPT57bGV0e3N5bWJvbDp0LG5hbWU6cyxhY2NvdW50czphLGNvbnRyYWN0czpuLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppfT1lO2lmKGFwaS5hc3NlcnQoITA9PT1pLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCh0JiYic3RyaW5nIj09dHlwZW9mIHQmJnMmJiJzdHJpbmciPT10eXBlb2YgcyYmKHZvaWQgMD09PWF8fGEmJiJvYmplY3QiPT10eXBlb2YgYSYmQXJyYXkuaXNBcnJheShhKSkmJih2b2lkIDA9PT1ufHxuJiYib2JqZWN0Ij09dHlwZW9mIG4mJkFycmF5LmlzQXJyYXkobikpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMocykmJnMubGVuZ3RoPjAmJnMubGVuZ3RoPD0yNSwiaW52YWxpZCBuYW1lOiBsZXR0ZXJzICYgbnVtYmVycyBvbmx5LCBtYXggbGVuZ3RoIG9mIDI1IikmJmFwaS5hc3NlcnQodm9pZCAwPT09YXx8YS5sZW5ndGg8PTEwLCJjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gMTAgYXV0aG9yaXplZCBhY2NvdW50cyIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PW58fG4ubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgY29udHJhY3RzIikmJmFwaS5hc3NlcnQodm9pZCAwPT09YXx8aXNWYWxpZEFjY291bnRzQXJyYXkoYSksImludmFsaWQgYWNjb3VudCBsaXN0IikmJmFwaS5hc3NlcnQodm9pZCAwPT09bnx8aXNWYWxpZENvbnRyYWN0c0FycmF5KG4pLCJpbnZhbGlkIGNvbnRyYWN0IGxpc3QiKSl7bGV0IHI9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6dH0pO2lmKHImJmFwaS5hc3NlcnQocyBpbiByLnByb3BlcnRpZXMsInByb3BlcnR5IG11c3QgZXhpc3QiKSYmYXBpLmFzc2VydChyLmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpKXtsZXQgbz1bXSxsPVtdO2lmKGEmJihvPWEubWFwKGU9PmUudHJpbSgpLnRvTG93ZXJDYXNlKCkpKSxuJiYobD1uLm1hcChlPT5lLnRyaW0oKSkpLGFwaS5hc3NlcnQodm9pZCAwPT09YXx8IWNvbnRhaW5zRHVwbGljYXRlcyhvKSwiY2Fubm90IGFkZCB0aGUgc2FtZSBhY2NvdW50IHR3aWNlIikmJmFwaS5hc3NlcnQodm9pZCAwPT09bnx8IWNvbnRhaW5zRHVwbGljYXRlcyhsKSwiY2Fubm90IGFkZCB0aGUgc2FtZSBjb250cmFjdCB0d2ljZSIpKXtsZXQgZD0hMTthJiYoci5wcm9wZXJ0aWVzW3NdLmF1dGhvcml6ZWRFZGl0aW5nQWNjb3VudHM9byxkPSEwKSxuJiYoci5wcm9wZXJ0aWVzW3NdLmF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzPWwsZD0hMCksZCYmYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIscil9fX19LGFjdGlvbnMuc2V0R3JvdXBCeT1hc3luYyBlPT57bGV0e3N5bWJvbDp0LHByb3BlcnRpZXM6cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6YX09ZTtpZihhcGkuYXNzZXJ0KCEwPT09YSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQodCYmInN0cmluZyI9PXR5cGVvZiB0JiZzJiYib2JqZWN0Ij09dHlwZW9mIHMmJkFycmF5LmlzQXJyYXkocyksImludmFsaWQgcGFyYW1zIikpe2xldCBuPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnR9KTtpZihuKXtsZXQgaT1PYmplY3Qua2V5cyhuLnByb3BlcnRpZXMpLmxlbmd0aDtpZihhcGkuYXNzZXJ0KG4uaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJmFwaS5hc3NlcnQodm9pZCAwPT09bi5ncm91cEJ5fHwwPT09bi5ncm91cEJ5Lmxlbmd0aCwibGlzdCBpcyBhbHJlYWR5IHNldCIpJiZhcGkuYXNzZXJ0KHMubGVuZ3RoPD1pLCJjYW5ub3Qgc2V0IG1vcmUgZGF0YSBwcm9wZXJ0aWVzIHRoYW4gTkZUIGhhcyIpJiZhcGkuYXNzZXJ0KCFjb250YWluc0R1cGxpY2F0ZXMocyksImxpc3QgY2Fubm90IGNvbnRhaW4gZHVwbGljYXRlcyIpKXtmb3IobGV0IHI9MDtyPHMubGVuZ3RoO3IrPTEpe2xldCBvPXNbcl07aWYoIWFwaS5hc3NlcnQobyYmInN0cmluZyI9PXR5cGVvZiBvJiZvIGluIG4ucHJvcGVydGllcywiZGF0YSBwcm9wZXJ0eSBtdXN0IGV4aXN0IikpcmV0dXJuITF9cmV0dXJuIG4uZ3JvdXBCeT1zLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLG4pLCEwfX19cmV0dXJuITF9LGFjdGlvbnMuc2V0UHJvcGVydGllcz1hc3luYyBlPT57bGV0e3N5bWJvbDp0LGZyb21UeXBlOnMsbmZ0czphLGNhbGxpbmdDb250cmFjdEluZm86bn09ZSxpPVsidXNlciIsImNvbnRyYWN0Il0scj12b2lkIDA9PT1zPyJ1c2VyIjpzO2lmKGFwaS5hc3NlcnQoYSYmIm9iamVjdCI9PXR5cGVvZiBhJiZBcnJheS5pc0FycmF5KGEpJiZyJiYic3RyaW5nIj09dHlwZW9mIHImJmkuaW5jbHVkZXMocikmJnQmJiJzdHJpbmciPT10eXBlb2YgdCYmKG58fHZvaWQgMD09PW4mJiJ1c2VyIj09PXIpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGEubGVuZ3RoPD01MCwiY2Fubm90IHNldCBwcm9wZXJ0aWVzIG9uIG1vcmUgdGhhbiA1MCBORlQgaW5zdGFuY2VzIGF0IG9uY2UiKSl7bGV0IG89InVzZXIiPT09cj9hcGkuc2VuZGVyOm4ubmFtZSxsPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnR9KTtpZihhcGkuYXNzZXJ0KG51bGwhPT1sLCJzeW1ib2wgZG9lcyBub3QgZXhpc3QiKSl7aWYoIWlzVmFsaWREYXRhUHJvcGVydGllc0FycmF5KG8scixsLGEpKXJldHVybiExO2xldCBkPXQrImluc3RhbmNlcyI7Zm9yKGxldCB1PTA7dTxhLmxlbmd0aDt1Kz0xKXtsZXR7aWQ6Yyxwcm9wZXJ0aWVzOmZ9PWFbdV07aWYoMD09PU9iamVjdC5rZXlzKGYpLmxlbmd0aCljb250aW51ZTtsZXQgcD1hd2FpdCBhcGkuZGIuZmluZE9uZShkLHtfaWQ6YXBpLkJpZ051bWJlcihjKS50b051bWJlcigpfSk7aWYoYXBpLmFzc2VydChudWxsIT09cCwibmZ0IGluc3RhbmNlIGRvZXMgbm90IGV4aXN0Iikpe2xldCBnPSExO2ZvcihsZXRbeSxtXW9mIE9iamVjdC5lbnRyaWVzKGYpKXtsZXQgJD1sLnByb3BlcnRpZXNbeV0saD1udWxsOyQuaXNSZWFkT25seT9hcGkuYXNzZXJ0KCEoeSBpbiBwLnByb3BlcnRpZXMpLCJjYW5ub3QgZWRpdCByZWFkLW9ubHkgcHJvcGVydGllcyIpJiYocC5wcm9wZXJ0aWVzW3ldPW0sZz0hMCk6KGg9cC5wcm9wZXJ0aWVzW3ldLHAucHJvcGVydGllc1t5XT1tLGc9ITApLGcmJmghPT1tJiZhd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoIm1pbmluZyIsImhhbmRsZU5mdFNldFByb3BlcnR5Iix7c3ltYm9sOnQsbmZ0OnAscHJvcGVydHlOYW1lOnksb2xkVmFsdWU6aH0pfWcmJmF3YWl0IGFwaS5kYi51cGRhdGUoZCxwKX19cmV0dXJuITB9fXJldHVybiExfSxhY3Rpb25zLmJ1cm49YXN5bmMgZT0+e2xldHtmcm9tVHlwZTp0LG5mdHM6cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6YSxjYWxsaW5nQ29udHJhY3RJbmZvOm59PWUsaT1bInVzZXIiLCJjb250cmFjdCJdLHI9dm9pZCAwPT09dD8idXNlciI6dDtpZihhcGkuYXNzZXJ0KCEwPT09YSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQociYmInN0cmluZyI9PXR5cGVvZiByJiZpLmluY2x1ZGVzKHIpJiYobnx8dm9pZCAwPT09biYmInVzZXIiPT09cikmJnMmJiJvYmplY3QiPT10eXBlb2YgcyYmQXJyYXkuaXNBcnJheShzKSwiaW52YWxpZCBwYXJhbXMiKSYmaXNWYWxpZE5mdElkQXJyYXkocykpe2xldCBvPSJ1c2VyIj09PXI/YXBpLnNlbmRlcjpuLm5hbWUsbD0wLGQ9MCx1PSExO2ZvcihsZXQgYz0wO2M8cy5sZW5ndGg7Yys9MSl7bGV0e3N5bWJvbDpmLGlkczpwfT1zW2NdLGc9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6Zn0pO2lmKGcpe2xldCB5PWYrImluc3RhbmNlcyI7Zm9yKGxldCBtPTA7bTxwLmxlbmd0aDttKz0xKXtsZXQgJD1wW21dLGg9YXdhaXQgYXBpLmRiLmZpbmRPbmUoeSx7X2lkOmFwaS5CaWdOdW1iZXIoJCkudG9OdW1iZXIoKX0pO2lmKGgpe2xldCBiPSEwO2lmKGgubG9ja2VkTmZ0cyYmaC5sb2NrZWROZnRzLmxlbmd0aD4wPygwPT09ZCYmKHU9ITApLCgobCs9MSk+MXx8IXUpJiYoYj0hMSkpOnUmJihiPSExKSxkKz0xLGguYWNjb3VudD09PW8mJigidSI9PT1oLm93bmVkQnkmJiJ1c2VyIj09PXJ8fCJjIj09PWgub3duZWRCeSYmImNvbnRyYWN0Ij09PXIpJiZ2b2lkIDA9PT1oLmRlbGVnYXRlZFRvJiZiKXtsZXQgdj17fSx3PSEwO2ZvcihsZXRbTixfXW9mIE9iamVjdC5lbnRyaWVzKGgubG9ja2VkVG9rZW5zKSl7bGV0IEE9YXdhaXQgYXBpLnRyYW5zZmVyVG9rZW5zKG8sTixfLHIpO2lzVG9rZW5UcmFuc2ZlclZlcmlmaWVkKEEsIm5mdCIsbyxOLF8sInRyYW5zZmVyRnJvbUNvbnRyYWN0Iil8fCh2W05dPV8sdz0hMSl9YXBpLmFzc2VydCh3LGB1bmFibGUgdG8gcmVsZWFzZSBsb2NrZWQgdG9rZW5zIGluOiAke2Z9LCBpZCAkeyR9YCk7bGV0IFQ9aC5sb2NrZWROZnRzJiZoLmxvY2tlZE5mdHMubGVuZ3RoPjA/aC5sb2NrZWROZnRzOltdO2lmKHcmJmgubG9ja2VkTmZ0cyYmaC5sb2NrZWROZnRzLmxlbmd0aD4wKXtsZXQgaz1hd2FpdCB0cmFuc2ZlckFuZFZlcmlmeU5mdHMoIm5mdCIsImNvbnRyYWN0IixvLHIsaC5sb2NrZWROZnRzLGEse25hbWU6Im5mdCJ9KTtoLmxvY2tlZE5mdHM9ay5mYWlsLGgubG9ja2VkTmZ0cy5sZW5ndGg+MCYmKHc9ITEpLGFwaS5hc3NlcnQodyxgdW5hYmxlIHRvIHJlbGVhc2UgbG9ja2VkIE5GVCBpbnN0YW5jZXMgaW46ICR7Zn0sIGlkICR7JH1gKX1sZXQgQj1oLm93bmVkQnksRT1oLmxvY2tlZFRva2VucztoLmxvY2tlZFRva2Vucz12LHcmJihoLnByZXZpb3VzQWNjb3VudD1oLmFjY291bnQsaC5wcmV2aW91c093bmVkQnk9aC5vd25lZEJ5LGguYWNjb3VudD0ibnVsbCIsaC5vd25lZEJ5PSJ1IixnLmNpcmN1bGF0aW5nU3VwcGx5LT0xKSxhd2FpdCBhcGkuZGIudXBkYXRlKHksaCksdyYmYXBpLmVtaXQoImJ1cm4iLHthY2NvdW50Om8sb3duZWRCeTpCLHVubG9ja2VkVG9rZW5zOkUsdW5sb2NrZWROZnRzOlQsc3ltYm9sOmYsaWQ6JH0pfX19YXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsZyl9fX19LGFjdGlvbnMudHJhbnNmZXI9YXN5bmMgZT0+e2xldHtmcm9tVHlwZTp0LHRvOnMsdG9UeXBlOmEsbmZ0czpuLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppLGNhbGxpbmdDb250cmFjdEluZm86cn09ZSxvPVsidXNlciIsImNvbnRyYWN0Il0sbD12b2lkIDA9PT1hPyJ1c2VyIjphLGQ9dm9pZCAwPT09dD8idXNlciI6dDtpZihhcGkuYXNzZXJ0KCEwPT09aSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoZCYmInN0cmluZyI9PXR5cGVvZiBkJiZvLmluY2x1ZGVzKGQpJiZzJiYic3RyaW5nIj09dHlwZW9mIHMmJmwmJiJzdHJpbmciPT10eXBlb2YgbCYmby5pbmNsdWRlcyhsKSYmKHJ8fHZvaWQgMD09PXImJiJ1c2VyIj09PWQpJiZuJiYib2JqZWN0Ij09dHlwZW9mIG4mJkFycmF5LmlzQXJyYXkobiksImludmFsaWQgcGFyYW1zIikmJmlzVmFsaWROZnRJZEFycmF5KG4pKXtsZXQgdT0idXNlciI9PT1sP3MudHJpbSgpLnRvTG93ZXJDYXNlKCk6cy50cmltKCksYz0idXNlciI9PT1sP2lzVmFsaWRIaXZlQWNjb3VudExlbmd0aCh1KTppc1ZhbGlkQ29udHJhY3RMZW5ndGgodSksZj0idXNlciI9PT1kP2FwaS5zZW5kZXI6ci5uYW1lO2lmKGFwaS5hc3NlcnQoYywiaW52YWxpZCB0byIpJiZhcGkuYXNzZXJ0KCEobD09PWQmJnU9PT1mKSwiY2Fubm90IHRyYW5zZmVyIHRvIHNlbGYiKSYmYXBpLmFzc2VydCghKCJ1c2VyIj09PWwmJiJudWxsIj09PXUpLCJjYW5ub3QgdHJhbnNmZXIgdG8gbnVsbDsgdXNlIGJ1cm4gYWN0aW9uIGluc3RlYWQiKSlmb3IobGV0IHA9MDtwPG4ubGVuZ3RoO3ArPTEpe2xldHtzeW1ib2w6ZyxpZHM6eX09bltwXSxtPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOmd9KTtpZihtKXtsZXQgJD1nKyJpbnN0YW5jZXMiO2ZvcihsZXQgaD0wO2g8eS5sZW5ndGg7aCs9MSl7bGV0IGI9eVtoXSx2PWF3YWl0IGFwaS5kYi5maW5kT25lKCQse19pZDphcGkuQmlnTnVtYmVyKGIpLnRvTnVtYmVyKCl9KTtpZih2JiZ2LmFjY291bnQ9PT1mJiYoInUiPT09di5vd25lZEJ5JiYidXNlciI9PT1kfHwiYyI9PT12Lm93bmVkQnkmJiJjb250cmFjdCI9PT1kKSYmdm9pZCAwPT09di5kZWxlZ2F0ZWRUbyYmIXYuc291bEJvdW5kKXtsZXQgdz12Lm93bmVkQnksTj0idXNlciI9PT1sPyJ1IjoiYyI7di5wcmV2aW91c0FjY291bnQ9di5hY2NvdW50LHYucHJldmlvdXNPd25lZEJ5PXYub3duZWRCeSx2LmFjY291bnQ9dSx2Lm93bmVkQnk9Tixhd2FpdCBhcGkuZGIudXBkYXRlKCQsdiksYXBpLmVtaXQoInRyYW5zZmVyIix7ZnJvbTpmLGZyb21UeXBlOncsdG86dSx0b1R5cGU6TixzeW1ib2w6ZyxpZDpifSl9fX19fX0sYWN0aW9ucy5kZWxlZ2F0ZT1hc3luYyBlPT57bGV0e2Zyb21UeXBlOnQsdG86cyx0b1R5cGU6YSxuZnRzOm4saXNTaWduZWRXaXRoQWN0aXZlS2V5OmksY2FsbGluZ0NvbnRyYWN0SW5mbzpyfT1lLG89WyJ1c2VyIiwiY29udHJhY3QiXSxsPXZvaWQgMD09PWE/InVzZXIiOmEsZD12b2lkIDA9PT10PyJ1c2VyIjp0O2lmKGFwaS5hc3NlcnQoITA9PT1pLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChkJiYic3RyaW5nIj09dHlwZW9mIGQmJm8uaW5jbHVkZXMoZCkmJnMmJiJzdHJpbmciPT10eXBlb2YgcyYmbCYmInN0cmluZyI9PXR5cGVvZiBsJiZvLmluY2x1ZGVzKGwpJiYocnx8dm9pZCAwPT09ciYmInVzZXIiPT09ZCkmJm4mJiJvYmplY3QiPT10eXBlb2YgbiYmQXJyYXkuaXNBcnJheShuKSwiaW52YWxpZCBwYXJhbXMiKSYmaXNWYWxpZE5mdElkQXJyYXkobikpe2xldCB1PSJ1c2VyIj09PWw/cy50cmltKCkudG9Mb3dlckNhc2UoKTpzLnRyaW0oKSxjPSJ1c2VyIj09PWw/aXNWYWxpZEhpdmVBY2NvdW50TGVuZ3RoKHUpOmlzVmFsaWRDb250cmFjdExlbmd0aCh1KSxmPSJ1c2VyIj09PWQ/YXBpLnNlbmRlcjpyLm5hbWU7aWYoYXBpLmFzc2VydChjLCJpbnZhbGlkIHRvIikmJmFwaS5hc3NlcnQoIShsPT09ZCYmdT09PWYpLCJjYW5ub3QgZGVsZWdhdGUgdG8gc2VsZiIpJiZhcGkuYXNzZXJ0KCEoInVzZXIiPT09bCYmIm51bGwiPT09dSksImNhbm5vdCBkZWxlZ2F0ZSB0byBudWxsIikpZm9yKGxldCBwPTA7cDxuLmxlbmd0aDtwKz0xKXtsZXR7c3ltYm9sOmcsaWRzOnl9PW5bcF0sbT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpnfSk7aWYobSYmYXBpLmFzc2VydCghMD09PW0uZGVsZWdhdGlvbkVuYWJsZWQsYGRlbGVnYXRpb24gbm90IGVuYWJsZWQgZm9yICR7Z31gKSl7bGV0ICQ9ZysiaW5zdGFuY2VzIjtmb3IobGV0IGg9MDtoPHkubGVuZ3RoO2grPTEpe2xldCBiPXlbaF0sdj1hd2FpdCBhcGkuZGIuZmluZE9uZSgkLHtfaWQ6YXBpLkJpZ051bWJlcihiKS50b051bWJlcigpfSk7aWYodiYmdi5hY2NvdW50PT09ZiYmKCJ1Ij09PXYub3duZWRCeSYmInVzZXIiPT09ZHx8ImMiPT09di5vd25lZEJ5JiYiY29udHJhY3QiPT09ZCkmJnZvaWQgMD09PXYuZGVsZWdhdGVkVG8pe2xldCB3PSJ1c2VyIj09PWw/InUiOiJjIixOPXthY2NvdW50OnUsb3duZWRCeTp3fTt2LmRlbGVnYXRlZFRvPU4sYXdhaXQgYXBpLmRiLnVwZGF0ZSgkLHYpLGFwaS5lbWl0KCJkZWxlZ2F0ZSIse2Zyb206Zixmcm9tVHlwZTp2Lm93bmVkQnksdG86dSx0b1R5cGU6dyxzeW1ib2w6ZyxpZDpifSksYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJtaW5pbmciLCJoYW5kbGVOZnREZWxlZ2F0aW9uQ2hhbmdlIix7c3ltYm9sOmcsbmZ0OnYsYWRkOiEwfSl9fX19fX0sYWN0aW9ucy51bmRlbGVnYXRlPWFzeW5jIGU9PntsZXR7ZnJvbVR5cGU6dCxuZnRzOnMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmEsY2FsbGluZ0NvbnRyYWN0SW5mbzpufT1lLGk9WyJ1c2VyIiwiY29udHJhY3QiXSxyPXZvaWQgMD09PXQ/InVzZXIiOnQ7aWYoYXBpLmFzc2VydCghMD09PWEsInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHImJiJzdHJpbmciPT10eXBlb2YgciYmaS5pbmNsdWRlcyhyKSYmKG58fHZvaWQgMD09PW4mJiJ1c2VyIj09PXIpJiZzJiYib2JqZWN0Ij09dHlwZW9mIHMmJkFycmF5LmlzQXJyYXkocyksImludmFsaWQgcGFyYW1zIikmJmlzVmFsaWROZnRJZEFycmF5KHMpKXtsZXQgbz0idXNlciI9PT1yP2FwaS5zZW5kZXI6bi5uYW1lLGw9bmV3IERhdGUoYCR7YXBpLmhpdmVCbG9ja1RpbWVzdGFtcH0uMDAwWmApO2ZvcihsZXQgZD0wO2Q8cy5sZW5ndGg7ZCs9MSl7bGV0e3N5bWJvbDp1LGlkczpjfT1zW2RdLGY9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6dX0pO2lmKGYmJmFwaS5hc3NlcnQoITA9PT1mLmRlbGVnYXRpb25FbmFibGVkLGBkZWxlZ2F0aW9uIG5vdCBlbmFibGVkIGZvciAke3V9YCkpe2xldCBwPTg2NGU1KmYudW5kZWxlZ2F0aW9uQ29vbGRvd24sZz1sLmdldFRpbWUoKStwLHk9dSsiaW5zdGFuY2VzIixtPXtzeW1ib2w6dSxpZHM6W10sY29tcGxldGVUaW1lc3RhbXA6Z307Zm9yKGxldCAkPTA7JDxjLmxlbmd0aDskKz0xKXtsZXQgaD1jWyRdLGI9YXdhaXQgYXBpLmRiLmZpbmRPbmUoeSx7X2lkOmFwaS5CaWdOdW1iZXIoaCkudG9OdW1iZXIoKX0pO2ImJmIuYWNjb3VudD09PW8mJigidSI9PT1iLm93bmVkQnkmJiJ1c2VyIj09PXJ8fCJjIj09PWIub3duZWRCeSYmImNvbnRyYWN0Ij09PXIpJiZiLmRlbGVnYXRlZFRvJiZ2b2lkIDA9PT1iLmRlbGVnYXRlZFRvLnVuZGVsZWdhdGVBdCYmKGIuZGVsZWdhdGVkVG8udW5kZWxlZ2F0ZUF0PWcsbS5pZHMucHVzaChiLl9pZCksYXdhaXQgYXBpLmRiLnVwZGF0ZSh5LGIpLGFwaS5lbWl0KCJ1bmRlbGVnYXRlU3RhcnQiLHtmcm9tOmIuZGVsZWdhdGVkVG8uYWNjb3VudCxmcm9tVHlwZTpiLmRlbGVnYXRlZFRvLm93bmVkQnksc3ltYm9sOnUsaWQ6aH0pLGF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgibWluaW5nIiwiaGFuZGxlTmZ0RGVsZWdhdGlvbkNoYW5nZSIse3N5bWJvbDp1LG5mdDpiLGFkZDohMX0pKX1tLmlkcy5sZW5ndGg+MCYmYXdhaXQgYXBpLmRiLmluc2VydCgicGVuZGluZ1VuZGVsZWdhdGlvbnMiLG0pfX19fTtjb25zdCBwcm9jZXNzVW5kZWxlZ2F0aW9uPWFzeW5jIGU9PntsZXR7c3ltYm9sOnQsaWRzOnN9PWUsYT10KyJpbnN0YW5jZXMiLG49YXdhaXQgYXBpLmRiLmZpbmQoYSx7X2lkOnskaW46c319LDUwLDAsW3tpbmRleDoiX2lkIixkZXNjZW5kaW5nOiExfV0pO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSs9MSlkZWxldGUgbltpXS5kZWxlZ2F0ZWRUbyxhd2FpdCBhcGkuZGIudXBkYXRlKGEsbltpXSx7ZGVsZWdhdGVkVG86IiJ9KTthd2FpdCBhcGkuZGIucmVtb3ZlKCJwZW5kaW5nVW5kZWxlZ2F0aW9ucyIsZSksYXBpLmVtaXQoInVuZGVsZWdhdGVEb25lIix7c3ltYm9sOnQsaWRzOnN9KX07YWN0aW9ucy5jaGVja1BlbmRpbmdVbmRlbGVnYXRpb25zPWFzeW5jKCk9PntpZihhcGkuYXNzZXJ0KCJudWxsIj09PWFwaS5zZW5kZXIsIm5vdCBhdXRob3JpemVkIikpe2xldCBlPW5ldyBEYXRlKGAke2FwaS5oaXZlQmxvY2tUaW1lc3RhbXB9LjAwMFpgKSx0PWUuZ2V0VGltZSgpLHM9YXdhaXQgYXBpLmRiLmZpbmQoInBlbmRpbmdVbmRlbGVnYXRpb25zIix7Y29tcGxldGVUaW1lc3RhbXA6eyRsdGU6dH19KSxhPXMubGVuZ3RoO2Zvcig7YT4wOyl7Zm9yKGxldCBuPTA7bjxhO24rPTEpe2xldCBpPXNbbl07YXdhaXQgcHJvY2Vzc1VuZGVsZWdhdGlvbihpKX1hPShzPWF3YWl0IGFwaS5kYi5maW5kKCJwZW5kaW5nVW5kZWxlZ2F0aW9ucyIse2NvbXBsZXRlVGltZXN0YW1wOnskbHRlOnR9fSkpLmxlbmd0aH19fSxhY3Rpb25zLmNyZWF0ZT1hc3luYyBlPT57bGV0e25hbWU6dCxvcmdOYW1lOnMscHJvZHVjdE5hbWU6YSxzeW1ib2w6bix1cmw6aSxtYXhTdXBwbHk6cixhdXRob3JpemVkSXNzdWluZ0FjY291bnRzOm8sYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHM6bCxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6ZH09ZSx1PWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KSx7bmZ0Q3JlYXRpb25GZWU6Y309dSxmPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOiJCRUUifSkscD0hIWFwaS5CaWdOdW1iZXIoYykubHRlKDApfHxmJiZhcGkuQmlnTnVtYmVyKGYuYmFsYW5jZSkuZ3RlKGMpO2lmKGFwaS5hc3NlcnQocCwieW91IG11c3QgaGF2ZSBlbm91Z2ggdG9rZW5zIHRvIGNvdmVyIHRoZSBjcmVhdGlvbiBmZWVzIikmJmFwaS5hc3NlcnQoITA9PT1kLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCh0JiYic3RyaW5nIj09dHlwZW9mIHQmJm4mJiJzdHJpbmciPT10eXBlb2YgbiYmKHZvaWQgMD09PWl8fGkmJiJzdHJpbmciPT10eXBlb2YgaSkmJih2b2lkIDA9PT1zfHxzJiYic3RyaW5nIj09dHlwZW9mIHMpJiYodm9pZCAwPT09YXx8YSYmInN0cmluZyI9PXR5cGVvZiBhKSYmKHZvaWQgMD09PW98fG8mJiJvYmplY3QiPT10eXBlb2YgbyYmQXJyYXkuaXNBcnJheShvKSkmJih2b2lkIDA9PT1sfHxsJiYib2JqZWN0Ij09dHlwZW9mIGwmJkFycmF5LmlzQXJyYXkobCkpJiYodm9pZCAwPT09cnx8ciYmInN0cmluZyI9PXR5cGVvZiByJiYhYXBpLkJpZ051bWJlcihyKS5pc05hTigpKSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChhcGkudmFsaWRhdG9yLmlzQWxwaGEobikmJmFwaS52YWxpZGF0b3IuaXNVcHBlcmNhc2UobikmJm4ubGVuZ3RoPjAmJm4ubGVuZ3RoPD0xMCwiaW52YWxpZCBzeW1ib2w6IHVwcGVyY2FzZSBsZXR0ZXJzIG9ubHksIG1heCBsZW5ndGggb2YgMTAiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1SRVNFUlZFRF9TWU1CT0xTW25dfHxhcGkuc2VuZGVyPT09UkVTRVJWRURfU1lNQk9MU1tuXSwiY2Fubm90IHVzZSB0aGlzIHN5bWJvbCIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QodCwiICIpKSYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PTUwLCJpbnZhbGlkIG5hbWU6IGxldHRlcnMsIG51bWJlcnMsIHdoaXRlc3BhY2VzIG9ubHksIG1heCBsZW5ndGggb2YgNTAiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1zfHxhcGkudmFsaWRhdG9yLmlzQWxwaGFudW1lcmljKGFwaS52YWxpZGF0b3IuYmxhY2tsaXN0KHMsIiAiKSkmJnMubGVuZ3RoPjAmJnMubGVuZ3RoPD01MCwiaW52YWxpZCBvcmcgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWF8fGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QoYSwiICIpKSYmYS5sZW5ndGg+MCYmYS5sZW5ndGg8PTUwLCJpbnZhbGlkIHByb2R1Y3QgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWl8fGkubGVuZ3RoPD0yNTUsImludmFsaWQgdXJsOiBtYXggbGVuZ3RoIG9mIDI1NSIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PXJ8fGFwaS5CaWdOdW1iZXIocikuZ3QoMCksIm1heFN1cHBseSBtdXN0IGJlIHBvc2l0aXZlIikmJmFwaS5hc3NlcnQodm9pZCAwPT09cnx8YXBpLkJpZ051bWJlcihyKS5sdGUoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLGBtYXhTdXBwbHkgbXVzdCBiZSBsb3dlciB0aGFuICR7TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJ9YCkpe2xldCBnPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOm59KTtpZihhcGkuYXNzZXJ0KG51bGw9PT1nLCJzeW1ib2wgYWxyZWFkeSBleGlzdHMiKSl7aWYoYXBpLkJpZ051bWJlcihjKS5ndCgwKSl7bGV0IHk9YXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlciIse3RvOiJudWxsIixzeW1ib2w6IkJFRSIscXVhbnRpdHk6Yyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6ZH0pO2lmKCFpc1Rva2VuVHJhbnNmZXJWZXJpZmllZCh5LGFwaS5zZW5kZXIsIm51bGwiLCJCRUUiLGMsInRyYW5zZmVyIikpcmV0dXJuITF9bGV0IG09dm9pZCAwPT09cj8wOmFwaS5CaWdOdW1iZXIocikuaW50ZWdlclZhbHVlKGFwaS5CaWdOdW1iZXIuUk9VTkRfRE9XTikudG9OdW1iZXIoKSwkPXZvaWQgMD09PXM/IiI6cyxoPXZvaWQgMD09PWE/IiI6YSxiPXZvaWQgMD09PWk/IiI6aSx2PXt1cmw6Yn07dj1KU09OLnN0cmluZ2lmeSh2KTtsZXQgdz12b2lkIDA9PT1vP1thcGkuc2VuZGVyXTpbXSxOPXtpc3N1ZXI6YXBpLnNlbmRlcixzeW1ib2w6bixuYW1lOnQsb3JnTmFtZTokLHByb2R1Y3ROYW1lOmgsbWV0YWRhdGE6dixtYXhTdXBwbHk6bSxzdXBwbHk6MCxjaXJjdWxhdGluZ1N1cHBseTowLGRlbGVnYXRpb25FbmFibGVkOiExLHVuZGVsZWdhdGlvbkNvb2xkb3duOjAsYXV0aG9yaXplZElzc3VpbmdBY2NvdW50czp3LGF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzOltdLHByb3BlcnRpZXM6e30sZ3JvdXBCeTpbXX0sXz1uKyJpbnN0YW5jZXMiLEE9YXdhaXQgYXBpLmRiLnRhYmxlRXhpc3RzKF8pO3JldHVybiExPT09QSYmYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKF8sWyJhY2NvdW50Iiwib3duZWRCeSJdKSxhd2FpdCBhcGkuZGIuaW5zZXJ0KCJuZnRzIixOKSx2b2lkIDAhPT1vJiZhd2FpdCBhY3Rpb25zLmFkZEF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMoe2FjY291bnRzOm8sc3ltYm9sOm4saXNTaWduZWRXaXRoQWN0aXZlS2V5OmR9KSx2b2lkIDAhPT1sJiZhd2FpdCBhY3Rpb25zLmFkZEF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzKHtjb250cmFjdHM6bCxzeW1ib2w6bixpc1NpZ25lZFdpdGhBY3RpdmVLZXk6ZH0pLCEwfX1yZXR1cm4hMX0sYWN0aW9ucy5pc3N1ZT1hc3luYyBlPT57bGV0e3N5bWJvbDp0LGZyb21UeXBlOnMsdG86YSx0b1R5cGU6bixmZWVTeW1ib2w6aSxsb2NrVG9rZW5zOnIsbG9ja05mdHM6byxzb3VsQm91bmQ6bCxwcm9wZXJ0aWVzOmQsaXNTaWduZWRXaXRoQWN0aXZlS2V5OnUsY2FsbGluZ0NvbnRyYWN0SW5mbzpjfT1lLGY9WyJ1c2VyIiwiY29udHJhY3QiXSxwPXZvaWQgMD09PW4/InVzZXIiOm4sZz12b2lkIDA9PT1zPyJ1c2VyIjpzLHk9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pLHtuZnRJc3N1YW5jZUZlZTptfT15O2lmKGFwaS5hc3NlcnQoITA9PT11LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCh0JiYic3RyaW5nIj09dHlwZW9mIHQmJmcmJiJzdHJpbmciPT10eXBlb2YgZyYmZi5pbmNsdWRlcyhnKSYmKGN8fHZvaWQgMD09PWMmJiJ1c2VyIj09PWcpJiZhJiYic3RyaW5nIj09dHlwZW9mIGEmJnAmJiJzdHJpbmciPT10eXBlb2YgcCYmZi5pbmNsdWRlcyhwKSYmaSYmInN0cmluZyI9PXR5cGVvZiBpJiZpIGluIG0mJih2b2lkIDA9PT1kfHxkJiYib2JqZWN0Ij09dHlwZW9mIGQpJiYodm9pZCAwPT09cnx8ciYmIm9iamVjdCI9PXR5cGVvZiByKSYmKHZvaWQgMD09PW98fG8mJiJvYmplY3QiPT10eXBlb2YgbyYmQXJyYXkuaXNBcnJheShvKSkmJih2b2lkIDA9PT1sfHxsJiYiYm9vbGVhbiI9PXR5cGVvZiBsKSwiaW52YWxpZCBwYXJhbXMiKSYmKHZvaWQgMD09PW98fGlzVmFsaWROZnRJZEFycmF5KG8pKSl7bGV0ICQ9InVzZXIiPT09cD9hLnRyaW0oKS50b0xvd2VyQ2FzZSgpOmEudHJpbSgpLGg9InVzZXIiPT09cD9pc1ZhbGlkSGl2ZUFjY291bnRMZW5ndGgoJCk6aXNWYWxpZENvbnRyYWN0TGVuZ3RoKCQpLGI9InVzZXIiPT09Zz9hcGkuc2VuZGVyOmMubmFtZSx2PSJ1c2VyIj09PWc/ImJhbGFuY2VzIjoiY29udHJhY3RzQmFsYW5jZXMiO2lmKGFwaS5hc3NlcnQoaCwiaW52YWxpZCB0byIpKXtsZXQgdz1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDp0fSksTj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDppfSk7aWYoYXBpLmFzc2VydChudWxsIT09dywic3ltYm9sIGRvZXMgbm90IGV4aXN0IikmJmFwaS5hc3NlcnQobnVsbCE9PU4sImZlZSBzeW1ib2wgZG9lcyBub3QgZXhpc3QiKSl7bGV0IF89dCsiaW5zdGFuY2VzIjtpZihhcGkuYXNzZXJ0KCJjb250cmFjdCI9PT1nJiZ3LmF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzLmluY2x1ZGVzKGIpfHwidXNlciI9PT1nJiZ3LmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMuaW5jbHVkZXMoYiksIm5vdCBhbGxvd2VkIHRvIGlzc3VlIHRva2VucyIpJiZhcGkuYXNzZXJ0KDA9PT13Lm1heFN1cHBseXx8dy5zdXBwbHk8dy5tYXhTdXBwbHksIm1heCBzdXBwbHkgbGltaXQgcmVhY2hlZCIpKXtsZXQgQT1PYmplY3Qua2V5cyh3LnByb3BlcnRpZXMpLmxlbmd0aCxUPWFwaS5CaWdOdW1iZXIobVtpXSkubXVsdGlwbGllZEJ5KEEpLGs9Y2FsY3VsYXRlQmFsYW5jZShtW2ldLFQsTi5wcmVjaXNpb24sITApLEI9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLHYse2FjY291bnQ6YixzeW1ib2w6aX0pLEU9ISFhcGkuQmlnTnVtYmVyKGspLmx0ZSgwKXx8QiYmYXBpLkJpZ051bWJlcihCLmJhbGFuY2UpLmd0ZShrKTtpZihyKXtsZXQgTz1hd2FpdCBpc1ZhbGlkVG9rZW5CYXNrZXQocix2LGIsaSxrKTtpZighYXBpLmFzc2VydChPLCJpbnZhbGlkIGJhc2tldCBvZiB0b2tlbnMgdG8gbG9jayAoY2Fubm90IGxvY2sgbW9yZSB0aGFuIDEwIHRva2VuIHR5cGVzOyBpc3N1aW5nIGFjY291bnQgbXVzdCBoYXZlIGVub3VnaCBiYWxhbmNlKSIpKXJldHVybiExfWxldCBDPXt9O2lmKHZvaWQgMCE9PWQpe3RyeXtpZighaXNWYWxpZERhdGFQcm9wZXJ0aWVzKGIsZyx3LGQpKXJldHVybiExfWNhdGNoKEkpe3JldHVybiExfUM9ZH1pZihhcGkuYXNzZXJ0KEUsInlvdSBtdXN0IGhhdmUgZW5vdWdoIHRva2VucyB0byBjb3ZlciB0aGUgaXNzdWFuY2UgZmVlcyIpKXtpZihhcGkuQmlnTnVtYmVyKGspLmd0KDApKXtpZigiY29udHJhY3QiPT09Zyl7bGV0IFM9YXdhaXQgYXBpLnRyYW5zZmVyVG9rZW5zRnJvbUNhbGxpbmdDb250cmFjdCgibnVsbCIsaSxrLCJ1c2VyIik7aWYoIWFwaS5hc3NlcnQoaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQoUyxiLCJudWxsIixpLGssInRyYW5zZmVyRnJvbUNvbnRyYWN0IiksInVuYWJsZSB0byB0cmFuc2ZlciBpc3N1YW5jZSBmZWUiKSlyZXR1cm4hMX1lbHNle2xldCBWPWF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOmkscXVhbnRpdHk6ayxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6dX0pO2lmKCFhcGkuYXNzZXJ0KGlzVG9rZW5UcmFuc2ZlclZlcmlmaWVkKFYsYiwibnVsbCIsaSxrLCJ0cmFuc2ZlciIpLCJ1bmFibGUgdG8gdHJhbnNmZXIgaXNzdWFuY2UgZmVlIikpcmV0dXJuITF9fWxldCB4PXt9O2lmKHIpZm9yKGxldFtqLExdb2YgT2JqZWN0LmVudHJpZXMocikpaWYoImNvbnRyYWN0Ij09PWcpe2xldCB6PWF3YWl0IGFwaS50cmFuc2ZlclRva2Vuc0Zyb21DYWxsaW5nQ29udHJhY3QoIm5mdCIsaixMLCJjb250cmFjdCIpO2lzVG9rZW5UcmFuc2ZlclZlcmlmaWVkKHosYiwibmZ0IixqLEwsInRyYW5zZmVyRnJvbUNvbnRyYWN0IikmJih4W2pdPUwpfWVsc2V7bGV0IFI9YXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlclRvQ29udHJhY3QiLHt0bzoibmZ0IixzeW1ib2w6aixxdWFudGl0eTpMLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTp1fSk7aXNUb2tlblRyYW5zZmVyVmVyaWZpZWQoUixiLCJuZnQiLGosTCwidHJhbnNmZXJUb0NvbnRyYWN0IikmJih4W2pdPUwpfWxldCBGPVtdO2lmKG8mJm8ubGVuZ3RoPjApe2xldCBEPWF3YWl0IHRyYW5zZmVyQW5kVmVyaWZ5TmZ0cyhiLGcsIm5mdCIsImNvbnRyYWN0IixvLHUsYyk7Rj1ELnN1Y2Nlc3N9bGV0IE09InVzZXIiPT09cD8idSI6ImMiLFA9e307UD1GLmxlbmd0aD4wP3thY2NvdW50OiQsc291bEJvdW5kOmwsb3duZWRCeTpNLGxvY2tlZFRva2Vuczp4LGxvY2tlZE5mdHM6Rixwcm9wZXJ0aWVzOkN9OnthY2NvdW50OiQsc291bEJvdW5kOmwsb3duZWRCeTpNLGxvY2tlZFRva2Vuczp4LHByb3BlcnRpZXM6Q307bGV0IFU9YXdhaXQgYXBpLmRiLmluc2VydChfLFApO3JldHVybiB3LnN1cHBseSs9MSwoIm51bGwiIT09JHx8ImNvbnRyYWN0Ij09PXApJiYody5jaXJjdWxhdGluZ1N1cHBseSs9MSksYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsdyksYXBpLmVtaXQoImlzc3VlIix7ZnJvbTpiLGZyb21UeXBlOmcsdG86JCx0b1R5cGU6cCxzeW1ib2w6dCxsb2NrZWRUb2tlbnM6eCxsb2NrZWROZnRzOkYsc291bEJvdW5kOiEhbCxwcm9wZXJ0aWVzOkMsaWQ6VS5faWR9KSwhMH19fX19cmV0dXJuITF9LGFjdGlvbnMuaXNzdWVNdWx0aXBsZT1hc3luYyBlPT57bGV0e2luc3RhbmNlczp0LGlzU2lnbmVkV2l0aEFjdGl2ZUtleTpzLGNhbGxpbmdDb250cmFjdEluZm86YX09ZTtpZihhcGkuYXNzZXJ0KCEwPT09cywieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQodCYmIm9iamVjdCI9PXR5cGVvZiB0JiZBcnJheS5pc0FycmF5KHQpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KHQubGVuZ3RoPD0xMCwiY2Fubm90IGlzc3VlIG1vcmUgdGhhbiAxMCBORlQgaW5zdGFuY2VzIGF0IG9uY2UiKSl7bGV0IG49MDtpZih0LmZvckVhY2goZT0+e2UubG9ja05mdHMmJihuKz0xKX0pLGFwaS5hc3NlcnQobjw9MSwiY2Fubm90IGlzc3VlIG1vcmUgdGhhbiAxIGNvbnRhaW5lciBORlQgaW5zdGFuY2VzIGF0IG9uY2UiKSYmYXBpLmFzc2VydCgwPT09bnx8bj09PXQubGVuZ3RoLCJjYW5ub3QgaXNzdWUgYSBtaXggb2YgY29udGFpbmVyIGFuZCBub24tY29udGFpbmVyIE5GVCBpbnN0YW5jZXMgc2ltdWx0YW5lb3VzbHkiKSlmb3IobGV0IGk9MDtpPHQubGVuZ3RoO2krPTEpe2xldHtzeW1ib2w6cixmcm9tVHlwZTpvLHRvOmwsdG9UeXBlOmQsZmVlU3ltYm9sOnUsbG9ja1Rva2VuczpjLHNvdWxCb3VuZDpmLGxvY2tOZnRzOnAscHJvcGVydGllczpnfT10W2ldO2F3YWl0IGFjdGlvbnMuaXNzdWUoe3N5bWJvbDpyLGZyb21UeXBlOm8sdG86bCx0b1R5cGU6ZCxmZWVTeW1ib2w6dSxsb2NrVG9rZW5zOmMsc291bEJvdW5kOmYsbG9ja05mdHM6cCxwcm9wZXJ0aWVzOmcsaXNTaWduZWRXaXRoQWN0aXZlS2V5OnMsY2FsbGluZ0NvbnRyYWN0SW5mbzphfSl9fX07"}}}
{"id":"ssc-testnet-hive","json":{"contractName":"contract","contractAction":"update","contractPayload":{"name":"nft","params":"","code":"Y29uc3QgQ09OVFJBQ1RfTkFNRT0ibmZ0IixVVElMSVRZX1RPS0VOX1NZTUJPTD0iQkVFIixNQVhfTlVNX0FVVEhPUklaRURfSVNTVUVSUz0xMCxNQVhfTlVNX0xPQ0tFRF9UT0tFTl9UWVBFUz0xMCxNQVhfU1lNQk9MX0xFTkdUSD0xMCxNQVhfREFUQV9QUk9QRVJUWV9MRU5HVEg9MTAwLE1BWF9OVU1fTkZUU19JU1NVQUJMRT0xMCxNQVhfTlVNX05GVFNfRURJVEFCTEU9NTAsTUFYX05VTV9ORlRTX09QRVJBQkxFPTUwLE1BWF9OVU1fQ09OVEFJTkVSX05GVFNfT1BFUkFCTEU9MSxSRVNFUlZFRF9TWU1CT0xTPXtDRUxMOiJiZWdnYXJzIixRVVNUOiJzaW1wbGVnYW1lIixURVNURVJBOiJhZ2dyb2VkIixTUVJMOiJzdHVmZmJ5c3BlbmNlciIsQ1JBRlQ6ImltbWFudWVsOTQiLE1VU0lDOiJhdG9tY29sbGVjdG9yIixDR1VMTDoiY2d1bGwiLE5GVDoiY2FkYXdnIixSQVJFOiJiZWdnYXJzIixMSUM6ImxpY3Rva2VuIixNRU1CRVI6Im1lbWJlcnRva2VuIixDT0ZGRUU6ImMwZmYzM2EiLEFSVDoiYnlvIixST0NLOiJiZWdnYXJzIixDUklUVEVSOiJjcnlwdG9tYW5jZXIiLENJVFk6ImdlcmJlciIsTU9OU1RFUlM6InNpbXBsZWdhbWUiLFNFVFM6Imxvb3RraXQuZ2FtZXMiLEFOSU1FOiJhbmltZXRva2VuIixQSE9UT0ZUOiJ3d3dpZWJlIixCRUVSOiJkZXRsZXYiLFNQSVI6InNwaW52ZXN0IixJRkc6Imxpb24yMDAiLEdVSUxEUzoic2ltcGxlZ2FtZSIsRkNBUkQ6Imxpb24yMDAiLFBYTDoicGl4ZWxuZnQiLENPVzoic3R1ZmZieXNwZW5jZXIiLExPT09UOiJzdHVmZmJ5c3BlbmNlciIsQVBJOiJzdGVlbWNpdHlhcGkiLFNQT1JUU01PTToic3BvcnRzdGVzdGVyIixTV1Q6InNhdHJlbiIsU1RBUjoiYXRvbWNvbGxlY3RvciJ9O2FjdGlvbnMuY3JlYXRlU1NDPWFzeW5jKCk9PntsZXQgZT1hd2FpdCBhcGkuZGIudGFibGVFeGlzdHMoIm5mdHMiKTtpZighMT09PWUpe2F3YWl0IGFwaS5kYi5jcmVhdGVUYWJsZSgibmZ0cyIsWyJzeW1ib2wiXSksYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCJwYXJhbXMiKSxhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoInBlbmRpbmdVbmRlbGVnYXRpb25zIixbInN5bWJvbCIsImNvbXBsZXRlVGltZXN0YW1wIl0pO2xldCB0PXt9O3QubmZ0Q3JlYXRpb25GZWU9IjEwMCIsdC5uZnRJc3N1YW5jZUZlZT17QkVFOiIwLjAwMSIsUEFMOiIwLjAwMSJ9LHQuZGF0YVByb3BlcnR5Q3JlYXRpb25GZWU9IjEwMCIsdC5lbmFibGVEZWxlZ2F0aW9uRmVlPSIxMDAwIixhd2FpdCBhcGkuZGIuaW5zZXJ0KCJwYXJhbXMiLHQpfX0sYWN0aW9ucy51cGRhdGVQYXJhbXM9YXN5bmMgZT0+e2lmKGFwaS5zZW5kZXIhPT1hcGkub3duZXIpcmV0dXJuO2xldHtuZnRDcmVhdGlvbkZlZTp0LG5mdElzc3VhbmNlRmVlOnMsZGF0YVByb3BlcnR5Q3JlYXRpb25GZWU6YSxlbmFibGVEZWxlZ2F0aW9uRmVlOm59PWUsaT1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSk7dCYmInN0cmluZyI9PXR5cGVvZiB0JiYhYXBpLkJpZ051bWJlcih0KS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKHQpLmd0ZSgwKSYmKGkubmZ0Q3JlYXRpb25GZWU9dCkscyYmIm9iamVjdCI9PXR5cGVvZiBzJiYoaS5uZnRJc3N1YW5jZUZlZT1zKSxhJiYic3RyaW5nIj09dHlwZW9mIGEmJiFhcGkuQmlnTnVtYmVyKGEpLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIoYSkuZ3RlKDApJiYoaS5kYXRhUHJvcGVydHlDcmVhdGlvbkZlZT1hKSxuJiYic3RyaW5nIj09dHlwZW9mIG4mJiFhcGkuQmlnTnVtYmVyKG4pLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIobikuZ3RlKDApJiYoaS5lbmFibGVEZWxlZ2F0aW9uRmVlPW4pLGF3YWl0IGFwaS5kYi51cGRhdGUoInBhcmFtcyIsaSl9O2NvbnN0IGlzVG9rZW5UcmFuc2ZlclZlcmlmaWVkPShlLHQscyxhLG4saSk9PnZvaWQgMD09PWUuZXJyb3JzJiYhIWUuZXZlbnRzJiZ2b2lkIDAhPT1lLmV2ZW50cy5maW5kKGU9PiJ0b2tlbnMiPT09ZS5jb250cmFjdCYmZS5ldmVudD09PWkmJmUuZGF0YS5mcm9tPT09dCYmZS5kYXRhLnRvPT09cyYmZS5kYXRhLnF1YW50aXR5PT09biYmZS5kYXRhLnN5bWJvbD09PWEpLGNhbGN1bGF0ZUJhbGFuY2U9KGUsdCxzLGEpPT5hP2FwaS5CaWdOdW1iZXIoZSkucGx1cyh0KS50b0ZpeGVkKHMpOmFwaS5CaWdOdW1iZXIoZSkubWludXModCkudG9GaXhlZChzKSxjb3VudERlY2ltYWxzPWU9PmFwaS5CaWdOdW1iZXIoZSkuZHAoKSxjb250YWluc0R1cGxpY2F0ZXM9ZT0+bmV3IFNldChlKS5zaXplIT09ZS5sZW5ndGgsaXNWYWxpZEhpdmVBY2NvdW50TGVuZ3RoPWU9PmUubGVuZ3RoPj0zJiZlLmxlbmd0aDw9MTYsaXNWYWxpZENvbnRyYWN0TGVuZ3RoPWU9PmUubGVuZ3RoPj0zJiZlLmxlbmd0aDw9NTAsaXNWYWxpZEFjY291bnRzQXJyYXk9ZT0+e2xldCB0PSEwO3JldHVybiBlLmZvckVhY2goZT0+eyJzdHJpbmciPT10eXBlb2YgZSYmaXNWYWxpZEhpdmVBY2NvdW50TGVuZ3RoKGUpfHwodD0hMSl9KSx0fSxpc1ZhbGlkQ29udHJhY3RzQXJyYXk9ZT0+e2xldCB0PSEwO3JldHVybiBlLmZvckVhY2goZT0+eyJzdHJpbmciPT10eXBlb2YgZSYmaXNWYWxpZENvbnRyYWN0TGVuZ3RoKGUpfHwodD0hMSl9KSx0fSxpc1ZhbGlkRGF0YVByb3BlcnRpZXM9KGUsdCxzLGEpPT57bGV0IG49T2JqZWN0LmtleXMoYSkubGVuZ3RoLGk9T2JqZWN0LmtleXMocy5wcm9wZXJ0aWVzKS5sZW5ndGg7aWYoIWFwaS5hc3NlcnQobjw9aSwiY2Fubm90IHNldCBtb3JlIGRhdGEgcHJvcGVydGllcyB0aGFuIE5GVCBoYXMiKSlyZXR1cm4hMTtmb3IobGV0W3Isb11vZiBPYmplY3QuZW50cmllcyhhKSl7bGV0IGw9ITE7aWYoYXBpLmFzc2VydChyJiYic3RyaW5nIj09dHlwZW9mIHImJmFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMocikmJnIubGVuZ3RoPjAmJnIubGVuZ3RoPD0yNSwiaW52YWxpZCBkYXRhIHByb3BlcnR5IG5hbWU6IGxldHRlcnMgJiBudW1iZXJzIG9ubHksIG1heCBsZW5ndGggb2YgMjUiKSYmYXBpLmFzc2VydChyIGluIHMucHJvcGVydGllcywiZGF0YSBwcm9wZXJ0eSBtdXN0IGV4aXN0Iikpe2xldCBkPXMucHJvcGVydGllc1tyXTthcGkuYXNzZXJ0KG51bGwhPW8mJih0eXBlb2Ygbz09PWQudHlwZXx8Im51bWJlciI9PT1kLnR5cGUmJiJzdHJpbmciPT10eXBlb2YgbyYmIWFwaS5CaWdOdW1iZXIobykuaXNOYU4oKSksYGRhdGEgcHJvcGVydHkgdHlwZSBtaXNtYXRjaDogZXhwZWN0ZWQgJHtkLnR5cGV9IGJ1dCBnb3QgJHt0eXBlb2Ygb30gZm9yIHByb3BlcnR5ICR7cn1gKSYmYXBpLmFzc2VydCgic3RyaW5nIiE9dHlwZW9mIG98fG8ubGVuZ3RoPD0xMDAsInN0cmluZyBwcm9wZXJ0eSBtYXggbGVuZ3RoIGlzIDEwMCBjaGFyYWN0ZXJzIikmJmFwaS5hc3NlcnQoImNvbnRyYWN0Ij09PXQmJmQuYXV0aG9yaXplZEVkaXRpbmdDb250cmFjdHMuaW5jbHVkZXMoZSl8fCJ1c2VyIj09PXQmJmQuYXV0aG9yaXplZEVkaXRpbmdBY2NvdW50cy5pbmNsdWRlcyhlKSwibm90IGFsbG93ZWQgdG8gc2V0IGRhdGEgcHJvcGVydGllcyIpJiYobD0hMCwibnVtYmVyIj09PWQudHlwZSYmInN0cmluZyI9PXR5cGVvZiBvJiYoYVtyXT1hcGkuQmlnTnVtYmVyKG8pLnRvTnVtYmVyKCkpKX1pZighbClyZXR1cm4hMX1yZXR1cm4hMH0saXNWYWxpZERhdGFQcm9wZXJ0aWVzQXJyYXk9KGUsdCxzLGEpPT57dHJ5e2ZvcihsZXQgbj0wO248YS5sZW5ndGg7bis9MSl7bGV0IGk9ITEse2lkOnIscHJvcGVydGllczpvfT1hW25dO2lmKGFwaS5hc3NlcnQociYmInN0cmluZyI9PXR5cGVvZiByJiYhYXBpLkJpZ051bWJlcihyKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKHIpLmd0KDApJiZvJiYib2JqZWN0Ij09dHlwZW9mIG8sImludmFsaWQgZGF0YSBwcm9wZXJ0aWVzIikmJmlzVmFsaWREYXRhUHJvcGVydGllcyhlLHQscyxvKSYmKGk9ITApLCFpKXJldHVybiExfX1jYXRjaChsKXtyZXR1cm4hMX1yZXR1cm4hMH0saXNWYWxpZE5mdElkQXJyYXk9ZT0+e3RyeXtsZXQgdD0wO2ZvcihsZXQgcz0wO3M8ZS5sZW5ndGg7cys9MSl7bGV0IGE9ITEse3N5bWJvbDpuLGlkczppfT1lW3NdO2lmKGFwaS5hc3NlcnQobiYmInN0cmluZyI9PXR5cGVvZiBuJiZhcGkudmFsaWRhdG9yLmlzQWxwaGEobikmJmFwaS52YWxpZGF0b3IuaXNVcHBlcmNhc2UobikmJm4ubGVuZ3RoPjAmJm4ubGVuZ3RoPD0xMCYmaSYmIm9iamVjdCI9PXR5cGVvZiBpJiZBcnJheS5pc0FycmF5KGkpLCJpbnZhbGlkIG5mdCBsaXN0IikmJih0Kz1pLmxlbmd0aCxhcGkuYXNzZXJ0KHQ8PTUwLCJjYW5ub3Qgb3BlcmF0ZSBvbiBtb3JlIHRoYW4gNTAgTkZUIGluc3RhbmNlcyBhdCBvbmNlIikpKXtmb3IobGV0IHI9MDtyPGkubGVuZ3RoO3IrPTEpe2xldCBvPWlbcl07aWYoIWFwaS5hc3NlcnQobyYmInN0cmluZyI9PXR5cGVvZiBvJiYhYXBpLkJpZ051bWJlcihvKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKG8pLmd0KDApLCJpbnZhbGlkIG5mdCBsaXN0IikpcmV0dXJuITF9YT0hMH1pZighYSlyZXR1cm4hMX19Y2F0Y2gobCl7cmV0dXJuITF9cmV0dXJuITB9LGlzVmFsaWRUb2tlbkJhc2tldD1hc3luYyhlLHQscyxhLG4pPT57dHJ5e2xldCBpPU9iamVjdC5rZXlzKGUpLmxlbmd0aDtpZihpPjEwKXJldHVybiExO2ZvcihsZXRbcixvXW9mIE9iamVjdC5lbnRyaWVzKGUpKXtsZXQgbD0hMTtpZigic3RyaW5nIj09dHlwZW9mIHImJmFwaS52YWxpZGF0b3IuaXNBbHBoYShyKSYmYXBpLnZhbGlkYXRvci5pc1VwcGVyY2FzZShyKSYmci5sZW5ndGg+MCYmci5sZW5ndGg8PTEwKXtsZXQgZD1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpyfSk7aWYoZCYmbyYmInN0cmluZyI9PXR5cGVvZiBvJiYhYXBpLkJpZ051bWJlcihvKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKG8pLmd0KDApJiZjb3VudERlY2ltYWxzKG8pPD1kLnByZWNpc2lvbil7bGV0IHU9cj09PWE/Y2FsY3VsYXRlQmFsYW5jZShvLG4sZC5wcmVjaXNpb24sITApOm8sYz1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsdCx7YWNjb3VudDpzLHN5bWJvbDpyfSk7YyYmYXBpLkJpZ051bWJlcihjLmJhbGFuY2UpLmd0ZSh1KSYmKGw9ITApfX1pZighbClyZXR1cm4hMX19Y2F0Y2goZil7cmV0dXJuITF9cmV0dXJuITB9LHRyYW5zZmVyQW5kVmVyaWZ5TmZ0cz1hc3luYyhlLHQscyxhLG4saSxyKT0+e2xldCBvPXtzdWNjZXNzOltdLGZhaWw6W119LGw9InVzZXIiPT09dD8idSI6ImMiLGQ9InVzZXIiPT09YT8idSI6ImMiO2F3YWl0IGFjdGlvbnMudHJhbnNmZXIoe2Zyb21UeXBlOnQsdG86cyx0b1R5cGU6YSxuZnRzOm4saXNTaWduZWRXaXRoQWN0aXZlS2V5OmksY2FsbGluZ0NvbnRyYWN0SW5mbzpyfSk7bGV0IHU9YXBpLmxvZ3MoKSxjPXt9LGY9e307aWYodS5ldmVudHMpZm9yKGxldCBwPTA7cDx1LmV2ZW50cy5sZW5ndGg7cCs9MSl7bGV0IGc9dS5ldmVudHNbcF07aWYoZy5jb250cmFjdCYmZy5ldmVudCYmZy5kYXRhJiYibmZ0Ij09PWcuY29udHJhY3QmJiJ0cmFuc2ZlciI9PT1nLmV2ZW50JiZnLmRhdGEuZnJvbT09PWUmJmcuZGF0YS5mcm9tVHlwZT09PWwmJmcuZGF0YS50bz09PXMmJmcuZGF0YS50b1R5cGU9PT1kKXtsZXQgeT1nLmRhdGEuc3ltYm9sKyItIitnLmRhdGEuaWQ7Y1t5XT0xfX1mb3IobGV0IG09MDttPG4ubGVuZ3RoO20rPTEpe2xldHtzeW1ib2w6JCxpZHM6aH09blttXSxiPVtdLHY9W107Zm9yKGxldCB3PTA7dzxoLmxlbmd0aDt3Kz0xKXtsZXQgTj0kKyItIitoW3ddO04gaW4gZnx8KE4gaW4gYz9iLnB1c2goaFt3XS50b1N0cmluZygpKTp2LnB1c2goaFt3XS50b1N0cmluZygpKSxmW05dPTEpfWIubGVuZ3RoPjAmJm8uc3VjY2Vzcy5wdXNoKHtzeW1ib2w6JCxpZHM6Yn0pLHYubGVuZ3RoPjAmJm8uZmFpbC5wdXNoKHtzeW1ib2w6JCxpZHM6dn0pfXJldHVybiBvfTthY3Rpb25zLnVwZGF0ZVVybD1hc3luYyBlPT57bGV0e3VybDp0LHN5bWJvbDpzfT1lO2lmKGFwaS5hc3NlcnQocyYmInN0cmluZyI9PXR5cGVvZiBzJiZ0JiYic3RyaW5nIj09dHlwZW9mIHQsImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQodC5sZW5ndGg8PTI1NSwiaW52YWxpZCB1cmw6IG1heCBsZW5ndGggb2YgMjU1Iikpe2xldCBhPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN9KTtpZihhJiZhcGkuYXNzZXJ0KGEuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpdHJ5e2xldCBuPUpTT04ucGFyc2UoYS5tZXRhZGF0YSk7YXBpLmFzc2VydChuJiZuLnVybCwiYW4gZXJyb3Igb2NjdXJlZCB3aGVuIHRyeWluZyB0byB1cGRhdGUgdGhlIHVybCIpJiYobi51cmw9dCxhLm1ldGFkYXRhPUpTT04uc3RyaW5naWZ5KG4pLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGEpKX1jYXRjaChpKXt9fX0sYWN0aW9ucy51cGRhdGVNZXRhZGF0YT1hc3luYyBlPT57bGV0e21ldGFkYXRhOnQsc3ltYm9sOnN9PWU7aWYoYXBpLmFzc2VydChzJiYic3RyaW5nIj09dHlwZW9mIHMmJnQmJiJvYmplY3QiPT10eXBlb2YgdCwiaW52YWxpZCBwYXJhbXMiKSl7bGV0IGE9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c30pO2lmKGEmJmFwaS5hc3NlcnQoYS5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSl0cnl7bGV0IG49SlNPTi5zdHJpbmdpZnkodCk7YXBpLmFzc2VydChuLmxlbmd0aDw9MWUzLCJpbnZhbGlkIG1ldGFkYXRhOiBtYXggbGVuZ3RoIG9mIDEwMDAiKSYmKGEubWV0YWRhdGE9bixhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixhKSl9Y2F0Y2goaSl7fX19LGFjdGlvbnMudXBkYXRlTmFtZT1hc3luYyBlPT57bGV0e25hbWU6dCxzeW1ib2w6c309ZTtpZihhcGkuYXNzZXJ0KHMmJiJzdHJpbmciPT10eXBlb2YgcyYmdCYmInN0cmluZyI9PXR5cGVvZiB0LCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QodCwiICIpKSYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PTUwLCJpbnZhbGlkIG5hbWU6IGxldHRlcnMsIG51bWJlcnMsIHdoaXRlc3BhY2VzIG9ubHksIG1heCBsZW5ndGggb2YgNTAiKSl7bGV0IGE9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c30pO2EmJmFwaS5hc3NlcnQoYS5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmKGEubmFtZT10LGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGEpKX19LGFjdGlvbnMudXBkYXRlT3JnTmFtZT1hc3luYyBlPT57bGV0e29yZ05hbWU6dCxzeW1ib2w6c309ZTtpZihhcGkuYXNzZXJ0KHMmJiJzdHJpbmciPT10eXBlb2YgcyYmdCYmInN0cmluZyI9PXR5cGVvZiB0LCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QodCwiICIpKSYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PTUwLCJpbnZhbGlkIG9yZyBuYW1lOiBsZXR0ZXJzLCBudW1iZXJzLCB3aGl0ZXNwYWNlcyBvbmx5LCBtYXggbGVuZ3RoIG9mIDUwIikpe2xldCBhPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN9KTthJiZhcGkuYXNzZXJ0KGEuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJihhLm9yZ05hbWU9dCxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixhKSl9fSxhY3Rpb25zLnVwZGF0ZVByb2R1Y3ROYW1lPWFzeW5jIGU9PntsZXR7cHJvZHVjdE5hbWU6dCxzeW1ib2w6c309ZTtpZihhcGkuYXNzZXJ0KHMmJiJzdHJpbmciPT10eXBlb2YgcyYmdCYmInN0cmluZyI9PXR5cGVvZiB0LCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QodCwiICIpKSYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PTUwLCJpbnZhbGlkIHByb2R1Y3QgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpKXtsZXQgYT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzfSk7YSYmYXBpLmFzc2VydChhLmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpJiYoYS5wcm9kdWN0TmFtZT10LGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGEpKX19LGFjdGlvbnMuYWRkQXV0aG9yaXplZElzc3VpbmdBY2NvdW50cz1hc3luYyBlPT57bGV0e2FjY291bnRzOnQsc3ltYm9sOnMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmF9PWU7aWYoYXBpLmFzc2VydCghMD09PWEsInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHMmJiJzdHJpbmciPT10eXBlb2YgcyYmdCYmIm9iamVjdCI9PXR5cGVvZiB0JiZBcnJheS5pc0FycmF5KHQpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KHQubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBhY2NvdW50cyIpKXtsZXQgbj1pc1ZhbGlkQWNjb3VudHNBcnJheSh0KTtpZihhcGkuYXNzZXJ0KG4sImludmFsaWQgYWNjb3VudCBsaXN0Iikpe2xldCBpPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN9KTtpZihpKXtsZXQgcj1bXTtpZih0LmZvckVhY2goZT0+e2xldCB0PWUudHJpbSgpLnRvTG93ZXJDYXNlKCkscz0hMTtmb3IobGV0IGE9MDthPGkuYXV0aG9yaXplZElzc3VpbmdBY2NvdW50cy5sZW5ndGg7YSs9MSlpZih0PT09aS5hdXRob3JpemVkSXNzdWluZ0FjY291bnRzW2FdKXtzPSEwO2JyZWFrfXN8fHIucHVzaCh0KX0pLGFwaS5hc3NlcnQoaS5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmYXBpLmFzc2VydCghY29udGFpbnNEdXBsaWNhdGVzKHIpLCJjYW5ub3QgYWRkIHRoZSBzYW1lIGFjY291bnQgdHdpY2UiKSYmYXBpLmFzc2VydChpLmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMubGVuZ3RoK3IubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBhY2NvdW50cyIpKXtsZXQgbz1pLmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMuY29uY2F0KHIpO2kuYXV0aG9yaXplZElzc3VpbmdBY2NvdW50cz1vLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGkpfX19fX0sYWN0aW9ucy5hZGRBdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1hc3luYyBlPT57bGV0e2NvbnRyYWN0czp0LHN5bWJvbDpzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTphfT1lO2lmKGFwaS5hc3NlcnQoITA9PT1hLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzJiYic3RyaW5nIj09dHlwZW9mIHMmJnQmJiJvYmplY3QiPT10eXBlb2YgdCYmQXJyYXkuaXNBcnJheSh0KSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydCh0Lmxlbmd0aDw9MTAsImNhbm5vdCBoYXZlIG1vcmUgdGhhbiAxMCBhdXRob3JpemVkIGlzc3VpbmcgY29udHJhY3RzIikpe2xldCBuPWlzVmFsaWRDb250cmFjdHNBcnJheSh0KTtpZihhcGkuYXNzZXJ0KG4sImludmFsaWQgY29udHJhY3QgbGlzdCIpKXtsZXQgaT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzfSk7aWYoaSl7bGV0IHI9W107aWYodC5mb3JFYWNoKGU9PntsZXQgdD1lLnRyaW0oKSxzPSExO2ZvcihsZXQgYT0wO2E8aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cy5sZW5ndGg7YSs9MSlpZih0PT09aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0c1thXSl7cz0hMDticmVha31zfHxyLnB1c2godCl9KSxhcGkuYXNzZXJ0KGkuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJmFwaS5hc3NlcnQoIWNvbnRhaW5zRHVwbGljYXRlcyhyKSwiY2Fubm90IGFkZCB0aGUgc2FtZSBjb250cmFjdCB0d2ljZSIpJiZhcGkuYXNzZXJ0KGkuYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMubGVuZ3RoK3IubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBjb250cmFjdHMiKSl7bGV0IG89aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cy5jb25jYXQocik7aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1vLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGkpfX19fX0sYWN0aW9ucy5yZW1vdmVBdXRob3JpemVkSXNzdWluZ0FjY291bnRzPWFzeW5jIGU9PntsZXR7YWNjb3VudHM6dCxzeW1ib2w6cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6YX09ZTtpZihhcGkuYXNzZXJ0KCEwPT09YSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQocyYmInN0cmluZyI9PXR5cGVvZiBzJiZ0JiYib2JqZWN0Ij09dHlwZW9mIHQmJkFycmF5LmlzQXJyYXkodCksImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQodC5sZW5ndGg8PTEwLCJjYW5ub3QgcmVtb3ZlIG1vcmUgdGhhbiAxMCBhdXRob3JpemVkIGlzc3VpbmcgYWNjb3VudHMiKSl7bGV0IG49aXNWYWxpZEFjY291bnRzQXJyYXkodCk7aWYoYXBpLmFzc2VydChuLCJpbnZhbGlkIGFjY291bnQgbGlzdCIpKXtsZXQgaT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzfSk7aWYoaSYmYXBpLmFzc2VydChpLmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpKXtsZXQgcj1pLmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMuZmlsdGVyKGU9Pntmb3IobGV0IHM9MDtzPHQubGVuZ3RoO3MrPTEpe2xldCBhPXRbc10udHJpbSgpLnRvTG93ZXJDYXNlKCk7aWYoZT09PWEpcmV0dXJuITF9cmV0dXJuITB9KTtpLmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHM9cixhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixpKX19fX0sYWN0aW9ucy5yZW1vdmVBdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1hc3luYyBlPT57bGV0e2NvbnRyYWN0czp0LHN5bWJvbDpzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTphfT1lO2lmKGFwaS5hc3NlcnQoITA9PT1hLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzJiYic3RyaW5nIj09dHlwZW9mIHMmJnQmJiJvYmplY3QiPT10eXBlb2YgdCYmQXJyYXkuaXNBcnJheSh0KSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydCh0Lmxlbmd0aDw9MTAsImNhbm5vdCByZW1vdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBjb250cmFjdHMiKSl7bGV0IG49aXNWYWxpZENvbnRyYWN0c0FycmF5KHQpO2lmKGFwaS5hc3NlcnQobiwiaW52YWxpZCBjb250cmFjdCBsaXN0Iikpe2xldCBpPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN9KTtpZihpJiZhcGkuYXNzZXJ0KGkuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2xldCByPWkuYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMuZmlsdGVyKGU9Pntmb3IobGV0IHM9MDtzPHQubGVuZ3RoO3MrPTEpe2xldCBhPXRbc10udHJpbSgpO2lmKGU9PT1hKXJldHVybiExfXJldHVybiEwfSk7aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1yLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGkpfX19fSxhY3Rpb25zLnRyYW5zZmVyT3duZXJzaGlwPWFzeW5jIGU9PntsZXR7c3ltYm9sOnQsdG86cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6YX09ZTtpZihhcGkuYXNzZXJ0KCEwPT09YSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQodCYmInN0cmluZyI9PXR5cGVvZiB0JiZzJiYic3RyaW5nIj09dHlwZW9mIHMsImludmFsaWQgcGFyYW1zIikpe2xldCBuPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnR9KTtpZihuJiZhcGkuYXNzZXJ0KG4uaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2xldCBpPXMudHJpbSgpLnRvTG93ZXJDYXNlKCk7YXBpLmFzc2VydChpc1ZhbGlkSGl2ZUFjY291bnRMZW5ndGgoaSksImludmFsaWQgdG8iKSYmKG4uaXNzdWVyPWksYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbikpfX19LGFjdGlvbnMuZW5hYmxlRGVsZWdhdGlvbj1hc3luYyBlPT57bGV0e3N5bWJvbDp0LHVuZGVsZWdhdGlvbkNvb2xkb3duOnMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmF9PWUsbj1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSkse2VuYWJsZURlbGVnYXRpb25GZWU6aX09bixyPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOiJCRUUifSksbz0hIWFwaS5CaWdOdW1iZXIoaSkubHRlKDApfHxyJiZhcGkuQmlnTnVtYmVyKHIuYmFsYW5jZSkuZ3RlKGkpO2lmKGFwaS5hc3NlcnQobywieW91IG11c3QgaGF2ZSBlbm91Z2ggdG9rZW5zIHRvIGNvdmVyIGZlZXMiKSYmYXBpLmFzc2VydCghMD09PWEsInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHQmJiJzdHJpbmciPT10eXBlb2YgdCwiaW52YWxpZCBzeW1ib2wiKSYmYXBpLmFzc2VydChzJiZOdW1iZXIuaXNJbnRlZ2VyKHMpJiZzPjAmJnM8PTE4MjUwLCJ1bmRlbGVnYXRpb25Db29sZG93biBtdXN0IGJlIGFuIGludGVnZXIgYmV0d2VlbiAxIGFuZCAxODI1MCIpKXtsZXQgbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDp0fSk7aWYoYXBpLmFzc2VydChudWxsIT09bCwic3ltYm9sIGRvZXMgbm90IGV4aXN0IikmJmFwaS5hc3NlcnQobC5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1sLmRlbGVnYXRpb25FbmFibGVkfHwhMT09PWwuZGVsZWdhdGlvbkVuYWJsZWQsImRlbGVnYXRpb24gYWxyZWFkeSBlbmFibGVkIikpe2lmKGFwaS5CaWdOdW1iZXIoaSkuZ3QoMCkpe2xldCBkPWF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOiJCRUUiLHF1YW50aXR5OmksaXNTaWduZWRXaXRoQWN0aXZlS2V5OmF9KTtpZighaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQoZCxhcGkuc2VuZGVyLCJudWxsIiwiQkVFIixpLCJ0cmFuc2ZlciIpKXJldHVybiExfXJldHVybiBsLmRlbGVnYXRpb25FbmFibGVkPSEwLGwudW5kZWxlZ2F0aW9uQ29vbGRvd249cyxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixsKSwhMH19cmV0dXJuITF9LGFjdGlvbnMudXBkYXRlUHJvcGVydHlEZWZpbml0aW9uPWFzeW5jIGU9PntsZXR7c3ltYm9sOnQsbmFtZTpzLG5ld05hbWU6YSx0eXBlOm4saXNSZWFkT25seTppLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTpyfT1lO2lmKGFwaS5hc3NlcnQoITA9PT1yLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCh0JiYic3RyaW5nIj09dHlwZW9mIHQmJnMmJiJzdHJpbmciPT10eXBlb2YgcywiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChhcGkudmFsaWRhdG9yLmlzQWxwaGFudW1lcmljKHMpJiZzLmxlbmd0aD4wJiZzLmxlbmd0aDw9MjUsImludmFsaWQgbmFtZTogbGV0dGVycyAmIG51bWJlcnMgb25seSwgbWF4IGxlbmd0aCBvZiAyNSIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWF8fCJzdHJpbmciPT10eXBlb2YgYSYmYXBpLnZhbGlkYXRvci5pc0FscGhhbnVtZXJpYyhhKSYmYS5sZW5ndGg+MCYmYS5sZW5ndGg8PTI1LCJpbnZhbGlkIG5ldyBuYW1lOiBsZXR0ZXJzICYgbnVtYmVycyBvbmx5LCBtYXggbGVuZ3RoIG9mIDI1IikmJmFwaS5hc3NlcnQodm9pZCAwPT09bnx8InN0cmluZyI9PXR5cGVvZiBuJiYoIm51bWJlciI9PT1ufHwic3RyaW5nIj09PW58fCJib29sZWFuIj09PW4pLCJpbnZhbGlkIHR5cGU6IG11c3QgYmUgbnVtYmVyLCBzdHJpbmcsIG9yIGJvb2xlYW4iKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1pfHwiYm9vbGVhbiI9PXR5cGVvZiBpLCJpbnZhbGlkIGlzUmVhZE9ubHk6IG11c3QgYmUgdHJ1ZSBvciBmYWxzZSIpKXtsZXQgbz1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDp0fSk7aWYobyYmYXBpLmFzc2VydCgwPT09by5zdXBwbHksImNhbm5vdCBjaGFuZ2UgZGF0YSBwcm9wZXJ0eSBkZWZpbml0aW9uOyB0b2tlbnMgYWxyZWFkeSBpc3N1ZWQiKSYmYXBpLmFzc2VydChzIGluIG8ucHJvcGVydGllcywicHJvcGVydHkgbXVzdCBleGlzdCIpJiZhcGkuYXNzZXJ0KG8uaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2lmKHZvaWQgMCE9PWEmJih2b2lkIDAhPT1vLmdyb3VwQnkmJm8uZ3JvdXBCeS5sZW5ndGg+MCYmIWFwaS5hc3NlcnQoIW8uZ3JvdXBCeS5pbmNsdWRlcyhzKSwiY2Fubm90IGNoYW5nZSBkYXRhIHByb3BlcnR5IG5hbWU7IHByb3BlcnR5IGlzIHBhcnQgb2YgZ3JvdXBCeSIpfHwhYXBpLmFzc2VydChhIT09cywibmV3IG5hbWUgbXVzdCBiZSBkaWZmZXJlbnQgZnJvbSBvbGQgbmFtZSIpfHwhYXBpLmFzc2VydCghKGEgaW4gby5wcm9wZXJ0aWVzKSwidGhlcmUgaXMgYWxyZWFkeSBhIGRhdGEgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4gbmV3IG5hbWUiKSkpcmV0dXJuITE7bGV0IGw9ITEsZD1vLnByb3BlcnRpZXNbc10udHlwZSx1PW8ucHJvcGVydGllc1tzXS5pc1JlYWRPbmx5O3JldHVybiB2b2lkIDAhPT1uJiZuIT09ZCYmKG8ucHJvcGVydGllc1tzXS50eXBlPW4sbD0hMCksdm9pZCAwIT09aSYmaSE9PXUmJihvLnByb3BlcnRpZXNbc10uaXNSZWFkT25seT1pLGw9ITApLHZvaWQgMCE9PWEmJmEhPT1zJiYoby5wcm9wZXJ0aWVzW2FdPW8ucHJvcGVydGllc1tzXSxkZWxldGUgby5wcm9wZXJ0aWVzW3NdLGw9ITApLGwmJihhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixvKSxhcGkuZW1pdCgidXBkYXRlUHJvcGVydHlEZWZpbml0aW9uIix7c3ltYm9sOnQsb3JpZ2luYWxOYW1lOnMsb3JpZ2luYWxUeXBlOmQsb3JpZ2luYWxJc1JlYWRPbmx5OnUsbmV3TmFtZTphLG5ld1R5cGU6bixuZXdJc1JlYWRPbmx5Oml9KSksITB9fXJldHVybiExfSxhY3Rpb25zLmFkZFByb3BlcnR5PWFzeW5jIGU9PntsZXR7c3ltYm9sOnQsbmFtZTpzLHR5cGU6YSxpc1JlYWRPbmx5Om4sYXV0aG9yaXplZEVkaXRpbmdBY2NvdW50czppLGF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzOnIsaXNTaWduZWRXaXRoQWN0aXZlS2V5Om99PWUsbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSkse2RhdGFQcm9wZXJ0eUNyZWF0aW9uRmVlOmR9PWw7aWYoYXBpLmFzc2VydCghMD09PW8sInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHQmJiJzdHJpbmciPT10eXBlb2YgdCYmcyYmInN0cmluZyI9PXR5cGVvZiBzJiYodm9pZCAwPT09bnx8ImJvb2xlYW4iPT10eXBlb2YgbikmJih2b2lkIDA9PT1pfHxpJiYib2JqZWN0Ij09dHlwZW9mIGkmJkFycmF5LmlzQXJyYXkoaSkpJiYodm9pZCAwPT09cnx8ciYmIm9iamVjdCI9PXR5cGVvZiByJiZBcnJheS5pc0FycmF5KHIpKSYmYSYmInN0cmluZyI9PXR5cGVvZiBhLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMocykmJnMubGVuZ3RoPjAmJnMubGVuZ3RoPD0yNSwiaW52YWxpZCBuYW1lOiBsZXR0ZXJzICYgbnVtYmVycyBvbmx5LCBtYXggbGVuZ3RoIG9mIDI1IikmJmFwaS5hc3NlcnQoIm51bWJlciI9PT1hfHwic3RyaW5nIj09PWF8fCJib29sZWFuIj09PWEsImludmFsaWQgdHlwZTogbXVzdCBiZSBudW1iZXIsIHN0cmluZywgb3IgYm9vbGVhbiIpKXtsZXQgdT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDp0fSk7aWYodSYmYXBpLmFzc2VydCghKHMgaW4gdS5wcm9wZXJ0aWVzKSwiY2Fubm90IGFkZCB0aGUgc2FtZSBwcm9wZXJ0eSB0d2ljZSIpJiZhcGkuYXNzZXJ0KHUuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2xldCBjPU9iamVjdC5rZXlzKHUucHJvcGVydGllcykubGVuZ3RoO2lmKGM+PTMpe2xldCBmPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOiJCRUUifSkscD0hIWFwaS5CaWdOdW1iZXIoZCkubHRlKDApfHxmJiZhcGkuQmlnTnVtYmVyKGYuYmFsYW5jZSkuZ3RlKGQpO2lmKCFhcGkuYXNzZXJ0KHAsInlvdSBtdXN0IGhhdmUgZW5vdWdoIHRva2VucyB0byBjb3ZlciB0aGUgY3JlYXRpb24gZmVlcyIpKXJldHVybiExO2lmKGFwaS5CaWdOdW1iZXIoZCkuZ3QoMCkpe2xldCBnPWF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOiJCRUUiLHF1YW50aXR5OmQsaXNTaWduZWRXaXRoQWN0aXZlS2V5Om99KTtpZighaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQoZyxhcGkuc2VuZGVyLCJudWxsIiwiQkVFIixkLCJ0cmFuc2ZlciIpKXJldHVybiExfX1sZXQgeT12b2lkIDAhPT1uJiZuLG09dm9pZCAwPT09aT9bYXBpLnNlbmRlcl06W10sJD17dHlwZTphLGlzUmVhZE9ubHk6eSxhdXRob3JpemVkRWRpdGluZ0FjY291bnRzOm0sYXV0aG9yaXplZEVkaXRpbmdDb250cmFjdHM6W119O3JldHVybiB1LnByb3BlcnRpZXNbc109JCxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIix1KSwoaXx8cikmJmF3YWl0IGFjdGlvbnMuc2V0UHJvcGVydHlQZXJtaXNzaW9ucyh7c3ltYm9sOnQsbmFtZTpzLGFjY291bnRzOmksY29udHJhY3RzOnIsaXNTaWduZWRXaXRoQWN0aXZlS2V5Om99KSwhMH19cmV0dXJuITF9LGFjdGlvbnMuc2V0UHJvcGVydHlQZXJtaXNzaW9ucz1hc3luYyBlPT57bGV0e3N5bWJvbDp0LG5hbWU6cyxhY2NvdW50czphLGNvbnRyYWN0czpuLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppfT1lO2lmKGFwaS5hc3NlcnQoITA9PT1pLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCh0JiYic3RyaW5nIj09dHlwZW9mIHQmJnMmJiJzdHJpbmciPT10eXBlb2YgcyYmKHZvaWQgMD09PWF8fGEmJiJvYmplY3QiPT10eXBlb2YgYSYmQXJyYXkuaXNBcnJheShhKSkmJih2b2lkIDA9PT1ufHxuJiYib2JqZWN0Ij09dHlwZW9mIG4mJkFycmF5LmlzQXJyYXkobikpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMocykmJnMubGVuZ3RoPjAmJnMubGVuZ3RoPD0yNSwiaW52YWxpZCBuYW1lOiBsZXR0ZXJzICYgbnVtYmVycyBvbmx5LCBtYXggbGVuZ3RoIG9mIDI1IikmJmFwaS5hc3NlcnQodm9pZCAwPT09YXx8YS5sZW5ndGg8PTEwLCJjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gMTAgYXV0aG9yaXplZCBhY2NvdW50cyIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PW58fG4ubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgY29udHJhY3RzIikmJmFwaS5hc3NlcnQodm9pZCAwPT09YXx8aXNWYWxpZEFjY291bnRzQXJyYXkoYSksImludmFsaWQgYWNjb3VudCBsaXN0IikmJmFwaS5hc3NlcnQodm9pZCAwPT09bnx8aXNWYWxpZENvbnRyYWN0c0FycmF5KG4pLCJpbnZhbGlkIGNvbnRyYWN0IGxpc3QiKSl7bGV0IHI9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6dH0pO2lmKHImJmFwaS5hc3NlcnQocyBpbiByLnByb3BlcnRpZXMsInByb3BlcnR5IG11c3QgZXhpc3QiKSYmYXBpLmFzc2VydChyLmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpKXtsZXQgbz1bXSxsPVtdO2lmKGEmJihvPWEubWFwKGU9PmUudHJpbSgpLnRvTG93ZXJDYXNlKCkpKSxuJiYobD1uLm1hcChlPT5lLnRyaW0oKSkpLGFwaS5hc3NlcnQodm9pZCAwPT09YXx8IWNvbnRhaW5zRHVwbGljYXRlcyhvKSwiY2Fubm90IGFkZCB0aGUgc2FtZSBhY2NvdW50IHR3aWNlIikmJmFwaS5hc3NlcnQodm9pZCAwPT09bnx8IWNvbnRhaW5zRHVwbGljYXRlcyhsKSwiY2Fubm90IGFkZCB0aGUgc2FtZSBjb250cmFjdCB0d2ljZSIpKXtsZXQgZD0hMTthJiYoci5wcm9wZXJ0aWVzW3NdLmF1dGhvcml6ZWRFZGl0aW5nQWNjb3VudHM9byxkPSEwKSxuJiYoci5wcm9wZXJ0aWVzW3NdLmF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzPWwsZD0hMCksZCYmYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIscil9fX19LGFjdGlvbnMuc2V0R3JvdXBCeT1hc3luYyBlPT57bGV0e3N5bWJvbDp0LHByb3BlcnRpZXM6cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6YX09ZTtpZihhcGkuYXNzZXJ0KCEwPT09YSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQodCYmInN0cmluZyI9PXR5cGVvZiB0JiZzJiYib2JqZWN0Ij09dHlwZW9mIHMmJkFycmF5LmlzQXJyYXkocyksImludmFsaWQgcGFyYW1zIikpe2xldCBuPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnR9KTtpZihuKXtsZXQgaT1PYmplY3Qua2V5cyhuLnByb3BlcnRpZXMpLmxlbmd0aDtpZihhcGkuYXNzZXJ0KG4uaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJmFwaS5hc3NlcnQodm9pZCAwPT09bi5ncm91cEJ5fHwwPT09bi5ncm91cEJ5Lmxlbmd0aCwibGlzdCBpcyBhbHJlYWR5IHNldCIpJiZhcGkuYXNzZXJ0KHMubGVuZ3RoPD1pLCJjYW5ub3Qgc2V0IG1vcmUgZGF0YSBwcm9wZXJ0aWVzIHRoYW4gTkZUIGhhcyIpJiZhcGkuYXNzZXJ0KCFjb250YWluc0R1cGxpY2F0ZXMocyksImxpc3QgY2Fubm90IGNvbnRhaW4gZHVwbGljYXRlcyIpKXtmb3IobGV0IHI9MDtyPHMubGVuZ3RoO3IrPTEpe2xldCBvPXNbcl07aWYoIWFwaS5hc3NlcnQobyYmInN0cmluZyI9PXR5cGVvZiBvJiZvIGluIG4ucHJvcGVydGllcywiZGF0YSBwcm9wZXJ0eSBtdXN0IGV4aXN0IikpcmV0dXJuITF9cmV0dXJuIG4uZ3JvdXBCeT1zLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLG4pLCEwfX19cmV0dXJuITF9LGFjdGlvbnMuc2V0UHJvcGVydGllcz1hc3luYyBlPT57bGV0e3N5bWJvbDp0LGZyb21UeXBlOnMsbmZ0czphLGNhbGxpbmdDb250cmFjdEluZm86bn09ZSxpPVsidXNlciIsImNvbnRyYWN0Il0scj12b2lkIDA9PT1zPyJ1c2VyIjpzO2lmKGFwaS5hc3NlcnQoYSYmIm9iamVjdCI9PXR5cGVvZiBhJiZBcnJheS5pc0FycmF5KGEpJiZyJiYic3RyaW5nIj09dHlwZW9mIHImJmkuaW5jbHVkZXMocikmJnQmJiJzdHJpbmciPT10eXBlb2YgdCYmKG58fHZvaWQgMD09PW4mJiJ1c2VyIj09PXIpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGEubGVuZ3RoPD01MCwiY2Fubm90IHNldCBwcm9wZXJ0aWVzIG9uIG1vcmUgdGhhbiA1MCBORlQgaW5zdGFuY2VzIGF0IG9uY2UiKSl7bGV0IG89InVzZXIiPT09cj9hcGkuc2VuZGVyOm4ubmFtZSxsPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnR9KTtpZihhcGkuYXNzZXJ0KG51bGwhPT1sLCJzeW1ib2wgZG9lcyBub3QgZXhpc3QiKSl7aWYoIWlzVmFsaWREYXRhUHJvcGVydGllc0FycmF5KG8scixsLGEpKXJldHVybiExO2xldCBkPXQrImluc3RhbmNlcyI7Zm9yKGxldCB1PTA7dTxhLmxlbmd0aDt1Kz0xKXtsZXR7aWQ6Yyxwcm9wZXJ0aWVzOmZ9PWFbdV07aWYoMD09PU9iamVjdC5rZXlzKGYpLmxlbmd0aCljb250aW51ZTtsZXQgcD1hd2FpdCBhcGkuZGIuZmluZE9uZShkLHtfaWQ6YXBpLkJpZ051bWJlcihjKS50b051bWJlcigpfSk7aWYoYXBpLmFzc2VydChudWxsIT09cCwibmZ0IGluc3RhbmNlIGRvZXMgbm90IGV4aXN0Iikpe2xldCBnPSExO2ZvcihsZXRbeSxtXW9mIE9iamVjdC5lbnRyaWVzKGYpKXtsZXQgJD1sLnByb3BlcnRpZXNbeV0saD1udWxsOyQuaXNSZWFkT25seT9hcGkuYXNzZXJ0KCEoeSBpbiBwLnByb3BlcnRpZXMpLCJjYW5ub3QgZWRpdCByZWFkLW9ubHkgcHJvcGVydGllcyIpJiYocC5wcm9wZXJ0aWVzW3ldPW0sZz0hMCk6KGg9cC5wcm9wZXJ0aWVzW3ldLHAucHJvcGVydGllc1t5XT1tLGc9ITApLGcmJmghPT1tJiZhd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoIm1pbmluZyIsImhhbmRsZU5mdFNldFByb3BlcnR5Iix7c3ltYm9sOnQsbmZ0OnAscHJvcGVydHlOYW1lOnksb2xkVmFsdWU6aH0pfWcmJmF3YWl0IGFwaS5kYi51cGRhdGUoZCxwKX19cmV0dXJuITB9fXJldHVybiExfSxhY3Rpb25zLmJ1cm49YXN5bmMgZT0+e2xldHtmcm9tVHlwZTp0LG5mdHM6cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6YSxjYWxsaW5nQ29udHJhY3RJbmZvOm59PWUsaT1bInVzZXIiLCJjb250cmFjdCJdLHI9dm9pZCAwPT09dD8idXNlciI6dDtpZihhcGkuYXNzZXJ0KCEwPT09YSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQociYmInN0cmluZyI9PXR5cGVvZiByJiZpLmluY2x1ZGVzKHIpJiYobnx8dm9pZCAwPT09biYmInVzZXIiPT09cikmJnMmJiJvYmplY3QiPT10eXBlb2YgcyYmQXJyYXkuaXNBcnJheShzKSwiaW52YWxpZCBwYXJhbXMiKSYmaXNWYWxpZE5mdElkQXJyYXkocykpe2xldCBvPSJ1c2VyIj09PXI/YXBpLnNlbmRlcjpuLm5hbWUsbD0wLGQ9MCx1PSExO2ZvcihsZXQgYz0wO2M8cy5sZW5ndGg7Yys9MSl7bGV0e3N5bWJvbDpmLGlkczpwfT1zW2NdLGc9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6Zn0pO2lmKGcpe2xldCB5PWYrImluc3RhbmNlcyI7Zm9yKGxldCBtPTA7bTxwLmxlbmd0aDttKz0xKXtsZXQgJD1wW21dLGg9YXdhaXQgYXBpLmRiLmZpbmRPbmUoeSx7X2lkOmFwaS5CaWdOdW1iZXIoJCkudG9OdW1iZXIoKX0pO2lmKGgpe2xldCBiPSEwO2lmKGgubG9ja2VkTmZ0cyYmaC5sb2NrZWROZnRzLmxlbmd0aD4wPygwPT09ZCYmKHU9ITApLCgobCs9MSk+MXx8IXUpJiYoYj0hMSkpOnUmJihiPSExKSxkKz0xLGguYWNjb3VudD09PW8mJigidSI9PT1oLm93bmVkQnkmJiJ1c2VyIj09PXJ8fCJjIj09PWgub3duZWRCeSYmImNvbnRyYWN0Ij09PXIpJiZ2b2lkIDA9PT1oLmRlbGVnYXRlZFRvJiZiKXtsZXQgdj17fSx3PSEwO2ZvcihsZXRbTixfXW9mIE9iamVjdC5lbnRyaWVzKGgubG9ja2VkVG9rZW5zKSl7bGV0IEE9YXdhaXQgYXBpLnRyYW5zZmVyVG9rZW5zKG8sTixfLHIpO2lzVG9rZW5UcmFuc2ZlclZlcmlmaWVkKEEsIm5mdCIsbyxOLF8sInRyYW5zZmVyRnJvbUNvbnRyYWN0Iil8fCh2W05dPV8sdz0hMSl9YXBpLmFzc2VydCh3LGB1bmFibGUgdG8gcmVsZWFzZSBsb2NrZWQgdG9rZW5zIGluOiAke2Z9LCBpZCAkeyR9YCk7bGV0IFQ9aC5sb2NrZWROZnRzJiZoLmxvY2tlZE5mdHMubGVuZ3RoPjA/aC5sb2NrZWROZnRzOltdO2lmKHcmJmgubG9ja2VkTmZ0cyYmaC5sb2NrZWROZnRzLmxlbmd0aD4wKXtsZXQgaz1hd2FpdCB0cmFuc2ZlckFuZFZlcmlmeU5mdHMoIm5mdCIsImNvbnRyYWN0IixvLHIsaC5sb2NrZWROZnRzLGEse25hbWU6Im5mdCJ9KTtoLmxvY2tlZE5mdHM9ay5mYWlsLGgubG9ja2VkTmZ0cy5sZW5ndGg+MCYmKHc9ITEpLGFwaS5hc3NlcnQodyxgdW5hYmxlIHRvIHJlbGVhc2UgbG9ja2VkIE5GVCBpbnN0YW5jZXMgaW46ICR7Zn0sIGlkICR7JH1gKX1sZXQgQj1oLm93bmVkQnksRT1oLmxvY2tlZFRva2VucztoLmxvY2tlZFRva2Vucz12LHcmJihoLnByZXZpb3VzQWNjb3VudD1oLmFjY291bnQsaC5wcmV2aW91c093bmVkQnk9aC5vd25lZEJ5LGguYWNjb3VudD0ibnVsbCIsaC5vd25lZEJ5PSJ1IixnLmNpcmN1bGF0aW5nU3VwcGx5LT0xKSxhd2FpdCBhcGkuZGIudXBkYXRlKHksaCksdyYmYXBpLmVtaXQoImJ1cm4iLHthY2NvdW50Om8sb3duZWRCeTpCLHVubG9ja2VkVG9rZW5zOkUsdW5sb2NrZWROZnRzOlQsc3ltYm9sOmYsaWQ6JH0pfX19YXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsZyl9fX19LGFjdGlvbnMudHJhbnNmZXI9YXN5bmMgZT0+e2xldHtmcm9tVHlwZTp0LHRvOnMsdG9UeXBlOmEsbmZ0czpuLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppLGNhbGxpbmdDb250cmFjdEluZm86cn09ZSxvPVsidXNlciIsImNvbnRyYWN0Il0sbD12b2lkIDA9PT1hPyJ1c2VyIjphLGQ9dm9pZCAwPT09dD8idXNlciI6dDtpZihhcGkuYXNzZXJ0KCEwPT09aSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoZCYmInN0cmluZyI9PXR5cGVvZiBkJiZvLmluY2x1ZGVzKGQpJiZzJiYic3RyaW5nIj09dHlwZW9mIHMmJmwmJiJzdHJpbmciPT10eXBlb2YgbCYmby5pbmNsdWRlcyhsKSYmKHJ8fHZvaWQgMD09PXImJiJ1c2VyIj09PWQpJiZuJiYib2JqZWN0Ij09dHlwZW9mIG4mJkFycmF5LmlzQXJyYXkobiksImludmFsaWQgcGFyYW1zIikmJmlzVmFsaWROZnRJZEFycmF5KG4pKXtsZXQgdT0idXNlciI9PT1sP3MudHJpbSgpLnRvTG93ZXJDYXNlKCk6cy50cmltKCksYz0idXNlciI9PT1sP2lzVmFsaWRIaXZlQWNjb3VudExlbmd0aCh1KTppc1ZhbGlkQ29udHJhY3RMZW5ndGgodSksZj0idXNlciI9PT1kP2FwaS5zZW5kZXI6ci5uYW1lO2lmKGFwaS5hc3NlcnQoYywiaW52YWxpZCB0byIpJiZhcGkuYXNzZXJ0KCEobD09PWQmJnU9PT1mKSwiY2Fubm90IHRyYW5zZmVyIHRvIHNlbGYiKSYmYXBpLmFzc2VydCghKCJ1c2VyIj09PWwmJiJudWxsIj09PXUpLCJjYW5ub3QgdHJhbnNmZXIgdG8gbnVsbDsgdXNlIGJ1cm4gYWN0aW9uIGluc3RlYWQiKSlmb3IobGV0IHA9MDtwPG4ubGVuZ3RoO3ArPTEpe2xldHtzeW1ib2w6ZyxpZHM6eX09bltwXSxtPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOmd9KTtpZihtKXtsZXQgJD1nKyJpbnN0YW5jZXMiO2ZvcihsZXQgaD0wO2g8eS5sZW5ndGg7aCs9MSl7bGV0IGI9eVtoXSx2PWF3YWl0IGFwaS5kYi5maW5kT25lKCQse19pZDphcGkuQmlnTnVtYmVyKGIpLnRvTnVtYmVyKCl9KTtpZih2JiZ2LmFjY291bnQ9PT1mJiYoInUiPT09di5vd25lZEJ5JiYidXNlciI9PT1kfHwiYyI9PT12Lm93bmVkQnkmJiJjb250cmFjdCI9PT1kKSYmdm9pZCAwPT09di5kZWxlZ2F0ZWRUbyYmIXYuc291bEJvdW5kKXtsZXQgdz12Lm93bmVkQnksTj0idXNlciI9PT1sPyJ1IjoiYyI7di5wcmV2aW91c0FjY291bnQ9di5hY2NvdW50LHYucHJldmlvdXNPd25lZEJ5PXYub3duZWRCeSx2LmFjY291bnQ9dSx2Lm93bmVkQnk9Tixhd2FpdCBhcGkuZGIudXBkYXRlKCQsdiksYXBpLmVtaXQoInRyYW5zZmVyIix7ZnJvbTpmLGZyb21UeXBlOncsdG86dSx0b1R5cGU6TixzeW1ib2w6ZyxpZDpifSl9fX19fX0sYWN0aW9ucy5kZWxlZ2F0ZT1hc3luYyBlPT57bGV0e2Zyb21UeXBlOnQsdG86cyx0b1R5cGU6YSxuZnRzOm4saXNTaWduZWRXaXRoQWN0aXZlS2V5OmksY2FsbGluZ0NvbnRyYWN0SW5mbzpyfT1lLG89WyJ1c2VyIiwiY29udHJhY3QiXSxsPXZvaWQgMD09PWE/InVzZXIiOmEsZD12b2lkIDA9PT10PyJ1c2VyIjp0O2lmKGFwaS5hc3NlcnQoITA9PT1pLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChkJiYic3RyaW5nIj09dHlwZW9mIGQmJm8uaW5jbHVkZXMoZCkmJnMmJiJzdHJpbmciPT10eXBlb2YgcyYmbCYmInN0cmluZyI9PXR5cGVvZiBsJiZvLmluY2x1ZGVzKGwpJiYocnx8dm9pZCAwPT09ciYmInVzZXIiPT09ZCkmJm4mJiJvYmplY3QiPT10eXBlb2YgbiYmQXJyYXkuaXNBcnJheShuKSwiaW52YWxpZCBwYXJhbXMiKSYmaXNWYWxpZE5mdElkQXJyYXkobikpe2xldCB1PSJ1c2VyIj09PWw/cy50cmltKCkudG9Mb3dlckNhc2UoKTpzLnRyaW0oKSxjPSJ1c2VyIj09PWw/aXNWYWxpZEhpdmVBY2NvdW50TGVuZ3RoKHUpOmlzVmFsaWRDb250cmFjdExlbmd0aCh1KSxmPSJ1c2VyIj09PWQ/YXBpLnNlbmRlcjpyLm5hbWU7aWYoYXBpLmFzc2VydChjLCJpbnZhbGlkIHRvIikmJmFwaS5hc3NlcnQoIShsPT09ZCYmdT09PWYpLCJjYW5ub3QgZGVsZWdhdGUgdG8gc2VsZiIpJiZhcGkuYXNzZXJ0KCEoInVzZXIiPT09bCYmIm51bGwiPT09dSksImNhbm5vdCBkZWxlZ2F0ZSB0byBudWxsIikpZm9yKGxldCBwPTA7cDxuLmxlbmd0aDtwKz0xKXtsZXR7c3ltYm9sOmcsaWRzOnl9PW5bcF0sbT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpnfSk7aWYobSYmYXBpLmFzc2VydCghMD09PW0uZGVsZWdhdGlvbkVuYWJsZWQsYGRlbGVnYXRpb24gbm90IGVuYWJsZWQgZm9yICR7Z31gKSl7bGV0ICQ9ZysiaW5zdGFuY2VzIjtmb3IobGV0IGg9MDtoPHkubGVuZ3RoO2grPTEpe2xldCBiPXlbaF0sdj1hd2FpdCBhcGkuZGIuZmluZE9uZSgkLHtfaWQ6YXBpLkJpZ051bWJlcihiKS50b051bWJlcigpfSk7aWYodiYmdi5hY2NvdW50PT09ZiYmKCJ1Ij09PXYub3duZWRCeSYmInVzZXIiPT09ZHx8ImMiPT09di5vd25lZEJ5JiYiY29udHJhY3QiPT09ZCkmJnZvaWQgMD09PXYuZGVsZWdhdGVkVG8pe2xldCB3PSJ1c2VyIj09PWw/InUiOiJjIixOPXthY2NvdW50OnUsb3duZWRCeTp3fTt2LmRlbGVnYXRlZFRvPU4sYXdhaXQgYXBpLmRiLnVwZGF0ZSgkLHYpLGFwaS5lbWl0KCJkZWxlZ2F0ZSIse2Zyb206Zixmcm9tVHlwZTp2Lm93bmVkQnksdG86dSx0b1R5cGU6dyxzeW1ib2w6ZyxpZDpifSksYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJtaW5pbmciLCJoYW5kbGVOZnREZWxlZ2F0aW9uQ2hhbmdlIix7c3ltYm9sOmcsbmZ0OnYsYWRkOiEwfSl9fX19fX0sYWN0aW9ucy51bmRlbGVnYXRlPWFzeW5jIGU9PntsZXR7ZnJvbVR5cGU6dCxuZnRzOnMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmEsY2FsbGluZ0NvbnRyYWN0SW5mbzpufT1lLGk9WyJ1c2VyIiwiY29udHJhY3QiXSxyPXZvaWQgMD09PXQ/InVzZXIiOnQ7aWYoYXBpLmFzc2VydCghMD09PWEsInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHImJiJzdHJpbmciPT10eXBlb2YgciYmaS5pbmNsdWRlcyhyKSYmKG58fHZvaWQgMD09PW4mJiJ1c2VyIj09PXIpJiZzJiYib2JqZWN0Ij09dHlwZW9mIHMmJkFycmF5LmlzQXJyYXkocyksImludmFsaWQgcGFyYW1zIikmJmlzVmFsaWROZnRJZEFycmF5KHMpKXtsZXQgbz0idXNlciI9PT1yP2FwaS5zZW5kZXI6bi5uYW1lLGw9bmV3IERhdGUoYCR7YXBpLmhpdmVCbG9ja1RpbWVzdGFtcH0uMDAwWmApO2ZvcihsZXQgZD0wO2Q8cy5sZW5ndGg7ZCs9MSl7bGV0e3N5bWJvbDp1LGlkczpjfT1zW2RdLGY9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6dX0pO2lmKGYmJmFwaS5hc3NlcnQoITA9PT1mLmRlbGVnYXRpb25FbmFibGVkLGBkZWxlZ2F0aW9uIG5vdCBlbmFibGVkIGZvciAke3V9YCkpe2xldCBwPTg2NGU1KmYudW5kZWxlZ2F0aW9uQ29vbGRvd24sZz1sLmdldFRpbWUoKStwLHk9dSsiaW5zdGFuY2VzIixtPXtzeW1ib2w6dSxpZHM6W10sY29tcGxldGVUaW1lc3RhbXA6Z307Zm9yKGxldCAkPTA7JDxjLmxlbmd0aDskKz0xKXtsZXQgaD1jWyRdLGI9YXdhaXQgYXBpLmRiLmZpbmRPbmUoeSx7X2lkOmFwaS5CaWdOdW1iZXIoaCkudG9OdW1iZXIoKX0pO2ImJmIuYWNjb3VudD09PW8mJigidSI9PT1iLm93bmVkQnkmJiJ1c2VyIj09PXJ8fCJjIj09PWIub3duZWRCeSYmImNvbnRyYWN0Ij09PXIpJiZiLmRlbGVnYXRlZFRvJiZ2b2lkIDA9PT1iLmRlbGVnYXRlZFRvLnVuZGVsZWdhdGVBdCYmKGIuZGVsZWdhdGVkVG8udW5kZWxlZ2F0ZUF0PWcsbS5pZHMucHVzaChiLl9pZCksYXdhaXQgYXBpLmRiLnVwZGF0ZSh5LGIpLGFwaS5lbWl0KCJ1bmRlbGVnYXRlU3RhcnQiLHtmcm9tOmIuZGVsZWdhdGVkVG8uYWNjb3VudCxmcm9tVHlwZTpiLmRlbGVnYXRlZFRvLm93bmVkQnksc3ltYm9sOnUsaWQ6aH0pLGF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgibWluaW5nIiwiaGFuZGxlTmZ0RGVsZWdhdGlvbkNoYW5nZSIse3N5bWJvbDp1LG5mdDpiLGFkZDohMX0pKX1tLmlkcy5sZW5ndGg+MCYmYXdhaXQgYXBpLmRiLmluc2VydCgicGVuZGluZ1VuZGVsZWdhdGlvbnMiLG0pfX19fTtjb25zdCBwcm9jZXNzVW5kZWxlZ2F0aW9uPWFzeW5jIGU9PntsZXR7c3ltYm9sOnQsaWRzOnN9PWUsYT10KyJpbnN0YW5jZXMiLG49YXdhaXQgYXBpLmRiLmZpbmQoYSx7X2lkOnskaW46c319LDUwLDAsW3tpbmRleDoiX2lkIixkZXNjZW5kaW5nOiExfV0pO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSs9MSlkZWxldGUgbltpXS5kZWxlZ2F0ZWRUbyxhd2FpdCBhcGkuZGIudXBkYXRlKGEsbltpXSx7ZGVsZWdhdGVkVG86IiJ9KTthd2FpdCBhcGkuZGIucmVtb3ZlKCJwZW5kaW5nVW5kZWxlZ2F0aW9ucyIsZSksYXBpLmVtaXQoInVuZGVsZWdhdGVEb25lIix7c3ltYm9sOnQsaWRzOnN9KX07YWN0aW9ucy5jaGVja1BlbmRpbmdVbmRlbGVnYXRpb25zPWFzeW5jKCk9PntpZihhcGkuYXNzZXJ0KCJudWxsIj09PWFwaS5zZW5kZXIsIm5vdCBhdXRob3JpemVkIikpe2xldCBlPW5ldyBEYXRlKGAke2FwaS5oaXZlQmxvY2tUaW1lc3RhbXB9LjAwMFpgKSx0PWUuZ2V0VGltZSgpLHM9YXdhaXQgYXBpLmRiLmZpbmQoInBlbmRpbmdVbmRlbGVnYXRpb25zIix7Y29tcGxldGVUaW1lc3RhbXA6eyRsdGU6dH19KSxhPXMubGVuZ3RoO2Zvcig7YT4wOyl7Zm9yKGxldCBuPTA7bjxhO24rPTEpe2xldCBpPXNbbl07YXdhaXQgcHJvY2Vzc1VuZGVsZWdhdGlvbihpKX1hPShzPWF3YWl0IGFwaS5kYi5maW5kKCJwZW5kaW5nVW5kZWxlZ2F0aW9ucyIse2NvbXBsZXRlVGltZXN0YW1wOnskbHRlOnR9fSkpLmxlbmd0aH19fSxhY3Rpb25zLmNyZWF0ZT1hc3luYyBlPT57bGV0e25hbWU6dCxvcmdOYW1lOnMscHJvZHVjdE5hbWU6YSxzeW1ib2w6bix1cmw6aSxtYXhTdXBwbHk6cixhdXRob3JpemVkSXNzdWluZ0FjY291bnRzOm8sYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHM6bCxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6ZH09ZSx1PWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KSx7bmZ0Q3JlYXRpb25GZWU6Y309dSxmPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOiJCRUUifSkscD0hIWFwaS5CaWdOdW1iZXIoYykubHRlKDApfHxmJiZhcGkuQmlnTnVtYmVyKGYuYmFsYW5jZSkuZ3RlKGMpO2lmKGFwaS5hc3NlcnQocCwieW91IG11c3QgaGF2ZSBlbm91Z2ggdG9rZW5zIHRvIGNvdmVyIHRoZSBjcmVhdGlvbiBmZWVzIikmJmFwaS5hc3NlcnQoITA9PT1kLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCh0JiYic3RyaW5nIj09dHlwZW9mIHQmJm4mJiJzdHJpbmciPT10eXBlb2YgbiYmKHZvaWQgMD09PWl8fGkmJiJzdHJpbmciPT10eXBlb2YgaSkmJih2b2lkIDA9PT1zfHxzJiYic3RyaW5nIj09dHlwZW9mIHMpJiYodm9pZCAwPT09YXx8YSYmInN0cmluZyI9PXR5cGVvZiBhKSYmKHZvaWQgMD09PW98fG8mJiJvYmplY3QiPT10eXBlb2YgbyYmQXJyYXkuaXNBcnJheShvKSkmJih2b2lkIDA9PT1sfHxsJiYib2JqZWN0Ij09dHlwZW9mIGwmJkFycmF5LmlzQXJyYXkobCkpJiYodm9pZCAwPT09cnx8ciYmInN0cmluZyI9PXR5cGVvZiByJiYhYXBpLkJpZ051bWJlcihyKS5pc05hTigpKSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChhcGkudmFsaWRhdG9yLmlzQWxwaGEobikmJmFwaS52YWxpZGF0b3IuaXNVcHBlcmNhc2UobikmJm4ubGVuZ3RoPjAmJm4ubGVuZ3RoPD0xMCwiaW52YWxpZCBzeW1ib2w6IHVwcGVyY2FzZSBsZXR0ZXJzIG9ubHksIG1heCBsZW5ndGggb2YgMTAiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1SRVNFUlZFRF9TWU1CT0xTW25dfHxhcGkuc2VuZGVyPT09UkVTRVJWRURfU1lNQk9MU1tuXSwiY2Fubm90IHVzZSB0aGlzIHN5bWJvbCIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QodCwiICIpKSYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PTUwLCJpbnZhbGlkIG5hbWU6IGxldHRlcnMsIG51bWJlcnMsIHdoaXRlc3BhY2VzIG9ubHksIG1heCBsZW5ndGggb2YgNTAiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1zfHxhcGkudmFsaWRhdG9yLmlzQWxwaGFudW1lcmljKGFwaS52YWxpZGF0b3IuYmxhY2tsaXN0KHMsIiAiKSkmJnMubGVuZ3RoPjAmJnMubGVuZ3RoPD01MCwiaW52YWxpZCBvcmcgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWF8fGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QoYSwiICIpKSYmYS5sZW5ndGg+MCYmYS5sZW5ndGg8PTUwLCJpbnZhbGlkIHByb2R1Y3QgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWl8fGkubGVuZ3RoPD0yNTUsImludmFsaWQgdXJsOiBtYXggbGVuZ3RoIG9mIDI1NSIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PXJ8fGFwaS5CaWdOdW1iZXIocikuZ3QoMCksIm1heFN1cHBseSBtdXN0IGJlIHBvc2l0aXZlIikmJmFwaS5hc3NlcnQodm9pZCAwPT09cnx8YXBpLkJpZ051bWJlcihyKS5sdGUoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLGBtYXhTdXBwbHkgbXVzdCBiZSBsb3dlciB0aGFuICR7TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJ9YCkpe2xldCBnPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOm59KTtpZihhcGkuYXNzZXJ0KG51bGw9PT1nLCJzeW1ib2wgYWxyZWFkeSBleGlzdHMiKSl7aWYoYXBpLkJpZ051bWJlcihjKS5ndCgwKSl7bGV0IHk9YXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlciIse3RvOiJudWxsIixzeW1ib2w6IkJFRSIscXVhbnRpdHk6Yyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6ZH0pO2lmKCFpc1Rva2VuVHJhbnNmZXJWZXJpZmllZCh5LGFwaS5zZW5kZXIsIm51bGwiLCJCRUUiLGMsInRyYW5zZmVyIikpcmV0dXJuITF9bGV0IG09dm9pZCAwPT09cj8wOmFwaS5CaWdOdW1iZXIocikuaW50ZWdlclZhbHVlKGFwaS5CaWdOdW1iZXIuUk9VTkRfRE9XTikudG9OdW1iZXIoKSwkPXZvaWQgMD09PXM/IiI6cyxoPXZvaWQgMD09PWE/IiI6YSxiPXZvaWQgMD09PWk/IiI6aSx2PXt1cmw6Yn07dj1KU09OLnN0cmluZ2lmeSh2KTtsZXQgdz12b2lkIDA9PT1vP1thcGkuc2VuZGVyXTpbXSxOPXtpc3N1ZXI6YXBpLnNlbmRlcixzeW1ib2w6bixuYW1lOnQsb3JnTmFtZTokLHByb2R1Y3ROYW1lOmgsbWV0YWRhdGE6dixtYXhTdXBwbHk6bSxzdXBwbHk6MCxjaXJjdWxhdGluZ1N1cHBseTowLGRlbGVnYXRpb25FbmFibGVkOiExLHVuZGVsZWdhdGlvbkNvb2xkb3duOjAsYXV0aG9yaXplZElzc3VpbmdBY2NvdW50czp3LGF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzOltdLHByb3BlcnRpZXM6e30sZ3JvdXBCeTpbXX0sXz1uKyJpbnN0YW5jZXMiLEE9YXdhaXQgYXBpLmRiLnRhYmxlRXhpc3RzKF8pO3JldHVybiExPT09QSYmYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKF8sWyJhY2NvdW50Iiwib3duZWRCeSJdKSxhd2FpdCBhcGkuZGIuaW5zZXJ0KCJuZnRzIixOKSx2b2lkIDAhPT1vJiZhd2FpdCBhY3Rpb25zLmFkZEF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMoe2FjY291bnRzOm8sc3ltYm9sOm4saXNTaWduZWRXaXRoQWN0aXZlS2V5OmR9KSx2b2lkIDAhPT1sJiZhd2FpdCBhY3Rpb25zLmFkZEF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzKHtjb250cmFjdHM6bCxzeW1ib2w6bixpc1NpZ25lZFdpdGhBY3RpdmVLZXk6ZH0pLCEwfX1yZXR1cm4hMX0sYWN0aW9ucy5pc3N1ZT1hc3luYyBlPT57bGV0e3N5bWJvbDp0LGZyb21UeXBlOnMsdG86YSx0b1R5cGU6bixmZWVTeW1ib2w6aSxsb2NrVG9rZW5zOnIsbG9ja05mdHM6byxzb3VsQm91bmQ6bCxwcm9wZXJ0aWVzOmQsaXNTaWduZWRXaXRoQWN0aXZlS2V5OnUsY2FsbGluZ0NvbnRyYWN0SW5mbzpjfT1lLGY9WyJ1c2VyIiwiY29udHJhY3QiXSxwPXZvaWQgMD09PW4/InVzZXIiOm4sZz12b2lkIDA9PT1zPyJ1c2VyIjpzLHk9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pLHtuZnRJc3N1YW5jZUZlZTptfT15O2lmKGFwaS5hc3NlcnQoITA9PT11LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCh0JiYic3RyaW5nIj09dHlwZW9mIHQmJmcmJiJzdHJpbmciPT10eXBlb2YgZyYmZi5pbmNsdWRlcyhnKSYmKGN8fHZvaWQgMD09PWMmJiJ1c2VyIj09PWcpJiZhJiYic3RyaW5nIj09dHlwZW9mIGEmJnAmJiJzdHJpbmciPT10eXBlb2YgcCYmZi5pbmNsdWRlcyhwKSYmaSYmInN0cmluZyI9PXR5cGVvZiBpJiZpIGluIG0mJih2b2lkIDA9PT1kfHxkJiYib2JqZWN0Ij09dHlwZW9mIGQpJiYodm9pZCAwPT09cnx8ciYmIm9iamVjdCI9PXR5cGVvZiByKSYmKHZvaWQgMD09PW98fG8mJiJvYmplY3QiPT10eXBlb2YgbyYmQXJyYXkuaXNBcnJheShvKSkmJih2b2lkIDA9PT1sfHxsJiYiYm9vbGVhbiI9PXR5cGVvZiBsKSwiaW52YWxpZCBwYXJhbXMiKSYmKHZvaWQgMD09PW98fGlzVmFsaWROZnRJZEFycmF5KG8pKSl7bGV0ICQ9InVzZXIiPT09cD9hLnRyaW0oKS50b0xvd2VyQ2FzZSgpOmEudHJpbSgpLGg9InVzZXIiPT09cD9pc1ZhbGlkSGl2ZUFjY291bnRMZW5ndGgoJCk6aXNWYWxpZENvbnRyYWN0TGVuZ3RoKCQpLGI9InVzZXIiPT09Zz9hcGkuc2VuZGVyOmMubmFtZSx2PSJ1c2VyIj09PWc/ImJhbGFuY2VzIjoiY29udHJhY3RzQmFsYW5jZXMiO2lmKGFwaS5hc3NlcnQoaCwiaW52YWxpZCB0byIpKXtsZXQgdz1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDp0fSksTj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDppfSk7aWYoYXBpLmFzc2VydChudWxsIT09dywic3ltYm9sIGRvZXMgbm90IGV4aXN0IikmJmFwaS5hc3NlcnQobnVsbCE9PU4sImZlZSBzeW1ib2wgZG9lcyBub3QgZXhpc3QiKSl7bGV0IF89dCsiaW5zdGFuY2VzIjtpZihhcGkuYXNzZXJ0KCJjb250cmFjdCI9PT1nJiZ3LmF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzLmluY2x1ZGVzKGIpfHwidXNlciI9PT1nJiZ3LmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMuaW5jbHVkZXMoYiksIm5vdCBhbGxvd2VkIHRvIGlzc3VlIHRva2VucyIpJiZhcGkuYXNzZXJ0KDA9PT13Lm1heFN1cHBseXx8dy5zdXBwbHk8dy5tYXhTdXBwbHksIm1heCBzdXBwbHkgbGltaXQgcmVhY2hlZCIpKXtsZXQgQT1PYmplY3Qua2V5cyh3LnByb3BlcnRpZXMpLmxlbmd0aCxUPWFwaS5CaWdOdW1iZXIobVtpXSkubXVsdGlwbGllZEJ5KEEpLGs9Y2FsY3VsYXRlQmFsYW5jZShtW2ldLFQsTi5wcmVjaXNpb24sITApLEI9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLHYse2FjY291bnQ6YixzeW1ib2w6aX0pLEU9ISFhcGkuQmlnTnVtYmVyKGspLmx0ZSgwKXx8QiYmYXBpLkJpZ051bWJlcihCLmJhbGFuY2UpLmd0ZShrKTtpZihyKXtsZXQgTz1hd2FpdCBpc1ZhbGlkVG9rZW5CYXNrZXQocix2LGIsaSxrKTtpZighYXBpLmFzc2VydChPLCJpbnZhbGlkIGJhc2tldCBvZiB0b2tlbnMgdG8gbG9jayAoY2Fubm90IGxvY2sgbW9yZSB0aGFuIDEwIHRva2VuIHR5cGVzOyBpc3N1aW5nIGFjY291bnQgbXVzdCBoYXZlIGVub3VnaCBiYWxhbmNlKSIpKXJldHVybiExfWxldCBDPXt9O2lmKHZvaWQgMCE9PWQpe3RyeXtpZighaXNWYWxpZERhdGFQcm9wZXJ0aWVzKGIsZyx3LGQpKXJldHVybiExfWNhdGNoKEkpe3JldHVybiExfUM9ZH1pZihhcGkuYXNzZXJ0KEUsInlvdSBtdXN0IGhhdmUgZW5vdWdoIHRva2VucyB0byBjb3ZlciB0aGUgaXNzdWFuY2UgZmVlcyIpKXtpZihhcGkuQmlnTnVtYmVyKGspLmd0KDApKXtpZigiY29udHJhY3QiPT09Zyl7bGV0IFM9YXdhaXQgYXBpLnRyYW5zZmVyVG9rZW5zRnJvbUNhbGxpbmdDb250cmFjdCgibnVsbCIsaSxrLCJ1c2VyIik7aWYoIWFwaS5hc3NlcnQoaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQoUyxiLCJudWxsIixpLGssInRyYW5zZmVyRnJvbUNvbnRyYWN0IiksInVuYWJsZSB0byB0cmFuc2ZlciBpc3N1YW5jZSBmZWUiKSlyZXR1cm4hMX1lbHNle2xldCBWPWF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOmkscXVhbnRpdHk6ayxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6dX0pO2lmKCFhcGkuYXNzZXJ0KGlzVG9rZW5UcmFuc2ZlclZlcmlmaWVkKFYsYiwibnVsbCIsaSxrLCJ0cmFuc2ZlciIpLCJ1bmFibGUgdG8gdHJhbnNmZXIgaXNzdWFuY2UgZmVlIikpcmV0dXJuITF9fWxldCB4PXt9O2lmKHIpZm9yKGxldFtqLExdb2YgT2JqZWN0LmVudHJpZXMocikpaWYoImNvbnRyYWN0Ij09PWcpe2xldCB6PWF3YWl0IGFwaS50cmFuc2ZlclRva2Vuc0Zyb21DYWxsaW5nQ29udHJhY3QoIm5mdCIsaixMLCJjb250cmFjdCIpO2lzVG9rZW5UcmFuc2ZlclZlcmlmaWVkKHosYiwibmZ0IixqLEwsInRyYW5zZmVyRnJvbUNvbnRyYWN0IikmJih4W2pdPUwpfWVsc2V7bGV0IFI9YXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlclRvQ29udHJhY3QiLHt0bzoibmZ0IixzeW1ib2w6aixxdWFudGl0eTpMLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTp1fSk7aXNUb2tlblRyYW5zZmVyVmVyaWZpZWQoUixiLCJuZnQiLGosTCwidHJhbnNmZXJUb0NvbnRyYWN0IikmJih4W2pdPUwpfWxldCBGPVtdO2lmKG8mJm8ubGVuZ3RoPjApe2xldCBEPWF3YWl0IHRyYW5zZmVyQW5kVmVyaWZ5TmZ0cyhiLGcsIm5mdCIsImNvbnRyYWN0IixvLHUsYyk7Rj1ELnN1Y2Nlc3N9bGV0IE09InVzZXIiPT09cD8idSI6ImMiLFA9e307UD1GLmxlbmd0aD4wP3thY2NvdW50OiQsc291bEJvdW5kOmwsb3duZWRCeTpNLGxvY2tlZFRva2Vuczp4LGxvY2tlZE5mdHM6Rixwcm9wZXJ0aWVzOkN9OnthY2NvdW50OiQsc291bEJvdW5kOmwsb3duZWRCeTpNLGxvY2tlZFRva2Vuczp4LHByb3BlcnRpZXM6Q307bGV0IFU9YXdhaXQgYXBpLmRiLmluc2VydChfLFApO3JldHVybiB3LnN1cHBseSs9MSwoIm51bGwiIT09JHx8ImNvbnRyYWN0Ij09PXApJiYody5jaXJjdWxhdGluZ1N1cHBseSs9MSksYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsdyksYXBpLmVtaXQoImlzc3VlIix7ZnJvbTpiLGZyb21UeXBlOmcsdG86JCx0b1R5cGU6cCxzeW1ib2w6dCxsb2NrZWRUb2tlbnM6eCxsb2NrZWROZnRzOkYsc291bEJvdW5kOiEhbCxwcm9wZXJ0aWVzOkMsaWQ6VS5faWR9KSwhMH19fX19cmV0dXJuITF9LGFjdGlvbnMuaXNzdWVNdWx0aXBsZT1hc3luYyBlPT57bGV0e2luc3RhbmNlczp0LGlzU2lnbmVkV2l0aEFjdGl2ZUtleTpzLGNhbGxpbmdDb250cmFjdEluZm86YX09ZTtpZihhcGkuYXNzZXJ0KCEwPT09cywieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQodCYmIm9iamVjdCI9PXR5cGVvZiB0JiZBcnJheS5pc0FycmF5KHQpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KHQubGVuZ3RoPD0xMCwiY2Fubm90IGlzc3VlIG1vcmUgdGhhbiAxMCBORlQgaW5zdGFuY2VzIGF0IG9uY2UiKSl7bGV0IG49MDtpZih0LmZvckVhY2goZT0+e2UubG9ja05mdHMmJihuKz0xKX0pLGFwaS5hc3NlcnQobjw9MSwiY2Fubm90IGlzc3VlIG1vcmUgdGhhbiAxIGNvbnRhaW5lciBORlQgaW5zdGFuY2VzIGF0IG9uY2UiKSYmYXBpLmFzc2VydCgwPT09bnx8bj09PXQubGVuZ3RoLCJjYW5ub3QgaXNzdWUgYSBtaXggb2YgY29udGFpbmVyIGFuZCBub24tY29udGFpbmVyIE5GVCBpbnN0YW5jZXMgc2ltdWx0YW5lb3VzbHkiKSlmb3IobGV0IGk9MDtpPHQubGVuZ3RoO2krPTEpe2xldHtzeW1ib2w6cixmcm9tVHlwZTpvLHRvOmwsdG9UeXBlOmQsZmVlU3ltYm9sOnUsbG9ja1Rva2VuczpjLHNvdWxCb3VuZDpmLGxvY2tOZnRzOnAscHJvcGVydGllczpnfT10W2ldO2F3YWl0IGFjdGlvbnMuaXNzdWUoe3N5bWJvbDpyLGZyb21UeXBlOm8sdG86bCx0b1R5cGU6ZCxmZWVTeW1ib2w6dSxsb2NrVG9rZW5zOmMsc291bEJvdW5kOmYsbG9ja05mdHM6cCxwcm9wZXJ0aWVzOmcsaXNTaWduZWRXaXRoQWN0aXZlS2V5OnMsY2FsbGluZ0NvbnRyYWN0SW5mbzphfSl9fX07"}}}
{"id":"ssc-testnet-hive","json":{"contractName":"contract","contractAction":"deploy","contractPayload":{"name":"nft","params":"","code":"Y29uc3QgQ09OVFJBQ1RfTkFNRT0ibmZ0IixVVElMSVRZX1RPS0VOX1NZTUJPTD0iQkVFIixNQVhfTlVNX0FVVEhPUklaRURfSVNTVUVSUz0xMCxNQVhfTlVNX0xPQ0tFRF9UT0tFTl9UWVBFUz0xMCxNQVhfU1lNQk9MX0xFTkdUSD0xMCxNQVhfREFUQV9QUk9QRVJUWV9MRU5HVEg9MTAwLE1BWF9OVU1fTkZUU19JU1NVQUJMRT0xMCxNQVhfTlVNX05GVFNfRURJVEFCTEU9NTAsTUFYX05VTV9ORlRTX09QRVJBQkxFPTUwLE1BWF9OVU1fQ09OVEFJTkVSX05GVFNfT1BFUkFCTEU9MSxSRVNFUlZFRF9TWU1CT0xTPXtDRUxMOiJiZWdnYXJzIixRVVNUOiJzaW1wbGVnYW1lIixURVNURVJBOiJhZ2dyb2VkIixTUVJMOiJzdHVmZmJ5c3BlbmNlciIsQ1JBRlQ6ImltbWFudWVsOTQiLE1VU0lDOiJhdG9tY29sbGVjdG9yIixDR1VMTDoiY2d1bGwiLE5GVDoiY2FkYXdnIixSQVJFOiJiZWdnYXJzIixMSUM6ImxpY3Rva2VuIixNRU1CRVI6Im1lbWJlcnRva2VuIixDT0ZGRUU6ImMwZmYzM2EiLEFSVDoiYnlvIixST0NLOiJiZWdnYXJzIixDUklUVEVSOiJjcnlwdG9tYW5jZXIiLENJVFk6ImdlcmJlciIsTU9OU1RFUlM6InNpbXBsZWdhbWUiLFNFVFM6Imxvb3RraXQuZ2FtZXMiLEFOSU1FOiJhbmltZXRva2VuIixQSE9UT0ZUOiJ3d3dpZWJlIixCRUVSOiJkZXRsZXYiLFNQSVI6InNwaW52ZXN0IixJRkc6Imxpb24yMDAiLEdVSUxEUzoic2ltcGxlZ2FtZSIsRkNBUkQ6Imxpb24yMDAiLFBYTDoicGl4ZWxuZnQiLENPVzoic3R1ZmZieXNwZW5jZXIiLExPT09UOiJzdHVmZmJ5c3BlbmNlciIsQVBJOiJzdGVlbWNpdHlhcGkiLFNQT1JUU01PTToic3BvcnRzdGVzdGVyIixTV1Q6InNhdHJlbiIsU1RBUjoiYXRvbWNvbGxlY3RvciJ9O2FjdGlvbnMuY3JlYXRlU1NDPWFzeW5jKCk9PntsZXQgZT1hd2FpdCBhcGkuZGIudGFibGVFeGlzdHMoIm5mdHMiKTtpZighMT09PWUpe2F3YWl0IGFwaS5kYi5jcmVhdGVUYWJsZSgibmZ0cyIsWyJzeW1ib2wiXSksYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCJwYXJhbXMiKSxhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoInBlbmRpbmdVbmRlbGVnYXRpb25zIixbInN5bWJvbCIsImNvbXBsZXRlVGltZXN0YW1wIl0pO2xldCB0PXt9O3QubmZ0Q3JlYXRpb25GZWU9IjEwMCIsdC5uZnRJc3N1YW5jZUZlZT17QkVFOiIwLjAwMSIsUEFMOiIwLjAwMSJ9LHQuZGF0YVByb3BlcnR5Q3JlYXRpb25GZWU9IjEwMCIsdC5lbmFibGVEZWxlZ2F0aW9uRmVlPSIxMDAwIixhd2FpdCBhcGkuZGIuaW5zZXJ0KCJwYXJhbXMiLHQpfX0sYWN0aW9ucy51cGRhdGVQYXJhbXM9YXN5bmMgZT0+e2lmKGFwaS5zZW5kZXIhPT1hcGkub3duZXIpcmV0dXJuO2xldHtuZnRDcmVhdGlvbkZlZTp0LG5mdElzc3VhbmNlRmVlOnMsZGF0YVByb3BlcnR5Q3JlYXRpb25GZWU6YSxlbmFibGVEZWxlZ2F0aW9uRmVlOm59PWUsaT1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSk7dCYmInN0cmluZyI9PXR5cGVvZiB0JiYhYXBpLkJpZ051bWJlcih0KS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKHQpLmd0ZSgwKSYmKGkubmZ0Q3JlYXRpb25GZWU9dCkscyYmIm9iamVjdCI9PXR5cGVvZiBzJiYoaS5uZnRJc3N1YW5jZUZlZT1zKSxhJiYic3RyaW5nIj09dHlwZW9mIGEmJiFhcGkuQmlnTnVtYmVyKGEpLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIoYSkuZ3RlKDApJiYoaS5kYXRhUHJvcGVydHlDcmVhdGlvbkZlZT1hKSxuJiYic3RyaW5nIj09dHlwZW9mIG4mJiFhcGkuQmlnTnVtYmVyKG4pLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIobikuZ3RlKDApJiYoaS5lbmFibGVEZWxlZ2F0aW9uRmVlPW4pLGF3YWl0IGFwaS5kYi51cGRhdGUoInBhcmFtcyIsaSl9O2NvbnN0IGlzVG9rZW5UcmFuc2ZlclZlcmlmaWVkPShlLHQscyxhLG4saSk9PnZvaWQgMD09PWUuZXJyb3JzJiYhIWUuZXZlbnRzJiZ2b2lkIDAhPT1lLmV2ZW50cy5maW5kKGU9PiJ0b2tlbnMiPT09ZS5jb250cmFjdCYmZS5ldmVudD09PWkmJmUuZGF0YS5mcm9tPT09dCYmZS5kYXRhLnRvPT09cyYmZS5kYXRhLnF1YW50aXR5PT09biYmZS5kYXRhLnN5bWJvbD09PWEpLGNhbGN1bGF0ZUJhbGFuY2U9KGUsdCxzLGEpPT5hP2FwaS5CaWdOdW1iZXIoZSkucGx1cyh0KS50b0ZpeGVkKHMpOmFwaS5CaWdOdW1iZXIoZSkubWludXModCkudG9GaXhlZChzKSxjb3VudERlY2ltYWxzPWU9PmFwaS5CaWdOdW1iZXIoZSkuZHAoKSxjb250YWluc0R1cGxpY2F0ZXM9ZT0+bmV3IFNldChlKS5zaXplIT09ZS5sZW5ndGgsaXNWYWxpZEhpdmVBY2NvdW50TGVuZ3RoPWU9PmUubGVuZ3RoPj0zJiZlLmxlbmd0aDw9MTYsaXNWYWxpZENvbnRyYWN0TGVuZ3RoPWU9PmUubGVuZ3RoPj0zJiZlLmxlbmd0aDw9NTAsaXNWYWxpZEFjY291bnRzQXJyYXk9ZT0+e2xldCB0PSEwO3JldHVybiBlLmZvckVhY2goZT0+eyJzdHJpbmciPT10eXBlb2YgZSYmaXNWYWxpZEhpdmVBY2NvdW50TGVuZ3RoKGUpfHwodD0hMSl9KSx0fSxpc1ZhbGlkQ29udHJhY3RzQXJyYXk9ZT0+e2xldCB0PSEwO3JldHVybiBlLmZvckVhY2goZT0+eyJzdHJpbmciPT10eXBlb2YgZSYmaXNWYWxpZENvbnRyYWN0TGVuZ3RoKGUpfHwodD0hMSl9KSx0fSxpc1ZhbGlkRGF0YVByb3BlcnRpZXM9KGUsdCxzLGEpPT57bGV0IG49T2JqZWN0LmtleXMoYSkubGVuZ3RoLGk9T2JqZWN0LmtleXMocy5wcm9wZXJ0aWVzKS5sZW5ndGg7aWYoIWFwaS5hc3NlcnQobjw9aSwiY2Fubm90IHNldCBtb3JlIGRhdGEgcHJvcGVydGllcyB0aGFuIE5GVCBoYXMiKSlyZXR1cm4hMTtmb3IobGV0W3Isb11vZiBPYmplY3QuZW50cmllcyhhKSl7bGV0IGw9ITE7aWYoYXBpLmFzc2VydChyJiYic3RyaW5nIj09dHlwZW9mIHImJmFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMocikmJnIubGVuZ3RoPjAmJnIubGVuZ3RoPD0yNSwiaW52YWxpZCBkYXRhIHByb3BlcnR5IG5hbWU6IGxldHRlcnMgJiBudW1iZXJzIG9ubHksIG1heCBsZW5ndGggb2YgMjUiKSYmYXBpLmFzc2VydChyIGluIHMucHJvcGVydGllcywiZGF0YSBwcm9wZXJ0eSBtdXN0IGV4aXN0Iikpe2xldCBkPXMucHJvcGVydGllc1tyXTthcGkuYXNzZXJ0KG51bGwhPW8mJih0eXBlb2Ygbz09PWQudHlwZXx8Im51bWJlciI9PT1kLnR5cGUmJiJzdHJpbmciPT10eXBlb2YgbyYmIWFwaS5CaWdOdW1iZXIobykuaXNOYU4oKSksYGRhdGEgcHJvcGVydHkgdHlwZSBtaXNtYXRjaDogZXhwZWN0ZWQgJHtkLnR5cGV9IGJ1dCBnb3QgJHt0eXBlb2Ygb30gZm9yIHByb3BlcnR5ICR7cn1gKSYmYXBpLmFzc2VydCgic3RyaW5nIiE9dHlwZW9mIG98fG8ubGVuZ3RoPD0xMDAsInN0cmluZyBwcm9wZXJ0eSBtYXggbGVuZ3RoIGlzIDEwMCBjaGFyYWN0ZXJzIikmJmFwaS5hc3NlcnQoImNvbnRyYWN0Ij09PXQmJmQuYXV0aG9yaXplZEVkaXRpbmdDb250cmFjdHMuaW5jbHVkZXMoZSl8fCJ1c2VyIj09PXQmJmQuYXV0aG9yaXplZEVkaXRpbmdBY2NvdW50cy5pbmNsdWRlcyhlKSwibm90IGFsbG93ZWQgdG8gc2V0IGRhdGEgcHJvcGVydGllcyIpJiYobD0hMCwibnVtYmVyIj09PWQudHlwZSYmInN0cmluZyI9PXR5cGVvZiBvJiYoYVtyXT1hcGkuQmlnTnVtYmVyKG8pLnRvTnVtYmVyKCkpKX1pZighbClyZXR1cm4hMX1yZXR1cm4hMH0saXNWYWxpZERhdGFQcm9wZXJ0aWVzQXJyYXk9KGUsdCxzLGEpPT57dHJ5e2ZvcihsZXQgbj0wO248YS5sZW5ndGg7bis9MSl7bGV0IGk9ITEse2lkOnIscHJvcGVydGllczpvfT1hW25dO2lmKGFwaS5hc3NlcnQociYmInN0cmluZyI9PXR5cGVvZiByJiYhYXBpLkJpZ051bWJlcihyKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKHIpLmd0KDApJiZvJiYib2JqZWN0Ij09dHlwZW9mIG8sImludmFsaWQgZGF0YSBwcm9wZXJ0aWVzIikmJmlzVmFsaWREYXRhUHJvcGVydGllcyhlLHQscyxvKSYmKGk9ITApLCFpKXJldHVybiExfX1jYXRjaChsKXtyZXR1cm4hMX1yZXR1cm4hMH0saXNWYWxpZE5mdElkQXJyYXk9ZT0+e3RyeXtsZXQgdD0wO2ZvcihsZXQgcz0wO3M8ZS5sZW5ndGg7cys9MSl7bGV0IGE9ITEse3N5bWJvbDpuLGlkczppfT1lW3NdO2lmKGFwaS5hc3NlcnQobiYmInN0cmluZyI9PXR5cGVvZiBuJiZhcGkudmFsaWRhdG9yLmlzQWxwaGEobikmJmFwaS52YWxpZGF0b3IuaXNVcHBlcmNhc2UobikmJm4ubGVuZ3RoPjAmJm4ubGVuZ3RoPD0xMCYmaSYmIm9iamVjdCI9PXR5cGVvZiBpJiZBcnJheS5pc0FycmF5KGkpLCJpbnZhbGlkIG5mdCBsaXN0IikmJih0Kz1pLmxlbmd0aCxhcGkuYXNzZXJ0KHQ8PTUwLCJjYW5ub3Qgb3BlcmF0ZSBvbiBtb3JlIHRoYW4gNTAgTkZUIGluc3RhbmNlcyBhdCBvbmNlIikpKXtmb3IobGV0IHI9MDtyPGkubGVuZ3RoO3IrPTEpe2xldCBvPWlbcl07aWYoIWFwaS5hc3NlcnQobyYmInN0cmluZyI9PXR5cGVvZiBvJiYhYXBpLkJpZ051bWJlcihvKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKG8pLmd0KDApLCJpbnZhbGlkIG5mdCBsaXN0IikpcmV0dXJuITF9YT0hMH1pZighYSlyZXR1cm4hMX19Y2F0Y2gobCl7cmV0dXJuITF9cmV0dXJuITB9LGlzVmFsaWRUb2tlbkJhc2tldD1hc3luYyhlLHQscyxhLG4pPT57dHJ5e2xldCBpPU9iamVjdC5rZXlzKGUpLmxlbmd0aDtpZihpPjEwKXJldHVybiExO2ZvcihsZXRbcixvXW9mIE9iamVjdC5lbnRyaWVzKGUpKXtsZXQgbD0hMTtpZigic3RyaW5nIj09dHlwZW9mIHImJmFwaS52YWxpZGF0b3IuaXNBbHBoYShyKSYmYXBpLnZhbGlkYXRvci5pc1VwcGVyY2FzZShyKSYmci5sZW5ndGg+MCYmci5sZW5ndGg8PTEwKXtsZXQgZD1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpyfSk7aWYoZCYmbyYmInN0cmluZyI9PXR5cGVvZiBvJiYhYXBpLkJpZ051bWJlcihvKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKG8pLmd0KDApJiZjb3VudERlY2ltYWxzKG8pPD1kLnByZWNpc2lvbil7bGV0IHU9cj09PWE/Y2FsY3VsYXRlQmFsYW5jZShvLG4sZC5wcmVjaXNpb24sITApOm8sYz1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsdCx7YWNjb3VudDpzLHN5bWJvbDpyfSk7YyYmYXBpLkJpZ051bWJlcihjLmJhbGFuY2UpLmd0ZSh1KSYmKGw9ITApfX1pZighbClyZXR1cm4hMX19Y2F0Y2goZil7cmV0dXJuITF9cmV0dXJuITB9LHRyYW5zZmVyQW5kVmVyaWZ5TmZ0cz1hc3luYyhlLHQscyxhLG4saSxyKT0+e2xldCBvPXtzdWNjZXNzOltdLGZhaWw6W119LGw9InVzZXIiPT09dD8idSI6ImMiLGQ9InVzZXIiPT09YT8idSI6ImMiO2F3YWl0IGFjdGlvbnMudHJhbnNmZXIoe2Zyb21UeXBlOnQsdG86cyx0b1R5cGU6YSxuZnRzOm4saXNTaWduZWRXaXRoQWN0aXZlS2V5OmksY2FsbGluZ0NvbnRyYWN0SW5mbzpyfSk7bGV0IHU9YXBpLmxvZ3MoKSxjPXt9LGY9e307aWYodS5ldmVudHMpZm9yKGxldCBwPTA7cDx1LmV2ZW50cy5sZW5ndGg7cCs9MSl7bGV0IGc9dS5ldmVudHNbcF07aWYoZy5jb250cmFjdCYmZy5ldmVudCYmZy5kYXRhJiYibmZ0Ij09PWcuY29udHJhY3QmJiJ0cmFuc2ZlciI9PT1nLmV2ZW50JiZnLmRhdGEuZnJvbT09PWUmJmcuZGF0YS5mcm9tVHlwZT09PWwmJmcuZGF0YS50bz09PXMmJmcuZGF0YS50b1R5cGU9PT1kKXtsZXQgeT1nLmRhdGEuc3ltYm9sKyItIitnLmRhdGEuaWQ7Y1t5XT0xfX1mb3IobGV0IG09MDttPG4ubGVuZ3RoO20rPTEpe2xldHtzeW1ib2w6JCxpZHM6aH09blttXSxiPVtdLHY9W107Zm9yKGxldCB3PTA7dzxoLmxlbmd0aDt3Kz0xKXtsZXQgTj0kKyItIitoW3ddO04gaW4gZnx8KE4gaW4gYz9iLnB1c2goaFt3XS50b1N0cmluZygpKTp2LnB1c2goaFt3XS50b1N0cmluZygpKSxmW05dPTEpfWIubGVuZ3RoPjAmJm8uc3VjY2Vzcy5wdXNoKHtzeW1ib2w6JCxpZHM6Yn0pLHYubGVuZ3RoPjAmJm8uZmFpbC5wdXNoKHtzeW1ib2w6JCxpZHM6dn0pfXJldHVybiBvfTthY3Rpb25zLnVwZGF0ZVVybD1hc3luYyBlPT57bGV0e3VybDp0LHN5bWJvbDpzfT1lO2lmKGFwaS5hc3NlcnQocyYmInN0cmluZyI9PXR5cGVvZiBzJiZ0JiYic3RyaW5nIj09dHlwZW9mIHQsImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQodC5sZW5ndGg8PTI1NSwiaW52YWxpZCB1cmw6IG1heCBsZW5ndGggb2YgMjU1Iikpe2xldCBhPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN9KTtpZihhJiZhcGkuYXNzZXJ0KGEuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpdHJ5e2xldCBuPUpTT04ucGFyc2UoYS5tZXRhZGF0YSk7YXBpLmFzc2VydChuJiZuLnVybCwiYW4gZXJyb3Igb2NjdXJlZCB3aGVuIHRyeWluZyB0byB1cGRhdGUgdGhlIHVybCIpJiYobi51cmw9dCxhLm1ldGFkYXRhPUpTT04uc3RyaW5naWZ5KG4pLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGEpKX1jYXRjaChpKXt9fX0sYWN0aW9ucy51cGRhdGVNZXRhZGF0YT1hc3luYyBlPT57bGV0e21ldGFkYXRhOnQsc3ltYm9sOnN9PWU7aWYoYXBpLmFzc2VydChzJiYic3RyaW5nIj09dHlwZW9mIHMmJnQmJiJvYmplY3QiPT10eXBlb2YgdCwiaW52YWxpZCBwYXJhbXMiKSl7bGV0IGE9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c30pO2lmKGEmJmFwaS5hc3NlcnQoYS5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSl0cnl7bGV0IG49SlNPTi5zdHJpbmdpZnkodCk7YXBpLmFzc2VydChuLmxlbmd0aDw9MWUzLCJpbnZhbGlkIG1ldGFkYXRhOiBtYXggbGVuZ3RoIG9mIDEwMDAiKSYmKGEubWV0YWRhdGE9bixhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixhKSl9Y2F0Y2goaSl7fX19LGFjdGlvbnMudXBkYXRlTmFtZT1hc3luYyBlPT57bGV0e25hbWU6dCxzeW1ib2w6c309ZTtpZihhcGkuYXNzZXJ0KHMmJiJzdHJpbmciPT10eXBlb2YgcyYmdCYmInN0cmluZyI9PXR5cGVvZiB0LCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QodCwiICIpKSYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PTUwLCJpbnZhbGlkIG5hbWU6IGxldHRlcnMsIG51bWJlcnMsIHdoaXRlc3BhY2VzIG9ubHksIG1heCBsZW5ndGggb2YgNTAiKSl7bGV0IGE9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c30pO2EmJmFwaS5hc3NlcnQoYS5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmKGEubmFtZT10LGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGEpKX19LGFjdGlvbnMudXBkYXRlT3JnTmFtZT1hc3luYyBlPT57bGV0e29yZ05hbWU6dCxzeW1ib2w6c309ZTtpZihhcGkuYXNzZXJ0KHMmJiJzdHJpbmciPT10eXBlb2YgcyYmdCYmInN0cmluZyI9PXR5cGVvZiB0LCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QodCwiICIpKSYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PTUwLCJpbnZhbGlkIG9yZyBuYW1lOiBsZXR0ZXJzLCBudW1iZXJzLCB3aGl0ZXNwYWNlcyBvbmx5LCBtYXggbGVuZ3RoIG9mIDUwIikpe2xldCBhPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN9KTthJiZhcGkuYXNzZXJ0KGEuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJihhLm9yZ05hbWU9dCxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixhKSl9fSxhY3Rpb25zLnVwZGF0ZVByb2R1Y3ROYW1lPWFzeW5jIGU9PntsZXR7cHJvZHVjdE5hbWU6dCxzeW1ib2w6c309ZTtpZihhcGkuYXNzZXJ0KHMmJiJzdHJpbmciPT10eXBlb2YgcyYmdCYmInN0cmluZyI9PXR5cGVvZiB0LCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QodCwiICIpKSYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PTUwLCJpbnZhbGlkIHByb2R1Y3QgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpKXtsZXQgYT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzfSk7YSYmYXBpLmFzc2VydChhLmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpJiYoYS5wcm9kdWN0TmFtZT10LGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGEpKX19LGFjdGlvbnMuYWRkQXV0aG9yaXplZElzc3VpbmdBY2NvdW50cz1hc3luYyBlPT57bGV0e2FjY291bnRzOnQsc3ltYm9sOnMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmF9PWU7aWYoYXBpLmFzc2VydCghMD09PWEsInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHMmJiJzdHJpbmciPT10eXBlb2YgcyYmdCYmIm9iamVjdCI9PXR5cGVvZiB0JiZBcnJheS5pc0FycmF5KHQpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KHQubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBhY2NvdW50cyIpKXtsZXQgbj1pc1ZhbGlkQWNjb3VudHNBcnJheSh0KTtpZihhcGkuYXNzZXJ0KG4sImludmFsaWQgYWNjb3VudCBsaXN0Iikpe2xldCBpPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN9KTtpZihpKXtsZXQgcj1bXTtpZih0LmZvckVhY2goZT0+e2xldCB0PWUudHJpbSgpLnRvTG93ZXJDYXNlKCkscz0hMTtmb3IobGV0IGE9MDthPGkuYXV0aG9yaXplZElzc3VpbmdBY2NvdW50cy5sZW5ndGg7YSs9MSlpZih0PT09aS5hdXRob3JpemVkSXNzdWluZ0FjY291bnRzW2FdKXtzPSEwO2JyZWFrfXN8fHIucHVzaCh0KX0pLGFwaS5hc3NlcnQoaS5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmYXBpLmFzc2VydCghY29udGFpbnNEdXBsaWNhdGVzKHIpLCJjYW5ub3QgYWRkIHRoZSBzYW1lIGFjY291bnQgdHdpY2UiKSYmYXBpLmFzc2VydChpLmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMubGVuZ3RoK3IubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBhY2NvdW50cyIpKXtsZXQgbz1pLmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMuY29uY2F0KHIpO2kuYXV0aG9yaXplZElzc3VpbmdBY2NvdW50cz1vLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGkpfX19fX0sYWN0aW9ucy5hZGRBdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1hc3luYyBlPT57bGV0e2NvbnRyYWN0czp0LHN5bWJvbDpzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTphfT1lO2lmKGFwaS5hc3NlcnQoITA9PT1hLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzJiYic3RyaW5nIj09dHlwZW9mIHMmJnQmJiJvYmplY3QiPT10eXBlb2YgdCYmQXJyYXkuaXNBcnJheSh0KSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydCh0Lmxlbmd0aDw9MTAsImNhbm5vdCBoYXZlIG1vcmUgdGhhbiAxMCBhdXRob3JpemVkIGlzc3VpbmcgY29udHJhY3RzIikpe2xldCBuPWlzVmFsaWRDb250cmFjdHNBcnJheSh0KTtpZihhcGkuYXNzZXJ0KG4sImludmFsaWQgY29udHJhY3QgbGlzdCIpKXtsZXQgaT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzfSk7aWYoaSl7bGV0IHI9W107aWYodC5mb3JFYWNoKGU9PntsZXQgdD1lLnRyaW0oKSxzPSExO2ZvcihsZXQgYT0wO2E8aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cy5sZW5ndGg7YSs9MSlpZih0PT09aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0c1thXSl7cz0hMDticmVha31zfHxyLnB1c2godCl9KSxhcGkuYXNzZXJ0KGkuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJmFwaS5hc3NlcnQoIWNvbnRhaW5zRHVwbGljYXRlcyhyKSwiY2Fubm90IGFkZCB0aGUgc2FtZSBjb250cmFjdCB0d2ljZSIpJiZhcGkuYXNzZXJ0KGkuYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMubGVuZ3RoK3IubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBjb250cmFjdHMiKSl7bGV0IG89aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cy5jb25jYXQocik7aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1vLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGkpfX19fX0sYWN0aW9ucy5yZW1vdmVBdXRob3JpemVkSXNzdWluZ0FjY291bnRzPWFzeW5jIGU9PntsZXR7YWNjb3VudHM6dCxzeW1ib2w6cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6YX09ZTtpZihhcGkuYXNzZXJ0KCEwPT09YSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQocyYmInN0cmluZyI9PXR5cGVvZiBzJiZ0JiYib2JqZWN0Ij09dHlwZW9mIHQmJkFycmF5LmlzQXJyYXkodCksImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQodC5sZW5ndGg8PTEwLCJjYW5ub3QgcmVtb3ZlIG1vcmUgdGhhbiAxMCBhdXRob3JpemVkIGlzc3VpbmcgYWNjb3VudHMiKSl7bGV0IG49aXNWYWxpZEFjY291bnRzQXJyYXkodCk7aWYoYXBpLmFzc2VydChuLCJpbnZhbGlkIGFjY291bnQgbGlzdCIpKXtsZXQgaT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzfSk7aWYoaSYmYXBpLmFzc2VydChpLmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpKXtsZXQgcj1pLmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMuZmlsdGVyKGU9Pntmb3IobGV0IHM9MDtzPHQubGVuZ3RoO3MrPTEpe2xldCBhPXRbc10udHJpbSgpLnRvTG93ZXJDYXNlKCk7aWYoZT09PWEpcmV0dXJuITF9cmV0dXJuITB9KTtpLmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHM9cixhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixpKX19fX0sYWN0aW9ucy5yZW1vdmVBdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1hc3luYyBlPT57bGV0e2NvbnRyYWN0czp0LHN5bWJvbDpzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTphfT1lO2lmKGFwaS5hc3NlcnQoITA9PT1hLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzJiYic3RyaW5nIj09dHlwZW9mIHMmJnQmJiJvYmplY3QiPT10eXBlb2YgdCYmQXJyYXkuaXNBcnJheSh0KSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydCh0Lmxlbmd0aDw9MTAsImNhbm5vdCByZW1vdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBjb250cmFjdHMiKSl7bGV0IG49aXNWYWxpZENvbnRyYWN0c0FycmF5KHQpO2lmKGFwaS5hc3NlcnQobiwiaW52YWxpZCBjb250cmFjdCBsaXN0Iikpe2xldCBpPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN9KTtpZihpJiZhcGkuYXNzZXJ0KGkuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2xldCByPWkuYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMuZmlsdGVyKGU9Pntmb3IobGV0IHM9MDtzPHQubGVuZ3RoO3MrPTEpe2xldCBhPXRbc10udHJpbSgpO2lmKGU9PT1hKXJldHVybiExfXJldHVybiEwfSk7aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1yLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGkpfX19fSxhY3Rpb25zLnRyYW5zZmVyT3duZXJzaGlwPWFzeW5jIGU9PntsZXR7c3ltYm9sOnQsdG86cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6YX09ZTtpZihhcGkuYXNzZXJ0KCEwPT09YSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQodCYmInN0cmluZyI9PXR5cGVvZiB0JiZzJiYic3RyaW5nIj09dHlwZW9mIHMsImludmFsaWQgcGFyYW1zIikpe2xldCBuPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnR9KTtpZihuJiZhcGkuYXNzZXJ0KG4uaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2xldCBpPXMudHJpbSgpLnRvTG93ZXJDYXNlKCk7YXBpLmFzc2VydChpc1ZhbGlkSGl2ZUFjY291bnRMZW5ndGgoaSksImludmFsaWQgdG8iKSYmKG4uaXNzdWVyPWksYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbikpfX19LGFjdGlvbnMuZW5hYmxlRGVsZWdhdGlvbj1hc3luYyBlPT57bGV0e3N5bWJvbDp0LHVuZGVsZWdhdGlvbkNvb2xkb3duOnMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmF9PWUsbj1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSkse2VuYWJsZURlbGVnYXRpb25GZWU6aX09bixyPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOiJCRUUifSksbz0hIWFwaS5CaWdOdW1iZXIoaSkubHRlKDApfHxyJiZhcGkuQmlnTnVtYmVyKHIuYmFsYW5jZSkuZ3RlKGkpO2lmKGFwaS5hc3NlcnQobywieW91IG11c3QgaGF2ZSBlbm91Z2ggdG9rZW5zIHRvIGNvdmVyIGZlZXMiKSYmYXBpLmFzc2VydCghMD09PWEsInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHQmJiJzdHJpbmciPT10eXBlb2YgdCwiaW52YWxpZCBzeW1ib2wiKSYmYXBpLmFzc2VydChzJiZOdW1iZXIuaXNJbnRlZ2VyKHMpJiZzPjAmJnM8PTE4MjUwLCJ1bmRlbGVnYXRpb25Db29sZG93biBtdXN0IGJlIGFuIGludGVnZXIgYmV0d2VlbiAxIGFuZCAxODI1MCIpKXtsZXQgbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDp0fSk7aWYoYXBpLmFzc2VydChudWxsIT09bCwic3ltYm9sIGRvZXMgbm90IGV4aXN0IikmJmFwaS5hc3NlcnQobC5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1sLmRlbGVnYXRpb25FbmFibGVkfHwhMT09PWwuZGVsZWdhdGlvbkVuYWJsZWQsImRlbGVnYXRpb24gYWxyZWFkeSBlbmFibGVkIikpe2lmKGFwaS5CaWdOdW1iZXIoaSkuZ3QoMCkpe2xldCBkPWF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOiJCRUUiLHF1YW50aXR5OmksaXNTaWduZWRXaXRoQWN0aXZlS2V5OmF9KTtpZighaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQoZCxhcGkuc2VuZGVyLCJudWxsIiwiQkVFIixpLCJ0cmFuc2ZlciIpKXJldHVybiExfXJldHVybiBsLmRlbGVnYXRpb25FbmFibGVkPSEwLGwudW5kZWxlZ2F0aW9uQ29vbGRvd249cyxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixsKSwhMH19cmV0dXJuITF9LGFjdGlvbnMudXBkYXRlUHJvcGVydHlEZWZpbml0aW9uPWFzeW5jIGU9PntsZXR7c3ltYm9sOnQsbmFtZTpzLG5ld05hbWU6YSx0eXBlOm4saXNSZWFkT25seTppLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTpyfT1lO2lmKGFwaS5hc3NlcnQoITA9PT1yLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCh0JiYic3RyaW5nIj09dHlwZW9mIHQmJnMmJiJzdHJpbmciPT10eXBlb2YgcywiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChhcGkudmFsaWRhdG9yLmlzQWxwaGFudW1lcmljKHMpJiZzLmxlbmd0aD4wJiZzLmxlbmd0aDw9MjUsImludmFsaWQgbmFtZTogbGV0dGVycyAmIG51bWJlcnMgb25seSwgbWF4IGxlbmd0aCBvZiAyNSIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWF8fCJzdHJpbmciPT10eXBlb2YgYSYmYXBpLnZhbGlkYXRvci5pc0FscGhhbnVtZXJpYyhhKSYmYS5sZW5ndGg+MCYmYS5sZW5ndGg8PTI1LCJpbnZhbGlkIG5ldyBuYW1lOiBsZXR0ZXJzICYgbnVtYmVycyBvbmx5LCBtYXggbGVuZ3RoIG9mIDI1IikmJmFwaS5hc3NlcnQodm9pZCAwPT09bnx8InN0cmluZyI9PXR5cGVvZiBuJiYoIm51bWJlciI9PT1ufHwic3RyaW5nIj09PW58fCJib29sZWFuIj09PW4pLCJpbnZhbGlkIHR5cGU6IG11c3QgYmUgbnVtYmVyLCBzdHJpbmcsIG9yIGJvb2xlYW4iKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1pfHwiYm9vbGVhbiI9PXR5cGVvZiBpLCJpbnZhbGlkIGlzUmVhZE9ubHk6IG11c3QgYmUgdHJ1ZSBvciBmYWxzZSIpKXtsZXQgbz1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDp0fSk7aWYobyYmYXBpLmFzc2VydCgwPT09by5zdXBwbHksImNhbm5vdCBjaGFuZ2UgZGF0YSBwcm9wZXJ0eSBkZWZpbml0aW9uOyB0b2tlbnMgYWxyZWFkeSBpc3N1ZWQiKSYmYXBpLmFzc2VydChzIGluIG8ucHJvcGVydGllcywicHJvcGVydHkgbXVzdCBleGlzdCIpJiZhcGkuYXNzZXJ0KG8uaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2lmKHZvaWQgMCE9PWEmJih2b2lkIDAhPT1vLmdyb3VwQnkmJm8uZ3JvdXBCeS5sZW5ndGg+MCYmIWFwaS5hc3NlcnQoIW8uZ3JvdXBCeS5pbmNsdWRlcyhzKSwiY2Fubm90IGNoYW5nZSBkYXRhIHByb3BlcnR5IG5hbWU7IHByb3BlcnR5IGlzIHBhcnQgb2YgZ3JvdXBCeSIpfHwhYXBpLmFzc2VydChhIT09cywibmV3IG5hbWUgbXVzdCBiZSBkaWZmZXJlbnQgZnJvbSBvbGQgbmFtZSIpfHwhYXBpLmFzc2VydCghKGEgaW4gby5wcm9wZXJ0aWVzKSwidGhlcmUgaXMgYWxyZWFkeSBhIGRhdGEgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4gbmV3IG5hbWUiKSkpcmV0dXJuITE7bGV0IGw9ITEsZD1vLnByb3BlcnRpZXNbc10udHlwZSx1PW8ucHJvcGVydGllc1tzXS5pc1JlYWRPbmx5O3JldHVybiB2b2lkIDAhPT1uJiZuIT09ZCYmKG8ucHJvcGVydGllc1tzXS50eXBlPW4sbD0hMCksdm9pZCAwIT09aSYmaSE9PXUmJihvLnByb3BlcnRpZXNbc10uaXNSZWFkT25seT1pLGw9ITApLHZvaWQgMCE9PWEmJmEhPT1zJiYoby5wcm9wZXJ0aWVzW2FdPW8ucHJvcGVydGllc1tzXSxkZWxldGUgby5wcm9wZXJ0aWVzW3NdLGw9ITApLGwmJihhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixvKSxhcGkuZW1pdCgidXBkYXRlUHJvcGVydHlEZWZpbml0aW9uIix7c3ltYm9sOnQsb3JpZ2luYWxOYW1lOnMsb3JpZ2luYWxUeXBlOmQsb3JpZ2luYWxJc1JlYWRPbmx5OnUsbmV3TmFtZTphLG5ld1R5cGU6bixuZXdJc1JlYWRPbmx5Oml9KSksITB9fXJldHVybiExfSxhY3Rpb25zLmFkZFByb3BlcnR5PWFzeW5jIGU9PntsZXR7c3ltYm9sOnQsbmFtZTpzLHR5cGU6YSxpc1JlYWRPbmx5Om4sYXV0aG9yaXplZEVkaXRpbmdBY2NvdW50czppLGF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzOnIsaXNTaWduZWRXaXRoQWN0aXZlS2V5Om99PWUsbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSkse2RhdGFQcm9wZXJ0eUNyZWF0aW9uRmVlOmR9PWw7aWYoYXBpLmFzc2VydCghMD09PW8sInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHQmJiJzdHJpbmciPT10eXBlb2YgdCYmcyYmInN0cmluZyI9PXR5cGVvZiBzJiYodm9pZCAwPT09bnx8ImJvb2xlYW4iPT10eXBlb2YgbikmJih2b2lkIDA9PT1pfHxpJiYib2JqZWN0Ij09dHlwZW9mIGkmJkFycmF5LmlzQXJyYXkoaSkpJiYodm9pZCAwPT09cnx8ciYmIm9iamVjdCI9PXR5cGVvZiByJiZBcnJheS5pc0FycmF5KHIpKSYmYSYmInN0cmluZyI9PXR5cGVvZiBhLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMocykmJnMubGVuZ3RoPjAmJnMubGVuZ3RoPD0yNSwiaW52YWxpZCBuYW1lOiBsZXR0ZXJzICYgbnVtYmVycyBvbmx5LCBtYXggbGVuZ3RoIG9mIDI1IikmJmFwaS5hc3NlcnQoIm51bWJlciI9PT1hfHwic3RyaW5nIj09PWF8fCJib29sZWFuIj09PWEsImludmFsaWQgdHlwZTogbXVzdCBiZSBudW1iZXIsIHN0cmluZywgb3IgYm9vbGVhbiIpKXtsZXQgdT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDp0fSk7aWYodSYmYXBpLmFzc2VydCghKHMgaW4gdS5wcm9wZXJ0aWVzKSwiY2Fubm90IGFkZCB0aGUgc2FtZSBwcm9wZXJ0eSB0d2ljZSIpJiZhcGkuYXNzZXJ0KHUuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2xldCBjPU9iamVjdC5rZXlzKHUucHJvcGVydGllcykubGVuZ3RoO2lmKGM+PTMpe2xldCBmPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOiJCRUUifSkscD0hIWFwaS5CaWdOdW1iZXIoZCkubHRlKDApfHxmJiZhcGkuQmlnTnVtYmVyKGYuYmFsYW5jZSkuZ3RlKGQpO2lmKCFhcGkuYXNzZXJ0KHAsInlvdSBtdXN0IGhhdmUgZW5vdWdoIHRva2VucyB0byBjb3ZlciB0aGUgY3JlYXRpb24gZmVlcyIpKXJldHVybiExO2lmKGFwaS5CaWdOdW1iZXIoZCkuZ3QoMCkpe2xldCBnPWF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOiJCRUUiLHF1YW50aXR5OmQsaXNTaWduZWRXaXRoQWN0aXZlS2V5Om99KTtpZighaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQoZyxhcGkuc2VuZGVyLCJudWxsIiwiQkVFIixkLCJ0cmFuc2ZlciIpKXJldHVybiExfX1sZXQgeT12b2lkIDAhPT1uJiZuLG09dm9pZCAwPT09aT9bYXBpLnNlbmRlcl06W10sJD17dHlwZTphLGlzUmVhZE9ubHk6eSxhdXRob3JpemVkRWRpdGluZ0FjY291bnRzOm0sYXV0aG9yaXplZEVkaXRpbmdDb250cmFjdHM6W119O3JldHVybiB1LnByb3BlcnRpZXNbc109JCxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIix1KSwoaXx8cikmJmF3YWl0IGFjdGlvbnMuc2V0UHJvcGVydHlQZXJtaXNzaW9ucyh7c3ltYm9sOnQsbmFtZTpzLGFjY291bnRzOmksY29udHJhY3RzOnIsaXNTaWduZWRXaXRoQWN0aXZlS2V5Om99KSwhMH19cmV0dXJuITF9LGFjdGlvbnMuc2V0UHJvcGVydHlQZXJtaXNzaW9ucz1hc3luYyBlPT57bGV0e3N5bWJvbDp0LG5hbWU6cyxhY2NvdW50czphLGNvbnRyYWN0czpuLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppfT1lO2lmKGFwaS5hc3NlcnQoITA9PT1pLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCh0JiYic3RyaW5nIj09dHlwZW9mIHQmJnMmJiJzdHJpbmciPT10eXBlb2YgcyYmKHZvaWQgMD09PWF8fGEmJiJvYmplY3QiPT10eXBlb2YgYSYmQXJyYXkuaXNBcnJheShhKSkmJih2b2lkIDA9PT1ufHxuJiYib2JqZWN0Ij09dHlwZW9mIG4mJkFycmF5LmlzQXJyYXkobikpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMocykmJnMubGVuZ3RoPjAmJnMubGVuZ3RoPD0yNSwiaW52YWxpZCBuYW1lOiBsZXR0ZXJzICYgbnVtYmVycyBvbmx5LCBtYXggbGVuZ3RoIG9mIDI1IikmJmFwaS5hc3NlcnQodm9pZCAwPT09YXx8YS5sZW5ndGg8PTEwLCJjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gMTAgYXV0aG9yaXplZCBhY2NvdW50cyIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PW58fG4ubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgY29udHJhY3RzIikmJmFwaS5hc3NlcnQodm9pZCAwPT09YXx8aXNWYWxpZEFjY291bnRzQXJyYXkoYSksImludmFsaWQgYWNjb3VudCBsaXN0IikmJmFwaS5hc3NlcnQodm9pZCAwPT09bnx8aXNWYWxpZENvbnRyYWN0c0FycmF5KG4pLCJpbnZhbGlkIGNvbnRyYWN0IGxpc3QiKSl7bGV0IHI9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6dH0pO2lmKHImJmFwaS5hc3NlcnQocyBpbiByLnByb3BlcnRpZXMsInByb3BlcnR5IG11c3QgZXhpc3QiKSYmYXBpLmFzc2VydChyLmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpKXtsZXQgbz1bXSxsPVtdO2lmKGEmJihvPWEubWFwKGU9PmUudHJpbSgpLnRvTG93ZXJDYXNlKCkpKSxuJiYobD1uLm1hcChlPT5lLnRyaW0oKSkpLGFwaS5hc3NlcnQodm9pZCAwPT09YXx8IWNvbnRhaW5zRHVwbGljYXRlcyhvKSwiY2Fubm90IGFkZCB0aGUgc2FtZSBhY2NvdW50IHR3aWNlIikmJmFwaS5hc3NlcnQodm9pZCAwPT09bnx8IWNvbnRhaW5zRHVwbGljYXRlcyhsKSwiY2Fubm90IGFkZCB0aGUgc2FtZSBjb250cmFjdCB0d2ljZSIpKXtsZXQgZD0hMTthJiYoci5wcm9wZXJ0aWVzW3NdLmF1dGhvcml6ZWRFZGl0aW5nQWNjb3VudHM9byxkPSEwKSxuJiYoci5wcm9wZXJ0aWVzW3NdLmF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzPWwsZD0hMCksZCYmYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIscil9fX19LGFjdGlvbnMuc2V0R3JvdXBCeT1hc3luYyBlPT57bGV0e3N5bWJvbDp0LHByb3BlcnRpZXM6cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6YX09ZTtpZihhcGkuYXNzZXJ0KCEwPT09YSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQodCYmInN0cmluZyI9PXR5cGVvZiB0JiZzJiYib2JqZWN0Ij09dHlwZW9mIHMmJkFycmF5LmlzQXJyYXkocyksImludmFsaWQgcGFyYW1zIikpe2xldCBuPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnR9KTtpZihuKXtsZXQgaT1PYmplY3Qua2V5cyhuLnByb3BlcnRpZXMpLmxlbmd0aDtpZihhcGkuYXNzZXJ0KG4uaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJmFwaS5hc3NlcnQodm9pZCAwPT09bi5ncm91cEJ5fHwwPT09bi5ncm91cEJ5Lmxlbmd0aCwibGlzdCBpcyBhbHJlYWR5IHNldCIpJiZhcGkuYXNzZXJ0KHMubGVuZ3RoPD1pLCJjYW5ub3Qgc2V0IG1vcmUgZGF0YSBwcm9wZXJ0aWVzIHRoYW4gTkZUIGhhcyIpJiZhcGkuYXNzZXJ0KCFjb250YWluc0R1cGxpY2F0ZXMocyksImxpc3QgY2Fubm90IGNvbnRhaW4gZHVwbGljYXRlcyIpKXtmb3IobGV0IHI9MDtyPHMubGVuZ3RoO3IrPTEpe2xldCBvPXNbcl07aWYoIWFwaS5hc3NlcnQobyYmInN0cmluZyI9PXR5cGVvZiBvJiZvIGluIG4ucHJvcGVydGllcywiZGF0YSBwcm9wZXJ0eSBtdXN0IGV4aXN0IikpcmV0dXJuITF9cmV0dXJuIG4uZ3JvdXBCeT1zLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLG4pLCEwfX19cmV0dXJuITF9LGFjdGlvbnMuc2V0UHJvcGVydGllcz1hc3luYyBlPT57bGV0e3N5bWJvbDp0LGZyb21UeXBlOnMsbmZ0czphLGNhbGxpbmdDb250cmFjdEluZm86bn09ZSxpPVsidXNlciIsImNvbnRyYWN0Il0scj12b2lkIDA9PT1zPyJ1c2VyIjpzO2lmKGFwaS5hc3NlcnQoYSYmIm9iamVjdCI9PXR5cGVvZiBhJiZBcnJheS5pc0FycmF5KGEpJiZyJiYic3RyaW5nIj09dHlwZW9mIHImJmkuaW5jbHVkZXMocikmJnQmJiJzdHJpbmciPT10eXBlb2YgdCYmKG58fHZvaWQgMD09PW4mJiJ1c2VyIj09PXIpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGEubGVuZ3RoPD01MCwiY2Fubm90IHNldCBwcm9wZXJ0aWVzIG9uIG1vcmUgdGhhbiA1MCBORlQgaW5zdGFuY2VzIGF0IG9uY2UiKSl7bGV0IG89InVzZXIiPT09cj9hcGkuc2VuZGVyOm4ubmFtZSxsPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnR9KTtpZihhcGkuYXNzZXJ0KG51bGwhPT1sLCJzeW1ib2wgZG9lcyBub3QgZXhpc3QiKSl7aWYoIWlzVmFsaWREYXRhUHJvcGVydGllc0FycmF5KG8scixsLGEpKXJldHVybiExO2xldCBkPXQrImluc3RhbmNlcyI7Zm9yKGxldCB1PTA7dTxhLmxlbmd0aDt1Kz0xKXtsZXR7aWQ6Yyxwcm9wZXJ0aWVzOmZ9PWFbdV07aWYoMD09PU9iamVjdC5rZXlzKGYpLmxlbmd0aCljb250aW51ZTtsZXQgcD1hd2FpdCBhcGkuZGIuZmluZE9uZShkLHtfaWQ6YXBpLkJpZ051bWJlcihjKS50b051bWJlcigpfSk7aWYoYXBpLmFzc2VydChudWxsIT09cCwibmZ0IGluc3RhbmNlIGRvZXMgbm90IGV4aXN0Iikpe2xldCBnPSExO2ZvcihsZXRbeSxtXW9mIE9iamVjdC5lbnRyaWVzKGYpKXtsZXQgJD1sLnByb3BlcnRpZXNbeV0saD1udWxsOyQuaXNSZWFkT25seT9hcGkuYXNzZXJ0KCEoeSBpbiBwLnByb3BlcnRpZXMpLCJjYW5ub3QgZWRpdCByZWFkLW9ubHkgcHJvcGVydGllcyIpJiYocC5wcm9wZXJ0aWVzW3ldPW0sZz0hMCk6KGg9cC5wcm9wZXJ0aWVzW3ldLHAucHJvcGVydGllc1t5XT1tLGc9ITApLGcmJmghPT1tJiZhd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoIm1pbmluZyIsImhhbmRsZU5mdFNldFByb3BlcnR5Iix7c3ltYm9sOnQsbmZ0OnAscHJvcGVydHlOYW1lOnksb2xkVmFsdWU6aH0pfWcmJmF3YWl0IGFwaS5kYi51cGRhdGUoZCxwKX19cmV0dXJuITB9fXJldHVybiExfSxhY3Rpb25zLmJ1cm49YXN5bmMgZT0+e2xldHtmcm9tVHlwZTp0LG5mdHM6cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6YSxjYWxsaW5nQ29udHJhY3RJbmZvOm59PWUsaT1bInVzZXIiLCJjb250cmFjdCJdLHI9dm9pZCAwPT09dD8idXNlciI6dDtpZihhcGkuYXNzZXJ0KCEwPT09YSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQociYmInN0cmluZyI9PXR5cGVvZiByJiZpLmluY2x1ZGVzKHIpJiYobnx8dm9pZCAwPT09biYmInVzZXIiPT09cikmJnMmJiJvYmplY3QiPT10eXBlb2YgcyYmQXJyYXkuaXNBcnJheShzKSwiaW52YWxpZCBwYXJhbXMiKSYmaXNWYWxpZE5mdElkQXJyYXkocykpe2xldCBvPSJ1c2VyIj09PXI/YXBpLnNlbmRlcjpuLm5hbWUsbD0wLGQ9MCx1PSExO2ZvcihsZXQgYz0wO2M8cy5sZW5ndGg7Yys9MSl7bGV0e3N5bWJvbDpmLGlkczpwfT1zW2NdLGc9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6Zn0pO2lmKGcpe2xldCB5PWYrImluc3RhbmNlcyI7Zm9yKGxldCBtPTA7bTxwLmxlbmd0aDttKz0xKXtsZXQgJD1wW21dLGg9YXdhaXQgYXBpLmRiLmZpbmRPbmUoeSx7X2lkOmFwaS5CaWdOdW1iZXIoJCkudG9OdW1iZXIoKX0pO2lmKGgpe2xldCBiPSEwO2lmKGgubG9ja2VkTmZ0cyYmaC5sb2NrZWROZnRzLmxlbmd0aD4wPygwPT09ZCYmKHU9ITApLCgobCs9MSk+MXx8IXUpJiYoYj0hMSkpOnUmJihiPSExKSxkKz0xLGguYWNjb3VudD09PW8mJigidSI9PT1oLm93bmVkQnkmJiJ1c2VyIj09PXJ8fCJjIj09PWgub3duZWRCeSYmImNvbnRyYWN0Ij09PXIpJiZ2b2lkIDA9PT1oLmRlbGVnYXRlZFRvJiZiKXtsZXQgdj17fSx3PSEwO2ZvcihsZXRbTixfXW9mIE9iamVjdC5lbnRyaWVzKGgubG9ja2VkVG9rZW5zKSl7bGV0IEE9YXdhaXQgYXBpLnRyYW5zZmVyVG9rZW5zKG8sTixfLHIpO2lzVG9rZW5UcmFuc2ZlclZlcmlmaWVkKEEsIm5mdCIsbyxOLF8sInRyYW5zZmVyRnJvbUNvbnRyYWN0Iil8fCh2W05dPV8sdz0hMSl9YXBpLmFzc2VydCh3LGB1bmFibGUgdG8gcmVsZWFzZSBsb2NrZWQgdG9rZW5zIGluOiAke2Z9LCBpZCAkeyR9YCk7bGV0IFQ9aC5sb2NrZWROZnRzJiZoLmxvY2tlZE5mdHMubGVuZ3RoPjA/aC5sb2NrZWROZnRzOltdO2lmKHcmJmgubG9ja2VkTmZ0cyYmaC5sb2NrZWROZnRzLmxlbmd0aD4wKXtsZXQgaz1hd2FpdCB0cmFuc2ZlckFuZFZlcmlmeU5mdHMoIm5mdCIsImNvbnRyYWN0IixvLHIsaC5sb2NrZWROZnRzLGEse25hbWU6Im5mdCJ9KTtoLmxvY2tlZE5mdHM9ay5mYWlsLGgubG9ja2VkTmZ0cy5sZW5ndGg+MCYmKHc9ITEpLGFwaS5hc3NlcnQodyxgdW5hYmxlIHRvIHJlbGVhc2UgbG9ja2VkIE5GVCBpbnN0YW5jZXMgaW46ICR7Zn0sIGlkICR7JH1gKX1sZXQgQj1oLm93bmVkQnksRT1oLmxvY2tlZFRva2VucztoLmxvY2tlZFRva2Vucz12LHcmJihoLnByZXZpb3VzQWNjb3VudD1oLmFjY291bnQsaC5wcmV2aW91c093bmVkQnk9aC5vd25lZEJ5LGguYWNjb3VudD0ibnVsbCIsaC5vd25lZEJ5PSJ1IixnLmNpcmN1bGF0aW5nU3VwcGx5LT0xKSxhd2FpdCBhcGkuZGIudXBkYXRlKHksaCksdyYmYXBpLmVtaXQoImJ1cm4iLHthY2NvdW50Om8sb3duZWRCeTpCLHVubG9ja2VkVG9rZW5zOkUsdW5sb2NrZWROZnRzOlQsc3ltYm9sOmYsaWQ6JH0pfX19YXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsZyl9fX19LGFjdGlvbnMudHJhbnNmZXI9YXN5bmMgZT0+e2xldHtmcm9tVHlwZTp0LHRvOnMsdG9UeXBlOmEsbmZ0czpuLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppLGNhbGxpbmdDb250cmFjdEluZm86cn09ZSxvPVsidXNlciIsImNvbnRyYWN0Il0sbD12b2lkIDA9PT1hPyJ1c2VyIjphLGQ9dm9pZCAwPT09dD8idXNlciI6dDtpZihhcGkuYXNzZXJ0KCEwPT09aSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoZCYmInN0cmluZyI9PXR5cGVvZiBkJiZvLmluY2x1ZGVzKGQpJiZzJiYic3RyaW5nIj09dHlwZW9mIHMmJmwmJiJzdHJpbmciPT10eXBlb2YgbCYmby5pbmNsdWRlcyhsKSYmKHJ8fHZvaWQgMD09PXImJiJ1c2VyIj09PWQpJiZuJiYib2JqZWN0Ij09dHlwZW9mIG4mJkFycmF5LmlzQXJyYXkobiksImludmFsaWQgcGFyYW1zIikmJmlzVmFsaWROZnRJZEFycmF5KG4pKXtsZXQgdT0idXNlciI9PT1sP3MudHJpbSgpLnRvTG93ZXJDYXNlKCk6cy50cmltKCksYz0idXNlciI9PT1sP2lzVmFsaWRIaXZlQWNjb3VudExlbmd0aCh1KTppc1ZhbGlkQ29udHJhY3RMZW5ndGgodSksZj0idXNlciI9PT1kP2FwaS5zZW5kZXI6ci5uYW1lO2lmKGFwaS5hc3NlcnQoYywiaW52YWxpZCB0byIpJiZhcGkuYXNzZXJ0KCEobD09PWQmJnU9PT1mKSwiY2Fubm90IHRyYW5zZmVyIHRvIHNlbGYiKSYmYXBpLmFzc2VydCghKCJ1c2VyIj09PWwmJiJudWxsIj09PXUpLCJjYW5ub3QgdHJhbnNmZXIgdG8gbnVsbDsgdXNlIGJ1cm4gYWN0aW9uIGluc3RlYWQiKSlmb3IobGV0IHA9MDtwPG4ubGVuZ3RoO3ArPTEpe2xldHtzeW1ib2w6ZyxpZHM6eX09bltwXSxtPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOmd9KTtpZihtKXtsZXQgJD1nKyJpbnN0YW5jZXMiO2ZvcihsZXQgaD0wO2g8eS5sZW5ndGg7aCs9MSl7bGV0IGI9eVtoXSx2PWF3YWl0IGFwaS5kYi5maW5kT25lKCQse19pZDphcGkuQmlnTnVtYmVyKGIpLnRvTnVtYmVyKCl9KTtpZih2JiZ2LmFjY291bnQ9PT1mJiYoInUiPT09di5vd25lZEJ5JiYidXNlciI9PT1kfHwiYyI9PT12Lm93bmVkQnkmJiJjb250cmFjdCI9PT1kKSYmdm9pZCAwPT09di5kZWxlZ2F0ZWRUbyYmIXYuc291bEJvdW5kKXtsZXQgdz12Lm93bmVkQnksTj0idXNlciI9PT1sPyJ1IjoiYyI7di5wcmV2aW91c0FjY291bnQ9di5hY2NvdW50LHYucHJldmlvdXNPd25lZEJ5PXYub3duZWRCeSx2LmFjY291bnQ9dSx2Lm93bmVkQnk9Tixhd2FpdCBhcGkuZGIudXBkYXRlKCQsdiksYXBpLmVtaXQoInRyYW5zZmVyIix7ZnJvbTpmLGZyb21UeXBlOncsdG86dSx0b1R5cGU6TixzeW1ib2w6ZyxpZDpifSl9fX19fX0sYWN0aW9ucy5kZWxlZ2F0ZT1hc3luYyBlPT57bGV0e2Zyb21UeXBlOnQsdG86cyx0b1R5cGU6YSxuZnRzOm4saXNTaWduZWRXaXRoQWN0aXZlS2V5OmksY2FsbGluZ0NvbnRyYWN0SW5mbzpyfT1lLG89WyJ1c2VyIiwiY29udHJhY3QiXSxsPXZvaWQgMD09PWE/InVzZXIiOmEsZD12b2lkIDA9PT10PyJ1c2VyIjp0O2lmKGFwaS5hc3NlcnQoITA9PT1pLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChkJiYic3RyaW5nIj09dHlwZW9mIGQmJm8uaW5jbHVkZXMoZCkmJnMmJiJzdHJpbmciPT10eXBlb2YgcyYmbCYmInN0cmluZyI9PXR5cGVvZiBsJiZvLmluY2x1ZGVzKGwpJiYocnx8dm9pZCAwPT09ciYmInVzZXIiPT09ZCkmJm4mJiJvYmplY3QiPT10eXBlb2YgbiYmQXJyYXkuaXNBcnJheShuKSwiaW52YWxpZCBwYXJhbXMiKSYmaXNWYWxpZE5mdElkQXJyYXkobikpe2xldCB1PSJ1c2VyIj09PWw/cy50cmltKCkudG9Mb3dlckNhc2UoKTpzLnRyaW0oKSxjPSJ1c2VyIj09PWw/aXNWYWxpZEhpdmVBY2NvdW50TGVuZ3RoKHUpOmlzVmFsaWRDb250cmFjdExlbmd0aCh1KSxmPSJ1c2VyIj09PWQ/YXBpLnNlbmRlcjpyLm5hbWU7aWYoYXBpLmFzc2VydChjLCJpbnZhbGlkIHRvIikmJmFwaS5hc3NlcnQoIShsPT09ZCYmdT09PWYpLCJjYW5ub3QgZGVsZWdhdGUgdG8gc2VsZiIpJiZhcGkuYXNzZXJ0KCEoInVzZXIiPT09bCYmIm51bGwiPT09dSksImNhbm5vdCBkZWxlZ2F0ZSB0byBudWxsIikpZm9yKGxldCBwPTA7cDxuLmxlbmd0aDtwKz0xKXtsZXR7c3ltYm9sOmcsaWRzOnl9PW5bcF0sbT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpnfSk7aWYobSYmYXBpLmFzc2VydCghMD09PW0uZGVsZWdhdGlvbkVuYWJsZWQsYGRlbGVnYXRpb24gbm90IGVuYWJsZWQgZm9yICR7Z31gKSl7bGV0ICQ9ZysiaW5zdGFuY2VzIjtmb3IobGV0IGg9MDtoPHkubGVuZ3RoO2grPTEpe2xldCBiPXlbaF0sdj1hd2FpdCBhcGkuZGIuZmluZE9uZSgkLHtfaWQ6YXBpLkJpZ051bWJlcihiKS50b051bWJlcigpfSk7aWYodiYmdi5hY2NvdW50PT09ZiYmKCJ1Ij09PXYub3duZWRCeSYmInVzZXIiPT09ZHx8ImMiPT09di5vd25lZEJ5JiYiY29udHJhY3QiPT09ZCkmJnZvaWQgMD09PXYuZGVsZWdhdGVkVG8pe2xldCB3PSJ1c2VyIj09PWw/InUiOiJjIixOPXthY2NvdW50OnUsb3duZWRCeTp3fTt2LmRlbGVnYXRlZFRvPU4sYXdhaXQgYXBpLmRiLnVwZGF0ZSgkLHYpLGFwaS5lbWl0KCJkZWxlZ2F0ZSIse2Zyb206Zixmcm9tVHlwZTp2Lm93bmVkQnksdG86dSx0b1R5cGU6dyxzeW1ib2w6ZyxpZDpifSksYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJtaW5pbmciLCJoYW5kbGVOZnREZWxlZ2F0aW9uQ2hhbmdlIix7c3ltYm9sOmcsbmZ0OnYsYWRkOiEwfSl9fX19fX0sYWN0aW9ucy51bmRlbGVnYXRlPWFzeW5jIGU9PntsZXR7ZnJvbVR5cGU6dCxuZnRzOnMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmEsY2FsbGluZ0NvbnRyYWN0SW5mbzpufT1lLGk9WyJ1c2VyIiwiY29udHJhY3QiXSxyPXZvaWQgMD09PXQ/InVzZXIiOnQ7aWYoYXBpLmFzc2VydCghMD09PWEsInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHImJiJzdHJpbmciPT10eXBlb2YgciYmaS5pbmNsdWRlcyhyKSYmKG58fHZvaWQgMD09PW4mJiJ1c2VyIj09PXIpJiZzJiYib2JqZWN0Ij09dHlwZW9mIHMmJkFycmF5LmlzQXJyYXkocyksImludmFsaWQgcGFyYW1zIikmJmlzVmFsaWROZnRJZEFycmF5KHMpKXtsZXQgbz0idXNlciI9PT1yP2FwaS5zZW5kZXI6bi5uYW1lLGw9bmV3IERhdGUoYCR7YXBpLmhpdmVCbG9ja1RpbWVzdGFtcH0uMDAwWmApO2ZvcihsZXQgZD0wO2Q8cy5sZW5ndGg7ZCs9MSl7bGV0e3N5bWJvbDp1LGlkczpjfT1zW2RdLGY9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6dX0pO2lmKGYmJmFwaS5hc3NlcnQoITA9PT1mLmRlbGVnYXRpb25FbmFibGVkLGBkZWxlZ2F0aW9uIG5vdCBlbmFibGVkIGZvciAke3V9YCkpe2xldCBwPTg2NGU1KmYudW5kZWxlZ2F0aW9uQ29vbGRvd24sZz1sLmdldFRpbWUoKStwLHk9dSsiaW5zdGFuY2VzIixtPXtzeW1ib2w6dSxpZHM6W10sY29tcGxldGVUaW1lc3RhbXA6Z307Zm9yKGxldCAkPTA7JDxjLmxlbmd0aDskKz0xKXtsZXQgaD1jWyRdLGI9YXdhaXQgYXBpLmRiLmZpbmRPbmUoeSx7X2lkOmFwaS5CaWdOdW1iZXIoaCkudG9OdW1iZXIoKX0pO2ImJmIuYWNjb3VudD09PW8mJigidSI9PT1iLm93bmVkQnkmJiJ1c2VyIj09PXJ8fCJjIj09PWIub3duZWRCeSYmImNvbnRyYWN0Ij09PXIpJiZiLmRlbGVnYXRlZFRvJiZ2b2lkIDA9PT1iLmRlbGVnYXRlZFRvLnVuZGVsZWdhdGVBdCYmKGIuZGVsZWdhdGVkVG8udW5kZWxlZ2F0ZUF0PWcsbS5pZHMucHVzaChiLl9pZCksYXdhaXQgYXBpLmRiLnVwZGF0ZSh5LGIpLGFwaS5lbWl0KCJ1bmRlbGVnYXRlU3RhcnQiLHtmcm9tOmIuZGVsZWdhdGVkVG8uYWNjb3VudCxmcm9tVHlwZTpiLmRlbGVnYXRlZFRvLm93bmVkQnksc3ltYm9sOnUsaWQ6aH0pLGF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgibWluaW5nIiwiaGFuZGxlTmZ0RGVsZWdhdGlvbkNoYW5nZSIse3N5bWJvbDp1LG5mdDpiLGFkZDohMX0pKX1tLmlkcy5sZW5ndGg+MCYmYXdhaXQgYXBpLmRiLmluc2VydCgicGVuZGluZ1VuZGVsZWdhdGlvbnMiLG0pfX19fTtjb25zdCBwcm9jZXNzVW5kZWxlZ2F0aW9uPWFzeW5jIGU9PntsZXR7c3ltYm9sOnQsaWRzOnN9PWUsYT10KyJpbnN0YW5jZXMiLG49YXdhaXQgYXBpLmRiLmZpbmQoYSx7X2lkOnskaW46c319LDUwLDAsW3tpbmRleDoiX2lkIixkZXNjZW5kaW5nOiExfV0pO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSs9MSlkZWxldGUgbltpXS5kZWxlZ2F0ZWRUbyxhd2FpdCBhcGkuZGIudXBkYXRlKGEsbltpXSx7ZGVsZWdhdGVkVG86IiJ9KTthd2FpdCBhcGkuZGIucmVtb3ZlKCJwZW5kaW5nVW5kZWxlZ2F0aW9ucyIsZSksYXBpLmVtaXQoInVuZGVsZWdhdGVEb25lIix7c3ltYm9sOnQsaWRzOnN9KX07YWN0aW9ucy5jaGVja1BlbmRpbmdVbmRlbGVnYXRpb25zPWFzeW5jKCk9PntpZihhcGkuYXNzZXJ0KCJudWxsIj09PWFwaS5zZW5kZXIsIm5vdCBhdXRob3JpemVkIikpe2xldCBlPW5ldyBEYXRlKGAke2FwaS5oaXZlQmxvY2tUaW1lc3RhbXB9LjAwMFpgKSx0PWUuZ2V0VGltZSgpLHM9YXdhaXQgYXBpLmRiLmZpbmQoInBlbmRpbmdVbmRlbGVnYXRpb25zIix7Y29tcGxldGVUaW1lc3RhbXA6eyRsdGU6dH19KSxhPXMubGVuZ3RoO2Zvcig7YT4wOyl7Zm9yKGxldCBuPTA7bjxhO24rPTEpe2xldCBpPXNbbl07YXdhaXQgcHJvY2Vzc1VuZGVsZWdhdGlvbihpKX1hPShzPWF3YWl0IGFwaS5kYi5maW5kKCJwZW5kaW5nVW5kZWxlZ2F0aW9ucyIse2NvbXBsZXRlVGltZXN0YW1wOnskbHRlOnR9fSkpLmxlbmd0aH19fSxhY3Rpb25zLmNyZWF0ZT1hc3luYyBlPT57bGV0e25hbWU6dCxvcmdOYW1lOnMscHJvZHVjdE5hbWU6YSxzeW1ib2w6bix1cmw6aSxtYXhTdXBwbHk6cixhdXRob3JpemVkSXNzdWluZ0FjY291bnRzOm8sYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHM6bCxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6ZH09ZSx1PWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KSx7bmZ0Q3JlYXRpb25GZWU6Y309dSxmPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOiJCRUUifSkscD0hIWFwaS5CaWdOdW1iZXIoYykubHRlKDApfHxmJiZhcGkuQmlnTnVtYmVyKGYuYmFsYW5jZSkuZ3RlKGMpO2lmKGFwaS5hc3NlcnQocCwieW91IG11c3QgaGF2ZSBlbm91Z2ggdG9rZW5zIHRvIGNvdmVyIHRoZSBjcmVhdGlvbiBmZWVzIikmJmFwaS5hc3NlcnQoITA9PT1kLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCh0JiYic3RyaW5nIj09dHlwZW9mIHQmJm4mJiJzdHJpbmciPT10eXBlb2YgbiYmKHZvaWQgMD09PWl8fGkmJiJzdHJpbmciPT10eXBlb2YgaSkmJih2b2lkIDA9PT1zfHxzJiYic3RyaW5nIj09dHlwZW9mIHMpJiYodm9pZCAwPT09YXx8YSYmInN0cmluZyI9PXR5cGVvZiBhKSYmKHZvaWQgMD09PW98fG8mJiJvYmplY3QiPT10eXBlb2YgbyYmQXJyYXkuaXNBcnJheShvKSkmJih2b2lkIDA9PT1sfHxsJiYib2JqZWN0Ij09dHlwZW9mIGwmJkFycmF5LmlzQXJyYXkobCkpJiYodm9pZCAwPT09cnx8ciYmInN0cmluZyI9PXR5cGVvZiByJiYhYXBpLkJpZ051bWJlcihyKS5pc05hTigpKSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChhcGkudmFsaWRhdG9yLmlzQWxwaGEobikmJmFwaS52YWxpZGF0b3IuaXNVcHBlcmNhc2UobikmJm4ubGVuZ3RoPjAmJm4ubGVuZ3RoPD0xMCwiaW52YWxpZCBzeW1ib2w6IHVwcGVyY2FzZSBsZXR0ZXJzIG9ubHksIG1heCBsZW5ndGggb2YgMTAiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1SRVNFUlZFRF9TWU1CT0xTW25dfHxhcGkuc2VuZGVyPT09UkVTRVJWRURfU1lNQk9MU1tuXSwiY2Fubm90IHVzZSB0aGlzIHN5bWJvbCIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QodCwiICIpKSYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PTUwLCJpbnZhbGlkIG5hbWU6IGxldHRlcnMsIG51bWJlcnMsIHdoaXRlc3BhY2VzIG9ubHksIG1heCBsZW5ndGggb2YgNTAiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1zfHxhcGkudmFsaWRhdG9yLmlzQWxwaGFudW1lcmljKGFwaS52YWxpZGF0b3IuYmxhY2tsaXN0KHMsIiAiKSkmJnMubGVuZ3RoPjAmJnMubGVuZ3RoPD01MCwiaW52YWxpZCBvcmcgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWF8fGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QoYSwiICIpKSYmYS5sZW5ndGg+MCYmYS5sZW5ndGg8PTUwLCJpbnZhbGlkIHByb2R1Y3QgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWl8fGkubGVuZ3RoPD0yNTUsImludmFsaWQgdXJsOiBtYXggbGVuZ3RoIG9mIDI1NSIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PXJ8fGFwaS5CaWdOdW1iZXIocikuZ3QoMCksIm1heFN1cHBseSBtdXN0IGJlIHBvc2l0aXZlIikmJmFwaS5hc3NlcnQodm9pZCAwPT09cnx8YXBpLkJpZ051bWJlcihyKS5sdGUoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLGBtYXhTdXBwbHkgbXVzdCBiZSBsb3dlciB0aGFuICR7TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJ9YCkpe2xldCBnPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOm59KTtpZihhcGkuYXNzZXJ0KG51bGw9PT1nLCJzeW1ib2wgYWxyZWFkeSBleGlzdHMiKSl7aWYoYXBpLkJpZ051bWJlcihjKS5ndCgwKSl7bGV0IHk9YXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlciIse3RvOiJudWxsIixzeW1ib2w6IkJFRSIscXVhbnRpdHk6Yyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6ZH0pO2lmKCFpc1Rva2VuVHJhbnNmZXJWZXJpZmllZCh5LGFwaS5zZW5kZXIsIm51bGwiLCJCRUUiLGMsInRyYW5zZmVyIikpcmV0dXJuITF9bGV0IG09dm9pZCAwPT09cj8wOmFwaS5CaWdOdW1iZXIocikuaW50ZWdlclZhbHVlKGFwaS5CaWdOdW1iZXIuUk9VTkRfRE9XTikudG9OdW1iZXIoKSwkPXZvaWQgMD09PXM/IiI6cyxoPXZvaWQgMD09PWE/IiI6YSxiPXZvaWQgMD09PWk/IiI6aSx2PXt1cmw6Yn07dj1KU09OLnN0cmluZ2lmeSh2KTtsZXQgdz12b2lkIDA9PT1vP1thcGkuc2VuZGVyXTpbXSxOPXtpc3N1ZXI6YXBpLnNlbmRlcixzeW1ib2w6bixuYW1lOnQsb3JnTmFtZTokLHByb2R1Y3ROYW1lOmgsbWV0YWRhdGE6dixtYXhTdXBwbHk6bSxzdXBwbHk6MCxjaXJjdWxhdGluZ1N1cHBseTowLGRlbGVnYXRpb25FbmFibGVkOiExLHVuZGVsZWdhdGlvbkNvb2xkb3duOjAsYXV0aG9yaXplZElzc3VpbmdBY2NvdW50czp3LGF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzOltdLHByb3BlcnRpZXM6e30sZ3JvdXBCeTpbXX0sXz1uKyJpbnN0YW5jZXMiLEE9YXdhaXQgYXBpLmRiLnRhYmxlRXhpc3RzKF8pO3JldHVybiExPT09QSYmYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKF8sWyJhY2NvdW50Iiwib3duZWRCeSJdKSxhd2FpdCBhcGkuZGIuaW5zZXJ0KCJuZnRzIixOKSx2b2lkIDAhPT1vJiZhd2FpdCBhY3Rpb25zLmFkZEF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMoe2FjY291bnRzOm8sc3ltYm9sOm4saXNTaWduZWRXaXRoQWN0aXZlS2V5OmR9KSx2b2lkIDAhPT1sJiZhd2FpdCBhY3Rpb25zLmFkZEF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzKHtjb250cmFjdHM6bCxzeW1ib2w6bixpc1NpZ25lZFdpdGhBY3RpdmVLZXk6ZH0pLCEwfX1yZXR1cm4hMX0sYWN0aW9ucy5pc3N1ZT1hc3luYyBlPT57bGV0e3N5bWJvbDp0LGZyb21UeXBlOnMsdG86YSx0b1R5cGU6bixmZWVTeW1ib2w6aSxsb2NrVG9rZW5zOnIsbG9ja05mdHM6byxzb3VsQm91bmQ6bCxwcm9wZXJ0aWVzOmQsaXNTaWduZWRXaXRoQWN0aXZlS2V5OnUsY2FsbGluZ0NvbnRyYWN0SW5mbzpjfT1lLGY9WyJ1c2VyIiwiY29udHJhY3QiXSxwPXZvaWQgMD09PW4/InVzZXIiOm4sZz12b2lkIDA9PT1zPyJ1c2VyIjpzLHk9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pLHtuZnRJc3N1YW5jZUZlZTptfT15O2lmKGFwaS5hc3NlcnQoITA9PT11LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCh0JiYic3RyaW5nIj09dHlwZW9mIHQmJmcmJiJzdHJpbmciPT10eXBlb2YgZyYmZi5pbmNsdWRlcyhnKSYmKGN8fHZvaWQgMD09PWMmJiJ1c2VyIj09PWcpJiZhJiYic3RyaW5nIj09dHlwZW9mIGEmJnAmJiJzdHJpbmciPT10eXBlb2YgcCYmZi5pbmNsdWRlcyhwKSYmaSYmInN0cmluZyI9PXR5cGVvZiBpJiZpIGluIG0mJih2b2lkIDA9PT1kfHxkJiYib2JqZWN0Ij09dHlwZW9mIGQpJiYodm9pZCAwPT09cnx8ciYmIm9iamVjdCI9PXR5cGVvZiByKSYmKHZvaWQgMD09PW98fG8mJiJvYmplY3QiPT10eXBlb2YgbyYmQXJyYXkuaXNBcnJheShvKSkmJih2b2lkIDA9PT1sfHxsJiYiYm9vbGVhbiI9PXR5cGVvZiBsKSwiaW52YWxpZCBwYXJhbXMiKSYmKHZvaWQgMD09PW98fGlzVmFsaWROZnRJZEFycmF5KG8pKSl7bGV0ICQ9InVzZXIiPT09cD9hLnRyaW0oKS50b0xvd2VyQ2FzZSgpOmEudHJpbSgpLGg9InVzZXIiPT09cD9pc1ZhbGlkSGl2ZUFjY291bnRMZW5ndGgoJCk6aXNWYWxpZENvbnRyYWN0TGVuZ3RoKCQpLGI9InVzZXIiPT09Zz9hcGkuc2VuZGVyOmMubmFtZSx2PSJ1c2VyIj09PWc/ImJhbGFuY2VzIjoiY29udHJhY3RzQmFsYW5jZXMiO2lmKGFwaS5hc3NlcnQoaCwiaW52YWxpZCB0byIpKXtsZXQgdz1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDp0fSksTj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDppfSk7aWYoYXBpLmFzc2VydChudWxsIT09dywic3ltYm9sIGRvZXMgbm90IGV4aXN0IikmJmFwaS5hc3NlcnQobnVsbCE9PU4sImZlZSBzeW1ib2wgZG9lcyBub3QgZXhpc3QiKSl7bGV0IF89dCsiaW5zdGFuY2VzIjtpZihhcGkuYXNzZXJ0KCJjb250cmFjdCI9PT1nJiZ3LmF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzLmluY2x1ZGVzKGIpfHwidXNlciI9PT1nJiZ3LmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMuaW5jbHVkZXMoYiksIm5vdCBhbGxvd2VkIHRvIGlzc3VlIHRva2VucyIpJiZhcGkuYXNzZXJ0KDA9PT13Lm1heFN1cHBseXx8dy5zdXBwbHk8dy5tYXhTdXBwbHksIm1heCBzdXBwbHkgbGltaXQgcmVhY2hlZCIpKXtsZXQgQT1PYmplY3Qua2V5cyh3LnByb3BlcnRpZXMpLmxlbmd0aCxUPWFwaS5CaWdOdW1iZXIobVtpXSkubXVsdGlwbGllZEJ5KEEpLGs9Y2FsY3VsYXRlQmFsYW5jZShtW2ldLFQsTi5wcmVjaXNpb24sITApLEI9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLHYse2FjY291bnQ6YixzeW1ib2w6aX0pLEU9ISFhcGkuQmlnTnVtYmVyKGspLmx0ZSgwKXx8QiYmYXBpLkJpZ051bWJlcihCLmJhbGFuY2UpLmd0ZShrKTtpZihyKXtsZXQgTz1hd2FpdCBpc1ZhbGlkVG9rZW5CYXNrZXQocix2LGIsaSxrKTtpZighYXBpLmFzc2VydChPLCJpbnZhbGlkIGJhc2tldCBvZiB0b2tlbnMgdG8gbG9jayAoY2Fubm90IGxvY2sgbW9yZSB0aGFuIDEwIHRva2VuIHR5cGVzOyBpc3N1aW5nIGFjY291bnQgbXVzdCBoYXZlIGVub3VnaCBiYWxhbmNlKSIpKXJldHVybiExfWxldCBDPXt9O2lmKHZvaWQgMCE9PWQpe3RyeXtpZighaXNWYWxpZERhdGFQcm9wZXJ0aWVzKGIsZyx3LGQpKXJldHVybiExfWNhdGNoKEkpe3JldHVybiExfUM9ZH1pZihhcGkuYXNzZXJ0KEUsInlvdSBtdXN0IGhhdmUgZW5vdWdoIHRva2VucyB0byBjb3ZlciB0aGUgaXNzdWFuY2UgZmVlcyIpKXtpZihhcGkuQmlnTnVtYmVyKGspLmd0KDApKXtpZigiY29udHJhY3QiPT09Zyl7bGV0IFM9YXdhaXQgYXBpLnRyYW5zZmVyVG9rZW5zRnJvbUNhbGxpbmdDb250cmFjdCgibnVsbCIsaSxrLCJ1c2VyIik7aWYoIWFwaS5hc3NlcnQoaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQoUyxiLCJudWxsIixpLGssInRyYW5zZmVyRnJvbUNvbnRyYWN0IiksInVuYWJsZSB0byB0cmFuc2ZlciBpc3N1YW5jZSBmZWUiKSlyZXR1cm4hMX1lbHNle2xldCBWPWF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOmkscXVhbnRpdHk6ayxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6dX0pO2lmKCFhcGkuYXNzZXJ0KGlzVG9rZW5UcmFuc2ZlclZlcmlmaWVkKFYsYiwibnVsbCIsaSxrLCJ0cmFuc2ZlciIpLCJ1bmFibGUgdG8gdHJhbnNmZXIgaXNzdWFuY2UgZmVlIikpcmV0dXJuITF9fWxldCB4PXt9O2lmKHIpZm9yKGxldFtqLExdb2YgT2JqZWN0LmVudHJpZXMocikpaWYoImNvbnRyYWN0Ij09PWcpe2xldCB6PWF3YWl0IGFwaS50cmFuc2ZlclRva2Vuc0Zyb21DYWxsaW5nQ29udHJhY3QoIm5mdCIsaixMLCJjb250cmFjdCIpO2lzVG9rZW5UcmFuc2ZlclZlcmlmaWVkKHosYiwibmZ0IixqLEwsInRyYW5zZmVyRnJvbUNvbnRyYWN0IikmJih4W2pdPUwpfWVsc2V7bGV0IFI9YXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlclRvQ29udHJhY3QiLHt0bzoibmZ0IixzeW1ib2w6aixxdWFudGl0eTpMLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTp1fSk7aXNUb2tlblRyYW5zZmVyVmVyaWZpZWQoUixiLCJuZnQiLGosTCwidHJhbnNmZXJUb0NvbnRyYWN0IikmJih4W2pdPUwpfWxldCBGPVtdO2lmKG8mJm8ubGVuZ3RoPjApe2xldCBEPWF3YWl0IHRyYW5zZmVyQW5kVmVyaWZ5TmZ0cyhiLGcsIm5mdCIsImNvbnRyYWN0IixvLHUsYyk7Rj1ELnN1Y2Nlc3N9bGV0IE09InVzZXIiPT09cD8idSI6ImMiLFA9e307UD1GLmxlbmd0aD4wP3thY2NvdW50OiQsc291bEJvdW5kOmwsb3duZWRCeTpNLGxvY2tlZFRva2Vuczp4LGxvY2tlZE5mdHM6Rixwcm9wZXJ0aWVzOkN9OnthY2NvdW50OiQsc291bEJvdW5kOmwsb3duZWRCeTpNLGxvY2tlZFRva2Vuczp4LHByb3BlcnRpZXM6Q307bGV0IFU9YXdhaXQgYXBpLmRiLmluc2VydChfLFApO3JldHVybiB3LnN1cHBseSs9MSwoIm51bGwiIT09JHx8ImNvbnRyYWN0Ij09PXApJiYody5jaXJjdWxhdGluZ1N1cHBseSs9MSksYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsdyksYXBpLmVtaXQoImlzc3VlIix7ZnJvbTpiLGZyb21UeXBlOmcsdG86JCx0b1R5cGU6cCxzeW1ib2w6dCxsb2NrZWRUb2tlbnM6eCxsb2NrZWROZnRzOkYsc291bEJvdW5kOiEhbCxwcm9wZXJ0aWVzOkMsaWQ6VS5faWR9KSwhMH19fX19cmV0dXJuITF9LGFjdGlvbnMuaXNzdWVNdWx0aXBsZT1hc3luYyBlPT57bGV0e2luc3RhbmNlczp0LGlzU2lnbmVkV2l0aEFjdGl2ZUtleTpzLGNhbGxpbmdDb250cmFjdEluZm86YX09ZTtpZihhcGkuYXNzZXJ0KCEwPT09cywieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQodCYmIm9iamVjdCI9PXR5cGVvZiB0JiZBcnJheS5pc0FycmF5KHQpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KHQubGVuZ3RoPD0xMCwiY2Fubm90IGlzc3VlIG1vcmUgdGhhbiAxMCBORlQgaW5zdGFuY2VzIGF0IG9uY2UiKSl7bGV0IG49MDtpZih0LmZvckVhY2goZT0+e2UubG9ja05mdHMmJihuKz0xKX0pLGFwaS5hc3NlcnQobjw9MSwiY2Fubm90IGlzc3VlIG1vcmUgdGhhbiAxIGNvbnRhaW5lciBORlQgaW5zdGFuY2VzIGF0IG9uY2UiKSYmYXBpLmFzc2VydCgwPT09bnx8bj09PXQubGVuZ3RoLCJjYW5ub3QgaXNzdWUgYSBtaXggb2YgY29udGFpbmVyIGFuZCBub24tY29udGFpbmVyIE5GVCBpbnN0YW5jZXMgc2ltdWx0YW5lb3VzbHkiKSlmb3IobGV0IGk9MDtpPHQubGVuZ3RoO2krPTEpe2xldHtzeW1ib2w6cixmcm9tVHlwZTpvLHRvOmwsdG9UeXBlOmQsZmVlU3ltYm9sOnUsbG9ja1Rva2VuczpjLHNvdWxCb3VuZDpmLGxvY2tOZnRzOnAscHJvcGVydGllczpnfT10W2ldO2F3YWl0IGFjdGlvbnMuaXNzdWUoe3N5bWJvbDpyLGZyb21UeXBlOm8sdG86bCx0b1R5cGU6ZCxmZWVTeW1ib2w6dSxsb2NrVG9rZW5zOmMsc291bEJvdW5kOmYsbG9ja05mdHM6cCxwcm9wZXJ0aWVzOmcsaXNTaWduZWRXaXRoQWN0aXZlS2V5OnMsY2FsbGluZ0NvbnRyYWN0SW5mbzphfSl9fX07"}}}
{"id":"ssc-testnet-hive","json":{"contractName":"contract","contractAction":"deploy","contractPayload":{"name":"nft","params":"","code":"Y29uc3QgQ09OVFJBQ1RfTkFNRT0ibmZ0IixVVElMSVRZX1RPS0VOX1NZTUJPTD0iQkVFIixNQVhfTlVNX0FVVEhPUklaRURfSVNTVUVSUz0xMCxNQVhfTlVNX0xPQ0tFRF9UT0tFTl9UWVBFUz0xMCxNQVhfU1lNQk9MX0xFTkdUSD0xMCxNQVhfREFUQV9QUk9QRVJUWV9MRU5HVEg9MTAwLE1BWF9OVU1fTkZUU19JU1NVQUJMRT0xMCxNQVhfTlVNX05GVFNfRURJVEFCTEU9NTAsTUFYX05VTV9ORlRTX09QRVJBQkxFPTUwLE1BWF9OVU1fQ09OVEFJTkVSX05GVFNfT1BFUkFCTEU9MSxSRVNFUlZFRF9TWU1CT0xTPXtDRUxMOiJiZWdnYXJzIixRVVNUOiJzaW1wbGVnYW1lIixURVNURVJBOiJhZ2dyb2VkIixTUVJMOiJzdHVmZmJ5c3BlbmNlciIsQ1JBRlQ6ImltbWFudWVsOTQiLE1VU0lDOiJhdG9tY29sbGVjdG9yIixDR1VMTDoiY2d1bGwiLE5GVDoiY2FkYXdnIixSQVJFOiJiZWdnYXJzIixMSUM6ImxpY3Rva2VuIixNRU1CRVI6Im1lbWJlcnRva2VuIixDT0ZGRUU6ImMwZmYzM2EiLEFSVDoiYnlvIixST0NLOiJiZWdnYXJzIixDUklUVEVSOiJjcnlwdG9tYW5jZXIiLENJVFk6ImdlcmJlciIsTU9OU1RFUlM6InNpbXBsZWdhbWUiLFNFVFM6Imxvb3RraXQuZ2FtZXMiLEFOSU1FOiJhbmltZXRva2VuIixQSE9UT0ZUOiJ3d3dpZWJlIixCRUVSOiJkZXRsZXYiLFNQSVI6InNwaW52ZXN0IixJRkc6Imxpb24yMDAiLEdVSUxEUzoic2ltcGxlZ2FtZSIsRkNBUkQ6Imxpb24yMDAiLFBYTDoicGl4ZWxuZnQiLENPVzoic3R1ZmZieXNwZW5jZXIiLExPT09UOiJzdHVmZmJ5c3BlbmNlciIsQVBJOiJzdGVlbWNpdHlhcGkiLFNQT1JUU01PTToic3BvcnRzdGVzdGVyIixTV1Q6InNhdHJlbiIsU1RBUjoiYXRvbWNvbGxlY3RvciJ9O2FjdGlvbnMuY3JlYXRlU1NDPWFzeW5jKCk9PntsZXQgZT1hd2FpdCBhcGkuZGIudGFibGVFeGlzdHMoIm5mdHMiKTtpZighMT09PWUpe2F3YWl0IGFwaS5kYi5jcmVhdGVUYWJsZSgibmZ0cyIsWyJzeW1ib2wiXSksYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCJwYXJhbXMiKSxhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoInBlbmRpbmdVbmRlbGVnYXRpb25zIixbInN5bWJvbCIsImNvbXBsZXRlVGltZXN0YW1wIl0pO2xldCB0PXt9O3QubmZ0Q3JlYXRpb25GZWU9IjEwMCIsdC5uZnRJc3N1YW5jZUZlZT17QkVFOiIwLjAwMSIsUEFMOiIwLjAwMSJ9LHQuZGF0YVByb3BlcnR5Q3JlYXRpb25GZWU9IjEwMCIsdC5lbmFibGVEZWxlZ2F0aW9uRmVlPSIxMDAwIixhd2FpdCBhcGkuZGIuaW5zZXJ0KCJwYXJhbXMiLHQpfX0sYWN0aW9ucy51cGRhdGVQYXJhbXM9YXN5bmMgZT0+e2lmKGFwaS5zZW5kZXIhPT1hcGkub3duZXIpcmV0dXJuO2xldHtuZnRDcmVhdGlvbkZlZTp0LG5mdElzc3VhbmNlRmVlOnMsZGF0YVByb3BlcnR5Q3JlYXRpb25GZWU6YSxlbmFibGVEZWxlZ2F0aW9uRmVlOm59PWUsaT1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSk7dCYmInN0cmluZyI9PXR5cGVvZiB0JiYhYXBpLkJpZ051bWJlcih0KS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKHQpLmd0ZSgwKSYmKGkubmZ0Q3JlYXRpb25GZWU9dCkscyYmIm9iamVjdCI9PXR5cGVvZiBzJiYoaS5uZnRJc3N1YW5jZUZlZT1zKSxhJiYic3RyaW5nIj09dHlwZW9mIGEmJiFhcGkuQmlnTnVtYmVyKGEpLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIoYSkuZ3RlKDApJiYoaS5kYXRhUHJvcGVydHlDcmVhdGlvbkZlZT1hKSxuJiYic3RyaW5nIj09dHlwZW9mIG4mJiFhcGkuQmlnTnVtYmVyKG4pLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIobikuZ3RlKDApJiYoaS5lbmFibGVEZWxlZ2F0aW9uRmVlPW4pLGF3YWl0IGFwaS5kYi51cGRhdGUoInBhcmFtcyIsaSl9O2NvbnN0IGlzVG9rZW5UcmFuc2ZlclZlcmlmaWVkPShlLHQscyxhLG4saSk9PnZvaWQgMD09PWUuZXJyb3JzJiYhIWUuZXZlbnRzJiZ2b2lkIDAhPT1lLmV2ZW50cy5maW5kKGU9PiJ0b2tlbnMiPT09ZS5jb250cmFjdCYmZS5ldmVudD09PWkmJmUuZGF0YS5mcm9tPT09dCYmZS5kYXRhLnRvPT09cyYmZS5kYXRhLnF1YW50aXR5PT09biYmZS5kYXRhLnN5bWJvbD09PWEpLGNhbGN1bGF0ZUJhbGFuY2U9KGUsdCxzLGEpPT5hP2FwaS5CaWdOdW1iZXIoZSkucGx1cyh0KS50b0ZpeGVkKHMpOmFwaS5CaWdOdW1iZXIoZSkubWludXModCkudG9GaXhlZChzKSxjb3VudERlY2ltYWxzPWU9PmFwaS5CaWdOdW1iZXIoZSkuZHAoKSxjb250YWluc0R1cGxpY2F0ZXM9ZT0+bmV3IFNldChlKS5zaXplIT09ZS5sZW5ndGgsaXNWYWxpZEhpdmVBY2NvdW50TGVuZ3RoPWU9PmUubGVuZ3RoPj0zJiZlLmxlbmd0aDw9MTYsaXNWYWxpZENvbnRyYWN0TGVuZ3RoPWU9PmUubGVuZ3RoPj0zJiZlLmxlbmd0aDw9NTAsaXNWYWxpZEFjY291bnRzQXJyYXk9ZT0+e2xldCB0PSEwO3JldHVybiBlLmZvckVhY2goZT0+eyJzdHJpbmciPT10eXBlb2YgZSYmaXNWYWxpZEhpdmVBY2NvdW50TGVuZ3RoKGUpfHwodD0hMSl9KSx0fSxpc1ZhbGlkQ29udHJhY3RzQXJyYXk9ZT0+e2xldCB0PSEwO3JldHVybiBlLmZvckVhY2goZT0+eyJzdHJpbmciPT10eXBlb2YgZSYmaXNWYWxpZENvbnRyYWN0TGVuZ3RoKGUpfHwodD0hMSl9KSx0fSxpc1ZhbGlkRGF0YVByb3BlcnRpZXM9KGUsdCxzLGEpPT57bGV0IG49T2JqZWN0LmtleXMoYSkubGVuZ3RoLGk9T2JqZWN0LmtleXMocy5wcm9wZXJ0aWVzKS5sZW5ndGg7aWYoIWFwaS5hc3NlcnQobjw9aSwiY2Fubm90IHNldCBtb3JlIGRhdGEgcHJvcGVydGllcyB0aGFuIE5GVCBoYXMiKSlyZXR1cm4hMTtmb3IobGV0W3Isb11vZiBPYmplY3QuZW50cmllcyhhKSl7bGV0IGw9ITE7aWYoYXBpLmFzc2VydChyJiYic3RyaW5nIj09dHlwZW9mIHImJmFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMocikmJnIubGVuZ3RoPjAmJnIubGVuZ3RoPD0yNSwiaW52YWxpZCBkYXRhIHByb3BlcnR5IG5hbWU6IGxldHRlcnMgJiBudW1iZXJzIG9ubHksIG1heCBsZW5ndGggb2YgMjUiKSYmYXBpLmFzc2VydChyIGluIHMucHJvcGVydGllcywiZGF0YSBwcm9wZXJ0eSBtdXN0IGV4aXN0Iikpe2xldCBkPXMucHJvcGVydGllc1tyXTthcGkuYXNzZXJ0KG51bGwhPW8mJih0eXBlb2Ygbz09PWQudHlwZXx8Im51bWJlciI9PT1kLnR5cGUmJiJzdHJpbmciPT10eXBlb2YgbyYmIWFwaS5CaWdOdW1iZXIobykuaXNOYU4oKSksYGRhdGEgcHJvcGVydHkgdHlwZSBtaXNtYXRjaDogZXhwZWN0ZWQgJHtkLnR5cGV9IGJ1dCBnb3QgJHt0eXBlb2Ygb30gZm9yIHByb3BlcnR5ICR7cn1gKSYmYXBpLmFzc2VydCgic3RyaW5nIiE9dHlwZW9mIG98fG8ubGVuZ3RoPD0xMDAsInN0cmluZyBwcm9wZXJ0eSBtYXggbGVuZ3RoIGlzIDEwMCBjaGFyYWN0ZXJzIikmJmFwaS5hc3NlcnQoImNvbnRyYWN0Ij09PXQmJmQuYXV0aG9yaXplZEVkaXRpbmdDb250cmFjdHMuaW5jbHVkZXMoZSl8fCJ1c2VyIj09PXQmJmQuYXV0aG9yaXplZEVkaXRpbmdBY2NvdW50cy5pbmNsdWRlcyhlKSwibm90IGFsbG93ZWQgdG8gc2V0IGRhdGEgcHJvcGVydGllcyIpJiYobD0hMCwibnVtYmVyIj09PWQudHlwZSYmInN0cmluZyI9PXR5cGVvZiBvJiYoYVtyXT1hcGkuQmlnTnVtYmVyKG8pLnRvTnVtYmVyKCkpKX1pZighbClyZXR1cm4hMX1yZXR1cm4hMH0saXNWYWxpZERhdGFQcm9wZXJ0aWVzQXJyYXk9KGUsdCxzLGEpPT57dHJ5e2ZvcihsZXQgbj0wO248YS5sZW5ndGg7bis9MSl7bGV0IGk9ITEse2lkOnIscHJvcGVydGllczpvfT1hW25dO2lmKGFwaS5hc3NlcnQociYmInN0cmluZyI9PXR5cGVvZiByJiYhYXBpLkJpZ051bWJlcihyKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKHIpLmd0KDApJiZvJiYib2JqZWN0Ij09dHlwZW9mIG8sImludmFsaWQgZGF0YSBwcm9wZXJ0aWVzIikmJmlzVmFsaWREYXRhUHJvcGVydGllcyhlLHQscyxvKSYmKGk9ITApLCFpKXJldHVybiExfX1jYXRjaChsKXtyZXR1cm4hMX1yZXR1cm4hMH0saXNWYWxpZE5mdElkQXJyYXk9ZT0+e3RyeXtsZXQgdD0wO2ZvcihsZXQgcz0wO3M8ZS5sZW5ndGg7cys9MSl7bGV0IGE9ITEse3N5bWJvbDpuLGlkczppfT1lW3NdO2lmKGFwaS5hc3NlcnQobiYmInN0cmluZyI9PXR5cGVvZiBuJiZhcGkudmFsaWRhdG9yLmlzQWxwaGEobikmJmFwaS52YWxpZGF0b3IuaXNVcHBlcmNhc2UobikmJm4ubGVuZ3RoPjAmJm4ubGVuZ3RoPD0xMCYmaSYmIm9iamVjdCI9PXR5cGVvZiBpJiZBcnJheS5pc0FycmF5KGkpLCJpbnZhbGlkIG5mdCBsaXN0IikmJih0Kz1pLmxlbmd0aCxhcGkuYXNzZXJ0KHQ8PTUwLCJjYW5ub3Qgb3BlcmF0ZSBvbiBtb3JlIHRoYW4gNTAgTkZUIGluc3RhbmNlcyBhdCBvbmNlIikpKXtmb3IobGV0IHI9MDtyPGkubGVuZ3RoO3IrPTEpe2xldCBvPWlbcl07aWYoIWFwaS5hc3NlcnQobyYmInN0cmluZyI9PXR5cGVvZiBvJiYhYXBpLkJpZ051bWJlcihvKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKG8pLmd0KDApLCJpbnZhbGlkIG5mdCBsaXN0IikpcmV0dXJuITF9YT0hMH1pZighYSlyZXR1cm4hMX19Y2F0Y2gobCl7cmV0dXJuITF9cmV0dXJuITB9LGlzVmFsaWRUb2tlbkJhc2tldD1hc3luYyhlLHQscyxhLG4pPT57dHJ5e2xldCBpPU9iamVjdC5rZXlzKGUpLmxlbmd0aDtpZihpPjEwKXJldHVybiExO2ZvcihsZXRbcixvXW9mIE9iamVjdC5lbnRyaWVzKGUpKXtsZXQgbD0hMTtpZigic3RyaW5nIj09dHlwZW9mIHImJmFwaS52YWxpZGF0b3IuaXNBbHBoYShyKSYmYXBpLnZhbGlkYXRvci5pc1VwcGVyY2FzZShyKSYmci5sZW5ndGg+MCYmci5sZW5ndGg8PTEwKXtsZXQgZD1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpyfSk7aWYoZCYmbyYmInN0cmluZyI9PXR5cGVvZiBvJiYhYXBpLkJpZ051bWJlcihvKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKG8pLmd0KDApJiZjb3VudERlY2ltYWxzKG8pPD1kLnByZWNpc2lvbil7bGV0IHU9cj09PWE/Y2FsY3VsYXRlQmFsYW5jZShvLG4sZC5wcmVjaXNpb24sITApOm8sYz1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsdCx7YWNjb3VudDpzLHN5bWJvbDpyfSk7YyYmYXBpLkJpZ051bWJlcihjLmJhbGFuY2UpLmd0ZSh1KSYmKGw9ITApfX1pZighbClyZXR1cm4hMX19Y2F0Y2goZil7cmV0dXJuITF9cmV0dXJuITB9LHRyYW5zZmVyQW5kVmVyaWZ5TmZ0cz1hc3luYyhlLHQscyxhLG4saSxyKT0+e2xldCBvPXtzdWNjZXNzOltdLGZhaWw6W119LGw9InVzZXIiPT09dD8idSI6ImMiLGQ9InVzZXIiPT09YT8idSI6ImMiO2F3YWl0IGFjdGlvbnMudHJhbnNmZXIoe2Zyb21UeXBlOnQsdG86cyx0b1R5cGU6YSxuZnRzOm4saXNTaWduZWRXaXRoQWN0aXZlS2V5OmksY2FsbGluZ0NvbnRyYWN0SW5mbzpyfSk7bGV0IHU9YXBpLmxvZ3MoKSxjPXt9LGY9e307aWYodS5ldmVudHMpZm9yKGxldCBwPTA7cDx1LmV2ZW50cy5sZW5ndGg7cCs9MSl7bGV0IGc9dS5ldmVudHNbcF07aWYoZy5jb250cmFjdCYmZy5ldmVudCYmZy5kYXRhJiYibmZ0Ij09PWcuY29udHJhY3QmJiJ0cmFuc2ZlciI9PT1nLmV2ZW50JiZnLmRhdGEuZnJvbT09PWUmJmcuZGF0YS5mcm9tVHlwZT09PWwmJmcuZGF0YS50bz09PXMmJmcuZGF0YS50b1R5cGU9PT1kKXtsZXQgeT1nLmRhdGEuc3ltYm9sKyItIitnLmRhdGEuaWQ7Y1t5XT0xfX1mb3IobGV0IG09MDttPG4ubGVuZ3RoO20rPTEpe2xldHtzeW1ib2w6JCxpZHM6aH09blttXSxiPVtdLHY9W107Zm9yKGxldCB3PTA7dzxoLmxlbmd0aDt3Kz0xKXtsZXQgTj0kKyItIitoW3ddO04gaW4gZnx8KE4gaW4gYz9iLnB1c2goaFt3XS50b1N0cmluZygpKTp2LnB1c2goaFt3XS50b1N0cmluZygpKSxmW05dPTEpfWIubGVuZ3RoPjAmJm8uc3VjY2Vzcy5wdXNoKHtzeW1ib2w6JCxpZHM6Yn0pLHYubGVuZ3RoPjAmJm8uZmFpbC5wdXNoKHtzeW1ib2w6JCxpZHM6dn0pfXJldHVybiBvfTthY3Rpb25zLnVwZGF0ZVVybD1hc3luYyBlPT57bGV0e3VybDp0LHN5bWJvbDpzfT1lO2lmKGFwaS5hc3NlcnQocyYmInN0cmluZyI9PXR5cGVvZiBzJiZ0JiYic3RyaW5nIj09dHlwZW9mIHQsImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQodC5sZW5ndGg8PTI1NSwiaW52YWxpZCB1cmw6IG1heCBsZW5ndGggb2YgMjU1Iikpe2xldCBhPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN9KTtpZihhJiZhcGkuYXNzZXJ0KGEuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpdHJ5e2xldCBuPUpTT04ucGFyc2UoYS5tZXRhZGF0YSk7YXBpLmFzc2VydChuJiZuLnVybCwiYW4gZXJyb3Igb2NjdXJlZCB3aGVuIHRyeWluZyB0byB1cGRhdGUgdGhlIHVybCIpJiYobi51cmw9dCxhLm1ldGFkYXRhPUpTT04uc3RyaW5naWZ5KG4pLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGEpKX1jYXRjaChpKXt9fX0sYWN0aW9ucy51cGRhdGVNZXRhZGF0YT1hc3luYyBlPT57bGV0e21ldGFkYXRhOnQsc3ltYm9sOnN9PWU7aWYoYXBpLmFzc2VydChzJiYic3RyaW5nIj09dHlwZW9mIHMmJnQmJiJvYmplY3QiPT10eXBlb2YgdCwiaW52YWxpZCBwYXJhbXMiKSl7bGV0IGE9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c30pO2lmKGEmJmFwaS5hc3NlcnQoYS5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSl0cnl7bGV0IG49SlNPTi5zdHJpbmdpZnkodCk7YXBpLmFzc2VydChuLmxlbmd0aDw9MWUzLCJpbnZhbGlkIG1ldGFkYXRhOiBtYXggbGVuZ3RoIG9mIDEwMDAiKSYmKGEubWV0YWRhdGE9bixhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixhKSl9Y2F0Y2goaSl7fX19LGFjdGlvbnMudXBkYXRlTmFtZT1hc3luYyBlPT57bGV0e25hbWU6dCxzeW1ib2w6c309ZTtpZihhcGkuYXNzZXJ0KHMmJiJzdHJpbmciPT10eXBlb2YgcyYmdCYmInN0cmluZyI9PXR5cGVvZiB0LCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QodCwiICIpKSYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PTUwLCJpbnZhbGlkIG5hbWU6IGxldHRlcnMsIG51bWJlcnMsIHdoaXRlc3BhY2VzIG9ubHksIG1heCBsZW5ndGggb2YgNTAiKSl7bGV0IGE9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c30pO2EmJmFwaS5hc3NlcnQoYS5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmKGEubmFtZT10LGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGEpKX19LGFjdGlvbnMudXBkYXRlT3JnTmFtZT1hc3luYyBlPT57bGV0e29yZ05hbWU6dCxzeW1ib2w6c309ZTtpZihhcGkuYXNzZXJ0KHMmJiJzdHJpbmciPT10eXBlb2YgcyYmdCYmInN0cmluZyI9PXR5cGVvZiB0LCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QodCwiICIpKSYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PTUwLCJpbnZhbGlkIG9yZyBuYW1lOiBsZXR0ZXJzLCBudW1iZXJzLCB3aGl0ZXNwYWNlcyBvbmx5LCBtYXggbGVuZ3RoIG9mIDUwIikpe2xldCBhPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN9KTthJiZhcGkuYXNzZXJ0KGEuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJihhLm9yZ05hbWU9dCxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixhKSl9fSxhY3Rpb25zLnVwZGF0ZVByb2R1Y3ROYW1lPWFzeW5jIGU9PntsZXR7cHJvZHVjdE5hbWU6dCxzeW1ib2w6c309ZTtpZihhcGkuYXNzZXJ0KHMmJiJzdHJpbmciPT10eXBlb2YgcyYmdCYmInN0cmluZyI9PXR5cGVvZiB0LCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QodCwiICIpKSYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PTUwLCJpbnZhbGlkIHByb2R1Y3QgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpKXtsZXQgYT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzfSk7YSYmYXBpLmFzc2VydChhLmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpJiYoYS5wcm9kdWN0TmFtZT10LGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGEpKX19LGFjdGlvbnMuYWRkQXV0aG9yaXplZElzc3VpbmdBY2NvdW50cz1hc3luYyBlPT57bGV0e2FjY291bnRzOnQsc3ltYm9sOnMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmF9PWU7aWYoYXBpLmFzc2VydCghMD09PWEsInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHMmJiJzdHJpbmciPT10eXBlb2YgcyYmdCYmIm9iamVjdCI9PXR5cGVvZiB0JiZBcnJheS5pc0FycmF5KHQpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KHQubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBhY2NvdW50cyIpKXtsZXQgbj1pc1ZhbGlkQWNjb3VudHNBcnJheSh0KTtpZihhcGkuYXNzZXJ0KG4sImludmFsaWQgYWNjb3VudCBsaXN0Iikpe2xldCBpPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN9KTtpZihpKXtsZXQgcj1bXTtpZih0LmZvckVhY2goZT0+e2xldCB0PWUudHJpbSgpLnRvTG93ZXJDYXNlKCkscz0hMTtmb3IobGV0IGE9MDthPGkuYXV0aG9yaXplZElzc3VpbmdBY2NvdW50cy5sZW5ndGg7YSs9MSlpZih0PT09aS5hdXRob3JpemVkSXNzdWluZ0FjY291bnRzW2FdKXtzPSEwO2JyZWFrfXN8fHIucHVzaCh0KX0pLGFwaS5hc3NlcnQoaS5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmYXBpLmFzc2VydCghY29udGFpbnNEdXBsaWNhdGVzKHIpLCJjYW5ub3QgYWRkIHRoZSBzYW1lIGFjY291bnQgdHdpY2UiKSYmYXBpLmFzc2VydChpLmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMubGVuZ3RoK3IubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBhY2NvdW50cyIpKXtsZXQgbz1pLmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMuY29uY2F0KHIpO2kuYXV0aG9yaXplZElzc3VpbmdBY2NvdW50cz1vLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGkpfX19fX0sYWN0aW9ucy5hZGRBdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1hc3luYyBlPT57bGV0e2NvbnRyYWN0czp0LHN5bWJvbDpzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTphfT1lO2lmKGFwaS5hc3NlcnQoITA9PT1hLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzJiYic3RyaW5nIj09dHlwZW9mIHMmJnQmJiJvYmplY3QiPT10eXBlb2YgdCYmQXJyYXkuaXNBcnJheSh0KSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydCh0Lmxlbmd0aDw9MTAsImNhbm5vdCBoYXZlIG1vcmUgdGhhbiAxMCBhdXRob3JpemVkIGlzc3VpbmcgY29udHJhY3RzIikpe2xldCBuPWlzVmFsaWRDb250cmFjdHNBcnJheSh0KTtpZihhcGkuYXNzZXJ0KG4sImludmFsaWQgY29udHJhY3QgbGlzdCIpKXtsZXQgaT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzfSk7aWYoaSl7bGV0IHI9W107aWYodC5mb3JFYWNoKGU9PntsZXQgdD1lLnRyaW0oKSxzPSExO2ZvcihsZXQgYT0wO2E8aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cy5sZW5ndGg7YSs9MSlpZih0PT09aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0c1thXSl7cz0hMDticmVha31zfHxyLnB1c2godCl9KSxhcGkuYXNzZXJ0KGkuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJmFwaS5hc3NlcnQoIWNvbnRhaW5zRHVwbGljYXRlcyhyKSwiY2Fubm90IGFkZCB0aGUgc2FtZSBjb250cmFjdCB0d2ljZSIpJiZhcGkuYXNzZXJ0KGkuYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMubGVuZ3RoK3IubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBjb250cmFjdHMiKSl7bGV0IG89aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cy5jb25jYXQocik7aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1vLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGkpfX19fX0sYWN0aW9ucy5yZW1vdmVBdXRob3JpemVkSXNzdWluZ0FjY291bnRzPWFzeW5jIGU9PntsZXR7YWNjb3VudHM6dCxzeW1ib2w6cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6YX09ZTtpZihhcGkuYXNzZXJ0KCEwPT09YSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQocyYmInN0cmluZyI9PXR5cGVvZiBzJiZ0JiYib2JqZWN0Ij09dHlwZW9mIHQmJkFycmF5LmlzQXJyYXkodCksImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQodC5sZW5ndGg8PTEwLCJjYW5ub3QgcmVtb3ZlIG1vcmUgdGhhbiAxMCBhdXRob3JpemVkIGlzc3VpbmcgYWNjb3VudHMiKSl7bGV0IG49aXNWYWxpZEFjY291bnRzQXJyYXkodCk7aWYoYXBpLmFzc2VydChuLCJpbnZhbGlkIGFjY291bnQgbGlzdCIpKXtsZXQgaT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzfSk7aWYoaSYmYXBpLmFzc2VydChpLmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpKXtsZXQgcj1pLmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMuZmlsdGVyKGU9Pntmb3IobGV0IHM9MDtzPHQubGVuZ3RoO3MrPTEpe2xldCBhPXRbc10udHJpbSgpLnRvTG93ZXJDYXNlKCk7aWYoZT09PWEpcmV0dXJuITF9cmV0dXJuITB9KTtpLmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHM9cixhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixpKX19fX0sYWN0aW9ucy5yZW1vdmVBdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1hc3luYyBlPT57bGV0e2NvbnRyYWN0czp0LHN5bWJvbDpzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTphfT1lO2lmKGFwaS5hc3NlcnQoITA9PT1hLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzJiYic3RyaW5nIj09dHlwZW9mIHMmJnQmJiJvYmplY3QiPT10eXBlb2YgdCYmQXJyYXkuaXNBcnJheSh0KSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydCh0Lmxlbmd0aDw9MTAsImNhbm5vdCByZW1vdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBjb250cmFjdHMiKSl7bGV0IG49aXNWYWxpZENvbnRyYWN0c0FycmF5KHQpO2lmKGFwaS5hc3NlcnQobiwiaW52YWxpZCBjb250cmFjdCBsaXN0Iikpe2xldCBpPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN9KTtpZihpJiZhcGkuYXNzZXJ0KGkuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2xldCByPWkuYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMuZmlsdGVyKGU9Pntmb3IobGV0IHM9MDtzPHQubGVuZ3RoO3MrPTEpe2xldCBhPXRbc10udHJpbSgpO2lmKGU9PT1hKXJldHVybiExfXJldHVybiEwfSk7aS5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1yLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLGkpfX19fSxhY3Rpb25zLnRyYW5zZmVyT3duZXJzaGlwPWFzeW5jIGU9PntsZXR7c3ltYm9sOnQsdG86cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6YX09ZTtpZihhcGkuYXNzZXJ0KCEwPT09YSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQodCYmInN0cmluZyI9PXR5cGVvZiB0JiZzJiYic3RyaW5nIj09dHlwZW9mIHMsImludmFsaWQgcGFyYW1zIikpe2xldCBuPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnR9KTtpZihuJiZhcGkuYXNzZXJ0KG4uaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2xldCBpPXMudHJpbSgpLnRvTG93ZXJDYXNlKCk7YXBpLmFzc2VydChpc1ZhbGlkSGl2ZUFjY291bnRMZW5ndGgoaSksImludmFsaWQgdG8iKSYmKG4uaXNzdWVyPWksYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbikpfX19LGFjdGlvbnMuZW5hYmxlRGVsZWdhdGlvbj1hc3luYyBlPT57bGV0e3N5bWJvbDp0LHVuZGVsZWdhdGlvbkNvb2xkb3duOnMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmF9PWUsbj1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSkse2VuYWJsZURlbGVnYXRpb25GZWU6aX09bixyPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOiJCRUUifSksbz0hIWFwaS5CaWdOdW1iZXIoaSkubHRlKDApfHxyJiZhcGkuQmlnTnVtYmVyKHIuYmFsYW5jZSkuZ3RlKGkpO2lmKGFwaS5hc3NlcnQobywieW91IG11c3QgaGF2ZSBlbm91Z2ggdG9rZW5zIHRvIGNvdmVyIGZlZXMiKSYmYXBpLmFzc2VydCghMD09PWEsInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHQmJiJzdHJpbmciPT10eXBlb2YgdCwiaW52YWxpZCBzeW1ib2wiKSYmYXBpLmFzc2VydChzJiZOdW1iZXIuaXNJbnRlZ2VyKHMpJiZzPjAmJnM8PTE4MjUwLCJ1bmRlbGVnYXRpb25Db29sZG93biBtdXN0IGJlIGFuIGludGVnZXIgYmV0d2VlbiAxIGFuZCAxODI1MCIpKXtsZXQgbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDp0fSk7aWYoYXBpLmFzc2VydChudWxsIT09bCwic3ltYm9sIGRvZXMgbm90IGV4aXN0IikmJmFwaS5hc3NlcnQobC5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1sLmRlbGVnYXRpb25FbmFibGVkfHwhMT09PWwuZGVsZWdhdGlvbkVuYWJsZWQsImRlbGVnYXRpb24gYWxyZWFkeSBlbmFibGVkIikpe2lmKGFwaS5CaWdOdW1iZXIoaSkuZ3QoMCkpe2xldCBkPWF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOiJCRUUiLHF1YW50aXR5OmksaXNTaWduZWRXaXRoQWN0aXZlS2V5OmF9KTtpZighaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQoZCxhcGkuc2VuZGVyLCJudWxsIiwiQkVFIixpLCJ0cmFuc2ZlciIpKXJldHVybiExfXJldHVybiBsLmRlbGVnYXRpb25FbmFibGVkPSEwLGwudW5kZWxlZ2F0aW9uQ29vbGRvd249cyxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixsKSwhMH19cmV0dXJuITF9LGFjdGlvbnMudXBkYXRlUHJvcGVydHlEZWZpbml0aW9uPWFzeW5jIGU9PntsZXR7c3ltYm9sOnQsbmFtZTpzLG5ld05hbWU6YSx0eXBlOm4saXNSZWFkT25seTppLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTpyfT1lO2lmKGFwaS5hc3NlcnQoITA9PT1yLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCh0JiYic3RyaW5nIj09dHlwZW9mIHQmJnMmJiJzdHJpbmciPT10eXBlb2YgcywiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChhcGkudmFsaWRhdG9yLmlzQWxwaGFudW1lcmljKHMpJiZzLmxlbmd0aD4wJiZzLmxlbmd0aDw9MjUsImludmFsaWQgbmFtZTogbGV0dGVycyAmIG51bWJlcnMgb25seSwgbWF4IGxlbmd0aCBvZiAyNSIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWF8fCJzdHJpbmciPT10eXBlb2YgYSYmYXBpLnZhbGlkYXRvci5pc0FscGhhbnVtZXJpYyhhKSYmYS5sZW5ndGg+MCYmYS5sZW5ndGg8PTI1LCJpbnZhbGlkIG5ldyBuYW1lOiBsZXR0ZXJzICYgbnVtYmVycyBvbmx5LCBtYXggbGVuZ3RoIG9mIDI1IikmJmFwaS5hc3NlcnQodm9pZCAwPT09bnx8InN0cmluZyI9PXR5cGVvZiBuJiYoIm51bWJlciI9PT1ufHwic3RyaW5nIj09PW58fCJib29sZWFuIj09PW4pLCJpbnZhbGlkIHR5cGU6IG11c3QgYmUgbnVtYmVyLCBzdHJpbmcsIG9yIGJvb2xlYW4iKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1pfHwiYm9vbGVhbiI9PXR5cGVvZiBpLCJpbnZhbGlkIGlzUmVhZE9ubHk6IG11c3QgYmUgdHJ1ZSBvciBmYWxzZSIpKXtsZXQgbz1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDp0fSk7aWYobyYmYXBpLmFzc2VydCgwPT09by5zdXBwbHksImNhbm5vdCBjaGFuZ2UgZGF0YSBwcm9wZXJ0eSBkZWZpbml0aW9uOyB0b2tlbnMgYWxyZWFkeSBpc3N1ZWQiKSYmYXBpLmFzc2VydChzIGluIG8ucHJvcGVydGllcywicHJvcGVydHkgbXVzdCBleGlzdCIpJiZhcGkuYXNzZXJ0KG8uaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2lmKHZvaWQgMCE9PWEmJih2b2lkIDAhPT1vLmdyb3VwQnkmJm8uZ3JvdXBCeS5sZW5ndGg+MCYmIWFwaS5hc3NlcnQoIW8uZ3JvdXBCeS5pbmNsdWRlcyhzKSwiY2Fubm90IGNoYW5nZSBkYXRhIHByb3BlcnR5IG5hbWU7IHByb3BlcnR5IGlzIHBhcnQgb2YgZ3JvdXBCeSIpfHwhYXBpLmFzc2VydChhIT09cywibmV3IG5hbWUgbXVzdCBiZSBkaWZmZXJlbnQgZnJvbSBvbGQgbmFtZSIpfHwhYXBpLmFzc2VydCghKGEgaW4gby5wcm9wZXJ0aWVzKSwidGhlcmUgaXMgYWxyZWFkeSBhIGRhdGEgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4gbmV3IG5hbWUiKSkpcmV0dXJuITE7bGV0IGw9ITEsZD1vLnByb3BlcnRpZXNbc10udHlwZSx1PW8ucHJvcGVydGllc1tzXS5pc1JlYWRPbmx5O3JldHVybiB2b2lkIDAhPT1uJiZuIT09ZCYmKG8ucHJvcGVydGllc1tzXS50eXBlPW4sbD0hMCksdm9pZCAwIT09aSYmaSE9PXUmJihvLnByb3BlcnRpZXNbc10uaXNSZWFkT25seT1pLGw9ITApLHZvaWQgMCE9PWEmJmEhPT1zJiYoby5wcm9wZXJ0aWVzW2FdPW8ucHJvcGVydGllc1tzXSxkZWxldGUgby5wcm9wZXJ0aWVzW3NdLGw9ITApLGwmJihhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixvKSxhcGkuZW1pdCgidXBkYXRlUHJvcGVydHlEZWZpbml0aW9uIix7c3ltYm9sOnQsb3JpZ2luYWxOYW1lOnMsb3JpZ2luYWxUeXBlOmQsb3JpZ2luYWxJc1JlYWRPbmx5OnUsbmV3TmFtZTphLG5ld1R5cGU6bixuZXdJc1JlYWRPbmx5Oml9KSksITB9fXJldHVybiExfSxhY3Rpb25zLmFkZFByb3BlcnR5PWFzeW5jIGU9PntsZXR7c3ltYm9sOnQsbmFtZTpzLHR5cGU6YSxpc1JlYWRPbmx5Om4sYXV0aG9yaXplZEVkaXRpbmdBY2NvdW50czppLGF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzOnIsaXNTaWduZWRXaXRoQWN0aXZlS2V5Om99PWUsbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSkse2RhdGFQcm9wZXJ0eUNyZWF0aW9uRmVlOmR9PWw7aWYoYXBpLmFzc2VydCghMD09PW8sInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHQmJiJzdHJpbmciPT10eXBlb2YgdCYmcyYmInN0cmluZyI9PXR5cGVvZiBzJiYodm9pZCAwPT09bnx8ImJvb2xlYW4iPT10eXBlb2YgbikmJih2b2lkIDA9PT1pfHxpJiYib2JqZWN0Ij09dHlwZW9mIGkmJkFycmF5LmlzQXJyYXkoaSkpJiYodm9pZCAwPT09cnx8ciYmIm9iamVjdCI9PXR5cGVvZiByJiZBcnJheS5pc0FycmF5KHIpKSYmYSYmInN0cmluZyI9PXR5cGVvZiBhLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMocykmJnMubGVuZ3RoPjAmJnMubGVuZ3RoPD0yNSwiaW52YWxpZCBuYW1lOiBsZXR0ZXJzICYgbnVtYmVycyBvbmx5LCBtYXggbGVuZ3RoIG9mIDI1IikmJmFwaS5hc3NlcnQoIm51bWJlciI9PT1hfHwic3RyaW5nIj09PWF8fCJib29sZWFuIj09PWEsImludmFsaWQgdHlwZTogbXVzdCBiZSBudW1iZXIsIHN0cmluZywgb3IgYm9vbGVhbiIpKXtsZXQgdT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDp0fSk7aWYodSYmYXBpLmFzc2VydCghKHMgaW4gdS5wcm9wZXJ0aWVzKSwiY2Fubm90IGFkZCB0aGUgc2FtZSBwcm9wZXJ0eSB0d2ljZSIpJiZhcGkuYXNzZXJ0KHUuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2xldCBjPU9iamVjdC5rZXlzKHUucHJvcGVydGllcykubGVuZ3RoO2lmKGM+PTMpe2xldCBmPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOiJCRUUifSkscD0hIWFwaS5CaWdOdW1iZXIoZCkubHRlKDApfHxmJiZhcGkuQmlnTnVtYmVyKGYuYmFsYW5jZSkuZ3RlKGQpO2lmKCFhcGkuYXNzZXJ0KHAsInlvdSBtdXN0IGhhdmUgZW5vdWdoIHRva2VucyB0byBjb3ZlciB0aGUgY3JlYXRpb24gZmVlcyIpKXJldHVybiExO2lmKGFwaS5CaWdOdW1iZXIoZCkuZ3QoMCkpe2xldCBnPWF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOiJCRUUiLHF1YW50aXR5OmQsaXNTaWduZWRXaXRoQWN0aXZlS2V5Om99KTtpZighaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQoZyxhcGkuc2VuZGVyLCJudWxsIiwiQkVFIixkLCJ0cmFuc2ZlciIpKXJldHVybiExfX1sZXQgeT12b2lkIDAhPT1uJiZuLG09dm9pZCAwPT09aT9bYXBpLnNlbmRlcl06W10sJD17dHlwZTphLGlzUmVhZE9ubHk6eSxhdXRob3JpemVkRWRpdGluZ0FjY291bnRzOm0sYXV0aG9yaXplZEVkaXRpbmdDb250cmFjdHM6W119O3JldHVybiB1LnByb3BlcnRpZXNbc109JCxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIix1KSwoaXx8cikmJmF3YWl0IGFjdGlvbnMuc2V0UHJvcGVydHlQZXJtaXNzaW9ucyh7c3ltYm9sOnQsbmFtZTpzLGFjY291bnRzOmksY29udHJhY3RzOnIsaXNTaWduZWRXaXRoQWN0aXZlS2V5Om99KSwhMH19cmV0dXJuITF9LGFjdGlvbnMuc2V0UHJvcGVydHlQZXJtaXNzaW9ucz1hc3luYyBlPT57bGV0e3N5bWJvbDp0LG5hbWU6cyxhY2NvdW50czphLGNvbnRyYWN0czpuLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppfT1lO2lmKGFwaS5hc3NlcnQoITA9PT1pLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCh0JiYic3RyaW5nIj09dHlwZW9mIHQmJnMmJiJzdHJpbmciPT10eXBlb2YgcyYmKHZvaWQgMD09PWF8fGEmJiJvYmplY3QiPT10eXBlb2YgYSYmQXJyYXkuaXNBcnJheShhKSkmJih2b2lkIDA9PT1ufHxuJiYib2JqZWN0Ij09dHlwZW9mIG4mJkFycmF5LmlzQXJyYXkobikpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMocykmJnMubGVuZ3RoPjAmJnMubGVuZ3RoPD0yNSwiaW52YWxpZCBuYW1lOiBsZXR0ZXJzICYgbnVtYmVycyBvbmx5LCBtYXggbGVuZ3RoIG9mIDI1IikmJmFwaS5hc3NlcnQodm9pZCAwPT09YXx8YS5sZW5ndGg8PTEwLCJjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gMTAgYXV0aG9yaXplZCBhY2NvdW50cyIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PW58fG4ubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgY29udHJhY3RzIikmJmFwaS5hc3NlcnQodm9pZCAwPT09YXx8aXNWYWxpZEFjY291bnRzQXJyYXkoYSksImludmFsaWQgYWNjb3VudCBsaXN0IikmJmFwaS5hc3NlcnQodm9pZCAwPT09bnx8aXNWYWxpZENvbnRyYWN0c0FycmF5KG4pLCJpbnZhbGlkIGNvbnRyYWN0IGxpc3QiKSl7bGV0IHI9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6dH0pO2lmKHImJmFwaS5hc3NlcnQocyBpbiByLnByb3BlcnRpZXMsInByb3BlcnR5IG11c3QgZXhpc3QiKSYmYXBpLmFzc2VydChyLmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpKXtsZXQgbz1bXSxsPVtdO2lmKGEmJihvPWEubWFwKGU9PmUudHJpbSgpLnRvTG93ZXJDYXNlKCkpKSxuJiYobD1uLm1hcChlPT5lLnRyaW0oKSkpLGFwaS5hc3NlcnQodm9pZCAwPT09YXx8IWNvbnRhaW5zRHVwbGljYXRlcyhvKSwiY2Fubm90IGFkZCB0aGUgc2FtZSBhY2NvdW50IHR3aWNlIikmJmFwaS5hc3NlcnQodm9pZCAwPT09bnx8IWNvbnRhaW5zRHVwbGljYXRlcyhsKSwiY2Fubm90IGFkZCB0aGUgc2FtZSBjb250cmFjdCB0d2ljZSIpKXtsZXQgZD0hMTthJiYoci5wcm9wZXJ0aWVzW3NdLmF1dGhvcml6ZWRFZGl0aW5nQWNjb3VudHM9byxkPSEwKSxuJiYoci5wcm9wZXJ0aWVzW3NdLmF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzPWwsZD0hMCksZCYmYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIscil9fX19LGFjdGlvbnMuc2V0R3JvdXBCeT1hc3luYyBlPT57bGV0e3N5bWJvbDp0LHByb3BlcnRpZXM6cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6YX09ZTtpZihhcGkuYXNzZXJ0KCEwPT09YSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQodCYmInN0cmluZyI9PXR5cGVvZiB0JiZzJiYib2JqZWN0Ij09dHlwZW9mIHMmJkFycmF5LmlzQXJyYXkocyksImludmFsaWQgcGFyYW1zIikpe2xldCBuPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnR9KTtpZihuKXtsZXQgaT1PYmplY3Qua2V5cyhuLnByb3BlcnRpZXMpLmxlbmd0aDtpZihhcGkuYXNzZXJ0KG4uaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJmFwaS5hc3NlcnQodm9pZCAwPT09bi5ncm91cEJ5fHwwPT09bi5ncm91cEJ5Lmxlbmd0aCwibGlzdCBpcyBhbHJlYWR5IHNldCIpJiZhcGkuYXNzZXJ0KHMubGVuZ3RoPD1pLCJjYW5ub3Qgc2V0IG1vcmUgZGF0YSBwcm9wZXJ0aWVzIHRoYW4gTkZUIGhhcyIpJiZhcGkuYXNzZXJ0KCFjb250YWluc0R1cGxpY2F0ZXMocyksImxpc3QgY2Fubm90IGNvbnRhaW4gZHVwbGljYXRlcyIpKXtmb3IobGV0IHI9MDtyPHMubGVuZ3RoO3IrPTEpe2xldCBvPXNbcl07aWYoIWFwaS5hc3NlcnQobyYmInN0cmluZyI9PXR5cGVvZiBvJiZvIGluIG4ucHJvcGVydGllcywiZGF0YSBwcm9wZXJ0eSBtdXN0IGV4aXN0IikpcmV0dXJuITF9cmV0dXJuIG4uZ3JvdXBCeT1zLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLG4pLCEwfX19cmV0dXJuITF9LGFjdGlvbnMuc2V0UHJvcGVydGllcz1hc3luYyBlPT57bGV0e3N5bWJvbDp0LGZyb21UeXBlOnMsbmZ0czphLGNhbGxpbmdDb250cmFjdEluZm86bn09ZSxpPVsidXNlciIsImNvbnRyYWN0Il0scj12b2lkIDA9PT1zPyJ1c2VyIjpzO2lmKGFwaS5hc3NlcnQoYSYmIm9iamVjdCI9PXR5cGVvZiBhJiZBcnJheS5pc0FycmF5KGEpJiZyJiYic3RyaW5nIj09dHlwZW9mIHImJmkuaW5jbHVkZXMocikmJnQmJiJzdHJpbmciPT10eXBlb2YgdCYmKG58fHZvaWQgMD09PW4mJiJ1c2VyIj09PXIpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGEubGVuZ3RoPD01MCwiY2Fubm90IHNldCBwcm9wZXJ0aWVzIG9uIG1vcmUgdGhhbiA1MCBORlQgaW5zdGFuY2VzIGF0IG9uY2UiKSl7bGV0IG89InVzZXIiPT09cj9hcGkuc2VuZGVyOm4ubmFtZSxsPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnR9KTtpZihhcGkuYXNzZXJ0KG51bGwhPT1sLCJzeW1ib2wgZG9lcyBub3QgZXhpc3QiKSl7aWYoIWlzVmFsaWREYXRhUHJvcGVydGllc0FycmF5KG8scixsLGEpKXJldHVybiExO2xldCBkPXQrImluc3RhbmNlcyI7Zm9yKGxldCB1PTA7dTxhLmxlbmd0aDt1Kz0xKXtsZXR7aWQ6Yyxwcm9wZXJ0aWVzOmZ9PWFbdV07aWYoMD09PU9iamVjdC5rZXlzKGYpLmxlbmd0aCljb250aW51ZTtsZXQgcD1hd2FpdCBhcGkuZGIuZmluZE9uZShkLHtfaWQ6YXBpLkJpZ051bWJlcihjKS50b051bWJlcigpfSk7aWYoYXBpLmFzc2VydChudWxsIT09cCwibmZ0IGluc3RhbmNlIGRvZXMgbm90IGV4aXN0Iikpe2xldCBnPSExO2ZvcihsZXRbeSxtXW9mIE9iamVjdC5lbnRyaWVzKGYpKXtsZXQgJD1sLnByb3BlcnRpZXNbeV0saD1udWxsOyQuaXNSZWFkT25seT9hcGkuYXNzZXJ0KCEoeSBpbiBwLnByb3BlcnRpZXMpLCJjYW5ub3QgZWRpdCByZWFkLW9ubHkgcHJvcGVydGllcyIpJiYocC5wcm9wZXJ0aWVzW3ldPW0sZz0hMCk6KGg9cC5wcm9wZXJ0aWVzW3ldLHAucHJvcGVydGllc1t5XT1tLGc9ITApLGcmJmghPT1tJiZhd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoIm1pbmluZyIsImhhbmRsZU5mdFNldFByb3BlcnR5Iix7c3ltYm9sOnQsbmZ0OnAscHJvcGVydHlOYW1lOnksb2xkVmFsdWU6aH0pfWcmJmF3YWl0IGFwaS5kYi51cGRhdGUoZCxwKX19cmV0dXJuITB9fXJldHVybiExfSxhY3Rpb25zLmJ1cm49YXN5bmMgZT0+e2xldHtmcm9tVHlwZTp0LG5mdHM6cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6YSxjYWxsaW5nQ29udHJhY3RJbmZvOm59PWUsaT1bInVzZXIiLCJjb250cmFjdCJdLHI9dm9pZCAwPT09dD8idXNlciI6dDtpZihhcGkuYXNzZXJ0KCEwPT09YSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQociYmInN0cmluZyI9PXR5cGVvZiByJiZpLmluY2x1ZGVzKHIpJiYobnx8dm9pZCAwPT09biYmInVzZXIiPT09cikmJnMmJiJvYmplY3QiPT10eXBlb2YgcyYmQXJyYXkuaXNBcnJheShzKSwiaW52YWxpZCBwYXJhbXMiKSYmaXNWYWxpZE5mdElkQXJyYXkocykpe2xldCBvPSJ1c2VyIj09PXI/YXBpLnNlbmRlcjpuLm5hbWUsbD0wLGQ9MCx1PSExO2ZvcihsZXQgYz0wO2M8cy5sZW5ndGg7Yys9MSl7bGV0e3N5bWJvbDpmLGlkczpwfT1zW2NdLGc9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6Zn0pO2lmKGcpe2xldCB5PWYrImluc3RhbmNlcyI7Zm9yKGxldCBtPTA7bTxwLmxlbmd0aDttKz0xKXtsZXQgJD1wW21dLGg9YXdhaXQgYXBpLmRiLmZpbmRPbmUoeSx7X2lkOmFwaS5CaWdOdW1iZXIoJCkudG9OdW1iZXIoKX0pO2lmKGgpe2xldCBiPSEwO2lmKGgubG9ja2VkTmZ0cyYmaC5sb2NrZWROZnRzLmxlbmd0aD4wPygwPT09ZCYmKHU9ITApLCgobCs9MSk+MXx8IXUpJiYoYj0hMSkpOnUmJihiPSExKSxkKz0xLGguYWNjb3VudD09PW8mJigidSI9PT1oLm93bmVkQnkmJiJ1c2VyIj09PXJ8fCJjIj09PWgub3duZWRCeSYmImNvbnRyYWN0Ij09PXIpJiZ2b2lkIDA9PT1oLmRlbGVnYXRlZFRvJiZiKXtsZXQgdj17fSx3PSEwO2ZvcihsZXRbTixfXW9mIE9iamVjdC5lbnRyaWVzKGgubG9ja2VkVG9rZW5zKSl7bGV0IEE9YXdhaXQgYXBpLnRyYW5zZmVyVG9rZW5zKG8sTixfLHIpO2lzVG9rZW5UcmFuc2ZlclZlcmlmaWVkKEEsIm5mdCIsbyxOLF8sInRyYW5zZmVyRnJvbUNvbnRyYWN0Iil8fCh2W05dPV8sdz0hMSl9YXBpLmFzc2VydCh3LGB1bmFibGUgdG8gcmVsZWFzZSBsb2NrZWQgdG9rZW5zIGluOiAke2Z9LCBpZCAkeyR9YCk7bGV0IFQ9aC5sb2NrZWROZnRzJiZoLmxvY2tlZE5mdHMubGVuZ3RoPjA/aC5sb2NrZWROZnRzOltdO2lmKHcmJmgubG9ja2VkTmZ0cyYmaC5sb2NrZWROZnRzLmxlbmd0aD4wKXtsZXQgaz1hd2FpdCB0cmFuc2ZlckFuZFZlcmlmeU5mdHMoIm5mdCIsImNvbnRyYWN0IixvLHIsaC5sb2NrZWROZnRzLGEse25hbWU6Im5mdCJ9KTtoLmxvY2tlZE5mdHM9ay5mYWlsLGgubG9ja2VkTmZ0cy5sZW5ndGg+MCYmKHc9ITEpLGFwaS5hc3NlcnQodyxgdW5hYmxlIHRvIHJlbGVhc2UgbG9ja2VkIE5GVCBpbnN0YW5jZXMgaW46ICR7Zn0sIGlkICR7JH1gKX1sZXQgQj1oLm93bmVkQnksRT1oLmxvY2tlZFRva2VucztoLmxvY2tlZFRva2Vucz12LHcmJihoLnByZXZpb3VzQWNjb3VudD1oLmFjY291bnQsaC5wcmV2aW91c093bmVkQnk9aC5vd25lZEJ5LGguYWNjb3VudD0ibnVsbCIsaC5vd25lZEJ5PSJ1IixnLmNpcmN1bGF0aW5nU3VwcGx5LT0xKSxhd2FpdCBhcGkuZGIudXBkYXRlKHksaCksdyYmYXBpLmVtaXQoImJ1cm4iLHthY2NvdW50Om8sb3duZWRCeTpCLHVubG9ja2VkVG9rZW5zOkUsdW5sb2NrZWROZnRzOlQsc3ltYm9sOmYsaWQ6JH0pfX19YXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsZyl9fX19LGFjdGlvbnMudHJhbnNmZXI9YXN5bmMgZT0+e2xldHtmcm9tVHlwZTp0LHRvOnMsdG9UeXBlOmEsbmZ0czpuLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppLGNhbGxpbmdDb250cmFjdEluZm86cn09ZSxvPVsidXNlciIsImNvbnRyYWN0Il0sbD12b2lkIDA9PT1hPyJ1c2VyIjphLGQ9dm9pZCAwPT09dD8idXNlciI6dDtpZihhcGkuYXNzZXJ0KCEwPT09aSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoZCYmInN0cmluZyI9PXR5cGVvZiBkJiZvLmluY2x1ZGVzKGQpJiZzJiYic3RyaW5nIj09dHlwZW9mIHMmJmwmJiJzdHJpbmciPT10eXBlb2YgbCYmby5pbmNsdWRlcyhsKSYmKHJ8fHZvaWQgMD09PXImJiJ1c2VyIj09PWQpJiZuJiYib2JqZWN0Ij09dHlwZW9mIG4mJkFycmF5LmlzQXJyYXkobiksImludmFsaWQgcGFyYW1zIikmJmlzVmFsaWROZnRJZEFycmF5KG4pKXtsZXQgdT0idXNlciI9PT1sP3MudHJpbSgpLnRvTG93ZXJDYXNlKCk6cy50cmltKCksYz0idXNlciI9PT1sP2lzVmFsaWRIaXZlQWNjb3VudExlbmd0aCh1KTppc1ZhbGlkQ29udHJhY3RMZW5ndGgodSksZj0idXNlciI9PT1kP2FwaS5zZW5kZXI6ci5uYW1lO2lmKGFwaS5hc3NlcnQoYywiaW52YWxpZCB0byIpJiZhcGkuYXNzZXJ0KCEobD09PWQmJnU9PT1mKSwiY2Fubm90IHRyYW5zZmVyIHRvIHNlbGYiKSYmYXBpLmFzc2VydCghKCJ1c2VyIj09PWwmJiJudWxsIj09PXUpLCJjYW5ub3QgdHJhbnNmZXIgdG8gbnVsbDsgdXNlIGJ1cm4gYWN0aW9uIGluc3RlYWQiKSlmb3IobGV0IHA9MDtwPG4ubGVuZ3RoO3ArPTEpe2xldHtzeW1ib2w6ZyxpZHM6eX09bltwXSxtPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOmd9KTtpZihtKXtsZXQgJD1nKyJpbnN0YW5jZXMiO2ZvcihsZXQgaD0wO2g8eS5sZW5ndGg7aCs9MSl7bGV0IGI9eVtoXSx2PWF3YWl0IGFwaS5kYi5maW5kT25lKCQse19pZDphcGkuQmlnTnVtYmVyKGIpLnRvTnVtYmVyKCl9KTtpZih2JiZ2LmFjY291bnQ9PT1mJiYoInUiPT09di5vd25lZEJ5JiYidXNlciI9PT1kfHwiYyI9PT12Lm93bmVkQnkmJiJjb250cmFjdCI9PT1kKSYmdm9pZCAwPT09di5kZWxlZ2F0ZWRUbyYmIXYuc291bEJvdW5kKXtsZXQgdz12Lm93bmVkQnksTj0idXNlciI9PT1sPyJ1IjoiYyI7di5wcmV2aW91c0FjY291bnQ9di5hY2NvdW50LHYucHJldmlvdXNPd25lZEJ5PXYub3duZWRCeSx2LmFjY291bnQ9dSx2Lm93bmVkQnk9Tixhd2FpdCBhcGkuZGIudXBkYXRlKCQsdiksYXBpLmVtaXQoInRyYW5zZmVyIix7ZnJvbTpmLGZyb21UeXBlOncsdG86dSx0b1R5cGU6TixzeW1ib2w6ZyxpZDpifSl9fX19fX0sYWN0aW9ucy5kZWxlZ2F0ZT1hc3luYyBlPT57bGV0e2Zyb21UeXBlOnQsdG86cyx0b1R5cGU6YSxuZnRzOm4saXNTaWduZWRXaXRoQWN0aXZlS2V5OmksY2FsbGluZ0NvbnRyYWN0SW5mbzpyfT1lLG89WyJ1c2VyIiwiY29udHJhY3QiXSxsPXZvaWQgMD09PWE/InVzZXIiOmEsZD12b2lkIDA9PT10PyJ1c2VyIjp0O2lmKGFwaS5hc3NlcnQoITA9PT1pLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChkJiYic3RyaW5nIj09dHlwZW9mIGQmJm8uaW5jbHVkZXMoZCkmJnMmJiJzdHJpbmciPT10eXBlb2YgcyYmbCYmInN0cmluZyI9PXR5cGVvZiBsJiZvLmluY2x1ZGVzKGwpJiYocnx8dm9pZCAwPT09ciYmInVzZXIiPT09ZCkmJm4mJiJvYmplY3QiPT10eXBlb2YgbiYmQXJyYXkuaXNBcnJheShuKSwiaW52YWxpZCBwYXJhbXMiKSYmaXNWYWxpZE5mdElkQXJyYXkobikpe2xldCB1PSJ1c2VyIj09PWw/cy50cmltKCkudG9Mb3dlckNhc2UoKTpzLnRyaW0oKSxjPSJ1c2VyIj09PWw/aXNWYWxpZEhpdmVBY2NvdW50TGVuZ3RoKHUpOmlzVmFsaWRDb250cmFjdExlbmd0aCh1KSxmPSJ1c2VyIj09PWQ/YXBpLnNlbmRlcjpyLm5hbWU7aWYoYXBpLmFzc2VydChjLCJpbnZhbGlkIHRvIikmJmFwaS5hc3NlcnQoIShsPT09ZCYmdT09PWYpLCJjYW5ub3QgZGVsZWdhdGUgdG8gc2VsZiIpJiZhcGkuYXNzZXJ0KCEoInVzZXIiPT09bCYmIm51bGwiPT09dSksImNhbm5vdCBkZWxlZ2F0ZSB0byBudWxsIikpZm9yKGxldCBwPTA7cDxuLmxlbmd0aDtwKz0xKXtsZXR7c3ltYm9sOmcsaWRzOnl9PW5bcF0sbT1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpnfSk7aWYobSYmYXBpLmFzc2VydCghMD09PW0uZGVsZWdhdGlvbkVuYWJsZWQsYGRlbGVnYXRpb24gbm90IGVuYWJsZWQgZm9yICR7Z31gKSl7bGV0ICQ9ZysiaW5zdGFuY2VzIjtmb3IobGV0IGg9MDtoPHkubGVuZ3RoO2grPTEpe2xldCBiPXlbaF0sdj1hd2FpdCBhcGkuZGIuZmluZE9uZSgkLHtfaWQ6YXBpLkJpZ051bWJlcihiKS50b051bWJlcigpfSk7aWYodiYmdi5hY2NvdW50PT09ZiYmKCJ1Ij09PXYub3duZWRCeSYmInVzZXIiPT09ZHx8ImMiPT09di5vd25lZEJ5JiYiY29udHJhY3QiPT09ZCkmJnZvaWQgMD09PXYuZGVsZWdhdGVkVG8pe2xldCB3PSJ1c2VyIj09PWw/InUiOiJjIixOPXthY2NvdW50OnUsb3duZWRCeTp3fTt2LmRlbGVnYXRlZFRvPU4sYXdhaXQgYXBpLmRiLnVwZGF0ZSgkLHYpLGFwaS5lbWl0KCJkZWxlZ2F0ZSIse2Zyb206Zixmcm9tVHlwZTp2Lm93bmVkQnksdG86dSx0b1R5cGU6dyxzeW1ib2w6ZyxpZDpifSksYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJtaW5pbmciLCJoYW5kbGVOZnREZWxlZ2F0aW9uQ2hhbmdlIix7c3ltYm9sOmcsbmZ0OnYsYWRkOiEwfSl9fX19fX0sYWN0aW9ucy51bmRlbGVnYXRlPWFzeW5jIGU9PntsZXR7ZnJvbVR5cGU6dCxuZnRzOnMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmEsY2FsbGluZ0NvbnRyYWN0SW5mbzpufT1lLGk9WyJ1c2VyIiwiY29udHJhY3QiXSxyPXZvaWQgMD09PXQ/InVzZXIiOnQ7aWYoYXBpLmFzc2VydCghMD09PWEsInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHImJiJzdHJpbmciPT10eXBlb2YgciYmaS5pbmNsdWRlcyhyKSYmKG58fHZvaWQgMD09PW4mJiJ1c2VyIj09PXIpJiZzJiYib2JqZWN0Ij09dHlwZW9mIHMmJkFycmF5LmlzQXJyYXkocyksImludmFsaWQgcGFyYW1zIikmJmlzVmFsaWROZnRJZEFycmF5KHMpKXtsZXQgbz0idXNlciI9PT1yP2FwaS5zZW5kZXI6bi5uYW1lLGw9bmV3IERhdGUoYCR7YXBpLmhpdmVCbG9ja1RpbWVzdGFtcH0uMDAwWmApO2ZvcihsZXQgZD0wO2Q8cy5sZW5ndGg7ZCs9MSl7bGV0e3N5bWJvbDp1LGlkczpjfT1zW2RdLGY9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6dX0pO2lmKGYmJmFwaS5hc3NlcnQoITA9PT1mLmRlbGVnYXRpb25FbmFibGVkLGBkZWxlZ2F0aW9uIG5vdCBlbmFibGVkIGZvciAke3V9YCkpe2xldCBwPTg2NGU1KmYudW5kZWxlZ2F0aW9uQ29vbGRvd24sZz1sLmdldFRpbWUoKStwLHk9dSsiaW5zdGFuY2VzIixtPXtzeW1ib2w6dSxpZHM6W10sY29tcGxldGVUaW1lc3RhbXA6Z307Zm9yKGxldCAkPTA7JDxjLmxlbmd0aDskKz0xKXtsZXQgaD1jWyRdLGI9YXdhaXQgYXBpLmRiLmZpbmRPbmUoeSx7X2lkOmFwaS5CaWdOdW1iZXIoaCkudG9OdW1iZXIoKX0pO2ImJmIuYWNjb3VudD09PW8mJigidSI9PT1iLm93bmVkQnkmJiJ1c2VyIj09PXJ8fCJjIj09PWIub3duZWRCeSYmImNvbnRyYWN0Ij09PXIpJiZiLmRlbGVnYXRlZFRvJiZ2b2lkIDA9PT1iLmRlbGVnYXRlZFRvLnVuZGVsZWdhdGVBdCYmKGIuZGVsZWdhdGVkVG8udW5kZWxlZ2F0ZUF0PWcsbS5pZHMucHVzaChiLl9pZCksYXdhaXQgYXBpLmRiLnVwZGF0ZSh5LGIpLGFwaS5lbWl0KCJ1bmRlbGVnYXRlU3RhcnQiLHtmcm9tOmIuZGVsZWdhdGVkVG8uYWNjb3VudCxmcm9tVHlwZTpiLmRlbGVnYXRlZFRvLm93bmVkQnksc3ltYm9sOnUsaWQ6aH0pLGF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgibWluaW5nIiwiaGFuZGxlTmZ0RGVsZWdhdGlvbkNoYW5nZSIse3N5bWJvbDp1LG5mdDpiLGFkZDohMX0pKX1tLmlkcy5sZW5ndGg+MCYmYXdhaXQgYXBpLmRiLmluc2VydCgicGVuZGluZ1VuZGVsZWdhdGlvbnMiLG0pfX19fTtjb25zdCBwcm9jZXNzVW5kZWxlZ2F0aW9uPWFzeW5jIGU9PntsZXR7c3ltYm9sOnQsaWRzOnN9PWUsYT10KyJpbnN0YW5jZXMiLG49YXdhaXQgYXBpLmRiLmZpbmQoYSx7X2lkOnskaW46c319LDUwLDAsW3tpbmRleDoiX2lkIixkZXNjZW5kaW5nOiExfV0pO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSs9MSlkZWxldGUgbltpXS5kZWxlZ2F0ZWRUbyxhd2FpdCBhcGkuZGIudXBkYXRlKGEsbltpXSx7ZGVsZWdhdGVkVG86IiJ9KTthd2FpdCBhcGkuZGIucmVtb3ZlKCJwZW5kaW5nVW5kZWxlZ2F0aW9ucyIsZSksYXBpLmVtaXQoInVuZGVsZWdhdGVEb25lIix7c3ltYm9sOnQsaWRzOnN9KX07YWN0aW9ucy5jaGVja1BlbmRpbmdVbmRlbGVnYXRpb25zPWFzeW5jKCk9PntpZihhcGkuYXNzZXJ0KCJudWxsIj09PWFwaS5zZW5kZXIsIm5vdCBhdXRob3JpemVkIikpe2xldCBlPW5ldyBEYXRlKGAke2FwaS5oaXZlQmxvY2tUaW1lc3RhbXB9LjAwMFpgKSx0PWUuZ2V0VGltZSgpLHM9YXdhaXQgYXBpLmRiLmZpbmQoInBlbmRpbmdVbmRlbGVnYXRpb25zIix7Y29tcGxldGVUaW1lc3RhbXA6eyRsdGU6dH19KSxhPXMubGVuZ3RoO2Zvcig7YT4wOyl7Zm9yKGxldCBuPTA7bjxhO24rPTEpe2xldCBpPXNbbl07YXdhaXQgcHJvY2Vzc1VuZGVsZWdhdGlvbihpKX1hPShzPWF3YWl0IGFwaS5kYi5maW5kKCJwZW5kaW5nVW5kZWxlZ2F0aW9ucyIse2NvbXBsZXRlVGltZXN0YW1wOnskbHRlOnR9fSkpLmxlbmd0aH19fSxhY3Rpb25zLmNyZWF0ZT1hc3luYyBlPT57bGV0e25hbWU6dCxvcmdOYW1lOnMscHJvZHVjdE5hbWU6YSxzeW1ib2w6bix1cmw6aSxtYXhTdXBwbHk6cixhdXRob3JpemVkSXNzdWluZ0FjY291bnRzOm8sYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHM6bCxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6ZH09ZSx1PWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KSx7bmZ0Q3JlYXRpb25GZWU6Y309dSxmPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOiJCRUUifSkscD0hIWFwaS5CaWdOdW1iZXIoYykubHRlKDApfHxmJiZhcGkuQmlnTnVtYmVyKGYuYmFsYW5jZSkuZ3RlKGMpO2lmKGFwaS5hc3NlcnQocCwieW91IG11c3QgaGF2ZSBlbm91Z2ggdG9rZW5zIHRvIGNvdmVyIHRoZSBjcmVhdGlvbiBmZWVzIikmJmFwaS5hc3NlcnQoITA9PT1kLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCh0JiYic3RyaW5nIj09dHlwZW9mIHQmJm4mJiJzdHJpbmciPT10eXBlb2YgbiYmKHZvaWQgMD09PWl8fGkmJiJzdHJpbmciPT10eXBlb2YgaSkmJih2b2lkIDA9PT1zfHxzJiYic3RyaW5nIj09dHlwZW9mIHMpJiYodm9pZCAwPT09YXx8YSYmInN0cmluZyI9PXR5cGVvZiBhKSYmKHZvaWQgMD09PW98fG8mJiJvYmplY3QiPT10eXBlb2YgbyYmQXJyYXkuaXNBcnJheShvKSkmJih2b2lkIDA9PT1sfHxsJiYib2JqZWN0Ij09dHlwZW9mIGwmJkFycmF5LmlzQXJyYXkobCkpJiYodm9pZCAwPT09cnx8ciYmInN0cmluZyI9PXR5cGVvZiByJiYhYXBpLkJpZ051bWJlcihyKS5pc05hTigpKSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChhcGkudmFsaWRhdG9yLmlzQWxwaGEobikmJmFwaS52YWxpZGF0b3IuaXNVcHBlcmNhc2UobikmJm4ubGVuZ3RoPjAmJm4ubGVuZ3RoPD0xMCwiaW52YWxpZCBzeW1ib2w6IHVwcGVyY2FzZSBsZXR0ZXJzIG9ubHksIG1heCBsZW5ndGggb2YgMTAiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1SRVNFUlZFRF9TWU1CT0xTW25dfHxhcGkuc2VuZGVyPT09UkVTRVJWRURfU1lNQk9MU1tuXSwiY2Fubm90IHVzZSB0aGlzIHN5bWJvbCIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QodCwiICIpKSYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PTUwLCJpbnZhbGlkIG5hbWU6IGxldHRlcnMsIG51bWJlcnMsIHdoaXRlc3BhY2VzIG9ubHksIG1heCBsZW5ndGggb2YgNTAiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1zfHxhcGkudmFsaWRhdG9yLmlzQWxwaGFudW1lcmljKGFwaS52YWxpZGF0b3IuYmxhY2tsaXN0KHMsIiAiKSkmJnMubGVuZ3RoPjAmJnMubGVuZ3RoPD01MCwiaW52YWxpZCBvcmcgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWF8fGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QoYSwiICIpKSYmYS5sZW5ndGg+MCYmYS5sZW5ndGg8PTUwLCJpbnZhbGlkIHByb2R1Y3QgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWl8fGkubGVuZ3RoPD0yNTUsImludmFsaWQgdXJsOiBtYXggbGVuZ3RoIG9mIDI1NSIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PXJ8fGFwaS5CaWdOdW1iZXIocikuZ3QoMCksIm1heFN1cHBseSBtdXN0IGJlIHBvc2l0aXZlIikmJmFwaS5hc3NlcnQodm9pZCAwPT09cnx8YXBpLkJpZ051bWJlcihyKS5sdGUoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLGBtYXhTdXBwbHkgbXVzdCBiZSBsb3dlciB0aGFuICR7TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJ9YCkpe2xldCBnPWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOm59KTtpZihhcGkuYXNzZXJ0KG51bGw9PT1nLCJzeW1ib2wgYWxyZWFkeSBleGlzdHMiKSl7aWYoYXBpLkJpZ051bWJlcihjKS5ndCgwKSl7bGV0IHk9YXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlciIse3RvOiJudWxsIixzeW1ib2w6IkJFRSIscXVhbnRpdHk6Yyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6ZH0pO2lmKCFpc1Rva2VuVHJhbnNmZXJWZXJpZmllZCh5LGFwaS5zZW5kZXIsIm51bGwiLCJCRUUiLGMsInRyYW5zZmVyIikpcmV0dXJuITF9bGV0IG09dm9pZCAwPT09cj8wOmFwaS5CaWdOdW1iZXIocikuaW50ZWdlclZhbHVlKGFwaS5CaWdOdW1iZXIuUk9VTkRfRE9XTikudG9OdW1iZXIoKSwkPXZvaWQgMD09PXM/IiI6cyxoPXZvaWQgMD09PWE/IiI6YSxiPXZvaWQgMD09PWk/IiI6aSx2PXt1cmw6Yn07dj1KU09OLnN0cmluZ2lmeSh2KTtsZXQgdz12b2lkIDA9PT1vP1thcGkuc2VuZGVyXTpbXSxOPXtpc3N1ZXI6YXBpLnNlbmRlcixzeW1ib2w6bixuYW1lOnQsb3JnTmFtZTokLHByb2R1Y3ROYW1lOmgsbWV0YWRhdGE6dixtYXhTdXBwbHk6bSxzdXBwbHk6MCxjaXJjdWxhdGluZ1N1cHBseTowLGRlbGVnYXRpb25FbmFibGVkOiExLHVuZGVsZWdhdGlvbkNvb2xkb3duOjAsYXV0aG9yaXplZElzc3VpbmdBY2NvdW50czp3LGF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzOltdLHByb3BlcnRpZXM6e30sZ3JvdXBCeTpbXX0sXz1uKyJpbnN0YW5jZXMiLEE9YXdhaXQgYXBpLmRiLnRhYmxlRXhpc3RzKF8pO3JldHVybiExPT09QSYmYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKF8sWyJhY2NvdW50Iiwib3duZWRCeSJdKSxhd2FpdCBhcGkuZGIuaW5zZXJ0KCJuZnRzIixOKSx2b2lkIDAhPT1vJiZhd2FpdCBhY3Rpb25zLmFkZEF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMoe2FjY291bnRzOm8sc3ltYm9sOm4saXNTaWduZWRXaXRoQWN0aXZlS2V5OmR9KSx2b2lkIDAhPT1sJiZhd2FpdCBhY3Rpb25zLmFkZEF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzKHtjb250cmFjdHM6bCxzeW1ib2w6bixpc1NpZ25lZFdpdGhBY3RpdmVLZXk6ZH0pLCEwfX1yZXR1cm4hMX0sYWN0aW9ucy5pc3N1ZT1hc3luYyBlPT57bGV0e3N5bWJvbDp0LGZyb21UeXBlOnMsdG86YSx0b1R5cGU6bixmZWVTeW1ib2w6aSxsb2NrVG9rZW5zOnIsbG9ja05mdHM6byxzb3VsQm91bmQ6bCxwcm9wZXJ0aWVzOmQsaXNTaWduZWRXaXRoQWN0aXZlS2V5OnUsY2FsbGluZ0NvbnRyYWN0SW5mbzpjfT1lLGY9WyJ1c2VyIiwiY29udHJhY3QiXSxwPXZvaWQgMD09PW4/InVzZXIiOm4sZz12b2lkIDA9PT1zPyJ1c2VyIjpzLHk9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pLHtuZnRJc3N1YW5jZUZlZTptfT15O2lmKGFwaS5hc3NlcnQoITA9PT11LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCh0JiYic3RyaW5nIj09dHlwZW9mIHQmJmcmJiJzdHJpbmciPT10eXBlb2YgZyYmZi5pbmNsdWRlcyhnKSYmKGN8fHZvaWQgMD09PWMmJiJ1c2VyIj09PWcpJiZhJiYic3RyaW5nIj09dHlwZW9mIGEmJnAmJiJzdHJpbmciPT10eXBlb2YgcCYmZi5pbmNsdWRlcyhwKSYmaSYmInN0cmluZyI9PXR5cGVvZiBpJiZpIGluIG0mJih2b2lkIDA9PT1kfHxkJiYib2JqZWN0Ij09dHlwZW9mIGQpJiYodm9pZCAwPT09cnx8ciYmIm9iamVjdCI9PXR5cGVvZiByKSYmKHZvaWQgMD09PW98fG8mJiJvYmplY3QiPT10eXBlb2YgbyYmQXJyYXkuaXNBcnJheShvKSkmJih2b2lkIDA9PT1sfHxsJiYiYm9vbGVhbiI9PXR5cGVvZiBsKSwiaW52YWxpZCBwYXJhbXMiKSYmKHZvaWQgMD09PW98fGlzVmFsaWROZnRJZEFycmF5KG8pKSl7bGV0ICQ9InVzZXIiPT09cD9hLnRyaW0oKS50b0xvd2VyQ2FzZSgpOmEudHJpbSgpLGg9InVzZXIiPT09cD9pc1ZhbGlkSGl2ZUFjY291bnRMZW5ndGgoJCk6aXNWYWxpZENvbnRyYWN0TGVuZ3RoKCQpLGI9InVzZXIiPT09Zz9hcGkuc2VuZGVyOmMubmFtZSx2PSJ1c2VyIj09PWc/ImJhbGFuY2VzIjoiY29udHJhY3RzQmFsYW5jZXMiO2lmKGFwaS5hc3NlcnQoaCwiaW52YWxpZCB0byIpKXtsZXQgdz1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDp0fSksTj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDppfSk7aWYoYXBpLmFzc2VydChudWxsIT09dywic3ltYm9sIGRvZXMgbm90IGV4aXN0IikmJmFwaS5hc3NlcnQobnVsbCE9PU4sImZlZSBzeW1ib2wgZG9lcyBub3QgZXhpc3QiKSl7bGV0IF89dCsiaW5zdGFuY2VzIjtpZihhcGkuYXNzZXJ0KCJjb250cmFjdCI9PT1nJiZ3LmF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzLmluY2x1ZGVzKGIpfHwidXNlciI9PT1nJiZ3LmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMuaW5jbHVkZXMoYiksIm5vdCBhbGxvd2VkIHRvIGlzc3VlIHRva2VucyIpJiZhcGkuYXNzZXJ0KDA9PT13Lm1heFN1cHBseXx8dy5zdXBwbHk8dy5tYXhTdXBwbHksIm1heCBzdXBwbHkgbGltaXQgcmVhY2hlZCIpKXtsZXQgQT1PYmplY3Qua2V5cyh3LnByb3BlcnRpZXMpLmxlbmd0aCxUPWFwaS5CaWdOdW1iZXIobVtpXSkubXVsdGlwbGllZEJ5KEEpLGs9Y2FsY3VsYXRlQmFsYW5jZShtW2ldLFQsTi5wcmVjaXNpb24sITApLEI9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLHYse2FjY291bnQ6YixzeW1ib2w6aX0pLEU9ISFhcGkuQmlnTnVtYmVyKGspLmx0ZSgwKXx8QiYmYXBpLkJpZ051bWJlcihCLmJhbGFuY2UpLmd0ZShrKTtpZihyKXtsZXQgTz1hd2FpdCBpc1ZhbGlkVG9rZW5CYXNrZXQocix2LGIsaSxrKTtpZighYXBpLmFzc2VydChPLCJpbnZhbGlkIGJhc2tldCBvZiB0b2tlbnMgdG8gbG9jayAoY2Fubm90IGxvY2sgbW9yZSB0aGFuIDEwIHRva2VuIHR5cGVzOyBpc3N1aW5nIGFjY291bnQgbXVzdCBoYXZlIGVub3VnaCBiYWxhbmNlKSIpKXJldHVybiExfWxldCBDPXt9O2lmKHZvaWQgMCE9PWQpe3RyeXtpZighaXNWYWxpZERhdGFQcm9wZXJ0aWVzKGIsZyx3LGQpKXJldHVybiExfWNhdGNoKEkpe3JldHVybiExfUM9ZH1pZihhcGkuYXNzZXJ0KEUsInlvdSBtdXN0IGhhdmUgZW5vdWdoIHRva2VucyB0byBjb3ZlciB0aGUgaXNzdWFuY2UgZmVlcyIpKXtpZihhcGkuQmlnTnVtYmVyKGspLmd0KDApKXtpZigiY29udHJhY3QiPT09Zyl7bGV0IFM9YXdhaXQgYXBpLnRyYW5zZmVyVG9rZW5zRnJvbUNhbGxpbmdDb250cmFjdCgibnVsbCIsaSxrLCJ1c2VyIik7aWYoIWFwaS5hc3NlcnQoaXNUb2tlblRyYW5zZmVyVmVyaWZpZWQoUyxiLCJudWxsIixpLGssInRyYW5zZmVyRnJvbUNvbnRyYWN0IiksInVuYWJsZSB0byB0cmFuc2ZlciBpc3N1YW5jZSBmZWUiKSlyZXR1cm4hMX1lbHNle2xldCBWPWF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOmkscXVhbnRpdHk6ayxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6dX0pO2lmKCFhcGkuYXNzZXJ0KGlzVG9rZW5UcmFuc2ZlclZlcmlmaWVkKFYsYiwibnVsbCIsaSxrLCJ0cmFuc2ZlciIpLCJ1bmFibGUgdG8gdHJhbnNmZXIgaXNzdWFuY2UgZmVlIikpcmV0dXJuITF9fWxldCB4PXt9O2lmKHIpZm9yKGxldFtqLExdb2YgT2JqZWN0LmVudHJpZXMocikpaWYoImNvbnRyYWN0Ij09PWcpe2xldCB6PWF3YWl0IGFwaS50cmFuc2ZlclRva2Vuc0Zyb21DYWxsaW5nQ29udHJhY3QoIm5mdCIsaixMLCJjb250cmFjdCIpO2lzVG9rZW5UcmFuc2ZlclZlcmlmaWVkKHosYiwibmZ0IixqLEwsInRyYW5zZmVyRnJvbUNvbnRyYWN0IikmJih4W2pdPUwpfWVsc2V7bGV0IFI9YXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlclRvQ29udHJhY3QiLHt0bzoibmZ0IixzeW1ib2w6aixxdWFudGl0eTpMLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTp1fSk7aXNUb2tlblRyYW5zZmVyVmVyaWZpZWQoUixiLCJuZnQiLGosTCwidHJhbnNmZXJUb0NvbnRyYWN0IikmJih4W2pdPUwpfWxldCBGPVtdO2lmKG8mJm8ubGVuZ3RoPjApe2xldCBEPWF3YWl0IHRyYW5zZmVyQW5kVmVyaWZ5TmZ0cyhiLGcsIm5mdCIsImNvbnRyYWN0IixvLHUsYyk7Rj1ELnN1Y2Nlc3N9bGV0IE09InVzZXIiPT09cD8idSI6ImMiLFA9e307UD1GLmxlbmd0aD4wP3thY2NvdW50OiQsc291bEJvdW5kOmwsb3duZWRCeTpNLGxvY2tlZFRva2Vuczp4LGxvY2tlZE5mdHM6Rixwcm9wZXJ0aWVzOkN9OnthY2NvdW50OiQsc291bEJvdW5kOmwsb3duZWRCeTpNLGxvY2tlZFRva2Vuczp4LHByb3BlcnRpZXM6Q307bGV0IFU9YXdhaXQgYXBpLmRiLmluc2VydChfLFApO3JldHVybiB3LnN1cHBseSs9MSwoIm51bGwiIT09JHx8ImNvbnRyYWN0Ij09PXApJiYody5jaXJjdWxhdGluZ1N1cHBseSs9MSksYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsdyksYXBpLmVtaXQoImlzc3VlIix7ZnJvbTpiLGZyb21UeXBlOmcsdG86JCx0b1R5cGU6cCxzeW1ib2w6dCxsb2NrZWRUb2tlbnM6eCxsb2NrZWROZnRzOkYsc291bEJvdW5kOiEhbCxwcm9wZXJ0aWVzOkMsaWQ6VS5faWR9KSwhMH19fX19cmV0dXJuITF9LGFjdGlvbnMuaXNzdWVNdWx0aXBsZT1hc3luYyBlPT57bGV0e2luc3RhbmNlczp0LGlzU2lnbmVkV2l0aEFjdGl2ZUtleTpzLGNhbGxpbmdDb250cmFjdEluZm86YX09ZTtpZihhcGkuYXNzZXJ0KCEwPT09cywieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQodCYmIm9iamVjdCI9PXR5cGVvZiB0JiZBcnJheS5pc0FycmF5KHQpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KHQubGVuZ3RoPD0xMCwiY2Fubm90IGlzc3VlIG1vcmUgdGhhbiAxMCBORlQgaW5zdGFuY2VzIGF0IG9uY2UiKSl7bGV0IG49MDtpZih0LmZvckVhY2goZT0+e2UubG9ja05mdHMmJihuKz0xKX0pLGFwaS5hc3NlcnQobjw9MSwiY2Fubm90IGlzc3VlIG1vcmUgdGhhbiAxIGNvbnRhaW5lciBORlQgaW5zdGFuY2VzIGF0IG9uY2UiKSYmYXBpLmFzc2VydCgwPT09bnx8bj09PXQubGVuZ3RoLCJjYW5ub3QgaXNzdWUgYSBtaXggb2YgY29udGFpbmVyIGFuZCBub24tY29udGFpbmVyIE5GVCBpbnN0YW5jZXMgc2ltdWx0YW5lb3VzbHkiKSlmb3IobGV0IGk9MDtpPHQubGVuZ3RoO2krPTEpe2xldHtzeW1ib2w6cixmcm9tVHlwZTpvLHRvOmwsdG9UeXBlOmQsZmVlU3ltYm9sOnUsbG9ja1Rva2VuczpjLHNvdWxCb3VuZDpmLGxvY2tOZnRzOnAscHJvcGVydGllczpnfT10W2ldO2F3YWl0IGFjdGlvbnMuaXNzdWUoe3N5bWJvbDpyLGZyb21UeXBlOm8sdG86bCx0b1R5cGU6ZCxmZWVTeW1ib2w6dSxsb2NrVG9rZW5zOmMsc291bEJvdW5kOmYsbG9ja05mdHM6cCxwcm9wZXJ0aWVzOmcsaXNTaWduZWRXaXRoQWN0aXZlS2V5OnMsY2FsbGluZ0NvbnRyYWN0SW5mbzphfSl9fX07"}}}
Dear @rishi556.engine, we need your help!
The Hivebuzz proposal already got important support from the community. However, it lost its funding a few days ago and only needs a bit more support to get funded again.
May we ask you to support it so our team can continue its work?
You can do it on Peakd, ecency,
https://peakd.com/me/proposals/199
Your support will be really appreciated.
Thank you!
{"id":"ssc-mainnet-hive","json":[{"contractName":"tokens","contractAction":"transfer","contractPayload":{"symbol":"STARBITS","to":"foxon","quantity":"1","memo":"demo"}},{"contractName":"tokens","contractAction":"transfer","contractPayload":{"symbol":"STARBITS","to":"foxon","quantity":"1","memo":""}},{"contractName":"tokens","contractAction":"transfer","contractPayload":{"symbol":"STARBITS","to":"foxon","quantity":"1","memo":""}},{"contractName":"tokens","contractAction":"transfer","contractPayload":{"symbol":"STARBITS","to":"foxon","quantity":"1","memo":""}},{"contractName":"tokens","contractAction":"transfer","contractPayload":{"symbol":"STARBITS","to":"foxon","quantity":"1","memo":""}},{"contractName":"tokens","contractAction":"transfer","contractPayload":{"symbol":"STARBITS","to":"foxon","quantity":"1","memo":""}},{"contractName":"tokens","contractAction":"transfer","contractPayload":{"symbol":"STARBITS","to":"foxon","quantity":"1","memo":""}},{"contractName":"tokens","contractAction":"transfer","contractPayload":{"symbol":"STARBITS","to":"foxon","quantity":"1","memo":""}},{"contractName":"tokens","contractAction":"transfer","contractPayload":{"symbol":"STARBITS","to":"foxon","quantity":"1","memo":""}},{"contractName":"tokens","contractAction":"transfer","contractPayload":{"symbol":"STARBITS","to":"foxon","quantity":"1","memo":""}},{"contractName":"tokens","contractAction":"transfer","contractPayload":{"symbol":"STARBITS","to":"foxon","quantity":"1","memo":""}},{"contractName":"tokens","contractAction":"transfer","contractPayload":{"symbol":"STARBITS","to":"foxon","quantity":"1","memo":""}},{"contractName":"tokens","contractAction":"transfer","contractPayload":{"symbol":"STARBITS","to":"foxon","quantity":"1","memo":""}},{"contractName":"tokens","contractAction":"transfer","contractPayload":{"symbol":"STARBITS","to":"foxon","quantity":"1","memo":""}},{"contractName":"tokens","contractAction":"transfer","contractPayload":{"symbol":"STARBITS","to":"foxon","quantity":"1","memo":""}},{"contractName":"tokens","contractAction":"transfer","contractPayload":{"symbol":"STARBITS","to":"foxon","quantity":"1","memo":""}},{"contractName":"tokens","contractAction":"transfer","contractPayload":{"symbol":"STARBITS","to":"foxon","quantity":"1","memo":""}},{"contractName":"tokens","contractAction":"transfer","contractPayload":{"symbol":"STARBITS","to":"foxon","quantity":"1","memo":""}},{"contractName":"tokens","contractAction":"transfer","contractPayload":{"symbol":"STARBITS","to":"foxon","quantity":"1","memo":""}},{"contractName":"tokens","contractAction":"transfer","contractPayload":{"symbol":"STARBITS","to":"foxon","quantity":"1","memo":""}},{"contractName":"tokens","contractAction":"transfer","contractPayload":{"symbol":"STARBITS","to":"foxon","quantity":"1","memo":""}},{"contractName":"tokens","contractAction":"transfer","contractPayload":{"symbol":"STARBITS","to":"foxon","quantity":"1","memo":""}},{"contractName":"tokens","contractAction":"transfer","contractPayload":{"symbol":"STARBITS","to":"foxon","quantity":"1","memo":""}},{"contractName":"tokens","contractAction":"transfer","contractPayload":{"symbol":"STARBITS","to":"foxon","quantity":"1","memo":""}},{"contractName":"tokens","contractAction":"transfer","contractPayload":{"symbol":"STARBITS","to":"foxon","quantity":"1","memo":""}}]}
{"id":"ssc-mainnet-hive","json":{"contractName":"tokens","contractAction":"transfer","contractPayload":{"symbol":"STARBITS","to":"foxon","quantity":"1","memo":"demo"}}}
{"id":"ssc-mainnet-hive","json":{"contractName":"tokens","contractAction":"transfer","contractPayload":{"symbol":"STARBITS","to":"foxon","quantity":"1","memo":"demo"}}}
{"id":"ssc-testnet-hive","json":{"contractName":"contract","contractAction":"update","contractPayload":{"name":"witnesses","params":"","code":"Y29uc3QgTkJfQVBQUk9WQUxTX0FMTE9XRUQ9MzAsTkJfVE9QX1dJVE5FU1NFUz0yMCxOQl9CQUNLVVBfV0lUTkVTU0VTPTEsTkJfV0lUTkVTU0VTPTIxLE5CX1dJVE5FU1NFU19TSUdOQVRVUkVTX1JFUVVJUkVEPTE0LE1BWF9ST1VORFNfTUlTU0VEX0lOX0FfUk9XPTMsTUFYX1JPVU5EX1BST1BPU0lUSU9OX1dBSVRJTkdfUEVSSU9EPTQwLE5CX1RPS0VOU19UT19SRVdBUkQ9IjAuMDE5MDI1ODYiLE5CX1RPS0VOU19ORUVERURfQkVGT1JFX1JFV0FSRElORz0iMC4wOTUxMjkzIixXSVRORVNTX0FQUFJPVkVfRVhQSVJFX0JMT0NLUz0xMCxVVElMSVRZX1RPS0VOX1NZTUJPTD0iQkVFIixHT1ZFUk5BTkNFX1RPS0VOX1NZTUJPTD0iV09SS0VSQkVFIixHT1ZFUk5BTkNFX1RPS0VOX1BSRUNJU0lPTj01LEdPVkVSTkFOQ0VfVE9LRU5fTUlOX1ZBTFVFPSIwLjAwMDAxIjthY3Rpb25zLmNyZWF0ZVNTQz1hc3luYygpPT57bGV0IGU9YXdhaXQgYXBpLmRiLnRhYmxlRXhpc3RzKCJ3aXRuZXNzZXMiKTtpZighMT09PWUpe2F3YWl0IGFwaS5kYi5jcmVhdGVUYWJsZSgid2l0bmVzc2VzIixbImFwcHJvdmFsV2VpZ2h0Il0pLGF3YWl0IGFwaS5kYi5jcmVhdGVUYWJsZSgiYXBwcm92YWxzIixbImZyb20iLCJ0byJdKSxhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoImFjY291bnRzIixbImFjY291bnQiXSksYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCJzY2hlZHVsZXMiKSxhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoInBhcmFtcyIpO2xldCB0PXt0b3RhbEFwcHJvdmFsV2VpZ2h0OiIwIixudW1iZXJPZkFwcHJvdmVkV2l0bmVzc2VzOjAsbGFzdFZlcmlmaWVkQmxvY2tOdW1iZXI6MCxyb3VuZDowLGxhc3RCbG9ja1JvdW5kOjAsY3VycmVudFdpdG5lc3M6bnVsbCxibG9ja051bWJlcldpdG5lc3NDaGFuZ2U6MCxsYXN0V2l0bmVzc2VzOltdLG51bWJlck9mQXBwcm92YWxzUGVyQWNjb3VudDozMCxudW1iZXJPZlRvcFdpdG5lc3NlczoyMCxudW1iZXJPZldpdG5lc3NTbG90czoyMSx3aXRuZXNzU2lnbmF0dXJlc1JlcXVpcmVkOjE0LG1heFJvdW5kc01pc3NlZEluQVJvdzozLG1heFJvdW5kUHJvcG9zaXRpb25XYWl0aW5nUGVyaW9kOjQwLHdpdG5lc3NBcHByb3ZlRXhwaXJlQmxvY2tzOjEwfTthd2FpdCBhcGkuZGIuaW5zZXJ0KCJwYXJhbXMiLHQpfWVsc2V7bGV0IHM9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pO2lmKCFzLndpdG5lc3NBcHByb3ZlRXhwaXJlQmxvY2tzKXtsZXQgYT0wLG47ZG97bj1hd2FpdCBhcGkuZGIuZmluZCgiYWNjb3VudHMiLHt9LDFlMyxhLFt7aW5kZXg6Il9pZCIsZGVzY2VuZGluZzohMX1dKTtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krPTEpe2xldCBsPW5baV07bC5sYXN0QXBwcm92ZUJsb2NrPWFwaS5ibG9ja051bWJlcixhd2FpdCBhcGkuZGIudXBkYXRlKCJhY2NvdW50cyIsbCl9YSs9MWUzfXdoaWxlKDFlMz09PW4ubGVuZ3RoKX1zLndpdG5lc3NBcHByb3ZlRXhwaXJlQmxvY2tzPTEwLGF3YWl0IGFwaS5kYi51cGRhdGUoInBhcmFtcyIscyl9fSxhY3Rpb25zLnJlc2V0U2NoZWR1bGU9YXN5bmMoKT0+e2lmKGFwaS5zZW5kZXIhPT1hcGkub3duZXIpcmV0dXJuO2xldCBlPWF3YWl0IGFwaS5kYi5maW5kKCJzY2hlZHVsZXMiLHt9KTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrPTEpe2xldCBzPWVbdF07YXdhaXQgYXBpLmRiLnJlbW92ZSgic2NoZWR1bGVzIixzKX1sZXQgYT1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSk7YS5jdXJyZW50V2l0bmVzcz1udWxsLGEuYmxvY2tOdW1iZXJXaXRuZXNzQ2hhbmdlPTAsYS5sYXN0V2l0bmVzc2VzPVtdLGF3YWl0IGFwaS5kYi51cGRhdGUoInBhcmFtcyIsYSl9LGFjdGlvbnMudXBkYXRlUGFyYW1zPWFzeW5jIGU9PntpZihhcGkuc2VuZGVyIT09YXBpLm93bmVyKXJldHVybjtsZXR7bnVtYmVyT2ZBcHByb3ZhbHNQZXJBY2NvdW50OnQsbnVtYmVyT2ZUb3BXaXRuZXNzZXM6cyxudW1iZXJPZldpdG5lc3NTbG90czphLHdpdG5lc3NTaWduYXR1cmVzUmVxdWlyZWQ6bixtYXhSb3VuZHNNaXNzZWRJbkFSb3c6aSxtYXhSb3VuZFByb3Bvc2l0aW9uV2FpdGluZ1BlcmlvZDpsfT1lLHI9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pLG89ITE7dCYmTnVtYmVyLmlzSW50ZWdlcih0KSYmKHIubnVtYmVyT2ZBcHByb3ZhbHNQZXJBY2NvdW50PXQpLHMmJk51bWJlci5pc0ludGVnZXIocykmJihyLm51bWJlck9mVG9wV2l0bmVzc2VzPXMpLGEmJk51bWJlci5pc0ludGVnZXIoYSkmJnIubnVtYmVyT2ZXaXRuZXNzU2xvdHMhPT1hJiYobz0hMCxyLm51bWJlck9mV2l0bmVzc1Nsb3RzPWEpLG4mJk51bWJlci5pc0ludGVnZXIobikmJihyLndpdG5lc3NTaWduYXR1cmVzUmVxdWlyZWQ9biksaSYmTnVtYmVyLmlzSW50ZWdlcihpKSYmKHIubWF4Um91bmRzTWlzc2VkSW5BUm93PWkpLGwmJk51bWJlci5pc0ludGVnZXIobCkmJihyLm1heFJvdW5kUHJvcG9zaXRpb25XYWl0aW5nUGVyaW9kPWwpLGFwaS5hc3NlcnQoci5udW1iZXJPZlRvcFdpdG5lc3NlcysxPT09ci5udW1iZXJPZldpdG5lc3NTbG90cywib25seSAxIGJhY2t1cCBhbGxvd2VkIikmJihhd2FpdCBhcGkuZGIudXBkYXRlKCJwYXJhbXMiLHIpLG8mJmF3YWl0IGFjdGlvbnMucmVzZXRTY2hlZHVsZSgpKX07Y29uc3QgdXBkYXRlV2l0bmVzc1Jhbms9YXN5bmMoZSx0KT0+e2xldCBzPWF3YWl0IGFwaS5kYi5maW5kT25lKCJ3aXRuZXNzZXMiLHthY2NvdW50OmV9KTtpZihzKXtsZXQgYT1zLmFwcHJvdmFsV2VpZ2h0LiRudW1iZXJEZWNpbWFsO3MuYXBwcm92YWxXZWlnaHQuJG51bWJlckRlY2ltYWw9YXBpLkJpZ051bWJlcihzLmFwcHJvdmFsV2VpZ2h0LiRudW1iZXJEZWNpbWFsKS5wbHVzKHQpLnRvRml4ZWQoNSksYXBpLkJpZ051bWJlcihzLmFwcHJvdmFsV2VpZ2h0LiRudW1iZXJEZWNpbWFsKS5sdCgwKSYmKHMuYXBwcm92YWxXZWlnaHQuJG51bWJlckRlY2ltYWw9YXBpLkJpZ051bWJlcigwKSksYXdhaXQgYXBpLmRiLnVwZGF0ZSgid2l0bmVzc2VzIixzKTtsZXQgbj1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSk7bi50b3RhbEFwcHJvdmFsV2VpZ2h0PWFwaS5CaWdOdW1iZXIobi50b3RhbEFwcHJvdmFsV2VpZ2h0KS5wbHVzKHQpLnRvRml4ZWQoNSksYXBpLkJpZ051bWJlcihhKS5lcSgwKSYmYXBpLkJpZ051bWJlcihzLmFwcHJvdmFsV2VpZ2h0LiRudW1iZXJEZWNpbWFsKS5ndCgwKT9uLm51bWJlck9mQXBwcm92ZWRXaXRuZXNzZXMrPTE6YXBpLkJpZ051bWJlcihhKS5ndCgwKSYmYXBpLkJpZ051bWJlcihzLmFwcHJvdmFsV2VpZ2h0LiRudW1iZXJEZWNpbWFsKS5lcSgwKSYmKG4ubnVtYmVyT2ZBcHByb3ZlZFdpdG5lc3Nlcy09MSksYXdhaXQgYXBpLmRiLnVwZGF0ZSgicGFyYW1zIixuKX19O2FjdGlvbnMudXBkYXRlV2l0bmVzc2VzQXBwcm92YWxzPWFzeW5jIGU9PntsZXR7YWNjb3VudDp0LGNhbGxpbmdDb250cmFjdEluZm86c309ZTtpZih2b2lkIDA9PT1zfHwidG9rZW5zIiE9PXMubmFtZSlyZXR1cm47bGV0IGE9YXdhaXQgYXBpLmRiLmZpbmRPbmUoImFjY291bnRzIix7YWNjb3VudDp0fSk7aWYobnVsbCE9PWEpe2xldCBuPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OnQsc3ltYm9sOkdPVkVSTkFOQ0VfVE9LRU5fU1lNQk9MfSksaT0wO24mJm4uc3Rha2UmJihpPW4uc3Rha2UpLG4mJm4uZGVsZWdhdGlvbnNJbiYmKGk9YXBpLkJpZ051bWJlcihpKS5wbHVzKG4uZGVsZWdhdGlvbnNJbikudG9GaXhlZCg1KSk7bGV0IGw9YS5hcHByb3ZhbFdlaWdodCxyPWFwaS5CaWdOdW1iZXIoaSkubWludXMobCkudG9GaXhlZCg1KTtpZihhLmFwcHJvdmFsV2VpZ2h0PWksIWFwaS5CaWdOdW1iZXIocikuZXEoMCkpe2F3YWl0IGFwaS5kYi51cGRhdGUoImFjY291bnRzIixhKTtsZXQgbz1hd2FpdCBhcGkuZGIuZmluZCgiYXBwcm92YWxzIix7ZnJvbTp0fSk7Zm9yKGxldCBkPTA7ZDxvLmxlbmd0aDtkKz0xKXtsZXQgdT1vW2RdO2F3YWl0IHVwZGF0ZVdpdG5lc3NSYW5rKHUudG8scil9fX19LGFjdGlvbnMucmVnaXN0ZXI9YXN5bmMgZT0+e2xldHtJUDp0LFJQQ1BvcnQ6cyxQMlBQb3J0OmEsc2lnbmluZ0tleTpuLGVuYWJsZWQ6aSxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6bH09ZTtpZihhcGkuYXNzZXJ0KCEwPT09bCwiYWN0aXZlIGtleSByZXF1aXJlZCIpJiZhcGkuYXNzZXJ0KHQmJiJzdHJpbmciPT10eXBlb2YgdCYmYXBpLnZhbGlkYXRvci5pc0lQKHQpLCJJUCBpcyBpbnZhbGlkIikmJmFwaS5hc3NlcnQocyYmTnVtYmVyLmlzSW50ZWdlcihzKSYmcz49MCYmczw9NjU1MzUsIlJQQ1BvcnQgbXVzdCBiZSBhbiBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgNjU1MzUiKSYmYXBpLmFzc2VydChhJiZOdW1iZXIuaXNJbnRlZ2VyKGEpJiZhPj0wJiZhPD02NTUzNSwiUDJQUG9ydCBtdXN0IGJlIGFuIGludGVnZXIgYmV0d2VlbiAwIGFuZCA2NTUzNSIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMobikmJjUzPT09bi5sZW5ndGgsImludmFsaWQgc2lnbmluZyBrZXkiKSYmYXBpLmFzc2VydCgiYm9vbGVhbiI9PXR5cGVvZiBpLCJlbmFibGVkIG11c3QgYmUgYSBib29sZWFuIikpe2xldCByPWF3YWl0IGFwaS5kYi5maW5kT25lKCJ3aXRuZXNzZXMiLHtzaWduaW5nS2V5Om59KTthcGkuYXNzZXJ0KG51bGw9PT1yfHxyLmFjY291bnQ9PT1hcGkuc2VuZGVyLCJhIHdpdG5lc3MgaXMgYWxyZWFkeSB1c2luZyB0aGlzIHNpZ25pbmcga2V5IikmJihyPWF3YWl0IGFwaS5kYi5maW5kT25lKCJ3aXRuZXNzZXMiLHtJUDp0LFAyUFBvcnQ6YX0pLGFwaS5hc3NlcnQobnVsbD09PXJ8fHIuYWNjb3VudD09PWFwaS5zZW5kZXIsImEgd2l0bmVzcyBpcyBhbHJlYWR5IHVzaW5nIHRoaXMgSVAvUG9ydCIpJiYoKHI9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIndpdG5lc3NlcyIse2FjY291bnQ6YXBpLnNlbmRlcn0pKT8oci5JUD10LHIuUlBDUG9ydD1zLHIuUDJQUG9ydD1hLHIuc2lnbmluZ0tleT1uLHIuZW5hYmxlZD1pLGF3YWl0IGFwaS5kYi51cGRhdGUoIndpdG5lc3NlcyIscikpOmF3YWl0IGFwaS5kYi5pbnNlcnQoIndpdG5lc3NlcyIscj17YWNjb3VudDphcGkuc2VuZGVyLGFwcHJvdmFsV2VpZ2h0OnskbnVtYmVyRGVjaW1hbDoiMCJ9LHNpZ25pbmdLZXk6bixJUDp0LFJQQ1BvcnQ6cyxQMlBQb3J0OmEsZW5hYmxlZDppLG1pc3NlZFJvdW5kczowLG1pc3NlZFJvdW5kc0luQVJvdzowLHZlcmlmaWVkUm91bmRzOjAsbGFzdFJvdW5kVmVyaWZpZWQ6bnVsbCxsYXN0QmxvY2tWZXJpZmllZDpudWxsfSkpKX19O2NvbnN0IHJlbW92ZUFwcHJvdmFsPWFzeW5jKGUsdCxzLGE9ITApPT57bGV0IG49YXdhaXQgYXBpLmRiLmZpbmRPbmUoImFwcHJvdmFscyIse2Zyb206ZSx0bzp0fSk7aWYoYXBpLmFzc2VydChudWxsIT09biwieW91IGhhdmUgbm90IGFwcHJvdmVkIHRoaXMgd2l0bmVzcyIpKXtsZXQgaT1zO3MmJnMuYWNjb3VudD09PWV8fChpPWF3YWl0IGFwaS5kYi5maW5kT25lKCJhY2NvdW50cyIse2FjY291bnQ6ZX0pKSxhd2FpdCBhcGkuZGIucmVtb3ZlKCJhcHByb3ZhbHMiLG4pO2xldCBsPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmUsc3ltYm9sOkdPVkVSTkFOQ0VfVE9LRU5fU1lNQk9MfSkscj0wO2wmJmwuc3Rha2UmJihyPWwuc3Rha2UpLGwmJmwuZGVsZWdhdGlvbnNJbiYmKHI9YXBpLkJpZ051bWJlcihyKS5wbHVzKGwuZGVsZWdhdGlvbnNJbikudG9GaXhlZCg1KSksaS5hcHByb3ZhbHMtPTEsaS5hcHByb3ZhbFdlaWdodD1yLGEmJihpLmxhc3RBcHByb3ZlQmxvY2s9YXBpLmJsb2NrTnVtYmVyKSxhd2FpdCBhcGkuZGIudXBkYXRlKCJhY2NvdW50cyIsaSksYXdhaXQgdXBkYXRlV2l0bmVzc1JhbmsodCxgLSR7cn1gKSxhcGkuZW1pdCgid2l0bmVzc0FwcHJvdmFsUmVtb3ZlZCIse2FjY291bnQ6ZSx0bzp0LGFwcHJvdmFsV2VpZ2h0OnJ9KX19O2FjdGlvbnMuYXBwcm92ZT1hc3luYyBlPT57bGV0e3dpdG5lc3M6dH09ZSxzPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KTtpZihhcGkuYXNzZXJ0KHQmJiJzdHJpbmciPT10eXBlb2YgdCYmdC5sZW5ndGg+PTMmJnQubGVuZ3RoPD0xNiwiaW52YWxpZCB3aXRuZXNzIGFjY291bnQiKSl7bGV0IGE9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIndpdG5lc3NlcyIse2FjY291bnQ6dH0pO2lmKGFwaS5hc3NlcnQoYSwid2l0bmVzcyBkb2VzIG5vdCBleGlzdCIpKXtsZXQgbj1hd2FpdCBhcGkuZGIuZmluZE9uZSgiYWNjb3VudHMiLHthY2NvdW50OmFwaS5zZW5kZXJ9KTtpZihudWxsPT09biYmKG49YXdhaXQgYXBpLmRiLmluc2VydCgiYWNjb3VudHMiLG49e2FjY291bnQ6YXBpLnNlbmRlcixhcHByb3ZhbHM6MCxhcHByb3ZhbFdlaWdodDp7JG51bWJlckRlY2ltYWw6IjAifSxsYXN0QXBwcm92ZUJsb2NrOmFwaS5ibG9ja051bWJlcn0pKSxhcGkuYXNzZXJ0KG4uYXBwcm92YWxzPHMubnVtYmVyT2ZBcHByb3ZhbHNQZXJBY2NvdW50LGB5b3UgY2FuIG9ubHkgYXBwcm92ZSAke3MubnVtYmVyT2ZBcHByb3ZhbHNQZXJBY2NvdW50fSB3aXRuZXNzZXNgKSl7bGV0IGk9YXdhaXQgYXBpLmRiLmZpbmRPbmUoImFwcHJvdmFscyIse2Zyb206YXBpLnNlbmRlcix0bzp0fSk7aWYoYXBpLmFzc2VydChudWxsPT09aSwieW91IGFscmVhZHkgYXBwcm92ZWQgdGhpcyB3aXRuZXNzIikpe2F3YWl0IGFwaS5kYi5pbnNlcnQoImFwcHJvdmFscyIsaT17ZnJvbTphcGkuc2VuZGVyLHRvOnR9KTtsZXQgbD1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsImJhbGFuY2VzIix7YWNjb3VudDphcGkuc2VuZGVyLHN5bWJvbDpHT1ZFUk5BTkNFX1RPS0VOX1NZTUJPTH0pLHI9MDtsJiZsLnN0YWtlJiYocj1sLnN0YWtlKSxsJiZsLmRlbGVnYXRpb25zSW4mJihyPWFwaS5CaWdOdW1iZXIocikucGx1cyhsLmRlbGVnYXRpb25zSW4pLnRvRml4ZWQoNSkpLG4uYXBwcm92YWxzKz0xLG4uYXBwcm92YWxXZWlnaHQ9cixuLmxhc3RBcHByb3ZlQmxvY2s9YXBpLmJsb2NrTnVtYmVyLGF3YWl0IGFwaS5kYi51cGRhdGUoImFjY291bnRzIixuKSxhd2FpdCB1cGRhdGVXaXRuZXNzUmFuayh0LHIpLGFwaS5lbWl0KCJ3aXRuZXNzQXBwcm92YWxBZGRlZCIse2FjY291bnQ6YXBpLnNlbmRlcix0bzp0LGFwcHJvdmFsV2VpZ2h0OnJ9KX19fX19LGFjdGlvbnMuZGlzYXBwcm92ZT1hc3luYyBlPT57bGV0e3dpdG5lc3M6dH09ZTtpZihhcGkuYXNzZXJ0KHQmJiJzdHJpbmciPT10eXBlb2YgdCYmdC5sZW5ndGg+PTMmJnQubGVuZ3RoPD0xNiwiaW52YWxpZCB3aXRuZXNzIGFjY291bnQiKSl7bGV0IHM9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIndpdG5lc3NlcyIse2FjY291bnQ6dH0pO2lmKGFwaS5hc3NlcnQocywid2l0bmVzcyBkb2VzIG5vdCBleGlzdCIpKXtsZXQgYT1hd2FpdCBhcGkuZGIuZmluZE9uZSgiYWNjb3VudHMiLHthY2NvdW50OmFwaS5zZW5kZXJ9KTtudWxsPT09YSYmYXdhaXQgYXBpLmRiLmluc2VydCgiYWNjb3VudHMiLGE9e2FjY291bnQ6YXBpLnNlbmRlcixhcHByb3ZhbHM6MCxhcHByb3ZhbFdlaWdodDp7JG51bWJlckRlY2ltYWw6IjAifSxsYXN0QXBwcm92ZUJsb2NrOmFwaS5ibG9ja051bWJlcn0pLGFwaS5hc3NlcnQoYS5hcHByb3ZhbHM+MCwibm8gYXBwcm92YWxzIGZvdW5kIikmJmF3YWl0IHJlbW92ZUFwcHJvdmFsKGFwaS5zZW5kZXIsdCxhLCEwKX19fTtjb25zdCBleHBpcmVBbGxVc2VyQXBwcm92YWxzPWFzeW5jIGU9PntsZXQgdD1hd2FpdCBhcGkuZGIuZmluZCgiYXBwcm92YWxzIix7ZnJvbTplLmFjY291bnR9KTtmb3IobGV0IHM9MDtzPHQubGVuZ3RoO3MrPTEpe2xldCBhPXRbc107YXdhaXQgcmVtb3ZlQXBwcm92YWwoYS5mcm9tLGEudG8sZSwhMSl9YXBpLmVtaXQoImFwcHJvdmFsc0V4cGlyZWQiLHthY2NvdW50OmUuYWNjb3VudH0pfSxmaW5kQW5kRXhwaXJlQXBwcm92YWxzPWFzeW5jIGU9PntsZXQgdD1hd2FpdCBhcGkuZGIuZmluZCgiYWNjb3VudHMiLHtsYXN0QXBwcm92ZUJsb2NrOnskbHQ6YXBpLmJsb2NrTnVtYmVyLWV9LGFwcHJvdmFsczp7JGd0OjB9fSwxZTMsMCxbe2luZGV4OiJsYXN0QXBwcm92ZUJsb2NrIixkZXNjZW5kaW5nOiExfV0pO2ZvcihsZXQgcz0wO3M8dC5sZW5ndGg7cys9MSlhd2FpdCBleHBpcmVBbGxVc2VyQXBwcm92YWxzKHRbc10pfSxjaGFuZ2VDdXJyZW50V2l0bmVzcz1hc3luYygpPT57bGV0IGU9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pLHtjdXJyZW50V2l0bmVzczp0LHRvdGFsQXBwcm92YWxXZWlnaHQ6cyxsYXN0V2l0bmVzc2VzOmEsbGFzdEJsb2NrUm91bmQ6bixyb3VuZDppLG1heFJvdW5kc01pc3NlZEluQVJvdzpsLG1heFJvdW5kUHJvcG9zaXRpb25XYWl0aW5nUGVyaW9kOnJ9PWUsbz0hMSxkPWFwaS5yYW5kb20oKSx1PWFwaS5CaWdOdW1iZXIocykudGltZXMoZCkudG9GaXhlZCg1LDEpLGM9MCxwPTAsYj1hd2FpdCBhcGkuZGIuZmluZCgid2l0bmVzc2VzIix7YXBwcm92YWxXZWlnaHQ6eyRndDp7JG51bWJlckRlY2ltYWw6IjAifX19LDEwMCxjLFt7aW5kZXg6ImFwcHJvdmFsV2VpZ2h0IixkZXNjZW5kaW5nOiEwfSxdKSx3PWF3YWl0IGFwaS5kYi5maW5kKCJzY2hlZHVsZXMiLHtyb3VuZDppfSksbT1hLmxlbmd0aD4xP2FbYS5sZW5ndGgtMl06IiIsZz1hd2FpdCBhcGkuZGIuZmluZE9uZSgic2NoZWR1bGVzIix7cm91bmQ6aSx3aXRuZXNzOnQsYmxvY2tOdW1iZXI6bn0pO2Rve2ZvcihsZXQgJD0wOyQ8Yi5sZW5ndGg7JCs9MSl7bGV0IGY9YlskXTtpZihwPWFwaS5CaWdOdW1iZXIocCkucGx1cyhmLmFwcHJvdmFsV2VpZ2h0LiRudW1iZXJEZWNpbWFsKS50b0ZpeGVkKDUpLCEwPT09Zi5lbmFibGVkJiZmLmFjY291bnQhPT1tJiZ2b2lkIDA9PT13LmZpbmQoZT0+ZS53aXRuZXNzPT09Zi5hY2NvdW50KSYmYXBpLkJpZ051bWJlcih1KS5sdGUocCkpe2FwaS5kZWJ1ZyhgY2hhbmdlZCBjdXJyZW50IHdpdG5lc3MgZnJvbSAke2cud2l0bmVzc30gdG8gJHtmLmFjY291bnR9YCksZy53aXRuZXNzPWYuYWNjb3VudCxhd2FpdCBhcGkuZGIudXBkYXRlKCJzY2hlZHVsZXMiLGcpLGUuY3VycmVudFdpdG5lc3M9Zi5hY2NvdW50LGUubGFzdFdpdG5lc3Nlcy5wdXNoKGYuYWNjb3VudCksZS5ibG9ja051bWJlcldpdG5lc3NDaGFuZ2U9YXBpLmJsb2NrTnVtYmVyK3IsYXdhaXQgYXBpLmRiLnVwZGF0ZSgicGFyYW1zIixlKTtsZXQgaD1hd2FpdCBhcGkuZGIuZmluZE9uZSgid2l0bmVzc2VzIix7YWNjb3VudDp0fSk7aC5taXNzZWRSb3VuZHMrPTEsaC5taXNzZWRSb3VuZHNJbkFSb3crPTEsaC5taXNzZWRSb3VuZHNJbkFSb3c+PWwmJihoLm1pc3NlZFJvdW5kc0luQVJvdz0wLGguZW5hYmxlZD0hMSksYXdhaXQgYXBpLmRiLnVwZGF0ZSgid2l0bmVzc2VzIixoKSxvPSEwLGFwaS5lbWl0KCJjdXJyZW50V2l0bmVzc0NoYW5nZWQiLHt9KTticmVha319ITE9PT1vJiYoYys9MTAwLGI9YXdhaXQgYXBpLmRiLmZpbmQoIndpdG5lc3NlcyIse2FwcHJvdmFsV2VpZ2h0OnskZ3Q6eyRudW1iZXJEZWNpbWFsOiIwIn19fSwxMDAsYyxbe2luZGV4OiJhcHByb3ZhbFdlaWdodCIsZGVzY2VuZGluZzohMH0sXSkpfXdoaWxlKGIubGVuZ3RoPjAmJiExPT09byk7aWYoITE9PT1vKXthcGkuZGVidWcoIm5vIGJhY2t1cCB3aXRuZXNzIHdhcyBmb3VuZCwgaW50ZXJjaGFuZ2luZyB3aXRuZXNzZXMgd2l0aGluIHRoZSBjdXJyZW50IHNjaGVkdWxlIik7Zm9yKGxldCB2PTA7djx3Lmxlbmd0aC0xO3YrPTEpe2xldCBOPXdbdl0sXz1OLndpdG5lc3M7aWYoXyE9PW0pe2FwaS5kZWJ1ZyhgY2hhbmdlZCBjdXJyZW50IHdpdG5lc3MgZnJvbSAke3R9IHRvICR7X31gKSxnLndpdG5lc3M9Xyxhd2FpdCBhcGkuZGIudXBkYXRlKCJzY2hlZHVsZXMiLGcpLE4ud2l0bmVzcz10LGF3YWl0IGFwaS5kYi51cGRhdGUoInNjaGVkdWxlcyIsTiksZS5jdXJyZW50V2l0bmVzcz1fLGUubGFzdFdpdG5lc3Nlcy5wdXNoKF8pLGUuYmxvY2tOdW1iZXJXaXRuZXNzQ2hhbmdlPWFwaS5ibG9ja051bWJlcityLGF3YWl0IGFwaS5kYi51cGRhdGUoInBhcmFtcyIsZSk7bGV0IFc9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIndpdG5lc3NlcyIse2FjY291bnQ6dH0pO1cubWlzc2VkUm91bmRzKz0xLFcubWlzc2VkUm91bmRzSW5BUm93Kz0xLFcubWlzc2VkUm91bmRzSW5BUm93Pj1sJiYoVy5taXNzZWRSb3VuZHNJbkFSb3c9MCxXLmVuYWJsZWQ9ITEpLGF3YWl0IGFwaS5kYi51cGRhdGUoIndpdG5lc3NlcyIsVyksYXBpLmVtaXQoImN1cnJlbnRXaXRuZXNzQ2hhbmdlZCIse30pO2JyZWFrfX19fSxtYW5hZ2VXaXRuZXNzZXNTY2hlZHVsZT1hc3luYygpPT57bGV0IGU9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pLHtudW1iZXJPZkFwcHJvdmVkV2l0bmVzc2VzOnQsdG90YWxBcHByb3ZhbFdlaWdodDpzLGxhc3RWZXJpZmllZEJsb2NrTnVtYmVyOmEsYmxvY2tOdW1iZXJXaXRuZXNzQ2hhbmdlOm4sbGFzdEJsb2NrUm91bmQ6aSxudW1iZXJPZlRvcFdpdG5lc3NlczpsLG51bWJlck9mV2l0bmVzc1Nsb3RzOnIsbWF4Um91bmRQcm9wb3NpdGlvbldhaXRpbmdQZXJpb2Q6byx3aXRuZXNzQXBwcm92ZUV4cGlyZUJsb2NrczpkfT1lO2F3YWl0IGZpbmRBbmRFeHBpcmVBcHByb3ZhbHMoZCk7bGV0IHU9YSsxLGM9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInNjaGVkdWxlcyIse2Jsb2NrTnVtYmVyOnV9KTtpZihudWxsPT09Yyl7aWYoYXBpLmRlYnVnKCJjYWxjdWxhdGluZyBuZXcgc2NoZWR1bGUiKSxjPVtdLHQ+PXIpe2xldCBwPWFwaS5yYW5kb20oKSxiPW51bGwsdz0wLG09MCxnPWF3YWl0IGFwaS5kYi5maW5kKCJ3aXRuZXNzZXMiLHthcHByb3ZhbFdlaWdodDp7JGd0OnskbnVtYmVyRGVjaW1hbDoiMCJ9fX0sMTAwLHcsW3tpbmRleDoiYXBwcm92YWxXZWlnaHQiLGRlc2NlbmRpbmc6ITB9LF0pO2Rve2ZvcihsZXQgJD0wOyQ8Zy5sZW5ndGg7JCs9MSl7bGV0IGY9Z1skXTtjLmxlbmd0aD49bCYmbnVsbD09PWImJihiPWFwaS5CaWdOdW1iZXIobSkucGx1cygiMC4wMDAwMSIpLnBsdXMoYXBpLkJpZ051bWJlcihzKS5taW51cyhtKS50aW1lcyhwKS50b0ZpeGVkKDUsMSkpLnRvRml4ZWQoNSkpLG09YXBpLkJpZ051bWJlcihtKS5wbHVzKGYuYXBwcm92YWxXZWlnaHQuJG51bWJlckRlY2ltYWwpLnRvRml4ZWQoNSksITA9PT1mLmVuYWJsZWQmJihjLmxlbmd0aDxsfHxhcGkuQmlnTnVtYmVyKGIpLmx0ZShtKSkmJmMucHVzaCh7d2l0bmVzczpmLmFjY291bnQsYmxvY2tOdW1iZXI6bnVsbH0pLGMubGVuZ3RoPj1yJiYoJD1nLmxlbmd0aCl9Yy5sZW5ndGg8ciYmKHcrPTEwMCxnPWF3YWl0IGFwaS5kYi5maW5kKCJ3aXRuZXNzZXMiLHthcHByb3ZhbFdlaWdodDp7JGd0OnskbnVtYmVyRGVjaW1hbDoiMCJ9fX0sMTAwLHcsW3tpbmRleDoiYXBwcm92YWxXZWlnaHQiLGRlc2NlbmRpbmc6ITB9LF0pKX13aGlsZShnLmxlbmd0aD4wJiZjLmxlbmd0aDxyKX1pZihjLmxlbmd0aD09PXIpe2xldCBoLHY7Zm9yKGxldCBOPWMubGVuZ3RoLTE7Tj4wO04tPTEpe2xldCBfPWFwaS5yYW5kb20oKTtoPU1hdGguZmxvb3IoXyooTisxKSksdj1jW05dLGNbTl09Y1toXSxjW2hdPXZ9bGV0IFc9ZS5sYXN0V2l0bmVzc2VzLE89Vy5sZW5ndGg+MD9XW1cubGVuZ3RoLTFdOiIiO1cubGVuZ3RoPj1yJiYoVz1bXSk7bGV0IGs9Y1tjLmxlbmd0aC0xXS53aXRuZXNzO2lmKFcuaW5jbHVkZXMoayl8fE89PT1rKXtmb3IobGV0IEE9MDtBPGMubGVuZ3RoO0ErPTEpaWYoIVcuaW5jbHVkZXMoY1tBXS53aXRuZXNzKSYmY1tBXS53aXRuZXNzIT09Tyl7bGV0IFI9Y1tBXS53aXRuZXNzO2NbQV0ud2l0bmVzcz1rLGNbYy5sZW5ndGgtMV0ud2l0bmVzcz1SO2JyZWFrfX1pZihjWzBdLndpdG5lc3M9PT1PKXtsZXQgRT1jWzBdLndpdG5lc3MsQj1jWzFdLndpdG5lc3M7Y1swXS53aXRuZXNzPUIsY1sxXS53aXRuZXNzPUV9bGV0IEk9MD09PWE/YXBpLmJsb2NrTnVtYmVyOmErMTtlLnJvdW5kKz0xO2ZvcihsZXQgUz0wO1M8Yy5sZW5ndGg7Uys9MSljW1NdLmJsb2NrTnVtYmVyPUksY1tTXS5yb3VuZD1lLnJvdW5kLGFwaS5kZWJ1Zyhgc2NoZWR1bGVkIHdpdG5lc3MgJHtjW1NdLndpdG5lc3N9IGZvciBibG9jayAke0l9IChyb3VuZCAke2Uucm91bmR9KWApLGF3YWl0IGFwaS5kYi5pbnNlcnQoInNjaGVkdWxlcyIsY1tTXSksSSs9MTswPT09YSYmKGUubGFzdFZlcmlmaWVkQmxvY2tOdW1iZXI9YXBpLmJsb2NrTnVtYmVyLTEpO2xldCB5PWNbYy5sZW5ndGgtMV07ZS5sYXN0QmxvY2tSb3VuZD15LmJsb2NrTnVtYmVyLGUuY3VycmVudFdpdG5lc3M9eS53aXRuZXNzLFcucHVzaCh5LndpdG5lc3MpLGUubGFzdFdpdG5lc3Nlcz1XLGUuYmxvY2tOdW1iZXJXaXRuZXNzQ2hhbmdlPWFwaS5ibG9ja051bWJlcitvLGF3YWl0IGFwaS5kYi51cGRhdGUoInBhcmFtcyIsZSksYXBpLmVtaXQoIm5ld1NjaGVkdWxlIix7fSl9fWVsc2UgYXBpLmJsb2NrTnVtYmVyPj1uJiYoYXBpLmJsb2NrTnVtYmVyPmk/YXdhaXQgY2hhbmdlQ3VycmVudFdpdG5lc3MoKTooZS5ibG9ja051bWJlcldpdG5lc3NDaGFuZ2U9YXBpLmJsb2NrTnVtYmVyK28sYXdhaXQgYXBpLmRiLnVwZGF0ZSgicGFyYW1zIixlKSxhcGkuZW1pdCgiYXdhaXRpbmdSb3VuZEVuZCIse30pKSl9O2FjdGlvbnMucHJvcG9zZVJvdW5kPWFzeW5jIGU9PntsZXR7cm91bmRIYXNoOnQsaXNTaWduZWRXaXRoQWN0aXZlS2V5OnMsc2lnbmF0dXJlczphfT1lLG49YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pLHtsYXN0VmVyaWZpZWRCbG9ja051bWJlcjppLHJvdW5kOmwsbGFzdEJsb2NrUm91bmQ6cixjdXJyZW50V2l0bmVzczpvfT1uLGQ9YXdhaXQgYXBpLmRiLmZpbmQoInNjaGVkdWxlcyIse3JvdW5kOmx9LDFlMywwLFt7aW5kZXg6Il9pZCIsZGVzY2VuZGluZzohMX1dKSx1PWQubGVuZ3RoLHt3aXRuZXNzU2lnbmF0dXJlc1JlcXVpcmVkOmN9PW47aWYoITA9PT1zJiZ0JiYic3RyaW5nIj09dHlwZW9mIHQmJjY0PT09dC5sZW5ndGgmJkFycmF5LmlzQXJyYXkoYSkmJmEubGVuZ3RoPD11JiZhLmxlbmd0aD49Yyl7bGV0IHA9aSsxLGI9IiI7aWYoYXBpLnNlbmRlcj09PW8pe2Zvcig7cDw9cjspe2xldCB3PWF3YWl0IGFwaS5kYi5nZXRCbG9ja0luZm8ocCk7aWYobnVsbCE9PXcpYj1hcGkuU0hBMjU2KGAke2J9JHt3Lmhhc2h9YCk7ZWxzZXtiPSIiO2JyZWFrfXArPTF9aWYoIiIhPT1iJiZiPT09dCl7bGV0IG09MCxnPVtdLCQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIndpdG5lc3NlcyIse2FjY291bnQ6b30pLGY9YS5maW5kKGU9PmVbMF09PT1vKTtmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grPTEpe2xldCB2PWRbaF0sTj1hd2FpdCBhcGkuZGIuZmluZE9uZSgid2l0bmVzc2VzIix7YWNjb3VudDp2LndpdG5lc3N9KTtpZihudWxsIT09Til7bGV0IF89YS5maW5kKGU9PmVbMF09PT1OLmFjY291bnQpO18mJmFwaS5jaGVja1NpZ25hdHVyZShiLF9bMV0sTi5zaWduaW5nS2V5LCEwKSYmKGFwaS5kZWJ1Zyhgd2l0bmVzcyAke04uYWNjb3VudH0gc2lnbmVkIHJvdW5kICR7bH1gKSxtKz0xKSxnLnB1c2goe2Jsb2NrTnVtYmVyOnYuYmxvY2tOdW1iZXIsd2l0bmVzczpvLHNpZ25pbmdLZXk6JC5zaWduaW5nS2V5LHJvdW5kU2lnbmF0dXJlOmZbMV0scm91bmQ6bCxyb3VuZEhhc2g6dH0pfX1pZihtPj1jKXtmb3IobGV0IFc9MDtXPGcubGVuZ3RoO1crPTEpYXdhaXQgYXBpLnZlcmlmeUJsb2NrKGdbV10pO2xldCBPPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiY29udHJhY3RzQmFsYW5jZXMiLHthY2NvdW50OiJ3aXRuZXNzZXMiLHN5bWJvbDoiQkVFIn0pLGs9ITE7TyYmYXBpLkJpZ051bWJlcihPLmJhbGFuY2UpLmd0ZSgiMC4wOTUxMjkzIikmJihrPSEwKTtmb3IobGV0IEE9MDtBPGQubGVuZ3RoO0ErPTEpe2xldCBSPWRbQV07ITA9PT1rJiZhd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoInRva2VucyIsInN0YWtlRnJvbUNvbnRyYWN0Iix7dG86Ui53aXRuZXNzLHN5bWJvbDoiQkVFIixxdWFudGl0eToiMC4wMTkwMjU4NiJ9KSxhd2FpdCBhcGkuZGIucmVtb3ZlKCJzY2hlZHVsZXMiLFIpfW4uY3VycmVudFdpdG5lc3M9bnVsbCxuLmxhc3RWZXJpZmllZEJsb2NrTnVtYmVyPXIsYXdhaXQgYXBpLmRiLnVwZGF0ZSgicGFyYW1zIixuKTtsZXQgRT1hd2FpdCBhcGkuZGIuZmluZE9uZSgid2l0bmVzc2VzIix7YWNjb3VudDpvfSk7RS5taXNzZWRSb3VuZHNJbkFSb3c9MCxFLmxhc3RSb3VuZFZlcmlmaWVkPWwsRS5sYXN0QmxvY2tWZXJpZmllZD1yLEUudmVyaWZpZWRSb3VuZHMrPTEsYXdhaXQgYXBpLmRiLnVwZGF0ZSgid2l0bmVzc2VzIixFKSxhd2FpdCBtYW5hZ2VXaXRuZXNzZXNTY2hlZHVsZSgpfX19fX0sYWN0aW9ucy5zY2hlZHVsZVdpdG5lc3Nlcz1hc3luYygpPT57YXdhaXQgbWFuYWdlV2l0bmVzc2VzU2NoZWR1bGUoKX07"}}}