{ "name": "NestedTuples", "structs": { "Child": [ { "name": "a", "type": "uint64" }, { "name": "b", "type": "byte[]" }, { "name": "c", "type": "string" } ], "Parent": [ { "name": "foo", "type": "uint64" }, { "name": "foo_arc", "type": "uint64" }, { "name": "child", "type": "Child" } ], "ParentWithList": [ { "name": "parent", "type": "Parent" }, { "name": "children", "type": "(uint64,byte[],string)[]" } ], "SimpleTup": [ { "name": "a", "type": "uint64" }, { "name": "b", "type": "uint64" } ], "TupleWithMutable": [ { "name": "arr", "type": "uint64[]" }, { "name": "child", "type": "Child" } ] }, "methods": [ { "name": "store_tuple", "args": [ { "type": "((uint64,uint64,(uint64,byte[],string)),(uint64,byte[],string)[])", "struct": "ParentWithList", "name": "pwl" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "load_tuple", "args": [], "returns": { "type": "((uint64,uint64,(uint64,byte[],string)),(uint64,byte[],string)[])", "struct": "ParentWithList" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "store_tuple_in_box", "args": [ { "type": "(uint64,uint64)", "struct": "SimpleTup", "name": "key" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "is_tuple_in_box", "args": [ { "type": "(uint64,uint64)", "struct": "SimpleTup", "name": "key" } ], "returns": { "type": "bool" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "load_tuple_from_box", "args": [ { "type": "(uint64,uint64)", "struct": "SimpleTup", "name": "key" } ], "returns": { "type": "(uint64,uint64)", "struct": "SimpleTup" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "maybe_load_tuple_from_box", "args": [ { "type": "(uint64,uint64)", "struct": "SimpleTup", "name": "key" } ], "returns": { "type": "((uint64,uint64),bool)" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "load_tuple_from_box_or_default", "args": [ { "type": "(uint64,uint64)", "struct": "SimpleTup", "name": "key" } ], "returns": { "type": "(uint64,uint64)", "struct": "SimpleTup" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "load_tuple_from_local_state_or_default", "args": [ { "type": "string", "name": "key" } ], "returns": { "type": "(uint64,uint64)", "struct": "SimpleTup" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "mutate_local_tuple", "args": [], "returns": { "type": "(uint64[],(uint64,byte[],string))", "struct": "TupleWithMutable" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "mutate_tuple_in_storage_currently_supported_method", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "run_tests", "args": [], "returns": { "type": "bool" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "nested_tuple_params", "args": [ { "type": "(string,(byte[],(uint64)))", "name": "args" } ], "returns": { "type": "(byte[],(string,uint64))" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "named_tuple", "args": [ { "type": "(uint64,byte[],string)", "struct": "Child", "name": "args" } ], "returns": { "type": "(uint64,byte[],string)", "struct": "Child" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "nested_named_tuple_params", "args": [ { "type": "(uint64,uint64,(uint64,byte[],string))", "struct": "Parent", "name": "args" } ], "returns": { "type": "(uint64,uint64,(uint64,byte[],string))", "struct": "Parent" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 1, "bytes": 2 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "build_nested_call_count": { "keyType": "AVMString", "valueType": "AVMUint64", "key": "YnVpbGRfbmVzdGVkX2NhbGxfY291bnQ=" }, "twm": { "keyType": "AVMString", "valueType": "TupleWithMutable", "key": "dHdt" }, "pwl": { "keyType": "AVMString", "valueType": "ParentWithList", "key": "cHds" } }, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": { "box": { "keyType": "SimpleTup", "valueType": "SimpleTup", "prefix": "Ym94" } } } }, "bareActions": { "create": [ "NoOp" ], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 659 ], "errorMessage": "check self.box entry exists" }, { "pc": [ 579 ], "errorMessage": "check self.pwl exists" }, { "pc": [ 940 ], "errorMessage": "check self.twm exists" }, { "pc": [ 871 ], "errorMessage": "index access is out of bounds" }, { "pc": [ 496 ], "errorMessage": "invalid array encoding" }, { "pc": [ 425, 446, 470, 527, 548, 773, 1232, 1271, 1377, 1398, 1449, 1470 ], "errorMessage": "invalid array length header" }, { "pc": [ 780 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 1281 ], "errorMessage": "invalid number of bytes for arc4.tuple,arc4.tuple,arc4.tuple>>" }, { "pc": [ 1403 ], "errorMessage": "invalid number of bytes for test_cases.tuple_support.nested_tuples.Child" }, { "pc": [ 1478 ], "errorMessage": "invalid number of bytes for test_cases.tuple_support.nested_tuples.Parent" }, { "pc": [ 568 ], "errorMessage": "invalid number of bytes for test_cases.tuple_support.nested_tuples.ParentWithList" }, { "pc": [ 594, 626, 654, 674, 726 ], "errorMessage": "invalid number of bytes for test_cases.tuple_support.nested_tuples.SimpleTup" }, { "pc": [ 1262 ], "errorMessage": "invalid tail pointer at index 0 of ((len+uint8[]),(uint64))" }, { "pc": [ 1223 ], "errorMessage": "invalid tail pointer at index 0 of ((len+utf8[]),((len+uint8[]),(uint64)))" }, { "pc": [ 386 ], "errorMessage": "invalid tail pointer at index 0 of ((uint64,uint64,(uint64,(len+uint8[]),(len+utf8[]))),(len+(uint64,(len+uint8[]),(len+utf8[]))[]))" }, { "pc": [ 1244 ], "errorMessage": "invalid tail pointer at index 1 of ((len+utf8[]),((len+uint8[]),(uint64)))" }, { "pc": [ 464 ], "errorMessage": "invalid tail pointer at index 1 of ((uint64,uint64,(uint64,(len+uint8[]),(len+utf8[]))),(len+(uint64,(len+uint8[]),(len+utf8[]))[]))" }, { "pc": [ 417, 519, 1369, 1441 ], "errorMessage": "invalid tail pointer at index 1 of (uint64,(len+uint8[]),(len+utf8[]))" }, { "pc": [ 438, 540, 1390, 1462 ], "errorMessage": "invalid tail pointer at index 2 of (uint64,(len+uint8[]),(len+utf8[]))" }, { "pc": [ 404, 1424 ], "errorMessage": "invalid tail pointer at index 2 of (uint64,uint64,(uint64,(len+uint8[]),(len+utf8[])))" }, { "pc": [ 504 ], "errorMessage": "invalid tail pointer for (len+(uint64,(len+uint8[]),(len+utf8[]))[])" }, { "pc": [ 381, 399, 412, 433, 459, 514, 535, 1218, 1239, 1257, 1364, 1385, 1419, 1436, 1457 ], "errorMessage": "invalid tuple encoding" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDAgMiA4CiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgImJveCIgInR3bSIgImJ1aWxkX25lc3RlZF9jYWxsX2NvdW50IiAicHdsIiAweDAwMDQKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weTo1MAogICAgLy8gc2VsZi5idWlsZF9uZXN0ZWRfY2FsbF9jb3VudCA9IFVJbnQ2NCgwKQogICAgYnl0ZWNfMyAvLyAiYnVpbGRfbmVzdGVkX2NhbGxfY291bnQiCiAgICBpbnRjXzEgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weTo1MgogICAgLy8gc2VsZi50d20gPSBUdXBsZVdpdGhNdXRhYmxlKAogICAgYnl0ZWNfMiAvLyAidHdtIgogICAgcHVzaGJ5dGVzIDB4MDAwNDAwMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGMwMDBlMDAwMDAwMDAKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weTo1Mi01OQogICAgLy8gc2VsZi50d20gPSBUdXBsZVdpdGhNdXRhYmxlKAogICAgLy8gICAgIGFycj1hcmM0LkR5bmFtaWNBcnJheVthcmM0LlVJbnQ2NF0oKSwKICAgIC8vICAgICBjaGlsZD1DaGlsZCgKICAgIC8vICAgICAgICAgYT1VSW50NjQoKSwKICAgIC8vICAgICAgICAgYj1CeXRlcygpLAogICAgLy8gICAgICAgICBjPVN0cmluZygpLAogICAgLy8gICAgICksCiAgICAvLyApCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyB0dXBsZV9zdXBwb3J0L25lc3RlZF90dXBsZXMucHk6NDgKICAgIC8vIGNsYXNzIE5lc3RlZFR1cGxlcyhBUkM0Q29udHJhY3QpOgogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVAMjMKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydAogICAgcHVzaGJ5dGVzcyAweDM4M2UxZThiIDB4NjhjYmVkZDcgMHgyMjYzZmNmMSAweGJmYzM3MzM5IDB4YzY2MGJlYWEgMHhiNmMyMTVmZiAweDkwN2M5MDQyIDB4ZDUxYzcxNzQgMHhmOGNjMmI1MCAweDNkNDg2ZGIwIDB4OWU1YTNiYTcgMHhjZWEwNTIxYiAweDM3M2Y1YjI0IDB4ZWM1OTMwOTYgLy8gbWV0aG9kICJzdG9yZV90dXBsZSgoKHVpbnQ2NCx1aW50NjQsKHVpbnQ2NCxieXRlW10sc3RyaW5nKSksKHVpbnQ2NCxieXRlW10sc3RyaW5nKVtdKSl2b2lkIiwgbWV0aG9kICJsb2FkX3R1cGxlKCkoKHVpbnQ2NCx1aW50NjQsKHVpbnQ2NCxieXRlW10sc3RyaW5nKSksKHVpbnQ2NCxieXRlW10sc3RyaW5nKVtdKSIsIG1ldGhvZCAic3RvcmVfdHVwbGVfaW5fYm94KCh1aW50NjQsdWludDY0KSl2b2lkIiwgbWV0aG9kICJpc190dXBsZV9pbl9ib3goKHVpbnQ2NCx1aW50NjQpKWJvb2wiLCBtZXRob2QgImxvYWRfdHVwbGVfZnJvbV9ib3goKHVpbnQ2NCx1aW50NjQpKSh1aW50NjQsdWludDY0KSIsIG1ldGhvZCAibWF5YmVfbG9hZF90dXBsZV9mcm9tX2JveCgodWludDY0LHVpbnQ2NCkpKCh1aW50NjQsdWludDY0KSxib29sKSIsIG1ldGhvZCAibG9hZF90dXBsZV9mcm9tX2JveF9vcl9kZWZhdWx0KCh1aW50NjQsdWludDY0KSkodWludDY0LHVpbnQ2NCkiLCBtZXRob2QgImxvYWRfdHVwbGVfZnJvbV9sb2NhbF9zdGF0ZV9vcl9kZWZhdWx0KHN0cmluZykodWludDY0LHVpbnQ2NCkiLCBtZXRob2QgIm11dGF0ZV9sb2NhbF90dXBsZSgpKHVpbnQ2NFtdLCh1aW50NjQsYnl0ZVtdLHN0cmluZykpIiwgbWV0aG9kICJtdXRhdGVfdHVwbGVfaW5fc3RvcmFnZV9jdXJyZW50bHlfc3VwcG9ydGVkX21ldGhvZCgpdm9pZCIsIG1ldGhvZCAicnVuX3Rlc3RzKClib29sIiwgbWV0aG9kICJuZXN0ZWRfdHVwbGVfcGFyYW1zKChzdHJpbmcsKGJ5dGVbXSwodWludDY0KSkpKShieXRlW10sKHN0cmluZyx1aW50NjQpKSIsIG1ldGhvZCAibmFtZWRfdHVwbGUoKHVpbnQ2NCxieXRlW10sc3RyaW5nKSkodWludDY0LGJ5dGVbXSxzdHJpbmcpIiwgbWV0aG9kICJuZXN0ZWRfbmFtZWRfdHVwbGVfcGFyYW1zKCh1aW50NjQsdWludDY0LCh1aW50NjQsYnl0ZVtdLHN0cmluZykpKSh1aW50NjQsdWludDY0LCh1aW50NjQsYnl0ZVtdLHN0cmluZykpIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggc3RvcmVfdHVwbGUgbG9hZF90dXBsZSBzdG9yZV90dXBsZV9pbl9ib3ggaXNfdHVwbGVfaW5fYm94IGxvYWRfdHVwbGVfZnJvbV9ib3ggbWF5YmVfbG9hZF90dXBsZV9mcm9tX2JveCBsb2FkX3R1cGxlX2Zyb21fYm94X29yX2RlZmF1bHQgbG9hZF90dXBsZV9mcm9tX2xvY2FsX3N0YXRlX29yX2RlZmF1bHQgbXV0YXRlX2xvY2FsX3R1cGxlIG11dGF0ZV90dXBsZV9pbl9zdG9yYWdlX2N1cnJlbnRseV9zdXBwb3J0ZWRfbWV0aG9kIHJ1bl90ZXN0cyBuZXN0ZWRfdHVwbGVfcGFyYW1zIG5hbWVkX3R1cGxlIG5lc3RlZF9uYW1lZF90dXBsZV9wYXJhbXMKICAgIGVycgoKbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUAyMzoKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICAmJgogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy50dXBsZV9zdXBwb3J0Lm5lc3RlZF90dXBsZXMuZ2V0X3NlbmRlcl9pbmVmZmljaWVudGx5KCkgLT4gYnl0ZXM6CmdldF9zZW5kZXJfaW5lZmZpY2llbnRseToKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weToxODEKICAgIC8vIGxvZygiT3JkZXIgaXMgaW1wb3J0YW50IikKICAgIHB1c2hieXRlcyAiT3JkZXIgaXMgaW1wb3J0YW50IgogICAgbG9nCiAgICAvLyB0dXBsZV9zdXBwb3J0L25lc3RlZF90dXBsZXMucHk6MTgyCiAgICAvLyByZXR1cm4gVHhuLnNlbmRlcgogICAgdHhuIFNlbmRlcgogICAgcmV0c3ViCgoKLy8gdGVzdF9jYXNlcy50dXBsZV9zdXBwb3J0Lm5lc3RlZF90dXBsZXMuc2ltcGxlX3R1cChhOiB1aW50NjQsIGI6IHVpbnQ2NCkgLT4gdWludDY0LCB1aW50NjQ6CnNpbXBsZV90dXA6CiAgICAvLyB0dXBsZV9zdXBwb3J0L25lc3RlZF90dXBsZXMucHk6MTg1LTE4NgogICAgLy8gQHN1YnJvdXRpbmUoaW5saW5lPUZhbHNlKQogICAgLy8gZGVmIHNpbXBsZV90dXAoYTogVUludDY0LCBiOiBVSW50NjQpIC0+IFNpbXBsZVR1cDoKICAgIHByb3RvIDIgMgogICAgLy8gdHVwbGVfc3VwcG9ydC9uZXN0ZWRfdHVwbGVzLnB5OjE4NwogICAgLy8gbG9nKCJJJ20ganVzdCBhIHNpbXBsZSB0dXAiKQogICAgcHVzaGJ5dGVzICJJJ20ganVzdCBhIHNpbXBsZSB0dXAiCiAgICBsb2cKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weToxODgKICAgIC8vIHJldHVybiBTaW1wbGVUdXAoYSwgYikKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICByZXRzdWIKCgovLyB0ZXN0X2Nhc2VzLnR1cGxlX3N1cHBvcnQubmVzdGVkX3R1cGxlcy5lY2hvKHM6IGJ5dGVzKSAtPiBieXRlczoKZWNobzoKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weToxOTEtMTkyCiAgICAvLyBAc3Vicm91dGluZShpbmxpbmU9RmFsc2UpCiAgICAvLyBkZWYgZWNobyhzOiBTdHJpbmcpIC0+IFN0cmluZzoKICAgIHByb3RvIDEgMQogICAgLy8gdHVwbGVfc3VwcG9ydC9uZXN0ZWRfdHVwbGVzLnB5OjE5MwogICAgLy8gbG9nKCJJcyB0aGVyZSBhbiBlY2hvIGluIGhlcmU/IikKICAgIHB1c2hieXRlcyAiSXMgdGhlcmUgYW4gZWNobyBpbiBoZXJlPyIKICAgIGxvZwogICAgLy8gdHVwbGVfc3VwcG9ydC9uZXN0ZWRfdHVwbGVzLnB5OjE5NAogICAgLy8gcmV0dXJuIHMKICAgIGZyYW1lX2RpZyAtMQogICAgcmV0c3ViCgoKLy8gdGVzdF9jYXNlcy50dXBsZV9zdXBwb3J0Lm5lc3RlZF90dXBsZXMudGVzdF9uZXN0ZWRfc2luZ2xlcyhvbmU6IHVpbnQ2NCwgcmVhc3NpZ246IHVpbnQ2NCkgLT4gdm9pZDoKdGVzdF9uZXN0ZWRfc2luZ2xlczoKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weToyNDctMjQ4CiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIHRlc3RfbmVzdGVkX3NpbmdsZXMob25lOiBVSW50NjQsICosIHJlYXNzaWduOiBib29sKSAtPiBOb25lOgogICAgcHJvdG8gMiAwCiAgICAvLyB0dXBsZV9zdXBwb3J0L25lc3RlZF90dXBsZXMucHk6MjUwCiAgICAvLyAoVUludDY0KDApLCksCiAgICBpbnRjXzEgLy8gMAogICAgLy8gdHVwbGVfc3VwcG9ydC9uZXN0ZWRfdHVwbGVzLnB5OjI1MgogICAgLy8gKFVJbnQ2NCgyKSwpLAogICAgaW50Y18yIC8vIDIKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weToyNTYKICAgIC8vIGFzc2VydCBzWzFdWzBdID09IDEKICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weToyNjEKICAgIC8vIGlmIHJlYXNzaWduOgogICAgZnJhbWVfZGlnIC0xCiAgICBibnogdGVzdF9uZXN0ZWRfc2luZ2xlc19pZl9ib2R5QDEKICAgIGZyYW1lX2RpZyAtMgoKdGVzdF9uZXN0ZWRfc2luZ2xlc19hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyB0dXBsZV9zdXBwb3J0L25lc3RlZF90dXBsZXMucHk6MjY3CiAgICAvLyBhc3NlcnQgc1swXVswXSA9PSAoMyBpZiByZWFzc2lnbiBlbHNlIDApCiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hpbnQgMwogICAgKgogICAgZnJhbWVfZGlnIDAKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weToyNjkKICAgIC8vIGFzc2VydCB0bXAgPT0gKDUgaWYgcmVhc3NpZ24gZWxzZSAyKQogICAgaW50Y18yIC8vIDIKICAgIHB1c2hpbnQgNQogICAgZnJhbWVfZGlnIC0xCiAgICBzZWxlY3QKICAgIGZyYW1lX2RpZyAxCiAgICBkaWcgMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gdHVwbGVfc3VwcG9ydC9uZXN0ZWRfdHVwbGVzLnB5OjI3MwogICAgLy8gczEgKz0gb25lCiAgICBkaWcgMQogICAgZnJhbWVfZGlnIC0yCiAgICArCiAgICAvLyB0dXBsZV9zdXBwb3J0L25lc3RlZF90dXBsZXMucHk6Mjc0CiAgICAvLyBhc3NlcnQgczEgPT0gKDUgaWYgcmVhc3NpZ24gZWxzZSAyKQogICAgPT0KICAgIGFzc2VydAogICAgLy8gdHVwbGVfc3VwcG9ydC9uZXN0ZWRfdHVwbGVzLnB5OjI3NQogICAgLy8gYXNzZXJ0IHNbMV1bMF0gPT0gKDQgaWYgcmVhc3NpZ24gZWxzZSAxKQogICAgaW50Y18wIC8vIDEKICAgIHB1c2hpbnQgNAogICAgZnJhbWVfZGlnIC0xCiAgICBzZWxlY3QKICAgID09CiAgICBhc3NlcnQKICAgIHJldHN1YgoKdGVzdF9uZXN0ZWRfc2luZ2xlc19pZl9ib2R5QDE6CiAgICAvLyB0dXBsZV9zdXBwb3J0L25lc3RlZF90dXBsZXMucHk6MjYzCiAgICAvLyAoVUludDY0KDMpLCksCiAgICBwdXNoaW50IDMKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weToyNjItMjY2CiAgICAvLyBzID0gKAogICAgLy8gICAgIChVSW50NjQoMyksKSwKICAgIC8vICAgICAoVUludDY0KDQpLCksCiAgICAvLyAgICAgKFVJbnQ2NCg1KSwpLAogICAgLy8gKQogICAgZnJhbWVfYnVyeSAwCiAgICAvLyB0dXBsZV9zdXBwb3J0L25lc3RlZF90dXBsZXMucHk6MjY0LTI2NQogICAgLy8gKFVJbnQ2NCg0KSwpLAogICAgLy8gKFVJbnQ2NCg1KSwpLAogICAgcHVzaGludHMgNCA1CiAgICAvLyB0dXBsZV9zdXBwb3J0L25lc3RlZF90dXBsZXMucHk6MjYyLTI2NgogICAgLy8gcyA9ICgKICAgIC8vICAgICAoVUludDY0KDMpLCksCiAgICAvLyAgICAgKFVJbnQ2NCg0KSwpLAogICAgLy8gICAgIChVSW50NjQoNSksKSwKICAgIC8vICkKICAgIGZyYW1lX2J1cnkgMQogICAgYiB0ZXN0X25lc3RlZF9zaW5nbGVzX2FmdGVyX2lmX2Vsc2VAMgoKCi8vIHRlc3RfY2FzZXMudHVwbGVfc3VwcG9ydC5uZXN0ZWRfdHVwbGVzLk5lc3RlZFR1cGxlcy5zdG9yZV90dXBsZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnN0b3JlX3R1cGxlOgogICAgLy8gdHVwbGVfc3VwcG9ydC9uZXN0ZWRfdHVwbGVzLnB5OjYxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwbiAyCiAgICBsZW4KICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCB0dXBsZSBlbmNvZGluZwogICAgZHVwCiAgICBwdXNoaW50IDQKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCB0YWlsIHBvaW50ZXIgYXQgaW5kZXggMCBvZiAoKHVpbnQ2NCx1aW50NjQsKHVpbnQ2NCwobGVuK3VpbnQ4W10pLChsZW4rdXRmOFtdKSkpLChsZW4rKHVpbnQ2NCwobGVuK3VpbnQ4W10pLChsZW4rdXRmOFtdKSlbXSkpCiAgICBkaWcgMQogICAgc3dhcAogICAgZGlnIDMKICAgIHN1YnN0cmluZzMKICAgIGR1cAogICAgbGVuCiAgICBkaWcgMQogICAgcHVzaGludCAxNgogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgdHVwbGUgZW5jb2RpbmcKICAgIGR1cAogICAgcHVzaGludCAxOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHRhaWwgcG9pbnRlciBhdCBpbmRleCAyIG9mICh1aW50NjQsdWludDY0LCh1aW50NjQsKGxlbit1aW50OFtdKSwobGVuK3V0ZjhbXSkpKQogICAgc3dhcAogICAgc3Vic3RyaW5nMwogICAgZHVwCiAgICBsZW4KICAgIGRpZyAxCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgdHVwbGUgZW5jb2RpbmcKICAgIGR1cAogICAgcHVzaGludCAxMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHRhaWwgcG9pbnRlciBhdCBpbmRleCAxIG9mICh1aW50NjQsKGxlbit1aW50OFtdKSwobGVuK3V0ZjhbXSkpCiAgICBkaWcgMgogICAgc3dhcAogICAgZGlnIDIKICAgIHN1YnN0cmluZzMKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBwdXNoaW50IDE0CiAgICArCiAgICBkaWcgMgogICAgcHVzaGludCAxMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgdHVwbGUgZW5jb2RpbmcKICAgIGR1cAogICAgZGlnIDIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCB0YWlsIHBvaW50ZXIgYXQgaW5kZXggMiBvZiAodWludDY0LChsZW4rdWludDhbXSksKGxlbit1dGY4W10pKQogICAgdW5jb3ZlciAzCiAgICBzd2FwCiAgICB1bmNvdmVyIDMKICAgIHN1YnN0cmluZzMKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgKwogICAgcHVzaGludCAyMgogICAgKwogICAgZHVwCiAgICBjb3ZlciAzCiAgICBkaWcgMQogICAgaW50Y18yIC8vIDIKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIHR1cGxlIGVuY29kaW5nCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHRhaWwgcG9pbnRlciBhdCBpbmRleCAxIG9mICgodWludDY0LHVpbnQ2NCwodWludDY0LChsZW4rdWludDhbXSksKGxlbit1dGY4W10pKSksKGxlbisodWludDY0LChsZW4rdWludDhbXSksKGxlbit1dGY4W10pKVtdKSkKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgZHVwCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgc3dhcAogICAgZXh0cmFjdCAyIDAKICAgIGludGNfMSAvLyAwCgpzdG9yZV90dXBsZV9mb3JfaGVhZGVyQDE6CiAgICAvLyB0dXBsZV9zdXBwb3J0L25lc3RlZF90dXBsZXMucHk6NjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBkdXAKICAgIGRpZyA0CiAgICA8CiAgICBieiBzdG9yZV90dXBsZV9hZnRlcl9mb3JANAogICAgZHVwCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgZGlnIDIKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBlbmNvZGluZwogICAgZHVwCiAgICB1bmNvdmVyIDUKICAgIGR1cAogICAgY292ZXIgNAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHRhaWwgcG9pbnRlciBmb3IgKGxlbisodWludDY0LChsZW4rdWludDhbXSksKGxlbit1dGY4W10pKVtdKQogICAgZGlnIDEKICAgIGxlbgogICAgc3Vic3RyaW5nMwogICAgZHVwCiAgICBsZW4KICAgIGRpZyAxCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgdHVwbGUgZW5jb2RpbmcKICAgIGR1cAogICAgcHVzaGludCAxMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHRhaWwgcG9pbnRlciBhdCBpbmRleCAxIG9mICh1aW50NjQsKGxlbit1aW50OFtdKSwobGVuK3V0ZjhbXSkpCiAgICBkaWcgMgogICAgc3dhcAogICAgZGlnIDIKICAgIHN1YnN0cmluZzMKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBwdXNoaW50IDE0CiAgICArCiAgICBkaWcgMgogICAgcHVzaGludCAxMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgdHVwbGUgZW5jb2RpbmcKICAgIGR1cAogICAgZGlnIDIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCB0YWlsIHBvaW50ZXIgYXQgaW5kZXggMiBvZiAodWludDY0LChsZW4rdWludDhbXSksKGxlbit1dGY4W10pKQogICAgdW5jb3ZlciAzCiAgICBzd2FwCiAgICB1bmNvdmVyIDMKICAgIHN1YnN0cmluZzMKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgKwogICAgKwogICAgY292ZXIgMgogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGIgc3RvcmVfdHVwbGVfZm9yX2hlYWRlckAxCgpzdG9yZV90dXBsZV9hZnRlcl9mb3JANDoKICAgIHBvcG4gMgogICAgYnVyeSAxCiAgICAvLyB0dXBsZV9zdXBwb3J0L25lc3RlZF90dXBsZXMucHk6NjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgKwogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdGVzdF9jYXNlcy50dXBsZV9zdXBwb3J0Lm5lc3RlZF90dXBsZXMuUGFyZW50V2l0aExpc3QKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weTo2MwogICAgLy8gc2VsZi5wd2wgPSBwd2wKICAgIGJ5dGVjIDQgLy8gInB3bCIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyB0dXBsZV9zdXBwb3J0L25lc3RlZF90dXBsZXMucHk6NjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy50dXBsZV9zdXBwb3J0Lm5lc3RlZF90dXBsZXMuTmVzdGVkVHVwbGVzLmxvYWRfdHVwbGVbcm91dGluZ10oKSAtPiB2b2lkOgpsb2FkX3R1cGxlOgogICAgLy8gdHVwbGVfc3VwcG9ydC9uZXN0ZWRfdHVwbGVzLnB5OjY3CiAgICAvLyByZXR1cm4gc2VsZi5wd2wKICAgIGludGNfMSAvLyAwCiAgICBieXRlYyA0IC8vICJwd2wiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYucHdsIGV4aXN0cwogICAgLy8gdHVwbGVfc3VwcG9ydC9uZXN0ZWRfdHVwbGVzLnB5OjY1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RfY2FzZXMudHVwbGVfc3VwcG9ydC5uZXN0ZWRfdHVwbGVzLk5lc3RlZFR1cGxlcy5zdG9yZV90dXBsZV9pbl9ib3hbcm91dGluZ10oKSAtPiB2b2lkOgpzdG9yZV90dXBsZV9pbl9ib3g6CiAgICAvLyB0dXBsZV9zdXBwb3J0L25lc3RlZF90dXBsZXMucHk6NjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAxNgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdGVzdF9jYXNlcy50dXBsZV9zdXBwb3J0Lm5lc3RlZF90dXBsZXMuU2ltcGxlVHVwCiAgICBkdXAKICAgIGV4dHJhY3QgMCA4CiAgICBkaWcgMQogICAgaW50Y18zIC8vIDgKICAgIGV4dHJhY3RfdWludDY0CiAgICAvLyB0dXBsZV9zdXBwb3J0L25lc3RlZF90dXBsZXMucHk6NzEKICAgIC8vIHNlbGYuYm94W2tleV0gPSBrZXkuX3JlcGxhY2UoYj1rZXkuYiArIDEpCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgYnl0ZWNfMSAvLyAiYm94IgogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGl0b2IKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBib3hfcHV0CiAgICAvLyB0dXBsZV9zdXBwb3J0L25lc3RlZF90dXBsZXMucHk6NjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy50dXBsZV9zdXBwb3J0Lm5lc3RlZF90dXBsZXMuTmVzdGVkVHVwbGVzLmlzX3R1cGxlX2luX2JveFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmlzX3R1cGxlX2luX2JveDoKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weTo3MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDE2CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB0ZXN0X2Nhc2VzLnR1cGxlX3N1cHBvcnQubmVzdGVkX3R1cGxlcy5TaW1wbGVUdXAKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weTo3NQogICAgLy8gcmV0dXJuIGtleSBpbiBzZWxmLmJveAogICAgYnl0ZWNfMSAvLyAiYm94IgogICAgc3dhcAogICAgY29uY2F0CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weTo3MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHB1c2hieXRlcyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLnR1cGxlX3N1cHBvcnQubmVzdGVkX3R1cGxlcy5OZXN0ZWRUdXBsZXMubG9hZF90dXBsZV9mcm9tX2JveFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmxvYWRfdHVwbGVfZnJvbV9ib3g6CiAgICAvLyB0dXBsZV9zdXBwb3J0L25lc3RlZF90dXBsZXMucHk6NzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAxNgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdGVzdF9jYXNlcy50dXBsZV9zdXBwb3J0Lm5lc3RlZF90dXBsZXMuU2ltcGxlVHVwCiAgICAvLyB0dXBsZV9zdXBwb3J0L25lc3RlZF90dXBsZXMucHk6NzkKICAgIC8vIHJldHVybiBzZWxmLmJveFtrZXldCiAgICBieXRlY18xIC8vICJib3giCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveCBlbnRyeSBleGlzdHMKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weTo3NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLnR1cGxlX3N1cHBvcnQubmVzdGVkX3R1cGxlcy5OZXN0ZWRUdXBsZXMubWF5YmVfbG9hZF90dXBsZV9mcm9tX2JveFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm1heWJlX2xvYWRfdHVwbGVfZnJvbV9ib3g6CiAgICAvLyB0dXBsZV9zdXBwb3J0L25lc3RlZF90dXBsZXMucHk6ODEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAxNgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdGVzdF9jYXNlcy50dXBsZV9zdXBwb3J0Lm5lc3RlZF90dXBsZXMuU2ltcGxlVHVwCiAgICAvLyB0dXBsZV9zdXBwb3J0L25lc3RlZF90dXBsZXMucHk6ODMKICAgIC8vIG1heWJlX3ZhbHVlLCBleGlzdHMgPSBzZWxmLmJveC5tYXliZShrZXkpCiAgICBieXRlY18xIC8vICJib3giCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJveF9nZXQKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICBieiBtYXliZV9sb2FkX3R1cGxlX2Zyb21fYm94X3Rlcm5hcnlfZmFsc2VAMwogICAgZHVwCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIHN3YXAKICAgIGludGNfMyAvLyA4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgc3dhcAoKbWF5YmVfbG9hZF90dXBsZV9mcm9tX2JveF90ZXJuYXJ5X21lcmdlQDQ6CiAgICAvLyB0dXBsZV9zdXBwb3J0L25lc3RlZF90dXBsZXMucHk6ODEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpdG9iCiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAzCiAgICBzZXRiaXQKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWF5YmVfbG9hZF90dXBsZV9mcm9tX2JveF90ZXJuYXJ5X2ZhbHNlQDM6CiAgICBwb3AKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weTo4MwogICAgLy8gbWF5YmVfdmFsdWUsIGV4aXN0cyA9IHNlbGYuYm94Lm1heWJlKGtleSkKICAgIHB1c2hieXRlcyAiIgogICAgZHVwCiAgICBiIG1heWJlX2xvYWRfdHVwbGVfZnJvbV9ib3hfdGVybmFyeV9tZXJnZUA0CgoKLy8gdGVzdF9jYXNlcy50dXBsZV9zdXBwb3J0Lm5lc3RlZF90dXBsZXMuTmVzdGVkVHVwbGVzLmxvYWRfdHVwbGVfZnJvbV9ib3hfb3JfZGVmYXVsdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmxvYWRfdHVwbGVfZnJvbV9ib3hfb3JfZGVmYXVsdDoKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weTo4NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDE2CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB0ZXN0X2Nhc2VzLnR1cGxlX3N1cHBvcnQubmVzdGVkX3R1cGxlcy5TaW1wbGVUdXAKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weTo4OAogICAgLy8gcmV0dXJuIHNlbGYuYm94LmdldChrZXksIGRlZmF1bHQ9c2ltcGxlX3R1cChVSW50NjQoNCksIFVJbnQ2NCgyKSkpCiAgICBieXRlY18xIC8vICJib3giCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHB1c2hpbnQgNAogICAgaW50Y18yIC8vIDIKICAgIGNhbGxzdWIgc2ltcGxlX3R1cAogICAgY292ZXIgMgogICAgc3dhcAogICAgYm94X2dldAogICAgYnogbG9hZF90dXBsZV9mcm9tX2JveF9vcl9kZWZhdWx0X3Rlcm5hcnlfZmFsc2VAMwogICAgYnVyeSAxCiAgICBidXJ5IDEKICAgIGR1cAogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICBzd2FwCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIHN3YXAKCmxvYWRfdHVwbGVfZnJvbV9ib3hfb3JfZGVmYXVsdF90ZXJuYXJ5X21lcmdlQDQ6CiAgICAvLyB0dXBsZV9zdXBwb3J0L25lc3RlZF90dXBsZXMucHk6ODYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpdG9iCiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCmxvYWRfdHVwbGVfZnJvbV9ib3hfb3JfZGVmYXVsdF90ZXJuYXJ5X2ZhbHNlQDM6CiAgICBwb3AKICAgIGIgbG9hZF90dXBsZV9mcm9tX2JveF9vcl9kZWZhdWx0X3Rlcm5hcnlfbWVyZ2VANAoKCi8vIHRlc3RfY2FzZXMudHVwbGVfc3VwcG9ydC5uZXN0ZWRfdHVwbGVzLk5lc3RlZFR1cGxlcy5sb2FkX3R1cGxlX2Zyb21fbG9jYWxfc3RhdGVfb3JfZGVmYXVsdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmxvYWRfdHVwbGVfZnJvbV9sb2NhbF9zdGF0ZV9vcl9kZWZhdWx0OgogICAgLy8gdHVwbGVfc3VwcG9ydC9uZXN0ZWRfdHVwbGVzLnB5OjkwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weTo5MgogICAgLy8gbG9jYWwgPSBMb2NhbFN0YXRlKFNpbXBsZVR1cCwga2V5PWVjaG8oa2V5KSkKICAgIGNhbGxzdWIgZWNobwogICAgLy8gdHVwbGVfc3VwcG9ydC9uZXN0ZWRfdHVwbGVzLnB5OjkzCiAgICAvLyByZXR1cm4gbG9jYWwuZ2V0KGdldF9zZW5kZXJfaW5lZmZpY2llbnRseSgpLCBkZWZhdWx0PXNpbXBsZV90dXAoVUludDY0KDQpLCBVSW50NjQoMikpKQogICAgY2FsbHN1YiBnZXRfc2VuZGVyX2luZWZmaWNpZW50bHkKICAgIHB1c2hpbnQgNAogICAgaW50Y18yIC8vIDIKICAgIGNhbGxzdWIgc2ltcGxlX3R1cAogICAgY292ZXIgMwogICAgY292ZXIgMgogICAgaW50Y18xIC8vIDAKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnogbG9hZF90dXBsZV9mcm9tX2xvY2FsX3N0YXRlX29yX2RlZmF1bHRfdGVybmFyeV9mYWxzZUAzCiAgICBidXJ5IDEKICAgIGJ1cnkgMQogICAgZHVwCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIHN3YXAKICAgIGludGNfMyAvLyA4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgc3dhcAoKbG9hZF90dXBsZV9mcm9tX2xvY2FsX3N0YXRlX29yX2RlZmF1bHRfdGVybmFyeV9tZXJnZUA0OgogICAgLy8gdHVwbGVfc3VwcG9ydC9uZXN0ZWRfdHVwbGVzLnB5OjkwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaXRvYgogICAgc3dhcAogICAgaXRvYgogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgpsb2FkX3R1cGxlX2Zyb21fbG9jYWxfc3RhdGVfb3JfZGVmYXVsdF90ZXJuYXJ5X2ZhbHNlQDM6CiAgICBwb3AKICAgIGIgbG9hZF90dXBsZV9mcm9tX2xvY2FsX3N0YXRlX29yX2RlZmF1bHRfdGVybmFyeV9tZXJnZUA0CgoKLy8gdGVzdF9jYXNlcy50dXBsZV9zdXBwb3J0Lm5lc3RlZF90dXBsZXMuTmVzdGVkVHVwbGVzLm11dGF0ZV9sb2NhbF90dXBsZVtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm11dGF0ZV9sb2NhbF90dXBsZToKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weToxMDcKICAgIC8vIGZvciBpIGluIHVyYW5nZSgzKToKICAgIGludGNfMSAvLyAwCgptdXRhdGVfbG9jYWxfdHVwbGVfZm9yX2hlYWRlckAyOgogICAgLy8gdHVwbGVfc3VwcG9ydC9uZXN0ZWRfdHVwbGVzLnB5OjEwNwogICAgLy8gZm9yIGkgaW4gdXJhbmdlKDMpOgogICAgZHVwCiAgICBwdXNoaW50IDMKICAgIDwKICAgIGJ6IG11dGF0ZV9sb2NhbF90dXBsZV9hZnRlcl9mb3JANQogICAgLy8gdHVwbGVfc3VwcG9ydC9uZXN0ZWRfdHVwbGVzLnB5OjEwOAogICAgLy8gYXNzZXJ0IHR3bS5hcnJbaV0gPT0gaQogICAgZHVwCiAgICBpbnRjXzMgLy8gOAogICAgKgogICAgcHVzaGJ5dGVzIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAyCiAgICBzd2FwCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBkaWcgMQogICAgaXRvYgogICAgYj09CiAgICBhc3NlcnQKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weToxMDcKICAgIC8vIGZvciBpIGluIHVyYW5nZSgzKToKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBiIG11dGF0ZV9sb2NhbF90dXBsZV9mb3JfaGVhZGVyQDIKCm11dGF0ZV9sb2NhbF90dXBsZV9hZnRlcl9mb3JANToKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weTo5NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1MDAwNDAwMWUwMDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMGMwMDBlMDAwMDAwMDAKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RfY2FzZXMudHVwbGVfc3VwcG9ydC5uZXN0ZWRfdHVwbGVzLk5lc3RlZFR1cGxlcy5tdXRhdGVfdHVwbGVfaW5fc3RvcmFnZV9jdXJyZW50bHlfc3VwcG9ydGVkX21ldGhvZFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm11dGF0ZV90dXBsZV9pbl9zdG9yYWdlX2N1cnJlbnRseV9zdXBwb3J0ZWRfbWV0aG9kOgogICAgLy8gdHVwbGVfc3VwcG9ydC9uZXN0ZWRfdHVwbGVzLnB5OjExNgogICAgLy8gYXJyMiA9IHNlbGYudHdtLmFyci5jb3B5KCkKICAgIGludGNfMSAvLyAwCiAgICBieXRlY18yIC8vICJ0d20iCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudHdtIGV4aXN0cwogICAgZHVwCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAxCiAgICBpbnRjXzIgLy8gMgogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAyCiAgICB1bmNvdmVyIDIKICAgIGRpZyAyCiAgICBzdWJzdHJpbmczCiAgICAvLyB0dXBsZV9zdXBwb3J0L25lc3RlZF90dXBsZXMucHk6MTE3CiAgICAvLyBhcnIyLmFwcGVuZChhcmM0LlVJbnQ2NCgxKSkKICAgIGludGNfMCAvLyAxCiAgICBpdG9iCiAgICBkaWcgMQogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICAvLyB0dXBsZV9zdXBwb3J0L25lc3RlZF90dXBsZXMucHk6MTE3CiAgICAvLyBhcnIyLmFwcGVuZChhcmM0LlVJbnQ2NCgxKSkKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMAogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICByZXBsYWNlMiAwCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weToxMTgKICAgIC8vIHNlbGYudHdtID0gc2VsZi50d20uX3JlcGxhY2UoYXJyPWFycjIuY29weSgpKQogICAgZGlnIDIKICAgIGxlbgogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgZHVwCiAgICBleHRyYWN0IDAgOAogICAgZGlnIDEKICAgIGludGNfMyAvLyA4CiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDIKICAgIHB1c2hpbnQgMTAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMwogICAgdW5jb3ZlciAyCiAgICBkaWcgMgogICAgc3Vic3RyaW5nMwogICAgZXh0cmFjdCAyIDAKICAgIGRpZyAzCiAgICBsZW4KICAgIHVuY292ZXIgNAogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMwogICAgbGVuCiAgICBwdXNoaW50IDQKICAgICsKICAgIGRpZyAyCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBwdXNoYnl0ZXMgMHgwMDBjCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBsZW4KICAgIHB1c2hpbnQgMTIKICAgICsKICAgIGRpZyA0CiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDUKICAgIGNvbmNhdAogICAgc3dhcAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgYnl0ZWMgNSAvLyAweDAwMDQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMiAvLyAidHdtIgogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weToxMTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy50dXBsZV9zdXBwb3J0Lm5lc3RlZF90dXBsZXMuTmVzdGVkVHVwbGVzLnJ1bl90ZXN0c1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnJ1bl90ZXN0czoKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weToxMzYKICAgIC8vIHRlc3RfaW50cmluc2ljcyhVSW50NjQoMSksIFVJbnQ2NCgyKSkKICAgIGludGNfMCAvLyAxCiAgICBpbnRjXzIgLy8gMgogICAgLy8gdHVwbGVfc3VwcG9ydC9uZXN0ZWRfdHVwbGVzLnB5OjIxNAogICAgLy8gbnQgPSAoVUludDY0KDEpLCBvcC5hZGR3KG51bTEsIG51bTIpLCBVSW50NjQoNDIpKQogICAgYWRkdwogICAgLy8gdHVwbGVfc3VwcG9ydC9uZXN0ZWRfdHVwbGVzLnB5OjIxNwogICAgLy8gYXNzZXJ0IG50WzFdID09ICgwLCBudW0xICsgbnVtMikgICMgdHlwZTogaWdub3JlW2NvbXBhcmlzb24tb3ZlcmxhcF0KICAgIHN3YXAKICAgICEKICAgIHN3YXAKICAgIHB1c2hpbnQgMwogICAgPT0KICAgIGR1cDIKICAgICYmCiAgICBhc3NlcnQKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weToyMTgKICAgIC8vIGFzc2VydCBudFsxXVs6MV0gPT0gKDAsKSAgIyB0eXBlOiBpZ25vcmVbY29tcGFyaXNvbi1vdmVybGFwXQogICAgc3dhcAogICAgYXNzZXJ0CiAgICAvLyB0dXBsZV9zdXBwb3J0L25lc3RlZF90dXBsZXMucHk6MjE5CiAgICAvLyBhc3NlcnQgbnRbMV1bMTpdID09IChudW0xICsgbnVtMiwpCiAgICBhc3NlcnQKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weToxMzgKICAgIC8vIHRlc3RfbmVzdGVkX3NpbmdsZXMoVUludDY0KDEpLCByZWFzc2lnbj1UcnVlKQogICAgaW50Y18wIC8vIDEKICAgIGR1cAogICAgY2FsbHN1YiB0ZXN0X25lc3RlZF9zaW5nbGVzCiAgICAvLyB0dXBsZV9zdXBwb3J0L25lc3RlZF90dXBsZXMucHk6MTM5CiAgICAvLyB0ZXN0X25lc3RlZF9zaW5nbGVzKFVJbnQ2NCgxKSwgcmVhc3NpZ249RmFsc2UpCiAgICBpbnRjXzAgLy8gMQogICAgaW50Y18xIC8vIDAKICAgIGNhbGxzdWIgdGVzdF9uZXN0ZWRfc2luZ2xlcwogICAgaW50Y18xIC8vIDAKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weToyOTUKICAgIC8vIHRvdGFsID0gVUludDY0KDApCiAgICBkdXAKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weToyOTMKICAgIC8vIHggPSBVSW50NjQoMSkKICAgIGludGNfMCAvLyAxCiAgICAvLyB0dXBsZV9zdXBwb3J0L25lc3RlZF90dXBsZXMucHk6Mjk0CiAgICAvLyB5ID0gVUludDY0KDIpCiAgICBpbnRjXzIgLy8gMgoKcnVuX3Rlc3RzX2Zvcl9ib2R5QDEyOgogICAgLy8gdHVwbGVfc3VwcG9ydC9uZXN0ZWRfdHVwbGVzLnB5OjI5OQogICAgLy8gdG90YWwgKz0gYSArIGIKICAgICsKICAgICsKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weToyOTcKICAgIC8vIGZvciB0IGluICgoeCwgeSksICh5LCB4KSwgKHgsIHgpLCAoeSwgeSkpOgogICAgc3dhcAogICAgc3dpdGNoIHJ1bl90ZXN0c19mb3JfaGVhZGVyXzFAMTMgcnVuX3Rlc3RzX2Zvcl9oZWFkZXJfMkAxNCBydW5fdGVzdHNfZm9yX2hlYWRlcl8zQDE1CiAgICBpbnRjXzEgLy8gMAogICAgc3dhcAogICAgLy8gdHVwbGVfc3VwcG9ydC9uZXN0ZWRfdHVwbGVzLnB5OjI5MwogICAgLy8geCA9IFVJbnQ2NCgxKQogICAgaW50Y18wIC8vIDEKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weToyOTQKICAgIC8vIHkgPSBVSW50NjQoMikKICAgIGludGNfMiAvLyAyCgpydW5fdGVzdHNfZm9yX2JvZHlAMTc6CiAgICAvLyB0dXBsZV9zdXBwb3J0L25lc3RlZF90dXBsZXMucHk6MzAyCiAgICAvLyB0b3RhbCArPSBhICsgYgogICAgKwogICAgKwogICAgLy8gdHVwbGVfc3VwcG9ydC9uZXN0ZWRfdHVwbGVzLnB5OjMwMQogICAgLy8gZm9yIGEsIGIgaW4gKCh4LCB5KSwgKHksIHgpLCAoeCwgeCksICh5LCB5KSk6CiAgICBzd2FwCiAgICBzd2l0Y2ggcnVuX3Rlc3RzX2Zvcl9oZWFkZXJfMUAxOCBydW5fdGVzdHNfZm9yX2hlYWRlcl8yQDE5IHJ1bl90ZXN0c19mb3JfaGVhZGVyXzNAMjAKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weTozMDQKICAgIC8vIGFzc2VydCB0b3RhbCAvLyA4ID09IDMKICAgIGludGNfMyAvLyA4CiAgICAvCiAgICBwdXNoaW50IDMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weToxNjgKICAgIC8vIHNlbGYuYnVpbGRfbmVzdGVkX2NhbGxfY291bnQgKz0gMQogICAgYnl0ZWNfMyAvLyAiYnVpbGRfbmVzdGVkX2NhbGxfY291bnQiCiAgICBpbnRjXzAgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weToxMjAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBwdXNoYnl0ZXMgMHgxNTFmN2M3NTgwCiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCnJ1bl90ZXN0c19mb3JfaGVhZGVyXzNAMjA6CiAgICBwdXNoaW50IDMKICAgIHN3YXAKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weToyOTQKICAgIC8vIHkgPSBVSW50NjQoMikKICAgIGludGNfMiAvLyAyCiAgICBkdXAKICAgIGIgcnVuX3Rlc3RzX2Zvcl9ib2R5QDE3CgpydW5fdGVzdHNfZm9yX2hlYWRlcl8yQDE5OgogICAgaW50Y18yIC8vIDIKICAgIHN3YXAKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weToyOTMKICAgIC8vIHggPSBVSW50NjQoMSkKICAgIGludGNfMCAvLyAxCiAgICBkdXAKICAgIGIgcnVuX3Rlc3RzX2Zvcl9ib2R5QDE3CgpydW5fdGVzdHNfZm9yX2hlYWRlcl8xQDE4OgogICAgaW50Y18wIC8vIDEKICAgIHN3YXAKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weToyOTQKICAgIC8vIHkgPSBVSW50NjQoMikKICAgIGludGNfMiAvLyAyCiAgICAvLyB0dXBsZV9zdXBwb3J0L25lc3RlZF90dXBsZXMucHk6MjkzCiAgICAvLyB4ID0gVUludDY0KDEpCiAgICBpbnRjXzAgLy8gMQogICAgYiBydW5fdGVzdHNfZm9yX2JvZHlAMTcKCnJ1bl90ZXN0c19mb3JfaGVhZGVyXzNAMTU6CiAgICBwdXNoaW50IDMKICAgIHN3YXAKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weToyOTQKICAgIC8vIHkgPSBVSW50NjQoMikKICAgIGludGNfMiAvLyAyCiAgICBkdXAKICAgIGIgcnVuX3Rlc3RzX2Zvcl9ib2R5QDEyCgpydW5fdGVzdHNfZm9yX2hlYWRlcl8yQDE0OgogICAgaW50Y18yIC8vIDIKICAgIHN3YXAKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weToyOTMKICAgIC8vIHggPSBVSW50NjQoMSkKICAgIGludGNfMCAvLyAxCiAgICBkdXAKICAgIGIgcnVuX3Rlc3RzX2Zvcl9ib2R5QDEyCgpydW5fdGVzdHNfZm9yX2hlYWRlcl8xQDEzOgogICAgaW50Y18wIC8vIDEKICAgIHN3YXAKICAgIC8vIHR1cGxlX3N1cHBvcnQvbmVzdGVkX3R1cGxlcy5weToyOTQKICAgIC8vIHkgPSBVSW50NjQoMikKICAgIGludGNfMiAvLyAyCiAgICAvLyB0dXBsZV9zdXBwb3J0L25lc3RlZF90dXBsZXMucHk6MjkzCiAgICAvLyB4ID0gVUludDY0KDEpCiAgICBpbnRjXzAgLy8gMQogICAgYiBydW5fdGVzdHNfZm9yX2JvZHlAMTIKCgovLyB0ZXN0X2Nhc2VzLnR1cGxlX3N1cHBvcnQubmVzdGVkX3R1cGxlcy5OZXN0ZWRUdXBsZXMubmVzdGVkX3R1cGxlX3BhcmFtc1tyb3V0aW5nXSgpIC0+IHZvaWQ6Cm5lc3RlZF90dXBsZV9wYXJhbXM6CiAgICAvLyB0dXBsZV9zdXBwb3J0L25lc3RlZF90dXBsZXMucHk6MTQ5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGRpZyAxCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgdHVwbGUgZW5jb2RpbmcKICAgIGR1cAogICAgcHVzaGludCA0CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgdGFpbCBwb2ludGVyIGF0IGluZGV4IDAgb2YgKChsZW4rdXRmOFtdKSwoKGxlbit1aW50OFtdKSwodWludDY0KSkpCiAgICBkaWcgMgogICAgZGlnIDEKICAgIGRpZyAzCiAgICBzdWJzdHJpbmczCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCA2CiAgICArCiAgICBkaWcgMwogICAgaW50Y18yIC8vIDIKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIHR1cGxlIGVuY29kaW5nCiAgICBkdXAKICAgIGRpZyAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgdGFpbCBwb2ludGVyIGF0IGluZGV4IDEgb2YgKChsZW4rdXRmOFtdKSwoKGxlbit1aW50OFtdKSwodWludDY0KSkpCiAgICBkaWcgNAogICAgZGlnIDEKICAgIGRpZyA1CiAgICBzdWJzdHJpbmczCiAgICBkdXAKICAgIGxlbgogICAgZGlnIDEKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCB0dXBsZSBlbmNvZGluZwogICAgZHVwCiAgICBwdXNoaW50IDEwCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgdGFpbCBwb2ludGVyIGF0IGluZGV4IDAgb2YgKChsZW4rdWludDhbXSksKHVpbnQ2NCkpCiAgICBkaWcgMgogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBwdXNoaW50IDEyCiAgICArCiAgICB1bmNvdmVyIDQKICAgICsKICAgIHVuY292ZXIgNQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC50dXBsZTxhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4sYXJjNC50dXBsZTxhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4sYXJjNC50dXBsZTxhcmM0LnVpbnQ2ND4+PgogICAgY292ZXIgNAogICAgY292ZXIgNAogICAgc3Vic3RyaW5nMwogICAgZXh0cmFjdCAyIDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMiAwCiAgICB1bmNvdmVyIDIKICAgIGV4dHJhY3QgMiA4CiAgICBleHRyYWN0IDAgOAogICAgZGlnIDEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA0CiAgICArCiAgICBkaWcgMwogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciA0CiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDAwMGEKICAgIHVuY292ZXIgNAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBieXRlYyA1IC8vIDB4MDAwNAogICAgc3dhcAogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy50dXBsZV9zdXBwb3J0Lm5lc3RlZF90dXBsZXMuTmVzdGVkVHVwbGVzLm5hbWVkX3R1cGxlW3JvdXRpbmddKCkgLT4gdm9pZDoKbmFtZWRfdHVwbGU6CiAgICAvLyB0dXBsZV9zdXBwb3J0L25lc3RlZF90dXBsZXMucHk6MTU2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGRpZyAxCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgdHVwbGUgZW5jb2RpbmcKICAgIGR1cAogICAgcHVzaGludCAxMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHRhaWwgcG9pbnRlciBhdCBpbmRleCAxIG9mICh1aW50NjQsKGxlbit1aW50OFtdKSwobGVuK3V0ZjhbXSkpCiAgICBkaWcgMgogICAgc3dhcAogICAgZGlnIDIKICAgIHN1YnN0cmluZzMKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBwdXNoaW50IDE0CiAgICArCiAgICBkaWcgMgogICAgcHVzaGludCAxMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgdHVwbGUgZW5jb2RpbmcKICAgIGR1cAogICAgZGlnIDIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCB0YWlsIHBvaW50ZXIgYXQgaW5kZXggMiBvZiAodWludDY0LChsZW4rdWludDhbXSksKGxlbit1dGY4W10pKQogICAgZGlnIDMKICAgIHN3YXAKICAgIGRpZyAzCiAgICBzdWJzdHJpbmczCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18yIC8vIDIKICAgICsKICAgICsKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHRlc3RfY2FzZXMudHVwbGVfc3VwcG9ydC5uZXN0ZWRfdHVwbGVzLkNoaWxkCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy50dXBsZV9zdXBwb3J0Lm5lc3RlZF90dXBsZXMuTmVzdGVkVHVwbGVzLm5lc3RlZF9uYW1lZF90dXBsZV9wYXJhbXNbcm91dGluZ10oKSAtPiB2b2lkOgpuZXN0ZWRfbmFtZWRfdHVwbGVfcGFyYW1zOgogICAgLy8gdHVwbGVfc3VwcG9ydC9uZXN0ZWRfdHVwbGVzLnB5OjE2MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBkaWcgMQogICAgcHVzaGludCAxNgogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgdHVwbGUgZW5jb2RpbmcKICAgIGR1cAogICAgcHVzaGludCAxOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHRhaWwgcG9pbnRlciBhdCBpbmRleCAyIG9mICh1aW50NjQsdWludDY0LCh1aW50NjQsKGxlbit1aW50OFtdKSwobGVuK3V0ZjhbXSkpKQogICAgZGlnIDIKICAgIHN3YXAKICAgIGRpZyAyCiAgICBzdWJzdHJpbmczCiAgICBkdXAKICAgIGxlbgogICAgZGlnIDEKICAgIGludGNfMyAvLyA4CiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCB0dXBsZSBlbmNvZGluZwogICAgZHVwCiAgICBwdXNoaW50IDEyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgdGFpbCBwb2ludGVyIGF0IGluZGV4IDEgb2YgKHVpbnQ2NCwobGVuK3VpbnQ4W10pLChsZW4rdXRmOFtdKSkKICAgIGRpZyAyCiAgICBzd2FwCiAgICBkaWcgMgogICAgc3Vic3RyaW5nMwogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIHB1c2hpbnQgMTQKICAgICsKICAgIGRpZyAyCiAgICBwdXNoaW50IDEwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCB0dXBsZSBlbmNvZGluZwogICAgZHVwCiAgICBkaWcgMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHRhaWwgcG9pbnRlciBhdCBpbmRleCAyIG9mICh1aW50NjQsKGxlbit1aW50OFtdKSwobGVuK3V0ZjhbXSkpCiAgICB1bmNvdmVyIDMKICAgIHN3YXAKICAgIHVuY292ZXIgMwogICAgc3Vic3RyaW5nMwogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMiAvLyAyCiAgICArCiAgICArCiAgICBwdXNoaW50IDE4CiAgICArCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB0ZXN0X2Nhc2VzLnR1cGxlX3N1cHBvcnQubmVzdGVkX3R1cGxlcy5QYXJlbnQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4K", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CyAEAQACCCYGBBUffHUDYm94A3R3bRdidWlsZF9uZXN0ZWRfY2FsbF9jb3VudANwd2wCAAQxGEAAHSsjZyqAFgAEAAYAAAAAAAAAAAAAAAwADgAAAABnMRtBAHExGRREMRhEgg4EOD4eiwRoy+3XBCJj/PEEv8NzOQTGYL6qBLbCFf8EkHyQQgTVHHF0BPjMK1AEPUhtsASeWjunBM6gUhsENz9bJATsWTCWNhoAjg4ApgFzAX4BngG6Ac4CAgI0AnQC3QN4A+4EgAS2ADEZFDEYFBBDgBJPcmRlciBpcyBpbXBvcnRhbnSwMQCJigICgBVJJ20ganVzdCBhIHNpbXBsZSB0dXCwi/6L/4mKAQGAGUlzIHRoZXJlIGFuIGVjaG8gaW4gaGVyZT+wi/+JigIAIySL/iISRIv/QAAni/6L/4EDC4sAEkQkgQWL/02LAUsBEkRLAYv+CBJEIoEEi/9NEkSJgQOMAIMCBAWMAUL/zjYaAUcCFUlPAkkjWUmBBBJESwFMSwNSSRVLAYEQWUmBEhJETFJJFUsBJVlJgQwSREsCTEsCUiNZgQ4ISwKBCllJSwISRE8DTE8DUiNZJAgIgRYISU4DSwEkWUlPAhJETwJSSSNZSU4CJAtMVwIAI0lLBAxBAEhJJAtLAklPAllJTwVJTgQSREsBFVJJFUsBJVlJgQwSREsCTEsCUiNZgQ4ISwKBCllJSwISRE8DTE8DUiNZJAgICE4CIghC/7FGAkUBJAgIEkQnBExnIkMjJwRlRChMULAiQzYaAUkVgRASRElXAAhLASVbIggpTwNQTBZPAkxQvyJDNhoBSRWBEBJEKUxQvUUBgAEAI08CVChMULAiQzYaAUkVgRASRClMUL5EKExQsCJDNhoBSRWBEBJEKUxQvklPAkxBABlJI1tMJVtMFkwWUIABACNPA1RQKExQsCJDSIAASUL/5zYaAUkVgRASRClMUIEEJIj+DU4CTL5BABVFAUUBSSNbTCVbTBZMFlAoTFCwIkNIQv/yNhoBSSNZJAhLARUSRFcCAIj9+oj9v4EEJIj90U4DTgIjTwJjQQAVRQFFAUkjW0wlW0wWTBZQKExQsCJDSEL/8iNJgQMMQQAqSSULgBgAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAJMJVhLARaoRCIIQv/PgDIVH3x1AAQAHgADAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAAADAAOAAAAALAiQyMqZURJI1lLASRZSwJPAksCUiIWSwEjWSIIFlcGAE8CTFwATFBLAhVPA08DTwJSSVcACEsBJVlLAoEKWUsDTwJLAlJXAgBLAxVPBE8DTwJSVwIASwMVgQQISwIVFlcGAk8DUE8DgAIADFBLARWBDAhLBBUWVwYCTwVQTBZXBgJPAkxQTwJQTFBMFlcGAicFTFBPAlBMUCpMZyJDIiQeTBRMgQMSShBETEREIkmI/NciI4j80iNJIiQICEyNAwBHAEAAOCNMIiQICEyNAwAiABsAEyUKgQMSRCsiZ4AFFR98dYCwIkOBA0wkSUL/2iRMIklC/9MiTCQiQv/MgQNMJElC/7UkTCJJQv+uIkwkIkL/pzYaAUkVSwEjWUmBBBJESwJLAUsDUiNZgQYISwMkWUlLAhJESwRLAUsFUkkVSwEjWUmBChJESwJMTwJSSSNZgQwITwQITwUSRE4ETgRSVwIATFcCAE8CVwIIVwAISwEVFlcGAk8CUEkVgQQISwMVFlcGAk8EUIACAApPBFBMUEwWVwYCJwVMUE8CUExQKExQsCJDNhoBSRVLASVZSYEMEkRLAkxLAlIjWYEOCEsCgQpZSUsCEkRLA0xLA1IjWSQICBJEKExQsCJDNhoBSRVLAYEQWUmBEhJESwJMSwJSSRVLASVZSYEMEkRLAkxLAlIjWYEOCEsCgQpZSUsCEkRPA0xPA1IjWSQICIESCBJEKExQsCJD", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 99, "minor": 99, "patch": 99 } }, "events": [], "templateVariables": {} }