{ "name": "BoxContract", "structs": { "DynamicArrayInAStruct": [ { "name": "a", "type": "uint64" }, { "name": "arr", "type": "uint64[]" }, { "name": "b", "type": "uint64" }, { "name": "arr2", "type": "uint64[]" } ], "InnerStruct": [ { "name": "c", "type": "uint64" }, { "name": "arr_arr", "type": "uint64[][]" }, { "name": "d", "type": "uint64" } ], "LargeStruct": [ { "name": "a", "type": "byte[1024]" }, { "name": "b", "type": "byte[1024]" }, { "name": "c", "type": "byte[1024]" }, { "name": "d", "type": "byte[1024]" }, { "name": "e", "type": "uint64" }, { "name": "f", "type": "byte[1024]" }, { "name": "g", "type": "byte[1024]" }, { "name": "h", "type": "uint64" } ], "NestedStruct": [ { "name": "a", "type": "uint64" }, { "name": "inner", "type": "InnerStruct" }, { "name": "woah", "type": "(uint64,uint64[][],uint64)[]" }, { "name": "b", "type": "uint64" } ] }, "methods": [ { "name": "set_boxes", "args": [ { "type": "uint64", "name": "a" }, { "type": "byte[]", "name": "b" }, { "type": "string", "name": "c" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "check_keys", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "create_many_ints", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "set_many_ints", "args": [ { "type": "uint64", "name": "index" }, { "type": "uint64", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "create_big_fixed_bytes", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "update_big_fixed_bytes", "args": [ { "type": "uint64", "name": "start_index" }, { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "assert_big_fixed_bytes", "args": [ { "type": "uint64", "name": "index" }, { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "slice_big_fixed_bytes", "args": [ { "type": "uint64", "name": "start" }, { "type": "uint64", "name": "end" } ], "returns": { "type": "byte[]" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "create_big_bytes", "args": [ { "type": "uint64", "name": "size" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "update_big_bytes", "args": [ { "type": "uint64", "name": "start_index" }, { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "assert_big_bytes", "args": [ { "type": "uint64", "name": "index" }, { "type": "byte[]", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "slice_big_bytes", "args": [ { "type": "uint64", "name": "start" }, { "type": "uint64", "name": "end" } ], "returns": { "type": "byte[]" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "sum_many_ints", "args": [], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "delete_boxes", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "indirect_extract_and_replace", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "read_boxes", "args": [], "returns": { "type": "(uint64,byte[],string,uint64)" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "boxes_exist", "args": [], "returns": { "type": "(bool,bool,bool,bool)" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "create_dynamic_arr_struct", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "delete_dynamic_arr_struct", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "append_dynamic_arr_struct", "args": [ { "type": "uint64", "name": "times" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "pop_dynamic_arr_struct", "args": [ { "type": "uint64", "name": "times" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "set_nested_struct", "args": [ { "type": "(uint64,(uint64,uint64[][],uint64),(uint64,uint64[][],uint64)[],uint64)", "struct": "NestedStruct", "name": "struct" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "nested_write", "args": [ { "type": "uint64", "name": "index" }, { "type": "uint64", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "nested_read", "args": [ { "type": "uint64", "name": "i1" }, { "type": "uint64", "name": "i2" }, { "type": "uint64", "name": "i3" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "sum_dynamic_arr_struct", "args": [], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "create_bools", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "set_bool", "args": [ { "type": "uint64", "name": "index" }, { "type": "bool", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "sum_bools", "args": [ { "type": "uint64", "name": "stop_at_total" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "create_dynamic_box", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "delete_dynamic_box", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "append_dynamic_box", "args": [ { "type": "uint64", "name": "times" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "pop_dynamic_box", "args": [ { "type": "uint64", "name": "times" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "sum_dynamic_box", "args": [], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "write_dynamic_box", "args": [ { "type": "uint64", "name": "index" }, { "type": "uint64", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "write_dynamic_arr_struct", "args": [ { "type": "uint64", "name": "index" }, { "type": "uint64", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "slice_box", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "arc4_box", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "test_box_ref", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "box_map_test", "args": [], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "box_map_set", "args": [ { "type": "uint64", "name": "key" }, { "type": "string", "name": "value" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "box_map_get", "args": [ { "type": "uint64", "name": "key" } ], "returns": { "type": "string" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "box_map_del", "args": [ { "type": "uint64", "name": "key" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "box_map_exists", "args": [ { "type": "uint64", "name": "key" } ], "returns": { "type": "bool" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 0, "bytes": 0 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": {}, "local": {}, "box": { "box_a": { "keyType": "AVMString", "valueType": "uint64", "key": "Ym94X2E=" }, "box_b": { "keyType": "AVMString", "valueType": "byte[]", "key": "Yg==" }, "box_c": { "keyType": "AVMBytes", "valueType": "string", "key": "Qk9YX0M=" }, "box_d": { "keyType": "AVMString", "valueType": "AVMBytes", "key": "Ym94X2Q=" }, "box_ref": { "keyType": "AVMString", "valueType": "AVMBytes", "key": "Ym94X3JlZg==" }, "box_large": { "keyType": "AVMString", "valueType": "LargeStruct", "key": "Ym94X2xhcmdl" }, "many_ints": { "keyType": "AVMString", "valueType": "uint64[513]", "key": "bWFueV9pbnRz" }, "dynamic_box": { "keyType": "AVMString", "valueType": "uint64[]", "key": "ZHluYW1pY19ib3g=" }, "dynamic_arr_struct": { "keyType": "AVMString", "valueType": "DynamicArrayInAStruct", "key": "ZHluYW1pY19hcnJfc3RydWN0" }, "too_many_bools": { "keyType": "AVMString", "valueType": "bool[33000]", "key": "dG9vX21hbnlfYm9vbHM=" }, "big_fixed_bytes": { "keyType": "AVMString", "valueType": "AVMBytes", "key": "YmlnX2ZpeGVkX2J5dGVz" }, "big_bytes": { "keyType": "AVMString", "valueType": "AVMBytes", "key": "YmlnX2J5dGVz" } } }, "maps": { "global": {}, "local": {}, "box": { "box_map": { "keyType": "uint64", "valueType": "AVMString", "prefix": "" } } } }, "bareActions": { "create": [ "NoOp" ], "call": [] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 1578 ], "errorMessage": "check Box exists" }, { "pc": [ 1360 ], "errorMessage": "check self.big_bytes exists" }, { "pc": [ 773 ], "errorMessage": "check self.box_a exists" }, { "pc": [ 1587 ], "errorMessage": "check self.box_b exists" }, { "pc": [ 800, 1593 ], "errorMessage": "check self.box_c exists" }, { "pc": [ 3273 ], "errorMessage": "check self.box_map entry exists" }, { "pc": [ 1454 ], "errorMessage": "check self.many_ints exists" }, { "pc": [ 2726 ], "errorMessage": "check self.too_many_bools exists" }, { "pc": [ 2549 ], "errorMessage": "expected 1" }, { "pc": [ 2559 ], "errorMessage": "expected 2" }, { "pc": [ 2699 ], "errorMessage": "index access is out of bounds" }, { "pc": [ 762, 1102, 1471, 1561, 1572, 1599, 2153, 2164, 2179, 2206, 2221, 2234, 2247, 2273, 2298, 2320, 2330, 2364, 2371, 2383, 2410, 2421, 2428, 2435, 2456, 2481, 2506, 2517, 2544, 2554, 2585, 2595, 2643, 2708, 2749, 2907, 2953, 2982, 2993 ], "errorMessage": "index out of bounds" }, { "pc": [ 1912, 1993, 2046 ], "errorMessage": "invalid array encoding" }, { "pc": [ 682, 698, 1119, 1157, 1280, 1318, 1886, 1926, 1965, 2018, 2060, 3242 ], "errorMessage": "invalid array length header" }, { "pc": [ 2678 ], "errorMessage": "invalid number of bytes for arc4.bool" }, { "pc": [ 692, 708, 1126, 1164, 1287, 1325, 3249 ], "errorMessage": "invalid number of bytes for arc4.dynamic_array" }, { "pc": [ 675, 1084, 1093, 1112, 1150, 1185, 1194, 1257, 1273, 1311, 1346, 1355, 1728, 1793, 2136, 2145, 2340, 2349, 2358, 2669, 2718, 2800, 2847, 2933, 2942, 2963, 2972, 3235, 3269, 3295, 3309 ], "errorMessage": "invalid number of bytes for arc4.uint64" }, { "pc": [ 2097 ], "errorMessage": "invalid number of bytes for examples.box_storage.contract.NestedStruct" }, { "pc": [ 1881, 2013 ], "errorMessage": "invalid tail pointer at index 1 of (uint64,(len+(len+uint64[])[]),uint64)" }, { "pc": [ 1867 ], "errorMessage": "invalid tail pointer at index 1 of (uint64,(uint64,(len+(len+uint64[])[]),uint64),(len+(uint64,(len+(len+uint64[])[]),uint64)[]),uint64)" }, { "pc": [ 1959 ], "errorMessage": "invalid tail pointer at index 2 of (uint64,(uint64,(len+(len+uint64[])[]),uint64),(len+(uint64,(len+(len+uint64[])[]),uint64)[]),uint64)" }, { "pc": [ 1920, 2054 ], "errorMessage": "invalid tail pointer for (len+(len+uint64[])[])" }, { "pc": [ 1998 ], "errorMessage": "invalid tail pointer for (len+(uint64,(len+(len+uint64[])[]),uint64)[])" }, { "pc": [ 1862, 1876, 1954, 2008 ], "errorMessage": "invalid tuple encoding" }, { "pc": [ 3077 ], "errorMessage": "no data" }, { "pc": [ 2100 ], "errorMessage": "struct.a is truthy" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAxIDIgOCAwIDQwOTYgNDA5OCA1MDAwIDQxMzgKICAgIGJ5dGVjYmxvY2sgImJveCIgImR5bmFtaWNfYXJyX3N0cnVjdCIgMHgxNTFmN2M3NSAweDQyNGY1ODVmNDMgImJsb2IiICJkeW5hbWljX2JveCIgImJveF9sYXJnZSIgImJveF9hIiAiYm94X2QiICJiIiAidG9vX21hbnlfYm9vbHMiICJiaWdfYnl0ZXMiICJiaWdfZml4ZWRfYnl0ZXMiICJtYW55X2ludHMiIDB4MDAwMjM0MzIgIjAiIDB4Njg2NTZjNmM2ZiAweDA2ODEwMSAweDAwMTQgImJveF9yZWYiICJkZWZhdWx0IgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NjQKICAgIC8vIGNsYXNzIEJveENvbnRyYWN0KGFyYzQuQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDUyCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQKICAgIHB1c2hieXRlc3MgMHg3ZDM3Mjk2ZSAweDMzMzI1ZDNkIDB4MDE5OTQwOGQgMHg3NzIwNTljYSAweGFhNjhkODk0IDB4OWIwMWVlNTYgMHgxZDZmNmRhZiAweDI2NDFkYWVkIDB4NTBjMjIxNTcgMHg5ZDUyZWU4OCAweDlmYWJlNzRlIDB4ZjA5MDY5YWUgMHgwMTI2M2RmNiAweGQ1NjZjNjMyIDB4ZmFiY2I4ODUgMHhhNjE3NDgxMiAweGYxM2RkOTM3IDB4NWFiNjBmMmUgMHhmMDdhMDA2NCAweDc4ZjlhZjNmIDB4NWNiYjlkY2MgMHg5OTY0OTdhZSAweDZjZWM3MmZmIDB4NmY5ZDEwNzUgMHgwZDIyYjQ0MSAweDU5ZWYzNzYwIDB4YWE2NjZiOTYgMHhkZmJkZDYzNiAweDQxNDI3Y2QxIDB4MmExNDFmNmMgMHg3ZTg0Mzc0NCAweDI1NjAwYjU3IDB4MjllYTU5NWQgMHgxMTQ1MzE1MiAweGNlZDEyMjFlIDB4MDRlZjQ5NzEgMHgyM2VjYjMyYyAweGVlZjc1ODE2IDB4YjUzMjkxM2EgMHhjMjlmMTY2OSAweDljODg4YzA5IDB4ZTZmNjg1MDYgMHg4ZWUyYzM2NCAvLyBtZXRob2QgInNldF9ib3hlcyh1aW50NjQsYnl0ZVtdLHN0cmluZyl2b2lkIiwgbWV0aG9kICJjaGVja19rZXlzKCl2b2lkIiwgbWV0aG9kICJjcmVhdGVfbWFueV9pbnRzKCl2b2lkIiwgbWV0aG9kICJzZXRfbWFueV9pbnRzKHVpbnQ2NCx1aW50NjQpdm9pZCIsIG1ldGhvZCAiY3JlYXRlX2JpZ19maXhlZF9ieXRlcygpdm9pZCIsIG1ldGhvZCAidXBkYXRlX2JpZ19maXhlZF9ieXRlcyh1aW50NjQsYnl0ZVtdKXZvaWQiLCBtZXRob2QgImFzc2VydF9iaWdfZml4ZWRfYnl0ZXModWludDY0LGJ5dGVbXSl2b2lkIiwgbWV0aG9kICJzbGljZV9iaWdfZml4ZWRfYnl0ZXModWludDY0LHVpbnQ2NClieXRlW10iLCBtZXRob2QgImNyZWF0ZV9iaWdfYnl0ZXModWludDY0KXZvaWQiLCBtZXRob2QgInVwZGF0ZV9iaWdfYnl0ZXModWludDY0LGJ5dGVbXSl2b2lkIiwgbWV0aG9kICJhc3NlcnRfYmlnX2J5dGVzKHVpbnQ2NCxieXRlW10pdm9pZCIsIG1ldGhvZCAic2xpY2VfYmlnX2J5dGVzKHVpbnQ2NCx1aW50NjQpYnl0ZVtdIiwgbWV0aG9kICJzdW1fbWFueV9pbnRzKCl1aW50NjQiLCBtZXRob2QgImRlbGV0ZV9ib3hlcygpdm9pZCIsIG1ldGhvZCAiaW5kaXJlY3RfZXh0cmFjdF9hbmRfcmVwbGFjZSgpdm9pZCIsIG1ldGhvZCAicmVhZF9ib3hlcygpKHVpbnQ2NCxieXRlW10sc3RyaW5nLHVpbnQ2NCkiLCBtZXRob2QgImJveGVzX2V4aXN0KCkoYm9vbCxib29sLGJvb2wsYm9vbCkiLCBtZXRob2QgImNyZWF0ZV9keW5hbWljX2Fycl9zdHJ1Y3QoKXZvaWQiLCBtZXRob2QgImRlbGV0ZV9keW5hbWljX2Fycl9zdHJ1Y3QoKXZvaWQiLCBtZXRob2QgImFwcGVuZF9keW5hbWljX2Fycl9zdHJ1Y3QodWludDY0KXVpbnQ2NCIsIG1ldGhvZCAicG9wX2R5bmFtaWNfYXJyX3N0cnVjdCh1aW50NjQpdWludDY0IiwgbWV0aG9kICJzZXRfbmVzdGVkX3N0cnVjdCgodWludDY0LCh1aW50NjQsdWludDY0W11bXSx1aW50NjQpLCh1aW50NjQsdWludDY0W11bXSx1aW50NjQpW10sdWludDY0KSl2b2lkIiwgbWV0aG9kICJuZXN0ZWRfd3JpdGUodWludDY0LHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJuZXN0ZWRfcmVhZCh1aW50NjQsdWludDY0LHVpbnQ2NCl1aW50NjQiLCBtZXRob2QgInN1bV9keW5hbWljX2Fycl9zdHJ1Y3QoKXVpbnQ2NCIsIG1ldGhvZCAiY3JlYXRlX2Jvb2xzKCl2b2lkIiwgbWV0aG9kICJzZXRfYm9vbCh1aW50NjQsYm9vbCl2b2lkIiwgbWV0aG9kICJzdW1fYm9vbHModWludDY0KXVpbnQ2NCIsIG1ldGhvZCAiY3JlYXRlX2R5bmFtaWNfYm94KCl2b2lkIiwgbWV0aG9kICJkZWxldGVfZHluYW1pY19ib3goKXZvaWQiLCBtZXRob2QgImFwcGVuZF9keW5hbWljX2JveCh1aW50NjQpdWludDY0IiwgbWV0aG9kICJwb3BfZHluYW1pY19ib3godWludDY0KXVpbnQ2NCIsIG1ldGhvZCAic3VtX2R5bmFtaWNfYm94KCl1aW50NjQiLCBtZXRob2QgIndyaXRlX2R5bmFtaWNfYm94KHVpbnQ2NCx1aW50NjQpdm9pZCIsIG1ldGhvZCAid3JpdGVfZHluYW1pY19hcnJfc3RydWN0KHVpbnQ2NCx1aW50NjQpdm9pZCIsIG1ldGhvZCAic2xpY2VfYm94KCl2b2lkIiwgbWV0aG9kICJhcmM0X2JveCgpdm9pZCIsIG1ldGhvZCAidGVzdF9ib3hfcmVmKCl2b2lkIiwgbWV0aG9kICJib3hfbWFwX3Rlc3QoKXZvaWQiLCBtZXRob2QgImJveF9tYXBfc2V0KHVpbnQ2NCxzdHJpbmcpdm9pZCIsIG1ldGhvZCAiYm94X21hcF9nZXQodWludDY0KXN0cmluZyIsIG1ldGhvZCAiYm94X21hcF9kZWwodWludDY0KXZvaWQiLCBtZXRob2QgImJveF9tYXBfZXhpc3RzKHVpbnQ2NClib29sIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggc2V0X2JveGVzIG1haW5fY2hlY2tfa2V5c19yb3V0ZUA3IG1haW5fY3JlYXRlX21hbnlfaW50c19yb3V0ZUA4IHNldF9tYW55X2ludHMgbWFpbl9jcmVhdGVfYmlnX2ZpeGVkX2J5dGVzX3JvdXRlQDEwIHVwZGF0ZV9iaWdfZml4ZWRfYnl0ZXMgYXNzZXJ0X2JpZ19maXhlZF9ieXRlcyBzbGljZV9iaWdfZml4ZWRfYnl0ZXMgY3JlYXRlX2JpZ19ieXRlcyB1cGRhdGVfYmlnX2J5dGVzIGFzc2VydF9iaWdfYnl0ZXMgc2xpY2VfYmlnX2J5dGVzIHN1bV9tYW55X2ludHMgZGVsZXRlX2JveGVzIGluZGlyZWN0X2V4dHJhY3RfYW5kX3JlcGxhY2UgcmVhZF9ib3hlcyBib3hlc19leGlzdCBjcmVhdGVfZHluYW1pY19hcnJfc3RydWN0IG1haW5fZGVsZXRlX2R5bmFtaWNfYXJyX3N0cnVjdF9yb3V0ZUAyNCBhcHBlbmRfZHluYW1pY19hcnJfc3RydWN0IHBvcF9keW5hbWljX2Fycl9zdHJ1Y3Qgc2V0X25lc3RlZF9zdHJ1Y3QgbmVzdGVkX3dyaXRlIG5lc3RlZF9yZWFkIHN1bV9keW5hbWljX2Fycl9zdHJ1Y3QgbWFpbl9jcmVhdGVfYm9vbHNfcm91dGVAMzEgc2V0X2Jvb2wgc3VtX2Jvb2xzIGNyZWF0ZV9keW5hbWljX2JveCBtYWluX2RlbGV0ZV9keW5hbWljX2JveF9yb3V0ZUAzNSBhcHBlbmRfZHluYW1pY19ib3ggcG9wX2R5bmFtaWNfYm94IHN1bV9keW5hbWljX2JveCB3cml0ZV9keW5hbWljX2JveCB3cml0ZV9keW5hbWljX2Fycl9zdHJ1Y3Qgc2xpY2VfYm94IG1haW5fYXJjNF9ib3hfcm91dGVANDIgdGVzdF9ib3hfcmVmIGJveF9tYXBfdGVzdCBib3hfbWFwX3NldCBib3hfbWFwX2dldCBib3hfbWFwX2RlbCBib3hfbWFwX2V4aXN0cwogICAgZXJyCgptYWluX2FyYzRfYm94X3JvdXRlQDQyOgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzQyLTM0MwogICAgLy8gYm94X2QgPSBCb3goU3RhdGljSW50cywga2V5PUJ5dGVzKGIiZCIpKQogICAgLy8gYm94X2QudmFsdWUgPSBTdGF0aWNJbnRzKGFyYzQuVUludDgoMCksIGFyYzQuVUludDgoMSksIGFyYzQuVUludDgoMiksIGFyYzQuVUludDgoMykpCiAgICBwdXNoYnl0ZXNzIDB4NjQgMHgwMDAxMDIwMwogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzQzCiAgICAvLyBib3hfZC52YWx1ZSA9IFN0YXRpY0ludHMoYXJjNC5VSW50OCgwKSwgYXJjNC5VSW50OCgxKSwgYXJjNC5VSW50OCgyKSwgYXJjNC5VSW50OCgzKSkKICAgIGJveF9wdXQKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjM0MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2RlbGV0ZV9keW5hbWljX2JveF9yb3V0ZUAzNToKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMwMQogICAgLy8gZGVsIHNlbGYuZHluYW1pY19ib3gudmFsdWUKICAgIGJ5dGVjIDUgLy8gImR5bmFtaWNfYm94IgogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyOTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9jcmVhdGVfYm9vbHNfcm91dGVAMzE6CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyNzkKICAgIC8vIHNlbGYudG9vX21hbnlfYm9vbHMuY3JlYXRlKCkKICAgIGJ5dGVjIDEwIC8vICJ0b29fbWFueV9ib29scyIKICAgIHB1c2hpbnQgNDEyNQogICAgYm94X2NyZWF0ZQogICAgcG9wCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyNzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9kZWxldGVfZHluYW1pY19hcnJfc3RydWN0X3JvdXRlQDI0OgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjE1CiAgICAvLyBkZWwgc2VsZi5keW5hbWljX2Fycl9zdHJ1Y3QudmFsdWUKICAgIGJ5dGVjXzEgLy8gImR5bmFtaWNfYXJyX3N0cnVjdCIKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjEzCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fY3JlYXRlX2JpZ19maXhlZF9ieXRlc19yb3V0ZUAxMDoKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEzNAogICAgLy8gc2VsZi5iaWdfZml4ZWRfYnl0ZXMuY3JlYXRlKCkKICAgIGJ5dGVjIDEyIC8vICJiaWdfZml4ZWRfYnl0ZXMiCiAgICBpbnRjIDYgLy8gNTAwMAogICAgYm94X2NyZWF0ZQogICAgcG9wCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxMzIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2NyZWF0ZV9tYW55X2ludHNfcm91dGVAODoKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEyNgogICAgLy8gc2VsZi5tYW55X2ludHMuY3JlYXRlKCkKICAgIGJ5dGVjIDEzIC8vICJtYW55X2ludHMiCiAgICBwdXNoaW50IDQxMDQKICAgIGJveF9jcmVhdGUKICAgIHBvcAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTI0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9jaGVja19rZXlzX3JvdXRlQDc6CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxMTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUA1MjoKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICAmJgogICAgcmV0dXJuCgoKLy8gX3B1eWFfbGliLmJveF9hcmM0LmJveF9keW5hbWljX2FycmF5X3BvcF9maXhlZF9zaXplKGJveF9rZXk6IGJ5dGVzLCBhcnJheV9vZmZzZXQ6IHVpbnQ2NCwgZml4ZWRfYnl0ZV9zaXplOiB1aW50NjQpIC0+IHZvaWQ6CmJveF9keW5hbWljX2FycmF5X3BvcF9maXhlZF9zaXplOgogICAgcHJvdG8gMyAwCiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18xIC8vIDIKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgZHVwCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIC0zCiAgICBmcmFtZV9kaWcgLTIKICAgIHVuY292ZXIgMgogICAgYm94X3JlcGxhY2UKICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18xIC8vIDIKICAgICsKICAgIHN3YXAKICAgIGZyYW1lX2RpZyAtMQogICAgKgogICAgKwogICAgZnJhbWVfZGlnIC0zCiAgICBzd2FwCiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hieXRlcyAweAogICAgYm94X3NwbGljZQogICAgZnJhbWVfZGlnIC0zCiAgICBib3hfbGVuCiAgICBwb3AKICAgIGZyYW1lX2RpZyAtMQogICAgLQogICAgZnJhbWVfZGlnIC0zCiAgICBzd2FwCiAgICBib3hfcmVzaXplCiAgICByZXRzdWIKCgovLyBfcHV5YV9saWIuYm94X2FyYzQuYm94X2R5bmFtaWNfYXJyYXlfY29uY2F0X2ZpeGVkKGJveF9rZXk6IGJ5dGVzLCBhcnJheV9vZmZzZXQ6IHVpbnQ2NCwgbmV3X2l0ZW1zX2J5dGVzOiBieXRlcywgbmV3X2l0ZW1zX2NvdW50OiB1aW50NjQsIGZpeGVkX2VsZW1lbnRfc2l6ZTogdWludDY0KSAtPiB2b2lkOgpib3hfZHluYW1pY19hcnJheV9jb25jYXRfZml4ZWQ6CiAgICBwcm90byA1IDAKICAgIGZyYW1lX2RpZyAtNQogICAgZnJhbWVfZGlnIC00CiAgICBpbnRjXzEgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGZyYW1lX2RpZyAtNQogICAgYm94X2xlbgogICAgcG9wCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgKgogICAgKwogICAgZnJhbWVfZGlnIC01CiAgICBzd2FwCiAgICBib3hfcmVzaXplCiAgICBkdXAKICAgIGZyYW1lX2RpZyAtMgogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAtNQogICAgZnJhbWVfZGlnIC00CiAgICB1bmNvdmVyIDIKICAgIGJveF9yZXBsYWNlCiAgICBmcmFtZV9kaWcgLTQKICAgIGludGNfMSAvLyAyCiAgICArCiAgICBzd2FwCiAgICBmcmFtZV9kaWcgLTEKICAgICoKICAgICsKICAgIGZyYW1lX2RpZyAtNQogICAgc3dhcAogICAgaW50Y18zIC8vIDAKICAgIGZyYW1lX2RpZyAtMwogICAgYm94X3NwbGljZQogICAgcmV0c3ViCgoKLy8gZXhhbXBsZXMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94Q29udHJhY3Quc2V0X2JveGVzW3JvdXRpbmddKCkgLT4gdm9pZDoKc2V0X2JveGVzOgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6ODEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBpbnRjXzMgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18xIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgaW50Y18zIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMSAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTo4MwogICAgLy8gc2VsZi5ib3hfYS52YWx1ZSA9IGEKICAgIHVuY292ZXIgNAogICAgaXRvYgogICAgYnl0ZWMgNyAvLyAiYm94X2EiCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTo4NAogICAgLy8gc2VsZi5ib3hfYi52YWx1ZSA9IGIuY29weSgpCiAgICBieXRlYyA5IC8vICJiIgogICAgYm94X2RlbAogICAgcG9wCiAgICBieXRlYyA5IC8vICJiIgogICAgZGlnIDQKICAgIGJveF9wdXQKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojg1CiAgICAvLyBzZWxmLmJveF9jLnZhbHVlID0gYwogICAgYnl0ZWNfMyAvLyAweDQyNGY1ODVmNDMKICAgIGJveF9kZWwKICAgIHBvcAogICAgYnl0ZWNfMyAvLyAweDQyNGY1ODVmNDMKICAgIGRpZyAyCiAgICBib3hfcHV0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTo4NgogICAgLy8gc2VsZi5ib3hfZC52YWx1ZSA9IGIubmF0aXZlCiAgICBkaWcgMwogICAgZXh0cmFjdCAyIDAKICAgIGJ5dGVjIDggLy8gImJveF9kIgogICAgYm94X2RlbAogICAgcG9wCiAgICBieXRlYyA4IC8vICJib3hfZCIKICAgIGRpZyAxCiAgICBib3hfcHV0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTo4NwogICAgLy8gc2VsZi5ib3hfbGFyZ2UuY3JlYXRlKCkKICAgIGJ5dGVjIDYgLy8gImJveF9sYXJnZSIKICAgIHB1c2hpbnQgNjE2MAogICAgYm94X2NyZWF0ZQogICAgcG9wCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTo4OAogICAgLy8gc2VsZi5ib3hfbGFyZ2UudmFsdWUuZSA9IFVJbnQ2NCg0MikKICAgIHB1c2hpbnQgNDIKICAgIGl0b2IKICAgIGJ5dGVjIDYgLy8gImJveF9sYXJnZSIKICAgIGludGMgNCAvLyA0MDk2CiAgICBkaWcgMgogICAgYm94X3JlcGxhY2UgLy8gb24gZXJyb3I6IGluZGV4IG91dCBvZiBib3VuZHMKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojg5CiAgICAvLyBzZWxmLmJveF9sYXJnZS5yZXBsYWNlKHNpemVfb2YoQnl0ZXMxMDI0KSAqIDQsIGFyYzQuVUludDY0KDQyKS5ieXRlcykKICAgIGJ5dGVjIDYgLy8gImJveF9sYXJnZSIKICAgIGludGMgNCAvLyA0MDk2CiAgICB1bmNvdmVyIDIKICAgIGJveF9yZXBsYWNlCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTo5NAogICAgLy8gc2VsZi5ib3hfYS52YWx1ZSArPSAzCiAgICBieXRlYyA3IC8vICJib3hfYSIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9hIGV4aXN0cwogICAgYnRvaQogICAgcHVzaGludCAzCiAgICArCiAgICBpdG9iCiAgICBieXRlYyA3IC8vICJib3hfYSIKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5Ojk2LTk3CiAgICAvLyAjIHRlc3QgLmxlbmd0aAogICAgLy8gYXNzZXJ0IHNlbGYuYm94X2EubGVuZ3RoID09IDgKICAgIGJ5dGVjIDcgLy8gImJveF9hIgogICAgYm94X2xlbgogICAgcG9wCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6OTgKICAgIC8vIGFzc2VydCBzZWxmLmJveF9iLmxlbmd0aCA9PSBiLmJ5dGVzLmxlbmd0aAogICAgYnl0ZWMgOSAvLyAiYiIKICAgIGJveF9sZW4KICAgIHBvcAogICAgdW5jb3ZlciA0CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTo5OQogICAgLy8gYXNzZXJ0IHNlbGYuYm94X2MubGVuZ3RoID09IGMuYnl0ZXMubGVuZ3RoCiAgICBieXRlY18zIC8vIDB4NDI0ZjU4NWY0MwogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X2MgZXhpc3RzCiAgICBkdXAKICAgIGRpZyAzCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxMDAKICAgIC8vIGFzc2VydCBzZWxmLmJveF9kLmxlbmd0aCA9PSBiLm5hdGl2ZS5sZW5ndGgKICAgIGJ5dGVjIDggLy8gImJveF9kIgogICAgYm94X2xlbgogICAgcG9wCiAgICBkaWcgMgogICAgbGVuCiAgICBkdXAyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxMDItMTAzCiAgICAvLyAjIHRlc3QgLnZhbHVlLmJ5dGVzCiAgICAvLyBhc3NlcnQgc2VsZi5ib3hfYy52YWx1ZS5ieXRlc1swXSA9PSBjLmJ5dGVzWzBdCiAgICBieXRlY18zIC8vIDB4NDI0ZjU4NWY0MwogICAgaW50Y18zIC8vIDAKICAgIGludGNfMCAvLyAxCiAgICBib3hfZXh0cmFjdAogICAgZGlnIDYKICAgIGV4dHJhY3QgMCAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxMDQKICAgIC8vIGFzc2VydCBzZWxmLmJveF9jLnZhbHVlLmJ5dGVzWy0xXSA9PSBjLmJ5dGVzWy0xXQogICAgZGlnIDIKICAgIGludGNfMCAvLyAxCiAgICAtCiAgICBieXRlY18zIC8vIDB4NDI0ZjU4NWY0MwogICAgc3dhcAogICAgaW50Y18wIC8vIDEKICAgIGJveF9leHRyYWN0CiAgICBkaWcgNQogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIGRpZyA3CiAgICBzd2FwCiAgICBpbnRjXzAgLy8gMQogICAgZXh0cmFjdDMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEwNQogICAgLy8gYXNzZXJ0IHNlbGYuYm94X2MudmFsdWUuYnl0ZXNbOi0xXSA9PSBjLmJ5dGVzWzotMV0KICAgIGludGNfMCAvLyAxCiAgICBkaWcgMwogICAgPj0KICAgIGludGNfMCAvLyAxCiAgICBkaWcgNAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGRpZyAzCiAgICBzd2FwCiAgICAtCiAgICBieXRlY18zIC8vIDB4NDI0ZjU4NWY0MwogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgYm94X2V4dHJhY3QKICAgIGludGNfMCAvLyAxCiAgICBkaWcgNgogICAgPj0KICAgIGludGNfMCAvLyAxCiAgICBkaWcgNwogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGRpZyA2CiAgICBzd2FwCiAgICAtCiAgICBkaWcgNwogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgPT0KICAgIGFzc2VydAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTA2CiAgICAvLyBhc3NlcnQgc2VsZi5ib3hfYy52YWx1ZS5ieXRlc1s6Ml0gPT0gYy5ieXRlc1s6Ml0KICAgIGludGNfMSAvLyAyCiAgICBkaWcgMwogICAgPj0KICAgIGludGNfMSAvLyAyCiAgICB1bmNvdmVyIDQKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBieXRlY18zIC8vIDB4NDI0ZjU4NWY0MwogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgYm94X2V4dHJhY3QKICAgIGludGNfMSAvLyAyCiAgICBkaWcgNQogICAgPj0KICAgIGludGNfMSAvLyAyCiAgICB1bmNvdmVyIDYKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICB1bmNvdmVyIDUKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEwOC0xMDkKICAgIC8vICMgdGVzdCAudmFsdWUgd2l0aCBCeXRlcyB0eXBlCiAgICAvLyBhc3NlcnQgc2VsZi5ib3hfZC52YWx1ZVswXSA9PSBiLm5hdGl2ZVswXQogICAgYnl0ZWMgOCAvLyAiYm94X2QiCiAgICBpbnRjXzMgLy8gMAogICAgaW50Y18wIC8vIDEKICAgIGJveF9leHRyYWN0CiAgICB1bmNvdmVyIDQKICAgIGV4dHJhY3QgMiAxCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxMTAKICAgIC8vIGFzc2VydCBzZWxmLmJveF9kLnZhbHVlWy0xXSA9PSBiLm5hdGl2ZVstMV0KICAgIGRpZyAxCiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgYnl0ZWMgOCAvLyAiYm94X2QiCiAgICBzd2FwCiAgICBpbnRjXzAgLy8gMQogICAgYm94X2V4dHJhY3QKICAgIGRpZyAxCiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgZGlnIDQKICAgIHN3YXAKICAgIGludGNfMCAvLyAxCiAgICBleHRyYWN0MwogICAgPT0KICAgIGFzc2VydAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTExCiAgICAvLyBhc3NlcnQgc2VsZi5ib3hfZC52YWx1ZVs6LTFdID09IGIubmF0aXZlWzotMV0KICAgIGludGNfMCAvLyAxCiAgICBkaWcgMgogICAgPj0KICAgIGludGNfMCAvLyAxCiAgICBkaWcgMwogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGRpZyAyCiAgICBzd2FwCiAgICAtCiAgICBieXRlYyA4IC8vICJib3hfZCIKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIGJveF9leHRyYWN0CiAgICBpbnRjXzAgLy8gMQogICAgZGlnIDIKICAgID49CiAgICBpbnRjXzAgLy8gMQogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBkaWcgMgogICAgc3dhcAogICAgLQogICAgZGlnIDQKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjExMgogICAgLy8gYXNzZXJ0IHNlbGYuYm94X2QudmFsdWVbOjVdID09IGIubmF0aXZlWzo1XQogICAgcHVzaGludCA1CiAgICBkaWcgMgogICAgPj0KICAgIHB1c2hpbnQgNQogICAgZGlnIDMKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBieXRlYyA4IC8vICJib3hfZCIKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIGJveF9leHRyYWN0CiAgICBwdXNoaW50IDUKICAgIGRpZyAyCiAgICA+PQogICAgcHVzaGludCA1CiAgICBkaWcgMwogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGRpZyA0CiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxMTMKICAgIC8vIGFzc2VydCBzZWxmLmJveF9kLnZhbHVlWzogVUludDY0KDIpXSA9PSBiLm5hdGl2ZVs6IFVJbnQ2NCgyKV0KICAgIGludGNfMSAvLyAyCiAgICBkaWcgMgogICAgPj0KICAgIGludGNfMSAvLyAyCiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBieXRlYyA4IC8vICJib3hfZCIKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIGJveF9leHRyYWN0CiAgICBpbnRjXzEgLy8gMgogICAgZGlnIDIKICAgID49CiAgICBpbnRjXzEgLy8gMgogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgdW5jb3ZlciAyCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxMTUKICAgIC8vIGFzc2VydCBzZWxmLmJveF9sYXJnZS5sZW5ndGggPT0gc2l6ZV9vZihMYXJnZVN0cnVjdCkKICAgIGJ5dGVjIDYgLy8gImJveF9sYXJnZSIKICAgIGJveF9sZW4KICAgIHBvcAogICAgcHVzaGludCA2MTYwCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTo4MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gZXhhbXBsZXMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94Q29udHJhY3Quc2V0X21hbnlfaW50c1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldF9tYW55X2ludHM6CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxMjgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxMzAKICAgIC8vIHNlbGYubWFueV9pbnRzLnZhbHVlW2luZGV4XSA9IHZhbHVlCiAgICBzd2FwCiAgICBpbnRjXzIgLy8gOAogICAgKgogICAgYnl0ZWMgMTMgLy8gIm1hbnlfaW50cyIKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgYm94X3JlcGxhY2UgLy8gb24gZXJyb3I6IGluZGV4IG91dCBvZiBib3VuZHMKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEyOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBleGFtcGxlcy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hDb250cmFjdC51cGRhdGVfYmlnX2ZpeGVkX2J5dGVzW3JvdXRpbmddKCkgLT4gdm9pZDoKdXBkYXRlX2JpZ19maXhlZF9ieXRlczoKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjEzNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgaW50Y18zIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMSAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxMzgKICAgIC8vIHNlbGYuYmlnX2ZpeGVkX2J5dGVzLnNwbGljZShzdGFydF9pbmRleCwgdmFsdWUubGVuZ3RoLCB2YWx1ZSkKICAgIGR1cAogICAgbGVuCiAgICBieXRlYyAxMiAvLyAiYmlnX2ZpeGVkX2J5dGVzIgogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDIKICAgIHVuY292ZXIgMwogICAgYm94X3NwbGljZQogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTM2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIGV4YW1wbGVzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveENvbnRyYWN0LmFzc2VydF9iaWdfZml4ZWRfYnl0ZXNbcm91dGluZ10oKSAtPiB2b2lkOgphc3NlcnRfYmlnX2ZpeGVkX2J5dGVzOgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTQwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBpbnRjXzMgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18xIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgZXh0cmFjdCAyIDAKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE0MgogICAgLy8gYXNzZXJ0IHNlbGYuYmlnX2ZpeGVkX2J5dGVzLnZhbHVlW2luZGV4XSA9PSB2YWx1ZQogICAgYnl0ZWMgMTIgLy8gImJpZ19maXhlZF9ieXRlcyIKICAgIHVuY292ZXIgMgogICAgaW50Y18wIC8vIDEKICAgIGJveF9leHRyYWN0CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxNDAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gZXhhbXBsZXMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94Q29udHJhY3Quc2xpY2VfYmlnX2ZpeGVkX2J5dGVzW3JvdXRpbmddKCkgLT4gdm9pZDoKc2xpY2VfYmlnX2ZpeGVkX2J5dGVzOgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTQ0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTQ2CiAgICAvLyByZXR1cm4gc2VsZi5iaWdfZml4ZWRfYnl0ZXMudmFsdWVbc3RhcnQ6ZW5kXQogICAgZGlnIDEKICAgIGludGMgNiAvLyA1MDAwCiAgICA+PQogICAgdW5jb3ZlciAyCiAgICBpbnRjIDYgLy8gNTAwMAogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGRpZyAxCiAgICBpbnRjIDYgLy8gNTAwMAogICAgPj0KICAgIHVuY292ZXIgMgogICAgaW50YyA2IC8vIDUwMDAKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBkdXAKICAgIGRpZyAyCiAgICA8CiAgICBkaWcgMgogICAgc3dhcAogICAgc2VsZWN0CiAgICBkaWcgMQogICAgLQogICAgYnl0ZWMgMTIgLy8gImJpZ19maXhlZF9ieXRlcyIKICAgIGNvdmVyIDIKICAgIGJveF9leHRyYWN0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxNDQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMiAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIGV4YW1wbGVzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveENvbnRyYWN0LmNyZWF0ZV9iaWdfYnl0ZXNbcm91dGluZ10oKSAtPiB2b2lkOgpjcmVhdGVfYmlnX2J5dGVzOgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTQ4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTUwCiAgICAvLyBzZWxmLmJpZ19ieXRlcy5jcmVhdGUoc2l6ZT1zaXplKQogICAgYnl0ZWMgMTEgLy8gImJpZ19ieXRlcyIKICAgIHN3YXAKICAgIGJveF9jcmVhdGUKICAgIHBvcAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTQ4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIGV4YW1wbGVzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveENvbnRyYWN0LnVwZGF0ZV9iaWdfYnl0ZXNbcm91dGluZ10oKSAtPiB2b2lkOgp1cGRhdGVfYmlnX2J5dGVzOgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTUyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBpbnRjXzMgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18xIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuZHluYW1pY19hcnJheTxhcmM0LnVpbnQ4PgogICAgZXh0cmFjdCAyIDAKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE1NAogICAgLy8gc2VsZi5iaWdfYnl0ZXMuc3BsaWNlKHN0YXJ0X2luZGV4LCB2YWx1ZS5sZW5ndGgsIHZhbHVlKQogICAgZHVwCiAgICBsZW4KICAgIGJ5dGVjIDExIC8vICJiaWdfYnl0ZXMiCiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgMgogICAgdW5jb3ZlciAzCiAgICBib3hfc3BsaWNlCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxNTIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gZXhhbXBsZXMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94Q29udHJhY3QuYXNzZXJ0X2JpZ19ieXRlc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmFzc2VydF9iaWdfYnl0ZXM6CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxNTYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGludGNfMyAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzEgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICBleHRyYWN0IDIgMAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTU4CiAgICAvLyBhc3NlcnQgc2VsZi5iaWdfYnl0ZXMudmFsdWVbaW5kZXhdID09IHZhbHVlCiAgICBieXRlYyAxMSAvLyAiYmlnX2J5dGVzIgogICAgdW5jb3ZlciAyCiAgICBpbnRjXzAgLy8gMQogICAgYm94X2V4dHJhY3QKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE1NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBleGFtcGxlcy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hDb250cmFjdC5zbGljZV9iaWdfYnl0ZXNbcm91dGluZ10oKSAtPiB2b2lkOgpzbGljZV9iaWdfYnl0ZXM6CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxNjAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxNjIKICAgIC8vIHJldHVybiBzZWxmLmJpZ19ieXRlcy52YWx1ZVtzdGFydDplbmRdCiAgICBieXRlYyAxMSAvLyAiYmlnX2J5dGVzIgogICAgYm94X2xlbgogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYmlnX2J5dGVzIGV4aXN0cwogICAgZGlnIDIKICAgIGRpZyAxCiAgICA+PQogICAgdW5jb3ZlciAzCiAgICBkaWcgMgogICAgdW5jb3ZlciAyCiAgICBzZWxlY3QKICAgIGRpZyAyCiAgICBkaWcgMgogICAgPj0KICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgZHVwCiAgICBkaWcgMgogICAgPAogICAgZGlnIDIKICAgIHN3YXAKICAgIHNlbGVjdAogICAgZGlnIDEKICAgIC0KICAgIGJ5dGVjIDExIC8vICJiaWdfYnl0ZXMiCiAgICBjb3ZlciAyCiAgICBib3hfZXh0cmFjdAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTYwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzIgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBleGFtcGxlcy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hDb250cmFjdC5zdW1fbWFueV9pbnRzW3JvdXRpbmddKCkgLT4gdm9pZDoKc3VtX21hbnlfaW50czoKCnN1bV9tYW55X2ludHNfd2hpbGVfdG9wQDc6CiAgICBwdXNoaW50IDEwNTEwCiAgICBnbG9iYWwgT3Bjb2RlQnVkZ2V0CiAgICA+CiAgICBieiBzdW1fbWFueV9pbnRzX2FmdGVyX3doaWxlQDEyCiAgICBpdHhuX2JlZ2luCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgYnl0ZWMgMTcgLy8gMHgwNjgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtCiAgICBieXRlYyAxNyAvLyAweDA2ODEwMQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbQogICAgaW50Y18zIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgYiBzdW1fbWFueV9pbnRzX3doaWxlX3RvcEA3CgpzdW1fbWFueV9pbnRzX2FmdGVyX3doaWxlQDEyOgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTY3CiAgICAvLyB0b3RhbCA9IFVJbnQ2NCgwKQogICAgaW50Y18zIC8vIDAKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE2OAogICAgLy8gZm9yIHZhbCBpbiBzZWxmLm1hbnlfaW50cy52YWx1ZToKICAgIGJ5dGVjIDEzIC8vICJtYW55X2ludHMiCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLm1hbnlfaW50cyBleGlzdHMKICAgIGludGNfMyAvLyAwCgpzdW1fbWFueV9pbnRzX2Zvcl9oZWFkZXJAMjoKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE2OAogICAgLy8gZm9yIHZhbCBpbiBzZWxmLm1hbnlfaW50cy52YWx1ZToKICAgIGR1cAogICAgcHVzaGludCA1MTMKICAgIDwKICAgIGJ6IHN1bV9tYW55X2ludHNfYWZ0ZXJfZm9yQDUKICAgIGR1cAogICAgaW50Y18yIC8vIDgKICAgICoKICAgIGJ5dGVjIDEzIC8vICJtYW55X2ludHMiCiAgICBzd2FwCiAgICBpbnRjXzIgLy8gOAogICAgYm94X2V4dHJhY3QgLy8gb24gZXJyb3I6IGluZGV4IG91dCBvZiBib3VuZHMKICAgIGJ0b2kKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE2OQogICAgLy8gdG90YWwgPSB0b3RhbCArIHZhbAogICAgdW5jb3ZlciAyCiAgICArCiAgICBzd2FwCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgYiBzdW1fbWFueV9pbnRzX2Zvcl9oZWFkZXJAMgoKc3VtX21hbnlfaW50c19hZnRlcl9mb3JANToKICAgIHBvcAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTY0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaXRvYgogICAgYnl0ZWNfMiAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIGV4YW1wbGVzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveENvbnRyYWN0LmRlbGV0ZV9ib3hlc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmRlbGV0ZV9ib3hlczoKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE3NAogICAgLy8gZGVsIHNlbGYuYm94X2EudmFsdWUKICAgIGJ5dGVjIDcgLy8gImJveF9hIgogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxNzUKICAgIC8vIGRlbCBzZWxmLmJveF9iLnZhbHVlCiAgICBieXRlYyA5IC8vICJiIgogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxNzYKICAgIC8vIGRlbCBzZWxmLmJveF9jLnZhbHVlCiAgICBieXRlY18zIC8vIDB4NDI0ZjU4NWY0MwogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxNzcKICAgIC8vIGFzc2VydCBzZWxmLmJveF9hLmdldChkZWZhdWx0PVVJbnQ2NCg0MikpID09IDQyCiAgICBieXRlYyA3IC8vICJib3hfYSIKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGJ0b2kKICAgIHB1c2hpbnQgNDIKICAgIGRpZyAxCiAgICBkaWcgMwogICAgc2VsZWN0CiAgICBwdXNoaW50IDQyCiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxNzgKICAgIC8vIGFzc2VydCBzZWxmLmJveF9iLmdldChkZWZhdWx0PWFyYzQuRHluYW1pY0J5dGVzKGIiNDIiKSkubmF0aXZlID09IGIiNDIiCiAgICBieXRlYyA5IC8vICJiIgogICAgYm94X2dldAogICAgYnl0ZWMgMTQgLy8gMHgwMDAyMzQzMgogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICBleHRyYWN0IDIgMAogICAgcHVzaGJ5dGVzIDB4MzQzMgogICAgPT0KICAgIGFzc2VydAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTc5CiAgICAvLyBhc3NlcnQgc2VsZi5ib3hfYy5nZXQoZGVmYXVsdD1hcmM0LlN0cmluZygiNDIiKSkgPT0gIjQyIgogICAgYnl0ZWNfMyAvLyAweDQyNGY1ODVmNDMKICAgIGJveF9nZXQKICAgIGJ5dGVjIDE0IC8vIDB4MDAwMjM0MzIKICAgIGNvdmVyIDIKICAgIHNlbGVjdAogICAgYnl0ZWMgMTQgLy8gMHgwMDAyMzQzMgogICAgPT0KICAgIGFzc2VydAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTgxCiAgICAvLyBhc3NlcnQgbm90IGFfZXhpc3RzCiAgICBzd2FwCiAgICAhCiAgICBhc3NlcnQKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjE4MgogICAgLy8gYXNzZXJ0IGEgPT0gMAogICAgIQogICAgYXNzZXJ0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxODMKICAgIC8vIGRlbCBzZWxmLmJveF9sYXJnZS52YWx1ZQogICAgYnl0ZWMgNiAvLyAiYm94X2xhcmdlIgogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxNzIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIGV4YW1wbGVzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveENvbnRyYWN0LmluZGlyZWN0X2V4dHJhY3RfYW5kX3JlcGxhY2Vbcm91dGluZ10oKSAtPiB2b2lkOgppbmRpcmVjdF9leHRyYWN0X2FuZF9yZXBsYWNlOgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTg3CiAgICAvLyBsYXJnZSA9IHNlbGYuYm94X2xhcmdlLnZhbHVlLmNvcHkoKQogICAgYnl0ZWMgNiAvLyAiYm94X2xhcmdlIgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTg3LTE4OAogICAgLy8gbGFyZ2UgPSBzZWxmLmJveF9sYXJnZS52YWx1ZS5jb3B5KCkKICAgIC8vIGxhcmdlLmUgKz0gMQogICAgaW50YyA0IC8vIDQwOTYKICAgIGludGNfMiAvLyA4CiAgICBib3hfZXh0cmFjdCAvLyBvbiBlcnJvcjogaW5kZXggb3V0IG9mIGJvdW5kcwogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTg4CiAgICAvLyBsYXJnZS5lICs9IDEKICAgIGJ0b2kKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBpdG9iCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxODkKICAgIC8vIHNlbGYuYm94X2xhcmdlLnZhbHVlID0gbGFyZ2UuY29weSgpCiAgICBieXRlYyA2IC8vICJib3hfbGFyZ2UiCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxODgtMTg5CiAgICAvLyBsYXJnZS5lICs9IDEKICAgIC8vIHNlbGYuYm94X2xhcmdlLnZhbHVlID0gbGFyZ2UuY29weSgpCiAgICBpbnRjIDQgLy8gNDA5NgogICAgdW5jb3ZlciAyCiAgICBib3hfcmVwbGFjZSAvLyBvbiBlcnJvcjogaW5kZXggb3V0IG9mIGJvdW5kcwogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTg1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIGV4YW1wbGVzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveENvbnRyYWN0LnJlYWRfYm94ZXNbcm91dGluZ10oKSAtPiB2b2lkOgpyZWFkX2JveGVzOgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTk0CiAgICAvLyBnZXRfYm94X3ZhbHVlX3BsdXNfMShzZWxmLmJveF9hKSAtIDEsCiAgICBieXRlYyA3IC8vICJib3hfYSIKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQ0MQogICAgLy8gcmV0dXJuIGJveC52YWx1ZSArIDEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBCb3ggZXhpc3RzCiAgICBidG9pCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTk0CiAgICAvLyBnZXRfYm94X3ZhbHVlX3BsdXNfMShzZWxmLmJveF9hKSAtIDEsCiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MTk1CiAgICAvLyBzZWxmLmJveF9iLnZhbHVlLm5hdGl2ZSwKICAgIGJ5dGVjIDkgLy8gImIiCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5ib3hfYiBleGlzdHMKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxOTYKICAgIC8vIHNlbGYuYm94X2MudmFsdWUsCiAgICBieXRlY18zIC8vIDB4NDI0ZjU4NWY0MwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYm94X2MgZXhpc3RzCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxOTcKICAgIC8vIHNlbGYuYm94X2xhcmdlLnZhbHVlLmUsCiAgICBieXRlYyA2IC8vICJib3hfbGFyZ2UiCiAgICBpbnRjIDQgLy8gNDA5NgogICAgaW50Y18yIC8vIDgKICAgIGJveF9leHRyYWN0IC8vIG9uIGVycm9yOiBpbmRleCBvdXQgb2YgYm91bmRzCiAgICBidG9pCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToxOTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICBkaWcgMwogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciA0CiAgICBjb25jYXQKICAgIHN3YXAKICAgIGJ5dGVjIDE4IC8vIDB4MDAxNAogICAgY29uY2F0CiAgICBkaWcgMQogICAgbGVuCiAgICBwdXNoaW50IDIwCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzIgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBleGFtcGxlcy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hDb250cmFjdC5ib3hlc19leGlzdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmJveGVzX2V4aXN0OgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjAyCiAgICAvLyByZXR1cm4gYm9vbChzZWxmLmJveF9hKSwgYm9vbChzZWxmLmJveF9iKSwgYm9vbChzZWxmLmJveF9jKSwgYm9vbChzZWxmLmJveF9sYXJnZSkKICAgIGJ5dGVjIDcgLy8gImJveF9hIgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieXRlYyA5IC8vICJiIgogICAgYm94X2xlbgogICAgY292ZXIgMgogICAgcG9wCiAgICBieXRlY18zIC8vIDB4NDI0ZjU4NWY0MwogICAgYm94X2xlbgogICAgY292ZXIgMwogICAgcG9wCiAgICBieXRlYyA2IC8vICJib3hfbGFyZ2UiCiAgICBib3hfbGVuCiAgICBjb3ZlciA0CiAgICBwb3AKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIwMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBwdXNoYnl0ZXMgMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBpbnRjXzAgLy8gMQogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGludGNfMSAvLyAyCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgcHVzaGludCAzCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMiAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIGV4YW1wbGVzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveENvbnRyYWN0LmNyZWF0ZV9keW5hbWljX2Fycl9zdHJ1Y3Rbcm91dGluZ10oKSAtPiB2b2lkOgpjcmVhdGVfZHluYW1pY19hcnJfc3RydWN0OgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjA3CiAgICAvLyBhPVR4bi5udW1fYXBwX2FyZ3MsCiAgICB0eG4gTnVtQXBwQXJncwogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjA5CiAgICAvLyBiPVR4bi5udW1fYXBwX2FyZ3MgKiAyLAogICAgZHVwCiAgICBpbnRjXzEgLy8gMgogICAgKgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjA2LTIxMQogICAgLy8gc2VsZi5keW5hbWljX2Fycl9zdHJ1Y3QudmFsdWUgPSBEeW5hbWljQXJyYXlJbkFTdHJ1Y3QoCiAgICAvLyAgICAgYT1UeG4ubnVtX2FwcF9hcmdzLAogICAgLy8gICAgIGFycj1BcnJheVtVSW50NjRdKCksCiAgICAvLyAgICAgYj1UeG4ubnVtX2FwcF9hcmdzICogMiwKICAgIC8vICAgICBhcnIyPUFycmF5W1VJbnQ2NF0oKSwKICAgIC8vICkKICAgIHN3YXAKICAgIGl0b2IKICAgIGJ5dGVjIDE4IC8vIDB4MDAxNAogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDAwMTYwMDAwMDAwMAogICAgY29uY2F0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyMDYKICAgIC8vIHNlbGYuZHluYW1pY19hcnJfc3RydWN0LnZhbHVlID0gRHluYW1pY0FycmF5SW5BU3RydWN0KAogICAgYnl0ZWNfMSAvLyAiZHluYW1pY19hcnJfc3RydWN0IgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjA2LTIxMQogICAgLy8gc2VsZi5keW5hbWljX2Fycl9zdHJ1Y3QudmFsdWUgPSBEeW5hbWljQXJyYXlJbkFTdHJ1Y3QoCiAgICAvLyAgICAgYT1UeG4ubnVtX2FwcF9hcmdzLAogICAgLy8gICAgIGFycj1BcnJheVtVSW50NjRdKCksCiAgICAvLyAgICAgYj1UeG4ubnVtX2FwcF9hcmdzICogMiwKICAgIC8vICAgICBhcnIyPUFycmF5W1VJbnQ2NF0oKSwKICAgIC8vICkKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjA2CiAgICAvLyBzZWxmLmR5bmFtaWNfYXJyX3N0cnVjdC52YWx1ZSA9IER5bmFtaWNBcnJheUluQVN0cnVjdCgKICAgIGJ5dGVjXzEgLy8gImR5bmFtaWNfYXJyX3N0cnVjdCIKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIwNi0yMTEKICAgIC8vIHNlbGYuZHluYW1pY19hcnJfc3RydWN0LnZhbHVlID0gRHluYW1pY0FycmF5SW5BU3RydWN0KAogICAgLy8gICAgIGE9VHhuLm51bV9hcHBfYXJncywKICAgIC8vICAgICBhcnI9QXJyYXlbVUludDY0XSgpLAogICAgLy8gICAgIGI9VHhuLm51bV9hcHBfYXJncyAqIDIsCiAgICAvLyAgICAgYXJyMj1BcnJheVtVSW50NjRdKCksCiAgICAvLyApCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyMDQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIGV4YW1wbGVzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveENvbnRyYWN0LmFwcGVuZF9keW5hbWljX2Fycl9zdHJ1Y3Rbcm91dGluZ10oKSAtPiB2b2lkOgphcHBlbmRfZHluYW1pY19hcnJfc3RydWN0OgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjE3CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIxOQogICAgLy8gZm9yIGkgaW4gdXJhbmdlKHRpbWVzKToKICAgIGludGNfMyAvLyAwCgphcHBlbmRfZHluYW1pY19hcnJfc3RydWN0X2Zvcl9oZWFkZXJAMjoKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIxOQogICAgLy8gZm9yIGkgaW4gdXJhbmdlKHRpbWVzKToKICAgIGR1cAogICAgZGlnIDIKICAgIDwKICAgIGJ6IGFwcGVuZF9keW5hbWljX2Fycl9zdHJ1Y3RfYWZ0ZXJfZm9yQDUKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIyMAogICAgLy8gc2VsZi5keW5hbWljX2Fycl9zdHJ1Y3QudmFsdWUuYXJyLmFwcGVuZChpKQogICAgZHVwCiAgICBpdG9iCiAgICBieXRlY18xIC8vICJkeW5hbWljX2Fycl9zdHJ1Y3QiCiAgICBwdXNoaW50IDE4CiAgICBpbnRjXzEgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIyMAogICAgLy8gc2VsZi5keW5hbWljX2Fycl9zdHJ1Y3QudmFsdWUuYXJyLmFwcGVuZChpKQogICAgaW50Y18yIC8vIDgKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyMjAKICAgIC8vIHNlbGYuZHluYW1pY19hcnJfc3RydWN0LnZhbHVlLmFyci5hcHBlbmQoaSkKICAgIGJ5dGVjXzEgLy8gImR5bmFtaWNfYXJyX3N0cnVjdCIKICAgIHB1c2hpbnQgMTgKICAgIHVuY292ZXIgMgogICAgYm94X3JlcGxhY2UKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIyMAogICAgLy8gc2VsZi5keW5hbWljX2Fycl9zdHJ1Y3QudmFsdWUuYXJyLmFwcGVuZChpKQogICAgYnl0ZWNfMSAvLyAiZHluYW1pY19hcnJfc3RydWN0IgogICAgcHVzaGludCAyMAogICAgdW5jb3ZlciAyCiAgICBpbnRjXzAgLy8gMQogICAgaW50Y18yIC8vIDgKICAgIGNhbGxzdWIgYm94X2R5bmFtaWNfYXJyYXlfY29uY2F0X2ZpeGVkCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyMTkKICAgIC8vIGZvciBpIGluIHVyYW5nZSh0aW1lcyk6CiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgYiBhcHBlbmRfZHluYW1pY19hcnJfc3RydWN0X2Zvcl9oZWFkZXJAMgoKYXBwZW5kX2R5bmFtaWNfYXJyX3N0cnVjdF9hZnRlcl9mb3JANToKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIyMQogICAgLy8gcmV0dXJuIHNlbGYuZHluYW1pY19hcnJfc3RydWN0LnZhbHVlLmFyci5sZW5ndGgKICAgIGJ5dGVjXzEgLy8gImR5bmFtaWNfYXJyX3N0cnVjdCIKICAgIHB1c2hpbnQgMjAKICAgIGludGNfMSAvLyAyCiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjE3CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGl0b2IKICAgIGJ5dGVjXzIgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBleGFtcGxlcy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hDb250cmFjdC5wb3BfZHluYW1pY19hcnJfc3RydWN0W3JvdXRpbmddKCkgLT4gdm9pZDoKcG9wX2R5bmFtaWNfYXJyX3N0cnVjdDoKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIyMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyMjUKICAgIC8vIGZvciBfcG9wIGluIHVyYW5nZSh0aW1lcyk6CiAgICBpbnRjXzMgLy8gMAoKcG9wX2R5bmFtaWNfYXJyX3N0cnVjdF9mb3JfaGVhZGVyQDI6CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyMjUKICAgIC8vIGZvciBfcG9wIGluIHVyYW5nZSh0aW1lcyk6CiAgICBkdXAKICAgIGRpZyAyCiAgICA8CiAgICBieiBwb3BfZHluYW1pY19hcnJfc3RydWN0X2FmdGVyX2ZvckA1CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyMjYKICAgIC8vIHNlbGYuZHluYW1pY19hcnJfc3RydWN0LnZhbHVlLmFyci5wb3AoKQogICAgYnl0ZWNfMSAvLyAiZHluYW1pY19hcnJfc3RydWN0IgogICAgcHVzaGludCAxOAogICAgaW50Y18xIC8vIDIKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyMjYKICAgIC8vIHNlbGYuZHluYW1pY19hcnJfc3RydWN0LnZhbHVlLmFyci5wb3AoKQogICAgaW50Y18yIC8vIDgKICAgIC0KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyMjYKICAgIC8vIHNlbGYuZHluYW1pY19hcnJfc3RydWN0LnZhbHVlLmFyci5wb3AoKQogICAgYnl0ZWNfMSAvLyAiZHluYW1pY19hcnJfc3RydWN0IgogICAgcHVzaGludCAxOAogICAgdW5jb3ZlciAyCiAgICBib3hfcmVwbGFjZQogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjI2CiAgICAvLyBzZWxmLmR5bmFtaWNfYXJyX3N0cnVjdC52YWx1ZS5hcnIucG9wKCkKICAgIGJ5dGVjXzEgLy8gImR5bmFtaWNfYXJyX3N0cnVjdCIKICAgIHB1c2hpbnQgMjAKICAgIGludGNfMiAvLyA4CiAgICBjYWxsc3ViIGJveF9keW5hbWljX2FycmF5X3BvcF9maXhlZF9zaXplCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyMjUKICAgIC8vIGZvciBfcG9wIGluIHVyYW5nZSh0aW1lcyk6CiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgYiBwb3BfZHluYW1pY19hcnJfc3RydWN0X2Zvcl9oZWFkZXJAMgoKcG9wX2R5bmFtaWNfYXJyX3N0cnVjdF9hZnRlcl9mb3JANToKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIyOAogICAgLy8gcmV0dXJuIHNlbGYuZHluYW1pY19hcnJfc3RydWN0LnZhbHVlLmFyci5sZW5ndGgKICAgIGJ5dGVjXzEgLy8gImR5bmFtaWNfYXJyX3N0cnVjdCIKICAgIHB1c2hpbnQgMjAKICAgIGludGNfMSAvLyAyCiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjIzCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGl0b2IKICAgIGJ5dGVjXzIgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBleGFtcGxlcy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hDb250cmFjdC5zZXRfbmVzdGVkX3N0cnVjdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldF9uZXN0ZWRfc3RydWN0OgogICAgaW50Y18zIC8vIDAKICAgIHB1c2hieXRlcyAiIgogICAgZHVwbiAyCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyMzAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXBuIDIKICAgIGxlbgogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGR1cAogICAgaW50Y18yIC8vIDgKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIHR1cGxlIGVuY29kaW5nCiAgICBkdXAKICAgIHB1c2hpbnQgMjAKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCB0YWlsIHBvaW50ZXIgYXQgaW5kZXggMSBvZiAodWludDY0LCh1aW50NjQsKGxlbisobGVuK3VpbnQ2NFtdKVtdKSx1aW50NjQpLChsZW4rKHVpbnQ2NCwobGVuKyhsZW4rdWludDY0W10pW10pLHVpbnQ2NClbXSksdWludDY0KQogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBkdXAKICAgIGxlbgogICAgZGlnIDEKICAgIGludGNfMiAvLyA4CiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCB0dXBsZSBlbmNvZGluZwogICAgZHVwCiAgICBwdXNoaW50IDE4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgdGFpbCBwb2ludGVyIGF0IGluZGV4IDEgb2YgKHVpbnQ2NCwobGVuKyhsZW4rdWludDY0W10pW10pLHVpbnQ2NCkKICAgIHN3YXAKICAgIHN1YnN0cmluZzMKICAgIGR1cAogICAgaW50Y18zIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgY292ZXIgNAogICAgaW50Y18xIC8vIDIKICAgICoKICAgIHN3YXAKICAgIGV4dHJhY3QgMiAwCiAgICBpbnRjXzMgLy8gMAoKc2V0X25lc3RlZF9zdHJ1Y3RfZm9yX2hlYWRlckAxOgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjMwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgZHVwCiAgICBkaWcgNgogICAgPAogICAgYnogc2V0X25lc3RlZF9zdHJ1Y3RfYWZ0ZXJfZm9yQDQKICAgIGR1cAogICAgaW50Y18xIC8vIDIKICAgICoKICAgIGRpZyAyCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgZW5jb2RpbmcKICAgIGR1cAogICAgdW5jb3ZlciA1CiAgICBkdXAKICAgIGNvdmVyIDQKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCB0YWlsIHBvaW50ZXIgZm9yIChsZW4rKGxlbit1aW50NjRbXSlbXSkKICAgIGRpZyAxCiAgICBsZW4KICAgIHN1YnN0cmluZzMKICAgIGludGNfMyAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzIgLy8gOAogICAgKgogICAgaW50Y18xIC8vIDIKICAgICsKICAgICsKICAgIGNvdmVyIDIKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBiIHNldF9uZXN0ZWRfc3RydWN0X2Zvcl9oZWFkZXJAMQoKc2V0X25lc3RlZF9zdHJ1Y3RfYWZ0ZXJfZm9yQDQ6CiAgICBwb3BuIDIKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIzMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHB1c2hpbnQgNDAKICAgICsKICAgIGR1cAogICAgYnVyeSA3CiAgICBkaWcgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBwdXNoaW50IDEwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCB0dXBsZSBlbmNvZGluZwogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCB0YWlsIHBvaW50ZXIgYXQgaW5kZXggMiBvZiAodWludDY0LCh1aW50NjQsKGxlbisobGVuK3VpbnQ2NFtdKVtdKSx1aW50NjQpLChsZW4rKHVpbnQ2NCwobGVuKyhsZW4rdWludDY0W10pW10pLHVpbnQ2NClbXSksdWludDY0KQogICAgZGlnIDIKICAgIHN1YnN0cmluZzMKICAgIGR1cAogICAgaW50Y18zIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGR1cAogICAgYnVyeSA3CiAgICBpbnRjXzEgLy8gMgogICAgKgogICAgc3dhcAogICAgZXh0cmFjdCAyIDAKICAgIGJ1cnkgOAogICAgaW50Y18zIC8vIDAKCnNldF9uZXN0ZWRfc3RydWN0X2Zvcl9oZWFkZXJANToKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIzMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGR1cAogICAgZGlnIDcKICAgIDwKICAgIGJ6IHNldF9uZXN0ZWRfc3RydWN0X2FmdGVyX2ZvckAxMgogICAgZHVwCiAgICBpbnRjXzEgLy8gMgogICAgKgogICAgZGlnIDkKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBlbmNvZGluZwogICAgZHVwCiAgICBkaWcgNAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHRhaWwgcG9pbnRlciBmb3IgKGxlbisodWludDY0LChsZW4rKGxlbit1aW50NjRbXSlbXSksdWludDY0KVtdKQogICAgZGlnIDEKICAgIGxlbgogICAgc3Vic3RyaW5nMwogICAgZHVwCiAgICBsZW4KICAgIGRpZyAxCiAgICBpbnRjXzIgLy8gOAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgdHVwbGUgZW5jb2RpbmcKICAgIGR1cAogICAgcHVzaGludCAxOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHRhaWwgcG9pbnRlciBhdCBpbmRleCAxIG9mICh1aW50NjQsKGxlbisobGVuK3VpbnQ2NFtdKVtdKSx1aW50NjQpCiAgICBzd2FwCiAgICBzdWJzdHJpbmczCiAgICBkdXAKICAgIGludGNfMyAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBkdXAKICAgIGJ1cnkgOAogICAgaW50Y18xIC8vIDIKICAgICoKICAgIGNvdmVyIDMKICAgIGV4dHJhY3QgMiAwCiAgICBzd2FwCiAgICBpbnRjXzMgLy8gMAoKc2V0X25lc3RlZF9zdHJ1Y3RfZm9yX2hlYWRlckA3OgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjMwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgZHVwCiAgICBkaWcgOQogICAgPAogICAgYnogc2V0X25lc3RlZF9zdHJ1Y3RfYWZ0ZXJfZm9yQDEwCiAgICBkdXAKICAgIGludGNfMSAvLyAyCiAgICAqCiAgICBkaWcgMwogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGVuY29kaW5nCiAgICBkdXAKICAgIHVuY292ZXIgNwogICAgZHVwCiAgICBjb3ZlciA0CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgdGFpbCBwb2ludGVyIGZvciAobGVuKyhsZW4rdWludDY0W10pW10pCiAgICBkaWcgMQogICAgbGVuCiAgICBzdWJzdHJpbmczCiAgICBpbnRjXzMgLy8gMAogICAgZXh0cmFjdF91aW50MTYgLy8gb24gZXJyb3I6IGludmFsaWQgYXJyYXkgbGVuZ3RoIGhlYWRlcgogICAgaW50Y18yIC8vIDgKICAgICoKICAgIGludGNfMSAvLyAyCiAgICArCiAgICArCiAgICBjb3ZlciA0CiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgYiBzZXRfbmVzdGVkX3N0cnVjdF9mb3JfaGVhZGVyQDcKCnNldF9uZXN0ZWRfc3RydWN0X2FmdGVyX2ZvckAxMDoKICAgIHBvcAogICAgYnVyeSAxCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyMzAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB1bmNvdmVyIDIKICAgIHB1c2hpbnQgMjAKICAgICsKICAgIHVuY292ZXIgMgogICAgKwogICAgc3dhcAogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGIgc2V0X25lc3RlZF9zdHJ1Y3RfZm9yX2hlYWRlckA1CgpzZXRfbmVzdGVkX3N0cnVjdF9hZnRlcl9mb3JAMTI6CiAgICBwb3AKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIzMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAyCiAgICArCiAgICBkaWcgNgogICAgKwogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgZXhhbXBsZXMuYm94X3N0b3JhZ2UuY29udHJhY3QuTmVzdGVkU3RydWN0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyMzMKICAgIC8vIGFzc2VydCBzdHJ1Y3QuYSwgInN0cnVjdC5hIGlzIHRydXRoeSIKICAgIGludGNfMyAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgYXNzZXJ0IC8vIHN0cnVjdC5hIGlzIHRydXRoeQogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjM0CiAgICAvLyBzdHJ1Y3RfYnl0ZXMgPSBUeG4uYXBwbGljYXRpb25fYXJncygxKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjM1CiAgICAvLyBzdHJ1Y3Rfc2l6ZSA9IHN0cnVjdF9ieXRlcy5sZW5ndGgKICAgIGR1cAogICAgbGVuCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyMzYKICAgIC8vIHRhaWxfb2Zmc2V0ID0gVUludDY0KDQwOTYgKyAyKQogICAgaW50YyA1IC8vIDQwOTgKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIzNy0yMzgKICAgIC8vICMgaW5pdGlhbGl6ZSBib3ggdG8gemVybwogICAgLy8gYm94LmNyZWF0ZShzaXplPXRhaWxfb2Zmc2V0ICsgc3RydWN0X3NpemUpCiAgICArCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyMzIKICAgIC8vIGJveCA9IEJveChMYXJnZU5lc3RlZFN0cnVjdCwga2V5PSJib3giKQogICAgYnl0ZWNfMCAvLyAiYm94IgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjM3LTIzOAogICAgLy8gIyBpbml0aWFsaXplIGJveCB0byB6ZXJvCiAgICAvLyBib3guY3JlYXRlKHNpemU9dGFpbF9vZmZzZXQgKyBzdHJ1Y3Rfc2l6ZSkKICAgIHN3YXAKICAgIGJveF9jcmVhdGUKICAgIHBvcAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjMyCiAgICAvLyBib3ggPSBCb3goTGFyZ2VOZXN0ZWRTdHJ1Y3QsIGtleT0iYm94IikKICAgIGJ5dGVjXzAgLy8gImJveCIKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjIzOS0yNDAKICAgIC8vICMgc2V0IGNvcnJlY3Qgb2Zmc2V0IGZvciBkeW5hbWljIHBvcnRpb24KICAgIC8vIGJveC5yZXBsYWNlKHRhaWxfb2Zmc2V0IC0gMiwgYXJjNC5VSW50MTYodGFpbF9vZmZzZXQpLmJ5dGVzKQogICAgaW50YyA0IC8vIDQwOTYKICAgIHB1c2hieXRlcyAweDEwMDIKICAgIGJveF9yZXBsYWNlCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyMzIKICAgIC8vIGJveCA9IEJveChMYXJnZU5lc3RlZFN0cnVjdCwga2V5PSJib3giKQogICAgYnl0ZWNfMCAvLyAiYm94IgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjM2CiAgICAvLyB0YWlsX29mZnNldCA9IFVJbnQ2NCg0MDk2ICsgMikKICAgIGludGMgNSAvLyA0MDk4CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyNDEtMjQyCiAgICAvLyAjIHNldCBkeW5hbWljIGRhdGEKICAgIC8vIGJveC5yZXBsYWNlKHRhaWxfb2Zmc2V0LCBzdHJ1Y3RfYnl0ZXMpCiAgICB1bmNvdmVyIDIKICAgIGJveF9yZXBsYWNlCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyMzAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gZXhhbXBsZXMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94Q29udHJhY3QubmVzdGVkX3dyaXRlW3JvdXRpbmddKCkgLT4gdm9pZDoKbmVzdGVkX3dyaXRlOgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjQ0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgZHVwCiAgICBidG9pCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyNDYKICAgIC8vIGJveCA9IEJveChMYXJnZU5lc3RlZFN0cnVjdCwga2V5PSJib3giKQogICAgYnl0ZWNfMCAvLyAiYm94IgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjQ3CiAgICAvLyBib3gudmFsdWUubmVzdGVkLmEgPSB2YWx1ZQogICAgaW50YyA1IC8vIDQwOTgKICAgIHVuY292ZXIgMwogICAgYm94X3JlcGxhY2UgLy8gb24gZXJyb3I6IGluZGV4IG91dCBvZiBib3VuZHMKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI0OAogICAgLy8gYm94LnZhbHVlLm5lc3RlZC5iID0gdmFsdWUgKyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBpdG9iCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyNDYKICAgIC8vIGJveCA9IEJveChMYXJnZU5lc3RlZFN0cnVjdCwga2V5PSJib3giKQogICAgYnl0ZWNfMCAvLyAiYm94IgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjQ4CiAgICAvLyBib3gudmFsdWUubmVzdGVkLmIgPSB2YWx1ZSArIDEKICAgIHB1c2hpbnQgNDExMAogICAgdW5jb3ZlciAyCiAgICBib3hfcmVwbGFjZSAvLyBvbiBlcnJvcjogaW5kZXggb3V0IG9mIGJvdW5kcwogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjQ5CiAgICAvLyBib3gudmFsdWUubmVzdGVkLmlubmVyLmFycl9hcnJbaW5kZXhdW2luZGV4XSA9IHZhbHVlICsgMgogICAgZHVwCiAgICBpbnRjXzEgLy8gMgogICAgKwogICAgaXRvYgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjQ2CiAgICAvLyBib3ggPSBCb3goTGFyZ2VOZXN0ZWRTdHJ1Y3QsIGtleT0iYm94IikKICAgIGJ5dGVjXzAgLy8gImJveCIKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI0OQogICAgLy8gYm94LnZhbHVlLm5lc3RlZC5pbm5lci5hcnJfYXJyW2luZGV4XVtpbmRleF0gPSB2YWx1ZSArIDIKICAgIHB1c2hpbnQgNDEzNgogICAgaW50Y18xIC8vIDIKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICBkaWcgMwogICAgPgogICAgYXNzZXJ0IC8vIGluZGV4IG91dCBvZiBib3VuZHMKICAgIGludGNfMSAvLyAyCiAgICBkaWcgMwogICAgKgogICAgaW50YyA3IC8vIDQxMzgKICAgIGRpZyAxCiAgICArCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyNDYKICAgIC8vIGJveCA9IEJveChMYXJnZU5lc3RlZFN0cnVjdCwga2V5PSJib3giKQogICAgYnl0ZWNfMCAvLyAiYm94IgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjQ5CiAgICAvLyBib3gudmFsdWUubmVzdGVkLmlubmVyLmFycl9hcnJbaW5kZXhdW2luZGV4XSA9IHZhbHVlICsgMgogICAgc3dhcAogICAgaW50Y18xIC8vIDIKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICBpbnRjIDcgLy8gNDEzOAogICAgKwogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjQ2CiAgICAvLyBib3ggPSBCb3goTGFyZ2VOZXN0ZWRTdHJ1Y3QsIGtleT0iYm94IikKICAgIGJ5dGVjXzAgLy8gImJveCIKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI0OQogICAgLy8gYm94LnZhbHVlLm5lc3RlZC5pbm5lci5hcnJfYXJyW2luZGV4XVtpbmRleF0gPSB2YWx1ZSArIDIKICAgIGRpZyAxCiAgICBpbnRjXzEgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGRpZyA1CiAgICA+CiAgICBhc3NlcnQgLy8gaW5kZXggb3V0IG9mIGJvdW5kcwogICAgaW50Y18xIC8vIDIKICAgICsKICAgIGRpZyA0CiAgICBpbnRjXzIgLy8gOAogICAgKgogICAgc3dhcAogICAgZGlnIDEKICAgICsKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI0NgogICAgLy8gYm94ID0gQm94KExhcmdlTmVzdGVkU3RydWN0LCBrZXk9ImJveCIpCiAgICBieXRlY18wIC8vICJib3giCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyNDkKICAgIC8vIGJveC52YWx1ZS5uZXN0ZWQuaW5uZXIuYXJyX2FycltpbmRleF1baW5kZXhdID0gdmFsdWUgKyAyCiAgICBzd2FwCiAgICB1bmNvdmVyIDQKICAgIGJveF9yZXBsYWNlIC8vIG9uIGVycm9yOiBpbmRleCBvdXQgb2YgYm91bmRzCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyNTAKICAgIC8vIGJveC52YWx1ZS5uZXN0ZWQuaW5uZXIuYyA9IHZhbHVlICsgMwogICAgZGlnIDIKICAgIHB1c2hpbnQgMwogICAgKwogICAgaXRvYgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjQ2CiAgICAvLyBib3ggPSBCb3goTGFyZ2VOZXN0ZWRTdHJ1Y3QsIGtleT0iYm94IikKICAgIGJ5dGVjXzAgLy8gImJveCIKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1MAogICAgLy8gYm94LnZhbHVlLm5lc3RlZC5pbm5lci5jID0gdmFsdWUgKyAzCiAgICBwdXNoaW50IDQxMTgKICAgIHVuY292ZXIgMgogICAgYm94X3JlcGxhY2UgLy8gb24gZXJyb3I6IGluZGV4IG91dCBvZiBib3VuZHMKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1MQogICAgLy8gYm94LnZhbHVlLm5lc3RlZC5pbm5lci5kID0gdmFsdWUgKyA0CiAgICBkaWcgMgogICAgcHVzaGludCA0CiAgICArCiAgICBpdG9iCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyNDYKICAgIC8vIGJveCA9IEJveChMYXJnZU5lc3RlZFN0cnVjdCwga2V5PSJib3giKQogICAgYnl0ZWNfMCAvLyAiYm94IgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjUxCiAgICAvLyBib3gudmFsdWUubmVzdGVkLmlubmVyLmQgPSB2YWx1ZSArIDQKICAgIHB1c2hpbnQgNDEyOAogICAgdW5jb3ZlciAyCiAgICBib3hfcmVwbGFjZSAvLyBvbiBlcnJvcjogaW5kZXggb3V0IG9mIGJvdW5kcwogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjUyCiAgICAvLyBib3gudmFsdWUubmVzdGVkLndvYWhbaW5kZXhdLmFycl9hcnJbaW5kZXhdW2luZGV4XSA9IHZhbHVlICsgNQogICAgdW5jb3ZlciAyCiAgICBwdXNoaW50IDUKICAgICsKICAgIGl0b2IKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI0NgogICAgLy8gYm94ID0gQm94KExhcmdlTmVzdGVkU3RydWN0LCBrZXk9ImJveCIpCiAgICBieXRlY18wIC8vICJib3giCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyNTIKICAgIC8vIGJveC52YWx1ZS5uZXN0ZWQud29haFtpbmRleF0uYXJyX2FycltpbmRleF1baW5kZXhdID0gdmFsdWUgKyA1CiAgICBwdXNoaW50IDQxMDgKICAgIGludGNfMSAvLyAyCiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgaW50YyA1IC8vIDQwOTgKICAgICsKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI0NgogICAgLy8gYm94ID0gQm94KExhcmdlTmVzdGVkU3RydWN0LCBrZXk9ImJveCIpCiAgICBieXRlY18wIC8vICJib3giCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyNTIKICAgIC8vIGJveC52YWx1ZS5uZXN0ZWQud29haFtpbmRleF0uYXJyX2FycltpbmRleF1baW5kZXhdID0gdmFsdWUgKyA1CiAgICBkaWcgMQogICAgaW50Y18xIC8vIDIKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICBkaWcgNQogICAgPgogICAgYXNzZXJ0IC8vIGluZGV4IG91dCBvZiBib3VuZHMKICAgIGludGNfMSAvLyAyCiAgICArCiAgICBkdXAKICAgIGRpZyA0CiAgICArCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyNDYKICAgIC8vIGJveCA9IEJveChMYXJnZU5lc3RlZFN0cnVjdCwga2V5PSJib3giKQogICAgYnl0ZWNfMCAvLyAiYm94IgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjUyCiAgICAvLyBib3gudmFsdWUubmVzdGVkLndvYWhbaW5kZXhdLmFycl9hcnJbaW5kZXhdW2luZGV4XSA9IHZhbHVlICsgNQogICAgc3dhcAogICAgaW50Y18xIC8vIDIKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICArCiAgICBwdXNoaW50IDE4CiAgICArCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyNDYKICAgIC8vIGJveCA9IEJveChMYXJnZU5lc3RlZFN0cnVjdCwga2V5PSJib3giKQogICAgYnl0ZWNfMCAvLyAiYm94IgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjUyCiAgICAvLyBib3gudmFsdWUubmVzdGVkLndvYWhbaW5kZXhdLmFycl9hcnJbaW5kZXhdW2luZGV4XSA9IHZhbHVlICsgNQogICAgZGlnIDEKICAgIGludGNfMSAvLyAyCiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgZGlnIDUKICAgID4KICAgIGFzc2VydCAvLyBpbmRleCBvdXQgb2YgYm91bmRzCiAgICBpbnRjXzEgLy8gMgogICAgKwogICAgZHVwCiAgICB1bmNvdmVyIDQKICAgICsKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI0NgogICAgLy8gYm94ID0gQm94KExhcmdlTmVzdGVkU3RydWN0LCBrZXk9ImJveCIpCiAgICBieXRlY18wIC8vICJib3giCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyNTIKICAgIC8vIGJveC52YWx1ZS5uZXN0ZWQud29haFtpbmRleF0uYXJyX2FycltpbmRleF1baW5kZXhdID0gdmFsdWUgKyA1CiAgICBzd2FwCiAgICBpbnRjXzEgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgICsKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI0NgogICAgLy8gYm94ID0gQm94KExhcmdlTmVzdGVkU3RydWN0LCBrZXk9ImJveCIpCiAgICBieXRlY18wIC8vICJib3giCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyNTIKICAgIC8vIGJveC52YWx1ZS5uZXN0ZWQud29haFtpbmRleF0uYXJyX2FycltpbmRleF1baW5kZXhdID0gdmFsdWUgKyA1CiAgICBkaWcgMQogICAgaW50Y18xIC8vIDIKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICB1bmNvdmVyIDQKICAgID4KICAgIGFzc2VydCAvLyBpbmRleCBvdXQgb2YgYm91bmRzCiAgICBpbnRjXzEgLy8gMgogICAgKwogICAgdW5jb3ZlciAyCiAgICArCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyNDYKICAgIC8vIGJveCA9IEJveChMYXJnZU5lc3RlZFN0cnVjdCwga2V5PSJib3giKQogICAgYnl0ZWNfMCAvLyAiYm94IgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjUyCiAgICAvLyBib3gudmFsdWUubmVzdGVkLndvYWhbaW5kZXhdLmFycl9hcnJbaW5kZXhdW2luZGV4XSA9IHZhbHVlICsgNQogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBib3hfcmVwbGFjZSAvLyBvbiBlcnJvcjogaW5kZXggb3V0IG9mIGJvdW5kcwogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjQ0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIGV4YW1wbGVzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveENvbnRyYWN0Lm5lc3RlZF9yZWFkW3JvdXRpbmddKCkgLT4gdm9pZDoKbmVzdGVkX3JlYWQ6CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyNTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyNTYKICAgIC8vIGJveCA9IEJveChMYXJnZU5lc3RlZFN0cnVjdCwga2V5PSJib3giKQogICAgYnl0ZWNfMCAvLyAiYm94IgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjU3CiAgICAvLyBhID0gYm94LnZhbHVlLm5lc3RlZC5hCiAgICBpbnRjIDUgLy8gNDA5OAogICAgaW50Y18yIC8vIDgKICAgIGJveF9leHRyYWN0IC8vIG9uIGVycm9yOiBpbmRleCBvdXQgb2YgYm91bmRzCiAgICBidG9pCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyNTYKICAgIC8vIGJveCA9IEJveChMYXJnZU5lc3RlZFN0cnVjdCwga2V5PSJib3giKQogICAgYnl0ZWNfMCAvLyAiYm94IgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjU4CiAgICAvLyBiID0gYm94LnZhbHVlLm5lc3RlZC5iCiAgICBwdXNoaW50IDQxMTAKICAgIGludGNfMiAvLyA4CiAgICBib3hfZXh0cmFjdCAvLyBvbiBlcnJvcjogaW5kZXggb3V0IG9mIGJvdW5kcwogICAgYnRvaQogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjU2CiAgICAvLyBib3ggPSBCb3goTGFyZ2VOZXN0ZWRTdHJ1Y3QsIGtleT0iYm94IikKICAgIGJ5dGVjXzAgLy8gImJveCIKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1OQogICAgLy8gYXJyX2FyciA9IGJveC52YWx1ZS5uZXN0ZWQuaW5uZXIuYXJyX2FycltpMV1baTJdCiAgICBwdXNoaW50IDQxMzYKICAgIGludGNfMSAvLyAyCiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgZGlnIDUKICAgID4KICAgIGFzc2VydCAvLyBpbmRleCBvdXQgb2YgYm91bmRzCiAgICBpbnRjXzEgLy8gMgogICAgZGlnIDUKICAgICoKICAgIGludGMgNyAvLyA0MTM4CiAgICBkaWcgMQogICAgKwogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjU2CiAgICAvLyBib3ggPSBCb3goTGFyZ2VOZXN0ZWRTdHJ1Y3QsIGtleT0iYm94IikKICAgIGJ5dGVjXzAgLy8gImJveCIKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1OQogICAgLy8gYXJyX2FyciA9IGJveC52YWx1ZS5uZXN0ZWQuaW5uZXIuYXJyX2FycltpMV1baTJdCiAgICBzd2FwCiAgICBpbnRjXzEgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGludGMgNyAvLyA0MTM4CiAgICArCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyNTYKICAgIC8vIGJveCA9IEJveChMYXJnZU5lc3RlZFN0cnVjdCwga2V5PSJib3giKQogICAgYnl0ZWNfMCAvLyAiYm94IgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjU5CiAgICAvLyBhcnJfYXJyID0gYm94LnZhbHVlLm5lc3RlZC5pbm5lci5hcnJfYXJyW2kxXVtpMl0KICAgIGRpZyAxCiAgICBpbnRjXzEgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGRpZyA2CiAgICA+CiAgICBhc3NlcnQgLy8gaW5kZXggb3V0IG9mIGJvdW5kcwogICAgaW50Y18xIC8vIDIKICAgICsKICAgIGRpZyA1CiAgICBpbnRjXzIgLy8gOAogICAgKgogICAgKwogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjU2CiAgICAvLyBib3ggPSBCb3goTGFyZ2VOZXN0ZWRTdHJ1Y3QsIGtleT0iYm94IikKICAgIGJ5dGVjXzAgLy8gImJveCIKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1OQogICAgLy8gYXJyX2FyciA9IGJveC52YWx1ZS5uZXN0ZWQuaW5uZXIuYXJyX2FycltpMV1baTJdCiAgICBzd2FwCiAgICBpbnRjXzIgLy8gOAogICAgYm94X2V4dHJhY3QgLy8gb24gZXJyb3I6IGluZGV4IG91dCBvZiBib3VuZHMKICAgIGJ0b2kKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1NgogICAgLy8gYm94ID0gQm94KExhcmdlTmVzdGVkU3RydWN0LCBrZXk9ImJveCIpCiAgICBieXRlY18wIC8vICJib3giCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyNjAKICAgIC8vIGMgPSBib3gudmFsdWUubmVzdGVkLmlubmVyLmMKICAgIHB1c2hpbnQgNDExOAogICAgaW50Y18yIC8vIDgKICAgIGJveF9leHRyYWN0IC8vIG9uIGVycm9yOiBpbmRleCBvdXQgb2YgYm91bmRzCiAgICBidG9pCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyNTYKICAgIC8vIGJveCA9IEJveChMYXJnZU5lc3RlZFN0cnVjdCwga2V5PSJib3giKQogICAgYnl0ZWNfMCAvLyAiYm94IgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjYxCiAgICAvLyBkID0gYm94LnZhbHVlLm5lc3RlZC5pbm5lci5kCiAgICBwdXNoaW50IDQxMjgKICAgIGludGNfMiAvLyA4CiAgICBib3hfZXh0cmFjdCAvLyBvbiBlcnJvcjogaW5kZXggb3V0IG9mIGJvdW5kcwogICAgYnRvaQogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjU2CiAgICAvLyBib3ggPSBCb3goTGFyZ2VOZXN0ZWRTdHJ1Y3QsIGtleT0iYm94IikKICAgIGJ5dGVjXzAgLy8gImJveCIKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI2MgogICAgLy8gd29haF9hcnJfYXJyID0gYm94LnZhbHVlLm5lc3RlZC53b2FoW2kxXS5hcnJfYXJyW2kyXVtpM10KICAgIHB1c2hpbnQgNDEwOAogICAgaW50Y18xIC8vIDIKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICBpbnRjIDUgLy8gNDA5OAogICAgKwogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjU2CiAgICAvLyBib3ggPSBCb3goTGFyZ2VOZXN0ZWRTdHJ1Y3QsIGtleT0iYm94IikKICAgIGJ5dGVjXzAgLy8gImJveCIKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI2MgogICAgLy8gd29haF9hcnJfYXJyID0gYm94LnZhbHVlLm5lc3RlZC53b2FoW2kxXS5hcnJfYXJyW2kyXVtpM10KICAgIGRpZyAxCiAgICBpbnRjXzEgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIHVuY292ZXIgMTAKICAgID4KICAgIGFzc2VydCAvLyBpbmRleCBvdXQgb2YgYm91bmRzCiAgICBpbnRjXzEgLy8gMgogICAgKwogICAgZHVwCiAgICB1bmNvdmVyIDUKICAgICsKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1NgogICAgLy8gYm94ID0gQm94KExhcmdlTmVzdGVkU3RydWN0LCBrZXk9ImJveCIpCiAgICBieXRlY18wIC8vICJib3giCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyNjIKICAgIC8vIHdvYWhfYXJyX2FyciA9IGJveC52YWx1ZS5uZXN0ZWQud29haFtpMV0uYXJyX2FycltpMl1baTNdCiAgICBzd2FwCiAgICBpbnRjXzEgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgICsKICAgIHB1c2hpbnQgMTgKICAgICsKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1NgogICAgLy8gYm94ID0gQm94KExhcmdlTmVzdGVkU3RydWN0LCBrZXk9ImJveCIpCiAgICBieXRlY18wIC8vICJib3giCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyNjIKICAgIC8vIHdvYWhfYXJyX2FyciA9IGJveC52YWx1ZS5uZXN0ZWQud29haFtpMV0uYXJyX2FycltpMl1baTNdCiAgICBkaWcgMQogICAgaW50Y18xIC8vIDIKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICBkaWcgOAogICAgPgogICAgYXNzZXJ0IC8vIGluZGV4IG91dCBvZiBib3VuZHMKICAgIGludGNfMSAvLyAyCiAgICArCiAgICBpbnRjXzEgLy8gMgogICAgdW5jb3ZlciA4CiAgICAqCiAgICBkaWcgMQogICAgKwogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjU2CiAgICAvLyBib3ggPSBCb3goTGFyZ2VOZXN0ZWRTdHJ1Y3QsIGtleT0iYm94IikKICAgIGJ5dGVjXzAgLy8gImJveCIKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI2MgogICAgLy8gd29haF9hcnJfYXJyID0gYm94LnZhbHVlLm5lc3RlZC53b2FoW2kxXS5hcnJfYXJyW2kyXVtpM10KICAgIHN3YXAKICAgIGludGNfMSAvLyAyCiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgKwogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjU2CiAgICAvLyBib3ggPSBCb3goTGFyZ2VOZXN0ZWRTdHJ1Y3QsIGtleT0iYm94IikKICAgIGJ5dGVjXzAgLy8gImJveCIKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI2MgogICAgLy8gd29haF9hcnJfYXJyID0gYm94LnZhbHVlLm5lc3RlZC53b2FoW2kxXS5hcnJfYXJyW2kyXVtpM10KICAgIGRpZyAxCiAgICBpbnRjXzEgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGRpZyA3CiAgICA+CiAgICBhc3NlcnQgLy8gaW5kZXggb3V0IG9mIGJvdW5kcwogICAgaW50Y18xIC8vIDIKICAgICsKICAgIHVuY292ZXIgNgogICAgaW50Y18yIC8vIDgKICAgICoKICAgICsKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI1NgogICAgLy8gYm94ID0gQm94KExhcmdlTmVzdGVkU3RydWN0LCBrZXk9ImJveCIpCiAgICBieXRlY18wIC8vICJib3giCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyNjIKICAgIC8vIHdvYWhfYXJyX2FyciA9IGJveC52YWx1ZS5uZXN0ZWQud29haFtpMV0uYXJyX2FycltpMl1baTNdCiAgICBzd2FwCiAgICBpbnRjXzIgLy8gOAogICAgYm94X2V4dHJhY3QgLy8gb24gZXJyb3I6IGluZGV4IG91dCBvZiBib3VuZHMKICAgIGJ0b2kKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI2NAogICAgLy8gcmV0dXJuIGEgKyBiICsgYXJyX2FyciArIGMgKyBkICsgd29haF9hcnJfYXJyCiAgICB1bmNvdmVyIDUKICAgIHVuY292ZXIgNQogICAgKwogICAgdW5jb3ZlciA0CiAgICArCiAgICB1bmNvdmVyIDMKICAgICsKICAgIHVuY292ZXIgMgogICAgKwogICAgKwogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjU0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaXRvYgogICAgYnl0ZWNfMiAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIGV4YW1wbGVzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveENvbnRyYWN0LnN1bV9keW5hbWljX2Fycl9zdHJ1Y3Rbcm91dGluZ10oKSAtPiB2b2lkOgpzdW1fZHluYW1pY19hcnJfc3RydWN0OgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjY4CiAgICAvLyBhc3NlcnQgc2VsZi5keW5hbWljX2Fycl9zdHJ1Y3QudmFsdWUuYSA9PSAxLCAiZXhwZWN0ZWQgMSIKICAgIGJ5dGVjXzEgLy8gImR5bmFtaWNfYXJyX3N0cnVjdCIKICAgIGludGNfMyAvLyAwCiAgICBpbnRjXzIgLy8gOAogICAgYm94X2V4dHJhY3QgLy8gb24gZXJyb3I6IGluZGV4IG91dCBvZiBib3VuZHMKICAgIGJ0b2kKICAgIGR1cAogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gZXhwZWN0ZWQgMQogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjY5CiAgICAvLyBhc3NlcnQgc2VsZi5keW5hbWljX2Fycl9zdHJ1Y3QudmFsdWUuYiA9PSAyLCAiZXhwZWN0ZWQgMiIKICAgIGJ5dGVjXzEgLy8gImR5bmFtaWNfYXJyX3N0cnVjdCIKICAgIHB1c2hpbnQgMTAKICAgIGludGNfMiAvLyA4CiAgICBib3hfZXh0cmFjdCAvLyBvbiBlcnJvcjogaW5kZXggb3V0IG9mIGJvdW5kcwogICAgYnRvaQogICAgZHVwCiAgICBpbnRjXzEgLy8gMgogICAgPT0KICAgIGFzc2VydCAvLyBleHBlY3RlZCAyCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyNzAKICAgIC8vIHRvdGFsID0gc2VsZi5keW5hbWljX2Fycl9zdHJ1Y3QudmFsdWUuYSArIHNlbGYuZHluYW1pY19hcnJfc3RydWN0LnZhbHVlLmIKICAgICsKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI3MQogICAgLy8gZm9yIHZhbCBpbiBzZWxmLmR5bmFtaWNfYXJyX3N0cnVjdC52YWx1ZS5hcnI6CiAgICBieXRlY18xIC8vICJkeW5hbWljX2Fycl9zdHJ1Y3QiCiAgICBwdXNoaW50IDIwCiAgICBpbnRjXzEgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIHN3YXAKICAgIGludGNfMyAvLyAwCgpzdW1fZHluYW1pY19hcnJfc3RydWN0X2Zvcl9oZWFkZXJAMjoKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI3MQogICAgLy8gZm9yIHZhbCBpbiBzZWxmLmR5bmFtaWNfYXJyX3N0cnVjdC52YWx1ZS5hcnI6CiAgICBkdXAKICAgIGRpZyAzCiAgICA8CiAgICBieiBzdW1fZHluYW1pY19hcnJfc3RydWN0X2FmdGVyX2ZvckA1CiAgICBieXRlY18xIC8vICJkeW5hbWljX2Fycl9zdHJ1Y3QiCiAgICBwdXNoaW50IDIwCiAgICBpbnRjXzEgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGRpZyAxCiAgICA+CiAgICBhc3NlcnQgLy8gaW5kZXggb3V0IG9mIGJvdW5kcwogICAgZHVwCiAgICBpbnRjXzIgLy8gOAogICAgKgogICAgcHVzaGludCAyMgogICAgKwogICAgYnl0ZWNfMSAvLyAiZHluYW1pY19hcnJfc3RydWN0IgogICAgc3dhcAogICAgaW50Y18yIC8vIDgKICAgIGJveF9leHRyYWN0IC8vIG9uIGVycm9yOiBpbmRleCBvdXQgb2YgYm91bmRzCiAgICBidG9pCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyNzIKICAgIC8vIHRvdGFsICs9IHZhbAogICAgdW5jb3ZlciAyCiAgICArCiAgICBzd2FwCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgYiBzdW1fZHluYW1pY19hcnJfc3RydWN0X2Zvcl9oZWFkZXJAMgoKc3VtX2R5bmFtaWNfYXJyX3N0cnVjdF9hZnRlcl9mb3JANToKICAgIHBvcAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjczCiAgICAvLyBmb3IgdmFsIGluIHNlbGYuZHluYW1pY19hcnJfc3RydWN0LnZhbHVlLmFycjI6CiAgICBieXRlY18xIC8vICJkeW5hbWljX2Fycl9zdHJ1Y3QiCiAgICBwdXNoaW50IDE4CiAgICBpbnRjXzEgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGJ5dGVjXzEgLy8gImR5bmFtaWNfYXJyX3N0cnVjdCIKICAgIHN3YXAKICAgIGludGNfMSAvLyAyCiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgc3dhcAogICAgaW50Y18zIC8vIDAKCnN1bV9keW5hbWljX2Fycl9zdHJ1Y3RfZm9yX2hlYWRlckA2OgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjczCiAgICAvLyBmb3IgdmFsIGluIHNlbGYuZHluYW1pY19hcnJfc3RydWN0LnZhbHVlLmFycjI6CiAgICBkdXAKICAgIGRpZyAzCiAgICA8CiAgICBieiBzdW1fZHluYW1pY19hcnJfc3RydWN0X2FmdGVyX2ZvckA5CiAgICBieXRlY18xIC8vICJkeW5hbWljX2Fycl9zdHJ1Y3QiCiAgICBwdXNoaW50IDE4CiAgICBpbnRjXzEgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGludGNfMSAvLyAyCiAgICArCiAgICBkaWcgMQogICAgaW50Y18yIC8vIDgKICAgICoKICAgICsKICAgIGJ5dGVjXzEgLy8gImR5bmFtaWNfYXJyX3N0cnVjdCIKICAgIHN3YXAKICAgIGludGNfMiAvLyA4CiAgICBib3hfZXh0cmFjdCAvLyBvbiBlcnJvcjogaW5kZXggb3V0IG9mIGJvdW5kcwogICAgYnRvaQogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6Mjc0CiAgICAvLyB0b3RhbCArPSB2YWwKICAgIHVuY292ZXIgMgogICAgKwogICAgc3dhcAogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGIgc3VtX2R5bmFtaWNfYXJyX3N0cnVjdF9mb3JfaGVhZGVyQDYKCnN1bV9keW5hbWljX2Fycl9zdHJ1Y3RfYWZ0ZXJfZm9yQDk6CiAgICBwb3AKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI2NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpdG9iCiAgICBieXRlY18yIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gZXhhbXBsZXMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94Q29udHJhY3Quc2V0X2Jvb2xbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRfYm9vbDoKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI4MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuYm9vbAogICAgaW50Y18zIC8vIDAKICAgIGdldGJpdAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjgzCiAgICAvLyBzZWxmLnRvb19tYW55X2Jvb2xzLnZhbHVlW2luZGV4XSA9IHZhbHVlCiAgICBkaWcgMQogICAgaW50Y18yIC8vIDgKICAgIC8KICAgIHVuY292ZXIgMgogICAgaW50Y18yIC8vIDgKICAgICUKICAgIGJ5dGVjIDEwIC8vICJ0b29fbWFueV9ib29scyIKICAgIGRpZyAyCiAgICBpbnRjXzAgLy8gMQogICAgYm94X2V4dHJhY3QKICAgIGRpZyAxCiAgICBpbnRjXzIgLy8gOAogICAgPAogICAgYXNzZXJ0IC8vIGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBzd2FwCiAgICB1bmNvdmVyIDMKICAgIHNldGJpdAogICAgYnl0ZWMgMTAgLy8gInRvb19tYW55X2Jvb2xzIgogICAgY292ZXIgMgogICAgYm94X3JlcGxhY2UgLy8gb24gZXJyb3I6IGluZGV4IG91dCBvZiBib3VuZHMKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI4MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gZXhhbXBsZXMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94Q29udHJhY3Quc3VtX2Jvb2xzW3JvdXRpbmddKCkgLT4gdm9pZDoKc3VtX2Jvb2xzOgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6Mjg1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6Mjg3CiAgICAvLyB0b3RhbCA9IFVJbnQ2NCgpCiAgICBpbnRjXzMgLy8gMAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6Mjg4CiAgICAvLyBmb3IgdmFsdWUgaW4gc2VsZi50b29fbWFueV9ib29scy52YWx1ZToKICAgIGJ5dGVjIDEwIC8vICJ0b29fbWFueV9ib29scyIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYudG9vX21hbnlfYm9vbHMgZXhpc3RzCiAgICBpbnRjXzMgLy8gMAoKc3VtX2Jvb2xzX2Zvcl9oZWFkZXJAMjoKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI4OAogICAgLy8gZm9yIHZhbHVlIGluIHNlbGYudG9vX21hbnlfYm9vbHMudmFsdWU6CiAgICBkdXAKICAgIHB1c2hpbnQgMzMwMDAKICAgIDwKICAgIGJ6IHN1bV9ib29sc19hZnRlcl9mb3JAOQogICAgZHVwbiAyCiAgICBpbnRjXzIgLy8gOAogICAgLwogICAgc3dhcAogICAgaW50Y18yIC8vIDgKICAgICUKICAgIGJ5dGVjIDEwIC8vICJ0b29fbWFueV9ib29scyIKICAgIHVuY292ZXIgMgogICAgaW50Y18wIC8vIDEKICAgIGJveF9leHRyYWN0IC8vIG9uIGVycm9yOiBpbmRleCBvdXQgb2YgYm91bmRzCiAgICBzd2FwCiAgICBnZXRiaXQKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjI4OQogICAgLy8gaWYgdmFsdWU6CiAgICBieiBzdW1fYm9vbHNfYWZ0ZXJfaWZfZWxzZUA1CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyOTAKICAgIC8vIHRvdGFsICs9IDEKICAgIHN3YXAKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBzd2FwCgpzdW1fYm9vbHNfYWZ0ZXJfaWZfZWxzZUA1OgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MjkxCiAgICAvLyBpZiB0b3RhbCA9PSBzdG9wX2F0X3RvdGFsOgogICAgZGlnIDEKICAgIGRpZyAzCiAgICA9PQogICAgYm56IHN1bV9ib29sc19hZnRlcl9mb3JAOQogICAgaW50Y18wIC8vIDEKICAgICsKICAgIGIgc3VtX2Jvb2xzX2Zvcl9oZWFkZXJAMgoKc3VtX2Jvb2xzX2FmdGVyX2ZvckA5OgogICAgcG9wCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyODUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBpdG9iCiAgICBieXRlY18yIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gZXhhbXBsZXMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94Q29udHJhY3QuY3JlYXRlX2R5bmFtaWNfYm94W3JvdXRpbmddKCkgLT4gdm9pZDoKY3JlYXRlX2R5bmFtaWNfYm94OgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6Mjk3CiAgICAvLyBzZWxmLmR5bmFtaWNfYm94LnZhbHVlID0gQXJyYXlbVUludDY0XSgpCiAgICBieXRlYyA1IC8vICJkeW5hbWljX2JveCIKICAgIGJveF9kZWwKICAgIHBvcAogICAgYnl0ZWMgNSAvLyAiZHluYW1pY19ib3giCiAgICBwdXNoYnl0ZXMgMHgwMDAwCiAgICBib3hfcHV0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weToyOTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIGV4YW1wbGVzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveENvbnRyYWN0LmFwcGVuZF9keW5hbWljX2JveFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmFwcGVuZF9keW5hbWljX2JveDoKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMwMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTozMDUKICAgIC8vIGZvciBpIGluIHVyYW5nZSh0aW1lcyk6CiAgICBpbnRjXzMgLy8gMAoKYXBwZW5kX2R5bmFtaWNfYm94X2Zvcl9oZWFkZXJAMjoKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMwNQogICAgLy8gZm9yIGkgaW4gdXJhbmdlKHRpbWVzKToKICAgIGR1cAogICAgZGlnIDIKICAgIDwKICAgIGJ6IGFwcGVuZF9keW5hbWljX2JveF9hZnRlcl9mb3JANQogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzA2CiAgICAvLyBzZWxmLmR5bmFtaWNfYm94LnZhbHVlLmFwcGVuZChpKQogICAgZHVwCiAgICBpdG9iCiAgICBieXRlYyA1IC8vICJkeW5hbWljX2JveCIKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIGludGNfMCAvLyAxCiAgICBpbnRjXzIgLy8gOAogICAgY2FsbHN1YiBib3hfZHluYW1pY19hcnJheV9jb25jYXRfZml4ZWQKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMwNQogICAgLy8gZm9yIGkgaW4gdXJhbmdlKHRpbWVzKToKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBiIGFwcGVuZF9keW5hbWljX2JveF9mb3JfaGVhZGVyQDIKCmFwcGVuZF9keW5hbWljX2JveF9hZnRlcl9mb3JANToKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMwNwogICAgLy8gcmV0dXJuIHNlbGYuZHluYW1pY19ib3gudmFsdWUubGVuZ3RoCiAgICBieXRlYyA1IC8vICJkeW5hbWljX2JveCIKICAgIGludGNfMyAvLyAwCiAgICBpbnRjXzEgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMwMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpdG9iCiAgICBieXRlY18yIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gZXhhbXBsZXMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94Q29udHJhY3QucG9wX2R5bmFtaWNfYm94W3JvdXRpbmddKCkgLT4gdm9pZDoKcG9wX2R5bmFtaWNfYm94OgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzA5CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMxMQogICAgLy8gZm9yIF9wb3AgaW4gdXJhbmdlKHRpbWVzKToKICAgIGludGNfMyAvLyAwCgpwb3BfZHluYW1pY19ib3hfZm9yX2hlYWRlckAyOgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzExCiAgICAvLyBmb3IgX3BvcCBpbiB1cmFuZ2UodGltZXMpOgogICAgZHVwCiAgICBkaWcgMgogICAgPAogICAgYnogcG9wX2R5bmFtaWNfYm94X2FmdGVyX2ZvckA1CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTozMTIKICAgIC8vIHNlbGYuZHluYW1pY19ib3gudmFsdWUucG9wKCkKICAgIGJ5dGVjIDUgLy8gImR5bmFtaWNfYm94IgogICAgaW50Y18zIC8vIDAKICAgIGludGNfMiAvLyA4CiAgICBjYWxsc3ViIGJveF9keW5hbWljX2FycmF5X3BvcF9maXhlZF9zaXplCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTozMTEKICAgIC8vIGZvciBfcG9wIGluIHVyYW5nZSh0aW1lcyk6CiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgYiBwb3BfZHluYW1pY19ib3hfZm9yX2hlYWRlckAyCgpwb3BfZHluYW1pY19ib3hfYWZ0ZXJfZm9yQDU6CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTozMTQKICAgIC8vIHJldHVybiBzZWxmLmR5bmFtaWNfYm94LnZhbHVlLmxlbmd0aAogICAgYnl0ZWMgNSAvLyAiZHluYW1pY19ib3giCiAgICBpbnRjXzMgLy8gMAogICAgaW50Y18xIC8vIDIKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTozMDkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaXRvYgogICAgYnl0ZWNfMiAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIGV4YW1wbGVzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveENvbnRyYWN0LnN1bV9keW5hbWljX2JveFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnN1bV9keW5hbWljX2JveDoKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMxOAogICAgLy8gdG90YWwgPSBVSW50NjQoKQogICAgaW50Y18zIC8vIDAKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMxOQogICAgLy8gZm9yIHZhbCBpbiBzZWxmLmR5bmFtaWNfYm94LnZhbHVlOgogICAgYnl0ZWMgNSAvLyAiZHluYW1pY19ib3giCiAgICBpbnRjXzMgLy8gMAogICAgaW50Y18xIC8vIDIKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICBzd2FwCiAgICBpbnRjXzMgLy8gMAoKc3VtX2R5bmFtaWNfYm94X2Zvcl9oZWFkZXJAMjoKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMxOQogICAgLy8gZm9yIHZhbCBpbiBzZWxmLmR5bmFtaWNfYm94LnZhbHVlOgogICAgZHVwCiAgICBkaWcgMwogICAgPAogICAgYnogc3VtX2R5bmFtaWNfYm94X2FmdGVyX2ZvckA1CiAgICBkdXAKICAgIGludGNfMiAvLyA4CiAgICAqCiAgICBpbnRjXzEgLy8gMgogICAgKwogICAgYnl0ZWMgNSAvLyAiZHluYW1pY19ib3giCiAgICBzd2FwCiAgICBpbnRjXzIgLy8gOAogICAgYm94X2V4dHJhY3QgLy8gb24gZXJyb3I6IGluZGV4IG91dCBvZiBib3VuZHMKICAgIGJ0b2kKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMyMAogICAgLy8gdG90YWwgKz0gdmFsCiAgICB1bmNvdmVyIDIKICAgICsKICAgIHN3YXAKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBiIHN1bV9keW5hbWljX2JveF9mb3JfaGVhZGVyQDIKCnN1bV9keW5hbWljX2JveF9hZnRlcl9mb3JANToKICAgIHBvcAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzE2CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGl0b2IKICAgIGJ5dGVjXzIgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBleGFtcGxlcy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hDb250cmFjdC53cml0ZV9keW5hbWljX2JveFtyb3V0aW5nXSgpIC0+IHZvaWQ6CndyaXRlX2R5bmFtaWNfYm94OgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzIzCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMyNQogICAgLy8gc2VsZi5keW5hbWljX2JveC52YWx1ZVtpbmRleF0gPSB2YWx1ZQogICAgc3dhcAogICAgaW50Y18yIC8vIDgKICAgICoKICAgIGludGNfMSAvLyAyCiAgICArCiAgICBieXRlYyA1IC8vICJkeW5hbWljX2JveCIKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgYm94X3JlcGxhY2UgLy8gb24gZXJyb3I6IGluZGV4IG91dCBvZiBib3VuZHMKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMyMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gZXhhbXBsZXMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94Q29udHJhY3Qud3JpdGVfZHluYW1pY19hcnJfc3RydWN0W3JvdXRpbmddKCkgLT4gdm9pZDoKd3JpdGVfZHluYW1pY19hcnJfc3RydWN0OgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzI3CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMyOQogICAgLy8gc2VsZi5keW5hbWljX2Fycl9zdHJ1Y3QudmFsdWUuYXJyW2luZGV4XSA9IHZhbHVlCiAgICBieXRlY18xIC8vICJkeW5hbWljX2Fycl9zdHJ1Y3QiCiAgICBwdXNoaW50IDIwCiAgICBpbnRjXzEgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGRpZyAyCiAgICA+CiAgICBhc3NlcnQgLy8gaW5kZXggb3V0IG9mIGJvdW5kcwogICAgc3dhcAogICAgaW50Y18yIC8vIDgKICAgICoKICAgIHB1c2hpbnQgMjIKICAgICsKICAgIGJ5dGVjXzEgLy8gImR5bmFtaWNfYXJyX3N0cnVjdCIKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgYm94X3JlcGxhY2UgLy8gb24gZXJyb3I6IGluZGV4IG91dCBvZiBib3VuZHMKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMyNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gZXhhbXBsZXMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94Q29udHJhY3Quc2xpY2VfYm94W3JvdXRpbmddKCkgLT4gdm9pZDoKc2xpY2VfYm94OgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzMzCiAgICAvLyBib3hfMCA9IEJveChCeXRlcywga2V5PVN0cmluZygiMCIpKQogICAgYnl0ZWMgMTUgLy8gIjAiCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTozMzQKICAgIC8vIGJveF8wLnZhbHVlID0gQnl0ZXMoYiJUZXN0aW5nIHRlc3RpbmcgMTIzIikKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzMzCiAgICAvLyBib3hfMCA9IEJveChCeXRlcywga2V5PVN0cmluZygiMCIpKQogICAgYnl0ZWMgMTUgLy8gIjAiCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTozMzQKICAgIC8vIGJveF8wLnZhbHVlID0gQnl0ZXMoYiJUZXN0aW5nIHRlc3RpbmcgMTIzIikKICAgIHB1c2hieXRlcyAweDU0NjU3Mzc0Njk2ZTY3MjA3NDY1NzM3NDY5NmU2NzIwMzEzMjMzCiAgICBib3hfcHV0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTozMzMKICAgIC8vIGJveF8wID0gQm94KEJ5dGVzLCBrZXk9U3RyaW5nKCIwIikpCiAgICBieXRlYyAxNSAvLyAiMCIKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMzNQogICAgLy8gYXNzZXJ0IGJveF8wLnZhbHVlWzA6N10gPT0gYiJUZXN0aW5nIgogICAgaW50Y18zIC8vIDAKICAgIHB1c2hpbnQgNwogICAgYm94X2V4dHJhY3QKICAgIHB1c2hieXRlcyAweDU0NjU3Mzc0Njk2ZTY3CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTozMzcKICAgIC8vIHNlbGYuYm94X2MudmFsdWUgPSBhcmM0LlN0cmluZygiSGVsbG8iKQogICAgYnl0ZWNfMyAvLyAweDQyNGY1ODVmNDMKICAgIGJveF9kZWwKICAgIHBvcAogICAgYnl0ZWNfMyAvLyAweDQyNGY1ODVmNDMKICAgIHB1c2hieXRlcyAweDAwMDU0ODY1NmM2YzZmCiAgICBib3hfcHV0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTozMzgKICAgIC8vIGFzc2VydCBzZWxmLmJveF9jLnZhbHVlLmJ5dGVzWzI6MTBdID09IGIiSGVsbG8iCiAgICBieXRlY18zIC8vIDB4NDI0ZjU4NWY0MwogICAgaW50Y18xIC8vIDIKICAgIHB1c2hpbnQgNQogICAgYm94X2V4dHJhY3QKICAgIHB1c2hieXRlcyAweDQ4NjU2YzZjNmYKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjMzMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gZXhhbXBsZXMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94Q29udHJhY3QudGVzdF9ib3hfcmVmW3JvdXRpbmddKCkgLT4gdm9pZDoKdGVzdF9ib3hfcmVmOgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzUyLTM1MwogICAgLy8gIyBpbml0IHJlZiwgd2l0aCB2YWxpZCBrZXkgdHlwZXMKICAgIC8vIGJveF9yZWYgPSBCb3goQnl0ZXMsIGtleT0iYmxvYiIpCiAgICBieXRlYyA0IC8vICJibG9iIgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzU0CiAgICAvLyBhc3NlcnQgbm90IGJveF9yZWYsICJubyBkYXRhIgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gbm8gZGF0YQogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzU5CiAgICAvLyBib3hfcmVmID0gQm94KEJ5dGVzLCBrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlYyA0IC8vICJibG9iIgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzYyLTM2MwogICAgLy8gIyBjcmVhdGUKICAgIC8vIGFzc2VydCBib3hfcmVmLmNyZWF0ZShzaXplPVVJbnQ2NCgzMikpCiAgICBwdXNoaW50IDMyCiAgICBib3hfY3JlYXRlCiAgICBhc3NlcnQKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjM2Ni0zNjcKICAgIC8vICMgbWFuaXB1bGF0ZSBkYXRhCiAgICAvLyBzZW5kZXJfYnl0ZXMgPSBUeG4uc2VuZGVyLmJ5dGVzCiAgICB0eG4gU2VuZGVyCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTozNjgKICAgIC8vIGFwcF9hZGRyZXNzID0gR2xvYmFsLmN1cnJlbnRfYXBwbGljYXRpb25fYWRkcmVzcy5ieXRlcwogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjM1OQogICAgLy8gYm94X3JlZiA9IEJveChCeXRlcywga2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWMgNCAvLyAiYmxvYiIKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjM3MAogICAgLy8gYm94X3JlZi5yZXBsYWNlKDAsIHNlbmRlcl9ieXRlcykKICAgIGludGNfMyAvLyAwCiAgICBkaWcgMwogICAgYm94X3JlcGxhY2UKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjM1OQogICAgLy8gYm94X3JlZiA9IEJveChCeXRlcywga2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWMgNCAvLyAiYmxvYiIKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjM3MQogICAgLy8gYm94X3JlZi5yZXNpemUoODAwMCkKICAgIHB1c2hpbnQgODAwMAogICAgYm94X3Jlc2l6ZQogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzU5CiAgICAvLyBib3hfcmVmID0gQm94KEJ5dGVzLCBrZXk9U3RyaW5nKCJibG9iIikpCiAgICBieXRlYyA0IC8vICJibG9iIgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzcyCiAgICAvLyBib3hfcmVmLnNwbGljZSgwLCAwLCBhcHBfYWRkcmVzcykKICAgIGludGNfMyAvLyAwCiAgICBkdXAKICAgIGRpZyAzCiAgICBib3hfc3BsaWNlCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTozNTkKICAgIC8vIGJveF9yZWYgPSBCb3goQnl0ZXMsIGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjIDQgLy8gImJsb2IiCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTozNzMKICAgIC8vIGJveF9yZWYucmVwbGFjZSg2NCwgdmFsdWVfMykKICAgIHB1c2hpbnQgNjQKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjM2OQogICAgLy8gdmFsdWVfMyA9IEJ5dGVzKGIiaGVsbG8iKQogICAgYnl0ZWMgMTYgLy8gMHg2ODY1NmM2YzZmCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTozNzMKICAgIC8vIGJveF9yZWYucmVwbGFjZSg2NCwgdmFsdWVfMykKICAgIGJveF9yZXBsYWNlCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTozNTkKICAgIC8vIGJveF9yZWYgPSBCb3goQnl0ZXMsIGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjIDQgLy8gImJsb2IiCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTozNzQKICAgIC8vIHByZWZpeCA9IGJveF9yZWYuZXh0cmFjdCgwLCAzMiAqIDIgKyB2YWx1ZV8zLmxlbmd0aCkKICAgIGludGNfMyAvLyAwCiAgICBwdXNoaW50IDY5CiAgICBib3hfZXh0cmFjdAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6Mzc1CiAgICAvLyBhc3NlcnQgcHJlZml4ID09IGFwcF9hZGRyZXNzICsgc2VuZGVyX2J5dGVzICsgdmFsdWVfMwogICAgZGlnIDEKICAgIGRpZyAzCiAgICBjb25jYXQKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjM2OQogICAgLy8gdmFsdWVfMyA9IEJ5dGVzKGIiaGVsbG8iKQogICAgYnl0ZWMgMTYgLy8gMHg2ODY1NmM2YzZmCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTozNzUKICAgIC8vIGFzc2VydCBwcmVmaXggPT0gYXBwX2FkZHJlc3MgKyBzZW5kZXJfYnl0ZXMgKyB2YWx1ZV8zCiAgICBjb25jYXQKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjM1OQogICAgLy8gYm94X3JlZiA9IEJveChCeXRlcywga2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWMgNCAvLyAiYmxvYiIKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjM3Ny0zNzgKICAgIC8vICMgZGVsZXRlCiAgICAvLyBkZWwgYm94X3JlZi52YWx1ZQogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTozNTkKICAgIC8vIGJveF9yZWYgPSBCb3goQnl0ZXMsIGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjIDQgLy8gImJsb2IiCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTozODEtMzgyCiAgICAvLyAjIHF1ZXJ5CiAgICAvLyB2YWx1ZSwgZXhpc3RzID0gYm94X3JlZi5tYXliZSgpCiAgICBib3hfZ2V0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTozODMKICAgIC8vIGFzc2VydCBub3QgZXhpc3RzCiAgICBkdXAKICAgICEKICAgIGFzc2VydAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6Mzg0CiAgICAvLyBhc3NlcnQgdmFsdWUgPT0gYiIiCiAgICBkaWcgMQogICAgcHVzaGJ5dGVzIDB4CiAgICA9PQogICAgYXNzZXJ0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTozODUKICAgIC8vIGFzc2VydCBib3hfcmVmLmdldChkZWZhdWx0PXNlbmRlcl9ieXRlcykgPT0gc2VuZGVyX2J5dGVzCiAgICBkaWcgMwogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICBkaWcgMgogICAgPT0KICAgIGFzc2VydAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6Mzg3LTM4OAogICAgLy8gIyB1cGRhdGUKICAgIC8vIGJveF9yZWYudmFsdWUgPSBzZW5kZXJfYnl0ZXMgKyBhcHBfYWRkcmVzcwogICAgY29uY2F0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTozNTkKICAgIC8vIGJveF9yZWYgPSBCb3goQnl0ZXMsIGtleT1TdHJpbmcoImJsb2IiKSkKICAgIGJ5dGVjIDQgLy8gImJsb2IiCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTozODctMzg4CiAgICAvLyAjIHVwZGF0ZQogICAgLy8gYm94X3JlZi52YWx1ZSA9IHNlbmRlcl9ieXRlcyArIGFwcF9hZGRyZXNzCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjM1OQogICAgLy8gYm94X3JlZiA9IEJveChCeXRlcywga2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWMgNCAvLyAiYmxvYiIKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjM4Ny0zODgKICAgIC8vICMgdXBkYXRlCiAgICAvLyBib3hfcmVmLnZhbHVlID0gc2VuZGVyX2J5dGVzICsgYXBwX2FkZHJlc3MKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjM1OQogICAgLy8gYm94X3JlZiA9IEJveChCeXRlcywga2V5PVN0cmluZygiYmxvYiIpKQogICAgYnl0ZWMgNCAvLyAiYmxvYiIKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjM4OQogICAgLy8gYXNzZXJ0IGJveF9yZWYsICJCbG9iIGV4aXN0cyIKICAgIGJveF9sZW4KICAgIHBvcAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzkwCiAgICAvLyBhc3NlcnQgYm94X3JlZi5sZW5ndGggPT0gNjQKICAgIHB1c2hpbnQgNjQKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjM5My0zOTQKICAgIC8vICMgaW5zdGFuY2UgYm94IHJlZgogICAgLy8gc2VsZi5ib3hfcmVmLmNyZWF0ZShzaXplPVVJbnQ2NCgzMikpCiAgICBieXRlYyAxOSAvLyAiYm94X3JlZiIKICAgIHB1c2hpbnQgMzIKICAgIGJveF9jcmVhdGUKICAgIHBvcAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6Mzk2CiAgICAvLyBkZWwgc2VsZi5ib3hfcmVmLnZhbHVlCiAgICBieXRlYyAxOSAvLyAiYm94X3JlZiIKICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6MzUwCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBleGFtcGxlcy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hDb250cmFjdC5ib3hfbWFwX3Rlc3Rbcm91dGluZ10oKSAtPiB2b2lkOgpib3hfbWFwX3Rlc3Q6CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTo0MDAKICAgIC8vIGtleV8wID0gVUludDY0KDApCiAgICBpbnRjXzMgLy8gMAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NDAzCiAgICAvLyBzZWxmLmJveF9tYXBba2V5XzBdID0gdmFsdWUKICAgIGl0b2IKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTo0MDIKICAgIC8vIHZhbHVlID0gU3RyaW5nKCJIbW1tbW0iKQogICAgcHVzaGJ5dGVzICJIbW1tbW0iCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTo0MDMKICAgIC8vIHNlbGYuYm94X21hcFtrZXlfMF0gPSB2YWx1ZQogICAgYm94X3B1dAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NDAxCiAgICAvLyBrZXlfMSA9IFVJbnQ2NCgxKQogICAgaW50Y18wIC8vIDEKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQxMAogICAgLy8gYXNzZXJ0IHNlbGYuYm94X21hcC5nZXQoa2V5XzEsIGRlZmF1bHQ9U3RyaW5nKCJkZWZhdWx0IikpID09IFN0cmluZygiZGVmYXVsdCIpCiAgICBpdG9iCiAgICBkdXAKICAgIGJveF9nZXQKICAgIGJ5dGVjIDIwIC8vICJkZWZhdWx0IgogICAgY292ZXIgMgogICAgc2VsZWN0CiAgICBieXRlYyAyMCAvLyAiZGVmYXVsdCIKICAgID09CiAgICBhc3NlcnQKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQxMQogICAgLy8gdmFsdWUsIGV4aXN0cyA9IHNlbGYuYm94X21hcC5tYXliZShrZXlfMSkKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTo0MTIKICAgIC8vIGFzc2VydCBub3QgZXhpc3RzCiAgICAhCiAgICBhc3NlcnQKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQxOAogICAgLy8gdG1wX2JveF9tYXBba2V5XzFdID0gU3RyaW5nKCJoZWxsbyIpCiAgICBkdXAKICAgIGJveF9kZWwKICAgIHBvcAogICAgZHVwCiAgICBieXRlYyAxNiAvLyAiaGVsbG8iCiAgICBib3hfcHV0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTo0MjAKICAgIC8vIGRlbCB0bXBfYm94X21hcFtrZXlfMV0KICAgIGJveF9kZWwKICAgIHBvcAogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6Mzk4CiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBleGFtcGxlcy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hDb250cmFjdC5ib3hfbWFwX3NldFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmJveF9tYXBfc2V0OgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NDIyCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgaW50Y18zIC8vIDAKICAgIGV4dHJhY3RfdWludDE2IC8vIG9uIGVycm9yOiBpbnZhbGlkIGFycmF5IGxlbmd0aCBoZWFkZXIKICAgIGludGNfMSAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmR5bmFtaWNfYXJyYXk8YXJjNC51aW50OD4KICAgIGV4dHJhY3QgMiAwCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTo0MjQKICAgIC8vIHNlbGYuYm94X21hcFtrZXldID0gdmFsdWUKICAgIHN3YXAKICAgIGl0b2IKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTo0MjIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIGV4YW1wbGVzLmJveF9zdG9yYWdlLmNvbnRyYWN0LkJveENvbnRyYWN0LmJveF9tYXBfZ2V0W3JvdXRpbmddKCkgLT4gdm9pZDoKYm94X21hcF9nZXQ6CiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTo0MjYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NDI4CiAgICAvLyByZXR1cm4gc2VsZi5ib3hfbWFwW2tleV0KICAgIGl0b2IKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmJveF9tYXAgZW50cnkgZXhpc3RzCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTo0MjYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzIgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBleGFtcGxlcy5ib3hfc3RvcmFnZS5jb250cmFjdC5Cb3hDb250cmFjdC5ib3hfbWFwX2RlbFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmJveF9tYXBfZGVsOgogICAgLy8gYm94X3N0b3JhZ2UvY29udHJhY3QucHk6NDMwCiAgICAvLyBAYXJjNC5hYmltZXRob2QKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQzMgogICAgLy8gZGVsIHNlbGYuYm94X21hcFtrZXldCiAgICBpdG9iCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQzMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gZXhhbXBsZXMuYm94X3N0b3JhZ2UuY29udHJhY3QuQm94Q29udHJhY3QuYm94X21hcF9leGlzdHNbcm91dGluZ10oKSAtPiB2b2lkOgpib3hfbWFwX2V4aXN0czoKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQzNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBib3hfc3RvcmFnZS9jb250cmFjdC5weTo0MzYKICAgIC8vIHJldHVybiBrZXkgaW4gc2VsZi5ib3hfbWFwCiAgICBpdG9iCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIGJveF9zdG9yYWdlL2NvbnRyYWN0LnB5OjQzNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICBwdXNoYnl0ZXMgMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18yIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg==" }, "byteCode": { "approval": "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", "clear": "C4EBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 99, "minor": 99, "patch": 99 } }, "events": [], "templateVariables": {} }