{ "name": "StructDemo", "structs": { "ObjectF8C529BB": [ { "name": "x", "type": "uint64" }, { "name": "y", "type": "uint64" } ], "PluginInfo": [ { "name": "lastValidRound", "type": "uint64" }, { "name": "cooldown", "type": "uint64" }, { "name": "lastCalled", "type": "uint64" }, { "name": "adminPrivileges", "type": "bool" }, { "name": "methods", "type": "(byte[4],uint64,uint64)[]" } ], "Vector": [ { "name": "x", "type": "uint64" }, { "name": "y", "type": "uint64" } ] }, "methods": [ { "name": "testVectorCreationAndEquality", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "addVectors", "args": [ { "type": "(uint64,uint64)", "struct": "Vector", "name": "v1" }, { "type": "(uint64,uint64)", "struct": "Vector", "name": "v2" } ], "returns": { "type": "(uint64,uint64)", "struct": "Vector" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "mutateVector", "args": [ { "type": "(uint64,uint64)", "struct": "Vector", "name": "v1" }, { "type": "uint64", "name": "newX" }, { "type": "uint64", "name": "newY" } ], "returns": { "type": "(uint64,uint64)", "struct": "Vector" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "implicitCastingAndSpreading", "args": [ { "type": "(uint64,uint64)", "struct": "Vector", "name": "v1" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "toAndFromBytes", "args": [ { "type": "(uint64,uint64)", "struct": "Vector", "name": "v1" } ], "returns": { "type": "(uint64,uint64)", "struct": "Vector" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "toNative", "args": [ { "type": "(uint64,uint64)", "struct": "Vector", "name": "v1" } ], "returns": { "type": "(uint64,uint64)", "struct": "ObjectF8C529BB" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "getPlugin", "args": [ { "type": "string", "name": "key" } ], "returns": { "type": "(uint64,uint64,uint64,bool,(byte[4],uint64,uint64)[])", "struct": "PluginInfo" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "getMain", "args": [], "returns": { "type": "(uint64,uint64,uint64,bool,(byte[4],uint64,uint64)[])", "struct": "PluginInfo" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "setLastCalled", "args": [ { "type": "string", "name": "key" }, { "type": "uint64", "name": "index" }, { "type": "uint64", "name": "lastCalled" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "setPlugin", "args": [ { "type": "string", "name": "key" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 0, "bytes": 0 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": {}, "local": {}, "box": { "plugin": { "keyType": "AVMString", "valueType": "PluginInfo", "key": "bWFpbg==" } } }, "maps": { "global": {}, "local": {}, "box": { "plugins": { "keyType": "AVMString", "valueType": "PluginInfo", "prefix": "cGx1Z2lucw==" } } } }, "bareActions": { "create": [ "NoOp" ], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 678, 698 ], "errorMessage": "Box must have value" }, { "pc": [ 686, 706 ], "errorMessage": "Last called not zero" }, { "pc": [ 739 ], "errorMessage": "index out of bounds" }, { "pc": [ 380, 425, 476 ], "errorMessage": "invalid array length header" }, { "pc": [ 252, 260, 281, 324, 340, 361 ], "errorMessage": "invalid number of bytes for Vector" }, { "pc": [ 390, 435, 486 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 289, 297, 446, 455 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ 764 ], "errorMessage": "invalid size" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCA4IDEgMTYKICAgIGJ5dGVjYmxvY2sgMHggMHgxNTFmN2M3NSAicGx1Z2lucyIgMHhhNzgwMDBkZQogICAgYiBtYWluX2Jsb2NrQDAKCm1haW5fYmxvY2tAMDoKICAgIGIgbWFpbl9ibG9ja0AxCgptYWluX2Jsb2NrQDE6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoxMAogICAgLy8gY2xhc3MgU3RydWN0RGVtbyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzAgLy8gMAogICAgIT0KICAgIGJ6IG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDE3CiAgICBiIG1haW5fYWJpX3JvdXRpbmdAMgoKbWFpbl9hYmlfcm91dGluZ0AyOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MTAKICAgIC8vIGNsYXNzIFN0cnVjdERlbW8gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIGFzc2VydAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGludGNfMCAvLyAwCiAgICAhPQogICAgYnogbWFpbl9jcmVhdGVfTm9PcEAxNQogICAgYiBtYWluX2NhbGxfTm9PcEAzCgptYWluX2NhbGxfTm9PcEAzOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MTAKICAgIC8vIGNsYXNzIFN0cnVjdERlbW8gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBwdXNoYnl0ZXMgMHg4OTM4OGRkZCAvLyBtZXRob2QgInRlc3RWZWN0b3JDcmVhdGlvbkFuZEVxdWFsaXR5KCl2b2lkIgogICAgcHVzaGJ5dGVzIDB4ZWYzMjJkNmQgLy8gbWV0aG9kICJhZGRWZWN0b3JzKCh1aW50NjQsdWludDY0KSwodWludDY0LHVpbnQ2NCkpKHVpbnQ2NCx1aW50NjQpIgogICAgcHVzaGJ5dGVzIDB4MDI0NTg4MDcgLy8gbWV0aG9kICJtdXRhdGVWZWN0b3IoKHVpbnQ2NCx1aW50NjQpLHVpbnQ2NCx1aW50NjQpKHVpbnQ2NCx1aW50NjQpIgogICAgcHVzaGJ5dGVzIDB4Y2I4MWRlYjggLy8gbWV0aG9kICJpbXBsaWNpdENhc3RpbmdBbmRTcHJlYWRpbmcoKHVpbnQ2NCx1aW50NjQpKXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhmNzlkNmM0NiAvLyBtZXRob2QgInRvQW5kRnJvbUJ5dGVzKCh1aW50NjQsdWludDY0KSkodWludDY0LHVpbnQ2NCkiCiAgICBwdXNoYnl0ZXMgMHg5MTkxNTU0NSAvLyBtZXRob2QgInRvTmF0aXZlKCh1aW50NjQsdWludDY0KSkodWludDY0LHVpbnQ2NCkiCiAgICBwdXNoYnl0ZXMgMHgzODE0ZjkyYSAvLyBtZXRob2QgImdldFBsdWdpbihzdHJpbmcpKHVpbnQ2NCx1aW50NjQsdWludDY0LGJvb2wsKGJ5dGVbNF0sdWludDY0LHVpbnQ2NClbXSkiCiAgICBwdXNoYnl0ZXMgMHgwMDdhNGNiMCAvLyBtZXRob2QgImdldE1haW4oKSh1aW50NjQsdWludDY0LHVpbnQ2NCxib29sLChieXRlWzRdLHVpbnQ2NCx1aW50NjQpW10pIgogICAgcHVzaGJ5dGVzIDB4NGQyMWJjYTYgLy8gbWV0aG9kICJzZXRMYXN0Q2FsbGVkKHN0cmluZyx1aW50NjQsdWludDY0KXZvaWQiCiAgICBwdXNoYnl0ZXMgMHhhOWJjNjFmMSAvLyBtZXRob2QgInNldFBsdWdpbihzdHJpbmcpdm9pZCIKICAgIHVuY292ZXIgMTAKICAgIG1hdGNoIG1haW5fdGVzdFZlY3RvckNyZWF0aW9uQW5kRXF1YWxpdHlfcm91dGVANCBtYWluX2FkZFZlY3RvcnNfcm91dGVANSBtYWluX211dGF0ZVZlY3Rvcl9yb3V0ZUA2IG1haW5faW1wbGljaXRDYXN0aW5nQW5kU3ByZWFkaW5nX3JvdXRlQDcgbWFpbl90b0FuZEZyb21CeXRlc19yb3V0ZUA4IG1haW5fdG9OYXRpdmVfcm91dGVAOSBtYWluX2dldFBsdWdpbl9yb3V0ZUAxMCBtYWluX2dldE1haW5fcm91dGVAMTEgbWFpbl9zZXRMYXN0Q2FsbGVkX3JvdXRlQDEyIG1haW5fc2V0UGx1Z2luX3JvdXRlQDEzCiAgICBiIG1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxNAoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDE0OgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTYKCm1haW5fYWZ0ZXJfaWZfZWxzZUAxNjoKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDE4CgptYWluX2FmdGVyX2lmX2Vsc2VAMTg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoxMAogICAgLy8gY2xhc3MgU3RydWN0RGVtbyBleHRlbmRzIENvbnRyYWN0IHsKICAgIGVycgoKbWFpbl9zZXRQbHVnaW5fcm91dGVAMTM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo2OAogICAgLy8gcHVibGljIHNldFBsdWdpbihrZXk6IHN0cmluZykgewogICAgY2FsbHN1YiBzZXRQbHVnaW4KICAgIGIgbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDE0CgptYWluX3NldExhc3RDYWxsZWRfcm91dGVAMTI6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo2NAogICAgLy8gcHVibGljIHNldExhc3RDYWxsZWQoa2V5OiBzdHJpbmcsIGluZGV4OiB1aW50NjQsIGxhc3RDYWxsZWQ6IHVpbnQ2NCkgewogICAgY2FsbHN1YiBzZXRMYXN0Q2FsbGVkCiAgICBiIG1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxNAoKbWFpbl9nZXRNYWluX3JvdXRlQDExOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6NTgKICAgIC8vIHB1YmxpYyBnZXRNYWluKCkgewogICAgY2FsbHN1YiBnZXRNYWluCiAgICBiIG1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxNAoKbWFpbl9nZXRQbHVnaW5fcm91dGVAMTA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo1MgogICAgLy8gcHVibGljIGdldFBsdWdpbihrZXk6IHN0cmluZyk6IFBsdWdpbkluZm8gewogICAgY2FsbHN1YiBnZXRQbHVnaW4KICAgIGIgbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDE0CgptYWluX3RvTmF0aXZlX3JvdXRlQDk6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo0NAogICAgLy8gcHVibGljIHRvTmF0aXZlKHYxOiBWZWN0b3IpIHsKICAgIGNhbGxzdWIgdG9OYXRpdmUKICAgIGIgbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDE0CgptYWluX3RvQW5kRnJvbUJ5dGVzX3JvdXRlQDg6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czozOQogICAgLy8gcHVibGljIHRvQW5kRnJvbUJ5dGVzKHYxOiBWZWN0b3IpOiBWZWN0b3IgewogICAgY2FsbHN1YiB0b0FuZEZyb21CeXRlcwogICAgYiBtYWluX3N3aXRjaF9jYXNlX25leHRAMTQKCm1haW5faW1wbGljaXRDYXN0aW5nQW5kU3ByZWFkaW5nX3JvdXRlQDc6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czozMgogICAgLy8gcHVibGljIGltcGxpY2l0Q2FzdGluZ0FuZFNwcmVhZGluZyh2MTogVmVjdG9yKSB7CiAgICBjYWxsc3ViIGltcGxpY2l0Q2FzdGluZ0FuZFNwcmVhZGluZwogICAgYiBtYWluX3N3aXRjaF9jYXNlX25leHRAMTQKCm1haW5fbXV0YXRlVmVjdG9yX3JvdXRlQDY6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoyNgogICAgLy8gcHVibGljIG11dGF0ZVZlY3Rvcih2MTogVmVjdG9yLCBuZXdYOiBBUkM0VWludDY0LCBuZXdZOiBBUkM0VWludDY0KTogVmVjdG9yIHsKICAgIGNhbGxzdWIgbXV0YXRlVmVjdG9yCiAgICBiIG1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxNAoKbWFpbl9hZGRWZWN0b3JzX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoxOQogICAgLy8gcHVibGljIGFkZFZlY3RvcnModjE6IFZlY3RvciwgdjI6IFZlY3RvcikgewogICAgY2FsbHN1YiBhZGRWZWN0b3JzCiAgICBiIG1haW5fc3dpdGNoX2Nhc2VfbmV4dEAxNAoKbWFpbl90ZXN0VmVjdG9yQ3JlYXRpb25BbmRFcXVhbGl0eV9yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MTEKICAgIC8vIHB1YmxpYyB0ZXN0VmVjdG9yQ3JlYXRpb25BbmRFcXVhbGl0eSgpIHsKICAgIGNhbGxzdWIgdGVzdFZlY3RvckNyZWF0aW9uQW5kRXF1YWxpdHkKICAgIGIgbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDE0CgptYWluX2NyZWF0ZV9Ob09wQDE1OgogICAgYiBtYWluX2FmdGVyX2lmX2Vsc2VAMTYKCm1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDE3OgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MTAKICAgIC8vIGNsYXNzIFN0cnVjdERlbW8gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzAgLy8gTm9PcAogICAgPT0KICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBpbnRjXzAgLy8gMAogICAgPT0KICAgICYmCiAgICBhc3NlcnQKICAgIGNhbGxzdWIgX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlCiAgICBpbnRjXzIgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6OlN0cnVjdERlbW8udGVzdFZlY3RvckNyZWF0aW9uQW5kRXF1YWxpdHlbcm91dGluZ10oKSAtPiB2b2lkOgp0ZXN0VmVjdG9yQ3JlYXRpb25BbmRFcXVhbGl0eToKICAgIGIgdGVzdFZlY3RvckNyZWF0aW9uQW5kRXF1YWxpdHlfYmxvY2tAMAoKdGVzdFZlY3RvckNyZWF0aW9uQW5kRXF1YWxpdHlfYmxvY2tAMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjExCiAgICAvLyBwdWJsaWMgdGVzdFZlY3RvckNyZWF0aW9uQW5kRXF1YWxpdHkoKSB7CiAgICBjYWxsc3ViIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjpTdHJ1Y3REZW1vLnRlc3RWZWN0b3JDcmVhdGlvbkFuZEVxdWFsaXR5CiAgICBpbnRjXzIgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6OlN0cnVjdERlbW8uYWRkVmVjdG9yc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmFkZFZlY3RvcnM6CiAgICBiIGFkZFZlY3RvcnNfYmxvY2tAMAoKYWRkVmVjdG9yc19ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MTkKICAgIC8vIHB1YmxpYyBhZGRWZWN0b3JzKHYxOiBWZWN0b3IsIHYyOiBWZWN0b3IpIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMTYKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIFZlY3RvcgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAxNgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgVmVjdG9yCiAgICBjYWxsc3ViIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjpTdHJ1Y3REZW1vLmFkZFZlY3RvcnMKICAgIGJ5dGVjXzEgLy8gMHgxNTFmN2M3NQogICAgdW5jb3ZlciAxCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18yIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjpTdHJ1Y3REZW1vLm11dGF0ZVZlY3Rvcltyb3V0aW5nXSgpIC0+IHZvaWQ6Cm11dGF0ZVZlY3RvcjoKICAgIGIgbXV0YXRlVmVjdG9yX2Jsb2NrQDAKCm11dGF0ZVZlY3Rvcl9ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MjYKICAgIC8vIHB1YmxpYyBtdXRhdGVWZWN0b3IodjE6IFZlY3RvciwgbmV3WDogQVJDNFVpbnQ2NCwgbmV3WTogQVJDNFVpbnQ2NCk6IFZlY3RvciB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDE2CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBWZWN0b3IKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIHVuY292ZXIgMgogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDIKICAgIGNhbGxzdWIgdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6OlN0cnVjdERlbW8ubXV0YXRlVmVjdG9yCiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHVuY292ZXIgMQogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMiAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo6U3RydWN0RGVtby5pbXBsaWNpdENhc3RpbmdBbmRTcHJlYWRpbmdbcm91dGluZ10oKSAtPiB2b2lkOgppbXBsaWNpdENhc3RpbmdBbmRTcHJlYWRpbmc6CiAgICBiIGltcGxpY2l0Q2FzdGluZ0FuZFNwcmVhZGluZ19ibG9ja0AwCgppbXBsaWNpdENhc3RpbmdBbmRTcHJlYWRpbmdfYmxvY2tAMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjMyCiAgICAvLyBwdWJsaWMgaW1wbGljaXRDYXN0aW5nQW5kU3ByZWFkaW5nKHYxOiBWZWN0b3IpIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMTYKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIFZlY3RvcgogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo6U3RydWN0RGVtby5pbXBsaWNpdENhc3RpbmdBbmRTcHJlYWRpbmcKICAgIGludGNfMiAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo6U3RydWN0RGVtby50b0FuZEZyb21CeXRlc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnRvQW5kRnJvbUJ5dGVzOgogICAgYiB0b0FuZEZyb21CeXRlc19ibG9ja0AwCgp0b0FuZEZyb21CeXRlc19ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MzkKICAgIC8vIHB1YmxpYyB0b0FuZEZyb21CeXRlcyh2MTogVmVjdG9yKTogVmVjdG9yIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMTYKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIFZlY3RvcgogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo6U3RydWN0RGVtby50b0FuZEZyb21CeXRlcwogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICB1bmNvdmVyIDEKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzIgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6OlN0cnVjdERlbW8udG9OYXRpdmVbcm91dGluZ10oKSAtPiB2b2lkOgp0b05hdGl2ZToKICAgIGIgdG9OYXRpdmVfYmxvY2tAMAoKdG9OYXRpdmVfYmxvY2tAMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjQ0CiAgICAvLyBwdWJsaWMgdG9OYXRpdmUodjE6IFZlY3RvcikgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAxNgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgVmVjdG9yCiAgICBjYWxsc3ViIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjpTdHJ1Y3REZW1vLnRvTmF0aXZlCiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHVuY292ZXIgMQogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMiAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo6U3RydWN0RGVtby5nZXRQbHVnaW5bcm91dGluZ10oKSAtPiB2b2lkOgpnZXRQbHVnaW46CiAgICBiIGdldFBsdWdpbl9ibG9ja0AwCgpnZXRQbHVnaW5fYmxvY2tAMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjUyCiAgICAvLyBwdWJsaWMgZ2V0UGx1Z2luKGtleTogc3RyaW5nKTogUGx1Z2luSW5mbyB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzIgLy8gMQogICAgKgogICAgcHVzaGludCAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICBjYWxsc3ViIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjpTdHJ1Y3REZW1vLmdldFBsdWdpbgogICAgYnl0ZWNfMSAvLyAweDE1MWY3Yzc1CiAgICB1bmNvdmVyIDEKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzIgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6OlN0cnVjdERlbW8uZ2V0TWFpbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldE1haW46CiAgICBiIGdldE1haW5fYmxvY2tAMAoKZ2V0TWFpbl9ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6NTgKICAgIC8vIHB1YmxpYyBnZXRNYWluKCkgewogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo6U3RydWN0RGVtby5nZXRNYWluCiAgICBieXRlY18xIC8vIDB4MTUxZjdjNzUKICAgIHVuY292ZXIgMQogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMiAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo6U3RydWN0RGVtby5zZXRMYXN0Q2FsbGVkW3JvdXRpbmddKCkgLT4gdm9pZDoKc2V0TGFzdENhbGxlZDoKICAgIGIgc2V0TGFzdENhbGxlZF9ibG9ja0AwCgpzZXRMYXN0Q2FsbGVkX2Jsb2NrQDA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo2NAogICAgLy8gcHVibGljIHNldExhc3RDYWxsZWQoa2V5OiBzdHJpbmcsIGluZGV4OiB1aW50NjQsIGxhc3RDYWxsZWQ6IHVpbnQ2NCkgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18yIC8vIDEKICAgICoKICAgIHB1c2hpbnQgMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdW5jb3ZlciAyCiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMgogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo6U3RydWN0RGVtby5zZXRMYXN0Q2FsbGVkCiAgICBpbnRjXzIgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6OlN0cnVjdERlbW8uc2V0UGx1Z2luW3JvdXRpbmddKCkgLT4gdm9pZDoKc2V0UGx1Z2luOgogICAgYiBzZXRQbHVnaW5fYmxvY2tAMAoKc2V0UGx1Z2luX2Jsb2NrQDA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo2OAogICAgLy8gcHVibGljIHNldFBsdWdpbihrZXk6IHN0cmluZykgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18yIC8vIDEKICAgICoKICAgIHB1c2hpbnQgMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICBleHRyYWN0IDIgMAogICAgY2FsbHN1YiB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo6U3RydWN0RGVtby5zZXRQbHVnaW4KICAgIGludGNfMiAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo6U3RydWN0RGVtby50ZXN0VmVjdG9yQ3JlYXRpb25BbmRFcXVhbGl0eSgpIC0+IHZvaWQ6CnRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjpTdHJ1Y3REZW1vLnRlc3RWZWN0b3JDcmVhdGlvbkFuZEVxdWFsaXR5OgogICAgYiB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo6U3RydWN0RGVtby50ZXN0VmVjdG9yQ3JlYXRpb25BbmRFcXVhbGl0eV9ibG9ja0AwCgp0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo6U3RydWN0RGVtby50ZXN0VmVjdG9yQ3JlYXRpb25BbmRFcXVhbGl0eV9ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MTIKICAgIC8vIGNvbnN0IHYxID0gbmV3IFZlY3Rvcih7IHg6IG5ldyBBUkM0VWludDY0KDApLCB5OiBuZXcgQVJDNFVpbnQ2NCgwKSB9KQogICAgaW50Y18wIC8vIDAKICAgIGl0b2IKICAgIGludGNfMCAvLyAwCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgdW5jb3ZlciAxCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjEzCiAgICAvLyBsb2codjEueCkKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGludGNfMSAvLyA4CiAgICBleHRyYWN0MwogICAgbG9nCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoxNAogICAgLy8gbG9nKHYxLnkpCiAgICBkdXAKICAgIGludGNfMSAvLyA4CiAgICBpbnRjXzEgLy8gOAogICAgZXh0cmFjdDMKICAgIGxvZwogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MTUKICAgIC8vIGNvbnN0IHYyID0gbmV3IFZlY3Rvcih7IHk6IG5ldyBBUkM0VWludDY0KDApLCB4OiBuZXcgQVJDNFVpbnQ2NCgwKSB9KQogICAgaW50Y18wIC8vIDAKICAgIGl0b2IKICAgIGludGNfMCAvLyAwCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4CiAgICB1bmNvdmVyIDEKICAgIGNvbmNhdAogICAgdW5jb3ZlciAxCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjE2CiAgICAvLyBhc3NlcnQodjEgPT09IHYyKQogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6OlN0cnVjdERlbW8uYWRkVmVjdG9ycyh2MTogYnl0ZXMsIHYyOiBieXRlcykgLT4gYnl0ZXM6CnRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjpTdHJ1Y3REZW1vLmFkZFZlY3RvcnM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoxOQogICAgLy8gcHVibGljIGFkZFZlY3RvcnModjE6IFZlY3RvciwgdjI6IFZlY3RvcikgewogICAgcHJvdG8gMiAxCiAgICBiIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjpTdHJ1Y3REZW1vLmFkZFZlY3RvcnNfYmxvY2tAMAoKdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6OlN0cnVjdERlbW8uYWRkVmVjdG9yc19ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MjEKICAgIC8vIHg6IG5ldyBBUkM0VWludDY0KHYxLnguYXNVaW50NjQoKSArIHYyLnguYXNVaW50NjQoKSksCiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzEgLy8gOAogICAgZXh0cmFjdDMKICAgIGJ0b2kKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIGludGNfMSAvLyA4CiAgICBleHRyYWN0MwogICAgYnRvaQogICAgKwogICAgaXRvYgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MjIKICAgIC8vIHk6IG5ldyBBUkM0VWludDY0KHYxLnkuYXNVaW50NjQoKSArIHYyLnkuYXNVaW50NjQoKSksCiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMSAvLyA4CiAgICBpbnRjXzEgLy8gOAogICAgZXh0cmFjdDMKICAgIGJ0b2kKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18xIC8vIDgKICAgIGludGNfMSAvLyA4CiAgICBleHRyYWN0MwogICAgYnRvaQogICAgKwogICAgaXRvYgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MjAtMjMKICAgIC8vIHJldHVybiBuZXcgVmVjdG9yKHsKICAgIC8vICAgeDogbmV3IEFSQzRVaW50NjQodjEueC5hc1VpbnQ2NCgpICsgdjIueC5hc1VpbnQ2NCgpKSwKICAgIC8vICAgeTogbmV3IEFSQzRVaW50NjQodjEueS5hc1VpbnQ2NCgpICsgdjIueS5hc1VpbnQ2NCgpKSwKICAgIC8vIH0pCiAgICBieXRlY18wIC8vIDB4CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgdW5jb3ZlciAxCiAgICBjb25jYXQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjpTdHJ1Y3REZW1vLm11dGF0ZVZlY3Rvcih2MTogYnl0ZXMsIG5ld1g6IGJ5dGVzLCBuZXdZOiBieXRlcykgLT4gYnl0ZXM6CnRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjpTdHJ1Y3REZW1vLm11dGF0ZVZlY3RvcjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjI2CiAgICAvLyBwdWJsaWMgbXV0YXRlVmVjdG9yKHYxOiBWZWN0b3IsIG5ld1g6IEFSQzRVaW50NjQsIG5ld1k6IEFSQzRVaW50NjQpOiBWZWN0b3IgewogICAgcHJvdG8gMyAxCiAgICBiIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjpTdHJ1Y3REZW1vLm11dGF0ZVZlY3Rvcl9ibG9ja0AwCgp0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo6U3RydWN0RGVtby5tdXRhdGVWZWN0b3JfYmxvY2tAMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjI3CiAgICAvLyB2MS54ID0gbmV3WAogICAgZnJhbWVfZGlnIC0zCiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfZGlnIC0yCiAgICByZXBsYWNlMwogICAgZHVwCiAgICBmcmFtZV9idXJ5IC0zCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czoyOAogICAgLy8gdjEueSA9IG5ld1kKICAgIGludGNfMSAvLyA4CiAgICBmcmFtZV9kaWcgLTEKICAgIHJlcGxhY2UzCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgLTMKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjI5CiAgICAvLyByZXR1cm4gdjEKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjpTdHJ1Y3REZW1vLmltcGxpY2l0Q2FzdGluZ0FuZFNwcmVhZGluZyh2MTogYnl0ZXMpIC0+IHZvaWQ6CnRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjpTdHJ1Y3REZW1vLmltcGxpY2l0Q2FzdGluZ0FuZFNwcmVhZGluZzoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjMyCiAgICAvLyBwdWJsaWMgaW1wbGljaXRDYXN0aW5nQW5kU3ByZWFkaW5nKHYxOiBWZWN0b3IpIHsKICAgIHByb3RvIDEgMAogICAgYiB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo6U3RydWN0RGVtby5pbXBsaWNpdENhc3RpbmdBbmRTcHJlYWRpbmdfYmxvY2tAMAoKdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6OlN0cnVjdERlbW8uaW1wbGljaXRDYXN0aW5nQW5kU3ByZWFkaW5nX2Jsb2NrQDA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czozMwogICAgLy8gY29uc3QgdjIgPSBuZXcgVmVjdG9yKHYxKQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgaW50Y18xIC8vIDgKICAgIGV4dHJhY3QzCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMSAvLyA4CiAgICBpbnRjXzEgLy8gOAogICAgZXh0cmFjdDMKICAgIGJ5dGVjXzAgLy8gMHgKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICB1bmNvdmVyIDEKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6MzQKICAgIC8vIGNvbnN0IHYzID0gbmV3IFZlY3Rvcih7IC4uLnYyIH0pCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzEgLy8gOAogICAgZXh0cmFjdDMKICAgIGNvdmVyIDEKICAgIGR1cAogICAgaW50Y18xIC8vIDgKICAgIGludGNfMSAvLyA4CiAgICBleHRyYWN0MwogICAgYnl0ZWNfMCAvLyAweAogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHVuY292ZXIgMQogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czozNQogICAgLy8gYXNzZXJ0KHYxLmJ5dGVzID09PSB2Mi5ieXRlcykKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czozNgogICAgLy8gYXNzZXJ0KHYzLmJ5dGVzID09PSB2MS5ieXRlcykKICAgIGZyYW1lX2RpZyAtMQogICAgPT0KICAgIGFzc2VydAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6OlN0cnVjdERlbW8udG9BbmRGcm9tQnl0ZXModjE6IGJ5dGVzKSAtPiBieXRlczoKdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6OlN0cnVjdERlbW8udG9BbmRGcm9tQnl0ZXM6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czozOQogICAgLy8gcHVibGljIHRvQW5kRnJvbUJ5dGVzKHYxOiBWZWN0b3IpOiBWZWN0b3IgewogICAgcHJvdG8gMSAxCiAgICBiIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjpTdHJ1Y3REZW1vLnRvQW5kRnJvbUJ5dGVzX2Jsb2NrQDAKCnRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjpTdHJ1Y3REZW1vLnRvQW5kRnJvbUJ5dGVzX2Jsb2NrQDA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo0MAogICAgLy8gY29uc3QgdjFfYnl0ZXMgPSB2MS5ieXRlcwogICAgZnJhbWVfZGlnIC0xCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo0MQogICAgLy8gcmV0dXJuIGNvbnZlcnRCeXRlczxWZWN0b3I+KHYxX2J5dGVzLCB7IHN0cmF0ZWd5OiAndW5zYWZlLWNhc3QnIH0pCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo6U3RydWN0RGVtby50b05hdGl2ZSh2MTogYnl0ZXMpIC0+IGJ5dGVzOgp0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo6U3RydWN0RGVtby50b05hdGl2ZToKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjQ0CiAgICAvLyBwdWJsaWMgdG9OYXRpdmUodjE6IFZlY3RvcikgewogICAgcHJvdG8gMSAxCiAgICBiIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjpTdHJ1Y3REZW1vLnRvTmF0aXZlX2Jsb2NrQDAKCnRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjpTdHJ1Y3REZW1vLnRvTmF0aXZlX2Jsb2NrQDA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo0NQogICAgLy8gcmV0dXJuIHYxLm5hdGl2ZQogICAgZnJhbWVfZGlnIC0xCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo6U3RydWN0RGVtby5nZXRQbHVnaW4oa2V5OiBieXRlcykgLT4gYnl0ZXM6CnRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjpTdHJ1Y3REZW1vLmdldFBsdWdpbjoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjUyCiAgICAvLyBwdWJsaWMgZ2V0UGx1Z2luKGtleTogc3RyaW5nKTogUGx1Z2luSW5mbyB7CiAgICBwcm90byAxIDEKICAgIGIgdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6OlN0cnVjdERlbW8uZ2V0UGx1Z2luX2Jsb2NrQDAKCnRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjpTdHJ1Y3REZW1vLmdldFBsdWdpbl9ibG9ja0AwOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6NDgKICAgIC8vIHBsdWdpbnMgPSBCb3hNYXA8c3RyaW5nLCBQbHVnaW5JbmZvPih7IGtleVByZWZpeDogJ3BsdWdpbnMnIH0pCiAgICBieXRlY18yIC8vICJwbHVnaW5zIgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjUzCiAgICAvLyBjb25zdCB2YWx1ZSA9IGNsb25lKHRoaXMucGx1Z2lucyhrZXkpLnZhbHVlKQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjU0CiAgICAvLyBhc3NlcnQodmFsdWUubGFzdENhbGxlZC5hc1VpbnQ2NCgpID4gMCwgJ0xhc3QgY2FsbGVkIG5vdCB6ZXJvJykKICAgIGR1cAogICAgaW50Y18zIC8vIDE2CiAgICBpbnRjXzEgLy8gOAogICAgZXh0cmFjdDMKICAgIGJ0b2kKICAgIGludGNfMCAvLyAwCiAgICA+CiAgICBhc3NlcnQgLy8gTGFzdCBjYWxsZWQgbm90IHplcm8KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjU1CiAgICAvLyByZXR1cm4gdmFsdWUKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjpTdHJ1Y3REZW1vLmdldE1haW4oKSAtPiBieXRlczoKdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6OlN0cnVjdERlbW8uZ2V0TWFpbjoKICAgIGIgdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6OlN0cnVjdERlbW8uZ2V0TWFpbl9ibG9ja0AwCgp0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo6U3RydWN0RGVtby5nZXRNYWluX2Jsb2NrQDA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo1MAogICAgLy8gcGx1Z2luID0gQm94PFBsdWdpbkluZm8+KHsga2V5OiAnbWFpbicgfSkKICAgIHB1c2hieXRlcyAibWFpbiIKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjU5CiAgICAvLyBjb25zdCB2YWx1ZSA9IGNsb25lKHRoaXMucGx1Z2luLnZhbHVlKQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjYwCiAgICAvLyBhc3NlcnQodmFsdWUubGFzdENhbGxlZC5hc1VpbnQ2NCgpID4gMCwgJ0xhc3QgY2FsbGVkIG5vdCB6ZXJvJykKICAgIGR1cAogICAgaW50Y18zIC8vIDE2CiAgICBpbnRjXzEgLy8gOAogICAgZXh0cmFjdDMKICAgIGJ0b2kKICAgIGludGNfMCAvLyAwCiAgICA+CiAgICBhc3NlcnQgLy8gTGFzdCBjYWxsZWQgbm90IHplcm8KICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjYxCiAgICAvLyByZXR1cm4gdmFsdWUKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjpTdHJ1Y3REZW1vLnNldExhc3RDYWxsZWQoa2V5OiBieXRlcywgaW5kZXg6IHVpbnQ2NCwgbGFzdENhbGxlZDogdWludDY0KSAtPiB2b2lkOgp0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo6U3RydWN0RGVtby5zZXRMYXN0Q2FsbGVkOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6NjQKICAgIC8vIHB1YmxpYyBzZXRMYXN0Q2FsbGVkKGtleTogc3RyaW5nLCBpbmRleDogdWludDY0LCBsYXN0Q2FsbGVkOiB1aW50NjQpIHsKICAgIHByb3RvIDMgMAogICAgYiB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo6U3RydWN0RGVtby5zZXRMYXN0Q2FsbGVkX2Jsb2NrQDAKCnRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjpTdHJ1Y3REZW1vLnNldExhc3RDYWxsZWRfYmxvY2tAMDoKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjY1CiAgICAvLyB0aGlzLnBsdWdpbnMoa2V5KS52YWx1ZS5tZXRob2RzW2luZGV4XS5sYXN0Q2FsbGVkID0gbmV3IGFyYzQuVWludDY0KGxhc3RDYWxsZWQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjQ4CiAgICAvLyBwbHVnaW5zID0gQm94TWFwPHN0cmluZywgUGx1Z2luSW5mbz4oeyBrZXlQcmVmaXg6ICdwbHVnaW5zJyB9KQogICAgYnl0ZWNfMiAvLyAicGx1Z2lucyIKICAgIGZyYW1lX2RpZyAtMwogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo2NQogICAgLy8gdGhpcy5wbHVnaW5zKGtleSkudmFsdWUubWV0aG9kc1tpbmRleF0ubGFzdENhbGxlZCA9IG5ldyBhcmM0LlVpbnQ2NChsYXN0Q2FsbGVkKQogICAgaW50Y18wIC8vIDAKICAgIHB1c2hpbnQgMjcKICAgICsKICAgIHB1c2hpbnQgMgogICAgKwogICAgZnJhbWVfZGlnIC0yCiAgICBwdXNoaW50IDIwCiAgICAqCiAgICArCiAgICBwdXNoaW50IDEyCiAgICArCiAgICB1bmNvdmVyIDIKICAgIGJveF9yZXBsYWNlIC8vIG9uIGVycm9yOiBpbmRleCBvdXQgb2YgYm91bmRzCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo6U3RydWN0RGVtby5zZXRQbHVnaW4oa2V5OiBieXRlcykgLT4gdm9pZDoKdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6OlN0cnVjdERlbW8uc2V0UGx1Z2luOgogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6NjgKICAgIC8vIHB1YmxpYyBzZXRQbHVnaW4oa2V5OiBzdHJpbmcpIHsKICAgIHByb3RvIDEgMAogICAgYiB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo6U3RydWN0RGVtby5zZXRQbHVnaW5fYmxvY2tAMAoKdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6OlN0cnVjdERlbW8uc2V0UGx1Z2luX2Jsb2NrQDA6CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo3MAogICAgLy8gbGFzdFZhbGlkUm91bmQ6IG5ldyBhcmM0LlVpbnQ2NCgxKSwKICAgIGludGNfMiAvLyAxCiAgICBpdG9iCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo3MQogICAgLy8gY29vbGRvd246IG5ldyBhcmM0LlVpbnQ2NCgpLAogICAgaW50Y18wIC8vIDAKICAgIGl0b2IKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjcyCiAgICAvLyBsYXN0Q2FsbGVkOiBuZXcgYXJjNC5VaW50NjQoKSwKICAgIGludGNfMCAvLyAwCiAgICBpdG9iCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo3MwogICAgLy8gYWRtaW5Qcml2aWxlZ2VzOiBuZXcgYXJjNC5Cb29sKGZhbHNlKSwKICAgIHB1c2hieXRlcyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgaW50Y18wIC8vIDAKICAgIHNldGJpdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6NzYKICAgIC8vIHNlbGVjdG9yOiBuZXcgYXJjNC5TdGF0aWNCeXRlcyhtZXRob2RTZWxlY3RvcigndGVzdCgpdm9pZCcpKSwKICAgIGJ5dGVjXzMgLy8gbWV0aG9kICJ0ZXN0KCl2b2lkIgogICAgbGVuCiAgICBwdXNoaW50IDQKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBzaXplCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo3NwogICAgLy8gY29vbGRvd246IG5ldyBhcmM0LlVpbnQ2NCgxKSwKICAgIGludGNfMiAvLyAxCiAgICBpdG9iCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo3OAogICAgLy8gbGFzdENhbGxlZDogbmV3IGFyYzQuVWludDY0KDEpLAogICAgaW50Y18yIC8vIDEKICAgIGl0b2IKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjc1LTc5CiAgICAvLyBuZXcgTWV0aG9kSW5mbyh7CiAgICAvLyAgIHNlbGVjdG9yOiBuZXcgYXJjNC5TdGF0aWNCeXRlcyhtZXRob2RTZWxlY3RvcigndGVzdCgpdm9pZCcpKSwKICAgIC8vICAgY29vbGRvd246IG5ldyBhcmM0LlVpbnQ2NCgxKSwKICAgIC8vICAgbGFzdENhbGxlZDogbmV3IGFyYzQuVWludDY0KDEpLAogICAgLy8gfSksCiAgICBieXRlY18wIC8vIDB4CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo3NgogICAgLy8gc2VsZWN0b3I6IG5ldyBhcmM0LlN0YXRpY0J5dGVzKG1ldGhvZFNlbGVjdG9yKCd0ZXN0KCl2b2lkJykpLAogICAgYnl0ZWNfMyAvLyBtZXRob2QgInRlc3QoKXZvaWQiCiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo3NS03OQogICAgLy8gbmV3IE1ldGhvZEluZm8oewogICAgLy8gICBzZWxlY3RvcjogbmV3IGFyYzQuU3RhdGljQnl0ZXMobWV0aG9kU2VsZWN0b3IoJ3Rlc3QoKXZvaWQnKSksCiAgICAvLyAgIGNvb2xkb3duOiBuZXcgYXJjNC5VaW50NjQoMSksCiAgICAvLyAgIGxhc3RDYWxsZWQ6IG5ldyBhcmM0LlVpbnQ2NCgxKSwKICAgIC8vIH0pLAogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgdW5jb3ZlciAxCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjc0LTgwCiAgICAvLyBtZXRob2RzOiBuZXcgYXJjNC5EeW5hbWljQXJyYXkoCiAgICAvLyAgIG5ldyBNZXRob2RJbmZvKHsKICAgIC8vICAgICBzZWxlY3RvcjogbmV3IGFyYzQuU3RhdGljQnl0ZXMobWV0aG9kU2VsZWN0b3IoJ3Rlc3QoKXZvaWQnKSksCiAgICAvLyAgICAgY29vbGRvd246IG5ldyBhcmM0LlVpbnQ2NCgxKSwKICAgIC8vICAgICBsYXN0Q2FsbGVkOiBuZXcgYXJjNC5VaW50NjQoMSksCiAgICAvLyAgIH0pLAogICAgLy8gKSwKICAgIGludGNfMiAvLyAxCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAxCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FwcHJvdmFscy9hcmM0LXN0cnVjdC5hbGdvLnRzOjY5LTgxCiAgICAvLyB0aGlzLnBsdWdpbnMoa2V5KS52YWx1ZSA9IG5ldyBQbHVnaW5JbmZvKHsKICAgIC8vICAgbGFzdFZhbGlkUm91bmQ6IG5ldyBhcmM0LlVpbnQ2NCgxKSwKICAgIC8vICAgY29vbGRvd246IG5ldyBhcmM0LlVpbnQ2NCgpLAogICAgLy8gICBsYXN0Q2FsbGVkOiBuZXcgYXJjNC5VaW50NjQoKSwKICAgIC8vICAgYWRtaW5Qcml2aWxlZ2VzOiBuZXcgYXJjNC5Cb29sKGZhbHNlKSwKICAgIC8vICAgbWV0aG9kczogbmV3IGFyYzQuRHluYW1pY0FycmF5KAogICAgLy8gICAgIG5ldyBNZXRob2RJbmZvKHsKICAgIC8vICAgICAgIHNlbGVjdG9yOiBuZXcgYXJjNC5TdGF0aWNCeXRlcyhtZXRob2RTZWxlY3RvcigndGVzdCgpdm9pZCcpKSwKICAgIC8vICAgICAgIGNvb2xkb3duOiBuZXcgYXJjNC5VaW50NjQoMSksCiAgICAvLyAgICAgICBsYXN0Q2FsbGVkOiBuZXcgYXJjNC5VaW50NjQoMSksCiAgICAvLyAgICAgfSksCiAgICAvLyAgICksCiAgICAvLyB9KQogICAgYnl0ZWNfMCAvLyAweAogICAgdW5jb3ZlciA1CiAgICBjb25jYXQKICAgIHVuY292ZXIgNAogICAgY29uY2F0CiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHB1c2hpbnQgMjcKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBjb25jYXQKICAgIHVuY292ZXIgMQogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo0OAogICAgLy8gcGx1Z2lucyA9IEJveE1hcDxzdHJpbmcsIFBsdWdpbkluZm8+KHsga2V5UHJlZml4OiAncGx1Z2lucycgfSkKICAgIGJ5dGVjXzIgLy8gInBsdWdpbnMiCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXBwcm92YWxzL2FyYzQtc3RydWN0LmFsZ28udHM6NjktODEKICAgIC8vIHRoaXMucGx1Z2lucyhrZXkpLnZhbHVlID0gbmV3IFBsdWdpbkluZm8oewogICAgLy8gICBsYXN0VmFsaWRSb3VuZDogbmV3IGFyYzQuVWludDY0KDEpLAogICAgLy8gICBjb29sZG93bjogbmV3IGFyYzQuVWludDY0KCksCiAgICAvLyAgIGxhc3RDYWxsZWQ6IG5ldyBhcmM0LlVpbnQ2NCgpLAogICAgLy8gICBhZG1pblByaXZpbGVnZXM6IG5ldyBhcmM0LkJvb2woZmFsc2UpLAogICAgLy8gICBtZXRob2RzOiBuZXcgYXJjNC5EeW5hbWljQXJyYXkoCiAgICAvLyAgICAgbmV3IE1ldGhvZEluZm8oewogICAgLy8gICAgICAgc2VsZWN0b3I6IG5ldyBhcmM0LlN0YXRpY0J5dGVzKG1ldGhvZFNlbGVjdG9yKCd0ZXN0KCl2b2lkJykpLAogICAgLy8gICAgICAgY29vbGRvd246IG5ldyBhcmM0LlVpbnQ2NCgxKSwKICAgIC8vICAgICAgIGxhc3RDYWxsZWQ6IG5ldyBhcmM0LlVpbnQ2NCgxKSwKICAgIC8vICAgICB9KSwKICAgIC8vICAgKSwKICAgIC8vIH0pCiAgICBkdXAKICAgIGJveF9kZWwKICAgIHBvcAogICAgdW5jb3ZlciAxCiAgICBib3hfcHV0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcHByb3ZhbHMvYXJjNC1zdHJ1Y3QuYWxnby50czo6U3RydWN0RGVtby5fX2FsZ290c19fLmRlZmF1bHRDcmVhdGUoKSAtPiB2b2lkOgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGU6CiAgICBiIF9fYWxnb3RzX18uZGVmYXVsdENyZWF0ZV9ibG9ja0AwCgpfX2FsZ290c19fLmRlZmF1bHRDcmVhdGVfYmxvY2tAMDoKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBiIG1haW5fYmxvY2tAMAoKbWFpbl9ibG9ja0AwOgogICAgcHVzaGludCAxCiAgICByZXR1cm4K" }, "byteCode": { "approval": "CyAEAAgBECYEAAQVH3x1B3BsdWdpbnMEp4AA3kIAAEIAADEbIhNBALJCAAAxGSISRDEYIhNBAKBCAAA2GgCABIk4jd2ABO8yLW2ABAJFiAeABMuB3riABPedbEaABJGRVUWABDgU+SqABAB6TLCABE0hvKaABKm8YfFPCo4KAEAAOgA0AC4AKAAiABwAFgAQAApCAABCAABCAAAAiAE1Qv/ziAD8Qv/tiADpQv/niADDQv/hiACoQv/biACNQv/ViAB3Qv/PiABGQv/JiAAjQv/DiAAVQv+9Qv+9MRkiEjEYIhIQRIgCTCRDQgAAiAD/JENCAAA2GgFJFSUSRDYaAkkVJRJEiAENKU8BULAkQ0IAADYaAUkVJRJENhoCSRUjEkQ2GgNJFSMSRE8CTwJPAogBDClPAVCwJENCAAA2GgFJFSUSRIgBDiRDQgAANhoBSRUlEkSIATEpTwFQsCRDQgAANhoBSRUlEkSIASUpTwFQsCRDQgAANhoBSSJZJAuBAghLARUSRFcCAIgBDilPAVCwJENCAACIARYpTwFQsCRDQgAANhoBSSJZJAuBAghLARUSRFcCADYaAkkVIxJEFzYaA0kVIxJEF08CTwJPAogA8iRDQgAANhoBSSJZJAuBAghLARUSRFcCAIgA+CRDQgAAIhYiFihPAlBPAVBJIiNYsEkjI1iwIhYiFihPAVBPAVASRImKAgFCAACL/iIjWBeL/yIjWBcIFov+IyNYF4v/IyNYFwgWKE8CUE8BUImKAwFCAACL/SKL/l1JjP0ji/9dSYz9iYoBAEIAAIv/IiNYi/8jI1goTwJQTwFQSSIjWE4BSSMjWChPA1BPAVCL/08CEkSL/xJEiYoBAUIAAIv/iYoBAUIAAIv/iYoBAUIAACqL/1C+REklI1gXIg1EiUIAAIAEbWFpbr5ESSUjWBciDUSJigMAQgAAi/8WKov9UCKBGwiBAgiL/oEUCwiBDAhPAruJigEAQgAAJBYiFiIWgAEAIiJUKxWBBBJEJBYkFigrUE8CUE8BUCQWVwYCTwFQKE8FUE8EUE8DUE8CUIEbFlcGAlBPAVAqi/9QSbxITwG/iUIAAIk=", "clear": "C0IAAIEBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 5, "minor": 10, "patch": 0 } }, "events": [], "templateVariables": {} }