{ "name": "LoanContract", "structs": {}, "methods": [ { "name": "create_loan", "args": [ { "type": "uint64", "name": "goal_amount" }, { "type": "uint64", "name": "duration_days" }, { "type": "uint64", "name": "tier_required" }, { "type": "uint64", "name": "badge_asset" } ], "returns": { "type": "void" }, "actions": { "create": [ "NoOp" ], "call": [] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "opt_in_to_loan", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "OptIn" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "fund_loan", "args": [ { "type": "pay", "name": "payment" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp", "OptIn" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "repay_loan", "args": [ { "type": "pay", "name": "payment" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "claim_repayment", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "add_guarantor", "args": [ { "type": "address", "name": "guarantor" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "mark_default", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "get_loan_info", "args": [], "returns": { "type": "(uint64,uint64,uint64,uint64)" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 7, "bytes": 2 }, "local": { "ints": 2, "bytes": 0 } }, "keys": { "global": { "borrower": { "keyType": "AVMString", "valueType": "address", "key": "Ym9ycm93ZXI=" }, "goal_amount": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "Z29hbF9hbW91bnQ=" }, "funded_amount": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "ZnVuZGVkX2Ftb3VudA==" }, "repaid_amount": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "cmVwYWlkX2Ftb3VudA==" }, "status": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "c3RhdHVz" }, "deadline": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "ZGVhZGxpbmU=" }, "guarantor": { "keyType": "AVMString", "valueType": "address", "key": "Z3VhcmFudG9y" }, "tier_required": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "dGllcl9yZXF1aXJlZA==" }, "tier_badge_id": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "dGllcl9iYWRnZV9pZA==" } }, "local": { "contribution": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "Y29udHJpYnV0aW9u" }, "claimed": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "Y2xhaW1lZA==" } }, "box": {} }, "maps": { "global": {}, "local": {}, "box": {} } }, "bareActions": { "create": [], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 627 ], "errorMessage": "Already claimed" }, { "pc": [ 283 ], "errorMessage": "Borrower does not hold the required tier badge" }, { "pc": [ 282 ], "errorMessage": "Borrower not opted into badge" }, { "pc": [ 708 ], "errorMessage": "Deadline not passed" }, { "pc": [ 459 ], "errorMessage": "Funding deadline passed" }, { "pc": [ 257 ], "errorMessage": "Invalid tier" }, { "pc": [ 602 ], "errorMessage": "Loan is not CLOSED" }, { "pc": [ 450 ], "errorMessage": "Loan is not OPEN" }, { "pc": [ 553 ], "errorMessage": "Loan is not REPAYING" }, { "pc": [ 678 ], "errorMessage": "Loan must be OPEN" }, { "pc": [ 699 ], "errorMessage": "Loan must be REPAYING" }, { "pc": [ 625 ], "errorMessage": "No contribution found" }, { "pc": [ 686 ], "errorMessage": "Only borrower can add guarantor" }, { "pc": [ 561 ], "errorMessage": "Only borrower can repay" }, { "pc": [ 466 ], "errorMessage": "Payment must be sent to the smart contract" }, { "pc": [ 568 ], "errorMessage": "Payment to contract" }, { "pc": [ 270 ], "errorMessage": "Tier 0 limit is 500" }, { "pc": [ 375 ], "errorMessage": "Tier 1 limit is 2000" }, { "pc": [ 396 ], "errorMessage": "Tier 2 limit is 5000" }, { "pc": [ 416 ], "errorMessage": "Tier 3 limit is 20000" }, { "pc": [ 516, 559, 684 ], "errorMessage": "check self.borrower exists" }, { "pc": [ 457, 706 ], "errorMessage": "check self.deadline exists" }, { "pc": [ 471, 723 ], "errorMessage": "check self.funded_amount exists" }, { "pc": [ 507, 520, 584, 636, 718 ], "errorMessage": "check self.goal_amount exists" }, { "pc": [ 572, 631, 727 ], "errorMessage": "check self.repaid_amount exists" }, { "pc": [ 447, 550, 598, 675, 696, 731 ], "errorMessage": "check self.status exists" }, { "pc": [ 671 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 223, 232, 241, 251 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ 443, 546 ], "errorMessage": "transaction type is pay" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgMyA4CiAgICBieXRlY2Jsb2NrICJzdGF0dXMiICJnb2FsX2Ftb3VudCIgInJlcGFpZF9hbW91bnQiICJib3Jyb3dlciIgImZ1bmRlZF9hbW91bnQiICJjb250cmlidXRpb24iICJkZWFkbGluZSIgImNsYWltZWQiICJndWFyYW50b3IiCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9hbl9jb250cmFjdC9jb250cmFjdC5weTo1CiAgICAvLyBjbGFzcyBMb2FuQ29udHJhY3QoQVJDNENvbnRyYWN0KToKICAgIHB1c2hieXRlc3MgMHg4ODQxMDNmNSAweDRhY2Q5MzlkIC8vIG1ldGhvZCAib3B0X2luX3RvX2xvYW4oKXZvaWQiLCBtZXRob2QgImZ1bmRfbG9hbihwYXkpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fb3B0X2luX3RvX2xvYW5fcm91dGVANCBtYWluX2Z1bmRfbG9hbl9yb3V0ZUA1CgptYWluX3N3aXRjaF9jYXNlX25leHRANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2FuX2NvbnRyYWN0L2NvbnRyYWN0LnB5OjUKICAgIC8vIGNsYXNzIExvYW5Db250cmFjdChBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYnogbWFpbl9jcmVhdGVfTm9PcEAxNAogICAgcHVzaGJ5dGVzcyAweGUzMTlkNDIzIDB4ZmIyMDY5N2EgMHhjNWUwZjkzNyAweDU2YWU2ZWNiIDB4ZjViNDA5NWQgLy8gbWV0aG9kICJyZXBheV9sb2FuKHBheSl2b2lkIiwgbWV0aG9kICJjbGFpbV9yZXBheW1lbnQoKXZvaWQiLCBtZXRob2QgImFkZF9ndWFyYW50b3IoYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJtYXJrX2RlZmF1bHQoKXZvaWQiLCBtZXRob2QgImdldF9sb2FuX2luZm8oKSh1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggcmVwYXlfbG9hbiBjbGFpbV9yZXBheW1lbnQgYWRkX2d1YXJhbnRvciBtYXJrX2RlZmF1bHQgZ2V0X2xvYW5faW5mbwogICAgZXJyCgptYWluX2NyZWF0ZV9Ob09wQDE0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2xvYW5fY29udHJhY3QvY29udHJhY3QucHk6NQogICAgLy8gY2xhc3MgTG9hbkNvbnRyYWN0KEFSQzRDb250cmFjdCk6CiAgICBwdXNoYnl0ZXMgMHhkYzg1ZjA3NiAvLyBtZXRob2QgImNyZWF0ZV9sb2FuKHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggY3JlYXRlX2xvYW4KICAgIGVycgoKbWFpbl9mdW5kX2xvYW5fcm91dGVANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2FuX2NvbnRyYWN0L2NvbnRyYWN0LnB5OjU5CiAgICAvLyBAYWJpbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJOb09wIiwgIk9wdEluIl0pCiAgICBpbnRjXzEgLy8gMQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgc2hsCiAgICBpbnRjXzIgLy8gMwogICAgJgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICYmCiAgICBhc3NlcnQKICAgIGIgZnVuZF9sb2FuCgptYWluX29wdF9pbl90b19sb2FuX3JvdXRlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9hbl9jb250cmFjdC9jb250cmFjdC5weTo1NAogICAgLy8gQGFiaW1ldGhvZChhbGxvd19hY3Rpb25zPVsiT3B0SW4iXSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGludGNfMSAvLyBPcHRJbgogICAgPT0KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAmJgogICAgYXNzZXJ0CiAgICBiIG9wdF9pbl90b19sb2FuCgoKLy8gc21hcnRfY29udHJhY3RzLmxvYW5fY29udHJhY3QuY29udHJhY3QuTG9hbkNvbnRyYWN0LmNyZWF0ZV9sb2FuW3JvdXRpbmddKCkgLT4gdm9pZDoKY3JlYXRlX2xvYW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9hbl9jb250cmFjdC9jb250cmFjdC5weToyMAogICAgLy8gQGFiaW1ldGhvZChhbGxvd19hY3Rpb25zPVsiTm9PcCJdLCBjcmVhdGU9InJlcXVpcmUiKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9hbl9jb250cmFjdC9jb250cmFjdC5weToyOAogICAgLy8gYXNzZXJ0IHRpZXJfcmVxdWlyZWQgPD0gVUludDY0KDMpLCAiSW52YWxpZCB0aWVyIgogICAgZHVwCiAgICBpbnRjXzIgLy8gMwogICAgPD0KICAgIGFzc2VydCAvLyBJbnZhbGlkIHRpZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2FuX2NvbnRyYWN0L2NvbnRyYWN0LnB5OjMwCiAgICAvLyBpZiB0aWVyX3JlcXVpcmVkID09IFVJbnQ2NCgwKToKICAgIGJueiBjcmVhdGVfbG9hbl9lbHNlX2JvZHlAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2xvYW5fY29udHJhY3QvY29udHJhY3QucHk6MzEKICAgIC8vIGFzc2VydCBnb2FsX2Ftb3VudCA8PSBVSW50NjQoNTAwXzAwMF8wMDApLCAiVGllciAwIGxpbWl0IGlzIDUwMCIKICAgIGRpZyAzCiAgICBwdXNoaW50IDUwMDAwMDAwMAogICAgPD0KICAgIGFzc2VydCAvLyBUaWVyIDAgbGltaXQgaXMgNTAwCgpjcmVhdGVfbG9hbl9hZnRlcl9pZl9lbHNlQDEyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2xvYW5fY29udHJhY3QvY29udHJhY3QucHk6MzkKICAgIC8vIGlmIHRpZXJfcmVxdWlyZWQgPiBVSW50NjQoMCk6CiAgICBkaWcgMQogICAgYnogY3JlYXRlX2xvYW5fYWZ0ZXJfaWZfZWxzZUAxNAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvYW5fY29udHJhY3QvY29udHJhY3QucHk6NDAKICAgIC8vIGJhbGFuY2UsIG9wdGVkX2luID0gb3AuQXNzZXRIb2xkaW5nR2V0LmFzc2V0X2JhbGFuY2UoVHhuLnNlbmRlciwgYmFkZ2VfYXNzZXQpCiAgICB0eG4gU2VuZGVyCiAgICBkaWcgMQogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9hbl9jb250cmFjdC9jb250cmFjdC5weTo0MQogICAgLy8gYXNzZXJ0IG9wdGVkX2luLCAiQm9ycm93ZXIgbm90IG9wdGVkIGludG8gYmFkZ2UiCiAgICBhc3NlcnQgLy8gQm9ycm93ZXIgbm90IG9wdGVkIGludG8gYmFkZ2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2FuX2NvbnRyYWN0L2NvbnRyYWN0LnB5OjQyCiAgICAvLyBhc3NlcnQgYmFsYW5jZSA+IFVJbnQ2NCgwKSwgIkJvcnJvd2VyIGRvZXMgbm90IGhvbGQgdGhlIHJlcXVpcmVkIHRpZXIgYmFkZ2UiCiAgICBhc3NlcnQgLy8gQm9ycm93ZXIgZG9lcyBub3QgaG9sZCB0aGUgcmVxdWlyZWQgdGllciBiYWRnZQoKY3JlYXRlX2xvYW5fYWZ0ZXJfaWZfZWxzZUAxNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2FuX2NvbnRyYWN0L2NvbnRyYWN0LnB5OjQ0CiAgICAvLyBzZWxmLmJvcnJvd2VyLnZhbHVlID0gVHhuLnNlbmRlcgogICAgYnl0ZWNfMyAvLyAiYm9ycm93ZXIiCiAgICB0eG4gU2VuZGVyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvYW5fY29udHJhY3QvY29udHJhY3QucHk6NDUKICAgIC8vIHNlbGYuZ29hbF9hbW91bnQudmFsdWUgPSBnb2FsX2Ftb3VudAogICAgYnl0ZWNfMSAvLyAiZ29hbF9hbW91bnQiCiAgICBkaWcgNAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2FuX2NvbnRyYWN0L2NvbnRyYWN0LnB5OjQ2CiAgICAvLyBzZWxmLmZ1bmRlZF9hbW91bnQudmFsdWUgPSBVSW50NjQoMCkKICAgIGJ5dGVjIDQgLy8gImZ1bmRlZF9hbW91bnQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2FuX2NvbnRyYWN0L2NvbnRyYWN0LnB5OjQ3CiAgICAvLyBzZWxmLnJlcGFpZF9hbW91bnQudmFsdWUgPSBVSW50NjQoMCkKICAgIGJ5dGVjXzIgLy8gInJlcGFpZF9hbW91bnQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2FuX2NvbnRyYWN0L2NvbnRyYWN0LnB5OjQ4CiAgICAvLyBzZWxmLnN0YXR1cy52YWx1ZSA9IFVJbnQ2NCgxKSAgIyAxPU9QRU4KICAgIGJ5dGVjXzAgLy8gInN0YXR1cyIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvYW5fY29udHJhY3QvY29udHJhY3QucHk6NDkKICAgIC8vIHNlbGYuZGVhZGxpbmUudmFsdWUgPSBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcCArIChkdXJhdGlvbl9kYXlzICogODY0MDApCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBkaWcgMwogICAgcHVzaGludCA4NjQwMAogICAgKgogICAgKwogICAgYnl0ZWMgNiAvLyAiZGVhZGxpbmUiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvYW5fY29udHJhY3QvY29udHJhY3QucHk6NTAKICAgIC8vIHNlbGYuZ3VhcmFudG9yLnZhbHVlID0gR2xvYmFsLnplcm9fYWRkcmVzcwogICAgYnl0ZWMgOCAvLyAiZ3VhcmFudG9yIgogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvYW5fY29udHJhY3QvY29udHJhY3QucHk6NTEKICAgIC8vIHNlbGYudGllcl9yZXF1aXJlZC52YWx1ZSA9IHRpZXJfcmVxdWlyZWQKICAgIHB1c2hieXRlcyAidGllcl9yZXF1aXJlZCIKICAgIGRpZyAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvYW5fY29udHJhY3QvY29udHJhY3QucHk6NTIKICAgIC8vIHNlbGYudGllcl9iYWRnZV9pZC52YWx1ZSA9IGJhZGdlX2Fzc2V0LmlkCiAgICBwdXNoYnl0ZXMgInRpZXJfYmFkZ2VfaWQiCiAgICBkaWcgMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2FuX2NvbnRyYWN0L2NvbnRyYWN0LnB5OjIwCiAgICAvLyBAYWJpbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJOb09wIl0sIGNyZWF0ZT0icmVxdWlyZSIpCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgpjcmVhdGVfbG9hbl9lbHNlX2JvZHlAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2FuX2NvbnRyYWN0L2NvbnRyYWN0LnB5OjMyCiAgICAvLyBlbGlmIHRpZXJfcmVxdWlyZWQgPT0gVUludDY0KDEpOgogICAgZGlnIDEKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYnogY3JlYXRlX2xvYW5fZWxzZV9ib2R5QDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2FuX2NvbnRyYWN0L2NvbnRyYWN0LnB5OjMzCiAgICAvLyBhc3NlcnQgZ29hbF9hbW91bnQgPD0gVUludDY0KDIwMDBfMDAwXzAwMCksICJUaWVyIDEgbGltaXQgaXMgMjAwMCIKICAgIGRpZyAzCiAgICBwdXNoaW50IDIwMDAwMDAwMDAKICAgIDw9CiAgICBhc3NlcnQgLy8gVGllciAxIGxpbWl0IGlzIDIwMDAKICAgIGIgY3JlYXRlX2xvYW5fYWZ0ZXJfaWZfZWxzZUAxMgoKY3JlYXRlX2xvYW5fZWxzZV9ib2R5QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9hbl9jb250cmFjdC9jb250cmFjdC5weTozNAogICAgLy8gZWxpZiB0aWVyX3JlcXVpcmVkID09IFVJbnQ2NCgyKToKICAgIGRpZyAxCiAgICBwdXNoaW50IDIKICAgID09CiAgICBieiBjcmVhdGVfbG9hbl9lbHNlX2JvZHlANwogICAgLy8gc21hcnRfY29udHJhY3RzL2xvYW5fY29udHJhY3QvY29udHJhY3QucHk6MzUKICAgIC8vIGFzc2VydCBnb2FsX2Ftb3VudCA8PSBVSW50NjQoNTAwMF8wMDBfMDAwKSwgIlRpZXIgMiBsaW1pdCBpcyA1MDAwIgogICAgZGlnIDMKICAgIHB1c2hpbnQgNTAwMDAwMDAwMAogICAgPD0KICAgIGFzc2VydCAvLyBUaWVyIDIgbGltaXQgaXMgNTAwMAogICAgYiBjcmVhdGVfbG9hbl9hZnRlcl9pZl9lbHNlQDEyCgpjcmVhdGVfbG9hbl9lbHNlX2JvZHlANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2FuX2NvbnRyYWN0L2NvbnRyYWN0LnB5OjM2CiAgICAvLyBlbGlmIHRpZXJfcmVxdWlyZWQgPT0gVUludDY0KDMpOgogICAgZGlnIDEKICAgIGludGNfMiAvLyAzCiAgICA9PQogICAgYnogY3JlYXRlX2xvYW5fYWZ0ZXJfaWZfZWxzZUAxMgogICAgLy8gc21hcnRfY29udHJhY3RzL2xvYW5fY29udHJhY3QvY29udHJhY3QucHk6MzcKICAgIC8vIGFzc2VydCBnb2FsX2Ftb3VudCA8PSBVSW50NjQoMjAwMDBfMDAwXzAwMCksICJUaWVyIDMgbGltaXQgaXMgMjAwMDAiCiAgICBkaWcgMwogICAgcHVzaGludCAyMDAwMDAwMDAwMAogICAgPD0KICAgIGFzc2VydCAvLyBUaWVyIDMgbGltaXQgaXMgMjAwMDAKICAgIGIgY3JlYXRlX2xvYW5fYWZ0ZXJfaWZfZWxzZUAxMgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5sb2FuX2NvbnRyYWN0LmNvbnRyYWN0LkxvYW5Db250cmFjdC5vcHRfaW5fdG9fbG9hbltyb3V0aW5nXSgpIC0+IHZvaWQ6Cm9wdF9pbl90b19sb2FuOgogICAgLy8gc21hcnRfY29udHJhY3RzL2xvYW5fY29udHJhY3QvY29udHJhY3QucHk6NTYKICAgIC8vIHNlbGYuY29udHJpYnV0aW9uW1R4bi5zZW5kZXJdID0gVUludDY0KDApCiAgICB0eG4gU2VuZGVyCiAgICBieXRlYyA1IC8vICJjb250cmlidXRpb24iCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvYW5fY29udHJhY3QvY29udHJhY3QucHk6NTcKICAgIC8vIHNlbGYuY2xhaW1lZFtUeG4uc2VuZGVyXSA9IFVJbnQ2NCgwKQogICAgdHhuIFNlbmRlcgogICAgYnl0ZWMgNyAvLyAiY2xhaW1lZCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9hbl9jb250cmFjdC9jb250cmFjdC5weTo1NAogICAgLy8gQGFiaW1ldGhvZChhbGxvd19hY3Rpb25zPVsiT3B0SW4iXSkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMubG9hbl9jb250cmFjdC5jb250cmFjdC5Mb2FuQ29udHJhY3QuZnVuZF9sb2FuW3JvdXRpbmddKCkgLT4gdm9pZDoKZnVuZF9sb2FuOgogICAgLy8gc21hcnRfY29udHJhY3RzL2xvYW5fY29udHJhY3QvY29udHJhY3QucHk6NTkKICAgIC8vIEBhYmltZXRob2QoYWxsb3dfYWN0aW9ucz1bIk5vT3AiLCAiT3B0SW4iXSkKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18xIC8vIHBheQogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIHBheQogICAgLy8gc21hcnRfY29udHJhY3RzL2xvYW5fY29udHJhY3QvY29udHJhY3QucHk6NjEKICAgIC8vIGFzc2VydCBzZWxmLnN0YXR1cy52YWx1ZSA9PSAxLCAiTG9hbiBpcyBub3QgT1BFTiIKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJzdGF0dXMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc3RhdHVzIGV4aXN0cwogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gTG9hbiBpcyBub3QgT1BFTgogICAgLy8gc21hcnRfY29udHJhY3RzL2xvYW5fY29udHJhY3QvY29udHJhY3QucHk6NjIKICAgIC8vIGFzc2VydCBHbG9iYWwubGF0ZXN0X3RpbWVzdGFtcCA8IHNlbGYuZGVhZGxpbmUudmFsdWUsICJGdW5kaW5nIGRlYWRsaW5lIHBhc3NlZCIKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJkZWFkbGluZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5kZWFkbGluZSBleGlzdHMKICAgIDwKICAgIGFzc2VydCAvLyBGdW5kaW5nIGRlYWRsaW5lIHBhc3NlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvYW5fY29udHJhY3QvY29udHJhY3QucHk6NjMKICAgIC8vIGFzc2VydCBwYXltZW50LnJlY2VpdmVyID09IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsICJQYXltZW50IG11c3QgYmUgc2VudCB0byB0aGUgc21hcnQgY29udHJhY3QiCiAgICBkdXAKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBQYXltZW50IG11c3QgYmUgc2VudCB0byB0aGUgc21hcnQgY29udHJhY3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2FuX2NvbnRyYWN0L2NvbnRyYWN0LnB5OjY1CiAgICAvLyBzZWxmLmZ1bmRlZF9hbW91bnQudmFsdWUgKz0gcGF5bWVudC5hbW91bnQKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA0IC8vICJmdW5kZWRfYW1vdW50IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmZ1bmRlZF9hbW91bnQgZXhpc3RzCiAgICBzd2FwCiAgICBndHhucyBBbW91bnQKICAgIHN3YXAKICAgIGRpZyAxCiAgICArCiAgICBieXRlYyA0IC8vICJmdW5kZWRfYW1vdW50IgogICAgZGlnIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9hbl9jb250cmFjdC9jb250cmFjdC5weTo2NwogICAgLy8gY3VycmVudF9jb250cmliID0gc2VsZi5jb250cmlidXRpb24uZ2V0KFR4bi5zZW5kZXIsIGRlZmF1bHQ9VUludDY0KDApKQogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gImNvbnRyaWJ1dGlvbiIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGludGNfMCAvLyAwCiAgICBjb3ZlciAyCiAgICBzZWxlY3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2FuX2NvbnRyYWN0L2NvbnRyYWN0LnB5OjY4CiAgICAvLyBzZWxmLmNvbnRyaWJ1dGlvbltUeG4uc2VuZGVyXSA9IGN1cnJlbnRfY29udHJpYiArIHBheW1lbnQuYW1vdW50CiAgICB1bmNvdmVyIDIKICAgICsKICAgIHR4biBTZW5kZXIKICAgIGJ5dGVjIDUgLy8gImNvbnRyaWJ1dGlvbiIKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvYW5fY29udHJhY3QvY29udHJhY3QucHk6NzAKICAgIC8vIGlmIHNlbGYuZnVuZGVkX2Ftb3VudC52YWx1ZSA+PSBzZWxmLmdvYWxfYW1vdW50LnZhbHVlOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImdvYWxfYW1vdW50IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmdvYWxfYW1vdW50IGV4aXN0cwogICAgPj0KICAgIGJ6IGZ1bmRfbG9hbl9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2FuX2NvbnRyYWN0L2NvbnRyYWN0LnB5Ojc1LTc5CiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgcmVjZWl2ZXI9c2VsZi5ib3Jyb3dlci52YWx1ZSwKICAgIC8vICAgICBhbW91bnQ9c2VsZi5nb2FsX2Ftb3VudC52YWx1ZSwKICAgIC8vICAgICBmZWU9MAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2xvYW5fY29udHJhY3QvY29udHJhY3QucHk6NzYKICAgIC8vIHJlY2VpdmVyPXNlbGYuYm9ycm93ZXIudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAiYm9ycm93ZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm9ycm93ZXIgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9hbl9jb250cmFjdC9jb250cmFjdC5weTo3NwogICAgLy8gYW1vdW50PXNlbGYuZ29hbF9hbW91bnQudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAiZ29hbF9hbW91bnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZ29hbF9hbW91bnQgZXhpc3RzCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2xvYW5fY29udHJhY3QvY29udHJhY3QucHk6NzUKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIGludGNfMSAvLyBwYXkKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2FuX2NvbnRyYWN0L2NvbnRyYWN0LnB5Ojc4CiAgICAvLyBmZWU9MAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9hbl9jb250cmFjdC9jb250cmFjdC5weTo3NS03OQogICAgLy8gaXR4bi5QYXltZW50KAogICAgLy8gICAgIHJlY2VpdmVyPXNlbGYuYm9ycm93ZXIudmFsdWUsCiAgICAvLyAgICAgYW1vdW50PXNlbGYuZ29hbF9hbW91bnQudmFsdWUsCiAgICAvLyAgICAgZmVlPTAKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9hbl9jb250cmFjdC9jb250cmFjdC5weTo4MAogICAgLy8gc2VsZi5zdGF0dXMudmFsdWUgPSBVSW50NjQoMykgICMgUkVQQVlJTkcKICAgIGJ5dGVjXzAgLy8gInN0YXR1cyIKICAgIGludGNfMiAvLyAzCiAgICBhcHBfZ2xvYmFsX3B1dAoKZnVuZF9sb2FuX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2FuX2NvbnRyYWN0L2NvbnRyYWN0LnB5OjU5CiAgICAvLyBAYWJpbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJOb09wIiwgIk9wdEluIl0pCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmxvYW5fY29udHJhY3QuY29udHJhY3QuTG9hbkNvbnRyYWN0LnJlcGF5X2xvYW5bcm91dGluZ10oKSAtPiB2b2lkOgpyZXBheV9sb2FuOgogICAgLy8gc21hcnRfY29udHJhY3RzL2xvYW5fY29udHJhY3QvY29udHJhY3QucHk6ODIKICAgIC8vIEBhYmltZXRob2QKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18xIC8vIHBheQogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIHBheQogICAgLy8gc21hcnRfY29udHJhY3RzL2xvYW5fY29udHJhY3QvY29udHJhY3QucHk6ODQKICAgIC8vIGFzc2VydCBzZWxmLnN0YXR1cy52YWx1ZSA9PSAzLCAiTG9hbiBpcyBub3QgUkVQQVlJTkciCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAic3RhdHVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnN0YXR1cyBleGlzdHMKICAgIGludGNfMiAvLyAzCiAgICA9PQogICAgYXNzZXJ0IC8vIExvYW4gaXMgbm90IFJFUEFZSU5HCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9hbl9jb250cmFjdC9jb250cmFjdC5weTo4NQogICAgLy8gYXNzZXJ0IFR4bi5zZW5kZXIgPT0gc2VsZi5ib3Jyb3dlci52YWx1ZSwgIk9ubHkgYm9ycm93ZXIgY2FuIHJlcGF5IgogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gImJvcnJvd2VyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJvcnJvd2VyIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBPbmx5IGJvcnJvd2VyIGNhbiByZXBheQogICAgLy8gc21hcnRfY29udHJhY3RzL2xvYW5fY29udHJhY3QvY29udHJhY3QucHk6ODYKICAgIC8vIGFzc2VydCBwYXltZW50LnJlY2VpdmVyID09IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsICJQYXltZW50IHRvIGNvbnRyYWN0IgogICAgZHVwCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gUGF5bWVudCB0byBjb250cmFjdAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvYW5fY29udHJhY3QvY29udHJhY3QucHk6ODgKICAgIC8vIHNlbGYucmVwYWlkX2Ftb3VudC52YWx1ZSArPSBwYXltZW50LmFtb3VudAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gInJlcGFpZF9hbW91bnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucmVwYWlkX2Ftb3VudCBleGlzdHMKICAgIHN3YXAKICAgIGd0eG5zIEFtb3VudAogICAgKwogICAgYnl0ZWNfMiAvLyAicmVwYWlkX2Ftb3VudCIKICAgIGRpZyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvYW5fY29udHJhY3QvY29udHJhY3QucHk6OTAKICAgIC8vIGlmIHNlbGYucmVwYWlkX2Ftb3VudC52YWx1ZSA+PSBzZWxmLmdvYWxfYW1vdW50LnZhbHVlOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImdvYWxfYW1vdW50IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmdvYWxfYW1vdW50IGV4aXN0cwogICAgPj0KICAgIGJ6IHJlcGF5X2xvYW5fYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9hbl9jb250cmFjdC9jb250cmFjdC5weTo5MQogICAgLy8gc2VsZi5zdGF0dXMudmFsdWUgPSBVSW50NjQoNCkgICMgQ0xPU0VECiAgICBieXRlY18wIC8vICJzdGF0dXMiCiAgICBwdXNoaW50IDQKICAgIGFwcF9nbG9iYWxfcHV0CgpyZXBheV9sb2FuX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2FuX2NvbnRyYWN0L2NvbnRyYWN0LnB5OjgyCiAgICAvLyBAYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmxvYW5fY29udHJhY3QuY29udHJhY3QuTG9hbkNvbnRyYWN0LmNsYWltX3JlcGF5bWVudFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNsYWltX3JlcGF5bWVudDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2FuX2NvbnRyYWN0L2NvbnRyYWN0LnB5Ojk1CiAgICAvLyBhc3NlcnQgc2VsZi5zdGF0dXMudmFsdWUgPT0gNCwgIkxvYW4gaXMgbm90IENMT1NFRCIKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJzdGF0dXMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc3RhdHVzIGV4aXN0cwogICAgcHVzaGludCA0CiAgICA9PQogICAgYXNzZXJ0IC8vIExvYW4gaXMgbm90IENMT1NFRAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvYW5fY29udHJhY3QvY29udHJhY3QucHk6OTcKICAgIC8vIGNvbnRyaWIgPSBzZWxmLmNvbnRyaWJ1dGlvbi5nZXQoVHhuLnNlbmRlciwgZGVmYXVsdD1VSW50NjQoMCkpCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNSAvLyAiY29udHJpYnV0aW9uIgogICAgYXBwX2xvY2FsX2dldF9leAogICAgaW50Y18wIC8vIDAKICAgIGNvdmVyIDIKICAgIHNlbGVjdAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvYW5fY29udHJhY3QvY29udHJhY3QucHk6OTgKICAgIC8vIGNsYWltZWQgPSBzZWxmLmNsYWltZWQuZ2V0KFR4bi5zZW5kZXIsIGRlZmF1bHQ9VUludDY0KDApKQogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDcgLy8gImNsYWltZWQiCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBpbnRjXzAgLy8gMAogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9hbl9jb250cmFjdC9jb250cmFjdC5weToxMDAKICAgIC8vIGFzc2VydCBjb250cmliID4gMCwgIk5vIGNvbnRyaWJ1dGlvbiBmb3VuZCIKICAgIGRpZyAxCiAgICBhc3NlcnQgLy8gTm8gY29udHJpYnV0aW9uIGZvdW5kCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9hbl9jb250cmFjdC9jb250cmFjdC5weToxMDEKICAgIC8vIGFzc2VydCBjbGFpbWVkID09IDAsICJBbHJlYWR5IGNsYWltZWQiCiAgICAhCiAgICBhc3NlcnQgLy8gQWxyZWFkeSBjbGFpbWVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9hbl9jb250cmFjdC9jb250cmFjdC5weToxMDMKICAgIC8vIHNoYXJlID0gKGNvbnRyaWIgKiBzZWxmLnJlcGFpZF9hbW91bnQudmFsdWUpIC8vIHNlbGYuZ29hbF9hbW91bnQudmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJyZXBhaWRfYW1vdW50IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnJlcGFpZF9hbW91bnQgZXhpc3RzCiAgICAqCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAiZ29hbF9hbW91bnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuZ29hbF9hbW91bnQgZXhpc3RzCiAgICAvCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9hbl9jb250cmFjdC9jb250cmFjdC5weToxMDUtMTA5CiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIC8vICAgICBhbW91bnQ9c2hhcmUsCiAgICAvLyAgICAgZmVlPTAKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2FuX2NvbnRyYWN0L2NvbnRyYWN0LnB5OjEwNgogICAgLy8gcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIHR4biBTZW5kZXIKICAgIGRpZyAxCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2xvYW5fY29udHJhY3QvY29udHJhY3QucHk6MTA1CiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICBpbnRjXzEgLy8gcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9hbl9jb250cmFjdC9jb250cmFjdC5weToxMDgKICAgIC8vIGZlZT0wCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2FuX2NvbnRyYWN0L2NvbnRyYWN0LnB5OjEwNS0xMDkKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIC8vICAgICByZWNlaXZlcj1UeG4uc2VuZGVyLAogICAgLy8gICAgIGFtb3VudD1zaGFyZSwKICAgIC8vICAgICBmZWU9MAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2FuX2NvbnRyYWN0L2NvbnRyYWN0LnB5OjExMQogICAgLy8gc2VsZi5jbGFpbWVkW1R4bi5zZW5kZXJdID0gc2hhcmUKICAgIHR4biBTZW5kZXIKICAgIGJ5dGVjIDcgLy8gImNsYWltZWQiCiAgICB1bmNvdmVyIDIKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2FuX2NvbnRyYWN0L2NvbnRyYWN0LnB5OjkzCiAgICAvLyBAYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmxvYW5fY29udHJhY3QuY29udHJhY3QuTG9hbkNvbnRyYWN0LmFkZF9ndWFyYW50b3Jbcm91dGluZ10oKSAtPiB2b2lkOgphZGRfZ3VhcmFudG9yOgogICAgLy8gc21hcnRfY29udHJhY3RzL2xvYW5fY29udHJhY3QvY29udHJhY3QucHk6MTEzCiAgICAvLyBAYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9hbl9jb250cmFjdC9jb250cmFjdC5weToxMTUKICAgIC8vIGFzc2VydCBzZWxmLnN0YXR1cy52YWx1ZSA9PSAxLCAiTG9hbiBtdXN0IGJlIE9QRU4iCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAic3RhdHVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnN0YXR1cyBleGlzdHMKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIExvYW4gbXVzdCBiZSBPUEVOCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9hbl9jb250cmFjdC9jb250cmFjdC5weToxMTYKICAgIC8vIGFzc2VydCBUeG4uc2VuZGVyID09IHNlbGYuYm9ycm93ZXIudmFsdWUsICJPbmx5IGJvcnJvd2VyIGNhbiBhZGQgZ3VhcmFudG9yIgogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gImJvcnJvd2VyIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJvcnJvd2VyIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBPbmx5IGJvcnJvd2VyIGNhbiBhZGQgZ3VhcmFudG9yCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9hbl9jb250cmFjdC9jb250cmFjdC5weToxMTcKICAgIC8vIHNlbGYuZ3VhcmFudG9yLnZhbHVlID0gZ3VhcmFudG9yCiAgICBieXRlYyA4IC8vICJndWFyYW50b3IiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvYW5fY29udHJhY3QvY29udHJhY3QucHk6MTEzCiAgICAvLyBAYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmxvYW5fY29udHJhY3QuY29udHJhY3QuTG9hbkNvbnRyYWN0Lm1hcmtfZGVmYXVsdFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm1hcmtfZGVmYXVsdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2FuX2NvbnRyYWN0L2NvbnRyYWN0LnB5OjEyMQogICAgLy8gYXNzZXJ0IHNlbGYuc3RhdHVzLnZhbHVlID09IDMsICJMb2FuIG11c3QgYmUgUkVQQVlJTkciCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAic3RhdHVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnN0YXR1cyBleGlzdHMKICAgIGludGNfMiAvLyAzCiAgICA9PQogICAgYXNzZXJ0IC8vIExvYW4gbXVzdCBiZSBSRVBBWUlORwogICAgLy8gc21hcnRfY29udHJhY3RzL2xvYW5fY29udHJhY3QvY29udHJhY3QucHk6MTIyCiAgICAvLyBhc3NlcnQgR2xvYmFsLmxhdGVzdF90aW1lc3RhbXAgPiBzZWxmLmRlYWRsaW5lLnZhbHVlLCAiRGVhZGxpbmUgbm90IHBhc3NlZCIKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJkZWFkbGluZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5kZWFkbGluZSBleGlzdHMKICAgID4KICAgIGFzc2VydCAvLyBEZWFkbGluZSBub3QgcGFzc2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9hbl9jb250cmFjdC9jb250cmFjdC5weToxMjMKICAgIC8vIHNlbGYuc3RhdHVzLnZhbHVlID0gVUludDY0KDUpICAjIERFRkFVTFRFRAogICAgYnl0ZWNfMCAvLyAic3RhdHVzIgogICAgcHVzaGludCA1CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2xvYW5fY29udHJhY3QvY29udHJhY3QucHk6MTE5CiAgICAvLyBAYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmxvYW5fY29udHJhY3QuY29udHJhY3QuTG9hbkNvbnRyYWN0LmdldF9sb2FuX2luZm9bcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfbG9hbl9pbmZvOgogICAgLy8gc21hcnRfY29udHJhY3RzL2xvYW5fY29udHJhY3QvY29udHJhY3QucHk6MTI3CiAgICAvLyBnb2FsID0gc2VsZi5nb2FsX2Ftb3VudC52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImdvYWxfYW1vdW50IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmdvYWxfYW1vdW50IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2xvYW5fY29udHJhY3QvY29udHJhY3QucHk6MTI4CiAgICAvLyBmdW5kZWQgPSBzZWxmLmZ1bmRlZF9hbW91bnQudmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA0IC8vICJmdW5kZWRfYW1vdW50IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmZ1bmRlZF9hbW91bnQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvbG9hbl9jb250cmFjdC9jb250cmFjdC5weToxMjkKICAgIC8vIHJlcGFpZCA9IHNlbGYucmVwYWlkX2Ftb3VudC52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gInJlcGFpZF9hbW91bnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucmVwYWlkX2Ftb3VudCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9sb2FuX2NvbnRyYWN0L2NvbnRyYWN0LnB5OjEzMAogICAgLy8gc3RhdHVzID0gc2VsZi5zdGF0dXMudmFsdWUKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJzdGF0dXMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc3RhdHVzIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2xvYW5fY29udHJhY3QvY29udHJhY3QucHk6MTI1CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB1bmNvdmVyIDMKICAgIGl0b2IKICAgIHVuY292ZXIgMwogICAgaXRvYgogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgc3dhcAogICAgaXRvYgogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4K", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CyAEAAEDCCYJBnN0YXR1cwtnb2FsX2Ftb3VudA1yZXBhaWRfYW1vdW50CGJvcnJvd2VyDWZ1bmRlZF9hbW91bnQMY29udHJpYnV0aW9uCGRlYWRsaW5lB2NsYWltZWQJZ3VhcmFudG9yggIEiEED9QRKzZOdNhoAjgIATwBCMRkURDEYQQArggUE4xnUIwT7IGl6BMXg+TcEVq5uywT1tAldNhoAjgUBaAGiAeYCBAIaAIAE3IXwdjYaAI4BABkAIzEZkCQaMRgQREIA5TEZIxIxGBBEQgDMNhoBSRUlEkQXNhoCSRUlEkQXNhoDSRUlEkQXSTYaBEkVJRJEF0xJJA5EQABiSwOBgMq17gEOREsBQQAIMQBLAXAAREQrMQBnKUsEZycEImcqImcoI2cyB0sDgYCjBQsIJwZMZycIMgNngA10aWVyX3JlcXVpcmVkSwJngA10aWVyX2JhZGdlX2lkSwFnI0NLASMSQQANSwOBgKjWuQcOREL/lEsBgQISQQANSwOBgOSX0BIOREL/f0sBJBJB/3hLA4GAkN/ASg5EQv9rMQAnBSJmMQAnByJmI0MxFiMJSTgQIxJEIihlRCMSRDIHIicGZUQMREk4BzIKEkQiJwRlREw4CExLAQgnBEsBZzEAIicFYyJOAk1PAggxACcFTwJmIillRA9BABexIitlRCIpZUSyCLIHI7IQIrIBsygkZyNDMRYjCUk4ECMSRCIoZUQkEkQxACIrZUQSREk4BzIKEkQiKmVETDgICCpLAWciKWVED0EABCiBBGcjQyIoZUSBBBJEMQAiJwVjIk4CTTEAIicHYyJOAk1LAUQURCIqZUQLIillRAqxMQBLAbIIsgcjshAisgGzMQAnB08CZiNDNhoBSRWBIBJEIihlRCMSRDEAIitlRBJEJwhMZyNDIihlRCQSRDIHIicGZUQNRCiBBWcjQyIpZUQiJwRlRCIqZUQiKGVETwMWTwMWUE8CFlBMFlCABBUffHVMULAjQw==", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 7, "patch": 1 } }, "events": [], "templateVariables": {} }