{ "name": "BountyEscrow", "structs": { "BountyData": [ { "name": "buyer", "type": "address" }, { "name": "amount", "type": "uint64" }, { "name": "deadline", "type": "uint64" }, { "name": "status", "type": "uint8" } ] }, "methods": [ { "name": "postBounty", "args": [ { "type": "string", "name": "bountyId" }, { "type": "uint64", "name": "amount" }, { "type": "uint64", "name": "deadline" } ], "returns": { "type": "byte[]" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Post a bounty and lock USDC in escrow.\nTransaction group expected:\n [0] USDC transfer: Buyer \u2192 Contract (axfer)\n [1] App call: postBounty(bountyId, amount, deadline)", "events": [], "recommendations": {} }, { "name": "acceptSubmission", "args": [ { "type": "string", "name": "bountyId" }, { "type": "address", "name": "winnerAddress" } ], "returns": { "type": "byte[]" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Accept a submission and release USDC to winner.\nCaller must be the original bounty poster.\nUses 2 inner transactions: USDC transfer to winner + box deletion.\nFee must cover inner txn: fee = 3000 (1 app call + 2 inner)", "events": [], "recommendations": {} }, { "name": "refundBounty", "args": [ { "type": "string", "name": "bountyId" } ], "returns": { "type": "byte[]" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Refund bounty USDC back to buyer.\nCan only be called by buyer and only after deadline has passed.\nFee must cover inner txn: fee = 2000", "events": [], "recommendations": {} }, { "name": "getBountyEscrow", "args": [ { "type": "string", "name": "bountyId" } ], "returns": { "type": "(address,uint64,uint64,uint8)", "struct": "BountyData" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "desc": "Read-only: get bounty escrow state.", "events": [], "recommendations": {} }, { "name": "fundContract", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Fund the contract with ALGO for MBR (admin only).", "events": [], "recommendations": {} }, { "name": "optInToUSDC", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Opt the contract into USDC ASA (admin only).\nCall once after deployment so the contract can receive USDC.\nSubsequent calls are harmless (0-amount self-transfer is a no-op if already opted in).", "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 0, "bytes": 0 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": {}, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": { "bounties": { "keyType": "AVMBytes", "valueType": "BountyData", "prefix": "Ym91bnR5Xw==" } } } }, "bareActions": { "create": [ "NoOp" ], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 139 ], "errorMessage": "Bounty already exists" }, { "pc": [ 227, 295 ], "errorMessage": "Bounty is not open" }, { "pc": [ 209, 277, 356 ], "errorMessage": "Bounty not found" }, { "pc": [ 304 ], "errorMessage": "Deadline has not passed yet" }, { "pc": [ 35 ], "errorMessage": "OnCompletion must be NoOp" }, { "pc": [ 96 ], "errorMessage": "OnCompletion must be NoOp && can only call when creating" }, { "pc": [ 221 ], "errorMessage": "Only bounty poster can accept" }, { "pc": [ 289 ], "errorMessage": "Only bounty poster can refund" }, { "pc": [ 375 ], "errorMessage": "Only creator can fund" }, { "pc": [ 383 ], "errorMessage": "Only creator can opt-in" }, { "pc": [ 104, 184, 262, 341 ], "errorMessage": "invalid array length header" }, { "pc": [ 111, 191, 269, 348 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 200 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 120, 129 ], "errorMessage": "invalid number of bytes for arc4.uint64" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDIgMTA0NTg5NDEKICAgIGJ5dGVjYmxvY2sgImJvdW50eV8iIDB4MTUxZjdjNzUwMDIwCiAgICAvLyBzbWFydF9jb250cmFjdHMvQm91bnR5RXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MjgKICAgIC8vIGV4cG9ydCBjbGFzcyBCb3VudHlFc2Nyb3cgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTMKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0CiAgICBwdXNoYnl0ZXNzIDB4ZDk0MmM4NzUgMHhlNDMyYWI5ZiAweGE2OGM0MGUxIDB4MWJjNzJkZDkgMHg1NDI1NGYwYSAweGQ5YTAxMGVjIC8vIG1ldGhvZCAicG9zdEJvdW50eShzdHJpbmcsdWludDY0LHVpbnQ2NClieXRlW10iLCBtZXRob2QgImFjY2VwdFN1Ym1pc3Npb24oc3RyaW5nLGFkZHJlc3MpYnl0ZVtdIiwgbWV0aG9kICJyZWZ1bmRCb3VudHkoc3RyaW5nKWJ5dGVbXSIsIG1ldGhvZCAiZ2V0Qm91bnR5RXNjcm93KHN0cmluZykoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ4KSIsIG1ldGhvZCAiZnVuZENvbnRyYWN0KCl2b2lkIiwgbWV0aG9kICJvcHRJblRvVVNEQygpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIHBvc3RCb3VudHkgYWNjZXB0U3VibWlzc2lvbiByZWZ1bmRCb3VudHkgZ2V0Qm91bnR5RXNjcm93IGZ1bmRDb250cmFjdCBvcHRJblRvVVNEQwogICAgZXJyCgptYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUAxMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9Cb3VudHlFc2Nyb3cvY29udHJhY3QuYWxnby50czoyOAogICAgLy8gZXhwb3J0IGNsYXNzIEJvdW50eUVzY3JvdyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICAmJgogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AgJiYgY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL0JvdW50eUVzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjpCb3VudHlFc2Nyb3cucG9zdEJvdW50eVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnBvc3RCb3VudHk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvQm91bnR5RXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MzgKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgOCAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgOCAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL0JvdW50eUVzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjMwCiAgICAvLyBwcml2YXRlIGJvdW50aWVzID0gQm94TWFwPGJ5dGVzLCBCb3VudHlEYXRhPih7IGtleVByZWZpeDogImJvdW50eV8iIH0pOwogICAgYnl0ZWNfMCAvLyAiYm91bnR5XyIKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvQm91bnR5RXNjcm93L2NvbnRyYWN0LmFsZ28udHM6NDMKICAgIC8vIGFzc2VydCghdGhpcy5ib3VudGllcyhib3VudHlLZXkpLmV4aXN0cywgIkJvdW50eSBhbHJlYWR5IGV4aXN0cyIpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgICEKICAgIGFzc2VydCAvLyBCb3VudHkgYWxyZWFkeSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9Cb3VudHlFc2Nyb3cvY29udHJhY3QuYWxnby50czo0Ni01MwogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgeGZlckFzc2V0OiBVU0RDX0FTQV9JRCwKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9Cb3VudHlFc2Nyb3cvY29udHJhY3QuYWxnby50czo0OAogICAgLy8gYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL0JvdW50eUVzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjUwCiAgICAvLyBhc3NldEFtb3VudDogMCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvQm91bnR5RXNjcm93L2NvbnRyYWN0LmFsZ28udHM6NDkKICAgIC8vIHhmZXJBc3NldDogVVNEQ19BU0FfSUQsCiAgICBpbnRjXzMgLy8gMTA0NTg5NDEKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9Cb3VudHlFc2Nyb3cvY29udHJhY3QuYWxnby50czo0Ni01MgogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgeGZlckFzc2V0OiBVU0RDX0FTQV9JRCwKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL0JvdW50eUVzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjUxCiAgICAvLyBmZWU6IDAsCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9Cb3VudHlFc2Nyb3cvY29udHJhY3QuYWxnby50czo0Ni01MwogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgeGZlckFzc2V0OiBVU0RDX0FTQV9JRCwKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvQm91bnR5RXNjcm93L2NvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGJ1eWVyOiBuZXcgYXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpLAogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL0JvdW50eUVzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjU2LTYxCiAgICAvLyBjb25zdCBib3VudHlEYXRhID0gbmV3IEJvdW50eURhdGEoewogICAgLy8gICBidXllcjogbmV3IGFyYzQuQWRkcmVzcyhUeG4uc2VuZGVyKSwKICAgIC8vICAgYW1vdW50OiBuZXcgYXJjNC5VaW50NjQoYW1vdW50KSwKICAgIC8vICAgZGVhZGxpbmU6IG5ldyBhcmM0LlVpbnQ2NChkZWFkbGluZSksCiAgICAvLyAgIHN0YXR1czogbmV3IGFyYzQuVWludDgoMCksIC8vIG9wZW4KICAgIC8vIH0pOwogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvQm91bnR5RXNjcm93L2NvbnRyYWN0LmFsZ28udHM6NjAKICAgIC8vIHN0YXR1czogbmV3IGFyYzQuVWludDgoMCksIC8vIG9wZW4KICAgIHB1c2hieXRlcyAweDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvQm91bnR5RXNjcm93L2NvbnRyYWN0LmFsZ28udHM6NTYtNjEKICAgIC8vIGNvbnN0IGJvdW50eURhdGEgPSBuZXcgQm91bnR5RGF0YSh7CiAgICAvLyAgIGJ1eWVyOiBuZXcgYXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpLAogICAgLy8gICBhbW91bnQ6IG5ldyBhcmM0LlVpbnQ2NChhbW91bnQpLAogICAgLy8gICBkZWFkbGluZTogbmV3IGFyYzQuVWludDY0KGRlYWRsaW5lKSwKICAgIC8vICAgc3RhdHVzOiBuZXcgYXJjNC5VaW50OCgwKSwgLy8gb3BlbgogICAgLy8gfSk7CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9Cb3VudHlFc2Nyb3cvY29udHJhY3QuYWxnby50czo2MwogICAgLy8gdGhpcy5ib3VudGllcyhib3VudHlLZXkpLnZhbHVlID0gY2xvbmUoYm91bnR5RGF0YSk7CiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvQm91bnR5RXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MzgKICAgIC8vIEBhYmltZXRob2QoKQogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1MDAyMAogICAgLy8gc21hcnRfY29udHJhY3RzL0JvdW50eUVzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjY1CiAgICAvLyByZXR1cm4gVHhuLnR4SWQ7CiAgICB0eG4gVHhJRAogICAgLy8gc21hcnRfY29udHJhY3RzL0JvdW50eUVzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjM4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL0JvdW50eUVzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjpCb3VudHlFc2Nyb3cuYWNjZXB0U3VibWlzc2lvbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmFjY2VwdFN1Ym1pc3Npb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvQm91bnR5RXNjcm93L2NvbnRyYWN0LmFsZ28udHM6NzQKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL0JvdW50eUVzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjMwCiAgICAvLyBwcml2YXRlIGJvdW50aWVzID0gQm94TWFwPGJ5dGVzLCBCb3VudHlEYXRhPih7IGtleVByZWZpeDogImJvdW50eV8iIH0pOwogICAgYnl0ZWNfMCAvLyAiYm91bnR5XyIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvQm91bnR5RXNjcm93L2NvbnRyYWN0LmFsZ28udHM6NzgKICAgIC8vIGFzc2VydCh0aGlzLmJvdW50aWVzKGJvdW50eUtleSkuZXhpc3RzLCAiQm91bnR5IG5vdCBmb3VuZCIpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBCb3VudHkgbm90IGZvdW5kCiAgICAvLyBzbWFydF9jb250cmFjdHMvQm91bnR5RXNjcm93L2NvbnRyYWN0LmFsZ28udHM6ODAKICAgIC8vIGNvbnN0IGJvdW50eURhdGEgPSBjbG9uZSh0aGlzLmJvdW50aWVzKGJvdW50eUtleSkudmFsdWUpOwogICAgZHVwCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9Cb3VudHlFc2Nyb3cvY29udHJhY3QuYWxnby50czo4MwogICAgLy8gY29uc3QgY2FsbGVyQWRkciA9IG5ldyBhcmM0LkFkZHJlc3MoVHhuLnNlbmRlcik7CiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvQm91bnR5RXNjcm93L2NvbnRyYWN0LmFsZ28udHM6ODQKICAgIC8vIGFzc2VydChib3VudHlEYXRhLmJ1eWVyLm5hdGl2ZSA9PT0gY2FsbGVyQWRkci5uYXRpdmUsICJPbmx5IGJvdW50eSBwb3N0ZXIgY2FuIGFjY2VwdCIpOwogICAgZGlnIDEKICAgIGV4dHJhY3QgMCAzMgogICAgPT0KICAgIGFzc2VydCAvLyBPbmx5IGJvdW50eSBwb3N0ZXIgY2FuIGFjY2VwdAogICAgLy8gc21hcnRfY29udHJhY3RzL0JvdW50eUVzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjg3CiAgICAvLyBhc3NlcnQoYm91bnR5RGF0YS5zdGF0dXMuYXNVaW50NjQoKSA9PT0gVWludDY0KDApLCAiQm91bnR5IGlzIG5vdCBvcGVuIik7CiAgICBkdXAKICAgIHB1c2hpbnQgNDggLy8gNDgKICAgIGdldGJ5dGUKICAgICEKICAgIGFzc2VydCAvLyBCb3VudHkgaXMgbm90IG9wZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9Cb3VudHlFc2Nyb3cvY29udHJhY3QuYWxnby50czo5MC05NwogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogd2lubmVyQWRkcmVzcy5uYXRpdmUsCiAgICAvLyAgICAgeGZlckFzc2V0OiBVU0RDX0FTQV9JRCwKICAgIC8vICAgICBhc3NldEFtb3VudDogYm91bnR5RGF0YS5hbW91bnQuYXNVaW50NjQoKSwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9Cb3VudHlFc2Nyb3cvY29udHJhY3QuYWxnby50czo5NAogICAgLy8gYXNzZXRBbW91bnQ6IGJvdW50eURhdGEuYW1vdW50LmFzVWludDY0KCksCiAgICBwdXNoaW50IDMyIC8vIDMyCiAgICBleHRyYWN0X3VpbnQ2NAogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL0JvdW50eUVzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjkzCiAgICAvLyB4ZmVyQXNzZXQ6IFVTRENfQVNBX0lELAogICAgaW50Y18zIC8vIDEwNDU4OTQxCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgc3dhcAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvQm91bnR5RXNjcm93L2NvbnRyYWN0LmFsZ28udHM6OTAtOTYKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IHdpbm5lckFkZHJlc3MubmF0aXZlLAogICAgLy8gICAgIHhmZXJBc3NldDogVVNEQ19BU0FfSUQsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IGJvdW50eURhdGEuYW1vdW50LmFzVWludDY0KCksCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgcHVzaGludCA0IC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9Cb3VudHlFc2Nyb3cvY29udHJhY3QuYWxnby50czo5NQogICAgLy8gZmVlOiAwLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvQm91bnR5RXNjcm93L2NvbnRyYWN0LmFsZ28udHM6OTAtOTcKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IHdpbm5lckFkZHJlc3MubmF0aXZlLAogICAgLy8gICAgIHhmZXJBc3NldDogVVNEQ19BU0FfSUQsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IGJvdW50eURhdGEuYW1vdW50LmFzVWludDY0KCksCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL0JvdW50eUVzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjEwMAogICAgLy8gdGhpcy5ib3VudGllcyhib3VudHlLZXkpLmRlbGV0ZSgpOwogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvQm91bnR5RXNjcm93L2NvbnRyYWN0LmFsZ28udHM6NzQKICAgIC8vIEBhYmltZXRob2QoKQogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1MDAyMAogICAgLy8gc21hcnRfY29udHJhY3RzL0JvdW50eUVzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjEwMgogICAgLy8gcmV0dXJuIFR4bi50eElkOwogICAgdHhuIFR4SUQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9Cb3VudHlFc2Nyb3cvY29udHJhY3QuYWxnby50czo3NAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9Cb3VudHlFc2Nyb3cvY29udHJhY3QuYWxnby50czo6Qm91bnR5RXNjcm93LnJlZnVuZEJvdW50eVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnJlZnVuZEJvdW50eToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9Cb3VudHlFc2Nyb3cvY29udHJhY3QuYWxnby50czoxMTAKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgLy8gc21hcnRfY29udHJhY3RzL0JvdW50eUVzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjMwCiAgICAvLyBwcml2YXRlIGJvdW50aWVzID0gQm94TWFwPGJ5dGVzLCBCb3VudHlEYXRhPih7IGtleVByZWZpeDogImJvdW50eV8iIH0pOwogICAgYnl0ZWNfMCAvLyAiYm91bnR5XyIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL0JvdW50eUVzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjExNAogICAgLy8gYXNzZXJ0KHRoaXMuYm91bnRpZXMoYm91bnR5S2V5KS5leGlzdHMsICJCb3VudHkgbm90IGZvdW5kIik7CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEJvdW50eSBub3QgZm91bmQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9Cb3VudHlFc2Nyb3cvY29udHJhY3QuYWxnby50czoxMTYKICAgIC8vIGNvbnN0IGJvdW50eURhdGEgPSBjbG9uZSh0aGlzLmJvdW50aWVzKGJvdW50eUtleSkudmFsdWUpOwogICAgZHVwCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9Cb3VudHlFc2Nyb3cvY29udHJhY3QuYWxnby50czoxMTkKICAgIC8vIGNvbnN0IGNhbGxlckFkZHIgPSBuZXcgYXJjNC5BZGRyZXNzKFR4bi5zZW5kZXIpOwogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL0JvdW50eUVzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjEyMAogICAgLy8gYXNzZXJ0KGJvdW50eURhdGEuYnV5ZXIubmF0aXZlID09PSBjYWxsZXJBZGRyLm5hdGl2ZSwgIk9ubHkgYm91bnR5IHBvc3RlciBjYW4gcmVmdW5kIik7CiAgICBkaWcgMQogICAgZXh0cmFjdCAwIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIE9ubHkgYm91bnR5IHBvc3RlciBjYW4gcmVmdW5kCiAgICAvLyBzbWFydF9jb250cmFjdHMvQm91bnR5RXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MTIzCiAgICAvLyBhc3NlcnQoYm91bnR5RGF0YS5zdGF0dXMuYXNVaW50NjQoKSA9PT0gVWludDY0KDApLCAiQm91bnR5IGlzIG5vdCBvcGVuIik7CiAgICBkdXAKICAgIHB1c2hpbnQgNDggLy8gNDgKICAgIGdldGJ5dGUKICAgICEKICAgIGFzc2VydCAvLyBCb3VudHkgaXMgbm90IG9wZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9Cb3VudHlFc2Nyb3cvY29udHJhY3QuYWxnby50czoxMjYKICAgIC8vIGNvbnN0IGN1cnJlbnRUaW1lID0gR2xvYmFsLmxhdGVzdFRpbWVzdGFtcDsKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9Cb3VudHlFc2Nyb3cvY29udHJhY3QuYWxnby50czoxMjcKICAgIC8vIGFzc2VydChjdXJyZW50VGltZSA+PSBib3VudHlEYXRhLmRlYWRsaW5lLmFzVWludDY0KCksICJEZWFkbGluZSBoYXMgbm90IHBhc3NlZCB5ZXQiKTsKICAgIGRpZyAxCiAgICBwdXNoaW50IDQwIC8vIDQwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgPj0KICAgIGFzc2VydCAvLyBEZWFkbGluZSBoYXMgbm90IHBhc3NlZCB5ZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9Cb3VudHlFc2Nyb3cvY29udHJhY3QuYWxnby50czoxMzAtMTM3CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIHhmZXJBc3NldDogVVNEQ19BU0FfSUQsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IGJvdW50eURhdGEuYW1vdW50LmFzVWludDY0KCksCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvQm91bnR5RXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MTMyCiAgICAvLyBhc3NldFJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL0JvdW50eUVzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjEzNAogICAgLy8gYXNzZXRBbW91bnQ6IGJvdW50eURhdGEuYW1vdW50LmFzVWludDY0KCksCiAgICBzd2FwCiAgICBwdXNoaW50IDMyIC8vIDMyCiAgICBleHRyYWN0X3VpbnQ2NAogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL0JvdW50eUVzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjEzMwogICAgLy8geGZlckFzc2V0OiBVU0RDX0FTQV9JRCwKICAgIGludGNfMyAvLyAxMDQ1ODk0MQogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL0JvdW50eUVzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjEzMC0xMzYKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IFR4bi5zZW5kZXIsCiAgICAvLyAgICAgeGZlckFzc2V0OiBVU0RDX0FTQV9JRCwKICAgIC8vICAgICBhc3NldEFtb3VudDogYm91bnR5RGF0YS5hbW91bnQuYXNVaW50NjQoKSwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL0JvdW50eUVzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjEzNQogICAgLy8gZmVlOiAwLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvQm91bnR5RXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MTMwLTEzNwogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vICAgICB4ZmVyQXNzZXQ6IFVTRENfQVNBX0lELAogICAgLy8gICAgIGFzc2V0QW1vdW50OiBib3VudHlEYXRhLmFtb3VudC5hc1VpbnQ2NCgpLAogICAgLy8gICAgIGZlZTogMCwKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9Cb3VudHlFc2Nyb3cvY29udHJhY3QuYWxnby50czoxNDAKICAgIC8vIHRoaXMuYm91bnRpZXMoYm91bnR5S2V5KS5kZWxldGUoKTsKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL0JvdW50eUVzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjExMAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUwMDIwCiAgICAvLyBzbWFydF9jb250cmFjdHMvQm91bnR5RXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MTQyCiAgICAvLyByZXR1cm4gVHhuLnR4SWQ7CiAgICB0eG4gVHhJRAogICAgLy8gc21hcnRfY29udHJhY3RzL0JvdW50eUVzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjExMAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9Cb3VudHlFc2Nyb3cvY29udHJhY3QuYWxnby50czo6Qm91bnR5RXNjcm93LmdldEJvdW50eUVzY3Jvd1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldEJvdW50eUVzY3JvdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9Cb3VudHlFc2Nyb3cvY29udHJhY3QuYWxnby50czoxNDgKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgLy8gc21hcnRfY29udHJhY3RzL0JvdW50eUVzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjMwCiAgICAvLyBwcml2YXRlIGJvdW50aWVzID0gQm94TWFwPGJ5dGVzLCBCb3VudHlEYXRhPih7IGtleVByZWZpeDogImJvdW50eV8iIH0pOwogICAgYnl0ZWNfMCAvLyAiYm91bnR5XyIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL0JvdW50eUVzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjE1MQogICAgLy8gYXNzZXJ0KHRoaXMuYm91bnRpZXMoYm91bnR5S2V5KS5leGlzdHMsICJCb3VudHkgbm90IGZvdW5kIik7CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEJvdW50eSBub3QgZm91bmQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9Cb3VudHlFc2Nyb3cvY29udHJhY3QuYWxnby50czoxNTIKICAgIC8vIHJldHVybiBjbG9uZSh0aGlzLmJvdW50aWVzKGJvdW50eUtleSkudmFsdWUpOwogICAgYm94X2dldAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvQm91bnR5RXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MTQ4CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9Cb3VudHlFc2Nyb3cvY29udHJhY3QuYWxnby50czo6Qm91bnR5RXNjcm93LmZ1bmRDb250cmFjdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmZ1bmRDb250cmFjdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9Cb3VudHlFc2Nyb3cvY29udHJhY3QuYWxnby50czoxNjAKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSBHbG9iYWwuY3JlYXRvckFkZHJlc3MsICJPbmx5IGNyZWF0b3IgY2FuIGZ1bmQiKTsKICAgIHR4biBTZW5kZXIKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBPbmx5IGNyZWF0b3IgY2FuIGZ1bmQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9Cb3VudHlFc2Nyb3cvY29udHJhY3QuYWxnby50czoxNTgKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9Cb3VudHlFc2Nyb3cvY29udHJhY3QuYWxnby50czo6Qm91bnR5RXNjcm93Lm9wdEluVG9VU0RDW3JvdXRpbmddKCkgLT4gdm9pZDoKb3B0SW5Ub1VTREM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvQm91bnR5RXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MTcwCiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gR2xvYmFsLmNyZWF0b3JBZGRyZXNzLCAiT25seSBjcmVhdG9yIGNhbiBvcHQtaW4iKTsKICAgIHR4biBTZW5kZXIKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBPbmx5IGNyZWF0b3IgY2FuIG9wdC1pbgogICAgLy8gc21hcnRfY29udHJhY3RzL0JvdW50eUVzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjE3MS0xNzgKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIHhmZXJBc3NldDogVVNEQ19BU0FfSUQsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IDAsCiAgICAvLyAgICAgZmVlOiAwLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvQm91bnR5RXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MTczCiAgICAvLyBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvQm91bnR5RXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MTc1CiAgICAvLyBhc3NldEFtb3VudDogMCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvQm91bnR5RXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MTc0CiAgICAvLyB4ZmVyQXNzZXQ6IFVTRENfQVNBX0lELAogICAgaW50Y18zIC8vIDEwNDU4OTQxCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvQm91bnR5RXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MTcxLTE3NwogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgeGZlckFzc2V0OiBVU0RDX0FTQV9JRCwKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gc21hcnRfY29udHJhY3RzL0JvdW50eUVzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjE3NgogICAgLy8gZmVlOiAwLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvQm91bnR5RXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MTcxLTE3OAogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgeGZlckFzc2V0OiBVU0RDX0FTQV9JRCwKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICBmZWU6IDAsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvQm91bnR5RXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MTY4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4K", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CyAEAAECva7+BCYCB2JvdW50eV8GFR98dQAgMRtBADkxGRREMRhEggYE2ULIdQTkMqufBKaMQOEEG8ct2QRUJU8KBNmgEOw2GgCOBgALAFsAqQD4ARoBIgAxGRQxGBQQRCNDNhoBSSJZJAhLARUSRDYaAkkVgQgSRDYaA0kVgQgSRChPA1BJvUUBFESxMgoishIlshGyFIEEshAisgGzMQBPA1BPAlCAAQBQvykxF1CwI0M2GgFJIlkkCEsBFRJENhoCSRWBIBJEKE8CUEm9RQFESb5IMQBLAVcAIBJESYEwVRREsYEgW7ISJbIRTLIUgQSyECKyAbO8SCkxF1CwI0M2GgFJIlkkCEsBFRJEKExQSb1FAURJvkgxAEsBVwAgEkRJgTBVFEQyB0sBgShbD0SxMQBMgSBbshIlshGyFIEEshAisgGzvEgpMRdQsCNDNhoBSSJZJAhLARUSRChMUEm9RQFEvkiABBUffHVMULAjQzEAMgkSRCNDMQAyCRJEsTIKIrISJbIRshSBBLIQIrIBsyND", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 3, "patch": 2 } }, "events": [], "templateVariables": {} }