{ "name": "VouchEscrow", "structs": {}, "methods": [ { "name": "create", "args": [ { "type": "uint64", "name": "asset" } ], "returns": { "type": "void" }, "actions": { "create": [ "NoOp" ], "call": [] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "bootstrap", "args": [ { "type": "uint64", "name": "asset" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Opt the app account into USDC. Operator only; once.", "events": [], "recommendations": {} }, { "name": "set_operator", "args": [ { "type": "address", "name": "new_operator" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "register_owner", "args": [ { "type": "byte[]", "name": "seller_id" }, { "type": "address", "name": "owner" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Operator binds seller_id \u2192 owner before any deposit.\nPrevents first-depositor ownership sniping.", "events": [], "recommendations": {} }, { "name": "deposit", "args": [ { "type": "byte[]", "name": "seller_id" }, { "type": "axfer", "name": "payment" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Credit seller_id from a grouped ASA payment into the app.\nGroup: [axfer USDC -> app, app call deposit]. Owner must already be register_owner'd; anyone may top up.", "events": [], "recommendations": {} }, { "name": "remit", "args": [ { "type": "byte[]", "name": "seller_id" }, { "type": "byte[]", "name": "settle_tx_id" }, { "type": "address", "name": "buyer" }, { "type": "address", "name": "referrer" }, { "type": "uint64", "name": "rebate" }, { "type": "uint64", "name": "commission" }, { "type": "uint64", "name": "asset" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Operator remits rebate (buyer) + commission (referrer) from seller balance.\nIdempotent on settle_tx_id.", "events": [], "recommendations": {} }, { "name": "withdraw", "args": [ { "type": "byte[]", "name": "seller_id" }, { "type": "uint64", "name": "amount" }, { "type": "address", "name": "to" }, { "type": "uint64", "name": "asset" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Owner or operator withdraws unused promo USDC \u2014 destination must be owner.", "events": [], "recommendations": {} }, { "name": "get_balance", "args": [ { "type": "byte[]", "name": "seller_id" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "is_remitted", "args": [ { "type": "byte[]", "name": "settle_tx_id" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_operator", "args": [], "returns": { "type": "address" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_asset_id", "args": [], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_owner", "args": [ { "type": "byte[]", "name": "seller_id" } ], "returns": { "type": "address" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 2, "bytes": 1 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "operator": { "keyType": "AVMString", "valueType": "address", "key": "b3BlcmF0b3I=" }, "asset_id": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "YXNzZXRfaWQ=" }, "bootstrapped": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "Ym9vdHN0cmFwcGVk" } }, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": { "balances": { "keyType": "AVMBytes", "valueType": "uint64", "prefix": "YmFsOg==" }, "owners": { "keyType": "AVMBytes", "valueType": "address", "prefix": "b3duOg==" }, "remitted": { "keyType": "AVMBytes", "valueType": "uint64", "prefix": "cmVtOg==" } } } }, "bareActions": { "create": [], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 78 ], "errorMessage": "OnCompletion must be NoOp" }, { "pc": [ 226 ], "errorMessage": "already bootstrapped" }, { "pc": [ 332 ], "errorMessage": "already registered" }, { "pc": [ 579 ], "errorMessage": "already remitted" }, { "pc": [ 402 ], "errorMessage": "axfer sender mismatch" }, { "pc": [ 395 ], "errorMessage": "bad asset" }, { "pc": [ 386 ], "errorMessage": "bad recv" }, { "pc": [ 230, 393, 552, 726, 908 ], "errorMessage": "check self.asset_id exists" }, { "pc": [ 224, 367, 545, 719 ], "errorMessage": "check self.bootstrapped exists" }, { "pc": [ 218, 272, 310, 539, 751, 898 ], "errorMessage": "check self.operator exists" }, { "pc": [ 317, 375 ], "errorMessage": "empty seller" }, { "pc": [ 559 ], "errorMessage": "empty settle id" }, { "pc": [ 605, 786 ], "errorMessage": "insufficient escrow" }, { "pc": [ 285, 342, 449, 465, 669, 830, 865, 921 ], "errorMessage": "invalid array length header" }, { "pc": [ 292, 349, 456, 472, 676, 837, 872, 928 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 266, 304, 486, 497, 703 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 190, 211, 505, 517, 529, 688, 711 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ 757 ], "errorMessage": "not authorized" }, { "pc": [ 370, 548, 722 ], "errorMessage": "not bootstrapped" }, { "pc": [ 220, 274, 312, 541 ], "errorMessage": "not operator" }, { "pc": [ 586 ], "errorMessage": "nothing to remit" }, { "pc": [ 415 ], "errorMessage": "owner not registered" }, { "pc": [ 321, 379 ], "errorMessage": "seller id too long" }, { "pc": [ 563 ], "errorMessage": "settle id too long" }, { "pc": [ 764 ], "errorMessage": "to must be owner" }, { "pc": [ 363 ], "errorMessage": "transaction type is axfer" }, { "pc": [ 739, 937 ], "errorMessage": "unknown seller" }, { "pc": [ 234, 554, 728 ], "errorMessage": "wrong asset" }, { "pc": [ 406 ], "errorMessage": "zero deposit" }, { "pc": [ 729 ], "errorMessage": "zero withdraw" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgMiA4CiAgICBieXRlY2Jsb2NrICJvcGVyYXRvciIgImFzc2V0X2lkIiAiYm9vdHN0cmFwcGVkIiAweDE1MWY3Yzc1IDB4NmY3NzZlM2EgMHg2MjYxNmMzYSAweDcyNjU2ZDNhCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyB2b3VjaF9lc2Nyb3cucHk6MjUKICAgIC8vIHNlbGYub3BlcmF0b3IgPSBBY2NvdW50KCkKICAgIGJ5dGVjXzAgLy8gIm9wZXJhdG9yIgogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdm91Y2hfZXNjcm93LnB5OjI2CiAgICAvLyBzZWxmLmFzc2V0X2lkID0gVUludDY0KDApCiAgICBieXRlY18xIC8vICJhc3NldF9pZCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdm91Y2hfZXNjcm93LnB5OjI3CiAgICAvLyBzZWxmLmJvb3RzdHJhcHBlZCA9IFVJbnQ2NCgwKQogICAgYnl0ZWNfMiAvLyAiYm9vdHN0cmFwcGVkIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHZvdWNoX2VzY3Jvdy5weToyMwogICAgLy8gY2xhc3MgVm91Y2hFc2Nyb3coQVJDNENvbnRyYWN0KToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYnogbWFpbl9jcmVhdGVfTm9PcEAxNwogICAgcHVzaGJ5dGVzcyAweGEwY2FkZjhhIDB4N2QwZjZiOGEgMHgzZDFiNGMzNSAweDVkYWJlODY4IDB4NzZmNmZlMTAgMHhkZWFlZjI1MSAweDdlYzkyZjJmIDB4M2E5MmMyMTkgMHgzMTFiMmY4YiAweDViYTIyYTg0IDB4ZjA2Y2QzYmQgLy8gbWV0aG9kICJib290c3RyYXAodWludDY0KXZvaWQiLCBtZXRob2QgInNldF9vcGVyYXRvcihhZGRyZXNzKXZvaWQiLCBtZXRob2QgInJlZ2lzdGVyX293bmVyKGJ5dGVbXSxhZGRyZXNzKXZvaWQiLCBtZXRob2QgImRlcG9zaXQoYnl0ZVtdLGF4ZmVyKXVpbnQ2NCIsIG1ldGhvZCAicmVtaXQoYnl0ZVtdLGJ5dGVbXSxhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZCIsIG1ldGhvZCAid2l0aGRyYXcoYnl0ZVtdLHVpbnQ2NCxhZGRyZXNzLHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgImdldF9iYWxhbmNlKGJ5dGVbXSl1aW50NjQiLCBtZXRob2QgImlzX3JlbWl0dGVkKGJ5dGVbXSl1aW50NjQiLCBtZXRob2QgImdldF9vcGVyYXRvcigpYWRkcmVzcyIsIG1ldGhvZCAiZ2V0X2Fzc2V0X2lkKCl1aW50NjQiLCBtZXRob2QgImdldF9vd25lcihieXRlW10pYWRkcmVzcyIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIGJvb3RzdHJhcCBzZXRfb3BlcmF0b3IgcmVnaXN0ZXJfb3duZXIgZGVwb3NpdCByZW1pdCB3aXRoZHJhdyBnZXRfYmFsYW5jZSBpc19yZW1pdHRlZCBnZXRfb3BlcmF0b3IgZ2V0X2Fzc2V0X2lkIGdldF9vd25lcgogICAgZXJyCgptYWluX2NyZWF0ZV9Ob09wQDE3OgogICAgLy8gdm91Y2hfZXNjcm93LnB5OjIzCiAgICAvLyBjbGFzcyBWb3VjaEVzY3JvdyhBUkM0Q29udHJhY3QpOgogICAgcHVzaGJ5dGVzIDB4MjQwZDJmNjcgLy8gbWV0aG9kICJjcmVhdGUodWludDY0KXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBjcmVhdGUKICAgIGVycgoKCi8vIHZvdWNoX2VzY3Jvdy5Wb3VjaEVzY3Jvdy5jcmVhdGVbcm91dGluZ10oKSAtPiB2b2lkOgpjcmVhdGU6CiAgICAvLyB2b3VjaF9lc2Nyb3cucHk6MzUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChjcmVhdGU9InJlcXVpcmUiKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gdm91Y2hfZXNjcm93LnB5OjM3CiAgICAvLyBzZWxmLm9wZXJhdG9yID0gVHhuLnNlbmRlcgogICAgYnl0ZWNfMCAvLyAib3BlcmF0b3IiCiAgICB0eG4gU2VuZGVyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdm91Y2hfZXNjcm93LnB5OjM4CiAgICAvLyBzZWxmLmFzc2V0X2lkID0gYXNzZXQuaWQKICAgIGJ5dGVjXzEgLy8gImFzc2V0X2lkIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHZvdWNoX2VzY3Jvdy5weTozOQogICAgLy8gc2VsZi5ib290c3RyYXBwZWQgPSBVSW50NjQoMCkKICAgIGJ5dGVjXzIgLy8gImJvb3RzdHJhcHBlZCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gdm91Y2hfZXNjcm93LnB5OjM1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoY3JlYXRlPSJyZXF1aXJlIikKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB2b3VjaF9lc2Nyb3cuVm91Y2hFc2Nyb3cuYm9vdHN0cmFwW3JvdXRpbmddKCkgLT4gdm9pZDoKYm9vdHN0cmFwOgogICAgLy8gdm91Y2hfZXNjcm93LnB5OjQxCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHZvdWNoX2VzY3Jvdy5weTo0NAogICAgLy8gYXNzZXJ0IFR4bi5zZW5kZXIgPT0gc2VsZi5vcGVyYXRvciwgIm5vdCBvcGVyYXRvciIKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJvcGVyYXRvciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5vcGVyYXRvciBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gbm90IG9wZXJhdG9yCiAgICAvLyB2b3VjaF9lc2Nyb3cucHk6NDUKICAgIC8vIGFzc2VydCBzZWxmLmJvb3RzdHJhcHBlZCA9PSBVSW50NjQoMCksICJhbHJlYWR5IGJvb3RzdHJhcHBlZCIKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJib290c3RyYXBwZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm9vdHN0cmFwcGVkIGV4aXN0cwogICAgIQogICAgYXNzZXJ0IC8vIGFscmVhZHkgYm9vdHN0cmFwcGVkCiAgICAvLyB2b3VjaF9lc2Nyb3cucHk6NDYKICAgIC8vIGFzc2VydCBhc3NldC5pZCA9PSBzZWxmLmFzc2V0X2lkLCAid3JvbmcgYXNzZXQiCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAiYXNzZXRfaWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRfaWQgZXhpc3RzCiAgICBkaWcgMQogICAgPT0KICAgIGFzc2VydCAvLyB3cm9uZyBhc3NldAogICAgLy8gdm91Y2hfZXNjcm93LnB5OjQ3LTUyCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9R2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywKICAgIC8vICAgICB4ZmVyX2Fzc2V0PWFzc2V0LAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD0wLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gdm91Y2hfZXNjcm93LnB5OjQ4CiAgICAvLyBhc3NldF9yZWNlaXZlcj1HbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIHZvdWNoX2VzY3Jvdy5weTo1MAogICAgLy8gYXNzZXRfYW1vdW50PTAsCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gdm91Y2hfZXNjcm93LnB5OjQ3CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICBwdXNoaW50IDQgLy8gYXhmZXIKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIC8vIHZvdWNoX2VzY3Jvdy5weTo1MQogICAgLy8gZmVlPTAsCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHZvdWNoX2VzY3Jvdy5weTo0Ny01MgogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPUdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MsCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldCwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9MCwKICAgIC8vICAgICBmZWU9MCwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyB2b3VjaF9lc2Nyb3cucHk6NTMKICAgIC8vIHNlbGYuYm9vdHN0cmFwcGVkID0gVUludDY0KDEpCiAgICBieXRlY18yIC8vICJib290c3RyYXBwZWQiCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHZvdWNoX2VzY3Jvdy5weTo0MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdm91Y2hfZXNjcm93LlZvdWNoRXNjcm93LnNldF9vcGVyYXRvcltyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldF9vcGVyYXRvcjoKICAgIC8vIHZvdWNoX2VzY3Jvdy5weTo1NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAzMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyB2b3VjaF9lc2Nyb3cucHk6NTcKICAgIC8vIGFzc2VydCBUeG4uc2VuZGVyID09IHNlbGYub3BlcmF0b3IsICJub3Qgb3BlcmF0b3IiCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAib3BlcmF0b3IiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYub3BlcmF0b3IgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIG5vdCBvcGVyYXRvcgogICAgLy8gdm91Y2hfZXNjcm93LnB5OjU4CiAgICAvLyBzZWxmLm9wZXJhdG9yID0gbmV3X29wZXJhdG9yCiAgICBieXRlY18wIC8vICJvcGVyYXRvciIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB2b3VjaF9lc2Nyb3cucHk6NTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHZvdWNoX2VzY3Jvdy5Wb3VjaEVzY3Jvdy5yZWdpc3Rlcl9vd25lcltyb3V0aW5nXSgpIC0+IHZvaWQ6CnJlZ2lzdGVyX293bmVyOgogICAgLy8gdm91Y2hfZXNjcm93LnB5OjYwCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAzMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyB2b3VjaF9lc2Nyb3cucHk6NjYKICAgIC8vIGFzc2VydCBUeG4uc2VuZGVyID09IHNlbGYub3BlcmF0b3IsICJub3Qgb3BlcmF0b3IiCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAib3BlcmF0b3IiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYub3BlcmF0b3IgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIG5vdCBvcGVyYXRvcgogICAgLy8gdm91Y2hfZXNjcm93LnB5OjY3CiAgICAvLyBhc3NlcnQgc2VsbGVyX2lkLmxlbmd0aCA+IFVJbnQ2NCgwKSwgImVtcHR5IHNlbGxlciIKICAgIGRpZyAxCiAgICBsZW4KICAgIGR1cAogICAgYXNzZXJ0IC8vIGVtcHR5IHNlbGxlcgogICAgLy8gdm91Y2hfZXNjcm93LnB5OjY4CiAgICAvLyBhc3NlcnQgc2VsbGVyX2lkLmxlbmd0aCA8PSBVSW50NjQoNDgpLCAic2VsbGVyIGlkIHRvbyBsb25nIgogICAgcHVzaGludCA0OCAvLyA0OAogICAgPD0KICAgIGFzc2VydCAvLyBzZWxsZXIgaWQgdG9vIGxvbmcKICAgIC8vIHZvdWNoX2VzY3Jvdy5weTo2OQogICAgLy8gX2V4aXN0aW5nLCBoYXNfb3duZXIgPSBzZWxmLm93bmVycy5tYXliZShzZWxsZXJfaWQpCiAgICBieXRlYyA0IC8vIDB4NmY3NzZlM2EKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gdm91Y2hfZXNjcm93LnB5OjcwCiAgICAvLyBhc3NlcnQgbm90IGhhc19vd25lciwgImFscmVhZHkgcmVnaXN0ZXJlZCIKICAgICEKICAgIGFzc2VydCAvLyBhbHJlYWR5IHJlZ2lzdGVyZWQKICAgIC8vIHZvdWNoX2VzY3Jvdy5weTo3MQogICAgLy8gc2VsZi5vd25lcnNbc2VsbGVyX2lkXSA9IG93bmVyCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyB2b3VjaF9lc2Nyb3cucHk6NjAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHZvdWNoX2VzY3Jvdy5Wb3VjaEVzY3Jvdy5kZXBvc2l0W3JvdXRpbmddKCkgLT4gdm9pZDoKZGVwb3NpdDoKICAgIC8vIHZvdWNoX2VzY3Jvdy5weTo3MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICBleHRyYWN0IDIgMAogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBwdXNoaW50IDQgLy8gYXhmZXIKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBheGZlcgogICAgLy8gdm91Y2hfZXNjcm93LnB5OjgyCiAgICAvLyBhc3NlcnQgc2VsZi5ib290c3RyYXBwZWQgPT0gVUludDY0KDEpLCAibm90IGJvb3RzdHJhcHBlZCIKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJib290c3RyYXBwZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm9vdHN0cmFwcGVkIGV4aXN0cwogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gbm90IGJvb3RzdHJhcHBlZAogICAgLy8gdm91Y2hfZXNjcm93LnB5OjgzCiAgICAvLyBhc3NlcnQgc2VsbGVyX2lkLmxlbmd0aCA+IFVJbnQ2NCgwKSwgImVtcHR5IHNlbGxlciIKICAgIGRpZyAxCiAgICBsZW4KICAgIGR1cAogICAgYXNzZXJ0IC8vIGVtcHR5IHNlbGxlcgogICAgLy8gdm91Y2hfZXNjcm93LnB5Ojg0CiAgICAvLyBhc3NlcnQgc2VsbGVyX2lkLmxlbmd0aCA8PSBVSW50NjQoNDgpLCAic2VsbGVyIGlkIHRvbyBsb25nIgogICAgcHVzaGludCA0OCAvLyA0OAogICAgPD0KICAgIGFzc2VydCAvLyBzZWxsZXIgaWQgdG9vIGxvbmcKICAgIC8vIHZvdWNoX2VzY3Jvdy5weTo4NQogICAgLy8gYXNzZXJ0IHBheW1lbnQuYXNzZXRfcmVjZWl2ZXIgPT0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcywgImJhZCByZWN2IgogICAgZHVwCiAgICBndHhucyBBc3NldFJlY2VpdmVyCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBiYWQgcmVjdgogICAgLy8gdm91Y2hfZXNjcm93LnB5Ojg2CiAgICAvLyBhc3NlcnQgcGF5bWVudC54ZmVyX2Fzc2V0LmlkID09IHNlbGYuYXNzZXRfaWQsICJiYWQgYXNzZXQiCiAgICBkdXAKICAgIGd0eG5zIFhmZXJBc3NldAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImFzc2V0X2lkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2V0X2lkIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBiYWQgYXNzZXQKICAgIC8vIHZvdWNoX2VzY3Jvdy5weTo4NwogICAgLy8gYXNzZXJ0IHBheW1lbnQuc2VuZGVyID09IFR4bi5zZW5kZXIsICJheGZlciBzZW5kZXIgbWlzbWF0Y2giCiAgICBkdXAKICAgIGd0eG5zIFNlbmRlcgogICAgdHhuIFNlbmRlcgogICAgPT0KICAgIGFzc2VydCAvLyBheGZlciBzZW5kZXIgbWlzbWF0Y2gKICAgIC8vIHZvdWNoX2VzY3Jvdy5weTo4OAogICAgLy8gYXNzZXJ0IHBheW1lbnQuYXNzZXRfYW1vdW50ID4gVUludDY0KDApLCAiemVybyBkZXBvc2l0IgogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgIGR1cAogICAgYXNzZXJ0IC8vIHplcm8gZGVwb3NpdAogICAgLy8gdm91Y2hfZXNjcm93LnB5OjkwCiAgICAvLyBfb3duZXIsIGhhc19vd25lciA9IHNlbGYub3duZXJzLm1heWJlKHNlbGxlcl9pZCkKICAgIGJ5dGVjIDQgLy8gMHg2Zjc3NmUzYQogICAgZGlnIDIKICAgIGNvbmNhdAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyB2b3VjaF9lc2Nyb3cucHk6OTEKICAgIC8vIGFzc2VydCBoYXNfb3duZXIsICJvd25lciBub3QgcmVnaXN0ZXJlZCIKICAgIGFzc2VydCAvLyBvd25lciBub3QgcmVnaXN0ZXJlZAogICAgLy8gdm91Y2hfZXNjcm93LnB5OjkzCiAgICAvLyBiYWwgPSBzZWxmLmJhbGFuY2VzLmdldChzZWxsZXJfaWQsIGRlZmF1bHQ9VUludDY0KDApKQogICAgYnl0ZWMgNSAvLyAweDYyNjE2YzNhCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIC8vIHZvdWNoX2VzY3Jvdy5weTo5NAogICAgLy8gbmV3X2JhbCA9IGJhbCArIHBheW1lbnQuYXNzZXRfYW1vdW50CiAgICB1bmNvdmVyIDIKICAgICsKICAgIC8vIHZvdWNoX2VzY3Jvdy5weTo5NQogICAgLy8gc2VsZi5iYWxhbmNlc1tzZWxsZXJfaWRdID0gbmV3X2JhbAogICAgaXRvYgogICAgc3dhcAogICAgZGlnIDEKICAgIGJveF9wdXQKICAgIC8vIHZvdWNoX2VzY3Jvdy5weTo3MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBieXRlY18zIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdm91Y2hfZXNjcm93LlZvdWNoRXNjcm93LnJlbWl0W3JvdXRpbmddKCkgLT4gdm9pZDoKcmVtaXQ6CiAgICAvLyB2b3VjaF9lc2Nyb3cucHk6OTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGNvdmVyIDMKICAgIGxlbgogICAgcHVzaGludCAzMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGNvdmVyIDMKICAgIGxlbgogICAgcHVzaGludCAzMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICBkdXAKICAgIGNvdmVyIDMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDYKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cAogICAgY292ZXIgNAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICBjb3ZlciA1CiAgICAvLyB2b3VjaF9lc2Nyb3cucHk6MTEzCiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSBzZWxmLm9wZXJhdG9yLCAibm90IG9wZXJhdG9yIgogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gIm9wZXJhdG9yIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm9wZXJhdG9yIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBub3Qgb3BlcmF0b3IKICAgIC8vIHZvdWNoX2VzY3Jvdy5weToxMTQKICAgIC8vIGFzc2VydCBzZWxmLmJvb3RzdHJhcHBlZCA9PSBVSW50NjQoMSksICJub3QgYm9vdHN0cmFwcGVkIgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gImJvb3RzdHJhcHBlZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ib290c3RyYXBwZWQgZXhpc3RzCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBub3QgYm9vdHN0cmFwcGVkCiAgICAvLyB2b3VjaF9lc2Nyb3cucHk6MTE1CiAgICAvLyBhc3NlcnQgYXNzZXQuaWQgPT0gc2VsZi5hc3NldF9pZCwgIndyb25nIGFzc2V0IgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gImFzc2V0X2lkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2V0X2lkIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyB3cm9uZyBhc3NldAogICAgLy8gdm91Y2hfZXNjcm93LnB5OjExNgogICAgLy8gYXNzZXJ0IHNldHRsZV90eF9pZC5sZW5ndGggPiBVSW50NjQoMCksICJlbXB0eSBzZXR0bGUgaWQiCiAgICBkaWcgMgogICAgbGVuCiAgICBkdXAKICAgIGFzc2VydCAvLyBlbXB0eSBzZXR0bGUgaWQKICAgIC8vIHZvdWNoX2VzY3Jvdy5weToxMTcKICAgIC8vIGFzc2VydCBzZXR0bGVfdHhfaWQubGVuZ3RoIDw9IFVJbnQ2NCg2NCksICJzZXR0bGUgaWQgdG9vIGxvbmciCiAgICBwdXNoaW50IDY0IC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIHNldHRsZSBpZCB0b28gbG9uZwogICAgLy8gdm91Y2hfZXNjcm93LnB5OjExOQogICAgLy8gYWxyZWFkeSA9IHNlbGYucmVtaXR0ZWQuZ2V0KHNldHRsZV90eF9pZCwgZGVmYXVsdD1VSW50NjQoMCkpCiAgICBieXRlYyA2IC8vIDB4NzI2NTZkM2EKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICBkdXAKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgLy8gdm91Y2hfZXNjcm93LnB5OjEyMAogICAgLy8gYXNzZXJ0IGFscmVhZHkgPT0gVUludDY0KDApLCAiYWxyZWFkeSByZW1pdHRlZCIKICAgICEKICAgIGFzc2VydCAvLyBhbHJlYWR5IHJlbWl0dGVkCiAgICAvLyB2b3VjaF9lc2Nyb3cucHk6MTIyCiAgICAvLyB0b3RhbCA9IHJlYmF0ZSArIGNvbW1pc3Npb24KICAgIGRpZyAyCiAgICB1bmNvdmVyIDIKICAgICsKICAgIC8vIHZvdWNoX2VzY3Jvdy5weToxMjMKICAgIC8vIGFzc2VydCB0b3RhbCA+IFVJbnQ2NCgwKSwgIm5vdGhpbmcgdG8gcmVtaXQiCiAgICBkdXAKICAgIGFzc2VydCAvLyBub3RoaW5nIHRvIHJlbWl0CiAgICAvLyB2b3VjaF9lc2Nyb3cucHk6MTI1CiAgICAvLyBiYWwgPSBzZWxmLmJhbGFuY2VzLmdldChzZWxsZXJfaWQsIGRlZmF1bHQ9VUludDY0KDApKQogICAgYnl0ZWMgNSAvLyAweDYyNjE2YzNhCiAgICB1bmNvdmVyIDQKICAgIGNvbmNhdAogICAgZHVwCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIC8vIHZvdWNoX2VzY3Jvdy5weToxMjYKICAgIC8vIGFzc2VydCBiYWwgPj0gdG90YWwsICJpbnN1ZmZpY2llbnQgZXNjcm93IgogICAgZHVwCiAgICBkaWcgMwogICAgPj0KICAgIGFzc2VydCAvLyBpbnN1ZmZpY2llbnQgZXNjcm93CiAgICAvLyB2b3VjaF9lc2Nyb3cucHk6MTI4CiAgICAvLyBzZWxmLmJhbGFuY2VzW3NlbGxlcl9pZF0gPSBiYWwgLSB0b3RhbAogICAgdW5jb3ZlciAyCiAgICAtCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICAvLyB2b3VjaF9lc2Nyb3cucHk6MTI5CiAgICAvLyBzZWxmLnJlbWl0dGVkW3NldHRsZV90eF9pZF0gPSBVSW50NjQoMSkKICAgIGludGNfMSAvLyAxCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICAvLyB2b3VjaF9lc2Nyb3cucHk6MTMxCiAgICAvLyBpZiByZWJhdGUgPiBVSW50NjQoMCk6CiAgICBieiByZW1pdF9hZnRlcl9pZl9lbHNlQDQKICAgIC8vIHZvdWNoX2VzY3Jvdy5weToxMzItMTM3CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9YnV5ZXIsCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldCwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9cmViYXRlLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgZGlnIDIKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGR1cAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGRpZyA0CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIC8vIHZvdWNoX2VzY3Jvdy5weToxMzIKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gdm91Y2hfZXNjcm93LnB5OjEzNgogICAgLy8gZmVlPTAsCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHZvdWNoX2VzY3Jvdy5weToxMzItMTM3CiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9YnV5ZXIsCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldCwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9cmViYXRlLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKCnJlbWl0X2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHZvdWNoX2VzY3Jvdy5weToxMzgKICAgIC8vIGlmIGNvbW1pc3Npb24gPiBVSW50NjQoMCk6CiAgICBkaWcgMQogICAgYnogcmVtaXRfYWZ0ZXJfaWZfZWxzZUA3CiAgICAvLyB2b3VjaF9lc2Nyb3cucHk6MTM5LTE0NAogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgLy8gICAgIGFzc2V0X3JlY2VpdmVyPXJlZmVycmVyLAogICAgLy8gICAgIHhmZXJfYXNzZXQ9YXNzZXQsCiAgICAvLyAgICAgYXNzZXRfYW1vdW50PWNvbW1pc3Npb24sCiAgICAvLyAgICAgZmVlPTAsCiAgICAvLyApLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICBkaWcgMQogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZHVwCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgZGlnIDMKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgLy8gdm91Y2hfZXNjcm93LnB5OjEzOQogICAgLy8gaXR4bi5Bc3NldFRyYW5zZmVyKAogICAgcHVzaGludCA0IC8vIGF4ZmVyCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICAvLyB2b3VjaF9lc2Nyb3cucHk6MTQzCiAgICAvLyBmZWU9MCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gdm91Y2hfZXNjcm93LnB5OjEzOS0xNDQKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIC8vICAgICBhc3NldF9yZWNlaXZlcj1yZWZlcnJlciwKICAgIC8vICAgICB4ZmVyX2Fzc2V0PWFzc2V0LAogICAgLy8gICAgIGFzc2V0X2Ftb3VudD1jb21taXNzaW9uLAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKCnJlbWl0X2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHZvdWNoX2VzY3Jvdy5weTo5OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdm91Y2hfZXNjcm93LlZvdWNoRXNjcm93LndpdGhkcmF3W3JvdXRpbmddKCkgLT4gdm9pZDoKd2l0aGRyYXc6CiAgICAvLyB2b3VjaF9lc2Nyb3cucHk6MTQ2CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICBkdXAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cAogICAgY292ZXIgMgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBjb3ZlciAzCiAgICBsZW4KICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICBjb3ZlciAzCiAgICAvLyB2b3VjaF9lc2Nyb3cucHk6MTUxCiAgICAvLyBhc3NlcnQgc2VsZi5ib290c3RyYXBwZWQgPT0gVUludDY0KDEpLCAibm90IGJvb3RzdHJhcHBlZCIKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJib290c3RyYXBwZWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm9vdHN0cmFwcGVkIGV4aXN0cwogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gbm90IGJvb3RzdHJhcHBlZAogICAgLy8gdm91Y2hfZXNjcm93LnB5OjE1MgogICAgLy8gYXNzZXJ0IGFzc2V0LmlkID09IHNlbGYuYXNzZXRfaWQsICJ3cm9uZyBhc3NldCIKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJhc3NldF9pZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hc3NldF9pZCBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gd3JvbmcgYXNzZXQKICAgIC8vIHZvdWNoX2VzY3Jvdy5weToxNTMKICAgIC8vIGFzc2VydCBhbW91bnQgPiBVSW50NjQoMCksICJ6ZXJvIHdpdGhkcmF3IgogICAgYXNzZXJ0IC8vIHplcm8gd2l0aGRyYXcKICAgIC8vIHZvdWNoX2VzY3Jvdy5weToxNTUKICAgIC8vIG93bmVyLCBoYXNfb3duZXIgPSBzZWxmLm93bmVycy5tYXliZShzZWxsZXJfaWQpCiAgICBieXRlYyA0IC8vIDB4NmY3NzZlM2EKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYm94X2dldAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIC8vIHZvdWNoX2VzY3Jvdy5weToxNTYKICAgIC8vIGFzc2VydCBoYXNfb3duZXIsICJ1bmtub3duIHNlbGxlciIKICAgIGFzc2VydCAvLyB1bmtub3duIHNlbGxlcgogICAgLy8gdm91Y2hfZXNjcm93LnB5OjE1NwogICAgLy8gYXNzZXJ0IFR4bi5zZW5kZXIgPT0gb3duZXIgb3IgVHhuLnNlbmRlciA9PSBzZWxmLm9wZXJhdG9yLCAibm90IGF1dGhvcml6ZWQiCiAgICB0eG4gU2VuZGVyCiAgICA9PQogICAgYm56IHdpdGhkcmF3X2Jvb2xfdHJ1ZUAzCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAib3BlcmF0b3IiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYub3BlcmF0b3IgZXhpc3RzCiAgICA9PQogICAgYnogd2l0aGRyYXdfYm9vbF9mYWxzZUA0Cgp3aXRoZHJhd19ib29sX3RydWVAMzoKICAgIGludGNfMSAvLyAxCgp3aXRoZHJhd19ib29sX21lcmdlQDU6CiAgICAvLyB2b3VjaF9lc2Nyb3cucHk6MTU3CiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSBvd25lciBvciBUeG4uc2VuZGVyID09IHNlbGYub3BlcmF0b3IsICJub3QgYXV0aG9yaXplZCIKICAgIGFzc2VydCAvLyBub3QgYXV0aG9yaXplZAogICAgLy8gdm91Y2hfZXNjcm93LnB5OjE1OAogICAgLy8gYXNzZXJ0IHRvID09IG93bmVyLCAidG8gbXVzdCBiZSBvd25lciIKICAgIGRpZyAyCiAgICBkdXAKICAgIGRpZyAyCiAgICA9PQogICAgYXNzZXJ0IC8vIHRvIG11c3QgYmUgb3duZXIKICAgIC8vIHZvdWNoX2VzY3Jvdy5weToxNjAKICAgIC8vIGJhbCA9IHNlbGYuYmFsYW5jZXMuZ2V0KHNlbGxlcl9pZCwgZGVmYXVsdD1VSW50NjQoMCkpCiAgICBieXRlYyA1IC8vIDB4NjI2MTZjM2EKICAgIGRpZyA2CiAgICBjb25jYXQKICAgIGR1cAogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICAvLyB2b3VjaF9lc2Nyb3cucHk6MTYxCiAgICAvLyBhc3NlcnQgYmFsID49IGFtb3VudCwgImluc3VmZmljaWVudCBlc2Nyb3ciCiAgICBkdXAKICAgIGRpZyA3CiAgICBkdXAKICAgIGNvdmVyIDMKICAgID49CiAgICBhc3NlcnQgLy8gaW5zdWZmaWNpZW50IGVzY3JvdwogICAgLy8gdm91Y2hfZXNjcm93LnB5OjE2MgogICAgLy8gbmV3X2JhbCA9IGJhbCAtIGFtb3VudAogICAgZGlnIDEKICAgIC0KICAgIC8vIHZvdWNoX2VzY3Jvdy5weToxNjMKICAgIC8vIHNlbGYuYmFsYW5jZXNbc2VsbGVyX2lkXSA9IG5ld19iYWwKICAgIGl0b2IKICAgIHVuY292ZXIgMgogICAgZGlnIDEKICAgIGJveF9wdXQKICAgIC8vIHZvdWNoX2VzY3Jvdy5weToxNjUtMTcwCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9dG8sCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldCwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9YW1vdW50LAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgc3dhcAogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZGlnIDMKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIC8vIHZvdWNoX2VzY3Jvdy5weToxNjUKICAgIC8vIGl0eG4uQXNzZXRUcmFuc2ZlcigKICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgLy8gdm91Y2hfZXNjcm93LnB5OjE2OQogICAgLy8gZmVlPTAsCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHZvdWNoX2VzY3Jvdy5weToxNjUtMTcwCiAgICAvLyBpdHhuLkFzc2V0VHJhbnNmZXIoCiAgICAvLyAgICAgYXNzZXRfcmVjZWl2ZXI9dG8sCiAgICAvLyAgICAgeGZlcl9hc3NldD1hc3NldCwKICAgIC8vICAgICBhc3NldF9hbW91bnQ9YW1vdW50LAogICAgLy8gICAgIGZlZT0wLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHZvdWNoX2VzY3Jvdy5weToxNDYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgYnl0ZWNfMyAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKd2l0aGRyYXdfYm9vbF9mYWxzZUA0OgogICAgaW50Y18wIC8vIDAKICAgIGIgd2l0aGRyYXdfYm9vbF9tZXJnZUA1CgoKLy8gdm91Y2hfZXNjcm93LlZvdWNoRXNjcm93LmdldF9iYWxhbmNlW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X2JhbGFuY2U6CiAgICAvLyB2b3VjaF9lc2Nyb3cucHk6MTczCiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICAvLyB2b3VjaF9lc2Nyb3cucHk6MTc1CiAgICAvLyByZXR1cm4gc2VsZi5iYWxhbmNlcy5nZXQoc2VsbGVyX2lkLCBkZWZhdWx0PVVJbnQ2NCgwKSkKICAgIGJ5dGVjIDUgLy8gMHg2MjYxNmMzYQogICAgc3dhcAogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBidG9pCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIC8vIHZvdWNoX2VzY3Jvdy5weToxNzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgaXRvYgogICAgYnl0ZWNfMyAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHZvdWNoX2VzY3Jvdy5Wb3VjaEVzY3Jvdy5pc19yZW1pdHRlZFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmlzX3JlbWl0dGVkOgogICAgLy8gdm91Y2hfZXNjcm93LnB5OjE3NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICBleHRyYWN0IDIgMAogICAgLy8gdm91Y2hfZXNjcm93LnB5OjE3OQogICAgLy8gcmV0dXJuIHNlbGYucmVtaXR0ZWQuZ2V0KHNldHRsZV90eF9pZCwgZGVmYXVsdD1VSW50NjQoMCkpCiAgICBieXRlYyA2IC8vIDB4NzI2NTZkM2EKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYm94X2dldAogICAgc3dhcAogICAgYnRvaQogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICAvLyB2b3VjaF9lc2Nyb3cucHk6MTc3CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGl0b2IKICAgIGJ5dGVjXzMgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB2b3VjaF9lc2Nyb3cuVm91Y2hFc2Nyb3cuZ2V0X29wZXJhdG9yW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X29wZXJhdG9yOgogICAgLy8gdm91Y2hfZXNjcm93LnB5OjE4MwogICAgLy8gcmV0dXJuIGFyYzQuQWRkcmVzcyhzZWxmLm9wZXJhdG9yKQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gIm9wZXJhdG9yIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm9wZXJhdG9yIGV4aXN0cwogICAgLy8gdm91Y2hfZXNjcm93LnB5OjE4MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBieXRlY18zIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdm91Y2hfZXNjcm93LlZvdWNoRXNjcm93LmdldF9hc3NldF9pZFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldF9hc3NldF9pZDoKICAgIC8vIHZvdWNoX2VzY3Jvdy5weToxODcKICAgIC8vIHJldHVybiBzZWxmLmFzc2V0X2lkCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAiYXNzZXRfaWQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRfaWQgZXhpc3RzCiAgICAvLyB2b3VjaF9lc2Nyb3cucHk6MTg1CiAgICAvLyBAYXJjNC5hYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGl0b2IKICAgIGJ5dGVjXzMgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB2b3VjaF9lc2Nyb3cuVm91Y2hFc2Nyb3cuZ2V0X293bmVyW3JvdXRpbmddKCkgLT4gdm9pZDoKZ2V0X293bmVyOgogICAgLy8gdm91Y2hfZXNjcm93LnB5OjE4OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICBleHRyYWN0IDIgMAogICAgLy8gdm91Y2hfZXNjcm93LnB5OjE5MQogICAgLy8gb3duZXIsIGhhc19vd25lciA9IHNlbGYub3duZXJzLm1heWJlKHNlbGxlcl9pZCkKICAgIGJ5dGVjIDQgLy8gMHg2Zjc3NmUzYQogICAgc3dhcAogICAgY29uY2F0CiAgICBib3hfZ2V0CiAgICAvLyB2b3VjaF9lc2Nyb3cucHk6MTkyCiAgICAvLyBhc3NlcnQgaGFzX293bmVyLCAidW5rbm93biBzZWxsZXIiCiAgICBhc3NlcnQgLy8gdW5rbm93biBzZWxsZXIKICAgIC8vIHZvdWNoX2VzY3Jvdy5weToxODkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgYnl0ZWNfMyAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" }, "byteCode": { "approval": "CyAEAAECCCYHCG9wZXJhdG9yCGFzc2V0X2lkDGJvb3RzdHJhcHBlZAQVH3x1BG93bjoEYmFsOgRyZW06MRhAAAooMgNnKSJnKiJnMRkURDEYQQBVggsEoMrfigR9D2uKBD0bTDUEXavoaAR29v4QBN6u8lEEfskvLwQ6ksIZBDEbL4sEW6IqhATwbNO9NhoAjgsAJABaAHAAqQEUAfACkQK0AtcC4QLsAIAEJA0vZzYaAI4BAAEANhoBSRUlEkQXKDEAZylMZyoiZyNDNhoBSRUlEkQXMQAiKGVEEkQiKmVEFEQiKWVESwESRLEyCiKyErIUshGBBLIQIrIBsyojZyNDNhoBSRWBIBJEMQAiKGVEEkQoTGcjQzYaAUkiWSQISwEVEkRXAgA2GgJJFYEgEkQxACIoZUQSREsBFUlEgTAORCcETwJQSb1FARRETL8jQzYaAUkiWSQISwEVEkRXAgAxFiMJSTgQgQQSRCIqZUQjEkRLARVJRIEwDkRJOBQyChJESTgRIillRBJESTgAMQASRDgSSUQnBEsCUL1FAUQnBU8CUEm+TBciTE8CTU8CCBZMSwG/K0xQsCNDNhoBSSJZJAhLARUSRFcCADYaAkkiWSQISwEVEkRXAgA2GgNJTgMVgSASRDYaBElOAxWBIBJENhoFSRUlEkQXSU4DNhoGSRUlEkQXSU4ENhoHSRUlEkQXSU4FMQAiKGVEEkQiKmVEIxJEIillRBJESwIVSUSBQA5EJwZPA1BJvkwXIkxPAk0UREsCTwIISUQnBU8EUEm+TBciTE8CTUlLAw9ETwIJFr8jFr9BABSxSwKyEkmyEUsEshSBBLIQIrIBs0sBQQAUsUsBshJJshFLA7IUgQSyECKyAbMjQzYaAUkiWSQISwEVEkRXAgBJNhoCSRUlEkQXSU4CNhoDSU4DFYEgEkQ2GgRJFSUSRBdJTgMiKmVEIxJEIillRBJERCcETFC+TElPAkQxABJAAAoxACIoZUQSQQBBI0RLAklLAhJEJwVLBlBJvkwXIkxPAk1JSwdJTgMPREsBCRZPAksBv7FMshJLA7IRTLIUgQSyECKyAbMrTFCwI0MiQv+8NhoBSSJZJAhLARUSRFcCACcFTFC+TBciTE8CTRYrTFCwI0M2GgFJIlkkCEsBFRJEVwIAJwZMUL5MFyJMTwJNFitMULAjQyIoZUQrTFCwI0MiKWVEFitMULAjQzYaAUkiWSQISwEVEkRXAgAnBExQvkQrTFCwI0M=", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 4, "patch": 0 } }, "events": [], "templateVariables": {} }