{ "name": "AssetLabeling", "structs": { "AssetFull": [ { "name": "name", "type": "string" }, { "name": "unit_name", "type": "string" }, { "name": "url", "type": "string" }, { "name": "total", "type": "uint64" }, { "name": "decimals", "type": "uint8" }, { "name": "creator", "type": "address" }, { "name": "manager", "type": "address" }, { "name": "freeze", "type": "address" }, { "name": "clawback", "type": "address" }, { "name": "reserve", "type": "address" }, { "name": "default_frozen", "type": "bool" }, { "name": "metadata_hash", "type": "byte[]" }, { "name": "reserve_balance", "type": "uint64" }, { "name": "labels", "type": "string[]" } ], "AssetMicro": [ { "name": "unit_name", "type": "string" }, { "name": "decimals", "type": "uint8" } ], "AssetMicroLabels": [ { "name": "unit_name", "type": "string" }, { "name": "decimals", "type": "uint8" }, { "name": "labels", "type": "string[]" } ], "AssetSmall": [ { "name": "name", "type": "string" }, { "name": "unit_name", "type": "string" }, { "name": "decimals", "type": "uint8" }, { "name": "total", "type": "uint64" }, { "name": "has_freeze", "type": "bool" }, { "name": "has_clawback", "type": "bool" }, { "name": "labels", "type": "string[]" } ], "AssetText": [ { "name": "name", "type": "string" }, { "name": "unit_name", "type": "string" }, { "name": "url", "type": "string" } ], "AssetTextLabels": [ { "name": "name", "type": "string" }, { "name": "unit_name", "type": "string" }, { "name": "url", "type": "string" }, { "name": "labels", "type": "string[]" } ], "AssetTiny": [ { "name": "name", "type": "string" }, { "name": "unit_name", "type": "string" }, { "name": "decimals", "type": "uint8" } ], "AssetTinyLabels": [ { "name": "name", "type": "string" }, { "name": "unit_name", "type": "string" }, { "name": "decimals", "type": "uint8" }, { "name": "labels", "type": "string[]" } ], "LabelDescriptor": [ { "name": "name", "type": "string" }, { "name": "url", "type": "string" }, { "name": "num_assets", "type": "uint64" }, { "name": "num_operators", "type": "uint64" } ] }, "methods": [ { "name": "change_admin", "args": [ { "type": "account", "name": "new_admin" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "add_label", "args": [ { "type": "string", "name": "id" }, { "type": "string", "name": "name" }, { "type": "string", "name": "url" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "has_label", "args": [ { "type": "string", "name": "id" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "change_label", "args": [ { "type": "string", "name": "id" }, { "type": "string", "name": "name" }, { "type": "string", "name": "url" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "remove_label", "args": [ { "type": "string", "name": "id" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "get_label", "args": [ { "type": "string", "name": "id" } ], "returns": { "type": "(string,string,uint64,uint64)", "struct": "LabelDescriptor" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "log_labels", "args": [ { "type": "string[]", "name": "ids" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "add_operator_to_label", "args": [ { "type": "account", "name": "operator" }, { "type": "string", "name": "label" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "has_operator_label", "args": [ { "type": "account", "name": "operator" }, { "type": "string", "name": "label" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "remove_operator_from_label", "args": [ { "type": "account", "name": "operator" }, { "type": "string", "name": "label" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "get_operator_labels", "args": [ { "type": "account", "name": "operator" } ], "returns": { "type": "string[]" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "add_label_to_asset", "args": [ { "type": "string", "name": "label" }, { "type": "asset", "name": "asset" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "add_label_to_assets", "args": [ { "type": "string", "name": "label" }, { "type": "uint64[]", "name": "assets" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "remove_label_from_asset", "args": [ { "type": "string", "name": "label" }, { "type": "asset", "name": "asset" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": false, "events": [], "recommendations": {} }, { "name": "has_asset_label", "args": [ { "type": "uint64", "name": "asset_id" }, { "type": "string", "name": "label" } ], "returns": { "type": "uint64" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_asset_labels", "args": [ { "type": "asset", "name": "asset" } ], "returns": { "type": "string[]" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_assets_labels", "args": [ { "type": "uint64[]", "name": "assets" } ], "returns": { "type": "string[][]" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "log_assets_labels", "args": [ { "type": "uint64[]", "name": "assets" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_asset_micro", "args": [ { "type": "uint64", "name": "asset" } ], "returns": { "type": "(string,uint8)", "struct": "AssetMicro" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_assets_micro", "args": [ { "type": "uint64[]", "name": "assets" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_asset_micro_labels", "args": [ { "type": "uint64", "name": "asset" } ], "returns": { "type": "(string,uint8,string[])", "struct": "AssetMicroLabels" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_assets_micro_labels", "args": [ { "type": "uint64[]", "name": "assets" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_asset_tiny", "args": [ { "type": "uint64", "name": "asset" } ], "returns": { "type": "(string,string,uint8)", "struct": "AssetTiny" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_assets_tiny", "args": [ { "type": "uint64[]", "name": "assets" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_asset_tiny_labels", "args": [ { "type": "uint64", "name": "asset" } ], "returns": { "type": "(string,string,uint8,string[])", "struct": "AssetTinyLabels" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_assets_tiny_labels", "args": [ { "type": "uint64[]", "name": "assets" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_asset_text", "args": [ { "type": "uint64", "name": "asset" } ], "returns": { "type": "(string,string,string)", "struct": "AssetText" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_assets_text", "args": [ { "type": "uint64[]", "name": "assets" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_asset_text_labels", "args": [ { "type": "uint64", "name": "asset" } ], "returns": { "type": "(string,string,string,string[])", "struct": "AssetTextLabels" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_assets_text_labels", "args": [ { "type": "uint64[]", "name": "assets" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_asset_small", "args": [ { "type": "uint64", "name": "asset" } ], "returns": { "type": "(string,string,uint8,uint64,bool,bool,string[])", "struct": "AssetSmall" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_assets_small", "args": [ { "type": "uint64[]", "name": "assets" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_asset_full", "args": [ { "type": "uint64", "name": "asset" } ], "returns": { "type": "(string,string,string,uint64,uint8,address,address,address,address,address,bool,byte[],uint64,string[])", "struct": "AssetFull" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} }, { "name": "get_assets_full", "args": [ { "type": "uint64[]", "name": "assets" } ], "returns": { "type": "void" }, "actions": { "create": [], "call": [ "NoOp" ] }, "readonly": true, "events": [], "recommendations": {} } ], "arcs": [ 22, 28 ], "networks": {}, "state": { "schema": { "global": { "ints": 0, "bytes": 1 }, "local": { "ints": 0, "bytes": 0 } }, "keys": { "global": { "admin": { "keyType": "AVMString", "valueType": "AVMBytes", "key": "YWRtaW4=" } }, "local": {}, "box": {} }, "maps": { "global": {}, "local": {}, "box": { "labels": { "keyType": "AVMString", "valueType": "LabelDescriptor", "prefix": "" }, "assets": { "keyType": "AVMUint64", "valueType": "string[]", "prefix": "" }, "operators": { "keyType": "AVMBytes", "valueType": "string[]", "prefix": "" } } } }, "bareActions": { "create": [ "NoOp" ], "call": [ "DeleteApplication", "UpdateApplication" ] }, "sourceInfo": { "approval": { "sourceInfo": [ { "pc": [ 1627, 1644, 2126, 2145, 2672 ], "errorMessage": "Index access is out of bounds" }, { "pc": [ 376, 391, 411, 426, 446, 461, 481, 496, 516, 531, 551, 566, 586, 601, 621, 636, 656, 671, 690, 712, 739, 763, 784, 808, 830, 854, 883, 907, 922, 944, 962, 992, 1015, 1045 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ 4138 ], "errorMessage": "account opted into asset" }, { "pc": [ 3056, 3064, 3156, 3166, 3291, 3299, 3307, 3412, 3422, 3432, 3579, 3587, 3595, 3709, 3719, 3729, 3890, 3900, 3910, 3926, 3934, 3950, 4122, 4143, 4153, 4163, 4173, 4181, 4200, 4208, 4216, 4224, 4232, 4237, 4250 ], "errorMessage": "asset exists" }, { "pc": [ 1098 ], "errorMessage": "can only call when creating" }, { "pc": [ 379, 394, 414, 429, 449, 464, 484, 499, 519, 534, 554, 569, 589, 604, 624, 639, 659, 674, 693, 715, 742, 766, 787, 811, 833, 857, 886, 910, 925, 947, 965, 995, 1018, 1048, 1081, 1089 ], "errorMessage": "can only call when not creating" }, { "pc": [ 1364, 1741 ], "errorMessage": "check self.admin exists" }, { "pc": [ 2362, 2484, 2653, 2664, 2745, 2874, 2921, 3021, 3193, 3459, 3750, 3977, 4279 ], "errorMessage": "check self.assets entry exists" }, { "pc": [ 1513, 1626, 1643, 1679, 1722, 1954, 2125, 2507, 2708 ], "errorMessage": "check self.labels entry exists" }, { "pc": [ 1819, 1928, 2184, 2209, 2313 ], "errorMessage": "check self.operators entry exists" }, { "pc": [ 3070, 3172, 3313, 3438, 3916, 4187 ], "errorMessage": "overflow" } ], "pcOffsetMethod": "none" }, "clear": { "sourceInfo": [], "pcOffsetMethod": "none" } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5fX2FsZ29weV9lbnRyeXBvaW50X3dpdGhfaW5pdCgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayAwIDEgMiA4IDQyOTQ5NjcyOTUgNDI5NDk2NzI5NgogICAgYnl0ZWNibG9jayAweDE1MWY3Yzc1IDB4ICJFUlI6Tk9FWElTVCIgMHgwMDAwIDB4MDAwMDAwMDAwMDAwMDAwMCAiYWRtaW4iICJFUlI6TEVOR1RIIiAiRVJSOkVYSVNUUyIgIkVSUjpOT0VNUFRZIiAweDAwMDIgMHgwMCAiRVJSOlVOQVVUSCIgMHgwMDAxIDB4MDAwNQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjY1CiAgICAvLyBzZWxmLmFkbWluID0gVHhuLnNlbmRlcgogICAgYnl0ZWMgNSAvLyAiYWRtaW4iCiAgICB0eG4gU2VuZGVyCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NjMKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0AzOQogICAgcHVzaGJ5dGVzcyAweDhmMGQ3ZDhlIDB4MzNhMmUyZjcgMHhiNzJiYjc4ZiAweDk3NmNkZTY0IDB4MTdlNjkxYWUgMHg3NjY1ZDJiNCAweDcyNTYxNmU3IDB4ZmFjMWNmMWIgMHg2ZmQ4MTQ4YyAweGI0YzUwYjlmIDB4YTJkZDIyNDcgMHhhMzdkZWExMSAweDEzNWFiMjFlIDB4NjhmMThlZmEgMHg5N2Y0MGE4YSAweGMyZWQ3NDNmIDB4YTY3ZjAzYzIgMHg5N2EzMjEyMyAweGFhZWUwYzYxIDB4YjZjMzlmNjggMHg2MzViZTM2MiAweDcwOTNiMTBkIDB4NzBhYzk5YWQgMHhkOWEyYmQ5YyAweDc2YzY1MjhlIDB4NTFmNzdiZmYgMHgyMGQ5ZjI0YyAweDU1NDBiODBhIDB4MDcxMGU1YzQgMHg2ZjE3Y2RkNSAweDdhNGNlNGI5IDB4MzY2YzUxYWYgMHgzNGE0OGZiYyAweDAzYmE5OGRiIC8vIG1ldGhvZCAiY2hhbmdlX2FkbWluKGFjY291bnQpdm9pZCIsIG1ldGhvZCAiYWRkX2xhYmVsKHN0cmluZyxzdHJpbmcsc3RyaW5nKXZvaWQiLCBtZXRob2QgImhhc19sYWJlbChzdHJpbmcpdWludDY0IiwgbWV0aG9kICJjaGFuZ2VfbGFiZWwoc3RyaW5nLHN0cmluZyxzdHJpbmcpdm9pZCIsIG1ldGhvZCAicmVtb3ZlX2xhYmVsKHN0cmluZyl2b2lkIiwgbWV0aG9kICJnZXRfbGFiZWwoc3RyaW5nKShzdHJpbmcsc3RyaW5nLHVpbnQ2NCx1aW50NjQpIiwgbWV0aG9kICJsb2dfbGFiZWxzKHN0cmluZ1tdKXZvaWQiLCBtZXRob2QgImFkZF9vcGVyYXRvcl90b19sYWJlbChhY2NvdW50LHN0cmluZyl2b2lkIiwgbWV0aG9kICJoYXNfb3BlcmF0b3JfbGFiZWwoYWNjb3VudCxzdHJpbmcpdWludDY0IiwgbWV0aG9kICJyZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbChhY2NvdW50LHN0cmluZyl2b2lkIiwgbWV0aG9kICJnZXRfb3BlcmF0b3JfbGFiZWxzKGFjY291bnQpc3RyaW5nW10iLCBtZXRob2QgImFkZF9sYWJlbF90b19hc3NldChzdHJpbmcsYXNzZXQpdm9pZCIsIG1ldGhvZCAiYWRkX2xhYmVsX3RvX2Fzc2V0cyhzdHJpbmcsdWludDY0W10pdm9pZCIsIG1ldGhvZCAicmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXQoc3RyaW5nLGFzc2V0KXZvaWQiLCBtZXRob2QgImhhc19hc3NldF9sYWJlbCh1aW50NjQsc3RyaW5nKXVpbnQ2NCIsIG1ldGhvZCAiZ2V0X2Fzc2V0X2xhYmVscyhhc3NldClzdHJpbmdbXSIsIG1ldGhvZCAiZ2V0X2Fzc2V0c19sYWJlbHModWludDY0W10pc3RyaW5nW11bXSIsIG1ldGhvZCAibG9nX2Fzc2V0c19sYWJlbHModWludDY0W10pdm9pZCIsIG1ldGhvZCAiZ2V0X2Fzc2V0X21pY3JvKHVpbnQ2NCkoc3RyaW5nLHVpbnQ4KSIsIG1ldGhvZCAiZ2V0X2Fzc2V0c19taWNybyh1aW50NjRbXSl2b2lkIiwgbWV0aG9kICJnZXRfYXNzZXRfbWljcm9fbGFiZWxzKHVpbnQ2NCkoc3RyaW5nLHVpbnQ4LHN0cmluZ1tdKSIsIG1ldGhvZCAiZ2V0X2Fzc2V0c19taWNyb19sYWJlbHModWludDY0W10pdm9pZCIsIG1ldGhvZCAiZ2V0X2Fzc2V0X3RpbnkodWludDY0KShzdHJpbmcsc3RyaW5nLHVpbnQ4KSIsIG1ldGhvZCAiZ2V0X2Fzc2V0c190aW55KHVpbnQ2NFtdKXZvaWQiLCBtZXRob2QgImdldF9hc3NldF90aW55X2xhYmVscyh1aW50NjQpKHN0cmluZyxzdHJpbmcsdWludDgsc3RyaW5nW10pIiwgbWV0aG9kICJnZXRfYXNzZXRzX3RpbnlfbGFiZWxzKHVpbnQ2NFtdKXZvaWQiLCBtZXRob2QgImdldF9hc3NldF90ZXh0KHVpbnQ2NCkoc3RyaW5nLHN0cmluZyxzdHJpbmcpIiwgbWV0aG9kICJnZXRfYXNzZXRzX3RleHQodWludDY0W10pdm9pZCIsIG1ldGhvZCAiZ2V0X2Fzc2V0X3RleHRfbGFiZWxzKHVpbnQ2NCkoc3RyaW5nLHN0cmluZyxzdHJpbmcsc3RyaW5nW10pIiwgbWV0aG9kICJnZXRfYXNzZXRzX3RleHRfbGFiZWxzKHVpbnQ2NFtdKXZvaWQiLCBtZXRob2QgImdldF9hc3NldF9zbWFsbCh1aW50NjQpKHN0cmluZyxzdHJpbmcsdWludDgsdWludDY0LGJvb2wsYm9vbCxzdHJpbmdbXSkiLCBtZXRob2QgImdldF9hc3NldHNfc21hbGwodWludDY0W10pdm9pZCIsIG1ldGhvZCAiZ2V0X2Fzc2V0X2Z1bGwodWludDY0KShzdHJpbmcsc3RyaW5nLHN0cmluZyx1aW50NjQsdWludDgsYWRkcmVzcyxhZGRyZXNzLGFkZHJlc3MsYWRkcmVzcyxhZGRyZXNzLGJvb2wsYnl0ZVtdLHVpbnQ2NCxzdHJpbmdbXSkiLCBtZXRob2QgImdldF9hc3NldHNfZnVsbCh1aW50NjRbXSl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9jaGFuZ2VfYWRtaW5fcm91dGVANSBtYWluX2FkZF9sYWJlbF9yb3V0ZUA2IG1haW5faGFzX2xhYmVsX3JvdXRlQDcgbWFpbl9jaGFuZ2VfbGFiZWxfcm91dGVAOCBtYWluX3JlbW92ZV9sYWJlbF9yb3V0ZUA5IG1haW5fZ2V0X2xhYmVsX3JvdXRlQDEwIG1haW5fbG9nX2xhYmVsc19yb3V0ZUAxMSBtYWluX2FkZF9vcGVyYXRvcl90b19sYWJlbF9yb3V0ZUAxMiBtYWluX2hhc19vcGVyYXRvcl9sYWJlbF9yb3V0ZUAxMyBtYWluX3JlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX3JvdXRlQDE0IG1haW5fZ2V0X29wZXJhdG9yX2xhYmVsc19yb3V0ZUAxNSBtYWluX2FkZF9sYWJlbF90b19hc3NldF9yb3V0ZUAxNiBtYWluX2FkZF9sYWJlbF90b19hc3NldHNfcm91dGVAMTcgbWFpbl9yZW1vdmVfbGFiZWxfZnJvbV9hc3NldF9yb3V0ZUAxOCBtYWluX2hhc19hc3NldF9sYWJlbF9yb3V0ZUAxOSBtYWluX2dldF9hc3NldF9sYWJlbHNfcm91dGVAMjAgbWFpbl9nZXRfYXNzZXRzX2xhYmVsc19yb3V0ZUAyMSBtYWluX2xvZ19hc3NldHNfbGFiZWxzX3JvdXRlQDIyIG1haW5fZ2V0X2Fzc2V0X21pY3JvX3JvdXRlQDIzIG1haW5fZ2V0X2Fzc2V0c19taWNyb19yb3V0ZUAyNCBtYWluX2dldF9hc3NldF9taWNyb19sYWJlbHNfcm91dGVAMjUgbWFpbl9nZXRfYXNzZXRzX21pY3JvX2xhYmVsc19yb3V0ZUAyNiBtYWluX2dldF9hc3NldF90aW55X3JvdXRlQDI3IG1haW5fZ2V0X2Fzc2V0c190aW55X3JvdXRlQDI4IG1haW5fZ2V0X2Fzc2V0X3RpbnlfbGFiZWxzX3JvdXRlQDI5IG1haW5fZ2V0X2Fzc2V0c190aW55X2xhYmVsc19yb3V0ZUAzMCBtYWluX2dldF9hc3NldF90ZXh0X3JvdXRlQDMxIG1haW5fZ2V0X2Fzc2V0c190ZXh0X3JvdXRlQDMyIG1haW5fZ2V0X2Fzc2V0X3RleHRfbGFiZWxzX3JvdXRlQDMzIG1haW5fZ2V0X2Fzc2V0c190ZXh0X2xhYmVsc19yb3V0ZUAzNCBtYWluX2dldF9hc3NldF9zbWFsbF9yb3V0ZUAzNSBtYWluX2dldF9hc3NldHNfc21hbGxfcm91dGVAMzYgbWFpbl9nZXRfYXNzZXRfZnVsbF9yb3V0ZUAzNyBtYWluX2dldF9hc3NldHNfZnVsbF9yb3V0ZUAzOAoKbWFpbl9hZnRlcl9pZl9lbHNlQDQzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjYzCiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICBpbnRjXzAgLy8gMAogICAgcmV0dXJuCgptYWluX2dldF9hc3NldHNfZnVsbF9yb3V0ZUAzODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NTgKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjYzCiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTU4CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBjYWxsc3ViIGdldF9hc3NldHNfZnVsbAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfYXNzZXRfZnVsbF9yb3V0ZUAzNzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NTQKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjYzCiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTU0CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBjYWxsc3ViIGdldF9hc3NldF9mdWxsCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9hc3NldHNfc21hbGxfcm91dGVAMzY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTE5CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo2MwogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjUxOQogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgY2FsbHN1YiBnZXRfYXNzZXRzX3NtYWxsCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9hc3NldF9zbWFsbF9yb3V0ZUAzNToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1MTUKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjYzCiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTE1CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBjYWxsc3ViIGdldF9hc3NldF9zbWFsbAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfYXNzZXRzX3RleHRfbGFiZWxzX3JvdXRlQDM0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ5MwogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NjMKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0OTMKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X2Fzc2V0c190ZXh0X2xhYmVscwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfYXNzZXRfdGV4dF9sYWJlbHNfcm91dGVAMzM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDg5CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo2MwogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ4OQogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgY2FsbHN1YiBnZXRfYXNzZXRfdGV4dF9sYWJlbHMKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2Fzc2V0c190ZXh0X3JvdXRlQDMyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ3MAogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NjMKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0NzAKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X2Fzc2V0c190ZXh0CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9hc3NldF90ZXh0X3JvdXRlQDMxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ2NgogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NjMKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0NjYKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X2Fzc2V0X3RleHQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2Fzc2V0c190aW55X2xhYmVsc19yb3V0ZUAzMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0NDgKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjYzCiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDQ4CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBjYWxsc3ViIGdldF9hc3NldHNfdGlueV9sYWJlbHMKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2Fzc2V0X3RpbnlfbGFiZWxzX3JvdXRlQDI5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ0NAogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NjMKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0NDQKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X2Fzc2V0X3RpbnlfbGFiZWxzCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9hc3NldHNfdGlueV9yb3V0ZUAyODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MjUKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjYzCiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDI1CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBjYWxsc3ViIGdldF9hc3NldHNfdGlueQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfYXNzZXRfdGlueV9yb3V0ZUAyNzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MjEKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjYzCiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIxCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBjYWxsc3ViIGdldF9hc3NldF90aW55CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9hc3NldHNfbWljcm9fbGFiZWxzX3JvdXRlQDI2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQwMwogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NjMKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MDMKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X2Fzc2V0c19taWNyb19sYWJlbHMKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2Fzc2V0X21pY3JvX2xhYmVsc19yb3V0ZUAyNToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozOTkKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjYzCiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzk5CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBjYWxsc3ViIGdldF9hc3NldF9taWNyb19sYWJlbHMKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2Fzc2V0c19taWNyb19yb3V0ZUAyNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozODEKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjYzCiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzgxCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBjYWxsc3ViIGdldF9hc3NldHNfbWljcm8KICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2Fzc2V0X21pY3JvX3JvdXRlQDIzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM3NwogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NjMKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNzcKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X2Fzc2V0X21pY3JvCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2xvZ19hc3NldHNfbGFiZWxzX3JvdXRlQDIyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM1MgogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NjMKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNTIKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgbG9nX2Fzc2V0c19sYWJlbHMKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fZ2V0X2Fzc2V0c19sYWJlbHNfcm91dGVAMjE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzM5CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo2MwogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjMzOQogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgY2FsbHN1YiBnZXRfYXNzZXRzX2xhYmVscwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfYXNzZXRfbGFiZWxzX3JvdXRlQDIwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjMzMgogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NjMKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFzc2V0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjMzMgogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgY2FsbHN1YiBnZXRfYXNzZXRfbGFiZWxzCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2hhc19hc3NldF9sYWJlbF9yb3V0ZUAxOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozMjQKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjYzCiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjMyNAogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgY2FsbHN1YiBoYXNfYXNzZXRfbGFiZWwKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfcm91dGVAMTg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjkwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjYzCiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjkwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXQKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fYWRkX2xhYmVsX3RvX2Fzc2V0c19yb3V0ZUAxNzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyODIKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NjMKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjgyCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgYWRkX2xhYmVsX3RvX2Fzc2V0cwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9hZGRfbGFiZWxfdG9fYXNzZXRfcm91dGVAMTY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mjc3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjYzCiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYXMgQXNzZXRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mjc3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgYWRkX2xhYmVsX3RvX2Fzc2V0CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2dldF9vcGVyYXRvcl9sYWJlbHNfcm91dGVAMTU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjM1CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo2MwogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgdHhuYXMgQWNjb3VudHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMzUKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X29wZXJhdG9yX2xhYmVscwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9yZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9yb3V0ZUAxNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxOTQKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NjMKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE5NAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2hhc19vcGVyYXRvcl9sYWJlbF9yb3V0ZUAxMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxODgKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjYzCiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxODgKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgaGFzX29wZXJhdG9yX2xhYmVsCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2FkZF9vcGVyYXRvcl90b19sYWJlbF9yb3V0ZUAxMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNjAKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NjMKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIHR4bmFzIEFjY291bnRzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE2MAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGFkZF9vcGVyYXRvcl90b19sYWJlbAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9sb2dfbGFiZWxzX3JvdXRlQDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEyNwogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NjMKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMjcKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgbG9nX2xhYmVscwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRfbGFiZWxfcm91dGVAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTIyCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo2MwogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMjIKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIGNhbGxzdWIgZ2V0X2xhYmVsCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3JlbW92ZV9sYWJlbF9yb3V0ZUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjExNAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo2MwogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMTQKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiByZW1vdmVfbGFiZWwKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fY2hhbmdlX2xhYmVsX3JvdXRlQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTA1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjYzCiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTA1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgY2hhbmdlX2xhYmVsCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2hhc19sYWJlbF9yb3V0ZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEwMAogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NjMKICAgIC8vIGNsYXNzIEFzc2V0TGFiZWxpbmcoQVJDNENvbnRyYWN0KToKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTAwCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICBjYWxsc3ViIGhhc19sYWJlbAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9hZGRfbGFiZWxfcm91dGVANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo4OAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo2MwogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojg4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgYWRkX2xhYmVsCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2NoYW5nZV9hZG1pbl9yb3V0ZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjgzCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjYzCiAgICAvLyBjbGFzcyBBc3NldExhYmVsaW5nKEFSQzRDb250cmFjdCk6CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjgzCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgY2hhbmdlX2FkbWluCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2JhcmVfcm91dGluZ0AzOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo2MwogICAgLy8gY2xhc3MgQXNzZXRMYWJlbGluZyhBUkM0Q29udHJhY3QpOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgc3dpdGNoIG1haW5fX19hbGdvcHlfZGVmYXVsdF9jcmVhdGVANDIgbWFpbl9hZnRlcl9pZl9lbHNlQDQzIG1haW5fYWZ0ZXJfaWZfZWxzZUA0MyBtYWluX2FmdGVyX2lmX2Vsc2VANDMgbWFpbl91cGRhdGVANDAgbWFpbl9kZWxldGVANDEKICAgIGIgbWFpbl9hZnRlcl9pZl9lbHNlQDQzCgptYWluX2RlbGV0ZUA0MToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo3NQogICAgLy8gQGFyYzQuYmFyZW1ldGhvZChhbGxvd19hY3Rpb25zPSgiRGVsZXRlQXBwbGljYXRpb24iLCkpCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZGVsZXRlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3VwZGF0ZUA0MDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo3MQogICAgLy8gQGFyYzQuYmFyZW1ldGhvZChhbGxvd19hY3Rpb25zPSgiVXBkYXRlQXBwbGljYXRpb24iLCkpCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgdXBkYXRlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDQyOgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBfcHV5YV9saWIuYXJjNC5keW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkKGFycmF5OiBieXRlcywgbmV3X2l0ZW1zX2J5dGVzOiBieXRlcywgbmV3X2l0ZW1zX2NvdW50OiB1aW50NjQpIC0+IGJ5dGVzOgpkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkOgogICAgcHJvdG8gMyAxCiAgICBmcmFtZV9kaWcgLTMKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIHN3YXAKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBjb3ZlciAyCiAgICBmcmFtZV9kaWcgLTMKICAgIGludGNfMiAvLyAyCiAgICBkaWcgMgogICAgc3Vic3RyaW5nMwogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgYnplcm8KICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0zCiAgICBsZW4KICAgIGZyYW1lX2RpZyAtMwogICAgdW5jb3ZlciAzCiAgICB1bmNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCgpkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkX2Zvcl9oZWFkZXJAMjoKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMgogICAgPAogICAgYnogZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZF9hZnRlcl9mb3JANQogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9kaWcgMwogICAgZHVwCiAgICBjb3ZlciA0CiAgICB1bmNvdmVyIDIKICAgIHJlcGxhY2UzCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMQogICAgZGlnIDEKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgKwogICAgZnJhbWVfYnVyeSA0CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZnJhbWVfYnVyeSAzCiAgICBiIGR5bmFtaWNfYXJyYXlfY29uY2F0X2J5dGVfbGVuZ3RoX2hlYWRfZm9yX2hlYWRlckAyCgpkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkX2FmdGVyX2ZvckA1OgogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2RpZyAxCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gX3B1eWFfbGliLmFyYzQuZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50KGFycmF5X2l0ZW1zX2NvdW50OiB1aW50NjQsIGFycmF5X2hlYWRfYW5kX3RhaWw6IGJ5dGVzLCBuZXdfaXRlbXNfY291bnQ6IHVpbnQ2NCwgbmV3X2hlYWRfYW5kX3RhaWw6IGJ5dGVzKSAtPiBieXRlczoKZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50OgogICAgcHJvdG8gNCAxCiAgICBieXRlY18xIC8vICIiCiAgICBkdXAKICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGZyYW1lX2RpZyAtNAogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGludGNfMCAvLyAwCgpkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnRfZm9yX2hlYWRlckAxOgogICAgZnJhbWVfZGlnIDQKICAgIGZyYW1lX2RpZyAzCiAgICA8CiAgICBieiBkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnRfYWZ0ZXJfZm9yQDQKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgY292ZXIgMgogICAgZXh0cmFjdF91aW50MTYKICAgIGZyYW1lX2RpZyAyCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIDEKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfYnVyeSAxCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZnJhbWVfYnVyeSA0CiAgICBiIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9mb3JfaGVhZGVyQDEKCmR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9hZnRlcl9mb3JANDoKICAgIGZyYW1lX2RpZyAtMwogICAgbGVuCiAgICBmcmFtZV9idXJ5IDAKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9idXJ5IDQKCmR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9mb3JfaGVhZGVyQDU6CiAgICBmcmFtZV9kaWcgNAogICAgZnJhbWVfZGlnIDIKICAgIDwKICAgIGJ6IGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9hZnRlcl9mb3JAOAogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgNAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfZGlnIDAKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgMQogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IDEKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBmcmFtZV9idXJ5IDQKICAgIGIgZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50X2Zvcl9oZWFkZXJANQoKZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50X2FmdGVyX2ZvckA4OgogICAgZnJhbWVfZGlnIC00CiAgICBmcmFtZV9kaWcgLTIKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgMQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMAogICAgc3Vic3RyaW5nMwogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgMgogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LmIyc3RyKGI6IGJ5dGVzKSAtPiBieXRlczoKYjJzdHI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTItNTMKICAgIC8vIEBzdWJyb3V0aW5lCiAgICAvLyBkZWYgYjJzdHIoYjogQnl0ZXMpIC0+IGFyYzQuU3RyaW5nOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTQKICAgIC8vIHJldHVybiBhcmM0LlN0cmluZyhTdHJpbmcuZnJvbV9ieXRlcyhiKSkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLnVwZGF0ZSgpIC0+IHZvaWQ6CnVwZGF0ZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo3MwogICAgLy8gc2VsZi5hZG1pbl9vbmx5KCkKICAgIGNhbGxzdWIgYWRtaW5fb25seQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZGVsZXRlKCkgLT4gdm9pZDoKZGVsZXRlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojc3CiAgICAvLyBzZWxmLmFkbWluX29ubHkoKQogICAgY2FsbHN1YiBhZG1pbl9vbmx5CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5hZG1pbl9vbmx5KCkgLT4gdm9pZDoKYWRtaW5fb25seToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo4MQogICAgLy8gZW5zdXJlKFR4bi5zZW5kZXIgPT0gc2VsZi5hZG1pbiwgUygiRVJSOlVOQVVUSCIpKQogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gImFkbWluIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFkbWluIGV4aXN0cwogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MgogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogYWRtaW5fb25seV9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo4MQogICAgLy8gZW5zdXJlKFR4bi5zZW5kZXIgPT0gc2VsZi5hZG1pbiwgUygiRVJSOlVOQVVUSCIpKQogICAgYnl0ZWMgMTEgLy8gIkVSUjpVTkFVVEgiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDMKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0NAogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKYWRtaW5fb25seV9hZnRlcl9pZl9lbHNlQDM6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5jaGFuZ2VfYWRtaW4obmV3X2FkbWluOiBieXRlcykgLT4gdm9pZDoKY2hhbmdlX2FkbWluOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjgzLTg0CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIGRlZiBjaGFuZ2VfYWRtaW4oc2VsZiwgbmV3X2FkbWluOiBBY2NvdW50KSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6ODUKICAgIC8vIHNlbGYuYWRtaW5fb25seSgpCiAgICBjYWxsc3ViIGFkbWluX29ubHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo4NgogICAgLy8gc2VsZi5hZG1pbiA9IG5ld19hZG1pbgogICAgYnl0ZWMgNSAvLyAiYWRtaW4iCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5hZGRfbGFiZWwoaWQ6IGJ5dGVzLCBuYW1lOiBieXRlcywgdXJsOiBieXRlcykgLT4gdm9pZDoKYWRkX2xhYmVsOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojg4LTg5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIGRlZiBhZGRfbGFiZWwoc2VsZiwgaWQ6IFN0cmluZywgbmFtZTogU3RyaW5nLCB1cmw6IFN0cmluZykgLT4gTm9uZTogICMgbm9xYSBBMDAyCiAgICBwcm90byAzIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo5MAogICAgLy8gc2VsZi5hZG1pbl9vbmx5KCkKICAgIGNhbGxzdWIgYWRtaW5fb25seQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjkxCiAgICAvLyBlbnN1cmUoaWQgbm90IGluIHNlbGYubGFiZWxzLCBTKCJFUlI6RVhJU1RTIikpCiAgICBmcmFtZV9kaWcgLTMKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJ6IGFkZF9sYWJlbF9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo5MQogICAgLy8gZW5zdXJlKGlkIG5vdCBpbiBzZWxmLmxhYmVscywgUygiRVJSOkVYSVNUUyIpKQogICAgYnl0ZWMgNyAvLyAiRVJSOkVYSVNUUyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MwogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ0CiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgphZGRfbGFiZWxfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjkyCiAgICAvLyBlbnN1cmUoaWQuYnl0ZXMubGVuZ3RoID09IDIsIFMoIkVSUjpMRU5HVEgiKSkKICAgIGZyYW1lX2RpZyAtMwogICAgbGVuCiAgICBpbnRjXzIgLy8gMgogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MgogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogYWRkX2xhYmVsX2FmdGVyX2lmX2Vsc2VANwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjkyCiAgICAvLyBlbnN1cmUoaWQuYnl0ZXMubGVuZ3RoID09IDIsIFMoIkVSUjpMRU5HVEgiKSkKICAgIGJ5dGVjIDYgLy8gIkVSUjpMRU5HVEgiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDMKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0NAogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKYWRkX2xhYmVsX2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo5NAogICAgLy8gYXJjNC5TdHJpbmcobmFtZSksCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6OTUKICAgIC8vIGFyYzQuU3RyaW5nKHVybCksCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6OTMtOTgKICAgIC8vIHNlbGYubGFiZWxzW2lkXSA9IExhYmVsRGVzY3JpcHRvcigKICAgIC8vICAgICBhcmM0LlN0cmluZyhuYW1lKSwKICAgIC8vICAgICBhcmM0LlN0cmluZyh1cmwpLAogICAgLy8gICAgIGFyYzQuVUludDY0KDApLAogICAgLy8gICAgIGFyYzQuVUludDY0KDApLAogICAgLy8gKQogICAgZGlnIDEKICAgIGxlbgogICAgcHVzaGludCAyMCAvLyAyMAogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHB1c2hieXRlcyAweDAwMTQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5Ojk2CiAgICAvLyBhcmM0LlVJbnQ2NCgwKSwKICAgIGJ5dGVjIDQgLy8gMHgwMDAwMDAwMDAwMDAwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6OTMtOTgKICAgIC8vIHNlbGYubGFiZWxzW2lkXSA9IExhYmVsRGVzY3JpcHRvcigKICAgIC8vICAgICBhcmM0LlN0cmluZyhuYW1lKSwKICAgIC8vICAgICBhcmM0LlN0cmluZyh1cmwpLAogICAgLy8gICAgIGFyYzQuVUludDY0KDApLAogICAgLy8gICAgIGFyYzQuVUludDY0KDApLAogICAgLy8gKQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6OTcKICAgIC8vIGFyYzQuVUludDY0KDApLAogICAgYnl0ZWMgNCAvLyAweDAwMDAwMDAwMDAwMDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo5My05OAogICAgLy8gc2VsZi5sYWJlbHNbaWRdID0gTGFiZWxEZXNjcmlwdG9yKAogICAgLy8gICAgIGFyYzQuU3RyaW5nKG5hbWUpLAogICAgLy8gICAgIGFyYzQuU3RyaW5nKHVybCksCiAgICAvLyAgICAgYXJjNC5VSW50NjQoMCksCiAgICAvLyAgICAgYXJjNC5VSW50NjQoMCksCiAgICAvLyApCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMwogICAgYm94X2RlbAogICAgcG9wCiAgICBmcmFtZV9kaWcgLTMKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmhhc19sYWJlbChpZDogYnl0ZXMpIC0+IHVpbnQ2NDoKaGFzX2xhYmVsOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEwMC0xMDEKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBoYXNfbGFiZWwoc2VsZiwgaWQ6IFN0cmluZykgLT4gVUludDY0OiAgIyBub3FhIEEwMDIKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEwMgogICAgLy8gZW5zdXJlKGlkLmJ5dGVzLmxlbmd0aCA9PSAyLCBTKCJFUlI6TEVOR1RIIikpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18yIC8vIDIKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IGhhc19sYWJlbF9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMDIKICAgIC8vIGVuc3VyZShpZC5ieXRlcy5sZW5ndGggPT0gMiwgUygiRVJSOkxFTkdUSCIpKQogICAgYnl0ZWMgNiAvLyAiRVJSOkxFTkdUSCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MwogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ0CiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgpoYXNfbGFiZWxfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEwMwogICAgLy8gcmV0dXJuIFVJbnQ2NChpZCBpbiBzZWxmLmxhYmVscykKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5jaGFuZ2VfbGFiZWwoaWQ6IGJ5dGVzLCBuYW1lOiBieXRlcywgdXJsOiBieXRlcykgLT4gdm9pZDoKY2hhbmdlX2xhYmVsOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEwNS0xMDYKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIGNoYW5nZV9sYWJlbChzZWxmLCBpZDogU3RyaW5nLCBuYW1lOiBTdHJpbmcsIHVybDogU3RyaW5nKSAtPiBOb25lOiAgIyBub3FhIEEwMDIKICAgIHByb3RvIDMgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEwNwogICAgLy8gc2VsZi5hZG1pbl9vbmx5KCkKICAgIGNhbGxzdWIgYWRtaW5fb25seQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEwOAogICAgLy8gZW5zdXJlKGlkIGluIHNlbGYubGFiZWxzLCBTKCJFUlI6Tk9FWElTVCIpKQogICAgZnJhbWVfZGlnIC0zCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MgogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogY2hhbmdlX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEwOAogICAgLy8gZW5zdXJlKGlkIGluIHNlbGYubGFiZWxzLCBTKCJFUlI6Tk9FWElTVCIpKQogICAgYnl0ZWNfMiAvLyAiRVJSOk5PRVhJU1QiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDMKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0NAogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKY2hhbmdlX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMDkKICAgIC8vIGxhYmVsX2Rlc2NyaXB0b3IgPSBzZWxmLmxhYmVsc1tpZF0uY29weSgpCiAgICBmcmFtZV9kaWcgLTMKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxhYmVscyBlbnRyeSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMTAKICAgIC8vIGxhYmVsX2Rlc2NyaXB0b3IubmFtZSA9IGFyYzQuU3RyaW5nKG5hbWUpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBkaWcgMQogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMgogICAgaW50Y18wIC8vIDAKICAgIGRpZyAyCiAgICBleHRyYWN0MwogICAgZGlnIDMKICAgIGludGNfMiAvLyAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDQKICAgIGxlbgogICAgdW5jb3ZlciA1CiAgICBkaWcgMgogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICB1bmNvdmVyIDIKICAgIGRpZyA0CiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICAtCiAgICB1bmNvdmVyIDIKICAgIGxlbgogICAgZGlnIDIKICAgIGludGNfMiAvLyAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgKwogICAgc3dhcAogICAgLQogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHJlcGxhY2UyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMTEKICAgIC8vIGxhYmVsX2Rlc2NyaXB0b3IudXJsID0gYXJjNC5TdHJpbmcodXJsKQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgZGlnIDEKICAgIGludGNfMiAvLyAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgdW5jb3ZlciAyCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBleHRyYWN0MwogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTEyCiAgICAvLyBzZWxmLmxhYmVsc1tpZF0gPSBsYWJlbF9kZXNjcmlwdG9yLmNvcHkoKQogICAgZnJhbWVfZGlnIC0zCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGZyYW1lX2RpZyAtMwogICAgc3dhcAogICAgYm94X3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcucmVtb3ZlX2xhYmVsKGlkOiBieXRlcykgLT4gdm9pZDoKcmVtb3ZlX2xhYmVsOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjExNC0xMTUKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIHJlbW92ZV9sYWJlbChzZWxmLCBpZDogU3RyaW5nKSAtPiBOb25lOiAgIyBub3FhIEEwMDIKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjExNgogICAgLy8gc2VsZi5hZG1pbl9vbmx5KCkKICAgIGNhbGxzdWIgYWRtaW5fb25seQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjExNwogICAgLy8gZW5zdXJlKGlkIGluIHNlbGYubGFiZWxzLCBTKCJFUlI6Tk9FWElTVCIpKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MgogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogcmVtb3ZlX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjExNwogICAgLy8gZW5zdXJlKGlkIGluIHNlbGYubGFiZWxzLCBTKCJFUlI6Tk9FWElTVCIpKQogICAgYnl0ZWNfMiAvLyAiRVJSOk5PRVhJU1QiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDMKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0NAogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKcmVtb3ZlX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMTgKICAgIC8vIGVuc3VyZShzZWxmLmxhYmVsc1tpZF0ubnVtX29wZXJhdG9ycyA9PSAwLCBTKCJFUlI6Tk9FTVBUWSIpKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sYWJlbHMgZW50cnkgZXhpc3RzCiAgICBleHRyYWN0IDEyIDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBieXRlYyA0IC8vIDB4MDAwMDAwMDAwMDAwMDAwMAogICAgYj09CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IHJlbW92ZV9sYWJlbF9hZnRlcl9pZl9lbHNlQDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMTgKICAgIC8vIGVuc3VyZShzZWxmLmxhYmVsc1tpZF0ubnVtX29wZXJhdG9ycyA9PSAwLCBTKCJFUlI6Tk9FTVBUWSIpKQogICAgYnl0ZWMgOCAvLyAiRVJSOk5PRU1QVFkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDMKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0NAogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKcmVtb3ZlX2xhYmVsX2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMTkKICAgIC8vIGVuc3VyZShzZWxmLmxhYmVsc1tpZF0ubnVtX2Fzc2V0cyA9PSAwLCBTKCJFUlI6Tk9FTVBUWSIpKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sYWJlbHMgZW50cnkgZXhpc3RzCiAgICBleHRyYWN0IDQgOCAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGJ5dGVjIDQgLy8gMHgwMDAwMDAwMDAwMDAwMDAwCiAgICBiPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MgogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogcmVtb3ZlX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMTkKICAgIC8vIGVuc3VyZShzZWxmLmxhYmVsc1tpZF0ubnVtX2Fzc2V0cyA9PSAwLCBTKCJFUlI6Tk9FTVBUWSIpKQogICAgYnl0ZWMgOCAvLyAiRVJSOk5PRU1QVFkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDMKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0NAogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKcmVtb3ZlX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMTE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTIwCiAgICAvLyBkZWwgc2VsZi5sYWJlbHNbaWRdCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9kZWwKICAgIHBvcAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2xhYmVsKGlkOiBieXRlcykgLT4gYnl0ZXM6CmdldF9sYWJlbDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMjItMTIzCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICAvLyBkZWYgZ2V0X2xhYmVsKHNlbGYsIGlkOiBTdHJpbmcpIC0+IExhYmVsRGVzY3JpcHRvcjogICMgbm9xYSBBMDAyCiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMjQKICAgIC8vIGVuc3VyZShpZCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IGdldF9sYWJlbF9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMjQKICAgIC8vIGVuc3VyZShpZCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGJ5dGVjXzIgLy8gIkVSUjpOT0VYSVNUIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQzCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDQKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCmdldF9sYWJlbF9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTI1CiAgICAvLyByZXR1cm4gc2VsZi5sYWJlbHNbaWRdCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxhYmVscyBlbnRyeSBleGlzdHMKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmxvZ19sYWJlbHMoaWRzOiBieXRlcykgLT4gdm9pZDoKbG9nX2xhYmVsczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMjctMTI4CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICAvLyBkZWYgbG9nX2xhYmVscyhzZWxmLCBpZHM6IGFyYzQuRHluYW1pY0FycmF5W2FyYzQuU3RyaW5nXSkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEyOQogICAgLy8gZm9yIF9pZHgsIGxhYmVsX2lkIGluIHVlbnVtZXJhdGUoaWRzKToKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzAgLy8gMAoKbG9nX2xhYmVsc19mb3JfaGVhZGVyQDE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTI5CiAgICAvLyBmb3IgX2lkeCwgbGFiZWxfaWQgaW4gdWVudW1lcmF0ZShpZHMpOgogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2RpZyAwCiAgICA8CiAgICBieiBsb2dfbGFiZWxzX2FmdGVyX2ZvckA0CiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgZGlnIDEKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGV4dHJhY3QzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTMwCiAgICAvLyBsb2coc2VsZi5sYWJlbHNbbGFiZWxfaWQubmF0aXZlXSkKICAgIGV4dHJhY3QgMiAwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5sYWJlbHMgZW50cnkgZXhpc3RzCiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDEKICAgIGIgbG9nX2xhYmVsc19mb3JfaGVhZGVyQDEKCmxvZ19sYWJlbHNfYWZ0ZXJfZm9yQDQ6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5hZG1pbl9vcl9vcGVyYXRvcl9vbmx5KGxhYmVsOiBieXRlcykgLT4gdm9pZDoKYWRtaW5fb3Jfb3BlcmF0b3Jfb25seToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxMzYtMTM3CiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIGFkbWluX29yX29wZXJhdG9yX29ubHkoc2VsZiwgbGFiZWw6IFN0cmluZykgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjEzOAogICAgLy8gaWYgVHhuLnNlbmRlciA9PSBzZWxmLmFkbWluOgogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDUgLy8gImFkbWluIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFkbWluIGV4aXN0cwogICAgPT0KICAgIGJ6IGFkbWluX29yX29wZXJhdG9yX29ubHlfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTM5CiAgICAvLyByZXR1cm4KICAgIHJldHN1YgoKYWRtaW5fb3Jfb3BlcmF0b3Jfb25seV9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTQwCiAgICAvLyBzZWxmLm9wZXJhdG9yX29ubHkobGFiZWwpCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgb3BlcmF0b3Jfb25seQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcub3BlcmF0b3Jfb25seShsYWJlbDogYnl0ZXMpIC0+IHZvaWQ6Cm9wZXJhdG9yX29ubHk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTQyLTE0MwogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBvcGVyYXRvcl9vbmx5KHNlbGYsIGxhYmVsOiBTdHJpbmcpIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNDQKICAgIC8vIG9wZXJhdG9yX2luZGV4ID0gc2VsZi5nZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXgoVHhuLnNlbmRlciwgbGFiZWwpCiAgICB0eG4gU2VuZGVyCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4CiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNDYKICAgIC8vIG9wZXJhdG9yX2luZGV4ICE9IFVJbnQ2NChOT1RfRk9VTkRfS0VZKQogICAgaW50YyA1IC8vIDQyOTQ5NjcyOTYKICAgICE9CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTQ2LTE0NwogICAgLy8gb3BlcmF0b3JfaW5kZXggIT0gVUludDY0KE5PVF9GT1VORF9LRVkpCiAgICAvLyBhbmQgb3BlcmF0b3JfaW5kZXggIT0gVUludDY0KE5PVF9GT1VORF9WQUxVRSksCiAgICBieiBvcGVyYXRvcl9vbmx5X2Jvb2xfZmFsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE0NwogICAgLy8gYW5kIG9wZXJhdG9yX2luZGV4ICE9IFVJbnQ2NChOT1RfRk9VTkRfVkFMVUUpLAogICAgZnJhbWVfZGlnIDAKICAgIGludGMgNCAvLyA0Mjk0OTY3Mjk1CiAgICAhPQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE0Ni0xNDcKICAgIC8vIG9wZXJhdG9yX2luZGV4ICE9IFVJbnQ2NChOT1RfRk9VTkRfS0VZKQogICAgLy8gYW5kIG9wZXJhdG9yX2luZGV4ICE9IFVJbnQ2NChOT1RfRk9VTkRfVkFMVUUpLAogICAgYnogb3BlcmF0b3Jfb25seV9ib29sX2ZhbHNlQDMKICAgIGludGNfMSAvLyAxCgpvcGVyYXRvcl9vbmx5X2Jvb2xfbWVyZ2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MgogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogb3BlcmF0b3Jfb25seV9hZnRlcl9pZl9lbHNlQDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNDgKICAgIC8vIFMoIkVSUjpVTkFVVEgiKSwKICAgIGJ5dGVjIDExIC8vICJFUlI6VU5BVVRIIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQzCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDQKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCm9wZXJhdG9yX29ubHlfYWZ0ZXJfaWZfZWxzZUA3OgogICAgcmV0c3ViCgpvcGVyYXRvcl9vbmx5X2Jvb2xfZmFsc2VAMzoKICAgIGludGNfMCAvLyAwCiAgICBiIG9wZXJhdG9yX29ubHlfYm9vbF9tZXJnZUA0CgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4KG9wZXJhdG9yOiBieXRlcywgbGFiZWw6IGJ5dGVzKSAtPiB1aW50NjQ6CmdldF9vcGVyYXRvcl9sYWJlbF9pbmRleDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNTEtMTUyCiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIGdldF9vcGVyYXRvcl9sYWJlbF9pbmRleChzZWxmLCBvcGVyYXRvcjogQWNjb3VudCwgbGFiZWw6IFN0cmluZykgLT4gVUludDY0OgogICAgcHJvdG8gMiAxCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAiIgogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTUzCiAgICAvLyBpZiBvcGVyYXRvciBub3QgaW4gc2VsZi5vcGVyYXRvcnM6CiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYm56IGdldF9vcGVyYXRvcl9sYWJlbF9pbmRleF9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNTQKICAgIC8vIHJldHVybiBVSW50NjQoTk9UX0ZPVU5EX0tFWSkKICAgIGludGMgNSAvLyA0Mjk0OTY3Mjk2CiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4X2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNTUKICAgIC8vIGZvciBpZHgsIHN0b3JlZF9sYWJlbCBpbiB1ZW51bWVyYXRlKHNlbGYub3BlcmF0b3JzW29wZXJhdG9yXSk6CiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgZnJhbWVfYnVyeSAwCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5vcGVyYXRvcnMgZW50cnkgZXhpc3RzCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGZyYW1lX2J1cnkgMQogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2J1cnkgMgoKZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4X2Zvcl9oZWFkZXJAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNTUKICAgIC8vIGZvciBpZHgsIHN0b3JlZF9sYWJlbCBpbiB1ZW51bWVyYXRlKHNlbGYub3BlcmF0b3JzW29wZXJhdG9yXSk6CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfZGlnIDEKICAgIDwKICAgIGJ6IGdldF9vcGVyYXRvcl9sYWJlbF9pbmRleF9hZnRlcl9mb3JAOAogICAgZnJhbWVfZGlnIDAKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgMgogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGRpZyAxCiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwMgogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBleHRyYWN0MwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE1NgogICAgLy8gaWYgc3RvcmVkX2xhYmVsID09IGxhYmVsOgogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAtMQogICAgPT0KICAgIGJ6IGdldF9vcGVyYXRvcl9sYWJlbF9pbmRleF9hZnRlcl9pZl9lbHNlQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNTcKICAgIC8vIHJldHVybiBpZHgKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4X2FmdGVyX2lmX2Vsc2VANjoKICAgIGZyYW1lX2RpZyAyCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAyCiAgICBiIGdldF9vcGVyYXRvcl9sYWJlbF9pbmRleF9mb3JfaGVhZGVyQDMKCmdldF9vcGVyYXRvcl9sYWJlbF9pbmRleF9hZnRlcl9mb3JAODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNTgKICAgIC8vIHJldHVybiBVSW50NjQoTk9UX0ZPVU5EX1ZBTFVFKQogICAgaW50YyA0IC8vIDQyOTQ5NjcyOTUKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuYWRkX29wZXJhdG9yX3RvX2xhYmVsKG9wZXJhdG9yOiBieXRlcywgbGFiZWw6IGJ5dGVzKSAtPiB2b2lkOgphZGRfb3BlcmF0b3JfdG9fbGFiZWw6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTYwLTE2MQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBkZWYgYWRkX29wZXJhdG9yX3RvX2xhYmVsKHNlbGYsIG9wZXJhdG9yOiBBY2NvdW50LCBsYWJlbDogU3RyaW5nKSAtPiBOb25lOgogICAgcHJvdG8gMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTYyCiAgICAvLyBzZWxmLmFkbWluX29yX29wZXJhdG9yX29ubHkobGFiZWwpCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgYWRtaW5fb3Jfb3BlcmF0b3Jfb25seQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE2MwogICAgLy8gZW5zdXJlKGxhYmVsIGluIHNlbGYubGFiZWxzLCBTKCJFUlI6Tk9FWElTVCIpKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MgogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogYWRkX29wZXJhdG9yX3RvX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxNjMKICAgIC8vIGVuc3VyZShsYWJlbCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGJ5dGVjXzIgLy8gIkVSUjpOT0VYSVNUIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQzCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDQKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCmFkZF9vcGVyYXRvcl90b19sYWJlbF9hZnRlcl9pZl9lbHNlQDEwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE2NC0xNjUKICAgIC8vICMgY2hlY2sgaWYgb3BlcmF0b3IgZXhpc3RzIGFscmVhZHkKICAgIC8vIGlmIG9wZXJhdG9yIGluIHNlbGYub3BlcmF0b3JzOgogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJ6IGFkZF9vcGVyYXRvcl90b19sYWJlbF9lbHNlX2JvZHlAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE2OAogICAgLy8gc2VsZi5nZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXgob3BlcmF0b3IsIGxhYmVsKQogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTY5CiAgICAvLyA9PSBVSW50NjQoTk9UX0ZPVU5EX1ZBTFVFKSwKICAgIGludGMgNCAvLyA0Mjk0OTY3Mjk1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTY4LTE2OQogICAgLy8gc2VsZi5nZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXgob3BlcmF0b3IsIGxhYmVsKQogICAgLy8gPT0gVUludDY0KE5PVF9GT1VORF9WQUxVRSksCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJueiBhZGRfb3BlcmF0b3JfdG9fbGFiZWxfYWZ0ZXJfaWZfZWxzZUA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTcwCiAgICAvLyBTKCJFUlI6RVhJU1RTIiksCiAgICBieXRlYyA3IC8vICJFUlI6RVhJU1RTIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQzCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDQKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCmFkZF9vcGVyYXRvcl90b19sYWJlbF9hZnRlcl9pZl9lbHNlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTczLTE3NAogICAgLy8gIyBhZGQgbGFiZWwgdG8gb3BlcmF0b3IKICAgIC8vIGV4aXN0aW5nID0gc2VsZi5vcGVyYXRvcnNbb3BlcmF0b3JdLmNvcHkoKQogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5vcGVyYXRvcnMgZW50cnkgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTc1CiAgICAvLyBleGlzdGluZy5hcHBlbmQoYXJjNC5TdHJpbmcobGFiZWwpKQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgaW50Y18xIC8vIDEKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE3NgogICAgLy8gc2VsZi5vcGVyYXRvcnNbb3BlcmF0b3JdID0gZXhpc3RpbmcuY29weSgpCiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9kZWwKICAgIHBvcAogICAgZnJhbWVfZGlnIC0yCiAgICBzd2FwCiAgICBib3hfcHV0CgphZGRfb3BlcmF0b3JfdG9fbGFiZWxfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE4MS0xODIKICAgIC8vICMgaW5jcmVtZW50IGxhYmVsIG9wZXJhdG9ycwogICAgLy8gbGFiZWxfZGVzY3JpcHRvciA9IHNlbGYubGFiZWxzW2xhYmVsXS5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubGFiZWxzIGVudHJ5IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE4NAogICAgLy8gbGFiZWxfZGVzY3JpcHRvci5udW1fb3BlcmF0b3JzLm5hdGl2ZSArIFVJbnQ2NCgxKQogICAgZHVwCiAgICBwdXNoaW50IDEyIC8vIDEyCiAgICBleHRyYWN0X3VpbnQ2NAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxODMtMTg1CiAgICAvLyBsYWJlbF9kZXNjcmlwdG9yLm51bV9vcGVyYXRvcnMgPSBhcmM0LlVJbnQ2NCgKICAgIC8vICAgICBsYWJlbF9kZXNjcmlwdG9yLm51bV9vcGVyYXRvcnMubmF0aXZlICsgVUludDY0KDEpCiAgICAvLyApCiAgICBpdG9iCiAgICByZXBsYWNlMiAxMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE4NgogICAgLy8gc2VsZi5sYWJlbHNbbGFiZWxdID0gbGFiZWxfZGVzY3JpcHRvci5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2RlbAogICAgcG9wCiAgICBmcmFtZV9kaWcgLTEKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIHJldHN1YgoKYWRkX29wZXJhdG9yX3RvX2xhYmVsX2Vsc2VfYm9keUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE3OC0xNzkKICAgIC8vICMgbmV3IG9wZXJhdG9yLCBjcmVhdGUgbmV3IGJveAogICAgLy8gc2VsZi5vcGVyYXRvcnNbb3BlcmF0b3JdID0gYXJjNC5EeW5hbWljQXJyYXkoYXJjNC5TdHJpbmcobGFiZWwpKQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgYnl0ZWMgOSAvLyAweDAwMDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWMgMTIgLy8gMHgwMDAxCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2RlbAogICAgcG9wCiAgICBmcmFtZV9kaWcgLTIKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIGIgYWRkX29wZXJhdG9yX3RvX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmhhc19vcGVyYXRvcl9sYWJlbChvcGVyYXRvcjogYnl0ZXMsIGxhYmVsOiBieXRlcykgLT4gdWludDY0OgpoYXNfb3BlcmF0b3JfbGFiZWw6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTg4LTE4OQogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgLy8gZGVmIGhhc19vcGVyYXRvcl9sYWJlbChzZWxmLCBvcGVyYXRvcjogQWNjb3VudCwgbGFiZWw6IFN0cmluZykgLT4gVUludDY0OgogICAgcHJvdG8gMiAxCiAgICBieXRlY18xIC8vICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTkwCiAgICAvLyBlbnN1cmUobGFiZWwuYnl0ZXMubGVuZ3RoID09IDIsIFMoIkVSUjpMRU5HVEgiKSkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzIgLy8gMgogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MgogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogaGFzX29wZXJhdG9yX2xhYmVsX2FmdGVyX2lmX2Vsc2VANwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE5MAogICAgLy8gZW5zdXJlKGxhYmVsLmJ5dGVzLmxlbmd0aCA9PSAyLCBTKCJFUlI6TEVOR1RIIikpCiAgICBieXRlYyA2IC8vICJFUlI6TEVOR1RIIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQzCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDQKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCmhhc19vcGVyYXRvcl9sYWJlbF9hZnRlcl9pZl9lbHNlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTkxCiAgICAvLyBpZHggPSBzZWxmLmdldF9vcGVyYXRvcl9sYWJlbF9pbmRleChvcGVyYXRvciwgbGFiZWwpCiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiBnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXgKICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTkyCiAgICAvLyByZXR1cm4gVUludDY0KGlkeCAhPSBOT1RfRk9VTkRfS0VZIGFuZCBpZHggIT0gTk9UX0ZPVU5EX1ZBTFVFKQogICAgaW50YyA1IC8vIDQyOTQ5NjcyOTYKICAgICE9CiAgICBieiBoYXNfb3BlcmF0b3JfbGFiZWxfYm9vbF9mYWxzZUAzCiAgICBmcmFtZV9kaWcgMAogICAgaW50YyA0IC8vIDQyOTQ5NjcyOTUKICAgICE9CiAgICBieiBoYXNfb3BlcmF0b3JfbGFiZWxfYm9vbF9mYWxzZUAzCiAgICBpbnRjXzEgLy8gMQoKaGFzX29wZXJhdG9yX2xhYmVsX2Jvb2xfbWVyZ2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxOTIKICAgIC8vIHJldHVybiBVSW50NjQoaWR4ICE9IE5PVF9GT1VORF9LRVkgYW5kIGlkeCAhPSBOT1RfRk9VTkRfVkFMVUUpCiAgICBzd2FwCiAgICByZXRzdWIKCmhhc19vcGVyYXRvcl9sYWJlbF9ib29sX2ZhbHNlQDM6CiAgICBpbnRjXzAgLy8gMAogICAgYiBoYXNfb3BlcmF0b3JfbGFiZWxfYm9vbF9tZXJnZUA0CgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcucmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWwob3BlcmF0b3I6IGJ5dGVzLCBsYWJlbDogYnl0ZXMpIC0+IHZvaWQ6CnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE5NC0xOTUKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsKHNlbGYsIG9wZXJhdG9yOiBBY2NvdW50LCBsYWJlbDogU3RyaW5nKSAtPiBOb25lOgogICAgcHJvdG8gMiAwCiAgICBpbnRjXzAgLy8gMAogICAgZHVwbiA0CiAgICBieXRlY18xIC8vICIiCiAgICBkdXBuIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToxOTYKICAgIC8vIHNlbGYuYWRtaW5fb3Jfb3BlcmF0b3Jfb25seShsYWJlbCkKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiBhZG1pbl9vcl9vcGVyYXRvcl9vbmx5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTk4CiAgICAvLyBlbnN1cmUobGFiZWwgaW4gc2VsZi5sYWJlbHMsIFMoIkVSUjpOT0VYSVNUIikpCiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJueiByZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9hZnRlcl9pZl9lbHNlQDI4CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MTk4CiAgICAvLyBlbnN1cmUobGFiZWwgaW4gc2VsZi5sYWJlbHMsIFMoIkVSUjpOT0VYSVNUIikpCiAgICBieXRlY18yIC8vICJFUlI6Tk9FWElTVCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MwogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ0CiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgpyZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9hZnRlcl9pZl9lbHNlQDI4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE5OQogICAgLy8gZW5zdXJlKG9wZXJhdG9yIGluIHNlbGYub3BlcmF0b3JzLCBTKCJFUlI6Tk9FWElTVCIpKQogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MgogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYWZ0ZXJfaWZfZWxzZUAzMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjE5OQogICAgLy8gZW5zdXJlKG9wZXJhdG9yIGluIHNlbGYub3BlcmF0b3JzLCBTKCJFUlI6Tk9FWElTVCIpKQogICAgYnl0ZWNfMiAvLyAiRVJSOk5PRVhJU1QiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDMKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0NAogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYWZ0ZXJfaWZfZWxzZUAzMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMDEtMjAyCiAgICAvLyAjIGVuc3VyZSBsYWJlbCBleGlzdHMgaW4gb3BlcmF0b3IKICAgIC8vIGxhYmVsX2lkeCA9IHNlbGYuZ2V0X29wZXJhdG9yX2xhYmVsX2luZGV4KG9wZXJhdG9yLCBsYWJlbCkKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIGdldF9vcGVyYXRvcl9sYWJlbF9pbmRleAogICAgZHVwCiAgICBmcmFtZV9idXJ5IDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMDQKICAgIC8vIGxhYmVsX2lkeCAhPSBVSW50NjQoTk9UX0ZPVU5EX1ZBTFVFKQogICAgaW50YyA0IC8vIDQyOTQ5NjcyOTUKICAgICE9CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjA0LTIwNgogICAgLy8gbGFiZWxfaWR4ICE9IFVJbnQ2NChOT1RfRk9VTkRfVkFMVUUpCiAgICAvLyBhbmQgbGFiZWxfaWR4CiAgICAvLyAhPSBVSW50NjQoTk9UX0ZPVU5EX0tFWSksICAjIGtleSBjaGVjayByZWR1bmRhbnQsIGNoZWNrZWQgYWJvdmUKICAgIGJ6IHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Jvb2xfZmFsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIwNS0yMDYKICAgIC8vIGFuZCBsYWJlbF9pZHgKICAgIC8vICE9IFVJbnQ2NChOT1RfRk9VTkRfS0VZKSwgICMga2V5IGNoZWNrIHJlZHVuZGFudCwgY2hlY2tlZCBhYm92ZQogICAgZnJhbWVfZGlnIDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMDYKICAgIC8vICE9IFVJbnQ2NChOT1RfRk9VTkRfS0VZKSwgICMga2V5IGNoZWNrIHJlZHVuZGFudCwgY2hlY2tlZCBhYm92ZQogICAgaW50YyA1IC8vIDQyOTQ5NjcyOTYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMDUtMjA2CiAgICAvLyBhbmQgbGFiZWxfaWR4CiAgICAvLyAhPSBVSW50NjQoTk9UX0ZPVU5EX0tFWSksICAjIGtleSBjaGVjayByZWR1bmRhbnQsIGNoZWNrZWQgYWJvdmUKICAgICE9CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjA0LTIwNgogICAgLy8gbGFiZWxfaWR4ICE9IFVJbnQ2NChOT1RfRk9VTkRfVkFMVUUpCiAgICAvLyBhbmQgbGFiZWxfaWR4CiAgICAvLyAhPSBVSW50NjQoTk9UX0ZPVU5EX0tFWSksICAjIGtleSBjaGVjayByZWR1bmRhbnQsIGNoZWNrZWQgYWJvdmUKICAgIGJ6IHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Jvb2xfZmFsc2VAMwogICAgaW50Y18xIC8vIDEKCnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Jvb2xfbWVyZ2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MgogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYWZ0ZXJfaWZfZWxzZUAyNAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIwNwogICAgLy8gUygiRVJSOk5PRVhJU1QiKSwKICAgIGJ5dGVjXzIgLy8gIkVSUjpOT0VYSVNUIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQzCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDQKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMjQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjEwLTIxMQogICAgLy8gIyBlbnN1cmUgb25seSBlbXB0eSBsYWJlbHMgY2FuIGJlIGxlZnQgb3BlcmF0b3ItbGVzcwogICAgLy8gbGFiZWxfZGVzY3JpcHRvciA9IHNlbGYubGFiZWxzW2xhYmVsXS5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2dldAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBmcmFtZV9idXJ5IDAKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxhYmVscyBlbnRyeSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMTMKICAgIC8vIGxhYmVsX2Rlc2NyaXB0b3IubnVtX29wZXJhdG9ycyA+IDEgb3IgbGFiZWxfZGVzY3JpcHRvci5udW1fYXNzZXRzID09IDAsCiAgICBleHRyYWN0IDEyIDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBwdXNoYnl0ZXMgMHgwMDAwMDAwMDAwMDAwMDAxCiAgICBiPgogICAgYm56IHJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Jvb2xfdHJ1ZUA2CiAgICBmcmFtZV9kaWcgMAogICAgZXh0cmFjdCA0IDggLy8gb24gZXJyb3I6IEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBieXRlYyA0IC8vIDB4MDAwMDAwMDAwMDAwMDAwMAogICAgYj09CiAgICBieiByZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9ib29sX2ZhbHNlQDcKCnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Jvb2xfdHJ1ZUA2OgogICAgaW50Y18xIC8vIDEKCnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2Jvb2xfbWVyZ2VAODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MgogICAgLy8gaWYgbm90IGNvbmQ6CiAgICBibnogcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYWZ0ZXJfaWZfZWxzZUAyMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIxNAogICAgLy8gUygiRVJSOk5PRU1QVFkiKSwKICAgIGJ5dGVjIDggLy8gIkVSUjpOT0VNUFRZIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQzCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDQKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCnJlbW92ZV9vcGVyYXRvcl9mcm9tX2xhYmVsX2FmdGVyX2lmX2Vsc2VAMjA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjE4CiAgICAvLyBsYWJlbF9kZXNjcmlwdG9yLm51bV9vcGVyYXRvcnMubmF0aXZlIC0gVUludDY0KDEpCiAgICBmcmFtZV9kaWcgMAogICAgZHVwCiAgICBwdXNoaW50IDEyIC8vIDEyCiAgICBleHRyYWN0X3VpbnQ2NAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMTYtMjE5CiAgICAvLyAjIGRlY3Igb3BlcmF0b3IgY291bnQKICAgIC8vIGxhYmVsX2Rlc2NyaXB0b3IubnVtX29wZXJhdG9ycyA9IGFyYzQuVUludDY0KAogICAgLy8gICAgIGxhYmVsX2Rlc2NyaXB0b3IubnVtX29wZXJhdG9ycy5uYXRpdmUgLSBVSW50NjQoMSkKICAgIC8vICkKICAgIGl0b2IKICAgIHJlcGxhY2UyIDEyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjIwCiAgICAvLyBzZWxmLmxhYmVsc1tsYWJlbF0gPSBsYWJlbF9kZXNjcmlwdG9yLmNvcHkoKQogICAgZnJhbWVfZGlnIC0xCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGZyYW1lX2RpZyAtMQogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIyMgogICAgLy8gaWYgc2VsZi5vcGVyYXRvcnNbb3BlcmF0b3JdLmxlbmd0aCA9PSAxOgogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5vcGVyYXRvcnMgZW50cnkgZXhpc3RzCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYnogcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfZWxzZV9ib2R5QDEwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjIzCiAgICAvLyBkZWwgc2VsZi5vcGVyYXRvcnNbb3BlcmF0b3JdCiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9kZWwKICAgIHBvcAogICAgcmV0c3ViCgpyZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9lbHNlX2JvZHlAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjI1CiAgICAvLyBuZXh0X2xpc3QgPSBhcmM0LkR5bmFtaWNBcnJheVthcmM0LlN0cmluZ10oKQogICAgYnl0ZWNfMyAvLyAweDAwMDAKICAgIGZyYW1lX2J1cnkgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIyNi0yMjkKICAgIC8vICMgd2FsaywgcHVzaCBldmVyeXRoaW5nIGV4Y2VwdCBpbmRleAogICAgLy8gIyB0aGlzIGltcGxlbWVudGF0aW9uIHdhbGtzIHR3aWNlIChvbmNlIGluIGdldF9vcGVyYXRvcl9sYWJlbF9pbmRleCkKICAgIC8vICMgY291bGQgYmUgbW9yZSBlZmZpY2llbnQKICAgIC8vIGZvciBpZHgsIHN0b3JlZF9sYWJlbCBpbiB1ZW51bWVyYXRlKHNlbGYub3BlcmF0b3JzW29wZXJhdG9yXSk6CiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgZnJhbWVfYnVyeSAxCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5vcGVyYXRvcnMgZW50cnkgZXhpc3RzCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGZyYW1lX2J1cnkgNQogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2J1cnkgNgoKcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfZm9yX2hlYWRlckAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMjYtMjI5CiAgICAvLyAjIHdhbGssIHB1c2ggZXZlcnl0aGluZyBleGNlcHQgaW5kZXgKICAgIC8vICMgdGhpcyBpbXBsZW1lbnRhdGlvbiB3YWxrcyB0d2ljZSAob25jZSBpbiBnZXRfb3BlcmF0b3JfbGFiZWxfaW5kZXgpCiAgICAvLyAjIGNvdWxkIGJlIG1vcmUgZWZmaWNpZW50CiAgICAvLyBmb3IgaWR4LCBzdG9yZWRfbGFiZWwgaW4gdWVudW1lcmF0ZShzZWxmLm9wZXJhdG9yc1tvcGVyYXRvcl0pOgogICAgZnJhbWVfZGlnIDYKICAgIGZyYW1lX2RpZyA1CiAgICA8CiAgICBieiByZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9hZnRlcl9mb3JAMTYKICAgIGZyYW1lX2RpZyAxCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDYKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGRpZyAxCiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwMgogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBleHRyYWN0MwogICAgZnJhbWVfYnVyeSA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjMwCiAgICAvLyBpZiBsYWJlbF9pZHggIT0gaWR4OgogICAgZnJhbWVfZGlnIDcKICAgICE9CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfYnVyeSAzCiAgICBieiByZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9hZnRlcl9pZl9lbHNlQDE0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjMxCiAgICAvLyBuZXh0X2xpc3QuYXBwZW5kKHN0b3JlZF9sYWJlbCkKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgNAogICAgaW50Y18xIC8vIDEKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZAogICAgZnJhbWVfYnVyeSAzCgpyZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9hZnRlcl9pZl9lbHNlQDE0OgogICAgZnJhbWVfZGlnIDMKICAgIGZyYW1lX2J1cnkgMgogICAgZnJhbWVfZGlnIDYKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDYKICAgIGIgcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfZm9yX2hlYWRlckAxMQoKcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYWZ0ZXJfZm9yQDE2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIzMwogICAgLy8gc2VsZi5vcGVyYXRvcnNbb3BlcmF0b3JdID0gbmV4dF9saXN0LmNvcHkoKQogICAgZnJhbWVfZGlnIC0yCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIDIKICAgIGJveF9wdXQKICAgIHJldHN1YgoKcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYm9vbF9mYWxzZUA3OgogICAgaW50Y18wIC8vIDAKICAgIGIgcmVtb3ZlX29wZXJhdG9yX2Zyb21fbGFiZWxfYm9vbF9tZXJnZUA4CgpyZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9ib29sX2ZhbHNlQDM6CiAgICBpbnRjXzAgLy8gMAogICAgYiByZW1vdmVfb3BlcmF0b3JfZnJvbV9sYWJlbF9ib29sX21lcmdlQDQKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5nZXRfb3BlcmF0b3JfbGFiZWxzKG9wZXJhdG9yOiBieXRlcykgLT4gYnl0ZXM6CmdldF9vcGVyYXRvcl9sYWJlbHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjM1LTIzNgogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgLy8gZGVmIGdldF9vcGVyYXRvcl9sYWJlbHMoc2VsZiwgb3BlcmF0b3I6IEFjY291bnQpIC0+IExhYmVsTGlzdDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIzNwogICAgLy8gaWYgb3BlcmF0b3IgaW4gc2VsZi5vcGVyYXRvcnM6CiAgICBmcmFtZV9kaWcgLTEKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYnogZ2V0X29wZXJhdG9yX2xhYmVsc19hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyMzgKICAgIC8vIHJldHVybiBzZWxmLm9wZXJhdG9yc1tvcGVyYXRvcl0KICAgIGZyYW1lX2RpZyAtMQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYub3BlcmF0b3JzIGVudHJ5IGV4aXN0cwogICAgcmV0c3ViCgpnZXRfb3BlcmF0b3JfbGFiZWxzX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0OQogICAgLy8gcmV0dXJuIGFyYzQuRHluYW1pY0FycmF5W2FyYzQuU3RyaW5nXSgpCiAgICBieXRlY18zIC8vIDB4MDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjIzOS0yNDAKICAgIC8vICMgcmV0dXJuIGVtcHR5IGxpc3QKICAgIC8vIHJldHVybiBlbXB0eV9saXN0KCkKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9hc3NldF9sYWJlbF9pbmRleChhc3NldDogdWludDY0LCBsYWJlbDogYnl0ZXMpIC0+IHVpbnQ2NDoKZ2V0X2Fzc2V0X2xhYmVsX2luZGV4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI0Mi0yNDMKICAgIC8vIEBzdWJyb3V0aW5lCiAgICAvLyBkZWYgZ2V0X2Fzc2V0X2xhYmVsX2luZGV4KHNlbGYsIGFzc2V0OiBBc3NldCwgbGFiZWw6IFN0cmluZykgLT4gVUludDY0OgogICAgcHJvdG8gMiAxCiAgICBpbnRjXzAgLy8gMAogICAgZHVwCiAgICBieXRlY18xIC8vICIiCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNDQKICAgIC8vIGVuc3VyZShsYWJlbC5ieXRlcy5sZW5ndGggPT0gMiwgUygiRVJSOkxFTkdUSCIpKQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMiAvLyAyCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJueiBnZXRfYXNzZXRfbGFiZWxfaW5kZXhfYWZ0ZXJfaWZfZWxzZUAxMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI0NAogICAgLy8gZW5zdXJlKGxhYmVsLmJ5dGVzLmxlbmd0aCA9PSAyLCBTKCJFUlI6TEVOR1RIIikpCiAgICBieXRlYyA2IC8vICJFUlI6TEVOR1RIIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQzCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDQKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCmdldF9hc3NldF9sYWJlbF9pbmRleF9hZnRlcl9pZl9lbHNlQDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI0NQogICAgLy8gaWYgYXNzZXQgbm90IGluIHNlbGYuYXNzZXRzOgogICAgZnJhbWVfZGlnIC0yCiAgICBpdG9iCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMQogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBibnogZ2V0X2Fzc2V0X2xhYmVsX2luZGV4X2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI0NgogICAgLy8gcmV0dXJuIFVJbnQ2NChOT1RfRk9VTkRfS0VZKQogICAgaW50YyA1IC8vIDQyOTQ5NjcyOTYKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpnZXRfYXNzZXRfbGFiZWxfaW5kZXhfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI0NwogICAgLy8gZm9yIGlkeCwgc3RvcmVkX2xhYmVsIGluIHVlbnVtZXJhdGUoc2VsZi5hc3NldHNbYXNzZXRdKToKICAgIGZyYW1lX2RpZyAxCiAgICBib3hfZ2V0CiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGZyYW1lX2J1cnkgMAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRzIGVudHJ5IGV4aXN0cwogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBmcmFtZV9idXJ5IDIKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9idXJ5IDMKCmdldF9hc3NldF9sYWJlbF9pbmRleF9mb3JfaGVhZGVyQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjQ3CiAgICAvLyBmb3IgaWR4LCBzdG9yZWRfbGFiZWwgaW4gdWVudW1lcmF0ZShzZWxmLmFzc2V0c1thc3NldF0pOgogICAgZnJhbWVfZGlnIDMKICAgIGZyYW1lX2RpZyAyCiAgICA8CiAgICBieiBnZXRfYXNzZXRfbGFiZWxfaW5kZXhfYWZ0ZXJfZm9yQDgKICAgIGZyYW1lX2RpZyAwCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDMKICAgIGludGNfMiAvLyAyCiAgICAqCiAgICBkaWcgMQogICAgc3dhcAogICAgZXh0cmFjdF91aW50MTYKICAgIGR1cDIKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZXh0cmFjdDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNDgKICAgIC8vIGlmIHN0b3JlZF9sYWJlbCA9PSBsYWJlbDoKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgLTEKICAgID09CiAgICBieiBnZXRfYXNzZXRfbGFiZWxfaW5kZXhfYWZ0ZXJfaWZfZWxzZUA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjQ5CiAgICAvLyByZXR1cm4gaWR4CiAgICBmcmFtZV9kaWcgMwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmdldF9hc3NldF9sYWJlbF9pbmRleF9hZnRlcl9pZl9lbHNlQDY6CiAgICBmcmFtZV9kaWcgMwogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMwogICAgYiBnZXRfYXNzZXRfbGFiZWxfaW5kZXhfZm9yX2hlYWRlckAzCgpnZXRfYXNzZXRfbGFiZWxfaW5kZXhfYWZ0ZXJfZm9yQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjUwCiAgICAvLyByZXR1cm4gVUludDY0KE5PVF9GT1VORF9WQUxVRSkKICAgIGludGMgNCAvLyA0Mjk0OTY3Mjk1CiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLl9hZGRfbGFiZWxfdG9fYXNzZXQobGFiZWw6IGJ5dGVzLCBhc3NldDogdWludDY0KSAtPiB2b2lkOgpfYWRkX2xhYmVsX3RvX2Fzc2V0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI1Mi0yNTMKICAgIC8vIEBzdWJyb3V0aW5lCiAgICAvLyBkZWYgX2FkZF9sYWJlbF90b19hc3NldChzZWxmLCBsYWJlbDogU3RyaW5nLCBhc3NldDogQXNzZXQpIC0+IE5vbmU6CiAgICBwcm90byAyIDAKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTkKICAgIC8vIF92LCBleGlzdHMgPSBvcC5Bc3NldFBhcmFtc0dldC5hc3NldF9jcmVhdG9yKGFzc2V0X2lkKQogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IF9hZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI1NAogICAgLy8gZW5zdXJlKG5vdCBhc3NldF9pc19kZWxldGVkKGFzc2V0LmlkKSwgUygiRVJSOk5PRVhJU1QiKSkKICAgIGJ5dGVjXzIgLy8gIkVSUjpOT0VYSVNUIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQzCiAgICAvLyBsb2cobXNnKQogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDQKICAgIC8vIG9wLmVycigpCiAgICBlcnIKCl9hZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNTUKICAgIC8vIGVuc3VyZShsYWJlbCBpbiBzZWxmLmxhYmVscywgUygiRVJSOk5PRVhJU1QiKSkKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIKICAgIC8vIGlmIG5vdCBjb25kOgogICAgYm56IF9hZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxNgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI1NQogICAgLy8gZW5zdXJlKGxhYmVsIGluIHNlbGYubGFiZWxzLCBTKCJFUlI6Tk9FWElTVCIpKQogICAgYnl0ZWNfMiAvLyAiRVJSOk5PRVhJU1QiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDMKICAgIC8vIGxvZyhtc2cpCiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0NAogICAgLy8gb3AuZXJyKCkKICAgIGVycgoKX2FkZF9sYWJlbF90b19hc3NldF9hZnRlcl9pZl9lbHNlQDE2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI1NgogICAgLy8gaWYgYXNzZXQgaW4gc2VsZi5hc3NldHM6CiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJ6IF9hZGRfbGFiZWxfdG9fYXNzZXRfZWxzZV9ib2R5QDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNTkKICAgIC8vIHNlbGYuZ2V0X2Fzc2V0X2xhYmVsX2luZGV4KGFzc2V0LCBsYWJlbCkgPT0gVUludDY0KE5PVF9GT1VORF9WQUxVRSksCiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2RpZyAtMgogICAgY2FsbHN1YiBnZXRfYXNzZXRfbGFiZWxfaW5kZXgKICAgIGludGMgNCAvLyA0Mjk0OTY3Mjk1CiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJueiBfYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2lmX2Vsc2VANgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI2MAogICAgLy8gUygiRVJSOkVYSVNUUyIpLAogICAgYnl0ZWMgNyAvLyAiRVJSOkVYSVNUUyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MwogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ0CiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgpfYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNjItMjYzCiAgICAvLyAjIGFkZCBsYWJlbCB0byBhc3NldAogICAgLy8gZXhpc3RpbmcgPSBzZWxmLmFzc2V0c1thc3NldF0uY29weSgpCiAgICBmcmFtZV9kaWcgMAogICAgZHVwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hc3NldHMgZW50cnkgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjY0CiAgICAvLyBleGlzdGluZy5hcHBlbmQoYXJjNC5TdHJpbmcobGFiZWwpKQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgaW50Y18xIC8vIDEKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI2NQogICAgLy8gc2VsZi5hc3NldHNbYXNzZXRdID0gZXhpc3RpbmcuY29weSgpCiAgICBkaWcgMQogICAgYm94X2RlbAogICAgcG9wCiAgICBib3hfcHV0CgpfYWRkX2xhYmVsX3RvX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNzAtMjcxCiAgICAvLyAjIGluY3IgYXNzZXQgY291bnQKICAgIC8vIGxhYmVsX2Rlc2NyaXB0b3IgPSBzZWxmLmxhYmVsc1tsYWJlbF0uY29weSgpCiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmxhYmVscyBlbnRyeSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNzMKICAgIC8vIGxhYmVsX2Rlc2NyaXB0b3IubnVtX2Fzc2V0cy5uYXRpdmUgKyBVSW50NjQoMSkKICAgIGR1cAogICAgcHVzaGludCA0IC8vIDQKICAgIGV4dHJhY3RfdWludDY0CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI3Mi0yNzQKICAgIC8vIGxhYmVsX2Rlc2NyaXB0b3IubnVtX2Fzc2V0cyA9IGFyYzQuVUludDY0KAogICAgLy8gICAgIGxhYmVsX2Rlc2NyaXB0b3IubnVtX2Fzc2V0cy5uYXRpdmUgKyBVSW50NjQoMSkKICAgIC8vICkKICAgIGl0b2IKICAgIHJlcGxhY2UyIDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNzUKICAgIC8vIHNlbGYubGFiZWxzW2xhYmVsXSA9IGxhYmVsX2Rlc2NyaXB0b3IuY29weSgpCiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9kZWwKICAgIHBvcAogICAgZnJhbWVfZGlnIC0yCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICByZXRzdWIKCl9hZGRfbGFiZWxfdG9fYXNzZXRfZWxzZV9ib2R5QDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjY3LTI2OAogICAgLy8gIyBuZXcgYXNzZXQsIGNyZWF0ZSBuZXcgYm94CiAgICAvLyBzZWxmLmFzc2V0c1thc3NldF0gPSBhcmM0LkR5bmFtaWNBcnJheShhcmM0LlN0cmluZyhsYWJlbCkpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBieXRlYyA5IC8vIDB4MDAwMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlYyAxMiAvLyAweDAwMDEKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDAKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICBiIF9hZGRfbGFiZWxfdG9fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAzCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuYWRkX2xhYmVsX3RvX2Fzc2V0KGxhYmVsOiBieXRlcywgYXNzZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKYWRkX2xhYmVsX3RvX2Fzc2V0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI3Ny0yNzgKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIGFkZF9sYWJlbF90b19hc3NldChzZWxmLCBsYWJlbDogU3RyaW5nLCBhc3NldDogQXNzZXQpIC0+IE5vbmU6CiAgICBwcm90byAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyNzkKICAgIC8vIHNlbGYub3BlcmF0b3Jfb25seShsYWJlbCkKICAgIGZyYW1lX2RpZyAtMgogICAgY2FsbHN1YiBvcGVyYXRvcl9vbmx5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjgwCiAgICAvLyBzZWxmLl9hZGRfbGFiZWxfdG9fYXNzZXQobGFiZWwsIGFzc2V0KQogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgX2FkZF9sYWJlbF90b19hc3NldAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuYWRkX2xhYmVsX3RvX2Fzc2V0cyhsYWJlbDogYnl0ZXMsIGFzc2V0czogYnl0ZXMpIC0+IHZvaWQ6CmFkZF9sYWJlbF90b19hc3NldHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjgyLTI4NQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBkZWYgYWRkX2xhYmVsX3RvX2Fzc2V0cygKICAgIC8vICAgICBzZWxmLCBsYWJlbDogU3RyaW5nLCBhc3NldHM6IGFyYzQuRHluYW1pY0FycmF5W2FyYzQuVUludDY0XQogICAgLy8gKSAtPiBOb25lOgogICAgcHJvdG8gMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mjg2CiAgICAvLyBzZWxmLm9wZXJhdG9yX29ubHkobGFiZWwpCiAgICBmcmFtZV9kaWcgLTIKICAgIGNhbGxzdWIgb3BlcmF0b3Jfb25seQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI4NwogICAgLy8gZm9yIF9pLCBhc3NldCBpbiB1ZW51bWVyYXRlKGFzc2V0cyk6CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18wIC8vIDAKCmFkZF9sYWJlbF90b19hc3NldHNfZm9yX2hlYWRlckAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI4NwogICAgLy8gZm9yIF9pLCBhc3NldCBpbiB1ZW51bWVyYXRlKGFzc2V0cyk6CiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfZGlnIDAKICAgIDwKICAgIGJ6IGFkZF9sYWJlbF90b19hc3NldHNfYWZ0ZXJfZm9yQDQKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mjg4CiAgICAvLyBzZWxmLl9hZGRfbGFiZWxfdG9fYXNzZXQobGFiZWwsIEFzc2V0KGFzc2V0Lm5hdGl2ZSkpCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZnJhbWVfZGlnIC0yCiAgICBzd2FwCiAgICBjYWxsc3ViIF9hZGRfbGFiZWxfdG9fYXNzZXQKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDEKICAgIGIgYWRkX2xhYmVsX3RvX2Fzc2V0c19mb3JfaGVhZGVyQDEKCmFkZF9sYWJlbF90b19hc3NldHNfYWZ0ZXJfZm9yQDQ6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5yZW1vdmVfbGFiZWxfZnJvbV9hc3NldChsYWJlbDogYnl0ZXMsIGFzc2V0OiB1aW50NjQpIC0+IHZvaWQ6CnJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI5MC0yOTEKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gZGVmIHJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0KHNlbGYsIGxhYmVsOiBTdHJpbmcsIGFzc2V0OiBBc3NldCkgLT4gTm9uZToKICAgIHByb3RvIDIgMAogICAgaW50Y18wIC8vIDAKICAgIGR1cG4gMwogICAgYnl0ZWNfMSAvLyAiIgogICAgZHVwbiAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjkyCiAgICAvLyBlbnN1cmUobGFiZWwgaW4gc2VsZi5sYWJlbHMsIFMoIkVSUjpOT0VYSVNUIikpCiAgICBmcmFtZV9kaWcgLTIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyCiAgICAvLyBpZiBub3QgY29uZDoKICAgIGJueiByZW1vdmVfbGFiZWxfZnJvbV9hc3NldF9hZnRlcl9pZl9lbHNlQDIwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MjkyCiAgICAvLyBlbnN1cmUobGFiZWwgaW4gc2VsZi5sYWJlbHMsIFMoIkVSUjpOT0VYSVNUIikpCiAgICBieXRlY18yIC8vICJFUlI6Tk9FWElTVCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MwogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ0CiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgpyZW1vdmVfbGFiZWxfZnJvbV9hc3NldF9hZnRlcl9pZl9lbHNlQDIwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI5NAogICAgLy8gc2VsZi5vcGVyYXRvcl9vbmx5KGxhYmVsKQogICAgZnJhbWVfZGlnIC0yCiAgICBjYWxsc3ViIG9wZXJhdG9yX29ubHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyOTYKICAgIC8vIGZvdW5kID0gRmFsc2UKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9idXJ5IDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weToyOTcKICAgIC8vIGlmIHNlbGYuYXNzZXRzW2Fzc2V0XS5sZW5ndGggPT0gMToKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgZHVwCiAgICBmcmFtZV9idXJ5IDMKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2V0cyBlbnRyeSBleGlzdHMKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBieiByZW1vdmVfbGFiZWxfZnJvbV9hc3NldF9lbHNlX2JvZHlANQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjI5OAogICAgLy8gaWYgc2VsZi5hc3NldHNbYXNzZXRdWzBdID09IGxhYmVsOgogICAgZnJhbWVfZGlnIDMKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2V0cyBlbnRyeSBleGlzdHMKICAgIGR1cAogICAgZXh0cmFjdCAyIDAKICAgIHN3YXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgYXNzZXJ0IC8vIEluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwMgogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBleHRyYWN0MwogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAtMgogICAgPT0KICAgIGJ6IHJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2Vsc2VfYm9keUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mjk5CiAgICAvLyBkZWwgc2VsZi5hc3NldHNbYXNzZXRdCiAgICBmcmFtZV9kaWcgMwogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzAwCiAgICAvLyBmb3VuZCA9IFRydWUKICAgIGludGNfMSAvLyAxCiAgICBmcmFtZV9idXJ5IDYKCnJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMTM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIKICAgIC8vIGlmIG5vdCBjb25kOgogICAgZnJhbWVfZGlnIDYKICAgIGJueiByZW1vdmVfbGFiZWxfZnJvbV9hc3NldF9hZnRlcl9pZl9lbHNlQDE2CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzE1CiAgICAvLyBlbnN1cmUoZm91bmQsIFMoIkVSUjpOT0VYSVNUIikpCiAgICBieXRlY18yIC8vICJFUlI6Tk9FWElTVCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MwogICAgLy8gbG9nKG1zZykKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ0CiAgICAvLyBvcC5lcnIoKQogICAgZXJyCgpyZW1vdmVfbGFiZWxfZnJvbV9hc3NldF9hZnRlcl9pZl9lbHNlQDE2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjMxNy0zMTgKICAgIC8vICMgZGVjciBhc3NldCBjb3VudAogICAgLy8gbGFiZWxfZGVzY3JpcHRvciA9IHNlbGYubGFiZWxzW2xhYmVsXS5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYubGFiZWxzIGVudHJ5IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjMyMAogICAgLy8gbGFiZWxfZGVzY3JpcHRvci5udW1fYXNzZXRzLm5hdGl2ZSAtIFVJbnQ2NCgxKQogICAgZHVwCiAgICBwdXNoaW50IDQgLy8gNAogICAgZXh0cmFjdF91aW50NjQKICAgIGludGNfMSAvLyAxCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzE5LTMyMQogICAgLy8gbGFiZWxfZGVzY3JpcHRvci5udW1fYXNzZXRzID0gYXJjNC5VSW50NjQoCiAgICAvLyAgICAgbGFiZWxfZGVzY3JpcHRvci5udW1fYXNzZXRzLm5hdGl2ZSAtIFVJbnQ2NCgxKQogICAgLy8gKQogICAgaXRvYgogICAgcmVwbGFjZTIgNAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjMyMgogICAgLy8gc2VsZi5sYWJlbHNbbGFiZWxdID0gbGFiZWxfZGVzY3JpcHRvci5jb3B5KCkKICAgIGZyYW1lX2RpZyAtMgogICAgYm94X2RlbAogICAgcG9wCiAgICBmcmFtZV9kaWcgLTIKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIHJldHN1YgoKcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfZWxzZV9ib2R5QDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzAyCiAgICAvLyBmb3VuZCA9IEZhbHNlCiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSA2CiAgICBiIHJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2FmdGVyX2lmX2Vsc2VAMTMKCnJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2Vsc2VfYm9keUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjMwNAogICAgLy8gbmV4dF9saXN0ID0gYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5TdHJpbmddKCkKICAgIGJ5dGVjXzMgLy8gMHgwMDAwCiAgICBmcmFtZV9idXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozMDUtMzA3CiAgICAvLyAjIHdhbGssIHB1c2ggZXZlcnl0aGluZyB0byBuZXcgYm94IGV4Y2VwdCBsYWJlbAogICAgLy8gIyBzYXZlICRmb3VuZCB0byB0aHJvdyBpZiBub3QgZm91bmQKICAgIC8vIGZvciBfaWR4LCBzdG9yZWRfbGFiZWwgaW4gdWVudW1lcmF0ZShzZWxmLmFzc2V0c1thc3NldF0pOgogICAgZnJhbWVfZGlnIDMKICAgIGJveF9nZXQKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgZnJhbWVfYnVyeSAwCiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hc3NldHMgZW50cnkgZXhpc3RzCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGZyYW1lX2J1cnkgNQogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2J1cnkgNAoKcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfZm9yX2hlYWRlckA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjMwNS0zMDcKICAgIC8vICMgd2FsaywgcHVzaCBldmVyeXRoaW5nIHRvIG5ldyBib3ggZXhjZXB0IGxhYmVsCiAgICAvLyAjIHNhdmUgJGZvdW5kIHRvIHRocm93IGlmIG5vdCBmb3VuZAogICAgLy8gZm9yIF9pZHgsIHN0b3JlZF9sYWJlbCBpbiB1ZW51bWVyYXRlKHNlbGYuYXNzZXRzW2Fzc2V0XSk6CiAgICBmcmFtZV9kaWcgNAogICAgZnJhbWVfZGlnIDUKICAgIDwKICAgIGJ6IHJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2FmdGVyX2ZvckAxMgogICAgZnJhbWVfZGlnIDAKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgNAogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGRpZyAxCiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwMgogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBleHRyYWN0MwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozMDgKICAgIC8vIGlmIHN0b3JlZF9sYWJlbCAhPSBsYWJlbDoKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgLTIKICAgICE9CiAgICBieiByZW1vdmVfbGFiZWxfZnJvbV9hc3NldF9lbHNlX2JvZHlAOQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjMwOQogICAgLy8gbmV4dF9saXN0LmFwcGVuZChzdG9yZWRfbGFiZWwpCiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfZGlnIDIKICAgIGludGNfMSAvLyAxCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2J5dGVfbGVuZ3RoX2hlYWQKICAgIGZyYW1lX2J1cnkgMQoKcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxMDoKICAgIGZyYW1lX2RpZyA0CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSA0CiAgICBiIHJlbW92ZV9sYWJlbF9mcm9tX2Fzc2V0X2Zvcl9oZWFkZXJANgoKcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfZWxzZV9ib2R5QDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzExCiAgICAvLyBmb3VuZCA9IFRydWUKICAgIGludGNfMSAvLyAxCiAgICBmcmFtZV9idXJ5IDYKICAgIGIgcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfYWZ0ZXJfaWZfZWxzZUAxMAoKcmVtb3ZlX2xhYmVsX2Zyb21fYXNzZXRfYWZ0ZXJfZm9yQDEyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjMxMwogICAgLy8gc2VsZi5hc3NldHNbYXNzZXRdID0gbmV4dF9saXN0LmNvcHkoKQogICAgZnJhbWVfZGlnIDMKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICBmcmFtZV9kaWcgMQogICAgYm94X3B1dAogICAgYiByZW1vdmVfbGFiZWxfZnJvbV9hc3NldF9hZnRlcl9pZl9lbHNlQDEzCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuaGFzX2Fzc2V0X2xhYmVsKGFzc2V0X2lkOiB1aW50NjQsIGxhYmVsOiBieXRlcykgLT4gdWludDY0OgpoYXNfYXNzZXRfbGFiZWw6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzI0LTMyNQogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgLy8gZGVmIGhhc19hc3NldF9sYWJlbChzZWxmLCBhc3NldF9pZDogVUludDY0LCBsYWJlbDogU3RyaW5nKSAtPiBVSW50NjQ6CiAgICBwcm90byAyIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozMjcKICAgIC8vIGlkeCA9IHNlbGYuZ2V0X2Fzc2V0X2xhYmVsX2luZGV4KGFzc2V0LCBsYWJlbCkKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIGdldF9hc3NldF9sYWJlbF9pbmRleAogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzI4CiAgICAvLyBpZiBpZHggIT0gTk9UX0ZPVU5EX0tFWSBhbmQgaWR4ICE9IE5PVF9GT1VORF9WQUxVRToKICAgIGludGMgNSAvLyA0Mjk0OTY3Mjk2CiAgICAhPQogICAgYnogaGFzX2Fzc2V0X2xhYmVsX2FmdGVyX2lmX2Vsc2VAMwogICAgZnJhbWVfZGlnIDAKICAgIGludGMgNCAvLyA0Mjk0OTY3Mjk1CiAgICAhPQogICAgYnogaGFzX2Fzc2V0X2xhYmVsX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjMyOQogICAgLy8gcmV0dXJuIFVJbnQ2NCgxKQogICAgaW50Y18xIC8vIDEKICAgIHN3YXAKICAgIHJldHN1YgoKaGFzX2Fzc2V0X2xhYmVsX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozMzAKICAgIC8vIHJldHVybiBVSW50NjQoMCkKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5nZXRfYXNzZXRfbGFiZWxzKGFzc2V0OiB1aW50NjQpIC0+IGJ5dGVzOgpnZXRfYXNzZXRfbGFiZWxzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjMzMi0zMzMKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfYXNzZXRfbGFiZWxzKHNlbGYsIGFzc2V0OiBBc3NldCkgLT4gTGFiZWxMaXN0OgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzM0CiAgICAvLyBpZiBhc3NldCBpbiBzZWxmLmFzc2V0czoKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJ6IGdldF9hc3NldF9sYWJlbHNfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzM1CiAgICAvLyByZXR1cm4gc2VsZi5hc3NldHNbYXNzZXRdCiAgICBmcmFtZV9kaWcgMAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRzIGVudHJ5IGV4aXN0cwogICAgc3dhcAogICAgcmV0c3ViCgpnZXRfYXNzZXRfbGFiZWxzX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0OQogICAgLy8gcmV0dXJuIGFyYzQuRHluYW1pY0FycmF5W2FyYzQuU3RyaW5nXSgpCiAgICBieXRlY18zIC8vIDB4MDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjMzNi0zMzcKICAgIC8vICMgcmV0dXJuIGVtcHR5CiAgICAvLyByZXR1cm4gZW1wdHlfbGlzdCgpCiAgICBzd2FwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5nZXRfYXNzZXRzX2xhYmVscyhhc3NldHM6IGJ5dGVzKSAtPiBieXRlczoKZ2V0X2Fzc2V0c19sYWJlbHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzM5LTM0MgogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgLy8gZGVmIGdldF9hc3NldHNfbGFiZWxzKAogICAgLy8gICAgIHNlbGYsIGFzc2V0czogYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5VSW50NjRdCiAgICAvLyApIC0+IGFyYzQuRHluYW1pY0FycmF5W0xhYmVsTGlzdF06CiAgICBwcm90byAxIDEKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzQzCiAgICAvLyBvdXQgPSBhcmM0LkR5bmFtaWNBcnJheVtMYWJlbExpc3RdKCkKICAgIGJ5dGVjXzMgLy8gMHgwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzQ0CiAgICAvLyBmb3IgX2ksIGFzc2V0X2lkIGluIHVlbnVtZXJhdGUoYXNzZXRzKToKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzAgLy8gMAoKZ2V0X2Fzc2V0c19sYWJlbHNfZm9yX2hlYWRlckAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM0NAogICAgLy8gZm9yIF9pLCBhc3NldF9pZCBpbiB1ZW51bWVyYXRlKGFzc2V0cyk6CiAgICBmcmFtZV9kaWcgMwogICAgZnJhbWVfZGlnIDIKICAgIDwKICAgIGJ6IGdldF9hc3NldHNfbGFiZWxzX2FmdGVyX2ZvckA3CiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgMwogICAgaW50Y18zIC8vIDgKICAgICoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNDUKICAgIC8vIGFzc2V0ID0gQXNzZXQoYXNzZXRfaWQubmF0aXZlKQogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNDYKICAgIC8vIGlmIGFzc2V0IGluIHNlbGYuYXNzZXRzOgogICAgaXRvYgogICAgZHVwCiAgICBmcmFtZV9idXJ5IDAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYnogZ2V0X2Fzc2V0c19sYWJlbHNfZWxzZV9ib2R5QDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNDcKICAgIC8vIG91dC5hcHBlbmQoc2VsZi5hc3NldHNbYXNzZXRdLmNvcHkoKSkKICAgIGZyYW1lX2RpZyAwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hc3NldHMgZW50cnkgZXhpc3RzCiAgICBieXRlYyA5IC8vIDB4MDAwMgogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIHN3YXAKICAgIGV4dHJhY3QgMiAwCiAgICBpbnRjXzEgLy8gMQogICAgdW5jb3ZlciAzCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudAogICAgZnJhbWVfYnVyeSAxCgpnZXRfYXNzZXRzX2xhYmVsc19hZnRlcl9pZl9lbHNlQDU6CiAgICBmcmFtZV9kaWcgMwogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMwogICAgYiBnZXRfYXNzZXRzX2xhYmVsc19mb3JfaGVhZGVyQDEKCmdldF9hc3NldHNfbGFiZWxzX2Vsc2VfYm9keUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM0OQogICAgLy8gb3V0LmFwcGVuZChlbXB0eV9saXN0KCkpCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIHN3YXAKICAgIGV4dHJhY3QgMiAwCiAgICBpbnRjXzEgLy8gMQogICAgcHVzaGJ5dGVzIDB4MDAwMjAwMDAKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50CiAgICBmcmFtZV9idXJ5IDEKICAgIGIgZ2V0X2Fzc2V0c19sYWJlbHNfYWZ0ZXJfaWZfZWxzZUA1CgpnZXRfYXNzZXRzX2xhYmVsc19hZnRlcl9mb3JANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNTAKICAgIC8vIHJldHVybiBvdXQKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmxvZ19hc3NldHNfbGFiZWxzKGFzc2V0czogYnl0ZXMpIC0+IHZvaWQ6CmxvZ19hc3NldHNfbGFiZWxzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM1Mi0zNTMKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBsb2dfYXNzZXRzX2xhYmVscyhzZWxmLCBhc3NldHM6IGFyYzQuRHluYW1pY0FycmF5W2FyYzQuVUludDY0XSkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNTQKICAgIC8vIGZvciBfaSwgYXNzZXRfaWQgaW4gdWVudW1lcmF0ZShhc3NldHMpOgogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMCAvLyAwCgpsb2dfYXNzZXRzX2xhYmVsc19mb3JfaGVhZGVyQDE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzU0CiAgICAvLyBmb3IgX2ksIGFzc2V0X2lkIGluIHVlbnVtZXJhdGUoYXNzZXRzKToKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgMQogICAgPAogICAgYnogbG9nX2Fzc2V0c19sYWJlbHNfYWZ0ZXJfZm9yQDcKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAyCiAgICBpbnRjXzMgLy8gOAogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM1NQogICAgLy8gYXNzZXQgPSBBc3NldChhc3NldF9pZC5uYXRpdmUpCiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM1NgogICAgLy8gaWYgYXNzZXQgaW4gc2VsZi5hc3NldHM6CiAgICBpdG9iCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBsb2dfYXNzZXRzX2xhYmVsc19lbHNlX2JvZHlANAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM1NwogICAgLy8gbG9nKHNlbGYuYXNzZXRzW2Fzc2V0XSkKICAgIGZyYW1lX2RpZyAwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hc3NldHMgZW50cnkgZXhpc3RzCiAgICBsb2cKCmxvZ19hc3NldHNfbGFiZWxzX2FmdGVyX2lmX2Vsc2VANToKICAgIGZyYW1lX2RpZyAyCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAyCiAgICBiIGxvZ19hc3NldHNfbGFiZWxzX2Zvcl9oZWFkZXJAMQoKbG9nX2Fzc2V0c19sYWJlbHNfZWxzZV9ib2R5QDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDkKICAgIC8vIHJldHVybiBhcmM0LkR5bmFtaWNBcnJheVthcmM0LlN0cmluZ10oKQogICAgYnl0ZWNfMyAvLyAweDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNTkKICAgIC8vIGxvZyhlbXB0eV9saXN0KCkpCiAgICBsb2cKICAgIGIgbG9nX2Fzc2V0c19sYWJlbHNfYWZ0ZXJfaWZfZWxzZUA1Cgpsb2dfYXNzZXRzX2xhYmVsc19hZnRlcl9mb3JANzoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLl9nZXRfYXNzZXRfbWljcm8oYXNzZXRfaWQ6IHVpbnQ2NCkgLT4gYnl0ZXM6Cl9nZXRfYXNzZXRfbWljcm86CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzY3LTM2OAogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBfZ2V0X2Fzc2V0X21pY3JvKHNlbGYsIGFzc2V0X2lkOiBVSW50NjQpIC0+IEFzc2V0TWljcm86CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1OQogICAgLy8gX3YsIGV4aXN0cyA9IG9wLkFzc2V0UGFyYW1zR2V0LmFzc2V0X2NyZWF0b3IoYXNzZXRfaWQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozNjkKICAgIC8vIGlmIGFzc2V0X2lzX2RlbGV0ZWQoYXNzZXRfaWQpOgogICAgYm56IF9nZXRfYXNzZXRfbWljcm9fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzcwCiAgICAvLyByZXR1cm4gQXNzZXRNaWNyby5mcm9tX2J5dGVzKGIiIikKICAgIGJ5dGVjXzEgLy8gMHgKICAgIHJldHN1YgoKX2dldF9hc3NldF9taWNyb19hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzczCiAgICAvLyB1bml0X25hbWU9YjJzdHIoYXNzZXQudW5pdF9uYW1lKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFVuaXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzc0CiAgICAvLyBkZWNpbWFscz1hcmM0LlVJbnQ4KGFzc2V0LmRlY2ltYWxzKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldERlY2ltYWxzCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBpdG9iCiAgICBkdXAKICAgIGJpdGxlbgogICAgaW50Y18zIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGV4dHJhY3QgNyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzcyLTM3NQogICAgLy8gcmV0dXJuIEFzc2V0TWljcm8oCiAgICAvLyAgICAgdW5pdF9uYW1lPWIyc3RyKGFzc2V0LnVuaXRfbmFtZSksCiAgICAvLyAgICAgZGVjaW1hbHM9YXJjNC5VSW50OChhc3NldC5kZWNpbWFscyksCiAgICAvLyApCiAgICBwdXNoYnl0ZXMgMHgwMDAzCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0X21pY3JvKGFzc2V0OiB1aW50NjQpIC0+IGJ5dGVzOgpnZXRfYXNzZXRfbWljcm86CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzc3LTM3OAogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgLy8gZGVmIGdldF9hc3NldF9taWNybyhzZWxmLCBhc3NldDogVUludDY0KSAtPiBBc3NldE1pY3JvOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzc5CiAgICAvLyByZXR1cm4gc2VsZi5fZ2V0X2Fzc2V0X21pY3JvKGFzc2V0KQogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIF9nZXRfYXNzZXRfbWljcm8KICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9hc3NldHNfbWljcm8oYXNzZXRzOiBieXRlcykgLT4gdm9pZDoKZ2V0X2Fzc2V0c19taWNybzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozODEtMzgyCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICAvLyBkZWYgZ2V0X2Fzc2V0c19taWNybyhzZWxmLCBhc3NldHM6IGFyYzQuRHluYW1pY0FycmF5W2FyYzQuVUludDY0XSkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM4MwogICAgLy8gZm9yIF9pLCBhc3NldF9pZCBpbiB1ZW51bWVyYXRlKGFzc2V0cyk6CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18wIC8vIDAKCmdldF9hc3NldHNfbWljcm9fZm9yX2hlYWRlckAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM4MwogICAgLy8gZm9yIF9pLCBhc3NldF9pZCBpbiB1ZW51bWVyYXRlKGFzc2V0cyk6CiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfZGlnIDAKICAgIDwKICAgIGJ6IGdldF9hc3NldHNfbWljcm9fYWZ0ZXJfZm9yQDQKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzg0CiAgICAvLyBsb2coc2VsZi5fZ2V0X2Fzc2V0X21pY3JvKGFzc2V0X2lkLm5hdGl2ZSkpCiAgICBleHRyYWN0X3VpbnQ2NAogICAgY2FsbHN1YiBfZ2V0X2Fzc2V0X21pY3JvCiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDEKICAgIGIgZ2V0X2Fzc2V0c19taWNyb19mb3JfaGVhZGVyQDEKCmdldF9hc3NldHNfbWljcm9fYWZ0ZXJfZm9yQDQ6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5fZ2V0X2Fzc2V0X21pY3JvX2xhYmVscyhhc3NldF9pZDogdWludDY0KSAtPiBieXRlczoKX2dldF9hc3NldF9taWNyb19sYWJlbHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzg4LTM4OQogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBfZ2V0X2Fzc2V0X21pY3JvX2xhYmVscyhzZWxmLCBhc3NldF9pZDogVUludDY0KSAtPiBBc3NldE1pY3JvTGFiZWxzOgogICAgcHJvdG8gMSAxCiAgICBpbnRjXzAgLy8gMAogICAgZHVwbiAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTkKICAgIC8vIF92LCBleGlzdHMgPSBvcC5Bc3NldFBhcmFtc0dldC5hc3NldF9jcmVhdG9yKGFzc2V0X2lkKQogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6MzkwCiAgICAvLyBpZiBhc3NldF9pc19kZWxldGVkKGFzc2V0X2lkKToKICAgIGJueiBfZ2V0X2Fzc2V0X21pY3JvX2xhYmVsc19hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozOTEKICAgIC8vIHJldHVybiBBc3NldE1pY3JvTGFiZWxzLmZyb21fYnl0ZXMoYiIiKQogICAgYnl0ZWNfMSAvLyAweAogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCl9nZXRfYXNzZXRfbWljcm9fbGFiZWxzX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTozOTQKICAgIC8vIHVuaXRfbmFtZT1iMnN0cihhc3NldC51bml0X25hbWUpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0VW5pdE5hbWUKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIGNhbGxzdWIgYjJzdHIKICAgIGZyYW1lX2J1cnkgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM5NQogICAgLy8gZGVjaW1hbHM9YXJjNC5VSW50OChhc3NldC5kZWNpbWFscyksCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXREZWNpbWFscwogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgaXRvYgogICAgZHVwCiAgICBiaXRsZW4KICAgIGludGNfMyAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBleHRyYWN0IDcgMQogICAgZnJhbWVfYnVyeSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6Mzk2CiAgICAvLyBsYWJlbHM9c2VsZi5hc3NldHNbYXNzZXRdLmNvcHkoKSBpZiBhc3NldCBpbiBzZWxmLmFzc2V0cyBlbHNlIGVtcHR5X2xpc3QoKSwKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgZHVwCiAgICBmcmFtZV9idXJ5IDEKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYnogX2dldF9hc3NldF9taWNyb19sYWJlbHNfdGVybmFyeV9mYWxzZUA0CiAgICBmcmFtZV9kaWcgMQogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIGNoZWNrIHNlbGYuYXNzZXRzIGVudHJ5IGV4aXN0cwoKX2dldF9hc3NldF9taWNyb19sYWJlbHNfdGVybmFyeV9tZXJnZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM5My0zOTcKICAgIC8vIHJldHVybiBBc3NldE1pY3JvTGFiZWxzKAogICAgLy8gICAgIHVuaXRfbmFtZT1iMnN0cihhc3NldC51bml0X25hbWUpLAogICAgLy8gICAgIGRlY2ltYWxzPWFyYzQuVUludDgoYXNzZXQuZGVjaW1hbHMpLAogICAgLy8gICAgIGxhYmVscz1zZWxmLmFzc2V0c1thc3NldF0uY29weSgpIGlmIGFzc2V0IGluIHNlbGYuYXNzZXRzIGVsc2UgZW1wdHlfbGlzdCgpLAogICAgLy8gKQogICAgZnJhbWVfZGlnIDAKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDUgLy8gNQogICAgKwogICAgYnl0ZWMgMTMgLy8gMHgwMDA1CiAgICBmcmFtZV9kaWcgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCl9nZXRfYXNzZXRfbWljcm9fbGFiZWxzX3Rlcm5hcnlfZmFsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0OQogICAgLy8gcmV0dXJuIGFyYzQuRHluYW1pY0FycmF5W2FyYzQuU3RyaW5nXSgpCiAgICBieXRlY18zIC8vIDB4MDAwMAogICAgYiBfZ2V0X2Fzc2V0X21pY3JvX2xhYmVsc190ZXJuYXJ5X21lcmdlQDUKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5nZXRfYXNzZXRfbWljcm9fbGFiZWxzKGFzc2V0OiB1aW50NjQpIC0+IGJ5dGVzOgpnZXRfYXNzZXRfbWljcm9fbGFiZWxzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjM5OS00MDAKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfYXNzZXRfbWljcm9fbGFiZWxzKHNlbGYsIGFzc2V0OiBVSW50NjQpIC0+IEFzc2V0TWljcm9MYWJlbHM6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MDEKICAgIC8vIHJldHVybiBzZWxmLl9nZXRfYXNzZXRfbWljcm9fbGFiZWxzKGFzc2V0KQogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIF9nZXRfYXNzZXRfbWljcm9fbGFiZWxzCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5nZXRfYXNzZXRzX21pY3JvX2xhYmVscyhhc3NldHM6IGJ5dGVzKSAtPiB2b2lkOgpnZXRfYXNzZXRzX21pY3JvX2xhYmVsczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MDMtNDA0CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICAvLyBkZWYgZ2V0X2Fzc2V0c19taWNyb19sYWJlbHMoc2VsZiwgYXNzZXRzOiBhcmM0LkR5bmFtaWNBcnJheVthcmM0LlVJbnQ2NF0pIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MDUKICAgIC8vIGZvciBfaSwgYXNzZXRfaWQgaW4gdWVudW1lcmF0ZShhc3NldHMpOgogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMCAvLyAwCgpnZXRfYXNzZXRzX21pY3JvX2xhYmVsc19mb3JfaGVhZGVyQDE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDA1CiAgICAvLyBmb3IgX2ksIGFzc2V0X2lkIGluIHVlbnVtZXJhdGUoYXNzZXRzKToKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9kaWcgMAogICAgPAogICAgYnogZ2V0X2Fzc2V0c19taWNyb19sYWJlbHNfYWZ0ZXJfZm9yQDQKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDA2CiAgICAvLyBsb2coc2VsZi5fZ2V0X2Fzc2V0X21pY3JvX2xhYmVscyhhc3NldF9pZC5uYXRpdmUpKQogICAgZXh0cmFjdF91aW50NjQKICAgIGNhbGxzdWIgX2dldF9hc3NldF9taWNyb19sYWJlbHMKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMQogICAgYiBnZXRfYXNzZXRzX21pY3JvX2xhYmVsc19mb3JfaGVhZGVyQDEKCmdldF9hc3NldHNfbWljcm9fbGFiZWxzX2FmdGVyX2ZvckA0OgogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuX2dldF9hc3NldF90aW55KGFzc2V0X2lkOiB1aW50NjQpIC0+IGJ5dGVzOgpfZ2V0X2Fzc2V0X3Rpbnk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDEwLTQxMQogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBfZ2V0X2Fzc2V0X3Rpbnkoc2VsZiwgYXNzZXRfaWQ6IFVJbnQ2NCkgLT4gQXNzZXRUaW55OgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTkKICAgIC8vIF92LCBleGlzdHMgPSBvcC5Bc3NldFBhcmFtc0dldC5hc3NldF9jcmVhdG9yKGFzc2V0X2lkKQogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDEyCiAgICAvLyBpZiBhc3NldF9pc19kZWxldGVkKGFzc2V0X2lkKToKICAgIGJueiBfZ2V0X2Fzc2V0X3RpbnlfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDEzCiAgICAvLyByZXR1cm4gQXNzZXRUaW55LmZyb21fYnl0ZXMoYiIiKQogICAgYnl0ZWNfMSAvLyAweAogICAgcmV0c3ViCgpfZ2V0X2Fzc2V0X3RpbnlfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQxNgogICAgLy8gbmFtZT1iMnN0cihhc3NldC5uYW1lKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldE5hbWUKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIGNhbGxzdWIgYjJzdHIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MTcKICAgIC8vIHVuaXRfbmFtZT1iMnN0cihhc3NldC51bml0X25hbWUpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0VW5pdE5hbWUKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIGNhbGxzdWIgYjJzdHIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MTgKICAgIC8vIGRlY2ltYWxzPWFyYzQuVUludDgoYXNzZXQuZGVjaW1hbHMpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0RGVjaW1hbHMKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIGl0b2IKICAgIGR1cAogICAgYml0bGVuCiAgICBpbnRjXzMgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZXh0cmFjdCA3IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MTUtNDE5CiAgICAvLyByZXR1cm4gQXNzZXRUaW55KAogICAgLy8gICAgIG5hbWU9YjJzdHIoYXNzZXQubmFtZSksCiAgICAvLyAgICAgdW5pdF9uYW1lPWIyc3RyKGFzc2V0LnVuaXRfbmFtZSksCiAgICAvLyAgICAgZGVjaW1hbHM9YXJjNC5VSW50OChhc3NldC5kZWNpbWFscyksCiAgICAvLyApCiAgICBkaWcgMgogICAgbGVuCiAgICBwdXNoaW50IDUgLy8gNQogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGJ5dGVjIDEzIC8vIDB4MDAwNQogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9hc3NldF90aW55KGFzc2V0OiB1aW50NjQpIC0+IGJ5dGVzOgpnZXRfYXNzZXRfdGlueToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MjEtNDIyCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICAvLyBkZWYgZ2V0X2Fzc2V0X3Rpbnkoc2VsZiwgYXNzZXQ6IFVJbnQ2NCkgLT4gQXNzZXRUaW55OgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDIzCiAgICAvLyByZXR1cm4gc2VsZi5fZ2V0X2Fzc2V0X3RpbnkoYXNzZXQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgX2dldF9hc3NldF90aW55CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5nZXRfYXNzZXRzX3RpbnkoYXNzZXRzOiBieXRlcykgLT4gdm9pZDoKZ2V0X2Fzc2V0c190aW55OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyNS00MjYKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfYXNzZXRzX3Rpbnkoc2VsZiwgYXNzZXRzOiBhcmM0LkR5bmFtaWNBcnJheVthcmM0LlVJbnQ2NF0pIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MjcKICAgIC8vIGZvciBfaSwgYXNzZXRfaWQgaW4gdWVudW1lcmF0ZShhc3NldHMpOgogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMCAvLyAwCgpnZXRfYXNzZXRzX3RpbnlfZm9yX2hlYWRlckAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQyNwogICAgLy8gZm9yIF9pLCBhc3NldF9pZCBpbiB1ZW51bWVyYXRlKGFzc2V0cyk6CiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfZGlnIDAKICAgIDwKICAgIGJ6IGdldF9hc3NldHNfdGlueV9hZnRlcl9mb3JANAogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18zIC8vIDgKICAgICoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MjgKICAgIC8vIGxvZyhzZWxmLl9nZXRfYXNzZXRfdGlueShhc3NldF9pZC5uYXRpdmUpKQogICAgZXh0cmFjdF91aW50NjQKICAgIGNhbGxzdWIgX2dldF9hc3NldF90aW55CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDEKICAgIGIgZ2V0X2Fzc2V0c190aW55X2Zvcl9oZWFkZXJAMQoKZ2V0X2Fzc2V0c190aW55X2FmdGVyX2ZvckA0OgogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuX2dldF9hc3NldF90aW55X2xhYmVscyhhc3NldF9pZDogdWludDY0KSAtPiBieXRlczoKX2dldF9hc3NldF90aW55X2xhYmVsczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MzItNDMzCiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIF9nZXRfYXNzZXRfdGlueV9sYWJlbHMoc2VsZiwgYXNzZXRfaWQ6IFVJbnQ2NCkgLT4gQXNzZXRUaW55TGFiZWxzOgogICAgcHJvdG8gMSAxCiAgICBpbnRjXzAgLy8gMAogICAgZHVwbiAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTkKICAgIC8vIF92LCBleGlzdHMgPSBvcC5Bc3NldFBhcmFtc0dldC5hc3NldF9jcmVhdG9yKGFzc2V0X2lkKQogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDM0CiAgICAvLyBpZiBhc3NldF9pc19kZWxldGVkKGFzc2V0X2lkKToKICAgIGJueiBfZ2V0X2Fzc2V0X3RpbnlfbGFiZWxzX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQzNQogICAgLy8gcmV0dXJuIEFzc2V0VGlueUxhYmVscy5mcm9tX2J5dGVzKGIiIikKICAgIGJ5dGVjXzEgLy8gMHgKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpfZ2V0X2Fzc2V0X3RpbnlfbGFiZWxzX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MzgKICAgIC8vIG5hbWU9YjJzdHIoYXNzZXQubmFtZSksCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MzkKICAgIC8vIHVuaXRfbmFtZT1iMnN0cihhc3NldC51bml0X25hbWUpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0VW5pdE5hbWUKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIGNhbGxzdWIgYjJzdHIKICAgIGZyYW1lX2J1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ0MAogICAgLy8gZGVjaW1hbHM9YXJjNC5VSW50OChhc3NldC5kZWNpbWFscyksCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXREZWNpbWFscwogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgaXRvYgogICAgZHVwCiAgICBiaXRsZW4KICAgIGludGNfMyAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBleHRyYWN0IDcgMQogICAgZnJhbWVfYnVyeSAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDQxCiAgICAvLyBsYWJlbHM9c2VsZi5hc3NldHNbYXNzZXRdLmNvcHkoKSBpZiBhc3NldCBpbiBzZWxmLmFzc2V0cyBlbHNlIGVtcHR5X2xpc3QoKSwKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgZHVwCiAgICBmcmFtZV9idXJ5IDIKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYnogX2dldF9hc3NldF90aW55X2xhYmVsc190ZXJuYXJ5X2ZhbHNlQDQKICAgIGZyYW1lX2RpZyAyCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hc3NldHMgZW50cnkgZXhpc3RzCgpfZ2V0X2Fzc2V0X3RpbnlfbGFiZWxzX3Rlcm5hcnlfbWVyZ2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0MzctNDQyCiAgICAvLyByZXR1cm4gQXNzZXRUaW55TGFiZWxzKAogICAgLy8gICAgIG5hbWU9YjJzdHIoYXNzZXQubmFtZSksCiAgICAvLyAgICAgdW5pdF9uYW1lPWIyc3RyKGFzc2V0LnVuaXRfbmFtZSksCiAgICAvLyAgICAgZGVjaW1hbHM9YXJjNC5VSW50OChhc3NldC5kZWNpbWFscyksCiAgICAvLyAgICAgbGFiZWxzPXNlbGYuYXNzZXRzW2Fzc2V0XS5jb3B5KCkgaWYgYXNzZXQgaW4gc2VsZi5hc3NldHMgZWxzZSBlbXB0eV9saXN0KCksCiAgICAvLyApCiAgICBmcmFtZV9kaWcgMAogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgNyAvLyA3CiAgICArCiAgICBkdXAKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBwdXNoYnl0ZXMgMHgwMDA3CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGNvdmVyIDMKICAgIGxlbgogICAgdW5jb3ZlciAyCiAgICArCiAgICBzd2FwCiAgICBmcmFtZV9kaWcgMwogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpfZ2V0X2Fzc2V0X3RpbnlfbGFiZWxzX3Rlcm5hcnlfZmFsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0OQogICAgLy8gcmV0dXJuIGFyYzQuRHluYW1pY0FycmF5W2FyYzQuU3RyaW5nXSgpCiAgICBieXRlY18zIC8vIDB4MDAwMAogICAgYiBfZ2V0X2Fzc2V0X3RpbnlfbGFiZWxzX3Rlcm5hcnlfbWVyZ2VANQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9hc3NldF90aW55X2xhYmVscyhhc3NldDogdWludDY0KSAtPiBieXRlczoKZ2V0X2Fzc2V0X3RpbnlfbGFiZWxzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ0NC00NDUKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfYXNzZXRfdGlueV9sYWJlbHMoc2VsZiwgYXNzZXQ6IFVJbnQ2NCkgLT4gQXNzZXRUaW55TGFiZWxzOgogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDQ2CiAgICAvLyByZXR1cm4gc2VsZi5fZ2V0X2Fzc2V0X3RpbnlfbGFiZWxzKGFzc2V0KQogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIF9nZXRfYXNzZXRfdGlueV9sYWJlbHMKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9hc3NldHNfdGlueV9sYWJlbHMoYXNzZXRzOiBieXRlcykgLT4gdm9pZDoKZ2V0X2Fzc2V0c190aW55X2xhYmVsczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0NDgtNDQ5CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICAvLyBkZWYgZ2V0X2Fzc2V0c190aW55X2xhYmVscyhzZWxmLCBhc3NldHM6IGFyYzQuRHluYW1pY0FycmF5W2FyYzQuVUludDY0XSkgLT4gTm9uZToKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ1MAogICAgLy8gZm9yIF9pLCBhc3NldF9pZCBpbiB1ZW51bWVyYXRlKGFzc2V0cyk6CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18wIC8vIDAKCmdldF9hc3NldHNfdGlueV9sYWJlbHNfZm9yX2hlYWRlckAxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ1MAogICAgLy8gZm9yIF9pLCBhc3NldF9pZCBpbiB1ZW51bWVyYXRlKGFzc2V0cyk6CiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfZGlnIDAKICAgIDwKICAgIGJ6IGdldF9hc3NldHNfdGlueV9sYWJlbHNfYWZ0ZXJfZm9yQDQKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDUxCiAgICAvLyBsb2coc2VsZi5fZ2V0X2Fzc2V0X3RpbnlfbGFiZWxzKGFzc2V0X2lkLm5hdGl2ZSkpCiAgICBleHRyYWN0X3VpbnQ2NAogICAgY2FsbHN1YiBfZ2V0X2Fzc2V0X3RpbnlfbGFiZWxzCiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDEKICAgIGIgZ2V0X2Fzc2V0c190aW55X2xhYmVsc19mb3JfaGVhZGVyQDEKCmdldF9hc3NldHNfdGlueV9sYWJlbHNfYWZ0ZXJfZm9yQDQ6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5fZ2V0X2Fzc2V0X3RleHQoYXNzZXRfaWQ6IHVpbnQ2NCkgLT4gYnl0ZXM6Cl9nZXRfYXNzZXRfdGV4dDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0NTUtNDU2CiAgICAvLyBAc3Vicm91dGluZQogICAgLy8gZGVmIF9nZXRfYXNzZXRfdGV4dChzZWxmLCBhc3NldF9pZDogVUludDY0KSAtPiBBc3NldFRleHQ6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1OQogICAgLy8gX3YsIGV4aXN0cyA9IG9wLkFzc2V0UGFyYW1zR2V0LmFzc2V0X2NyZWF0b3IoYXNzZXRfaWQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0NTcKICAgIC8vIGlmIGFzc2V0X2lzX2RlbGV0ZWQoYXNzZXRfaWQpOgogICAgYm56IF9nZXRfYXNzZXRfdGV4dF9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0NTgKICAgIC8vIHJldHVybiBBc3NldFRleHQuZnJvbV9ieXRlcyhiIiIpCiAgICBieXRlY18xIC8vIDB4CiAgICByZXRzdWIKCl9nZXRfYXNzZXRfdGV4dF9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDYxCiAgICAvLyBuYW1lPWIyc3RyKGFzc2V0Lm5hbWUpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0TmFtZQogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgY2FsbHN1YiBiMnN0cgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ2MgogICAgLy8gdW5pdF9uYW1lPWIyc3RyKGFzc2V0LnVuaXRfbmFtZSksCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRVbml0TmFtZQogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgY2FsbHN1YiBiMnN0cgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ2MwogICAgLy8gdXJsPWIyc3RyKGFzc2V0LnVybCksCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRVUkwKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIGNhbGxzdWIgYjJzdHIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0NjAtNDY0CiAgICAvLyByZXR1cm4gQXNzZXRUZXh0KAogICAgLy8gICAgIG5hbWU9YjJzdHIoYXNzZXQubmFtZSksCiAgICAvLyAgICAgdW5pdF9uYW1lPWIyc3RyKGFzc2V0LnVuaXRfbmFtZSksCiAgICAvLyAgICAgdXJsPWIyc3RyKGFzc2V0LnVybCksCiAgICAvLyApCiAgICBkaWcgMgogICAgbGVuCiAgICBwdXNoaW50IDYgLy8gNgogICAgKwogICAgZHVwCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgcHVzaGJ5dGVzIDB4MDAwNgogICAgc3dhcAogICAgY29uY2F0CiAgICBkaWcgMwogICAgbGVuCiAgICB1bmNvdmVyIDIKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5nZXRfYXNzZXRfdGV4dChhc3NldDogdWludDY0KSAtPiBieXRlczoKZ2V0X2Fzc2V0X3RleHQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDY2LTQ2NwogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgLy8gZGVmIGdldF9hc3NldF90ZXh0KHNlbGYsIGFzc2V0OiBVSW50NjQpIC0+IEFzc2V0VGV4dDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ2OAogICAgLy8gcmV0dXJuIHNlbGYuX2dldF9hc3NldF90ZXh0KGFzc2V0KQogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIF9nZXRfYXNzZXRfdGV4dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0c190ZXh0KGFzc2V0czogYnl0ZXMpIC0+IHZvaWQ6CmdldF9hc3NldHNfdGV4dDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0NzAtNDcxCiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICAvLyBkZWYgZ2V0X2Fzc2V0c190ZXh0KHNlbGYsIGFzc2V0czogYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5VSW50NjRdKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDcyCiAgICAvLyBmb3IgX2ksIGFzc2V0X2lkIGluIHVlbnVtZXJhdGUoYXNzZXRzKToKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzAgLy8gMAoKZ2V0X2Fzc2V0c190ZXh0X2Zvcl9oZWFkZXJAMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0NzIKICAgIC8vIGZvciBfaSwgYXNzZXRfaWQgaW4gdWVudW1lcmF0ZShhc3NldHMpOgogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2RpZyAwCiAgICA8CiAgICBieiBnZXRfYXNzZXRzX3RleHRfYWZ0ZXJfZm9yQDQKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDczCiAgICAvLyBsb2coc2VsZi5fZ2V0X2Fzc2V0X3RleHQoYXNzZXRfaWQubmF0aXZlKSkKICAgIGV4dHJhY3RfdWludDY0CiAgICBjYWxsc3ViIF9nZXRfYXNzZXRfdGV4dAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAxCiAgICBiIGdldF9hc3NldHNfdGV4dF9mb3JfaGVhZGVyQDEKCmdldF9hc3NldHNfdGV4dF9hZnRlcl9mb3JANDoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLl9nZXRfYXNzZXRfdGV4dF9sYWJlbHMoYXNzZXRfaWQ6IHVpbnQ2NCkgLT4gYnl0ZXM6Cl9nZXRfYXNzZXRfdGV4dF9sYWJlbHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDc3LTQ3OAogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBfZ2V0X2Fzc2V0X3RleHRfbGFiZWxzKHNlbGYsIGFzc2V0X2lkOiBVSW50NjQpIC0+IEFzc2V0VGV4dExhYmVsczoKICAgIHByb3RvIDEgMQogICAgaW50Y18wIC8vIDAKICAgIGR1cG4gMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU5CiAgICAvLyBfdiwgZXhpc3RzID0gb3AuQXNzZXRQYXJhbXNHZXQuYXNzZXRfY3JlYXRvcihhc3NldF9pZCkKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ3OQogICAgLy8gaWYgYXNzZXRfaXNfZGVsZXRlZChhc3NldF9pZCk6CiAgICBibnogX2dldF9hc3NldF90ZXh0X2xhYmVsc19hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0ODAKICAgIC8vIHJldHVybiBBc3NldFRleHRMYWJlbHMuZnJvbV9ieXRlcyhiIiIpCiAgICBieXRlY18xIC8vIDB4CiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKX2dldF9hc3NldF90ZXh0X2xhYmVsc19hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDgzCiAgICAvLyBuYW1lPWIyc3RyKGFzc2V0Lm5hbWUpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0TmFtZQogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgY2FsbHN1YiBiMnN0cgogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDg0CiAgICAvLyB1bml0X25hbWU9YjJzdHIoYXNzZXQudW5pdF9uYW1lKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldFVuaXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICBmcmFtZV9idXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0ODUKICAgIC8vIHVybD1iMnN0cihhc3NldC51cmwpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0VVJMCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICBmcmFtZV9idXJ5IDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0ODYKICAgIC8vIGxhYmVscz1zZWxmLmFzc2V0c1thc3NldF0uY29weSgpIGlmIGFzc2V0IGluIHNlbGYuYXNzZXRzIGVsc2UgZW1wdHlfbGlzdCgpLAogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMwogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBfZ2V0X2Fzc2V0X3RleHRfbGFiZWxzX3Rlcm5hcnlfZmFsc2VANAogICAgZnJhbWVfZGlnIDMKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBjaGVjayBzZWxmLmFzc2V0cyBlbnRyeSBleGlzdHMKCl9nZXRfYXNzZXRfdGV4dF9sYWJlbHNfdGVybmFyeV9tZXJnZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ4Mi00ODcKICAgIC8vIHJldHVybiBBc3NldFRleHRMYWJlbHMoCiAgICAvLyAgICAgbmFtZT1iMnN0cihhc3NldC5uYW1lKSwKICAgIC8vICAgICB1bml0X25hbWU9YjJzdHIoYXNzZXQudW5pdF9uYW1lKSwKICAgIC8vICAgICB1cmw9YjJzdHIoYXNzZXQudXJsKSwKICAgIC8vICAgICBsYWJlbHM9c2VsZi5hc3NldHNbYXNzZXRdLmNvcHkoKSBpZiBhc3NldCBpbiBzZWxmLmFzc2V0cyBlbHNlIGVtcHR5X2xpc3QoKSwKICAgIC8vICkKICAgIGZyYW1lX2RpZyAwCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgICsKICAgIGR1cAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHB1c2hieXRlcyAweDAwMDgKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMwogICAgbGVuCiAgICB1bmNvdmVyIDIKICAgICsKICAgIGR1cAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgMgogICAgZHVwCiAgICBjb3ZlciAzCiAgICBsZW4KICAgIHVuY292ZXIgMgogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCl9nZXRfYXNzZXRfdGV4dF9sYWJlbHNfdGVybmFyeV9mYWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ5CiAgICAvLyByZXR1cm4gYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5TdHJpbmddKCkKICAgIGJ5dGVjXzMgLy8gMHgwMDAwCiAgICBiIF9nZXRfYXNzZXRfdGV4dF9sYWJlbHNfdGVybmFyeV9tZXJnZUA1CgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0X3RleHRfbGFiZWxzKGFzc2V0OiB1aW50NjQpIC0+IGJ5dGVzOgpnZXRfYXNzZXRfdGV4dF9sYWJlbHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDg5LTQ5MAogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgLy8gZGVmIGdldF9hc3NldF90ZXh0X2xhYmVscyhzZWxmLCBhc3NldDogVUludDY0KSAtPiBBc3NldFRleHRMYWJlbHM6CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0OTEKICAgIC8vIHJldHVybiBzZWxmLl9nZXRfYXNzZXRfdGV4dF9sYWJlbHMoYXNzZXQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgX2dldF9hc3NldF90ZXh0X2xhYmVscwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0c190ZXh0X2xhYmVscyhhc3NldHM6IGJ5dGVzKSAtPiB2b2lkOgpnZXRfYXNzZXRzX3RleHRfbGFiZWxzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjQ5My00OTQKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfYXNzZXRzX3RleHRfbGFiZWxzKHNlbGYsIGFzc2V0czogYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5VSW50NjRdKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDk1CiAgICAvLyBmb3IgX2ksIGFzc2V0X2lkIGluIHVlbnVtZXJhdGUoYXNzZXRzKToKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzAgLy8gMAoKZ2V0X2Fzc2V0c190ZXh0X2xhYmVsc19mb3JfaGVhZGVyQDE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NDk1CiAgICAvLyBmb3IgX2ksIGFzc2V0X2lkIGluIHVlbnVtZXJhdGUoYXNzZXRzKToKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9kaWcgMAogICAgPAogICAgYnogZ2V0X2Fzc2V0c190ZXh0X2xhYmVsc19hZnRlcl9mb3JANAogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18zIC8vIDgKICAgICoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0OTYKICAgIC8vIGxvZyhzZWxmLl9nZXRfYXNzZXRfdGV4dF9sYWJlbHMoYXNzZXRfaWQubmF0aXZlKSkKICAgIGV4dHJhY3RfdWludDY0CiAgICBjYWxsc3ViIF9nZXRfYXNzZXRfdGV4dF9sYWJlbHMKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMQogICAgYiBnZXRfYXNzZXRzX3RleHRfbGFiZWxzX2Zvcl9oZWFkZXJAMQoKZ2V0X2Fzc2V0c190ZXh0X2xhYmVsc19hZnRlcl9mb3JANDoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLl9nZXRfYXNzZXRfc21hbGwoYXNzZXRfaWQ6IHVpbnQ2NCkgLT4gYnl0ZXM6Cl9nZXRfYXNzZXRfc21hbGw6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTAwLTUwMQogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBfZ2V0X2Fzc2V0X3NtYWxsKHNlbGYsIGFzc2V0X2lkOiBVSW50NjQpIC0+IEFzc2V0U21hbGw6CiAgICBwcm90byAxIDEKICAgIGludGNfMCAvLyAwCiAgICBkdXBuIDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1OQogICAgLy8gX3YsIGV4aXN0cyA9IG9wLkFzc2V0UGFyYW1zR2V0LmFzc2V0X2NyZWF0b3IoYXNzZXRfaWQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1MDIKICAgIC8vIGlmIGFzc2V0X2lzX2RlbGV0ZWQoYXNzZXRfaWQpOgogICAgYm56IF9nZXRfYXNzZXRfc21hbGxfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTAzCiAgICAvLyByZXR1cm4gQXNzZXRTbWFsbC5mcm9tX2J5dGVzKGIiIikKICAgIGJ5dGVjXzEgLy8gMHgKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpfZ2V0X2Fzc2V0X3NtYWxsX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1MDYKICAgIC8vIG5hbWU9YjJzdHIoYXNzZXQubmFtZSksCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICBmcmFtZV9idXJ5IDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1MDcKICAgIC8vIHVuaXRfbmFtZT1iMnN0cihhc3NldC51bml0X25hbWUpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0VW5pdE5hbWUKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIGNhbGxzdWIgYjJzdHIKICAgIGZyYW1lX2J1cnkgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjUwOAogICAgLy8gZGVjaW1hbHM9YXJjNC5VSW50OChhc3NldC5kZWNpbWFscyksCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXREZWNpbWFscwogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgaXRvYgogICAgZHVwCiAgICBiaXRsZW4KICAgIGludGNfMyAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBleHRyYWN0IDcgMQogICAgZnJhbWVfYnVyeSA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTA5CiAgICAvLyB0b3RhbD1hcmM0LlVJbnQ2NChhc3NldC50b3RhbCksCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRUb3RhbAogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgaXRvYgogICAgZnJhbWVfYnVyeSA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTEwCiAgICAvLyBoYXNfZnJlZXplPWFyYzQuQm9vbChhc3NldC5mcmVlemUgIT0gR2xvYmFsLnplcm9fYWRkcmVzcyksCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRGcmVlemUKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgIT0KICAgIGJ5dGVjIDEwIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTExCiAgICAvLyBoYXNfY2xhd2JhY2s9YXJjNC5Cb29sKGFzc2V0LmNsYXdiYWNrICE9IEdsb2JhbC56ZXJvX2FkZHJlc3MpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q2xhd2JhY2sKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgIT0KICAgIGJ5dGVjIDEwIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgZnJhbWVfYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTEyCiAgICAvLyBsYWJlbHM9c2VsZi5hc3NldHNbYXNzZXRdLmNvcHkoKSBpZiBhc3NldCBpbiBzZWxmLmFzc2V0cyBlbHNlIGVtcHR5X2xpc3QoKSwKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgZHVwCiAgICBmcmFtZV9idXJ5IDQKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYnogX2dldF9hc3NldF9zbWFsbF90ZXJuYXJ5X2ZhbHNlQDQKICAgIGZyYW1lX2RpZyA0CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hc3NldHMgZW50cnkgZXhpc3RzCgpfZ2V0X2Fzc2V0X3NtYWxsX3Rlcm5hcnlfbWVyZ2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1MDUtNTEzCiAgICAvLyByZXR1cm4gQXNzZXRTbWFsbCgKICAgIC8vICAgICBuYW1lPWIyc3RyKGFzc2V0Lm5hbWUpLAogICAgLy8gICAgIHVuaXRfbmFtZT1iMnN0cihhc3NldC51bml0X25hbWUpLAogICAgLy8gICAgIGRlY2ltYWxzPWFyYzQuVUludDgoYXNzZXQuZGVjaW1hbHMpLAogICAgLy8gICAgIHRvdGFsPWFyYzQuVUludDY0KGFzc2V0LnRvdGFsKSwKICAgIC8vICAgICBoYXNfZnJlZXplPWFyYzQuQm9vbChhc3NldC5mcmVlemUgIT0gR2xvYmFsLnplcm9fYWRkcmVzcyksCiAgICAvLyAgICAgaGFzX2NsYXdiYWNrPWFyYzQuQm9vbChhc3NldC5jbGF3YmFjayAhPSBHbG9iYWwuemVyb19hZGRyZXNzKSwKICAgIC8vICAgICBsYWJlbHM9c2VsZi5hc3NldHNbYXNzZXRdLmNvcHkoKSBpZiBhc3NldCBpbiBzZWxmLmFzc2V0cyBlbHNlIGVtcHR5X2xpc3QoKSwKICAgIC8vICkKICAgIGZyYW1lX2RpZyAyCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAxNiAvLyAxNgogICAgKwogICAgZHVwCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgcHVzaGJ5dGVzIDB4MDAxMAogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgMwogICAgZHVwCiAgICBjb3ZlciAzCiAgICBsZW4KICAgIHVuY292ZXIgMgogICAgKwogICAgc3dhcAogICAgZnJhbWVfZGlnIDUKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDYKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDAKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDEKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIHB1c2hpbnQgMTA1IC8vIDEwNQogICAgc3dhcAogICAgc2V0Yml0CiAgICBzd2FwCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpfZ2V0X2Fzc2V0X3NtYWxsX3Rlcm5hcnlfZmFsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0OQogICAgLy8gcmV0dXJuIGFyYzQuRHluYW1pY0FycmF5W2FyYzQuU3RyaW5nXSgpCiAgICBieXRlY18zIC8vIDB4MDAwMAogICAgYiBfZ2V0X2Fzc2V0X3NtYWxsX3Rlcm5hcnlfbWVyZ2VANQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy5hc3NldF9sYWJlbGluZy5jb250cmFjdC5Bc3NldExhYmVsaW5nLmdldF9hc3NldF9zbWFsbChhc3NldDogdWludDY0KSAtPiBieXRlczoKZ2V0X2Fzc2V0X3NtYWxsOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjUxNS01MTYKICAgIC8vIEBhYmltZXRob2QocmVhZG9ubHk9VHJ1ZSkKICAgIC8vIGRlZiBnZXRfYXNzZXRfc21hbGwoc2VsZiwgYXNzZXQ6IFVJbnQ2NCkgLT4gQXNzZXRTbWFsbDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjUxNwogICAgLy8gcmV0dXJuIHNlbGYuX2dldF9hc3NldF9zbWFsbChhc3NldCkKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiBfZ2V0X2Fzc2V0X3NtYWxsCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5nZXRfYXNzZXRzX3NtYWxsKGFzc2V0czogYnl0ZXMpIC0+IHZvaWQ6CmdldF9hc3NldHNfc21hbGw6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTE5LTUyMAogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgLy8gZGVmIGdldF9hc3NldHNfc21hbGwoc2VsZiwgYXNzZXRzOiBhcmM0LkR5bmFtaWNBcnJheVthcmM0LlVJbnQ2NF0pIC0+IE5vbmU6CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1MjEKICAgIC8vIGZvciBfaSwgYXNzZXRfaWQgaW4gdWVudW1lcmF0ZShhc3NldHMpOgogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMCAvLyAwCgpnZXRfYXNzZXRzX3NtYWxsX2Zvcl9oZWFkZXJAMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1MjEKICAgIC8vIGZvciBfaSwgYXNzZXRfaWQgaW4gdWVudW1lcmF0ZShhc3NldHMpOgogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2RpZyAwCiAgICA8CiAgICBieiBnZXRfYXNzZXRzX3NtYWxsX2FmdGVyX2ZvckA0CiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzMgLy8gOAogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjUyMgogICAgLy8gbG9nKHNlbGYuX2dldF9hc3NldF9zbWFsbChhc3NldF9pZC5uYXRpdmUpKQogICAgZXh0cmFjdF91aW50NjQKICAgIGNhbGxzdWIgX2dldF9hc3NldF9zbWFsbAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAxCiAgICBiIGdldF9hc3NldHNfc21hbGxfZm9yX2hlYWRlckAxCgpnZXRfYXNzZXRzX3NtYWxsX2FmdGVyX2ZvckA0OgogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuX2dldF9hc3NldF9mdWxsKGFzc2V0X2lkOiB1aW50NjQpIC0+IGJ5dGVzOgpfZ2V0X2Fzc2V0X2Z1bGw6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTI2LTUyNwogICAgLy8gQHN1YnJvdXRpbmUKICAgIC8vIGRlZiBfZ2V0X2Fzc2V0X2Z1bGwoc2VsZiwgYXNzZXRfaWQ6IFVJbnQ2NCkgLT4gQXNzZXRGdWxsOgogICAgcHJvdG8gMSAxCiAgICBpbnRjXzAgLy8gMAogICAgZHVwbiAxNAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU5CiAgICAvLyBfdiwgZXhpc3RzID0gb3AuQXNzZXRQYXJhbXNHZXQuYXNzZXRfY3JlYXRvcihhc3NldF9pZCkKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjUyOAogICAgLy8gaWYgYXNzZXRfaXNfZGVsZXRlZChhc3NldF9pZCk6CiAgICBibnogX2dldF9hc3NldF9mdWxsX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjUyOQogICAgLy8gcmV0dXJuIEFzc2V0RnVsbC5mcm9tX2J5dGVzKGIiIikKICAgIGJ5dGVjXzEgLy8gMHgKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpfZ2V0X2Fzc2V0X2Z1bGxfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjUzMQogICAgLy8gcmVzZXJ2ZV9hY2N0ID0gQWNjb3VudChhc3NldC5yZXNlcnZlLmJ5dGVzKQogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0UmVzZXJ2ZQogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBmcmFtZV9idXJ5IDIKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1MzQKICAgIC8vIGlmIHJlc2VydmVfYWNjdC5pc19vcHRlZF9pbihhc3NldCkKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1MzMtNTM1CiAgICAvLyBhc3NldC5iYWxhbmNlKHJlc2VydmVfYWNjdCkKICAgIC8vIGlmIHJlc2VydmVfYWNjdC5pc19vcHRlZF9pbihhc3NldCkKICAgIC8vIGVsc2UgVUludDY0KDApCiAgICBieiBfZ2V0X2Fzc2V0X2Z1bGxfdGVybmFyeV9mYWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTMzCiAgICAvLyBhc3NldC5iYWxhbmNlKHJlc2VydmVfYWNjdCkKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQogICAgYXNzZXJ0IC8vIGFjY291bnQgb3B0ZWQgaW50byBhc3NldAoKX2dldF9hc3NldF9mdWxsX3Rlcm5hcnlfbWVyZ2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1MzgKICAgIC8vIG5hbWU9YjJzdHIoYXNzZXQubmFtZSksCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXROYW1lCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBjYWxsc3ViIGIyc3RyCiAgICBmcmFtZV9idXJ5IDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1MzkKICAgIC8vIHVuaXRfbmFtZT1iMnN0cihhc3NldC51bml0X25hbWUpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0VW5pdE5hbWUKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIGNhbGxzdWIgYjJzdHIKICAgIGZyYW1lX2J1cnkgNAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU0MAogICAgLy8gdXJsPWIyc3RyKGFzc2V0LnVybCksCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXRVUkwKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIGNhbGxzdWIgYjJzdHIKICAgIGZyYW1lX2J1cnkgNQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU0MQogICAgLy8gdG90YWw9YXJjNC5VSW50NjQoYXNzZXQudG90YWwpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0VG90YWwKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIGl0b2IKICAgIGZyYW1lX2J1cnkgOAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU0MgogICAgLy8gZGVjaW1hbHM9YXJjNC5VSW50OChhc3NldC5kZWNpbWFscyksCiAgICBmcmFtZV9kaWcgLTEKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXREZWNpbWFscwogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgaXRvYgogICAgZHVwCiAgICBiaXRsZW4KICAgIGludGNfMyAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBleHRyYWN0IDcgMQogICAgZnJhbWVfYnVyeSA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTQzCiAgICAvLyBjcmVhdG9yPWFyYzQuQWRkcmVzcyhhc3NldC5jcmVhdG9yKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKICAgIHN3YXAKICAgIGZyYW1lX2J1cnkgMTIKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NDQKICAgIC8vIG1hbmFnZXI9YXJjNC5BZGRyZXNzKGFzc2V0Lm1hbmFnZXIpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0TWFuYWdlcgogICAgc3dhcAogICAgZnJhbWVfYnVyeSAxMwogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU0NQogICAgLy8gZnJlZXplPWFyYzQuQWRkcmVzcyhhc3NldC5mcmVlemUpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0RnJlZXplCiAgICBzd2FwCiAgICBmcmFtZV9idXJ5IDE0CiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTQ2CiAgICAvLyBjbGF3YmFjaz1hcmM0LkFkZHJlc3MoYXNzZXQuY2xhd2JhY2spLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q2xhd2JhY2sKICAgIHN3YXAKICAgIGZyYW1lX2J1cnkgMTAKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NDcKICAgIC8vIHJlc2VydmU9YXJjNC5BZGRyZXNzKGFzc2V0LnJlc2VydmUpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0UmVzZXJ2ZQogICAgc3dhcAogICAgZnJhbWVfYnVyeSAxMQogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU0OAogICAgLy8gZGVmYXVsdF9mcm96ZW49YXJjNC5Cb29sKGFzc2V0LmRlZmF1bHRfZnJvemVuKSwKICAgIGZyYW1lX2RpZyAtMQogICAgYXNzZXRfcGFyYW1zX2dldCBBc3NldERlZmF1bHRGcm96ZW4KICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIGJ5dGVjIDEwIC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTUwCiAgICAvLyBtZXRhZGF0YV9oYXNoPWFyYzQuRHluYW1pY0J5dGVzKGFzc2V0Lm1ldGFkYXRhX2hhc2gpLAogICAgZnJhbWVfZGlnIC0xCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0TWV0YWRhdGFIYXNoCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTQ5CiAgICAvLyByZXNlcnZlX2JhbGFuY2U9YXJjNC5VSW50NjQocmVzZXJ2ZV9iYWxhbmNlKSwKICAgIGl0b2IKICAgIGZyYW1lX2J1cnkgOQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU1MQogICAgLy8gbGFiZWxzPXNlbGYuYXNzZXRzW2Fzc2V0XS5jb3B5KCkgaWYgYXNzZXQgaW4gc2VsZi5hc3NldHMgZWxzZSBlbXB0eV9saXN0KCksCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGR1cAogICAgZnJhbWVfYnVyeSA2CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJ6IF9nZXRfYXNzZXRfZnVsbF90ZXJuYXJ5X2ZhbHNlQDcKICAgIGZyYW1lX2RpZyA2CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gY2hlY2sgc2VsZi5hc3NldHMgZW50cnkgZXhpc3RzCgpfZ2V0X2Fzc2V0X2Z1bGxfdGVybmFyeV9tZXJnZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjUzNy01NTIKICAgIC8vIHJldHVybiBBc3NldEZ1bGwoCiAgICAvLyAgICAgbmFtZT1iMnN0cihhc3NldC5uYW1lKSwKICAgIC8vICAgICB1bml0X25hbWU9YjJzdHIoYXNzZXQudW5pdF9uYW1lKSwKICAgIC8vICAgICB1cmw9YjJzdHIoYXNzZXQudXJsKSwKICAgIC8vICAgICB0b3RhbD1hcmM0LlVJbnQ2NChhc3NldC50b3RhbCksCiAgICAvLyAgICAgZGVjaW1hbHM9YXJjNC5VSW50OChhc3NldC5kZWNpbWFscyksCiAgICAvLyAgICAgY3JlYXRvcj1hcmM0LkFkZHJlc3MoYXNzZXQuY3JlYXRvciksCiAgICAvLyAgICAgbWFuYWdlcj1hcmM0LkFkZHJlc3MoYXNzZXQubWFuYWdlciksCiAgICAvLyAgICAgZnJlZXplPWFyYzQuQWRkcmVzcyhhc3NldC5mcmVlemUpLAogICAgLy8gICAgIGNsYXdiYWNrPWFyYzQuQWRkcmVzcyhhc3NldC5jbGF3YmFjayksCiAgICAvLyAgICAgcmVzZXJ2ZT1hcmM0LkFkZHJlc3MoYXNzZXQucmVzZXJ2ZSksCiAgICAvLyAgICAgZGVmYXVsdF9mcm96ZW49YXJjNC5Cb29sKGFzc2V0LmRlZmF1bHRfZnJvemVuKSwKICAgIC8vICAgICByZXNlcnZlX2JhbGFuY2U9YXJjNC5VSW50NjQocmVzZXJ2ZV9iYWxhbmNlKSwKICAgIC8vICAgICBtZXRhZGF0YV9oYXNoPWFyYzQuRHluYW1pY0J5dGVzKGFzc2V0Lm1ldGFkYXRhX2hhc2gpLAogICAgLy8gICAgIGxhYmVscz1zZWxmLmFzc2V0c1thc3NldF0uY29weSgpIGlmIGFzc2V0IGluIHNlbGYuYXNzZXRzIGVsc2UgZW1wdHlfbGlzdCgpLAogICAgLy8gKQogICAgZnJhbWVfZGlnIDMKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDE4OCAvLyAxODgKICAgICsKICAgIGR1cAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHB1c2hieXRlcyAweDAwYmMKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgY292ZXIgMwogICAgbGVuCiAgICB1bmNvdmVyIDIKICAgICsKICAgIGR1cAogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgNQogICAgZHVwCiAgICBjb3ZlciAzCiAgICBsZW4KICAgIHVuY292ZXIgMgogICAgKwogICAgc3dhcAogICAgZnJhbWVfZGlnIDgKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDcKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDEyCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAxMwogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgMTQKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDEwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAxMQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgMAogICAgY29uY2F0CiAgICBkaWcgMQogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMwogICAgbGVuCiAgICB1bmNvdmVyIDIKICAgICsKICAgIHN3YXAKICAgIGZyYW1lX2RpZyA5CiAgICBjb25jYXQKICAgIHN3YXAKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBjb25jYXQKICAgIHVuY292ZXIgNAogICAgY29uY2F0CiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKX2dldF9hc3NldF9mdWxsX3Rlcm5hcnlfZmFsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo0OQogICAgLy8gcmV0dXJuIGFyYzQuRHluYW1pY0FycmF5W2FyYzQuU3RyaW5nXSgpCiAgICBieXRlY18zIC8vIDB4MDAwMAogICAgYiBfZ2V0X2Fzc2V0X2Z1bGxfdGVybmFyeV9tZXJnZUA4CgpfZ2V0X2Fzc2V0X2Z1bGxfdGVybmFyeV9mYWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjUzNQogICAgLy8gZWxzZSBVSW50NjQoMCkKICAgIGludGNfMCAvLyAwCiAgICBiIF9nZXRfYXNzZXRfZnVsbF90ZXJuYXJ5X21lcmdlQDUKCgovLyBzbWFydF9jb250cmFjdHMuYXNzZXRfbGFiZWxpbmcuY29udHJhY3QuQXNzZXRMYWJlbGluZy5nZXRfYXNzZXRfZnVsbChhc3NldDogdWludDY0KSAtPiBieXRlczoKZ2V0X2Fzc2V0X2Z1bGw6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTU0LTU1NQogICAgLy8gQGFiaW1ldGhvZChyZWFkb25seT1UcnVlKQogICAgLy8gZGVmIGdldF9hc3NldF9mdWxsKHNlbGYsIGFzc2V0OiBVSW50NjQpIC0+IEFzc2V0RnVsbDoKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fzc2V0X2xhYmVsaW5nL2NvbnRyYWN0LnB5OjU1NgogICAgLy8gcmV0dXJuIHNlbGYuX2dldF9hc3NldF9mdWxsKGFzc2V0KQogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIF9nZXRfYXNzZXRfZnVsbAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzLmFzc2V0X2xhYmVsaW5nLmNvbnRyYWN0LkFzc2V0TGFiZWxpbmcuZ2V0X2Fzc2V0c19mdWxsKGFzc2V0czogYnl0ZXMpIC0+IHZvaWQ6CmdldF9hc3NldHNfZnVsbDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NTgtNTU5CiAgICAvLyBAYWJpbWV0aG9kKHJlYWRvbmx5PVRydWUpCiAgICAvLyBkZWYgZ2V0X2Fzc2V0c19mdWxsKHNlbGYsIGFzc2V0czogYXJjNC5EeW5hbWljQXJyYXlbYXJjNC5VSW50NjRdKSAtPiBOb25lOgogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTYwCiAgICAvLyBmb3IgX2ksIGFzc2V0X2lkIGluIHVlbnVtZXJhdGUoYXNzZXRzKToKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzAgLy8gMAoKZ2V0X2Fzc2V0c19mdWxsX2Zvcl9oZWFkZXJAMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hc3NldF9sYWJlbGluZy9jb250cmFjdC5weTo1NjAKICAgIC8vIGZvciBfaSwgYXNzZXRfaWQgaW4gdWVudW1lcmF0ZShhc3NldHMpOgogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2RpZyAwCiAgICA8CiAgICBieiBnZXRfYXNzZXRzX2Z1bGxfYWZ0ZXJfZm9yQDQKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICAvLyBzbWFydF9jb250cmFjdHMvYXNzZXRfbGFiZWxpbmcvY29udHJhY3QucHk6NTYxCiAgICAvLyBsb2coc2VsZi5fZ2V0X2Fzc2V0X2Z1bGwoYXNzZXRfaWQubmF0aXZlKSkKICAgIGV4dHJhY3RfdWludDY0CiAgICBjYWxsc3ViIF9nZXRfYXNzZXRfZnVsbAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAxCiAgICBiIGdldF9hc3NldHNfZnVsbF9mb3JfaGVhZGVyQDEKCmdldF9hc3NldHNfZnVsbF9hZnRlcl9mb3JANDoKICAgIHJldHN1Ygo=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" }, "byteCode": { "approval": "CiAGAAECCP////8PgICAgBAmDgQVH3x1AAtFUlI6Tk9FWElTVAIAAAgAAAAAAAAAAAVhZG1pbgpFUlI6TEVOR1RICkVSUjpFWElTVFMLRVJSOk5PRU1QVFkCAAIBAApFUlI6VU5BVVRIAgABAgAFMRhAAAUnBTEAZzEbQQOmgiIEjw19jgQzouL3BLcrt48El2zeZAQX5pGuBHZl0rQEclYW5wT6wc8bBG/YFIwEtMULnwSi3SJHBKN96hEEE1qyHgRo8Y76BJf0CooEwu10PwSmfwPCBJejISMEqu4MYQS2w59oBGNb42IEcJOxDQRwrJmtBNmivZwEdsZSjgRR93v/BCDZ8kwEVUC4CgQHEOXEBG8XzdUEekzkuQQ2bFGvBDSkj7wEA7qY2zYaAI4iAp8CgQJqAkwCOgIkAhUB/QHgAcgBsgGaAYUBbQFSATwBKQEaAQYA9wDjANQAwACxAJ0AjgB6AGsAVwBIADQAJQARAAIiQzEZFEQxGEQ2GgGID7gjQzEZFEQxGEQ2GgEXiA+fKExQsCNDMRkURDEYRDYaAYgOLyNDMRkURDEYRDYaAReIDhYoTFCwI0MxGRREMRhENhoBiA0qI0MxGRREMRhENhoBF4gNEShMULAjQzEZFEQxGEQ2GgGIDFIjQzEZFEQxGEQ2GgEXiAw5KExQsCNDMRkURDEYRDYaAYgLsiNDMRkURDEYRDYaAReIC5koTFCwI0MxGRREMRhENhoBiArjI0MxGRREMRhENhoBF4gKyihMULAjQzEZFEQxGEQ2GgGICkwjQzEZFEQxGEQ2GgEXiAozKExQsCNDMRkURDEYRDYaAYgJnSNDMRkURDEYRDYaAReICYQoTFCwI0MxGRREMRhENhoBiAkLI0MxGRREMRhENhoBiAiXKExQsCNDMRkURDEYRDYaARfAMIgIayhMULAjQzEZFEQxGEQ2GgEXNhoCVwIAiAgyFihMULAjQzEZFEQxGEQ2GgFXAgA2GgIXwDCIB0QjQzEZFEQxGEQ2GgFXAgA2GgKIBv8jQzEZFEQxGEQ2GgFXAgA2GgIXwDCIBtcjQzEZFEQxGEQ2GgEXwByIBcYoTFCwI0MxGRREMRhENhoBF8AcNhoCVwIAiASwI0MxGRREMRhENhoBF8AcNhoCVwIAiARpFihMULAjQzEZFEQxGEQ2GgEXwBw2GgJXAgCIA9MjQzEZFEQxGEQ2GgGIAvwjQzEZFEQxGEQ2GgFXAgCIAtcoTFCwI0MxGRREMRhENhoBVwIAiAKJI0MxGRREMRhENhoBVwIANhoCVwIANhoDVwIAiAH6I0MxGRREMRhENhoBVwIAiAHTFihMULAjQzEZFEQxGEQ2GgFXAgA2GgJXAgA2GgNXAgCIAVojQzEZFEQxGEQ2GgEXwByIATwjQzEZjQYAE/0//T/9PwALAANC/TwxGESIAQ0jQzEYRIgBASNDMRgURCNDigMBi/0iWUmL/whMJAskCEsBFlcGAk4Ci/0kSwJSi/8kC69Qi/0Vi/1PA08CUlCL/lBMJAtJIkyLA4sCDEEAI4sESRZXBgKLAYsDSU4ETwJdSYwBSwFZJAgIjAQkCIwDQv/ViwCLAVCMAImKBAEpSYv+JAuL/CQLIosEiwMMQQAci/2LBElOAlmLAggWVwYCiwFMUIwBJAiMBEL/3Iv9FYwAIowEiwSLAgxBAByL/4sESU4CWYsACBZXBgKLAUxQjAEkCIwEQv/ci/yL/ggWVwYCiwFQi/2LA4sAUlCL/xWL/4sCTwJSUIwAiYoBAYv/FRZXBgKL/1CJiAAFiYgAAYkxACInBWVEEkAABCcLsACJigEAiP/qJwWL/2eJigMAiP/ei/29RQFBAAQnB7AAi/0VJBJAAAQnBrAAi/4VFlcGAov+UIv/FRZXBgKL/1BLARWBFAgWVwYCgAIAFExQJwRQJwRQTwJQTFCL/bxIi/1Mv4mKAQGL/xUkEkAABCcGsACL/71FAYmKAwCI/3OL/b1FAUAAAyqwAIv9vkSL/hUWVwYCi/5QSwEiWUsCIksCWEsDJFlLBBVPBUsCTwJSTwJLBFBMUExPAglPAhVLAiRZCEwJFlcGAlwCi/8VFlcGAov/UEsBJFlPAiJPAlhMUIv9vEiL/Uy/iYoBAIj/Aov/vUUBQAADKrAAi/++RFcMCCcEqEAABCcIsACL/75EVwQIJwSoQAAEJwiwAIv/vEiJigEBi/+9RQFAAAMqsACL/75EiYoBAIv/IlkiiwGLAAxBACKL/1cCAIsBSU4CJAtLAUxZSlkkCFhXAgC+RLAjCIwBQv/WiYoBADEAIicFZUQSQQABiYv/iAABiYoBADEAi/+IABxJIQUTQQARiwAhBBNBAAkjQAAEJwuwAIkiQv/0igIBIilJi/69RQFAAAUhBYwAiYv+vkxJTgKMAEQiWYwBIowCiwKLAQxBACmLAFcCAIsCJAtLAUxZSlkkCFhXAgCL/xJBAAWLAowAiYsCIwiMAkL/zyEEjACJigIAi/+I/2OL/71FAUAAAyqwAIv+vUUBQQBBi/6L/4j/hCEEEkAABCcHsACL/r5Ei/8VFlcGAov/UCOI/LaL/rxIi/5Mv4v/vkRJgQxbIwgWXAyL/7xIi/9Mv4mL/xUWVwYCi/9QJwlMUCcMTFCL/rxIi/5Mv0L/zYoCASmL/xUkEkAABCcGsACL/ov/iP8WSYwAIQUTQQALiwAhBBNBAAMjTIkiQv/6igIAIkcEKUcCi/+I/rWL/71FAUAAAyqwAIv+vUUBQAADKrAAi/6L/4j+00mMByEEE0EAwosHIQUTQQC6I0AAAyqwAIv/vkxJTgKMAERXDAiACAAAAAAAAAABpUAAC4sAVwQIJwSoQQCJI0AABCcIsACLAEmBDFsjCRZcDIv/vEiL/0y/i/6+RCJZIxJBAAWL/rxIiSuMAov+vkxJTgKMAUQiWYwFIowGiwaLBQxBADiLAVcCAIsGSU4CJAtLAUxZSlkkCFiMBIsHE4sCjANBAAqLAosEI4j7c4wDiwOMAosGIwiMBkL/wIv+vEiL/osCv4kiQv90IkL/Q4oBAYv/vUUBQQAFi/++RIkriYoCASJJKUmL/xUkEkAABCcGsACL/hZJjAG9RQFAAAUhBYwAiYsBvkxJTgKMAEQiWYwCIowDiwOLAgxBACmLAFcCAIsDJAtLAUxZSlkkCFhXAgCL/xJBAAWLA4wAiYsDIwiMA0L/zyEEjACJigIAIov/cQtFAUAAAyqwAIv+vUUBQAADKrAAi/8WSYwAvUUBQQA/i/+L/oj/ZyEEEkAABCcHsACLAEm+RIv+FRZXBgKL/lAjiPqKSwG8SL+L/r5ESYEEWyMIFlwEi/68SIv+TL+Ji/4VFlcGAov+UCcJTFAnDExQiwBJvEhMv0L/zooCAIv+iPzXi/6L/4j/b4mKAgCL/oj8x4v/IlkiiwGLAAxBABqL/1cCAIsBSU4CJQtbi/5MiP9GIwiMAUL/3omKAgAiRwMpRwKL/r1FAUAAAyqwAIv+iPyGIowGi/8WSYwDvkQiWSMSQQBIiwO+RElXAgBMIllESSJZSlkkCFhXAgCL/hJBACWLA7xII4wGiwZAAAMqsACL/r5ESYEEWyMJFlwEi/68SIv+TL+JIowGQv/cK4wBiwO+TElOAowARCJZjAUijASLBIsFDEEAN4sAVwIAiwQkC0sBTFlKWSQIWEmMAlcCAIv+E0EAE4sBiwIjiPlejAGLBCMIjARC/8cjjAZC//GLA0m8SIsBv0L/fooCAYv+i/+I/fhJIQUTQQALiwAhBBNBAAMjTIkiTImKAQGL/xZJvUUBQQAGiwC+REyJK0yJigEBIiuL/yJZIosDiwIMQQBOi/9XAgCLAyULWxZJjAC9RQFBACKLAL5EJwlMUIsBSSJZTFcCACNPA4j5O4wBiwMjCIwDQv/CiwFJIllMVwIAI4AEAAIAAIj5HYwBQv/fiwGMAImKAQAii/8iWSKLAosBDEEAJ4v/VwIAiwIlC1sWSYwAvUUBQQAOiwC+RLCLAiMIjAJC/9YrsEL/8omKAQGL/3ELRQFAAAIpiYv/cQNEiPlEi/9xAUQWSZMlDkRXBwGAAgADTFBMUImKAQGL/4j/y4mKAQCL/yJZIosBiwAMQQAYi/9XAgCLAUlOAiULW4j/qrAjCIwBQv/giYoBASJHAov/cQtFAUAABCmMAImL/3EDRIj44IwAi/9xAUQWSZMlDkRXBwGMAov/FkmMAb1FAUEAHYsBvkSLAEkVgQUIJw2LAlBMFlcGAlBMUExQjACJK0L/44oBAYv/iP+eiYoBAIv/IlkiiwGLAAxBABiL/1cCAIsBSU4CJQtbiP99sCMIjAFC/+CJigEBi/9xC0UBQAACKYmL/3EERIj4WYv/cQNEiPhRi/9xAUQWSZMlDkRXBwFLAhWBBQgWVwYCJw1MUExQTwJQTFCJigEBi/+I/7aJigEAi/8iWSKLAYsADEEAGIv/VwIAiwFJTgIlC1uI/5WwIwiMAUL/4ImKAQEiRwOL/3ELRQFAAAQpjACJi/9xBESI9+CMAIv/cQNEiPfWjAGL/3EBRBZJkyUORFcHAYwDi/8WSYwCvUUBQQAziwK+RIsASRWBBwhJFlcGAoACAAdMUIsBSU4DFU8CCEyLA1BMFlcGAlBPAlBMUExQjACJK0L/zYoBAYv/iP9+iYoBAIv/IlkiiwGLAAxBABiL/1cCAIsBSU4CJQtbiP9dsCMIjAFC/+CJigEBi/9xC0UBQAACKYmL/3EERIj3OYv/cQNEiPcxi/9xBUSI9ylLAhWBBghJFlcGAoACAAZMUEsDFU8CCBZXBgJQTwNQTwJQTFCJigEBi/+I/62JigEAi/8iWSKLAYsADEEAGIv/VwIAiwFJTgIlC1uI/4ywIwiMAUL/4ImKAQEiRwOL/3ELRQFAAAQpjACJi/9xBESI9reMAIv/cQNEiPatjAGL/3EFRIj2o4wCi/8WSYwDvUUBQQBCiwO+RIsASRUlCEkWVwYCgAIACExQiwFJTgMVTwIISRZXBgJPAkxQiwJJTgMVTwIIFlcGAlBPA1BPAlBMUExQjACJK0L/vooBAYv/iP91iYoBAIv/IlkiiwGLAAxBABiL/1cCAIsBSU4CJQtbiP9UsCMIjAFC/+CJigEBIkcGi/9xC0UBQAAEKYwAiYv/cQREiPYCjAKL/3EDRIj1+IwDi/9xAUQWSZMlDkRXBwGMBYv/cQBEFowGi/9xCUQyAxMnCiJPAlSMAIv/cQpEMgMTJwoiTwJUjAGL/xZJjAS9RQFBAEGLBL5EiwJJFYEQCEkWVwYCgAIAEExQiwNJTgMVTwIITIsFUIsGUIsAUIsBIlOBaUxUTBZXBgJQTwJQTFBMUIwAiStC/7+KAQGL/4j/SImKAQCL/yJZIosBiwAMQQAYi/9XAgCLAUlOAiULW4j/J7AjCIwBQv/giYoBASJHDov/cQtFAUAABCmMAImL/3EITElOAowCRIv/cABFAUEBCYsCi/9wAESL/3EERIj1BYwDi/9xA0SI9PuMBIv/cQVEiPTxjAWL/3EARBaMCIv/cQFEFkmTJQ5EVwcBjAeL/3ELTIwMRIv/cQdMjA1Ei/9xCUyMDkSL/3EKTIwKRIv/cQhMjAtEi/9xAkQnCiJPAlSMAIv/cQZESRUWVwYCTFCMARaMCYv/FkmMBr1FAUEAdYsGvkSLA0kVgbwBCEkWVwYCgAIAvExQiwRJTgMVTwIISRZXBgJPAkxQiwVJTgMVTwIITIsIUIsHUIsMUIsNUIsOUIsKUIsLUIsAUEsBFlcGAlCLAUlOAxVPAghMiwlQTBZXBgJQTwRQTwNQTwJQTFBMUIwAiStC/4siQv76igEBi/+I/sSJigEAi/8iWSKLAYsADEEAGIv/VwIAiwFJTgIlC1uI/qOwIwiMAUL/4Ik=", "clear": "CoEBQw==" }, "compilerInfo": { "compiler": "puya", "compilerVersion": { "major": 4, "minor": 6, "patch": 1 } }, "events": [], "templateVariables": {} }