{ "name": "Voter", "structs": { "VoteRaw": [ { "name": "approvals", "type": "uint64" }, { "name": "rejections", "type": "uint64" } ] }, "methods": [ { "name": "create", "args": [], "returns": { "type": "void" }, "actions": { "create": [ "NoOp" ], "call": [] }, "readonly": false, "desc": "Create a new Voter.\nMUST BE CALLED BY THE REGISTRY CONTRACT.", "events": [], "recommendations": {} }, { "name": "update", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "UpdateApplication" ] }, "readonly": false, "desc": "Update the contract.\nMUST BE CALLED BY THE REGISTRY CONTRACT.", "events": [], "recommendations": {} }, { "name": "assign_xgov", "args": [ { "type": "address", "name": "xgov_address", "desc": "Address of the xGov." }, { "type": "address", "name": "manager_address", "desc": "Address of the new manager." } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Assign the contract to an xGov.", "events": [], "recommendations": {} }, { "name": "set_manager", "args": [ { "type": "address", "name": "manager_address", "desc": "Address of the new manager." } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Set a new manager.", "events": [], "recommendations": {} }, { "name": "set_representative", "args": [ { "type": "uint64", "name": "representative_id", "desc": "The application ID of the new representative." } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Set a new representative.", "events": [], "recommendations": {} }, { "name": "set_window", "args": [ { "type": "uint64", "name": "window_ts", "desc": "The new time window in seconds before proposal voting period ends that representative can cast the vote. Set to 0 to not have any delay." } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Set a new window when vote can be cast as representative.", "events": [], "recommendations": {} }, { "name": "vote_representative", "args": [ { "type": "uint64", "name": "proposal_id", "desc": "App ID of proposal to vote on." } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Vote on a proposal according to vote of representative if time is within window.\nMUST BE CALLED BY THE REGISTRY CONTRACT.", "events": [], "recommendations": {} }, { "name": "vote_direct", "args": [ { "type": "uint64", "name": "proposal_id", "desc": "App ID of proposal to vote on." }, { "type": "(uint64,uint64)", "struct": "VoteRaw", "name": "vote", "desc": "xGov's vote for the proposal. Expressed in number of approvals and rejections." } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Vote directly on a proposal.", "events": [], "recommendations": {} }, { "name": "yield_voting_rights", "args": [ { "type": "address", "name": "voting_address", "desc": "The voting account address to delegate voting power to." } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Yield voting rights to another account.", "events": [], "recommendations": {} }, { "name": "add_votes", "args": [ { "type": "uint64", "name": "add_votes", "desc": "Number of approved votes to add." } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Increase votes left.\nMUST BE CALLED BY THE REGISTRY CONTRACT.", "events": [], "recommendations": {} }, { "name": "delete", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "DeleteApplication" ] }, "readonly": false, "desc": "Delete the Voter.\nMUST BE CALLED BY THE REGISTRY CONTRACT.", "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 32, "bytes": 32 }, "local": { "ints": 8, "bytes": 8 } }, "keys": { "global": { "xgov_address": { "keyType": "AVMBytes", "valueType": "address", "key": "eGdvdl9hZGRyZXNz" }, "registry_app": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "cmVnaXN0cnlfYXBw" }, "representative_app": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "cmVwcmVzZW50YXRpdmVfYXBw" }, "window_ts": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "d2luZG93X3Rz" }, "votes_left": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "dm90ZXNfbGVmdA==" }, "manager_address": { "keyType": "AVMBytes", "valueType": "address", "key": "bWFuYWdlcl9hZGRyZXNz" } }, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": {} } }, "bareActions": { "create": [], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 411 ], "errorMessage": "App was not created by registry" }, { "pc": [ 456 ], "errorMessage": "No paid votes left to cast" }, { "pc": [ 285 ], "errorMessage": "OnCompletion must be DeleteApplication && can only call when not creating" }, { "pc": [ 193 ], "errorMessage": "OnCompletion must be NoOp" }, { "pc": [ 297 ], "errorMessage": "OnCompletion must be UpdateApplication && can only call when not creating" }, { "pc": [ 450, 741 ], "errorMessage": "Proposal is not part of xGov Registry" }, { "pc": [ 541 ], "errorMessage": "Representative is nonexistent" }, { "pc": [ 595 ], "errorMessage": "Representative vote is invalid" }, { "pc": [ 334, 358, 446, 873, 891 ], "errorMessage": "Sender is not app creator" }, { "pc": [ 530 ], "errorMessage": "Too soon to vote" }, { "pc": [ 303, 380, 398, 425, 735, 817 ], "errorMessage": "Unauthorized" }, { "pc": [ 131 ], "errorMessage": "Wrong Global Bytes allocation" }, { "pc": [ 136 ], "errorMessage": "Wrong Global UInts allocation" }, { "pc": [ 141 ], "errorMessage": "Wrong Local Bytes allocation" }, { "pc": [ 146 ], "errorMessage": "Wrong Local UInts allocation" }, { "pc": [ 407, 945, 956 ], "errorMessage": "application exists" }, { "pc": [ 585, 645 ], "errorMessage": "application log value is not the result of an ABI return" }, { "pc": [ 928 ], "errorMessage": "check self.manager_address exists" }, { "pc": [ 681, 760, 826, 949 ], "errorMessage": "check self.registry_app exists" }, { "pc": [ 535 ], "errorMessage": "check self.representative_app exists" }, { "pc": [ 454, 877 ], "errorMessage": "check self.votes_left exists" }, { "pc": [ 465, 524 ], "errorMessage": "check self.window_ts exists" }, { "pc": [ 600, 746, 822, 917 ], "errorMessage": "check self.xgov_address exists" }, { "pc": [ 344, 352, 376, 801 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 636 ], "errorMessage": "invalid number of bytes for arc4.tuple" }, { "pc": [ 576 ], "errorMessage": "invalid number of bytes for arc4.tuple" }, { "pc": [ 394, 421, 440, 722, 867 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ 731 ], "errorMessage": "invalid number of bytes for smart_contracts.common.abi_types.VoteRaw" }, { "pc": [ 649 ], "errorMessage": "xGov does not have any votes" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgOCAzMiAxMDAwMDAwCiAgICBieXRlY2Jsb2NrIDB4Nzg2NzZmNzY1ZjYxNjQ2NDcyNjU3MzczIDB4NzI2NTY3Njk3Mzc0NzI3OTVmNjE3MDcwIDB4NzY2Zjc0NjU3MzVmNmM2NTY2NzQgMHg3NzY5NmU2NDZmNzc1Zjc0NzMgMHg2ZDYxNmU2MTY3NjU3MjVmNjE2NDY0NzI2NTczNzMgMHg3MjY1NzA3MjY1NzM2NTZlNzQ2MTc0Njk3NjY1NWY2MTcwNzAgMHg3ODY3NmY3NjVmNzI2NTY3Njk3Mzc0NzI3OTVmNjE3MDcwIDB4MTUxZjdjNzUgMHgxNThmOGRkNgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjQxLTQyCiAgICAvLyAjIFByZWNvbmRpdGlvbnMKICAgIC8vIGFzc2VydCBUeG4uZ2xvYmFsX251bV9ieXRlX3NsaWNlID09IGNmZy5HTE9CQUxfQllURVMsIGVyci5XUk9OR19HTE9CQUxfQllURVMKICAgIHR4biBHbG9iYWxOdW1CeXRlU2xpY2UKICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBXcm9uZyBHbG9iYWwgQnl0ZXMgYWxsb2NhdGlvbgogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjQzCiAgICAvLyBhc3NlcnQgVHhuLmdsb2JhbF9udW1fdWludCA9PSBjZmcuR0xPQkFMX1VJTlRTLCBlcnIuV1JPTkdfR0xPQkFMX1VJTlRTCiAgICB0eG4gR2xvYmFsTnVtVWludAogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIFdyb25nIEdsb2JhbCBVSW50cyBhbGxvY2F0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6NDQKICAgIC8vIGFzc2VydCBUeG4ubG9jYWxfbnVtX2J5dGVfc2xpY2UgPT0gY2ZnLkxPQ0FMX0JZVEVTLCBlcnIuV1JPTkdfTE9DQUxfQllURVMKICAgIHR4biBMb2NhbE51bUJ5dGVTbGljZQogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gV3JvbmcgTG9jYWwgQnl0ZXMgYWxsb2NhdGlvbgogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjQ1CiAgICAvLyBhc3NlcnQgVHhuLmxvY2FsX251bV91aW50ID09IGNmZy5MT0NBTF9VSU5UUywgZXJyLldST05HX0xPQ0FMX1VJTlRTCiAgICB0eG4gTG9jYWxOdW1VaW50CiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBXcm9uZyBMb2NhbCBVSW50cyBhbGxvY2F0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6NTAKICAgIC8vIGtleT1jZmcuR1NfS0VZX1hHT1ZfQUREUkVTUywKICAgIGJ5dGVjXzAgLy8gMHg3ODY3NmY3NjVmNjE2NDY0NzI2NTczNzMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weTo0OQogICAgLy8gQWNjb3VudCgpLAogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6NDctNTEKICAgIC8vICMgR2xvYmFsIFZhcmlhYmxlcwogICAgLy8gc2VsZi54Z292X2FkZHJlc3MgPSBHbG9iYWxTdGF0ZSgKICAgIC8vICAgICBBY2NvdW50KCksCiAgICAvLyAgICAga2V5PWNmZy5HU19LRVlfWEdPVl9BRERSRVNTLAogICAgLy8gKQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weTo1NAogICAgLy8ga2V5PWNmZy5HU19LRVlfUkVHSVNUUllfQVBQLAogICAgYnl0ZWNfMSAvLyAweDcyNjU2NzY5NzM3NDcyNzk1ZjYxNzA3MAogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjUzCiAgICAvLyBBcHBsaWNhdGlvbigpLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weTo1Mi01NQogICAgLy8gc2VsZi5yZWdpc3RyeV9hcHAgPSBHbG9iYWxTdGF0ZSgKICAgIC8vICAgICBBcHBsaWNhdGlvbigpLAogICAgLy8gICAgIGtleT1jZmcuR1NfS0VZX1JFR0lTVFJZX0FQUCwKICAgIC8vICkKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6NTgKICAgIC8vIGtleT1jZmcuR1NfS0VZX1JFUFJFU0VOVEFUSVZFX0FQUCwKICAgIGJ5dGVjIDUgLy8gMHg3MjY1NzA3MjY1NzM2NTZlNzQ2MTc0Njk3NjY1NWY2MTcwNzAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weTo1NwogICAgLy8gQXBwbGljYXRpb24oKSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6NTYtNTkKICAgIC8vIHNlbGYucmVwcmVzZW50YXRpdmVfYXBwID0gR2xvYmFsU3RhdGUoCiAgICAvLyAgICAgQXBwbGljYXRpb24oKSwKICAgIC8vICAgICBrZXk9Y2ZnLkdTX0tFWV9SRVBSRVNFTlRBVElWRV9BUFAsCiAgICAvLyApCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjYyCiAgICAvLyBrZXk9Y2ZnLkdTX0tFWV9XSU5ET1dfVFMsCiAgICBieXRlY18zIC8vIDB4Nzc2OTZlNjQ2Zjc3NWY3NDczCiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6NjEKICAgIC8vIFVJbnQ2NCgpLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weTo2MC02MwogICAgLy8gc2VsZi53aW5kb3dfdHMgPSBHbG9iYWxTdGF0ZSgKICAgIC8vICAgICBVSW50NjQoKSwKICAgIC8vICAgICBrZXk9Y2ZnLkdTX0tFWV9XSU5ET1dfVFMsCiAgICAvLyApCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjY2CiAgICAvLyBrZXk9Y2ZnLkdTX0tFWV9WT1RFU19MRUZULAogICAgYnl0ZWNfMiAvLyAweDc2NmY3NDY1NzM1ZjZjNjU2Njc0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6NjUKICAgIC8vIFVJbnQ2NCgpLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weTo2NC02NwogICAgLy8gc2VsZi52b3Rlc19sZWZ0ID0gR2xvYmFsU3RhdGUoCiAgICAvLyAgICAgVUludDY0KCksCiAgICAvLyAgICAga2V5PWNmZy5HU19LRVlfVk9URVNfTEVGVCwKICAgIC8vICkKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6NzAKICAgIC8vIGtleT1jZmcuR1NfS0VZX01BTkFHRVJfQUREUkVTUywKICAgIGJ5dGVjIDQgLy8gMHg2ZDYxNmU2MTY3NjU3MjVmNjE2NDY0NzI2NTczNzMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weTo2OQogICAgLy8gQWNjb3VudCgpLAogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6NjgtNzEKICAgIC8vIHNlbGYubWFuYWdlcl9hZGRyZXNzID0gR2xvYmFsU3RhdGUoCiAgICAvLyAgICAgQWNjb3VudCgpLAogICAgLy8gICAgIGtleT1jZmcuR1NfS0VZX01BTkFHRVJfQUREUkVTUywKICAgIC8vICkKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weTozMC0zOQogICAgLy8gY2xhc3MgVm90ZXIoCiAgICAvLyAgICAgQVJDNENvbnRyYWN0LAogICAgLy8gICAgIGF2bV92ZXJzaW9uPTEwLAogICAgLy8gICAgIHN0YXRlX3RvdGFscz1TdGF0ZVRvdGFscygKICAgIC8vICAgICAgICAgZ2xvYmFsX2J5dGVzPWNmZy5HTE9CQUxfQllURVMsCiAgICAvLyAgICAgICAgIGdsb2JhbF91aW50cz1jZmcuR0xPQkFMX1VJTlRTLAogICAgLy8gICAgICAgICBsb2NhbF9ieXRlcz1jZmcuTE9DQUxfQllURVMsCiAgICAvLyAgICAgICAgIGxvY2FsX3VpbnRzPWNmZy5MT0NBTF9VSU5UUywKICAgIC8vICAgICApLAogICAgLy8gKToKICAgIHB1c2hieXRlc3MgMHhhMGU4MTg3MiAweDI0Mzc4ZDNjIC8vIG1ldGhvZCAidXBkYXRlKCl2b2lkIiwgbWV0aG9kICJkZWxldGUoKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX3VwZGF0ZV9yb3V0ZUA0IG1haW5fZGVsZXRlX3JvdXRlQDUKCm1haW5fc3dpdGNoX2Nhc2VfbmV4dEA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjMwLTM5CiAgICAvLyBjbGFzcyBWb3RlcigKICAgIC8vICAgICBBUkM0Q29udHJhY3QsCiAgICAvLyAgICAgYXZtX3ZlcnNpb249MTAsCiAgICAvLyAgICAgc3RhdGVfdG90YWxzPVN0YXRlVG90YWxzKAogICAgLy8gICAgICAgICBnbG9iYWxfYnl0ZXM9Y2ZnLkdMT0JBTF9CWVRFUywKICAgIC8vICAgICAgICAgZ2xvYmFsX3VpbnRzPWNmZy5HTE9CQUxfVUlOVFMsCiAgICAvLyAgICAgICAgIGxvY2FsX2J5dGVzPWNmZy5MT0NBTF9CWVRFUywKICAgIC8vICAgICAgICAgbG9jYWxfdWludHM9Y2ZnLkxPQ0FMX1VJTlRTLAogICAgLy8gICAgICksCiAgICAvLyApOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBieiBtYWluX2NyZWF0ZV9Ob09wQDE3CiAgICBwdXNoYnl0ZXNzIDB4NmU5MzIzMDYgMHg5NjY3ZDZkZSAweDQxZWJiMDE2IDB4Y2IzOGVmNDQgMHg3NTdlMjlmYyAweDE0ZTM0ZWVhIDB4YmE2MGQ4NTQgMHgyOTIzZjNkMSAvLyBtZXRob2QgImFzc2lnbl94Z292KGFkZHJlc3MsYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJzZXRfbWFuYWdlcihhZGRyZXNzKXZvaWQiLCBtZXRob2QgInNldF9yZXByZXNlbnRhdGl2ZSh1aW50NjQpdm9pZCIsIG1ldGhvZCAic2V0X3dpbmRvdyh1aW50NjQpdm9pZCIsIG1ldGhvZCAidm90ZV9yZXByZXNlbnRhdGl2ZSh1aW50NjQpdm9pZCIsIG1ldGhvZCAidm90ZV9kaXJlY3QodWludDY0LCh1aW50NjQsdWludDY0KSl2b2lkIiwgbWV0aG9kICJ5aWVsZF92b3RpbmdfcmlnaHRzKGFkZHJlc3Mpdm9pZCIsIG1ldGhvZCAiYWRkX3ZvdGVzKHVpbnQ2NCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggYXNzaWduX3hnb3Ygc2V0X21hbmFnZXIgc2V0X3JlcHJlc2VudGF0aXZlIHNldF93aW5kb3cgdm90ZV9yZXByZXNlbnRhdGl2ZSB2b3RlX2RpcmVjdCB5aWVsZF92b3RpbmdfcmlnaHRzIGFkZF92b3RlcwogICAgZXJyCgptYWluX2NyZWF0ZV9Ob09wQDE3OgogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjMwLTM5CiAgICAvLyBjbGFzcyBWb3RlcigKICAgIC8vICAgICBBUkM0Q29udHJhY3QsCiAgICAvLyAgICAgYXZtX3ZlcnNpb249MTAsCiAgICAvLyAgICAgc3RhdGVfdG90YWxzPVN0YXRlVG90YWxzKAogICAgLy8gICAgICAgICBnbG9iYWxfYnl0ZXM9Y2ZnLkdMT0JBTF9CWVRFUywKICAgIC8vICAgICAgICAgZ2xvYmFsX3VpbnRzPWNmZy5HTE9CQUxfVUlOVFMsCiAgICAvLyAgICAgICAgIGxvY2FsX2J5dGVzPWNmZy5MT0NBTF9CWVRFUywKICAgIC8vICAgICAgICAgbG9jYWxfdWludHM9Y2ZnLkxPQ0FMX1VJTlRTLAogICAgLy8gICAgICksCiAgICAvLyApOgogICAgcHVzaGJ5dGVzIDB4NGM1YzYxYmEgLy8gbWV0aG9kICJjcmVhdGUoKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBjcmVhdGUKICAgIGVycgoKbWFpbl9kZWxldGVfcm91dGVANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weTozNDkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChhbGxvd19hY3Rpb25zPSgiRGVsZXRlQXBwbGljYXRpb24iLCkpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBwdXNoaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KICAgID09CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgJiYKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBEZWxldGVBcHBsaWNhdGlvbiAmJiBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBiIGRlbGV0ZQoKbWFpbl91cGRhdGVfcm91dGVANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weTo5OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJVcGRhdGVBcHBsaWNhdGlvbiJdKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgcHVzaGludCA0IC8vIFVwZGF0ZUFwcGxpY2F0aW9uCiAgICA9PQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICYmCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgVXBkYXRlQXBwbGljYXRpb24gJiYgY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgYiB1cGRhdGUKCgovLyBzbWFydF9jb250cmFjdHMudm90ZXIuY29udHJhY3QuVm90ZXIuY3JlYXRlW3JvdXRpbmddKCkgLT4gdm9pZDoKY3JlYXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5Ojg1CiAgICAvLyBHbG9iYWwuY2FsbGVyX2FwcGxpY2F0aW9uX2lkICE9IDAKICAgIGdsb2JhbCBDYWxsZXJBcHBsaWNhdGlvbklECiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6ODQtODYKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgR2xvYmFsLmNhbGxlcl9hcHBsaWNhdGlvbl9pZCAhPSAwCiAgICAvLyApLCBlcnIuVU5BVVRIT1JJWkVEICAjIE9ubHkgY2FsbGFibGUgYnkgYW5vdGhlciBjb250cmFjdAogICAgYXNzZXJ0IC8vIFVuYXV0aG9yaXplZAogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5Ojg4CiAgICAvLyBzZWxmLnJlZ2lzdHJ5X2FwcC52YWx1ZSA9IEFwcGxpY2F0aW9uKEdsb2JhbC5jYWxsZXJfYXBwbGljYXRpb25faWQpCiAgICBieXRlY18xIC8vIDB4NzI2NTY3Njk3Mzc0NzI3OTVmNjE3MDcwCiAgICBnbG9iYWwgQ2FsbGVyQXBwbGljYXRpb25JRAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weTo5MAogICAgLy8gc2VsZi54Z292X2FkZHJlc3MudmFsdWUgPSBHbG9iYWwuemVyb19hZGRyZXNzCiAgICBieXRlY18wIC8vIDB4Nzg2NzZmNzY1ZjYxNjQ2NDcyNjU3MzczCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6OTEKICAgIC8vIHNlbGYubWFuYWdlcl9hZGRyZXNzLnZhbHVlID0gR2xvYmFsLnplcm9fYWRkcmVzcwogICAgYnl0ZWMgNCAvLyAweDZkNjE2ZTYxNjc2NTcyNWY2MTY0NjQ3MjY1NzM3MwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjkyCiAgICAvLyBzZWxmLnJlcHJlc2VudGF0aXZlX2FwcC52YWx1ZSA9IEFwcGxpY2F0aW9uKCkKICAgIGJ5dGVjIDUgLy8gMHg3MjY1NzA3MjY1NzM2NTZlNzQ2MTc0Njk3NjY1NWY2MTcwNzAKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjkzCiAgICAvLyBzZWxmLndpbmRvd190cy52YWx1ZSA9IFVJbnQ2NCgwKQogICAgYnl0ZWNfMyAvLyAweDc3Njk2ZTY0NmY3NzVmNzQ3MwogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6OTQKICAgIC8vIHNlbGYudm90ZXNfbGVmdC52YWx1ZSA9IFVJbnQ2NCgwKQogICAgYnl0ZWNfMiAvLyAweDc2NmY3NDY1NzM1ZjZjNjU2Njc0CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weTo3MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGNyZWF0ZT0icmVxdWlyZSIpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnZvdGVyLmNvbnRyYWN0LlZvdGVyLnVwZGF0ZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnVwZGF0ZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weTozNzcKICAgIC8vIHJldHVybiBUeG4uc2VuZGVyID09IEdsb2JhbC5jcmVhdG9yX2FkZHJlc3MKICAgIHR4biBTZW5kZXIKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weToxMDcKICAgIC8vIGFzc2VydCBzZWxmLmlzX2NyZWF0b3IoKSwgZXJyLk5PVF9DUkVBVE9SCiAgICBhc3NlcnQgLy8gU2VuZGVyIGlzIG5vdCBhcHAgY3JlYXRvcgogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5Ojk4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoYWxsb3dfYWN0aW9ucz1bIlVwZGF0ZUFwcGxpY2F0aW9uIl0pCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnZvdGVyLmNvbnRyYWN0LlZvdGVyLmFzc2lnbl94Z292W3JvdXRpbmddKCkgLT4gdm9pZDoKYXNzaWduX3hnb3Y6CiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6MTExCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weTozNzcKICAgIC8vIHJldHVybiBUeG4uc2VuZGVyID09IEdsb2JhbC5jcmVhdG9yX2FkZHJlc3MKICAgIHR4biBTZW5kZXIKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weToxMjcKICAgIC8vIGFzc2VydCBzZWxmLmlzX2NyZWF0b3IoKSwgZXJyLk5PVF9DUkVBVE9SCiAgICBhc3NlcnQgLy8gU2VuZGVyIGlzIG5vdCBhcHAgY3JlYXRvcgogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjEyOQogICAgLy8gc2VsZi54Z292X2FkZHJlc3MudmFsdWUgPSB4Z292X2FkZHJlc3MubmF0aXZlCiAgICBieXRlY18wIC8vIDB4Nzg2NzZmNzY1ZjYxNjQ2NDcyNjU3MzczCiAgICB1bmNvdmVyIDIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6MTMwCiAgICAvLyBzZWxmLm1hbmFnZXJfYWRkcmVzcy52YWx1ZSA9IG1hbmFnZXJfYWRkcmVzcy5uYXRpdmUKICAgIGJ5dGVjIDQgLy8gMHg2ZDYxNmU2MTY3NjU3MjVmNjE2NDY0NzI2NTczNzMKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6MTExCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy52b3Rlci5jb250cmFjdC5Wb3Rlci5zZXRfbWFuYWdlcltyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldF9tYW5hZ2VyOgogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjEzNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjE0OAogICAgLy8gYXNzZXJ0IHNlbGYuaXNfeGdvdl9vcl9tYW5hZ2VyKCksIGVyci5VTkFVVEhPUklaRUQKICAgIGNhbGxzdWIgaXNfeGdvdl9vcl9tYW5hZ2VyCiAgICBhc3NlcnQgLy8gVW5hdXRob3JpemVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6MTUwCiAgICAvLyBzZWxmLm1hbmFnZXJfYWRkcmVzcy52YWx1ZSA9IG1hbmFnZXJfYWRkcmVzcy5uYXRpdmUKICAgIGJ5dGVjIDQgLy8gMHg2ZDYxNmU2MTY3NjU3MjVmNjE2NDY0NzI2NTczNzMKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6MTM0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy52b3Rlci5jb250cmFjdC5Wb3Rlci5zZXRfcmVwcmVzZW50YXRpdmVbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRfcmVwcmVzZW50YXRpdmU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6MTU0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjE2OQogICAgLy8gYXNzZXJ0IHNlbGYuaXNfeGdvdl9vcl9tYW5hZ2VyKCksIGVyci5VTkFVVEhPUklaRUQKICAgIGNhbGxzdWIgaXNfeGdvdl9vcl9tYW5hZ2VyCiAgICBhc3NlcnQgLy8gVW5hdXRob3JpemVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6MTcxCiAgICAvLyBzZWxmLnJlcHJlc2VudGF0aXZlX2FwcC52YWx1ZSA9IEFwcGxpY2F0aW9uKHJlcHJlc2VudGF0aXZlX2lkLmFzX3VpbnQ2NCgpKQogICAgYnRvaQogICAgYnl0ZWMgNSAvLyAweDcyNjU3MDcyNjU3MzY1NmU3NDYxNzQ2OTc2NjU1ZjYxNzA3MAogICAgZGlnIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6MzczCiAgICAvLyBhc3NlcnQgYXBwLmNyZWF0b3IgPT0gR2xvYmFsLmNyZWF0b3JfYWRkcmVzcywgZXJyLlVOUkVMQVRFRF9BUFAKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcENyZWF0b3IKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBBcHAgd2FzIG5vdCBjcmVhdGVkIGJ5IHJlZ2lzdHJ5CiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6MTU0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy52b3Rlci5jb250cmFjdC5Wb3Rlci5zZXRfd2luZG93W3JvdXRpbmddKCkgLT4gdm9pZDoKc2V0X3dpbmRvdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weToxNzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6MTkyCiAgICAvLyBhc3NlcnQgc2VsZi5pc194Z292X29yX21hbmFnZXIoKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgY2FsbHN1YiBpc194Z292X29yX21hbmFnZXIKICAgIGFzc2VydCAvLyBVbmF1dGhvcml6ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weToxOTQKICAgIC8vIHNlbGYud2luZG93X3RzLnZhbHVlID0gd2luZG93X3RzLmFzX3VpbnQ2NCgpCiAgICBidG9pCiAgICBieXRlY18zIC8vIDB4Nzc2OTZlNjQ2Zjc3NWY3NDczCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjE3NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMudm90ZXIuY29udHJhY3QuVm90ZXIudm90ZV9yZXByZXNlbnRhdGl2ZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZvdGVfcmVwcmVzZW50YXRpdmU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6MTk4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwbiAyCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjM3NwogICAgLy8gcmV0dXJuIFR4bi5zZW5kZXIgPT0gR2xvYmFsLmNyZWF0b3JfYWRkcmVzcwogICAgdHhuIFNlbmRlcgogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjIyMAogICAgLy8gYXNzZXJ0IHNlbGYuaXNfY3JlYXRvcigpLCBlcnIuTk9UX0NSRUFUT1IKICAgIGFzc2VydCAvLyBTZW5kZXIgaXMgbm90IGFwcCBjcmVhdG9yCiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6MjIxCiAgICAvLyBhc3NlcnQgc2VsZi5pc192YWxpZF9wcm9wb3NhbChwcm9wb3NhbF9pZCksIGVyci5JTlZBTElEX1BST1BPU0FMCiAgICBjYWxsc3ViIGlzX3ZhbGlkX3Byb3Bvc2FsCiAgICBhc3NlcnQgLy8gUHJvcG9zYWwgaXMgbm90IHBhcnQgb2YgeEdvdiBSZWdpc3RyeQogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjIyMwogICAgLy8gYXNzZXJ0IHNlbGYudm90ZXNfbGVmdC52YWx1ZSA+IDAsIGVyci5OT19WT1RFU19MRUZUCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAweDc2NmY3NDY1NzM1ZjZjNjU2Njc0CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudm90ZXNfbGVmdCBleGlzdHMKICAgIGR1cAogICAgYXNzZXJ0IC8vIE5vIHBhaWQgdm90ZXMgbGVmdCB0byBjYXN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6MjI0CiAgICAvLyBzZWxmLnZvdGVzX2xlZnQudmFsdWUgLT0gMQogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGJ5dGVjXzIgLy8gMHg3NjZmNzQ2NTczNWY2YzY1NjY3NAogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weToyMjYtMjI3CiAgICAvLyAjIENoZWNrIGlmIGFsbG93ZWQgdG8gdm90ZSBhY2NvcmRpbmcgdG8gcmVwcmVzZW50YXRpdmUKICAgIC8vIGlmIHNlbGYud2luZG93X3RzLnZhbHVlOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gMHg3NzY5NmU2NDZmNzc1Zjc0NzMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi53aW5kb3dfdHMgZXhpc3RzCiAgICBieiB2b3RlX3JlcHJlc2VudGF0aXZlX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjIyOQogICAgLy8gcHJvcG9zYWxfaWQuYXNfdWludDY0KCkKICAgIGR1cAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL3V0aWxzLnB5OjIyLTI1CiAgICAvLyB2b3RlX29wZW5fdHMsIGV4aXN0cyA9IG9wLkFwcEdsb2JhbC5nZXRfZXhfdWludDY0KAogICAgLy8gICAgIHByb3Bvc2FsX2lkLAogICAgLy8gICAgIHByb3BfY2ZnLkdTX0tFWV9WT1RFX09QRU5fVFMsCiAgICAvLyApCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC91dGlscy5weToyNAogICAgLy8gcHJvcF9jZmcuR1NfS0VZX1ZPVEVfT1BFTl9UUywKICAgIHB1c2hieXRlcyAweDc2NmY3NDY1NWY2ZjcwNjU2ZTY5NmU2NzVmNzQ2OTZkNjU3Mzc0NjE2ZDcwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvdXRpbHMucHk6MjItMjUKICAgIC8vIHZvdGVfb3Blbl90cywgZXhpc3RzID0gb3AuQXBwR2xvYmFsLmdldF9leF91aW50NjQoCiAgICAvLyAgICAgcHJvcG9zYWxfaWQsCiAgICAvLyAgICAgcHJvcF9jZmcuR1NfS0VZX1ZPVEVfT1BFTl9UUywKICAgIC8vICkKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBwb3AKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC91dGlscy5weToyOQogICAgLy8gcHJvcF9jZmcuR1NfS0VZX1ZPVElOR19EVVJBVElPTiwKICAgIHB1c2hieXRlcyAweDc2NmY3NDY5NmU2NzVmNjQ3NTcyNjE3NDY5NmY2ZQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL3V0aWxzLnB5OjI3LTMwCiAgICAvLyB2b3RpbmdfZHVyYXRpb24sIGV4aXN0cyA9IG9wLkFwcEdsb2JhbC5nZXRfZXhfdWludDY0KAogICAgLy8gICAgIHByb3Bvc2FsX2lkLAogICAgLy8gICAgIHByb3BfY2ZnLkdTX0tFWV9WT1RJTkdfRFVSQVRJT04sCiAgICAvLyApCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvdXRpbHMucHk6MzIKICAgIC8vIHJldHVybiB2b3RlX29wZW5fdHMgKyB2b3RpbmdfZHVyYXRpb24KICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weToyMzIKICAgIC8vIEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wID4gdm90ZV9jbG9zZV90cyAtIHNlbGYud2luZG93X3RzLnZhbHVlCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAweDc3Njk2ZTY0NmY3NzVmNzQ3MwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLndpbmRvd190cyBleGlzdHMKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgLQogICAgPgogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjIzMS0yMzMKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgPiB2b3RlX2Nsb3NlX3RzIC0gc2VsZi53aW5kb3dfdHMudmFsdWUKICAgIC8vICksIGVyci5UT09fU09PTl9UT19WT1RFCiAgICBhc3NlcnQgLy8gVG9vIHNvb24gdG8gdm90ZQoKdm90ZV9yZXByZXNlbnRhdGl2ZV9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6MjM1LTIzNgogICAgLy8gIyBHZXQgdm90ZSBmcm9tIHJlcHJlc2VudGF0aXZlCiAgICAvLyBjcmVhdG9yLCBleGlzdHMgPSBvcC5BcHBQYXJhbXNHZXQuYXBwX2NyZWF0b3Ioc2VsZi5yZXByZXNlbnRhdGl2ZV9hcHAudmFsdWUpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNSAvLyAweDcyNjU3MDcyNjU3MzY1NmU3NDYxNzQ2OTc2NjU1ZjYxNzA3MAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnJlcHJlc2VudGF0aXZlX2FwcCBleGlzdHMKICAgIGR1cAogICAgYXBwX3BhcmFtc19nZXQgQXBwQ3JlYXRvcgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6MjM3CiAgICAvLyBhc3NlcnQgZXhpc3RzLCBlcnIuUkVQUkVTRU5UQVRJVkVfTk9ORVhJU1RFTlQKICAgIGFzc2VydCAvLyBSZXByZXNlbnRhdGl2ZSBpcyBub25leGlzdGVudAogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjIzOS0yNDMKICAgIC8vIFt2b3RlLCBpc192YWxpZF0sIHR4biA9IGFyYzQuYWJpX2NhbGwoCiAgICAvLyAgICAgcmVwcmVzZW50YXRpdmVfY29udHJhY3QuUmVwcmVzZW50YXRpdmUuZ2V0X3ZvdGUsCiAgICAvLyAgICAgcHJvcG9zYWxfaWQsCiAgICAvLyAgICAgYXBwX2lkPXNlbGYucmVwcmVzZW50YXRpdmVfYXBwLnZhbHVlLAogICAgLy8gKQogICAgaXR4bl9iZWdpbgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoYnl0ZXMgMHg2ZWE4MWViMSAvLyBtZXRob2QgImdldF92b3RlKHVpbnQ2NCkoKHVpbnQ2NCx1aW50NjQpLGJvb2wpIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGR1cG4gMgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDE3IC8vIDE3CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnR1cGxlPHNtYXJ0X2NvbnRyYWN0cy5jb21tb24uYWJpX3R5cGVzLlZvdGUsYXJjNC5ib29sPgogICAgZGlnIDEKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlYyA3IC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gbG9nIHZhbHVlIGlzIG5vdCB0aGUgcmVzdWx0IG9mIGFuIEFCSSByZXR1cm4KICAgIHN3YXAKICAgIGV4dHJhY3QgNCAxNgogICAgc3dhcAogICAgcHVzaGludCAxMjggLy8gMTI4CiAgICBnZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weToyNDQKICAgIC8vIGFzc2VydCBpc192YWxpZCwgZXJyLlZPVEVfSU5WQUxJRAogICAgYXNzZXJ0IC8vIFJlcHJlc2VudGF0aXZlIHZvdGUgaXMgaW52YWxpZAogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjI0Ni0yNTEKICAgIC8vICMgR2V0IHZvdGVyJ3MgYm94CiAgICAvLyBbdm90ZXMsIGV4aXN0c10sIHR4biA9IGFyYzQuYWJpX2NhbGwoCiAgICAvLyAgICAgSVByb3Bvc2FsLmdldF92b3Rlcl9ib3gsCiAgICAvLyAgICAgYXJjNC5BZGRyZXNzKHNlbGYueGdvdl9hZGRyZXNzLnZhbHVlKSwKICAgIC8vICAgICBhcHBfaWQ9cHJvcG9zYWxfaWQuYXNfdWludDY0KCksCiAgICAvLyApCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6MjQ5CiAgICAvLyBhcmM0LkFkZHJlc3Moc2VsZi54Z292X2FkZHJlc3MudmFsdWUpLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gMHg3ODY3NmY3NjVmNjE2NDY0NzI2NTczNzMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi54Z292X2FkZHJlc3MgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6MjUwCiAgICAvLyBhcHBfaWQ9cHJvcG9zYWxfaWQuYXNfdWludDY0KCksCiAgICBkaWcgMgogICAgYnRvaQogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6MjQ2LTI1MQogICAgLy8gIyBHZXQgdm90ZXIncyBib3gKICAgIC8vIFt2b3RlcywgZXhpc3RzXSwgdHhuID0gYXJjNC5hYmlfY2FsbCgKICAgIC8vICAgICBJUHJvcG9zYWwuZ2V0X3ZvdGVyX2JveCwKICAgIC8vICAgICBhcmM0LkFkZHJlc3Moc2VsZi54Z292X2FkZHJlc3MudmFsdWUpLAogICAgLy8gICAgIGFwcF9pZD1wcm9wb3NhbF9pZC5hc191aW50NjQoKSwKICAgIC8vICkKICAgIHB1c2hieXRlcyAweDI0NjE1ZjkwIC8vIG1ldGhvZCAiZ2V0X3ZvdGVyX2JveChhZGRyZXNzKSh1aW50NjQsYm9vbCkiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZHVwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgOSAvLyA5CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnR1cGxlPGFyYzQudWludDY0LGFyYzQuYm9vbD4KICAgIGRpZyAxCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWMgNyAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIGFwcGxpY2F0aW9uIGxvZyB2YWx1ZSBpcyBub3QgdGhlIHJlc3VsdCBvZiBhbiBBQkkgcmV0dXJuCiAgICBwdXNoaW50IDY0IC8vIDY0CiAgICBnZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weToyNTIKICAgIC8vIGFzc2VydCBleGlzdHMsIGVyci5OT19WT1RFUwogICAgYXNzZXJ0IC8vIHhHb3YgZG9lcyBub3QgaGF2ZSBhbnkgdm90ZXMKICAgIHB1c2hpbnQgNCAvLyA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6MjU0LTI1NQogICAgLy8gIyBDYWxjdWxhdGUgdm90ZXMKICAgIC8vIGFwcHJvdmFscyA9ICh2b3Rlcy5hc191aW50NjQoKSAqIHZvdGUuYXBwcm92YWwuYXNfdWludDY0KCkpIC8vIGNvbnN0LlBQTQogICAgZXh0cmFjdF91aW50NjQKICAgIGRpZyAyCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIGRpZyAxCiAgICAqCiAgICBpbnRjIDQgLy8gMTAwMDAwMAogICAgLwogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjI1NgogICAgLy8gcmVqZWN0aW9ucyA9ICh2b3Rlcy5hc191aW50NjQoKSAqIHZvdGUucmVqZWN0aW9uLmFzX3VpbnQ2NCgpKSAvLyBjb25zdC5QUE0KICAgIHVuY292ZXIgMwogICAgaW50Y18yIC8vIDgKICAgIGV4dHJhY3RfdWludDY0CiAgICB1bmNvdmVyIDIKICAgICoKICAgIGludGMgNCAvLyAxMDAwMDAwCiAgICAvCiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6MjU4LTI2NgogICAgLy8gIyBWb3RlCiAgICAvLyBhcmM0LmFiaV9jYWxsKAogICAgLy8gICAgIElYR292UmVnaXN0cnkudm90ZV9wcm9wb3NhbCwKICAgIC8vICAgICBwcm9wb3NhbF9pZCwKICAgIC8vICAgICBhcmM0LkFkZHJlc3Moc2VsZi54Z292X2FkZHJlc3MudmFsdWUpLAogICAgLy8gICAgIGFwcHJvdmFscywKICAgIC8vICAgICByZWplY3Rpb25zLAogICAgLy8gICAgIGFwcF9pZD1zZWxmLmdldF94Z292X3JlZ2lzdHJ5X2lkKCksCiAgICAvLyApCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6MjYzCiAgICAvLyBhcHByb3ZhbHMsCiAgICBzd2FwCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6MjY0CiAgICAvLyByZWplY3Rpb25zLAogICAgc3dhcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjM4OQogICAgLy8gc2VsZi5yZWdpc3RyeV9hcHAudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAweDcyNjU2NzY5NzM3NDcyNzk1ZjYxNzA3MAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnJlZ2lzdHJ5X2FwcCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weTozOTAKICAgIC8vIHJlZ19jZmcuR1NfS0VZX1hHT1ZfUkVHSVNUUllfQVBQLAogICAgYnl0ZWMgNiAvLyAweDc4Njc2Zjc2NWY3MjY1Njc2OTczNzQ3Mjc5NWY2MTcwNzAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weTozODgtMzkxCiAgICAvLyB4Z292X3JlZ2lzdHJ5X2lkLCBleGlzdHMgPSBvcC5BcHBHbG9iYWwuZ2V0X2V4X3VpbnQ2NCgKICAgIC8vICAgICBzZWxmLnJlZ2lzdHJ5X2FwcC52YWx1ZSwKICAgIC8vICAgICByZWdfY2ZnLkdTX0tFWV9YR09WX1JFR0lTVFJZX0FQUCwKICAgIC8vICkKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBwb3AKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjI1OC0yNjYKICAgIC8vICMgVm90ZQogICAgLy8gYXJjNC5hYmlfY2FsbCgKICAgIC8vICAgICBJWEdvdlJlZ2lzdHJ5LnZvdGVfcHJvcG9zYWwsCiAgICAvLyAgICAgcHJvcG9zYWxfaWQsCiAgICAvLyAgICAgYXJjNC5BZGRyZXNzKHNlbGYueGdvdl9hZGRyZXNzLnZhbHVlKSwKICAgIC8vICAgICBhcHByb3ZhbHMsCiAgICAvLyAgICAgcmVqZWN0aW9ucywKICAgIC8vICAgICBhcHBfaWQ9c2VsZi5nZXRfeGdvdl9yZWdpc3RyeV9pZCgpLAogICAgLy8gKQogICAgYnl0ZWMgOCAvLyBtZXRob2QgInZvdGVfcHJvcG9zYWwodWludDY0LGFkZHJlc3MsdWludDY0LHVpbnQ2NCl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHVuY292ZXIgMwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHVuY292ZXIgMgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHN3YXAKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weToxOTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnZvdGVyLmNvbnRyYWN0LlZvdGVyLnZvdGVfZGlyZWN0W3JvdXRpbmddKCkgLT4gdm9pZDoKdm90ZV9kaXJlY3Q6CiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6MjcwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgMTYgLy8gMTYKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHNtYXJ0X2NvbnRyYWN0cy5jb21tb24uYWJpX3R5cGVzLlZvdGVSYXcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weToyODgKICAgIC8vIGFzc2VydCBzZWxmLmlzX3hnb3Zfb3JfbWFuYWdlcigpLCBlcnIuVU5BVVRIT1JJWkVECiAgICBjYWxsc3ViIGlzX3hnb3Zfb3JfbWFuYWdlcgogICAgYXNzZXJ0IC8vIFVuYXV0aG9yaXplZAogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjI4OQogICAgLy8gYXNzZXJ0IHNlbGYuaXNfdmFsaWRfcHJvcG9zYWwocHJvcG9zYWxfaWQpLCBlcnIuSU5WQUxJRF9QUk9QT1NBTAogICAgZGlnIDEKICAgIGNhbGxzdWIgaXNfdmFsaWRfcHJvcG9zYWwKICAgIGFzc2VydCAvLyBQcm9wb3NhbCBpcyBub3QgcGFydCBvZiB4R292IFJlZ2lzdHJ5CiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6MjkxLTI5OQogICAgLy8gIyBWb3RlCiAgICAvLyBhcmM0LmFiaV9jYWxsKAogICAgLy8gICAgIElYR292UmVnaXN0cnkudm90ZV9wcm9wb3NhbCwKICAgIC8vICAgICBwcm9wb3NhbF9pZCwKICAgIC8vICAgICBhcmM0LkFkZHJlc3Moc2VsZi54Z292X2FkZHJlc3MudmFsdWUpLAogICAgLy8gICAgIHZvdGUuYXBwcm92YWxzLmFzX3VpbnQ2NCgpLAogICAgLy8gICAgIHZvdGUucmVqZWN0aW9ucy5hc191aW50NjQoKSwKICAgIC8vICAgICBhcHBfaWQ9c2VsZi5nZXRfeGdvdl9yZWdpc3RyeV9pZCgpLAogICAgLy8gKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjI5NQogICAgLy8gYXJjNC5BZGRyZXNzKHNlbGYueGdvdl9hZGRyZXNzLnZhbHVlKSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vIDB4Nzg2NzZmNzY1ZjYxNjQ2NDcyNjU3MzczCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYueGdvdl9hZGRyZXNzIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjI5NgogICAgLy8gdm90ZS5hcHByb3ZhbHMuYXNfdWludDY0KCksCiAgICBkaWcgMQogICAgZXh0cmFjdCAwIDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weToyOTcKICAgIC8vIHZvdGUucmVqZWN0aW9ucy5hc191aW50NjQoKSwKICAgIHVuY292ZXIgMgogICAgZXh0cmFjdCA4IDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weTozODkKICAgIC8vIHNlbGYucmVnaXN0cnlfYXBwLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gMHg3MjY1Njc2OTczNzQ3Mjc5NWY2MTcwNzAKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5yZWdpc3RyeV9hcHAgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6MzkwCiAgICAvLyByZWdfY2ZnLkdTX0tFWV9YR09WX1JFR0lTVFJZX0FQUCwKICAgIGJ5dGVjIDYgLy8gMHg3ODY3NmY3NjVmNzI2NTY3Njk3Mzc0NzI3OTVmNjE3MDcwCiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6Mzg4LTM5MQogICAgLy8geGdvdl9yZWdpc3RyeV9pZCwgZXhpc3RzID0gb3AuQXBwR2xvYmFsLmdldF9leF91aW50NjQoCiAgICAvLyAgICAgc2VsZi5yZWdpc3RyeV9hcHAudmFsdWUsCiAgICAvLyAgICAgcmVnX2NmZy5HU19LRVlfWEdPVl9SRUdJU1RSWV9BUFAsCiAgICAvLyApCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgcG9wCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weToyOTEtMjk5CiAgICAvLyAjIFZvdGUKICAgIC8vIGFyYzQuYWJpX2NhbGwoCiAgICAvLyAgICAgSVhHb3ZSZWdpc3RyeS52b3RlX3Byb3Bvc2FsLAogICAgLy8gICAgIHByb3Bvc2FsX2lkLAogICAgLy8gICAgIGFyYzQuQWRkcmVzcyhzZWxmLnhnb3ZfYWRkcmVzcy52YWx1ZSksCiAgICAvLyAgICAgdm90ZS5hcHByb3ZhbHMuYXNfdWludDY0KCksCiAgICAvLyAgICAgdm90ZS5yZWplY3Rpb25zLmFzX3VpbnQ2NCgpLAogICAgLy8gICAgIGFwcF9pZD1zZWxmLmdldF94Z292X3JlZ2lzdHJ5X2lkKCksCiAgICAvLyApCiAgICBieXRlYyA4IC8vIG1ldGhvZCAidm90ZV9wcm9wb3NhbCh1aW50NjQsYWRkcmVzcyx1aW50NjQsdWludDY0KXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgdW5jb3ZlciAzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgdW5jb3ZlciAyCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgc3dhcAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjI3MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMudm90ZXIuY29udHJhY3QuVm90ZXIueWllbGRfdm90aW5nX3JpZ2h0c1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnlpZWxkX3ZvdGluZ19yaWdodHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6MzAzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6MzE3CiAgICAvLyBhc3NlcnQgc2VsZi5pc194Z292X29yX21hbmFnZXIoKSBvciBzZWxmLmlzX2NyZWF0b3IoKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgY2FsbHN1YiBpc194Z292X29yX21hbmFnZXIKICAgIGJueiB5aWVsZF92b3RpbmdfcmlnaHRzX2Jvb2xfdHJ1ZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6Mzc3CiAgICAvLyByZXR1cm4gVHhuLnNlbmRlciA9PSBHbG9iYWwuY3JlYXRvcl9hZGRyZXNzCiAgICB0eG4gU2VuZGVyCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6MzE3CiAgICAvLyBhc3NlcnQgc2VsZi5pc194Z292X29yX21hbmFnZXIoKSBvciBzZWxmLmlzX2NyZWF0b3IoKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgYnogeWllbGRfdm90aW5nX3JpZ2h0c19ib29sX2ZhbHNlQDQKCnlpZWxkX3ZvdGluZ19yaWdodHNfYm9vbF90cnVlQDM6CiAgICBpbnRjXzEgLy8gMQoKeWllbGRfdm90aW5nX3JpZ2h0c19ib29sX21lcmdlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6MzE3CiAgICAvLyBhc3NlcnQgc2VsZi5pc194Z292X29yX21hbmFnZXIoKSBvciBzZWxmLmlzX2NyZWF0b3IoKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgYXNzZXJ0IC8vIFVuYXV0aG9yaXplZAogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjMxOS0zMjQKICAgIC8vIGFyYzQuYWJpX2NhbGwoCiAgICAvLyAgICAgSVhHb3ZSZWdpc3RyeS5zZXRfdm90aW5nX2FjY291bnQsCiAgICAvLyAgICAgYXJjNC5BZGRyZXNzKHNlbGYueGdvdl9hZGRyZXNzLnZhbHVlKSwKICAgIC8vICAgICB2b3RpbmdfYWRkcmVzcywKICAgIC8vICAgICBhcHBfaWQ9c2VsZi5nZXRfeGdvdl9yZWdpc3RyeV9pZCgpLAogICAgLy8gKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjMyMQogICAgLy8gYXJjNC5BZGRyZXNzKHNlbGYueGdvdl9hZGRyZXNzLnZhbHVlKSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vIDB4Nzg2NzZmNzY1ZjYxNjQ2NDcyNjU3MzczCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYueGdvdl9hZGRyZXNzIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjM4OQogICAgLy8gc2VsZi5yZWdpc3RyeV9hcHAudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAweDcyNjU2NzY5NzM3NDcyNzk1ZjYxNzA3MAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnJlZ2lzdHJ5X2FwcCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weTozOTAKICAgIC8vIHJlZ19jZmcuR1NfS0VZX1hHT1ZfUkVHSVNUUllfQVBQLAogICAgYnl0ZWMgNiAvLyAweDc4Njc2Zjc2NWY3MjY1Njc2OTczNzQ3Mjc5NWY2MTcwNzAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weTozODgtMzkxCiAgICAvLyB4Z292X3JlZ2lzdHJ5X2lkLCBleGlzdHMgPSBvcC5BcHBHbG9iYWwuZ2V0X2V4X3VpbnQ2NCgKICAgIC8vICAgICBzZWxmLnJlZ2lzdHJ5X2FwcC52YWx1ZSwKICAgIC8vICAgICByZWdfY2ZnLkdTX0tFWV9YR09WX1JFR0lTVFJZX0FQUCwKICAgIC8vICkKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBwb3AKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjMxOS0zMjQKICAgIC8vIGFyYzQuYWJpX2NhbGwoCiAgICAvLyAgICAgSVhHb3ZSZWdpc3RyeS5zZXRfdm90aW5nX2FjY291bnQsCiAgICAvLyAgICAgYXJjNC5BZGRyZXNzKHNlbGYueGdvdl9hZGRyZXNzLnZhbHVlKSwKICAgIC8vICAgICB2b3RpbmdfYWRkcmVzcywKICAgIC8vICAgICBhcHBfaWQ9c2VsZi5nZXRfeGdvdl9yZWdpc3RyeV9pZCgpLAogICAgLy8gKQogICAgcHVzaGJ5dGVzIDB4MGRhMjc4ODUgLy8gbWV0aG9kICJzZXRfdm90aW5nX2FjY291bnQoYWRkcmVzcyxhZGRyZXNzKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGR1cAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6MzAzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKeWllbGRfdm90aW5nX3JpZ2h0c19ib29sX2ZhbHNlQDQ6CiAgICBpbnRjXzAgLy8gMAogICAgYiB5aWVsZF92b3RpbmdfcmlnaHRzX2Jvb2xfbWVyZ2VANQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy52b3Rlci5jb250cmFjdC5Wb3Rlci5hZGRfdm90ZXNbcm91dGluZ10oKSAtPiB2b2lkOgphZGRfdm90ZXM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6MzI4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjM3NwogICAgLy8gcmV0dXJuIFR4bi5zZW5kZXIgPT0gR2xvYmFsLmNyZWF0b3JfYWRkcmVzcwogICAgdHhuIFNlbmRlcgogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjM0MwogICAgLy8gYXNzZXJ0IHNlbGYuaXNfY3JlYXRvcigpLCBlcnIuTk9UX0NSRUFUT1IKICAgIGFzc2VydCAvLyBTZW5kZXIgaXMgbm90IGFwcCBjcmVhdG9yCiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6MzQ1CiAgICAvLyBzZWxmLnZvdGVzX2xlZnQudmFsdWUgKz0gYWRkX3ZvdGVzLmFzX3VpbnQ2NCgpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAweDc2NmY3NDY1NzM1ZjZjNjU2Njc0CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudm90ZXNfbGVmdCBleGlzdHMKICAgIHN3YXAKICAgIGJ0b2kKICAgICsKICAgIGJ5dGVjXzIgLy8gMHg3NjZmNzQ2NTczNWY2YzY1NjY3NAogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weTozMjgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnZvdGVyLmNvbnRyYWN0LlZvdGVyLmRlbGV0ZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmRlbGV0ZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weTozNzcKICAgIC8vIHJldHVybiBUeG4uc2VuZGVyID09IEdsb2JhbC5jcmVhdG9yX2FkZHJlc3MKICAgIHR4biBTZW5kZXIKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weTozNTgKICAgIC8vIGFzc2VydCBzZWxmLmlzX2NyZWF0b3IoKSwgZXJyLk5PVF9DUkVBVE9SCiAgICBhc3NlcnQgLy8gU2VuZGVyIGlzIG5vdCBhcHAgY3JlYXRvcgogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjM2MC0zNjQKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIC8vICAgICByZWNlaXZlcj1HbG9iYWwuY3JlYXRvcl9hZGRyZXNzLAogICAgLy8gICAgIGFtb3VudD1VSW50NjQoMCksCiAgICAvLyAgICAgY2xvc2VfcmVtYWluZGVyX3RvPUdsb2JhbC5jcmVhdG9yX2FkZHJlc3MsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6MzYxCiAgICAvLyByZWNlaXZlcj1HbG9iYWwuY3JlYXRvcl9hZGRyZXNzLAogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6MzYzCiAgICAvLyBjbG9zZV9yZW1haW5kZXJfdG89R2xvYmFsLmNyZWF0b3JfYWRkcmVzcywKICAgIGR1cAogICAgaXR4bl9maWVsZCBDbG9zZVJlbWFpbmRlclRvCiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6MzYyCiAgICAvLyBhbW91bnQ9VUludDY0KDApLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6MzYwCiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICBpbnRjXzEgLy8gcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weTozNjAtMzY0CiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgcmVjZWl2ZXI9R2xvYmFsLmNyZWF0b3JfYWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ9VUludDY0KDApLAogICAgLy8gICAgIGNsb3NlX3JlbWFpbmRlcl90bz1HbG9iYWwuY3JlYXRvcl9hZGRyZXNzLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weTozNDkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChhbGxvd19hY3Rpb25zPSgiRGVsZXRlQXBwbGljYXRpb24iLCkpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnZvdGVyLmNvbnRyYWN0LlZvdGVyLmlzX3hnb3Zfb3JfbWFuYWdlcigpIC0+IHVpbnQ2NDoKaXNfeGdvdl9vcl9tYW5hZ2VyOgogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjM4MgogICAgLy8gVHhuLnNlbmRlciA9PSBzZWxmLnhnb3ZfYWRkcmVzcy52YWx1ZQogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gMHg3ODY3NmY3NjVmNjE2NDY0NzI2NTczNzMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi54Z292X2FkZHJlc3MgZXhpc3RzCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjM4Mi0zODMKICAgIC8vIFR4bi5zZW5kZXIgPT0gc2VsZi54Z292X2FkZHJlc3MudmFsdWUKICAgIC8vIG9yIFR4bi5zZW5kZXIgPT0gc2VsZi5tYW5hZ2VyX2FkZHJlc3MudmFsdWUKICAgIGJueiBpc194Z292X29yX21hbmFnZXJfYm9vbF90cnVlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weTozODMKICAgIC8vIG9yIFR4bi5zZW5kZXIgPT0gc2VsZi5tYW5hZ2VyX2FkZHJlc3MudmFsdWUKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA0IC8vIDB4NmQ2MTZlNjE2NzY1NzI1ZjYxNjQ2NDcyNjU3MzczCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubWFuYWdlcl9hZGRyZXNzIGV4aXN0cwogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weTozODItMzgzCiAgICAvLyBUeG4uc2VuZGVyID09IHNlbGYueGdvdl9hZGRyZXNzLnZhbHVlCiAgICAvLyBvciBUeG4uc2VuZGVyID09IHNlbGYubWFuYWdlcl9hZGRyZXNzLnZhbHVlCiAgICBieiBpc194Z292X29yX21hbmFnZXJfYm9vbF9mYWxzZUAzCgppc194Z292X29yX21hbmFnZXJfYm9vbF90cnVlQDI6CiAgICBpbnRjXzEgLy8gMQogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjM4MS0zODQKICAgIC8vIHJldHVybiAoCiAgICAvLyAgICAgVHhuLnNlbmRlciA9PSBzZWxmLnhnb3ZfYWRkcmVzcy52YWx1ZQogICAgLy8gICAgIG9yIFR4bi5zZW5kZXIgPT0gc2VsZi5tYW5hZ2VyX2FkZHJlc3MudmFsdWUKICAgIC8vICkKICAgIHJldHN1YgoKaXNfeGdvdl9vcl9tYW5hZ2VyX2Jvb2xfZmFsc2VAMzoKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6MzgxLTM4NAogICAgLy8gcmV0dXJuICgKICAgIC8vICAgICBUeG4uc2VuZGVyID09IHNlbGYueGdvdl9hZGRyZXNzLnZhbHVlCiAgICAvLyAgICAgb3IgVHhuLnNlbmRlciA9PSBzZWxmLm1hbmFnZXJfYWRkcmVzcy52YWx1ZQogICAgLy8gKQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLnZvdGVyLmNvbnRyYWN0LlZvdGVyLmlzX3ZhbGlkX3Byb3Bvc2FsKHByb3Bvc2FsX2lkOiBieXRlcykgLT4gdWludDY0Ogppc192YWxpZF9wcm9wb3NhbDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weTozOTQtMzk1CiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIGlzX3ZhbGlkX3Byb3Bvc2FsKHNlbGYsIHByb3Bvc2FsX2lkOiBhcmM0LlVJbnQ2NCkgLT4gYm9vbDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3ZvdGVyL2NvbnRyYWN0LnB5OjM5NgogICAgLy8gcHJvcG9zYWxfY3JlYXRvciA9IEFwcGxpY2F0aW9uKHByb3Bvc2FsX2lkLmFzX3VpbnQ2NCgpKS5jcmVhdG9yCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ0b2kKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcENyZWF0b3IKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy92b3Rlci9jb250cmFjdC5weTozODkKICAgIC8vIHNlbGYucmVnaXN0cnlfYXBwLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gMHg3MjY1Njc2OTczNzQ3Mjc5NWY2MTcwNzAKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5yZWdpc3RyeV9hcHAgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6MzkwCiAgICAvLyByZWdfY2ZnLkdTX0tFWV9YR09WX1JFR0lTVFJZX0FQUCwKICAgIGJ5dGVjIDYgLy8gMHg3ODY3NmY3NjVmNzI2NTY3Njk3Mzc0NzI3OTVmNjE3MDcwCiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6Mzg4LTM5MQogICAgLy8geGdvdl9yZWdpc3RyeV9pZCwgZXhpc3RzID0gb3AuQXBwR2xvYmFsLmdldF9leF91aW50NjQoCiAgICAvLyAgICAgc2VsZi5yZWdpc3RyeV9hcHAudmFsdWUsCiAgICAvLyAgICAgcmVnX2NmZy5HU19LRVlfWEdPVl9SRUdJU1RSWV9BUFAsCiAgICAvLyApCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6Mzk4CiAgICAvLyB4Z292X3JlZ2lzdHJ5X2FkZHJlc3MgPSBBcHBsaWNhdGlvbih4Z292X3JlZ2lzdHJ5X2lkKS5hZGRyZXNzCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvdm90ZXIvY29udHJhY3QucHk6Mzk5CiAgICAvLyByZXR1cm4gcHJvcG9zYWxfY3JlYXRvciA9PSB4Z292X3JlZ2lzdHJ5X2FkZHJlc3MKICAgID09CiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" }, "byteCode": { "approval": "CiAFAAEIIMCEPSYJDHhnb3ZfYWRkcmVzcwxyZWdpc3RyeV9hcHAKdm90ZXNfbGVmdAl3aW5kb3dfdHMPbWFuYWdlcl9hZGRyZXNzEnJlcHJlc2VudGF0aXZlX2FwcBF4Z292X3JlZ2lzdHJ5X2FwcAQVH3x1BBWPjdYxGEAAKjE1JRJEMTQlEkQxNyQSRDE2JBJEKDIDZykiZycFImcrImcqImcnBDIDZ4ICBKDoGHIEJDeNPDYaAI4CAGMAVzEZFEQxGEEAQIIIBG6TIwYElmfW3gRB67AWBMs470QEdX4p/AQU407qBLpg2FQEKSPz0TYaAI4IAEsAawB9AJgAqgHFAhQCVgCABExcYbo2GgCOAQAZADEZgQUSMRgQREICVTEZgQQSMRgQREIAHDINRCkyDWcoMgNnJwQyA2cnBSJnKyJnKiJnI0MxADIJEkQjQzYaAUkVJRJENhoCSRUlEkQxADIJEkQoTwJnJwRMZyNDNhoBSRUlEkSIAhREJwRMZyNDNhoBSRUkEkSIAgJEFycFSwFncgdEMgkSRCNDNhoBSRUkEkSIAedEFytMZyNDNhoBRwIVJBJEMQAyCRJEiAHnRCIqZURJRCMJKkxnIitlREEAPkkXSYAWdm90ZV9vcGVuaW5nX3RpbWVzdGFtcGVITIAPdm90aW5nX2R1cmF0aW9uZUgIMgciK2VETwJMCQ1EIicFZURJcgdFAUSxshiABG6oHrGyGkcCshqBBrIQIrIBs7Q+SVcEAEkVgRESREsBVwAEJwcSRExXBBBMgYABU0SxIihlREsCF7IYgAQkYV+QshpJshqBBrIQIrIBs7Q+SVcEAEkVgQkSREsBVwAEJwcSRIFAU0SBBFtLAiJbSwELIQQKTwMkW08CCyEECrFMFkwWIillRCcGZUiyGCcIshpPA7IaTwKyGkyyGrIagQayECKyAbMjQzYaAUkVJBJENhoCSRWBEBJEiACxREsBiADERLEiKGVESwFXAAhPAlcICCIpZUQnBmVIshgnCLIaTwOyGk8CshpMshqyGoEGshAisgGzI0M2GgFJFSUSRIgAa0AACDEAMgkSQQAoI0SxIihlRCIpZUQnBmVIshiABA2ieIWyGrIaSbIagQayECKyAbMjQyJC/9U2GgFJFSQSRDEAMgkSRCIqZURMFwgqTGcjQzEAMgkSRLEyCUmyCSKyCLIHI7IQIrIBsyNDMQAiKGVEEkAACzEAIicEZUQSQQACI4kiiYoBAYv/F3IHRCIpZUQnBmVIcghEEok=", "clear": "CoEBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 4, "patch": 0 } }, "events": [], "templateVariables": {} }