{ "name": "SaveUpVault", "structs": {}, "methods": [ { "name": "create", "args": [], "returns": { "type": "void" }, "actions": { "create": [ "NoOp" ], "call": [] }, "readonly": false, "desc": "Deploy the contract and seed milestone thresholds in global state.", "events": [], "recommendations": {} }, { "name": "opt_in", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "OptIn" ] }, "readonly": false, "desc": "Initialise local state so a user can start depositing.", "events": [], "recommendations": {} }, { "name": "deposit", "args": [ { "type": "uint64", "name": "amount" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Record a deposit.\nMust be called as part of a 2-transaction atomic group: txn[0] \u2014 PaymentTransaction (user \u2192 app address) txn[1] \u2014 ApplicationCall (this method)", "events": [], "recommendations": {} }, { "name": "withdraw", "args": [ { "type": "uint64", "name": "amount" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Withdraw ALGO back to the user's wallet.\nReverts if the vault lock period has not yet expired.", "events": [], "recommendations": {} }, { "name": "withdraw_early", "args": [ { "type": "uint64", "name": "amount" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Withdraw before the lock period expires, paying a 10% penalty.\nThe penalty stays in the contract; only the net amount is returned.", "events": [], "recommendations": {} }, { "name": "set_lock", "args": [ { "type": "uint64", "name": "lock_until_round" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Lock the vault until a specific Algorand round number.", "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "desc": "On-chain gamified savings vault with tiered milestone badges.", "networks": {}, "state": { "schema": { "global": { "ints": 6, "bytes": 0 }, "local": { "ints": 4, "bytes": 0 } }, "keys": { "global": { "m1": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "bTE=" }, "m2": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "bTI=" }, "m3": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "bTM=" }, "m4": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "bTQ=" }, "m5": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "bTU=" }, "total": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "dG90YWw=" } }, "local": { "saved": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "c2F2ZWQ=" }, "count": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "Y291bnQ=" }, "lock": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "bG9jaw==" }, "level": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "bGV2ZWw=" } }, "box": {} }, "maps": { "global": {}, "local": {}, "box": {} } }, "bareActions": { "create": [], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 411, 472 ], "errorMessage": "Insufficient vault balance" }, { "pc": [ 229 ], "errorMessage": "Payment must go to app" }, { "pc": [ 236 ], "errorMessage": "Payment sender must match caller" }, { "pc": [ 216 ], "errorMessage": "Requires a 2-txn atomic group" }, { "pc": [ 401 ], "errorMessage": "Vault is still locked" }, { "pc": [ 260 ], "errorMessage": "check self.count exists for account" }, { "pc": [ 397 ], "errorMessage": "check self.lock exists for account" }, { "pc": [ 367 ], "errorMessage": "check self.m1 exists" }, { "pc": [ 348 ], "errorMessage": "check self.m2 exists" }, { "pc": [ 328 ], "errorMessage": "check self.m3 exists" }, { "pc": [ 308 ], "errorMessage": "check self.m4 exists" }, { "pc": [ 291 ], "errorMessage": "check self.m5 exists" }, { "pc": [ 245, 286, 407, 433, 468, 500 ], "errorMessage": "check self.saved exists for account" }, { "pc": [ 272, 446, 513 ], "errorMessage": "check self.total exists" }, { "pc": [ 211, 389, 461, 528 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ 222 ], "errorMessage": "transaction type is pay" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgOCAyCiAgICBieXRlY2Jsb2NrICJzYXZlZCIgInRvdGFsIiAibGV2ZWwiICJjb3VudCIgImxvY2siICJtMSIgIm0yIiAibTMiICJtNCIgIm01IgogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmV1cF92YXVsdC9jb250cmFjdC5weTo1MQogICAgLy8gY2xhc3MgU2F2ZVVwVmF1bHQoQVJDNENvbnRyYWN0KToKICAgIHB1c2hieXRlcyAweDMwYzZkNThhIC8vIG1ldGhvZCAib3B0X2luKCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9vcHRfaW5fcm91dGVANAoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2ZXVwX3ZhdWx0L2NvbnRyYWN0LnB5OjUxCiAgICAvLyBjbGFzcyBTYXZlVXBWYXVsdChBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYnogbWFpbl9jcmVhdGVfTm9PcEAxMgogICAgcHVzaGJ5dGVzcyAweDZlMmViYzliIDB4MjFmMWRkZmYgMHhiODU3OTFmMCAweDU1NTEwOWQ2IC8vIG1ldGhvZCAiZGVwb3NpdCh1aW50NjQpdm9pZCIsIG1ldGhvZCAid2l0aGRyYXcodWludDY0KXZvaWQiLCBtZXRob2QgIndpdGhkcmF3X2Vhcmx5KHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJzZXRfbG9jayh1aW50NjQpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIGRlcG9zaXQgd2l0aGRyYXcgd2l0aGRyYXdfZWFybHkgc2V0X2xvY2sKICAgIGVycgoKbWFpbl9jcmVhdGVfTm9PcEAxMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZldXBfdmF1bHQvY29udHJhY3QucHk6NTEKICAgIC8vIGNsYXNzIFNhdmVVcFZhdWx0KEFSQzRDb250cmFjdCk6CiAgICBwdXNoYnl0ZXMgMHg0YzVjNjFiYSAvLyBtZXRob2QgImNyZWF0ZSgpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIGNyZWF0ZQogICAgZXJyCgptYWluX29wdF9pbl9yb3V0ZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmV1cF92YXVsdC9jb250cmFjdC5weTo4MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKGFsbG93X2FjdGlvbnM9WyJPcHRJbiJdKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18xIC8vIE9wdEluCiAgICA9PQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICYmCiAgICBhc3NlcnQKICAgIGIgb3B0X2luCgoKLy8gc21hcnRfY29udHJhY3RzLnNhdmV1cF92YXVsdC5jb250cmFjdC5TYXZlVXBWYXVsdC5jcmVhdGVbcm91dGluZ10oKSAtPiB2b2lkOgpjcmVhdGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2ZXVwX3ZhdWx0L2NvbnRyYWN0LnB5Ojc0CiAgICAvLyBzZWxmLm0xLnZhbHVlID0gVUludDY0KE0xKQogICAgYnl0ZWMgNSAvLyAibTEiCiAgICBwdXNoaW50IDEwMDAwMDAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmV1cF92YXVsdC9jb250cmFjdC5weTo3NQogICAgLy8gc2VsZi5tMi52YWx1ZSA9IFVJbnQ2NChNMikKICAgIGJ5dGVjIDYgLy8gIm0yIgogICAgcHVzaGludCA1MDAwMDAwMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZldXBfdmF1bHQvY29udHJhY3QucHk6NzYKICAgIC8vIHNlbGYubTMudmFsdWUgPSBVSW50NjQoTTMpCiAgICBieXRlYyA3IC8vICJtMyIKICAgIHB1c2hpbnQgMTAwMDAwMDAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmV1cF92YXVsdC9jb250cmFjdC5weTo3NwogICAgLy8gc2VsZi5tNC52YWx1ZSA9IFVJbnQ2NChNNCkKICAgIGJ5dGVjIDggLy8gIm00IgogICAgcHVzaGludCAyNTAwMDAwMDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2ZXVwX3ZhdWx0L2NvbnRyYWN0LnB5Ojc4CiAgICAvLyBzZWxmLm01LnZhbHVlID0gVUludDY0KE01KQogICAgYnl0ZWMgOSAvLyAibTUiCiAgICBwdXNoaW50IDUwMDAwMDAwMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZldXBfdmF1bHQvY29udHJhY3QucHk6NzkKICAgIC8vIHNlbGYudG90YWwudmFsdWUgPSBVSW50NjQoMCkKICAgIGJ5dGVjXzEgLy8gInRvdGFsIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2ZXVwX3ZhdWx0L2NvbnRyYWN0LnB5OjcxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoY3JlYXRlPSJyZXF1aXJlIikKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuc2F2ZXVwX3ZhdWx0LmNvbnRyYWN0LlNhdmVVcFZhdWx0Lm9wdF9pbltyb3V0aW5nXSgpIC0+IHZvaWQ6Cm9wdF9pbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZldXBfdmF1bHQvY29udHJhY3QucHk6ODQKICAgIC8vIHNlbGYuc2F2ZWRbVHhuLnNlbmRlcl0gPSBVSW50NjQoMCkKICAgIHR4biBTZW5kZXIKICAgIGJ5dGVjXzAgLy8gInNhdmVkIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZldXBfdmF1bHQvY29udHJhY3QucHk6ODUKICAgIC8vIHNlbGYuY291bnRbVHhuLnNlbmRlcl0gPSBVSW50NjQoMCkKICAgIHR4biBTZW5kZXIKICAgIGJ5dGVjXzMgLy8gImNvdW50IgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZldXBfdmF1bHQvY29udHJhY3QucHk6ODYKICAgIC8vIHNlbGYubG9ja1tUeG4uc2VuZGVyXSA9IFVJbnQ2NCgwKQogICAgdHhuIFNlbmRlcgogICAgYnl0ZWMgNCAvLyAibG9jayIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2ZXVwX3ZhdWx0L2NvbnRyYWN0LnB5Ojg3CiAgICAvLyBzZWxmLmxldmVsW1R4bi5zZW5kZXJdID0gVUludDY0KDApCiAgICB0eG4gU2VuZGVyCiAgICBieXRlY18yIC8vICJsZXZlbCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2ZXVwX3ZhdWx0L2NvbnRyYWN0LnB5OjgxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoYWxsb3dfYWN0aW9ucz1bIk9wdEluIl0pCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnNhdmV1cF92YXVsdC5jb250cmFjdC5TYXZlVXBWYXVsdC5kZXBvc2l0W3JvdXRpbmddKCkgLT4gdm9pZDoKZGVwb3NpdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZldXBfdmF1bHQvY29udHJhY3QucHk6OTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZldXBfdmF1bHQvY29udHJhY3QucHk6MTAwCiAgICAvLyBhc3NlcnQgR2xvYmFsLmdyb3VwX3NpemUgPT0gVUludDY0KDIpLCAiUmVxdWlyZXMgYSAyLXR4biBhdG9taWMgZ3JvdXAiCiAgICBnbG9iYWwgR3JvdXBTaXplCiAgICBpbnRjXzMgLy8gMgogICAgPT0KICAgIGFzc2VydCAvLyBSZXF1aXJlcyBhIDItdHhuIGF0b21pYyBncm91cAogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmV1cF92YXVsdC9jb250cmFjdC5weToxMDIKICAgIC8vIHBheSA9IGd0eG4uUGF5bWVudFRyYW5zYWN0aW9uKDApCiAgICBpbnRjXzAgLy8gMAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2ZXVwX3ZhdWx0L2NvbnRyYWN0LnB5OjEwMwogICAgLy8gYXNzZXJ0IHBheS5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLCAiUGF5bWVudCBtdXN0IGdvIHRvIGFwcCIKICAgIGd0eG5zIFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBQYXltZW50IG11c3QgZ28gdG8gYXBwCiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2ZXVwX3ZhdWx0L2NvbnRyYWN0LnB5OjEwMgogICAgLy8gcGF5ID0gZ3R4bi5QYXltZW50VHJhbnNhY3Rpb24oMCkKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2ZXVwX3ZhdWx0L2NvbnRyYWN0LnB5OjEwNAogICAgLy8gYXNzZXJ0IHBheS5zZW5kZXIgPT0gVHhuLnNlbmRlciwgIlBheW1lbnQgc2VuZGVyIG11c3QgbWF0Y2ggY2FsbGVyIgogICAgZ3R4bnMgU2VuZGVyCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgYXNzZXJ0IC8vIFBheW1lbnQgc2VuZGVyIG11c3QgbWF0Y2ggY2FsbGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2ZXVwX3ZhdWx0L2NvbnRyYWN0LnB5OjEwMgogICAgLy8gcGF5ID0gZ3R4bi5QYXltZW50VHJhbnNhY3Rpb24oMCkKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2ZXVwX3ZhdWx0L2NvbnRyYWN0LnB5OjEwNgogICAgLy8gZGVwb3NpdGVkID0gcGF5LmFtb3VudAogICAgZ3R4bnMgQW1vdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2ZXVwX3ZhdWx0L2NvbnRyYWN0LnB5OjEwNwogICAgLy8gc2VsZi5zYXZlZFtUeG4uc2VuZGVyXSA9IHNlbGYuc2F2ZWRbVHhuLnNlbmRlcl0gKyBkZXBvc2l0ZWQKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJzYXZlZCIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnNhdmVkIGV4aXN0cyBmb3IgYWNjb3VudAogICAgZGlnIDEKICAgICsKICAgIHR4biBTZW5kZXIKICAgIGJ5dGVjXzAgLy8gInNhdmVkIgogICAgdW5jb3ZlciAyCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2ZXVwX3ZhdWx0L2NvbnRyYWN0LnB5OjEwOAogICAgLy8gc2VsZi5jb3VudFtUeG4uc2VuZGVyXSA9IHNlbGYuY291bnRbVHhuLnNlbmRlcl0gKyBVSW50NjQoMSkKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18zIC8vICJjb3VudCIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNvdW50IGV4aXN0cyBmb3IgYWNjb3VudAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIHR4biBTZW5kZXIKICAgIGJ5dGVjXzMgLy8gImNvdW50IgogICAgdW5jb3ZlciAyCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2ZXVwX3ZhdWx0L2NvbnRyYWN0LnB5OjEwOQogICAgLy8gc2VsZi50b3RhbC52YWx1ZSA9IHNlbGYudG90YWwudmFsdWUgKyBkZXBvc2l0ZWQKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJ0b3RhbCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi50b3RhbCBleGlzdHMKICAgICsKICAgIGJ5dGVjXzEgLy8gInRvdGFsIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZldXBfdmF1bHQvY29udHJhY3QucHk6MTYxCiAgICAvLyBiYWxhbmNlID0gc2VsZi5zYXZlZFtUeG4uc2VuZGVyXQogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInNhdmVkIgogICAgYXBwX2xvY2FsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnNhdmVkIGV4aXN0cyBmb3IgYWNjb3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmV1cF92YXVsdC9jb250cmFjdC5weToxNjMKICAgIC8vIGlmIGJhbGFuY2UgPj0gc2VsZi5tNS52YWx1ZToKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA5IC8vICJtNSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5tNSBleGlzdHMKICAgID49CiAgICBieiBkZXBvc2l0X2Vsc2VfYm9keUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2ZXVwX3ZhdWx0L2NvbnRyYWN0LnB5OjE2NAogICAgLy8gc2VsZi5sZXZlbFtUeG4uc2VuZGVyXSA9IFVJbnQ2NCg1KQogICAgdHhuIFNlbmRlcgogICAgYnl0ZWNfMiAvLyAibGV2ZWwiCiAgICBwdXNoaW50IDUKICAgIGFwcF9sb2NhbF9wdXQKCmRlcG9zaXRfYWZ0ZXJfaWZfZWxzZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZldXBfdmF1bHQvY29udHJhY3QucHk6OTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKZGVwb3NpdF9lbHNlX2JvZHlAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZldXBfdmF1bHQvY29udHJhY3QucHk6MTY1CiAgICAvLyBlbGlmIGJhbGFuY2UgPj0gc2VsZi5tNC52YWx1ZToKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA4IC8vICJtNCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5tNCBleGlzdHMKICAgIGRpZyAxCiAgICA8PQogICAgYnogZGVwb3NpdF9lbHNlX2JvZHlANQogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmV1cF92YXVsdC9jb250cmFjdC5weToxNjYKICAgIC8vIHNlbGYubGV2ZWxbVHhuLnNlbmRlcl0gPSBVSW50NjQoNCkKICAgIHR4biBTZW5kZXIKICAgIGJ5dGVjXzIgLy8gImxldmVsIgogICAgcHVzaGludCA0CiAgICBhcHBfbG9jYWxfcHV0CiAgICBiIGRlcG9zaXRfYWZ0ZXJfaWZfZWxzZUAxMQoKZGVwb3NpdF9lbHNlX2JvZHlANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZldXBfdmF1bHQvY29udHJhY3QucHk6MTY3CiAgICAvLyBlbGlmIGJhbGFuY2UgPj0gc2VsZi5tMy52YWx1ZToKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA3IC8vICJtMyIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5tMyBleGlzdHMKICAgIGRpZyAxCiAgICA8PQogICAgYnogZGVwb3NpdF9lbHNlX2JvZHlANwogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmV1cF92YXVsdC9jb250cmFjdC5weToxNjgKICAgIC8vIHNlbGYubGV2ZWxbVHhuLnNlbmRlcl0gPSBVSW50NjQoMykKICAgIHR4biBTZW5kZXIKICAgIGJ5dGVjXzIgLy8gImxldmVsIgogICAgcHVzaGludCAzCiAgICBhcHBfbG9jYWxfcHV0CiAgICBiIGRlcG9zaXRfYWZ0ZXJfaWZfZWxzZUAxMQoKZGVwb3NpdF9lbHNlX2JvZHlANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZldXBfdmF1bHQvY29udHJhY3QucHk6MTY5CiAgICAvLyBlbGlmIGJhbGFuY2UgPj0gc2VsZi5tMi52YWx1ZToKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJtMiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5tMiBleGlzdHMKICAgIGRpZyAxCiAgICA8PQogICAgYnogZGVwb3NpdF9lbHNlX2JvZHlAOQogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmV1cF92YXVsdC9jb250cmFjdC5weToxNzAKICAgIC8vIHNlbGYubGV2ZWxbVHhuLnNlbmRlcl0gPSBVSW50NjQoMikKICAgIHR4biBTZW5kZXIKICAgIGJ5dGVjXzIgLy8gImxldmVsIgogICAgaW50Y18zIC8vIDIKICAgIGFwcF9sb2NhbF9wdXQKICAgIGIgZGVwb3NpdF9hZnRlcl9pZl9lbHNlQDExCgpkZXBvc2l0X2Vsc2VfYm9keUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmV1cF92YXVsdC9jb250cmFjdC5weToxNzEKICAgIC8vIGVsaWYgYmFsYW5jZSA+PSBzZWxmLm0xLnZhbHVlOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gIm0xIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm0xIGV4aXN0cwogICAgZGlnIDEKICAgIDw9CiAgICBieiBkZXBvc2l0X2FmdGVyX2lmX2Vsc2VAMTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZldXBfdmF1bHQvY29udHJhY3QucHk6MTcyCiAgICAvLyBzZWxmLmxldmVsW1R4bi5zZW5kZXJdID0gVUludDY0KDEpCiAgICB0eG4gU2VuZGVyCiAgICBieXRlY18yIC8vICJsZXZlbCIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfbG9jYWxfcHV0CiAgICBiIGRlcG9zaXRfYWZ0ZXJfaWZfZWxzZUAxMQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5zYXZldXBfdmF1bHQuY29udHJhY3QuU2F2ZVVwVmF1bHQud2l0aGRyYXdbcm91dGluZ10oKSAtPiB2b2lkOgp3aXRoZHJhdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZldXBfdmF1bHQvY29udHJhY3QucHk6MTEzCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZldXBfdmF1bHQvY29udHJhY3QucHk6MTE5CiAgICAvLyBhc3NlcnQgc2VsZi5sb2NrW1R4bi5zZW5kZXJdIDw9IEdsb2JhbC5yb3VuZCwgIlZhdWx0IGlzIHN0aWxsIGxvY2tlZCIKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA0IC8vICJsb2NrIgogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubG9jayBleGlzdHMgZm9yIGFjY291bnQKICAgIGdsb2JhbCBSb3VuZAogICAgPD0KICAgIGFzc2VydCAvLyBWYXVsdCBpcyBzdGlsbCBsb2NrZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZldXBfdmF1bHQvY29udHJhY3QucHk6MTIwCiAgICAvLyBhc3NlcnQgc2VsZi5zYXZlZFtUeG4uc2VuZGVyXSA+PSBhbW91bnQsICJJbnN1ZmZpY2llbnQgdmF1bHQgYmFsYW5jZSIKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJzYXZlZCIKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLnNhdmVkIGV4aXN0cyBmb3IgYWNjb3VudAogICAgZGlnIDEKICAgID49CiAgICBhc3NlcnQgLy8gSW5zdWZmaWNpZW50IHZhdWx0IGJhbGFuY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZldXBfdmF1bHQvY29udHJhY3QucHk6MTIyLTEyNgogICAgLy8gaXR4bi5QYXltZW50KAogICAgLy8gICAgIHJlY2VpdmVyPVR4bi5zZW5kZXIsCiAgICAvLyAgICAgYW1vdW50PWFtb3VudCwKICAgIC8vICAgICBmZWU9VUludDY0KDApLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmV1cF92YXVsdC9jb250cmFjdC5weToxMjMKICAgIC8vIHJlY2VpdmVyPVR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICBkaWcgMQogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZldXBfdmF1bHQvY29udHJhY3QucHk6MTIyCiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICBpbnRjXzEgLy8gcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2ZXVwX3ZhdWx0L2NvbnRyYWN0LnB5OjEyNQogICAgLy8gZmVlPVVJbnQ2NCgwKSwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmV1cF92YXVsdC9jb250cmFjdC5weToxMjItMTI2CiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIC8vICAgICBhbW91bnQ9YW1vdW50LAogICAgLy8gICAgIGZlZT1VSW50NjQoMCksCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmV1cF92YXVsdC9jb250cmFjdC5weToxMjgKICAgIC8vIHNlbGYuc2F2ZWRbVHhuLnNlbmRlcl0gPSBzZWxmLnNhdmVkW1R4bi5zZW5kZXJdIC0gYW1vdW50CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAic2F2ZWQiCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zYXZlZCBleGlzdHMgZm9yIGFjY291bnQKICAgIGRpZyAxCiAgICAtCiAgICB0eG4gU2VuZGVyCiAgICBieXRlY18wIC8vICJzYXZlZCIKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmV1cF92YXVsdC9jb250cmFjdC5weToxMjkKICAgIC8vIHNlbGYudG90YWwudmFsdWUgPSBzZWxmLnRvdGFsLnZhbHVlIC0gYW1vdW50CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAidG90YWwiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG90YWwgZXhpc3RzCiAgICBzd2FwCiAgICAtCiAgICBieXRlY18xIC8vICJ0b3RhbCIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2ZXVwX3ZhdWx0L2NvbnRyYWN0LnB5OjExMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnNhdmV1cF92YXVsdC5jb250cmFjdC5TYXZlVXBWYXVsdC53aXRoZHJhd19lYXJseVtyb3V0aW5nXSgpIC0+IHZvaWQ6CndpdGhkcmF3X2Vhcmx5OgogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmV1cF92YXVsdC9jb250cmFjdC5weToxMzEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmV1cF92YXVsdC9jb250cmFjdC5weToxMzcKICAgIC8vIGFzc2VydCBzZWxmLnNhdmVkW1R4bi5zZW5kZXJdID49IGFtb3VudCwgIkluc3VmZmljaWVudCB2YXVsdCBiYWxhbmNlIgogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInNhdmVkIgogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuc2F2ZWQgZXhpc3RzIGZvciBhY2NvdW50CiAgICBkaWcgMQogICAgPj0KICAgIGFzc2VydCAvLyBJbnN1ZmZpY2llbnQgdmF1bHQgYmFsYW5jZQogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmV1cF92YXVsdC9jb250cmFjdC5weToxMzkKICAgIC8vIHBlbmFsdHkgPSBhbW91bnQgLy8gVUludDY0KFBFTkFMVFlfRElWSVNPUikKICAgIGR1cAogICAgcHVzaGludCAxMAogICAgLwogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmV1cF92YXVsdC9jb250cmFjdC5weToxNDAKICAgIC8vIG5ldCA9IGFtb3VudCAtIHBlbmFsdHkKICAgIGRpZyAxCiAgICBzd2FwCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2ZXVwX3ZhdWx0L2NvbnRyYWN0LnB5OjE0Mi0xNDYKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIC8vICAgICByZWNlaXZlcj1UeG4uc2VuZGVyLAogICAgLy8gICAgIGFtb3VudD1uZXQsCiAgICAvLyAgICAgZmVlPVVJbnQ2NCgwKSwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZldXBfdmF1bHQvY29udHJhY3QucHk6MTQzCiAgICAvLyByZWNlaXZlcj1UeG4uc2VuZGVyLAogICAgdHhuIFNlbmRlcgogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZldXBfdmF1bHQvY29udHJhY3QucHk6MTQyCiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICBpbnRjXzEgLy8gcGF5CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2ZXVwX3ZhdWx0L2NvbnRyYWN0LnB5OjE0NQogICAgLy8gZmVlPVVJbnQ2NCgwKSwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmV1cF92YXVsdC9jb250cmFjdC5weToxNDItMTQ2CiAgICAvLyBpdHhuLlBheW1lbnQoCiAgICAvLyAgICAgcmVjZWl2ZXI9VHhuLnNlbmRlciwKICAgIC8vICAgICBhbW91bnQ9bmV0LAogICAgLy8gICAgIGZlZT1VSW50NjQoMCksCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmV1cF92YXVsdC9jb250cmFjdC5weToxNDgKICAgIC8vIHNlbGYuc2F2ZWRbVHhuLnNlbmRlcl0gPSBzZWxmLnNhdmVkW1R4bi5zZW5kZXJdIC0gYW1vdW50CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAic2F2ZWQiCiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5zYXZlZCBleGlzdHMgZm9yIGFjY291bnQKICAgIGRpZyAxCiAgICAtCiAgICB0eG4gU2VuZGVyCiAgICBieXRlY18wIC8vICJzYXZlZCIKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmV1cF92YXVsdC9jb250cmFjdC5weToxNDkKICAgIC8vIHNlbGYudG90YWwudmFsdWUgPSBzZWxmLnRvdGFsLnZhbHVlIC0gYW1vdW50CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAidG90YWwiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG90YWwgZXhpc3RzCiAgICBzd2FwCiAgICAtCiAgICBieXRlY18xIC8vICJ0b3RhbCIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvc2F2ZXVwX3ZhdWx0L2NvbnRyYWN0LnB5OjEzMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLnNhdmV1cF92YXVsdC5jb250cmFjdC5TYXZlVXBWYXVsdC5zZXRfbG9ja1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldF9sb2NrOgogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmV1cF92YXVsdC9jb250cmFjdC5weToxNTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL3NhdmV1cF92YXVsdC9jb250cmFjdC5weToxNTQKICAgIC8vIHNlbGYubG9ja1tUeG4uc2VuZGVyXSA9IGxvY2tfdW50aWxfcm91bmQKICAgIHR4biBTZW5kZXIKICAgIGJ5dGVjIDQgLy8gImxvY2siCiAgICB1bmNvdmVyIDIKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9zYXZldXBfdmF1bHQvY29udHJhY3QucHk6MTUxCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4K", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CyAEAAEIAiYKBXNhdmVkBXRvdGFsBWxldmVsBWNvdW50BGxvY2sCbTECbTICbTMCbTQCbTWABDDG1Yo2GgCOAQA7MRkURDEYQQAkggQEbi68mwQh8d3/BLhXkfAEVVEJ1jYaAI4EAF8BEAFYAZsAgARMXGG6NhoAjgEADAAxGSMSMRgQREIALicFgYCt4gRnJwaBgOHrF2cnB4GAwtcvZycIgYDlmndnJwmBgMq17gFnKSJnI0MxACgiZjEAKyJmMQAnBCJmMQAqImYjQzYaARUkEkQyBCUSRCI4ECMSRCI4BzIKEkQiOAAxABJEIjgIMQAiKGNESwEIMQAoTwJmMQAiK2NEIwgxACtPAmYiKWVECClMZzEAIihjTElPAkQiJwllRA9BAAgxACqBBWYjQyInCGVESwEOQQAJMQAqgQRmQv/qIicHZURLAQ5BAAkxACqBA2ZC/9YiJwZlREsBDkEACDEAKiVmQv/DIicFZURLAQ5B/7gxACojZkL/sDYaAUkVJBJEFzEAIicEY0QyBg5EMQAiKGNESwEPRLExAEsBsgiyByOyECKyAbMxACIoY0RLAQkxAChPAmYiKWVETAkpTGcjQzYaAUkVJBJEFzEAIihjREsBD0RJgQoKSwFMCbExALIHsggjshAisgGzMQAiKGNESwEJMQAoTwJmIillREwJKUxnI0M2GgFJFSQSRBcxACcETwJmI0M=", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 7, "patch": 1 } }, "events": [], "templateVariables": {} }