{ "name": "ImmutableArrayContract", "structs": {}, "methods": [ { "name": "test_uint64_array", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_biguint_array", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_bool_array", "args": [ { "type": "uint64", "name": "length" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_fixed_size_tuple_array", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_fixed_size_named_tuple_array", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_dynamic_sized_tuple_array", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_dynamic_sized_named_tuple_array", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_implicit_conversion_log", "args": [ { "type": "uint64[]", "name": "arr" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_implicit_conversion_emit", "args": [ { "type": "uint64[]", "name": "arr" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [ { "name": "emit_test", "args": [ { "type": "uint64[]", "name": "field1" } ] } ], "recommendations": {} }, { "name": "test_nested_array", "args": [ { "type": "uint64", "name": "arr_to_add" }, { "type": "uint64[][]", "name": "arr" } ], "returns": { "type": "uint64[]" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_bit_packed_tuples", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "sum_uints_and_lengths_and_trues", "args": [ { "type": "uint64[]", "name": "arr1" }, { "type": "bool[]", "name": "arr2" }, { "type": "(uint64,bool,bool)[]", "name": "arr3" }, { "type": "(uint64,string)[]", "name": "arr4" } ], "returns": { "type": "(uint64,uint64,uint64,uint64)" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_uint64_return", "args": [ { "type": "uint64", "name": "append" } ], "returns": { "type": "uint64[]" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_bool_return", "args": [ { "type": "uint64", "name": "append" } ], "returns": { "type": "bool[]" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_tuple_return", "args": [ { "type": "uint64", "name": "append" } ], "returns": { "type": "(uint64,bool,bool)[]" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_dynamic_tuple_return", "args": [ { "type": "uint64", "name": "append" } ], "returns": { "type": "(uint64,string)[]" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_convert_to_array_and_back", "args": [ { "type": "(uint64,bool,bool)[]", "name": "arr" }, { "type": "uint64", "name": "append" } ], "returns": { "type": "(uint64,bool,bool)[]" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_concat_with_arc4_tuple", "args": [ { "type": "(uint64,uint64)", "name": "arg" } ], "returns": { "type": "uint64[]" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_concat_with_native_tuple", "args": [ { "type": "(uint64,uint64)", "name": "arg" } ], "returns": { "type": "uint64[]" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_dynamic_concat_with_arc4_tuple", "args": [ { "type": "(string,string)", "name": "arg" } ], "returns": { "type": "string[]" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_dynamic_concat_with_native_tuple", "args": [ { "type": "(string,string)", "name": "arg" } ], "returns": { "type": "string[]" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_concat_immutable_dynamic", "args": [ { "type": "(uint64,string)[]", "name": "imm1" }, { "type": "(uint64,string)[]", "name": "imm2" } ], "returns": { "type": "(uint64,string)[]" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_immutable_arc4", "args": [ { "type": "(uint64,uint64)[]", "name": "imm" } ], "returns": { "type": "(uint64,uint64)[]" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_imm_fixed_arr", "args": [], "returns": { "type": "(uint64,uint64)[3]" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 0, "bytes": 11 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "a": { "keyType": "AVMString", "valueType": "uint64[]", "key": "YQ==" }, "g": { "keyType": "AVMString", "valueType": "bool[]", "key": "Zw==" }, "c": { "keyType": "AVMString", "valueType": "(uint64,uint64)[]", "key": "Yw==" }, "d": { "keyType": "AVMString", "valueType": "(uint64,bool,bool)[]", "key": "ZA==" }, "e": { "keyType": "AVMString", "valueType": "(uint64,byte[])[]", "key": "ZQ==" }, "f": { "keyType": "AVMString", "valueType": "(uint64,string)[]", "key": "Zg==" }, "bool2": { "keyType": "AVMString", "valueType": "(bool,bool)[]", "key": "Ym9vbDI=" }, "bool7": { "keyType": "AVMString", "valueType": "(uint64,bool,bool,bool,bool,bool,bool,bool,uint64)[]", "key": "Ym9vbDc=" }, "bool8": { "keyType": "AVMString", "valueType": "(uint64,bool,bool,bool,bool,bool,bool,bool,bool,uint64)[]", "key": "Ym9vbDg=" }, "bool9": { "keyType": "AVMString", "valueType": "(uint64,bool,bool,bool,bool,bool,bool,bool,bool,bool,uint64)[]", "key": "Ym9vbDk=" }, "imm_fixed_arr": { "keyType": "AVMString", "valueType": "(uint64,uint64)[3]", "key": "aW1tX2ZpeGVkX2Fycg==" } }, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": {} } }, "bareActions": { "create": [ "NoOp" ], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 4117 ], "errorMessage": "check self.imm_fixed_arr exists" }, { "pc": [ 2032, 2244 ], "errorMessage": "expected 1, 0" }, { "pc": [ 1976, 2187 ], "errorMessage": "expected 1st element to be correct" }, { "pc": [ 1982, 2196 ], "errorMessage": "expected 2nd element to be correct" }, { "pc": [ 2070, 2283 ], "errorMessage": "expected 4, 3" }, { "pc": [ 4014 ], "errorMessage": "expected arrays to be different" }, { "pc": [ 4044 ], "errorMessage": "expected arrays to be the same" }, { "pc": [ 1496 ], "errorMessage": "expected element 0 to be False" }, { "pc": [ 1514 ], "errorMessage": "expected element 1 to be False" }, { "pc": [ 1531 ], "errorMessage": "expected element 2 to be True" }, { "pc": [ 4066 ], "errorMessage": "expected items on iteration to be the same" }, { "pc": [ 1557 ], "errorMessage": "expected last element to be False" }, { "pc": [ 3962 ], "errorMessage": "expected non empty array" }, { "pc": [ 3182 ], "errorMessage": "expected string length to match index" }, { "pc": [ 4112 ], "errorMessage": "expected sum to be 10" }, { "pc": [ 4085 ], "errorMessage": "expected sum to be 15" }, { "pc": [ 829, 1116, 1178, 1239, 1297, 1405, 1689, 1751, 3085, 3977, 4032, 4062, 4104 ], "errorMessage": "index access is out of bounds" }, { "pc": [ 1490, 1508, 1526, 1548 ], "errorMessage": "index out of bounds" }, { "pc": [ 2385, 2958, 3805, 3887 ], "errorMessage": "invalid array encoding" }, { "pc": [ 933, 975, 1024, 1051, 1092, 1120, 1161, 1219, 1277, 1387, 1474, 1599, 1651, 1713, 1833, 1924, 1993, 2135, 2207, 2296, 2314, 2354, 2399, 2487, 2525, 2791, 2800, 2809, 2818, 2870, 2888, 2909, 2928, 2985, 3510, 3655, 3675, 3719, 3741, 3775, 3832, 3855, 3914, 3949 ], "errorMessage": "invalid array length header" }, { "pc": [ 2420 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array>" }, { "pc": [ 2902 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 3002, 3849, 3929 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 3960 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 2921, 3520 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 2305, 2323, 2881 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 3680, 3750 ], "errorMessage": "invalid number of bytes for arc4.tuple,arc4.dynamic_array>" }, { "pc": [ 3601, 3617 ], "errorMessage": "invalid number of bytes for arc4.tuple" }, { "pc": [ 1435, 2346, 3217, 3292, 3344, 3425, 3528 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ 3647, 3710 ], "errorMessage": "invalid tail pointer at index 0 of ((len+utf8[]),(len+utf8[]))" }, { "pc": [ 3667, 3731 ], "errorMessage": "invalid tail pointer at index 1 of ((len+utf8[]),(len+utf8[]))" }, { "pc": [ 2981, 3828, 3910 ], "errorMessage": "invalid tail pointer at index 1 of (uint64,(len+utf8[]))" }, { "pc": [ 2393 ], "errorMessage": "invalid tail pointer for (len+(len+uint64[])[])" }, { "pc": [ 2966, 3813, 3895 ], "errorMessage": "invalid tail pointer for (len+(uint64,(len+utf8[]))[])" }, { "pc": [ 2976, 3642, 3662, 3705, 3726, 3823, 3905 ], "errorMessage": "invalid tuple encoding" }, { "pc": [ 3568 ], "errorMessage": "max array length exceeded" }, { "pc": [ 1257 ], "errorMessage": "overflow" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgMiA4CiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgMHgwMDAwIDB4IDB4MDAgMHgwMDAyIDB4ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYgMHgwMDBhIDB4NjI2OTY3NzU2OTZlNzQgMHgxNTFmN2M3NTAwMDQwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMiAweDAwMDIwMDA0MDAwNzAwMDE2MTAwMDE2MiAiaW1tX2ZpeGVkX2FyciIKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTo5MwogICAgLy8gY2xhc3MgSW1tdXRhYmxlQXJyYXlDb250cmFjdChhcmM0LkFSQzRDb250cmFjdCk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUAzMQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0CiAgICBwdXNoYnl0ZXNzIDB4NDRkNDJmOTkgMHhiN2VhYTYwYiAweDc0M2Q3MGVkIDB4MWM3ZTA0OTQgMHhhMmQ1ODYwYiAweGUwNWZjNTY0IDB4MWUwOTJiODMgMHgwMTMxMDI2MiAweGM4NjU0YTk4IDB4ODlkMTk2ZjggMHg2Y2I3Yzk5MSAweDk4OThiZjAyIDB4ZjZiNjFlZTggMHg2MGI4NmE3YiAweDczYWQyODNmIDB4NTI5ZGZhZTkgMHgyMDZkNTE0ZiAweGUwNjQ2NWUyIDB4ZWMwMzAwYTIgMHhlY2RmMTRhZiAweDUxMWFjYTY0IDB4Mjk4NTJlNGYgMHg2ZDRhYTM1OCAweGI3Y2I5NmJkIC8vIG1ldGhvZCAidGVzdF91aW50NjRfYXJyYXkoKXZvaWQiLCBtZXRob2QgInRlc3RfYmlndWludF9hcnJheSgpdm9pZCIsIG1ldGhvZCAidGVzdF9ib29sX2FycmF5KHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJ0ZXN0X2ZpeGVkX3NpemVfdHVwbGVfYXJyYXkoKXZvaWQiLCBtZXRob2QgInRlc3RfZml4ZWRfc2l6ZV9uYW1lZF90dXBsZV9hcnJheSgpdm9pZCIsIG1ldGhvZCAidGVzdF9keW5hbWljX3NpemVkX3R1cGxlX2FycmF5KCl2b2lkIiwgbWV0aG9kICJ0ZXN0X2R5bmFtaWNfc2l6ZWRfbmFtZWRfdHVwbGVfYXJyYXkoKXZvaWQiLCBtZXRob2QgInRlc3RfaW1wbGljaXRfY29udmVyc2lvbl9sb2codWludDY0W10pdm9pZCIsIG1ldGhvZCAidGVzdF9pbXBsaWNpdF9jb252ZXJzaW9uX2VtaXQodWludDY0W10pdm9pZCIsIG1ldGhvZCAidGVzdF9uZXN0ZWRfYXJyYXkodWludDY0LHVpbnQ2NFtdW10pdWludDY0W10iLCBtZXRob2QgInRlc3RfYml0X3BhY2tlZF90dXBsZXMoKXZvaWQiLCBtZXRob2QgInN1bV91aW50c19hbmRfbGVuZ3Roc19hbmRfdHJ1ZXModWludDY0W10sYm9vbFtdLCh1aW50NjQsYm9vbCxib29sKVtdLCh1aW50NjQsc3RyaW5nKVtdKSh1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpIiwgbWV0aG9kICJ0ZXN0X3VpbnQ2NF9yZXR1cm4odWludDY0KXVpbnQ2NFtdIiwgbWV0aG9kICJ0ZXN0X2Jvb2xfcmV0dXJuKHVpbnQ2NClib29sW10iLCBtZXRob2QgInRlc3RfdHVwbGVfcmV0dXJuKHVpbnQ2NCkodWludDY0LGJvb2wsYm9vbClbXSIsIG1ldGhvZCAidGVzdF9keW5hbWljX3R1cGxlX3JldHVybih1aW50NjQpKHVpbnQ2NCxzdHJpbmcpW10iLCBtZXRob2QgInRlc3RfY29udmVydF90b19hcnJheV9hbmRfYmFjaygodWludDY0LGJvb2wsYm9vbClbXSx1aW50NjQpKHVpbnQ2NCxib29sLGJvb2wpW10iLCBtZXRob2QgInRlc3RfY29uY2F0X3dpdGhfYXJjNF90dXBsZSgodWludDY0LHVpbnQ2NCkpdWludDY0W10iLCBtZXRob2QgInRlc3RfY29uY2F0X3dpdGhfbmF0aXZlX3R1cGxlKCh1aW50NjQsdWludDY0KSl1aW50NjRbXSIsIG1ldGhvZCAidGVzdF9keW5hbWljX2NvbmNhdF93aXRoX2FyYzRfdHVwbGUoKHN0cmluZyxzdHJpbmcpKXN0cmluZ1tdIiwgbWV0aG9kICJ0ZXN0X2R5bmFtaWNfY29uY2F0X3dpdGhfbmF0aXZlX3R1cGxlKChzdHJpbmcsc3RyaW5nKSlzdHJpbmdbXSIsIG1ldGhvZCAidGVzdF9jb25jYXRfaW1tdXRhYmxlX2R5bmFtaWMoKHVpbnQ2NCxzdHJpbmcpW10sKHVpbnQ2NCxzdHJpbmcpW10pKHVpbnQ2NCxzdHJpbmcpW10iLCBtZXRob2QgInRlc3RfaW1tdXRhYmxlX2FyYzQoKHVpbnQ2NCx1aW50NjQpW10pKHVpbnQ2NCx1aW50NjQpW10iLCBtZXRob2QgInRlc3RfaW1tX2ZpeGVkX2FycigpKHVpbnQ2NCx1aW50NjQpWzNdIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggdGVzdF91aW50NjRfYXJyYXkgdGVzdF9iaWd1aW50X2FycmF5IHRlc3RfYm9vbF9hcnJheSB0ZXN0X2ZpeGVkX3NpemVfdHVwbGVfYXJyYXkgdGVzdF9maXhlZF9zaXplX25hbWVkX3R1cGxlX2FycmF5IHRlc3RfZHluYW1pY19zaXplZF90dXBsZV9hcnJheSB0ZXN0X2R5bmFtaWNfc2l6ZWRfbmFtZWRfdHVwbGVfYXJyYXkgdGVzdF9pbXBsaWNpdF9jb252ZXJzaW9uX2xvZyB0ZXN0X2ltcGxpY2l0X2NvbnZlcnNpb25fZW1pdCB0ZXN0X25lc3RlZF9hcnJheSB0ZXN0X2JpdF9wYWNrZWRfdHVwbGVzIHN1bV91aW50c19hbmRfbGVuZ3Roc19hbmRfdHJ1ZXMgdGVzdF91aW50NjRfcmV0dXJuIHRlc3RfYm9vbF9yZXR1cm4gdGVzdF90dXBsZV9yZXR1cm4gdGVzdF9keW5hbWljX3R1cGxlX3JldHVybiB0ZXN0X2NvbnZlcnRfdG9fYXJyYXlfYW5kX2JhY2sgdGVzdF9jb25jYXRfd2l0aF9hcmM0X3R1cGxlIHRlc3RfY29uY2F0X3dpdGhfbmF0aXZlX3R1cGxlIHRlc3RfZHluYW1pY19jb25jYXRfd2l0aF9hcmM0X3R1cGxlIHRlc3RfZHluYW1pY19jb25jYXRfd2l0aF9uYXRpdmVfdHVwbGUgdGVzdF9jb25jYXRfaW1tdXRhYmxlX2R5bmFtaWMgdGVzdF9pbW11dGFibGVfYXJjNCB0ZXN0X2ltbV9maXhlZF9hcnIKICAgIGVycgoKbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUAzMToKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICAmJgogICAgcmV0dXJuCgoKLy8gX3B1eWFfbGliLmFyYzQuZHluYW1pY19hcnJheV9wb3BfZml4ZWRfc2l6ZShhcnJheTogYnl0ZXMsIGZpeGVkX2J5dGVfc2l6ZTogdWludDY0KSAtPiBieXRlczoKZHluYW1pY19hcnJheV9wb3BfZml4ZWRfc2l6ZToKICAgIHByb3RvIDIgMQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGZyYW1lX2RpZyAtMQogICAgLQogICAgZnJhbWVfZGlnIC0yCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAwCiAgICByZXBsYWNlMiAwCiAgICByZXRzdWIKCgovLyBfcHV5YV9saWIuYXJjNC5keW5hbWljX2FycmF5X3BvcF9keW5hbWljX2VsZW1lbnQoYXJyYXk6IGJ5dGVzKSAtPiBieXRlczoKZHluYW1pY19hcnJheV9wb3BfZHluYW1pY19lbGVtZW50OgogICAgcHJvdG8gMSAxCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgaXRvYgogICAgZXh0cmFjdCA2IDAKICAgIHN3YXAKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBpbnRjXzIgLy8gMgoKZHluYW1pY19hcnJheV9wb3BfZHluYW1pY19lbGVtZW50X3doaWxlX3RvcEAxOgogICAgZHVwCiAgICBkaWcgMgogICAgPD0KICAgIGJ6IGR5bmFtaWNfYXJyYXlfcG9wX2R5bmFtaWNfZWxlbWVudF9hZnRlcl93aGlsZUAzCiAgICBmcmFtZV9kaWcgLTEKICAgIGRpZyAxCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgIC0KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAwCiAgICB1bmNvdmVyIDMKICAgIHN3YXAKICAgIGNvbmNhdAogICAgY292ZXIgMgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGIgZHluYW1pY19hcnJheV9wb3BfZHluYW1pY19lbGVtZW50X3doaWxlX3RvcEAxCgpkeW5hbWljX2FycmF5X3BvcF9keW5hbWljX2VsZW1lbnRfYWZ0ZXJfd2hpbGVAMzoKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAyIDAKICAgIGR1cAogICAgdW5jb3ZlciAzCiAgICBleHRyYWN0X3VpbnQxNgogICAgc3dhcAogICAgY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgY29uY2F0CiAgICByZXRzdWIKCgovLyBfcHV5YV9saWIuYXJjNC5keW5hbWljX2FycmF5X3JlYWRfZHluYW1pY19lbGVtZW50KGFycmF5OiBieXRlcywgaW5kZXg6IHVpbnQ2NCkgLT4gYnl0ZXM6CmR5bmFtaWNfYXJyYXlfcmVhZF9keW5hbWljX2VsZW1lbnQ6CiAgICBwcm90byAyIDEKICAgIGZyYW1lX2RpZyAtMgogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBkaWcgMgogICAgc3dhcAogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAyCiAgICBsZW4KICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGR1cAogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGRpZyA1CiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQxNgogICAgdW5jb3ZlciA0CiAgICB1bmNvdmVyIDIKICAgIC0KICAgIHNlbGVjdAogICAgc3Vic3RyaW5nMwogICAgcmV0c3ViCgoKLy8gX3B1eWFfbGliLmFyYzQuZHluYW1pY19hcnJheV9jb25jYXRfYml0cyhhcnJheTogYnl0ZXMsIG5ld19pdGVtc19ieXRlczogYnl0ZXMsIG5ld19pdGVtc19jb3VudDogdWludDY0LCByZWFkX3N0ZXA6IHVpbnQ2NCkgLT4gYnl0ZXM6CmR5bmFtaWNfYXJyYXlfY29uY2F0X2JpdHM6CiAgICBwcm90byA0IDEKICAgIGZyYW1lX2RpZyAtNAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXBuIDIKICAgIGZyYW1lX2RpZyAtMgogICAgKwogICAgZHVwCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMAogICAgZnJhbWVfZGlnIC00CiAgICBzd2FwCiAgICByZXBsYWNlMiAwCiAgICBjb3ZlciAyCiAgICBzd2FwCiAgICBwdXNoaW50IDcKICAgICsKICAgIGludGNfMyAvLyA4CiAgICAvCiAgICBkdXAKICAgIGNvdmVyIDQKICAgIHN3YXAKICAgIHB1c2hpbnQgNwogICAgKwogICAgaW50Y18zIC8vIDgKICAgIC8KICAgIGR1cAogICAgY292ZXIgNAogICAgPAogICAgYnogZHluYW1pY19hcnJheV9jb25jYXRfYml0c19hZnRlcl9pZl9lbHNlQDIKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9kaWcgMAogICAgLQogICAgYnplcm8KICAgIGNvbmNhdAoKZHluYW1pY19hcnJheV9jb25jYXRfYml0c19hZnRlcl9pZl9lbHNlQDI6CiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBwdXNoaW50IDE2CiAgICArCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGZyYW1lX2RpZyAtMgogICAgKwoKZHluYW1pY19hcnJheV9jb25jYXRfYml0c193aGlsZV90b3BAMzoKICAgIGRpZyAyCiAgICBkaWcgMQogICAgPAogICAgYnogZHluYW1pY19hcnJheV9jb25jYXRfYml0c19hZnRlcl93aGlsZUA1CiAgICBmcmFtZV9kaWcgLTMKICAgIHVuY292ZXIgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBnZXRiaXQKICAgIHVuY292ZXIgNAogICAgdW5jb3ZlciA0CiAgICBkdXAKICAgIGNvdmVyIDMKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBjb3ZlciAzCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgY292ZXIgMgogICAgZnJhbWVfZGlnIC0xCiAgICArCiAgICBzd2FwCiAgICBiIGR5bmFtaWNfYXJyYXlfY29uY2F0X2JpdHNfd2hpbGVfdG9wQDMKCmR5bmFtaWNfYXJyYXlfY29uY2F0X2JpdHNfYWZ0ZXJfd2hpbGVANToKICAgIHBvcG4gMwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCgovLyBfcHV5YV9saWIuYXJjNC5keW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkKGFycmF5OiBieXRlcywgbmV3X2l0ZW1zX2J5dGVzOiBieXRlcywgbmV3X2l0ZW1zX2NvdW50OiB1aW50NjQpIC0+IGJ5dGVzOgpkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkOgogICAgcHJvdG8gMyAxCiAgICBmcmFtZV9kaWcgLTMKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGZyYW1lX2RpZyAtMwogICAgaW50Y18yIC8vIDIKICAgIGRpZyAyCiAgICBzdWJzdHJpbmczCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBiemVybwogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTMKICAgIGxlbgogICAgZnJhbWVfZGlnIC0zCiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIGNvbmNhdAogICAgc3dhcAogICAgZnJhbWVfZGlnIC0xCiAgICArCiAgICBkdXAKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAwCiAgICBzd2FwCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAoKZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZF9mb3JfaGVhZGVyQDI6CiAgICBkdXAKICAgIGRpZyAzCiAgICA8CiAgICBieiBkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkX2FmdGVyX2ZvckA0CiAgICBzd2FwCiAgICBkdXAKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAwCiAgICB1bmNvdmVyIDUKICAgIGRpZyAzCiAgICB1bmNvdmVyIDIKICAgIHJlcGxhY2UzCiAgICBkdXAKICAgIGNvdmVyIDUKICAgIGRpZyAxCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgICsKICAgIHN3YXAKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBiIGR5bmFtaWNfYXJyYXlfY29uY2F0X2J5dGVfbGVuZ3RoX2hlYWRfZm9yX2hlYWRlckAyCgpkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkX2FmdGVyX2ZvckA0OgogICAgcG9wbiAzCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHJldHN1YgoKCi8vIF9wdXlhX2xpYi5hcmM0LmR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudChhcnJheTogYnl0ZXMsIG5ld19oZWFkX2FuZF90YWlsOiBieXRlcywgbmV3X2l0ZW1zX2NvdW50OiB1aW50NjQpIC0+IGJ5dGVzOgpkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnQ6CiAgICBwcm90byAzIDEKICAgIGZyYW1lX2RpZyAtMwogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAKICAgIGZyYW1lX2RpZyAtMQogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDAKICAgIHN3YXAKICAgIGZyYW1lX2RpZyAtMwogICAgZXh0cmFjdCAyIDAKICAgIHN3YXAKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBzd2FwCiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBjb3ZlciAyCiAgICBpbnRjXzAgLy8gMAogICAgY292ZXIgNAoKZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50X2Zvcl9oZWFkZXJAMToKICAgIGZyYW1lX2RpZyAwCiAgICBkaWcgMgogICAgPAogICAgYnogZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50X2FmdGVyX2ZvckA0CiAgICBkdXAKICAgIGZyYW1lX2RpZyAwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgNAogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDAKICAgIHVuY292ZXIgNQogICAgc3dhcAogICAgY29uY2F0CiAgICBjb3ZlciA0CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZnJhbWVfYnVyeSAwCiAgICBiIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9mb3JfaGVhZGVyQDEKCmR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9hZnRlcl9mb3JANDoKICAgIGR1cAogICAgbGVuCiAgICBzd2FwCiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSAwCgpkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnRfZm9yX2hlYWRlckA1OgogICAgZnJhbWVfZGlnIDAKICAgIGRpZyA0CiAgICA8CiAgICBieiBkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnRfYWZ0ZXJfZm9yQDgKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIDAKICAgIGR1cAogICAgY292ZXIgMgogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAzCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMAogICAgdW5jb3ZlciA2CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGNvdmVyIDUKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBmcmFtZV9idXJ5IDAKICAgIGIgZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50X2Zvcl9oZWFkZXJANQoKZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50X2FmdGVyX2ZvckA4OgogICAgY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBmcmFtZV9kaWcgLTIKICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBjb25jYXQKICAgIHN3YXAKICAgIHJldHN1YgoKCi8vIHRlc3RfY2FzZXMuYXJyYXkuaW1tdXRhYmxlLnN1bV9pbW1fZml4ZWQoYXJyOiBieXRlcykgLT4gdWludDY0OgpzdW1faW1tX2ZpeGVkOgogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjQ3OS00ODAKICAgIC8vIEBzdWJyb3V0aW5lCiAgICAvLyBkZWYgc3VtX2ltbV9maXhlZChhcnI6IE5hdGl2ZVN0cnVjdDMpIC0+IFVJbnQ2NDoKICAgIHByb3RvIDEgMQogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjQ4MQogICAgLy8gdG90YWwgPSBVSW50NjQoMCkKICAgIGludGNfMCAvLyAwCiAgICBkdXAKCnN1bV9pbW1fZml4ZWRfZm9yX2hlYWRlckAxOgogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjQ4MgogICAgLy8gZm9yIGl0ZW0gaW4gYXJyOgogICAgZHVwCiAgICBwdXNoaW50IDMKICAgIDwKICAgIGJ6IHN1bV9pbW1fZml4ZWRfYWZ0ZXJfZm9yQDQKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTo0ODItNDgzCiAgICAvLyBmb3IgaXRlbSBpbiBhcnI6CiAgICAvLyAgICAgdG90YWwgKz0gaXRlbS5mb28KICAgIGR1cAogICAgcHVzaGludCAxNgogICAgKgogICAgZnJhbWVfZGlnIC0xCiAgICBzd2FwCiAgICBwdXNoaW50IDE2CiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTo0ODMKICAgIC8vIHRvdGFsICs9IGl0ZW0uZm9vCiAgICBkdXAKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTo0ODItNDgzCiAgICAvLyBmb3IgaXRlbSBpbiBhcnI6CiAgICAvLyAgICAgdG90YWwgKz0gaXRlbS5mb28KICAgIGludGNfMCAvLyAwCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6NDgzCiAgICAvLyB0b3RhbCArPSBpdGVtLmZvbwogICAgZXh0cmFjdF91aW50NjQKICAgIHVuY292ZXIgMwogICAgKwogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjQ4NAogICAgLy8gdG90YWwgKz0gaXRlbS5iYXIKICAgIHN3YXAKICAgIGludGNfMyAvLyA4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgKwogICAgc3dhcAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGIgc3VtX2ltbV9maXhlZF9mb3JfaGVhZGVyQDEKCnN1bV9pbW1fZml4ZWRfYWZ0ZXJfZm9yQDQ6CiAgICBwb3AKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTo0ODUKICAgIC8vIHJldHVybiB0b3RhbAogICAgcmV0c3ViCgoKLy8gdGVzdF9jYXNlcy5hcnJheS5pbW11dGFibGUudGltZXMobjogdWludDY0KSAtPiBieXRlczoKdGltZXM6CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6NDg4LTQ4OQogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiB0aW1lcyhuOiBVSW50NjQpIC0+IFN0cmluZzoKICAgIHByb3RvIDEgMQogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjQ5MAogICAgLy8gcmVzdWx0ID0gU3RyaW5nKCkKICAgIGJ5dGVjXzIgLy8gIiIKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTo0OTEKICAgIC8vIGZvciBfaSBpbiB1cmFuZ2Uobik6CiAgICBpbnRjXzAgLy8gMAoKdGltZXNfZm9yX2hlYWRlckAxOgogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjQ5MQogICAgLy8gZm9yIF9pIGluIHVyYW5nZShuKToKICAgIGR1cAogICAgZnJhbWVfZGlnIC0xCiAgICA8CiAgICBieiB0aW1lc19hZnRlcl9mb3JANAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjQ5MgogICAgLy8gcmVzdWx0ICs9IFN0cmluZygiICIpCiAgICBzd2FwCiAgICBwdXNoYnl0ZXMgIiAiCiAgICBjb25jYXQKICAgIHN3YXAKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTo0OTEKICAgIC8vIGZvciBfaSBpbiB1cmFuZ2Uobik6CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYiB0aW1lc19mb3JfaGVhZGVyQDEKCnRpbWVzX2FmdGVyX2ZvckA0OgogICAgcG9wCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6NDkzCiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0X2Nhc2VzLmFycmF5LmltbXV0YWJsZS5hZGRfeChhcnI6IGJ5dGVzLCB4OiB1aW50NjQpIC0+IGJ5dGVzOgphZGRfeDoKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTo0OTYtNDk3CiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIGFkZF94KGFycjogSW1tdXRhYmxlQXJyYXlbVUludDY0XSwgeDogVUludDY0KSAtPiBJbW11dGFibGVBcnJheVtVSW50NjRdOgogICAgcHJvdG8gMiAxCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6NDk4CiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoeCk6CiAgICBpbnRjXzAgLy8gMAoKYWRkX3hfZm9yX2hlYWRlckAxOgogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjQ5OAogICAgLy8gZm9yIGkgaW4gdXJhbmdlKHgpOgogICAgZHVwCiAgICBmcmFtZV9kaWcgLTEKICAgIDwKICAgIGJ6IGFkZF94X2FmdGVyX2ZvckA0CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6NDk5CiAgICAvLyBhcnIgPSBhcnIuYXBwZW5kKGkpCiAgICBkdXAKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6NDk5CiAgICAvLyBhcnIgPSBhcnIuYXBwZW5kKGkpCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDAKICAgIGZyYW1lX2RpZyAtMgogICAgc3dhcAogICAgcmVwbGFjZTIgMAogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IC0yCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6NDk4CiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoeCk6CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYiBhZGRfeF9mb3JfaGVhZGVyQDEKCmFkZF94X2FmdGVyX2ZvckA0OgogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjUwMAogICAgLy8gcmV0dXJuIGFycgogICAgZnJhbWVfZGlnIC0yCiAgICBzd2FwCiAgICByZXRzdWIKCgovLyB0ZXN0X2Nhc2VzLmFycmF5LmltbXV0YWJsZS5JbW11dGFibGVBcnJheUNvbnRyYWN0LnRlc3RfdWludDY0X2FycmF5W3JvdXRpbmddKCkgLT4gdm9pZDoKdGVzdF91aW50NjRfYXJyYXk6CiAgICBwdXNoYnl0ZXMgMHgwMDAxMDAwMDAwMDAwMDAwMDAyYQogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjEwMwogICAgLy8gYXJyID0gYWRkX3goYXJyLCBVSW50NjQoNSkpCiAgICBwdXNoaW50IDUKICAgIGNhbGxzdWIgYWRkX3gKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToxMDQKICAgIC8vIGFzc2VydCBhcnIubGVuZ3RoID09IDYKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgcHVzaGludCA2CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MTA1CiAgICAvLyBhc3NlcnQgYXJyWy0xXSA9PSA0CiAgICBkdXAKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkaWcgMgogICAgZXh0cmFjdCAyIDAKICAgIHN3YXAKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICBleHRyYWN0X3VpbnQ2NAogICAgcHVzaGludCA0CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MTA3CiAgICAvLyBhcnIgPSBhcnIuYXBwZW5kKFVJbnQ2NCg0MykpCiAgICBwdXNoaW50IDQzCiAgICBpdG9iCiAgICBzd2FwCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MTA3CiAgICAvLyBhcnIgPSBhcnIuYXBwZW5kKFVJbnQ2NCg0MykpCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDAKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgcmVwbGFjZTIgMAogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXBuIDIKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToxMDgKICAgIC8vIGFzc2VydCBhcnIubGVuZ3RoID09IDcKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkdXAKICAgIHB1c2hpbnQgNwogICAgPT0KICAgIGFzc2VydAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjEwOQogICAgLy8gYXNzZXJ0IGFyclstMV0gPT0gNDMKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkaWcgMQogICAgZXh0cmFjdCAyIDAKICAgIHN3YXAKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICBleHRyYWN0X3VpbnQ2NAogICAgcHVzaGludCA0MwogICAgPT0KICAgIGFzc2VydAogICAgaW50Y18yIC8vIDIKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToxMTAKICAgIC8vIGFzc2VydCBhcnJbMF0gPT0gNDIKICAgIGV4dHJhY3RfdWludDY0CiAgICBwdXNoaW50IDQyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6NTA1CiAgICAvLyBmb3IgX2kgaW4gdXJhbmdlKHgpOgogICAgaW50Y18wIC8vIDAKCnRlc3RfdWludDY0X2FycmF5X2Zvcl9oZWFkZXJAMjoKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTo1MDUKICAgIC8vIGZvciBfaSBpbiB1cmFuZ2UoeCk6CiAgICBkdXAKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToxMTIKICAgIC8vIGFyciA9IHBvcF94KGFyciwgVUludDY0KDMpKQogICAgcHVzaGludCAzCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6NTA1CiAgICAvLyBmb3IgX2kgaW4gdXJhbmdlKHgpOgogICAgPAogICAgYnogdGVzdF91aW50NjRfYXJyYXlfYWZ0ZXJfZm9yQDQKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTo1MDYKICAgIC8vIGFyciA9IGFyci5wb3AoKQogICAgc3dhcAogICAgaW50Y18zIC8vIDgKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9wb3BfZml4ZWRfc2l6ZQogICAgc3dhcAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjUwNQogICAgLy8gZm9yIF9pIGluIHVyYW5nZSh4KToKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBiIHRlc3RfdWludDY0X2FycmF5X2Zvcl9oZWFkZXJAMgoKdGVzdF91aW50NjRfYXJyYXlfYWZ0ZXJfZm9yQDQ6CiAgICBwb3AKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToxMTMKICAgIC8vIGFzc2VydCBhcnIubGVuZ3RoID09IDQKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgcHVzaGludCA0CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MTE0CiAgICAvLyBhc3NlcnQgYXJyWy0xXSA9PSAyCiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgZGlnIDEKICAgIGV4dHJhY3QgMiAwCiAgICBzd2FwCiAgICBpbnRjXzMgLy8gOAogICAgKgogICAgZXh0cmFjdF91aW50NjQKICAgIGludGNfMiAvLyAyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MTE2CiAgICAvLyBhcnIgPSBhZGRfeChhcnIsIFVJbnQ2NCgxMCkpCiAgICBwdXNoaW50IDEwCiAgICBjYWxsc3ViIGFkZF94CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MTE3CiAgICAvLyBhc3NlcnQgYXJyLmxlbmd0aCA9PSAxNAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgZHVwCiAgICBwdXNoaW50IDE0CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MTE4CiAgICAvLyBhc3NlcnQgYXJyWy0xXSA9PSA5CiAgICBkdXAKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkaWcgMgogICAgZXh0cmFjdCAyIDAKICAgIHN3YXAKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICBleHRyYWN0X3VpbnQ2NAogICAgcHVzaGludCA5CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MTIwCiAgICAvLyBhcnIgPSBhcnIuYXBwZW5kKFVJbnQ2NCg0NCkpCiAgICBwdXNoaW50IDQ0CiAgICBpdG9iCiAgICBzd2FwCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MTIwCiAgICAvLyBhcnIgPSBhcnIuYXBwZW5kKFVJbnQ2NCg0NCkpCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDAKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgcmVwbGFjZTIgMAogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MTIxCiAgICAvLyBhc3NlcnQgYXJyLmxlbmd0aCA9PSAxNQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgZHVwCiAgICBwdXNoaW50IDE1CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MTIyCiAgICAvLyBhc3NlcnQgYXJyWy0xXSA9PSA0NAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGRpZyAxCiAgICBleHRyYWN0IDIgMAogICAgc3dhcAogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGV4dHJhY3RfdWludDY0CiAgICBwdXNoaW50IDQ0CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MTI0CiAgICAvLyBhcnIgPSBhcnIucmVwbGFjZSgyLCBVSW50NjQoMjMpKQogICAgcHVzaGludCAyMwogICAgaXRvYgogICAgcmVwbGFjZTIgMTggLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MTI1CiAgICAvLyBhc3NlcnQgYXJyLmxlbmd0aCA9PSAxNQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCAxNQogICAgPT0KICAgIGFzc2VydAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjEyNgogICAgLy8gYXNzZXJ0IGFyclsyXSA9PSAyMwogICAgZHVwCiAgICBwdXNoaW50IDE4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgcHVzaGludCAyMwogICAgPT0KICAgIGFzc2VydAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjEyOAogICAgLy8gc2VsZi5hID0gYXJyCiAgICBwdXNoYnl0ZXMgImEiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5Ojk0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RfY2FzZXMuYXJyYXkuaW1tdXRhYmxlLkltbXV0YWJsZUFycmF5Q29udHJhY3QudGVzdF9iaWd1aW50X2FycmF5W3JvdXRpbmddKCkgLT4gdm9pZDoKdGVzdF9iaWd1aW50X2FycmF5OgogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjEzNQogICAgLy8gYXJyID0gYXJyLmFwcGVuZChCaWdVSW50KFR4bi5udW1fYXBwX2FyZ3MgLSAxKSkKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgaXRvYgogICAgcHVzaGludCA2NAogICAgYnplcm8KICAgIGR1cAogICAgY292ZXIgMgogICAgYnwKICAgIHB1c2hieXRlcyAweDAwMDEKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwbiAyCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MTM2CiAgICAvLyBhc3NlcnQgYXJyLmxlbmd0aCA9PSAxCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgZHVwCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjEzNwogICAgLy8gYXNzZXJ0IGFyclstMV0gPT0gMAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIHN3YXAKICAgIGV4dHJhY3QgMiAwCiAgICBzd2FwCiAgICBwdXNoaW50IDY0CiAgICAqCiAgICBwdXNoaW50IDY0CiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGJ5dGVjXzIgLy8gMHgKICAgIGI9PQogICAgYXNzZXJ0CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6NTEyCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoeCk6CiAgICBpbnRjXzAgLy8gMAoKdGVzdF9iaWd1aW50X2FycmF5X2Zvcl9oZWFkZXJAMjoKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTo1MTIKICAgIC8vIGZvciBpIGluIHVyYW5nZSh4KToKICAgIGR1cAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjEzOQogICAgLy8gYXJyID0gYWRkX3hiKGFyciwgVUludDY0KDUpKQogICAgcHVzaGludCA1CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6NTEyCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoeCk6CiAgICA8CiAgICBieiB0ZXN0X2JpZ3VpbnRfYXJyYXlfYWZ0ZXJfZm9yQDQKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTo1MTMKICAgIC8vIGFyciA9IGFyci5hcHBlbmQoQmlnVUludChpKSkKICAgIGR1cAogICAgaXRvYgogICAgZGlnIDMKICAgIGJ8CiAgICB1bmNvdmVyIDIKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6NTEzCiAgICAvLyBhcnIgPSBhcnIuYXBwZW5kKEJpZ1VJbnQoaSkpCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDAKICAgIHJlcGxhY2UyIDAKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjUxMgogICAgLy8gZm9yIGkgaW4gdXJhbmdlKHgpOgogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGIgdGVzdF9iaWd1aW50X2FycmF5X2Zvcl9oZWFkZXJAMgoKdGVzdF9iaWd1aW50X2FycmF5X2FmdGVyX2ZvckA0OgogICAgcG9wCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MTQwCiAgICAvLyBhc3NlcnQgYXJyLmxlbmd0aCA9PSA2CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkdXAKICAgIHB1c2hpbnQgNgogICAgPT0KICAgIGFzc2VydAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjE0MQogICAgLy8gYXNzZXJ0IGFyclstMV0gPT0gNAogICAgZHVwCiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgZGlnIDIKICAgIGV4dHJhY3QgMiAwCiAgICBzd2FwCiAgICBwdXNoaW50IDY0CiAgICAqCiAgICBwdXNoaW50IDY0CiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIHB1c2hieXRlcyAweDA0CiAgICBiPT0KICAgIGFzc2VydAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjE0MwogICAgLy8gYXJyID0gYXJyLmFwcGVuZChCaWdVSW50KDIqKjUxMiAtIDEpIC0gVHhuLm51bV9hcHBfYXJncykKICAgIHR4biBOdW1BcHBBcmdzCiAgICBpdG9iCiAgICBieXRlYyA1IC8vIDB4ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYKICAgIHN3YXAKICAgIGItCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgdW5jb3ZlciAzCiAgICBifAogICAgc3dhcAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjE0MwogICAgLy8gYXJyID0gYXJyLmFwcGVuZChCaWdVSW50KDIqKjUxMiAtIDEpIC0gVHhuLm51bV9hcHBfYXJncykKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMAogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICByZXBsYWNlMiAwCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToxNDQKICAgIC8vIGFzc2VydCBhcnIubGVuZ3RoID09IDcKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgcHVzaGludCA3CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MTQ1CiAgICAvLyBhc3NlcnQgYXJyWy0xXSA9PSAyKio1MTIgLSAyCiAgICBkdXAKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkaWcgMgogICAgZXh0cmFjdCAyIDAKICAgIHN3YXAKICAgIHB1c2hpbnQgNjQKICAgICoKICAgIHB1c2hpbnQgNjQKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgcHVzaGJ5dGVzIDB4ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmUKICAgIGI9PQogICAgYXNzZXJ0CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MTQ2CiAgICAvLyBhc3NlcnQgYXJyWzBdID09IDAKICAgIGRpZyAxCiAgICBleHRyYWN0IDIgNjQKICAgIGJ5dGVjXzIgLy8gMHgKICAgIGI9PQogICAgYXNzZXJ0CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MTQ4CiAgICAvLyBhcnIgPSBhcnIuYXBwZW5kKEJpZ1VJbnQoMioqNTEyIC0gMSkpCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDAKICAgIHJlcGxhY2UyIDAKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToxNDgKICAgIC8vIGFyciA9IGFyci5hcHBlbmQoQmlnVUludCgyKio1MTIgLSAxKSkKICAgIGJ5dGVjIDUgLy8gMHhmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZgogICAgY29uY2F0CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MTQ5CiAgICAvLyBhc3NlcnQgYXJyLmxlbmd0aCA9PSA4CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkdXAKICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MTUwCiAgICAvLyBhc3NlcnQgYXJyWy0xXSA9PSAyKio1MTIgLSAxCiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgZGlnIDEKICAgIGV4dHJhY3QgMiAwCiAgICBzd2FwCiAgICBwdXNoaW50IDY0CiAgICAqCiAgICBwdXNoaW50IDY0CiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGJ5dGVjIDUgLy8gMHhmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZgogICAgYj09CiAgICBhc3NlcnQKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToxNTEKICAgIC8vIGFzc2VydCBhcnJbMF0gPT0gMAogICAgZHVwCiAgICBleHRyYWN0IDIgNjQKICAgIGJ5dGVjXzIgLy8gMHgKICAgIGI9PQogICAgYXNzZXJ0CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MTUzCiAgICAvLyBCb3goSW1tdXRhYmxlQXJyYXlbQmlnVUludF0sIGtleT1iImJpZ3VpbnQiKS52YWx1ZSA9IGFycgogICAgYnl0ZWMgNyAvLyAweDYyNjk2Nzc1Njk2ZTc0CiAgICBib3hfZGVsCiAgICBwb3AKICAgIGJ5dGVjIDcgLy8gMHg2MjY5Njc3NTY5NmU3NAogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjEzMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLmFycmF5LmltbXV0YWJsZS5JbW11dGFibGVBcnJheUNvbnRyYWN0LnRlc3RfYm9vbF9hcnJheVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfYm9vbF9hcnJheToKICAgIGJ5dGVjXzIgLy8gIiIKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToxNTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MTU3CiAgICAvLyBhcnIgPSBJbW11dGFibGVBcnJheVtib29sXSgpCiAgICBieXRlY18xIC8vIDB4MDAwMAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjE2MAogICAgLy8gZm9yIGkgaW4gdXJhbmdlKGxlbmd0aCk6CiAgICBpbnRjXzAgLy8gMAoKdGVzdF9ib29sX2FycmF5X2Zvcl9oZWFkZXJAMjoKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToxNjAKICAgIC8vIGZvciBpIGluIHVyYW5nZShsZW5ndGgpOgogICAgZHVwCiAgICBkaWcgMwogICAgPAogICAgYnogdGVzdF9ib29sX2FycmF5X2FmdGVyX2ZvckA1CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MTYxCiAgICAvLyBhcnIgPSBhcnIuYXBwZW5kKGkgPT0gVHhuLm51bV9hcHBfYXJncykKICAgIHR4biBOdW1BcHBBcmdzCiAgICBkaWcgMQogICAgPT0KICAgIGJ5dGVjXzMgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBkaWcgMgogICAgc3dhcAogICAgaW50Y18xIC8vIDEKICAgIGR1cAogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X2NvbmNhdF9iaXRzCiAgICBidXJ5IDIKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToxNjAKICAgIC8vIGZvciBpIGluIHVyYW5nZShsZW5ndGgpOgogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGIgdGVzdF9ib29sX2FycmF5X2Zvcl9oZWFkZXJAMgoKdGVzdF9ib29sX2FycmF5X2FmdGVyX2ZvckA1OgogICAgcG9wCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MTYzCiAgICAvLyBhc3NlcnQgYXJyLmxlbmd0aCA9PSBsZW5ndGgKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgYnVyeSA0CiAgICBkaWcgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MTY1CiAgICAvLyBpZiBsZW5ndGggPiAwOgogICAgYnogdGVzdF9ib29sX2FycmF5X2FmdGVyX2lmX2Vsc2VANwogICAgZGlnIDIKICAgIGFzc2VydCAvLyBpbmRleCBvdXQgb2YgYm91bmRzCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MTY2CiAgICAvLyBhc3NlcnQgbm90IGFyclswXSwgImV4cGVjdGVkIGVsZW1lbnQgMCB0byBiZSBGYWxzZSIKICAgIGR1cAogICAgcHVzaGludCAxNgogICAgZ2V0Yml0CiAgICAhCiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZWxlbWVudCAwIHRvIGJlIEZhbHNlCgp0ZXN0X2Jvb2xfYXJyYXlfYWZ0ZXJfaWZfZWxzZUA3OgogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjE2NwogICAgLy8gaWYgbGVuZ3RoID4gMToKICAgIGRpZyAxCiAgICBpbnRjXzEgLy8gMQogICAgPgogICAgYnogdGVzdF9ib29sX2FycmF5X2FmdGVyX2lmX2Vsc2VAOQogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjE2OAogICAgLy8gYXNzZXJ0IG5vdCBhcnJbMV0sICJleHBlY3RlZCBlbGVtZW50IDEgdG8gYmUgRmFsc2UiCiAgICBpbnRjXzEgLy8gMQogICAgZGlnIDMKICAgIDwKICAgIGFzc2VydCAvLyBpbmRleCBvdXQgb2YgYm91bmRzCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MTY4CiAgICAvLyBhc3NlcnQgbm90IGFyclsxXSwgImV4cGVjdGVkIGVsZW1lbnQgMSB0byBiZSBGYWxzZSIKICAgIGR1cAogICAgcHVzaGludCAxNwogICAgZ2V0Yml0CiAgICAhCiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZWxlbWVudCAxIHRvIGJlIEZhbHNlCgp0ZXN0X2Jvb2xfYXJyYXlfYWZ0ZXJfaWZfZWxzZUA5OgogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjE2OQogICAgLy8gaWYgbGVuZ3RoID4gMjoKICAgIGRpZyAxCiAgICBpbnRjXzIgLy8gMgogICAgPgogICAgYnogdGVzdF9ib29sX2FycmF5X2FmdGVyX2lmX2Vsc2VAMTEKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToxNzAKICAgIC8vIGFzc2VydCBhcnJbMl0sICJleHBlY3RlZCBlbGVtZW50IDIgdG8gYmUgVHJ1ZSIKICAgIGludGNfMiAvLyAyCiAgICBkaWcgMwogICAgPAogICAgYXNzZXJ0IC8vIGluZGV4IG91dCBvZiBib3VuZHMKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToxNzAKICAgIC8vIGFzc2VydCBhcnJbMl0sICJleHBlY3RlZCBlbGVtZW50IDIgdG8gYmUgVHJ1ZSIKICAgIGR1cAogICAgcHVzaGludCAxOAogICAgZ2V0Yml0CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgZWxlbWVudCAyIHRvIGJlIFRydWUKCnRlc3RfYm9vbF9hcnJheV9hZnRlcl9pZl9lbHNlQDExOgogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjE3MQogICAgLy8gaWYgbGVuZ3RoID4gMzoKICAgIGRpZyAxCiAgICBwdXNoaW50IDMKICAgID4KICAgIGJ6IHRlc3RfYm9vbF9hcnJheV9hZnRlcl9pZl9lbHNlQDEzCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MTcyCiAgICAvLyBhc3NlcnQgbm90IGFycltsZW5ndGggLSAxXSwgImV4cGVjdGVkIGxhc3QgZWxlbWVudCB0byBiZSBGYWxzZSIKICAgIGRpZyAxCiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgZHVwCiAgICBkaWcgNAogICAgPAogICAgYXNzZXJ0IC8vIGluZGV4IG91dCBvZiBib3VuZHMKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToxNzIKICAgIC8vIGFzc2VydCBub3QgYXJyW2xlbmd0aCAtIDFdLCAiZXhwZWN0ZWQgbGFzdCBlbGVtZW50IHRvIGJlIEZhbHNlIgogICAgcHVzaGludCAxNgogICAgKwogICAgZGlnIDEKICAgIHN3YXAKICAgIGdldGJpdAogICAgIQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGxhc3QgZWxlbWVudCB0byBiZSBGYWxzZQoKdGVzdF9ib29sX2FycmF5X2FmdGVyX2lmX2Vsc2VAMTM6CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MTc0CiAgICAvLyBzZWxmLmcgPSBhcnIKICAgIHB1c2hieXRlcyAiZyIKICAgIGRpZyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjE3NQogICAgLy8gaWYgbGVuZ3RoOgogICAgZGlnIDEKICAgIGJ6IHRlc3RfYm9vbF9hcnJheV9hZnRlcl9pZl9lbHNlQDE1CiAgICBkaWcgMgogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgaXRvYgogICAgZXh0cmFjdCA2IDAKICAgIGRpZyAyCiAgICBleHRyYWN0IDIgMAogICAgZGlnIDIKICAgIGludGNfMCAvLyAwCiAgICBzZXRiaXQKICAgIHVuY292ZXIgMgogICAgcHVzaGludCA3CiAgICArCiAgICBpbnRjXzMgLy8gOAogICAgLwogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIGV4dHJhY3QzCiAgICBjb25jYXQKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToxNzcKICAgIC8vIGFzc2VydCBhcnIubGVuZ3RoID09IGxlbmd0aCAtIDEKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkaWcgMgogICAgaW50Y18xIC8vIDEKICAgIC0KICAgID09CiAgICBhc3NlcnQKCnRlc3RfYm9vbF9hcnJheV9hZnRlcl9pZl9lbHNlQDE1OgogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjE1NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLmFycmF5LmltbXV0YWJsZS5JbW11dGFibGVBcnJheUNvbnRyYWN0LnRlc3RfZml4ZWRfc2l6ZV90dXBsZV9hcnJheVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfZml4ZWRfc2l6ZV90dXBsZV9hcnJheToKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToxODEKICAgIC8vIGFyciA9IEltbXV0YWJsZUFycmF5W3R1cGxlW1VJbnQ2NCwgVUludDY0XV0oKQogICAgYnl0ZWNfMSAvLyAweDAwMDAKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToxODQKICAgIC8vIGZvciBpIGluIHVyYW5nZSg1KToKICAgIGludGNfMCAvLyAwCgp0ZXN0X2ZpeGVkX3NpemVfdHVwbGVfYXJyYXlfZm9yX2hlYWRlckAyOgogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjE4NAogICAgLy8gZm9yIGkgaW4gdXJhbmdlKDUpOgogICAgZHVwCiAgICBwdXNoaW50IDUKICAgIDwKICAgIGJ6IHRlc3RfZml4ZWRfc2l6ZV90dXBsZV9hcnJheV9hZnRlcl9mb3JANQogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjE4NQogICAgLy8gYXJyID0gYXJyLmFwcGVuZCgoaSArIDEsIGkgKyAyKSkKICAgIGR1cAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIHN3YXAKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgaXRvYgogICAgc3dhcAogICAgaXRvYgogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MTg1CiAgICAvLyBhcnIgPSBhcnIuYXBwZW5kKChpICsgMSwgaSArIDIpKQogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAwCiAgICByZXBsYWNlMiAwCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGIgdGVzdF9maXhlZF9zaXplX3R1cGxlX2FycmF5X2Zvcl9oZWFkZXJAMgoKdGVzdF9maXhlZF9zaXplX3R1cGxlX2FycmF5X2FmdGVyX2ZvckA1OgogICAgcG9wCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MTg3CiAgICAvLyBhc3NlcnQgYXJyLmxlbmd0aCA9PSA1CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkdXAKICAgIHB1c2hpbnQgNQogICAgPT0KICAgIGFzc2VydAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjE4OAogICAgLy8gYXNzZXJ0IGFyclswXSA9PSAoVUludDY0KDEpLCBVSW50NjQoMikpCiAgICBkaWcgMQogICAgZXh0cmFjdCAyIDAKICAgIGRpZyAyCiAgICBleHRyYWN0IDIgMTYKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICBzd2FwCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIHN3YXAKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgc3dhcAogICAgaW50Y18yIC8vIDIKICAgID09CiAgICAmJgogICAgYXNzZXJ0CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MTg5CiAgICAvLyBhc3NlcnQgYXJyWy0xXSA9PSAoVUludDY0KDUpLCBVSW50NjQoNikpCiAgICBzd2FwCiAgICBpbnRjXzEgLy8gMQogICAgLQogICAgcHVzaGludCAxNgogICAgKgogICAgcHVzaGludCAxNgogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgc3dhcAogICAgaW50Y18zIC8vIDgKICAgIGV4dHJhY3RfdWludDY0CiAgICBzd2FwCiAgICBwdXNoaW50IDUKICAgID09CiAgICBzd2FwCiAgICBwdXNoaW50IDYKICAgID09CiAgICAmJgogICAgYXNzZXJ0CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MTkxCiAgICAvLyBhcnIgPSBhcnIucG9wKCkKICAgIHB1c2hpbnQgMTYKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9wb3BfZml4ZWRfc2l6ZQogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjE5MgogICAgLy8gYXNzZXJ0IGFyci5sZW5ndGggPT0gNAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgZHVwCiAgICBwdXNoaW50IDQKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToxOTMKICAgIC8vIGFzc2VydCBhcnJbMF0gPT0gKFVJbnQ2NCgxKSwgVUludDY0KDIpKQogICAgZGlnIDEKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMgogICAgZXh0cmFjdCAyIDE2CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgc3dhcAogICAgaW50Y18zIC8vIDgKICAgIGV4dHJhY3RfdWludDY0CiAgICBzd2FwCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIHN3YXAKICAgIGludGNfMiAvLyAyCiAgICA9PQogICAgJiYKICAgIGFzc2VydAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjE5NAogICAgLy8gYXNzZXJ0IGFyclstMV0gPT0gKFVJbnQ2NCg0KSwgVUludDY0KDUpKQogICAgc3dhcAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIHB1c2hpbnQgMTYKICAgICoKICAgIHB1c2hpbnQgMTYKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIHN3YXAKICAgIGludGNfMyAvLyA4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgc3dhcAogICAgcHVzaGludCA0CiAgICA9PQogICAgc3dhcAogICAgcHVzaGludCA1CiAgICA9PQogICAgJiYKICAgIGFzc2VydAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjE5NQogICAgLy8gc2VsZi5jID0gYXJyCiAgICBwdXNoYnl0ZXMgImMiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjE3OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLmFycmF5LmltbXV0YWJsZS5JbW11dGFibGVBcnJheUNvbnRyYWN0LnRlc3RfZml4ZWRfc2l6ZV9uYW1lZF90dXBsZV9hcnJheVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfZml4ZWRfc2l6ZV9uYW1lZF90dXBsZV9hcnJheToKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToxOTkKICAgIC8vIGFyciA9IEltbXV0YWJsZUFycmF5W015VHVwbGVdKCkKICAgIGJ5dGVjXzEgLy8gMHgwMDAwCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MjAyCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoNSk6CiAgICBpbnRjXzAgLy8gMAoKdGVzdF9maXhlZF9zaXplX25hbWVkX3R1cGxlX2FycmF5X2Zvcl9oZWFkZXJAMjoKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToyMDIKICAgIC8vIGZvciBpIGluIHVyYW5nZSg1KToKICAgIGR1cAogICAgcHVzaGludCA1CiAgICA8CiAgICBieiB0ZXN0X2ZpeGVkX3NpemVfbmFtZWRfdHVwbGVfYXJyYXlfYWZ0ZXJfZm9yQDUKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToyMDMKICAgIC8vIGFyciA9IGFyci5hcHBlbmQoTXlUdXBsZShmb289aSwgYmFyPWkgJSAyID09IDAsIGJhej1pICogMyAlIDIgPT0gMCkpCiAgICBkdXAKICAgIGludGNfMiAvLyAyCiAgICAlCiAgICAhCiAgICBkaWcgMQogICAgcHVzaGludCAzCiAgICAqCiAgICBpbnRjXzIgLy8gMgogICAgJQogICAgIQogICAgZGlnIDIKICAgIGl0b2IKICAgIGJ5dGVjXzMgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgNAogICAgc2V0Yml0CiAgICBpbnRjXzEgLy8gMQogICAgdW5jb3ZlciAzCiAgICBzZXRiaXQKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjIwMwogICAgLy8gYXJyID0gYXJyLmFwcGVuZChNeVR1cGxlKGZvbz1pLCBiYXI9aSAlIDIgPT0gMCwgYmF6PWkgKiAzICUgMiA9PSAwKSkKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMAogICAgcmVwbGFjZTIgMAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MjAyCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoNSk6CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYiB0ZXN0X2ZpeGVkX3NpemVfbmFtZWRfdHVwbGVfYXJyYXlfZm9yX2hlYWRlckAyCgp0ZXN0X2ZpeGVkX3NpemVfbmFtZWRfdHVwbGVfYXJyYXlfYWZ0ZXJfZm9yQDU6CiAgICBwb3AKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToyMDUKICAgIC8vIGFzc2VydCBhcnIubGVuZ3RoID09IDUKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIHB1c2hpbnQgNQogICAgPT0KICAgIGFzc2VydAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjIwNgogICAgLy8gZm9vLCBiYXIsIGJheiA9IGFyclswXQogICAgZHVwCiAgICBleHRyYWN0IDIgOQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIGRpZyAxCiAgICBwdXNoaW50IDY0CiAgICBnZXRiaXQKICAgIHVuY292ZXIgMgogICAgcHVzaGludCA2NQogICAgZ2V0Yml0CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MjA3CiAgICAvLyBhc3NlcnQgZm9vID09IDAKICAgIHVuY292ZXIgMgogICAgIQogICAgYXNzZXJ0CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MjA4CiAgICAvLyBhc3NlcnQgYmFyCiAgICBzd2FwCiAgICBhc3NlcnQKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToyMDkKICAgIC8vIGFzc2VydCBiYXoKICAgIGFzc2VydAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjIxMAogICAgLy8gc2VsZi5kID0gYXJyCiAgICBwdXNoYnl0ZXMgImQiCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjE5NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLmFycmF5LmltbXV0YWJsZS5JbW11dGFibGVBcnJheUNvbnRyYWN0LnRlc3RfZHluYW1pY19zaXplZF90dXBsZV9hcnJheVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfZHluYW1pY19zaXplZF90dXBsZV9hcnJheToKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToyMTcKICAgIC8vIGZvciBpIGluIHVyYW5nZSg1KToKICAgIGludGNfMCAvLyAwCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MjE0CiAgICAvLyBhcnIgPSBJbW11dGFibGVBcnJheVt0dXBsZVtVSW50NjQsIEJ5dGVzXV0oKQogICAgYnl0ZWNfMSAvLyAweDAwMDAKCnRlc3RfZHluYW1pY19zaXplZF90dXBsZV9hcnJheV9mb3JfaGVhZGVyQDI6CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MjE3CiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoNSk6CiAgICBkaWcgMQogICAgcHVzaGludCA1CiAgICA8CiAgICBieiB0ZXN0X2R5bmFtaWNfc2l6ZWRfdHVwbGVfYXJyYXlfYWZ0ZXJfZm9yQDUKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToyMTgKICAgIC8vIGFyciA9IGFyci5hcHBlbmQoKGkgKyAxLCBvcC5iemVybyhpKSkpCiAgICBkaWcgMQogICAgZHVwCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgc3dhcAogICAgYnplcm8KICAgIGRpZyAxCiAgICBpdG9iCiAgICBkaWcgMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGJ5dGVjIDYgLy8gMHgwMDBhCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWMgNCAvLyAweDAwMDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICBpbnRjXzEgLy8gMQogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnQKICAgIHN3YXAKICAgIGJ1cnkgMgogICAgYiB0ZXN0X2R5bmFtaWNfc2l6ZWRfdHVwbGVfYXJyYXlfZm9yX2hlYWRlckAyCgp0ZXN0X2R5bmFtaWNfc2l6ZWRfdHVwbGVfYXJyYXlfYWZ0ZXJfZm9yQDU6CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MjIwCiAgICAvLyBhc3NlcnQgYXJyLmxlbmd0aCA9PSA1CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBwdXNoaW50IDUKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToyMjEKICAgIC8vIGZvciBpIGluIHVyYW5nZSg1KToKICAgIGludGNfMCAvLyAwCiAgICBidXJ5IDIKCnRlc3RfZHluYW1pY19zaXplZF90dXBsZV9hcnJheV9mb3JfaGVhZGVyQDY6CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MjIxCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoNSk6CiAgICBkaWcgMQogICAgcHVzaGludCA1CiAgICA8CiAgICBieiB0ZXN0X2R5bmFtaWNfc2l6ZWRfdHVwbGVfYXJyYXlfYWZ0ZXJfZm9yQDkKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToyMjIKICAgIC8vIGFzc2VydCBhcnJbaV1bMF0gPT0gaSArIDEsICJleHBlY3RlZCAxc3QgZWxlbWVudCB0byBiZSBjb3JyZWN0IgogICAgZHVwCiAgICBkaWcgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfcmVhZF9keW5hbWljX2VsZW1lbnQKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICBkaWcgMQogICAgaW50Y18zIC8vIDgKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMgogICAgbGVuCiAgICB1bmNvdmVyIDMKICAgIGNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMgogICAgaW50Y18xIC8vIDEKICAgICsKICAgIHVuY292ZXIgMgogICAgZGlnIDEKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgMXN0IGVsZW1lbnQgdG8gYmUgY29ycmVjdAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjIyMwogICAgLy8gYXNzZXJ0IGFycltpXVsxXS5sZW5ndGggPT0gaSwgImV4cGVjdGVkIDJuZCBlbGVtZW50IHRvIGJlIGNvcnJlY3QiCiAgICBzd2FwCiAgICBsZW4KICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCAybmQgZWxlbWVudCB0byBiZSBjb3JyZWN0CiAgICBidXJ5IDIKICAgIGIgdGVzdF9keW5hbWljX3NpemVkX3R1cGxlX2FycmF5X2Zvcl9oZWFkZXJANgoKdGVzdF9keW5hbWljX3NpemVkX3R1cGxlX2FycmF5X2FmdGVyX2ZvckA5OgogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjIyNQogICAgLy8gYXJyID0gYXJyLnBvcCgpCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfcG9wX2R5bmFtaWNfZWxlbWVudAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjIyNgogICAgLy8gYXNzZXJ0IGFyci5sZW5ndGggPT0gNAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgZHVwCiAgICBwdXNoaW50IDQKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToyMjcKICAgIC8vIGFzc2VydCBhcnJbMF0gPT0gKFVJbnQ2NCgxKSwgb3AuYnplcm8oMCkpLCAiZXhwZWN0ZWQgMSwgMCIKICAgIGRpZyAxCiAgICBpbnRjXzAgLy8gMAogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X3JlYWRfZHluYW1pY19lbGVtZW50CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZGlnIDEKICAgIGludGNfMyAvLyA4CiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDIKICAgIGxlbgogICAgdW5jb3ZlciAzCiAgICBjb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBleHRyYWN0IDIgMAogICAgc3dhcAogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBpbnRjXzAgLy8gMAogICAgYnplcm8KICAgIHVuY292ZXIgMgogICAgPT0KICAgICYmCiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgMSwgMAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjIyOAogICAgLy8gYXNzZXJ0IGFyclstMV0gPT0gKFVJbnQ2NCg0KSwgb3AuYnplcm8oMykpLCAiZXhwZWN0ZWQgNCwgMyIKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkaWcgMQogICAgc3dhcAogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X3JlYWRfZHluYW1pY19lbGVtZW50CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZGlnIDEKICAgIGludGNfMyAvLyA4CiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDIKICAgIGxlbgogICAgdW5jb3ZlciAzCiAgICBjb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBleHRyYWN0IDIgMAogICAgc3dhcAogICAgcHVzaGludCA0CiAgICA9PQogICAgcHVzaGludCAzCiAgICBiemVybwogICAgdW5jb3ZlciAyCiAgICA9PQogICAgJiYKICAgIGFzc2VydCAvLyBleHBlY3RlZCA0LCAzCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MjI5CiAgICAvLyBzZWxmLmUgPSBhcnIKICAgIHB1c2hieXRlcyAiZSIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MjEyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RfY2FzZXMuYXJyYXkuaW1tdXRhYmxlLkltbXV0YWJsZUFycmF5Q29udHJhY3QudGVzdF9keW5hbWljX3NpemVkX25hbWVkX3R1cGxlX2FycmF5W3JvdXRpbmddKCkgLT4gdm9pZDoKdGVzdF9keW5hbWljX3NpemVkX25hbWVkX3R1cGxlX2FycmF5OgogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjIzNgogICAgLy8gZm9yIGkgaW4gdXJhbmdlKDUpOgogICAgaW50Y18wIC8vIDAKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToyMzMKICAgIC8vIGFyciA9IEltbXV0YWJsZUFycmF5W015RHluYW1pY1NpemVkVHVwbGVdKCkKICAgIGJ5dGVjXzEgLy8gMHgwMDAwCgp0ZXN0X2R5bmFtaWNfc2l6ZWRfbmFtZWRfdHVwbGVfYXJyYXlfZm9yX2hlYWRlckAyOgogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjIzNgogICAgLy8gZm9yIGkgaW4gdXJhbmdlKDUpOgogICAgZGlnIDEKICAgIHB1c2hpbnQgNQogICAgPAogICAgYnogdGVzdF9keW5hbWljX3NpemVkX25hbWVkX3R1cGxlX2FycmF5X2FmdGVyX2ZvckA1CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MjM3CiAgICAvLyBhcnIgPSBhcnIuYXBwZW5kKE15RHluYW1pY1NpemVkVHVwbGUoZm9vPWkgKyAxLCBiYXI9dGltZXMoaSkpKQogICAgZGlnIDEKICAgIGR1cAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIHN3YXAKICAgIGNhbGxzdWIgdGltZXMKICAgIGRpZyAxCiAgICBpdG9iCiAgICBkaWcgMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGJ5dGVjIDYgLy8gMHgwMDBhCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWMgNCAvLyAweDAwMDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICBpbnRjXzEgLy8gMQogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnQKICAgIHN3YXAKICAgIGJ1cnkgMgogICAgYiB0ZXN0X2R5bmFtaWNfc2l6ZWRfbmFtZWRfdHVwbGVfYXJyYXlfZm9yX2hlYWRlckAyCgp0ZXN0X2R5bmFtaWNfc2l6ZWRfbmFtZWRfdHVwbGVfYXJyYXlfYWZ0ZXJfZm9yQDU6CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MjM5CiAgICAvLyBhc3NlcnQgYXJyLmxlbmd0aCA9PSA1CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBwdXNoaW50IDUKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToyNDAKICAgIC8vIGZvciBpIGluIHVyYW5nZSg1KToKICAgIGludGNfMCAvLyAwCiAgICBidXJ5IDIKCnRlc3RfZHluYW1pY19zaXplZF9uYW1lZF90dXBsZV9hcnJheV9mb3JfaGVhZGVyQDY6CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MjQwCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoNSk6CiAgICBkaWcgMQogICAgcHVzaGludCA1CiAgICA8CiAgICBieiB0ZXN0X2R5bmFtaWNfc2l6ZWRfbmFtZWRfdHVwbGVfYXJyYXlfYWZ0ZXJfZm9yQDkKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToyNDEKICAgIC8vIGFzc2VydCBhcnJbaV1bMF0gPT0gaSArIDEsICJleHBlY3RlZCAxc3QgZWxlbWVudCB0byBiZSBjb3JyZWN0IgogICAgZHVwCiAgICBkaWcgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfcmVhZF9keW5hbWljX2VsZW1lbnQKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICBkaWcgMQogICAgaW50Y18zIC8vIDgKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMgogICAgbGVuCiAgICB1bmNvdmVyIDMKICAgIGNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMgogICAgaW50Y18xIC8vIDEKICAgICsKICAgIHVuY292ZXIgMgogICAgZGlnIDEKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgMXN0IGVsZW1lbnQgdG8gYmUgY29ycmVjdAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjI0MgogICAgLy8gYXNzZXJ0IGFycltpXVsxXSA9PSB0aW1lcyhpKSwgImV4cGVjdGVkIDJuZCBlbGVtZW50IHRvIGJlIGNvcnJlY3QiCiAgICB1bmNvdmVyIDIKICAgIGNhbGxzdWIgdGltZXMKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCAybmQgZWxlbWVudCB0byBiZSBjb3JyZWN0CiAgICBidXJ5IDIKICAgIGIgdGVzdF9keW5hbWljX3NpemVkX25hbWVkX3R1cGxlX2FycmF5X2Zvcl9oZWFkZXJANgoKdGVzdF9keW5hbWljX3NpemVkX25hbWVkX3R1cGxlX2FycmF5X2FmdGVyX2ZvckA5OgogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjI0NAogICAgLy8gYXJyID0gYXJyLnBvcCgpCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfcG9wX2R5bmFtaWNfZWxlbWVudAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjI0NQogICAgLy8gYXNzZXJ0IGFyci5sZW5ndGggPT0gNAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgZHVwCiAgICBwdXNoaW50IDQKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToyNDYKICAgIC8vIGFzc2VydCBhcnJbMF0gPT0gTXlEeW5hbWljU2l6ZWRUdXBsZShVSW50NjQoMSksIFN0cmluZygpKSwgImV4cGVjdGVkIDEsIDAiCiAgICBkaWcgMQogICAgaW50Y18wIC8vIDAKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9yZWFkX2R5bmFtaWNfZWxlbWVudAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIGRpZyAxCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAyCiAgICBsZW4KICAgIHVuY292ZXIgMwogICAgY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgZXh0cmFjdCAyIDAKICAgIHN3YXAKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgc3dhcAogICAgYnl0ZWNfMiAvLyAiIgogICAgPT0KICAgICYmCiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgMSwgMAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjI0NwogICAgLy8gYXNzZXJ0IGFyclstMV0gPT0gTXlEeW5hbWljU2l6ZWRUdXBsZShVSW50NjQoNCksIFN0cmluZygiICAgIikpLCAiZXhwZWN0ZWQgNCwgMyIKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICBkaWcgMQogICAgc3dhcAogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X3JlYWRfZHluYW1pY19lbGVtZW50CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZGlnIDEKICAgIGludGNfMyAvLyA4CiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDIKICAgIGxlbgogICAgdW5jb3ZlciAzCiAgICBjb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBleHRyYWN0IDIgMAogICAgc3dhcAogICAgcHVzaGludCA0CiAgICA9PQogICAgc3dhcAogICAgcHVzaGJ5dGVzICIgICAiCiAgICA9PQogICAgJiYKICAgIGFzc2VydCAvLyBleHBlY3RlZCA0LCAzCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MjQ4CiAgICAvLyBzZWxmLmYgPSBhcnIKICAgIHB1c2hieXRlcyAiZiIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MjMxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RfY2FzZXMuYXJyYXkuaW1tdXRhYmxlLkltbXV0YWJsZUFycmF5Q29udHJhY3QudGVzdF9pbXBsaWNpdF9jb252ZXJzaW9uX2xvZ1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfaW1wbGljaXRfY29udmVyc2lvbl9sb2c6CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MjUwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8dWludDY0PgogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjI1MgogICAgLy8gbG9nKGFycikKICAgIGxvZwogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjI1MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLmFycmF5LmltbXV0YWJsZS5JbW11dGFibGVBcnJheUNvbnRyYWN0LnRlc3RfaW1wbGljaXRfY29udmVyc2lvbl9lbWl0W3JvdXRpbmddKCkgLT4gdm9pZDoKdGVzdF9pbXBsaWNpdF9jb252ZXJzaW9uX2VtaXQ6CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MjU0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8dWludDY0PgogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjI1NgogICAgLy8gYXJjNC5lbWl0KCJlbWl0X3Rlc3QiLCBhcnIpCiAgICBwdXNoYnl0ZXMgMHhmYTQwYzA1MzAwMDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MjU0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RfY2FzZXMuYXJyYXkuaW1tdXRhYmxlLkltbXV0YWJsZUFycmF5Q29udHJhY3QudGVzdF9uZXN0ZWRfYXJyYXlbcm91dGluZ10oKSAtPiB2b2lkOgp0ZXN0X25lc3RlZF9hcnJheToKICAgIGJ5dGVjXzIgLy8gIiIKICAgIGR1cAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjI1OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cG4gMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgY292ZXIgMwogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGNvdmVyIDIKICAgIGR1cAogICAgbGVuCiAgICBjb3ZlciAzCiAgICBleHRyYWN0IDIgMAogICAgaW50Y18wIC8vIDAKCnRlc3RfbmVzdGVkX2FycmF5X2Zvcl9oZWFkZXJAMToKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToyNTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBkdXAKICAgIGRpZyA2CiAgICA8CiAgICBieiB0ZXN0X25lc3RlZF9hcnJheV9hZnRlcl9mb3JANAogICAgZHVwCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgZGlnIDIKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBlbmNvZGluZwogICAgZHVwCiAgICB1bmNvdmVyIDYKICAgIGR1cAogICAgY292ZXIgNAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHRhaWwgcG9pbnRlciBmb3IgKGxlbisobGVuK3VpbnQ2NFtdKVtdKQogICAgZGlnIDEKICAgIGxlbgogICAgc3Vic3RyaW5nMwogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgKwogICAgY292ZXIgMwogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGIgdGVzdF9uZXN0ZWRfYXJyYXlfZm9yX2hlYWRlckAxCgp0ZXN0X25lc3RlZF9hcnJheV9hZnRlcl9mb3JANDoKICAgIHBvcG4gMgogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjI1OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHN3YXAKICAgIGludGNfMiAvLyAyCiAgICArCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LmR5bmFtaWNfYXJyYXk8dWludDY0Pj4KICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToyNjItMjYzCiAgICAvLyAjIGFkZCBuIG5ldyBhcnJheXMKICAgIC8vIGZvciBpIGluIHVyYW5nZShhcnJfdG9fYWRkKToKICAgIGludGNfMCAvLyAwCgp0ZXN0X25lc3RlZF9hcnJheV9mb3JfaGVhZGVyQDY6CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MjYyLTI2MwogICAgLy8gIyBhZGQgbiBuZXcgYXJyYXlzCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoYXJyX3RvX2FkZCk6CiAgICBkdXAKICAgIGRpZyA0CiAgICA8CiAgICBieiB0ZXN0X25lc3RlZF9hcnJheV9hZnRlcl9mb3JAMTMKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToyNjQKICAgIC8vIGV4dHJhX2FyciA9IEltbXV0YWJsZUFycmF5W1VJbnQ2NF0oKQogICAgYnl0ZWNfMSAvLyAweDAwMDAKICAgIHN3YXAKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToyNjUKICAgIC8vIGZvciBqIGluIHVyYW5nZShpKToKICAgIGludGNfMCAvLyAwCgp0ZXN0X25lc3RlZF9hcnJheV9mb3JfaGVhZGVyQDg6CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MjY1CiAgICAvLyBmb3IgaiBpbiB1cmFuZ2UoaSk6CiAgICBkdXAKICAgIGRpZyAyCiAgICA8CiAgICBieiB0ZXN0X25lc3RlZF9hcnJheV9hZnRlcl9mb3JAMTEKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToyNjYKICAgIC8vIGV4dHJhX2FyciA9IGV4dHJhX2Fyci5hcHBlbmQoaikKICAgIGR1cAogICAgaXRvYgogICAgdW5jb3ZlciAzCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjI2NgogICAgLy8gZXh0cmFfYXJyID0gZXh0cmFfYXJyLmFwcGVuZChqKQogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAwCiAgICByZXBsYWNlMiAwCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGNvdmVyIDIKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToyNjUKICAgIC8vIGZvciBqIGluIHVyYW5nZShpKToKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBiIHRlc3RfbmVzdGVkX2FycmF5X2Zvcl9oZWFkZXJAOAoKdGVzdF9uZXN0ZWRfYXJyYXlfYWZ0ZXJfZm9yQDExOgogICAgcG9wCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MjY3CiAgICAvLyBhcnIgPSBhcnIuYXBwZW5kKGV4dHJhX2FycikKICAgIGJ5dGVjIDQgLy8gMHgwMDAyCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICBpbnRjXzEgLy8gMQogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnQKICAgIHN3YXAKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToyNjItMjYzCiAgICAvLyAjIGFkZCBuIG5ldyBhcnJheXMKICAgIC8vIGZvciBpIGluIHVyYW5nZShhcnJfdG9fYWRkKToKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBiIHRlc3RfbmVzdGVkX2FycmF5X2Zvcl9oZWFkZXJANgoKdGVzdF9uZXN0ZWRfYXJyYXlfYWZ0ZXJfZm9yQDEzOgogICAgcG9wCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MjY5LTI3MAogICAgLy8gIyBzdW0gaW5uZXIgYXJyYXlzIGFuZCByZXR1cm4gYW4gYXJyYXkgY29udGFpbmluZyBzdW1zCiAgICAvLyB0b3RhbHMgPSBJbW11dGFibGVBcnJheVtVSW50NjRdKCkKICAgIGJ5dGVjXzEgLy8gMHgwMDAwCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MjcxCiAgICAvLyBmb3IgaW5uZXJfYXJyIGluIGFycjoKICAgIGRpZyAxCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgYnVyeSA2CiAgICBpbnRjXzAgLy8gMAoKdGVzdF9uZXN0ZWRfYXJyYXlfZm9yX2hlYWRlckAxNDoKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToyNzEKICAgIC8vIGZvciBpbm5lcl9hcnIgaW4gYXJyOgogICAgZHVwCiAgICBkaWcgNwogICAgPAogICAgYnogdGVzdF9uZXN0ZWRfYXJyYXlfYWZ0ZXJfZm9yQDE3CiAgICBkaWcgMgogICAgZXh0cmFjdCAyIDAKICAgIGRpZyAxCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgZGlnIDEKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBleHRyYWN0MwogICAgZHVwCiAgICBjb3ZlciA0CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6NTE5CiAgICAvLyB0b3RhbCA9IFVJbnQ2NCgpCiAgICBpbnRjXzAgLy8gMAogICAgY292ZXIgMwogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjUyMAogICAgLy8gZm9yIGkgaW4gYXJyOgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGJ1cnkgOAogICAgaW50Y18wIC8vIDAKCnRlc3RfbmVzdGVkX2FycmF5X2Zvcl9oZWFkZXJAMTk6CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6NTIwCiAgICAvLyBmb3IgaSBpbiBhcnI6CiAgICBkdXAKICAgIGRpZyA5CiAgICA8CiAgICBieiB0ZXN0X25lc3RlZF9hcnJheV9hZnRlcl9mb3JAMjEKICAgIGRpZyA1CiAgICBleHRyYWN0IDIgMAogICAgZGlnIDEKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjUyMQogICAgLy8gdG90YWwgKz0gaQogICAgdW5jb3ZlciA0CiAgICArCiAgICBjb3ZlciAzCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYiB0ZXN0X25lc3RlZF9hcnJheV9mb3JfaGVhZGVyQDE5Cgp0ZXN0X25lc3RlZF9hcnJheV9hZnRlcl9mb3JAMjE6CiAgICBwb3AKICAgIHVuY292ZXIgNAogICAgcG9wCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MjcyCiAgICAvLyB0b3RhbHMgPSB0b3RhbHMuYXBwZW5kKHN1bV9hcnIoaW5uZXJfYXJyKSkKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgdW5jb3ZlciAyCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjI3MgogICAgLy8gdG90YWxzID0gdG90YWxzLmFwcGVuZChzdW1fYXJyKGlubmVyX2FycikpCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDAKICAgIHJlcGxhY2UyIDAKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGIgdGVzdF9uZXN0ZWRfYXJyYXlfZm9yX2hlYWRlckAxNAoKdGVzdF9uZXN0ZWRfYXJyYXlfYWZ0ZXJfZm9yQDE3OgogICAgcG9wCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MjU4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RfY2FzZXMuYXJyYXkuaW1tdXRhYmxlLkltbXV0YWJsZUFycmF5Q29udHJhY3QudGVzdF9iaXRfcGFja2VkX3R1cGxlc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfYml0X3BhY2tlZF90dXBsZXM6CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6Mjc4CiAgICAvLyBhcnIyID0gSW1tdXRhYmxlQXJyYXlbVHdvQm9vbFR1cGxlXSgpCiAgICBieXRlY18xIC8vIDB4MDAwMAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjI3OS0yODEKICAgIC8vIGFycjcgPSBJbW11dGFibGVBcnJheVtTZXZlbkJvb2xUdXBsZV0oKQogICAgLy8gYXJyOCA9IEltbXV0YWJsZUFycmF5W0VpZ2h0Qm9vbFR1cGxlXSgpCiAgICAvLyBhcnI5ID0gSW1tdXRhYmxlQXJyYXlbTmluZUJvb2xUdXBsZV0oKQogICAgZHVwbiAzCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6Mjg3CiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoNSk6CiAgICBpbnRjXzAgLy8gMAoKdGVzdF9iaXRfcGFja2VkX3R1cGxlc19mb3JfaGVhZGVyQDI6CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6Mjg3CiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoNSk6CiAgICBkdXAKICAgIHB1c2hpbnQgNQogICAgPAogICAgYnogdGVzdF9iaXRfcGFja2VkX3R1cGxlc19hZnRlcl9mb3JANQogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjI4OAogICAgLy8gYXJyMiA9IGFycjIuYXBwZW5kKFR3b0Jvb2xUdXBsZShhPWkgPT0gMCwgYj1pID09IDEpKQogICAgZHVwCiAgICAhCiAgICBkaWcgMQogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBieXRlY18zIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDMKICAgIHNldGJpdAogICAgaW50Y18xIC8vIDEKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICB1bmNvdmVyIDUKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6Mjg4CiAgICAvLyBhcnIyID0gYXJyMi5hcHBlbmQoVHdvQm9vbFR1cGxlKGE9aSA9PSAwLCBiPWkgPT0gMSkpCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDAKICAgIHJlcGxhY2UyIDAKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIGNvdmVyIDUKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToyOTIKICAgIC8vIGJhcj1pICsgMSwKICAgIGRpZyAxCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjI5NQogICAgLy8gYz1pID09IDIsCiAgICBkaWcgMgogICAgaW50Y18yIC8vIDIKICAgID09CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6Mjk2CiAgICAvLyBkPWkgPT0gMywKICAgIGRpZyAzCiAgICBwdXNoaW50IDMKICAgID09CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6Mjk3CiAgICAvLyBlPWkgPT0gNCwKICAgIGRpZyA0CiAgICBwdXNoaW50IDQKICAgID09CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6Mjk4CiAgICAvLyBmPWkgPT0gNSwKICAgIGRpZyA1CiAgICBwdXNoaW50IDUKICAgID09CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6Mjk5CiAgICAvLyBnPWkgPT0gNiwKICAgIGRpZyA2CiAgICBwdXNoaW50IDYKICAgID09CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6Mjg5LTMwMQogICAgLy8gYXJyNyA9IGFycjcuYXBwZW5kKAogICAgLy8gICAgIFNldmVuQm9vbFR1cGxlKAogICAgLy8gICAgICAgICBmb289aSwKICAgIC8vICAgICAgICAgYmFyPWkgKyAxLAogICAgLy8gICAgICAgICBhPWkgPT0gMCwKICAgIC8vICAgICAgICAgYj1pID09IDEsCiAgICAvLyAgICAgICAgIGM9aSA9PSAyLAogICAgLy8gICAgICAgICBkPWkgPT0gMywKICAgIC8vICAgICAgICAgZT1pID09IDQsCiAgICAvLyAgICAgICAgIGY9aSA9PSA1LAogICAgLy8gICAgICAgICBnPWkgPT0gNiwKICAgIC8vICAgICApCiAgICAvLyApCiAgICBkaWcgNwogICAgaXRvYgogICAgdW5jb3ZlciA3CiAgICBpbnRjXzIgLy8gMgogICAgdW5jb3ZlciA3CiAgICBzZXRiaXQKICAgIHB1c2hpbnQgMwogICAgdW5jb3ZlciA2CiAgICBzZXRiaXQKICAgIHB1c2hpbnQgNAogICAgdW5jb3ZlciA1CiAgICBzZXRiaXQKICAgIHB1c2hpbnQgNQogICAgdW5jb3ZlciA0CiAgICBzZXRiaXQKICAgIHB1c2hpbnQgNgogICAgdW5jb3ZlciAzCiAgICBzZXRiaXQKICAgIGR1cDIKICAgIGNvbmNhdAogICAgZGlnIDMKICAgIGl0b2IKICAgIHN3YXAKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIHVuY292ZXIgOAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weToyODktMzAxCiAgICAvLyBhcnI3ID0gYXJyNy5hcHBlbmQoCiAgICAvLyAgICAgU2V2ZW5Cb29sVHVwbGUoCiAgICAvLyAgICAgICAgIGZvbz1pLAogICAgLy8gICAgICAgICBiYXI9aSArIDEsCiAgICAvLyAgICAgICAgIGE9aSA9PSAwLAogICAgLy8gICAgICAgICBiPWkgPT0gMSwKICAgIC8vICAgICAgICAgYz1pID09IDIsCiAgICAvLyAgICAgICAgIGQ9aSA9PSAzLAogICAgLy8gICAgICAgICBlPWkgPT0gNCwKICAgIC8vICAgICAgICAgZj1pID09IDUsCiAgICAvLyAgICAgICAgIGc9aSA9PSA2LAogICAgLy8gICAgICkKICAgIC8vICkKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMAogICAgcmVwbGFjZTIgMAogICAgc3dhcAogICAgY29uY2F0CiAgICBjb3ZlciA3CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MzEzCiAgICAvLyBoPWkgPT0gNywKICAgIGRpZyA0CiAgICBwdXNoaW50IDcKICAgID09CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MzAyLTMxNQogICAgLy8gYXJyOCA9IGFycjguYXBwZW5kKAogICAgLy8gICAgIEVpZ2h0Qm9vbFR1cGxlKAogICAgLy8gICAgICAgICBmb289aSwKICAgIC8vICAgICAgICAgYmFyPWkgKyAxLAogICAgLy8gICAgICAgICBhPWkgPT0gMCwKICAgIC8vICAgICAgICAgYj1pID09IDEsCiAgICAvLyAgICAgICAgIGM9aSA9PSAyLAogICAgLy8gICAgICAgICBkPWkgPT0gMywKICAgIC8vICAgICAgICAgZT1pID09IDQsCiAgICAvLyAgICAgICAgIGY9aSA9PSA1LAogICAgLy8gICAgICAgICBnPWkgPT0gNiwKICAgIC8vICAgICAgICAgaD1pID09IDcsCiAgICAvLyAgICAgKQogICAgLy8gKQogICAgdW5jb3ZlciAyCiAgICBwdXNoaW50IDcKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBkaWcgMgogICAgY29uY2F0CiAgICB1bmNvdmVyIDYKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MzAyLTMxNQogICAgLy8gYXJyOCA9IGFycjguYXBwZW5kKAogICAgLy8gICAgIEVpZ2h0Qm9vbFR1cGxlKAogICAgLy8gICAgICAgICBmb289aSwKICAgIC8vICAgICAgICAgYmFyPWkgKyAxLAogICAgLy8gICAgICAgICBhPWkgPT0gMCwKICAgIC8vICAgICAgICAgYj1pID09IDEsCiAgICAvLyAgICAgICAgIGM9aSA9PSAyLAogICAgLy8gICAgICAgICBkPWkgPT0gMywKICAgIC8vICAgICAgICAgZT1pID09IDQsCiAgICAvLyAgICAgICAgIGY9aSA9PSA1LAogICAgLy8gICAgICAgICBnPWkgPT0gNiwKICAgIC8vICAgICAgICAgaD1pID09IDcsCiAgICAvLyAgICAgKQogICAgLy8gKQogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAwCiAgICByZXBsYWNlMiAwCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGNvdmVyIDUKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTozMjgKICAgIC8vIGk9aSA9PSA4LAogICAgdW5jb3ZlciAzCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTozMTYtMzMwCiAgICAvLyBhcnI5ID0gYXJyOS5hcHBlbmQoCiAgICAvLyAgICAgTmluZUJvb2xUdXBsZSgKICAgIC8vICAgICAgICAgZm9vPWksCiAgICAvLyAgICAgICAgIGJhcj1pICsgMSwKICAgIC8vICAgICAgICAgYT1pID09IDAsCiAgICAvLyAgICAgICAgIGI9aSA9PSAxLAogICAgLy8gICAgICAgICBjPWkgPT0gMiwKICAgIC8vICAgICAgICAgZD1pID09IDMsCiAgICAvLyAgICAgICAgIGU9aSA9PSA0LAogICAgLy8gICAgICAgICBmPWkgPT0gNSwKICAgIC8vICAgICAgICAgZz1pID09IDYsCiAgICAvLyAgICAgICAgIGg9aSA9PSA3LAogICAgLy8gICAgICAgICBpPWkgPT0gOCwKICAgIC8vICAgICApCiAgICAvLyApCiAgICBieXRlY18zIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTozMTYtMzMwCiAgICAvLyBhcnI5ID0gYXJyOS5hcHBlbmQoCiAgICAvLyAgICAgTmluZUJvb2xUdXBsZSgKICAgIC8vICAgICAgICAgZm9vPWksCiAgICAvLyAgICAgICAgIGJhcj1pICsgMSwKICAgIC8vICAgICAgICAgYT1pID09IDAsCiAgICAvLyAgICAgICAgIGI9aSA9PSAxLAogICAgLy8gICAgICAgICBjPWkgPT0gMiwKICAgIC8vICAgICAgICAgZD1pID09IDMsCiAgICAvLyAgICAgICAgIGU9aSA9PSA0LAogICAgLy8gICAgICAgICBmPWkgPT0gNSwKICAgIC8vICAgICAgICAgZz1pID09IDYsCiAgICAvLyAgICAgICAgIGg9aSA9PSA3LAogICAgLy8gICAgICAgICBpPWkgPT0gOCwKICAgIC8vICAgICApCiAgICAvLyApCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDAKICAgIHJlcGxhY2UyIDAKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgYiB0ZXN0X2JpdF9wYWNrZWRfdHVwbGVzX2Zvcl9oZWFkZXJAMgoKdGVzdF9iaXRfcGFja2VkX3R1cGxlc19hZnRlcl9mb3JANToKICAgIHBvcAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjMzMgogICAgLy8gYXNzZXJ0IGFycjIubGVuZ3RoID09IDUKICAgIHVuY292ZXIgMwogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCA1CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MzMzCiAgICAvLyBhc3NlcnQgYXJyNy5sZW5ndGggPT0gNQogICAgdW5jb3ZlciAzCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBwdXNoaW50IDUKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTozMzQKICAgIC8vIGFzc2VydCBhcnI4Lmxlbmd0aCA9PSA1CiAgICB1bmNvdmVyIDMKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIHB1c2hpbnQgNQogICAgPT0KICAgIGFzc2VydAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjMzNQogICAgLy8gYXNzZXJ0IGFycjkubGVuZ3RoID09IDUKICAgIHVuY292ZXIgMwogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCA1CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MzM2CiAgICAvLyBzZWxmLmJvb2wyID0gYXJyMgogICAgcHVzaGJ5dGVzICJib29sMiIKICAgIHVuY292ZXIgNAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTozMzcKICAgIC8vIHNlbGYuYm9vbDcgPSBhcnI3CiAgICBwdXNoYnl0ZXMgImJvb2w3IgogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjMzOAogICAgLy8gc2VsZi5ib29sOCA9IGFycjgKICAgIHB1c2hieXRlcyAiYm9vbDgiCiAgICB1bmNvdmVyIDIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MzM5CiAgICAvLyBzZWxmLmJvb2w5ID0gYXJyOQogICAgcHVzaGJ5dGVzICJib29sOSIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6Mjc2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RfY2FzZXMuYXJyYXkuaW1tdXRhYmxlLkltbXV0YWJsZUFycmF5Q29udHJhY3Quc3VtX3VpbnRzX2FuZF9sZW5ndGhzX2FuZF90cnVlc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnN1bV91aW50c19hbmRfbGVuZ3Roc19hbmRfdHJ1ZXM6CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MzQxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwbiAyCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzMgLy8gOAogICAgKgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIHN3YXAKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PHVpbnQ2ND4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cG4gMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgY292ZXIgMgogICAgcHVzaGludCA3CiAgICArCiAgICBpbnRjXzMgLy8gOAogICAgLwogICAgaW50Y18yIC8vIDIKICAgICsKICAgIHN3YXAKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGJvb2w+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXBuIDIKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIHB1c2hpbnQgOQogICAgKgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIHN3YXAKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PHRlc3RfY2FzZXMuYXJyYXkuaW1tdXRhYmxlLk15VHVwbGU+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXBuIDIKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBzd2FwCiAgICBkdXAKICAgIGxlbgogICAgY292ZXIgMgogICAgZXh0cmFjdCAyIDAKICAgIGludGNfMCAvLyAwCgpzdW1fdWludHNfYW5kX2xlbmd0aHNfYW5kX3RydWVzX2Zvcl9oZWFkZXJAMToKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTozNDEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBkdXAKICAgIGRpZyA1CiAgICA8CiAgICBieiBzdW1fdWludHNfYW5kX2xlbmd0aHNfYW5kX3RydWVzX2FmdGVyX2ZvckA0CiAgICBkdXAKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBkaWcgMgogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGVuY29kaW5nCiAgICBkdXAKICAgIHVuY292ZXIgNQogICAgZHVwCiAgICBjb3ZlciA0CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgdGFpbCBwb2ludGVyIGZvciAobGVuKyh1aW50NjQsKGxlbit1dGY4W10pKVtdKQogICAgZGlnIDEKICAgIGxlbgogICAgc3Vic3RyaW5nMwogICAgZHVwCiAgICBsZW4KICAgIGRpZyAxCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgdHVwbGUgZW5jb2RpbmcKICAgIGR1cAogICAgcHVzaGludCAxMAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHRhaWwgcG9pbnRlciBhdCBpbmRleCAxIG9mICh1aW50NjQsKGxlbit1dGY4W10pKQogICAgc3dhcAogICAgc3Vic3RyaW5nMwogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIHB1c2hpbnQgMTIKICAgICsKICAgICsKICAgIGNvdmVyIDIKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBiIHN1bV91aW50c19hbmRfbGVuZ3Roc19hbmRfdHJ1ZXNfZm9yX2hlYWRlckAxCgpzdW1fdWludHNfYW5kX2xlbmd0aHNfYW5kX3RydWVzX2FmdGVyX2ZvckA0OgogICAgcG9wbiAyCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MzQxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18yIC8vIDIKICAgICsKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTx0ZXN0X2Nhc2VzLmFycmF5LmltbXV0YWJsZS5NeUR5bmFtaWNTaXplZFR1cGxlPgogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjM0OQogICAgLy8gc3VtMSA9IHN1bTIgPSBzdW0zID0gc3VtNCA9IFVJbnQ2NCgpCiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgaW50Y18wIC8vIDAKICAgIGR1cG4gMwoKc3VtX3VpbnRzX2FuZF9sZW5ndGhzX2FuZF90cnVlc19mb3JfaGVhZGVyQDY6CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MzUwCiAgICAvLyBmb3IgaSBpbiBhcnIxOgogICAgZHVwCiAgICBkaWcgMTIKICAgIDwKICAgIGJ6IHN1bV91aW50c19hbmRfbGVuZ3Roc19hbmRfdHJ1ZXNfYWZ0ZXJfZm9yQDkKICAgIGRpZyAxMgogICAgZXh0cmFjdCAyIDAKICAgIGRpZyAxCiAgICBpbnRjXzMgLy8gOAogICAgKgogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTozNTEKICAgIC8vIHN1bTEgKz0gaQogICAgdW5jb3ZlciA0CiAgICArCiAgICBjb3ZlciAzCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYiBzdW1fdWludHNfYW5kX2xlbmd0aHNfYW5kX3RydWVzX2Zvcl9oZWFkZXJANgoKc3VtX3VpbnRzX2FuZF9sZW5ndGhzX2FuZF90cnVlc19hZnRlcl9mb3JAOToKICAgIHBvcAogICAgaW50Y18wIC8vIDAKCnN1bV91aW50c19hbmRfbGVuZ3Roc19hbmRfdHJ1ZXNfZm9yX2hlYWRlckAxMDoKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTozNTIKICAgIC8vIGZvciBiIGluIGFycjI6CiAgICBkdXAKICAgIGRpZyAxMAogICAgPAogICAgYnogc3VtX3VpbnRzX2FuZF9sZW5ndGhzX2FuZF90cnVlc19hZnRlcl9mb3JAMTUKICAgIGR1cAogICAgcHVzaGludCAxNgogICAgKwogICAgZGlnIDExCiAgICBzd2FwCiAgICBnZXRiaXQKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTozNTMKICAgIC8vIGlmIGI6CiAgICBieiBzdW1fdWludHNfYW5kX2xlbmd0aHNfYW5kX3RydWVzX2FmdGVyX2lmX2Vsc2VAMTMKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTozNTQKICAgIC8vIHN1bTIgKz0gMQogICAgc3dhcAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIHN3YXAKCnN1bV91aW50c19hbmRfbGVuZ3Roc19hbmRfdHJ1ZXNfYWZ0ZXJfaWZfZWxzZUAxMzoKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBiIHN1bV91aW50c19hbmRfbGVuZ3Roc19hbmRfdHJ1ZXNfZm9yX2hlYWRlckAxMAoKc3VtX3VpbnRzX2FuZF9sZW5ndGhzX2FuZF90cnVlc19hZnRlcl9mb3JAMTU6CiAgICBwb3AKICAgIGludGNfMCAvLyAwCgpzdW1fdWludHNfYW5kX2xlbmd0aHNfYW5kX3RydWVzX2Zvcl9oZWFkZXJAMTY6CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MzU1CiAgICAvLyBmb3IgdHVwIGluIGFycjM6CiAgICBkdXAKICAgIGRpZyA4CiAgICA8CiAgICBieiBzdW1fdWludHNfYW5kX2xlbmd0aHNfYW5kX3RydWVzX2FmdGVyX2ZvckAyMwogICAgZGlnIDgKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMQogICAgcHVzaGludCA5CiAgICAqCiAgICBwdXNoaW50IDkKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIGRpZyAxCiAgICBwdXNoaW50IDY0CiAgICBnZXRiaXQKICAgIHVuY292ZXIgMgogICAgcHVzaGludCA2NQogICAgZ2V0Yml0CiAgICBjb3ZlciAzCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MzU2CiAgICAvLyBzdW0zICs9IHR1cC5mb28KICAgIHVuY292ZXIgNQogICAgdW5jb3ZlciAyCiAgICArCiAgICBjb3ZlciA0CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MzU3CiAgICAvLyBpZiB0dXAuYmFyOgogICAgYnogc3VtX3VpbnRzX2FuZF9sZW5ndGhzX2FuZF90cnVlc19hZnRlcl9pZl9lbHNlQDE5CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MzU4CiAgICAvLyBzdW0zICs9IDEKICAgIHVuY292ZXIgMwogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGNvdmVyIDMKCnN1bV91aW50c19hbmRfbGVuZ3Roc19hbmRfdHJ1ZXNfYWZ0ZXJfaWZfZWxzZUAxOToKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTozNTkKICAgIC8vIGlmIHR1cC5iYXo6CiAgICBzd2FwCiAgICBieiBzdW1fdWludHNfYW5kX2xlbmd0aHNfYW5kX3RydWVzX2FmdGVyX2lmX2Vsc2VAMjEKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTozNjAKICAgIC8vIHN1bTMgKz0gMQogICAgdW5jb3ZlciAyCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgY292ZXIgMgoKc3VtX3VpbnRzX2FuZF9sZW5ndGhzX2FuZF90cnVlc19hZnRlcl9pZl9lbHNlQDIxOgogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGIgc3VtX3VpbnRzX2FuZF9sZW5ndGhzX2FuZF90cnVlc19mb3JfaGVhZGVyQDE2CgpzdW1fdWludHNfYW5kX2xlbmd0aHNfYW5kX3RydWVzX2FmdGVyX2ZvckAyMzoKICAgIHBvcAogICAgaW50Y18wIC8vIDAKCnN1bV91aW50c19hbmRfbGVuZ3Roc19hbmRfdHJ1ZXNfZm9yX2hlYWRlckAyNDoKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTozNjEKICAgIC8vIGZvciBpZHgsIGR5bl90dXAgaW4gdWVudW1lcmF0ZShhcnI0KToKICAgIGR1cAogICAgZGlnIDUKICAgIDwKICAgIGJ6IHN1bV91aW50c19hbmRfbGVuZ3Roc19hbmRfdHJ1ZXNfYWZ0ZXJfZm9yQDI3CiAgICBkaWcgNgogICAgZGlnIDEKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9yZWFkX2R5bmFtaWNfZWxlbWVudAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIGRpZyAxCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAyCiAgICBsZW4KICAgIHVuY292ZXIgMwogICAgY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgZXh0cmFjdCAyIDAKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTozNjIKICAgIC8vIHN1bTQgKz0gZHluX3R1cC5mb28KICAgIHVuY292ZXIgNwogICAgdW5jb3ZlciAyCiAgICArCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MzYzCiAgICAvLyBzdW00ICs9IGR5bl90dXAuYmFyLmJ5dGVzLmxlbmd0aAogICAgc3dhcAogICAgbGVuCiAgICBzd2FwCiAgICBkaWcgMQogICAgKwogICAgY292ZXIgNgogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjM2NAogICAgLy8gYXNzZXJ0IGR5bl90dXAuYmFyLmJ5dGVzLmxlbmd0aCA9PSBpZHgsICJleHBlY3RlZCBzdHJpbmcgbGVuZ3RoIHRvIG1hdGNoIGluZGV4IgogICAgZGlnIDEKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgc3RyaW5nIGxlbmd0aCB0byBtYXRjaCBpbmRleAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGIgc3VtX3VpbnRzX2FuZF9sZW5ndGhzX2FuZF90cnVlc19mb3JfaGVhZGVyQDI0CgpzdW1fdWludHNfYW5kX2xlbmd0aHNfYW5kX3RydWVzX2FmdGVyX2ZvckAyNzoKICAgIHBvcAogICAgdW5jb3ZlciAzCiAgICBwb3AKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTozNDEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB1bmNvdmVyIDIKICAgIGl0b2IKICAgIHN3YXAKICAgIGl0b2IKICAgIGNvbmNhdAogICAgc3dhcAogICAgaXRvYgogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLmFycmF5LmltbXV0YWJsZS5JbW11dGFibGVBcnJheUNvbnRyYWN0LnRlc3RfdWludDY0X3JldHVybltyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfdWludDY0X3JldHVybjoKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTozNjgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MzcwCiAgICAvLyBhcnIgPSBJbW11dGFibGVBcnJheSgoVUludDY0KDEpLCBVSW50NjQoMiksIFVJbnQ2NCgzKSkpCiAgICBwdXNoYnl0ZXMgMHgwMDAzMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAzCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MzcxCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoYXBwZW5kKToKICAgIGludGNfMCAvLyAwCgp0ZXN0X3VpbnQ2NF9yZXR1cm5fZm9yX2hlYWRlckAyOgogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjM3MQogICAgLy8gZm9yIGkgaW4gdXJhbmdlKGFwcGVuZCk6CiAgICBkdXAKICAgIGRpZyAzCiAgICA8CiAgICBieiB0ZXN0X3VpbnQ2NF9yZXR1cm5fYWZ0ZXJfZm9yQDUKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTozNzIKICAgIC8vIGFyciA9IGFyci5hcHBlbmQoaSkKICAgIGR1cAogICAgaXRvYgogICAgdW5jb3ZlciAyCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjM3MgogICAgLy8gYXJyID0gYXJyLmFwcGVuZChpKQogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAwCiAgICByZXBsYWNlMiAwCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTozNzEKICAgIC8vIGZvciBpIGluIHVyYW5nZShhcHBlbmQpOgogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGIgdGVzdF91aW50NjRfcmV0dXJuX2Zvcl9oZWFkZXJAMgoKdGVzdF91aW50NjRfcmV0dXJuX2FmdGVyX2ZvckA1OgogICAgcG9wCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MzY4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RfY2FzZXMuYXJyYXkuaW1tdXRhYmxlLkltbXV0YWJsZUFycmF5Q29udHJhY3QudGVzdF9ib29sX3JldHVybltyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfYm9vbF9yZXR1cm46CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6Mzc1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjM3NwogICAgLy8gYXJyID0gSW1tdXRhYmxlQXJyYXkoKFRydWUsIEZhbHNlLCBUcnVlLCBGYWxzZSwgVHJ1ZSkpCiAgICBwdXNoYnl0ZXMgMHgwMDA1YTgKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTozNzgKICAgIC8vIGZvciBpIGluIHVyYW5nZShhcHBlbmQpOgogICAgaW50Y18wIC8vIDAKCnRlc3RfYm9vbF9yZXR1cm5fZm9yX2hlYWRlckAyOgogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjM3OAogICAgLy8gZm9yIGkgaW4gdXJhbmdlKGFwcGVuZCk6CiAgICBkdXAKICAgIGRpZyAzCiAgICA8CiAgICBieiB0ZXN0X2Jvb2xfcmV0dXJuX2FmdGVyX2ZvckA1CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6Mzc5CiAgICAvLyBhcnIgPSBhcnIuYXBwZW5kKGkgJSAyID09IDApCiAgICBkdXAKICAgIGludGNfMiAvLyAyCiAgICAlCiAgICAhCiAgICBieXRlY18zIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICBpbnRjXzEgLy8gMQogICAgZHVwCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2JpdHMKICAgIHN3YXAKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTozNzgKICAgIC8vIGZvciBpIGluIHVyYW5nZShhcHBlbmQpOgogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGIgdGVzdF9ib29sX3JldHVybl9mb3JfaGVhZGVyQDIKCnRlc3RfYm9vbF9yZXR1cm5fYWZ0ZXJfZm9yQDU6CiAgICBwb3AKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTozNzUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy5hcnJheS5pbW11dGFibGUuSW1tdXRhYmxlQXJyYXlDb250cmFjdC50ZXN0X3R1cGxlX3JldHVybltyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfdHVwbGVfcmV0dXJuOgogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjM4MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTozODQKICAgIC8vIGFyciA9IEltbXV0YWJsZUFycmF5KChNeVR1cGxlKFVJbnQ2NCgpLCBUcnVlLCBGYWxzZSksKSkKICAgIHB1c2hieXRlcyAweDAwMDEwMDAwMDAwMDAwMDAwMDAwODAKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTozODUKICAgIC8vIGZvciBpIGluIHVyYW5nZShhcHBlbmQpOgogICAgaW50Y18wIC8vIDAKCnRlc3RfdHVwbGVfcmV0dXJuX2Zvcl9oZWFkZXJAMjoKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTozODUKICAgIC8vIGZvciBpIGluIHVyYW5nZShhcHBlbmQpOgogICAgZHVwCiAgICBkaWcgMwogICAgPAogICAgYnogdGVzdF90dXBsZV9yZXR1cm5fYWZ0ZXJfZm9yQDUKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTozODYKICAgIC8vIGFyciA9IGFyci5hcHBlbmQoTXlUdXBsZShmb289aSwgYmFyPWkgJSAyID09IDAsIGJhej1pICUgMyA9PSAwKSkKICAgIGR1cAogICAgaW50Y18yIC8vIDIKICAgICUKICAgICEKICAgIGRpZyAxCiAgICBwdXNoaW50IDMKICAgICUKICAgICEKICAgIGRpZyAyCiAgICBpdG9iCiAgICBieXRlY18zIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDQKICAgIHNldGJpdAogICAgaW50Y18xIC8vIDEKICAgIHVuY292ZXIgMwogICAgc2V0Yml0CiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTozODYKICAgIC8vIGFyciA9IGFyci5hcHBlbmQoTXlUdXBsZShmb289aSwgYmFyPWkgJSAyID09IDAsIGJhej1pICUgMyA9PSAwKSkKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMAogICAgcmVwbGFjZTIgMAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6Mzg1CiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoYXBwZW5kKToKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBiIHRlc3RfdHVwbGVfcmV0dXJuX2Zvcl9oZWFkZXJAMgoKdGVzdF90dXBsZV9yZXR1cm5fYWZ0ZXJfZm9yQDU6CiAgICBwb3AKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTozODIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy5hcnJheS5pbW11dGFibGUuSW1tdXRhYmxlQXJyYXlDb250cmFjdC50ZXN0X2R5bmFtaWNfdHVwbGVfcmV0dXJuW3JvdXRpbmddKCkgLT4gdm9pZDoKdGVzdF9keW5hbWljX3R1cGxlX3JldHVybjoKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTozODkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MzkxCiAgICAvLyBhcnIgPSBJbW11dGFibGVBcnJheSgoTXlEeW5hbWljU2l6ZWRUdXBsZShVSW50NjQoKSwgU3RyaW5nKCJIZWxsbyIpKSwpKQogICAgcHVzaGJ5dGVzIDB4MDAwMTAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwYTAwMDU0ODY1NmM2YzZmCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6MzkyCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoYXBwZW5kKToKICAgIGludGNfMCAvLyAwCgp0ZXN0X2R5bmFtaWNfdHVwbGVfcmV0dXJuX2Zvcl9oZWFkZXJAMjoKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTozOTIKICAgIC8vIGZvciBpIGluIHVyYW5nZShhcHBlbmQpOgogICAgZHVwCiAgICBkaWcgMwogICAgPAogICAgYnogdGVzdF9keW5hbWljX3R1cGxlX3JldHVybl9hZnRlcl9mb3JANQogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjM5MwogICAgLy8gYXJyID0gYXJyLmFwcGVuZChNeUR5bmFtaWNTaXplZFR1cGxlKGksIHRpbWVzKGkpKSkKICAgIGR1cAogICAgY2FsbHN1YiB0aW1lcwogICAgZGlnIDEKICAgIGl0b2IKICAgIGRpZyAxCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgYnl0ZWMgNiAvLyAweDAwMGEKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlYyA0IC8vIDB4MDAwMgogICAgc3dhcAogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIGludGNfMSAvLyAxCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudAogICAgc3dhcAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjM5MgogICAgLy8gZm9yIGkgaW4gdXJhbmdlKGFwcGVuZCk6CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYiB0ZXN0X2R5bmFtaWNfdHVwbGVfcmV0dXJuX2Zvcl9oZWFkZXJAMgoKdGVzdF9keW5hbWljX3R1cGxlX3JldHVybl9hZnRlcl9mb3JANToKICAgIHBvcAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjM4OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLmFycmF5LmltbXV0YWJsZS5JbW11dGFibGVBcnJheUNvbnRyYWN0LnRlc3RfY29udmVydF90b19hcnJheV9hbmRfYmFja1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnRlc3RfY29udmVydF90b19hcnJheV9hbmRfYmFjazoKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTozOTYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBwdXNoaW50IDkKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8dGVzdF9jYXNlcy5hcnJheS5pbW11dGFibGUuTXlUdXBsZT4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHN3YXAKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTo0MDEKICAgIC8vIG11dGFibGUuZXh0ZW5kKGFycikKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6NDAyCiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoYXBwZW5kKToKICAgIGludGNfMCAvLyAwCgp0ZXN0X2NvbnZlcnRfdG9fYXJyYXlfYW5kX2JhY2tfZm9yX2hlYWRlckAyOgogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjQwMgogICAgLy8gZm9yIGkgaW4gdXJhbmdlKGFwcGVuZCk6CiAgICBkdXAKICAgIGRpZyAzCiAgICA8CiAgICBieiB0ZXN0X2NvbnZlcnRfdG9fYXJyYXlfYW5kX2JhY2tfYWZ0ZXJfZm9yQDUKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTo0MDMKICAgIC8vIG11dGFibGUuYXBwZW5kKE15VHVwbGUoZm9vPWksIGJhcj1pICUgMiA9PSAwLCBiYXo9aSAlIDMgPT0gMCkpCiAgICBkdXAKICAgIGludGNfMiAvLyAyCiAgICAlCiAgICAhCiAgICBkaWcgMQogICAgcHVzaGludCAzCiAgICAlCiAgICAhCiAgICBkaWcgMgogICAgaXRvYgogICAgYnl0ZWNfMyAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciA0CiAgICBzZXRiaXQKICAgIGludGNfMSAvLyAxCiAgICB1bmNvdmVyIDMKICAgIHNldGJpdAogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIGNvbmNhdCAvLyBvbiBlcnJvcjogbWF4IGFycmF5IGxlbmd0aCBleGNlZWRlZAogICAgc3dhcAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjQwMgogICAgLy8gZm9yIGkgaW4gdXJhbmdlKGFwcGVuZCk6CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYiB0ZXN0X2NvbnZlcnRfdG9fYXJyYXlfYW5kX2JhY2tfZm9yX2hlYWRlckAyCgp0ZXN0X2NvbnZlcnRfdG9fYXJyYXlfYW5kX2JhY2tfYWZ0ZXJfZm9yQDU6CiAgICBwb3AKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTo0MDQKICAgIC8vIHJldHVybiBtdXRhYmxlLmZyZWV6ZSgpCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA5CiAgICAvCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6Mzk2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RfY2FzZXMuYXJyYXkuaW1tdXRhYmxlLkltbXV0YWJsZUFycmF5Q29udHJhY3QudGVzdF9jb25jYXRfd2l0aF9hcmM0X3R1cGxlW3JvdXRpbmddKCkgLT4gdm9pZDoKdGVzdF9jb25jYXRfd2l0aF9hcmM0X3R1cGxlOgogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjQwNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDE2CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnR1cGxlPGFyYzQudWludDY0LGFyYzQudWludDY0PgogICAgYnl0ZWMgOCAvLyAweDE1MWY3Yzc1MDAwNDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHRlc3RfY2FzZXMuYXJyYXkuaW1tdXRhYmxlLkltbXV0YWJsZUFycmF5Q29udHJhY3QudGVzdF9jb25jYXRfd2l0aF9uYXRpdmVfdHVwbGVbcm91dGluZ10oKSAtPiB2b2lkOgp0ZXN0X2NvbmNhdF93aXRoX25hdGl2ZV90dXBsZToKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTo0MTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAxNgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC50dXBsZTxhcmM0LnVpbnQ2NCxhcmM0LnVpbnQ2ND4KICAgIGR1cAogICAgZXh0cmFjdCAwIDgKICAgIHN3YXAKICAgIGV4dHJhY3QgOCA4CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6NDE5CiAgICAvLyByZXN1bHQgPSBwcmVmaXggKyBhcmcKICAgIGNvbmNhdAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjQxNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjIDggLy8gMHgxNTFmN2M3NTAwMDQwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLmFycmF5LmltbXV0YWJsZS5JbW11dGFibGVBcnJheUNvbnRyYWN0LnRlc3RfZHluYW1pY19jb25jYXRfd2l0aF9hcmM0X3R1cGxlW3JvdXRpbmddKCkgLT4gdm9pZDoKdGVzdF9keW5hbWljX2NvbmNhdF93aXRoX2FyYzRfdHVwbGU6CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6NDIyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGRpZyAxCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgdHVwbGUgZW5jb2RpbmcKICAgIGR1cAogICAgcHVzaGludCA0CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgdGFpbCBwb2ludGVyIGF0IGluZGV4IDAgb2YgKChsZW4rdXRmOFtdKSwobGVuK3V0ZjhbXSkpCiAgICBkaWcgMgogICAgc3dhcAogICAgZGlnIDIKICAgIHN1YnN0cmluZzMKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBwdXNoaW50IDYKICAgICsKICAgIGRpZyAyCiAgICBpbnRjXzIgLy8gMgogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgdHVwbGUgZW5jb2RpbmcKICAgIGR1cAogICAgZGlnIDIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCB0YWlsIHBvaW50ZXIgYXQgaW5kZXggMSBvZiAoKGxlbit1dGY4W10pLChsZW4rdXRmOFtdKSkKICAgIGRpZyAzCiAgICBzd2FwCiAgICBkaWcgMwogICAgc3Vic3RyaW5nMwogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMiAvLyAyCiAgICArCiAgICArCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnR1cGxlPGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PixhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4+CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6NDI3CiAgICAvLyByZXN1bHQgPSBwcmVmaXggKyBhcmcKICAgIGV4dHJhY3QgNCAwCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6NDI2CiAgICAvLyBwcmVmaXggPSBJbW11dGFibGVBcnJheSgoYXJjNC5TdHJpbmcoImEiKSwgYXJjNC5TdHJpbmcoImIiKSkpCiAgICBieXRlYyA5IC8vIDB4MDAwMjAwMDQwMDA3MDAwMTYxMDAwMTYyCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6NDI3CiAgICAvLyByZXN1bHQgPSBwcmVmaXggKyBhcmcKICAgIHN3YXAKICAgIGludGNfMiAvLyAyCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2J5dGVfbGVuZ3RoX2hlYWQKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTo0MjIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy5hcnJheS5pbW11dGFibGUuSW1tdXRhYmxlQXJyYXlDb250cmFjdC50ZXN0X2R5bmFtaWNfY29uY2F0X3dpdGhfbmF0aXZlX3R1cGxlW3JvdXRpbmddKCkgLT4gdm9pZDoKdGVzdF9keW5hbWljX2NvbmNhdF93aXRoX25hdGl2ZV90dXBsZToKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTo0MzAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgZGlnIDEKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCB0dXBsZSBlbmNvZGluZwogICAgZHVwCiAgICBwdXNoaW50IDQKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCB0YWlsIHBvaW50ZXIgYXQgaW5kZXggMCBvZiAoKGxlbit1dGY4W10pLChsZW4rdXRmOFtdKSkKICAgIGRpZyAyCiAgICBkaWcgMQogICAgZGlnIDMKICAgIHN1YnN0cmluZzMKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBwdXNoaW50IDYKICAgICsKICAgIGRpZyAzCiAgICBpbnRjXzIgLy8gMgogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgdHVwbGUgZW5jb2RpbmcKICAgIGR1cAogICAgZGlnIDIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCB0YWlsIHBvaW50ZXIgYXQgaW5kZXggMSBvZiAoKGxlbit1dGY4W10pLChsZW4rdXRmOFtdKSkKICAgIGRpZyA0CiAgICBkaWcgMQogICAgZGlnIDUKICAgIHN1YnN0cmluZzMKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMiAvLyAyCiAgICArCiAgICB1bmNvdmVyIDMKICAgICsKICAgIHVuY292ZXIgNAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC50dXBsZTxhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4sYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+PgogICAgY292ZXIgMwogICAgc3Vic3RyaW5nMwogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjQzNQogICAgLy8gcmVzdWx0ID0gcHJlZml4ICsgYXJnCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTo0MzQKICAgIC8vIHByZWZpeCA9IEltbXV0YWJsZUFycmF5KChhcmM0LlN0cmluZygiYSIpLCBhcmM0LlN0cmluZygiYiIpKSkKICAgIGJ5dGVjIDkgLy8gMHgwMDAyMDAwNDAwMDcwMDAxNjEwMDAxNjIKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTo0MzUKICAgIC8vIHJlc3VsdCA9IHByZWZpeCArIGFyZwogICAgc3dhcAogICAgaW50Y18yIC8vIDIKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjQzMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyB0ZXN0X2Nhc2VzLmFycmF5LmltbXV0YWJsZS5JbW11dGFibGVBcnJheUNvbnRyYWN0LnRlc3RfY29uY2F0X2ltbXV0YWJsZV9keW5hbWljW3JvdXRpbmddKCkgLT4gdm9pZDoKdGVzdF9jb25jYXRfaW1tdXRhYmxlX2R5bmFtaWM6CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6NDM4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwbiAyCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgc3dhcAogICAgZHVwCiAgICBsZW4KICAgIGNvdmVyIDIKICAgIGV4dHJhY3QgMiAwCiAgICBpbnRjXzAgLy8gMAoKdGVzdF9jb25jYXRfaW1tdXRhYmxlX2R5bmFtaWNfZm9yX2hlYWRlckAxOgogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjQzOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGR1cAogICAgZGlnIDUKICAgIDwKICAgIGJ6IHRlc3RfY29uY2F0X2ltbXV0YWJsZV9keW5hbWljX2FmdGVyX2ZvckA0CiAgICBkdXAKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBkaWcgMgogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGVuY29kaW5nCiAgICBkdXAKICAgIHVuY292ZXIgNQogICAgZHVwCiAgICBjb3ZlciA0CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgdGFpbCBwb2ludGVyIGZvciAobGVuKyh1aW50NjQsKGxlbit1dGY4W10pKVtdKQogICAgZGlnIDEKICAgIGxlbgogICAgc3Vic3RyaW5nMwogICAgZHVwCiAgICBsZW4KICAgIGRpZyAxCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgdHVwbGUgZW5jb2RpbmcKICAgIGR1cAogICAgcHVzaGludCAxMAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHRhaWwgcG9pbnRlciBhdCBpbmRleCAxIG9mICh1aW50NjQsKGxlbit1dGY4W10pKQogICAgc3dhcAogICAgc3Vic3RyaW5nMwogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIHB1c2hpbnQgMTIKICAgICsKICAgICsKICAgIGNvdmVyIDIKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBiIHRlc3RfY29uY2F0X2ltbXV0YWJsZV9keW5hbWljX2Zvcl9oZWFkZXJAMQoKdGVzdF9jb25jYXRfaW1tdXRhYmxlX2R5bmFtaWNfYWZ0ZXJfZm9yQDQ6CiAgICBwb3BuIDIKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTo0MzgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PHRlc3RfY2FzZXMuYXJyYXkuaW1tdXRhYmxlLk15RHluYW1pY1NpemVkVHVwbGU+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBzd2FwCiAgICBkdXAKICAgIGxlbgogICAgY292ZXIgMgogICAgZXh0cmFjdCAyIDAKICAgIGNvdmVyIDIKICAgIGludGNfMCAvLyAwCgp0ZXN0X2NvbmNhdF9pbW11dGFibGVfZHluYW1pY19mb3JfaGVhZGVyQDU6CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6NDM4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgZHVwCiAgICBkaWcgNQogICAgPAogICAgYnogdGVzdF9jb25jYXRfaW1tdXRhYmxlX2R5bmFtaWNfYWZ0ZXJfZm9yQDgKICAgIGR1cAogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGRpZyA0CiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgZW5jb2RpbmcKICAgIGR1cAogICAgdW5jb3ZlciA0CiAgICBkdXAKICAgIGNvdmVyIDQKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCB0YWlsIHBvaW50ZXIgZm9yIChsZW4rKHVpbnQ2NCwobGVuK3V0ZjhbXSkpW10pCiAgICBkaWcgMQogICAgbGVuCiAgICBzdWJzdHJpbmczCiAgICBkdXAKICAgIGxlbgogICAgZGlnIDEKICAgIGludGNfMyAvLyA4CiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCB0dXBsZSBlbmNvZGluZwogICAgZHVwCiAgICBwdXNoaW50IDEwCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgdGFpbCBwb2ludGVyIGF0IGluZGV4IDEgb2YgKHVpbnQ2NCwobGVuK3V0ZjhbXSkpCiAgICBzd2FwCiAgICBzdWJzdHJpbmczCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgcHVzaGludCAxMgogICAgKwogICAgKwogICAgc3dhcAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGIgdGVzdF9jb25jYXRfaW1tdXRhYmxlX2R5bmFtaWNfZm9yX2hlYWRlckA1Cgp0ZXN0X2NvbmNhdF9pbW11dGFibGVfZHluYW1pY19hZnRlcl9mb3JAODoKICAgIHBvcAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjQzOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMiAvLyAyCiAgICArCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8dGVzdF9jYXNlcy5hcnJheS5pbW11dGFibGUuTXlEeW5hbWljU2l6ZWRUdXBsZT4KICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTo0NDIKICAgIC8vIHJldHVybiBpbW0xICsgaW1tMgogICAgZGlnIDMKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnQKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTo0MzgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy5hcnJheS5pbW11dGFibGUuSW1tdXRhYmxlQXJyYXlDb250cmFjdC50ZXN0X2ltbXV0YWJsZV9hcmM0W3JvdXRpbmddKCkgLT4gdm9pZDoKdGVzdF9pbW11dGFibGVfYXJjNDoKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTo0NDQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkdXAKICAgIHB1c2hpbnQgMTYKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMgogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8dGVzdF9jYXNlcy5hcnJheS5pbW11dGFibGUuTXlTdHJ1Y3Q+CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6NDQ2CiAgICAvLyBhc3NlcnQgaW1tLCAiZXhwZWN0ZWQgbm9uIGVtcHR5IGFycmF5IgogICAgZHVwCiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgbm9uIGVtcHR5IGFycmF5CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6NDQ3CiAgICAvLyBpbW0gPSBpbW0ucmVwbGFjZShpbW0ubGVuZ3RoIC0gMSwgaW1tWzBdKQogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGRpZyAxCiAgICBleHRyYWN0IDIgMTYKICAgIHN3YXAKICAgIHB1c2hpbnQgMTYKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBzd2FwCiAgICByZXBsYWNlMyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTo0NDQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdF9jYXNlcy5hcnJheS5pbW11dGFibGUuSW1tdXRhYmxlQXJyYXlDb250cmFjdC50ZXN0X2ltbV9maXhlZF9hcnJbcm91dGluZ10oKSAtPiB2b2lkOgp0ZXN0X2ltbV9maXhlZF9hcnI6CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6NDUyCiAgICAvLyBhcnIxID0gemVyb19ieXRlcyhOYXRpdmVTdHJ1Y3QzKQogICAgcHVzaGludCA0OAogICAgYnplcm8KICAgIGR1cAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjQ1MwogICAgLy8gc3RydWN0MTIgPSBOYXRpdmVTdHJ1Y3QoVHhuLm51bV9hcHBfYXJncyArIDEsIFR4bi5udW1fYXBwX2FyZ3MgKyAyKQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGludGNfMSAvLyAxCiAgICArCiAgICB0eG4gTnVtQXBwQXJncwogICAgaW50Y18yIC8vIDIKICAgICsKICAgIHN3YXAKICAgIGl0b2IKICAgIHN3YXAKICAgIGl0b2IKICAgIGNvbmNhdAogICAgZHVwCiAgICBjb3ZlciAzCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6NDU0CiAgICAvLyBhcnIyID0gTmF0aXZlU3RydWN0Mygoc3RydWN0MTIsIHN0cnVjdDEyLCBzdHJ1Y3QxMikpCiAgICBkdXAKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBjb3ZlciAzCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6NDU2CiAgICAvLyBhc3NlcnQgYXJyMSAhPSBhcnIyLCAiZXhwZWN0ZWQgYXJyYXlzIHRvIGJlIGRpZmZlcmVudCIKICAgICE9CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgYXJyYXlzIHRvIGJlIGRpZmZlcmVudAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjQ1OQogICAgLy8gZm9yIGkgaW4gdXJhbmdlKDMpOgogICAgaW50Y18wIC8vIDAKCnRlc3RfaW1tX2ZpeGVkX2Fycl9mb3JfaGVhZGVyQDI6CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6NDU5CiAgICAvLyBmb3IgaSBpbiB1cmFuZ2UoMyk6CiAgICBkdXAKICAgIHB1c2hpbnQgMwogICAgPAogICAgYnogdGVzdF9pbW1fZml4ZWRfYXJyX2FmdGVyX2ZvckA1CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6NDYwCiAgICAvLyBhcnIxID0gYXJyMS5yZXBsYWNlKGksIHN0cnVjdDEyKQogICAgZHVwCiAgICBwdXNoaW50IDE2CiAgICAqCiAgICB1bmNvdmVyIDIKICAgIHN3YXAKICAgIGRpZyA0CiAgICByZXBsYWNlMyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIHN3YXAKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTo0NTkKICAgIC8vIGZvciBpIGluIHVyYW5nZSgzKToKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBiIHRlc3RfaW1tX2ZpeGVkX2Fycl9mb3JfaGVhZGVyQDIKCnRlc3RfaW1tX2ZpeGVkX2Fycl9hZnRlcl9mb3JANToKICAgIHBvcAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjQ2MgogICAgLy8gYXNzZXJ0IGFycjEgPT0gYXJyMiwgImV4cGVjdGVkIGFycmF5cyB0byBiZSB0aGUgc2FtZSIKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGV4cGVjdGVkIGFycmF5cyB0byBiZSB0aGUgc2FtZQogICAgaW50Y18wIC8vIDAKCnRlc3RfaW1tX2ZpeGVkX2Fycl9mb3JfaGVhZGVyQDY6CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6NDY0CiAgICAvLyBmb3Igc3RydWN0X2l0IGluIGFycjE6CiAgICBkdXAKICAgIHB1c2hpbnQgMwogICAgPAogICAgYnogdGVzdF9pbW1fZml4ZWRfYXJyX2FmdGVyX2ZvckA5CiAgICBkdXAKICAgIHB1c2hpbnQgMTYKICAgICoKICAgIGRpZyAyCiAgICBzd2FwCiAgICBwdXNoaW50IDE2CiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTo0NjUKICAgIC8vIGFzc2VydCBzdHJ1Y3RfaXQgPT0gc3RydWN0MTIsICJleHBlY3RlZCBpdGVtcyBvbiBpdGVyYXRpb24gdG8gYmUgdGhlIHNhbWUiCiAgICBkaWcgMwogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCBpdGVtcyBvbiBpdGVyYXRpb24gdG8gYmUgdGhlIHNhbWUKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBiIHRlc3RfaW1tX2ZpeGVkX2Fycl9mb3JfaGVhZGVyQDYKCnRlc3RfaW1tX2ZpeGVkX2Fycl9hZnRlcl9mb3JAOToKICAgIHBvcAogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjQ2NwogICAgLy8gc2VsZi5pbW1fZml4ZWRfYXJyID0gYXJyMQogICAgYnl0ZWMgMTAgLy8gImltbV9maXhlZF9hcnIiCiAgICBkaWcgMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTo0NzEKICAgIC8vIGFzc2VydCBzdW1faW1tX2ZpeGVkKG11dF9hcnIuZnJlZXplKCkpID09IDE1LCAiZXhwZWN0ZWQgc3VtIHRvIGJlIDE1IgogICAgZHVwCiAgICBjYWxsc3ViIHN1bV9pbW1fZml4ZWQKICAgIHB1c2hpbnQgMTUKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgc3VtIHRvIGJlIDE1CiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6NDczCiAgICAvLyBtdXRfYXJyWzBdID0gTmF0aXZlU3RydWN0KFVJbnQ2NCgpLCBVSW50NjQoKSkKICAgIHB1c2hieXRlcyAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICByZXBsYWNlMiAwIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgLy8gYXJyYXkvaW1tdXRhYmxlLnB5OjQ3NAogICAgLy8gYXNzZXJ0IHN1bV9pbW1fZml4ZWQobXV0X2Fyci5mcmVlemUoKSkgPT0gMTAsICJleHBlY3RlZCBzdW0gdG8gYmUgMTAiCiAgICBjYWxsc3ViIHN1bV9pbW1fZml4ZWQKICAgIHB1c2hpbnQgMTAKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgc3VtIHRvIGJlIDEwCiAgICAvLyBhcnJheS9pbW11dGFibGUucHk6NDc2CiAgICAvLyByZXR1cm4gc2VsZi5pbW1fZml4ZWRfYXJyCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTAgLy8gImltbV9maXhlZF9hcnIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuaW1tX2ZpeGVkX2FyciBleGlzdHMKICAgIC8vIGFycmF5L2ltbXV0YWJsZS5weTo0NTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "CyAEAAECCCYLBBUffHUCAAAAAQACAAJA/////////////////////////////////////////////////////////////////////////////////////wIACgdiaWd1aW50FhUffHUABAAAAAAAAAABAAAAAAAAAAIMAAIABAAHAAFhAAFiDWltbV9maXhlZF9hcnIxG0EAtzEZFEQxGESCGARE1C+ZBLfqpgsEdD1w7QQcfgSUBKLVhgsE4F/FZAQeCSuDBAExAmIEyGVKmASJ0Zb4BGy3yZEEmJi/AgT2th7oBGC4ansEc60oPwRSnfrpBCBtUU8E4GRl4gTsAwCiBOzfFK8EURrKZAQphS5PBG1Ko1gEt8uWvTYaAI4YAkIDJARDBPgFnwX9Bs4Howe1B9EIzwngCzoLhQu5DAoMYQy5DMkM4g0hDWkOGA5AADEZFDEYFBBDigIBi/4Vi/8Ji/4iTwJSSSJZIwkWVwYAXACJigEBi/8iWSMJSRZXBgBMJAskSUsCDkEAFov/SwFZJAkWVwYATwNMUE4CJAhC/+OL/1cCAElPA1lMTgJSUImKAgGL/lcCAIv+IlmL/yQLSwJMWUsCFYv/IwhJJAtLBUxZTwRPAglNUomKBAGL/CJZRwKL/ghJFlcGAIv8TFwATgJMgQcIJQpJTgRMgQcIJQpJTgQMQQAHiwGLAAmvUCJPAoEQCElOAov+CEsCSwEMQQAfi/1PAklOAlNPBE8ESU4DTwJUTgMjCE4Ci/8ITEL/2UYDjACJigMBi/0iWUkkCyQIi/0kSwJSi/8kC69Qi/0Vi/1PA08CUov+UFBMi/8ISRZXBgBMJAtJIklLAwxBABxMSRZXBgBPBUsDTwJdSU4FSwFZJAgITCQIQv/dRgNMUImKAwGL/SJZSYv/CBZXBgBMi/1XAgBMJAtMi/8kC04CIk4EiwBLAgxBABtJiwBJTgJZSwQIFlcGAE8FTFBOBCQIjABC/91JFUwijACLAEsEDEEAHIv+iwBJTgJZSwMIFlcGAE8GTFBOBSQIjABC/9xOAlJPAkxQi/4Vi/5PA08CUlBMiYoBASJJSYEDDEEAGkmBEAuL/0yBEFhJIltPAwhMJVsITCMIQv/fSImKAQEqIkmL/wxBAAtMgAEgUEwjCEL/7kiJigIBIkmL/wxBABpJFov+IlkjCBZXBgCL/kxcAExQjP4jCEL/34v+TImACgABAAAAAAAAACqBBYj/xkkiWUmBBhJESSMJSwJXAgBMJQtbgQQSRIErFkwjCBZXBgBPAkxcAExQRwIiWUmBBxJEIwlLAVcCAEwlC1uBKxJEJFuBKhJEIkmBAwxBAAtMJYj9YkwjCEL/7khJIllJgQQSRCMJSwFXAgBMJQtbJBJEgQqI/1BJIllJgQ4SREkjCUsCVwIATCULW4EJEkSBLBZMIwgWVwYATwJMXABMUEkiWUmBDxJEIwlLAVcCAEwlC1uBLBJEgRcWXBJJIlmBDxJESYESW4EXEkSAAWFMZyNDMRsjCRaBQK9JTgKrgAIAAUxQRwIiWUkjEkQjCUxXAgBMgUALgUBYKqhEIkmBBQxBABpJFksDq08CSSJZIwgWVwYAXABMUEwjCEL/30hJIllJgQYSREkjCUsCVwIATIFAC4FAWIABBKhEMRsWJwVMoUkVgUAORE8Dq0wjCBZXBgBPAkxcAExQSSJZSYEHEkRJIwlLAlcCAEyBQAuBQFiAQP////////////////////////////////////////////////////////////////////////////////////6oREsBVwJAKqhEIwgWVwYAXAAnBVBJIllJJRJEIwlLAVcCAEyBQAuBQFgnBahESVcCQCqoRCcHvEgnB0y/I0MqNhoBSRUlEkQXKSJJSwMMQQAZMRtLARIrIk8CVEsCTCNJiPwkRQIjCEL/4EhJIllJRQRLAklOAhJEQQAJSwJESYEQUxRESwEjDUEACyNLAwxESYERUxRESwEkDUEACiRLAwxESYESU0RLAYEDDUEAEksBIwlJSwQMRIEQCEsBTFMURIABZ0sBZ0sBQQAlSwIjCUkWVwYASwJXAgBLAiJUTwKBBwglCiJMWFAiWUsCIwkSRCNDKSJJgQUMQQAfSSMITCQISwEWTBZQTwJJIlkjCBZXBgBcAExQTEL/2khJIllJgQUSREsBVwIASwJXAhBJIltMJVtMIxJMJBIQREwjCYEQC4EQWEkiW0wlW0yBBRJMgQYSEESBEIj6qkkiWUmBBBJESwFXAgBLAlcCEEkiW0wlW0wjEkwkEhBETCMJgRALgRBYSSJbTCVbTIEEEkyBBRIQRIABY0xnI0MpIkmBBQxBAC5JJBgUSwGBAwskGBRLAhYrIk8EVCNPA1RQTwJJIlkjCBZXBgBcAExQTCMIQv/LSEkiWYEFEkRJVwIJSSJbSwGBQFNPAoFBU08CFERMRESAAWRMZyNDIilLAYEFDEEAK0sBSSMITK9LARZLARUWVwYCTwJQTCcGUExQJwRMUE8CTCOI+ylMRQJC/81JIlmBBRJEIkUCSwGBBQxBADBJSwJJTgKI+hVJIltLASVZSwIVTwNOAlJXAgBLAiMITwJLARJETBVPAhJERQJC/8iI+a1JIllJgQQSREsBIoj53UkiW0sBJVlLAhVPA04CUlcCAEwjEiKvTwISEEQjCUsBTIj5uUkiW0sBJVlLAhVPA04CUlcCAEyBBBKBA69PAhIQRIABZUxnI0MiKUsBgQUMQQAtSwFJIwhMiPsfSwEWSwEVFlcGAk8CUEwnBlBMUCcETFBPAkwjiPpWTEUCQv/LSSJZgQUSRCJFAksBgQUMQQAzSUsCSU4CiPlCSSJbSwElWUsCFU8DTgJSVwIASwIjCE8CSwESRE8CiPq/TwISREUCQv/FiPjXSSJZSYEEEkRLASKI+QdJIltLASVZSwIVTwNOAlJXAgBMIxJMKhIQRCMJSwFMiPjlSSJbSwElWUsCFU8DTgJSVwIATIEEEkyAAyAgIBIQRIABZkxnI0M2GgFJIlklCyQISwEVEkSwI0M2GgFJIlklCyQISwEVEkSABvpAwFMAAkxQsCNDKkk2GgFJFSUSRBc2GgJHAiJZSU4DJAtOAkkVTgNXAgAiSUsGDEEAI0kkC0sCSU8CWUlPBklOBBJESwEVUiJZJQskCAhOAyMIQv/WRgJMJAhPAhJEIklLBAxBADUpTCJJSwIMQQAYSRZPA0kiWSMIFlcGAFwATFBOAiMIQv/hSCcETwJQTwJMI4j4+UwjCEL/xEgpSwEiWUUGIklLBwxBAFZLAlcCAEsBJAtLAUxZSlklCyQIWElOBCJOAyJZRQgiSUsJDEEAFEsFVwIASwElC1tPBAhOAyMIQv/lSE8ESE8CFk8CSSJZIwgWVwYAXABMUEwjCEL/o0goTFCwI0MpRwMiSYEFDEEAuEkUSwEjEisiTwNUI08CVE8FSSJZIwgWVwYAXABLAVBOBUsBIwhLAiQSSwOBAxJLBIEEEksFgQUSSwaBBhJLBxZPByRPB1SBA08GVIEETwVUgQVPBFSBBk8DVEpQSwMWTEsBUE8ISSJZIwgWVwYAXABMUE4HSwSBBxJPAoEHTwJUTwJMUElLAlBPBkkiWSMIFlcGAFwATFBOBU8DJRIrIk8CVFBMUE8CSSJZIwgWVwYAXABMUExC/0FITwNJIlmBBRJETwNJIlmBBRJETwNJIlmBBRJETwNJIlmBBRJEgAVib29sMk8EZ4AFYm9vbDdPA2eABWJvb2w4TwJngAVib29sOUxnI0M2GgFHAiJZSU4CJQskCEwVEkQ2GgJHAiJZSU4CgQcIJQokCEwVEkQ2GgNHAiJZSU4CgQkLJAhMFRJENhoERwIiWUlOAiQLTEkVTgJXAgAiSUsFDEEAL0kkC0sCSU8CWUlPBUlOBBJESwEVUkkVSwElWUmBChJETFIiWYEMCAhOAiMIQv/KRgIkCBJEIkwiRwNJSwwMQQAUSwxXAgBLASULW08ECE4DIwhC/+VIIklLCgxBABRJgRAISwtMU0EABEwjCEwjCEL/5UgiSUsIDEEAO0sIVwIASwGBCQuBCVhJIltLAYFAU08CgUFTTgNPBU8CCE4EQQAGTwMjCE4DTEEABk8CIwhOAiMIQv++SCJJSwUMQQAvSwZLAYj1ZkkiW0sBJVlLAhVPA04CUlcCAE8HTwIITBVMSwEITgZLARJEIwhC/8pITwNITwIWTBZQTBZQTBZQKExQsCNDNhoBSRUlEkQXgBoAAwAAAAAAAAABAAAAAAAAAAIAAAAAAAAAAyJJSwMMQQAXSRZPAkkiWSMIFlcGAFwATFBMIwhC/+JIKExQsCNDNhoBSRUlEkQXgAMABagiSUsDDEEAF0kkGBQrIk8CVE8CTCNJiPTgTCMIQv/iSChMULAjQzYaAUkVJRJEF4ALAAEAAAAAAAAAAIAiSUsDDEEALEkkGBRLAYEDGBRLAhYrIk8EVCNPA1RQTwJJIlkjCBZXBgBcAExQTCMIQv/NSChMULAjQzYaAUkVJRJEF4AVAAEAAgAAAAAAAAAAAAoABUhlbGxvIklLAwxBAChJiPXKSwEWSwEVFlcGAk8CUEwnBlBMUCcETFBPAkwjiPUBTCMIQv/RSChMULAjQzYaAUkiWYEJCyQISwEVEkQ2GgJJFSUSRBdMVwIAIklLAwxBACFJJBgUSwGBAxgUSwIWKyJPBFQjTwNUUE8CTFBMIwhC/9hISRWBCQoWVwYCTFAoTFCwI0M2GgFJFYEQEkQnCExQsCNDNhoBSRWBEBJESVcACExXCAhQJwhMULAjQzYaAUkVSwEiWUmBBBJESwJMSwJSIlmBBghLAiRZSUsCEkRLA0xLA1IiWSQICBJEVwQAJwlMJIjz3ihMULAjQzYaAUkVSwEiWUmBBBJESwJLAUsDUiJZgQYISwMkWUlLAhJESwRLAUsFUkkiWSQITwMITwQSRE4DUkxQJwlMJIjzlihMULAjQzYaAUcCIllJTgIkC0xJFU4CVwIAIklLBQxBAC9JJAtLAklPAllJTwVJTgQSREsBFVJJFUsBJVlJgQoSRExSIlmBDAgITgIjCEL/ykYCJAgSRDYaAkkiWUlOAiQLTEkVTgJXAgBOAiJJSwUMQQAuSSQLSwRJTwJZSU8ESU4EEkRLARVSSRVLASVZSYEKEkRMUiJZgQwICEwjCEL/y0gkCBJESwNMTwKI80MoTFCwI0M2GgFJIllJgRALJAhLAhUSRElEIwlLAVcCEEyBEAskCExdKExQsCNDgTCvSTEbIwgxGyQITBZMFlBJTgNJSwFQTFBJTgMTRCJJgQMMQQAQSYEQC08CTEsEXUwjCEL/6UhJTwISRCJJgQMMQQATSYEQC0sCTIEQWEsDEkQjCEL/5kgnCksBZ0mI8zaBDxJEgBAAAAAAAAAAAAAAAAAAAAAAXACI8xuBChJEIicKZUQoTFCwI0M=", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 99, "minor": 99, "patch": 99 } }, "events": [ { "name": "emit_test", "args": [ { "type": "uint64[]", "name": "field1" } ] } ], "templateVariables": {} }