{ "name": "Proposal", "structs": { "ProposalTypedGlobalState": [ { "name": "proposer", "type": "address" }, { "name": "registry_app_id", "type": "uint64" }, { "name": "title", "type": "string" }, { "name": "open_ts", "type": "uint64" }, { "name": "submission_ts", "type": "uint64" }, { "name": "vote_open_ts", "type": "uint64" }, { "name": "status", "type": "uint64" }, { "name": "finalized", "type": "bool" }, { "name": "funding_category", "type": "uint64" }, { "name": "focus", "type": "uint8" }, { "name": "funding_type", "type": "uint64" }, { "name": "requested_amount", "type": "uint64" }, { "name": "locked_amount", "type": "uint64" }, { "name": "committee_id", "type": "byte[32]" }, { "name": "committee_members", "type": "uint64" }, { "name": "committee_votes", "type": "uint64" }, { "name": "voted_members", "type": "uint64" }, { "name": "boycotted_members", "type": "uint64" }, { "name": "approvals", "type": "uint64" }, { "name": "rejections", "type": "uint64" }, { "name": "nulls", "type": "uint64" } ], "VotingState": [ { "name": "quorum_voters", "type": "uint32" }, { "name": "weighted_quorum_votes", "type": "uint32" }, { "name": "total_voters", "type": "uint32" }, { "name": "total_boycott", "type": "uint32" }, { "name": "total_approvals", "type": "uint32" }, { "name": "total_rejections", "type": "uint32" }, { "name": "total_nulls", "type": "uint32" }, { "name": "quorum_reached", "type": "bool" }, { "name": "weighted_quorum_reached", "type": "bool" }, { "name": "majority_approved", "type": "bool" }, { "name": "plebiscite", "type": "bool" } ] }, "methods": [ { "name": "create", "args": [ { "type": "address", "name": "proposer", "desc": "Address of the proposer" } ], "returns": { "type": "void" }, "actions": { "create": [ "NoOp" ], "call": [] }, "readonly": false, "desc": "Create a new proposal. MUST BE CALLED BY THE REGISTRY CONTRACT.", "events": [], "recommendations": {} }, { "name": "open", "args": [ { "type": "pay", "name": "payment", "desc": "Commitment payment transaction from the proposer to the contract" }, { "type": "string", "name": "title", "desc": "Proposal title, max TITLE_MAX_BYTES bytes" }, { "type": "uint64", "name": "funding_type", "desc": "Funding type (Proactive / Retroactive)" }, { "type": "uint64", "name": "requested_amount", "desc": "Requested amount in microAlgos" }, { "type": "uint8", "name": "focus", "desc": "Proposal focus area" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Open the first draft of the proposal.", "events": [ { "name": "Opened", "args": [ { "type": "uint8", "name": "funding_type" }, { "type": "uint64", "name": "requested_amount" }, { "type": "uint8", "name": "category" }, { "type": "uint64", "name": "round" } ], "desc": "The Proposal has been opened" } ], "recommendations": {} }, { "name": "upload_metadata", "args": [ { "type": "byte[]", "name": "payload", "desc": "Metadata payload" }, { "type": "bool", "name": "is_first_in_group", "desc": "True if this is the first upload call in a group transaction" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Upload the proposal metadata.", "events": [], "recommendations": {} }, { "name": "drop", "args": [], "returns": { "type": "string" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Drop the proposal. MUST BE CALLED BY THE REGISTRY CONTRACT.", "events": [], "recommendations": {} }, { "name": "submit", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "submit the proposal.", "events": [], "recommendations": {} }, { "name": "assign_voters", "args": [ { "type": "(address,uint64)[]", "name": "voters", "desc": "List of voter addresses with their voting power" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Assign multiple voters to the proposal.", "events": [ { "name": "Submitted", "args": [ { "type": "uint64", "name": "vote_opening" }, { "type": "uint64", "name": "vote_closing" }, { "type": "uint32", "name": "quorum_voters" }, { "type": "uint32", "name": "weighted_quorum_votes" }, { "type": "uint64", "name": "round" } ], "desc": "The Proposal has been submitted for voting" } ], "recommendations": {} }, { "name": "vote", "args": [ { "type": "address", "name": "voter", "desc": "Voter address" }, { "type": "uint64", "name": "approvals", "desc": "Number of approvals" }, { "type": "uint64", "name": "rejections", "desc": "Number of rejections" } ], "returns": { "type": "string" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Vote on the proposal. MUST BE CALLED BY THE REGISTRY CONTRACT.", "events": [ { "name": "Vote", "args": [ { "type": "address", "name": "xgov" }, { "type": "uint32", "name": "approvals" }, { "type": "uint32", "name": "rejections" }, { "type": "uint32", "name": "nulls" }, { "type": "bool", "name": "boycotted" }, { "type": "uint32", "name": "total_voters" }, { "type": "uint32", "name": "total_boycott" }, { "type": "uint32", "name": "total_approvals" }, { "type": "uint32", "name": "total_rejections" }, { "type": "uint32", "name": "total_nulls" }, { "type": "uint64", "name": "round" } ], "desc": "A vote has been cast on the Proposal" } ], "recommendations": {} }, { "name": "scrutiny", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Scrutinize the proposal.", "events": [ { "name": "Scrutiny", "args": [ { "type": "bool", "name": "approved" }, { "type": "bool", "name": "plebiscite" }, { "type": "uint64", "name": "round" } ], "desc": "The vote has been scrutinized" } ], "recommendations": {} }, { "name": "unassign_absentees", "args": [ { "type": "address[]", "name": "absentees", "desc": "List of absentees to be unassigned" } ], "returns": { "type": "string" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Unassign absentees from the scrutinized proposal.", "events": [], "recommendations": {} }, { "name": "review", "args": [ { "type": "bool", "name": "block", "desc": "Whether to block the proposal or not" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Review the proposal.", "events": [ { "name": "Review", "args": [ { "type": "bool", "name": "veto" }, { "type": "uint64", "name": "round" } ], "desc": "The xGov Council has reviewed the Proposal" } ], "recommendations": {} }, { "name": "fund", "args": [], "returns": { "type": "string" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Fund the proposal. MUST BE CALLED BY THE REGISTRY CONTRACT.", "events": [], "recommendations": {} }, { "name": "unassign_voters", "args": [ { "type": "address[]", "name": "voters", "desc": "List of voters to be unassigned" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Unassign voters from the submitted proposal. This method is an admin method\nto rollback and fix wrong committee assignments.", "events": [], "recommendations": {} }, { "name": "finalize", "args": [], "returns": { "type": "string" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Finalize the proposal. MUST BE CALLED BY THE REGISTRY CONTRACT.", "events": [], "recommendations": {} }, { "name": "delete", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "DeleteApplication" ] }, "readonly": false, "desc": "Delete the proposal.", "events": [], "recommendations": {} }, { "name": "get_state", "args": [], "returns": { "type": "(address,uint64,string,uint64,uint64,uint64,uint64,bool,uint64,uint8,uint64,uint64,uint64,byte[32],uint64,uint64,uint64,uint64,uint64,uint64,uint64)", "struct": "ProposalTypedGlobalState", "desc": "The proposal state" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "desc": "Get the proposal state.", "events": [], "recommendations": {} }, { "name": "get_voter_box", "args": [ { "type": "address", "name": "voter_address", "desc": "The address of the Voter" } ], "returns": { "type": "(uint64,bool)", "desc": "The voter's votes bool: `True` if voter's box exists, else `False`" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "desc": "Returns the Voter box for the given address.", "events": [], "recommendations": {} }, { "name": "get_voting_state", "args": [], "returns": { "type": "(uint32,uint32,uint32,uint32,uint32,uint32,uint32,bool,bool,bool,bool)", "struct": "VotingState", "desc": "quorum_voters (UInt32): The number of voters to reach the quorum weighted_quorum_votes (UInt32): The number of voters to reach the weighted quorum total_voters (UInt32): The total number of voters so far total_boycott (UInt32): The total number of boycotters so far total_approvals (UInt32): The total number of approval votes so far total_rejections (UInt32): The total number of rejection votes so far total_nulls (UInt32): The total number of null votes so far quorum_reached (Bool): Whether the voters quorum has been reached or not weighted_quorum_reached (Bool): Whether the votes weighted quorum has been reached or not majority_approved (Bool): Whether the majority approved the proposal or not plebiscite (Bool): Whether all the Committee members voted or not" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "desc": "Returns the voting state of the Proposal.", "events": [], "recommendations": {} }, { "name": "op_up", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "desc": "Proposal Contract", "networks": {}, "state": { "schema": { "global": { "ints": 27, "bytes": 3 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "proposer": { "keyType": "AVMBytes", "valueType": "address", "key": "cHJvcG9zZXI=" }, "registry_app_id": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "cmVnaXN0cnlfYXBwX2lk" }, "committee_id": { "keyType": "AVMBytes", "valueType": "byte[32]", "key": "Y29tbWl0dGVlX2lk" }, "committee_members": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "Y29tbWl0dGVlX21lbWJlcnM=" }, "committee_votes": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "Y29tbWl0dGVlX3ZvdGVz" }, "open_proposal_fee": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "b3Blbl9wcm9wb3NhbF9mZWU=" }, "daemon_ops_funding_bps": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "ZGFlbW9uX29wZXJhdGlvbl9mdW5kaW5nX2Jwcw==" }, "open_ts": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "b3Blbl90aW1lc3RhbXA=" }, "submission_ts": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "c3VibWlzc2lvbl90aW1lc3RhbXA=" }, "vote_open_ts": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "dm90ZV9vcGVuaW5nX3RpbWVzdGFtcA==" }, "status": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "c3RhdHVz" }, "finalized": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "ZmluYWxpemVk" }, "metadata_uploaded": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "bWV0YWRhdGFfdXBsb2FkZWQ=" }, "title": { "keyType": "AVMBytes", "valueType": "AVMString", "key": "dGl0bGU=" }, "funding_category": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "ZnVuZGluZ19jYXRlZ29yeQ==" }, "focus": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "Zm9jdXM=" }, "funding_type": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "ZnVuZGluZ190eXBl" }, "requested_amount": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "cmVxdWVzdGVkX2Ftb3VudA==" }, "locked_amount": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "bG9ja2VkX2Ftb3VudA==" }, "discussion_duration": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "ZGlzY3Vzc2lvbl9kdXJhdGlvbg==" }, "voting_duration": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "dm90aW5nX2R1cmF0aW9u" }, "quorum_threshold": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "cXVvcnVtX3RocmVzaG9sZA==" }, "weighted_quorum_threshold": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "d2VpZ2h0ZWRfcXVvcnVtX3RocmVzaG9sZA==" }, "assigned_members": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "YXNzaWduZWRfbWVtYmVycw==" }, "assigned_votes": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "YXNzaWduZWRfdm90ZXM=" }, "voted_members": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "dm90ZWRfbWVtYmVycw==" }, "boycotted_members": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "Ym95Y290dGVkX21lbWJlcnM=" }, "approvals": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "YXBwcm92YWxz" }, "rejections": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "cmVqZWN0aW9ucw==" }, "nulls": { "keyType": "AVMBytes", "valueType": "AVMUint64", "key": "bnVsbHM=" } }, "local": {}, "box": { "metadata": { "keyType": "AVMString", "valueType": "AVMBytes", "key": "TQ==" } } }, "maps": { "global": {}, "local": {}, "box": { "voters": { "keyType": "address", "valueType": "uint64", "prefix": "Vg==" } } } }, "bareActions": { "create": [], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 1985, 2436, 3029, 4042 ], "errorMessage": "Address length is 32 bytes" }, { "pc": [ 1835 ], "errorMessage": "Empty payload" }, { "pc": [ 2128, 4190 ], "errorMessage": "Invalid Voting Power" }, { "pc": [ 1186 ], "errorMessage": "Locked amount is incorrect" }, { "pc": [ 1297, 1303, 3931, 3944 ], "errorMessage": "Missing Config" }, { "pc": [ 1975 ], "errorMessage": "Missing Metadata" }, { "pc": [ 1056, 1826, 1951, 2757 ], "errorMessage": "Registry's non-admin methods are paused" }, { "pc": [ 1123 ], "errorMessage": "Requested amount is less than the minimum requested amount" }, { "pc": [ 1127 ], "errorMessage": "Requested amount is more than the maximum requested amount" }, { "pc": [ 3046 ], "errorMessage": "There are voters assigned to this proposal" }, { "pc": [ 1969 ], "errorMessage": "Too early" }, { "pc": [ 937, 1060, 1882, 2039, 2305, 2880, 3031, 3104, 3177, 3282, 3471, 3999 ], "errorMessage": "Unauthorized" }, { "pc": [ 2125 ], "errorMessage": "Voter Already Assigned" }, { "pc": [ 4187 ], "errorMessage": "Voter not found" }, { "pc": [ 2779 ], "errorMessage": "Voting Ongoing" }, { "pc": [ 2186 ], "errorMessage": "Voting Power Mismatch" }, { "pc": [ 4103 ], "errorMessage": "Wrong App ID" }, { "pc": [ 1104 ], "errorMessage": "Wrong Funding Type" }, { "pc": [ 624 ], "errorMessage": "Wrong Global Bytes allocation" }, { "pc": [ 630 ], "errorMessage": "Wrong Global UInts allocation" }, { "pc": [ 634 ], "errorMessage": "Wrong Local Bytes allocation" }, { "pc": [ 638 ], "errorMessage": "Wrong Local UInts allocation" }, { "pc": [ 4113 ], "errorMessage": "Wrong Method Call" }, { "pc": [ 1076, 2047, 2765, 3039, 3185, 3476, 4017 ], "errorMessage": "Wrong Proposal Status or finalized" }, { "pc": [ 1179 ], "errorMessage": "Wrong Receiver" }, { "pc": [ 1172 ], "errorMessage": "Wrong Sender" }, { "pc": [ 1084, 1087 ], "errorMessage": "Wrong Title length" }, { "pc": [ 3447, 3452, 3493 ], "errorMessage": "account funded" }, { "pc": [ 3061, 3442, 3488 ], "errorMessage": "application exists" }, { "pc": [ 2502, 2617, 3600, 3822, 4145, 4167 ], "errorMessage": "check self.approvals exists" }, { "pc": [ 2137, 2165, 3044, 3364, 4195 ], "errorMessage": "check self.assigned_members exists" }, { "pc": [ 2148, 2179, 4206 ], "errorMessage": "check self.assigned_votes exists" }, { "pc": [ 2399, 2488, 3595, 3808, 4129 ], "errorMessage": "check self.boycotted_members exists" }, { "pc": [ 3575 ], "errorMessage": "check self.committee_id exists" }, { "pc": [ 1457, 2170, 3580, 3993 ], "errorMessage": "check self.committee_members exists" }, { "pc": [ 1552, 2184, 3585 ], "errorMessage": "check self.committee_votes exists" }, { "pc": [ 1995 ], "errorMessage": "check self.daemon_ops_funding_bps exists" }, { "pc": [ 1967 ], "errorMessage": "check self.discussion_duration exists" }, { "pc": [ 1071, 1895, 2904, 3286, 3475, 3535, 4012 ], "errorMessage": "check self.finalized exists" }, { "pc": [ 3545 ], "errorMessage": "check self.focus exists" }, { "pc": [ 1295, 1352, 1593, 3540 ], "errorMessage": "check self.funding_category exists" }, { "pc": [ 1573, 3560 ], "errorMessage": "check self.funding_type exists" }, { "pc": [ 3570, 4081 ], "errorMessage": "check self.locked_amount exists" }, { "pc": [ 1861 ], "errorMessage": "check self.metadata exists" }, { "pc": [ 1974 ], "errorMessage": "check self.metadata_uploaded exists" }, { "pc": [ 2530, 2637, 3610, 3850, 4156 ], "errorMessage": "check self.nulls exists" }, { "pc": [ 1990 ], "errorMessage": "check self.open_proposal_fee exists" }, { "pc": [ 1961, 3517 ], "errorMessage": "check self.open_ts exists" }, { "pc": [ 1170, 1926, 2843, 3094, 3431, 3502, 4028 ], "errorMessage": "check self.proposer exists" }, { "pc": [ 2210, 3766, 4119 ], "errorMessage": "check self.quorum_threshold exists" }, { "pc": [ 3058, 3439, 3485, 3507, 3927, 3940, 4051 ], "errorMessage": "check self.registry_app_id exists" }, { "pc": [ 2516, 2627, 3605, 3836, 4150, 4172 ], "errorMessage": "check self.rejections exists" }, { "pc": [ 1302, 1443, 1538, 1588, 3565 ], "errorMessage": "check self.requested_amount exists" }, { "pc": [ 1064, 1886, 2043, 2309, 2761, 2884, 2894, 3035, 3108, 3181, 3293, 3300, 3309, 3319, 3329, 3422, 3531, 4003 ], "errorMessage": "check self.status exists" }, { "pc": [ 3522 ], "errorMessage": "check self.submission_ts exists" }, { "pc": [ 3512 ], "errorMessage": "check self.title exists" }, { "pc": [ 3527, 3952 ], "errorMessage": "check self.vote_open_ts exists" }, { "pc": [ 2378, 2474, 3590, 3794, 3988, 4124 ], "errorMessage": "check self.voted_members exists" }, { "pc": [ 2369, 2659, 2973, 3257, 3739 ], "errorMessage": "check self.voters entry exists" }, { "pc": [ 2202, 3958 ], "errorMessage": "check self.voting_duration exists" }, { "pc": [ 2224, 3780, 4140 ], "errorMessage": "check self.weighted_quorum_threshold exists" }, { "pc": [ 2107, 2950, 3237 ], "errorMessage": "index access is out of bounds" }, { "pc": [ 1008, 1797, 2022, 2864, 3161 ], "errorMessage": "invalid array length header" }, { "pc": [ 1817, 3002 ], "errorMessage": "invalid number of bytes for arc4.bool" }, { "pc": [ 2876, 3173 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 1016, 1805 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 2035 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 934, 2278, 3723 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 1028, 1038, 2287, 2298 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ 1049 ], "errorMessage": "invalid number of bytes for arc4.uint8" }, { "pc": [ 1580, 1600, 2216, 2230, 2444, 2455, 2466, 2480, 2494, 2508, 2522, 2536, 3552, 3772, 3786, 3800, 3814, 3828, 3842, 3856 ], "errorMessage": "overflow" }, { "pc": [ 1002 ], "errorMessage": "transaction type is pay" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgMzIgMTAgMTAwMDAKICAgIGJ5dGVjYmxvY2sgMHg3Mzc0NjE3NDc1NzMgMHggMHg2NjY5NmU2MTZjNjk3YTY1NjQgMHg3MDcyNmY3MDZmNzM2NTcyIDB4NzI2NTY3Njk3Mzc0NzI3OTVmNjE3MDcwNWY2OTY0IDB4NjE3MzczNjk2NzZlNjU2NDVmNmQ2NTZkNjI2NTcyNzMgMHg3NjZmNzQ2NTY0NWY2ZDY1NmQ2MjY1NzI3MyAweDYxNzA3MDcyNmY3NjYxNmM3MyAweDcyNjU2YTY1NjM3NDY5NmY2ZTczICJNIiAweDE1MWY3Yzc1IDB4NjM2ZjZkNmQ2OTc0NzQ2NTY1NWY2ZDY1NmQ2MjY1NzI3MyAweDcyNjU3MTc1NjU3Mzc0NjU2NDVmNjE2ZDZmNzU2ZTc0IDB4NjI2Zjc5NjM2Zjc0NzQ2NTY0NWY2ZDY1NmQ2MjY1NzI3MyAweDZlNzU2YzZjNzMgMHg2MzZmNmQ2ZDY5NzQ3NDY1NjU1Zjc2NmY3NDY1NzMgMHg2Njc1NmU2NDY5NmU2NzVmNjM2MTc0NjU2NzZmNzI3OSAweDYxNzM3MzY5Njc2ZTY1NjQ1Zjc2NmY3NDY1NzMgIlYiIDB4MDAgMHg2YzZmNjM2YjY1NjQ1ZjYxNmQ2Zjc1NmU3NCAweDcxNzU2ZjcyNzU2ZDVmNzQ2ODcyNjU3MzY4NmY2YzY0IDB4Nzc2NTY5Njc2ODc0NjU2NDVmNzE3NTZmNzI3NTZkNWY3NDY4NzI2NTczNjg2ZjZjNjQgIkVSUjpXcm9uZyBQcm9wb3NhbCBTdGF0dXMgb3IgZmluYWxpemVkIiAweDYzNmY2ZDZkNjk3NDc0NjU2NTVmNjk2NCAweDZmNzA2NTZlNWY3MDcyNmY3MDZmNzM2MTZjNWY2NjY1NjUgMHg2NDYxNjU2ZDZmNmU1ZjZmNzA2NTcyNjE3NDY5NmY2ZTVmNjY3NTZlNjQ2OTZlNjc1ZjYyNzA3MyAweDZmNzA2NTZlNWY3NDY5NmQ2NTczNzQ2MTZkNzAgMHg3NjZmNzQ2NTVmNmY3MDY1NmU2OTZlNjc1Zjc0Njk2ZDY1NzM3NDYxNmQ3MCAweDY2NzU2ZTY0Njk2ZTY3NWY3NDc5NzA2NSAweDc2NmY3NDY5NmU2NzVmNjQ3NTcyNjE3NDY5NmY2ZSAweDcwNjE3NTczNjU2NDVmNzI2NTY3Njk3Mzc0NzI3OSAweDczNzU2MjZkNjk3MzczNjk2ZjZlNWY3NDY5NmQ2NTczNzQ2MTZkNzAgMHg2ZDY1NzQ2MTY0NjE3NDYxNWY3NTcwNmM2ZjYxNjQ2NTY0IDB4NzQ2OTc0NmM2NSAweDY2NmY2Mzc1NzMgMHg2NDY5NzM2Mzc1NzM3MzY5NmY2ZTVmNjQ3NTcyNjE3NDY5NmY2ZSAweDZkNjk2ZTVmNzI2NTcxNzU2NTczNzQ2NTY0NWY2MTZkNmY3NTZlNzQgMHg2ZDYxNzg1ZjcyNjU3MTc1NjU3Mzc0NjU2NDVmNjE2ZDZmNzU2ZTc0NWY2YzYxNzI2NzY1IDB4Nzg2NzZmNzY1ZjY0NjE2NTZkNmY2ZSAiRVJSOlZvdGVyIG5vdCBmb3VuZCIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo0OAogICAgLy8gVHhuLmdsb2JhbF9udW1fYnl0ZV9zbGljZSA9PSBwcm9wX2NmZy5HTE9CQUxfQllURVMKICAgIHR4biBHbG9iYWxOdW1CeXRlU2xpY2UKICAgIHB1c2hpbnQgMwogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo0Ni00OQogICAgLy8gIyBQcmVjb25kaXRpb25zCiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIFR4bi5nbG9iYWxfbnVtX2J5dGVfc2xpY2UgPT0gcHJvcF9jZmcuR0xPQkFMX0JZVEVTCiAgICAvLyApLCBlcnIuV1JPTkdfR0xPQkFMX0JZVEVTCiAgICBhc3NlcnQgLy8gV3JvbmcgR2xvYmFsIEJ5dGVzIGFsbG9jYXRpb24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo1MAogICAgLy8gYXNzZXJ0IFR4bi5nbG9iYWxfbnVtX3VpbnQgPT0gcHJvcF9jZmcuR0xPQkFMX1VJTlRTLCBlcnIuV1JPTkdfR0xPQkFMX1VJTlRTCiAgICB0eG4gR2xvYmFsTnVtVWludAogICAgcHVzaGludCAyNwogICAgPT0KICAgIGFzc2VydCAvLyBXcm9uZyBHbG9iYWwgVUludHMgYWxsb2NhdGlvbgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjUxCiAgICAvLyBhc3NlcnQgVHhuLmxvY2FsX251bV9ieXRlX3NsaWNlID09IHByb3BfY2ZnLkxPQ0FMX0JZVEVTLCBlcnIuV1JPTkdfTE9DQUxfQllURVMKICAgIHR4biBMb2NhbE51bUJ5dGVTbGljZQogICAgIQogICAgYXNzZXJ0IC8vIFdyb25nIExvY2FsIEJ5dGVzIGFsbG9jYXRpb24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo1MgogICAgLy8gYXNzZXJ0IFR4bi5sb2NhbF9udW1fdWludCA9PSBwcm9wX2NmZy5MT0NBTF9VSU5UUywgZXJyLldST05HX0xPQ0FMX1VJTlRTCiAgICB0eG4gTG9jYWxOdW1VaW50CiAgICAhCiAgICBhc3NlcnQgLy8gV3JvbmcgTG9jYWwgVUludHMgYWxsb2NhdGlvbgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjU3CiAgICAvLyBrZXk9cHJvcF9jZmcuR1NfS0VZX1BST1BPU0VSLAogICAgYnl0ZWNfMyAvLyAweDcwNzI2ZjcwNmY3MzY1NzIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo1NgogICAgLy8gQWNjb3VudCgpLAogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NTQtNTgKICAgIC8vICMgQmFzZSBTdGF0ZQogICAgLy8gc2VsZi5wcm9wb3NlciA9IEdsb2JhbFN0YXRlKAogICAgLy8gICAgIEFjY291bnQoKSwKICAgIC8vICAgICBrZXk9cHJvcF9jZmcuR1NfS0VZX1BST1BPU0VSLAogICAgLy8gKQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo2MQogICAgLy8ga2V5PXByb3BfY2ZnLkdTX0tFWV9SRUdJU1RSWV9BUFBfSUQsCiAgICBieXRlYyA0IC8vIDB4NzI2NTY3Njk3Mzc0NzI3OTVmNjE3MDcwNWY2OTY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NjAKICAgIC8vIFVJbnQ2NCgpLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo1OS02MgogICAgLy8gc2VsZi5yZWdpc3RyeV9hcHBfaWQgPSBHbG9iYWxTdGF0ZSgKICAgIC8vICAgICBVSW50NjQoKSwKICAgIC8vICAgICBrZXk9cHJvcF9jZmcuR1NfS0VZX1JFR0lTVFJZX0FQUF9JRCwKICAgIC8vICkKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NjcKICAgIC8vIGtleT1yZWdfY2ZnLkdTX0tFWV9DT01NSVRURUVfSUQsCiAgICBieXRlYyAyNCAvLyAweDYzNmY2ZDZkNjk3NDc0NjU2NTVmNjk2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjY2CiAgICAvLyB0eXAuQnl0ZXMzMi5mcm9tX2J5dGVzKGIiIiksCiAgICBieXRlY18xIC8vIDB4CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NjQtNjgKICAgIC8vICMgRnJvbSB4R292IFJlZ2lzdHJ5CiAgICAvLyBzZWxmLmNvbW1pdHRlZV9pZCA9IEdsb2JhbFN0YXRlKAogICAgLy8gICAgIHR5cC5CeXRlczMyLmZyb21fYnl0ZXMoYiIiKSwKICAgIC8vICAgICBrZXk9cmVnX2NmZy5HU19LRVlfQ09NTUlUVEVFX0lELAogICAgLy8gKQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo3MQogICAgLy8ga2V5PXJlZ19jZmcuR1NfS0VZX0NPTU1JVFRFRV9NRU1CRVJTLAogICAgYnl0ZWMgMTEgLy8gMHg2MzZmNmQ2ZDY5NzQ3NDY1NjU1ZjZkNjU2ZDYyNjU3MjczCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NzAKICAgIC8vIFVJbnQ2NCgpLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo2OS03MgogICAgLy8gc2VsZi5jb21taXR0ZWVfbWVtYmVycyA9IEdsb2JhbFN0YXRlKAogICAgLy8gICAgIFVJbnQ2NCgpLAogICAgLy8gICAgIGtleT1yZWdfY2ZnLkdTX0tFWV9DT01NSVRURUVfTUVNQkVSUywKICAgIC8vICkKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NzUKICAgIC8vIGtleT1yZWdfY2ZnLkdTX0tFWV9DT01NSVRURUVfVk9URVMsCiAgICBieXRlYyAxNSAvLyAweDYzNmY2ZDZkNjk3NDc0NjU2NTVmNzY2Zjc0NjU3MwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5Ojc0CiAgICAvLyBVSW50NjQoKSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NzMtNzYKICAgIC8vIHNlbGYuY29tbWl0dGVlX3ZvdGVzID0gR2xvYmFsU3RhdGUoCiAgICAvLyAgICAgVUludDY0KCksCiAgICAvLyAgICAga2V5PXJlZ19jZmcuR1NfS0VZX0NPTU1JVFRFRV9WT1RFUywKICAgIC8vICkKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NzkKICAgIC8vIGtleT1yZWdfY2ZnLkdTX0tFWV9PUEVOX1BST1BPU0FMX0ZFRSwKICAgIGJ5dGVjIDI1IC8vIDB4NmY3MDY1NmU1ZjcwNzI2ZjcwNmY3MzYxNmM1ZjY2NjU2NQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5Ojc4CiAgICAvLyBVSW50NjQoKSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NzctODAKICAgIC8vIHNlbGYub3Blbl9wcm9wb3NhbF9mZWUgPSBHbG9iYWxTdGF0ZSgKICAgIC8vICAgICBVSW50NjQoKSwKICAgIC8vICAgICBrZXk9cmVnX2NmZy5HU19LRVlfT1BFTl9QUk9QT1NBTF9GRUUsCiAgICAvLyApCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjgzCiAgICAvLyBrZXk9cmVnX2NmZy5HU19LRVlfREFFTU9OX09QU19GVU5ESU5HX0JQUywKICAgIGJ5dGVjIDI2IC8vIDB4NjQ2MTY1NmQ2ZjZlNWY2ZjcwNjU3MjYxNzQ2OTZmNmU1ZjY2NzU2ZTY0Njk2ZTY3NWY2MjcwNzMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo4MgogICAgLy8gVUludDY0KCksCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjgxLTg0CiAgICAvLyBzZWxmLmRhZW1vbl9vcHNfZnVuZGluZ19icHMgPSBHbG9iYWxTdGF0ZSgKICAgIC8vICAgICBVSW50NjQoKSwKICAgIC8vICAgICBrZXk9cmVnX2NmZy5HU19LRVlfREFFTU9OX09QU19GVU5ESU5HX0JQUywKICAgIC8vICkKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6ODkKICAgIC8vIGtleT1wcm9wX2NmZy5HU19LRVlfT1BFTl9UUywKICAgIGJ5dGVjIDI3IC8vIDB4NmY3MDY1NmU1Zjc0Njk2ZDY1NzM3NDYxNmQ3MAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5Ojg4CiAgICAvLyBVSW50NjQoKSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6ODYtOTAKICAgIC8vICMgVGltZSBBbmNob3JzCiAgICAvLyBzZWxmLm9wZW5fdHMgPSBHbG9iYWxTdGF0ZSgKICAgIC8vICAgICBVSW50NjQoKSwKICAgIC8vICAgICBrZXk9cHJvcF9jZmcuR1NfS0VZX09QRU5fVFMsCiAgICAvLyApCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjkzCiAgICAvLyBrZXk9cHJvcF9jZmcuR1NfS0VZX1NVQk1JU1NJT05fVFMsCiAgICBieXRlYyAzMiAvLyAweDczNzU2MjZkNjk3MzczNjk2ZjZlNWY3NDY5NmQ2NTczNzQ2MTZkNzAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo5MgogICAgLy8gVUludDY0KCksCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjkxLTk0CiAgICAvLyBzZWxmLnN1Ym1pc3Npb25fdHMgPSBHbG9iYWxTdGF0ZSgKICAgIC8vICAgICBVSW50NjQoKSwKICAgIC8vICAgICBrZXk9cHJvcF9jZmcuR1NfS0VZX1NVQk1JU1NJT05fVFMsCiAgICAvLyApCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5Ojk3CiAgICAvLyBrZXk9cHJvcF9jZmcuR1NfS0VZX1ZPVEVfT1BFTl9UUywKICAgIGJ5dGVjIDI4IC8vIDB4NzY2Zjc0NjU1ZjZmNzA2NTZlNjk2ZTY3NWY3NDY5NmQ2NTczNzQ2MTZkNzAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo5NgogICAgLy8gVUludDY0KCksCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5Ojk1LTk4CiAgICAvLyBzZWxmLnZvdGVfb3Blbl90cyA9IEdsb2JhbFN0YXRlKAogICAgLy8gICAgIFVJbnQ2NCgpLAogICAgLy8gICAgIGtleT1wcm9wX2NmZy5HU19LRVlfVk9URV9PUEVOX1RTLAogICAgLy8gKQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxMDMKICAgIC8vIGtleT1wcm9wX2NmZy5HU19LRVlfU1RBVFVTLAogICAgYnl0ZWNfMCAvLyAweDczNzQ2MTc0NzU3MwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjEwMgogICAgLy8gVUludDY0KGVubS5TVEFUVVNfRU1QVFkpLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxMDAtMTA0CiAgICAvLyAjIFByb3Bvc2FsIFN0YXRlCiAgICAvLyBzZWxmLnN0YXR1cyA9IEdsb2JhbFN0YXRlKAogICAgLy8gICAgIFVJbnQ2NChlbm0uU1RBVFVTX0VNUFRZKSwKICAgIC8vICAgICBrZXk9cHJvcF9jZmcuR1NfS0VZX1NUQVRVUywKICAgIC8vICkKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTA3CiAgICAvLyBrZXk9cHJvcF9jZmcuR1NfS0VZX0ZJTkFMSVpFRCwKICAgIGJ5dGVjXzIgLy8gMHg2NjY5NmU2MTZjNjk3YTY1NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxMDYKICAgIC8vIEZhbHNlLCAgIyBub3FhOiBGQlQwMDMKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTA1LTEwOAogICAgLy8gc2VsZi5maW5hbGl6ZWQgPSBHbG9iYWxTdGF0ZSgKICAgIC8vICAgICBGYWxzZSwgICMgbm9xYTogRkJUMDAzCiAgICAvLyAgICAga2V5PXByb3BfY2ZnLkdTX0tFWV9GSU5BTElaRUQsCiAgICAvLyApCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjExMQogICAgLy8ga2V5PXByb3BfY2ZnLkdTX0tFWV9NRVRBREFUQV9VUExPQURFRCwKICAgIGJ5dGVjIDMzIC8vIDB4NmQ2NTc0NjE2NDYxNzQ2MTVmNzU3MDZjNmY2MTY0NjU2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjExMAogICAgLy8gRmFsc2UsICAjIG5vcWE6IEZCVDAwMwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxMDktMTEyCiAgICAvLyBzZWxmLm1ldGFkYXRhX3VwbG9hZGVkID0gR2xvYmFsU3RhdGUoCiAgICAvLyAgICAgRmFsc2UsICAjIG5vcWE6IEZCVDAwMwogICAgLy8gICAgIGtleT1wcm9wX2NmZy5HU19LRVlfTUVUQURBVEFfVVBMT0FERUQsCiAgICAvLyApCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjExNwogICAgLy8ga2V5PXByb3BfY2ZnLkdTX0tFWV9USVRMRSwKICAgIGJ5dGVjIDM0IC8vIDB4NzQ2OTc0NmM2NQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjExNgogICAgLy8gU3RyaW5nKCksCiAgICBieXRlY18xIC8vICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTE0LTExOAogICAgLy8gIyBQcm9wb3NhbCBDb25maWd1cmF0aW9uCiAgICAvLyBzZWxmLnRpdGxlID0gR2xvYmFsU3RhdGUoCiAgICAvLyAgICAgU3RyaW5nKCksCiAgICAvLyAgICAga2V5PXByb3BfY2ZnLkdTX0tFWV9USVRMRSwKICAgIC8vICkKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTIxCiAgICAvLyBrZXk9cHJvcF9jZmcuR1NfS0VZX0ZVTkRJTkdfQ0FURUdPUlksCiAgICBieXRlYyAxNiAvLyAweDY2NzU2ZTY0Njk2ZTY3NWY2MzYxNzQ2NTY3NmY3Mjc5CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTIwCiAgICAvLyBVSW50NjQoZW5tLkZVTkRJTkdfQ0FURUdPUllfTlVMTCksCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjExOS0xMjIKICAgIC8vIHNlbGYuZnVuZGluZ19jYXRlZ29yeSA9IEdsb2JhbFN0YXRlKAogICAgLy8gICAgIFVJbnQ2NChlbm0uRlVORElOR19DQVRFR09SWV9OVUxMKSwKICAgIC8vICAgICBrZXk9cHJvcF9jZmcuR1NfS0VZX0ZVTkRJTkdfQ0FURUdPUlksCiAgICAvLyApCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjEyNQogICAgLy8ga2V5PXByb3BfY2ZnLkdTX0tFWV9GT0NVUywKICAgIGJ5dGVjIDM1IC8vIDB4NjY2ZjYzNzU3MwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjEyNAogICAgLy8gVUludDY0KGVubS5GT0NVU19OVUxMKSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTIzLTEyNgogICAgLy8gc2VsZi5mb2N1cyA9IEdsb2JhbFN0YXRlKAogICAgLy8gICAgIFVJbnQ2NChlbm0uRk9DVVNfTlVMTCksCiAgICAvLyAgICAga2V5PXByb3BfY2ZnLkdTX0tFWV9GT0NVUywKICAgIC8vICkKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTI5CiAgICAvLyBrZXk9cHJvcF9jZmcuR1NfS0VZX0ZVTkRJTkdfVFlQRSwKICAgIGJ5dGVjIDI5IC8vIDB4NjY3NTZlNjQ2OTZlNjc1Zjc0Nzk3MDY1CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTI4CiAgICAvLyBVSW50NjQoZW5tLkZVTkRJTkdfTlVMTCksCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjEyNy0xMzAKICAgIC8vIHNlbGYuZnVuZGluZ190eXBlID0gR2xvYmFsU3RhdGUoCiAgICAvLyAgICAgVUludDY0KGVubS5GVU5ESU5HX05VTEwpLAogICAgLy8gICAgIGtleT1wcm9wX2NmZy5HU19LRVlfRlVORElOR19UWVBFLAogICAgLy8gKQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxMzMKICAgIC8vIGtleT1wcm9wX2NmZy5HU19LRVlfUkVRVUVTVEVEX0FNT1VOVCwKICAgIGJ5dGVjIDEyIC8vIDB4NzI2NTcxNzU2NTczNzQ2NTY0NWY2MTZkNmY3NTZlNzQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxMzIKICAgIC8vIFVJbnQ2NCgpLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxMzEtMTM0CiAgICAvLyBzZWxmLnJlcXVlc3RlZF9hbW91bnQgPSBHbG9iYWxTdGF0ZSgKICAgIC8vICAgICBVSW50NjQoKSwKICAgIC8vICAgICBrZXk9cHJvcF9jZmcuR1NfS0VZX1JFUVVFU1RFRF9BTU9VTlQsCiAgICAvLyApCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjEzNwogICAgLy8ga2V5PXByb3BfY2ZnLkdTX0tFWV9MT0NLRURfQU1PVU5ULAogICAgYnl0ZWMgMjAgLy8gMHg2YzZmNjM2YjY1NjQ1ZjYxNmQ2Zjc1NmU3NAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjEzNgogICAgLy8gVUludDY0KCksCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjEzNS0xMzgKICAgIC8vIHNlbGYubG9ja2VkX2Ftb3VudCA9IEdsb2JhbFN0YXRlKAogICAgLy8gICAgIFVJbnQ2NCgpLAogICAgLy8gICAgIGtleT1wcm9wX2NmZy5HU19LRVlfTE9DS0VEX0FNT1VOVCwKICAgIC8vICkKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTQxCiAgICAvLyBrZXk9cHJvcF9jZmcuR1NfS0VZX0RJU0NVU1NJT05fRFVSQVRJT04sCiAgICBieXRlYyAzNiAvLyAweDY0Njk3MzYzNzU3MzczNjk2ZjZlNWY2NDc1NzI2MTc0Njk2ZjZlCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTQwCiAgICAvLyBVSW50NjQoKSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTM5LTE0MgogICAgLy8gc2VsZi5kaXNjdXNzaW9uX2R1cmF0aW9uID0gR2xvYmFsU3RhdGUoCiAgICAvLyAgICAgVUludDY0KCksCiAgICAvLyAgICAga2V5PXByb3BfY2ZnLkdTX0tFWV9ESVNDVVNTSU9OX0RVUkFUSU9OLAogICAgLy8gKQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxNDUKICAgIC8vIGtleT1wcm9wX2NmZy5HU19LRVlfVk9USU5HX0RVUkFUSU9OLAogICAgYnl0ZWMgMzAgLy8gMHg3NjZmNzQ2OTZlNjc1ZjY0NzU3MjYxNzQ2OTZmNmUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxNDQKICAgIC8vIFVJbnQ2NCgpLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxNDMtMTQ2CiAgICAvLyBzZWxmLnZvdGluZ19kdXJhdGlvbiA9IEdsb2JhbFN0YXRlKAogICAgLy8gICAgIFVJbnQ2NCgpLAogICAgLy8gICAgIGtleT1wcm9wX2NmZy5HU19LRVlfVk9USU5HX0RVUkFUSU9OLAogICAgLy8gKQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxNDkKICAgIC8vIGtleT1wcm9wX2NmZy5HU19LRVlfUVVPUlVNX1RIUkVTSE9MRCwKICAgIGJ5dGVjIDIxIC8vIDB4NzE3NTZmNzI3NTZkNWY3NDY4NzI2NTczNjg2ZjZjNjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxNDgKICAgIC8vIFVJbnQ2NCgpLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxNDctMTUwCiAgICAvLyBzZWxmLnF1b3J1bV90aHJlc2hvbGQgPSBHbG9iYWxTdGF0ZSgKICAgIC8vICAgICBVSW50NjQoKSwKICAgIC8vICAgICBrZXk9cHJvcF9jZmcuR1NfS0VZX1FVT1JVTV9USFJFU0hPTEQsCiAgICAvLyApCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjE1MwogICAgLy8ga2V5PXByb3BfY2ZnLkdTX0tFWV9XRUlHSFRFRF9RVU9SVU1fVEhSRVNIT0xELAogICAgYnl0ZWMgMjIgLy8gMHg3NzY1Njk2NzY4NzQ2NTY0NWY3MTc1NmY3Mjc1NmQ1Zjc0Njg3MjY1NzM2ODZmNmM2NAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjE1MgogICAgLy8gVUludDY0KCksCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjE1MS0xNTQKICAgIC8vIHNlbGYud2VpZ2h0ZWRfcXVvcnVtX3RocmVzaG9sZCA9IEdsb2JhbFN0YXRlKAogICAgLy8gICAgIFVJbnQ2NCgpLAogICAgLy8gICAgIGtleT1wcm9wX2NmZy5HU19LRVlfV0VJR0hURURfUVVPUlVNX1RIUkVTSE9MRCwKICAgIC8vICkKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTU5CiAgICAvLyBrZXk9cHJvcF9jZmcuR1NfS0VZX0FTU0lHTkVEX01FTUJFUlMsCiAgICBieXRlYyA1IC8vIDB4NjE3MzczNjk2NzZlNjU2NDVmNmQ2NTZkNjI2NTcyNzMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxNTgKICAgIC8vIFVJbnQ2NCgwKSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTU2LTE2MAogICAgLy8gIyBQcm9wb3NhbCBWb3RlCiAgICAvLyBzZWxmLmFzc2lnbmVkX21lbWJlcnMgPSBHbG9iYWxTdGF0ZSgKICAgIC8vICAgICBVSW50NjQoMCksCiAgICAvLyAgICAga2V5PXByb3BfY2ZnLkdTX0tFWV9BU1NJR05FRF9NRU1CRVJTLAogICAgLy8gKQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxNjMKICAgIC8vIGtleT1wcm9wX2NmZy5HU19LRVlfQVNTSUdORURfVk9URVMsCiAgICBieXRlYyAxNyAvLyAweDYxNzM3MzY5Njc2ZTY1NjQ1Zjc2NmY3NDY1NzMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxNjIKICAgIC8vIFVJbnQ2NCgwKSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTYxLTE2NAogICAgLy8gc2VsZi5hc3NpZ25lZF92b3RlcyA9IEdsb2JhbFN0YXRlKAogICAgLy8gICAgIFVJbnQ2NCgwKSwKICAgIC8vICAgICBrZXk9cHJvcF9jZmcuR1NfS0VZX0FTU0lHTkVEX1ZPVEVTLAogICAgLy8gKQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxNjcKICAgIC8vIGtleT1wcm9wX2NmZy5HU19LRVlfVk9URURfTUVNQkVSUywKICAgIGJ5dGVjIDYgLy8gMHg3NjZmNzQ2NTY0NWY2ZDY1NmQ2MjY1NzI3MwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjE2NgogICAgLy8gVUludDY0KCksCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjE2NS0xNjgKICAgIC8vIHNlbGYudm90ZWRfbWVtYmVycyA9IEdsb2JhbFN0YXRlKAogICAgLy8gICAgIFVJbnQ2NCgpLAogICAgLy8gICAgIGtleT1wcm9wX2NmZy5HU19LRVlfVk9URURfTUVNQkVSUywKICAgIC8vICkKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTcxCiAgICAvLyBrZXk9cHJvcF9jZmcuR1NfS0VZX0JPWUNPVFRFRF9NRU1CRVJTLAogICAgYnl0ZWMgMTMgLy8gMHg2MjZmNzk2MzZmNzQ3NDY1NjQ1ZjZkNjU2ZDYyNjU3MjczCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTcwCiAgICAvLyBVSW50NjQoKSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTY5LTE3MgogICAgLy8gc2VsZi5ib3ljb3R0ZWRfbWVtYmVycyA9IEdsb2JhbFN0YXRlKAogICAgLy8gICAgIFVJbnQ2NCgpLAogICAgLy8gICAgIGtleT1wcm9wX2NmZy5HU19LRVlfQk9ZQ09UVEVEX01FTUJFUlMsCiAgICAvLyApCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjE3NQogICAgLy8ga2V5PXByb3BfY2ZnLkdTX0tFWV9BUFBST1ZBTFMsCiAgICBieXRlYyA3IC8vIDB4NjE3MDcwNzI2Zjc2NjE2YzczCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTc0CiAgICAvLyBVSW50NjQoKSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTczLTE3NgogICAgLy8gc2VsZi5hcHByb3ZhbHMgPSBHbG9iYWxTdGF0ZSgKICAgIC8vICAgICBVSW50NjQoKSwKICAgIC8vICAgICBrZXk9cHJvcF9jZmcuR1NfS0VZX0FQUFJPVkFMUywKICAgIC8vICkKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTc5CiAgICAvLyBrZXk9cHJvcF9jZmcuR1NfS0VZX1JFSkVDVElPTlMsCiAgICBieXRlYyA4IC8vIDB4NzI2NTZhNjU2Mzc0Njk2ZjZlNzMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxNzgKICAgIC8vIFVJbnQ2NCgpLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxNzctMTgwCiAgICAvLyBzZWxmLnJlamVjdGlvbnMgPSBHbG9iYWxTdGF0ZSgKICAgIC8vICAgICBVSW50NjQoKSwKICAgIC8vICAgICBrZXk9cHJvcF9jZmcuR1NfS0VZX1JFSkVDVElPTlMsCiAgICAvLyApCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjE4MwogICAgLy8ga2V5PXByb3BfY2ZnLkdTX0tFWV9OVUxMUywKICAgIGJ5dGVjIDE0IC8vIDB4NmU3NTZjNmM3MwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjE4MgogICAgLy8gVUludDY0KCksCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjE4MS0xODQKICAgIC8vIHNlbGYubnVsbHMgPSBHbG9iYWxTdGF0ZSgKICAgIC8vICAgICBVSW50NjQoKSwKICAgIC8vICAgICBrZXk9cHJvcF9jZmcuR1NfS0VZX05VTExTLAogICAgLy8gKQogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjM0LTQyCiAgICAvLyBjbGFzcyBQcm9wb3NhbCgKICAgIC8vICAgICBQcm9wb3NhbEludGVyZmFjZSwKICAgIC8vICAgICBzdGF0ZV90b3RhbHM9U3RhdGVUb3RhbHMoCiAgICAvLyAgICAgICAgIGdsb2JhbF9ieXRlcz1wcm9wX2NmZy5HTE9CQUxfQllURVMsCiAgICAvLyAgICAgICAgIGdsb2JhbF91aW50cz1wcm9wX2NmZy5HTE9CQUxfVUlOVFMsCiAgICAvLyAgICAgICAgIGxvY2FsX2J5dGVzPXByb3BfY2ZnLkxPQ0FMX0JZVEVTLAogICAgLy8gICAgICAgICBsb2NhbF91aW50cz1wcm9wX2NmZy5MT0NBTF9VSU5UUywKICAgIC8vICAgICApLAogICAgLy8gKToKICAgIHB1c2hieXRlcyAweDI0Mzc4ZDNjIC8vIG1ldGhvZCAiZGVsZXRlKCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9kZWxldGVfcm91dGVANAoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MzQtNDIKICAgIC8vIGNsYXNzIFByb3Bvc2FsKAogICAgLy8gICAgIFByb3Bvc2FsSW50ZXJmYWNlLAogICAgLy8gICAgIHN0YXRlX3RvdGFscz1TdGF0ZVRvdGFscygKICAgIC8vICAgICAgICAgZ2xvYmFsX2J5dGVzPXByb3BfY2ZnLkdMT0JBTF9CWVRFUywKICAgIC8vICAgICAgICAgZ2xvYmFsX3VpbnRzPXByb3BfY2ZnLkdMT0JBTF9VSU5UUywKICAgIC8vICAgICAgICAgbG9jYWxfYnl0ZXM9cHJvcF9jZmcuTE9DQUxfQllURVMsCiAgICAvLyAgICAgICAgIGxvY2FsX3VpbnRzPXByb3BfY2ZnLkxPQ0FMX1VJTlRTLAogICAgLy8gICAgICksCiAgICAvLyApOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYnogbWFpbl9jcmVhdGVfTm9PcEAyNAogICAgcHVzaGJ5dGVzcyAweGVkYWViOWNhIDB4NzE0Mzk5NGYgMHg3MzcxMzIxYSAweDM0ZTYxM2NhIDB4MGQ5YWIwZDcgMHgxODQxYTBkMiAweDczNGRiZWNjIDB4NzZmZjRjNzAgMHgyMTJkOWYwNyAweDhhNWU0YzgwIDB4MmFjMTliMDUgMHg4MDIwNjliNCAweGI2NDllODc0IDB4MjQ2MTVmOTAgMHgzNjljNDJiYSAweGRiZDgzZGQ5IC8vIG1ldGhvZCAib3BlbihwYXksc3RyaW5nLHVpbnQ2NCx1aW50NjQsdWludDgpdm9pZCIsIG1ldGhvZCAidXBsb2FkX21ldGFkYXRhKGJ5dGVbXSxib29sKXZvaWQiLCBtZXRob2QgImRyb3AoKXN0cmluZyIsIG1ldGhvZCAic3VibWl0KCl2b2lkIiwgbWV0aG9kICJhc3NpZ25fdm90ZXJzKChhZGRyZXNzLHVpbnQ2NClbXSl2b2lkIiwgbWV0aG9kICJ2b3RlKGFkZHJlc3MsdWludDY0LHVpbnQ2NClzdHJpbmciLCBtZXRob2QgInNjcnV0aW55KCl2b2lkIiwgbWV0aG9kICJ1bmFzc2lnbl9hYnNlbnRlZXMoYWRkcmVzc1tdKXN0cmluZyIsIG1ldGhvZCAicmV2aWV3KGJvb2wpdm9pZCIsIG1ldGhvZCAiZnVuZCgpc3RyaW5nIiwgbWV0aG9kICJ1bmFzc2lnbl92b3RlcnMoYWRkcmVzc1tdKXZvaWQiLCBtZXRob2QgImZpbmFsaXplKClzdHJpbmciLCBtZXRob2QgImdldF9zdGF0ZSgpKGFkZHJlc3MsdWludDY0LHN0cmluZyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsYm9vbCx1aW50NjQsdWludDgsdWludDY0LHVpbnQ2NCx1aW50NjQsYnl0ZVszMl0sdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIsIG1ldGhvZCAiZ2V0X3ZvdGVyX2JveChhZGRyZXNzKSh1aW50NjQsYm9vbCkiLCBtZXRob2QgImdldF92b3Rpbmdfc3RhdGUoKSh1aW50MzIsdWludDMyLHVpbnQzMix1aW50MzIsdWludDMyLHVpbnQzMix1aW50MzIsYm9vbCxib29sLGJvb2wsYm9vbCkiLCBtZXRob2QgIm9wX3VwKCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggb3BlbiB1cGxvYWRfbWV0YWRhdGEgZHJvcCBzdWJtaXQgYXNzaWduX3ZvdGVycyB2b3RlIHNjcnV0aW55IHVuYXNzaWduX2Fic2VudGVlcyByZXZpZXcgZnVuZCB1bmFzc2lnbl92b3RlcnMgZmluYWxpemUgZ2V0X3N0YXRlIGdldF92b3Rlcl9ib3ggZ2V0X3ZvdGluZ19zdGF0ZSBtYWluX29wX3VwX3JvdXRlQDIyCiAgICBlcnIKCm1haW5fb3BfdXBfcm91dGVAMjI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTE5NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fY3JlYXRlX05vT3BAMjQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MzQtNDIKICAgIC8vIGNsYXNzIFByb3Bvc2FsKAogICAgLy8gICAgIFByb3Bvc2FsSW50ZXJmYWNlLAogICAgLy8gICAgIHN0YXRlX3RvdGFscz1TdGF0ZVRvdGFscygKICAgIC8vICAgICAgICAgZ2xvYmFsX2J5dGVzPXByb3BfY2ZnLkdMT0JBTF9CWVRFUywKICAgIC8vICAgICAgICAgZ2xvYmFsX3VpbnRzPXByb3BfY2ZnLkdMT0JBTF9VSU5UUywKICAgIC8vICAgICAgICAgbG9jYWxfYnl0ZXM9cHJvcF9jZmcuTE9DQUxfQllURVMsCiAgICAvLyAgICAgICAgIGxvY2FsX3VpbnRzPXByb3BfY2ZnLkxPQ0FMX1VJTlRTLAogICAgLy8gICAgICksCiAgICAvLyApOgogICAgcHVzaGJ5dGVzIDB4Y2M2OTRlYWEgLy8gbWV0aG9kICJjcmVhdGUoYWRkcmVzcyl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggY3JlYXRlCiAgICBlcnIKCm1haW5fZGVsZXRlX3JvdXRlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTA5MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGFsbG93X2FjdGlvbnM9KCJEZWxldGVBcHBsaWNhdGlvbiIsKSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIHB1c2hpbnQgNSAvLyBEZWxldGVBcHBsaWNhdGlvbgogICAgPT0KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAmJgogICAgYXNzZXJ0CiAgICBiIGRlbGV0ZQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5wcm9wb3NhbC5jb250cmFjdC5Qcm9wb3NhbC5jcmVhdGVbcm91dGluZ10oKSAtPiB2b2lkOgpjcmVhdGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NTc1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoY3JlYXRlPSJyZXF1aXJlIikKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjU4OAogICAgLy8gR2xvYmFsLmNhbGxlcl9hcHBsaWNhdGlvbl9pZCAhPSAwCiAgICBnbG9iYWwgQ2FsbGVyQXBwbGljYXRpb25JRAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjU4Ny01ODkKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgR2xvYmFsLmNhbGxlcl9hcHBsaWNhdGlvbl9pZCAhPSAwCiAgICAvLyApLCBlcnIuVU5BVVRIT1JJWkVEICAjIE9ubHkgY2FsbGFibGUgYnkgYW5vdGhlciBjb250cmFjdAogICAgYXNzZXJ0IC8vIFVuYXV0aG9yaXplZAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjU5MS01OTIKICAgIC8vICMgU2V0IFByb3Bvc2FsIEJhc2UgU3RhdGUKICAgIC8vIHNlbGYucHJvcG9zZXIudmFsdWUgPSBwcm9wb3NlcgogICAgYnl0ZWNfMyAvLyAweDcwNzI2ZjcwNmY3MzY1NzIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NTkzCiAgICAvLyBzZWxmLnJlZ2lzdHJ5X2FwcF9pZC52YWx1ZSA9IEdsb2JhbC5jYWxsZXJfYXBwbGljYXRpb25faWQKICAgIGJ5dGVjIDQgLy8gMHg3MjY1Njc2OTczNzQ3Mjc5NWY2MTcwNzA1ZjY5NjQKICAgIGdsb2JhbCBDYWxsZXJBcHBsaWNhdGlvbklECiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjU5NwogICAgLy8gc2VsZi5nZXRfYnl0ZXNfZnJvbV9yZWdpc3RyeV9jb25maWcoQnl0ZXMocmVnX2NmZy5HU19LRVlfQ09NTUlUVEVFX0lEKSkKICAgIGJ5dGVjIDI0IC8vIDB4NjM2ZjZkNmQ2OTc0NzQ2NTY1NWY2OTY0CiAgICBjYWxsc3ViIGdldF9ieXRlc19mcm9tX3JlZ2lzdHJ5X2NvbmZpZwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjU5NS01OTYKICAgIC8vICMgU2V0IHZhbHVlcyBmcm9tIHhHb3YgUmVnaXN0cnkKICAgIC8vIHNlbGYuY29tbWl0dGVlX2lkLnZhbHVlID0gdHlwLkJ5dGVzMzIuZnJvbV9ieXRlcygKICAgIGJ5dGVjIDI0IC8vIDB4NjM2ZjZkNmQ2OTc0NzQ2NTY1NWY2OTY0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NTk1LTU5OAogICAgLy8gIyBTZXQgdmFsdWVzIGZyb20geEdvdiBSZWdpc3RyeQogICAgLy8gc2VsZi5jb21taXR0ZWVfaWQudmFsdWUgPSB0eXAuQnl0ZXMzMi5mcm9tX2J5dGVzKAogICAgLy8gICAgIHNlbGYuZ2V0X2J5dGVzX2Zyb21fcmVnaXN0cnlfY29uZmlnKEJ5dGVzKHJlZ19jZmcuR1NfS0VZX0NPTU1JVFRFRV9JRCkpCiAgICAvLyApICAjIFRoZSB4R292IFJlZ2lzdHJ5IENPTU1JVFRFRV9TVEFMRSBlcnJvciBlbnN1cmVzIHRoZSBDb21taXR0ZWUgaXMgYXZhaWxhYmxlCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjYwMAogICAgLy8gQnl0ZXMocmVnX2NmZy5HU19LRVlfQ09NTUlUVEVFX01FTUJFUlMpCiAgICBieXRlYyAxMSAvLyAweDYzNmY2ZDZkNjk3NDc0NjU2NTVmNmQ2NTZkNjI2NTcyNzMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo1OTktNjAxCiAgICAvLyBzZWxmLmNvbW1pdHRlZV9tZW1iZXJzLnZhbHVlID0gc2VsZi5nZXRfdWludF9mcm9tX3JlZ2lzdHJ5X2NvbmZpZygKICAgIC8vICAgICBCeXRlcyhyZWdfY2ZnLkdTX0tFWV9DT01NSVRURUVfTUVNQkVSUykKICAgIC8vICkKICAgIGNhbGxzdWIgZ2V0X3VpbnRfZnJvbV9yZWdpc3RyeV9jb25maWcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo1OTkKICAgIC8vIHNlbGYuY29tbWl0dGVlX21lbWJlcnMudmFsdWUgPSBzZWxmLmdldF91aW50X2Zyb21fcmVnaXN0cnlfY29uZmlnKAogICAgYnl0ZWMgMTEgLy8gMHg2MzZmNmQ2ZDY5NzQ3NDY1NjU1ZjZkNjU2ZDYyNjU3MjczCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NTk5LTYwMQogICAgLy8gc2VsZi5jb21taXR0ZWVfbWVtYmVycy52YWx1ZSA9IHNlbGYuZ2V0X3VpbnRfZnJvbV9yZWdpc3RyeV9jb25maWcoCiAgICAvLyAgICAgQnl0ZXMocmVnX2NmZy5HU19LRVlfQ09NTUlUVEVFX01FTUJFUlMpCiAgICAvLyApCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjYwMwogICAgLy8gQnl0ZXMocmVnX2NmZy5HU19LRVlfQ09NTUlUVEVFX1ZPVEVTKQogICAgYnl0ZWMgMTUgLy8gMHg2MzZmNmQ2ZDY5NzQ3NDY1NjU1Zjc2NmY3NDY1NzMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo2MDItNjA0CiAgICAvLyBzZWxmLmNvbW1pdHRlZV92b3Rlcy52YWx1ZSA9IHNlbGYuZ2V0X3VpbnRfZnJvbV9yZWdpc3RyeV9jb25maWcoCiAgICAvLyAgICAgQnl0ZXMocmVnX2NmZy5HU19LRVlfQ09NTUlUVEVFX1ZPVEVTKQogICAgLy8gKQogICAgY2FsbHN1YiBnZXRfdWludF9mcm9tX3JlZ2lzdHJ5X2NvbmZpZwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjYwMgogICAgLy8gc2VsZi5jb21taXR0ZWVfdm90ZXMudmFsdWUgPSBzZWxmLmdldF91aW50X2Zyb21fcmVnaXN0cnlfY29uZmlnKAogICAgYnl0ZWMgMTUgLy8gMHg2MzZmNmQ2ZDY5NzQ3NDY1NjU1Zjc2NmY3NDY1NzMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo2MDItNjA0CiAgICAvLyBzZWxmLmNvbW1pdHRlZV92b3Rlcy52YWx1ZSA9IHNlbGYuZ2V0X3VpbnRfZnJvbV9yZWdpc3RyeV9jb25maWcoCiAgICAvLyAgICAgQnl0ZXMocmVnX2NmZy5HU19LRVlfQ09NTUlUVEVFX1ZPVEVTKQogICAgLy8gKQogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo2MDYKICAgIC8vIEJ5dGVzKHJlZ19jZmcuR1NfS0VZX09QRU5fUFJPUE9TQUxfRkVFKQogICAgYnl0ZWMgMjUgLy8gMHg2ZjcwNjU2ZTVmNzA3MjZmNzA2ZjczNjE2YzVmNjY2NTY1CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NjA1LTYwNwogICAgLy8gc2VsZi5vcGVuX3Byb3Bvc2FsX2ZlZS52YWx1ZSA9IHNlbGYuZ2V0X3VpbnRfZnJvbV9yZWdpc3RyeV9jb25maWcoCiAgICAvLyAgICAgQnl0ZXMocmVnX2NmZy5HU19LRVlfT1BFTl9QUk9QT1NBTF9GRUUpCiAgICAvLyApCiAgICBjYWxsc3ViIGdldF91aW50X2Zyb21fcmVnaXN0cnlfY29uZmlnCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NjA1CiAgICAvLyBzZWxmLm9wZW5fcHJvcG9zYWxfZmVlLnZhbHVlID0gc2VsZi5nZXRfdWludF9mcm9tX3JlZ2lzdHJ5X2NvbmZpZygKICAgIGJ5dGVjIDI1IC8vIDB4NmY3MDY1NmU1ZjcwNzI2ZjcwNmY3MzYxNmM1ZjY2NjU2NQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjYwNS02MDcKICAgIC8vIHNlbGYub3Blbl9wcm9wb3NhbF9mZWUudmFsdWUgPSBzZWxmLmdldF91aW50X2Zyb21fcmVnaXN0cnlfY29uZmlnKAogICAgLy8gICAgIEJ5dGVzKHJlZ19jZmcuR1NfS0VZX09QRU5fUFJPUE9TQUxfRkVFKQogICAgLy8gKQogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo2MDkKICAgIC8vIEJ5dGVzKHJlZ19jZmcuR1NfS0VZX0RBRU1PTl9PUFNfRlVORElOR19CUFMpCiAgICBieXRlYyAyNiAvLyAweDY0NjE2NTZkNmY2ZTVmNmY3MDY1NzI2MTc0Njk2ZjZlNWY2Njc1NmU2NDY5NmU2NzVmNjI3MDczCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NjA4LTYxMAogICAgLy8gc2VsZi5kYWVtb25fb3BzX2Z1bmRpbmdfYnBzLnZhbHVlID0gc2VsZi5nZXRfdWludF9mcm9tX3JlZ2lzdHJ5X2NvbmZpZygKICAgIC8vICAgICBCeXRlcyhyZWdfY2ZnLkdTX0tFWV9EQUVNT05fT1BTX0ZVTkRJTkdfQlBTKQogICAgLy8gKQogICAgY2FsbHN1YiBnZXRfdWludF9mcm9tX3JlZ2lzdHJ5X2NvbmZpZwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjYwOAogICAgLy8gc2VsZi5kYWVtb25fb3BzX2Z1bmRpbmdfYnBzLnZhbHVlID0gc2VsZi5nZXRfdWludF9mcm9tX3JlZ2lzdHJ5X2NvbmZpZygKICAgIGJ5dGVjIDI2IC8vIDB4NjQ2MTY1NmQ2ZjZlNWY2ZjcwNjU3MjYxNzQ2OTZmNmU1ZjY2NzU2ZTY0Njk2ZTY3NWY2MjcwNzMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo2MDgtNjEwCiAgICAvLyBzZWxmLmRhZW1vbl9vcHNfZnVuZGluZ19icHMudmFsdWUgPSBzZWxmLmdldF91aW50X2Zyb21fcmVnaXN0cnlfY29uZmlnKAogICAgLy8gICAgIEJ5dGVzKHJlZ19jZmcuR1NfS0VZX0RBRU1PTl9PUFNfRlVORElOR19CUFMpCiAgICAvLyApCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjU3NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGNyZWF0ZT0icmVxdWlyZSIpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnByb3Bvc2FsLmNvbnRyYWN0LlByb3Bvc2FsLm9wZW5bcm91dGluZ10oKSAtPiB2b2lkOgpvcGVuOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjYxMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18xIC8vIHBheQogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIHBheQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgY292ZXIgMwogICAgbGVuCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjQ0NAogICAgLy8gQnl0ZXMocmVnX2NmZy5HU19LRVlfUEFVU0VEX1JFR0lTVFJZKQogICAgYnl0ZWMgMzEgLy8gMHg3MDYxNzU3MzY1NjQ1ZjcyNjU2NzY5NzM3NDcyNzkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo0NDMtNDQ1CiAgICAvLyByZWdpc3RyeV9wYXVzZWQgPSBzZWxmLmdldF91aW50X2Zyb21fcmVnaXN0cnlfY29uZmlnKAogICAgLy8gICAgIEJ5dGVzKHJlZ19jZmcuR1NfS0VZX1BBVVNFRF9SRUdJU1RSWSkKICAgIC8vICkKICAgIGNhbGxzdWIgZ2V0X3VpbnRfZnJvbV9yZWdpc3RyeV9jb25maWcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo0NDYKICAgIC8vIGFzc2VydCBub3QgcmVnaXN0cnlfcGF1c2VkLCBlcnIuUEFVU0VEX1JFR0lTVFJZCiAgICAhCiAgICBhc3NlcnQgLy8gUmVnaXN0cnkncyBub24tYWRtaW4gbWV0aG9kcyBhcmUgcGF1c2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MzcwCiAgICAvLyBhc3NlcnQgc2VsZi5pc19wcm9wb3NlcigpLCBlcnIuVU5BVVRIT1JJWkVECiAgICBjYWxsc3ViIGlzX3Byb3Bvc2VyCiAgICBhc3NlcnQgLy8gVW5hdXRob3JpemVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MzcyCiAgICAvLyBzZWxmLnN0YXR1cy52YWx1ZSA9PSBlbm0uU1RBVFVTX0VNUFRZIGFuZCBub3Qgc2VsZi5maW5hbGl6ZWQudmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vIDB4NzM3NDYxNzQ3NTczCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc3RhdHVzIGV4aXN0cwogICAgYm56IG9wZW5fYm9vbF9mYWxzZUA0CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAweDY2Njk2ZTYxNmM2OTdhNjU2NAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmZpbmFsaXplZCBleGlzdHMKICAgIGJueiBvcGVuX2Jvb2xfZmFsc2VANAogICAgaW50Y18xIC8vIDEKCm9wZW5fYm9vbF9tZXJnZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjM3MS0zNzMKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgc2VsZi5zdGF0dXMudmFsdWUgPT0gZW5tLlNUQVRVU19FTVBUWSBhbmQgbm90IHNlbGYuZmluYWxpemVkLnZhbHVlCiAgICAvLyApLCBlcnIuV1JPTkdfUFJPUE9TQUxfU1RBVFVTCiAgICBhc3NlcnQgLy8gV3JvbmcgUHJvcG9zYWwgU3RhdHVzIG9yIGZpbmFsaXplZAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjM4MgogICAgLy8gYXNzZXJ0IHRpdGxlLmJ5dGVzLmxlbmd0aCA8PSBjb25zdC5USVRMRV9NQVhfQllURVMsIGVyci5XUk9OR19USVRMRV9MRU5HVEgKICAgIGRpZyAzCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAxMjMKICAgIDw9CiAgICBhc3NlcnQgLy8gV3JvbmcgVGl0bGUgbGVuZ3RoCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MzgzCiAgICAvLyBhc3NlcnQgdGl0bGUgIT0gIiIsIGVyci5XUk9OR19USVRMRV9MRU5HVEgKICAgIGJ5dGVjXzEgLy8gIiIKICAgICE9CiAgICBhc3NlcnQgLy8gV3JvbmcgVGl0bGUgbGVuZ3RoCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6Mzg2CiAgICAvLyBmdW5kaW5nX3R5cGUgPT0gZW5tLkZVTkRJTkdfUFJPQUNUSVZFCiAgICBkaWcgMQogICAgaW50Y18zIC8vIDEwCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjM4Ni0zODcKICAgIC8vIGZ1bmRpbmdfdHlwZSA9PSBlbm0uRlVORElOR19QUk9BQ1RJVkUKICAgIC8vIG9yIGZ1bmRpbmdfdHlwZSA9PSBlbm0uRlVORElOR19SRVRST0FDVElWRQogICAgYm56IG9wZW5fYm9vbF90cnVlQDkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTozODcKICAgIC8vIG9yIGZ1bmRpbmdfdHlwZSA9PSBlbm0uRlVORElOR19SRVRST0FDVElWRQogICAgZGlnIDEKICAgIHB1c2hpbnQgMjAKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6Mzg2LTM4NwogICAgLy8gZnVuZGluZ190eXBlID09IGVubS5GVU5ESU5HX1BST0FDVElWRQogICAgLy8gb3IgZnVuZGluZ190eXBlID09IGVubS5GVU5ESU5HX1JFVFJPQUNUSVZFCiAgICBieiBvcGVuX2Jvb2xfZmFsc2VAMTAKCm9wZW5fYm9vbF90cnVlQDk6CiAgICBpbnRjXzEgLy8gMQoKb3Blbl9ib29sX21lcmdlQDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjM4NS0zODgKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgZnVuZGluZ190eXBlID09IGVubS5GVU5ESU5HX1BST0FDVElWRQogICAgLy8gICAgIG9yIGZ1bmRpbmdfdHlwZSA9PSBlbm0uRlVORElOR19SRVRST0FDVElWRQogICAgLy8gKSwgZXJyLldST05HX0ZVTkRJTkdfVFlQRQogICAgYXNzZXJ0IC8vIFdyb25nIEZ1bmRpbmcgVHlwZQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjM5MQogICAgLy8gQnl0ZXMocmVnX2NmZy5HU19LRVlfTUlOX1JFUVVFU1RFRF9BTU9VTlQpCiAgICBieXRlYyAzNyAvLyAweDZkNjk2ZTVmNzI2NTcxNzU2NTczNzQ2NTY0NWY2MTZkNmY3NTZlNzQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTozOTAtMzkyCiAgICAvLyBtaW5fcmVxdWVzdGVkX2Ftb3VudCA9IHNlbGYuZ2V0X3VpbnRfZnJvbV9yZWdpc3RyeV9jb25maWcoCiAgICAvLyAgICAgQnl0ZXMocmVnX2NmZy5HU19LRVlfTUlOX1JFUVVFU1RFRF9BTU9VTlQpCiAgICAvLyApCiAgICBjYWxsc3ViIGdldF91aW50X2Zyb21fcmVnaXN0cnlfY29uZmlnCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6Mzk1CiAgICAvLyBCeXRlcyhyZWdfY2ZnLkdTX0tFWV9NQVhfUkVRVUVTVEVEX0FNT1VOVF9MQVJHRSkKICAgIGJ5dGVjIDM4IC8vIDB4NmQ2MTc4NWY3MjY1NzE3NTY1NzM3NDY1NjQ1ZjYxNmQ2Zjc1NmU3NDVmNmM2MTcyNjc2NQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjM5NC0zOTYKICAgIC8vIG1heF9yZXF1ZXN0ZWRfYW1vdW50X2xhcmdlID0gc2VsZi5nZXRfdWludF9mcm9tX3JlZ2lzdHJ5X2NvbmZpZygKICAgIC8vICAgICBCeXRlcyhyZWdfY2ZnLkdTX0tFWV9NQVhfUkVRVUVTVEVEX0FNT1VOVF9MQVJHRSkKICAgIC8vICkKICAgIGNhbGxzdWIgZ2V0X3VpbnRfZnJvbV9yZWdpc3RyeV9jb25maWcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTozOTgKICAgIC8vIGFzc2VydCByZXF1ZXN0ZWRfYW1vdW50ID49IG1pbl9yZXF1ZXN0ZWRfYW1vdW50LCBlcnIuV1JPTkdfTUlOX1JFUVVFU1RFRF9BTU9VTlQKICAgIGRpZyAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIHVuY292ZXIgMwogICAgPj0KICAgIGFzc2VydCAvLyBSZXF1ZXN0ZWQgYW1vdW50IGlzIGxlc3MgdGhhbiB0aGUgbWluaW11bSByZXF1ZXN0ZWQgYW1vdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NDAwCiAgICAvLyByZXF1ZXN0ZWRfYW1vdW50IDw9IG1heF9yZXF1ZXN0ZWRfYW1vdW50X2xhcmdlCiAgICBkaWcgMQogICAgPj0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTozOTktNDAxCiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIHJlcXVlc3RlZF9hbW91bnQgPD0gbWF4X3JlcXVlc3RlZF9hbW91bnRfbGFyZ2UKICAgIC8vICksIGVyci5XUk9OR19NQVhfUkVRVUVTVEVEX0FNT1VOVAogICAgYXNzZXJ0IC8vIFJlcXVlc3RlZCBhbW91bnQgaXMgbW9yZSB0aGFuIHRoZSBtYXhpbXVtIHJlcXVlc3RlZCBhbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo0MTAKICAgIC8vIEJ5dGVzKHJlZ19jZmcuR1NfS0VZX1BST1BPU0FMX0NPTU1JVE1FTlRfQlBTKQogICAgcHVzaGJ5dGVzIDB4NzA3MjZmNzA2ZjczNjE2YzVmNjM2ZjZkNmQ2OTc0NmQ2NTZlNzQ1ZjYyNzA3MwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjQwOS00MTEKICAgIC8vIHByb3Bvc2FsX2NvbW1pdG1lbnRfYnBzID0gc2VsZi5nZXRfdWludF9mcm9tX3JlZ2lzdHJ5X2NvbmZpZygKICAgIC8vICAgICBCeXRlcyhyZWdfY2ZnLkdTX0tFWV9QUk9QT1NBTF9DT01NSVRNRU5UX0JQUykKICAgIC8vICkKICAgIGNhbGxzdWIgZ2V0X3VpbnRfZnJvbV9yZWdpc3RyeV9jb25maWcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo0MDYKICAgIC8vIHJldHVybiBhbW91bnQgKiBmcmFjdGlvbl9pbl9icHMgLy8gY29uc3QuQlBTCiAgICBkaWcgMQogICAgKgogICAgaW50YyA0IC8vIDEwMDAwCiAgICAvCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NDIyCiAgICAvLyBhc3NlcnQgcGF5bWVudC5zZW5kZXIgPT0gc2VsZi5wcm9wb3Nlci52YWx1ZSwgZXJyLldST05HX1NFTkRFUgogICAgdW5jb3ZlciA2CiAgICBkdXAKICAgIGd0eG5zIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gMHg3MDcyNmY3MDZmNzM2NTcyCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucHJvcG9zZXIgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIFdyb25nIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjQyNAogICAgLy8gcGF5bWVudC5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBkdXAKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo0MjMtNDI1CiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIHBheW1lbnQucmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcwogICAgLy8gKSwgZXJyLldST05HX1JFQ0VJVkVSCiAgICBhc3NlcnQgLy8gV3JvbmcgUmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo0MjYKICAgIC8vIGFzc2VydCBwYXltZW50LmFtb3VudCA9PSBleHBlY3RlZF9sb2NrX2Ftb3VudCwgZXJyLldST05HX0xPQ0tFRF9BTU9VTlQKICAgIGd0eG5zIEFtb3VudAogICAgZHVwCiAgICBjb3ZlciAzCiAgICA9PQogICAgYXNzZXJ0IC8vIExvY2tlZCBhbW91bnQgaXMgaW5jb3JyZWN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NjUzLTY1NAogICAgLy8gIyBDb25maWd1cmUgUHJvcG9zYWwKICAgIC8vIHNlbGYudGl0bGUudmFsdWUgPSB0aXRsZQogICAgYnl0ZWMgMzQgLy8gMHg3NDY5NzQ2YzY1CiAgICB1bmNvdmVyIDYKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NDMwCiAgICAvLyBCeXRlcyhyZWdfY2ZnLkdTX0tFWV9NQVhfUkVRVUVTVEVEX0FNT1VOVF9TTUFMTCkKICAgIHB1c2hieXRlcyAweDZkNjE3ODVmNzI2NTcxNzU2NTczNzQ2NTY0NWY2MTZkNmY3NTZlNzQ1ZjczNmQ2MTZjNmMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo0MjktNDMxCiAgICAvLyBtYXhfcmVxdWVzdGVkX2Ftb3VudF9zbWFsbCA9IHNlbGYuZ2V0X3VpbnRfZnJvbV9yZWdpc3RyeV9jb25maWcoCiAgICAvLyAgICAgQnl0ZXMocmVnX2NmZy5HU19LRVlfTUFYX1JFUVVFU1RFRF9BTU9VTlRfU01BTEwpCiAgICAvLyApCiAgICBjYWxsc3ViIGdldF91aW50X2Zyb21fcmVnaXN0cnlfY29uZmlnCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NDMzCiAgICAvLyBCeXRlcyhyZWdfY2ZnLkdTX0tFWV9NQVhfUkVRVUVTVEVEX0FNT1VOVF9NRURJVU0pCiAgICBwdXNoYnl0ZXMgMHg2ZDYxNzg1ZjcyNjU3MTc1NjU3Mzc0NjU2NDVmNjE2ZDZmNzU2ZTc0NWY2ZDY1NjQ2OTc1NmQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo0MzItNDM0CiAgICAvLyBtYXhfcmVxdWVzdGVkX2Ftb3VudF9tZWRpdW0gPSBzZWxmLmdldF91aW50X2Zyb21fcmVnaXN0cnlfY29uZmlnKAogICAgLy8gICAgIEJ5dGVzKHJlZ19jZmcuR1NfS0VZX01BWF9SRVFVRVNURURfQU1PVU5UX01FRElVTSkKICAgIC8vICkKICAgIGNhbGxzdWIgZ2V0X3VpbnRfZnJvbV9yZWdpc3RyeV9jb25maWcKICAgIGNvdmVyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo0MzUKICAgIC8vIGlmIHJlcXVlc3RlZF9hbW91bnQgPD0gbWF4X3JlcXVlc3RlZF9hbW91bnRfc21hbGw6CiAgICA8PQogICAgYnogb3Blbl9lbHNlX2JvZHlAMTcKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjQzNgogICAgLy8gcmV0dXJuIFVJbnQ2NChlbm0uRlVORElOR19DQVRFR09SWV9TTUFMTCkKICAgIGludGNfMyAvLyAxMAoKb3Blbl9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5wcm9wb3NhbC5jb250cmFjdC5Qcm9wb3NhbC5nZXRfY2F0ZWdvcnlAMjA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NjU1CiAgICAvLyBzZWxmLmZ1bmRpbmdfY2F0ZWdvcnkudmFsdWUgPSBzZWxmLmdldF9jYXRlZ29yeShyZXF1ZXN0ZWRfYW1vdW50KQogICAgYnl0ZWMgMTYgLy8gMHg2Njc1NmU2NDY5NmU2NzVmNjM2MTc0NjU2NzZmNzI3OQogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo2NTYKICAgIC8vIHNlbGYuZnVuZGluZ190eXBlLnZhbHVlID0gZnVuZGluZ190eXBlCiAgICBieXRlYyAyOSAvLyAweDY2NzU2ZTY0Njk2ZTY3NWY3NDc5NzA2NQogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjY1NwogICAgLy8gc2VsZi5yZXF1ZXN0ZWRfYW1vdW50LnZhbHVlID0gcmVxdWVzdGVkX2Ftb3VudAogICAgYnl0ZWMgMTIgLy8gMHg3MjY1NzE3NTY1NzM3NDY1NjQ1ZjYxNmQ2Zjc1NmU3NAogICAgdW5jb3ZlciAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjY1OAogICAgLy8gc2VsZi5mb2N1cy52YWx1ZSA9IGZvY3VzLmFzX3VpbnQ2NCgpCiAgICBzd2FwCiAgICBidG9pCiAgICBieXRlYyAzNSAvLyAweDY2NmY2Mzc1NzMKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NjU5CiAgICAvLyBzZWxmLmxvY2tlZF9hbW91bnQudmFsdWUgPSBwYXltZW50LmFtb3VudCAgIyBUaGUgYW1vdW50IGlzIHZhbGlkYXRlZAogICAgYnl0ZWMgMjAgLy8gMHg2YzZmNjM2YjY1NjQ1ZjYxNmQ2Zjc1NmU3NAogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo2NjMKICAgIC8vIHNlbGYuZnVuZGluZ19jYXRlZ29yeS52YWx1ZSAhPSBlbm0uRlVORElOR19DQVRFR09SWV9OVUxMCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTYgLy8gMHg2Njc1NmU2NDY5NmU2NzVmNjM2MTc0NjU2NzZmNzI3OQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5mdW5kaW5nX2NhdGVnb3J5IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjY2MS02NjQKICAgIC8vICMgQ29uZmlndXJlIGNhdGVnb3J5IGRlcGVuZGVudCB2YWx1ZXMKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgc2VsZi5mdW5kaW5nX2NhdGVnb3J5LnZhbHVlICE9IGVubS5GVU5ESU5HX0NBVEVHT1JZX05VTEwKICAgIC8vICksIGVyci5NSVNTSU5HX0NPTkZJRwogICAgZHVwCiAgICBhc3NlcnQgLy8gTWlzc2luZyBDb25maWcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo2NjUKICAgIC8vIGFzc2VydCBzZWxmLnJlcXVlc3RlZF9hbW91bnQudmFsdWUgIT0gMCwgZXJyLk1JU1NJTkdfQ09ORklHCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTIgLy8gMHg3MjY1NzE3NTY1NzM3NDY1NjQ1ZjYxNmQ2Zjc1NmU3NAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnJlcXVlc3RlZF9hbW91bnQgZXhpc3RzCiAgICBhc3NlcnQgLy8gTWlzc2luZyBDb25maWcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTozMTcKICAgIC8vIGlmIGNhdGVnb3J5ID09IGVubS5GVU5ESU5HX0NBVEVHT1JZX1NNQUxMOgogICAgaW50Y18zIC8vIDEwCiAgICA9PQogICAgYnogb3Blbl9lbHNlX2JvZHlAMjMKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjMxOQogICAgLy8gQnl0ZXMocmVnX2NmZy5HU19LRVlfRElTQ1VTU0lPTl9EVVJBVElPTl9TTUFMTCkKICAgIHB1c2hieXRlcyAweDY0Njk3MzYzNzU3MzczNjk2ZjZlNWY2NDc1NzI2MTc0Njk2ZjZlNWY3MzZkNjE2YzZjCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MzE4LTMyMAogICAgLy8gcmV0dXJuIHNlbGYuZ2V0X3VpbnRfZnJvbV9yZWdpc3RyeV9jb25maWcoCiAgICAvLyAgICAgQnl0ZXMocmVnX2NmZy5HU19LRVlfRElTQ1VTU0lPTl9EVVJBVElPTl9TTUFMTCkKICAgIC8vICkKICAgIGNhbGxzdWIgZ2V0X3VpbnRfZnJvbV9yZWdpc3RyeV9jb25maWcKCm9wZW5fYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMucHJvcG9zYWwuY29udHJhY3QuUHJvcG9zYWwuZ2V0X2Rpc2N1c3Npb25fZHVyYXRpb25AMjY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NjY2CiAgICAvLyBzZWxmLmRpc2N1c3Npb25fZHVyYXRpb24udmFsdWUgPSBzZWxmLmdldF9kaXNjdXNzaW9uX2R1cmF0aW9uKAogICAgYnl0ZWMgMzYgLy8gMHg2NDY5NzM2Mzc1NzM3MzY5NmY2ZTVmNjQ3NTcyNjE3NDY5NmY2ZQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjY2Ni02NjgKICAgIC8vIHNlbGYuZGlzY3Vzc2lvbl9kdXJhdGlvbi52YWx1ZSA9IHNlbGYuZ2V0X2Rpc2N1c3Npb25fZHVyYXRpb24oCiAgICAvLyAgICAgc2VsZi5mdW5kaW5nX2NhdGVnb3J5LnZhbHVlCiAgICAvLyApCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjY3MAogICAgLy8gc2VsZi5mdW5kaW5nX2NhdGVnb3J5LnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTYgLy8gMHg2Njc1NmU2NDY5NmU2NzVmNjM2MTc0NjU2NzZmNzI3OQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5mdW5kaW5nX2NhdGVnb3J5IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjMzMQogICAgLy8gaWYgY2F0ZWdvcnkgPT0gZW5tLkZVTkRJTkdfQ0FURUdPUllfU01BTEw6CiAgICBpbnRjXzMgLy8gMTAKICAgID09CiAgICBieiBvcGVuX2Vsc2VfYm9keUAyOQogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MzMzCiAgICAvLyBCeXRlcyhyZWdfY2ZnLkdTX0tFWV9WT1RJTkdfRFVSQVRJT05fU01BTEwpCiAgICBwdXNoYnl0ZXMgMHg3NjZmNzQ2OTZlNjc1ZjY0NzU3MjYxNzQ2OTZmNmU1ZjczNmQ2MTZjNmMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTozMzItMzM0CiAgICAvLyByZXR1cm4gc2VsZi5nZXRfdWludF9mcm9tX3JlZ2lzdHJ5X2NvbmZpZygKICAgIC8vICAgICBCeXRlcyhyZWdfY2ZnLkdTX0tFWV9WT1RJTkdfRFVSQVRJT05fU01BTEwpCiAgICAvLyApCiAgICBjYWxsc3ViIGdldF91aW50X2Zyb21fcmVnaXN0cnlfY29uZmlnCgpvcGVuX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLnByb3Bvc2FsLmNvbnRyYWN0LlByb3Bvc2FsLmdldF92b3RpbmdfZHVyYXRpb25AMzI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NjY5CiAgICAvLyBzZWxmLnZvdGluZ19kdXJhdGlvbi52YWx1ZSA9IHNlbGYuZ2V0X3ZvdGluZ19kdXJhdGlvbigKICAgIGJ5dGVjIDMwIC8vIDB4NzY2Zjc0Njk2ZTY3NWY2NDc1NzI2MTc0Njk2ZjZlCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NjY5LTY3MQogICAgLy8gc2VsZi52b3RpbmdfZHVyYXRpb24udmFsdWUgPSBzZWxmLmdldF92b3RpbmdfZHVyYXRpb24oCiAgICAvLyAgICAgc2VsZi5mdW5kaW5nX2NhdGVnb3J5LnZhbHVlCiAgICAvLyApCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjQ4OAogICAgLy8gQnl0ZXMocmVnX2NmZy5HU19LRVlfUVVPUlVNX1NNQUxMKQogICAgcHVzaGJ5dGVzIDB4NzE3NTZmNzI3NTZkNWY3MzZkNjE2YzZjCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NDg3LTQ4OQogICAgLy8gcXVvcnVtX21pbl9icHMgPSBzZWxmLmdldF91aW50X2Zyb21fcmVnaXN0cnlfY29uZmlnKAogICAgLy8gICAgIEJ5dGVzKHJlZ19jZmcuR1NfS0VZX1FVT1JVTV9TTUFMTCkKICAgIC8vICkKICAgIGNhbGxzdWIgZ2V0X3VpbnRfZnJvbV9yZWdpc3RyeV9jb25maWcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo0OTEKICAgIC8vIEJ5dGVzKHJlZ19jZmcuR1NfS0VZX1FVT1JVTV9MQVJHRSkKICAgIHB1c2hieXRlcyAweDcxNzU2ZjcyNzU2ZDVmNmM2MTcyNjc2NQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjQ5MC00OTIKICAgIC8vIHF1b3J1bV9tYXhfYnBzID0gc2VsZi5nZXRfdWludF9mcm9tX3JlZ2lzdHJ5X2NvbmZpZygKICAgIC8vICAgICBCeXRlcyhyZWdfY2ZnLkdTX0tFWV9RVU9SVU1fTEFSR0UpCiAgICAvLyApCiAgICBjYWxsc3ViIGdldF91aW50X2Zyb21fcmVnaXN0cnlfY29uZmlnCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NDkzLTQ5NAogICAgLy8gIyBUaGUgeEdvdiBSZWdpc3RyeSBlbnN1cmVzIHF1b3J1bV9tYXhfYnBzID4gcXVvcnVtX21pbl9icHMKICAgIC8vIGRlbHRhX3F1b3J1bV9icHMgPSBxdW9ydW1fbWF4X2JwcyAtIHF1b3J1bV9taW5fYnBzCiAgICBkaWcgMQogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjQ5NwogICAgLy8gQnl0ZXMocmVnX2NmZy5HU19LRVlfTUlOX1JFUVVFU1RFRF9BTU9VTlQpCiAgICBieXRlYyAzNyAvLyAweDZkNjk2ZTVmNzI2NTcxNzU2NTczNzQ2NTY0NWY2MTZkNmY3NTZlNzQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo0OTYtNDk4CiAgICAvLyBhbW91bnRfbWluID0gc2VsZi5nZXRfdWludF9mcm9tX3JlZ2lzdHJ5X2NvbmZpZygKICAgIC8vICAgICBCeXRlcyhyZWdfY2ZnLkdTX0tFWV9NSU5fUkVRVUVTVEVEX0FNT1VOVCkKICAgIC8vICkKICAgIGNhbGxzdWIgZ2V0X3VpbnRfZnJvbV9yZWdpc3RyeV9jb25maWcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo1MDAKICAgIC8vIEJ5dGVzKHJlZ19jZmcuR1NfS0VZX01BWF9SRVFVRVNURURfQU1PVU5UX0xBUkdFKQogICAgYnl0ZWMgMzggLy8gMHg2ZDYxNzg1ZjcyNjU3MTc1NjU3Mzc0NjU2NDVmNjE2ZDZmNzU2ZTc0NWY2YzYxNzI2NzY1CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NDk5LTUwMQogICAgLy8gYW1vdW50X21heCA9IHNlbGYuZ2V0X3VpbnRfZnJvbV9yZWdpc3RyeV9jb25maWcoCiAgICAvLyAgICAgQnl0ZXMocmVnX2NmZy5HU19LRVlfTUFYX1JFUVVFU1RFRF9BTU9VTlRfTEFSR0UpCiAgICAvLyApCiAgICBjYWxsc3ViIGdldF91aW50X2Zyb21fcmVnaXN0cnlfY29uZmlnCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NTAyLTUwMwogICAgLy8gIyBUaGUgeEdvdiBSZWdpc3RyeSBlbnN1cmVzIGFtb3VudF9tYXggPiBhbW91bnRfbWluCiAgICAvLyBkZWx0YV9hbW91bnQgPSBhbW91bnRfbWF4IC0gYW1vdW50X21pbgogICAgZGlnIDEKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo1MDgKICAgIC8vICogKHNlbGYucmVxdWVzdGVkX2Ftb3VudC52YWx1ZSAtIGFtb3VudF9taW4pCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTIgLy8gMHg3MjY1NzE3NTY1NzM3NDY1NjQ1ZjYxNmQ2Zjc1NmU3NAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnJlcXVlc3RlZF9hbW91bnQgZXhpc3RzCiAgICB1bmNvdmVyIDIKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo1MDctNTA4CiAgICAvLyArIGRlbHRhX3F1b3J1bV9icHMKICAgIC8vICogKHNlbGYucmVxdWVzdGVkX2Ftb3VudC52YWx1ZSAtIGFtb3VudF9taW4pCiAgICB1bmNvdmVyIDIKICAgICoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo1MDctNTA5CiAgICAvLyArIGRlbHRhX3F1b3J1bV9icHMKICAgIC8vICogKHNlbGYucmVxdWVzdGVkX2Ftb3VudC52YWx1ZSAtIGFtb3VudF9taW4pCiAgICAvLyAvLyBkZWx0YV9hbW91bnQKICAgIHN3YXAKICAgIC8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo1MDYtNTA5CiAgICAvLyBxdW9ydW1fbWluX2JwcwogICAgLy8gKyBkZWx0YV9xdW9ydW1fYnBzCiAgICAvLyAqIChzZWxmLnJlcXVlc3RlZF9hbW91bnQudmFsdWUgLSBhbW91bnRfbWluKQogICAgLy8gLy8gZGVsdGFfYW1vdW50CiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NTEyCiAgICAvLyBzZWxmLmNvbW1pdHRlZV9tZW1iZXJzLnZhbHVlLCBxdW9ydW1fYnBzCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTEgLy8gMHg2MzZmNmQ2ZDY5NzQ3NDY1NjU1ZjZkNjU2ZDYyNjU3MjczCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY29tbWl0dGVlX21lbWJlcnMgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NDA2CiAgICAvLyByZXR1cm4gYW1vdW50ICogZnJhY3Rpb25faW5fYnBzIC8vIGNvbnN0LkJQUwogICAgKgogICAgaW50YyA0IC8vIDEwMDAwCiAgICAvCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NjcyCiAgICAvLyBzZWxmLnF1b3J1bV90aHJlc2hvbGQudmFsdWUgPSBzZWxmLmNvbXB1dGVfcXVvcnVtX3RocmVzaG9sZCgpCiAgICBieXRlYyAyMSAvLyAweDcxNzU2ZjcyNzU2ZDVmNzQ2ODcyNjU3MzY4NmY2YzY0CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjUxNwogICAgLy8gQnl0ZXMocmVnX2NmZy5HU19LRVlfV0VJR0hURURfUVVPUlVNX1NNQUxMKQogICAgcHVzaGJ5dGVzIDB4Nzc2NTY5Njc2ODc0NjU2NDVmNzE3NTZmNzI3NTZkNWY3MzZkNjE2YzZjCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NTE2LTUxOAogICAgLy8gd2VpZ2h0ZWRfcXVvcnVtX21pbl9icHMgPSBzZWxmLmdldF91aW50X2Zyb21fcmVnaXN0cnlfY29uZmlnKAogICAgLy8gICAgIEJ5dGVzKHJlZ19jZmcuR1NfS0VZX1dFSUdIVEVEX1FVT1JVTV9TTUFMTCkKICAgIC8vICkKICAgIGNhbGxzdWIgZ2V0X3VpbnRfZnJvbV9yZWdpc3RyeV9jb25maWcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo1MjAKICAgIC8vIEJ5dGVzKHJlZ19jZmcuR1NfS0VZX1dFSUdIVEVEX1FVT1JVTV9MQVJHRSkKICAgIHB1c2hieXRlcyAweDc3NjU2OTY3Njg3NDY1NjQ1ZjcxNzU2ZjcyNzU2ZDVmNmM2MTcyNjc2NQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjUxOS01MjEKICAgIC8vIHdlaWdodGVkX3F1b3J1bV9tYXhfYnBzID0gc2VsZi5nZXRfdWludF9mcm9tX3JlZ2lzdHJ5X2NvbmZpZygKICAgIC8vICAgICBCeXRlcyhyZWdfY2ZnLkdTX0tFWV9XRUlHSFRFRF9RVU9SVU1fTEFSR0UpCiAgICAvLyApCiAgICBjYWxsc3ViIGdldF91aW50X2Zyb21fcmVnaXN0cnlfY29uZmlnCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NTIyLTUyMwogICAgLy8gIyBUaGUgeEdvdiBSZWdpc3RyeSBlbnN1cmVzIHdlaWdodGVkX3F1b3J1bV9tYXhfYnBzID4gd2VpZ2h0ZWRfcXVvcnVtX21pbl9icHMKICAgIC8vIGRlbHRhX3dlaWdodGVkX3F1b3J1bV9icHMgPSB3ZWlnaHRlZF9xdW9ydW1fbWF4X2JwcyAtIHdlaWdodGVkX3F1b3J1bV9taW5fYnBzCiAgICBkaWcgMQogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjUyNgogICAgLy8gQnl0ZXMocmVnX2NmZy5HU19LRVlfTUlOX1JFUVVFU1RFRF9BTU9VTlQpCiAgICBieXRlYyAzNyAvLyAweDZkNjk2ZTVmNzI2NTcxNzU2NTczNzQ2NTY0NWY2MTZkNmY3NTZlNzQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo1MjUtNTI3CiAgICAvLyBhbW91bnRfbWluID0gc2VsZi5nZXRfdWludF9mcm9tX3JlZ2lzdHJ5X2NvbmZpZygKICAgIC8vICAgICBCeXRlcyhyZWdfY2ZnLkdTX0tFWV9NSU5fUkVRVUVTVEVEX0FNT1VOVCkKICAgIC8vICkKICAgIGNhbGxzdWIgZ2V0X3VpbnRfZnJvbV9yZWdpc3RyeV9jb25maWcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo1MjkKICAgIC8vIEJ5dGVzKHJlZ19jZmcuR1NfS0VZX01BWF9SRVFVRVNURURfQU1PVU5UX0xBUkdFKQogICAgYnl0ZWMgMzggLy8gMHg2ZDYxNzg1ZjcyNjU3MTc1NjU3Mzc0NjU2NDVmNjE2ZDZmNzU2ZTc0NWY2YzYxNzI2NzY1CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NTI4LTUzMAogICAgLy8gYW1vdW50X21heCA9IHNlbGYuZ2V0X3VpbnRfZnJvbV9yZWdpc3RyeV9jb25maWcoCiAgICAvLyAgICAgQnl0ZXMocmVnX2NmZy5HU19LRVlfTUFYX1JFUVVFU1RFRF9BTU9VTlRfTEFSR0UpCiAgICAvLyApCiAgICBjYWxsc3ViIGdldF91aW50X2Zyb21fcmVnaXN0cnlfY29uZmlnCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NTMxLTUzMgogICAgLy8gIyBUaGUgeEdvdiBSZWdpc3RyeSBlbnN1cmVzIGFtb3VudF9tYXggPiBhbW91bnRfbWluCiAgICAvLyBkZWx0YV9hbW91bnQgPSBhbW91bnRfbWF4IC0gYW1vdW50X21pbgogICAgZGlnIDEKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo1MzcKICAgIC8vICogKHNlbGYucmVxdWVzdGVkX2Ftb3VudC52YWx1ZSAtIGFtb3VudF9taW4pCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTIgLy8gMHg3MjY1NzE3NTY1NzM3NDY1NjQ1ZjYxNmQ2Zjc1NmU3NAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnJlcXVlc3RlZF9hbW91bnQgZXhpc3RzCiAgICB1bmNvdmVyIDIKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo1MzYtNTM3CiAgICAvLyArIGRlbHRhX3dlaWdodGVkX3F1b3J1bV9icHMKICAgIC8vICogKHNlbGYucmVxdWVzdGVkX2Ftb3VudC52YWx1ZSAtIGFtb3VudF9taW4pCiAgICB1bmNvdmVyIDIKICAgICoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo1MzYtNTM4CiAgICAvLyArIGRlbHRhX3dlaWdodGVkX3F1b3J1bV9icHMKICAgIC8vICogKHNlbGYucmVxdWVzdGVkX2Ftb3VudC52YWx1ZSAtIGFtb3VudF9taW4pCiAgICAvLyAvLyBkZWx0YV9hbW91bnQKICAgIHN3YXAKICAgIC8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo1MzUtNTM4CiAgICAvLyB3ZWlnaHRlZF9xdW9ydW1fbWluX2JwcwogICAgLy8gKyBkZWx0YV93ZWlnaHRlZF9xdW9ydW1fYnBzCiAgICAvLyAqIChzZWxmLnJlcXVlc3RlZF9hbW91bnQudmFsdWUgLSBhbW91bnRfbWluKQogICAgLy8gLy8gZGVsdGFfYW1vdW50CiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NTQxCiAgICAvLyBzZWxmLmNvbW1pdHRlZV92b3Rlcy52YWx1ZSwgd2VpZ2h0ZWRfcXVvcnVtX2JwcwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE1IC8vIDB4NjM2ZjZkNmQ2OTc0NzQ2NTY1NWY3NjZmNzQ2NTczCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY29tbWl0dGVlX3ZvdGVzIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjQwNgogICAgLy8gcmV0dXJuIGFtb3VudCAqIGZyYWN0aW9uX2luX2JwcyAvLyBjb25zdC5CUFMKICAgICoKICAgIGludGMgNCAvLyAxMDAwMAogICAgLwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjY3MwogICAgLy8gc2VsZi53ZWlnaHRlZF9xdW9ydW1fdGhyZXNob2xkLnZhbHVlID0gc2VsZi5jb21wdXRlX3dlaWdodGVkX3F1b3J1bV90aHJlc2hvbGQoKQogICAgYnl0ZWMgMjIgLy8gMHg3NzY1Njk2NzY4NzQ2NTY0NWY3MTc1NmY3Mjc1NmQ1Zjc0Njg3MjY1NzM2ODZmNmM2NAogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo2NzUtNjc2CiAgICAvLyAjIFVwZGF0ZSBQcm9wb3NhbCBTdGF0ZSBhbmQgdGltZSBhbmNob3JzCiAgICAvLyBzZWxmLnN0YXR1cy52YWx1ZSA9IFVJbnQ2NChlbm0uU1RBVFVTX0RSQUZUKQogICAgYnl0ZWNfMCAvLyAweDczNzQ2MTc0NzU3MwogICAgaW50Y18zIC8vIDEwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjY3NwogICAgLy8gc2VsZi5vcGVuX3RzLnZhbHVlID0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGJ5dGVjIDI3IC8vIDB4NmY3MDY1NmU1Zjc0Njk2ZDY1NzM3NDYxNmQ3MAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo2ODEKICAgIC8vIGZ1bmRpbmdfdHlwZT1hcmM0LlVJbnQ4KHNlbGYuZnVuZGluZ190eXBlLnZhbHVlKSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyOSAvLyAweDY2NzU2ZTY0Njk2ZTY3NWY3NDc5NzA2NQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmZ1bmRpbmdfdHlwZSBleGlzdHMKICAgIGl0b2IKICAgIGR1cAogICAgYml0bGVuCiAgICBwdXNoaW50IDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGV4dHJhY3QgNyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NjgyCiAgICAvLyByZXF1ZXN0ZWRfYW1vdW50PXNlbGYucmVxdWVzdGVkX2Ftb3VudC52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMiAvLyAweDcyNjU3MTc1NjU3Mzc0NjU2NDVmNjE2ZDZmNzU2ZTc0CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucmVxdWVzdGVkX2Ftb3VudCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo2ODMKICAgIC8vIGNhdGVnb3J5PWFyYzQuVUludDgoc2VsZi5mdW5kaW5nX2NhdGVnb3J5LnZhbHVlKSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxNiAvLyAweDY2NzU2ZTY0Njk2ZTY3NWY2MzYxNzQ2NTY3NmY3Mjc5CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZnVuZGluZ19jYXRlZ29yeSBleGlzdHMKICAgIGl0b2IKICAgIGR1cAogICAgYml0bGVuCiAgICBwdXNoaW50IDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGV4dHJhY3QgNyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6Njg0CiAgICAvLyByb3VuZD1HbG9iYWwucm91bmQsCiAgICBnbG9iYWwgUm91bmQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo2ODAtNjg1CiAgICAvLyB0eXAuT3BlbmVkKAogICAgLy8gICAgIGZ1bmRpbmdfdHlwZT1hcmM0LlVJbnQ4KHNlbGYuZnVuZGluZ190eXBlLnZhbHVlKSwKICAgIC8vICAgICByZXF1ZXN0ZWRfYW1vdW50PXNlbGYucmVxdWVzdGVkX2Ftb3VudC52YWx1ZSwKICAgIC8vICAgICBjYXRlZ29yeT1hcmM0LlVJbnQ4KHNlbGYuZnVuZGluZ19jYXRlZ29yeS52YWx1ZSksCiAgICAvLyAgICAgcm91bmQ9R2xvYmFsLnJvdW5kLAogICAgLy8gKQogICAgdW5jb3ZlciAyCiAgICBpdG9iCiAgICB1bmNvdmVyIDMKICAgIHN3YXAKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGl0b2IKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjY3OS02ODYKICAgIC8vIGFyYzQuZW1pdCgKICAgIC8vICAgICB0eXAuT3BlbmVkKAogICAgLy8gICAgICAgICBmdW5kaW5nX3R5cGU9YXJjNC5VSW50OChzZWxmLmZ1bmRpbmdfdHlwZS52YWx1ZSksCiAgICAvLyAgICAgICAgIHJlcXVlc3RlZF9hbW91bnQ9c2VsZi5yZXF1ZXN0ZWRfYW1vdW50LnZhbHVlLAogICAgLy8gICAgICAgICBjYXRlZ29yeT1hcmM0LlVJbnQ4KHNlbGYuZnVuZGluZ19jYXRlZ29yeS52YWx1ZSksCiAgICAvLyAgICAgICAgIHJvdW5kPUdsb2JhbC5yb3VuZCwKICAgIC8vICAgICApCiAgICAvLyApCiAgICBwdXNoYnl0ZXMgMHg0YjE1OGQ5OCAvLyBtZXRob2QgIk9wZW5lZCh1aW50OCx1aW50NjQsdWludDgsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NjEyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKb3Blbl9lbHNlX2JvZHlAMjk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MzM1CiAgICAvLyBlbGlmIGNhdGVnb3J5ID09IGVubS5GVU5ESU5HX0NBVEVHT1JZX01FRElVTToKICAgIHB1c2hpbnQgMjAKICAgID09CiAgICBieiBvcGVuX2Vsc2VfYm9keUAzMQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjMzNwogICAgLy8gQnl0ZXMocmVnX2NmZy5HU19LRVlfVk9USU5HX0RVUkFUSU9OX01FRElVTSkKICAgIHB1c2hieXRlcyAweDc2NmY3NDY5NmU2NzVmNjQ3NTcyNjE3NDY5NmY2ZTVmNmQ2NTY0Njk3NTZkCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MzM2LTMzOAogICAgLy8gcmV0dXJuIHNlbGYuZ2V0X3VpbnRfZnJvbV9yZWdpc3RyeV9jb25maWcoCiAgICAvLyAgICAgQnl0ZXMocmVnX2NmZy5HU19LRVlfVk9USU5HX0RVUkFUSU9OX01FRElVTSkKICAgIC8vICkKICAgIGNhbGxzdWIgZ2V0X3VpbnRfZnJvbV9yZWdpc3RyeV9jb25maWcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo2NjktNjcxCiAgICAvLyBzZWxmLnZvdGluZ19kdXJhdGlvbi52YWx1ZSA9IHNlbGYuZ2V0X3ZvdGluZ19kdXJhdGlvbigKICAgIC8vICAgICBzZWxmLmZ1bmRpbmdfY2F0ZWdvcnkudmFsdWUKICAgIC8vICkKICAgIGIgb3Blbl9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5wcm9wb3NhbC5jb250cmFjdC5Qcm9wb3NhbC5nZXRfdm90aW5nX2R1cmF0aW9uQDMyCgpvcGVuX2Vsc2VfYm9keUAzMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTozNDEKICAgIC8vIEJ5dGVzKHJlZ19jZmcuR1NfS0VZX1ZPVElOR19EVVJBVElPTl9MQVJHRSkKICAgIHB1c2hieXRlcyAweDc2NmY3NDY5NmU2NzVmNjQ3NTcyNjE3NDY5NmY2ZTVmNmM2MTcyNjc2NQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjM0MC0zNDIKICAgIC8vIHJldHVybiBzZWxmLmdldF91aW50X2Zyb21fcmVnaXN0cnlfY29uZmlnKAogICAgLy8gICAgIEJ5dGVzKHJlZ19jZmcuR1NfS0VZX1ZPVElOR19EVVJBVElPTl9MQVJHRSkKICAgIC8vICkKICAgIGNhbGxzdWIgZ2V0X3VpbnRfZnJvbV9yZWdpc3RyeV9jb25maWcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo2NjktNjcxCiAgICAvLyBzZWxmLnZvdGluZ19kdXJhdGlvbi52YWx1ZSA9IHNlbGYuZ2V0X3ZvdGluZ19kdXJhdGlvbigKICAgIC8vICAgICBzZWxmLmZ1bmRpbmdfY2F0ZWdvcnkudmFsdWUKICAgIC8vICkKICAgIGIgb3Blbl9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5wcm9wb3NhbC5jb250cmFjdC5Qcm9wb3NhbC5nZXRfdm90aW5nX2R1cmF0aW9uQDMyCgpvcGVuX2Vsc2VfYm9keUAyMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTozMjEKICAgIC8vIGVsaWYgY2F0ZWdvcnkgPT0gZW5tLkZVTkRJTkdfQ0FURUdPUllfTUVESVVNOgogICAgcHVzaGludCAyMAogICAgPT0KICAgIGJ6IG9wZW5fZWxzZV9ib2R5QDI1CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MzIzCiAgICAvLyBCeXRlcyhyZWdfY2ZnLkdTX0tFWV9ESVNDVVNTSU9OX0RVUkFUSU9OX01FRElVTSkKICAgIHB1c2hieXRlcyAweDY0Njk3MzYzNzU3MzczNjk2ZjZlNWY2NDc1NzI2MTc0Njk2ZjZlNWY2ZDY1NjQ2OTc1NmQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTozMjItMzI0CiAgICAvLyByZXR1cm4gc2VsZi5nZXRfdWludF9mcm9tX3JlZ2lzdHJ5X2NvbmZpZygKICAgIC8vICAgICBCeXRlcyhyZWdfY2ZnLkdTX0tFWV9ESVNDVVNTSU9OX0RVUkFUSU9OX01FRElVTSkKICAgIC8vICkKICAgIGNhbGxzdWIgZ2V0X3VpbnRfZnJvbV9yZWdpc3RyeV9jb25maWcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo2NjYtNjY4CiAgICAvLyBzZWxmLmRpc2N1c3Npb25fZHVyYXRpb24udmFsdWUgPSBzZWxmLmdldF9kaXNjdXNzaW9uX2R1cmF0aW9uKAogICAgLy8gICAgIHNlbGYuZnVuZGluZ19jYXRlZ29yeS52YWx1ZQogICAgLy8gKQogICAgYiBvcGVuX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLnByb3Bvc2FsLmNvbnRyYWN0LlByb3Bvc2FsLmdldF9kaXNjdXNzaW9uX2R1cmF0aW9uQDI2CgpvcGVuX2Vsc2VfYm9keUAyNToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTozMjcKICAgIC8vIEJ5dGVzKHJlZ19jZmcuR1NfS0VZX0RJU0NVU1NJT05fRFVSQVRJT05fTEFSR0UpCiAgICBwdXNoYnl0ZXMgMHg2NDY5NzM2Mzc1NzM3MzY5NmY2ZTVmNjQ3NTcyNjE3NDY5NmY2ZTVmNmM2MTcyNjc2NQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjMyNi0zMjgKICAgIC8vIHJldHVybiBzZWxmLmdldF91aW50X2Zyb21fcmVnaXN0cnlfY29uZmlnKAogICAgLy8gICAgIEJ5dGVzKHJlZ19jZmcuR1NfS0VZX0RJU0NVU1NJT05fRFVSQVRJT05fTEFSR0UpCiAgICAvLyApCiAgICBjYWxsc3ViIGdldF91aW50X2Zyb21fcmVnaXN0cnlfY29uZmlnCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NjY2LTY2OAogICAgLy8gc2VsZi5kaXNjdXNzaW9uX2R1cmF0aW9uLnZhbHVlID0gc2VsZi5nZXRfZGlzY3Vzc2lvbl9kdXJhdGlvbigKICAgIC8vICAgICBzZWxmLmZ1bmRpbmdfY2F0ZWdvcnkudmFsdWUKICAgIC8vICkKICAgIGIgb3Blbl9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5wcm9wb3NhbC5jb250cmFjdC5Qcm9wb3NhbC5nZXRfZGlzY3Vzc2lvbl9kdXJhdGlvbkAyNgoKb3Blbl9lbHNlX2JvZHlAMTc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NDM3CiAgICAvLyBlbGlmIHJlcXVlc3RlZF9hbW91bnQgPD0gbWF4X3JlcXVlc3RlZF9hbW91bnRfbWVkaXVtOgogICAgZGlnIDIKICAgID49CiAgICBieiBvcGVuX2Vsc2VfYm9keUAxOQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjQzOAogICAgLy8gcmV0dXJuIFVJbnQ2NChlbm0uRlVORElOR19DQVRFR09SWV9NRURJVU0pCiAgICBwdXNoaW50IDIwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NjU1CiAgICAvLyBzZWxmLmZ1bmRpbmdfY2F0ZWdvcnkudmFsdWUgPSBzZWxmLmdldF9jYXRlZ29yeShyZXF1ZXN0ZWRfYW1vdW50KQogICAgYiBvcGVuX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLnByb3Bvc2FsLmNvbnRyYWN0LlByb3Bvc2FsLmdldF9jYXRlZ29yeUAyMAoKb3Blbl9lbHNlX2JvZHlAMTk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NDQwCiAgICAvLyByZXR1cm4gVUludDY0KGVubS5GVU5ESU5HX0NBVEVHT1JZX0xBUkdFKQogICAgcHVzaGludCAzMAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjY1NQogICAgLy8gc2VsZi5mdW5kaW5nX2NhdGVnb3J5LnZhbHVlID0gc2VsZi5nZXRfY2F0ZWdvcnkocmVxdWVzdGVkX2Ftb3VudCkKICAgIGIgb3Blbl9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5wcm9wb3NhbC5jb250cmFjdC5Qcm9wb3NhbC5nZXRfY2F0ZWdvcnlAMjAKCm9wZW5fYm9vbF9mYWxzZUAxMDoKICAgIGludGNfMCAvLyAwCiAgICBiIG9wZW5fYm9vbF9tZXJnZUAxMQoKb3Blbl9ib29sX2ZhbHNlQDQ6CiAgICBpbnRjXzAgLy8gMAogICAgYiBvcGVuX2Jvb2xfbWVyZ2VANQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5wcm9wb3NhbC5jb250cmFjdC5Qcm9wb3NhbC51cGxvYWRfbWV0YWRhdGFbcm91dGluZ10oKSAtPiB2b2lkOgp1cGxvYWRfbWV0YWRhdGE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6Njg4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICBkdXAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5ib29sCiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NDQ0CiAgICAvLyBCeXRlcyhyZWdfY2ZnLkdTX0tFWV9QQVVTRURfUkVHSVNUUlkpCiAgICBieXRlYyAzMSAvLyAweDcwNjE3NTczNjU2NDVmNzI2NTY3Njk3Mzc0NzI3OQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjQ0My00NDUKICAgIC8vIHJlZ2lzdHJ5X3BhdXNlZCA9IHNlbGYuZ2V0X3VpbnRfZnJvbV9yZWdpc3RyeV9jb25maWcoCiAgICAvLyAgICAgQnl0ZXMocmVnX2NmZy5HU19LRVlfUEFVU0VEX1JFR0lTVFJZKQogICAgLy8gKQogICAgY2FsbHN1YiBnZXRfdWludF9mcm9tX3JlZ2lzdHJ5X2NvbmZpZwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjQ0NgogICAgLy8gYXNzZXJ0IG5vdCByZWdpc3RyeV9wYXVzZWQsIGVyci5QQVVTRURfUkVHSVNUUlkKICAgICEKICAgIGFzc2VydCAvLyBSZWdpc3RyeSdzIG5vbi1hZG1pbiBtZXRob2RzIGFyZSBwYXVzZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTozNjQKICAgIC8vIHNlbGYuYXNzZXJ0X2RyYWZ0X2FuZF9wcm9wb3NlcigpCiAgICBjYWxsc3ViIGFzc2VydF9kcmFmdF9hbmRfcHJvcG9zZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTozNjcKICAgIC8vIGFzc2VydCBwYXlsb2FkLmxlbmd0aCA+IDAsIGVyci5FTVBUWV9QQVlMT0FECiAgICBzd2FwCiAgICBsZW4KICAgIGR1cAogICAgY292ZXIgMgogICAgYXNzZXJ0IC8vIEVtcHR5IHBheWxvYWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo3MDgKICAgIC8vIHNlbGYubWV0YWRhdGFfdXBsb2FkZWQudmFsdWUgPSBUcnVlCiAgICBieXRlYyAzMyAvLyAweDZkNjU3NDYxNjQ2MTc0NjE1Zjc1NzA2YzZmNjE2NDY1NjQKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjcxMAogICAgLy8gaWYgaXNfZmlyc3RfaW5fZ3JvdXA6CiAgICBieiB1cGxvYWRfbWV0YWRhdGFfZWxzZV9ib2R5QDMKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjcxMS03MTIKICAgIC8vICMgY2xlYXIgYW5kIHdyaXRlIHRoZSBtZXRhZGF0YSB0byB0aGUgYm94CiAgICAvLyBkZWwgc2VsZi5tZXRhZGF0YS52YWx1ZQogICAgYnl0ZWMgOSAvLyAiTSIKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjcxMwogICAgLy8gc2VsZi5tZXRhZGF0YS52YWx1ZSA9IHBheWxvYWQKICAgIGJ5dGVjIDkgLy8gIk0iCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGJ5dGVjIDkgLy8gIk0iCiAgICBzd2FwCiAgICBib3hfcHV0Cgp1cGxvYWRfbWV0YWRhdGFfYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjY4OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCnVwbG9hZF9tZXRhZGF0YV9lbHNlX2JvZHlAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo3MTUtNzE2CiAgICAvLyAjIGFwcGVuZCB0aGUgbWV0YWRhdGEgdG8gdGhlIGJveAogICAgLy8gb2xkX3NpemUgPSBzZWxmLm1ldGFkYXRhLmxlbmd0aAogICAgYnl0ZWMgOSAvLyAiTSIKICAgIGJveF9sZW4KICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm1ldGFkYXRhIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjcxNwogICAgLy8gc2VsZi5tZXRhZGF0YS5yZXNpemUoc2VsZi5tZXRhZGF0YS5sZW5ndGggKyBwYXlsb2FkLmxlbmd0aCkKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICArCiAgICBieXRlYyA5IC8vICJNIgogICAgc3dhcAogICAgYm94X3Jlc2l6ZQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjcxOAogICAgLy8gc2VsZi5tZXRhZGF0YS5yZXBsYWNlKG9sZF9zaXplLCBwYXlsb2FkKQogICAgYnl0ZWMgOSAvLyAiTSIKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgYm94X3JlcGxhY2UKICAgIGIgdXBsb2FkX21ldGFkYXRhX2FmdGVyX2lmX2Vsc2VANAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5wcm9wb3NhbC5jb250cmFjdC5Qcm9wb3NhbC5kcm9wW3JvdXRpbmddKCkgLT4gdm9pZDoKZHJvcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTozNTgKICAgIC8vIGFzc2VydCBzZWxmLmlzX3JlZ2lzdHJ5X2NhbGwoKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgY2FsbHN1YiBpc19yZWdpc3RyeV9jYWxsCiAgICBhc3NlcnQgLy8gVW5hdXRob3JpemVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MzU5CiAgICAvLyBpZiBzZWxmLnN0YXR1cy52YWx1ZSAhPSBlbm0uU1RBVFVTX0RSQUZUIG9yIHNlbGYuZmluYWxpemVkLnZhbHVlOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gMHg3Mzc0NjE3NDc1NzMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zdGF0dXMgZXhpc3RzCiAgICBpbnRjXzMgLy8gMTAKICAgICE9CiAgICBibnogZHJvcF9pZl9ib2R5QDcKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vIDB4NjY2OTZlNjE2YzY5N2E2NTY0CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZmluYWxpemVkIGV4aXN0cwogICAgYnogZHJvcF9hZnRlcl9pZl9lbHNlQDgKCmRyb3BfaWZfYm9keUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjM2MAogICAgLy8gcmV0dXJuIHR5cC5FcnJvcihlcnIuQVJDXzY1X1BSRUZJWCArIGVyci5XUk9OR19QUk9QT1NBTF9TVEFUVVMpCiAgICBieXRlYyAyMyAvLyAiRVJSOldyb25nIFByb3Bvc2FsIFN0YXR1cyBvciBmaW5hbGl6ZWQiCgpkcm9wX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLnByb3Bvc2FsLmNvbnRyYWN0LlByb3Bvc2FsLmRyb3BfY2hlY2tfYXV0aG9yaXphdGlvbkA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjczMQogICAgLy8gaWYgZXJyb3IgIT0gdHlwLkVycm9yKCIiKToKICAgIGR1cAogICAgYnl0ZWNfMSAvLyAiIgogICAgIT0KICAgIGJ6IGRyb3BfYWZ0ZXJfaWZfZWxzZUAzCgpkcm9wX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLnByb3Bvc2FsLmNvbnRyYWN0LlByb3Bvc2FsLmRyb3BANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo3MjAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWMgMTAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmRyb3BfYWZ0ZXJfaWZfZWxzZUAzOgogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NzM1CiAgICAvLyByZWNlaXZlcj1zZWxmLnByb3Bvc2VyLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gMHg3MDcyNmY3MDZmNzM2NTcyCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucHJvcG9zZXIgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NzM0LTczNgogICAgLy8gc2VsZi50cmFuc2Zlcl9sb2NrZWRfYW1vdW50KAogICAgLy8gICAgIHJlY2VpdmVyPXNlbGYucHJvcG9zZXIudmFsdWUsCiAgICAvLyApCiAgICBjYWxsc3ViIHRyYW5zZmVyX2xvY2tlZF9hbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo3MzgKICAgIC8vIGRlbCBzZWxmLm1ldGFkYXRhLnZhbHVlCiAgICBieXRlYyA5IC8vICJNIgogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NzM5CiAgICAvLyBzZWxmLmZpbmFsaXplZC52YWx1ZSA9IFRydWUKICAgIGJ5dGVjXzIgLy8gMHg2NjY5NmU2MTZjNjk3YTY1NjQKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5Ojc0MQogICAgLy8gcmV0dXJuIHR5cC5FcnJvcigiIikKICAgIGJ5dGVjXzEgLy8gIiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo3MjAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBiIGRyb3BfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMucHJvcG9zYWwuY29udHJhY3QuUHJvcG9zYWwuZHJvcEA0Cgpkcm9wX2FmdGVyX2lmX2Vsc2VAODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTozNjEKICAgIC8vIHJldHVybiB0eXAuRXJyb3IoIiIpCiAgICBieXRlY18xIC8vICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NzMwCiAgICAvLyBlcnJvciA9IHNlbGYuZHJvcF9jaGVja19hdXRob3JpemF0aW9uKCkKICAgIGIgZHJvcF9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5wcm9wb3NhbC5jb250cmFjdC5Qcm9wb3NhbC5kcm9wX2NoZWNrX2F1dGhvcml6YXRpb25AOQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5wcm9wb3NhbC5jb250cmFjdC5Qcm9wb3NhbC5zdWJtaXRbcm91dGluZ10oKSAtPiB2b2lkOgpzdWJtaXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NDQ0CiAgICAvLyBCeXRlcyhyZWdfY2ZnLkdTX0tFWV9QQVVTRURfUkVHSVNUUlkpCiAgICBieXRlYyAzMSAvLyAweDcwNjE3NTczNjU2NDVmNzI2NTY3Njk3Mzc0NzI3OQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjQ0My00NDUKICAgIC8vIHJlZ2lzdHJ5X3BhdXNlZCA9IHNlbGYuZ2V0X3VpbnRfZnJvbV9yZWdpc3RyeV9jb25maWcoCiAgICAvLyAgICAgQnl0ZXMocmVnX2NmZy5HU19LRVlfUEFVU0VEX1JFR0lTVFJZKQogICAgLy8gKQogICAgY2FsbHN1YiBnZXRfdWludF9mcm9tX3JlZ2lzdHJ5X2NvbmZpZwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjQ0NgogICAgLy8gYXNzZXJ0IG5vdCByZWdpc3RyeV9wYXVzZWQsIGVyci5QQVVTRURfUkVHSVNUUlkKICAgICEKICAgIGFzc2VydCAvLyBSZWdpc3RyeSdzIG5vbi1hZG1pbiBtZXRob2RzIGFyZSBwYXVzZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTozNTEKICAgIC8vIHNlbGYuYXNzZXJ0X2RyYWZ0X2FuZF9wcm9wb3NlcigpCiAgICBjYWxsc3ViIGFzc2VydF9kcmFmdF9hbmRfcHJvcG9zZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTozNTIKICAgIC8vIGVsYXBzZWRfZGlzY3Vzc2lvbl9kdXJhdGlvbiA9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wIC0gc2VsZi5vcGVuX3RzLnZhbHVlCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjcgLy8gMHg2ZjcwNjU2ZTVmNzQ2OTZkNjU3Mzc0NjE2ZDcwCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYub3Blbl90cyBleGlzdHMKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTozNTQKICAgIC8vIGVsYXBzZWRfZGlzY3Vzc2lvbl9kdXJhdGlvbiA+PSBzZWxmLmRpc2N1c3Npb25fZHVyYXRpb24udmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAzNiAvLyAweDY0Njk3MzYzNzU3MzczNjk2ZjZlNWY2NDc1NzI2MTc0Njk2ZjZlCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZGlzY3Vzc2lvbl9kdXJhdGlvbiBleGlzdHMKICAgID49CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MzUzLTM1NQogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBlbGFwc2VkX2Rpc2N1c3Npb25fZHVyYXRpb24gPj0gc2VsZi5kaXNjdXNzaW9uX2R1cmF0aW9uLnZhbHVlCiAgICAvLyApLCBlcnIuVE9PX0VBUkxZCiAgICBhc3NlcnQgLy8gVG9vIGVhcmx5CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NzU5CiAgICAvLyBhc3NlcnQgc2VsZi5tZXRhZGF0YV91cGxvYWRlZC52YWx1ZSwgZXJyLk1JU1NJTkdfTUVUQURBVEEKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAzMyAvLyAweDZkNjU3NDYxNjQ2MTc0NjE1Zjc1NzA2YzZmNjE2NDY1NjQKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5tZXRhZGF0YV91cGxvYWRlZCBleGlzdHMKICAgIGFzc2VydCAvLyBNaXNzaW5nIE1ldGFkYXRhCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NzYzCiAgICAvLyBzZWxmLmdldF9ieXRlc19mcm9tX3JlZ2lzdHJ5X2NvbmZpZyhCeXRlcyhyZWdfY2ZnLkdTX0tFWV9YR09WX0RBRU1PTikpCiAgICBieXRlYyAzOSAvLyAweDc4Njc2Zjc2NWY2NDYxNjU2ZDZmNmUKICAgIGNhbGxzdWIgZ2V0X2J5dGVzX2Zyb21fcmVnaXN0cnlfY29uZmlnCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NzYyLTc2NAogICAgLy8gcmVjZWl2ZXI9QWNjb3VudCgKICAgIC8vICAgICBzZWxmLmdldF9ieXRlc19mcm9tX3JlZ2lzdHJ5X2NvbmZpZyhCeXRlcyhyZWdfY2ZnLkdTX0tFWV9YR09WX0RBRU1PTikpCiAgICAvLyApLAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBBZGRyZXNzIGxlbmd0aCBpcyAzMiBieXRlcwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5Ojc2NgogICAgLy8gc2VsZi5vcGVuX3Byb3Bvc2FsX2ZlZS52YWx1ZSwgc2VsZi5kYWVtb25fb3BzX2Z1bmRpbmdfYnBzLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjUgLy8gMHg2ZjcwNjU2ZTVmNzA3MjZmNzA2ZjczNjE2YzVmNjY2NTY1CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYub3Blbl9wcm9wb3NhbF9mZWUgZXhpc3RzCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjYgLy8gMHg2NDYxNjU2ZDZmNmU1ZjZmNzA2NTcyNjE3NDY5NmY2ZTVmNjY3NTZlNjQ2OTZlNjc1ZjYyNzA3MwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmRhZW1vbl9vcHNfZnVuZGluZ19icHMgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NDA2CiAgICAvLyByZXR1cm4gYW1vdW50ICogZnJhY3Rpb25faW5fYnBzIC8vIGNvbnN0LkJQUwogICAgKgogICAgaW50YyA0IC8vIDEwMDAwCiAgICAvCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NzYxLTc2OAogICAgLy8gc2VsZi5wYXkoCiAgICAvLyAgICAgcmVjZWl2ZXI9QWNjb3VudCgKICAgIC8vICAgICAgICAgc2VsZi5nZXRfYnl0ZXNfZnJvbV9yZWdpc3RyeV9jb25maWcoQnl0ZXMocmVnX2NmZy5HU19LRVlfWEdPVl9EQUVNT04pKQogICAgLy8gICAgICksCiAgICAvLyAgICAgYW1vdW50PXNlbGYucmVsYXRpdmVfdG9fYWJzb2x1dGVfYW1vdW50KAogICAgLy8gICAgICAgICBzZWxmLm9wZW5fcHJvcG9zYWxfZmVlLnZhbHVlLCBzZWxmLmRhZW1vbl9vcHNfZnVuZGluZ19icHMudmFsdWUKICAgIC8vICAgICApLAogICAgLy8gKQogICAgY2FsbHN1YiBwYXkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo3NjkKICAgIC8vIHNlbGYuc3RhdHVzLnZhbHVlID0gVUludDY0KGVubS5TVEFUVVNfU1VCTUlUVEVEKQogICAgYnl0ZWNfMCAvLyAweDczNzQ2MTc0NzU3MwogICAgcHVzaGludCAyMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo3NzAKICAgIC8vIHNlbGYuc3VibWlzc2lvbl90cy52YWx1ZSA9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wCiAgICBieXRlYyAzMiAvLyAweDczNzU2MjZkNjk3MzczNjk2ZjZlNWY3NDY5NmQ2NTczNzQ2MTZkNzAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NzQzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5wcm9wb3NhbC5jb250cmFjdC5Qcm9wb3NhbC5hc3NpZ25fdm90ZXJzW3JvdXRpbmddKCkgLT4gdm9pZDoKYXNzaWduX3ZvdGVyczoKICAgIGJ5dGVjXzEgLy8gIiIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5Ojc4NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cG4gMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgY292ZXIgMgogICAgcHVzaGludCA0MAogICAgKgogICAgcHVzaGludCAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxzbWFydF9jb250cmFjdHMuY29tbW9uLmFiaV90eXBlcy5Db21taXR0ZWVNZW1iZXI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MzAxCiAgICAvLyBhc3NlcnQgc2VsZi5pc194Z292X2RhZW1vbigpLCBlcnIuVU5BVVRIT1JJWkVECiAgICBjYWxsc3ViIGlzX3hnb3ZfZGFlbW9uCiAgICBhc3NlcnQgLy8gVW5hdXRob3JpemVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MzAyCiAgICAvLyBhc3NlcnQgc2VsZi5zdGF0dXMudmFsdWUgPT0gZW5tLlNUQVRVU19TVUJNSVRURUQsIGVyci5XUk9OR19QUk9QT1NBTF9TVEFUVVMKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vIDB4NzM3NDYxNzQ3NTczCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc3RhdHVzIGV4aXN0cwogICAgcHVzaGludCAyMAogICAgPT0KICAgIGFzc2VydCAvLyBXcm9uZyBQcm9wb3NhbCBTdGF0dXMgb3IgZmluYWxpemVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6ODExCiAgICAvLyBpZiBUeG4uZ3JvdXBfaW5kZXggPT0gMDoKICAgIHR4biBHcm91cEluZGV4CiAgICBibnogYXNzaWduX3ZvdGVyc19lbHNlX2JvZHlANwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjgxMi04MTMKICAgIC8vICMgQ2hlY2sgdGhhdCB0aGUgZW50aXJlIGdyb3VwIGNhbGxzIHRoZSBzYW1lIGFwcCBhbmQgbWV0aG9kCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoMSwgR2xvYmFsLmdyb3VwX3NpemUpOgogICAgZ2xvYmFsIEdyb3VwU2l6ZQogICAgYnVyeSAzCiAgICBpbnRjXzEgLy8gMQogICAgYnVyeSA0Cgphc3NpZ25fdm90ZXJzX2Zvcl9oZWFkZXJAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo4MTItODEzCiAgICAvLyAjIENoZWNrIHRoYXQgdGhlIGVudGlyZSBncm91cCBjYWxscyB0aGUgc2FtZSBhcHAgYW5kIG1ldGhvZAogICAgLy8gZm9yIGkgaW4gdXJhbmdlKDEsIEdsb2JhbC5ncm91cF9zaXplKToKICAgIGRpZyAzCiAgICBkaWcgMwogICAgPAogICAgYnogYXNzaWduX3ZvdGVyc19hZnRlcl9pZl9lbHNlQDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo4MTQKICAgIC8vIHNlbGYuYXNzZXJ0X3NhbWVfYXBwX2FuZF9tZXRob2QoaSkKICAgIGRpZyAzCiAgICBkdXAKICAgIGNhbGxzdWIgYXNzZXJ0X3NhbWVfYXBwX2FuZF9tZXRob2QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo4MTItODEzCiAgICAvLyAjIENoZWNrIHRoYXQgdGhlIGVudGlyZSBncm91cCBjYWxscyB0aGUgc2FtZSBhcHAgYW5kIG1ldGhvZAogICAgLy8gZm9yIGkgaW4gdXJhbmdlKDEsIEdsb2JhbC5ncm91cF9zaXplKToKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDQKICAgIGIgYXNzaWduX3ZvdGVyc19mb3JfaGVhZGVyQDMKCmFzc2lnbl92b3RlcnNfYWZ0ZXJfaWZfZWxzZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjgxOQogICAgLy8gZm9yIGkgaW4gdXJhbmdlKHZvdGVycy5sZW5ndGgpOgogICAgaW50Y18wIC8vIDAKICAgIGJ1cnkgNAoKYXNzaWduX3ZvdGVyc19mb3JfaGVhZGVyQDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6ODE5CiAgICAvLyBmb3IgaSBpbiB1cmFuZ2Uodm90ZXJzLmxlbmd0aCk6CiAgICBkaWcgMwogICAgZGlnIDEKICAgIDwKICAgIGJ6IGFzc2lnbl92b3RlcnNfYWZ0ZXJfZm9yQDEyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6ODIwCiAgICAvLyBzZWxmLl9hc3NpZ25fdm90ZXIodm90ZXJzW2ldLmFkZHJlc3MsIHZvdGVyc1tpXS52b3RpbmdfcG93ZXIpCiAgICBkaWcgMQogICAgZXh0cmFjdCAyIDAKICAgIGRpZyA0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIHB1c2hpbnQgNDAKICAgICoKICAgIHB1c2hpbnQgNDAKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZHVwCiAgICBleHRyYWN0IDAgMzIKICAgIHN3YXAKICAgIGludGNfMiAvLyAzMgogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTozMDcKICAgIC8vIGFzc2VydCB2b3RlciBub3QgaW4gc2VsZi52b3RlcnMsIGVyci5WT1RFUl9BTFJFQURZX0FTU0lHTkVECiAgICBieXRlYyAxOCAvLyAiViIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIFZvdGVyIEFscmVhZHkgQXNzaWduZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTozMDgKICAgIC8vIGFzc2VydCB2b3RpbmdfcG93ZXIgPiAwLCBlcnIuSU5WQUxJRF9WT1RJTkdfUE9XRVIKICAgIGRpZyAxCiAgICBhc3NlcnQgLy8gSW52YWxpZCBWb3RpbmcgUG93ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo3NzUKICAgIC8vIHNlbGYudm90ZXJzW3ZvdGVyXSA9IHZvdGluZ19wb3dlcgogICAgZGlnIDEKICAgIGl0b2IKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo3NzYKICAgIC8vIHNlbGYuYXNzaWduZWRfbWVtYmVycy52YWx1ZSArPSAxCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNSAvLyAweDYxNzM3MzY5Njc2ZTY1NjQ1ZjZkNjU2ZDYyNjU3MjczCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzaWduZWRfbWVtYmVycyBleGlzdHMKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBieXRlYyA1IC8vIDB4NjE3MzczNjk2NzZlNjU2NDVmNmQ2NTZkNjI2NTcyNzMKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6Nzc3CiAgICAvLyBzZWxmLmFzc2lnbmVkX3ZvdGVzLnZhbHVlICs9IHZvdGluZ19wb3dlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE3IC8vIDB4NjE3MzczNjk2NzZlNjU2NDVmNzY2Zjc0NjU3MwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2lnbmVkX3ZvdGVzIGV4aXN0cwogICAgKwogICAgYnl0ZWMgMTcgLy8gMHg2MTczNzM2OTY3NmU2NTY0NWY3NjZmNzQ2NTczCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjgxOQogICAgLy8gZm9yIGkgaW4gdXJhbmdlKHZvdGVycy5sZW5ndGgpOgogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgNAogICAgYiBhc3NpZ25fdm90ZXJzX2Zvcl9oZWFkZXJAOQoKYXNzaWduX3ZvdGVyc19hZnRlcl9mb3JAMTI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6ODIyCiAgICAvLyBpZiBzZWxmLmFzc2lnbmVkX21lbWJlcnMudmFsdWUgPT0gc2VsZi5jb21taXR0ZWVfbWVtYmVycy52YWx1ZToKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1IC8vIDB4NjE3MzczNjk2NzZlNjU2NDVmNmQ2NTZkNjI2NTcyNzMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hc3NpZ25lZF9tZW1iZXJzIGV4aXN0cwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDExIC8vIDB4NjM2ZjZkNmQ2OTc0NzQ2NTY1NWY2ZDY1NmQ2MjY1NzI3MwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNvbW1pdHRlZV9tZW1iZXJzIGV4aXN0cwogICAgPT0KICAgIGJ6IGFzc2lnbl92b3RlcnNfYWZ0ZXJfaWZfZWxzZUAxNAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjgyNAogICAgLy8gc2VsZi5hc3NpZ25lZF92b3Rlcy52YWx1ZSA9PSBzZWxmLmNvbW1pdHRlZV92b3Rlcy52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE3IC8vIDB4NjE3MzczNjk2NzZlNjU2NDVmNzY2Zjc0NjU3MwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2lnbmVkX3ZvdGVzIGV4aXN0cwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE1IC8vIDB4NjM2ZjZkNmQ2OTc0NzQ2NTY1NWY3NjZmNzQ2NTczCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY29tbWl0dGVlX3ZvdGVzIGV4aXN0cwogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo4MjMtODI1CiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIHNlbGYuYXNzaWduZWRfdm90ZXMudmFsdWUgPT0gc2VsZi5jb21taXR0ZWVfdm90ZXMudmFsdWUKICAgIC8vICksIGVyci5WT1RJTkdfUE9XRVJfTUlTTUFUQ0gKICAgIGFzc2VydCAvLyBWb3RpbmcgUG93ZXIgTWlzbWF0Y2gKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo4MjYKICAgIC8vIHNlbGYuc3RhdHVzLnZhbHVlID0gVUludDY0KGVubS5TVEFUVVNfVk9USU5HKQogICAgYnl0ZWNfMCAvLyAweDczNzQ2MTc0NzU3MwogICAgcHVzaGludCAyNQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo4MjcKICAgIC8vIHNlbGYudm90ZV9vcGVuX3RzLnZhbHVlID0gR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGJ5dGVjIDI4IC8vIDB4NzY2Zjc0NjU1ZjZmNzA2NTZlNjk2ZTY3NWY3NDY5NmQ2NTczNzQ2MTZkNzAKICAgIGRpZyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjgzMgogICAgLy8gdm90ZV9jbG9zaW5nPXNlbGYudm90ZV9vcGVuX3RzLnZhbHVlICsgc2VsZi52b3RpbmdfZHVyYXRpb24udmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMzAgLy8gMHg3NjZmNzQ2OTZlNjc1ZjY0NzU3MjYxNzQ2OTZmNmUKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi52b3RpbmdfZHVyYXRpb24gZXhpc3RzCiAgICBkaWcgMQogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjgzMwogICAgLy8gcXVvcnVtX3ZvdGVycz1hcmM0LlVJbnQzMihzZWxmLnF1b3J1bV90aHJlc2hvbGQudmFsdWUpLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDIxIC8vIDB4NzE3NTZmNzI3NTZkNWY3NDY4NzI2NTczNjg2ZjZjNjQKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5xdW9ydW1fdGhyZXNob2xkIGV4aXN0cwogICAgaXRvYgogICAgZHVwCiAgICBiaXRsZW4KICAgIGludGNfMiAvLyAzMgogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZXh0cmFjdCA0IDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo4MzUKICAgIC8vIHNlbGYud2VpZ2h0ZWRfcXVvcnVtX3RocmVzaG9sZC52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDIyIC8vIDB4Nzc2NTY5Njc2ODc0NjU2NDVmNzE3NTZmNzI3NTZkNWY3NDY4NzI2NTczNjg2ZjZjNjQKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi53ZWlnaHRlZF9xdW9ydW1fdGhyZXNob2xkIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjgzNC04MzYKICAgIC8vIHdlaWdodGVkX3F1b3J1bV92b3Rlcz1hcmM0LlVJbnQzMigKICAgIC8vICAgICBzZWxmLndlaWdodGVkX3F1b3J1bV90aHJlc2hvbGQudmFsdWUKICAgIC8vICksCiAgICBpdG9iCiAgICBkdXAKICAgIGJpdGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBleHRyYWN0IDQgNAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjgzNwogICAgLy8gcm91bmQ9R2xvYmFsLnJvdW5kLAogICAgZ2xvYmFsIFJvdW5kCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6ODMwLTgzOAogICAgLy8gdHlwLlN1Ym1pdHRlZCgKICAgIC8vICAgICB2b3RlX29wZW5pbmc9c2VsZi52b3RlX29wZW5fdHMudmFsdWUsCiAgICAvLyAgICAgdm90ZV9jbG9zaW5nPXNlbGYudm90ZV9vcGVuX3RzLnZhbHVlICsgc2VsZi52b3RpbmdfZHVyYXRpb24udmFsdWUsCiAgICAvLyAgICAgcXVvcnVtX3ZvdGVycz1hcmM0LlVJbnQzMihzZWxmLnF1b3J1bV90aHJlc2hvbGQudmFsdWUpLAogICAgLy8gICAgIHdlaWdodGVkX3F1b3J1bV92b3Rlcz1hcmM0LlVJbnQzMigKICAgIC8vICAgICAgICAgc2VsZi53ZWlnaHRlZF9xdW9ydW1fdGhyZXNob2xkLnZhbHVlCiAgICAvLyAgICAgKSwKICAgIC8vICAgICByb3VuZD1HbG9iYWwucm91bmQsCiAgICAvLyApCiAgICB1bmNvdmVyIDQKICAgIGl0b2IKICAgIHVuY292ZXIgNAogICAgaXRvYgogICAgY29uY2F0CiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGl0b2IKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjgyOS04MzkKICAgIC8vIGFyYzQuZW1pdCgKICAgIC8vICAgICB0eXAuU3VibWl0dGVkKAogICAgLy8gICAgICAgICB2b3RlX29wZW5pbmc9c2VsZi52b3RlX29wZW5fdHMudmFsdWUsCiAgICAvLyAgICAgICAgIHZvdGVfY2xvc2luZz1zZWxmLnZvdGVfb3Blbl90cy52YWx1ZSArIHNlbGYudm90aW5nX2R1cmF0aW9uLnZhbHVlLAogICAgLy8gICAgICAgICBxdW9ydW1fdm90ZXJzPWFyYzQuVUludDMyKHNlbGYucXVvcnVtX3RocmVzaG9sZC52YWx1ZSksCiAgICAvLyAgICAgICAgIHdlaWdodGVkX3F1b3J1bV92b3Rlcz1hcmM0LlVJbnQzMigKICAgIC8vICAgICAgICAgICAgIHNlbGYud2VpZ2h0ZWRfcXVvcnVtX3RocmVzaG9sZC52YWx1ZQogICAgLy8gICAgICAgICApLAogICAgLy8gICAgICAgICByb3VuZD1HbG9iYWwucm91bmQsCiAgICAvLyAgICAgKQogICAgLy8gKQogICAgcHVzaGJ5dGVzIDB4ZGNlYmUxYzUgLy8gbWV0aG9kICJTdWJtaXR0ZWQodWludDY0LHVpbnQ2NCx1aW50MzIsdWludDMyLHVpbnQ2NCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwoKYXNzaWduX3ZvdGVyc19hZnRlcl9pZl9lbHNlQDE0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5Ojc4NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmFzc2lnbl92b3RlcnNfZWxzZV9ib2R5QDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6ODE2LTgxNwogICAgLy8gIyBDaGVjayB0aGF0IHRoZSBmaXJzdCB0cmFuc2FjdGlvbiBpbiB0aGUgZ3JvdXAgY2FsbHMgdGhlIHNhbWUgYXBwIGFuZCBtZXRob2QKICAgIC8vIHNlbGYuYXNzZXJ0X3NhbWVfYXBwX2FuZF9tZXRob2QoVUludDY0KDApKQogICAgaW50Y18wIC8vIDAKICAgIGNhbGxzdWIgYXNzZXJ0X3NhbWVfYXBwX2FuZF9tZXRob2QKICAgIGIgYXNzaWduX3ZvdGVyc19hZnRlcl9pZl9lbHNlQDgKCgovLyBzbWFydF9jb250cmFjdHMucHJvcG9zYWwuY29udHJhY3QuUHJvcG9zYWwudm90ZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnZvdGU6CiAgICBieXRlY18xIC8vICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6ODQxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgc3dhcAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGNvdmVyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToyNjIKICAgIC8vIGFzc2VydCBzZWxmLmlzX3JlZ2lzdHJ5X2NhbGwoKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgY2FsbHN1YiBpc19yZWdpc3RyeV9jYWxsCiAgICBhc3NlcnQgLy8gVW5hdXRob3JpemVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MjY0CiAgICAvLyBpZiBzZWxmLnN0YXR1cy52YWx1ZSAhPSBlbm0uU1RBVFVTX1ZPVElORzoKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vIDB4NzM3NDYxNzQ3NTczCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc3RhdHVzIGV4aXN0cwogICAgcHVzaGludCAyNQogICAgIT0KICAgIGJ6IHZvdGVfYWZ0ZXJfaWZfZWxzZUAyMAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjI2NQogICAgLy8gcmV0dXJuIHR5cC5FcnJvcihlcnIuQVJDXzY1X1BSRUZJWCArIGVyci5XUk9OR19QUk9QT1NBTF9TVEFUVVMpCiAgICBieXRlYyAyMyAvLyAiRVJSOldyb25nIFByb3Bvc2FsIFN0YXR1cyBvciBmaW5hbGl6ZWQiCgp2b3RlX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLnByb3Bvc2FsLmNvbnRyYWN0LlByb3Bvc2FsLnZvdGVfY2hlY2tfYXV0aG9yaXphdGlvbkAyMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo4NjQKICAgIC8vIGlmIGVycm9yICE9IHR5cC5FcnJvcigiIik6CiAgICBkdXAKICAgIGJ5dGVjXzEgLy8gIiIKICAgICE9CiAgICBieiB2b3RlX2FmdGVyX2lmX2Vsc2VAMwogICAgYnVyeSAxCiAgICBidXJ5IDEKICAgIGJ1cnkgMQoKdm90ZV9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5wcm9wb3NhbC5jb250cmFjdC5Qcm9wb3NhbC52b3RlQDEwOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5Ojg0MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlYyAxMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKdm90ZV9hZnRlcl9pZl9lbHNlQDM6CiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToyNzgKICAgIC8vIGlmIHZvdGVyIG5vdCBpbiBzZWxmLnZvdGVyczoKICAgIGJ5dGVjIDE4IC8vICJWIgogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJueiB2b3RlX2FmdGVyX2lmX2Vsc2VAMTMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToyNzkKICAgIC8vIHJldHVybiB0eXAuRXJyb3IoZXJyLkFSQ182NV9QUkVGSVggKyBlcnIuVk9URVJfTk9UX0ZPVU5EKQogICAgYnl0ZWMgNDAgLy8gIkVSUjpWb3RlciBub3QgZm91bmQiCgp2b3RlX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLnByb3Bvc2FsLmNvbnRyYWN0LlByb3Bvc2FsLnZvdGVfaW5wdXRfdmFsaWRhdGlvbkAxNzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo4NjgKICAgIC8vIGlmIGVycm9yID09IHR5cC5FcnJvcigiIik6CiAgICBkdXAKICAgIGJ5dGVjXzEgLy8gIiIKICAgID09CiAgICBieiB2b3RlX2Vsc2VfYm9keUA4CiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo4NjkKICAgIC8vIHZvdGVzID0gc2VsZi52b3RlcnNbdm90ZXJdCiAgICBkdXAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnZvdGVycyBlbnRyeSBleGlzdHMKICAgIGJ0b2kKICAgIGR1cAogICAgYnVyeSA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6ODcxCiAgICAvLyBzZWxmLnZvdGVkX21lbWJlcnMudmFsdWUgKz0gMQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gMHg3NjZmNzQ2NTY0NWY2ZDY1NmQ2MjY1NzI3MwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnZvdGVkX21lbWJlcnMgZXhpc3RzCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnl0ZWMgNiAvLyAweDc2NmY3NDY1NjQ1ZjZkNjU2ZDYyNjU3MjczCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5Ojg3MgogICAgLy8gaWYgc2VsZi5pc19ib3ljb3R0KHZvdGVzLCBhcHByb3ZhbHMsIHJlamVjdGlvbnMpOgogICAgZGlnIDMKICAgIGRpZyA1CiAgICBjYWxsc3ViIGlzX2JveWNvdHQKICAgIGJ6IHZvdGVfZWxzZV9ib2R5QDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo4NzMKICAgIC8vIHNlbGYuYm95Y290dGVkX21lbWJlcnMudmFsdWUgKz0gMQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDEzIC8vIDB4NjI2Zjc5NjM2Zjc0NzQ2NTY0NWY2ZDY1NmQ2MjY1NzI3MwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveWNvdHRlZF9tZW1iZXJzIGV4aXN0cwogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ5dGVjIDEzIC8vIDB4NjI2Zjc5NjM2Zjc0NzQ2NTY0NWY2ZDY1NmQ2MjY1NzI3MwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo4NzQKICAgIC8vIGJveWNvdHRlZCA9IFRydWUKICAgIGludGNfMSAvLyAxCiAgICBjb3ZlciA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6ODc2CiAgICAvLyBudWxscyA9IFVJbnQ2NCgwKQogICAgaW50Y18wIC8vIDAKCnZvdGVfYWZ0ZXJfaWZfZWxzZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5Ojg4OAogICAgLy8gc2VsZi5fdW5hc3NpZ25fdm90ZXIodm90ZXIsIHZvdGVzKQogICAgdW5jb3ZlciAyCiAgICBkaWcgNgogICAgY2FsbHN1YiBfdW5hc3NpZ25fdm90ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo4OTMKICAgIC8vIHNlbGYudm90ZXJzLmJveCh2b3Rlcikua2V5WzE6XQogICAgc3dhcAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICBkaWcgMQogICAgPj0KICAgIGludGNfMSAvLyAxCiAgICBkaWcgMgogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIHN3YXAKICAgIHN1YnN0cmluZzMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo4OTItODk0CiAgICAvLyB4Z292PWFyYzQuQWRkcmVzcygKICAgIC8vICAgICBzZWxmLnZvdGVycy5ib3godm90ZXIpLmtleVsxOl0KICAgIC8vICksICAjIHJlbW92ZSB0aGUgQm94IHByZWZpeAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBBZGRyZXNzIGxlbmd0aCBpcyAzMiBieXRlcwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5Ojg5NQogICAgLy8gYXBwcm92YWxzPWFyYzQuVUludDMyKGFwcHJvdmFscyksCiAgICB1bmNvdmVyIDIKICAgIGl0b2IKICAgIGR1cAogICAgYml0bGVuCiAgICBpbnRjXzIgLy8gMzIKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGV4dHJhY3QgNCA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6ODk2CiAgICAvLyByZWplY3Rpb25zPWFyYzQuVUludDMyKHJlamVjdGlvbnMpLAogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICBkdXAKICAgIGJpdGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBleHRyYWN0IDQgNAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5Ojg5NwogICAgLy8gbnVsbHM9YXJjNC5VSW50MzIobnVsbHMpLAogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICBkdXAKICAgIGJpdGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBleHRyYWN0IDQgNAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5Ojg5OQogICAgLy8gdG90YWxfdm90ZXJzPWFyYzQuVUludDMyKHNlbGYudm90ZWRfbWVtYmVycy52YWx1ZSksCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAweDc2NmY3NDY1NjQ1ZjZkNjU2ZDYyNjU3MjczCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudm90ZWRfbWVtYmVycyBleGlzdHMKICAgIGl0b2IKICAgIGR1cAogICAgYml0bGVuCiAgICBpbnRjXzIgLy8gMzIKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGV4dHJhY3QgNCA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6OTAwCiAgICAvLyB0b3RhbF9ib3ljb3R0PWFyYzQuVUludDMyKHNlbGYuYm95Y290dGVkX21lbWJlcnMudmFsdWUpLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDEzIC8vIDB4NjI2Zjc5NjM2Zjc0NzQ2NTY0NWY2ZDY1NmQ2MjY1NzI3MwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveWNvdHRlZF9tZW1iZXJzIGV4aXN0cwogICAgaXRvYgogICAgZHVwCiAgICBiaXRsZW4KICAgIGludGNfMiAvLyAzMgogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZXh0cmFjdCA0IDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo5MDEKICAgIC8vIHRvdGFsX2FwcHJvdmFscz1hcmM0LlVJbnQzMihzZWxmLmFwcHJvdmFscy52YWx1ZSksCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNyAvLyAweDYxNzA3MDcyNmY3NjYxNmM3MwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFwcHJvdmFscyBleGlzdHMKICAgIGl0b2IKICAgIGR1cAogICAgYml0bGVuCiAgICBpbnRjXzIgLy8gMzIKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGV4dHJhY3QgNCA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6OTAyCiAgICAvLyB0b3RhbF9yZWplY3Rpb25zPWFyYzQuVUludDMyKHNlbGYucmVqZWN0aW9ucy52YWx1ZSksCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOCAvLyAweDcyNjU2YTY1NjM3NDY5NmY2ZTczCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucmVqZWN0aW9ucyBleGlzdHMKICAgIGl0b2IKICAgIGR1cAogICAgYml0bGVuCiAgICBpbnRjXzIgLy8gMzIKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGV4dHJhY3QgNCA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6OTAzCiAgICAvLyB0b3RhbF9udWxscz1hcmM0LlVJbnQzMihzZWxmLm51bGxzLnZhbHVlKSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxNCAvLyAweDZlNzU2YzZjNzMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5udWxscyBleGlzdHMKICAgIGl0b2IKICAgIGR1cAogICAgYml0bGVuCiAgICBpbnRjXzIgLy8gMzIKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGV4dHJhY3QgNCA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6OTA0CiAgICAvLyByb3VuZD1HbG9iYWwucm91bmQsCiAgICBnbG9iYWwgUm91bmQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo4OTEtOTA1CiAgICAvLyB0eXAuVm90ZSgKICAgIC8vICAgICB4Z292PWFyYzQuQWRkcmVzcygKICAgIC8vICAgICAgICAgc2VsZi52b3RlcnMuYm94KHZvdGVyKS5rZXlbMTpdCiAgICAvLyAgICAgKSwgICMgcmVtb3ZlIHRoZSBCb3ggcHJlZml4CiAgICAvLyAgICAgYXBwcm92YWxzPWFyYzQuVUludDMyKGFwcHJvdmFscyksCiAgICAvLyAgICAgcmVqZWN0aW9ucz1hcmM0LlVJbnQzMihyZWplY3Rpb25zKSwKICAgIC8vICAgICBudWxscz1hcmM0LlVJbnQzMihudWxscyksCiAgICAvLyAgICAgYm95Y290dGVkPWJveWNvdHRlZCwKICAgIC8vICAgICB0b3RhbF92b3RlcnM9YXJjNC5VSW50MzIoc2VsZi52b3RlZF9tZW1iZXJzLnZhbHVlKSwKICAgIC8vICAgICB0b3RhbF9ib3ljb3R0PWFyYzQuVUludDMyKHNlbGYuYm95Y290dGVkX21lbWJlcnMudmFsdWUpLAogICAgLy8gICAgIHRvdGFsX2FwcHJvdmFscz1hcmM0LlVJbnQzMihzZWxmLmFwcHJvdmFscy52YWx1ZSksCiAgICAvLyAgICAgdG90YWxfcmVqZWN0aW9ucz1hcmM0LlVJbnQzMihzZWxmLnJlamVjdGlvbnMudmFsdWUpLAogICAgLy8gICAgIHRvdGFsX251bGxzPWFyYzQuVUludDMyKHNlbGYubnVsbHMudmFsdWUpLAogICAgLy8gICAgIHJvdW5kPUdsb2JhbC5yb3VuZCwKICAgIC8vICkKICAgIHVuY292ZXIgOQogICAgdW5jb3ZlciA5CiAgICBjb25jYXQKICAgIHVuY292ZXIgOAogICAgY29uY2F0CiAgICB1bmNvdmVyIDcKICAgIGNvbmNhdAogICAgYnl0ZWMgMTkgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgOQogICAgc2V0Yml0CiAgICBjb25jYXQKICAgIHVuY292ZXIgNgogICAgY29uY2F0CiAgICB1bmNvdmVyIDUKICAgIGNvbmNhdAogICAgdW5jb3ZlciA0CiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgaXRvYgogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6ODkwLTkwNgogICAgLy8gYXJjNC5lbWl0KAogICAgLy8gICAgIHR5cC5Wb3RlKAogICAgLy8gICAgICAgICB4Z292PWFyYzQuQWRkcmVzcygKICAgIC8vICAgICAgICAgICAgIHNlbGYudm90ZXJzLmJveCh2b3Rlcikua2V5WzE6XQogICAgLy8gICAgICAgICApLCAgIyByZW1vdmUgdGhlIEJveCBwcmVmaXgKICAgIC8vICAgICAgICAgYXBwcm92YWxzPWFyYzQuVUludDMyKGFwcHJvdmFscyksCiAgICAvLyAgICAgICAgIHJlamVjdGlvbnM9YXJjNC5VSW50MzIocmVqZWN0aW9ucyksCiAgICAvLyAgICAgICAgIG51bGxzPWFyYzQuVUludDMyKG51bGxzKSwKICAgIC8vICAgICAgICAgYm95Y290dGVkPWJveWNvdHRlZCwKICAgIC8vICAgICAgICAgdG90YWxfdm90ZXJzPWFyYzQuVUludDMyKHNlbGYudm90ZWRfbWVtYmVycy52YWx1ZSksCiAgICAvLyAgICAgICAgIHRvdGFsX2JveWNvdHQ9YXJjNC5VSW50MzIoc2VsZi5ib3ljb3R0ZWRfbWVtYmVycy52YWx1ZSksCiAgICAvLyAgICAgICAgIHRvdGFsX2FwcHJvdmFscz1hcmM0LlVJbnQzMihzZWxmLmFwcHJvdmFscy52YWx1ZSksCiAgICAvLyAgICAgICAgIHRvdGFsX3JlamVjdGlvbnM9YXJjNC5VSW50MzIoc2VsZi5yZWplY3Rpb25zLnZhbHVlKSwKICAgIC8vICAgICAgICAgdG90YWxfbnVsbHM9YXJjNC5VSW50MzIoc2VsZi5udWxscy52YWx1ZSksCiAgICAvLyAgICAgICAgIHJvdW5kPUdsb2JhbC5yb3VuZCwKICAgIC8vICAgICApCiAgICAvLyApCiAgICBwdXNoYnl0ZXMgMHhhOTEwOGExYSAvLyBtZXRob2QgIlZvdGUoYWRkcmVzcyx1aW50MzIsdWludDMyLHVpbnQzMixib29sLHVpbnQzMix1aW50MzIsdWludDMyLHVpbnQzMix1aW50MzIsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6OTA4CiAgICAvLyByZXR1cm4gdHlwLkVycm9yKCIiKQogICAgYnl0ZWNfMSAvLyAiIgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5Ojg0MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGIgdm90ZV9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5wcm9wb3NhbC5jb250cmFjdC5Qcm9wb3NhbC52b3RlQDEwCgp2b3RlX2Vsc2VfYm9keUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5Ojg3OAogICAgLy8gYm95Y290dGVkID0gRmFsc2UKICAgIGludGNfMCAvLyAwCiAgICBjb3ZlciA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6ODgwCiAgICAvLyBudWxscyA9IHZvdGVzIC0gYXBwcm92YWxzIC0gcmVqZWN0aW9ucwogICAgZGlnIDUKICAgIGRpZyAzCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIC0KICAgIGRpZyA1CiAgICBkdXAKICAgIGNvdmVyIDMKICAgIC0KICAgIGR1cAogICAgY292ZXIgMwogICAgY292ZXIgMwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5Ojg4MgogICAgLy8gc2VsZi5hcHByb3ZhbHMudmFsdWUgKz0gYXBwcm92YWxzCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNyAvLyAweDYxNzA3MDcyNmY3NjYxNmM3MwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFwcHJvdmFscyBleGlzdHMKICAgICsKICAgIGJ5dGVjIDcgLy8gMHg2MTcwNzA3MjZmNzY2MTZjNzMKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6ODgzCiAgICAvLyBzZWxmLnJlamVjdGlvbnMudmFsdWUgKz0gcmVqZWN0aW9ucwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDggLy8gMHg3MjY1NmE2NTYzNzQ2OTZmNmU3MwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnJlamVjdGlvbnMgZXhpc3RzCiAgICArCiAgICBieXRlYyA4IC8vIDB4NzI2NTZhNjU2Mzc0Njk2ZjZlNzMKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6ODg0CiAgICAvLyBzZWxmLm51bGxzLnZhbHVlICs9IG51bGxzCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTQgLy8gMHg2ZTc1NmM2YzczCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubnVsbHMgZXhpc3RzCiAgICArCiAgICBieXRlYyAxNCAvLyAweDZlNzU2YzZjNzMKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICBiIHZvdGVfYWZ0ZXJfaWZfZWxzZUA3Cgp2b3RlX2Vsc2VfYm9keUA4OgogICAgYnVyeSAxCiAgICBidXJ5IDEKICAgIGJ1cnkgMQogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6ODQxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYiB2b3RlX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLnByb3Bvc2FsLmNvbnRyYWN0LlByb3Bvc2FsLnZvdGVAMTAKCnZvdGVfYWZ0ZXJfaWZfZWxzZUAxMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToyODEKICAgIC8vIHZvdGVzID0gc2VsZi52b3RlcnNbdm90ZXJdCiAgICBkdXAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnZvdGVycyBlbnRyeSBleGlzdHMKICAgIGJ0b2kKICAgIGR1cAogICAgYnVyeSA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MjgzCiAgICAvLyBpZiAoYXBwcm92YWxzICsgcmVqZWN0aW9ucyA+IHZvdGVzKSBhbmQgbm90IHNlbGYuaXNfYm95Y290dCgKICAgIGRpZyAzCiAgICBkaWcgNQogICAgKwogICAgPAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjI4My0yODUKICAgIC8vIGlmIChhcHByb3ZhbHMgKyByZWplY3Rpb25zID4gdm90ZXMpIGFuZCBub3Qgc2VsZi5pc19ib3ljb3R0KAogICAgLy8gICAgIHZvdGVzLCBhcHByb3ZhbHMsIHJlamVjdGlvbnMKICAgIC8vICk6CiAgICBieiB2b3RlX2FmdGVyX2lmX2Vsc2VAMTYKICAgIGRpZyA0CiAgICBkaWcgMwogICAgZGlnIDUKICAgIGNhbGxzdWIgaXNfYm95Y290dAogICAgYm56IHZvdGVfYWZ0ZXJfaWZfZWxzZUAxNgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjI4NgogICAgLy8gcmV0dXJuIHR5cC5FcnJvcihlcnIuQVJDXzY1X1BSRUZJWCArIGVyci5WT1RFU19JTlZBTElEKQogICAgcHVzaGJ5dGVzICJFUlI6Vm90ZXMgaW52YWxpZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo4NjcKICAgIC8vIGVycm9yID0gc2VsZi52b3RlX2lucHV0X3ZhbGlkYXRpb24odm90ZXIsIGFwcHJvdmFscywgcmVqZWN0aW9ucykKICAgIGIgdm90ZV9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5wcm9wb3NhbC5jb250cmFjdC5Qcm9wb3NhbC52b3RlX2lucHV0X3ZhbGlkYXRpb25AMTcKCnZvdGVfYWZ0ZXJfaWZfZWxzZUAxNjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToyODgKICAgIC8vIHJldHVybiB0eXAuRXJyb3IoIiIpCiAgICBieXRlY18xIC8vICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6ODY3CiAgICAvLyBlcnJvciA9IHNlbGYudm90ZV9pbnB1dF92YWxpZGF0aW9uKHZvdGVyLCBhcHByb3ZhbHMsIHJlamVjdGlvbnMpCiAgICBiIHZvdGVfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMucHJvcG9zYWwuY29udHJhY3QuUHJvcG9zYWwudm90ZV9pbnB1dF92YWxpZGF0aW9uQDE3Cgp2b3RlX2FmdGVyX2lmX2Vsc2VAMjA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MjY3CiAgICAvLyBpZiBub3Qgc2VsZi5pc192b3Rpbmdfb3BlbigpOgogICAgY2FsbHN1YiBpc192b3Rpbmdfb3BlbgogICAgYm56IHZvdGVfYWZ0ZXJfaWZfZWxzZUAyMgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjI2OAogICAgLy8gcmV0dXJuIHR5cC5FcnJvcihlcnIuQVJDXzY1X1BSRUZJWCArIGVyci5WT1RJTkdfUEVSSU9EX0VYUElSRUQpCiAgICBwdXNoYnl0ZXMgIkVSUjpWb3RpbmcgUGVyaW9kIEV4cGlyZWQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6ODYzCiAgICAvLyBlcnJvciA9IHNlbGYudm90ZV9jaGVja19hdXRob3JpemF0aW9uKCkKICAgIGIgdm90ZV9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5wcm9wb3NhbC5jb250cmFjdC5Qcm9wb3NhbC52b3RlX2NoZWNrX2F1dGhvcml6YXRpb25AMjMKCnZvdGVfYWZ0ZXJfaWZfZWxzZUAyMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToyNzAKICAgIC8vIHJldHVybiB0eXAuRXJyb3IoIiIpCiAgICBieXRlY18xIC8vICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6ODYzCiAgICAvLyBlcnJvciA9IHNlbGYudm90ZV9jaGVja19hdXRob3JpemF0aW9uKCkKICAgIGIgdm90ZV9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5wcm9wb3NhbC5jb250cmFjdC5Qcm9wb3NhbC52b3RlX2NoZWNrX2F1dGhvcml6YXRpb25AMjMKCgovLyBzbWFydF9jb250cmFjdHMucHJvcG9zYWwuY29udHJhY3QuUHJvcG9zYWwuc2NydXRpbnlbcm91dGluZ10oKSAtPiB2b2lkOgpzY3J1dGlueToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo0NDQKICAgIC8vIEJ5dGVzKHJlZ19jZmcuR1NfS0VZX1BBVVNFRF9SRUdJU1RSWSkKICAgIGJ5dGVjIDMxIC8vIDB4NzA2MTc1NzM2NTY0NWY3MjY1Njc2OTczNzQ3Mjc5CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NDQzLTQ0NQogICAgLy8gcmVnaXN0cnlfcGF1c2VkID0gc2VsZi5nZXRfdWludF9mcm9tX3JlZ2lzdHJ5X2NvbmZpZygKICAgIC8vICAgICBCeXRlcyhyZWdfY2ZnLkdTX0tFWV9QQVVTRURfUkVHSVNUUlkpCiAgICAvLyApCiAgICBjYWxsc3ViIGdldF91aW50X2Zyb21fcmVnaXN0cnlfY29uZmlnCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NDQ2CiAgICAvLyBhc3NlcnQgbm90IHJlZ2lzdHJ5X3BhdXNlZCwgZXJyLlBBVVNFRF9SRUdJU1RSWQogICAgIQogICAgYXNzZXJ0IC8vIFJlZ2lzdHJ5J3Mgbm9uLWFkbWluIG1ldGhvZHMgYXJlIHBhdXNlZAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjI5NAogICAgLy8gYXNzZXJ0IHNlbGYuc3RhdHVzLnZhbHVlID09IGVubS5TVEFUVVNfVk9USU5HLCBlcnIuV1JPTkdfUFJPUE9TQUxfU1RBVFVTCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAweDczNzQ2MTc0NzU3MwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnN0YXR1cyBleGlzdHMKICAgIHB1c2hpbnQgMjUKICAgID09CiAgICBhc3NlcnQgLy8gV3JvbmcgUHJvcG9zYWwgU3RhdHVzIG9yIGZpbmFsaXplZAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjI5NgogICAgLy8gbm90IHNlbGYuaXNfdm90aW5nX29wZW4oKSAgIyB2b3RpbmcgcGVyaW9kIGhhcyBlbmRlZAogICAgY2FsbHN1YiBpc192b3Rpbmdfb3BlbgogICAgYnogc2NydXRpbnlfYm9vbF90cnVlQDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToyOTcKICAgIC8vIG9yIHNlbGYuaXNfcGxlYmlzY2l0ZSgpICAjIGFsbCBjb21taXR0ZWUgbWVtYmVycyBhbHJlYWR5IHZvdGVkCiAgICBjYWxsc3ViIGlzX3BsZWJpc2NpdGUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToyOTYtMjk3CiAgICAvLyBub3Qgc2VsZi5pc192b3Rpbmdfb3BlbigpICAjIHZvdGluZyBwZXJpb2QgaGFzIGVuZGVkCiAgICAvLyBvciBzZWxmLmlzX3BsZWJpc2NpdGUoKSAgIyBhbGwgY29tbWl0dGVlIG1lbWJlcnMgYWxyZWFkeSB2b3RlZAogICAgYnogc2NydXRpbnlfYm9vbF9mYWxzZUA4CgpzY3J1dGlueV9ib29sX3RydWVANzoKICAgIGludGNfMSAvLyAxCgpzY3J1dGlueV9ib29sX21lcmdlQDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6Mjk1LTI5OAogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBub3Qgc2VsZi5pc192b3Rpbmdfb3BlbigpICAjIHZvdGluZyBwZXJpb2QgaGFzIGVuZGVkCiAgICAvLyAgICAgb3Igc2VsZi5pc19wbGViaXNjaXRlKCkgICMgYWxsIGNvbW1pdHRlZSBtZW1iZXJzIGFscmVhZHkgdm90ZWQKICAgIC8vICksIGVyci5WT1RJTkdfT05HT0lORwogICAgYXNzZXJ0IC8vIFZvdGluZyBPbmdvaW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NTcwCiAgICAvLyBzZWxmLmlzX3F1b3J1bV92b3RlcnNfcmVhY2hlZCgpCiAgICBjYWxsc3ViIGlzX3F1b3J1bV92b3RlcnNfcmVhY2hlZAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjU3MC01NzIKICAgIC8vIHNlbGYuaXNfcXVvcnVtX3ZvdGVyc19yZWFjaGVkKCkKICAgIC8vIGFuZCBzZWxmLmlzX3dlaWdodGVkX3F1b3J1bV92b3Rlc19yZWFjaGVkKCkKICAgIC8vIGFuZCBzZWxmLmhhc19tYWpvcml0eV9hcHByb3ZlZCgpCiAgICBieiBzY3J1dGlueV9ib29sX2ZhbHNlQDE1CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NTcxCiAgICAvLyBhbmQgc2VsZi5pc193ZWlnaHRlZF9xdW9ydW1fdm90ZXNfcmVhY2hlZCgpCiAgICBjYWxsc3ViIGlzX3dlaWdodGVkX3F1b3J1bV92b3Rlc19yZWFjaGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NTcwLTU3MgogICAgLy8gc2VsZi5pc19xdW9ydW1fdm90ZXJzX3JlYWNoZWQoKQogICAgLy8gYW5kIHNlbGYuaXNfd2VpZ2h0ZWRfcXVvcnVtX3ZvdGVzX3JlYWNoZWQoKQogICAgLy8gYW5kIHNlbGYuaGFzX21ham9yaXR5X2FwcHJvdmVkKCkKICAgIGJ6IHNjcnV0aW55X2Jvb2xfZmFsc2VAMTUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo1NzIKICAgIC8vIGFuZCBzZWxmLmhhc19tYWpvcml0eV9hcHByb3ZlZCgpCiAgICBjYWxsc3ViIGhhc19tYWpvcml0eV9hcHByb3ZlZAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjU3MC01NzIKICAgIC8vIHNlbGYuaXNfcXVvcnVtX3ZvdGVyc19yZWFjaGVkKCkKICAgIC8vIGFuZCBzZWxmLmlzX3dlaWdodGVkX3F1b3J1bV92b3Rlc19yZWFjaGVkKCkKICAgIC8vIGFuZCBzZWxmLmhhc19tYWpvcml0eV9hcHByb3ZlZCgpCiAgICBieiBzY3J1dGlueV9ib29sX2ZhbHNlQDE1CiAgICBpbnRjXzEgLy8gMQoKc2NydXRpbnlfYm9vbF9tZXJnZUAxNjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo5MjcKICAgIC8vIGlmIGlzX2FwcHJvdmVkOgogICAgZHVwCiAgICBieiBzY3J1dGlueV9lbHNlX2JvZHlAMwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjkyOAogICAgLy8gc2VsZi5zdGF0dXMudmFsdWUgPSBVSW50NjQoZW5tLlNUQVRVU19BUFBST1ZFRCkKICAgIGJ5dGVjXzAgLy8gMHg3Mzc0NjE3NDc1NzMKICAgIHB1c2hpbnQgMzAKICAgIGFwcF9nbG9iYWxfcHV0CgpzY3J1dGlueV9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6OTM4CiAgICAvLyBwbGViaXNjaXRlPXNlbGYuaXNfcGxlYmlzY2l0ZSgpLAogICAgY2FsbHN1YiBpc19wbGViaXNjaXRlCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6OTM5CiAgICAvLyByb3VuZD1HbG9iYWwucm91bmQsCiAgICBnbG9iYWwgUm91bmQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo5MzYtOTQwCiAgICAvLyB0eXAuU2NydXRpbnkoCiAgICAvLyAgICAgYXBwcm92ZWQ9aXNfYXBwcm92ZWQsCiAgICAvLyAgICAgcGxlYmlzY2l0ZT1zZWxmLmlzX3BsZWJpc2NpdGUoKSwKICAgIC8vICAgICByb3VuZD1HbG9iYWwucm91bmQsCiAgICAvLyApCiAgICBieXRlYyAxOSAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciA0CiAgICBzZXRiaXQKICAgIGludGNfMSAvLyAxCiAgICB1bmNvdmVyIDMKICAgIHNldGJpdAogICAgc3dhcAogICAgaXRvYgogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6OTM1LTk0MQogICAgLy8gYXJjNC5lbWl0KAogICAgLy8gICAgIHR5cC5TY3J1dGlueSgKICAgIC8vICAgICAgICAgYXBwcm92ZWQ9aXNfYXBwcm92ZWQsCiAgICAvLyAgICAgICAgIHBsZWJpc2NpdGU9c2VsZi5pc19wbGViaXNjaXRlKCksCiAgICAvLyAgICAgICAgIHJvdW5kPUdsb2JhbC5yb3VuZCwKICAgIC8vICAgICApCiAgICAvLyApCiAgICBwdXNoYnl0ZXMgMHg4Yjc4OTUxNCAvLyBtZXRob2QgIlNjcnV0aW55KGJvb2wsYm9vbCx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo5MTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgpzY3J1dGlueV9lbHNlX2JvZHlAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo5MzAKICAgIC8vIHNlbGYuc3RhdHVzLnZhbHVlID0gVUludDY0KGVubS5TVEFUVVNfUkVKRUNURUQpCiAgICBieXRlY18wIC8vIDB4NzM3NDYxNzQ3NTczCiAgICBwdXNoaW50IDQwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjkzMgogICAgLy8gcmVjZWl2ZXI9c2VsZi5wcm9wb3Nlci52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vIDB4NzA3MjZmNzA2ZjczNjU3MgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnByb3Bvc2VyIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjkzMS05MzMKICAgIC8vIHNlbGYudHJhbnNmZXJfbG9ja2VkX2Ftb3VudCgKICAgIC8vICAgICByZWNlaXZlcj1zZWxmLnByb3Bvc2VyLnZhbHVlLAogICAgLy8gKQogICAgY2FsbHN1YiB0cmFuc2Zlcl9sb2NrZWRfYW1vdW50CiAgICBiIHNjcnV0aW55X2FmdGVyX2lmX2Vsc2VANAoKc2NydXRpbnlfYm9vbF9mYWxzZUAxNToKICAgIGludGNfMCAvLyAwCiAgICBiIHNjcnV0aW55X2Jvb2xfbWVyZ2VAMTYKCnNjcnV0aW55X2Jvb2xfZmFsc2VAODoKICAgIGludGNfMCAvLyAwCiAgICBiIHNjcnV0aW55X2Jvb2xfbWVyZ2VAOQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5wcm9wb3NhbC5jb250cmFjdC5Qcm9wb3NhbC51bmFzc2lnbl9hYnNlbnRlZXNbcm91dGluZ10oKSAtPiB2b2lkOgp1bmFzc2lnbl9hYnNlbnRlZXM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6OTQzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwbiAyCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzIgLy8gMzIKICAgICoKICAgIHB1c2hpbnQgMgogICAgKwogICAgc3dhcAogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YWNjb3VudD4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToyMzEKICAgIC8vIGFzc2VydCBzZWxmLmlzX3JlZ2lzdHJ5X2NhbGwoKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgY2FsbHN1YiBpc19yZWdpc3RyeV9jYWxsCiAgICBhc3NlcnQgLy8gVW5hdXRob3JpemVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MjM0CiAgICAvLyBzZWxmLnN0YXR1cy52YWx1ZSA9PSBlbm0uU1RBVFVTX0FQUFJPVkVECiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAweDczNzQ2MTc0NzU3MwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnN0YXR1cyBleGlzdHMKICAgIHB1c2hpbnQgMzAKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MjM0LTIzNQogICAgLy8gc2VsZi5zdGF0dXMudmFsdWUgPT0gZW5tLlNUQVRVU19BUFBST1ZFRAogICAgLy8gb3Igc2VsZi5zdGF0dXMudmFsdWUgPT0gZW5tLlNUQVRVU19SRUpFQ1RFRAogICAgYm56IHVuYXNzaWduX2Fic2VudGVlc19hbmRfY29udGRAMTMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToyMzUKICAgIC8vIG9yIHNlbGYuc3RhdHVzLnZhbHVlID09IGVubS5TVEFUVVNfUkVKRUNURUQKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vIDB4NzM3NDYxNzQ3NTczCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc3RhdHVzIGV4aXN0cwogICAgcHVzaGludCA0MAogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToyMzQtMjM1CiAgICAvLyBzZWxmLnN0YXR1cy52YWx1ZSA9PSBlbm0uU1RBVFVTX0FQUFJPVkVECiAgICAvLyBvciBzZWxmLnN0YXR1cy52YWx1ZSA9PSBlbm0uU1RBVFVTX1JFSkVDVEVECiAgICBieiB1bmFzc2lnbl9hYnNlbnRlZXNfaWZfYm9keUAxNAoKdW5hc3NpZ25fYWJzZW50ZWVzX2FuZF9jb250ZEAxMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToyMzcKICAgIC8vIGFuZCBub3Qgc2VsZi5maW5hbGl6ZWQudmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vIDB4NjY2OTZlNjE2YzY5N2E2NTY0CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZmluYWxpemVkIGV4aXN0cwogICAgYnogdW5hc3NpZ25fYWJzZW50ZWVzX2FmdGVyX2lmX2Vsc2VAMTUKCnVuYXNzaWduX2Fic2VudGVlc19pZl9ib2R5QDE0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjIzOQogICAgLy8gcmV0dXJuIHR5cC5FcnJvcihlcnIuQVJDXzY1X1BSRUZJWCArIGVyci5XUk9OR19QUk9QT1NBTF9TVEFUVVMpCiAgICBieXRlYyAyMyAvLyAiRVJSOldyb25nIFByb3Bvc2FsIFN0YXR1cyBvciBmaW5hbGl6ZWQiCgp1bmFzc2lnbl9hYnNlbnRlZXNfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMucHJvcG9zYWwuY29udHJhY3QuUHJvcG9zYWwudW5hc3NpZ25fYWJzZW50ZWVzX2NoZWNrX2F1dGhvcml6YXRpb25AMTY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6OTU3CiAgICAvLyBpZiBlcnJvciAhPSB0eXAuRXJyb3IoIiIpOgogICAgZHVwCiAgICBieXRlY18xIC8vICIiCiAgICAhPQogICAgYnogdW5hc3NpZ25fYWJzZW50ZWVzX2FmdGVyX2lmX2Vsc2VAMwoKdW5hc3NpZ25fYWJzZW50ZWVzX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLnByb3Bvc2FsLmNvbnRyYWN0LlByb3Bvc2FsLnVuYXNzaWduX2Fic2VudGVlc0AxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo5NDMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWMgMTAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCnVuYXNzaWduX2Fic2VudGVlc19hZnRlcl9pZl9lbHNlQDM6CiAgICBwb3AKICAgIGludGNfMCAvLyAwCgp1bmFzc2lnbl9hYnNlbnRlZXNfZm9yX2hlYWRlckA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5Ojk2MC05NjEKICAgIC8vICMgcmVtb3ZlIGFic2VudGVlCiAgICAvLyBmb3IgYWJzZW50ZWUgaW4gYWJzZW50ZWVzOgogICAgZHVwCiAgICBkaWcgMgogICAgPAogICAgYnogdW5hc3NpZ25fYWJzZW50ZWVzX2FmdGVyX2ZvckA5CiAgICBkaWcgMgogICAgZXh0cmFjdCAyIDAKICAgIGRpZyAxCiAgICBpbnRjXzIgLy8gMzIKICAgICoKICAgIGludGNfMiAvLyAzMgogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo5NjIKICAgIC8vIGlmIGFic2VudGVlIG5vdCBpbiBzZWxmLnZvdGVyczoKICAgIGJ5dGVjIDE4IC8vICJWIgogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYm56IHVuYXNzaWduX2Fic2VudGVlc19hZnRlcl9pZl9lbHNlQDcKICAgIHBvcG4gMwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5Ojk2MwogICAgLy8gcmV0dXJuIHR5cC5FcnJvcihlcnIuQVJDXzY1X1BSRUZJWCArIGVyci5WT1RFUl9OT1RfRk9VTkQpCiAgICBieXRlYyA0MCAvLyAiRVJSOlZvdGVyIG5vdCBmb3VuZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo5NDMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBiIHVuYXNzaWduX2Fic2VudGVlc19hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5wcm9wb3NhbC5jb250cmFjdC5Qcm9wb3NhbC51bmFzc2lnbl9hYnNlbnRlZXNAMTAKCnVuYXNzaWduX2Fic2VudGVlc19hZnRlcl9pZl9lbHNlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6OTY0CiAgICAvLyB2b3RlcyA9IHNlbGYudm90ZXJzW2Fic2VudGVlXQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudm90ZXJzIGVudHJ5IGV4aXN0cwogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5Ojk2NQogICAgLy8gc2VsZi5fdW5hc3NpZ25fdm90ZXIoYWJzZW50ZWUsIHZvdGVzKQogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICBjYWxsc3ViIF91bmFzc2lnbl92b3RlcgogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGIgdW5hc3NpZ25fYWJzZW50ZWVzX2Zvcl9oZWFkZXJANAoKdW5hc3NpZ25fYWJzZW50ZWVzX2FmdGVyX2ZvckA5OgogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6OTY3CiAgICAvLyByZXR1cm4gdHlwLkVycm9yKCIiKQogICAgYnl0ZWNfMSAvLyAiIgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5Ojk0MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGIgdW5hc3NpZ25fYWJzZW50ZWVzX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLnByb3Bvc2FsLmNvbnRyYWN0LlByb3Bvc2FsLnVuYXNzaWduX2Fic2VudGVlc0AxMAoKdW5hc3NpZ25fYWJzZW50ZWVzX2FmdGVyX2lmX2Vsc2VAMTU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MjQxCiAgICAvLyByZXR1cm4gdHlwLkVycm9yKCIiKQogICAgYnl0ZWNfMSAvLyAiIgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5Ojk1NgogICAgLy8gZXJyb3IgPSBzZWxmLnVuYXNzaWduX2Fic2VudGVlc19jaGVja19hdXRob3JpemF0aW9uKCkKICAgIGIgdW5hc3NpZ25fYWJzZW50ZWVzX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLnByb3Bvc2FsLmNvbnRyYWN0LlByb3Bvc2FsLnVuYXNzaWduX2Fic2VudGVlc19jaGVja19hdXRob3JpemF0aW9uQDE2CgoKLy8gc21hcnRfY29udHJhY3RzLnByb3Bvc2FsLmNvbnRyYWN0LlByb3Bvc2FsLnJldmlld1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnJldmlldzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo5NjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuYm9vbAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NDU1CiAgICAvLyByZXR1cm4gVHhuLnNlbmRlciA9PSBBY2NvdW50KAogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjQ1NgogICAgLy8gc2VsZi5nZXRfYnl0ZXNfZnJvbV9yZWdpc3RyeV9jb25maWcoQnl0ZXMocmVnX2NmZy5HU19LRVlfWEdPVl9DT1VOQ0lMKSkKICAgIHB1c2hieXRlcyAweDc4Njc2Zjc2NWY2MzZmNzU2ZTYzNjk2YwogICAgY2FsbHN1YiBnZXRfYnl0ZXNfZnJvbV9yZWdpc3RyeV9jb25maWcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo0NTUtNDU3CiAgICAvLyByZXR1cm4gVHhuLnNlbmRlciA9PSBBY2NvdW50KAogICAgLy8gICAgIHNlbGYuZ2V0X2J5dGVzX2Zyb21fcmVnaXN0cnlfY29uZmlnKEJ5dGVzKHJlZ19jZmcuR1NfS0VZX1hHT1ZfQ09VTkNJTCkpCiAgICAvLyApCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIEFkZHJlc3MgbGVuZ3RoIGlzIDMyIGJ5dGVzCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjIxNgogICAgLy8gYXNzZXJ0IHNlbGYuaXNfY291bmNpbCgpLCBlcnIuVU5BVVRIT1JJWkVECiAgICBhc3NlcnQgLy8gVW5hdXRob3JpemVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MjE3CiAgICAvLyBhc3NlcnQgc2VsZi5zdGF0dXMudmFsdWUgPT0gZW5tLlNUQVRVU19BUFBST1ZFRCwgZXJyLldST05HX1BST1BPU0FMX1NUQVRVUwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gMHg3Mzc0NjE3NDc1NzMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zdGF0dXMgZXhpc3RzCiAgICBwdXNoaW50IDMwCiAgICA9PQogICAgYXNzZXJ0IC8vIFdyb25nIFByb3Bvc2FsIFN0YXR1cyBvciBmaW5hbGl6ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo5ODUtOTg2CiAgICAvLyAjIGNoZWNrIG5vIGFzc2lnbmVkIHZvdGVycwogICAgLy8gYXNzZXJ0IHNlbGYuYXNzaWduZWRfbWVtYmVycy52YWx1ZSA9PSAwLCBlcnIuVk9URVJTX0FTU0lHTkVECiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNSAvLyAweDYxNzM3MzY5Njc2ZTY1NjQ1ZjZkNjU2ZDYyNjU3MjczCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzaWduZWRfbWVtYmVycyBleGlzdHMKICAgICEKICAgIGFzc2VydCAvLyBUaGVyZSBhcmUgdm90ZXJzIGFzc2lnbmVkIHRvIHRoaXMgcHJvcG9zYWwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo5ODgKICAgIC8vIGlmIGJsb2NrOgogICAgYnogcmV2aWV3X2Vsc2VfYm9keUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6OTg5CiAgICAvLyBzZWxmLnN0YXR1cy52YWx1ZSA9IFVJbnQ2NChlbm0uU1RBVFVTX0JMT0NLRUQpCiAgICBieXRlY18wIC8vIDB4NzM3NDYxNzQ3NTczCiAgICBwdXNoaW50IDYwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5Ojk5MS05OTIKICAgIC8vICMgc2xhc2hpbmc6IHNlbmQgbG9ja2VkIGFtb3VudCB0byB0aGUgcmVnaXN0cnkgdHJlYXN1cnkKICAgIC8vIHJlZ19hcHAgPSBBcHBsaWNhdGlvbihzZWxmLnJlZ2lzdHJ5X2FwcF9pZC52YWx1ZSkKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA0IC8vIDB4NzI2NTY3Njk3Mzc0NzI3OTVmNjE3MDcwNWY2OTY0CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucmVnaXN0cnlfYXBwX2lkIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5Ojk5NAogICAgLy8gcmVjZWl2ZXI9cmVnX2FwcC5hZGRyZXNzLAogICAgYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwogICAgYXNzZXJ0IC8vIGFwcGxpY2F0aW9uIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5Ojk5My05OTUKICAgIC8vIHNlbGYudHJhbnNmZXJfbG9ja2VkX2Ftb3VudCgKICAgIC8vICAgICByZWNlaXZlcj1yZWdfYXBwLmFkZHJlc3MsCiAgICAvLyApCiAgICBjYWxsc3ViIHRyYW5zZmVyX2xvY2tlZF9hbW91bnQKCnJldmlld19hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTAwNQogICAgLy8gYXJjNC5lbWl0KHR5cC5SZXZpZXcodmV0bz1ibG9jaywgcm91bmQ9R2xvYmFsLnJvdW5kKSkKICAgIGdsb2JhbCBSb3VuZAogICAgYnl0ZWMgMTkgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMwogICAgc2V0Yml0CiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweGFlZTgxNzE5IC8vIG1ldGhvZCAiUmV2aWV3KGJvb2wsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6OTY5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKcmV2aWV3X2Vsc2VfYm9keUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5Ojk5OAogICAgLy8gc2VsZi5zdGF0dXMudmFsdWUgPSBVSW50NjQoZW5tLlNUQVRVU19SRVZJRVdFRCkKICAgIGJ5dGVjXzAgLy8gMHg3Mzc0NjE3NDc1NzMKICAgIHB1c2hpbnQgNDUKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTAwMgogICAgLy8gcmVjZWl2ZXI9c2VsZi5wcm9wb3Nlci52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vIDB4NzA3MjZmNzA2ZjczNjU3MgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnByb3Bvc2VyIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjEwMDAtMTAwMwogICAgLy8gIyByZWZ1bmQgdGhlIGxvY2tlZCBhbW91bnQgdG8gdGhlIHByb3Bvc2VyCiAgICAvLyBzZWxmLnRyYW5zZmVyX2xvY2tlZF9hbW91bnQoCiAgICAvLyAgICAgcmVjZWl2ZXI9c2VsZi5wcm9wb3Nlci52YWx1ZSwKICAgIC8vICkKICAgIGNhbGxzdWIgdHJhbnNmZXJfbG9ja2VkX2Ftb3VudAogICAgYiByZXZpZXdfYWZ0ZXJfaWZfZWxzZUA0CgoKLy8gc21hcnRfY29udHJhY3RzLnByb3Bvc2FsLmNvbnRyYWN0LlByb3Bvc2FsLmZ1bmRbcm91dGluZ10oKSAtPiB2b2lkOgpmdW5kOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjIyMAogICAgLy8gYXNzZXJ0IHNlbGYuaXNfcmVnaXN0cnlfY2FsbCgpLCBlcnIuVU5BVVRIT1JJWkVECiAgICBjYWxsc3ViIGlzX3JlZ2lzdHJ5X2NhbGwKICAgIGFzc2VydCAvLyBVbmF1dGhvcml6ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToyMjEKICAgIC8vIGlmIHNlbGYuc3RhdHVzLnZhbHVlICE9IGVubS5TVEFUVVNfUkVWSUVXRUQ6CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAweDczNzQ2MTc0NzU3MwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnN0YXR1cyBleGlzdHMKICAgIHB1c2hpbnQgNDUKICAgICE9CiAgICBieiBmdW5kX2FmdGVyX2lmX2Vsc2VANwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjIyMgogICAgLy8gcmV0dXJuIHR5cC5FcnJvcihlcnIuQVJDXzY1X1BSRUZJWCArIGVyci5XUk9OR19QUk9QT1NBTF9TVEFUVVMpCiAgICBieXRlYyAyMyAvLyAiRVJSOldyb25nIFByb3Bvc2FsIFN0YXR1cyBvciBmaW5hbGl6ZWQiCgpmdW5kX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLnByb3Bvc2FsLmNvbnRyYWN0LlByb3Bvc2FsLmZ1bmRfY2hlY2tfYXV0aG9yaXphdGlvbkA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjEwMTcKICAgIC8vIGlmIGVycm9yICE9IHR5cC5FcnJvcigiIik6CiAgICBkdXAKICAgIGJ5dGVjXzEgLy8gIiIKICAgICE9CiAgICBieiBmdW5kX2FmdGVyX2lmX2Vsc2VAMwoKZnVuZF9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5wcm9wb3NhbC5jb250cmFjdC5Qcm9wb3NhbC5mdW5kQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTAwNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlYyAxMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKZnVuZF9hZnRlcl9pZl9lbHNlQDM6CiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxMDIwCiAgICAvLyBzZWxmLnN0YXR1cy52YWx1ZSA9IFVJbnQ2NChlbm0uU1RBVFVTX0ZVTkRFRCkKICAgIGJ5dGVjXzAgLy8gMHg3Mzc0NjE3NDc1NzMKICAgIHB1c2hpbnQgNTAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTAyMgogICAgLy8gcmV0dXJuIHR5cC5FcnJvcigiIikKICAgIGJ5dGVjXzEgLy8gIiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxMDA3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYiBmdW5kX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLnByb3Bvc2FsLmNvbnRyYWN0LlByb3Bvc2FsLmZ1bmRANAoKZnVuZF9hZnRlcl9pZl9lbHNlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MjI0CiAgICAvLyByZXR1cm4gdHlwLkVycm9yKCIiKQogICAgYnl0ZWNfMSAvLyAiIgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjEwMTYKICAgIC8vIGVycm9yID0gc2VsZi5mdW5kX2NoZWNrX2F1dGhvcml6YXRpb24oKQogICAgYiBmdW5kX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLnByb3Bvc2FsLmNvbnRyYWN0LlByb3Bvc2FsLmZ1bmRfY2hlY2tfYXV0aG9yaXphdGlvbkA4CgoKLy8gc21hcnRfY29udHJhY3RzLnByb3Bvc2FsLmNvbnRyYWN0LlByb3Bvc2FsLnVuYXNzaWduX3ZvdGVyc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnVuYXNzaWduX3ZvdGVyczoKICAgIGludGNfMCAvLyAwCiAgICBkdXAKICAgIGJ5dGVjXzEgLy8gIiIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjEwMjQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXBuIDIKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMiAvLyAzMgogICAgKgogICAgcHVzaGludCAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhY2NvdW50PgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjIyNwogICAgLy8gYXNzZXJ0IHNlbGYuaXNfeGdvdl9kYWVtb24oKSwgZXJyLlVOQVVUSE9SSVpFRAogICAgY2FsbHN1YiBpc194Z292X2RhZW1vbgogICAgYXNzZXJ0IC8vIFVuYXV0aG9yaXplZAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjIyOAogICAgLy8gYXNzZXJ0IHNlbGYuc3RhdHVzLnZhbHVlID09IGVubS5TVEFUVVNfU1VCTUlUVEVELCBlcnIuV1JPTkdfUFJPUE9TQUxfU1RBVFVTCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAweDczNzQ2MTc0NzU3MwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnN0YXR1cyBleGlzdHMKICAgIHB1c2hpbnQgMjAKICAgID09CiAgICBhc3NlcnQgLy8gV3JvbmcgUHJvcG9zYWwgU3RhdHVzIG9yIGZpbmFsaXplZAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjEwNDAKICAgIC8vIGlmIFR4bi5ncm91cF9pbmRleCA9PSAwOgogICAgdHhuIEdyb3VwSW5kZXgKICAgIGJueiB1bmFzc2lnbl92b3RlcnNfZWxzZV9ib2R5QDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxMDQxLTEwNDIKICAgIC8vICMgQ2hlY2sgdGhhdCB0aGUgZW50aXJlIGdyb3VwIGNhbGxzIHRoZSBzYW1lIGFwcCBhbmQgbWV0aG9kCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoMSwgR2xvYmFsLmdyb3VwX3NpemUpOgogICAgZ2xvYmFsIEdyb3VwU2l6ZQogICAgYnVyeSAzCiAgICBpbnRjXzEgLy8gMQogICAgYnVyeSA0Cgp1bmFzc2lnbl92b3RlcnNfZm9yX2hlYWRlckAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjEwNDEtMTA0MgogICAgLy8gIyBDaGVjayB0aGF0IHRoZSBlbnRpcmUgZ3JvdXAgY2FsbHMgdGhlIHNhbWUgYXBwIGFuZCBtZXRob2QKICAgIC8vIGZvciBpIGluIHVyYW5nZSgxLCBHbG9iYWwuZ3JvdXBfc2l6ZSk6CiAgICBkaWcgMwogICAgZGlnIDMKICAgIDwKICAgIGJ6IHVuYXNzaWduX3ZvdGVyc19hZnRlcl9pZl9lbHNlQDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxMDQzCiAgICAvLyBzZWxmLmFzc2VydF9zYW1lX2FwcF9hbmRfbWV0aG9kKGkpCiAgICBkaWcgMwogICAgZHVwCiAgICBjYWxsc3ViIGFzc2VydF9zYW1lX2FwcF9hbmRfbWV0aG9kCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTA0MS0xMDQyCiAgICAvLyAjIENoZWNrIHRoYXQgdGhlIGVudGlyZSBncm91cCBjYWxscyB0aGUgc2FtZSBhcHAgYW5kIG1ldGhvZAogICAgLy8gZm9yIGkgaW4gdXJhbmdlKDEsIEdsb2JhbC5ncm91cF9zaXplKToKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDQKICAgIGIgdW5hc3NpZ25fdm90ZXJzX2Zvcl9oZWFkZXJAMwoKdW5hc3NpZ25fdm90ZXJzX2FmdGVyX2lmX2Vsc2VAODoKICAgIGludGNfMCAvLyAwCgp1bmFzc2lnbl92b3RlcnNfZm9yX2hlYWRlckA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjEwNDgtMTA0OQogICAgLy8gIyByZW1vdmUgdm90ZXJzCiAgICAvLyBmb3Igdm90ZXIgaW4gdm90ZXJzOgogICAgZHVwCiAgICBkaWcgMgogICAgPAogICAgYnogdW5hc3NpZ25fdm90ZXJzX2FmdGVyX2ZvckAxNAogICAgZGlnIDIKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMQogICAgaW50Y18yIC8vIDMyCiAgICAqCiAgICBpbnRjXzIgLy8gMzIKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZHVwCiAgICBidXJ5IDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxMDUwCiAgICAvLyBpZiB2b3RlciBpbiBzZWxmLnZvdGVyczoKICAgIGJ5dGVjIDE4IC8vICJWIgogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGJ1cnkgOAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiB1bmFzc2lnbl92b3RlcnNfYWZ0ZXJfaWZfZWxzZUAxMgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjEwNTEKICAgIC8vIHZvdGVzID0gc2VsZi52b3RlcnNbdm90ZXJdCiAgICBkaWcgNgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudm90ZXJzIGVudHJ5IGV4aXN0cwogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjEwNTIKICAgIC8vIHNlbGYuX3VuYXNzaWduX3ZvdGVyKHZvdGVyLCB2b3RlcykKICAgIGRpZyA2CiAgICBzd2FwCiAgICBjYWxsc3ViIF91bmFzc2lnbl92b3RlcgoKdW5hc3NpZ25fdm90ZXJzX2FmdGVyX2lmX2Vsc2VAMTI6CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYiB1bmFzc2lnbl92b3RlcnNfZm9yX2hlYWRlckA5Cgp1bmFzc2lnbl92b3RlcnNfYWZ0ZXJfZm9yQDE0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjEwMjQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgp1bmFzc2lnbl92b3RlcnNfZWxzZV9ib2R5QDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTA0NS0xMDQ2CiAgICAvLyAjIENoZWNrIHRoYXQgdGhlIGZpcnN0IHRyYW5zYWN0aW9uIGluIHRoZSBncm91cCBjYWxscyB0aGUgc2FtZSBhcHAgYW5kIG1ldGhvZAogICAgLy8gc2VsZi5hc3NlcnRfc2FtZV9hcHBfYW5kX21ldGhvZChVSW50NjQoMCkpCiAgICBpbnRjXzAgLy8gMAogICAgY2FsbHN1YiBhc3NlcnRfc2FtZV9hcHBfYW5kX21ldGhvZAogICAgYiB1bmFzc2lnbl92b3RlcnNfYWZ0ZXJfaWZfZWxzZUA4CgoKLy8gc21hcnRfY29udHJhY3RzLnByb3Bvc2FsLmNvbnRyYWN0LlByb3Bvc2FsLmZpbmFsaXplW3JvdXRpbmddKCkgLT4gdm9pZDoKZmluYWxpemU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MjQ0CiAgICAvLyBhc3NlcnQgc2VsZi5pc19yZWdpc3RyeV9jYWxsKCksIGVyci5VTkFVVEhPUklaRUQKICAgIGNhbGxzdWIgaXNfcmVnaXN0cnlfY2FsbAogICAgYXNzZXJ0IC8vIFVuYXV0aG9yaXplZAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjI0NgogICAgLy8gaWYgc2VsZi5maW5hbGl6ZWQudmFsdWUgb3IgKAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gMHg2NjY5NmU2MTZjNjk3YTY1NjQKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5maW5hbGl6ZWQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MjQ2LTI1MgogICAgLy8gaWYgc2VsZi5maW5hbGl6ZWQudmFsdWUgb3IgKAogICAgLy8gICAgIHNlbGYuc3RhdHVzLnZhbHVlICE9IGVubS5TVEFUVVNfRU1QVFkKICAgIC8vICAgICBhbmQgc2VsZi5zdGF0dXMudmFsdWUgIT0gZW5tLlNUQVRVU19EUkFGVAogICAgLy8gICAgIGFuZCBzZWxmLnN0YXR1cy52YWx1ZSAhPSBlbm0uU1RBVFVTX0ZVTkRFRAogICAgLy8gICAgIGFuZCBzZWxmLnN0YXR1cy52YWx1ZSAhPSBlbm0uU1RBVFVTX0JMT0NLRUQKICAgIC8vICAgICBhbmQgc2VsZi5zdGF0dXMudmFsdWUgIT0gZW5tLlNUQVRVU19SRUpFQ1RFRAogICAgLy8gKToKICAgIGJueiBmaW5hbGl6ZV9pZl9ib2R5QDE1CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MjQ3CiAgICAvLyBzZWxmLnN0YXR1cy52YWx1ZSAhPSBlbm0uU1RBVFVTX0VNUFRZCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAweDczNzQ2MTc0NzU3MwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnN0YXR1cyBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToyNDctMjUxCiAgICAvLyBzZWxmLnN0YXR1cy52YWx1ZSAhPSBlbm0uU1RBVFVTX0VNUFRZCiAgICAvLyBhbmQgc2VsZi5zdGF0dXMudmFsdWUgIT0gZW5tLlNUQVRVU19EUkFGVAogICAgLy8gYW5kIHNlbGYuc3RhdHVzLnZhbHVlICE9IGVubS5TVEFUVVNfRlVOREVECiAgICAvLyBhbmQgc2VsZi5zdGF0dXMudmFsdWUgIT0gZW5tLlNUQVRVU19CTE9DS0VECiAgICAvLyBhbmQgc2VsZi5zdGF0dXMudmFsdWUgIT0gZW5tLlNUQVRVU19SRUpFQ1RFRAogICAgYnogZmluYWxpemVfYWZ0ZXJfaWZfZWxzZUAxNgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjI0OAogICAgLy8gYW5kIHNlbGYuc3RhdHVzLnZhbHVlICE9IGVubS5TVEFUVVNfRFJBRlQKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vIDB4NzM3NDYxNzQ3NTczCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc3RhdHVzIGV4aXN0cwogICAgaW50Y18zIC8vIDEwCiAgICAhPQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjI0Ny0yNTEKICAgIC8vIHNlbGYuc3RhdHVzLnZhbHVlICE9IGVubS5TVEFUVVNfRU1QVFkKICAgIC8vIGFuZCBzZWxmLnN0YXR1cy52YWx1ZSAhPSBlbm0uU1RBVFVTX0RSQUZUCiAgICAvLyBhbmQgc2VsZi5zdGF0dXMudmFsdWUgIT0gZW5tLlNUQVRVU19GVU5ERUQKICAgIC8vIGFuZCBzZWxmLnN0YXR1cy52YWx1ZSAhPSBlbm0uU1RBVFVTX0JMT0NLRUQKICAgIC8vIGFuZCBzZWxmLnN0YXR1cy52YWx1ZSAhPSBlbm0uU1RBVFVTX1JFSkVDVEVECiAgICBieiBmaW5hbGl6ZV9hZnRlcl9pZl9lbHNlQDE2CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MjQ5CiAgICAvLyBhbmQgc2VsZi5zdGF0dXMudmFsdWUgIT0gZW5tLlNUQVRVU19GVU5ERUQKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vIDB4NzM3NDYxNzQ3NTczCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc3RhdHVzIGV4aXN0cwogICAgcHVzaGludCA1MAogICAgIT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToyNDctMjUxCiAgICAvLyBzZWxmLnN0YXR1cy52YWx1ZSAhPSBlbm0uU1RBVFVTX0VNUFRZCiAgICAvLyBhbmQgc2VsZi5zdGF0dXMudmFsdWUgIT0gZW5tLlNUQVRVU19EUkFGVAogICAgLy8gYW5kIHNlbGYuc3RhdHVzLnZhbHVlICE9IGVubS5TVEFUVVNfRlVOREVECiAgICAvLyBhbmQgc2VsZi5zdGF0dXMudmFsdWUgIT0gZW5tLlNUQVRVU19CTE9DS0VECiAgICAvLyBhbmQgc2VsZi5zdGF0dXMudmFsdWUgIT0gZW5tLlNUQVRVU19SRUpFQ1RFRAogICAgYnogZmluYWxpemVfYWZ0ZXJfaWZfZWxzZUAxNgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjI1MAogICAgLy8gYW5kIHNlbGYuc3RhdHVzLnZhbHVlICE9IGVubS5TVEFUVVNfQkxPQ0tFRAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gMHg3Mzc0NjE3NDc1NzMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zdGF0dXMgZXhpc3RzCiAgICBwdXNoaW50IDYwCiAgICAhPQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjI0Ny0yNTEKICAgIC8vIHNlbGYuc3RhdHVzLnZhbHVlICE9IGVubS5TVEFUVVNfRU1QVFkKICAgIC8vIGFuZCBzZWxmLnN0YXR1cy52YWx1ZSAhPSBlbm0uU1RBVFVTX0RSQUZUCiAgICAvLyBhbmQgc2VsZi5zdGF0dXMudmFsdWUgIT0gZW5tLlNUQVRVU19GVU5ERUQKICAgIC8vIGFuZCBzZWxmLnN0YXR1cy52YWx1ZSAhPSBlbm0uU1RBVFVTX0JMT0NLRUQKICAgIC8vIGFuZCBzZWxmLnN0YXR1cy52YWx1ZSAhPSBlbm0uU1RBVFVTX1JFSkVDVEVECiAgICBieiBmaW5hbGl6ZV9hZnRlcl9pZl9lbHNlQDE2CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MjUxCiAgICAvLyBhbmQgc2VsZi5zdGF0dXMudmFsdWUgIT0gZW5tLlNUQVRVU19SRUpFQ1RFRAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gMHg3Mzc0NjE3NDc1NzMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zdGF0dXMgZXhpc3RzCiAgICBwdXNoaW50IDQwCiAgICAhPQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjI0Ny0yNTEKICAgIC8vIHNlbGYuc3RhdHVzLnZhbHVlICE9IGVubS5TVEFUVVNfRU1QVFkKICAgIC8vIGFuZCBzZWxmLnN0YXR1cy52YWx1ZSAhPSBlbm0uU1RBVFVTX0RSQUZUCiAgICAvLyBhbmQgc2VsZi5zdGF0dXMudmFsdWUgIT0gZW5tLlNUQVRVU19GVU5ERUQKICAgIC8vIGFuZCBzZWxmLnN0YXR1cy52YWx1ZSAhPSBlbm0uU1RBVFVTX0JMT0NLRUQKICAgIC8vIGFuZCBzZWxmLnN0YXR1cy52YWx1ZSAhPSBlbm0uU1RBVFVTX1JFSkVDVEVECiAgICBieiBmaW5hbGl6ZV9hZnRlcl9pZl9lbHNlQDE2CgpmaW5hbGl6ZV9pZl9ib2R5QDE1OgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjI1MwogICAgLy8gcmV0dXJuIHR5cC5FcnJvcihlcnIuQVJDXzY1X1BSRUZJWCArIGVyci5XUk9OR19QUk9QT1NBTF9TVEFUVVMpCiAgICBieXRlYyAyMyAvLyAiRVJSOldyb25nIFByb3Bvc2FsIFN0YXR1cyBvciBmaW5hbGl6ZWQiCgpmaW5hbGl6ZV9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy5wcm9wb3NhbC5jb250cmFjdC5Qcm9wb3NhbC5maW5hbGl6ZV9jaGVja19hdXRob3JpemF0aW9uQDE3OgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjEwNjYKICAgIC8vIGlmIGVycm9yICE9IHR5cC5FcnJvcigiIik6CiAgICBkdXAKICAgIGJ5dGVjXzEgLy8gIiIKICAgICE9CiAgICBieiBmaW5hbGl6ZV9hZnRlcl9pZl9lbHNlQDMKCmZpbmFsaXplX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLnByb3Bvc2FsLmNvbnRyYWN0LlByb3Bvc2FsLmZpbmFsaXplQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTA1NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlYyAxMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKZmluYWxpemVfYWZ0ZXJfaWZfZWxzZUAzOgogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTA2OS0xMDcwCiAgICAvLyAjIGNoZWNrIG5vIGFzc2lnbmVkIHZvdGVycwogICAgLy8gaWYgc2VsZi5hc3NpZ25lZF9tZW1iZXJzLnZhbHVlID4gMDoKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA1IC8vIDB4NjE3MzczNjk2NzZlNjU2NDVmNmQ2NTZkNjI2NTcyNzMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hc3NpZ25lZF9tZW1iZXJzIGV4aXN0cwogICAgYnogZmluYWxpemVfYWZ0ZXJfaWZfZWxzZUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTA3MQogICAgLy8gcmV0dXJuIHR5cC5FcnJvcihlcnIuQVJDXzY1X1BSRUZJWCArIGVyci5WT1RFUlNfQVNTSUdORUQpCiAgICBwdXNoYnl0ZXMgIkVSUjpUaGVyZSBhcmUgdm90ZXJzIGFzc2lnbmVkIHRvIHRoaXMgcHJvcG9zYWwiCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTA1NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGIgZmluYWxpemVfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMucHJvcG9zYWwuY29udHJhY3QuUHJvcG9zYWwuZmluYWxpemVAOAoKZmluYWxpemVfYWZ0ZXJfaWZfZWxzZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjEwNzMtMTA3NgogICAgLy8gIyByZWZ1bmQgdGhlIGxvY2tlZCBhbW91bnQgZm9yIERSQUZUIHByb3Bvc2FscwogICAgLy8gIyBmb3IgUkVKRUNURUQgcHJvcG9zYWxzLCB0aGUgbG9ja2VkIGFtb3VudCBpcyBhbHJlYWR5IHJlZnVuZGVkIGluIHRoZSBzY3J1dGlueSBtZXRob2QKICAgIC8vICMgZm9yIEVNUFRZLCBGVU5ERUQsIG9yIEJMT0NLRUQgcHJvcG9zYWxzLCB0aGUgbG9ja2VkIGFtb3VudCBpcyBub3QgcmVmdW5kYWJsZQogICAgLy8gaWYgc2VsZi5zdGF0dXMudmFsdWUgPT0gZW5tLlNUQVRVU19EUkFGVDoKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vIDB4NzM3NDYxNzQ3NTczCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc3RhdHVzIGV4aXN0cwogICAgaW50Y18zIC8vIDEwCiAgICA9PQogICAgYnogZmluYWxpemVfYWZ0ZXJfaWZfZWxzZUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTA3OAogICAgLy8gcmVjZWl2ZXI9c2VsZi5wcm9wb3Nlci52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vIDB4NzA3MjZmNzA2ZjczNjU3MgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnByb3Bvc2VyIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjEwNzctMTA3OQogICAgLy8gc2VsZi50cmFuc2Zlcl9sb2NrZWRfYW1vdW50KAogICAgLy8gICAgIHJlY2VpdmVyPXNlbGYucHJvcG9zZXIudmFsdWUsCiAgICAvLyApCiAgICBjYWxsc3ViIHRyYW5zZmVyX2xvY2tlZF9hbW91bnQKCmZpbmFsaXplX2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxMDgwCiAgICAvLyByZWdfYXBwID0gQXBwbGljYXRpb24oc2VsZi5yZWdpc3RyeV9hcHBfaWQudmFsdWUpCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNCAvLyAweDcyNjU2NzY5NzM3NDcyNzk1ZjYxNzA3MDVmNjk2NAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnJlZ2lzdHJ5X2FwcF9pZCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxMDgyCiAgICAvLyByZWNlaXZlcj1yZWdfYXBwLmFkZHJlc3MsCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTA4MwogICAgLy8gYW1vdW50PUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MuYmFsYW5jZQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTA4NAogICAgLy8gLSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLm1pbl9iYWxhbmNlLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTA4My0xMDg0CiAgICAvLyBhbW91bnQ9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcy5iYWxhbmNlCiAgICAvLyAtIEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MubWluX2JhbGFuY2UsCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTA4MS0xMDg1CiAgICAvLyBzZWxmLnBheSgKICAgIC8vICAgICByZWNlaXZlcj1yZWdfYXBwLmFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50PUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MuYmFsYW5jZQogICAgLy8gICAgIC0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcy5taW5fYmFsYW5jZSwKICAgIC8vICkKICAgIGNhbGxzdWIgcGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTA4NgogICAgLy8gc2VsZi5maW5hbGl6ZWQudmFsdWUgPSBUcnVlCiAgICBieXRlY18yIC8vIDB4NjY2OTZlNjE2YzY5N2E2NTY0CiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxMDg4CiAgICAvLyByZXR1cm4gdHlwLkVycm9yKCIiKQogICAgYnl0ZWNfMSAvLyAiIgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjEwNTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBiIGZpbmFsaXplX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzLnByb3Bvc2FsLmNvbnRyYWN0LlByb3Bvc2FsLmZpbmFsaXplQDgKCmZpbmFsaXplX2FmdGVyX2lmX2Vsc2VAMTY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MjU1CiAgICAvLyByZXR1cm4gdHlwLkVycm9yKCIiKQogICAgYnl0ZWNfMSAvLyAiIgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjEwNjUKICAgIC8vIGVycm9yID0gc2VsZi5maW5hbGl6ZV9jaGVja19hdXRob3JpemF0aW9uKCkKICAgIGIgZmluYWxpemVfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMucHJvcG9zYWwuY29udHJhY3QuUHJvcG9zYWwuZmluYWxpemVfY2hlY2tfYXV0aG9yaXphdGlvbkAxNwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5wcm9wb3NhbC5jb250cmFjdC5Qcm9wb3NhbC5kZWxldGVbcm91dGluZ10oKSAtPiB2b2lkOgpkZWxldGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MjU4CiAgICAvLyBhc3NlcnQgc2VsZi5pc194Z292X2RhZW1vbigpLCBlcnIuVU5BVVRIT1JJWkVECiAgICBjYWxsc3ViIGlzX3hnb3ZfZGFlbW9uCiAgICBhc3NlcnQgLy8gVW5hdXRob3JpemVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MjU5CiAgICAvLyBhc3NlcnQgc2VsZi5maW5hbGl6ZWQudmFsdWUsIGVyci5XUk9OR19QUk9QT1NBTF9TVEFUVVMKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vIDB4NjY2OTZlNjE2YzY5N2E2NTY0CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZmluYWxpemVkIGV4aXN0cwogICAgYXNzZXJ0IC8vIFdyb25nIFByb3Bvc2FsIFN0YXR1cyBvciBmaW5hbGl6ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxMTAyLTExMDMKICAgIC8vICMgZGVsZXRlIG1ldGFkYXRhIGJveCBpZiBpdCBleGlzdHMKICAgIC8vIGRlbCBzZWxmLm1ldGFkYXRhLnZhbHVlCiAgICBieXRlYyA5IC8vICJNIgogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTEwNQogICAgLy8gcmVnX2FwcCA9IEFwcGxpY2F0aW9uKHNlbGYucmVnaXN0cnlfYXBwX2lkLnZhbHVlKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gMHg3MjY1Njc2OTczNzQ3Mjc5NWY2MTcwNzA1ZjY5NjQKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5yZWdpc3RyeV9hcHBfaWQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTEwNwogICAgLy8gcmVjZWl2ZXI9cmVnX2FwcC5hZGRyZXNzLAogICAgYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwogICAgYXNzZXJ0IC8vIGFwcGxpY2F0aW9uIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjExMDgKICAgIC8vIGFtb3VudD1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLmJhbGFuY2UsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxMTA2LTExMDkKICAgIC8vIHNlbGYucGF5KAogICAgLy8gICAgIHJlY2VpdmVyPXJlZ19hcHAuYWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcy5iYWxhbmNlLAogICAgLy8gKQogICAgY2FsbHN1YiBwYXkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxMDkwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoYWxsb3dfYWN0aW9ucz0oIkRlbGV0ZUFwcGxpY2F0aW9uIiwpKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5wcm9wb3NhbC5jb250cmFjdC5Qcm9wb3NhbC5nZXRfc3RhdGVbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfc3RhdGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTEyMAogICAgLy8gcHJvcG9zZXI9c2VsZi5wcm9wb3Nlci52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vIDB4NzA3MjZmNzA2ZjczNjU3MgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnByb3Bvc2VyIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjExMjEKICAgIC8vIHJlZ2lzdHJ5X2FwcF9pZD1zZWxmLnJlZ2lzdHJ5X2FwcF9pZC52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA0IC8vIDB4NzI2NTY3Njk3Mzc0NzI3OTVmNjE3MDcwNWY2OTY0CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucmVnaXN0cnlfYXBwX2lkIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjExMjIKICAgIC8vIHRpdGxlPXNlbGYudGl0bGUudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMzQgLy8gMHg3NDY5NzQ2YzY1CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudGl0bGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTEyMwogICAgLy8gb3Blbl90cz1zZWxmLm9wZW5fdHMudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjcgLy8gMHg2ZjcwNjU2ZTVmNzQ2OTZkNjU3Mzc0NjE2ZDcwCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYub3Blbl90cyBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxMTI0CiAgICAvLyBzdWJtaXNzaW9uX3RzPXNlbGYuc3VibWlzc2lvbl90cy52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAzMiAvLyAweDczNzU2MjZkNjk3MzczNjk2ZjZlNWY3NDY5NmQ2NTczNzQ2MTZkNzAKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zdWJtaXNzaW9uX3RzIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjExMjUKICAgIC8vIHZvdGVfb3Blbl90cz1zZWxmLnZvdGVfb3Blbl90cy52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyOCAvLyAweDc2NmY3NDY1NWY2ZjcwNjU2ZTY5NmU2NzVmNzQ2OTZkNjU3Mzc0NjE2ZDcwCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudm90ZV9vcGVuX3RzIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjExMjYKICAgIC8vIHN0YXR1cz1zZWxmLnN0YXR1cy52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vIDB4NzM3NDYxNzQ3NTczCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc3RhdHVzIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjExMjcKICAgIC8vIGZpbmFsaXplZD1zZWxmLmZpbmFsaXplZC52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vIDB4NjY2OTZlNjE2YzY5N2E2NTY0CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZmluYWxpemVkIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjExMjgKICAgIC8vIGZ1bmRpbmdfY2F0ZWdvcnk9c2VsZi5mdW5kaW5nX2NhdGVnb3J5LnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE2IC8vIDB4NjY3NTZlNjQ2OTZlNjc1ZjYzNjE3NDY1Njc2ZjcyNzkKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5mdW5kaW5nX2NhdGVnb3J5IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjExMjkKICAgIC8vIGZvY3VzPWFyYzQuVUludDgoc2VsZi5mb2N1cy52YWx1ZSksCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMzUgLy8gMHg2NjZmNjM3NTczCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZm9jdXMgZXhpc3RzCiAgICBpdG9iCiAgICBkdXAKICAgIGJpdGxlbgogICAgcHVzaGludCA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBleHRyYWN0IDcgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjExMzAKICAgIC8vIGZ1bmRpbmdfdHlwZT1zZWxmLmZ1bmRpbmdfdHlwZS52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyOSAvLyAweDY2NzU2ZTY0Njk2ZTY3NWY3NDc5NzA2NQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmZ1bmRpbmdfdHlwZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxMTMxCiAgICAvLyByZXF1ZXN0ZWRfYW1vdW50PXNlbGYucmVxdWVzdGVkX2Ftb3VudC52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMiAvLyAweDcyNjU3MTc1NjU3Mzc0NjU2NDVmNjE2ZDZmNzU2ZTc0CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucmVxdWVzdGVkX2Ftb3VudCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxMTMyCiAgICAvLyBsb2NrZWRfYW1vdW50PXNlbGYubG9ja2VkX2Ftb3VudC52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyMCAvLyAweDZjNmY2MzZiNjU2NDVmNjE2ZDZmNzU2ZTc0CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubG9ja2VkX2Ftb3VudCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxMTMzCiAgICAvLyBjb21taXR0ZWVfaWQ9c2VsZi5jb21taXR0ZWVfaWQudmFsdWUuY29weSgpLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDI0IC8vIDB4NjM2ZjZkNmQ2OTc0NzQ2NTY1NWY2OTY0CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY29tbWl0dGVlX2lkIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjExMzQKICAgIC8vIGNvbW1pdHRlZV9tZW1iZXJzPXNlbGYuY29tbWl0dGVlX21lbWJlcnMudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTEgLy8gMHg2MzZmNmQ2ZDY5NzQ3NDY1NjU1ZjZkNjU2ZDYyNjU3MjczCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY29tbWl0dGVlX21lbWJlcnMgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTEzNQogICAgLy8gY29tbWl0dGVlX3ZvdGVzPXNlbGYuY29tbWl0dGVlX3ZvdGVzLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE1IC8vIDB4NjM2ZjZkNmQ2OTc0NzQ2NTY1NWY3NjZmNzQ2NTczCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY29tbWl0dGVlX3ZvdGVzIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjExMzYKICAgIC8vIHZvdGVkX21lbWJlcnM9c2VsZi52b3RlZF9tZW1iZXJzLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gMHg3NjZmNzQ2NTY0NWY2ZDY1NmQ2MjY1NzI3MwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnZvdGVkX21lbWJlcnMgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTEzNwogICAgLy8gYm95Y290dGVkX21lbWJlcnM9c2VsZi5ib3ljb3R0ZWRfbWVtYmVycy52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMyAvLyAweDYyNmY3OTYzNmY3NDc0NjU2NDVmNmQ2NTZkNjI2NTcyNzMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ib3ljb3R0ZWRfbWVtYmVycyBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxMTM4CiAgICAvLyBhcHByb3ZhbHM9c2VsZi5hcHByb3ZhbHMudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNyAvLyAweDYxNzA3MDcyNmY3NjYxNmM3MwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFwcHJvdmFscyBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxMTM5CiAgICAvLyByZWplY3Rpb25zPXNlbGYucmVqZWN0aW9ucy52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA4IC8vIDB4NzI2NTZhNjU2Mzc0Njk2ZjZlNzMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5yZWplY3Rpb25zIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjExNDAKICAgIC8vIG51bGxzPXNlbGYubnVsbHMudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTQgLy8gMHg2ZTc1NmM2YzczCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubnVsbHMgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTExOS0xMTQxCiAgICAvLyByZXR1cm4gdHlwLlByb3Bvc2FsVHlwZWRHbG9iYWxTdGF0ZSgKICAgIC8vICAgICBwcm9wb3Nlcj1zZWxmLnByb3Bvc2VyLnZhbHVlLAogICAgLy8gICAgIHJlZ2lzdHJ5X2FwcF9pZD1zZWxmLnJlZ2lzdHJ5X2FwcF9pZC52YWx1ZSwKICAgIC8vICAgICB0aXRsZT1zZWxmLnRpdGxlLnZhbHVlLAogICAgLy8gICAgIG9wZW5fdHM9c2VsZi5vcGVuX3RzLnZhbHVlLAogICAgLy8gICAgIHN1Ym1pc3Npb25fdHM9c2VsZi5zdWJtaXNzaW9uX3RzLnZhbHVlLAogICAgLy8gICAgIHZvdGVfb3Blbl90cz1zZWxmLnZvdGVfb3Blbl90cy52YWx1ZSwKICAgIC8vICAgICBzdGF0dXM9c2VsZi5zdGF0dXMudmFsdWUsCiAgICAvLyAgICAgZmluYWxpemVkPXNlbGYuZmluYWxpemVkLnZhbHVlLAogICAgLy8gICAgIGZ1bmRpbmdfY2F0ZWdvcnk9c2VsZi5mdW5kaW5nX2NhdGVnb3J5LnZhbHVlLAogICAgLy8gICAgIGZvY3VzPWFyYzQuVUludDgoc2VsZi5mb2N1cy52YWx1ZSksCiAgICAvLyAgICAgZnVuZGluZ190eXBlPXNlbGYuZnVuZGluZ190eXBlLnZhbHVlLAogICAgLy8gICAgIHJlcXVlc3RlZF9hbW91bnQ9c2VsZi5yZXF1ZXN0ZWRfYW1vdW50LnZhbHVlLAogICAgLy8gICAgIGxvY2tlZF9hbW91bnQ9c2VsZi5sb2NrZWRfYW1vdW50LnZhbHVlLAogICAgLy8gICAgIGNvbW1pdHRlZV9pZD1zZWxmLmNvbW1pdHRlZV9pZC52YWx1ZS5jb3B5KCksCiAgICAvLyAgICAgY29tbWl0dGVlX21lbWJlcnM9c2VsZi5jb21taXR0ZWVfbWVtYmVycy52YWx1ZSwKICAgIC8vICAgICBjb21taXR0ZWVfdm90ZXM9c2VsZi5jb21taXR0ZWVfdm90ZXMudmFsdWUsCiAgICAvLyAgICAgdm90ZWRfbWVtYmVycz1zZWxmLnZvdGVkX21lbWJlcnMudmFsdWUsCiAgICAvLyAgICAgYm95Y290dGVkX21lbWJlcnM9c2VsZi5ib3ljb3R0ZWRfbWVtYmVycy52YWx1ZSwKICAgIC8vICAgICBhcHByb3ZhbHM9c2VsZi5hcHByb3ZhbHMudmFsdWUsCiAgICAvLyAgICAgcmVqZWN0aW9ucz1zZWxmLnJlamVjdGlvbnMudmFsdWUsCiAgICAvLyAgICAgbnVsbHM9c2VsZi5udWxscy52YWx1ZSwKICAgIC8vICkKICAgIHVuY292ZXIgMTkKICAgIGl0b2IKICAgIHVuY292ZXIgMjAKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZGlnIDE5CiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDIwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIHB1c2hieXRlcyAweDAwYzQKICAgIGNvbmNhdAogICAgdW5jb3ZlciAxOQogICAgaXRvYgogICAgY29uY2F0CiAgICB1bmNvdmVyIDE4CiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgMTcKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciAxNgogICAgaXRvYgogICAgY29uY2F0CiAgICBieXRlYyAxOSAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAxNwogICAgc2V0Yml0CiAgICBjb25jYXQKICAgIHVuY292ZXIgMTQKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciAxMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDEyCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgMTEKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciAxMAogICAgaXRvYgogICAgY29uY2F0CiAgICB1bmNvdmVyIDkKICAgIGNvbmNhdAogICAgdW5jb3ZlciA4CiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgNwogICAgaXRvYgogICAgY29uY2F0CiAgICB1bmNvdmVyIDYKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciA1CiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgNAogICAgaXRvYgogICAgY29uY2F0CiAgICB1bmNvdmVyIDMKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjExMTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYnl0ZWMgMTAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMucHJvcG9zYWwuY29udHJhY3QuUHJvcG9zYWwuZ2V0X3ZvdGVyX2JveFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldF92b3Rlcl9ib3g6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTE0MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxMTU1CiAgICAvLyBleGlzdHMgPSB2b3Rlcl9hZGRyZXNzIGluIHNlbGYudm90ZXJzCiAgICBieXRlYyAxOCAvLyAiViIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTE1NgogICAgLy8gaWYgZXhpc3RzOgogICAgYnogZ2V0X3ZvdGVyX2JveF9lbHNlX2JvZHlAMwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjExNTcKICAgIC8vIHZvdGVzID0gc2VsZi52b3RlcnNbdm90ZXJfYWRkcmVzc10KICAgIHN3YXAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnZvdGVycyBlbnRyeSBleGlzdHMKICAgIGJ0b2kKCmdldF92b3Rlcl9ib3hfYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjExNDMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgaXRvYgogICAgYnl0ZWMgMTkgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMwogICAgc2V0Yml0CiAgICBjb25jYXQKICAgIGJ5dGVjIDEwIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgpnZXRfdm90ZXJfYm94X2Vsc2VfYm9keUAzOgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTE1OQogICAgLy8gdm90ZXMgPSBVSW50NjQoMCkKICAgIGludGNfMCAvLyAwCiAgICBiIGdldF92b3Rlcl9ib3hfYWZ0ZXJfaWZfZWxzZUA0CgoKLy8gc21hcnRfY29udHJhY3RzLnByb3Bvc2FsLmNvbnRyYWN0LlByb3Bvc2FsLmdldF92b3Rpbmdfc3RhdGVbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfdm90aW5nX3N0YXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjExODMKICAgIC8vIHF1b3J1bV92b3RlcnM9YXJjNC5VSW50MzIoc2VsZi5xdW9ydW1fdGhyZXNob2xkLnZhbHVlKSwKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyMSAvLyAweDcxNzU2ZjcyNzU2ZDVmNzQ2ODcyNjU3MzY4NmY2YzY0CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucXVvcnVtX3RocmVzaG9sZCBleGlzdHMKICAgIGl0b2IKICAgIGR1cAogICAgYml0bGVuCiAgICBpbnRjXzIgLy8gMzIKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGV4dHJhY3QgNCA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTE4NAogICAgLy8gd2VpZ2h0ZWRfcXVvcnVtX3ZvdGVzPWFyYzQuVUludDMyKHNlbGYud2VpZ2h0ZWRfcXVvcnVtX3RocmVzaG9sZC52YWx1ZSksCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjIgLy8gMHg3NzY1Njk2NzY4NzQ2NTY0NWY3MTc1NmY3Mjc1NmQ1Zjc0Njg3MjY1NzM2ODZmNmM2NAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLndlaWdodGVkX3F1b3J1bV90aHJlc2hvbGQgZXhpc3RzCiAgICBpdG9iCiAgICBkdXAKICAgIGJpdGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBleHRyYWN0IDQgNAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjExODUKICAgIC8vIHRvdGFsX3ZvdGVycz1hcmM0LlVJbnQzMihzZWxmLnZvdGVkX21lbWJlcnMudmFsdWUpLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gMHg3NjZmNzQ2NTY0NWY2ZDY1NmQ2MjY1NzI3MwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnZvdGVkX21lbWJlcnMgZXhpc3RzCiAgICBpdG9iCiAgICBkdXAKICAgIGJpdGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBleHRyYWN0IDQgNAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjExODYKICAgIC8vIHRvdGFsX2JveWNvdHQ9YXJjNC5VSW50MzIoc2VsZi5ib3ljb3R0ZWRfbWVtYmVycy52YWx1ZSksCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTMgLy8gMHg2MjZmNzk2MzZmNzQ3NDY1NjQ1ZjZkNjU2ZDYyNjU3MjczCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm95Y290dGVkX21lbWJlcnMgZXhpc3RzCiAgICBpdG9iCiAgICBkdXAKICAgIGJpdGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBleHRyYWN0IDQgNAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjExODcKICAgIC8vIHRvdGFsX2FwcHJvdmFscz1hcmM0LlVJbnQzMihzZWxmLmFwcHJvdmFscy52YWx1ZSksCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNyAvLyAweDYxNzA3MDcyNmY3NjYxNmM3MwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFwcHJvdmFscyBleGlzdHMKICAgIGl0b2IKICAgIGR1cAogICAgYml0bGVuCiAgICBpbnRjXzIgLy8gMzIKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGV4dHJhY3QgNCA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTE4OAogICAgLy8gdG90YWxfcmVqZWN0aW9ucz1hcmM0LlVJbnQzMihzZWxmLnJlamVjdGlvbnMudmFsdWUpLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDggLy8gMHg3MjY1NmE2NTYzNzQ2OTZmNmU3MwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnJlamVjdGlvbnMgZXhpc3RzCiAgICBpdG9iCiAgICBkdXAKICAgIGJpdGxlbgogICAgaW50Y18yIC8vIDMyCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBleHRyYWN0IDQgNAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjExODkKICAgIC8vIHRvdGFsX251bGxzPWFyYzQuVUludDMyKHNlbGYubnVsbHMudmFsdWUpLAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE0IC8vIDB4NmU3NTZjNmM3MwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm51bGxzIGV4aXN0cwogICAgaXRvYgogICAgZHVwCiAgICBiaXRsZW4KICAgIGludGNfMiAvLyAzMgogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZXh0cmFjdCA0IDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxMTkwCiAgICAvLyBxdW9ydW1fcmVhY2hlZD1zZWxmLmlzX3F1b3J1bV92b3RlcnNfcmVhY2hlZCgpLAogICAgY2FsbHN1YiBpc19xdW9ydW1fdm90ZXJzX3JlYWNoZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToxMTkxCiAgICAvLyB3ZWlnaHRlZF9xdW9ydW1fcmVhY2hlZD1zZWxmLmlzX3dlaWdodGVkX3F1b3J1bV92b3Rlc19yZWFjaGVkKCksCiAgICBjYWxsc3ViIGlzX3dlaWdodGVkX3F1b3J1bV92b3Rlc19yZWFjaGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTE5MgogICAgLy8gbWFqb3JpdHlfYXBwcm92ZWQ9c2VsZi5oYXNfbWFqb3JpdHlfYXBwcm92ZWQoKSwKICAgIGNhbGxzdWIgaGFzX21ham9yaXR5X2FwcHJvdmVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTE5MwogICAgLy8gcGxlYmlzY2l0ZT1zZWxmLmlzX3BsZWJpc2NpdGUoKSwKICAgIGNhbGxzdWIgaXNfcGxlYmlzY2l0ZQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjExODItMTE5NAogICAgLy8gcmV0dXJuIHR5cC5Wb3RpbmdTdGF0ZSgKICAgIC8vICAgICBxdW9ydW1fdm90ZXJzPWFyYzQuVUludDMyKHNlbGYucXVvcnVtX3RocmVzaG9sZC52YWx1ZSksCiAgICAvLyAgICAgd2VpZ2h0ZWRfcXVvcnVtX3ZvdGVzPWFyYzQuVUludDMyKHNlbGYud2VpZ2h0ZWRfcXVvcnVtX3RocmVzaG9sZC52YWx1ZSksCiAgICAvLyAgICAgdG90YWxfdm90ZXJzPWFyYzQuVUludDMyKHNlbGYudm90ZWRfbWVtYmVycy52YWx1ZSksCiAgICAvLyAgICAgdG90YWxfYm95Y290dD1hcmM0LlVJbnQzMihzZWxmLmJveWNvdHRlZF9tZW1iZXJzLnZhbHVlKSwKICAgIC8vICAgICB0b3RhbF9hcHByb3ZhbHM9YXJjNC5VSW50MzIoc2VsZi5hcHByb3ZhbHMudmFsdWUpLAogICAgLy8gICAgIHRvdGFsX3JlamVjdGlvbnM9YXJjNC5VSW50MzIoc2VsZi5yZWplY3Rpb25zLnZhbHVlKSwKICAgIC8vICAgICB0b3RhbF9udWxscz1hcmM0LlVJbnQzMihzZWxmLm51bGxzLnZhbHVlKSwKICAgIC8vICAgICBxdW9ydW1fcmVhY2hlZD1zZWxmLmlzX3F1b3J1bV92b3RlcnNfcmVhY2hlZCgpLAogICAgLy8gICAgIHdlaWdodGVkX3F1b3J1bV9yZWFjaGVkPXNlbGYuaXNfd2VpZ2h0ZWRfcXVvcnVtX3ZvdGVzX3JlYWNoZWQoKSwKICAgIC8vICAgICBtYWpvcml0eV9hcHByb3ZlZD1zZWxmLmhhc19tYWpvcml0eV9hcHByb3ZlZCgpLAogICAgLy8gICAgIHBsZWJpc2NpdGU9c2VsZi5pc19wbGViaXNjaXRlKCksCiAgICAvLyApCiAgICB1bmNvdmVyIDEwCiAgICB1bmNvdmVyIDEwCiAgICBjb25jYXQKICAgIHVuY292ZXIgOQogICAgY29uY2F0CiAgICB1bmNvdmVyIDgKICAgIGNvbmNhdAogICAgdW5jb3ZlciA3CiAgICBjb25jYXQKICAgIHVuY292ZXIgNgogICAgY29uY2F0CiAgICB1bmNvdmVyIDUKICAgIGNvbmNhdAogICAgYnl0ZWMgMTkgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgNgogICAgc2V0Yml0CiAgICBpbnRjXzEgLy8gMQogICAgdW5jb3ZlciA1CiAgICBzZXRiaXQKICAgIHB1c2hpbnQgMgogICAgdW5jb3ZlciA0CiAgICBzZXRiaXQKICAgIHB1c2hpbnQgMwogICAgdW5jb3ZlciAzCiAgICBzZXRiaXQKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjExNjMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYnl0ZWMgMTAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMucHJvcG9zYWwuY29udHJhY3QuUHJvcG9zYWwuZ2V0X3VpbnRfZnJvbV9yZWdpc3RyeV9jb25maWcoZ2xvYmFsX3N0YXRlX2tleTogYnl0ZXMpIC0+IHVpbnQ2NDoKZ2V0X3VpbnRfZnJvbV9yZWdpc3RyeV9jb25maWc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MTk3CiAgICAvLyBkZWYgZ2V0X3VpbnRfZnJvbV9yZWdpc3RyeV9jb25maWcoc2VsZiwgZ2xvYmFsX3N0YXRlX2tleTogQnl0ZXMpIC0+IFVJbnQ2NDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjE5OQogICAgLy8gc2VsZi5yZWdpc3RyeV9hcHBfaWQudmFsdWUsIGdsb2JhbF9zdGF0ZV9rZXkKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA0IC8vIDB4NzI2NTY3Njk3Mzc0NzI3OTVmNjE3MDcwNWY2OTY0CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucmVnaXN0cnlfYXBwX2lkIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjE5OC0yMDAKICAgIC8vIHZhbHVlLCBleGlzdHMgPSBBcHBHbG9iYWwuZ2V0X2V4X3VpbnQ2NCgKICAgIC8vICAgICBzZWxmLnJlZ2lzdHJ5X2FwcF9pZC52YWx1ZSwgZ2xvYmFsX3N0YXRlX2tleQogICAgLy8gKQogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjIwMQogICAgLy8gYXNzZXJ0IGV4aXN0cywgZXJyLk1JU1NJTkdfQ09ORklHCiAgICBhc3NlcnQgLy8gTWlzc2luZyBDb25maWcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToyMDIKICAgIC8vIHJldHVybiB2YWx1ZQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLnByb3Bvc2FsLmNvbnRyYWN0LlByb3Bvc2FsLmdldF9ieXRlc19mcm9tX3JlZ2lzdHJ5X2NvbmZpZyhnbG9iYWxfc3RhdGVfa2V5OiBieXRlcykgLT4gYnl0ZXM6CmdldF9ieXRlc19mcm9tX3JlZ2lzdHJ5X2NvbmZpZzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToyMDQKICAgIC8vIGRlZiBnZXRfYnl0ZXNfZnJvbV9yZWdpc3RyeV9jb25maWcoc2VsZiwgZ2xvYmFsX3N0YXRlX2tleTogQnl0ZXMpIC0+IEJ5dGVzOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MjA2CiAgICAvLyBzZWxmLnJlZ2lzdHJ5X2FwcF9pZC52YWx1ZSwgZ2xvYmFsX3N0YXRlX2tleQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gMHg3MjY1Njc2OTczNzQ3Mjc5NWY2MTcwNzA1ZjY5NjQKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5yZWdpc3RyeV9hcHBfaWQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MjA1LTIwNwogICAgLy8gdmFsdWUsIGV4aXN0cyA9IEFwcEdsb2JhbC5nZXRfZXhfYnl0ZXMoCiAgICAvLyAgICAgc2VsZi5yZWdpc3RyeV9hcHBfaWQudmFsdWUsIGdsb2JhbF9zdGF0ZV9rZXkKICAgIC8vICkKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weToyMDgKICAgIC8vIGFzc2VydCBleGlzdHMsIGVyci5NSVNTSU5HX0NPTkZJRwogICAgYXNzZXJ0IC8vIE1pc3NpbmcgQ29uZmlnCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MjA5CiAgICAvLyByZXR1cm4gdmFsdWUKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5wcm9wb3NhbC5jb250cmFjdC5Qcm9wb3NhbC5pc192b3Rpbmdfb3BlbigpIC0+IHVpbnQ2NDoKaXNfdm90aW5nX29wZW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MjEyCiAgICAvLyBlbGFwc2VkX3ZvdGluZ19kdXJhdGlvbiA9IEdsb2JhbC5sYXRlc3RfdGltZXN0YW1wIC0gc2VsZi52b3RlX29wZW5fdHMudmFsdWUKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyOCAvLyAweDc2NmY3NDY1NWY2ZjcwNjU2ZTY5NmU2NzVmNzQ2OTZkNjU3Mzc0NjE2ZDcwCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudm90ZV9vcGVuX3RzIGV4aXN0cwogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjIxMwogICAgLy8gcmV0dXJuIGVsYXBzZWRfdm90aW5nX2R1cmF0aW9uIDw9IHNlbGYudm90aW5nX2R1cmF0aW9uLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMzAgLy8gMHg3NjZmNzQ2OTZlNjc1ZjY0NzU3MjYxNzQ2OTZmNmUKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi52b3RpbmdfZHVyYXRpb24gZXhpc3RzCiAgICA8PQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLnByb3Bvc2FsLmNvbnRyYWN0LlByb3Bvc2FsLmlzX2JveWNvdHQodm90ZXM6IHVpbnQ2NCwgYXBwcm92YWxzOiB1aW50NjQsIHJlamVjdGlvbnM6IHVpbnQ2NCkgLT4gdWludDY0Ogppc19ib3ljb3R0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjI3MgogICAgLy8gZGVmIGlzX2JveWNvdHQoc2VsZiwgdm90ZXM6IFVJbnQ2NCwgYXBwcm92YWxzOiBVSW50NjQsIHJlamVjdGlvbnM6IFVJbnQ2NCkgLT4gYm9vbDoKICAgIHByb3RvIDMgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjI3MwogICAgLy8gcmV0dXJuIGFwcHJvdmFscyA9PSB2b3RlcyBhbmQgcmVqZWN0aW9ucyA9PSB2b3RlcwogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTMKICAgID09CiAgICBieiBpc19ib3ljb3R0X2Jvb2xfZmFsc2VAMwogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgLTMKICAgID09CiAgICBieiBpc19ib3ljb3R0X2Jvb2xfZmFsc2VAMwogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKaXNfYm95Y290dF9ib29sX2ZhbHNlQDM6CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjI3MwogICAgLy8gcmV0dXJuIGFwcHJvdmFscyA9PSB2b3RlcyBhbmQgcmVqZWN0aW9ucyA9PSB2b3RlcwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLnByb3Bvc2FsLmNvbnRyYWN0LlByb3Bvc2FsLmlzX3BsZWJpc2NpdGUoKSAtPiB1aW50NjQ6CmlzX3BsZWJpc2NpdGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6MjkxCiAgICAvLyByZXR1cm4gc2VsZi52b3RlZF9tZW1iZXJzLnZhbHVlID09IHNlbGYuY29tbWl0dGVlX21lbWJlcnMudmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vIDB4NzY2Zjc0NjU2NDVmNmQ2NTZkNjI2NTcyNzMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi52b3RlZF9tZW1iZXJzIGV4aXN0cwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDExIC8vIDB4NjM2ZjZkNmQ2OTc0NzQ2NTY1NWY2ZDY1NmQ2MjY1NzI3MwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNvbW1pdHRlZV9tZW1iZXJzIGV4aXN0cwogICAgPT0KICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5wcm9wb3NhbC5jb250cmFjdC5Qcm9wb3NhbC5hc3NlcnRfZHJhZnRfYW5kX3Byb3Bvc2VyKCkgLT4gdm9pZDoKYXNzZXJ0X2RyYWZ0X2FuZF9wcm9wb3NlcjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTozNDUKICAgIC8vIGFzc2VydCBzZWxmLmlzX3Byb3Bvc2VyKCksIGVyci5VTkFVVEhPUklaRUQKICAgIGNhbGxzdWIgaXNfcHJvcG9zZXIKICAgIGFzc2VydCAvLyBVbmF1dGhvcml6ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTozNDcKICAgIC8vIHNlbGYuc3RhdHVzLnZhbHVlID09IGVubS5TVEFUVVNfRFJBRlQgYW5kIG5vdCBzZWxmLmZpbmFsaXplZC52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gMHg3Mzc0NjE3NDc1NzMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zdGF0dXMgZXhpc3RzCiAgICBpbnRjXzMgLy8gMTAKICAgID09CiAgICBieiBhc3NlcnRfZHJhZnRfYW5kX3Byb3Bvc2VyX2Jvb2xfZmFsc2VAMwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gMHg2NjY5NmU2MTZjNjk3YTY1NjQKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5maW5hbGl6ZWQgZXhpc3RzCiAgICBibnogYXNzZXJ0X2RyYWZ0X2FuZF9wcm9wb3Nlcl9ib29sX2ZhbHNlQDMKICAgIGludGNfMSAvLyAxCgphc3NlcnRfZHJhZnRfYW5kX3Byb3Bvc2VyX2Jvb2xfbWVyZ2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTozNDYtMzQ4CiAgICAvLyBhc3NlcnQgKAogICAgLy8gICAgIHNlbGYuc3RhdHVzLnZhbHVlID09IGVubS5TVEFUVVNfRFJBRlQgYW5kIG5vdCBzZWxmLmZpbmFsaXplZC52YWx1ZQogICAgLy8gKSwgZXJyLldST05HX1BST1BPU0FMX1NUQVRVUwogICAgYXNzZXJ0IC8vIFdyb25nIFByb3Bvc2FsIFN0YXR1cyBvciBmaW5hbGl6ZWQKICAgIHJldHN1YgoKYXNzZXJ0X2RyYWZ0X2FuZF9wcm9wb3Nlcl9ib29sX2ZhbHNlQDM6CiAgICBpbnRjXzAgLy8gMAogICAgYiBhc3NlcnRfZHJhZnRfYW5kX3Byb3Bvc2VyX2Jvb2xfbWVyZ2VANAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5wcm9wb3NhbC5jb250cmFjdC5Qcm9wb3NhbC5pc19wcm9wb3NlcigpIC0+IHVpbnQ2NDoKaXNfcHJvcG9zZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NDUyCiAgICAvLyByZXR1cm4gVHhuLnNlbmRlciA9PSBzZWxmLnByb3Bvc2VyLnZhbHVlCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAweDcwNzI2ZjcwNmY3MzY1NzIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5wcm9wb3NlciBleGlzdHMKICAgID09CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMucHJvcG9zYWwuY29udHJhY3QuUHJvcG9zYWwuaXNfeGdvdl9kYWVtb24oKSAtPiB1aW50NjQ6CmlzX3hnb3ZfZGFlbW9uOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjQ2MAogICAgLy8gcmV0dXJuIFR4bi5zZW5kZXIgPT0gQWNjb3VudCgKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo0NjEKICAgIC8vIHNlbGYuZ2V0X2J5dGVzX2Zyb21fcmVnaXN0cnlfY29uZmlnKEJ5dGVzKHJlZ19jZmcuR1NfS0VZX1hHT1ZfREFFTU9OKSkKICAgIGJ5dGVjIDM5IC8vIDB4Nzg2NzZmNzY1ZjY0NjE2NTZkNmY2ZQogICAgY2FsbHN1YiBnZXRfYnl0ZXNfZnJvbV9yZWdpc3RyeV9jb25maWcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo0NjAtNDYyCiAgICAvLyByZXR1cm4gVHhuLnNlbmRlciA9PSBBY2NvdW50KAogICAgLy8gICAgIHNlbGYuZ2V0X2J5dGVzX2Zyb21fcmVnaXN0cnlfY29uZmlnKEJ5dGVzKHJlZ19jZmcuR1NfS0VZX1hHT1ZfREFFTU9OKSkKICAgIC8vICkKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gQWRkcmVzcyBsZW5ndGggaXMgMzIgYnl0ZXMKICAgID09CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMucHJvcG9zYWwuY29udHJhY3QuUHJvcG9zYWwuaXNfcmVnaXN0cnlfY2FsbCgpIC0+IHVpbnQ2NDoKaXNfcmVnaXN0cnlfY2FsbDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo0NjUKICAgIC8vIHJldHVybiBHbG9iYWwuY2FsbGVyX2FwcGxpY2F0aW9uX2lkID09IHNlbGYucmVnaXN0cnlfYXBwX2lkLnZhbHVlCiAgICBnbG9iYWwgQ2FsbGVyQXBwbGljYXRpb25JRAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDQgLy8gMHg3MjY1Njc2OTczNzQ3Mjc5NWY2MTcwNzA1ZjY5NjQKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5yZWdpc3RyeV9hcHBfaWQgZXhpc3RzCiAgICA9PQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLnByb3Bvc2FsLmNvbnRyYWN0LlByb3Bvc2FsLnBheShyZWNlaXZlcjogYnl0ZXMsIGFtb3VudDogdWludDY0KSAtPiB2b2lkOgpwYXk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NDY3CiAgICAvLyBkZWYgcGF5KHNlbGYsIHJlY2VpdmVyOiBBY2NvdW50LCBhbW91bnQ6IFVJbnQ2NCkgLT4gTm9uZToKICAgIHByb3RvIDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjQ2OC00NzIKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIC8vICAgICByZWNlaXZlcj1yZWNlaXZlciwKICAgIC8vICAgICBhbW91bnQ9YW1vdW50LAogICAgLy8gICAgIGZlZT1VSW50NjQoMCksICAjIGVuZm9yY2VzIHRoZSBzZW5kZXIgdG8gcGF5IHRoZSBmZWUKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGZyYW1lX2RpZyAtMgogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjQ2OAogICAgLy8gaXR4bi5QYXltZW50KAogICAgaW50Y18xIC8vIHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjQ3MQogICAgLy8gZmVlPVVJbnQ2NCgwKSwgICMgZW5mb3JjZXMgdGhlIHNlbmRlciB0byBwYXkgdGhlIGZlZQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NDY4LTQ3MgogICAgLy8gaXR4bi5QYXltZW50KAogICAgLy8gICAgIHJlY2VpdmVyPXJlY2VpdmVyLAogICAgLy8gICAgIGFtb3VudD1hbW91bnQsCiAgICAvLyAgICAgZmVlPVVJbnQ2NCgwKSwgICMgZW5mb3JjZXMgdGhlIHNlbmRlciB0byBwYXkgdGhlIGZlZQogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5wcm9wb3NhbC5jb250cmFjdC5Qcm9wb3NhbC50cmFuc2Zlcl9sb2NrZWRfYW1vdW50KHJlY2VpdmVyOiBieXRlcykgLT4gdm9pZDoKdHJhbnNmZXJfbG9ja2VkX2Ftb3VudDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo0NzQKICAgIC8vIGRlZiB0cmFuc2Zlcl9sb2NrZWRfYW1vdW50KHNlbGYsIHJlY2VpdmVyOiBBY2NvdW50KSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NDc1CiAgICAvLyBzZWxmLnBheShyZWNlaXZlciwgc2VsZi5sb2NrZWRfYW1vdW50LnZhbHVlKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDIwIC8vIDB4NmM2ZjYzNmI2NTY0NWY2MTZkNmY3NTZlNzQKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sb2NrZWRfYW1vdW50IGV4aXN0cwogICAgZnJhbWVfZGlnIC0xCiAgICBzd2FwCiAgICBjYWxsc3ViIHBheQogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjQ3NgogICAgLy8gc2VsZi5sb2NrZWRfYW1vdW50LnZhbHVlID0gVUludDY0KDApCiAgICBieXRlYyAyMCAvLyAweDZjNmY2MzZiNjU2NDVmNjE2ZDZmNzU2ZTc0CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5wcm9wb3NhbC5jb250cmFjdC5Qcm9wb3NhbC5hc3NlcnRfc2FtZV9hcHBfYW5kX21ldGhvZChncm91cF9pbmRleDogdWludDY0KSAtPiB2b2lkOgphc3NlcnRfc2FtZV9hcHBfYW5kX21ldGhvZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo0NzgKICAgIC8vIGRlZiBhc3NlcnRfc2FtZV9hcHBfYW5kX21ldGhvZChzZWxmLCBncm91cF9pbmRleDogVUludDY0KSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NDgwCiAgICAvLyBHVHhuLmFwcGxpY2F0aW9uX2lkKGdyb3VwX2luZGV4KSA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9pZAogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBBcHBsaWNhdGlvbklECiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uSUQKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NDc5LTQ4MQogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBHVHhuLmFwcGxpY2F0aW9uX2lkKGdyb3VwX2luZGV4KSA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9pZAogICAgLy8gKSwgZXJyLldST05HX0FQUF9JRAogICAgYXNzZXJ0IC8vIFdyb25nIEFwcCBJRAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjQ4MgogICAgLy8gYXNzZXJ0IEdUeG4uYXBwbGljYXRpb25fYXJncyhncm91cF9pbmRleCwgMCkgPT0gVHhuLmFwcGxpY2F0aW9uX2FyZ3MoCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjQ4Mi00ODQKICAgIC8vIGFzc2VydCBHVHhuLmFwcGxpY2F0aW9uX2FyZ3MoZ3JvdXBfaW5kZXgsIDApID09IFR4bi5hcHBsaWNhdGlvbl9hcmdzKAogICAgLy8gICAgIDAKICAgIC8vICksIGVyci5XUk9OR19NRVRIT0RfQ0FMTAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgPT0KICAgIGFzc2VydCAvLyBXcm9uZyBNZXRob2QgQ2FsbAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLnByb3Bvc2FsLmNvbnRyYWN0LlByb3Bvc2FsLmlzX3F1b3J1bV92b3RlcnNfcmVhY2hlZCgpIC0+IHVpbnQ2NDoKaXNfcXVvcnVtX3ZvdGVyc19yZWFjaGVkOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjU0NS01NDgKICAgIC8vICMgQSBjYXRlZ29yeSBkZXBlbmRlbnQgcXVvcnVtIG9mIGFsbCB4R292IFZvdGluZyBDb21taXR0ZWUgKDEgeEdvdiwgMSB2b3RlKSBpcyByZWFjaGVkLgogICAgLy8gIyBOdWxsIHZvdGVzIGFmZmVjdCB0aGlzIHF1b3J1bS4KICAgIC8vICMgQm95Y290dCB2b3RlcywgaS5lLiBpbnZhbGlkLCBkbyBub3QgYWZmZWN0IHRoaXMgcXVvcnVtLgogICAgLy8gcXVvcnVtX2RlZmluZWQgPSBzZWxmLnF1b3J1bV90aHJlc2hvbGQudmFsdWUgPiAwCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjEgLy8gMHg3MTc1NmY3Mjc1NmQ1Zjc0Njg3MjY1NzM2ODZmNmM2NAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnF1b3J1bV90aHJlc2hvbGQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NTUwCiAgICAvLyBzZWxmLnZvdGVkX21lbWJlcnMudmFsdWUgLSBzZWxmLmJveWNvdHRlZF9tZW1iZXJzLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAweDc2NmY3NDY1NjQ1ZjZkNjU2ZDYyNjU3MjczCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudm90ZWRfbWVtYmVycyBleGlzdHMKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMyAvLyAweDYyNmY3OTYzNmY3NDc0NjU2NDVmNmQ2NTZkNjI2NTcyNzMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ib3ljb3R0ZWRfbWVtYmVycyBleGlzdHMKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo1NTAtNTUxCiAgICAvLyAgICAgc2VsZi52b3RlZF9tZW1iZXJzLnZhbHVlIC0gc2VsZi5ib3ljb3R0ZWRfbWVtYmVycy52YWx1ZQogICAgLy8gKSA+PSBzZWxmLnF1b3J1bV90aHJlc2hvbGQudmFsdWUgYW5kIHF1b3J1bV9kZWZpbmVkCiAgICBkaWcgMQogICAgPj0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo1NDktNTUxCiAgICAvLyByZXR1cm4gKAogICAgLy8gICAgIHNlbGYudm90ZWRfbWVtYmVycy52YWx1ZSAtIHNlbGYuYm95Y290dGVkX21lbWJlcnMudmFsdWUKICAgIC8vICkgPj0gc2VsZi5xdW9ydW1fdGhyZXNob2xkLnZhbHVlIGFuZCBxdW9ydW1fZGVmaW5lZAogICAgJiYKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5wcm9wb3NhbC5jb250cmFjdC5Qcm9wb3NhbC5pc193ZWlnaHRlZF9xdW9ydW1fdm90ZXNfcmVhY2hlZCgpIC0+IHVpbnQ2NDoKaXNfd2VpZ2h0ZWRfcXVvcnVtX3ZvdGVzX3JlYWNoZWQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NTU0LTU1NgogICAgLy8gIyBBIGNhdGVnb3J5IGRlcGVuZGVudCB3ZWlnaHRlZCBxdW9ydW0gb2YgYWxsIHhHb3YgVm90aW5nIENvbW1pdHRlZSB2b3RpbmcgcG93ZXIgKDEgdm90ZSkgaXMgcmVhY2hlZC4KICAgIC8vICMgTnVsbCB2b3RlcyBhZmZlY3QgdGhpcyBxdW9ydW0uCiAgICAvLyB3ZWlnaHRlZF9xdW9ydW1fZGVmaW5lZCA9IHNlbGYud2VpZ2h0ZWRfcXVvcnVtX3RocmVzaG9sZC52YWx1ZSA+IDAKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyMiAvLyAweDc3NjU2OTY3Njg3NDY1NjQ1ZjcxNzU2ZjcyNzU2ZDVmNzQ2ODcyNjU3MzY4NmY2YzY0CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYud2VpZ2h0ZWRfcXVvcnVtX3RocmVzaG9sZCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo1NTcKICAgIC8vIHRvdGFsX3ZvdGVzID0gc2VsZi5hcHByb3ZhbHMudmFsdWUgKyBzZWxmLnJlamVjdGlvbnMudmFsdWUgKyBzZWxmLm51bGxzLnZhbHVlCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNyAvLyAweDYxNzA3MDcyNmY3NjYxNmM3MwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFwcHJvdmFscyBleGlzdHMKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA4IC8vIDB4NzI2NTZhNjU2Mzc0Njk2ZjZlNzMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5yZWplY3Rpb25zIGV4aXN0cwogICAgKwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE0IC8vIDB4NmU3NTZjNmM3MwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm51bGxzIGV4aXN0cwogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjU1OQogICAgLy8gdG90YWxfdm90ZXMgPj0gc2VsZi53ZWlnaHRlZF9xdW9ydW1fdGhyZXNob2xkLnZhbHVlCiAgICBkaWcgMQogICAgPj0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo1NTktNTYwCiAgICAvLyB0b3RhbF92b3RlcyA+PSBzZWxmLndlaWdodGVkX3F1b3J1bV90aHJlc2hvbGQudmFsdWUKICAgIC8vIGFuZCB3ZWlnaHRlZF9xdW9ydW1fZGVmaW5lZAogICAgJiYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTo1NTgtNTYxCiAgICAvLyByZXR1cm4gKAogICAgLy8gICAgIHRvdGFsX3ZvdGVzID49IHNlbGYud2VpZ2h0ZWRfcXVvcnVtX3RocmVzaG9sZC52YWx1ZQogICAgLy8gICAgIGFuZCB3ZWlnaHRlZF9xdW9ydW1fZGVmaW5lZAogICAgLy8gKQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLnByb3Bvc2FsLmNvbnRyYWN0LlByb3Bvc2FsLmhhc19tYWpvcml0eV9hcHByb3ZlZCgpIC0+IHVpbnQ2NDoKaGFzX21ham9yaXR5X2FwcHJvdmVkOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5OjU2NC01NjYKICAgIC8vICMgVGhlIHJlbGF0aXZlIG1ham9yaXR5IG9mIEFwcHJvdmVkIG92ZXIgUmVqZWN0ZWQgdm90ZXMgaXMgcmVhY2hlZC4KICAgIC8vICMgTnVsbCB2b3RlcyBkbyBub3QgYWZmZWN0IHRoZSByZWxhdGl2ZSBtYWpvcml0eS4KICAgIC8vIHJldHVybiBzZWxmLmFwcHJvdmFscy52YWx1ZSA+IHNlbGYucmVqZWN0aW9ucy52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDcgLy8gMHg2MTcwNzA3MjZmNzY2MTZjNzMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hcHByb3ZhbHMgZXhpc3RzCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOCAvLyAweDcyNjU2YTY1NjM3NDY5NmY2ZTczCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucmVqZWN0aW9ucyBleGlzdHMKICAgID4KICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5wcm9wb3NhbC5jb250cmFjdC5Qcm9wb3NhbC5fdW5hc3NpZ25fdm90ZXIodm90ZXI6IGJ5dGVzLCB2b3RpbmdfcG93ZXI6IHVpbnQ2NCkgLT4gdm9pZDoKX3VuYXNzaWduX3ZvdGVyOgogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5Ojc3OQogICAgLy8gZGVmIF91bmFzc2lnbl92b3RlcihzZWxmLCB2b3RlcjogQWNjb3VudCwgdm90aW5nX3Bvd2VyOiBVSW50NjQpIC0+IE5vbmU6CiAgICBwcm90byAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTozMTMKICAgIC8vIGFzc2VydCB2b3RlciBpbiBzZWxmLnZvdGVycywgZXJyLlZPVEVSX05PVF9GT1VORAogICAgYnl0ZWMgMTggLy8gIlYiCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBWb3RlciBub3QgZm91bmQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wcm9wb3NhbC9jb250cmFjdC5weTozMTQKICAgIC8vIGFzc2VydCB2b3RpbmdfcG93ZXIgPiAwLCBlcnIuSU5WQUxJRF9WT1RJTkdfUE9XRVIKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXJ0IC8vIEludmFsaWQgVm90aW5nIFBvd2VyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcHJvcG9zYWwvY29udHJhY3QucHk6NzgyCiAgICAvLyBzZWxmLmFzc2lnbmVkX21lbWJlcnMudmFsdWUgLT0gMQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gMHg2MTczNzM2OTY3NmU2NTY0NWY2ZDY1NmQ2MjY1NzI3MwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2lnbmVkX21lbWJlcnMgZXhpc3RzCiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgYnl0ZWMgNSAvLyAweDYxNzM3MzY5Njc2ZTY1NjQ1ZjZkNjU2ZDYyNjU3MjczCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5Ojc4MwogICAgLy8gc2VsZi5hc3NpZ25lZF92b3Rlcy52YWx1ZSAtPSB2b3RpbmdfcG93ZXIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxNyAvLyAweDYxNzM3MzY5Njc2ZTY1NjQ1Zjc2NmY3NDY1NzMKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hc3NpZ25lZF92b3RlcyBleGlzdHMKICAgIGZyYW1lX2RpZyAtMQogICAgLQogICAgYnl0ZWMgMTcgLy8gMHg2MTczNzM2OTY3NmU2NTY0NWY3NjZmNzQ2NTczCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3Byb3Bvc2FsL2NvbnRyYWN0LnB5Ojc4NAogICAgLy8gZGVsIHNlbGYudm90ZXJzW3ZvdGVyXQogICAgYm94X2RlbAogICAgcG9wCiAgICByZXRzdWIK", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CiAFAAEgCpBOJikGc3RhdHVzAAlmaW5hbGl6ZWQIcHJvcG9zZXIPcmVnaXN0cnlfYXBwX2lkEGFzc2lnbmVkX21lbWJlcnMNdm90ZWRfbWVtYmVycwlhcHByb3ZhbHMKcmVqZWN0aW9ucwFNBBUffHURY29tbWl0dGVlX21lbWJlcnMQcmVxdWVzdGVkX2Ftb3VudBFib3ljb3R0ZWRfbWVtYmVycwVudWxscw9jb21taXR0ZWVfdm90ZXMQZnVuZGluZ19jYXRlZ29yeQ5hc3NpZ25lZF92b3RlcwFWAQANbG9ja2VkX2Ftb3VudBBxdW9ydW1fdGhyZXNob2xkGXdlaWdodGVkX3F1b3J1bV90aHJlc2hvbGQmRVJSOldyb25nIFByb3Bvc2FsIFN0YXR1cyBvciBmaW5hbGl6ZWQMY29tbWl0dGVlX2lkEW9wZW5fcHJvcG9zYWxfZmVlHGRhZW1vbl9vcGVyYXRpb25fZnVuZGluZ19icHMOb3Blbl90aW1lc3RhbXAWdm90ZV9vcGVuaW5nX3RpbWVzdGFtcAxmdW5kaW5nX3R5cGUPdm90aW5nX2R1cmF0aW9uD3BhdXNlZF9yZWdpc3RyeRRzdWJtaXNzaW9uX3RpbWVzdGFtcBFtZXRhZGF0YV91cGxvYWRlZAV0aXRsZQVmb2N1cxNkaXNjdXNzaW9uX2R1cmF0aW9uFG1pbl9yZXF1ZXN0ZWRfYW1vdW50Gm1heF9yZXF1ZXN0ZWRfYW1vdW50X2xhcmdlC3hnb3ZfZGFlbW9uE0VSUjpWb3RlciBub3QgZm91bmQxGEAAijE1gQMSRDE0gRsSRDE3FEQxNhREKzIDZycEImcnGClnJwsiZycPImcnGSJnJxoiZycbImcnICJnJxwiZygiZyoiZychImcnIilnJxAiZycjImcnHSJnJwwiZycUImcnJCJnJx4iZycVImcnFiJnJwUiZycRImcnBiJnJw0iZycHImcnCCJnJw4iZ4AEJDeNPDYaAI4BAJExGRREMRhBAHqCEATtrrnKBHFDmU8Ec3EyGgQ05hPKBA2asNcEGEGg0gRzTb7MBHb/THAEIS2fBwSKXkyABCrBmwUEgCBptAS2Seh0BCRhX5AENpxCugTb2D3ZNhoAjhAAXwN+A9UEFwRcBVwHPQeoCDEImwjNCU0KKQsCCzAAAQAjQ4AEzGlOqjYaAI4BAA0AMRmBBRIxGBBEQgntNhoBSRUkEkQyDUQrTGcnBDINZycYiAumJxhMZycLiAuQJwtMZycPiAuHJw9MZycZiAt+JxlMZycaiAt1JxpMZyNDMRYjCUk4ECMSRDYaAUkiWYECCEsBFRJEVwIANhoCSRWBCBJEFzYaA0kVgQgSRBc2GgRJTgMVIxJEJx+ICzEURIgLk0QiKGVEQALQIiplREACySNESwNJFYF7DkQpE0RLASUSQAAISwGBFBJBAqkjRCcliAr6JyaICvVLAklOAk8DD0RLAQ9EgBdwcm9wb3NhbF9jb21taXRtZW50X2Jwc4gKzEsBCyEECk8GSTgAIitlRBJESTgHMgoSRDgISU4DEkQnIk8GZ4AabWF4X3JlcXVlc3RlZF9hbW91bnRfc21hbGyIComAG21heF9yZXF1ZXN0ZWRfYW1vdW50X21lZGl1bYgKaU4CDkEB+0glJxBMZycdTwNnJwxPAmdMFycjTGcnFExnIicQZUxJTwJESUQiJwxlREQlEkEBgkiAGWRpc2N1c3Npb25fZHVyYXRpb25fc21hbGyIChQnJExnIicQZUxJTwJEJRJBARBIgBV2b3RpbmdfZHVyYXRpb25fc21hbGyICecnHkxngAxxdW9ydW1fc21hbGyICdKADHF1b3J1bV9sYXJnZYgJwUsBCScliAm5JyaICbRLAQkiJwxlRE8CCU8CC0wKCCInC2VECyEECicVTGeAFXdlaWdodGVkX3F1b3J1bV9zbWFsbIgJfIAVd2VpZ2h0ZWRfcXVvcnVtX2xhcmdliAliSwEJJyWICVonJogJVUsBCSInDGVETwIJTwILTAoIIicPZUQLIQQKJxZMZyglZycbMgdnIicdZUQWSZOBCA5EVwcBIicMZUQiJxBlRBZJk4EIDkRXBwEyBk8CFk8DTFBPAlBMFlCABEsVjZhMULAjQ4EUEkEAHoAWdm90aW5nX2R1cmF0aW9uX21lZGl1bYgI0UL+54AVdm90aW5nX2R1cmF0aW9uX2xhcmdliAi0Qv7KgRQSQQAigBpkaXNjdXNzaW9uX2R1cmF0aW9uX21lZGl1bYgIjEL+dYAZZGlzY3Vzc2lvbl9kdXJhdGlvbl9sYXJnZYgIa0L+VEsCD0EABYEUQv38gR5C/fciQv1UIkL9NDYaAUkiWYECCEsBFRJEVwIASTYaAkkVIxJEIlMnH4gILxREiAh2TBVJTgJEJyEjZ0EAD0gnCbxIJwm8SCcJTL8jQycJvURJTwIIJwlM0ycJTE8Cu0L/6YgIc0QiKGVEJRNAAAciKmVEQQAqJxdJKRNBAA9JFRZXBgJMUCcKTFCwI0NIIitlRIgIYCcJvEgqI2cpQv/eKUL/1CcfiAeyFESIB/kyByInG2VECSInJGVED0QiJyFlREQnJ4gHoEkVJBJEIicZZUQiJxplRAshBAqICAMogRRnJyAyB2cjQylJNhoBRwIiWUlOAoEoC4ECCEwVEkSIB8hEIihlRIEUEkQxFkAA0jIERQMjRQRLA0sDDEEADUsDSYgH4yMIRQRC/+siRQRLA0sBDEEARUsBVwIASwRJTgKBKAuBKFhJVwAgTCRbJxJPAlBJvUUBFERLAURLARa/IicFZUQjCCcFTGciJxFlRAgnEUxnIwhFBEL/syInBWVEIicLZUQSQQBWIicRZUQiJw9lRBJEKIEZZzIHJxxLAWciJx5lREsBCCInFWVEFkmTJA5EVwQEIicWZUQWSZMkDkRXBAQyBk8EFk8EFlBPA1BPAlBMFlCABNzr4cVMULAjQyKIByJC/0MpNhoBSRUkEkQ2GgJJFYEIEkQXTDYaA0kVgQgSRBdOAogGzEQiKGVEgRkTQQGLJxdJKRNBABVFAUUBRQFJFRZXBgJMUCcKTFCwI0NIJxJLAVBJvUUBQAErJyhJKRJBARhISb5EF0lFBiInBmVEIwgnBkxnSwNLBYgGIUEAxCInDWVEIwgnDUxnI04EIk8CSwaIBt5MSRUjSwEPI0sCTwJNTFJJFSQSRE8CFkmTJA5EVwQETwMWSZMkDkRXBARPAxZJkyQORFcEBCInBmVEFkmTJA5EVwQEIicNZUQWSZMkDkRXBAQiJwdlRBZJkyQORFcEBCInCGVEFkmTJA5EVwQEIicOZUQWSZMkDkRXBAQyBk8JTwlQTwhQTwdQJxMiTwlUUE8GUE8FUE8EUE8DUE8CUEwWUIAEqRCKGkxQsClC/vsiTgRLBUsDSU4CCUsFSU4DCUlOA04DIicHZUQIJwdMZyInCGVECCcITGciJw5lRAgnDkxnQv8URQFFAUUBRQFC/rlJvkQXSUUGSwNLBQgMQQAiSwRLA0sFiAT/QAAWgBFFUlI6Vm90ZXMgaW52YWxpZEL+pSlC/qGIBNBAAB6AGUVSUjpWb3RpbmcgUGVyaW9kIEV4cGlyZWRC/lMpQv5PJx+IBIwURCIoZUSBGRJEiASZQQAGiAS5QQBMI0SIBTRBAECIBUNBADqIBVhBADQjSUEAISiBHmeIBJYyBicTIk8EVCNPA1RMFlCABIt4lRRMULAjQyiBKGciK2VEiATLQv/VIkL/ySJC/7E2GgFHAiJZSU4CJAuBAghMFRJEiASNRCIoZUSBHhJAAAoiKGVEgSgSQQAHIiplREEAUycXSSkTQQAPSRUWVwYCTFAnCkxQsCNDSCJJSwIMQQAuSwJXAgBLASQLJFhJTgInEkxQSb1FAUAAB0YDJyhC/8i+RBdPAkyIBKojCEL/y0gpQv+1KUL/qzYaAUkVIxJEIlNJMQCADHhnb3ZfY291bmNpbIgDjEkVJBJEEkQiKGVEgR4SRCInBWVEFERBACUogTxnIicEZURyCESIA/EyBicTIk8DVEwWUIAErugXGUxQsCNDKIEtZyIrZUSIA9BC/9yIA61EIihlRIEtE0EAICcXSSkTQQAPSRUWVwYCTFAnCkxQsCNDSCiBMmcpQv/oKUL/3iJJKUk2GgFHAiJZSU4CJAuBAghMFRJEiANWRCIoZUSBFBJEMRZAAFEyBEUDI0UESwNLAwxBAA1LA0mIA3EjCEUEQv/rIklLAgxBACtLAlcCAEsBJAskWElFBycSTFBJRQi9RQFBAAtLBr5EF0sGTIgDjiMIQv/OI0MiiAMxQv/EiAL7RCIqZURAAC4iKGVEQQCnIihlRCUTQQCeIihlRIEyE0EAlCIoZUSBPBNBAIoiKGVEgSgTQQCAJxdJKRNBAA9JFRZXBgJMUCcKTFCwI0NIIicFZURBADOALkVSUjpUaGVyZSBhcmUgdm90ZXJzIGFzc2lnbmVkIHRvIHRoaXMgcHJvcG9zYWxC/7UiKGVEJRJBAAciK2VEiAJ/IicEZURyCEQyCnMARDIKcwFECYgCVSojZylC/4gpQv9+iAIwRCIqZUREJwm8SCInBGVEcghEMgpzAESIAi0jQyIrZUQiJwRlRCInImVEIicbZUQiJyBlRCInHGVEIihlRCIqZUQiJxBlRCInI2VEFkmTgQgORFcHASInHWVEIicMZUQiJxRlRCInGGVEIicLZUQiJw9lRCInBmVEIicNZUQiJwdlRCInCGVEIicOZURPExZPFExQSxMVFlcGAk8UUEyAAgDEUE8TFlBPEhZQTxEWUE8QFlAnEyJPEVRQTw4WUE8NUE8MFlBPCxZQTwoWUE8JUE8IFlBPBxZQTwYWUE8FFlBPBBZQTwMWUE8CFlBMUCcKTFCwI0M2GgFJFSQSRCcSTFBJvUlPAkhBABNMvkQXFicTIk8DVFAnCkxQsCNDRQEiQv/rIicVZUQWSZMkDkRXBAQiJxZlRBZJkyQORFcEBCInBmVEFkmTJA5EVwQEIicNZUQWSZMkDkRXBAQiJwdlRBZJkyQORFcEBCInCGVEFkmTJA5EVwQEIicOZUQWSZMkDkRXBASIAPyIAQ6IASaIAHBPCk8KUE8JUE8IUE8HUE8GUE8FUCcTIk8GVCNPBVSBAk8EVIEDTwNUUCcKTFCwI0OKAQEiJwRlRIv/ZUSJigEBIicEZUSL/2VEiTIHIiccZUQJIiceZUQOiYoDAYv+i/0SQQAKi/+L/RJBAAIjiSKJIicGZUQiJwtlRBKJiAAYRCIoZUQlEkEACiIqZURAAAMjRIkiQv/6MQAiK2VEEokxACcniP+XSRUkEkQSiTINIicEZUQSiYoCALGL/7IIi/6yByOyECKyAbOJigEAIicUZUSL/0yI/94nFCJniYoBAIv/OBgyCBJEi/85GgA2GgASRIkiJxVlRCInBmVEIicNZUQJSwEPEIkiJxZlRCInB2VEIicIZUQIIicOZUQISwEPEIkiJwdlRCInCGVEDYmKAgAnEov+UEm9RQFEi/9EIicFZUQjCScFTGciJxFlRIv/CScRTGe8SIk=", "clear": "CoEBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 10, "patch": 1 } }, "events": [ { "name": "Opened", "args": [ { "type": "uint8", "name": "funding_type" }, { "type": "uint64", "name": "requested_amount" }, { "type": "uint8", "name": "category" }, { "type": "uint64", "name": "round" } ], "desc": "The Proposal has been opened" }, { "name": "Submitted", "args": [ { "type": "uint64", "name": "vote_opening" }, { "type": "uint64", "name": "vote_closing" }, { "type": "uint32", "name": "quorum_voters" }, { "type": "uint32", "name": "weighted_quorum_votes" }, { "type": "uint64", "name": "round" } ], "desc": "The Proposal has been submitted for voting" }, { "name": "Vote", "args": [ { "type": "address", "name": "xgov" }, { "type": "uint32", "name": "approvals" }, { "type": "uint32", "name": "rejections" }, { "type": "uint32", "name": "nulls" }, { "type": "bool", "name": "boycotted" }, { "type": "uint32", "name": "total_voters" }, { "type": "uint32", "name": "total_boycott" }, { "type": "uint32", "name": "total_approvals" }, { "type": "uint32", "name": "total_rejections" }, { "type": "uint32", "name": "total_nulls" }, { "type": "uint64", "name": "round" } ], "desc": "A vote has been cast on the Proposal" }, { "name": "Scrutiny", "args": [ { "type": "bool", "name": "approved" }, { "type": "bool", "name": "plebiscite" }, { "type": "uint64", "name": "round" } ], "desc": "The vote has been scrutinized" }, { "name": "Review", "args": [ { "type": "bool", "name": "veto" }, { "type": "uint64", "name": "round" } ], "desc": "The xGov Council has reviewed the Proposal" } ], "templateVariables": {} }