{ "name": "CirculatingSupply", "structs": { "CirculatingSupplyConfig": [ { "name": "burned_addr", "type": "address" }, { "name": "custom_1_addr", "type": "address" }, { "name": "custom_2_addr", "type": "address" }, { "name": "custom_3_addr", "type": "address" }, { "name": "custom_4_addr", "type": "address" } ] }, "methods": [ { "name": "init_config", "args": [ { "type": "uint64", "name": "asset", "desc": "The ASA ID to initialize the circulating supply configuration for" }, { "type": "pay", "name": "mbr_payment", "desc": "Circulating supply configuration MBR payment transaction" } ], "returns": { "type": "uint64", "desc": "MBR (in microALGO) for the circulating supply configuration initialization" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Non-normative: Initialize the circulating supply configuration for an ASA\nAuthorization: ASA Manager Address.", "events": [], "recommendations": {} }, { "name": "set_not_circulating_address", "args": [ { "type": "uint64", "name": "asset", "desc": "ASA ID of the circulating supply" }, { "type": "address", "name": "address", "desc": "Address to assign to the non-circulating supply label to" }, { "type": "string", "name": "label", "desc": "Not-circulating supply label selector" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Non-normative: Set non-circulating supply addresses\nAuthorization: ASA Manager Address.", "events": [], "recommendations": {} }, { "name": "delete_config", "args": [ { "type": "uint64", "name": "asset", "desc": "The ASA ID to delete the circulating supply configuration for" } ], "returns": { "type": "uint64", "desc": "MBR (in microALGO) for the circulating supply configuration deletion" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Non-normative: Delete the circulating supply configuration for an ASA\nAuthorization: ASA Manager Address.", "events": [], "recommendations": {} }, { "name": "get_config", "args": [ { "type": "uint64", "name": "asset", "desc": "The ASA ID to get the circulating supply configuration for" } ], "returns": { "type": "(address,address,address,address,address)", "struct": "CirculatingSupplyConfig", "desc": "ASA circulating supply configuration" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "desc": "Non-normative: Get ASA circulating supply configuration.", "events": [], "recommendations": {} }, { "name": "arc62_get_circulating_supply", "args": [ { "type": "uint64", "name": "asset_id", "desc": "ASA ID of the circulating supply" } ], "returns": { "type": "uint64", "desc": "ASA circulating supply" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "desc": "Get ASA circulating supply.", "events": [], "recommendations": {} }, { "name": "extra_resources", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Non-normative: Placeholder method to acquire AVM extra resources.", "events": [], "recommendations": {} }, { "name": "withdraw_balance_excess", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "desc": "Non-normative: Method to withdraw balance excess due to accidental deposits\n(it should never happen if deposits match exactly the required MBR. Deleted config MBR is not included in the excess, since it is immediately returned on delete).", "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "desc": "\n Singleton Application providing ARC-62 getter for ASA Circulating Supply\n ", "networks": {}, "state": { "schema": { "global": { "ints": 0, "bytes": 0 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": {}, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": { "circulating_supply": { "keyType": "uint64", "valueType": "CirculatingSupplyConfig", "prefix": "" } } } }, "bareActions": { "create": [ "NoOp" ], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 265 ], "errorMessage": "Address is not opted-in the ASA" }, { "pc": [ 114 ], "errorMessage": "Circulating supply config already exists for this ASA" }, { "pc": [ 257, 410, 478, 505 ], "errorMessage": "Circulating supply config does not exist for this ASA" }, { "pc": [ 381 ], "errorMessage": "Invalid ARC-54 burning address" }, { "pc": [ 192 ], "errorMessage": "Invalid circulating supply config MBR amount" }, { "pc": [ 122 ], "errorMessage": "Invalid circulating supply config MBR receiver" }, { "pc": [ 325 ], "errorMessage": "Invalid label" }, { "pc": [ 376 ], "errorMessage": "The ASA must not have a clawback address" }, { "pc": [ 106, 247, 426 ], "errorMessage": "Unauthorized" }, { "pc": [ 127, 183, 431, 439, 773, 778 ], "errorMessage": "account funded" }, { "pc": [ 711, 719, 729, 739, 749, 764 ], "errorMessage": "account opted into asset" }, { "pc": [ 104, 245, 424, 527, 539, 686, 760 ], "errorMessage": "asset exists" }, { "pc": [ 552, 579, 606, 633, 659 ], "errorMessage": "check self.circulating_supply entry exists" }, { "pc": [ 142, 150, 159, 168, 178, 331, 338, 346, 353, 384 ], "errorMessage": "index out of bounds" }, { "pc": [ 227 ], "errorMessage": "invalid array length header" }, { "pc": [ 235 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 221 ], "errorMessage": "invalid number of bytes for arc4.static_array" }, { "pc": [ 86, 208, 399, 471, 494 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ 97 ], "errorMessage": "transaction type is pay" } ], "pcOffsetMethod": "cblocks" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDEyCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgOCAzMgogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1IFRNUExfQVJDNTRfQlVSTl9BRERSRVNTCiAgICAvLyBzbWFydF9jb250cmFjdHMvY2lyY3VsYXRpbmdfc3VwcGx5L2NvbnRyYWN0LnB5OjM4CiAgICAvLyBjbGFzcyBDaXJjdWxhdGluZ1N1cHBseShBcmM2MkludGVyZmFjZSwgYXZtX3ZlcnNpb249MTIpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAMTYKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydAogICAgcHVzaGJ5dGVzcyAweDA4ZGVlZTdlIDB4YTgzZjI5ODkgMHg0Y2I2ZDNkYyAweGJkMGIzNDVlIDB4NWNjMmM1MzUgMHgwMDU2ZDljMSAweGI5MmUyNjdhIC8vIG1ldGhvZCAiaW5pdF9jb25maWcodWludDY0LHBheSl1aW50NjQiLCBtZXRob2QgInNldF9ub3RfY2lyY3VsYXRpbmdfYWRkcmVzcyh1aW50NjQsYWRkcmVzcyxzdHJpbmcpdm9pZCIsIG1ldGhvZCAiZGVsZXRlX2NvbmZpZyh1aW50NjQpdWludDY0IiwgbWV0aG9kICJnZXRfY29uZmlnKHVpbnQ2NCkoYWRkcmVzcyxhZGRyZXNzLGFkZHJlc3MsYWRkcmVzcyxhZGRyZXNzKSIsIG1ldGhvZCAiYXJjNjJfZ2V0X2NpcmN1bGF0aW5nX3N1cHBseSh1aW50NjQpdWludDY0IiwgbWV0aG9kICJleHRyYV9yZXNvdXJjZXMoKXZvaWQiLCBtZXRob2QgIndpdGhkcmF3X2JhbGFuY2VfZXhjZXNzKCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggaW5pdF9jb25maWcgc2V0X25vdF9jaXJjdWxhdGluZ19hZGRyZXNzIGRlbGV0ZV9jb25maWcgZ2V0X2NvbmZpZyBhcmM2Ml9nZXRfY2lyY3VsYXRpbmdfc3VwcGx5IG1haW5fZXh0cmFfcmVzb3VyY2VzX3JvdXRlQDExIHdpdGhkcmF3X2JhbGFuY2VfZXhjZXNzCiAgICBlcnIKCm1haW5fZXh0cmFfcmVzb3VyY2VzX3JvdXRlQDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weToyNDIKICAgIC8vIEBhYmltZXRob2QKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAMTY6CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgJiYKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5jaXJjdWxhdGluZ19zdXBwbHkuY29udHJhY3QuQ2lyY3VsYXRpbmdTdXBwbHkuaW5pdF9jb25maWdbcm91dGluZ10oKSAtPiB2b2lkOgppbml0X2NvbmZpZzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jaXJjdWxhdGluZ19zdXBwbHkvY29udHJhY3QucHk6NDYKICAgIC8vIEBhYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18xIC8vIHBheQogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIHBheQogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weTo2MQogICAgLy8gVHhuLnNlbmRlciA9PSBhc3NldC5tYW5hZ2VyCiAgICB0eG4gU2VuZGVyCiAgICBkaWcgMgogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldE1hbmFnZXIKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvY2lyY3VsYXRpbmdfc3VwcGx5L2NvbnRyYWN0LnB5OjU5LTYyCiAgICAvLyAjIFByZWNvbmRpdGlvbnMKICAgIC8vIGFzc2VydCAoCiAgICAvLyAgICAgVHhuLnNlbmRlciA9PSBhc3NldC5tYW5hZ2VyCiAgICAvLyApLCBlcnIuVU5BVVRIT1JJWkVEICAjIEltcGxpY2l0IEFTQSBleGlzdGVuY2UgY2hlY2sKICAgIGFzc2VydCAvLyBVbmF1dGhvcml6ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jaXJjdWxhdGluZ19zdXBwbHkvY29udHJhY3QucHk6NjMKICAgIC8vIGFzc2VydCBhc3NldCBub3QgaW4gc2VsZi5jaXJjdWxhdGluZ19zdXBwbHksIGVyci5DT05GSUdfRVhJU1RTCiAgICBzd2FwCiAgICBpdG9iCiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIENpcmN1bGF0aW5nIHN1cHBseSBjb25maWcgYWxyZWFkeSBleGlzdHMgZm9yIHRoaXMgQVNBCiAgICAvLyBzbWFydF9jb250cmFjdHMvY2lyY3VsYXRpbmdfc3VwcGx5L2NvbnRyYWN0LnB5OjY1CiAgICAvLyBtYnJfcGF5bWVudC5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICBkaWcgMQogICAgZ3R4bnMgUmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weTo2NC02NgogICAgLy8gYXNzZXJ0ICgKICAgIC8vICAgICBtYnJfcGF5bWVudC5yZWNlaXZlciA9PSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzCiAgICAvLyApLCBlcnIuSU5WQUxJRF9NQlJfUkVDRUlWRVIKICAgIGFzc2VydCAvLyBJbnZhbGlkIGNpcmN1bGF0aW5nIHN1cHBseSBjb25maWcgTUJSIHJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY2lyY3VsYXRpbmdfc3VwcGx5L2NvbnRyYWN0LnB5OjY4LTY5CiAgICAvLyAjIEluaXRpYWxpemUgQVNBIENpcmN1bGF0aW5nIFN1cHBseSBDb25maWd1cmF0aW9uCiAgICAvLyBtYnJfaSA9IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MubWluX2JhbGFuY2UKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weTo3MC03MgogICAgLy8gX2V4aXN0cyA9IHNlbGYuY2lyY3VsYXRpbmdfc3VwcGx5LmJveChhc3NldCkuY3JlYXRlKAogICAgLy8gICAgIHNpemU9c2l6ZV9vZihDaXJjdWxhdGluZ1N1cHBseUNvbmZpZykKICAgIC8vICkKICAgIGRpZyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY2lyY3VsYXRpbmdfc3VwcGx5L2NvbnRyYWN0LnB5OjcxCiAgICAvLyBzaXplPXNpemVfb2YoQ2lyY3VsYXRpbmdTdXBwbHlDb25maWcpCiAgICBwdXNoaW50IDE2MAogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weTo3MC03MgogICAgLy8gX2V4aXN0cyA9IHNlbGYuY2lyY3VsYXRpbmdfc3VwcGx5LmJveChhc3NldCkuY3JlYXRlKAogICAgLy8gICAgIHNpemU9c2l6ZV9vZihDaXJjdWxhdGluZ1N1cHBseUNvbmZpZykKICAgIC8vICkKICAgIGJveF9jcmVhdGUKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weTo3MwogICAgLy8gc2VsZi5jaXJjdWxhdGluZ19zdXBwbHlbYXNzZXRdLmJ1cm5lZF9hZGRyID0gR2xvYmFsLnplcm9fYWRkcmVzcwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICBkaWcgMgogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgYm94X3JlcGxhY2UgLy8gb24gZXJyb3I6IGluZGV4IG91dCBvZiBib3VuZHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jaXJjdWxhdGluZ19zdXBwbHkvY29udHJhY3QucHk6NzQKICAgIC8vIHNlbGYuY2lyY3VsYXRpbmdfc3VwcGx5W2Fzc2V0XS5jdXN0b21fMV9hZGRyID0gR2xvYmFsLnplcm9fYWRkcmVzcwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICBkaWcgMgogICAgaW50Y18zIC8vIDMyCiAgICB1bmNvdmVyIDIKICAgIGJveF9yZXBsYWNlIC8vIG9uIGVycm9yOiBpbmRleCBvdXQgb2YgYm91bmRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY2lyY3VsYXRpbmdfc3VwcGx5L2NvbnRyYWN0LnB5Ojc1CiAgICAvLyBzZWxmLmNpcmN1bGF0aW5nX3N1cHBseVthc3NldF0uY3VzdG9tXzJfYWRkciA9IEdsb2JhbC56ZXJvX2FkZHJlc3MKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgZGlnIDIKICAgIHB1c2hpbnQgNjQKICAgIHVuY292ZXIgMgogICAgYm94X3JlcGxhY2UgLy8gb24gZXJyb3I6IGluZGV4IG91dCBvZiBib3VuZHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jaXJjdWxhdGluZ19zdXBwbHkvY29udHJhY3QucHk6NzYKICAgIC8vIHNlbGYuY2lyY3VsYXRpbmdfc3VwcGx5W2Fzc2V0XS5jdXN0b21fM19hZGRyID0gR2xvYmFsLnplcm9fYWRkcmVzcwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICBkaWcgMgogICAgcHVzaGludCA5NgogICAgdW5jb3ZlciAyCiAgICBib3hfcmVwbGFjZSAvLyBvbiBlcnJvcjogaW5kZXggb3V0IG9mIGJvdW5kcwogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weTo3NwogICAgLy8gc2VsZi5jaXJjdWxhdGluZ19zdXBwbHlbYXNzZXRdLmN1c3RvbV80X2FkZHIgPSBHbG9iYWwuemVyb19hZGRyZXNzCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgIHVuY292ZXIgMgogICAgcHVzaGludCAxMjgKICAgIHVuY292ZXIgMgogICAgYm94X3JlcGxhY2UgLy8gb24gZXJyb3I6IGluZGV4IG91dCBvZiBib3VuZHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jaXJjdWxhdGluZ19zdXBwbHkvY29udHJhY3QucHk6NzktODAKICAgIC8vICMgUG9zdGNvbmRpdGlvbnMKICAgIC8vIG1icl9kZWx0YV9hbW91bnQgPSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLm1pbl9iYWxhbmNlIC0gbWJyX2kKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgc3dhcAogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weTo4MQogICAgLy8gYXNzZXJ0IG1icl9wYXltZW50LmFtb3VudCA+PSBtYnJfZGVsdGFfYW1vdW50LCBlcnIuSU5WQUxJRF9NQlJfQU1PVU5UCiAgICBzd2FwCiAgICBndHhucyBBbW91bnQKICAgIGRpZyAxCiAgICA+PQogICAgYXNzZXJ0IC8vIEludmFsaWQgY2lyY3VsYXRpbmcgc3VwcGx5IGNvbmZpZyBNQlIgYW1vdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvY2lyY3VsYXRpbmdfc3VwcGx5L2NvbnRyYWN0LnB5OjQ2CiAgICAvLyBAYWJpbWV0aG9kCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzLmNpcmN1bGF0aW5nX3N1cHBseS5jb250cmFjdC5DaXJjdWxhdGluZ1N1cHBseS5zZXRfbm90X2NpcmN1bGF0aW5nX2FkZHJlc3Nbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRfbm90X2NpcmN1bGF0aW5nX2FkZHJlc3M6CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weTo4NQogICAgLy8gQGFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY2lyY3VsYXRpbmdfc3VwcGx5L2NvbnRyYWN0LnB5Ojk4LTk5CiAgICAvLyAjIFByZWNvbmRpdGlvbnMKICAgIC8vIGFzc2VydCBUeG4uc2VuZGVyID09IGFzc2V0Lm1hbmFnZXIsIGVyci5VTkFVVEhPUklaRUQKICAgIHR4biBTZW5kZXIKICAgIGRpZyAzCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0TWFuYWdlcgogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBVbmF1dGhvcml6ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jaXJjdWxhdGluZ19zdXBwbHkvY29udHJhY3QucHk6MTAwCiAgICAvLyBhc3NlcnQgYXNzZXQgaW4gc2VsZi5jaXJjdWxhdGluZ19zdXBwbHksIGVyci5DT05GSUdfTk9UX0VYSVNUUwogICAgZGlnIDIKICAgIGl0b2IKICAgIGR1cAogICAgY292ZXIgNAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gQ2lyY3VsYXRpbmcgc3VwcGx5IGNvbmZpZyBkb2VzIG5vdCBleGlzdCBmb3IgdGhpcyBBU0EKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jaXJjdWxhdGluZ19zdXBwbHkvY29udHJhY3QucHk6MTAxCiAgICAvLyBhc3NlcnQgYWRkcmVzcy5pc19vcHRlZF9pbihhc3NldCksIGVyci5OT1RfT1BURURfSU4KICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBBZGRyZXNzIGlzIG5vdCBvcHRlZC1pbiB0aGUgQVNBCiAgICAvLyBzbWFydF9jb250cmFjdHMvY2lyY3VsYXRpbmdfc3VwcGx5L2NvbnRyYWN0LnB5OjEwNQogICAgLy8gY2FzZSBTdHJpbmcoY2ZnLkJVUk5FRCk6ICAjIEZJWE1FOiBwdXlhcHkgYnVnIHJlcXVpcmVzIGV4cGxpY2l0IFN0cmluZygpCiAgICBwdXNoYnl0ZXNzICJidXJuZWQiICJjdXN0b21fMSIgImN1c3RvbV8yIiAiY3VzdG9tXzMiICJjdXN0b21fNCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jaXJjdWxhdGluZ19zdXBwbHkvY29udHJhY3QucHk6MTAzLTEyMAogICAgLy8gIyBFZmZlY3RzCiAgICAvLyBtYXRjaCBsYWJlbDoKICAgIC8vICAgICBjYXNlIFN0cmluZyhjZmcuQlVSTkVEKTogICMgRklYTUU6IHB1eWFweSBidWcgcmVxdWlyZXMgZXhwbGljaXQgU3RyaW5nKCkKICAgIC8vICAgICAgICAgYXNzZXJ0IF9pc19hcmM1NF9jb21wbGlhbnQoYXNzZXQpLCBlcnIuQVNBX05PVF9BUkM1NF9DT01QTElBTlQKICAgIC8vICAgICAgICAgYXNzZXJ0IGFkZHJlc3MgPT0gVGVtcGxhdGVWYXJbQWNjb3VudF0oCiAgICAvLyAgICAgICAgICAgICBBUkM1NF9CVVJOX0FERFJFU1MKICAgIC8vICAgICAgICAgKSwgZXJyLklOVkFMSURfQlVSTklOR19BRERSRVNTCiAgICAvLyAgICAgICAgIHNlbGYuY2lyY3VsYXRpbmdfc3VwcGx5W2Fzc2V0XS5idXJuZWRfYWRkciA9IGFkZHJlc3MKICAgIC8vICAgICBjYXNlIGNmZy5DVVNUT01fMToKICAgIC8vICAgICAgICAgc2VsZi5jaXJjdWxhdGluZ19zdXBwbHlbYXNzZXRdLmN1c3RvbV8xX2FkZHIgPSBhZGRyZXNzCiAgICAvLyAgICAgY2FzZSBjZmcuQ1VTVE9NXzI6CiAgICAvLyAgICAgICAgIHNlbGYuY2lyY3VsYXRpbmdfc3VwcGx5W2Fzc2V0XS5jdXN0b21fMl9hZGRyID0gYWRkcmVzcwogICAgLy8gICAgIGNhc2UgY2ZnLkNVU1RPTV8zOgogICAgLy8gICAgICAgICBzZWxmLmNpcmN1bGF0aW5nX3N1cHBseVthc3NldF0uY3VzdG9tXzNfYWRkciA9IGFkZHJlc3MKICAgIC8vICAgICBjYXNlIGNmZy5DVVNUT01fNDoKICAgIC8vICAgICAgICAgc2VsZi5jaXJjdWxhdGluZ19zdXBwbHlbYXNzZXRdLmN1c3RvbV80X2FkZHIgPSBhZGRyZXNzCiAgICAvLyAgICAgY2FzZSBfOgogICAgLy8gICAgICAgICBvcC5lcnIoZXJyLklOVkFMSURfTEFCRUwpCiAgICB1bmNvdmVyIDUKICAgIG1hdGNoIHNldF9ub3RfY2lyY3VsYXRpbmdfYWRkcmVzc19zd2l0Y2hfY2FzZV8wQDIgc2V0X25vdF9jaXJjdWxhdGluZ19hZGRyZXNzX3N3aXRjaF9jYXNlXzFAMyBzZXRfbm90X2NpcmN1bGF0aW5nX2FkZHJlc3Nfc3dpdGNoX2Nhc2VfMkA0IHNldF9ub3RfY2lyY3VsYXRpbmdfYWRkcmVzc19zd2l0Y2hfY2FzZV8zQDUgc2V0X25vdF9jaXJjdWxhdGluZ19hZGRyZXNzX3N3aXRjaF9jYXNlXzRANgogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weToxMjAKICAgIC8vIG9wLmVycihlcnIuSU5WQUxJRF9MQUJFTCkKICAgIGVyciAvLyBJbnZhbGlkIGxhYmVsCgpzZXRfbm90X2NpcmN1bGF0aW5nX2FkZHJlc3Nfc3dpdGNoX2Nhc2VfNEA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weToxMTgKICAgIC8vIHNlbGYuY2lyY3VsYXRpbmdfc3VwcGx5W2Fzc2V0XS5jdXN0b21fNF9hZGRyID0gYWRkcmVzcwogICAgcHVzaGludCAxMjgKICAgIHVuY292ZXIgMgogICAgYm94X3JlcGxhY2UgLy8gb24gZXJyb3I6IGluZGV4IG91dCBvZiBib3VuZHMKCnNldF9ub3RfY2lyY3VsYXRpbmdfYWRkcmVzc19zd2l0Y2hfY2FzZV9uZXh0QDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY2lyY3VsYXRpbmdfc3VwcGx5L2NvbnRyYWN0LnB5Ojg1CiAgICAvLyBAYWJpbWV0aG9kCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgpzZXRfbm90X2NpcmN1bGF0aW5nX2FkZHJlc3Nfc3dpdGNoX2Nhc2VfM0A1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weToxMTYKICAgIC8vIHNlbGYuY2lyY3VsYXRpbmdfc3VwcGx5W2Fzc2V0XS5jdXN0b21fM19hZGRyID0gYWRkcmVzcwogICAgcHVzaGludCA5NgogICAgdW5jb3ZlciAyCiAgICBib3hfcmVwbGFjZSAvLyBvbiBlcnJvcjogaW5kZXggb3V0IG9mIGJvdW5kcwogICAgYiBzZXRfbm90X2NpcmN1bGF0aW5nX2FkZHJlc3Nfc3dpdGNoX2Nhc2VfbmV4dEA4CgpzZXRfbm90X2NpcmN1bGF0aW5nX2FkZHJlc3Nfc3dpdGNoX2Nhc2VfMkA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weToxMTQKICAgIC8vIHNlbGYuY2lyY3VsYXRpbmdfc3VwcGx5W2Fzc2V0XS5jdXN0b21fMl9hZGRyID0gYWRkcmVzcwogICAgcHVzaGludCA2NAogICAgdW5jb3ZlciAyCiAgICBib3hfcmVwbGFjZSAvLyBvbiBlcnJvcjogaW5kZXggb3V0IG9mIGJvdW5kcwogICAgYiBzZXRfbm90X2NpcmN1bGF0aW5nX2FkZHJlc3Nfc3dpdGNoX2Nhc2VfbmV4dEA4CgpzZXRfbm90X2NpcmN1bGF0aW5nX2FkZHJlc3Nfc3dpdGNoX2Nhc2VfMUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weToxMTIKICAgIC8vIHNlbGYuY2lyY3VsYXRpbmdfc3VwcGx5W2Fzc2V0XS5jdXN0b21fMV9hZGRyID0gYWRkcmVzcwogICAgaW50Y18zIC8vIDMyCiAgICB1bmNvdmVyIDIKICAgIGJveF9yZXBsYWNlIC8vIG9uIGVycm9yOiBpbmRleCBvdXQgb2YgYm91bmRzCiAgICBiIHNldF9ub3RfY2lyY3VsYXRpbmdfYWRkcmVzc19zd2l0Y2hfY2FzZV9uZXh0QDgKCnNldF9ub3RfY2lyY3VsYXRpbmdfYWRkcmVzc19zd2l0Y2hfY2FzZV8wQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY2lyY3VsYXRpbmdfc3VwcGx5L2NvbnRyYWN0LnB5OjM0CiAgICAvLyBjbGF3YmFjaywgZXhpc3RzID0gb3AuQXNzZXRQYXJhbXNHZXQuYXNzZXRfY2xhd2JhY2soYXNhKQogICAgZGlnIDIKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRDbGF3YmFjawogICAgc3dhcAogICAgYnVyeSA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvY2lyY3VsYXRpbmdfc3VwcGx5L2NvbnRyYWN0LnB5OjM1CiAgICAvLyByZXR1cm4gZXhpc3RzIGFuZCBjbGF3YmFjayA9PSBHbG9iYWwuemVyb19hZGRyZXNzCiAgICBieiBzZXRfbm90X2NpcmN1bGF0aW5nX2FkZHJlc3NfYm9vbF9mYWxzZUAxMgogICAgZGlnIDMKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgPT0KICAgIGJ6IHNldF9ub3RfY2lyY3VsYXRpbmdfYWRkcmVzc19ib29sX2ZhbHNlQDEyCiAgICBpbnRjXzEgLy8gMQoKc2V0X25vdF9jaXJjdWxhdGluZ19hZGRyZXNzX2Jvb2xfbWVyZ2VAMTM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY2lyY3VsYXRpbmdfc3VwcGx5L2NvbnRyYWN0LnB5OjEwNgogICAgLy8gYXNzZXJ0IF9pc19hcmM1NF9jb21wbGlhbnQoYXNzZXQpLCBlcnIuQVNBX05PVF9BUkM1NF9DT01QTElBTlQKICAgIGFzc2VydCAvLyBUaGUgQVNBIG11c3Qgbm90IGhhdmUgYSBjbGF3YmFjayBhZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY2lyY3VsYXRpbmdfc3VwcGx5L2NvbnRyYWN0LnB5OjEwNy0xMDkKICAgIC8vIGFzc2VydCBhZGRyZXNzID09IFRlbXBsYXRlVmFyW0FjY291bnRdKAogICAgLy8gICAgIEFSQzU0X0JVUk5fQUREUkVTUwogICAgLy8gKSwgZXJyLklOVkFMSURfQlVSTklOR19BRERSRVNTCiAgICBzd2FwCiAgICBkdXAKICAgIGJ5dGVjXzEgLy8gVE1QTF9BUkM1NF9CVVJOX0FERFJFU1MKICAgID09CiAgICBhc3NlcnQgLy8gSW52YWxpZCBBUkMtNTQgYnVybmluZyBhZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY2lyY3VsYXRpbmdfc3VwcGx5L2NvbnRyYWN0LnB5OjExMAogICAgLy8gc2VsZi5jaXJjdWxhdGluZ19zdXBwbHlbYXNzZXRdLmJ1cm5lZF9hZGRyID0gYWRkcmVzcwogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIGJveF9yZXBsYWNlIC8vIG9uIGVycm9yOiBpbmRleCBvdXQgb2YgYm91bmRzCiAgICBiIHNldF9ub3RfY2lyY3VsYXRpbmdfYWRkcmVzc19zd2l0Y2hfY2FzZV9uZXh0QDgKCnNldF9ub3RfY2lyY3VsYXRpbmdfYWRkcmVzc19ib29sX2ZhbHNlQDEyOgogICAgaW50Y18wIC8vIDAKICAgIGIgc2V0X25vdF9jaXJjdWxhdGluZ19hZGRyZXNzX2Jvb2xfbWVyZ2VAMTMKCgovLyBzbWFydF9jb250cmFjdHMuY2lyY3VsYXRpbmdfc3VwcGx5LmNvbnRyYWN0LkNpcmN1bGF0aW5nU3VwcGx5LmRlbGV0ZV9jb25maWdbcm91dGluZ10oKSAtPiB2b2lkOgpkZWxldGVfY29uZmlnOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weToxMjIKICAgIC8vIEBhYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cG4gMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weToxMzQtMTM1CiAgICAvLyAjIFByZWNvbmRpdGlvbnMKICAgIC8vIGFzc2VydCBhc3NldCBpbiBzZWxmLmNpcmN1bGF0aW5nX3N1cHBseSwgZXJyLkNPTkZJR19OT1RfRVhJU1RTCiAgICBpdG9iCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIENpcmN1bGF0aW5nIHN1cHBseSBjb25maWcgZG9lcyBub3QgZXhpc3QgZm9yIHRoaXMgQVNBCiAgICAvLyBzbWFydF9jb250cmFjdHMvY2lyY3VsYXRpbmdfc3VwcGx5L2NvbnRyYWN0LnB5OjI4CiAgICAvLyBfY3JlYXRvciwgZXhpc3RzID0gb3AuQXNzZXRQYXJhbXNHZXQuYXNzZXRfY3JlYXRvcihhc2EpCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY2lyY3VsYXRpbmdfc3VwcGx5L2NvbnRyYWN0LnB5OjEzNgogICAgLy8gaWYgX2FzYV9leGlzdHMoYXNzZXQpOgogICAgYnogZGVsZXRlX2NvbmZpZ19hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jaXJjdWxhdGluZ19zdXBwbHkvY29udHJhY3QucHk6MTM3CiAgICAvLyBhc3NlcnQgVHhuLnNlbmRlciA9PSBhc3NldC5tYW5hZ2VyLCBlcnIuVU5BVVRIT1JJWkVECiAgICB0eG4gU2VuZGVyCiAgICBkaWcgMgogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldE1hbmFnZXIKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gVW5hdXRob3JpemVkCgpkZWxldGVfY29uZmlnX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jaXJjdWxhdGluZ19zdXBwbHkvY29udHJhY3QucHk6MTM5LTE0MAogICAgLy8gIyBEZWxldGUgQVNBIENpcmN1bGF0aW5nIFN1cHBseSBDb25maWd1cmF0aW9uCiAgICAvLyBtYnJfaSA9IEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MubWluX2JhbGFuY2UKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weToxNDEKICAgIC8vIGRlbCBzZWxmLmNpcmN1bGF0aW5nX3N1cHBseVthc3NldF0KICAgIHN3YXAKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weToxNDIKICAgIC8vIG1icl9kZWx0YV9hbW91bnQgPSBtYnJfaSAtIEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MubWluX2JhbGFuY2UKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weToxNDQtMTQ1CiAgICAvLyAjIFJlZnVuZCBNQlIKICAgIC8vIGl0eG4uUGF5bWVudChyZWNlaXZlcj1UeG4uc2VuZGVyLCBhbW91bnQ9bWJyX2RlbHRhX2Ftb3VudCkuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIHR4biBTZW5kZXIKICAgIGRpZyAxCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgaW50Y18xIC8vIHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weToxMjIKICAgIC8vIEBhYmltZXRob2QKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuY2lyY3VsYXRpbmdfc3VwcGx5LmNvbnRyYWN0LkNpcmN1bGF0aW5nU3VwcGx5LmdldF9jb25maWdbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRfY29uZmlnOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weToxNDkKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jaXJjdWxhdGluZ19zdXBwbHkvY29udHJhY3QucHk6MTYwCiAgICAvLyBhc3NlcnQgYXNzZXQgaW4gc2VsZi5jaXJjdWxhdGluZ19zdXBwbHksIGVyci5DT05GSUdfTk9UX0VYSVNUUwogICAgaXRvYgogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBDaXJjdWxhdGluZyBzdXBwbHkgY29uZmlnIGRvZXMgbm90IGV4aXN0IGZvciB0aGlzIEFTQQogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weToxNjEKICAgIC8vIHJldHVybiBzZWxmLmNpcmN1bGF0aW5nX3N1cHBseVthc3NldF0KICAgIGJveF9nZXQKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weToxNDkKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMuY2lyY3VsYXRpbmdfc3VwcGx5LmNvbnRyYWN0LkNpcmN1bGF0aW5nU3VwcGx5LmFyYzYyX2dldF9jaXJjdWxhdGluZ19zdXBwbHlbcm91dGluZ10oKSAtPiB2b2lkOgphcmM2Ml9nZXRfY2lyY3VsYXRpbmdfc3VwcGx5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weToxNjMKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cG4gMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weToxNzYtMTc3CiAgICAvLyAjIFByZWNvbmRpdGlvbnMKICAgIC8vIGFzc2VydCBhc3NldCBpbiBzZWxmLmNpcmN1bGF0aW5nX3N1cHBseSwgZXJyLkNPTkZJR19OT1RfRVhJU1RTCiAgICBpdG9iCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIENpcmN1bGF0aW5nIHN1cHBseSBjb25maWcgZG9lcyBub3QgZXhpc3QgZm9yIHRoaXMgQVNBCiAgICAvLyBzbWFydF9jb250cmFjdHMvY2lyY3VsYXRpbmdfc3VwcGx5L2NvbnRyYWN0LnB5OjI4CiAgICAvLyBfY3JlYXRvciwgZXhpc3RzID0gb3AuQXNzZXRQYXJhbXNHZXQuYXNzZXRfY3JlYXRvcihhc2EpCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY2lyY3VsYXRpbmdfc3VwcGx5L2NvbnRyYWN0LnB5OjE3OS0xODAKICAgIC8vICMgRWZmZWN0cwogICAgLy8gaWYgbm90IF9hc2FfZXhpc3RzKGFzc2V0KToKICAgIGJueiBhcmM2Ml9nZXRfY2lyY3VsYXRpbmdfc3VwcGx5X2Vsc2VfYm9keUAzCiAgICBwb3BuIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jaXJjdWxhdGluZ19zdXBwbHkvY29udHJhY3QucHk6MTgxCiAgICAvLyBjaXJjdWxhdGluZ19zdXBwbHkgPSBVSW50NjQoMCkKICAgIGludGNfMCAvLyAwCgphcmM2Ml9nZXRfY2lyY3VsYXRpbmdfc3VwcGx5X2FmdGVyX2lmX2Vsc2VAMjg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY2lyY3VsYXRpbmdfc3VwcGx5L2NvbnRyYWN0LnB5OjE2MwogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKYXJjNjJfZ2V0X2NpcmN1bGF0aW5nX3N1cHBseV9lbHNlX2JvZHlAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jaXJjdWxhdGluZ19zdXBwbHkvY29udHJhY3QucHk6MTg1CiAgICAvLyBpZiBhc3NldC5yZXNlcnZlID09IEdsb2JhbC56ZXJvX2FkZHJlc3MKICAgIGRpZyAxCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0UmVzZXJ2ZQogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weToxODUtMTg2CiAgICAvLyBpZiBhc3NldC5yZXNlcnZlID09IEdsb2JhbC56ZXJvX2FkZHJlc3MKICAgIC8vIG9yIG5vdCBhc3NldC5yZXNlcnZlLmlzX29wdGVkX2luKGFzc2V0KQogICAgYm56IGFyYzYyX2dldF9jaXJjdWxhdGluZ19zdXBwbHlfdGVybmFyeV90cnVlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jaXJjdWxhdGluZ19zdXBwbHkvY29udHJhY3QucHk6MTg2CiAgICAvLyBvciBub3QgYXNzZXQucmVzZXJ2ZS5pc19vcHRlZF9pbihhc3NldCkKICAgIGRpZyAxCiAgICBkdXAKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRSZXNlcnZlCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBzd2FwCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGJ1cnkgMQogICAgYm56IGFyYzYyX2dldF9jaXJjdWxhdGluZ19zdXBwbHlfdGVybmFyeV9mYWxzZUA2CgphcmM2Ml9nZXRfY2lyY3VsYXRpbmdfc3VwcGx5X3Rlcm5hcnlfdHJ1ZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weToxODQKICAgIC8vIFVJbnQ2NCgwKQogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKCmFyYzYyX2dldF9jaXJjdWxhdGluZ19zdXBwbHlfdGVybmFyeV9tZXJnZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weToxOTAKICAgIC8vIGJ1cm5lZF9hZGRyID0gc2VsZi5jaXJjdWxhdGluZ19zdXBwbHlbYXNzZXRdLmJ1cm5lZF9hZGRyCiAgICBkdXAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmNpcmN1bGF0aW5nX3N1cHBseSBlbnRyeSBleGlzdHMKICAgIGV4dHJhY3QgMCAzMgogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY2lyY3VsYXRpbmdfc3VwcGx5L2NvbnRyYWN0LnB5OjE5MwogICAgLy8gaWYgYnVybmVkX2FkZHIgPT0gR2xvYmFsLnplcm9fYWRkcmVzcwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weToxOTMtMTk0CiAgICAvLyBpZiBidXJuZWRfYWRkciA9PSBHbG9iYWwuemVyb19hZGRyZXNzCiAgICAvLyBvciBub3QgYnVybmVkX2FkZHIuaXNfb3B0ZWRfaW4oYXNzZXQpCiAgICBibnogYXJjNjJfZ2V0X2NpcmN1bGF0aW5nX3N1cHBseV90ZXJuYXJ5X3RydWVAOQogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weToxOTQKICAgIC8vIG9yIG5vdCBidXJuZWRfYWRkci5pc19vcHRlZF9pbihhc3NldCkKICAgIGR1cAogICAgZGlnIDQKICAgIGFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQogICAgYnVyeSAxCiAgICBibnogYXJjNjJfZ2V0X2NpcmN1bGF0aW5nX3N1cHBseV90ZXJuYXJ5X2ZhbHNlQDEwCgphcmM2Ml9nZXRfY2lyY3VsYXRpbmdfc3VwcGx5X3Rlcm5hcnlfdHJ1ZUA5OgogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvY2lyY3VsYXRpbmdfc3VwcGx5L2NvbnRyYWN0LnB5OjE5MgogICAgLy8gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgY292ZXIgMgoKYXJjNjJfZ2V0X2NpcmN1bGF0aW5nX3N1cHBseV90ZXJuYXJ5X21lcmdlQDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weToxOTgKICAgIC8vIGN1c3RvbV8xX2FkZHIgPSBzZWxmLmNpcmN1bGF0aW5nX3N1cHBseVthc3NldF0uY3VzdG9tXzFfYWRkcgogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5jaXJjdWxhdGluZ19zdXBwbHkgZW50cnkgZXhpc3RzCiAgICBleHRyYWN0IDMyIDMyCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jaXJjdWxhdGluZ19zdXBwbHkvY29udHJhY3QucHk6MjAxCiAgICAvLyBpZiBjdXN0b21fMV9hZGRyID09IEdsb2JhbC56ZXJvX2FkZHJlc3MKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jaXJjdWxhdGluZ19zdXBwbHkvY29udHJhY3QucHk6MjAxLTIwMgogICAgLy8gaWYgY3VzdG9tXzFfYWRkciA9PSBHbG9iYWwuemVyb19hZGRyZXNzCiAgICAvLyBvciBub3QgY3VzdG9tXzFfYWRkci5pc19vcHRlZF9pbihhc3NldCkKICAgIGJueiBhcmM2Ml9nZXRfY2lyY3VsYXRpbmdfc3VwcGx5X3Rlcm5hcnlfdHJ1ZUAxMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weToyMDIKICAgIC8vIG9yIG5vdCBjdXN0b21fMV9hZGRyLmlzX29wdGVkX2luKGFzc2V0KQogICAgZHVwCiAgICBkaWcgNQogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBidXJ5IDEKICAgIGJueiBhcmM2Ml9nZXRfY2lyY3VsYXRpbmdfc3VwcGx5X3Rlcm5hcnlfZmFsc2VAMTQKCmFyYzYyX2dldF9jaXJjdWxhdGluZ19zdXBwbHlfdGVybmFyeV90cnVlQDEzOgogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvY2lyY3VsYXRpbmdfc3VwcGx5L2NvbnRyYWN0LnB5OjIwMAogICAgLy8gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgY292ZXIgNAoKYXJjNjJfZ2V0X2NpcmN1bGF0aW5nX3N1cHBseV90ZXJuYXJ5X21lcmdlQDE1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weToyMDYKICAgIC8vIGN1c3RvbV8yX2FkZHIgPSBzZWxmLmNpcmN1bGF0aW5nX3N1cHBseVthc3NldF0uY3VzdG9tXzJfYWRkcgogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5jaXJjdWxhdGluZ19zdXBwbHkgZW50cnkgZXhpc3RzCiAgICBleHRyYWN0IDY0IDMyCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jaXJjdWxhdGluZ19zdXBwbHkvY29udHJhY3QucHk6MjA5CiAgICAvLyBpZiBjdXN0b21fMl9hZGRyID09IEdsb2JhbC56ZXJvX2FkZHJlc3MKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jaXJjdWxhdGluZ19zdXBwbHkvY29udHJhY3QucHk6MjA5LTIxMAogICAgLy8gaWYgY3VzdG9tXzJfYWRkciA9PSBHbG9iYWwuemVyb19hZGRyZXNzCiAgICAvLyBvciBub3QgY3VzdG9tXzJfYWRkci5pc19vcHRlZF9pbihhc3NldCkKICAgIGJueiBhcmM2Ml9nZXRfY2lyY3VsYXRpbmdfc3VwcGx5X3Rlcm5hcnlfdHJ1ZUAxNwogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weToyMTAKICAgIC8vIG9yIG5vdCBjdXN0b21fMl9hZGRyLmlzX29wdGVkX2luKGFzc2V0KQogICAgZHVwCiAgICBkaWcgNQogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBidXJ5IDEKICAgIGJueiBhcmM2Ml9nZXRfY2lyY3VsYXRpbmdfc3VwcGx5X3Rlcm5hcnlfZmFsc2VAMTgKCmFyYzYyX2dldF9jaXJjdWxhdGluZ19zdXBwbHlfdGVybmFyeV90cnVlQDE3OgogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvY2lyY3VsYXRpbmdfc3VwcGx5L2NvbnRyYWN0LnB5OjIwOAogICAgLy8gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgY292ZXIgNQoKYXJjNjJfZ2V0X2NpcmN1bGF0aW5nX3N1cHBseV90ZXJuYXJ5X21lcmdlQDE5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weToyMTQKICAgIC8vIGN1c3RvbV8zX2FkZHIgPSBzZWxmLmNpcmN1bGF0aW5nX3N1cHBseVthc3NldF0uY3VzdG9tXzNfYWRkcgogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5jaXJjdWxhdGluZ19zdXBwbHkgZW50cnkgZXhpc3RzCiAgICBleHRyYWN0IDk2IDMyCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jaXJjdWxhdGluZ19zdXBwbHkvY29udHJhY3QucHk6MjE3CiAgICAvLyBpZiBjdXN0b21fM19hZGRyID09IEdsb2JhbC56ZXJvX2FkZHJlc3MKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jaXJjdWxhdGluZ19zdXBwbHkvY29udHJhY3QucHk6MjE3LTIxOAogICAgLy8gaWYgY3VzdG9tXzNfYWRkciA9PSBHbG9iYWwuemVyb19hZGRyZXNzCiAgICAvLyBvciBub3QgY3VzdG9tXzNfYWRkci5pc19vcHRlZF9pbihhc3NldCkKICAgIGJueiBhcmM2Ml9nZXRfY2lyY3VsYXRpbmdfc3VwcGx5X3Rlcm5hcnlfdHJ1ZUAyMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weToyMTgKICAgIC8vIG9yIG5vdCBjdXN0b21fM19hZGRyLmlzX29wdGVkX2luKGFzc2V0KQogICAgZHVwCiAgICBkaWcgNQogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBidXJ5IDEKICAgIGJueiBhcmM2Ml9nZXRfY2lyY3VsYXRpbmdfc3VwcGx5X3Rlcm5hcnlfZmFsc2VAMjIKCmFyYzYyX2dldF9jaXJjdWxhdGluZ19zdXBwbHlfdGVybmFyeV90cnVlQDIxOgogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvY2lyY3VsYXRpbmdfc3VwcGx5L2NvbnRyYWN0LnB5OjIxNgogICAgLy8gVUludDY0KDApCiAgICBpbnRjXzAgLy8gMAogICAgY292ZXIgNgoKYXJjNjJfZ2V0X2NpcmN1bGF0aW5nX3N1cHBseV90ZXJuYXJ5X21lcmdlQDIzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weToyMjIKICAgIC8vIGN1c3RvbV80X2FkZHIgPSBzZWxmLmNpcmN1bGF0aW5nX3N1cHBseVthc3NldF0uY3VzdG9tXzRfYWRkcgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuY2lyY3VsYXRpbmdfc3VwcGx5IGVudHJ5IGV4aXN0cwogICAgZXh0cmFjdCAxMjggMzIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weToyMjUKICAgIC8vIGlmIGN1c3RvbV80X2FkZHIgPT0gR2xvYmFsLnplcm9fYWRkcmVzcwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weToyMjUtMjI2CiAgICAvLyBpZiBjdXN0b21fNF9hZGRyID09IEdsb2JhbC56ZXJvX2FkZHJlc3MKICAgIC8vIG9yIG5vdCBjdXN0b21fNF9hZGRyLmlzX29wdGVkX2luKGFzc2V0KQogICAgYm56IGFyYzYyX2dldF9jaXJjdWxhdGluZ19zdXBwbHlfdGVybmFyeV90cnVlQDI1CiAgICAvLyBzbWFydF9jb250cmFjdHMvY2lyY3VsYXRpbmdfc3VwcGx5L2NvbnRyYWN0LnB5OjIyNgogICAgLy8gb3Igbm90IGN1c3RvbV80X2FkZHIuaXNfb3B0ZWRfaW4oYXNzZXQpCiAgICBkdXAKICAgIGRpZyA0CiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGJ1cnkgMQogICAgYm56IGFyYzYyX2dldF9jaXJjdWxhdGluZ19zdXBwbHlfdGVybmFyeV9mYWxzZUAyNgoKYXJjNjJfZ2V0X2NpcmN1bGF0aW5nX3N1cHBseV90ZXJuYXJ5X3RydWVAMjU6CiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jaXJjdWxhdGluZ19zdXBwbHkvY29udHJhY3QucHk6MjI0CiAgICAvLyBVSW50NjQoMCkKICAgIGludGNfMCAvLyAwCgphcmM2Ml9nZXRfY2lyY3VsYXRpbmdfc3VwcGx5X3Rlcm5hcnlfbWVyZ2VAMjc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY2lyY3VsYXRpbmdfc3VwcGx5L2NvbnRyYWN0LnB5OjIzMQogICAgLy8gYXNzZXQudG90YWwKICAgIHVuY292ZXIgMwogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFRvdGFsCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY2lyY3VsYXRpbmdfc3VwcGx5L2NvbnRyYWN0LnB5OjIzMS0yMzIKICAgIC8vIGFzc2V0LnRvdGFsCiAgICAvLyAtIHJlc2VydmVfYmFsYW5jZQogICAgdW5jb3ZlciAyCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY2lyY3VsYXRpbmdfc3VwcGx5L2NvbnRyYWN0LnB5OjIzMS0yMzMKICAgIC8vIGFzc2V0LnRvdGFsCiAgICAvLyAtIHJlc2VydmVfYmFsYW5jZQogICAgLy8gLSBidXJuZWRfYmFsYW5jZQogICAgdW5jb3ZlciAyCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY2lyY3VsYXRpbmdfc3VwcGx5L2NvbnRyYWN0LnB5OjIzMS0yMzQKICAgIC8vIGFzc2V0LnRvdGFsCiAgICAvLyAtIHJlc2VydmVfYmFsYW5jZQogICAgLy8gLSBidXJuZWRfYmFsYW5jZQogICAgLy8gLSBjdXN0b21fYmFsYW5jZV8xCiAgICB1bmNvdmVyIDIKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jaXJjdWxhdGluZ19zdXBwbHkvY29udHJhY3QucHk6MjMxLTIzNQogICAgLy8gYXNzZXQudG90YWwKICAgIC8vIC0gcmVzZXJ2ZV9iYWxhbmNlCiAgICAvLyAtIGJ1cm5lZF9iYWxhbmNlCiAgICAvLyAtIGN1c3RvbV9iYWxhbmNlXzEKICAgIC8vIC0gY3VzdG9tX2JhbGFuY2VfMgogICAgdW5jb3ZlciAyCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY2lyY3VsYXRpbmdfc3VwcGx5L2NvbnRyYWN0LnB5OjIzMS0yMzYKICAgIC8vIGFzc2V0LnRvdGFsCiAgICAvLyAtIHJlc2VydmVfYmFsYW5jZQogICAgLy8gLSBidXJuZWRfYmFsYW5jZQogICAgLy8gLSBjdXN0b21fYmFsYW5jZV8xCiAgICAvLyAtIGN1c3RvbV9iYWxhbmNlXzIKICAgIC8vIC0gY3VzdG9tX2JhbGFuY2VfMwogICAgdW5jb3ZlciAyCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY2lyY3VsYXRpbmdfc3VwcGx5L2NvbnRyYWN0LnB5OjIzMS0yMzcKICAgIC8vIGFzc2V0LnRvdGFsCiAgICAvLyAtIHJlc2VydmVfYmFsYW5jZQogICAgLy8gLSBidXJuZWRfYmFsYW5jZQogICAgLy8gLSBjdXN0b21fYmFsYW5jZV8xCiAgICAvLyAtIGN1c3RvbV9iYWxhbmNlXzIKICAgIC8vIC0gY3VzdG9tX2JhbGFuY2VfMwogICAgLy8gLSBjdXN0b21fYmFsYW5jZV80CiAgICBzd2FwCiAgICAtCiAgICBiIGFyYzYyX2dldF9jaXJjdWxhdGluZ19zdXBwbHlfYWZ0ZXJfaWZfZWxzZUAyOAoKYXJjNjJfZ2V0X2NpcmN1bGF0aW5nX3N1cHBseV90ZXJuYXJ5X2ZhbHNlQDI2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weToyMjcKICAgIC8vIGVsc2UgYXNzZXQuYmFsYW5jZShjdXN0b21fNF9hZGRyKQogICAgZGlnIDMKICAgIGFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQogICAgYXNzZXJ0IC8vIGFjY291bnQgb3B0ZWQgaW50byBhc3NldAogICAgYiBhcmM2Ml9nZXRfY2lyY3VsYXRpbmdfc3VwcGx5X3Rlcm5hcnlfbWVyZ2VAMjcKCmFyYzYyX2dldF9jaXJjdWxhdGluZ19zdXBwbHlfdGVybmFyeV9mYWxzZUAyMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jaXJjdWxhdGluZ19zdXBwbHkvY29udHJhY3QucHk6MjE5CiAgICAvLyBlbHNlIGFzc2V0LmJhbGFuY2UoY3VzdG9tXzNfYWRkcikKICAgIGRpZyA0CiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGFzc2VydCAvLyBhY2NvdW50IG9wdGVkIGludG8gYXNzZXQKICAgIGNvdmVyIDYKICAgIGIgYXJjNjJfZ2V0X2NpcmN1bGF0aW5nX3N1cHBseV90ZXJuYXJ5X21lcmdlQDIzCgphcmM2Ml9nZXRfY2lyY3VsYXRpbmdfc3VwcGx5X3Rlcm5hcnlfZmFsc2VAMTg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY2lyY3VsYXRpbmdfc3VwcGx5L2NvbnRyYWN0LnB5OjIxMQogICAgLy8gZWxzZSBhc3NldC5iYWxhbmNlKGN1c3RvbV8yX2FkZHIpCiAgICBkaWcgNAogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBhc3NlcnQgLy8gYWNjb3VudCBvcHRlZCBpbnRvIGFzc2V0CiAgICBjb3ZlciA1CiAgICBiIGFyYzYyX2dldF9jaXJjdWxhdGluZ19zdXBwbHlfdGVybmFyeV9tZXJnZUAxOQoKYXJjNjJfZ2V0X2NpcmN1bGF0aW5nX3N1cHBseV90ZXJuYXJ5X2ZhbHNlQDE0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weToyMDMKICAgIC8vIGVsc2UgYXNzZXQuYmFsYW5jZShjdXN0b21fMV9hZGRyKQogICAgZGlnIDQKICAgIGFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQogICAgYXNzZXJ0IC8vIGFjY291bnQgb3B0ZWQgaW50byBhc3NldAogICAgY292ZXIgNAogICAgYiBhcmM2Ml9nZXRfY2lyY3VsYXRpbmdfc3VwcGx5X3Rlcm5hcnlfbWVyZ2VAMTUKCmFyYzYyX2dldF9jaXJjdWxhdGluZ19zdXBwbHlfdGVybmFyeV9mYWxzZUAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jaXJjdWxhdGluZ19zdXBwbHkvY29udHJhY3QucHk6MTk1CiAgICAvLyBlbHNlIGFzc2V0LmJhbGFuY2UoYnVybmVkX2FkZHIpCiAgICBkaWcgMwogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBhc3NlcnQgLy8gYWNjb3VudCBvcHRlZCBpbnRvIGFzc2V0CiAgICBjb3ZlciAyCiAgICBiIGFyYzYyX2dldF9jaXJjdWxhdGluZ19zdXBwbHlfdGVybmFyeV9tZXJnZUAxMQoKYXJjNjJfZ2V0X2NpcmN1bGF0aW5nX3N1cHBseV90ZXJuYXJ5X2ZhbHNlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY2lyY3VsYXRpbmdfc3VwcGx5L2NvbnRyYWN0LnB5OjE4NwogICAgLy8gZWxzZSBhc3NldC5iYWxhbmNlKGFzc2V0LnJlc2VydmUpCiAgICBkaWcgMQogICAgZHVwCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0UmVzZXJ2ZQogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgc3dhcAogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBhc3NlcnQgLy8gYWNjb3VudCBvcHRlZCBpbnRvIGFzc2V0CiAgICBzd2FwCiAgICBiIGFyYzYyX2dldF9jaXJjdWxhdGluZ19zdXBwbHlfdGVybmFyeV9tZXJnZUA3CgoKLy8gc21hcnRfY29udHJhY3RzLmNpcmN1bGF0aW5nX3N1cHBseS5jb250cmFjdC5DaXJjdWxhdGluZ1N1cHBseS53aXRoZHJhd19iYWxhbmNlX2V4Y2Vzc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CndpdGhkcmF3X2JhbGFuY2VfZXhjZXNzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weToyNTgKICAgIC8vIEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MuYmFsYW5jZQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQogICAgYXNzZXJ0IC8vIGFjY291bnQgZnVuZGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY2lyY3VsYXRpbmdfc3VwcGx5L2NvbnRyYWN0LnB5OjI1OQogICAgLy8gLSBHbG9iYWwuY3VycmVudF9hcHBsaWNhdGlvbl9hZGRyZXNzLm1pbl9iYWxhbmNlCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jaXJjdWxhdGluZ19zdXBwbHkvY29udHJhY3QucHk6MjU4LTI1OQogICAgLy8gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcy5iYWxhbmNlCiAgICAvLyAtIEdsb2JhbC5jdXJyZW50X2FwcGxpY2F0aW9uX2FkZHJlc3MubWluX2JhbGFuY2UKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jaXJjdWxhdGluZ19zdXBwbHkvY29udHJhY3QucHk6MjYxLTI2NAogICAgLy8gaXR4bi5QYXltZW50KAogICAgLy8gICAgIHJlY2VpdmVyPUdsb2JhbC5jcmVhdG9yX2FkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50PWV4Y2Vzc19iYWxhbmNlLAogICAgLy8gKS5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NpcmN1bGF0aW5nX3N1cHBseS9jb250cmFjdC5weToyNjIKICAgIC8vIHJlY2VpdmVyPUdsb2JhbC5jcmVhdG9yX2FkZHJlc3MsCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvY2lyY3VsYXRpbmdfc3VwcGx5L2NvbnRyYWN0LnB5OjI2MQogICAgLy8gaXR4bi5QYXltZW50KAogICAgaW50Y18xIC8vIHBheQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY2lyY3VsYXRpbmdfc3VwcGx5L2NvbnRyYWN0LnB5OjI2MS0yNjQKICAgIC8vIGl0eG4uUGF5bWVudCgKICAgIC8vICAgICByZWNlaXZlcj1HbG9iYWwuY3JlYXRvcl9hZGRyZXNzLAogICAgLy8gICAgIGFtb3VudD1leGNlc3NfYmFsYW5jZSwKICAgIC8vICkuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY2lyY3VsYXRpbmdfc3VwcGx5L2NvbnRyYWN0LnB5OjI0OQogICAgLy8gQGFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEyCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "DCAEAAEIICYCBBUffHUAMRtBAEIxGRREMRhEggcECN7ufgSoPymJBEy209wEvQs0XgRcwsU1BABW2cEEuS4mejYaAI4HAAsAhAFEAYwBowABAr0AI0MxGRQxGBQQQzYaAUkVJBJEFzEWIwlJOBAjEkQxAEsCcQdEEkRMFkm9RQEUREsBOAcyChJEMgpzAURLAYGgAblIMgNLAiJPArsyA0sCJU8CuzIDSwKBQE8CuzIDSwKBYE8CuzIDTwKBgAFPArsyCnMBREwJTDgISwEPRBYoTFCwI0MiNhoBSRUkEkQXSTYaAklOAkkVJRJENhoDSSJZgQIISwEVEkRXAgAxAEsDcQdEEkRLAhZJTgS9RQFETE8CcABFAUSCBQZidXJuZWQIY3VzdG9tXzEIY3VzdG9tXzIIY3VzdG9tXzMIY3VzdG9tXzRPBY4FACAAGQARAAkAAQCBgAFPArsjQ4FgTwK7Qv/2gUBPArtC/+4lTwK7Qv/nSwJxCkxFBUEAFUsDMgMSQQANI0RMSSkSRCJMu0L/yCJC//A2GgFJFSQSRBdHAhZJTgK9RQFEcQtFAUEACTEASwJxB0QSRDIKcwFETLxIMgpzAUQJsTEASwGyCLIHI7IQIrIBsxYoTFCwI0M2GgFJFSQSRBcWSb1FAUS+SChMULAjQzYaAUkVJBJEF0cCFklOAr1FAURxC0UBQAAKRgIiFihMULAjQ0sBcQhEMgMSQAAOSwFJcQhETHAARQFAAM8iTEm+RFcAIEkyAxJAAApJSwRwAEUBQACsSCJOAkm+RFcgIEkyAxJAAApJSwVwAEUBQACHSCJOBEm+RFdAIEkyAxJAAApJSwVwAEUBQABiSCJOBUm+RFdgIEkyAxJAAApJSwVwAEUBQAA9SCJOBr5EV4AgSTIDEkAACklLBHAARQFAABtIIk8DcQBETwIJTwIJTwIJTwIJTwIJTAlC/0FLA3AAREL/30sEcABETgZC/71LBHAARE4FQv+YSwRwAEROBEL/c0sDcABETgJC/05LAUlxCERMcABETEL/JTIKcwBEMgpzAUQJsTIJsgeyCCOyECKyAbMjQw==", "clear": "DIEBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 9, "patch": 0 } }, "events": [], "templateVariables": { "ARC54_BURN_ADDRESS": { "type": "address" } } }